/* Do not modify this file. */
/* It was automatically generated by ../../tools/process-x11-xcb.pl
   using xcbproto version xcb-proto-1.17.0 */
/*
 * Copyright 2008, 2009, 2013, 2014 Open Text Corporation <pharris[AT]opentext.com>
 *
 * Wireshark - Network traffic analyzer
 * By Gerald Combs <gerald[AT]wireshark.org>
 * Copyright 1998 Gerald Combs
 *
 * SPDX-License-Identifier: GPL-2.0-or-later
 */

#include "x11-glx-render-enum.h"

static void mesa_CallList(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_render_CallList_list, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}

static void mesa_CallLists(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    int n;
    int type;
    n = tvb_get_uint32(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_glx_render_CallLists_n, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    type = tvb_get_uint32(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_glx_render_CallLists_type, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    switch(type) {
    case 0x1400: /* BYTE */
        listOfByte(tvb, offsetp, t, hf_x11_glx_render_CallLists_lists_signed, n, byte_order);
        proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, (length - 8 - n), ENC_NA);
        *offsetp += (length - 8 - n);
        break;
    case 0x1401: /* UNSIGNED_BYTE */
        listOfByte(tvb, offsetp, t, hf_x11_glx_render_CallLists_lists_unsigned, n, byte_order);
        proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, (length - 8 - n), ENC_NA);
        *offsetp += (length - 8 - n);
        break;
    case 0x1402: /* SHORT */
        listOfInt16(tvb, offsetp, t, hf_x11_glx_render_CallLists_lists, hf_x11_glx_render_CallLists_lists_item_int16, n, byte_order);
        proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, (length - 8 - 2 * n), ENC_NA);
        *offsetp += (length - 8 - 2 * n);
        break;
    case 0x1403: /* UNSIGNED_SHORT */
        listOfCard16(tvb, offsetp, t, hf_x11_glx_render_CallLists_lists, hf_x11_glx_render_CallLists_lists_item_card16, n, byte_order);
        proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, (length - 8 - 2 * n), ENC_NA);
        *offsetp += (length - 8 - 2 * n);
        break;
    case 0x1404: /* INT */
        listOfInt32(tvb, offsetp, t, hf_x11_glx_render_CallLists_lists, hf_x11_glx_render_CallLists_lists_item_int32, n, byte_order);
        break;
    case 0x1405: /* UNSIGNED_INT */
        listOfCard32(tvb, offsetp, t, hf_x11_glx_render_CallLists_lists, hf_x11_glx_render_CallLists_lists_item_card32, n, byte_order);
        break;
    case 0x1406: /* FLOAT */
        listOfFloat(tvb, offsetp, t, hf_x11_glx_render_CallLists_lists, hf_x11_glx_render_CallLists_lists_item_float, n, byte_order);
        break;
    case 0x1407: /* 2_BYTES */
        listOfCard16(tvb, offsetp, t, hf_x11_glx_render_CallLists_lists, hf_x11_glx_render_CallLists_lists_item_card16, n, ENC_BIG_ENDIAN);
        proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, (length - 8 - 2 * n), ENC_NA);
        *offsetp += (length - 8 - 2 * n);
        break;
    case 0x1408: /* 3_BYTES */
        UNDECODED(3 * n);
        proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, (length - 8 - 3 * n), ENC_NA);
        *offsetp += (length - 8 - 3 * n);
        break;
    case 0x1409: /* 4_BYTES */
        listOfCard32(tvb, offsetp, t, hf_x11_glx_render_CallLists_lists, hf_x11_glx_render_CallLists_lists_item_card32, n, ENC_BIG_ENDIAN);
        break;
    case 0x140B: /* HALF_FLOAT */
        UNDECODED(2 * n);
        proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, (length - 8 - 2 * n), ENC_NA);
        *offsetp += (length - 8 - 2 * n);
        break;
    default:     /* Unknown */
        UNDECODED(length - 8);
        break;
    }
}

static void mesa_ListBase(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_render_ListBase_base, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}

static void mesa_Begin(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_render_Begin_mode, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}

static void mesa_Bitmap(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_render_Bitmap_swapbytes, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_glx_render_Bitmap_lsbfirst, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 2, ENC_NA);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_glx_render_Bitmap_rowlength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_Bitmap_skiprows, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_Bitmap_skippixels, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_Bitmap_alignment, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_Bitmap_width, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_Bitmap_height, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_Bitmap_xorig, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_Bitmap_yorig, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_Bitmap_xmove, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_Bitmap_ymove, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    listOfByte(tvb, offsetp, t, hf_x11_glx_render_Bitmap_bitmap, (length - 44) / 1, byte_order);
}

static void mesa_Color3bv(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    listOfByte(tvb, offsetp, t, hf_x11_glx_render_Color3bv_v, 3, byte_order);
}

static void mesa_Color3dv(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    listOfDouble(tvb, offsetp, t, hf_x11_glx_render_Color3dv_v, hf_x11_glx_render_Color3dv_v_item, 3, byte_order);
}

static void mesa_Color3fv(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    listOfFloat(tvb, offsetp, t, hf_x11_glx_render_Color3fv_v, hf_x11_glx_render_Color3fv_v_item, 3, byte_order);
}

static void mesa_Color3iv(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    listOfInt32(tvb, offsetp, t, hf_x11_glx_render_Color3iv_v, hf_x11_glx_render_Color3iv_v_item, 3, byte_order);
}

static void mesa_Color3sv(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    listOfInt16(tvb, offsetp, t, hf_x11_glx_render_Color3sv_v, hf_x11_glx_render_Color3sv_v_item, 3, byte_order);
}

static void mesa_Color3ubv(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    listOfByte(tvb, offsetp, t, hf_x11_glx_render_Color3ubv_v, 3, byte_order);
}

static void mesa_Color3uiv(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    listOfCard32(tvb, offsetp, t, hf_x11_glx_render_Color3uiv_v, hf_x11_glx_render_Color3uiv_v_item, 3, byte_order);
}

static void mesa_Color3usv(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    listOfCard16(tvb, offsetp, t, hf_x11_glx_render_Color3usv_v, hf_x11_glx_render_Color3usv_v_item, 3, byte_order);
}

static void mesa_Color4bv(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    listOfByte(tvb, offsetp, t, hf_x11_glx_render_Color4bv_v, 4, byte_order);
}

static void mesa_Color4dv(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    listOfDouble(tvb, offsetp, t, hf_x11_glx_render_Color4dv_v, hf_x11_glx_render_Color4dv_v_item, 4, byte_order);
}

static void mesa_Color4fv(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    listOfFloat(tvb, offsetp, t, hf_x11_glx_render_Color4fv_v, hf_x11_glx_render_Color4fv_v_item, 4, byte_order);
}

static void mesa_Color4iv(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    listOfInt32(tvb, offsetp, t, hf_x11_glx_render_Color4iv_v, hf_x11_glx_render_Color4iv_v_item, 4, byte_order);
}

static void mesa_Color4sv(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    listOfInt16(tvb, offsetp, t, hf_x11_glx_render_Color4sv_v, hf_x11_glx_render_Color4sv_v_item, 4, byte_order);
}

static void mesa_Color4ubv(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    listOfByte(tvb, offsetp, t, hf_x11_glx_render_Color4ubv_v, 4, byte_order);
}

static void mesa_Color4uiv(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    listOfCard32(tvb, offsetp, t, hf_x11_glx_render_Color4uiv_v, hf_x11_glx_render_Color4uiv_v_item, 4, byte_order);
}

static void mesa_Color4usv(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    listOfCard16(tvb, offsetp, t, hf_x11_glx_render_Color4usv_v, hf_x11_glx_render_Color4usv_v_item, 4, byte_order);
}

static void mesa_EdgeFlagv(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    listOfByte(tvb, offsetp, t, hf_x11_glx_render_EdgeFlagv_flag, 1, byte_order);
}

static void mesa_End(tvbuff_t *tvb _U_, int *offsetp _U_, proto_tree *t _U_, unsigned byte_order _U_, int length _U_)
{
}

static void mesa_Indexdv(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    listOfDouble(tvb, offsetp, t, hf_x11_glx_render_Indexdv_c, hf_x11_glx_render_Indexdv_c_item, 1, byte_order);
}

static void mesa_Indexfv(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    listOfFloat(tvb, offsetp, t, hf_x11_glx_render_Indexfv_c, hf_x11_glx_render_Indexfv_c_item, 1, byte_order);
}

static void mesa_Indexiv(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    listOfInt32(tvb, offsetp, t, hf_x11_glx_render_Indexiv_c, hf_x11_glx_render_Indexiv_c_item, 1, byte_order);
}

static void mesa_Indexsv(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    listOfInt16(tvb, offsetp, t, hf_x11_glx_render_Indexsv_c, hf_x11_glx_render_Indexsv_c_item, 1, byte_order);
}

static void mesa_Normal3bv(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    listOfByte(tvb, offsetp, t, hf_x11_glx_render_Normal3bv_v, 3, byte_order);
}

static void mesa_Normal3dv(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    listOfDouble(tvb, offsetp, t, hf_x11_glx_render_Normal3dv_v, hf_x11_glx_render_Normal3dv_v_item, 3, byte_order);
}

static void mesa_Normal3fv(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    listOfFloat(tvb, offsetp, t, hf_x11_glx_render_Normal3fv_v, hf_x11_glx_render_Normal3fv_v_item, 3, byte_order);
}

static void mesa_Normal3iv(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    listOfInt32(tvb, offsetp, t, hf_x11_glx_render_Normal3iv_v, hf_x11_glx_render_Normal3iv_v_item, 3, byte_order);
}

static void mesa_Normal3sv(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    listOfInt16(tvb, offsetp, t, hf_x11_glx_render_Normal3sv_v, hf_x11_glx_render_Normal3sv_v_item, 3, byte_order);
}

static void mesa_RasterPos2dv(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    listOfDouble(tvb, offsetp, t, hf_x11_glx_render_RasterPos2dv_v, hf_x11_glx_render_RasterPos2dv_v_item, 2, byte_order);
}

static void mesa_RasterPos2fv(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    listOfFloat(tvb, offsetp, t, hf_x11_glx_render_RasterPos2fv_v, hf_x11_glx_render_RasterPos2fv_v_item, 2, byte_order);
}

static void mesa_RasterPos2iv(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    listOfInt32(tvb, offsetp, t, hf_x11_glx_render_RasterPos2iv_v, hf_x11_glx_render_RasterPos2iv_v_item, 2, byte_order);
}

static void mesa_RasterPos2sv(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    listOfInt16(tvb, offsetp, t, hf_x11_glx_render_RasterPos2sv_v, hf_x11_glx_render_RasterPos2sv_v_item, 2, byte_order);
}

static void mesa_RasterPos3dv(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    listOfDouble(tvb, offsetp, t, hf_x11_glx_render_RasterPos3dv_v, hf_x11_glx_render_RasterPos3dv_v_item, 3, byte_order);
}

static void mesa_RasterPos3fv(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    listOfFloat(tvb, offsetp, t, hf_x11_glx_render_RasterPos3fv_v, hf_x11_glx_render_RasterPos3fv_v_item, 3, byte_order);
}

static void mesa_RasterPos3iv(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    listOfInt32(tvb, offsetp, t, hf_x11_glx_render_RasterPos3iv_v, hf_x11_glx_render_RasterPos3iv_v_item, 3, byte_order);
}

static void mesa_RasterPos3sv(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    listOfInt16(tvb, offsetp, t, hf_x11_glx_render_RasterPos3sv_v, hf_x11_glx_render_RasterPos3sv_v_item, 3, byte_order);
}

static void mesa_RasterPos4dv(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    listOfDouble(tvb, offsetp, t, hf_x11_glx_render_RasterPos4dv_v, hf_x11_glx_render_RasterPos4dv_v_item, 4, byte_order);
}

static void mesa_RasterPos4fv(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    listOfFloat(tvb, offsetp, t, hf_x11_glx_render_RasterPos4fv_v, hf_x11_glx_render_RasterPos4fv_v_item, 4, byte_order);
}

static void mesa_RasterPos4iv(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    listOfInt32(tvb, offsetp, t, hf_x11_glx_render_RasterPos4iv_v, hf_x11_glx_render_RasterPos4iv_v_item, 4, byte_order);
}

static void mesa_RasterPos4sv(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    listOfInt16(tvb, offsetp, t, hf_x11_glx_render_RasterPos4sv_v, hf_x11_glx_render_RasterPos4sv_v_item, 4, byte_order);
}

static void mesa_Rectdv(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    listOfDouble(tvb, offsetp, t, hf_x11_glx_render_Rectdv_v1, hf_x11_glx_render_Rectdv_v1_item, 2, byte_order);
    listOfDouble(tvb, offsetp, t, hf_x11_glx_render_Rectdv_v2, hf_x11_glx_render_Rectdv_v2_item, 2, byte_order);
}

static void mesa_Rectfv(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    listOfFloat(tvb, offsetp, t, hf_x11_glx_render_Rectfv_v1, hf_x11_glx_render_Rectfv_v1_item, 2, byte_order);
    listOfFloat(tvb, offsetp, t, hf_x11_glx_render_Rectfv_v2, hf_x11_glx_render_Rectfv_v2_item, 2, byte_order);
}

static void mesa_Rectiv(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    listOfInt32(tvb, offsetp, t, hf_x11_glx_render_Rectiv_v1, hf_x11_glx_render_Rectiv_v1_item, 2, byte_order);
    listOfInt32(tvb, offsetp, t, hf_x11_glx_render_Rectiv_v2, hf_x11_glx_render_Rectiv_v2_item, 2, byte_order);
}

static void mesa_Rectsv(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    listOfInt16(tvb, offsetp, t, hf_x11_glx_render_Rectsv_v1, hf_x11_glx_render_Rectsv_v1_item, 2, byte_order);
    listOfInt16(tvb, offsetp, t, hf_x11_glx_render_Rectsv_v2, hf_x11_glx_render_Rectsv_v2_item, 2, byte_order);
}

static void mesa_TexCoord1dv(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    listOfDouble(tvb, offsetp, t, hf_x11_glx_render_TexCoord1dv_v, hf_x11_glx_render_TexCoord1dv_v_item, 1, byte_order);
}

static void mesa_TexCoord1fv(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    listOfFloat(tvb, offsetp, t, hf_x11_glx_render_TexCoord1fv_v, hf_x11_glx_render_TexCoord1fv_v_item, 1, byte_order);
}

static void mesa_TexCoord1iv(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    listOfInt32(tvb, offsetp, t, hf_x11_glx_render_TexCoord1iv_v, hf_x11_glx_render_TexCoord1iv_v_item, 1, byte_order);
}

static void mesa_TexCoord1sv(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    listOfInt16(tvb, offsetp, t, hf_x11_glx_render_TexCoord1sv_v, hf_x11_glx_render_TexCoord1sv_v_item, 1, byte_order);
}

static void mesa_TexCoord2dv(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    listOfDouble(tvb, offsetp, t, hf_x11_glx_render_TexCoord2dv_v, hf_x11_glx_render_TexCoord2dv_v_item, 2, byte_order);
}

static void mesa_TexCoord2fv(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    listOfFloat(tvb, offsetp, t, hf_x11_glx_render_TexCoord2fv_v, hf_x11_glx_render_TexCoord2fv_v_item, 2, byte_order);
}

static void mesa_TexCoord2iv(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    listOfInt32(tvb, offsetp, t, hf_x11_glx_render_TexCoord2iv_v, hf_x11_glx_render_TexCoord2iv_v_item, 2, byte_order);
}

static void mesa_TexCoord2sv(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    listOfInt16(tvb, offsetp, t, hf_x11_glx_render_TexCoord2sv_v, hf_x11_glx_render_TexCoord2sv_v_item, 2, byte_order);
}

static void mesa_TexCoord3dv(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    listOfDouble(tvb, offsetp, t, hf_x11_glx_render_TexCoord3dv_v, hf_x11_glx_render_TexCoord3dv_v_item, 3, byte_order);
}

static void mesa_TexCoord3fv(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    listOfFloat(tvb, offsetp, t, hf_x11_glx_render_TexCoord3fv_v, hf_x11_glx_render_TexCoord3fv_v_item, 3, byte_order);
}

static void mesa_TexCoord3iv(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    listOfInt32(tvb, offsetp, t, hf_x11_glx_render_TexCoord3iv_v, hf_x11_glx_render_TexCoord3iv_v_item, 3, byte_order);
}

static void mesa_TexCoord3sv(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    listOfInt16(tvb, offsetp, t, hf_x11_glx_render_TexCoord3sv_v, hf_x11_glx_render_TexCoord3sv_v_item, 3, byte_order);
}

static void mesa_TexCoord4dv(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    listOfDouble(tvb, offsetp, t, hf_x11_glx_render_TexCoord4dv_v, hf_x11_glx_render_TexCoord4dv_v_item, 4, byte_order);
}

static void mesa_TexCoord4fv(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    listOfFloat(tvb, offsetp, t, hf_x11_glx_render_TexCoord4fv_v, hf_x11_glx_render_TexCoord4fv_v_item, 4, byte_order);
}

static void mesa_TexCoord4iv(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    listOfInt32(tvb, offsetp, t, hf_x11_glx_render_TexCoord4iv_v, hf_x11_glx_render_TexCoord4iv_v_item, 4, byte_order);
}

static void mesa_TexCoord4sv(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    listOfInt16(tvb, offsetp, t, hf_x11_glx_render_TexCoord4sv_v, hf_x11_glx_render_TexCoord4sv_v_item, 4, byte_order);
}

static void mesa_Vertex2dv(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    listOfDouble(tvb, offsetp, t, hf_x11_glx_render_Vertex2dv_v, hf_x11_glx_render_Vertex2dv_v_item, 2, byte_order);
}

static void mesa_Vertex2fv(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    listOfFloat(tvb, offsetp, t, hf_x11_glx_render_Vertex2fv_v, hf_x11_glx_render_Vertex2fv_v_item, 2, byte_order);
}

static void mesa_Vertex2iv(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    listOfInt32(tvb, offsetp, t, hf_x11_glx_render_Vertex2iv_v, hf_x11_glx_render_Vertex2iv_v_item, 2, byte_order);
}

static void mesa_Vertex2sv(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    listOfInt16(tvb, offsetp, t, hf_x11_glx_render_Vertex2sv_v, hf_x11_glx_render_Vertex2sv_v_item, 2, byte_order);
}

static void mesa_Vertex3dv(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    listOfDouble(tvb, offsetp, t, hf_x11_glx_render_Vertex3dv_v, hf_x11_glx_render_Vertex3dv_v_item, 3, byte_order);
}

static void mesa_Vertex3fv(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    listOfFloat(tvb, offsetp, t, hf_x11_glx_render_Vertex3fv_v, hf_x11_glx_render_Vertex3fv_v_item, 3, byte_order);
}

static void mesa_Vertex3iv(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    listOfInt32(tvb, offsetp, t, hf_x11_glx_render_Vertex3iv_v, hf_x11_glx_render_Vertex3iv_v_item, 3, byte_order);
}

static void mesa_Vertex3sv(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    listOfInt16(tvb, offsetp, t, hf_x11_glx_render_Vertex3sv_v, hf_x11_glx_render_Vertex3sv_v_item, 3, byte_order);
}

static void mesa_Vertex4dv(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    listOfDouble(tvb, offsetp, t, hf_x11_glx_render_Vertex4dv_v, hf_x11_glx_render_Vertex4dv_v_item, 4, byte_order);
}

static void mesa_Vertex4fv(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    listOfFloat(tvb, offsetp, t, hf_x11_glx_render_Vertex4fv_v, hf_x11_glx_render_Vertex4fv_v_item, 4, byte_order);
}

static void mesa_Vertex4iv(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    listOfInt32(tvb, offsetp, t, hf_x11_glx_render_Vertex4iv_v, hf_x11_glx_render_Vertex4iv_v_item, 4, byte_order);
}

static void mesa_Vertex4sv(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    listOfInt16(tvb, offsetp, t, hf_x11_glx_render_Vertex4sv_v, hf_x11_glx_render_Vertex4sv_v_item, 4, byte_order);
}

static void mesa_ClipPlane(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_render_ClipPlane_plane, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    listOfDouble(tvb, offsetp, t, hf_x11_glx_render_ClipPlane_equation, hf_x11_glx_render_ClipPlane_equation_item, 4, byte_order);
}

static void mesa_ColorMaterial(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_render_ColorMaterial_face, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_ColorMaterial_mode, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}

static void mesa_CullFace(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_render_CullFace_mode, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}

static void mesa_Fogf(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_render_Fogf_pname, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_Fogf_param, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}

static void mesa_Fogfv(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_render_Fogfv_pname, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    listOfFloat(tvb, offsetp, t, hf_x11_glx_render_Fogfv_params, hf_x11_glx_render_Fogfv_params_item, (length - 4) / 4, byte_order);
}

static void mesa_Fogi(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_render_Fogi_pname, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_Fogi_param, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}

static void mesa_Fogiv(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_render_Fogiv_pname, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    listOfInt32(tvb, offsetp, t, hf_x11_glx_render_Fogiv_params, hf_x11_glx_render_Fogiv_params_item, (length - 4) / 4, byte_order);
}

static void mesa_FrontFace(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_render_FrontFace_mode, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}

static void mesa_Hint(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_render_Hint_target, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_Hint_mode, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}

static void mesa_Lightf(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_render_Lightf_light, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_Lightf_pname, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_Lightf_param, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}

static void mesa_Lightfv(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_render_Lightfv_light, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_Lightfv_pname, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    listOfFloat(tvb, offsetp, t, hf_x11_glx_render_Lightfv_params, hf_x11_glx_render_Lightfv_params_item, (length - 8) / 4, byte_order);
}

static void mesa_Lighti(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_render_Lighti_light, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_Lighti_pname, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_Lighti_param, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}

static void mesa_Lightiv(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_render_Lightiv_light, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_Lightiv_pname, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    listOfInt32(tvb, offsetp, t, hf_x11_glx_render_Lightiv_params, hf_x11_glx_render_Lightiv_params_item, (length - 8) / 4, byte_order);
}

static void mesa_LightModelf(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_render_LightModelf_pname, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_LightModelf_param, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}

static void mesa_LightModelfv(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_render_LightModelfv_pname, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    listOfFloat(tvb, offsetp, t, hf_x11_glx_render_LightModelfv_params, hf_x11_glx_render_LightModelfv_params_item, (length - 4) / 4, byte_order);
}

static void mesa_LightModeli(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_render_LightModeli_pname, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_LightModeli_param, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}

static void mesa_LightModeliv(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_render_LightModeliv_pname, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    listOfInt32(tvb, offsetp, t, hf_x11_glx_render_LightModeliv_params, hf_x11_glx_render_LightModeliv_params_item, (length - 4) / 4, byte_order);
}

static void mesa_LineStipple(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_render_LineStipple_factor, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_LineStipple_pattern, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
}

static void mesa_LineWidth(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_render_LineWidth_width, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}

static void mesa_Materialf(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_render_Materialf_face, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_Materialf_pname, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_Materialf_param, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}

static void mesa_Materialfv(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_render_Materialfv_face, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_Materialfv_pname, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    listOfFloat(tvb, offsetp, t, hf_x11_glx_render_Materialfv_params, hf_x11_glx_render_Materialfv_params_item, (length - 8) / 4, byte_order);
}

static void mesa_Materiali(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_render_Materiali_face, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_Materiali_pname, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_Materiali_param, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}

static void mesa_Materialiv(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_render_Materialiv_face, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_Materialiv_pname, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    listOfInt32(tvb, offsetp, t, hf_x11_glx_render_Materialiv_params, hf_x11_glx_render_Materialiv_params_item, (length - 8) / 4, byte_order);
}

static void mesa_PointSize(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_render_PointSize_size, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}

static void mesa_PolygonMode(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_render_PolygonMode_face, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_PolygonMode_mode, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}

static void mesa_PolygonStipple(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_render_PolygonStipple_swapbytes, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_glx_render_PolygonStipple_lsbfirst, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 2, ENC_NA);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_glx_render_PolygonStipple_rowlength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_PolygonStipple_skiprows, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_PolygonStipple_skippixels, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_PolygonStipple_alignment, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    listOfByte(tvb, offsetp, t, hf_x11_glx_render_PolygonStipple_mask, (length - 20) / 1, byte_order);
}

static void mesa_Scissor(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_render_Scissor_x, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_Scissor_y, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_Scissor_width, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_Scissor_height, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}

static void mesa_ShadeModel(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_render_ShadeModel_mode, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}

static void mesa_TexParameterf(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_render_TexParameterf_target, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_TexParameterf_pname, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_TexParameterf_param, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}

static void mesa_TexParameterfv(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_render_TexParameterfv_target, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_TexParameterfv_pname, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    listOfFloat(tvb, offsetp, t, hf_x11_glx_render_TexParameterfv_params, hf_x11_glx_render_TexParameterfv_params_item, (length - 8) / 4, byte_order);
}

static void mesa_TexParameteri(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_render_TexParameteri_target, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_TexParameteri_pname, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_TexParameteri_param, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}

static void mesa_TexParameteriv(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_render_TexParameteriv_target, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_TexParameteriv_pname, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    listOfInt32(tvb, offsetp, t, hf_x11_glx_render_TexParameteriv_params, hf_x11_glx_render_TexParameteriv_params_item, (length - 8) / 4, byte_order);
}

static void mesa_TexImage1D(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_render_TexImage1D_swapbytes, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_glx_render_TexImage1D_lsbfirst, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 2, ENC_NA);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_glx_render_TexImage1D_rowlength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_TexImage1D_skiprows, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_TexImage1D_skippixels, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_TexImage1D_alignment, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_TexImage1D_target, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_TexImage1D_level, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_TexImage1D_internalformat, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_TexImage1D_width, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_TexImage1D_border, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_TexImage1D_format, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_TexImage1D_type, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    listOfByte(tvb, offsetp, t, hf_x11_glx_render_TexImage1D_pixels, (length - 48) / 1, byte_order);
}

static void mesa_TexImage2D(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_render_TexImage2D_swapbytes, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_glx_render_TexImage2D_lsbfirst, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 2, ENC_NA);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_glx_render_TexImage2D_rowlength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_TexImage2D_skiprows, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_TexImage2D_skippixels, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_TexImage2D_alignment, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_TexImage2D_target, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_TexImage2D_level, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_TexImage2D_internalformat, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_TexImage2D_width, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_TexImage2D_height, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_TexImage2D_border, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_TexImage2D_format, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_TexImage2D_type, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    listOfByte(tvb, offsetp, t, hf_x11_glx_render_TexImage2D_pixels, (length - 52) / 1, byte_order);
}

static void mesa_TexEnvf(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_render_TexEnvf_target, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_TexEnvf_pname, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_TexEnvf_param, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}

static void mesa_TexEnvfv(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_render_TexEnvfv_target, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_TexEnvfv_pname, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    listOfFloat(tvb, offsetp, t, hf_x11_glx_render_TexEnvfv_params, hf_x11_glx_render_TexEnvfv_params_item, (length - 8) / 4, byte_order);
}

static void mesa_TexEnvi(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_render_TexEnvi_target, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_TexEnvi_pname, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_TexEnvi_param, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}

static void mesa_TexEnviv(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_render_TexEnviv_target, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_TexEnviv_pname, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    listOfInt32(tvb, offsetp, t, hf_x11_glx_render_TexEnviv_params, hf_x11_glx_render_TexEnviv_params_item, (length - 8) / 4, byte_order);
}

static void mesa_TexGend(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_render_TexGend_coord, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_TexGend_pname, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_TexGend_param, tvb, *offsetp, 8, byte_order);
    *offsetp += 8;
}

static void mesa_TexGendv(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_render_TexGendv_coord, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_TexGendv_pname, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    listOfDouble(tvb, offsetp, t, hf_x11_glx_render_TexGendv_params, hf_x11_glx_render_TexGendv_params_item, (length - 8) / 8, byte_order);
}

static void mesa_TexGenf(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_render_TexGenf_coord, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_TexGenf_pname, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_TexGenf_param, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}

static void mesa_TexGenfv(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_render_TexGenfv_coord, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_TexGenfv_pname, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    listOfFloat(tvb, offsetp, t, hf_x11_glx_render_TexGenfv_params, hf_x11_glx_render_TexGenfv_params_item, (length - 8) / 4, byte_order);
}

static void mesa_TexGeni(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_render_TexGeni_coord, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_TexGeni_pname, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_TexGeni_param, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}

static void mesa_TexGeniv(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_render_TexGeniv_coord, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_TexGeniv_pname, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    listOfInt32(tvb, offsetp, t, hf_x11_glx_render_TexGeniv_params, hf_x11_glx_render_TexGeniv_params_item, (length - 8) / 4, byte_order);
}

static void mesa_InitNames(tvbuff_t *tvb _U_, int *offsetp _U_, proto_tree *t _U_, unsigned byte_order _U_, int length _U_)
{
}

static void mesa_LoadName(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_render_LoadName_name, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}

static void mesa_PassThrough(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_render_PassThrough_token, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}

static void mesa_PopName(tvbuff_t *tvb _U_, int *offsetp _U_, proto_tree *t _U_, unsigned byte_order _U_, int length _U_)
{
}

static void mesa_PushName(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_render_PushName_name, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}

static void mesa_DrawBuffer(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_render_DrawBuffer_mode, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}

static void mesa_Clear(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_render_Clear_mask, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}

static void mesa_ClearAccum(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_render_ClearAccum_red, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_ClearAccum_green, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_ClearAccum_blue, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_ClearAccum_alpha, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}

static void mesa_ClearIndex(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_render_ClearIndex_c, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}

static void mesa_ClearColor(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_render_ClearColor_red, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_ClearColor_green, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_ClearColor_blue, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_ClearColor_alpha, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}

static void mesa_ClearStencil(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_render_ClearStencil_s, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}

static void mesa_ClearDepth(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_render_ClearDepth_depth, tvb, *offsetp, 8, byte_order);
    *offsetp += 8;
}

static void mesa_StencilMask(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_render_StencilMask_mask, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}

static void mesa_ColorMask(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_render_ColorMask_red, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_glx_render_ColorMask_green, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_glx_render_ColorMask_blue, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_glx_render_ColorMask_alpha, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
}

static void mesa_DepthMask(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_render_DepthMask_flag, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
}

static void mesa_IndexMask(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_render_IndexMask_mask, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}

static void mesa_Accum(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_render_Accum_op, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_Accum_value, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}

static void mesa_Disable(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_render_Disable_cap, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}

static void mesa_Enable(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_render_Enable_cap, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}

static void mesa_PopAttrib(tvbuff_t *tvb _U_, int *offsetp _U_, proto_tree *t _U_, unsigned byte_order _U_, int length _U_)
{
}

static void mesa_PushAttrib(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_render_PushAttrib_mask, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}

static void mesa_Map1d(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_render_Map1d_target, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_Map1d_u1, tvb, *offsetp, 8, byte_order);
    *offsetp += 8;
    proto_tree_add_item(t, hf_x11_glx_render_Map1d_u2, tvb, *offsetp, 8, byte_order);
    *offsetp += 8;
    proto_tree_add_item(t, hf_x11_glx_render_Map1d_stride, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_Map1d_order, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    listOfDouble(tvb, offsetp, t, hf_x11_glx_render_Map1d_points, hf_x11_glx_render_Map1d_points_item, (length - 28) / 8, byte_order);
}

static void mesa_Map1f(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_render_Map1f_target, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_Map1f_u1, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_Map1f_u2, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_Map1f_stride, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_Map1f_order, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    listOfFloat(tvb, offsetp, t, hf_x11_glx_render_Map1f_points, hf_x11_glx_render_Map1f_points_item, (length - 20) / 4, byte_order);
}

static void mesa_Map2d(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_render_Map2d_target, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_Map2d_u1, tvb, *offsetp, 8, byte_order);
    *offsetp += 8;
    proto_tree_add_item(t, hf_x11_glx_render_Map2d_u2, tvb, *offsetp, 8, byte_order);
    *offsetp += 8;
    proto_tree_add_item(t, hf_x11_glx_render_Map2d_ustride, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_Map2d_uorder, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_Map2d_v1, tvb, *offsetp, 8, byte_order);
    *offsetp += 8;
    proto_tree_add_item(t, hf_x11_glx_render_Map2d_v2, tvb, *offsetp, 8, byte_order);
    *offsetp += 8;
    proto_tree_add_item(t, hf_x11_glx_render_Map2d_vstride, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_Map2d_vorder, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    listOfDouble(tvb, offsetp, t, hf_x11_glx_render_Map2d_points, hf_x11_glx_render_Map2d_points_item, (length - 52) / 8, byte_order);
}

static void mesa_Map2f(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_render_Map2f_target, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_Map2f_u1, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_Map2f_u2, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_Map2f_ustride, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_Map2f_uorder, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_Map2f_v1, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_Map2f_v2, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_Map2f_vstride, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_Map2f_vorder, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    listOfFloat(tvb, offsetp, t, hf_x11_glx_render_Map2f_points, hf_x11_glx_render_Map2f_points_item, (length - 36) / 4, byte_order);
}

static void mesa_MapGrid1d(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_render_MapGrid1d_un, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_MapGrid1d_u1, tvb, *offsetp, 8, byte_order);
    *offsetp += 8;
    proto_tree_add_item(t, hf_x11_glx_render_MapGrid1d_u2, tvb, *offsetp, 8, byte_order);
    *offsetp += 8;
}

static void mesa_MapGrid1f(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_render_MapGrid1f_un, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_MapGrid1f_u1, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_MapGrid1f_u2, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}

static void mesa_MapGrid2d(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_render_MapGrid2d_un, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_MapGrid2d_u1, tvb, *offsetp, 8, byte_order);
    *offsetp += 8;
    proto_tree_add_item(t, hf_x11_glx_render_MapGrid2d_u2, tvb, *offsetp, 8, byte_order);
    *offsetp += 8;
    proto_tree_add_item(t, hf_x11_glx_render_MapGrid2d_vn, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_MapGrid2d_v1, tvb, *offsetp, 8, byte_order);
    *offsetp += 8;
    proto_tree_add_item(t, hf_x11_glx_render_MapGrid2d_v2, tvb, *offsetp, 8, byte_order);
    *offsetp += 8;
}

static void mesa_MapGrid2f(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_render_MapGrid2f_un, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_MapGrid2f_u1, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_MapGrid2f_u2, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_MapGrid2f_vn, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_MapGrid2f_v1, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_MapGrid2f_v2, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}

static void mesa_EvalCoord1dv(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    listOfDouble(tvb, offsetp, t, hf_x11_glx_render_EvalCoord1dv_u, hf_x11_glx_render_EvalCoord1dv_u_item, 1, byte_order);
}

static void mesa_EvalCoord1fv(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    listOfFloat(tvb, offsetp, t, hf_x11_glx_render_EvalCoord1fv_u, hf_x11_glx_render_EvalCoord1fv_u_item, 1, byte_order);
}

static void mesa_EvalCoord2dv(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    listOfDouble(tvb, offsetp, t, hf_x11_glx_render_EvalCoord2dv_u, hf_x11_glx_render_EvalCoord2dv_u_item, 2, byte_order);
}

static void mesa_EvalCoord2fv(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    listOfFloat(tvb, offsetp, t, hf_x11_glx_render_EvalCoord2fv_u, hf_x11_glx_render_EvalCoord2fv_u_item, 2, byte_order);
}

static void mesa_EvalMesh1(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_render_EvalMesh1_mode, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_EvalMesh1_i1, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_EvalMesh1_i2, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}

static void mesa_EvalPoint1(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_render_EvalPoint1_i, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}

static void mesa_EvalMesh2(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_render_EvalMesh2_mode, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_EvalMesh2_i1, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_EvalMesh2_i2, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_EvalMesh2_j1, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_EvalMesh2_j2, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}

static void mesa_EvalPoint2(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_render_EvalPoint2_i, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_EvalPoint2_j, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}

static void mesa_AlphaFunc(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_render_AlphaFunc_func, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_AlphaFunc_ref, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}

static void mesa_BlendFunc(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_render_BlendFunc_sfactor, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_BlendFunc_dfactor, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}

static void mesa_LogicOp(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_render_LogicOp_opcode, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}

static void mesa_StencilFunc(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_render_StencilFunc_func, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_StencilFunc_ref, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_StencilFunc_mask, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}

static void mesa_StencilOp(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_render_StencilOp_fail, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_StencilOp_zfail, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_StencilOp_zpass, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}

static void mesa_DepthFunc(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_render_DepthFunc_func, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}

static void mesa_PixelZoom(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_render_PixelZoom_xfactor, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_PixelZoom_yfactor, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}

static void mesa_PixelTransferf(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_render_PixelTransferf_pname, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_PixelTransferf_param, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}

static void mesa_PixelTransferi(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_render_PixelTransferi_pname, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_PixelTransferi_param, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}

static void mesa_PixelMapfv(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    int mapsize;
    proto_tree_add_item(t, hf_x11_glx_render_PixelMapfv_map, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    mapsize = tvb_get_uint32(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_glx_render_PixelMapfv_mapsize, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    listOfFloat(tvb, offsetp, t, hf_x11_glx_render_PixelMapfv_values, hf_x11_glx_render_PixelMapfv_values_item, mapsize, byte_order);
}

static void mesa_PixelMapuiv(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    int mapsize;
    proto_tree_add_item(t, hf_x11_glx_render_PixelMapuiv_map, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    mapsize = tvb_get_uint32(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_glx_render_PixelMapuiv_mapsize, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    listOfCard32(tvb, offsetp, t, hf_x11_glx_render_PixelMapuiv_values, hf_x11_glx_render_PixelMapuiv_values_item, mapsize, byte_order);
}

static void mesa_PixelMapusv(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    int mapsize;
    proto_tree_add_item(t, hf_x11_glx_render_PixelMapusv_map, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    mapsize = tvb_get_uint32(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_glx_render_PixelMapusv_mapsize, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    listOfCard16(tvb, offsetp, t, hf_x11_glx_render_PixelMapusv_values, hf_x11_glx_render_PixelMapusv_values_item, mapsize, byte_order);
}

static void mesa_ReadBuffer(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_render_ReadBuffer_mode, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}

static void mesa_CopyPixels(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_render_CopyPixels_x, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_CopyPixels_y, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_CopyPixels_width, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_CopyPixels_height, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_CopyPixels_type, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}

static void mesa_DrawPixels(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_render_DrawPixels_swapbytes, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_glx_render_DrawPixels_lsbfirst, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 2, ENC_NA);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_glx_render_DrawPixels_rowlength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_DrawPixels_skiprows, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_DrawPixels_skippixels, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_DrawPixels_alignment, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_DrawPixels_width, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_DrawPixels_height, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_DrawPixels_format, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_DrawPixels_type, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    listOfByte(tvb, offsetp, t, hf_x11_glx_render_DrawPixels_pixels, (length - 36) / 1, byte_order);
}

static void mesa_DepthRange(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_render_DepthRange_zNear, tvb, *offsetp, 8, byte_order);
    *offsetp += 8;
    proto_tree_add_item(t, hf_x11_glx_render_DepthRange_zFar, tvb, *offsetp, 8, byte_order);
    *offsetp += 8;
}

static void mesa_Frustum(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_render_Frustum_left, tvb, *offsetp, 8, byte_order);
    *offsetp += 8;
    proto_tree_add_item(t, hf_x11_glx_render_Frustum_right, tvb, *offsetp, 8, byte_order);
    *offsetp += 8;
    proto_tree_add_item(t, hf_x11_glx_render_Frustum_bottom, tvb, *offsetp, 8, byte_order);
    *offsetp += 8;
    proto_tree_add_item(t, hf_x11_glx_render_Frustum_top, tvb, *offsetp, 8, byte_order);
    *offsetp += 8;
    proto_tree_add_item(t, hf_x11_glx_render_Frustum_zNear, tvb, *offsetp, 8, byte_order);
    *offsetp += 8;
    proto_tree_add_item(t, hf_x11_glx_render_Frustum_zFar, tvb, *offsetp, 8, byte_order);
    *offsetp += 8;
}

static void mesa_LoadIdentity(tvbuff_t *tvb _U_, int *offsetp _U_, proto_tree *t _U_, unsigned byte_order _U_, int length _U_)
{
}

static void mesa_LoadMatrixf(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    listOfFloat(tvb, offsetp, t, hf_x11_glx_render_LoadMatrixf_m, hf_x11_glx_render_LoadMatrixf_m_item, 16, byte_order);
}

static void mesa_LoadMatrixd(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    listOfDouble(tvb, offsetp, t, hf_x11_glx_render_LoadMatrixd_m, hf_x11_glx_render_LoadMatrixd_m_item, 16, byte_order);
}

static void mesa_MatrixMode(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_render_MatrixMode_mode, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}

static void mesa_MultMatrixf(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    listOfFloat(tvb, offsetp, t, hf_x11_glx_render_MultMatrixf_m, hf_x11_glx_render_MultMatrixf_m_item, 16, byte_order);
}

static void mesa_MultMatrixd(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    listOfDouble(tvb, offsetp, t, hf_x11_glx_render_MultMatrixd_m, hf_x11_glx_render_MultMatrixd_m_item, 16, byte_order);
}

static void mesa_Ortho(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_render_Ortho_left, tvb, *offsetp, 8, byte_order);
    *offsetp += 8;
    proto_tree_add_item(t, hf_x11_glx_render_Ortho_right, tvb, *offsetp, 8, byte_order);
    *offsetp += 8;
    proto_tree_add_item(t, hf_x11_glx_render_Ortho_bottom, tvb, *offsetp, 8, byte_order);
    *offsetp += 8;
    proto_tree_add_item(t, hf_x11_glx_render_Ortho_top, tvb, *offsetp, 8, byte_order);
    *offsetp += 8;
    proto_tree_add_item(t, hf_x11_glx_render_Ortho_zNear, tvb, *offsetp, 8, byte_order);
    *offsetp += 8;
    proto_tree_add_item(t, hf_x11_glx_render_Ortho_zFar, tvb, *offsetp, 8, byte_order);
    *offsetp += 8;
}

static void mesa_PopMatrix(tvbuff_t *tvb _U_, int *offsetp _U_, proto_tree *t _U_, unsigned byte_order _U_, int length _U_)
{
}

static void mesa_PushMatrix(tvbuff_t *tvb _U_, int *offsetp _U_, proto_tree *t _U_, unsigned byte_order _U_, int length _U_)
{
}

static void mesa_Rotated(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_render_Rotated_angle, tvb, *offsetp, 8, byte_order);
    *offsetp += 8;
    proto_tree_add_item(t, hf_x11_glx_render_Rotated_x, tvb, *offsetp, 8, byte_order);
    *offsetp += 8;
    proto_tree_add_item(t, hf_x11_glx_render_Rotated_y, tvb, *offsetp, 8, byte_order);
    *offsetp += 8;
    proto_tree_add_item(t, hf_x11_glx_render_Rotated_z, tvb, *offsetp, 8, byte_order);
    *offsetp += 8;
}

static void mesa_Rotatef(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_render_Rotatef_angle, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_Rotatef_x, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_Rotatef_y, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_Rotatef_z, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}

static void mesa_Scaled(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_render_Scaled_x, tvb, *offsetp, 8, byte_order);
    *offsetp += 8;
    proto_tree_add_item(t, hf_x11_glx_render_Scaled_y, tvb, *offsetp, 8, byte_order);
    *offsetp += 8;
    proto_tree_add_item(t, hf_x11_glx_render_Scaled_z, tvb, *offsetp, 8, byte_order);
    *offsetp += 8;
}

static void mesa_Scalef(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_render_Scalef_x, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_Scalef_y, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_Scalef_z, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}

static void mesa_Translated(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_render_Translated_x, tvb, *offsetp, 8, byte_order);
    *offsetp += 8;
    proto_tree_add_item(t, hf_x11_glx_render_Translated_y, tvb, *offsetp, 8, byte_order);
    *offsetp += 8;
    proto_tree_add_item(t, hf_x11_glx_render_Translated_z, tvb, *offsetp, 8, byte_order);
    *offsetp += 8;
}

static void mesa_Translatef(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_render_Translatef_x, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_Translatef_y, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_Translatef_z, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}

static void mesa_Viewport(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_render_Viewport_x, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_Viewport_y, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_Viewport_width, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_Viewport_height, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}

static void mesa_DrawArrays(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_render_DrawArrays_mode, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_DrawArrays_first, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_DrawArrays_count, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}

static void mesa_PolygonOffset(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_render_PolygonOffset_factor, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_PolygonOffset_units, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}

static void mesa_CopyTexImage1D(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_render_CopyTexImage1D_target, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_CopyTexImage1D_level, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_CopyTexImage1D_internalformat, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_CopyTexImage1D_x, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_CopyTexImage1D_y, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_CopyTexImage1D_width, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_CopyTexImage1D_border, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}

static void mesa_CopyTexImage2D(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_render_CopyTexImage2D_target, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_CopyTexImage2D_level, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_CopyTexImage2D_internalformat, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_CopyTexImage2D_x, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_CopyTexImage2D_y, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_CopyTexImage2D_width, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_CopyTexImage2D_height, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_CopyTexImage2D_border, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}

static void mesa_CopyTexSubImage1D(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_render_CopyTexSubImage1D_target, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_CopyTexSubImage1D_level, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_CopyTexSubImage1D_xoffset, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_CopyTexSubImage1D_x, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_CopyTexSubImage1D_y, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_CopyTexSubImage1D_width, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}

static void mesa_CopyTexSubImage2D(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_render_CopyTexSubImage2D_target, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_CopyTexSubImage2D_level, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_CopyTexSubImage2D_xoffset, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_CopyTexSubImage2D_yoffset, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_CopyTexSubImage2D_x, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_CopyTexSubImage2D_y, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_CopyTexSubImage2D_width, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_CopyTexSubImage2D_height, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}

static void mesa_TexSubImage1D(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_render_TexSubImage1D_swapbytes, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_glx_render_TexSubImage1D_lsbfirst, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 2, ENC_NA);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_glx_render_TexSubImage1D_rowlength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_TexSubImage1D_skiprows, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_TexSubImage1D_skippixels, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_TexSubImage1D_alignment, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_TexSubImage1D_target, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_TexSubImage1D_level, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_TexSubImage1D_xoffset, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_TexSubImage1D_width, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_TexSubImage1D_format, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_TexSubImage1D_type, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_TexSubImage1D_UNUSED, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    listOfByte(tvb, offsetp, t, hf_x11_glx_render_TexSubImage1D_pixels, (length - 48) / 1, byte_order);
}

static void mesa_TexSubImage2D(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_render_TexSubImage2D_swapbytes, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_glx_render_TexSubImage2D_lsbfirst, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 2, ENC_NA);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_glx_render_TexSubImage2D_rowlength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_TexSubImage2D_skiprows, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_TexSubImage2D_skippixels, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_TexSubImage2D_alignment, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_TexSubImage2D_target, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_TexSubImage2D_level, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_TexSubImage2D_xoffset, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_TexSubImage2D_yoffset, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_TexSubImage2D_width, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_TexSubImage2D_height, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_TexSubImage2D_format, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_TexSubImage2D_type, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_TexSubImage2D_UNUSED, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    listOfByte(tvb, offsetp, t, hf_x11_glx_render_TexSubImage2D_pixels, (length - 56) / 1, byte_order);
}

static void mesa_BindTexture(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_render_BindTexture_target, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_BindTexture_texture, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}

static void mesa_PrioritizeTextures(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    int n;
    n = tvb_get_uint32(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_glx_render_PrioritizeTextures_n, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    listOfCard32(tvb, offsetp, t, hf_x11_glx_render_PrioritizeTextures_textures, hf_x11_glx_render_PrioritizeTextures_textures_item, n, byte_order);
    listOfFloat(tvb, offsetp, t, hf_x11_glx_render_PrioritizeTextures_priorities, hf_x11_glx_render_PrioritizeTextures_priorities_item, n, byte_order);
}

static void mesa_Indexubv(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    listOfByte(tvb, offsetp, t, hf_x11_glx_render_Indexubv_c, 1, byte_order);
}

static void mesa_BlendColor(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_render_BlendColor_red, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_BlendColor_green, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_BlendColor_blue, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_BlendColor_alpha, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}

static void mesa_BlendEquation(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_render_BlendEquation_mode, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}

static void mesa_ColorTable(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_render_ColorTable_swapbytes, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_glx_render_ColorTable_lsbfirst, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 2, ENC_NA);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_glx_render_ColorTable_rowlength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_ColorTable_skiprows, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_ColorTable_skippixels, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_ColorTable_alignment, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_ColorTable_target, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_ColorTable_internalformat, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_ColorTable_width, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_ColorTable_format, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_ColorTable_type, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    listOfByte(tvb, offsetp, t, hf_x11_glx_render_ColorTable_table, (length - 40) / 1, byte_order);
}

static void mesa_ColorTableParameterfv(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_render_ColorTableParameterfv_target, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_ColorTableParameterfv_pname, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    listOfFloat(tvb, offsetp, t, hf_x11_glx_render_ColorTableParameterfv_params, hf_x11_glx_render_ColorTableParameterfv_params_item, (length - 8) / 4, byte_order);
}

static void mesa_ColorTableParameteriv(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_render_ColorTableParameteriv_target, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_ColorTableParameteriv_pname, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    listOfInt32(tvb, offsetp, t, hf_x11_glx_render_ColorTableParameteriv_params, hf_x11_glx_render_ColorTableParameteriv_params_item, (length - 8) / 4, byte_order);
}

static void mesa_CopyColorTable(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_render_CopyColorTable_target, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_CopyColorTable_internalformat, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_CopyColorTable_x, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_CopyColorTable_y, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_CopyColorTable_width, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}

static void mesa_ColorSubTable(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_render_ColorSubTable_swapbytes, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_glx_render_ColorSubTable_lsbfirst, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 2, ENC_NA);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_glx_render_ColorSubTable_rowlength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_ColorSubTable_skiprows, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_ColorSubTable_skippixels, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_ColorSubTable_alignment, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_ColorSubTable_target, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_ColorSubTable_start, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_ColorSubTable_count, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_ColorSubTable_format, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_ColorSubTable_type, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    listOfByte(tvb, offsetp, t, hf_x11_glx_render_ColorSubTable_data, (length - 40) / 1, byte_order);
}

static void mesa_CopyColorSubTable(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_render_CopyColorSubTable_target, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_CopyColorSubTable_start, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_CopyColorSubTable_x, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_CopyColorSubTable_y, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_CopyColorSubTable_width, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}

static void mesa_ConvolutionFilter1D(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_render_ConvolutionFilter1D_swapbytes, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_glx_render_ConvolutionFilter1D_lsbfirst, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 2, ENC_NA);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_glx_render_ConvolutionFilter1D_rowlength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_ConvolutionFilter1D_skiprows, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_ConvolutionFilter1D_skippixels, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_ConvolutionFilter1D_alignment, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_ConvolutionFilter1D_target, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_ConvolutionFilter1D_internalformat, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_ConvolutionFilter1D_width, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_ConvolutionFilter1D_format, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_ConvolutionFilter1D_type, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    listOfByte(tvb, offsetp, t, hf_x11_glx_render_ConvolutionFilter1D_image, (length - 40) / 1, byte_order);
}

static void mesa_ConvolutionFilter2D(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_render_ConvolutionFilter2D_swapbytes, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_glx_render_ConvolutionFilter2D_lsbfirst, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 2, ENC_NA);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_glx_render_ConvolutionFilter2D_rowlength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_ConvolutionFilter2D_skiprows, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_ConvolutionFilter2D_skippixels, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_ConvolutionFilter2D_alignment, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_ConvolutionFilter2D_target, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_ConvolutionFilter2D_internalformat, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_ConvolutionFilter2D_width, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_ConvolutionFilter2D_height, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_ConvolutionFilter2D_format, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_ConvolutionFilter2D_type, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    listOfByte(tvb, offsetp, t, hf_x11_glx_render_ConvolutionFilter2D_image, (length - 44) / 1, byte_order);
}

static void mesa_ConvolutionParameterf(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_render_ConvolutionParameterf_target, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_ConvolutionParameterf_pname, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_ConvolutionParameterf_params, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}

static void mesa_ConvolutionParameterfv(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_render_ConvolutionParameterfv_target, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_ConvolutionParameterfv_pname, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    listOfFloat(tvb, offsetp, t, hf_x11_glx_render_ConvolutionParameterfv_params, hf_x11_glx_render_ConvolutionParameterfv_params_item, (length - 8) / 4, byte_order);
}

static void mesa_ConvolutionParameteri(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_render_ConvolutionParameteri_target, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_ConvolutionParameteri_pname, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_ConvolutionParameteri_params, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}

static void mesa_ConvolutionParameteriv(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_render_ConvolutionParameteriv_target, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_ConvolutionParameteriv_pname, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    listOfInt32(tvb, offsetp, t, hf_x11_glx_render_ConvolutionParameteriv_params, hf_x11_glx_render_ConvolutionParameteriv_params_item, (length - 8) / 4, byte_order);
}

static void mesa_CopyConvolutionFilter1D(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_render_CopyConvolutionFilter1D_target, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_CopyConvolutionFilter1D_internalformat, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_CopyConvolutionFilter1D_x, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_CopyConvolutionFilter1D_y, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_CopyConvolutionFilter1D_width, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}

static void mesa_CopyConvolutionFilter2D(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_render_CopyConvolutionFilter2D_target, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_CopyConvolutionFilter2D_internalformat, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_CopyConvolutionFilter2D_x, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_CopyConvolutionFilter2D_y, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_CopyConvolutionFilter2D_width, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_CopyConvolutionFilter2D_height, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}

static void mesa_SeparableFilter2D(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_render_SeparableFilter2D_target, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_SeparableFilter2D_internalformat, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_SeparableFilter2D_width, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_SeparableFilter2D_height, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_SeparableFilter2D_format, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_SeparableFilter2D_type, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    listOfByte(tvb, offsetp, t, hf_x11_glx_render_SeparableFilter2D_row, (length - 24) / 1, byte_order);
    listOfByte(tvb, offsetp, t, hf_x11_glx_render_SeparableFilter2D_column, (length - 24) / 1, byte_order);
}

static void mesa_Histogram(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_render_Histogram_target, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_Histogram_width, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_Histogram_internalformat, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_Histogram_sink, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
}

static void mesa_Minmax(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_render_Minmax_target, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_Minmax_internalformat, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_Minmax_sink, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
}

static void mesa_ResetHistogram(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_render_ResetHistogram_target, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}

static void mesa_ResetMinmax(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_render_ResetMinmax_target, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}

static void mesa_TexImage3D(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_render_TexImage3D_swapbytes, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_glx_render_TexImage3D_lsbfirst, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 2, ENC_NA);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_glx_render_TexImage3D_rowlength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_TexImage3D_skiprows, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_TexImage3D_skippixels, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_TexImage3D_alignment, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_TexImage3D_target, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_TexImage3D_level, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_TexImage3D_internalformat, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_TexImage3D_width, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_TexImage3D_height, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_TexImage3D_depth, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_TexImage3D_border, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_TexImage3D_format, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_TexImage3D_type, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    listOfByte(tvb, offsetp, t, hf_x11_glx_render_TexImage3D_pixels, (length - 56) / 1, byte_order);
}

static void mesa_TexSubImage3D(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_render_TexSubImage3D_swapbytes, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_glx_render_TexSubImage3D_lsbfirst, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 2, ENC_NA);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_glx_render_TexSubImage3D_rowlength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_TexSubImage3D_skiprows, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_TexSubImage3D_skippixels, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_TexSubImage3D_alignment, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_TexSubImage3D_target, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_TexSubImage3D_level, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_TexSubImage3D_xoffset, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_TexSubImage3D_yoffset, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_TexSubImage3D_zoffset, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_TexSubImage3D_width, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_TexSubImage3D_height, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_TexSubImage3D_depth, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_TexSubImage3D_format, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_TexSubImage3D_type, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_TexSubImage3D_UNUSED, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    listOfByte(tvb, offsetp, t, hf_x11_glx_render_TexSubImage3D_pixels, (length - 64) / 1, byte_order);
}

static void mesa_CopyTexSubImage3D(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_render_CopyTexSubImage3D_target, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_CopyTexSubImage3D_level, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_CopyTexSubImage3D_xoffset, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_CopyTexSubImage3D_yoffset, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_CopyTexSubImage3D_zoffset, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_CopyTexSubImage3D_x, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_CopyTexSubImage3D_y, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_CopyTexSubImage3D_width, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_CopyTexSubImage3D_height, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}

static void mesa_ActiveTexture(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_render_ActiveTexture_texture, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}

static void mesa_MultiTexCoord1dv(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_render_MultiTexCoord1dv_target, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    listOfDouble(tvb, offsetp, t, hf_x11_glx_render_MultiTexCoord1dv_v, hf_x11_glx_render_MultiTexCoord1dv_v_item, 1, byte_order);
}

static void mesa_MultiTexCoord1iv(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_render_MultiTexCoord1iv_target, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    listOfInt32(tvb, offsetp, t, hf_x11_glx_render_MultiTexCoord1iv_v, hf_x11_glx_render_MultiTexCoord1iv_v_item, 1, byte_order);
}

static void mesa_MultiTexCoord1sv(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_render_MultiTexCoord1sv_target, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    listOfInt16(tvb, offsetp, t, hf_x11_glx_render_MultiTexCoord1sv_v, hf_x11_glx_render_MultiTexCoord1sv_v_item, 1, byte_order);
}

static void mesa_MultiTexCoord2dv(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_render_MultiTexCoord2dv_target, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    listOfDouble(tvb, offsetp, t, hf_x11_glx_render_MultiTexCoord2dv_v, hf_x11_glx_render_MultiTexCoord2dv_v_item, 2, byte_order);
}

static void mesa_MultiTexCoord2iv(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_render_MultiTexCoord2iv_target, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    listOfInt32(tvb, offsetp, t, hf_x11_glx_render_MultiTexCoord2iv_v, hf_x11_glx_render_MultiTexCoord2iv_v_item, 2, byte_order);
}

static void mesa_MultiTexCoord2sv(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_render_MultiTexCoord2sv_target, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    listOfInt16(tvb, offsetp, t, hf_x11_glx_render_MultiTexCoord2sv_v, hf_x11_glx_render_MultiTexCoord2sv_v_item, 2, byte_order);
}

static void mesa_MultiTexCoord3dv(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_render_MultiTexCoord3dv_target, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    listOfDouble(tvb, offsetp, t, hf_x11_glx_render_MultiTexCoord3dv_v, hf_x11_glx_render_MultiTexCoord3dv_v_item, 3, byte_order);
}

static void mesa_MultiTexCoord3iv(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_render_MultiTexCoord3iv_target, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    listOfInt32(tvb, offsetp, t, hf_x11_glx_render_MultiTexCoord3iv_v, hf_x11_glx_render_MultiTexCoord3iv_v_item, 3, byte_order);
}

static void mesa_MultiTexCoord3sv(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_render_MultiTexCoord3sv_target, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    listOfInt16(tvb, offsetp, t, hf_x11_glx_render_MultiTexCoord3sv_v, hf_x11_glx_render_MultiTexCoord3sv_v_item, 3, byte_order);
}

static void mesa_MultiTexCoord4dv(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_render_MultiTexCoord4dv_target, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    listOfDouble(tvb, offsetp, t, hf_x11_glx_render_MultiTexCoord4dv_v, hf_x11_glx_render_MultiTexCoord4dv_v_item, 4, byte_order);
}

static void mesa_MultiTexCoord4iv(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_render_MultiTexCoord4iv_target, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    listOfInt32(tvb, offsetp, t, hf_x11_glx_render_MultiTexCoord4iv_v, hf_x11_glx_render_MultiTexCoord4iv_v_item, 4, byte_order);
}

static void mesa_MultiTexCoord4sv(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_render_MultiTexCoord4sv_target, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    listOfInt16(tvb, offsetp, t, hf_x11_glx_render_MultiTexCoord4sv_v, hf_x11_glx_render_MultiTexCoord4sv_v_item, 4, byte_order);
}

static void mesa_SampleCoverage(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_render_SampleCoverage_value, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_SampleCoverage_invert, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
}

static void mesa_CompressedTexImage3D(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    int imageSize;
    proto_tree_add_item(t, hf_x11_glx_render_CompressedTexImage3D_target, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_CompressedTexImage3D_level, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_CompressedTexImage3D_internalformat, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_CompressedTexImage3D_width, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_CompressedTexImage3D_height, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_CompressedTexImage3D_depth, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_CompressedTexImage3D_border, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    imageSize = tvb_get_uint32(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_glx_render_CompressedTexImage3D_imageSize, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    listOfByte(tvb, offsetp, t, hf_x11_glx_render_CompressedTexImage3D_data, imageSize, byte_order);
}

static void mesa_CompressedTexImage2D(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    int imageSize;
    proto_tree_add_item(t, hf_x11_glx_render_CompressedTexImage2D_target, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_CompressedTexImage2D_level, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_CompressedTexImage2D_internalformat, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_CompressedTexImage2D_width, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_CompressedTexImage2D_height, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_CompressedTexImage2D_border, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    imageSize = tvb_get_uint32(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_glx_render_CompressedTexImage2D_imageSize, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    listOfByte(tvb, offsetp, t, hf_x11_glx_render_CompressedTexImage2D_data, imageSize, byte_order);
}

static void mesa_CompressedTexImage1D(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    int imageSize;
    proto_tree_add_item(t, hf_x11_glx_render_CompressedTexImage1D_target, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_CompressedTexImage1D_level, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_CompressedTexImage1D_internalformat, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_CompressedTexImage1D_width, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_CompressedTexImage1D_border, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    imageSize = tvb_get_uint32(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_glx_render_CompressedTexImage1D_imageSize, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    listOfByte(tvb, offsetp, t, hf_x11_glx_render_CompressedTexImage1D_data, imageSize, byte_order);
}

static void mesa_CompressedTexSubImage3D(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    int imageSize;
    proto_tree_add_item(t, hf_x11_glx_render_CompressedTexSubImage3D_target, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_CompressedTexSubImage3D_level, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_CompressedTexSubImage3D_xoffset, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_CompressedTexSubImage3D_yoffset, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_CompressedTexSubImage3D_zoffset, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_CompressedTexSubImage3D_width, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_CompressedTexSubImage3D_height, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_CompressedTexSubImage3D_depth, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_CompressedTexSubImage3D_format, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    imageSize = tvb_get_uint32(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_glx_render_CompressedTexSubImage3D_imageSize, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    listOfByte(tvb, offsetp, t, hf_x11_glx_render_CompressedTexSubImage3D_data, imageSize, byte_order);
}

static void mesa_CompressedTexSubImage2D(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    int imageSize;
    proto_tree_add_item(t, hf_x11_glx_render_CompressedTexSubImage2D_target, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_CompressedTexSubImage2D_level, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_CompressedTexSubImage2D_xoffset, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_CompressedTexSubImage2D_yoffset, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_CompressedTexSubImage2D_width, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_CompressedTexSubImage2D_height, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_CompressedTexSubImage2D_format, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    imageSize = tvb_get_uint32(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_glx_render_CompressedTexSubImage2D_imageSize, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    listOfByte(tvb, offsetp, t, hf_x11_glx_render_CompressedTexSubImage2D_data, imageSize, byte_order);
}

static void mesa_CompressedTexSubImage1D(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    int imageSize;
    proto_tree_add_item(t, hf_x11_glx_render_CompressedTexSubImage1D_target, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_CompressedTexSubImage1D_level, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_CompressedTexSubImage1D_xoffset, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_CompressedTexSubImage1D_width, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_CompressedTexSubImage1D_format, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    imageSize = tvb_get_uint32(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_glx_render_CompressedTexSubImage1D_imageSize, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    listOfByte(tvb, offsetp, t, hf_x11_glx_render_CompressedTexSubImage1D_data, imageSize, byte_order);
}

static void mesa_BlendFuncSeparate(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_render_BlendFuncSeparate_sfactorRGB, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_BlendFuncSeparate_dfactorRGB, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_BlendFuncSeparate_sfactorAlpha, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_BlendFuncSeparate_dfactorAlpha, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}

static void mesa_FogCoorddv(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    listOfDouble(tvb, offsetp, t, hf_x11_glx_render_FogCoorddv_coord, hf_x11_glx_render_FogCoorddv_coord_item, 1, byte_order);
}

static void mesa_PointParameterf(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_render_PointParameterf_pname, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_PointParameterf_param, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}

static void mesa_PointParameterfv(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_render_PointParameterfv_pname, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    listOfFloat(tvb, offsetp, t, hf_x11_glx_render_PointParameterfv_params, hf_x11_glx_render_PointParameterfv_params_item, (length - 4) / 4, byte_order);
}

static void mesa_PointParameteri(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_render_PointParameteri_pname, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_PointParameteri_param, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}

static void mesa_PointParameteriv(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_render_PointParameteriv_pname, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    listOfInt32(tvb, offsetp, t, hf_x11_glx_render_PointParameteriv_params, hf_x11_glx_render_PointParameteriv_params_item, (length - 4) / 4, byte_order);
}

static void mesa_SecondaryColor3bv(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    listOfByte(tvb, offsetp, t, hf_x11_glx_render_SecondaryColor3bv_v, 3, byte_order);
}

static void mesa_SecondaryColor3dv(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    listOfDouble(tvb, offsetp, t, hf_x11_glx_render_SecondaryColor3dv_v, hf_x11_glx_render_SecondaryColor3dv_v_item, 3, byte_order);
}

static void mesa_SecondaryColor3iv(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    listOfInt32(tvb, offsetp, t, hf_x11_glx_render_SecondaryColor3iv_v, hf_x11_glx_render_SecondaryColor3iv_v_item, 3, byte_order);
}

static void mesa_SecondaryColor3sv(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    listOfInt16(tvb, offsetp, t, hf_x11_glx_render_SecondaryColor3sv_v, hf_x11_glx_render_SecondaryColor3sv_v_item, 3, byte_order);
}

static void mesa_SecondaryColor3ubv(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    listOfByte(tvb, offsetp, t, hf_x11_glx_render_SecondaryColor3ubv_v, 3, byte_order);
}

static void mesa_SecondaryColor3uiv(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    listOfCard32(tvb, offsetp, t, hf_x11_glx_render_SecondaryColor3uiv_v, hf_x11_glx_render_SecondaryColor3uiv_v_item, 3, byte_order);
}

static void mesa_SecondaryColor3usv(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    listOfCard16(tvb, offsetp, t, hf_x11_glx_render_SecondaryColor3usv_v, hf_x11_glx_render_SecondaryColor3usv_v_item, 3, byte_order);
}

static void mesa_WindowPos3fv(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    listOfFloat(tvb, offsetp, t, hf_x11_glx_render_WindowPos3fv_v, hf_x11_glx_render_WindowPos3fv_v_item, 3, byte_order);
}

static void mesa_BeginQuery(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_render_BeginQuery_target, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_BeginQuery_id, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}

static void mesa_EndQuery(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_render_EndQuery_target, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}

static void mesa_BlendEquationSeparate(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_render_BlendEquationSeparate_modeRGB, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_BlendEquationSeparate_modeA, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}

static void mesa_DrawBuffers(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    int n;
    n = tvb_get_uint32(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_glx_render_DrawBuffers_n, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    listOfCard32(tvb, offsetp, t, hf_x11_glx_render_DrawBuffers_bufs, hf_x11_glx_render_DrawBuffers_bufs_item, n, byte_order);
}

static void mesa_VertexAttrib1dv(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_render_VertexAttrib1dv_index, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    listOfDouble(tvb, offsetp, t, hf_x11_glx_render_VertexAttrib1dv_v, hf_x11_glx_render_VertexAttrib1dv_v_item, 1, byte_order);
}

static void mesa_VertexAttrib1sv(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_render_VertexAttrib1sv_index, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    listOfInt16(tvb, offsetp, t, hf_x11_glx_render_VertexAttrib1sv_v, hf_x11_glx_render_VertexAttrib1sv_v_item, 1, byte_order);
}

static void mesa_VertexAttrib2dv(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_render_VertexAttrib2dv_index, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    listOfDouble(tvb, offsetp, t, hf_x11_glx_render_VertexAttrib2dv_v, hf_x11_glx_render_VertexAttrib2dv_v_item, 2, byte_order);
}

static void mesa_VertexAttrib2sv(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_render_VertexAttrib2sv_index, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    listOfInt16(tvb, offsetp, t, hf_x11_glx_render_VertexAttrib2sv_v, hf_x11_glx_render_VertexAttrib2sv_v_item, 2, byte_order);
}

static void mesa_VertexAttrib3dv(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_render_VertexAttrib3dv_index, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    listOfDouble(tvb, offsetp, t, hf_x11_glx_render_VertexAttrib3dv_v, hf_x11_glx_render_VertexAttrib3dv_v_item, 3, byte_order);
}

static void mesa_VertexAttrib3sv(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_render_VertexAttrib3sv_index, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    listOfInt16(tvb, offsetp, t, hf_x11_glx_render_VertexAttrib3sv_v, hf_x11_glx_render_VertexAttrib3sv_v_item, 3, byte_order);
}

static void mesa_VertexAttrib4Nbv(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_render_VertexAttrib4Nbv_index, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    listOfByte(tvb, offsetp, t, hf_x11_glx_render_VertexAttrib4Nbv_v, 4, byte_order);
}

static void mesa_VertexAttrib4Niv(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_render_VertexAttrib4Niv_index, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    listOfInt32(tvb, offsetp, t, hf_x11_glx_render_VertexAttrib4Niv_v, hf_x11_glx_render_VertexAttrib4Niv_v_item, 4, byte_order);
}

static void mesa_VertexAttrib4Nsv(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_render_VertexAttrib4Nsv_index, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    listOfInt16(tvb, offsetp, t, hf_x11_glx_render_VertexAttrib4Nsv_v, hf_x11_glx_render_VertexAttrib4Nsv_v_item, 4, byte_order);
}

static void mesa_VertexAttrib4Nubv(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_render_VertexAttrib4Nubv_index, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    listOfByte(tvb, offsetp, t, hf_x11_glx_render_VertexAttrib4Nubv_v, 4, byte_order);
}

static void mesa_VertexAttrib4Nuiv(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_render_VertexAttrib4Nuiv_index, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    listOfCard32(tvb, offsetp, t, hf_x11_glx_render_VertexAttrib4Nuiv_v, hf_x11_glx_render_VertexAttrib4Nuiv_v_item, 4, byte_order);
}

static void mesa_VertexAttrib4Nusv(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_render_VertexAttrib4Nusv_index, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    listOfCard16(tvb, offsetp, t, hf_x11_glx_render_VertexAttrib4Nusv_v, hf_x11_glx_render_VertexAttrib4Nusv_v_item, 4, byte_order);
}

static void mesa_VertexAttrib4bv(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_render_VertexAttrib4bv_index, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    listOfByte(tvb, offsetp, t, hf_x11_glx_render_VertexAttrib4bv_v, 4, byte_order);
}

static void mesa_VertexAttrib4dv(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_render_VertexAttrib4dv_index, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    listOfDouble(tvb, offsetp, t, hf_x11_glx_render_VertexAttrib4dv_v, hf_x11_glx_render_VertexAttrib4dv_v_item, 4, byte_order);
}

static void mesa_VertexAttrib4iv(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_render_VertexAttrib4iv_index, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    listOfInt32(tvb, offsetp, t, hf_x11_glx_render_VertexAttrib4iv_v, hf_x11_glx_render_VertexAttrib4iv_v_item, 4, byte_order);
}

static void mesa_VertexAttrib4sv(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_render_VertexAttrib4sv_index, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    listOfInt16(tvb, offsetp, t, hf_x11_glx_render_VertexAttrib4sv_v, hf_x11_glx_render_VertexAttrib4sv_v_item, 4, byte_order);
}

static void mesa_VertexAttrib4ubv(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_render_VertexAttrib4ubv_index, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    listOfByte(tvb, offsetp, t, hf_x11_glx_render_VertexAttrib4ubv_v, 4, byte_order);
}

static void mesa_VertexAttrib4uiv(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_render_VertexAttrib4uiv_index, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    listOfCard32(tvb, offsetp, t, hf_x11_glx_render_VertexAttrib4uiv_v, hf_x11_glx_render_VertexAttrib4uiv_v_item, 4, byte_order);
}

static void mesa_VertexAttrib4usv(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_render_VertexAttrib4usv_index, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    listOfCard16(tvb, offsetp, t, hf_x11_glx_render_VertexAttrib4usv_v, hf_x11_glx_render_VertexAttrib4usv_v_item, 4, byte_order);
}

static void mesa_MultiTexCoord1fvARB(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_render_MultiTexCoord1fvARB_target, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    listOfFloat(tvb, offsetp, t, hf_x11_glx_render_MultiTexCoord1fvARB_v, hf_x11_glx_render_MultiTexCoord1fvARB_v_item, 1, byte_order);
}

static void mesa_MultiTexCoord2fvARB(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_render_MultiTexCoord2fvARB_target, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    listOfFloat(tvb, offsetp, t, hf_x11_glx_render_MultiTexCoord2fvARB_v, hf_x11_glx_render_MultiTexCoord2fvARB_v_item, 2, byte_order);
}

static void mesa_MultiTexCoord3fvARB(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_render_MultiTexCoord3fvARB_target, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    listOfFloat(tvb, offsetp, t, hf_x11_glx_render_MultiTexCoord3fvARB_v, hf_x11_glx_render_MultiTexCoord3fvARB_v_item, 3, byte_order);
}

static void mesa_MultiTexCoord4fvARB(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_render_MultiTexCoord4fvARB_target, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    listOfFloat(tvb, offsetp, t, hf_x11_glx_render_MultiTexCoord4fvARB_v, hf_x11_glx_render_MultiTexCoord4fvARB_v_item, 4, byte_order);
}

static void mesa_CurrentPaletteMatrixARB(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_render_CurrentPaletteMatrixARB_index, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}

static void mesa_MatrixIndexubvARB(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    int size;
    size = tvb_get_uint32(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_glx_render_MatrixIndexubvARB_size, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    listOfByte(tvb, offsetp, t, hf_x11_glx_render_MatrixIndexubvARB_indices, size, byte_order);
}

static void mesa_MatrixIndexusvARB(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    int size;
    size = tvb_get_uint32(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_glx_render_MatrixIndexusvARB_size, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    listOfCard16(tvb, offsetp, t, hf_x11_glx_render_MatrixIndexusvARB_indices, hf_x11_glx_render_MatrixIndexusvARB_indices_item, size, byte_order);
}

static void mesa_MatrixIndexuivARB(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    int size;
    size = tvb_get_uint32(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_glx_render_MatrixIndexuivARB_size, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    listOfCard32(tvb, offsetp, t, hf_x11_glx_render_MatrixIndexuivARB_indices, hf_x11_glx_render_MatrixIndexuivARB_indices_item, size, byte_order);
}

static void mesa_VertexAttrib1fvARB(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_render_VertexAttrib1fvARB_index, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    listOfFloat(tvb, offsetp, t, hf_x11_glx_render_VertexAttrib1fvARB_v, hf_x11_glx_render_VertexAttrib1fvARB_v_item, 1, byte_order);
}

static void mesa_VertexAttrib2fvARB(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_render_VertexAttrib2fvARB_index, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    listOfFloat(tvb, offsetp, t, hf_x11_glx_render_VertexAttrib2fvARB_v, hf_x11_glx_render_VertexAttrib2fvARB_v_item, 2, byte_order);
}

static void mesa_VertexAttrib3fvARB(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_render_VertexAttrib3fvARB_index, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    listOfFloat(tvb, offsetp, t, hf_x11_glx_render_VertexAttrib3fvARB_v, hf_x11_glx_render_VertexAttrib3fvARB_v_item, 3, byte_order);
}

static void mesa_VertexAttrib4fvARB(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_render_VertexAttrib4fvARB_index, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    listOfFloat(tvb, offsetp, t, hf_x11_glx_render_VertexAttrib4fvARB_v, hf_x11_glx_render_VertexAttrib4fvARB_v_item, 4, byte_order);
}

static void mesa_ProgramStringARB(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    int len;
    proto_tree_add_item(t, hf_x11_glx_render_ProgramStringARB_target, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_ProgramStringARB_format, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    len = tvb_get_uint32(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_glx_render_ProgramStringARB_len, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    listOfByte(tvb, offsetp, t, hf_x11_glx_render_ProgramStringARB_string, len, byte_order);
}

static void mesa_BindProgramARB(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_render_BindProgramARB_target, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_BindProgramARB_program, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}

static void mesa_ProgramEnvParameter4dvARB(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_render_ProgramEnvParameter4dvARB_target, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_ProgramEnvParameter4dvARB_index, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    listOfDouble(tvb, offsetp, t, hf_x11_glx_render_ProgramEnvParameter4dvARB_params, hf_x11_glx_render_ProgramEnvParameter4dvARB_params_item, 4, byte_order);
}

static void mesa_ProgramEnvParameter4fvARB(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_render_ProgramEnvParameter4fvARB_target, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_ProgramEnvParameter4fvARB_index, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    listOfFloat(tvb, offsetp, t, hf_x11_glx_render_ProgramEnvParameter4fvARB_params, hf_x11_glx_render_ProgramEnvParameter4fvARB_params_item, 4, byte_order);
}

static void mesa_ProgramLocalParameter4dvARB(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_render_ProgramLocalParameter4dvARB_target, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_ProgramLocalParameter4dvARB_index, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    listOfDouble(tvb, offsetp, t, hf_x11_glx_render_ProgramLocalParameter4dvARB_params, hf_x11_glx_render_ProgramLocalParameter4dvARB_params_item, 4, byte_order);
}

static void mesa_ProgramLocalParameter4fvARB(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_render_ProgramLocalParameter4fvARB_target, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_ProgramLocalParameter4fvARB_index, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    listOfFloat(tvb, offsetp, t, hf_x11_glx_render_ProgramLocalParameter4fvARB_params, hf_x11_glx_render_ProgramLocalParameter4fvARB_params_item, 4, byte_order);
}

static void mesa_TexFilterFuncSGIS(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    int n;
    proto_tree_add_item(t, hf_x11_glx_render_TexFilterFuncSGIS_target, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_TexFilterFuncSGIS_filter, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    n = tvb_get_uint32(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_glx_render_TexFilterFuncSGIS_n, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    listOfFloat(tvb, offsetp, t, hf_x11_glx_render_TexFilterFuncSGIS_weights, hf_x11_glx_render_TexFilterFuncSGIS_weights_item, n, byte_order);
}

static void mesa_TexImage4DSGIS(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_render_TexImage4DSGIS_swapbytes, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_glx_render_TexImage4DSGIS_lsbfirst, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 2, ENC_NA);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_glx_render_TexImage4DSGIS_rowlength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_TexImage4DSGIS_skiprows, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_TexImage4DSGIS_skippixels, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_TexImage4DSGIS_alignment, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_TexImage4DSGIS_target, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_TexImage4DSGIS_level, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_TexImage4DSGIS_internalformat, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_TexImage4DSGIS_width, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_TexImage4DSGIS_height, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_TexImage4DSGIS_depth, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_TexImage4DSGIS_size4d, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_TexImage4DSGIS_border, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_TexImage4DSGIS_format, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_TexImage4DSGIS_type, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    listOfByte(tvb, offsetp, t, hf_x11_glx_render_TexImage4DSGIS_pixels, (length - 60) / 1, byte_order);
}

static void mesa_TexSubImage4DSGIS(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_render_TexSubImage4DSGIS_swapbytes, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_glx_render_TexSubImage4DSGIS_lsbfirst, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 2, ENC_NA);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_glx_render_TexSubImage4DSGIS_rowlength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_TexSubImage4DSGIS_skiprows, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_TexSubImage4DSGIS_skippixels, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_TexSubImage4DSGIS_alignment, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_TexSubImage4DSGIS_target, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_TexSubImage4DSGIS_level, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_TexSubImage4DSGIS_xoffset, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_TexSubImage4DSGIS_yoffset, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_TexSubImage4DSGIS_zoffset, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_TexSubImage4DSGIS_woffset, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_TexSubImage4DSGIS_width, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_TexSubImage4DSGIS_height, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_TexSubImage4DSGIS_depth, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_TexSubImage4DSGIS_size4d, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_TexSubImage4DSGIS_format, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_TexSubImage4DSGIS_type, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_TexSubImage4DSGIS_UNUSED, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    listOfByte(tvb, offsetp, t, hf_x11_glx_render_TexSubImage4DSGIS_pixels, (length - 72) / 1, byte_order);
}

static void mesa_DetailTexFuncSGIS(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    int n;
    proto_tree_add_item(t, hf_x11_glx_render_DetailTexFuncSGIS_target, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    n = tvb_get_uint32(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_glx_render_DetailTexFuncSGIS_n, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    listOfFloat(tvb, offsetp, t, hf_x11_glx_render_DetailTexFuncSGIS_points, hf_x11_glx_render_DetailTexFuncSGIS_points_item, n, byte_order);
}

static void mesa_SharpenTexFuncSGIS(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    int n;
    proto_tree_add_item(t, hf_x11_glx_render_SharpenTexFuncSGIS_target, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    n = tvb_get_uint32(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_glx_render_SharpenTexFuncSGIS_n, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    listOfFloat(tvb, offsetp, t, hf_x11_glx_render_SharpenTexFuncSGIS_points, hf_x11_glx_render_SharpenTexFuncSGIS_points_item, n, byte_order);
}

static void mesa_SampleMaskSGIS(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_render_SampleMaskSGIS_value, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_SampleMaskSGIS_invert, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
}

static void mesa_SamplePatternSGIS(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_render_SamplePatternSGIS_pattern, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}

static void mesa_FrameZoomSGIX(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_render_FrameZoomSGIX_factor, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}

static void mesa_TagSampleBufferSGIX(tvbuff_t *tvb _U_, int *offsetp _U_, proto_tree *t _U_, unsigned byte_order _U_, int length _U_)
{
}

static void mesa_ReferencePlaneSGIX(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    listOfDouble(tvb, offsetp, t, hf_x11_glx_render_ReferencePlaneSGIX_equation, hf_x11_glx_render_ReferencePlaneSGIX_equation_item, 4, byte_order);
}

static void mesa_FogFuncSGIS(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    int n;
    n = tvb_get_uint32(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_glx_render_FogFuncSGIS_n, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    listOfFloat(tvb, offsetp, t, hf_x11_glx_render_FogFuncSGIS_points, hf_x11_glx_render_FogFuncSGIS_points_item, n, byte_order);
}

static void mesa_SecondaryColor3fvEXT(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    listOfFloat(tvb, offsetp, t, hf_x11_glx_render_SecondaryColor3fvEXT_v, hf_x11_glx_render_SecondaryColor3fvEXT_v_item, 3, byte_order);
}

static void mesa_FogCoordfvEXT(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    listOfFloat(tvb, offsetp, t, hf_x11_glx_render_FogCoordfvEXT_coord, hf_x11_glx_render_FogCoordfvEXT_coord_item, 1, byte_order);
}

static void mesa_PixelTexGenSGIX(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_render_PixelTexGenSGIX_mode, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}

static void mesa_VertexWeightfvEXT(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    listOfFloat(tvb, offsetp, t, hf_x11_glx_render_VertexWeightfvEXT_weight, hf_x11_glx_render_VertexWeightfvEXT_weight_item, 1, byte_order);
}

static void mesa_CombinerParameterfvNV(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_render_CombinerParameterfvNV_pname, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    listOfFloat(tvb, offsetp, t, hf_x11_glx_render_CombinerParameterfvNV_params, hf_x11_glx_render_CombinerParameterfvNV_params_item, (length - 4) / 4, byte_order);
}

static void mesa_CombinerParameterfNV(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_render_CombinerParameterfNV_pname, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_CombinerParameterfNV_param, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}

static void mesa_CombinerParameterivNV(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_render_CombinerParameterivNV_pname, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    listOfInt32(tvb, offsetp, t, hf_x11_glx_render_CombinerParameterivNV_params, hf_x11_glx_render_CombinerParameterivNV_params_item, (length - 4) / 4, byte_order);
}

static void mesa_CombinerParameteriNV(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_render_CombinerParameteriNV_pname, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_CombinerParameteriNV_param, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}

static void mesa_CombinerInputNV(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_render_CombinerInputNV_stage, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_CombinerInputNV_portion, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_CombinerInputNV_variable, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_CombinerInputNV_input, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_CombinerInputNV_mapping, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_CombinerInputNV_componentUsage, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}

static void mesa_CombinerOutputNV(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_render_CombinerOutputNV_stage, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_CombinerOutputNV_portion, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_CombinerOutputNV_abOutput, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_CombinerOutputNV_cdOutput, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_CombinerOutputNV_sumOutput, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_CombinerOutputNV_scale, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_CombinerOutputNV_bias, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_CombinerOutputNV_abDotProduct, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_glx_render_CombinerOutputNV_cdDotProduct, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_glx_render_CombinerOutputNV_muxSum, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
}

static void mesa_FinalCombinerInputNV(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_render_FinalCombinerInputNV_variable, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_FinalCombinerInputNV_input, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_FinalCombinerInputNV_mapping, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_FinalCombinerInputNV_componentUsage, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}

static void mesa_TextureColorMaskSGIS(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_render_TextureColorMaskSGIS_red, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_glx_render_TextureColorMaskSGIS_green, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_glx_render_TextureColorMaskSGIS_blue, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_glx_render_TextureColorMaskSGIS_alpha, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
}

static void mesa_ExecuteProgramNV(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_render_ExecuteProgramNV_target, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_ExecuteProgramNV_id, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    listOfFloat(tvb, offsetp, t, hf_x11_glx_render_ExecuteProgramNV_params, hf_x11_glx_render_ExecuteProgramNV_params_item, 4, byte_order);
}

static void mesa_LoadProgramNV(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    int len;
    proto_tree_add_item(t, hf_x11_glx_render_LoadProgramNV_target, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_LoadProgramNV_id, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    len = tvb_get_uint32(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_glx_render_LoadProgramNV_len, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    listOfByte(tvb, offsetp, t, hf_x11_glx_render_LoadProgramNV_program, len, byte_order);
}

static void mesa_ProgramParameters4dvNV(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    int num;
    proto_tree_add_item(t, hf_x11_glx_render_ProgramParameters4dvNV_target, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_ProgramParameters4dvNV_index, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    num = tvb_get_uint32(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_glx_render_ProgramParameters4dvNV_num, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    listOfDouble(tvb, offsetp, t, hf_x11_glx_render_ProgramParameters4dvNV_params, hf_x11_glx_render_ProgramParameters4dvNV_params_item, num, byte_order);
}

static void mesa_ProgramParameters4fvNV(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    int num;
    proto_tree_add_item(t, hf_x11_glx_render_ProgramParameters4fvNV_target, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_ProgramParameters4fvNV_index, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    num = tvb_get_uint32(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_glx_render_ProgramParameters4fvNV_num, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    listOfFloat(tvb, offsetp, t, hf_x11_glx_render_ProgramParameters4fvNV_params, hf_x11_glx_render_ProgramParameters4fvNV_params_item, num, byte_order);
}

static void mesa_RequestResidentProgramsNV(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    int n;
    n = tvb_get_uint32(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_glx_render_RequestResidentProgramsNV_n, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    listOfCard32(tvb, offsetp, t, hf_x11_glx_render_RequestResidentProgramsNV_ids, hf_x11_glx_render_RequestResidentProgramsNV_ids_item, n, byte_order);
}

static void mesa_TrackMatrixNV(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_render_TrackMatrixNV_target, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_TrackMatrixNV_address, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_TrackMatrixNV_matrix, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_render_TrackMatrixNV_transform, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}

static void mesa_VertexAttrib1svNV(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_render_VertexAttrib1svNV_index, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    listOfInt16(tvb, offsetp, t, hf_x11_glx_render_VertexAttrib1svNV_v, hf_x11_glx_render_VertexAttrib1svNV_v_item, 1, byte_order);
}

static void mesa_VertexAttrib2svNV(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_render_VertexAttrib2svNV_index, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    listOfInt16(tvb, offsetp, t, hf_x11_glx_render_VertexAttrib2svNV_v, hf_x11_glx_render_VertexAttrib2svNV_v_item, 2, byte_order);
}

static void mesa_VertexAttrib3svNV(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_render_VertexAttrib3svNV_index, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    listOfInt16(tvb, offsetp, t, hf_x11_glx_render_VertexAttrib3svNV_v, hf_x11_glx_render_VertexAttrib3svNV_v_item, 3, byte_order);
}

static void mesa_VertexAttrib4svNV(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_render_VertexAttrib4svNV_index, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    listOfInt16(tvb, offsetp, t, hf_x11_glx_render_VertexAttrib4svNV_v, hf_x11_glx_render_VertexAttrib4svNV_v_item, 4, byte_order);
}

static void mesa_VertexAttrib1fvNV(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_render_VertexAttrib1fvNV_index, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    listOfFloat(tvb, offsetp, t, hf_x11_glx_render_VertexAttrib1fvNV_v, hf_x11_glx_render_VertexAttrib1fvNV_v_item, 1, byte_order);
}

static void mesa_VertexAttrib2fvNV(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_render_VertexAttrib2fvNV_index, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    listOfFloat(tvb, offsetp, t, hf_x11_glx_render_VertexAttrib2fvNV_v, hf_x11_glx_render_VertexAttrib2fvNV_v_item, 2, byte_order);
}

static void mesa_VertexAttrib3fvNV(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_render_VertexAttrib3fvNV_index, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    listOfFloat(tvb, offsetp, t, hf_x11_glx_render_VertexAttrib3fvNV_v, hf_x11_glx_render_VertexAttrib3fvNV_v_item, 3, byte_order);
}

static void mesa_VertexAttrib4fvNV(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_render_VertexAttrib4fvNV_index, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    listOfFloat(tvb, offsetp, t, hf_x11_glx_render_VertexAttrib4fvNV_v, hf_x11_glx_render_VertexAttrib4fvNV_v_item, 4, byte_order);
}

static void mesa_VertexAttrib1dvNV(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_render_VertexAttrib1dvNV_index, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    listOfDouble(tvb, offsetp, t, hf_x11_glx_render_VertexAttrib1dvNV_v, hf_x11_glx_render_VertexAttrib1dvNV_v_item, 1, byte_order);
}

static void mesa_VertexAttrib2dvNV(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_render_VertexAttrib2dvNV_index, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    listOfDouble(tvb, offsetp, t, hf_x11_glx_render_VertexAttrib2dvNV_v, hf_x11_glx_render_VertexAttrib2dvNV_v_item, 2, byte_order);
}

static void mesa_VertexAttrib3dvNV(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_render_VertexAttrib3dvNV_index, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    listOfDouble(tvb, offsetp, t, hf_x11_glx_render_VertexAttrib3dvNV_v, hf_x11_glx_render_VertexAttrib3dvNV_v_item, 3, byte_order);
}

static void mesa_VertexAttrib4dvNV(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_render_VertexAttrib4dvNV_index, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    listOfDouble(tvb, offsetp, t, hf_x11_glx_render_VertexAttrib4dvNV_v, hf_x11_glx_render_VertexAttrib4dvNV_v_item, 4, byte_order);
}

static void mesa_VertexAttrib4ubvNV(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_render_VertexAttrib4ubvNV_index, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    listOfByte(tvb, offsetp, t, hf_x11_glx_render_VertexAttrib4ubvNV_v, 4, byte_order);
}

static void mesa_VertexAttribs1svNV(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    int n;
    proto_tree_add_item(t, hf_x11_glx_render_VertexAttribs1svNV_index, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    n = tvb_get_uint32(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_glx_render_VertexAttribs1svNV_n, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    listOfInt16(tvb, offsetp, t, hf_x11_glx_render_VertexAttribs1svNV_v, hf_x11_glx_render_VertexAttribs1svNV_v_item, n, byte_order);
}

static void mesa_VertexAttribs2svNV(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    int n;
    proto_tree_add_item(t, hf_x11_glx_render_VertexAttribs2svNV_index, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    n = tvb_get_uint32(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_glx_render_VertexAttribs2svNV_n, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    listOfInt16(tvb, offsetp, t, hf_x11_glx_render_VertexAttribs2svNV_v, hf_x11_glx_render_VertexAttribs2svNV_v_item, n, byte_order);
}

static void mesa_VertexAttribs3svNV(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    int n;
    proto_tree_add_item(t, hf_x11_glx_render_VertexAttribs3svNV_index, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    n = tvb_get_uint32(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_glx_render_VertexAttribs3svNV_n, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    listOfInt16(tvb, offsetp, t, hf_x11_glx_render_VertexAttribs3svNV_v, hf_x11_glx_render_VertexAttribs3svNV_v_item, n, byte_order);
}

static void mesa_VertexAttribs4svNV(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    int n;
    proto_tree_add_item(t, hf_x11_glx_render_VertexAttribs4svNV_index, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    n = tvb_get_uint32(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_glx_render_VertexAttribs4svNV_n, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    listOfInt16(tvb, offsetp, t, hf_x11_glx_render_VertexAttribs4svNV_v, hf_x11_glx_render_VertexAttribs4svNV_v_item, n, byte_order);
}

static void mesa_VertexAttribs1fvNV(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    int n;
    proto_tree_add_item(t, hf_x11_glx_render_VertexAttribs1fvNV_index, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    n = tvb_get_uint32(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_glx_render_VertexAttribs1fvNV_n, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    listOfFloat(tvb, offsetp, t, hf_x11_glx_render_VertexAttribs1fvNV_v, hf_x11_glx_render_VertexAttribs1fvNV_v_item, n, byte_order);
}

static void mesa_VertexAttribs2fvNV(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    int n;
    proto_tree_add_item(t, hf_x11_glx_render_VertexAttribs2fvNV_index, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    n = tvb_get_uint32(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_glx_render_VertexAttribs2fvNV_n, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    listOfFloat(tvb, offsetp, t, hf_x11_glx_render_VertexAttribs2fvNV_v, hf_x11_glx_render_VertexAttribs2fvNV_v_item, n, byte_order);
}

static void mesa_VertexAttribs3fvNV(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    int n;
    proto_tree_add_item(t, hf_x11_glx_render_VertexAttribs3fvNV_index, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    n = tvb_get_uint32(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_glx_render_VertexAttribs3fvNV_n, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    listOfFloat(tvb, offsetp, t, hf_x11_glx_render_VertexAttribs3fvNV_v, hf_x11_glx_render_VertexAttribs3fvNV_v_item, n, byte_order);
}

static void mesa_VertexAttribs4fvNV(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    int n;
    proto_tree_add_item(t, hf_x11_glx_render_VertexAttribs4fvNV_index, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    n = tvb_get_uint32(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_glx_render_VertexAttribs4fvNV_n, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    listOfFloat(tvb, offsetp, t, hf_x11_glx_render_VertexAttribs4fvNV_v, hf_x11_glx_render_VertexAttribs4fvNV_v_item, n, byte_order);
}

static void mesa_VertexAttribs1dvNV(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    int n;
    proto_tree_add_item(t, hf_x11_glx_render_VertexAttribs1dvNV_index, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    n = tvb_get_uint32(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_glx_render_VertexAttribs1dvNV_n, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    listOfDouble(tvb, offsetp, t, hf_x11_glx_render_VertexAttribs1dvNV_v, hf_x11_glx_render_VertexAttribs1dvNV_v_item, n, byte_order);
}

static void mesa_VertexAttribs2dvNV(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    int n;
    proto_tree_add_item(t, hf_x11_glx_render_VertexAttribs2dvNV_index, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    n = tvb_get_uint32(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_glx_render_VertexAttribs2dvNV_n, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    listOfDouble(tvb, offsetp, t, hf_x11_glx_render_VertexAttribs2dvNV_v, hf_x11_glx_render_VertexAttribs2dvNV_v_item, n, byte_order);
}

static void mesa_VertexAttribs3dvNV(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    int n;
    proto_tree_add_item(t, hf_x11_glx_render_VertexAttribs3dvNV_index, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    n = tvb_get_uint32(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_glx_render_VertexAttribs3dvNV_n, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    listOfDouble(tvb, offsetp, t, hf_x11_glx_render_VertexAttribs3dvNV_v, hf_x11_glx_render_VertexAttribs3dvNV_v_item, n, byte_order);
}

static void mesa_VertexAttribs4dvNV(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    int n;
    proto_tree_add_item(t, hf_x11_glx_render_VertexAttribs4dvNV_index, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    n = tvb_get_uint32(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_glx_render_VertexAttribs4dvNV_n, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    listOfDouble(tvb, offsetp, t, hf_x11_glx_render_VertexAttribs4dvNV_v, hf_x11_glx_render_VertexAttribs4dvNV_v_item, n, byte_order);
}

static void mesa_VertexAttribs4ubvNV(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    int n;
    proto_tree_add_item(t, hf_x11_glx_render_VertexAttribs4ubvNV_index, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    n = tvb_get_uint32(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_glx_render_VertexAttribs4ubvNV_n, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    listOfByte(tvb, offsetp, t, hf_x11_glx_render_VertexAttribs4ubvNV_v, n, byte_order);
}

static void mesa_ActiveStencilFaceEXT(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_render_ActiveStencilFaceEXT_face, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}

static void mesa_ProgramNamedParameter4fvNV(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    int len;
    proto_tree_add_item(t, hf_x11_glx_render_ProgramNamedParameter4fvNV_id, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    len = tvb_get_uint32(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_glx_render_ProgramNamedParameter4fvNV_len, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    listOfByte(tvb, offsetp, t, hf_x11_glx_render_ProgramNamedParameter4fvNV_name, len, byte_order);
    listOfFloat(tvb, offsetp, t, hf_x11_glx_render_ProgramNamedParameter4fvNV_v, hf_x11_glx_render_ProgramNamedParameter4fvNV_v_item, 4, byte_order);
}

static void mesa_ProgramNamedParameter4dvNV(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    int len;
    proto_tree_add_item(t, hf_x11_glx_render_ProgramNamedParameter4dvNV_id, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    len = tvb_get_uint32(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_glx_render_ProgramNamedParameter4dvNV_len, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    listOfByte(tvb, offsetp, t, hf_x11_glx_render_ProgramNamedParameter4dvNV_name, len, byte_order);
    listOfDouble(tvb, offsetp, t, hf_x11_glx_render_ProgramNamedParameter4dvNV_v, hf_x11_glx_render_ProgramNamedParameter4dvNV_v_item, 4, byte_order);
}

static void mesa_DepthBoundsEXT(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_render_DepthBoundsEXT_zmin, tvb, *offsetp, 8, byte_order);
    *offsetp += 8;
    proto_tree_add_item(t, hf_x11_glx_render_DepthBoundsEXT_zmax, tvb, *offsetp, 8, byte_order);
    *offsetp += 8;
}

static const value_string glx_render_op_name[] = {
    { 1, "glCallList" },
    { 2, "glCallLists" },
    { 3, "glListBase" },
    { 4, "glBegin" },
    { 5, "glBitmap" },
    { 6, "glColor3bv" },
    { 7, "glColor3dv" },
    { 8, "glColor3fv" },
    { 9, "glColor3iv" },
    { 10, "glColor3sv" },
    { 11, "glColor3ubv" },
    { 12, "glColor3uiv" },
    { 13, "glColor3usv" },
    { 14, "glColor4bv" },
    { 15, "glColor4dv" },
    { 16, "glColor4fv" },
    { 17, "glColor4iv" },
    { 18, "glColor4sv" },
    { 19, "glColor4ubv" },
    { 20, "glColor4uiv" },
    { 21, "glColor4usv" },
    { 22, "glEdgeFlagv" },
    { 23, "glEnd" },
    { 24, "glIndexdv" },
    { 25, "glIndexfv" },
    { 26, "glIndexiv" },
    { 27, "glIndexsv" },
    { 28, "glNormal3bv" },
    { 29, "glNormal3dv" },
    { 30, "glNormal3fv" },
    { 31, "glNormal3iv" },
    { 32, "glNormal3sv" },
    { 33, "glRasterPos2dv" },
    { 34, "glRasterPos2fv" },
    { 35, "glRasterPos2iv" },
    { 36, "glRasterPos2sv" },
    { 37, "glRasterPos3dv" },
    { 38, "glRasterPos3fv" },
    { 39, "glRasterPos3iv" },
    { 40, "glRasterPos3sv" },
    { 41, "glRasterPos4dv" },
    { 42, "glRasterPos4fv" },
    { 43, "glRasterPos4iv" },
    { 44, "glRasterPos4sv" },
    { 45, "glRectdv" },
    { 46, "glRectfv" },
    { 47, "glRectiv" },
    { 48, "glRectsv" },
    { 49, "glTexCoord1dv" },
    { 50, "glTexCoord1fv" },
    { 51, "glTexCoord1iv" },
    { 52, "glTexCoord1sv" },
    { 53, "glTexCoord2dv" },
    { 54, "glTexCoord2fv" },
    { 55, "glTexCoord2iv" },
    { 56, "glTexCoord2sv" },
    { 57, "glTexCoord3dv" },
    { 58, "glTexCoord3fv" },
    { 59, "glTexCoord3iv" },
    { 60, "glTexCoord3sv" },
    { 61, "glTexCoord4dv" },
    { 62, "glTexCoord4fv" },
    { 63, "glTexCoord4iv" },
    { 64, "glTexCoord4sv" },
    { 65, "glVertex2dv" },
    { 66, "glVertex2fv" },
    { 67, "glVertex2iv" },
    { 68, "glVertex2sv" },
    { 69, "glVertex3dv" },
    { 70, "glVertex3fv" },
    { 71, "glVertex3iv" },
    { 72, "glVertex3sv" },
    { 73, "glVertex4dv" },
    { 74, "glVertex4fv" },
    { 75, "glVertex4iv" },
    { 76, "glVertex4sv" },
    { 77, "glClipPlane" },
    { 78, "glColorMaterial" },
    { 79, "glCullFace" },
    { 80, "glFogf" },
    { 81, "glFogfv" },
    { 82, "glFogi" },
    { 83, "glFogiv" },
    { 84, "glFrontFace" },
    { 85, "glHint" },
    { 86, "glLightf" },
    { 87, "glLightfv" },
    { 88, "glLighti" },
    { 89, "glLightiv" },
    { 90, "glLightModelf" },
    { 91, "glLightModelfv" },
    { 92, "glLightModeli" },
    { 93, "glLightModeliv" },
    { 94, "glLineStipple" },
    { 95, "glLineWidth" },
    { 96, "glMaterialf" },
    { 97, "glMaterialfv" },
    { 98, "glMateriali" },
    { 99, "glMaterialiv" },
    { 100, "glPointSize" },
    { 101, "glPolygonMode" },
    { 102, "glPolygonStipple" },
    { 103, "glScissor" },
    { 104, "glShadeModel" },
    { 105, "glTexParameterf" },
    { 106, "glTexParameterfv" },
    { 107, "glTexParameteri" },
    { 108, "glTexParameteriv" },
    { 109, "glTexImage1D" },
    { 110, "glTexImage2D" },
    { 111, "glTexEnvf" },
    { 112, "glTexEnvfv" },
    { 113, "glTexEnvi" },
    { 114, "glTexEnviv" },
    { 115, "glTexGend" },
    { 116, "glTexGendv" },
    { 117, "glTexGenf" },
    { 118, "glTexGenfv" },
    { 119, "glTexGeni" },
    { 120, "glTexGeniv" },
    { 121, "glInitNames" },
    { 122, "glLoadName" },
    { 123, "glPassThrough" },
    { 124, "glPopName" },
    { 125, "glPushName" },
    { 126, "glDrawBuffer" },
    { 127, "glClear" },
    { 128, "glClearAccum" },
    { 129, "glClearIndex" },
    { 130, "glClearColor" },
    { 131, "glClearStencil" },
    { 132, "glClearDepth" },
    { 133, "glStencilMask" },
    { 134, "glColorMask" },
    { 135, "glDepthMask" },
    { 136, "glIndexMask" },
    { 137, "glAccum" },
    { 138, "glDisable" },
    { 139, "glEnable" },
    { 141, "glPopAttrib" },
    { 142, "glPushAttrib" },
    { 143, "glMap1d" },
    { 144, "glMap1f" },
    { 145, "glMap2d" },
    { 146, "glMap2f" },
    { 147, "glMapGrid1d" },
    { 148, "glMapGrid1f" },
    { 149, "glMapGrid2d" },
    { 150, "glMapGrid2f" },
    { 151, "glEvalCoord1dv" },
    { 152, "glEvalCoord1fv" },
    { 153, "glEvalCoord2dv" },
    { 154, "glEvalCoord2fv" },
    { 155, "glEvalMesh1" },
    { 156, "glEvalPoint1" },
    { 157, "glEvalMesh2" },
    { 158, "glEvalPoint2" },
    { 159, "glAlphaFunc" },
    { 160, "glBlendFunc" },
    { 161, "glLogicOp" },
    { 162, "glStencilFunc" },
    { 163, "glStencilOp" },
    { 164, "glDepthFunc" },
    { 165, "glPixelZoom" },
    { 166, "glPixelTransferf" },
    { 167, "glPixelTransferi" },
    { 168, "glPixelMapfv" },
    { 169, "glPixelMapuiv" },
    { 170, "glPixelMapusv" },
    { 171, "glReadBuffer" },
    { 172, "glCopyPixels" },
    { 173, "glDrawPixels" },
    { 174, "glDepthRange" },
    { 175, "glFrustum" },
    { 176, "glLoadIdentity" },
    { 177, "glLoadMatrixf" },
    { 178, "glLoadMatrixd" },
    { 179, "glMatrixMode" },
    { 180, "glMultMatrixf" },
    { 181, "glMultMatrixd" },
    { 182, "glOrtho" },
    { 183, "glPopMatrix" },
    { 184, "glPushMatrix" },
    { 185, "glRotated" },
    { 186, "glRotatef" },
    { 187, "glScaled" },
    { 188, "glScalef" },
    { 189, "glTranslated" },
    { 190, "glTranslatef" },
    { 191, "glViewport" },
    { 192, "glPolygonOffset" },
    { 193, "glDrawArrays" },
    { 194, "glIndexubv" },
    { 195, "glColorSubTable" },
    { 196, "glCopyColorSubTable" },
    { 197, "glActiveTexture" },
    { 198, "glMultiTexCoord1dv" },
    { 199, "glMultiTexCoord1fvARB" },
    { 200, "glMultiTexCoord1iv" },
    { 201, "glMultiTexCoord1sv" },
    { 202, "glMultiTexCoord2dv" },
    { 203, "glMultiTexCoord2fvARB" },
    { 204, "glMultiTexCoord2iv" },
    { 205, "glMultiTexCoord2sv" },
    { 206, "glMultiTexCoord3dv" },
    { 207, "glMultiTexCoord3fvARB" },
    { 208, "glMultiTexCoord3iv" },
    { 209, "glMultiTexCoord3sv" },
    { 210, "glMultiTexCoord4dv" },
    { 211, "glMultiTexCoord4fvARB" },
    { 212, "glMultiTexCoord4iv" },
    { 213, "glMultiTexCoord4sv" },
    { 214, "glCompressedTexImage1D" },
    { 215, "glCompressedTexImage2D" },
    { 216, "glCompressedTexImage3D" },
    { 217, "glCompressedTexSubImage1D" },
    { 218, "glCompressedTexSubImage2D" },
    { 219, "glCompressedTexSubImage3D" },
    { 229, "glSampleCoverage" },
    { 230, "glWindowPos3fv" },
    { 231, "glBeginQuery" },
    { 232, "glEndQuery" },
    { 233, "glDrawBuffers" },
    { 2048, "glSampleMaskSGIS" },
    { 2049, "glSamplePatternSGIS" },
    { 2050, "glTagSampleBufferSGIX" },
    { 2051, "glDetailTexFuncSGIS" },
    { 2052, "glSharpenTexFuncSGIS" },
    { 2053, "glColorTable" },
    { 2054, "glColorTableParameterfv" },
    { 2055, "glColorTableParameteriv" },
    { 2056, "glCopyColorTable" },
    { 2057, "glTexImage4DSGIS" },
    { 2058, "glTexSubImage4DSGIS" },
    { 2059, "glPixelTexGenSGIX" },
    { 2064, "glTexFilterFuncSGIS" },
    { 2065, "glPointParameterf" },
    { 2066, "glPointParameterfv" },
    { 2067, "glFogFuncSGIS" },
    { 2071, "glReferencePlaneSGIX" },
    { 2072, "glFrameZoomSGIX" },
    { 2082, "glTextureColorMaskSGIS" },
    { 4096, "glBlendColor" },
    { 4097, "glBlendEquation" },
    { 4099, "glTexSubImage1D" },
    { 4100, "glTexSubImage2D" },
    { 4101, "glConvolutionFilter1D" },
    { 4102, "glConvolutionFilter2D" },
    { 4103, "glConvolutionParameterf" },
    { 4104, "glConvolutionParameterfv" },
    { 4105, "glConvolutionParameteri" },
    { 4106, "glConvolutionParameteriv" },
    { 4107, "glCopyConvolutionFilter1D" },
    { 4108, "glCopyConvolutionFilter2D" },
    { 4109, "glSeparableFilter2D" },
    { 4110, "glHistogram" },
    { 4111, "glMinmax" },
    { 4112, "glResetHistogram" },
    { 4113, "glResetMinmax" },
    { 4114, "glTexImage3D" },
    { 4115, "glTexSubImage3D" },
    { 4117, "glBindTexture" },
    { 4118, "glPrioritizeTextures" },
    { 4119, "glCopyTexImage1D" },
    { 4120, "glCopyTexImage2D" },
    { 4121, "glCopyTexSubImage1D" },
    { 4122, "glCopyTexSubImage2D" },
    { 4123, "glCopyTexSubImage3D" },
    { 4124, "glFogCoordfvEXT" },
    { 4125, "glFogCoorddv" },
    { 4126, "glSecondaryColor3bv" },
    { 4127, "glSecondaryColor3sv" },
    { 4128, "glSecondaryColor3iv" },
    { 4129, "glSecondaryColor3fvEXT" },
    { 4130, "glSecondaryColor3dv" },
    { 4131, "glSecondaryColor3ubv" },
    { 4132, "glSecondaryColor3usv" },
    { 4133, "glSecondaryColor3uiv" },
    { 4134, "glBlendFuncSeparate" },
    { 4135, "glVertexWeightfvEXT" },
    { 4136, "glCombinerParameterfNV" },
    { 4137, "glCombinerParameterfvNV" },
    { 4138, "glCombinerParameteriNV" },
    { 4139, "glCombinerParameterivNV" },
    { 4140, "glCombinerInputNV" },
    { 4141, "glCombinerOutputNV" },
    { 4142, "glFinalCombinerInputNV" },
    { 4180, "glBindProgramARB" },
    { 4181, "glExecuteProgramNV" },
    { 4182, "glRequestResidentProgramsNV" },
    { 4183, "glLoadProgramNV" },
    { 4184, "glProgramEnvParameter4fvARB" },
    { 4185, "glProgramEnvParameter4dvARB" },
    { 4186, "glProgramParameters4fvNV" },
    { 4187, "glProgramParameters4dvNV" },
    { 4188, "glTrackMatrixNV" },
    { 4189, "glVertexAttrib1sv" },
    { 4190, "glVertexAttrib2sv" },
    { 4191, "glVertexAttrib3sv" },
    { 4192, "glVertexAttrib4sv" },
    { 4193, "glVertexAttrib1fvARB" },
    { 4194, "glVertexAttrib2fvARB" },
    { 4195, "glVertexAttrib3fvARB" },
    { 4196, "glVertexAttrib4fvARB" },
    { 4197, "glVertexAttrib1dv" },
    { 4198, "glVertexAttrib2dv" },
    { 4199, "glVertexAttrib3dv" },
    { 4200, "glVertexAttrib4dv" },
    { 4201, "glVertexAttrib4Nubv" },
    { 4202, "glVertexAttribs1svNV" },
    { 4203, "glVertexAttribs2svNV" },
    { 4204, "glVertexAttribs3svNV" },
    { 4205, "glVertexAttribs4svNV" },
    { 4206, "glVertexAttribs1fvNV" },
    { 4207, "glVertexAttribs2fvNV" },
    { 4208, "glVertexAttribs3fvNV" },
    { 4209, "glVertexAttribs4fvNV" },
    { 4210, "glVertexAttribs1dvNV" },
    { 4211, "glVertexAttribs2dvNV" },
    { 4212, "glVertexAttribs3dvNV" },
    { 4213, "glVertexAttribs4dvNV" },
    { 4214, "glVertexAttribs4ubvNV" },
    { 4215, "glProgramLocalParameter4fvARB" },
    { 4216, "glProgramLocalParameter4dvARB" },
    { 4217, "glProgramStringARB" },
    { 4218, "glProgramNamedParameter4fvNV" },
    { 4219, "glProgramNamedParameter4dvNV" },
    { 4220, "glActiveStencilFaceEXT" },
    { 4221, "glPointParameteri" },
    { 4222, "glPointParameteriv" },
    { 4228, "glBlendEquationSeparate" },
    { 4229, "glDepthBoundsEXT" },
    { 4230, "glVertexAttrib4bv" },
    { 4231, "glVertexAttrib4iv" },
    { 4232, "glVertexAttrib4ubv" },
    { 4233, "glVertexAttrib4usv" },
    { 4234, "glVertexAttrib4uiv" },
    { 4235, "glVertexAttrib4Nbv" },
    { 4236, "glVertexAttrib4Nsv" },
    { 4237, "glVertexAttrib4Niv" },
    { 4238, "glVertexAttrib4Nusv" },
    { 4239, "glVertexAttrib4Nuiv" },
    { 4265, "glVertexAttrib1svNV" },
    { 4266, "glVertexAttrib2svNV" },
    { 4267, "glVertexAttrib3svNV" },
    { 4268, "glVertexAttrib4svNV" },
    { 4269, "glVertexAttrib1fvNV" },
    { 4270, "glVertexAttrib2fvNV" },
    { 4271, "glVertexAttrib3fvNV" },
    { 4272, "glVertexAttrib4fvNV" },
    { 4273, "glVertexAttrib1dvNV" },
    { 4274, "glVertexAttrib2dvNV" },
    { 4275, "glVertexAttrib3dvNV" },
    { 4276, "glVertexAttrib4dvNV" },
    { 4277, "glVertexAttrib4ubvNV" },
    { 4326, "glMatrixIndexubvARB" },
    { 4327, "glMatrixIndexusvARB" },
    { 4328, "glMatrixIndexuivARB" },
    { 4329, "glCurrentPaletteMatrixARB" },
    { 0, NULL }
};
static value_string_ext mesa_enum_ext = VALUE_STRING_EXT_INIT(mesa_enum);

static void dispatch_glx_render(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order, int length)
{
    while (length >= 4) {
        uint32_t op, len;
        int next;
        proto_item *ti;
        proto_tree *tt;

        len = tvb_get_uint16(tvb, *offsetp, byte_order);

        op = tvb_get_uint16(tvb, *offsetp + 2, byte_order);
        ti = proto_tree_add_uint(t, hf_x11_glx_render_op_name, tvb, *offsetp, len, op);

        tt = proto_item_add_subtree(ti, ett_x11_list_of_rectangle);

        ti = proto_tree_add_item(tt, hf_x11_request_length, tvb, *offsetp, 2, byte_order);
        *offsetp += 2;
        proto_tree_add_item(tt, hf_x11_glx_render_op_name, tvb, *offsetp, 2, byte_order);
        *offsetp += 2;

        if (len < 4) {
            expert_add_info(pinfo, ti, &ei_x11_request_length);
            /* Eat the rest of the packet, mark it undecoded */
            len = length;
            op = -1;
        }
        len -= 4;

        next = *offsetp + len;

        switch (op) {
        case 1:
            mesa_CallList(tvb, offsetp, tt, byte_order, len);
            break;
        case 2:
            mesa_CallLists(tvb, offsetp, tt, byte_order, len);
            break;
        case 3:
            mesa_ListBase(tvb, offsetp, tt, byte_order, len);
            break;
        case 4:
            mesa_Begin(tvb, offsetp, tt, byte_order, len);
            break;
        case 5:
            mesa_Bitmap(tvb, offsetp, tt, byte_order, len);
            break;
        case 6:
            mesa_Color3bv(tvb, offsetp, tt, byte_order, len);
            break;
        case 7:
            mesa_Color3dv(tvb, offsetp, tt, byte_order, len);
            break;
        case 8:
            mesa_Color3fv(tvb, offsetp, tt, byte_order, len);
            break;
        case 9:
            mesa_Color3iv(tvb, offsetp, tt, byte_order, len);
            break;
        case 10:
            mesa_Color3sv(tvb, offsetp, tt, byte_order, len);
            break;
        case 11:
            mesa_Color3ubv(tvb, offsetp, tt, byte_order, len);
            break;
        case 12:
            mesa_Color3uiv(tvb, offsetp, tt, byte_order, len);
            break;
        case 13:
            mesa_Color3usv(tvb, offsetp, tt, byte_order, len);
            break;
        case 14:
            mesa_Color4bv(tvb, offsetp, tt, byte_order, len);
            break;
        case 15:
            mesa_Color4dv(tvb, offsetp, tt, byte_order, len);
            break;
        case 16:
            mesa_Color4fv(tvb, offsetp, tt, byte_order, len);
            break;
        case 17:
            mesa_Color4iv(tvb, offsetp, tt, byte_order, len);
            break;
        case 18:
            mesa_Color4sv(tvb, offsetp, tt, byte_order, len);
            break;
        case 19:
            mesa_Color4ubv(tvb, offsetp, tt, byte_order, len);
            break;
        case 20:
            mesa_Color4uiv(tvb, offsetp, tt, byte_order, len);
            break;
        case 21:
            mesa_Color4usv(tvb, offsetp, tt, byte_order, len);
            break;
        case 22:
            mesa_EdgeFlagv(tvb, offsetp, tt, byte_order, len);
            break;
        case 23:
            mesa_End(tvb, offsetp, tt, byte_order, len);
            break;
        case 24:
            mesa_Indexdv(tvb, offsetp, tt, byte_order, len);
            break;
        case 25:
            mesa_Indexfv(tvb, offsetp, tt, byte_order, len);
            break;
        case 26:
            mesa_Indexiv(tvb, offsetp, tt, byte_order, len);
            break;
        case 27:
            mesa_Indexsv(tvb, offsetp, tt, byte_order, len);
            break;
        case 28:
            mesa_Normal3bv(tvb, offsetp, tt, byte_order, len);
            break;
        case 29:
            mesa_Normal3dv(tvb, offsetp, tt, byte_order, len);
            break;
        case 30:
            mesa_Normal3fv(tvb, offsetp, tt, byte_order, len);
            break;
        case 31:
            mesa_Normal3iv(tvb, offsetp, tt, byte_order, len);
            break;
        case 32:
            mesa_Normal3sv(tvb, offsetp, tt, byte_order, len);
            break;
        case 33:
            mesa_RasterPos2dv(tvb, offsetp, tt, byte_order, len);
            break;
        case 34:
            mesa_RasterPos2fv(tvb, offsetp, tt, byte_order, len);
            break;
        case 35:
            mesa_RasterPos2iv(tvb, offsetp, tt, byte_order, len);
            break;
        case 36:
            mesa_RasterPos2sv(tvb, offsetp, tt, byte_order, len);
            break;
        case 37:
            mesa_RasterPos3dv(tvb, offsetp, tt, byte_order, len);
            break;
        case 38:
            mesa_RasterPos3fv(tvb, offsetp, tt, byte_order, len);
            break;
        case 39:
            mesa_RasterPos3iv(tvb, offsetp, tt, byte_order, len);
            break;
        case 40:
            mesa_RasterPos3sv(tvb, offsetp, tt, byte_order, len);
            break;
        case 41:
            mesa_RasterPos4dv(tvb, offsetp, tt, byte_order, len);
            break;
        case 42:
            mesa_RasterPos4fv(tvb, offsetp, tt, byte_order, len);
            break;
        case 43:
            mesa_RasterPos4iv(tvb, offsetp, tt, byte_order, len);
            break;
        case 44:
            mesa_RasterPos4sv(tvb, offsetp, tt, byte_order, len);
            break;
        case 45:
            mesa_Rectdv(tvb, offsetp, tt, byte_order, len);
            break;
        case 46:
            mesa_Rectfv(tvb, offsetp, tt, byte_order, len);
            break;
        case 47:
            mesa_Rectiv(tvb, offsetp, tt, byte_order, len);
            break;
        case 48:
            mesa_Rectsv(tvb, offsetp, tt, byte_order, len);
            break;
        case 49:
            mesa_TexCoord1dv(tvb, offsetp, tt, byte_order, len);
            break;
        case 50:
            mesa_TexCoord1fv(tvb, offsetp, tt, byte_order, len);
            break;
        case 51:
            mesa_TexCoord1iv(tvb, offsetp, tt, byte_order, len);
            break;
        case 52:
            mesa_TexCoord1sv(tvb, offsetp, tt, byte_order, len);
            break;
        case 53:
            mesa_TexCoord2dv(tvb, offsetp, tt, byte_order, len);
            break;
        case 54:
            mesa_TexCoord2fv(tvb, offsetp, tt, byte_order, len);
            break;
        case 55:
            mesa_TexCoord2iv(tvb, offsetp, tt, byte_order, len);
            break;
        case 56:
            mesa_TexCoord2sv(tvb, offsetp, tt, byte_order, len);
            break;
        case 57:
            mesa_TexCoord3dv(tvb, offsetp, tt, byte_order, len);
            break;
        case 58:
            mesa_TexCoord3fv(tvb, offsetp, tt, byte_order, len);
            break;
        case 59:
            mesa_TexCoord3iv(tvb, offsetp, tt, byte_order, len);
            break;
        case 60:
            mesa_TexCoord3sv(tvb, offsetp, tt, byte_order, len);
            break;
        case 61:
            mesa_TexCoord4dv(tvb, offsetp, tt, byte_order, len);
            break;
        case 62:
            mesa_TexCoord4fv(tvb, offsetp, tt, byte_order, len);
            break;
        case 63:
            mesa_TexCoord4iv(tvb, offsetp, tt, byte_order, len);
            break;
        case 64:
            mesa_TexCoord4sv(tvb, offsetp, tt, byte_order, len);
            break;
        case 65:
            mesa_Vertex2dv(tvb, offsetp, tt, byte_order, len);
            break;
        case 66:
            mesa_Vertex2fv(tvb, offsetp, tt, byte_order, len);
            break;
        case 67:
            mesa_Vertex2iv(tvb, offsetp, tt, byte_order, len);
            break;
        case 68:
            mesa_Vertex2sv(tvb, offsetp, tt, byte_order, len);
            break;
        case 69:
            mesa_Vertex3dv(tvb, offsetp, tt, byte_order, len);
            break;
        case 70:
            mesa_Vertex3fv(tvb, offsetp, tt, byte_order, len);
            break;
        case 71:
            mesa_Vertex3iv(tvb, offsetp, tt, byte_order, len);
            break;
        case 72:
            mesa_Vertex3sv(tvb, offsetp, tt, byte_order, len);
            break;
        case 73:
            mesa_Vertex4dv(tvb, offsetp, tt, byte_order, len);
            break;
        case 74:
            mesa_Vertex4fv(tvb, offsetp, tt, byte_order, len);
            break;
        case 75:
            mesa_Vertex4iv(tvb, offsetp, tt, byte_order, len);
            break;
        case 76:
            mesa_Vertex4sv(tvb, offsetp, tt, byte_order, len);
            break;
        case 77:
            mesa_ClipPlane(tvb, offsetp, tt, byte_order, len);
            break;
        case 78:
            mesa_ColorMaterial(tvb, offsetp, tt, byte_order, len);
            break;
        case 79:
            mesa_CullFace(tvb, offsetp, tt, byte_order, len);
            break;
        case 80:
            mesa_Fogf(tvb, offsetp, tt, byte_order, len);
            break;
        case 81:
            mesa_Fogfv(tvb, offsetp, tt, byte_order, len);
            break;
        case 82:
            mesa_Fogi(tvb, offsetp, tt, byte_order, len);
            break;
        case 83:
            mesa_Fogiv(tvb, offsetp, tt, byte_order, len);
            break;
        case 84:
            mesa_FrontFace(tvb, offsetp, tt, byte_order, len);
            break;
        case 85:
            mesa_Hint(tvb, offsetp, tt, byte_order, len);
            break;
        case 86:
            mesa_Lightf(tvb, offsetp, tt, byte_order, len);
            break;
        case 87:
            mesa_Lightfv(tvb, offsetp, tt, byte_order, len);
            break;
        case 88:
            mesa_Lighti(tvb, offsetp, tt, byte_order, len);
            break;
        case 89:
            mesa_Lightiv(tvb, offsetp, tt, byte_order, len);
            break;
        case 90:
            mesa_LightModelf(tvb, offsetp, tt, byte_order, len);
            break;
        case 91:
            mesa_LightModelfv(tvb, offsetp, tt, byte_order, len);
            break;
        case 92:
            mesa_LightModeli(tvb, offsetp, tt, byte_order, len);
            break;
        case 93:
            mesa_LightModeliv(tvb, offsetp, tt, byte_order, len);
            break;
        case 94:
            mesa_LineStipple(tvb, offsetp, tt, byte_order, len);
            break;
        case 95:
            mesa_LineWidth(tvb, offsetp, tt, byte_order, len);
            break;
        case 96:
            mesa_Materialf(tvb, offsetp, tt, byte_order, len);
            break;
        case 97:
            mesa_Materialfv(tvb, offsetp, tt, byte_order, len);
            break;
        case 98:
            mesa_Materiali(tvb, offsetp, tt, byte_order, len);
            break;
        case 99:
            mesa_Materialiv(tvb, offsetp, tt, byte_order, len);
            break;
        case 100:
            mesa_PointSize(tvb, offsetp, tt, byte_order, len);
            break;
        case 101:
            mesa_PolygonMode(tvb, offsetp, tt, byte_order, len);
            break;
        case 102:
            mesa_PolygonStipple(tvb, offsetp, tt, byte_order, len);
            break;
        case 103:
            mesa_Scissor(tvb, offsetp, tt, byte_order, len);
            break;
        case 104:
            mesa_ShadeModel(tvb, offsetp, tt, byte_order, len);
            break;
        case 105:
            mesa_TexParameterf(tvb, offsetp, tt, byte_order, len);
            break;
        case 106:
            mesa_TexParameterfv(tvb, offsetp, tt, byte_order, len);
            break;
        case 107:
            mesa_TexParameteri(tvb, offsetp, tt, byte_order, len);
            break;
        case 108:
            mesa_TexParameteriv(tvb, offsetp, tt, byte_order, len);
            break;
        case 109:
            mesa_TexImage1D(tvb, offsetp, tt, byte_order, len);
            break;
        case 110:
            mesa_TexImage2D(tvb, offsetp, tt, byte_order, len);
            break;
        case 111:
            mesa_TexEnvf(tvb, offsetp, tt, byte_order, len);
            break;
        case 112:
            mesa_TexEnvfv(tvb, offsetp, tt, byte_order, len);
            break;
        case 113:
            mesa_TexEnvi(tvb, offsetp, tt, byte_order, len);
            break;
        case 114:
            mesa_TexEnviv(tvb, offsetp, tt, byte_order, len);
            break;
        case 115:
            mesa_TexGend(tvb, offsetp, tt, byte_order, len);
            break;
        case 116:
            mesa_TexGendv(tvb, offsetp, tt, byte_order, len);
            break;
        case 117:
            mesa_TexGenf(tvb, offsetp, tt, byte_order, len);
            break;
        case 118:
            mesa_TexGenfv(tvb, offsetp, tt, byte_order, len);
            break;
        case 119:
            mesa_TexGeni(tvb, offsetp, tt, byte_order, len);
            break;
        case 120:
            mesa_TexGeniv(tvb, offsetp, tt, byte_order, len);
            break;
        case 121:
            mesa_InitNames(tvb, offsetp, tt, byte_order, len);
            break;
        case 122:
            mesa_LoadName(tvb, offsetp, tt, byte_order, len);
            break;
        case 123:
            mesa_PassThrough(tvb, offsetp, tt, byte_order, len);
            break;
        case 124:
            mesa_PopName(tvb, offsetp, tt, byte_order, len);
            break;
        case 125:
            mesa_PushName(tvb, offsetp, tt, byte_order, len);
            break;
        case 126:
            mesa_DrawBuffer(tvb, offsetp, tt, byte_order, len);
            break;
        case 127:
            mesa_Clear(tvb, offsetp, tt, byte_order, len);
            break;
        case 128:
            mesa_ClearAccum(tvb, offsetp, tt, byte_order, len);
            break;
        case 129:
            mesa_ClearIndex(tvb, offsetp, tt, byte_order, len);
            break;
        case 130:
            mesa_ClearColor(tvb, offsetp, tt, byte_order, len);
            break;
        case 131:
            mesa_ClearStencil(tvb, offsetp, tt, byte_order, len);
            break;
        case 132:
            mesa_ClearDepth(tvb, offsetp, tt, byte_order, len);
            break;
        case 133:
            mesa_StencilMask(tvb, offsetp, tt, byte_order, len);
            break;
        case 134:
            mesa_ColorMask(tvb, offsetp, tt, byte_order, len);
            break;
        case 135:
            mesa_DepthMask(tvb, offsetp, tt, byte_order, len);
            break;
        case 136:
            mesa_IndexMask(tvb, offsetp, tt, byte_order, len);
            break;
        case 137:
            mesa_Accum(tvb, offsetp, tt, byte_order, len);
            break;
        case 138:
            mesa_Disable(tvb, offsetp, tt, byte_order, len);
            break;
        case 139:
            mesa_Enable(tvb, offsetp, tt, byte_order, len);
            break;
        case 141:
            mesa_PopAttrib(tvb, offsetp, tt, byte_order, len);
            break;
        case 142:
            mesa_PushAttrib(tvb, offsetp, tt, byte_order, len);
            break;
        case 143:
            mesa_Map1d(tvb, offsetp, tt, byte_order, len);
            break;
        case 144:
            mesa_Map1f(tvb, offsetp, tt, byte_order, len);
            break;
        case 145:
            mesa_Map2d(tvb, offsetp, tt, byte_order, len);
            break;
        case 146:
            mesa_Map2f(tvb, offsetp, tt, byte_order, len);
            break;
        case 147:
            mesa_MapGrid1d(tvb, offsetp, tt, byte_order, len);
            break;
        case 148:
            mesa_MapGrid1f(tvb, offsetp, tt, byte_order, len);
            break;
        case 149:
            mesa_MapGrid2d(tvb, offsetp, tt, byte_order, len);
            break;
        case 150:
            mesa_MapGrid2f(tvb, offsetp, tt, byte_order, len);
            break;
        case 151:
            mesa_EvalCoord1dv(tvb, offsetp, tt, byte_order, len);
            break;
        case 152:
            mesa_EvalCoord1fv(tvb, offsetp, tt, byte_order, len);
            break;
        case 153:
            mesa_EvalCoord2dv(tvb, offsetp, tt, byte_order, len);
            break;
        case 154:
            mesa_EvalCoord2fv(tvb, offsetp, tt, byte_order, len);
            break;
        case 155:
            mesa_EvalMesh1(tvb, offsetp, tt, byte_order, len);
            break;
        case 156:
            mesa_EvalPoint1(tvb, offsetp, tt, byte_order, len);
            break;
        case 157:
            mesa_EvalMesh2(tvb, offsetp, tt, byte_order, len);
            break;
        case 158:
            mesa_EvalPoint2(tvb, offsetp, tt, byte_order, len);
            break;
        case 159:
            mesa_AlphaFunc(tvb, offsetp, tt, byte_order, len);
            break;
        case 160:
            mesa_BlendFunc(tvb, offsetp, tt, byte_order, len);
            break;
        case 161:
            mesa_LogicOp(tvb, offsetp, tt, byte_order, len);
            break;
        case 162:
            mesa_StencilFunc(tvb, offsetp, tt, byte_order, len);
            break;
        case 163:
            mesa_StencilOp(tvb, offsetp, tt, byte_order, len);
            break;
        case 164:
            mesa_DepthFunc(tvb, offsetp, tt, byte_order, len);
            break;
        case 165:
            mesa_PixelZoom(tvb, offsetp, tt, byte_order, len);
            break;
        case 166:
            mesa_PixelTransferf(tvb, offsetp, tt, byte_order, len);
            break;
        case 167:
            mesa_PixelTransferi(tvb, offsetp, tt, byte_order, len);
            break;
        case 168:
            mesa_PixelMapfv(tvb, offsetp, tt, byte_order, len);
            break;
        case 169:
            mesa_PixelMapuiv(tvb, offsetp, tt, byte_order, len);
            break;
        case 170:
            mesa_PixelMapusv(tvb, offsetp, tt, byte_order, len);
            break;
        case 171:
            mesa_ReadBuffer(tvb, offsetp, tt, byte_order, len);
            break;
        case 172:
            mesa_CopyPixels(tvb, offsetp, tt, byte_order, len);
            break;
        case 173:
            mesa_DrawPixels(tvb, offsetp, tt, byte_order, len);
            break;
        case 174:
            mesa_DepthRange(tvb, offsetp, tt, byte_order, len);
            break;
        case 175:
            mesa_Frustum(tvb, offsetp, tt, byte_order, len);
            break;
        case 176:
            mesa_LoadIdentity(tvb, offsetp, tt, byte_order, len);
            break;
        case 177:
            mesa_LoadMatrixf(tvb, offsetp, tt, byte_order, len);
            break;
        case 178:
            mesa_LoadMatrixd(tvb, offsetp, tt, byte_order, len);
            break;
        case 179:
            mesa_MatrixMode(tvb, offsetp, tt, byte_order, len);
            break;
        case 180:
            mesa_MultMatrixf(tvb, offsetp, tt, byte_order, len);
            break;
        case 181:
            mesa_MultMatrixd(tvb, offsetp, tt, byte_order, len);
            break;
        case 182:
            mesa_Ortho(tvb, offsetp, tt, byte_order, len);
            break;
        case 183:
            mesa_PopMatrix(tvb, offsetp, tt, byte_order, len);
            break;
        case 184:
            mesa_PushMatrix(tvb, offsetp, tt, byte_order, len);
            break;
        case 185:
            mesa_Rotated(tvb, offsetp, tt, byte_order, len);
            break;
        case 186:
            mesa_Rotatef(tvb, offsetp, tt, byte_order, len);
            break;
        case 187:
            mesa_Scaled(tvb, offsetp, tt, byte_order, len);
            break;
        case 188:
            mesa_Scalef(tvb, offsetp, tt, byte_order, len);
            break;
        case 189:
            mesa_Translated(tvb, offsetp, tt, byte_order, len);
            break;
        case 190:
            mesa_Translatef(tvb, offsetp, tt, byte_order, len);
            break;
        case 191:
            mesa_Viewport(tvb, offsetp, tt, byte_order, len);
            break;
        case 192:
            mesa_PolygonOffset(tvb, offsetp, tt, byte_order, len);
            break;
        case 193:
            mesa_DrawArrays(tvb, offsetp, tt, byte_order, len);
            break;
        case 194:
            mesa_Indexubv(tvb, offsetp, tt, byte_order, len);
            break;
        case 195:
            mesa_ColorSubTable(tvb, offsetp, tt, byte_order, len);
            break;
        case 196:
            mesa_CopyColorSubTable(tvb, offsetp, tt, byte_order, len);
            break;
        case 197:
            mesa_ActiveTexture(tvb, offsetp, tt, byte_order, len);
            break;
        case 198:
            mesa_MultiTexCoord1dv(tvb, offsetp, tt, byte_order, len);
            break;
        case 199:
            mesa_MultiTexCoord1fvARB(tvb, offsetp, tt, byte_order, len);
            break;
        case 200:
            mesa_MultiTexCoord1iv(tvb, offsetp, tt, byte_order, len);
            break;
        case 201:
            mesa_MultiTexCoord1sv(tvb, offsetp, tt, byte_order, len);
            break;
        case 202:
            mesa_MultiTexCoord2dv(tvb, offsetp, tt, byte_order, len);
            break;
        case 203:
            mesa_MultiTexCoord2fvARB(tvb, offsetp, tt, byte_order, len);
            break;
        case 204:
            mesa_MultiTexCoord2iv(tvb, offsetp, tt, byte_order, len);
            break;
        case 205:
            mesa_MultiTexCoord2sv(tvb, offsetp, tt, byte_order, len);
            break;
        case 206:
            mesa_MultiTexCoord3dv(tvb, offsetp, tt, byte_order, len);
            break;
        case 207:
            mesa_MultiTexCoord3fvARB(tvb, offsetp, tt, byte_order, len);
            break;
        case 208:
            mesa_MultiTexCoord3iv(tvb, offsetp, tt, byte_order, len);
            break;
        case 209:
            mesa_MultiTexCoord3sv(tvb, offsetp, tt, byte_order, len);
            break;
        case 210:
            mesa_MultiTexCoord4dv(tvb, offsetp, tt, byte_order, len);
            break;
        case 211:
            mesa_MultiTexCoord4fvARB(tvb, offsetp, tt, byte_order, len);
            break;
        case 212:
            mesa_MultiTexCoord4iv(tvb, offsetp, tt, byte_order, len);
            break;
        case 213:
            mesa_MultiTexCoord4sv(tvb, offsetp, tt, byte_order, len);
            break;
        case 214:
            mesa_CompressedTexImage1D(tvb, offsetp, tt, byte_order, len);
            break;
        case 215:
            mesa_CompressedTexImage2D(tvb, offsetp, tt, byte_order, len);
            break;
        case 216:
            mesa_CompressedTexImage3D(tvb, offsetp, tt, byte_order, len);
            break;
        case 217:
            mesa_CompressedTexSubImage1D(tvb, offsetp, tt, byte_order, len);
            break;
        case 218:
            mesa_CompressedTexSubImage2D(tvb, offsetp, tt, byte_order, len);
            break;
        case 219:
            mesa_CompressedTexSubImage3D(tvb, offsetp, tt, byte_order, len);
            break;
        case 229:
            mesa_SampleCoverage(tvb, offsetp, tt, byte_order, len);
            break;
        case 230:
            mesa_WindowPos3fv(tvb, offsetp, tt, byte_order, len);
            break;
        case 231:
            mesa_BeginQuery(tvb, offsetp, tt, byte_order, len);
            break;
        case 232:
            mesa_EndQuery(tvb, offsetp, tt, byte_order, len);
            break;
        case 233:
            mesa_DrawBuffers(tvb, offsetp, tt, byte_order, len);
            break;
        case 2048:
            mesa_SampleMaskSGIS(tvb, offsetp, tt, byte_order, len);
            break;
        case 2049:
            mesa_SamplePatternSGIS(tvb, offsetp, tt, byte_order, len);
            break;
        case 2050:
            mesa_TagSampleBufferSGIX(tvb, offsetp, tt, byte_order, len);
            break;
        case 2051:
            mesa_DetailTexFuncSGIS(tvb, offsetp, tt, byte_order, len);
            break;
        case 2052:
            mesa_SharpenTexFuncSGIS(tvb, offsetp, tt, byte_order, len);
            break;
        case 2053:
            mesa_ColorTable(tvb, offsetp, tt, byte_order, len);
            break;
        case 2054:
            mesa_ColorTableParameterfv(tvb, offsetp, tt, byte_order, len);
            break;
        case 2055:
            mesa_ColorTableParameteriv(tvb, offsetp, tt, byte_order, len);
            break;
        case 2056:
            mesa_CopyColorTable(tvb, offsetp, tt, byte_order, len);
            break;
        case 2057:
            mesa_TexImage4DSGIS(tvb, offsetp, tt, byte_order, len);
            break;
        case 2058:
            mesa_TexSubImage4DSGIS(tvb, offsetp, tt, byte_order, len);
            break;
        case 2059:
            mesa_PixelTexGenSGIX(tvb, offsetp, tt, byte_order, len);
            break;
        case 2064:
            mesa_TexFilterFuncSGIS(tvb, offsetp, tt, byte_order, len);
            break;
        case 2065:
            mesa_PointParameterf(tvb, offsetp, tt, byte_order, len);
            break;
        case 2066:
            mesa_PointParameterfv(tvb, offsetp, tt, byte_order, len);
            break;
        case 2067:
            mesa_FogFuncSGIS(tvb, offsetp, tt, byte_order, len);
            break;
        case 2071:
            mesa_ReferencePlaneSGIX(tvb, offsetp, tt, byte_order, len);
            break;
        case 2072:
            mesa_FrameZoomSGIX(tvb, offsetp, tt, byte_order, len);
            break;
        case 2082:
            mesa_TextureColorMaskSGIS(tvb, offsetp, tt, byte_order, len);
            break;
        case 4096:
            mesa_BlendColor(tvb, offsetp, tt, byte_order, len);
            break;
        case 4097:
            mesa_BlendEquation(tvb, offsetp, tt, byte_order, len);
            break;
        case 4099:
            mesa_TexSubImage1D(tvb, offsetp, tt, byte_order, len);
            break;
        case 4100:
            mesa_TexSubImage2D(tvb, offsetp, tt, byte_order, len);
            break;
        case 4101:
            mesa_ConvolutionFilter1D(tvb, offsetp, tt, byte_order, len);
            break;
        case 4102:
            mesa_ConvolutionFilter2D(tvb, offsetp, tt, byte_order, len);
            break;
        case 4103:
            mesa_ConvolutionParameterf(tvb, offsetp, tt, byte_order, len);
            break;
        case 4104:
            mesa_ConvolutionParameterfv(tvb, offsetp, tt, byte_order, len);
            break;
        case 4105:
            mesa_ConvolutionParameteri(tvb, offsetp, tt, byte_order, len);
            break;
        case 4106:
            mesa_ConvolutionParameteriv(tvb, offsetp, tt, byte_order, len);
            break;
        case 4107:
            mesa_CopyConvolutionFilter1D(tvb, offsetp, tt, byte_order, len);
            break;
        case 4108:
            mesa_CopyConvolutionFilter2D(tvb, offsetp, tt, byte_order, len);
            break;
        case 4109:
            mesa_SeparableFilter2D(tvb, offsetp, tt, byte_order, len);
            break;
        case 4110:
            mesa_Histogram(tvb, offsetp, tt, byte_order, len);
            break;
        case 4111:
            mesa_Minmax(tvb, offsetp, tt, byte_order, len);
            break;
        case 4112:
            mesa_ResetHistogram(tvb, offsetp, tt, byte_order, len);
            break;
        case 4113:
            mesa_ResetMinmax(tvb, offsetp, tt, byte_order, len);
            break;
        case 4114:
            mesa_TexImage3D(tvb, offsetp, tt, byte_order, len);
            break;
        case 4115:
            mesa_TexSubImage3D(tvb, offsetp, tt, byte_order, len);
            break;
        case 4117:
            mesa_BindTexture(tvb, offsetp, tt, byte_order, len);
            break;
        case 4118:
            mesa_PrioritizeTextures(tvb, offsetp, tt, byte_order, len);
            break;
        case 4119:
            mesa_CopyTexImage1D(tvb, offsetp, tt, byte_order, len);
            break;
        case 4120:
            mesa_CopyTexImage2D(tvb, offsetp, tt, byte_order, len);
            break;
        case 4121:
            mesa_CopyTexSubImage1D(tvb, offsetp, tt, byte_order, len);
            break;
        case 4122:
            mesa_CopyTexSubImage2D(tvb, offsetp, tt, byte_order, len);
            break;
        case 4123:
            mesa_CopyTexSubImage3D(tvb, offsetp, tt, byte_order, len);
            break;
        case 4124:
            mesa_FogCoordfvEXT(tvb, offsetp, tt, byte_order, len);
            break;
        case 4125:
            mesa_FogCoorddv(tvb, offsetp, tt, byte_order, len);
            break;
        case 4126:
            mesa_SecondaryColor3bv(tvb, offsetp, tt, byte_order, len);
            break;
        case 4127:
            mesa_SecondaryColor3sv(tvb, offsetp, tt, byte_order, len);
            break;
        case 4128:
            mesa_SecondaryColor3iv(tvb, offsetp, tt, byte_order, len);
            break;
        case 4129:
            mesa_SecondaryColor3fvEXT(tvb, offsetp, tt, byte_order, len);
            break;
        case 4130:
            mesa_SecondaryColor3dv(tvb, offsetp, tt, byte_order, len);
            break;
        case 4131:
            mesa_SecondaryColor3ubv(tvb, offsetp, tt, byte_order, len);
            break;
        case 4132:
            mesa_SecondaryColor3usv(tvb, offsetp, tt, byte_order, len);
            break;
        case 4133:
            mesa_SecondaryColor3uiv(tvb, offsetp, tt, byte_order, len);
            break;
        case 4134:
            mesa_BlendFuncSeparate(tvb, offsetp, tt, byte_order, len);
            break;
        case 4135:
            mesa_VertexWeightfvEXT(tvb, offsetp, tt, byte_order, len);
            break;
        case 4136:
            mesa_CombinerParameterfNV(tvb, offsetp, tt, byte_order, len);
            break;
        case 4137:
            mesa_CombinerParameterfvNV(tvb, offsetp, tt, byte_order, len);
            break;
        case 4138:
            mesa_CombinerParameteriNV(tvb, offsetp, tt, byte_order, len);
            break;
        case 4139:
            mesa_CombinerParameterivNV(tvb, offsetp, tt, byte_order, len);
            break;
        case 4140:
            mesa_CombinerInputNV(tvb, offsetp, tt, byte_order, len);
            break;
        case 4141:
            mesa_CombinerOutputNV(tvb, offsetp, tt, byte_order, len);
            break;
        case 4142:
            mesa_FinalCombinerInputNV(tvb, offsetp, tt, byte_order, len);
            break;
        case 4180:
            mesa_BindProgramARB(tvb, offsetp, tt, byte_order, len);
            break;
        case 4181:
            mesa_ExecuteProgramNV(tvb, offsetp, tt, byte_order, len);
            break;
        case 4182:
            mesa_RequestResidentProgramsNV(tvb, offsetp, tt, byte_order, len);
            break;
        case 4183:
            mesa_LoadProgramNV(tvb, offsetp, tt, byte_order, len);
            break;
        case 4184:
            mesa_ProgramEnvParameter4fvARB(tvb, offsetp, tt, byte_order, len);
            break;
        case 4185:
            mesa_ProgramEnvParameter4dvARB(tvb, offsetp, tt, byte_order, len);
            break;
        case 4186:
            mesa_ProgramParameters4fvNV(tvb, offsetp, tt, byte_order, len);
            break;
        case 4187:
            mesa_ProgramParameters4dvNV(tvb, offsetp, tt, byte_order, len);
            break;
        case 4188:
            mesa_TrackMatrixNV(tvb, offsetp, tt, byte_order, len);
            break;
        case 4189:
            mesa_VertexAttrib1sv(tvb, offsetp, tt, byte_order, len);
            break;
        case 4190:
            mesa_VertexAttrib2sv(tvb, offsetp, tt, byte_order, len);
            break;
        case 4191:
            mesa_VertexAttrib3sv(tvb, offsetp, tt, byte_order, len);
            break;
        case 4192:
            mesa_VertexAttrib4sv(tvb, offsetp, tt, byte_order, len);
            break;
        case 4193:
            mesa_VertexAttrib1fvARB(tvb, offsetp, tt, byte_order, len);
            break;
        case 4194:
            mesa_VertexAttrib2fvARB(tvb, offsetp, tt, byte_order, len);
            break;
        case 4195:
            mesa_VertexAttrib3fvARB(tvb, offsetp, tt, byte_order, len);
            break;
        case 4196:
            mesa_VertexAttrib4fvARB(tvb, offsetp, tt, byte_order, len);
            break;
        case 4197:
            mesa_VertexAttrib1dv(tvb, offsetp, tt, byte_order, len);
            break;
        case 4198:
            mesa_VertexAttrib2dv(tvb, offsetp, tt, byte_order, len);
            break;
        case 4199:
            mesa_VertexAttrib3dv(tvb, offsetp, tt, byte_order, len);
            break;
        case 4200:
            mesa_VertexAttrib4dv(tvb, offsetp, tt, byte_order, len);
            break;
        case 4201:
            mesa_VertexAttrib4Nubv(tvb, offsetp, tt, byte_order, len);
            break;
        case 4202:
            mesa_VertexAttribs1svNV(tvb, offsetp, tt, byte_order, len);
            break;
        case 4203:
            mesa_VertexAttribs2svNV(tvb, offsetp, tt, byte_order, len);
            break;
        case 4204:
            mesa_VertexAttribs3svNV(tvb, offsetp, tt, byte_order, len);
            break;
        case 4205:
            mesa_VertexAttribs4svNV(tvb, offsetp, tt, byte_order, len);
            break;
        case 4206:
            mesa_VertexAttribs1fvNV(tvb, offsetp, tt, byte_order, len);
            break;
        case 4207:
            mesa_VertexAttribs2fvNV(tvb, offsetp, tt, byte_order, len);
            break;
        case 4208:
            mesa_VertexAttribs3fvNV(tvb, offsetp, tt, byte_order, len);
            break;
        case 4209:
            mesa_VertexAttribs4fvNV(tvb, offsetp, tt, byte_order, len);
            break;
        case 4210:
            mesa_VertexAttribs1dvNV(tvb, offsetp, tt, byte_order, len);
            break;
        case 4211:
            mesa_VertexAttribs2dvNV(tvb, offsetp, tt, byte_order, len);
            break;
        case 4212:
            mesa_VertexAttribs3dvNV(tvb, offsetp, tt, byte_order, len);
            break;
        case 4213:
            mesa_VertexAttribs4dvNV(tvb, offsetp, tt, byte_order, len);
            break;
        case 4214:
            mesa_VertexAttribs4ubvNV(tvb, offsetp, tt, byte_order, len);
            break;
        case 4215:
            mesa_ProgramLocalParameter4fvARB(tvb, offsetp, tt, byte_order, len);
            break;
        case 4216:
            mesa_ProgramLocalParameter4dvARB(tvb, offsetp, tt, byte_order, len);
            break;
        case 4217:
            mesa_ProgramStringARB(tvb, offsetp, tt, byte_order, len);
            break;
        case 4218:
            mesa_ProgramNamedParameter4fvNV(tvb, offsetp, tt, byte_order, len);
            break;
        case 4219:
            mesa_ProgramNamedParameter4dvNV(tvb, offsetp, tt, byte_order, len);
            break;
        case 4220:
            mesa_ActiveStencilFaceEXT(tvb, offsetp, tt, byte_order, len);
            break;
        case 4221:
            mesa_PointParameteri(tvb, offsetp, tt, byte_order, len);
            break;
        case 4222:
            mesa_PointParameteriv(tvb, offsetp, tt, byte_order, len);
            break;
        case 4228:
            mesa_BlendEquationSeparate(tvb, offsetp, tt, byte_order, len);
            break;
        case 4229:
            mesa_DepthBoundsEXT(tvb, offsetp, tt, byte_order, len);
            break;
        case 4230:
            mesa_VertexAttrib4bv(tvb, offsetp, tt, byte_order, len);
            break;
        case 4231:
            mesa_VertexAttrib4iv(tvb, offsetp, tt, byte_order, len);
            break;
        case 4232:
            mesa_VertexAttrib4ubv(tvb, offsetp, tt, byte_order, len);
            break;
        case 4233:
            mesa_VertexAttrib4usv(tvb, offsetp, tt, byte_order, len);
            break;
        case 4234:
            mesa_VertexAttrib4uiv(tvb, offsetp, tt, byte_order, len);
            break;
        case 4235:
            mesa_VertexAttrib4Nbv(tvb, offsetp, tt, byte_order, len);
            break;
        case 4236:
            mesa_VertexAttrib4Nsv(tvb, offsetp, tt, byte_order, len);
            break;
        case 4237:
            mesa_VertexAttrib4Niv(tvb, offsetp, tt, byte_order, len);
            break;
        case 4238:
            mesa_VertexAttrib4Nusv(tvb, offsetp, tt, byte_order, len);
            break;
        case 4239:
            mesa_VertexAttrib4Nuiv(tvb, offsetp, tt, byte_order, len);
            break;
        case 4265:
            mesa_VertexAttrib1svNV(tvb, offsetp, tt, byte_order, len);
            break;
        case 4266:
            mesa_VertexAttrib2svNV(tvb, offsetp, tt, byte_order, len);
            break;
        case 4267:
            mesa_VertexAttrib3svNV(tvb, offsetp, tt, byte_order, len);
            break;
        case 4268:
            mesa_VertexAttrib4svNV(tvb, offsetp, tt, byte_order, len);
            break;
        case 4269:
            mesa_VertexAttrib1fvNV(tvb, offsetp, tt, byte_order, len);
            break;
        case 4270:
            mesa_VertexAttrib2fvNV(tvb, offsetp, tt, byte_order, len);
            break;
        case 4271:
            mesa_VertexAttrib3fvNV(tvb, offsetp, tt, byte_order, len);
            break;
        case 4272:
            mesa_VertexAttrib4fvNV(tvb, offsetp, tt, byte_order, len);
            break;
        case 4273:
            mesa_VertexAttrib1dvNV(tvb, offsetp, tt, byte_order, len);
            break;
        case 4274:
            mesa_VertexAttrib2dvNV(tvb, offsetp, tt, byte_order, len);
            break;
        case 4275:
            mesa_VertexAttrib3dvNV(tvb, offsetp, tt, byte_order, len);
            break;
        case 4276:
            mesa_VertexAttrib4dvNV(tvb, offsetp, tt, byte_order, len);
            break;
        case 4277:
            mesa_VertexAttrib4ubvNV(tvb, offsetp, tt, byte_order, len);
            break;
        case 4326:
            mesa_MatrixIndexubvARB(tvb, offsetp, tt, byte_order, len);
            break;
        case 4327:
            mesa_MatrixIndexusvARB(tvb, offsetp, tt, byte_order, len);
            break;
        case 4328:
            mesa_MatrixIndexuivARB(tvb, offsetp, tt, byte_order, len);
            break;
        case 4329:
            mesa_CurrentPaletteMatrixARB(tvb, offsetp, tt, byte_order, len);
            break;
        default:
            proto_tree_add_item(tt, hf_x11_undecoded, tvb, *offsetp, len, ENC_NA);
            *offsetp += len;
        }
        if (*offsetp < next) {
            proto_tree_add_item(tt, hf_x11_unused, tvb, *offsetp, next - *offsetp, ENC_NA);
            *offsetp = next;
        }
        length -= (len + 4);
    }
}
#include "x11-enum.h"


static void bigreqEnable(tvbuff_t *tvb _U_, packet_info *pinfo _U_, int *offsetp _U_, proto_tree *t _U_, unsigned byte_order _U_, int length _U_)
{
}
static void bigreqEnable_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-Enable");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (bigreq-Enable)", sequence_number);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_bigreq_Enable_reply_maximum_request_length, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}
static const value_string bigreq_extension_minor[] = {
    { 0, "Enable" },
    { 0, NULL }
};
static const x11_event_info bigreq_events[] = {
    { NULL, NULL }
};
static const x11_reply_info bigreq_replies[] = {
    { 0, bigreqEnable_Reply },
    { 0, NULL }
};

static void dispatch_bigreq(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int minor, length;
    minor = CARD8(bigreq_extension_minor);
    length = REQUEST_LENGTH();

    col_append_fstr(pinfo->cinfo, COL_INFO, "-%s",
                          val_to_str(minor, bigreq_extension_minor,
                                     "<Unknown opcode %d>"));
    switch (minor) {
    case 0:
        bigreqEnable(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    /* No need for a default case here, since Unknown is printed above,
       and UNDECODED() is taken care of by dissect_x11_request */
    }
}

static void register_bigreq(void)
{
    set_handler("BIG-REQUESTS", dispatch_bigreq, bigreq_errors, bigreq_events, NULL, bigreq_replies);
}

static void struct_xproto_RECTANGLE(tvbuff_t *tvb, int *offsetp, proto_tree *root, unsigned byte_order _U_, int count)
{
    int i;
    for (i = 0; i < count; i++) {
        proto_item *item;
        proto_tree *t;

        item = proto_tree_add_item(root, hf_x11_struct_xproto_RECTANGLE, tvb, *offsetp, 8, ENC_NA);
        t = proto_item_add_subtree(item, ett_x11_rectangle);
        proto_tree_add_item(t, hf_x11_struct_xproto_RECTANGLE_x, tvb, *offsetp, 2, byte_order);
        *offsetp += 2;
        proto_tree_add_item(t, hf_x11_struct_xproto_RECTANGLE_y, tvb, *offsetp, 2, byte_order);
        *offsetp += 2;
        proto_tree_add_item(t, hf_x11_struct_xproto_RECTANGLE_width, tvb, *offsetp, 2, byte_order);
        *offsetp += 2;
        proto_tree_add_item(t, hf_x11_struct_xproto_RECTANGLE_height, tvb, *offsetp, 2, byte_order);
        *offsetp += 2;
    }
}

static int struct_size_xproto_STR(tvbuff_t *tvb _U_, int *offsetp _U_, unsigned byte_order _U_)
{
    int size = 0;
    int f_name_len;
    f_name_len = tvb_get_uint8(tvb, *offsetp + size + 0);
    size += f_name_len * 1;
    return size + 1;
}

static void struct_xproto_STR(tvbuff_t *tvb, int *offsetp, proto_tree *root, unsigned byte_order _U_, int count)
{
    int i;
    for (i = 0; i < count; i++) {
        proto_item *item;
        proto_tree *t;
        int f_name_len;

        item = proto_tree_add_item(root, hf_x11_struct_xproto_STR, tvb, *offsetp, struct_size_xproto_STR(tvb, offsetp, byte_order), ENC_NA);
        t = proto_item_add_subtree(item, ett_x11_rectangle);
        f_name_len = tvb_get_uint8(tvb, *offsetp);
        proto_tree_add_item(t, hf_x11_struct_xproto_STR_name_len, tvb, *offsetp, 1, byte_order);
        *offsetp += 1;
        listOfByte(tvb, offsetp, t, hf_x11_struct_xproto_STR_name, f_name_len, byte_order);
    }
}

static void struct_render_DIRECTFORMAT(tvbuff_t *tvb, int *offsetp, proto_tree *root, unsigned byte_order _U_, int count)
{
    int i;
    for (i = 0; i < count; i++) {
        proto_item *item;
        proto_tree *t;

        item = proto_tree_add_item(root, hf_x11_struct_render_DIRECTFORMAT, tvb, *offsetp, 16, ENC_NA);
        t = proto_item_add_subtree(item, ett_x11_rectangle);
        proto_tree_add_item(t, hf_x11_struct_render_DIRECTFORMAT_red_shift, tvb, *offsetp, 2, byte_order);
        *offsetp += 2;
        proto_tree_add_item(t, hf_x11_struct_render_DIRECTFORMAT_red_mask, tvb, *offsetp, 2, byte_order);
        *offsetp += 2;
        proto_tree_add_item(t, hf_x11_struct_render_DIRECTFORMAT_green_shift, tvb, *offsetp, 2, byte_order);
        *offsetp += 2;
        proto_tree_add_item(t, hf_x11_struct_render_DIRECTFORMAT_green_mask, tvb, *offsetp, 2, byte_order);
        *offsetp += 2;
        proto_tree_add_item(t, hf_x11_struct_render_DIRECTFORMAT_blue_shift, tvb, *offsetp, 2, byte_order);
        *offsetp += 2;
        proto_tree_add_item(t, hf_x11_struct_render_DIRECTFORMAT_blue_mask, tvb, *offsetp, 2, byte_order);
        *offsetp += 2;
        proto_tree_add_item(t, hf_x11_struct_render_DIRECTFORMAT_alpha_shift, tvb, *offsetp, 2, byte_order);
        *offsetp += 2;
        proto_tree_add_item(t, hf_x11_struct_render_DIRECTFORMAT_alpha_mask, tvb, *offsetp, 2, byte_order);
        *offsetp += 2;
    }
}

static void struct_render_PICTFORMINFO(tvbuff_t *tvb, int *offsetp, proto_tree *root, unsigned byte_order _U_, int count)
{
    int i;
    for (i = 0; i < count; i++) {
        proto_item *item;
        proto_tree *t;

        item = proto_tree_add_item(root, hf_x11_struct_render_PICTFORMINFO, tvb, *offsetp, 28, ENC_NA);
        t = proto_item_add_subtree(item, ett_x11_rectangle);
        proto_tree_add_item(t, hf_x11_struct_render_PICTFORMINFO_id, tvb, *offsetp, 4, byte_order);
        *offsetp += 4;
        field8(tvb, offsetp, t, hf_x11_struct_render_PICTFORMINFO_type, byte_order);
        proto_tree_add_item(t, hf_x11_struct_render_PICTFORMINFO_depth, tvb, *offsetp, 1, byte_order);
        *offsetp += 1;
        proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 2, ENC_NA);
        *offsetp += 2;
        struct_render_DIRECTFORMAT(tvb, offsetp, t, byte_order, 1);
        proto_tree_add_item(t, hf_x11_struct_render_PICTFORMINFO_colormap, tvb, *offsetp, 4, byte_order);
        *offsetp += 4;
    }
}

static void struct_render_PICTVISUAL(tvbuff_t *tvb, int *offsetp, proto_tree *root, unsigned byte_order _U_, int count)
{
    int i;
    for (i = 0; i < count; i++) {
        proto_item *item;
        proto_tree *t;

        item = proto_tree_add_item(root, hf_x11_struct_render_PICTVISUAL, tvb, *offsetp, 8, ENC_NA);
        t = proto_item_add_subtree(item, ett_x11_rectangle);
        proto_tree_add_item(t, hf_x11_struct_render_PICTVISUAL_visual, tvb, *offsetp, 4, byte_order);
        *offsetp += 4;
        proto_tree_add_item(t, hf_x11_struct_render_PICTVISUAL_format, tvb, *offsetp, 4, byte_order);
        *offsetp += 4;
    }
}

static int struct_size_render_PICTDEPTH(tvbuff_t *tvb _U_, int *offsetp _U_, unsigned byte_order _U_)
{
    int size = 0;
    int f_num_visuals;
    f_num_visuals = tvb_get_uint16(tvb, *offsetp + size + 2, byte_order);
    size += f_num_visuals * 8;
    return size + 8;
}

static void struct_render_PICTDEPTH(tvbuff_t *tvb, int *offsetp, proto_tree *root, unsigned byte_order _U_, int count)
{
    int i;
    for (i = 0; i < count; i++) {
        proto_item *item;
        proto_tree *t;
        int f_num_visuals;

        item = proto_tree_add_item(root, hf_x11_struct_render_PICTDEPTH, tvb, *offsetp, struct_size_render_PICTDEPTH(tvb, offsetp, byte_order), ENC_NA);
        t = proto_item_add_subtree(item, ett_x11_rectangle);
        proto_tree_add_item(t, hf_x11_struct_render_PICTDEPTH_depth, tvb, *offsetp, 1, byte_order);
        *offsetp += 1;
        proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
        *offsetp += 1;
        f_num_visuals = tvb_get_uint16(tvb, *offsetp, byte_order);
        proto_tree_add_item(t, hf_x11_struct_render_PICTDEPTH_num_visuals, tvb, *offsetp, 2, byte_order);
        *offsetp += 2;
        proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 4, ENC_NA);
        *offsetp += 4;
        struct_render_PICTVISUAL(tvb, offsetp, t, byte_order, f_num_visuals);
    }
}

static int struct_size_render_PICTSCREEN(tvbuff_t *tvb _U_, int *offsetp _U_, unsigned byte_order _U_)
{
    int size = 0;
    int i, off;
    int f_num_depths;
    f_num_depths = tvb_get_uint32(tvb, *offsetp + size + 0, byte_order);
    for (i = 0; i < f_num_depths; i++) {
        off = (*offsetp) + size + 8;
        size += struct_size_render_PICTDEPTH(tvb, &off, byte_order);
    }
    return size + 8;
}

static void struct_render_PICTSCREEN(tvbuff_t *tvb, int *offsetp, proto_tree *root, unsigned byte_order _U_, int count)
{
    int i;
    for (i = 0; i < count; i++) {
        proto_item *item;
        proto_tree *t;
        int f_num_depths;

        item = proto_tree_add_item(root, hf_x11_struct_render_PICTSCREEN, tvb, *offsetp, struct_size_render_PICTSCREEN(tvb, offsetp, byte_order), ENC_NA);
        t = proto_item_add_subtree(item, ett_x11_rectangle);
        f_num_depths = tvb_get_uint32(tvb, *offsetp, byte_order);
        proto_tree_add_item(t, hf_x11_struct_render_PICTSCREEN_num_depths, tvb, *offsetp, 4, byte_order);
        *offsetp += 4;
        proto_tree_add_item(t, hf_x11_struct_render_PICTSCREEN_fallback, tvb, *offsetp, 4, byte_order);
        *offsetp += 4;
        struct_render_PICTDEPTH(tvb, offsetp, t, byte_order, f_num_depths);
    }
}

static void struct_render_INDEXVALUE(tvbuff_t *tvb, int *offsetp, proto_tree *root, unsigned byte_order _U_, int count)
{
    int i;
    for (i = 0; i < count; i++) {
        proto_item *item;
        proto_tree *t;

        item = proto_tree_add_item(root, hf_x11_struct_render_INDEXVALUE, tvb, *offsetp, 12, ENC_NA);
        t = proto_item_add_subtree(item, ett_x11_rectangle);
        proto_tree_add_item(t, hf_x11_struct_render_INDEXVALUE_pixel, tvb, *offsetp, 4, byte_order);
        *offsetp += 4;
        proto_tree_add_item(t, hf_x11_struct_render_INDEXVALUE_red, tvb, *offsetp, 2, byte_order);
        *offsetp += 2;
        proto_tree_add_item(t, hf_x11_struct_render_INDEXVALUE_green, tvb, *offsetp, 2, byte_order);
        *offsetp += 2;
        proto_tree_add_item(t, hf_x11_struct_render_INDEXVALUE_blue, tvb, *offsetp, 2, byte_order);
        *offsetp += 2;
        proto_tree_add_item(t, hf_x11_struct_render_INDEXVALUE_alpha, tvb, *offsetp, 2, byte_order);
        *offsetp += 2;
    }
}

static void struct_render_COLOR(tvbuff_t *tvb, int *offsetp, proto_tree *root, unsigned byte_order _U_, int count)
{
    int i;
    for (i = 0; i < count; i++) {
        proto_item *item;
        proto_tree *t;

        item = proto_tree_add_item(root, hf_x11_struct_render_COLOR, tvb, *offsetp, 8, ENC_NA);
        t = proto_item_add_subtree(item, ett_x11_rectangle);
        proto_tree_add_item(t, hf_x11_struct_render_COLOR_red, tvb, *offsetp, 2, byte_order);
        *offsetp += 2;
        proto_tree_add_item(t, hf_x11_struct_render_COLOR_green, tvb, *offsetp, 2, byte_order);
        *offsetp += 2;
        proto_tree_add_item(t, hf_x11_struct_render_COLOR_blue, tvb, *offsetp, 2, byte_order);
        *offsetp += 2;
        proto_tree_add_item(t, hf_x11_struct_render_COLOR_alpha, tvb, *offsetp, 2, byte_order);
        *offsetp += 2;
    }
}

static void struct_render_POINTFIX(tvbuff_t *tvb, int *offsetp, proto_tree *root, unsigned byte_order _U_, int count)
{
    int i;
    for (i = 0; i < count; i++) {
        proto_item *item;
        proto_tree *t;

        item = proto_tree_add_item(root, hf_x11_struct_render_POINTFIX, tvb, *offsetp, 8, ENC_NA);
        t = proto_item_add_subtree(item, ett_x11_rectangle);
        proto_tree_add_item(t, hf_x11_struct_render_POINTFIX_x, tvb, *offsetp, 4, byte_order);
        *offsetp += 4;
        proto_tree_add_item(t, hf_x11_struct_render_POINTFIX_y, tvb, *offsetp, 4, byte_order);
        *offsetp += 4;
    }
}

static void struct_render_LINEFIX(tvbuff_t *tvb, int *offsetp, proto_tree *root, unsigned byte_order _U_, int count)
{
    int i;
    for (i = 0; i < count; i++) {
        proto_item *item;
        proto_tree *t;

        item = proto_tree_add_item(root, hf_x11_struct_render_LINEFIX, tvb, *offsetp, 16, ENC_NA);
        t = proto_item_add_subtree(item, ett_x11_rectangle);
        struct_render_POINTFIX(tvb, offsetp, t, byte_order, 1);
        struct_render_POINTFIX(tvb, offsetp, t, byte_order, 1);
    }
}

static void struct_render_TRIANGLE(tvbuff_t *tvb, int *offsetp, proto_tree *root, unsigned byte_order _U_, int count)
{
    int i;
    for (i = 0; i < count; i++) {
        proto_item *item;
        proto_tree *t;

        item = proto_tree_add_item(root, hf_x11_struct_render_TRIANGLE, tvb, *offsetp, 24, ENC_NA);
        t = proto_item_add_subtree(item, ett_x11_rectangle);
        struct_render_POINTFIX(tvb, offsetp, t, byte_order, 1);
        struct_render_POINTFIX(tvb, offsetp, t, byte_order, 1);
        struct_render_POINTFIX(tvb, offsetp, t, byte_order, 1);
    }
}

static void struct_render_TRAPEZOID(tvbuff_t *tvb, int *offsetp, proto_tree *root, unsigned byte_order _U_, int count)
{
    int i;
    for (i = 0; i < count; i++) {
        proto_item *item;
        proto_tree *t;

        item = proto_tree_add_item(root, hf_x11_struct_render_TRAPEZOID, tvb, *offsetp, 40, ENC_NA);
        t = proto_item_add_subtree(item, ett_x11_rectangle);
        proto_tree_add_item(t, hf_x11_struct_render_TRAPEZOID_top, tvb, *offsetp, 4, byte_order);
        *offsetp += 4;
        proto_tree_add_item(t, hf_x11_struct_render_TRAPEZOID_bottom, tvb, *offsetp, 4, byte_order);
        *offsetp += 4;
        struct_render_LINEFIX(tvb, offsetp, t, byte_order, 1);
        struct_render_LINEFIX(tvb, offsetp, t, byte_order, 1);
    }
}

static void struct_render_GLYPHINFO(tvbuff_t *tvb, int *offsetp, proto_tree *root, unsigned byte_order _U_, int count)
{
    int i;
    for (i = 0; i < count; i++) {
        proto_item *item;
        proto_tree *t;

        item = proto_tree_add_item(root, hf_x11_struct_render_GLYPHINFO, tvb, *offsetp, 12, ENC_NA);
        t = proto_item_add_subtree(item, ett_x11_rectangle);
        proto_tree_add_item(t, hf_x11_struct_render_GLYPHINFO_width, tvb, *offsetp, 2, byte_order);
        *offsetp += 2;
        proto_tree_add_item(t, hf_x11_struct_render_GLYPHINFO_height, tvb, *offsetp, 2, byte_order);
        *offsetp += 2;
        proto_tree_add_item(t, hf_x11_struct_render_GLYPHINFO_x, tvb, *offsetp, 2, byte_order);
        *offsetp += 2;
        proto_tree_add_item(t, hf_x11_struct_render_GLYPHINFO_y, tvb, *offsetp, 2, byte_order);
        *offsetp += 2;
        proto_tree_add_item(t, hf_x11_struct_render_GLYPHINFO_x_off, tvb, *offsetp, 2, byte_order);
        *offsetp += 2;
        proto_tree_add_item(t, hf_x11_struct_render_GLYPHINFO_y_off, tvb, *offsetp, 2, byte_order);
        *offsetp += 2;
    }
}

static void struct_render_TRANSFORM(tvbuff_t *tvb, int *offsetp, proto_tree *root, unsigned byte_order _U_, int count)
{
    int i;
    for (i = 0; i < count; i++) {
        proto_item *item;
        proto_tree *t;

        item = proto_tree_add_item(root, hf_x11_struct_render_TRANSFORM, tvb, *offsetp, 36, ENC_NA);
        t = proto_item_add_subtree(item, ett_x11_rectangle);
        proto_tree_add_item(t, hf_x11_struct_render_TRANSFORM_matrix11, tvb, *offsetp, 4, byte_order);
        *offsetp += 4;
        proto_tree_add_item(t, hf_x11_struct_render_TRANSFORM_matrix12, tvb, *offsetp, 4, byte_order);
        *offsetp += 4;
        proto_tree_add_item(t, hf_x11_struct_render_TRANSFORM_matrix13, tvb, *offsetp, 4, byte_order);
        *offsetp += 4;
        proto_tree_add_item(t, hf_x11_struct_render_TRANSFORM_matrix21, tvb, *offsetp, 4, byte_order);
        *offsetp += 4;
        proto_tree_add_item(t, hf_x11_struct_render_TRANSFORM_matrix22, tvb, *offsetp, 4, byte_order);
        *offsetp += 4;
        proto_tree_add_item(t, hf_x11_struct_render_TRANSFORM_matrix23, tvb, *offsetp, 4, byte_order);
        *offsetp += 4;
        proto_tree_add_item(t, hf_x11_struct_render_TRANSFORM_matrix31, tvb, *offsetp, 4, byte_order);
        *offsetp += 4;
        proto_tree_add_item(t, hf_x11_struct_render_TRANSFORM_matrix32, tvb, *offsetp, 4, byte_order);
        *offsetp += 4;
        proto_tree_add_item(t, hf_x11_struct_render_TRANSFORM_matrix33, tvb, *offsetp, 4, byte_order);
        *offsetp += 4;
    }
}

static void struct_render_ANIMCURSORELT(tvbuff_t *tvb, int *offsetp, proto_tree *root, unsigned byte_order _U_, int count)
{
    int i;
    for (i = 0; i < count; i++) {
        proto_item *item;
        proto_tree *t;

        item = proto_tree_add_item(root, hf_x11_struct_render_ANIMCURSORELT, tvb, *offsetp, 8, ENC_NA);
        t = proto_item_add_subtree(item, ett_x11_rectangle);
        proto_tree_add_item(t, hf_x11_struct_render_ANIMCURSORELT_cursor, tvb, *offsetp, 4, byte_order);
        *offsetp += 4;
        proto_tree_add_item(t, hf_x11_struct_render_ANIMCURSORELT_delay, tvb, *offsetp, 4, byte_order);
        *offsetp += 4;
    }
}

static void struct_render_SPANFIX(tvbuff_t *tvb, int *offsetp, proto_tree *root, unsigned byte_order _U_, int count)
{
    int i;
    for (i = 0; i < count; i++) {
        proto_item *item;
        proto_tree *t;

        item = proto_tree_add_item(root, hf_x11_struct_render_SPANFIX, tvb, *offsetp, 12, ENC_NA);
        t = proto_item_add_subtree(item, ett_x11_rectangle);
        proto_tree_add_item(t, hf_x11_struct_render_SPANFIX_l, tvb, *offsetp, 4, byte_order);
        *offsetp += 4;
        proto_tree_add_item(t, hf_x11_struct_render_SPANFIX_r, tvb, *offsetp, 4, byte_order);
        *offsetp += 4;
        proto_tree_add_item(t, hf_x11_struct_render_SPANFIX_y, tvb, *offsetp, 4, byte_order);
        *offsetp += 4;
    }
}

static void struct_render_TRAP(tvbuff_t *tvb, int *offsetp, proto_tree *root, unsigned byte_order _U_, int count)
{
    int i;
    for (i = 0; i < count; i++) {
        proto_item *item;
        proto_tree *t;

        item = proto_tree_add_item(root, hf_x11_struct_render_TRAP, tvb, *offsetp, 24, ENC_NA);
        t = proto_item_add_subtree(item, ett_x11_rectangle);
        struct_render_SPANFIX(tvb, offsetp, t, byte_order, 1);
        struct_render_SPANFIX(tvb, offsetp, t, byte_order, 1);
    }
}

static void compositeQueryVersion(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_composite_QueryVersion_client_major_version, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_composite_QueryVersion_client_minor_version, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}
static void compositeQueryVersion_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-QueryVersion");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (composite-QueryVersion)", sequence_number);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_composite_QueryVersion_reply_major_version, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_composite_QueryVersion_reply_minor_version, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 16, ENC_NA);
    *offsetp += 16;
}

static void compositeRedirectWindow(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_composite_RedirectWindow_window, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    field8(tvb, offsetp, t, hf_x11_composite_RedirectWindow_update, byte_order);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 3, ENC_NA);
    *offsetp += 3;
}

static void compositeRedirectSubwindows(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_composite_RedirectSubwindows_window, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    field8(tvb, offsetp, t, hf_x11_composite_RedirectSubwindows_update, byte_order);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 3, ENC_NA);
    *offsetp += 3;
}

static void compositeUnredirectWindow(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_composite_UnredirectWindow_window, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    field8(tvb, offsetp, t, hf_x11_composite_UnredirectWindow_update, byte_order);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 3, ENC_NA);
    *offsetp += 3;
}

static void compositeUnredirectSubwindows(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_composite_UnredirectSubwindows_window, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    field8(tvb, offsetp, t, hf_x11_composite_UnredirectSubwindows_update, byte_order);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 3, ENC_NA);
    *offsetp += 3;
}

static void compositeCreateRegionFromBorderClip(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_composite_CreateRegionFromBorderClip_region, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_composite_CreateRegionFromBorderClip_window, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}

static void compositeNameWindowPixmap(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_composite_NameWindowPixmap_window, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_composite_NameWindowPixmap_pixmap, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}

static void compositeGetOverlayWindow(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_composite_GetOverlayWindow_window, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}
static void compositeGetOverlayWindow_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-GetOverlayWindow");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (composite-GetOverlayWindow)", sequence_number);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_composite_GetOverlayWindow_reply_overlay_win, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 20, ENC_NA);
    *offsetp += 20;
}

static void compositeReleaseOverlayWindow(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_composite_ReleaseOverlayWindow_window, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}
static const value_string composite_extension_minor[] = {
    { 0, "QueryVersion" },
    { 1, "RedirectWindow" },
    { 2, "RedirectSubwindows" },
    { 3, "UnredirectWindow" },
    { 4, "UnredirectSubwindows" },
    { 5, "CreateRegionFromBorderClip" },
    { 6, "NameWindowPixmap" },
    { 7, "GetOverlayWindow" },
    { 8, "ReleaseOverlayWindow" },
    { 0, NULL }
};
static const x11_event_info composite_events[] = {
    { NULL, NULL }
};
static const x11_reply_info composite_replies[] = {
    { 0, compositeQueryVersion_Reply },
    { 7, compositeGetOverlayWindow_Reply },
    { 0, NULL }
};

static void dispatch_composite(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int minor, length;
    minor = CARD8(composite_extension_minor);
    length = REQUEST_LENGTH();

    col_append_fstr(pinfo->cinfo, COL_INFO, "-%s",
                          val_to_str(minor, composite_extension_minor,
                                     "<Unknown opcode %d>"));
    switch (minor) {
    case 0:
        compositeQueryVersion(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 1:
        compositeRedirectWindow(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 2:
        compositeRedirectSubwindows(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 3:
        compositeUnredirectWindow(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 4:
        compositeUnredirectSubwindows(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 5:
        compositeCreateRegionFromBorderClip(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 6:
        compositeNameWindowPixmap(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 7:
        compositeGetOverlayWindow(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 8:
        compositeReleaseOverlayWindow(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    /* No need for a default case here, since Unknown is printed above,
       and UNDECODED() is taken care of by dissect_x11_request */
    }
}

static void register_composite(void)
{
    set_handler("Composite", dispatch_composite, composite_errors, composite_events, NULL, composite_replies);
}

static void damageQueryVersion(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_damage_QueryVersion_client_major_version, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_damage_QueryVersion_client_minor_version, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}
static void damageQueryVersion_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-QueryVersion");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (damage-QueryVersion)", sequence_number);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_damage_QueryVersion_reply_major_version, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_damage_QueryVersion_reply_minor_version, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 16, ENC_NA);
    *offsetp += 16;
}

static void damageCreate(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_damage_Create_damage, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_damage_Create_drawable, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    field8(tvb, offsetp, t, hf_x11_damage_Create_level, byte_order);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 3, ENC_NA);
    *offsetp += 3;
}

static void damageDestroy(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_damage_Destroy_damage, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}

static void damageSubtract(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_damage_Subtract_damage, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    field32(tvb, offsetp, t, hf_x11_damage_Subtract_repair, byte_order);
    field32(tvb, offsetp, t, hf_x11_damage_Subtract_parts, byte_order);
}

static void damageAdd(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_damage_Add_drawable, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_damage_Add_region, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}
static const value_string damage_extension_minor[] = {
    { 0, "QueryVersion" },
    { 1, "Create" },
    { 2, "Destroy" },
    { 3, "Subtract" },
    { 4, "Add" },
    { 0, NULL }
};
static const x11_event_info damage_events[] = {
    { NULL, NULL }
};
static const x11_reply_info damage_replies[] = {
    { 0, damageQueryVersion_Reply },
    { 0, NULL }
};

static void dispatch_damage(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int minor, length;
    minor = CARD8(damage_extension_minor);
    length = REQUEST_LENGTH();

    col_append_fstr(pinfo->cinfo, COL_INFO, "-%s",
                          val_to_str(minor, damage_extension_minor,
                                     "<Unknown opcode %d>"));
    switch (minor) {
    case 0:
        damageQueryVersion(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 1:
        damageCreate(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 2:
        damageDestroy(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 3:
        damageSubtract(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 4:
        damageAdd(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    /* No need for a default case here, since Unknown is printed above,
       and UNDECODED() is taken care of by dissect_x11_request */
    }
}

static void register_damage(void)
{
    set_handler("DAMAGE", dispatch_damage, damage_errors, damage_events, NULL, damage_replies);
}

static void struct_dbe_SwapInfo(tvbuff_t *tvb, int *offsetp, proto_tree *root, unsigned byte_order _U_, int count)
{
    int i;
    for (i = 0; i < count; i++) {
        proto_item *item;
        proto_tree *t;

        item = proto_tree_add_item(root, hf_x11_struct_dbe_SwapInfo, tvb, *offsetp, 8, ENC_NA);
        t = proto_item_add_subtree(item, ett_x11_rectangle);
        proto_tree_add_item(t, hf_x11_struct_dbe_SwapInfo_window, tvb, *offsetp, 4, byte_order);
        *offsetp += 4;
        field8(tvb, offsetp, t, hf_x11_struct_dbe_SwapInfo_swap_action, byte_order);
        proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 3, ENC_NA);
        *offsetp += 3;
    }
}

static void struct_dbe_BufferAttributes(tvbuff_t *tvb, int *offsetp, proto_tree *root, unsigned byte_order _U_, int count)
{
    int i;
    for (i = 0; i < count; i++) {
        proto_item *item;
        proto_tree *t;

        item = proto_tree_add_item(root, hf_x11_struct_dbe_BufferAttributes, tvb, *offsetp, 4, ENC_NA);
        t = proto_item_add_subtree(item, ett_x11_rectangle);
        proto_tree_add_item(t, hf_x11_struct_dbe_BufferAttributes_window, tvb, *offsetp, 4, byte_order);
        *offsetp += 4;
    }
}

static void struct_dbe_VisualInfo(tvbuff_t *tvb, int *offsetp, proto_tree *root, unsigned byte_order _U_, int count)
{
    int i;
    for (i = 0; i < count; i++) {
        proto_item *item;
        proto_tree *t;

        item = proto_tree_add_item(root, hf_x11_struct_dbe_VisualInfo, tvb, *offsetp, 8, ENC_NA);
        t = proto_item_add_subtree(item, ett_x11_rectangle);
        proto_tree_add_item(t, hf_x11_struct_dbe_VisualInfo_visual_id, tvb, *offsetp, 4, byte_order);
        *offsetp += 4;
        proto_tree_add_item(t, hf_x11_struct_dbe_VisualInfo_depth, tvb, *offsetp, 1, byte_order);
        *offsetp += 1;
        proto_tree_add_item(t, hf_x11_struct_dbe_VisualInfo_perf_level, tvb, *offsetp, 1, byte_order);
        *offsetp += 1;
        proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 2, ENC_NA);
        *offsetp += 2;
    }
}

static int struct_size_dbe_VisualInfos(tvbuff_t *tvb _U_, int *offsetp _U_, unsigned byte_order _U_)
{
    int size = 0;
    int f_n_infos;
    f_n_infos = tvb_get_uint32(tvb, *offsetp + size + 0, byte_order);
    size += f_n_infos * 8;
    return size + 4;
}

static void struct_dbe_VisualInfos(tvbuff_t *tvb, int *offsetp, proto_tree *root, unsigned byte_order _U_, int count)
{
    int i;
    for (i = 0; i < count; i++) {
        proto_item *item;
        proto_tree *t;
        int f_n_infos;

        item = proto_tree_add_item(root, hf_x11_struct_dbe_VisualInfos, tvb, *offsetp, struct_size_dbe_VisualInfos(tvb, offsetp, byte_order), ENC_NA);
        t = proto_item_add_subtree(item, ett_x11_rectangle);
        f_n_infos = tvb_get_uint32(tvb, *offsetp, byte_order);
        proto_tree_add_item(t, hf_x11_struct_dbe_VisualInfos_n_infos, tvb, *offsetp, 4, byte_order);
        *offsetp += 4;
        struct_dbe_VisualInfo(tvb, offsetp, t, byte_order, f_n_infos);
    }
}

static void dbeQueryVersion(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_dbe_QueryVersion_major_version, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_dbe_QueryVersion_minor_version, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 2, ENC_NA);
    *offsetp += 2;
}
static void dbeQueryVersion_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-QueryVersion");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (dbe-QueryVersion)", sequence_number);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_dbe_QueryVersion_reply_major_version, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_dbe_QueryVersion_reply_minor_version, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 22, ENC_NA);
    *offsetp += 22;
}

static void dbeAllocateBackBuffer(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_dbe_AllocateBackBuffer_window, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_dbe_AllocateBackBuffer_buffer, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_dbe_AllocateBackBuffer_swap_action, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 3, ENC_NA);
    *offsetp += 3;
}

static void dbeDeallocateBackBuffer(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_dbe_DeallocateBackBuffer_buffer, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}

static void dbeSwapBuffers(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    int f_n_actions;
    f_n_actions = tvb_get_uint32(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_dbe_SwapBuffers_n_actions, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    struct_dbe_SwapInfo(tvb, offsetp, t, byte_order, f_n_actions);
    length -= f_n_actions * 8;
}

static void dbeBeginIdiom(tvbuff_t *tvb _U_, packet_info *pinfo _U_, int *offsetp _U_, proto_tree *t _U_, unsigned byte_order _U_, int length _U_)
{
}

static void dbeEndIdiom(tvbuff_t *tvb _U_, packet_info *pinfo _U_, int *offsetp _U_, proto_tree *t _U_, unsigned byte_order _U_, int length _U_)
{
}

static void dbeGetVisualInfo(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    int f_n_drawables;
    f_n_drawables = tvb_get_uint32(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_dbe_GetVisualInfo_n_drawables, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    listOfCard32(tvb, offsetp, t, hf_x11_dbe_GetVisualInfo_drawables, hf_x11_dbe_GetVisualInfo_drawables_item, f_n_drawables, byte_order);
    length -= f_n_drawables * 4;
}
static void dbeGetVisualInfo_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;
    int f_n_supported_visuals;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-GetVisualInfo");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (dbe-GetVisualInfo)", sequence_number);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    f_n_supported_visuals = tvb_get_uint32(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_dbe_GetVisualInfo_reply_n_supported_visuals, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 20, ENC_NA);
    *offsetp += 20;
    struct_dbe_VisualInfos(tvb, offsetp, t, byte_order, f_n_supported_visuals);
}

static void dbeGetBackBufferAttributes(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_dbe_GetBackBufferAttributes_buffer, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}
static void dbeGetBackBufferAttributes_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-GetBackBufferAttributes");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (dbe-GetBackBufferAttributes)", sequence_number);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    struct_dbe_BufferAttributes(tvb, offsetp, t, byte_order, 1);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 20, ENC_NA);
    *offsetp += 20;
}
static const value_string dbe_extension_minor[] = {
    { 0, "QueryVersion" },
    { 1, "AllocateBackBuffer" },
    { 2, "DeallocateBackBuffer" },
    { 3, "SwapBuffers" },
    { 4, "BeginIdiom" },
    { 5, "EndIdiom" },
    { 6, "GetVisualInfo" },
    { 7, "GetBackBufferAttributes" },
    { 0, NULL }
};
static const x11_event_info dbe_events[] = {
    { NULL, NULL }
};
static const x11_reply_info dbe_replies[] = {
    { 0, dbeQueryVersion_Reply },
    { 6, dbeGetVisualInfo_Reply },
    { 7, dbeGetBackBufferAttributes_Reply },
    { 0, NULL }
};

static void dispatch_dbe(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int minor, length;
    minor = CARD8(dbe_extension_minor);
    length = REQUEST_LENGTH();

    col_append_fstr(pinfo->cinfo, COL_INFO, "-%s",
                          val_to_str(minor, dbe_extension_minor,
                                     "<Unknown opcode %d>"));
    switch (minor) {
    case 0:
        dbeQueryVersion(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 1:
        dbeAllocateBackBuffer(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 2:
        dbeDeallocateBackBuffer(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 3:
        dbeSwapBuffers(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 4:
        dbeBeginIdiom(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 5:
        dbeEndIdiom(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 6:
        dbeGetVisualInfo(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 7:
        dbeGetBackBufferAttributes(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    /* No need for a default case here, since Unknown is printed above,
       and UNDECODED() is taken care of by dissect_x11_request */
    }
}

static void register_dbe(void)
{
    set_handler("DOUBLE-BUFFER", dispatch_dbe, dbe_errors, dbe_events, NULL, dbe_replies);
}

static void dpmsGetVersion(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_dpms_GetVersion_client_major_version, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_dpms_GetVersion_client_minor_version, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
}
static void dpmsGetVersion_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-GetVersion");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (dpms-GetVersion)", sequence_number);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_dpms_GetVersion_reply_server_major_version, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_dpms_GetVersion_reply_server_minor_version, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
}

static void dpmsCapable(tvbuff_t *tvb _U_, packet_info *pinfo _U_, int *offsetp _U_, proto_tree *t _U_, unsigned byte_order _U_, int length _U_)
{
}
static void dpmsCapable_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-Capable");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (dpms-Capable)", sequence_number);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_dpms_Capable_reply_capable, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 23, ENC_NA);
    *offsetp += 23;
}

static void dpmsGetTimeouts(tvbuff_t *tvb _U_, packet_info *pinfo _U_, int *offsetp _U_, proto_tree *t _U_, unsigned byte_order _U_, int length _U_)
{
}
static void dpmsGetTimeouts_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-GetTimeouts");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (dpms-GetTimeouts)", sequence_number);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_dpms_GetTimeouts_reply_standby_timeout, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_dpms_GetTimeouts_reply_suspend_timeout, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_dpms_GetTimeouts_reply_off_timeout, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 18, ENC_NA);
    *offsetp += 18;
}

static void dpmsSetTimeouts(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_dpms_SetTimeouts_standby_timeout, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_dpms_SetTimeouts_suspend_timeout, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_dpms_SetTimeouts_off_timeout, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
}

static void dpmsEnable(tvbuff_t *tvb _U_, packet_info *pinfo _U_, int *offsetp _U_, proto_tree *t _U_, unsigned byte_order _U_, int length _U_)
{
}

static void dpmsDisable(tvbuff_t *tvb _U_, packet_info *pinfo _U_, int *offsetp _U_, proto_tree *t _U_, unsigned byte_order _U_, int length _U_)
{
}

static void dpmsForceLevel(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    field16(tvb, offsetp, t, hf_x11_dpms_ForceLevel_power_level, byte_order);
}

static void dpmsInfo(tvbuff_t *tvb _U_, packet_info *pinfo _U_, int *offsetp _U_, proto_tree *t _U_, unsigned byte_order _U_, int length _U_)
{
}
static void dpmsInfo_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-Info");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (dpms-Info)", sequence_number);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    field16(tvb, offsetp, t, hf_x11_dpms_Info_reply_power_level, byte_order);
    proto_tree_add_item(t, hf_x11_dpms_Info_reply_state, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 21, ENC_NA);
    *offsetp += 21;
}

static void dpmsSelectInput(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    {
        static int* const event_mask_bits [] = {
        &hf_x11_dpms_SelectInput_event_mask_mask_InfoNotify,
        NULL
        };
        proto_tree_add_bitmask(t,  tvb, *offsetp, hf_x11_dpms_SelectInput_event_mask, ett_x11_rectangle, event_mask_bits, byte_order);
    }
    *offsetp += 4;
}
static const value_string dpms_extension_minor[] = {
    { 0, "GetVersion" },
    { 1, "Capable" },
    { 2, "GetTimeouts" },
    { 3, "SetTimeouts" },
    { 4, "Enable" },
    { 5, "Disable" },
    { 6, "ForceLevel" },
    { 7, "Info" },
    { 8, "SelectInput" },
    { 0, NULL }
};
static const x11_event_info dpms_events[] = {
    { NULL, NULL }
};
static const x11_reply_info dpms_replies[] = {
    { 0, dpmsGetVersion_Reply },
    { 1, dpmsCapable_Reply },
    { 2, dpmsGetTimeouts_Reply },
    { 7, dpmsInfo_Reply },
    { 0, NULL }
};

static void dispatch_dpms(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int minor, length;
    minor = CARD8(dpms_extension_minor);
    length = REQUEST_LENGTH();

    col_append_fstr(pinfo->cinfo, COL_INFO, "-%s",
                          val_to_str(minor, dpms_extension_minor,
                                     "<Unknown opcode %d>"));
    switch (minor) {
    case 0:
        dpmsGetVersion(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 1:
        dpmsCapable(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 2:
        dpmsGetTimeouts(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 3:
        dpmsSetTimeouts(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 4:
        dpmsEnable(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 5:
        dpmsDisable(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 6:
        dpmsForceLevel(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 7:
        dpmsInfo(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 8:
        dpmsSelectInput(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    /* No need for a default case here, since Unknown is printed above,
       and UNDECODED() is taken care of by dissect_x11_request */
    }
}

static void register_dpms(void)
{
    set_handler("DPMS", dispatch_dpms, dpms_errors, dpms_events, NULL, dpms_replies);
}

static void struct_dri2_DRI2Buffer(tvbuff_t *tvb, int *offsetp, proto_tree *root, unsigned byte_order _U_, int count)
{
    int i;
    for (i = 0; i < count; i++) {
        proto_item *item;
        proto_tree *t;

        item = proto_tree_add_item(root, hf_x11_struct_dri2_DRI2Buffer, tvb, *offsetp, 20, ENC_NA);
        t = proto_item_add_subtree(item, ett_x11_rectangle);
        field32(tvb, offsetp, t, hf_x11_struct_dri2_DRI2Buffer_attachment, byte_order);
        proto_tree_add_item(t, hf_x11_struct_dri2_DRI2Buffer_name, tvb, *offsetp, 4, byte_order);
        *offsetp += 4;
        proto_tree_add_item(t, hf_x11_struct_dri2_DRI2Buffer_pitch, tvb, *offsetp, 4, byte_order);
        *offsetp += 4;
        proto_tree_add_item(t, hf_x11_struct_dri2_DRI2Buffer_cpp, tvb, *offsetp, 4, byte_order);
        *offsetp += 4;
        proto_tree_add_item(t, hf_x11_struct_dri2_DRI2Buffer_flags, tvb, *offsetp, 4, byte_order);
        *offsetp += 4;
    }
}

static void struct_dri2_AttachFormat(tvbuff_t *tvb, int *offsetp, proto_tree *root, unsigned byte_order _U_, int count)
{
    int i;
    for (i = 0; i < count; i++) {
        proto_item *item;
        proto_tree *t;

        item = proto_tree_add_item(root, hf_x11_struct_dri2_AttachFormat, tvb, *offsetp, 8, ENC_NA);
        t = proto_item_add_subtree(item, ett_x11_rectangle);
        field32(tvb, offsetp, t, hf_x11_struct_dri2_AttachFormat_attachment, byte_order);
        proto_tree_add_item(t, hf_x11_struct_dri2_AttachFormat_format, tvb, *offsetp, 4, byte_order);
        *offsetp += 4;
    }
}

static void dri2QueryVersion(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_dri2_QueryVersion_major_version, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_dri2_QueryVersion_minor_version, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}
static void dri2QueryVersion_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-QueryVersion");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (dri2-QueryVersion)", sequence_number);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_dri2_QueryVersion_reply_major_version, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_dri2_QueryVersion_reply_minor_version, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}

static void dri2Connect(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_dri2_Connect_window, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    field32(tvb, offsetp, t, hf_x11_dri2_Connect_driver_type, byte_order);
}
static void dri2Connect_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;
    int f_driver_name_length;
    int f_device_name_length;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-Connect");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (dri2-Connect)", sequence_number);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    f_driver_name_length = tvb_get_uint32(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_dri2_Connect_reply_driver_name_length, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    f_device_name_length = tvb_get_uint32(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_dri2_Connect_reply_device_name_length, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 16, ENC_NA);
    *offsetp += 16;
    listOfByte(tvb, offsetp, t, hf_x11_dri2_Connect_reply_driver_name, f_driver_name_length, byte_order);
    listOfByte(tvb, offsetp, t, hf_x11_dri2_Connect_reply_alignment_pad, (((f_driver_name_length + 3) & (~3)) - f_driver_name_length), byte_order);
    listOfByte(tvb, offsetp, t, hf_x11_dri2_Connect_reply_device_name, f_device_name_length, byte_order);
}

static void dri2Authenticate(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_dri2_Authenticate_window, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_dri2_Authenticate_magic, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}
static void dri2Authenticate_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-Authenticate");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (dri2-Authenticate)", sequence_number);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_dri2_Authenticate_reply_authenticated, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}

static void dri2CreateDrawable(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_dri2_CreateDrawable_drawable, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}

static void dri2DestroyDrawable(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_dri2_DestroyDrawable_drawable, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}

static void dri2GetBuffers(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_dri2_GetBuffers_drawable, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_dri2_GetBuffers_count, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    listOfCard32(tvb, offsetp, t, hf_x11_dri2_GetBuffers_attachments, hf_x11_dri2_GetBuffers_attachments_item, (length - 12) / 4, byte_order);
}
static void dri2GetBuffers_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;
    int f_count;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-GetBuffers");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (dri2-GetBuffers)", sequence_number);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_dri2_GetBuffers_reply_width, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_dri2_GetBuffers_reply_height, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    f_count = tvb_get_uint32(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_dri2_GetBuffers_reply_count, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 12, ENC_NA);
    *offsetp += 12;
    struct_dri2_DRI2Buffer(tvb, offsetp, t, byte_order, f_count);
}

static void dri2CopyRegion(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_dri2_CopyRegion_drawable, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_dri2_CopyRegion_region, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_dri2_CopyRegion_dest, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_dri2_CopyRegion_src, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}
static void dri2CopyRegion_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-CopyRegion");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (dri2-CopyRegion)", sequence_number);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}

static void dri2GetBuffersWithFormat(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_dri2_GetBuffersWithFormat_drawable, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_dri2_GetBuffersWithFormat_count, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    struct_dri2_AttachFormat(tvb, offsetp, t, byte_order, (length - 12) / 8);
}
static void dri2GetBuffersWithFormat_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;
    int f_count;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-GetBuffersWithFormat");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (dri2-GetBuffersWithFormat)", sequence_number);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_dri2_GetBuffersWithFormat_reply_width, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_dri2_GetBuffersWithFormat_reply_height, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    f_count = tvb_get_uint32(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_dri2_GetBuffersWithFormat_reply_count, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 12, ENC_NA);
    *offsetp += 12;
    struct_dri2_DRI2Buffer(tvb, offsetp, t, byte_order, f_count);
}

static void dri2SwapBuffers(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_dri2_SwapBuffers_drawable, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_dri2_SwapBuffers_target_msc_hi, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_dri2_SwapBuffers_target_msc_lo, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_dri2_SwapBuffers_divisor_hi, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_dri2_SwapBuffers_divisor_lo, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_dri2_SwapBuffers_remainder_hi, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_dri2_SwapBuffers_remainder_lo, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}
static void dri2SwapBuffers_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-SwapBuffers");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (dri2-SwapBuffers)", sequence_number);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_dri2_SwapBuffers_reply_swap_hi, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_dri2_SwapBuffers_reply_swap_lo, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}

static void dri2GetMSC(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_dri2_GetMSC_drawable, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}
static void dri2GetMSC_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-GetMSC");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (dri2-GetMSC)", sequence_number);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_dri2_GetMSC_reply_ust_hi, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_dri2_GetMSC_reply_ust_lo, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_dri2_GetMSC_reply_msc_hi, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_dri2_GetMSC_reply_msc_lo, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_dri2_GetMSC_reply_sbc_hi, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_dri2_GetMSC_reply_sbc_lo, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}

static void dri2WaitMSC(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_dri2_WaitMSC_drawable, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_dri2_WaitMSC_target_msc_hi, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_dri2_WaitMSC_target_msc_lo, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_dri2_WaitMSC_divisor_hi, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_dri2_WaitMSC_divisor_lo, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_dri2_WaitMSC_remainder_hi, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_dri2_WaitMSC_remainder_lo, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}
static void dri2WaitMSC_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-WaitMSC");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (dri2-WaitMSC)", sequence_number);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_dri2_WaitMSC_reply_ust_hi, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_dri2_WaitMSC_reply_ust_lo, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_dri2_WaitMSC_reply_msc_hi, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_dri2_WaitMSC_reply_msc_lo, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_dri2_WaitMSC_reply_sbc_hi, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_dri2_WaitMSC_reply_sbc_lo, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}

static void dri2WaitSBC(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_dri2_WaitSBC_drawable, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_dri2_WaitSBC_target_sbc_hi, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_dri2_WaitSBC_target_sbc_lo, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}
static void dri2WaitSBC_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-WaitSBC");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (dri2-WaitSBC)", sequence_number);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_dri2_WaitSBC_reply_ust_hi, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_dri2_WaitSBC_reply_ust_lo, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_dri2_WaitSBC_reply_msc_hi, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_dri2_WaitSBC_reply_msc_lo, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_dri2_WaitSBC_reply_sbc_hi, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_dri2_WaitSBC_reply_sbc_lo, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}

static void dri2SwapInterval(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_dri2_SwapInterval_drawable, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_dri2_SwapInterval_interval, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}

static void dri2GetParam(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_dri2_GetParam_drawable, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_dri2_GetParam_param, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}
static void dri2GetParam_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-GetParam");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_dri2_GetParam_reply_is_param_recognized, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (dri2-GetParam)", sequence_number);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_dri2_GetParam_reply_value_hi, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_dri2_GetParam_reply_value_lo, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}

static void dri2InvalidateBuffers(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order)
{
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    CARD16(event_sequencenumber);
    proto_tree_add_item(t, hf_x11_dri2_InvalidateBuffers_drawable, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}

static const value_string dri2_extension_minor[] = {
    { 0, "QueryVersion" },
    { 1, "Connect" },
    { 2, "Authenticate" },
    { 3, "CreateDrawable" },
    { 4, "DestroyDrawable" },
    { 5, "GetBuffers" },
    { 6, "CopyRegion" },
    { 7, "GetBuffersWithFormat" },
    { 8, "SwapBuffers" },
    { 9, "GetMSC" },
    { 10, "WaitMSC" },
    { 11, "WaitSBC" },
    { 12, "SwapInterval" },
    { 13, "GetParam" },
    { 0, NULL }
};
static const x11_event_info dri2_events[] = {
    { "dri2-InvalidateBuffers", dri2InvalidateBuffers },
    { NULL, NULL }
};
static const x11_reply_info dri2_replies[] = {
    { 0, dri2QueryVersion_Reply },
    { 1, dri2Connect_Reply },
    { 2, dri2Authenticate_Reply },
    { 5, dri2GetBuffers_Reply },
    { 6, dri2CopyRegion_Reply },
    { 7, dri2GetBuffersWithFormat_Reply },
    { 8, dri2SwapBuffers_Reply },
    { 9, dri2GetMSC_Reply },
    { 10, dri2WaitMSC_Reply },
    { 11, dri2WaitSBC_Reply },
    { 13, dri2GetParam_Reply },
    { 0, NULL }
};

static void dispatch_dri2(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int minor, length;
    minor = CARD8(dri2_extension_minor);
    length = REQUEST_LENGTH();

    col_append_fstr(pinfo->cinfo, COL_INFO, "-%s",
                          val_to_str(minor, dri2_extension_minor,
                                     "<Unknown opcode %d>"));
    switch (minor) {
    case 0:
        dri2QueryVersion(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 1:
        dri2Connect(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 2:
        dri2Authenticate(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 3:
        dri2CreateDrawable(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 4:
        dri2DestroyDrawable(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 5:
        dri2GetBuffers(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 6:
        dri2CopyRegion(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 7:
        dri2GetBuffersWithFormat(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 8:
        dri2SwapBuffers(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 9:
        dri2GetMSC(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 10:
        dri2WaitMSC(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 11:
        dri2WaitSBC(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 12:
        dri2SwapInterval(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 13:
        dri2GetParam(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    /* No need for a default case here, since Unknown is printed above,
       and UNDECODED() is taken care of by dissect_x11_request */
    }
}

static void register_dri2(void)
{
    set_handler("DRI2", dispatch_dri2, dri2_errors, dri2_events, NULL, dri2_replies);
}

static void dri3QueryVersion(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_dri3_QueryVersion_major_version, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_dri3_QueryVersion_minor_version, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}
static void dri3QueryVersion_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-QueryVersion");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (dri3-QueryVersion)", sequence_number);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_dri3_QueryVersion_reply_major_version, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_dri3_QueryVersion_reply_minor_version, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}

static void dri3Open(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_dri3_Open_drawable, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_dri3_Open_provider, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}
static void dri3Open_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-Open");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_dri3_Open_reply_nfd, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (dri3-Open)", sequence_number);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 24, ENC_NA);
    *offsetp += 24;
}

static void dri3PixmapFromBuffer(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_dri3_PixmapFromBuffer_pixmap, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_dri3_PixmapFromBuffer_drawable, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_dri3_PixmapFromBuffer_size, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_dri3_PixmapFromBuffer_width, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_dri3_PixmapFromBuffer_height, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_dri3_PixmapFromBuffer_stride, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_dri3_PixmapFromBuffer_depth, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_dri3_PixmapFromBuffer_bpp, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
}

static void dri3BufferFromPixmap(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_dri3_BufferFromPixmap_pixmap, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}
static void dri3BufferFromPixmap_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-BufferFromPixmap");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_dri3_BufferFromPixmap_reply_nfd, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (dri3-BufferFromPixmap)", sequence_number);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_dri3_BufferFromPixmap_reply_size, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_dri3_BufferFromPixmap_reply_width, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_dri3_BufferFromPixmap_reply_height, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_dri3_BufferFromPixmap_reply_stride, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_dri3_BufferFromPixmap_reply_depth, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_dri3_BufferFromPixmap_reply_bpp, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 12, ENC_NA);
    *offsetp += 12;
}

static void dri3FenceFromFD(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_dri3_FenceFromFD_drawable, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_dri3_FenceFromFD_fence, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_dri3_FenceFromFD_initially_triggered, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 3, ENC_NA);
    *offsetp += 3;
}

static void dri3FDFromFence(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_dri3_FDFromFence_drawable, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_dri3_FDFromFence_fence, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}
static void dri3FDFromFence_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-FDFromFence");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_dri3_FDFromFence_reply_nfd, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (dri3-FDFromFence)", sequence_number);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 24, ENC_NA);
    *offsetp += 24;
}

static void dri3GetSupportedModifiers(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_dri3_GetSupportedModifiers_window, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_dri3_GetSupportedModifiers_depth, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_dri3_GetSupportedModifiers_bpp, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 2, ENC_NA);
    *offsetp += 2;
}
static void dri3GetSupportedModifiers_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;
    int f_num_window_modifiers;
    int f_num_screen_modifiers;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-GetSupportedModifiers");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (dri3-GetSupportedModifiers)", sequence_number);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    f_num_window_modifiers = tvb_get_uint32(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_dri3_GetSupportedModifiers_reply_num_window_modifiers, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    f_num_screen_modifiers = tvb_get_uint32(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_dri3_GetSupportedModifiers_reply_num_screen_modifiers, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 16, ENC_NA);
    *offsetp += 16;
    listOfCard64(tvb, offsetp, t, hf_x11_dri3_GetSupportedModifiers_reply_window_modifiers, hf_x11_dri3_GetSupportedModifiers_reply_window_modifiers_item, f_num_window_modifiers, byte_order);
    listOfCard64(tvb, offsetp, t, hf_x11_dri3_GetSupportedModifiers_reply_screen_modifiers, hf_x11_dri3_GetSupportedModifiers_reply_screen_modifiers_item, f_num_screen_modifiers, byte_order);
}

static void dri3PixmapFromBuffers(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    int f_num_buffers;
    proto_tree_add_item(t, hf_x11_dri3_PixmapFromBuffers_pixmap, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_dri3_PixmapFromBuffers_window, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    f_num_buffers = tvb_get_uint8(tvb, *offsetp);
    proto_tree_add_item(t, hf_x11_dri3_PixmapFromBuffers_num_buffers, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 3, ENC_NA);
    *offsetp += 3;
    proto_tree_add_item(t, hf_x11_dri3_PixmapFromBuffers_width, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_dri3_PixmapFromBuffers_height, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_dri3_PixmapFromBuffers_stride0, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_dri3_PixmapFromBuffers_offset0, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_dri3_PixmapFromBuffers_stride1, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_dri3_PixmapFromBuffers_offset1, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_dri3_PixmapFromBuffers_stride2, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_dri3_PixmapFromBuffers_offset2, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_dri3_PixmapFromBuffers_stride3, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_dri3_PixmapFromBuffers_offset3, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_dri3_PixmapFromBuffers_depth, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_dri3_PixmapFromBuffers_bpp, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 2, ENC_NA);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_dri3_PixmapFromBuffers_modifier, tvb, *offsetp, 8, byte_order);
    *offsetp += 8;
    length -= f_num_buffers * 1;
}

static void dri3BuffersFromPixmap(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_dri3_BuffersFromPixmap_pixmap, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}
static void dri3BuffersFromPixmap_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;
    int f_nfd;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-BuffersFromPixmap");

    REPLY(reply);
    f_nfd = tvb_get_uint8(tvb, *offsetp);
    proto_tree_add_item(t, hf_x11_dri3_BuffersFromPixmap_reply_nfd, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (dri3-BuffersFromPixmap)", sequence_number);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_dri3_BuffersFromPixmap_reply_width, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_dri3_BuffersFromPixmap_reply_height, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 4, ENC_NA);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_dri3_BuffersFromPixmap_reply_modifier, tvb, *offsetp, 8, byte_order);
    *offsetp += 8;
    proto_tree_add_item(t, hf_x11_dri3_BuffersFromPixmap_reply_depth, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_dri3_BuffersFromPixmap_reply_bpp, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 6, ENC_NA);
    *offsetp += 6;
    listOfCard32(tvb, offsetp, t, hf_x11_dri3_BuffersFromPixmap_reply_strides, hf_x11_dri3_BuffersFromPixmap_reply_strides_item, f_nfd, byte_order);
    listOfCard32(tvb, offsetp, t, hf_x11_dri3_BuffersFromPixmap_reply_offsets, hf_x11_dri3_BuffersFromPixmap_reply_offsets_item, f_nfd, byte_order);
}

static void dri3SetDRMDeviceInUse(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_dri3_SetDRMDeviceInUse_window, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_dri3_SetDRMDeviceInUse_drmMajor, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_dri3_SetDRMDeviceInUse_drmMinor, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}

static void dri3ImportSyncobj(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_dri3_ImportSyncobj_syncobj, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_dri3_ImportSyncobj_drawable, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}

static void dri3FreeSyncobj(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_dri3_FreeSyncobj_syncobj, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}
static const value_string dri3_extension_minor[] = {
    { 0, "QueryVersion" },
    { 1, "Open" },
    { 2, "PixmapFromBuffer" },
    { 3, "BufferFromPixmap" },
    { 4, "FenceFromFD" },
    { 5, "FDFromFence" },
    { 6, "GetSupportedModifiers" },
    { 7, "PixmapFromBuffers" },
    { 8, "BuffersFromPixmap" },
    { 9, "SetDRMDeviceInUse" },
    { 10, "ImportSyncobj" },
    { 11, "FreeSyncobj" },
    { 0, NULL }
};
static const x11_event_info dri3_events[] = {
    { NULL, NULL }
};
static const x11_reply_info dri3_replies[] = {
    { 0, dri3QueryVersion_Reply },
    { 1, dri3Open_Reply },
    { 3, dri3BufferFromPixmap_Reply },
    { 5, dri3FDFromFence_Reply },
    { 6, dri3GetSupportedModifiers_Reply },
    { 8, dri3BuffersFromPixmap_Reply },
    { 0, NULL }
};

static void dispatch_dri3(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int minor, length;
    minor = CARD8(dri3_extension_minor);
    length = REQUEST_LENGTH();

    col_append_fstr(pinfo->cinfo, COL_INFO, "-%s",
                          val_to_str(minor, dri3_extension_minor,
                                     "<Unknown opcode %d>"));
    switch (minor) {
    case 0:
        dri3QueryVersion(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 1:
        dri3Open(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 2:
        dri3PixmapFromBuffer(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 3:
        dri3BufferFromPixmap(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 4:
        dri3FenceFromFD(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 5:
        dri3FDFromFence(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 6:
        dri3GetSupportedModifiers(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 7:
        dri3PixmapFromBuffers(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 8:
        dri3BuffersFromPixmap(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 9:
        dri3SetDRMDeviceInUse(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 10:
        dri3ImportSyncobj(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 11:
        dri3FreeSyncobj(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    /* No need for a default case here, since Unknown is printed above,
       and UNDECODED() is taken care of by dissect_x11_request */
    }
}

static void register_dri3(void)
{
    set_handler("DRI3", dispatch_dri3, dri3_errors, dri3_events, NULL, dri3_replies);
}

static void geQueryVersion(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_ge_QueryVersion_client_major_version, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_ge_QueryVersion_client_minor_version, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
}
static void geQueryVersion_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-QueryVersion");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (ge-QueryVersion)", sequence_number);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_ge_QueryVersion_reply_major_version, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_ge_QueryVersion_reply_minor_version, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 20, ENC_NA);
    *offsetp += 20;
}
static const value_string ge_extension_minor[] = {
    { 0, "QueryVersion" },
    { 0, NULL }
};
static const x11_event_info ge_events[] = {
    { NULL, NULL }
};
static const x11_reply_info ge_replies[] = {
    { 0, geQueryVersion_Reply },
    { 0, NULL }
};

static void dispatch_ge(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int minor, length;
    minor = CARD8(ge_extension_minor);
    length = REQUEST_LENGTH();

    col_append_fstr(pinfo->cinfo, COL_INFO, "-%s",
                          val_to_str(minor, ge_extension_minor,
                                     "<Unknown opcode %d>"));
    switch (minor) {
    case 0:
        geQueryVersion(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    /* No need for a default case here, since Unknown is printed above,
       and UNDECODED() is taken care of by dissect_x11_request */
    }
}

static void register_ge(void)
{
    set_handler("Generic Event Extension", dispatch_ge, ge_errors, ge_events, NULL, ge_replies);
}

static void glxBufferSwapComplete(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order)
{
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    CARD16(event_sequencenumber);
    proto_tree_add_item(t, hf_x11_glx_BufferSwapComplete_event_type, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 2, ENC_NA);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_glx_BufferSwapComplete_drawable, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_BufferSwapComplete_ust_hi, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_BufferSwapComplete_ust_lo, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_BufferSwapComplete_msc_hi, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_BufferSwapComplete_msc_lo, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_BufferSwapComplete_sbc, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}


static void glxRender(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_Render_context_tag, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    dispatch_glx_render(tvb, pinfo, offsetp, t, byte_order, (length - 8));
}

static void glxRenderLarge(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    int f_data_len;
    proto_tree_add_item(t, hf_x11_glx_RenderLarge_context_tag, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_RenderLarge_request_num, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_glx_RenderLarge_request_total, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    f_data_len = tvb_get_uint32(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_glx_RenderLarge_data_len, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    listOfByte(tvb, offsetp, t, hf_x11_glx_RenderLarge_data, f_data_len, byte_order);
    length -= f_data_len * 1;
}

static void glxCreateContext(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_CreateContext_context, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_CreateContext_visual, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_CreateContext_screen, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_CreateContext_share_list, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_CreateContext_is_direct, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 3, ENC_NA);
    *offsetp += 3;
}

static void glxDestroyContext(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_DestroyContext_context, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}

static void glxMakeCurrent(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_MakeCurrent_drawable, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_MakeCurrent_context, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_MakeCurrent_old_context_tag, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}
static void glxMakeCurrent_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-MakeCurrent");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (glx-MakeCurrent)", sequence_number);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_MakeCurrent_reply_context_tag, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 20, ENC_NA);
    *offsetp += 20;
}

static void glxIsDirect(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_IsDirect_context, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}
static void glxIsDirect_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-IsDirect");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (glx-IsDirect)", sequence_number);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_IsDirect_reply_is_direct, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 23, ENC_NA);
    *offsetp += 23;
}

static void glxQueryVersion(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_QueryVersion_major_version, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_QueryVersion_minor_version, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}
static void glxQueryVersion_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-QueryVersion");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (glx-QueryVersion)", sequence_number);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_QueryVersion_reply_major_version, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_QueryVersion_reply_minor_version, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 16, ENC_NA);
    *offsetp += 16;
}

static void glxWaitGL(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_WaitGL_context_tag, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}

static void glxWaitX(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_WaitX_context_tag, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}

static void glxCopyContext(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_CopyContext_src, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_CopyContext_dest, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_CopyContext_mask, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_CopyContext_src_context_tag, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}

static void glxSwapBuffers(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_SwapBuffers_context_tag, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_SwapBuffers_drawable, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}

static void glxUseXFont(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_UseXFont_context_tag, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_UseXFont_font, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_UseXFont_first, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_UseXFont_count, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_UseXFont_list_base, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}

static void glxCreateGLXPixmap(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_CreateGLXPixmap_screen, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_CreateGLXPixmap_visual, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_CreateGLXPixmap_pixmap, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_CreateGLXPixmap_glx_pixmap, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}

static void glxGetVisualConfigs(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_GetVisualConfigs_screen, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}
static void glxGetVisualConfigs_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;
    int f_length;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-GetVisualConfigs");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (glx-GetVisualConfigs)", sequence_number);
    *offsetp += 2;
    f_length = tvb_get_uint32(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_GetVisualConfigs_reply_num_visuals, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_GetVisualConfigs_reply_num_properties, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 16, ENC_NA);
    *offsetp += 16;
    listOfCard32(tvb, offsetp, t, hf_x11_glx_GetVisualConfigs_reply_property_list, hf_x11_glx_GetVisualConfigs_reply_property_list_item, f_length, byte_order);
}

static void glxDestroyGLXPixmap(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_DestroyGLXPixmap_glx_pixmap, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}

static void glxVendorPrivate(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_VendorPrivate_vendor_code, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_VendorPrivate_context_tag, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    listOfByte(tvb, offsetp, t, hf_x11_glx_VendorPrivate_data, (length - 12) / 1, byte_order);
}

static void glxVendorPrivateWithReply(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_VendorPrivateWithReply_vendor_code, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_VendorPrivateWithReply_context_tag, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    listOfByte(tvb, offsetp, t, hf_x11_glx_VendorPrivateWithReply_data, (length - 12) / 1, byte_order);
}
static void glxVendorPrivateWithReply_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;
    int f_length;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-VendorPrivateWithReply");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (glx-VendorPrivateWithReply)", sequence_number);
    *offsetp += 2;
    f_length = tvb_get_uint32(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_VendorPrivateWithReply_reply_retval, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    listOfByte(tvb, offsetp, t, hf_x11_glx_VendorPrivateWithReply_reply_data1, 24, byte_order);
    listOfByte(tvb, offsetp, t, hf_x11_glx_VendorPrivateWithReply_reply_data2, (f_length * 4), byte_order);
}

static void glxQueryExtensionsString(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_QueryExtensionsString_screen, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}
static void glxQueryExtensionsString_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-QueryExtensionsString");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (glx-QueryExtensionsString)", sequence_number);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 4, ENC_NA);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_QueryExtensionsString_reply_n, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 16, ENC_NA);
    *offsetp += 16;
}

static void glxQueryServerString(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_QueryServerString_screen, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_QueryServerString_name, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}
static void glxQueryServerString_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;
    int f_str_len;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-QueryServerString");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (glx-QueryServerString)", sequence_number);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 4, ENC_NA);
    *offsetp += 4;
    f_str_len = tvb_get_uint32(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_glx_QueryServerString_reply_str_len, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 16, ENC_NA);
    *offsetp += 16;
    listOfByte(tvb, offsetp, t, hf_x11_glx_QueryServerString_reply_string, f_str_len, byte_order);
}

static void glxClientInfo(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    int f_str_len;
    proto_tree_add_item(t, hf_x11_glx_ClientInfo_major_version, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_ClientInfo_minor_version, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    f_str_len = tvb_get_uint32(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_glx_ClientInfo_str_len, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    listOfByte(tvb, offsetp, t, hf_x11_glx_ClientInfo_string, f_str_len, byte_order);
    length -= f_str_len * 1;
}

static void glxGetFBConfigs(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_GetFBConfigs_screen, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}
static void glxGetFBConfigs_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;
    int f_length;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-GetFBConfigs");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (glx-GetFBConfigs)", sequence_number);
    *offsetp += 2;
    f_length = tvb_get_uint32(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_GetFBConfigs_reply_num_FB_configs, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_GetFBConfigs_reply_num_properties, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 16, ENC_NA);
    *offsetp += 16;
    listOfCard32(tvb, offsetp, t, hf_x11_glx_GetFBConfigs_reply_property_list, hf_x11_glx_GetFBConfigs_reply_property_list_item, f_length, byte_order);
}

static void glxCreatePixmap(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    int f_num_attribs;
    proto_tree_add_item(t, hf_x11_glx_CreatePixmap_screen, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_CreatePixmap_fbconfig, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_CreatePixmap_pixmap, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_CreatePixmap_glx_pixmap, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    f_num_attribs = tvb_get_uint32(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_glx_CreatePixmap_num_attribs, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    listOfCard32(tvb, offsetp, t, hf_x11_glx_CreatePixmap_attribs, hf_x11_glx_CreatePixmap_attribs_item, (f_num_attribs * 2), byte_order);
    length -= (f_num_attribs * 2) * 4;
}

static void glxDestroyPixmap(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_DestroyPixmap_glx_pixmap, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}

static void glxCreateNewContext(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_CreateNewContext_context, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_CreateNewContext_fbconfig, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_CreateNewContext_screen, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_CreateNewContext_render_type, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_CreateNewContext_share_list, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_CreateNewContext_is_direct, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 3, ENC_NA);
    *offsetp += 3;
}

static void glxQueryContext(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_QueryContext_context, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}
static void glxQueryContext_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;
    int f_num_attribs;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-QueryContext");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (glx-QueryContext)", sequence_number);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    f_num_attribs = tvb_get_uint32(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_glx_QueryContext_reply_num_attribs, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 20, ENC_NA);
    *offsetp += 20;
    listOfCard32(tvb, offsetp, t, hf_x11_glx_QueryContext_reply_attribs, hf_x11_glx_QueryContext_reply_attribs_item, (f_num_attribs * 2), byte_order);
}

static void glxMakeContextCurrent(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_MakeContextCurrent_old_context_tag, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_MakeContextCurrent_drawable, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_MakeContextCurrent_read_drawable, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_MakeContextCurrent_context, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}
static void glxMakeContextCurrent_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-MakeContextCurrent");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (glx-MakeContextCurrent)", sequence_number);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_MakeContextCurrent_reply_context_tag, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 20, ENC_NA);
    *offsetp += 20;
}

static void glxCreatePbuffer(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    int f_num_attribs;
    proto_tree_add_item(t, hf_x11_glx_CreatePbuffer_screen, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_CreatePbuffer_fbconfig, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_CreatePbuffer_pbuffer, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    f_num_attribs = tvb_get_uint32(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_glx_CreatePbuffer_num_attribs, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    listOfCard32(tvb, offsetp, t, hf_x11_glx_CreatePbuffer_attribs, hf_x11_glx_CreatePbuffer_attribs_item, (f_num_attribs * 2), byte_order);
    length -= (f_num_attribs * 2) * 4;
}

static void glxDestroyPbuffer(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_DestroyPbuffer_pbuffer, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}

static void glxGetDrawableAttributes(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_GetDrawableAttributes_drawable, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}
static void glxGetDrawableAttributes_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;
    int f_num_attribs;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-GetDrawableAttributes");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (glx-GetDrawableAttributes)", sequence_number);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    f_num_attribs = tvb_get_uint32(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_glx_GetDrawableAttributes_reply_num_attribs, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 20, ENC_NA);
    *offsetp += 20;
    listOfCard32(tvb, offsetp, t, hf_x11_glx_GetDrawableAttributes_reply_attribs, hf_x11_glx_GetDrawableAttributes_reply_attribs_item, (f_num_attribs * 2), byte_order);
}

static void glxChangeDrawableAttributes(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    int f_num_attribs;
    proto_tree_add_item(t, hf_x11_glx_ChangeDrawableAttributes_drawable, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    f_num_attribs = tvb_get_uint32(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_glx_ChangeDrawableAttributes_num_attribs, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    listOfCard32(tvb, offsetp, t, hf_x11_glx_ChangeDrawableAttributes_attribs, hf_x11_glx_ChangeDrawableAttributes_attribs_item, (f_num_attribs * 2), byte_order);
    length -= (f_num_attribs * 2) * 4;
}

static void glxCreateWindow(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    int f_num_attribs;
    proto_tree_add_item(t, hf_x11_glx_CreateWindow_screen, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_CreateWindow_fbconfig, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_CreateWindow_window, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_CreateWindow_glx_window, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    f_num_attribs = tvb_get_uint32(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_glx_CreateWindow_num_attribs, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    listOfCard32(tvb, offsetp, t, hf_x11_glx_CreateWindow_attribs, hf_x11_glx_CreateWindow_attribs_item, (f_num_attribs * 2), byte_order);
    length -= (f_num_attribs * 2) * 4;
}

static void glxDeleteWindow(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_DeleteWindow_glxwindow, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}

static void glxSetClientInfoARB(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    int f_num_versions;
    int f_gl_str_len;
    int f_glx_str_len;
    proto_tree_add_item(t, hf_x11_glx_SetClientInfoARB_major_version, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_SetClientInfoARB_minor_version, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    f_num_versions = tvb_get_uint32(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_glx_SetClientInfoARB_num_versions, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    f_gl_str_len = tvb_get_uint32(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_glx_SetClientInfoARB_gl_str_len, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    f_glx_str_len = tvb_get_uint32(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_glx_SetClientInfoARB_glx_str_len, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    listOfCard32(tvb, offsetp, t, hf_x11_glx_SetClientInfoARB_gl_versions, hf_x11_glx_SetClientInfoARB_gl_versions_item, (f_num_versions * 2), byte_order);
    length -= (f_num_versions * 2) * 4;
    listOfByte(tvb, offsetp, t, hf_x11_glx_SetClientInfoARB_gl_extension_string, f_gl_str_len, byte_order);
    length -= f_gl_str_len * 1;
    if (*offsetp % 4) {
        proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, (4 - *offsetp % 4), ENC_NA);
        *offsetp += (4 - *offsetp % 4);
    }
    length = ((length + 3) & ~3);
    listOfByte(tvb, offsetp, t, hf_x11_glx_SetClientInfoARB_glx_extension_string, f_glx_str_len, byte_order);
    length -= f_glx_str_len * 1;
}

static void glxCreateContextAttribsARB(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    int f_num_attribs;
    proto_tree_add_item(t, hf_x11_glx_CreateContextAttribsARB_context, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_CreateContextAttribsARB_fbconfig, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_CreateContextAttribsARB_screen, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_CreateContextAttribsARB_share_list, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_CreateContextAttribsARB_is_direct, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 3, ENC_NA);
    *offsetp += 3;
    f_num_attribs = tvb_get_uint32(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_glx_CreateContextAttribsARB_num_attribs, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    listOfCard32(tvb, offsetp, t, hf_x11_glx_CreateContextAttribsARB_attribs, hf_x11_glx_CreateContextAttribsARB_attribs_item, (f_num_attribs * 2), byte_order);
    length -= (f_num_attribs * 2) * 4;
}

static void glxSetClientInfo2ARB(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    int f_num_versions;
    int f_gl_str_len;
    int f_glx_str_len;
    proto_tree_add_item(t, hf_x11_glx_SetClientInfo2ARB_major_version, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_SetClientInfo2ARB_minor_version, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    f_num_versions = tvb_get_uint32(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_glx_SetClientInfo2ARB_num_versions, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    f_gl_str_len = tvb_get_uint32(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_glx_SetClientInfo2ARB_gl_str_len, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    f_glx_str_len = tvb_get_uint32(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_glx_SetClientInfo2ARB_glx_str_len, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    listOfCard32(tvb, offsetp, t, hf_x11_glx_SetClientInfo2ARB_gl_versions, hf_x11_glx_SetClientInfo2ARB_gl_versions_item, (f_num_versions * 3), byte_order);
    length -= (f_num_versions * 3) * 4;
    listOfByte(tvb, offsetp, t, hf_x11_glx_SetClientInfo2ARB_gl_extension_string, f_gl_str_len, byte_order);
    length -= f_gl_str_len * 1;
    if (*offsetp % 4) {
        proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, (4 - *offsetp % 4), ENC_NA);
        *offsetp += (4 - *offsetp % 4);
    }
    length = ((length + 3) & ~3);
    listOfByte(tvb, offsetp, t, hf_x11_glx_SetClientInfo2ARB_glx_extension_string, f_glx_str_len, byte_order);
    length -= f_glx_str_len * 1;
}

static void glxNewList(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_NewList_context_tag, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_NewList_list, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_NewList_mode, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}

static void glxEndList(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_EndList_context_tag, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}

static void glxDeleteLists(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_DeleteLists_context_tag, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_DeleteLists_list, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_DeleteLists_range, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}

static void glxGenLists(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_GenLists_context_tag, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_GenLists_range, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}
static void glxGenLists_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-GenLists");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (glx-GenLists)", sequence_number);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_GenLists_reply_ret_val, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}

static void glxFeedbackBuffer(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_FeedbackBuffer_context_tag, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_FeedbackBuffer_size, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_FeedbackBuffer_type, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}

static void glxSelectBuffer(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_SelectBuffer_context_tag, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_SelectBuffer_size, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}

static void glxRenderMode(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_RenderMode_context_tag, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_RenderMode_mode, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}
static void glxRenderMode_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;
    int f_n;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-RenderMode");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (glx-RenderMode)", sequence_number);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_RenderMode_reply_ret_val, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    f_n = tvb_get_uint32(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_glx_RenderMode_reply_n, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_RenderMode_reply_new_mode, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 12, ENC_NA);
    *offsetp += 12;
    listOfCard32(tvb, offsetp, t, hf_x11_glx_RenderMode_reply_data, hf_x11_glx_RenderMode_reply_data_item, f_n, byte_order);
}

static void glxFinish(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_Finish_context_tag, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}
static void glxFinish_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-Finish");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (glx-Finish)", sequence_number);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}

static void glxPixelStoref(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_PixelStoref_context_tag, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_PixelStoref_pname, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_PixelStoref_datum, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}

static void glxPixelStorei(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_PixelStorei_context_tag, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_PixelStorei_pname, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_PixelStorei_datum, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}

static void glxReadPixels(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_ReadPixels_context_tag, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_ReadPixels_x, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_ReadPixels_y, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_ReadPixels_width, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_ReadPixels_height, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_ReadPixels_format, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_ReadPixels_type, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_ReadPixels_swap_bytes, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_glx_ReadPixels_lsb_first, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
}
static void glxReadPixels_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;
    int f_length;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-ReadPixels");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (glx-ReadPixels)", sequence_number);
    *offsetp += 2;
    f_length = tvb_get_uint32(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 24, ENC_NA);
    *offsetp += 24;
    listOfByte(tvb, offsetp, t, hf_x11_glx_ReadPixels_reply_data, (f_length * 4), byte_order);
}

static void glxGetBooleanv(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_GetBooleanv_context_tag, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_GetBooleanv_pname, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}
static void glxGetBooleanv_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;
    int f_n;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-GetBooleanv");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (glx-GetBooleanv)", sequence_number);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 4, ENC_NA);
    *offsetp += 4;
    f_n = tvb_get_uint32(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_glx_GetBooleanv_reply_n, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_GetBooleanv_reply_datum, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 15, ENC_NA);
    *offsetp += 15;
    listOfByte(tvb, offsetp, t, hf_x11_glx_GetBooleanv_reply_data, f_n, byte_order);
}

static void glxGetClipPlane(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_GetClipPlane_context_tag, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_GetClipPlane_plane, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}
static void glxGetClipPlane_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;
    int f_length;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-GetClipPlane");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (glx-GetClipPlane)", sequence_number);
    *offsetp += 2;
    f_length = tvb_get_uint32(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 24, ENC_NA);
    *offsetp += 24;
    listOfDouble(tvb, offsetp, t, hf_x11_glx_GetClipPlane_reply_data, hf_x11_glx_GetClipPlane_reply_data_item, (f_length / 2), byte_order);
}

static void glxGetDoublev(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_GetDoublev_context_tag, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_GetDoublev_pname, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}
static void glxGetDoublev_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;
    int f_n;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-GetDoublev");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (glx-GetDoublev)", sequence_number);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 4, ENC_NA);
    *offsetp += 4;
    f_n = tvb_get_uint32(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_glx_GetDoublev_reply_n, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_GetDoublev_reply_datum, tvb, *offsetp, 8, byte_order);
    *offsetp += 8;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 8, ENC_NA);
    *offsetp += 8;
    listOfDouble(tvb, offsetp, t, hf_x11_glx_GetDoublev_reply_data, hf_x11_glx_GetDoublev_reply_data_item, f_n, byte_order);
}

static void glxGetError(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_GetError_context_tag, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}
static void glxGetError_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-GetError");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (glx-GetError)", sequence_number);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_GetError_reply_error, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}

static void glxGetFloatv(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_GetFloatv_context_tag, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_GetFloatv_pname, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}
static void glxGetFloatv_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;
    int f_n;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-GetFloatv");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (glx-GetFloatv)", sequence_number);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 4, ENC_NA);
    *offsetp += 4;
    f_n = tvb_get_uint32(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_glx_GetFloatv_reply_n, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_GetFloatv_reply_datum, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 12, ENC_NA);
    *offsetp += 12;
    listOfFloat(tvb, offsetp, t, hf_x11_glx_GetFloatv_reply_data, hf_x11_glx_GetFloatv_reply_data_item, f_n, byte_order);
}

static void glxGetIntegerv(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_GetIntegerv_context_tag, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_GetIntegerv_pname, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}
static void glxGetIntegerv_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;
    int f_n;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-GetIntegerv");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (glx-GetIntegerv)", sequence_number);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 4, ENC_NA);
    *offsetp += 4;
    f_n = tvb_get_uint32(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_glx_GetIntegerv_reply_n, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_GetIntegerv_reply_datum, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 12, ENC_NA);
    *offsetp += 12;
    listOfInt32(tvb, offsetp, t, hf_x11_glx_GetIntegerv_reply_data, hf_x11_glx_GetIntegerv_reply_data_item, f_n, byte_order);
}

static void glxGetLightfv(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_GetLightfv_context_tag, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_GetLightfv_light, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_GetLightfv_pname, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}
static void glxGetLightfv_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;
    int f_n;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-GetLightfv");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (glx-GetLightfv)", sequence_number);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 4, ENC_NA);
    *offsetp += 4;
    f_n = tvb_get_uint32(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_glx_GetLightfv_reply_n, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_GetLightfv_reply_datum, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 12, ENC_NA);
    *offsetp += 12;
    listOfFloat(tvb, offsetp, t, hf_x11_glx_GetLightfv_reply_data, hf_x11_glx_GetLightfv_reply_data_item, f_n, byte_order);
}

static void glxGetLightiv(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_GetLightiv_context_tag, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_GetLightiv_light, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_GetLightiv_pname, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}
static void glxGetLightiv_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;
    int f_n;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-GetLightiv");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (glx-GetLightiv)", sequence_number);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 4, ENC_NA);
    *offsetp += 4;
    f_n = tvb_get_uint32(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_glx_GetLightiv_reply_n, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_GetLightiv_reply_datum, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 12, ENC_NA);
    *offsetp += 12;
    listOfInt32(tvb, offsetp, t, hf_x11_glx_GetLightiv_reply_data, hf_x11_glx_GetLightiv_reply_data_item, f_n, byte_order);
}

static void glxGetMapdv(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_GetMapdv_context_tag, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_GetMapdv_target, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_GetMapdv_query, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}
static void glxGetMapdv_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;
    int f_n;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-GetMapdv");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (glx-GetMapdv)", sequence_number);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 4, ENC_NA);
    *offsetp += 4;
    f_n = tvb_get_uint32(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_glx_GetMapdv_reply_n, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_GetMapdv_reply_datum, tvb, *offsetp, 8, byte_order);
    *offsetp += 8;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 8, ENC_NA);
    *offsetp += 8;
    listOfDouble(tvb, offsetp, t, hf_x11_glx_GetMapdv_reply_data, hf_x11_glx_GetMapdv_reply_data_item, f_n, byte_order);
}

static void glxGetMapfv(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_GetMapfv_context_tag, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_GetMapfv_target, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_GetMapfv_query, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}
static void glxGetMapfv_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;
    int f_n;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-GetMapfv");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (glx-GetMapfv)", sequence_number);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 4, ENC_NA);
    *offsetp += 4;
    f_n = tvb_get_uint32(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_glx_GetMapfv_reply_n, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_GetMapfv_reply_datum, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 12, ENC_NA);
    *offsetp += 12;
    listOfFloat(tvb, offsetp, t, hf_x11_glx_GetMapfv_reply_data, hf_x11_glx_GetMapfv_reply_data_item, f_n, byte_order);
}

static void glxGetMapiv(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_GetMapiv_context_tag, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_GetMapiv_target, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_GetMapiv_query, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}
static void glxGetMapiv_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;
    int f_n;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-GetMapiv");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (glx-GetMapiv)", sequence_number);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 4, ENC_NA);
    *offsetp += 4;
    f_n = tvb_get_uint32(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_glx_GetMapiv_reply_n, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_GetMapiv_reply_datum, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 12, ENC_NA);
    *offsetp += 12;
    listOfInt32(tvb, offsetp, t, hf_x11_glx_GetMapiv_reply_data, hf_x11_glx_GetMapiv_reply_data_item, f_n, byte_order);
}

static void glxGetMaterialfv(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_GetMaterialfv_context_tag, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_GetMaterialfv_face, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_GetMaterialfv_pname, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}
static void glxGetMaterialfv_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;
    int f_n;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-GetMaterialfv");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (glx-GetMaterialfv)", sequence_number);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 4, ENC_NA);
    *offsetp += 4;
    f_n = tvb_get_uint32(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_glx_GetMaterialfv_reply_n, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_GetMaterialfv_reply_datum, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 12, ENC_NA);
    *offsetp += 12;
    listOfFloat(tvb, offsetp, t, hf_x11_glx_GetMaterialfv_reply_data, hf_x11_glx_GetMaterialfv_reply_data_item, f_n, byte_order);
}

static void glxGetMaterialiv(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_GetMaterialiv_context_tag, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_GetMaterialiv_face, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_GetMaterialiv_pname, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}
static void glxGetMaterialiv_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;
    int f_n;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-GetMaterialiv");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (glx-GetMaterialiv)", sequence_number);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 4, ENC_NA);
    *offsetp += 4;
    f_n = tvb_get_uint32(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_glx_GetMaterialiv_reply_n, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_GetMaterialiv_reply_datum, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 12, ENC_NA);
    *offsetp += 12;
    listOfInt32(tvb, offsetp, t, hf_x11_glx_GetMaterialiv_reply_data, hf_x11_glx_GetMaterialiv_reply_data_item, f_n, byte_order);
}

static void glxGetPixelMapfv(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_GetPixelMapfv_context_tag, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_GetPixelMapfv_map, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}
static void glxGetPixelMapfv_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;
    int f_n;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-GetPixelMapfv");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (glx-GetPixelMapfv)", sequence_number);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 4, ENC_NA);
    *offsetp += 4;
    f_n = tvb_get_uint32(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_glx_GetPixelMapfv_reply_n, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_GetPixelMapfv_reply_datum, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 12, ENC_NA);
    *offsetp += 12;
    listOfFloat(tvb, offsetp, t, hf_x11_glx_GetPixelMapfv_reply_data, hf_x11_glx_GetPixelMapfv_reply_data_item, f_n, byte_order);
}

static void glxGetPixelMapuiv(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_GetPixelMapuiv_context_tag, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_GetPixelMapuiv_map, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}
static void glxGetPixelMapuiv_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;
    int f_n;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-GetPixelMapuiv");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (glx-GetPixelMapuiv)", sequence_number);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 4, ENC_NA);
    *offsetp += 4;
    f_n = tvb_get_uint32(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_glx_GetPixelMapuiv_reply_n, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_GetPixelMapuiv_reply_datum, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 12, ENC_NA);
    *offsetp += 12;
    listOfCard32(tvb, offsetp, t, hf_x11_glx_GetPixelMapuiv_reply_data, hf_x11_glx_GetPixelMapuiv_reply_data_item, f_n, byte_order);
}

static void glxGetPixelMapusv(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_GetPixelMapusv_context_tag, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_GetPixelMapusv_map, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}
static void glxGetPixelMapusv_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;
    int f_n;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-GetPixelMapusv");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (glx-GetPixelMapusv)", sequence_number);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 4, ENC_NA);
    *offsetp += 4;
    f_n = tvb_get_uint32(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_glx_GetPixelMapusv_reply_n, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_GetPixelMapusv_reply_datum, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 16, ENC_NA);
    *offsetp += 16;
    listOfCard16(tvb, offsetp, t, hf_x11_glx_GetPixelMapusv_reply_data, hf_x11_glx_GetPixelMapusv_reply_data_item, f_n, byte_order);
}

static void glxGetPolygonStipple(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_GetPolygonStipple_context_tag, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_GetPolygonStipple_lsb_first, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
}
static void glxGetPolygonStipple_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;
    int f_length;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-GetPolygonStipple");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (glx-GetPolygonStipple)", sequence_number);
    *offsetp += 2;
    f_length = tvb_get_uint32(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 24, ENC_NA);
    *offsetp += 24;
    listOfByte(tvb, offsetp, t, hf_x11_glx_GetPolygonStipple_reply_data, (f_length * 4), byte_order);
}

static void glxGetString(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_GetString_context_tag, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_GetString_name, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}
static void glxGetString_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;
    int f_n;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-GetString");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (glx-GetString)", sequence_number);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 4, ENC_NA);
    *offsetp += 4;
    f_n = tvb_get_uint32(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_glx_GetString_reply_n, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 16, ENC_NA);
    *offsetp += 16;
    listOfByte(tvb, offsetp, t, hf_x11_glx_GetString_reply_string, f_n, byte_order);
}

static void glxGetTexEnvfv(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_GetTexEnvfv_context_tag, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_GetTexEnvfv_target, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_GetTexEnvfv_pname, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}
static void glxGetTexEnvfv_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;
    int f_n;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-GetTexEnvfv");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (glx-GetTexEnvfv)", sequence_number);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 4, ENC_NA);
    *offsetp += 4;
    f_n = tvb_get_uint32(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_glx_GetTexEnvfv_reply_n, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_GetTexEnvfv_reply_datum, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 12, ENC_NA);
    *offsetp += 12;
    listOfFloat(tvb, offsetp, t, hf_x11_glx_GetTexEnvfv_reply_data, hf_x11_glx_GetTexEnvfv_reply_data_item, f_n, byte_order);
}

static void glxGetTexEnviv(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_GetTexEnviv_context_tag, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_GetTexEnviv_target, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_GetTexEnviv_pname, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}
static void glxGetTexEnviv_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;
    int f_n;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-GetTexEnviv");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (glx-GetTexEnviv)", sequence_number);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 4, ENC_NA);
    *offsetp += 4;
    f_n = tvb_get_uint32(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_glx_GetTexEnviv_reply_n, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_GetTexEnviv_reply_datum, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 12, ENC_NA);
    *offsetp += 12;
    listOfInt32(tvb, offsetp, t, hf_x11_glx_GetTexEnviv_reply_data, hf_x11_glx_GetTexEnviv_reply_data_item, f_n, byte_order);
}

static void glxGetTexGendv(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_GetTexGendv_context_tag, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_GetTexGendv_coord, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_GetTexGendv_pname, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}
static void glxGetTexGendv_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;
    int f_n;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-GetTexGendv");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (glx-GetTexGendv)", sequence_number);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 4, ENC_NA);
    *offsetp += 4;
    f_n = tvb_get_uint32(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_glx_GetTexGendv_reply_n, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_GetTexGendv_reply_datum, tvb, *offsetp, 8, byte_order);
    *offsetp += 8;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 8, ENC_NA);
    *offsetp += 8;
    listOfDouble(tvb, offsetp, t, hf_x11_glx_GetTexGendv_reply_data, hf_x11_glx_GetTexGendv_reply_data_item, f_n, byte_order);
}

static void glxGetTexGenfv(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_GetTexGenfv_context_tag, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_GetTexGenfv_coord, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_GetTexGenfv_pname, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}
static void glxGetTexGenfv_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;
    int f_n;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-GetTexGenfv");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (glx-GetTexGenfv)", sequence_number);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 4, ENC_NA);
    *offsetp += 4;
    f_n = tvb_get_uint32(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_glx_GetTexGenfv_reply_n, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_GetTexGenfv_reply_datum, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 12, ENC_NA);
    *offsetp += 12;
    listOfFloat(tvb, offsetp, t, hf_x11_glx_GetTexGenfv_reply_data, hf_x11_glx_GetTexGenfv_reply_data_item, f_n, byte_order);
}

static void glxGetTexGeniv(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_GetTexGeniv_context_tag, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_GetTexGeniv_coord, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_GetTexGeniv_pname, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}
static void glxGetTexGeniv_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;
    int f_n;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-GetTexGeniv");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (glx-GetTexGeniv)", sequence_number);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 4, ENC_NA);
    *offsetp += 4;
    f_n = tvb_get_uint32(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_glx_GetTexGeniv_reply_n, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_GetTexGeniv_reply_datum, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 12, ENC_NA);
    *offsetp += 12;
    listOfInt32(tvb, offsetp, t, hf_x11_glx_GetTexGeniv_reply_data, hf_x11_glx_GetTexGeniv_reply_data_item, f_n, byte_order);
}

static void glxGetTexImage(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_GetTexImage_context_tag, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_GetTexImage_target, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_GetTexImage_level, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_GetTexImage_format, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_GetTexImage_type, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_GetTexImage_swap_bytes, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
}
static void glxGetTexImage_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;
    int f_length;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-GetTexImage");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (glx-GetTexImage)", sequence_number);
    *offsetp += 2;
    f_length = tvb_get_uint32(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 8, ENC_NA);
    *offsetp += 8;
    proto_tree_add_item(t, hf_x11_glx_GetTexImage_reply_width, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_GetTexImage_reply_height, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_GetTexImage_reply_depth, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 4, ENC_NA);
    *offsetp += 4;
    listOfByte(tvb, offsetp, t, hf_x11_glx_GetTexImage_reply_data, (f_length * 4), byte_order);
}

static void glxGetTexParameterfv(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_GetTexParameterfv_context_tag, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_GetTexParameterfv_target, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_GetTexParameterfv_pname, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}
static void glxGetTexParameterfv_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;
    int f_n;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-GetTexParameterfv");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (glx-GetTexParameterfv)", sequence_number);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 4, ENC_NA);
    *offsetp += 4;
    f_n = tvb_get_uint32(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_glx_GetTexParameterfv_reply_n, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_GetTexParameterfv_reply_datum, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 12, ENC_NA);
    *offsetp += 12;
    listOfFloat(tvb, offsetp, t, hf_x11_glx_GetTexParameterfv_reply_data, hf_x11_glx_GetTexParameterfv_reply_data_item, f_n, byte_order);
}

static void glxGetTexParameteriv(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_GetTexParameteriv_context_tag, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_GetTexParameteriv_target, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_GetTexParameteriv_pname, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}
static void glxGetTexParameteriv_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;
    int f_n;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-GetTexParameteriv");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (glx-GetTexParameteriv)", sequence_number);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 4, ENC_NA);
    *offsetp += 4;
    f_n = tvb_get_uint32(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_glx_GetTexParameteriv_reply_n, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_GetTexParameteriv_reply_datum, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 12, ENC_NA);
    *offsetp += 12;
    listOfInt32(tvb, offsetp, t, hf_x11_glx_GetTexParameteriv_reply_data, hf_x11_glx_GetTexParameteriv_reply_data_item, f_n, byte_order);
}

static void glxGetTexLevelParameterfv(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_GetTexLevelParameterfv_context_tag, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_GetTexLevelParameterfv_target, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_GetTexLevelParameterfv_level, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_GetTexLevelParameterfv_pname, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}
static void glxGetTexLevelParameterfv_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;
    int f_n;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-GetTexLevelParameterfv");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (glx-GetTexLevelParameterfv)", sequence_number);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 4, ENC_NA);
    *offsetp += 4;
    f_n = tvb_get_uint32(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_glx_GetTexLevelParameterfv_reply_n, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_GetTexLevelParameterfv_reply_datum, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 12, ENC_NA);
    *offsetp += 12;
    listOfFloat(tvb, offsetp, t, hf_x11_glx_GetTexLevelParameterfv_reply_data, hf_x11_glx_GetTexLevelParameterfv_reply_data_item, f_n, byte_order);
}

static void glxGetTexLevelParameteriv(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_GetTexLevelParameteriv_context_tag, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_GetTexLevelParameteriv_target, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_GetTexLevelParameteriv_level, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_GetTexLevelParameteriv_pname, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}
static void glxGetTexLevelParameteriv_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;
    int f_n;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-GetTexLevelParameteriv");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (glx-GetTexLevelParameteriv)", sequence_number);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 4, ENC_NA);
    *offsetp += 4;
    f_n = tvb_get_uint32(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_glx_GetTexLevelParameteriv_reply_n, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_GetTexLevelParameteriv_reply_datum, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 12, ENC_NA);
    *offsetp += 12;
    listOfInt32(tvb, offsetp, t, hf_x11_glx_GetTexLevelParameteriv_reply_data, hf_x11_glx_GetTexLevelParameteriv_reply_data_item, f_n, byte_order);
}

static void glxIsEnabled(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_IsEnabled_context_tag, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_IsEnabled_capability, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}
static void glxIsEnabled_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-IsEnabled");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (glx-IsEnabled)", sequence_number);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_IsEnabled_reply_ret_val, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}

static void glxIsList(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_IsList_context_tag, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_IsList_list, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}
static void glxIsList_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-IsList");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (glx-IsList)", sequence_number);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_IsList_reply_ret_val, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}

static void glxFlush(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_Flush_context_tag, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}

static void glxAreTexturesResident(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    int f_n;
    proto_tree_add_item(t, hf_x11_glx_AreTexturesResident_context_tag, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    f_n = tvb_get_uint32(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_glx_AreTexturesResident_n, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    listOfCard32(tvb, offsetp, t, hf_x11_glx_AreTexturesResident_textures, hf_x11_glx_AreTexturesResident_textures_item, f_n, byte_order);
    length -= f_n * 4;
}
static void glxAreTexturesResident_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;
    int f_length;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-AreTexturesResident");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (glx-AreTexturesResident)", sequence_number);
    *offsetp += 2;
    f_length = tvb_get_uint32(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_AreTexturesResident_reply_ret_val, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 20, ENC_NA);
    *offsetp += 20;
    listOfByte(tvb, offsetp, t, hf_x11_glx_AreTexturesResident_reply_data, (f_length * 4), byte_order);
}

static void glxDeleteTextures(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    int f_n;
    proto_tree_add_item(t, hf_x11_glx_DeleteTextures_context_tag, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    f_n = tvb_get_uint32(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_glx_DeleteTextures_n, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    listOfCard32(tvb, offsetp, t, hf_x11_glx_DeleteTextures_textures, hf_x11_glx_DeleteTextures_textures_item, f_n, byte_order);
    length -= f_n * 4;
}

static void glxGenTextures(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_GenTextures_context_tag, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_GenTextures_n, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}
static void glxGenTextures_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;
    int f_length;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-GenTextures");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (glx-GenTextures)", sequence_number);
    *offsetp += 2;
    f_length = tvb_get_uint32(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 24, ENC_NA);
    *offsetp += 24;
    listOfCard32(tvb, offsetp, t, hf_x11_glx_GenTextures_reply_data, hf_x11_glx_GenTextures_reply_data_item, f_length, byte_order);
}

static void glxIsTexture(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_IsTexture_context_tag, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_IsTexture_texture, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}
static void glxIsTexture_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-IsTexture");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (glx-IsTexture)", sequence_number);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_IsTexture_reply_ret_val, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}

static void glxGetColorTable(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_GetColorTable_context_tag, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_GetColorTable_target, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_GetColorTable_format, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_GetColorTable_type, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_GetColorTable_swap_bytes, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
}
static void glxGetColorTable_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;
    int f_length;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-GetColorTable");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (glx-GetColorTable)", sequence_number);
    *offsetp += 2;
    f_length = tvb_get_uint32(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 8, ENC_NA);
    *offsetp += 8;
    proto_tree_add_item(t, hf_x11_glx_GetColorTable_reply_width, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 12, ENC_NA);
    *offsetp += 12;
    listOfByte(tvb, offsetp, t, hf_x11_glx_GetColorTable_reply_data, (f_length * 4), byte_order);
}

static void glxGetColorTableParameterfv(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_GetColorTableParameterfv_context_tag, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_GetColorTableParameterfv_target, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_GetColorTableParameterfv_pname, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}
static void glxGetColorTableParameterfv_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;
    int f_n;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-GetColorTableParameterfv");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (glx-GetColorTableParameterfv)", sequence_number);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 4, ENC_NA);
    *offsetp += 4;
    f_n = tvb_get_uint32(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_glx_GetColorTableParameterfv_reply_n, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_GetColorTableParameterfv_reply_datum, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 12, ENC_NA);
    *offsetp += 12;
    listOfFloat(tvb, offsetp, t, hf_x11_glx_GetColorTableParameterfv_reply_data, hf_x11_glx_GetColorTableParameterfv_reply_data_item, f_n, byte_order);
}

static void glxGetColorTableParameteriv(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_GetColorTableParameteriv_context_tag, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_GetColorTableParameteriv_target, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_GetColorTableParameteriv_pname, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}
static void glxGetColorTableParameteriv_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;
    int f_n;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-GetColorTableParameteriv");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (glx-GetColorTableParameteriv)", sequence_number);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 4, ENC_NA);
    *offsetp += 4;
    f_n = tvb_get_uint32(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_glx_GetColorTableParameteriv_reply_n, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_GetColorTableParameteriv_reply_datum, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 12, ENC_NA);
    *offsetp += 12;
    listOfInt32(tvb, offsetp, t, hf_x11_glx_GetColorTableParameteriv_reply_data, hf_x11_glx_GetColorTableParameteriv_reply_data_item, f_n, byte_order);
}

static void glxGetConvolutionFilter(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_GetConvolutionFilter_context_tag, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_GetConvolutionFilter_target, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_GetConvolutionFilter_format, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_GetConvolutionFilter_type, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_GetConvolutionFilter_swap_bytes, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
}
static void glxGetConvolutionFilter_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;
    int f_length;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-GetConvolutionFilter");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (glx-GetConvolutionFilter)", sequence_number);
    *offsetp += 2;
    f_length = tvb_get_uint32(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 8, ENC_NA);
    *offsetp += 8;
    proto_tree_add_item(t, hf_x11_glx_GetConvolutionFilter_reply_width, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_GetConvolutionFilter_reply_height, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 8, ENC_NA);
    *offsetp += 8;
    listOfByte(tvb, offsetp, t, hf_x11_glx_GetConvolutionFilter_reply_data, (f_length * 4), byte_order);
}

static void glxGetConvolutionParameterfv(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_GetConvolutionParameterfv_context_tag, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_GetConvolutionParameterfv_target, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_GetConvolutionParameterfv_pname, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}
static void glxGetConvolutionParameterfv_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;
    int f_n;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-GetConvolutionParameterfv");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (glx-GetConvolutionParameterfv)", sequence_number);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 4, ENC_NA);
    *offsetp += 4;
    f_n = tvb_get_uint32(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_glx_GetConvolutionParameterfv_reply_n, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_GetConvolutionParameterfv_reply_datum, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 12, ENC_NA);
    *offsetp += 12;
    listOfFloat(tvb, offsetp, t, hf_x11_glx_GetConvolutionParameterfv_reply_data, hf_x11_glx_GetConvolutionParameterfv_reply_data_item, f_n, byte_order);
}

static void glxGetConvolutionParameteriv(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_GetConvolutionParameteriv_context_tag, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_GetConvolutionParameteriv_target, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_GetConvolutionParameteriv_pname, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}
static void glxGetConvolutionParameteriv_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;
    int f_n;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-GetConvolutionParameteriv");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (glx-GetConvolutionParameteriv)", sequence_number);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 4, ENC_NA);
    *offsetp += 4;
    f_n = tvb_get_uint32(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_glx_GetConvolutionParameteriv_reply_n, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_GetConvolutionParameteriv_reply_datum, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 12, ENC_NA);
    *offsetp += 12;
    listOfInt32(tvb, offsetp, t, hf_x11_glx_GetConvolutionParameteriv_reply_data, hf_x11_glx_GetConvolutionParameteriv_reply_data_item, f_n, byte_order);
}

static void glxGetSeparableFilter(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_GetSeparableFilter_context_tag, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_GetSeparableFilter_target, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_GetSeparableFilter_format, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_GetSeparableFilter_type, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_GetSeparableFilter_swap_bytes, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
}
static void glxGetSeparableFilter_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;
    int f_length;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-GetSeparableFilter");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (glx-GetSeparableFilter)", sequence_number);
    *offsetp += 2;
    f_length = tvb_get_uint32(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 8, ENC_NA);
    *offsetp += 8;
    proto_tree_add_item(t, hf_x11_glx_GetSeparableFilter_reply_row_w, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_GetSeparableFilter_reply_col_h, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 8, ENC_NA);
    *offsetp += 8;
    listOfByte(tvb, offsetp, t, hf_x11_glx_GetSeparableFilter_reply_rows_and_cols, (f_length * 4), byte_order);
}

static void glxGetHistogram(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_GetHistogram_context_tag, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_GetHistogram_target, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_GetHistogram_format, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_GetHistogram_type, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_GetHistogram_swap_bytes, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_glx_GetHistogram_reset, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
}
static void glxGetHistogram_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;
    int f_length;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-GetHistogram");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (glx-GetHistogram)", sequence_number);
    *offsetp += 2;
    f_length = tvb_get_uint32(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 8, ENC_NA);
    *offsetp += 8;
    proto_tree_add_item(t, hf_x11_glx_GetHistogram_reply_width, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 12, ENC_NA);
    *offsetp += 12;
    listOfByte(tvb, offsetp, t, hf_x11_glx_GetHistogram_reply_data, (f_length * 4), byte_order);
}

static void glxGetHistogramParameterfv(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_GetHistogramParameterfv_context_tag, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_GetHistogramParameterfv_target, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_GetHistogramParameterfv_pname, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}
static void glxGetHistogramParameterfv_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;
    int f_n;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-GetHistogramParameterfv");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (glx-GetHistogramParameterfv)", sequence_number);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 4, ENC_NA);
    *offsetp += 4;
    f_n = tvb_get_uint32(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_glx_GetHistogramParameterfv_reply_n, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_GetHistogramParameterfv_reply_datum, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 12, ENC_NA);
    *offsetp += 12;
    listOfFloat(tvb, offsetp, t, hf_x11_glx_GetHistogramParameterfv_reply_data, hf_x11_glx_GetHistogramParameterfv_reply_data_item, f_n, byte_order);
}

static void glxGetHistogramParameteriv(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_GetHistogramParameteriv_context_tag, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_GetHistogramParameteriv_target, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_GetHistogramParameteriv_pname, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}
static void glxGetHistogramParameteriv_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;
    int f_n;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-GetHistogramParameteriv");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (glx-GetHistogramParameteriv)", sequence_number);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 4, ENC_NA);
    *offsetp += 4;
    f_n = tvb_get_uint32(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_glx_GetHistogramParameteriv_reply_n, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_GetHistogramParameteriv_reply_datum, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 12, ENC_NA);
    *offsetp += 12;
    listOfInt32(tvb, offsetp, t, hf_x11_glx_GetHistogramParameteriv_reply_data, hf_x11_glx_GetHistogramParameteriv_reply_data_item, f_n, byte_order);
}

static void glxGetMinmax(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_GetMinmax_context_tag, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_GetMinmax_target, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_GetMinmax_format, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_GetMinmax_type, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_GetMinmax_swap_bytes, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_glx_GetMinmax_reset, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
}
static void glxGetMinmax_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;
    int f_length;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-GetMinmax");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (glx-GetMinmax)", sequence_number);
    *offsetp += 2;
    f_length = tvb_get_uint32(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 24, ENC_NA);
    *offsetp += 24;
    listOfByte(tvb, offsetp, t, hf_x11_glx_GetMinmax_reply_data, (f_length * 4), byte_order);
}

static void glxGetMinmaxParameterfv(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_GetMinmaxParameterfv_context_tag, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_GetMinmaxParameterfv_target, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_GetMinmaxParameterfv_pname, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}
static void glxGetMinmaxParameterfv_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;
    int f_n;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-GetMinmaxParameterfv");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (glx-GetMinmaxParameterfv)", sequence_number);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 4, ENC_NA);
    *offsetp += 4;
    f_n = tvb_get_uint32(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_glx_GetMinmaxParameterfv_reply_n, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_GetMinmaxParameterfv_reply_datum, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 12, ENC_NA);
    *offsetp += 12;
    listOfFloat(tvb, offsetp, t, hf_x11_glx_GetMinmaxParameterfv_reply_data, hf_x11_glx_GetMinmaxParameterfv_reply_data_item, f_n, byte_order);
}

static void glxGetMinmaxParameteriv(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_GetMinmaxParameteriv_context_tag, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_GetMinmaxParameteriv_target, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_GetMinmaxParameteriv_pname, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}
static void glxGetMinmaxParameteriv_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;
    int f_n;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-GetMinmaxParameteriv");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (glx-GetMinmaxParameteriv)", sequence_number);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 4, ENC_NA);
    *offsetp += 4;
    f_n = tvb_get_uint32(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_glx_GetMinmaxParameteriv_reply_n, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_GetMinmaxParameteriv_reply_datum, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 12, ENC_NA);
    *offsetp += 12;
    listOfInt32(tvb, offsetp, t, hf_x11_glx_GetMinmaxParameteriv_reply_data, hf_x11_glx_GetMinmaxParameteriv_reply_data_item, f_n, byte_order);
}

static void glxGetCompressedTexImageARB(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_GetCompressedTexImageARB_context_tag, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_GetCompressedTexImageARB_target, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_GetCompressedTexImageARB_level, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}
static void glxGetCompressedTexImageARB_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;
    int f_length;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-GetCompressedTexImageARB");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (glx-GetCompressedTexImageARB)", sequence_number);
    *offsetp += 2;
    f_length = tvb_get_uint32(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 8, ENC_NA);
    *offsetp += 8;
    proto_tree_add_item(t, hf_x11_glx_GetCompressedTexImageARB_reply_size, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 12, ENC_NA);
    *offsetp += 12;
    listOfByte(tvb, offsetp, t, hf_x11_glx_GetCompressedTexImageARB_reply_data, (f_length * 4), byte_order);
}

static void glxDeleteQueriesARB(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    int f_n;
    proto_tree_add_item(t, hf_x11_glx_DeleteQueriesARB_context_tag, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    f_n = tvb_get_uint32(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_glx_DeleteQueriesARB_n, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    listOfCard32(tvb, offsetp, t, hf_x11_glx_DeleteQueriesARB_ids, hf_x11_glx_DeleteQueriesARB_ids_item, f_n, byte_order);
    length -= f_n * 4;
}

static void glxGenQueriesARB(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_GenQueriesARB_context_tag, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_GenQueriesARB_n, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}
static void glxGenQueriesARB_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;
    int f_length;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-GenQueriesARB");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (glx-GenQueriesARB)", sequence_number);
    *offsetp += 2;
    f_length = tvb_get_uint32(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 24, ENC_NA);
    *offsetp += 24;
    listOfCard32(tvb, offsetp, t, hf_x11_glx_GenQueriesARB_reply_data, hf_x11_glx_GenQueriesARB_reply_data_item, f_length, byte_order);
}

static void glxIsQueryARB(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_IsQueryARB_context_tag, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_IsQueryARB_id, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}
static void glxIsQueryARB_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-IsQueryARB");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (glx-IsQueryARB)", sequence_number);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_IsQueryARB_reply_ret_val, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}

static void glxGetQueryivARB(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_GetQueryivARB_context_tag, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_GetQueryivARB_target, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_GetQueryivARB_pname, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}
static void glxGetQueryivARB_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;
    int f_n;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-GetQueryivARB");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (glx-GetQueryivARB)", sequence_number);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 4, ENC_NA);
    *offsetp += 4;
    f_n = tvb_get_uint32(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_glx_GetQueryivARB_reply_n, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_GetQueryivARB_reply_datum, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 12, ENC_NA);
    *offsetp += 12;
    listOfInt32(tvb, offsetp, t, hf_x11_glx_GetQueryivARB_reply_data, hf_x11_glx_GetQueryivARB_reply_data_item, f_n, byte_order);
}

static void glxGetQueryObjectivARB(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_GetQueryObjectivARB_context_tag, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_GetQueryObjectivARB_id, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_GetQueryObjectivARB_pname, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}
static void glxGetQueryObjectivARB_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;
    int f_n;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-GetQueryObjectivARB");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (glx-GetQueryObjectivARB)", sequence_number);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 4, ENC_NA);
    *offsetp += 4;
    f_n = tvb_get_uint32(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_glx_GetQueryObjectivARB_reply_n, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_GetQueryObjectivARB_reply_datum, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 12, ENC_NA);
    *offsetp += 12;
    listOfInt32(tvb, offsetp, t, hf_x11_glx_GetQueryObjectivARB_reply_data, hf_x11_glx_GetQueryObjectivARB_reply_data_item, f_n, byte_order);
}

static void glxGetQueryObjectuivARB(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_glx_GetQueryObjectuivARB_context_tag, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_GetQueryObjectuivARB_id, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_GetQueryObjectuivARB_pname, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}
static void glxGetQueryObjectuivARB_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;
    int f_n;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-GetQueryObjectuivARB");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (glx-GetQueryObjectuivARB)", sequence_number);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 4, ENC_NA);
    *offsetp += 4;
    f_n = tvb_get_uint32(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_glx_GetQueryObjectuivARB_reply_n, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_glx_GetQueryObjectuivARB_reply_datum, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 12, ENC_NA);
    *offsetp += 12;
    listOfCard32(tvb, offsetp, t, hf_x11_glx_GetQueryObjectuivARB_reply_data, hf_x11_glx_GetQueryObjectuivARB_reply_data_item, f_n, byte_order);
}
static const value_string glx_extension_minor[] = {
    { 1, "Render" },
    { 2, "RenderLarge" },
    { 3, "CreateContext" },
    { 4, "DestroyContext" },
    { 5, "MakeCurrent" },
    { 6, "IsDirect" },
    { 7, "QueryVersion" },
    { 8, "WaitGL" },
    { 9, "WaitX" },
    { 10, "CopyContext" },
    { 11, "SwapBuffers" },
    { 12, "UseXFont" },
    { 13, "CreateGLXPixmap" },
    { 14, "GetVisualConfigs" },
    { 15, "DestroyGLXPixmap" },
    { 16, "VendorPrivate" },
    { 17, "VendorPrivateWithReply" },
    { 18, "QueryExtensionsString" },
    { 19, "QueryServerString" },
    { 20, "ClientInfo" },
    { 21, "GetFBConfigs" },
    { 22, "CreatePixmap" },
    { 23, "DestroyPixmap" },
    { 24, "CreateNewContext" },
    { 25, "QueryContext" },
    { 26, "MakeContextCurrent" },
    { 27, "CreatePbuffer" },
    { 28, "DestroyPbuffer" },
    { 29, "GetDrawableAttributes" },
    { 30, "ChangeDrawableAttributes" },
    { 31, "CreateWindow" },
    { 32, "DeleteWindow" },
    { 33, "SetClientInfoARB" },
    { 34, "CreateContextAttribsARB" },
    { 35, "SetClientInfo2ARB" },
    { 101, "NewList" },
    { 102, "EndList" },
    { 103, "DeleteLists" },
    { 104, "GenLists" },
    { 105, "FeedbackBuffer" },
    { 106, "SelectBuffer" },
    { 107, "RenderMode" },
    { 108, "Finish" },
    { 109, "PixelStoref" },
    { 110, "PixelStorei" },
    { 111, "ReadPixels" },
    { 112, "GetBooleanv" },
    { 113, "GetClipPlane" },
    { 114, "GetDoublev" },
    { 115, "GetError" },
    { 116, "GetFloatv" },
    { 117, "GetIntegerv" },
    { 118, "GetLightfv" },
    { 119, "GetLightiv" },
    { 120, "GetMapdv" },
    { 121, "GetMapfv" },
    { 122, "GetMapiv" },
    { 123, "GetMaterialfv" },
    { 124, "GetMaterialiv" },
    { 125, "GetPixelMapfv" },
    { 126, "GetPixelMapuiv" },
    { 127, "GetPixelMapusv" },
    { 128, "GetPolygonStipple" },
    { 129, "GetString" },
    { 130, "GetTexEnvfv" },
    { 131, "GetTexEnviv" },
    { 132, "GetTexGendv" },
    { 133, "GetTexGenfv" },
    { 134, "GetTexGeniv" },
    { 135, "GetTexImage" },
    { 136, "GetTexParameterfv" },
    { 137, "GetTexParameteriv" },
    { 138, "GetTexLevelParameterfv" },
    { 139, "GetTexLevelParameteriv" },
    { 140, "IsEnabled" },
    { 141, "IsList" },
    { 142, "Flush" },
    { 143, "AreTexturesResident" },
    { 144, "DeleteTextures" },
    { 145, "GenTextures" },
    { 146, "IsTexture" },
    { 147, "GetColorTable" },
    { 148, "GetColorTableParameterfv" },
    { 149, "GetColorTableParameteriv" },
    { 150, "GetConvolutionFilter" },
    { 151, "GetConvolutionParameterfv" },
    { 152, "GetConvolutionParameteriv" },
    { 153, "GetSeparableFilter" },
    { 154, "GetHistogram" },
    { 155, "GetHistogramParameterfv" },
    { 156, "GetHistogramParameteriv" },
    { 157, "GetMinmax" },
    { 158, "GetMinmaxParameterfv" },
    { 159, "GetMinmaxParameteriv" },
    { 160, "GetCompressedTexImageARB" },
    { 161, "DeleteQueriesARB" },
    { 162, "GenQueriesARB" },
    { 163, "IsQueryARB" },
    { 164, "GetQueryivARB" },
    { 165, "GetQueryObjectivARB" },
    { 166, "GetQueryObjectuivARB" },
    { 0, NULL }
};
static const x11_event_info glx_events[] = {
    { "glx-BufferSwapComplete", glxBufferSwapComplete },
    { NULL, NULL }
};
static const x11_reply_info glx_replies[] = {
    { 5, glxMakeCurrent_Reply },
    { 6, glxIsDirect_Reply },
    { 7, glxQueryVersion_Reply },
    { 14, glxGetVisualConfigs_Reply },
    { 17, glxVendorPrivateWithReply_Reply },
    { 18, glxQueryExtensionsString_Reply },
    { 19, glxQueryServerString_Reply },
    { 21, glxGetFBConfigs_Reply },
    { 25, glxQueryContext_Reply },
    { 26, glxMakeContextCurrent_Reply },
    { 29, glxGetDrawableAttributes_Reply },
    { 104, glxGenLists_Reply },
    { 107, glxRenderMode_Reply },
    { 108, glxFinish_Reply },
    { 111, glxReadPixels_Reply },
    { 112, glxGetBooleanv_Reply },
    { 113, glxGetClipPlane_Reply },
    { 114, glxGetDoublev_Reply },
    { 115, glxGetError_Reply },
    { 116, glxGetFloatv_Reply },
    { 117, glxGetIntegerv_Reply },
    { 118, glxGetLightfv_Reply },
    { 119, glxGetLightiv_Reply },
    { 120, glxGetMapdv_Reply },
    { 121, glxGetMapfv_Reply },
    { 122, glxGetMapiv_Reply },
    { 123, glxGetMaterialfv_Reply },
    { 124, glxGetMaterialiv_Reply },
    { 125, glxGetPixelMapfv_Reply },
    { 126, glxGetPixelMapuiv_Reply },
    { 127, glxGetPixelMapusv_Reply },
    { 128, glxGetPolygonStipple_Reply },
    { 129, glxGetString_Reply },
    { 130, glxGetTexEnvfv_Reply },
    { 131, glxGetTexEnviv_Reply },
    { 132, glxGetTexGendv_Reply },
    { 133, glxGetTexGenfv_Reply },
    { 134, glxGetTexGeniv_Reply },
    { 135, glxGetTexImage_Reply },
    { 136, glxGetTexParameterfv_Reply },
    { 137, glxGetTexParameteriv_Reply },
    { 138, glxGetTexLevelParameterfv_Reply },
    { 139, glxGetTexLevelParameteriv_Reply },
    { 140, glxIsEnabled_Reply },
    { 141, glxIsList_Reply },
    { 143, glxAreTexturesResident_Reply },
    { 145, glxGenTextures_Reply },
    { 146, glxIsTexture_Reply },
    { 147, glxGetColorTable_Reply },
    { 148, glxGetColorTableParameterfv_Reply },
    { 149, glxGetColorTableParameteriv_Reply },
    { 150, glxGetConvolutionFilter_Reply },
    { 151, glxGetConvolutionParameterfv_Reply },
    { 152, glxGetConvolutionParameteriv_Reply },
    { 153, glxGetSeparableFilter_Reply },
    { 154, glxGetHistogram_Reply },
    { 155, glxGetHistogramParameterfv_Reply },
    { 156, glxGetHistogramParameteriv_Reply },
    { 157, glxGetMinmax_Reply },
    { 158, glxGetMinmaxParameterfv_Reply },
    { 159, glxGetMinmaxParameteriv_Reply },
    { 160, glxGetCompressedTexImageARB_Reply },
    { 162, glxGenQueriesARB_Reply },
    { 163, glxIsQueryARB_Reply },
    { 164, glxGetQueryivARB_Reply },
    { 165, glxGetQueryObjectivARB_Reply },
    { 166, glxGetQueryObjectuivARB_Reply },
    { 0, NULL }
};

static void dispatch_glx(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int minor, length;
    minor = CARD8(glx_extension_minor);
    length = REQUEST_LENGTH();

    col_append_fstr(pinfo->cinfo, COL_INFO, "-%s",
                          val_to_str(minor, glx_extension_minor,
                                     "<Unknown opcode %d>"));
    switch (minor) {
    case 1:
        glxRender(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 2:
        glxRenderLarge(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 3:
        glxCreateContext(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 4:
        glxDestroyContext(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 5:
        glxMakeCurrent(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 6:
        glxIsDirect(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 7:
        glxQueryVersion(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 8:
        glxWaitGL(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 9:
        glxWaitX(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 10:
        glxCopyContext(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 11:
        glxSwapBuffers(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 12:
        glxUseXFont(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 13:
        glxCreateGLXPixmap(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 14:
        glxGetVisualConfigs(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 15:
        glxDestroyGLXPixmap(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 16:
        glxVendorPrivate(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 17:
        glxVendorPrivateWithReply(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 18:
        glxQueryExtensionsString(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 19:
        glxQueryServerString(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 20:
        glxClientInfo(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 21:
        glxGetFBConfigs(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 22:
        glxCreatePixmap(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 23:
        glxDestroyPixmap(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 24:
        glxCreateNewContext(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 25:
        glxQueryContext(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 26:
        glxMakeContextCurrent(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 27:
        glxCreatePbuffer(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 28:
        glxDestroyPbuffer(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 29:
        glxGetDrawableAttributes(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 30:
        glxChangeDrawableAttributes(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 31:
        glxCreateWindow(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 32:
        glxDeleteWindow(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 33:
        glxSetClientInfoARB(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 34:
        glxCreateContextAttribsARB(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 35:
        glxSetClientInfo2ARB(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 101:
        glxNewList(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 102:
        glxEndList(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 103:
        glxDeleteLists(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 104:
        glxGenLists(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 105:
        glxFeedbackBuffer(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 106:
        glxSelectBuffer(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 107:
        glxRenderMode(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 108:
        glxFinish(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 109:
        glxPixelStoref(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 110:
        glxPixelStorei(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 111:
        glxReadPixels(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 112:
        glxGetBooleanv(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 113:
        glxGetClipPlane(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 114:
        glxGetDoublev(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 115:
        glxGetError(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 116:
        glxGetFloatv(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 117:
        glxGetIntegerv(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 118:
        glxGetLightfv(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 119:
        glxGetLightiv(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 120:
        glxGetMapdv(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 121:
        glxGetMapfv(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 122:
        glxGetMapiv(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 123:
        glxGetMaterialfv(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 124:
        glxGetMaterialiv(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 125:
        glxGetPixelMapfv(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 126:
        glxGetPixelMapuiv(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 127:
        glxGetPixelMapusv(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 128:
        glxGetPolygonStipple(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 129:
        glxGetString(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 130:
        glxGetTexEnvfv(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 131:
        glxGetTexEnviv(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 132:
        glxGetTexGendv(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 133:
        glxGetTexGenfv(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 134:
        glxGetTexGeniv(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 135:
        glxGetTexImage(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 136:
        glxGetTexParameterfv(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 137:
        glxGetTexParameteriv(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 138:
        glxGetTexLevelParameterfv(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 139:
        glxGetTexLevelParameteriv(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 140:
        glxIsEnabled(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 141:
        glxIsList(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 142:
        glxFlush(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 143:
        glxAreTexturesResident(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 144:
        glxDeleteTextures(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 145:
        glxGenTextures(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 146:
        glxIsTexture(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 147:
        glxGetColorTable(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 148:
        glxGetColorTableParameterfv(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 149:
        glxGetColorTableParameteriv(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 150:
        glxGetConvolutionFilter(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 151:
        glxGetConvolutionParameterfv(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 152:
        glxGetConvolutionParameteriv(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 153:
        glxGetSeparableFilter(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 154:
        glxGetHistogram(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 155:
        glxGetHistogramParameterfv(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 156:
        glxGetHistogramParameteriv(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 157:
        glxGetMinmax(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 158:
        glxGetMinmaxParameterfv(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 159:
        glxGetMinmaxParameteriv(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 160:
        glxGetCompressedTexImageARB(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 161:
        glxDeleteQueriesARB(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 162:
        glxGenQueriesARB(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 163:
        glxIsQueryARB(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 164:
        glxGetQueryivARB(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 165:
        glxGetQueryObjectivARB(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 166:
        glxGetQueryObjectuivARB(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    /* No need for a default case here, since Unknown is printed above,
       and UNDECODED() is taken care of by dissect_x11_request */
    }
}

static void register_glx(void)
{
    set_handler("GLX", dispatch_glx, glx_errors, glx_events, NULL, glx_replies);
}

static void struct_randr_ScreenSize(tvbuff_t *tvb, int *offsetp, proto_tree *root, unsigned byte_order _U_, int count)
{
    int i;
    for (i = 0; i < count; i++) {
        proto_item *item;
        proto_tree *t;

        item = proto_tree_add_item(root, hf_x11_struct_randr_ScreenSize, tvb, *offsetp, 8, ENC_NA);
        t = proto_item_add_subtree(item, ett_x11_rectangle);
        proto_tree_add_item(t, hf_x11_struct_randr_ScreenSize_width, tvb, *offsetp, 2, byte_order);
        *offsetp += 2;
        proto_tree_add_item(t, hf_x11_struct_randr_ScreenSize_height, tvb, *offsetp, 2, byte_order);
        *offsetp += 2;
        proto_tree_add_item(t, hf_x11_struct_randr_ScreenSize_mwidth, tvb, *offsetp, 2, byte_order);
        *offsetp += 2;
        proto_tree_add_item(t, hf_x11_struct_randr_ScreenSize_mheight, tvb, *offsetp, 2, byte_order);
        *offsetp += 2;
    }
}

static int struct_size_randr_RefreshRates(tvbuff_t *tvb _U_, int *offsetp _U_, unsigned byte_order _U_)
{
    int size = 0;
    int f_nRates;
    f_nRates = tvb_get_uint16(tvb, *offsetp + size + 0, byte_order);
    size += f_nRates * 2;
    return size + 2;
}

static void struct_randr_RefreshRates(tvbuff_t *tvb, int *offsetp, proto_tree *root, unsigned byte_order _U_, int count)
{
    int i;
    for (i = 0; i < count; i++) {
        proto_item *item;
        proto_tree *t;
        int f_nRates;

        item = proto_tree_add_item(root, hf_x11_struct_randr_RefreshRates, tvb, *offsetp, struct_size_randr_RefreshRates(tvb, offsetp, byte_order), ENC_NA);
        t = proto_item_add_subtree(item, ett_x11_rectangle);
        f_nRates = tvb_get_uint16(tvb, *offsetp, byte_order);
        proto_tree_add_item(t, hf_x11_struct_randr_RefreshRates_nRates, tvb, *offsetp, 2, byte_order);
        *offsetp += 2;
        listOfCard16(tvb, offsetp, t, hf_x11_struct_randr_RefreshRates_rates, hf_x11_struct_randr_RefreshRates_rates_item, f_nRates, byte_order);
    }
}

static void struct_randr_ModeInfo(tvbuff_t *tvb, int *offsetp, proto_tree *root, unsigned byte_order _U_, int count)
{
    int i;
    for (i = 0; i < count; i++) {
        proto_item *item;
        proto_tree *t;

        item = proto_tree_add_item(root, hf_x11_struct_randr_ModeInfo, tvb, *offsetp, 32, ENC_NA);
        t = proto_item_add_subtree(item, ett_x11_rectangle);
        proto_tree_add_item(t, hf_x11_struct_randr_ModeInfo_id, tvb, *offsetp, 4, byte_order);
        *offsetp += 4;
        proto_tree_add_item(t, hf_x11_struct_randr_ModeInfo_width, tvb, *offsetp, 2, byte_order);
        *offsetp += 2;
        proto_tree_add_item(t, hf_x11_struct_randr_ModeInfo_height, tvb, *offsetp, 2, byte_order);
        *offsetp += 2;
        proto_tree_add_item(t, hf_x11_struct_randr_ModeInfo_dot_clock, tvb, *offsetp, 4, byte_order);
        *offsetp += 4;
        proto_tree_add_item(t, hf_x11_struct_randr_ModeInfo_hsync_start, tvb, *offsetp, 2, byte_order);
        *offsetp += 2;
        proto_tree_add_item(t, hf_x11_struct_randr_ModeInfo_hsync_end, tvb, *offsetp, 2, byte_order);
        *offsetp += 2;
        proto_tree_add_item(t, hf_x11_struct_randr_ModeInfo_htotal, tvb, *offsetp, 2, byte_order);
        *offsetp += 2;
        proto_tree_add_item(t, hf_x11_struct_randr_ModeInfo_hskew, tvb, *offsetp, 2, byte_order);
        *offsetp += 2;
        proto_tree_add_item(t, hf_x11_struct_randr_ModeInfo_vsync_start, tvb, *offsetp, 2, byte_order);
        *offsetp += 2;
        proto_tree_add_item(t, hf_x11_struct_randr_ModeInfo_vsync_end, tvb, *offsetp, 2, byte_order);
        *offsetp += 2;
        proto_tree_add_item(t, hf_x11_struct_randr_ModeInfo_vtotal, tvb, *offsetp, 2, byte_order);
        *offsetp += 2;
        proto_tree_add_item(t, hf_x11_struct_randr_ModeInfo_name_len, tvb, *offsetp, 2, byte_order);
        *offsetp += 2;
        {
            static int* const mode_flags_bits [] = {
                &hf_x11_struct_randr_ModeInfo_mode_flags_mask_HsyncPositive,
                &hf_x11_struct_randr_ModeInfo_mode_flags_mask_HsyncNegative,
                &hf_x11_struct_randr_ModeInfo_mode_flags_mask_VsyncPositive,
                &hf_x11_struct_randr_ModeInfo_mode_flags_mask_VsyncNegative,
                &hf_x11_struct_randr_ModeInfo_mode_flags_mask_Interlace,
                &hf_x11_struct_randr_ModeInfo_mode_flags_mask_DoubleScan,
                &hf_x11_struct_randr_ModeInfo_mode_flags_mask_Csync,
                &hf_x11_struct_randr_ModeInfo_mode_flags_mask_CsyncPositive,
                &hf_x11_struct_randr_ModeInfo_mode_flags_mask_CsyncNegative,
                &hf_x11_struct_randr_ModeInfo_mode_flags_mask_HskewPresent,
                &hf_x11_struct_randr_ModeInfo_mode_flags_mask_Bcast,
                &hf_x11_struct_randr_ModeInfo_mode_flags_mask_PixelMultiplex,
                &hf_x11_struct_randr_ModeInfo_mode_flags_mask_DoubleClock,
                &hf_x11_struct_randr_ModeInfo_mode_flags_mask_HalveClock,
                NULL
            };
            proto_tree_add_bitmask(t,  tvb, *offsetp, hf_x11_struct_randr_ModeInfo_mode_flags, ett_x11_rectangle, mode_flags_bits, byte_order);
        }
        *offsetp += 4;
    }
}

static void struct_randr_CrtcChange(tvbuff_t *tvb, int *offsetp, proto_tree *root, unsigned byte_order _U_, int count)
{
    int i;
    for (i = 0; i < count; i++) {
        proto_item *item;
        proto_tree *t;

        item = proto_tree_add_item(root, hf_x11_struct_randr_CrtcChange, tvb, *offsetp, 28, ENC_NA);
        t = proto_item_add_subtree(item, ett_x11_rectangle);
        proto_tree_add_item(t, hf_x11_struct_randr_CrtcChange_timestamp, tvb, *offsetp, 4, byte_order);
        *offsetp += 4;
        proto_tree_add_item(t, hf_x11_struct_randr_CrtcChange_window, tvb, *offsetp, 4, byte_order);
        *offsetp += 4;
        proto_tree_add_item(t, hf_x11_struct_randr_CrtcChange_crtc, tvb, *offsetp, 4, byte_order);
        *offsetp += 4;
        proto_tree_add_item(t, hf_x11_struct_randr_CrtcChange_mode, tvb, *offsetp, 4, byte_order);
        *offsetp += 4;
        {
            static int* const rotation_bits [] = {
                &hf_x11_struct_randr_CrtcChange_rotation_mask_Rotate_0,
                &hf_x11_struct_randr_CrtcChange_rotation_mask_Rotate_90,
                &hf_x11_struct_randr_CrtcChange_rotation_mask_Rotate_180,
                &hf_x11_struct_randr_CrtcChange_rotation_mask_Rotate_270,
                &hf_x11_struct_randr_CrtcChange_rotation_mask_Reflect_X,
                &hf_x11_struct_randr_CrtcChange_rotation_mask_Reflect_Y,
                NULL
            };
            proto_tree_add_bitmask(t,  tvb, *offsetp, hf_x11_struct_randr_CrtcChange_rotation, ett_x11_rectangle, rotation_bits, byte_order);
        }
        *offsetp += 2;
        proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 2, ENC_NA);
        *offsetp += 2;
        proto_tree_add_item(t, hf_x11_struct_randr_CrtcChange_x, tvb, *offsetp, 2, byte_order);
        *offsetp += 2;
        proto_tree_add_item(t, hf_x11_struct_randr_CrtcChange_y, tvb, *offsetp, 2, byte_order);
        *offsetp += 2;
        proto_tree_add_item(t, hf_x11_struct_randr_CrtcChange_width, tvb, *offsetp, 2, byte_order);
        *offsetp += 2;
        proto_tree_add_item(t, hf_x11_struct_randr_CrtcChange_height, tvb, *offsetp, 2, byte_order);
        *offsetp += 2;
    }
}

static void struct_randr_OutputChange(tvbuff_t *tvb, int *offsetp, proto_tree *root, unsigned byte_order _U_, int count)
{
    int i;
    for (i = 0; i < count; i++) {
        proto_item *item;
        proto_tree *t;

        item = proto_tree_add_item(root, hf_x11_struct_randr_OutputChange, tvb, *offsetp, 28, ENC_NA);
        t = proto_item_add_subtree(item, ett_x11_rectangle);
        proto_tree_add_item(t, hf_x11_struct_randr_OutputChange_timestamp, tvb, *offsetp, 4, byte_order);
        *offsetp += 4;
        proto_tree_add_item(t, hf_x11_struct_randr_OutputChange_config_timestamp, tvb, *offsetp, 4, byte_order);
        *offsetp += 4;
        proto_tree_add_item(t, hf_x11_struct_randr_OutputChange_window, tvb, *offsetp, 4, byte_order);
        *offsetp += 4;
        proto_tree_add_item(t, hf_x11_struct_randr_OutputChange_output, tvb, *offsetp, 4, byte_order);
        *offsetp += 4;
        proto_tree_add_item(t, hf_x11_struct_randr_OutputChange_crtc, tvb, *offsetp, 4, byte_order);
        *offsetp += 4;
        proto_tree_add_item(t, hf_x11_struct_randr_OutputChange_mode, tvb, *offsetp, 4, byte_order);
        *offsetp += 4;
        {
            static int* const rotation_bits [] = {
                &hf_x11_struct_randr_OutputChange_rotation_mask_Rotate_0,
                &hf_x11_struct_randr_OutputChange_rotation_mask_Rotate_90,
                &hf_x11_struct_randr_OutputChange_rotation_mask_Rotate_180,
                &hf_x11_struct_randr_OutputChange_rotation_mask_Rotate_270,
                &hf_x11_struct_randr_OutputChange_rotation_mask_Reflect_X,
                &hf_x11_struct_randr_OutputChange_rotation_mask_Reflect_Y,
                NULL
            };
            proto_tree_add_bitmask(t,  tvb, *offsetp, hf_x11_struct_randr_OutputChange_rotation, ett_x11_rectangle, rotation_bits, byte_order);
        }
        *offsetp += 2;
        field8(tvb, offsetp, t, hf_x11_struct_randr_OutputChange_connection, byte_order);
        field8(tvb, offsetp, t, hf_x11_struct_randr_OutputChange_subpixel_order, byte_order);
    }
}

static void struct_randr_OutputProperty(tvbuff_t *tvb, int *offsetp, proto_tree *root, unsigned byte_order _U_, int count)
{
    int i;
    for (i = 0; i < count; i++) {
        proto_item *item;
        proto_tree *t;

        item = proto_tree_add_item(root, hf_x11_struct_randr_OutputProperty, tvb, *offsetp, 28, ENC_NA);
        t = proto_item_add_subtree(item, ett_x11_rectangle);
        proto_tree_add_item(t, hf_x11_struct_randr_OutputProperty_window, tvb, *offsetp, 4, byte_order);
        *offsetp += 4;
        proto_tree_add_item(t, hf_x11_struct_randr_OutputProperty_output, tvb, *offsetp, 4, byte_order);
        *offsetp += 4;
        proto_tree_add_item(t, hf_x11_struct_randr_OutputProperty_atom, tvb, *offsetp, 4, byte_order);
        *offsetp += 4;
        proto_tree_add_item(t, hf_x11_struct_randr_OutputProperty_timestamp, tvb, *offsetp, 4, byte_order);
        *offsetp += 4;
        field8(tvb, offsetp, t, hf_x11_struct_randr_OutputProperty_status, byte_order);
        proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 11, ENC_NA);
        *offsetp += 11;
    }
}

static void struct_randr_ProviderChange(tvbuff_t *tvb, int *offsetp, proto_tree *root, unsigned byte_order _U_, int count)
{
    int i;
    for (i = 0; i < count; i++) {
        proto_item *item;
        proto_tree *t;

        item = proto_tree_add_item(root, hf_x11_struct_randr_ProviderChange, tvb, *offsetp, 28, ENC_NA);
        t = proto_item_add_subtree(item, ett_x11_rectangle);
        proto_tree_add_item(t, hf_x11_struct_randr_ProviderChange_timestamp, tvb, *offsetp, 4, byte_order);
        *offsetp += 4;
        proto_tree_add_item(t, hf_x11_struct_randr_ProviderChange_window, tvb, *offsetp, 4, byte_order);
        *offsetp += 4;
        proto_tree_add_item(t, hf_x11_struct_randr_ProviderChange_provider, tvb, *offsetp, 4, byte_order);
        *offsetp += 4;
        proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 16, ENC_NA);
        *offsetp += 16;
    }
}

static void struct_randr_ProviderProperty(tvbuff_t *tvb, int *offsetp, proto_tree *root, unsigned byte_order _U_, int count)
{
    int i;
    for (i = 0; i < count; i++) {
        proto_item *item;
        proto_tree *t;

        item = proto_tree_add_item(root, hf_x11_struct_randr_ProviderProperty, tvb, *offsetp, 28, ENC_NA);
        t = proto_item_add_subtree(item, ett_x11_rectangle);
        proto_tree_add_item(t, hf_x11_struct_randr_ProviderProperty_window, tvb, *offsetp, 4, byte_order);
        *offsetp += 4;
        proto_tree_add_item(t, hf_x11_struct_randr_ProviderProperty_provider, tvb, *offsetp, 4, byte_order);
        *offsetp += 4;
        proto_tree_add_item(t, hf_x11_struct_randr_ProviderProperty_atom, tvb, *offsetp, 4, byte_order);
        *offsetp += 4;
        proto_tree_add_item(t, hf_x11_struct_randr_ProviderProperty_timestamp, tvb, *offsetp, 4, byte_order);
        *offsetp += 4;
        proto_tree_add_item(t, hf_x11_struct_randr_ProviderProperty_state, tvb, *offsetp, 1, byte_order);
        *offsetp += 1;
        proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 11, ENC_NA);
        *offsetp += 11;
    }
}

static void struct_randr_ResourceChange(tvbuff_t *tvb, int *offsetp, proto_tree *root, unsigned byte_order _U_, int count)
{
    int i;
    for (i = 0; i < count; i++) {
        proto_item *item;
        proto_tree *t;

        item = proto_tree_add_item(root, hf_x11_struct_randr_ResourceChange, tvb, *offsetp, 28, ENC_NA);
        t = proto_item_add_subtree(item, ett_x11_rectangle);
        proto_tree_add_item(t, hf_x11_struct_randr_ResourceChange_timestamp, tvb, *offsetp, 4, byte_order);
        *offsetp += 4;
        proto_tree_add_item(t, hf_x11_struct_randr_ResourceChange_window, tvb, *offsetp, 4, byte_order);
        *offsetp += 4;
        proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 20, ENC_NA);
        *offsetp += 20;
    }
}

static int struct_size_randr_MonitorInfo(tvbuff_t *tvb _U_, int *offsetp _U_, unsigned byte_order _U_)
{
    int size = 0;
    int f_nOutput;
    f_nOutput = tvb_get_uint16(tvb, *offsetp + size + 6, byte_order);
    size += f_nOutput * 4;
    return size + 24;
}

static void struct_randr_MonitorInfo(tvbuff_t *tvb, int *offsetp, proto_tree *root, unsigned byte_order _U_, int count)
{
    int i;
    for (i = 0; i < count; i++) {
        proto_item *item;
        proto_tree *t;
        int f_nOutput;

        item = proto_tree_add_item(root, hf_x11_struct_randr_MonitorInfo, tvb, *offsetp, struct_size_randr_MonitorInfo(tvb, offsetp, byte_order), ENC_NA);
        t = proto_item_add_subtree(item, ett_x11_rectangle);
        proto_tree_add_item(t, hf_x11_struct_randr_MonitorInfo_name, tvb, *offsetp, 4, byte_order);
        *offsetp += 4;
        proto_tree_add_item(t, hf_x11_struct_randr_MonitorInfo_primary, tvb, *offsetp, 1, byte_order);
        *offsetp += 1;
        proto_tree_add_item(t, hf_x11_struct_randr_MonitorInfo_automatic, tvb, *offsetp, 1, byte_order);
        *offsetp += 1;
        f_nOutput = tvb_get_uint16(tvb, *offsetp, byte_order);
        proto_tree_add_item(t, hf_x11_struct_randr_MonitorInfo_nOutput, tvb, *offsetp, 2, byte_order);
        *offsetp += 2;
        proto_tree_add_item(t, hf_x11_struct_randr_MonitorInfo_x, tvb, *offsetp, 2, byte_order);
        *offsetp += 2;
        proto_tree_add_item(t, hf_x11_struct_randr_MonitorInfo_y, tvb, *offsetp, 2, byte_order);
        *offsetp += 2;
        proto_tree_add_item(t, hf_x11_struct_randr_MonitorInfo_width, tvb, *offsetp, 2, byte_order);
        *offsetp += 2;
        proto_tree_add_item(t, hf_x11_struct_randr_MonitorInfo_height, tvb, *offsetp, 2, byte_order);
        *offsetp += 2;
        proto_tree_add_item(t, hf_x11_struct_randr_MonitorInfo_width_in_millimeters, tvb, *offsetp, 4, byte_order);
        *offsetp += 4;
        proto_tree_add_item(t, hf_x11_struct_randr_MonitorInfo_height_in_millimeters, tvb, *offsetp, 4, byte_order);
        *offsetp += 4;
        listOfCard32(tvb, offsetp, t, hf_x11_struct_randr_MonitorInfo_outputs, hf_x11_struct_randr_MonitorInfo_outputs_item, f_nOutput, byte_order);
    }
}

static void struct_randr_LeaseNotify(tvbuff_t *tvb, int *offsetp, proto_tree *root, unsigned byte_order _U_, int count)
{
    int i;
    for (i = 0; i < count; i++) {
        proto_item *item;
        proto_tree *t;

        item = proto_tree_add_item(root, hf_x11_struct_randr_LeaseNotify, tvb, *offsetp, 28, ENC_NA);
        t = proto_item_add_subtree(item, ett_x11_rectangle);
        proto_tree_add_item(t, hf_x11_struct_randr_LeaseNotify_timestamp, tvb, *offsetp, 4, byte_order);
        *offsetp += 4;
        proto_tree_add_item(t, hf_x11_struct_randr_LeaseNotify_window, tvb, *offsetp, 4, byte_order);
        *offsetp += 4;
        proto_tree_add_item(t, hf_x11_struct_randr_LeaseNotify_lease, tvb, *offsetp, 4, byte_order);
        *offsetp += 4;
        proto_tree_add_item(t, hf_x11_struct_randr_LeaseNotify_created, tvb, *offsetp, 1, byte_order);
        *offsetp += 1;
        proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 15, ENC_NA);
        *offsetp += 15;
    }
}

static void struct_sync_INT64(tvbuff_t *tvb, int *offsetp, proto_tree *root, unsigned byte_order _U_, int count)
{
    int i;
    for (i = 0; i < count; i++) {
        proto_item *item;
        proto_tree *t;

        item = proto_tree_add_item(root, hf_x11_struct_sync_INT64, tvb, *offsetp, 8, ENC_NA);
        t = proto_item_add_subtree(item, ett_x11_rectangle);
        proto_tree_add_item(t, hf_x11_struct_sync_INT64_hi, tvb, *offsetp, 4, byte_order);
        *offsetp += 4;
        proto_tree_add_item(t, hf_x11_struct_sync_INT64_lo, tvb, *offsetp, 4, byte_order);
        *offsetp += 4;
    }
}

static int struct_size_sync_SYSTEMCOUNTER(tvbuff_t *tvb _U_, int *offsetp _U_, unsigned byte_order _U_)
{
    int size = 0;
    int f_name_len;
    f_name_len = tvb_get_uint16(tvb, *offsetp + size + 12, byte_order);
    size += f_name_len * 1;
    size = (size + 3) & ~3;
    return size + 14;
}

static void struct_sync_SYSTEMCOUNTER(tvbuff_t *tvb, int *offsetp, proto_tree *root, unsigned byte_order _U_, int count)
{
    int i;
    for (i = 0; i < count; i++) {
        proto_item *item;
        proto_tree *t;
        int f_name_len;

        item = proto_tree_add_item(root, hf_x11_struct_sync_SYSTEMCOUNTER, tvb, *offsetp, struct_size_sync_SYSTEMCOUNTER(tvb, offsetp, byte_order), ENC_NA);
        t = proto_item_add_subtree(item, ett_x11_rectangle);
        proto_tree_add_item(t, hf_x11_struct_sync_SYSTEMCOUNTER_counter, tvb, *offsetp, 4, byte_order);
        *offsetp += 4;
        struct_sync_INT64(tvb, offsetp, t, byte_order, 1);
        f_name_len = tvb_get_uint16(tvb, *offsetp, byte_order);
        proto_tree_add_item(t, hf_x11_struct_sync_SYSTEMCOUNTER_name_len, tvb, *offsetp, 2, byte_order);
        *offsetp += 2;
        listOfByte(tvb, offsetp, t, hf_x11_struct_sync_SYSTEMCOUNTER_name, f_name_len, byte_order);
        if (*offsetp % 4) {
            proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, (4 - *offsetp % 4), ENC_NA);
            *offsetp += (4 - *offsetp % 4);
        }
    }
}

static void struct_sync_TRIGGER(tvbuff_t *tvb, int *offsetp, proto_tree *root, unsigned byte_order _U_, int count)
{
    int i;
    for (i = 0; i < count; i++) {
        proto_item *item;
        proto_tree *t;

        item = proto_tree_add_item(root, hf_x11_struct_sync_TRIGGER, tvb, *offsetp, 20, ENC_NA);
        t = proto_item_add_subtree(item, ett_x11_rectangle);
        proto_tree_add_item(t, hf_x11_struct_sync_TRIGGER_counter, tvb, *offsetp, 4, byte_order);
        *offsetp += 4;
        field32(tvb, offsetp, t, hf_x11_struct_sync_TRIGGER_wait_type, byte_order);
        struct_sync_INT64(tvb, offsetp, t, byte_order, 1);
        field32(tvb, offsetp, t, hf_x11_struct_sync_TRIGGER_test_type, byte_order);
    }
}

static void struct_sync_WAITCONDITION(tvbuff_t *tvb, int *offsetp, proto_tree *root, unsigned byte_order _U_, int count)
{
    int i;
    for (i = 0; i < count; i++) {
        proto_item *item;
        proto_tree *t;

        item = proto_tree_add_item(root, hf_x11_struct_sync_WAITCONDITION, tvb, *offsetp, 28, ENC_NA);
        t = proto_item_add_subtree(item, ett_x11_rectangle);
        struct_sync_TRIGGER(tvb, offsetp, t, byte_order, 1);
        struct_sync_INT64(tvb, offsetp, t, byte_order, 1);
    }
}

static void struct_present_Notify(tvbuff_t *tvb, int *offsetp, proto_tree *root, unsigned byte_order _U_, int count)
{
    int i;
    for (i = 0; i < count; i++) {
        proto_item *item;
        proto_tree *t;

        item = proto_tree_add_item(root, hf_x11_struct_present_Notify, tvb, *offsetp, 8, ENC_NA);
        t = proto_item_add_subtree(item, ett_x11_rectangle);
        proto_tree_add_item(t, hf_x11_struct_present_Notify_window, tvb, *offsetp, 4, byte_order);
        *offsetp += 4;
        proto_tree_add_item(t, hf_x11_struct_present_Notify_serial, tvb, *offsetp, 4, byte_order);
        *offsetp += 4;
    }
}

static void presentQueryVersion(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_present_QueryVersion_major_version, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_present_QueryVersion_minor_version, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}
static void presentQueryVersion_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-QueryVersion");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (present-QueryVersion)", sequence_number);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_present_QueryVersion_reply_major_version, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_present_QueryVersion_reply_minor_version, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}

static void presentPixmap(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_present_Pixmap_window, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_present_Pixmap_pixmap, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_present_Pixmap_serial, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_present_Pixmap_valid, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_present_Pixmap_update, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_present_Pixmap_x_off, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_present_Pixmap_y_off, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_present_Pixmap_target_crtc, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_present_Pixmap_wait_fence, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_present_Pixmap_idle_fence, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_present_Pixmap_options, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 4, ENC_NA);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_present_Pixmap_target_msc, tvb, *offsetp, 8, byte_order);
    *offsetp += 8;
    proto_tree_add_item(t, hf_x11_present_Pixmap_divisor, tvb, *offsetp, 8, byte_order);
    *offsetp += 8;
    proto_tree_add_item(t, hf_x11_present_Pixmap_remainder, tvb, *offsetp, 8, byte_order);
    *offsetp += 8;
    struct_present_Notify(tvb, offsetp, t, byte_order, (length - 72) / 8);
}

static void presentNotifyMSC(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_present_NotifyMSC_window, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_present_NotifyMSC_serial, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 4, ENC_NA);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_present_NotifyMSC_target_msc, tvb, *offsetp, 8, byte_order);
    *offsetp += 8;
    proto_tree_add_item(t, hf_x11_present_NotifyMSC_divisor, tvb, *offsetp, 8, byte_order);
    *offsetp += 8;
    proto_tree_add_item(t, hf_x11_present_NotifyMSC_remainder, tvb, *offsetp, 8, byte_order);
    *offsetp += 8;
}

static void presentSelectInput(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_present_SelectInput_eid, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_present_SelectInput_window, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    {
        static int* const event_mask_bits [] = {
        &hf_x11_present_SelectInput_event_mask_mask_ConfigureNotify,
        &hf_x11_present_SelectInput_event_mask_mask_CompleteNotify,
        &hf_x11_present_SelectInput_event_mask_mask_IdleNotify,
        &hf_x11_present_SelectInput_event_mask_mask_RedirectNotify,
        NULL
        };
        proto_tree_add_bitmask(t,  tvb, *offsetp, hf_x11_present_SelectInput_event_mask, ett_x11_rectangle, event_mask_bits, byte_order);
    }
    *offsetp += 4;
}

static void presentQueryCapabilities(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_present_QueryCapabilities_target, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}
static void presentQueryCapabilities_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-QueryCapabilities");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (present-QueryCapabilities)", sequence_number);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_present_QueryCapabilities_reply_capabilities, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}

static void presentPixmapSynced(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_present_PixmapSynced_window, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_present_PixmapSynced_pixmap, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_present_PixmapSynced_serial, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_present_PixmapSynced_valid, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_present_PixmapSynced_update, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_present_PixmapSynced_x_off, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_present_PixmapSynced_y_off, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_present_PixmapSynced_target_crtc, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_present_PixmapSynced_acquire_syncobj, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_present_PixmapSynced_release_syncobj, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_present_PixmapSynced_acquire_point, tvb, *offsetp, 8, byte_order);
    *offsetp += 8;
    proto_tree_add_item(t, hf_x11_present_PixmapSynced_release_point, tvb, *offsetp, 8, byte_order);
    *offsetp += 8;
    proto_tree_add_item(t, hf_x11_present_PixmapSynced_options, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 4, ENC_NA);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_present_PixmapSynced_target_msc, tvb, *offsetp, 8, byte_order);
    *offsetp += 8;
    proto_tree_add_item(t, hf_x11_present_PixmapSynced_divisor, tvb, *offsetp, 8, byte_order);
    *offsetp += 8;
    proto_tree_add_item(t, hf_x11_present_PixmapSynced_remainder, tvb, *offsetp, 8, byte_order);
    *offsetp += 8;
    struct_present_Notify(tvb, offsetp, t, byte_order, (length - 88) / 8);
}

static void presentCompleteNotify(tvbuff_t *tvb, int length _U_, int *offsetp, proto_tree *t, unsigned byte_order)
{
    proto_tree_add_uint_format_value(t, hf_x11_minor_opcode, tvb, *offsetp, 2, 1,
                               "CompleteNotify (1)");
    field8(tvb, offsetp, t, hf_x11_present_CompleteNotify_kind, byte_order);
    field8(tvb, offsetp, t, hf_x11_present_CompleteNotify_mode, byte_order);
    proto_tree_add_item(t, hf_x11_present_CompleteNotify_event, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_present_CompleteNotify_window, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_present_CompleteNotify_serial, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_present_CompleteNotify_ust, tvb, *offsetp, 8, byte_order);
    *offsetp += 8;
    proto_tree_add_item(t, hf_x11_present_CompleteNotify_msc, tvb, *offsetp, 8, byte_order);
    *offsetp += 8;
}


static void presentIdleNotify(tvbuff_t *tvb, int length _U_, int *offsetp, proto_tree *t, unsigned byte_order)
{
    proto_tree_add_uint_format_value(t, hf_x11_minor_opcode, tvb, *offsetp, 2, 2,
                               "IdleNotify (2)");
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 2, ENC_NA);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_present_IdleNotify_event, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_present_IdleNotify_window, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_present_IdleNotify_serial, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_present_IdleNotify_pixmap, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_present_IdleNotify_idle_fence, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}


static void presentRedirectNotify(tvbuff_t *tvb, int length _U_, int *offsetp, proto_tree *t, unsigned byte_order)
{
    proto_tree_add_uint_format_value(t, hf_x11_minor_opcode, tvb, *offsetp, 2, 3,
                               "RedirectNotify (3)");
    proto_tree_add_item(t, hf_x11_present_RedirectNotify_update_window, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_present_RedirectNotify_event, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_present_RedirectNotify_event_window, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_present_RedirectNotify_window, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_present_RedirectNotify_pixmap, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_present_RedirectNotify_serial, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_present_RedirectNotify_valid_region, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_present_RedirectNotify_update_region, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    struct_xproto_RECTANGLE(tvb, offsetp, t, byte_order, 1);
    struct_xproto_RECTANGLE(tvb, offsetp, t, byte_order, 1);
    proto_tree_add_item(t, hf_x11_present_RedirectNotify_x_off, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_present_RedirectNotify_y_off, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_present_RedirectNotify_target_crtc, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_present_RedirectNotify_wait_fence, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_present_RedirectNotify_idle_fence, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_present_RedirectNotify_options, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 4, ENC_NA);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_present_RedirectNotify_target_msc, tvb, *offsetp, 8, byte_order);
    *offsetp += 8;
    proto_tree_add_item(t, hf_x11_present_RedirectNotify_divisor, tvb, *offsetp, 8, byte_order);
    *offsetp += 8;
    proto_tree_add_item(t, hf_x11_present_RedirectNotify_remainder, tvb, *offsetp, 8, byte_order);
    *offsetp += 8;
    struct_present_Notify(tvb, offsetp, t, byte_order, (length - 104) / 8);
}

static const value_string present_extension_minor[] = {
    { 0, "QueryVersion" },
    { 1, "Pixmap" },
    { 2, "NotifyMSC" },
    { 3, "SelectInput" },
    { 4, "QueryCapabilities" },
    { 5, "PixmapSynced" },
    { 0, NULL }
};
static const x11_event_info present_events[] = {
    { NULL, NULL }
};
static const x11_generic_event_info present_generic_events[] = {
        {   1, presentCompleteNotify },
        {   2, presentIdleNotify },
        {   3, presentRedirectNotify },
        {   0, NULL },
};

static const x11_reply_info present_replies[] = {
    { 0, presentQueryVersion_Reply },
    { 4, presentQueryCapabilities_Reply },
    { 0, NULL }
};

static void dispatch_present(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int minor, length;
    minor = CARD8(present_extension_minor);
    length = REQUEST_LENGTH();

    col_append_fstr(pinfo->cinfo, COL_INFO, "-%s",
                          val_to_str(minor, present_extension_minor,
                                     "<Unknown opcode %d>"));
    switch (minor) {
    case 0:
        presentQueryVersion(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 1:
        presentPixmap(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 2:
        presentNotifyMSC(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 3:
        presentSelectInput(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 4:
        presentQueryCapabilities(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 5:
        presentPixmapSynced(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    /* No need for a default case here, since Unknown is printed above,
       and UNDECODED() is taken care of by dissect_x11_request */
    }
}

static void register_present(void)
{
    set_handler("Present", dispatch_present, present_errors, present_events, present_generic_events, present_replies);
}

static void randrQueryVersion(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_randr_QueryVersion_major_version, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_randr_QueryVersion_minor_version, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}
static void randrQueryVersion_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-QueryVersion");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (randr-QueryVersion)", sequence_number);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_randr_QueryVersion_reply_major_version, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_randr_QueryVersion_reply_minor_version, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 16, ENC_NA);
    *offsetp += 16;
}

static void randrSetScreenConfig(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_randr_SetScreenConfig_window, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_randr_SetScreenConfig_timestamp, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_randr_SetScreenConfig_config_timestamp, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_randr_SetScreenConfig_sizeID, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    {
        static int* const rotation_bits [] = {
        &hf_x11_randr_SetScreenConfig_rotation_mask_Rotate_0,
        &hf_x11_randr_SetScreenConfig_rotation_mask_Rotate_90,
        &hf_x11_randr_SetScreenConfig_rotation_mask_Rotate_180,
        &hf_x11_randr_SetScreenConfig_rotation_mask_Rotate_270,
        &hf_x11_randr_SetScreenConfig_rotation_mask_Reflect_X,
        &hf_x11_randr_SetScreenConfig_rotation_mask_Reflect_Y,
        NULL
        };
        proto_tree_add_bitmask(t,  tvb, *offsetp, hf_x11_randr_SetScreenConfig_rotation, ett_x11_rectangle, rotation_bits, byte_order);
    }
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_randr_SetScreenConfig_rate, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 2, ENC_NA);
    *offsetp += 2;
}
static void randrSetScreenConfig_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-SetScreenConfig");

    REPLY(reply);
    field8(tvb, offsetp, t, hf_x11_randr_SetScreenConfig_reply_status, byte_order);
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (randr-SetScreenConfig)", sequence_number);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_randr_SetScreenConfig_reply_new_timestamp, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_randr_SetScreenConfig_reply_config_timestamp, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_randr_SetScreenConfig_reply_root, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    field16(tvb, offsetp, t, hf_x11_randr_SetScreenConfig_reply_subpixel_order, byte_order);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 10, ENC_NA);
    *offsetp += 10;
}

static void randrSelectInput(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_randr_SelectInput_window, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    {
        static int* const enable_bits [] = {
        &hf_x11_randr_SelectInput_enable_mask_ScreenChange,
        &hf_x11_randr_SelectInput_enable_mask_CrtcChange,
        &hf_x11_randr_SelectInput_enable_mask_OutputChange,
        &hf_x11_randr_SelectInput_enable_mask_OutputProperty,
        &hf_x11_randr_SelectInput_enable_mask_ProviderChange,
        &hf_x11_randr_SelectInput_enable_mask_ProviderProperty,
        &hf_x11_randr_SelectInput_enable_mask_ResourceChange,
        &hf_x11_randr_SelectInput_enable_mask_Lease,
        NULL
        };
        proto_tree_add_bitmask(t,  tvb, *offsetp, hf_x11_randr_SelectInput_enable, ett_x11_rectangle, enable_bits, byte_order);
    }
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 2, ENC_NA);
    *offsetp += 2;
}

static void randrGetScreenInfo(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_randr_GetScreenInfo_window, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}
static void randrGetScreenInfo_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;
    int f_nSizes;
    int f_nInfo;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-GetScreenInfo");

    REPLY(reply);
    {
        static int* const rotations_bits [] = {
        &hf_x11_randr_GetScreenInfo_reply_rotations_mask_Rotate_0,
        &hf_x11_randr_GetScreenInfo_reply_rotations_mask_Rotate_90,
        &hf_x11_randr_GetScreenInfo_reply_rotations_mask_Rotate_180,
        &hf_x11_randr_GetScreenInfo_reply_rotations_mask_Rotate_270,
        &hf_x11_randr_GetScreenInfo_reply_rotations_mask_Reflect_X,
        &hf_x11_randr_GetScreenInfo_reply_rotations_mask_Reflect_Y,
        NULL
        };
        proto_tree_add_bitmask(t,  tvb, *offsetp, hf_x11_randr_GetScreenInfo_reply_rotations, ett_x11_rectangle, rotations_bits, byte_order);
    }
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (randr-GetScreenInfo)", sequence_number);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_randr_GetScreenInfo_reply_root, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_randr_GetScreenInfo_reply_timestamp, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_randr_GetScreenInfo_reply_config_timestamp, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    f_nSizes = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_randr_GetScreenInfo_reply_nSizes, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_randr_GetScreenInfo_reply_sizeID, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    {
        static int* const rotation_bits [] = {
        &hf_x11_randr_GetScreenInfo_reply_rotation_mask_Rotate_0,
        &hf_x11_randr_GetScreenInfo_reply_rotation_mask_Rotate_90,
        &hf_x11_randr_GetScreenInfo_reply_rotation_mask_Rotate_180,
        &hf_x11_randr_GetScreenInfo_reply_rotation_mask_Rotate_270,
        &hf_x11_randr_GetScreenInfo_reply_rotation_mask_Reflect_X,
        &hf_x11_randr_GetScreenInfo_reply_rotation_mask_Reflect_Y,
        NULL
        };
        proto_tree_add_bitmask(t,  tvb, *offsetp, hf_x11_randr_GetScreenInfo_reply_rotation, ett_x11_rectangle, rotation_bits, byte_order);
    }
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_randr_GetScreenInfo_reply_rate, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    f_nInfo = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_randr_GetScreenInfo_reply_nInfo, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 2, ENC_NA);
    *offsetp += 2;
    struct_randr_ScreenSize(tvb, offsetp, t, byte_order, f_nSizes);
    struct_randr_RefreshRates(tvb, offsetp, t, byte_order, (f_nInfo - f_nSizes));
}

static void randrGetScreenSizeRange(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_randr_GetScreenSizeRange_window, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}
static void randrGetScreenSizeRange_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-GetScreenSizeRange");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (randr-GetScreenSizeRange)", sequence_number);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_randr_GetScreenSizeRange_reply_min_width, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_randr_GetScreenSizeRange_reply_min_height, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_randr_GetScreenSizeRange_reply_max_width, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_randr_GetScreenSizeRange_reply_max_height, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 16, ENC_NA);
    *offsetp += 16;
}

static void randrSetScreenSize(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_randr_SetScreenSize_window, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_randr_SetScreenSize_width, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_randr_SetScreenSize_height, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_randr_SetScreenSize_mm_width, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_randr_SetScreenSize_mm_height, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}

static void randrGetScreenResources(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_randr_GetScreenResources_window, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}
static void randrGetScreenResources_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;
    int f_num_crtcs;
    int f_num_outputs;
    int f_num_modes;
    int f_names_len;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-GetScreenResources");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (randr-GetScreenResources)", sequence_number);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_randr_GetScreenResources_reply_timestamp, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_randr_GetScreenResources_reply_config_timestamp, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    f_num_crtcs = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_randr_GetScreenResources_reply_num_crtcs, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    f_num_outputs = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_randr_GetScreenResources_reply_num_outputs, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    f_num_modes = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_randr_GetScreenResources_reply_num_modes, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    f_names_len = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_randr_GetScreenResources_reply_names_len, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 8, ENC_NA);
    *offsetp += 8;
    listOfCard32(tvb, offsetp, t, hf_x11_randr_GetScreenResources_reply_crtcs, hf_x11_randr_GetScreenResources_reply_crtcs_item, f_num_crtcs, byte_order);
    listOfCard32(tvb, offsetp, t, hf_x11_randr_GetScreenResources_reply_outputs, hf_x11_randr_GetScreenResources_reply_outputs_item, f_num_outputs, byte_order);
    struct_randr_ModeInfo(tvb, offsetp, t, byte_order, f_num_modes);
    listOfByte(tvb, offsetp, t, hf_x11_randr_GetScreenResources_reply_names, f_names_len, byte_order);
}

static void randrGetOutputInfo(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_randr_GetOutputInfo_output, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_randr_GetOutputInfo_config_timestamp, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}
static void randrGetOutputInfo_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;
    int f_num_crtcs;
    int f_num_modes;
    int f_num_clones;
    int f_name_len;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-GetOutputInfo");

    REPLY(reply);
    field8(tvb, offsetp, t, hf_x11_randr_GetOutputInfo_reply_status, byte_order);
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (randr-GetOutputInfo)", sequence_number);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_randr_GetOutputInfo_reply_timestamp, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_randr_GetOutputInfo_reply_crtc, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_randr_GetOutputInfo_reply_mm_width, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_randr_GetOutputInfo_reply_mm_height, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    field8(tvb, offsetp, t, hf_x11_randr_GetOutputInfo_reply_connection, byte_order);
    field8(tvb, offsetp, t, hf_x11_randr_GetOutputInfo_reply_subpixel_order, byte_order);
    f_num_crtcs = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_randr_GetOutputInfo_reply_num_crtcs, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    f_num_modes = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_randr_GetOutputInfo_reply_num_modes, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_randr_GetOutputInfo_reply_num_preferred, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    f_num_clones = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_randr_GetOutputInfo_reply_num_clones, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    f_name_len = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_randr_GetOutputInfo_reply_name_len, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    listOfCard32(tvb, offsetp, t, hf_x11_randr_GetOutputInfo_reply_crtcs, hf_x11_randr_GetOutputInfo_reply_crtcs_item, f_num_crtcs, byte_order);
    listOfCard32(tvb, offsetp, t, hf_x11_randr_GetOutputInfo_reply_modes, hf_x11_randr_GetOutputInfo_reply_modes_item, f_num_modes, byte_order);
    listOfCard32(tvb, offsetp, t, hf_x11_randr_GetOutputInfo_reply_clones, hf_x11_randr_GetOutputInfo_reply_clones_item, f_num_clones, byte_order);
    listOfByte(tvb, offsetp, t, hf_x11_randr_GetOutputInfo_reply_name, f_name_len, byte_order);
}

static void randrListOutputProperties(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_randr_ListOutputProperties_output, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}
static void randrListOutputProperties_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;
    int f_num_atoms;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-ListOutputProperties");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (randr-ListOutputProperties)", sequence_number);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    f_num_atoms = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_randr_ListOutputProperties_reply_num_atoms, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 22, ENC_NA);
    *offsetp += 22;
    listOfCard32(tvb, offsetp, t, hf_x11_randr_ListOutputProperties_reply_atoms, hf_x11_randr_ListOutputProperties_reply_atoms_item, f_num_atoms, byte_order);
}

static void randrQueryOutputProperty(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_randr_QueryOutputProperty_output, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_randr_QueryOutputProperty_property, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}
static void randrQueryOutputProperty_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;
    int f_length;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-QueryOutputProperty");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (randr-QueryOutputProperty)", sequence_number);
    *offsetp += 2;
    f_length = tvb_get_uint32(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_randr_QueryOutputProperty_reply_pending, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_randr_QueryOutputProperty_reply_range, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_randr_QueryOutputProperty_reply_immutable, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 21, ENC_NA);
    *offsetp += 21;
    listOfInt32(tvb, offsetp, t, hf_x11_randr_QueryOutputProperty_reply_validValues, hf_x11_randr_QueryOutputProperty_reply_validValues_item, f_length, byte_order);
}

static void randrConfigureOutputProperty(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_randr_ConfigureOutputProperty_output, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_randr_ConfigureOutputProperty_property, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_randr_ConfigureOutputProperty_pending, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_randr_ConfigureOutputProperty_range, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 2, ENC_NA);
    *offsetp += 2;
    listOfInt32(tvb, offsetp, t, hf_x11_randr_ConfigureOutputProperty_values, hf_x11_randr_ConfigureOutputProperty_values_item, (length - 16) / 4, byte_order);
}

static void randrChangeOutputProperty(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    int f_format;
    int f_num_units;
    proto_tree_add_item(t, hf_x11_randr_ChangeOutputProperty_output, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_randr_ChangeOutputProperty_property, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_randr_ChangeOutputProperty_type, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    f_format = tvb_get_uint8(tvb, *offsetp);
    proto_tree_add_item(t, hf_x11_randr_ChangeOutputProperty_format, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    field8(tvb, offsetp, t, hf_x11_randr_ChangeOutputProperty_mode, byte_order);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 2, ENC_NA);
    *offsetp += 2;
    f_num_units = tvb_get_uint32(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_randr_ChangeOutputProperty_num_units, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    listOfByte(tvb, offsetp, t, hf_x11_randr_ChangeOutputProperty_data, ((f_num_units * f_format) / 8), byte_order);
    length -= ((f_num_units * f_format) / 8) * 1;
}

static void randrDeleteOutputProperty(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_randr_DeleteOutputProperty_output, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_randr_DeleteOutputProperty_property, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}

static void randrGetOutputProperty(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_randr_GetOutputProperty_output, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_randr_GetOutputProperty_property, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    field32(tvb, offsetp, t, hf_x11_randr_GetOutputProperty_type, byte_order);
    proto_tree_add_item(t, hf_x11_randr_GetOutputProperty_long_offset, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_randr_GetOutputProperty_long_length, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_randr_GetOutputProperty_delete, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_randr_GetOutputProperty_pending, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 2, ENC_NA);
    *offsetp += 2;
}
static void randrGetOutputProperty_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;
    int f_format;
    int f_num_items;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-GetOutputProperty");

    REPLY(reply);
    f_format = tvb_get_uint8(tvb, *offsetp);
    proto_tree_add_item(t, hf_x11_randr_GetOutputProperty_reply_format, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (randr-GetOutputProperty)", sequence_number);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    field32(tvb, offsetp, t, hf_x11_randr_GetOutputProperty_reply_type, byte_order);
    proto_tree_add_item(t, hf_x11_randr_GetOutputProperty_reply_bytes_after, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    f_num_items = tvb_get_uint32(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_randr_GetOutputProperty_reply_num_items, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 12, ENC_NA);
    *offsetp += 12;
    listOfByte(tvb, offsetp, t, hf_x11_randr_GetOutputProperty_reply_data, (f_num_items * (f_format / 8)), byte_order);
}

static void randrCreateMode(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_randr_CreateMode_window, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    struct_randr_ModeInfo(tvb, offsetp, t, byte_order, 1);
    listOfByte(tvb, offsetp, t, hf_x11_randr_CreateMode_name, (length - 40) / 1, byte_order);
}
static void randrCreateMode_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-CreateMode");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (randr-CreateMode)", sequence_number);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_randr_CreateMode_reply_mode, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 20, ENC_NA);
    *offsetp += 20;
}

static void randrDestroyMode(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_randr_DestroyMode_mode, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}

static void randrAddOutputMode(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_randr_AddOutputMode_output, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_randr_AddOutputMode_mode, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}

static void randrDeleteOutputMode(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_randr_DeleteOutputMode_output, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_randr_DeleteOutputMode_mode, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}

static void randrGetCrtcInfo(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_randr_GetCrtcInfo_crtc, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_randr_GetCrtcInfo_config_timestamp, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}
static void randrGetCrtcInfo_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;
    int f_num_outputs;
    int f_num_possible_outputs;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-GetCrtcInfo");

    REPLY(reply);
    field8(tvb, offsetp, t, hf_x11_randr_GetCrtcInfo_reply_status, byte_order);
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (randr-GetCrtcInfo)", sequence_number);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_randr_GetCrtcInfo_reply_timestamp, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_randr_GetCrtcInfo_reply_x, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_randr_GetCrtcInfo_reply_y, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_randr_GetCrtcInfo_reply_width, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_randr_GetCrtcInfo_reply_height, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_randr_GetCrtcInfo_reply_mode, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    {
        static int* const rotation_bits [] = {
        &hf_x11_randr_GetCrtcInfo_reply_rotation_mask_Rotate_0,
        &hf_x11_randr_GetCrtcInfo_reply_rotation_mask_Rotate_90,
        &hf_x11_randr_GetCrtcInfo_reply_rotation_mask_Rotate_180,
        &hf_x11_randr_GetCrtcInfo_reply_rotation_mask_Rotate_270,
        &hf_x11_randr_GetCrtcInfo_reply_rotation_mask_Reflect_X,
        &hf_x11_randr_GetCrtcInfo_reply_rotation_mask_Reflect_Y,
        NULL
        };
        proto_tree_add_bitmask(t,  tvb, *offsetp, hf_x11_randr_GetCrtcInfo_reply_rotation, ett_x11_rectangle, rotation_bits, byte_order);
    }
    *offsetp += 2;
    {
        static int* const rotations_bits [] = {
        &hf_x11_randr_GetCrtcInfo_reply_rotations_mask_Rotate_0,
        &hf_x11_randr_GetCrtcInfo_reply_rotations_mask_Rotate_90,
        &hf_x11_randr_GetCrtcInfo_reply_rotations_mask_Rotate_180,
        &hf_x11_randr_GetCrtcInfo_reply_rotations_mask_Rotate_270,
        &hf_x11_randr_GetCrtcInfo_reply_rotations_mask_Reflect_X,
        &hf_x11_randr_GetCrtcInfo_reply_rotations_mask_Reflect_Y,
        NULL
        };
        proto_tree_add_bitmask(t,  tvb, *offsetp, hf_x11_randr_GetCrtcInfo_reply_rotations, ett_x11_rectangle, rotations_bits, byte_order);
    }
    *offsetp += 2;
    f_num_outputs = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_randr_GetCrtcInfo_reply_num_outputs, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    f_num_possible_outputs = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_randr_GetCrtcInfo_reply_num_possible_outputs, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    listOfCard32(tvb, offsetp, t, hf_x11_randr_GetCrtcInfo_reply_outputs, hf_x11_randr_GetCrtcInfo_reply_outputs_item, f_num_outputs, byte_order);
    listOfCard32(tvb, offsetp, t, hf_x11_randr_GetCrtcInfo_reply_possible, hf_x11_randr_GetCrtcInfo_reply_possible_item, f_num_possible_outputs, byte_order);
}

static void randrSetCrtcConfig(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_randr_SetCrtcConfig_crtc, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_randr_SetCrtcConfig_timestamp, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_randr_SetCrtcConfig_config_timestamp, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_randr_SetCrtcConfig_x, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_randr_SetCrtcConfig_y, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_randr_SetCrtcConfig_mode, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    {
        static int* const rotation_bits [] = {
        &hf_x11_randr_SetCrtcConfig_rotation_mask_Rotate_0,
        &hf_x11_randr_SetCrtcConfig_rotation_mask_Rotate_90,
        &hf_x11_randr_SetCrtcConfig_rotation_mask_Rotate_180,
        &hf_x11_randr_SetCrtcConfig_rotation_mask_Rotate_270,
        &hf_x11_randr_SetCrtcConfig_rotation_mask_Reflect_X,
        &hf_x11_randr_SetCrtcConfig_rotation_mask_Reflect_Y,
        NULL
        };
        proto_tree_add_bitmask(t,  tvb, *offsetp, hf_x11_randr_SetCrtcConfig_rotation, ett_x11_rectangle, rotation_bits, byte_order);
    }
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 2, ENC_NA);
    *offsetp += 2;
    listOfCard32(tvb, offsetp, t, hf_x11_randr_SetCrtcConfig_outputs, hf_x11_randr_SetCrtcConfig_outputs_item, (length - 28) / 4, byte_order);
}
static void randrSetCrtcConfig_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-SetCrtcConfig");

    REPLY(reply);
    field8(tvb, offsetp, t, hf_x11_randr_SetCrtcConfig_reply_status, byte_order);
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (randr-SetCrtcConfig)", sequence_number);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_randr_SetCrtcConfig_reply_timestamp, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 20, ENC_NA);
    *offsetp += 20;
}

static void randrGetCrtcGammaSize(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_randr_GetCrtcGammaSize_crtc, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}
static void randrGetCrtcGammaSize_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-GetCrtcGammaSize");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (randr-GetCrtcGammaSize)", sequence_number);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_randr_GetCrtcGammaSize_reply_size, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 22, ENC_NA);
    *offsetp += 22;
}

static void randrGetCrtcGamma(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_randr_GetCrtcGamma_crtc, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}
static void randrGetCrtcGamma_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;
    int f_size;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-GetCrtcGamma");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (randr-GetCrtcGamma)", sequence_number);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    f_size = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_randr_GetCrtcGamma_reply_size, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 22, ENC_NA);
    *offsetp += 22;
    listOfCard16(tvb, offsetp, t, hf_x11_randr_GetCrtcGamma_reply_red, hf_x11_randr_GetCrtcGamma_reply_red_item, f_size, byte_order);
    listOfCard16(tvb, offsetp, t, hf_x11_randr_GetCrtcGamma_reply_green, hf_x11_randr_GetCrtcGamma_reply_green_item, f_size, byte_order);
    listOfCard16(tvb, offsetp, t, hf_x11_randr_GetCrtcGamma_reply_blue, hf_x11_randr_GetCrtcGamma_reply_blue_item, f_size, byte_order);
}

static void randrSetCrtcGamma(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    int f_size;
    proto_tree_add_item(t, hf_x11_randr_SetCrtcGamma_crtc, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    f_size = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_randr_SetCrtcGamma_size, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 2, ENC_NA);
    *offsetp += 2;
    listOfCard16(tvb, offsetp, t, hf_x11_randr_SetCrtcGamma_red, hf_x11_randr_SetCrtcGamma_red_item, f_size, byte_order);
    length -= f_size * 2;
    listOfCard16(tvb, offsetp, t, hf_x11_randr_SetCrtcGamma_green, hf_x11_randr_SetCrtcGamma_green_item, f_size, byte_order);
    length -= f_size * 2;
    listOfCard16(tvb, offsetp, t, hf_x11_randr_SetCrtcGamma_blue, hf_x11_randr_SetCrtcGamma_blue_item, f_size, byte_order);
    length -= f_size * 2;
}

static void randrGetScreenResourcesCurrent(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_randr_GetScreenResourcesCurrent_window, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}
static void randrGetScreenResourcesCurrent_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;
    int f_num_crtcs;
    int f_num_outputs;
    int f_num_modes;
    int f_names_len;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-GetScreenResourcesCurrent");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (randr-GetScreenResourcesCurrent)", sequence_number);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_randr_GetScreenResourcesCurrent_reply_timestamp, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_randr_GetScreenResourcesCurrent_reply_config_timestamp, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    f_num_crtcs = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_randr_GetScreenResourcesCurrent_reply_num_crtcs, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    f_num_outputs = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_randr_GetScreenResourcesCurrent_reply_num_outputs, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    f_num_modes = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_randr_GetScreenResourcesCurrent_reply_num_modes, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    f_names_len = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_randr_GetScreenResourcesCurrent_reply_names_len, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 8, ENC_NA);
    *offsetp += 8;
    listOfCard32(tvb, offsetp, t, hf_x11_randr_GetScreenResourcesCurrent_reply_crtcs, hf_x11_randr_GetScreenResourcesCurrent_reply_crtcs_item, f_num_crtcs, byte_order);
    listOfCard32(tvb, offsetp, t, hf_x11_randr_GetScreenResourcesCurrent_reply_outputs, hf_x11_randr_GetScreenResourcesCurrent_reply_outputs_item, f_num_outputs, byte_order);
    struct_randr_ModeInfo(tvb, offsetp, t, byte_order, f_num_modes);
    listOfByte(tvb, offsetp, t, hf_x11_randr_GetScreenResourcesCurrent_reply_names, f_names_len, byte_order);
}

static void randrSetCrtcTransform(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    int f_filter_len;
    proto_tree_add_item(t, hf_x11_randr_SetCrtcTransform_crtc, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    struct_render_TRANSFORM(tvb, offsetp, t, byte_order, 1);
    f_filter_len = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_randr_SetCrtcTransform_filter_len, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 2, ENC_NA);
    *offsetp += 2;
    listOfByte(tvb, offsetp, t, hf_x11_randr_SetCrtcTransform_filter_name, f_filter_len, byte_order);
    length -= f_filter_len * 1;
    if (*offsetp % 4) {
        proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, (4 - *offsetp % 4), ENC_NA);
        *offsetp += (4 - *offsetp % 4);
    }
    length = ((length + 3) & ~3);
    listOfInt32(tvb, offsetp, t, hf_x11_randr_SetCrtcTransform_filter_params, hf_x11_randr_SetCrtcTransform_filter_params_item, (length - 48) / 4, byte_order);
}

static void randrGetCrtcTransform(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_randr_GetCrtcTransform_crtc, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}
static void randrGetCrtcTransform_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;
    int f_pending_len;
    int f_pending_nparams;
    int f_current_len;
    int f_current_nparams;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-GetCrtcTransform");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (randr-GetCrtcTransform)", sequence_number);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    struct_render_TRANSFORM(tvb, offsetp, t, byte_order, 1);
    proto_tree_add_item(t, hf_x11_randr_GetCrtcTransform_reply_has_transforms, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 3, ENC_NA);
    *offsetp += 3;
    struct_render_TRANSFORM(tvb, offsetp, t, byte_order, 1);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 4, ENC_NA);
    *offsetp += 4;
    f_pending_len = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_randr_GetCrtcTransform_reply_pending_len, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    f_pending_nparams = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_randr_GetCrtcTransform_reply_pending_nparams, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    f_current_len = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_randr_GetCrtcTransform_reply_current_len, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    f_current_nparams = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_randr_GetCrtcTransform_reply_current_nparams, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    listOfByte(tvb, offsetp, t, hf_x11_randr_GetCrtcTransform_reply_pending_filter_name, f_pending_len, byte_order);
    if (*offsetp % 4) {
        proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, (4 - *offsetp % 4), ENC_NA);
        *offsetp += (4 - *offsetp % 4);
    }
    listOfInt32(tvb, offsetp, t, hf_x11_randr_GetCrtcTransform_reply_pending_params, hf_x11_randr_GetCrtcTransform_reply_pending_params_item, f_pending_nparams, byte_order);
    listOfByte(tvb, offsetp, t, hf_x11_randr_GetCrtcTransform_reply_current_filter_name, f_current_len, byte_order);
    if (*offsetp % 4) {
        proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, (4 - *offsetp % 4), ENC_NA);
        *offsetp += (4 - *offsetp % 4);
    }
    listOfInt32(tvb, offsetp, t, hf_x11_randr_GetCrtcTransform_reply_current_params, hf_x11_randr_GetCrtcTransform_reply_current_params_item, f_current_nparams, byte_order);
}

static void randrGetPanning(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_randr_GetPanning_crtc, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}
static void randrGetPanning_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-GetPanning");

    REPLY(reply);
    field8(tvb, offsetp, t, hf_x11_randr_GetPanning_reply_status, byte_order);
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (randr-GetPanning)", sequence_number);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_randr_GetPanning_reply_timestamp, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_randr_GetPanning_reply_left, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_randr_GetPanning_reply_top, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_randr_GetPanning_reply_width, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_randr_GetPanning_reply_height, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_randr_GetPanning_reply_track_left, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_randr_GetPanning_reply_track_top, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_randr_GetPanning_reply_track_width, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_randr_GetPanning_reply_track_height, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_randr_GetPanning_reply_border_left, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_randr_GetPanning_reply_border_top, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_randr_GetPanning_reply_border_right, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_randr_GetPanning_reply_border_bottom, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
}

static void randrSetPanning(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_randr_SetPanning_crtc, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_randr_SetPanning_timestamp, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_randr_SetPanning_left, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_randr_SetPanning_top, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_randr_SetPanning_width, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_randr_SetPanning_height, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_randr_SetPanning_track_left, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_randr_SetPanning_track_top, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_randr_SetPanning_track_width, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_randr_SetPanning_track_height, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_randr_SetPanning_border_left, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_randr_SetPanning_border_top, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_randr_SetPanning_border_right, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_randr_SetPanning_border_bottom, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
}
static void randrSetPanning_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-SetPanning");

    REPLY(reply);
    field8(tvb, offsetp, t, hf_x11_randr_SetPanning_reply_status, byte_order);
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (randr-SetPanning)", sequence_number);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_randr_SetPanning_reply_timestamp, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}

static void randrSetOutputPrimary(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_randr_SetOutputPrimary_window, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_randr_SetOutputPrimary_output, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}

static void randrGetOutputPrimary(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_randr_GetOutputPrimary_window, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}
static void randrGetOutputPrimary_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-GetOutputPrimary");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (randr-GetOutputPrimary)", sequence_number);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_randr_GetOutputPrimary_reply_output, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}

static void randrGetProviders(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_randr_GetProviders_window, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}
static void randrGetProviders_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;
    int f_num_providers;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-GetProviders");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (randr-GetProviders)", sequence_number);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_randr_GetProviders_reply_timestamp, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    f_num_providers = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_randr_GetProviders_reply_num_providers, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 18, ENC_NA);
    *offsetp += 18;
    listOfCard32(tvb, offsetp, t, hf_x11_randr_GetProviders_reply_providers, hf_x11_randr_GetProviders_reply_providers_item, f_num_providers, byte_order);
}

static void randrGetProviderInfo(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_randr_GetProviderInfo_provider, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_randr_GetProviderInfo_config_timestamp, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}
static void randrGetProviderInfo_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;
    int f_num_crtcs;
    int f_num_outputs;
    int f_num_associated_providers;
    int f_name_len;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-GetProviderInfo");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_randr_GetProviderInfo_reply_status, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (randr-GetProviderInfo)", sequence_number);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_randr_GetProviderInfo_reply_timestamp, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    {
        static int* const capabilities_bits [] = {
        &hf_x11_randr_GetProviderInfo_reply_capabilities_mask_SourceOutput,
        &hf_x11_randr_GetProviderInfo_reply_capabilities_mask_SinkOutput,
        &hf_x11_randr_GetProviderInfo_reply_capabilities_mask_SourceOffload,
        &hf_x11_randr_GetProviderInfo_reply_capabilities_mask_SinkOffload,
        NULL
        };
        proto_tree_add_bitmask(t,  tvb, *offsetp, hf_x11_randr_GetProviderInfo_reply_capabilities, ett_x11_rectangle, capabilities_bits, byte_order);
    }
    *offsetp += 4;
    f_num_crtcs = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_randr_GetProviderInfo_reply_num_crtcs, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    f_num_outputs = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_randr_GetProviderInfo_reply_num_outputs, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    f_num_associated_providers = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_randr_GetProviderInfo_reply_num_associated_providers, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    f_name_len = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_randr_GetProviderInfo_reply_name_len, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 8, ENC_NA);
    *offsetp += 8;
    listOfCard32(tvb, offsetp, t, hf_x11_randr_GetProviderInfo_reply_crtcs, hf_x11_randr_GetProviderInfo_reply_crtcs_item, f_num_crtcs, byte_order);
    listOfCard32(tvb, offsetp, t, hf_x11_randr_GetProviderInfo_reply_outputs, hf_x11_randr_GetProviderInfo_reply_outputs_item, f_num_outputs, byte_order);
    listOfCard32(tvb, offsetp, t, hf_x11_randr_GetProviderInfo_reply_associated_providers, hf_x11_randr_GetProviderInfo_reply_associated_providers_item, f_num_associated_providers, byte_order);
    listOfCard32(tvb, offsetp, t, hf_x11_randr_GetProviderInfo_reply_associated_capability, hf_x11_randr_GetProviderInfo_reply_associated_capability_item, f_num_associated_providers, byte_order);
    listOfByte(tvb, offsetp, t, hf_x11_randr_GetProviderInfo_reply_name, f_name_len, byte_order);
}

static void randrSetProviderOffloadSink(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_randr_SetProviderOffloadSink_provider, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_randr_SetProviderOffloadSink_sink_provider, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_randr_SetProviderOffloadSink_config_timestamp, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}

static void randrSetProviderOutputSource(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_randr_SetProviderOutputSource_provider, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_randr_SetProviderOutputSource_source_provider, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_randr_SetProviderOutputSource_config_timestamp, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}

static void randrListProviderProperties(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_randr_ListProviderProperties_provider, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}
static void randrListProviderProperties_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;
    int f_num_atoms;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-ListProviderProperties");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (randr-ListProviderProperties)", sequence_number);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    f_num_atoms = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_randr_ListProviderProperties_reply_num_atoms, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 22, ENC_NA);
    *offsetp += 22;
    listOfCard32(tvb, offsetp, t, hf_x11_randr_ListProviderProperties_reply_atoms, hf_x11_randr_ListProviderProperties_reply_atoms_item, f_num_atoms, byte_order);
}

static void randrQueryProviderProperty(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_randr_QueryProviderProperty_provider, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_randr_QueryProviderProperty_property, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}
static void randrQueryProviderProperty_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;
    int f_length;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-QueryProviderProperty");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (randr-QueryProviderProperty)", sequence_number);
    *offsetp += 2;
    f_length = tvb_get_uint32(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_randr_QueryProviderProperty_reply_pending, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_randr_QueryProviderProperty_reply_range, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_randr_QueryProviderProperty_reply_immutable, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 21, ENC_NA);
    *offsetp += 21;
    listOfInt32(tvb, offsetp, t, hf_x11_randr_QueryProviderProperty_reply_valid_values, hf_x11_randr_QueryProviderProperty_reply_valid_values_item, f_length, byte_order);
}

static void randrConfigureProviderProperty(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_randr_ConfigureProviderProperty_provider, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_randr_ConfigureProviderProperty_property, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_randr_ConfigureProviderProperty_pending, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_randr_ConfigureProviderProperty_range, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 2, ENC_NA);
    *offsetp += 2;
    listOfInt32(tvb, offsetp, t, hf_x11_randr_ConfigureProviderProperty_values, hf_x11_randr_ConfigureProviderProperty_values_item, (length - 16) / 4, byte_order);
}

static void randrChangeProviderProperty(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    int f_format;
    int f_num_items;
    proto_tree_add_item(t, hf_x11_randr_ChangeProviderProperty_provider, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_randr_ChangeProviderProperty_property, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_randr_ChangeProviderProperty_type, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    f_format = tvb_get_uint8(tvb, *offsetp);
    proto_tree_add_item(t, hf_x11_randr_ChangeProviderProperty_format, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_randr_ChangeProviderProperty_mode, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 2, ENC_NA);
    *offsetp += 2;
    f_num_items = tvb_get_uint32(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_randr_ChangeProviderProperty_num_items, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    listOfByte(tvb, offsetp, t, hf_x11_randr_ChangeProviderProperty_data, (f_num_items * (f_format / 8)), byte_order);
    length -= (f_num_items * (f_format / 8)) * 1;
}

static void randrDeleteProviderProperty(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_randr_DeleteProviderProperty_provider, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_randr_DeleteProviderProperty_property, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}

static void randrGetProviderProperty(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_randr_GetProviderProperty_provider, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_randr_GetProviderProperty_property, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_randr_GetProviderProperty_type, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_randr_GetProviderProperty_long_offset, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_randr_GetProviderProperty_long_length, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_randr_GetProviderProperty_delete, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_randr_GetProviderProperty_pending, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 2, ENC_NA);
    *offsetp += 2;
}
static void randrGetProviderProperty_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;
    int f_format;
    int f_num_items;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-GetProviderProperty");

    REPLY(reply);
    f_format = tvb_get_uint8(tvb, *offsetp);
    proto_tree_add_item(t, hf_x11_randr_GetProviderProperty_reply_format, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (randr-GetProviderProperty)", sequence_number);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_randr_GetProviderProperty_reply_type, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_randr_GetProviderProperty_reply_bytes_after, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    f_num_items = tvb_get_uint32(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_randr_GetProviderProperty_reply_num_items, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 12, ENC_NA);
    *offsetp += 12;
    listOfByte(tvb, offsetp, t, hf_x11_randr_GetProviderProperty_reply_data, (f_num_items * (f_format / 8)), byte_order);
}

static void randrGetMonitors(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_randr_GetMonitors_window, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_randr_GetMonitors_get_active, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
}
static void randrGetMonitors_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;
    int f_nMonitors;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-GetMonitors");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (randr-GetMonitors)", sequence_number);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_randr_GetMonitors_reply_timestamp, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    f_nMonitors = tvb_get_uint32(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_randr_GetMonitors_reply_nMonitors, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_randr_GetMonitors_reply_nOutputs, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 12, ENC_NA);
    *offsetp += 12;
    struct_randr_MonitorInfo(tvb, offsetp, t, byte_order, f_nMonitors);
}

static void randrSetMonitor(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_randr_SetMonitor_window, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    struct_randr_MonitorInfo(tvb, offsetp, t, byte_order, 1);
}

static void randrDeleteMonitor(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_randr_DeleteMonitor_window, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_randr_DeleteMonitor_name, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}

static void randrCreateLease(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    int f_num_crtcs;
    int f_num_outputs;
    proto_tree_add_item(t, hf_x11_randr_CreateLease_window, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_randr_CreateLease_lid, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    f_num_crtcs = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_randr_CreateLease_num_crtcs, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    f_num_outputs = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_randr_CreateLease_num_outputs, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    listOfCard32(tvb, offsetp, t, hf_x11_randr_CreateLease_crtcs, hf_x11_randr_CreateLease_crtcs_item, f_num_crtcs, byte_order);
    length -= f_num_crtcs * 4;
    listOfCard32(tvb, offsetp, t, hf_x11_randr_CreateLease_outputs, hf_x11_randr_CreateLease_outputs_item, f_num_outputs, byte_order);
    length -= f_num_outputs * 4;
}
static void randrCreateLease_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-CreateLease");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_randr_CreateLease_reply_nfd, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (randr-CreateLease)", sequence_number);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 24, ENC_NA);
    *offsetp += 24;
}

static void randrFreeLease(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_randr_FreeLease_lid, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_randr_FreeLease_terminate, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
}

static void struct_randr_NotifyData(tvbuff_t *tvb, int *offsetp, proto_tree *root, unsigned byte_order, int count)
{
    int i;
    int base = *offsetp;
    for (i = 0; i < count; i++) {
        proto_item *item;
        proto_tree *t;
        item = proto_tree_add_item(root, hf_x11_union_randr_NotifyData, tvb, base, 28, ENC_NA);
        t = proto_item_add_subtree(item, ett_x11_rectangle);

        *offsetp = base;
        struct_randr_CrtcChange(tvb, offsetp, t, byte_order, 1);
        *offsetp = base;
        struct_randr_OutputChange(tvb, offsetp, t, byte_order, 1);
        *offsetp = base;
        struct_randr_OutputProperty(tvb, offsetp, t, byte_order, 1);
        *offsetp = base;
        struct_randr_ProviderChange(tvb, offsetp, t, byte_order, 1);
        *offsetp = base;
        struct_randr_ProviderProperty(tvb, offsetp, t, byte_order, 1);
        *offsetp = base;
        struct_randr_ResourceChange(tvb, offsetp, t, byte_order, 1);
        *offsetp = base;
        struct_randr_LeaseNotify(tvb, offsetp, t, byte_order, 1);
        base += 28;
    }
    *offsetp = base;
}

static void randrNotify(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order)
{
    field8(tvb, offsetp, t, hf_x11_randr_Notify_subCode, byte_order);
    CARD16(event_sequencenumber);
    struct_randr_NotifyData(tvb, offsetp, t, byte_order, 1);
}

static const value_string randr_extension_minor[] = {
    { 0, "QueryVersion" },
    { 2, "SetScreenConfig" },
    { 4, "SelectInput" },
    { 5, "GetScreenInfo" },
    { 6, "GetScreenSizeRange" },
    { 7, "SetScreenSize" },
    { 8, "GetScreenResources" },
    { 9, "GetOutputInfo" },
    { 10, "ListOutputProperties" },
    { 11, "QueryOutputProperty" },
    { 12, "ConfigureOutputProperty" },
    { 13, "ChangeOutputProperty" },
    { 14, "DeleteOutputProperty" },
    { 15, "GetOutputProperty" },
    { 16, "CreateMode" },
    { 17, "DestroyMode" },
    { 18, "AddOutputMode" },
    { 19, "DeleteOutputMode" },
    { 20, "GetCrtcInfo" },
    { 21, "SetCrtcConfig" },
    { 22, "GetCrtcGammaSize" },
    { 23, "GetCrtcGamma" },
    { 24, "SetCrtcGamma" },
    { 25, "GetScreenResourcesCurrent" },
    { 26, "SetCrtcTransform" },
    { 27, "GetCrtcTransform" },
    { 28, "GetPanning" },
    { 29, "SetPanning" },
    { 30, "SetOutputPrimary" },
    { 31, "GetOutputPrimary" },
    { 32, "GetProviders" },
    { 33, "GetProviderInfo" },
    { 34, "SetProviderOffloadSink" },
    { 35, "SetProviderOutputSource" },
    { 36, "ListProviderProperties" },
    { 37, "QueryProviderProperty" },
    { 38, "ConfigureProviderProperty" },
    { 39, "ChangeProviderProperty" },
    { 40, "DeleteProviderProperty" },
    { 41, "GetProviderProperty" },
    { 42, "GetMonitors" },
    { 43, "SetMonitor" },
    { 44, "DeleteMonitor" },
    { 45, "CreateLease" },
    { 46, "FreeLease" },
    { 0, NULL }
};
static const x11_event_info randr_events[] = {
    { "randr-Notify", randrNotify },
    { NULL, NULL }
};
static const x11_reply_info randr_replies[] = {
    { 0, randrQueryVersion_Reply },
    { 2, randrSetScreenConfig_Reply },
    { 5, randrGetScreenInfo_Reply },
    { 6, randrGetScreenSizeRange_Reply },
    { 8, randrGetScreenResources_Reply },
    { 9, randrGetOutputInfo_Reply },
    { 10, randrListOutputProperties_Reply },
    { 11, randrQueryOutputProperty_Reply },
    { 15, randrGetOutputProperty_Reply },
    { 16, randrCreateMode_Reply },
    { 20, randrGetCrtcInfo_Reply },
    { 21, randrSetCrtcConfig_Reply },
    { 22, randrGetCrtcGammaSize_Reply },
    { 23, randrGetCrtcGamma_Reply },
    { 25, randrGetScreenResourcesCurrent_Reply },
    { 27, randrGetCrtcTransform_Reply },
    { 28, randrGetPanning_Reply },
    { 29, randrSetPanning_Reply },
    { 31, randrGetOutputPrimary_Reply },
    { 32, randrGetProviders_Reply },
    { 33, randrGetProviderInfo_Reply },
    { 36, randrListProviderProperties_Reply },
    { 37, randrQueryProviderProperty_Reply },
    { 41, randrGetProviderProperty_Reply },
    { 42, randrGetMonitors_Reply },
    { 45, randrCreateLease_Reply },
    { 0, NULL }
};

static void dispatch_randr(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int minor, length;
    minor = CARD8(randr_extension_minor);
    length = REQUEST_LENGTH();

    col_append_fstr(pinfo->cinfo, COL_INFO, "-%s",
                          val_to_str(minor, randr_extension_minor,
                                     "<Unknown opcode %d>"));
    switch (minor) {
    case 0:
        randrQueryVersion(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 2:
        randrSetScreenConfig(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 4:
        randrSelectInput(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 5:
        randrGetScreenInfo(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 6:
        randrGetScreenSizeRange(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 7:
        randrSetScreenSize(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 8:
        randrGetScreenResources(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 9:
        randrGetOutputInfo(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 10:
        randrListOutputProperties(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 11:
        randrQueryOutputProperty(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 12:
        randrConfigureOutputProperty(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 13:
        randrChangeOutputProperty(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 14:
        randrDeleteOutputProperty(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 15:
        randrGetOutputProperty(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 16:
        randrCreateMode(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 17:
        randrDestroyMode(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 18:
        randrAddOutputMode(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 19:
        randrDeleteOutputMode(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 20:
        randrGetCrtcInfo(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 21:
        randrSetCrtcConfig(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 22:
        randrGetCrtcGammaSize(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 23:
        randrGetCrtcGamma(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 24:
        randrSetCrtcGamma(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 25:
        randrGetScreenResourcesCurrent(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 26:
        randrSetCrtcTransform(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 27:
        randrGetCrtcTransform(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 28:
        randrGetPanning(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 29:
        randrSetPanning(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 30:
        randrSetOutputPrimary(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 31:
        randrGetOutputPrimary(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 32:
        randrGetProviders(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 33:
        randrGetProviderInfo(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 34:
        randrSetProviderOffloadSink(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 35:
        randrSetProviderOutputSource(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 36:
        randrListProviderProperties(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 37:
        randrQueryProviderProperty(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 38:
        randrConfigureProviderProperty(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 39:
        randrChangeProviderProperty(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 40:
        randrDeleteProviderProperty(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 41:
        randrGetProviderProperty(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 42:
        randrGetMonitors(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 43:
        randrSetMonitor(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 44:
        randrDeleteMonitor(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 45:
        randrCreateLease(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 46:
        randrFreeLease(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    /* No need for a default case here, since Unknown is printed above,
       and UNDECODED() is taken care of by dissect_x11_request */
    }
}

static void register_randr(void)
{
    set_handler("RANDR", dispatch_randr, randr_errors, randr_events, NULL, randr_replies);
}

static void struct_record_Range8(tvbuff_t *tvb, int *offsetp, proto_tree *root, unsigned byte_order _U_, int count)
{
    int i;
    for (i = 0; i < count; i++) {
        proto_item *item;
        proto_tree *t;

        item = proto_tree_add_item(root, hf_x11_struct_record_Range8, tvb, *offsetp, 2, ENC_NA);
        t = proto_item_add_subtree(item, ett_x11_rectangle);
        proto_tree_add_item(t, hf_x11_struct_record_Range8_first, tvb, *offsetp, 1, byte_order);
        *offsetp += 1;
        proto_tree_add_item(t, hf_x11_struct_record_Range8_last, tvb, *offsetp, 1, byte_order);
        *offsetp += 1;
    }
}

static void struct_record_Range16(tvbuff_t *tvb, int *offsetp, proto_tree *root, unsigned byte_order _U_, int count)
{
    int i;
    for (i = 0; i < count; i++) {
        proto_item *item;
        proto_tree *t;

        item = proto_tree_add_item(root, hf_x11_struct_record_Range16, tvb, *offsetp, 4, ENC_NA);
        t = proto_item_add_subtree(item, ett_x11_rectangle);
        proto_tree_add_item(t, hf_x11_struct_record_Range16_first, tvb, *offsetp, 2, byte_order);
        *offsetp += 2;
        proto_tree_add_item(t, hf_x11_struct_record_Range16_last, tvb, *offsetp, 2, byte_order);
        *offsetp += 2;
    }
}

static void struct_record_ExtRange(tvbuff_t *tvb, int *offsetp, proto_tree *root, unsigned byte_order _U_, int count)
{
    int i;
    for (i = 0; i < count; i++) {
        proto_item *item;
        proto_tree *t;

        item = proto_tree_add_item(root, hf_x11_struct_record_ExtRange, tvb, *offsetp, 6, ENC_NA);
        t = proto_item_add_subtree(item, ett_x11_rectangle);
        struct_record_Range8(tvb, offsetp, t, byte_order, 1);
        struct_record_Range16(tvb, offsetp, t, byte_order, 1);
    }
}

static void struct_record_Range(tvbuff_t *tvb, int *offsetp, proto_tree *root, unsigned byte_order _U_, int count)
{
    int i;
    for (i = 0; i < count; i++) {
        proto_item *item;
        proto_tree *t;

        item = proto_tree_add_item(root, hf_x11_struct_record_Range, tvb, *offsetp, 24, ENC_NA);
        t = proto_item_add_subtree(item, ett_x11_rectangle);
        struct_record_Range8(tvb, offsetp, t, byte_order, 1);
        struct_record_Range8(tvb, offsetp, t, byte_order, 1);
        struct_record_ExtRange(tvb, offsetp, t, byte_order, 1);
        struct_record_ExtRange(tvb, offsetp, t, byte_order, 1);
        struct_record_Range8(tvb, offsetp, t, byte_order, 1);
        struct_record_Range8(tvb, offsetp, t, byte_order, 1);
        struct_record_Range8(tvb, offsetp, t, byte_order, 1);
        proto_tree_add_item(t, hf_x11_struct_record_Range_client_started, tvb, *offsetp, 1, byte_order);
        *offsetp += 1;
        proto_tree_add_item(t, hf_x11_struct_record_Range_client_died, tvb, *offsetp, 1, byte_order);
        *offsetp += 1;
    }
}

static int struct_size_record_ClientInfo(tvbuff_t *tvb _U_, int *offsetp _U_, unsigned byte_order _U_)
{
    int size = 0;
    int f_num_ranges;
    f_num_ranges = tvb_get_uint32(tvb, *offsetp + size + 4, byte_order);
    size += f_num_ranges * 24;
    return size + 8;
}

static void struct_record_ClientInfo(tvbuff_t *tvb, int *offsetp, proto_tree *root, unsigned byte_order _U_, int count)
{
    int i;
    for (i = 0; i < count; i++) {
        proto_item *item;
        proto_tree *t;
        int f_num_ranges;

        item = proto_tree_add_item(root, hf_x11_struct_record_ClientInfo, tvb, *offsetp, struct_size_record_ClientInfo(tvb, offsetp, byte_order), ENC_NA);
        t = proto_item_add_subtree(item, ett_x11_rectangle);
        proto_tree_add_item(t, hf_x11_struct_record_ClientInfo_client_resource, tvb, *offsetp, 4, byte_order);
        *offsetp += 4;
        f_num_ranges = tvb_get_uint32(tvb, *offsetp, byte_order);
        proto_tree_add_item(t, hf_x11_struct_record_ClientInfo_num_ranges, tvb, *offsetp, 4, byte_order);
        *offsetp += 4;
        struct_record_Range(tvb, offsetp, t, byte_order, f_num_ranges);
    }
}

static void recordQueryVersion(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_record_QueryVersion_major_version, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_record_QueryVersion_minor_version, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
}
static void recordQueryVersion_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-QueryVersion");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (record-QueryVersion)", sequence_number);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_record_QueryVersion_reply_major_version, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_record_QueryVersion_reply_minor_version, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
}

static void recordCreateContext(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    int f_num_client_specs;
    int f_num_ranges;
    proto_tree_add_item(t, hf_x11_record_CreateContext_context, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_record_CreateContext_element_header, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 3, ENC_NA);
    *offsetp += 3;
    f_num_client_specs = tvb_get_uint32(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_record_CreateContext_num_client_specs, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    f_num_ranges = tvb_get_uint32(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_record_CreateContext_num_ranges, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    listOfCard32(tvb, offsetp, t, hf_x11_record_CreateContext_client_specs, hf_x11_record_CreateContext_client_specs_item, f_num_client_specs, byte_order);
    length -= f_num_client_specs * 4;
    struct_record_Range(tvb, offsetp, t, byte_order, f_num_ranges);
    length -= f_num_ranges * 24;
}

static void recordRegisterClients(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    int f_num_client_specs;
    int f_num_ranges;
    proto_tree_add_item(t, hf_x11_record_RegisterClients_context, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_record_RegisterClients_element_header, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 3, ENC_NA);
    *offsetp += 3;
    f_num_client_specs = tvb_get_uint32(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_record_RegisterClients_num_client_specs, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    f_num_ranges = tvb_get_uint32(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_record_RegisterClients_num_ranges, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    listOfCard32(tvb, offsetp, t, hf_x11_record_RegisterClients_client_specs, hf_x11_record_RegisterClients_client_specs_item, f_num_client_specs, byte_order);
    length -= f_num_client_specs * 4;
    struct_record_Range(tvb, offsetp, t, byte_order, f_num_ranges);
    length -= f_num_ranges * 24;
}

static void recordUnregisterClients(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    int f_num_client_specs;
    proto_tree_add_item(t, hf_x11_record_UnregisterClients_context, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    f_num_client_specs = tvb_get_uint32(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_record_UnregisterClients_num_client_specs, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    listOfCard32(tvb, offsetp, t, hf_x11_record_UnregisterClients_client_specs, hf_x11_record_UnregisterClients_client_specs_item, f_num_client_specs, byte_order);
    length -= f_num_client_specs * 4;
}

static void recordGetContext(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_record_GetContext_context, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}
static void recordGetContext_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;
    int f_num_intercepted_clients;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-GetContext");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_record_GetContext_reply_enabled, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (record-GetContext)", sequence_number);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_record_GetContext_reply_element_header, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 3, ENC_NA);
    *offsetp += 3;
    f_num_intercepted_clients = tvb_get_uint32(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_record_GetContext_reply_num_intercepted_clients, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 16, ENC_NA);
    *offsetp += 16;
    struct_record_ClientInfo(tvb, offsetp, t, byte_order, f_num_intercepted_clients);
}

static void recordEnableContext(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_record_EnableContext_context, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}
static void recordEnableContext_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;
    int f_length;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-EnableContext");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_record_EnableContext_reply_category, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (record-EnableContext)", sequence_number);
    *offsetp += 2;
    f_length = tvb_get_uint32(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_record_EnableContext_reply_element_header, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_record_EnableContext_reply_client_swapped, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 2, ENC_NA);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_record_EnableContext_reply_xid_base, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_record_EnableContext_reply_server_time, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_record_EnableContext_reply_rec_sequence_num, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 8, ENC_NA);
    *offsetp += 8;
    listOfByte(tvb, offsetp, t, hf_x11_record_EnableContext_reply_data, (f_length * 4), byte_order);
}

static void recordDisableContext(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_record_DisableContext_context, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}

static void recordFreeContext(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_record_FreeContext_context, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}
static const value_string record_extension_minor[] = {
    { 0, "QueryVersion" },
    { 1, "CreateContext" },
    { 2, "RegisterClients" },
    { 3, "UnregisterClients" },
    { 4, "GetContext" },
    { 5, "EnableContext" },
    { 6, "DisableContext" },
    { 7, "FreeContext" },
    { 0, NULL }
};
static const x11_event_info record_events[] = {
    { NULL, NULL }
};
static const x11_reply_info record_replies[] = {
    { 0, recordQueryVersion_Reply },
    { 4, recordGetContext_Reply },
    { 5, recordEnableContext_Reply },
    { 0, NULL }
};

static void dispatch_record(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int minor, length;
    minor = CARD8(record_extension_minor);
    length = REQUEST_LENGTH();

    col_append_fstr(pinfo->cinfo, COL_INFO, "-%s",
                          val_to_str(minor, record_extension_minor,
                                     "<Unknown opcode %d>"));
    switch (minor) {
    case 0:
        recordQueryVersion(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 1:
        recordCreateContext(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 2:
        recordRegisterClients(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 3:
        recordUnregisterClients(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 4:
        recordGetContext(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 5:
        recordEnableContext(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 6:
        recordDisableContext(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 7:
        recordFreeContext(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    /* No need for a default case here, since Unknown is printed above,
       and UNDECODED() is taken care of by dissect_x11_request */
    }
}

static void register_record(void)
{
    set_handler("RECORD", dispatch_record, record_errors, record_events, NULL, record_replies);
}

static void renderQueryVersion(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_render_QueryVersion_client_major_version, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_render_QueryVersion_client_minor_version, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}
static void renderQueryVersion_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-QueryVersion");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (render-QueryVersion)", sequence_number);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_render_QueryVersion_reply_major_version, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_render_QueryVersion_reply_minor_version, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 16, ENC_NA);
    *offsetp += 16;
}

static void renderQueryPictFormats(tvbuff_t *tvb _U_, packet_info *pinfo _U_, int *offsetp _U_, proto_tree *t _U_, unsigned byte_order _U_, int length _U_)
{
}
static void renderQueryPictFormats_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;
    int f_num_formats;
    int f_num_screens;
    int f_num_subpixel;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-QueryPictFormats");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (render-QueryPictFormats)", sequence_number);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    f_num_formats = tvb_get_uint32(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_render_QueryPictFormats_reply_num_formats, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    f_num_screens = tvb_get_uint32(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_render_QueryPictFormats_reply_num_screens, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_render_QueryPictFormats_reply_num_depths, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_render_QueryPictFormats_reply_num_visuals, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    f_num_subpixel = tvb_get_uint32(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_render_QueryPictFormats_reply_num_subpixel, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 4, ENC_NA);
    *offsetp += 4;
    struct_render_PICTFORMINFO(tvb, offsetp, t, byte_order, f_num_formats);
    struct_render_PICTSCREEN(tvb, offsetp, t, byte_order, f_num_screens);
    listOfCard32(tvb, offsetp, t, hf_x11_render_QueryPictFormats_reply_subpixels, hf_x11_render_QueryPictFormats_reply_subpixels_item, f_num_subpixel, byte_order);
}

static void renderQueryPictIndexValues(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_render_QueryPictIndexValues_format, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}
static void renderQueryPictIndexValues_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;
    int f_num_values;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-QueryPictIndexValues");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (render-QueryPictIndexValues)", sequence_number);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    f_num_values = tvb_get_uint32(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_render_QueryPictIndexValues_reply_num_values, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 20, ENC_NA);
    *offsetp += 20;
    struct_render_INDEXVALUE(tvb, offsetp, t, byte_order, f_num_values);
}

static void renderCreatePicture(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    int f_value_mask;
    proto_tree_add_item(t, hf_x11_render_CreatePicture_pid, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_render_CreatePicture_drawable, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_render_CreatePicture_format, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    f_value_mask = tvb_get_uint32(tvb, *offsetp, byte_order);
    {
        static int* const value_mask_bits [] = {
        &hf_x11_render_CreatePicture_value_mask_mask_Repeat,
        &hf_x11_render_CreatePicture_value_mask_mask_AlphaMap,
        &hf_x11_render_CreatePicture_value_mask_mask_AlphaXOrigin,
        &hf_x11_render_CreatePicture_value_mask_mask_AlphaYOrigin,
        &hf_x11_render_CreatePicture_value_mask_mask_ClipXOrigin,
        &hf_x11_render_CreatePicture_value_mask_mask_ClipYOrigin,
        &hf_x11_render_CreatePicture_value_mask_mask_ClipMask,
        &hf_x11_render_CreatePicture_value_mask_mask_GraphicsExposure,
        &hf_x11_render_CreatePicture_value_mask_mask_SubwindowMode,
        &hf_x11_render_CreatePicture_value_mask_mask_PolyEdge,
        &hf_x11_render_CreatePicture_value_mask_mask_PolyMode,
        &hf_x11_render_CreatePicture_value_mask_mask_Dither,
        &hf_x11_render_CreatePicture_value_mask_mask_ComponentAlpha,
        NULL
        };
        proto_tree_add_bitmask(t,  tvb, *offsetp, hf_x11_render_CreatePicture_value_mask, ett_x11_rectangle, value_mask_bits, byte_order);
    }
    *offsetp += 4;
    if (f_value_mask & (1U << 0)) {
        field32(tvb, offsetp, t, hf_x11_render_CreatePicture_Repeat_repeat, byte_order);
    }
    if (f_value_mask & (1U << 1)) {
        proto_tree_add_item(t, hf_x11_render_CreatePicture_AlphaMap_alphamap, tvb, *offsetp, 4, byte_order);
        *offsetp += 4;
    }
    if (f_value_mask & (1U << 2)) {
        proto_tree_add_item(t, hf_x11_render_CreatePicture_AlphaXOrigin_alphaxorigin, tvb, *offsetp, 4, byte_order);
        *offsetp += 4;
    }
    if (f_value_mask & (1U << 3)) {
        proto_tree_add_item(t, hf_x11_render_CreatePicture_AlphaYOrigin_alphayorigin, tvb, *offsetp, 4, byte_order);
        *offsetp += 4;
    }
    if (f_value_mask & (1U << 4)) {
        proto_tree_add_item(t, hf_x11_render_CreatePicture_ClipXOrigin_clipxorigin, tvb, *offsetp, 4, byte_order);
        *offsetp += 4;
    }
    if (f_value_mask & (1U << 5)) {
        proto_tree_add_item(t, hf_x11_render_CreatePicture_ClipYOrigin_clipyorigin, tvb, *offsetp, 4, byte_order);
        *offsetp += 4;
    }
    if (f_value_mask & (1U << 6)) {
        proto_tree_add_item(t, hf_x11_render_CreatePicture_ClipMask_clipmask, tvb, *offsetp, 4, byte_order);
        *offsetp += 4;
    }
    if (f_value_mask & (1U << 7)) {
        proto_tree_add_item(t, hf_x11_render_CreatePicture_GraphicsExposure_graphicsexposure, tvb, *offsetp, 4, byte_order);
        *offsetp += 4;
    }
    if (f_value_mask & (1U << 8)) {
        field32(tvb, offsetp, t, hf_x11_render_CreatePicture_SubwindowMode_subwindowmode, byte_order);
    }
    if (f_value_mask & (1U << 9)) {
        field32(tvb, offsetp, t, hf_x11_render_CreatePicture_PolyEdge_polyedge, byte_order);
    }
    if (f_value_mask & (1U << 10)) {
        field32(tvb, offsetp, t, hf_x11_render_CreatePicture_PolyMode_polymode, byte_order);
    }
    if (f_value_mask & (1U << 11)) {
        proto_tree_add_item(t, hf_x11_render_CreatePicture_Dither_dither, tvb, *offsetp, 4, byte_order);
        *offsetp += 4;
    }
    if (f_value_mask & (1U << 12)) {
        proto_tree_add_item(t, hf_x11_render_CreatePicture_ComponentAlpha_componentalpha, tvb, *offsetp, 4, byte_order);
        *offsetp += 4;
    }
}

static void renderChangePicture(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    int f_value_mask;
    proto_tree_add_item(t, hf_x11_render_ChangePicture_picture, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    f_value_mask = tvb_get_uint32(tvb, *offsetp, byte_order);
    {
        static int* const value_mask_bits [] = {
        &hf_x11_render_ChangePicture_value_mask_mask_Repeat,
        &hf_x11_render_ChangePicture_value_mask_mask_AlphaMap,
        &hf_x11_render_ChangePicture_value_mask_mask_AlphaXOrigin,
        &hf_x11_render_ChangePicture_value_mask_mask_AlphaYOrigin,
        &hf_x11_render_ChangePicture_value_mask_mask_ClipXOrigin,
        &hf_x11_render_ChangePicture_value_mask_mask_ClipYOrigin,
        &hf_x11_render_ChangePicture_value_mask_mask_ClipMask,
        &hf_x11_render_ChangePicture_value_mask_mask_GraphicsExposure,
        &hf_x11_render_ChangePicture_value_mask_mask_SubwindowMode,
        &hf_x11_render_ChangePicture_value_mask_mask_PolyEdge,
        &hf_x11_render_ChangePicture_value_mask_mask_PolyMode,
        &hf_x11_render_ChangePicture_value_mask_mask_Dither,
        &hf_x11_render_ChangePicture_value_mask_mask_ComponentAlpha,
        NULL
        };
        proto_tree_add_bitmask(t,  tvb, *offsetp, hf_x11_render_ChangePicture_value_mask, ett_x11_rectangle, value_mask_bits, byte_order);
    }
    *offsetp += 4;
    if (f_value_mask & (1U << 0)) {
        field32(tvb, offsetp, t, hf_x11_render_ChangePicture_Repeat_repeat, byte_order);
    }
    if (f_value_mask & (1U << 1)) {
        proto_tree_add_item(t, hf_x11_render_ChangePicture_AlphaMap_alphamap, tvb, *offsetp, 4, byte_order);
        *offsetp += 4;
    }
    if (f_value_mask & (1U << 2)) {
        proto_tree_add_item(t, hf_x11_render_ChangePicture_AlphaXOrigin_alphaxorigin, tvb, *offsetp, 4, byte_order);
        *offsetp += 4;
    }
    if (f_value_mask & (1U << 3)) {
        proto_tree_add_item(t, hf_x11_render_ChangePicture_AlphaYOrigin_alphayorigin, tvb, *offsetp, 4, byte_order);
        *offsetp += 4;
    }
    if (f_value_mask & (1U << 4)) {
        proto_tree_add_item(t, hf_x11_render_ChangePicture_ClipXOrigin_clipxorigin, tvb, *offsetp, 4, byte_order);
        *offsetp += 4;
    }
    if (f_value_mask & (1U << 5)) {
        proto_tree_add_item(t, hf_x11_render_ChangePicture_ClipYOrigin_clipyorigin, tvb, *offsetp, 4, byte_order);
        *offsetp += 4;
    }
    if (f_value_mask & (1U << 6)) {
        proto_tree_add_item(t, hf_x11_render_ChangePicture_ClipMask_clipmask, tvb, *offsetp, 4, byte_order);
        *offsetp += 4;
    }
    if (f_value_mask & (1U << 7)) {
        proto_tree_add_item(t, hf_x11_render_ChangePicture_GraphicsExposure_graphicsexposure, tvb, *offsetp, 4, byte_order);
        *offsetp += 4;
    }
    if (f_value_mask & (1U << 8)) {
        field32(tvb, offsetp, t, hf_x11_render_ChangePicture_SubwindowMode_subwindowmode, byte_order);
    }
    if (f_value_mask & (1U << 9)) {
        field32(tvb, offsetp, t, hf_x11_render_ChangePicture_PolyEdge_polyedge, byte_order);
    }
    if (f_value_mask & (1U << 10)) {
        field32(tvb, offsetp, t, hf_x11_render_ChangePicture_PolyMode_polymode, byte_order);
    }
    if (f_value_mask & (1U << 11)) {
        proto_tree_add_item(t, hf_x11_render_ChangePicture_Dither_dither, tvb, *offsetp, 4, byte_order);
        *offsetp += 4;
    }
    if (f_value_mask & (1U << 12)) {
        proto_tree_add_item(t, hf_x11_render_ChangePicture_ComponentAlpha_componentalpha, tvb, *offsetp, 4, byte_order);
        *offsetp += 4;
    }
}

static void renderSetPictureClipRectangles(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_render_SetPictureClipRectangles_picture, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_render_SetPictureClipRectangles_clip_x_origin, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_render_SetPictureClipRectangles_clip_y_origin, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    struct_xproto_RECTANGLE(tvb, offsetp, t, byte_order, (length - 12) / 8);
}

static void renderFreePicture(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_render_FreePicture_picture, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}

static void renderComposite(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    field8(tvb, offsetp, t, hf_x11_render_Composite_op, byte_order);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 3, ENC_NA);
    *offsetp += 3;
    proto_tree_add_item(t, hf_x11_render_Composite_src, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    field32(tvb, offsetp, t, hf_x11_render_Composite_mask, byte_order);
    proto_tree_add_item(t, hf_x11_render_Composite_dst, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_render_Composite_src_x, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_render_Composite_src_y, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_render_Composite_mask_x, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_render_Composite_mask_y, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_render_Composite_dst_x, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_render_Composite_dst_y, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_render_Composite_width, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_render_Composite_height, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
}

static void renderTrapezoids(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    field8(tvb, offsetp, t, hf_x11_render_Trapezoids_op, byte_order);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 3, ENC_NA);
    *offsetp += 3;
    proto_tree_add_item(t, hf_x11_render_Trapezoids_src, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_render_Trapezoids_dst, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_render_Trapezoids_mask_format, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_render_Trapezoids_src_x, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_render_Trapezoids_src_y, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    struct_render_TRAPEZOID(tvb, offsetp, t, byte_order, (length - 24) / 40);
}

static void renderTriangles(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    field8(tvb, offsetp, t, hf_x11_render_Triangles_op, byte_order);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 3, ENC_NA);
    *offsetp += 3;
    proto_tree_add_item(t, hf_x11_render_Triangles_src, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_render_Triangles_dst, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_render_Triangles_mask_format, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_render_Triangles_src_x, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_render_Triangles_src_y, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    struct_render_TRIANGLE(tvb, offsetp, t, byte_order, (length - 24) / 24);
}

static void renderTriStrip(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    field8(tvb, offsetp, t, hf_x11_render_TriStrip_op, byte_order);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 3, ENC_NA);
    *offsetp += 3;
    proto_tree_add_item(t, hf_x11_render_TriStrip_src, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_render_TriStrip_dst, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_render_TriStrip_mask_format, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_render_TriStrip_src_x, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_render_TriStrip_src_y, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    struct_render_POINTFIX(tvb, offsetp, t, byte_order, (length - 24) / 8);
}

static void renderTriFan(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    field8(tvb, offsetp, t, hf_x11_render_TriFan_op, byte_order);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 3, ENC_NA);
    *offsetp += 3;
    proto_tree_add_item(t, hf_x11_render_TriFan_src, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_render_TriFan_dst, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_render_TriFan_mask_format, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_render_TriFan_src_x, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_render_TriFan_src_y, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    struct_render_POINTFIX(tvb, offsetp, t, byte_order, (length - 24) / 8);
}

static void renderCreateGlyphSet(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_render_CreateGlyphSet_gsid, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_render_CreateGlyphSet_format, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}

static void renderReferenceGlyphSet(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_render_ReferenceGlyphSet_gsid, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_render_ReferenceGlyphSet_existing, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}

static void renderFreeGlyphSet(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_render_FreeGlyphSet_glyphset, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}

static void renderAddGlyphs(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    int f_glyphs_len;
    proto_tree_add_item(t, hf_x11_render_AddGlyphs_glyphset, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    f_glyphs_len = tvb_get_uint32(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_render_AddGlyphs_glyphs_len, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    listOfCard32(tvb, offsetp, t, hf_x11_render_AddGlyphs_glyphids, hf_x11_render_AddGlyphs_glyphids_item, f_glyphs_len, byte_order);
    length -= f_glyphs_len * 4;
    struct_render_GLYPHINFO(tvb, offsetp, t, byte_order, f_glyphs_len);
    length -= f_glyphs_len * 12;
    listOfByte(tvb, offsetp, t, hf_x11_render_AddGlyphs_data, (length - 12) / 1, byte_order);
}

static void renderFreeGlyphs(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_render_FreeGlyphs_glyphset, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    listOfCard32(tvb, offsetp, t, hf_x11_render_FreeGlyphs_glyphs, hf_x11_render_FreeGlyphs_glyphs_item, (length - 8) / 4, byte_order);
}

static void renderCompositeGlyphs8(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    field8(tvb, offsetp, t, hf_x11_render_CompositeGlyphs8_op, byte_order);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 3, ENC_NA);
    *offsetp += 3;
    proto_tree_add_item(t, hf_x11_render_CompositeGlyphs8_src, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_render_CompositeGlyphs8_dst, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_render_CompositeGlyphs8_mask_format, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_render_CompositeGlyphs8_glyphset, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_render_CompositeGlyphs8_src_x, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_render_CompositeGlyphs8_src_y, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    listOfByte(tvb, offsetp, t, hf_x11_render_CompositeGlyphs8_glyphcmds, (length - 28) / 1, byte_order);
}

static void renderCompositeGlyphs16(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    field8(tvb, offsetp, t, hf_x11_render_CompositeGlyphs16_op, byte_order);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 3, ENC_NA);
    *offsetp += 3;
    proto_tree_add_item(t, hf_x11_render_CompositeGlyphs16_src, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_render_CompositeGlyphs16_dst, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_render_CompositeGlyphs16_mask_format, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_render_CompositeGlyphs16_glyphset, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_render_CompositeGlyphs16_src_x, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_render_CompositeGlyphs16_src_y, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    listOfByte(tvb, offsetp, t, hf_x11_render_CompositeGlyphs16_glyphcmds, (length - 28) / 1, byte_order);
}

static void renderCompositeGlyphs32(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    field8(tvb, offsetp, t, hf_x11_render_CompositeGlyphs32_op, byte_order);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 3, ENC_NA);
    *offsetp += 3;
    proto_tree_add_item(t, hf_x11_render_CompositeGlyphs32_src, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_render_CompositeGlyphs32_dst, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_render_CompositeGlyphs32_mask_format, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_render_CompositeGlyphs32_glyphset, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_render_CompositeGlyphs32_src_x, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_render_CompositeGlyphs32_src_y, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    listOfByte(tvb, offsetp, t, hf_x11_render_CompositeGlyphs32_glyphcmds, (length - 28) / 1, byte_order);
}

static void renderFillRectangles(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    field8(tvb, offsetp, t, hf_x11_render_FillRectangles_op, byte_order);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 3, ENC_NA);
    *offsetp += 3;
    proto_tree_add_item(t, hf_x11_render_FillRectangles_dst, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    struct_render_COLOR(tvb, offsetp, t, byte_order, 1);
    struct_xproto_RECTANGLE(tvb, offsetp, t, byte_order, (length - 20) / 8);
}

static void renderCreateCursor(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_render_CreateCursor_cid, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_render_CreateCursor_source, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_render_CreateCursor_x, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_render_CreateCursor_y, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
}

static void renderSetPictureTransform(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_render_SetPictureTransform_picture, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    struct_render_TRANSFORM(tvb, offsetp, t, byte_order, 1);
}

static void renderQueryFilters(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_render_QueryFilters_drawable, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}
static void renderQueryFilters_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;
    int f_num_aliases;
    int f_num_filters;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-QueryFilters");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (render-QueryFilters)", sequence_number);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    f_num_aliases = tvb_get_uint32(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_render_QueryFilters_reply_num_aliases, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    f_num_filters = tvb_get_uint32(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_render_QueryFilters_reply_num_filters, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 16, ENC_NA);
    *offsetp += 16;
    listOfCard16(tvb, offsetp, t, hf_x11_render_QueryFilters_reply_aliases, hf_x11_render_QueryFilters_reply_aliases_item, f_num_aliases, byte_order);
    struct_xproto_STR(tvb, offsetp, t, byte_order, f_num_filters);
}

static void renderSetPictureFilter(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    int f_filter_len;
    proto_tree_add_item(t, hf_x11_render_SetPictureFilter_picture, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    f_filter_len = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_render_SetPictureFilter_filter_len, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 2, ENC_NA);
    *offsetp += 2;
    listOfByte(tvb, offsetp, t, hf_x11_render_SetPictureFilter_filter, f_filter_len, byte_order);
    length -= f_filter_len * 1;
    if (*offsetp % 4) {
        proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, (4 - *offsetp % 4), ENC_NA);
        *offsetp += (4 - *offsetp % 4);
    }
    length = ((length + 3) & ~3);
    listOfInt32(tvb, offsetp, t, hf_x11_render_SetPictureFilter_values, hf_x11_render_SetPictureFilter_values_item, (length - 12) / 4, byte_order);
}

static void renderCreateAnimCursor(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_render_CreateAnimCursor_cid, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    struct_render_ANIMCURSORELT(tvb, offsetp, t, byte_order, (length - 8) / 8);
}

static void renderAddTraps(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_render_AddTraps_picture, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_render_AddTraps_x_off, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_render_AddTraps_y_off, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    struct_render_TRAP(tvb, offsetp, t, byte_order, (length - 12) / 24);
}

static void renderCreateSolidFill(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_render_CreateSolidFill_picture, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    struct_render_COLOR(tvb, offsetp, t, byte_order, 1);
}

static void renderCreateLinearGradient(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    int f_num_stops;
    proto_tree_add_item(t, hf_x11_render_CreateLinearGradient_picture, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    struct_render_POINTFIX(tvb, offsetp, t, byte_order, 1);
    struct_render_POINTFIX(tvb, offsetp, t, byte_order, 1);
    f_num_stops = tvb_get_uint32(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_render_CreateLinearGradient_num_stops, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    listOfInt32(tvb, offsetp, t, hf_x11_render_CreateLinearGradient_stops, hf_x11_render_CreateLinearGradient_stops_item, f_num_stops, byte_order);
    length -= f_num_stops * 4;
    struct_render_COLOR(tvb, offsetp, t, byte_order, f_num_stops);
    length -= f_num_stops * 8;
}

static void renderCreateRadialGradient(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    int f_num_stops;
    proto_tree_add_item(t, hf_x11_render_CreateRadialGradient_picture, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    struct_render_POINTFIX(tvb, offsetp, t, byte_order, 1);
    struct_render_POINTFIX(tvb, offsetp, t, byte_order, 1);
    proto_tree_add_item(t, hf_x11_render_CreateRadialGradient_inner_radius, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_render_CreateRadialGradient_outer_radius, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    f_num_stops = tvb_get_uint32(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_render_CreateRadialGradient_num_stops, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    listOfInt32(tvb, offsetp, t, hf_x11_render_CreateRadialGradient_stops, hf_x11_render_CreateRadialGradient_stops_item, f_num_stops, byte_order);
    length -= f_num_stops * 4;
    struct_render_COLOR(tvb, offsetp, t, byte_order, f_num_stops);
    length -= f_num_stops * 8;
}

static void renderCreateConicalGradient(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    int f_num_stops;
    proto_tree_add_item(t, hf_x11_render_CreateConicalGradient_picture, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    struct_render_POINTFIX(tvb, offsetp, t, byte_order, 1);
    proto_tree_add_item(t, hf_x11_render_CreateConicalGradient_angle, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    f_num_stops = tvb_get_uint32(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_render_CreateConicalGradient_num_stops, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    listOfInt32(tvb, offsetp, t, hf_x11_render_CreateConicalGradient_stops, hf_x11_render_CreateConicalGradient_stops_item, f_num_stops, byte_order);
    length -= f_num_stops * 4;
    struct_render_COLOR(tvb, offsetp, t, byte_order, f_num_stops);
    length -= f_num_stops * 8;
}
static const value_string render_extension_minor[] = {
    { 0, "QueryVersion" },
    { 1, "QueryPictFormats" },
    { 2, "QueryPictIndexValues" },
    { 4, "CreatePicture" },
    { 5, "ChangePicture" },
    { 6, "SetPictureClipRectangles" },
    { 7, "FreePicture" },
    { 8, "Composite" },
    { 10, "Trapezoids" },
    { 11, "Triangles" },
    { 12, "TriStrip" },
    { 13, "TriFan" },
    { 17, "CreateGlyphSet" },
    { 18, "ReferenceGlyphSet" },
    { 19, "FreeGlyphSet" },
    { 20, "AddGlyphs" },
    { 22, "FreeGlyphs" },
    { 23, "CompositeGlyphs8" },
    { 24, "CompositeGlyphs16" },
    { 25, "CompositeGlyphs32" },
    { 26, "FillRectangles" },
    { 27, "CreateCursor" },
    { 28, "SetPictureTransform" },
    { 29, "QueryFilters" },
    { 30, "SetPictureFilter" },
    { 31, "CreateAnimCursor" },
    { 32, "AddTraps" },
    { 33, "CreateSolidFill" },
    { 34, "CreateLinearGradient" },
    { 35, "CreateRadialGradient" },
    { 36, "CreateConicalGradient" },
    { 0, NULL }
};
static const x11_event_info render_events[] = {
    { NULL, NULL }
};
static const x11_reply_info render_replies[] = {
    { 0, renderQueryVersion_Reply },
    { 1, renderQueryPictFormats_Reply },
    { 2, renderQueryPictIndexValues_Reply },
    { 29, renderQueryFilters_Reply },
    { 0, NULL }
};

static void dispatch_render(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int minor, length;
    minor = CARD8(render_extension_minor);
    length = REQUEST_LENGTH();

    col_append_fstr(pinfo->cinfo, COL_INFO, "-%s",
                          val_to_str(minor, render_extension_minor,
                                     "<Unknown opcode %d>"));
    switch (minor) {
    case 0:
        renderQueryVersion(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 1:
        renderQueryPictFormats(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 2:
        renderQueryPictIndexValues(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 4:
        renderCreatePicture(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 5:
        renderChangePicture(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 6:
        renderSetPictureClipRectangles(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 7:
        renderFreePicture(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 8:
        renderComposite(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 10:
        renderTrapezoids(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 11:
        renderTriangles(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 12:
        renderTriStrip(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 13:
        renderTriFan(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 17:
        renderCreateGlyphSet(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 18:
        renderReferenceGlyphSet(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 19:
        renderFreeGlyphSet(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 20:
        renderAddGlyphs(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 22:
        renderFreeGlyphs(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 23:
        renderCompositeGlyphs8(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 24:
        renderCompositeGlyphs16(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 25:
        renderCompositeGlyphs32(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 26:
        renderFillRectangles(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 27:
        renderCreateCursor(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 28:
        renderSetPictureTransform(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 29:
        renderQueryFilters(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 30:
        renderSetPictureFilter(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 31:
        renderCreateAnimCursor(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 32:
        renderAddTraps(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 33:
        renderCreateSolidFill(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 34:
        renderCreateLinearGradient(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 35:
        renderCreateRadialGradient(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 36:
        renderCreateConicalGradient(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    /* No need for a default case here, since Unknown is printed above,
       and UNDECODED() is taken care of by dissect_x11_request */
    }
}

static void register_render(void)
{
    set_handler("RENDER", dispatch_render, render_errors, render_events, NULL, render_replies);
}

static void struct_res_Client(tvbuff_t *tvb, int *offsetp, proto_tree *root, unsigned byte_order _U_, int count)
{
    int i;
    for (i = 0; i < count; i++) {
        proto_item *item;
        proto_tree *t;

        item = proto_tree_add_item(root, hf_x11_struct_res_Client, tvb, *offsetp, 8, ENC_NA);
        t = proto_item_add_subtree(item, ett_x11_rectangle);
        proto_tree_add_item(t, hf_x11_struct_res_Client_resource_base, tvb, *offsetp, 4, byte_order);
        *offsetp += 4;
        proto_tree_add_item(t, hf_x11_struct_res_Client_resource_mask, tvb, *offsetp, 4, byte_order);
        *offsetp += 4;
    }
}

static void struct_res_Type(tvbuff_t *tvb, int *offsetp, proto_tree *root, unsigned byte_order _U_, int count)
{
    int i;
    for (i = 0; i < count; i++) {
        proto_item *item;
        proto_tree *t;

        item = proto_tree_add_item(root, hf_x11_struct_res_Type, tvb, *offsetp, 8, ENC_NA);
        t = proto_item_add_subtree(item, ett_x11_rectangle);
        proto_tree_add_item(t, hf_x11_struct_res_Type_resource_type, tvb, *offsetp, 4, byte_order);
        *offsetp += 4;
        proto_tree_add_item(t, hf_x11_struct_res_Type_count, tvb, *offsetp, 4, byte_order);
        *offsetp += 4;
    }
}

static void struct_res_ClientIdSpec(tvbuff_t *tvb, int *offsetp, proto_tree *root, unsigned byte_order _U_, int count)
{
    int i;
    for (i = 0; i < count; i++) {
        proto_item *item;
        proto_tree *t;

        item = proto_tree_add_item(root, hf_x11_struct_res_ClientIdSpec, tvb, *offsetp, 8, ENC_NA);
        t = proto_item_add_subtree(item, ett_x11_rectangle);
        proto_tree_add_item(t, hf_x11_struct_res_ClientIdSpec_client, tvb, *offsetp, 4, byte_order);
        *offsetp += 4;
        {
            static int* const mask_bits [] = {
                &hf_x11_struct_res_ClientIdSpec_mask_mask_ClientXID,
                &hf_x11_struct_res_ClientIdSpec_mask_mask_LocalClientPID,
                NULL
            };
            proto_tree_add_bitmask(t,  tvb, *offsetp, hf_x11_struct_res_ClientIdSpec_mask, ett_x11_rectangle, mask_bits, byte_order);
        }
        *offsetp += 4;
    }
}

static int struct_size_res_ClientIdValue(tvbuff_t *tvb _U_, int *offsetp _U_, unsigned byte_order _U_)
{
    int size = 0;
    int f_length;
    f_length = tvb_get_uint32(tvb, *offsetp + size + 8, byte_order);
    size += (f_length / 4) * 4;
    return size + 12;
}

static void struct_res_ClientIdValue(tvbuff_t *tvb, int *offsetp, proto_tree *root, unsigned byte_order _U_, int count)
{
    int i;
    for (i = 0; i < count; i++) {
        proto_item *item;
        proto_tree *t;
        int f_length;

        item = proto_tree_add_item(root, hf_x11_struct_res_ClientIdValue, tvb, *offsetp, struct_size_res_ClientIdValue(tvb, offsetp, byte_order), ENC_NA);
        t = proto_item_add_subtree(item, ett_x11_rectangle);
        struct_res_ClientIdSpec(tvb, offsetp, t, byte_order, 1);
        f_length = tvb_get_uint32(tvb, *offsetp, byte_order);
        proto_tree_add_item(t, hf_x11_struct_res_ClientIdValue_length, tvb, *offsetp, 4, byte_order);
        *offsetp += 4;
        listOfCard32(tvb, offsetp, t, hf_x11_struct_res_ClientIdValue_value, hf_x11_struct_res_ClientIdValue_value_item, (f_length / 4), byte_order);
    }
}

static void struct_res_ResourceIdSpec(tvbuff_t *tvb, int *offsetp, proto_tree *root, unsigned byte_order _U_, int count)
{
    int i;
    for (i = 0; i < count; i++) {
        proto_item *item;
        proto_tree *t;

        item = proto_tree_add_item(root, hf_x11_struct_res_ResourceIdSpec, tvb, *offsetp, 8, ENC_NA);
        t = proto_item_add_subtree(item, ett_x11_rectangle);
        proto_tree_add_item(t, hf_x11_struct_res_ResourceIdSpec_resource, tvb, *offsetp, 4, byte_order);
        *offsetp += 4;
        proto_tree_add_item(t, hf_x11_struct_res_ResourceIdSpec_type, tvb, *offsetp, 4, byte_order);
        *offsetp += 4;
    }
}

static void struct_res_ResourceSizeSpec(tvbuff_t *tvb, int *offsetp, proto_tree *root, unsigned byte_order _U_, int count)
{
    int i;
    for (i = 0; i < count; i++) {
        proto_item *item;
        proto_tree *t;

        item = proto_tree_add_item(root, hf_x11_struct_res_ResourceSizeSpec, tvb, *offsetp, 20, ENC_NA);
        t = proto_item_add_subtree(item, ett_x11_rectangle);
        struct_res_ResourceIdSpec(tvb, offsetp, t, byte_order, 1);
        proto_tree_add_item(t, hf_x11_struct_res_ResourceSizeSpec_bytes, tvb, *offsetp, 4, byte_order);
        *offsetp += 4;
        proto_tree_add_item(t, hf_x11_struct_res_ResourceSizeSpec_ref_count, tvb, *offsetp, 4, byte_order);
        *offsetp += 4;
        proto_tree_add_item(t, hf_x11_struct_res_ResourceSizeSpec_use_count, tvb, *offsetp, 4, byte_order);
        *offsetp += 4;
    }
}

static int struct_size_res_ResourceSizeValue(tvbuff_t *tvb _U_, int *offsetp _U_, unsigned byte_order _U_)
{
    int size = 0;
    int f_num_cross_references;
    f_num_cross_references = tvb_get_uint32(tvb, *offsetp + size + 20, byte_order);
    size += f_num_cross_references * 20;
    return size + 24;
}

static void struct_res_ResourceSizeValue(tvbuff_t *tvb, int *offsetp, proto_tree *root, unsigned byte_order _U_, int count)
{
    int i;
    for (i = 0; i < count; i++) {
        proto_item *item;
        proto_tree *t;
        int f_num_cross_references;

        item = proto_tree_add_item(root, hf_x11_struct_res_ResourceSizeValue, tvb, *offsetp, struct_size_res_ResourceSizeValue(tvb, offsetp, byte_order), ENC_NA);
        t = proto_item_add_subtree(item, ett_x11_rectangle);
        struct_res_ResourceSizeSpec(tvb, offsetp, t, byte_order, 1);
        f_num_cross_references = tvb_get_uint32(tvb, *offsetp, byte_order);
        proto_tree_add_item(t, hf_x11_struct_res_ResourceSizeValue_num_cross_references, tvb, *offsetp, 4, byte_order);
        *offsetp += 4;
        struct_res_ResourceSizeSpec(tvb, offsetp, t, byte_order, f_num_cross_references);
    }
}

static void resQueryVersion(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_res_QueryVersion_client_major, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_res_QueryVersion_client_minor, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
}
static void resQueryVersion_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-QueryVersion");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (res-QueryVersion)", sequence_number);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_res_QueryVersion_reply_server_major, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_res_QueryVersion_reply_server_minor, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
}

static void resQueryClients(tvbuff_t *tvb _U_, packet_info *pinfo _U_, int *offsetp _U_, proto_tree *t _U_, unsigned byte_order _U_, int length _U_)
{
}
static void resQueryClients_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;
    int f_num_clients;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-QueryClients");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (res-QueryClients)", sequence_number);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    f_num_clients = tvb_get_uint32(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_res_QueryClients_reply_num_clients, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 20, ENC_NA);
    *offsetp += 20;
    struct_res_Client(tvb, offsetp, t, byte_order, f_num_clients);
}

static void resQueryClientResources(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_res_QueryClientResources_xid, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}
static void resQueryClientResources_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;
    int f_num_types;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-QueryClientResources");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (res-QueryClientResources)", sequence_number);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    f_num_types = tvb_get_uint32(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_res_QueryClientResources_reply_num_types, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 20, ENC_NA);
    *offsetp += 20;
    struct_res_Type(tvb, offsetp, t, byte_order, f_num_types);
}

static void resQueryClientPixmapBytes(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_res_QueryClientPixmapBytes_xid, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}
static void resQueryClientPixmapBytes_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-QueryClientPixmapBytes");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (res-QueryClientPixmapBytes)", sequence_number);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_res_QueryClientPixmapBytes_reply_bytes, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_res_QueryClientPixmapBytes_reply_bytes_overflow, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}

static void resQueryClientIds(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    int f_num_specs;
    f_num_specs = tvb_get_uint32(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_res_QueryClientIds_num_specs, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    struct_res_ClientIdSpec(tvb, offsetp, t, byte_order, f_num_specs);
    length -= f_num_specs * 8;
}
static void resQueryClientIds_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;
    int f_num_ids;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-QueryClientIds");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (res-QueryClientIds)", sequence_number);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    f_num_ids = tvb_get_uint32(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_res_QueryClientIds_reply_num_ids, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 20, ENC_NA);
    *offsetp += 20;
    struct_res_ClientIdValue(tvb, offsetp, t, byte_order, f_num_ids);
}

static void resQueryResourceBytes(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    int f_num_specs;
    proto_tree_add_item(t, hf_x11_res_QueryResourceBytes_client, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    f_num_specs = tvb_get_uint32(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_res_QueryResourceBytes_num_specs, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    struct_res_ResourceIdSpec(tvb, offsetp, t, byte_order, f_num_specs);
    length -= f_num_specs * 8;
}
static void resQueryResourceBytes_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;
    int f_num_sizes;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-QueryResourceBytes");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (res-QueryResourceBytes)", sequence_number);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    f_num_sizes = tvb_get_uint32(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_res_QueryResourceBytes_reply_num_sizes, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 20, ENC_NA);
    *offsetp += 20;
    struct_res_ResourceSizeValue(tvb, offsetp, t, byte_order, f_num_sizes);
}
static const value_string res_extension_minor[] = {
    { 0, "QueryVersion" },
    { 1, "QueryClients" },
    { 2, "QueryClientResources" },
    { 3, "QueryClientPixmapBytes" },
    { 4, "QueryClientIds" },
    { 5, "QueryResourceBytes" },
    { 0, NULL }
};
static const x11_event_info res_events[] = {
    { NULL, NULL }
};
static const x11_reply_info res_replies[] = {
    { 0, resQueryVersion_Reply },
    { 1, resQueryClients_Reply },
    { 2, resQueryClientResources_Reply },
    { 3, resQueryClientPixmapBytes_Reply },
    { 4, resQueryClientIds_Reply },
    { 5, resQueryResourceBytes_Reply },
    { 0, NULL }
};

static void dispatch_res(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int minor, length;
    minor = CARD8(res_extension_minor);
    length = REQUEST_LENGTH();

    col_append_fstr(pinfo->cinfo, COL_INFO, "-%s",
                          val_to_str(minor, res_extension_minor,
                                     "<Unknown opcode %d>"));
    switch (minor) {
    case 0:
        resQueryVersion(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 1:
        resQueryClients(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 2:
        resQueryClientResources(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 3:
        resQueryClientPixmapBytes(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 4:
        resQueryClientIds(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 5:
        resQueryResourceBytes(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    /* No need for a default case here, since Unknown is printed above,
       and UNDECODED() is taken care of by dissect_x11_request */
    }
}

static void register_res(void)
{
    set_handler("X-Resource", dispatch_res, res_errors, res_events, NULL, res_replies);
}

static void screensaverQueryVersion(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_screensaver_QueryVersion_client_major_version, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_screensaver_QueryVersion_client_minor_version, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 2, ENC_NA);
    *offsetp += 2;
}
static void screensaverQueryVersion_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-QueryVersion");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (screensaver-QueryVersion)", sequence_number);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_screensaver_QueryVersion_reply_server_major_version, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_screensaver_QueryVersion_reply_server_minor_version, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 20, ENC_NA);
    *offsetp += 20;
}

static void screensaverQueryInfo(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_screensaver_QueryInfo_drawable, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}
static void screensaverQueryInfo_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-QueryInfo");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_screensaver_QueryInfo_reply_state, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (screensaver-QueryInfo)", sequence_number);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_screensaver_QueryInfo_reply_saver_window, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_screensaver_QueryInfo_reply_ms_until_server, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_screensaver_QueryInfo_reply_ms_since_user_input, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_screensaver_QueryInfo_reply_event_mask, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    field8(tvb, offsetp, t, hf_x11_screensaver_QueryInfo_reply_kind, byte_order);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 7, ENC_NA);
    *offsetp += 7;
}

static void screensaverSelectInput(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_screensaver_SelectInput_drawable, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    {
        static int* const event_mask_bits [] = {
        &hf_x11_screensaver_SelectInput_event_mask_mask_NotifyMask,
        &hf_x11_screensaver_SelectInput_event_mask_mask_CycleMask,
        NULL
        };
        proto_tree_add_bitmask(t,  tvb, *offsetp, hf_x11_screensaver_SelectInput_event_mask, ett_x11_rectangle, event_mask_bits, byte_order);
    }
    *offsetp += 4;
}

static void screensaverSetAttributes(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    int f_value_mask;
    proto_tree_add_item(t, hf_x11_screensaver_SetAttributes_drawable, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_screensaver_SetAttributes_x, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_screensaver_SetAttributes_y, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_screensaver_SetAttributes_width, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_screensaver_SetAttributes_height, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_screensaver_SetAttributes_border_width, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    field8(tvb, offsetp, t, hf_x11_screensaver_SetAttributes_class, byte_order);
    proto_tree_add_item(t, hf_x11_screensaver_SetAttributes_depth, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_screensaver_SetAttributes_visual, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    f_value_mask = tvb_get_uint32(tvb, *offsetp, byte_order);
    {
        static int* const value_mask_bits [] = {
        &hf_x11_screensaver_SetAttributes_value_mask_mask_BackPixmap,
        &hf_x11_screensaver_SetAttributes_value_mask_mask_BackPixel,
        &hf_x11_screensaver_SetAttributes_value_mask_mask_BorderPixmap,
        &hf_x11_screensaver_SetAttributes_value_mask_mask_BorderPixel,
        &hf_x11_screensaver_SetAttributes_value_mask_mask_BitGravity,
        &hf_x11_screensaver_SetAttributes_value_mask_mask_WinGravity,
        &hf_x11_screensaver_SetAttributes_value_mask_mask_BackingStore,
        &hf_x11_screensaver_SetAttributes_value_mask_mask_BackingPlanes,
        &hf_x11_screensaver_SetAttributes_value_mask_mask_BackingPixel,
        &hf_x11_screensaver_SetAttributes_value_mask_mask_OverrideRedirect,
        &hf_x11_screensaver_SetAttributes_value_mask_mask_SaveUnder,
        &hf_x11_screensaver_SetAttributes_value_mask_mask_EventMask,
        &hf_x11_screensaver_SetAttributes_value_mask_mask_DontPropagate,
        &hf_x11_screensaver_SetAttributes_value_mask_mask_Colormap,
        &hf_x11_screensaver_SetAttributes_value_mask_mask_Cursor,
        NULL
        };
        proto_tree_add_bitmask(t,  tvb, *offsetp, hf_x11_screensaver_SetAttributes_value_mask, ett_x11_rectangle, value_mask_bits, byte_order);
    }
    *offsetp += 4;
    if (f_value_mask & (1U << 0)) {
        field32(tvb, offsetp, t, hf_x11_screensaver_SetAttributes_BackPixmap_background_pixmap, byte_order);
    }
    if (f_value_mask & (1U << 1)) {
        proto_tree_add_item(t, hf_x11_screensaver_SetAttributes_BackPixel_background_pixel, tvb, *offsetp, 4, byte_order);
        *offsetp += 4;
    }
    if (f_value_mask & (1U << 2)) {
        field32(tvb, offsetp, t, hf_x11_screensaver_SetAttributes_BorderPixmap_border_pixmap, byte_order);
    }
    if (f_value_mask & (1U << 3)) {
        proto_tree_add_item(t, hf_x11_screensaver_SetAttributes_BorderPixel_border_pixel, tvb, *offsetp, 4, byte_order);
        *offsetp += 4;
    }
    if (f_value_mask & (1U << 4)) {
        field32(tvb, offsetp, t, hf_x11_screensaver_SetAttributes_BitGravity_bit_gravity, byte_order);
    }
    if (f_value_mask & (1U << 5)) {
        field32(tvb, offsetp, t, hf_x11_screensaver_SetAttributes_WinGravity_win_gravity, byte_order);
    }
    if (f_value_mask & (1U << 6)) {
        field32(tvb, offsetp, t, hf_x11_screensaver_SetAttributes_BackingStore_backing_store, byte_order);
    }
    if (f_value_mask & (1U << 7)) {
        proto_tree_add_item(t, hf_x11_screensaver_SetAttributes_BackingPlanes_backing_planes, tvb, *offsetp, 4, byte_order);
        *offsetp += 4;
    }
    if (f_value_mask & (1U << 8)) {
        proto_tree_add_item(t, hf_x11_screensaver_SetAttributes_BackingPixel_backing_pixel, tvb, *offsetp, 4, byte_order);
        *offsetp += 4;
    }
    if (f_value_mask & (1U << 9)) {
        proto_tree_add_item(t, hf_x11_screensaver_SetAttributes_OverrideRedirect_override_redirect, tvb, *offsetp, 4, byte_order);
        *offsetp += 4;
    }
    if (f_value_mask & (1U << 10)) {
        proto_tree_add_item(t, hf_x11_screensaver_SetAttributes_SaveUnder_save_under, tvb, *offsetp, 4, byte_order);
        *offsetp += 4;
    }
    if (f_value_mask & (1U << 11)) {
        {
            static int* const event_mask_bits [] = {
                &hf_x11_screensaver_SetAttributes_EventMask_event_mask_mask_KeyPress,
                &hf_x11_screensaver_SetAttributes_EventMask_event_mask_mask_KeyRelease,
                &hf_x11_screensaver_SetAttributes_EventMask_event_mask_mask_ButtonPress,
                &hf_x11_screensaver_SetAttributes_EventMask_event_mask_mask_ButtonRelease,
                &hf_x11_screensaver_SetAttributes_EventMask_event_mask_mask_EnterWindow,
                &hf_x11_screensaver_SetAttributes_EventMask_event_mask_mask_LeaveWindow,
                &hf_x11_screensaver_SetAttributes_EventMask_event_mask_mask_PointerMotion,
                &hf_x11_screensaver_SetAttributes_EventMask_event_mask_mask_PointerMotionHint,
                &hf_x11_screensaver_SetAttributes_EventMask_event_mask_mask_Button1Motion,
                &hf_x11_screensaver_SetAttributes_EventMask_event_mask_mask_Button2Motion,
                &hf_x11_screensaver_SetAttributes_EventMask_event_mask_mask_Button3Motion,
                &hf_x11_screensaver_SetAttributes_EventMask_event_mask_mask_Button4Motion,
                &hf_x11_screensaver_SetAttributes_EventMask_event_mask_mask_Button5Motion,
                &hf_x11_screensaver_SetAttributes_EventMask_event_mask_mask_ButtonMotion,
                &hf_x11_screensaver_SetAttributes_EventMask_event_mask_mask_KeymapState,
                &hf_x11_screensaver_SetAttributes_EventMask_event_mask_mask_Exposure,
                &hf_x11_screensaver_SetAttributes_EventMask_event_mask_mask_VisibilityChange,
                &hf_x11_screensaver_SetAttributes_EventMask_event_mask_mask_StructureNotify,
                &hf_x11_screensaver_SetAttributes_EventMask_event_mask_mask_ResizeRedirect,
                &hf_x11_screensaver_SetAttributes_EventMask_event_mask_mask_SubstructureNotify,
                &hf_x11_screensaver_SetAttributes_EventMask_event_mask_mask_SubstructureRedirect,
                &hf_x11_screensaver_SetAttributes_EventMask_event_mask_mask_FocusChange,
                &hf_x11_screensaver_SetAttributes_EventMask_event_mask_mask_PropertyChange,
                &hf_x11_screensaver_SetAttributes_EventMask_event_mask_mask_ColorMapChange,
                &hf_x11_screensaver_SetAttributes_EventMask_event_mask_mask_OwnerGrabButton,
                NULL
            };
            proto_tree_add_bitmask(t,  tvb, *offsetp, hf_x11_screensaver_SetAttributes_EventMask_event_mask, ett_x11_rectangle, event_mask_bits, byte_order);
        }
        *offsetp += 4;
    }
    if (f_value_mask & (1U << 12)) {
        {
            static int* const do_not_propogate_mask_bits [] = {
                &hf_x11_screensaver_SetAttributes_DontPropagate_do_not_propogate_mask_mask_KeyPress,
                &hf_x11_screensaver_SetAttributes_DontPropagate_do_not_propogate_mask_mask_KeyRelease,
                &hf_x11_screensaver_SetAttributes_DontPropagate_do_not_propogate_mask_mask_ButtonPress,
                &hf_x11_screensaver_SetAttributes_DontPropagate_do_not_propogate_mask_mask_ButtonRelease,
                &hf_x11_screensaver_SetAttributes_DontPropagate_do_not_propogate_mask_mask_EnterWindow,
                &hf_x11_screensaver_SetAttributes_DontPropagate_do_not_propogate_mask_mask_LeaveWindow,
                &hf_x11_screensaver_SetAttributes_DontPropagate_do_not_propogate_mask_mask_PointerMotion,
                &hf_x11_screensaver_SetAttributes_DontPropagate_do_not_propogate_mask_mask_PointerMotionHint,
                &hf_x11_screensaver_SetAttributes_DontPropagate_do_not_propogate_mask_mask_Button1Motion,
                &hf_x11_screensaver_SetAttributes_DontPropagate_do_not_propogate_mask_mask_Button2Motion,
                &hf_x11_screensaver_SetAttributes_DontPropagate_do_not_propogate_mask_mask_Button3Motion,
                &hf_x11_screensaver_SetAttributes_DontPropagate_do_not_propogate_mask_mask_Button4Motion,
                &hf_x11_screensaver_SetAttributes_DontPropagate_do_not_propogate_mask_mask_Button5Motion,
                &hf_x11_screensaver_SetAttributes_DontPropagate_do_not_propogate_mask_mask_ButtonMotion,
                &hf_x11_screensaver_SetAttributes_DontPropagate_do_not_propogate_mask_mask_KeymapState,
                &hf_x11_screensaver_SetAttributes_DontPropagate_do_not_propogate_mask_mask_Exposure,
                &hf_x11_screensaver_SetAttributes_DontPropagate_do_not_propogate_mask_mask_VisibilityChange,
                &hf_x11_screensaver_SetAttributes_DontPropagate_do_not_propogate_mask_mask_StructureNotify,
                &hf_x11_screensaver_SetAttributes_DontPropagate_do_not_propogate_mask_mask_ResizeRedirect,
                &hf_x11_screensaver_SetAttributes_DontPropagate_do_not_propogate_mask_mask_SubstructureNotify,
                &hf_x11_screensaver_SetAttributes_DontPropagate_do_not_propogate_mask_mask_SubstructureRedirect,
                &hf_x11_screensaver_SetAttributes_DontPropagate_do_not_propogate_mask_mask_FocusChange,
                &hf_x11_screensaver_SetAttributes_DontPropagate_do_not_propogate_mask_mask_PropertyChange,
                &hf_x11_screensaver_SetAttributes_DontPropagate_do_not_propogate_mask_mask_ColorMapChange,
                &hf_x11_screensaver_SetAttributes_DontPropagate_do_not_propogate_mask_mask_OwnerGrabButton,
                NULL
            };
            proto_tree_add_bitmask(t,  tvb, *offsetp, hf_x11_screensaver_SetAttributes_DontPropagate_do_not_propogate_mask, ett_x11_rectangle, do_not_propogate_mask_bits, byte_order);
        }
        *offsetp += 4;
    }
    if (f_value_mask & (1U << 13)) {
        field32(tvb, offsetp, t, hf_x11_screensaver_SetAttributes_Colormap_colormap, byte_order);
    }
    if (f_value_mask & (1U << 14)) {
        field32(tvb, offsetp, t, hf_x11_screensaver_SetAttributes_Cursor_cursor, byte_order);
    }
}

static void screensaverUnsetAttributes(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_screensaver_UnsetAttributes_drawable, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}

static void screensaverSuspend(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_screensaver_Suspend_suspend, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}
static const value_string screensaver_extension_minor[] = {
    { 0, "QueryVersion" },
    { 1, "QueryInfo" },
    { 2, "SelectInput" },
    { 3, "SetAttributes" },
    { 4, "UnsetAttributes" },
    { 5, "Suspend" },
    { 0, NULL }
};
static const x11_event_info screensaver_events[] = {
    { NULL, NULL }
};
static const x11_reply_info screensaver_replies[] = {
    { 0, screensaverQueryVersion_Reply },
    { 1, screensaverQueryInfo_Reply },
    { 0, NULL }
};

static void dispatch_screensaver(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int minor, length;
    minor = CARD8(screensaver_extension_minor);
    length = REQUEST_LENGTH();

    col_append_fstr(pinfo->cinfo, COL_INFO, "-%s",
                          val_to_str(minor, screensaver_extension_minor,
                                     "<Unknown opcode %d>"));
    switch (minor) {
    case 0:
        screensaverQueryVersion(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 1:
        screensaverQueryInfo(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 2:
        screensaverSelectInput(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 3:
        screensaverSetAttributes(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 4:
        screensaverUnsetAttributes(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 5:
        screensaverSuspend(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    /* No need for a default case here, since Unknown is printed above,
       and UNDECODED() is taken care of by dissect_x11_request */
    }
}

static void register_screensaver(void)
{
    set_handler("MIT-SCREEN-SAVER", dispatch_screensaver, screensaver_errors, screensaver_events, NULL, screensaver_replies);
}

static void shapeQueryVersion(tvbuff_t *tvb _U_, packet_info *pinfo _U_, int *offsetp _U_, proto_tree *t _U_, unsigned byte_order _U_, int length _U_)
{
}
static void shapeQueryVersion_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-QueryVersion");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (shape-QueryVersion)", sequence_number);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_shape_QueryVersion_reply_major_version, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_shape_QueryVersion_reply_minor_version, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
}

static void shapeRectangles(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    field8(tvb, offsetp, t, hf_x11_shape_Rectangles_operation, byte_order);
    field8(tvb, offsetp, t, hf_x11_shape_Rectangles_destination_kind, byte_order);
    field8(tvb, offsetp, t, hf_x11_shape_Rectangles_ordering, byte_order);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_shape_Rectangles_destination_window, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_shape_Rectangles_x_offset, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_shape_Rectangles_y_offset, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    struct_xproto_RECTANGLE(tvb, offsetp, t, byte_order, (length - 16) / 8);
}

static void shapeMask(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    field8(tvb, offsetp, t, hf_x11_shape_Mask_operation, byte_order);
    field8(tvb, offsetp, t, hf_x11_shape_Mask_destination_kind, byte_order);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 2, ENC_NA);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_shape_Mask_destination_window, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_shape_Mask_x_offset, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_shape_Mask_y_offset, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    field32(tvb, offsetp, t, hf_x11_shape_Mask_source_bitmap, byte_order);
}

static void shapeCombine(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    field8(tvb, offsetp, t, hf_x11_shape_Combine_operation, byte_order);
    field8(tvb, offsetp, t, hf_x11_shape_Combine_destination_kind, byte_order);
    field8(tvb, offsetp, t, hf_x11_shape_Combine_source_kind, byte_order);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_shape_Combine_destination_window, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_shape_Combine_x_offset, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_shape_Combine_y_offset, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_shape_Combine_source_window, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}

static void shapeOffset(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    field8(tvb, offsetp, t, hf_x11_shape_Offset_destination_kind, byte_order);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 3, ENC_NA);
    *offsetp += 3;
    proto_tree_add_item(t, hf_x11_shape_Offset_destination_window, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_shape_Offset_x_offset, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_shape_Offset_y_offset, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
}

static void shapeQueryExtents(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_shape_QueryExtents_destination_window, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}
static void shapeQueryExtents_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-QueryExtents");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (shape-QueryExtents)", sequence_number);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_shape_QueryExtents_reply_bounding_shaped, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_shape_QueryExtents_reply_clip_shaped, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 2, ENC_NA);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_shape_QueryExtents_reply_bounding_shape_extents_x, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_shape_QueryExtents_reply_bounding_shape_extents_y, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_shape_QueryExtents_reply_bounding_shape_extents_width, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_shape_QueryExtents_reply_bounding_shape_extents_height, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_shape_QueryExtents_reply_clip_shape_extents_x, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_shape_QueryExtents_reply_clip_shape_extents_y, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_shape_QueryExtents_reply_clip_shape_extents_width, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_shape_QueryExtents_reply_clip_shape_extents_height, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
}

static void shapeSelectInput(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_shape_SelectInput_destination_window, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_shape_SelectInput_enable, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 3, ENC_NA);
    *offsetp += 3;
}

static void shapeInputSelected(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_shape_InputSelected_destination_window, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}
static void shapeInputSelected_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-InputSelected");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_shape_InputSelected_reply_enabled, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (shape-InputSelected)", sequence_number);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}

static void shapeGetRectangles(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_shape_GetRectangles_window, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    field8(tvb, offsetp, t, hf_x11_shape_GetRectangles_source_kind, byte_order);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 3, ENC_NA);
    *offsetp += 3;
}
static void shapeGetRectangles_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;
    int f_rectangles_len;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-GetRectangles");

    REPLY(reply);
    field8(tvb, offsetp, t, hf_x11_shape_GetRectangles_reply_ordering, byte_order);
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (shape-GetRectangles)", sequence_number);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    f_rectangles_len = tvb_get_uint32(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_shape_GetRectangles_reply_rectangles_len, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 20, ENC_NA);
    *offsetp += 20;
    struct_xproto_RECTANGLE(tvb, offsetp, t, byte_order, f_rectangles_len);
}
static const value_string shape_extension_minor[] = {
    { 0, "QueryVersion" },
    { 1, "Rectangles" },
    { 2, "Mask" },
    { 3, "Combine" },
    { 4, "Offset" },
    { 5, "QueryExtents" },
    { 6, "SelectInput" },
    { 7, "InputSelected" },
    { 8, "GetRectangles" },
    { 0, NULL }
};
static const x11_event_info shape_events[] = {
    { NULL, NULL }
};
static const x11_reply_info shape_replies[] = {
    { 0, shapeQueryVersion_Reply },
    { 5, shapeQueryExtents_Reply },
    { 7, shapeInputSelected_Reply },
    { 8, shapeGetRectangles_Reply },
    { 0, NULL }
};

static void dispatch_shape(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int minor, length;
    minor = CARD8(shape_extension_minor);
    length = REQUEST_LENGTH();

    col_append_fstr(pinfo->cinfo, COL_INFO, "-%s",
                          val_to_str(minor, shape_extension_minor,
                                     "<Unknown opcode %d>"));
    switch (minor) {
    case 0:
        shapeQueryVersion(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 1:
        shapeRectangles(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 2:
        shapeMask(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 3:
        shapeCombine(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 4:
        shapeOffset(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 5:
        shapeQueryExtents(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 6:
        shapeSelectInput(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 7:
        shapeInputSelected(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 8:
        shapeGetRectangles(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    /* No need for a default case here, since Unknown is printed above,
       and UNDECODED() is taken care of by dissect_x11_request */
    }
}

static void register_shape(void)
{
    set_handler("SHAPE", dispatch_shape, shape_errors, shape_events, NULL, shape_replies);
}

static void shmQueryVersion(tvbuff_t *tvb _U_, packet_info *pinfo _U_, int *offsetp _U_, proto_tree *t _U_, unsigned byte_order _U_, int length _U_)
{
}
static void shmQueryVersion_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-QueryVersion");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_shm_QueryVersion_reply_shared_pixmaps, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (shm-QueryVersion)", sequence_number);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_shm_QueryVersion_reply_major_version, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_shm_QueryVersion_reply_minor_version, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_shm_QueryVersion_reply_uid, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_shm_QueryVersion_reply_gid, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_shm_QueryVersion_reply_pixmap_format, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 15, ENC_NA);
    *offsetp += 15;
}

static void shmAttach(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_shm_Attach_shmseg, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_shm_Attach_shmid, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_shm_Attach_read_only, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 3, ENC_NA);
    *offsetp += 3;
}

static void shmDetach(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_shm_Detach_shmseg, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}

static void shmPutImage(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_shm_PutImage_drawable, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_shm_PutImage_gc, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_shm_PutImage_total_width, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_shm_PutImage_total_height, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_shm_PutImage_src_x, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_shm_PutImage_src_y, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_shm_PutImage_src_width, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_shm_PutImage_src_height, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_shm_PutImage_dst_x, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_shm_PutImage_dst_y, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_shm_PutImage_depth, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_shm_PutImage_format, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_shm_PutImage_send_event, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_shm_PutImage_shmseg, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_shm_PutImage_offset, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}

static void shmGetImage(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_shm_GetImage_drawable, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_shm_GetImage_x, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_shm_GetImage_y, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_shm_GetImage_width, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_shm_GetImage_height, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_shm_GetImage_plane_mask, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_shm_GetImage_format, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 3, ENC_NA);
    *offsetp += 3;
    proto_tree_add_item(t, hf_x11_shm_GetImage_shmseg, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_shm_GetImage_offset, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}
static void shmGetImage_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-GetImage");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_shm_GetImage_reply_depth, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (shm-GetImage)", sequence_number);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_shm_GetImage_reply_visual, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_shm_GetImage_reply_size, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}

static void shmCreatePixmap(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_shm_CreatePixmap_pid, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_shm_CreatePixmap_drawable, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_shm_CreatePixmap_width, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_shm_CreatePixmap_height, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_shm_CreatePixmap_depth, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 3, ENC_NA);
    *offsetp += 3;
    proto_tree_add_item(t, hf_x11_shm_CreatePixmap_shmseg, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_shm_CreatePixmap_offset, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}

static void shmAttachFd(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_shm_AttachFd_shmseg, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_shm_AttachFd_read_only, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 3, ENC_NA);
    *offsetp += 3;
}

static void shmCreateSegment(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_shm_CreateSegment_shmseg, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_shm_CreateSegment_size, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_shm_CreateSegment_read_only, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 3, ENC_NA);
    *offsetp += 3;
}
static void shmCreateSegment_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-CreateSegment");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_shm_CreateSegment_reply_nfd, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (shm-CreateSegment)", sequence_number);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 24, ENC_NA);
    *offsetp += 24;
}
static const value_string shm_extension_minor[] = {
    { 0, "QueryVersion" },
    { 1, "Attach" },
    { 2, "Detach" },
    { 3, "PutImage" },
    { 4, "GetImage" },
    { 5, "CreatePixmap" },
    { 6, "AttachFd" },
    { 7, "CreateSegment" },
    { 0, NULL }
};
static const x11_event_info shm_events[] = {
    { NULL, NULL }
};
static const x11_reply_info shm_replies[] = {
    { 0, shmQueryVersion_Reply },
    { 4, shmGetImage_Reply },
    { 7, shmCreateSegment_Reply },
    { 0, NULL }
};

static void dispatch_shm(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int minor, length;
    minor = CARD8(shm_extension_minor);
    length = REQUEST_LENGTH();

    col_append_fstr(pinfo->cinfo, COL_INFO, "-%s",
                          val_to_str(minor, shm_extension_minor,
                                     "<Unknown opcode %d>"));
    switch (minor) {
    case 0:
        shmQueryVersion(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 1:
        shmAttach(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 2:
        shmDetach(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 3:
        shmPutImage(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 4:
        shmGetImage(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 5:
        shmCreatePixmap(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 6:
        shmAttachFd(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 7:
        shmCreateSegment(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    /* No need for a default case here, since Unknown is printed above,
       and UNDECODED() is taken care of by dissect_x11_request */
    }
}

static void register_shm(void)
{
    set_handler("MIT-SHM", dispatch_shm, shm_errors, shm_events, NULL, shm_replies);
}

static void syncInitialize(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_sync_Initialize_desired_major_version, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_sync_Initialize_desired_minor_version, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
}
static void syncInitialize_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-Initialize");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (sync-Initialize)", sequence_number);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_sync_Initialize_reply_major_version, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_sync_Initialize_reply_minor_version, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 22, ENC_NA);
    *offsetp += 22;
}

static void syncListSystemCounters(tvbuff_t *tvb _U_, packet_info *pinfo _U_, int *offsetp _U_, proto_tree *t _U_, unsigned byte_order _U_, int length _U_)
{
}
static void syncListSystemCounters_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;
    int f_counters_len;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-ListSystemCounters");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (sync-ListSystemCounters)", sequence_number);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    f_counters_len = tvb_get_uint32(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_sync_ListSystemCounters_reply_counters_len, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 20, ENC_NA);
    *offsetp += 20;
    struct_sync_SYSTEMCOUNTER(tvb, offsetp, t, byte_order, f_counters_len);
}

static void syncCreateCounter(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_sync_CreateCounter_id, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    struct_sync_INT64(tvb, offsetp, t, byte_order, 1);
}

static void syncDestroyCounter(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_sync_DestroyCounter_counter, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}

static void syncQueryCounter(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_sync_QueryCounter_counter, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}
static void syncQueryCounter_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-QueryCounter");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (sync-QueryCounter)", sequence_number);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    struct_sync_INT64(tvb, offsetp, t, byte_order, 1);
}

static void syncAwait(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    struct_sync_WAITCONDITION(tvb, offsetp, t, byte_order, (length - 4) / 28);
}

static void syncChangeCounter(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_sync_ChangeCounter_counter, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    struct_sync_INT64(tvb, offsetp, t, byte_order, 1);
}

static void syncSetCounter(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_sync_SetCounter_counter, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    struct_sync_INT64(tvb, offsetp, t, byte_order, 1);
}

static void syncCreateAlarm(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    int f_value_mask;
    proto_tree_add_item(t, hf_x11_sync_CreateAlarm_id, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    f_value_mask = tvb_get_uint32(tvb, *offsetp, byte_order);
    {
        static int* const value_mask_bits [] = {
        &hf_x11_sync_CreateAlarm_value_mask_mask_Counter,
        &hf_x11_sync_CreateAlarm_value_mask_mask_ValueType,
        &hf_x11_sync_CreateAlarm_value_mask_mask_Value,
        &hf_x11_sync_CreateAlarm_value_mask_mask_TestType,
        &hf_x11_sync_CreateAlarm_value_mask_mask_Delta,
        &hf_x11_sync_CreateAlarm_value_mask_mask_Events,
        NULL
        };
        proto_tree_add_bitmask(t,  tvb, *offsetp, hf_x11_sync_CreateAlarm_value_mask, ett_x11_rectangle, value_mask_bits, byte_order);
    }
    *offsetp += 4;
    if (f_value_mask & (1U << 0)) {
        proto_tree_add_item(t, hf_x11_sync_CreateAlarm_Counter_counter, tvb, *offsetp, 4, byte_order);
        *offsetp += 4;
    }
    if (f_value_mask & (1U << 1)) {
        field32(tvb, offsetp, t, hf_x11_sync_CreateAlarm_ValueType_valueType, byte_order);
    }
    if (f_value_mask & (1U << 2)) {
        struct_sync_INT64(tvb, offsetp, t, byte_order, 1);
    }
    if (f_value_mask & (1U << 3)) {
        field32(tvb, offsetp, t, hf_x11_sync_CreateAlarm_TestType_testType, byte_order);
    }
    if (f_value_mask & (1U << 4)) {
        struct_sync_INT64(tvb, offsetp, t, byte_order, 1);
    }
    if (f_value_mask & (1U << 5)) {
        proto_tree_add_item(t, hf_x11_sync_CreateAlarm_Events_events, tvb, *offsetp, 4, byte_order);
        *offsetp += 4;
    }
}

static void syncChangeAlarm(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    int f_value_mask;
    proto_tree_add_item(t, hf_x11_sync_ChangeAlarm_id, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    f_value_mask = tvb_get_uint32(tvb, *offsetp, byte_order);
    {
        static int* const value_mask_bits [] = {
        &hf_x11_sync_ChangeAlarm_value_mask_mask_Counter,
        &hf_x11_sync_ChangeAlarm_value_mask_mask_ValueType,
        &hf_x11_sync_ChangeAlarm_value_mask_mask_Value,
        &hf_x11_sync_ChangeAlarm_value_mask_mask_TestType,
        &hf_x11_sync_ChangeAlarm_value_mask_mask_Delta,
        &hf_x11_sync_ChangeAlarm_value_mask_mask_Events,
        NULL
        };
        proto_tree_add_bitmask(t,  tvb, *offsetp, hf_x11_sync_ChangeAlarm_value_mask, ett_x11_rectangle, value_mask_bits, byte_order);
    }
    *offsetp += 4;
    if (f_value_mask & (1U << 0)) {
        proto_tree_add_item(t, hf_x11_sync_ChangeAlarm_Counter_counter, tvb, *offsetp, 4, byte_order);
        *offsetp += 4;
    }
    if (f_value_mask & (1U << 1)) {
        field32(tvb, offsetp, t, hf_x11_sync_ChangeAlarm_ValueType_valueType, byte_order);
    }
    if (f_value_mask & (1U << 2)) {
        struct_sync_INT64(tvb, offsetp, t, byte_order, 1);
    }
    if (f_value_mask & (1U << 3)) {
        field32(tvb, offsetp, t, hf_x11_sync_ChangeAlarm_TestType_testType, byte_order);
    }
    if (f_value_mask & (1U << 4)) {
        struct_sync_INT64(tvb, offsetp, t, byte_order, 1);
    }
    if (f_value_mask & (1U << 5)) {
        proto_tree_add_item(t, hf_x11_sync_ChangeAlarm_Events_events, tvb, *offsetp, 4, byte_order);
        *offsetp += 4;
    }
}

static void syncDestroyAlarm(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_sync_DestroyAlarm_alarm, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}

static void syncQueryAlarm(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_sync_QueryAlarm_alarm, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}
static void syncQueryAlarm_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-QueryAlarm");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (sync-QueryAlarm)", sequence_number);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    struct_sync_TRIGGER(tvb, offsetp, t, byte_order, 1);
    struct_sync_INT64(tvb, offsetp, t, byte_order, 1);
    proto_tree_add_item(t, hf_x11_sync_QueryAlarm_reply_events, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    field8(tvb, offsetp, t, hf_x11_sync_QueryAlarm_reply_state, byte_order);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 2, ENC_NA);
    *offsetp += 2;
}

static void syncSetPriority(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_sync_SetPriority_id, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_sync_SetPriority_priority, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}

static void syncGetPriority(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_sync_GetPriority_id, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}
static void syncGetPriority_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-GetPriority");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (sync-GetPriority)", sequence_number);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_sync_GetPriority_reply_priority, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}

static void syncCreateFence(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_sync_CreateFence_drawable, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_sync_CreateFence_fence, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_sync_CreateFence_initially_triggered, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
}

static void syncTriggerFence(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_sync_TriggerFence_fence, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}

static void syncResetFence(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_sync_ResetFence_fence, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}

static void syncDestroyFence(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_sync_DestroyFence_fence, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}

static void syncQueryFence(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_sync_QueryFence_fence, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}
static void syncQueryFence_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-QueryFence");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (sync-QueryFence)", sequence_number);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_sync_QueryFence_reply_triggered, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 23, ENC_NA);
    *offsetp += 23;
}

static void syncAwaitFence(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    listOfCard32(tvb, offsetp, t, hf_x11_sync_AwaitFence_fence_list, hf_x11_sync_AwaitFence_fence_list_item, (length - 4) / 4, byte_order);
}

static void syncAlarmNotify(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order)
{
    proto_tree_add_item(t, hf_x11_sync_AlarmNotify_kind, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    CARD16(event_sequencenumber);
    proto_tree_add_item(t, hf_x11_sync_AlarmNotify_alarm, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    struct_sync_INT64(tvb, offsetp, t, byte_order, 1);
    struct_sync_INT64(tvb, offsetp, t, byte_order, 1);
    proto_tree_add_item(t, hf_x11_sync_AlarmNotify_timestamp, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    field8(tvb, offsetp, t, hf_x11_sync_AlarmNotify_state, byte_order);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 3, ENC_NA);
    *offsetp += 3;
}

static const value_string sync_extension_minor[] = {
    { 0, "Initialize" },
    { 1, "ListSystemCounters" },
    { 2, "CreateCounter" },
    { 3, "SetCounter" },
    { 4, "ChangeCounter" },
    { 5, "QueryCounter" },
    { 6, "DestroyCounter" },
    { 7, "Await" },
    { 8, "CreateAlarm" },
    { 9, "ChangeAlarm" },
    { 10, "QueryAlarm" },
    { 11, "DestroyAlarm" },
    { 12, "SetPriority" },
    { 13, "GetPriority" },
    { 14, "CreateFence" },
    { 15, "TriggerFence" },
    { 16, "ResetFence" },
    { 17, "DestroyFence" },
    { 18, "QueryFence" },
    { 19, "AwaitFence" },
    { 0, NULL }
};
static const x11_event_info sync_events[] = {
    { "sync-AlarmNotify", syncAlarmNotify },
    { NULL, NULL }
};
static const x11_reply_info sync_replies[] = {
    { 0, syncInitialize_Reply },
    { 1, syncListSystemCounters_Reply },
    { 5, syncQueryCounter_Reply },
    { 10, syncQueryAlarm_Reply },
    { 13, syncGetPriority_Reply },
    { 18, syncQueryFence_Reply },
    { 0, NULL }
};

static void dispatch_sync(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int minor, length;
    minor = CARD8(sync_extension_minor);
    length = REQUEST_LENGTH();

    col_append_fstr(pinfo->cinfo, COL_INFO, "-%s",
                          val_to_str(minor, sync_extension_minor,
                                     "<Unknown opcode %d>"));
    switch (minor) {
    case 0:
        syncInitialize(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 1:
        syncListSystemCounters(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 2:
        syncCreateCounter(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 3:
        syncSetCounter(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 4:
        syncChangeCounter(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 5:
        syncQueryCounter(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 6:
        syncDestroyCounter(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 7:
        syncAwait(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 8:
        syncCreateAlarm(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 9:
        syncChangeAlarm(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 10:
        syncQueryAlarm(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 11:
        syncDestroyAlarm(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 12:
        syncSetPriority(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 13:
        syncGetPriority(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 14:
        syncCreateFence(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 15:
        syncTriggerFence(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 16:
        syncResetFence(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 17:
        syncDestroyFence(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 18:
        syncQueryFence(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 19:
        syncAwaitFence(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    /* No need for a default case here, since Unknown is printed above,
       and UNDECODED() is taken care of by dissect_x11_request */
    }
}

static void register_sync(void)
{
    set_handler("SYNC", dispatch_sync, sync_errors, sync_events, NULL, sync_replies);
}

static void xc_miscGetVersion(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_xc_misc_GetVersion_client_major_version, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_xc_misc_GetVersion_client_minor_version, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
}
static void xc_miscGetVersion_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-GetVersion");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (xc_misc-GetVersion)", sequence_number);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xc_misc_GetVersion_reply_server_major_version, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_xc_misc_GetVersion_reply_server_minor_version, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
}

static void xc_miscGetXIDRange(tvbuff_t *tvb _U_, packet_info *pinfo _U_, int *offsetp _U_, proto_tree *t _U_, unsigned byte_order _U_, int length _U_)
{
}
static void xc_miscGetXIDRange_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-GetXIDRange");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (xc_misc-GetXIDRange)", sequence_number);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xc_misc_GetXIDRange_reply_start_id, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xc_misc_GetXIDRange_reply_count, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}

static void xc_miscGetXIDList(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_xc_misc_GetXIDList_count, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}
static void xc_miscGetXIDList_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;
    int f_ids_len;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-GetXIDList");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (xc_misc-GetXIDList)", sequence_number);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    f_ids_len = tvb_get_uint32(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_xc_misc_GetXIDList_reply_ids_len, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 20, ENC_NA);
    *offsetp += 20;
    listOfCard32(tvb, offsetp, t, hf_x11_xc_misc_GetXIDList_reply_ids, hf_x11_xc_misc_GetXIDList_reply_ids_item, f_ids_len, byte_order);
}
static const value_string xc_misc_extension_minor[] = {
    { 0, "GetVersion" },
    { 1, "GetXIDRange" },
    { 2, "GetXIDList" },
    { 0, NULL }
};
static const x11_event_info xc_misc_events[] = {
    { NULL, NULL }
};
static const x11_reply_info xc_misc_replies[] = {
    { 0, xc_miscGetVersion_Reply },
    { 1, xc_miscGetXIDRange_Reply },
    { 2, xc_miscGetXIDList_Reply },
    { 0, NULL }
};

static void dispatch_xc_misc(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int minor, length;
    minor = CARD8(xc_misc_extension_minor);
    length = REQUEST_LENGTH();

    col_append_fstr(pinfo->cinfo, COL_INFO, "-%s",
                          val_to_str(minor, xc_misc_extension_minor,
                                     "<Unknown opcode %d>"));
    switch (minor) {
    case 0:
        xc_miscGetVersion(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 1:
        xc_miscGetXIDRange(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 2:
        xc_miscGetXIDList(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    /* No need for a default case here, since Unknown is printed above,
       and UNDECODED() is taken care of by dissect_x11_request */
    }
}

static void register_xc_misc(void)
{
    set_handler("XC-MISC", dispatch_xc_misc, xc_misc_errors, xc_misc_events, NULL, xc_misc_replies);
}

static void xevieQueryVersion(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_xevie_QueryVersion_client_major_version, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_xevie_QueryVersion_client_minor_version, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
}
static void xevieQueryVersion_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-QueryVersion");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (xevie-QueryVersion)", sequence_number);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xevie_QueryVersion_reply_server_major_version, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_xevie_QueryVersion_reply_server_minor_version, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 20, ENC_NA);
    *offsetp += 20;
}

static void xevieStart(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_xevie_Start_screen, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}
static void xevieStart_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-Start");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (xevie-Start)", sequence_number);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 24, ENC_NA);
    *offsetp += 24;
}

static void xevieEnd(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_xevie_End_cmap, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}
static void xevieEnd_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-End");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (xevie-End)", sequence_number);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 24, ENC_NA);
    *offsetp += 24;
}

static void struct_xevie_Event(tvbuff_t *tvb, int *offsetp, proto_tree *root, unsigned byte_order _U_, int count)
{
    int i;
    for (i = 0; i < count; i++) {
        proto_item *item;
        proto_tree *t;

        item = proto_tree_add_item(root, hf_x11_struct_xevie_Event, tvb, *offsetp, 32, ENC_NA);
        t = proto_item_add_subtree(item, ett_x11_rectangle);
        proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 32, ENC_NA);
        *offsetp += 32;
    }
}

static void xevieSend(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    struct_xevie_Event(tvb, offsetp, t, byte_order, 1);
    proto_tree_add_item(t, hf_x11_xevie_Send_data_type, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 64, ENC_NA);
    *offsetp += 64;
}
static void xevieSend_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-Send");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (xevie-Send)", sequence_number);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 24, ENC_NA);
    *offsetp += 24;
}

static void xevieSelectInput(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_xevie_SelectInput_event_mask, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}
static void xevieSelectInput_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-SelectInput");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (xevie-SelectInput)", sequence_number);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 24, ENC_NA);
    *offsetp += 24;
}
static const value_string xevie_extension_minor[] = {
    { 0, "QueryVersion" },
    { 1, "Start" },
    { 2, "End" },
    { 3, "Send" },
    { 4, "SelectInput" },
    { 0, NULL }
};
static const x11_event_info xevie_events[] = {
    { NULL, NULL }
};
static const x11_reply_info xevie_replies[] = {
    { 0, xevieQueryVersion_Reply },
    { 1, xevieStart_Reply },
    { 2, xevieEnd_Reply },
    { 3, xevieSend_Reply },
    { 4, xevieSelectInput_Reply },
    { 0, NULL }
};

static void dispatch_xevie(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int minor, length;
    minor = CARD8(xevie_extension_minor);
    length = REQUEST_LENGTH();

    col_append_fstr(pinfo->cinfo, COL_INFO, "-%s",
                          val_to_str(minor, xevie_extension_minor,
                                     "<Unknown opcode %d>"));
    switch (minor) {
    case 0:
        xevieQueryVersion(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 1:
        xevieStart(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 2:
        xevieEnd(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 3:
        xevieSend(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 4:
        xevieSelectInput(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    /* No need for a default case here, since Unknown is printed above,
       and UNDECODED() is taken care of by dissect_x11_request */
    }
}

static void register_xevie(void)
{
    set_handler("XEVIE", dispatch_xevie, xevie_errors, xevie_events, NULL, xevie_replies);
}

static void struct_xf86dri_DrmClipRect(tvbuff_t *tvb, int *offsetp, proto_tree *root, unsigned byte_order _U_, int count)
{
    int i;
    for (i = 0; i < count; i++) {
        proto_item *item;
        proto_tree *t;

        item = proto_tree_add_item(root, hf_x11_struct_xf86dri_DrmClipRect, tvb, *offsetp, 8, ENC_NA);
        t = proto_item_add_subtree(item, ett_x11_rectangle);
        proto_tree_add_item(t, hf_x11_struct_xf86dri_DrmClipRect_x1, tvb, *offsetp, 2, byte_order);
        *offsetp += 2;
        proto_tree_add_item(t, hf_x11_struct_xf86dri_DrmClipRect_y1, tvb, *offsetp, 2, byte_order);
        *offsetp += 2;
        proto_tree_add_item(t, hf_x11_struct_xf86dri_DrmClipRect_x2, tvb, *offsetp, 2, byte_order);
        *offsetp += 2;
        proto_tree_add_item(t, hf_x11_struct_xf86dri_DrmClipRect_x3, tvb, *offsetp, 2, byte_order);
        *offsetp += 2;
    }
}

static void xf86driQueryVersion(tvbuff_t *tvb _U_, packet_info *pinfo _U_, int *offsetp _U_, proto_tree *t _U_, unsigned byte_order _U_, int length _U_)
{
}
static void xf86driQueryVersion_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-QueryVersion");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (xf86dri-QueryVersion)", sequence_number);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xf86dri_QueryVersion_reply_dri_major_version, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_xf86dri_QueryVersion_reply_dri_minor_version, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_xf86dri_QueryVersion_reply_dri_minor_patch, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}

static void xf86driQueryDirectRenderingCapable(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_xf86dri_QueryDirectRenderingCapable_screen, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}
static void xf86driQueryDirectRenderingCapable_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-QueryDirectRenderingCapable");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (xf86dri-QueryDirectRenderingCapable)", sequence_number);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xf86dri_QueryDirectRenderingCapable_reply_is_capable, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
}

static void xf86driOpenConnection(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_xf86dri_OpenConnection_screen, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}
static void xf86driOpenConnection_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;
    int f_bus_id_len;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-OpenConnection");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (xf86dri-OpenConnection)", sequence_number);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xf86dri_OpenConnection_reply_sarea_handle_low, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xf86dri_OpenConnection_reply_sarea_handle_high, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    f_bus_id_len = tvb_get_uint32(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_xf86dri_OpenConnection_reply_bus_id_len, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 12, ENC_NA);
    *offsetp += 12;
    listOfByte(tvb, offsetp, t, hf_x11_xf86dri_OpenConnection_reply_bus_id, f_bus_id_len, byte_order);
}

static void xf86driCloseConnection(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_xf86dri_CloseConnection_screen, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}

static void xf86driGetClientDriverName(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_xf86dri_GetClientDriverName_screen, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}
static void xf86driGetClientDriverName_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;
    int f_client_driver_name_len;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-GetClientDriverName");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (xf86dri-GetClientDriverName)", sequence_number);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xf86dri_GetClientDriverName_reply_client_driver_major_version, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xf86dri_GetClientDriverName_reply_client_driver_minor_version, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xf86dri_GetClientDriverName_reply_client_driver_patch_version, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    f_client_driver_name_len = tvb_get_uint32(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_xf86dri_GetClientDriverName_reply_client_driver_name_len, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 8, ENC_NA);
    *offsetp += 8;
    listOfByte(tvb, offsetp, t, hf_x11_xf86dri_GetClientDriverName_reply_client_driver_name, f_client_driver_name_len, byte_order);
}

static void xf86driCreateContext(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_xf86dri_CreateContext_screen, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xf86dri_CreateContext_visual, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xf86dri_CreateContext_context, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}
static void xf86driCreateContext_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-CreateContext");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (xf86dri-CreateContext)", sequence_number);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xf86dri_CreateContext_reply_hw_context, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}

static void xf86driDestroyContext(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_xf86dri_DestroyContext_screen, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xf86dri_DestroyContext_context, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}

static void xf86driCreateDrawable(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_xf86dri_CreateDrawable_screen, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xf86dri_CreateDrawable_drawable, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}
static void xf86driCreateDrawable_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-CreateDrawable");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (xf86dri-CreateDrawable)", sequence_number);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xf86dri_CreateDrawable_reply_hw_drawable_handle, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}

static void xf86driDestroyDrawable(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_xf86dri_DestroyDrawable_screen, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xf86dri_DestroyDrawable_drawable, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}

static void xf86driGetDrawableInfo(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_xf86dri_GetDrawableInfo_screen, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xf86dri_GetDrawableInfo_drawable, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}
static void xf86driGetDrawableInfo_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;
    int f_num_clip_rects;
    int f_num_back_clip_rects;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-GetDrawableInfo");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (xf86dri-GetDrawableInfo)", sequence_number);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xf86dri_GetDrawableInfo_reply_drawable_table_index, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xf86dri_GetDrawableInfo_reply_drawable_table_stamp, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xf86dri_GetDrawableInfo_reply_drawable_origin_X, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_xf86dri_GetDrawableInfo_reply_drawable_origin_Y, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_xf86dri_GetDrawableInfo_reply_drawable_size_W, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_xf86dri_GetDrawableInfo_reply_drawable_size_H, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    f_num_clip_rects = tvb_get_uint32(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_xf86dri_GetDrawableInfo_reply_num_clip_rects, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xf86dri_GetDrawableInfo_reply_back_x, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_xf86dri_GetDrawableInfo_reply_back_y, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    f_num_back_clip_rects = tvb_get_uint32(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_xf86dri_GetDrawableInfo_reply_num_back_clip_rects, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    struct_xf86dri_DrmClipRect(tvb, offsetp, t, byte_order, f_num_clip_rects);
    struct_xf86dri_DrmClipRect(tvb, offsetp, t, byte_order, f_num_back_clip_rects);
}

static void xf86driGetDeviceInfo(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_xf86dri_GetDeviceInfo_screen, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}
static void xf86driGetDeviceInfo_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;
    int f_device_private_size;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-GetDeviceInfo");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (xf86dri-GetDeviceInfo)", sequence_number);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xf86dri_GetDeviceInfo_reply_framebuffer_handle_low, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xf86dri_GetDeviceInfo_reply_framebuffer_handle_high, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xf86dri_GetDeviceInfo_reply_framebuffer_origin_offset, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xf86dri_GetDeviceInfo_reply_framebuffer_size, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xf86dri_GetDeviceInfo_reply_framebuffer_stride, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    f_device_private_size = tvb_get_uint32(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_xf86dri_GetDeviceInfo_reply_device_private_size, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    listOfCard32(tvb, offsetp, t, hf_x11_xf86dri_GetDeviceInfo_reply_device_private, hf_x11_xf86dri_GetDeviceInfo_reply_device_private_item, f_device_private_size, byte_order);
}

static void xf86driAuthConnection(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_xf86dri_AuthConnection_screen, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xf86dri_AuthConnection_magic, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}
static void xf86driAuthConnection_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-AuthConnection");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (xf86dri-AuthConnection)", sequence_number);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xf86dri_AuthConnection_reply_authenticated, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}
static const value_string xf86dri_extension_minor[] = {
    { 0, "QueryVersion" },
    { 1, "QueryDirectRenderingCapable" },
    { 2, "OpenConnection" },
    { 3, "CloseConnection" },
    { 4, "GetClientDriverName" },
    { 5, "CreateContext" },
    { 6, "DestroyContext" },
    { 7, "CreateDrawable" },
    { 8, "DestroyDrawable" },
    { 9, "GetDrawableInfo" },
    { 10, "GetDeviceInfo" },
    { 11, "AuthConnection" },
    { 0, NULL }
};
static const x11_event_info xf86dri_events[] = {
    { NULL, NULL }
};
static const x11_reply_info xf86dri_replies[] = {
    { 0, xf86driQueryVersion_Reply },
    { 1, xf86driQueryDirectRenderingCapable_Reply },
    { 2, xf86driOpenConnection_Reply },
    { 4, xf86driGetClientDriverName_Reply },
    { 5, xf86driCreateContext_Reply },
    { 7, xf86driCreateDrawable_Reply },
    { 9, xf86driGetDrawableInfo_Reply },
    { 10, xf86driGetDeviceInfo_Reply },
    { 11, xf86driAuthConnection_Reply },
    { 0, NULL }
};

static void dispatch_xf86dri(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int minor, length;
    minor = CARD8(xf86dri_extension_minor);
    length = REQUEST_LENGTH();

    col_append_fstr(pinfo->cinfo, COL_INFO, "-%s",
                          val_to_str(minor, xf86dri_extension_minor,
                                     "<Unknown opcode %d>"));
    switch (minor) {
    case 0:
        xf86driQueryVersion(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 1:
        xf86driQueryDirectRenderingCapable(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 2:
        xf86driOpenConnection(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 3:
        xf86driCloseConnection(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 4:
        xf86driGetClientDriverName(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 5:
        xf86driCreateContext(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 6:
        xf86driDestroyContext(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 7:
        xf86driCreateDrawable(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 8:
        xf86driDestroyDrawable(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 9:
        xf86driGetDrawableInfo(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 10:
        xf86driGetDeviceInfo(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 11:
        xf86driAuthConnection(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    /* No need for a default case here, since Unknown is printed above,
       and UNDECODED() is taken care of by dissect_x11_request */
    }
}

static void register_xf86dri(void)
{
    set_handler("XFree86-DRI", dispatch_xf86dri, xf86dri_errors, xf86dri_events, NULL, xf86dri_replies);
}

static void struct_xf86vidmode_ModeInfo(tvbuff_t *tvb, int *offsetp, proto_tree *root, unsigned byte_order _U_, int count)
{
    int i;
    for (i = 0; i < count; i++) {
        proto_item *item;
        proto_tree *t;

        item = proto_tree_add_item(root, hf_x11_struct_xf86vidmode_ModeInfo, tvb, *offsetp, 48, ENC_NA);
        t = proto_item_add_subtree(item, ett_x11_rectangle);
        proto_tree_add_item(t, hf_x11_struct_xf86vidmode_ModeInfo_dotclock, tvb, *offsetp, 4, byte_order);
        *offsetp += 4;
        proto_tree_add_item(t, hf_x11_struct_xf86vidmode_ModeInfo_hdisplay, tvb, *offsetp, 2, byte_order);
        *offsetp += 2;
        proto_tree_add_item(t, hf_x11_struct_xf86vidmode_ModeInfo_hsyncstart, tvb, *offsetp, 2, byte_order);
        *offsetp += 2;
        proto_tree_add_item(t, hf_x11_struct_xf86vidmode_ModeInfo_hsyncend, tvb, *offsetp, 2, byte_order);
        *offsetp += 2;
        proto_tree_add_item(t, hf_x11_struct_xf86vidmode_ModeInfo_htotal, tvb, *offsetp, 2, byte_order);
        *offsetp += 2;
        proto_tree_add_item(t, hf_x11_struct_xf86vidmode_ModeInfo_hskew, tvb, *offsetp, 4, byte_order);
        *offsetp += 4;
        proto_tree_add_item(t, hf_x11_struct_xf86vidmode_ModeInfo_vdisplay, tvb, *offsetp, 2, byte_order);
        *offsetp += 2;
        proto_tree_add_item(t, hf_x11_struct_xf86vidmode_ModeInfo_vsyncstart, tvb, *offsetp, 2, byte_order);
        *offsetp += 2;
        proto_tree_add_item(t, hf_x11_struct_xf86vidmode_ModeInfo_vsyncend, tvb, *offsetp, 2, byte_order);
        *offsetp += 2;
        proto_tree_add_item(t, hf_x11_struct_xf86vidmode_ModeInfo_vtotal, tvb, *offsetp, 2, byte_order);
        *offsetp += 2;
        proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 4, ENC_NA);
        *offsetp += 4;
        {
            static int* const flags_bits [] = {
                &hf_x11_struct_xf86vidmode_ModeInfo_flags_mask_Positive_HSync,
                &hf_x11_struct_xf86vidmode_ModeInfo_flags_mask_Negative_HSync,
                &hf_x11_struct_xf86vidmode_ModeInfo_flags_mask_Positive_VSync,
                &hf_x11_struct_xf86vidmode_ModeInfo_flags_mask_Negative_VSync,
                &hf_x11_struct_xf86vidmode_ModeInfo_flags_mask_Interlace,
                &hf_x11_struct_xf86vidmode_ModeInfo_flags_mask_Composite_Sync,
                &hf_x11_struct_xf86vidmode_ModeInfo_flags_mask_Positive_CSync,
                &hf_x11_struct_xf86vidmode_ModeInfo_flags_mask_Negative_CSync,
                &hf_x11_struct_xf86vidmode_ModeInfo_flags_mask_HSkew,
                &hf_x11_struct_xf86vidmode_ModeInfo_flags_mask_Broadcast,
                &hf_x11_struct_xf86vidmode_ModeInfo_flags_mask_Pixmux,
                &hf_x11_struct_xf86vidmode_ModeInfo_flags_mask_Double_Clock,
                &hf_x11_struct_xf86vidmode_ModeInfo_flags_mask_Half_Clock,
                NULL
            };
            proto_tree_add_bitmask(t,  tvb, *offsetp, hf_x11_struct_xf86vidmode_ModeInfo_flags, ett_x11_rectangle, flags_bits, byte_order);
        }
        *offsetp += 4;
        proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 12, ENC_NA);
        *offsetp += 12;
        proto_tree_add_item(t, hf_x11_struct_xf86vidmode_ModeInfo_privsize, tvb, *offsetp, 4, byte_order);
        *offsetp += 4;
    }
}

static void xf86vidmodeQueryVersion(tvbuff_t *tvb _U_, packet_info *pinfo _U_, int *offsetp _U_, proto_tree *t _U_, unsigned byte_order _U_, int length _U_)
{
}
static void xf86vidmodeQueryVersion_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-QueryVersion");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (xf86vidmode-QueryVersion)", sequence_number);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xf86vidmode_QueryVersion_reply_major_version, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_xf86vidmode_QueryVersion_reply_minor_version, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
}

static void xf86vidmodeGetModeLine(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_xf86vidmode_GetModeLine_screen, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 2, ENC_NA);
    *offsetp += 2;
}
static void xf86vidmodeGetModeLine_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;
    int f_privsize;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-GetModeLine");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (xf86vidmode-GetModeLine)", sequence_number);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xf86vidmode_GetModeLine_reply_dotclock, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xf86vidmode_GetModeLine_reply_hdisplay, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_xf86vidmode_GetModeLine_reply_hsyncstart, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_xf86vidmode_GetModeLine_reply_hsyncend, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_xf86vidmode_GetModeLine_reply_htotal, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_xf86vidmode_GetModeLine_reply_hskew, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_xf86vidmode_GetModeLine_reply_vdisplay, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_xf86vidmode_GetModeLine_reply_vsyncstart, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_xf86vidmode_GetModeLine_reply_vsyncend, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_xf86vidmode_GetModeLine_reply_vtotal, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 2, ENC_NA);
    *offsetp += 2;
    {
        static int* const flags_bits [] = {
        &hf_x11_xf86vidmode_GetModeLine_reply_flags_mask_Positive_HSync,
        &hf_x11_xf86vidmode_GetModeLine_reply_flags_mask_Negative_HSync,
        &hf_x11_xf86vidmode_GetModeLine_reply_flags_mask_Positive_VSync,
        &hf_x11_xf86vidmode_GetModeLine_reply_flags_mask_Negative_VSync,
        &hf_x11_xf86vidmode_GetModeLine_reply_flags_mask_Interlace,
        &hf_x11_xf86vidmode_GetModeLine_reply_flags_mask_Composite_Sync,
        &hf_x11_xf86vidmode_GetModeLine_reply_flags_mask_Positive_CSync,
        &hf_x11_xf86vidmode_GetModeLine_reply_flags_mask_Negative_CSync,
        &hf_x11_xf86vidmode_GetModeLine_reply_flags_mask_HSkew,
        &hf_x11_xf86vidmode_GetModeLine_reply_flags_mask_Broadcast,
        &hf_x11_xf86vidmode_GetModeLine_reply_flags_mask_Pixmux,
        &hf_x11_xf86vidmode_GetModeLine_reply_flags_mask_Double_Clock,
        &hf_x11_xf86vidmode_GetModeLine_reply_flags_mask_Half_Clock,
        NULL
        };
        proto_tree_add_bitmask(t,  tvb, *offsetp, hf_x11_xf86vidmode_GetModeLine_reply_flags, ett_x11_rectangle, flags_bits, byte_order);
    }
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 12, ENC_NA);
    *offsetp += 12;
    f_privsize = tvb_get_uint32(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_xf86vidmode_GetModeLine_reply_privsize, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    listOfByte(tvb, offsetp, t, hf_x11_xf86vidmode_GetModeLine_reply_private, f_privsize, byte_order);
}

static void xf86vidmodeModModeLine(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    int f_privsize;
    proto_tree_add_item(t, hf_x11_xf86vidmode_ModModeLine_screen, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xf86vidmode_ModModeLine_hdisplay, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_xf86vidmode_ModModeLine_hsyncstart, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_xf86vidmode_ModModeLine_hsyncend, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_xf86vidmode_ModModeLine_htotal, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_xf86vidmode_ModModeLine_hskew, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_xf86vidmode_ModModeLine_vdisplay, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_xf86vidmode_ModModeLine_vsyncstart, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_xf86vidmode_ModModeLine_vsyncend, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_xf86vidmode_ModModeLine_vtotal, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 2, ENC_NA);
    *offsetp += 2;
    {
        static int* const flags_bits [] = {
        &hf_x11_xf86vidmode_ModModeLine_flags_mask_Positive_HSync,
        &hf_x11_xf86vidmode_ModModeLine_flags_mask_Negative_HSync,
        &hf_x11_xf86vidmode_ModModeLine_flags_mask_Positive_VSync,
        &hf_x11_xf86vidmode_ModModeLine_flags_mask_Negative_VSync,
        &hf_x11_xf86vidmode_ModModeLine_flags_mask_Interlace,
        &hf_x11_xf86vidmode_ModModeLine_flags_mask_Composite_Sync,
        &hf_x11_xf86vidmode_ModModeLine_flags_mask_Positive_CSync,
        &hf_x11_xf86vidmode_ModModeLine_flags_mask_Negative_CSync,
        &hf_x11_xf86vidmode_ModModeLine_flags_mask_HSkew,
        &hf_x11_xf86vidmode_ModModeLine_flags_mask_Broadcast,
        &hf_x11_xf86vidmode_ModModeLine_flags_mask_Pixmux,
        &hf_x11_xf86vidmode_ModModeLine_flags_mask_Double_Clock,
        &hf_x11_xf86vidmode_ModModeLine_flags_mask_Half_Clock,
        NULL
        };
        proto_tree_add_bitmask(t,  tvb, *offsetp, hf_x11_xf86vidmode_ModModeLine_flags, ett_x11_rectangle, flags_bits, byte_order);
    }
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 12, ENC_NA);
    *offsetp += 12;
    f_privsize = tvb_get_uint32(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_xf86vidmode_ModModeLine_privsize, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    listOfByte(tvb, offsetp, t, hf_x11_xf86vidmode_ModModeLine_private, f_privsize, byte_order);
    length -= f_privsize * 1;
}

static void xf86vidmodeSwitchMode(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_xf86vidmode_SwitchMode_screen, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_xf86vidmode_SwitchMode_zoom, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
}

static void xf86vidmodeGetMonitor(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_xf86vidmode_GetMonitor_screen, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 2, ENC_NA);
    *offsetp += 2;
}
static void xf86vidmodeGetMonitor_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;
    int f_vendor_length;
    int f_model_length;
    int f_num_hsync;
    int f_num_vsync;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-GetMonitor");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (xf86vidmode-GetMonitor)", sequence_number);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    f_vendor_length = tvb_get_uint8(tvb, *offsetp);
    proto_tree_add_item(t, hf_x11_xf86vidmode_GetMonitor_reply_vendor_length, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    f_model_length = tvb_get_uint8(tvb, *offsetp);
    proto_tree_add_item(t, hf_x11_xf86vidmode_GetMonitor_reply_model_length, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    f_num_hsync = tvb_get_uint8(tvb, *offsetp);
    proto_tree_add_item(t, hf_x11_xf86vidmode_GetMonitor_reply_num_hsync, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    f_num_vsync = tvb_get_uint8(tvb, *offsetp);
    proto_tree_add_item(t, hf_x11_xf86vidmode_GetMonitor_reply_num_vsync, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 20, ENC_NA);
    *offsetp += 20;
    listOfCard32(tvb, offsetp, t, hf_x11_xf86vidmode_GetMonitor_reply_hsync, hf_x11_xf86vidmode_GetMonitor_reply_hsync_item, f_num_hsync, byte_order);
    listOfCard32(tvb, offsetp, t, hf_x11_xf86vidmode_GetMonitor_reply_vsync, hf_x11_xf86vidmode_GetMonitor_reply_vsync_item, f_num_vsync, byte_order);
    listOfByte(tvb, offsetp, t, hf_x11_xf86vidmode_GetMonitor_reply_vendor, f_vendor_length, byte_order);
    listOfByte(tvb, offsetp, t, hf_x11_xf86vidmode_GetMonitor_reply_alignment_pad, (((f_vendor_length + 3) & (~3)) - f_vendor_length), byte_order);
    listOfByte(tvb, offsetp, t, hf_x11_xf86vidmode_GetMonitor_reply_model, f_model_length, byte_order);
}

static void xf86vidmodeLockModeSwitch(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_xf86vidmode_LockModeSwitch_screen, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_xf86vidmode_LockModeSwitch_lock, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
}

static void xf86vidmodeGetAllModeLines(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_xf86vidmode_GetAllModeLines_screen, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 2, ENC_NA);
    *offsetp += 2;
}
static void xf86vidmodeGetAllModeLines_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;
    int f_modecount;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-GetAllModeLines");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (xf86vidmode-GetAllModeLines)", sequence_number);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    f_modecount = tvb_get_uint32(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_xf86vidmode_GetAllModeLines_reply_modecount, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 20, ENC_NA);
    *offsetp += 20;
    struct_xf86vidmode_ModeInfo(tvb, offsetp, t, byte_order, f_modecount);
}

static void xf86vidmodeAddModeLine(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    int f_privsize;
    proto_tree_add_item(t, hf_x11_xf86vidmode_AddModeLine_screen, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xf86vidmode_AddModeLine_dotclock, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xf86vidmode_AddModeLine_hdisplay, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_xf86vidmode_AddModeLine_hsyncstart, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_xf86vidmode_AddModeLine_hsyncend, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_xf86vidmode_AddModeLine_htotal, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_xf86vidmode_AddModeLine_hskew, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_xf86vidmode_AddModeLine_vdisplay, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_xf86vidmode_AddModeLine_vsyncstart, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_xf86vidmode_AddModeLine_vsyncend, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_xf86vidmode_AddModeLine_vtotal, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 2, ENC_NA);
    *offsetp += 2;
    {
        static int* const flags_bits [] = {
        &hf_x11_xf86vidmode_AddModeLine_flags_mask_Positive_HSync,
        &hf_x11_xf86vidmode_AddModeLine_flags_mask_Negative_HSync,
        &hf_x11_xf86vidmode_AddModeLine_flags_mask_Positive_VSync,
        &hf_x11_xf86vidmode_AddModeLine_flags_mask_Negative_VSync,
        &hf_x11_xf86vidmode_AddModeLine_flags_mask_Interlace,
        &hf_x11_xf86vidmode_AddModeLine_flags_mask_Composite_Sync,
        &hf_x11_xf86vidmode_AddModeLine_flags_mask_Positive_CSync,
        &hf_x11_xf86vidmode_AddModeLine_flags_mask_Negative_CSync,
        &hf_x11_xf86vidmode_AddModeLine_flags_mask_HSkew,
        &hf_x11_xf86vidmode_AddModeLine_flags_mask_Broadcast,
        &hf_x11_xf86vidmode_AddModeLine_flags_mask_Pixmux,
        &hf_x11_xf86vidmode_AddModeLine_flags_mask_Double_Clock,
        &hf_x11_xf86vidmode_AddModeLine_flags_mask_Half_Clock,
        NULL
        };
        proto_tree_add_bitmask(t,  tvb, *offsetp, hf_x11_xf86vidmode_AddModeLine_flags, ett_x11_rectangle, flags_bits, byte_order);
    }
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 12, ENC_NA);
    *offsetp += 12;
    f_privsize = tvb_get_uint32(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_xf86vidmode_AddModeLine_privsize, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xf86vidmode_AddModeLine_after_dotclock, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xf86vidmode_AddModeLine_after_hdisplay, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_xf86vidmode_AddModeLine_after_hsyncstart, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_xf86vidmode_AddModeLine_after_hsyncend, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_xf86vidmode_AddModeLine_after_htotal, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_xf86vidmode_AddModeLine_after_hskew, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_xf86vidmode_AddModeLine_after_vdisplay, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_xf86vidmode_AddModeLine_after_vsyncstart, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_xf86vidmode_AddModeLine_after_vsyncend, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_xf86vidmode_AddModeLine_after_vtotal, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 2, ENC_NA);
    *offsetp += 2;
    {
        static int* const after_flags_bits [] = {
        &hf_x11_xf86vidmode_AddModeLine_after_flags_mask_Positive_HSync,
        &hf_x11_xf86vidmode_AddModeLine_after_flags_mask_Negative_HSync,
        &hf_x11_xf86vidmode_AddModeLine_after_flags_mask_Positive_VSync,
        &hf_x11_xf86vidmode_AddModeLine_after_flags_mask_Negative_VSync,
        &hf_x11_xf86vidmode_AddModeLine_after_flags_mask_Interlace,
        &hf_x11_xf86vidmode_AddModeLine_after_flags_mask_Composite_Sync,
        &hf_x11_xf86vidmode_AddModeLine_after_flags_mask_Positive_CSync,
        &hf_x11_xf86vidmode_AddModeLine_after_flags_mask_Negative_CSync,
        &hf_x11_xf86vidmode_AddModeLine_after_flags_mask_HSkew,
        &hf_x11_xf86vidmode_AddModeLine_after_flags_mask_Broadcast,
        &hf_x11_xf86vidmode_AddModeLine_after_flags_mask_Pixmux,
        &hf_x11_xf86vidmode_AddModeLine_after_flags_mask_Double_Clock,
        &hf_x11_xf86vidmode_AddModeLine_after_flags_mask_Half_Clock,
        NULL
        };
        proto_tree_add_bitmask(t,  tvb, *offsetp, hf_x11_xf86vidmode_AddModeLine_after_flags, ett_x11_rectangle, after_flags_bits, byte_order);
    }
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 12, ENC_NA);
    *offsetp += 12;
    listOfByte(tvb, offsetp, t, hf_x11_xf86vidmode_AddModeLine_private, f_privsize, byte_order);
    length -= f_privsize * 1;
}

static void xf86vidmodeDeleteModeLine(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    int f_privsize;
    proto_tree_add_item(t, hf_x11_xf86vidmode_DeleteModeLine_screen, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xf86vidmode_DeleteModeLine_dotclock, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xf86vidmode_DeleteModeLine_hdisplay, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_xf86vidmode_DeleteModeLine_hsyncstart, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_xf86vidmode_DeleteModeLine_hsyncend, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_xf86vidmode_DeleteModeLine_htotal, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_xf86vidmode_DeleteModeLine_hskew, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_xf86vidmode_DeleteModeLine_vdisplay, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_xf86vidmode_DeleteModeLine_vsyncstart, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_xf86vidmode_DeleteModeLine_vsyncend, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_xf86vidmode_DeleteModeLine_vtotal, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 2, ENC_NA);
    *offsetp += 2;
    {
        static int* const flags_bits [] = {
        &hf_x11_xf86vidmode_DeleteModeLine_flags_mask_Positive_HSync,
        &hf_x11_xf86vidmode_DeleteModeLine_flags_mask_Negative_HSync,
        &hf_x11_xf86vidmode_DeleteModeLine_flags_mask_Positive_VSync,
        &hf_x11_xf86vidmode_DeleteModeLine_flags_mask_Negative_VSync,
        &hf_x11_xf86vidmode_DeleteModeLine_flags_mask_Interlace,
        &hf_x11_xf86vidmode_DeleteModeLine_flags_mask_Composite_Sync,
        &hf_x11_xf86vidmode_DeleteModeLine_flags_mask_Positive_CSync,
        &hf_x11_xf86vidmode_DeleteModeLine_flags_mask_Negative_CSync,
        &hf_x11_xf86vidmode_DeleteModeLine_flags_mask_HSkew,
        &hf_x11_xf86vidmode_DeleteModeLine_flags_mask_Broadcast,
        &hf_x11_xf86vidmode_DeleteModeLine_flags_mask_Pixmux,
        &hf_x11_xf86vidmode_DeleteModeLine_flags_mask_Double_Clock,
        &hf_x11_xf86vidmode_DeleteModeLine_flags_mask_Half_Clock,
        NULL
        };
        proto_tree_add_bitmask(t,  tvb, *offsetp, hf_x11_xf86vidmode_DeleteModeLine_flags, ett_x11_rectangle, flags_bits, byte_order);
    }
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 12, ENC_NA);
    *offsetp += 12;
    f_privsize = tvb_get_uint32(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_xf86vidmode_DeleteModeLine_privsize, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    listOfByte(tvb, offsetp, t, hf_x11_xf86vidmode_DeleteModeLine_private, f_privsize, byte_order);
    length -= f_privsize * 1;
}

static void xf86vidmodeValidateModeLine(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    int f_privsize;
    proto_tree_add_item(t, hf_x11_xf86vidmode_ValidateModeLine_screen, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xf86vidmode_ValidateModeLine_dotclock, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xf86vidmode_ValidateModeLine_hdisplay, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_xf86vidmode_ValidateModeLine_hsyncstart, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_xf86vidmode_ValidateModeLine_hsyncend, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_xf86vidmode_ValidateModeLine_htotal, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_xf86vidmode_ValidateModeLine_hskew, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_xf86vidmode_ValidateModeLine_vdisplay, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_xf86vidmode_ValidateModeLine_vsyncstart, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_xf86vidmode_ValidateModeLine_vsyncend, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_xf86vidmode_ValidateModeLine_vtotal, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 2, ENC_NA);
    *offsetp += 2;
    {
        static int* const flags_bits [] = {
        &hf_x11_xf86vidmode_ValidateModeLine_flags_mask_Positive_HSync,
        &hf_x11_xf86vidmode_ValidateModeLine_flags_mask_Negative_HSync,
        &hf_x11_xf86vidmode_ValidateModeLine_flags_mask_Positive_VSync,
        &hf_x11_xf86vidmode_ValidateModeLine_flags_mask_Negative_VSync,
        &hf_x11_xf86vidmode_ValidateModeLine_flags_mask_Interlace,
        &hf_x11_xf86vidmode_ValidateModeLine_flags_mask_Composite_Sync,
        &hf_x11_xf86vidmode_ValidateModeLine_flags_mask_Positive_CSync,
        &hf_x11_xf86vidmode_ValidateModeLine_flags_mask_Negative_CSync,
        &hf_x11_xf86vidmode_ValidateModeLine_flags_mask_HSkew,
        &hf_x11_xf86vidmode_ValidateModeLine_flags_mask_Broadcast,
        &hf_x11_xf86vidmode_ValidateModeLine_flags_mask_Pixmux,
        &hf_x11_xf86vidmode_ValidateModeLine_flags_mask_Double_Clock,
        &hf_x11_xf86vidmode_ValidateModeLine_flags_mask_Half_Clock,
        NULL
        };
        proto_tree_add_bitmask(t,  tvb, *offsetp, hf_x11_xf86vidmode_ValidateModeLine_flags, ett_x11_rectangle, flags_bits, byte_order);
    }
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 12, ENC_NA);
    *offsetp += 12;
    f_privsize = tvb_get_uint32(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_xf86vidmode_ValidateModeLine_privsize, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    listOfByte(tvb, offsetp, t, hf_x11_xf86vidmode_ValidateModeLine_private, f_privsize, byte_order);
    length -= f_privsize * 1;
}
static void xf86vidmodeValidateModeLine_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-ValidateModeLine");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (xf86vidmode-ValidateModeLine)", sequence_number);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xf86vidmode_ValidateModeLine_reply_status, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 20, ENC_NA);
    *offsetp += 20;
}

static void xf86vidmodeSwitchToMode(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    int f_privsize;
    proto_tree_add_item(t, hf_x11_xf86vidmode_SwitchToMode_screen, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xf86vidmode_SwitchToMode_dotclock, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xf86vidmode_SwitchToMode_hdisplay, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_xf86vidmode_SwitchToMode_hsyncstart, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_xf86vidmode_SwitchToMode_hsyncend, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_xf86vidmode_SwitchToMode_htotal, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_xf86vidmode_SwitchToMode_hskew, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_xf86vidmode_SwitchToMode_vdisplay, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_xf86vidmode_SwitchToMode_vsyncstart, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_xf86vidmode_SwitchToMode_vsyncend, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_xf86vidmode_SwitchToMode_vtotal, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 2, ENC_NA);
    *offsetp += 2;
    {
        static int* const flags_bits [] = {
        &hf_x11_xf86vidmode_SwitchToMode_flags_mask_Positive_HSync,
        &hf_x11_xf86vidmode_SwitchToMode_flags_mask_Negative_HSync,
        &hf_x11_xf86vidmode_SwitchToMode_flags_mask_Positive_VSync,
        &hf_x11_xf86vidmode_SwitchToMode_flags_mask_Negative_VSync,
        &hf_x11_xf86vidmode_SwitchToMode_flags_mask_Interlace,
        &hf_x11_xf86vidmode_SwitchToMode_flags_mask_Composite_Sync,
        &hf_x11_xf86vidmode_SwitchToMode_flags_mask_Positive_CSync,
        &hf_x11_xf86vidmode_SwitchToMode_flags_mask_Negative_CSync,
        &hf_x11_xf86vidmode_SwitchToMode_flags_mask_HSkew,
        &hf_x11_xf86vidmode_SwitchToMode_flags_mask_Broadcast,
        &hf_x11_xf86vidmode_SwitchToMode_flags_mask_Pixmux,
        &hf_x11_xf86vidmode_SwitchToMode_flags_mask_Double_Clock,
        &hf_x11_xf86vidmode_SwitchToMode_flags_mask_Half_Clock,
        NULL
        };
        proto_tree_add_bitmask(t,  tvb, *offsetp, hf_x11_xf86vidmode_SwitchToMode_flags, ett_x11_rectangle, flags_bits, byte_order);
    }
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 12, ENC_NA);
    *offsetp += 12;
    f_privsize = tvb_get_uint32(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_xf86vidmode_SwitchToMode_privsize, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    listOfByte(tvb, offsetp, t, hf_x11_xf86vidmode_SwitchToMode_private, f_privsize, byte_order);
    length -= f_privsize * 1;
}

static void xf86vidmodeGetViewPort(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_xf86vidmode_GetViewPort_screen, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 2, ENC_NA);
    *offsetp += 2;
}
static void xf86vidmodeGetViewPort_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-GetViewPort");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (xf86vidmode-GetViewPort)", sequence_number);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xf86vidmode_GetViewPort_reply_x, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xf86vidmode_GetViewPort_reply_y, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 16, ENC_NA);
    *offsetp += 16;
}

static void xf86vidmodeSetViewPort(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_xf86vidmode_SetViewPort_screen, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 2, ENC_NA);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_xf86vidmode_SetViewPort_x, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xf86vidmode_SetViewPort_y, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}

static void xf86vidmodeGetDotClocks(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_xf86vidmode_GetDotClocks_screen, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 2, ENC_NA);
    *offsetp += 2;
}
static void xf86vidmodeGetDotClocks_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;
    int f_flags;
    int f_clocks;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-GetDotClocks");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (xf86vidmode-GetDotClocks)", sequence_number);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    f_flags = tvb_get_uint32(tvb, *offsetp, byte_order);
    {
        static int* const flags_bits [] = {
        &hf_x11_xf86vidmode_GetDotClocks_reply_flags_mask_Programable,
        NULL
        };
        proto_tree_add_bitmask(t,  tvb, *offsetp, hf_x11_xf86vidmode_GetDotClocks_reply_flags, ett_x11_rectangle, flags_bits, byte_order);
    }
    *offsetp += 4;
    f_clocks = tvb_get_uint32(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_xf86vidmode_GetDotClocks_reply_clocks, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xf86vidmode_GetDotClocks_reply_maxclocks, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 12, ENC_NA);
    *offsetp += 12;
    listOfCard32(tvb, offsetp, t, hf_x11_xf86vidmode_GetDotClocks_reply_clock, hf_x11_xf86vidmode_GetDotClocks_reply_clock_item, ((1 - (f_flags & 1)) * f_clocks), byte_order);
}

static void xf86vidmodeSetClientVersion(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_xf86vidmode_SetClientVersion_major, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_xf86vidmode_SetClientVersion_minor, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
}

static void xf86vidmodeSetGamma(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_xf86vidmode_SetGamma_screen, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 2, ENC_NA);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_xf86vidmode_SetGamma_red, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xf86vidmode_SetGamma_green, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xf86vidmode_SetGamma_blue, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 12, ENC_NA);
    *offsetp += 12;
}

static void xf86vidmodeGetGamma(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_xf86vidmode_GetGamma_screen, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 26, ENC_NA);
    *offsetp += 26;
}
static void xf86vidmodeGetGamma_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-GetGamma");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (xf86vidmode-GetGamma)", sequence_number);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xf86vidmode_GetGamma_reply_red, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xf86vidmode_GetGamma_reply_green, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xf86vidmode_GetGamma_reply_blue, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 12, ENC_NA);
    *offsetp += 12;
}

static void xf86vidmodeGetGammaRamp(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_xf86vidmode_GetGammaRamp_screen, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_xf86vidmode_GetGammaRamp_size, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
}
static void xf86vidmodeGetGammaRamp_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;
    int f_size;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-GetGammaRamp");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (xf86vidmode-GetGammaRamp)", sequence_number);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    f_size = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_xf86vidmode_GetGammaRamp_reply_size, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 22, ENC_NA);
    *offsetp += 22;
    listOfCard16(tvb, offsetp, t, hf_x11_xf86vidmode_GetGammaRamp_reply_red, hf_x11_xf86vidmode_GetGammaRamp_reply_red_item, ((f_size + 1) & (~1)), byte_order);
    listOfCard16(tvb, offsetp, t, hf_x11_xf86vidmode_GetGammaRamp_reply_green, hf_x11_xf86vidmode_GetGammaRamp_reply_green_item, ((f_size + 1) & (~1)), byte_order);
    listOfCard16(tvb, offsetp, t, hf_x11_xf86vidmode_GetGammaRamp_reply_blue, hf_x11_xf86vidmode_GetGammaRamp_reply_blue_item, ((f_size + 1) & (~1)), byte_order);
}

static void xf86vidmodeSetGammaRamp(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    int f_size;
    proto_tree_add_item(t, hf_x11_xf86vidmode_SetGammaRamp_screen, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    f_size = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_xf86vidmode_SetGammaRamp_size, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    listOfCard16(tvb, offsetp, t, hf_x11_xf86vidmode_SetGammaRamp_red, hf_x11_xf86vidmode_SetGammaRamp_red_item, ((f_size + 1) & (~1)), byte_order);
    length -= ((f_size + 1) & (~1)) * 2;
    listOfCard16(tvb, offsetp, t, hf_x11_xf86vidmode_SetGammaRamp_green, hf_x11_xf86vidmode_SetGammaRamp_green_item, ((f_size + 1) & (~1)), byte_order);
    length -= ((f_size + 1) & (~1)) * 2;
    listOfCard16(tvb, offsetp, t, hf_x11_xf86vidmode_SetGammaRamp_blue, hf_x11_xf86vidmode_SetGammaRamp_blue_item, ((f_size + 1) & (~1)), byte_order);
    length -= ((f_size + 1) & (~1)) * 2;
}

static void xf86vidmodeGetGammaRampSize(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_xf86vidmode_GetGammaRampSize_screen, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 2, ENC_NA);
    *offsetp += 2;
}
static void xf86vidmodeGetGammaRampSize_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-GetGammaRampSize");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (xf86vidmode-GetGammaRampSize)", sequence_number);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xf86vidmode_GetGammaRampSize_reply_size, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 22, ENC_NA);
    *offsetp += 22;
}

static void xf86vidmodeGetPermissions(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_xf86vidmode_GetPermissions_screen, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 2, ENC_NA);
    *offsetp += 2;
}
static void xf86vidmodeGetPermissions_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-GetPermissions");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (xf86vidmode-GetPermissions)", sequence_number);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    {
        static int* const permissions_bits [] = {
        &hf_x11_xf86vidmode_GetPermissions_reply_permissions_mask_Read,
        &hf_x11_xf86vidmode_GetPermissions_reply_permissions_mask_Write,
        NULL
        };
        proto_tree_add_bitmask(t,  tvb, *offsetp, hf_x11_xf86vidmode_GetPermissions_reply_permissions, ett_x11_rectangle, permissions_bits, byte_order);
    }
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 20, ENC_NA);
    *offsetp += 20;
}
static const value_string xf86vidmode_extension_minor[] = {
    { 0, "QueryVersion" },
    { 1, "GetModeLine" },
    { 2, "ModModeLine" },
    { 3, "SwitchMode" },
    { 4, "GetMonitor" },
    { 5, "LockModeSwitch" },
    { 6, "GetAllModeLines" },
    { 7, "AddModeLine" },
    { 8, "DeleteModeLine" },
    { 9, "ValidateModeLine" },
    { 10, "SwitchToMode" },
    { 11, "GetViewPort" },
    { 12, "SetViewPort" },
    { 13, "GetDotClocks" },
    { 14, "SetClientVersion" },
    { 15, "SetGamma" },
    { 16, "GetGamma" },
    { 17, "GetGammaRamp" },
    { 18, "SetGammaRamp" },
    { 19, "GetGammaRampSize" },
    { 20, "GetPermissions" },
    { 0, NULL }
};
static const x11_event_info xf86vidmode_events[] = {
    { NULL, NULL }
};
static const x11_reply_info xf86vidmode_replies[] = {
    { 0, xf86vidmodeQueryVersion_Reply },
    { 1, xf86vidmodeGetModeLine_Reply },
    { 4, xf86vidmodeGetMonitor_Reply },
    { 6, xf86vidmodeGetAllModeLines_Reply },
    { 9, xf86vidmodeValidateModeLine_Reply },
    { 11, xf86vidmodeGetViewPort_Reply },
    { 13, xf86vidmodeGetDotClocks_Reply },
    { 16, xf86vidmodeGetGamma_Reply },
    { 17, xf86vidmodeGetGammaRamp_Reply },
    { 19, xf86vidmodeGetGammaRampSize_Reply },
    { 20, xf86vidmodeGetPermissions_Reply },
    { 0, NULL }
};

static void dispatch_xf86vidmode(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int minor, length;
    minor = CARD8(xf86vidmode_extension_minor);
    length = REQUEST_LENGTH();

    col_append_fstr(pinfo->cinfo, COL_INFO, "-%s",
                          val_to_str(minor, xf86vidmode_extension_minor,
                                     "<Unknown opcode %d>"));
    switch (minor) {
    case 0:
        xf86vidmodeQueryVersion(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 1:
        xf86vidmodeGetModeLine(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 2:
        xf86vidmodeModModeLine(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 3:
        xf86vidmodeSwitchMode(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 4:
        xf86vidmodeGetMonitor(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 5:
        xf86vidmodeLockModeSwitch(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 6:
        xf86vidmodeGetAllModeLines(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 7:
        xf86vidmodeAddModeLine(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 8:
        xf86vidmodeDeleteModeLine(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 9:
        xf86vidmodeValidateModeLine(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 10:
        xf86vidmodeSwitchToMode(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 11:
        xf86vidmodeGetViewPort(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 12:
        xf86vidmodeSetViewPort(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 13:
        xf86vidmodeGetDotClocks(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 14:
        xf86vidmodeSetClientVersion(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 15:
        xf86vidmodeSetGamma(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 16:
        xf86vidmodeGetGamma(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 17:
        xf86vidmodeGetGammaRamp(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 18:
        xf86vidmodeSetGammaRamp(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 19:
        xf86vidmodeGetGammaRampSize(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 20:
        xf86vidmodeGetPermissions(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    /* No need for a default case here, since Unknown is printed above,
       and UNDECODED() is taken care of by dissect_x11_request */
    }
}

static void register_xf86vidmode(void)
{
    set_handler("XFree86-VidModeExtension", dispatch_xf86vidmode, xf86vidmode_errors, xf86vidmode_events, NULL, xf86vidmode_replies);
}

static void xfixesQueryVersion(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_xfixes_QueryVersion_client_major_version, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xfixes_QueryVersion_client_minor_version, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}
static void xfixesQueryVersion_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-QueryVersion");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (xfixes-QueryVersion)", sequence_number);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xfixes_QueryVersion_reply_major_version, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xfixes_QueryVersion_reply_minor_version, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 16, ENC_NA);
    *offsetp += 16;
}

static void xfixesChangeSaveSet(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    field8(tvb, offsetp, t, hf_x11_xfixes_ChangeSaveSet_mode, byte_order);
    field8(tvb, offsetp, t, hf_x11_xfixes_ChangeSaveSet_target, byte_order);
    field8(tvb, offsetp, t, hf_x11_xfixes_ChangeSaveSet_map, byte_order);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_xfixes_ChangeSaveSet_window, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}

static void xfixesSelectSelectionInput(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_xfixes_SelectSelectionInput_window, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xfixes_SelectSelectionInput_selection, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    {
        static int* const event_mask_bits [] = {
        &hf_x11_xfixes_SelectSelectionInput_event_mask_mask_SetSelectionOwner,
        &hf_x11_xfixes_SelectSelectionInput_event_mask_mask_SelectionWindowDestroy,
        &hf_x11_xfixes_SelectSelectionInput_event_mask_mask_SelectionClientClose,
        NULL
        };
        proto_tree_add_bitmask(t,  tvb, *offsetp, hf_x11_xfixes_SelectSelectionInput_event_mask, ett_x11_rectangle, event_mask_bits, byte_order);
    }
    *offsetp += 4;
}

static void xfixesCursorNotify(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order)
{
    field8(tvb, offsetp, t, hf_x11_xfixes_CursorNotify_subtype, byte_order);
    CARD16(event_sequencenumber);
    proto_tree_add_item(t, hf_x11_xfixes_CursorNotify_window, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xfixes_CursorNotify_cursor_serial, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xfixes_CursorNotify_timestamp, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    field32(tvb, offsetp, t, hf_x11_xfixes_CursorNotify_name, byte_order);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 12, ENC_NA);
    *offsetp += 12;
}


static void xfixesSelectCursorInput(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_xfixes_SelectCursorInput_window, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    {
        static int* const event_mask_bits [] = {
        &hf_x11_xfixes_SelectCursorInput_event_mask_mask_DisplayCursor,
        NULL
        };
        proto_tree_add_bitmask(t,  tvb, *offsetp, hf_x11_xfixes_SelectCursorInput_event_mask, ett_x11_rectangle, event_mask_bits, byte_order);
    }
    *offsetp += 4;
}

static void xfixesGetCursorImage(tvbuff_t *tvb _U_, packet_info *pinfo _U_, int *offsetp _U_, proto_tree *t _U_, unsigned byte_order _U_, int length _U_)
{
}
static void xfixesGetCursorImage_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;
    int f_width;
    int f_height;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-GetCursorImage");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (xfixes-GetCursorImage)", sequence_number);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xfixes_GetCursorImage_reply_x, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_xfixes_GetCursorImage_reply_y, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    f_width = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_xfixes_GetCursorImage_reply_width, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    f_height = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_xfixes_GetCursorImage_reply_height, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_xfixes_GetCursorImage_reply_xhot, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_xfixes_GetCursorImage_reply_yhot, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_xfixes_GetCursorImage_reply_cursor_serial, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 8, ENC_NA);
    *offsetp += 8;
    listOfCard32(tvb, offsetp, t, hf_x11_xfixes_GetCursorImage_reply_cursor_image, hf_x11_xfixes_GetCursorImage_reply_cursor_image_item, (f_width * f_height), byte_order);
}

static void xfixesCreateRegion(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_xfixes_CreateRegion_region, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    struct_xproto_RECTANGLE(tvb, offsetp, t, byte_order, (length - 8) / 8);
}

static void xfixesCreateRegionFromBitmap(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_xfixes_CreateRegionFromBitmap_region, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xfixes_CreateRegionFromBitmap_bitmap, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}

static void xfixesCreateRegionFromWindow(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_xfixes_CreateRegionFromWindow_region, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xfixes_CreateRegionFromWindow_window, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    field8(tvb, offsetp, t, hf_x11_xfixes_CreateRegionFromWindow_kind, byte_order);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 3, ENC_NA);
    *offsetp += 3;
}

static void xfixesCreateRegionFromGC(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_xfixes_CreateRegionFromGC_region, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xfixes_CreateRegionFromGC_gc, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}

static void xfixesCreateRegionFromPicture(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_xfixes_CreateRegionFromPicture_region, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xfixes_CreateRegionFromPicture_picture, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}

static void xfixesDestroyRegion(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_xfixes_DestroyRegion_region, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}

static void xfixesSetRegion(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_xfixes_SetRegion_region, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    struct_xproto_RECTANGLE(tvb, offsetp, t, byte_order, (length - 8) / 8);
}

static void xfixesCopyRegion(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_xfixes_CopyRegion_source, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xfixes_CopyRegion_destination, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}

static void xfixesUnionRegion(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_xfixes_UnionRegion_source1, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xfixes_UnionRegion_source2, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xfixes_UnionRegion_destination, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}

static void xfixesIntersectRegion(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_xfixes_IntersectRegion_source1, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xfixes_IntersectRegion_source2, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xfixes_IntersectRegion_destination, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}

static void xfixesSubtractRegion(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_xfixes_SubtractRegion_source1, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xfixes_SubtractRegion_source2, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xfixes_SubtractRegion_destination, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}

static void xfixesInvertRegion(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_xfixes_InvertRegion_source, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    struct_xproto_RECTANGLE(tvb, offsetp, t, byte_order, 1);
    proto_tree_add_item(t, hf_x11_xfixes_InvertRegion_destination, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}

static void xfixesTranslateRegion(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_xfixes_TranslateRegion_region, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xfixes_TranslateRegion_dx, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_xfixes_TranslateRegion_dy, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
}

static void xfixesRegionExtents(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_xfixes_RegionExtents_source, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xfixes_RegionExtents_destination, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}

static void xfixesFetchRegion(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_xfixes_FetchRegion_region, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}
static void xfixesFetchRegion_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;
    int f_length;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-FetchRegion");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (xfixes-FetchRegion)", sequence_number);
    *offsetp += 2;
    f_length = tvb_get_uint32(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    struct_xproto_RECTANGLE(tvb, offsetp, t, byte_order, 1);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 16, ENC_NA);
    *offsetp += 16;
    struct_xproto_RECTANGLE(tvb, offsetp, t, byte_order, (f_length / 2));
}

static void xfixesSetGCClipRegion(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_xfixes_SetGCClipRegion_gc, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    field32(tvb, offsetp, t, hf_x11_xfixes_SetGCClipRegion_region, byte_order);
    proto_tree_add_item(t, hf_x11_xfixes_SetGCClipRegion_x_origin, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_xfixes_SetGCClipRegion_y_origin, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
}

static void xfixesSetWindowShapeRegion(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_xfixes_SetWindowShapeRegion_dest, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    field8(tvb, offsetp, t, hf_x11_xfixes_SetWindowShapeRegion_dest_kind, byte_order);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 3, ENC_NA);
    *offsetp += 3;
    proto_tree_add_item(t, hf_x11_xfixes_SetWindowShapeRegion_x_offset, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_xfixes_SetWindowShapeRegion_y_offset, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    field32(tvb, offsetp, t, hf_x11_xfixes_SetWindowShapeRegion_region, byte_order);
}

static void xfixesSetPictureClipRegion(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_xfixes_SetPictureClipRegion_picture, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    field32(tvb, offsetp, t, hf_x11_xfixes_SetPictureClipRegion_region, byte_order);
    proto_tree_add_item(t, hf_x11_xfixes_SetPictureClipRegion_x_origin, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_xfixes_SetPictureClipRegion_y_origin, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
}

static void xfixesSetCursorName(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    int f_nbytes;
    proto_tree_add_item(t, hf_x11_xfixes_SetCursorName_cursor, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    f_nbytes = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_xfixes_SetCursorName_nbytes, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 2, ENC_NA);
    *offsetp += 2;
    listOfByte(tvb, offsetp, t, hf_x11_xfixes_SetCursorName_name, f_nbytes, byte_order);
    length -= f_nbytes * 1;
}

static void xfixesGetCursorName(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_xfixes_GetCursorName_cursor, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}
static void xfixesGetCursorName_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;
    int f_nbytes;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-GetCursorName");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (xfixes-GetCursorName)", sequence_number);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    field32(tvb, offsetp, t, hf_x11_xfixes_GetCursorName_reply_atom, byte_order);
    f_nbytes = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_xfixes_GetCursorName_reply_nbytes, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 18, ENC_NA);
    *offsetp += 18;
    listOfByte(tvb, offsetp, t, hf_x11_xfixes_GetCursorName_reply_name, f_nbytes, byte_order);
}

static void xfixesGetCursorImageAndName(tvbuff_t *tvb _U_, packet_info *pinfo _U_, int *offsetp _U_, proto_tree *t _U_, unsigned byte_order _U_, int length _U_)
{
}
static void xfixesGetCursorImageAndName_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;
    int f_width;
    int f_height;
    int f_nbytes;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-GetCursorImageAndName");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (xfixes-GetCursorImageAndName)", sequence_number);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xfixes_GetCursorImageAndName_reply_x, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_xfixes_GetCursorImageAndName_reply_y, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    f_width = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_xfixes_GetCursorImageAndName_reply_width, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    f_height = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_xfixes_GetCursorImageAndName_reply_height, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_xfixes_GetCursorImageAndName_reply_xhot, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_xfixes_GetCursorImageAndName_reply_yhot, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_xfixes_GetCursorImageAndName_reply_cursor_serial, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    field32(tvb, offsetp, t, hf_x11_xfixes_GetCursorImageAndName_reply_cursor_atom, byte_order);
    f_nbytes = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_xfixes_GetCursorImageAndName_reply_nbytes, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 2, ENC_NA);
    *offsetp += 2;
    listOfCard32(tvb, offsetp, t, hf_x11_xfixes_GetCursorImageAndName_reply_cursor_image, hf_x11_xfixes_GetCursorImageAndName_reply_cursor_image_item, (f_width * f_height), byte_order);
    listOfByte(tvb, offsetp, t, hf_x11_xfixes_GetCursorImageAndName_reply_name, f_nbytes, byte_order);
}

static void xfixesChangeCursor(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_xfixes_ChangeCursor_source, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xfixes_ChangeCursor_destination, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}

static void xfixesChangeCursorByName(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    int f_nbytes;
    proto_tree_add_item(t, hf_x11_xfixes_ChangeCursorByName_src, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    f_nbytes = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_xfixes_ChangeCursorByName_nbytes, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 2, ENC_NA);
    *offsetp += 2;
    listOfByte(tvb, offsetp, t, hf_x11_xfixes_ChangeCursorByName_name, f_nbytes, byte_order);
    length -= f_nbytes * 1;
}

static void xfixesExpandRegion(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_xfixes_ExpandRegion_source, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xfixes_ExpandRegion_destination, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xfixes_ExpandRegion_left, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_xfixes_ExpandRegion_right, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_xfixes_ExpandRegion_top, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_xfixes_ExpandRegion_bottom, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
}

static void xfixesHideCursor(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_xfixes_HideCursor_window, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}

static void xfixesShowCursor(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_xfixes_ShowCursor_window, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}

static void xfixesCreatePointerBarrier(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    int f_num_devices;
    proto_tree_add_item(t, hf_x11_xfixes_CreatePointerBarrier_barrier, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xfixes_CreatePointerBarrier_window, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xfixes_CreatePointerBarrier_x1, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_xfixes_CreatePointerBarrier_y1, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_xfixes_CreatePointerBarrier_x2, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_xfixes_CreatePointerBarrier_y2, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    {
        static int* const directions_bits [] = {
        &hf_x11_xfixes_CreatePointerBarrier_directions_mask_PositiveX,
        &hf_x11_xfixes_CreatePointerBarrier_directions_mask_PositiveY,
        &hf_x11_xfixes_CreatePointerBarrier_directions_mask_NegativeX,
        &hf_x11_xfixes_CreatePointerBarrier_directions_mask_NegativeY,
        NULL
        };
        proto_tree_add_bitmask(t,  tvb, *offsetp, hf_x11_xfixes_CreatePointerBarrier_directions, ett_x11_rectangle, directions_bits, byte_order);
    }
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 2, ENC_NA);
    *offsetp += 2;
    f_num_devices = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_xfixes_CreatePointerBarrier_num_devices, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    listOfCard16(tvb, offsetp, t, hf_x11_xfixes_CreatePointerBarrier_devices, hf_x11_xfixes_CreatePointerBarrier_devices_item, f_num_devices, byte_order);
    length -= f_num_devices * 2;
}

static void xfixesDeletePointerBarrier(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_xfixes_DeletePointerBarrier_barrier, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}

static void xfixesSetClientDisconnectMode(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    {
        static int* const disconnect_mode_bits [] = {
        &hf_x11_xfixes_SetClientDisconnectMode_disconnect_mode_mask_Terminate,
        NULL
        };
        proto_tree_add_bitmask(t,  tvb, *offsetp, hf_x11_xfixes_SetClientDisconnectMode_disconnect_mode, ett_x11_rectangle, disconnect_mode_bits, byte_order);
    }
    *offsetp += 4;
}

static void xfixesGetClientDisconnectMode(tvbuff_t *tvb _U_, packet_info *pinfo _U_, int *offsetp _U_, proto_tree *t _U_, unsigned byte_order _U_, int length _U_)
{
}
static void xfixesGetClientDisconnectMode_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-GetClientDisconnectMode");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (xfixes-GetClientDisconnectMode)", sequence_number);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    {
        static int* const disconnect_mode_bits [] = {
        &hf_x11_xfixes_GetClientDisconnectMode_reply_disconnect_mode_mask_Terminate,
        NULL
        };
        proto_tree_add_bitmask(t,  tvb, *offsetp, hf_x11_xfixes_GetClientDisconnectMode_reply_disconnect_mode, ett_x11_rectangle, disconnect_mode_bits, byte_order);
    }
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 20, ENC_NA);
    *offsetp += 20;
}
static const value_string xfixes_extension_minor[] = {
    { 0, "QueryVersion" },
    { 1, "ChangeSaveSet" },
    { 2, "SelectSelectionInput" },
    { 3, "SelectCursorInput" },
    { 4, "GetCursorImage" },
    { 5, "CreateRegion" },
    { 6, "CreateRegionFromBitmap" },
    { 7, "CreateRegionFromWindow" },
    { 8, "CreateRegionFromGC" },
    { 9, "CreateRegionFromPicture" },
    { 10, "DestroyRegion" },
    { 11, "SetRegion" },
    { 12, "CopyRegion" },
    { 13, "UnionRegion" },
    { 14, "IntersectRegion" },
    { 15, "SubtractRegion" },
    { 16, "InvertRegion" },
    { 17, "TranslateRegion" },
    { 18, "RegionExtents" },
    { 19, "FetchRegion" },
    { 20, "SetGCClipRegion" },
    { 21, "SetWindowShapeRegion" },
    { 22, "SetPictureClipRegion" },
    { 23, "SetCursorName" },
    { 24, "GetCursorName" },
    { 25, "GetCursorImageAndName" },
    { 26, "ChangeCursor" },
    { 27, "ChangeCursorByName" },
    { 28, "ExpandRegion" },
    { 29, "HideCursor" },
    { 30, "ShowCursor" },
    { 31, "CreatePointerBarrier" },
    { 32, "DeletePointerBarrier" },
    { 33, "SetClientDisconnectMode" },
    { 34, "GetClientDisconnectMode" },
    { 0, NULL }
};
static const x11_event_info xfixes_events[] = {
    { "xfixes-CursorNotify", xfixesCursorNotify },
    { NULL, NULL }
};
static const x11_reply_info xfixes_replies[] = {
    { 0, xfixesQueryVersion_Reply },
    { 4, xfixesGetCursorImage_Reply },
    { 19, xfixesFetchRegion_Reply },
    { 24, xfixesGetCursorName_Reply },
    { 25, xfixesGetCursorImageAndName_Reply },
    { 34, xfixesGetClientDisconnectMode_Reply },
    { 0, NULL }
};

static void dispatch_xfixes(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int minor, length;
    minor = CARD8(xfixes_extension_minor);
    length = REQUEST_LENGTH();

    col_append_fstr(pinfo->cinfo, COL_INFO, "-%s",
                          val_to_str(minor, xfixes_extension_minor,
                                     "<Unknown opcode %d>"));
    switch (minor) {
    case 0:
        xfixesQueryVersion(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 1:
        xfixesChangeSaveSet(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 2:
        xfixesSelectSelectionInput(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 3:
        xfixesSelectCursorInput(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 4:
        xfixesGetCursorImage(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 5:
        xfixesCreateRegion(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 6:
        xfixesCreateRegionFromBitmap(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 7:
        xfixesCreateRegionFromWindow(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 8:
        xfixesCreateRegionFromGC(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 9:
        xfixesCreateRegionFromPicture(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 10:
        xfixesDestroyRegion(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 11:
        xfixesSetRegion(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 12:
        xfixesCopyRegion(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 13:
        xfixesUnionRegion(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 14:
        xfixesIntersectRegion(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 15:
        xfixesSubtractRegion(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 16:
        xfixesInvertRegion(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 17:
        xfixesTranslateRegion(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 18:
        xfixesRegionExtents(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 19:
        xfixesFetchRegion(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 20:
        xfixesSetGCClipRegion(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 21:
        xfixesSetWindowShapeRegion(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 22:
        xfixesSetPictureClipRegion(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 23:
        xfixesSetCursorName(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 24:
        xfixesGetCursorName(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 25:
        xfixesGetCursorImageAndName(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 26:
        xfixesChangeCursor(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 27:
        xfixesChangeCursorByName(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 28:
        xfixesExpandRegion(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 29:
        xfixesHideCursor(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 30:
        xfixesShowCursor(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 31:
        xfixesCreatePointerBarrier(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 32:
        xfixesDeletePointerBarrier(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 33:
        xfixesSetClientDisconnectMode(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 34:
        xfixesGetClientDisconnectMode(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    /* No need for a default case here, since Unknown is printed above,
       and UNDECODED() is taken care of by dissect_x11_request */
    }
}

static void register_xfixes(void)
{
    set_handler("XFIXES", dispatch_xfixes, xfixes_errors, xfixes_events, NULL, xfixes_replies);
}

static void struct_xinerama_ScreenInfo(tvbuff_t *tvb, int *offsetp, proto_tree *root, unsigned byte_order _U_, int count)
{
    int i;
    for (i = 0; i < count; i++) {
        proto_item *item;
        proto_tree *t;

        item = proto_tree_add_item(root, hf_x11_struct_xinerama_ScreenInfo, tvb, *offsetp, 8, ENC_NA);
        t = proto_item_add_subtree(item, ett_x11_rectangle);
        proto_tree_add_item(t, hf_x11_struct_xinerama_ScreenInfo_x_org, tvb, *offsetp, 2, byte_order);
        *offsetp += 2;
        proto_tree_add_item(t, hf_x11_struct_xinerama_ScreenInfo_y_org, tvb, *offsetp, 2, byte_order);
        *offsetp += 2;
        proto_tree_add_item(t, hf_x11_struct_xinerama_ScreenInfo_width, tvb, *offsetp, 2, byte_order);
        *offsetp += 2;
        proto_tree_add_item(t, hf_x11_struct_xinerama_ScreenInfo_height, tvb, *offsetp, 2, byte_order);
        *offsetp += 2;
    }
}

static void xineramaQueryVersion(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_xinerama_QueryVersion_major, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_xinerama_QueryVersion_minor, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
}
static void xineramaQueryVersion_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-QueryVersion");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (xinerama-QueryVersion)", sequence_number);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xinerama_QueryVersion_reply_major, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_xinerama_QueryVersion_reply_minor, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
}

static void xineramaGetState(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_xinerama_GetState_window, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}
static void xineramaGetState_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-GetState");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_xinerama_GetState_reply_state, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (xinerama-GetState)", sequence_number);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xinerama_GetState_reply_window, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}

static void xineramaGetScreenCount(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_xinerama_GetScreenCount_window, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}
static void xineramaGetScreenCount_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-GetScreenCount");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_xinerama_GetScreenCount_reply_screen_count, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (xinerama-GetScreenCount)", sequence_number);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xinerama_GetScreenCount_reply_window, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}

static void xineramaGetScreenSize(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_xinerama_GetScreenSize_window, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xinerama_GetScreenSize_screen, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}
static void xineramaGetScreenSize_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-GetScreenSize");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (xinerama-GetScreenSize)", sequence_number);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xinerama_GetScreenSize_reply_width, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xinerama_GetScreenSize_reply_height, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xinerama_GetScreenSize_reply_window, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xinerama_GetScreenSize_reply_screen, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}

static void xineramaIsActive(tvbuff_t *tvb _U_, packet_info *pinfo _U_, int *offsetp _U_, proto_tree *t _U_, unsigned byte_order _U_, int length _U_)
{
}
static void xineramaIsActive_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-IsActive");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (xinerama-IsActive)", sequence_number);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xinerama_IsActive_reply_state, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}

static void xineramaQueryScreens(tvbuff_t *tvb _U_, packet_info *pinfo _U_, int *offsetp _U_, proto_tree *t _U_, unsigned byte_order _U_, int length _U_)
{
}
static void xineramaQueryScreens_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;
    int f_number;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-QueryScreens");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (xinerama-QueryScreens)", sequence_number);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    f_number = tvb_get_uint32(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_xinerama_QueryScreens_reply_number, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 20, ENC_NA);
    *offsetp += 20;
    struct_xinerama_ScreenInfo(tvb, offsetp, t, byte_order, f_number);
}
static const value_string xinerama_extension_minor[] = {
    { 0, "QueryVersion" },
    { 1, "GetState" },
    { 2, "GetScreenCount" },
    { 3, "GetScreenSize" },
    { 4, "IsActive" },
    { 5, "QueryScreens" },
    { 0, NULL }
};
static const x11_event_info xinerama_events[] = {
    { NULL, NULL }
};
static const x11_reply_info xinerama_replies[] = {
    { 0, xineramaQueryVersion_Reply },
    { 1, xineramaGetState_Reply },
    { 2, xineramaGetScreenCount_Reply },
    { 3, xineramaGetScreenSize_Reply },
    { 4, xineramaIsActive_Reply },
    { 5, xineramaQueryScreens_Reply },
    { 0, NULL }
};

static void dispatch_xinerama(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int minor, length;
    minor = CARD8(xinerama_extension_minor);
    length = REQUEST_LENGTH();

    col_append_fstr(pinfo->cinfo, COL_INFO, "-%s",
                          val_to_str(minor, xinerama_extension_minor,
                                     "<Unknown opcode %d>"));
    switch (minor) {
    case 0:
        xineramaQueryVersion(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 1:
        xineramaGetState(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 2:
        xineramaGetScreenCount(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 3:
        xineramaGetScreenSize(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 4:
        xineramaIsActive(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 5:
        xineramaQueryScreens(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    /* No need for a default case here, since Unknown is printed above,
       and UNDECODED() is taken care of by dissect_x11_request */
    }
}

static void register_xinerama(void)
{
    set_handler("XINERAMA", dispatch_xinerama, xinerama_errors, xinerama_events, NULL, xinerama_replies);
}

static void struct_xinput_FP3232(tvbuff_t *tvb, int *offsetp, proto_tree *root, unsigned byte_order _U_, int count)
{
    int i;
    for (i = 0; i < count; i++) {
        proto_item *item;
        proto_tree *t;

        item = proto_tree_add_item(root, hf_x11_struct_xinput_FP3232, tvb, *offsetp, 8, ENC_NA);
        t = proto_item_add_subtree(item, ett_x11_rectangle);
        proto_tree_add_item(t, hf_x11_struct_xinput_FP3232_integral, tvb, *offsetp, 4, byte_order);
        *offsetp += 4;
        proto_tree_add_item(t, hf_x11_struct_xinput_FP3232_frac, tvb, *offsetp, 4, byte_order);
        *offsetp += 4;
    }
}

static void xinputGetExtensionVersion(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    int f_name_len;
    f_name_len = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_xinput_GetExtensionVersion_name_len, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 2, ENC_NA);
    *offsetp += 2;
    listOfByte(tvb, offsetp, t, hf_x11_xinput_GetExtensionVersion_name, f_name_len, byte_order);
    length -= f_name_len * 1;
}
static void xinputGetExtensionVersion_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-GetExtensionVersion");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_xinput_GetExtensionVersion_reply_xi_reply_type, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (xinput-GetExtensionVersion)", sequence_number);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xinput_GetExtensionVersion_reply_server_major, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_xinput_GetExtensionVersion_reply_server_minor, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_xinput_GetExtensionVersion_reply_present, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 19, ENC_NA);
    *offsetp += 19;
}

static void struct_xinput_DeviceInfo(tvbuff_t *tvb, int *offsetp, proto_tree *root, unsigned byte_order _U_, int count)
{
    int i;
    for (i = 0; i < count; i++) {
        proto_item *item;
        proto_tree *t;

        item = proto_tree_add_item(root, hf_x11_struct_xinput_DeviceInfo, tvb, *offsetp, 8, ENC_NA);
        t = proto_item_add_subtree(item, ett_x11_rectangle);
        proto_tree_add_item(t, hf_x11_struct_xinput_DeviceInfo_device_type, tvb, *offsetp, 4, byte_order);
        *offsetp += 4;
        proto_tree_add_item(t, hf_x11_struct_xinput_DeviceInfo_device_id, tvb, *offsetp, 1, byte_order);
        *offsetp += 1;
        proto_tree_add_item(t, hf_x11_struct_xinput_DeviceInfo_num_class_info, tvb, *offsetp, 1, byte_order);
        *offsetp += 1;
        field8(tvb, offsetp, t, hf_x11_struct_xinput_DeviceInfo_device_use, byte_order);
        proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
        *offsetp += 1;
    }
}

static void struct_xinput_AxisInfo(tvbuff_t *tvb, int *offsetp, proto_tree *root, unsigned byte_order _U_, int count)
{
    int i;
    for (i = 0; i < count; i++) {
        proto_item *item;
        proto_tree *t;

        item = proto_tree_add_item(root, hf_x11_struct_xinput_AxisInfo, tvb, *offsetp, 12, ENC_NA);
        t = proto_item_add_subtree(item, ett_x11_rectangle);
        proto_tree_add_item(t, hf_x11_struct_xinput_AxisInfo_resolution, tvb, *offsetp, 4, byte_order);
        *offsetp += 4;
        proto_tree_add_item(t, hf_x11_struct_xinput_AxisInfo_minimum, tvb, *offsetp, 4, byte_order);
        *offsetp += 4;
        proto_tree_add_item(t, hf_x11_struct_xinput_AxisInfo_maximum, tvb, *offsetp, 4, byte_order);
        *offsetp += 4;
    }
}

static int struct_size_xinput_InputInfo(tvbuff_t *tvb _U_, int *offsetp _U_, unsigned byte_order _U_)
{
    int size = 0;
    return size + 2;
}

static void struct_xinput_InputInfo(tvbuff_t *tvb, int *offsetp, proto_tree *root, unsigned byte_order _U_, int count)
{
    int i;
    for (i = 0; i < count; i++) {
        proto_item *item;
        proto_tree *t;
        int f_class_id;

        item = proto_tree_add_item(root, hf_x11_struct_xinput_InputInfo, tvb, *offsetp, struct_size_xinput_InputInfo(tvb, offsetp, byte_order), ENC_NA);
        t = proto_item_add_subtree(item, ett_x11_rectangle);
        f_class_id = field8(tvb, offsetp, t, hf_x11_struct_xinput_InputInfo_class_id, byte_order);
        proto_tree_add_item(t, hf_x11_struct_xinput_InputInfo_len, tvb, *offsetp, 1, byte_order);
        *offsetp += 1;
        if (f_class_id == 0) {
            proto_tree_add_item(t, hf_x11_struct_xinput_InputInfo_Key_min_keycode, tvb, *offsetp, 1, byte_order);
            *offsetp += 1;
            proto_tree_add_item(t, hf_x11_struct_xinput_InputInfo_Key_max_keycode, tvb, *offsetp, 1, byte_order);
            *offsetp += 1;
            proto_tree_add_item(t, hf_x11_struct_xinput_InputInfo_Key_num_keys, tvb, *offsetp, 2, byte_order);
            *offsetp += 2;
            proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 2, ENC_NA);
            *offsetp += 2;
        }
        if (f_class_id == 1) {
            proto_tree_add_item(t, hf_x11_struct_xinput_InputInfo_Button_num_buttons, tvb, *offsetp, 2, byte_order);
            *offsetp += 2;
        }
        if (f_class_id == 2) {
            int f_axes_len;
            f_axes_len = tvb_get_uint8(tvb, *offsetp);
            proto_tree_add_item(t, hf_x11_struct_xinput_InputInfo_Valuator_axes_len, tvb, *offsetp, 1, byte_order);
            *offsetp += 1;
            field8(tvb, offsetp, t, hf_x11_struct_xinput_InputInfo_Valuator_mode, byte_order);
            proto_tree_add_item(t, hf_x11_struct_xinput_InputInfo_Valuator_motion_size, tvb, *offsetp, 4, byte_order);
            *offsetp += 4;
            struct_xinput_AxisInfo(tvb, offsetp, t, byte_order, f_axes_len);
        }
    }
}

static void xinputListInputDevices(tvbuff_t *tvb _U_, packet_info *pinfo _U_, int *offsetp _U_, proto_tree *t _U_, unsigned byte_order _U_, int length _U_)
{
}
static void xinputListInputDevices_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;
    int f_devices_len;
    int sumof_devices = 0;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-ListInputDevices");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_xinput_ListInputDevices_reply_xi_reply_type, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (xinput-ListInputDevices)", sequence_number);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    f_devices_len = tvb_get_uint8(tvb, *offsetp);
    proto_tree_add_item(t, hf_x11_xinput_ListInputDevices_reply_devices_len, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 23, ENC_NA);
    *offsetp += 23;
    struct_xinput_DeviceInfo(tvb, offsetp, t, byte_order, f_devices_len);
    struct_xinput_InputInfo(tvb, offsetp, t, byte_order, sumof_devices);
    struct_xproto_STR(tvb, offsetp, t, byte_order, f_devices_len);
    if (*offsetp % 4) {
        proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, (4 - *offsetp % 4), ENC_NA);
        *offsetp += (4 - *offsetp % 4);
    }
}

static void struct_xinput_InputClassInfo(tvbuff_t *tvb, int *offsetp, proto_tree *root, unsigned byte_order _U_, int count)
{
    int i;
    for (i = 0; i < count; i++) {
        proto_item *item;
        proto_tree *t;

        item = proto_tree_add_item(root, hf_x11_struct_xinput_InputClassInfo, tvb, *offsetp, 2, ENC_NA);
        t = proto_item_add_subtree(item, ett_x11_rectangle);
        field8(tvb, offsetp, t, hf_x11_struct_xinput_InputClassInfo_class_id, byte_order);
        proto_tree_add_item(t, hf_x11_struct_xinput_InputClassInfo_event_type_base, tvb, *offsetp, 1, byte_order);
        *offsetp += 1;
    }
}

static void xinputOpenDevice(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_xinput_OpenDevice_device_id, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 3, ENC_NA);
    *offsetp += 3;
}
static void xinputOpenDevice_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;
    int f_num_classes;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-OpenDevice");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_xinput_OpenDevice_reply_xi_reply_type, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (xinput-OpenDevice)", sequence_number);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    f_num_classes = tvb_get_uint8(tvb, *offsetp);
    proto_tree_add_item(t, hf_x11_xinput_OpenDevice_reply_num_classes, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 23, ENC_NA);
    *offsetp += 23;
    struct_xinput_InputClassInfo(tvb, offsetp, t, byte_order, f_num_classes);
    if (*offsetp % 4) {
        proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, (4 - *offsetp % 4), ENC_NA);
        *offsetp += (4 - *offsetp % 4);
    }
}

static void xinputCloseDevice(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_xinput_CloseDevice_device_id, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 3, ENC_NA);
    *offsetp += 3;
}

static void xinputSetDeviceMode(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_xinput_SetDeviceMode_device_id, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    field8(tvb, offsetp, t, hf_x11_xinput_SetDeviceMode_mode, byte_order);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 2, ENC_NA);
    *offsetp += 2;
}
static void xinputSetDeviceMode_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-SetDeviceMode");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_xinput_SetDeviceMode_reply_xi_reply_type, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (xinput-SetDeviceMode)", sequence_number);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    field8(tvb, offsetp, t, hf_x11_xinput_SetDeviceMode_reply_status, byte_order);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 23, ENC_NA);
    *offsetp += 23;
}

static void xinputSelectExtensionEvent(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    int f_num_classes;
    proto_tree_add_item(t, hf_x11_xinput_SelectExtensionEvent_window, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    f_num_classes = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_xinput_SelectExtensionEvent_num_classes, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 2, ENC_NA);
    *offsetp += 2;
    listOfCard32(tvb, offsetp, t, hf_x11_xinput_SelectExtensionEvent_classes, hf_x11_xinput_SelectExtensionEvent_classes_item, f_num_classes, byte_order);
    length -= f_num_classes * 4;
}

static void xinputGetSelectedExtensionEvents(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_xinput_GetSelectedExtensionEvents_window, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}
static void xinputGetSelectedExtensionEvents_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;
    int f_num_this_classes;
    int f_num_all_classes;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-GetSelectedExtensionEvents");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_xinput_GetSelectedExtensionEvents_reply_xi_reply_type, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (xinput-GetSelectedExtensionEvents)", sequence_number);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    f_num_this_classes = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_xinput_GetSelectedExtensionEvents_reply_num_this_classes, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    f_num_all_classes = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_xinput_GetSelectedExtensionEvents_reply_num_all_classes, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 20, ENC_NA);
    *offsetp += 20;
    listOfCard32(tvb, offsetp, t, hf_x11_xinput_GetSelectedExtensionEvents_reply_this_classes, hf_x11_xinput_GetSelectedExtensionEvents_reply_this_classes_item, f_num_this_classes, byte_order);
    listOfCard32(tvb, offsetp, t, hf_x11_xinput_GetSelectedExtensionEvents_reply_all_classes, hf_x11_xinput_GetSelectedExtensionEvents_reply_all_classes_item, f_num_all_classes, byte_order);
}

static void xinputChangeDeviceDontPropagateList(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    int f_num_classes;
    proto_tree_add_item(t, hf_x11_xinput_ChangeDeviceDontPropagateList_window, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    f_num_classes = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_xinput_ChangeDeviceDontPropagateList_num_classes, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    field8(tvb, offsetp, t, hf_x11_xinput_ChangeDeviceDontPropagateList_mode, byte_order);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    listOfCard32(tvb, offsetp, t, hf_x11_xinput_ChangeDeviceDontPropagateList_classes, hf_x11_xinput_ChangeDeviceDontPropagateList_classes_item, f_num_classes, byte_order);
    length -= f_num_classes * 4;
}

static void xinputGetDeviceDontPropagateList(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_xinput_GetDeviceDontPropagateList_window, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}
static void xinputGetDeviceDontPropagateList_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;
    int f_num_classes;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-GetDeviceDontPropagateList");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_xinput_GetDeviceDontPropagateList_reply_xi_reply_type, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (xinput-GetDeviceDontPropagateList)", sequence_number);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    f_num_classes = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_xinput_GetDeviceDontPropagateList_reply_num_classes, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 22, ENC_NA);
    *offsetp += 22;
    listOfCard32(tvb, offsetp, t, hf_x11_xinput_GetDeviceDontPropagateList_reply_classes, hf_x11_xinput_GetDeviceDontPropagateList_reply_classes_item, f_num_classes, byte_order);
}

static int struct_size_xinput_DeviceTimeCoord(tvbuff_t *tvb _U_, int *offsetp _U_, unsigned byte_order _U_, int p_num_axes)
{
    int size = 0;
    size += p_num_axes * 4;
    return size + 4;
}

static void struct_xinput_DeviceTimeCoord(tvbuff_t *tvb, int *offsetp, proto_tree *root, unsigned byte_order _U_, int count, int p_num_axes)
{
    int i;
    for (i = 0; i < count; i++) {
        proto_item *item;
        proto_tree *t;

        item = proto_tree_add_item(root, hf_x11_struct_xinput_DeviceTimeCoord, tvb, *offsetp, struct_size_xinput_DeviceTimeCoord(tvb, offsetp, byte_order, p_num_axes), ENC_NA);
        t = proto_item_add_subtree(item, ett_x11_rectangle);
        proto_tree_add_item(t, hf_x11_struct_xinput_DeviceTimeCoord_time, tvb, *offsetp, 4, byte_order);
        *offsetp += 4;
        listOfInt32(tvb, offsetp, t, hf_x11_struct_xinput_DeviceTimeCoord_axisvalues, hf_x11_struct_xinput_DeviceTimeCoord_axisvalues_item, p_num_axes, byte_order);
    }
}

static void xinputGetDeviceMotionEvents(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_xinput_GetDeviceMotionEvents_start, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    field32(tvb, offsetp, t, hf_x11_xinput_GetDeviceMotionEvents_stop, byte_order);
    proto_tree_add_item(t, hf_x11_xinput_GetDeviceMotionEvents_device_id, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 3, ENC_NA);
    *offsetp += 3;
}
static void xinputGetDeviceMotionEvents_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;
    int f_num_events;
    int f_num_axes;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-GetDeviceMotionEvents");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_xinput_GetDeviceMotionEvents_reply_xi_reply_type, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (xinput-GetDeviceMotionEvents)", sequence_number);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    f_num_events = tvb_get_uint32(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_xinput_GetDeviceMotionEvents_reply_num_events, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    f_num_axes = tvb_get_uint8(tvb, *offsetp);
    proto_tree_add_item(t, hf_x11_xinput_GetDeviceMotionEvents_reply_num_axes, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    field8(tvb, offsetp, t, hf_x11_xinput_GetDeviceMotionEvents_reply_device_mode, byte_order);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 18, ENC_NA);
    *offsetp += 18;
    struct_xinput_DeviceTimeCoord(tvb, offsetp, t, byte_order, f_num_events, f_num_axes);
}

static void xinputChangeKeyboardDevice(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_xinput_ChangeKeyboardDevice_device_id, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 3, ENC_NA);
    *offsetp += 3;
}
static void xinputChangeKeyboardDevice_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-ChangeKeyboardDevice");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_xinput_ChangeKeyboardDevice_reply_xi_reply_type, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (xinput-ChangeKeyboardDevice)", sequence_number);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    field8(tvb, offsetp, t, hf_x11_xinput_ChangeKeyboardDevice_reply_status, byte_order);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 23, ENC_NA);
    *offsetp += 23;
}

static void xinputChangePointerDevice(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_xinput_ChangePointerDevice_x_axis, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_xinput_ChangePointerDevice_y_axis, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_xinput_ChangePointerDevice_device_id, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
}
static void xinputChangePointerDevice_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-ChangePointerDevice");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_xinput_ChangePointerDevice_reply_xi_reply_type, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (xinput-ChangePointerDevice)", sequence_number);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    field8(tvb, offsetp, t, hf_x11_xinput_ChangePointerDevice_reply_status, byte_order);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 23, ENC_NA);
    *offsetp += 23;
}

static void xinputGrabDevice(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    int f_num_classes;
    proto_tree_add_item(t, hf_x11_xinput_GrabDevice_grab_window, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    field32(tvb, offsetp, t, hf_x11_xinput_GrabDevice_time, byte_order);
    f_num_classes = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_xinput_GrabDevice_num_classes, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    field8(tvb, offsetp, t, hf_x11_xinput_GrabDevice_this_device_mode, byte_order);
    field8(tvb, offsetp, t, hf_x11_xinput_GrabDevice_other_device_mode, byte_order);
    proto_tree_add_item(t, hf_x11_xinput_GrabDevice_owner_events, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_xinput_GrabDevice_device_id, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 2, ENC_NA);
    *offsetp += 2;
    listOfCard32(tvb, offsetp, t, hf_x11_xinput_GrabDevice_classes, hf_x11_xinput_GrabDevice_classes_item, f_num_classes, byte_order);
    length -= f_num_classes * 4;
}
static void xinputGrabDevice_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-GrabDevice");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_xinput_GrabDevice_reply_xi_reply_type, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (xinput-GrabDevice)", sequence_number);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    field8(tvb, offsetp, t, hf_x11_xinput_GrabDevice_reply_status, byte_order);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 23, ENC_NA);
    *offsetp += 23;
}

static void xinputUngrabDevice(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    field32(tvb, offsetp, t, hf_x11_xinput_UngrabDevice_time, byte_order);
    proto_tree_add_item(t, hf_x11_xinput_UngrabDevice_device_id, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 3, ENC_NA);
    *offsetp += 3;
}

static void xinputGrabDeviceKey(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    int f_num_classes;
    proto_tree_add_item(t, hf_x11_xinput_GrabDeviceKey_grab_window, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    f_num_classes = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_xinput_GrabDeviceKey_num_classes, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    {
        static int* const modifiers_bits [] = {
        &hf_x11_xinput_GrabDeviceKey_modifiers_mask_Shift,
        &hf_x11_xinput_GrabDeviceKey_modifiers_mask_Lock,
        &hf_x11_xinput_GrabDeviceKey_modifiers_mask_Control,
        &hf_x11_xinput_GrabDeviceKey_modifiers_mask_1,
        &hf_x11_xinput_GrabDeviceKey_modifiers_mask_2,
        &hf_x11_xinput_GrabDeviceKey_modifiers_mask_3,
        &hf_x11_xinput_GrabDeviceKey_modifiers_mask_4,
        &hf_x11_xinput_GrabDeviceKey_modifiers_mask_5,
        &hf_x11_xinput_GrabDeviceKey_modifiers_mask_Any,
        NULL
        };
        proto_tree_add_bitmask(t,  tvb, *offsetp, hf_x11_xinput_GrabDeviceKey_modifiers, ett_x11_rectangle, modifiers_bits, byte_order);
    }
    *offsetp += 2;
    field8(tvb, offsetp, t, hf_x11_xinput_GrabDeviceKey_modifier_device, byte_order);
    proto_tree_add_item(t, hf_x11_xinput_GrabDeviceKey_grabbed_device, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    field8(tvb, offsetp, t, hf_x11_xinput_GrabDeviceKey_key, byte_order);
    field8(tvb, offsetp, t, hf_x11_xinput_GrabDeviceKey_this_device_mode, byte_order);
    field8(tvb, offsetp, t, hf_x11_xinput_GrabDeviceKey_other_device_mode, byte_order);
    proto_tree_add_item(t, hf_x11_xinput_GrabDeviceKey_owner_events, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 2, ENC_NA);
    *offsetp += 2;
    listOfCard32(tvb, offsetp, t, hf_x11_xinput_GrabDeviceKey_classes, hf_x11_xinput_GrabDeviceKey_classes_item, f_num_classes, byte_order);
    length -= f_num_classes * 4;
}

static void xinputUngrabDeviceKey(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_xinput_UngrabDeviceKey_grabWindow, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    {
        static int* const modifiers_bits [] = {
        &hf_x11_xinput_UngrabDeviceKey_modifiers_mask_Shift,
        &hf_x11_xinput_UngrabDeviceKey_modifiers_mask_Lock,
        &hf_x11_xinput_UngrabDeviceKey_modifiers_mask_Control,
        &hf_x11_xinput_UngrabDeviceKey_modifiers_mask_1,
        &hf_x11_xinput_UngrabDeviceKey_modifiers_mask_2,
        &hf_x11_xinput_UngrabDeviceKey_modifiers_mask_3,
        &hf_x11_xinput_UngrabDeviceKey_modifiers_mask_4,
        &hf_x11_xinput_UngrabDeviceKey_modifiers_mask_5,
        &hf_x11_xinput_UngrabDeviceKey_modifiers_mask_Any,
        NULL
        };
        proto_tree_add_bitmask(t,  tvb, *offsetp, hf_x11_xinput_UngrabDeviceKey_modifiers, ett_x11_rectangle, modifiers_bits, byte_order);
    }
    *offsetp += 2;
    field8(tvb, offsetp, t, hf_x11_xinput_UngrabDeviceKey_modifier_device, byte_order);
    field8(tvb, offsetp, t, hf_x11_xinput_UngrabDeviceKey_key, byte_order);
    proto_tree_add_item(t, hf_x11_xinput_UngrabDeviceKey_grabbed_device, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
}

static void xinputGrabDeviceButton(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    int f_num_classes;
    proto_tree_add_item(t, hf_x11_xinput_GrabDeviceButton_grab_window, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xinput_GrabDeviceButton_grabbed_device, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    field8(tvb, offsetp, t, hf_x11_xinput_GrabDeviceButton_modifier_device, byte_order);
    f_num_classes = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_xinput_GrabDeviceButton_num_classes, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    {
        static int* const modifiers_bits [] = {
        &hf_x11_xinput_GrabDeviceButton_modifiers_mask_Shift,
        &hf_x11_xinput_GrabDeviceButton_modifiers_mask_Lock,
        &hf_x11_xinput_GrabDeviceButton_modifiers_mask_Control,
        &hf_x11_xinput_GrabDeviceButton_modifiers_mask_1,
        &hf_x11_xinput_GrabDeviceButton_modifiers_mask_2,
        &hf_x11_xinput_GrabDeviceButton_modifiers_mask_3,
        &hf_x11_xinput_GrabDeviceButton_modifiers_mask_4,
        &hf_x11_xinput_GrabDeviceButton_modifiers_mask_5,
        &hf_x11_xinput_GrabDeviceButton_modifiers_mask_Any,
        NULL
        };
        proto_tree_add_bitmask(t,  tvb, *offsetp, hf_x11_xinput_GrabDeviceButton_modifiers, ett_x11_rectangle, modifiers_bits, byte_order);
    }
    *offsetp += 2;
    field8(tvb, offsetp, t, hf_x11_xinput_GrabDeviceButton_this_device_mode, byte_order);
    field8(tvb, offsetp, t, hf_x11_xinput_GrabDeviceButton_other_device_mode, byte_order);
    field8(tvb, offsetp, t, hf_x11_xinput_GrabDeviceButton_button, byte_order);
    proto_tree_add_item(t, hf_x11_xinput_GrabDeviceButton_owner_events, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 2, ENC_NA);
    *offsetp += 2;
    listOfCard32(tvb, offsetp, t, hf_x11_xinput_GrabDeviceButton_classes, hf_x11_xinput_GrabDeviceButton_classes_item, f_num_classes, byte_order);
    length -= f_num_classes * 4;
}

static void xinputUngrabDeviceButton(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_xinput_UngrabDeviceButton_grab_window, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    {
        static int* const modifiers_bits [] = {
        &hf_x11_xinput_UngrabDeviceButton_modifiers_mask_Shift,
        &hf_x11_xinput_UngrabDeviceButton_modifiers_mask_Lock,
        &hf_x11_xinput_UngrabDeviceButton_modifiers_mask_Control,
        &hf_x11_xinput_UngrabDeviceButton_modifiers_mask_1,
        &hf_x11_xinput_UngrabDeviceButton_modifiers_mask_2,
        &hf_x11_xinput_UngrabDeviceButton_modifiers_mask_3,
        &hf_x11_xinput_UngrabDeviceButton_modifiers_mask_4,
        &hf_x11_xinput_UngrabDeviceButton_modifiers_mask_5,
        &hf_x11_xinput_UngrabDeviceButton_modifiers_mask_Any,
        NULL
        };
        proto_tree_add_bitmask(t,  tvb, *offsetp, hf_x11_xinput_UngrabDeviceButton_modifiers, ett_x11_rectangle, modifiers_bits, byte_order);
    }
    *offsetp += 2;
    field8(tvb, offsetp, t, hf_x11_xinput_UngrabDeviceButton_modifier_device, byte_order);
    field8(tvb, offsetp, t, hf_x11_xinput_UngrabDeviceButton_button, byte_order);
    proto_tree_add_item(t, hf_x11_xinput_UngrabDeviceButton_grabbed_device, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 3, ENC_NA);
    *offsetp += 3;
}

static void xinputAllowDeviceEvents(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    field32(tvb, offsetp, t, hf_x11_xinput_AllowDeviceEvents_time, byte_order);
    field8(tvb, offsetp, t, hf_x11_xinput_AllowDeviceEvents_mode, byte_order);
    proto_tree_add_item(t, hf_x11_xinput_AllowDeviceEvents_device_id, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 2, ENC_NA);
    *offsetp += 2;
}

static void xinputGetDeviceFocus(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_xinput_GetDeviceFocus_device_id, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 3, ENC_NA);
    *offsetp += 3;
}
static void xinputGetDeviceFocus_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-GetDeviceFocus");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_xinput_GetDeviceFocus_reply_xi_reply_type, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (xinput-GetDeviceFocus)", sequence_number);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    field32(tvb, offsetp, t, hf_x11_xinput_GetDeviceFocus_reply_focus, byte_order);
    proto_tree_add_item(t, hf_x11_xinput_GetDeviceFocus_reply_time, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    field8(tvb, offsetp, t, hf_x11_xinput_GetDeviceFocus_reply_revert_to, byte_order);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 15, ENC_NA);
    *offsetp += 15;
}

static void xinputSetDeviceFocus(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    field32(tvb, offsetp, t, hf_x11_xinput_SetDeviceFocus_focus, byte_order);
    field32(tvb, offsetp, t, hf_x11_xinput_SetDeviceFocus_time, byte_order);
    field8(tvb, offsetp, t, hf_x11_xinput_SetDeviceFocus_revert_to, byte_order);
    proto_tree_add_item(t, hf_x11_xinput_SetDeviceFocus_device_id, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 2, ENC_NA);
    *offsetp += 2;
}

static int struct_size_xinput_FeedbackState(tvbuff_t *tvb _U_, int *offsetp _U_, unsigned byte_order _U_)
{
    int size = 0;
    return size + 4;
}

static void struct_xinput_FeedbackState(tvbuff_t *tvb, int *offsetp, proto_tree *root, unsigned byte_order _U_, int count)
{
    int i;
    for (i = 0; i < count; i++) {
        proto_item *item;
        proto_tree *t;
        int f_class_id;

        item = proto_tree_add_item(root, hf_x11_struct_xinput_FeedbackState, tvb, *offsetp, struct_size_xinput_FeedbackState(tvb, offsetp, byte_order), ENC_NA);
        t = proto_item_add_subtree(item, ett_x11_rectangle);
        f_class_id = field8(tvb, offsetp, t, hf_x11_struct_xinput_FeedbackState_class_id, byte_order);
        proto_tree_add_item(t, hf_x11_struct_xinput_FeedbackState_feedback_id, tvb, *offsetp, 1, byte_order);
        *offsetp += 1;
        proto_tree_add_item(t, hf_x11_struct_xinput_FeedbackState_len, tvb, *offsetp, 2, byte_order);
        *offsetp += 2;
        if (f_class_id == 0) {
            proto_tree_add_item(t, hf_x11_struct_xinput_FeedbackState_Keyboard_pitch, tvb, *offsetp, 2, byte_order);
            *offsetp += 2;
            proto_tree_add_item(t, hf_x11_struct_xinput_FeedbackState_Keyboard_duration, tvb, *offsetp, 2, byte_order);
            *offsetp += 2;
            proto_tree_add_item(t, hf_x11_struct_xinput_FeedbackState_Keyboard_led_mask, tvb, *offsetp, 4, byte_order);
            *offsetp += 4;
            proto_tree_add_item(t, hf_x11_struct_xinput_FeedbackState_Keyboard_led_values, tvb, *offsetp, 4, byte_order);
            *offsetp += 4;
            proto_tree_add_item(t, hf_x11_struct_xinput_FeedbackState_Keyboard_global_auto_repeat, tvb, *offsetp, 1, byte_order);
            *offsetp += 1;
            proto_tree_add_item(t, hf_x11_struct_xinput_FeedbackState_Keyboard_click, tvb, *offsetp, 1, byte_order);
            *offsetp += 1;
            proto_tree_add_item(t, hf_x11_struct_xinput_FeedbackState_Keyboard_percent, tvb, *offsetp, 1, byte_order);
            *offsetp += 1;
            proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
            *offsetp += 1;
            listOfByte(tvb, offsetp, t, hf_x11_struct_xinput_FeedbackState_Keyboard_auto_repeats, 32, byte_order);
        }
        if (f_class_id == 1) {
            proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 2, ENC_NA);
            *offsetp += 2;
            proto_tree_add_item(t, hf_x11_struct_xinput_FeedbackState_Pointer_accel_num, tvb, *offsetp, 2, byte_order);
            *offsetp += 2;
            proto_tree_add_item(t, hf_x11_struct_xinput_FeedbackState_Pointer_accel_denom, tvb, *offsetp, 2, byte_order);
            *offsetp += 2;
            proto_tree_add_item(t, hf_x11_struct_xinput_FeedbackState_Pointer_threshold, tvb, *offsetp, 2, byte_order);
            *offsetp += 2;
        }
        if (f_class_id == 2) {
            int f_num_keysyms;
            proto_tree_add_item(t, hf_x11_struct_xinput_FeedbackState_String_max_symbols, tvb, *offsetp, 2, byte_order);
            *offsetp += 2;
            f_num_keysyms = tvb_get_uint16(tvb, *offsetp, byte_order);
            proto_tree_add_item(t, hf_x11_struct_xinput_FeedbackState_String_num_keysyms, tvb, *offsetp, 2, byte_order);
            *offsetp += 2;
            listOfCard32(tvb, offsetp, t, hf_x11_struct_xinput_FeedbackState_String_keysyms, hf_x11_struct_xinput_FeedbackState_String_keysyms_item, f_num_keysyms, byte_order);
        }
        if (f_class_id == 3) {
            proto_tree_add_item(t, hf_x11_struct_xinput_FeedbackState_Integer_resolution, tvb, *offsetp, 4, byte_order);
            *offsetp += 4;
            proto_tree_add_item(t, hf_x11_struct_xinput_FeedbackState_Integer_min_value, tvb, *offsetp, 4, byte_order);
            *offsetp += 4;
            proto_tree_add_item(t, hf_x11_struct_xinput_FeedbackState_Integer_max_value, tvb, *offsetp, 4, byte_order);
            *offsetp += 4;
        }
        if (f_class_id == 4) {
            proto_tree_add_item(t, hf_x11_struct_xinput_FeedbackState_Led_led_mask, tvb, *offsetp, 4, byte_order);
            *offsetp += 4;
            proto_tree_add_item(t, hf_x11_struct_xinput_FeedbackState_Led_led_values, tvb, *offsetp, 4, byte_order);
            *offsetp += 4;
        }
        if (f_class_id == 5) {
            proto_tree_add_item(t, hf_x11_struct_xinput_FeedbackState_Bell_percent, tvb, *offsetp, 1, byte_order);
            *offsetp += 1;
            proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 3, ENC_NA);
            *offsetp += 3;
            proto_tree_add_item(t, hf_x11_struct_xinput_FeedbackState_Bell_pitch, tvb, *offsetp, 2, byte_order);
            *offsetp += 2;
            proto_tree_add_item(t, hf_x11_struct_xinput_FeedbackState_Bell_duration, tvb, *offsetp, 2, byte_order);
            *offsetp += 2;
        }
    }
}

static void xinputGetFeedbackControl(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_xinput_GetFeedbackControl_device_id, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 3, ENC_NA);
    *offsetp += 3;
}
static void xinputGetFeedbackControl_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;
    int f_num_feedbacks;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-GetFeedbackControl");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_xinput_GetFeedbackControl_reply_xi_reply_type, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (xinput-GetFeedbackControl)", sequence_number);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    f_num_feedbacks = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_xinput_GetFeedbackControl_reply_num_feedbacks, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 22, ENC_NA);
    *offsetp += 22;
    struct_xinput_FeedbackState(tvb, offsetp, t, byte_order, f_num_feedbacks);
}

static int struct_size_xinput_FeedbackCtl(tvbuff_t *tvb _U_, int *offsetp _U_, unsigned byte_order _U_)
{
    int size = 0;
    return size + 4;
}

static void struct_xinput_FeedbackCtl(tvbuff_t *tvb, int *offsetp, proto_tree *root, unsigned byte_order _U_, int count)
{
    int i;
    for (i = 0; i < count; i++) {
        proto_item *item;
        proto_tree *t;
        int f_class_id;

        item = proto_tree_add_item(root, hf_x11_struct_xinput_FeedbackCtl, tvb, *offsetp, struct_size_xinput_FeedbackCtl(tvb, offsetp, byte_order), ENC_NA);
        t = proto_item_add_subtree(item, ett_x11_rectangle);
        f_class_id = field8(tvb, offsetp, t, hf_x11_struct_xinput_FeedbackCtl_class_id, byte_order);
        proto_tree_add_item(t, hf_x11_struct_xinput_FeedbackCtl_feedback_id, tvb, *offsetp, 1, byte_order);
        *offsetp += 1;
        proto_tree_add_item(t, hf_x11_struct_xinput_FeedbackCtl_len, tvb, *offsetp, 2, byte_order);
        *offsetp += 2;
        if (f_class_id == 0) {
            proto_tree_add_item(t, hf_x11_struct_xinput_FeedbackCtl_Keyboard_key, tvb, *offsetp, 1, byte_order);
            *offsetp += 1;
            proto_tree_add_item(t, hf_x11_struct_xinput_FeedbackCtl_Keyboard_auto_repeat_mode, tvb, *offsetp, 1, byte_order);
            *offsetp += 1;
            proto_tree_add_item(t, hf_x11_struct_xinput_FeedbackCtl_Keyboard_key_click_percent, tvb, *offsetp, 1, byte_order);
            *offsetp += 1;
            proto_tree_add_item(t, hf_x11_struct_xinput_FeedbackCtl_Keyboard_bell_percent, tvb, *offsetp, 1, byte_order);
            *offsetp += 1;
            proto_tree_add_item(t, hf_x11_struct_xinput_FeedbackCtl_Keyboard_bell_pitch, tvb, *offsetp, 2, byte_order);
            *offsetp += 2;
            proto_tree_add_item(t, hf_x11_struct_xinput_FeedbackCtl_Keyboard_bell_duration, tvb, *offsetp, 2, byte_order);
            *offsetp += 2;
            proto_tree_add_item(t, hf_x11_struct_xinput_FeedbackCtl_Keyboard_led_mask, tvb, *offsetp, 4, byte_order);
            *offsetp += 4;
            proto_tree_add_item(t, hf_x11_struct_xinput_FeedbackCtl_Keyboard_led_values, tvb, *offsetp, 4, byte_order);
            *offsetp += 4;
        }
        if (f_class_id == 1) {
            proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 2, ENC_NA);
            *offsetp += 2;
            proto_tree_add_item(t, hf_x11_struct_xinput_FeedbackCtl_Pointer_num, tvb, *offsetp, 2, byte_order);
            *offsetp += 2;
            proto_tree_add_item(t, hf_x11_struct_xinput_FeedbackCtl_Pointer_denom, tvb, *offsetp, 2, byte_order);
            *offsetp += 2;
            proto_tree_add_item(t, hf_x11_struct_xinput_FeedbackCtl_Pointer_threshold, tvb, *offsetp, 2, byte_order);
            *offsetp += 2;
        }
        if (f_class_id == 2) {
            int f_num_keysyms;
            proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 2, ENC_NA);
            *offsetp += 2;
            f_num_keysyms = tvb_get_uint16(tvb, *offsetp, byte_order);
            proto_tree_add_item(t, hf_x11_struct_xinput_FeedbackCtl_String_num_keysyms, tvb, *offsetp, 2, byte_order);
            *offsetp += 2;
            listOfCard32(tvb, offsetp, t, hf_x11_struct_xinput_FeedbackCtl_String_keysyms, hf_x11_struct_xinput_FeedbackCtl_String_keysyms_item, f_num_keysyms, byte_order);
        }
        if (f_class_id == 3) {
            proto_tree_add_item(t, hf_x11_struct_xinput_FeedbackCtl_Integer_int_to_display, tvb, *offsetp, 4, byte_order);
            *offsetp += 4;
        }
        if (f_class_id == 4) {
            proto_tree_add_item(t, hf_x11_struct_xinput_FeedbackCtl_Led_led_mask, tvb, *offsetp, 4, byte_order);
            *offsetp += 4;
            proto_tree_add_item(t, hf_x11_struct_xinput_FeedbackCtl_Led_led_values, tvb, *offsetp, 4, byte_order);
            *offsetp += 4;
        }
        if (f_class_id == 5) {
            proto_tree_add_item(t, hf_x11_struct_xinput_FeedbackCtl_Bell_percent, tvb, *offsetp, 1, byte_order);
            *offsetp += 1;
            proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 3, ENC_NA);
            *offsetp += 3;
            proto_tree_add_item(t, hf_x11_struct_xinput_FeedbackCtl_Bell_pitch, tvb, *offsetp, 2, byte_order);
            *offsetp += 2;
            proto_tree_add_item(t, hf_x11_struct_xinput_FeedbackCtl_Bell_duration, tvb, *offsetp, 2, byte_order);
            *offsetp += 2;
        }
    }
}

static void xinputChangeFeedbackControl(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    {
        static int* const mask_bits [] = {
        &hf_x11_xinput_ChangeFeedbackControl_mask_mask_AccelNum,
        &hf_x11_xinput_ChangeFeedbackControl_mask_mask_AccelDenom,
        &hf_x11_xinput_ChangeFeedbackControl_mask_mask_Threshold,
        &hf_x11_xinput_ChangeFeedbackControl_mask_mask_Duration,
        &hf_x11_xinput_ChangeFeedbackControl_mask_mask_Led,
        &hf_x11_xinput_ChangeFeedbackControl_mask_mask_LedMode,
        &hf_x11_xinput_ChangeFeedbackControl_mask_mask_Key,
        &hf_x11_xinput_ChangeFeedbackControl_mask_mask_AutoRepeatMode,
        NULL
        };
        proto_tree_add_bitmask(t,  tvb, *offsetp, hf_x11_xinput_ChangeFeedbackControl_mask, ett_x11_rectangle, mask_bits, byte_order);
    }
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xinput_ChangeFeedbackControl_device_id, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_xinput_ChangeFeedbackControl_feedback_id, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 2, ENC_NA);
    *offsetp += 2;
    struct_xinput_FeedbackCtl(tvb, offsetp, t, byte_order, 1);
}

static void xinputGetDeviceKeyMapping(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_xinput_GetDeviceKeyMapping_device_id, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_xinput_GetDeviceKeyMapping_first_keycode, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_xinput_GetDeviceKeyMapping_count, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
}
static void xinputGetDeviceKeyMapping_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;
    int f_length;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-GetDeviceKeyMapping");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_xinput_GetDeviceKeyMapping_reply_xi_reply_type, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (xinput-GetDeviceKeyMapping)", sequence_number);
    *offsetp += 2;
    f_length = tvb_get_uint32(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xinput_GetDeviceKeyMapping_reply_keysyms_per_keycode, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 23, ENC_NA);
    *offsetp += 23;
    listOfCard32(tvb, offsetp, t, hf_x11_xinput_GetDeviceKeyMapping_reply_keysyms, hf_x11_xinput_GetDeviceKeyMapping_reply_keysyms_item, f_length, byte_order);
}

static void xinputChangeDeviceKeyMapping(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    int f_keysyms_per_keycode;
    int f_keycode_count;
    proto_tree_add_item(t, hf_x11_xinput_ChangeDeviceKeyMapping_device_id, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_xinput_ChangeDeviceKeyMapping_first_keycode, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    f_keysyms_per_keycode = tvb_get_uint8(tvb, *offsetp);
    proto_tree_add_item(t, hf_x11_xinput_ChangeDeviceKeyMapping_keysyms_per_keycode, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    f_keycode_count = tvb_get_uint8(tvb, *offsetp);
    proto_tree_add_item(t, hf_x11_xinput_ChangeDeviceKeyMapping_keycode_count, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    listOfCard32(tvb, offsetp, t, hf_x11_xinput_ChangeDeviceKeyMapping_keysyms, hf_x11_xinput_ChangeDeviceKeyMapping_keysyms_item, (f_keycode_count * f_keysyms_per_keycode), byte_order);
    length -= (f_keycode_count * f_keysyms_per_keycode) * 4;
}

static void xinputGetDeviceModifierMapping(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_xinput_GetDeviceModifierMapping_device_id, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 3, ENC_NA);
    *offsetp += 3;
}
static void xinputGetDeviceModifierMapping_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;
    int f_keycodes_per_modifier;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-GetDeviceModifierMapping");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_xinput_GetDeviceModifierMapping_reply_xi_reply_type, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (xinput-GetDeviceModifierMapping)", sequence_number);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    f_keycodes_per_modifier = tvb_get_uint8(tvb, *offsetp);
    proto_tree_add_item(t, hf_x11_xinput_GetDeviceModifierMapping_reply_keycodes_per_modifier, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 23, ENC_NA);
    *offsetp += 23;
    listOfByte(tvb, offsetp, t, hf_x11_xinput_GetDeviceModifierMapping_reply_keymaps, (f_keycodes_per_modifier * 8), byte_order);
}

static void xinputSetDeviceModifierMapping(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    int f_keycodes_per_modifier;
    proto_tree_add_item(t, hf_x11_xinput_SetDeviceModifierMapping_device_id, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    f_keycodes_per_modifier = tvb_get_uint8(tvb, *offsetp);
    proto_tree_add_item(t, hf_x11_xinput_SetDeviceModifierMapping_keycodes_per_modifier, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 2, ENC_NA);
    *offsetp += 2;
    listOfByte(tvb, offsetp, t, hf_x11_xinput_SetDeviceModifierMapping_keymaps, (f_keycodes_per_modifier * 8), byte_order);
    length -= (f_keycodes_per_modifier * 8) * 1;
}
static void xinputSetDeviceModifierMapping_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-SetDeviceModifierMapping");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_xinput_SetDeviceModifierMapping_reply_xi_reply_type, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (xinput-SetDeviceModifierMapping)", sequence_number);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    field8(tvb, offsetp, t, hf_x11_xinput_SetDeviceModifierMapping_reply_status, byte_order);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 23, ENC_NA);
    *offsetp += 23;
}

static void xinputGetDeviceButtonMapping(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_xinput_GetDeviceButtonMapping_device_id, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 3, ENC_NA);
    *offsetp += 3;
}
static void xinputGetDeviceButtonMapping_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;
    int f_map_size;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-GetDeviceButtonMapping");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_xinput_GetDeviceButtonMapping_reply_xi_reply_type, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (xinput-GetDeviceButtonMapping)", sequence_number);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    f_map_size = tvb_get_uint8(tvb, *offsetp);
    proto_tree_add_item(t, hf_x11_xinput_GetDeviceButtonMapping_reply_map_size, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 23, ENC_NA);
    *offsetp += 23;
    listOfByte(tvb, offsetp, t, hf_x11_xinput_GetDeviceButtonMapping_reply_map, f_map_size, byte_order);
    if (*offsetp % 4) {
        proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, (4 - *offsetp % 4), ENC_NA);
        *offsetp += (4 - *offsetp % 4);
    }
}

static void xinputSetDeviceButtonMapping(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    int f_map_size;
    proto_tree_add_item(t, hf_x11_xinput_SetDeviceButtonMapping_device_id, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    f_map_size = tvb_get_uint8(tvb, *offsetp);
    proto_tree_add_item(t, hf_x11_xinput_SetDeviceButtonMapping_map_size, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 2, ENC_NA);
    *offsetp += 2;
    listOfByte(tvb, offsetp, t, hf_x11_xinput_SetDeviceButtonMapping_map, f_map_size, byte_order);
    length -= f_map_size * 1;
}
static void xinputSetDeviceButtonMapping_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-SetDeviceButtonMapping");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_xinput_SetDeviceButtonMapping_reply_xi_reply_type, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (xinput-SetDeviceButtonMapping)", sequence_number);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    field8(tvb, offsetp, t, hf_x11_xinput_SetDeviceButtonMapping_reply_status, byte_order);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 23, ENC_NA);
    *offsetp += 23;
}

static int struct_size_xinput_InputState(tvbuff_t *tvb _U_, int *offsetp _U_, unsigned byte_order _U_)
{
    int size = 0;
    return size + 2;
}

static void struct_xinput_InputState(tvbuff_t *tvb, int *offsetp, proto_tree *root, unsigned byte_order _U_, int count)
{
    int i;
    for (i = 0; i < count; i++) {
        proto_item *item;
        proto_tree *t;
        int f_class_id;

        item = proto_tree_add_item(root, hf_x11_struct_xinput_InputState, tvb, *offsetp, struct_size_xinput_InputState(tvb, offsetp, byte_order), ENC_NA);
        t = proto_item_add_subtree(item, ett_x11_rectangle);
        f_class_id = field8(tvb, offsetp, t, hf_x11_struct_xinput_InputState_class_id, byte_order);
        proto_tree_add_item(t, hf_x11_struct_xinput_InputState_len, tvb, *offsetp, 1, byte_order);
        *offsetp += 1;
        if (f_class_id == 0) {
            proto_tree_add_item(t, hf_x11_struct_xinput_InputState_Key_num_keys, tvb, *offsetp, 1, byte_order);
            *offsetp += 1;
            proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
            *offsetp += 1;
            listOfByte(tvb, offsetp, t, hf_x11_struct_xinput_InputState_Key_keys, 32, byte_order);
        }
        if (f_class_id == 1) {
            proto_tree_add_item(t, hf_x11_struct_xinput_InputState_Button_num_buttons, tvb, *offsetp, 1, byte_order);
            *offsetp += 1;
            proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
            *offsetp += 1;
            listOfByte(tvb, offsetp, t, hf_x11_struct_xinput_InputState_Button_buttons, 32, byte_order);
        }
        if (f_class_id == 2) {
            int f_num_valuators;
            f_num_valuators = tvb_get_uint8(tvb, *offsetp);
            proto_tree_add_item(t, hf_x11_struct_xinput_InputState_Valuator_num_valuators, tvb, *offsetp, 1, byte_order);
            *offsetp += 1;
            {
                static int* const mode_bits [] = {
                        &hf_x11_struct_xinput_InputState_Valuator_mode_mask_DeviceModeAbsolute,
                        &hf_x11_struct_xinput_InputState_Valuator_mode_mask_OutOfProximity,
                        NULL
                };
                proto_tree_add_bitmask(t,  tvb, *offsetp, hf_x11_struct_xinput_InputState_Valuator_mode, ett_x11_rectangle, mode_bits, byte_order);
            }
            *offsetp += 1;
            listOfInt32(tvb, offsetp, t, hf_x11_struct_xinput_InputState_Valuator_valuators, hf_x11_struct_xinput_InputState_Valuator_valuators_item, f_num_valuators, byte_order);
        }
    }
}

static void xinputQueryDeviceState(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_xinput_QueryDeviceState_device_id, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 3, ENC_NA);
    *offsetp += 3;
}
static void xinputQueryDeviceState_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;
    int f_num_classes;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-QueryDeviceState");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_xinput_QueryDeviceState_reply_xi_reply_type, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (xinput-QueryDeviceState)", sequence_number);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    f_num_classes = tvb_get_uint8(tvb, *offsetp);
    proto_tree_add_item(t, hf_x11_xinput_QueryDeviceState_reply_num_classes, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 23, ENC_NA);
    *offsetp += 23;
    struct_xinput_InputState(tvb, offsetp, t, byte_order, f_num_classes);
}

static void xinputDeviceBell(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_xinput_DeviceBell_device_id, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_xinput_DeviceBell_feedback_id, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_xinput_DeviceBell_feedback_class, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_xinput_DeviceBell_percent, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
}

static void xinputSetDeviceValuators(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    int f_num_valuators;
    proto_tree_add_item(t, hf_x11_xinput_SetDeviceValuators_device_id, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_xinput_SetDeviceValuators_first_valuator, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    f_num_valuators = tvb_get_uint8(tvb, *offsetp);
    proto_tree_add_item(t, hf_x11_xinput_SetDeviceValuators_num_valuators, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    listOfInt32(tvb, offsetp, t, hf_x11_xinput_SetDeviceValuators_valuators, hf_x11_xinput_SetDeviceValuators_valuators_item, f_num_valuators, byte_order);
    length -= f_num_valuators * 4;
}
static void xinputSetDeviceValuators_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-SetDeviceValuators");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_xinput_SetDeviceValuators_reply_xi_reply_type, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (xinput-SetDeviceValuators)", sequence_number);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    field8(tvb, offsetp, t, hf_x11_xinput_SetDeviceValuators_reply_status, byte_order);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 23, ENC_NA);
    *offsetp += 23;
}

static int struct_size_xinput_DeviceState(tvbuff_t *tvb _U_, int *offsetp _U_, unsigned byte_order _U_)
{
    int size = 0;
    return size + 4;
}

static void struct_xinput_DeviceState(tvbuff_t *tvb, int *offsetp, proto_tree *root, unsigned byte_order _U_, int count)
{
    int i;
    for (i = 0; i < count; i++) {
        proto_item *item;
        proto_tree *t;
        int f_control_id;

        item = proto_tree_add_item(root, hf_x11_struct_xinput_DeviceState, tvb, *offsetp, struct_size_xinput_DeviceState(tvb, offsetp, byte_order), ENC_NA);
        t = proto_item_add_subtree(item, ett_x11_rectangle);
        f_control_id = field16(tvb, offsetp, t, hf_x11_struct_xinput_DeviceState_control_id, byte_order);
        proto_tree_add_item(t, hf_x11_struct_xinput_DeviceState_len, tvb, *offsetp, 2, byte_order);
        *offsetp += 2;
        if (f_control_id == 1) {
            int f_num_valuators;
            f_num_valuators = tvb_get_uint32(tvb, *offsetp, byte_order);
            proto_tree_add_item(t, hf_x11_struct_xinput_DeviceState_resolution_num_valuators, tvb, *offsetp, 4, byte_order);
            *offsetp += 4;
            listOfCard32(tvb, offsetp, t, hf_x11_struct_xinput_DeviceState_resolution_resolution_values, hf_x11_struct_xinput_DeviceState_resolution_resolution_values_item, f_num_valuators, byte_order);
            listOfCard32(tvb, offsetp, t, hf_x11_struct_xinput_DeviceState_resolution_resolution_min, hf_x11_struct_xinput_DeviceState_resolution_resolution_min_item, f_num_valuators, byte_order);
            listOfCard32(tvb, offsetp, t, hf_x11_struct_xinput_DeviceState_resolution_resolution_max, hf_x11_struct_xinput_DeviceState_resolution_resolution_max_item, f_num_valuators, byte_order);
        }
        if (f_control_id == 2) {
            proto_tree_add_item(t, hf_x11_struct_xinput_DeviceState_abs_calib_min_x, tvb, *offsetp, 4, byte_order);
            *offsetp += 4;
            proto_tree_add_item(t, hf_x11_struct_xinput_DeviceState_abs_calib_max_x, tvb, *offsetp, 4, byte_order);
            *offsetp += 4;
            proto_tree_add_item(t, hf_x11_struct_xinput_DeviceState_abs_calib_min_y, tvb, *offsetp, 4, byte_order);
            *offsetp += 4;
            proto_tree_add_item(t, hf_x11_struct_xinput_DeviceState_abs_calib_max_y, tvb, *offsetp, 4, byte_order);
            *offsetp += 4;
            proto_tree_add_item(t, hf_x11_struct_xinput_DeviceState_abs_calib_flip_x, tvb, *offsetp, 4, byte_order);
            *offsetp += 4;
            proto_tree_add_item(t, hf_x11_struct_xinput_DeviceState_abs_calib_flip_y, tvb, *offsetp, 4, byte_order);
            *offsetp += 4;
            proto_tree_add_item(t, hf_x11_struct_xinput_DeviceState_abs_calib_rotation, tvb, *offsetp, 4, byte_order);
            *offsetp += 4;
            proto_tree_add_item(t, hf_x11_struct_xinput_DeviceState_abs_calib_button_threshold, tvb, *offsetp, 4, byte_order);
            *offsetp += 4;
        }
        if (f_control_id == 3) {
            proto_tree_add_item(t, hf_x11_struct_xinput_DeviceState_core_status, tvb, *offsetp, 1, byte_order);
            *offsetp += 1;
            proto_tree_add_item(t, hf_x11_struct_xinput_DeviceState_core_iscore, tvb, *offsetp, 1, byte_order);
            *offsetp += 1;
            proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 2, ENC_NA);
            *offsetp += 2;
        }
        if (f_control_id == 4) {
            proto_tree_add_item(t, hf_x11_struct_xinput_DeviceState_enable_enable, tvb, *offsetp, 1, byte_order);
            *offsetp += 1;
            proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 3, ENC_NA);
            *offsetp += 3;
        }
        if (f_control_id == 5) {
            proto_tree_add_item(t, hf_x11_struct_xinput_DeviceState_abs_area_offset_x, tvb, *offsetp, 4, byte_order);
            *offsetp += 4;
            proto_tree_add_item(t, hf_x11_struct_xinput_DeviceState_abs_area_offset_y, tvb, *offsetp, 4, byte_order);
            *offsetp += 4;
            proto_tree_add_item(t, hf_x11_struct_xinput_DeviceState_abs_area_width, tvb, *offsetp, 4, byte_order);
            *offsetp += 4;
            proto_tree_add_item(t, hf_x11_struct_xinput_DeviceState_abs_area_height, tvb, *offsetp, 4, byte_order);
            *offsetp += 4;
            proto_tree_add_item(t, hf_x11_struct_xinput_DeviceState_abs_area_screen, tvb, *offsetp, 4, byte_order);
            *offsetp += 4;
            proto_tree_add_item(t, hf_x11_struct_xinput_DeviceState_abs_area_following, tvb, *offsetp, 4, byte_order);
            *offsetp += 4;
        }
    }
}

static void xinputGetDeviceControl(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    field16(tvb, offsetp, t, hf_x11_xinput_GetDeviceControl_control_id, byte_order);
    proto_tree_add_item(t, hf_x11_xinput_GetDeviceControl_device_id, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
}
static void xinputGetDeviceControl_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-GetDeviceControl");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_xinput_GetDeviceControl_reply_xi_reply_type, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (xinput-GetDeviceControl)", sequence_number);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    field8(tvb, offsetp, t, hf_x11_xinput_GetDeviceControl_reply_status, byte_order);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 23, ENC_NA);
    *offsetp += 23;
    struct_xinput_DeviceState(tvb, offsetp, t, byte_order, 1);
}

static int struct_size_xinput_DeviceCtl(tvbuff_t *tvb _U_, int *offsetp _U_, unsigned byte_order _U_)
{
    int size = 0;
    return size + 4;
}

static void struct_xinput_DeviceCtl(tvbuff_t *tvb, int *offsetp, proto_tree *root, unsigned byte_order _U_, int count)
{
    int i;
    for (i = 0; i < count; i++) {
        proto_item *item;
        proto_tree *t;
        int f_control_id;

        item = proto_tree_add_item(root, hf_x11_struct_xinput_DeviceCtl, tvb, *offsetp, struct_size_xinput_DeviceCtl(tvb, offsetp, byte_order), ENC_NA);
        t = proto_item_add_subtree(item, ett_x11_rectangle);
        f_control_id = field16(tvb, offsetp, t, hf_x11_struct_xinput_DeviceCtl_control_id, byte_order);
        proto_tree_add_item(t, hf_x11_struct_xinput_DeviceCtl_len, tvb, *offsetp, 2, byte_order);
        *offsetp += 2;
        if (f_control_id == 1) {
            int f_num_valuators;
            proto_tree_add_item(t, hf_x11_struct_xinput_DeviceCtl_resolution_first_valuator, tvb, *offsetp, 1, byte_order);
            *offsetp += 1;
            f_num_valuators = tvb_get_uint8(tvb, *offsetp);
            proto_tree_add_item(t, hf_x11_struct_xinput_DeviceCtl_resolution_num_valuators, tvb, *offsetp, 1, byte_order);
            *offsetp += 1;
            proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 2, ENC_NA);
            *offsetp += 2;
            listOfCard32(tvb, offsetp, t, hf_x11_struct_xinput_DeviceCtl_resolution_resolution_values, hf_x11_struct_xinput_DeviceCtl_resolution_resolution_values_item, f_num_valuators, byte_order);
        }
        if (f_control_id == 2) {
            proto_tree_add_item(t, hf_x11_struct_xinput_DeviceCtl_abs_calib_min_x, tvb, *offsetp, 4, byte_order);
            *offsetp += 4;
            proto_tree_add_item(t, hf_x11_struct_xinput_DeviceCtl_abs_calib_max_x, tvb, *offsetp, 4, byte_order);
            *offsetp += 4;
            proto_tree_add_item(t, hf_x11_struct_xinput_DeviceCtl_abs_calib_min_y, tvb, *offsetp, 4, byte_order);
            *offsetp += 4;
            proto_tree_add_item(t, hf_x11_struct_xinput_DeviceCtl_abs_calib_max_y, tvb, *offsetp, 4, byte_order);
            *offsetp += 4;
            proto_tree_add_item(t, hf_x11_struct_xinput_DeviceCtl_abs_calib_flip_x, tvb, *offsetp, 4, byte_order);
            *offsetp += 4;
            proto_tree_add_item(t, hf_x11_struct_xinput_DeviceCtl_abs_calib_flip_y, tvb, *offsetp, 4, byte_order);
            *offsetp += 4;
            proto_tree_add_item(t, hf_x11_struct_xinput_DeviceCtl_abs_calib_rotation, tvb, *offsetp, 4, byte_order);
            *offsetp += 4;
            proto_tree_add_item(t, hf_x11_struct_xinput_DeviceCtl_abs_calib_button_threshold, tvb, *offsetp, 4, byte_order);
            *offsetp += 4;
        }
        if (f_control_id == 3) {
            proto_tree_add_item(t, hf_x11_struct_xinput_DeviceCtl_core_status, tvb, *offsetp, 1, byte_order);
            *offsetp += 1;
            proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 3, ENC_NA);
            *offsetp += 3;
        }
        if (f_control_id == 4) {
            proto_tree_add_item(t, hf_x11_struct_xinput_DeviceCtl_enable_enable, tvb, *offsetp, 1, byte_order);
            *offsetp += 1;
            proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 3, ENC_NA);
            *offsetp += 3;
        }
        if (f_control_id == 5) {
            proto_tree_add_item(t, hf_x11_struct_xinput_DeviceCtl_abs_area_offset_x, tvb, *offsetp, 4, byte_order);
            *offsetp += 4;
            proto_tree_add_item(t, hf_x11_struct_xinput_DeviceCtl_abs_area_offset_y, tvb, *offsetp, 4, byte_order);
            *offsetp += 4;
            proto_tree_add_item(t, hf_x11_struct_xinput_DeviceCtl_abs_area_width, tvb, *offsetp, 4, byte_order);
            *offsetp += 4;
            proto_tree_add_item(t, hf_x11_struct_xinput_DeviceCtl_abs_area_height, tvb, *offsetp, 4, byte_order);
            *offsetp += 4;
            proto_tree_add_item(t, hf_x11_struct_xinput_DeviceCtl_abs_area_screen, tvb, *offsetp, 4, byte_order);
            *offsetp += 4;
            proto_tree_add_item(t, hf_x11_struct_xinput_DeviceCtl_abs_area_following, tvb, *offsetp, 4, byte_order);
            *offsetp += 4;
        }
    }
}

static void xinputChangeDeviceControl(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    field16(tvb, offsetp, t, hf_x11_xinput_ChangeDeviceControl_control_id, byte_order);
    proto_tree_add_item(t, hf_x11_xinput_ChangeDeviceControl_device_id, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    struct_xinput_DeviceCtl(tvb, offsetp, t, byte_order, 1);
}
static void xinputChangeDeviceControl_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-ChangeDeviceControl");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_xinput_ChangeDeviceControl_reply_xi_reply_type, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (xinput-ChangeDeviceControl)", sequence_number);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    field8(tvb, offsetp, t, hf_x11_xinput_ChangeDeviceControl_reply_status, byte_order);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 23, ENC_NA);
    *offsetp += 23;
}

static void xinputListDeviceProperties(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_xinput_ListDeviceProperties_device_id, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 3, ENC_NA);
    *offsetp += 3;
}
static void xinputListDeviceProperties_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;
    int f_num_atoms;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-ListDeviceProperties");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_xinput_ListDeviceProperties_reply_xi_reply_type, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (xinput-ListDeviceProperties)", sequence_number);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    f_num_atoms = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_xinput_ListDeviceProperties_reply_num_atoms, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 22, ENC_NA);
    *offsetp += 22;
    listOfCard32(tvb, offsetp, t, hf_x11_xinput_ListDeviceProperties_reply_atoms, hf_x11_xinput_ListDeviceProperties_reply_atoms_item, f_num_atoms, byte_order);
}

static void xinputChangeDeviceProperty(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    int f_format;
    int f_num_items;
    proto_tree_add_item(t, hf_x11_xinput_ChangeDeviceProperty_property, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xinput_ChangeDeviceProperty_type, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xinput_ChangeDeviceProperty_device_id, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    f_format = field8(tvb, offsetp, t, hf_x11_xinput_ChangeDeviceProperty_format, byte_order);
    field8(tvb, offsetp, t, hf_x11_xinput_ChangeDeviceProperty_mode, byte_order);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    f_num_items = tvb_get_uint32(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_xinput_ChangeDeviceProperty_num_items, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    if (f_format == 8) {
        listOfByte(tvb, offsetp, t, hf_x11_xinput_ChangeDeviceProperty_8Bits_data8, f_num_items, byte_order);
        length -= f_num_items * 1;
        if (*offsetp % 4) {
            proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, (4 - *offsetp % 4), ENC_NA);
            *offsetp += (4 - *offsetp % 4);
        }
        length = ((length + 3) & ~3);
    }
    if (f_format == 16) {
        listOfCard16(tvb, offsetp, t, hf_x11_xinput_ChangeDeviceProperty_16Bits_data16, hf_x11_xinput_ChangeDeviceProperty_16Bits_data16_item, f_num_items, byte_order);
        length -= f_num_items * 2;
        if (*offsetp % 4) {
            proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, (4 - *offsetp % 4), ENC_NA);
            *offsetp += (4 - *offsetp % 4);
        }
        length = ((length + 3) & ~3);
    }
    if (f_format == 32) {
        listOfCard32(tvb, offsetp, t, hf_x11_xinput_ChangeDeviceProperty_32Bits_data32, hf_x11_xinput_ChangeDeviceProperty_32Bits_data32_item, f_num_items, byte_order);
        length -= f_num_items * 4;
    }
}

static void xinputDeleteDeviceProperty(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_xinput_DeleteDeviceProperty_property, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xinput_DeleteDeviceProperty_device_id, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 3, ENC_NA);
    *offsetp += 3;
}

static void xinputGetDeviceProperty(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_xinput_GetDeviceProperty_property, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xinput_GetDeviceProperty_type, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xinput_GetDeviceProperty_offset, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xinput_GetDeviceProperty_len, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xinput_GetDeviceProperty_device_id, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_xinput_GetDeviceProperty_delete, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 2, ENC_NA);
    *offsetp += 2;
}
static void xinputGetDeviceProperty_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;
    int f_num_items;
    int f_format;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-GetDeviceProperty");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_xinput_GetDeviceProperty_reply_xi_reply_type, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (xinput-GetDeviceProperty)", sequence_number);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xinput_GetDeviceProperty_reply_type, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xinput_GetDeviceProperty_reply_bytes_after, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    f_num_items = tvb_get_uint32(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_xinput_GetDeviceProperty_reply_num_items, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    f_format = field8(tvb, offsetp, t, hf_x11_xinput_GetDeviceProperty_reply_format, byte_order);
    proto_tree_add_item(t, hf_x11_xinput_GetDeviceProperty_reply_device_id, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 10, ENC_NA);
    *offsetp += 10;
    if (f_format == 8) {
        listOfByte(tvb, offsetp, t, hf_x11_xinput_GetDeviceProperty_reply_8Bits_data8, f_num_items, byte_order);
        if (*offsetp % 4) {
            proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, (4 - *offsetp % 4), ENC_NA);
            *offsetp += (4 - *offsetp % 4);
        }
    }
    if (f_format == 16) {
        listOfCard16(tvb, offsetp, t, hf_x11_xinput_GetDeviceProperty_reply_16Bits_data16, hf_x11_xinput_GetDeviceProperty_reply_16Bits_data16_item, f_num_items, byte_order);
        if (*offsetp % 4) {
            proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, (4 - *offsetp % 4), ENC_NA);
            *offsetp += (4 - *offsetp % 4);
        }
    }
    if (f_format == 32) {
        listOfCard32(tvb, offsetp, t, hf_x11_xinput_GetDeviceProperty_reply_32Bits_data32, hf_x11_xinput_GetDeviceProperty_reply_32Bits_data32_item, f_num_items, byte_order);
    }
}

static void struct_xinput_GroupInfo(tvbuff_t *tvb, int *offsetp, proto_tree *root, unsigned byte_order _U_, int count)
{
    int i;
    for (i = 0; i < count; i++) {
        proto_item *item;
        proto_tree *t;

        item = proto_tree_add_item(root, hf_x11_struct_xinput_GroupInfo, tvb, *offsetp, 4, ENC_NA);
        t = proto_item_add_subtree(item, ett_x11_rectangle);
        proto_tree_add_item(t, hf_x11_struct_xinput_GroupInfo_base, tvb, *offsetp, 1, byte_order);
        *offsetp += 1;
        proto_tree_add_item(t, hf_x11_struct_xinput_GroupInfo_latched, tvb, *offsetp, 1, byte_order);
        *offsetp += 1;
        proto_tree_add_item(t, hf_x11_struct_xinput_GroupInfo_locked, tvb, *offsetp, 1, byte_order);
        *offsetp += 1;
        proto_tree_add_item(t, hf_x11_struct_xinput_GroupInfo_effective, tvb, *offsetp, 1, byte_order);
        *offsetp += 1;
    }
}

static void struct_xinput_ModifierInfo(tvbuff_t *tvb, int *offsetp, proto_tree *root, unsigned byte_order _U_, int count)
{
    int i;
    for (i = 0; i < count; i++) {
        proto_item *item;
        proto_tree *t;

        item = proto_tree_add_item(root, hf_x11_struct_xinput_ModifierInfo, tvb, *offsetp, 16, ENC_NA);
        t = proto_item_add_subtree(item, ett_x11_rectangle);
        proto_tree_add_item(t, hf_x11_struct_xinput_ModifierInfo_base, tvb, *offsetp, 4, byte_order);
        *offsetp += 4;
        proto_tree_add_item(t, hf_x11_struct_xinput_ModifierInfo_latched, tvb, *offsetp, 4, byte_order);
        *offsetp += 4;
        proto_tree_add_item(t, hf_x11_struct_xinput_ModifierInfo_locked, tvb, *offsetp, 4, byte_order);
        *offsetp += 4;
        proto_tree_add_item(t, hf_x11_struct_xinput_ModifierInfo_effective, tvb, *offsetp, 4, byte_order);
        *offsetp += 4;
    }
}

static void xinputXIQueryPointer(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_xinput_XIQueryPointer_window, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    field16(tvb, offsetp, t, hf_x11_xinput_XIQueryPointer_deviceid, byte_order);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 2, ENC_NA);
    *offsetp += 2;
}
static void xinputXIQueryPointer_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;
    int f_buttons_len;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-XIQueryPointer");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (xinput-XIQueryPointer)", sequence_number);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xinput_XIQueryPointer_reply_root, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xinput_XIQueryPointer_reply_child, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xinput_XIQueryPointer_reply_root_x, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xinput_XIQueryPointer_reply_root_y, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xinput_XIQueryPointer_reply_win_x, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xinput_XIQueryPointer_reply_win_y, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xinput_XIQueryPointer_reply_same_screen, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    f_buttons_len = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_xinput_XIQueryPointer_reply_buttons_len, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    struct_xinput_ModifierInfo(tvb, offsetp, t, byte_order, 1);
    struct_xinput_GroupInfo(tvb, offsetp, t, byte_order, 1);
    listOfCard32(tvb, offsetp, t, hf_x11_xinput_XIQueryPointer_reply_buttons, hf_x11_xinput_XIQueryPointer_reply_buttons_item, f_buttons_len, byte_order);
}

static void xinputXIWarpPointer(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_xinput_XIWarpPointer_src_win, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xinput_XIWarpPointer_dst_win, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xinput_XIWarpPointer_src_x, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xinput_XIWarpPointer_src_y, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xinput_XIWarpPointer_src_width, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_xinput_XIWarpPointer_src_height, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_xinput_XIWarpPointer_dst_x, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xinput_XIWarpPointer_dst_y, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    field16(tvb, offsetp, t, hf_x11_xinput_XIWarpPointer_deviceid, byte_order);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 2, ENC_NA);
    *offsetp += 2;
}

static void xinputXIChangeCursor(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_xinput_XIChangeCursor_window, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xinput_XIChangeCursor_cursor, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    field16(tvb, offsetp, t, hf_x11_xinput_XIChangeCursor_deviceid, byte_order);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 2, ENC_NA);
    *offsetp += 2;
}

static int struct_size_xinput_HierarchyChange(tvbuff_t *tvb _U_, int *offsetp _U_, unsigned byte_order _U_)
{
    int size = 0;
    return size + 4;
}

static void struct_xinput_HierarchyChange(tvbuff_t *tvb, int *offsetp, proto_tree *root, unsigned byte_order _U_, int count)
{
    int i;
    for (i = 0; i < count; i++) {
        proto_item *item;
        proto_tree *t;
        int f_type;

        item = proto_tree_add_item(root, hf_x11_struct_xinput_HierarchyChange, tvb, *offsetp, struct_size_xinput_HierarchyChange(tvb, offsetp, byte_order), ENC_NA);
        t = proto_item_add_subtree(item, ett_x11_rectangle);
        f_type = field16(tvb, offsetp, t, hf_x11_struct_xinput_HierarchyChange_type, byte_order);
        proto_tree_add_item(t, hf_x11_struct_xinput_HierarchyChange_len, tvb, *offsetp, 2, byte_order);
        *offsetp += 2;
        if (f_type == 1) {
            int f_name_len;
            f_name_len = tvb_get_uint16(tvb, *offsetp, byte_order);
            proto_tree_add_item(t, hf_x11_struct_xinput_HierarchyChange_AddMaster_name_len, tvb, *offsetp, 2, byte_order);
            *offsetp += 2;
            proto_tree_add_item(t, hf_x11_struct_xinput_HierarchyChange_AddMaster_send_core, tvb, *offsetp, 1, byte_order);
            *offsetp += 1;
            proto_tree_add_item(t, hf_x11_struct_xinput_HierarchyChange_AddMaster_enable, tvb, *offsetp, 1, byte_order);
            *offsetp += 1;
            listOfByte(tvb, offsetp, t, hf_x11_struct_xinput_HierarchyChange_AddMaster_name, f_name_len, byte_order);
            if (*offsetp % 4) {
                proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, (4 - *offsetp % 4), ENC_NA);
                *offsetp += (4 - *offsetp % 4);
            }
        }
        if (f_type == 2) {
            field16(tvb, offsetp, t, hf_x11_struct_xinput_HierarchyChange_RemoveMaster_deviceid, byte_order);
            field8(tvb, offsetp, t, hf_x11_struct_xinput_HierarchyChange_RemoveMaster_return_mode, byte_order);
            proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
            *offsetp += 1;
            field16(tvb, offsetp, t, hf_x11_struct_xinput_HierarchyChange_RemoveMaster_return_pointer, byte_order);
            field16(tvb, offsetp, t, hf_x11_struct_xinput_HierarchyChange_RemoveMaster_return_keyboard, byte_order);
        }
        if (f_type == 3) {
            field16(tvb, offsetp, t, hf_x11_struct_xinput_HierarchyChange_AttachSlave_deviceid, byte_order);
            field16(tvb, offsetp, t, hf_x11_struct_xinput_HierarchyChange_AttachSlave_master, byte_order);
        }
        if (f_type == 4) {
            field16(tvb, offsetp, t, hf_x11_struct_xinput_HierarchyChange_DetachSlave_deviceid, byte_order);
            proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 2, ENC_NA);
            *offsetp += 2;
        }
    }
}

static void xinputXIChangeHierarchy(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    int f_num_changes;
    f_num_changes = tvb_get_uint8(tvb, *offsetp);
    proto_tree_add_item(t, hf_x11_xinput_XIChangeHierarchy_num_changes, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 3, ENC_NA);
    *offsetp += 3;
    struct_xinput_HierarchyChange(tvb, offsetp, t, byte_order, f_num_changes);
    length -= f_num_changes * 0;
}

static void xinputXISetClientPointer(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_xinput_XISetClientPointer_window, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    field16(tvb, offsetp, t, hf_x11_xinput_XISetClientPointer_deviceid, byte_order);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 2, ENC_NA);
    *offsetp += 2;
}

static void xinputXIGetClientPointer(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_xinput_XIGetClientPointer_window, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}
static void xinputXIGetClientPointer_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-XIGetClientPointer");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (xinput-XIGetClientPointer)", sequence_number);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xinput_XIGetClientPointer_reply_set, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    field16(tvb, offsetp, t, hf_x11_xinput_XIGetClientPointer_reply_deviceid, byte_order);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 20, ENC_NA);
    *offsetp += 20;
}

static int struct_size_xinput_EventMask(tvbuff_t *tvb _U_, int *offsetp _U_, unsigned byte_order _U_)
{
    int size = 0;
    int f_mask_len;
    f_mask_len = tvb_get_uint16(tvb, *offsetp + size + 2, byte_order);
    size += f_mask_len * 4;
    return size + 4;
}

static void struct_xinput_EventMask(tvbuff_t *tvb, int *offsetp, proto_tree *root, unsigned byte_order _U_, int count)
{
    int i;
    for (i = 0; i < count; i++) {
        proto_item *item;
        proto_tree *t;
        int f_mask_len;

        item = proto_tree_add_item(root, hf_x11_struct_xinput_EventMask, tvb, *offsetp, struct_size_xinput_EventMask(tvb, offsetp, byte_order), ENC_NA);
        t = proto_item_add_subtree(item, ett_x11_rectangle);
        field16(tvb, offsetp, t, hf_x11_struct_xinput_EventMask_deviceid, byte_order);
        f_mask_len = tvb_get_uint16(tvb, *offsetp, byte_order);
        proto_tree_add_item(t, hf_x11_struct_xinput_EventMask_mask_len, tvb, *offsetp, 2, byte_order);
        *offsetp += 2;
        listOfCard32(tvb, offsetp, t, hf_x11_struct_xinput_EventMask_mask, hf_x11_struct_xinput_EventMask_mask_item, f_mask_len, byte_order);
    }
}

static void xinputXISelectEvents(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    int f_num_mask;
    proto_tree_add_item(t, hf_x11_xinput_XISelectEvents_window, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    f_num_mask = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_xinput_XISelectEvents_num_mask, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 2, ENC_NA);
    *offsetp += 2;
    struct_xinput_EventMask(tvb, offsetp, t, byte_order, f_num_mask);
    length -= f_num_mask * 0;
}

static void xinputXIQueryVersion(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_xinput_XIQueryVersion_major_version, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_xinput_XIQueryVersion_minor_version, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
}
static void xinputXIQueryVersion_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-XIQueryVersion");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (xinput-XIQueryVersion)", sequence_number);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xinput_XIQueryVersion_reply_major_version, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_xinput_XIQueryVersion_reply_minor_version, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 20, ENC_NA);
    *offsetp += 20;
}

static int struct_size_xinput_DeviceClass(tvbuff_t *tvb _U_, int *offsetp _U_, unsigned byte_order _U_)
{
    int size = 0;
    return size + 6;
}

static void struct_xinput_DeviceClass(tvbuff_t *tvb, int *offsetp, proto_tree *root, unsigned byte_order _U_, int count)
{
    int i;
    for (i = 0; i < count; i++) {
        proto_item *item;
        proto_tree *t;
        int f_type;

        item = proto_tree_add_item(root, hf_x11_struct_xinput_DeviceClass, tvb, *offsetp, struct_size_xinput_DeviceClass(tvb, offsetp, byte_order), ENC_NA);
        t = proto_item_add_subtree(item, ett_x11_rectangle);
        f_type = field16(tvb, offsetp, t, hf_x11_struct_xinput_DeviceClass_type, byte_order);
        proto_tree_add_item(t, hf_x11_struct_xinput_DeviceClass_len, tvb, *offsetp, 2, byte_order);
        *offsetp += 2;
        proto_tree_add_item(t, hf_x11_struct_xinput_DeviceClass_sourceid, tvb, *offsetp, 2, byte_order);
        *offsetp += 2;
        if (f_type == 0) {
            int f_num_keys;
            f_num_keys = tvb_get_uint16(tvb, *offsetp, byte_order);
            proto_tree_add_item(t, hf_x11_struct_xinput_DeviceClass_Key_num_keys, tvb, *offsetp, 2, byte_order);
            *offsetp += 2;
            listOfCard32(tvb, offsetp, t, hf_x11_struct_xinput_DeviceClass_Key_keys, hf_x11_struct_xinput_DeviceClass_Key_keys_item, f_num_keys, byte_order);
        }
        if (f_type == 1) {
            int f_num_buttons;
            f_num_buttons = tvb_get_uint16(tvb, *offsetp, byte_order);
            proto_tree_add_item(t, hf_x11_struct_xinput_DeviceClass_Button_num_buttons, tvb, *offsetp, 2, byte_order);
            *offsetp += 2;
            listOfCard32(tvb, offsetp, t, hf_x11_struct_xinput_DeviceClass_Button_state, hf_x11_struct_xinput_DeviceClass_Button_state_item, ((f_num_buttons + 31) / 32), byte_order);
            listOfCard32(tvb, offsetp, t, hf_x11_struct_xinput_DeviceClass_Button_labels, hf_x11_struct_xinput_DeviceClass_Button_labels_item, f_num_buttons, byte_order);
        }
        if (f_type == 2) {
            proto_tree_add_item(t, hf_x11_struct_xinput_DeviceClass_Valuator_number, tvb, *offsetp, 2, byte_order);
            *offsetp += 2;
            proto_tree_add_item(t, hf_x11_struct_xinput_DeviceClass_Valuator_label, tvb, *offsetp, 4, byte_order);
            *offsetp += 4;
            struct_xinput_FP3232(tvb, offsetp, t, byte_order, 1);
            struct_xinput_FP3232(tvb, offsetp, t, byte_order, 1);
            struct_xinput_FP3232(tvb, offsetp, t, byte_order, 1);
            proto_tree_add_item(t, hf_x11_struct_xinput_DeviceClass_Valuator_resolution, tvb, *offsetp, 4, byte_order);
            *offsetp += 4;
            field8(tvb, offsetp, t, hf_x11_struct_xinput_DeviceClass_Valuator_mode, byte_order);
            proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 3, ENC_NA);
            *offsetp += 3;
        }
        if (f_type == 3) {
            proto_tree_add_item(t, hf_x11_struct_xinput_DeviceClass_Scroll_number, tvb, *offsetp, 2, byte_order);
            *offsetp += 2;
            field16(tvb, offsetp, t, hf_x11_struct_xinput_DeviceClass_Scroll_scroll_type, byte_order);
            proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 2, ENC_NA);
            *offsetp += 2;
            {
                static int* const flags_bits [] = {
                        &hf_x11_struct_xinput_DeviceClass_Scroll_flags_mask_NoEmulation,
                        &hf_x11_struct_xinput_DeviceClass_Scroll_flags_mask_Preferred,
                        NULL
                };
                proto_tree_add_bitmask(t,  tvb, *offsetp, hf_x11_struct_xinput_DeviceClass_Scroll_flags, ett_x11_rectangle, flags_bits, byte_order);
            }
            *offsetp += 4;
            struct_xinput_FP3232(tvb, offsetp, t, byte_order, 1);
        }
        if (f_type == 8) {
            field8(tvb, offsetp, t, hf_x11_struct_xinput_DeviceClass_Touch_mode, byte_order);
            proto_tree_add_item(t, hf_x11_struct_xinput_DeviceClass_Touch_num_touches, tvb, *offsetp, 1, byte_order);
            *offsetp += 1;
        }
        if (f_type == 9) {
            proto_tree_add_item(t, hf_x11_struct_xinput_DeviceClass_Gesture_num_touches, tvb, *offsetp, 1, byte_order);
            *offsetp += 1;
            proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
            *offsetp += 1;
        }
    }
}

static int struct_size_xinput_XIDeviceInfo(tvbuff_t *tvb _U_, int *offsetp _U_, unsigned byte_order _U_)
{
    int size = 0;
    int i, off;
    int f_name_len;
    int f_num_classes;
    f_num_classes = tvb_get_uint16(tvb, *offsetp + size + 6, byte_order);
    f_name_len = tvb_get_uint16(tvb, *offsetp + size + 8, byte_order);
    size += f_name_len * 1;
    size = (size + 3) & ~3;
    for (i = 0; i < f_num_classes; i++) {
        off = (*offsetp) + size + 12;
        size += struct_size_xinput_DeviceClass(tvb, &off, byte_order);
    }
    return size + 12;
}

static void struct_xinput_XIDeviceInfo(tvbuff_t *tvb, int *offsetp, proto_tree *root, unsigned byte_order _U_, int count)
{
    int i;
    for (i = 0; i < count; i++) {
        proto_item *item;
        proto_tree *t;
        int f_num_classes;
        int f_name_len;

        item = proto_tree_add_item(root, hf_x11_struct_xinput_XIDeviceInfo, tvb, *offsetp, struct_size_xinput_XIDeviceInfo(tvb, offsetp, byte_order), ENC_NA);
        t = proto_item_add_subtree(item, ett_x11_rectangle);
        field16(tvb, offsetp, t, hf_x11_struct_xinput_XIDeviceInfo_deviceid, byte_order);
        field16(tvb, offsetp, t, hf_x11_struct_xinput_XIDeviceInfo_type, byte_order);
        field16(tvb, offsetp, t, hf_x11_struct_xinput_XIDeviceInfo_attachment, byte_order);
        f_num_classes = tvb_get_uint16(tvb, *offsetp, byte_order);
        proto_tree_add_item(t, hf_x11_struct_xinput_XIDeviceInfo_num_classes, tvb, *offsetp, 2, byte_order);
        *offsetp += 2;
        f_name_len = tvb_get_uint16(tvb, *offsetp, byte_order);
        proto_tree_add_item(t, hf_x11_struct_xinput_XIDeviceInfo_name_len, tvb, *offsetp, 2, byte_order);
        *offsetp += 2;
        proto_tree_add_item(t, hf_x11_struct_xinput_XIDeviceInfo_enabled, tvb, *offsetp, 1, byte_order);
        *offsetp += 1;
        proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
        *offsetp += 1;
        listOfByte(tvb, offsetp, t, hf_x11_struct_xinput_XIDeviceInfo_name, f_name_len, byte_order);
        if (*offsetp % 4) {
            proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, (4 - *offsetp % 4), ENC_NA);
            *offsetp += (4 - *offsetp % 4);
        }
        struct_xinput_DeviceClass(tvb, offsetp, t, byte_order, f_num_classes);
    }
}

static void xinputXIQueryDevice(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    field16(tvb, offsetp, t, hf_x11_xinput_XIQueryDevice_deviceid, byte_order);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 2, ENC_NA);
    *offsetp += 2;
}
static void xinputXIQueryDevice_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;
    int f_num_infos;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-XIQueryDevice");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (xinput-XIQueryDevice)", sequence_number);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    f_num_infos = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_xinput_XIQueryDevice_reply_num_infos, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 22, ENC_NA);
    *offsetp += 22;
    struct_xinput_XIDeviceInfo(tvb, offsetp, t, byte_order, f_num_infos);
}

static void xinputXISetFocus(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_xinput_XISetFocus_window, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    field32(tvb, offsetp, t, hf_x11_xinput_XISetFocus_time, byte_order);
    field16(tvb, offsetp, t, hf_x11_xinput_XISetFocus_deviceid, byte_order);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 2, ENC_NA);
    *offsetp += 2;
}

static void xinputXIGetFocus(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    field16(tvb, offsetp, t, hf_x11_xinput_XIGetFocus_deviceid, byte_order);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 2, ENC_NA);
    *offsetp += 2;
}
static void xinputXIGetFocus_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-XIGetFocus");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (xinput-XIGetFocus)", sequence_number);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xinput_XIGetFocus_reply_focus, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 20, ENC_NA);
    *offsetp += 20;
}

static void xinputXIGrabDevice(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    int f_mask_len;
    proto_tree_add_item(t, hf_x11_xinput_XIGrabDevice_window, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    field32(tvb, offsetp, t, hf_x11_xinput_XIGrabDevice_time, byte_order);
    proto_tree_add_item(t, hf_x11_xinput_XIGrabDevice_cursor, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    field16(tvb, offsetp, t, hf_x11_xinput_XIGrabDevice_deviceid, byte_order);
    field8(tvb, offsetp, t, hf_x11_xinput_XIGrabDevice_mode, byte_order);
    field8(tvb, offsetp, t, hf_x11_xinput_XIGrabDevice_paired_device_mode, byte_order);
    field8(tvb, offsetp, t, hf_x11_xinput_XIGrabDevice_owner_events, byte_order);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    f_mask_len = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_xinput_XIGrabDevice_mask_len, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    listOfCard32(tvb, offsetp, t, hf_x11_xinput_XIGrabDevice_mask, hf_x11_xinput_XIGrabDevice_mask_item, f_mask_len, byte_order);
    length -= f_mask_len * 4;
}
static void xinputXIGrabDevice_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-XIGrabDevice");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (xinput-XIGrabDevice)", sequence_number);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    field8(tvb, offsetp, t, hf_x11_xinput_XIGrabDevice_reply_status, byte_order);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 23, ENC_NA);
    *offsetp += 23;
}

static void xinputXIUngrabDevice(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    field32(tvb, offsetp, t, hf_x11_xinput_XIUngrabDevice_time, byte_order);
    field16(tvb, offsetp, t, hf_x11_xinput_XIUngrabDevice_deviceid, byte_order);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 2, ENC_NA);
    *offsetp += 2;
}

static void xinputXIAllowEvents(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    field32(tvb, offsetp, t, hf_x11_xinput_XIAllowEvents_time, byte_order);
    field16(tvb, offsetp, t, hf_x11_xinput_XIAllowEvents_deviceid, byte_order);
    field8(tvb, offsetp, t, hf_x11_xinput_XIAllowEvents_event_mode, byte_order);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_xinput_XIAllowEvents_touchid, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xinput_XIAllowEvents_grab_window, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}

static void struct_xinput_GrabModifierInfo(tvbuff_t *tvb, int *offsetp, proto_tree *root, unsigned byte_order _U_, int count)
{
    int i;
    for (i = 0; i < count; i++) {
        proto_item *item;
        proto_tree *t;

        item = proto_tree_add_item(root, hf_x11_struct_xinput_GrabModifierInfo, tvb, *offsetp, 8, ENC_NA);
        t = proto_item_add_subtree(item, ett_x11_rectangle);
        field32(tvb, offsetp, t, hf_x11_struct_xinput_GrabModifierInfo_modifiers, byte_order);
        field8(tvb, offsetp, t, hf_x11_struct_xinput_GrabModifierInfo_status, byte_order);
        proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 3, ENC_NA);
        *offsetp += 3;
    }
}

static void xinputXIPassiveGrabDevice(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    int f_num_modifiers;
    int f_mask_len;
    field32(tvb, offsetp, t, hf_x11_xinput_XIPassiveGrabDevice_time, byte_order);
    proto_tree_add_item(t, hf_x11_xinput_XIPassiveGrabDevice_grab_window, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xinput_XIPassiveGrabDevice_cursor, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xinput_XIPassiveGrabDevice_detail, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    field16(tvb, offsetp, t, hf_x11_xinput_XIPassiveGrabDevice_deviceid, byte_order);
    f_num_modifiers = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_xinput_XIPassiveGrabDevice_num_modifiers, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    f_mask_len = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_xinput_XIPassiveGrabDevice_mask_len, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    field8(tvb, offsetp, t, hf_x11_xinput_XIPassiveGrabDevice_grab_type, byte_order);
    field8(tvb, offsetp, t, hf_x11_xinput_XIPassiveGrabDevice_grab_mode, byte_order);
    field8(tvb, offsetp, t, hf_x11_xinput_XIPassiveGrabDevice_paired_device_mode, byte_order);
    field8(tvb, offsetp, t, hf_x11_xinput_XIPassiveGrabDevice_owner_events, byte_order);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 2, ENC_NA);
    *offsetp += 2;
    listOfCard32(tvb, offsetp, t, hf_x11_xinput_XIPassiveGrabDevice_mask, hf_x11_xinput_XIPassiveGrabDevice_mask_item, f_mask_len, byte_order);
    length -= f_mask_len * 4;
    listOfCard32(tvb, offsetp, t, hf_x11_xinput_XIPassiveGrabDevice_modifiers, hf_x11_xinput_XIPassiveGrabDevice_modifiers_item, f_num_modifiers, byte_order);
    length -= f_num_modifiers * 4;
}
static void xinputXIPassiveGrabDevice_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;
    int f_num_modifiers;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-XIPassiveGrabDevice");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (xinput-XIPassiveGrabDevice)", sequence_number);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    f_num_modifiers = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_xinput_XIPassiveGrabDevice_reply_num_modifiers, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 22, ENC_NA);
    *offsetp += 22;
    struct_xinput_GrabModifierInfo(tvb, offsetp, t, byte_order, f_num_modifiers);
}

static void xinputXIPassiveUngrabDevice(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    int f_num_modifiers;
    proto_tree_add_item(t, hf_x11_xinput_XIPassiveUngrabDevice_grab_window, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xinput_XIPassiveUngrabDevice_detail, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    field16(tvb, offsetp, t, hf_x11_xinput_XIPassiveUngrabDevice_deviceid, byte_order);
    f_num_modifiers = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_xinput_XIPassiveUngrabDevice_num_modifiers, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    field8(tvb, offsetp, t, hf_x11_xinput_XIPassiveUngrabDevice_grab_type, byte_order);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 3, ENC_NA);
    *offsetp += 3;
    listOfCard32(tvb, offsetp, t, hf_x11_xinput_XIPassiveUngrabDevice_modifiers, hf_x11_xinput_XIPassiveUngrabDevice_modifiers_item, f_num_modifiers, byte_order);
    length -= f_num_modifiers * 4;
}

static void xinputXIListProperties(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    field16(tvb, offsetp, t, hf_x11_xinput_XIListProperties_deviceid, byte_order);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 2, ENC_NA);
    *offsetp += 2;
}
static void xinputXIListProperties_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;
    int f_num_properties;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-XIListProperties");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (xinput-XIListProperties)", sequence_number);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    f_num_properties = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_xinput_XIListProperties_reply_num_properties, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 22, ENC_NA);
    *offsetp += 22;
    listOfCard32(tvb, offsetp, t, hf_x11_xinput_XIListProperties_reply_properties, hf_x11_xinput_XIListProperties_reply_properties_item, f_num_properties, byte_order);
}

static void xinputXIChangeProperty(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    int f_format;
    int f_num_items;
    field16(tvb, offsetp, t, hf_x11_xinput_XIChangeProperty_deviceid, byte_order);
    field8(tvb, offsetp, t, hf_x11_xinput_XIChangeProperty_mode, byte_order);
    f_format = field8(tvb, offsetp, t, hf_x11_xinput_XIChangeProperty_format, byte_order);
    proto_tree_add_item(t, hf_x11_xinput_XIChangeProperty_property, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xinput_XIChangeProperty_type, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    f_num_items = tvb_get_uint32(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_xinput_XIChangeProperty_num_items, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    if (f_format == 8) {
        listOfByte(tvb, offsetp, t, hf_x11_xinput_XIChangeProperty_8Bits_data8, f_num_items, byte_order);
        length -= f_num_items * 1;
        if (*offsetp % 4) {
            proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, (4 - *offsetp % 4), ENC_NA);
            *offsetp += (4 - *offsetp % 4);
        }
        length = ((length + 3) & ~3);
    }
    if (f_format == 16) {
        listOfCard16(tvb, offsetp, t, hf_x11_xinput_XIChangeProperty_16Bits_data16, hf_x11_xinput_XIChangeProperty_16Bits_data16_item, f_num_items, byte_order);
        length -= f_num_items * 2;
        if (*offsetp % 4) {
            proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, (4 - *offsetp % 4), ENC_NA);
            *offsetp += (4 - *offsetp % 4);
        }
        length = ((length + 3) & ~3);
    }
    if (f_format == 32) {
        listOfCard32(tvb, offsetp, t, hf_x11_xinput_XIChangeProperty_32Bits_data32, hf_x11_xinput_XIChangeProperty_32Bits_data32_item, f_num_items, byte_order);
        length -= f_num_items * 4;
    }
}

static void xinputXIDeleteProperty(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    field16(tvb, offsetp, t, hf_x11_xinput_XIDeleteProperty_deviceid, byte_order);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 2, ENC_NA);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_xinput_XIDeleteProperty_property, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}

static void xinputXIGetProperty(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    field16(tvb, offsetp, t, hf_x11_xinput_XIGetProperty_deviceid, byte_order);
    proto_tree_add_item(t, hf_x11_xinput_XIGetProperty_delete, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_xinput_XIGetProperty_property, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xinput_XIGetProperty_type, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xinput_XIGetProperty_offset, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xinput_XIGetProperty_len, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}
static void xinputXIGetProperty_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;
    int f_num_items;
    int f_format;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-XIGetProperty");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (xinput-XIGetProperty)", sequence_number);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xinput_XIGetProperty_reply_type, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xinput_XIGetProperty_reply_bytes_after, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    f_num_items = tvb_get_uint32(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_xinput_XIGetProperty_reply_num_items, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    f_format = field8(tvb, offsetp, t, hf_x11_xinput_XIGetProperty_reply_format, byte_order);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 11, ENC_NA);
    *offsetp += 11;
    if (f_format == 8) {
        listOfByte(tvb, offsetp, t, hf_x11_xinput_XIGetProperty_reply_8Bits_data8, f_num_items, byte_order);
        if (*offsetp % 4) {
            proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, (4 - *offsetp % 4), ENC_NA);
            *offsetp += (4 - *offsetp % 4);
        }
    }
    if (f_format == 16) {
        listOfCard16(tvb, offsetp, t, hf_x11_xinput_XIGetProperty_reply_16Bits_data16, hf_x11_xinput_XIGetProperty_reply_16Bits_data16_item, f_num_items, byte_order);
        if (*offsetp % 4) {
            proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, (4 - *offsetp % 4), ENC_NA);
            *offsetp += (4 - *offsetp % 4);
        }
    }
    if (f_format == 32) {
        listOfCard32(tvb, offsetp, t, hf_x11_xinput_XIGetProperty_reply_32Bits_data32, hf_x11_xinput_XIGetProperty_reply_32Bits_data32_item, f_num_items, byte_order);
    }
}

static void xinputXIGetSelectedEvents(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_xinput_XIGetSelectedEvents_window, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}
static void xinputXIGetSelectedEvents_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;
    int f_num_masks;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-XIGetSelectedEvents");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (xinput-XIGetSelectedEvents)", sequence_number);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    f_num_masks = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_xinput_XIGetSelectedEvents_reply_num_masks, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 22, ENC_NA);
    *offsetp += 22;
    struct_xinput_EventMask(tvb, offsetp, t, byte_order, f_num_masks);
}

static void struct_xinput_BarrierReleasePointerInfo(tvbuff_t *tvb, int *offsetp, proto_tree *root, unsigned byte_order _U_, int count)
{
    int i;
    for (i = 0; i < count; i++) {
        proto_item *item;
        proto_tree *t;

        item = proto_tree_add_item(root, hf_x11_struct_xinput_BarrierReleasePointerInfo, tvb, *offsetp, 12, ENC_NA);
        t = proto_item_add_subtree(item, ett_x11_rectangle);
        proto_tree_add_item(t, hf_x11_struct_xinput_BarrierReleasePointerInfo_deviceid, tvb, *offsetp, 2, byte_order);
        *offsetp += 2;
        proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 2, ENC_NA);
        *offsetp += 2;
        proto_tree_add_item(t, hf_x11_struct_xinput_BarrierReleasePointerInfo_barrier, tvb, *offsetp, 4, byte_order);
        *offsetp += 4;
        proto_tree_add_item(t, hf_x11_struct_xinput_BarrierReleasePointerInfo_eventid, tvb, *offsetp, 4, byte_order);
        *offsetp += 4;
    }
}

static void xinputXIBarrierReleasePointer(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    int f_num_barriers;
    f_num_barriers = tvb_get_uint32(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_xinput_XIBarrierReleasePointer_num_barriers, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    struct_xinput_BarrierReleasePointerInfo(tvb, offsetp, t, byte_order, f_num_barriers);
    length -= f_num_barriers * 12;
}

static void xinputDeviceKeyPress(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order)
{
    proto_tree_add_item(t, hf_x11_xinput_DeviceKeyPress_detail, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    CARD16(event_sequencenumber);
    proto_tree_add_item(t, hf_x11_xinput_DeviceKeyPress_time, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xinput_DeviceKeyPress_root, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xinput_DeviceKeyPress_event, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    field32(tvb, offsetp, t, hf_x11_xinput_DeviceKeyPress_child, byte_order);
    proto_tree_add_item(t, hf_x11_xinput_DeviceKeyPress_root_x, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_xinput_DeviceKeyPress_root_y, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_xinput_DeviceKeyPress_event_x, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_xinput_DeviceKeyPress_event_y, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    {
        static int* const state_bits [] = {
        &hf_x11_xinput_DeviceKeyPress_state_mask_Shift,
        &hf_x11_xinput_DeviceKeyPress_state_mask_Lock,
        &hf_x11_xinput_DeviceKeyPress_state_mask_Control,
        &hf_x11_xinput_DeviceKeyPress_state_mask_Mod1,
        &hf_x11_xinput_DeviceKeyPress_state_mask_Mod2,
        &hf_x11_xinput_DeviceKeyPress_state_mask_Mod3,
        &hf_x11_xinput_DeviceKeyPress_state_mask_Mod4,
        &hf_x11_xinput_DeviceKeyPress_state_mask_Mod5,
        &hf_x11_xinput_DeviceKeyPress_state_mask_Button1,
        &hf_x11_xinput_DeviceKeyPress_state_mask_Button2,
        &hf_x11_xinput_DeviceKeyPress_state_mask_Button3,
        &hf_x11_xinput_DeviceKeyPress_state_mask_Button4,
        &hf_x11_xinput_DeviceKeyPress_state_mask_Button5,
        NULL
        };
        proto_tree_add_bitmask(t,  tvb, *offsetp, hf_x11_xinput_DeviceKeyPress_state, ett_x11_rectangle, state_bits, byte_order);
    }
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_xinput_DeviceKeyPress_same_screen, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_xinput_DeviceKeyPress_device_id, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
}


static void xinputDeviceFocusIn(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order)
{
    field8(tvb, offsetp, t, hf_x11_xinput_DeviceFocusIn_detail, byte_order);
    CARD16(event_sequencenumber);
    proto_tree_add_item(t, hf_x11_xinput_DeviceFocusIn_time, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xinput_DeviceFocusIn_window, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    field8(tvb, offsetp, t, hf_x11_xinput_DeviceFocusIn_mode, byte_order);
    proto_tree_add_item(t, hf_x11_xinput_DeviceFocusIn_device_id, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 18, ENC_NA);
    *offsetp += 18;
}


static void xinputDeviceStateNotify(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order)
{
    proto_tree_add_item(t, hf_x11_xinput_DeviceStateNotify_device_id, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    CARD16(event_sequencenumber);
    proto_tree_add_item(t, hf_x11_xinput_DeviceStateNotify_time, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xinput_DeviceStateNotify_num_keys, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_xinput_DeviceStateNotify_num_buttons, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_xinput_DeviceStateNotify_num_valuators, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    {
        static int* const classes_reported_bits [] = {
        &hf_x11_xinput_DeviceStateNotify_classes_reported_mask_ReportingKeys,
        &hf_x11_xinput_DeviceStateNotify_classes_reported_mask_ReportingButtons,
        &hf_x11_xinput_DeviceStateNotify_classes_reported_mask_ReportingValuators,
        &hf_x11_xinput_DeviceStateNotify_classes_reported_mask_DeviceModeAbsolute,
        &hf_x11_xinput_DeviceStateNotify_classes_reported_mask_OutOfProximity,
        NULL
        };
        proto_tree_add_bitmask(t,  tvb, *offsetp, hf_x11_xinput_DeviceStateNotify_classes_reported, ett_x11_rectangle, classes_reported_bits, byte_order);
    }
    *offsetp += 1;
    listOfByte(tvb, offsetp, t, hf_x11_xinput_DeviceStateNotify_buttons, 4, byte_order);
    listOfByte(tvb, offsetp, t, hf_x11_xinput_DeviceStateNotify_keys, 4, byte_order);
    listOfCard32(tvb, offsetp, t, hf_x11_xinput_DeviceStateNotify_valuators, hf_x11_xinput_DeviceStateNotify_valuators_item, 3, byte_order);
}


static void xinputDeviceMappingNotify(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order)
{
    proto_tree_add_item(t, hf_x11_xinput_DeviceMappingNotify_device_id, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    CARD16(event_sequencenumber);
    field8(tvb, offsetp, t, hf_x11_xinput_DeviceMappingNotify_request, byte_order);
    proto_tree_add_item(t, hf_x11_xinput_DeviceMappingNotify_first_keycode, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_xinput_DeviceMappingNotify_count, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_xinput_DeviceMappingNotify_time, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 20, ENC_NA);
    *offsetp += 20;
}


static void xinputChangeDeviceNotify(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order)
{
    proto_tree_add_item(t, hf_x11_xinput_ChangeDeviceNotify_device_id, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    CARD16(event_sequencenumber);
    proto_tree_add_item(t, hf_x11_xinput_ChangeDeviceNotify_time, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    field8(tvb, offsetp, t, hf_x11_xinput_ChangeDeviceNotify_request, byte_order);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 23, ENC_NA);
    *offsetp += 23;
}


static void xinputDeviceKeyStateNotify(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order)
{
    proto_tree_add_item(t, hf_x11_xinput_DeviceKeyStateNotify_device_id, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    CARD16(event_sequencenumber);
    listOfByte(tvb, offsetp, t, hf_x11_xinput_DeviceKeyStateNotify_keys, 28, byte_order);
}


static void xinputDeviceButtonStateNotify(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order)
{
    proto_tree_add_item(t, hf_x11_xinput_DeviceButtonStateNotify_device_id, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    CARD16(event_sequencenumber);
    listOfByte(tvb, offsetp, t, hf_x11_xinput_DeviceButtonStateNotify_buttons, 28, byte_order);
}


static void xinputDevicePresenceNotify(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order)
{
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    CARD16(event_sequencenumber);
    proto_tree_add_item(t, hf_x11_xinput_DevicePresenceNotify_time, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    field8(tvb, offsetp, t, hf_x11_xinput_DevicePresenceNotify_devchange, byte_order);
    proto_tree_add_item(t, hf_x11_xinput_DevicePresenceNotify_device_id, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_xinput_DevicePresenceNotify_control, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 20, ENC_NA);
    *offsetp += 20;
}


static void xinputDevicePropertyNotify(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order)
{
    field8(tvb, offsetp, t, hf_x11_xinput_DevicePropertyNotify_state, byte_order);
    CARD16(event_sequencenumber);
    proto_tree_add_item(t, hf_x11_xinput_DevicePropertyNotify_time, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xinput_DevicePropertyNotify_property, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 19, ENC_NA);
    *offsetp += 19;
    proto_tree_add_item(t, hf_x11_xinput_DevicePropertyNotify_device_id, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
}


static void xinputDeviceChanged(tvbuff_t *tvb, int length _U_, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int f_num_classes;
    proto_tree_add_uint_format_value(t, hf_x11_minor_opcode, tvb, *offsetp, 2, 1,
                               "DeviceChanged (1)");
    field16(tvb, offsetp, t, hf_x11_xinput_DeviceChanged_deviceid, byte_order);
    field32(tvb, offsetp, t, hf_x11_xinput_DeviceChanged_time, byte_order);
    f_num_classes = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_xinput_DeviceChanged_num_classes, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    field16(tvb, offsetp, t, hf_x11_xinput_DeviceChanged_sourceid, byte_order);
    field8(tvb, offsetp, t, hf_x11_xinput_DeviceChanged_reason, byte_order);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 11, ENC_NA);
    *offsetp += 11;
    struct_xinput_DeviceClass(tvb, offsetp, t, byte_order, f_num_classes);
}


static void xinputKeyPress(tvbuff_t *tvb, int length _U_, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int f_buttons_len;
    int f_valuators_len;
    int sumof_valuator_mask = 0;
    proto_tree_add_uint_format_value(t, hf_x11_minor_opcode, tvb, *offsetp, 2, 2,
                               "KeyPress (2)");
    field16(tvb, offsetp, t, hf_x11_xinput_KeyPress_deviceid, byte_order);
    field32(tvb, offsetp, t, hf_x11_xinput_KeyPress_time, byte_order);
    proto_tree_add_item(t, hf_x11_xinput_KeyPress_detail, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xinput_KeyPress_root, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xinput_KeyPress_event, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xinput_KeyPress_child, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xinput_KeyPress_root_x, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xinput_KeyPress_root_y, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xinput_KeyPress_event_x, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xinput_KeyPress_event_y, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    f_buttons_len = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_xinput_KeyPress_buttons_len, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    f_valuators_len = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_xinput_KeyPress_valuators_len, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    field16(tvb, offsetp, t, hf_x11_xinput_KeyPress_sourceid, byte_order);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 2, ENC_NA);
    *offsetp += 2;
    {
        static int* const flags_bits [] = {
        &hf_x11_xinput_KeyPress_flags_mask_KeyRepeat,
        NULL
        };
        proto_tree_add_bitmask(t,  tvb, *offsetp, hf_x11_xinput_KeyPress_flags, ett_x11_rectangle, flags_bits, byte_order);
    }
    *offsetp += 4;
    struct_xinput_ModifierInfo(tvb, offsetp, t, byte_order, 1);
    struct_xinput_GroupInfo(tvb, offsetp, t, byte_order, 1);
    listOfCard32(tvb, offsetp, t, hf_x11_xinput_KeyPress_button_mask, hf_x11_xinput_KeyPress_button_mask_item, f_buttons_len, byte_order);
    {
        int i;
        for (i = 0; i < f_valuators_len; i++) {
            sumof_valuator_mask += tvb_get_uint32(tvb, *offsetp + i * 4, byte_order);
        }
    }
    listOfCard32(tvb, offsetp, t, hf_x11_xinput_KeyPress_valuator_mask, hf_x11_xinput_KeyPress_valuator_mask_item, f_valuators_len, byte_order);
    struct_xinput_FP3232(tvb, offsetp, t, byte_order, sumof_valuator_mask);
}


static void xinputButtonPress(tvbuff_t *tvb, int length _U_, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int f_buttons_len;
    int f_valuators_len;
    int sumof_valuator_mask = 0;
    proto_tree_add_uint_format_value(t, hf_x11_minor_opcode, tvb, *offsetp, 2, 4,
                               "ButtonPress (4)");
    field16(tvb, offsetp, t, hf_x11_xinput_ButtonPress_deviceid, byte_order);
    field32(tvb, offsetp, t, hf_x11_xinput_ButtonPress_time, byte_order);
    proto_tree_add_item(t, hf_x11_xinput_ButtonPress_detail, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xinput_ButtonPress_root, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xinput_ButtonPress_event, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xinput_ButtonPress_child, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xinput_ButtonPress_root_x, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xinput_ButtonPress_root_y, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xinput_ButtonPress_event_x, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xinput_ButtonPress_event_y, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    f_buttons_len = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_xinput_ButtonPress_buttons_len, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    f_valuators_len = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_xinput_ButtonPress_valuators_len, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    field16(tvb, offsetp, t, hf_x11_xinput_ButtonPress_sourceid, byte_order);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 2, ENC_NA);
    *offsetp += 2;
    {
        static int* const flags_bits [] = {
        &hf_x11_xinput_ButtonPress_flags_mask_PointerEmulated,
        NULL
        };
        proto_tree_add_bitmask(t,  tvb, *offsetp, hf_x11_xinput_ButtonPress_flags, ett_x11_rectangle, flags_bits, byte_order);
    }
    *offsetp += 4;
    struct_xinput_ModifierInfo(tvb, offsetp, t, byte_order, 1);
    struct_xinput_GroupInfo(tvb, offsetp, t, byte_order, 1);
    listOfCard32(tvb, offsetp, t, hf_x11_xinput_ButtonPress_button_mask, hf_x11_xinput_ButtonPress_button_mask_item, f_buttons_len, byte_order);
    {
        int i;
        for (i = 0; i < f_valuators_len; i++) {
            sumof_valuator_mask += tvb_get_uint32(tvb, *offsetp + i * 4, byte_order);
        }
    }
    listOfCard32(tvb, offsetp, t, hf_x11_xinput_ButtonPress_valuator_mask, hf_x11_xinput_ButtonPress_valuator_mask_item, f_valuators_len, byte_order);
    struct_xinput_FP3232(tvb, offsetp, t, byte_order, sumof_valuator_mask);
}


static void xinputEnter(tvbuff_t *tvb, int length _U_, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int f_buttons_len;
    proto_tree_add_uint_format_value(t, hf_x11_minor_opcode, tvb, *offsetp, 2, 7,
                               "Enter (7)");
    field16(tvb, offsetp, t, hf_x11_xinput_Enter_deviceid, byte_order);
    field32(tvb, offsetp, t, hf_x11_xinput_Enter_time, byte_order);
    field16(tvb, offsetp, t, hf_x11_xinput_Enter_sourceid, byte_order);
    field8(tvb, offsetp, t, hf_x11_xinput_Enter_mode, byte_order);
    field8(tvb, offsetp, t, hf_x11_xinput_Enter_detail, byte_order);
    proto_tree_add_item(t, hf_x11_xinput_Enter_root, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xinput_Enter_event, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xinput_Enter_child, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xinput_Enter_root_x, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xinput_Enter_root_y, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xinput_Enter_event_x, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xinput_Enter_event_y, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xinput_Enter_same_screen, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_xinput_Enter_focus, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    f_buttons_len = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_xinput_Enter_buttons_len, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    struct_xinput_ModifierInfo(tvb, offsetp, t, byte_order, 1);
    struct_xinput_GroupInfo(tvb, offsetp, t, byte_order, 1);
    listOfCard32(tvb, offsetp, t, hf_x11_xinput_Enter_buttons, hf_x11_xinput_Enter_buttons_item, f_buttons_len, byte_order);
}


static void struct_xinput_HierarchyInfo(tvbuff_t *tvb, int *offsetp, proto_tree *root, unsigned byte_order _U_, int count)
{
    int i;
    for (i = 0; i < count; i++) {
        proto_item *item;
        proto_tree *t;

        item = proto_tree_add_item(root, hf_x11_struct_xinput_HierarchyInfo, tvb, *offsetp, 12, ENC_NA);
        t = proto_item_add_subtree(item, ett_x11_rectangle);
        field16(tvb, offsetp, t, hf_x11_struct_xinput_HierarchyInfo_deviceid, byte_order);
        field16(tvb, offsetp, t, hf_x11_struct_xinput_HierarchyInfo_attachment, byte_order);
        field8(tvb, offsetp, t, hf_x11_struct_xinput_HierarchyInfo_type, byte_order);
        proto_tree_add_item(t, hf_x11_struct_xinput_HierarchyInfo_enabled, tvb, *offsetp, 1, byte_order);
        *offsetp += 1;
        proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 2, ENC_NA);
        *offsetp += 2;
        {
            static int* const flags_bits [] = {
                &hf_x11_struct_xinput_HierarchyInfo_flags_mask_MasterAdded,
                &hf_x11_struct_xinput_HierarchyInfo_flags_mask_MasterRemoved,
                &hf_x11_struct_xinput_HierarchyInfo_flags_mask_SlaveAdded,
                &hf_x11_struct_xinput_HierarchyInfo_flags_mask_SlaveRemoved,
                &hf_x11_struct_xinput_HierarchyInfo_flags_mask_SlaveAttached,
                &hf_x11_struct_xinput_HierarchyInfo_flags_mask_SlaveDetached,
                &hf_x11_struct_xinput_HierarchyInfo_flags_mask_DeviceEnabled,
                &hf_x11_struct_xinput_HierarchyInfo_flags_mask_DeviceDisabled,
                NULL
            };
            proto_tree_add_bitmask(t,  tvb, *offsetp, hf_x11_struct_xinput_HierarchyInfo_flags, ett_x11_rectangle, flags_bits, byte_order);
        }
        *offsetp += 4;
    }
}

static void xinputHierarchy(tvbuff_t *tvb, int length _U_, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int f_num_infos;
    proto_tree_add_uint_format_value(t, hf_x11_minor_opcode, tvb, *offsetp, 2, 11,
                               "Hierarchy (11)");
    field16(tvb, offsetp, t, hf_x11_xinput_Hierarchy_deviceid, byte_order);
    field32(tvb, offsetp, t, hf_x11_xinput_Hierarchy_time, byte_order);
    {
        static int* const flags_bits [] = {
        &hf_x11_xinput_Hierarchy_flags_mask_MasterAdded,
        &hf_x11_xinput_Hierarchy_flags_mask_MasterRemoved,
        &hf_x11_xinput_Hierarchy_flags_mask_SlaveAdded,
        &hf_x11_xinput_Hierarchy_flags_mask_SlaveRemoved,
        &hf_x11_xinput_Hierarchy_flags_mask_SlaveAttached,
        &hf_x11_xinput_Hierarchy_flags_mask_SlaveDetached,
        &hf_x11_xinput_Hierarchy_flags_mask_DeviceEnabled,
        &hf_x11_xinput_Hierarchy_flags_mask_DeviceDisabled,
        NULL
        };
        proto_tree_add_bitmask(t,  tvb, *offsetp, hf_x11_xinput_Hierarchy_flags, ett_x11_rectangle, flags_bits, byte_order);
    }
    *offsetp += 4;
    f_num_infos = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_xinput_Hierarchy_num_infos, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 10, ENC_NA);
    *offsetp += 10;
    struct_xinput_HierarchyInfo(tvb, offsetp, t, byte_order, f_num_infos);
}


static void xinputProperty(tvbuff_t *tvb, int length _U_, int *offsetp, proto_tree *t, unsigned byte_order)
{
    proto_tree_add_uint_format_value(t, hf_x11_minor_opcode, tvb, *offsetp, 2, 12,
                               "Property (12)");
    field16(tvb, offsetp, t, hf_x11_xinput_Property_deviceid, byte_order);
    field32(tvb, offsetp, t, hf_x11_xinput_Property_time, byte_order);
    proto_tree_add_item(t, hf_x11_xinput_Property_property, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    field8(tvb, offsetp, t, hf_x11_xinput_Property_what, byte_order);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 11, ENC_NA);
    *offsetp += 11;
}


static void xinputRawKeyPress(tvbuff_t *tvb, int length _U_, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int f_valuators_len;
    int sumof_valuator_mask = 0;
    proto_tree_add_uint_format_value(t, hf_x11_minor_opcode, tvb, *offsetp, 2, 13,
                               "RawKeyPress (13)");
    field16(tvb, offsetp, t, hf_x11_xinput_RawKeyPress_deviceid, byte_order);
    field32(tvb, offsetp, t, hf_x11_xinput_RawKeyPress_time, byte_order);
    proto_tree_add_item(t, hf_x11_xinput_RawKeyPress_detail, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xinput_RawKeyPress_sourceid, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    f_valuators_len = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_xinput_RawKeyPress_valuators_len, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    {
        static int* const flags_bits [] = {
        &hf_x11_xinput_RawKeyPress_flags_mask_KeyRepeat,
        NULL
        };
        proto_tree_add_bitmask(t,  tvb, *offsetp, hf_x11_xinput_RawKeyPress_flags, ett_x11_rectangle, flags_bits, byte_order);
    }
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 4, ENC_NA);
    *offsetp += 4;
    {
        int i;
        for (i = 0; i < f_valuators_len; i++) {
            sumof_valuator_mask += tvb_get_uint32(tvb, *offsetp + i * 4, byte_order);
        }
    }
    listOfCard32(tvb, offsetp, t, hf_x11_xinput_RawKeyPress_valuator_mask, hf_x11_xinput_RawKeyPress_valuator_mask_item, f_valuators_len, byte_order);
    struct_xinput_FP3232(tvb, offsetp, t, byte_order, sumof_valuator_mask);
    struct_xinput_FP3232(tvb, offsetp, t, byte_order, sumof_valuator_mask);
}


static void xinputRawButtonPress(tvbuff_t *tvb, int length _U_, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int f_valuators_len;
    int sumof_valuator_mask = 0;
    proto_tree_add_uint_format_value(t, hf_x11_minor_opcode, tvb, *offsetp, 2, 15,
                               "RawButtonPress (15)");
    field16(tvb, offsetp, t, hf_x11_xinput_RawButtonPress_deviceid, byte_order);
    field32(tvb, offsetp, t, hf_x11_xinput_RawButtonPress_time, byte_order);
    proto_tree_add_item(t, hf_x11_xinput_RawButtonPress_detail, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xinput_RawButtonPress_sourceid, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    f_valuators_len = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_xinput_RawButtonPress_valuators_len, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    {
        static int* const flags_bits [] = {
        &hf_x11_xinput_RawButtonPress_flags_mask_PointerEmulated,
        NULL
        };
        proto_tree_add_bitmask(t,  tvb, *offsetp, hf_x11_xinput_RawButtonPress_flags, ett_x11_rectangle, flags_bits, byte_order);
    }
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 4, ENC_NA);
    *offsetp += 4;
    {
        int i;
        for (i = 0; i < f_valuators_len; i++) {
            sumof_valuator_mask += tvb_get_uint32(tvb, *offsetp + i * 4, byte_order);
        }
    }
    listOfCard32(tvb, offsetp, t, hf_x11_xinput_RawButtonPress_valuator_mask, hf_x11_xinput_RawButtonPress_valuator_mask_item, f_valuators_len, byte_order);
    struct_xinput_FP3232(tvb, offsetp, t, byte_order, sumof_valuator_mask);
    struct_xinput_FP3232(tvb, offsetp, t, byte_order, sumof_valuator_mask);
}


static void xinputTouchBegin(tvbuff_t *tvb, int length _U_, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int f_buttons_len;
    int f_valuators_len;
    int sumof_valuator_mask = 0;
    proto_tree_add_uint_format_value(t, hf_x11_minor_opcode, tvb, *offsetp, 2, 18,
                               "TouchBegin (18)");
    field16(tvb, offsetp, t, hf_x11_xinput_TouchBegin_deviceid, byte_order);
    field32(tvb, offsetp, t, hf_x11_xinput_TouchBegin_time, byte_order);
    proto_tree_add_item(t, hf_x11_xinput_TouchBegin_detail, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xinput_TouchBegin_root, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xinput_TouchBegin_event, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xinput_TouchBegin_child, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xinput_TouchBegin_root_x, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xinput_TouchBegin_root_y, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xinput_TouchBegin_event_x, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xinput_TouchBegin_event_y, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    f_buttons_len = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_xinput_TouchBegin_buttons_len, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    f_valuators_len = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_xinput_TouchBegin_valuators_len, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    field16(tvb, offsetp, t, hf_x11_xinput_TouchBegin_sourceid, byte_order);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 2, ENC_NA);
    *offsetp += 2;
    {
        static int* const flags_bits [] = {
        &hf_x11_xinput_TouchBegin_flags_mask_TouchPendingEnd,
        &hf_x11_xinput_TouchBegin_flags_mask_TouchEmulatingPointer,
        NULL
        };
        proto_tree_add_bitmask(t,  tvb, *offsetp, hf_x11_xinput_TouchBegin_flags, ett_x11_rectangle, flags_bits, byte_order);
    }
    *offsetp += 4;
    struct_xinput_ModifierInfo(tvb, offsetp, t, byte_order, 1);
    struct_xinput_GroupInfo(tvb, offsetp, t, byte_order, 1);
    listOfCard32(tvb, offsetp, t, hf_x11_xinput_TouchBegin_button_mask, hf_x11_xinput_TouchBegin_button_mask_item, f_buttons_len, byte_order);
    {
        int i;
        for (i = 0; i < f_valuators_len; i++) {
            sumof_valuator_mask += tvb_get_uint32(tvb, *offsetp + i * 4, byte_order);
        }
    }
    listOfCard32(tvb, offsetp, t, hf_x11_xinput_TouchBegin_valuator_mask, hf_x11_xinput_TouchBegin_valuator_mask_item, f_valuators_len, byte_order);
    struct_xinput_FP3232(tvb, offsetp, t, byte_order, sumof_valuator_mask);
}


static void xinputTouchOwnership(tvbuff_t *tvb, int length _U_, int *offsetp, proto_tree *t, unsigned byte_order)
{
    proto_tree_add_uint_format_value(t, hf_x11_minor_opcode, tvb, *offsetp, 2, 21,
                               "TouchOwnership (21)");
    field16(tvb, offsetp, t, hf_x11_xinput_TouchOwnership_deviceid, byte_order);
    field32(tvb, offsetp, t, hf_x11_xinput_TouchOwnership_time, byte_order);
    proto_tree_add_item(t, hf_x11_xinput_TouchOwnership_touchid, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xinput_TouchOwnership_root, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xinput_TouchOwnership_event, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xinput_TouchOwnership_child, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    field16(tvb, offsetp, t, hf_x11_xinput_TouchOwnership_sourceid, byte_order);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 2, ENC_NA);
    *offsetp += 2;
    field32(tvb, offsetp, t, hf_x11_xinput_TouchOwnership_flags, byte_order);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 8, ENC_NA);
    *offsetp += 8;
}


static void xinputRawTouchBegin(tvbuff_t *tvb, int length _U_, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int f_valuators_len;
    int sumof_valuator_mask = 0;
    proto_tree_add_uint_format_value(t, hf_x11_minor_opcode, tvb, *offsetp, 2, 22,
                               "RawTouchBegin (22)");
    field16(tvb, offsetp, t, hf_x11_xinput_RawTouchBegin_deviceid, byte_order);
    field32(tvb, offsetp, t, hf_x11_xinput_RawTouchBegin_time, byte_order);
    proto_tree_add_item(t, hf_x11_xinput_RawTouchBegin_detail, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xinput_RawTouchBegin_sourceid, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    f_valuators_len = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_xinput_RawTouchBegin_valuators_len, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    {
        static int* const flags_bits [] = {
        &hf_x11_xinput_RawTouchBegin_flags_mask_TouchPendingEnd,
        &hf_x11_xinput_RawTouchBegin_flags_mask_TouchEmulatingPointer,
        NULL
        };
        proto_tree_add_bitmask(t,  tvb, *offsetp, hf_x11_xinput_RawTouchBegin_flags, ett_x11_rectangle, flags_bits, byte_order);
    }
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 4, ENC_NA);
    *offsetp += 4;
    {
        int i;
        for (i = 0; i < f_valuators_len; i++) {
            sumof_valuator_mask += tvb_get_uint32(tvb, *offsetp + i * 4, byte_order);
        }
    }
    listOfCard32(tvb, offsetp, t, hf_x11_xinput_RawTouchBegin_valuator_mask, hf_x11_xinput_RawTouchBegin_valuator_mask_item, f_valuators_len, byte_order);
    struct_xinput_FP3232(tvb, offsetp, t, byte_order, sumof_valuator_mask);
    struct_xinput_FP3232(tvb, offsetp, t, byte_order, sumof_valuator_mask);
}


static void xinputBarrierHit(tvbuff_t *tvb, int length _U_, int *offsetp, proto_tree *t, unsigned byte_order)
{
    proto_tree_add_uint_format_value(t, hf_x11_minor_opcode, tvb, *offsetp, 2, 25,
                               "BarrierHit (25)");
    field16(tvb, offsetp, t, hf_x11_xinput_BarrierHit_deviceid, byte_order);
    field32(tvb, offsetp, t, hf_x11_xinput_BarrierHit_time, byte_order);
    proto_tree_add_item(t, hf_x11_xinput_BarrierHit_eventid, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xinput_BarrierHit_root, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xinput_BarrierHit_event, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xinput_BarrierHit_barrier, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xinput_BarrierHit_dtime, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    {
        static int* const flags_bits [] = {
        &hf_x11_xinput_BarrierHit_flags_mask_PointerReleased,
        &hf_x11_xinput_BarrierHit_flags_mask_DeviceIsGrabbed,
        NULL
        };
        proto_tree_add_bitmask(t,  tvb, *offsetp, hf_x11_xinput_BarrierHit_flags, ett_x11_rectangle, flags_bits, byte_order);
    }
    *offsetp += 4;
    field16(tvb, offsetp, t, hf_x11_xinput_BarrierHit_sourceid, byte_order);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 2, ENC_NA);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_xinput_BarrierHit_root_x, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xinput_BarrierHit_root_y, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    struct_xinput_FP3232(tvb, offsetp, t, byte_order, 1);
    struct_xinput_FP3232(tvb, offsetp, t, byte_order, 1);
}


static void xinputGesturePinchBegin(tvbuff_t *tvb, int length _U_, int *offsetp, proto_tree *t, unsigned byte_order)
{
    proto_tree_add_uint_format_value(t, hf_x11_minor_opcode, tvb, *offsetp, 2, 27,
                               "GesturePinchBegin (27)");
    field16(tvb, offsetp, t, hf_x11_xinput_GesturePinchBegin_deviceid, byte_order);
    field32(tvb, offsetp, t, hf_x11_xinput_GesturePinchBegin_time, byte_order);
    proto_tree_add_item(t, hf_x11_xinput_GesturePinchBegin_detail, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xinput_GesturePinchBegin_root, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xinput_GesturePinchBegin_event, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xinput_GesturePinchBegin_child, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xinput_GesturePinchBegin_root_x, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xinput_GesturePinchBegin_root_y, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xinput_GesturePinchBegin_event_x, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xinput_GesturePinchBegin_event_y, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xinput_GesturePinchBegin_delta_x, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xinput_GesturePinchBegin_delta_y, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xinput_GesturePinchBegin_delta_unaccel_x, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xinput_GesturePinchBegin_delta_unaccel_y, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xinput_GesturePinchBegin_scale, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xinput_GesturePinchBegin_delta_angle, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    field16(tvb, offsetp, t, hf_x11_xinput_GesturePinchBegin_sourceid, byte_order);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 2, ENC_NA);
    *offsetp += 2;
    struct_xinput_ModifierInfo(tvb, offsetp, t, byte_order, 1);
    struct_xinput_GroupInfo(tvb, offsetp, t, byte_order, 1);
    {
        static int* const flags_bits [] = {
        &hf_x11_xinput_GesturePinchBegin_flags_mask_GesturePinchCancelled,
        NULL
        };
        proto_tree_add_bitmask(t,  tvb, *offsetp, hf_x11_xinput_GesturePinchBegin_flags, ett_x11_rectangle, flags_bits, byte_order);
    }
    *offsetp += 4;
}


static void xinputGestureSwipeBegin(tvbuff_t *tvb, int length _U_, int *offsetp, proto_tree *t, unsigned byte_order)
{
    proto_tree_add_uint_format_value(t, hf_x11_minor_opcode, tvb, *offsetp, 2, 30,
                               "GestureSwipeBegin (30)");
    field16(tvb, offsetp, t, hf_x11_xinput_GestureSwipeBegin_deviceid, byte_order);
    field32(tvb, offsetp, t, hf_x11_xinput_GestureSwipeBegin_time, byte_order);
    proto_tree_add_item(t, hf_x11_xinput_GestureSwipeBegin_detail, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xinput_GestureSwipeBegin_root, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xinput_GestureSwipeBegin_event, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xinput_GestureSwipeBegin_child, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xinput_GestureSwipeBegin_root_x, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xinput_GestureSwipeBegin_root_y, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xinput_GestureSwipeBegin_event_x, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xinput_GestureSwipeBegin_event_y, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xinput_GestureSwipeBegin_delta_x, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xinput_GestureSwipeBegin_delta_y, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xinput_GestureSwipeBegin_delta_unaccel_x, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xinput_GestureSwipeBegin_delta_unaccel_y, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    field16(tvb, offsetp, t, hf_x11_xinput_GestureSwipeBegin_sourceid, byte_order);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 2, ENC_NA);
    *offsetp += 2;
    struct_xinput_ModifierInfo(tvb, offsetp, t, byte_order, 1);
    struct_xinput_GroupInfo(tvb, offsetp, t, byte_order, 1);
    {
        static int* const flags_bits [] = {
        &hf_x11_xinput_GestureSwipeBegin_flags_mask_GestureSwipeCancelled,
        NULL
        };
        proto_tree_add_bitmask(t,  tvb, *offsetp, hf_x11_xinput_GestureSwipeBegin_flags, ett_x11_rectangle, flags_bits, byte_order);
    }
    *offsetp += 4;
}


static void xinputSendExtensionEvent(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    int f_num_classes;
    int f_num_events;
    proto_tree_add_item(t, hf_x11_xinput_SendExtensionEvent_destination, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xinput_SendExtensionEvent_device_id, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_xinput_SendExtensionEvent_propagate, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    f_num_classes = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_xinput_SendExtensionEvent_num_classes, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    f_num_events = tvb_get_uint8(tvb, *offsetp);
    proto_tree_add_item(t, hf_x11_xinput_SendExtensionEvent_num_events, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 3, ENC_NA);
    *offsetp += 3;
    length -= f_num_events * 1;
    listOfCard32(tvb, offsetp, t, hf_x11_xinput_SendExtensionEvent_classes, hf_x11_xinput_SendExtensionEvent_classes_item, f_num_classes, byte_order);
    length -= f_num_classes * 4;
}
static const value_string xinput_extension_minor[] = {
    { 1, "GetExtensionVersion" },
    { 2, "ListInputDevices" },
    { 3, "OpenDevice" },
    { 4, "CloseDevice" },
    { 5, "SetDeviceMode" },
    { 6, "SelectExtensionEvent" },
    { 7, "GetSelectedExtensionEvents" },
    { 8, "ChangeDeviceDontPropagateList" },
    { 9, "GetDeviceDontPropagateList" },
    { 10, "GetDeviceMotionEvents" },
    { 11, "ChangeKeyboardDevice" },
    { 12, "ChangePointerDevice" },
    { 13, "GrabDevice" },
    { 14, "UngrabDevice" },
    { 15, "GrabDeviceKey" },
    { 16, "UngrabDeviceKey" },
    { 17, "GrabDeviceButton" },
    { 18, "UngrabDeviceButton" },
    { 19, "AllowDeviceEvents" },
    { 20, "GetDeviceFocus" },
    { 21, "SetDeviceFocus" },
    { 22, "GetFeedbackControl" },
    { 23, "ChangeFeedbackControl" },
    { 24, "GetDeviceKeyMapping" },
    { 25, "ChangeDeviceKeyMapping" },
    { 26, "GetDeviceModifierMapping" },
    { 27, "SetDeviceModifierMapping" },
    { 28, "GetDeviceButtonMapping" },
    { 29, "SetDeviceButtonMapping" },
    { 30, "QueryDeviceState" },
    { 31, "SendExtensionEvent" },
    { 32, "DeviceBell" },
    { 33, "SetDeviceValuators" },
    { 34, "GetDeviceControl" },
    { 35, "ChangeDeviceControl" },
    { 36, "ListDeviceProperties" },
    { 37, "ChangeDeviceProperty" },
    { 38, "DeleteDeviceProperty" },
    { 39, "GetDeviceProperty" },
    { 40, "XIQueryPointer" },
    { 41, "XIWarpPointer" },
    { 42, "XIChangeCursor" },
    { 43, "XIChangeHierarchy" },
    { 44, "XISetClientPointer" },
    { 45, "XIGetClientPointer" },
    { 46, "XISelectEvents" },
    { 47, "XIQueryVersion" },
    { 48, "XIQueryDevice" },
    { 49, "XISetFocus" },
    { 50, "XIGetFocus" },
    { 51, "XIGrabDevice" },
    { 52, "XIUngrabDevice" },
    { 53, "XIAllowEvents" },
    { 54, "XIPassiveGrabDevice" },
    { 55, "XIPassiveUngrabDevice" },
    { 56, "XIListProperties" },
    { 57, "XIChangeProperty" },
    { 58, "XIDeleteProperty" },
    { 59, "XIGetProperty" },
    { 60, "XIGetSelectedEvents" },
    { 61, "XIBarrierReleasePointer" },
    { 0, NULL }
};
static const x11_event_info xinput_events[] = {
    { "xinput-DeviceKeyPress", xinputDeviceKeyPress },
    { "xinput-DeviceFocusIn", xinputDeviceFocusIn },
    { "xinput-DeviceStateNotify", xinputDeviceStateNotify },
    { "xinput-DeviceMappingNotify", xinputDeviceMappingNotify },
    { "xinput-ChangeDeviceNotify", xinputChangeDeviceNotify },
    { "xinput-DeviceKeyStateNotify", xinputDeviceKeyStateNotify },
    { "xinput-DeviceButtonStateNotify", xinputDeviceButtonStateNotify },
    { "xinput-DevicePresenceNotify", xinputDevicePresenceNotify },
    { "xinput-DevicePropertyNotify", xinputDevicePropertyNotify },
    { NULL, NULL }
};
static const x11_generic_event_info xinput_generic_events[] = {
        {   1, xinputDeviceChanged },
        {   2, xinputKeyPress },
        {   4, xinputButtonPress },
        {   7, xinputEnter },
        {  11, xinputHierarchy },
        {  12, xinputProperty },
        {  13, xinputRawKeyPress },
        {  15, xinputRawButtonPress },
        {  18, xinputTouchBegin },
        {  21, xinputTouchOwnership },
        {  22, xinputRawTouchBegin },
        {  25, xinputBarrierHit },
        {  27, xinputGesturePinchBegin },
        {  30, xinputGestureSwipeBegin },
        {   0, NULL },
};

static const x11_reply_info xinput_replies[] = {
    { 1, xinputGetExtensionVersion_Reply },
    { 2, xinputListInputDevices_Reply },
    { 3, xinputOpenDevice_Reply },
    { 5, xinputSetDeviceMode_Reply },
    { 7, xinputGetSelectedExtensionEvents_Reply },
    { 9, xinputGetDeviceDontPropagateList_Reply },
    { 10, xinputGetDeviceMotionEvents_Reply },
    { 11, xinputChangeKeyboardDevice_Reply },
    { 12, xinputChangePointerDevice_Reply },
    { 13, xinputGrabDevice_Reply },
    { 20, xinputGetDeviceFocus_Reply },
    { 22, xinputGetFeedbackControl_Reply },
    { 24, xinputGetDeviceKeyMapping_Reply },
    { 26, xinputGetDeviceModifierMapping_Reply },
    { 27, xinputSetDeviceModifierMapping_Reply },
    { 28, xinputGetDeviceButtonMapping_Reply },
    { 29, xinputSetDeviceButtonMapping_Reply },
    { 30, xinputQueryDeviceState_Reply },
    { 33, xinputSetDeviceValuators_Reply },
    { 34, xinputGetDeviceControl_Reply },
    { 35, xinputChangeDeviceControl_Reply },
    { 36, xinputListDeviceProperties_Reply },
    { 39, xinputGetDeviceProperty_Reply },
    { 40, xinputXIQueryPointer_Reply },
    { 45, xinputXIGetClientPointer_Reply },
    { 47, xinputXIQueryVersion_Reply },
    { 48, xinputXIQueryDevice_Reply },
    { 50, xinputXIGetFocus_Reply },
    { 51, xinputXIGrabDevice_Reply },
    { 54, xinputXIPassiveGrabDevice_Reply },
    { 56, xinputXIListProperties_Reply },
    { 59, xinputXIGetProperty_Reply },
    { 60, xinputXIGetSelectedEvents_Reply },
    { 0, NULL }
};

static void dispatch_xinput(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int minor, length;
    minor = CARD8(xinput_extension_minor);
    length = REQUEST_LENGTH();

    col_append_fstr(pinfo->cinfo, COL_INFO, "-%s",
                          val_to_str(minor, xinput_extension_minor,
                                     "<Unknown opcode %d>"));
    switch (minor) {
    case 1:
        xinputGetExtensionVersion(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 2:
        xinputListInputDevices(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 3:
        xinputOpenDevice(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 4:
        xinputCloseDevice(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 5:
        xinputSetDeviceMode(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 6:
        xinputSelectExtensionEvent(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 7:
        xinputGetSelectedExtensionEvents(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 8:
        xinputChangeDeviceDontPropagateList(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 9:
        xinputGetDeviceDontPropagateList(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 10:
        xinputGetDeviceMotionEvents(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 11:
        xinputChangeKeyboardDevice(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 12:
        xinputChangePointerDevice(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 13:
        xinputGrabDevice(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 14:
        xinputUngrabDevice(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 15:
        xinputGrabDeviceKey(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 16:
        xinputUngrabDeviceKey(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 17:
        xinputGrabDeviceButton(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 18:
        xinputUngrabDeviceButton(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 19:
        xinputAllowDeviceEvents(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 20:
        xinputGetDeviceFocus(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 21:
        xinputSetDeviceFocus(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 22:
        xinputGetFeedbackControl(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 23:
        xinputChangeFeedbackControl(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 24:
        xinputGetDeviceKeyMapping(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 25:
        xinputChangeDeviceKeyMapping(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 26:
        xinputGetDeviceModifierMapping(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 27:
        xinputSetDeviceModifierMapping(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 28:
        xinputGetDeviceButtonMapping(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 29:
        xinputSetDeviceButtonMapping(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 30:
        xinputQueryDeviceState(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 31:
        xinputSendExtensionEvent(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 32:
        xinputDeviceBell(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 33:
        xinputSetDeviceValuators(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 34:
        xinputGetDeviceControl(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 35:
        xinputChangeDeviceControl(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 36:
        xinputListDeviceProperties(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 37:
        xinputChangeDeviceProperty(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 38:
        xinputDeleteDeviceProperty(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 39:
        xinputGetDeviceProperty(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 40:
        xinputXIQueryPointer(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 41:
        xinputXIWarpPointer(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 42:
        xinputXIChangeCursor(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 43:
        xinputXIChangeHierarchy(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 44:
        xinputXISetClientPointer(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 45:
        xinputXIGetClientPointer(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 46:
        xinputXISelectEvents(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 47:
        xinputXIQueryVersion(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 48:
        xinputXIQueryDevice(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 49:
        xinputXISetFocus(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 50:
        xinputXIGetFocus(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 51:
        xinputXIGrabDevice(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 52:
        xinputXIUngrabDevice(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 53:
        xinputXIAllowEvents(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 54:
        xinputXIPassiveGrabDevice(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 55:
        xinputXIPassiveUngrabDevice(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 56:
        xinputXIListProperties(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 57:
        xinputXIChangeProperty(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 58:
        xinputXIDeleteProperty(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 59:
        xinputXIGetProperty(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 60:
        xinputXIGetSelectedEvents(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 61:
        xinputXIBarrierReleasePointer(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    /* No need for a default case here, since Unknown is printed above,
       and UNDECODED() is taken care of by dissect_x11_request */
    }
}

static void register_xinput(void)
{
    set_handler("XInputExtension", dispatch_xinput, xinput_errors, xinput_events, xinput_generic_events, xinput_replies);
}

static void struct_xkb_IndicatorMap(tvbuff_t *tvb, int *offsetp, proto_tree *root, unsigned byte_order _U_, int count)
{
    int i;
    for (i = 0; i < count; i++) {
        proto_item *item;
        proto_tree *t;

        item = proto_tree_add_item(root, hf_x11_struct_xkb_IndicatorMap, tvb, *offsetp, 12, ENC_NA);
        t = proto_item_add_subtree(item, ett_x11_rectangle);
        field8(tvb, offsetp, t, hf_x11_struct_xkb_IndicatorMap_flags, byte_order);
        field8(tvb, offsetp, t, hf_x11_struct_xkb_IndicatorMap_whichGroups, byte_order);
        field8(tvb, offsetp, t, hf_x11_struct_xkb_IndicatorMap_groups, byte_order);
        field8(tvb, offsetp, t, hf_x11_struct_xkb_IndicatorMap_whichMods, byte_order);
        {
            static int* const mods_bits [] = {
                &hf_x11_struct_xkb_IndicatorMap_mods_mask_Shift,
                &hf_x11_struct_xkb_IndicatorMap_mods_mask_Lock,
                &hf_x11_struct_xkb_IndicatorMap_mods_mask_Control,
                &hf_x11_struct_xkb_IndicatorMap_mods_mask_1,
                &hf_x11_struct_xkb_IndicatorMap_mods_mask_2,
                &hf_x11_struct_xkb_IndicatorMap_mods_mask_3,
                &hf_x11_struct_xkb_IndicatorMap_mods_mask_4,
                &hf_x11_struct_xkb_IndicatorMap_mods_mask_5,
                &hf_x11_struct_xkb_IndicatorMap_mods_mask_Any,
                NULL
            };
            proto_tree_add_bitmask(t,  tvb, *offsetp, hf_x11_struct_xkb_IndicatorMap_mods, ett_x11_rectangle, mods_bits, byte_order);
        }
        *offsetp += 1;
        {
            static int* const realMods_bits [] = {
                &hf_x11_struct_xkb_IndicatorMap_realMods_mask_Shift,
                &hf_x11_struct_xkb_IndicatorMap_realMods_mask_Lock,
                &hf_x11_struct_xkb_IndicatorMap_realMods_mask_Control,
                &hf_x11_struct_xkb_IndicatorMap_realMods_mask_1,
                &hf_x11_struct_xkb_IndicatorMap_realMods_mask_2,
                &hf_x11_struct_xkb_IndicatorMap_realMods_mask_3,
                &hf_x11_struct_xkb_IndicatorMap_realMods_mask_4,
                &hf_x11_struct_xkb_IndicatorMap_realMods_mask_5,
                &hf_x11_struct_xkb_IndicatorMap_realMods_mask_Any,
                NULL
            };
            proto_tree_add_bitmask(t,  tvb, *offsetp, hf_x11_struct_xkb_IndicatorMap_realMods, ett_x11_rectangle, realMods_bits, byte_order);
        }
        *offsetp += 1;
        {
            static int* const vmods_bits [] = {
                &hf_x11_struct_xkb_IndicatorMap_vmods_mask_0,
                &hf_x11_struct_xkb_IndicatorMap_vmods_mask_1,
                &hf_x11_struct_xkb_IndicatorMap_vmods_mask_2,
                &hf_x11_struct_xkb_IndicatorMap_vmods_mask_3,
                &hf_x11_struct_xkb_IndicatorMap_vmods_mask_4,
                &hf_x11_struct_xkb_IndicatorMap_vmods_mask_5,
                &hf_x11_struct_xkb_IndicatorMap_vmods_mask_6,
                &hf_x11_struct_xkb_IndicatorMap_vmods_mask_7,
                &hf_x11_struct_xkb_IndicatorMap_vmods_mask_8,
                &hf_x11_struct_xkb_IndicatorMap_vmods_mask_9,
                &hf_x11_struct_xkb_IndicatorMap_vmods_mask_10,
                &hf_x11_struct_xkb_IndicatorMap_vmods_mask_11,
                &hf_x11_struct_xkb_IndicatorMap_vmods_mask_12,
                &hf_x11_struct_xkb_IndicatorMap_vmods_mask_13,
                &hf_x11_struct_xkb_IndicatorMap_vmods_mask_14,
                &hf_x11_struct_xkb_IndicatorMap_vmods_mask_15,
                NULL
            };
            proto_tree_add_bitmask(t,  tvb, *offsetp, hf_x11_struct_xkb_IndicatorMap_vmods, ett_x11_rectangle, vmods_bits, byte_order);
        }
        *offsetp += 2;
        {
            static int* const ctrls_bits [] = {
                &hf_x11_struct_xkb_IndicatorMap_ctrls_mask_RepeatKeys,
                &hf_x11_struct_xkb_IndicatorMap_ctrls_mask_SlowKeys,
                &hf_x11_struct_xkb_IndicatorMap_ctrls_mask_BounceKeys,
                &hf_x11_struct_xkb_IndicatorMap_ctrls_mask_StickyKeys,
                &hf_x11_struct_xkb_IndicatorMap_ctrls_mask_MouseKeys,
                &hf_x11_struct_xkb_IndicatorMap_ctrls_mask_MouseKeysAccel,
                &hf_x11_struct_xkb_IndicatorMap_ctrls_mask_AccessXKeys,
                &hf_x11_struct_xkb_IndicatorMap_ctrls_mask_AccessXTimeoutMask,
                &hf_x11_struct_xkb_IndicatorMap_ctrls_mask_AccessXFeedbackMask,
                &hf_x11_struct_xkb_IndicatorMap_ctrls_mask_AudibleBellMask,
                &hf_x11_struct_xkb_IndicatorMap_ctrls_mask_Overlay1Mask,
                &hf_x11_struct_xkb_IndicatorMap_ctrls_mask_Overlay2Mask,
                &hf_x11_struct_xkb_IndicatorMap_ctrls_mask_IgnoreGroupLockMask,
                NULL
            };
            proto_tree_add_bitmask(t,  tvb, *offsetp, hf_x11_struct_xkb_IndicatorMap_ctrls, ett_x11_rectangle, ctrls_bits, byte_order);
        }
        *offsetp += 4;
    }
}

static void struct_xkb_ModDef(tvbuff_t *tvb, int *offsetp, proto_tree *root, unsigned byte_order _U_, int count)
{
    int i;
    for (i = 0; i < count; i++) {
        proto_item *item;
        proto_tree *t;

        item = proto_tree_add_item(root, hf_x11_struct_xkb_ModDef, tvb, *offsetp, 4, ENC_NA);
        t = proto_item_add_subtree(item, ett_x11_rectangle);
        {
            static int* const mask_bits [] = {
                &hf_x11_struct_xkb_ModDef_mask_mask_Shift,
                &hf_x11_struct_xkb_ModDef_mask_mask_Lock,
                &hf_x11_struct_xkb_ModDef_mask_mask_Control,
                &hf_x11_struct_xkb_ModDef_mask_mask_1,
                &hf_x11_struct_xkb_ModDef_mask_mask_2,
                &hf_x11_struct_xkb_ModDef_mask_mask_3,
                &hf_x11_struct_xkb_ModDef_mask_mask_4,
                &hf_x11_struct_xkb_ModDef_mask_mask_5,
                &hf_x11_struct_xkb_ModDef_mask_mask_Any,
                NULL
            };
            proto_tree_add_bitmask(t,  tvb, *offsetp, hf_x11_struct_xkb_ModDef_mask, ett_x11_rectangle, mask_bits, byte_order);
        }
        *offsetp += 1;
        {
            static int* const realMods_bits [] = {
                &hf_x11_struct_xkb_ModDef_realMods_mask_Shift,
                &hf_x11_struct_xkb_ModDef_realMods_mask_Lock,
                &hf_x11_struct_xkb_ModDef_realMods_mask_Control,
                &hf_x11_struct_xkb_ModDef_realMods_mask_1,
                &hf_x11_struct_xkb_ModDef_realMods_mask_2,
                &hf_x11_struct_xkb_ModDef_realMods_mask_3,
                &hf_x11_struct_xkb_ModDef_realMods_mask_4,
                &hf_x11_struct_xkb_ModDef_realMods_mask_5,
                &hf_x11_struct_xkb_ModDef_realMods_mask_Any,
                NULL
            };
            proto_tree_add_bitmask(t,  tvb, *offsetp, hf_x11_struct_xkb_ModDef_realMods, ett_x11_rectangle, realMods_bits, byte_order);
        }
        *offsetp += 1;
        {
            static int* const vmods_bits [] = {
                &hf_x11_struct_xkb_ModDef_vmods_mask_0,
                &hf_x11_struct_xkb_ModDef_vmods_mask_1,
                &hf_x11_struct_xkb_ModDef_vmods_mask_2,
                &hf_x11_struct_xkb_ModDef_vmods_mask_3,
                &hf_x11_struct_xkb_ModDef_vmods_mask_4,
                &hf_x11_struct_xkb_ModDef_vmods_mask_5,
                &hf_x11_struct_xkb_ModDef_vmods_mask_6,
                &hf_x11_struct_xkb_ModDef_vmods_mask_7,
                &hf_x11_struct_xkb_ModDef_vmods_mask_8,
                &hf_x11_struct_xkb_ModDef_vmods_mask_9,
                &hf_x11_struct_xkb_ModDef_vmods_mask_10,
                &hf_x11_struct_xkb_ModDef_vmods_mask_11,
                &hf_x11_struct_xkb_ModDef_vmods_mask_12,
                &hf_x11_struct_xkb_ModDef_vmods_mask_13,
                &hf_x11_struct_xkb_ModDef_vmods_mask_14,
                &hf_x11_struct_xkb_ModDef_vmods_mask_15,
                NULL
            };
            proto_tree_add_bitmask(t,  tvb, *offsetp, hf_x11_struct_xkb_ModDef_vmods, ett_x11_rectangle, vmods_bits, byte_order);
        }
        *offsetp += 2;
    }
}

static void struct_xkb_KeyName(tvbuff_t *tvb, int *offsetp, proto_tree *root, unsigned byte_order _U_, int count)
{
    int i;
    for (i = 0; i < count; i++) {
        proto_item *item;
        proto_tree *t;

        item = proto_tree_add_item(root, hf_x11_struct_xkb_KeyName, tvb, *offsetp, 4, ENC_NA);
        t = proto_item_add_subtree(item, ett_x11_rectangle);
        listOfByte(tvb, offsetp, t, hf_x11_struct_xkb_KeyName_name, 4, byte_order);
    }
}

static void struct_xkb_KeyAlias(tvbuff_t *tvb, int *offsetp, proto_tree *root, unsigned byte_order _U_, int count)
{
    int i;
    for (i = 0; i < count; i++) {
        proto_item *item;
        proto_tree *t;

        item = proto_tree_add_item(root, hf_x11_struct_xkb_KeyAlias, tvb, *offsetp, 8, ENC_NA);
        t = proto_item_add_subtree(item, ett_x11_rectangle);
        listOfByte(tvb, offsetp, t, hf_x11_struct_xkb_KeyAlias_real, 4, byte_order);
        listOfByte(tvb, offsetp, t, hf_x11_struct_xkb_KeyAlias_alias, 4, byte_order);
    }
}

static int struct_size_xkb_CountedString16(tvbuff_t *tvb _U_, int *offsetp _U_, unsigned byte_order _U_)
{
    int size = 0;
    int f_length;
    f_length = tvb_get_uint16(tvb, *offsetp + size + 0, byte_order);
    size += f_length * 1;
    size += (((f_length + 5) & (~3)) - (f_length + 2)) * 1;
    return size + 2;
}

static void struct_xkb_CountedString16(tvbuff_t *tvb, int *offsetp, proto_tree *root, unsigned byte_order _U_, int count)
{
    int i;
    for (i = 0; i < count; i++) {
        proto_item *item;
        proto_tree *t;
        int f_length;

        item = proto_tree_add_item(root, hf_x11_struct_xkb_CountedString16, tvb, *offsetp, struct_size_xkb_CountedString16(tvb, offsetp, byte_order), ENC_NA);
        t = proto_item_add_subtree(item, ett_x11_rectangle);
        f_length = tvb_get_uint16(tvb, *offsetp, byte_order);
        proto_tree_add_item(t, hf_x11_struct_xkb_CountedString16_length, tvb, *offsetp, 2, byte_order);
        *offsetp += 2;
        listOfByte(tvb, offsetp, t, hf_x11_struct_xkb_CountedString16_string, f_length, byte_order);
        listOfByte(tvb, offsetp, t, hf_x11_struct_xkb_CountedString16_alignment_pad, (((f_length + 5) & (~3)) - (f_length + 2)), byte_order);
    }
}

static void struct_xkb_KTMapEntry(tvbuff_t *tvb, int *offsetp, proto_tree *root, unsigned byte_order _U_, int count)
{
    int i;
    for (i = 0; i < count; i++) {
        proto_item *item;
        proto_tree *t;

        item = proto_tree_add_item(root, hf_x11_struct_xkb_KTMapEntry, tvb, *offsetp, 8, ENC_NA);
        t = proto_item_add_subtree(item, ett_x11_rectangle);
        proto_tree_add_item(t, hf_x11_struct_xkb_KTMapEntry_active, tvb, *offsetp, 1, byte_order);
        *offsetp += 1;
        {
            static int* const mods_mask_bits [] = {
                &hf_x11_struct_xkb_KTMapEntry_mods_mask_mask_Shift,
                &hf_x11_struct_xkb_KTMapEntry_mods_mask_mask_Lock,
                &hf_x11_struct_xkb_KTMapEntry_mods_mask_mask_Control,
                &hf_x11_struct_xkb_KTMapEntry_mods_mask_mask_1,
                &hf_x11_struct_xkb_KTMapEntry_mods_mask_mask_2,
                &hf_x11_struct_xkb_KTMapEntry_mods_mask_mask_3,
                &hf_x11_struct_xkb_KTMapEntry_mods_mask_mask_4,
                &hf_x11_struct_xkb_KTMapEntry_mods_mask_mask_5,
                &hf_x11_struct_xkb_KTMapEntry_mods_mask_mask_Any,
                NULL
            };
            proto_tree_add_bitmask(t,  tvb, *offsetp, hf_x11_struct_xkb_KTMapEntry_mods_mask, ett_x11_rectangle, mods_mask_bits, byte_order);
        }
        *offsetp += 1;
        proto_tree_add_item(t, hf_x11_struct_xkb_KTMapEntry_level, tvb, *offsetp, 1, byte_order);
        *offsetp += 1;
        {
            static int* const mods_mods_bits [] = {
                &hf_x11_struct_xkb_KTMapEntry_mods_mods_mask_Shift,
                &hf_x11_struct_xkb_KTMapEntry_mods_mods_mask_Lock,
                &hf_x11_struct_xkb_KTMapEntry_mods_mods_mask_Control,
                &hf_x11_struct_xkb_KTMapEntry_mods_mods_mask_1,
                &hf_x11_struct_xkb_KTMapEntry_mods_mods_mask_2,
                &hf_x11_struct_xkb_KTMapEntry_mods_mods_mask_3,
                &hf_x11_struct_xkb_KTMapEntry_mods_mods_mask_4,
                &hf_x11_struct_xkb_KTMapEntry_mods_mods_mask_5,
                &hf_x11_struct_xkb_KTMapEntry_mods_mods_mask_Any,
                NULL
            };
            proto_tree_add_bitmask(t,  tvb, *offsetp, hf_x11_struct_xkb_KTMapEntry_mods_mods, ett_x11_rectangle, mods_mods_bits, byte_order);
        }
        *offsetp += 1;
        {
            static int* const mods_vmods_bits [] = {
                &hf_x11_struct_xkb_KTMapEntry_mods_vmods_mask_0,
                &hf_x11_struct_xkb_KTMapEntry_mods_vmods_mask_1,
                &hf_x11_struct_xkb_KTMapEntry_mods_vmods_mask_2,
                &hf_x11_struct_xkb_KTMapEntry_mods_vmods_mask_3,
                &hf_x11_struct_xkb_KTMapEntry_mods_vmods_mask_4,
                &hf_x11_struct_xkb_KTMapEntry_mods_vmods_mask_5,
                &hf_x11_struct_xkb_KTMapEntry_mods_vmods_mask_6,
                &hf_x11_struct_xkb_KTMapEntry_mods_vmods_mask_7,
                &hf_x11_struct_xkb_KTMapEntry_mods_vmods_mask_8,
                &hf_x11_struct_xkb_KTMapEntry_mods_vmods_mask_9,
                &hf_x11_struct_xkb_KTMapEntry_mods_vmods_mask_10,
                &hf_x11_struct_xkb_KTMapEntry_mods_vmods_mask_11,
                &hf_x11_struct_xkb_KTMapEntry_mods_vmods_mask_12,
                &hf_x11_struct_xkb_KTMapEntry_mods_vmods_mask_13,
                &hf_x11_struct_xkb_KTMapEntry_mods_vmods_mask_14,
                &hf_x11_struct_xkb_KTMapEntry_mods_vmods_mask_15,
                NULL
            };
            proto_tree_add_bitmask(t,  tvb, *offsetp, hf_x11_struct_xkb_KTMapEntry_mods_vmods, ett_x11_rectangle, mods_vmods_bits, byte_order);
        }
        *offsetp += 2;
        proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 2, ENC_NA);
        *offsetp += 2;
    }
}

static int struct_size_xkb_KeyType(tvbuff_t *tvb _U_, int *offsetp _U_, unsigned byte_order _U_)
{
    int size = 0;
    int f_hasPreserve;
    int f_nMapEntries;
    f_nMapEntries = tvb_get_uint8(tvb, *offsetp + size + 5);
    f_hasPreserve = tvb_get_uint8(tvb, *offsetp + size + 6);
    size += f_nMapEntries * 8;
    size += (f_hasPreserve * f_nMapEntries) * 4;
    return size + 8;
}

static void struct_xkb_KeyType(tvbuff_t *tvb, int *offsetp, proto_tree *root, unsigned byte_order _U_, int count)
{
    int i;
    for (i = 0; i < count; i++) {
        proto_item *item;
        proto_tree *t;
        int f_nMapEntries;
        int f_hasPreserve;

        item = proto_tree_add_item(root, hf_x11_struct_xkb_KeyType, tvb, *offsetp, struct_size_xkb_KeyType(tvb, offsetp, byte_order), ENC_NA);
        t = proto_item_add_subtree(item, ett_x11_rectangle);
        {
            static int* const mods_mask_bits [] = {
                &hf_x11_struct_xkb_KeyType_mods_mask_mask_Shift,
                &hf_x11_struct_xkb_KeyType_mods_mask_mask_Lock,
                &hf_x11_struct_xkb_KeyType_mods_mask_mask_Control,
                &hf_x11_struct_xkb_KeyType_mods_mask_mask_1,
                &hf_x11_struct_xkb_KeyType_mods_mask_mask_2,
                &hf_x11_struct_xkb_KeyType_mods_mask_mask_3,
                &hf_x11_struct_xkb_KeyType_mods_mask_mask_4,
                &hf_x11_struct_xkb_KeyType_mods_mask_mask_5,
                &hf_x11_struct_xkb_KeyType_mods_mask_mask_Any,
                NULL
            };
            proto_tree_add_bitmask(t,  tvb, *offsetp, hf_x11_struct_xkb_KeyType_mods_mask, ett_x11_rectangle, mods_mask_bits, byte_order);
        }
        *offsetp += 1;
        {
            static int* const mods_mods_bits [] = {
                &hf_x11_struct_xkb_KeyType_mods_mods_mask_Shift,
                &hf_x11_struct_xkb_KeyType_mods_mods_mask_Lock,
                &hf_x11_struct_xkb_KeyType_mods_mods_mask_Control,
                &hf_x11_struct_xkb_KeyType_mods_mods_mask_1,
                &hf_x11_struct_xkb_KeyType_mods_mods_mask_2,
                &hf_x11_struct_xkb_KeyType_mods_mods_mask_3,
                &hf_x11_struct_xkb_KeyType_mods_mods_mask_4,
                &hf_x11_struct_xkb_KeyType_mods_mods_mask_5,
                &hf_x11_struct_xkb_KeyType_mods_mods_mask_Any,
                NULL
            };
            proto_tree_add_bitmask(t,  tvb, *offsetp, hf_x11_struct_xkb_KeyType_mods_mods, ett_x11_rectangle, mods_mods_bits, byte_order);
        }
        *offsetp += 1;
        {
            static int* const mods_vmods_bits [] = {
                &hf_x11_struct_xkb_KeyType_mods_vmods_mask_0,
                &hf_x11_struct_xkb_KeyType_mods_vmods_mask_1,
                &hf_x11_struct_xkb_KeyType_mods_vmods_mask_2,
                &hf_x11_struct_xkb_KeyType_mods_vmods_mask_3,
                &hf_x11_struct_xkb_KeyType_mods_vmods_mask_4,
                &hf_x11_struct_xkb_KeyType_mods_vmods_mask_5,
                &hf_x11_struct_xkb_KeyType_mods_vmods_mask_6,
                &hf_x11_struct_xkb_KeyType_mods_vmods_mask_7,
                &hf_x11_struct_xkb_KeyType_mods_vmods_mask_8,
                &hf_x11_struct_xkb_KeyType_mods_vmods_mask_9,
                &hf_x11_struct_xkb_KeyType_mods_vmods_mask_10,
                &hf_x11_struct_xkb_KeyType_mods_vmods_mask_11,
                &hf_x11_struct_xkb_KeyType_mods_vmods_mask_12,
                &hf_x11_struct_xkb_KeyType_mods_vmods_mask_13,
                &hf_x11_struct_xkb_KeyType_mods_vmods_mask_14,
                &hf_x11_struct_xkb_KeyType_mods_vmods_mask_15,
                NULL
            };
            proto_tree_add_bitmask(t,  tvb, *offsetp, hf_x11_struct_xkb_KeyType_mods_vmods, ett_x11_rectangle, mods_vmods_bits, byte_order);
        }
        *offsetp += 2;
        proto_tree_add_item(t, hf_x11_struct_xkb_KeyType_numLevels, tvb, *offsetp, 1, byte_order);
        *offsetp += 1;
        f_nMapEntries = tvb_get_uint8(tvb, *offsetp);
        proto_tree_add_item(t, hf_x11_struct_xkb_KeyType_nMapEntries, tvb, *offsetp, 1, byte_order);
        *offsetp += 1;
        f_hasPreserve = tvb_get_uint8(tvb, *offsetp);
        proto_tree_add_item(t, hf_x11_struct_xkb_KeyType_hasPreserve, tvb, *offsetp, 1, byte_order);
        *offsetp += 1;
        proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
        *offsetp += 1;
        struct_xkb_KTMapEntry(tvb, offsetp, t, byte_order, f_nMapEntries);
        struct_xkb_ModDef(tvb, offsetp, t, byte_order, (f_hasPreserve * f_nMapEntries));
    }
}

static int struct_size_xkb_KeySymMap(tvbuff_t *tvb _U_, int *offsetp _U_, unsigned byte_order _U_)
{
    int size = 0;
    int f_nSyms;
    f_nSyms = tvb_get_uint16(tvb, *offsetp + size + 6, byte_order);
    size += f_nSyms * 4;
    return size + 8;
}

static void struct_xkb_KeySymMap(tvbuff_t *tvb, int *offsetp, proto_tree *root, unsigned byte_order _U_, int count)
{
    int i;
    for (i = 0; i < count; i++) {
        proto_item *item;
        proto_tree *t;
        int f_nSyms;

        item = proto_tree_add_item(root, hf_x11_struct_xkb_KeySymMap, tvb, *offsetp, struct_size_xkb_KeySymMap(tvb, offsetp, byte_order), ENC_NA);
        t = proto_item_add_subtree(item, ett_x11_rectangle);
        listOfByte(tvb, offsetp, t, hf_x11_struct_xkb_KeySymMap_kt_index, 4, byte_order);
        proto_tree_add_item(t, hf_x11_struct_xkb_KeySymMap_groupInfo, tvb, *offsetp, 1, byte_order);
        *offsetp += 1;
        proto_tree_add_item(t, hf_x11_struct_xkb_KeySymMap_width, tvb, *offsetp, 1, byte_order);
        *offsetp += 1;
        f_nSyms = tvb_get_uint16(tvb, *offsetp, byte_order);
        proto_tree_add_item(t, hf_x11_struct_xkb_KeySymMap_nSyms, tvb, *offsetp, 2, byte_order);
        *offsetp += 2;
        listOfCard32(tvb, offsetp, t, hf_x11_struct_xkb_KeySymMap_syms, hf_x11_struct_xkb_KeySymMap_syms_item, f_nSyms, byte_order);
    }
}

static void struct_xkb_CommonBehavior(tvbuff_t *tvb, int *offsetp, proto_tree *root, unsigned byte_order _U_, int count)
{
    int i;
    for (i = 0; i < count; i++) {
        proto_item *item;
        proto_tree *t;

        item = proto_tree_add_item(root, hf_x11_struct_xkb_CommonBehavior, tvb, *offsetp, 2, ENC_NA);
        t = proto_item_add_subtree(item, ett_x11_rectangle);
        proto_tree_add_item(t, hf_x11_struct_xkb_CommonBehavior_type, tvb, *offsetp, 1, byte_order);
        *offsetp += 1;
        proto_tree_add_item(t, hf_x11_struct_xkb_CommonBehavior_data, tvb, *offsetp, 1, byte_order);
        *offsetp += 1;
    }
}

static void struct_xkb_DefaultBehavior(tvbuff_t *tvb, int *offsetp, proto_tree *root, unsigned byte_order _U_, int count)
{
    int i;
    for (i = 0; i < count; i++) {
        proto_item *item;
        proto_tree *t;

        item = proto_tree_add_item(root, hf_x11_struct_xkb_DefaultBehavior, tvb, *offsetp, 2, ENC_NA);
        t = proto_item_add_subtree(item, ett_x11_rectangle);
        proto_tree_add_item(t, hf_x11_struct_xkb_DefaultBehavior_type, tvb, *offsetp, 1, byte_order);
        *offsetp += 1;
        proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
        *offsetp += 1;
    }
}

static void struct_xkb_RadioGroupBehavior(tvbuff_t *tvb, int *offsetp, proto_tree *root, unsigned byte_order _U_, int count)
{
    int i;
    for (i = 0; i < count; i++) {
        proto_item *item;
        proto_tree *t;

        item = proto_tree_add_item(root, hf_x11_struct_xkb_RadioGroupBehavior, tvb, *offsetp, 2, ENC_NA);
        t = proto_item_add_subtree(item, ett_x11_rectangle);
        proto_tree_add_item(t, hf_x11_struct_xkb_RadioGroupBehavior_type, tvb, *offsetp, 1, byte_order);
        *offsetp += 1;
        proto_tree_add_item(t, hf_x11_struct_xkb_RadioGroupBehavior_group, tvb, *offsetp, 1, byte_order);
        *offsetp += 1;
    }
}

static void struct_xkb_OverlayBehavior(tvbuff_t *tvb, int *offsetp, proto_tree *root, unsigned byte_order _U_, int count)
{
    int i;
    for (i = 0; i < count; i++) {
        proto_item *item;
        proto_tree *t;

        item = proto_tree_add_item(root, hf_x11_struct_xkb_OverlayBehavior, tvb, *offsetp, 2, ENC_NA);
        t = proto_item_add_subtree(item, ett_x11_rectangle);
        proto_tree_add_item(t, hf_x11_struct_xkb_OverlayBehavior_type, tvb, *offsetp, 1, byte_order);
        *offsetp += 1;
        proto_tree_add_item(t, hf_x11_struct_xkb_OverlayBehavior_key, tvb, *offsetp, 1, byte_order);
        *offsetp += 1;
    }
}

static void struct_xkb_Behavior(tvbuff_t *tvb, int *offsetp, proto_tree *root, unsigned byte_order, int count)
{
    int i;
    int base = *offsetp;
    for (i = 0; i < count; i++) {
        proto_item *item;
        proto_tree *t;
        item = proto_tree_add_item(root, hf_x11_union_xkb_Behavior, tvb, base, 2, ENC_NA);
        t = proto_item_add_subtree(item, ett_x11_rectangle);

        *offsetp = base;
        struct_xkb_CommonBehavior(tvb, offsetp, t, byte_order, 1);
        *offsetp = base;
        struct_xkb_DefaultBehavior(tvb, offsetp, t, byte_order, 1);
        *offsetp = base;
        struct_xkb_DefaultBehavior(tvb, offsetp, t, byte_order, 1);
        *offsetp = base;
        struct_xkb_RadioGroupBehavior(tvb, offsetp, t, byte_order, 1);
        *offsetp = base;
        struct_xkb_OverlayBehavior(tvb, offsetp, t, byte_order, 1);
        *offsetp = base;
        struct_xkb_OverlayBehavior(tvb, offsetp, t, byte_order, 1);
        *offsetp = base;
        struct_xkb_DefaultBehavior(tvb, offsetp, t, byte_order, 1);
        *offsetp = base;
        struct_xkb_RadioGroupBehavior(tvb, offsetp, t, byte_order, 1);
        *offsetp = base;
        struct_xkb_OverlayBehavior(tvb, offsetp, t, byte_order, 1);
        *offsetp = base;
        struct_xkb_OverlayBehavior(tvb, offsetp, t, byte_order, 1);
        *offsetp = base;
        proto_tree_add_item(t, hf_x11_union_xkb_Behavior_type, tvb, *offsetp, 1, byte_order);
        *offsetp += 1;
        base += 2;
    }
    *offsetp = base;
}

static void struct_xkb_SetBehavior(tvbuff_t *tvb, int *offsetp, proto_tree *root, unsigned byte_order _U_, int count)
{
    int i;
    for (i = 0; i < count; i++) {
        proto_item *item;
        proto_tree *t;

        item = proto_tree_add_item(root, hf_x11_struct_xkb_SetBehavior, tvb, *offsetp, 4, ENC_NA);
        t = proto_item_add_subtree(item, ett_x11_rectangle);
        proto_tree_add_item(t, hf_x11_struct_xkb_SetBehavior_keycode, tvb, *offsetp, 1, byte_order);
        *offsetp += 1;
        struct_xkb_Behavior(tvb, offsetp, t, byte_order, 1);
        proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
        *offsetp += 1;
    }
}

static void struct_xkb_SetExplicit(tvbuff_t *tvb, int *offsetp, proto_tree *root, unsigned byte_order _U_, int count)
{
    int i;
    for (i = 0; i < count; i++) {
        proto_item *item;
        proto_tree *t;

        item = proto_tree_add_item(root, hf_x11_struct_xkb_SetExplicit, tvb, *offsetp, 2, ENC_NA);
        t = proto_item_add_subtree(item, ett_x11_rectangle);
        proto_tree_add_item(t, hf_x11_struct_xkb_SetExplicit_keycode, tvb, *offsetp, 1, byte_order);
        *offsetp += 1;
        {
            static int* const explicit_bits [] = {
                &hf_x11_struct_xkb_SetExplicit_explicit_mask_KeyType1,
                &hf_x11_struct_xkb_SetExplicit_explicit_mask_KeyType2,
                &hf_x11_struct_xkb_SetExplicit_explicit_mask_KeyType3,
                &hf_x11_struct_xkb_SetExplicit_explicit_mask_KeyType4,
                &hf_x11_struct_xkb_SetExplicit_explicit_mask_Interpret,
                &hf_x11_struct_xkb_SetExplicit_explicit_mask_AutoRepeat,
                &hf_x11_struct_xkb_SetExplicit_explicit_mask_Behavior,
                &hf_x11_struct_xkb_SetExplicit_explicit_mask_VModMap,
                NULL
            };
            proto_tree_add_bitmask(t,  tvb, *offsetp, hf_x11_struct_xkb_SetExplicit_explicit, ett_x11_rectangle, explicit_bits, byte_order);
        }
        *offsetp += 1;
    }
}

static void struct_xkb_KeyModMap(tvbuff_t *tvb, int *offsetp, proto_tree *root, unsigned byte_order _U_, int count)
{
    int i;
    for (i = 0; i < count; i++) {
        proto_item *item;
        proto_tree *t;

        item = proto_tree_add_item(root, hf_x11_struct_xkb_KeyModMap, tvb, *offsetp, 2, ENC_NA);
        t = proto_item_add_subtree(item, ett_x11_rectangle);
        proto_tree_add_item(t, hf_x11_struct_xkb_KeyModMap_keycode, tvb, *offsetp, 1, byte_order);
        *offsetp += 1;
        {
            static int* const mods_bits [] = {
                &hf_x11_struct_xkb_KeyModMap_mods_mask_Shift,
                &hf_x11_struct_xkb_KeyModMap_mods_mask_Lock,
                &hf_x11_struct_xkb_KeyModMap_mods_mask_Control,
                &hf_x11_struct_xkb_KeyModMap_mods_mask_1,
                &hf_x11_struct_xkb_KeyModMap_mods_mask_2,
                &hf_x11_struct_xkb_KeyModMap_mods_mask_3,
                &hf_x11_struct_xkb_KeyModMap_mods_mask_4,
                &hf_x11_struct_xkb_KeyModMap_mods_mask_5,
                &hf_x11_struct_xkb_KeyModMap_mods_mask_Any,
                NULL
            };
            proto_tree_add_bitmask(t,  tvb, *offsetp, hf_x11_struct_xkb_KeyModMap_mods, ett_x11_rectangle, mods_bits, byte_order);
        }
        *offsetp += 1;
    }
}

static void struct_xkb_KeyVModMap(tvbuff_t *tvb, int *offsetp, proto_tree *root, unsigned byte_order _U_, int count)
{
    int i;
    for (i = 0; i < count; i++) {
        proto_item *item;
        proto_tree *t;

        item = proto_tree_add_item(root, hf_x11_struct_xkb_KeyVModMap, tvb, *offsetp, 4, ENC_NA);
        t = proto_item_add_subtree(item, ett_x11_rectangle);
        proto_tree_add_item(t, hf_x11_struct_xkb_KeyVModMap_keycode, tvb, *offsetp, 1, byte_order);
        *offsetp += 1;
        proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
        *offsetp += 1;
        {
            static int* const vmods_bits [] = {
                &hf_x11_struct_xkb_KeyVModMap_vmods_mask_0,
                &hf_x11_struct_xkb_KeyVModMap_vmods_mask_1,
                &hf_x11_struct_xkb_KeyVModMap_vmods_mask_2,
                &hf_x11_struct_xkb_KeyVModMap_vmods_mask_3,
                &hf_x11_struct_xkb_KeyVModMap_vmods_mask_4,
                &hf_x11_struct_xkb_KeyVModMap_vmods_mask_5,
                &hf_x11_struct_xkb_KeyVModMap_vmods_mask_6,
                &hf_x11_struct_xkb_KeyVModMap_vmods_mask_7,
                &hf_x11_struct_xkb_KeyVModMap_vmods_mask_8,
                &hf_x11_struct_xkb_KeyVModMap_vmods_mask_9,
                &hf_x11_struct_xkb_KeyVModMap_vmods_mask_10,
                &hf_x11_struct_xkb_KeyVModMap_vmods_mask_11,
                &hf_x11_struct_xkb_KeyVModMap_vmods_mask_12,
                &hf_x11_struct_xkb_KeyVModMap_vmods_mask_13,
                &hf_x11_struct_xkb_KeyVModMap_vmods_mask_14,
                &hf_x11_struct_xkb_KeyVModMap_vmods_mask_15,
                NULL
            };
            proto_tree_add_bitmask(t,  tvb, *offsetp, hf_x11_struct_xkb_KeyVModMap_vmods, ett_x11_rectangle, vmods_bits, byte_order);
        }
        *offsetp += 2;
    }
}

static void struct_xkb_KTSetMapEntry(tvbuff_t *tvb, int *offsetp, proto_tree *root, unsigned byte_order _U_, int count)
{
    int i;
    for (i = 0; i < count; i++) {
        proto_item *item;
        proto_tree *t;

        item = proto_tree_add_item(root, hf_x11_struct_xkb_KTSetMapEntry, tvb, *offsetp, 4, ENC_NA);
        t = proto_item_add_subtree(item, ett_x11_rectangle);
        proto_tree_add_item(t, hf_x11_struct_xkb_KTSetMapEntry_level, tvb, *offsetp, 1, byte_order);
        *offsetp += 1;
        {
            static int* const realMods_bits [] = {
                &hf_x11_struct_xkb_KTSetMapEntry_realMods_mask_Shift,
                &hf_x11_struct_xkb_KTSetMapEntry_realMods_mask_Lock,
                &hf_x11_struct_xkb_KTSetMapEntry_realMods_mask_Control,
                &hf_x11_struct_xkb_KTSetMapEntry_realMods_mask_1,
                &hf_x11_struct_xkb_KTSetMapEntry_realMods_mask_2,
                &hf_x11_struct_xkb_KTSetMapEntry_realMods_mask_3,
                &hf_x11_struct_xkb_KTSetMapEntry_realMods_mask_4,
                &hf_x11_struct_xkb_KTSetMapEntry_realMods_mask_5,
                &hf_x11_struct_xkb_KTSetMapEntry_realMods_mask_Any,
                NULL
            };
            proto_tree_add_bitmask(t,  tvb, *offsetp, hf_x11_struct_xkb_KTSetMapEntry_realMods, ett_x11_rectangle, realMods_bits, byte_order);
        }
        *offsetp += 1;
        {
            static int* const virtualMods_bits [] = {
                &hf_x11_struct_xkb_KTSetMapEntry_virtualMods_mask_0,
                &hf_x11_struct_xkb_KTSetMapEntry_virtualMods_mask_1,
                &hf_x11_struct_xkb_KTSetMapEntry_virtualMods_mask_2,
                &hf_x11_struct_xkb_KTSetMapEntry_virtualMods_mask_3,
                &hf_x11_struct_xkb_KTSetMapEntry_virtualMods_mask_4,
                &hf_x11_struct_xkb_KTSetMapEntry_virtualMods_mask_5,
                &hf_x11_struct_xkb_KTSetMapEntry_virtualMods_mask_6,
                &hf_x11_struct_xkb_KTSetMapEntry_virtualMods_mask_7,
                &hf_x11_struct_xkb_KTSetMapEntry_virtualMods_mask_8,
                &hf_x11_struct_xkb_KTSetMapEntry_virtualMods_mask_9,
                &hf_x11_struct_xkb_KTSetMapEntry_virtualMods_mask_10,
                &hf_x11_struct_xkb_KTSetMapEntry_virtualMods_mask_11,
                &hf_x11_struct_xkb_KTSetMapEntry_virtualMods_mask_12,
                &hf_x11_struct_xkb_KTSetMapEntry_virtualMods_mask_13,
                &hf_x11_struct_xkb_KTSetMapEntry_virtualMods_mask_14,
                &hf_x11_struct_xkb_KTSetMapEntry_virtualMods_mask_15,
                NULL
            };
            proto_tree_add_bitmask(t,  tvb, *offsetp, hf_x11_struct_xkb_KTSetMapEntry_virtualMods, ett_x11_rectangle, virtualMods_bits, byte_order);
        }
        *offsetp += 2;
    }
}

static int struct_size_xkb_SetKeyType(tvbuff_t *tvb _U_, int *offsetp _U_, unsigned byte_order _U_)
{
    int size = 0;
    int f_nMapEntries;
    int f_preserve;
    f_nMapEntries = tvb_get_uint8(tvb, *offsetp + size + 5);
    f_preserve = tvb_get_uint8(tvb, *offsetp + size + 6);
    size += f_nMapEntries * 4;
    size += (f_preserve * f_nMapEntries) * 4;
    return size + 8;
}

static void struct_xkb_SetKeyType(tvbuff_t *tvb, int *offsetp, proto_tree *root, unsigned byte_order _U_, int count)
{
    int i;
    for (i = 0; i < count; i++) {
        proto_item *item;
        proto_tree *t;
        int f_nMapEntries;
        int f_preserve;

        item = proto_tree_add_item(root, hf_x11_struct_xkb_SetKeyType, tvb, *offsetp, struct_size_xkb_SetKeyType(tvb, offsetp, byte_order), ENC_NA);
        t = proto_item_add_subtree(item, ett_x11_rectangle);
        {
            static int* const mask_bits [] = {
                &hf_x11_struct_xkb_SetKeyType_mask_mask_Shift,
                &hf_x11_struct_xkb_SetKeyType_mask_mask_Lock,
                &hf_x11_struct_xkb_SetKeyType_mask_mask_Control,
                &hf_x11_struct_xkb_SetKeyType_mask_mask_1,
                &hf_x11_struct_xkb_SetKeyType_mask_mask_2,
                &hf_x11_struct_xkb_SetKeyType_mask_mask_3,
                &hf_x11_struct_xkb_SetKeyType_mask_mask_4,
                &hf_x11_struct_xkb_SetKeyType_mask_mask_5,
                &hf_x11_struct_xkb_SetKeyType_mask_mask_Any,
                NULL
            };
            proto_tree_add_bitmask(t,  tvb, *offsetp, hf_x11_struct_xkb_SetKeyType_mask, ett_x11_rectangle, mask_bits, byte_order);
        }
        *offsetp += 1;
        {
            static int* const realMods_bits [] = {
                &hf_x11_struct_xkb_SetKeyType_realMods_mask_Shift,
                &hf_x11_struct_xkb_SetKeyType_realMods_mask_Lock,
                &hf_x11_struct_xkb_SetKeyType_realMods_mask_Control,
                &hf_x11_struct_xkb_SetKeyType_realMods_mask_1,
                &hf_x11_struct_xkb_SetKeyType_realMods_mask_2,
                &hf_x11_struct_xkb_SetKeyType_realMods_mask_3,
                &hf_x11_struct_xkb_SetKeyType_realMods_mask_4,
                &hf_x11_struct_xkb_SetKeyType_realMods_mask_5,
                &hf_x11_struct_xkb_SetKeyType_realMods_mask_Any,
                NULL
            };
            proto_tree_add_bitmask(t,  tvb, *offsetp, hf_x11_struct_xkb_SetKeyType_realMods, ett_x11_rectangle, realMods_bits, byte_order);
        }
        *offsetp += 1;
        {
            static int* const virtualMods_bits [] = {
                &hf_x11_struct_xkb_SetKeyType_virtualMods_mask_0,
                &hf_x11_struct_xkb_SetKeyType_virtualMods_mask_1,
                &hf_x11_struct_xkb_SetKeyType_virtualMods_mask_2,
                &hf_x11_struct_xkb_SetKeyType_virtualMods_mask_3,
                &hf_x11_struct_xkb_SetKeyType_virtualMods_mask_4,
                &hf_x11_struct_xkb_SetKeyType_virtualMods_mask_5,
                &hf_x11_struct_xkb_SetKeyType_virtualMods_mask_6,
                &hf_x11_struct_xkb_SetKeyType_virtualMods_mask_7,
                &hf_x11_struct_xkb_SetKeyType_virtualMods_mask_8,
                &hf_x11_struct_xkb_SetKeyType_virtualMods_mask_9,
                &hf_x11_struct_xkb_SetKeyType_virtualMods_mask_10,
                &hf_x11_struct_xkb_SetKeyType_virtualMods_mask_11,
                &hf_x11_struct_xkb_SetKeyType_virtualMods_mask_12,
                &hf_x11_struct_xkb_SetKeyType_virtualMods_mask_13,
                &hf_x11_struct_xkb_SetKeyType_virtualMods_mask_14,
                &hf_x11_struct_xkb_SetKeyType_virtualMods_mask_15,
                NULL
            };
            proto_tree_add_bitmask(t,  tvb, *offsetp, hf_x11_struct_xkb_SetKeyType_virtualMods, ett_x11_rectangle, virtualMods_bits, byte_order);
        }
        *offsetp += 2;
        proto_tree_add_item(t, hf_x11_struct_xkb_SetKeyType_numLevels, tvb, *offsetp, 1, byte_order);
        *offsetp += 1;
        f_nMapEntries = tvb_get_uint8(tvb, *offsetp);
        proto_tree_add_item(t, hf_x11_struct_xkb_SetKeyType_nMapEntries, tvb, *offsetp, 1, byte_order);
        *offsetp += 1;
        f_preserve = tvb_get_uint8(tvb, *offsetp);
        proto_tree_add_item(t, hf_x11_struct_xkb_SetKeyType_preserve, tvb, *offsetp, 1, byte_order);
        *offsetp += 1;
        proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
        *offsetp += 1;
        struct_xkb_KTSetMapEntry(tvb, offsetp, t, byte_order, f_nMapEntries);
        struct_xkb_KTSetMapEntry(tvb, offsetp, t, byte_order, (f_preserve * f_nMapEntries));
    }
}

static int struct_size_xkb_Listing(tvbuff_t *tvb _U_, int *offsetp _U_, unsigned byte_order _U_)
{
    int size = 0;
    int f_length;
    f_length = tvb_get_uint16(tvb, *offsetp + size + 2, byte_order);
    size += f_length * 1;
    size = (size + 1) & ~1;
    return size + 4;
}

static void struct_xkb_Listing(tvbuff_t *tvb, int *offsetp, proto_tree *root, unsigned byte_order _U_, int count)
{
    int i;
    for (i = 0; i < count; i++) {
        proto_item *item;
        proto_tree *t;
        int f_length;

        item = proto_tree_add_item(root, hf_x11_struct_xkb_Listing, tvb, *offsetp, struct_size_xkb_Listing(tvb, offsetp, byte_order), ENC_NA);
        t = proto_item_add_subtree(item, ett_x11_rectangle);
        proto_tree_add_item(t, hf_x11_struct_xkb_Listing_flags, tvb, *offsetp, 2, byte_order);
        *offsetp += 2;
        f_length = tvb_get_uint16(tvb, *offsetp, byte_order);
        proto_tree_add_item(t, hf_x11_struct_xkb_Listing_length, tvb, *offsetp, 2, byte_order);
        *offsetp += 2;
        listOfByte(tvb, offsetp, t, hf_x11_struct_xkb_Listing_string, f_length, byte_order);
        if (*offsetp % 2) {
            proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, (2 - *offsetp % 2), ENC_NA);
            *offsetp += (2 - *offsetp % 2);
        }
    }
}

static int struct_size_xkb_DeviceLedInfo(tvbuff_t *tvb _U_, int *offsetp _U_, unsigned byte_order _U_)
{
    int size = 0;
    int f_mapsPresent;
    int f_namesPresent;
    f_namesPresent = tvb_get_uint32(tvb, *offsetp + size + 4, byte_order);
    f_mapsPresent = tvb_get_uint32(tvb, *offsetp + size + 8, byte_order);
    size += ws_count_ones(f_namesPresent) * 4;
    size += ws_count_ones(f_mapsPresent) * 12;
    return size + 20;
}

static void struct_xkb_DeviceLedInfo(tvbuff_t *tvb, int *offsetp, proto_tree *root, unsigned byte_order _U_, int count)
{
    int i;
    for (i = 0; i < count; i++) {
        proto_item *item;
        proto_tree *t;
        int f_namesPresent;
        int f_mapsPresent;

        item = proto_tree_add_item(root, hf_x11_struct_xkb_DeviceLedInfo, tvb, *offsetp, struct_size_xkb_DeviceLedInfo(tvb, offsetp, byte_order), ENC_NA);
        t = proto_item_add_subtree(item, ett_x11_rectangle);
        field16(tvb, offsetp, t, hf_x11_struct_xkb_DeviceLedInfo_ledClass, byte_order);
        field16(tvb, offsetp, t, hf_x11_struct_xkb_DeviceLedInfo_ledID, byte_order);
        f_namesPresent = tvb_get_uint32(tvb, *offsetp, byte_order);
        proto_tree_add_item(t, hf_x11_struct_xkb_DeviceLedInfo_namesPresent, tvb, *offsetp, 4, byte_order);
        *offsetp += 4;
        f_mapsPresent = tvb_get_uint32(tvb, *offsetp, byte_order);
        proto_tree_add_item(t, hf_x11_struct_xkb_DeviceLedInfo_mapsPresent, tvb, *offsetp, 4, byte_order);
        *offsetp += 4;
        proto_tree_add_item(t, hf_x11_struct_xkb_DeviceLedInfo_physIndicators, tvb, *offsetp, 4, byte_order);
        *offsetp += 4;
        proto_tree_add_item(t, hf_x11_struct_xkb_DeviceLedInfo_state, tvb, *offsetp, 4, byte_order);
        *offsetp += 4;
        listOfCard32(tvb, offsetp, t, hf_x11_struct_xkb_DeviceLedInfo_names, hf_x11_struct_xkb_DeviceLedInfo_names_item, ws_count_ones(f_namesPresent), byte_order);
        struct_xkb_IndicatorMap(tvb, offsetp, t, byte_order, ws_count_ones(f_mapsPresent));
    }
}

static void struct_xkb_SANoAction(tvbuff_t *tvb, int *offsetp, proto_tree *root, unsigned byte_order _U_, int count)
{
    int i;
    for (i = 0; i < count; i++) {
        proto_item *item;
        proto_tree *t;

        item = proto_tree_add_item(root, hf_x11_struct_xkb_SANoAction, tvb, *offsetp, 8, ENC_NA);
        t = proto_item_add_subtree(item, ett_x11_rectangle);
        field8(tvb, offsetp, t, hf_x11_struct_xkb_SANoAction_type, byte_order);
        proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 7, ENC_NA);
        *offsetp += 7;
    }
}

static void struct_xkb_SASetMods(tvbuff_t *tvb, int *offsetp, proto_tree *root, unsigned byte_order _U_, int count)
{
    int i;
    for (i = 0; i < count; i++) {
        proto_item *item;
        proto_tree *t;

        item = proto_tree_add_item(root, hf_x11_struct_xkb_SASetMods, tvb, *offsetp, 8, ENC_NA);
        t = proto_item_add_subtree(item, ett_x11_rectangle);
        field8(tvb, offsetp, t, hf_x11_struct_xkb_SASetMods_type, byte_order);
        {
            static int* const flags_bits [] = {
                &hf_x11_struct_xkb_SASetMods_flags_mask_ClearLocks,
                &hf_x11_struct_xkb_SASetMods_flags_mask_LatchToLock,
                &hf_x11_struct_xkb_SASetMods_flags_mask_GroupAbsolute,
                NULL
            };
            proto_tree_add_bitmask(t,  tvb, *offsetp, hf_x11_struct_xkb_SASetMods_flags, ett_x11_rectangle, flags_bits, byte_order);
        }
        *offsetp += 1;
        {
            static int* const mask_bits [] = {
                &hf_x11_struct_xkb_SASetMods_mask_mask_Shift,
                &hf_x11_struct_xkb_SASetMods_mask_mask_Lock,
                &hf_x11_struct_xkb_SASetMods_mask_mask_Control,
                &hf_x11_struct_xkb_SASetMods_mask_mask_1,
                &hf_x11_struct_xkb_SASetMods_mask_mask_2,
                &hf_x11_struct_xkb_SASetMods_mask_mask_3,
                &hf_x11_struct_xkb_SASetMods_mask_mask_4,
                &hf_x11_struct_xkb_SASetMods_mask_mask_5,
                &hf_x11_struct_xkb_SASetMods_mask_mask_Any,
                NULL
            };
            proto_tree_add_bitmask(t,  tvb, *offsetp, hf_x11_struct_xkb_SASetMods_mask, ett_x11_rectangle, mask_bits, byte_order);
        }
        *offsetp += 1;
        {
            static int* const realMods_bits [] = {
                &hf_x11_struct_xkb_SASetMods_realMods_mask_Shift,
                &hf_x11_struct_xkb_SASetMods_realMods_mask_Lock,
                &hf_x11_struct_xkb_SASetMods_realMods_mask_Control,
                &hf_x11_struct_xkb_SASetMods_realMods_mask_1,
                &hf_x11_struct_xkb_SASetMods_realMods_mask_2,
                &hf_x11_struct_xkb_SASetMods_realMods_mask_3,
                &hf_x11_struct_xkb_SASetMods_realMods_mask_4,
                &hf_x11_struct_xkb_SASetMods_realMods_mask_5,
                &hf_x11_struct_xkb_SASetMods_realMods_mask_Any,
                NULL
            };
            proto_tree_add_bitmask(t,  tvb, *offsetp, hf_x11_struct_xkb_SASetMods_realMods, ett_x11_rectangle, realMods_bits, byte_order);
        }
        *offsetp += 1;
        {
            static int* const vmodsHigh_bits [] = {
                &hf_x11_struct_xkb_SASetMods_vmodsHigh_mask_8,
                &hf_x11_struct_xkb_SASetMods_vmodsHigh_mask_9,
                &hf_x11_struct_xkb_SASetMods_vmodsHigh_mask_10,
                &hf_x11_struct_xkb_SASetMods_vmodsHigh_mask_11,
                &hf_x11_struct_xkb_SASetMods_vmodsHigh_mask_12,
                &hf_x11_struct_xkb_SASetMods_vmodsHigh_mask_13,
                &hf_x11_struct_xkb_SASetMods_vmodsHigh_mask_14,
                &hf_x11_struct_xkb_SASetMods_vmodsHigh_mask_15,
                NULL
            };
            proto_tree_add_bitmask(t,  tvb, *offsetp, hf_x11_struct_xkb_SASetMods_vmodsHigh, ett_x11_rectangle, vmodsHigh_bits, byte_order);
        }
        *offsetp += 1;
        {
            static int* const vmodsLow_bits [] = {
                &hf_x11_struct_xkb_SASetMods_vmodsLow_mask_0,
                &hf_x11_struct_xkb_SASetMods_vmodsLow_mask_1,
                &hf_x11_struct_xkb_SASetMods_vmodsLow_mask_2,
                &hf_x11_struct_xkb_SASetMods_vmodsLow_mask_3,
                &hf_x11_struct_xkb_SASetMods_vmodsLow_mask_4,
                &hf_x11_struct_xkb_SASetMods_vmodsLow_mask_5,
                &hf_x11_struct_xkb_SASetMods_vmodsLow_mask_6,
                &hf_x11_struct_xkb_SASetMods_vmodsLow_mask_7,
                NULL
            };
            proto_tree_add_bitmask(t,  tvb, *offsetp, hf_x11_struct_xkb_SASetMods_vmodsLow, ett_x11_rectangle, vmodsLow_bits, byte_order);
        }
        *offsetp += 1;
        proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 2, ENC_NA);
        *offsetp += 2;
    }
}

static void struct_xkb_SASetGroup(tvbuff_t *tvb, int *offsetp, proto_tree *root, unsigned byte_order _U_, int count)
{
    int i;
    for (i = 0; i < count; i++) {
        proto_item *item;
        proto_tree *t;

        item = proto_tree_add_item(root, hf_x11_struct_xkb_SASetGroup, tvb, *offsetp, 8, ENC_NA);
        t = proto_item_add_subtree(item, ett_x11_rectangle);
        field8(tvb, offsetp, t, hf_x11_struct_xkb_SASetGroup_type, byte_order);
        {
            static int* const flags_bits [] = {
                &hf_x11_struct_xkb_SASetGroup_flags_mask_ClearLocks,
                &hf_x11_struct_xkb_SASetGroup_flags_mask_LatchToLock,
                &hf_x11_struct_xkb_SASetGroup_flags_mask_GroupAbsolute,
                NULL
            };
            proto_tree_add_bitmask(t,  tvb, *offsetp, hf_x11_struct_xkb_SASetGroup_flags, ett_x11_rectangle, flags_bits, byte_order);
        }
        *offsetp += 1;
        proto_tree_add_item(t, hf_x11_struct_xkb_SASetGroup_group, tvb, *offsetp, 1, byte_order);
        *offsetp += 1;
        proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 5, ENC_NA);
        *offsetp += 5;
    }
}

static void struct_xkb_SAMovePtr(tvbuff_t *tvb, int *offsetp, proto_tree *root, unsigned byte_order _U_, int count)
{
    int i;
    for (i = 0; i < count; i++) {
        proto_item *item;
        proto_tree *t;

        item = proto_tree_add_item(root, hf_x11_struct_xkb_SAMovePtr, tvb, *offsetp, 8, ENC_NA);
        t = proto_item_add_subtree(item, ett_x11_rectangle);
        field8(tvb, offsetp, t, hf_x11_struct_xkb_SAMovePtr_type, byte_order);
        {
            static int* const flags_bits [] = {
                &hf_x11_struct_xkb_SAMovePtr_flags_mask_NoAcceleration,
                &hf_x11_struct_xkb_SAMovePtr_flags_mask_MoveAbsoluteX,
                &hf_x11_struct_xkb_SAMovePtr_flags_mask_MoveAbsoluteY,
                NULL
            };
            proto_tree_add_bitmask(t,  tvb, *offsetp, hf_x11_struct_xkb_SAMovePtr_flags, ett_x11_rectangle, flags_bits, byte_order);
        }
        *offsetp += 1;
        proto_tree_add_item(t, hf_x11_struct_xkb_SAMovePtr_xHigh, tvb, *offsetp, 1, byte_order);
        *offsetp += 1;
        proto_tree_add_item(t, hf_x11_struct_xkb_SAMovePtr_xLow, tvb, *offsetp, 1, byte_order);
        *offsetp += 1;
        proto_tree_add_item(t, hf_x11_struct_xkb_SAMovePtr_yHigh, tvb, *offsetp, 1, byte_order);
        *offsetp += 1;
        proto_tree_add_item(t, hf_x11_struct_xkb_SAMovePtr_yLow, tvb, *offsetp, 1, byte_order);
        *offsetp += 1;
        proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 2, ENC_NA);
        *offsetp += 2;
    }
}

static void struct_xkb_SAPtrBtn(tvbuff_t *tvb, int *offsetp, proto_tree *root, unsigned byte_order _U_, int count)
{
    int i;
    for (i = 0; i < count; i++) {
        proto_item *item;
        proto_tree *t;

        item = proto_tree_add_item(root, hf_x11_struct_xkb_SAPtrBtn, tvb, *offsetp, 8, ENC_NA);
        t = proto_item_add_subtree(item, ett_x11_rectangle);
        field8(tvb, offsetp, t, hf_x11_struct_xkb_SAPtrBtn_type, byte_order);
        proto_tree_add_item(t, hf_x11_struct_xkb_SAPtrBtn_flags, tvb, *offsetp, 1, byte_order);
        *offsetp += 1;
        proto_tree_add_item(t, hf_x11_struct_xkb_SAPtrBtn_count, tvb, *offsetp, 1, byte_order);
        *offsetp += 1;
        proto_tree_add_item(t, hf_x11_struct_xkb_SAPtrBtn_button, tvb, *offsetp, 1, byte_order);
        *offsetp += 1;
        proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 4, ENC_NA);
        *offsetp += 4;
    }
}

static void struct_xkb_SALockPtrBtn(tvbuff_t *tvb, int *offsetp, proto_tree *root, unsigned byte_order _U_, int count)
{
    int i;
    for (i = 0; i < count; i++) {
        proto_item *item;
        proto_tree *t;

        item = proto_tree_add_item(root, hf_x11_struct_xkb_SALockPtrBtn, tvb, *offsetp, 8, ENC_NA);
        t = proto_item_add_subtree(item, ett_x11_rectangle);
        field8(tvb, offsetp, t, hf_x11_struct_xkb_SALockPtrBtn_type, byte_order);
        proto_tree_add_item(t, hf_x11_struct_xkb_SALockPtrBtn_flags, tvb, *offsetp, 1, byte_order);
        *offsetp += 1;
        proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
        *offsetp += 1;
        proto_tree_add_item(t, hf_x11_struct_xkb_SALockPtrBtn_button, tvb, *offsetp, 1, byte_order);
        *offsetp += 1;
        proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 4, ENC_NA);
        *offsetp += 4;
    }
}

static void struct_xkb_SASetPtrDflt(tvbuff_t *tvb, int *offsetp, proto_tree *root, unsigned byte_order _U_, int count)
{
    int i;
    for (i = 0; i < count; i++) {
        proto_item *item;
        proto_tree *t;

        item = proto_tree_add_item(root, hf_x11_struct_xkb_SASetPtrDflt, tvb, *offsetp, 8, ENC_NA);
        t = proto_item_add_subtree(item, ett_x11_rectangle);
        field8(tvb, offsetp, t, hf_x11_struct_xkb_SASetPtrDflt_type, byte_order);
        {
            static int* const flags_bits [] = {
                &hf_x11_struct_xkb_SASetPtrDflt_flags_mask_AffectDfltButton,
                &hf_x11_struct_xkb_SASetPtrDflt_flags_mask_DfltBtnAbsolute,
                NULL
            };
            proto_tree_add_bitmask(t,  tvb, *offsetp, hf_x11_struct_xkb_SASetPtrDflt_flags, ett_x11_rectangle, flags_bits, byte_order);
        }
        *offsetp += 1;
        {
            static int* const affect_bits [] = {
                &hf_x11_struct_xkb_SASetPtrDflt_affect_mask_AffectDfltButton,
                &hf_x11_struct_xkb_SASetPtrDflt_affect_mask_DfltBtnAbsolute,
                NULL
            };
            proto_tree_add_bitmask(t,  tvb, *offsetp, hf_x11_struct_xkb_SASetPtrDflt_affect, ett_x11_rectangle, affect_bits, byte_order);
        }
        *offsetp += 1;
        proto_tree_add_item(t, hf_x11_struct_xkb_SASetPtrDflt_value, tvb, *offsetp, 1, byte_order);
        *offsetp += 1;
        proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 4, ENC_NA);
        *offsetp += 4;
    }
}

static void struct_xkb_SAIsoLock(tvbuff_t *tvb, int *offsetp, proto_tree *root, unsigned byte_order _U_, int count)
{
    int i;
    for (i = 0; i < count; i++) {
        proto_item *item;
        proto_tree *t;

        item = proto_tree_add_item(root, hf_x11_struct_xkb_SAIsoLock, tvb, *offsetp, 8, ENC_NA);
        t = proto_item_add_subtree(item, ett_x11_rectangle);
        field8(tvb, offsetp, t, hf_x11_struct_xkb_SAIsoLock_type, byte_order);
        {
            static int* const flags_bits [] = {
                &hf_x11_struct_xkb_SAIsoLock_flags_mask_NoLock,
                &hf_x11_struct_xkb_SAIsoLock_flags_mask_NoUnlock,
                &hf_x11_struct_xkb_SAIsoLock_flags_mask_GroupAbsolute,
                &hf_x11_struct_xkb_SAIsoLock_flags_mask_ISODfltIsGroup,
                NULL
            };
            proto_tree_add_bitmask(t,  tvb, *offsetp, hf_x11_struct_xkb_SAIsoLock_flags, ett_x11_rectangle, flags_bits, byte_order);
        }
        *offsetp += 1;
        {
            static int* const mask_bits [] = {
                &hf_x11_struct_xkb_SAIsoLock_mask_mask_Shift,
                &hf_x11_struct_xkb_SAIsoLock_mask_mask_Lock,
                &hf_x11_struct_xkb_SAIsoLock_mask_mask_Control,
                &hf_x11_struct_xkb_SAIsoLock_mask_mask_1,
                &hf_x11_struct_xkb_SAIsoLock_mask_mask_2,
                &hf_x11_struct_xkb_SAIsoLock_mask_mask_3,
                &hf_x11_struct_xkb_SAIsoLock_mask_mask_4,
                &hf_x11_struct_xkb_SAIsoLock_mask_mask_5,
                &hf_x11_struct_xkb_SAIsoLock_mask_mask_Any,
                NULL
            };
            proto_tree_add_bitmask(t,  tvb, *offsetp, hf_x11_struct_xkb_SAIsoLock_mask, ett_x11_rectangle, mask_bits, byte_order);
        }
        *offsetp += 1;
        {
            static int* const realMods_bits [] = {
                &hf_x11_struct_xkb_SAIsoLock_realMods_mask_Shift,
                &hf_x11_struct_xkb_SAIsoLock_realMods_mask_Lock,
                &hf_x11_struct_xkb_SAIsoLock_realMods_mask_Control,
                &hf_x11_struct_xkb_SAIsoLock_realMods_mask_1,
                &hf_x11_struct_xkb_SAIsoLock_realMods_mask_2,
                &hf_x11_struct_xkb_SAIsoLock_realMods_mask_3,
                &hf_x11_struct_xkb_SAIsoLock_realMods_mask_4,
                &hf_x11_struct_xkb_SAIsoLock_realMods_mask_5,
                &hf_x11_struct_xkb_SAIsoLock_realMods_mask_Any,
                NULL
            };
            proto_tree_add_bitmask(t,  tvb, *offsetp, hf_x11_struct_xkb_SAIsoLock_realMods, ett_x11_rectangle, realMods_bits, byte_order);
        }
        *offsetp += 1;
        proto_tree_add_item(t, hf_x11_struct_xkb_SAIsoLock_group, tvb, *offsetp, 1, byte_order);
        *offsetp += 1;
        {
            static int* const affect_bits [] = {
                &hf_x11_struct_xkb_SAIsoLock_affect_mask_Ctrls,
                &hf_x11_struct_xkb_SAIsoLock_affect_mask_Ptr,
                &hf_x11_struct_xkb_SAIsoLock_affect_mask_Group,
                &hf_x11_struct_xkb_SAIsoLock_affect_mask_Mods,
                NULL
            };
            proto_tree_add_bitmask(t,  tvb, *offsetp, hf_x11_struct_xkb_SAIsoLock_affect, ett_x11_rectangle, affect_bits, byte_order);
        }
        *offsetp += 1;
        {
            static int* const vmodsHigh_bits [] = {
                &hf_x11_struct_xkb_SAIsoLock_vmodsHigh_mask_8,
                &hf_x11_struct_xkb_SAIsoLock_vmodsHigh_mask_9,
                &hf_x11_struct_xkb_SAIsoLock_vmodsHigh_mask_10,
                &hf_x11_struct_xkb_SAIsoLock_vmodsHigh_mask_11,
                &hf_x11_struct_xkb_SAIsoLock_vmodsHigh_mask_12,
                &hf_x11_struct_xkb_SAIsoLock_vmodsHigh_mask_13,
                &hf_x11_struct_xkb_SAIsoLock_vmodsHigh_mask_14,
                &hf_x11_struct_xkb_SAIsoLock_vmodsHigh_mask_15,
                NULL
            };
            proto_tree_add_bitmask(t,  tvb, *offsetp, hf_x11_struct_xkb_SAIsoLock_vmodsHigh, ett_x11_rectangle, vmodsHigh_bits, byte_order);
        }
        *offsetp += 1;
        {
            static int* const vmodsLow_bits [] = {
                &hf_x11_struct_xkb_SAIsoLock_vmodsLow_mask_0,
                &hf_x11_struct_xkb_SAIsoLock_vmodsLow_mask_1,
                &hf_x11_struct_xkb_SAIsoLock_vmodsLow_mask_2,
                &hf_x11_struct_xkb_SAIsoLock_vmodsLow_mask_3,
                &hf_x11_struct_xkb_SAIsoLock_vmodsLow_mask_4,
                &hf_x11_struct_xkb_SAIsoLock_vmodsLow_mask_5,
                &hf_x11_struct_xkb_SAIsoLock_vmodsLow_mask_6,
                &hf_x11_struct_xkb_SAIsoLock_vmodsLow_mask_7,
                NULL
            };
            proto_tree_add_bitmask(t,  tvb, *offsetp, hf_x11_struct_xkb_SAIsoLock_vmodsLow, ett_x11_rectangle, vmodsLow_bits, byte_order);
        }
        *offsetp += 1;
    }
}

static void struct_xkb_SATerminate(tvbuff_t *tvb, int *offsetp, proto_tree *root, unsigned byte_order _U_, int count)
{
    int i;
    for (i = 0; i < count; i++) {
        proto_item *item;
        proto_tree *t;

        item = proto_tree_add_item(root, hf_x11_struct_xkb_SATerminate, tvb, *offsetp, 8, ENC_NA);
        t = proto_item_add_subtree(item, ett_x11_rectangle);
        field8(tvb, offsetp, t, hf_x11_struct_xkb_SATerminate_type, byte_order);
        proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 7, ENC_NA);
        *offsetp += 7;
    }
}

static void struct_xkb_SASwitchScreen(tvbuff_t *tvb, int *offsetp, proto_tree *root, unsigned byte_order _U_, int count)
{
    int i;
    for (i = 0; i < count; i++) {
        proto_item *item;
        proto_tree *t;

        item = proto_tree_add_item(root, hf_x11_struct_xkb_SASwitchScreen, tvb, *offsetp, 8, ENC_NA);
        t = proto_item_add_subtree(item, ett_x11_rectangle);
        field8(tvb, offsetp, t, hf_x11_struct_xkb_SASwitchScreen_type, byte_order);
        proto_tree_add_item(t, hf_x11_struct_xkb_SASwitchScreen_flags, tvb, *offsetp, 1, byte_order);
        *offsetp += 1;
        proto_tree_add_item(t, hf_x11_struct_xkb_SASwitchScreen_newScreen, tvb, *offsetp, 1, byte_order);
        *offsetp += 1;
        proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 5, ENC_NA);
        *offsetp += 5;
    }
}

static void struct_xkb_SASetControls(tvbuff_t *tvb, int *offsetp, proto_tree *root, unsigned byte_order _U_, int count)
{
    int i;
    for (i = 0; i < count; i++) {
        proto_item *item;
        proto_tree *t;

        item = proto_tree_add_item(root, hf_x11_struct_xkb_SASetControls, tvb, *offsetp, 8, ENC_NA);
        t = proto_item_add_subtree(item, ett_x11_rectangle);
        field8(tvb, offsetp, t, hf_x11_struct_xkb_SASetControls_type, byte_order);
        proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 3, ENC_NA);
        *offsetp += 3;
        {
            static int* const boolCtrlsHigh_bits [] = {
                &hf_x11_struct_xkb_SASetControls_boolCtrlsHigh_mask_AccessXFeedback,
                &hf_x11_struct_xkb_SASetControls_boolCtrlsHigh_mask_AudibleBell,
                &hf_x11_struct_xkb_SASetControls_boolCtrlsHigh_mask_Overlay1,
                &hf_x11_struct_xkb_SASetControls_boolCtrlsHigh_mask_Overlay2,
                &hf_x11_struct_xkb_SASetControls_boolCtrlsHigh_mask_IgnoreGroupLock,
                NULL
            };
            proto_tree_add_bitmask(t,  tvb, *offsetp, hf_x11_struct_xkb_SASetControls_boolCtrlsHigh, ett_x11_rectangle, boolCtrlsHigh_bits, byte_order);
        }
        *offsetp += 1;
        {
            static int* const boolCtrlsLow_bits [] = {
                &hf_x11_struct_xkb_SASetControls_boolCtrlsLow_mask_RepeatKeys,
                &hf_x11_struct_xkb_SASetControls_boolCtrlsLow_mask_SlowKeys,
                &hf_x11_struct_xkb_SASetControls_boolCtrlsLow_mask_BounceKeys,
                &hf_x11_struct_xkb_SASetControls_boolCtrlsLow_mask_StickyKeys,
                &hf_x11_struct_xkb_SASetControls_boolCtrlsLow_mask_MouseKeys,
                &hf_x11_struct_xkb_SASetControls_boolCtrlsLow_mask_MouseKeysAccel,
                &hf_x11_struct_xkb_SASetControls_boolCtrlsLow_mask_AccessXKeys,
                &hf_x11_struct_xkb_SASetControls_boolCtrlsLow_mask_AccessXTimeout,
                NULL
            };
            proto_tree_add_bitmask(t,  tvb, *offsetp, hf_x11_struct_xkb_SASetControls_boolCtrlsLow, ett_x11_rectangle, boolCtrlsLow_bits, byte_order);
        }
        *offsetp += 1;
        proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 2, ENC_NA);
        *offsetp += 2;
    }
}

static void struct_xkb_SAActionMessage(tvbuff_t *tvb, int *offsetp, proto_tree *root, unsigned byte_order _U_, int count)
{
    int i;
    for (i = 0; i < count; i++) {
        proto_item *item;
        proto_tree *t;

        item = proto_tree_add_item(root, hf_x11_struct_xkb_SAActionMessage, tvb, *offsetp, 8, ENC_NA);
        t = proto_item_add_subtree(item, ett_x11_rectangle);
        field8(tvb, offsetp, t, hf_x11_struct_xkb_SAActionMessage_type, byte_order);
        {
            static int* const flags_bits [] = {
                &hf_x11_struct_xkb_SAActionMessage_flags_mask_OnPress,
                &hf_x11_struct_xkb_SAActionMessage_flags_mask_OnRelease,
                &hf_x11_struct_xkb_SAActionMessage_flags_mask_GenKeyEvent,
                NULL
            };
            proto_tree_add_bitmask(t,  tvb, *offsetp, hf_x11_struct_xkb_SAActionMessage_flags, ett_x11_rectangle, flags_bits, byte_order);
        }
        *offsetp += 1;
        listOfByte(tvb, offsetp, t, hf_x11_struct_xkb_SAActionMessage_message, 6, byte_order);
    }
}

static void struct_xkb_SARedirectKey(tvbuff_t *tvb, int *offsetp, proto_tree *root, unsigned byte_order _U_, int count)
{
    int i;
    for (i = 0; i < count; i++) {
        proto_item *item;
        proto_tree *t;

        item = proto_tree_add_item(root, hf_x11_struct_xkb_SARedirectKey, tvb, *offsetp, 8, ENC_NA);
        t = proto_item_add_subtree(item, ett_x11_rectangle);
        field8(tvb, offsetp, t, hf_x11_struct_xkb_SARedirectKey_type, byte_order);
        proto_tree_add_item(t, hf_x11_struct_xkb_SARedirectKey_newkey, tvb, *offsetp, 1, byte_order);
        *offsetp += 1;
        {
            static int* const mask_bits [] = {
                &hf_x11_struct_xkb_SARedirectKey_mask_mask_Shift,
                &hf_x11_struct_xkb_SARedirectKey_mask_mask_Lock,
                &hf_x11_struct_xkb_SARedirectKey_mask_mask_Control,
                &hf_x11_struct_xkb_SARedirectKey_mask_mask_1,
                &hf_x11_struct_xkb_SARedirectKey_mask_mask_2,
                &hf_x11_struct_xkb_SARedirectKey_mask_mask_3,
                &hf_x11_struct_xkb_SARedirectKey_mask_mask_4,
                &hf_x11_struct_xkb_SARedirectKey_mask_mask_5,
                &hf_x11_struct_xkb_SARedirectKey_mask_mask_Any,
                NULL
            };
            proto_tree_add_bitmask(t,  tvb, *offsetp, hf_x11_struct_xkb_SARedirectKey_mask, ett_x11_rectangle, mask_bits, byte_order);
        }
        *offsetp += 1;
        {
            static int* const realModifiers_bits [] = {
                &hf_x11_struct_xkb_SARedirectKey_realModifiers_mask_Shift,
                &hf_x11_struct_xkb_SARedirectKey_realModifiers_mask_Lock,
                &hf_x11_struct_xkb_SARedirectKey_realModifiers_mask_Control,
                &hf_x11_struct_xkb_SARedirectKey_realModifiers_mask_1,
                &hf_x11_struct_xkb_SARedirectKey_realModifiers_mask_2,
                &hf_x11_struct_xkb_SARedirectKey_realModifiers_mask_3,
                &hf_x11_struct_xkb_SARedirectKey_realModifiers_mask_4,
                &hf_x11_struct_xkb_SARedirectKey_realModifiers_mask_5,
                &hf_x11_struct_xkb_SARedirectKey_realModifiers_mask_Any,
                NULL
            };
            proto_tree_add_bitmask(t,  tvb, *offsetp, hf_x11_struct_xkb_SARedirectKey_realModifiers, ett_x11_rectangle, realModifiers_bits, byte_order);
        }
        *offsetp += 1;
        {
            static int* const vmodsMaskHigh_bits [] = {
                &hf_x11_struct_xkb_SARedirectKey_vmodsMaskHigh_mask_8,
                &hf_x11_struct_xkb_SARedirectKey_vmodsMaskHigh_mask_9,
                &hf_x11_struct_xkb_SARedirectKey_vmodsMaskHigh_mask_10,
                &hf_x11_struct_xkb_SARedirectKey_vmodsMaskHigh_mask_11,
                &hf_x11_struct_xkb_SARedirectKey_vmodsMaskHigh_mask_12,
                &hf_x11_struct_xkb_SARedirectKey_vmodsMaskHigh_mask_13,
                &hf_x11_struct_xkb_SARedirectKey_vmodsMaskHigh_mask_14,
                &hf_x11_struct_xkb_SARedirectKey_vmodsMaskHigh_mask_15,
                NULL
            };
            proto_tree_add_bitmask(t,  tvb, *offsetp, hf_x11_struct_xkb_SARedirectKey_vmodsMaskHigh, ett_x11_rectangle, vmodsMaskHigh_bits, byte_order);
        }
        *offsetp += 1;
        {
            static int* const vmodsMaskLow_bits [] = {
                &hf_x11_struct_xkb_SARedirectKey_vmodsMaskLow_mask_0,
                &hf_x11_struct_xkb_SARedirectKey_vmodsMaskLow_mask_1,
                &hf_x11_struct_xkb_SARedirectKey_vmodsMaskLow_mask_2,
                &hf_x11_struct_xkb_SARedirectKey_vmodsMaskLow_mask_3,
                &hf_x11_struct_xkb_SARedirectKey_vmodsMaskLow_mask_4,
                &hf_x11_struct_xkb_SARedirectKey_vmodsMaskLow_mask_5,
                &hf_x11_struct_xkb_SARedirectKey_vmodsMaskLow_mask_6,
                &hf_x11_struct_xkb_SARedirectKey_vmodsMaskLow_mask_7,
                NULL
            };
            proto_tree_add_bitmask(t,  tvb, *offsetp, hf_x11_struct_xkb_SARedirectKey_vmodsMaskLow, ett_x11_rectangle, vmodsMaskLow_bits, byte_order);
        }
        *offsetp += 1;
        {
            static int* const vmodsHigh_bits [] = {
                &hf_x11_struct_xkb_SARedirectKey_vmodsHigh_mask_8,
                &hf_x11_struct_xkb_SARedirectKey_vmodsHigh_mask_9,
                &hf_x11_struct_xkb_SARedirectKey_vmodsHigh_mask_10,
                &hf_x11_struct_xkb_SARedirectKey_vmodsHigh_mask_11,
                &hf_x11_struct_xkb_SARedirectKey_vmodsHigh_mask_12,
                &hf_x11_struct_xkb_SARedirectKey_vmodsHigh_mask_13,
                &hf_x11_struct_xkb_SARedirectKey_vmodsHigh_mask_14,
                &hf_x11_struct_xkb_SARedirectKey_vmodsHigh_mask_15,
                NULL
            };
            proto_tree_add_bitmask(t,  tvb, *offsetp, hf_x11_struct_xkb_SARedirectKey_vmodsHigh, ett_x11_rectangle, vmodsHigh_bits, byte_order);
        }
        *offsetp += 1;
        {
            static int* const vmodsLow_bits [] = {
                &hf_x11_struct_xkb_SARedirectKey_vmodsLow_mask_0,
                &hf_x11_struct_xkb_SARedirectKey_vmodsLow_mask_1,
                &hf_x11_struct_xkb_SARedirectKey_vmodsLow_mask_2,
                &hf_x11_struct_xkb_SARedirectKey_vmodsLow_mask_3,
                &hf_x11_struct_xkb_SARedirectKey_vmodsLow_mask_4,
                &hf_x11_struct_xkb_SARedirectKey_vmodsLow_mask_5,
                &hf_x11_struct_xkb_SARedirectKey_vmodsLow_mask_6,
                &hf_x11_struct_xkb_SARedirectKey_vmodsLow_mask_7,
                NULL
            };
            proto_tree_add_bitmask(t,  tvb, *offsetp, hf_x11_struct_xkb_SARedirectKey_vmodsLow, ett_x11_rectangle, vmodsLow_bits, byte_order);
        }
        *offsetp += 1;
    }
}

static void struct_xkb_SADeviceBtn(tvbuff_t *tvb, int *offsetp, proto_tree *root, unsigned byte_order _U_, int count)
{
    int i;
    for (i = 0; i < count; i++) {
        proto_item *item;
        proto_tree *t;

        item = proto_tree_add_item(root, hf_x11_struct_xkb_SADeviceBtn, tvb, *offsetp, 8, ENC_NA);
        t = proto_item_add_subtree(item, ett_x11_rectangle);
        field8(tvb, offsetp, t, hf_x11_struct_xkb_SADeviceBtn_type, byte_order);
        proto_tree_add_item(t, hf_x11_struct_xkb_SADeviceBtn_flags, tvb, *offsetp, 1, byte_order);
        *offsetp += 1;
        proto_tree_add_item(t, hf_x11_struct_xkb_SADeviceBtn_count, tvb, *offsetp, 1, byte_order);
        *offsetp += 1;
        proto_tree_add_item(t, hf_x11_struct_xkb_SADeviceBtn_button, tvb, *offsetp, 1, byte_order);
        *offsetp += 1;
        proto_tree_add_item(t, hf_x11_struct_xkb_SADeviceBtn_device, tvb, *offsetp, 1, byte_order);
        *offsetp += 1;
        proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 3, ENC_NA);
        *offsetp += 3;
    }
}

static void struct_xkb_SALockDeviceBtn(tvbuff_t *tvb, int *offsetp, proto_tree *root, unsigned byte_order _U_, int count)
{
    int i;
    for (i = 0; i < count; i++) {
        proto_item *item;
        proto_tree *t;

        item = proto_tree_add_item(root, hf_x11_struct_xkb_SALockDeviceBtn, tvb, *offsetp, 8, ENC_NA);
        t = proto_item_add_subtree(item, ett_x11_rectangle);
        field8(tvb, offsetp, t, hf_x11_struct_xkb_SALockDeviceBtn_type, byte_order);
        {
            static int* const flags_bits [] = {
                &hf_x11_struct_xkb_SALockDeviceBtn_flags_mask_NoLock,
                &hf_x11_struct_xkb_SALockDeviceBtn_flags_mask_NoUnlock,
                NULL
            };
            proto_tree_add_bitmask(t,  tvb, *offsetp, hf_x11_struct_xkb_SALockDeviceBtn_flags, ett_x11_rectangle, flags_bits, byte_order);
        }
        *offsetp += 1;
        proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
        *offsetp += 1;
        proto_tree_add_item(t, hf_x11_struct_xkb_SALockDeviceBtn_button, tvb, *offsetp, 1, byte_order);
        *offsetp += 1;
        proto_tree_add_item(t, hf_x11_struct_xkb_SALockDeviceBtn_device, tvb, *offsetp, 1, byte_order);
        *offsetp += 1;
        proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 3, ENC_NA);
        *offsetp += 3;
    }
}

static void struct_xkb_SADeviceValuator(tvbuff_t *tvb, int *offsetp, proto_tree *root, unsigned byte_order _U_, int count)
{
    int i;
    for (i = 0; i < count; i++) {
        proto_item *item;
        proto_tree *t;

        item = proto_tree_add_item(root, hf_x11_struct_xkb_SADeviceValuator, tvb, *offsetp, 8, ENC_NA);
        t = proto_item_add_subtree(item, ett_x11_rectangle);
        field8(tvb, offsetp, t, hf_x11_struct_xkb_SADeviceValuator_type, byte_order);
        proto_tree_add_item(t, hf_x11_struct_xkb_SADeviceValuator_device, tvb, *offsetp, 1, byte_order);
        *offsetp += 1;
        field8(tvb, offsetp, t, hf_x11_struct_xkb_SADeviceValuator_val1what, byte_order);
        proto_tree_add_item(t, hf_x11_struct_xkb_SADeviceValuator_val1index, tvb, *offsetp, 1, byte_order);
        *offsetp += 1;
        proto_tree_add_item(t, hf_x11_struct_xkb_SADeviceValuator_val1value, tvb, *offsetp, 1, byte_order);
        *offsetp += 1;
        field8(tvb, offsetp, t, hf_x11_struct_xkb_SADeviceValuator_val2what, byte_order);
        proto_tree_add_item(t, hf_x11_struct_xkb_SADeviceValuator_val2index, tvb, *offsetp, 1, byte_order);
        *offsetp += 1;
        proto_tree_add_item(t, hf_x11_struct_xkb_SADeviceValuator_val2value, tvb, *offsetp, 1, byte_order);
        *offsetp += 1;
    }
}

static void struct_xkb_SIAction(tvbuff_t *tvb, int *offsetp, proto_tree *root, unsigned byte_order _U_, int count)
{
    int i;
    for (i = 0; i < count; i++) {
        proto_item *item;
        proto_tree *t;

        item = proto_tree_add_item(root, hf_x11_struct_xkb_SIAction, tvb, *offsetp, 8, ENC_NA);
        t = proto_item_add_subtree(item, ett_x11_rectangle);
        field8(tvb, offsetp, t, hf_x11_struct_xkb_SIAction_type, byte_order);
        listOfByte(tvb, offsetp, t, hf_x11_struct_xkb_SIAction_data, 7, byte_order);
    }
}

static void struct_xkb_SymInterpret(tvbuff_t *tvb, int *offsetp, proto_tree *root, unsigned byte_order _U_, int count)
{
    int i;
    for (i = 0; i < count; i++) {
        proto_item *item;
        proto_tree *t;

        item = proto_tree_add_item(root, hf_x11_struct_xkb_SymInterpret, tvb, *offsetp, 16, ENC_NA);
        t = proto_item_add_subtree(item, ett_x11_rectangle);
        proto_tree_add_item(t, hf_x11_struct_xkb_SymInterpret_sym, tvb, *offsetp, 4, byte_order);
        *offsetp += 4;
        {
            static int* const mods_bits [] = {
                &hf_x11_struct_xkb_SymInterpret_mods_mask_Shift,
                &hf_x11_struct_xkb_SymInterpret_mods_mask_Lock,
                &hf_x11_struct_xkb_SymInterpret_mods_mask_Control,
                &hf_x11_struct_xkb_SymInterpret_mods_mask_1,
                &hf_x11_struct_xkb_SymInterpret_mods_mask_2,
                &hf_x11_struct_xkb_SymInterpret_mods_mask_3,
                &hf_x11_struct_xkb_SymInterpret_mods_mask_4,
                &hf_x11_struct_xkb_SymInterpret_mods_mask_5,
                &hf_x11_struct_xkb_SymInterpret_mods_mask_Any,
                NULL
            };
            proto_tree_add_bitmask(t,  tvb, *offsetp, hf_x11_struct_xkb_SymInterpret_mods, ett_x11_rectangle, mods_bits, byte_order);
        }
        *offsetp += 1;
        field8(tvb, offsetp, t, hf_x11_struct_xkb_SymInterpret_match, byte_order);
        {
            static int* const virtualMod_bits [] = {
                &hf_x11_struct_xkb_SymInterpret_virtualMod_mask_0,
                &hf_x11_struct_xkb_SymInterpret_virtualMod_mask_1,
                &hf_x11_struct_xkb_SymInterpret_virtualMod_mask_2,
                &hf_x11_struct_xkb_SymInterpret_virtualMod_mask_3,
                &hf_x11_struct_xkb_SymInterpret_virtualMod_mask_4,
                &hf_x11_struct_xkb_SymInterpret_virtualMod_mask_5,
                &hf_x11_struct_xkb_SymInterpret_virtualMod_mask_6,
                &hf_x11_struct_xkb_SymInterpret_virtualMod_mask_7,
                NULL
            };
            proto_tree_add_bitmask(t,  tvb, *offsetp, hf_x11_struct_xkb_SymInterpret_virtualMod, ett_x11_rectangle, virtualMod_bits, byte_order);
        }
        *offsetp += 1;
        proto_tree_add_item(t, hf_x11_struct_xkb_SymInterpret_flags, tvb, *offsetp, 1, byte_order);
        *offsetp += 1;
        struct_xkb_SIAction(tvb, offsetp, t, byte_order, 1);
    }
}

static void struct_xkb_Action(tvbuff_t *tvb, int *offsetp, proto_tree *root, unsigned byte_order, int count)
{
    int i;
    int base = *offsetp;
    for (i = 0; i < count; i++) {
        proto_item *item;
        proto_tree *t;
        item = proto_tree_add_item(root, hf_x11_union_xkb_Action, tvb, base, 8, ENC_NA);
        t = proto_item_add_subtree(item, ett_x11_rectangle);

        *offsetp = base;
        struct_xkb_SANoAction(tvb, offsetp, t, byte_order, 1);
        *offsetp = base;
        struct_xkb_SASetMods(tvb, offsetp, t, byte_order, 1);
        *offsetp = base;
        struct_xkb_SASetMods(tvb, offsetp, t, byte_order, 1);
        *offsetp = base;
        struct_xkb_SASetMods(tvb, offsetp, t, byte_order, 1);
        *offsetp = base;
        struct_xkb_SASetGroup(tvb, offsetp, t, byte_order, 1);
        *offsetp = base;
        struct_xkb_SASetGroup(tvb, offsetp, t, byte_order, 1);
        *offsetp = base;
        struct_xkb_SASetGroup(tvb, offsetp, t, byte_order, 1);
        *offsetp = base;
        struct_xkb_SAMovePtr(tvb, offsetp, t, byte_order, 1);
        *offsetp = base;
        struct_xkb_SAPtrBtn(tvb, offsetp, t, byte_order, 1);
        *offsetp = base;
        struct_xkb_SALockPtrBtn(tvb, offsetp, t, byte_order, 1);
        *offsetp = base;
        struct_xkb_SASetPtrDflt(tvb, offsetp, t, byte_order, 1);
        *offsetp = base;
        struct_xkb_SAIsoLock(tvb, offsetp, t, byte_order, 1);
        *offsetp = base;
        struct_xkb_SATerminate(tvb, offsetp, t, byte_order, 1);
        *offsetp = base;
        struct_xkb_SASwitchScreen(tvb, offsetp, t, byte_order, 1);
        *offsetp = base;
        struct_xkb_SASetControls(tvb, offsetp, t, byte_order, 1);
        *offsetp = base;
        struct_xkb_SASetControls(tvb, offsetp, t, byte_order, 1);
        *offsetp = base;
        struct_xkb_SAActionMessage(tvb, offsetp, t, byte_order, 1);
        *offsetp = base;
        struct_xkb_SARedirectKey(tvb, offsetp, t, byte_order, 1);
        *offsetp = base;
        struct_xkb_SADeviceBtn(tvb, offsetp, t, byte_order, 1);
        *offsetp = base;
        struct_xkb_SALockDeviceBtn(tvb, offsetp, t, byte_order, 1);
        *offsetp = base;
        struct_xkb_SADeviceValuator(tvb, offsetp, t, byte_order, 1);
        *offsetp = base;
        field8(tvb, offsetp, t, hf_x11_union_xkb_Action_type, byte_order);
        base += 8;
    }
    *offsetp = base;
}

static void xkbUseExtension(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_xkb_UseExtension_wantedMajor, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_xkb_UseExtension_wantedMinor, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
}
static void xkbUseExtension_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-UseExtension");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_xkb_UseExtension_reply_supported, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (xkb-UseExtension)", sequence_number);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xkb_UseExtension_reply_serverMajor, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_xkb_UseExtension_reply_serverMinor, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 20, ENC_NA);
    *offsetp += 20;
}

static void xkbSelectEvents(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    int f_affectWhich;
    int f_clear;
    int f_selectAll;
    proto_tree_add_item(t, hf_x11_xkb_SelectEvents_deviceSpec, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    f_affectWhich = tvb_get_uint16(tvb, *offsetp, byte_order);
    {
        static int* const affectWhich_bits [] = {
        &hf_x11_xkb_SelectEvents_affectWhich_mask_NewKeyboardNotify,
        &hf_x11_xkb_SelectEvents_affectWhich_mask_MapNotify,
        &hf_x11_xkb_SelectEvents_affectWhich_mask_StateNotify,
        &hf_x11_xkb_SelectEvents_affectWhich_mask_ControlsNotify,
        &hf_x11_xkb_SelectEvents_affectWhich_mask_IndicatorStateNotify,
        &hf_x11_xkb_SelectEvents_affectWhich_mask_IndicatorMapNotify,
        &hf_x11_xkb_SelectEvents_affectWhich_mask_NamesNotify,
        &hf_x11_xkb_SelectEvents_affectWhich_mask_CompatMapNotify,
        &hf_x11_xkb_SelectEvents_affectWhich_mask_BellNotify,
        &hf_x11_xkb_SelectEvents_affectWhich_mask_ActionMessage,
        &hf_x11_xkb_SelectEvents_affectWhich_mask_AccessXNotify,
        &hf_x11_xkb_SelectEvents_affectWhich_mask_ExtensionDeviceNotify,
        NULL
        };
        proto_tree_add_bitmask(t,  tvb, *offsetp, hf_x11_xkb_SelectEvents_affectWhich, ett_x11_rectangle, affectWhich_bits, byte_order);
    }
    *offsetp += 2;
    f_clear = tvb_get_uint16(tvb, *offsetp, byte_order);
    {
        static int* const clear_bits [] = {
        &hf_x11_xkb_SelectEvents_clear_mask_NewKeyboardNotify,
        &hf_x11_xkb_SelectEvents_clear_mask_MapNotify,
        &hf_x11_xkb_SelectEvents_clear_mask_StateNotify,
        &hf_x11_xkb_SelectEvents_clear_mask_ControlsNotify,
        &hf_x11_xkb_SelectEvents_clear_mask_IndicatorStateNotify,
        &hf_x11_xkb_SelectEvents_clear_mask_IndicatorMapNotify,
        &hf_x11_xkb_SelectEvents_clear_mask_NamesNotify,
        &hf_x11_xkb_SelectEvents_clear_mask_CompatMapNotify,
        &hf_x11_xkb_SelectEvents_clear_mask_BellNotify,
        &hf_x11_xkb_SelectEvents_clear_mask_ActionMessage,
        &hf_x11_xkb_SelectEvents_clear_mask_AccessXNotify,
        &hf_x11_xkb_SelectEvents_clear_mask_ExtensionDeviceNotify,
        NULL
        };
        proto_tree_add_bitmask(t,  tvb, *offsetp, hf_x11_xkb_SelectEvents_clear, ett_x11_rectangle, clear_bits, byte_order);
    }
    *offsetp += 2;
    f_selectAll = tvb_get_uint16(tvb, *offsetp, byte_order);
    {
        static int* const selectAll_bits [] = {
        &hf_x11_xkb_SelectEvents_selectAll_mask_NewKeyboardNotify,
        &hf_x11_xkb_SelectEvents_selectAll_mask_MapNotify,
        &hf_x11_xkb_SelectEvents_selectAll_mask_StateNotify,
        &hf_x11_xkb_SelectEvents_selectAll_mask_ControlsNotify,
        &hf_x11_xkb_SelectEvents_selectAll_mask_IndicatorStateNotify,
        &hf_x11_xkb_SelectEvents_selectAll_mask_IndicatorMapNotify,
        &hf_x11_xkb_SelectEvents_selectAll_mask_NamesNotify,
        &hf_x11_xkb_SelectEvents_selectAll_mask_CompatMapNotify,
        &hf_x11_xkb_SelectEvents_selectAll_mask_BellNotify,
        &hf_x11_xkb_SelectEvents_selectAll_mask_ActionMessage,
        &hf_x11_xkb_SelectEvents_selectAll_mask_AccessXNotify,
        &hf_x11_xkb_SelectEvents_selectAll_mask_ExtensionDeviceNotify,
        NULL
        };
        proto_tree_add_bitmask(t,  tvb, *offsetp, hf_x11_xkb_SelectEvents_selectAll, ett_x11_rectangle, selectAll_bits, byte_order);
    }
    *offsetp += 2;
    {
        static int* const affectMap_bits [] = {
        &hf_x11_xkb_SelectEvents_affectMap_mask_KeyTypes,
        &hf_x11_xkb_SelectEvents_affectMap_mask_KeySyms,
        &hf_x11_xkb_SelectEvents_affectMap_mask_ModifierMap,
        &hf_x11_xkb_SelectEvents_affectMap_mask_ExplicitComponents,
        &hf_x11_xkb_SelectEvents_affectMap_mask_KeyActions,
        &hf_x11_xkb_SelectEvents_affectMap_mask_KeyBehaviors,
        &hf_x11_xkb_SelectEvents_affectMap_mask_VirtualMods,
        &hf_x11_xkb_SelectEvents_affectMap_mask_VirtualModMap,
        NULL
        };
        proto_tree_add_bitmask(t,  tvb, *offsetp, hf_x11_xkb_SelectEvents_affectMap, ett_x11_rectangle, affectMap_bits, byte_order);
    }
    *offsetp += 2;
    {
        static int* const map_bits [] = {
        &hf_x11_xkb_SelectEvents_map_mask_KeyTypes,
        &hf_x11_xkb_SelectEvents_map_mask_KeySyms,
        &hf_x11_xkb_SelectEvents_map_mask_ModifierMap,
        &hf_x11_xkb_SelectEvents_map_mask_ExplicitComponents,
        &hf_x11_xkb_SelectEvents_map_mask_KeyActions,
        &hf_x11_xkb_SelectEvents_map_mask_KeyBehaviors,
        &hf_x11_xkb_SelectEvents_map_mask_VirtualMods,
        &hf_x11_xkb_SelectEvents_map_mask_VirtualModMap,
        NULL
        };
        proto_tree_add_bitmask(t,  tvb, *offsetp, hf_x11_xkb_SelectEvents_map, ett_x11_rectangle, map_bits, byte_order);
    }
    *offsetp += 2;
    if ((f_affectWhich & ((~f_clear) & (~f_selectAll))) & (1U << 0)) {
        {
            static int* const affectNewKeyboard_bits [] = {
                &hf_x11_xkb_SelectEvents_NewKeyboardNotify_affectNewKeyboard_mask_Keycodes,
                &hf_x11_xkb_SelectEvents_NewKeyboardNotify_affectNewKeyboard_mask_Geometry,
                &hf_x11_xkb_SelectEvents_NewKeyboardNotify_affectNewKeyboard_mask_DeviceID,
                NULL
            };
            proto_tree_add_bitmask(t,  tvb, *offsetp, hf_x11_xkb_SelectEvents_NewKeyboardNotify_affectNewKeyboard, ett_x11_rectangle, affectNewKeyboard_bits, byte_order);
        }
        *offsetp += 2;
        {
            static int* const newKeyboardDetails_bits [] = {
                &hf_x11_xkb_SelectEvents_NewKeyboardNotify_newKeyboardDetails_mask_Keycodes,
                &hf_x11_xkb_SelectEvents_NewKeyboardNotify_newKeyboardDetails_mask_Geometry,
                &hf_x11_xkb_SelectEvents_NewKeyboardNotify_newKeyboardDetails_mask_DeviceID,
                NULL
            };
            proto_tree_add_bitmask(t,  tvb, *offsetp, hf_x11_xkb_SelectEvents_NewKeyboardNotify_newKeyboardDetails, ett_x11_rectangle, newKeyboardDetails_bits, byte_order);
        }
        *offsetp += 2;
    }
    if ((f_affectWhich & ((~f_clear) & (~f_selectAll))) & (1U << 2)) {
        {
            static int* const affectState_bits [] = {
                &hf_x11_xkb_SelectEvents_StateNotify_affectState_mask_ModifierState,
                &hf_x11_xkb_SelectEvents_StateNotify_affectState_mask_ModifierBase,
                &hf_x11_xkb_SelectEvents_StateNotify_affectState_mask_ModifierLatch,
                &hf_x11_xkb_SelectEvents_StateNotify_affectState_mask_ModifierLock,
                &hf_x11_xkb_SelectEvents_StateNotify_affectState_mask_GroupState,
                &hf_x11_xkb_SelectEvents_StateNotify_affectState_mask_GroupBase,
                &hf_x11_xkb_SelectEvents_StateNotify_affectState_mask_GroupLatch,
                &hf_x11_xkb_SelectEvents_StateNotify_affectState_mask_GroupLock,
                &hf_x11_xkb_SelectEvents_StateNotify_affectState_mask_CompatState,
                &hf_x11_xkb_SelectEvents_StateNotify_affectState_mask_GrabMods,
                &hf_x11_xkb_SelectEvents_StateNotify_affectState_mask_CompatGrabMods,
                &hf_x11_xkb_SelectEvents_StateNotify_affectState_mask_LookupMods,
                &hf_x11_xkb_SelectEvents_StateNotify_affectState_mask_CompatLookupMods,
                &hf_x11_xkb_SelectEvents_StateNotify_affectState_mask_PointerButtons,
                NULL
            };
            proto_tree_add_bitmask(t,  tvb, *offsetp, hf_x11_xkb_SelectEvents_StateNotify_affectState, ett_x11_rectangle, affectState_bits, byte_order);
        }
        *offsetp += 2;
        {
            static int* const stateDetails_bits [] = {
                &hf_x11_xkb_SelectEvents_StateNotify_stateDetails_mask_ModifierState,
                &hf_x11_xkb_SelectEvents_StateNotify_stateDetails_mask_ModifierBase,
                &hf_x11_xkb_SelectEvents_StateNotify_stateDetails_mask_ModifierLatch,
                &hf_x11_xkb_SelectEvents_StateNotify_stateDetails_mask_ModifierLock,
                &hf_x11_xkb_SelectEvents_StateNotify_stateDetails_mask_GroupState,
                &hf_x11_xkb_SelectEvents_StateNotify_stateDetails_mask_GroupBase,
                &hf_x11_xkb_SelectEvents_StateNotify_stateDetails_mask_GroupLatch,
                &hf_x11_xkb_SelectEvents_StateNotify_stateDetails_mask_GroupLock,
                &hf_x11_xkb_SelectEvents_StateNotify_stateDetails_mask_CompatState,
                &hf_x11_xkb_SelectEvents_StateNotify_stateDetails_mask_GrabMods,
                &hf_x11_xkb_SelectEvents_StateNotify_stateDetails_mask_CompatGrabMods,
                &hf_x11_xkb_SelectEvents_StateNotify_stateDetails_mask_LookupMods,
                &hf_x11_xkb_SelectEvents_StateNotify_stateDetails_mask_CompatLookupMods,
                &hf_x11_xkb_SelectEvents_StateNotify_stateDetails_mask_PointerButtons,
                NULL
            };
            proto_tree_add_bitmask(t,  tvb, *offsetp, hf_x11_xkb_SelectEvents_StateNotify_stateDetails, ett_x11_rectangle, stateDetails_bits, byte_order);
        }
        *offsetp += 2;
    }
    if ((f_affectWhich & ((~f_clear) & (~f_selectAll))) & (1U << 3)) {
        {
            static int* const affectCtrls_bits [] = {
                &hf_x11_xkb_SelectEvents_ControlsNotify_affectCtrls_mask_GroupsWrap,
                &hf_x11_xkb_SelectEvents_ControlsNotify_affectCtrls_mask_InternalMods,
                &hf_x11_xkb_SelectEvents_ControlsNotify_affectCtrls_mask_IgnoreLockMods,
                &hf_x11_xkb_SelectEvents_ControlsNotify_affectCtrls_mask_PerKeyRepeat,
                &hf_x11_xkb_SelectEvents_ControlsNotify_affectCtrls_mask_ControlsEnabled,
                NULL
            };
            proto_tree_add_bitmask(t,  tvb, *offsetp, hf_x11_xkb_SelectEvents_ControlsNotify_affectCtrls, ett_x11_rectangle, affectCtrls_bits, byte_order);
        }
        *offsetp += 4;
        {
            static int* const ctrlDetails_bits [] = {
                &hf_x11_xkb_SelectEvents_ControlsNotify_ctrlDetails_mask_GroupsWrap,
                &hf_x11_xkb_SelectEvents_ControlsNotify_ctrlDetails_mask_InternalMods,
                &hf_x11_xkb_SelectEvents_ControlsNotify_ctrlDetails_mask_IgnoreLockMods,
                &hf_x11_xkb_SelectEvents_ControlsNotify_ctrlDetails_mask_PerKeyRepeat,
                &hf_x11_xkb_SelectEvents_ControlsNotify_ctrlDetails_mask_ControlsEnabled,
                NULL
            };
            proto_tree_add_bitmask(t,  tvb, *offsetp, hf_x11_xkb_SelectEvents_ControlsNotify_ctrlDetails, ett_x11_rectangle, ctrlDetails_bits, byte_order);
        }
        *offsetp += 4;
    }
    if ((f_affectWhich & ((~f_clear) & (~f_selectAll))) & (1U << 4)) {
        proto_tree_add_item(t, hf_x11_xkb_SelectEvents_IndicatorStateNotify_affectIndicatorState, tvb, *offsetp, 4, byte_order);
        *offsetp += 4;
        proto_tree_add_item(t, hf_x11_xkb_SelectEvents_IndicatorStateNotify_indicatorStateDetails, tvb, *offsetp, 4, byte_order);
        *offsetp += 4;
    }
    if ((f_affectWhich & ((~f_clear) & (~f_selectAll))) & (1U << 5)) {
        proto_tree_add_item(t, hf_x11_xkb_SelectEvents_IndicatorMapNotify_affectIndicatorMap, tvb, *offsetp, 4, byte_order);
        *offsetp += 4;
        proto_tree_add_item(t, hf_x11_xkb_SelectEvents_IndicatorMapNotify_indicatorMapDetails, tvb, *offsetp, 4, byte_order);
        *offsetp += 4;
    }
    if ((f_affectWhich & ((~f_clear) & (~f_selectAll))) & (1U << 6)) {
        {
            static int* const affectNames_bits [] = {
                &hf_x11_xkb_SelectEvents_NamesNotify_affectNames_mask_Keycodes,
                &hf_x11_xkb_SelectEvents_NamesNotify_affectNames_mask_Geometry,
                &hf_x11_xkb_SelectEvents_NamesNotify_affectNames_mask_Symbols,
                &hf_x11_xkb_SelectEvents_NamesNotify_affectNames_mask_PhysSymbols,
                &hf_x11_xkb_SelectEvents_NamesNotify_affectNames_mask_Types,
                &hf_x11_xkb_SelectEvents_NamesNotify_affectNames_mask_Compat,
                &hf_x11_xkb_SelectEvents_NamesNotify_affectNames_mask_KeyTypeNames,
                &hf_x11_xkb_SelectEvents_NamesNotify_affectNames_mask_KTLevelNames,
                &hf_x11_xkb_SelectEvents_NamesNotify_affectNames_mask_IndicatorNames,
                &hf_x11_xkb_SelectEvents_NamesNotify_affectNames_mask_KeyNames,
                &hf_x11_xkb_SelectEvents_NamesNotify_affectNames_mask_KeyAliases,
                &hf_x11_xkb_SelectEvents_NamesNotify_affectNames_mask_VirtualModNames,
                &hf_x11_xkb_SelectEvents_NamesNotify_affectNames_mask_GroupNames,
                &hf_x11_xkb_SelectEvents_NamesNotify_affectNames_mask_RGNames,
                NULL
            };
            proto_tree_add_bitmask(t,  tvb, *offsetp, hf_x11_xkb_SelectEvents_NamesNotify_affectNames, ett_x11_rectangle, affectNames_bits, byte_order);
        }
        *offsetp += 2;
        {
            static int* const namesDetails_bits [] = {
                &hf_x11_xkb_SelectEvents_NamesNotify_namesDetails_mask_Keycodes,
                &hf_x11_xkb_SelectEvents_NamesNotify_namesDetails_mask_Geometry,
                &hf_x11_xkb_SelectEvents_NamesNotify_namesDetails_mask_Symbols,
                &hf_x11_xkb_SelectEvents_NamesNotify_namesDetails_mask_PhysSymbols,
                &hf_x11_xkb_SelectEvents_NamesNotify_namesDetails_mask_Types,
                &hf_x11_xkb_SelectEvents_NamesNotify_namesDetails_mask_Compat,
                &hf_x11_xkb_SelectEvents_NamesNotify_namesDetails_mask_KeyTypeNames,
                &hf_x11_xkb_SelectEvents_NamesNotify_namesDetails_mask_KTLevelNames,
                &hf_x11_xkb_SelectEvents_NamesNotify_namesDetails_mask_IndicatorNames,
                &hf_x11_xkb_SelectEvents_NamesNotify_namesDetails_mask_KeyNames,
                &hf_x11_xkb_SelectEvents_NamesNotify_namesDetails_mask_KeyAliases,
                &hf_x11_xkb_SelectEvents_NamesNotify_namesDetails_mask_VirtualModNames,
                &hf_x11_xkb_SelectEvents_NamesNotify_namesDetails_mask_GroupNames,
                &hf_x11_xkb_SelectEvents_NamesNotify_namesDetails_mask_RGNames,
                NULL
            };
            proto_tree_add_bitmask(t,  tvb, *offsetp, hf_x11_xkb_SelectEvents_NamesNotify_namesDetails, ett_x11_rectangle, namesDetails_bits, byte_order);
        }
        *offsetp += 2;
    }
    if ((f_affectWhich & ((~f_clear) & (~f_selectAll))) & (1U << 7)) {
        {
            static int* const affectCompat_bits [] = {
                &hf_x11_xkb_SelectEvents_CompatMapNotify_affectCompat_mask_SymInterp,
                &hf_x11_xkb_SelectEvents_CompatMapNotify_affectCompat_mask_GroupCompat,
                NULL
            };
            proto_tree_add_bitmask(t,  tvb, *offsetp, hf_x11_xkb_SelectEvents_CompatMapNotify_affectCompat, ett_x11_rectangle, affectCompat_bits, byte_order);
        }
        *offsetp += 1;
        {
            static int* const compatDetails_bits [] = {
                &hf_x11_xkb_SelectEvents_CompatMapNotify_compatDetails_mask_SymInterp,
                &hf_x11_xkb_SelectEvents_CompatMapNotify_compatDetails_mask_GroupCompat,
                NULL
            };
            proto_tree_add_bitmask(t,  tvb, *offsetp, hf_x11_xkb_SelectEvents_CompatMapNotify_compatDetails, ett_x11_rectangle, compatDetails_bits, byte_order);
        }
        *offsetp += 1;
    }
    if ((f_affectWhich & ((~f_clear) & (~f_selectAll))) & (1U << 8)) {
        proto_tree_add_item(t, hf_x11_xkb_SelectEvents_BellNotify_affectBell, tvb, *offsetp, 1, byte_order);
        *offsetp += 1;
        proto_tree_add_item(t, hf_x11_xkb_SelectEvents_BellNotify_bellDetails, tvb, *offsetp, 1, byte_order);
        *offsetp += 1;
    }
    if ((f_affectWhich & ((~f_clear) & (~f_selectAll))) & (1U << 9)) {
        proto_tree_add_item(t, hf_x11_xkb_SelectEvents_ActionMessage_affectMsgDetails, tvb, *offsetp, 1, byte_order);
        *offsetp += 1;
        proto_tree_add_item(t, hf_x11_xkb_SelectEvents_ActionMessage_msgDetails, tvb, *offsetp, 1, byte_order);
        *offsetp += 1;
    }
    if ((f_affectWhich & ((~f_clear) & (~f_selectAll))) & (1U << 10)) {
        {
            static int* const affectAccessX_bits [] = {
                &hf_x11_xkb_SelectEvents_AccessXNotify_affectAccessX_mask_SKPress,
                &hf_x11_xkb_SelectEvents_AccessXNotify_affectAccessX_mask_SKAccept,
                &hf_x11_xkb_SelectEvents_AccessXNotify_affectAccessX_mask_SKReject,
                &hf_x11_xkb_SelectEvents_AccessXNotify_affectAccessX_mask_SKRelease,
                &hf_x11_xkb_SelectEvents_AccessXNotify_affectAccessX_mask_BKAccept,
                &hf_x11_xkb_SelectEvents_AccessXNotify_affectAccessX_mask_BKReject,
                &hf_x11_xkb_SelectEvents_AccessXNotify_affectAccessX_mask_AXKWarning,
                NULL
            };
            proto_tree_add_bitmask(t,  tvb, *offsetp, hf_x11_xkb_SelectEvents_AccessXNotify_affectAccessX, ett_x11_rectangle, affectAccessX_bits, byte_order);
        }
        *offsetp += 2;
        {
            static int* const accessXDetails_bits [] = {
                &hf_x11_xkb_SelectEvents_AccessXNotify_accessXDetails_mask_SKPress,
                &hf_x11_xkb_SelectEvents_AccessXNotify_accessXDetails_mask_SKAccept,
                &hf_x11_xkb_SelectEvents_AccessXNotify_accessXDetails_mask_SKReject,
                &hf_x11_xkb_SelectEvents_AccessXNotify_accessXDetails_mask_SKRelease,
                &hf_x11_xkb_SelectEvents_AccessXNotify_accessXDetails_mask_BKAccept,
                &hf_x11_xkb_SelectEvents_AccessXNotify_accessXDetails_mask_BKReject,
                &hf_x11_xkb_SelectEvents_AccessXNotify_accessXDetails_mask_AXKWarning,
                NULL
            };
            proto_tree_add_bitmask(t,  tvb, *offsetp, hf_x11_xkb_SelectEvents_AccessXNotify_accessXDetails, ett_x11_rectangle, accessXDetails_bits, byte_order);
        }
        *offsetp += 2;
    }
    if ((f_affectWhich & ((~f_clear) & (~f_selectAll))) & (1U << 11)) {
        {
            static int* const affectExtDev_bits [] = {
                &hf_x11_xkb_SelectEvents_ExtensionDeviceNotify_affectExtDev_mask_Keyboards,
                &hf_x11_xkb_SelectEvents_ExtensionDeviceNotify_affectExtDev_mask_ButtonActions,
                &hf_x11_xkb_SelectEvents_ExtensionDeviceNotify_affectExtDev_mask_IndicatorNames,
                &hf_x11_xkb_SelectEvents_ExtensionDeviceNotify_affectExtDev_mask_IndicatorMaps,
                &hf_x11_xkb_SelectEvents_ExtensionDeviceNotify_affectExtDev_mask_IndicatorState,
                NULL
            };
            proto_tree_add_bitmask(t,  tvb, *offsetp, hf_x11_xkb_SelectEvents_ExtensionDeviceNotify_affectExtDev, ett_x11_rectangle, affectExtDev_bits, byte_order);
        }
        *offsetp += 2;
        {
            static int* const extdevDetails_bits [] = {
                &hf_x11_xkb_SelectEvents_ExtensionDeviceNotify_extdevDetails_mask_Keyboards,
                &hf_x11_xkb_SelectEvents_ExtensionDeviceNotify_extdevDetails_mask_ButtonActions,
                &hf_x11_xkb_SelectEvents_ExtensionDeviceNotify_extdevDetails_mask_IndicatorNames,
                &hf_x11_xkb_SelectEvents_ExtensionDeviceNotify_extdevDetails_mask_IndicatorMaps,
                &hf_x11_xkb_SelectEvents_ExtensionDeviceNotify_extdevDetails_mask_IndicatorState,
                NULL
            };
            proto_tree_add_bitmask(t,  tvb, *offsetp, hf_x11_xkb_SelectEvents_ExtensionDeviceNotify_extdevDetails, ett_x11_rectangle, extdevDetails_bits, byte_order);
        }
        *offsetp += 2;
    }
}

static void xkbBell(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_xkb_Bell_deviceSpec, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_xkb_Bell_bellClass, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_xkb_Bell_bellID, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_xkb_Bell_percent, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_xkb_Bell_forceSound, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_xkb_Bell_eventOnly, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_xkb_Bell_pitch, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_xkb_Bell_duration, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 2, ENC_NA);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_xkb_Bell_name, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xkb_Bell_window, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}

static void xkbGetState(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_xkb_GetState_deviceSpec, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 2, ENC_NA);
    *offsetp += 2;
}
static void xkbGetState_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-GetState");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_xkb_GetState_reply_deviceID, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (xkb-GetState)", sequence_number);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    {
        static int* const mods_bits [] = {
        &hf_x11_xkb_GetState_reply_mods_mask_Shift,
        &hf_x11_xkb_GetState_reply_mods_mask_Lock,
        &hf_x11_xkb_GetState_reply_mods_mask_Control,
        &hf_x11_xkb_GetState_reply_mods_mask_1,
        &hf_x11_xkb_GetState_reply_mods_mask_2,
        &hf_x11_xkb_GetState_reply_mods_mask_3,
        &hf_x11_xkb_GetState_reply_mods_mask_4,
        &hf_x11_xkb_GetState_reply_mods_mask_5,
        &hf_x11_xkb_GetState_reply_mods_mask_Any,
        NULL
        };
        proto_tree_add_bitmask(t,  tvb, *offsetp, hf_x11_xkb_GetState_reply_mods, ett_x11_rectangle, mods_bits, byte_order);
    }
    *offsetp += 1;
    {
        static int* const baseMods_bits [] = {
        &hf_x11_xkb_GetState_reply_baseMods_mask_Shift,
        &hf_x11_xkb_GetState_reply_baseMods_mask_Lock,
        &hf_x11_xkb_GetState_reply_baseMods_mask_Control,
        &hf_x11_xkb_GetState_reply_baseMods_mask_1,
        &hf_x11_xkb_GetState_reply_baseMods_mask_2,
        &hf_x11_xkb_GetState_reply_baseMods_mask_3,
        &hf_x11_xkb_GetState_reply_baseMods_mask_4,
        &hf_x11_xkb_GetState_reply_baseMods_mask_5,
        &hf_x11_xkb_GetState_reply_baseMods_mask_Any,
        NULL
        };
        proto_tree_add_bitmask(t,  tvb, *offsetp, hf_x11_xkb_GetState_reply_baseMods, ett_x11_rectangle, baseMods_bits, byte_order);
    }
    *offsetp += 1;
    {
        static int* const latchedMods_bits [] = {
        &hf_x11_xkb_GetState_reply_latchedMods_mask_Shift,
        &hf_x11_xkb_GetState_reply_latchedMods_mask_Lock,
        &hf_x11_xkb_GetState_reply_latchedMods_mask_Control,
        &hf_x11_xkb_GetState_reply_latchedMods_mask_1,
        &hf_x11_xkb_GetState_reply_latchedMods_mask_2,
        &hf_x11_xkb_GetState_reply_latchedMods_mask_3,
        &hf_x11_xkb_GetState_reply_latchedMods_mask_4,
        &hf_x11_xkb_GetState_reply_latchedMods_mask_5,
        &hf_x11_xkb_GetState_reply_latchedMods_mask_Any,
        NULL
        };
        proto_tree_add_bitmask(t,  tvb, *offsetp, hf_x11_xkb_GetState_reply_latchedMods, ett_x11_rectangle, latchedMods_bits, byte_order);
    }
    *offsetp += 1;
    {
        static int* const lockedMods_bits [] = {
        &hf_x11_xkb_GetState_reply_lockedMods_mask_Shift,
        &hf_x11_xkb_GetState_reply_lockedMods_mask_Lock,
        &hf_x11_xkb_GetState_reply_lockedMods_mask_Control,
        &hf_x11_xkb_GetState_reply_lockedMods_mask_1,
        &hf_x11_xkb_GetState_reply_lockedMods_mask_2,
        &hf_x11_xkb_GetState_reply_lockedMods_mask_3,
        &hf_x11_xkb_GetState_reply_lockedMods_mask_4,
        &hf_x11_xkb_GetState_reply_lockedMods_mask_5,
        &hf_x11_xkb_GetState_reply_lockedMods_mask_Any,
        NULL
        };
        proto_tree_add_bitmask(t,  tvb, *offsetp, hf_x11_xkb_GetState_reply_lockedMods, ett_x11_rectangle, lockedMods_bits, byte_order);
    }
    *offsetp += 1;
    field8(tvb, offsetp, t, hf_x11_xkb_GetState_reply_group, byte_order);
    field8(tvb, offsetp, t, hf_x11_xkb_GetState_reply_lockedGroup, byte_order);
    proto_tree_add_item(t, hf_x11_xkb_GetState_reply_baseGroup, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_xkb_GetState_reply_latchedGroup, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    {
        static int* const compatState_bits [] = {
        &hf_x11_xkb_GetState_reply_compatState_mask_Shift,
        &hf_x11_xkb_GetState_reply_compatState_mask_Lock,
        &hf_x11_xkb_GetState_reply_compatState_mask_Control,
        &hf_x11_xkb_GetState_reply_compatState_mask_1,
        &hf_x11_xkb_GetState_reply_compatState_mask_2,
        &hf_x11_xkb_GetState_reply_compatState_mask_3,
        &hf_x11_xkb_GetState_reply_compatState_mask_4,
        &hf_x11_xkb_GetState_reply_compatState_mask_5,
        &hf_x11_xkb_GetState_reply_compatState_mask_Any,
        NULL
        };
        proto_tree_add_bitmask(t,  tvb, *offsetp, hf_x11_xkb_GetState_reply_compatState, ett_x11_rectangle, compatState_bits, byte_order);
    }
    *offsetp += 1;
    {
        static int* const grabMods_bits [] = {
        &hf_x11_xkb_GetState_reply_grabMods_mask_Shift,
        &hf_x11_xkb_GetState_reply_grabMods_mask_Lock,
        &hf_x11_xkb_GetState_reply_grabMods_mask_Control,
        &hf_x11_xkb_GetState_reply_grabMods_mask_1,
        &hf_x11_xkb_GetState_reply_grabMods_mask_2,
        &hf_x11_xkb_GetState_reply_grabMods_mask_3,
        &hf_x11_xkb_GetState_reply_grabMods_mask_4,
        &hf_x11_xkb_GetState_reply_grabMods_mask_5,
        &hf_x11_xkb_GetState_reply_grabMods_mask_Any,
        NULL
        };
        proto_tree_add_bitmask(t,  tvb, *offsetp, hf_x11_xkb_GetState_reply_grabMods, ett_x11_rectangle, grabMods_bits, byte_order);
    }
    *offsetp += 1;
    {
        static int* const compatGrabMods_bits [] = {
        &hf_x11_xkb_GetState_reply_compatGrabMods_mask_Shift,
        &hf_x11_xkb_GetState_reply_compatGrabMods_mask_Lock,
        &hf_x11_xkb_GetState_reply_compatGrabMods_mask_Control,
        &hf_x11_xkb_GetState_reply_compatGrabMods_mask_1,
        &hf_x11_xkb_GetState_reply_compatGrabMods_mask_2,
        &hf_x11_xkb_GetState_reply_compatGrabMods_mask_3,
        &hf_x11_xkb_GetState_reply_compatGrabMods_mask_4,
        &hf_x11_xkb_GetState_reply_compatGrabMods_mask_5,
        &hf_x11_xkb_GetState_reply_compatGrabMods_mask_Any,
        NULL
        };
        proto_tree_add_bitmask(t,  tvb, *offsetp, hf_x11_xkb_GetState_reply_compatGrabMods, ett_x11_rectangle, compatGrabMods_bits, byte_order);
    }
    *offsetp += 1;
    {
        static int* const lookupMods_bits [] = {
        &hf_x11_xkb_GetState_reply_lookupMods_mask_Shift,
        &hf_x11_xkb_GetState_reply_lookupMods_mask_Lock,
        &hf_x11_xkb_GetState_reply_lookupMods_mask_Control,
        &hf_x11_xkb_GetState_reply_lookupMods_mask_1,
        &hf_x11_xkb_GetState_reply_lookupMods_mask_2,
        &hf_x11_xkb_GetState_reply_lookupMods_mask_3,
        &hf_x11_xkb_GetState_reply_lookupMods_mask_4,
        &hf_x11_xkb_GetState_reply_lookupMods_mask_5,
        &hf_x11_xkb_GetState_reply_lookupMods_mask_Any,
        NULL
        };
        proto_tree_add_bitmask(t,  tvb, *offsetp, hf_x11_xkb_GetState_reply_lookupMods, ett_x11_rectangle, lookupMods_bits, byte_order);
    }
    *offsetp += 1;
    {
        static int* const compatLookupMods_bits [] = {
        &hf_x11_xkb_GetState_reply_compatLookupMods_mask_Shift,
        &hf_x11_xkb_GetState_reply_compatLookupMods_mask_Lock,
        &hf_x11_xkb_GetState_reply_compatLookupMods_mask_Control,
        &hf_x11_xkb_GetState_reply_compatLookupMods_mask_1,
        &hf_x11_xkb_GetState_reply_compatLookupMods_mask_2,
        &hf_x11_xkb_GetState_reply_compatLookupMods_mask_3,
        &hf_x11_xkb_GetState_reply_compatLookupMods_mask_4,
        &hf_x11_xkb_GetState_reply_compatLookupMods_mask_5,
        &hf_x11_xkb_GetState_reply_compatLookupMods_mask_Any,
        NULL
        };
        proto_tree_add_bitmask(t,  tvb, *offsetp, hf_x11_xkb_GetState_reply_compatLookupMods, ett_x11_rectangle, compatLookupMods_bits, byte_order);
    }
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    {
        static int* const ptrBtnState_bits [] = {
        &hf_x11_xkb_GetState_reply_ptrBtnState_mask_Shift,
        &hf_x11_xkb_GetState_reply_ptrBtnState_mask_Lock,
        &hf_x11_xkb_GetState_reply_ptrBtnState_mask_Control,
        &hf_x11_xkb_GetState_reply_ptrBtnState_mask_Mod1,
        &hf_x11_xkb_GetState_reply_ptrBtnState_mask_Mod2,
        &hf_x11_xkb_GetState_reply_ptrBtnState_mask_Mod3,
        &hf_x11_xkb_GetState_reply_ptrBtnState_mask_Mod4,
        &hf_x11_xkb_GetState_reply_ptrBtnState_mask_Mod5,
        &hf_x11_xkb_GetState_reply_ptrBtnState_mask_Button1,
        &hf_x11_xkb_GetState_reply_ptrBtnState_mask_Button2,
        &hf_x11_xkb_GetState_reply_ptrBtnState_mask_Button3,
        &hf_x11_xkb_GetState_reply_ptrBtnState_mask_Button4,
        &hf_x11_xkb_GetState_reply_ptrBtnState_mask_Button5,
        NULL
        };
        proto_tree_add_bitmask(t,  tvb, *offsetp, hf_x11_xkb_GetState_reply_ptrBtnState, ett_x11_rectangle, ptrBtnState_bits, byte_order);
    }
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 6, ENC_NA);
    *offsetp += 6;
}

static void xkbLatchLockState(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_xkb_LatchLockState_deviceSpec, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    {
        static int* const affectModLocks_bits [] = {
        &hf_x11_xkb_LatchLockState_affectModLocks_mask_Shift,
        &hf_x11_xkb_LatchLockState_affectModLocks_mask_Lock,
        &hf_x11_xkb_LatchLockState_affectModLocks_mask_Control,
        &hf_x11_xkb_LatchLockState_affectModLocks_mask_1,
        &hf_x11_xkb_LatchLockState_affectModLocks_mask_2,
        &hf_x11_xkb_LatchLockState_affectModLocks_mask_3,
        &hf_x11_xkb_LatchLockState_affectModLocks_mask_4,
        &hf_x11_xkb_LatchLockState_affectModLocks_mask_5,
        &hf_x11_xkb_LatchLockState_affectModLocks_mask_Any,
        NULL
        };
        proto_tree_add_bitmask(t,  tvb, *offsetp, hf_x11_xkb_LatchLockState_affectModLocks, ett_x11_rectangle, affectModLocks_bits, byte_order);
    }
    *offsetp += 1;
    {
        static int* const modLocks_bits [] = {
        &hf_x11_xkb_LatchLockState_modLocks_mask_Shift,
        &hf_x11_xkb_LatchLockState_modLocks_mask_Lock,
        &hf_x11_xkb_LatchLockState_modLocks_mask_Control,
        &hf_x11_xkb_LatchLockState_modLocks_mask_1,
        &hf_x11_xkb_LatchLockState_modLocks_mask_2,
        &hf_x11_xkb_LatchLockState_modLocks_mask_3,
        &hf_x11_xkb_LatchLockState_modLocks_mask_4,
        &hf_x11_xkb_LatchLockState_modLocks_mask_5,
        &hf_x11_xkb_LatchLockState_modLocks_mask_Any,
        NULL
        };
        proto_tree_add_bitmask(t,  tvb, *offsetp, hf_x11_xkb_LatchLockState_modLocks, ett_x11_rectangle, modLocks_bits, byte_order);
    }
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_xkb_LatchLockState_lockGroup, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    field8(tvb, offsetp, t, hf_x11_xkb_LatchLockState_groupLock, byte_order);
    {
        static int* const affectModLatches_bits [] = {
        &hf_x11_xkb_LatchLockState_affectModLatches_mask_Shift,
        &hf_x11_xkb_LatchLockState_affectModLatches_mask_Lock,
        &hf_x11_xkb_LatchLockState_affectModLatches_mask_Control,
        &hf_x11_xkb_LatchLockState_affectModLatches_mask_1,
        &hf_x11_xkb_LatchLockState_affectModLatches_mask_2,
        &hf_x11_xkb_LatchLockState_affectModLatches_mask_3,
        &hf_x11_xkb_LatchLockState_affectModLatches_mask_4,
        &hf_x11_xkb_LatchLockState_affectModLatches_mask_5,
        &hf_x11_xkb_LatchLockState_affectModLatches_mask_Any,
        NULL
        };
        proto_tree_add_bitmask(t,  tvb, *offsetp, hf_x11_xkb_LatchLockState_affectModLatches, ett_x11_rectangle, affectModLatches_bits, byte_order);
    }
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_xkb_LatchLockState_latchGroup, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_xkb_LatchLockState_groupLatch, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
}

static void xkbGetControls(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_xkb_GetControls_deviceSpec, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 2, ENC_NA);
    *offsetp += 2;
}
static void xkbGetControls_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-GetControls");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_xkb_GetControls_reply_deviceID, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (xkb-GetControls)", sequence_number);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xkb_GetControls_reply_mouseKeysDfltBtn, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_xkb_GetControls_reply_numGroups, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_xkb_GetControls_reply_groupsWrap, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    {
        static int* const internalModsMask_bits [] = {
        &hf_x11_xkb_GetControls_reply_internalModsMask_mask_Shift,
        &hf_x11_xkb_GetControls_reply_internalModsMask_mask_Lock,
        &hf_x11_xkb_GetControls_reply_internalModsMask_mask_Control,
        &hf_x11_xkb_GetControls_reply_internalModsMask_mask_1,
        &hf_x11_xkb_GetControls_reply_internalModsMask_mask_2,
        &hf_x11_xkb_GetControls_reply_internalModsMask_mask_3,
        &hf_x11_xkb_GetControls_reply_internalModsMask_mask_4,
        &hf_x11_xkb_GetControls_reply_internalModsMask_mask_5,
        &hf_x11_xkb_GetControls_reply_internalModsMask_mask_Any,
        NULL
        };
        proto_tree_add_bitmask(t,  tvb, *offsetp, hf_x11_xkb_GetControls_reply_internalModsMask, ett_x11_rectangle, internalModsMask_bits, byte_order);
    }
    *offsetp += 1;
    {
        static int* const ignoreLockModsMask_bits [] = {
        &hf_x11_xkb_GetControls_reply_ignoreLockModsMask_mask_Shift,
        &hf_x11_xkb_GetControls_reply_ignoreLockModsMask_mask_Lock,
        &hf_x11_xkb_GetControls_reply_ignoreLockModsMask_mask_Control,
        &hf_x11_xkb_GetControls_reply_ignoreLockModsMask_mask_1,
        &hf_x11_xkb_GetControls_reply_ignoreLockModsMask_mask_2,
        &hf_x11_xkb_GetControls_reply_ignoreLockModsMask_mask_3,
        &hf_x11_xkb_GetControls_reply_ignoreLockModsMask_mask_4,
        &hf_x11_xkb_GetControls_reply_ignoreLockModsMask_mask_5,
        &hf_x11_xkb_GetControls_reply_ignoreLockModsMask_mask_Any,
        NULL
        };
        proto_tree_add_bitmask(t,  tvb, *offsetp, hf_x11_xkb_GetControls_reply_ignoreLockModsMask, ett_x11_rectangle, ignoreLockModsMask_bits, byte_order);
    }
    *offsetp += 1;
    {
        static int* const internalModsRealMods_bits [] = {
        &hf_x11_xkb_GetControls_reply_internalModsRealMods_mask_Shift,
        &hf_x11_xkb_GetControls_reply_internalModsRealMods_mask_Lock,
        &hf_x11_xkb_GetControls_reply_internalModsRealMods_mask_Control,
        &hf_x11_xkb_GetControls_reply_internalModsRealMods_mask_1,
        &hf_x11_xkb_GetControls_reply_internalModsRealMods_mask_2,
        &hf_x11_xkb_GetControls_reply_internalModsRealMods_mask_3,
        &hf_x11_xkb_GetControls_reply_internalModsRealMods_mask_4,
        &hf_x11_xkb_GetControls_reply_internalModsRealMods_mask_5,
        &hf_x11_xkb_GetControls_reply_internalModsRealMods_mask_Any,
        NULL
        };
        proto_tree_add_bitmask(t,  tvb, *offsetp, hf_x11_xkb_GetControls_reply_internalModsRealMods, ett_x11_rectangle, internalModsRealMods_bits, byte_order);
    }
    *offsetp += 1;
    {
        static int* const ignoreLockModsRealMods_bits [] = {
        &hf_x11_xkb_GetControls_reply_ignoreLockModsRealMods_mask_Shift,
        &hf_x11_xkb_GetControls_reply_ignoreLockModsRealMods_mask_Lock,
        &hf_x11_xkb_GetControls_reply_ignoreLockModsRealMods_mask_Control,
        &hf_x11_xkb_GetControls_reply_ignoreLockModsRealMods_mask_1,
        &hf_x11_xkb_GetControls_reply_ignoreLockModsRealMods_mask_2,
        &hf_x11_xkb_GetControls_reply_ignoreLockModsRealMods_mask_3,
        &hf_x11_xkb_GetControls_reply_ignoreLockModsRealMods_mask_4,
        &hf_x11_xkb_GetControls_reply_ignoreLockModsRealMods_mask_5,
        &hf_x11_xkb_GetControls_reply_ignoreLockModsRealMods_mask_Any,
        NULL
        };
        proto_tree_add_bitmask(t,  tvb, *offsetp, hf_x11_xkb_GetControls_reply_ignoreLockModsRealMods, ett_x11_rectangle, ignoreLockModsRealMods_bits, byte_order);
    }
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    {
        static int* const internalModsVmods_bits [] = {
        &hf_x11_xkb_GetControls_reply_internalModsVmods_mask_0,
        &hf_x11_xkb_GetControls_reply_internalModsVmods_mask_1,
        &hf_x11_xkb_GetControls_reply_internalModsVmods_mask_2,
        &hf_x11_xkb_GetControls_reply_internalModsVmods_mask_3,
        &hf_x11_xkb_GetControls_reply_internalModsVmods_mask_4,
        &hf_x11_xkb_GetControls_reply_internalModsVmods_mask_5,
        &hf_x11_xkb_GetControls_reply_internalModsVmods_mask_6,
        &hf_x11_xkb_GetControls_reply_internalModsVmods_mask_7,
        &hf_x11_xkb_GetControls_reply_internalModsVmods_mask_8,
        &hf_x11_xkb_GetControls_reply_internalModsVmods_mask_9,
        &hf_x11_xkb_GetControls_reply_internalModsVmods_mask_10,
        &hf_x11_xkb_GetControls_reply_internalModsVmods_mask_11,
        &hf_x11_xkb_GetControls_reply_internalModsVmods_mask_12,
        &hf_x11_xkb_GetControls_reply_internalModsVmods_mask_13,
        &hf_x11_xkb_GetControls_reply_internalModsVmods_mask_14,
        &hf_x11_xkb_GetControls_reply_internalModsVmods_mask_15,
        NULL
        };
        proto_tree_add_bitmask(t,  tvb, *offsetp, hf_x11_xkb_GetControls_reply_internalModsVmods, ett_x11_rectangle, internalModsVmods_bits, byte_order);
    }
    *offsetp += 2;
    {
        static int* const ignoreLockModsVmods_bits [] = {
        &hf_x11_xkb_GetControls_reply_ignoreLockModsVmods_mask_0,
        &hf_x11_xkb_GetControls_reply_ignoreLockModsVmods_mask_1,
        &hf_x11_xkb_GetControls_reply_ignoreLockModsVmods_mask_2,
        &hf_x11_xkb_GetControls_reply_ignoreLockModsVmods_mask_3,
        &hf_x11_xkb_GetControls_reply_ignoreLockModsVmods_mask_4,
        &hf_x11_xkb_GetControls_reply_ignoreLockModsVmods_mask_5,
        &hf_x11_xkb_GetControls_reply_ignoreLockModsVmods_mask_6,
        &hf_x11_xkb_GetControls_reply_ignoreLockModsVmods_mask_7,
        &hf_x11_xkb_GetControls_reply_ignoreLockModsVmods_mask_8,
        &hf_x11_xkb_GetControls_reply_ignoreLockModsVmods_mask_9,
        &hf_x11_xkb_GetControls_reply_ignoreLockModsVmods_mask_10,
        &hf_x11_xkb_GetControls_reply_ignoreLockModsVmods_mask_11,
        &hf_x11_xkb_GetControls_reply_ignoreLockModsVmods_mask_12,
        &hf_x11_xkb_GetControls_reply_ignoreLockModsVmods_mask_13,
        &hf_x11_xkb_GetControls_reply_ignoreLockModsVmods_mask_14,
        &hf_x11_xkb_GetControls_reply_ignoreLockModsVmods_mask_15,
        NULL
        };
        proto_tree_add_bitmask(t,  tvb, *offsetp, hf_x11_xkb_GetControls_reply_ignoreLockModsVmods, ett_x11_rectangle, ignoreLockModsVmods_bits, byte_order);
    }
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_xkb_GetControls_reply_repeatDelay, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_xkb_GetControls_reply_repeatInterval, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_xkb_GetControls_reply_slowKeysDelay, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_xkb_GetControls_reply_debounceDelay, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_xkb_GetControls_reply_mouseKeysDelay, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_xkb_GetControls_reply_mouseKeysInterval, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_xkb_GetControls_reply_mouseKeysTimeToMax, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_xkb_GetControls_reply_mouseKeysMaxSpeed, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_xkb_GetControls_reply_mouseKeysCurve, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    {
        static int* const accessXOption_bits [] = {
        &hf_x11_xkb_GetControls_reply_accessXOption_mask_SKPressFB,
        &hf_x11_xkb_GetControls_reply_accessXOption_mask_SKAcceptFB,
        &hf_x11_xkb_GetControls_reply_accessXOption_mask_FeatureFB,
        &hf_x11_xkb_GetControls_reply_accessXOption_mask_SlowWarnFB,
        &hf_x11_xkb_GetControls_reply_accessXOption_mask_IndicatorFB,
        &hf_x11_xkb_GetControls_reply_accessXOption_mask_StickyKeysFB,
        &hf_x11_xkb_GetControls_reply_accessXOption_mask_TwoKeys,
        &hf_x11_xkb_GetControls_reply_accessXOption_mask_LatchToLock,
        &hf_x11_xkb_GetControls_reply_accessXOption_mask_SKReleaseFB,
        &hf_x11_xkb_GetControls_reply_accessXOption_mask_SKRejectFB,
        &hf_x11_xkb_GetControls_reply_accessXOption_mask_BKRejectFB,
        &hf_x11_xkb_GetControls_reply_accessXOption_mask_DumbBell,
        NULL
        };
        proto_tree_add_bitmask(t,  tvb, *offsetp, hf_x11_xkb_GetControls_reply_accessXOption, ett_x11_rectangle, accessXOption_bits, byte_order);
    }
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_xkb_GetControls_reply_accessXTimeout, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    {
        static int* const accessXTimeoutOptionsMask_bits [] = {
        &hf_x11_xkb_GetControls_reply_accessXTimeoutOptionsMask_mask_SKPressFB,
        &hf_x11_xkb_GetControls_reply_accessXTimeoutOptionsMask_mask_SKAcceptFB,
        &hf_x11_xkb_GetControls_reply_accessXTimeoutOptionsMask_mask_FeatureFB,
        &hf_x11_xkb_GetControls_reply_accessXTimeoutOptionsMask_mask_SlowWarnFB,
        &hf_x11_xkb_GetControls_reply_accessXTimeoutOptionsMask_mask_IndicatorFB,
        &hf_x11_xkb_GetControls_reply_accessXTimeoutOptionsMask_mask_StickyKeysFB,
        &hf_x11_xkb_GetControls_reply_accessXTimeoutOptionsMask_mask_TwoKeys,
        &hf_x11_xkb_GetControls_reply_accessXTimeoutOptionsMask_mask_LatchToLock,
        &hf_x11_xkb_GetControls_reply_accessXTimeoutOptionsMask_mask_SKReleaseFB,
        &hf_x11_xkb_GetControls_reply_accessXTimeoutOptionsMask_mask_SKRejectFB,
        &hf_x11_xkb_GetControls_reply_accessXTimeoutOptionsMask_mask_BKRejectFB,
        &hf_x11_xkb_GetControls_reply_accessXTimeoutOptionsMask_mask_DumbBell,
        NULL
        };
        proto_tree_add_bitmask(t,  tvb, *offsetp, hf_x11_xkb_GetControls_reply_accessXTimeoutOptionsMask, ett_x11_rectangle, accessXTimeoutOptionsMask_bits, byte_order);
    }
    *offsetp += 2;
    {
        static int* const accessXTimeoutOptionsValues_bits [] = {
        &hf_x11_xkb_GetControls_reply_accessXTimeoutOptionsValues_mask_SKPressFB,
        &hf_x11_xkb_GetControls_reply_accessXTimeoutOptionsValues_mask_SKAcceptFB,
        &hf_x11_xkb_GetControls_reply_accessXTimeoutOptionsValues_mask_FeatureFB,
        &hf_x11_xkb_GetControls_reply_accessXTimeoutOptionsValues_mask_SlowWarnFB,
        &hf_x11_xkb_GetControls_reply_accessXTimeoutOptionsValues_mask_IndicatorFB,
        &hf_x11_xkb_GetControls_reply_accessXTimeoutOptionsValues_mask_StickyKeysFB,
        &hf_x11_xkb_GetControls_reply_accessXTimeoutOptionsValues_mask_TwoKeys,
        &hf_x11_xkb_GetControls_reply_accessXTimeoutOptionsValues_mask_LatchToLock,
        &hf_x11_xkb_GetControls_reply_accessXTimeoutOptionsValues_mask_SKReleaseFB,
        &hf_x11_xkb_GetControls_reply_accessXTimeoutOptionsValues_mask_SKRejectFB,
        &hf_x11_xkb_GetControls_reply_accessXTimeoutOptionsValues_mask_BKRejectFB,
        &hf_x11_xkb_GetControls_reply_accessXTimeoutOptionsValues_mask_DumbBell,
        NULL
        };
        proto_tree_add_bitmask(t,  tvb, *offsetp, hf_x11_xkb_GetControls_reply_accessXTimeoutOptionsValues, ett_x11_rectangle, accessXTimeoutOptionsValues_bits, byte_order);
    }
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 2, ENC_NA);
    *offsetp += 2;
    {
        static int* const accessXTimeoutMask_bits [] = {
        &hf_x11_xkb_GetControls_reply_accessXTimeoutMask_mask_RepeatKeys,
        &hf_x11_xkb_GetControls_reply_accessXTimeoutMask_mask_SlowKeys,
        &hf_x11_xkb_GetControls_reply_accessXTimeoutMask_mask_BounceKeys,
        &hf_x11_xkb_GetControls_reply_accessXTimeoutMask_mask_StickyKeys,
        &hf_x11_xkb_GetControls_reply_accessXTimeoutMask_mask_MouseKeys,
        &hf_x11_xkb_GetControls_reply_accessXTimeoutMask_mask_MouseKeysAccel,
        &hf_x11_xkb_GetControls_reply_accessXTimeoutMask_mask_AccessXKeys,
        &hf_x11_xkb_GetControls_reply_accessXTimeoutMask_mask_AccessXTimeoutMask,
        &hf_x11_xkb_GetControls_reply_accessXTimeoutMask_mask_AccessXFeedbackMask,
        &hf_x11_xkb_GetControls_reply_accessXTimeoutMask_mask_AudibleBellMask,
        &hf_x11_xkb_GetControls_reply_accessXTimeoutMask_mask_Overlay1Mask,
        &hf_x11_xkb_GetControls_reply_accessXTimeoutMask_mask_Overlay2Mask,
        &hf_x11_xkb_GetControls_reply_accessXTimeoutMask_mask_IgnoreGroupLockMask,
        NULL
        };
        proto_tree_add_bitmask(t,  tvb, *offsetp, hf_x11_xkb_GetControls_reply_accessXTimeoutMask, ett_x11_rectangle, accessXTimeoutMask_bits, byte_order);
    }
    *offsetp += 4;
    {
        static int* const accessXTimeoutValues_bits [] = {
        &hf_x11_xkb_GetControls_reply_accessXTimeoutValues_mask_RepeatKeys,
        &hf_x11_xkb_GetControls_reply_accessXTimeoutValues_mask_SlowKeys,
        &hf_x11_xkb_GetControls_reply_accessXTimeoutValues_mask_BounceKeys,
        &hf_x11_xkb_GetControls_reply_accessXTimeoutValues_mask_StickyKeys,
        &hf_x11_xkb_GetControls_reply_accessXTimeoutValues_mask_MouseKeys,
        &hf_x11_xkb_GetControls_reply_accessXTimeoutValues_mask_MouseKeysAccel,
        &hf_x11_xkb_GetControls_reply_accessXTimeoutValues_mask_AccessXKeys,
        &hf_x11_xkb_GetControls_reply_accessXTimeoutValues_mask_AccessXTimeoutMask,
        &hf_x11_xkb_GetControls_reply_accessXTimeoutValues_mask_AccessXFeedbackMask,
        &hf_x11_xkb_GetControls_reply_accessXTimeoutValues_mask_AudibleBellMask,
        &hf_x11_xkb_GetControls_reply_accessXTimeoutValues_mask_Overlay1Mask,
        &hf_x11_xkb_GetControls_reply_accessXTimeoutValues_mask_Overlay2Mask,
        &hf_x11_xkb_GetControls_reply_accessXTimeoutValues_mask_IgnoreGroupLockMask,
        NULL
        };
        proto_tree_add_bitmask(t,  tvb, *offsetp, hf_x11_xkb_GetControls_reply_accessXTimeoutValues, ett_x11_rectangle, accessXTimeoutValues_bits, byte_order);
    }
    *offsetp += 4;
    {
        static int* const enabledControls_bits [] = {
        &hf_x11_xkb_GetControls_reply_enabledControls_mask_RepeatKeys,
        &hf_x11_xkb_GetControls_reply_enabledControls_mask_SlowKeys,
        &hf_x11_xkb_GetControls_reply_enabledControls_mask_BounceKeys,
        &hf_x11_xkb_GetControls_reply_enabledControls_mask_StickyKeys,
        &hf_x11_xkb_GetControls_reply_enabledControls_mask_MouseKeys,
        &hf_x11_xkb_GetControls_reply_enabledControls_mask_MouseKeysAccel,
        &hf_x11_xkb_GetControls_reply_enabledControls_mask_AccessXKeys,
        &hf_x11_xkb_GetControls_reply_enabledControls_mask_AccessXTimeoutMask,
        &hf_x11_xkb_GetControls_reply_enabledControls_mask_AccessXFeedbackMask,
        &hf_x11_xkb_GetControls_reply_enabledControls_mask_AudibleBellMask,
        &hf_x11_xkb_GetControls_reply_enabledControls_mask_Overlay1Mask,
        &hf_x11_xkb_GetControls_reply_enabledControls_mask_Overlay2Mask,
        &hf_x11_xkb_GetControls_reply_enabledControls_mask_IgnoreGroupLockMask,
        NULL
        };
        proto_tree_add_bitmask(t,  tvb, *offsetp, hf_x11_xkb_GetControls_reply_enabledControls, ett_x11_rectangle, enabledControls_bits, byte_order);
    }
    *offsetp += 4;
    listOfByte(tvb, offsetp, t, hf_x11_xkb_GetControls_reply_perKeyRepeat, 32, byte_order);
}

static void xkbSetControls(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_xkb_SetControls_deviceSpec, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    {
        static int* const affectInternalRealMods_bits [] = {
        &hf_x11_xkb_SetControls_affectInternalRealMods_mask_Shift,
        &hf_x11_xkb_SetControls_affectInternalRealMods_mask_Lock,
        &hf_x11_xkb_SetControls_affectInternalRealMods_mask_Control,
        &hf_x11_xkb_SetControls_affectInternalRealMods_mask_1,
        &hf_x11_xkb_SetControls_affectInternalRealMods_mask_2,
        &hf_x11_xkb_SetControls_affectInternalRealMods_mask_3,
        &hf_x11_xkb_SetControls_affectInternalRealMods_mask_4,
        &hf_x11_xkb_SetControls_affectInternalRealMods_mask_5,
        &hf_x11_xkb_SetControls_affectInternalRealMods_mask_Any,
        NULL
        };
        proto_tree_add_bitmask(t,  tvb, *offsetp, hf_x11_xkb_SetControls_affectInternalRealMods, ett_x11_rectangle, affectInternalRealMods_bits, byte_order);
    }
    *offsetp += 1;
    {
        static int* const internalRealMods_bits [] = {
        &hf_x11_xkb_SetControls_internalRealMods_mask_Shift,
        &hf_x11_xkb_SetControls_internalRealMods_mask_Lock,
        &hf_x11_xkb_SetControls_internalRealMods_mask_Control,
        &hf_x11_xkb_SetControls_internalRealMods_mask_1,
        &hf_x11_xkb_SetControls_internalRealMods_mask_2,
        &hf_x11_xkb_SetControls_internalRealMods_mask_3,
        &hf_x11_xkb_SetControls_internalRealMods_mask_4,
        &hf_x11_xkb_SetControls_internalRealMods_mask_5,
        &hf_x11_xkb_SetControls_internalRealMods_mask_Any,
        NULL
        };
        proto_tree_add_bitmask(t,  tvb, *offsetp, hf_x11_xkb_SetControls_internalRealMods, ett_x11_rectangle, internalRealMods_bits, byte_order);
    }
    *offsetp += 1;
    {
        static int* const affectIgnoreLockRealMods_bits [] = {
        &hf_x11_xkb_SetControls_affectIgnoreLockRealMods_mask_Shift,
        &hf_x11_xkb_SetControls_affectIgnoreLockRealMods_mask_Lock,
        &hf_x11_xkb_SetControls_affectIgnoreLockRealMods_mask_Control,
        &hf_x11_xkb_SetControls_affectIgnoreLockRealMods_mask_1,
        &hf_x11_xkb_SetControls_affectIgnoreLockRealMods_mask_2,
        &hf_x11_xkb_SetControls_affectIgnoreLockRealMods_mask_3,
        &hf_x11_xkb_SetControls_affectIgnoreLockRealMods_mask_4,
        &hf_x11_xkb_SetControls_affectIgnoreLockRealMods_mask_5,
        &hf_x11_xkb_SetControls_affectIgnoreLockRealMods_mask_Any,
        NULL
        };
        proto_tree_add_bitmask(t,  tvb, *offsetp, hf_x11_xkb_SetControls_affectIgnoreLockRealMods, ett_x11_rectangle, affectIgnoreLockRealMods_bits, byte_order);
    }
    *offsetp += 1;
    {
        static int* const ignoreLockRealMods_bits [] = {
        &hf_x11_xkb_SetControls_ignoreLockRealMods_mask_Shift,
        &hf_x11_xkb_SetControls_ignoreLockRealMods_mask_Lock,
        &hf_x11_xkb_SetControls_ignoreLockRealMods_mask_Control,
        &hf_x11_xkb_SetControls_ignoreLockRealMods_mask_1,
        &hf_x11_xkb_SetControls_ignoreLockRealMods_mask_2,
        &hf_x11_xkb_SetControls_ignoreLockRealMods_mask_3,
        &hf_x11_xkb_SetControls_ignoreLockRealMods_mask_4,
        &hf_x11_xkb_SetControls_ignoreLockRealMods_mask_5,
        &hf_x11_xkb_SetControls_ignoreLockRealMods_mask_Any,
        NULL
        };
        proto_tree_add_bitmask(t,  tvb, *offsetp, hf_x11_xkb_SetControls_ignoreLockRealMods, ett_x11_rectangle, ignoreLockRealMods_bits, byte_order);
    }
    *offsetp += 1;
    {
        static int* const affectInternalVirtualMods_bits [] = {
        &hf_x11_xkb_SetControls_affectInternalVirtualMods_mask_0,
        &hf_x11_xkb_SetControls_affectInternalVirtualMods_mask_1,
        &hf_x11_xkb_SetControls_affectInternalVirtualMods_mask_2,
        &hf_x11_xkb_SetControls_affectInternalVirtualMods_mask_3,
        &hf_x11_xkb_SetControls_affectInternalVirtualMods_mask_4,
        &hf_x11_xkb_SetControls_affectInternalVirtualMods_mask_5,
        &hf_x11_xkb_SetControls_affectInternalVirtualMods_mask_6,
        &hf_x11_xkb_SetControls_affectInternalVirtualMods_mask_7,
        &hf_x11_xkb_SetControls_affectInternalVirtualMods_mask_8,
        &hf_x11_xkb_SetControls_affectInternalVirtualMods_mask_9,
        &hf_x11_xkb_SetControls_affectInternalVirtualMods_mask_10,
        &hf_x11_xkb_SetControls_affectInternalVirtualMods_mask_11,
        &hf_x11_xkb_SetControls_affectInternalVirtualMods_mask_12,
        &hf_x11_xkb_SetControls_affectInternalVirtualMods_mask_13,
        &hf_x11_xkb_SetControls_affectInternalVirtualMods_mask_14,
        &hf_x11_xkb_SetControls_affectInternalVirtualMods_mask_15,
        NULL
        };
        proto_tree_add_bitmask(t,  tvb, *offsetp, hf_x11_xkb_SetControls_affectInternalVirtualMods, ett_x11_rectangle, affectInternalVirtualMods_bits, byte_order);
    }
    *offsetp += 2;
    {
        static int* const internalVirtualMods_bits [] = {
        &hf_x11_xkb_SetControls_internalVirtualMods_mask_0,
        &hf_x11_xkb_SetControls_internalVirtualMods_mask_1,
        &hf_x11_xkb_SetControls_internalVirtualMods_mask_2,
        &hf_x11_xkb_SetControls_internalVirtualMods_mask_3,
        &hf_x11_xkb_SetControls_internalVirtualMods_mask_4,
        &hf_x11_xkb_SetControls_internalVirtualMods_mask_5,
        &hf_x11_xkb_SetControls_internalVirtualMods_mask_6,
        &hf_x11_xkb_SetControls_internalVirtualMods_mask_7,
        &hf_x11_xkb_SetControls_internalVirtualMods_mask_8,
        &hf_x11_xkb_SetControls_internalVirtualMods_mask_9,
        &hf_x11_xkb_SetControls_internalVirtualMods_mask_10,
        &hf_x11_xkb_SetControls_internalVirtualMods_mask_11,
        &hf_x11_xkb_SetControls_internalVirtualMods_mask_12,
        &hf_x11_xkb_SetControls_internalVirtualMods_mask_13,
        &hf_x11_xkb_SetControls_internalVirtualMods_mask_14,
        &hf_x11_xkb_SetControls_internalVirtualMods_mask_15,
        NULL
        };
        proto_tree_add_bitmask(t,  tvb, *offsetp, hf_x11_xkb_SetControls_internalVirtualMods, ett_x11_rectangle, internalVirtualMods_bits, byte_order);
    }
    *offsetp += 2;
    {
        static int* const affectIgnoreLockVirtualMods_bits [] = {
        &hf_x11_xkb_SetControls_affectIgnoreLockVirtualMods_mask_0,
        &hf_x11_xkb_SetControls_affectIgnoreLockVirtualMods_mask_1,
        &hf_x11_xkb_SetControls_affectIgnoreLockVirtualMods_mask_2,
        &hf_x11_xkb_SetControls_affectIgnoreLockVirtualMods_mask_3,
        &hf_x11_xkb_SetControls_affectIgnoreLockVirtualMods_mask_4,
        &hf_x11_xkb_SetControls_affectIgnoreLockVirtualMods_mask_5,
        &hf_x11_xkb_SetControls_affectIgnoreLockVirtualMods_mask_6,
        &hf_x11_xkb_SetControls_affectIgnoreLockVirtualMods_mask_7,
        &hf_x11_xkb_SetControls_affectIgnoreLockVirtualMods_mask_8,
        &hf_x11_xkb_SetControls_affectIgnoreLockVirtualMods_mask_9,
        &hf_x11_xkb_SetControls_affectIgnoreLockVirtualMods_mask_10,
        &hf_x11_xkb_SetControls_affectIgnoreLockVirtualMods_mask_11,
        &hf_x11_xkb_SetControls_affectIgnoreLockVirtualMods_mask_12,
        &hf_x11_xkb_SetControls_affectIgnoreLockVirtualMods_mask_13,
        &hf_x11_xkb_SetControls_affectIgnoreLockVirtualMods_mask_14,
        &hf_x11_xkb_SetControls_affectIgnoreLockVirtualMods_mask_15,
        NULL
        };
        proto_tree_add_bitmask(t,  tvb, *offsetp, hf_x11_xkb_SetControls_affectIgnoreLockVirtualMods, ett_x11_rectangle, affectIgnoreLockVirtualMods_bits, byte_order);
    }
    *offsetp += 2;
    {
        static int* const ignoreLockVirtualMods_bits [] = {
        &hf_x11_xkb_SetControls_ignoreLockVirtualMods_mask_0,
        &hf_x11_xkb_SetControls_ignoreLockVirtualMods_mask_1,
        &hf_x11_xkb_SetControls_ignoreLockVirtualMods_mask_2,
        &hf_x11_xkb_SetControls_ignoreLockVirtualMods_mask_3,
        &hf_x11_xkb_SetControls_ignoreLockVirtualMods_mask_4,
        &hf_x11_xkb_SetControls_ignoreLockVirtualMods_mask_5,
        &hf_x11_xkb_SetControls_ignoreLockVirtualMods_mask_6,
        &hf_x11_xkb_SetControls_ignoreLockVirtualMods_mask_7,
        &hf_x11_xkb_SetControls_ignoreLockVirtualMods_mask_8,
        &hf_x11_xkb_SetControls_ignoreLockVirtualMods_mask_9,
        &hf_x11_xkb_SetControls_ignoreLockVirtualMods_mask_10,
        &hf_x11_xkb_SetControls_ignoreLockVirtualMods_mask_11,
        &hf_x11_xkb_SetControls_ignoreLockVirtualMods_mask_12,
        &hf_x11_xkb_SetControls_ignoreLockVirtualMods_mask_13,
        &hf_x11_xkb_SetControls_ignoreLockVirtualMods_mask_14,
        &hf_x11_xkb_SetControls_ignoreLockVirtualMods_mask_15,
        NULL
        };
        proto_tree_add_bitmask(t,  tvb, *offsetp, hf_x11_xkb_SetControls_ignoreLockVirtualMods, ett_x11_rectangle, ignoreLockVirtualMods_bits, byte_order);
    }
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_xkb_SetControls_mouseKeysDfltBtn, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_xkb_SetControls_groupsWrap, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    {
        static int* const accessXOptions_bits [] = {
        &hf_x11_xkb_SetControls_accessXOptions_mask_SKPressFB,
        &hf_x11_xkb_SetControls_accessXOptions_mask_SKAcceptFB,
        &hf_x11_xkb_SetControls_accessXOptions_mask_FeatureFB,
        &hf_x11_xkb_SetControls_accessXOptions_mask_SlowWarnFB,
        &hf_x11_xkb_SetControls_accessXOptions_mask_IndicatorFB,
        &hf_x11_xkb_SetControls_accessXOptions_mask_StickyKeysFB,
        &hf_x11_xkb_SetControls_accessXOptions_mask_TwoKeys,
        &hf_x11_xkb_SetControls_accessXOptions_mask_LatchToLock,
        &hf_x11_xkb_SetControls_accessXOptions_mask_SKReleaseFB,
        &hf_x11_xkb_SetControls_accessXOptions_mask_SKRejectFB,
        &hf_x11_xkb_SetControls_accessXOptions_mask_BKRejectFB,
        &hf_x11_xkb_SetControls_accessXOptions_mask_DumbBell,
        NULL
        };
        proto_tree_add_bitmask(t,  tvb, *offsetp, hf_x11_xkb_SetControls_accessXOptions, ett_x11_rectangle, accessXOptions_bits, byte_order);
    }
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 2, ENC_NA);
    *offsetp += 2;
    {
        static int* const affectEnabledControls_bits [] = {
        &hf_x11_xkb_SetControls_affectEnabledControls_mask_RepeatKeys,
        &hf_x11_xkb_SetControls_affectEnabledControls_mask_SlowKeys,
        &hf_x11_xkb_SetControls_affectEnabledControls_mask_BounceKeys,
        &hf_x11_xkb_SetControls_affectEnabledControls_mask_StickyKeys,
        &hf_x11_xkb_SetControls_affectEnabledControls_mask_MouseKeys,
        &hf_x11_xkb_SetControls_affectEnabledControls_mask_MouseKeysAccel,
        &hf_x11_xkb_SetControls_affectEnabledControls_mask_AccessXKeys,
        &hf_x11_xkb_SetControls_affectEnabledControls_mask_AccessXTimeoutMask,
        &hf_x11_xkb_SetControls_affectEnabledControls_mask_AccessXFeedbackMask,
        &hf_x11_xkb_SetControls_affectEnabledControls_mask_AudibleBellMask,
        &hf_x11_xkb_SetControls_affectEnabledControls_mask_Overlay1Mask,
        &hf_x11_xkb_SetControls_affectEnabledControls_mask_Overlay2Mask,
        &hf_x11_xkb_SetControls_affectEnabledControls_mask_IgnoreGroupLockMask,
        NULL
        };
        proto_tree_add_bitmask(t,  tvb, *offsetp, hf_x11_xkb_SetControls_affectEnabledControls, ett_x11_rectangle, affectEnabledControls_bits, byte_order);
    }
    *offsetp += 4;
    {
        static int* const enabledControls_bits [] = {
        &hf_x11_xkb_SetControls_enabledControls_mask_RepeatKeys,
        &hf_x11_xkb_SetControls_enabledControls_mask_SlowKeys,
        &hf_x11_xkb_SetControls_enabledControls_mask_BounceKeys,
        &hf_x11_xkb_SetControls_enabledControls_mask_StickyKeys,
        &hf_x11_xkb_SetControls_enabledControls_mask_MouseKeys,
        &hf_x11_xkb_SetControls_enabledControls_mask_MouseKeysAccel,
        &hf_x11_xkb_SetControls_enabledControls_mask_AccessXKeys,
        &hf_x11_xkb_SetControls_enabledControls_mask_AccessXTimeoutMask,
        &hf_x11_xkb_SetControls_enabledControls_mask_AccessXFeedbackMask,
        &hf_x11_xkb_SetControls_enabledControls_mask_AudibleBellMask,
        &hf_x11_xkb_SetControls_enabledControls_mask_Overlay1Mask,
        &hf_x11_xkb_SetControls_enabledControls_mask_Overlay2Mask,
        &hf_x11_xkb_SetControls_enabledControls_mask_IgnoreGroupLockMask,
        NULL
        };
        proto_tree_add_bitmask(t,  tvb, *offsetp, hf_x11_xkb_SetControls_enabledControls, ett_x11_rectangle, enabledControls_bits, byte_order);
    }
    *offsetp += 4;
    {
        static int* const changeControls_bits [] = {
        &hf_x11_xkb_SetControls_changeControls_mask_GroupsWrap,
        &hf_x11_xkb_SetControls_changeControls_mask_InternalMods,
        &hf_x11_xkb_SetControls_changeControls_mask_IgnoreLockMods,
        &hf_x11_xkb_SetControls_changeControls_mask_PerKeyRepeat,
        &hf_x11_xkb_SetControls_changeControls_mask_ControlsEnabled,
        NULL
        };
        proto_tree_add_bitmask(t,  tvb, *offsetp, hf_x11_xkb_SetControls_changeControls, ett_x11_rectangle, changeControls_bits, byte_order);
    }
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xkb_SetControls_repeatDelay, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_xkb_SetControls_repeatInterval, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_xkb_SetControls_slowKeysDelay, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_xkb_SetControls_debounceDelay, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_xkb_SetControls_mouseKeysDelay, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_xkb_SetControls_mouseKeysInterval, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_xkb_SetControls_mouseKeysTimeToMax, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_xkb_SetControls_mouseKeysMaxSpeed, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_xkb_SetControls_mouseKeysCurve, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_xkb_SetControls_accessXTimeout, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    {
        static int* const accessXTimeoutMask_bits [] = {
        &hf_x11_xkb_SetControls_accessXTimeoutMask_mask_RepeatKeys,
        &hf_x11_xkb_SetControls_accessXTimeoutMask_mask_SlowKeys,
        &hf_x11_xkb_SetControls_accessXTimeoutMask_mask_BounceKeys,
        &hf_x11_xkb_SetControls_accessXTimeoutMask_mask_StickyKeys,
        &hf_x11_xkb_SetControls_accessXTimeoutMask_mask_MouseKeys,
        &hf_x11_xkb_SetControls_accessXTimeoutMask_mask_MouseKeysAccel,
        &hf_x11_xkb_SetControls_accessXTimeoutMask_mask_AccessXKeys,
        &hf_x11_xkb_SetControls_accessXTimeoutMask_mask_AccessXTimeoutMask,
        &hf_x11_xkb_SetControls_accessXTimeoutMask_mask_AccessXFeedbackMask,
        &hf_x11_xkb_SetControls_accessXTimeoutMask_mask_AudibleBellMask,
        &hf_x11_xkb_SetControls_accessXTimeoutMask_mask_Overlay1Mask,
        &hf_x11_xkb_SetControls_accessXTimeoutMask_mask_Overlay2Mask,
        &hf_x11_xkb_SetControls_accessXTimeoutMask_mask_IgnoreGroupLockMask,
        NULL
        };
        proto_tree_add_bitmask(t,  tvb, *offsetp, hf_x11_xkb_SetControls_accessXTimeoutMask, ett_x11_rectangle, accessXTimeoutMask_bits, byte_order);
    }
    *offsetp += 4;
    {
        static int* const accessXTimeoutValues_bits [] = {
        &hf_x11_xkb_SetControls_accessXTimeoutValues_mask_RepeatKeys,
        &hf_x11_xkb_SetControls_accessXTimeoutValues_mask_SlowKeys,
        &hf_x11_xkb_SetControls_accessXTimeoutValues_mask_BounceKeys,
        &hf_x11_xkb_SetControls_accessXTimeoutValues_mask_StickyKeys,
        &hf_x11_xkb_SetControls_accessXTimeoutValues_mask_MouseKeys,
        &hf_x11_xkb_SetControls_accessXTimeoutValues_mask_MouseKeysAccel,
        &hf_x11_xkb_SetControls_accessXTimeoutValues_mask_AccessXKeys,
        &hf_x11_xkb_SetControls_accessXTimeoutValues_mask_AccessXTimeoutMask,
        &hf_x11_xkb_SetControls_accessXTimeoutValues_mask_AccessXFeedbackMask,
        &hf_x11_xkb_SetControls_accessXTimeoutValues_mask_AudibleBellMask,
        &hf_x11_xkb_SetControls_accessXTimeoutValues_mask_Overlay1Mask,
        &hf_x11_xkb_SetControls_accessXTimeoutValues_mask_Overlay2Mask,
        &hf_x11_xkb_SetControls_accessXTimeoutValues_mask_IgnoreGroupLockMask,
        NULL
        };
        proto_tree_add_bitmask(t,  tvb, *offsetp, hf_x11_xkb_SetControls_accessXTimeoutValues, ett_x11_rectangle, accessXTimeoutValues_bits, byte_order);
    }
    *offsetp += 4;
    {
        static int* const accessXTimeoutOptionsMask_bits [] = {
        &hf_x11_xkb_SetControls_accessXTimeoutOptionsMask_mask_SKPressFB,
        &hf_x11_xkb_SetControls_accessXTimeoutOptionsMask_mask_SKAcceptFB,
        &hf_x11_xkb_SetControls_accessXTimeoutOptionsMask_mask_FeatureFB,
        &hf_x11_xkb_SetControls_accessXTimeoutOptionsMask_mask_SlowWarnFB,
        &hf_x11_xkb_SetControls_accessXTimeoutOptionsMask_mask_IndicatorFB,
        &hf_x11_xkb_SetControls_accessXTimeoutOptionsMask_mask_StickyKeysFB,
        &hf_x11_xkb_SetControls_accessXTimeoutOptionsMask_mask_TwoKeys,
        &hf_x11_xkb_SetControls_accessXTimeoutOptionsMask_mask_LatchToLock,
        &hf_x11_xkb_SetControls_accessXTimeoutOptionsMask_mask_SKReleaseFB,
        &hf_x11_xkb_SetControls_accessXTimeoutOptionsMask_mask_SKRejectFB,
        &hf_x11_xkb_SetControls_accessXTimeoutOptionsMask_mask_BKRejectFB,
        &hf_x11_xkb_SetControls_accessXTimeoutOptionsMask_mask_DumbBell,
        NULL
        };
        proto_tree_add_bitmask(t,  tvb, *offsetp, hf_x11_xkb_SetControls_accessXTimeoutOptionsMask, ett_x11_rectangle, accessXTimeoutOptionsMask_bits, byte_order);
    }
    *offsetp += 2;
    {
        static int* const accessXTimeoutOptionsValues_bits [] = {
        &hf_x11_xkb_SetControls_accessXTimeoutOptionsValues_mask_SKPressFB,
        &hf_x11_xkb_SetControls_accessXTimeoutOptionsValues_mask_SKAcceptFB,
        &hf_x11_xkb_SetControls_accessXTimeoutOptionsValues_mask_FeatureFB,
        &hf_x11_xkb_SetControls_accessXTimeoutOptionsValues_mask_SlowWarnFB,
        &hf_x11_xkb_SetControls_accessXTimeoutOptionsValues_mask_IndicatorFB,
        &hf_x11_xkb_SetControls_accessXTimeoutOptionsValues_mask_StickyKeysFB,
        &hf_x11_xkb_SetControls_accessXTimeoutOptionsValues_mask_TwoKeys,
        &hf_x11_xkb_SetControls_accessXTimeoutOptionsValues_mask_LatchToLock,
        &hf_x11_xkb_SetControls_accessXTimeoutOptionsValues_mask_SKReleaseFB,
        &hf_x11_xkb_SetControls_accessXTimeoutOptionsValues_mask_SKRejectFB,
        &hf_x11_xkb_SetControls_accessXTimeoutOptionsValues_mask_BKRejectFB,
        &hf_x11_xkb_SetControls_accessXTimeoutOptionsValues_mask_DumbBell,
        NULL
        };
        proto_tree_add_bitmask(t,  tvb, *offsetp, hf_x11_xkb_SetControls_accessXTimeoutOptionsValues, ett_x11_rectangle, accessXTimeoutOptionsValues_bits, byte_order);
    }
    *offsetp += 2;
    listOfByte(tvb, offsetp, t, hf_x11_xkb_SetControls_perKeyRepeat, 32, byte_order);
    length -= 32 * 1;
}

static void xkbGetMap(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_xkb_GetMap_deviceSpec, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    {
        static int* const full_bits [] = {
        &hf_x11_xkb_GetMap_full_mask_KeyTypes,
        &hf_x11_xkb_GetMap_full_mask_KeySyms,
        &hf_x11_xkb_GetMap_full_mask_ModifierMap,
        &hf_x11_xkb_GetMap_full_mask_ExplicitComponents,
        &hf_x11_xkb_GetMap_full_mask_KeyActions,
        &hf_x11_xkb_GetMap_full_mask_KeyBehaviors,
        &hf_x11_xkb_GetMap_full_mask_VirtualMods,
        &hf_x11_xkb_GetMap_full_mask_VirtualModMap,
        NULL
        };
        proto_tree_add_bitmask(t,  tvb, *offsetp, hf_x11_xkb_GetMap_full, ett_x11_rectangle, full_bits, byte_order);
    }
    *offsetp += 2;
    {
        static int* const partial_bits [] = {
        &hf_x11_xkb_GetMap_partial_mask_KeyTypes,
        &hf_x11_xkb_GetMap_partial_mask_KeySyms,
        &hf_x11_xkb_GetMap_partial_mask_ModifierMap,
        &hf_x11_xkb_GetMap_partial_mask_ExplicitComponents,
        &hf_x11_xkb_GetMap_partial_mask_KeyActions,
        &hf_x11_xkb_GetMap_partial_mask_KeyBehaviors,
        &hf_x11_xkb_GetMap_partial_mask_VirtualMods,
        &hf_x11_xkb_GetMap_partial_mask_VirtualModMap,
        NULL
        };
        proto_tree_add_bitmask(t,  tvb, *offsetp, hf_x11_xkb_GetMap_partial, ett_x11_rectangle, partial_bits, byte_order);
    }
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_xkb_GetMap_firstType, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_xkb_GetMap_nTypes, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_xkb_GetMap_firstKeySym, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_xkb_GetMap_nKeySyms, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_xkb_GetMap_firstKeyAction, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_xkb_GetMap_nKeyActions, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_xkb_GetMap_firstKeyBehavior, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_xkb_GetMap_nKeyBehaviors, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    {
        static int* const virtualMods_bits [] = {
        &hf_x11_xkb_GetMap_virtualMods_mask_0,
        &hf_x11_xkb_GetMap_virtualMods_mask_1,
        &hf_x11_xkb_GetMap_virtualMods_mask_2,
        &hf_x11_xkb_GetMap_virtualMods_mask_3,
        &hf_x11_xkb_GetMap_virtualMods_mask_4,
        &hf_x11_xkb_GetMap_virtualMods_mask_5,
        &hf_x11_xkb_GetMap_virtualMods_mask_6,
        &hf_x11_xkb_GetMap_virtualMods_mask_7,
        &hf_x11_xkb_GetMap_virtualMods_mask_8,
        &hf_x11_xkb_GetMap_virtualMods_mask_9,
        &hf_x11_xkb_GetMap_virtualMods_mask_10,
        &hf_x11_xkb_GetMap_virtualMods_mask_11,
        &hf_x11_xkb_GetMap_virtualMods_mask_12,
        &hf_x11_xkb_GetMap_virtualMods_mask_13,
        &hf_x11_xkb_GetMap_virtualMods_mask_14,
        &hf_x11_xkb_GetMap_virtualMods_mask_15,
        NULL
        };
        proto_tree_add_bitmask(t,  tvb, *offsetp, hf_x11_xkb_GetMap_virtualMods, ett_x11_rectangle, virtualMods_bits, byte_order);
    }
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_xkb_GetMap_firstKeyExplicit, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_xkb_GetMap_nKeyExplicit, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_xkb_GetMap_firstModMapKey, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_xkb_GetMap_nModMapKeys, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_xkb_GetMap_firstVModMapKey, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_xkb_GetMap_nVModMapKeys, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 2, ENC_NA);
    *offsetp += 2;
}
static void xkbGetMap_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;
    int f_present;
    int f_nTypes;
    int f_nKeySyms;
    int f_totalActions;
    int f_nKeyActions;
    int f_totalKeyBehaviors;
    int f_totalKeyExplicit;
    int f_totalModMapKeys;
    int f_totalVModMapKeys;
    int f_virtualMods;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-GetMap");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_xkb_GetMap_reply_deviceID, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (xkb-GetMap)", sequence_number);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 2, ENC_NA);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_xkb_GetMap_reply_minKeyCode, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_xkb_GetMap_reply_maxKeyCode, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    f_present = tvb_get_uint16(tvb, *offsetp, byte_order);
    {
        static int* const present_bits [] = {
        &hf_x11_xkb_GetMap_reply_present_mask_KeyTypes,
        &hf_x11_xkb_GetMap_reply_present_mask_KeySyms,
        &hf_x11_xkb_GetMap_reply_present_mask_ModifierMap,
        &hf_x11_xkb_GetMap_reply_present_mask_ExplicitComponents,
        &hf_x11_xkb_GetMap_reply_present_mask_KeyActions,
        &hf_x11_xkb_GetMap_reply_present_mask_KeyBehaviors,
        &hf_x11_xkb_GetMap_reply_present_mask_VirtualMods,
        &hf_x11_xkb_GetMap_reply_present_mask_VirtualModMap,
        NULL
        };
        proto_tree_add_bitmask(t,  tvb, *offsetp, hf_x11_xkb_GetMap_reply_present, ett_x11_rectangle, present_bits, byte_order);
    }
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_xkb_GetMap_reply_firstType, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    f_nTypes = tvb_get_uint8(tvb, *offsetp);
    proto_tree_add_item(t, hf_x11_xkb_GetMap_reply_nTypes, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_xkb_GetMap_reply_totalTypes, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_xkb_GetMap_reply_firstKeySym, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_xkb_GetMap_reply_totalSyms, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    f_nKeySyms = tvb_get_uint8(tvb, *offsetp);
    proto_tree_add_item(t, hf_x11_xkb_GetMap_reply_nKeySyms, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_xkb_GetMap_reply_firstKeyAction, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    f_totalActions = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_xkb_GetMap_reply_totalActions, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    f_nKeyActions = tvb_get_uint8(tvb, *offsetp);
    proto_tree_add_item(t, hf_x11_xkb_GetMap_reply_nKeyActions, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_xkb_GetMap_reply_firstKeyBehavior, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_xkb_GetMap_reply_nKeyBehaviors, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    f_totalKeyBehaviors = tvb_get_uint8(tvb, *offsetp);
    proto_tree_add_item(t, hf_x11_xkb_GetMap_reply_totalKeyBehaviors, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_xkb_GetMap_reply_firstKeyExplicit, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_xkb_GetMap_reply_nKeyExplicit, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    f_totalKeyExplicit = tvb_get_uint8(tvb, *offsetp);
    proto_tree_add_item(t, hf_x11_xkb_GetMap_reply_totalKeyExplicit, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_xkb_GetMap_reply_firstModMapKey, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_xkb_GetMap_reply_nModMapKeys, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    f_totalModMapKeys = tvb_get_uint8(tvb, *offsetp);
    proto_tree_add_item(t, hf_x11_xkb_GetMap_reply_totalModMapKeys, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_xkb_GetMap_reply_firstVModMapKey, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_xkb_GetMap_reply_nVModMapKeys, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    f_totalVModMapKeys = tvb_get_uint8(tvb, *offsetp);
    proto_tree_add_item(t, hf_x11_xkb_GetMap_reply_totalVModMapKeys, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    f_virtualMods = tvb_get_uint16(tvb, *offsetp, byte_order);
    {
        static int* const virtualMods_bits [] = {
        &hf_x11_xkb_GetMap_reply_virtualMods_mask_0,
        &hf_x11_xkb_GetMap_reply_virtualMods_mask_1,
        &hf_x11_xkb_GetMap_reply_virtualMods_mask_2,
        &hf_x11_xkb_GetMap_reply_virtualMods_mask_3,
        &hf_x11_xkb_GetMap_reply_virtualMods_mask_4,
        &hf_x11_xkb_GetMap_reply_virtualMods_mask_5,
        &hf_x11_xkb_GetMap_reply_virtualMods_mask_6,
        &hf_x11_xkb_GetMap_reply_virtualMods_mask_7,
        &hf_x11_xkb_GetMap_reply_virtualMods_mask_8,
        &hf_x11_xkb_GetMap_reply_virtualMods_mask_9,
        &hf_x11_xkb_GetMap_reply_virtualMods_mask_10,
        &hf_x11_xkb_GetMap_reply_virtualMods_mask_11,
        &hf_x11_xkb_GetMap_reply_virtualMods_mask_12,
        &hf_x11_xkb_GetMap_reply_virtualMods_mask_13,
        &hf_x11_xkb_GetMap_reply_virtualMods_mask_14,
        &hf_x11_xkb_GetMap_reply_virtualMods_mask_15,
        NULL
        };
        proto_tree_add_bitmask(t,  tvb, *offsetp, hf_x11_xkb_GetMap_reply_virtualMods, ett_x11_rectangle, virtualMods_bits, byte_order);
    }
    *offsetp += 2;
    if (f_present & (1U << 0)) {
        struct_xkb_KeyType(tvb, offsetp, t, byte_order, f_nTypes);
    }
    if (f_present & (1U << 1)) {
        struct_xkb_KeySymMap(tvb, offsetp, t, byte_order, f_nKeySyms);
    }
    if (f_present & (1U << 4)) {
        listOfByte(tvb, offsetp, t, hf_x11_xkb_GetMap_reply_KeyActions_acts_rtrn_count, f_nKeyActions, byte_order);
        if (*offsetp % 4) {
            proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, (4 - *offsetp % 4), ENC_NA);
            *offsetp += (4 - *offsetp % 4);
        }
        struct_xkb_Action(tvb, offsetp, t, byte_order, f_totalActions);
    }
    if (f_present & (1U << 5)) {
        struct_xkb_SetBehavior(tvb, offsetp, t, byte_order, f_totalKeyBehaviors);
    }
    if (f_present & (1U << 6)) {
        listOfByte(tvb, offsetp, t, hf_x11_xkb_GetMap_reply_VirtualMods_vmods_rtrn, ws_count_ones(f_virtualMods), byte_order);
        if (*offsetp % 4) {
            proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, (4 - *offsetp % 4), ENC_NA);
            *offsetp += (4 - *offsetp % 4);
        }
    }
    if (f_present & (1U << 3)) {
        struct_xkb_SetExplicit(tvb, offsetp, t, byte_order, f_totalKeyExplicit);
        if (*offsetp % 4) {
            proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, (4 - *offsetp % 4), ENC_NA);
            *offsetp += (4 - *offsetp % 4);
        }
    }
    if (f_present & (1U << 2)) {
        struct_xkb_KeyModMap(tvb, offsetp, t, byte_order, f_totalModMapKeys);
        if (*offsetp % 4) {
            proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, (4 - *offsetp % 4), ENC_NA);
            *offsetp += (4 - *offsetp % 4);
        }
    }
    if (f_present & (1U << 7)) {
        struct_xkb_KeyVModMap(tvb, offsetp, t, byte_order, f_totalVModMapKeys);
    }
}

static void xkbSetMap(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    int f_present;
    int f_nTypes;
    int f_nKeySyms;
    int f_nKeyActions;
    int f_totalActions;
    int f_totalKeyBehaviors;
    int f_totalKeyExplicit;
    int f_totalModMapKeys;
    int f_totalVModMapKeys;
    int f_virtualMods;
    proto_tree_add_item(t, hf_x11_xkb_SetMap_deviceSpec, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    f_present = tvb_get_uint16(tvb, *offsetp, byte_order);
    {
        static int* const present_bits [] = {
        &hf_x11_xkb_SetMap_present_mask_KeyTypes,
        &hf_x11_xkb_SetMap_present_mask_KeySyms,
        &hf_x11_xkb_SetMap_present_mask_ModifierMap,
        &hf_x11_xkb_SetMap_present_mask_ExplicitComponents,
        &hf_x11_xkb_SetMap_present_mask_KeyActions,
        &hf_x11_xkb_SetMap_present_mask_KeyBehaviors,
        &hf_x11_xkb_SetMap_present_mask_VirtualMods,
        &hf_x11_xkb_SetMap_present_mask_VirtualModMap,
        NULL
        };
        proto_tree_add_bitmask(t,  tvb, *offsetp, hf_x11_xkb_SetMap_present, ett_x11_rectangle, present_bits, byte_order);
    }
    *offsetp += 2;
    {
        static int* const flags_bits [] = {
        &hf_x11_xkb_SetMap_flags_mask_ResizeTypes,
        &hf_x11_xkb_SetMap_flags_mask_RecomputeActions,
        NULL
        };
        proto_tree_add_bitmask(t,  tvb, *offsetp, hf_x11_xkb_SetMap_flags, ett_x11_rectangle, flags_bits, byte_order);
    }
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_xkb_SetMap_minKeyCode, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_xkb_SetMap_maxKeyCode, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_xkb_SetMap_firstType, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    f_nTypes = tvb_get_uint8(tvb, *offsetp);
    proto_tree_add_item(t, hf_x11_xkb_SetMap_nTypes, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_xkb_SetMap_firstKeySym, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    f_nKeySyms = tvb_get_uint8(tvb, *offsetp);
    proto_tree_add_item(t, hf_x11_xkb_SetMap_nKeySyms, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_xkb_SetMap_totalSyms, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_xkb_SetMap_firstKeyAction, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    f_nKeyActions = tvb_get_uint8(tvb, *offsetp);
    proto_tree_add_item(t, hf_x11_xkb_SetMap_nKeyActions, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    f_totalActions = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_xkb_SetMap_totalActions, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_xkb_SetMap_firstKeyBehavior, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_xkb_SetMap_nKeyBehaviors, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    f_totalKeyBehaviors = tvb_get_uint8(tvb, *offsetp);
    proto_tree_add_item(t, hf_x11_xkb_SetMap_totalKeyBehaviors, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_xkb_SetMap_firstKeyExplicit, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_xkb_SetMap_nKeyExplicit, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    f_totalKeyExplicit = tvb_get_uint8(tvb, *offsetp);
    proto_tree_add_item(t, hf_x11_xkb_SetMap_totalKeyExplicit, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_xkb_SetMap_firstModMapKey, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_xkb_SetMap_nModMapKeys, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    f_totalModMapKeys = tvb_get_uint8(tvb, *offsetp);
    proto_tree_add_item(t, hf_x11_xkb_SetMap_totalModMapKeys, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_xkb_SetMap_firstVModMapKey, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_xkb_SetMap_nVModMapKeys, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    f_totalVModMapKeys = tvb_get_uint8(tvb, *offsetp);
    proto_tree_add_item(t, hf_x11_xkb_SetMap_totalVModMapKeys, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    f_virtualMods = tvb_get_uint16(tvb, *offsetp, byte_order);
    {
        static int* const virtualMods_bits [] = {
        &hf_x11_xkb_SetMap_virtualMods_mask_0,
        &hf_x11_xkb_SetMap_virtualMods_mask_1,
        &hf_x11_xkb_SetMap_virtualMods_mask_2,
        &hf_x11_xkb_SetMap_virtualMods_mask_3,
        &hf_x11_xkb_SetMap_virtualMods_mask_4,
        &hf_x11_xkb_SetMap_virtualMods_mask_5,
        &hf_x11_xkb_SetMap_virtualMods_mask_6,
        &hf_x11_xkb_SetMap_virtualMods_mask_7,
        &hf_x11_xkb_SetMap_virtualMods_mask_8,
        &hf_x11_xkb_SetMap_virtualMods_mask_9,
        &hf_x11_xkb_SetMap_virtualMods_mask_10,
        &hf_x11_xkb_SetMap_virtualMods_mask_11,
        &hf_x11_xkb_SetMap_virtualMods_mask_12,
        &hf_x11_xkb_SetMap_virtualMods_mask_13,
        &hf_x11_xkb_SetMap_virtualMods_mask_14,
        &hf_x11_xkb_SetMap_virtualMods_mask_15,
        NULL
        };
        proto_tree_add_bitmask(t,  tvb, *offsetp, hf_x11_xkb_SetMap_virtualMods, ett_x11_rectangle, virtualMods_bits, byte_order);
    }
    *offsetp += 2;
    if (f_present & (1U << 0)) {
        struct_xkb_SetKeyType(tvb, offsetp, t, byte_order, f_nTypes);
        length -= f_nTypes * 0;
    }
    if (f_present & (1U << 1)) {
        struct_xkb_KeySymMap(tvb, offsetp, t, byte_order, f_nKeySyms);
        length -= f_nKeySyms * 0;
    }
    if (f_present & (1U << 4)) {
        listOfByte(tvb, offsetp, t, hf_x11_xkb_SetMap_KeyActions_actionsCount, f_nKeyActions, byte_order);
        length -= f_nKeyActions * 1;
        if (*offsetp % 4) {
            proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, (4 - *offsetp % 4), ENC_NA);
            *offsetp += (4 - *offsetp % 4);
        }
        length = ((length + 3) & ~3);
        struct_xkb_Action(tvb, offsetp, t, byte_order, f_totalActions);
        length -= f_totalActions * 8;
    }
    if (f_present & (1U << 5)) {
        struct_xkb_SetBehavior(tvb, offsetp, t, byte_order, f_totalKeyBehaviors);
        length -= f_totalKeyBehaviors * 4;
    }
    if (f_present & (1U << 6)) {
        listOfByte(tvb, offsetp, t, hf_x11_xkb_SetMap_VirtualMods_vmods, ws_count_ones(f_virtualMods), byte_order);
        length -= ws_count_ones(f_virtualMods) * 1;
        if (*offsetp % 4) {
            proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, (4 - *offsetp % 4), ENC_NA);
            *offsetp += (4 - *offsetp % 4);
        }
        length = ((length + 3) & ~3);
    }
    if (f_present & (1U << 3)) {
        struct_xkb_SetExplicit(tvb, offsetp, t, byte_order, f_totalKeyExplicit);
        length -= f_totalKeyExplicit * 2;
    }
    if (f_present & (1U << 2)) {
        struct_xkb_KeyModMap(tvb, offsetp, t, byte_order, f_totalModMapKeys);
        length -= f_totalModMapKeys * 2;
    }
    if (f_present & (1U << 7)) {
        struct_xkb_KeyVModMap(tvb, offsetp, t, byte_order, f_totalVModMapKeys);
        length -= f_totalVModMapKeys * 4;
    }
}

static void xkbGetCompatMap(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_xkb_GetCompatMap_deviceSpec, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    {
        static int* const groups_bits [] = {
        &hf_x11_xkb_GetCompatMap_groups_mask_Group1,
        &hf_x11_xkb_GetCompatMap_groups_mask_Group2,
        &hf_x11_xkb_GetCompatMap_groups_mask_Group3,
        &hf_x11_xkb_GetCompatMap_groups_mask_Group4,
        NULL
        };
        proto_tree_add_bitmask(t,  tvb, *offsetp, hf_x11_xkb_GetCompatMap_groups, ett_x11_rectangle, groups_bits, byte_order);
    }
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_xkb_GetCompatMap_getAllSI, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_xkb_GetCompatMap_firstSI, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_xkb_GetCompatMap_nSI, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
}
static void xkbGetCompatMap_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;
    int f_groupsRtrn;
    int f_nSIRtrn;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-GetCompatMap");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_xkb_GetCompatMap_reply_deviceID, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (xkb-GetCompatMap)", sequence_number);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    f_groupsRtrn = tvb_get_uint8(tvb, *offsetp);
    {
        static int* const groupsRtrn_bits [] = {
        &hf_x11_xkb_GetCompatMap_reply_groupsRtrn_mask_Group1,
        &hf_x11_xkb_GetCompatMap_reply_groupsRtrn_mask_Group2,
        &hf_x11_xkb_GetCompatMap_reply_groupsRtrn_mask_Group3,
        &hf_x11_xkb_GetCompatMap_reply_groupsRtrn_mask_Group4,
        NULL
        };
        proto_tree_add_bitmask(t,  tvb, *offsetp, hf_x11_xkb_GetCompatMap_reply_groupsRtrn, ett_x11_rectangle, groupsRtrn_bits, byte_order);
    }
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_xkb_GetCompatMap_reply_firstSIRtrn, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    f_nSIRtrn = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_xkb_GetCompatMap_reply_nSIRtrn, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_xkb_GetCompatMap_reply_nTotalSI, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 16, ENC_NA);
    *offsetp += 16;
    struct_xkb_SymInterpret(tvb, offsetp, t, byte_order, f_nSIRtrn);
    struct_xkb_ModDef(tvb, offsetp, t, byte_order, ws_count_ones(f_groupsRtrn));
}

static void xkbSetCompatMap(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    int f_groups;
    int f_nSI;
    proto_tree_add_item(t, hf_x11_xkb_SetCompatMap_deviceSpec, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_xkb_SetCompatMap_recomputeActions, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_xkb_SetCompatMap_truncateSI, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    f_groups = tvb_get_uint8(tvb, *offsetp);
    {
        static int* const groups_bits [] = {
        &hf_x11_xkb_SetCompatMap_groups_mask_Group1,
        &hf_x11_xkb_SetCompatMap_groups_mask_Group2,
        &hf_x11_xkb_SetCompatMap_groups_mask_Group3,
        &hf_x11_xkb_SetCompatMap_groups_mask_Group4,
        NULL
        };
        proto_tree_add_bitmask(t,  tvb, *offsetp, hf_x11_xkb_SetCompatMap_groups, ett_x11_rectangle, groups_bits, byte_order);
    }
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_xkb_SetCompatMap_firstSI, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    f_nSI = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_xkb_SetCompatMap_nSI, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 2, ENC_NA);
    *offsetp += 2;
    struct_xkb_SymInterpret(tvb, offsetp, t, byte_order, f_nSI);
    length -= f_nSI * 16;
    struct_xkb_ModDef(tvb, offsetp, t, byte_order, ws_count_ones(f_groups));
    length -= ws_count_ones(f_groups) * 4;
}

static void xkbGetIndicatorState(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_xkb_GetIndicatorState_deviceSpec, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 2, ENC_NA);
    *offsetp += 2;
}
static void xkbGetIndicatorState_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-GetIndicatorState");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_xkb_GetIndicatorState_reply_deviceID, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (xkb-GetIndicatorState)", sequence_number);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xkb_GetIndicatorState_reply_state, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 20, ENC_NA);
    *offsetp += 20;
}

static void xkbGetIndicatorMap(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_xkb_GetIndicatorMap_deviceSpec, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 2, ENC_NA);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_xkb_GetIndicatorMap_which, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}
static void xkbGetIndicatorMap_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;
    int f_which;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-GetIndicatorMap");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_xkb_GetIndicatorMap_reply_deviceID, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (xkb-GetIndicatorMap)", sequence_number);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    f_which = tvb_get_uint32(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_xkb_GetIndicatorMap_reply_which, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xkb_GetIndicatorMap_reply_realIndicators, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xkb_GetIndicatorMap_reply_nIndicators, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 15, ENC_NA);
    *offsetp += 15;
    struct_xkb_IndicatorMap(tvb, offsetp, t, byte_order, ws_count_ones(f_which));
}

static void xkbSetIndicatorMap(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    int f_which;
    proto_tree_add_item(t, hf_x11_xkb_SetIndicatorMap_deviceSpec, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 2, ENC_NA);
    *offsetp += 2;
    f_which = tvb_get_uint32(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_xkb_SetIndicatorMap_which, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    struct_xkb_IndicatorMap(tvb, offsetp, t, byte_order, ws_count_ones(f_which));
    length -= ws_count_ones(f_which) * 12;
}

static void xkbGetNamedIndicator(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_xkb_GetNamedIndicator_deviceSpec, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    field16(tvb, offsetp, t, hf_x11_xkb_GetNamedIndicator_ledClass, byte_order);
    field16(tvb, offsetp, t, hf_x11_xkb_GetNamedIndicator_ledID, byte_order);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 2, ENC_NA);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_xkb_GetNamedIndicator_indicator, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}
static void xkbGetNamedIndicator_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-GetNamedIndicator");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_xkb_GetNamedIndicator_reply_deviceID, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (xkb-GetNamedIndicator)", sequence_number);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xkb_GetNamedIndicator_reply_indicator, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xkb_GetNamedIndicator_reply_found, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_xkb_GetNamedIndicator_reply_on, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_xkb_GetNamedIndicator_reply_realIndicator, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_xkb_GetNamedIndicator_reply_ndx, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    {
        static int* const map_flags_bits [] = {
        &hf_x11_xkb_GetNamedIndicator_reply_map_flags_mask_LEDDrivesKB,
        &hf_x11_xkb_GetNamedIndicator_reply_map_flags_mask_NoAutomatic,
        &hf_x11_xkb_GetNamedIndicator_reply_map_flags_mask_NoExplicit,
        NULL
        };
        proto_tree_add_bitmask(t,  tvb, *offsetp, hf_x11_xkb_GetNamedIndicator_reply_map_flags, ett_x11_rectangle, map_flags_bits, byte_order);
    }
    *offsetp += 1;
    {
        static int* const map_whichGroups_bits [] = {
        &hf_x11_xkb_GetNamedIndicator_reply_map_whichGroups_mask_UseBase,
        &hf_x11_xkb_GetNamedIndicator_reply_map_whichGroups_mask_UseLatched,
        &hf_x11_xkb_GetNamedIndicator_reply_map_whichGroups_mask_UseLocked,
        &hf_x11_xkb_GetNamedIndicator_reply_map_whichGroups_mask_UseEffective,
        &hf_x11_xkb_GetNamedIndicator_reply_map_whichGroups_mask_UseCompat,
        NULL
        };
        proto_tree_add_bitmask(t,  tvb, *offsetp, hf_x11_xkb_GetNamedIndicator_reply_map_whichGroups, ett_x11_rectangle, map_whichGroups_bits, byte_order);
    }
    *offsetp += 1;
    {
        static int* const map_groups_bits [] = {
        &hf_x11_xkb_GetNamedIndicator_reply_map_groups_mask_Any,
        NULL
        };
        proto_tree_add_bitmask(t,  tvb, *offsetp, hf_x11_xkb_GetNamedIndicator_reply_map_groups, ett_x11_rectangle, map_groups_bits, byte_order);
    }
    *offsetp += 1;
    {
        static int* const map_whichMods_bits [] = {
        &hf_x11_xkb_GetNamedIndicator_reply_map_whichMods_mask_UseBase,
        &hf_x11_xkb_GetNamedIndicator_reply_map_whichMods_mask_UseLatched,
        &hf_x11_xkb_GetNamedIndicator_reply_map_whichMods_mask_UseLocked,
        &hf_x11_xkb_GetNamedIndicator_reply_map_whichMods_mask_UseEffective,
        &hf_x11_xkb_GetNamedIndicator_reply_map_whichMods_mask_UseCompat,
        NULL
        };
        proto_tree_add_bitmask(t,  tvb, *offsetp, hf_x11_xkb_GetNamedIndicator_reply_map_whichMods, ett_x11_rectangle, map_whichMods_bits, byte_order);
    }
    *offsetp += 1;
    {
        static int* const map_mods_bits [] = {
        &hf_x11_xkb_GetNamedIndicator_reply_map_mods_mask_Shift,
        &hf_x11_xkb_GetNamedIndicator_reply_map_mods_mask_Lock,
        &hf_x11_xkb_GetNamedIndicator_reply_map_mods_mask_Control,
        &hf_x11_xkb_GetNamedIndicator_reply_map_mods_mask_1,
        &hf_x11_xkb_GetNamedIndicator_reply_map_mods_mask_2,
        &hf_x11_xkb_GetNamedIndicator_reply_map_mods_mask_3,
        &hf_x11_xkb_GetNamedIndicator_reply_map_mods_mask_4,
        &hf_x11_xkb_GetNamedIndicator_reply_map_mods_mask_5,
        &hf_x11_xkb_GetNamedIndicator_reply_map_mods_mask_Any,
        NULL
        };
        proto_tree_add_bitmask(t,  tvb, *offsetp, hf_x11_xkb_GetNamedIndicator_reply_map_mods, ett_x11_rectangle, map_mods_bits, byte_order);
    }
    *offsetp += 1;
    {
        static int* const map_realMods_bits [] = {
        &hf_x11_xkb_GetNamedIndicator_reply_map_realMods_mask_Shift,
        &hf_x11_xkb_GetNamedIndicator_reply_map_realMods_mask_Lock,
        &hf_x11_xkb_GetNamedIndicator_reply_map_realMods_mask_Control,
        &hf_x11_xkb_GetNamedIndicator_reply_map_realMods_mask_1,
        &hf_x11_xkb_GetNamedIndicator_reply_map_realMods_mask_2,
        &hf_x11_xkb_GetNamedIndicator_reply_map_realMods_mask_3,
        &hf_x11_xkb_GetNamedIndicator_reply_map_realMods_mask_4,
        &hf_x11_xkb_GetNamedIndicator_reply_map_realMods_mask_5,
        &hf_x11_xkb_GetNamedIndicator_reply_map_realMods_mask_Any,
        NULL
        };
        proto_tree_add_bitmask(t,  tvb, *offsetp, hf_x11_xkb_GetNamedIndicator_reply_map_realMods, ett_x11_rectangle, map_realMods_bits, byte_order);
    }
    *offsetp += 1;
    {
        static int* const map_vmod_bits [] = {
        &hf_x11_xkb_GetNamedIndicator_reply_map_vmod_mask_0,
        &hf_x11_xkb_GetNamedIndicator_reply_map_vmod_mask_1,
        &hf_x11_xkb_GetNamedIndicator_reply_map_vmod_mask_2,
        &hf_x11_xkb_GetNamedIndicator_reply_map_vmod_mask_3,
        &hf_x11_xkb_GetNamedIndicator_reply_map_vmod_mask_4,
        &hf_x11_xkb_GetNamedIndicator_reply_map_vmod_mask_5,
        &hf_x11_xkb_GetNamedIndicator_reply_map_vmod_mask_6,
        &hf_x11_xkb_GetNamedIndicator_reply_map_vmod_mask_7,
        &hf_x11_xkb_GetNamedIndicator_reply_map_vmod_mask_8,
        &hf_x11_xkb_GetNamedIndicator_reply_map_vmod_mask_9,
        &hf_x11_xkb_GetNamedIndicator_reply_map_vmod_mask_10,
        &hf_x11_xkb_GetNamedIndicator_reply_map_vmod_mask_11,
        &hf_x11_xkb_GetNamedIndicator_reply_map_vmod_mask_12,
        &hf_x11_xkb_GetNamedIndicator_reply_map_vmod_mask_13,
        &hf_x11_xkb_GetNamedIndicator_reply_map_vmod_mask_14,
        &hf_x11_xkb_GetNamedIndicator_reply_map_vmod_mask_15,
        NULL
        };
        proto_tree_add_bitmask(t,  tvb, *offsetp, hf_x11_xkb_GetNamedIndicator_reply_map_vmod, ett_x11_rectangle, map_vmod_bits, byte_order);
    }
    *offsetp += 2;
    {
        static int* const map_ctrls_bits [] = {
        &hf_x11_xkb_GetNamedIndicator_reply_map_ctrls_mask_RepeatKeys,
        &hf_x11_xkb_GetNamedIndicator_reply_map_ctrls_mask_SlowKeys,
        &hf_x11_xkb_GetNamedIndicator_reply_map_ctrls_mask_BounceKeys,
        &hf_x11_xkb_GetNamedIndicator_reply_map_ctrls_mask_StickyKeys,
        &hf_x11_xkb_GetNamedIndicator_reply_map_ctrls_mask_MouseKeys,
        &hf_x11_xkb_GetNamedIndicator_reply_map_ctrls_mask_MouseKeysAccel,
        &hf_x11_xkb_GetNamedIndicator_reply_map_ctrls_mask_AccessXKeys,
        &hf_x11_xkb_GetNamedIndicator_reply_map_ctrls_mask_AccessXTimeoutMask,
        &hf_x11_xkb_GetNamedIndicator_reply_map_ctrls_mask_AccessXFeedbackMask,
        &hf_x11_xkb_GetNamedIndicator_reply_map_ctrls_mask_AudibleBellMask,
        &hf_x11_xkb_GetNamedIndicator_reply_map_ctrls_mask_Overlay1Mask,
        &hf_x11_xkb_GetNamedIndicator_reply_map_ctrls_mask_Overlay2Mask,
        &hf_x11_xkb_GetNamedIndicator_reply_map_ctrls_mask_IgnoreGroupLockMask,
        NULL
        };
        proto_tree_add_bitmask(t,  tvb, *offsetp, hf_x11_xkb_GetNamedIndicator_reply_map_ctrls, ett_x11_rectangle, map_ctrls_bits, byte_order);
    }
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xkb_GetNamedIndicator_reply_supported, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 3, ENC_NA);
    *offsetp += 3;
}

static void xkbSetNamedIndicator(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_xkb_SetNamedIndicator_deviceSpec, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    field16(tvb, offsetp, t, hf_x11_xkb_SetNamedIndicator_ledClass, byte_order);
    field16(tvb, offsetp, t, hf_x11_xkb_SetNamedIndicator_ledID, byte_order);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 2, ENC_NA);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_xkb_SetNamedIndicator_indicator, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xkb_SetNamedIndicator_setState, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_xkb_SetNamedIndicator_on, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_xkb_SetNamedIndicator_setMap, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_xkb_SetNamedIndicator_createMap, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    {
        static int* const map_flags_bits [] = {
        &hf_x11_xkb_SetNamedIndicator_map_flags_mask_LEDDrivesKB,
        &hf_x11_xkb_SetNamedIndicator_map_flags_mask_NoAutomatic,
        &hf_x11_xkb_SetNamedIndicator_map_flags_mask_NoExplicit,
        NULL
        };
        proto_tree_add_bitmask(t,  tvb, *offsetp, hf_x11_xkb_SetNamedIndicator_map_flags, ett_x11_rectangle, map_flags_bits, byte_order);
    }
    *offsetp += 1;
    {
        static int* const map_whichGroups_bits [] = {
        &hf_x11_xkb_SetNamedIndicator_map_whichGroups_mask_UseBase,
        &hf_x11_xkb_SetNamedIndicator_map_whichGroups_mask_UseLatched,
        &hf_x11_xkb_SetNamedIndicator_map_whichGroups_mask_UseLocked,
        &hf_x11_xkb_SetNamedIndicator_map_whichGroups_mask_UseEffective,
        &hf_x11_xkb_SetNamedIndicator_map_whichGroups_mask_UseCompat,
        NULL
        };
        proto_tree_add_bitmask(t,  tvb, *offsetp, hf_x11_xkb_SetNamedIndicator_map_whichGroups, ett_x11_rectangle, map_whichGroups_bits, byte_order);
    }
    *offsetp += 1;
    {
        static int* const map_groups_bits [] = {
        &hf_x11_xkb_SetNamedIndicator_map_groups_mask_Any,
        NULL
        };
        proto_tree_add_bitmask(t,  tvb, *offsetp, hf_x11_xkb_SetNamedIndicator_map_groups, ett_x11_rectangle, map_groups_bits, byte_order);
    }
    *offsetp += 1;
    {
        static int* const map_whichMods_bits [] = {
        &hf_x11_xkb_SetNamedIndicator_map_whichMods_mask_UseBase,
        &hf_x11_xkb_SetNamedIndicator_map_whichMods_mask_UseLatched,
        &hf_x11_xkb_SetNamedIndicator_map_whichMods_mask_UseLocked,
        &hf_x11_xkb_SetNamedIndicator_map_whichMods_mask_UseEffective,
        &hf_x11_xkb_SetNamedIndicator_map_whichMods_mask_UseCompat,
        NULL
        };
        proto_tree_add_bitmask(t,  tvb, *offsetp, hf_x11_xkb_SetNamedIndicator_map_whichMods, ett_x11_rectangle, map_whichMods_bits, byte_order);
    }
    *offsetp += 1;
    {
        static int* const map_realMods_bits [] = {
        &hf_x11_xkb_SetNamedIndicator_map_realMods_mask_Shift,
        &hf_x11_xkb_SetNamedIndicator_map_realMods_mask_Lock,
        &hf_x11_xkb_SetNamedIndicator_map_realMods_mask_Control,
        &hf_x11_xkb_SetNamedIndicator_map_realMods_mask_1,
        &hf_x11_xkb_SetNamedIndicator_map_realMods_mask_2,
        &hf_x11_xkb_SetNamedIndicator_map_realMods_mask_3,
        &hf_x11_xkb_SetNamedIndicator_map_realMods_mask_4,
        &hf_x11_xkb_SetNamedIndicator_map_realMods_mask_5,
        &hf_x11_xkb_SetNamedIndicator_map_realMods_mask_Any,
        NULL
        };
        proto_tree_add_bitmask(t,  tvb, *offsetp, hf_x11_xkb_SetNamedIndicator_map_realMods, ett_x11_rectangle, map_realMods_bits, byte_order);
    }
    *offsetp += 1;
    {
        static int* const map_vmods_bits [] = {
        &hf_x11_xkb_SetNamedIndicator_map_vmods_mask_0,
        &hf_x11_xkb_SetNamedIndicator_map_vmods_mask_1,
        &hf_x11_xkb_SetNamedIndicator_map_vmods_mask_2,
        &hf_x11_xkb_SetNamedIndicator_map_vmods_mask_3,
        &hf_x11_xkb_SetNamedIndicator_map_vmods_mask_4,
        &hf_x11_xkb_SetNamedIndicator_map_vmods_mask_5,
        &hf_x11_xkb_SetNamedIndicator_map_vmods_mask_6,
        &hf_x11_xkb_SetNamedIndicator_map_vmods_mask_7,
        &hf_x11_xkb_SetNamedIndicator_map_vmods_mask_8,
        &hf_x11_xkb_SetNamedIndicator_map_vmods_mask_9,
        &hf_x11_xkb_SetNamedIndicator_map_vmods_mask_10,
        &hf_x11_xkb_SetNamedIndicator_map_vmods_mask_11,
        &hf_x11_xkb_SetNamedIndicator_map_vmods_mask_12,
        &hf_x11_xkb_SetNamedIndicator_map_vmods_mask_13,
        &hf_x11_xkb_SetNamedIndicator_map_vmods_mask_14,
        &hf_x11_xkb_SetNamedIndicator_map_vmods_mask_15,
        NULL
        };
        proto_tree_add_bitmask(t,  tvb, *offsetp, hf_x11_xkb_SetNamedIndicator_map_vmods, ett_x11_rectangle, map_vmods_bits, byte_order);
    }
    *offsetp += 2;
    {
        static int* const map_ctrls_bits [] = {
        &hf_x11_xkb_SetNamedIndicator_map_ctrls_mask_RepeatKeys,
        &hf_x11_xkb_SetNamedIndicator_map_ctrls_mask_SlowKeys,
        &hf_x11_xkb_SetNamedIndicator_map_ctrls_mask_BounceKeys,
        &hf_x11_xkb_SetNamedIndicator_map_ctrls_mask_StickyKeys,
        &hf_x11_xkb_SetNamedIndicator_map_ctrls_mask_MouseKeys,
        &hf_x11_xkb_SetNamedIndicator_map_ctrls_mask_MouseKeysAccel,
        &hf_x11_xkb_SetNamedIndicator_map_ctrls_mask_AccessXKeys,
        &hf_x11_xkb_SetNamedIndicator_map_ctrls_mask_AccessXTimeoutMask,
        &hf_x11_xkb_SetNamedIndicator_map_ctrls_mask_AccessXFeedbackMask,
        &hf_x11_xkb_SetNamedIndicator_map_ctrls_mask_AudibleBellMask,
        &hf_x11_xkb_SetNamedIndicator_map_ctrls_mask_Overlay1Mask,
        &hf_x11_xkb_SetNamedIndicator_map_ctrls_mask_Overlay2Mask,
        &hf_x11_xkb_SetNamedIndicator_map_ctrls_mask_IgnoreGroupLockMask,
        NULL
        };
        proto_tree_add_bitmask(t,  tvb, *offsetp, hf_x11_xkb_SetNamedIndicator_map_ctrls, ett_x11_rectangle, map_ctrls_bits, byte_order);
    }
    *offsetp += 4;
}

static void xkbGetNames(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_xkb_GetNames_deviceSpec, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 2, ENC_NA);
    *offsetp += 2;
    {
        static int* const which_bits [] = {
        &hf_x11_xkb_GetNames_which_mask_Keycodes,
        &hf_x11_xkb_GetNames_which_mask_Geometry,
        &hf_x11_xkb_GetNames_which_mask_Symbols,
        &hf_x11_xkb_GetNames_which_mask_PhysSymbols,
        &hf_x11_xkb_GetNames_which_mask_Types,
        &hf_x11_xkb_GetNames_which_mask_Compat,
        &hf_x11_xkb_GetNames_which_mask_KeyTypeNames,
        &hf_x11_xkb_GetNames_which_mask_KTLevelNames,
        &hf_x11_xkb_GetNames_which_mask_IndicatorNames,
        &hf_x11_xkb_GetNames_which_mask_KeyNames,
        &hf_x11_xkb_GetNames_which_mask_KeyAliases,
        &hf_x11_xkb_GetNames_which_mask_VirtualModNames,
        &hf_x11_xkb_GetNames_which_mask_GroupNames,
        &hf_x11_xkb_GetNames_which_mask_RGNames,
        NULL
        };
        proto_tree_add_bitmask(t,  tvb, *offsetp, hf_x11_xkb_GetNames_which, ett_x11_rectangle, which_bits, byte_order);
    }
    *offsetp += 4;
}
static void xkbGetNames_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;
    int f_which;
    int f_nTypes;
    int f_groupNames;
    int f_virtualMods;
    int f_nKeys;
    int f_indicators;
    int f_nRadioGroups;
    int f_nKeyAliases;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-GetNames");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_xkb_GetNames_reply_deviceID, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (xkb-GetNames)", sequence_number);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    f_which = tvb_get_uint32(tvb, *offsetp, byte_order);
    {
        static int* const which_bits [] = {
        &hf_x11_xkb_GetNames_reply_which_mask_Keycodes,
        &hf_x11_xkb_GetNames_reply_which_mask_Geometry,
        &hf_x11_xkb_GetNames_reply_which_mask_Symbols,
        &hf_x11_xkb_GetNames_reply_which_mask_PhysSymbols,
        &hf_x11_xkb_GetNames_reply_which_mask_Types,
        &hf_x11_xkb_GetNames_reply_which_mask_Compat,
        &hf_x11_xkb_GetNames_reply_which_mask_KeyTypeNames,
        &hf_x11_xkb_GetNames_reply_which_mask_KTLevelNames,
        &hf_x11_xkb_GetNames_reply_which_mask_IndicatorNames,
        &hf_x11_xkb_GetNames_reply_which_mask_KeyNames,
        &hf_x11_xkb_GetNames_reply_which_mask_KeyAliases,
        &hf_x11_xkb_GetNames_reply_which_mask_VirtualModNames,
        &hf_x11_xkb_GetNames_reply_which_mask_GroupNames,
        &hf_x11_xkb_GetNames_reply_which_mask_RGNames,
        NULL
        };
        proto_tree_add_bitmask(t,  tvb, *offsetp, hf_x11_xkb_GetNames_reply_which, ett_x11_rectangle, which_bits, byte_order);
    }
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xkb_GetNames_reply_minKeyCode, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_xkb_GetNames_reply_maxKeyCode, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    f_nTypes = tvb_get_uint8(tvb, *offsetp);
    proto_tree_add_item(t, hf_x11_xkb_GetNames_reply_nTypes, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    f_groupNames = tvb_get_uint8(tvb, *offsetp);
    {
        static int* const groupNames_bits [] = {
        &hf_x11_xkb_GetNames_reply_groupNames_mask_Group1,
        &hf_x11_xkb_GetNames_reply_groupNames_mask_Group2,
        &hf_x11_xkb_GetNames_reply_groupNames_mask_Group3,
        &hf_x11_xkb_GetNames_reply_groupNames_mask_Group4,
        NULL
        };
        proto_tree_add_bitmask(t,  tvb, *offsetp, hf_x11_xkb_GetNames_reply_groupNames, ett_x11_rectangle, groupNames_bits, byte_order);
    }
    *offsetp += 1;
    f_virtualMods = tvb_get_uint16(tvb, *offsetp, byte_order);
    {
        static int* const virtualMods_bits [] = {
        &hf_x11_xkb_GetNames_reply_virtualMods_mask_0,
        &hf_x11_xkb_GetNames_reply_virtualMods_mask_1,
        &hf_x11_xkb_GetNames_reply_virtualMods_mask_2,
        &hf_x11_xkb_GetNames_reply_virtualMods_mask_3,
        &hf_x11_xkb_GetNames_reply_virtualMods_mask_4,
        &hf_x11_xkb_GetNames_reply_virtualMods_mask_5,
        &hf_x11_xkb_GetNames_reply_virtualMods_mask_6,
        &hf_x11_xkb_GetNames_reply_virtualMods_mask_7,
        &hf_x11_xkb_GetNames_reply_virtualMods_mask_8,
        &hf_x11_xkb_GetNames_reply_virtualMods_mask_9,
        &hf_x11_xkb_GetNames_reply_virtualMods_mask_10,
        &hf_x11_xkb_GetNames_reply_virtualMods_mask_11,
        &hf_x11_xkb_GetNames_reply_virtualMods_mask_12,
        &hf_x11_xkb_GetNames_reply_virtualMods_mask_13,
        &hf_x11_xkb_GetNames_reply_virtualMods_mask_14,
        &hf_x11_xkb_GetNames_reply_virtualMods_mask_15,
        NULL
        };
        proto_tree_add_bitmask(t,  tvb, *offsetp, hf_x11_xkb_GetNames_reply_virtualMods, ett_x11_rectangle, virtualMods_bits, byte_order);
    }
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_xkb_GetNames_reply_firstKey, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    f_nKeys = tvb_get_uint8(tvb, *offsetp);
    proto_tree_add_item(t, hf_x11_xkb_GetNames_reply_nKeys, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    f_indicators = tvb_get_uint32(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_xkb_GetNames_reply_indicators, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    f_nRadioGroups = tvb_get_uint8(tvb, *offsetp);
    proto_tree_add_item(t, hf_x11_xkb_GetNames_reply_nRadioGroups, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    f_nKeyAliases = tvb_get_uint8(tvb, *offsetp);
    proto_tree_add_item(t, hf_x11_xkb_GetNames_reply_nKeyAliases, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_xkb_GetNames_reply_nKTLevels, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 4, ENC_NA);
    *offsetp += 4;
    if (f_which & (1U << 0)) {
        proto_tree_add_item(t, hf_x11_xkb_GetNames_reply_Keycodes_keycodesName, tvb, *offsetp, 4, byte_order);
        *offsetp += 4;
    }
    if (f_which & (1U << 1)) {
        proto_tree_add_item(t, hf_x11_xkb_GetNames_reply_Geometry_geometryName, tvb, *offsetp, 4, byte_order);
        *offsetp += 4;
    }
    if (f_which & (1U << 2)) {
        proto_tree_add_item(t, hf_x11_xkb_GetNames_reply_Symbols_symbolsName, tvb, *offsetp, 4, byte_order);
        *offsetp += 4;
    }
    if (f_which & (1U << 3)) {
        proto_tree_add_item(t, hf_x11_xkb_GetNames_reply_PhysSymbols_physSymbolsName, tvb, *offsetp, 4, byte_order);
        *offsetp += 4;
    }
    if (f_which & (1U << 4)) {
        proto_tree_add_item(t, hf_x11_xkb_GetNames_reply_Types_typesName, tvb, *offsetp, 4, byte_order);
        *offsetp += 4;
    }
    if (f_which & (1U << 5)) {
        proto_tree_add_item(t, hf_x11_xkb_GetNames_reply_Compat_compatName, tvb, *offsetp, 4, byte_order);
        *offsetp += 4;
    }
    if (f_which & (1U << 6)) {
        listOfCard32(tvb, offsetp, t, hf_x11_xkb_GetNames_reply_KeyTypeNames_typeNames, hf_x11_xkb_GetNames_reply_KeyTypeNames_typeNames_item, f_nTypes, byte_order);
    }
    if (f_which & (1U << 7)) {
        int sumof_nLevelsPerType = 0;
        {
            int i;
            for (i = 0; i < f_nTypes; i++) {
                sumof_nLevelsPerType += tvb_get_uint8(tvb, *offsetp + i * 1);
            }
        }
        listOfByte(tvb, offsetp, t, hf_x11_xkb_GetNames_reply_KTLevelNames_nLevelsPerType, f_nTypes, byte_order);
        if (*offsetp % 4) {
            proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, (4 - *offsetp % 4), ENC_NA);
            *offsetp += (4 - *offsetp % 4);
        }
        listOfCard32(tvb, offsetp, t, hf_x11_xkb_GetNames_reply_KTLevelNames_ktLevelNames, hf_x11_xkb_GetNames_reply_KTLevelNames_ktLevelNames_item, sumof_nLevelsPerType, byte_order);
    }
    if (f_which & (1U << 8)) {
        listOfCard32(tvb, offsetp, t, hf_x11_xkb_GetNames_reply_IndicatorNames_indicatorNames, hf_x11_xkb_GetNames_reply_IndicatorNames_indicatorNames_item, ws_count_ones(f_indicators), byte_order);
    }
    if (f_which & (1U << 11)) {
        listOfCard32(tvb, offsetp, t, hf_x11_xkb_GetNames_reply_VirtualModNames_virtualModNames, hf_x11_xkb_GetNames_reply_VirtualModNames_virtualModNames_item, ws_count_ones(f_virtualMods), byte_order);
    }
    if (f_which & (1U << 12)) {
        listOfCard32(tvb, offsetp, t, hf_x11_xkb_GetNames_reply_GroupNames_groups, hf_x11_xkb_GetNames_reply_GroupNames_groups_item, ws_count_ones(f_groupNames), byte_order);
    }
    if (f_which & (1U << 9)) {
        struct_xkb_KeyName(tvb, offsetp, t, byte_order, f_nKeys);
    }
    if (f_which & (1U << 10)) {
        struct_xkb_KeyAlias(tvb, offsetp, t, byte_order, f_nKeyAliases);
    }
    if (f_which & (1U << 13)) {
        listOfCard32(tvb, offsetp, t, hf_x11_xkb_GetNames_reply_RGNames_radioGroupNames, hf_x11_xkb_GetNames_reply_RGNames_radioGroupNames_item, f_nRadioGroups, byte_order);
    }
}

static void xkbSetNames(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    int f_virtualMods;
    int f_which;
    int f_nTypes;
    int f_indicators;
    int f_groupNames;
    int f_nRadioGroups;
    int f_nKeys;
    int f_nKeyAliases;
    proto_tree_add_item(t, hf_x11_xkb_SetNames_deviceSpec, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    f_virtualMods = tvb_get_uint16(tvb, *offsetp, byte_order);
    {
        static int* const virtualMods_bits [] = {
        &hf_x11_xkb_SetNames_virtualMods_mask_0,
        &hf_x11_xkb_SetNames_virtualMods_mask_1,
        &hf_x11_xkb_SetNames_virtualMods_mask_2,
        &hf_x11_xkb_SetNames_virtualMods_mask_3,
        &hf_x11_xkb_SetNames_virtualMods_mask_4,
        &hf_x11_xkb_SetNames_virtualMods_mask_5,
        &hf_x11_xkb_SetNames_virtualMods_mask_6,
        &hf_x11_xkb_SetNames_virtualMods_mask_7,
        &hf_x11_xkb_SetNames_virtualMods_mask_8,
        &hf_x11_xkb_SetNames_virtualMods_mask_9,
        &hf_x11_xkb_SetNames_virtualMods_mask_10,
        &hf_x11_xkb_SetNames_virtualMods_mask_11,
        &hf_x11_xkb_SetNames_virtualMods_mask_12,
        &hf_x11_xkb_SetNames_virtualMods_mask_13,
        &hf_x11_xkb_SetNames_virtualMods_mask_14,
        &hf_x11_xkb_SetNames_virtualMods_mask_15,
        NULL
        };
        proto_tree_add_bitmask(t,  tvb, *offsetp, hf_x11_xkb_SetNames_virtualMods, ett_x11_rectangle, virtualMods_bits, byte_order);
    }
    *offsetp += 2;
    f_which = tvb_get_uint32(tvb, *offsetp, byte_order);
    {
        static int* const which_bits [] = {
        &hf_x11_xkb_SetNames_which_mask_Keycodes,
        &hf_x11_xkb_SetNames_which_mask_Geometry,
        &hf_x11_xkb_SetNames_which_mask_Symbols,
        &hf_x11_xkb_SetNames_which_mask_PhysSymbols,
        &hf_x11_xkb_SetNames_which_mask_Types,
        &hf_x11_xkb_SetNames_which_mask_Compat,
        &hf_x11_xkb_SetNames_which_mask_KeyTypeNames,
        &hf_x11_xkb_SetNames_which_mask_KTLevelNames,
        &hf_x11_xkb_SetNames_which_mask_IndicatorNames,
        &hf_x11_xkb_SetNames_which_mask_KeyNames,
        &hf_x11_xkb_SetNames_which_mask_KeyAliases,
        &hf_x11_xkb_SetNames_which_mask_VirtualModNames,
        &hf_x11_xkb_SetNames_which_mask_GroupNames,
        &hf_x11_xkb_SetNames_which_mask_RGNames,
        NULL
        };
        proto_tree_add_bitmask(t,  tvb, *offsetp, hf_x11_xkb_SetNames_which, ett_x11_rectangle, which_bits, byte_order);
    }
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xkb_SetNames_firstType, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    f_nTypes = tvb_get_uint8(tvb, *offsetp);
    proto_tree_add_item(t, hf_x11_xkb_SetNames_nTypes, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_xkb_SetNames_firstKTLevelt, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_xkb_SetNames_nKTLevels, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    f_indicators = tvb_get_uint32(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_xkb_SetNames_indicators, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    f_groupNames = tvb_get_uint8(tvb, *offsetp);
    {
        static int* const groupNames_bits [] = {
        &hf_x11_xkb_SetNames_groupNames_mask_Group1,
        &hf_x11_xkb_SetNames_groupNames_mask_Group2,
        &hf_x11_xkb_SetNames_groupNames_mask_Group3,
        &hf_x11_xkb_SetNames_groupNames_mask_Group4,
        NULL
        };
        proto_tree_add_bitmask(t,  tvb, *offsetp, hf_x11_xkb_SetNames_groupNames, ett_x11_rectangle, groupNames_bits, byte_order);
    }
    *offsetp += 1;
    f_nRadioGroups = tvb_get_uint8(tvb, *offsetp);
    proto_tree_add_item(t, hf_x11_xkb_SetNames_nRadioGroups, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_xkb_SetNames_firstKey, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    f_nKeys = tvb_get_uint8(tvb, *offsetp);
    proto_tree_add_item(t, hf_x11_xkb_SetNames_nKeys, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    f_nKeyAliases = tvb_get_uint8(tvb, *offsetp);
    proto_tree_add_item(t, hf_x11_xkb_SetNames_nKeyAliases, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_xkb_SetNames_totalKTLevelNames, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    if (f_which & (1U << 0)) {
        proto_tree_add_item(t, hf_x11_xkb_SetNames_Keycodes_keycodesName, tvb, *offsetp, 4, byte_order);
        *offsetp += 4;
    }
    if (f_which & (1U << 1)) {
        proto_tree_add_item(t, hf_x11_xkb_SetNames_Geometry_geometryName, tvb, *offsetp, 4, byte_order);
        *offsetp += 4;
    }
    if (f_which & (1U << 2)) {
        proto_tree_add_item(t, hf_x11_xkb_SetNames_Symbols_symbolsName, tvb, *offsetp, 4, byte_order);
        *offsetp += 4;
    }
    if (f_which & (1U << 3)) {
        proto_tree_add_item(t, hf_x11_xkb_SetNames_PhysSymbols_physSymbolsName, tvb, *offsetp, 4, byte_order);
        *offsetp += 4;
    }
    if (f_which & (1U << 4)) {
        proto_tree_add_item(t, hf_x11_xkb_SetNames_Types_typesName, tvb, *offsetp, 4, byte_order);
        *offsetp += 4;
    }
    if (f_which & (1U << 5)) {
        proto_tree_add_item(t, hf_x11_xkb_SetNames_Compat_compatName, tvb, *offsetp, 4, byte_order);
        *offsetp += 4;
    }
    if (f_which & (1U << 6)) {
        listOfCard32(tvb, offsetp, t, hf_x11_xkb_SetNames_KeyTypeNames_typeNames, hf_x11_xkb_SetNames_KeyTypeNames_typeNames_item, f_nTypes, byte_order);
        length -= f_nTypes * 4;
    }
    if (f_which & (1U << 7)) {
        int sumof_nLevelsPerType = 0;
        {
            int i;
            for (i = 0; i < f_nTypes; i++) {
                sumof_nLevelsPerType += tvb_get_uint8(tvb, *offsetp + i * 1);
            }
        }
        listOfByte(tvb, offsetp, t, hf_x11_xkb_SetNames_KTLevelNames_nLevelsPerType, f_nTypes, byte_order);
        length -= f_nTypes * 1;
        if (*offsetp % 4) {
            proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, (4 - *offsetp % 4), ENC_NA);
            *offsetp += (4 - *offsetp % 4);
        }
        length = ((length + 3) & ~3);
        listOfCard32(tvb, offsetp, t, hf_x11_xkb_SetNames_KTLevelNames_ktLevelNames, hf_x11_xkb_SetNames_KTLevelNames_ktLevelNames_item, sumof_nLevelsPerType, byte_order);
        length -= sumof_nLevelsPerType * 4;
    }
    if (f_which & (1U << 8)) {
        listOfCard32(tvb, offsetp, t, hf_x11_xkb_SetNames_IndicatorNames_indicatorNames, hf_x11_xkb_SetNames_IndicatorNames_indicatorNames_item, ws_count_ones(f_indicators), byte_order);
        length -= ws_count_ones(f_indicators) * 4;
    }
    if (f_which & (1U << 11)) {
        listOfCard32(tvb, offsetp, t, hf_x11_xkb_SetNames_VirtualModNames_virtualModNames, hf_x11_xkb_SetNames_VirtualModNames_virtualModNames_item, ws_count_ones(f_virtualMods), byte_order);
        length -= ws_count_ones(f_virtualMods) * 4;
    }
    if (f_which & (1U << 12)) {
        listOfCard32(tvb, offsetp, t, hf_x11_xkb_SetNames_GroupNames_groups, hf_x11_xkb_SetNames_GroupNames_groups_item, ws_count_ones(f_groupNames), byte_order);
        length -= ws_count_ones(f_groupNames) * 4;
    }
    if (f_which & (1U << 9)) {
        struct_xkb_KeyName(tvb, offsetp, t, byte_order, f_nKeys);
        length -= f_nKeys * 4;
    }
    if (f_which & (1U << 10)) {
        struct_xkb_KeyAlias(tvb, offsetp, t, byte_order, f_nKeyAliases);
        length -= f_nKeyAliases * 8;
    }
    if (f_which & (1U << 13)) {
        listOfCard32(tvb, offsetp, t, hf_x11_xkb_SetNames_RGNames_radioGroupNames, hf_x11_xkb_SetNames_RGNames_radioGroupNames_item, f_nRadioGroups, byte_order);
        length -= f_nRadioGroups * 4;
    }
}

static void xkbPerClientFlags(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_xkb_PerClientFlags_deviceSpec, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 2, ENC_NA);
    *offsetp += 2;
    {
        static int* const change_bits [] = {
        &hf_x11_xkb_PerClientFlags_change_mask_DetectableAutoRepeat,
        &hf_x11_xkb_PerClientFlags_change_mask_GrabsUseXKBState,
        &hf_x11_xkb_PerClientFlags_change_mask_AutoResetControls,
        &hf_x11_xkb_PerClientFlags_change_mask_LookupStateWhenGrabbed,
        &hf_x11_xkb_PerClientFlags_change_mask_SendEventUsesXKBState,
        NULL
        };
        proto_tree_add_bitmask(t,  tvb, *offsetp, hf_x11_xkb_PerClientFlags_change, ett_x11_rectangle, change_bits, byte_order);
    }
    *offsetp += 4;
    {
        static int* const value_bits [] = {
        &hf_x11_xkb_PerClientFlags_value_mask_DetectableAutoRepeat,
        &hf_x11_xkb_PerClientFlags_value_mask_GrabsUseXKBState,
        &hf_x11_xkb_PerClientFlags_value_mask_AutoResetControls,
        &hf_x11_xkb_PerClientFlags_value_mask_LookupStateWhenGrabbed,
        &hf_x11_xkb_PerClientFlags_value_mask_SendEventUsesXKBState,
        NULL
        };
        proto_tree_add_bitmask(t,  tvb, *offsetp, hf_x11_xkb_PerClientFlags_value, ett_x11_rectangle, value_bits, byte_order);
    }
    *offsetp += 4;
    {
        static int* const ctrlsToChange_bits [] = {
        &hf_x11_xkb_PerClientFlags_ctrlsToChange_mask_RepeatKeys,
        &hf_x11_xkb_PerClientFlags_ctrlsToChange_mask_SlowKeys,
        &hf_x11_xkb_PerClientFlags_ctrlsToChange_mask_BounceKeys,
        &hf_x11_xkb_PerClientFlags_ctrlsToChange_mask_StickyKeys,
        &hf_x11_xkb_PerClientFlags_ctrlsToChange_mask_MouseKeys,
        &hf_x11_xkb_PerClientFlags_ctrlsToChange_mask_MouseKeysAccel,
        &hf_x11_xkb_PerClientFlags_ctrlsToChange_mask_AccessXKeys,
        &hf_x11_xkb_PerClientFlags_ctrlsToChange_mask_AccessXTimeoutMask,
        &hf_x11_xkb_PerClientFlags_ctrlsToChange_mask_AccessXFeedbackMask,
        &hf_x11_xkb_PerClientFlags_ctrlsToChange_mask_AudibleBellMask,
        &hf_x11_xkb_PerClientFlags_ctrlsToChange_mask_Overlay1Mask,
        &hf_x11_xkb_PerClientFlags_ctrlsToChange_mask_Overlay2Mask,
        &hf_x11_xkb_PerClientFlags_ctrlsToChange_mask_IgnoreGroupLockMask,
        NULL
        };
        proto_tree_add_bitmask(t,  tvb, *offsetp, hf_x11_xkb_PerClientFlags_ctrlsToChange, ett_x11_rectangle, ctrlsToChange_bits, byte_order);
    }
    *offsetp += 4;
    {
        static int* const autoCtrls_bits [] = {
        &hf_x11_xkb_PerClientFlags_autoCtrls_mask_RepeatKeys,
        &hf_x11_xkb_PerClientFlags_autoCtrls_mask_SlowKeys,
        &hf_x11_xkb_PerClientFlags_autoCtrls_mask_BounceKeys,
        &hf_x11_xkb_PerClientFlags_autoCtrls_mask_StickyKeys,
        &hf_x11_xkb_PerClientFlags_autoCtrls_mask_MouseKeys,
        &hf_x11_xkb_PerClientFlags_autoCtrls_mask_MouseKeysAccel,
        &hf_x11_xkb_PerClientFlags_autoCtrls_mask_AccessXKeys,
        &hf_x11_xkb_PerClientFlags_autoCtrls_mask_AccessXTimeoutMask,
        &hf_x11_xkb_PerClientFlags_autoCtrls_mask_AccessXFeedbackMask,
        &hf_x11_xkb_PerClientFlags_autoCtrls_mask_AudibleBellMask,
        &hf_x11_xkb_PerClientFlags_autoCtrls_mask_Overlay1Mask,
        &hf_x11_xkb_PerClientFlags_autoCtrls_mask_Overlay2Mask,
        &hf_x11_xkb_PerClientFlags_autoCtrls_mask_IgnoreGroupLockMask,
        NULL
        };
        proto_tree_add_bitmask(t,  tvb, *offsetp, hf_x11_xkb_PerClientFlags_autoCtrls, ett_x11_rectangle, autoCtrls_bits, byte_order);
    }
    *offsetp += 4;
    {
        static int* const autoCtrlsValues_bits [] = {
        &hf_x11_xkb_PerClientFlags_autoCtrlsValues_mask_RepeatKeys,
        &hf_x11_xkb_PerClientFlags_autoCtrlsValues_mask_SlowKeys,
        &hf_x11_xkb_PerClientFlags_autoCtrlsValues_mask_BounceKeys,
        &hf_x11_xkb_PerClientFlags_autoCtrlsValues_mask_StickyKeys,
        &hf_x11_xkb_PerClientFlags_autoCtrlsValues_mask_MouseKeys,
        &hf_x11_xkb_PerClientFlags_autoCtrlsValues_mask_MouseKeysAccel,
        &hf_x11_xkb_PerClientFlags_autoCtrlsValues_mask_AccessXKeys,
        &hf_x11_xkb_PerClientFlags_autoCtrlsValues_mask_AccessXTimeoutMask,
        &hf_x11_xkb_PerClientFlags_autoCtrlsValues_mask_AccessXFeedbackMask,
        &hf_x11_xkb_PerClientFlags_autoCtrlsValues_mask_AudibleBellMask,
        &hf_x11_xkb_PerClientFlags_autoCtrlsValues_mask_Overlay1Mask,
        &hf_x11_xkb_PerClientFlags_autoCtrlsValues_mask_Overlay2Mask,
        &hf_x11_xkb_PerClientFlags_autoCtrlsValues_mask_IgnoreGroupLockMask,
        NULL
        };
        proto_tree_add_bitmask(t,  tvb, *offsetp, hf_x11_xkb_PerClientFlags_autoCtrlsValues, ett_x11_rectangle, autoCtrlsValues_bits, byte_order);
    }
    *offsetp += 4;
}
static void xkbPerClientFlags_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-PerClientFlags");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_xkb_PerClientFlags_reply_deviceID, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (xkb-PerClientFlags)", sequence_number);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    {
        static int* const supported_bits [] = {
        &hf_x11_xkb_PerClientFlags_reply_supported_mask_DetectableAutoRepeat,
        &hf_x11_xkb_PerClientFlags_reply_supported_mask_GrabsUseXKBState,
        &hf_x11_xkb_PerClientFlags_reply_supported_mask_AutoResetControls,
        &hf_x11_xkb_PerClientFlags_reply_supported_mask_LookupStateWhenGrabbed,
        &hf_x11_xkb_PerClientFlags_reply_supported_mask_SendEventUsesXKBState,
        NULL
        };
        proto_tree_add_bitmask(t,  tvb, *offsetp, hf_x11_xkb_PerClientFlags_reply_supported, ett_x11_rectangle, supported_bits, byte_order);
    }
    *offsetp += 4;
    {
        static int* const value_bits [] = {
        &hf_x11_xkb_PerClientFlags_reply_value_mask_DetectableAutoRepeat,
        &hf_x11_xkb_PerClientFlags_reply_value_mask_GrabsUseXKBState,
        &hf_x11_xkb_PerClientFlags_reply_value_mask_AutoResetControls,
        &hf_x11_xkb_PerClientFlags_reply_value_mask_LookupStateWhenGrabbed,
        &hf_x11_xkb_PerClientFlags_reply_value_mask_SendEventUsesXKBState,
        NULL
        };
        proto_tree_add_bitmask(t,  tvb, *offsetp, hf_x11_xkb_PerClientFlags_reply_value, ett_x11_rectangle, value_bits, byte_order);
    }
    *offsetp += 4;
    {
        static int* const autoCtrls_bits [] = {
        &hf_x11_xkb_PerClientFlags_reply_autoCtrls_mask_RepeatKeys,
        &hf_x11_xkb_PerClientFlags_reply_autoCtrls_mask_SlowKeys,
        &hf_x11_xkb_PerClientFlags_reply_autoCtrls_mask_BounceKeys,
        &hf_x11_xkb_PerClientFlags_reply_autoCtrls_mask_StickyKeys,
        &hf_x11_xkb_PerClientFlags_reply_autoCtrls_mask_MouseKeys,
        &hf_x11_xkb_PerClientFlags_reply_autoCtrls_mask_MouseKeysAccel,
        &hf_x11_xkb_PerClientFlags_reply_autoCtrls_mask_AccessXKeys,
        &hf_x11_xkb_PerClientFlags_reply_autoCtrls_mask_AccessXTimeoutMask,
        &hf_x11_xkb_PerClientFlags_reply_autoCtrls_mask_AccessXFeedbackMask,
        &hf_x11_xkb_PerClientFlags_reply_autoCtrls_mask_AudibleBellMask,
        &hf_x11_xkb_PerClientFlags_reply_autoCtrls_mask_Overlay1Mask,
        &hf_x11_xkb_PerClientFlags_reply_autoCtrls_mask_Overlay2Mask,
        &hf_x11_xkb_PerClientFlags_reply_autoCtrls_mask_IgnoreGroupLockMask,
        NULL
        };
        proto_tree_add_bitmask(t,  tvb, *offsetp, hf_x11_xkb_PerClientFlags_reply_autoCtrls, ett_x11_rectangle, autoCtrls_bits, byte_order);
    }
    *offsetp += 4;
    {
        static int* const autoCtrlsValues_bits [] = {
        &hf_x11_xkb_PerClientFlags_reply_autoCtrlsValues_mask_RepeatKeys,
        &hf_x11_xkb_PerClientFlags_reply_autoCtrlsValues_mask_SlowKeys,
        &hf_x11_xkb_PerClientFlags_reply_autoCtrlsValues_mask_BounceKeys,
        &hf_x11_xkb_PerClientFlags_reply_autoCtrlsValues_mask_StickyKeys,
        &hf_x11_xkb_PerClientFlags_reply_autoCtrlsValues_mask_MouseKeys,
        &hf_x11_xkb_PerClientFlags_reply_autoCtrlsValues_mask_MouseKeysAccel,
        &hf_x11_xkb_PerClientFlags_reply_autoCtrlsValues_mask_AccessXKeys,
        &hf_x11_xkb_PerClientFlags_reply_autoCtrlsValues_mask_AccessXTimeoutMask,
        &hf_x11_xkb_PerClientFlags_reply_autoCtrlsValues_mask_AccessXFeedbackMask,
        &hf_x11_xkb_PerClientFlags_reply_autoCtrlsValues_mask_AudibleBellMask,
        &hf_x11_xkb_PerClientFlags_reply_autoCtrlsValues_mask_Overlay1Mask,
        &hf_x11_xkb_PerClientFlags_reply_autoCtrlsValues_mask_Overlay2Mask,
        &hf_x11_xkb_PerClientFlags_reply_autoCtrlsValues_mask_IgnoreGroupLockMask,
        NULL
        };
        proto_tree_add_bitmask(t,  tvb, *offsetp, hf_x11_xkb_PerClientFlags_reply_autoCtrlsValues, ett_x11_rectangle, autoCtrlsValues_bits, byte_order);
    }
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 8, ENC_NA);
    *offsetp += 8;
}

static void xkbListComponents(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_xkb_ListComponents_deviceSpec, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_xkb_ListComponents_maxNames, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
}
static void xkbListComponents_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;
    int f_nKeymaps;
    int f_nKeycodes;
    int f_nTypes;
    int f_nCompatMaps;
    int f_nSymbols;
    int f_nGeometries;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-ListComponents");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_xkb_ListComponents_reply_deviceID, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (xkb-ListComponents)", sequence_number);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    f_nKeymaps = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_xkb_ListComponents_reply_nKeymaps, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    f_nKeycodes = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_xkb_ListComponents_reply_nKeycodes, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    f_nTypes = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_xkb_ListComponents_reply_nTypes, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    f_nCompatMaps = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_xkb_ListComponents_reply_nCompatMaps, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    f_nSymbols = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_xkb_ListComponents_reply_nSymbols, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    f_nGeometries = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_xkb_ListComponents_reply_nGeometries, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_xkb_ListComponents_reply_extra, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 10, ENC_NA);
    *offsetp += 10;
    struct_xkb_Listing(tvb, offsetp, t, byte_order, f_nKeymaps);
    struct_xkb_Listing(tvb, offsetp, t, byte_order, f_nKeycodes);
    struct_xkb_Listing(tvb, offsetp, t, byte_order, f_nTypes);
    struct_xkb_Listing(tvb, offsetp, t, byte_order, f_nCompatMaps);
    struct_xkb_Listing(tvb, offsetp, t, byte_order, f_nSymbols);
    struct_xkb_Listing(tvb, offsetp, t, byte_order, f_nGeometries);
}

static void xkbGetKbdByName(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_xkb_GetKbdByName_deviceSpec, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    {
        static int* const need_bits [] = {
        &hf_x11_xkb_GetKbdByName_need_mask_Types,
        &hf_x11_xkb_GetKbdByName_need_mask_CompatMap,
        &hf_x11_xkb_GetKbdByName_need_mask_ClientSymbols,
        &hf_x11_xkb_GetKbdByName_need_mask_ServerSymbols,
        &hf_x11_xkb_GetKbdByName_need_mask_IndicatorMaps,
        &hf_x11_xkb_GetKbdByName_need_mask_KeyNames,
        &hf_x11_xkb_GetKbdByName_need_mask_Geometry,
        &hf_x11_xkb_GetKbdByName_need_mask_OtherNames,
        NULL
        };
        proto_tree_add_bitmask(t,  tvb, *offsetp, hf_x11_xkb_GetKbdByName_need, ett_x11_rectangle, need_bits, byte_order);
    }
    *offsetp += 2;
    {
        static int* const want_bits [] = {
        &hf_x11_xkb_GetKbdByName_want_mask_Types,
        &hf_x11_xkb_GetKbdByName_want_mask_CompatMap,
        &hf_x11_xkb_GetKbdByName_want_mask_ClientSymbols,
        &hf_x11_xkb_GetKbdByName_want_mask_ServerSymbols,
        &hf_x11_xkb_GetKbdByName_want_mask_IndicatorMaps,
        &hf_x11_xkb_GetKbdByName_want_mask_KeyNames,
        &hf_x11_xkb_GetKbdByName_want_mask_Geometry,
        &hf_x11_xkb_GetKbdByName_want_mask_OtherNames,
        NULL
        };
        proto_tree_add_bitmask(t,  tvb, *offsetp, hf_x11_xkb_GetKbdByName_want, ett_x11_rectangle, want_bits, byte_order);
    }
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_xkb_GetKbdByName_load, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
}
static void xkbGetKbdByName_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;
    int f_reported;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-GetKbdByName");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_xkb_GetKbdByName_reply_deviceID, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (xkb-GetKbdByName)", sequence_number);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xkb_GetKbdByName_reply_minKeyCode, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_xkb_GetKbdByName_reply_maxKeyCode, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_xkb_GetKbdByName_reply_loaded, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_xkb_GetKbdByName_reply_newKeyboard, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    {
        static int* const found_bits [] = {
        &hf_x11_xkb_GetKbdByName_reply_found_mask_Types,
        &hf_x11_xkb_GetKbdByName_reply_found_mask_CompatMap,
        &hf_x11_xkb_GetKbdByName_reply_found_mask_ClientSymbols,
        &hf_x11_xkb_GetKbdByName_reply_found_mask_ServerSymbols,
        &hf_x11_xkb_GetKbdByName_reply_found_mask_IndicatorMaps,
        &hf_x11_xkb_GetKbdByName_reply_found_mask_KeyNames,
        &hf_x11_xkb_GetKbdByName_reply_found_mask_Geometry,
        &hf_x11_xkb_GetKbdByName_reply_found_mask_OtherNames,
        NULL
        };
        proto_tree_add_bitmask(t,  tvb, *offsetp, hf_x11_xkb_GetKbdByName_reply_found, ett_x11_rectangle, found_bits, byte_order);
    }
    *offsetp += 2;
    f_reported = tvb_get_uint16(tvb, *offsetp, byte_order);
    {
        static int* const reported_bits [] = {
        &hf_x11_xkb_GetKbdByName_reply_reported_mask_Types,
        &hf_x11_xkb_GetKbdByName_reply_reported_mask_CompatMap,
        &hf_x11_xkb_GetKbdByName_reply_reported_mask_ClientSymbols,
        &hf_x11_xkb_GetKbdByName_reply_reported_mask_ServerSymbols,
        &hf_x11_xkb_GetKbdByName_reply_reported_mask_IndicatorMaps,
        &hf_x11_xkb_GetKbdByName_reply_reported_mask_KeyNames,
        &hf_x11_xkb_GetKbdByName_reply_reported_mask_Geometry,
        &hf_x11_xkb_GetKbdByName_reply_reported_mask_OtherNames,
        NULL
        };
        proto_tree_add_bitmask(t,  tvb, *offsetp, hf_x11_xkb_GetKbdByName_reply_reported, ett_x11_rectangle, reported_bits, byte_order);
    }
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 16, ENC_NA);
    *offsetp += 16;
    if ((f_reported & (1U << 0)) || (f_reported & (1U << 2)) || (f_reported & (1U << 3))) {
        int f_present;
        int f_nTypes;
        int f_nKeySyms;
        int f_totalActions;
        int f_nKeyActions;
        int f_totalKeyBehaviors;
        int f_totalKeyExplicit;
        int f_totalModMapKeys;
        int f_totalVModMapKeys;
        int f_virtualMods;
        proto_tree_add_item(t, hf_x11_xkb_GetKbdByName_reply_Types_getmap_type, tvb, *offsetp, 1, byte_order);
        *offsetp += 1;
        proto_tree_add_item(t, hf_x11_xkb_GetKbdByName_reply_Types_typeDeviceID, tvb, *offsetp, 1, byte_order);
        *offsetp += 1;
        proto_tree_add_item(t, hf_x11_xkb_GetKbdByName_reply_Types_getmap_sequence, tvb, *offsetp, 2, byte_order);
        *offsetp += 2;
        proto_tree_add_item(t, hf_x11_xkb_GetKbdByName_reply_Types_getmap_length, tvb, *offsetp, 4, byte_order);
        *offsetp += 4;
        proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 2, ENC_NA);
        *offsetp += 2;
        proto_tree_add_item(t, hf_x11_xkb_GetKbdByName_reply_Types_typeMinKeyCode, tvb, *offsetp, 1, byte_order);
        *offsetp += 1;
        proto_tree_add_item(t, hf_x11_xkb_GetKbdByName_reply_Types_typeMaxKeyCode, tvb, *offsetp, 1, byte_order);
        *offsetp += 1;
        f_present = tvb_get_uint16(tvb, *offsetp, byte_order);
        {
            static int* const present_bits [] = {
                &hf_x11_xkb_GetKbdByName_reply_Types_present_mask_KeyTypes,
                &hf_x11_xkb_GetKbdByName_reply_Types_present_mask_KeySyms,
                &hf_x11_xkb_GetKbdByName_reply_Types_present_mask_ModifierMap,
                &hf_x11_xkb_GetKbdByName_reply_Types_present_mask_ExplicitComponents,
                &hf_x11_xkb_GetKbdByName_reply_Types_present_mask_KeyActions,
                &hf_x11_xkb_GetKbdByName_reply_Types_present_mask_KeyBehaviors,
                &hf_x11_xkb_GetKbdByName_reply_Types_present_mask_VirtualMods,
                &hf_x11_xkb_GetKbdByName_reply_Types_present_mask_VirtualModMap,
                NULL
            };
            proto_tree_add_bitmask(t,  tvb, *offsetp, hf_x11_xkb_GetKbdByName_reply_Types_present, ett_x11_rectangle, present_bits, byte_order);
        }
        *offsetp += 2;
        proto_tree_add_item(t, hf_x11_xkb_GetKbdByName_reply_Types_firstType, tvb, *offsetp, 1, byte_order);
        *offsetp += 1;
        f_nTypes = tvb_get_uint8(tvb, *offsetp);
        proto_tree_add_item(t, hf_x11_xkb_GetKbdByName_reply_Types_nTypes, tvb, *offsetp, 1, byte_order);
        *offsetp += 1;
        proto_tree_add_item(t, hf_x11_xkb_GetKbdByName_reply_Types_totalTypes, tvb, *offsetp, 1, byte_order);
        *offsetp += 1;
        proto_tree_add_item(t, hf_x11_xkb_GetKbdByName_reply_Types_firstKeySym, tvb, *offsetp, 1, byte_order);
        *offsetp += 1;
        proto_tree_add_item(t, hf_x11_xkb_GetKbdByName_reply_Types_totalSyms, tvb, *offsetp, 2, byte_order);
        *offsetp += 2;
        f_nKeySyms = tvb_get_uint8(tvb, *offsetp);
        proto_tree_add_item(t, hf_x11_xkb_GetKbdByName_reply_Types_nKeySyms, tvb, *offsetp, 1, byte_order);
        *offsetp += 1;
        proto_tree_add_item(t, hf_x11_xkb_GetKbdByName_reply_Types_firstKeyAction, tvb, *offsetp, 1, byte_order);
        *offsetp += 1;
        f_totalActions = tvb_get_uint16(tvb, *offsetp, byte_order);
        proto_tree_add_item(t, hf_x11_xkb_GetKbdByName_reply_Types_totalActions, tvb, *offsetp, 2, byte_order);
        *offsetp += 2;
        f_nKeyActions = tvb_get_uint8(tvb, *offsetp);
        proto_tree_add_item(t, hf_x11_xkb_GetKbdByName_reply_Types_nKeyActions, tvb, *offsetp, 1, byte_order);
        *offsetp += 1;
        proto_tree_add_item(t, hf_x11_xkb_GetKbdByName_reply_Types_firstKeyBehavior, tvb, *offsetp, 1, byte_order);
        *offsetp += 1;
        proto_tree_add_item(t, hf_x11_xkb_GetKbdByName_reply_Types_nKeyBehaviors, tvb, *offsetp, 1, byte_order);
        *offsetp += 1;
        f_totalKeyBehaviors = tvb_get_uint8(tvb, *offsetp);
        proto_tree_add_item(t, hf_x11_xkb_GetKbdByName_reply_Types_totalKeyBehaviors, tvb, *offsetp, 1, byte_order);
        *offsetp += 1;
        proto_tree_add_item(t, hf_x11_xkb_GetKbdByName_reply_Types_firstKeyExplicit, tvb, *offsetp, 1, byte_order);
        *offsetp += 1;
        proto_tree_add_item(t, hf_x11_xkb_GetKbdByName_reply_Types_nKeyExplicit, tvb, *offsetp, 1, byte_order);
        *offsetp += 1;
        f_totalKeyExplicit = tvb_get_uint8(tvb, *offsetp);
        proto_tree_add_item(t, hf_x11_xkb_GetKbdByName_reply_Types_totalKeyExplicit, tvb, *offsetp, 1, byte_order);
        *offsetp += 1;
        proto_tree_add_item(t, hf_x11_xkb_GetKbdByName_reply_Types_firstModMapKey, tvb, *offsetp, 1, byte_order);
        *offsetp += 1;
        proto_tree_add_item(t, hf_x11_xkb_GetKbdByName_reply_Types_nModMapKeys, tvb, *offsetp, 1, byte_order);
        *offsetp += 1;
        f_totalModMapKeys = tvb_get_uint8(tvb, *offsetp);
        proto_tree_add_item(t, hf_x11_xkb_GetKbdByName_reply_Types_totalModMapKeys, tvb, *offsetp, 1, byte_order);
        *offsetp += 1;
        proto_tree_add_item(t, hf_x11_xkb_GetKbdByName_reply_Types_firstVModMapKey, tvb, *offsetp, 1, byte_order);
        *offsetp += 1;
        proto_tree_add_item(t, hf_x11_xkb_GetKbdByName_reply_Types_nVModMapKeys, tvb, *offsetp, 1, byte_order);
        *offsetp += 1;
        f_totalVModMapKeys = tvb_get_uint8(tvb, *offsetp);
        proto_tree_add_item(t, hf_x11_xkb_GetKbdByName_reply_Types_totalVModMapKeys, tvb, *offsetp, 1, byte_order);
        *offsetp += 1;
        proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
        *offsetp += 1;
        f_virtualMods = tvb_get_uint16(tvb, *offsetp, byte_order);
        {
            static int* const virtualMods_bits [] = {
                &hf_x11_xkb_GetKbdByName_reply_Types_virtualMods_mask_0,
                &hf_x11_xkb_GetKbdByName_reply_Types_virtualMods_mask_1,
                &hf_x11_xkb_GetKbdByName_reply_Types_virtualMods_mask_2,
                &hf_x11_xkb_GetKbdByName_reply_Types_virtualMods_mask_3,
                &hf_x11_xkb_GetKbdByName_reply_Types_virtualMods_mask_4,
                &hf_x11_xkb_GetKbdByName_reply_Types_virtualMods_mask_5,
                &hf_x11_xkb_GetKbdByName_reply_Types_virtualMods_mask_6,
                &hf_x11_xkb_GetKbdByName_reply_Types_virtualMods_mask_7,
                &hf_x11_xkb_GetKbdByName_reply_Types_virtualMods_mask_8,
                &hf_x11_xkb_GetKbdByName_reply_Types_virtualMods_mask_9,
                &hf_x11_xkb_GetKbdByName_reply_Types_virtualMods_mask_10,
                &hf_x11_xkb_GetKbdByName_reply_Types_virtualMods_mask_11,
                &hf_x11_xkb_GetKbdByName_reply_Types_virtualMods_mask_12,
                &hf_x11_xkb_GetKbdByName_reply_Types_virtualMods_mask_13,
                &hf_x11_xkb_GetKbdByName_reply_Types_virtualMods_mask_14,
                &hf_x11_xkb_GetKbdByName_reply_Types_virtualMods_mask_15,
                NULL
            };
            proto_tree_add_bitmask(t,  tvb, *offsetp, hf_x11_xkb_GetKbdByName_reply_Types_virtualMods, ett_x11_rectangle, virtualMods_bits, byte_order);
        }
        *offsetp += 2;
        if (f_present & (1U << 0)) {
            struct_xkb_KeyType(tvb, offsetp, t, byte_order, f_nTypes);
        }
        if (f_present & (1U << 1)) {
            struct_xkb_KeySymMap(tvb, offsetp, t, byte_order, f_nKeySyms);
        }
        if (f_present & (1U << 4)) {
            listOfByte(tvb, offsetp, t, hf_x11_xkb_GetKbdByName_reply_Types_KeyActions_acts_rtrn_count, f_nKeyActions, byte_order);
            if (*offsetp % 4) {
                proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, (4 - *offsetp % 4), ENC_NA);
                *offsetp += (4 - *offsetp % 4);
            }
            struct_xkb_Action(tvb, offsetp, t, byte_order, f_totalActions);
        }
        if (f_present & (1U << 5)) {
            struct_xkb_SetBehavior(tvb, offsetp, t, byte_order, f_totalKeyBehaviors);
        }
        if (f_present & (1U << 6)) {
            listOfByte(tvb, offsetp, t, hf_x11_xkb_GetKbdByName_reply_Types_VirtualMods_vmods_rtrn, ws_count_ones(f_virtualMods), byte_order);
            if (*offsetp % 4) {
                proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, (4 - *offsetp % 4), ENC_NA);
                *offsetp += (4 - *offsetp % 4);
            }
        }
        if (f_present & (1U << 3)) {
            struct_xkb_SetExplicit(tvb, offsetp, t, byte_order, f_totalKeyExplicit);
            if (*offsetp % 4) {
                proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, (4 - *offsetp % 4), ENC_NA);
                *offsetp += (4 - *offsetp % 4);
            }
        }
        if (f_present & (1U << 2)) {
            struct_xkb_KeyModMap(tvb, offsetp, t, byte_order, f_totalModMapKeys);
            if (*offsetp % 4) {
                proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, (4 - *offsetp % 4), ENC_NA);
                *offsetp += (4 - *offsetp % 4);
            }
        }
        if (f_present & (1U << 7)) {
            struct_xkb_KeyVModMap(tvb, offsetp, t, byte_order, f_totalVModMapKeys);
        }
    }
    if (f_reported & (1U << 1)) {
        int f_groupsRtrn;
        int f_nSIRtrn;
        proto_tree_add_item(t, hf_x11_xkb_GetKbdByName_reply_CompatMap_compatmap_type, tvb, *offsetp, 1, byte_order);
        *offsetp += 1;
        proto_tree_add_item(t, hf_x11_xkb_GetKbdByName_reply_CompatMap_compatDeviceID, tvb, *offsetp, 1, byte_order);
        *offsetp += 1;
        proto_tree_add_item(t, hf_x11_xkb_GetKbdByName_reply_CompatMap_compatmap_sequence, tvb, *offsetp, 2, byte_order);
        *offsetp += 2;
        proto_tree_add_item(t, hf_x11_xkb_GetKbdByName_reply_CompatMap_compatmap_length, tvb, *offsetp, 4, byte_order);
        *offsetp += 4;
        f_groupsRtrn = tvb_get_uint8(tvb, *offsetp);
        {
            static int* const groupsRtrn_bits [] = {
                &hf_x11_xkb_GetKbdByName_reply_CompatMap_groupsRtrn_mask_Group1,
                &hf_x11_xkb_GetKbdByName_reply_CompatMap_groupsRtrn_mask_Group2,
                &hf_x11_xkb_GetKbdByName_reply_CompatMap_groupsRtrn_mask_Group3,
                &hf_x11_xkb_GetKbdByName_reply_CompatMap_groupsRtrn_mask_Group4,
                NULL
            };
            proto_tree_add_bitmask(t,  tvb, *offsetp, hf_x11_xkb_GetKbdByName_reply_CompatMap_groupsRtrn, ett_x11_rectangle, groupsRtrn_bits, byte_order);
        }
        *offsetp += 1;
        proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
        *offsetp += 1;
        proto_tree_add_item(t, hf_x11_xkb_GetKbdByName_reply_CompatMap_firstSIRtrn, tvb, *offsetp, 2, byte_order);
        *offsetp += 2;
        f_nSIRtrn = tvb_get_uint16(tvb, *offsetp, byte_order);
        proto_tree_add_item(t, hf_x11_xkb_GetKbdByName_reply_CompatMap_nSIRtrn, tvb, *offsetp, 2, byte_order);
        *offsetp += 2;
        proto_tree_add_item(t, hf_x11_xkb_GetKbdByName_reply_CompatMap_nTotalSI, tvb, *offsetp, 2, byte_order);
        *offsetp += 2;
        proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 16, ENC_NA);
        *offsetp += 16;
        struct_xkb_SymInterpret(tvb, offsetp, t, byte_order, f_nSIRtrn);
        struct_xkb_ModDef(tvb, offsetp, t, byte_order, ws_count_ones(f_groupsRtrn));
    }
    if (f_reported & (1U << 4)) {
        int f_nIndicators;
        proto_tree_add_item(t, hf_x11_xkb_GetKbdByName_reply_IndicatorMaps_indicatormap_type, tvb, *offsetp, 1, byte_order);
        *offsetp += 1;
        proto_tree_add_item(t, hf_x11_xkb_GetKbdByName_reply_IndicatorMaps_indicatorDeviceID, tvb, *offsetp, 1, byte_order);
        *offsetp += 1;
        proto_tree_add_item(t, hf_x11_xkb_GetKbdByName_reply_IndicatorMaps_indicatormap_sequence, tvb, *offsetp, 2, byte_order);
        *offsetp += 2;
        proto_tree_add_item(t, hf_x11_xkb_GetKbdByName_reply_IndicatorMaps_indicatormap_length, tvb, *offsetp, 4, byte_order);
        *offsetp += 4;
        proto_tree_add_item(t, hf_x11_xkb_GetKbdByName_reply_IndicatorMaps_which, tvb, *offsetp, 4, byte_order);
        *offsetp += 4;
        proto_tree_add_item(t, hf_x11_xkb_GetKbdByName_reply_IndicatorMaps_realIndicators, tvb, *offsetp, 4, byte_order);
        *offsetp += 4;
        f_nIndicators = tvb_get_uint8(tvb, *offsetp);
        proto_tree_add_item(t, hf_x11_xkb_GetKbdByName_reply_IndicatorMaps_nIndicators, tvb, *offsetp, 1, byte_order);
        *offsetp += 1;
        proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 15, ENC_NA);
        *offsetp += 15;
        struct_xkb_IndicatorMap(tvb, offsetp, t, byte_order, f_nIndicators);
    }
    if ((f_reported & (1U << 5)) || (f_reported & (1U << 7))) {
        int f_which;
        int f_nTypes;
        int f_groupNames;
        int f_virtualMods;
        int f_nKeys;
        int f_indicators;
        int f_nRadioGroups;
        int f_nKeyAliases;
        proto_tree_add_item(t, hf_x11_xkb_GetKbdByName_reply_KeyNames_keyname_type, tvb, *offsetp, 1, byte_order);
        *offsetp += 1;
        proto_tree_add_item(t, hf_x11_xkb_GetKbdByName_reply_KeyNames_keyDeviceID, tvb, *offsetp, 1, byte_order);
        *offsetp += 1;
        proto_tree_add_item(t, hf_x11_xkb_GetKbdByName_reply_KeyNames_keyname_sequence, tvb, *offsetp, 2, byte_order);
        *offsetp += 2;
        proto_tree_add_item(t, hf_x11_xkb_GetKbdByName_reply_KeyNames_keyname_length, tvb, *offsetp, 4, byte_order);
        *offsetp += 4;
        f_which = tvb_get_uint32(tvb, *offsetp, byte_order);
        {
            static int* const which_bits [] = {
                &hf_x11_xkb_GetKbdByName_reply_KeyNames_which_mask_Keycodes,
                &hf_x11_xkb_GetKbdByName_reply_KeyNames_which_mask_Geometry,
                &hf_x11_xkb_GetKbdByName_reply_KeyNames_which_mask_Symbols,
                &hf_x11_xkb_GetKbdByName_reply_KeyNames_which_mask_PhysSymbols,
                &hf_x11_xkb_GetKbdByName_reply_KeyNames_which_mask_Types,
                &hf_x11_xkb_GetKbdByName_reply_KeyNames_which_mask_Compat,
                &hf_x11_xkb_GetKbdByName_reply_KeyNames_which_mask_KeyTypeNames,
                &hf_x11_xkb_GetKbdByName_reply_KeyNames_which_mask_KTLevelNames,
                &hf_x11_xkb_GetKbdByName_reply_KeyNames_which_mask_IndicatorNames,
                &hf_x11_xkb_GetKbdByName_reply_KeyNames_which_mask_KeyNames,
                &hf_x11_xkb_GetKbdByName_reply_KeyNames_which_mask_KeyAliases,
                &hf_x11_xkb_GetKbdByName_reply_KeyNames_which_mask_VirtualModNames,
                &hf_x11_xkb_GetKbdByName_reply_KeyNames_which_mask_GroupNames,
                &hf_x11_xkb_GetKbdByName_reply_KeyNames_which_mask_RGNames,
                NULL
            };
            proto_tree_add_bitmask(t,  tvb, *offsetp, hf_x11_xkb_GetKbdByName_reply_KeyNames_which, ett_x11_rectangle, which_bits, byte_order);
        }
        *offsetp += 4;
        proto_tree_add_item(t, hf_x11_xkb_GetKbdByName_reply_KeyNames_keyMinKeyCode, tvb, *offsetp, 1, byte_order);
        *offsetp += 1;
        proto_tree_add_item(t, hf_x11_xkb_GetKbdByName_reply_KeyNames_keyMaxKeyCode, tvb, *offsetp, 1, byte_order);
        *offsetp += 1;
        f_nTypes = tvb_get_uint8(tvb, *offsetp);
        proto_tree_add_item(t, hf_x11_xkb_GetKbdByName_reply_KeyNames_nTypes, tvb, *offsetp, 1, byte_order);
        *offsetp += 1;
        f_groupNames = tvb_get_uint8(tvb, *offsetp);
        {
            static int* const groupNames_bits [] = {
                &hf_x11_xkb_GetKbdByName_reply_KeyNames_groupNames_mask_Group1,
                &hf_x11_xkb_GetKbdByName_reply_KeyNames_groupNames_mask_Group2,
                &hf_x11_xkb_GetKbdByName_reply_KeyNames_groupNames_mask_Group3,
                &hf_x11_xkb_GetKbdByName_reply_KeyNames_groupNames_mask_Group4,
                NULL
            };
            proto_tree_add_bitmask(t,  tvb, *offsetp, hf_x11_xkb_GetKbdByName_reply_KeyNames_groupNames, ett_x11_rectangle, groupNames_bits, byte_order);
        }
        *offsetp += 1;
        f_virtualMods = tvb_get_uint16(tvb, *offsetp, byte_order);
        {
            static int* const virtualMods_bits [] = {
                &hf_x11_xkb_GetKbdByName_reply_KeyNames_virtualMods_mask_0,
                &hf_x11_xkb_GetKbdByName_reply_KeyNames_virtualMods_mask_1,
                &hf_x11_xkb_GetKbdByName_reply_KeyNames_virtualMods_mask_2,
                &hf_x11_xkb_GetKbdByName_reply_KeyNames_virtualMods_mask_3,
                &hf_x11_xkb_GetKbdByName_reply_KeyNames_virtualMods_mask_4,
                &hf_x11_xkb_GetKbdByName_reply_KeyNames_virtualMods_mask_5,
                &hf_x11_xkb_GetKbdByName_reply_KeyNames_virtualMods_mask_6,
                &hf_x11_xkb_GetKbdByName_reply_KeyNames_virtualMods_mask_7,
                &hf_x11_xkb_GetKbdByName_reply_KeyNames_virtualMods_mask_8,
                &hf_x11_xkb_GetKbdByName_reply_KeyNames_virtualMods_mask_9,
                &hf_x11_xkb_GetKbdByName_reply_KeyNames_virtualMods_mask_10,
                &hf_x11_xkb_GetKbdByName_reply_KeyNames_virtualMods_mask_11,
                &hf_x11_xkb_GetKbdByName_reply_KeyNames_virtualMods_mask_12,
                &hf_x11_xkb_GetKbdByName_reply_KeyNames_virtualMods_mask_13,
                &hf_x11_xkb_GetKbdByName_reply_KeyNames_virtualMods_mask_14,
                &hf_x11_xkb_GetKbdByName_reply_KeyNames_virtualMods_mask_15,
                NULL
            };
            proto_tree_add_bitmask(t,  tvb, *offsetp, hf_x11_xkb_GetKbdByName_reply_KeyNames_virtualMods, ett_x11_rectangle, virtualMods_bits, byte_order);
        }
        *offsetp += 2;
        proto_tree_add_item(t, hf_x11_xkb_GetKbdByName_reply_KeyNames_firstKey, tvb, *offsetp, 1, byte_order);
        *offsetp += 1;
        f_nKeys = tvb_get_uint8(tvb, *offsetp);
        proto_tree_add_item(t, hf_x11_xkb_GetKbdByName_reply_KeyNames_nKeys, tvb, *offsetp, 1, byte_order);
        *offsetp += 1;
        f_indicators = tvb_get_uint32(tvb, *offsetp, byte_order);
        proto_tree_add_item(t, hf_x11_xkb_GetKbdByName_reply_KeyNames_indicators, tvb, *offsetp, 4, byte_order);
        *offsetp += 4;
        f_nRadioGroups = tvb_get_uint8(tvb, *offsetp);
        proto_tree_add_item(t, hf_x11_xkb_GetKbdByName_reply_KeyNames_nRadioGroups, tvb, *offsetp, 1, byte_order);
        *offsetp += 1;
        f_nKeyAliases = tvb_get_uint8(tvb, *offsetp);
        proto_tree_add_item(t, hf_x11_xkb_GetKbdByName_reply_KeyNames_nKeyAliases, tvb, *offsetp, 1, byte_order);
        *offsetp += 1;
        proto_tree_add_item(t, hf_x11_xkb_GetKbdByName_reply_KeyNames_nKTLevels, tvb, *offsetp, 2, byte_order);
        *offsetp += 2;
        proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 4, ENC_NA);
        *offsetp += 4;
        if (f_which & (1U << 0)) {
            proto_tree_add_item(t, hf_x11_xkb_GetKbdByName_reply_KeyNames_Keycodes_keycodesName, tvb, *offsetp, 4, byte_order);
            *offsetp += 4;
        }
        if (f_which & (1U << 1)) {
            proto_tree_add_item(t, hf_x11_xkb_GetKbdByName_reply_KeyNames_Geometry_geometryName, tvb, *offsetp, 4, byte_order);
            *offsetp += 4;
        }
        if (f_which & (1U << 2)) {
            proto_tree_add_item(t, hf_x11_xkb_GetKbdByName_reply_KeyNames_Symbols_symbolsName, tvb, *offsetp, 4, byte_order);
            *offsetp += 4;
        }
        if (f_which & (1U << 3)) {
            proto_tree_add_item(t, hf_x11_xkb_GetKbdByName_reply_KeyNames_PhysSymbols_physSymbolsName, tvb, *offsetp, 4, byte_order);
            *offsetp += 4;
        }
        if (f_which & (1U << 4)) {
            proto_tree_add_item(t, hf_x11_xkb_GetKbdByName_reply_KeyNames_Types_typesName, tvb, *offsetp, 4, byte_order);
            *offsetp += 4;
        }
        if (f_which & (1U << 5)) {
            proto_tree_add_item(t, hf_x11_xkb_GetKbdByName_reply_KeyNames_Compat_compatName, tvb, *offsetp, 4, byte_order);
            *offsetp += 4;
        }
        if (f_which & (1U << 6)) {
            listOfCard32(tvb, offsetp, t, hf_x11_xkb_GetKbdByName_reply_KeyNames_KeyTypeNames_typeNames, hf_x11_xkb_GetKbdByName_reply_KeyNames_KeyTypeNames_typeNames_item, f_nTypes, byte_order);
        }
        if (f_which & (1U << 7)) {
            int sumof_nLevelsPerType = 0;
            {
                int i;
                for (i = 0; i < f_nTypes; i++) {
                    sumof_nLevelsPerType += tvb_get_uint8(tvb, *offsetp + i * 1);
                }
            }
            listOfByte(tvb, offsetp, t, hf_x11_xkb_GetKbdByName_reply_KeyNames_KTLevelNames_nLevelsPerType, f_nTypes, byte_order);
            if (*offsetp % 4) {
                proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, (4 - *offsetp % 4), ENC_NA);
                *offsetp += (4 - *offsetp % 4);
            }
            listOfCard32(tvb, offsetp, t, hf_x11_xkb_GetKbdByName_reply_KeyNames_KTLevelNames_ktLevelNames, hf_x11_xkb_GetKbdByName_reply_KeyNames_KTLevelNames_ktLevelNames_item, sumof_nLevelsPerType, byte_order);
        }
        if (f_which & (1U << 8)) {
            listOfCard32(tvb, offsetp, t, hf_x11_xkb_GetKbdByName_reply_KeyNames_IndicatorNames_indicatorNames, hf_x11_xkb_GetKbdByName_reply_KeyNames_IndicatorNames_indicatorNames_item, ws_count_ones(f_indicators), byte_order);
        }
        if (f_which & (1U << 11)) {
            listOfCard32(tvb, offsetp, t, hf_x11_xkb_GetKbdByName_reply_KeyNames_VirtualModNames_virtualModNames, hf_x11_xkb_GetKbdByName_reply_KeyNames_VirtualModNames_virtualModNames_item, ws_count_ones(f_virtualMods), byte_order);
        }
        if (f_which & (1U << 12)) {
            listOfCard32(tvb, offsetp, t, hf_x11_xkb_GetKbdByName_reply_KeyNames_GroupNames_groups, hf_x11_xkb_GetKbdByName_reply_KeyNames_GroupNames_groups_item, ws_count_ones(f_groupNames), byte_order);
        }
        if (f_which & (1U << 9)) {
            struct_xkb_KeyName(tvb, offsetp, t, byte_order, f_nKeys);
        }
        if (f_which & (1U << 10)) {
            struct_xkb_KeyAlias(tvb, offsetp, t, byte_order, f_nKeyAliases);
        }
        if (f_which & (1U << 13)) {
            listOfCard32(tvb, offsetp, t, hf_x11_xkb_GetKbdByName_reply_KeyNames_RGNames_radioGroupNames, hf_x11_xkb_GetKbdByName_reply_KeyNames_RGNames_radioGroupNames_item, f_nRadioGroups, byte_order);
        }
    }
    if (f_reported & (1U << 6)) {
        proto_tree_add_item(t, hf_x11_xkb_GetKbdByName_reply_Geometry_geometry_type, tvb, *offsetp, 1, byte_order);
        *offsetp += 1;
        proto_tree_add_item(t, hf_x11_xkb_GetKbdByName_reply_Geometry_geometryDeviceID, tvb, *offsetp, 1, byte_order);
        *offsetp += 1;
        proto_tree_add_item(t, hf_x11_xkb_GetKbdByName_reply_Geometry_geometry_sequence, tvb, *offsetp, 2, byte_order);
        *offsetp += 2;
        proto_tree_add_item(t, hf_x11_xkb_GetKbdByName_reply_Geometry_geometry_length, tvb, *offsetp, 4, byte_order);
        *offsetp += 4;
        proto_tree_add_item(t, hf_x11_xkb_GetKbdByName_reply_Geometry_name, tvb, *offsetp, 4, byte_order);
        *offsetp += 4;
        proto_tree_add_item(t, hf_x11_xkb_GetKbdByName_reply_Geometry_geometryFound, tvb, *offsetp, 1, byte_order);
        *offsetp += 1;
        proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
        *offsetp += 1;
        proto_tree_add_item(t, hf_x11_xkb_GetKbdByName_reply_Geometry_widthMM, tvb, *offsetp, 2, byte_order);
        *offsetp += 2;
        proto_tree_add_item(t, hf_x11_xkb_GetKbdByName_reply_Geometry_heightMM, tvb, *offsetp, 2, byte_order);
        *offsetp += 2;
        proto_tree_add_item(t, hf_x11_xkb_GetKbdByName_reply_Geometry_nProperties, tvb, *offsetp, 2, byte_order);
        *offsetp += 2;
        proto_tree_add_item(t, hf_x11_xkb_GetKbdByName_reply_Geometry_nColors, tvb, *offsetp, 2, byte_order);
        *offsetp += 2;
        proto_tree_add_item(t, hf_x11_xkb_GetKbdByName_reply_Geometry_nShapes, tvb, *offsetp, 2, byte_order);
        *offsetp += 2;
        proto_tree_add_item(t, hf_x11_xkb_GetKbdByName_reply_Geometry_nSections, tvb, *offsetp, 2, byte_order);
        *offsetp += 2;
        proto_tree_add_item(t, hf_x11_xkb_GetKbdByName_reply_Geometry_nDoodads, tvb, *offsetp, 2, byte_order);
        *offsetp += 2;
        proto_tree_add_item(t, hf_x11_xkb_GetKbdByName_reply_Geometry_nKeyAliases, tvb, *offsetp, 2, byte_order);
        *offsetp += 2;
        proto_tree_add_item(t, hf_x11_xkb_GetKbdByName_reply_Geometry_baseColorNdx, tvb, *offsetp, 1, byte_order);
        *offsetp += 1;
        proto_tree_add_item(t, hf_x11_xkb_GetKbdByName_reply_Geometry_labelColorNdx, tvb, *offsetp, 1, byte_order);
        *offsetp += 1;
        struct_xkb_CountedString16(tvb, offsetp, t, byte_order, 1);
    }
}

static void xkbGetDeviceInfo(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_xkb_GetDeviceInfo_deviceSpec, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    {
        static int* const wanted_bits [] = {
        &hf_x11_xkb_GetDeviceInfo_wanted_mask_Keyboards,
        &hf_x11_xkb_GetDeviceInfo_wanted_mask_ButtonActions,
        &hf_x11_xkb_GetDeviceInfo_wanted_mask_IndicatorNames,
        &hf_x11_xkb_GetDeviceInfo_wanted_mask_IndicatorMaps,
        &hf_x11_xkb_GetDeviceInfo_wanted_mask_IndicatorState,
        NULL
        };
        proto_tree_add_bitmask(t,  tvb, *offsetp, hf_x11_xkb_GetDeviceInfo_wanted, ett_x11_rectangle, wanted_bits, byte_order);
    }
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_xkb_GetDeviceInfo_allButtons, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_xkb_GetDeviceInfo_firstButton, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_xkb_GetDeviceInfo_nButtons, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    field16(tvb, offsetp, t, hf_x11_xkb_GetDeviceInfo_ledClass, byte_order);
    field16(tvb, offsetp, t, hf_x11_xkb_GetDeviceInfo_ledID, byte_order);
}
static void xkbGetDeviceInfo_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;
    int f_nDeviceLedFBs;
    int f_nBtnsRtrn;
    int f_nameLen;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-GetDeviceInfo");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_xkb_GetDeviceInfo_reply_deviceID, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (xkb-GetDeviceInfo)", sequence_number);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    {
        static int* const present_bits [] = {
        &hf_x11_xkb_GetDeviceInfo_reply_present_mask_Keyboards,
        &hf_x11_xkb_GetDeviceInfo_reply_present_mask_ButtonActions,
        &hf_x11_xkb_GetDeviceInfo_reply_present_mask_IndicatorNames,
        &hf_x11_xkb_GetDeviceInfo_reply_present_mask_IndicatorMaps,
        &hf_x11_xkb_GetDeviceInfo_reply_present_mask_IndicatorState,
        NULL
        };
        proto_tree_add_bitmask(t,  tvb, *offsetp, hf_x11_xkb_GetDeviceInfo_reply_present, ett_x11_rectangle, present_bits, byte_order);
    }
    *offsetp += 2;
    {
        static int* const supported_bits [] = {
        &hf_x11_xkb_GetDeviceInfo_reply_supported_mask_Keyboards,
        &hf_x11_xkb_GetDeviceInfo_reply_supported_mask_ButtonActions,
        &hf_x11_xkb_GetDeviceInfo_reply_supported_mask_IndicatorNames,
        &hf_x11_xkb_GetDeviceInfo_reply_supported_mask_IndicatorMaps,
        &hf_x11_xkb_GetDeviceInfo_reply_supported_mask_IndicatorState,
        NULL
        };
        proto_tree_add_bitmask(t,  tvb, *offsetp, hf_x11_xkb_GetDeviceInfo_reply_supported, ett_x11_rectangle, supported_bits, byte_order);
    }
    *offsetp += 2;
    {
        static int* const unsupported_bits [] = {
        &hf_x11_xkb_GetDeviceInfo_reply_unsupported_mask_Keyboards,
        &hf_x11_xkb_GetDeviceInfo_reply_unsupported_mask_ButtonActions,
        &hf_x11_xkb_GetDeviceInfo_reply_unsupported_mask_IndicatorNames,
        &hf_x11_xkb_GetDeviceInfo_reply_unsupported_mask_IndicatorMaps,
        &hf_x11_xkb_GetDeviceInfo_reply_unsupported_mask_IndicatorState,
        NULL
        };
        proto_tree_add_bitmask(t,  tvb, *offsetp, hf_x11_xkb_GetDeviceInfo_reply_unsupported, ett_x11_rectangle, unsupported_bits, byte_order);
    }
    *offsetp += 2;
    f_nDeviceLedFBs = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_xkb_GetDeviceInfo_reply_nDeviceLedFBs, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_xkb_GetDeviceInfo_reply_firstBtnWanted, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_xkb_GetDeviceInfo_reply_nBtnsWanted, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_xkb_GetDeviceInfo_reply_firstBtnRtrn, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    f_nBtnsRtrn = tvb_get_uint8(tvb, *offsetp);
    proto_tree_add_item(t, hf_x11_xkb_GetDeviceInfo_reply_nBtnsRtrn, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_xkb_GetDeviceInfo_reply_totalBtns, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_xkb_GetDeviceInfo_reply_hasOwnState, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    field16(tvb, offsetp, t, hf_x11_xkb_GetDeviceInfo_reply_dfltKbdFB, byte_order);
    field16(tvb, offsetp, t, hf_x11_xkb_GetDeviceInfo_reply_dfltLedFB, byte_order);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 2, ENC_NA);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_xkb_GetDeviceInfo_reply_devType, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    f_nameLen = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_xkb_GetDeviceInfo_reply_nameLen, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    listOfByte(tvb, offsetp, t, hf_x11_xkb_GetDeviceInfo_reply_name, f_nameLen, byte_order);
    if (*offsetp % 4) {
        proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, (4 - *offsetp % 4), ENC_NA);
        *offsetp += (4 - *offsetp % 4);
    }
    struct_xkb_Action(tvb, offsetp, t, byte_order, f_nBtnsRtrn);
    struct_xkb_DeviceLedInfo(tvb, offsetp, t, byte_order, f_nDeviceLedFBs);
}

static void xkbSetDeviceInfo(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    int f_nBtns;
    int f_nDeviceLedFBs;
    proto_tree_add_item(t, hf_x11_xkb_SetDeviceInfo_deviceSpec, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_xkb_SetDeviceInfo_firstBtn, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    f_nBtns = tvb_get_uint8(tvb, *offsetp);
    proto_tree_add_item(t, hf_x11_xkb_SetDeviceInfo_nBtns, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    {
        static int* const change_bits [] = {
        &hf_x11_xkb_SetDeviceInfo_change_mask_Keyboards,
        &hf_x11_xkb_SetDeviceInfo_change_mask_ButtonActions,
        &hf_x11_xkb_SetDeviceInfo_change_mask_IndicatorNames,
        &hf_x11_xkb_SetDeviceInfo_change_mask_IndicatorMaps,
        &hf_x11_xkb_SetDeviceInfo_change_mask_IndicatorState,
        NULL
        };
        proto_tree_add_bitmask(t,  tvb, *offsetp, hf_x11_xkb_SetDeviceInfo_change, ett_x11_rectangle, change_bits, byte_order);
    }
    *offsetp += 2;
    f_nDeviceLedFBs = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_xkb_SetDeviceInfo_nDeviceLedFBs, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    struct_xkb_Action(tvb, offsetp, t, byte_order, f_nBtns);
    length -= f_nBtns * 8;
    struct_xkb_DeviceLedInfo(tvb, offsetp, t, byte_order, f_nDeviceLedFBs);
    length -= f_nDeviceLedFBs * 0;
}

static void xkbSetDebuggingFlags(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    int f_msgLength;
    f_msgLength = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_xkb_SetDebuggingFlags_msgLength, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 2, ENC_NA);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_xkb_SetDebuggingFlags_affectFlags, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xkb_SetDebuggingFlags_flags, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xkb_SetDebuggingFlags_affectCtrls, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xkb_SetDebuggingFlags_ctrls, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    listOfByte(tvb, offsetp, t, hf_x11_xkb_SetDebuggingFlags_message, f_msgLength, byte_order);
    length -= f_msgLength * 1;
}
static void xkbSetDebuggingFlags_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-SetDebuggingFlags");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (xkb-SetDebuggingFlags)", sequence_number);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xkb_SetDebuggingFlags_reply_currentFlags, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xkb_SetDebuggingFlags_reply_currentCtrls, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xkb_SetDebuggingFlags_reply_supportedFlags, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xkb_SetDebuggingFlags_reply_supportedCtrls, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 8, ENC_NA);
    *offsetp += 8;
}

static void xkbMapNotify(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order)
{
    proto_tree_add_item(t, hf_x11_xkb_MapNotify_xkbType, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    CARD16(event_sequencenumber);
    proto_tree_add_item(t, hf_x11_xkb_MapNotify_time, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xkb_MapNotify_deviceID, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_xkb_MapNotify_ptrBtnActions, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    {
        static int* const changed_bits [] = {
        &hf_x11_xkb_MapNotify_changed_mask_KeyTypes,
        &hf_x11_xkb_MapNotify_changed_mask_KeySyms,
        &hf_x11_xkb_MapNotify_changed_mask_ModifierMap,
        &hf_x11_xkb_MapNotify_changed_mask_ExplicitComponents,
        &hf_x11_xkb_MapNotify_changed_mask_KeyActions,
        &hf_x11_xkb_MapNotify_changed_mask_KeyBehaviors,
        &hf_x11_xkb_MapNotify_changed_mask_VirtualMods,
        &hf_x11_xkb_MapNotify_changed_mask_VirtualModMap,
        NULL
        };
        proto_tree_add_bitmask(t,  tvb, *offsetp, hf_x11_xkb_MapNotify_changed, ett_x11_rectangle, changed_bits, byte_order);
    }
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_xkb_MapNotify_minKeyCode, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_xkb_MapNotify_maxKeyCode, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_xkb_MapNotify_firstType, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_xkb_MapNotify_nTypes, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_xkb_MapNotify_firstKeySym, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_xkb_MapNotify_nKeySyms, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_xkb_MapNotify_firstKeyAct, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_xkb_MapNotify_nKeyActs, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_xkb_MapNotify_firstKeyBehavior, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_xkb_MapNotify_nKeyBehavior, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_xkb_MapNotify_firstKeyExplicit, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_xkb_MapNotify_nKeyExplicit, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_xkb_MapNotify_firstModMapKey, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_xkb_MapNotify_nModMapKeys, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_xkb_MapNotify_firstVModMapKey, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_xkb_MapNotify_nVModMapKeys, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    {
        static int* const virtualMods_bits [] = {
        &hf_x11_xkb_MapNotify_virtualMods_mask_0,
        &hf_x11_xkb_MapNotify_virtualMods_mask_1,
        &hf_x11_xkb_MapNotify_virtualMods_mask_2,
        &hf_x11_xkb_MapNotify_virtualMods_mask_3,
        &hf_x11_xkb_MapNotify_virtualMods_mask_4,
        &hf_x11_xkb_MapNotify_virtualMods_mask_5,
        &hf_x11_xkb_MapNotify_virtualMods_mask_6,
        &hf_x11_xkb_MapNotify_virtualMods_mask_7,
        &hf_x11_xkb_MapNotify_virtualMods_mask_8,
        &hf_x11_xkb_MapNotify_virtualMods_mask_9,
        &hf_x11_xkb_MapNotify_virtualMods_mask_10,
        &hf_x11_xkb_MapNotify_virtualMods_mask_11,
        &hf_x11_xkb_MapNotify_virtualMods_mask_12,
        &hf_x11_xkb_MapNotify_virtualMods_mask_13,
        &hf_x11_xkb_MapNotify_virtualMods_mask_14,
        &hf_x11_xkb_MapNotify_virtualMods_mask_15,
        NULL
        };
        proto_tree_add_bitmask(t,  tvb, *offsetp, hf_x11_xkb_MapNotify_virtualMods, ett_x11_rectangle, virtualMods_bits, byte_order);
    }
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 2, ENC_NA);
    *offsetp += 2;
}


static void xkbStateNotify(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order)
{
    proto_tree_add_item(t, hf_x11_xkb_StateNotify_xkbType, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    CARD16(event_sequencenumber);
    proto_tree_add_item(t, hf_x11_xkb_StateNotify_time, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xkb_StateNotify_deviceID, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    {
        static int* const mods_bits [] = {
        &hf_x11_xkb_StateNotify_mods_mask_Shift,
        &hf_x11_xkb_StateNotify_mods_mask_Lock,
        &hf_x11_xkb_StateNotify_mods_mask_Control,
        &hf_x11_xkb_StateNotify_mods_mask_1,
        &hf_x11_xkb_StateNotify_mods_mask_2,
        &hf_x11_xkb_StateNotify_mods_mask_3,
        &hf_x11_xkb_StateNotify_mods_mask_4,
        &hf_x11_xkb_StateNotify_mods_mask_5,
        &hf_x11_xkb_StateNotify_mods_mask_Any,
        NULL
        };
        proto_tree_add_bitmask(t,  tvb, *offsetp, hf_x11_xkb_StateNotify_mods, ett_x11_rectangle, mods_bits, byte_order);
    }
    *offsetp += 1;
    {
        static int* const baseMods_bits [] = {
        &hf_x11_xkb_StateNotify_baseMods_mask_Shift,
        &hf_x11_xkb_StateNotify_baseMods_mask_Lock,
        &hf_x11_xkb_StateNotify_baseMods_mask_Control,
        &hf_x11_xkb_StateNotify_baseMods_mask_1,
        &hf_x11_xkb_StateNotify_baseMods_mask_2,
        &hf_x11_xkb_StateNotify_baseMods_mask_3,
        &hf_x11_xkb_StateNotify_baseMods_mask_4,
        &hf_x11_xkb_StateNotify_baseMods_mask_5,
        &hf_x11_xkb_StateNotify_baseMods_mask_Any,
        NULL
        };
        proto_tree_add_bitmask(t,  tvb, *offsetp, hf_x11_xkb_StateNotify_baseMods, ett_x11_rectangle, baseMods_bits, byte_order);
    }
    *offsetp += 1;
    {
        static int* const latchedMods_bits [] = {
        &hf_x11_xkb_StateNotify_latchedMods_mask_Shift,
        &hf_x11_xkb_StateNotify_latchedMods_mask_Lock,
        &hf_x11_xkb_StateNotify_latchedMods_mask_Control,
        &hf_x11_xkb_StateNotify_latchedMods_mask_1,
        &hf_x11_xkb_StateNotify_latchedMods_mask_2,
        &hf_x11_xkb_StateNotify_latchedMods_mask_3,
        &hf_x11_xkb_StateNotify_latchedMods_mask_4,
        &hf_x11_xkb_StateNotify_latchedMods_mask_5,
        &hf_x11_xkb_StateNotify_latchedMods_mask_Any,
        NULL
        };
        proto_tree_add_bitmask(t,  tvb, *offsetp, hf_x11_xkb_StateNotify_latchedMods, ett_x11_rectangle, latchedMods_bits, byte_order);
    }
    *offsetp += 1;
    {
        static int* const lockedMods_bits [] = {
        &hf_x11_xkb_StateNotify_lockedMods_mask_Shift,
        &hf_x11_xkb_StateNotify_lockedMods_mask_Lock,
        &hf_x11_xkb_StateNotify_lockedMods_mask_Control,
        &hf_x11_xkb_StateNotify_lockedMods_mask_1,
        &hf_x11_xkb_StateNotify_lockedMods_mask_2,
        &hf_x11_xkb_StateNotify_lockedMods_mask_3,
        &hf_x11_xkb_StateNotify_lockedMods_mask_4,
        &hf_x11_xkb_StateNotify_lockedMods_mask_5,
        &hf_x11_xkb_StateNotify_lockedMods_mask_Any,
        NULL
        };
        proto_tree_add_bitmask(t,  tvb, *offsetp, hf_x11_xkb_StateNotify_lockedMods, ett_x11_rectangle, lockedMods_bits, byte_order);
    }
    *offsetp += 1;
    field8(tvb, offsetp, t, hf_x11_xkb_StateNotify_group, byte_order);
    proto_tree_add_item(t, hf_x11_xkb_StateNotify_baseGroup, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_xkb_StateNotify_latchedGroup, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    field8(tvb, offsetp, t, hf_x11_xkb_StateNotify_lockedGroup, byte_order);
    {
        static int* const compatState_bits [] = {
        &hf_x11_xkb_StateNotify_compatState_mask_Shift,
        &hf_x11_xkb_StateNotify_compatState_mask_Lock,
        &hf_x11_xkb_StateNotify_compatState_mask_Control,
        &hf_x11_xkb_StateNotify_compatState_mask_1,
        &hf_x11_xkb_StateNotify_compatState_mask_2,
        &hf_x11_xkb_StateNotify_compatState_mask_3,
        &hf_x11_xkb_StateNotify_compatState_mask_4,
        &hf_x11_xkb_StateNotify_compatState_mask_5,
        &hf_x11_xkb_StateNotify_compatState_mask_Any,
        NULL
        };
        proto_tree_add_bitmask(t,  tvb, *offsetp, hf_x11_xkb_StateNotify_compatState, ett_x11_rectangle, compatState_bits, byte_order);
    }
    *offsetp += 1;
    {
        static int* const grabMods_bits [] = {
        &hf_x11_xkb_StateNotify_grabMods_mask_Shift,
        &hf_x11_xkb_StateNotify_grabMods_mask_Lock,
        &hf_x11_xkb_StateNotify_grabMods_mask_Control,
        &hf_x11_xkb_StateNotify_grabMods_mask_1,
        &hf_x11_xkb_StateNotify_grabMods_mask_2,
        &hf_x11_xkb_StateNotify_grabMods_mask_3,
        &hf_x11_xkb_StateNotify_grabMods_mask_4,
        &hf_x11_xkb_StateNotify_grabMods_mask_5,
        &hf_x11_xkb_StateNotify_grabMods_mask_Any,
        NULL
        };
        proto_tree_add_bitmask(t,  tvb, *offsetp, hf_x11_xkb_StateNotify_grabMods, ett_x11_rectangle, grabMods_bits, byte_order);
    }
    *offsetp += 1;
    {
        static int* const compatGrabMods_bits [] = {
        &hf_x11_xkb_StateNotify_compatGrabMods_mask_Shift,
        &hf_x11_xkb_StateNotify_compatGrabMods_mask_Lock,
        &hf_x11_xkb_StateNotify_compatGrabMods_mask_Control,
        &hf_x11_xkb_StateNotify_compatGrabMods_mask_1,
        &hf_x11_xkb_StateNotify_compatGrabMods_mask_2,
        &hf_x11_xkb_StateNotify_compatGrabMods_mask_3,
        &hf_x11_xkb_StateNotify_compatGrabMods_mask_4,
        &hf_x11_xkb_StateNotify_compatGrabMods_mask_5,
        &hf_x11_xkb_StateNotify_compatGrabMods_mask_Any,
        NULL
        };
        proto_tree_add_bitmask(t,  tvb, *offsetp, hf_x11_xkb_StateNotify_compatGrabMods, ett_x11_rectangle, compatGrabMods_bits, byte_order);
    }
    *offsetp += 1;
    {
        static int* const lookupMods_bits [] = {
        &hf_x11_xkb_StateNotify_lookupMods_mask_Shift,
        &hf_x11_xkb_StateNotify_lookupMods_mask_Lock,
        &hf_x11_xkb_StateNotify_lookupMods_mask_Control,
        &hf_x11_xkb_StateNotify_lookupMods_mask_1,
        &hf_x11_xkb_StateNotify_lookupMods_mask_2,
        &hf_x11_xkb_StateNotify_lookupMods_mask_3,
        &hf_x11_xkb_StateNotify_lookupMods_mask_4,
        &hf_x11_xkb_StateNotify_lookupMods_mask_5,
        &hf_x11_xkb_StateNotify_lookupMods_mask_Any,
        NULL
        };
        proto_tree_add_bitmask(t,  tvb, *offsetp, hf_x11_xkb_StateNotify_lookupMods, ett_x11_rectangle, lookupMods_bits, byte_order);
    }
    *offsetp += 1;
    {
        static int* const compatLoockupMods_bits [] = {
        &hf_x11_xkb_StateNotify_compatLoockupMods_mask_Shift,
        &hf_x11_xkb_StateNotify_compatLoockupMods_mask_Lock,
        &hf_x11_xkb_StateNotify_compatLoockupMods_mask_Control,
        &hf_x11_xkb_StateNotify_compatLoockupMods_mask_1,
        &hf_x11_xkb_StateNotify_compatLoockupMods_mask_2,
        &hf_x11_xkb_StateNotify_compatLoockupMods_mask_3,
        &hf_x11_xkb_StateNotify_compatLoockupMods_mask_4,
        &hf_x11_xkb_StateNotify_compatLoockupMods_mask_5,
        &hf_x11_xkb_StateNotify_compatLoockupMods_mask_Any,
        NULL
        };
        proto_tree_add_bitmask(t,  tvb, *offsetp, hf_x11_xkb_StateNotify_compatLoockupMods, ett_x11_rectangle, compatLoockupMods_bits, byte_order);
    }
    *offsetp += 1;
    {
        static int* const ptrBtnState_bits [] = {
        &hf_x11_xkb_StateNotify_ptrBtnState_mask_Shift,
        &hf_x11_xkb_StateNotify_ptrBtnState_mask_Lock,
        &hf_x11_xkb_StateNotify_ptrBtnState_mask_Control,
        &hf_x11_xkb_StateNotify_ptrBtnState_mask_Mod1,
        &hf_x11_xkb_StateNotify_ptrBtnState_mask_Mod2,
        &hf_x11_xkb_StateNotify_ptrBtnState_mask_Mod3,
        &hf_x11_xkb_StateNotify_ptrBtnState_mask_Mod4,
        &hf_x11_xkb_StateNotify_ptrBtnState_mask_Mod5,
        &hf_x11_xkb_StateNotify_ptrBtnState_mask_Button1,
        &hf_x11_xkb_StateNotify_ptrBtnState_mask_Button2,
        &hf_x11_xkb_StateNotify_ptrBtnState_mask_Button3,
        &hf_x11_xkb_StateNotify_ptrBtnState_mask_Button4,
        &hf_x11_xkb_StateNotify_ptrBtnState_mask_Button5,
        NULL
        };
        proto_tree_add_bitmask(t,  tvb, *offsetp, hf_x11_xkb_StateNotify_ptrBtnState, ett_x11_rectangle, ptrBtnState_bits, byte_order);
    }
    *offsetp += 2;
    {
        static int* const changed_bits [] = {
        &hf_x11_xkb_StateNotify_changed_mask_ModifierState,
        &hf_x11_xkb_StateNotify_changed_mask_ModifierBase,
        &hf_x11_xkb_StateNotify_changed_mask_ModifierLatch,
        &hf_x11_xkb_StateNotify_changed_mask_ModifierLock,
        &hf_x11_xkb_StateNotify_changed_mask_GroupState,
        &hf_x11_xkb_StateNotify_changed_mask_GroupBase,
        &hf_x11_xkb_StateNotify_changed_mask_GroupLatch,
        &hf_x11_xkb_StateNotify_changed_mask_GroupLock,
        &hf_x11_xkb_StateNotify_changed_mask_CompatState,
        &hf_x11_xkb_StateNotify_changed_mask_GrabMods,
        &hf_x11_xkb_StateNotify_changed_mask_CompatGrabMods,
        &hf_x11_xkb_StateNotify_changed_mask_LookupMods,
        &hf_x11_xkb_StateNotify_changed_mask_CompatLookupMods,
        &hf_x11_xkb_StateNotify_changed_mask_PointerButtons,
        NULL
        };
        proto_tree_add_bitmask(t,  tvb, *offsetp, hf_x11_xkb_StateNotify_changed, ett_x11_rectangle, changed_bits, byte_order);
    }
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_xkb_StateNotify_keycode, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_xkb_StateNotify_eventType, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_xkb_StateNotify_requestMajor, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_xkb_StateNotify_requestMinor, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
}


static void xkbControlsNotify(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order)
{
    proto_tree_add_item(t, hf_x11_xkb_ControlsNotify_xkbType, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    CARD16(event_sequencenumber);
    proto_tree_add_item(t, hf_x11_xkb_ControlsNotify_time, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xkb_ControlsNotify_deviceID, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_xkb_ControlsNotify_numGroups, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 2, ENC_NA);
    *offsetp += 2;
    {
        static int* const changedControls_bits [] = {
        &hf_x11_xkb_ControlsNotify_changedControls_mask_GroupsWrap,
        &hf_x11_xkb_ControlsNotify_changedControls_mask_InternalMods,
        &hf_x11_xkb_ControlsNotify_changedControls_mask_IgnoreLockMods,
        &hf_x11_xkb_ControlsNotify_changedControls_mask_PerKeyRepeat,
        &hf_x11_xkb_ControlsNotify_changedControls_mask_ControlsEnabled,
        NULL
        };
        proto_tree_add_bitmask(t,  tvb, *offsetp, hf_x11_xkb_ControlsNotify_changedControls, ett_x11_rectangle, changedControls_bits, byte_order);
    }
    *offsetp += 4;
    {
        static int* const enabledControls_bits [] = {
        &hf_x11_xkb_ControlsNotify_enabledControls_mask_RepeatKeys,
        &hf_x11_xkb_ControlsNotify_enabledControls_mask_SlowKeys,
        &hf_x11_xkb_ControlsNotify_enabledControls_mask_BounceKeys,
        &hf_x11_xkb_ControlsNotify_enabledControls_mask_StickyKeys,
        &hf_x11_xkb_ControlsNotify_enabledControls_mask_MouseKeys,
        &hf_x11_xkb_ControlsNotify_enabledControls_mask_MouseKeysAccel,
        &hf_x11_xkb_ControlsNotify_enabledControls_mask_AccessXKeys,
        &hf_x11_xkb_ControlsNotify_enabledControls_mask_AccessXTimeoutMask,
        &hf_x11_xkb_ControlsNotify_enabledControls_mask_AccessXFeedbackMask,
        &hf_x11_xkb_ControlsNotify_enabledControls_mask_AudibleBellMask,
        &hf_x11_xkb_ControlsNotify_enabledControls_mask_Overlay1Mask,
        &hf_x11_xkb_ControlsNotify_enabledControls_mask_Overlay2Mask,
        &hf_x11_xkb_ControlsNotify_enabledControls_mask_IgnoreGroupLockMask,
        NULL
        };
        proto_tree_add_bitmask(t,  tvb, *offsetp, hf_x11_xkb_ControlsNotify_enabledControls, ett_x11_rectangle, enabledControls_bits, byte_order);
    }
    *offsetp += 4;
    {
        static int* const enabledControlChanges_bits [] = {
        &hf_x11_xkb_ControlsNotify_enabledControlChanges_mask_RepeatKeys,
        &hf_x11_xkb_ControlsNotify_enabledControlChanges_mask_SlowKeys,
        &hf_x11_xkb_ControlsNotify_enabledControlChanges_mask_BounceKeys,
        &hf_x11_xkb_ControlsNotify_enabledControlChanges_mask_StickyKeys,
        &hf_x11_xkb_ControlsNotify_enabledControlChanges_mask_MouseKeys,
        &hf_x11_xkb_ControlsNotify_enabledControlChanges_mask_MouseKeysAccel,
        &hf_x11_xkb_ControlsNotify_enabledControlChanges_mask_AccessXKeys,
        &hf_x11_xkb_ControlsNotify_enabledControlChanges_mask_AccessXTimeoutMask,
        &hf_x11_xkb_ControlsNotify_enabledControlChanges_mask_AccessXFeedbackMask,
        &hf_x11_xkb_ControlsNotify_enabledControlChanges_mask_AudibleBellMask,
        &hf_x11_xkb_ControlsNotify_enabledControlChanges_mask_Overlay1Mask,
        &hf_x11_xkb_ControlsNotify_enabledControlChanges_mask_Overlay2Mask,
        &hf_x11_xkb_ControlsNotify_enabledControlChanges_mask_IgnoreGroupLockMask,
        NULL
        };
        proto_tree_add_bitmask(t,  tvb, *offsetp, hf_x11_xkb_ControlsNotify_enabledControlChanges, ett_x11_rectangle, enabledControlChanges_bits, byte_order);
    }
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xkb_ControlsNotify_keycode, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_xkb_ControlsNotify_eventType, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_xkb_ControlsNotify_requestMajor, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_xkb_ControlsNotify_requestMinor, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 4, ENC_NA);
    *offsetp += 4;
}


static void xkbIndicatorStateNotify(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order)
{
    proto_tree_add_item(t, hf_x11_xkb_IndicatorStateNotify_xkbType, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    CARD16(event_sequencenumber);
    proto_tree_add_item(t, hf_x11_xkb_IndicatorStateNotify_time, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xkb_IndicatorStateNotify_deviceID, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 3, ENC_NA);
    *offsetp += 3;
    proto_tree_add_item(t, hf_x11_xkb_IndicatorStateNotify_state, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xkb_IndicatorStateNotify_stateChanged, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 12, ENC_NA);
    *offsetp += 12;
}


static void xkbIndicatorMapNotify(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order)
{
    proto_tree_add_item(t, hf_x11_xkb_IndicatorMapNotify_xkbType, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    CARD16(event_sequencenumber);
    proto_tree_add_item(t, hf_x11_xkb_IndicatorMapNotify_time, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xkb_IndicatorMapNotify_deviceID, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 3, ENC_NA);
    *offsetp += 3;
    proto_tree_add_item(t, hf_x11_xkb_IndicatorMapNotify_state, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xkb_IndicatorMapNotify_mapChanged, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 12, ENC_NA);
    *offsetp += 12;
}


static void xkbNamesNotify(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order)
{
    proto_tree_add_item(t, hf_x11_xkb_NamesNotify_xkbType, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    CARD16(event_sequencenumber);
    proto_tree_add_item(t, hf_x11_xkb_NamesNotify_time, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xkb_NamesNotify_deviceID, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    {
        static int* const changed_bits [] = {
        &hf_x11_xkb_NamesNotify_changed_mask_Keycodes,
        &hf_x11_xkb_NamesNotify_changed_mask_Geometry,
        &hf_x11_xkb_NamesNotify_changed_mask_Symbols,
        &hf_x11_xkb_NamesNotify_changed_mask_PhysSymbols,
        &hf_x11_xkb_NamesNotify_changed_mask_Types,
        &hf_x11_xkb_NamesNotify_changed_mask_Compat,
        &hf_x11_xkb_NamesNotify_changed_mask_KeyTypeNames,
        &hf_x11_xkb_NamesNotify_changed_mask_KTLevelNames,
        &hf_x11_xkb_NamesNotify_changed_mask_IndicatorNames,
        &hf_x11_xkb_NamesNotify_changed_mask_KeyNames,
        &hf_x11_xkb_NamesNotify_changed_mask_KeyAliases,
        &hf_x11_xkb_NamesNotify_changed_mask_VirtualModNames,
        &hf_x11_xkb_NamesNotify_changed_mask_GroupNames,
        &hf_x11_xkb_NamesNotify_changed_mask_RGNames,
        NULL
        };
        proto_tree_add_bitmask(t,  tvb, *offsetp, hf_x11_xkb_NamesNotify_changed, ett_x11_rectangle, changed_bits, byte_order);
    }
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_xkb_NamesNotify_firstType, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_xkb_NamesNotify_nTypes, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_xkb_NamesNotify_firstLevelName, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_xkb_NamesNotify_nLevelNames, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_xkb_NamesNotify_nRadioGroups, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_xkb_NamesNotify_nKeyAliases, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    {
        static int* const changedGroupNames_bits [] = {
        &hf_x11_xkb_NamesNotify_changedGroupNames_mask_Group1,
        &hf_x11_xkb_NamesNotify_changedGroupNames_mask_Group2,
        &hf_x11_xkb_NamesNotify_changedGroupNames_mask_Group3,
        &hf_x11_xkb_NamesNotify_changedGroupNames_mask_Group4,
        NULL
        };
        proto_tree_add_bitmask(t,  tvb, *offsetp, hf_x11_xkb_NamesNotify_changedGroupNames, ett_x11_rectangle, changedGroupNames_bits, byte_order);
    }
    *offsetp += 1;
    {
        static int* const changedVirtualMods_bits [] = {
        &hf_x11_xkb_NamesNotify_changedVirtualMods_mask_0,
        &hf_x11_xkb_NamesNotify_changedVirtualMods_mask_1,
        &hf_x11_xkb_NamesNotify_changedVirtualMods_mask_2,
        &hf_x11_xkb_NamesNotify_changedVirtualMods_mask_3,
        &hf_x11_xkb_NamesNotify_changedVirtualMods_mask_4,
        &hf_x11_xkb_NamesNotify_changedVirtualMods_mask_5,
        &hf_x11_xkb_NamesNotify_changedVirtualMods_mask_6,
        &hf_x11_xkb_NamesNotify_changedVirtualMods_mask_7,
        &hf_x11_xkb_NamesNotify_changedVirtualMods_mask_8,
        &hf_x11_xkb_NamesNotify_changedVirtualMods_mask_9,
        &hf_x11_xkb_NamesNotify_changedVirtualMods_mask_10,
        &hf_x11_xkb_NamesNotify_changedVirtualMods_mask_11,
        &hf_x11_xkb_NamesNotify_changedVirtualMods_mask_12,
        &hf_x11_xkb_NamesNotify_changedVirtualMods_mask_13,
        &hf_x11_xkb_NamesNotify_changedVirtualMods_mask_14,
        &hf_x11_xkb_NamesNotify_changedVirtualMods_mask_15,
        NULL
        };
        proto_tree_add_bitmask(t,  tvb, *offsetp, hf_x11_xkb_NamesNotify_changedVirtualMods, ett_x11_rectangle, changedVirtualMods_bits, byte_order);
    }
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_xkb_NamesNotify_firstKey, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_xkb_NamesNotify_nKeys, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_xkb_NamesNotify_changedIndicators, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 4, ENC_NA);
    *offsetp += 4;
}


static void xkbCompatMapNotify(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order)
{
    proto_tree_add_item(t, hf_x11_xkb_CompatMapNotify_xkbType, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    CARD16(event_sequencenumber);
    proto_tree_add_item(t, hf_x11_xkb_CompatMapNotify_time, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xkb_CompatMapNotify_deviceID, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    {
        static int* const changedGroups_bits [] = {
        &hf_x11_xkb_CompatMapNotify_changedGroups_mask_Group1,
        &hf_x11_xkb_CompatMapNotify_changedGroups_mask_Group2,
        &hf_x11_xkb_CompatMapNotify_changedGroups_mask_Group3,
        &hf_x11_xkb_CompatMapNotify_changedGroups_mask_Group4,
        NULL
        };
        proto_tree_add_bitmask(t,  tvb, *offsetp, hf_x11_xkb_CompatMapNotify_changedGroups, ett_x11_rectangle, changedGroups_bits, byte_order);
    }
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_xkb_CompatMapNotify_firstSI, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_xkb_CompatMapNotify_nSI, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_xkb_CompatMapNotify_nTotalSI, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 16, ENC_NA);
    *offsetp += 16;
}


static void xkbBellNotify(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order)
{
    proto_tree_add_item(t, hf_x11_xkb_BellNotify_xkbType, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    CARD16(event_sequencenumber);
    proto_tree_add_item(t, hf_x11_xkb_BellNotify_time, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xkb_BellNotify_deviceID, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    field8(tvb, offsetp, t, hf_x11_xkb_BellNotify_bellClass, byte_order);
    proto_tree_add_item(t, hf_x11_xkb_BellNotify_bellID, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_xkb_BellNotify_percent, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_xkb_BellNotify_pitch, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_xkb_BellNotify_duration, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_xkb_BellNotify_name, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xkb_BellNotify_window, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xkb_BellNotify_eventOnly, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 7, ENC_NA);
    *offsetp += 7;
}


static void xkbActionMessage(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order)
{
    proto_tree_add_item(t, hf_x11_xkb_ActionMessage_xkbType, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    CARD16(event_sequencenumber);
    proto_tree_add_item(t, hf_x11_xkb_ActionMessage_time, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xkb_ActionMessage_deviceID, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_xkb_ActionMessage_keycode, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_xkb_ActionMessage_press, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_xkb_ActionMessage_keyEventFollows, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    {
        static int* const mods_bits [] = {
        &hf_x11_xkb_ActionMessage_mods_mask_Shift,
        &hf_x11_xkb_ActionMessage_mods_mask_Lock,
        &hf_x11_xkb_ActionMessage_mods_mask_Control,
        &hf_x11_xkb_ActionMessage_mods_mask_1,
        &hf_x11_xkb_ActionMessage_mods_mask_2,
        &hf_x11_xkb_ActionMessage_mods_mask_3,
        &hf_x11_xkb_ActionMessage_mods_mask_4,
        &hf_x11_xkb_ActionMessage_mods_mask_5,
        &hf_x11_xkb_ActionMessage_mods_mask_Any,
        NULL
        };
        proto_tree_add_bitmask(t,  tvb, *offsetp, hf_x11_xkb_ActionMessage_mods, ett_x11_rectangle, mods_bits, byte_order);
    }
    *offsetp += 1;
    field8(tvb, offsetp, t, hf_x11_xkb_ActionMessage_group, byte_order);
    listOfByte(tvb, offsetp, t, hf_x11_xkb_ActionMessage_message, 8, byte_order);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 10, ENC_NA);
    *offsetp += 10;
}


static void xkbAccessXNotify(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order)
{
    proto_tree_add_item(t, hf_x11_xkb_AccessXNotify_xkbType, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    CARD16(event_sequencenumber);
    proto_tree_add_item(t, hf_x11_xkb_AccessXNotify_time, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xkb_AccessXNotify_deviceID, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_xkb_AccessXNotify_keycode, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    {
        static int* const detailt_bits [] = {
        &hf_x11_xkb_AccessXNotify_detailt_mask_SKPress,
        &hf_x11_xkb_AccessXNotify_detailt_mask_SKAccept,
        &hf_x11_xkb_AccessXNotify_detailt_mask_SKReject,
        &hf_x11_xkb_AccessXNotify_detailt_mask_SKRelease,
        &hf_x11_xkb_AccessXNotify_detailt_mask_BKAccept,
        &hf_x11_xkb_AccessXNotify_detailt_mask_BKReject,
        &hf_x11_xkb_AccessXNotify_detailt_mask_AXKWarning,
        NULL
        };
        proto_tree_add_bitmask(t,  tvb, *offsetp, hf_x11_xkb_AccessXNotify_detailt, ett_x11_rectangle, detailt_bits, byte_order);
    }
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_xkb_AccessXNotify_slowKeysDelay, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_xkb_AccessXNotify_debounceDelay, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 16, ENC_NA);
    *offsetp += 16;
}


static void xkbExtensionDeviceNotify(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order)
{
    proto_tree_add_item(t, hf_x11_xkb_ExtensionDeviceNotify_xkbType, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    CARD16(event_sequencenumber);
    proto_tree_add_item(t, hf_x11_xkb_ExtensionDeviceNotify_time, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xkb_ExtensionDeviceNotify_deviceID, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    {
        static int* const reason_bits [] = {
        &hf_x11_xkb_ExtensionDeviceNotify_reason_mask_Keyboards,
        &hf_x11_xkb_ExtensionDeviceNotify_reason_mask_ButtonActions,
        &hf_x11_xkb_ExtensionDeviceNotify_reason_mask_IndicatorNames,
        &hf_x11_xkb_ExtensionDeviceNotify_reason_mask_IndicatorMaps,
        &hf_x11_xkb_ExtensionDeviceNotify_reason_mask_IndicatorState,
        NULL
        };
        proto_tree_add_bitmask(t,  tvb, *offsetp, hf_x11_xkb_ExtensionDeviceNotify_reason, ett_x11_rectangle, reason_bits, byte_order);
    }
    *offsetp += 2;
    field16(tvb, offsetp, t, hf_x11_xkb_ExtensionDeviceNotify_ledClass, byte_order);
    proto_tree_add_item(t, hf_x11_xkb_ExtensionDeviceNotify_ledID, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_xkb_ExtensionDeviceNotify_ledsDefined, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xkb_ExtensionDeviceNotify_ledState, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xkb_ExtensionDeviceNotify_firstButton, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_xkb_ExtensionDeviceNotify_nButtons, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    {
        static int* const supported_bits [] = {
        &hf_x11_xkb_ExtensionDeviceNotify_supported_mask_Keyboards,
        &hf_x11_xkb_ExtensionDeviceNotify_supported_mask_ButtonActions,
        &hf_x11_xkb_ExtensionDeviceNotify_supported_mask_IndicatorNames,
        &hf_x11_xkb_ExtensionDeviceNotify_supported_mask_IndicatorMaps,
        &hf_x11_xkb_ExtensionDeviceNotify_supported_mask_IndicatorState,
        NULL
        };
        proto_tree_add_bitmask(t,  tvb, *offsetp, hf_x11_xkb_ExtensionDeviceNotify_supported, ett_x11_rectangle, supported_bits, byte_order);
    }
    *offsetp += 2;
    {
        static int* const unsupported_bits [] = {
        &hf_x11_xkb_ExtensionDeviceNotify_unsupported_mask_Keyboards,
        &hf_x11_xkb_ExtensionDeviceNotify_unsupported_mask_ButtonActions,
        &hf_x11_xkb_ExtensionDeviceNotify_unsupported_mask_IndicatorNames,
        &hf_x11_xkb_ExtensionDeviceNotify_unsupported_mask_IndicatorMaps,
        &hf_x11_xkb_ExtensionDeviceNotify_unsupported_mask_IndicatorState,
        NULL
        };
        proto_tree_add_bitmask(t,  tvb, *offsetp, hf_x11_xkb_ExtensionDeviceNotify_unsupported, ett_x11_rectangle, unsupported_bits, byte_order);
    }
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 2, ENC_NA);
    *offsetp += 2;
}

static const value_string xkb_extension_minor[] = {
    { 0, "UseExtension" },
    { 1, "SelectEvents" },
    { 3, "Bell" },
    { 4, "GetState" },
    { 5, "LatchLockState" },
    { 6, "GetControls" },
    { 7, "SetControls" },
    { 8, "GetMap" },
    { 9, "SetMap" },
    { 10, "GetCompatMap" },
    { 11, "SetCompatMap" },
    { 12, "GetIndicatorState" },
    { 13, "GetIndicatorMap" },
    { 14, "SetIndicatorMap" },
    { 15, "GetNamedIndicator" },
    { 16, "SetNamedIndicator" },
    { 17, "GetNames" },
    { 18, "SetNames" },
    { 21, "PerClientFlags" },
    { 22, "ListComponents" },
    { 23, "GetKbdByName" },
    { 24, "GetDeviceInfo" },
    { 25, "SetDeviceInfo" },
    { 101, "SetDebuggingFlags" },
    { 0, NULL }
};
static const x11_event_info xkb_events[] = {
    { "xkb-MapNotify", xkbMapNotify },
    { "xkb-StateNotify", xkbStateNotify },
    { "xkb-ControlsNotify", xkbControlsNotify },
    { "xkb-IndicatorStateNotify", xkbIndicatorStateNotify },
    { "xkb-IndicatorMapNotify", xkbIndicatorMapNotify },
    { "xkb-NamesNotify", xkbNamesNotify },
    { "xkb-CompatMapNotify", xkbCompatMapNotify },
    { "xkb-BellNotify", xkbBellNotify },
    { "xkb-ActionMessage", xkbActionMessage },
    { "xkb-AccessXNotify", xkbAccessXNotify },
    { "xkb-ExtensionDeviceNotify", xkbExtensionDeviceNotify },
    { NULL, NULL }
};
static const x11_reply_info xkb_replies[] = {
    { 0, xkbUseExtension_Reply },
    { 4, xkbGetState_Reply },
    { 6, xkbGetControls_Reply },
    { 8, xkbGetMap_Reply },
    { 10, xkbGetCompatMap_Reply },
    { 12, xkbGetIndicatorState_Reply },
    { 13, xkbGetIndicatorMap_Reply },
    { 15, xkbGetNamedIndicator_Reply },
    { 17, xkbGetNames_Reply },
    { 21, xkbPerClientFlags_Reply },
    { 22, xkbListComponents_Reply },
    { 23, xkbGetKbdByName_Reply },
    { 24, xkbGetDeviceInfo_Reply },
    { 101, xkbSetDebuggingFlags_Reply },
    { 0, NULL }
};

static void dispatch_xkb(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int minor, length;
    minor = CARD8(xkb_extension_minor);
    length = REQUEST_LENGTH();

    col_append_fstr(pinfo->cinfo, COL_INFO, "-%s",
                          val_to_str(minor, xkb_extension_minor,
                                     "<Unknown opcode %d>"));
    switch (minor) {
    case 0:
        xkbUseExtension(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 1:
        xkbSelectEvents(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 3:
        xkbBell(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 4:
        xkbGetState(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 5:
        xkbLatchLockState(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 6:
        xkbGetControls(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 7:
        xkbSetControls(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 8:
        xkbGetMap(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 9:
        xkbSetMap(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 10:
        xkbGetCompatMap(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 11:
        xkbSetCompatMap(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 12:
        xkbGetIndicatorState(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 13:
        xkbGetIndicatorMap(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 14:
        xkbSetIndicatorMap(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 15:
        xkbGetNamedIndicator(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 16:
        xkbSetNamedIndicator(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 17:
        xkbGetNames(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 18:
        xkbSetNames(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 21:
        xkbPerClientFlags(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 22:
        xkbListComponents(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 23:
        xkbGetKbdByName(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 24:
        xkbGetDeviceInfo(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 25:
        xkbSetDeviceInfo(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 101:
        xkbSetDebuggingFlags(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    /* No need for a default case here, since Unknown is printed above,
       and UNDECODED() is taken care of by dissect_x11_request */
    }
}

static void register_xkb(void)
{
    set_handler("XKEYBOARD", dispatch_xkb, xkb_errors, xkb_events, NULL, xkb_replies);
}

static int struct_size_xprint_PRINTER(tvbuff_t *tvb _U_, int *offsetp _U_, unsigned byte_order _U_)
{
    int size = 0;
    int f_descLen;
    int f_nameLen;
    f_nameLen = tvb_get_uint32(tvb, *offsetp + size + 0, byte_order);
    size += f_nameLen * 1;
    size = (size + 3) & ~3;
    f_descLen = tvb_get_uint32(tvb, *offsetp + size + 4, byte_order);
    size += f_descLen * 1;
    size = (size + 3) & ~3;
    return size + 8;
}

static void struct_xprint_PRINTER(tvbuff_t *tvb, int *offsetp, proto_tree *root, unsigned byte_order _U_, int count)
{
    int i;
    for (i = 0; i < count; i++) {
        proto_item *item;
        proto_tree *t;
        int f_nameLen;
        int f_descLen;

        item = proto_tree_add_item(root, hf_x11_struct_xprint_PRINTER, tvb, *offsetp, struct_size_xprint_PRINTER(tvb, offsetp, byte_order), ENC_NA);
        t = proto_item_add_subtree(item, ett_x11_rectangle);
        f_nameLen = tvb_get_uint32(tvb, *offsetp, byte_order);
        proto_tree_add_item(t, hf_x11_struct_xprint_PRINTER_nameLen, tvb, *offsetp, 4, byte_order);
        *offsetp += 4;
        listOfByte(tvb, offsetp, t, hf_x11_struct_xprint_PRINTER_name, f_nameLen, byte_order);
        if (*offsetp % 4) {
            proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, (4 - *offsetp % 4), ENC_NA);
            *offsetp += (4 - *offsetp % 4);
        }
        f_descLen = tvb_get_uint32(tvb, *offsetp, byte_order);
        proto_tree_add_item(t, hf_x11_struct_xprint_PRINTER_descLen, tvb, *offsetp, 4, byte_order);
        *offsetp += 4;
        listOfByte(tvb, offsetp, t, hf_x11_struct_xprint_PRINTER_description, f_descLen, byte_order);
        if (*offsetp % 4) {
            proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, (4 - *offsetp % 4), ENC_NA);
            *offsetp += (4 - *offsetp % 4);
        }
    }
}

static void xprintPrintQueryVersion(tvbuff_t *tvb _U_, packet_info *pinfo _U_, int *offsetp _U_, proto_tree *t _U_, unsigned byte_order _U_, int length _U_)
{
}
static void xprintPrintQueryVersion_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-PrintQueryVersion");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (xprint-PrintQueryVersion)", sequence_number);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xprint_PrintQueryVersion_reply_major_version, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_xprint_PrintQueryVersion_reply_minor_version, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
}

static void xprintPrintGetPrinterList(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    int f_printerNameLen;
    int f_localeLen;
    f_printerNameLen = tvb_get_uint32(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_xprint_PrintGetPrinterList_printerNameLen, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    f_localeLen = tvb_get_uint32(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_xprint_PrintGetPrinterList_localeLen, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    listOfByte(tvb, offsetp, t, hf_x11_xprint_PrintGetPrinterList_printer_name, f_printerNameLen, byte_order);
    length -= f_printerNameLen * 1;
    if (*offsetp % 4) {
        proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, (4 - *offsetp % 4), ENC_NA);
        *offsetp += (4 - *offsetp % 4);
    }
    length = ((length + 3) & ~3);
    listOfByte(tvb, offsetp, t, hf_x11_xprint_PrintGetPrinterList_locale, f_localeLen, byte_order);
    length -= f_localeLen * 1;
}
static void xprintPrintGetPrinterList_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;
    int f_listCount;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-PrintGetPrinterList");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (xprint-PrintGetPrinterList)", sequence_number);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    f_listCount = tvb_get_uint32(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_xprint_PrintGetPrinterList_reply_listCount, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 20, ENC_NA);
    *offsetp += 20;
    struct_xprint_PRINTER(tvb, offsetp, t, byte_order, f_listCount);
}

static void xprintPrintRehashPrinterList(tvbuff_t *tvb _U_, packet_info *pinfo _U_, int *offsetp _U_, proto_tree *t _U_, unsigned byte_order _U_, int length _U_)
{
}

static void xprintCreateContext(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    int f_printerNameLen;
    int f_localeLen;
    proto_tree_add_item(t, hf_x11_xprint_CreateContext_context_id, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    f_printerNameLen = tvb_get_uint32(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_xprint_CreateContext_printerNameLen, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    f_localeLen = tvb_get_uint32(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_xprint_CreateContext_localeLen, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    listOfByte(tvb, offsetp, t, hf_x11_xprint_CreateContext_printerName, f_printerNameLen, byte_order);
    length -= f_printerNameLen * 1;
    if (*offsetp % 4) {
        proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, (4 - *offsetp % 4), ENC_NA);
        *offsetp += (4 - *offsetp % 4);
    }
    length = ((length + 3) & ~3);
    listOfByte(tvb, offsetp, t, hf_x11_xprint_CreateContext_locale, f_localeLen, byte_order);
    length -= f_localeLen * 1;
}

static void xprintPrintSetContext(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_xprint_PrintSetContext_context, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}

static void xprintPrintGetContext(tvbuff_t *tvb _U_, packet_info *pinfo _U_, int *offsetp _U_, proto_tree *t _U_, unsigned byte_order _U_, int length _U_)
{
}
static void xprintPrintGetContext_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-PrintGetContext");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (xprint-PrintGetContext)", sequence_number);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xprint_PrintGetContext_reply_context, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}

static void xprintPrintDestroyContext(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_xprint_PrintDestroyContext_context, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}

static void xprintPrintGetScreenOfContext(tvbuff_t *tvb _U_, packet_info *pinfo _U_, int *offsetp _U_, proto_tree *t _U_, unsigned byte_order _U_, int length _U_)
{
}
static void xprintPrintGetScreenOfContext_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-PrintGetScreenOfContext");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (xprint-PrintGetScreenOfContext)", sequence_number);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xprint_PrintGetScreenOfContext_reply_root, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}

static void xprintPrintStartJob(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_xprint_PrintStartJob_output_mode, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
}

static void xprintPrintEndJob(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_xprint_PrintEndJob_cancel, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
}

static void xprintPrintStartDoc(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_xprint_PrintStartDoc_driver_mode, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
}

static void xprintPrintEndDoc(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_xprint_PrintEndDoc_cancel, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
}

static void xprintPrintPutDocumentData(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    int f_len_data;
    int f_len_fmt;
    int f_len_options;
    proto_tree_add_item(t, hf_x11_xprint_PrintPutDocumentData_drawable, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    f_len_data = tvb_get_uint32(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_xprint_PrintPutDocumentData_len_data, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    f_len_fmt = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_xprint_PrintPutDocumentData_len_fmt, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    f_len_options = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_xprint_PrintPutDocumentData_len_options, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    listOfByte(tvb, offsetp, t, hf_x11_xprint_PrintPutDocumentData_data, f_len_data, byte_order);
    length -= f_len_data * 1;
    if (*offsetp % 4) {
        proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, (4 - *offsetp % 4), ENC_NA);
        *offsetp += (4 - *offsetp % 4);
    }
    length = ((length + 3) & ~3);
    listOfByte(tvb, offsetp, t, hf_x11_xprint_PrintPutDocumentData_doc_format, f_len_fmt, byte_order);
    length -= f_len_fmt * 1;
    if (*offsetp % 4) {
        proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, (4 - *offsetp % 4), ENC_NA);
        *offsetp += (4 - *offsetp % 4);
    }
    length = ((length + 3) & ~3);
    listOfByte(tvb, offsetp, t, hf_x11_xprint_PrintPutDocumentData_options, f_len_options, byte_order);
    length -= f_len_options * 1;
}

static void xprintPrintGetDocumentData(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_xprint_PrintGetDocumentData_context, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xprint_PrintGetDocumentData_max_bytes, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}
static void xprintPrintGetDocumentData_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;
    int f_dataLen;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-PrintGetDocumentData");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (xprint-PrintGetDocumentData)", sequence_number);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xprint_PrintGetDocumentData_reply_status_code, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xprint_PrintGetDocumentData_reply_finished_flag, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    f_dataLen = tvb_get_uint32(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_xprint_PrintGetDocumentData_reply_dataLen, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 12, ENC_NA);
    *offsetp += 12;
    listOfByte(tvb, offsetp, t, hf_x11_xprint_PrintGetDocumentData_reply_data, f_dataLen, byte_order);
}

static void xprintPrintStartPage(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_xprint_PrintStartPage_window, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}

static void xprintPrintEndPage(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_xprint_PrintEndPage_cancel, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 3, ENC_NA);
    *offsetp += 3;
}

static void xprintPrintSelectInput(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_xprint_PrintSelectInput_context, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xprint_PrintSelectInput_event_mask, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}

static void xprintPrintInputSelected(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_xprint_PrintInputSelected_context, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}
static void xprintPrintInputSelected_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-PrintInputSelected");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (xprint-PrintInputSelected)", sequence_number);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xprint_PrintInputSelected_reply_event_mask, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xprint_PrintInputSelected_reply_all_events_mask, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}

static void xprintPrintGetAttributes(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_xprint_PrintGetAttributes_context, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xprint_PrintGetAttributes_pool, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 3, ENC_NA);
    *offsetp += 3;
}
static void xprintPrintGetAttributes_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;
    int f_stringLen;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-PrintGetAttributes");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (xprint-PrintGetAttributes)", sequence_number);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    f_stringLen = tvb_get_uint32(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_xprint_PrintGetAttributes_reply_stringLen, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 20, ENC_NA);
    *offsetp += 20;
    listOfByte(tvb, offsetp, t, hf_x11_xprint_PrintGetAttributes_reply_attributes, f_stringLen, byte_order);
}

static void xprintPrintGetOneAttributes(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    int f_nameLen;
    proto_tree_add_item(t, hf_x11_xprint_PrintGetOneAttributes_context, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    f_nameLen = tvb_get_uint32(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_xprint_PrintGetOneAttributes_nameLen, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xprint_PrintGetOneAttributes_pool, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 3, ENC_NA);
    *offsetp += 3;
    listOfByte(tvb, offsetp, t, hf_x11_xprint_PrintGetOneAttributes_name, f_nameLen, byte_order);
    length -= f_nameLen * 1;
}
static void xprintPrintGetOneAttributes_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;
    int f_valueLen;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-PrintGetOneAttributes");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (xprint-PrintGetOneAttributes)", sequence_number);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    f_valueLen = tvb_get_uint32(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_xprint_PrintGetOneAttributes_reply_valueLen, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 20, ENC_NA);
    *offsetp += 20;
    listOfByte(tvb, offsetp, t, hf_x11_xprint_PrintGetOneAttributes_reply_value, f_valueLen, byte_order);
}

static void xprintPrintSetAttributes(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_xprint_PrintSetAttributes_context, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xprint_PrintSetAttributes_stringLen, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xprint_PrintSetAttributes_pool, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_xprint_PrintSetAttributes_rule, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 2, ENC_NA);
    *offsetp += 2;
    listOfByte(tvb, offsetp, t, hf_x11_xprint_PrintSetAttributes_attributes, (length - 16) / 1, byte_order);
}

static void xprintPrintGetPageDimensions(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_xprint_PrintGetPageDimensions_context, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}
static void xprintPrintGetPageDimensions_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-PrintGetPageDimensions");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (xprint-PrintGetPageDimensions)", sequence_number);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xprint_PrintGetPageDimensions_reply_width, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_xprint_PrintGetPageDimensions_reply_height, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_xprint_PrintGetPageDimensions_reply_offset_x, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_xprint_PrintGetPageDimensions_reply_offset_y, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_xprint_PrintGetPageDimensions_reply_reproducible_width, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_xprint_PrintGetPageDimensions_reply_reproducible_height, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
}

static void xprintPrintQueryScreens(tvbuff_t *tvb _U_, packet_info *pinfo _U_, int *offsetp _U_, proto_tree *t _U_, unsigned byte_order _U_, int length _U_)
{
}
static void xprintPrintQueryScreens_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;
    int f_listCount;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-PrintQueryScreens");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (xprint-PrintQueryScreens)", sequence_number);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    f_listCount = tvb_get_uint32(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_xprint_PrintQueryScreens_reply_listCount, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 20, ENC_NA);
    *offsetp += 20;
    listOfCard32(tvb, offsetp, t, hf_x11_xprint_PrintQueryScreens_reply_roots, hf_x11_xprint_PrintQueryScreens_reply_roots_item, f_listCount, byte_order);
}

static void xprintPrintSetImageResolution(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_xprint_PrintSetImageResolution_context, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xprint_PrintSetImageResolution_image_resolution, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
}
static void xprintPrintSetImageResolution_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-PrintSetImageResolution");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_xprint_PrintSetImageResolution_reply_status, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (xprint-PrintSetImageResolution)", sequence_number);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xprint_PrintSetImageResolution_reply_previous_resolutions, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
}

static void xprintPrintGetImageResolution(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_xprint_PrintGetImageResolution_context, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}
static void xprintPrintGetImageResolution_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-PrintGetImageResolution");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (xprint-PrintGetImageResolution)", sequence_number);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xprint_PrintGetImageResolution_reply_image_resolution, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
}

static void xprintAttributNotify(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order)
{
    proto_tree_add_item(t, hf_x11_xprint_AttributNotify_detail, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    CARD16(event_sequencenumber);
    proto_tree_add_item(t, hf_x11_xprint_AttributNotify_context, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}

static const value_string xprint_extension_minor[] = {
    { 0, "PrintQueryVersion" },
    { 1, "PrintGetPrinterList" },
    { 2, "CreateContext" },
    { 3, "PrintSetContext" },
    { 4, "PrintGetContext" },
    { 5, "PrintDestroyContext" },
    { 6, "PrintGetScreenOfContext" },
    { 7, "PrintStartJob" },
    { 8, "PrintEndJob" },
    { 9, "PrintStartDoc" },
    { 10, "PrintEndDoc" },
    { 11, "PrintPutDocumentData" },
    { 12, "PrintGetDocumentData" },
    { 13, "PrintStartPage" },
    { 14, "PrintEndPage" },
    { 15, "PrintSelectInput" },
    { 16, "PrintInputSelected" },
    { 17, "PrintGetAttributes" },
    { 18, "PrintSetAttributes" },
    { 19, "PrintGetOneAttributes" },
    { 20, "PrintRehashPrinterList" },
    { 21, "PrintGetPageDimensions" },
    { 22, "PrintQueryScreens" },
    { 23, "PrintSetImageResolution" },
    { 24, "PrintGetImageResolution" },
    { 0, NULL }
};
static const x11_event_info xprint_events[] = {
    { "xprint-AttributNotify", xprintAttributNotify },
    { NULL, NULL }
};
static const x11_reply_info xprint_replies[] = {
    { 0, xprintPrintQueryVersion_Reply },
    { 1, xprintPrintGetPrinterList_Reply },
    { 4, xprintPrintGetContext_Reply },
    { 6, xprintPrintGetScreenOfContext_Reply },
    { 12, xprintPrintGetDocumentData_Reply },
    { 16, xprintPrintInputSelected_Reply },
    { 17, xprintPrintGetAttributes_Reply },
    { 19, xprintPrintGetOneAttributes_Reply },
    { 21, xprintPrintGetPageDimensions_Reply },
    { 22, xprintPrintQueryScreens_Reply },
    { 23, xprintPrintSetImageResolution_Reply },
    { 24, xprintPrintGetImageResolution_Reply },
    { 0, NULL }
};

static void dispatch_xprint(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int minor, length;
    minor = CARD8(xprint_extension_minor);
    length = REQUEST_LENGTH();

    col_append_fstr(pinfo->cinfo, COL_INFO, "-%s",
                          val_to_str(minor, xprint_extension_minor,
                                     "<Unknown opcode %d>"));
    switch (minor) {
    case 0:
        xprintPrintQueryVersion(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 1:
        xprintPrintGetPrinterList(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 2:
        xprintCreateContext(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 3:
        xprintPrintSetContext(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 4:
        xprintPrintGetContext(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 5:
        xprintPrintDestroyContext(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 6:
        xprintPrintGetScreenOfContext(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 7:
        xprintPrintStartJob(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 8:
        xprintPrintEndJob(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 9:
        xprintPrintStartDoc(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 10:
        xprintPrintEndDoc(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 11:
        xprintPrintPutDocumentData(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 12:
        xprintPrintGetDocumentData(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 13:
        xprintPrintStartPage(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 14:
        xprintPrintEndPage(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 15:
        xprintPrintSelectInput(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 16:
        xprintPrintInputSelected(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 17:
        xprintPrintGetAttributes(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 18:
        xprintPrintSetAttributes(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 19:
        xprintPrintGetOneAttributes(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 20:
        xprintPrintRehashPrinterList(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 21:
        xprintPrintGetPageDimensions(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 22:
        xprintPrintQueryScreens(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 23:
        xprintPrintSetImageResolution(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 24:
        xprintPrintGetImageResolution(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    /* No need for a default case here, since Unknown is printed above,
       and UNDECODED() is taken care of by dissect_x11_request */
    }
}

static void register_xprint(void)
{
    set_handler("XpExtension", dispatch_xprint, xprint_errors, xprint_events, NULL, xprint_replies);
}

static void xselinuxQueryVersion(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_xselinux_QueryVersion_client_major, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_xselinux_QueryVersion_client_minor, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
}
static void xselinuxQueryVersion_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-QueryVersion");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (xselinux-QueryVersion)", sequence_number);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xselinux_QueryVersion_reply_server_major, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_xselinux_QueryVersion_reply_server_minor, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
}

static void xselinuxSetDeviceCreateContext(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    int f_context_len;
    f_context_len = tvb_get_uint32(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_xselinux_SetDeviceCreateContext_context_len, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    listOfByte(tvb, offsetp, t, hf_x11_xselinux_SetDeviceCreateContext_context, f_context_len, byte_order);
    length -= f_context_len * 1;
}

static void xselinuxGetDeviceCreateContext(tvbuff_t *tvb _U_, packet_info *pinfo _U_, int *offsetp _U_, proto_tree *t _U_, unsigned byte_order _U_, int length _U_)
{
}
static void xselinuxGetDeviceCreateContext_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;
    int f_context_len;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-GetDeviceCreateContext");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (xselinux-GetDeviceCreateContext)", sequence_number);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    f_context_len = tvb_get_uint32(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_xselinux_GetDeviceCreateContext_reply_context_len, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 20, ENC_NA);
    *offsetp += 20;
    listOfByte(tvb, offsetp, t, hf_x11_xselinux_GetDeviceCreateContext_reply_context, f_context_len, byte_order);
}

static void xselinuxSetDeviceContext(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    int f_context_len;
    proto_tree_add_item(t, hf_x11_xselinux_SetDeviceContext_device, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    f_context_len = tvb_get_uint32(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_xselinux_SetDeviceContext_context_len, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    listOfByte(tvb, offsetp, t, hf_x11_xselinux_SetDeviceContext_context, f_context_len, byte_order);
    length -= f_context_len * 1;
}

static void xselinuxGetDeviceContext(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_xselinux_GetDeviceContext_device, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}
static void xselinuxGetDeviceContext_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;
    int f_context_len;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-GetDeviceContext");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (xselinux-GetDeviceContext)", sequence_number);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    f_context_len = tvb_get_uint32(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_xselinux_GetDeviceContext_reply_context_len, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 20, ENC_NA);
    *offsetp += 20;
    listOfByte(tvb, offsetp, t, hf_x11_xselinux_GetDeviceContext_reply_context, f_context_len, byte_order);
}

static void xselinuxSetWindowCreateContext(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    int f_context_len;
    f_context_len = tvb_get_uint32(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_xselinux_SetWindowCreateContext_context_len, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    listOfByte(tvb, offsetp, t, hf_x11_xselinux_SetWindowCreateContext_context, f_context_len, byte_order);
    length -= f_context_len * 1;
}

static void xselinuxGetWindowCreateContext(tvbuff_t *tvb _U_, packet_info *pinfo _U_, int *offsetp _U_, proto_tree *t _U_, unsigned byte_order _U_, int length _U_)
{
}
static void xselinuxGetWindowCreateContext_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;
    int f_context_len;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-GetWindowCreateContext");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (xselinux-GetWindowCreateContext)", sequence_number);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    f_context_len = tvb_get_uint32(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_xselinux_GetWindowCreateContext_reply_context_len, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 20, ENC_NA);
    *offsetp += 20;
    listOfByte(tvb, offsetp, t, hf_x11_xselinux_GetWindowCreateContext_reply_context, f_context_len, byte_order);
}

static void xselinuxGetWindowContext(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_xselinux_GetWindowContext_window, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}
static void xselinuxGetWindowContext_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;
    int f_context_len;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-GetWindowContext");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (xselinux-GetWindowContext)", sequence_number);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    f_context_len = tvb_get_uint32(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_xselinux_GetWindowContext_reply_context_len, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 20, ENC_NA);
    *offsetp += 20;
    listOfByte(tvb, offsetp, t, hf_x11_xselinux_GetWindowContext_reply_context, f_context_len, byte_order);
}

static int struct_size_xselinux_ListItem(tvbuff_t *tvb _U_, int *offsetp _U_, unsigned byte_order _U_)
{
    int size = 0;
    int f_data_context_len;
    int f_object_context_len;
    f_object_context_len = tvb_get_uint32(tvb, *offsetp + size + 4, byte_order);
    f_data_context_len = tvb_get_uint32(tvb, *offsetp + size + 8, byte_order);
    size += f_object_context_len * 1;
    size = (size + 3) & ~3;
    size += f_data_context_len * 1;
    size = (size + 3) & ~3;
    return size + 12;
}

static void struct_xselinux_ListItem(tvbuff_t *tvb, int *offsetp, proto_tree *root, unsigned byte_order _U_, int count)
{
    int i;
    for (i = 0; i < count; i++) {
        proto_item *item;
        proto_tree *t;
        int f_object_context_len;
        int f_data_context_len;

        item = proto_tree_add_item(root, hf_x11_struct_xselinux_ListItem, tvb, *offsetp, struct_size_xselinux_ListItem(tvb, offsetp, byte_order), ENC_NA);
        t = proto_item_add_subtree(item, ett_x11_rectangle);
        proto_tree_add_item(t, hf_x11_struct_xselinux_ListItem_name, tvb, *offsetp, 4, byte_order);
        *offsetp += 4;
        f_object_context_len = tvb_get_uint32(tvb, *offsetp, byte_order);
        proto_tree_add_item(t, hf_x11_struct_xselinux_ListItem_object_context_len, tvb, *offsetp, 4, byte_order);
        *offsetp += 4;
        f_data_context_len = tvb_get_uint32(tvb, *offsetp, byte_order);
        proto_tree_add_item(t, hf_x11_struct_xselinux_ListItem_data_context_len, tvb, *offsetp, 4, byte_order);
        *offsetp += 4;
        listOfByte(tvb, offsetp, t, hf_x11_struct_xselinux_ListItem_object_context, f_object_context_len, byte_order);
        if (*offsetp % 4) {
            proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, (4 - *offsetp % 4), ENC_NA);
            *offsetp += (4 - *offsetp % 4);
        }
        listOfByte(tvb, offsetp, t, hf_x11_struct_xselinux_ListItem_data_context, f_data_context_len, byte_order);
        if (*offsetp % 4) {
            proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, (4 - *offsetp % 4), ENC_NA);
            *offsetp += (4 - *offsetp % 4);
        }
    }
}

static void xselinuxSetPropertyCreateContext(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    int f_context_len;
    f_context_len = tvb_get_uint32(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_xselinux_SetPropertyCreateContext_context_len, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    listOfByte(tvb, offsetp, t, hf_x11_xselinux_SetPropertyCreateContext_context, f_context_len, byte_order);
    length -= f_context_len * 1;
}

static void xselinuxGetPropertyCreateContext(tvbuff_t *tvb _U_, packet_info *pinfo _U_, int *offsetp _U_, proto_tree *t _U_, unsigned byte_order _U_, int length _U_)
{
}
static void xselinuxGetPropertyCreateContext_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;
    int f_context_len;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-GetPropertyCreateContext");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (xselinux-GetPropertyCreateContext)", sequence_number);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    f_context_len = tvb_get_uint32(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_xselinux_GetPropertyCreateContext_reply_context_len, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 20, ENC_NA);
    *offsetp += 20;
    listOfByte(tvb, offsetp, t, hf_x11_xselinux_GetPropertyCreateContext_reply_context, f_context_len, byte_order);
}

static void xselinuxSetPropertyUseContext(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    int f_context_len;
    f_context_len = tvb_get_uint32(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_xselinux_SetPropertyUseContext_context_len, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    listOfByte(tvb, offsetp, t, hf_x11_xselinux_SetPropertyUseContext_context, f_context_len, byte_order);
    length -= f_context_len * 1;
}

static void xselinuxGetPropertyUseContext(tvbuff_t *tvb _U_, packet_info *pinfo _U_, int *offsetp _U_, proto_tree *t _U_, unsigned byte_order _U_, int length _U_)
{
}
static void xselinuxGetPropertyUseContext_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;
    int f_context_len;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-GetPropertyUseContext");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (xselinux-GetPropertyUseContext)", sequence_number);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    f_context_len = tvb_get_uint32(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_xselinux_GetPropertyUseContext_reply_context_len, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 20, ENC_NA);
    *offsetp += 20;
    listOfByte(tvb, offsetp, t, hf_x11_xselinux_GetPropertyUseContext_reply_context, f_context_len, byte_order);
}

static void xselinuxGetPropertyContext(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_xselinux_GetPropertyContext_window, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xselinux_GetPropertyContext_property, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}
static void xselinuxGetPropertyContext_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;
    int f_context_len;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-GetPropertyContext");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (xselinux-GetPropertyContext)", sequence_number);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    f_context_len = tvb_get_uint32(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_xselinux_GetPropertyContext_reply_context_len, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 20, ENC_NA);
    *offsetp += 20;
    listOfByte(tvb, offsetp, t, hf_x11_xselinux_GetPropertyContext_reply_context, f_context_len, byte_order);
}

static void xselinuxGetPropertyDataContext(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_xselinux_GetPropertyDataContext_window, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xselinux_GetPropertyDataContext_property, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}
static void xselinuxGetPropertyDataContext_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;
    int f_context_len;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-GetPropertyDataContext");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (xselinux-GetPropertyDataContext)", sequence_number);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    f_context_len = tvb_get_uint32(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_xselinux_GetPropertyDataContext_reply_context_len, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 20, ENC_NA);
    *offsetp += 20;
    listOfByte(tvb, offsetp, t, hf_x11_xselinux_GetPropertyDataContext_reply_context, f_context_len, byte_order);
}

static void xselinuxListProperties(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_xselinux_ListProperties_window, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}
static void xselinuxListProperties_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;
    int f_properties_len;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-ListProperties");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (xselinux-ListProperties)", sequence_number);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    f_properties_len = tvb_get_uint32(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_xselinux_ListProperties_reply_properties_len, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 20, ENC_NA);
    *offsetp += 20;
    struct_xselinux_ListItem(tvb, offsetp, t, byte_order, f_properties_len);
}

static void xselinuxSetSelectionCreateContext(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    int f_context_len;
    f_context_len = tvb_get_uint32(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_xselinux_SetSelectionCreateContext_context_len, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    listOfByte(tvb, offsetp, t, hf_x11_xselinux_SetSelectionCreateContext_context, f_context_len, byte_order);
    length -= f_context_len * 1;
}

static void xselinuxGetSelectionCreateContext(tvbuff_t *tvb _U_, packet_info *pinfo _U_, int *offsetp _U_, proto_tree *t _U_, unsigned byte_order _U_, int length _U_)
{
}
static void xselinuxGetSelectionCreateContext_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;
    int f_context_len;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-GetSelectionCreateContext");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (xselinux-GetSelectionCreateContext)", sequence_number);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    f_context_len = tvb_get_uint32(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_xselinux_GetSelectionCreateContext_reply_context_len, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 20, ENC_NA);
    *offsetp += 20;
    listOfByte(tvb, offsetp, t, hf_x11_xselinux_GetSelectionCreateContext_reply_context, f_context_len, byte_order);
}

static void xselinuxSetSelectionUseContext(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    int f_context_len;
    f_context_len = tvb_get_uint32(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_xselinux_SetSelectionUseContext_context_len, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    listOfByte(tvb, offsetp, t, hf_x11_xselinux_SetSelectionUseContext_context, f_context_len, byte_order);
    length -= f_context_len * 1;
}

static void xselinuxGetSelectionUseContext(tvbuff_t *tvb _U_, packet_info *pinfo _U_, int *offsetp _U_, proto_tree *t _U_, unsigned byte_order _U_, int length _U_)
{
}
static void xselinuxGetSelectionUseContext_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;
    int f_context_len;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-GetSelectionUseContext");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (xselinux-GetSelectionUseContext)", sequence_number);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    f_context_len = tvb_get_uint32(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_xselinux_GetSelectionUseContext_reply_context_len, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 20, ENC_NA);
    *offsetp += 20;
    listOfByte(tvb, offsetp, t, hf_x11_xselinux_GetSelectionUseContext_reply_context, f_context_len, byte_order);
}

static void xselinuxGetSelectionContext(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_xselinux_GetSelectionContext_selection, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}
static void xselinuxGetSelectionContext_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;
    int f_context_len;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-GetSelectionContext");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (xselinux-GetSelectionContext)", sequence_number);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    f_context_len = tvb_get_uint32(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_xselinux_GetSelectionContext_reply_context_len, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 20, ENC_NA);
    *offsetp += 20;
    listOfByte(tvb, offsetp, t, hf_x11_xselinux_GetSelectionContext_reply_context, f_context_len, byte_order);
}

static void xselinuxGetSelectionDataContext(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_xselinux_GetSelectionDataContext_selection, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}
static void xselinuxGetSelectionDataContext_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;
    int f_context_len;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-GetSelectionDataContext");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (xselinux-GetSelectionDataContext)", sequence_number);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    f_context_len = tvb_get_uint32(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_xselinux_GetSelectionDataContext_reply_context_len, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 20, ENC_NA);
    *offsetp += 20;
    listOfByte(tvb, offsetp, t, hf_x11_xselinux_GetSelectionDataContext_reply_context, f_context_len, byte_order);
}

static void xselinuxListSelections(tvbuff_t *tvb _U_, packet_info *pinfo _U_, int *offsetp _U_, proto_tree *t _U_, unsigned byte_order _U_, int length _U_)
{
}
static void xselinuxListSelections_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;
    int f_selections_len;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-ListSelections");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (xselinux-ListSelections)", sequence_number);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    f_selections_len = tvb_get_uint32(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_xselinux_ListSelections_reply_selections_len, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 20, ENC_NA);
    *offsetp += 20;
    struct_xselinux_ListItem(tvb, offsetp, t, byte_order, f_selections_len);
}

static void xselinuxGetClientContext(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_xselinux_GetClientContext_resource, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}
static void xselinuxGetClientContext_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;
    int f_context_len;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-GetClientContext");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (xselinux-GetClientContext)", sequence_number);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    f_context_len = tvb_get_uint32(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_xselinux_GetClientContext_reply_context_len, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 20, ENC_NA);
    *offsetp += 20;
    listOfByte(tvb, offsetp, t, hf_x11_xselinux_GetClientContext_reply_context, f_context_len, byte_order);
}
static const value_string xselinux_extension_minor[] = {
    { 0, "QueryVersion" },
    { 1, "SetDeviceCreateContext" },
    { 2, "GetDeviceCreateContext" },
    { 3, "SetDeviceContext" },
    { 4, "GetDeviceContext" },
    { 5, "SetWindowCreateContext" },
    { 6, "GetWindowCreateContext" },
    { 7, "GetWindowContext" },
    { 8, "SetPropertyCreateContext" },
    { 9, "GetPropertyCreateContext" },
    { 10, "SetPropertyUseContext" },
    { 11, "GetPropertyUseContext" },
    { 12, "GetPropertyContext" },
    { 13, "GetPropertyDataContext" },
    { 14, "ListProperties" },
    { 15, "SetSelectionCreateContext" },
    { 16, "GetSelectionCreateContext" },
    { 17, "SetSelectionUseContext" },
    { 18, "GetSelectionUseContext" },
    { 19, "GetSelectionContext" },
    { 20, "GetSelectionDataContext" },
    { 21, "ListSelections" },
    { 22, "GetClientContext" },
    { 0, NULL }
};
static const x11_event_info xselinux_events[] = {
    { NULL, NULL }
};
static const x11_reply_info xselinux_replies[] = {
    { 0, xselinuxQueryVersion_Reply },
    { 2, xselinuxGetDeviceCreateContext_Reply },
    { 4, xselinuxGetDeviceContext_Reply },
    { 6, xselinuxGetWindowCreateContext_Reply },
    { 7, xselinuxGetWindowContext_Reply },
    { 9, xselinuxGetPropertyCreateContext_Reply },
    { 11, xselinuxGetPropertyUseContext_Reply },
    { 12, xselinuxGetPropertyContext_Reply },
    { 13, xselinuxGetPropertyDataContext_Reply },
    { 14, xselinuxListProperties_Reply },
    { 16, xselinuxGetSelectionCreateContext_Reply },
    { 18, xselinuxGetSelectionUseContext_Reply },
    { 19, xselinuxGetSelectionContext_Reply },
    { 20, xselinuxGetSelectionDataContext_Reply },
    { 21, xselinuxListSelections_Reply },
    { 22, xselinuxGetClientContext_Reply },
    { 0, NULL }
};

static void dispatch_xselinux(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int minor, length;
    minor = CARD8(xselinux_extension_minor);
    length = REQUEST_LENGTH();

    col_append_fstr(pinfo->cinfo, COL_INFO, "-%s",
                          val_to_str(minor, xselinux_extension_minor,
                                     "<Unknown opcode %d>"));
    switch (minor) {
    case 0:
        xselinuxQueryVersion(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 1:
        xselinuxSetDeviceCreateContext(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 2:
        xselinuxGetDeviceCreateContext(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 3:
        xselinuxSetDeviceContext(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 4:
        xselinuxGetDeviceContext(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 5:
        xselinuxSetWindowCreateContext(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 6:
        xselinuxGetWindowCreateContext(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 7:
        xselinuxGetWindowContext(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 8:
        xselinuxSetPropertyCreateContext(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 9:
        xselinuxGetPropertyCreateContext(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 10:
        xselinuxSetPropertyUseContext(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 11:
        xselinuxGetPropertyUseContext(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 12:
        xselinuxGetPropertyContext(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 13:
        xselinuxGetPropertyDataContext(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 14:
        xselinuxListProperties(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 15:
        xselinuxSetSelectionCreateContext(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 16:
        xselinuxGetSelectionCreateContext(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 17:
        xselinuxSetSelectionUseContext(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 18:
        xselinuxGetSelectionUseContext(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 19:
        xselinuxGetSelectionContext(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 20:
        xselinuxGetSelectionDataContext(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 21:
        xselinuxListSelections(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 22:
        xselinuxGetClientContext(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    /* No need for a default case here, since Unknown is printed above,
       and UNDECODED() is taken care of by dissect_x11_request */
    }
}

static void register_xselinux(void)
{
    set_handler("SELinux", dispatch_xselinux, xselinux_errors, xselinux_events, NULL, xselinux_replies);
}

static void xtestGetVersion(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_xtest_GetVersion_major_version, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_xtest_GetVersion_minor_version, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
}
static void xtestGetVersion_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-GetVersion");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_xtest_GetVersion_reply_major_version, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (xtest-GetVersion)", sequence_number);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xtest_GetVersion_reply_minor_version, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
}

static void xtestCompareCursor(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_xtest_CompareCursor_window, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xtest_CompareCursor_cursor, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}
static void xtestCompareCursor_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-CompareCursor");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_xtest_CompareCursor_reply_same, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (xtest-CompareCursor)", sequence_number);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}

static void xtestFakeInput(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_xtest_FakeInput_type, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_xtest_FakeInput_detail, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 2, ENC_NA);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_xtest_FakeInput_time, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xtest_FakeInput_root, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 8, ENC_NA);
    *offsetp += 8;
    proto_tree_add_item(t, hf_x11_xtest_FakeInput_rootX, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_xtest_FakeInput_rootY, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 7, ENC_NA);
    *offsetp += 7;
    proto_tree_add_item(t, hf_x11_xtest_FakeInput_deviceid, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
}

static void xtestGrabControl(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_xtest_GrabControl_impervious, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 3, ENC_NA);
    *offsetp += 3;
}
static const value_string xtest_extension_minor[] = {
    { 0, "GetVersion" },
    { 1, "CompareCursor" },
    { 2, "FakeInput" },
    { 3, "GrabControl" },
    { 0, NULL }
};
static const x11_event_info xtest_events[] = {
    { NULL, NULL }
};
static const x11_reply_info xtest_replies[] = {
    { 0, xtestGetVersion_Reply },
    { 1, xtestCompareCursor_Reply },
    { 0, NULL }
};

static void dispatch_xtest(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int minor, length;
    minor = CARD8(xtest_extension_minor);
    length = REQUEST_LENGTH();

    col_append_fstr(pinfo->cinfo, COL_INFO, "-%s",
                          val_to_str(minor, xtest_extension_minor,
                                     "<Unknown opcode %d>"));
    switch (minor) {
    case 0:
        xtestGetVersion(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 1:
        xtestCompareCursor(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 2:
        xtestFakeInput(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 3:
        xtestGrabControl(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    /* No need for a default case here, since Unknown is printed above,
       and UNDECODED() is taken care of by dissect_x11_request */
    }
}

static void register_xtest(void)
{
    set_handler("XTEST", dispatch_xtest, xtest_errors, xtest_events, NULL, xtest_replies);
}

static void struct_xv_Rational(tvbuff_t *tvb, int *offsetp, proto_tree *root, unsigned byte_order _U_, int count)
{
    int i;
    for (i = 0; i < count; i++) {
        proto_item *item;
        proto_tree *t;

        item = proto_tree_add_item(root, hf_x11_struct_xv_Rational, tvb, *offsetp, 8, ENC_NA);
        t = proto_item_add_subtree(item, ett_x11_rectangle);
        proto_tree_add_item(t, hf_x11_struct_xv_Rational_numerator, tvb, *offsetp, 4, byte_order);
        *offsetp += 4;
        proto_tree_add_item(t, hf_x11_struct_xv_Rational_denominator, tvb, *offsetp, 4, byte_order);
        *offsetp += 4;
    }
}

static void struct_xv_Format(tvbuff_t *tvb, int *offsetp, proto_tree *root, unsigned byte_order _U_, int count)
{
    int i;
    for (i = 0; i < count; i++) {
        proto_item *item;
        proto_tree *t;

        item = proto_tree_add_item(root, hf_x11_struct_xv_Format, tvb, *offsetp, 8, ENC_NA);
        t = proto_item_add_subtree(item, ett_x11_rectangle);
        proto_tree_add_item(t, hf_x11_struct_xv_Format_visual, tvb, *offsetp, 4, byte_order);
        *offsetp += 4;
        proto_tree_add_item(t, hf_x11_struct_xv_Format_depth, tvb, *offsetp, 1, byte_order);
        *offsetp += 1;
        proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 3, ENC_NA);
        *offsetp += 3;
    }
}

static int struct_size_xv_AdaptorInfo(tvbuff_t *tvb _U_, int *offsetp _U_, unsigned byte_order _U_)
{
    int size = 0;
    int f_name_size;
    int f_num_formats;
    f_name_size = tvb_get_uint16(tvb, *offsetp + size + 4, byte_order);
    f_num_formats = tvb_get_uint16(tvb, *offsetp + size + 8, byte_order);
    size += f_name_size * 1;
    size = (size + 3) & ~3;
    size += f_num_formats * 8;
    return size + 12;
}

static void struct_xv_AdaptorInfo(tvbuff_t *tvb, int *offsetp, proto_tree *root, unsigned byte_order _U_, int count)
{
    int i;
    for (i = 0; i < count; i++) {
        proto_item *item;
        proto_tree *t;
        int f_name_size;
        int f_num_formats;

        item = proto_tree_add_item(root, hf_x11_struct_xv_AdaptorInfo, tvb, *offsetp, struct_size_xv_AdaptorInfo(tvb, offsetp, byte_order), ENC_NA);
        t = proto_item_add_subtree(item, ett_x11_rectangle);
        proto_tree_add_item(t, hf_x11_struct_xv_AdaptorInfo_base_id, tvb, *offsetp, 4, byte_order);
        *offsetp += 4;
        f_name_size = tvb_get_uint16(tvb, *offsetp, byte_order);
        proto_tree_add_item(t, hf_x11_struct_xv_AdaptorInfo_name_size, tvb, *offsetp, 2, byte_order);
        *offsetp += 2;
        proto_tree_add_item(t, hf_x11_struct_xv_AdaptorInfo_num_ports, tvb, *offsetp, 2, byte_order);
        *offsetp += 2;
        f_num_formats = tvb_get_uint16(tvb, *offsetp, byte_order);
        proto_tree_add_item(t, hf_x11_struct_xv_AdaptorInfo_num_formats, tvb, *offsetp, 2, byte_order);
        *offsetp += 2;
        {
            static int* const type_bits [] = {
                &hf_x11_struct_xv_AdaptorInfo_type_mask_InputMask,
                &hf_x11_struct_xv_AdaptorInfo_type_mask_OutputMask,
                &hf_x11_struct_xv_AdaptorInfo_type_mask_VideoMask,
                &hf_x11_struct_xv_AdaptorInfo_type_mask_StillMask,
                &hf_x11_struct_xv_AdaptorInfo_type_mask_ImageMask,
                NULL
            };
            proto_tree_add_bitmask(t,  tvb, *offsetp, hf_x11_struct_xv_AdaptorInfo_type, ett_x11_rectangle, type_bits, byte_order);
        }
        *offsetp += 1;
        proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
        *offsetp += 1;
        listOfByte(tvb, offsetp, t, hf_x11_struct_xv_AdaptorInfo_name, f_name_size, byte_order);
        if (*offsetp % 4) {
            proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, (4 - *offsetp % 4), ENC_NA);
            *offsetp += (4 - *offsetp % 4);
        }
        struct_xv_Format(tvb, offsetp, t, byte_order, f_num_formats);
    }
}

static int struct_size_xv_EncodingInfo(tvbuff_t *tvb _U_, int *offsetp _U_, unsigned byte_order _U_)
{
    int size = 0;
    int f_name_size;
    f_name_size = tvb_get_uint16(tvb, *offsetp + size + 4, byte_order);
    size += f_name_size * 1;
    size = (size + 3) & ~3;
    return size + 20;
}

static void struct_xv_EncodingInfo(tvbuff_t *tvb, int *offsetp, proto_tree *root, unsigned byte_order _U_, int count)
{
    int i;
    for (i = 0; i < count; i++) {
        proto_item *item;
        proto_tree *t;
        int f_name_size;

        item = proto_tree_add_item(root, hf_x11_struct_xv_EncodingInfo, tvb, *offsetp, struct_size_xv_EncodingInfo(tvb, offsetp, byte_order), ENC_NA);
        t = proto_item_add_subtree(item, ett_x11_rectangle);
        proto_tree_add_item(t, hf_x11_struct_xv_EncodingInfo_encoding, tvb, *offsetp, 4, byte_order);
        *offsetp += 4;
        f_name_size = tvb_get_uint16(tvb, *offsetp, byte_order);
        proto_tree_add_item(t, hf_x11_struct_xv_EncodingInfo_name_size, tvb, *offsetp, 2, byte_order);
        *offsetp += 2;
        proto_tree_add_item(t, hf_x11_struct_xv_EncodingInfo_width, tvb, *offsetp, 2, byte_order);
        *offsetp += 2;
        proto_tree_add_item(t, hf_x11_struct_xv_EncodingInfo_height, tvb, *offsetp, 2, byte_order);
        *offsetp += 2;
        proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 2, ENC_NA);
        *offsetp += 2;
        struct_xv_Rational(tvb, offsetp, t, byte_order, 1);
        listOfByte(tvb, offsetp, t, hf_x11_struct_xv_EncodingInfo_name, f_name_size, byte_order);
        if (*offsetp % 4) {
            proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, (4 - *offsetp % 4), ENC_NA);
            *offsetp += (4 - *offsetp % 4);
        }
    }
}

static int struct_size_xv_AttributeInfo(tvbuff_t *tvb _U_, int *offsetp _U_, unsigned byte_order _U_)
{
    int size = 0;
    int f_size;
    f_size = tvb_get_uint32(tvb, *offsetp + size + 12, byte_order);
    size += f_size * 1;
    size = (size + 3) & ~3;
    return size + 16;
}

static void struct_xv_AttributeInfo(tvbuff_t *tvb, int *offsetp, proto_tree *root, unsigned byte_order _U_, int count)
{
    int i;
    for (i = 0; i < count; i++) {
        proto_item *item;
        proto_tree *t;
        int f_size;

        item = proto_tree_add_item(root, hf_x11_struct_xv_AttributeInfo, tvb, *offsetp, struct_size_xv_AttributeInfo(tvb, offsetp, byte_order), ENC_NA);
        t = proto_item_add_subtree(item, ett_x11_rectangle);
        {
            static int* const flags_bits [] = {
                &hf_x11_struct_xv_AttributeInfo_flags_mask_Gettable,
                &hf_x11_struct_xv_AttributeInfo_flags_mask_Settable,
                NULL
            };
            proto_tree_add_bitmask(t,  tvb, *offsetp, hf_x11_struct_xv_AttributeInfo_flags, ett_x11_rectangle, flags_bits, byte_order);
        }
        *offsetp += 4;
        proto_tree_add_item(t, hf_x11_struct_xv_AttributeInfo_min, tvb, *offsetp, 4, byte_order);
        *offsetp += 4;
        proto_tree_add_item(t, hf_x11_struct_xv_AttributeInfo_max, tvb, *offsetp, 4, byte_order);
        *offsetp += 4;
        f_size = tvb_get_uint32(tvb, *offsetp, byte_order);
        proto_tree_add_item(t, hf_x11_struct_xv_AttributeInfo_size, tvb, *offsetp, 4, byte_order);
        *offsetp += 4;
        listOfByte(tvb, offsetp, t, hf_x11_struct_xv_AttributeInfo_name, f_size, byte_order);
        if (*offsetp % 4) {
            proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, (4 - *offsetp % 4), ENC_NA);
            *offsetp += (4 - *offsetp % 4);
        }
    }
}

static void struct_xv_ImageFormatInfo(tvbuff_t *tvb, int *offsetp, proto_tree *root, unsigned byte_order _U_, int count)
{
    int i;
    for (i = 0; i < count; i++) {
        proto_item *item;
        proto_tree *t;

        item = proto_tree_add_item(root, hf_x11_struct_xv_ImageFormatInfo, tvb, *offsetp, 128, ENC_NA);
        t = proto_item_add_subtree(item, ett_x11_rectangle);
        proto_tree_add_item(t, hf_x11_struct_xv_ImageFormatInfo_id, tvb, *offsetp, 4, byte_order);
        *offsetp += 4;
        field8(tvb, offsetp, t, hf_x11_struct_xv_ImageFormatInfo_type, byte_order);
        field8(tvb, offsetp, t, hf_x11_struct_xv_ImageFormatInfo_byte_order, byte_order);
        proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 2, ENC_NA);
        *offsetp += 2;
        listOfByte(tvb, offsetp, t, hf_x11_struct_xv_ImageFormatInfo_guid, 16, byte_order);
        proto_tree_add_item(t, hf_x11_struct_xv_ImageFormatInfo_bpp, tvb, *offsetp, 1, byte_order);
        *offsetp += 1;
        proto_tree_add_item(t, hf_x11_struct_xv_ImageFormatInfo_num_planes, tvb, *offsetp, 1, byte_order);
        *offsetp += 1;
        proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 2, ENC_NA);
        *offsetp += 2;
        proto_tree_add_item(t, hf_x11_struct_xv_ImageFormatInfo_depth, tvb, *offsetp, 1, byte_order);
        *offsetp += 1;
        proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 3, ENC_NA);
        *offsetp += 3;
        proto_tree_add_item(t, hf_x11_struct_xv_ImageFormatInfo_red_mask, tvb, *offsetp, 4, byte_order);
        *offsetp += 4;
        proto_tree_add_item(t, hf_x11_struct_xv_ImageFormatInfo_green_mask, tvb, *offsetp, 4, byte_order);
        *offsetp += 4;
        proto_tree_add_item(t, hf_x11_struct_xv_ImageFormatInfo_blue_mask, tvb, *offsetp, 4, byte_order);
        *offsetp += 4;
        field8(tvb, offsetp, t, hf_x11_struct_xv_ImageFormatInfo_format, byte_order);
        proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 3, ENC_NA);
        *offsetp += 3;
        proto_tree_add_item(t, hf_x11_struct_xv_ImageFormatInfo_y_sample_bits, tvb, *offsetp, 4, byte_order);
        *offsetp += 4;
        proto_tree_add_item(t, hf_x11_struct_xv_ImageFormatInfo_u_sample_bits, tvb, *offsetp, 4, byte_order);
        *offsetp += 4;
        proto_tree_add_item(t, hf_x11_struct_xv_ImageFormatInfo_v_sample_bits, tvb, *offsetp, 4, byte_order);
        *offsetp += 4;
        proto_tree_add_item(t, hf_x11_struct_xv_ImageFormatInfo_vhorz_y_period, tvb, *offsetp, 4, byte_order);
        *offsetp += 4;
        proto_tree_add_item(t, hf_x11_struct_xv_ImageFormatInfo_vhorz_u_period, tvb, *offsetp, 4, byte_order);
        *offsetp += 4;
        proto_tree_add_item(t, hf_x11_struct_xv_ImageFormatInfo_vhorz_v_period, tvb, *offsetp, 4, byte_order);
        *offsetp += 4;
        proto_tree_add_item(t, hf_x11_struct_xv_ImageFormatInfo_vvert_y_period, tvb, *offsetp, 4, byte_order);
        *offsetp += 4;
        proto_tree_add_item(t, hf_x11_struct_xv_ImageFormatInfo_vvert_u_period, tvb, *offsetp, 4, byte_order);
        *offsetp += 4;
        proto_tree_add_item(t, hf_x11_struct_xv_ImageFormatInfo_vvert_v_period, tvb, *offsetp, 4, byte_order);
        *offsetp += 4;
        listOfByte(tvb, offsetp, t, hf_x11_struct_xv_ImageFormatInfo_vcomp_order, 32, byte_order);
        field8(tvb, offsetp, t, hf_x11_struct_xv_ImageFormatInfo_vscanline_order, byte_order);
        proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 11, ENC_NA);
        *offsetp += 11;
    }
}

static void xvPortNotify(tvbuff_t *tvb, int *offsetp, proto_tree *t, unsigned byte_order)
{
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    CARD16(event_sequencenumber);
    proto_tree_add_item(t, hf_x11_xv_PortNotify_time, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xv_PortNotify_port, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xv_PortNotify_attribute, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xv_PortNotify_value, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}


static void xvQueryExtension(tvbuff_t *tvb _U_, packet_info *pinfo _U_, int *offsetp _U_, proto_tree *t _U_, unsigned byte_order _U_, int length _U_)
{
}
static void xvQueryExtension_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-QueryExtension");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (xv-QueryExtension)", sequence_number);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xv_QueryExtension_reply_major, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_xv_QueryExtension_reply_minor, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
}

static void xvQueryAdaptors(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_xv_QueryAdaptors_window, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}
static void xvQueryAdaptors_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;
    int f_num_adaptors;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-QueryAdaptors");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (xv-QueryAdaptors)", sequence_number);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    f_num_adaptors = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_xv_QueryAdaptors_reply_num_adaptors, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 22, ENC_NA);
    *offsetp += 22;
    struct_xv_AdaptorInfo(tvb, offsetp, t, byte_order, f_num_adaptors);
}

static void xvQueryEncodings(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_xv_QueryEncodings_port, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}
static void xvQueryEncodings_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;
    int f_num_encodings;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-QueryEncodings");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (xv-QueryEncodings)", sequence_number);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    f_num_encodings = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_xv_QueryEncodings_reply_num_encodings, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 22, ENC_NA);
    *offsetp += 22;
    struct_xv_EncodingInfo(tvb, offsetp, t, byte_order, f_num_encodings);
}

static void xvGrabPort(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_xv_GrabPort_port, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    field32(tvb, offsetp, t, hf_x11_xv_GrabPort_time, byte_order);
}
static void xvGrabPort_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-GrabPort");

    REPLY(reply);
    field8(tvb, offsetp, t, hf_x11_xv_GrabPort_reply_result, byte_order);
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (xv-GrabPort)", sequence_number);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}

static void xvUngrabPort(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_xv_UngrabPort_port, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    field32(tvb, offsetp, t, hf_x11_xv_UngrabPort_time, byte_order);
}

static void xvPutVideo(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_xv_PutVideo_port, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xv_PutVideo_drawable, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xv_PutVideo_gc, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xv_PutVideo_vid_x, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_xv_PutVideo_vid_y, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_xv_PutVideo_vid_w, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_xv_PutVideo_vid_h, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_xv_PutVideo_drw_x, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_xv_PutVideo_drw_y, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_xv_PutVideo_drw_w, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_xv_PutVideo_drw_h, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
}

static void xvPutStill(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_xv_PutStill_port, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xv_PutStill_drawable, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xv_PutStill_gc, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xv_PutStill_vid_x, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_xv_PutStill_vid_y, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_xv_PutStill_vid_w, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_xv_PutStill_vid_h, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_xv_PutStill_drw_x, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_xv_PutStill_drw_y, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_xv_PutStill_drw_w, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_xv_PutStill_drw_h, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
}

static void xvGetVideo(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_xv_GetVideo_port, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xv_GetVideo_drawable, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xv_GetVideo_gc, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xv_GetVideo_vid_x, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_xv_GetVideo_vid_y, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_xv_GetVideo_vid_w, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_xv_GetVideo_vid_h, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_xv_GetVideo_drw_x, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_xv_GetVideo_drw_y, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_xv_GetVideo_drw_w, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_xv_GetVideo_drw_h, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
}

static void xvGetStill(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_xv_GetStill_port, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xv_GetStill_drawable, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xv_GetStill_gc, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xv_GetStill_vid_x, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_xv_GetStill_vid_y, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_xv_GetStill_vid_w, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_xv_GetStill_vid_h, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_xv_GetStill_drw_x, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_xv_GetStill_drw_y, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_xv_GetStill_drw_w, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_xv_GetStill_drw_h, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
}

static void xvStopVideo(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_xv_StopVideo_port, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xv_StopVideo_drawable, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}

static void xvSelectVideoNotify(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_xv_SelectVideoNotify_drawable, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xv_SelectVideoNotify_onoff, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 3, ENC_NA);
    *offsetp += 3;
}

static void xvSelectPortNotify(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_xv_SelectPortNotify_port, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xv_SelectPortNotify_onoff, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 3, ENC_NA);
    *offsetp += 3;
}

static void xvQueryBestSize(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_xv_QueryBestSize_port, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xv_QueryBestSize_vid_w, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_xv_QueryBestSize_vid_h, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_xv_QueryBestSize_drw_w, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_xv_QueryBestSize_drw_h, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_xv_QueryBestSize_motion, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 3, ENC_NA);
    *offsetp += 3;
}
static void xvQueryBestSize_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-QueryBestSize");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (xv-QueryBestSize)", sequence_number);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xv_QueryBestSize_reply_actual_width, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_xv_QueryBestSize_reply_actual_height, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
}

static void xvSetPortAttribute(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_xv_SetPortAttribute_port, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xv_SetPortAttribute_attribute, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xv_SetPortAttribute_value, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}

static void xvGetPortAttribute(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_xv_GetPortAttribute_port, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xv_GetPortAttribute_attribute, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}
static void xvGetPortAttribute_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-GetPortAttribute");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (xv-GetPortAttribute)", sequence_number);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xv_GetPortAttribute_reply_value, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}

static void xvQueryPortAttributes(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_xv_QueryPortAttributes_port, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}
static void xvQueryPortAttributes_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;
    int f_num_attributes;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-QueryPortAttributes");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (xv-QueryPortAttributes)", sequence_number);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    f_num_attributes = tvb_get_uint32(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_xv_QueryPortAttributes_reply_num_attributes, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xv_QueryPortAttributes_reply_text_size, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 16, ENC_NA);
    *offsetp += 16;
    struct_xv_AttributeInfo(tvb, offsetp, t, byte_order, f_num_attributes);
}

static void xvListImageFormats(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_xv_ListImageFormats_port, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}
static void xvListImageFormats_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;
    int f_num_formats;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-ListImageFormats");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (xv-ListImageFormats)", sequence_number);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    f_num_formats = tvb_get_uint32(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_xv_ListImageFormats_reply_num_formats, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 20, ENC_NA);
    *offsetp += 20;
    struct_xv_ImageFormatInfo(tvb, offsetp, t, byte_order, f_num_formats);
}

static void xvQueryImageAttributes(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_xv_QueryImageAttributes_port, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xv_QueryImageAttributes_id, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xv_QueryImageAttributes_width, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_xv_QueryImageAttributes_height, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
}
static void xvQueryImageAttributes_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;
    int f_num_planes;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-QueryImageAttributes");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (xv-QueryImageAttributes)", sequence_number);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    f_num_planes = tvb_get_uint32(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_xv_QueryImageAttributes_reply_num_planes, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xv_QueryImageAttributes_reply_data_size, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xv_QueryImageAttributes_reply_width, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_xv_QueryImageAttributes_reply_height, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 12, ENC_NA);
    *offsetp += 12;
    listOfCard32(tvb, offsetp, t, hf_x11_xv_QueryImageAttributes_reply_pitches, hf_x11_xv_QueryImageAttributes_reply_pitches_item, f_num_planes, byte_order);
    listOfCard32(tvb, offsetp, t, hf_x11_xv_QueryImageAttributes_reply_offsets, hf_x11_xv_QueryImageAttributes_reply_offsets_item, f_num_planes, byte_order);
}

static void xvPutImage(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_xv_PutImage_port, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xv_PutImage_drawable, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xv_PutImage_gc, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xv_PutImage_id, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xv_PutImage_src_x, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_xv_PutImage_src_y, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_xv_PutImage_src_w, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_xv_PutImage_src_h, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_xv_PutImage_drw_x, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_xv_PutImage_drw_y, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_xv_PutImage_drw_w, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_xv_PutImage_drw_h, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_xv_PutImage_width, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_xv_PutImage_height, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    listOfByte(tvb, offsetp, t, hf_x11_xv_PutImage_data, (length - 40) / 1, byte_order);
}

static void xvShmPutImage(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_xv_ShmPutImage_port, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xv_ShmPutImage_drawable, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xv_ShmPutImage_gc, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xv_ShmPutImage_shmseg, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xv_ShmPutImage_id, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xv_ShmPutImage_offset, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xv_ShmPutImage_src_x, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_xv_ShmPutImage_src_y, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_xv_ShmPutImage_src_w, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_xv_ShmPutImage_src_h, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_xv_ShmPutImage_drw_x, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_xv_ShmPutImage_drw_y, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_xv_ShmPutImage_drw_w, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_xv_ShmPutImage_drw_h, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_xv_ShmPutImage_width, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_xv_ShmPutImage_height, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_xv_ShmPutImage_send_event, tvb, *offsetp, 1, byte_order);
    *offsetp += 1;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 3, ENC_NA);
    *offsetp += 3;
}
static const value_string xv_extension_minor[] = {
    { 0, "QueryExtension" },
    { 1, "QueryAdaptors" },
    { 2, "QueryEncodings" },
    { 3, "GrabPort" },
    { 4, "UngrabPort" },
    { 5, "PutVideo" },
    { 6, "PutStill" },
    { 7, "GetVideo" },
    { 8, "GetStill" },
    { 9, "StopVideo" },
    { 10, "SelectVideoNotify" },
    { 11, "SelectPortNotify" },
    { 12, "QueryBestSize" },
    { 13, "SetPortAttribute" },
    { 14, "GetPortAttribute" },
    { 15, "QueryPortAttributes" },
    { 16, "ListImageFormats" },
    { 17, "QueryImageAttributes" },
    { 18, "PutImage" },
    { 19, "ShmPutImage" },
    { 0, NULL }
};
static const x11_event_info xv_events[] = {
    { "xv-PortNotify", xvPortNotify },
    { NULL, NULL }
};
static const x11_reply_info xv_replies[] = {
    { 0, xvQueryExtension_Reply },
    { 1, xvQueryAdaptors_Reply },
    { 2, xvQueryEncodings_Reply },
    { 3, xvGrabPort_Reply },
    { 12, xvQueryBestSize_Reply },
    { 14, xvGetPortAttribute_Reply },
    { 15, xvQueryPortAttributes_Reply },
    { 16, xvListImageFormats_Reply },
    { 17, xvQueryImageAttributes_Reply },
    { 0, NULL }
};

static void dispatch_xv(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int minor, length;
    minor = CARD8(xv_extension_minor);
    length = REQUEST_LENGTH();

    col_append_fstr(pinfo->cinfo, COL_INFO, "-%s",
                          val_to_str(minor, xv_extension_minor,
                                     "<Unknown opcode %d>"));
    switch (minor) {
    case 0:
        xvQueryExtension(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 1:
        xvQueryAdaptors(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 2:
        xvQueryEncodings(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 3:
        xvGrabPort(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 4:
        xvUngrabPort(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 5:
        xvPutVideo(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 6:
        xvPutStill(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 7:
        xvGetVideo(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 8:
        xvGetStill(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 9:
        xvStopVideo(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 10:
        xvSelectVideoNotify(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 11:
        xvSelectPortNotify(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 12:
        xvQueryBestSize(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 13:
        xvSetPortAttribute(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 14:
        xvGetPortAttribute(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 15:
        xvQueryPortAttributes(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 16:
        xvListImageFormats(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 17:
        xvQueryImageAttributes(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 18:
        xvPutImage(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 19:
        xvShmPutImage(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    /* No need for a default case here, since Unknown is printed above,
       and UNDECODED() is taken care of by dissect_x11_request */
    }
}

static void register_xv(void)
{
    set_handler("XVideo", dispatch_xv, xv_errors, xv_events, NULL, xv_replies);
}

static void struct_xvmc_SurfaceInfo(tvbuff_t *tvb, int *offsetp, proto_tree *root, unsigned byte_order _U_, int count)
{
    int i;
    for (i = 0; i < count; i++) {
        proto_item *item;
        proto_tree *t;

        item = proto_tree_add_item(root, hf_x11_struct_xvmc_SurfaceInfo, tvb, *offsetp, 24, ENC_NA);
        t = proto_item_add_subtree(item, ett_x11_rectangle);
        proto_tree_add_item(t, hf_x11_struct_xvmc_SurfaceInfo_id, tvb, *offsetp, 4, byte_order);
        *offsetp += 4;
        proto_tree_add_item(t, hf_x11_struct_xvmc_SurfaceInfo_chroma_format, tvb, *offsetp, 2, byte_order);
        *offsetp += 2;
        proto_tree_add_item(t, hf_x11_struct_xvmc_SurfaceInfo_pad0, tvb, *offsetp, 2, byte_order);
        *offsetp += 2;
        proto_tree_add_item(t, hf_x11_struct_xvmc_SurfaceInfo_max_width, tvb, *offsetp, 2, byte_order);
        *offsetp += 2;
        proto_tree_add_item(t, hf_x11_struct_xvmc_SurfaceInfo_max_height, tvb, *offsetp, 2, byte_order);
        *offsetp += 2;
        proto_tree_add_item(t, hf_x11_struct_xvmc_SurfaceInfo_subpicture_max_width, tvb, *offsetp, 2, byte_order);
        *offsetp += 2;
        proto_tree_add_item(t, hf_x11_struct_xvmc_SurfaceInfo_subpicture_max_height, tvb, *offsetp, 2, byte_order);
        *offsetp += 2;
        proto_tree_add_item(t, hf_x11_struct_xvmc_SurfaceInfo_mc_type, tvb, *offsetp, 4, byte_order);
        *offsetp += 4;
        proto_tree_add_item(t, hf_x11_struct_xvmc_SurfaceInfo_flags, tvb, *offsetp, 4, byte_order);
        *offsetp += 4;
    }
}

static void xvmcQueryVersion(tvbuff_t *tvb _U_, packet_info *pinfo _U_, int *offsetp _U_, proto_tree *t _U_, unsigned byte_order _U_, int length _U_)
{
}
static void xvmcQueryVersion_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-QueryVersion");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (xvmc-QueryVersion)", sequence_number);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xvmc_QueryVersion_reply_major, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xvmc_QueryVersion_reply_minor, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}

static void xvmcListSurfaceTypes(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_xvmc_ListSurfaceTypes_port_id, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}
static void xvmcListSurfaceTypes_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;
    int f_num;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-ListSurfaceTypes");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (xvmc-ListSurfaceTypes)", sequence_number);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    f_num = tvb_get_uint32(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_xvmc_ListSurfaceTypes_reply_num, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 20, ENC_NA);
    *offsetp += 20;
    struct_xvmc_SurfaceInfo(tvb, offsetp, t, byte_order, f_num);
}

static void xvmcCreateContext(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_xvmc_CreateContext_context_id, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xvmc_CreateContext_port_id, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xvmc_CreateContext_surface_id, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xvmc_CreateContext_width, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_xvmc_CreateContext_height, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_xvmc_CreateContext_flags, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}
static void xvmcCreateContext_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;
    int f_length;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-CreateContext");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (xvmc-CreateContext)", sequence_number);
    *offsetp += 2;
    f_length = tvb_get_uint32(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xvmc_CreateContext_reply_width_actual, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_xvmc_CreateContext_reply_height_actual, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_xvmc_CreateContext_reply_flags_return, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 20, ENC_NA);
    *offsetp += 20;
    listOfCard32(tvb, offsetp, t, hf_x11_xvmc_CreateContext_reply_priv_data, hf_x11_xvmc_CreateContext_reply_priv_data_item, f_length, byte_order);
}

static void xvmcDestroyContext(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_xvmc_DestroyContext_context_id, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}

static void xvmcCreateSurface(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_xvmc_CreateSurface_surface_id, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xvmc_CreateSurface_context_id, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}
static void xvmcCreateSurface_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;
    int f_length;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-CreateSurface");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (xvmc-CreateSurface)", sequence_number);
    *offsetp += 2;
    f_length = tvb_get_uint32(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 24, ENC_NA);
    *offsetp += 24;
    listOfCard32(tvb, offsetp, t, hf_x11_xvmc_CreateSurface_reply_priv_data, hf_x11_xvmc_CreateSurface_reply_priv_data_item, f_length, byte_order);
}

static void xvmcDestroySurface(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_xvmc_DestroySurface_surface_id, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}

static void xvmcCreateSubpicture(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_xvmc_CreateSubpicture_subpicture_id, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xvmc_CreateSubpicture_context, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xvmc_CreateSubpicture_xvimage_id, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xvmc_CreateSubpicture_width, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_xvmc_CreateSubpicture_height, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
}
static void xvmcCreateSubpicture_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;
    int f_length;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-CreateSubpicture");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (xvmc-CreateSubpicture)", sequence_number);
    *offsetp += 2;
    f_length = tvb_get_uint32(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xvmc_CreateSubpicture_reply_width_actual, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_xvmc_CreateSubpicture_reply_height_actual, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_xvmc_CreateSubpicture_reply_num_palette_entries, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_xvmc_CreateSubpicture_reply_entry_bytes, tvb, *offsetp, 2, byte_order);
    *offsetp += 2;
    listOfByte(tvb, offsetp, t, hf_x11_xvmc_CreateSubpicture_reply_component_order, 4, byte_order);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 12, ENC_NA);
    *offsetp += 12;
    listOfCard32(tvb, offsetp, t, hf_x11_xvmc_CreateSubpicture_reply_priv_data, hf_x11_xvmc_CreateSubpicture_reply_priv_data_item, f_length, byte_order);
}

static void xvmcDestroySubpicture(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_xvmc_DestroySubpicture_subpicture_id, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}

static void xvmcListSubpictureTypes(tvbuff_t *tvb, packet_info *pinfo _U_, int *offsetp, proto_tree *t, unsigned byte_order, int length _U_)
{
    proto_tree_add_item(t, hf_x11_xvmc_ListSubpictureTypes_port_id, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_xvmc_ListSubpictureTypes_surface_id, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
}
static void xvmcListSubpictureTypes_Reply(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int sequence_number;
    int f_num;

    col_append_fstr(pinfo->cinfo, COL_INFO, "-ListSubpictureTypes");

    REPLY(reply);
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 1, ENC_NA);
    *offsetp += 1;
    sequence_number = tvb_get_uint16(tvb, *offsetp, byte_order);
    proto_tree_add_uint_format_value(t, hf_x11_reply_sequencenumber, tvb, *offsetp, 2, sequence_number,
            "%d (xvmc-ListSubpictureTypes)", sequence_number);
    *offsetp += 2;
    proto_tree_add_item(t, hf_x11_replylength, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    f_num = tvb_get_uint32(tvb, *offsetp, byte_order);
    proto_tree_add_item(t, hf_x11_xvmc_ListSubpictureTypes_reply_num, tvb, *offsetp, 4, byte_order);
    *offsetp += 4;
    proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, 20, ENC_NA);
    *offsetp += 20;
    struct_xv_ImageFormatInfo(tvb, offsetp, t, byte_order, f_num);
}
static const value_string xvmc_extension_minor[] = {
    { 0, "QueryVersion" },
    { 1, "ListSurfaceTypes" },
    { 2, "CreateContext" },
    { 3, "DestroyContext" },
    { 4, "CreateSurface" },
    { 5, "DestroySurface" },
    { 6, "CreateSubpicture" },
    { 7, "DestroySubpicture" },
    { 8, "ListSubpictureTypes" },
    { 0, NULL }
};
static const x11_event_info xvmc_events[] = {
    { NULL, NULL }
};
static const x11_reply_info xvmc_replies[] = {
    { 0, xvmcQueryVersion_Reply },
    { 1, xvmcListSurfaceTypes_Reply },
    { 2, xvmcCreateContext_Reply },
    { 4, xvmcCreateSurface_Reply },
    { 6, xvmcCreateSubpicture_Reply },
    { 8, xvmcListSubpictureTypes_Reply },
    { 0, NULL }
};

static void dispatch_xvmc(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, unsigned byte_order)
{
    int minor, length;
    minor = CARD8(xvmc_extension_minor);
    length = REQUEST_LENGTH();

    col_append_fstr(pinfo->cinfo, COL_INFO, "-%s",
                          val_to_str(minor, xvmc_extension_minor,
                                     "<Unknown opcode %d>"));
    switch (minor) {
    case 0:
        xvmcQueryVersion(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 1:
        xvmcListSurfaceTypes(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 2:
        xvmcCreateContext(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 3:
        xvmcDestroyContext(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 4:
        xvmcCreateSurface(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 5:
        xvmcDestroySurface(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 6:
        xvmcCreateSubpicture(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 7:
        xvmcDestroySubpicture(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    case 8:
        xvmcListSubpictureTypes(tvb, pinfo, offsetp, t, byte_order, length);
        break;
    /* No need for a default case here, since Unknown is printed above,
       and UNDECODED() is taken care of by dissect_x11_request */
    }
}

static void register_xvmc(void)
{
    set_handler("XVideo-MotionCompensation", dispatch_xvmc, xvmc_errors, xvmc_events, NULL, xvmc_replies);
}
static void register_x11_extensions(void)
{
    register_bigreq();
    register_composite();
    register_damage();
    register_dbe();
    register_dpms();
    register_dri2();
    register_dri3();
    register_ge();
    register_glx();
    register_present();
    register_randr();
    register_record();
    register_render();
    register_res();
    register_screensaver();
    register_shape();
    register_shm();
    register_sync();
    register_xc_misc();
    register_xevie();
    register_xf86dri();
    register_xf86vidmode();
    register_xfixes();
    register_xinerama();
    register_xinput();
    register_xkb();
    register_xprint();
    register_xselinux();
    register_xtest();
    register_xv();
    register_xvmc();
}
