CattrInfo[] ReadCattrs (PacketReader r) {
CattrInfo[] res = new CattrInfo [r.ReadInt ()];
for (int i = 0; i < res.Length; ++i) {
CattrInfo info = new CattrInfo ();
info.ctor_id = r.ReadId ();
info.ctor_args = new ValueImpl [r.ReadInt ()];
for (int j = 0; j < info.ctor_args.Length; ++j) {
info.ctor_args [j] = r.ReadValue ();
}
info.named_args = new CattrNamedArgInfo [r.ReadInt ()];
for (int j = 0; j < info.named_args.Length; ++j) {
CattrNamedArgInfo arg = new CattrNamedArgInfo ();
int arg_type = r.ReadByte ();
arg.is_property = arg_type == 0x54;
arg.id = r.ReadId ();
arg.value = r.ReadValue ();
info.named_args [j] = arg;
}
res [i] = info;
}
return res;
}