struct A {
  @key
  string name;
  string message;
  unsigned long count;
};

struct T {
  short s;
  long l;
};

struct B {
  A a;
  sequence<T> ts;
};

struct C {
  B b;
  @key
  short k;
};

module M1 {
  @appendable
  struct O {
    @optional long x;
  };
};

struct D {
  wstring ws;
  wchar wc;
  unsigned long count;
};

struct U {
  uint32 w;
  @key string x;
  string y;
  @key uint32 z;
};

struct E {
  uint32 a;
  @key sequence<U> b[2];
  @key uint32 c;
};
