// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
// RUN: c_compiler -c -o %t1.o -I "common" "common/testsuite.c"
// RUN: cxx_compiler cxx_rtti -c %s -I "common" -o %t2.o
// RUN: c_compiler -c %s -I "common" -o %t3.o
// RUN: linker -o %t2%exeext  %t1.o %t2.o %t3.o
// RUN: runtool %t2%exeext | checker "TEST PASSED"
#include "testsuite.h"
#ifdef __cplusplus

struct  S836C8_nt  {
  void  mf836c8(); // _ZN9S836C8_nt7mf836c8Ev
};
//SIG(-1 S836C8_nt) C1{ m}


void  S836C8_nt ::mf836c8(){}

//skip512 S836C8_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S836C7_nt  {
  void *s836c7f0;
  int s836c7f1;
  ::S836C8_nt s836c7f2;
  ::S836C8_nt s836c7f3;
  void  mf836c7(); // _ZN9S836C7_nt7mf836c7Ev
};
//SIG(-1 S836C7_nt) C1{ m Fp Fi FC2{ m} FC2}


void  S836C7_nt ::mf836c7(){}

//skip512 S836C7_nt

#else // __cplusplus

Class_Descriptor cd_S836C7_nt = {  "S836C7_nt", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  ABISELECT(16,12), // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S836C6_nt  : S836C7_nt {
};
//SIG(-1 S836C6_nt) C1{ BC2{ m Fp Fi FC3{ m} FC3}}



//skip512 S836C6_nt

#else // __cplusplus

extern Class_Descriptor cd_S836C7_nt;
static Base_Class bases_S836C6_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S836C7_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S836C5_nt  {
  void *s836c5f0;
  int s836c5f1;
  ::S836C6_nt s836c5f2;
  ::S836C6_nt s836c5f3;
  int s836c5f4;
  virtual  ~S836C5_nt(); // _ZN9S836C5_ntD1Ev
  virtual void  v1(); // _ZN9S836C5_nt2v1Ev
  virtual void  v2(); // _ZN9S836C5_nt2v2Ev
  virtual void  v3(); // _ZN9S836C5_nt2v3Ev
  virtual void  v4(); // _ZN9S836C5_nt2v4Ev
  virtual void  v5(); // _ZN9S836C5_nt2v5Ev
  virtual void  v6(); // _ZN9S836C5_nt2v6Ev
  virtual void  v7(); // _ZN9S836C5_nt2v7Ev
  virtual void  v8(); // _ZN9S836C5_nt2v8Ev
  virtual void  v9(); // _ZN9S836C5_nt2v9Ev
  virtual void  v10(); // _ZN9S836C5_nt3v10Ev
  virtual void  v11(); // _ZN9S836C5_nt3v11Ev
  virtual void  v12(); // _ZN9S836C5_nt3v12Ev
  virtual void  v13(); // _ZN9S836C5_nt3v13Ev
  virtual void  v14(); // _ZN9S836C5_nt3v14Ev
  virtual void  v15(); // _ZN9S836C5_nt3v15Ev
  virtual void  v16(); // _ZN9S836C5_nt3v16Ev
  virtual void  v17(); // _ZN9S836C5_nt3v17Ev
  virtual void  v18(); // _ZN9S836C5_nt3v18Ev
  virtual void  v19(); // _ZN9S836C5_nt3v19Ev
  virtual void  v20(); // _ZN9S836C5_nt3v20Ev
  virtual void  v21(); // _ZN9S836C5_nt3v21Ev
  virtual void  v22(); // _ZN9S836C5_nt3v22Ev
  virtual void  v23(); // _ZN9S836C5_nt3v23Ev
  S836C5_nt(); // tgen
};
//SIG(-1 S836C5_nt) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 Fp Fi FC2{ BC3{ m Fp Fi FC4{ m} FC4}} FC2 Fi}


 S836C5_nt ::~S836C5_nt(){ note_dtor("S836C5_nt", this);}
void  S836C5_nt ::v1(){vfunc_called(this, "_ZN9S836C5_nt2v1Ev");}
void  S836C5_nt ::v2(){vfunc_called(this, "_ZN9S836C5_nt2v2Ev");}
void  S836C5_nt ::v3(){vfunc_called(this, "_ZN9S836C5_nt2v3Ev");}
void  S836C5_nt ::v4(){vfunc_called(this, "_ZN9S836C5_nt2v4Ev");}
void  S836C5_nt ::v5(){vfunc_called(this, "_ZN9S836C5_nt2v5Ev");}
void  S836C5_nt ::v6(){vfunc_called(this, "_ZN9S836C5_nt2v6Ev");}
void  S836C5_nt ::v7(){vfunc_called(this, "_ZN9S836C5_nt2v7Ev");}
void  S836C5_nt ::v8(){vfunc_called(this, "_ZN9S836C5_nt2v8Ev");}
void  S836C5_nt ::v9(){vfunc_called(this, "_ZN9S836C5_nt2v9Ev");}
void  S836C5_nt ::v10(){vfunc_called(this, "_ZN9S836C5_nt3v10Ev");}
void  S836C5_nt ::v11(){vfunc_called(this, "_ZN9S836C5_nt3v11Ev");}
void  S836C5_nt ::v12(){vfunc_called(this, "_ZN9S836C5_nt3v12Ev");}
void  S836C5_nt ::v13(){vfunc_called(this, "_ZN9S836C5_nt3v13Ev");}
void  S836C5_nt ::v14(){vfunc_called(this, "_ZN9S836C5_nt3v14Ev");}
void  S836C5_nt ::v15(){vfunc_called(this, "_ZN9S836C5_nt3v15Ev");}
void  S836C5_nt ::v16(){vfunc_called(this, "_ZN9S836C5_nt3v16Ev");}
void  S836C5_nt ::v17(){vfunc_called(this, "_ZN9S836C5_nt3v17Ev");}
void  S836C5_nt ::v18(){vfunc_called(this, "_ZN9S836C5_nt3v18Ev");}
void  S836C5_nt ::v19(){vfunc_called(this, "_ZN9S836C5_nt3v19Ev");}
void  S836C5_nt ::v20(){vfunc_called(this, "_ZN9S836C5_nt3v20Ev");}
void  S836C5_nt ::v21(){vfunc_called(this, "_ZN9S836C5_nt3v21Ev");}
void  S836C5_nt ::v22(){vfunc_called(this, "_ZN9S836C5_nt3v22Ev");}
void  S836C5_nt ::v23(){vfunc_called(this, "_ZN9S836C5_nt3v23Ev");}
S836C5_nt ::S836C5_nt(){ note_ctor("S836C5_nt", this);} // tgen

//skip512 S836C5_nt

#else // __cplusplus

extern void _ZN9S836C5_ntC1Ev();
extern void _ZN9S836C5_ntD1Ev();
Name_Map name_map_S836C5_nt[] = {
  NSPAIR(_ZN9S836C5_ntC1Ev),
  NSPAIR(_ZN9S836C5_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI9S836C5_nt[];
extern void _ZN9S836C5_ntD1Ev();
extern void _ZN9S836C5_ntD0Ev();
extern void _ZN9S836C5_nt2v1Ev();
extern void _ZN9S836C5_nt2v2Ev();
extern void _ZN9S836C5_nt2v3Ev();
extern void _ZN9S836C5_nt2v4Ev();
extern void _ZN9S836C5_nt2v5Ev();
extern void _ZN9S836C5_nt2v6Ev();
extern void _ZN9S836C5_nt2v7Ev();
extern void _ZN9S836C5_nt2v8Ev();
extern void _ZN9S836C5_nt2v9Ev();
extern void _ZN9S836C5_nt3v10Ev();
extern void _ZN9S836C5_nt3v11Ev();
extern void _ZN9S836C5_nt3v12Ev();
extern void _ZN9S836C5_nt3v13Ev();
extern void _ZN9S836C5_nt3v14Ev();
extern void _ZN9S836C5_nt3v15Ev();
extern void _ZN9S836C5_nt3v16Ev();
extern void _ZN9S836C5_nt3v17Ev();
extern void _ZN9S836C5_nt3v18Ev();
extern void _ZN9S836C5_nt3v19Ev();
extern void _ZN9S836C5_nt3v20Ev();
extern void _ZN9S836C5_nt3v21Ev();
extern void _ZN9S836C5_nt3v22Ev();
extern void _ZN9S836C5_nt3v23Ev();
static  VTBL_ENTRY vtc_S836C5_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S836C5_nt[0]),
  (VTBL_ENTRY)&_ZN9S836C5_ntD1Ev,
  (VTBL_ENTRY)&_ZN9S836C5_ntD0Ev,
  (VTBL_ENTRY)&_ZN9S836C5_nt2v1Ev,
  (VTBL_ENTRY)&_ZN9S836C5_nt2v2Ev,
  (VTBL_ENTRY)&_ZN9S836C5_nt2v3Ev,
  (VTBL_ENTRY)&_ZN9S836C5_nt2v4Ev,
  (VTBL_ENTRY)&_ZN9S836C5_nt2v5Ev,
  (VTBL_ENTRY)&_ZN9S836C5_nt2v6Ev,
  (VTBL_ENTRY)&_ZN9S836C5_nt2v7Ev,
  (VTBL_ENTRY)&_ZN9S836C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN9S836C5_nt2v9Ev,
  (VTBL_ENTRY)&_ZN9S836C5_nt3v10Ev,
  (VTBL_ENTRY)&_ZN9S836C5_nt3v11Ev,
  (VTBL_ENTRY)&_ZN9S836C5_nt3v12Ev,
  (VTBL_ENTRY)&_ZN9S836C5_nt3v13Ev,
  (VTBL_ENTRY)&_ZN9S836C5_nt3v14Ev,
  (VTBL_ENTRY)&_ZN9S836C5_nt3v15Ev,
  (VTBL_ENTRY)&_ZN9S836C5_nt3v16Ev,
  (VTBL_ENTRY)&_ZN9S836C5_nt3v17Ev,
  (VTBL_ENTRY)&_ZN9S836C5_nt3v18Ev,
  (VTBL_ENTRY)&_ZN9S836C5_nt3v19Ev,
  (VTBL_ENTRY)&_ZN9S836C5_nt3v20Ev,
  (VTBL_ENTRY)&_ZN9S836C5_nt3v21Ev,
  (VTBL_ENTRY)&_ZN9S836C5_nt3v22Ev,
  (VTBL_ENTRY)&_ZN9S836C5_nt3v23Ev,
};
extern VTBL_ENTRY _ZTI9S836C5_nt[];
VTBL_ENTRY *P__ZTI9S836C5_nt = _ZTI9S836C5_nt; 
extern  VTBL_ENTRY _ZTV9S836C5_nt[];
Class_Descriptor cd_S836C5_nt = {  "S836C5_nt", // class name
  0,0,//no base classes
  &(vtc_S836C5_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(64,40), // object size
  NSPAIRA(_ZTI9S836C5_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV9S836C5_nt),27, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S836C15_nt  {
  __tsi64 s836c15f0[2];
  void  mf836c15(); // _ZN10S836C15_nt8mf836c15Ev
};
//SIG(-1 S836C15_nt) C1{ m FL[2]}


void  S836C15_nt ::mf836c15(){}

//skip512 S836C15_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S836C14_nt  {
  ::S836C15_nt s836c14f0;
  void  mf836c14(); // _ZN10S836C14_nt8mf836c14Ev
};
//SIG(-1 S836C14_nt) C1{ m FC2{ m FL[2]}}


void  S836C14_nt ::mf836c14(){}

//skip512 S836C14_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S836C18_nt  {
  ::S836C14_nt s836c18f0;
  void  mf836c18(); // _ZN10S836C18_nt8mf836c18Ev
};
//SIG(-1 S836C18_nt) C1{ m FC2{ m FC3{ m FL[2]}}}


void  S836C18_nt ::mf836c18(){}

//skip512 S836C18_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S836C19_nt  {
  ::S836C14_nt s836c19f0;
  ::S836C14_nt s836c19f1;
  ::S836C14_nt s836c19f2;
  ::S836C14_nt s836c19f3;
  void  mf836c19(); // _ZN10S836C19_nt8mf836c19Ev
};
//SIG(-1 S836C19_nt) C1{ m FC2{ m FC3{ m FL[2]}} FC2 FC2 FC2}


void  S836C19_nt ::mf836c19(){}

//skip512 S836C19_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S836C22  {
  void  mf836c22(); // _ZN7S836C228mf836c22Ev
};
//SIG(-1 S836C22) C1{ m}


void  S836C22 ::mf836c22(){}

static void Test_S836C22()
{
  {
    init_simple_test("S836C22");
    S836C22 lv;
    check2(sizeof(lv), 1, "sizeof(S836C22)");
    check2(__alignof__(lv), 1, "__alignof__(S836C22)");
  }
}
static Arrange_To_Call_Me vS836C22(Test_S836C22, "S836C22", 1);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S836C21_nt  {
  void *s836c21f0;
  int s836c21f1;
  ::S836C22 s836c21f2;
  void  mf836c21(); // _ZN10S836C21_nt8mf836c21Ev
};
//SIG(-1 S836C21_nt) C1{ m Fp Fi FC2{ m}}


void  S836C21_nt ::mf836c21(){}

//skip512 S836C21_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S836C20_nt  {
  ::S836C21_nt s836c20f0;
  int s836c20f1;
  void  mf836c20(); // _ZN10S836C20_nt8mf836c20Ev
};
//SIG(-1 S836C20_nt) C1{ m FC2{ m Fp Fi FC3{ m}} Fi}


void  S836C20_nt ::mf836c20(){}

//skip512 S836C20_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S836C25  {
  void  mf836c25(); // _ZN7S836C258mf836c25Ev
};
//SIG(-1 S836C25) C1{ m}


void  S836C25 ::mf836c25(){}

static void Test_S836C25()
{
  {
    init_simple_test("S836C25");
    S836C25 lv;
    check2(sizeof(lv), 1, "sizeof(S836C25)");
    check2(__alignof__(lv), 1, "__alignof__(S836C25)");
  }
}
static Arrange_To_Call_Me vS836C25(Test_S836C25, "S836C25", 1);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S836C23  {
  void *s836c23f0;
  int s836c23f1;
  ::S836C22 s836c23f2;
  ::S836C25 s836c23f3;
  void  mf836c23(); // _ZN7S836C238mf836c23Ev
};
//SIG(-1 S836C23) C1{ m Fp Fi FC2{ m} FC3{ m}}


void  S836C23 ::mf836c23(){}

static void Test_S836C23()
{
  {
    init_simple_test("S836C23");
    S836C23 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S836C23)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S836C23)");
    check_field_offset(lv, s836c23f0, 0, "S836C23.s836c23f0");
    check_field_offset(lv, s836c23f1, ABISELECT(8,4), "S836C23.s836c23f1");
    check_field_offset(lv, s836c23f2, ABISELECT(12,8), "S836C23.s836c23f2");
    check_field_offset(lv, s836c23f3, ABISELECT(13,9), "S836C23.s836c23f3");
  }
}
static Arrange_To_Call_Me vS836C23(Test_S836C23, "S836C23", ABISELECT(16,12));

#else // __cplusplus

Class_Descriptor cd_S836C23 = {  "S836C23", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  ABISELECT(16,12), // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S836C29  {
  void  mf836c29(); // _ZN7S836C298mf836c29Ev
};
//SIG(-1 S836C29) C1{ m}


void  S836C29 ::mf836c29(){}

static void Test_S836C29()
{
  {
    init_simple_test("S836C29");
    S836C29 lv;
    check2(sizeof(lv), 1, "sizeof(S836C29)");
    check2(__alignof__(lv), 1, "__alignof__(S836C29)");
  }
}
static Arrange_To_Call_Me vS836C29(Test_S836C29, "S836C29", 1);

#else // __cplusplus

extern VTBL_ENTRY _ZTI7S836C29[];
VTBL_ENTRY *P__ZTI7S836C29 = _ZTI7S836C29; 
Class_Descriptor cd_S836C29 = {  "S836C29", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  1, // object size
  NSPAIRA(_ZTI7S836C29),ABISELECT(16,8), //typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S836C27  {
  void *s836c27f0;
  int s836c27f1;
  ::S836C25 s836c27f2;
  ::S836C29 s836c27f3;
  void  mf836c27(); // _ZN7S836C278mf836c27Ev
};
//SIG(-1 S836C27) C1{ m Fp Fi FC2{ m} FC3{ m}}


void  S836C27 ::mf836c27(){}

static void Test_S836C27()
{
  {
    init_simple_test("S836C27");
    S836C27 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S836C27)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S836C27)");
    check_field_offset(lv, s836c27f0, 0, "S836C27.s836c27f0");
    check_field_offset(lv, s836c27f1, ABISELECT(8,4), "S836C27.s836c27f1");
    check_field_offset(lv, s836c27f2, ABISELECT(12,8), "S836C27.s836c27f2");
    check_field_offset(lv, s836c27f3, ABISELECT(13,9), "S836C27.s836c27f3");
  }
}
static Arrange_To_Call_Me vS836C27(Test_S836C27, "S836C27", ABISELECT(16,12));

#else // __cplusplus

Class_Descriptor cd_S836C27 = {  "S836C27", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  ABISELECT(16,12), // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S836C26  : S836C27 {
};
//SIG(-1 S836C26) C1{ BC2{ m Fp Fi FC3{ m} FC4{ m}}}



static void Test_S836C26()
{
  extern Class_Descriptor cd_S836C26;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S836C26, buf);
    S836C26 &lv = *(new (buf) S836C26());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S836C26)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S836C26)");
    check_base_class_offset(lv, (S836C27*), 0, "S836C26");
    test_class_info(&lv, &cd_S836C26);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS836C26(Test_S836C26, "S836C26", ABISELECT(16,12));

#else // __cplusplus

extern Class_Descriptor cd_S836C27;
static Base_Class bases_S836C26[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S836C27,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
Class_Descriptor cd_S836C26 = {  "S836C26", // class name
  bases_S836C26, 1,
  0, // no vftv
  0, //no vtt
  ABISELECT(16,12), // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S836C30_nt  {
  void *s836c30f0;
  int s836c30f1[2];
  ::S836C29 s836c30f2;
  void  mf836c30(); // _ZN10S836C30_nt8mf836c30Ev
};
//SIG(-1 S836C30_nt) C1{ m Fp Fi[2] FC2{ m}}


void  S836C30_nt ::mf836c30(){}

//skip512 S836C30_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S836C39  {
  void  mf836c39(); // _ZN7S836C398mf836c39Ev
};
//SIG(-1 S836C39) C1{ m}


void  S836C39 ::mf836c39(){}

static void Test_S836C39()
{
  {
    init_simple_test("S836C39");
    S836C39 lv;
    check2(sizeof(lv), 1, "sizeof(S836C39)");
    check2(__alignof__(lv), 1, "__alignof__(S836C39)");
  }
}
static Arrange_To_Call_Me vS836C39(Test_S836C39, "S836C39", 1);

#else // __cplusplus

extern VTBL_ENTRY _ZTI7S836C39[];
VTBL_ENTRY *P__ZTI7S836C39 = _ZTI7S836C39; 
Class_Descriptor cd_S836C39 = {  "S836C39", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  1, // object size
  NSPAIRA(_ZTI7S836C39),ABISELECT(16,8), //typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S836C38  {
  void *s836c38f0;
  int s836c38f1[2];
  ::S836C39 s836c38f2;
  void  mf836c38(); // _ZN7S836C388mf836c38Ev
};
//SIG(-1 S836C38) C1{ m Fp Fi[2] FC2{ m}}


void  S836C38 ::mf836c38(){}

static void Test_S836C38()
{
  {
    init_simple_test("S836C38");
    S836C38 lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S836C38)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S836C38)");
    check_field_offset(lv, s836c38f0, 0, "S836C38.s836c38f0");
    check_field_offset(lv, s836c38f1, ABISELECT(8,4), "S836C38.s836c38f1");
    check_field_offset(lv, s836c38f2, ABISELECT(16,12), "S836C38.s836c38f2");
  }
}
static Arrange_To_Call_Me vS836C38(Test_S836C38, "S836C38", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S836C4_nt  : S836C5_nt {
  ::S836C14_nt s836c4f0;
  ::S836C14_nt s836c4f1;
  ::S836C14_nt s836c4f2;
  ::S836C14_nt s836c4f3;
  ::S836C18_nt s836c4f4;
  ::S836C19_nt s836c4f5;
  ::S836C19_nt s836c4f6;
  ::S836C14_nt s836c4f7;
  ::S836C14_nt s836c4f8;
  ::S836C14_nt s836c4f9;
  void *s836c4f10;
  ::S836C18_nt s836c4f11;
  ::S836C20_nt s836c4f12;
  int s836c4f13;
  void *s836c4f14[7];
  ::S836C23 s836c4f15;
  int s836c4f16:8;
  int s836c4f17:8;
  int s836c4f18:16;
  int s836c4f19:16;
  int s836c4f20:8;
  int s836c4f21:8;
  int s836c4f22:8;
  int s836c4f23:32;
  int s836c4f24:8;
  int s836c4f25:4;
  int s836c4f26:4;
  int s836c4f27:4;
  int s836c4f28:4;
  int s836c4f29:4;
  int s836c4f30:4;
  int s836c4f31:4;
  int s836c4f32:4;
  int s836c4f33:4;
  int s836c4f34:4;
  unsigned char s836c4f35:1;
  unsigned char s836c4f36:1;
  unsigned char s836c4f37:1;
  unsigned char s836c4f38:1;
  unsigned char s836c4f39:1;
  unsigned char s836c4f40:1;
  unsigned char s836c4f41:1;
  unsigned char s836c4f42:1;
  unsigned char s836c4f43:1;
  unsigned char s836c4f44:1;
  unsigned char s836c4f45:1;
  unsigned char s836c4f46:1;
  unsigned char s836c4f47:1;
  unsigned char s836c4f48:1;
  unsigned char s836c4f49:1;
  unsigned char s836c4f50:1;
  unsigned char s836c4f51:1;
  unsigned char s836c4f52:1;
  unsigned char s836c4f53:1;
  unsigned char s836c4f54:1;
  unsigned char s836c4f55:1;
  unsigned char s836c4f56:1;
  unsigned char s836c4f57:1;
  unsigned char s836c4f58:1;
  unsigned char s836c4f59:1;
  unsigned char s836c4f60:1;
  unsigned char s836c4f61:1;
  unsigned char s836c4f62:1;
  unsigned char s836c4f63:1;
  unsigned char s836c4f64:1;
  unsigned char s836c4f65:1;
  unsigned char s836c4f66:1;
  unsigned char s836c4f67:1;
  unsigned char s836c4f68:1;
  unsigned char s836c4f69:1;
  unsigned char s836c4f70:1;
  unsigned char s836c4f71:1;
  unsigned char s836c4f72:1;
  unsigned char s836c4f73:1;
  unsigned char s836c4f74:1;
  unsigned char s836c4f75:1;
  int s836c4f76[7];
  void *s836c4f77[6];
  int s836c4f78:8;
  int s836c4f79:8;
  int s836c4f80:8;
  int s836c4f81:8;
  int s836c4f82:8;
  int s836c4f83:8;
  ::S836C26 s836c4f84;
  void *s836c4f85[4];
  int s836c4f86:8;
  int s836c4f87:8;
  int s836c4f88:8;
  int s836c4f89:8;
  int s836c4f90:8;
  int s836c4f91:16;
  int s836c4f92:16;
  int s836c4f93:16;
  int s836c4f94:4;
  int s836c4f95:4;
  int s836c4f96:4;
  int s836c4f97:4;
  int s836c4f98:4;
  int s836c4f99:4;
  int s836c4f100:4;
  int s836c4f101:4;
  int s836c4f102:4;
  int s836c4f103:4;
  int s836c4f104:4;
  int s836c4f105:4;
  int s836c4f106:8;
  int s836c4f107:8;
  int s836c4f108:8;
  void *s836c4f109[7];
  ::S836C30_nt s836c4f110;
  void *s836c4f111[2];
  int s836c4f112:16;
  int s836c4f113:16;
  ::S836C26 s836c4f114;
  ::S836C30_nt s836c4f115;
  ::S836C38 s836c4f116;
  void *s836c4f117[2];
  int s836c4f118:24;
  int s836c4f119:8;
  void *s836c4f120;
  virtual  ~S836C4_nt(); // _ZN9S836C4_ntD1Ev
  virtual void  v24(); // _ZN9S836C4_nt3v24Ev
  virtual void  v25(); // _ZN9S836C4_nt3v25Ev
  virtual void  v26(); // _ZN9S836C4_nt3v26Ev
  virtual void  v27(); // _ZN9S836C4_nt3v27Ev
  virtual void  v28(); // _ZN9S836C4_nt3v28Ev
  virtual void  v29(); // _ZN9S836C4_nt3v29Ev
  virtual void  v30(); // _ZN9S836C4_nt3v30Ev
  virtual void  v31(); // _ZN9S836C4_nt3v31Ev
  virtual void  v32(); // _ZN9S836C4_nt3v32Ev
  virtual void  v33(); // _ZN9S836C4_nt3v33Ev
  virtual void  v34(); // _ZN9S836C4_nt3v34Ev
  virtual void  v35(); // _ZN9S836C4_nt3v35Ev
  virtual void  v36(); // _ZN9S836C4_nt3v36Ev
  virtual void  v37(); // _ZN9S836C4_nt3v37Ev
  virtual void  v38(); // _ZN9S836C4_nt3v38Ev
  virtual void  v39(); // _ZN9S836C4_nt3v39Ev
  virtual void  v40(); // _ZN9S836C4_nt3v40Ev
  virtual void  v41(); // _ZN9S836C4_nt3v41Ev
  virtual void  v42(); // _ZN9S836C4_nt3v42Ev
  virtual void  v43(); // _ZN9S836C4_nt3v43Ev
  virtual void  v44(); // _ZN9S836C4_nt3v44Ev
  virtual void  v45(); // _ZN9S836C4_nt3v45Ev
  virtual void  v46(); // _ZN9S836C4_nt3v46Ev
  virtual void  v47(); // _ZN9S836C4_nt3v47Ev
  virtual void  v48(); // _ZN9S836C4_nt3v48Ev
  virtual void  v49(); // _ZN9S836C4_nt3v49Ev
  virtual void  v50(); // _ZN9S836C4_nt3v50Ev
  virtual void  v51(); // _ZN9S836C4_nt3v51Ev
  virtual void  v52(); // _ZN9S836C4_nt3v52Ev
  virtual void  v53(); // _ZN9S836C4_nt3v53Ev
  virtual void  v54(); // _ZN9S836C4_nt3v54Ev
  virtual void  v55(); // _ZN9S836C4_nt3v55Ev
  virtual void  v56(); // _ZN9S836C4_nt3v56Ev
  virtual void  v57(); // _ZN9S836C4_nt3v57Ev
  virtual void  v58(); // _ZN9S836C4_nt3v58Ev
  virtual void  v59(); // _ZN9S836C4_nt3v59Ev
  virtual void  v60(); // _ZN9S836C4_nt3v60Ev
  virtual void  v61(); // _ZN9S836C4_nt3v61Ev
  virtual void  v62(); // _ZN9S836C4_nt3v62Ev
  virtual void  v63(); // _ZN9S836C4_nt3v63Ev
  virtual void  v64(); // _ZN9S836C4_nt3v64Ev
  virtual void  v65(); // _ZN9S836C4_nt3v65Ev
  virtual void  v66(); // _ZN9S836C4_nt3v66Ev
  virtual void  v67(); // _ZN9S836C4_nt3v67Ev
  virtual void  v68(); // _ZN9S836C4_nt3v68Ev
  virtual void  v69(); // _ZN9S836C4_nt3v69Ev
  virtual void  v70(); // _ZN9S836C4_nt3v70Ev
  virtual void  v71(); // _ZN9S836C4_nt3v71Ev
  virtual void  v72(); // _ZN9S836C4_nt3v72Ev
  virtual void  v73(); // _ZN9S836C4_nt3v73Ev
  virtual void  v74(); // _ZN9S836C4_nt3v74Ev
  virtual void  v75(); // _ZN9S836C4_nt3v75Ev
  virtual void  v76(); // _ZN9S836C4_nt3v76Ev
  virtual void  v77(); // _ZN9S836C4_nt3v77Ev
  virtual void  v78(); // _ZN9S836C4_nt3v78Ev
  virtual void  v79(); // _ZN9S836C4_nt3v79Ev
  virtual void  v80(); // _ZN9S836C4_nt3v80Ev
  virtual void  v81(); // _ZN9S836C4_nt3v81Ev
  virtual void  v82(); // _ZN9S836C4_nt3v82Ev
  virtual void  v83(); // _ZN9S836C4_nt3v83Ev
  virtual void  v84(); // _ZN9S836C4_nt3v84Ev
  virtual void  v85(); // _ZN9S836C4_nt3v85Ev
  virtual void  v86(); // _ZN9S836C4_nt3v86Ev
  virtual void  v87(); // _ZN9S836C4_nt3v87Ev
  virtual void  v88(); // _ZN9S836C4_nt3v88Ev
  virtual void  v89(); // _ZN9S836C4_nt3v89Ev
  virtual void  v90(); // _ZN9S836C4_nt3v90Ev
  virtual void  v91(); // _ZN9S836C4_nt3v91Ev
  virtual void  v92(); // _ZN9S836C4_nt3v92Ev
  virtual void  v93(); // _ZN9S836C4_nt3v93Ev
  virtual void  v94(); // _ZN9S836C4_nt3v94Ev
  virtual void  v95(); // _ZN9S836C4_nt3v95Ev
  virtual void  v96(); // _ZN9S836C4_nt3v96Ev
  virtual void  v97(); // _ZN9S836C4_nt3v97Ev
  virtual void  v98(); // _ZN9S836C4_nt3v98Ev
  virtual void  v99(); // _ZN9S836C4_nt3v99Ev
  virtual void  v100(); // _ZN9S836C4_nt4v100Ev
  virtual void  v101(); // _ZN9S836C4_nt4v101Ev
  S836C4_nt(); // tgen
};
//SIG(-1 S836C4_nt) C1{ BC2{ vd v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 Fp Fi FC3{ BC4{ m Fp Fi FC5{ m} FC5}} FC3 Fi} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 FC6{ m FC7{ m FL[2]}} FC6 FC6 FC6 FC8{ m FC6} FC9{ m FC6 FC6 FC6 FC6} FC9 FC6 FC6 FC6 Fp FC8 FC10{ m FC11{ m Fp Fi FC12{ m}} Fi} Fi Fp[7] FC13{ m Fp Fi FC12 FC14{ m}} Fi:8 Fi:8 Fi:16 Fi:16 Fi:8 Fi:8 Fi:8 Fi:32 Fi:8 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fi[7] Fp[6] Fi:8 Fi:8 Fi:8 Fi:8 Fi:8 Fi:8 FC15{ BC16{ m Fp Fi FC14 FC17{ m}}} Fp[4] Fi:8 Fi:8 Fi:8 Fi:8 Fi:8 Fi:16 Fi:16 Fi:16 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:8 Fi:8 Fi:8 Fp[7] FC18{ m Fp Fi[2] FC17} Fp[2] Fi:16 Fi:16 FC15 FC18 FC19{ m Fp Fi[2] FC20{ m}} Fp[2] Fi:24 Fi:8 Fp}


 S836C4_nt ::~S836C4_nt(){ note_dtor("S836C4_nt", this);}
void  S836C4_nt ::v24(){vfunc_called(this, "_ZN9S836C4_nt3v24Ev");}
void  S836C4_nt ::v25(){vfunc_called(this, "_ZN9S836C4_nt3v25Ev");}
void  S836C4_nt ::v26(){vfunc_called(this, "_ZN9S836C4_nt3v26Ev");}
void  S836C4_nt ::v27(){vfunc_called(this, "_ZN9S836C4_nt3v27Ev");}
void  S836C4_nt ::v28(){vfunc_called(this, "_ZN9S836C4_nt3v28Ev");}
void  S836C4_nt ::v29(){vfunc_called(this, "_ZN9S836C4_nt3v29Ev");}
void  S836C4_nt ::v30(){vfunc_called(this, "_ZN9S836C4_nt3v30Ev");}
void  S836C4_nt ::v31(){vfunc_called(this, "_ZN9S836C4_nt3v31Ev");}
void  S836C4_nt ::v32(){vfunc_called(this, "_ZN9S836C4_nt3v32Ev");}
void  S836C4_nt ::v33(){vfunc_called(this, "_ZN9S836C4_nt3v33Ev");}
void  S836C4_nt ::v34(){vfunc_called(this, "_ZN9S836C4_nt3v34Ev");}
void  S836C4_nt ::v35(){vfunc_called(this, "_ZN9S836C4_nt3v35Ev");}
void  S836C4_nt ::v36(){vfunc_called(this, "_ZN9S836C4_nt3v36Ev");}
void  S836C4_nt ::v37(){vfunc_called(this, "_ZN9S836C4_nt3v37Ev");}
void  S836C4_nt ::v38(){vfunc_called(this, "_ZN9S836C4_nt3v38Ev");}
void  S836C4_nt ::v39(){vfunc_called(this, "_ZN9S836C4_nt3v39Ev");}
void  S836C4_nt ::v40(){vfunc_called(this, "_ZN9S836C4_nt3v40Ev");}
void  S836C4_nt ::v41(){vfunc_called(this, "_ZN9S836C4_nt3v41Ev");}
void  S836C4_nt ::v42(){vfunc_called(this, "_ZN9S836C4_nt3v42Ev");}
void  S836C4_nt ::v43(){vfunc_called(this, "_ZN9S836C4_nt3v43Ev");}
void  S836C4_nt ::v44(){vfunc_called(this, "_ZN9S836C4_nt3v44Ev");}
void  S836C4_nt ::v45(){vfunc_called(this, "_ZN9S836C4_nt3v45Ev");}
void  S836C4_nt ::v46(){vfunc_called(this, "_ZN9S836C4_nt3v46Ev");}
void  S836C4_nt ::v47(){vfunc_called(this, "_ZN9S836C4_nt3v47Ev");}
void  S836C4_nt ::v48(){vfunc_called(this, "_ZN9S836C4_nt3v48Ev");}
void  S836C4_nt ::v49(){vfunc_called(this, "_ZN9S836C4_nt3v49Ev");}
void  S836C4_nt ::v50(){vfunc_called(this, "_ZN9S836C4_nt3v50Ev");}
void  S836C4_nt ::v51(){vfunc_called(this, "_ZN9S836C4_nt3v51Ev");}
void  S836C4_nt ::v52(){vfunc_called(this, "_ZN9S836C4_nt3v52Ev");}
void  S836C4_nt ::v53(){vfunc_called(this, "_ZN9S836C4_nt3v53Ev");}
void  S836C4_nt ::v54(){vfunc_called(this, "_ZN9S836C4_nt3v54Ev");}
void  S836C4_nt ::v55(){vfunc_called(this, "_ZN9S836C4_nt3v55Ev");}
void  S836C4_nt ::v56(){vfunc_called(this, "_ZN9S836C4_nt3v56Ev");}
void  S836C4_nt ::v57(){vfunc_called(this, "_ZN9S836C4_nt3v57Ev");}
void  S836C4_nt ::v58(){vfunc_called(this, "_ZN9S836C4_nt3v58Ev");}
void  S836C4_nt ::v59(){vfunc_called(this, "_ZN9S836C4_nt3v59Ev");}
void  S836C4_nt ::v60(){vfunc_called(this, "_ZN9S836C4_nt3v60Ev");}
void  S836C4_nt ::v61(){vfunc_called(this, "_ZN9S836C4_nt3v61Ev");}
void  S836C4_nt ::v62(){vfunc_called(this, "_ZN9S836C4_nt3v62Ev");}
void  S836C4_nt ::v63(){vfunc_called(this, "_ZN9S836C4_nt3v63Ev");}
void  S836C4_nt ::v64(){vfunc_called(this, "_ZN9S836C4_nt3v64Ev");}
void  S836C4_nt ::v65(){vfunc_called(this, "_ZN9S836C4_nt3v65Ev");}
void  S836C4_nt ::v66(){vfunc_called(this, "_ZN9S836C4_nt3v66Ev");}
void  S836C4_nt ::v67(){vfunc_called(this, "_ZN9S836C4_nt3v67Ev");}
void  S836C4_nt ::v68(){vfunc_called(this, "_ZN9S836C4_nt3v68Ev");}
void  S836C4_nt ::v69(){vfunc_called(this, "_ZN9S836C4_nt3v69Ev");}
void  S836C4_nt ::v70(){vfunc_called(this, "_ZN9S836C4_nt3v70Ev");}
void  S836C4_nt ::v71(){vfunc_called(this, "_ZN9S836C4_nt3v71Ev");}
void  S836C4_nt ::v72(){vfunc_called(this, "_ZN9S836C4_nt3v72Ev");}
void  S836C4_nt ::v73(){vfunc_called(this, "_ZN9S836C4_nt3v73Ev");}
void  S836C4_nt ::v74(){vfunc_called(this, "_ZN9S836C4_nt3v74Ev");}
void  S836C4_nt ::v75(){vfunc_called(this, "_ZN9S836C4_nt3v75Ev");}
void  S836C4_nt ::v76(){vfunc_called(this, "_ZN9S836C4_nt3v76Ev");}
void  S836C4_nt ::v77(){vfunc_called(this, "_ZN9S836C4_nt3v77Ev");}
void  S836C4_nt ::v78(){vfunc_called(this, "_ZN9S836C4_nt3v78Ev");}
void  S836C4_nt ::v79(){vfunc_called(this, "_ZN9S836C4_nt3v79Ev");}
void  S836C4_nt ::v80(){vfunc_called(this, "_ZN9S836C4_nt3v80Ev");}
void  S836C4_nt ::v81(){vfunc_called(this, "_ZN9S836C4_nt3v81Ev");}
void  S836C4_nt ::v82(){vfunc_called(this, "_ZN9S836C4_nt3v82Ev");}
void  S836C4_nt ::v83(){vfunc_called(this, "_ZN9S836C4_nt3v83Ev");}
void  S836C4_nt ::v84(){vfunc_called(this, "_ZN9S836C4_nt3v84Ev");}
void  S836C4_nt ::v85(){vfunc_called(this, "_ZN9S836C4_nt3v85Ev");}
void  S836C4_nt ::v86(){vfunc_called(this, "_ZN9S836C4_nt3v86Ev");}
void  S836C4_nt ::v87(){vfunc_called(this, "_ZN9S836C4_nt3v87Ev");}
void  S836C4_nt ::v88(){vfunc_called(this, "_ZN9S836C4_nt3v88Ev");}
void  S836C4_nt ::v89(){vfunc_called(this, "_ZN9S836C4_nt3v89Ev");}
void  S836C4_nt ::v90(){vfunc_called(this, "_ZN9S836C4_nt3v90Ev");}
void  S836C4_nt ::v91(){vfunc_called(this, "_ZN9S836C4_nt3v91Ev");}
void  S836C4_nt ::v92(){vfunc_called(this, "_ZN9S836C4_nt3v92Ev");}
void  S836C4_nt ::v93(){vfunc_called(this, "_ZN9S836C4_nt3v93Ev");}
void  S836C4_nt ::v94(){vfunc_called(this, "_ZN9S836C4_nt3v94Ev");}
void  S836C4_nt ::v95(){vfunc_called(this, "_ZN9S836C4_nt3v95Ev");}
void  S836C4_nt ::v96(){vfunc_called(this, "_ZN9S836C4_nt3v96Ev");}
void  S836C4_nt ::v97(){vfunc_called(this, "_ZN9S836C4_nt3v97Ev");}
void  S836C4_nt ::v98(){vfunc_called(this, "_ZN9S836C4_nt3v98Ev");}
void  S836C4_nt ::v99(){vfunc_called(this, "_ZN9S836C4_nt3v99Ev");}
void  S836C4_nt ::v100(){vfunc_called(this, "_ZN9S836C4_nt4v100Ev");}
void  S836C4_nt ::v101(){vfunc_called(this, "_ZN9S836C4_nt4v101Ev");}
S836C4_nt ::S836C4_nt(){ note_ctor("S836C4_nt", this);} // tgen

//skip512 S836C4_nt

#else // __cplusplus

extern void _ZN9S836C4_ntC1Ev();
extern void _ZN9S836C4_ntD1Ev();
Name_Map name_map_S836C4_nt[] = {
  NSPAIR(_ZN9S836C4_ntC1Ev),
  NSPAIR(_ZN9S836C4_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S836C5_nt;
extern VTBL_ENTRY _ZTI9S836C5_nt[];
extern  VTBL_ENTRY _ZTV9S836C5_nt[];
static Base_Class bases_S836C4_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S836C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S836C4_nt[];
extern void _ZN9S836C4_ntD1Ev();
extern void _ZN9S836C4_ntD0Ev();
extern void _ZN9S836C5_nt2v1Ev();
extern void _ZN9S836C5_nt2v2Ev();
extern void _ZN9S836C5_nt2v3Ev();
extern void _ZN9S836C5_nt2v4Ev();
extern void _ZN9S836C5_nt2v5Ev();
extern void _ZN9S836C5_nt2v6Ev();
extern void _ZN9S836C5_nt2v7Ev();
extern void _ZN9S836C5_nt2v8Ev();
extern void _ZN9S836C5_nt2v9Ev();
extern void _ZN9S836C5_nt3v10Ev();
extern void _ZN9S836C5_nt3v11Ev();
extern void _ZN9S836C5_nt3v12Ev();
extern void _ZN9S836C5_nt3v13Ev();
extern void _ZN9S836C5_nt3v14Ev();
extern void _ZN9S836C5_nt3v15Ev();
extern void _ZN9S836C5_nt3v16Ev();
extern void _ZN9S836C5_nt3v17Ev();
extern void _ZN9S836C5_nt3v18Ev();
extern void _ZN9S836C5_nt3v19Ev();
extern void _ZN9S836C5_nt3v20Ev();
extern void _ZN9S836C5_nt3v21Ev();
extern void _ZN9S836C5_nt3v22Ev();
extern void _ZN9S836C5_nt3v23Ev();
extern void _ZN9S836C4_nt3v24Ev();
extern void _ZN9S836C4_nt3v25Ev();
extern void _ZN9S836C4_nt3v26Ev();
extern void _ZN9S836C4_nt3v27Ev();
extern void _ZN9S836C4_nt3v28Ev();
extern void _ZN9S836C4_nt3v29Ev();
extern void _ZN9S836C4_nt3v30Ev();
extern void _ZN9S836C4_nt3v31Ev();
extern void _ZN9S836C4_nt3v32Ev();
extern void _ZN9S836C4_nt3v33Ev();
extern void _ZN9S836C4_nt3v34Ev();
extern void _ZN9S836C4_nt3v35Ev();
extern void _ZN9S836C4_nt3v36Ev();
extern void _ZN9S836C4_nt3v37Ev();
extern void _ZN9S836C4_nt3v38Ev();
extern void _ZN9S836C4_nt3v39Ev();
extern void _ZN9S836C4_nt3v40Ev();
extern void _ZN9S836C4_nt3v41Ev();
extern void _ZN9S836C4_nt3v42Ev();
extern void _ZN9S836C4_nt3v43Ev();
extern void _ZN9S836C4_nt3v44Ev();
extern void _ZN9S836C4_nt3v45Ev();
extern void _ZN9S836C4_nt3v46Ev();
extern void _ZN9S836C4_nt3v47Ev();
extern void _ZN9S836C4_nt3v48Ev();
extern void _ZN9S836C4_nt3v49Ev();
extern void _ZN9S836C4_nt3v50Ev();
extern void _ZN9S836C4_nt3v51Ev();
extern void _ZN9S836C4_nt3v52Ev();
extern void _ZN9S836C4_nt3v53Ev();
extern void _ZN9S836C4_nt3v54Ev();
extern void _ZN9S836C4_nt3v55Ev();
extern void _ZN9S836C4_nt3v56Ev();
extern void _ZN9S836C4_nt3v57Ev();
extern void _ZN9S836C4_nt3v58Ev();
extern void _ZN9S836C4_nt3v59Ev();
extern void _ZN9S836C4_nt3v60Ev();
extern void _ZN9S836C4_nt3v61Ev();
extern void _ZN9S836C4_nt3v62Ev();
extern void _ZN9S836C4_nt3v63Ev();
extern void _ZN9S836C4_nt3v64Ev();
extern void _ZN9S836C4_nt3v65Ev();
extern void _ZN9S836C4_nt3v66Ev();
extern void _ZN9S836C4_nt3v67Ev();
extern void _ZN9S836C4_nt3v68Ev();
extern void _ZN9S836C4_nt3v69Ev();
extern void _ZN9S836C4_nt3v70Ev();
extern void _ZN9S836C4_nt3v71Ev();
extern void _ZN9S836C4_nt3v72Ev();
extern void _ZN9S836C4_nt3v73Ev();
extern void _ZN9S836C4_nt3v74Ev();
extern void _ZN9S836C4_nt3v75Ev();
extern void _ZN9S836C4_nt3v76Ev();
extern void _ZN9S836C4_nt3v77Ev();
extern void _ZN9S836C4_nt3v78Ev();
extern void _ZN9S836C4_nt3v79Ev();
extern void _ZN9S836C4_nt3v80Ev();
extern void _ZN9S836C4_nt3v81Ev();
extern void _ZN9S836C4_nt3v82Ev();
extern void _ZN9S836C4_nt3v83Ev();
extern void _ZN9S836C4_nt3v84Ev();
extern void _ZN9S836C4_nt3v85Ev();
extern void _ZN9S836C4_nt3v86Ev();
extern void _ZN9S836C4_nt3v87Ev();
extern void _ZN9S836C4_nt3v88Ev();
extern void _ZN9S836C4_nt3v89Ev();
extern void _ZN9S836C4_nt3v90Ev();
extern void _ZN9S836C4_nt3v91Ev();
extern void _ZN9S836C4_nt3v92Ev();
extern void _ZN9S836C4_nt3v93Ev();
extern void _ZN9S836C4_nt3v94Ev();
extern void _ZN9S836C4_nt3v95Ev();
extern void _ZN9S836C4_nt3v96Ev();
extern void _ZN9S836C4_nt3v97Ev();
extern void _ZN9S836C4_nt3v98Ev();
extern void _ZN9S836C4_nt3v99Ev();
extern void _ZN9S836C4_nt4v100Ev();
extern void _ZN9S836C4_nt4v101Ev();
static  VTBL_ENTRY vtc_S836C4_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S836C4_nt[0]),
  (VTBL_ENTRY)&_ZN9S836C4_ntD1Ev,
  (VTBL_ENTRY)&_ZN9S836C4_ntD0Ev,
  (VTBL_ENTRY)&_ZN9S836C5_nt2v1Ev,
  (VTBL_ENTRY)&_ZN9S836C5_nt2v2Ev,
  (VTBL_ENTRY)&_ZN9S836C5_nt2v3Ev,
  (VTBL_ENTRY)&_ZN9S836C5_nt2v4Ev,
  (VTBL_ENTRY)&_ZN9S836C5_nt2v5Ev,
  (VTBL_ENTRY)&_ZN9S836C5_nt2v6Ev,
  (VTBL_ENTRY)&_ZN9S836C5_nt2v7Ev,
  (VTBL_ENTRY)&_ZN9S836C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN9S836C5_nt2v9Ev,
  (VTBL_ENTRY)&_ZN9S836C5_nt3v10Ev,
  (VTBL_ENTRY)&_ZN9S836C5_nt3v11Ev,
  (VTBL_ENTRY)&_ZN9S836C5_nt3v12Ev,
  (VTBL_ENTRY)&_ZN9S836C5_nt3v13Ev,
  (VTBL_ENTRY)&_ZN9S836C5_nt3v14Ev,
  (VTBL_ENTRY)&_ZN9S836C5_nt3v15Ev,
  (VTBL_ENTRY)&_ZN9S836C5_nt3v16Ev,
  (VTBL_ENTRY)&_ZN9S836C5_nt3v17Ev,
  (VTBL_ENTRY)&_ZN9S836C5_nt3v18Ev,
  (VTBL_ENTRY)&_ZN9S836C5_nt3v19Ev,
  (VTBL_ENTRY)&_ZN9S836C5_nt3v20Ev,
  (VTBL_ENTRY)&_ZN9S836C5_nt3v21Ev,
  (VTBL_ENTRY)&_ZN9S836C5_nt3v22Ev,
  (VTBL_ENTRY)&_ZN9S836C5_nt3v23Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v24Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v25Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v26Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v27Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v28Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v29Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v30Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v31Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v32Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v33Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v34Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v35Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v36Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v37Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v38Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v39Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v40Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v41Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v42Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v43Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v44Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v45Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v46Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v47Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v48Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v49Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v50Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v51Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v52Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v53Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v54Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v55Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v56Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v57Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v58Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v59Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v60Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v61Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v62Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v63Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v64Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v65Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v66Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v67Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v68Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v69Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v70Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v71Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v72Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v73Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v74Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v75Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v76Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v77Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v78Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v79Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v80Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v81Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v82Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v83Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v84Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v85Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v86Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v87Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v88Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v89Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v90Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v91Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v92Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v93Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v94Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v95Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v96Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v97Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v98Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v99Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt4v100Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt4v101Ev,
};
extern VTBL_ENTRY _ZTI9S836C4_nt[];
VTBL_ENTRY *P__ZTI9S836C4_nt = _ZTI9S836C4_nt; 
extern  VTBL_ENTRY _ZTV9S836C4_nt[];
Class_Descriptor cd_S836C4_nt = {  "S836C4_nt", // class name
  bases_S836C4_nt, 1,
  &(vtc_S836C4_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(832,632), // object size
  NSPAIRA(_ZTI9S836C4_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV9S836C4_nt),105, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S836C3_nt  : S836C4_nt {
  int s836c3f0[4];
  void *s836c3f1;
  unsigned char s836c3f2:1;
  unsigned char s836c3f3:1;
  unsigned char s836c3f4:1;
  unsigned char s836c3f5:1;
  unsigned char s836c3f6:1;
  unsigned char s836c3f7:1;
  int s836c3f8:8;
  int s836c3f9:16;
  int s836c3f10:16;
  int s836c3f11:16;
  int s836c3f12:16;
  int s836c3f13:16;
  int s836c3f14;
  ::S836C23 s836c3f15;
  unsigned char s836c3f16:1;
  unsigned char s836c3f17:1;
  virtual  ~S836C3_nt(); // _ZN9S836C3_ntD1Ev
  virtual void  v102(); // _ZN9S836C3_nt4v102Ev
  virtual void  v103(); // _ZN9S836C3_nt4v103Ev
  virtual void  v104(); // _ZN9S836C3_nt4v104Ev
  virtual void  v105(); // _ZN9S836C3_nt4v105Ev
  virtual void  v106(); // _ZN9S836C3_nt4v106Ev
  virtual void  v107(); // _ZN9S836C3_nt4v107Ev
  virtual void  v108(); // _ZN9S836C3_nt4v108Ev
  virtual void  v109(); // _ZN9S836C3_nt4v109Ev
  virtual void  v110(); // _ZN9S836C3_nt4v110Ev
  virtual void  v111(); // _ZN9S836C3_nt4v111Ev
  virtual void  v112(); // _ZN9S836C3_nt4v112Ev
  virtual void  v113(); // _ZN9S836C3_nt4v113Ev
  virtual void  v114(); // _ZN9S836C3_nt4v114Ev
  virtual void  v115(); // _ZN9S836C3_nt4v115Ev
  virtual void  v116(); // _ZN9S836C3_nt4v116Ev
  virtual void  v117(); // _ZN9S836C3_nt4v117Ev
  virtual void  v118(); // _ZN9S836C3_nt4v118Ev
  virtual void  v119(); // _ZN9S836C3_nt4v119Ev
  virtual void  v120(); // _ZN9S836C3_nt4v120Ev
  virtual void  v121(); // _ZN9S836C3_nt4v121Ev
  virtual void  v122(); // _ZN9S836C3_nt4v122Ev
  virtual void  v123(); // _ZN9S836C3_nt4v123Ev
  virtual void  v124(); // _ZN9S836C3_nt4v124Ev
  virtual void  v125(); // _ZN9S836C3_nt4v125Ev
  virtual void  v126(); // _ZN9S836C3_nt4v126Ev
  virtual void  v127(); // _ZN9S836C3_nt4v127Ev
  virtual void  v128(); // _ZN9S836C3_nt4v128Ev
  virtual void  v129(); // _ZN9S836C3_nt4v129Ev
  virtual void  v130(); // _ZN9S836C3_nt4v130Ev
  virtual void  v131(); // _ZN9S836C3_nt4v131Ev
  virtual void  v132(); // _ZN9S836C3_nt4v132Ev
  virtual void  v133(); // _ZN9S836C3_nt4v133Ev
  virtual void  v134(); // _ZN9S836C3_nt4v134Ev
  virtual void  v135(); // _ZN9S836C3_nt4v135Ev
  virtual void  v136(); // _ZN9S836C3_nt4v136Ev
  virtual void  v137(); // _ZN9S836C3_nt4v137Ev
  virtual void  v138(); // _ZN9S836C3_nt4v138Ev
  virtual void  v139(); // _ZN9S836C3_nt4v139Ev
  virtual void  v140(); // _ZN9S836C3_nt4v140Ev
  S836C3_nt(); // tgen
};
//SIG(-1 S836C3_nt) C1{ BC2{ BC3{ vd v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 Fp Fi FC4{ BC5{ m Fp Fi FC6{ m} FC6}} FC4 Fi} vd v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 v110 v111 v112 v113 v114 v115 v116 v117 v118 v119 v120 v121 v122 v123 v124 v125 v126 v127 v128 v129 v130 v131 v132 v133 v134 v135 v136 v137 v138 v139 v140 FC7{ m FC8{ m FL[2]}} FC7 FC7 FC7 FC9{ m FC7} FC10{ m FC7 FC7 FC7 FC7} FC10 FC7 FC7 FC7 Fp FC9 FC11{ m FC12{ m Fp Fi FC13{ m}} Fi} Fi Fp[7] FC14{ m Fp Fi FC13 FC15{ m}} Fi:8 Fi:8 Fi:16 Fi:16 Fi:8 Fi:8 Fi:8 Fi:32 Fi:8 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fi[7] Fp[6] Fi:8 Fi:8 Fi:8 Fi:8 Fi:8 Fi:8 FC16{ BC17{ m Fp Fi FC15 FC18{ m}}} Fp[4] Fi:8 Fi:8 Fi:8 Fi:8 Fi:8 Fi:16 Fi:16 Fi:16 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:8 Fi:8 Fi:8 Fp[7] FC19{ m Fp Fi[2] FC18} Fp[2] Fi:16 Fi:16 FC16 FC19 FC20{ m Fp Fi[2] FC21{ m}} Fp[2] Fi:24 Fi:8 Fp} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 Fi[4] Fp Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fi:8 Fi:16 Fi:16 Fi:16 Fi:16 Fi:16 Fi FC14 Fc:1 Fc:1}


 S836C3_nt ::~S836C3_nt(){ note_dtor("S836C3_nt", this);}
void  S836C3_nt ::v102(){vfunc_called(this, "_ZN9S836C3_nt4v102Ev");}
void  S836C3_nt ::v103(){vfunc_called(this, "_ZN9S836C3_nt4v103Ev");}
void  S836C3_nt ::v104(){vfunc_called(this, "_ZN9S836C3_nt4v104Ev");}
void  S836C3_nt ::v105(){vfunc_called(this, "_ZN9S836C3_nt4v105Ev");}
void  S836C3_nt ::v106(){vfunc_called(this, "_ZN9S836C3_nt4v106Ev");}
void  S836C3_nt ::v107(){vfunc_called(this, "_ZN9S836C3_nt4v107Ev");}
void  S836C3_nt ::v108(){vfunc_called(this, "_ZN9S836C3_nt4v108Ev");}
void  S836C3_nt ::v109(){vfunc_called(this, "_ZN9S836C3_nt4v109Ev");}
void  S836C3_nt ::v110(){vfunc_called(this, "_ZN9S836C3_nt4v110Ev");}
void  S836C3_nt ::v111(){vfunc_called(this, "_ZN9S836C3_nt4v111Ev");}
void  S836C3_nt ::v112(){vfunc_called(this, "_ZN9S836C3_nt4v112Ev");}
void  S836C3_nt ::v113(){vfunc_called(this, "_ZN9S836C3_nt4v113Ev");}
void  S836C3_nt ::v114(){vfunc_called(this, "_ZN9S836C3_nt4v114Ev");}
void  S836C3_nt ::v115(){vfunc_called(this, "_ZN9S836C3_nt4v115Ev");}
void  S836C3_nt ::v116(){vfunc_called(this, "_ZN9S836C3_nt4v116Ev");}
void  S836C3_nt ::v117(){vfunc_called(this, "_ZN9S836C3_nt4v117Ev");}
void  S836C3_nt ::v118(){vfunc_called(this, "_ZN9S836C3_nt4v118Ev");}
void  S836C3_nt ::v119(){vfunc_called(this, "_ZN9S836C3_nt4v119Ev");}
void  S836C3_nt ::v120(){vfunc_called(this, "_ZN9S836C3_nt4v120Ev");}
void  S836C3_nt ::v121(){vfunc_called(this, "_ZN9S836C3_nt4v121Ev");}
void  S836C3_nt ::v122(){vfunc_called(this, "_ZN9S836C3_nt4v122Ev");}
void  S836C3_nt ::v123(){vfunc_called(this, "_ZN9S836C3_nt4v123Ev");}
void  S836C3_nt ::v124(){vfunc_called(this, "_ZN9S836C3_nt4v124Ev");}
void  S836C3_nt ::v125(){vfunc_called(this, "_ZN9S836C3_nt4v125Ev");}
void  S836C3_nt ::v126(){vfunc_called(this, "_ZN9S836C3_nt4v126Ev");}
void  S836C3_nt ::v127(){vfunc_called(this, "_ZN9S836C3_nt4v127Ev");}
void  S836C3_nt ::v128(){vfunc_called(this, "_ZN9S836C3_nt4v128Ev");}
void  S836C3_nt ::v129(){vfunc_called(this, "_ZN9S836C3_nt4v129Ev");}
void  S836C3_nt ::v130(){vfunc_called(this, "_ZN9S836C3_nt4v130Ev");}
void  S836C3_nt ::v131(){vfunc_called(this, "_ZN9S836C3_nt4v131Ev");}
void  S836C3_nt ::v132(){vfunc_called(this, "_ZN9S836C3_nt4v132Ev");}
void  S836C3_nt ::v133(){vfunc_called(this, "_ZN9S836C3_nt4v133Ev");}
void  S836C3_nt ::v134(){vfunc_called(this, "_ZN9S836C3_nt4v134Ev");}
void  S836C3_nt ::v135(){vfunc_called(this, "_ZN9S836C3_nt4v135Ev");}
void  S836C3_nt ::v136(){vfunc_called(this, "_ZN9S836C3_nt4v136Ev");}
void  S836C3_nt ::v137(){vfunc_called(this, "_ZN9S836C3_nt4v137Ev");}
void  S836C3_nt ::v138(){vfunc_called(this, "_ZN9S836C3_nt4v138Ev");}
void  S836C3_nt ::v139(){vfunc_called(this, "_ZN9S836C3_nt4v139Ev");}
void  S836C3_nt ::v140(){vfunc_called(this, "_ZN9S836C3_nt4v140Ev");}
S836C3_nt ::S836C3_nt(){ note_ctor("S836C3_nt", this);} // tgen

//skip512 S836C3_nt

#else // __cplusplus

extern void _ZN9S836C3_ntC1Ev();
extern void _ZN9S836C3_ntD1Ev();
Name_Map name_map_S836C3_nt[] = {
  NSPAIR(_ZN9S836C3_ntC1Ev),
  NSPAIR(_ZN9S836C3_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S836C5_nt;
extern VTBL_ENTRY _ZTI9S836C5_nt[];
extern  VTBL_ENTRY _ZTV9S836C5_nt[];
extern Class_Descriptor cd_S836C4_nt;
extern VTBL_ENTRY _ZTI9S836C4_nt[];
extern  VTBL_ENTRY _ZTV9S836C4_nt[];
static Base_Class bases_S836C3_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S836C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S836C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S836C3_nt[];
extern void _ZN9S836C3_ntD1Ev();
extern void _ZN9S836C3_ntD0Ev();
extern void _ZN9S836C5_nt2v1Ev();
extern void _ZN9S836C5_nt2v2Ev();
extern void _ZN9S836C5_nt2v3Ev();
extern void _ZN9S836C5_nt2v4Ev();
extern void _ZN9S836C5_nt2v5Ev();
extern void _ZN9S836C5_nt2v6Ev();
extern void _ZN9S836C5_nt2v7Ev();
extern void _ZN9S836C5_nt2v8Ev();
extern void _ZN9S836C5_nt2v9Ev();
extern void _ZN9S836C5_nt3v10Ev();
extern void _ZN9S836C5_nt3v11Ev();
extern void _ZN9S836C5_nt3v12Ev();
extern void _ZN9S836C5_nt3v13Ev();
extern void _ZN9S836C5_nt3v14Ev();
extern void _ZN9S836C5_nt3v15Ev();
extern void _ZN9S836C5_nt3v16Ev();
extern void _ZN9S836C5_nt3v17Ev();
extern void _ZN9S836C5_nt3v18Ev();
extern void _ZN9S836C5_nt3v19Ev();
extern void _ZN9S836C5_nt3v20Ev();
extern void _ZN9S836C5_nt3v21Ev();
extern void _ZN9S836C5_nt3v22Ev();
extern void _ZN9S836C5_nt3v23Ev();
extern void _ZN9S836C4_nt3v24Ev();
extern void _ZN9S836C4_nt3v25Ev();
extern void _ZN9S836C4_nt3v26Ev();
extern void _ZN9S836C4_nt3v27Ev();
extern void _ZN9S836C4_nt3v28Ev();
extern void _ZN9S836C4_nt3v29Ev();
extern void _ZN9S836C4_nt3v30Ev();
extern void _ZN9S836C4_nt3v31Ev();
extern void _ZN9S836C4_nt3v32Ev();
extern void _ZN9S836C4_nt3v33Ev();
extern void _ZN9S836C4_nt3v34Ev();
extern void _ZN9S836C4_nt3v35Ev();
extern void _ZN9S836C4_nt3v36Ev();
extern void _ZN9S836C4_nt3v37Ev();
extern void _ZN9S836C4_nt3v38Ev();
extern void _ZN9S836C4_nt3v39Ev();
extern void _ZN9S836C4_nt3v40Ev();
extern void _ZN9S836C4_nt3v41Ev();
extern void _ZN9S836C4_nt3v42Ev();
extern void _ZN9S836C4_nt3v43Ev();
extern void _ZN9S836C4_nt3v44Ev();
extern void _ZN9S836C4_nt3v45Ev();
extern void _ZN9S836C4_nt3v46Ev();
extern void _ZN9S836C4_nt3v47Ev();
extern void _ZN9S836C4_nt3v48Ev();
extern void _ZN9S836C4_nt3v49Ev();
extern void _ZN9S836C4_nt3v50Ev();
extern void _ZN9S836C4_nt3v51Ev();
extern void _ZN9S836C4_nt3v52Ev();
extern void _ZN9S836C4_nt3v53Ev();
extern void _ZN9S836C4_nt3v54Ev();
extern void _ZN9S836C4_nt3v55Ev();
extern void _ZN9S836C4_nt3v56Ev();
extern void _ZN9S836C4_nt3v57Ev();
extern void _ZN9S836C4_nt3v58Ev();
extern void _ZN9S836C4_nt3v59Ev();
extern void _ZN9S836C4_nt3v60Ev();
extern void _ZN9S836C4_nt3v61Ev();
extern void _ZN9S836C4_nt3v62Ev();
extern void _ZN9S836C4_nt3v63Ev();
extern void _ZN9S836C4_nt3v64Ev();
extern void _ZN9S836C4_nt3v65Ev();
extern void _ZN9S836C4_nt3v66Ev();
extern void _ZN9S836C4_nt3v67Ev();
extern void _ZN9S836C4_nt3v68Ev();
extern void _ZN9S836C4_nt3v69Ev();
extern void _ZN9S836C4_nt3v70Ev();
extern void _ZN9S836C4_nt3v71Ev();
extern void _ZN9S836C4_nt3v72Ev();
extern void _ZN9S836C4_nt3v73Ev();
extern void _ZN9S836C4_nt3v74Ev();
extern void _ZN9S836C4_nt3v75Ev();
extern void _ZN9S836C4_nt3v76Ev();
extern void _ZN9S836C4_nt3v77Ev();
extern void _ZN9S836C4_nt3v78Ev();
extern void _ZN9S836C4_nt3v79Ev();
extern void _ZN9S836C4_nt3v80Ev();
extern void _ZN9S836C4_nt3v81Ev();
extern void _ZN9S836C4_nt3v82Ev();
extern void _ZN9S836C4_nt3v83Ev();
extern void _ZN9S836C4_nt3v84Ev();
extern void _ZN9S836C4_nt3v85Ev();
extern void _ZN9S836C4_nt3v86Ev();
extern void _ZN9S836C4_nt3v87Ev();
extern void _ZN9S836C4_nt3v88Ev();
extern void _ZN9S836C4_nt3v89Ev();
extern void _ZN9S836C4_nt3v90Ev();
extern void _ZN9S836C4_nt3v91Ev();
extern void _ZN9S836C4_nt3v92Ev();
extern void _ZN9S836C4_nt3v93Ev();
extern void _ZN9S836C4_nt3v94Ev();
extern void _ZN9S836C4_nt3v95Ev();
extern void _ZN9S836C4_nt3v96Ev();
extern void _ZN9S836C4_nt3v97Ev();
extern void _ZN9S836C4_nt3v98Ev();
extern void _ZN9S836C4_nt3v99Ev();
extern void _ZN9S836C4_nt4v100Ev();
extern void _ZN9S836C4_nt4v101Ev();
extern void _ZN9S836C3_nt4v102Ev();
extern void _ZN9S836C3_nt4v103Ev();
extern void _ZN9S836C3_nt4v104Ev();
extern void _ZN9S836C3_nt4v105Ev();
extern void _ZN9S836C3_nt4v106Ev();
extern void _ZN9S836C3_nt4v107Ev();
extern void _ZN9S836C3_nt4v108Ev();
extern void _ZN9S836C3_nt4v109Ev();
extern void _ZN9S836C3_nt4v110Ev();
extern void _ZN9S836C3_nt4v111Ev();
extern void _ZN9S836C3_nt4v112Ev();
extern void _ZN9S836C3_nt4v113Ev();
extern void _ZN9S836C3_nt4v114Ev();
extern void _ZN9S836C3_nt4v115Ev();
extern void _ZN9S836C3_nt4v116Ev();
extern void _ZN9S836C3_nt4v117Ev();
extern void _ZN9S836C3_nt4v118Ev();
extern void _ZN9S836C3_nt4v119Ev();
extern void _ZN9S836C3_nt4v120Ev();
extern void _ZN9S836C3_nt4v121Ev();
extern void _ZN9S836C3_nt4v122Ev();
extern void _ZN9S836C3_nt4v123Ev();
extern void _ZN9S836C3_nt4v124Ev();
extern void _ZN9S836C3_nt4v125Ev();
extern void _ZN9S836C3_nt4v126Ev();
extern void _ZN9S836C3_nt4v127Ev();
extern void _ZN9S836C3_nt4v128Ev();
extern void _ZN9S836C3_nt4v129Ev();
extern void _ZN9S836C3_nt4v130Ev();
extern void _ZN9S836C3_nt4v131Ev();
extern void _ZN9S836C3_nt4v132Ev();
extern void _ZN9S836C3_nt4v133Ev();
extern void _ZN9S836C3_nt4v134Ev();
extern void _ZN9S836C3_nt4v135Ev();
extern void _ZN9S836C3_nt4v136Ev();
extern void _ZN9S836C3_nt4v137Ev();
extern void _ZN9S836C3_nt4v138Ev();
extern void _ZN9S836C3_nt4v139Ev();
extern void _ZN9S836C3_nt4v140Ev();
static  VTBL_ENTRY vtc_S836C3_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S836C3_nt[0]),
  (VTBL_ENTRY)&_ZN9S836C3_ntD1Ev,
  (VTBL_ENTRY)&_ZN9S836C3_ntD0Ev,
  (VTBL_ENTRY)&_ZN9S836C5_nt2v1Ev,
  (VTBL_ENTRY)&_ZN9S836C5_nt2v2Ev,
  (VTBL_ENTRY)&_ZN9S836C5_nt2v3Ev,
  (VTBL_ENTRY)&_ZN9S836C5_nt2v4Ev,
  (VTBL_ENTRY)&_ZN9S836C5_nt2v5Ev,
  (VTBL_ENTRY)&_ZN9S836C5_nt2v6Ev,
  (VTBL_ENTRY)&_ZN9S836C5_nt2v7Ev,
  (VTBL_ENTRY)&_ZN9S836C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN9S836C5_nt2v9Ev,
  (VTBL_ENTRY)&_ZN9S836C5_nt3v10Ev,
  (VTBL_ENTRY)&_ZN9S836C5_nt3v11Ev,
  (VTBL_ENTRY)&_ZN9S836C5_nt3v12Ev,
  (VTBL_ENTRY)&_ZN9S836C5_nt3v13Ev,
  (VTBL_ENTRY)&_ZN9S836C5_nt3v14Ev,
  (VTBL_ENTRY)&_ZN9S836C5_nt3v15Ev,
  (VTBL_ENTRY)&_ZN9S836C5_nt3v16Ev,
  (VTBL_ENTRY)&_ZN9S836C5_nt3v17Ev,
  (VTBL_ENTRY)&_ZN9S836C5_nt3v18Ev,
  (VTBL_ENTRY)&_ZN9S836C5_nt3v19Ev,
  (VTBL_ENTRY)&_ZN9S836C5_nt3v20Ev,
  (VTBL_ENTRY)&_ZN9S836C5_nt3v21Ev,
  (VTBL_ENTRY)&_ZN9S836C5_nt3v22Ev,
  (VTBL_ENTRY)&_ZN9S836C5_nt3v23Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v24Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v25Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v26Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v27Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v28Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v29Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v30Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v31Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v32Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v33Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v34Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v35Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v36Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v37Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v38Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v39Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v40Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v41Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v42Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v43Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v44Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v45Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v46Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v47Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v48Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v49Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v50Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v51Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v52Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v53Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v54Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v55Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v56Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v57Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v58Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v59Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v60Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v61Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v62Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v63Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v64Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v65Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v66Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v67Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v68Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v69Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v70Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v71Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v72Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v73Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v74Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v75Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v76Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v77Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v78Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v79Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v80Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v81Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v82Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v83Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v84Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v85Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v86Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v87Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v88Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v89Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v90Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v91Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v92Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v93Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v94Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v95Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v96Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v97Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v98Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v99Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt4v100Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt4v101Ev,
  (VTBL_ENTRY)&_ZN9S836C3_nt4v102Ev,
  (VTBL_ENTRY)&_ZN9S836C3_nt4v103Ev,
  (VTBL_ENTRY)&_ZN9S836C3_nt4v104Ev,
  (VTBL_ENTRY)&_ZN9S836C3_nt4v105Ev,
  (VTBL_ENTRY)&_ZN9S836C3_nt4v106Ev,
  (VTBL_ENTRY)&_ZN9S836C3_nt4v107Ev,
  (VTBL_ENTRY)&_ZN9S836C3_nt4v108Ev,
  (VTBL_ENTRY)&_ZN9S836C3_nt4v109Ev,
  (VTBL_ENTRY)&_ZN9S836C3_nt4v110Ev,
  (VTBL_ENTRY)&_ZN9S836C3_nt4v111Ev,
  (VTBL_ENTRY)&_ZN9S836C3_nt4v112Ev,
  (VTBL_ENTRY)&_ZN9S836C3_nt4v113Ev,
  (VTBL_ENTRY)&_ZN9S836C3_nt4v114Ev,
  (VTBL_ENTRY)&_ZN9S836C3_nt4v115Ev,
  (VTBL_ENTRY)&_ZN9S836C3_nt4v116Ev,
  (VTBL_ENTRY)&_ZN9S836C3_nt4v117Ev,
  (VTBL_ENTRY)&_ZN9S836C3_nt4v118Ev,
  (VTBL_ENTRY)&_ZN9S836C3_nt4v119Ev,
  (VTBL_ENTRY)&_ZN9S836C3_nt4v120Ev,
  (VTBL_ENTRY)&_ZN9S836C3_nt4v121Ev,
  (VTBL_ENTRY)&_ZN9S836C3_nt4v122Ev,
  (VTBL_ENTRY)&_ZN9S836C3_nt4v123Ev,
  (VTBL_ENTRY)&_ZN9S836C3_nt4v124Ev,
  (VTBL_ENTRY)&_ZN9S836C3_nt4v125Ev,
  (VTBL_ENTRY)&_ZN9S836C3_nt4v126Ev,
  (VTBL_ENTRY)&_ZN9S836C3_nt4v127Ev,
  (VTBL_ENTRY)&_ZN9S836C3_nt4v128Ev,
  (VTBL_ENTRY)&_ZN9S836C3_nt4v129Ev,
  (VTBL_ENTRY)&_ZN9S836C3_nt4v130Ev,
  (VTBL_ENTRY)&_ZN9S836C3_nt4v131Ev,
  (VTBL_ENTRY)&_ZN9S836C3_nt4v132Ev,
  (VTBL_ENTRY)&_ZN9S836C3_nt4v133Ev,
  (VTBL_ENTRY)&_ZN9S836C3_nt4v134Ev,
  (VTBL_ENTRY)&_ZN9S836C3_nt4v135Ev,
  (VTBL_ENTRY)&_ZN9S836C3_nt4v136Ev,
  (VTBL_ENTRY)&_ZN9S836C3_nt4v137Ev,
  (VTBL_ENTRY)&_ZN9S836C3_nt4v138Ev,
  (VTBL_ENTRY)&_ZN9S836C3_nt4v139Ev,
  (VTBL_ENTRY)&_ZN9S836C3_nt4v140Ev,
};
extern VTBL_ENTRY _ZTI9S836C3_nt[];
VTBL_ENTRY *P__ZTI9S836C3_nt = _ZTI9S836C3_nt; 
extern  VTBL_ENTRY _ZTV9S836C3_nt[];
Class_Descriptor cd_S836C3_nt = {  "S836C3_nt", // class name
  bases_S836C3_nt, 2,
  &(vtc_S836C3_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(896,684), // object size
  NSPAIRA(_ZTI9S836C3_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV9S836C3_nt),144, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S836C2_nt  : S836C3_nt {
  int s836c2f0:4;
  int s836c2f1:4;
  int s836c2f2:4;
  int s836c2f3[3];
  void *s836c2f4;
  virtual  ~S836C2_nt(); // _ZN9S836C2_ntD1Ev
  virtual void  v141(); // _ZN9S836C2_nt4v141Ev
  virtual void  v142(); // _ZN9S836C2_nt4v142Ev
  virtual void  v143(); // _ZN9S836C2_nt4v143Ev
  virtual void  v144(); // _ZN9S836C2_nt4v144Ev
  virtual void  v145(); // _ZN9S836C2_nt4v145Ev
  virtual void  v146(); // _ZN9S836C2_nt4v146Ev
  virtual void  v147(); // _ZN9S836C2_nt4v147Ev
  virtual void  v148(); // _ZN9S836C2_nt4v148Ev
  virtual void  v149(); // _ZN9S836C2_nt4v149Ev
  virtual void  v150(); // _ZN9S836C2_nt4v150Ev
  virtual void  v151(); // _ZN9S836C2_nt4v151Ev
  virtual void  v152(); // _ZN9S836C2_nt4v152Ev
  virtual void  v153(); // _ZN9S836C2_nt4v153Ev
  virtual void  v154(); // _ZN9S836C2_nt4v154Ev
  virtual void  v155(); // _ZN9S836C2_nt4v155Ev
  virtual void  v156(); // _ZN9S836C2_nt4v156Ev
  virtual void  v157(); // _ZN9S836C2_nt4v157Ev
  virtual void  v158(); // _ZN9S836C2_nt4v158Ev
  S836C2_nt(); // tgen
};
//SIG(-1 S836C2_nt) C1{ BC2{ BC3{ BC4{ vd v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 Fp Fi FC5{ BC6{ m Fp Fi FC7{ m} FC7}} FC5 Fi} vd v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 v110 v111 v112 v113 v114 v115 v116 v117 v118 v119 FC8{ m FC9{ m FL[2]}} FC8 FC8 FC8 FC10{ m FC8} FC11{ m FC8 FC8 FC8 FC8} FC11 FC8 FC8 FC8 Fp FC10 FC12{ m FC13{ m Fp Fi FC14{ m}} Fi} Fi Fp[7] FC15{ m Fp Fi FC14 FC16{ m}} Fi:8 Fi:8 Fi:16 Fi:16 Fi:8 Fi:8 Fi:8 Fi:32 Fi:8 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fi[7] Fp[6] Fi:8 Fi:8 Fi:8 Fi:8 Fi:8 Fi:8 FC17{ BC18{ m Fp Fi FC16 FC19{ m}}} Fp[4] Fi:8 Fi:8 Fi:8 Fi:8 Fi:8 Fi:16 Fi:16 Fi:16 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:8 Fi:8 Fi:8 Fp[7] FC20{ m Fp Fi[2] FC19} Fp[2] Fi:16 Fi:16 FC17 FC20 FC21{ m Fp Fi[2] FC22{ m}} Fp[2] Fi:24 Fi:8 Fp} vd v120 v121 v122 v123 v124 v125 v126 v127 v128 v129 v130 v131 v132 v133 v134 v135 v136 v137 v138 v139 v140 v141 v142 v143 v144 v145 v146 v147 v148 v149 v150 v151 v152 v153 v154 v155 v156 v157 v158 Fi[4] Fp Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fi:8 Fi:16 Fi:16 Fi:16 Fi:16 Fi:16 Fi FC15 Fc:1 Fc:1} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 Fi:4 Fi:4 Fi:4 Fi[3] Fp}


 S836C2_nt ::~S836C2_nt(){ note_dtor("S836C2_nt", this);}
void  S836C2_nt ::v141(){vfunc_called(this, "_ZN9S836C2_nt4v141Ev");}
void  S836C2_nt ::v142(){vfunc_called(this, "_ZN9S836C2_nt4v142Ev");}
void  S836C2_nt ::v143(){vfunc_called(this, "_ZN9S836C2_nt4v143Ev");}
void  S836C2_nt ::v144(){vfunc_called(this, "_ZN9S836C2_nt4v144Ev");}
void  S836C2_nt ::v145(){vfunc_called(this, "_ZN9S836C2_nt4v145Ev");}
void  S836C2_nt ::v146(){vfunc_called(this, "_ZN9S836C2_nt4v146Ev");}
void  S836C2_nt ::v147(){vfunc_called(this, "_ZN9S836C2_nt4v147Ev");}
void  S836C2_nt ::v148(){vfunc_called(this, "_ZN9S836C2_nt4v148Ev");}
void  S836C2_nt ::v149(){vfunc_called(this, "_ZN9S836C2_nt4v149Ev");}
void  S836C2_nt ::v150(){vfunc_called(this, "_ZN9S836C2_nt4v150Ev");}
void  S836C2_nt ::v151(){vfunc_called(this, "_ZN9S836C2_nt4v151Ev");}
void  S836C2_nt ::v152(){vfunc_called(this, "_ZN9S836C2_nt4v152Ev");}
void  S836C2_nt ::v153(){vfunc_called(this, "_ZN9S836C2_nt4v153Ev");}
void  S836C2_nt ::v154(){vfunc_called(this, "_ZN9S836C2_nt4v154Ev");}
void  S836C2_nt ::v155(){vfunc_called(this, "_ZN9S836C2_nt4v155Ev");}
void  S836C2_nt ::v156(){vfunc_called(this, "_ZN9S836C2_nt4v156Ev");}
void  S836C2_nt ::v157(){vfunc_called(this, "_ZN9S836C2_nt4v157Ev");}
void  S836C2_nt ::v158(){vfunc_called(this, "_ZN9S836C2_nt4v158Ev");}
S836C2_nt ::S836C2_nt(){ note_ctor("S836C2_nt", this);} // tgen

//skip512 S836C2_nt

#else // __cplusplus

extern void _ZN9S836C2_ntC1Ev();
extern void _ZN9S836C2_ntD1Ev();
Name_Map name_map_S836C2_nt[] = {
  NSPAIR(_ZN9S836C2_ntC1Ev),
  NSPAIR(_ZN9S836C2_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S836C5_nt;
extern VTBL_ENTRY _ZTI9S836C5_nt[];
extern  VTBL_ENTRY _ZTV9S836C5_nt[];
extern Class_Descriptor cd_S836C4_nt;
extern VTBL_ENTRY _ZTI9S836C4_nt[];
extern  VTBL_ENTRY _ZTV9S836C4_nt[];
extern Class_Descriptor cd_S836C3_nt;
extern VTBL_ENTRY _ZTI9S836C3_nt[];
extern  VTBL_ENTRY _ZTV9S836C3_nt[];
static Base_Class bases_S836C2_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S836C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S836C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S836C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S836C2_nt[];
extern void _ZN9S836C2_ntD1Ev();
extern void _ZN9S836C2_ntD0Ev();
extern void _ZN9S836C5_nt2v1Ev();
extern void _ZN9S836C5_nt2v2Ev();
extern void _ZN9S836C5_nt2v3Ev();
extern void _ZN9S836C5_nt2v4Ev();
extern void _ZN9S836C5_nt2v5Ev();
extern void _ZN9S836C5_nt2v6Ev();
extern void _ZN9S836C5_nt2v7Ev();
extern void _ZN9S836C5_nt2v8Ev();
extern void _ZN9S836C5_nt2v9Ev();
extern void _ZN9S836C5_nt3v10Ev();
extern void _ZN9S836C5_nt3v11Ev();
extern void _ZN9S836C5_nt3v12Ev();
extern void _ZN9S836C5_nt3v13Ev();
extern void _ZN9S836C5_nt3v14Ev();
extern void _ZN9S836C5_nt3v15Ev();
extern void _ZN9S836C5_nt3v16Ev();
extern void _ZN9S836C5_nt3v17Ev();
extern void _ZN9S836C5_nt3v18Ev();
extern void _ZN9S836C5_nt3v19Ev();
extern void _ZN9S836C5_nt3v20Ev();
extern void _ZN9S836C5_nt3v21Ev();
extern void _ZN9S836C5_nt3v22Ev();
extern void _ZN9S836C5_nt3v23Ev();
extern void _ZN9S836C4_nt3v24Ev();
extern void _ZN9S836C4_nt3v25Ev();
extern void _ZN9S836C4_nt3v26Ev();
extern void _ZN9S836C4_nt3v27Ev();
extern void _ZN9S836C4_nt3v28Ev();
extern void _ZN9S836C4_nt3v29Ev();
extern void _ZN9S836C4_nt3v30Ev();
extern void _ZN9S836C4_nt3v31Ev();
extern void _ZN9S836C4_nt3v32Ev();
extern void _ZN9S836C4_nt3v33Ev();
extern void _ZN9S836C4_nt3v34Ev();
extern void _ZN9S836C4_nt3v35Ev();
extern void _ZN9S836C4_nt3v36Ev();
extern void _ZN9S836C4_nt3v37Ev();
extern void _ZN9S836C4_nt3v38Ev();
extern void _ZN9S836C4_nt3v39Ev();
extern void _ZN9S836C4_nt3v40Ev();
extern void _ZN9S836C4_nt3v41Ev();
extern void _ZN9S836C4_nt3v42Ev();
extern void _ZN9S836C4_nt3v43Ev();
extern void _ZN9S836C4_nt3v44Ev();
extern void _ZN9S836C4_nt3v45Ev();
extern void _ZN9S836C4_nt3v46Ev();
extern void _ZN9S836C4_nt3v47Ev();
extern void _ZN9S836C4_nt3v48Ev();
extern void _ZN9S836C4_nt3v49Ev();
extern void _ZN9S836C4_nt3v50Ev();
extern void _ZN9S836C4_nt3v51Ev();
extern void _ZN9S836C4_nt3v52Ev();
extern void _ZN9S836C4_nt3v53Ev();
extern void _ZN9S836C4_nt3v54Ev();
extern void _ZN9S836C4_nt3v55Ev();
extern void _ZN9S836C4_nt3v56Ev();
extern void _ZN9S836C4_nt3v57Ev();
extern void _ZN9S836C4_nt3v58Ev();
extern void _ZN9S836C4_nt3v59Ev();
extern void _ZN9S836C4_nt3v60Ev();
extern void _ZN9S836C4_nt3v61Ev();
extern void _ZN9S836C4_nt3v62Ev();
extern void _ZN9S836C4_nt3v63Ev();
extern void _ZN9S836C4_nt3v64Ev();
extern void _ZN9S836C4_nt3v65Ev();
extern void _ZN9S836C4_nt3v66Ev();
extern void _ZN9S836C4_nt3v67Ev();
extern void _ZN9S836C4_nt3v68Ev();
extern void _ZN9S836C4_nt3v69Ev();
extern void _ZN9S836C4_nt3v70Ev();
extern void _ZN9S836C4_nt3v71Ev();
extern void _ZN9S836C4_nt3v72Ev();
extern void _ZN9S836C4_nt3v73Ev();
extern void _ZN9S836C4_nt3v74Ev();
extern void _ZN9S836C4_nt3v75Ev();
extern void _ZN9S836C4_nt3v76Ev();
extern void _ZN9S836C4_nt3v77Ev();
extern void _ZN9S836C4_nt3v78Ev();
extern void _ZN9S836C4_nt3v79Ev();
extern void _ZN9S836C4_nt3v80Ev();
extern void _ZN9S836C4_nt3v81Ev();
extern void _ZN9S836C4_nt3v82Ev();
extern void _ZN9S836C4_nt3v83Ev();
extern void _ZN9S836C4_nt3v84Ev();
extern void _ZN9S836C4_nt3v85Ev();
extern void _ZN9S836C4_nt3v86Ev();
extern void _ZN9S836C4_nt3v87Ev();
extern void _ZN9S836C4_nt3v88Ev();
extern void _ZN9S836C4_nt3v89Ev();
extern void _ZN9S836C4_nt3v90Ev();
extern void _ZN9S836C4_nt3v91Ev();
extern void _ZN9S836C4_nt3v92Ev();
extern void _ZN9S836C4_nt3v93Ev();
extern void _ZN9S836C4_nt3v94Ev();
extern void _ZN9S836C4_nt3v95Ev();
extern void _ZN9S836C4_nt3v96Ev();
extern void _ZN9S836C4_nt3v97Ev();
extern void _ZN9S836C4_nt3v98Ev();
extern void _ZN9S836C4_nt3v99Ev();
extern void _ZN9S836C4_nt4v100Ev();
extern void _ZN9S836C4_nt4v101Ev();
extern void _ZN9S836C3_nt4v102Ev();
extern void _ZN9S836C3_nt4v103Ev();
extern void _ZN9S836C3_nt4v104Ev();
extern void _ZN9S836C3_nt4v105Ev();
extern void _ZN9S836C3_nt4v106Ev();
extern void _ZN9S836C3_nt4v107Ev();
extern void _ZN9S836C3_nt4v108Ev();
extern void _ZN9S836C3_nt4v109Ev();
extern void _ZN9S836C3_nt4v110Ev();
extern void _ZN9S836C3_nt4v111Ev();
extern void _ZN9S836C3_nt4v112Ev();
extern void _ZN9S836C3_nt4v113Ev();
extern void _ZN9S836C3_nt4v114Ev();
extern void _ZN9S836C3_nt4v115Ev();
extern void _ZN9S836C3_nt4v116Ev();
extern void _ZN9S836C3_nt4v117Ev();
extern void _ZN9S836C3_nt4v118Ev();
extern void _ZN9S836C3_nt4v119Ev();
extern void _ZN9S836C3_nt4v120Ev();
extern void _ZN9S836C3_nt4v121Ev();
extern void _ZN9S836C3_nt4v122Ev();
extern void _ZN9S836C3_nt4v123Ev();
extern void _ZN9S836C3_nt4v124Ev();
extern void _ZN9S836C3_nt4v125Ev();
extern void _ZN9S836C3_nt4v126Ev();
extern void _ZN9S836C3_nt4v127Ev();
extern void _ZN9S836C3_nt4v128Ev();
extern void _ZN9S836C3_nt4v129Ev();
extern void _ZN9S836C3_nt4v130Ev();
extern void _ZN9S836C3_nt4v131Ev();
extern void _ZN9S836C3_nt4v132Ev();
extern void _ZN9S836C3_nt4v133Ev();
extern void _ZN9S836C3_nt4v134Ev();
extern void _ZN9S836C3_nt4v135Ev();
extern void _ZN9S836C3_nt4v136Ev();
extern void _ZN9S836C3_nt4v137Ev();
extern void _ZN9S836C3_nt4v138Ev();
extern void _ZN9S836C3_nt4v139Ev();
extern void _ZN9S836C3_nt4v140Ev();
extern void _ZN9S836C2_nt4v141Ev();
extern void _ZN9S836C2_nt4v142Ev();
extern void _ZN9S836C2_nt4v143Ev();
extern void _ZN9S836C2_nt4v144Ev();
extern void _ZN9S836C2_nt4v145Ev();
extern void _ZN9S836C2_nt4v146Ev();
extern void _ZN9S836C2_nt4v147Ev();
extern void _ZN9S836C2_nt4v148Ev();
extern void _ZN9S836C2_nt4v149Ev();
extern void _ZN9S836C2_nt4v150Ev();
extern void _ZN9S836C2_nt4v151Ev();
extern void _ZN9S836C2_nt4v152Ev();
extern void _ZN9S836C2_nt4v153Ev();
extern void _ZN9S836C2_nt4v154Ev();
extern void _ZN9S836C2_nt4v155Ev();
extern void _ZN9S836C2_nt4v156Ev();
extern void _ZN9S836C2_nt4v157Ev();
extern void _ZN9S836C2_nt4v158Ev();
static  VTBL_ENTRY vtc_S836C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S836C2_nt[0]),
  (VTBL_ENTRY)&_ZN9S836C2_ntD1Ev,
  (VTBL_ENTRY)&_ZN9S836C2_ntD0Ev,
  (VTBL_ENTRY)&_ZN9S836C5_nt2v1Ev,
  (VTBL_ENTRY)&_ZN9S836C5_nt2v2Ev,
  (VTBL_ENTRY)&_ZN9S836C5_nt2v3Ev,
  (VTBL_ENTRY)&_ZN9S836C5_nt2v4Ev,
  (VTBL_ENTRY)&_ZN9S836C5_nt2v5Ev,
  (VTBL_ENTRY)&_ZN9S836C5_nt2v6Ev,
  (VTBL_ENTRY)&_ZN9S836C5_nt2v7Ev,
  (VTBL_ENTRY)&_ZN9S836C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN9S836C5_nt2v9Ev,
  (VTBL_ENTRY)&_ZN9S836C5_nt3v10Ev,
  (VTBL_ENTRY)&_ZN9S836C5_nt3v11Ev,
  (VTBL_ENTRY)&_ZN9S836C5_nt3v12Ev,
  (VTBL_ENTRY)&_ZN9S836C5_nt3v13Ev,
  (VTBL_ENTRY)&_ZN9S836C5_nt3v14Ev,
  (VTBL_ENTRY)&_ZN9S836C5_nt3v15Ev,
  (VTBL_ENTRY)&_ZN9S836C5_nt3v16Ev,
  (VTBL_ENTRY)&_ZN9S836C5_nt3v17Ev,
  (VTBL_ENTRY)&_ZN9S836C5_nt3v18Ev,
  (VTBL_ENTRY)&_ZN9S836C5_nt3v19Ev,
  (VTBL_ENTRY)&_ZN9S836C5_nt3v20Ev,
  (VTBL_ENTRY)&_ZN9S836C5_nt3v21Ev,
  (VTBL_ENTRY)&_ZN9S836C5_nt3v22Ev,
  (VTBL_ENTRY)&_ZN9S836C5_nt3v23Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v24Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v25Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v26Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v27Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v28Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v29Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v30Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v31Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v32Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v33Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v34Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v35Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v36Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v37Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v38Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v39Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v40Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v41Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v42Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v43Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v44Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v45Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v46Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v47Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v48Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v49Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v50Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v51Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v52Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v53Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v54Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v55Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v56Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v57Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v58Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v59Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v60Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v61Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v62Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v63Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v64Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v65Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v66Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v67Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v68Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v69Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v70Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v71Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v72Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v73Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v74Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v75Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v76Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v77Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v78Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v79Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v80Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v81Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v82Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v83Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v84Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v85Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v86Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v87Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v88Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v89Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v90Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v91Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v92Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v93Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v94Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v95Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v96Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v97Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v98Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v99Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt4v100Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt4v101Ev,
  (VTBL_ENTRY)&_ZN9S836C3_nt4v102Ev,
  (VTBL_ENTRY)&_ZN9S836C3_nt4v103Ev,
  (VTBL_ENTRY)&_ZN9S836C3_nt4v104Ev,
  (VTBL_ENTRY)&_ZN9S836C3_nt4v105Ev,
  (VTBL_ENTRY)&_ZN9S836C3_nt4v106Ev,
  (VTBL_ENTRY)&_ZN9S836C3_nt4v107Ev,
  (VTBL_ENTRY)&_ZN9S836C3_nt4v108Ev,
  (VTBL_ENTRY)&_ZN9S836C3_nt4v109Ev,
  (VTBL_ENTRY)&_ZN9S836C3_nt4v110Ev,
  (VTBL_ENTRY)&_ZN9S836C3_nt4v111Ev,
  (VTBL_ENTRY)&_ZN9S836C3_nt4v112Ev,
  (VTBL_ENTRY)&_ZN9S836C3_nt4v113Ev,
  (VTBL_ENTRY)&_ZN9S836C3_nt4v114Ev,
  (VTBL_ENTRY)&_ZN9S836C3_nt4v115Ev,
  (VTBL_ENTRY)&_ZN9S836C3_nt4v116Ev,
  (VTBL_ENTRY)&_ZN9S836C3_nt4v117Ev,
  (VTBL_ENTRY)&_ZN9S836C3_nt4v118Ev,
  (VTBL_ENTRY)&_ZN9S836C3_nt4v119Ev,
  (VTBL_ENTRY)&_ZN9S836C3_nt4v120Ev,
  (VTBL_ENTRY)&_ZN9S836C3_nt4v121Ev,
  (VTBL_ENTRY)&_ZN9S836C3_nt4v122Ev,
  (VTBL_ENTRY)&_ZN9S836C3_nt4v123Ev,
  (VTBL_ENTRY)&_ZN9S836C3_nt4v124Ev,
  (VTBL_ENTRY)&_ZN9S836C3_nt4v125Ev,
  (VTBL_ENTRY)&_ZN9S836C3_nt4v126Ev,
  (VTBL_ENTRY)&_ZN9S836C3_nt4v127Ev,
  (VTBL_ENTRY)&_ZN9S836C3_nt4v128Ev,
  (VTBL_ENTRY)&_ZN9S836C3_nt4v129Ev,
  (VTBL_ENTRY)&_ZN9S836C3_nt4v130Ev,
  (VTBL_ENTRY)&_ZN9S836C3_nt4v131Ev,
  (VTBL_ENTRY)&_ZN9S836C3_nt4v132Ev,
  (VTBL_ENTRY)&_ZN9S836C3_nt4v133Ev,
  (VTBL_ENTRY)&_ZN9S836C3_nt4v134Ev,
  (VTBL_ENTRY)&_ZN9S836C3_nt4v135Ev,
  (VTBL_ENTRY)&_ZN9S836C3_nt4v136Ev,
  (VTBL_ENTRY)&_ZN9S836C3_nt4v137Ev,
  (VTBL_ENTRY)&_ZN9S836C3_nt4v138Ev,
  (VTBL_ENTRY)&_ZN9S836C3_nt4v139Ev,
  (VTBL_ENTRY)&_ZN9S836C3_nt4v140Ev,
  (VTBL_ENTRY)&_ZN9S836C2_nt4v141Ev,
  (VTBL_ENTRY)&_ZN9S836C2_nt4v142Ev,
  (VTBL_ENTRY)&_ZN9S836C2_nt4v143Ev,
  (VTBL_ENTRY)&_ZN9S836C2_nt4v144Ev,
  (VTBL_ENTRY)&_ZN9S836C2_nt4v145Ev,
  (VTBL_ENTRY)&_ZN9S836C2_nt4v146Ev,
  (VTBL_ENTRY)&_ZN9S836C2_nt4v147Ev,
  (VTBL_ENTRY)&_ZN9S836C2_nt4v148Ev,
  (VTBL_ENTRY)&_ZN9S836C2_nt4v149Ev,
  (VTBL_ENTRY)&_ZN9S836C2_nt4v150Ev,
  (VTBL_ENTRY)&_ZN9S836C2_nt4v151Ev,
  (VTBL_ENTRY)&_ZN9S836C2_nt4v152Ev,
  (VTBL_ENTRY)&_ZN9S836C2_nt4v153Ev,
  (VTBL_ENTRY)&_ZN9S836C2_nt4v154Ev,
  (VTBL_ENTRY)&_ZN9S836C2_nt4v155Ev,
  (VTBL_ENTRY)&_ZN9S836C2_nt4v156Ev,
  (VTBL_ENTRY)&_ZN9S836C2_nt4v157Ev,
  (VTBL_ENTRY)&_ZN9S836C2_nt4v158Ev,
};
extern VTBL_ENTRY _ZTI9S836C2_nt[];
VTBL_ENTRY *P__ZTI9S836C2_nt = _ZTI9S836C2_nt; 
extern  VTBL_ENTRY _ZTV9S836C2_nt[];
Class_Descriptor cd_S836C2_nt = {  "S836C2_nt", // class name
  bases_S836C2_nt, 3,
  &(vtc_S836C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(912,700), // object size
  NSPAIRA(_ZTI9S836C2_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV9S836C2_nt),162, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S836C1  : S836C2_nt {
  int s836c1f0[2];
  virtual  ~S836C1(); // _ZN6S836C1D1Ev
  S836C1(); // tgen
};
//SIG(1 S836C1) C1{ BC2{ BC3{ BC4{ BC5{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 Fp Fi FC6{ BC7{ m Fp Fi FC8{ m} FC8}} FC6 Fi} vd v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 FC9{ m FC10{ m FL[2]}} FC9 FC9 FC9 FC11{ m FC9} FC12{ m FC9 FC9 FC9 FC9} FC12 FC9 FC9 FC9 Fp FC11 FC13{ m FC14{ m Fp Fi FC15{ m}} Fi} Fi Fp[7] FC16{ m Fp Fi FC15 FC17{ m}} Fi:8 Fi:8 Fi:16 Fi:16 Fi:8 Fi:8 Fi:8 Fi:32 Fi:8 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fi[7] Fp[6] Fi:8 Fi:8 Fi:8 Fi:8 Fi:8 Fi:8 FC18{ BC19{ m Fp Fi FC17 FC20{ m}}} Fp[4] Fi:8 Fi:8 Fi:8 Fi:8 Fi:8 Fi:16 Fi:16 Fi:16 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:8 Fi:8 Fi:8 Fp[7] FC21{ m Fp Fi[2] FC20} Fp[2] Fi:16 Fi:16 FC18 FC21 FC22{ m Fp Fi[2] FC23{ m}} Fp[2] Fi:24 Fi:8 Fp} vd v102 v103 v104 v105 v106 v107 v108 v109 v110 v111 v112 v113 v114 v115 v116 v117 v118 v119 v120 v121 v122 v123 v124 v125 v126 v127 v128 v129 v130 v131 v132 v133 v134 v135 v136 v137 v138 v139 v140 Fi[4] Fp Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fi:8 Fi:16 Fi:16 Fi:16 Fi:16 Fi:16 Fi FC16 Fc:1 Fc:1} vd v141 v142 v143 v144 v145 v146 v147 v148 v149 v150 v151 v152 v153 v154 v155 v156 v157 v158 Fi:4 Fi:4 Fi:4 Fi[3] Fp} vd Fi[2]}


 S836C1 ::~S836C1(){ note_dtor("S836C1", this);}
S836C1 ::S836C1(){ note_ctor("S836C1", this);} // tgen

static void Test_S836C1()
{
  extern Class_Descriptor cd_S836C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(116,178)];
    init_test(&cd_S836C1, buf);
    S836C1 *dp, &lv = *(dp=new (buf) S836C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(920,708), "sizeof(S836C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S836C1)");
    check_base_class_offset(lv, (S836C5_nt*)(S836C4_nt*)(S836C3_nt*)(S836C2_nt*), 0, "S836C1");
    check_base_class_offset(lv, (S836C4_nt*)(S836C3_nt*)(S836C2_nt*), 0, "S836C1");
    check_base_class_offset(lv, (S836C3_nt*)(S836C2_nt*), 0, "S836C1");
    check_base_class_offset(lv, (S836C2_nt*), 0, "S836C1");
    check_field_offset(lv, s836c1f0, ABISELECT(912,700), "S836C1.s836c1f0");
    test_class_info(&lv, &cd_S836C1);
    dp->~S836C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS836C1(Test_S836C1, "S836C1", ABISELECT(920,708));

#else // __cplusplus

extern void _ZN6S836C1C1Ev();
extern void _ZN6S836C1D1Ev();
Name_Map name_map_S836C1[] = {
  NSPAIR(_ZN6S836C1C1Ev),
  NSPAIR(_ZN6S836C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S836C5_nt;
extern VTBL_ENTRY _ZTI9S836C5_nt[];
extern  VTBL_ENTRY _ZTV9S836C5_nt[];
extern Class_Descriptor cd_S836C4_nt;
extern VTBL_ENTRY _ZTI9S836C4_nt[];
extern  VTBL_ENTRY _ZTV9S836C4_nt[];
extern Class_Descriptor cd_S836C3_nt;
extern VTBL_ENTRY _ZTI9S836C3_nt[];
extern  VTBL_ENTRY _ZTV9S836C3_nt[];
extern Class_Descriptor cd_S836C2_nt;
extern VTBL_ENTRY _ZTI9S836C2_nt[];
extern  VTBL_ENTRY _ZTV9S836C2_nt[];
static Base_Class bases_S836C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S836C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S836C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S836C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S836C2_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S836C1[];
extern void _ZN6S836C1D1Ev();
extern void _ZN6S836C1D0Ev();
extern void _ZN9S836C5_nt2v1Ev();
extern void _ZN9S836C5_nt2v2Ev();
extern void _ZN9S836C5_nt2v3Ev();
extern void _ZN9S836C5_nt2v4Ev();
extern void _ZN9S836C5_nt2v5Ev();
extern void _ZN9S836C5_nt2v6Ev();
extern void _ZN9S836C5_nt2v7Ev();
extern void _ZN9S836C5_nt2v8Ev();
extern void _ZN9S836C5_nt2v9Ev();
extern void _ZN9S836C5_nt3v10Ev();
extern void _ZN9S836C5_nt3v11Ev();
extern void _ZN9S836C5_nt3v12Ev();
extern void _ZN9S836C5_nt3v13Ev();
extern void _ZN9S836C5_nt3v14Ev();
extern void _ZN9S836C5_nt3v15Ev();
extern void _ZN9S836C5_nt3v16Ev();
extern void _ZN9S836C5_nt3v17Ev();
extern void _ZN9S836C5_nt3v18Ev();
extern void _ZN9S836C5_nt3v19Ev();
extern void _ZN9S836C5_nt3v20Ev();
extern void _ZN9S836C5_nt3v21Ev();
extern void _ZN9S836C5_nt3v22Ev();
extern void _ZN9S836C5_nt3v23Ev();
extern void _ZN9S836C4_nt3v24Ev();
extern void _ZN9S836C4_nt3v25Ev();
extern void _ZN9S836C4_nt3v26Ev();
extern void _ZN9S836C4_nt3v27Ev();
extern void _ZN9S836C4_nt3v28Ev();
extern void _ZN9S836C4_nt3v29Ev();
extern void _ZN9S836C4_nt3v30Ev();
extern void _ZN9S836C4_nt3v31Ev();
extern void _ZN9S836C4_nt3v32Ev();
extern void _ZN9S836C4_nt3v33Ev();
extern void _ZN9S836C4_nt3v34Ev();
extern void _ZN9S836C4_nt3v35Ev();
extern void _ZN9S836C4_nt3v36Ev();
extern void _ZN9S836C4_nt3v37Ev();
extern void _ZN9S836C4_nt3v38Ev();
extern void _ZN9S836C4_nt3v39Ev();
extern void _ZN9S836C4_nt3v40Ev();
extern void _ZN9S836C4_nt3v41Ev();
extern void _ZN9S836C4_nt3v42Ev();
extern void _ZN9S836C4_nt3v43Ev();
extern void _ZN9S836C4_nt3v44Ev();
extern void _ZN9S836C4_nt3v45Ev();
extern void _ZN9S836C4_nt3v46Ev();
extern void _ZN9S836C4_nt3v47Ev();
extern void _ZN9S836C4_nt3v48Ev();
extern void _ZN9S836C4_nt3v49Ev();
extern void _ZN9S836C4_nt3v50Ev();
extern void _ZN9S836C4_nt3v51Ev();
extern void _ZN9S836C4_nt3v52Ev();
extern void _ZN9S836C4_nt3v53Ev();
extern void _ZN9S836C4_nt3v54Ev();
extern void _ZN9S836C4_nt3v55Ev();
extern void _ZN9S836C4_nt3v56Ev();
extern void _ZN9S836C4_nt3v57Ev();
extern void _ZN9S836C4_nt3v58Ev();
extern void _ZN9S836C4_nt3v59Ev();
extern void _ZN9S836C4_nt3v60Ev();
extern void _ZN9S836C4_nt3v61Ev();
extern void _ZN9S836C4_nt3v62Ev();
extern void _ZN9S836C4_nt3v63Ev();
extern void _ZN9S836C4_nt3v64Ev();
extern void _ZN9S836C4_nt3v65Ev();
extern void _ZN9S836C4_nt3v66Ev();
extern void _ZN9S836C4_nt3v67Ev();
extern void _ZN9S836C4_nt3v68Ev();
extern void _ZN9S836C4_nt3v69Ev();
extern void _ZN9S836C4_nt3v70Ev();
extern void _ZN9S836C4_nt3v71Ev();
extern void _ZN9S836C4_nt3v72Ev();
extern void _ZN9S836C4_nt3v73Ev();
extern void _ZN9S836C4_nt3v74Ev();
extern void _ZN9S836C4_nt3v75Ev();
extern void _ZN9S836C4_nt3v76Ev();
extern void _ZN9S836C4_nt3v77Ev();
extern void _ZN9S836C4_nt3v78Ev();
extern void _ZN9S836C4_nt3v79Ev();
extern void _ZN9S836C4_nt3v80Ev();
extern void _ZN9S836C4_nt3v81Ev();
extern void _ZN9S836C4_nt3v82Ev();
extern void _ZN9S836C4_nt3v83Ev();
extern void _ZN9S836C4_nt3v84Ev();
extern void _ZN9S836C4_nt3v85Ev();
extern void _ZN9S836C4_nt3v86Ev();
extern void _ZN9S836C4_nt3v87Ev();
extern void _ZN9S836C4_nt3v88Ev();
extern void _ZN9S836C4_nt3v89Ev();
extern void _ZN9S836C4_nt3v90Ev();
extern void _ZN9S836C4_nt3v91Ev();
extern void _ZN9S836C4_nt3v92Ev();
extern void _ZN9S836C4_nt3v93Ev();
extern void _ZN9S836C4_nt3v94Ev();
extern void _ZN9S836C4_nt3v95Ev();
extern void _ZN9S836C4_nt3v96Ev();
extern void _ZN9S836C4_nt3v97Ev();
extern void _ZN9S836C4_nt3v98Ev();
extern void _ZN9S836C4_nt3v99Ev();
extern void _ZN9S836C4_nt4v100Ev();
extern void _ZN9S836C4_nt4v101Ev();
extern void _ZN9S836C3_nt4v102Ev();
extern void _ZN9S836C3_nt4v103Ev();
extern void _ZN9S836C3_nt4v104Ev();
extern void _ZN9S836C3_nt4v105Ev();
extern void _ZN9S836C3_nt4v106Ev();
extern void _ZN9S836C3_nt4v107Ev();
extern void _ZN9S836C3_nt4v108Ev();
extern void _ZN9S836C3_nt4v109Ev();
extern void _ZN9S836C3_nt4v110Ev();
extern void _ZN9S836C3_nt4v111Ev();
extern void _ZN9S836C3_nt4v112Ev();
extern void _ZN9S836C3_nt4v113Ev();
extern void _ZN9S836C3_nt4v114Ev();
extern void _ZN9S836C3_nt4v115Ev();
extern void _ZN9S836C3_nt4v116Ev();
extern void _ZN9S836C3_nt4v117Ev();
extern void _ZN9S836C3_nt4v118Ev();
extern void _ZN9S836C3_nt4v119Ev();
extern void _ZN9S836C3_nt4v120Ev();
extern void _ZN9S836C3_nt4v121Ev();
extern void _ZN9S836C3_nt4v122Ev();
extern void _ZN9S836C3_nt4v123Ev();
extern void _ZN9S836C3_nt4v124Ev();
extern void _ZN9S836C3_nt4v125Ev();
extern void _ZN9S836C3_nt4v126Ev();
extern void _ZN9S836C3_nt4v127Ev();
extern void _ZN9S836C3_nt4v128Ev();
extern void _ZN9S836C3_nt4v129Ev();
extern void _ZN9S836C3_nt4v130Ev();
extern void _ZN9S836C3_nt4v131Ev();
extern void _ZN9S836C3_nt4v132Ev();
extern void _ZN9S836C3_nt4v133Ev();
extern void _ZN9S836C3_nt4v134Ev();
extern void _ZN9S836C3_nt4v135Ev();
extern void _ZN9S836C3_nt4v136Ev();
extern void _ZN9S836C3_nt4v137Ev();
extern void _ZN9S836C3_nt4v138Ev();
extern void _ZN9S836C3_nt4v139Ev();
extern void _ZN9S836C3_nt4v140Ev();
extern void _ZN9S836C2_nt4v141Ev();
extern void _ZN9S836C2_nt4v142Ev();
extern void _ZN9S836C2_nt4v143Ev();
extern void _ZN9S836C2_nt4v144Ev();
extern void _ZN9S836C2_nt4v145Ev();
extern void _ZN9S836C2_nt4v146Ev();
extern void _ZN9S836C2_nt4v147Ev();
extern void _ZN9S836C2_nt4v148Ev();
extern void _ZN9S836C2_nt4v149Ev();
extern void _ZN9S836C2_nt4v150Ev();
extern void _ZN9S836C2_nt4v151Ev();
extern void _ZN9S836C2_nt4v152Ev();
extern void _ZN9S836C2_nt4v153Ev();
extern void _ZN9S836C2_nt4v154Ev();
extern void _ZN9S836C2_nt4v155Ev();
extern void _ZN9S836C2_nt4v156Ev();
extern void _ZN9S836C2_nt4v157Ev();
extern void _ZN9S836C2_nt4v158Ev();
static  VTBL_ENTRY vtc_S836C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S836C1[0]),
  (VTBL_ENTRY)&_ZN6S836C1D1Ev,
  (VTBL_ENTRY)&_ZN6S836C1D0Ev,
  (VTBL_ENTRY)&_ZN9S836C5_nt2v1Ev,
  (VTBL_ENTRY)&_ZN9S836C5_nt2v2Ev,
  (VTBL_ENTRY)&_ZN9S836C5_nt2v3Ev,
  (VTBL_ENTRY)&_ZN9S836C5_nt2v4Ev,
  (VTBL_ENTRY)&_ZN9S836C5_nt2v5Ev,
  (VTBL_ENTRY)&_ZN9S836C5_nt2v6Ev,
  (VTBL_ENTRY)&_ZN9S836C5_nt2v7Ev,
  (VTBL_ENTRY)&_ZN9S836C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN9S836C5_nt2v9Ev,
  (VTBL_ENTRY)&_ZN9S836C5_nt3v10Ev,
  (VTBL_ENTRY)&_ZN9S836C5_nt3v11Ev,
  (VTBL_ENTRY)&_ZN9S836C5_nt3v12Ev,
  (VTBL_ENTRY)&_ZN9S836C5_nt3v13Ev,
  (VTBL_ENTRY)&_ZN9S836C5_nt3v14Ev,
  (VTBL_ENTRY)&_ZN9S836C5_nt3v15Ev,
  (VTBL_ENTRY)&_ZN9S836C5_nt3v16Ev,
  (VTBL_ENTRY)&_ZN9S836C5_nt3v17Ev,
  (VTBL_ENTRY)&_ZN9S836C5_nt3v18Ev,
  (VTBL_ENTRY)&_ZN9S836C5_nt3v19Ev,
  (VTBL_ENTRY)&_ZN9S836C5_nt3v20Ev,
  (VTBL_ENTRY)&_ZN9S836C5_nt3v21Ev,
  (VTBL_ENTRY)&_ZN9S836C5_nt3v22Ev,
  (VTBL_ENTRY)&_ZN9S836C5_nt3v23Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v24Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v25Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v26Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v27Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v28Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v29Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v30Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v31Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v32Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v33Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v34Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v35Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v36Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v37Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v38Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v39Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v40Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v41Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v42Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v43Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v44Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v45Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v46Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v47Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v48Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v49Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v50Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v51Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v52Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v53Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v54Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v55Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v56Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v57Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v58Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v59Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v60Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v61Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v62Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v63Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v64Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v65Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v66Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v67Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v68Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v69Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v70Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v71Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v72Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v73Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v74Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v75Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v76Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v77Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v78Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v79Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v80Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v81Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v82Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v83Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v84Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v85Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v86Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v87Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v88Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v89Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v90Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v91Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v92Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v93Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v94Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v95Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v96Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v97Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v98Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt3v99Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt4v100Ev,
  (VTBL_ENTRY)&_ZN9S836C4_nt4v101Ev,
  (VTBL_ENTRY)&_ZN9S836C3_nt4v102Ev,
  (VTBL_ENTRY)&_ZN9S836C3_nt4v103Ev,
  (VTBL_ENTRY)&_ZN9S836C3_nt4v104Ev,
  (VTBL_ENTRY)&_ZN9S836C3_nt4v105Ev,
  (VTBL_ENTRY)&_ZN9S836C3_nt4v106Ev,
  (VTBL_ENTRY)&_ZN9S836C3_nt4v107Ev,
  (VTBL_ENTRY)&_ZN9S836C3_nt4v108Ev,
  (VTBL_ENTRY)&_ZN9S836C3_nt4v109Ev,
  (VTBL_ENTRY)&_ZN9S836C3_nt4v110Ev,
  (VTBL_ENTRY)&_ZN9S836C3_nt4v111Ev,
  (VTBL_ENTRY)&_ZN9S836C3_nt4v112Ev,
  (VTBL_ENTRY)&_ZN9S836C3_nt4v113Ev,
  (VTBL_ENTRY)&_ZN9S836C3_nt4v114Ev,
  (VTBL_ENTRY)&_ZN9S836C3_nt4v115Ev,
  (VTBL_ENTRY)&_ZN9S836C3_nt4v116Ev,
  (VTBL_ENTRY)&_ZN9S836C3_nt4v117Ev,
  (VTBL_ENTRY)&_ZN9S836C3_nt4v118Ev,
  (VTBL_ENTRY)&_ZN9S836C3_nt4v119Ev,
  (VTBL_ENTRY)&_ZN9S836C3_nt4v120Ev,
  (VTBL_ENTRY)&_ZN9S836C3_nt4v121Ev,
  (VTBL_ENTRY)&_ZN9S836C3_nt4v122Ev,
  (VTBL_ENTRY)&_ZN9S836C3_nt4v123Ev,
  (VTBL_ENTRY)&_ZN9S836C3_nt4v124Ev,
  (VTBL_ENTRY)&_ZN9S836C3_nt4v125Ev,
  (VTBL_ENTRY)&_ZN9S836C3_nt4v126Ev,
  (VTBL_ENTRY)&_ZN9S836C3_nt4v127Ev,
  (VTBL_ENTRY)&_ZN9S836C3_nt4v128Ev,
  (VTBL_ENTRY)&_ZN9S836C3_nt4v129Ev,
  (VTBL_ENTRY)&_ZN9S836C3_nt4v130Ev,
  (VTBL_ENTRY)&_ZN9S836C3_nt4v131Ev,
  (VTBL_ENTRY)&_ZN9S836C3_nt4v132Ev,
  (VTBL_ENTRY)&_ZN9S836C3_nt4v133Ev,
  (VTBL_ENTRY)&_ZN9S836C3_nt4v134Ev,
  (VTBL_ENTRY)&_ZN9S836C3_nt4v135Ev,
  (VTBL_ENTRY)&_ZN9S836C3_nt4v136Ev,
  (VTBL_ENTRY)&_ZN9S836C3_nt4v137Ev,
  (VTBL_ENTRY)&_ZN9S836C3_nt4v138Ev,
  (VTBL_ENTRY)&_ZN9S836C3_nt4v139Ev,
  (VTBL_ENTRY)&_ZN9S836C3_nt4v140Ev,
  (VTBL_ENTRY)&_ZN9S836C2_nt4v141Ev,
  (VTBL_ENTRY)&_ZN9S836C2_nt4v142Ev,
  (VTBL_ENTRY)&_ZN9S836C2_nt4v143Ev,
  (VTBL_ENTRY)&_ZN9S836C2_nt4v144Ev,
  (VTBL_ENTRY)&_ZN9S836C2_nt4v145Ev,
  (VTBL_ENTRY)&_ZN9S836C2_nt4v146Ev,
  (VTBL_ENTRY)&_ZN9S836C2_nt4v147Ev,
  (VTBL_ENTRY)&_ZN9S836C2_nt4v148Ev,
  (VTBL_ENTRY)&_ZN9S836C2_nt4v149Ev,
  (VTBL_ENTRY)&_ZN9S836C2_nt4v150Ev,
  (VTBL_ENTRY)&_ZN9S836C2_nt4v151Ev,
  (VTBL_ENTRY)&_ZN9S836C2_nt4v152Ev,
  (VTBL_ENTRY)&_ZN9S836C2_nt4v153Ev,
  (VTBL_ENTRY)&_ZN9S836C2_nt4v154Ev,
  (VTBL_ENTRY)&_ZN9S836C2_nt4v155Ev,
  (VTBL_ENTRY)&_ZN9S836C2_nt4v156Ev,
  (VTBL_ENTRY)&_ZN9S836C2_nt4v157Ev,
  (VTBL_ENTRY)&_ZN9S836C2_nt4v158Ev,
};
extern VTBL_ENTRY _ZTI6S836C1[];
extern  VTBL_ENTRY _ZTV6S836C1[];
Class_Descriptor cd_S836C1 = {  "S836C1", // class name
  bases_S836C1, 4,
  &(vtc_S836C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(920,708), // object size
  NSPAIRA(_ZTI6S836C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S836C1),162, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  4, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2214C4  {
  void *s2214c4f0;
  int s2214c4f1;
  ::S836C26 s2214c4f2;
  ::S836C6_nt s2214c4f3;
  int s2214c4f4;
  virtual  ~S2214C4(); // _ZN7S2214C4D1Ev
  virtual void  v3(); // _ZN7S2214C42v3Ev
  virtual void  v4(); // _ZN7S2214C42v4Ev
  virtual void  v5(); // _ZN7S2214C42v5Ev
  virtual void  v6(); // _ZN7S2214C42v6Ev
  virtual void  v7(); // _ZN7S2214C42v7Ev
  virtual void  v8(); // _ZN7S2214C42v8Ev
  virtual void  v9(); // _ZN7S2214C42v9Ev
  virtual void  v10(); // _ZN7S2214C43v10Ev
  virtual void  v11(); // _ZN7S2214C43v11Ev
  virtual void  v12(); // _ZN7S2214C43v12Ev
  virtual void  v13(); // _ZN7S2214C43v13Ev
  virtual void  v14(); // _ZN7S2214C43v14Ev
  virtual void  v15(); // _ZN7S2214C43v15Ev
  virtual void  v16(); // _ZN7S2214C43v16Ev
  virtual void  v17(); // _ZN7S2214C43v17Ev
  virtual void  v18(); // _ZN7S2214C43v18Ev
  virtual void  v19(); // _ZN7S2214C43v19Ev
  virtual void  v20(); // _ZN7S2214C43v20Ev
  virtual void  v21(); // _ZN7S2214C43v21Ev
  virtual void  v22(); // _ZN7S2214C43v22Ev
  virtual void  v23(); // _ZN7S2214C43v23Ev
  virtual void  v24(); // _ZN7S2214C43v24Ev
  virtual void  v25(); // _ZN7S2214C43v25Ev
  S2214C4(); // tgen
};
//SIG(-1 S2214C4) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 Fp Fi FC2{ BC3{ m Fp Fi FC4{ m} FC5{ m}}} FC6{ BC7{ m Fp Fi FC8{ m} FC8}} Fi}


 S2214C4 ::~S2214C4(){ note_dtor("S2214C4", this);}
void  S2214C4 ::v3(){vfunc_called(this, "_ZN7S2214C42v3Ev");}
void  S2214C4 ::v4(){vfunc_called(this, "_ZN7S2214C42v4Ev");}
void  S2214C4 ::v5(){vfunc_called(this, "_ZN7S2214C42v5Ev");}
void  S2214C4 ::v6(){vfunc_called(this, "_ZN7S2214C42v6Ev");}
void  S2214C4 ::v7(){vfunc_called(this, "_ZN7S2214C42v7Ev");}
void  S2214C4 ::v8(){vfunc_called(this, "_ZN7S2214C42v8Ev");}
void  S2214C4 ::v9(){vfunc_called(this, "_ZN7S2214C42v9Ev");}
void  S2214C4 ::v10(){vfunc_called(this, "_ZN7S2214C43v10Ev");}
void  S2214C4 ::v11(){vfunc_called(this, "_ZN7S2214C43v11Ev");}
void  S2214C4 ::v12(){vfunc_called(this, "_ZN7S2214C43v12Ev");}
void  S2214C4 ::v13(){vfunc_called(this, "_ZN7S2214C43v13Ev");}
void  S2214C4 ::v14(){vfunc_called(this, "_ZN7S2214C43v14Ev");}
void  S2214C4 ::v15(){vfunc_called(this, "_ZN7S2214C43v15Ev");}
void  S2214C4 ::v16(){vfunc_called(this, "_ZN7S2214C43v16Ev");}
void  S2214C4 ::v17(){vfunc_called(this, "_ZN7S2214C43v17Ev");}
void  S2214C4 ::v18(){vfunc_called(this, "_ZN7S2214C43v18Ev");}
void  S2214C4 ::v19(){vfunc_called(this, "_ZN7S2214C43v19Ev");}
void  S2214C4 ::v20(){vfunc_called(this, "_ZN7S2214C43v20Ev");}
void  S2214C4 ::v21(){vfunc_called(this, "_ZN7S2214C43v21Ev");}
void  S2214C4 ::v22(){vfunc_called(this, "_ZN7S2214C43v22Ev");}
void  S2214C4 ::v23(){vfunc_called(this, "_ZN7S2214C43v23Ev");}
void  S2214C4 ::v24(){vfunc_called(this, "_ZN7S2214C43v24Ev");}
void  S2214C4 ::v25(){vfunc_called(this, "_ZN7S2214C43v25Ev");}
S2214C4 ::S2214C4(){ note_ctor("S2214C4", this);} // tgen

static void Test_S2214C4()
{
  extern Class_Descriptor cd_S2214C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(9,11)];
    init_test(&cd_S2214C4, buf);
    S2214C4 *dp, &lv = *(dp=new (buf) S2214C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,40), "sizeof(S2214C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2214C4)");
    check_field_offset(lv, s2214c4f0, ABISELECT(8,4), "S2214C4.s2214c4f0");
    check_field_offset(lv, s2214c4f1, ABISELECT(16,8), "S2214C4.s2214c4f1");
    check_field_offset(lv, s2214c4f2, ABISELECT(24,12), "S2214C4.s2214c4f2");
    check_field_offset(lv, s2214c4f3, ABISELECT(40,24), "S2214C4.s2214c4f3");
    check_field_offset(lv, s2214c4f4, ABISELECT(56,36), "S2214C4.s2214c4f4");
    test_class_info(&lv, &cd_S2214C4);
    dp->~S2214C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2214C4(Test_S2214C4, "S2214C4", ABISELECT(64,40));

#else // __cplusplus

extern void _ZN7S2214C4C1Ev();
extern void _ZN7S2214C4D1Ev();
Name_Map name_map_S2214C4[] = {
  NSPAIR(_ZN7S2214C4C1Ev),
  NSPAIR(_ZN7S2214C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S2214C4[];
extern void _ZN7S2214C4D1Ev();
extern void _ZN7S2214C4D0Ev();
extern void _ZN7S2214C42v3Ev();
extern void _ZN7S2214C42v4Ev();
extern void _ZN7S2214C42v5Ev();
extern void _ZN7S2214C42v6Ev();
extern void _ZN7S2214C42v7Ev();
extern void _ZN7S2214C42v8Ev();
extern void _ZN7S2214C42v9Ev();
extern void _ZN7S2214C43v10Ev();
extern void _ZN7S2214C43v11Ev();
extern void _ZN7S2214C43v12Ev();
extern void _ZN7S2214C43v13Ev();
extern void _ZN7S2214C43v14Ev();
extern void _ZN7S2214C43v15Ev();
extern void _ZN7S2214C43v16Ev();
extern void _ZN7S2214C43v17Ev();
extern void _ZN7S2214C43v18Ev();
extern void _ZN7S2214C43v19Ev();
extern void _ZN7S2214C43v20Ev();
extern void _ZN7S2214C43v21Ev();
extern void _ZN7S2214C43v22Ev();
extern void _ZN7S2214C43v23Ev();
extern void _ZN7S2214C43v24Ev();
extern void _ZN7S2214C43v25Ev();
static  VTBL_ENTRY vtc_S2214C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2214C4[0]),
  (VTBL_ENTRY)&_ZN7S2214C4D1Ev,
  (VTBL_ENTRY)&_ZN7S2214C4D0Ev,
  (VTBL_ENTRY)&_ZN7S2214C42v3Ev,
  (VTBL_ENTRY)&_ZN7S2214C42v4Ev,
  (VTBL_ENTRY)&_ZN7S2214C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2214C42v6Ev,
  (VTBL_ENTRY)&_ZN7S2214C42v7Ev,
  (VTBL_ENTRY)&_ZN7S2214C42v8Ev,
  (VTBL_ENTRY)&_ZN7S2214C42v9Ev,
  (VTBL_ENTRY)&_ZN7S2214C43v10Ev,
  (VTBL_ENTRY)&_ZN7S2214C43v11Ev,
  (VTBL_ENTRY)&_ZN7S2214C43v12Ev,
  (VTBL_ENTRY)&_ZN7S2214C43v13Ev,
  (VTBL_ENTRY)&_ZN7S2214C43v14Ev,
  (VTBL_ENTRY)&_ZN7S2214C43v15Ev,
  (VTBL_ENTRY)&_ZN7S2214C43v16Ev,
  (VTBL_ENTRY)&_ZN7S2214C43v17Ev,
  (VTBL_ENTRY)&_ZN7S2214C43v18Ev,
  (VTBL_ENTRY)&_ZN7S2214C43v19Ev,
  (VTBL_ENTRY)&_ZN7S2214C43v20Ev,
  (VTBL_ENTRY)&_ZN7S2214C43v21Ev,
  (VTBL_ENTRY)&_ZN7S2214C43v22Ev,
  (VTBL_ENTRY)&_ZN7S2214C43v23Ev,
  (VTBL_ENTRY)&_ZN7S2214C43v24Ev,
  (VTBL_ENTRY)&_ZN7S2214C43v25Ev,
};
extern VTBL_ENTRY _ZTI7S2214C4[];
extern  VTBL_ENTRY _ZTV7S2214C4[];
Class_Descriptor cd_S2214C4 = {  "S2214C4", // class name
  0,0,//no base classes
  &(vtc_S2214C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(64,40), // object size
  NSPAIRA(_ZTI7S2214C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S2214C4),27, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2214C15_nt  {
  ::S836C15_nt s2214c15f0;
  void  mf2214c15(); // _ZN11S2214C15_nt9mf2214c15Ev
};
//SIG(-1 S2214C15_nt) C1{ m FC2{ m FL[2]}}


void  S2214C15_nt ::mf2214c15(){}

//skip512 S2214C15_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2214C25_nt  : S836C23 {
};
//SIG(-1 S2214C25_nt) C1{ BC2{ m Fp Fi FC3{ m} FC4{ m}}}



//skip512 S2214C25_nt

#else // __cplusplus

extern Class_Descriptor cd_S836C23;
static Base_Class bases_S2214C25_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S836C23,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2214C37_nt  {
  void *s2214c37f0;
  int s2214c37f1[2];
  ::S836C39 s2214c37f2;
  void  mf2214c37(); // _ZN11S2214C37_nt9mf2214c37Ev
};
//SIG(-1 S2214C37_nt) C1{ m Fp Fi[2] FC2{ m}}


void  S2214C37_nt ::mf2214c37(){}

//skip512 S2214C37_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2214C3  : S2214C4 {
  ::S836C14_nt s2214c3f0;
  ::S836C14_nt s2214c3f1;
  ::S836C14_nt s2214c3f2;
  ::S2214C15_nt s2214c3f3;
  ::S836C18_nt s2214c3f4;
  ::S836C19_nt s2214c3f5;
  ::S836C19_nt s2214c3f6;
  ::S836C14_nt s2214c3f7;
  ::S836C14_nt s2214c3f8;
  ::S836C14_nt s2214c3f9;
  void *s2214c3f10;
  ::S836C18_nt s2214c3f11;
  ::S836C20_nt s2214c3f12;
  int s2214c3f13;
  void *s2214c3f14[7];
  ::S836C27 s2214c3f15;
  int s2214c3f16:8;
  int s2214c3f17:8;
  int s2214c3f18:16;
  int s2214c3f19:16;
  int s2214c3f20:8;
  int s2214c3f21:8;
  int s2214c3f22:8;
  int s2214c3f23:32;
  int s2214c3f24:8;
  int s2214c3f25:4;
  int s2214c3f26:4;
  int s2214c3f27:4;
  int s2214c3f28:4;
  int s2214c3f29:4;
  int s2214c3f30:4;
  int s2214c3f31:4;
  int s2214c3f32:4;
  int s2214c3f33:4;
  int s2214c3f34:4;
  unsigned char s2214c3f35:1;
  unsigned char s2214c3f36:1;
  unsigned char s2214c3f37:1;
  unsigned char s2214c3f38:1;
  unsigned char s2214c3f39:1;
  unsigned char s2214c3f40:1;
  unsigned char s2214c3f41:1;
  unsigned char s2214c3f42:1;
  unsigned char s2214c3f43:1;
  unsigned char s2214c3f44:1;
  unsigned char s2214c3f45:1;
  unsigned char s2214c3f46:1;
  unsigned char s2214c3f47:1;
  unsigned char s2214c3f48:1;
  unsigned char s2214c3f49:1;
  unsigned char s2214c3f50:1;
  unsigned char s2214c3f51:1;
  unsigned char s2214c3f52:1;
  unsigned char s2214c3f53:1;
  unsigned char s2214c3f54:1;
  unsigned char s2214c3f55:1;
  unsigned char s2214c3f56:1;
  unsigned char s2214c3f57:1;
  unsigned char s2214c3f58:1;
  unsigned char s2214c3f59:1;
  unsigned char s2214c3f60:1;
  unsigned char s2214c3f61:1;
  unsigned char s2214c3f62:1;
  unsigned char s2214c3f63:1;
  unsigned char s2214c3f64:1;
  unsigned char s2214c3f65:1;
  unsigned char s2214c3f66:1;
  unsigned char s2214c3f67:1;
  unsigned char s2214c3f68:1;
  unsigned char s2214c3f69:1;
  unsigned char s2214c3f70:1;
  unsigned char s2214c3f71:1;
  unsigned char s2214c3f72:1;
  unsigned char s2214c3f73:1;
  unsigned char s2214c3f74:1;
  unsigned char s2214c3f75:1;
  int s2214c3f76[7];
  void *s2214c3f77[6];
  int s2214c3f78:8;
  int s2214c3f79:8;
  int s2214c3f80:8;
  int s2214c3f81:8;
  int s2214c3f82:8;
  int s2214c3f83:8;
  ::S2214C25_nt s2214c3f84;
  void *s2214c3f85[4];
  int s2214c3f86:8;
  int s2214c3f87:8;
  int s2214c3f88:8;
  int s2214c3f89:8;
  int s2214c3f90:8;
  int s2214c3f91:16;
  int s2214c3f92:16;
  int s2214c3f93:16;
  int s2214c3f94:4;
  int s2214c3f95:4;
  int s2214c3f96:4;
  int s2214c3f97:4;
  int s2214c3f98:4;
  int s2214c3f99:4;
  int s2214c3f100:4;
  int s2214c3f101:4;
  int s2214c3f102:4;
  int s2214c3f103:4;
  int s2214c3f104:4;
  int s2214c3f105:4;
  int s2214c3f106:8;
  int s2214c3f107:8;
  int s2214c3f108:8;
  void *s2214c3f109[7];
  ::S836C38 s2214c3f110;
  void *s2214c3f111[2];
  int s2214c3f112:16;
  int s2214c3f113:16;
  ::S2214C25_nt s2214c3f114;
  ::S836C30_nt s2214c3f115;
  ::S2214C37_nt s2214c3f116;
  void *s2214c3f117[2];
  int s2214c3f118:24;
  int s2214c3f119:8;
  void *s2214c3f120;
  virtual  ~S2214C3(); // _ZN7S2214C3D1Ev
  virtual void  v26(); // _ZN7S2214C33v26Ev
  virtual void  v27(); // _ZN7S2214C33v27Ev
  virtual void  v28(); // _ZN7S2214C33v28Ev
  virtual void  v29(); // _ZN7S2214C33v29Ev
  virtual void  v30(); // _ZN7S2214C33v30Ev
  virtual void  v31(); // _ZN7S2214C33v31Ev
  virtual void  v32(); // _ZN7S2214C33v32Ev
  virtual void  v33(); // _ZN7S2214C33v33Ev
  virtual void  v34(); // _ZN7S2214C33v34Ev
  virtual void  v35(); // _ZN7S2214C33v35Ev
  virtual void  v36(); // _ZN7S2214C33v36Ev
  virtual void  v37(); // _ZN7S2214C33v37Ev
  virtual void  v38(); // _ZN7S2214C33v38Ev
  virtual void  v39(); // _ZN7S2214C33v39Ev
  virtual void  v40(); // _ZN7S2214C33v40Ev
  virtual void  v41(); // _ZN7S2214C33v41Ev
  virtual void  v42(); // _ZN7S2214C33v42Ev
  virtual void  v43(); // _ZN7S2214C33v43Ev
  virtual void  v44(); // _ZN7S2214C33v44Ev
  virtual void  v45(); // _ZN7S2214C33v45Ev
  virtual void  v46(); // _ZN7S2214C33v46Ev
  virtual void  v47(); // _ZN7S2214C33v47Ev
  virtual void  v48(); // _ZN7S2214C33v48Ev
  virtual void  v49(); // _ZN7S2214C33v49Ev
  virtual void  v50(); // _ZN7S2214C33v50Ev
  virtual void  v51(); // _ZN7S2214C33v51Ev
  virtual void  v52(); // _ZN7S2214C33v52Ev
  virtual void  v53(); // _ZN7S2214C33v53Ev
  virtual void  v54(); // _ZN7S2214C33v54Ev
  virtual void  v55(); // _ZN7S2214C33v55Ev
  virtual void  v56(); // _ZN7S2214C33v56Ev
  virtual void  v57(); // _ZN7S2214C33v57Ev
  virtual void  v58(); // _ZN7S2214C33v58Ev
  virtual void  v59(); // _ZN7S2214C33v59Ev
  virtual void  v60(); // _ZN7S2214C33v60Ev
  virtual void  v61(); // _ZN7S2214C33v61Ev
  virtual void  v62(); // _ZN7S2214C33v62Ev
  virtual void  v63(); // _ZN7S2214C33v63Ev
  virtual void  v64(); // _ZN7S2214C33v64Ev
  virtual void  v65(); // _ZN7S2214C33v65Ev
  virtual void  v66(); // _ZN7S2214C33v66Ev
  virtual void  v67(); // _ZN7S2214C33v67Ev
  virtual void  v68(); // _ZN7S2214C33v68Ev
  virtual void  v69(); // _ZN7S2214C33v69Ev
  virtual void  v70(); // _ZN7S2214C33v70Ev
  virtual void  v71(); // _ZN7S2214C33v71Ev
  virtual void  v72(); // _ZN7S2214C33v72Ev
  virtual void  v73(); // _ZN7S2214C33v73Ev
  virtual void  v74(); // _ZN7S2214C33v74Ev
  virtual void  v75(); // _ZN7S2214C33v75Ev
  virtual void  v76(); // _ZN7S2214C33v76Ev
  virtual void  v77(); // _ZN7S2214C33v77Ev
  virtual void  v78(); // _ZN7S2214C33v78Ev
  virtual void  v79(); // _ZN7S2214C33v79Ev
  virtual void  v80(); // _ZN7S2214C33v80Ev
  virtual void  v81(); // _ZN7S2214C33v81Ev
  virtual void  v82(); // _ZN7S2214C33v82Ev
  virtual void  v83(); // _ZN7S2214C33v83Ev
  virtual void  v84(); // _ZN7S2214C33v84Ev
  virtual void  v85(); // _ZN7S2214C33v85Ev
  virtual void  v86(); // _ZN7S2214C33v86Ev
  virtual void  v87(); // _ZN7S2214C33v87Ev
  virtual void  v88(); // _ZN7S2214C33v88Ev
  virtual void  v89(); // _ZN7S2214C33v89Ev
  virtual void  v90(); // _ZN7S2214C33v90Ev
  virtual void  v91(); // _ZN7S2214C33v91Ev
  virtual void  v92(); // _ZN7S2214C33v92Ev
  virtual void  v93(); // _ZN7S2214C33v93Ev
  virtual void  v94(); // _ZN7S2214C33v94Ev
  virtual void  v95(); // _ZN7S2214C33v95Ev
  virtual void  v96(); // _ZN7S2214C33v96Ev
  virtual void  v97(); // _ZN7S2214C33v97Ev
  virtual void  v98(); // _ZN7S2214C33v98Ev
  virtual void  v99(); // _ZN7S2214C33v99Ev
  virtual void  v100(); // _ZN7S2214C34v100Ev
  virtual void  v101(); // _ZN7S2214C34v101Ev
  virtual void  v102(); // _ZN7S2214C34v102Ev
  virtual void  v103(); // _ZN7S2214C34v103Ev
  S2214C3(); // tgen
};
//SIG(-1 S2214C3) C1{ BC2{ vd v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 Fp Fi FC3{ BC4{ m Fp Fi FC5{ m} FC6{ m}}} FC7{ BC8{ m Fp Fi FC9{ m} FC9}} Fi} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 FC10{ m FC11{ m FL[2]}} FC10 FC10 FC12{ m FC11} FC13{ m FC10} FC14{ m FC10 FC10 FC10 FC10} FC14 FC10 FC10 FC10 Fp FC13 FC15{ m FC16{ m Fp Fi FC17{ m}} Fi} Fi Fp[7] FC4 Fi:8 Fi:8 Fi:16 Fi:16 Fi:8 Fi:8 Fi:8 Fi:32 Fi:8 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fi[7] Fp[6] Fi:8 Fi:8 Fi:8 Fi:8 Fi:8 Fi:8 FC18{ BC19{ m Fp Fi FC17 FC5}} Fp[4] Fi:8 Fi:8 Fi:8 Fi:8 Fi:8 Fi:16 Fi:16 Fi:16 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:8 Fi:8 Fi:8 Fp[7] FC20{ m Fp Fi[2] FC21{ m}} Fp[2] Fi:16 Fi:16 FC18 FC22{ m Fp Fi[2] FC6} FC23{ m Fp Fi[2] FC21} Fp[2] Fi:24 Fi:8 Fp}


 S2214C3 ::~S2214C3(){ note_dtor("S2214C3", this);}
void  S2214C3 ::v26(){vfunc_called(this, "_ZN7S2214C33v26Ev");}
void  S2214C3 ::v27(){vfunc_called(this, "_ZN7S2214C33v27Ev");}
void  S2214C3 ::v28(){vfunc_called(this, "_ZN7S2214C33v28Ev");}
void  S2214C3 ::v29(){vfunc_called(this, "_ZN7S2214C33v29Ev");}
void  S2214C3 ::v30(){vfunc_called(this, "_ZN7S2214C33v30Ev");}
void  S2214C3 ::v31(){vfunc_called(this, "_ZN7S2214C33v31Ev");}
void  S2214C3 ::v32(){vfunc_called(this, "_ZN7S2214C33v32Ev");}
void  S2214C3 ::v33(){vfunc_called(this, "_ZN7S2214C33v33Ev");}
void  S2214C3 ::v34(){vfunc_called(this, "_ZN7S2214C33v34Ev");}
void  S2214C3 ::v35(){vfunc_called(this, "_ZN7S2214C33v35Ev");}
void  S2214C3 ::v36(){vfunc_called(this, "_ZN7S2214C33v36Ev");}
void  S2214C3 ::v37(){vfunc_called(this, "_ZN7S2214C33v37Ev");}
void  S2214C3 ::v38(){vfunc_called(this, "_ZN7S2214C33v38Ev");}
void  S2214C3 ::v39(){vfunc_called(this, "_ZN7S2214C33v39Ev");}
void  S2214C3 ::v40(){vfunc_called(this, "_ZN7S2214C33v40Ev");}
void  S2214C3 ::v41(){vfunc_called(this, "_ZN7S2214C33v41Ev");}
void  S2214C3 ::v42(){vfunc_called(this, "_ZN7S2214C33v42Ev");}
void  S2214C3 ::v43(){vfunc_called(this, "_ZN7S2214C33v43Ev");}
void  S2214C3 ::v44(){vfunc_called(this, "_ZN7S2214C33v44Ev");}
void  S2214C3 ::v45(){vfunc_called(this, "_ZN7S2214C33v45Ev");}
void  S2214C3 ::v46(){vfunc_called(this, "_ZN7S2214C33v46Ev");}
void  S2214C3 ::v47(){vfunc_called(this, "_ZN7S2214C33v47Ev");}
void  S2214C3 ::v48(){vfunc_called(this, "_ZN7S2214C33v48Ev");}
void  S2214C3 ::v49(){vfunc_called(this, "_ZN7S2214C33v49Ev");}
void  S2214C3 ::v50(){vfunc_called(this, "_ZN7S2214C33v50Ev");}
void  S2214C3 ::v51(){vfunc_called(this, "_ZN7S2214C33v51Ev");}
void  S2214C3 ::v52(){vfunc_called(this, "_ZN7S2214C33v52Ev");}
void  S2214C3 ::v53(){vfunc_called(this, "_ZN7S2214C33v53Ev");}
void  S2214C3 ::v54(){vfunc_called(this, "_ZN7S2214C33v54Ev");}
void  S2214C3 ::v55(){vfunc_called(this, "_ZN7S2214C33v55Ev");}
void  S2214C3 ::v56(){vfunc_called(this, "_ZN7S2214C33v56Ev");}
void  S2214C3 ::v57(){vfunc_called(this, "_ZN7S2214C33v57Ev");}
void  S2214C3 ::v58(){vfunc_called(this, "_ZN7S2214C33v58Ev");}
void  S2214C3 ::v59(){vfunc_called(this, "_ZN7S2214C33v59Ev");}
void  S2214C3 ::v60(){vfunc_called(this, "_ZN7S2214C33v60Ev");}
void  S2214C3 ::v61(){vfunc_called(this, "_ZN7S2214C33v61Ev");}
void  S2214C3 ::v62(){vfunc_called(this, "_ZN7S2214C33v62Ev");}
void  S2214C3 ::v63(){vfunc_called(this, "_ZN7S2214C33v63Ev");}
void  S2214C3 ::v64(){vfunc_called(this, "_ZN7S2214C33v64Ev");}
void  S2214C3 ::v65(){vfunc_called(this, "_ZN7S2214C33v65Ev");}
void  S2214C3 ::v66(){vfunc_called(this, "_ZN7S2214C33v66Ev");}
void  S2214C3 ::v67(){vfunc_called(this, "_ZN7S2214C33v67Ev");}
void  S2214C3 ::v68(){vfunc_called(this, "_ZN7S2214C33v68Ev");}
void  S2214C3 ::v69(){vfunc_called(this, "_ZN7S2214C33v69Ev");}
void  S2214C3 ::v70(){vfunc_called(this, "_ZN7S2214C33v70Ev");}
void  S2214C3 ::v71(){vfunc_called(this, "_ZN7S2214C33v71Ev");}
void  S2214C3 ::v72(){vfunc_called(this, "_ZN7S2214C33v72Ev");}
void  S2214C3 ::v73(){vfunc_called(this, "_ZN7S2214C33v73Ev");}
void  S2214C3 ::v74(){vfunc_called(this, "_ZN7S2214C33v74Ev");}
void  S2214C3 ::v75(){vfunc_called(this, "_ZN7S2214C33v75Ev");}
void  S2214C3 ::v76(){vfunc_called(this, "_ZN7S2214C33v76Ev");}
void  S2214C3 ::v77(){vfunc_called(this, "_ZN7S2214C33v77Ev");}
void  S2214C3 ::v78(){vfunc_called(this, "_ZN7S2214C33v78Ev");}
void  S2214C3 ::v79(){vfunc_called(this, "_ZN7S2214C33v79Ev");}
void  S2214C3 ::v80(){vfunc_called(this, "_ZN7S2214C33v80Ev");}
void  S2214C3 ::v81(){vfunc_called(this, "_ZN7S2214C33v81Ev");}
void  S2214C3 ::v82(){vfunc_called(this, "_ZN7S2214C33v82Ev");}
void  S2214C3 ::v83(){vfunc_called(this, "_ZN7S2214C33v83Ev");}
void  S2214C3 ::v84(){vfunc_called(this, "_ZN7S2214C33v84Ev");}
void  S2214C3 ::v85(){vfunc_called(this, "_ZN7S2214C33v85Ev");}
void  S2214C3 ::v86(){vfunc_called(this, "_ZN7S2214C33v86Ev");}
void  S2214C3 ::v87(){vfunc_called(this, "_ZN7S2214C33v87Ev");}
void  S2214C3 ::v88(){vfunc_called(this, "_ZN7S2214C33v88Ev");}
void  S2214C3 ::v89(){vfunc_called(this, "_ZN7S2214C33v89Ev");}
void  S2214C3 ::v90(){vfunc_called(this, "_ZN7S2214C33v90Ev");}
void  S2214C3 ::v91(){vfunc_called(this, "_ZN7S2214C33v91Ev");}
void  S2214C3 ::v92(){vfunc_called(this, "_ZN7S2214C33v92Ev");}
void  S2214C3 ::v93(){vfunc_called(this, "_ZN7S2214C33v93Ev");}
void  S2214C3 ::v94(){vfunc_called(this, "_ZN7S2214C33v94Ev");}
void  S2214C3 ::v95(){vfunc_called(this, "_ZN7S2214C33v95Ev");}
void  S2214C3 ::v96(){vfunc_called(this, "_ZN7S2214C33v96Ev");}
void  S2214C3 ::v97(){vfunc_called(this, "_ZN7S2214C33v97Ev");}
void  S2214C3 ::v98(){vfunc_called(this, "_ZN7S2214C33v98Ev");}
void  S2214C3 ::v99(){vfunc_called(this, "_ZN7S2214C33v99Ev");}
void  S2214C3 ::v100(){vfunc_called(this, "_ZN7S2214C34v100Ev");}
void  S2214C3 ::v101(){vfunc_called(this, "_ZN7S2214C34v101Ev");}
void  S2214C3 ::v102(){vfunc_called(this, "_ZN7S2214C34v102Ev");}
void  S2214C3 ::v103(){vfunc_called(this, "_ZN7S2214C34v103Ev");}
S2214C3 ::S2214C3(){ note_ctor("S2214C3", this);} // tgen

static void Test_S2214C3()
{
  extern Class_Descriptor cd_S2214C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(105,159)];
    init_test(&cd_S2214C3, buf);
    S2214C3 *dp, &lv = *(dp=new (buf) S2214C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(832,632), "sizeof(S2214C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2214C3)");
    check_base_class_offset(lv, (S2214C4*), 0, "S2214C3");
    check_field_offset(lv, s2214c3f0, ABISELECT(64,40), "S2214C3.s2214c3f0");
    check_field_offset(lv, s2214c3f1, ABISELECT(80,56), "S2214C3.s2214c3f1");
    check_field_offset(lv, s2214c3f2, ABISELECT(96,72), "S2214C3.s2214c3f2");
    check_field_offset(lv, s2214c3f3, ABISELECT(112,88), "S2214C3.s2214c3f3");
    check_field_offset(lv, s2214c3f4, ABISELECT(128,104), "S2214C3.s2214c3f4");
    check_field_offset(lv, s2214c3f5, ABISELECT(144,120), "S2214C3.s2214c3f5");
    check_field_offset(lv, s2214c3f6, ABISELECT(208,184), "S2214C3.s2214c3f6");
    check_field_offset(lv, s2214c3f7, ABISELECT(272,248), "S2214C3.s2214c3f7");
    check_field_offset(lv, s2214c3f8, ABISELECT(288,264), "S2214C3.s2214c3f8");
    check_field_offset(lv, s2214c3f9, ABISELECT(304,280), "S2214C3.s2214c3f9");
    check_field_offset(lv, s2214c3f10, ABISELECT(320,296), "S2214C3.s2214c3f10");
    check_field_offset(lv, s2214c3f11, ABISELECT(328,300), "S2214C3.s2214c3f11");
    check_field_offset(lv, s2214c3f12, ABISELECT(344,316), "S2214C3.s2214c3f12");
    check_field_offset(lv, s2214c3f13, ABISELECT(368,332), "S2214C3.s2214c3f13");
    check_field_offset(lv, s2214c3f14, ABISELECT(376,336), "S2214C3.s2214c3f14");
    check_field_offset(lv, s2214c3f15, ABISELECT(432,364), "S2214C3.s2214c3f15");
    set_bf_and_test(lv, s2214c3f16, ABISELECT(448,376), 0, 8, 1, "S2214C3");
    set_bf_and_test(lv, s2214c3f16, ABISELECT(448,376), 0, 8, hide_sll(1LL<<7), "S2214C3");
    set_bf_and_test(lv, s2214c3f17, ABISELECT(449,377), 0, 8, 1, "S2214C3");
    set_bf_and_test(lv, s2214c3f17, ABISELECT(449,377), 0, 8, hide_sll(1LL<<7), "S2214C3");
    set_bf_and_test(lv, s2214c3f18, ABISELECT(450,378), 0, 16, 1, "S2214C3");
    set_bf_and_test(lv, s2214c3f18, ABISELECT(450,378), 0, 16, hide_sll(1LL<<15), "S2214C3");
    set_bf_and_test(lv, s2214c3f19, ABISELECT(452,380), 0, 16, 1, "S2214C3");
    set_bf_and_test(lv, s2214c3f19, ABISELECT(452,380), 0, 16, hide_sll(1LL<<15), "S2214C3");
    set_bf_and_test(lv, s2214c3f20, ABISELECT(454,382), 0, 8, 1, "S2214C3");
    set_bf_and_test(lv, s2214c3f20, ABISELECT(454,382), 0, 8, hide_sll(1LL<<7), "S2214C3");
    set_bf_and_test(lv, s2214c3f21, ABISELECT(455,383), 0, 8, 1, "S2214C3");
    set_bf_and_test(lv, s2214c3f21, ABISELECT(455,383), 0, 8, hide_sll(1LL<<7), "S2214C3");
    set_bf_and_test(lv, s2214c3f22, ABISELECT(456,384), 0, 8, 1, "S2214C3");
    set_bf_and_test(lv, s2214c3f22, ABISELECT(456,384), 0, 8, hide_sll(1LL<<7), "S2214C3");
    set_bf_and_test(lv, s2214c3f23, ABISELECT(460,388), 0, 32, 1, "S2214C3");
    set_bf_and_test(lv, s2214c3f23, ABISELECT(460,388), 0, 32, hide_sll(1LL<<31), "S2214C3");
    set_bf_and_test(lv, s2214c3f24, ABISELECT(464,392), 0, 8, 1, "S2214C3");
    set_bf_and_test(lv, s2214c3f24, ABISELECT(464,392), 0, 8, hide_sll(1LL<<7), "S2214C3");
    set_bf_and_test(lv, s2214c3f25, ABISELECT(465,393), 0, 4, 1, "S2214C3");
    set_bf_and_test(lv, s2214c3f25, ABISELECT(465,393), 0, 4, hide_sll(1LL<<3), "S2214C3");
    set_bf_and_test(lv, s2214c3f26, ABISELECT(465,393), 4, 4, 1, "S2214C3");
    set_bf_and_test(lv, s2214c3f26, ABISELECT(465,393), 4, 4, hide_sll(1LL<<3), "S2214C3");
    set_bf_and_test(lv, s2214c3f27, ABISELECT(466,394), 0, 4, 1, "S2214C3");
    set_bf_and_test(lv, s2214c3f27, ABISELECT(466,394), 0, 4, hide_sll(1LL<<3), "S2214C3");
    set_bf_and_test(lv, s2214c3f28, ABISELECT(466,394), 4, 4, 1, "S2214C3");
    set_bf_and_test(lv, s2214c3f28, ABISELECT(466,394), 4, 4, hide_sll(1LL<<3), "S2214C3");
    set_bf_and_test(lv, s2214c3f29, ABISELECT(467,395), 0, 4, 1, "S2214C3");
    set_bf_and_test(lv, s2214c3f29, ABISELECT(467,395), 0, 4, hide_sll(1LL<<3), "S2214C3");
    set_bf_and_test(lv, s2214c3f30, ABISELECT(467,395), 4, 4, 1, "S2214C3");
    set_bf_and_test(lv, s2214c3f30, ABISELECT(467,395), 4, 4, hide_sll(1LL<<3), "S2214C3");
    set_bf_and_test(lv, s2214c3f31, ABISELECT(468,396), 0, 4, 1, "S2214C3");
    set_bf_and_test(lv, s2214c3f31, ABISELECT(468,396), 0, 4, hide_sll(1LL<<3), "S2214C3");
    set_bf_and_test(lv, s2214c3f32, ABISELECT(468,396), 4, 4, 1, "S2214C3");
    set_bf_and_test(lv, s2214c3f32, ABISELECT(468,396), 4, 4, hide_sll(1LL<<3), "S2214C3");
    set_bf_and_test(lv, s2214c3f33, ABISELECT(469,397), 0, 4, 1, "S2214C3");
    set_bf_and_test(lv, s2214c3f33, ABISELECT(469,397), 0, 4, hide_sll(1LL<<3), "S2214C3");
    set_bf_and_test(lv, s2214c3f34, ABISELECT(469,397), 4, 4, 1, "S2214C3");
    set_bf_and_test(lv, s2214c3f34, ABISELECT(469,397), 4, 4, hide_sll(1LL<<3), "S2214C3");
    set_bf_and_test(lv, s2214c3f35, ABISELECT(470,398), 0, 1, 1, "S2214C3");
    set_bf_and_test(lv, s2214c3f36, ABISELECT(470,398), 1, 1, 1, "S2214C3");
    set_bf_and_test(lv, s2214c3f37, ABISELECT(470,398), 2, 1, 1, "S2214C3");
    set_bf_and_test(lv, s2214c3f38, ABISELECT(470,398), 3, 1, 1, "S2214C3");
    set_bf_and_test(lv, s2214c3f39, ABISELECT(470,398), 4, 1, 1, "S2214C3");
    set_bf_and_test(lv, s2214c3f40, ABISELECT(470,398), 5, 1, 1, "S2214C3");
    set_bf_and_test(lv, s2214c3f41, ABISELECT(470,398), 6, 1, 1, "S2214C3");
    set_bf_and_test(lv, s2214c3f42, ABISELECT(470,398), 7, 1, 1, "S2214C3");
    set_bf_and_test(lv, s2214c3f43, ABISELECT(471,399), 0, 1, 1, "S2214C3");
    set_bf_and_test(lv, s2214c3f44, ABISELECT(471,399), 1, 1, 1, "S2214C3");
    set_bf_and_test(lv, s2214c3f45, ABISELECT(471,399), 2, 1, 1, "S2214C3");
    set_bf_and_test(lv, s2214c3f46, ABISELECT(471,399), 3, 1, 1, "S2214C3");
    set_bf_and_test(lv, s2214c3f47, ABISELECT(471,399), 4, 1, 1, "S2214C3");
    set_bf_and_test(lv, s2214c3f48, ABISELECT(471,399), 5, 1, 1, "S2214C3");
    set_bf_and_test(lv, s2214c3f49, ABISELECT(471,399), 6, 1, 1, "S2214C3");
    set_bf_and_test(lv, s2214c3f50, ABISELECT(471,399), 7, 1, 1, "S2214C3");
    set_bf_and_test(lv, s2214c3f51, ABISELECT(472,400), 0, 1, 1, "S2214C3");
    set_bf_and_test(lv, s2214c3f52, ABISELECT(472,400), 1, 1, 1, "S2214C3");
    set_bf_and_test(lv, s2214c3f53, ABISELECT(472,400), 2, 1, 1, "S2214C3");
    set_bf_and_test(lv, s2214c3f54, ABISELECT(472,400), 3, 1, 1, "S2214C3");
    set_bf_and_test(lv, s2214c3f55, ABISELECT(472,400), 4, 1, 1, "S2214C3");
    set_bf_and_test(lv, s2214c3f56, ABISELECT(472,400), 5, 1, 1, "S2214C3");
    set_bf_and_test(lv, s2214c3f57, ABISELECT(472,400), 6, 1, 1, "S2214C3");
    set_bf_and_test(lv, s2214c3f58, ABISELECT(472,400), 7, 1, 1, "S2214C3");
    set_bf_and_test(lv, s2214c3f59, ABISELECT(473,401), 0, 1, 1, "S2214C3");
    set_bf_and_test(lv, s2214c3f60, ABISELECT(473,401), 1, 1, 1, "S2214C3");
    set_bf_and_test(lv, s2214c3f61, ABISELECT(473,401), 2, 1, 1, "S2214C3");
    set_bf_and_test(lv, s2214c3f62, ABISELECT(473,401), 3, 1, 1, "S2214C3");
    set_bf_and_test(lv, s2214c3f63, ABISELECT(473,401), 4, 1, 1, "S2214C3");
    set_bf_and_test(lv, s2214c3f64, ABISELECT(473,401), 5, 1, 1, "S2214C3");
    set_bf_and_test(lv, s2214c3f65, ABISELECT(473,401), 6, 1, 1, "S2214C3");
    set_bf_and_test(lv, s2214c3f66, ABISELECT(473,401), 7, 1, 1, "S2214C3");
    set_bf_and_test(lv, s2214c3f67, ABISELECT(474,402), 0, 1, 1, "S2214C3");
    set_bf_and_test(lv, s2214c3f68, ABISELECT(474,402), 1, 1, 1, "S2214C3");
    set_bf_and_test(lv, s2214c3f69, ABISELECT(474,402), 2, 1, 1, "S2214C3");
    set_bf_and_test(lv, s2214c3f70, ABISELECT(474,402), 3, 1, 1, "S2214C3");
    set_bf_and_test(lv, s2214c3f71, ABISELECT(474,402), 4, 1, 1, "S2214C3");
    set_bf_and_test(lv, s2214c3f72, ABISELECT(474,402), 5, 1, 1, "S2214C3");
    set_bf_and_test(lv, s2214c3f73, ABISELECT(474,402), 6, 1, 1, "S2214C3");
    set_bf_and_test(lv, s2214c3f74, ABISELECT(474,402), 7, 1, 1, "S2214C3");
    set_bf_and_test(lv, s2214c3f75, ABISELECT(475,403), 0, 1, 1, "S2214C3");
    check_field_offset(lv, s2214c3f76, ABISELECT(476,404), "S2214C3.s2214c3f76");
    check_field_offset(lv, s2214c3f77, ABISELECT(504,432), "S2214C3.s2214c3f77");
    set_bf_and_test(lv, s2214c3f78, ABISELECT(552,456), 0, 8, 1, "S2214C3");
    set_bf_and_test(lv, s2214c3f78, ABISELECT(552,456), 0, 8, hide_sll(1LL<<7), "S2214C3");
    set_bf_and_test(lv, s2214c3f79, ABISELECT(553,457), 0, 8, 1, "S2214C3");
    set_bf_and_test(lv, s2214c3f79, ABISELECT(553,457), 0, 8, hide_sll(1LL<<7), "S2214C3");
    set_bf_and_test(lv, s2214c3f80, ABISELECT(554,458), 0, 8, 1, "S2214C3");
    set_bf_and_test(lv, s2214c3f80, ABISELECT(554,458), 0, 8, hide_sll(1LL<<7), "S2214C3");
    set_bf_and_test(lv, s2214c3f81, ABISELECT(555,459), 0, 8, 1, "S2214C3");
    set_bf_and_test(lv, s2214c3f81, ABISELECT(555,459), 0, 8, hide_sll(1LL<<7), "S2214C3");
    set_bf_and_test(lv, s2214c3f82, ABISELECT(556,460), 0, 8, 1, "S2214C3");
    set_bf_and_test(lv, s2214c3f82, ABISELECT(556,460), 0, 8, hide_sll(1LL<<7), "S2214C3");
    set_bf_and_test(lv, s2214c3f83, ABISELECT(557,461), 0, 8, 1, "S2214C3");
    set_bf_and_test(lv, s2214c3f83, ABISELECT(557,461), 0, 8, hide_sll(1LL<<7), "S2214C3");
    check_field_offset(lv, s2214c3f84, ABISELECT(560,464), "S2214C3.s2214c3f84");
    check_field_offset(lv, s2214c3f85, ABISELECT(576,476), "S2214C3.s2214c3f85");
    set_bf_and_test(lv, s2214c3f86, ABISELECT(608,492), 0, 8, 1, "S2214C3");
    set_bf_and_test(lv, s2214c3f86, ABISELECT(608,492), 0, 8, hide_sll(1LL<<7), "S2214C3");
    set_bf_and_test(lv, s2214c3f87, ABISELECT(609,493), 0, 8, 1, "S2214C3");
    set_bf_and_test(lv, s2214c3f87, ABISELECT(609,493), 0, 8, hide_sll(1LL<<7), "S2214C3");
    set_bf_and_test(lv, s2214c3f88, ABISELECT(610,494), 0, 8, 1, "S2214C3");
    set_bf_and_test(lv, s2214c3f88, ABISELECT(610,494), 0, 8, hide_sll(1LL<<7), "S2214C3");
    set_bf_and_test(lv, s2214c3f89, ABISELECT(611,495), 0, 8, 1, "S2214C3");
    set_bf_and_test(lv, s2214c3f89, ABISELECT(611,495), 0, 8, hide_sll(1LL<<7), "S2214C3");
    set_bf_and_test(lv, s2214c3f90, ABISELECT(612,496), 0, 8, 1, "S2214C3");
    set_bf_and_test(lv, s2214c3f90, ABISELECT(612,496), 0, 8, hide_sll(1LL<<7), "S2214C3");
    set_bf_and_test(lv, s2214c3f91, ABISELECT(613,497), 0, 16, 1, "S2214C3");
    set_bf_and_test(lv, s2214c3f91, ABISELECT(613,497), 0, 16, hide_sll(1LL<<15), "S2214C3");
    set_bf_and_test(lv, s2214c3f92, ABISELECT(616,500), 0, 16, 1, "S2214C3");
    set_bf_and_test(lv, s2214c3f92, ABISELECT(616,500), 0, 16, hide_sll(1LL<<15), "S2214C3");
    set_bf_and_test(lv, s2214c3f93, ABISELECT(618,502), 0, 16, 1, "S2214C3");
    set_bf_and_test(lv, s2214c3f93, ABISELECT(618,502), 0, 16, hide_sll(1LL<<15), "S2214C3");
    set_bf_and_test(lv, s2214c3f94, ABISELECT(620,504), 0, 4, 1, "S2214C3");
    set_bf_and_test(lv, s2214c3f94, ABISELECT(620,504), 0, 4, hide_sll(1LL<<3), "S2214C3");
    set_bf_and_test(lv, s2214c3f95, ABISELECT(620,504), 4, 4, 1, "S2214C3");
    set_bf_and_test(lv, s2214c3f95, ABISELECT(620,504), 4, 4, hide_sll(1LL<<3), "S2214C3");
    set_bf_and_test(lv, s2214c3f96, ABISELECT(621,505), 0, 4, 1, "S2214C3");
    set_bf_and_test(lv, s2214c3f96, ABISELECT(621,505), 0, 4, hide_sll(1LL<<3), "S2214C3");
    set_bf_and_test(lv, s2214c3f97, ABISELECT(621,505), 4, 4, 1, "S2214C3");
    set_bf_and_test(lv, s2214c3f97, ABISELECT(621,505), 4, 4, hide_sll(1LL<<3), "S2214C3");
    set_bf_and_test(lv, s2214c3f98, ABISELECT(622,506), 0, 4, 1, "S2214C3");
    set_bf_and_test(lv, s2214c3f98, ABISELECT(622,506), 0, 4, hide_sll(1LL<<3), "S2214C3");
    set_bf_and_test(lv, s2214c3f99, ABISELECT(622,506), 4, 4, 1, "S2214C3");
    set_bf_and_test(lv, s2214c3f99, ABISELECT(622,506), 4, 4, hide_sll(1LL<<3), "S2214C3");
    set_bf_and_test(lv, s2214c3f100, ABISELECT(623,507), 0, 4, 1, "S2214C3");
    set_bf_and_test(lv, s2214c3f100, ABISELECT(623,507), 0, 4, hide_sll(1LL<<3), "S2214C3");
    set_bf_and_test(lv, s2214c3f101, ABISELECT(623,507), 4, 4, 1, "S2214C3");
    set_bf_and_test(lv, s2214c3f101, ABISELECT(623,507), 4, 4, hide_sll(1LL<<3), "S2214C3");
    set_bf_and_test(lv, s2214c3f102, ABISELECT(624,508), 0, 4, 1, "S2214C3");
    set_bf_and_test(lv, s2214c3f102, ABISELECT(624,508), 0, 4, hide_sll(1LL<<3), "S2214C3");
    set_bf_and_test(lv, s2214c3f103, ABISELECT(624,508), 4, 4, 1, "S2214C3");
    set_bf_and_test(lv, s2214c3f103, ABISELECT(624,508), 4, 4, hide_sll(1LL<<3), "S2214C3");
    set_bf_and_test(lv, s2214c3f104, ABISELECT(625,509), 0, 4, 1, "S2214C3");
    set_bf_and_test(lv, s2214c3f104, ABISELECT(625,509), 0, 4, hide_sll(1LL<<3), "S2214C3");
    set_bf_and_test(lv, s2214c3f105, ABISELECT(625,509), 4, 4, 1, "S2214C3");
    set_bf_and_test(lv, s2214c3f105, ABISELECT(625,509), 4, 4, hide_sll(1LL<<3), "S2214C3");
    set_bf_and_test(lv, s2214c3f106, ABISELECT(626,510), 0, 8, 1, "S2214C3");
    set_bf_and_test(lv, s2214c3f106, ABISELECT(626,510), 0, 8, hide_sll(1LL<<7), "S2214C3");
    set_bf_and_test(lv, s2214c3f107, ABISELECT(627,511), 0, 8, 1, "S2214C3");
    set_bf_and_test(lv, s2214c3f107, ABISELECT(627,511), 0, 8, hide_sll(1LL<<7), "S2214C3");
    set_bf_and_test(lv, s2214c3f108, ABISELECT(628,512), 0, 8, 1, "S2214C3");
    set_bf_and_test(lv, s2214c3f108, ABISELECT(628,512), 0, 8, hide_sll(1LL<<7), "S2214C3");
    check_field_offset(lv, s2214c3f109, ABISELECT(632,516), "S2214C3.s2214c3f109");
    check_field_offset(lv, s2214c3f110, ABISELECT(688,544), "S2214C3.s2214c3f110");
    check_field_offset(lv, s2214c3f111, ABISELECT(712,560), "S2214C3.s2214c3f111");
    set_bf_and_test(lv, s2214c3f112, ABISELECT(728,568), 0, 16, 1, "S2214C3");
    set_bf_and_test(lv, s2214c3f112, ABISELECT(728,568), 0, 16, hide_sll(1LL<<15), "S2214C3");
    set_bf_and_test(lv, s2214c3f113, ABISELECT(730,570), 0, 16, 1, "S2214C3");
    set_bf_and_test(lv, s2214c3f113, ABISELECT(730,570), 0, 16, hide_sll(1LL<<15), "S2214C3");
    check_field_offset(lv, s2214c3f114, ABISELECT(736,572), "S2214C3.s2214c3f114");
    check_field_offset(lv, s2214c3f115, ABISELECT(752,584), "S2214C3.s2214c3f115");
    check_field_offset(lv, s2214c3f116, ABISELECT(776,600), "S2214C3.s2214c3f116");
    check_field_offset(lv, s2214c3f117, ABISELECT(800,616), "S2214C3.s2214c3f117");
    set_bf_and_test(lv, s2214c3f118, ABISELECT(816,624), 0, 24, 1, "S2214C3");
    set_bf_and_test(lv, s2214c3f118, ABISELECT(816,624), 0, 24, hide_sll(1LL<<23), "S2214C3");
    set_bf_and_test(lv, s2214c3f119, ABISELECT(819,627), 0, 8, 1, "S2214C3");
    set_bf_and_test(lv, s2214c3f119, ABISELECT(819,627), 0, 8, hide_sll(1LL<<7), "S2214C3");
    check_field_offset(lv, s2214c3f120, ABISELECT(824,628), "S2214C3.s2214c3f120");
    test_class_info(&lv, &cd_S2214C3);
    dp->~S2214C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2214C3(Test_S2214C3, "S2214C3", ABISELECT(832,632));

#else // __cplusplus

extern void _ZN7S2214C3C1Ev();
extern void _ZN7S2214C3D1Ev();
Name_Map name_map_S2214C3[] = {
  NSPAIR(_ZN7S2214C3C1Ev),
  NSPAIR(_ZN7S2214C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2214C4;
extern VTBL_ENTRY _ZTI7S2214C4[];
extern  VTBL_ENTRY _ZTV7S2214C4[];
static Base_Class bases_S2214C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2214C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S2214C3[];
extern void _ZN7S2214C3D1Ev();
extern void _ZN7S2214C3D0Ev();
extern void _ZN7S2214C42v3Ev();
extern void _ZN7S2214C42v4Ev();
extern void _ZN7S2214C42v5Ev();
extern void _ZN7S2214C42v6Ev();
extern void _ZN7S2214C42v7Ev();
extern void _ZN7S2214C42v8Ev();
extern void _ZN7S2214C42v9Ev();
extern void _ZN7S2214C43v10Ev();
extern void _ZN7S2214C43v11Ev();
extern void _ZN7S2214C43v12Ev();
extern void _ZN7S2214C43v13Ev();
extern void _ZN7S2214C43v14Ev();
extern void _ZN7S2214C43v15Ev();
extern void _ZN7S2214C43v16Ev();
extern void _ZN7S2214C43v17Ev();
extern void _ZN7S2214C43v18Ev();
extern void _ZN7S2214C43v19Ev();
extern void _ZN7S2214C43v20Ev();
extern void _ZN7S2214C43v21Ev();
extern void _ZN7S2214C43v22Ev();
extern void _ZN7S2214C43v23Ev();
extern void _ZN7S2214C43v24Ev();
extern void _ZN7S2214C43v25Ev();
extern void _ZN7S2214C33v26Ev();
extern void _ZN7S2214C33v27Ev();
extern void _ZN7S2214C33v28Ev();
extern void _ZN7S2214C33v29Ev();
extern void _ZN7S2214C33v30Ev();
extern void _ZN7S2214C33v31Ev();
extern void _ZN7S2214C33v32Ev();
extern void _ZN7S2214C33v33Ev();
extern void _ZN7S2214C33v34Ev();
extern void _ZN7S2214C33v35Ev();
extern void _ZN7S2214C33v36Ev();
extern void _ZN7S2214C33v37Ev();
extern void _ZN7S2214C33v38Ev();
extern void _ZN7S2214C33v39Ev();
extern void _ZN7S2214C33v40Ev();
extern void _ZN7S2214C33v41Ev();
extern void _ZN7S2214C33v42Ev();
extern void _ZN7S2214C33v43Ev();
extern void _ZN7S2214C33v44Ev();
extern void _ZN7S2214C33v45Ev();
extern void _ZN7S2214C33v46Ev();
extern void _ZN7S2214C33v47Ev();
extern void _ZN7S2214C33v48Ev();
extern void _ZN7S2214C33v49Ev();
extern void _ZN7S2214C33v50Ev();
extern void _ZN7S2214C33v51Ev();
extern void _ZN7S2214C33v52Ev();
extern void _ZN7S2214C33v53Ev();
extern void _ZN7S2214C33v54Ev();
extern void _ZN7S2214C33v55Ev();
extern void _ZN7S2214C33v56Ev();
extern void _ZN7S2214C33v57Ev();
extern void _ZN7S2214C33v58Ev();
extern void _ZN7S2214C33v59Ev();
extern void _ZN7S2214C33v60Ev();
extern void _ZN7S2214C33v61Ev();
extern void _ZN7S2214C33v62Ev();
extern void _ZN7S2214C33v63Ev();
extern void _ZN7S2214C33v64Ev();
extern void _ZN7S2214C33v65Ev();
extern void _ZN7S2214C33v66Ev();
extern void _ZN7S2214C33v67Ev();
extern void _ZN7S2214C33v68Ev();
extern void _ZN7S2214C33v69Ev();
extern void _ZN7S2214C33v70Ev();
extern void _ZN7S2214C33v71Ev();
extern void _ZN7S2214C33v72Ev();
extern void _ZN7S2214C33v73Ev();
extern void _ZN7S2214C33v74Ev();
extern void _ZN7S2214C33v75Ev();
extern void _ZN7S2214C33v76Ev();
extern void _ZN7S2214C33v77Ev();
extern void _ZN7S2214C33v78Ev();
extern void _ZN7S2214C33v79Ev();
extern void _ZN7S2214C33v80Ev();
extern void _ZN7S2214C33v81Ev();
extern void _ZN7S2214C33v82Ev();
extern void _ZN7S2214C33v83Ev();
extern void _ZN7S2214C33v84Ev();
extern void _ZN7S2214C33v85Ev();
extern void _ZN7S2214C33v86Ev();
extern void _ZN7S2214C33v87Ev();
extern void _ZN7S2214C33v88Ev();
extern void _ZN7S2214C33v89Ev();
extern void _ZN7S2214C33v90Ev();
extern void _ZN7S2214C33v91Ev();
extern void _ZN7S2214C33v92Ev();
extern void _ZN7S2214C33v93Ev();
extern void _ZN7S2214C33v94Ev();
extern void _ZN7S2214C33v95Ev();
extern void _ZN7S2214C33v96Ev();
extern void _ZN7S2214C33v97Ev();
extern void _ZN7S2214C33v98Ev();
extern void _ZN7S2214C33v99Ev();
extern void _ZN7S2214C34v100Ev();
extern void _ZN7S2214C34v101Ev();
extern void _ZN7S2214C34v102Ev();
extern void _ZN7S2214C34v103Ev();
static  VTBL_ENTRY vtc_S2214C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2214C3[0]),
  (VTBL_ENTRY)&_ZN7S2214C3D1Ev,
  (VTBL_ENTRY)&_ZN7S2214C3D0Ev,
  (VTBL_ENTRY)&_ZN7S2214C42v3Ev,
  (VTBL_ENTRY)&_ZN7S2214C42v4Ev,
  (VTBL_ENTRY)&_ZN7S2214C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2214C42v6Ev,
  (VTBL_ENTRY)&_ZN7S2214C42v7Ev,
  (VTBL_ENTRY)&_ZN7S2214C42v8Ev,
  (VTBL_ENTRY)&_ZN7S2214C42v9Ev,
  (VTBL_ENTRY)&_ZN7S2214C43v10Ev,
  (VTBL_ENTRY)&_ZN7S2214C43v11Ev,
  (VTBL_ENTRY)&_ZN7S2214C43v12Ev,
  (VTBL_ENTRY)&_ZN7S2214C43v13Ev,
  (VTBL_ENTRY)&_ZN7S2214C43v14Ev,
  (VTBL_ENTRY)&_ZN7S2214C43v15Ev,
  (VTBL_ENTRY)&_ZN7S2214C43v16Ev,
  (VTBL_ENTRY)&_ZN7S2214C43v17Ev,
  (VTBL_ENTRY)&_ZN7S2214C43v18Ev,
  (VTBL_ENTRY)&_ZN7S2214C43v19Ev,
  (VTBL_ENTRY)&_ZN7S2214C43v20Ev,
  (VTBL_ENTRY)&_ZN7S2214C43v21Ev,
  (VTBL_ENTRY)&_ZN7S2214C43v22Ev,
  (VTBL_ENTRY)&_ZN7S2214C43v23Ev,
  (VTBL_ENTRY)&_ZN7S2214C43v24Ev,
  (VTBL_ENTRY)&_ZN7S2214C43v25Ev,
  (VTBL_ENTRY)&_ZN7S2214C33v26Ev,
  (VTBL_ENTRY)&_ZN7S2214C33v27Ev,
  (VTBL_ENTRY)&_ZN7S2214C33v28Ev,
  (VTBL_ENTRY)&_ZN7S2214C33v29Ev,
  (VTBL_ENTRY)&_ZN7S2214C33v30Ev,
  (VTBL_ENTRY)&_ZN7S2214C33v31Ev,
  (VTBL_ENTRY)&_ZN7S2214C33v32Ev,
  (VTBL_ENTRY)&_ZN7S2214C33v33Ev,
  (VTBL_ENTRY)&_ZN7S2214C33v34Ev,
  (VTBL_ENTRY)&_ZN7S2214C33v35Ev,
  (VTBL_ENTRY)&_ZN7S2214C33v36Ev,
  (VTBL_ENTRY)&_ZN7S2214C33v37Ev,
  (VTBL_ENTRY)&_ZN7S2214C33v38Ev,
  (VTBL_ENTRY)&_ZN7S2214C33v39Ev,
  (VTBL_ENTRY)&_ZN7S2214C33v40Ev,
  (VTBL_ENTRY)&_ZN7S2214C33v41Ev,
  (VTBL_ENTRY)&_ZN7S2214C33v42Ev,
  (VTBL_ENTRY)&_ZN7S2214C33v43Ev,
  (VTBL_ENTRY)&_ZN7S2214C33v44Ev,
  (VTBL_ENTRY)&_ZN7S2214C33v45Ev,
  (VTBL_ENTRY)&_ZN7S2214C33v46Ev,
  (VTBL_ENTRY)&_ZN7S2214C33v47Ev,
  (VTBL_ENTRY)&_ZN7S2214C33v48Ev,
  (VTBL_ENTRY)&_ZN7S2214C33v49Ev,
  (VTBL_ENTRY)&_ZN7S2214C33v50Ev,
  (VTBL_ENTRY)&_ZN7S2214C33v51Ev,
  (VTBL_ENTRY)&_ZN7S2214C33v52Ev,
  (VTBL_ENTRY)&_ZN7S2214C33v53Ev,
  (VTBL_ENTRY)&_ZN7S2214C33v54Ev,
  (VTBL_ENTRY)&_ZN7S2214C33v55Ev,
  (VTBL_ENTRY)&_ZN7S2214C33v56Ev,
  (VTBL_ENTRY)&_ZN7S2214C33v57Ev,
  (VTBL_ENTRY)&_ZN7S2214C33v58Ev,
  (VTBL_ENTRY)&_ZN7S2214C33v59Ev,
  (VTBL_ENTRY)&_ZN7S2214C33v60Ev,
  (VTBL_ENTRY)&_ZN7S2214C33v61Ev,
  (VTBL_ENTRY)&_ZN7S2214C33v62Ev,
  (VTBL_ENTRY)&_ZN7S2214C33v63Ev,
  (VTBL_ENTRY)&_ZN7S2214C33v64Ev,
  (VTBL_ENTRY)&_ZN7S2214C33v65Ev,
  (VTBL_ENTRY)&_ZN7S2214C33v66Ev,
  (VTBL_ENTRY)&_ZN7S2214C33v67Ev,
  (VTBL_ENTRY)&_ZN7S2214C33v68Ev,
  (VTBL_ENTRY)&_ZN7S2214C33v69Ev,
  (VTBL_ENTRY)&_ZN7S2214C33v70Ev,
  (VTBL_ENTRY)&_ZN7S2214C33v71Ev,
  (VTBL_ENTRY)&_ZN7S2214C33v72Ev,
  (VTBL_ENTRY)&_ZN7S2214C33v73Ev,
  (VTBL_ENTRY)&_ZN7S2214C33v74Ev,
  (VTBL_ENTRY)&_ZN7S2214C33v75Ev,
  (VTBL_ENTRY)&_ZN7S2214C33v76Ev,
  (VTBL_ENTRY)&_ZN7S2214C33v77Ev,
  (VTBL_ENTRY)&_ZN7S2214C33v78Ev,
  (VTBL_ENTRY)&_ZN7S2214C33v79Ev,
  (VTBL_ENTRY)&_ZN7S2214C33v80Ev,
  (VTBL_ENTRY)&_ZN7S2214C33v81Ev,
  (VTBL_ENTRY)&_ZN7S2214C33v82Ev,
  (VTBL_ENTRY)&_ZN7S2214C33v83Ev,
  (VTBL_ENTRY)&_ZN7S2214C33v84Ev,
  (VTBL_ENTRY)&_ZN7S2214C33v85Ev,
  (VTBL_ENTRY)&_ZN7S2214C33v86Ev,
  (VTBL_ENTRY)&_ZN7S2214C33v87Ev,
  (VTBL_ENTRY)&_ZN7S2214C33v88Ev,
  (VTBL_ENTRY)&_ZN7S2214C33v89Ev,
  (VTBL_ENTRY)&_ZN7S2214C33v90Ev,
  (VTBL_ENTRY)&_ZN7S2214C33v91Ev,
  (VTBL_ENTRY)&_ZN7S2214C33v92Ev,
  (VTBL_ENTRY)&_ZN7S2214C33v93Ev,
  (VTBL_ENTRY)&_ZN7S2214C33v94Ev,
  (VTBL_ENTRY)&_ZN7S2214C33v95Ev,
  (VTBL_ENTRY)&_ZN7S2214C33v96Ev,
  (VTBL_ENTRY)&_ZN7S2214C33v97Ev,
  (VTBL_ENTRY)&_ZN7S2214C33v98Ev,
  (VTBL_ENTRY)&_ZN7S2214C33v99Ev,
  (VTBL_ENTRY)&_ZN7S2214C34v100Ev,
  (VTBL_ENTRY)&_ZN7S2214C34v101Ev,
  (VTBL_ENTRY)&_ZN7S2214C34v102Ev,
  (VTBL_ENTRY)&_ZN7S2214C34v103Ev,
};
extern VTBL_ENTRY _ZTI7S2214C3[];
extern  VTBL_ENTRY _ZTV7S2214C3[];
Class_Descriptor cd_S2214C3 = {  "S2214C3", // class name
  bases_S2214C3, 1,
  &(vtc_S2214C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(832,632), // object size
  NSPAIRA(_ZTI7S2214C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2214C3),105, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2214C2_nt  : S2214C3 {
  void *s2214c2f0;
  virtual  ~S2214C2_nt(); // _ZN10S2214C2_ntD1Ev
  virtual void  v104(); // _ZN10S2214C2_nt4v104Ev
  virtual void  v105(); // _ZN10S2214C2_nt4v105Ev
  virtual void  v106(); // _ZN10S2214C2_nt4v106Ev
  virtual void  v107(); // _ZN10S2214C2_nt4v107Ev
  virtual void  v108(); // _ZN10S2214C2_nt4v108Ev
  virtual void  v109(); // _ZN10S2214C2_nt4v109Ev
  virtual void  v110(); // _ZN10S2214C2_nt4v110Ev
  virtual void  v111(); // _ZN10S2214C2_nt4v111Ev
  virtual void  v112(); // _ZN10S2214C2_nt4v112Ev
  virtual void  v113(); // _ZN10S2214C2_nt4v113Ev
  S2214C2_nt(); // tgen
};
//SIG(-1 S2214C2_nt) C1{ BC2{ BC3{ vd v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 Fp Fi FC4{ BC5{ m Fp Fi FC6{ m} FC7{ m}}} FC8{ BC9{ m Fp Fi FC10{ m} FC10}} Fi} vd v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 v110 v111 FC11{ m FC12{ m FL[2]}} FC11 FC11 FC13{ m FC12} FC14{ m FC11} FC15{ m FC11 FC11 FC11 FC11} FC15 FC11 FC11 FC11 Fp FC14 FC16{ m FC17{ m Fp Fi FC18{ m}} Fi} Fi Fp[7] FC5 Fi:8 Fi:8 Fi:16 Fi:16 Fi:8 Fi:8 Fi:8 Fi:32 Fi:8 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fi[7] Fp[6] Fi:8 Fi:8 Fi:8 Fi:8 Fi:8 Fi:8 FC19{ BC20{ m Fp Fi FC18 FC6}} Fp[4] Fi:8 Fi:8 Fi:8 Fi:8 Fi:8 Fi:16 Fi:16 Fi:16 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:8 Fi:8 Fi:8 Fp[7] FC21{ m Fp Fi[2] FC22{ m}} Fp[2] Fi:16 Fi:16 FC19 FC23{ m Fp Fi[2] FC7} FC24{ m Fp Fi[2] FC22} Fp[2] Fi:24 Fi:8 Fp} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 Fp}


 S2214C2_nt ::~S2214C2_nt(){ note_dtor("S2214C2_nt", this);}
void  S2214C2_nt ::v104(){vfunc_called(this, "_ZN10S2214C2_nt4v104Ev");}
void  S2214C2_nt ::v105(){vfunc_called(this, "_ZN10S2214C2_nt4v105Ev");}
void  S2214C2_nt ::v106(){vfunc_called(this, "_ZN10S2214C2_nt4v106Ev");}
void  S2214C2_nt ::v107(){vfunc_called(this, "_ZN10S2214C2_nt4v107Ev");}
void  S2214C2_nt ::v108(){vfunc_called(this, "_ZN10S2214C2_nt4v108Ev");}
void  S2214C2_nt ::v109(){vfunc_called(this, "_ZN10S2214C2_nt4v109Ev");}
void  S2214C2_nt ::v110(){vfunc_called(this, "_ZN10S2214C2_nt4v110Ev");}
void  S2214C2_nt ::v111(){vfunc_called(this, "_ZN10S2214C2_nt4v111Ev");}
void  S2214C2_nt ::v112(){vfunc_called(this, "_ZN10S2214C2_nt4v112Ev");}
void  S2214C2_nt ::v113(){vfunc_called(this, "_ZN10S2214C2_nt4v113Ev");}
S2214C2_nt ::S2214C2_nt(){ note_ctor("S2214C2_nt", this);} // tgen

//skip512 S2214C2_nt

#else // __cplusplus

extern void _ZN10S2214C2_ntC1Ev();
extern void _ZN10S2214C2_ntD1Ev();
Name_Map name_map_S2214C2_nt[] = {
  NSPAIR(_ZN10S2214C2_ntC1Ev),
  NSPAIR(_ZN10S2214C2_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2214C4;
extern VTBL_ENTRY _ZTI7S2214C4[];
extern  VTBL_ENTRY _ZTV7S2214C4[];
extern Class_Descriptor cd_S2214C3;
extern VTBL_ENTRY _ZTI7S2214C3[];
extern  VTBL_ENTRY _ZTV7S2214C3[];
static Base_Class bases_S2214C2_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2214C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S2214C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI10S2214C2_nt[];
extern void _ZN10S2214C2_ntD1Ev();
extern void _ZN10S2214C2_ntD0Ev();
extern void _ZN7S2214C42v3Ev();
extern void _ZN7S2214C42v4Ev();
extern void _ZN7S2214C42v5Ev();
extern void _ZN7S2214C42v6Ev();
extern void _ZN7S2214C42v7Ev();
extern void _ZN7S2214C42v8Ev();
extern void _ZN7S2214C42v9Ev();
extern void _ZN7S2214C43v10Ev();
extern void _ZN7S2214C43v11Ev();
extern void _ZN7S2214C43v12Ev();
extern void _ZN7S2214C43v13Ev();
extern void _ZN7S2214C43v14Ev();
extern void _ZN7S2214C43v15Ev();
extern void _ZN7S2214C43v16Ev();
extern void _ZN7S2214C43v17Ev();
extern void _ZN7S2214C43v18Ev();
extern void _ZN7S2214C43v19Ev();
extern void _ZN7S2214C43v20Ev();
extern void _ZN7S2214C43v21Ev();
extern void _ZN7S2214C43v22Ev();
extern void _ZN7S2214C43v23Ev();
extern void _ZN7S2214C43v24Ev();
extern void _ZN7S2214C43v25Ev();
extern void _ZN7S2214C33v26Ev();
extern void _ZN7S2214C33v27Ev();
extern void _ZN7S2214C33v28Ev();
extern void _ZN7S2214C33v29Ev();
extern void _ZN7S2214C33v30Ev();
extern void _ZN7S2214C33v31Ev();
extern void _ZN7S2214C33v32Ev();
extern void _ZN7S2214C33v33Ev();
extern void _ZN7S2214C33v34Ev();
extern void _ZN7S2214C33v35Ev();
extern void _ZN7S2214C33v36Ev();
extern void _ZN7S2214C33v37Ev();
extern void _ZN7S2214C33v38Ev();
extern void _ZN7S2214C33v39Ev();
extern void _ZN7S2214C33v40Ev();
extern void _ZN7S2214C33v41Ev();
extern void _ZN7S2214C33v42Ev();
extern void _ZN7S2214C33v43Ev();
extern void _ZN7S2214C33v44Ev();
extern void _ZN7S2214C33v45Ev();
extern void _ZN7S2214C33v46Ev();
extern void _ZN7S2214C33v47Ev();
extern void _ZN7S2214C33v48Ev();
extern void _ZN7S2214C33v49Ev();
extern void _ZN7S2214C33v50Ev();
extern void _ZN7S2214C33v51Ev();
extern void _ZN7S2214C33v52Ev();
extern void _ZN7S2214C33v53Ev();
extern void _ZN7S2214C33v54Ev();
extern void _ZN7S2214C33v55Ev();
extern void _ZN7S2214C33v56Ev();
extern void _ZN7S2214C33v57Ev();
extern void _ZN7S2214C33v58Ev();
extern void _ZN7S2214C33v59Ev();
extern void _ZN7S2214C33v60Ev();
extern void _ZN7S2214C33v61Ev();
extern void _ZN7S2214C33v62Ev();
extern void _ZN7S2214C33v63Ev();
extern void _ZN7S2214C33v64Ev();
extern void _ZN7S2214C33v65Ev();
extern void _ZN7S2214C33v66Ev();
extern void _ZN7S2214C33v67Ev();
extern void _ZN7S2214C33v68Ev();
extern void _ZN7S2214C33v69Ev();
extern void _ZN7S2214C33v70Ev();
extern void _ZN7S2214C33v71Ev();
extern void _ZN7S2214C33v72Ev();
extern void _ZN7S2214C33v73Ev();
extern void _ZN7S2214C33v74Ev();
extern void _ZN7S2214C33v75Ev();
extern void _ZN7S2214C33v76Ev();
extern void _ZN7S2214C33v77Ev();
extern void _ZN7S2214C33v78Ev();
extern void _ZN7S2214C33v79Ev();
extern void _ZN7S2214C33v80Ev();
extern void _ZN7S2214C33v81Ev();
extern void _ZN7S2214C33v82Ev();
extern void _ZN7S2214C33v83Ev();
extern void _ZN7S2214C33v84Ev();
extern void _ZN7S2214C33v85Ev();
extern void _ZN7S2214C33v86Ev();
extern void _ZN7S2214C33v87Ev();
extern void _ZN7S2214C33v88Ev();
extern void _ZN7S2214C33v89Ev();
extern void _ZN7S2214C33v90Ev();
extern void _ZN7S2214C33v91Ev();
extern void _ZN7S2214C33v92Ev();
extern void _ZN7S2214C33v93Ev();
extern void _ZN7S2214C33v94Ev();
extern void _ZN7S2214C33v95Ev();
extern void _ZN7S2214C33v96Ev();
extern void _ZN7S2214C33v97Ev();
extern void _ZN7S2214C33v98Ev();
extern void _ZN7S2214C33v99Ev();
extern void _ZN7S2214C34v100Ev();
extern void _ZN7S2214C34v101Ev();
extern void _ZN7S2214C34v102Ev();
extern void _ZN7S2214C34v103Ev();
extern void _ZN10S2214C2_nt4v104Ev();
extern void _ZN10S2214C2_nt4v105Ev();
extern void _ZN10S2214C2_nt4v106Ev();
extern void _ZN10S2214C2_nt4v107Ev();
extern void _ZN10S2214C2_nt4v108Ev();
extern void _ZN10S2214C2_nt4v109Ev();
extern void _ZN10S2214C2_nt4v110Ev();
extern void _ZN10S2214C2_nt4v111Ev();
extern void _ZN10S2214C2_nt4v112Ev();
extern void _ZN10S2214C2_nt4v113Ev();
static  VTBL_ENTRY vtc_S2214C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S2214C2_nt[0]),
  (VTBL_ENTRY)&_ZN10S2214C2_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S2214C2_ntD0Ev,
  (VTBL_ENTRY)&_ZN7S2214C42v3Ev,
  (VTBL_ENTRY)&_ZN7S2214C42v4Ev,
  (VTBL_ENTRY)&_ZN7S2214C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2214C42v6Ev,
  (VTBL_ENTRY)&_ZN7S2214C42v7Ev,
  (VTBL_ENTRY)&_ZN7S2214C42v8Ev,
  (VTBL_ENTRY)&_ZN7S2214C42v9Ev,
  (VTBL_ENTRY)&_ZN7S2214C43v10Ev,
  (VTBL_ENTRY)&_ZN7S2214C43v11Ev,
  (VTBL_ENTRY)&_ZN7S2214C43v12Ev,
  (VTBL_ENTRY)&_ZN7S2214C43v13Ev,
  (VTBL_ENTRY)&_ZN7S2214C43v14Ev,
  (VTBL_ENTRY)&_ZN7S2214C43v15Ev,
  (VTBL_ENTRY)&_ZN7S2214C43v16Ev,
  (VTBL_ENTRY)&_ZN7S2214C43v17Ev,
  (VTBL_ENTRY)&_ZN7S2214C43v18Ev,
  (VTBL_ENTRY)&_ZN7S2214C43v19Ev,
  (VTBL_ENTRY)&_ZN7S2214C43v20Ev,
  (VTBL_ENTRY)&_ZN7S2214C43v21Ev,
  (VTBL_ENTRY)&_ZN7S2214C43v22Ev,
  (VTBL_ENTRY)&_ZN7S2214C43v23Ev,
  (VTBL_ENTRY)&_ZN7S2214C43v24Ev,
  (VTBL_ENTRY)&_ZN7S2214C43v25Ev,
  (VTBL_ENTRY)&_ZN7S2214C33v26Ev,
  (VTBL_ENTRY)&_ZN7S2214C33v27Ev,
  (VTBL_ENTRY)&_ZN7S2214C33v28Ev,
  (VTBL_ENTRY)&_ZN7S2214C33v29Ev,
  (VTBL_ENTRY)&_ZN7S2214C33v30Ev,
  (VTBL_ENTRY)&_ZN7S2214C33v31Ev,
  (VTBL_ENTRY)&_ZN7S2214C33v32Ev,
  (VTBL_ENTRY)&_ZN7S2214C33v33Ev,
  (VTBL_ENTRY)&_ZN7S2214C33v34Ev,
  (VTBL_ENTRY)&_ZN7S2214C33v35Ev,
  (VTBL_ENTRY)&_ZN7S2214C33v36Ev,
  (VTBL_ENTRY)&_ZN7S2214C33v37Ev,
  (VTBL_ENTRY)&_ZN7S2214C33v38Ev,
  (VTBL_ENTRY)&_ZN7S2214C33v39Ev,
  (VTBL_ENTRY)&_ZN7S2214C33v40Ev,
  (VTBL_ENTRY)&_ZN7S2214C33v41Ev,
  (VTBL_ENTRY)&_ZN7S2214C33v42Ev,
  (VTBL_ENTRY)&_ZN7S2214C33v43Ev,
  (VTBL_ENTRY)&_ZN7S2214C33v44Ev,
  (VTBL_ENTRY)&_ZN7S2214C33v45Ev,
  (VTBL_ENTRY)&_ZN7S2214C33v46Ev,
  (VTBL_ENTRY)&_ZN7S2214C33v47Ev,
  (VTBL_ENTRY)&_ZN7S2214C33v48Ev,
  (VTBL_ENTRY)&_ZN7S2214C33v49Ev,
  (VTBL_ENTRY)&_ZN7S2214C33v50Ev,
  (VTBL_ENTRY)&_ZN7S2214C33v51Ev,
  (VTBL_ENTRY)&_ZN7S2214C33v52Ev,
  (VTBL_ENTRY)&_ZN7S2214C33v53Ev,
  (VTBL_ENTRY)&_ZN7S2214C33v54Ev,
  (VTBL_ENTRY)&_ZN7S2214C33v55Ev,
  (VTBL_ENTRY)&_ZN7S2214C33v56Ev,
  (VTBL_ENTRY)&_ZN7S2214C33v57Ev,
  (VTBL_ENTRY)&_ZN7S2214C33v58Ev,
  (VTBL_ENTRY)&_ZN7S2214C33v59Ev,
  (VTBL_ENTRY)&_ZN7S2214C33v60Ev,
  (VTBL_ENTRY)&_ZN7S2214C33v61Ev,
  (VTBL_ENTRY)&_ZN7S2214C33v62Ev,
  (VTBL_ENTRY)&_ZN7S2214C33v63Ev,
  (VTBL_ENTRY)&_ZN7S2214C33v64Ev,
  (VTBL_ENTRY)&_ZN7S2214C33v65Ev,
  (VTBL_ENTRY)&_ZN7S2214C33v66Ev,
  (VTBL_ENTRY)&_ZN7S2214C33v67Ev,
  (VTBL_ENTRY)&_ZN7S2214C33v68Ev,
  (VTBL_ENTRY)&_ZN7S2214C33v69Ev,
  (VTBL_ENTRY)&_ZN7S2214C33v70Ev,
  (VTBL_ENTRY)&_ZN7S2214C33v71Ev,
  (VTBL_ENTRY)&_ZN7S2214C33v72Ev,
  (VTBL_ENTRY)&_ZN7S2214C33v73Ev,
  (VTBL_ENTRY)&_ZN7S2214C33v74Ev,
  (VTBL_ENTRY)&_ZN7S2214C33v75Ev,
  (VTBL_ENTRY)&_ZN7S2214C33v76Ev,
  (VTBL_ENTRY)&_ZN7S2214C33v77Ev,
  (VTBL_ENTRY)&_ZN7S2214C33v78Ev,
  (VTBL_ENTRY)&_ZN7S2214C33v79Ev,
  (VTBL_ENTRY)&_ZN7S2214C33v80Ev,
  (VTBL_ENTRY)&_ZN7S2214C33v81Ev,
  (VTBL_ENTRY)&_ZN7S2214C33v82Ev,
  (VTBL_ENTRY)&_ZN7S2214C33v83Ev,
  (VTBL_ENTRY)&_ZN7S2214C33v84Ev,
  (VTBL_ENTRY)&_ZN7S2214C33v85Ev,
  (VTBL_ENTRY)&_ZN7S2214C33v86Ev,
  (VTBL_ENTRY)&_ZN7S2214C33v87Ev,
  (VTBL_ENTRY)&_ZN7S2214C33v88Ev,
  (VTBL_ENTRY)&_ZN7S2214C33v89Ev,
  (VTBL_ENTRY)&_ZN7S2214C33v90Ev,
  (VTBL_ENTRY)&_ZN7S2214C33v91Ev,
  (VTBL_ENTRY)&_ZN7S2214C33v92Ev,
  (VTBL_ENTRY)&_ZN7S2214C33v93Ev,
  (VTBL_ENTRY)&_ZN7S2214C33v94Ev,
  (VTBL_ENTRY)&_ZN7S2214C33v95Ev,
  (VTBL_ENTRY)&_ZN7S2214C33v96Ev,
  (VTBL_ENTRY)&_ZN7S2214C33v97Ev,
  (VTBL_ENTRY)&_ZN7S2214C33v98Ev,
  (VTBL_ENTRY)&_ZN7S2214C33v99Ev,
  (VTBL_ENTRY)&_ZN7S2214C34v100Ev,
  (VTBL_ENTRY)&_ZN7S2214C34v101Ev,
  (VTBL_ENTRY)&_ZN7S2214C34v102Ev,
  (VTBL_ENTRY)&_ZN7S2214C34v103Ev,
  (VTBL_ENTRY)&_ZN10S2214C2_nt4v104Ev,
  (VTBL_ENTRY)&_ZN10S2214C2_nt4v105Ev,
  (VTBL_ENTRY)&_ZN10S2214C2_nt4v106Ev,
  (VTBL_ENTRY)&_ZN10S2214C2_nt4v107Ev,
  (VTBL_ENTRY)&_ZN10S2214C2_nt4v108Ev,
  (VTBL_ENTRY)&_ZN10S2214C2_nt4v109Ev,
  (VTBL_ENTRY)&_ZN10S2214C2_nt4v110Ev,
  (VTBL_ENTRY)&_ZN10S2214C2_nt4v111Ev,
  (VTBL_ENTRY)&_ZN10S2214C2_nt4v112Ev,
  (VTBL_ENTRY)&_ZN10S2214C2_nt4v113Ev,
};
extern VTBL_ENTRY _ZTI10S2214C2_nt[];
VTBL_ENTRY *P__ZTI10S2214C2_nt = _ZTI10S2214C2_nt; 
extern  VTBL_ENTRY _ZTV10S2214C2_nt[];
Class_Descriptor cd_S2214C2_nt = {  "S2214C2_nt", // class name
  bases_S2214C2_nt, 2,
  &(vtc_S2214C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(840,636), // object size
  NSPAIRA(_ZTI10S2214C2_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV10S2214C2_nt),115, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2214C39_nt  {
  void *s2214c39f0;
  void  mf2214c39(); // _ZN11S2214C39_nt9mf2214c39Ev
};
//SIG(-1 S2214C39_nt) C1{ m Fp}


void  S2214C39_nt ::mf2214c39(){}

//skip512 S2214C39_nt

#else // __cplusplus

Class_Descriptor cd_S2214C39_nt = {  "S2214C39_nt", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  ABISELECT(8,4), // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2214C1  : S2214C2_nt {
  void *s2214c1f0;
  ::S2214C39_nt s2214c1f1;
  virtual  ~S2214C1(); // _ZN7S2214C1D1Ev
  virtual void  v1(); // _ZN7S2214C12v1Ev
  virtual void  v2(); // _ZN7S2214C12v2Ev
  S2214C1(); // tgen
};
//SIG(1 S2214C1) C1{ BC2{ BC3{ BC4{ vd v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 Fp Fi FC5{ BC6{ m Fp Fi FC7{ m} FC8{ m}}} FC9{ BC10{ m Fp Fi FC11{ m} FC11}} Fi} vd v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 FC12{ m FC13{ m FL[2]}} FC12 FC12 FC14{ m FC13} FC15{ m FC12} FC16{ m FC12 FC12 FC12 FC12} FC16 FC12 FC12 FC12 Fp FC15 FC17{ m FC18{ m Fp Fi FC19{ m}} Fi} Fi Fp[7] FC6 Fi:8 Fi:8 Fi:16 Fi:16 Fi:8 Fi:8 Fi:8 Fi:32 Fi:8 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fi[7] Fp[6] Fi:8 Fi:8 Fi:8 Fi:8 Fi:8 Fi:8 FC20{ BC21{ m Fp Fi FC19 FC7}} Fp[4] Fi:8 Fi:8 Fi:8 Fi:8 Fi:8 Fi:16 Fi:16 Fi:16 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:8 Fi:8 Fi:8 Fp[7] FC22{ m Fp Fi[2] FC23{ m}} Fp[2] Fi:16 Fi:16 FC20 FC24{ m Fp Fi[2] FC8} FC25{ m Fp Fi[2] FC23} Fp[2] Fi:24 Fi:8 Fp} vd v104 v105 v106 v107 v108 v109 v110 v111 v112 v113 Fp} vd v1 v2 Fp FC26{ m Fp}}


 S2214C1 ::~S2214C1(){ note_dtor("S2214C1", this);}
void  S2214C1 ::v1(){vfunc_called(this, "_ZN7S2214C12v1Ev");}
void  S2214C1 ::v2(){vfunc_called(this, "_ZN7S2214C12v2Ev");}
S2214C1 ::S2214C1(){ note_ctor("S2214C1", this);} // tgen

static void Test_S2214C1()
{
  extern Class_Descriptor cd_S2214C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(108,162)];
    init_test(&cd_S2214C1, buf);
    S2214C1 *dp, &lv = *(dp=new (buf) S2214C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(856,644), "sizeof(S2214C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2214C1)");
    check_base_class_offset(lv, (S2214C4*)(S2214C3*)(S2214C2_nt*), 0, "S2214C1");
    check_base_class_offset(lv, (S2214C3*)(S2214C2_nt*), 0, "S2214C1");
    check_base_class_offset(lv, (S2214C2_nt*), 0, "S2214C1");
    check_field_offset(lv, s2214c1f0, ABISELECT(840,636), "S2214C1.s2214c1f0");
    check_field_offset(lv, s2214c1f1, ABISELECT(848,640), "S2214C1.s2214c1f1");
    test_class_info(&lv, &cd_S2214C1);
    dp->~S2214C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2214C1(Test_S2214C1, "S2214C1", ABISELECT(856,644));

#else // __cplusplus

extern void _ZN7S2214C1C1Ev();
extern void _ZN7S2214C1D1Ev();
Name_Map name_map_S2214C1[] = {
  NSPAIR(_ZN7S2214C1C1Ev),
  NSPAIR(_ZN7S2214C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2214C4;
extern VTBL_ENTRY _ZTI7S2214C4[];
extern  VTBL_ENTRY _ZTV7S2214C4[];
extern Class_Descriptor cd_S2214C3;
extern VTBL_ENTRY _ZTI7S2214C3[];
extern  VTBL_ENTRY _ZTV7S2214C3[];
extern Class_Descriptor cd_S2214C2_nt;
extern VTBL_ENTRY _ZTI10S2214C2_nt[];
extern  VTBL_ENTRY _ZTV10S2214C2_nt[];
static Base_Class bases_S2214C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2214C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S2214C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S2214C2_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S2214C1[];
extern void _ZN7S2214C1D1Ev();
extern void _ZN7S2214C1D0Ev();
extern void _ZN7S2214C42v3Ev();
extern void _ZN7S2214C42v4Ev();
extern void _ZN7S2214C42v5Ev();
extern void _ZN7S2214C42v6Ev();
extern void _ZN7S2214C42v7Ev();
extern void _ZN7S2214C42v8Ev();
extern void _ZN7S2214C42v9Ev();
extern void _ZN7S2214C43v10Ev();
extern void _ZN7S2214C43v11Ev();
extern void _ZN7S2214C43v12Ev();
extern void _ZN7S2214C43v13Ev();
extern void _ZN7S2214C43v14Ev();
extern void _ZN7S2214C43v15Ev();
extern void _ZN7S2214C43v16Ev();
extern void _ZN7S2214C43v17Ev();
extern void _ZN7S2214C43v18Ev();
extern void _ZN7S2214C43v19Ev();
extern void _ZN7S2214C43v20Ev();
extern void _ZN7S2214C43v21Ev();
extern void _ZN7S2214C43v22Ev();
extern void _ZN7S2214C43v23Ev();
extern void _ZN7S2214C43v24Ev();
extern void _ZN7S2214C43v25Ev();
extern void _ZN7S2214C33v26Ev();
extern void _ZN7S2214C33v27Ev();
extern void _ZN7S2214C33v28Ev();
extern void _ZN7S2214C33v29Ev();
extern void _ZN7S2214C33v30Ev();
extern void _ZN7S2214C33v31Ev();
extern void _ZN7S2214C33v32Ev();
extern void _ZN7S2214C33v33Ev();
extern void _ZN7S2214C33v34Ev();
extern void _ZN7S2214C33v35Ev();
extern void _ZN7S2214C33v36Ev();
extern void _ZN7S2214C33v37Ev();
extern void _ZN7S2214C33v38Ev();
extern void _ZN7S2214C33v39Ev();
extern void _ZN7S2214C33v40Ev();
extern void _ZN7S2214C33v41Ev();
extern void _ZN7S2214C33v42Ev();
extern void _ZN7S2214C33v43Ev();
extern void _ZN7S2214C33v44Ev();
extern void _ZN7S2214C33v45Ev();
extern void _ZN7S2214C33v46Ev();
extern void _ZN7S2214C33v47Ev();
extern void _ZN7S2214C33v48Ev();
extern void _ZN7S2214C33v49Ev();
extern void _ZN7S2214C33v50Ev();
extern void _ZN7S2214C33v51Ev();
extern void _ZN7S2214C33v52Ev();
extern void _ZN7S2214C33v53Ev();
extern void _ZN7S2214C33v54Ev();
extern void _ZN7S2214C33v55Ev();
extern void _ZN7S2214C33v56Ev();
extern void _ZN7S2214C33v57Ev();
extern void _ZN7S2214C33v58Ev();
extern void _ZN7S2214C33v59Ev();
extern void _ZN7S2214C33v60Ev();
extern void _ZN7S2214C33v61Ev();
extern void _ZN7S2214C33v62Ev();
extern void _ZN7S2214C33v63Ev();
extern void _ZN7S2214C33v64Ev();
extern void _ZN7S2214C33v65Ev();
extern void _ZN7S2214C33v66Ev();
extern void _ZN7S2214C33v67Ev();
extern void _ZN7S2214C33v68Ev();
extern void _ZN7S2214C33v69Ev();
extern void _ZN7S2214C33v70Ev();
extern void _ZN7S2214C33v71Ev();
extern void _ZN7S2214C33v72Ev();
extern void _ZN7S2214C33v73Ev();
extern void _ZN7S2214C33v74Ev();
extern void _ZN7S2214C33v75Ev();
extern void _ZN7S2214C33v76Ev();
extern void _ZN7S2214C33v77Ev();
extern void _ZN7S2214C33v78Ev();
extern void _ZN7S2214C33v79Ev();
extern void _ZN7S2214C33v80Ev();
extern void _ZN7S2214C33v81Ev();
extern void _ZN7S2214C33v82Ev();
extern void _ZN7S2214C33v83Ev();
extern void _ZN7S2214C33v84Ev();
extern void _ZN7S2214C33v85Ev();
extern void _ZN7S2214C33v86Ev();
extern void _ZN7S2214C33v87Ev();
extern void _ZN7S2214C33v88Ev();
extern void _ZN7S2214C33v89Ev();
extern void _ZN7S2214C33v90Ev();
extern void _ZN7S2214C33v91Ev();
extern void _ZN7S2214C33v92Ev();
extern void _ZN7S2214C33v93Ev();
extern void _ZN7S2214C33v94Ev();
extern void _ZN7S2214C33v95Ev();
extern void _ZN7S2214C33v96Ev();
extern void _ZN7S2214C33v97Ev();
extern void _ZN7S2214C33v98Ev();
extern void _ZN7S2214C33v99Ev();
extern void _ZN7S2214C34v100Ev();
extern void _ZN7S2214C34v101Ev();
extern void _ZN7S2214C34v102Ev();
extern void _ZN7S2214C34v103Ev();
extern void _ZN10S2214C2_nt4v104Ev();
extern void _ZN10S2214C2_nt4v105Ev();
extern void _ZN10S2214C2_nt4v106Ev();
extern void _ZN10S2214C2_nt4v107Ev();
extern void _ZN10S2214C2_nt4v108Ev();
extern void _ZN10S2214C2_nt4v109Ev();
extern void _ZN10S2214C2_nt4v110Ev();
extern void _ZN10S2214C2_nt4v111Ev();
extern void _ZN10S2214C2_nt4v112Ev();
extern void _ZN10S2214C2_nt4v113Ev();
extern void _ZN7S2214C12v1Ev();
extern void _ZN7S2214C12v2Ev();
static  VTBL_ENTRY vtc_S2214C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2214C1[0]),
  (VTBL_ENTRY)&_ZN7S2214C1D1Ev,
  (VTBL_ENTRY)&_ZN7S2214C1D0Ev,
  (VTBL_ENTRY)&_ZN7S2214C42v3Ev,
  (VTBL_ENTRY)&_ZN7S2214C42v4Ev,
  (VTBL_ENTRY)&_ZN7S2214C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2214C42v6Ev,
  (VTBL_ENTRY)&_ZN7S2214C42v7Ev,
  (VTBL_ENTRY)&_ZN7S2214C42v8Ev,
  (VTBL_ENTRY)&_ZN7S2214C42v9Ev,
  (VTBL_ENTRY)&_ZN7S2214C43v10Ev,
  (VTBL_ENTRY)&_ZN7S2214C43v11Ev,
  (VTBL_ENTRY)&_ZN7S2214C43v12Ev,
  (VTBL_ENTRY)&_ZN7S2214C43v13Ev,
  (VTBL_ENTRY)&_ZN7S2214C43v14Ev,
  (VTBL_ENTRY)&_ZN7S2214C43v15Ev,
  (VTBL_ENTRY)&_ZN7S2214C43v16Ev,
  (VTBL_ENTRY)&_ZN7S2214C43v17Ev,
  (VTBL_ENTRY)&_ZN7S2214C43v18Ev,
  (VTBL_ENTRY)&_ZN7S2214C43v19Ev,
  (VTBL_ENTRY)&_ZN7S2214C43v20Ev,
  (VTBL_ENTRY)&_ZN7S2214C43v21Ev,
  (VTBL_ENTRY)&_ZN7S2214C43v22Ev,
  (VTBL_ENTRY)&_ZN7S2214C43v23Ev,
  (VTBL_ENTRY)&_ZN7S2214C43v24Ev,
  (VTBL_ENTRY)&_ZN7S2214C43v25Ev,
  (VTBL_ENTRY)&_ZN7S2214C33v26Ev,
  (VTBL_ENTRY)&_ZN7S2214C33v27Ev,
  (VTBL_ENTRY)&_ZN7S2214C33v28Ev,
  (VTBL_ENTRY)&_ZN7S2214C33v29Ev,
  (VTBL_ENTRY)&_ZN7S2214C33v30Ev,
  (VTBL_ENTRY)&_ZN7S2214C33v31Ev,
  (VTBL_ENTRY)&_ZN7S2214C33v32Ev,
  (VTBL_ENTRY)&_ZN7S2214C33v33Ev,
  (VTBL_ENTRY)&_ZN7S2214C33v34Ev,
  (VTBL_ENTRY)&_ZN7S2214C33v35Ev,
  (VTBL_ENTRY)&_ZN7S2214C33v36Ev,
  (VTBL_ENTRY)&_ZN7S2214C33v37Ev,
  (VTBL_ENTRY)&_ZN7S2214C33v38Ev,
  (VTBL_ENTRY)&_ZN7S2214C33v39Ev,
  (VTBL_ENTRY)&_ZN7S2214C33v40Ev,
  (VTBL_ENTRY)&_ZN7S2214C33v41Ev,
  (VTBL_ENTRY)&_ZN7S2214C33v42Ev,
  (VTBL_ENTRY)&_ZN7S2214C33v43Ev,
  (VTBL_ENTRY)&_ZN7S2214C33v44Ev,
  (VTBL_ENTRY)&_ZN7S2214C33v45Ev,
  (VTBL_ENTRY)&_ZN7S2214C33v46Ev,
  (VTBL_ENTRY)&_ZN7S2214C33v47Ev,
  (VTBL_ENTRY)&_ZN7S2214C33v48Ev,
  (VTBL_ENTRY)&_ZN7S2214C33v49Ev,
  (VTBL_ENTRY)&_ZN7S2214C33v50Ev,
  (VTBL_ENTRY)&_ZN7S2214C33v51Ev,
  (VTBL_ENTRY)&_ZN7S2214C33v52Ev,
  (VTBL_ENTRY)&_ZN7S2214C33v53Ev,
  (VTBL_ENTRY)&_ZN7S2214C33v54Ev,
  (VTBL_ENTRY)&_ZN7S2214C33v55Ev,
  (VTBL_ENTRY)&_ZN7S2214C33v56Ev,
  (VTBL_ENTRY)&_ZN7S2214C33v57Ev,
  (VTBL_ENTRY)&_ZN7S2214C33v58Ev,
  (VTBL_ENTRY)&_ZN7S2214C33v59Ev,
  (VTBL_ENTRY)&_ZN7S2214C33v60Ev,
  (VTBL_ENTRY)&_ZN7S2214C33v61Ev,
  (VTBL_ENTRY)&_ZN7S2214C33v62Ev,
  (VTBL_ENTRY)&_ZN7S2214C33v63Ev,
  (VTBL_ENTRY)&_ZN7S2214C33v64Ev,
  (VTBL_ENTRY)&_ZN7S2214C33v65Ev,
  (VTBL_ENTRY)&_ZN7S2214C33v66Ev,
  (VTBL_ENTRY)&_ZN7S2214C33v67Ev,
  (VTBL_ENTRY)&_ZN7S2214C33v68Ev,
  (VTBL_ENTRY)&_ZN7S2214C33v69Ev,
  (VTBL_ENTRY)&_ZN7S2214C33v70Ev,
  (VTBL_ENTRY)&_ZN7S2214C33v71Ev,
  (VTBL_ENTRY)&_ZN7S2214C33v72Ev,
  (VTBL_ENTRY)&_ZN7S2214C33v73Ev,
  (VTBL_ENTRY)&_ZN7S2214C33v74Ev,
  (VTBL_ENTRY)&_ZN7S2214C33v75Ev,
  (VTBL_ENTRY)&_ZN7S2214C33v76Ev,
  (VTBL_ENTRY)&_ZN7S2214C33v77Ev,
  (VTBL_ENTRY)&_ZN7S2214C33v78Ev,
  (VTBL_ENTRY)&_ZN7S2214C33v79Ev,
  (VTBL_ENTRY)&_ZN7S2214C33v80Ev,
  (VTBL_ENTRY)&_ZN7S2214C33v81Ev,
  (VTBL_ENTRY)&_ZN7S2214C33v82Ev,
  (VTBL_ENTRY)&_ZN7S2214C33v83Ev,
  (VTBL_ENTRY)&_ZN7S2214C33v84Ev,
  (VTBL_ENTRY)&_ZN7S2214C33v85Ev,
  (VTBL_ENTRY)&_ZN7S2214C33v86Ev,
  (VTBL_ENTRY)&_ZN7S2214C33v87Ev,
  (VTBL_ENTRY)&_ZN7S2214C33v88Ev,
  (VTBL_ENTRY)&_ZN7S2214C33v89Ev,
  (VTBL_ENTRY)&_ZN7S2214C33v90Ev,
  (VTBL_ENTRY)&_ZN7S2214C33v91Ev,
  (VTBL_ENTRY)&_ZN7S2214C33v92Ev,
  (VTBL_ENTRY)&_ZN7S2214C33v93Ev,
  (VTBL_ENTRY)&_ZN7S2214C33v94Ev,
  (VTBL_ENTRY)&_ZN7S2214C33v95Ev,
  (VTBL_ENTRY)&_ZN7S2214C33v96Ev,
  (VTBL_ENTRY)&_ZN7S2214C33v97Ev,
  (VTBL_ENTRY)&_ZN7S2214C33v98Ev,
  (VTBL_ENTRY)&_ZN7S2214C33v99Ev,
  (VTBL_ENTRY)&_ZN7S2214C34v100Ev,
  (VTBL_ENTRY)&_ZN7S2214C34v101Ev,
  (VTBL_ENTRY)&_ZN7S2214C34v102Ev,
  (VTBL_ENTRY)&_ZN7S2214C34v103Ev,
  (VTBL_ENTRY)&_ZN10S2214C2_nt4v104Ev,
  (VTBL_ENTRY)&_ZN10S2214C2_nt4v105Ev,
  (VTBL_ENTRY)&_ZN10S2214C2_nt4v106Ev,
  (VTBL_ENTRY)&_ZN10S2214C2_nt4v107Ev,
  (VTBL_ENTRY)&_ZN10S2214C2_nt4v108Ev,
  (VTBL_ENTRY)&_ZN10S2214C2_nt4v109Ev,
  (VTBL_ENTRY)&_ZN10S2214C2_nt4v110Ev,
  (VTBL_ENTRY)&_ZN10S2214C2_nt4v111Ev,
  (VTBL_ENTRY)&_ZN10S2214C2_nt4v112Ev,
  (VTBL_ENTRY)&_ZN10S2214C2_nt4v113Ev,
  (VTBL_ENTRY)&_ZN7S2214C12v1Ev,
  (VTBL_ENTRY)&_ZN7S2214C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S2214C1[];
extern  VTBL_ENTRY _ZTV7S2214C1[];
Class_Descriptor cd_S2214C1 = {  "S2214C1", // class name
  bases_S2214C1, 3,
  &(vtc_S2214C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(856,644), // object size
  NSPAIRA(_ZTI7S2214C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2214C1),117, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S235C7_nt  {
  int s235c7f0[2];
  void  mf235c7(); // _ZN9S235C7_nt7mf235c7Ev
};
//SIG(-1 S235C7_nt) C1{ m Fi[2]}


void  S235C7_nt ::mf235c7(){}

//skip512 S235C7_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S235C6_nt  {
  int s235c6f0;
  __tsi64 s235c6f1;
  void *s235c6f2[4];
  int s235c6f3[2];
  void *s235c6f4;
  ::S235C7_nt s235c6f5;
  void *s235c6f6[2];
  virtual  ~S235C6_nt(); // _ZN9S235C6_ntD1Ev
  virtual void  v5(); // _ZN9S235C6_nt2v5Ev
  virtual void  v6(); // _ZN9S235C6_nt2v6Ev
  virtual void  v7(); // _ZN9S235C6_nt2v7Ev
  virtual void  v8(); // _ZN9S235C6_nt2v8Ev
  virtual void  v9(); // _ZN9S235C6_nt2v9Ev
  virtual void  v10(); // _ZN9S235C6_nt3v10Ev
  virtual void  v11(); // _ZN9S235C6_nt3v11Ev
  virtual void  v12(); // _ZN9S235C6_nt3v12Ev
  virtual void  v13(); // _ZN9S235C6_nt3v13Ev
  virtual void  v14(); // _ZN9S235C6_nt3v14Ev
  virtual void  v15(); // _ZN9S235C6_nt3v15Ev
  virtual void  v16(); // _ZN9S235C6_nt3v16Ev
  virtual void  v17(); // _ZN9S235C6_nt3v17Ev
  virtual void  v18(); // _ZN9S235C6_nt3v18Ev
  virtual void  v19(); // _ZN9S235C6_nt3v19Ev
  virtual void  v20(); // _ZN9S235C6_nt3v20Ev
  virtual void  v21(); // _ZN9S235C6_nt3v21Ev
  virtual void  v22(); // _ZN9S235C6_nt3v22Ev
  virtual void  v23(); // _ZN9S235C6_nt3v23Ev
  virtual void  v24(); // _ZN9S235C6_nt3v24Ev
  virtual void  v25(); // _ZN9S235C6_nt3v25Ev
  virtual void  v26(); // _ZN9S235C6_nt3v26Ev
  virtual void  v27(); // _ZN9S235C6_nt3v27Ev
  virtual void  v28(); // _ZN9S235C6_nt3v28Ev
  virtual void  v29(); // _ZN9S235C6_nt3v29Ev
  virtual void  v30(); // _ZN9S235C6_nt3v30Ev
  virtual void  v31(); // _ZN9S235C6_nt3v31Ev
  virtual void  v32(); // _ZN9S235C6_nt3v32Ev
  virtual void  v33(); // _ZN9S235C6_nt3v33Ev
  virtual void  v34(); // _ZN9S235C6_nt3v34Ev
  virtual void  v35(); // _ZN9S235C6_nt3v35Ev
  virtual void  v36(); // _ZN9S235C6_nt3v36Ev
  virtual void  v37(); // _ZN9S235C6_nt3v37Ev
  virtual void  v38(); // _ZN9S235C6_nt3v38Ev
  virtual void  v39(); // _ZN9S235C6_nt3v39Ev
  virtual void  v40(); // _ZN9S235C6_nt3v40Ev
  virtual void  v41(); // _ZN9S235C6_nt3v41Ev
  virtual void  v42(); // _ZN9S235C6_nt3v42Ev
  virtual void  v43(); // _ZN9S235C6_nt3v43Ev
  virtual void  v44(); // _ZN9S235C6_nt3v44Ev
  virtual void  v45(); // _ZN9S235C6_nt3v45Ev
  virtual void  v46(); // _ZN9S235C6_nt3v46Ev
  virtual void  v47(); // _ZN9S235C6_nt3v47Ev
  virtual void  v48(); // _ZN9S235C6_nt3v48Ev
  virtual void  v49(); // _ZN9S235C6_nt3v49Ev
  virtual void  v50(); // _ZN9S235C6_nt3v50Ev
  virtual void  v51(); // _ZN9S235C6_nt3v51Ev
  virtual void  v52(); // _ZN9S235C6_nt3v52Ev
  virtual void  v53(); // _ZN9S235C6_nt3v53Ev
  virtual void  v54(); // _ZN9S235C6_nt3v54Ev
  virtual void  v55(); // _ZN9S235C6_nt3v55Ev
  virtual void  v56(); // _ZN9S235C6_nt3v56Ev
  virtual void  v57(); // _ZN9S235C6_nt3v57Ev
  virtual void  v58(); // _ZN9S235C6_nt3v58Ev
  virtual void  v59(); // _ZN9S235C6_nt3v59Ev
  virtual void  v60(); // _ZN9S235C6_nt3v60Ev
  virtual void  v61(); // _ZN9S235C6_nt3v61Ev
  virtual void  v62(); // _ZN9S235C6_nt3v62Ev
  virtual void  v63(); // _ZN9S235C6_nt3v63Ev
  virtual void  v64(); // _ZN9S235C6_nt3v64Ev
  virtual void  v65(); // _ZN9S235C6_nt3v65Ev
  virtual void  v66(); // _ZN9S235C6_nt3v66Ev
  virtual void  v67(); // _ZN9S235C6_nt3v67Ev
  virtual void  v68(); // _ZN9S235C6_nt3v68Ev
  S235C6_nt(); // tgen
};
//SIG(-1 S235C6_nt) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 Fi FL Fp[4] Fi[2] Fp FC2{ m Fi[2]} Fp[2]}


 S235C6_nt ::~S235C6_nt(){ note_dtor("S235C6_nt", this);}
void  S235C6_nt ::v5(){vfunc_called(this, "_ZN9S235C6_nt2v5Ev");}
void  S235C6_nt ::v6(){vfunc_called(this, "_ZN9S235C6_nt2v6Ev");}
void  S235C6_nt ::v7(){vfunc_called(this, "_ZN9S235C6_nt2v7Ev");}
void  S235C6_nt ::v8(){vfunc_called(this, "_ZN9S235C6_nt2v8Ev");}
void  S235C6_nt ::v9(){vfunc_called(this, "_ZN9S235C6_nt2v9Ev");}
void  S235C6_nt ::v10(){vfunc_called(this, "_ZN9S235C6_nt3v10Ev");}
void  S235C6_nt ::v11(){vfunc_called(this, "_ZN9S235C6_nt3v11Ev");}
void  S235C6_nt ::v12(){vfunc_called(this, "_ZN9S235C6_nt3v12Ev");}
void  S235C6_nt ::v13(){vfunc_called(this, "_ZN9S235C6_nt3v13Ev");}
void  S235C6_nt ::v14(){vfunc_called(this, "_ZN9S235C6_nt3v14Ev");}
void  S235C6_nt ::v15(){vfunc_called(this, "_ZN9S235C6_nt3v15Ev");}
void  S235C6_nt ::v16(){vfunc_called(this, "_ZN9S235C6_nt3v16Ev");}
void  S235C6_nt ::v17(){vfunc_called(this, "_ZN9S235C6_nt3v17Ev");}
void  S235C6_nt ::v18(){vfunc_called(this, "_ZN9S235C6_nt3v18Ev");}
void  S235C6_nt ::v19(){vfunc_called(this, "_ZN9S235C6_nt3v19Ev");}
void  S235C6_nt ::v20(){vfunc_called(this, "_ZN9S235C6_nt3v20Ev");}
void  S235C6_nt ::v21(){vfunc_called(this, "_ZN9S235C6_nt3v21Ev");}
void  S235C6_nt ::v22(){vfunc_called(this, "_ZN9S235C6_nt3v22Ev");}
void  S235C6_nt ::v23(){vfunc_called(this, "_ZN9S235C6_nt3v23Ev");}
void  S235C6_nt ::v24(){vfunc_called(this, "_ZN9S235C6_nt3v24Ev");}
void  S235C6_nt ::v25(){vfunc_called(this, "_ZN9S235C6_nt3v25Ev");}
void  S235C6_nt ::v26(){vfunc_called(this, "_ZN9S235C6_nt3v26Ev");}
void  S235C6_nt ::v27(){vfunc_called(this, "_ZN9S235C6_nt3v27Ev");}
void  S235C6_nt ::v28(){vfunc_called(this, "_ZN9S235C6_nt3v28Ev");}
void  S235C6_nt ::v29(){vfunc_called(this, "_ZN9S235C6_nt3v29Ev");}
void  S235C6_nt ::v30(){vfunc_called(this, "_ZN9S235C6_nt3v30Ev");}
void  S235C6_nt ::v31(){vfunc_called(this, "_ZN9S235C6_nt3v31Ev");}
void  S235C6_nt ::v32(){vfunc_called(this, "_ZN9S235C6_nt3v32Ev");}
void  S235C6_nt ::v33(){vfunc_called(this, "_ZN9S235C6_nt3v33Ev");}
void  S235C6_nt ::v34(){vfunc_called(this, "_ZN9S235C6_nt3v34Ev");}
void  S235C6_nt ::v35(){vfunc_called(this, "_ZN9S235C6_nt3v35Ev");}
void  S235C6_nt ::v36(){vfunc_called(this, "_ZN9S235C6_nt3v36Ev");}
void  S235C6_nt ::v37(){vfunc_called(this, "_ZN9S235C6_nt3v37Ev");}
void  S235C6_nt ::v38(){vfunc_called(this, "_ZN9S235C6_nt3v38Ev");}
void  S235C6_nt ::v39(){vfunc_called(this, "_ZN9S235C6_nt3v39Ev");}
void  S235C6_nt ::v40(){vfunc_called(this, "_ZN9S235C6_nt3v40Ev");}
void  S235C6_nt ::v41(){vfunc_called(this, "_ZN9S235C6_nt3v41Ev");}
void  S235C6_nt ::v42(){vfunc_called(this, "_ZN9S235C6_nt3v42Ev");}
void  S235C6_nt ::v43(){vfunc_called(this, "_ZN9S235C6_nt3v43Ev");}
void  S235C6_nt ::v44(){vfunc_called(this, "_ZN9S235C6_nt3v44Ev");}
void  S235C6_nt ::v45(){vfunc_called(this, "_ZN9S235C6_nt3v45Ev");}
void  S235C6_nt ::v46(){vfunc_called(this, "_ZN9S235C6_nt3v46Ev");}
void  S235C6_nt ::v47(){vfunc_called(this, "_ZN9S235C6_nt3v47Ev");}
void  S235C6_nt ::v48(){vfunc_called(this, "_ZN9S235C6_nt3v48Ev");}
void  S235C6_nt ::v49(){vfunc_called(this, "_ZN9S235C6_nt3v49Ev");}
void  S235C6_nt ::v50(){vfunc_called(this, "_ZN9S235C6_nt3v50Ev");}
void  S235C6_nt ::v51(){vfunc_called(this, "_ZN9S235C6_nt3v51Ev");}
void  S235C6_nt ::v52(){vfunc_called(this, "_ZN9S235C6_nt3v52Ev");}
void  S235C6_nt ::v53(){vfunc_called(this, "_ZN9S235C6_nt3v53Ev");}
void  S235C6_nt ::v54(){vfunc_called(this, "_ZN9S235C6_nt3v54Ev");}
void  S235C6_nt ::v55(){vfunc_called(this, "_ZN9S235C6_nt3v55Ev");}
void  S235C6_nt ::v56(){vfunc_called(this, "_ZN9S235C6_nt3v56Ev");}
void  S235C6_nt ::v57(){vfunc_called(this, "_ZN9S235C6_nt3v57Ev");}
void  S235C6_nt ::v58(){vfunc_called(this, "_ZN9S235C6_nt3v58Ev");}
void  S235C6_nt ::v59(){vfunc_called(this, "_ZN9S235C6_nt3v59Ev");}
void  S235C6_nt ::v60(){vfunc_called(this, "_ZN9S235C6_nt3v60Ev");}
void  S235C6_nt ::v61(){vfunc_called(this, "_ZN9S235C6_nt3v61Ev");}
void  S235C6_nt ::v62(){vfunc_called(this, "_ZN9S235C6_nt3v62Ev");}
void  S235C6_nt ::v63(){vfunc_called(this, "_ZN9S235C6_nt3v63Ev");}
void  S235C6_nt ::v64(){vfunc_called(this, "_ZN9S235C6_nt3v64Ev");}
void  S235C6_nt ::v65(){vfunc_called(this, "_ZN9S235C6_nt3v65Ev");}
void  S235C6_nt ::v66(){vfunc_called(this, "_ZN9S235C6_nt3v66Ev");}
void  S235C6_nt ::v67(){vfunc_called(this, "_ZN9S235C6_nt3v67Ev");}
void  S235C6_nt ::v68(){vfunc_called(this, "_ZN9S235C6_nt3v68Ev");}
S235C6_nt ::S235C6_nt(){ note_ctor("S235C6_nt", this);} // tgen

//skip512 S235C6_nt

#else // __cplusplus

extern void _ZN9S235C6_ntC1Ev();
extern void _ZN9S235C6_ntD1Ev();
Name_Map name_map_S235C6_nt[] = {
  NSPAIR(_ZN9S235C6_ntC1Ev),
  NSPAIR(_ZN9S235C6_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI9S235C6_nt[];
extern void _ZN9S235C6_ntD1Ev();
extern void _ZN9S235C6_ntD0Ev();
extern void _ZN9S235C6_nt2v5Ev();
extern void _ZN9S235C6_nt2v6Ev();
extern void _ZN9S235C6_nt2v7Ev();
extern void _ZN9S235C6_nt2v8Ev();
extern void _ZN9S235C6_nt2v9Ev();
extern void _ZN9S235C6_nt3v10Ev();
extern void _ZN9S235C6_nt3v11Ev();
extern void _ZN9S235C6_nt3v12Ev();
extern void _ZN9S235C6_nt3v13Ev();
extern void _ZN9S235C6_nt3v14Ev();
extern void _ZN9S235C6_nt3v15Ev();
extern void _ZN9S235C6_nt3v16Ev();
extern void _ZN9S235C6_nt3v17Ev();
extern void _ZN9S235C6_nt3v18Ev();
extern void _ZN9S235C6_nt3v19Ev();
extern void _ZN9S235C6_nt3v20Ev();
extern void _ZN9S235C6_nt3v21Ev();
extern void _ZN9S235C6_nt3v22Ev();
extern void _ZN9S235C6_nt3v23Ev();
extern void _ZN9S235C6_nt3v24Ev();
extern void _ZN9S235C6_nt3v25Ev();
extern void _ZN9S235C6_nt3v26Ev();
extern void _ZN9S235C6_nt3v27Ev();
extern void _ZN9S235C6_nt3v28Ev();
extern void _ZN9S235C6_nt3v29Ev();
extern void _ZN9S235C6_nt3v30Ev();
extern void _ZN9S235C6_nt3v31Ev();
extern void _ZN9S235C6_nt3v32Ev();
extern void _ZN9S235C6_nt3v33Ev();
extern void _ZN9S235C6_nt3v34Ev();
extern void _ZN9S235C6_nt3v35Ev();
extern void _ZN9S235C6_nt3v36Ev();
extern void _ZN9S235C6_nt3v37Ev();
extern void _ZN9S235C6_nt3v38Ev();
extern void _ZN9S235C6_nt3v39Ev();
extern void _ZN9S235C6_nt3v40Ev();
extern void _ZN9S235C6_nt3v41Ev();
extern void _ZN9S235C6_nt3v42Ev();
extern void _ZN9S235C6_nt3v43Ev();
extern void _ZN9S235C6_nt3v44Ev();
extern void _ZN9S235C6_nt3v45Ev();
extern void _ZN9S235C6_nt3v46Ev();
extern void _ZN9S235C6_nt3v47Ev();
extern void _ZN9S235C6_nt3v48Ev();
extern void _ZN9S235C6_nt3v49Ev();
extern void _ZN9S235C6_nt3v50Ev();
extern void _ZN9S235C6_nt3v51Ev();
extern void _ZN9S235C6_nt3v52Ev();
extern void _ZN9S235C6_nt3v53Ev();
extern void _ZN9S235C6_nt3v54Ev();
extern void _ZN9S235C6_nt3v55Ev();
extern void _ZN9S235C6_nt3v56Ev();
extern void _ZN9S235C6_nt3v57Ev();
extern void _ZN9S235C6_nt3v58Ev();
extern void _ZN9S235C6_nt3v59Ev();
extern void _ZN9S235C6_nt3v60Ev();
extern void _ZN9S235C6_nt3v61Ev();
extern void _ZN9S235C6_nt3v62Ev();
extern void _ZN9S235C6_nt3v63Ev();
extern void _ZN9S235C6_nt3v64Ev();
extern void _ZN9S235C6_nt3v65Ev();
extern void _ZN9S235C6_nt3v66Ev();
extern void _ZN9S235C6_nt3v67Ev();
extern void _ZN9S235C6_nt3v68Ev();
static  VTBL_ENTRY vtc_S235C6_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S235C6_nt[0]),
  (VTBL_ENTRY)&_ZN9S235C6_ntD1Ev,
  (VTBL_ENTRY)&_ZN9S235C6_ntD0Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt2v5Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt2v6Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt2v7Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt2v8Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt2v9Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v10Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v11Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v12Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v13Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v14Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v15Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v16Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v17Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v18Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v19Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v20Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v21Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v22Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v23Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v24Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v25Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v26Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v27Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v28Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v29Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v30Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v31Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v32Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v33Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v34Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v35Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v36Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v37Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v38Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v39Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v40Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v41Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v42Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v43Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v44Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v45Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v46Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v47Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v48Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v49Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v50Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v51Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v52Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v53Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v54Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v55Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v56Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v57Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v58Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v59Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v60Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v61Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v62Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v63Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v64Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v65Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v66Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v67Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v68Ev,
};
extern VTBL_ENTRY _ZTI9S235C6_nt[];
VTBL_ENTRY *P__ZTI9S235C6_nt = _ZTI9S235C6_nt; 
extern  VTBL_ENTRY _ZTV9S235C6_nt[];
Class_Descriptor cd_S235C6_nt = {  "S235C6_nt", // class name
  0,0,//no base classes
  &(vtc_S235C6_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI9S235C6_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV9S235C6_nt),68, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S235C5_nt  : S235C6_nt {
  void *s235c5f0;
  ::S235C7_nt s235c5f1;
  virtual  ~S235C5_nt(); // _ZN9S235C5_ntD1Ev
  virtual void  v69(); // _ZN9S235C5_nt3v69Ev
  virtual void  v70(); // _ZN9S235C5_nt3v70Ev
  virtual void  v71(); // _ZN9S235C5_nt3v71Ev
  virtual void  v72(); // _ZN9S235C5_nt3v72Ev
  virtual void  v73(); // _ZN9S235C5_nt3v73Ev
  S235C5_nt(); // tgen
};
//SIG(-1 S235C5_nt) C1{ BC2{ vd v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 Fi FL Fp[4] Fi[2] Fp FC3{ m Fi[2]} Fp[2]} vd v1 v2 v3 v4 v5 Fp FC3}


 S235C5_nt ::~S235C5_nt(){ note_dtor("S235C5_nt", this);}
void  S235C5_nt ::v69(){vfunc_called(this, "_ZN9S235C5_nt3v69Ev");}
void  S235C5_nt ::v70(){vfunc_called(this, "_ZN9S235C5_nt3v70Ev");}
void  S235C5_nt ::v71(){vfunc_called(this, "_ZN9S235C5_nt3v71Ev");}
void  S235C5_nt ::v72(){vfunc_called(this, "_ZN9S235C5_nt3v72Ev");}
void  S235C5_nt ::v73(){vfunc_called(this, "_ZN9S235C5_nt3v73Ev");}
S235C5_nt ::S235C5_nt(){ note_ctor("S235C5_nt", this);} // tgen

//skip512 S235C5_nt

#else // __cplusplus

extern void _ZN9S235C5_ntC1Ev();
extern void _ZN9S235C5_ntD1Ev();
Name_Map name_map_S235C5_nt[] = {
  NSPAIR(_ZN9S235C5_ntC1Ev),
  NSPAIR(_ZN9S235C5_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S235C6_nt;
extern VTBL_ENTRY _ZTI9S235C6_nt[];
extern  VTBL_ENTRY _ZTV9S235C6_nt[];
static Base_Class bases_S235C5_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S235C6_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S235C5_nt[];
extern void _ZN9S235C5_ntD1Ev();
extern void _ZN9S235C5_ntD0Ev();
extern void _ZN9S235C6_nt2v5Ev();
extern void _ZN9S235C6_nt2v6Ev();
extern void _ZN9S235C6_nt2v7Ev();
extern void _ZN9S235C6_nt2v8Ev();
extern void _ZN9S235C6_nt2v9Ev();
extern void _ZN9S235C6_nt3v10Ev();
extern void _ZN9S235C6_nt3v11Ev();
extern void _ZN9S235C6_nt3v12Ev();
extern void _ZN9S235C6_nt3v13Ev();
extern void _ZN9S235C6_nt3v14Ev();
extern void _ZN9S235C6_nt3v15Ev();
extern void _ZN9S235C6_nt3v16Ev();
extern void _ZN9S235C6_nt3v17Ev();
extern void _ZN9S235C6_nt3v18Ev();
extern void _ZN9S235C6_nt3v19Ev();
extern void _ZN9S235C6_nt3v20Ev();
extern void _ZN9S235C6_nt3v21Ev();
extern void _ZN9S235C6_nt3v22Ev();
extern void _ZN9S235C6_nt3v23Ev();
extern void _ZN9S235C6_nt3v24Ev();
extern void _ZN9S235C6_nt3v25Ev();
extern void _ZN9S235C6_nt3v26Ev();
extern void _ZN9S235C6_nt3v27Ev();
extern void _ZN9S235C6_nt3v28Ev();
extern void _ZN9S235C6_nt3v29Ev();
extern void _ZN9S235C6_nt3v30Ev();
extern void _ZN9S235C6_nt3v31Ev();
extern void _ZN9S235C6_nt3v32Ev();
extern void _ZN9S235C6_nt3v33Ev();
extern void _ZN9S235C6_nt3v34Ev();
extern void _ZN9S235C6_nt3v35Ev();
extern void _ZN9S235C6_nt3v36Ev();
extern void _ZN9S235C6_nt3v37Ev();
extern void _ZN9S235C6_nt3v38Ev();
extern void _ZN9S235C6_nt3v39Ev();
extern void _ZN9S235C6_nt3v40Ev();
extern void _ZN9S235C6_nt3v41Ev();
extern void _ZN9S235C6_nt3v42Ev();
extern void _ZN9S235C6_nt3v43Ev();
extern void _ZN9S235C6_nt3v44Ev();
extern void _ZN9S235C6_nt3v45Ev();
extern void _ZN9S235C6_nt3v46Ev();
extern void _ZN9S235C6_nt3v47Ev();
extern void _ZN9S235C6_nt3v48Ev();
extern void _ZN9S235C6_nt3v49Ev();
extern void _ZN9S235C6_nt3v50Ev();
extern void _ZN9S235C6_nt3v51Ev();
extern void _ZN9S235C6_nt3v52Ev();
extern void _ZN9S235C6_nt3v53Ev();
extern void _ZN9S235C6_nt3v54Ev();
extern void _ZN9S235C6_nt3v55Ev();
extern void _ZN9S235C6_nt3v56Ev();
extern void _ZN9S235C6_nt3v57Ev();
extern void _ZN9S235C6_nt3v58Ev();
extern void _ZN9S235C6_nt3v59Ev();
extern void _ZN9S235C6_nt3v60Ev();
extern void _ZN9S235C6_nt3v61Ev();
extern void _ZN9S235C6_nt3v62Ev();
extern void _ZN9S235C6_nt3v63Ev();
extern void _ZN9S235C6_nt3v64Ev();
extern void _ZN9S235C6_nt3v65Ev();
extern void _ZN9S235C6_nt3v66Ev();
extern void _ZN9S235C6_nt3v67Ev();
extern void _ZN9S235C6_nt3v68Ev();
extern void _ZN9S235C5_nt3v69Ev();
extern void _ZN9S235C5_nt3v70Ev();
extern void _ZN9S235C5_nt3v71Ev();
extern void _ZN9S235C5_nt3v72Ev();
extern void _ZN9S235C5_nt3v73Ev();
static  VTBL_ENTRY vtc_S235C5_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S235C5_nt[0]),
  (VTBL_ENTRY)&_ZN9S235C5_ntD1Ev,
  (VTBL_ENTRY)&_ZN9S235C5_ntD0Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt2v5Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt2v6Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt2v7Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt2v8Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt2v9Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v10Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v11Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v12Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v13Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v14Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v15Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v16Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v17Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v18Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v19Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v20Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v21Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v22Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v23Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v24Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v25Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v26Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v27Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v28Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v29Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v30Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v31Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v32Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v33Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v34Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v35Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v36Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v37Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v38Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v39Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v40Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v41Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v42Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v43Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v44Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v45Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v46Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v47Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v48Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v49Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v50Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v51Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v52Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v53Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v54Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v55Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v56Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v57Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v58Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v59Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v60Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v61Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v62Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v63Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v64Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v65Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v66Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v67Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v68Ev,
  (VTBL_ENTRY)&_ZN9S235C5_nt3v69Ev,
  (VTBL_ENTRY)&_ZN9S235C5_nt3v70Ev,
  (VTBL_ENTRY)&_ZN9S235C5_nt3v71Ev,
  (VTBL_ENTRY)&_ZN9S235C5_nt3v72Ev,
  (VTBL_ENTRY)&_ZN9S235C5_nt3v73Ev,
};
extern VTBL_ENTRY _ZTI9S235C5_nt[];
VTBL_ENTRY *P__ZTI9S235C5_nt = _ZTI9S235C5_nt; 
extern  VTBL_ENTRY _ZTV9S235C5_nt[];
Class_Descriptor cd_S235C5_nt = {  "S235C5_nt", // class name
  bases_S235C5_nt, 1,
  &(vtc_S235C5_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(112,72), // object size
  NSPAIRA(_ZTI9S235C5_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV9S235C5_nt),73, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S235C4_nt  : S235C5_nt {
  void *s235c4f0[2];
  unsigned int s235c4f1:1;
  unsigned int s235c4f2:1;
  unsigned int s235c4f3:1;
  unsigned int s235c4f4:1;
  char s235c4f5;
  virtual  ~S235C4_nt(); // _ZN9S235C4_ntD1Ev
  virtual void  v74(); // _ZN9S235C4_nt3v74Ev
  virtual void  v75(); // _ZN9S235C4_nt3v75Ev
  virtual void  v76(); // _ZN9S235C4_nt3v76Ev
  virtual void  v77(); // _ZN9S235C4_nt3v77Ev
  virtual void  v78(); // _ZN9S235C4_nt3v78Ev
  virtual void  v79(); // _ZN9S235C4_nt3v79Ev
  virtual void  v80(); // _ZN9S235C4_nt3v80Ev
  virtual void  v81(); // _ZN9S235C4_nt3v81Ev
  virtual void  v82(); // _ZN9S235C4_nt3v82Ev
  virtual void  v83(); // _ZN9S235C4_nt3v83Ev
  virtual void  v84(); // _ZN9S235C4_nt3v84Ev
  virtual void  v85(); // _ZN9S235C4_nt3v85Ev
  virtual void  v86(); // _ZN9S235C4_nt3v86Ev
  virtual void  v87(); // _ZN9S235C4_nt3v87Ev
  virtual void  v88(); // _ZN9S235C4_nt3v88Ev
  virtual void  v89(); // _ZN9S235C4_nt3v89Ev
  virtual void  v90(); // _ZN9S235C4_nt3v90Ev
  virtual void  v91(); // _ZN9S235C4_nt3v91Ev
  virtual void  v92(); // _ZN9S235C4_nt3v92Ev
  virtual void  v93(); // _ZN9S235C4_nt3v93Ev
  virtual void  v94(); // _ZN9S235C4_nt3v94Ev
  virtual void  v95(); // _ZN9S235C4_nt3v95Ev
  S235C4_nt(); // tgen
};
//SIG(-1 S235C4_nt) C1{ BC2{ BC3{ vd v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 Fi FL Fp[4] Fi[2] Fp FC4{ m Fi[2]} Fp[2]} vd v87 v88 v89 v90 v91 Fp FC4} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 Fp[2] Fi:1 Fi:1 Fi:1 Fi:1 Fc}


 S235C4_nt ::~S235C4_nt(){ note_dtor("S235C4_nt", this);}
void  S235C4_nt ::v74(){vfunc_called(this, "_ZN9S235C4_nt3v74Ev");}
void  S235C4_nt ::v75(){vfunc_called(this, "_ZN9S235C4_nt3v75Ev");}
void  S235C4_nt ::v76(){vfunc_called(this, "_ZN9S235C4_nt3v76Ev");}
void  S235C4_nt ::v77(){vfunc_called(this, "_ZN9S235C4_nt3v77Ev");}
void  S235C4_nt ::v78(){vfunc_called(this, "_ZN9S235C4_nt3v78Ev");}
void  S235C4_nt ::v79(){vfunc_called(this, "_ZN9S235C4_nt3v79Ev");}
void  S235C4_nt ::v80(){vfunc_called(this, "_ZN9S235C4_nt3v80Ev");}
void  S235C4_nt ::v81(){vfunc_called(this, "_ZN9S235C4_nt3v81Ev");}
void  S235C4_nt ::v82(){vfunc_called(this, "_ZN9S235C4_nt3v82Ev");}
void  S235C4_nt ::v83(){vfunc_called(this, "_ZN9S235C4_nt3v83Ev");}
void  S235C4_nt ::v84(){vfunc_called(this, "_ZN9S235C4_nt3v84Ev");}
void  S235C4_nt ::v85(){vfunc_called(this, "_ZN9S235C4_nt3v85Ev");}
void  S235C4_nt ::v86(){vfunc_called(this, "_ZN9S235C4_nt3v86Ev");}
void  S235C4_nt ::v87(){vfunc_called(this, "_ZN9S235C4_nt3v87Ev");}
void  S235C4_nt ::v88(){vfunc_called(this, "_ZN9S235C4_nt3v88Ev");}
void  S235C4_nt ::v89(){vfunc_called(this, "_ZN9S235C4_nt3v89Ev");}
void  S235C4_nt ::v90(){vfunc_called(this, "_ZN9S235C4_nt3v90Ev");}
void  S235C4_nt ::v91(){vfunc_called(this, "_ZN9S235C4_nt3v91Ev");}
void  S235C4_nt ::v92(){vfunc_called(this, "_ZN9S235C4_nt3v92Ev");}
void  S235C4_nt ::v93(){vfunc_called(this, "_ZN9S235C4_nt3v93Ev");}
void  S235C4_nt ::v94(){vfunc_called(this, "_ZN9S235C4_nt3v94Ev");}
void  S235C4_nt ::v95(){vfunc_called(this, "_ZN9S235C4_nt3v95Ev");}
S235C4_nt ::S235C4_nt(){ note_ctor("S235C4_nt", this);} // tgen

//skip512 S235C4_nt

#else // __cplusplus

extern void _ZN9S235C4_ntC1Ev();
extern void _ZN9S235C4_ntD1Ev();
Name_Map name_map_S235C4_nt[] = {
  NSPAIR(_ZN9S235C4_ntC1Ev),
  NSPAIR(_ZN9S235C4_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S235C6_nt;
extern VTBL_ENTRY _ZTI9S235C6_nt[];
extern  VTBL_ENTRY _ZTV9S235C6_nt[];
extern Class_Descriptor cd_S235C5_nt;
extern VTBL_ENTRY _ZTI9S235C5_nt[];
extern  VTBL_ENTRY _ZTV9S235C5_nt[];
static Base_Class bases_S235C4_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S235C6_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S235C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S235C4_nt[];
extern void _ZN9S235C4_ntD1Ev();
extern void _ZN9S235C4_ntD0Ev();
extern void _ZN9S235C6_nt2v5Ev();
extern void _ZN9S235C6_nt2v6Ev();
extern void _ZN9S235C6_nt2v7Ev();
extern void _ZN9S235C6_nt2v8Ev();
extern void _ZN9S235C6_nt2v9Ev();
extern void _ZN9S235C6_nt3v10Ev();
extern void _ZN9S235C6_nt3v11Ev();
extern void _ZN9S235C6_nt3v12Ev();
extern void _ZN9S235C6_nt3v13Ev();
extern void _ZN9S235C6_nt3v14Ev();
extern void _ZN9S235C6_nt3v15Ev();
extern void _ZN9S235C6_nt3v16Ev();
extern void _ZN9S235C6_nt3v17Ev();
extern void _ZN9S235C6_nt3v18Ev();
extern void _ZN9S235C6_nt3v19Ev();
extern void _ZN9S235C6_nt3v20Ev();
extern void _ZN9S235C6_nt3v21Ev();
extern void _ZN9S235C6_nt3v22Ev();
extern void _ZN9S235C6_nt3v23Ev();
extern void _ZN9S235C6_nt3v24Ev();
extern void _ZN9S235C6_nt3v25Ev();
extern void _ZN9S235C6_nt3v26Ev();
extern void _ZN9S235C6_nt3v27Ev();
extern void _ZN9S235C6_nt3v28Ev();
extern void _ZN9S235C6_nt3v29Ev();
extern void _ZN9S235C6_nt3v30Ev();
extern void _ZN9S235C6_nt3v31Ev();
extern void _ZN9S235C6_nt3v32Ev();
extern void _ZN9S235C6_nt3v33Ev();
extern void _ZN9S235C6_nt3v34Ev();
extern void _ZN9S235C6_nt3v35Ev();
extern void _ZN9S235C6_nt3v36Ev();
extern void _ZN9S235C6_nt3v37Ev();
extern void _ZN9S235C6_nt3v38Ev();
extern void _ZN9S235C6_nt3v39Ev();
extern void _ZN9S235C6_nt3v40Ev();
extern void _ZN9S235C6_nt3v41Ev();
extern void _ZN9S235C6_nt3v42Ev();
extern void _ZN9S235C6_nt3v43Ev();
extern void _ZN9S235C6_nt3v44Ev();
extern void _ZN9S235C6_nt3v45Ev();
extern void _ZN9S235C6_nt3v46Ev();
extern void _ZN9S235C6_nt3v47Ev();
extern void _ZN9S235C6_nt3v48Ev();
extern void _ZN9S235C6_nt3v49Ev();
extern void _ZN9S235C6_nt3v50Ev();
extern void _ZN9S235C6_nt3v51Ev();
extern void _ZN9S235C6_nt3v52Ev();
extern void _ZN9S235C6_nt3v53Ev();
extern void _ZN9S235C6_nt3v54Ev();
extern void _ZN9S235C6_nt3v55Ev();
extern void _ZN9S235C6_nt3v56Ev();
extern void _ZN9S235C6_nt3v57Ev();
extern void _ZN9S235C6_nt3v58Ev();
extern void _ZN9S235C6_nt3v59Ev();
extern void _ZN9S235C6_nt3v60Ev();
extern void _ZN9S235C6_nt3v61Ev();
extern void _ZN9S235C6_nt3v62Ev();
extern void _ZN9S235C6_nt3v63Ev();
extern void _ZN9S235C6_nt3v64Ev();
extern void _ZN9S235C6_nt3v65Ev();
extern void _ZN9S235C6_nt3v66Ev();
extern void _ZN9S235C6_nt3v67Ev();
extern void _ZN9S235C6_nt3v68Ev();
extern void _ZN9S235C5_nt3v69Ev();
extern void _ZN9S235C5_nt3v70Ev();
extern void _ZN9S235C5_nt3v71Ev();
extern void _ZN9S235C5_nt3v72Ev();
extern void _ZN9S235C5_nt3v73Ev();
extern void _ZN9S235C4_nt3v74Ev();
extern void _ZN9S235C4_nt3v75Ev();
extern void _ZN9S235C4_nt3v76Ev();
extern void _ZN9S235C4_nt3v77Ev();
extern void _ZN9S235C4_nt3v78Ev();
extern void _ZN9S235C4_nt3v79Ev();
extern void _ZN9S235C4_nt3v80Ev();
extern void _ZN9S235C4_nt3v81Ev();
extern void _ZN9S235C4_nt3v82Ev();
extern void _ZN9S235C4_nt3v83Ev();
extern void _ZN9S235C4_nt3v84Ev();
extern void _ZN9S235C4_nt3v85Ev();
extern void _ZN9S235C4_nt3v86Ev();
extern void _ZN9S235C4_nt3v87Ev();
extern void _ZN9S235C4_nt3v88Ev();
extern void _ZN9S235C4_nt3v89Ev();
extern void _ZN9S235C4_nt3v90Ev();
extern void _ZN9S235C4_nt3v91Ev();
extern void _ZN9S235C4_nt3v92Ev();
extern void _ZN9S235C4_nt3v93Ev();
extern void _ZN9S235C4_nt3v94Ev();
extern void _ZN9S235C4_nt3v95Ev();
static  VTBL_ENTRY vtc_S235C4_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S235C4_nt[0]),
  (VTBL_ENTRY)&_ZN9S235C4_ntD1Ev,
  (VTBL_ENTRY)&_ZN9S235C4_ntD0Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt2v5Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt2v6Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt2v7Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt2v8Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt2v9Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v10Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v11Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v12Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v13Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v14Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v15Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v16Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v17Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v18Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v19Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v20Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v21Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v22Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v23Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v24Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v25Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v26Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v27Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v28Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v29Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v30Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v31Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v32Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v33Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v34Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v35Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v36Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v37Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v38Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v39Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v40Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v41Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v42Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v43Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v44Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v45Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v46Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v47Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v48Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v49Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v50Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v51Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v52Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v53Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v54Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v55Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v56Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v57Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v58Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v59Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v60Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v61Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v62Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v63Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v64Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v65Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v66Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v67Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v68Ev,
  (VTBL_ENTRY)&_ZN9S235C5_nt3v69Ev,
  (VTBL_ENTRY)&_ZN9S235C5_nt3v70Ev,
  (VTBL_ENTRY)&_ZN9S235C5_nt3v71Ev,
  (VTBL_ENTRY)&_ZN9S235C5_nt3v72Ev,
  (VTBL_ENTRY)&_ZN9S235C5_nt3v73Ev,
  (VTBL_ENTRY)&_ZN9S235C4_nt3v74Ev,
  (VTBL_ENTRY)&_ZN9S235C4_nt3v75Ev,
  (VTBL_ENTRY)&_ZN9S235C4_nt3v76Ev,
  (VTBL_ENTRY)&_ZN9S235C4_nt3v77Ev,
  (VTBL_ENTRY)&_ZN9S235C4_nt3v78Ev,
  (VTBL_ENTRY)&_ZN9S235C4_nt3v79Ev,
  (VTBL_ENTRY)&_ZN9S235C4_nt3v80Ev,
  (VTBL_ENTRY)&_ZN9S235C4_nt3v81Ev,
  (VTBL_ENTRY)&_ZN9S235C4_nt3v82Ev,
  (VTBL_ENTRY)&_ZN9S235C4_nt3v83Ev,
  (VTBL_ENTRY)&_ZN9S235C4_nt3v84Ev,
  (VTBL_ENTRY)&_ZN9S235C4_nt3v85Ev,
  (VTBL_ENTRY)&_ZN9S235C4_nt3v86Ev,
  (VTBL_ENTRY)&_ZN9S235C4_nt3v87Ev,
  (VTBL_ENTRY)&_ZN9S235C4_nt3v88Ev,
  (VTBL_ENTRY)&_ZN9S235C4_nt3v89Ev,
  (VTBL_ENTRY)&_ZN9S235C4_nt3v90Ev,
  (VTBL_ENTRY)&_ZN9S235C4_nt3v91Ev,
  (VTBL_ENTRY)&_ZN9S235C4_nt3v92Ev,
  (VTBL_ENTRY)&_ZN9S235C4_nt3v93Ev,
  (VTBL_ENTRY)&_ZN9S235C4_nt3v94Ev,
  (VTBL_ENTRY)&_ZN9S235C4_nt3v95Ev,
};
extern VTBL_ENTRY _ZTI9S235C4_nt[];
VTBL_ENTRY *P__ZTI9S235C4_nt = _ZTI9S235C4_nt; 
extern  VTBL_ENTRY _ZTV9S235C4_nt[];
Class_Descriptor cd_S235C4_nt = {  "S235C4_nt", // class name
  bases_S235C4_nt, 2,
  &(vtc_S235C4_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(136,84), // object size
  NSPAIRA(_ZTI9S235C4_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV9S235C4_nt),95, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S235C9_nt  {
  int s235c9f0[4];
  void  mf235c9(); // _ZN9S235C9_nt7mf235c9Ev
};
//SIG(-1 S235C9_nt) C1{ m Fi[4]}


void  S235C9_nt ::mf235c9(){}

//skip512 S235C9_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S235C13_nt  {
  void *s235c13f0;
  int s235c13f1[2];
  void  mf235c13(); // _ZN10S235C13_nt8mf235c13Ev
};
//SIG(-1 S235C13_nt) C1{ m Fp Fi[2]}


void  S235C13_nt ::mf235c13(){}

//skip512 S235C13_nt

#else // __cplusplus

Class_Descriptor cd_S235C13_nt = {  "S235C13_nt", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  ABISELECT(16,12), // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S235C12_nt  : S235C13_nt {
};
//SIG(-1 S235C12_nt) C1{ BC2{ m Fp Fi[2]}}



//skip512 S235C12_nt

#else // __cplusplus

extern Class_Descriptor cd_S235C13_nt;
static Base_Class bases_S235C12_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S235C13_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
Class_Descriptor cd_S235C12_nt = {  "S235C12_nt", // class name
  bases_S235C12_nt, 1,
  0, // no vftv
  0, //no vtt
  ABISELECT(16,12), // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S235C11_nt  : S235C12_nt {
};
//SIG(-1 S235C11_nt) C1{ BC2{ BC3{ m Fp Fi[2]}}}



//skip512 S235C11_nt

#else // __cplusplus

extern Class_Descriptor cd_S235C13_nt;
extern Class_Descriptor cd_S235C12_nt;
static Base_Class bases_S235C11_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S235C13_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S235C12_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S235C18  : S235C13_nt {
};
//SIG(-1 S235C18) C1{ BC2{ m Fp Fi[2]}}



static void Test_S235C18()
{
  extern Class_Descriptor cd_S235C18;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S235C18, buf);
    S235C18 &lv = *(new (buf) S235C18());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S235C18)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S235C18)");
    check_base_class_offset(lv, (S235C13_nt*), 0, "S235C18");
    test_class_info(&lv, &cd_S235C18);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS235C18(Test_S235C18, "S235C18", ABISELECT(16,12));

#else // __cplusplus

extern Class_Descriptor cd_S235C13_nt;
static Base_Class bases_S235C18[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S235C13_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
Class_Descriptor cd_S235C18 = {  "S235C18", // class name
  bases_S235C18, 1,
  0, // no vftv
  0, //no vtt
  ABISELECT(16,12), // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S235C17  : S235C18 {
};
//SIG(-1 S235C17) C1{ BC2{ BC3{ m Fp Fi[2]}}}



static void Test_S235C17()
{
  extern Class_Descriptor cd_S235C17;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S235C17, buf);
    S235C17 &lv = *(new (buf) S235C17());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S235C17)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S235C17)");
    check_base_class_offset(lv, (S235C13_nt*)(S235C18*), 0, "S235C17");
    check_base_class_offset(lv, (S235C18*), 0, "S235C17");
    test_class_info(&lv, &cd_S235C17);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS235C17(Test_S235C17, "S235C17", ABISELECT(16,12));

#else // __cplusplus

extern Class_Descriptor cd_S235C13_nt;
extern Class_Descriptor cd_S235C18;
static Base_Class bases_S235C17[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S235C13_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S235C18,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
Class_Descriptor cd_S235C17 = {  "S235C17", // class name
  bases_S235C17, 2,
  0, // no vftv
  0, //no vtt
  ABISELECT(16,12), // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S235C3  : S235C4_nt {
  void *s235c3f0;
  ::S836C39 s235c3f1;
  ::S836C39 s235c3f2;
  ::S235C9_nt s235c3f3;
  ::S235C9_nt s235c3f4;
  int s235c3f5;
  ::S836C29 s235c3f6;
  void *s235c3f7;
  unsigned int s235c3f8:1;
  unsigned int s235c3f9:1;
  unsigned int s235c3f10:1;
  unsigned int s235c3f11:1;
  unsigned int s235c3f12:1;
  unsigned int s235c3f13:1;
  unsigned int s235c3f14:1;
  unsigned int s235c3f15:1;
  unsigned int s235c3f16:1;
  unsigned int s235c3f17:1;
  unsigned int s235c3f18:1;
  void *s235c3f19;
  ::S235C11_nt s235c3f20;
  ::S836C25 s235c3f21;
  unsigned int s235c3f22:1;
  ::S235C11_nt s235c3f23;
  ::S235C11_nt s235c3f24;
  ::S235C17 s235c3f25;
  ::S235C17 s235c3f26;
  char s235c3f27[2];
  ::S235C9_nt s235c3f28;
  int s235c3f29[3];
  char s235c3f30[2];
  int s235c3f31[2];
  virtual  ~S235C3(); // _ZN6S235C3D1Ev
  virtual void  v96(); // _ZN6S235C33v96Ev
  virtual void  v97(); // _ZN6S235C33v97Ev
  virtual void  v98(); // _ZN6S235C33v98Ev
  virtual void  v99(); // _ZN6S235C33v99Ev
  virtual void  v100(); // _ZN6S235C34v100Ev
  virtual void  v101(); // _ZN6S235C34v101Ev
  virtual void  v102(); // _ZN6S235C34v102Ev
  virtual void  v103(); // _ZN6S235C34v103Ev
  virtual void  v104(); // _ZN6S235C34v104Ev
  virtual void  v105(); // _ZN6S235C34v105Ev
  virtual void  v106(); // _ZN6S235C34v106Ev
  virtual void  v107(); // _ZN6S235C34v107Ev
  virtual void  v108(); // _ZN6S235C34v108Ev
  virtual void  v109(); // _ZN6S235C34v109Ev
  virtual void  v110(); // _ZN6S235C34v110Ev
  virtual void  v111(); // _ZN6S235C34v111Ev
  virtual void  v112(); // _ZN6S235C34v112Ev
  virtual void  v113(); // _ZN6S235C34v113Ev
  virtual void  v114(); // _ZN6S235C34v114Ev
  virtual void  v115(); // _ZN6S235C34v115Ev
  virtual void  v116(); // _ZN6S235C34v116Ev
  virtual void  v117(); // _ZN6S235C34v117Ev
  virtual void  v118(); // _ZN6S235C34v118Ev
  virtual void  v119(); // _ZN6S235C34v119Ev
  virtual void  v120(); // _ZN6S235C34v120Ev
  virtual void  v121(); // _ZN6S235C34v121Ev
  virtual void  v122(); // _ZN6S235C34v122Ev
  S235C3(); // tgen
};
//SIG(-1 S235C3) C1{ BC2{ BC3{ BC4{ vd v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 v91 Fi FL Fp[4] Fi[2] Fp FC5{ m Fi[2]} Fp[2]} vd v92 v93 v94 v95 v96 Fp FC5} vd v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 v110 v111 v112 v113 v114 v115 v116 v117 v118 Fp[2] Fi:1 Fi:1 Fi:1 Fi:1 Fc} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 Fp FC6{ m} FC6 FC7{ m Fi[4]} FC7 Fi FC8{ m} Fp Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fp FC9{ BC10{ BC11{ m Fp Fi[2]}}} FC12{ m} Fi:1 FC9 FC9 FC13{ BC14{ BC11}} FC13 Fc[2] FC7 Fi[3] Fc[2] Fi[2]}


 S235C3 ::~S235C3(){ note_dtor("S235C3", this);}
void  S235C3 ::v96(){vfunc_called(this, "_ZN6S235C33v96Ev");}
void  S235C3 ::v97(){vfunc_called(this, "_ZN6S235C33v97Ev");}
void  S235C3 ::v98(){vfunc_called(this, "_ZN6S235C33v98Ev");}
void  S235C3 ::v99(){vfunc_called(this, "_ZN6S235C33v99Ev");}
void  S235C3 ::v100(){vfunc_called(this, "_ZN6S235C34v100Ev");}
void  S235C3 ::v101(){vfunc_called(this, "_ZN6S235C34v101Ev");}
void  S235C3 ::v102(){vfunc_called(this, "_ZN6S235C34v102Ev");}
void  S235C3 ::v103(){vfunc_called(this, "_ZN6S235C34v103Ev");}
void  S235C3 ::v104(){vfunc_called(this, "_ZN6S235C34v104Ev");}
void  S235C3 ::v105(){vfunc_called(this, "_ZN6S235C34v105Ev");}
void  S235C3 ::v106(){vfunc_called(this, "_ZN6S235C34v106Ev");}
void  S235C3 ::v107(){vfunc_called(this, "_ZN6S235C34v107Ev");}
void  S235C3 ::v108(){vfunc_called(this, "_ZN6S235C34v108Ev");}
void  S235C3 ::v109(){vfunc_called(this, "_ZN6S235C34v109Ev");}
void  S235C3 ::v110(){vfunc_called(this, "_ZN6S235C34v110Ev");}
void  S235C3 ::v111(){vfunc_called(this, "_ZN6S235C34v111Ev");}
void  S235C3 ::v112(){vfunc_called(this, "_ZN6S235C34v112Ev");}
void  S235C3 ::v113(){vfunc_called(this, "_ZN6S235C34v113Ev");}
void  S235C3 ::v114(){vfunc_called(this, "_ZN6S235C34v114Ev");}
void  S235C3 ::v115(){vfunc_called(this, "_ZN6S235C34v115Ev");}
void  S235C3 ::v116(){vfunc_called(this, "_ZN6S235C34v116Ev");}
void  S235C3 ::v117(){vfunc_called(this, "_ZN6S235C34v117Ev");}
void  S235C3 ::v118(){vfunc_called(this, "_ZN6S235C34v118Ev");}
void  S235C3 ::v119(){vfunc_called(this, "_ZN6S235C34v119Ev");}
void  S235C3 ::v120(){vfunc_called(this, "_ZN6S235C34v120Ev");}
void  S235C3 ::v121(){vfunc_called(this, "_ZN6S235C34v121Ev");}
void  S235C3 ::v122(){vfunc_called(this, "_ZN6S235C34v122Ev");}
S235C3 ::S235C3(){ note_ctor("S235C3", this);} // tgen

static void Test_S235C3()
{
  extern Class_Descriptor cd_S235C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(45,64)];
    init_test(&cd_S235C3, buf);
    S235C3 *dp, &lv = *(dp=new (buf) S235C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(352,252), "sizeof(S235C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S235C3)");
    check_base_class_offset(lv, (S235C6_nt*)(S235C5_nt*)(S235C4_nt*), 0, "S235C3");
    check_base_class_offset(lv, (S235C5_nt*)(S235C4_nt*), 0, "S235C3");
    check_base_class_offset(lv, (S235C4_nt*), 0, "S235C3");
    check_field_offset(lv, s235c3f0, ABISELECT(136,84), "S235C3.s235c3f0");
    check_field_offset(lv, s235c3f1, ABISELECT(144,88), "S235C3.s235c3f1");
    check_field_offset(lv, s235c3f2, ABISELECT(145,89), "S235C3.s235c3f2");
    check_field_offset(lv, s235c3f3, ABISELECT(148,92), "S235C3.s235c3f3");
    check_field_offset(lv, s235c3f4, ABISELECT(164,108), "S235C3.s235c3f4");
    check_field_offset(lv, s235c3f5, ABISELECT(180,124), "S235C3.s235c3f5");
    check_field_offset(lv, s235c3f6, ABISELECT(184,128), "S235C3.s235c3f6");
    check_field_offset(lv, s235c3f7, ABISELECT(192,132), "S235C3.s235c3f7");
    set_bf_and_test(lv, s235c3f8, ABISELECT(200,136), 0, 1, 1, "S235C3");
    set_bf_and_test(lv, s235c3f9, ABISELECT(200,136), 1, 1, 1, "S235C3");
    set_bf_and_test(lv, s235c3f10, ABISELECT(200,136), 2, 1, 1, "S235C3");
    set_bf_and_test(lv, s235c3f11, ABISELECT(200,136), 3, 1, 1, "S235C3");
    set_bf_and_test(lv, s235c3f12, ABISELECT(200,136), 4, 1, 1, "S235C3");
    set_bf_and_test(lv, s235c3f13, ABISELECT(200,136), 5, 1, 1, "S235C3");
    set_bf_and_test(lv, s235c3f14, ABISELECT(200,136), 6, 1, 1, "S235C3");
    set_bf_and_test(lv, s235c3f15, ABISELECT(200,136), 7, 1, 1, "S235C3");
    set_bf_and_test(lv, s235c3f16, ABISELECT(201,137), 0, 1, 1, "S235C3");
    set_bf_and_test(lv, s235c3f17, ABISELECT(201,137), 1, 1, 1, "S235C3");
    set_bf_and_test(lv, s235c3f18, ABISELECT(201,137), 2, 1, 1, "S235C3");
    check_field_offset(lv, s235c3f19, ABISELECT(208,140), "S235C3.s235c3f19");
    check_field_offset(lv, s235c3f20, ABISELECT(216,144), "S235C3.s235c3f20");
    check_field_offset(lv, s235c3f21, ABISELECT(232,156), "S235C3.s235c3f21");
    set_bf_and_test(lv, s235c3f22, ABISELECT(233,157), 0, 1, 1, "S235C3");
    check_field_offset(lv, s235c3f23, ABISELECT(240,160), "S235C3.s235c3f23");
    check_field_offset(lv, s235c3f24, ABISELECT(256,172), "S235C3.s235c3f24");
    check_field_offset(lv, s235c3f25, ABISELECT(272,184), "S235C3.s235c3f25");
    check_field_offset(lv, s235c3f26, ABISELECT(288,196), "S235C3.s235c3f26");
    check_field_offset(lv, s235c3f27, ABISELECT(304,208), "S235C3.s235c3f27");
    check_field_offset(lv, s235c3f28, ABISELECT(308,212), "S235C3.s235c3f28");
    check_field_offset(lv, s235c3f29, ABISELECT(324,228), "S235C3.s235c3f29");
    check_field_offset(lv, s235c3f30, ABISELECT(336,240), "S235C3.s235c3f30");
    check_field_offset(lv, s235c3f31, ABISELECT(340,244), "S235C3.s235c3f31");
    test_class_info(&lv, &cd_S235C3);
    dp->~S235C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS235C3(Test_S235C3, "S235C3", ABISELECT(352,252));

#else // __cplusplus

extern void _ZN6S235C3C1Ev();
extern void _ZN6S235C3D1Ev();
Name_Map name_map_S235C3[] = {
  NSPAIR(_ZN6S235C3C1Ev),
  NSPAIR(_ZN6S235C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S235C6_nt;
extern VTBL_ENTRY _ZTI9S235C6_nt[];
extern  VTBL_ENTRY _ZTV9S235C6_nt[];
extern Class_Descriptor cd_S235C5_nt;
extern VTBL_ENTRY _ZTI9S235C5_nt[];
extern  VTBL_ENTRY _ZTV9S235C5_nt[];
extern Class_Descriptor cd_S235C4_nt;
extern VTBL_ENTRY _ZTI9S235C4_nt[];
extern  VTBL_ENTRY _ZTV9S235C4_nt[];
static Base_Class bases_S235C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S235C6_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S235C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S235C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S235C3[];
extern void _ZN6S235C3D1Ev();
extern void _ZN6S235C3D0Ev();
extern void _ZN9S235C6_nt2v5Ev();
extern void _ZN9S235C6_nt2v6Ev();
extern void _ZN9S235C6_nt2v7Ev();
extern void _ZN9S235C6_nt2v8Ev();
extern void _ZN9S235C6_nt2v9Ev();
extern void _ZN9S235C6_nt3v10Ev();
extern void _ZN9S235C6_nt3v11Ev();
extern void _ZN9S235C6_nt3v12Ev();
extern void _ZN9S235C6_nt3v13Ev();
extern void _ZN9S235C6_nt3v14Ev();
extern void _ZN9S235C6_nt3v15Ev();
extern void _ZN9S235C6_nt3v16Ev();
extern void _ZN9S235C6_nt3v17Ev();
extern void _ZN9S235C6_nt3v18Ev();
extern void _ZN9S235C6_nt3v19Ev();
extern void _ZN9S235C6_nt3v20Ev();
extern void _ZN9S235C6_nt3v21Ev();
extern void _ZN9S235C6_nt3v22Ev();
extern void _ZN9S235C6_nt3v23Ev();
extern void _ZN9S235C6_nt3v24Ev();
extern void _ZN9S235C6_nt3v25Ev();
extern void _ZN9S235C6_nt3v26Ev();
extern void _ZN9S235C6_nt3v27Ev();
extern void _ZN9S235C6_nt3v28Ev();
extern void _ZN9S235C6_nt3v29Ev();
extern void _ZN9S235C6_nt3v30Ev();
extern void _ZN9S235C6_nt3v31Ev();
extern void _ZN9S235C6_nt3v32Ev();
extern void _ZN9S235C6_nt3v33Ev();
extern void _ZN9S235C6_nt3v34Ev();
extern void _ZN9S235C6_nt3v35Ev();
extern void _ZN9S235C6_nt3v36Ev();
extern void _ZN9S235C6_nt3v37Ev();
extern void _ZN9S235C6_nt3v38Ev();
extern void _ZN9S235C6_nt3v39Ev();
extern void _ZN9S235C6_nt3v40Ev();
extern void _ZN9S235C6_nt3v41Ev();
extern void _ZN9S235C6_nt3v42Ev();
extern void _ZN9S235C6_nt3v43Ev();
extern void _ZN9S235C6_nt3v44Ev();
extern void _ZN9S235C6_nt3v45Ev();
extern void _ZN9S235C6_nt3v46Ev();
extern void _ZN9S235C6_nt3v47Ev();
extern void _ZN9S235C6_nt3v48Ev();
extern void _ZN9S235C6_nt3v49Ev();
extern void _ZN9S235C6_nt3v50Ev();
extern void _ZN9S235C6_nt3v51Ev();
extern void _ZN9S235C6_nt3v52Ev();
extern void _ZN9S235C6_nt3v53Ev();
extern void _ZN9S235C6_nt3v54Ev();
extern void _ZN9S235C6_nt3v55Ev();
extern void _ZN9S235C6_nt3v56Ev();
extern void _ZN9S235C6_nt3v57Ev();
extern void _ZN9S235C6_nt3v58Ev();
extern void _ZN9S235C6_nt3v59Ev();
extern void _ZN9S235C6_nt3v60Ev();
extern void _ZN9S235C6_nt3v61Ev();
extern void _ZN9S235C6_nt3v62Ev();
extern void _ZN9S235C6_nt3v63Ev();
extern void _ZN9S235C6_nt3v64Ev();
extern void _ZN9S235C6_nt3v65Ev();
extern void _ZN9S235C6_nt3v66Ev();
extern void _ZN9S235C6_nt3v67Ev();
extern void _ZN9S235C6_nt3v68Ev();
extern void _ZN9S235C5_nt3v69Ev();
extern void _ZN9S235C5_nt3v70Ev();
extern void _ZN9S235C5_nt3v71Ev();
extern void _ZN9S235C5_nt3v72Ev();
extern void _ZN9S235C5_nt3v73Ev();
extern void _ZN9S235C4_nt3v74Ev();
extern void _ZN9S235C4_nt3v75Ev();
extern void _ZN9S235C4_nt3v76Ev();
extern void _ZN9S235C4_nt3v77Ev();
extern void _ZN9S235C4_nt3v78Ev();
extern void _ZN9S235C4_nt3v79Ev();
extern void _ZN9S235C4_nt3v80Ev();
extern void _ZN9S235C4_nt3v81Ev();
extern void _ZN9S235C4_nt3v82Ev();
extern void _ZN9S235C4_nt3v83Ev();
extern void _ZN9S235C4_nt3v84Ev();
extern void _ZN9S235C4_nt3v85Ev();
extern void _ZN9S235C4_nt3v86Ev();
extern void _ZN9S235C4_nt3v87Ev();
extern void _ZN9S235C4_nt3v88Ev();
extern void _ZN9S235C4_nt3v89Ev();
extern void _ZN9S235C4_nt3v90Ev();
extern void _ZN9S235C4_nt3v91Ev();
extern void _ZN9S235C4_nt3v92Ev();
extern void _ZN9S235C4_nt3v93Ev();
extern void _ZN9S235C4_nt3v94Ev();
extern void _ZN9S235C4_nt3v95Ev();
extern void _ZN6S235C33v96Ev();
extern void _ZN6S235C33v97Ev();
extern void _ZN6S235C33v98Ev();
extern void _ZN6S235C33v99Ev();
extern void _ZN6S235C34v100Ev();
extern void _ZN6S235C34v101Ev();
extern void _ZN6S235C34v102Ev();
extern void _ZN6S235C34v103Ev();
extern void _ZN6S235C34v104Ev();
extern void _ZN6S235C34v105Ev();
extern void _ZN6S235C34v106Ev();
extern void _ZN6S235C34v107Ev();
extern void _ZN6S235C34v108Ev();
extern void _ZN6S235C34v109Ev();
extern void _ZN6S235C34v110Ev();
extern void _ZN6S235C34v111Ev();
extern void _ZN6S235C34v112Ev();
extern void _ZN6S235C34v113Ev();
extern void _ZN6S235C34v114Ev();
extern void _ZN6S235C34v115Ev();
extern void _ZN6S235C34v116Ev();
extern void _ZN6S235C34v117Ev();
extern void _ZN6S235C34v118Ev();
extern void _ZN6S235C34v119Ev();
extern void _ZN6S235C34v120Ev();
extern void _ZN6S235C34v121Ev();
extern void _ZN6S235C34v122Ev();
static  VTBL_ENTRY vtc_S235C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S235C3[0]),
  (VTBL_ENTRY)&_ZN6S235C3D1Ev,
  (VTBL_ENTRY)&_ZN6S235C3D0Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt2v5Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt2v6Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt2v7Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt2v8Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt2v9Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v10Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v11Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v12Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v13Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v14Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v15Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v16Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v17Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v18Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v19Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v20Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v21Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v22Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v23Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v24Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v25Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v26Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v27Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v28Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v29Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v30Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v31Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v32Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v33Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v34Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v35Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v36Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v37Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v38Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v39Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v40Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v41Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v42Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v43Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v44Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v45Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v46Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v47Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v48Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v49Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v50Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v51Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v52Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v53Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v54Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v55Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v56Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v57Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v58Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v59Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v60Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v61Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v62Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v63Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v64Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v65Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v66Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v67Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v68Ev,
  (VTBL_ENTRY)&_ZN9S235C5_nt3v69Ev,
  (VTBL_ENTRY)&_ZN9S235C5_nt3v70Ev,
  (VTBL_ENTRY)&_ZN9S235C5_nt3v71Ev,
  (VTBL_ENTRY)&_ZN9S235C5_nt3v72Ev,
  (VTBL_ENTRY)&_ZN9S235C5_nt3v73Ev,
  (VTBL_ENTRY)&_ZN9S235C4_nt3v74Ev,
  (VTBL_ENTRY)&_ZN9S235C4_nt3v75Ev,
  (VTBL_ENTRY)&_ZN9S235C4_nt3v76Ev,
  (VTBL_ENTRY)&_ZN9S235C4_nt3v77Ev,
  (VTBL_ENTRY)&_ZN9S235C4_nt3v78Ev,
  (VTBL_ENTRY)&_ZN9S235C4_nt3v79Ev,
  (VTBL_ENTRY)&_ZN9S235C4_nt3v80Ev,
  (VTBL_ENTRY)&_ZN9S235C4_nt3v81Ev,
  (VTBL_ENTRY)&_ZN9S235C4_nt3v82Ev,
  (VTBL_ENTRY)&_ZN9S235C4_nt3v83Ev,
  (VTBL_ENTRY)&_ZN9S235C4_nt3v84Ev,
  (VTBL_ENTRY)&_ZN9S235C4_nt3v85Ev,
  (VTBL_ENTRY)&_ZN9S235C4_nt3v86Ev,
  (VTBL_ENTRY)&_ZN9S235C4_nt3v87Ev,
  (VTBL_ENTRY)&_ZN9S235C4_nt3v88Ev,
  (VTBL_ENTRY)&_ZN9S235C4_nt3v89Ev,
  (VTBL_ENTRY)&_ZN9S235C4_nt3v90Ev,
  (VTBL_ENTRY)&_ZN9S235C4_nt3v91Ev,
  (VTBL_ENTRY)&_ZN9S235C4_nt3v92Ev,
  (VTBL_ENTRY)&_ZN9S235C4_nt3v93Ev,
  (VTBL_ENTRY)&_ZN9S235C4_nt3v94Ev,
  (VTBL_ENTRY)&_ZN9S235C4_nt3v95Ev,
  (VTBL_ENTRY)&_ZN6S235C33v96Ev,
  (VTBL_ENTRY)&_ZN6S235C33v97Ev,
  (VTBL_ENTRY)&_ZN6S235C33v98Ev,
  (VTBL_ENTRY)&_ZN6S235C33v99Ev,
  (VTBL_ENTRY)&_ZN6S235C34v100Ev,
  (VTBL_ENTRY)&_ZN6S235C34v101Ev,
  (VTBL_ENTRY)&_ZN6S235C34v102Ev,
  (VTBL_ENTRY)&_ZN6S235C34v103Ev,
  (VTBL_ENTRY)&_ZN6S235C34v104Ev,
  (VTBL_ENTRY)&_ZN6S235C34v105Ev,
  (VTBL_ENTRY)&_ZN6S235C34v106Ev,
  (VTBL_ENTRY)&_ZN6S235C34v107Ev,
  (VTBL_ENTRY)&_ZN6S235C34v108Ev,
  (VTBL_ENTRY)&_ZN6S235C34v109Ev,
  (VTBL_ENTRY)&_ZN6S235C34v110Ev,
  (VTBL_ENTRY)&_ZN6S235C34v111Ev,
  (VTBL_ENTRY)&_ZN6S235C34v112Ev,
  (VTBL_ENTRY)&_ZN6S235C34v113Ev,
  (VTBL_ENTRY)&_ZN6S235C34v114Ev,
  (VTBL_ENTRY)&_ZN6S235C34v115Ev,
  (VTBL_ENTRY)&_ZN6S235C34v116Ev,
  (VTBL_ENTRY)&_ZN6S235C34v117Ev,
  (VTBL_ENTRY)&_ZN6S235C34v118Ev,
  (VTBL_ENTRY)&_ZN6S235C34v119Ev,
  (VTBL_ENTRY)&_ZN6S235C34v120Ev,
  (VTBL_ENTRY)&_ZN6S235C34v121Ev,
  (VTBL_ENTRY)&_ZN6S235C34v122Ev,
};
extern VTBL_ENTRY _ZTI6S235C3[];
extern  VTBL_ENTRY _ZTV6S235C3[];
Class_Descriptor cd_S235C3 = {  "S235C3", // class name
  bases_S235C3, 3,
  &(vtc_S235C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(352,252), // object size
  NSPAIRA(_ZTI6S235C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S235C3),122, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S235C20_nt  {
  int s235c20f0[3];
  void  mf235c20(); // _ZN10S235C20_nt8mf235c20Ev
};
//SIG(-1 S235C20_nt) C1{ m Fi[3]}


void  S235C20_nt ::mf235c20(){}

//skip512 S235C20_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S235C2  : S235C3 {
  int s235c2f0[4];
  ::S836C39 s235c2f1;
  ::S235C20_nt s235c2f2;
  void *s235c2f3;
  virtual  ~S235C2(); // _ZN6S235C2D1Ev
  virtual void  v123(); // _ZN6S235C24v123Ev
  virtual void  v124(); // _ZN6S235C24v124Ev
  virtual void  v125(); // _ZN6S235C24v125Ev
  virtual void  v126(); // _ZN6S235C24v126Ev
  virtual void  v127(); // _ZN6S235C24v127Ev
  virtual void  v128(); // _ZN6S235C24v128Ev
  virtual void  v129(); // _ZN6S235C24v129Ev
  virtual void  v130(); // _ZN6S235C24v130Ev
  virtual void  v131(); // _ZN6S235C24v131Ev
  virtual void  v132(); // _ZN6S235C24v132Ev
  virtual void  v133(); // _ZN6S235C24v133Ev
  virtual void  v134(); // _ZN6S235C24v134Ev
  virtual void  v135(); // _ZN6S235C24v135Ev
  virtual void  v136(); // _ZN6S235C24v136Ev
  S235C2(); // tgen
};
//SIG(-1 S235C2) C1{ BC2{ BC3{ BC4{ BC5{ vd v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 Fi FL Fp[4] Fi[2] Fp FC6{ m Fi[2]} Fp[2]} vd v79 v80 v81 v82 v83 Fp FC6} vd v84 v85 v86 v87 v88 v89 v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 Fp[2] Fi:1 Fi:1 Fi:1 Fi:1 Fc} vd v106 v107 v108 v109 v110 v111 v112 v113 v114 v115 v116 v117 v118 v119 v120 v121 v122 v123 v124 v125 v126 v127 v128 v129 v130 v131 v132 Fp FC7{ m} FC7 FC8{ m Fi[4]} FC8 Fi FC9{ m} Fp Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fp FC10{ BC11{ BC12{ m Fp Fi[2]}}} FC13{ m} Fi:1 FC10 FC10 FC14{ BC15{ BC12}} FC14 Fc[2] FC8 Fi[3] Fc[2] Fi[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 Fi[4] FC7 FC16{ m Fi[3]} Fp}


 S235C2 ::~S235C2(){ note_dtor("S235C2", this);}
void  S235C2 ::v123(){vfunc_called(this, "_ZN6S235C24v123Ev");}
void  S235C2 ::v124(){vfunc_called(this, "_ZN6S235C24v124Ev");}
void  S235C2 ::v125(){vfunc_called(this, "_ZN6S235C24v125Ev");}
void  S235C2 ::v126(){vfunc_called(this, "_ZN6S235C24v126Ev");}
void  S235C2 ::v127(){vfunc_called(this, "_ZN6S235C24v127Ev");}
void  S235C2 ::v128(){vfunc_called(this, "_ZN6S235C24v128Ev");}
void  S235C2 ::v129(){vfunc_called(this, "_ZN6S235C24v129Ev");}
void  S235C2 ::v130(){vfunc_called(this, "_ZN6S235C24v130Ev");}
void  S235C2 ::v131(){vfunc_called(this, "_ZN6S235C24v131Ev");}
void  S235C2 ::v132(){vfunc_called(this, "_ZN6S235C24v132Ev");}
void  S235C2 ::v133(){vfunc_called(this, "_ZN6S235C24v133Ev");}
void  S235C2 ::v134(){vfunc_called(this, "_ZN6S235C24v134Ev");}
void  S235C2 ::v135(){vfunc_called(this, "_ZN6S235C24v135Ev");}
void  S235C2 ::v136(){vfunc_called(this, "_ZN6S235C24v136Ev");}
S235C2 ::S235C2(){ note_ctor("S235C2", this);} // tgen

static void Test_S235C2()
{
  extern Class_Descriptor cd_S235C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(50,73)];
    init_test(&cd_S235C2, buf);
    S235C2 *dp, &lv = *(dp=new (buf) S235C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(392,288), "sizeof(S235C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S235C2)");
    check_base_class_offset(lv, (S235C6_nt*)(S235C5_nt*)(S235C4_nt*)(S235C3*), 0, "S235C2");
    check_base_class_offset(lv, (S235C5_nt*)(S235C4_nt*)(S235C3*), 0, "S235C2");
    check_base_class_offset(lv, (S235C4_nt*)(S235C3*), 0, "S235C2");
    check_base_class_offset(lv, (S235C3*), 0, "S235C2");
    check_field_offset(lv, s235c2f0, ABISELECT(348,252), "S235C2.s235c2f0");
    check_field_offset(lv, s235c2f1, ABISELECT(364,268), "S235C2.s235c2f1");
    check_field_offset(lv, s235c2f2, ABISELECT(368,272), "S235C2.s235c2f2");
    check_field_offset(lv, s235c2f3, ABISELECT(384,284), "S235C2.s235c2f3");
    test_class_info(&lv, &cd_S235C2);
    dp->~S235C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS235C2(Test_S235C2, "S235C2", ABISELECT(392,288));

#else // __cplusplus

extern void _ZN6S235C2C1Ev();
extern void _ZN6S235C2D1Ev();
Name_Map name_map_S235C2[] = {
  NSPAIR(_ZN6S235C2C1Ev),
  NSPAIR(_ZN6S235C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S235C6_nt;
extern VTBL_ENTRY _ZTI9S235C6_nt[];
extern  VTBL_ENTRY _ZTV9S235C6_nt[];
extern Class_Descriptor cd_S235C5_nt;
extern VTBL_ENTRY _ZTI9S235C5_nt[];
extern  VTBL_ENTRY _ZTV9S235C5_nt[];
extern Class_Descriptor cd_S235C4_nt;
extern VTBL_ENTRY _ZTI9S235C4_nt[];
extern  VTBL_ENTRY _ZTV9S235C4_nt[];
extern Class_Descriptor cd_S235C3;
extern VTBL_ENTRY _ZTI6S235C3[];
extern  VTBL_ENTRY _ZTV6S235C3[];
static Base_Class bases_S235C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S235C6_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S235C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S235C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S235C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S235C2[];
extern void _ZN6S235C2D1Ev();
extern void _ZN6S235C2D0Ev();
extern void _ZN9S235C6_nt2v5Ev();
extern void _ZN9S235C6_nt2v6Ev();
extern void _ZN9S235C6_nt2v7Ev();
extern void _ZN9S235C6_nt2v8Ev();
extern void _ZN9S235C6_nt2v9Ev();
extern void _ZN9S235C6_nt3v10Ev();
extern void _ZN9S235C6_nt3v11Ev();
extern void _ZN9S235C6_nt3v12Ev();
extern void _ZN9S235C6_nt3v13Ev();
extern void _ZN9S235C6_nt3v14Ev();
extern void _ZN9S235C6_nt3v15Ev();
extern void _ZN9S235C6_nt3v16Ev();
extern void _ZN9S235C6_nt3v17Ev();
extern void _ZN9S235C6_nt3v18Ev();
extern void _ZN9S235C6_nt3v19Ev();
extern void _ZN9S235C6_nt3v20Ev();
extern void _ZN9S235C6_nt3v21Ev();
extern void _ZN9S235C6_nt3v22Ev();
extern void _ZN9S235C6_nt3v23Ev();
extern void _ZN9S235C6_nt3v24Ev();
extern void _ZN9S235C6_nt3v25Ev();
extern void _ZN9S235C6_nt3v26Ev();
extern void _ZN9S235C6_nt3v27Ev();
extern void _ZN9S235C6_nt3v28Ev();
extern void _ZN9S235C6_nt3v29Ev();
extern void _ZN9S235C6_nt3v30Ev();
extern void _ZN9S235C6_nt3v31Ev();
extern void _ZN9S235C6_nt3v32Ev();
extern void _ZN9S235C6_nt3v33Ev();
extern void _ZN9S235C6_nt3v34Ev();
extern void _ZN9S235C6_nt3v35Ev();
extern void _ZN9S235C6_nt3v36Ev();
extern void _ZN9S235C6_nt3v37Ev();
extern void _ZN9S235C6_nt3v38Ev();
extern void _ZN9S235C6_nt3v39Ev();
extern void _ZN9S235C6_nt3v40Ev();
extern void _ZN9S235C6_nt3v41Ev();
extern void _ZN9S235C6_nt3v42Ev();
extern void _ZN9S235C6_nt3v43Ev();
extern void _ZN9S235C6_nt3v44Ev();
extern void _ZN9S235C6_nt3v45Ev();
extern void _ZN9S235C6_nt3v46Ev();
extern void _ZN9S235C6_nt3v47Ev();
extern void _ZN9S235C6_nt3v48Ev();
extern void _ZN9S235C6_nt3v49Ev();
extern void _ZN9S235C6_nt3v50Ev();
extern void _ZN9S235C6_nt3v51Ev();
extern void _ZN9S235C6_nt3v52Ev();
extern void _ZN9S235C6_nt3v53Ev();
extern void _ZN9S235C6_nt3v54Ev();
extern void _ZN9S235C6_nt3v55Ev();
extern void _ZN9S235C6_nt3v56Ev();
extern void _ZN9S235C6_nt3v57Ev();
extern void _ZN9S235C6_nt3v58Ev();
extern void _ZN9S235C6_nt3v59Ev();
extern void _ZN9S235C6_nt3v60Ev();
extern void _ZN9S235C6_nt3v61Ev();
extern void _ZN9S235C6_nt3v62Ev();
extern void _ZN9S235C6_nt3v63Ev();
extern void _ZN9S235C6_nt3v64Ev();
extern void _ZN9S235C6_nt3v65Ev();
extern void _ZN9S235C6_nt3v66Ev();
extern void _ZN9S235C6_nt3v67Ev();
extern void _ZN9S235C6_nt3v68Ev();
extern void _ZN9S235C5_nt3v69Ev();
extern void _ZN9S235C5_nt3v70Ev();
extern void _ZN9S235C5_nt3v71Ev();
extern void _ZN9S235C5_nt3v72Ev();
extern void _ZN9S235C5_nt3v73Ev();
extern void _ZN9S235C4_nt3v74Ev();
extern void _ZN9S235C4_nt3v75Ev();
extern void _ZN9S235C4_nt3v76Ev();
extern void _ZN9S235C4_nt3v77Ev();
extern void _ZN9S235C4_nt3v78Ev();
extern void _ZN9S235C4_nt3v79Ev();
extern void _ZN9S235C4_nt3v80Ev();
extern void _ZN9S235C4_nt3v81Ev();
extern void _ZN9S235C4_nt3v82Ev();
extern void _ZN9S235C4_nt3v83Ev();
extern void _ZN9S235C4_nt3v84Ev();
extern void _ZN9S235C4_nt3v85Ev();
extern void _ZN9S235C4_nt3v86Ev();
extern void _ZN9S235C4_nt3v87Ev();
extern void _ZN9S235C4_nt3v88Ev();
extern void _ZN9S235C4_nt3v89Ev();
extern void _ZN9S235C4_nt3v90Ev();
extern void _ZN9S235C4_nt3v91Ev();
extern void _ZN9S235C4_nt3v92Ev();
extern void _ZN9S235C4_nt3v93Ev();
extern void _ZN9S235C4_nt3v94Ev();
extern void _ZN9S235C4_nt3v95Ev();
extern void _ZN6S235C33v96Ev();
extern void _ZN6S235C33v97Ev();
extern void _ZN6S235C33v98Ev();
extern void _ZN6S235C33v99Ev();
extern void _ZN6S235C34v100Ev();
extern void _ZN6S235C34v101Ev();
extern void _ZN6S235C34v102Ev();
extern void _ZN6S235C34v103Ev();
extern void _ZN6S235C34v104Ev();
extern void _ZN6S235C34v105Ev();
extern void _ZN6S235C34v106Ev();
extern void _ZN6S235C34v107Ev();
extern void _ZN6S235C34v108Ev();
extern void _ZN6S235C34v109Ev();
extern void _ZN6S235C34v110Ev();
extern void _ZN6S235C34v111Ev();
extern void _ZN6S235C34v112Ev();
extern void _ZN6S235C34v113Ev();
extern void _ZN6S235C34v114Ev();
extern void _ZN6S235C34v115Ev();
extern void _ZN6S235C34v116Ev();
extern void _ZN6S235C34v117Ev();
extern void _ZN6S235C34v118Ev();
extern void _ZN6S235C34v119Ev();
extern void _ZN6S235C34v120Ev();
extern void _ZN6S235C34v121Ev();
extern void _ZN6S235C34v122Ev();
extern void _ZN6S235C24v123Ev();
extern void _ZN6S235C24v124Ev();
extern void _ZN6S235C24v125Ev();
extern void _ZN6S235C24v126Ev();
extern void _ZN6S235C24v127Ev();
extern void _ZN6S235C24v128Ev();
extern void _ZN6S235C24v129Ev();
extern void _ZN6S235C24v130Ev();
extern void _ZN6S235C24v131Ev();
extern void _ZN6S235C24v132Ev();
extern void _ZN6S235C24v133Ev();
extern void _ZN6S235C24v134Ev();
extern void _ZN6S235C24v135Ev();
extern void _ZN6S235C24v136Ev();
static  VTBL_ENTRY vtc_S235C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S235C2[0]),
  (VTBL_ENTRY)&_ZN6S235C2D1Ev,
  (VTBL_ENTRY)&_ZN6S235C2D0Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt2v5Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt2v6Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt2v7Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt2v8Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt2v9Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v10Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v11Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v12Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v13Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v14Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v15Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v16Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v17Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v18Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v19Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v20Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v21Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v22Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v23Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v24Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v25Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v26Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v27Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v28Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v29Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v30Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v31Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v32Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v33Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v34Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v35Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v36Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v37Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v38Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v39Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v40Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v41Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v42Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v43Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v44Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v45Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v46Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v47Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v48Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v49Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v50Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v51Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v52Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v53Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v54Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v55Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v56Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v57Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v58Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v59Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v60Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v61Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v62Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v63Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v64Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v65Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v66Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v67Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v68Ev,
  (VTBL_ENTRY)&_ZN9S235C5_nt3v69Ev,
  (VTBL_ENTRY)&_ZN9S235C5_nt3v70Ev,
  (VTBL_ENTRY)&_ZN9S235C5_nt3v71Ev,
  (VTBL_ENTRY)&_ZN9S235C5_nt3v72Ev,
  (VTBL_ENTRY)&_ZN9S235C5_nt3v73Ev,
  (VTBL_ENTRY)&_ZN9S235C4_nt3v74Ev,
  (VTBL_ENTRY)&_ZN9S235C4_nt3v75Ev,
  (VTBL_ENTRY)&_ZN9S235C4_nt3v76Ev,
  (VTBL_ENTRY)&_ZN9S235C4_nt3v77Ev,
  (VTBL_ENTRY)&_ZN9S235C4_nt3v78Ev,
  (VTBL_ENTRY)&_ZN9S235C4_nt3v79Ev,
  (VTBL_ENTRY)&_ZN9S235C4_nt3v80Ev,
  (VTBL_ENTRY)&_ZN9S235C4_nt3v81Ev,
  (VTBL_ENTRY)&_ZN9S235C4_nt3v82Ev,
  (VTBL_ENTRY)&_ZN9S235C4_nt3v83Ev,
  (VTBL_ENTRY)&_ZN9S235C4_nt3v84Ev,
  (VTBL_ENTRY)&_ZN9S235C4_nt3v85Ev,
  (VTBL_ENTRY)&_ZN9S235C4_nt3v86Ev,
  (VTBL_ENTRY)&_ZN9S235C4_nt3v87Ev,
  (VTBL_ENTRY)&_ZN9S235C4_nt3v88Ev,
  (VTBL_ENTRY)&_ZN9S235C4_nt3v89Ev,
  (VTBL_ENTRY)&_ZN9S235C4_nt3v90Ev,
  (VTBL_ENTRY)&_ZN9S235C4_nt3v91Ev,
  (VTBL_ENTRY)&_ZN9S235C4_nt3v92Ev,
  (VTBL_ENTRY)&_ZN9S235C4_nt3v93Ev,
  (VTBL_ENTRY)&_ZN9S235C4_nt3v94Ev,
  (VTBL_ENTRY)&_ZN9S235C4_nt3v95Ev,
  (VTBL_ENTRY)&_ZN6S235C33v96Ev,
  (VTBL_ENTRY)&_ZN6S235C33v97Ev,
  (VTBL_ENTRY)&_ZN6S235C33v98Ev,
  (VTBL_ENTRY)&_ZN6S235C33v99Ev,
  (VTBL_ENTRY)&_ZN6S235C34v100Ev,
  (VTBL_ENTRY)&_ZN6S235C34v101Ev,
  (VTBL_ENTRY)&_ZN6S235C34v102Ev,
  (VTBL_ENTRY)&_ZN6S235C34v103Ev,
  (VTBL_ENTRY)&_ZN6S235C34v104Ev,
  (VTBL_ENTRY)&_ZN6S235C34v105Ev,
  (VTBL_ENTRY)&_ZN6S235C34v106Ev,
  (VTBL_ENTRY)&_ZN6S235C34v107Ev,
  (VTBL_ENTRY)&_ZN6S235C34v108Ev,
  (VTBL_ENTRY)&_ZN6S235C34v109Ev,
  (VTBL_ENTRY)&_ZN6S235C34v110Ev,
  (VTBL_ENTRY)&_ZN6S235C34v111Ev,
  (VTBL_ENTRY)&_ZN6S235C34v112Ev,
  (VTBL_ENTRY)&_ZN6S235C34v113Ev,
  (VTBL_ENTRY)&_ZN6S235C34v114Ev,
  (VTBL_ENTRY)&_ZN6S235C34v115Ev,
  (VTBL_ENTRY)&_ZN6S235C34v116Ev,
  (VTBL_ENTRY)&_ZN6S235C34v117Ev,
  (VTBL_ENTRY)&_ZN6S235C34v118Ev,
  (VTBL_ENTRY)&_ZN6S235C34v119Ev,
  (VTBL_ENTRY)&_ZN6S235C34v120Ev,
  (VTBL_ENTRY)&_ZN6S235C34v121Ev,
  (VTBL_ENTRY)&_ZN6S235C34v122Ev,
  (VTBL_ENTRY)&_ZN6S235C24v123Ev,
  (VTBL_ENTRY)&_ZN6S235C24v124Ev,
  (VTBL_ENTRY)&_ZN6S235C24v125Ev,
  (VTBL_ENTRY)&_ZN6S235C24v126Ev,
  (VTBL_ENTRY)&_ZN6S235C24v127Ev,
  (VTBL_ENTRY)&_ZN6S235C24v128Ev,
  (VTBL_ENTRY)&_ZN6S235C24v129Ev,
  (VTBL_ENTRY)&_ZN6S235C24v130Ev,
  (VTBL_ENTRY)&_ZN6S235C24v131Ev,
  (VTBL_ENTRY)&_ZN6S235C24v132Ev,
  (VTBL_ENTRY)&_ZN6S235C24v133Ev,
  (VTBL_ENTRY)&_ZN6S235C24v134Ev,
  (VTBL_ENTRY)&_ZN6S235C24v135Ev,
  (VTBL_ENTRY)&_ZN6S235C24v136Ev,
};
extern VTBL_ENTRY _ZTI6S235C2[];
extern  VTBL_ENTRY _ZTV6S235C2[];
Class_Descriptor cd_S235C2 = {  "S235C2", // class name
  bases_S235C2, 4,
  &(vtc_S235C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(392,288), // object size
  NSPAIRA(_ZTI6S235C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S235C2),136, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  4, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S235C23_nt  {
  void *s235c23f0;
  ::S235C7_nt s235c23f1;
  void  mf235c23(); // _ZN10S235C23_nt8mf235c23Ev
};
//SIG(-1 S235C23_nt) C1{ m Fp FC2{ m Fi[2]}}


void  S235C23_nt ::mf235c23(){}

//skip512 S235C23_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S235C1  : S235C2 {
  unsigned int s235c1f0:1;
  unsigned int s235c1f1:1;
  int s235c1f2[3];
  ::S235C17 s235c1f3;
  ::S235C23_nt s235c1f4;
  virtual  ~S235C1(); // _ZN6S235C1D1Ev
  virtual void  v1(); // _ZN6S235C12v1Ev
  virtual void  v2(); // _ZN6S235C12v2Ev
  virtual void  v3(); // _ZN6S235C12v3Ev
  virtual void  v4(); // _ZN6S235C12v4Ev
  S235C1(); // tgen
};
//SIG(1 S235C1) C1{ BC2{ BC3{ BC4{ BC5{ BC6{ vd v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 Fi FL Fp[4] Fi[2] Fp FC7{ m Fi[2]} Fp[2]} vd v69 v70 v71 v72 v73 Fp FC7} vd v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 v91 v92 v93 v94 v95 Fp[2] Fi:1 Fi:1 Fi:1 Fi:1 Fc} vd v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 v110 v111 v112 v113 v114 v115 v116 v117 v118 v119 v120 v121 v122 Fp FC8{ m} FC8 FC9{ m Fi[4]} FC9 Fi FC10{ m} Fp Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fp FC11{ BC12{ BC13{ m Fp Fi[2]}}} FC14{ m} Fi:1 FC11 FC11 FC15{ BC16{ BC13}} FC15 Fc[2] FC9 Fi[3] Fc[2] Fi[2]} vd v123 v124 v125 v126 v127 v128 v129 v130 v131 v132 v133 v134 v135 v136 Fi[4] FC8 FC17{ m Fi[3]} Fp} vd v1 v2 v3 v4 Fi:1 Fi:1 Fi[3] FC15 FC18{ m Fp FC7}}


 S235C1 ::~S235C1(){ note_dtor("S235C1", this);}
void  S235C1 ::v1(){vfunc_called(this, "_ZN6S235C12v1Ev");}
void  S235C1 ::v2(){vfunc_called(this, "_ZN6S235C12v2Ev");}
void  S235C1 ::v3(){vfunc_called(this, "_ZN6S235C12v3Ev");}
void  S235C1 ::v4(){vfunc_called(this, "_ZN6S235C12v4Ev");}
S235C1 ::S235C1(){ note_ctor("S235C1", this);} // tgen

static void Test_S235C1()
{
  extern Class_Descriptor cd_S235C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(56,83)];
    init_test(&cd_S235C1, buf);
    S235C1 *dp, &lv = *(dp=new (buf) S235C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(440,328), "sizeof(S235C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S235C1)");
    check_base_class_offset(lv, (S235C6_nt*)(S235C5_nt*)(S235C4_nt*)(S235C3*)(S235C2*), 0, "S235C1");
    check_base_class_offset(lv, (S235C5_nt*)(S235C4_nt*)(S235C3*)(S235C2*), 0, "S235C1");
    check_base_class_offset(lv, (S235C4_nt*)(S235C3*)(S235C2*), 0, "S235C1");
    check_base_class_offset(lv, (S235C3*)(S235C2*), 0, "S235C1");
    check_base_class_offset(lv, (S235C2*), 0, "S235C1");
    set_bf_and_test(lv, s235c1f0, ABISELECT(392,288), 0, 1, 1, "S235C1");
    set_bf_and_test(lv, s235c1f1, ABISELECT(392,288), 1, 1, 1, "S235C1");
    check_field_offset(lv, s235c1f2, ABISELECT(396,292), "S235C1.s235c1f2");
    check_field_offset(lv, s235c1f3, ABISELECT(408,304), "S235C1.s235c1f3");
    check_field_offset(lv, s235c1f4, ABISELECT(424,316), "S235C1.s235c1f4");
    test_class_info(&lv, &cd_S235C1);
    dp->~S235C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS235C1(Test_S235C1, "S235C1", ABISELECT(440,328));

#else // __cplusplus

extern void _ZN6S235C1C1Ev();
extern void _ZN6S235C1D1Ev();
Name_Map name_map_S235C1[] = {
  NSPAIR(_ZN6S235C1C1Ev),
  NSPAIR(_ZN6S235C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S235C6_nt;
extern VTBL_ENTRY _ZTI9S235C6_nt[];
extern  VTBL_ENTRY _ZTV9S235C6_nt[];
extern Class_Descriptor cd_S235C5_nt;
extern VTBL_ENTRY _ZTI9S235C5_nt[];
extern  VTBL_ENTRY _ZTV9S235C5_nt[];
extern Class_Descriptor cd_S235C4_nt;
extern VTBL_ENTRY _ZTI9S235C4_nt[];
extern  VTBL_ENTRY _ZTV9S235C4_nt[];
extern Class_Descriptor cd_S235C3;
extern VTBL_ENTRY _ZTI6S235C3[];
extern  VTBL_ENTRY _ZTV6S235C3[];
extern Class_Descriptor cd_S235C2;
extern VTBL_ENTRY _ZTI6S235C2[];
extern  VTBL_ENTRY _ZTV6S235C2[];
static Base_Class bases_S235C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S235C6_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S235C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S235C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S235C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S235C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S235C1[];
extern void _ZN6S235C1D1Ev();
extern void _ZN6S235C1D0Ev();
extern void _ZN9S235C6_nt2v5Ev();
extern void _ZN9S235C6_nt2v6Ev();
extern void _ZN9S235C6_nt2v7Ev();
extern void _ZN9S235C6_nt2v8Ev();
extern void _ZN9S235C6_nt2v9Ev();
extern void _ZN9S235C6_nt3v10Ev();
extern void _ZN9S235C6_nt3v11Ev();
extern void _ZN9S235C6_nt3v12Ev();
extern void _ZN9S235C6_nt3v13Ev();
extern void _ZN9S235C6_nt3v14Ev();
extern void _ZN9S235C6_nt3v15Ev();
extern void _ZN9S235C6_nt3v16Ev();
extern void _ZN9S235C6_nt3v17Ev();
extern void _ZN9S235C6_nt3v18Ev();
extern void _ZN9S235C6_nt3v19Ev();
extern void _ZN9S235C6_nt3v20Ev();
extern void _ZN9S235C6_nt3v21Ev();
extern void _ZN9S235C6_nt3v22Ev();
extern void _ZN9S235C6_nt3v23Ev();
extern void _ZN9S235C6_nt3v24Ev();
extern void _ZN9S235C6_nt3v25Ev();
extern void _ZN9S235C6_nt3v26Ev();
extern void _ZN9S235C6_nt3v27Ev();
extern void _ZN9S235C6_nt3v28Ev();
extern void _ZN9S235C6_nt3v29Ev();
extern void _ZN9S235C6_nt3v30Ev();
extern void _ZN9S235C6_nt3v31Ev();
extern void _ZN9S235C6_nt3v32Ev();
extern void _ZN9S235C6_nt3v33Ev();
extern void _ZN9S235C6_nt3v34Ev();
extern void _ZN9S235C6_nt3v35Ev();
extern void _ZN9S235C6_nt3v36Ev();
extern void _ZN9S235C6_nt3v37Ev();
extern void _ZN9S235C6_nt3v38Ev();
extern void _ZN9S235C6_nt3v39Ev();
extern void _ZN9S235C6_nt3v40Ev();
extern void _ZN9S235C6_nt3v41Ev();
extern void _ZN9S235C6_nt3v42Ev();
extern void _ZN9S235C6_nt3v43Ev();
extern void _ZN9S235C6_nt3v44Ev();
extern void _ZN9S235C6_nt3v45Ev();
extern void _ZN9S235C6_nt3v46Ev();
extern void _ZN9S235C6_nt3v47Ev();
extern void _ZN9S235C6_nt3v48Ev();
extern void _ZN9S235C6_nt3v49Ev();
extern void _ZN9S235C6_nt3v50Ev();
extern void _ZN9S235C6_nt3v51Ev();
extern void _ZN9S235C6_nt3v52Ev();
extern void _ZN9S235C6_nt3v53Ev();
extern void _ZN9S235C6_nt3v54Ev();
extern void _ZN9S235C6_nt3v55Ev();
extern void _ZN9S235C6_nt3v56Ev();
extern void _ZN9S235C6_nt3v57Ev();
extern void _ZN9S235C6_nt3v58Ev();
extern void _ZN9S235C6_nt3v59Ev();
extern void _ZN9S235C6_nt3v60Ev();
extern void _ZN9S235C6_nt3v61Ev();
extern void _ZN9S235C6_nt3v62Ev();
extern void _ZN9S235C6_nt3v63Ev();
extern void _ZN9S235C6_nt3v64Ev();
extern void _ZN9S235C6_nt3v65Ev();
extern void _ZN9S235C6_nt3v66Ev();
extern void _ZN9S235C6_nt3v67Ev();
extern void _ZN9S235C6_nt3v68Ev();
extern void _ZN9S235C5_nt3v69Ev();
extern void _ZN9S235C5_nt3v70Ev();
extern void _ZN9S235C5_nt3v71Ev();
extern void _ZN9S235C5_nt3v72Ev();
extern void _ZN9S235C5_nt3v73Ev();
extern void _ZN9S235C4_nt3v74Ev();
extern void _ZN9S235C4_nt3v75Ev();
extern void _ZN9S235C4_nt3v76Ev();
extern void _ZN9S235C4_nt3v77Ev();
extern void _ZN9S235C4_nt3v78Ev();
extern void _ZN9S235C4_nt3v79Ev();
extern void _ZN9S235C4_nt3v80Ev();
extern void _ZN9S235C4_nt3v81Ev();
extern void _ZN9S235C4_nt3v82Ev();
extern void _ZN9S235C4_nt3v83Ev();
extern void _ZN9S235C4_nt3v84Ev();
extern void _ZN9S235C4_nt3v85Ev();
extern void _ZN9S235C4_nt3v86Ev();
extern void _ZN9S235C4_nt3v87Ev();
extern void _ZN9S235C4_nt3v88Ev();
extern void _ZN9S235C4_nt3v89Ev();
extern void _ZN9S235C4_nt3v90Ev();
extern void _ZN9S235C4_nt3v91Ev();
extern void _ZN9S235C4_nt3v92Ev();
extern void _ZN9S235C4_nt3v93Ev();
extern void _ZN9S235C4_nt3v94Ev();
extern void _ZN9S235C4_nt3v95Ev();
extern void _ZN6S235C33v96Ev();
extern void _ZN6S235C33v97Ev();
extern void _ZN6S235C33v98Ev();
extern void _ZN6S235C33v99Ev();
extern void _ZN6S235C34v100Ev();
extern void _ZN6S235C34v101Ev();
extern void _ZN6S235C34v102Ev();
extern void _ZN6S235C34v103Ev();
extern void _ZN6S235C34v104Ev();
extern void _ZN6S235C34v105Ev();
extern void _ZN6S235C34v106Ev();
extern void _ZN6S235C34v107Ev();
extern void _ZN6S235C34v108Ev();
extern void _ZN6S235C34v109Ev();
extern void _ZN6S235C34v110Ev();
extern void _ZN6S235C34v111Ev();
extern void _ZN6S235C34v112Ev();
extern void _ZN6S235C34v113Ev();
extern void _ZN6S235C34v114Ev();
extern void _ZN6S235C34v115Ev();
extern void _ZN6S235C34v116Ev();
extern void _ZN6S235C34v117Ev();
extern void _ZN6S235C34v118Ev();
extern void _ZN6S235C34v119Ev();
extern void _ZN6S235C34v120Ev();
extern void _ZN6S235C34v121Ev();
extern void _ZN6S235C34v122Ev();
extern void _ZN6S235C24v123Ev();
extern void _ZN6S235C24v124Ev();
extern void _ZN6S235C24v125Ev();
extern void _ZN6S235C24v126Ev();
extern void _ZN6S235C24v127Ev();
extern void _ZN6S235C24v128Ev();
extern void _ZN6S235C24v129Ev();
extern void _ZN6S235C24v130Ev();
extern void _ZN6S235C24v131Ev();
extern void _ZN6S235C24v132Ev();
extern void _ZN6S235C24v133Ev();
extern void _ZN6S235C24v134Ev();
extern void _ZN6S235C24v135Ev();
extern void _ZN6S235C24v136Ev();
extern void _ZN6S235C12v1Ev();
extern void _ZN6S235C12v2Ev();
extern void _ZN6S235C12v3Ev();
extern void _ZN6S235C12v4Ev();
static  VTBL_ENTRY vtc_S235C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S235C1[0]),
  (VTBL_ENTRY)&_ZN6S235C1D1Ev,
  (VTBL_ENTRY)&_ZN6S235C1D0Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt2v5Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt2v6Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt2v7Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt2v8Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt2v9Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v10Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v11Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v12Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v13Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v14Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v15Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v16Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v17Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v18Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v19Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v20Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v21Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v22Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v23Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v24Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v25Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v26Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v27Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v28Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v29Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v30Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v31Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v32Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v33Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v34Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v35Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v36Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v37Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v38Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v39Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v40Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v41Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v42Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v43Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v44Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v45Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v46Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v47Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v48Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v49Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v50Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v51Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v52Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v53Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v54Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v55Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v56Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v57Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v58Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v59Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v60Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v61Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v62Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v63Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v64Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v65Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v66Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v67Ev,
  (VTBL_ENTRY)&_ZN9S235C6_nt3v68Ev,
  (VTBL_ENTRY)&_ZN9S235C5_nt3v69Ev,
  (VTBL_ENTRY)&_ZN9S235C5_nt3v70Ev,
  (VTBL_ENTRY)&_ZN9S235C5_nt3v71Ev,
  (VTBL_ENTRY)&_ZN9S235C5_nt3v72Ev,
  (VTBL_ENTRY)&_ZN9S235C5_nt3v73Ev,
  (VTBL_ENTRY)&_ZN9S235C4_nt3v74Ev,
  (VTBL_ENTRY)&_ZN9S235C4_nt3v75Ev,
  (VTBL_ENTRY)&_ZN9S235C4_nt3v76Ev,
  (VTBL_ENTRY)&_ZN9S235C4_nt3v77Ev,
  (VTBL_ENTRY)&_ZN9S235C4_nt3v78Ev,
  (VTBL_ENTRY)&_ZN9S235C4_nt3v79Ev,
  (VTBL_ENTRY)&_ZN9S235C4_nt3v80Ev,
  (VTBL_ENTRY)&_ZN9S235C4_nt3v81Ev,
  (VTBL_ENTRY)&_ZN9S235C4_nt3v82Ev,
  (VTBL_ENTRY)&_ZN9S235C4_nt3v83Ev,
  (VTBL_ENTRY)&_ZN9S235C4_nt3v84Ev,
  (VTBL_ENTRY)&_ZN9S235C4_nt3v85Ev,
  (VTBL_ENTRY)&_ZN9S235C4_nt3v86Ev,
  (VTBL_ENTRY)&_ZN9S235C4_nt3v87Ev,
  (VTBL_ENTRY)&_ZN9S235C4_nt3v88Ev,
  (VTBL_ENTRY)&_ZN9S235C4_nt3v89Ev,
  (VTBL_ENTRY)&_ZN9S235C4_nt3v90Ev,
  (VTBL_ENTRY)&_ZN9S235C4_nt3v91Ev,
  (VTBL_ENTRY)&_ZN9S235C4_nt3v92Ev,
  (VTBL_ENTRY)&_ZN9S235C4_nt3v93Ev,
  (VTBL_ENTRY)&_ZN9S235C4_nt3v94Ev,
  (VTBL_ENTRY)&_ZN9S235C4_nt3v95Ev,
  (VTBL_ENTRY)&_ZN6S235C33v96Ev,
  (VTBL_ENTRY)&_ZN6S235C33v97Ev,
  (VTBL_ENTRY)&_ZN6S235C33v98Ev,
  (VTBL_ENTRY)&_ZN6S235C33v99Ev,
  (VTBL_ENTRY)&_ZN6S235C34v100Ev,
  (VTBL_ENTRY)&_ZN6S235C34v101Ev,
  (VTBL_ENTRY)&_ZN6S235C34v102Ev,
  (VTBL_ENTRY)&_ZN6S235C34v103Ev,
  (VTBL_ENTRY)&_ZN6S235C34v104Ev,
  (VTBL_ENTRY)&_ZN6S235C34v105Ev,
  (VTBL_ENTRY)&_ZN6S235C34v106Ev,
  (VTBL_ENTRY)&_ZN6S235C34v107Ev,
  (VTBL_ENTRY)&_ZN6S235C34v108Ev,
  (VTBL_ENTRY)&_ZN6S235C34v109Ev,
  (VTBL_ENTRY)&_ZN6S235C34v110Ev,
  (VTBL_ENTRY)&_ZN6S235C34v111Ev,
  (VTBL_ENTRY)&_ZN6S235C34v112Ev,
  (VTBL_ENTRY)&_ZN6S235C34v113Ev,
  (VTBL_ENTRY)&_ZN6S235C34v114Ev,
  (VTBL_ENTRY)&_ZN6S235C34v115Ev,
  (VTBL_ENTRY)&_ZN6S235C34v116Ev,
  (VTBL_ENTRY)&_ZN6S235C34v117Ev,
  (VTBL_ENTRY)&_ZN6S235C34v118Ev,
  (VTBL_ENTRY)&_ZN6S235C34v119Ev,
  (VTBL_ENTRY)&_ZN6S235C34v120Ev,
  (VTBL_ENTRY)&_ZN6S235C34v121Ev,
  (VTBL_ENTRY)&_ZN6S235C34v122Ev,
  (VTBL_ENTRY)&_ZN6S235C24v123Ev,
  (VTBL_ENTRY)&_ZN6S235C24v124Ev,
  (VTBL_ENTRY)&_ZN6S235C24v125Ev,
  (VTBL_ENTRY)&_ZN6S235C24v126Ev,
  (VTBL_ENTRY)&_ZN6S235C24v127Ev,
  (VTBL_ENTRY)&_ZN6S235C24v128Ev,
  (VTBL_ENTRY)&_ZN6S235C24v129Ev,
  (VTBL_ENTRY)&_ZN6S235C24v130Ev,
  (VTBL_ENTRY)&_ZN6S235C24v131Ev,
  (VTBL_ENTRY)&_ZN6S235C24v132Ev,
  (VTBL_ENTRY)&_ZN6S235C24v133Ev,
  (VTBL_ENTRY)&_ZN6S235C24v134Ev,
  (VTBL_ENTRY)&_ZN6S235C24v135Ev,
  (VTBL_ENTRY)&_ZN6S235C24v136Ev,
  (VTBL_ENTRY)&_ZN6S235C12v1Ev,
  (VTBL_ENTRY)&_ZN6S235C12v2Ev,
  (VTBL_ENTRY)&_ZN6S235C12v3Ev,
  (VTBL_ENTRY)&_ZN6S235C12v4Ev,
};
extern VTBL_ENTRY _ZTI6S235C1[];
extern  VTBL_ENTRY _ZTV6S235C1[];
Class_Descriptor cd_S235C1 = {  "S235C1", // class name
  bases_S235C1, 5,
  &(vtc_S235C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(440,328), // object size
  NSPAIRA(_ZTI6S235C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S235C1),140, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  5, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S285C6  {
  int s285c6f0;
  __tsi64 s285c6f1;
  void *s285c6f2[4];
  int s285c6f3[2];
  void *s285c6f4;
  ::S235C7_nt s285c6f5;
  void *s285c6f6[2];
  virtual  ~S285C6(); // _ZN6S285C6D1Ev
  virtual void  v9(); // _ZN6S285C62v9Ev
  virtual void  v10(); // _ZN6S285C63v10Ev
  virtual void  v11(); // _ZN6S285C63v11Ev
  virtual void  v12(); // _ZN6S285C63v12Ev
  virtual void  v13(); // _ZN6S285C63v13Ev
  virtual void  v14(); // _ZN6S285C63v14Ev
  virtual void  v15(); // _ZN6S285C63v15Ev
  virtual void  v16(); // _ZN6S285C63v16Ev
  virtual void  v17(); // _ZN6S285C63v17Ev
  virtual void  v18(); // _ZN6S285C63v18Ev
  virtual void  v19(); // _ZN6S285C63v19Ev
  virtual void  v20(); // _ZN6S285C63v20Ev
  virtual void  v21(); // _ZN6S285C63v21Ev
  virtual void  v22(); // _ZN6S285C63v22Ev
  virtual void  v23(); // _ZN6S285C63v23Ev
  virtual void  v24(); // _ZN6S285C63v24Ev
  virtual void  v25(); // _ZN6S285C63v25Ev
  virtual void  v26(); // _ZN6S285C63v26Ev
  virtual void  v27(); // _ZN6S285C63v27Ev
  virtual void  v28(); // _ZN6S285C63v28Ev
  virtual void  v29(); // _ZN6S285C63v29Ev
  virtual void  v30(); // _ZN6S285C63v30Ev
  virtual void  v31(); // _ZN6S285C63v31Ev
  virtual void  v32(); // _ZN6S285C63v32Ev
  virtual void  v33(); // _ZN6S285C63v33Ev
  virtual void  v34(); // _ZN6S285C63v34Ev
  virtual void  v35(); // _ZN6S285C63v35Ev
  virtual void  v36(); // _ZN6S285C63v36Ev
  virtual void  v37(); // _ZN6S285C63v37Ev
  virtual void  v38(); // _ZN6S285C63v38Ev
  virtual void  v39(); // _ZN6S285C63v39Ev
  virtual void  v40(); // _ZN6S285C63v40Ev
  virtual void  v41(); // _ZN6S285C63v41Ev
  virtual void  v42(); // _ZN6S285C63v42Ev
  virtual void  v43(); // _ZN6S285C63v43Ev
  virtual void  v44(); // _ZN6S285C63v44Ev
  virtual void  v45(); // _ZN6S285C63v45Ev
  virtual void  v46(); // _ZN6S285C63v46Ev
  virtual void  v47(); // _ZN6S285C63v47Ev
  virtual void  v48(); // _ZN6S285C63v48Ev
  virtual void  v49(); // _ZN6S285C63v49Ev
  virtual void  v50(); // _ZN6S285C63v50Ev
  virtual void  v51(); // _ZN6S285C63v51Ev
  virtual void  v52(); // _ZN6S285C63v52Ev
  virtual void  v53(); // _ZN6S285C63v53Ev
  virtual void  v54(); // _ZN6S285C63v54Ev
  virtual void  v55(); // _ZN6S285C63v55Ev
  virtual void  v56(); // _ZN6S285C63v56Ev
  virtual void  v57(); // _ZN6S285C63v57Ev
  virtual void  v58(); // _ZN6S285C63v58Ev
  virtual void  v59(); // _ZN6S285C63v59Ev
  virtual void  v60(); // _ZN6S285C63v60Ev
  virtual void  v61(); // _ZN6S285C63v61Ev
  virtual void  v62(); // _ZN6S285C63v62Ev
  virtual void  v63(); // _ZN6S285C63v63Ev
  virtual void  v64(); // _ZN6S285C63v64Ev
  virtual void  v65(); // _ZN6S285C63v65Ev
  virtual void  v66(); // _ZN6S285C63v66Ev
  virtual void  v67(); // _ZN6S285C63v67Ev
  virtual void  v68(); // _ZN6S285C63v68Ev
  virtual void  v69(); // _ZN6S285C63v69Ev
  virtual void  v70(); // _ZN6S285C63v70Ev
  virtual void  v71(); // _ZN6S285C63v71Ev
  virtual void  v72(); // _ZN6S285C63v72Ev
  S285C6(); // tgen
};
//SIG(-1 S285C6) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 Fi FL Fp[4] Fi[2] Fp FC2{ m Fi[2]} Fp[2]}


 S285C6 ::~S285C6(){ note_dtor("S285C6", this);}
void  S285C6 ::v9(){vfunc_called(this, "_ZN6S285C62v9Ev");}
void  S285C6 ::v10(){vfunc_called(this, "_ZN6S285C63v10Ev");}
void  S285C6 ::v11(){vfunc_called(this, "_ZN6S285C63v11Ev");}
void  S285C6 ::v12(){vfunc_called(this, "_ZN6S285C63v12Ev");}
void  S285C6 ::v13(){vfunc_called(this, "_ZN6S285C63v13Ev");}
void  S285C6 ::v14(){vfunc_called(this, "_ZN6S285C63v14Ev");}
void  S285C6 ::v15(){vfunc_called(this, "_ZN6S285C63v15Ev");}
void  S285C6 ::v16(){vfunc_called(this, "_ZN6S285C63v16Ev");}
void  S285C6 ::v17(){vfunc_called(this, "_ZN6S285C63v17Ev");}
void  S285C6 ::v18(){vfunc_called(this, "_ZN6S285C63v18Ev");}
void  S285C6 ::v19(){vfunc_called(this, "_ZN6S285C63v19Ev");}
void  S285C6 ::v20(){vfunc_called(this, "_ZN6S285C63v20Ev");}
void  S285C6 ::v21(){vfunc_called(this, "_ZN6S285C63v21Ev");}
void  S285C6 ::v22(){vfunc_called(this, "_ZN6S285C63v22Ev");}
void  S285C6 ::v23(){vfunc_called(this, "_ZN6S285C63v23Ev");}
void  S285C6 ::v24(){vfunc_called(this, "_ZN6S285C63v24Ev");}
void  S285C6 ::v25(){vfunc_called(this, "_ZN6S285C63v25Ev");}
void  S285C6 ::v26(){vfunc_called(this, "_ZN6S285C63v26Ev");}
void  S285C6 ::v27(){vfunc_called(this, "_ZN6S285C63v27Ev");}
void  S285C6 ::v28(){vfunc_called(this, "_ZN6S285C63v28Ev");}
void  S285C6 ::v29(){vfunc_called(this, "_ZN6S285C63v29Ev");}
void  S285C6 ::v30(){vfunc_called(this, "_ZN6S285C63v30Ev");}
void  S285C6 ::v31(){vfunc_called(this, "_ZN6S285C63v31Ev");}
void  S285C6 ::v32(){vfunc_called(this, "_ZN6S285C63v32Ev");}
void  S285C6 ::v33(){vfunc_called(this, "_ZN6S285C63v33Ev");}
void  S285C6 ::v34(){vfunc_called(this, "_ZN6S285C63v34Ev");}
void  S285C6 ::v35(){vfunc_called(this, "_ZN6S285C63v35Ev");}
void  S285C6 ::v36(){vfunc_called(this, "_ZN6S285C63v36Ev");}
void  S285C6 ::v37(){vfunc_called(this, "_ZN6S285C63v37Ev");}
void  S285C6 ::v38(){vfunc_called(this, "_ZN6S285C63v38Ev");}
void  S285C6 ::v39(){vfunc_called(this, "_ZN6S285C63v39Ev");}
void  S285C6 ::v40(){vfunc_called(this, "_ZN6S285C63v40Ev");}
void  S285C6 ::v41(){vfunc_called(this, "_ZN6S285C63v41Ev");}
void  S285C6 ::v42(){vfunc_called(this, "_ZN6S285C63v42Ev");}
void  S285C6 ::v43(){vfunc_called(this, "_ZN6S285C63v43Ev");}
void  S285C6 ::v44(){vfunc_called(this, "_ZN6S285C63v44Ev");}
void  S285C6 ::v45(){vfunc_called(this, "_ZN6S285C63v45Ev");}
void  S285C6 ::v46(){vfunc_called(this, "_ZN6S285C63v46Ev");}
void  S285C6 ::v47(){vfunc_called(this, "_ZN6S285C63v47Ev");}
void  S285C6 ::v48(){vfunc_called(this, "_ZN6S285C63v48Ev");}
void  S285C6 ::v49(){vfunc_called(this, "_ZN6S285C63v49Ev");}
void  S285C6 ::v50(){vfunc_called(this, "_ZN6S285C63v50Ev");}
void  S285C6 ::v51(){vfunc_called(this, "_ZN6S285C63v51Ev");}
void  S285C6 ::v52(){vfunc_called(this, "_ZN6S285C63v52Ev");}
void  S285C6 ::v53(){vfunc_called(this, "_ZN6S285C63v53Ev");}
void  S285C6 ::v54(){vfunc_called(this, "_ZN6S285C63v54Ev");}
void  S285C6 ::v55(){vfunc_called(this, "_ZN6S285C63v55Ev");}
void  S285C6 ::v56(){vfunc_called(this, "_ZN6S285C63v56Ev");}
void  S285C6 ::v57(){vfunc_called(this, "_ZN6S285C63v57Ev");}
void  S285C6 ::v58(){vfunc_called(this, "_ZN6S285C63v58Ev");}
void  S285C6 ::v59(){vfunc_called(this, "_ZN6S285C63v59Ev");}
void  S285C6 ::v60(){vfunc_called(this, "_ZN6S285C63v60Ev");}
void  S285C6 ::v61(){vfunc_called(this, "_ZN6S285C63v61Ev");}
void  S285C6 ::v62(){vfunc_called(this, "_ZN6S285C63v62Ev");}
void  S285C6 ::v63(){vfunc_called(this, "_ZN6S285C63v63Ev");}
void  S285C6 ::v64(){vfunc_called(this, "_ZN6S285C63v64Ev");}
void  S285C6 ::v65(){vfunc_called(this, "_ZN6S285C63v65Ev");}
void  S285C6 ::v66(){vfunc_called(this, "_ZN6S285C63v66Ev");}
void  S285C6 ::v67(){vfunc_called(this, "_ZN6S285C63v67Ev");}
void  S285C6 ::v68(){vfunc_called(this, "_ZN6S285C63v68Ev");}
void  S285C6 ::v69(){vfunc_called(this, "_ZN6S285C63v69Ev");}
void  S285C6 ::v70(){vfunc_called(this, "_ZN6S285C63v70Ev");}
void  S285C6 ::v71(){vfunc_called(this, "_ZN6S285C63v71Ev");}
void  S285C6 ::v72(){vfunc_called(this, "_ZN6S285C63v72Ev");}
S285C6 ::S285C6(){ note_ctor("S285C6", this);} // tgen

static void Test_S285C6()
{
  extern Class_Descriptor cd_S285C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S285C6, buf);
    S285C6 *dp, &lv = *(dp=new (buf) S285C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S285C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S285C6)");
    check_field_offset(lv, s285c6f0, ABISELECT(8,4), "S285C6.s285c6f0");
    check_field_offset(lv, s285c6f1, ABISELECT(16,8), "S285C6.s285c6f1");
    check_field_offset(lv, s285c6f2, ABISELECT(24,16), "S285C6.s285c6f2");
    check_field_offset(lv, s285c6f3, ABISELECT(56,32), "S285C6.s285c6f3");
    check_field_offset(lv, s285c6f4, ABISELECT(64,40), "S285C6.s285c6f4");
    check_field_offset(lv, s285c6f5, ABISELECT(72,44), "S285C6.s285c6f5");
    check_field_offset(lv, s285c6f6, ABISELECT(80,52), "S285C6.s285c6f6");
    test_class_info(&lv, &cd_S285C6);
    dp->~S285C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS285C6(Test_S285C6, "S285C6", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN6S285C6C1Ev();
extern void _ZN6S285C6D1Ev();
Name_Map name_map_S285C6[] = {
  NSPAIR(_ZN6S285C6C1Ev),
  NSPAIR(_ZN6S285C6D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI6S285C6[];
extern void _ZN6S285C6D1Ev();
extern void _ZN6S285C6D0Ev();
extern void _ZN6S285C62v9Ev();
extern void _ZN6S285C63v10Ev();
extern void _ZN6S285C63v11Ev();
extern void _ZN6S285C63v12Ev();
extern void _ZN6S285C63v13Ev();
extern void _ZN6S285C63v14Ev();
extern void _ZN6S285C63v15Ev();
extern void _ZN6S285C63v16Ev();
extern void _ZN6S285C63v17Ev();
extern void _ZN6S285C63v18Ev();
extern void _ZN6S285C63v19Ev();
extern void _ZN6S285C63v20Ev();
extern void _ZN6S285C63v21Ev();
extern void _ZN6S285C63v22Ev();
extern void _ZN6S285C63v23Ev();
extern void _ZN6S285C63v24Ev();
extern void _ZN6S285C63v25Ev();
extern void _ZN6S285C63v26Ev();
extern void _ZN6S285C63v27Ev();
extern void _ZN6S285C63v28Ev();
extern void _ZN6S285C63v29Ev();
extern void _ZN6S285C63v30Ev();
extern void _ZN6S285C63v31Ev();
extern void _ZN6S285C63v32Ev();
extern void _ZN6S285C63v33Ev();
extern void _ZN6S285C63v34Ev();
extern void _ZN6S285C63v35Ev();
extern void _ZN6S285C63v36Ev();
extern void _ZN6S285C63v37Ev();
extern void _ZN6S285C63v38Ev();
extern void _ZN6S285C63v39Ev();
extern void _ZN6S285C63v40Ev();
extern void _ZN6S285C63v41Ev();
extern void _ZN6S285C63v42Ev();
extern void _ZN6S285C63v43Ev();
extern void _ZN6S285C63v44Ev();
extern void _ZN6S285C63v45Ev();
extern void _ZN6S285C63v46Ev();
extern void _ZN6S285C63v47Ev();
extern void _ZN6S285C63v48Ev();
extern void _ZN6S285C63v49Ev();
extern void _ZN6S285C63v50Ev();
extern void _ZN6S285C63v51Ev();
extern void _ZN6S285C63v52Ev();
extern void _ZN6S285C63v53Ev();
extern void _ZN6S285C63v54Ev();
extern void _ZN6S285C63v55Ev();
extern void _ZN6S285C63v56Ev();
extern void _ZN6S285C63v57Ev();
extern void _ZN6S285C63v58Ev();
extern void _ZN6S285C63v59Ev();
extern void _ZN6S285C63v60Ev();
extern void _ZN6S285C63v61Ev();
extern void _ZN6S285C63v62Ev();
extern void _ZN6S285C63v63Ev();
extern void _ZN6S285C63v64Ev();
extern void _ZN6S285C63v65Ev();
extern void _ZN6S285C63v66Ev();
extern void _ZN6S285C63v67Ev();
extern void _ZN6S285C63v68Ev();
extern void _ZN6S285C63v69Ev();
extern void _ZN6S285C63v70Ev();
extern void _ZN6S285C63v71Ev();
extern void _ZN6S285C63v72Ev();
static  VTBL_ENTRY vtc_S285C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S285C6[0]),
  (VTBL_ENTRY)&_ZN6S285C6D1Ev,
  (VTBL_ENTRY)&_ZN6S285C6D0Ev,
  (VTBL_ENTRY)&_ZN6S285C62v9Ev,
  (VTBL_ENTRY)&_ZN6S285C63v10Ev,
  (VTBL_ENTRY)&_ZN6S285C63v11Ev,
  (VTBL_ENTRY)&_ZN6S285C63v12Ev,
  (VTBL_ENTRY)&_ZN6S285C63v13Ev,
  (VTBL_ENTRY)&_ZN6S285C63v14Ev,
  (VTBL_ENTRY)&_ZN6S285C63v15Ev,
  (VTBL_ENTRY)&_ZN6S285C63v16Ev,
  (VTBL_ENTRY)&_ZN6S285C63v17Ev,
  (VTBL_ENTRY)&_ZN6S285C63v18Ev,
  (VTBL_ENTRY)&_ZN6S285C63v19Ev,
  (VTBL_ENTRY)&_ZN6S285C63v20Ev,
  (VTBL_ENTRY)&_ZN6S285C63v21Ev,
  (VTBL_ENTRY)&_ZN6S285C63v22Ev,
  (VTBL_ENTRY)&_ZN6S285C63v23Ev,
  (VTBL_ENTRY)&_ZN6S285C63v24Ev,
  (VTBL_ENTRY)&_ZN6S285C63v25Ev,
  (VTBL_ENTRY)&_ZN6S285C63v26Ev,
  (VTBL_ENTRY)&_ZN6S285C63v27Ev,
  (VTBL_ENTRY)&_ZN6S285C63v28Ev,
  (VTBL_ENTRY)&_ZN6S285C63v29Ev,
  (VTBL_ENTRY)&_ZN6S285C63v30Ev,
  (VTBL_ENTRY)&_ZN6S285C63v31Ev,
  (VTBL_ENTRY)&_ZN6S285C63v32Ev,
  (VTBL_ENTRY)&_ZN6S285C63v33Ev,
  (VTBL_ENTRY)&_ZN6S285C63v34Ev,
  (VTBL_ENTRY)&_ZN6S285C63v35Ev,
  (VTBL_ENTRY)&_ZN6S285C63v36Ev,
  (VTBL_ENTRY)&_ZN6S285C63v37Ev,
  (VTBL_ENTRY)&_ZN6S285C63v38Ev,
  (VTBL_ENTRY)&_ZN6S285C63v39Ev,
  (VTBL_ENTRY)&_ZN6S285C63v40Ev,
  (VTBL_ENTRY)&_ZN6S285C63v41Ev,
  (VTBL_ENTRY)&_ZN6S285C63v42Ev,
  (VTBL_ENTRY)&_ZN6S285C63v43Ev,
  (VTBL_ENTRY)&_ZN6S285C63v44Ev,
  (VTBL_ENTRY)&_ZN6S285C63v45Ev,
  (VTBL_ENTRY)&_ZN6S285C63v46Ev,
  (VTBL_ENTRY)&_ZN6S285C63v47Ev,
  (VTBL_ENTRY)&_ZN6S285C63v48Ev,
  (VTBL_ENTRY)&_ZN6S285C63v49Ev,
  (VTBL_ENTRY)&_ZN6S285C63v50Ev,
  (VTBL_ENTRY)&_ZN6S285C63v51Ev,
  (VTBL_ENTRY)&_ZN6S285C63v52Ev,
  (VTBL_ENTRY)&_ZN6S285C63v53Ev,
  (VTBL_ENTRY)&_ZN6S285C63v54Ev,
  (VTBL_ENTRY)&_ZN6S285C63v55Ev,
  (VTBL_ENTRY)&_ZN6S285C63v56Ev,
  (VTBL_ENTRY)&_ZN6S285C63v57Ev,
  (VTBL_ENTRY)&_ZN6S285C63v58Ev,
  (VTBL_ENTRY)&_ZN6S285C63v59Ev,
  (VTBL_ENTRY)&_ZN6S285C63v60Ev,
  (VTBL_ENTRY)&_ZN6S285C63v61Ev,
  (VTBL_ENTRY)&_ZN6S285C63v62Ev,
  (VTBL_ENTRY)&_ZN6S285C63v63Ev,
  (VTBL_ENTRY)&_ZN6S285C63v64Ev,
  (VTBL_ENTRY)&_ZN6S285C63v65Ev,
  (VTBL_ENTRY)&_ZN6S285C63v66Ev,
  (VTBL_ENTRY)&_ZN6S285C63v67Ev,
  (VTBL_ENTRY)&_ZN6S285C63v68Ev,
  (VTBL_ENTRY)&_ZN6S285C63v69Ev,
  (VTBL_ENTRY)&_ZN6S285C63v70Ev,
  (VTBL_ENTRY)&_ZN6S285C63v71Ev,
  (VTBL_ENTRY)&_ZN6S285C63v72Ev,
};
extern VTBL_ENTRY _ZTI6S285C6[];
extern  VTBL_ENTRY _ZTV6S285C6[];
Class_Descriptor cd_S285C6 = {  "S285C6", // class name
  0,0,//no base classes
  &(vtc_S285C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI6S285C6),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV6S285C6),68, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S285C5  : S285C6 {
  void *s285c5f0;
  ::S235C7_nt s285c5f1;
  virtual  ~S285C5(); // _ZN6S285C5D1Ev
  virtual void  v73(); // _ZN6S285C53v73Ev
  virtual void  v74(); // _ZN6S285C53v74Ev
  virtual void  v75(); // _ZN6S285C53v75Ev
  virtual void  v76(); // _ZN6S285C53v76Ev
  virtual void  v77(); // _ZN6S285C53v77Ev
  S285C5(); // tgen
};
//SIG(-1 S285C5) C1{ BC2{ vd v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 Fi FL Fp[4] Fi[2] Fp FC3{ m Fi[2]} Fp[2]} vd v1 v2 v3 v4 v5 Fp FC3}


 S285C5 ::~S285C5(){ note_dtor("S285C5", this);}
void  S285C5 ::v73(){vfunc_called(this, "_ZN6S285C53v73Ev");}
void  S285C5 ::v74(){vfunc_called(this, "_ZN6S285C53v74Ev");}
void  S285C5 ::v75(){vfunc_called(this, "_ZN6S285C53v75Ev");}
void  S285C5 ::v76(){vfunc_called(this, "_ZN6S285C53v76Ev");}
void  S285C5 ::v77(){vfunc_called(this, "_ZN6S285C53v77Ev");}
S285C5 ::S285C5(){ note_ctor("S285C5", this);} // tgen

static void Test_S285C5()
{
  extern Class_Descriptor cd_S285C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(15,19)];
    init_test(&cd_S285C5, buf);
    S285C5 *dp, &lv = *(dp=new (buf) S285C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(112,72), "sizeof(S285C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S285C5)");
    check_base_class_offset(lv, (S285C6*), 0, "S285C5");
    check_field_offset(lv, s285c5f0, ABISELECT(96,60), "S285C5.s285c5f0");
    check_field_offset(lv, s285c5f1, ABISELECT(104,64), "S285C5.s285c5f1");
    test_class_info(&lv, &cd_S285C5);
    dp->~S285C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS285C5(Test_S285C5, "S285C5", ABISELECT(112,72));

#else // __cplusplus

extern void _ZN6S285C5C1Ev();
extern void _ZN6S285C5D1Ev();
Name_Map name_map_S285C5[] = {
  NSPAIR(_ZN6S285C5C1Ev),
  NSPAIR(_ZN6S285C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S285C6;
extern VTBL_ENTRY _ZTI6S285C6[];
extern  VTBL_ENTRY _ZTV6S285C6[];
static Base_Class bases_S285C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S285C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S285C5[];
extern void _ZN6S285C5D1Ev();
extern void _ZN6S285C5D0Ev();
extern void _ZN6S285C62v9Ev();
extern void _ZN6S285C63v10Ev();
extern void _ZN6S285C63v11Ev();
extern void _ZN6S285C63v12Ev();
extern void _ZN6S285C63v13Ev();
extern void _ZN6S285C63v14Ev();
extern void _ZN6S285C63v15Ev();
extern void _ZN6S285C63v16Ev();
extern void _ZN6S285C63v17Ev();
extern void _ZN6S285C63v18Ev();
extern void _ZN6S285C63v19Ev();
extern void _ZN6S285C63v20Ev();
extern void _ZN6S285C63v21Ev();
extern void _ZN6S285C63v22Ev();
extern void _ZN6S285C63v23Ev();
extern void _ZN6S285C63v24Ev();
extern void _ZN6S285C63v25Ev();
extern void _ZN6S285C63v26Ev();
extern void _ZN6S285C63v27Ev();
extern void _ZN6S285C63v28Ev();
extern void _ZN6S285C63v29Ev();
extern void _ZN6S285C63v30Ev();
extern void _ZN6S285C63v31Ev();
extern void _ZN6S285C63v32Ev();
extern void _ZN6S285C63v33Ev();
extern void _ZN6S285C63v34Ev();
extern void _ZN6S285C63v35Ev();
extern void _ZN6S285C63v36Ev();
extern void _ZN6S285C63v37Ev();
extern void _ZN6S285C63v38Ev();
extern void _ZN6S285C63v39Ev();
extern void _ZN6S285C63v40Ev();
extern void _ZN6S285C63v41Ev();
extern void _ZN6S285C63v42Ev();
extern void _ZN6S285C63v43Ev();
extern void _ZN6S285C63v44Ev();
extern void _ZN6S285C63v45Ev();
extern void _ZN6S285C63v46Ev();
extern void _ZN6S285C63v47Ev();
extern void _ZN6S285C63v48Ev();
extern void _ZN6S285C63v49Ev();
extern void _ZN6S285C63v50Ev();
extern void _ZN6S285C63v51Ev();
extern void _ZN6S285C63v52Ev();
extern void _ZN6S285C63v53Ev();
extern void _ZN6S285C63v54Ev();
extern void _ZN6S285C63v55Ev();
extern void _ZN6S285C63v56Ev();
extern void _ZN6S285C63v57Ev();
extern void _ZN6S285C63v58Ev();
extern void _ZN6S285C63v59Ev();
extern void _ZN6S285C63v60Ev();
extern void _ZN6S285C63v61Ev();
extern void _ZN6S285C63v62Ev();
extern void _ZN6S285C63v63Ev();
extern void _ZN6S285C63v64Ev();
extern void _ZN6S285C63v65Ev();
extern void _ZN6S285C63v66Ev();
extern void _ZN6S285C63v67Ev();
extern void _ZN6S285C63v68Ev();
extern void _ZN6S285C63v69Ev();
extern void _ZN6S285C63v70Ev();
extern void _ZN6S285C63v71Ev();
extern void _ZN6S285C63v72Ev();
extern void _ZN6S285C53v73Ev();
extern void _ZN6S285C53v74Ev();
extern void _ZN6S285C53v75Ev();
extern void _ZN6S285C53v76Ev();
extern void _ZN6S285C53v77Ev();
static  VTBL_ENTRY vtc_S285C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S285C5[0]),
  (VTBL_ENTRY)&_ZN6S285C5D1Ev,
  (VTBL_ENTRY)&_ZN6S285C5D0Ev,
  (VTBL_ENTRY)&_ZN6S285C62v9Ev,
  (VTBL_ENTRY)&_ZN6S285C63v10Ev,
  (VTBL_ENTRY)&_ZN6S285C63v11Ev,
  (VTBL_ENTRY)&_ZN6S285C63v12Ev,
  (VTBL_ENTRY)&_ZN6S285C63v13Ev,
  (VTBL_ENTRY)&_ZN6S285C63v14Ev,
  (VTBL_ENTRY)&_ZN6S285C63v15Ev,
  (VTBL_ENTRY)&_ZN6S285C63v16Ev,
  (VTBL_ENTRY)&_ZN6S285C63v17Ev,
  (VTBL_ENTRY)&_ZN6S285C63v18Ev,
  (VTBL_ENTRY)&_ZN6S285C63v19Ev,
  (VTBL_ENTRY)&_ZN6S285C63v20Ev,
  (VTBL_ENTRY)&_ZN6S285C63v21Ev,
  (VTBL_ENTRY)&_ZN6S285C63v22Ev,
  (VTBL_ENTRY)&_ZN6S285C63v23Ev,
  (VTBL_ENTRY)&_ZN6S285C63v24Ev,
  (VTBL_ENTRY)&_ZN6S285C63v25Ev,
  (VTBL_ENTRY)&_ZN6S285C63v26Ev,
  (VTBL_ENTRY)&_ZN6S285C63v27Ev,
  (VTBL_ENTRY)&_ZN6S285C63v28Ev,
  (VTBL_ENTRY)&_ZN6S285C63v29Ev,
  (VTBL_ENTRY)&_ZN6S285C63v30Ev,
  (VTBL_ENTRY)&_ZN6S285C63v31Ev,
  (VTBL_ENTRY)&_ZN6S285C63v32Ev,
  (VTBL_ENTRY)&_ZN6S285C63v33Ev,
  (VTBL_ENTRY)&_ZN6S285C63v34Ev,
  (VTBL_ENTRY)&_ZN6S285C63v35Ev,
  (VTBL_ENTRY)&_ZN6S285C63v36Ev,
  (VTBL_ENTRY)&_ZN6S285C63v37Ev,
  (VTBL_ENTRY)&_ZN6S285C63v38Ev,
  (VTBL_ENTRY)&_ZN6S285C63v39Ev,
  (VTBL_ENTRY)&_ZN6S285C63v40Ev,
  (VTBL_ENTRY)&_ZN6S285C63v41Ev,
  (VTBL_ENTRY)&_ZN6S285C63v42Ev,
  (VTBL_ENTRY)&_ZN6S285C63v43Ev,
  (VTBL_ENTRY)&_ZN6S285C63v44Ev,
  (VTBL_ENTRY)&_ZN6S285C63v45Ev,
  (VTBL_ENTRY)&_ZN6S285C63v46Ev,
  (VTBL_ENTRY)&_ZN6S285C63v47Ev,
  (VTBL_ENTRY)&_ZN6S285C63v48Ev,
  (VTBL_ENTRY)&_ZN6S285C63v49Ev,
  (VTBL_ENTRY)&_ZN6S285C63v50Ev,
  (VTBL_ENTRY)&_ZN6S285C63v51Ev,
  (VTBL_ENTRY)&_ZN6S285C63v52Ev,
  (VTBL_ENTRY)&_ZN6S285C63v53Ev,
  (VTBL_ENTRY)&_ZN6S285C63v54Ev,
  (VTBL_ENTRY)&_ZN6S285C63v55Ev,
  (VTBL_ENTRY)&_ZN6S285C63v56Ev,
  (VTBL_ENTRY)&_ZN6S285C63v57Ev,
  (VTBL_ENTRY)&_ZN6S285C63v58Ev,
  (VTBL_ENTRY)&_ZN6S285C63v59Ev,
  (VTBL_ENTRY)&_ZN6S285C63v60Ev,
  (VTBL_ENTRY)&_ZN6S285C63v61Ev,
  (VTBL_ENTRY)&_ZN6S285C63v62Ev,
  (VTBL_ENTRY)&_ZN6S285C63v63Ev,
  (VTBL_ENTRY)&_ZN6S285C63v64Ev,
  (VTBL_ENTRY)&_ZN6S285C63v65Ev,
  (VTBL_ENTRY)&_ZN6S285C63v66Ev,
  (VTBL_ENTRY)&_ZN6S285C63v67Ev,
  (VTBL_ENTRY)&_ZN6S285C63v68Ev,
  (VTBL_ENTRY)&_ZN6S285C63v69Ev,
  (VTBL_ENTRY)&_ZN6S285C63v70Ev,
  (VTBL_ENTRY)&_ZN6S285C63v71Ev,
  (VTBL_ENTRY)&_ZN6S285C63v72Ev,
  (VTBL_ENTRY)&_ZN6S285C53v73Ev,
  (VTBL_ENTRY)&_ZN6S285C53v74Ev,
  (VTBL_ENTRY)&_ZN6S285C53v75Ev,
  (VTBL_ENTRY)&_ZN6S285C53v76Ev,
  (VTBL_ENTRY)&_ZN6S285C53v77Ev,
};
extern VTBL_ENTRY _ZTI6S285C5[];
extern  VTBL_ENTRY _ZTV6S285C5[];
Class_Descriptor cd_S285C5 = {  "S285C5", // class name
  bases_S285C5, 1,
  &(vtc_S285C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(112,72), // object size
  NSPAIRA(_ZTI6S285C5),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S285C5),73, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S285C4  : S285C5 {
  void *s285c4f0[2];
  unsigned int s285c4f1:1;
  unsigned int s285c4f2:1;
  unsigned int s285c4f3:1;
  unsigned int s285c4f4:1;
  char s285c4f5;
  virtual  ~S285C4(); // _ZN6S285C4D1Ev
  virtual void  v78(); // _ZN6S285C43v78Ev
  virtual void  v79(); // _ZN6S285C43v79Ev
  virtual void  v80(); // _ZN6S285C43v80Ev
  virtual void  v81(); // _ZN6S285C43v81Ev
  virtual void  v82(); // _ZN6S285C43v82Ev
  virtual void  v83(); // _ZN6S285C43v83Ev
  virtual void  v84(); // _ZN6S285C43v84Ev
  virtual void  v85(); // _ZN6S285C43v85Ev
  virtual void  v86(); // _ZN6S285C43v86Ev
  virtual void  v87(); // _ZN6S285C43v87Ev
  virtual void  v88(); // _ZN6S285C43v88Ev
  virtual void  v89(); // _ZN6S285C43v89Ev
  virtual void  v90(); // _ZN6S285C43v90Ev
  virtual void  v91(); // _ZN6S285C43v91Ev
  virtual void  v92(); // _ZN6S285C43v92Ev
  virtual void  v93(); // _ZN6S285C43v93Ev
  virtual void  v94(); // _ZN6S285C43v94Ev
  virtual void  v95(); // _ZN6S285C43v95Ev
  virtual void  v96(); // _ZN6S285C43v96Ev
  virtual void  v97(); // _ZN6S285C43v97Ev
  virtual void  v98(); // _ZN6S285C43v98Ev
  virtual void  v99(); // _ZN6S285C43v99Ev
  S285C4(); // tgen
};
//SIG(-1 S285C4) C1{ BC2{ BC3{ vd v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 Fi FL Fp[4] Fi[2] Fp FC4{ m Fi[2]} Fp[2]} vd v87 v88 v89 v90 v91 Fp FC4} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 Fp[2] Fi:1 Fi:1 Fi:1 Fi:1 Fc}


 S285C4 ::~S285C4(){ note_dtor("S285C4", this);}
void  S285C4 ::v78(){vfunc_called(this, "_ZN6S285C43v78Ev");}
void  S285C4 ::v79(){vfunc_called(this, "_ZN6S285C43v79Ev");}
void  S285C4 ::v80(){vfunc_called(this, "_ZN6S285C43v80Ev");}
void  S285C4 ::v81(){vfunc_called(this, "_ZN6S285C43v81Ev");}
void  S285C4 ::v82(){vfunc_called(this, "_ZN6S285C43v82Ev");}
void  S285C4 ::v83(){vfunc_called(this, "_ZN6S285C43v83Ev");}
void  S285C4 ::v84(){vfunc_called(this, "_ZN6S285C43v84Ev");}
void  S285C4 ::v85(){vfunc_called(this, "_ZN6S285C43v85Ev");}
void  S285C4 ::v86(){vfunc_called(this, "_ZN6S285C43v86Ev");}
void  S285C4 ::v87(){vfunc_called(this, "_ZN6S285C43v87Ev");}
void  S285C4 ::v88(){vfunc_called(this, "_ZN6S285C43v88Ev");}
void  S285C4 ::v89(){vfunc_called(this, "_ZN6S285C43v89Ev");}
void  S285C4 ::v90(){vfunc_called(this, "_ZN6S285C43v90Ev");}
void  S285C4 ::v91(){vfunc_called(this, "_ZN6S285C43v91Ev");}
void  S285C4 ::v92(){vfunc_called(this, "_ZN6S285C43v92Ev");}
void  S285C4 ::v93(){vfunc_called(this, "_ZN6S285C43v93Ev");}
void  S285C4 ::v94(){vfunc_called(this, "_ZN6S285C43v94Ev");}
void  S285C4 ::v95(){vfunc_called(this, "_ZN6S285C43v95Ev");}
void  S285C4 ::v96(){vfunc_called(this, "_ZN6S285C43v96Ev");}
void  S285C4 ::v97(){vfunc_called(this, "_ZN6S285C43v97Ev");}
void  S285C4 ::v98(){vfunc_called(this, "_ZN6S285C43v98Ev");}
void  S285C4 ::v99(){vfunc_called(this, "_ZN6S285C43v99Ev");}
S285C4 ::S285C4(){ note_ctor("S285C4", this);} // tgen

static void Test_S285C4()
{
  extern Class_Descriptor cd_S285C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(18,22)];
    init_test(&cd_S285C4, buf);
    S285C4 *dp, &lv = *(dp=new (buf) S285C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(136,84), "sizeof(S285C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S285C4)");
    check_base_class_offset(lv, (S285C6*)(S285C5*), 0, "S285C4");
    check_base_class_offset(lv, (S285C5*), 0, "S285C4");
    check_field_offset(lv, s285c4f0, ABISELECT(112,72), "S285C4.s285c4f0");
    set_bf_and_test(lv, s285c4f1, ABISELECT(128,80), 0, 1, 1, "S285C4");
    set_bf_and_test(lv, s285c4f2, ABISELECT(128,80), 1, 1, 1, "S285C4");
    set_bf_and_test(lv, s285c4f3, ABISELECT(128,80), 2, 1, 1, "S285C4");
    set_bf_and_test(lv, s285c4f4, ABISELECT(128,80), 3, 1, 1, "S285C4");
    check_field_offset(lv, s285c4f5, ABISELECT(129,81), "S285C4.s285c4f5");
    test_class_info(&lv, &cd_S285C4);
    dp->~S285C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS285C4(Test_S285C4, "S285C4", ABISELECT(136,84));

#else // __cplusplus

extern void _ZN6S285C4C1Ev();
extern void _ZN6S285C4D1Ev();
Name_Map name_map_S285C4[] = {
  NSPAIR(_ZN6S285C4C1Ev),
  NSPAIR(_ZN6S285C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S285C6;
extern VTBL_ENTRY _ZTI6S285C6[];
extern  VTBL_ENTRY _ZTV6S285C6[];
extern Class_Descriptor cd_S285C5;
extern VTBL_ENTRY _ZTI6S285C5[];
extern  VTBL_ENTRY _ZTV6S285C5[];
static Base_Class bases_S285C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S285C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S285C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S285C4[];
extern void _ZN6S285C4D1Ev();
extern void _ZN6S285C4D0Ev();
extern void _ZN6S285C62v9Ev();
extern void _ZN6S285C63v10Ev();
extern void _ZN6S285C63v11Ev();
extern void _ZN6S285C63v12Ev();
extern void _ZN6S285C63v13Ev();
extern void _ZN6S285C63v14Ev();
extern void _ZN6S285C63v15Ev();
extern void _ZN6S285C63v16Ev();
extern void _ZN6S285C63v17Ev();
extern void _ZN6S285C63v18Ev();
extern void _ZN6S285C63v19Ev();
extern void _ZN6S285C63v20Ev();
extern void _ZN6S285C63v21Ev();
extern void _ZN6S285C63v22Ev();
extern void _ZN6S285C63v23Ev();
extern void _ZN6S285C63v24Ev();
extern void _ZN6S285C63v25Ev();
extern void _ZN6S285C63v26Ev();
extern void _ZN6S285C63v27Ev();
extern void _ZN6S285C63v28Ev();
extern void _ZN6S285C63v29Ev();
extern void _ZN6S285C63v30Ev();
extern void _ZN6S285C63v31Ev();
extern void _ZN6S285C63v32Ev();
extern void _ZN6S285C63v33Ev();
extern void _ZN6S285C63v34Ev();
extern void _ZN6S285C63v35Ev();
extern void _ZN6S285C63v36Ev();
extern void _ZN6S285C63v37Ev();
extern void _ZN6S285C63v38Ev();
extern void _ZN6S285C63v39Ev();
extern void _ZN6S285C63v40Ev();
extern void _ZN6S285C63v41Ev();
extern void _ZN6S285C63v42Ev();
extern void _ZN6S285C63v43Ev();
extern void _ZN6S285C63v44Ev();
extern void _ZN6S285C63v45Ev();
extern void _ZN6S285C63v46Ev();
extern void _ZN6S285C63v47Ev();
extern void _ZN6S285C63v48Ev();
extern void _ZN6S285C63v49Ev();
extern void _ZN6S285C63v50Ev();
extern void _ZN6S285C63v51Ev();
extern void _ZN6S285C63v52Ev();
extern void _ZN6S285C63v53Ev();
extern void _ZN6S285C63v54Ev();
extern void _ZN6S285C63v55Ev();
extern void _ZN6S285C63v56Ev();
extern void _ZN6S285C63v57Ev();
extern void _ZN6S285C63v58Ev();
extern void _ZN6S285C63v59Ev();
extern void _ZN6S285C63v60Ev();
extern void _ZN6S285C63v61Ev();
extern void _ZN6S285C63v62Ev();
extern void _ZN6S285C63v63Ev();
extern void _ZN6S285C63v64Ev();
extern void _ZN6S285C63v65Ev();
extern void _ZN6S285C63v66Ev();
extern void _ZN6S285C63v67Ev();
extern void _ZN6S285C63v68Ev();
extern void _ZN6S285C63v69Ev();
extern void _ZN6S285C63v70Ev();
extern void _ZN6S285C63v71Ev();
extern void _ZN6S285C63v72Ev();
extern void _ZN6S285C53v73Ev();
extern void _ZN6S285C53v74Ev();
extern void _ZN6S285C53v75Ev();
extern void _ZN6S285C53v76Ev();
extern void _ZN6S285C53v77Ev();
extern void _ZN6S285C43v78Ev();
extern void _ZN6S285C43v79Ev();
extern void _ZN6S285C43v80Ev();
extern void _ZN6S285C43v81Ev();
extern void _ZN6S285C43v82Ev();
extern void _ZN6S285C43v83Ev();
extern void _ZN6S285C43v84Ev();
extern void _ZN6S285C43v85Ev();
extern void _ZN6S285C43v86Ev();
extern void _ZN6S285C43v87Ev();
extern void _ZN6S285C43v88Ev();
extern void _ZN6S285C43v89Ev();
extern void _ZN6S285C43v90Ev();
extern void _ZN6S285C43v91Ev();
extern void _ZN6S285C43v92Ev();
extern void _ZN6S285C43v93Ev();
extern void _ZN6S285C43v94Ev();
extern void _ZN6S285C43v95Ev();
extern void _ZN6S285C43v96Ev();
extern void _ZN6S285C43v97Ev();
extern void _ZN6S285C43v98Ev();
extern void _ZN6S285C43v99Ev();
static  VTBL_ENTRY vtc_S285C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S285C4[0]),
  (VTBL_ENTRY)&_ZN6S285C4D1Ev,
  (VTBL_ENTRY)&_ZN6S285C4D0Ev,
  (VTBL_ENTRY)&_ZN6S285C62v9Ev,
  (VTBL_ENTRY)&_ZN6S285C63v10Ev,
  (VTBL_ENTRY)&_ZN6S285C63v11Ev,
  (VTBL_ENTRY)&_ZN6S285C63v12Ev,
  (VTBL_ENTRY)&_ZN6S285C63v13Ev,
  (VTBL_ENTRY)&_ZN6S285C63v14Ev,
  (VTBL_ENTRY)&_ZN6S285C63v15Ev,
  (VTBL_ENTRY)&_ZN6S285C63v16Ev,
  (VTBL_ENTRY)&_ZN6S285C63v17Ev,
  (VTBL_ENTRY)&_ZN6S285C63v18Ev,
  (VTBL_ENTRY)&_ZN6S285C63v19Ev,
  (VTBL_ENTRY)&_ZN6S285C63v20Ev,
  (VTBL_ENTRY)&_ZN6S285C63v21Ev,
  (VTBL_ENTRY)&_ZN6S285C63v22Ev,
  (VTBL_ENTRY)&_ZN6S285C63v23Ev,
  (VTBL_ENTRY)&_ZN6S285C63v24Ev,
  (VTBL_ENTRY)&_ZN6S285C63v25Ev,
  (VTBL_ENTRY)&_ZN6S285C63v26Ev,
  (VTBL_ENTRY)&_ZN6S285C63v27Ev,
  (VTBL_ENTRY)&_ZN6S285C63v28Ev,
  (VTBL_ENTRY)&_ZN6S285C63v29Ev,
  (VTBL_ENTRY)&_ZN6S285C63v30Ev,
  (VTBL_ENTRY)&_ZN6S285C63v31Ev,
  (VTBL_ENTRY)&_ZN6S285C63v32Ev,
  (VTBL_ENTRY)&_ZN6S285C63v33Ev,
  (VTBL_ENTRY)&_ZN6S285C63v34Ev,
  (VTBL_ENTRY)&_ZN6S285C63v35Ev,
  (VTBL_ENTRY)&_ZN6S285C63v36Ev,
  (VTBL_ENTRY)&_ZN6S285C63v37Ev,
  (VTBL_ENTRY)&_ZN6S285C63v38Ev,
  (VTBL_ENTRY)&_ZN6S285C63v39Ev,
  (VTBL_ENTRY)&_ZN6S285C63v40Ev,
  (VTBL_ENTRY)&_ZN6S285C63v41Ev,
  (VTBL_ENTRY)&_ZN6S285C63v42Ev,
  (VTBL_ENTRY)&_ZN6S285C63v43Ev,
  (VTBL_ENTRY)&_ZN6S285C63v44Ev,
  (VTBL_ENTRY)&_ZN6S285C63v45Ev,
  (VTBL_ENTRY)&_ZN6S285C63v46Ev,
  (VTBL_ENTRY)&_ZN6S285C63v47Ev,
  (VTBL_ENTRY)&_ZN6S285C63v48Ev,
  (VTBL_ENTRY)&_ZN6S285C63v49Ev,
  (VTBL_ENTRY)&_ZN6S285C63v50Ev,
  (VTBL_ENTRY)&_ZN6S285C63v51Ev,
  (VTBL_ENTRY)&_ZN6S285C63v52Ev,
  (VTBL_ENTRY)&_ZN6S285C63v53Ev,
  (VTBL_ENTRY)&_ZN6S285C63v54Ev,
  (VTBL_ENTRY)&_ZN6S285C63v55Ev,
  (VTBL_ENTRY)&_ZN6S285C63v56Ev,
  (VTBL_ENTRY)&_ZN6S285C63v57Ev,
  (VTBL_ENTRY)&_ZN6S285C63v58Ev,
  (VTBL_ENTRY)&_ZN6S285C63v59Ev,
  (VTBL_ENTRY)&_ZN6S285C63v60Ev,
  (VTBL_ENTRY)&_ZN6S285C63v61Ev,
  (VTBL_ENTRY)&_ZN6S285C63v62Ev,
  (VTBL_ENTRY)&_ZN6S285C63v63Ev,
  (VTBL_ENTRY)&_ZN6S285C63v64Ev,
  (VTBL_ENTRY)&_ZN6S285C63v65Ev,
  (VTBL_ENTRY)&_ZN6S285C63v66Ev,
  (VTBL_ENTRY)&_ZN6S285C63v67Ev,
  (VTBL_ENTRY)&_ZN6S285C63v68Ev,
  (VTBL_ENTRY)&_ZN6S285C63v69Ev,
  (VTBL_ENTRY)&_ZN6S285C63v70Ev,
  (VTBL_ENTRY)&_ZN6S285C63v71Ev,
  (VTBL_ENTRY)&_ZN6S285C63v72Ev,
  (VTBL_ENTRY)&_ZN6S285C53v73Ev,
  (VTBL_ENTRY)&_ZN6S285C53v74Ev,
  (VTBL_ENTRY)&_ZN6S285C53v75Ev,
  (VTBL_ENTRY)&_ZN6S285C53v76Ev,
  (VTBL_ENTRY)&_ZN6S285C53v77Ev,
  (VTBL_ENTRY)&_ZN6S285C43v78Ev,
  (VTBL_ENTRY)&_ZN6S285C43v79Ev,
  (VTBL_ENTRY)&_ZN6S285C43v80Ev,
  (VTBL_ENTRY)&_ZN6S285C43v81Ev,
  (VTBL_ENTRY)&_ZN6S285C43v82Ev,
  (VTBL_ENTRY)&_ZN6S285C43v83Ev,
  (VTBL_ENTRY)&_ZN6S285C43v84Ev,
  (VTBL_ENTRY)&_ZN6S285C43v85Ev,
  (VTBL_ENTRY)&_ZN6S285C43v86Ev,
  (VTBL_ENTRY)&_ZN6S285C43v87Ev,
  (VTBL_ENTRY)&_ZN6S285C43v88Ev,
  (VTBL_ENTRY)&_ZN6S285C43v89Ev,
  (VTBL_ENTRY)&_ZN6S285C43v90Ev,
  (VTBL_ENTRY)&_ZN6S285C43v91Ev,
  (VTBL_ENTRY)&_ZN6S285C43v92Ev,
  (VTBL_ENTRY)&_ZN6S285C43v93Ev,
  (VTBL_ENTRY)&_ZN6S285C43v94Ev,
  (VTBL_ENTRY)&_ZN6S285C43v95Ev,
  (VTBL_ENTRY)&_ZN6S285C43v96Ev,
  (VTBL_ENTRY)&_ZN6S285C43v97Ev,
  (VTBL_ENTRY)&_ZN6S285C43v98Ev,
  (VTBL_ENTRY)&_ZN6S285C43v99Ev,
};
extern VTBL_ENTRY _ZTI6S285C4[];
extern  VTBL_ENTRY _ZTV6S285C4[];
Class_Descriptor cd_S285C4 = {  "S285C4", // class name
  bases_S285C4, 2,
  &(vtc_S285C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(136,84), // object size
  NSPAIRA(_ZTI6S285C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S285C4),95, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S285C18  : S235C13_nt {
};
//SIG(-1 S285C18) C1{ BC2{ m Fp Fi[2]}}



static void Test_S285C18()
{
  extern Class_Descriptor cd_S285C18;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S285C18, buf);
    S285C18 &lv = *(new (buf) S285C18());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S285C18)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S285C18)");
    check_base_class_offset(lv, (S235C13_nt*), 0, "S285C18");
    test_class_info(&lv, &cd_S285C18);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS285C18(Test_S285C18, "S285C18", ABISELECT(16,12));

#else // __cplusplus

extern Class_Descriptor cd_S235C13_nt;
static Base_Class bases_S285C18[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S235C13_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
Class_Descriptor cd_S285C18 = {  "S285C18", // class name
  bases_S285C18, 1,
  0, // no vftv
  0, //no vtt
  ABISELECT(16,12), // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S285C17  : S285C18 {
};
//SIG(-1 S285C17) C1{ BC2{ BC3{ m Fp Fi[2]}}}



static void Test_S285C17()
{
  extern Class_Descriptor cd_S285C17;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S285C17, buf);
    S285C17 &lv = *(new (buf) S285C17());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S285C17)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S285C17)");
    check_base_class_offset(lv, (S235C13_nt*)(S285C18*), 0, "S285C17");
    check_base_class_offset(lv, (S285C18*), 0, "S285C17");
    test_class_info(&lv, &cd_S285C17);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS285C17(Test_S285C17, "S285C17", ABISELECT(16,12));

#else // __cplusplus

extern Class_Descriptor cd_S235C13_nt;
extern Class_Descriptor cd_S285C18;
static Base_Class bases_S285C17[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S235C13_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S285C18,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
Class_Descriptor cd_S285C17 = {  "S285C17", // class name
  bases_S285C17, 2,
  0, // no vftv
  0, //no vtt
  ABISELECT(16,12), // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S285C19  {
  int s285c19f0[4];
  void  mf285c19(); // _ZN7S285C198mf285c19Ev
};
//SIG(-1 S285C19) C1{ m Fi[4]}


void  S285C19 ::mf285c19(){}

static void Test_S285C19()
{
  {
    init_simple_test("S285C19");
    S285C19 lv;
    check2(sizeof(lv), 16, "sizeof(S285C19)");
    check2(__alignof__(lv), 4, "__alignof__(S285C19)");
    check_field_offset(lv, s285c19f0, 0, "S285C19.s285c19f0");
  }
}
static Arrange_To_Call_Me vS285C19(Test_S285C19, "S285C19", 16);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S285C3  : S285C4 {
  void *s285c3f0;
  ::S836C39 s285c3f1;
  ::S836C39 s285c3f2;
  ::S235C9_nt s285c3f3;
  ::S235C9_nt s285c3f4;
  int s285c3f5;
  ::S836C29 s285c3f6;
  void *s285c3f7;
  unsigned int s285c3f8:1;
  unsigned int s285c3f9:1;
  unsigned int s285c3f10:1;
  unsigned int s285c3f11:1;
  unsigned int s285c3f12:1;
  unsigned int s285c3f13:1;
  unsigned int s285c3f14:1;
  unsigned int s285c3f15:1;
  unsigned int s285c3f16:1;
  unsigned int s285c3f17:1;
  unsigned int s285c3f18:1;
  void *s285c3f19;
  ::S235C17 s285c3f20;
  ::S836C25 s285c3f21;
  unsigned int s285c3f22:1;
  ::S235C11_nt s285c3f23;
  ::S235C11_nt s285c3f24;
  ::S285C17 s285c3f25;
  ::S285C17 s285c3f26;
  char s285c3f27[2];
  ::S285C19 s285c3f28;
  int s285c3f29[3];
  char s285c3f30[2];
  int s285c3f31[2];
  virtual  ~S285C3(); // _ZN6S285C3D1Ev
  virtual void  v100(); // _ZN6S285C34v100Ev
  virtual void  v101(); // _ZN6S285C34v101Ev
  virtual void  v102(); // _ZN6S285C34v102Ev
  virtual void  v103(); // _ZN6S285C34v103Ev
  virtual void  v104(); // _ZN6S285C34v104Ev
  virtual void  v105(); // _ZN6S285C34v105Ev
  virtual void  v106(); // _ZN6S285C34v106Ev
  virtual void  v107(); // _ZN6S285C34v107Ev
  virtual void  v108(); // _ZN6S285C34v108Ev
  virtual void  v109(); // _ZN6S285C34v109Ev
  virtual void  v110(); // _ZN6S285C34v110Ev
  virtual void  v111(); // _ZN6S285C34v111Ev
  virtual void  v112(); // _ZN6S285C34v112Ev
  virtual void  v113(); // _ZN6S285C34v113Ev
  virtual void  v114(); // _ZN6S285C34v114Ev
  virtual void  v115(); // _ZN6S285C34v115Ev
  virtual void  v116(); // _ZN6S285C34v116Ev
  virtual void  v117(); // _ZN6S285C34v117Ev
  virtual void  v118(); // _ZN6S285C34v118Ev
  virtual void  v119(); // _ZN6S285C34v119Ev
  virtual void  v120(); // _ZN6S285C34v120Ev
  virtual void  v121(); // _ZN6S285C34v121Ev
  virtual void  v122(); // _ZN6S285C34v122Ev
  virtual void  v123(); // _ZN6S285C34v123Ev
  virtual void  v124(); // _ZN6S285C34v124Ev
  virtual void  v125(); // _ZN6S285C34v125Ev
  virtual void  v126(); // _ZN6S285C34v126Ev
  S285C3(); // tgen
};
//SIG(-1 S285C3) C1{ BC2{ BC3{ BC4{ vd v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 v91 Fi FL Fp[4] Fi[2] Fp FC5{ m Fi[2]} Fp[2]} vd v92 v93 v94 v95 v96 Fp FC5} vd v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 v110 v111 v112 v113 v114 v115 v116 v117 v118 Fp[2] Fi:1 Fi:1 Fi:1 Fi:1 Fc} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 Fp FC6{ m} FC6 FC7{ m Fi[4]} FC7 Fi FC8{ m} Fp Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fp FC9{ BC10{ BC11{ m Fp Fi[2]}}} FC12{ m} Fi:1 FC13{ BC14{ BC11}} FC13 FC15{ BC16{ BC11}} FC15 Fc[2] FC17{ m Fi[4]} Fi[3] Fc[2] Fi[2]}


 S285C3 ::~S285C3(){ note_dtor("S285C3", this);}
void  S285C3 ::v100(){vfunc_called(this, "_ZN6S285C34v100Ev");}
void  S285C3 ::v101(){vfunc_called(this, "_ZN6S285C34v101Ev");}
void  S285C3 ::v102(){vfunc_called(this, "_ZN6S285C34v102Ev");}
void  S285C3 ::v103(){vfunc_called(this, "_ZN6S285C34v103Ev");}
void  S285C3 ::v104(){vfunc_called(this, "_ZN6S285C34v104Ev");}
void  S285C3 ::v105(){vfunc_called(this, "_ZN6S285C34v105Ev");}
void  S285C3 ::v106(){vfunc_called(this, "_ZN6S285C34v106Ev");}
void  S285C3 ::v107(){vfunc_called(this, "_ZN6S285C34v107Ev");}
void  S285C3 ::v108(){vfunc_called(this, "_ZN6S285C34v108Ev");}
void  S285C3 ::v109(){vfunc_called(this, "_ZN6S285C34v109Ev");}
void  S285C3 ::v110(){vfunc_called(this, "_ZN6S285C34v110Ev");}
void  S285C3 ::v111(){vfunc_called(this, "_ZN6S285C34v111Ev");}
void  S285C3 ::v112(){vfunc_called(this, "_ZN6S285C34v112Ev");}
void  S285C3 ::v113(){vfunc_called(this, "_ZN6S285C34v113Ev");}
void  S285C3 ::v114(){vfunc_called(this, "_ZN6S285C34v114Ev");}
void  S285C3 ::v115(){vfunc_called(this, "_ZN6S285C34v115Ev");}
void  S285C3 ::v116(){vfunc_called(this, "_ZN6S285C34v116Ev");}
void  S285C3 ::v117(){vfunc_called(this, "_ZN6S285C34v117Ev");}
void  S285C3 ::v118(){vfunc_called(this, "_ZN6S285C34v118Ev");}
void  S285C3 ::v119(){vfunc_called(this, "_ZN6S285C34v119Ev");}
void  S285C3 ::v120(){vfunc_called(this, "_ZN6S285C34v120Ev");}
void  S285C3 ::v121(){vfunc_called(this, "_ZN6S285C34v121Ev");}
void  S285C3 ::v122(){vfunc_called(this, "_ZN6S285C34v122Ev");}
void  S285C3 ::v123(){vfunc_called(this, "_ZN6S285C34v123Ev");}
void  S285C3 ::v124(){vfunc_called(this, "_ZN6S285C34v124Ev");}
void  S285C3 ::v125(){vfunc_called(this, "_ZN6S285C34v125Ev");}
void  S285C3 ::v126(){vfunc_called(this, "_ZN6S285C34v126Ev");}
S285C3 ::S285C3(){ note_ctor("S285C3", this);} // tgen

static void Test_S285C3()
{
  extern Class_Descriptor cd_S285C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(45,64)];
    init_test(&cd_S285C3, buf);
    S285C3 *dp, &lv = *(dp=new (buf) S285C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(352,252), "sizeof(S285C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S285C3)");
    check_base_class_offset(lv, (S285C6*)(S285C5*)(S285C4*), 0, "S285C3");
    check_base_class_offset(lv, (S285C5*)(S285C4*), 0, "S285C3");
    check_base_class_offset(lv, (S285C4*), 0, "S285C3");
    check_field_offset(lv, s285c3f0, ABISELECT(136,84), "S285C3.s285c3f0");
    check_field_offset(lv, s285c3f1, ABISELECT(144,88), "S285C3.s285c3f1");
    check_field_offset(lv, s285c3f2, ABISELECT(145,89), "S285C3.s285c3f2");
    check_field_offset(lv, s285c3f3, ABISELECT(148,92), "S285C3.s285c3f3");
    check_field_offset(lv, s285c3f4, ABISELECT(164,108), "S285C3.s285c3f4");
    check_field_offset(lv, s285c3f5, ABISELECT(180,124), "S285C3.s285c3f5");
    check_field_offset(lv, s285c3f6, ABISELECT(184,128), "S285C3.s285c3f6");
    check_field_offset(lv, s285c3f7, ABISELECT(192,132), "S285C3.s285c3f7");
    set_bf_and_test(lv, s285c3f8, ABISELECT(200,136), 0, 1, 1, "S285C3");
    set_bf_and_test(lv, s285c3f9, ABISELECT(200,136), 1, 1, 1, "S285C3");
    set_bf_and_test(lv, s285c3f10, ABISELECT(200,136), 2, 1, 1, "S285C3");
    set_bf_and_test(lv, s285c3f11, ABISELECT(200,136), 3, 1, 1, "S285C3");
    set_bf_and_test(lv, s285c3f12, ABISELECT(200,136), 4, 1, 1, "S285C3");
    set_bf_and_test(lv, s285c3f13, ABISELECT(200,136), 5, 1, 1, "S285C3");
    set_bf_and_test(lv, s285c3f14, ABISELECT(200,136), 6, 1, 1, "S285C3");
    set_bf_and_test(lv, s285c3f15, ABISELECT(200,136), 7, 1, 1, "S285C3");
    set_bf_and_test(lv, s285c3f16, ABISELECT(201,137), 0, 1, 1, "S285C3");
    set_bf_and_test(lv, s285c3f17, ABISELECT(201,137), 1, 1, 1, "S285C3");
    set_bf_and_test(lv, s285c3f18, ABISELECT(201,137), 2, 1, 1, "S285C3");
    check_field_offset(lv, s285c3f19, ABISELECT(208,140), "S285C3.s285c3f19");
    check_field_offset(lv, s285c3f20, ABISELECT(216,144), "S285C3.s285c3f20");
    check_field_offset(lv, s285c3f21, ABISELECT(232,156), "S285C3.s285c3f21");
    set_bf_and_test(lv, s285c3f22, ABISELECT(233,157), 0, 1, 1, "S285C3");
    check_field_offset(lv, s285c3f23, ABISELECT(240,160), "S285C3.s285c3f23");
    check_field_offset(lv, s285c3f24, ABISELECT(256,172), "S285C3.s285c3f24");
    check_field_offset(lv, s285c3f25, ABISELECT(272,184), "S285C3.s285c3f25");
    check_field_offset(lv, s285c3f26, ABISELECT(288,196), "S285C3.s285c3f26");
    check_field_offset(lv, s285c3f27, ABISELECT(304,208), "S285C3.s285c3f27");
    check_field_offset(lv, s285c3f28, ABISELECT(308,212), "S285C3.s285c3f28");
    check_field_offset(lv, s285c3f29, ABISELECT(324,228), "S285C3.s285c3f29");
    check_field_offset(lv, s285c3f30, ABISELECT(336,240), "S285C3.s285c3f30");
    check_field_offset(lv, s285c3f31, ABISELECT(340,244), "S285C3.s285c3f31");
    test_class_info(&lv, &cd_S285C3);
    dp->~S285C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS285C3(Test_S285C3, "S285C3", ABISELECT(352,252));

#else // __cplusplus

extern void _ZN6S285C3C1Ev();
extern void _ZN6S285C3D1Ev();
Name_Map name_map_S285C3[] = {
  NSPAIR(_ZN6S285C3C1Ev),
  NSPAIR(_ZN6S285C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S285C6;
extern VTBL_ENTRY _ZTI6S285C6[];
extern  VTBL_ENTRY _ZTV6S285C6[];
extern Class_Descriptor cd_S285C5;
extern VTBL_ENTRY _ZTI6S285C5[];
extern  VTBL_ENTRY _ZTV6S285C5[];
extern Class_Descriptor cd_S285C4;
extern VTBL_ENTRY _ZTI6S285C4[];
extern  VTBL_ENTRY _ZTV6S285C4[];
static Base_Class bases_S285C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S285C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S285C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S285C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S285C3[];
extern void _ZN6S285C3D1Ev();
extern void _ZN6S285C3D0Ev();
extern void _ZN6S285C62v9Ev();
extern void _ZN6S285C63v10Ev();
extern void _ZN6S285C63v11Ev();
extern void _ZN6S285C63v12Ev();
extern void _ZN6S285C63v13Ev();
extern void _ZN6S285C63v14Ev();
extern void _ZN6S285C63v15Ev();
extern void _ZN6S285C63v16Ev();
extern void _ZN6S285C63v17Ev();
extern void _ZN6S285C63v18Ev();
extern void _ZN6S285C63v19Ev();
extern void _ZN6S285C63v20Ev();
extern void _ZN6S285C63v21Ev();
extern void _ZN6S285C63v22Ev();
extern void _ZN6S285C63v23Ev();
extern void _ZN6S285C63v24Ev();
extern void _ZN6S285C63v25Ev();
extern void _ZN6S285C63v26Ev();
extern void _ZN6S285C63v27Ev();
extern void _ZN6S285C63v28Ev();
extern void _ZN6S285C63v29Ev();
extern void _ZN6S285C63v30Ev();
extern void _ZN6S285C63v31Ev();
extern void _ZN6S285C63v32Ev();
extern void _ZN6S285C63v33Ev();
extern void _ZN6S285C63v34Ev();
extern void _ZN6S285C63v35Ev();
extern void _ZN6S285C63v36Ev();
extern void _ZN6S285C63v37Ev();
extern void _ZN6S285C63v38Ev();
extern void _ZN6S285C63v39Ev();
extern void _ZN6S285C63v40Ev();
extern void _ZN6S285C63v41Ev();
extern void _ZN6S285C63v42Ev();
extern void _ZN6S285C63v43Ev();
extern void _ZN6S285C63v44Ev();
extern void _ZN6S285C63v45Ev();
extern void _ZN6S285C63v46Ev();
extern void _ZN6S285C63v47Ev();
extern void _ZN6S285C63v48Ev();
extern void _ZN6S285C63v49Ev();
extern void _ZN6S285C63v50Ev();
extern void _ZN6S285C63v51Ev();
extern void _ZN6S285C63v52Ev();
extern void _ZN6S285C63v53Ev();
extern void _ZN6S285C63v54Ev();
extern void _ZN6S285C63v55Ev();
extern void _ZN6S285C63v56Ev();
extern void _ZN6S285C63v57Ev();
extern void _ZN6S285C63v58Ev();
extern void _ZN6S285C63v59Ev();
extern void _ZN6S285C63v60Ev();
extern void _ZN6S285C63v61Ev();
extern void _ZN6S285C63v62Ev();
extern void _ZN6S285C63v63Ev();
extern void _ZN6S285C63v64Ev();
extern void _ZN6S285C63v65Ev();
extern void _ZN6S285C63v66Ev();
extern void _ZN6S285C63v67Ev();
extern void _ZN6S285C63v68Ev();
extern void _ZN6S285C63v69Ev();
extern void _ZN6S285C63v70Ev();
extern void _ZN6S285C63v71Ev();
extern void _ZN6S285C63v72Ev();
extern void _ZN6S285C53v73Ev();
extern void _ZN6S285C53v74Ev();
extern void _ZN6S285C53v75Ev();
extern void _ZN6S285C53v76Ev();
extern void _ZN6S285C53v77Ev();
extern void _ZN6S285C43v78Ev();
extern void _ZN6S285C43v79Ev();
extern void _ZN6S285C43v80Ev();
extern void _ZN6S285C43v81Ev();
extern void _ZN6S285C43v82Ev();
extern void _ZN6S285C43v83Ev();
extern void _ZN6S285C43v84Ev();
extern void _ZN6S285C43v85Ev();
extern void _ZN6S285C43v86Ev();
extern void _ZN6S285C43v87Ev();
extern void _ZN6S285C43v88Ev();
extern void _ZN6S285C43v89Ev();
extern void _ZN6S285C43v90Ev();
extern void _ZN6S285C43v91Ev();
extern void _ZN6S285C43v92Ev();
extern void _ZN6S285C43v93Ev();
extern void _ZN6S285C43v94Ev();
extern void _ZN6S285C43v95Ev();
extern void _ZN6S285C43v96Ev();
extern void _ZN6S285C43v97Ev();
extern void _ZN6S285C43v98Ev();
extern void _ZN6S285C43v99Ev();
extern void _ZN6S285C34v100Ev();
extern void _ZN6S285C34v101Ev();
extern void _ZN6S285C34v102Ev();
extern void _ZN6S285C34v103Ev();
extern void _ZN6S285C34v104Ev();
extern void _ZN6S285C34v105Ev();
extern void _ZN6S285C34v106Ev();
extern void _ZN6S285C34v107Ev();
extern void _ZN6S285C34v108Ev();
extern void _ZN6S285C34v109Ev();
extern void _ZN6S285C34v110Ev();
extern void _ZN6S285C34v111Ev();
extern void _ZN6S285C34v112Ev();
extern void _ZN6S285C34v113Ev();
extern void _ZN6S285C34v114Ev();
extern void _ZN6S285C34v115Ev();
extern void _ZN6S285C34v116Ev();
extern void _ZN6S285C34v117Ev();
extern void _ZN6S285C34v118Ev();
extern void _ZN6S285C34v119Ev();
extern void _ZN6S285C34v120Ev();
extern void _ZN6S285C34v121Ev();
extern void _ZN6S285C34v122Ev();
extern void _ZN6S285C34v123Ev();
extern void _ZN6S285C34v124Ev();
extern void _ZN6S285C34v125Ev();
extern void _ZN6S285C34v126Ev();
static  VTBL_ENTRY vtc_S285C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S285C3[0]),
  (VTBL_ENTRY)&_ZN6S285C3D1Ev,
  (VTBL_ENTRY)&_ZN6S285C3D0Ev,
  (VTBL_ENTRY)&_ZN6S285C62v9Ev,
  (VTBL_ENTRY)&_ZN6S285C63v10Ev,
  (VTBL_ENTRY)&_ZN6S285C63v11Ev,
  (VTBL_ENTRY)&_ZN6S285C63v12Ev,
  (VTBL_ENTRY)&_ZN6S285C63v13Ev,
  (VTBL_ENTRY)&_ZN6S285C63v14Ev,
  (VTBL_ENTRY)&_ZN6S285C63v15Ev,
  (VTBL_ENTRY)&_ZN6S285C63v16Ev,
  (VTBL_ENTRY)&_ZN6S285C63v17Ev,
  (VTBL_ENTRY)&_ZN6S285C63v18Ev,
  (VTBL_ENTRY)&_ZN6S285C63v19Ev,
  (VTBL_ENTRY)&_ZN6S285C63v20Ev,
  (VTBL_ENTRY)&_ZN6S285C63v21Ev,
  (VTBL_ENTRY)&_ZN6S285C63v22Ev,
  (VTBL_ENTRY)&_ZN6S285C63v23Ev,
  (VTBL_ENTRY)&_ZN6S285C63v24Ev,
  (VTBL_ENTRY)&_ZN6S285C63v25Ev,
  (VTBL_ENTRY)&_ZN6S285C63v26Ev,
  (VTBL_ENTRY)&_ZN6S285C63v27Ev,
  (VTBL_ENTRY)&_ZN6S285C63v28Ev,
  (VTBL_ENTRY)&_ZN6S285C63v29Ev,
  (VTBL_ENTRY)&_ZN6S285C63v30Ev,
  (VTBL_ENTRY)&_ZN6S285C63v31Ev,
  (VTBL_ENTRY)&_ZN6S285C63v32Ev,
  (VTBL_ENTRY)&_ZN6S285C63v33Ev,
  (VTBL_ENTRY)&_ZN6S285C63v34Ev,
  (VTBL_ENTRY)&_ZN6S285C63v35Ev,
  (VTBL_ENTRY)&_ZN6S285C63v36Ev,
  (VTBL_ENTRY)&_ZN6S285C63v37Ev,
  (VTBL_ENTRY)&_ZN6S285C63v38Ev,
  (VTBL_ENTRY)&_ZN6S285C63v39Ev,
  (VTBL_ENTRY)&_ZN6S285C63v40Ev,
  (VTBL_ENTRY)&_ZN6S285C63v41Ev,
  (VTBL_ENTRY)&_ZN6S285C63v42Ev,
  (VTBL_ENTRY)&_ZN6S285C63v43Ev,
  (VTBL_ENTRY)&_ZN6S285C63v44Ev,
  (VTBL_ENTRY)&_ZN6S285C63v45Ev,
  (VTBL_ENTRY)&_ZN6S285C63v46Ev,
  (VTBL_ENTRY)&_ZN6S285C63v47Ev,
  (VTBL_ENTRY)&_ZN6S285C63v48Ev,
  (VTBL_ENTRY)&_ZN6S285C63v49Ev,
  (VTBL_ENTRY)&_ZN6S285C63v50Ev,
  (VTBL_ENTRY)&_ZN6S285C63v51Ev,
  (VTBL_ENTRY)&_ZN6S285C63v52Ev,
  (VTBL_ENTRY)&_ZN6S285C63v53Ev,
  (VTBL_ENTRY)&_ZN6S285C63v54Ev,
  (VTBL_ENTRY)&_ZN6S285C63v55Ev,
  (VTBL_ENTRY)&_ZN6S285C63v56Ev,
  (VTBL_ENTRY)&_ZN6S285C63v57Ev,
  (VTBL_ENTRY)&_ZN6S285C63v58Ev,
  (VTBL_ENTRY)&_ZN6S285C63v59Ev,
  (VTBL_ENTRY)&_ZN6S285C63v60Ev,
  (VTBL_ENTRY)&_ZN6S285C63v61Ev,
  (VTBL_ENTRY)&_ZN6S285C63v62Ev,
  (VTBL_ENTRY)&_ZN6S285C63v63Ev,
  (VTBL_ENTRY)&_ZN6S285C63v64Ev,
  (VTBL_ENTRY)&_ZN6S285C63v65Ev,
  (VTBL_ENTRY)&_ZN6S285C63v66Ev,
  (VTBL_ENTRY)&_ZN6S285C63v67Ev,
  (VTBL_ENTRY)&_ZN6S285C63v68Ev,
  (VTBL_ENTRY)&_ZN6S285C63v69Ev,
  (VTBL_ENTRY)&_ZN6S285C63v70Ev,
  (VTBL_ENTRY)&_ZN6S285C63v71Ev,
  (VTBL_ENTRY)&_ZN6S285C63v72Ev,
  (VTBL_ENTRY)&_ZN6S285C53v73Ev,
  (VTBL_ENTRY)&_ZN6S285C53v74Ev,
  (VTBL_ENTRY)&_ZN6S285C53v75Ev,
  (VTBL_ENTRY)&_ZN6S285C53v76Ev,
  (VTBL_ENTRY)&_ZN6S285C53v77Ev,
  (VTBL_ENTRY)&_ZN6S285C43v78Ev,
  (VTBL_ENTRY)&_ZN6S285C43v79Ev,
  (VTBL_ENTRY)&_ZN6S285C43v80Ev,
  (VTBL_ENTRY)&_ZN6S285C43v81Ev,
  (VTBL_ENTRY)&_ZN6S285C43v82Ev,
  (VTBL_ENTRY)&_ZN6S285C43v83Ev,
  (VTBL_ENTRY)&_ZN6S285C43v84Ev,
  (VTBL_ENTRY)&_ZN6S285C43v85Ev,
  (VTBL_ENTRY)&_ZN6S285C43v86Ev,
  (VTBL_ENTRY)&_ZN6S285C43v87Ev,
  (VTBL_ENTRY)&_ZN6S285C43v88Ev,
  (VTBL_ENTRY)&_ZN6S285C43v89Ev,
  (VTBL_ENTRY)&_ZN6S285C43v90Ev,
  (VTBL_ENTRY)&_ZN6S285C43v91Ev,
  (VTBL_ENTRY)&_ZN6S285C43v92Ev,
  (VTBL_ENTRY)&_ZN6S285C43v93Ev,
  (VTBL_ENTRY)&_ZN6S285C43v94Ev,
  (VTBL_ENTRY)&_ZN6S285C43v95Ev,
  (VTBL_ENTRY)&_ZN6S285C43v96Ev,
  (VTBL_ENTRY)&_ZN6S285C43v97Ev,
  (VTBL_ENTRY)&_ZN6S285C43v98Ev,
  (VTBL_ENTRY)&_ZN6S285C43v99Ev,
  (VTBL_ENTRY)&_ZN6S285C34v100Ev,
  (VTBL_ENTRY)&_ZN6S285C34v101Ev,
  (VTBL_ENTRY)&_ZN6S285C34v102Ev,
  (VTBL_ENTRY)&_ZN6S285C34v103Ev,
  (VTBL_ENTRY)&_ZN6S285C34v104Ev,
  (VTBL_ENTRY)&_ZN6S285C34v105Ev,
  (VTBL_ENTRY)&_ZN6S285C34v106Ev,
  (VTBL_ENTRY)&_ZN6S285C34v107Ev,
  (VTBL_ENTRY)&_ZN6S285C34v108Ev,
  (VTBL_ENTRY)&_ZN6S285C34v109Ev,
  (VTBL_ENTRY)&_ZN6S285C34v110Ev,
  (VTBL_ENTRY)&_ZN6S285C34v111Ev,
  (VTBL_ENTRY)&_ZN6S285C34v112Ev,
  (VTBL_ENTRY)&_ZN6S285C34v113Ev,
  (VTBL_ENTRY)&_ZN6S285C34v114Ev,
  (VTBL_ENTRY)&_ZN6S285C34v115Ev,
  (VTBL_ENTRY)&_ZN6S285C34v116Ev,
  (VTBL_ENTRY)&_ZN6S285C34v117Ev,
  (VTBL_ENTRY)&_ZN6S285C34v118Ev,
  (VTBL_ENTRY)&_ZN6S285C34v119Ev,
  (VTBL_ENTRY)&_ZN6S285C34v120Ev,
  (VTBL_ENTRY)&_ZN6S285C34v121Ev,
  (VTBL_ENTRY)&_ZN6S285C34v122Ev,
  (VTBL_ENTRY)&_ZN6S285C34v123Ev,
  (VTBL_ENTRY)&_ZN6S285C34v124Ev,
  (VTBL_ENTRY)&_ZN6S285C34v125Ev,
  (VTBL_ENTRY)&_ZN6S285C34v126Ev,
};
extern VTBL_ENTRY _ZTI6S285C3[];
extern  VTBL_ENTRY _ZTV6S285C3[];
Class_Descriptor cd_S285C3 = {  "S285C3", // class name
  bases_S285C3, 3,
  &(vtc_S285C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(352,252), // object size
  NSPAIRA(_ZTI6S285C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S285C3),122, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S285C2  : S285C3 {
  int s285c2f0[4];
  ::S836C39 s285c2f1;
  ::S235C20_nt s285c2f2;
  void *s285c2f3;
  virtual  ~S285C2(); // _ZN6S285C2D1Ev
  virtual void  v127(); // _ZN6S285C24v127Ev
  virtual void  v128(); // _ZN6S285C24v128Ev
  virtual void  v129(); // _ZN6S285C24v129Ev
  virtual void  v130(); // _ZN6S285C24v130Ev
  virtual void  v131(); // _ZN6S285C24v131Ev
  virtual void  v132(); // _ZN6S285C24v132Ev
  virtual void  v133(); // _ZN6S285C24v133Ev
  virtual void  v134(); // _ZN6S285C24v134Ev
  virtual void  v135(); // _ZN6S285C24v135Ev
  virtual void  v136(); // _ZN6S285C24v136Ev
  virtual void  v137(); // _ZN6S285C24v137Ev
  virtual void  v138(); // _ZN6S285C24v138Ev
  virtual void  v139(); // _ZN6S285C24v139Ev
  virtual void  v140(); // _ZN6S285C24v140Ev
  S285C2(); // tgen
};
//SIG(-1 S285C2) C1{ BC2{ BC3{ BC4{ BC5{ vd v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 Fi FL Fp[4] Fi[2] Fp FC6{ m Fi[2]} Fp[2]} vd v79 v80 v81 v82 v83 Fp FC6} vd v84 v85 v86 v87 v88 v89 v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 Fp[2] Fi:1 Fi:1 Fi:1 Fi:1 Fc} vd v106 v107 v108 v109 v110 v111 v112 v113 v114 v115 v116 v117 v118 v119 v120 v121 v122 v123 v124 v125 v126 v127 v128 v129 v130 v131 v132 Fp FC7{ m} FC7 FC8{ m Fi[4]} FC8 Fi FC9{ m} Fp Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fp FC10{ BC11{ BC12{ m Fp Fi[2]}}} FC13{ m} Fi:1 FC14{ BC15{ BC12}} FC14 FC16{ BC17{ BC12}} FC16 Fc[2] FC18{ m Fi[4]} Fi[3] Fc[2] Fi[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 Fi[4] FC7 FC19{ m Fi[3]} Fp}


 S285C2 ::~S285C2(){ note_dtor("S285C2", this);}
void  S285C2 ::v127(){vfunc_called(this, "_ZN6S285C24v127Ev");}
void  S285C2 ::v128(){vfunc_called(this, "_ZN6S285C24v128Ev");}
void  S285C2 ::v129(){vfunc_called(this, "_ZN6S285C24v129Ev");}
void  S285C2 ::v130(){vfunc_called(this, "_ZN6S285C24v130Ev");}
void  S285C2 ::v131(){vfunc_called(this, "_ZN6S285C24v131Ev");}
void  S285C2 ::v132(){vfunc_called(this, "_ZN6S285C24v132Ev");}
void  S285C2 ::v133(){vfunc_called(this, "_ZN6S285C24v133Ev");}
void  S285C2 ::v134(){vfunc_called(this, "_ZN6S285C24v134Ev");}
void  S285C2 ::v135(){vfunc_called(this, "_ZN6S285C24v135Ev");}
void  S285C2 ::v136(){vfunc_called(this, "_ZN6S285C24v136Ev");}
void  S285C2 ::v137(){vfunc_called(this, "_ZN6S285C24v137Ev");}
void  S285C2 ::v138(){vfunc_called(this, "_ZN6S285C24v138Ev");}
void  S285C2 ::v139(){vfunc_called(this, "_ZN6S285C24v139Ev");}
void  S285C2 ::v140(){vfunc_called(this, "_ZN6S285C24v140Ev");}
S285C2 ::S285C2(){ note_ctor("S285C2", this);} // tgen

static void Test_S285C2()
{
  extern Class_Descriptor cd_S285C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(50,73)];
    init_test(&cd_S285C2, buf);
    S285C2 *dp, &lv = *(dp=new (buf) S285C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(392,288), "sizeof(S285C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S285C2)");
    check_base_class_offset(lv, (S285C6*)(S285C5*)(S285C4*)(S285C3*), 0, "S285C2");
    check_base_class_offset(lv, (S285C5*)(S285C4*)(S285C3*), 0, "S285C2");
    check_base_class_offset(lv, (S285C4*)(S285C3*), 0, "S285C2");
    check_base_class_offset(lv, (S285C3*), 0, "S285C2");
    check_field_offset(lv, s285c2f0, ABISELECT(348,252), "S285C2.s285c2f0");
    check_field_offset(lv, s285c2f1, ABISELECT(364,268), "S285C2.s285c2f1");
    check_field_offset(lv, s285c2f2, ABISELECT(368,272), "S285C2.s285c2f2");
    check_field_offset(lv, s285c2f3, ABISELECT(384,284), "S285C2.s285c2f3");
    test_class_info(&lv, &cd_S285C2);
    dp->~S285C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS285C2(Test_S285C2, "S285C2", ABISELECT(392,288));

#else // __cplusplus

extern void _ZN6S285C2C1Ev();
extern void _ZN6S285C2D1Ev();
Name_Map name_map_S285C2[] = {
  NSPAIR(_ZN6S285C2C1Ev),
  NSPAIR(_ZN6S285C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S285C6;
extern VTBL_ENTRY _ZTI6S285C6[];
extern  VTBL_ENTRY _ZTV6S285C6[];
extern Class_Descriptor cd_S285C5;
extern VTBL_ENTRY _ZTI6S285C5[];
extern  VTBL_ENTRY _ZTV6S285C5[];
extern Class_Descriptor cd_S285C4;
extern VTBL_ENTRY _ZTI6S285C4[];
extern  VTBL_ENTRY _ZTV6S285C4[];
extern Class_Descriptor cd_S285C3;
extern VTBL_ENTRY _ZTI6S285C3[];
extern  VTBL_ENTRY _ZTV6S285C3[];
static Base_Class bases_S285C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S285C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S285C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S285C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S285C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S285C2[];
extern void _ZN6S285C2D1Ev();
extern void _ZN6S285C2D0Ev();
extern void _ZN6S285C62v9Ev();
extern void _ZN6S285C63v10Ev();
extern void _ZN6S285C63v11Ev();
extern void _ZN6S285C63v12Ev();
extern void _ZN6S285C63v13Ev();
extern void _ZN6S285C63v14Ev();
extern void _ZN6S285C63v15Ev();
extern void _ZN6S285C63v16Ev();
extern void _ZN6S285C63v17Ev();
extern void _ZN6S285C63v18Ev();
extern void _ZN6S285C63v19Ev();
extern void _ZN6S285C63v20Ev();
extern void _ZN6S285C63v21Ev();
extern void _ZN6S285C63v22Ev();
extern void _ZN6S285C63v23Ev();
extern void _ZN6S285C63v24Ev();
extern void _ZN6S285C63v25Ev();
extern void _ZN6S285C63v26Ev();
extern void _ZN6S285C63v27Ev();
extern void _ZN6S285C63v28Ev();
extern void _ZN6S285C63v29Ev();
extern void _ZN6S285C63v30Ev();
extern void _ZN6S285C63v31Ev();
extern void _ZN6S285C63v32Ev();
extern void _ZN6S285C63v33Ev();
extern void _ZN6S285C63v34Ev();
extern void _ZN6S285C63v35Ev();
extern void _ZN6S285C63v36Ev();
extern void _ZN6S285C63v37Ev();
extern void _ZN6S285C63v38Ev();
extern void _ZN6S285C63v39Ev();
extern void _ZN6S285C63v40Ev();
extern void _ZN6S285C63v41Ev();
extern void _ZN6S285C63v42Ev();
extern void _ZN6S285C63v43Ev();
extern void _ZN6S285C63v44Ev();
extern void _ZN6S285C63v45Ev();
extern void _ZN6S285C63v46Ev();
extern void _ZN6S285C63v47Ev();
extern void _ZN6S285C63v48Ev();
extern void _ZN6S285C63v49Ev();
extern void _ZN6S285C63v50Ev();
extern void _ZN6S285C63v51Ev();
extern void _ZN6S285C63v52Ev();
extern void _ZN6S285C63v53Ev();
extern void _ZN6S285C63v54Ev();
extern void _ZN6S285C63v55Ev();
extern void _ZN6S285C63v56Ev();
extern void _ZN6S285C63v57Ev();
extern void _ZN6S285C63v58Ev();
extern void _ZN6S285C63v59Ev();
extern void _ZN6S285C63v60Ev();
extern void _ZN6S285C63v61Ev();
extern void _ZN6S285C63v62Ev();
extern void _ZN6S285C63v63Ev();
extern void _ZN6S285C63v64Ev();
extern void _ZN6S285C63v65Ev();
extern void _ZN6S285C63v66Ev();
extern void _ZN6S285C63v67Ev();
extern void _ZN6S285C63v68Ev();
extern void _ZN6S285C63v69Ev();
extern void _ZN6S285C63v70Ev();
extern void _ZN6S285C63v71Ev();
extern void _ZN6S285C63v72Ev();
extern void _ZN6S285C53v73Ev();
extern void _ZN6S285C53v74Ev();
extern void _ZN6S285C53v75Ev();
extern void _ZN6S285C53v76Ev();
extern void _ZN6S285C53v77Ev();
extern void _ZN6S285C43v78Ev();
extern void _ZN6S285C43v79Ev();
extern void _ZN6S285C43v80Ev();
extern void _ZN6S285C43v81Ev();
extern void _ZN6S285C43v82Ev();
extern void _ZN6S285C43v83Ev();
extern void _ZN6S285C43v84Ev();
extern void _ZN6S285C43v85Ev();
extern void _ZN6S285C43v86Ev();
extern void _ZN6S285C43v87Ev();
extern void _ZN6S285C43v88Ev();
extern void _ZN6S285C43v89Ev();
extern void _ZN6S285C43v90Ev();
extern void _ZN6S285C43v91Ev();
extern void _ZN6S285C43v92Ev();
extern void _ZN6S285C43v93Ev();
extern void _ZN6S285C43v94Ev();
extern void _ZN6S285C43v95Ev();
extern void _ZN6S285C43v96Ev();
extern void _ZN6S285C43v97Ev();
extern void _ZN6S285C43v98Ev();
extern void _ZN6S285C43v99Ev();
extern void _ZN6S285C34v100Ev();
extern void _ZN6S285C34v101Ev();
extern void _ZN6S285C34v102Ev();
extern void _ZN6S285C34v103Ev();
extern void _ZN6S285C34v104Ev();
extern void _ZN6S285C34v105Ev();
extern void _ZN6S285C34v106Ev();
extern void _ZN6S285C34v107Ev();
extern void _ZN6S285C34v108Ev();
extern void _ZN6S285C34v109Ev();
extern void _ZN6S285C34v110Ev();
extern void _ZN6S285C34v111Ev();
extern void _ZN6S285C34v112Ev();
extern void _ZN6S285C34v113Ev();
extern void _ZN6S285C34v114Ev();
extern void _ZN6S285C34v115Ev();
extern void _ZN6S285C34v116Ev();
extern void _ZN6S285C34v117Ev();
extern void _ZN6S285C34v118Ev();
extern void _ZN6S285C34v119Ev();
extern void _ZN6S285C34v120Ev();
extern void _ZN6S285C34v121Ev();
extern void _ZN6S285C34v122Ev();
extern void _ZN6S285C34v123Ev();
extern void _ZN6S285C34v124Ev();
extern void _ZN6S285C34v125Ev();
extern void _ZN6S285C34v126Ev();
extern void _ZN6S285C24v127Ev();
extern void _ZN6S285C24v128Ev();
extern void _ZN6S285C24v129Ev();
extern void _ZN6S285C24v130Ev();
extern void _ZN6S285C24v131Ev();
extern void _ZN6S285C24v132Ev();
extern void _ZN6S285C24v133Ev();
extern void _ZN6S285C24v134Ev();
extern void _ZN6S285C24v135Ev();
extern void _ZN6S285C24v136Ev();
extern void _ZN6S285C24v137Ev();
extern void _ZN6S285C24v138Ev();
extern void _ZN6S285C24v139Ev();
extern void _ZN6S285C24v140Ev();
static  VTBL_ENTRY vtc_S285C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S285C2[0]),
  (VTBL_ENTRY)&_ZN6S285C2D1Ev,
  (VTBL_ENTRY)&_ZN6S285C2D0Ev,
  (VTBL_ENTRY)&_ZN6S285C62v9Ev,
  (VTBL_ENTRY)&_ZN6S285C63v10Ev,
  (VTBL_ENTRY)&_ZN6S285C63v11Ev,
  (VTBL_ENTRY)&_ZN6S285C63v12Ev,
  (VTBL_ENTRY)&_ZN6S285C63v13Ev,
  (VTBL_ENTRY)&_ZN6S285C63v14Ev,
  (VTBL_ENTRY)&_ZN6S285C63v15Ev,
  (VTBL_ENTRY)&_ZN6S285C63v16Ev,
  (VTBL_ENTRY)&_ZN6S285C63v17Ev,
  (VTBL_ENTRY)&_ZN6S285C63v18Ev,
  (VTBL_ENTRY)&_ZN6S285C63v19Ev,
  (VTBL_ENTRY)&_ZN6S285C63v20Ev,
  (VTBL_ENTRY)&_ZN6S285C63v21Ev,
  (VTBL_ENTRY)&_ZN6S285C63v22Ev,
  (VTBL_ENTRY)&_ZN6S285C63v23Ev,
  (VTBL_ENTRY)&_ZN6S285C63v24Ev,
  (VTBL_ENTRY)&_ZN6S285C63v25Ev,
  (VTBL_ENTRY)&_ZN6S285C63v26Ev,
  (VTBL_ENTRY)&_ZN6S285C63v27Ev,
  (VTBL_ENTRY)&_ZN6S285C63v28Ev,
  (VTBL_ENTRY)&_ZN6S285C63v29Ev,
  (VTBL_ENTRY)&_ZN6S285C63v30Ev,
  (VTBL_ENTRY)&_ZN6S285C63v31Ev,
  (VTBL_ENTRY)&_ZN6S285C63v32Ev,
  (VTBL_ENTRY)&_ZN6S285C63v33Ev,
  (VTBL_ENTRY)&_ZN6S285C63v34Ev,
  (VTBL_ENTRY)&_ZN6S285C63v35Ev,
  (VTBL_ENTRY)&_ZN6S285C63v36Ev,
  (VTBL_ENTRY)&_ZN6S285C63v37Ev,
  (VTBL_ENTRY)&_ZN6S285C63v38Ev,
  (VTBL_ENTRY)&_ZN6S285C63v39Ev,
  (VTBL_ENTRY)&_ZN6S285C63v40Ev,
  (VTBL_ENTRY)&_ZN6S285C63v41Ev,
  (VTBL_ENTRY)&_ZN6S285C63v42Ev,
  (VTBL_ENTRY)&_ZN6S285C63v43Ev,
  (VTBL_ENTRY)&_ZN6S285C63v44Ev,
  (VTBL_ENTRY)&_ZN6S285C63v45Ev,
  (VTBL_ENTRY)&_ZN6S285C63v46Ev,
  (VTBL_ENTRY)&_ZN6S285C63v47Ev,
  (VTBL_ENTRY)&_ZN6S285C63v48Ev,
  (VTBL_ENTRY)&_ZN6S285C63v49Ev,
  (VTBL_ENTRY)&_ZN6S285C63v50Ev,
  (VTBL_ENTRY)&_ZN6S285C63v51Ev,
  (VTBL_ENTRY)&_ZN6S285C63v52Ev,
  (VTBL_ENTRY)&_ZN6S285C63v53Ev,
  (VTBL_ENTRY)&_ZN6S285C63v54Ev,
  (VTBL_ENTRY)&_ZN6S285C63v55Ev,
  (VTBL_ENTRY)&_ZN6S285C63v56Ev,
  (VTBL_ENTRY)&_ZN6S285C63v57Ev,
  (VTBL_ENTRY)&_ZN6S285C63v58Ev,
  (VTBL_ENTRY)&_ZN6S285C63v59Ev,
  (VTBL_ENTRY)&_ZN6S285C63v60Ev,
  (VTBL_ENTRY)&_ZN6S285C63v61Ev,
  (VTBL_ENTRY)&_ZN6S285C63v62Ev,
  (VTBL_ENTRY)&_ZN6S285C63v63Ev,
  (VTBL_ENTRY)&_ZN6S285C63v64Ev,
  (VTBL_ENTRY)&_ZN6S285C63v65Ev,
  (VTBL_ENTRY)&_ZN6S285C63v66Ev,
  (VTBL_ENTRY)&_ZN6S285C63v67Ev,
  (VTBL_ENTRY)&_ZN6S285C63v68Ev,
  (VTBL_ENTRY)&_ZN6S285C63v69Ev,
  (VTBL_ENTRY)&_ZN6S285C63v70Ev,
  (VTBL_ENTRY)&_ZN6S285C63v71Ev,
  (VTBL_ENTRY)&_ZN6S285C63v72Ev,
  (VTBL_ENTRY)&_ZN6S285C53v73Ev,
  (VTBL_ENTRY)&_ZN6S285C53v74Ev,
  (VTBL_ENTRY)&_ZN6S285C53v75Ev,
  (VTBL_ENTRY)&_ZN6S285C53v76Ev,
  (VTBL_ENTRY)&_ZN6S285C53v77Ev,
  (VTBL_ENTRY)&_ZN6S285C43v78Ev,
  (VTBL_ENTRY)&_ZN6S285C43v79Ev,
  (VTBL_ENTRY)&_ZN6S285C43v80Ev,
  (VTBL_ENTRY)&_ZN6S285C43v81Ev,
  (VTBL_ENTRY)&_ZN6S285C43v82Ev,
  (VTBL_ENTRY)&_ZN6S285C43v83Ev,
  (VTBL_ENTRY)&_ZN6S285C43v84Ev,
  (VTBL_ENTRY)&_ZN6S285C43v85Ev,
  (VTBL_ENTRY)&_ZN6S285C43v86Ev,
  (VTBL_ENTRY)&_ZN6S285C43v87Ev,
  (VTBL_ENTRY)&_ZN6S285C43v88Ev,
  (VTBL_ENTRY)&_ZN6S285C43v89Ev,
  (VTBL_ENTRY)&_ZN6S285C43v90Ev,
  (VTBL_ENTRY)&_ZN6S285C43v91Ev,
  (VTBL_ENTRY)&_ZN6S285C43v92Ev,
  (VTBL_ENTRY)&_ZN6S285C43v93Ev,
  (VTBL_ENTRY)&_ZN6S285C43v94Ev,
  (VTBL_ENTRY)&_ZN6S285C43v95Ev,
  (VTBL_ENTRY)&_ZN6S285C43v96Ev,
  (VTBL_ENTRY)&_ZN6S285C43v97Ev,
  (VTBL_ENTRY)&_ZN6S285C43v98Ev,
  (VTBL_ENTRY)&_ZN6S285C43v99Ev,
  (VTBL_ENTRY)&_ZN6S285C34v100Ev,
  (VTBL_ENTRY)&_ZN6S285C34v101Ev,
  (VTBL_ENTRY)&_ZN6S285C34v102Ev,
  (VTBL_ENTRY)&_ZN6S285C34v103Ev,
  (VTBL_ENTRY)&_ZN6S285C34v104Ev,
  (VTBL_ENTRY)&_ZN6S285C34v105Ev,
  (VTBL_ENTRY)&_ZN6S285C34v106Ev,
  (VTBL_ENTRY)&_ZN6S285C34v107Ev,
  (VTBL_ENTRY)&_ZN6S285C34v108Ev,
  (VTBL_ENTRY)&_ZN6S285C34v109Ev,
  (VTBL_ENTRY)&_ZN6S285C34v110Ev,
  (VTBL_ENTRY)&_ZN6S285C34v111Ev,
  (VTBL_ENTRY)&_ZN6S285C34v112Ev,
  (VTBL_ENTRY)&_ZN6S285C34v113Ev,
  (VTBL_ENTRY)&_ZN6S285C34v114Ev,
  (VTBL_ENTRY)&_ZN6S285C34v115Ev,
  (VTBL_ENTRY)&_ZN6S285C34v116Ev,
  (VTBL_ENTRY)&_ZN6S285C34v117Ev,
  (VTBL_ENTRY)&_ZN6S285C34v118Ev,
  (VTBL_ENTRY)&_ZN6S285C34v119Ev,
  (VTBL_ENTRY)&_ZN6S285C34v120Ev,
  (VTBL_ENTRY)&_ZN6S285C34v121Ev,
  (VTBL_ENTRY)&_ZN6S285C34v122Ev,
  (VTBL_ENTRY)&_ZN6S285C34v123Ev,
  (VTBL_ENTRY)&_ZN6S285C34v124Ev,
  (VTBL_ENTRY)&_ZN6S285C34v125Ev,
  (VTBL_ENTRY)&_ZN6S285C34v126Ev,
  (VTBL_ENTRY)&_ZN6S285C24v127Ev,
  (VTBL_ENTRY)&_ZN6S285C24v128Ev,
  (VTBL_ENTRY)&_ZN6S285C24v129Ev,
  (VTBL_ENTRY)&_ZN6S285C24v130Ev,
  (VTBL_ENTRY)&_ZN6S285C24v131Ev,
  (VTBL_ENTRY)&_ZN6S285C24v132Ev,
  (VTBL_ENTRY)&_ZN6S285C24v133Ev,
  (VTBL_ENTRY)&_ZN6S285C24v134Ev,
  (VTBL_ENTRY)&_ZN6S285C24v135Ev,
  (VTBL_ENTRY)&_ZN6S285C24v136Ev,
  (VTBL_ENTRY)&_ZN6S285C24v137Ev,
  (VTBL_ENTRY)&_ZN6S285C24v138Ev,
  (VTBL_ENTRY)&_ZN6S285C24v139Ev,
  (VTBL_ENTRY)&_ZN6S285C24v140Ev,
};
extern VTBL_ENTRY _ZTI6S285C2[];
extern  VTBL_ENTRY _ZTV6S285C2[];
Class_Descriptor cd_S285C2 = {  "S285C2", // class name
  bases_S285C2, 4,
  &(vtc_S285C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(392,288), // object size
  NSPAIRA(_ZTI6S285C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S285C2),136, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  4, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S285C1  : S285C2 {
  int s285c1f0[2];
  void *s285c1f1[2];
  virtual  ~S285C1(); // _ZN6S285C1D1Ev
  virtual void  v1(); // _ZN6S285C12v1Ev
  virtual void  v2(); // _ZN6S285C12v2Ev
  virtual void  v3(); // _ZN6S285C12v3Ev
  virtual void  v4(); // _ZN6S285C12v4Ev
  virtual void  v5(); // _ZN6S285C12v5Ev
  virtual void  v6(); // _ZN6S285C12v6Ev
  virtual void  v7(); // _ZN6S285C12v7Ev
  virtual void  v8(); // _ZN6S285C12v8Ev
  S285C1(); // tgen
};
//SIG(1 S285C1) C1{ BC2{ BC3{ BC4{ BC5{ BC6{ vd v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 Fi FL Fp[4] Fi[2] Fp FC7{ m Fi[2]} Fp[2]} vd v73 v74 v75 v76 v77 Fp FC7} vd v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 Fp[2] Fi:1 Fi:1 Fi:1 Fi:1 Fc} vd v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 v110 v111 v112 v113 v114 v115 v116 v117 v118 v119 v120 v121 v122 v123 v124 v125 v126 Fp FC8{ m} FC8 FC9{ m Fi[4]} FC9 Fi FC10{ m} Fp Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fp FC11{ BC12{ BC13{ m Fp Fi[2]}}} FC14{ m} Fi:1 FC15{ BC16{ BC13}} FC15 FC17{ BC18{ BC13}} FC17 Fc[2] FC19{ m Fi[4]} Fi[3] Fc[2] Fi[2]} vd v127 v128 v129 v130 v131 v132 v133 v134 v135 v136 v137 v138 v139 v140 Fi[4] FC8 FC20{ m Fi[3]} Fp} vd v1 v2 v3 v4 v5 v6 v7 v8 Fi[2] Fp[2]}


 S285C1 ::~S285C1(){ note_dtor("S285C1", this);}
void  S285C1 ::v1(){vfunc_called(this, "_ZN6S285C12v1Ev");}
void  S285C1 ::v2(){vfunc_called(this, "_ZN6S285C12v2Ev");}
void  S285C1 ::v3(){vfunc_called(this, "_ZN6S285C12v3Ev");}
void  S285C1 ::v4(){vfunc_called(this, "_ZN6S285C12v4Ev");}
void  S285C1 ::v5(){vfunc_called(this, "_ZN6S285C12v5Ev");}
void  S285C1 ::v6(){vfunc_called(this, "_ZN6S285C12v6Ev");}
void  S285C1 ::v7(){vfunc_called(this, "_ZN6S285C12v7Ev");}
void  S285C1 ::v8(){vfunc_called(this, "_ZN6S285C12v8Ev");}
S285C1 ::S285C1(){ note_ctor("S285C1", this);} // tgen

static void Test_S285C1()
{
  extern Class_Descriptor cd_S285C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(53,77)];
    init_test(&cd_S285C1, buf);
    S285C1 *dp, &lv = *(dp=new (buf) S285C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(416,304), "sizeof(S285C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S285C1)");
    check_base_class_offset(lv, (S285C6*)(S285C5*)(S285C4*)(S285C3*)(S285C2*), 0, "S285C1");
    check_base_class_offset(lv, (S285C5*)(S285C4*)(S285C3*)(S285C2*), 0, "S285C1");
    check_base_class_offset(lv, (S285C4*)(S285C3*)(S285C2*), 0, "S285C1");
    check_base_class_offset(lv, (S285C3*)(S285C2*), 0, "S285C1");
    check_base_class_offset(lv, (S285C2*), 0, "S285C1");
    check_field_offset(lv, s285c1f0, ABISELECT(392,288), "S285C1.s285c1f0");
    check_field_offset(lv, s285c1f1, ABISELECT(400,296), "S285C1.s285c1f1");
    test_class_info(&lv, &cd_S285C1);
    dp->~S285C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS285C1(Test_S285C1, "S285C1", ABISELECT(416,304));

#else // __cplusplus

extern void _ZN6S285C1C1Ev();
extern void _ZN6S285C1D1Ev();
Name_Map name_map_S285C1[] = {
  NSPAIR(_ZN6S285C1C1Ev),
  NSPAIR(_ZN6S285C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S285C6;
extern VTBL_ENTRY _ZTI6S285C6[];
extern  VTBL_ENTRY _ZTV6S285C6[];
extern Class_Descriptor cd_S285C5;
extern VTBL_ENTRY _ZTI6S285C5[];
extern  VTBL_ENTRY _ZTV6S285C5[];
extern Class_Descriptor cd_S285C4;
extern VTBL_ENTRY _ZTI6S285C4[];
extern  VTBL_ENTRY _ZTV6S285C4[];
extern Class_Descriptor cd_S285C3;
extern VTBL_ENTRY _ZTI6S285C3[];
extern  VTBL_ENTRY _ZTV6S285C3[];
extern Class_Descriptor cd_S285C2;
extern VTBL_ENTRY _ZTI6S285C2[];
extern  VTBL_ENTRY _ZTV6S285C2[];
static Base_Class bases_S285C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S285C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S285C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S285C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S285C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S285C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S285C1[];
extern void _ZN6S285C1D1Ev();
extern void _ZN6S285C1D0Ev();
extern void _ZN6S285C62v9Ev();
extern void _ZN6S285C63v10Ev();
extern void _ZN6S285C63v11Ev();
extern void _ZN6S285C63v12Ev();
extern void _ZN6S285C63v13Ev();
extern void _ZN6S285C63v14Ev();
extern void _ZN6S285C63v15Ev();
extern void _ZN6S285C63v16Ev();
extern void _ZN6S285C63v17Ev();
extern void _ZN6S285C63v18Ev();
extern void _ZN6S285C63v19Ev();
extern void _ZN6S285C63v20Ev();
extern void _ZN6S285C63v21Ev();
extern void _ZN6S285C63v22Ev();
extern void _ZN6S285C63v23Ev();
extern void _ZN6S285C63v24Ev();
extern void _ZN6S285C63v25Ev();
extern void _ZN6S285C63v26Ev();
extern void _ZN6S285C63v27Ev();
extern void _ZN6S285C63v28Ev();
extern void _ZN6S285C63v29Ev();
extern void _ZN6S285C63v30Ev();
extern void _ZN6S285C63v31Ev();
extern void _ZN6S285C63v32Ev();
extern void _ZN6S285C63v33Ev();
extern void _ZN6S285C63v34Ev();
extern void _ZN6S285C63v35Ev();
extern void _ZN6S285C63v36Ev();
extern void _ZN6S285C63v37Ev();
extern void _ZN6S285C63v38Ev();
extern void _ZN6S285C63v39Ev();
extern void _ZN6S285C63v40Ev();
extern void _ZN6S285C63v41Ev();
extern void _ZN6S285C63v42Ev();
extern void _ZN6S285C63v43Ev();
extern void _ZN6S285C63v44Ev();
extern void _ZN6S285C63v45Ev();
extern void _ZN6S285C63v46Ev();
extern void _ZN6S285C63v47Ev();
extern void _ZN6S285C63v48Ev();
extern void _ZN6S285C63v49Ev();
extern void _ZN6S285C63v50Ev();
extern void _ZN6S285C63v51Ev();
extern void _ZN6S285C63v52Ev();
extern void _ZN6S285C63v53Ev();
extern void _ZN6S285C63v54Ev();
extern void _ZN6S285C63v55Ev();
extern void _ZN6S285C63v56Ev();
extern void _ZN6S285C63v57Ev();
extern void _ZN6S285C63v58Ev();
extern void _ZN6S285C63v59Ev();
extern void _ZN6S285C63v60Ev();
extern void _ZN6S285C63v61Ev();
extern void _ZN6S285C63v62Ev();
extern void _ZN6S285C63v63Ev();
extern void _ZN6S285C63v64Ev();
extern void _ZN6S285C63v65Ev();
extern void _ZN6S285C63v66Ev();
extern void _ZN6S285C63v67Ev();
extern void _ZN6S285C63v68Ev();
extern void _ZN6S285C63v69Ev();
extern void _ZN6S285C63v70Ev();
extern void _ZN6S285C63v71Ev();
extern void _ZN6S285C63v72Ev();
extern void _ZN6S285C53v73Ev();
extern void _ZN6S285C53v74Ev();
extern void _ZN6S285C53v75Ev();
extern void _ZN6S285C53v76Ev();
extern void _ZN6S285C53v77Ev();
extern void _ZN6S285C43v78Ev();
extern void _ZN6S285C43v79Ev();
extern void _ZN6S285C43v80Ev();
extern void _ZN6S285C43v81Ev();
extern void _ZN6S285C43v82Ev();
extern void _ZN6S285C43v83Ev();
extern void _ZN6S285C43v84Ev();
extern void _ZN6S285C43v85Ev();
extern void _ZN6S285C43v86Ev();
extern void _ZN6S285C43v87Ev();
extern void _ZN6S285C43v88Ev();
extern void _ZN6S285C43v89Ev();
extern void _ZN6S285C43v90Ev();
extern void _ZN6S285C43v91Ev();
extern void _ZN6S285C43v92Ev();
extern void _ZN6S285C43v93Ev();
extern void _ZN6S285C43v94Ev();
extern void _ZN6S285C43v95Ev();
extern void _ZN6S285C43v96Ev();
extern void _ZN6S285C43v97Ev();
extern void _ZN6S285C43v98Ev();
extern void _ZN6S285C43v99Ev();
extern void _ZN6S285C34v100Ev();
extern void _ZN6S285C34v101Ev();
extern void _ZN6S285C34v102Ev();
extern void _ZN6S285C34v103Ev();
extern void _ZN6S285C34v104Ev();
extern void _ZN6S285C34v105Ev();
extern void _ZN6S285C34v106Ev();
extern void _ZN6S285C34v107Ev();
extern void _ZN6S285C34v108Ev();
extern void _ZN6S285C34v109Ev();
extern void _ZN6S285C34v110Ev();
extern void _ZN6S285C34v111Ev();
extern void _ZN6S285C34v112Ev();
extern void _ZN6S285C34v113Ev();
extern void _ZN6S285C34v114Ev();
extern void _ZN6S285C34v115Ev();
extern void _ZN6S285C34v116Ev();
extern void _ZN6S285C34v117Ev();
extern void _ZN6S285C34v118Ev();
extern void _ZN6S285C34v119Ev();
extern void _ZN6S285C34v120Ev();
extern void _ZN6S285C34v121Ev();
extern void _ZN6S285C34v122Ev();
extern void _ZN6S285C34v123Ev();
extern void _ZN6S285C34v124Ev();
extern void _ZN6S285C34v125Ev();
extern void _ZN6S285C34v126Ev();
extern void _ZN6S285C24v127Ev();
extern void _ZN6S285C24v128Ev();
extern void _ZN6S285C24v129Ev();
extern void _ZN6S285C24v130Ev();
extern void _ZN6S285C24v131Ev();
extern void _ZN6S285C24v132Ev();
extern void _ZN6S285C24v133Ev();
extern void _ZN6S285C24v134Ev();
extern void _ZN6S285C24v135Ev();
extern void _ZN6S285C24v136Ev();
extern void _ZN6S285C24v137Ev();
extern void _ZN6S285C24v138Ev();
extern void _ZN6S285C24v139Ev();
extern void _ZN6S285C24v140Ev();
extern void _ZN6S285C12v1Ev();
extern void _ZN6S285C12v2Ev();
extern void _ZN6S285C12v3Ev();
extern void _ZN6S285C12v4Ev();
extern void _ZN6S285C12v5Ev();
extern void _ZN6S285C12v6Ev();
extern void _ZN6S285C12v7Ev();
extern void _ZN6S285C12v8Ev();
static  VTBL_ENTRY vtc_S285C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S285C1[0]),
  (VTBL_ENTRY)&_ZN6S285C1D1Ev,
  (VTBL_ENTRY)&_ZN6S285C1D0Ev,
  (VTBL_ENTRY)&_ZN6S285C62v9Ev,
  (VTBL_ENTRY)&_ZN6S285C63v10Ev,
  (VTBL_ENTRY)&_ZN6S285C63v11Ev,
  (VTBL_ENTRY)&_ZN6S285C63v12Ev,
  (VTBL_ENTRY)&_ZN6S285C63v13Ev,
  (VTBL_ENTRY)&_ZN6S285C63v14Ev,
  (VTBL_ENTRY)&_ZN6S285C63v15Ev,
  (VTBL_ENTRY)&_ZN6S285C63v16Ev,
  (VTBL_ENTRY)&_ZN6S285C63v17Ev,
  (VTBL_ENTRY)&_ZN6S285C63v18Ev,
  (VTBL_ENTRY)&_ZN6S285C63v19Ev,
  (VTBL_ENTRY)&_ZN6S285C63v20Ev,
  (VTBL_ENTRY)&_ZN6S285C63v21Ev,
  (VTBL_ENTRY)&_ZN6S285C63v22Ev,
  (VTBL_ENTRY)&_ZN6S285C63v23Ev,
  (VTBL_ENTRY)&_ZN6S285C63v24Ev,
  (VTBL_ENTRY)&_ZN6S285C63v25Ev,
  (VTBL_ENTRY)&_ZN6S285C63v26Ev,
  (VTBL_ENTRY)&_ZN6S285C63v27Ev,
  (VTBL_ENTRY)&_ZN6S285C63v28Ev,
  (VTBL_ENTRY)&_ZN6S285C63v29Ev,
  (VTBL_ENTRY)&_ZN6S285C63v30Ev,
  (VTBL_ENTRY)&_ZN6S285C63v31Ev,
  (VTBL_ENTRY)&_ZN6S285C63v32Ev,
  (VTBL_ENTRY)&_ZN6S285C63v33Ev,
  (VTBL_ENTRY)&_ZN6S285C63v34Ev,
  (VTBL_ENTRY)&_ZN6S285C63v35Ev,
  (VTBL_ENTRY)&_ZN6S285C63v36Ev,
  (VTBL_ENTRY)&_ZN6S285C63v37Ev,
  (VTBL_ENTRY)&_ZN6S285C63v38Ev,
  (VTBL_ENTRY)&_ZN6S285C63v39Ev,
  (VTBL_ENTRY)&_ZN6S285C63v40Ev,
  (VTBL_ENTRY)&_ZN6S285C63v41Ev,
  (VTBL_ENTRY)&_ZN6S285C63v42Ev,
  (VTBL_ENTRY)&_ZN6S285C63v43Ev,
  (VTBL_ENTRY)&_ZN6S285C63v44Ev,
  (VTBL_ENTRY)&_ZN6S285C63v45Ev,
  (VTBL_ENTRY)&_ZN6S285C63v46Ev,
  (VTBL_ENTRY)&_ZN6S285C63v47Ev,
  (VTBL_ENTRY)&_ZN6S285C63v48Ev,
  (VTBL_ENTRY)&_ZN6S285C63v49Ev,
  (VTBL_ENTRY)&_ZN6S285C63v50Ev,
  (VTBL_ENTRY)&_ZN6S285C63v51Ev,
  (VTBL_ENTRY)&_ZN6S285C63v52Ev,
  (VTBL_ENTRY)&_ZN6S285C63v53Ev,
  (VTBL_ENTRY)&_ZN6S285C63v54Ev,
  (VTBL_ENTRY)&_ZN6S285C63v55Ev,
  (VTBL_ENTRY)&_ZN6S285C63v56Ev,
  (VTBL_ENTRY)&_ZN6S285C63v57Ev,
  (VTBL_ENTRY)&_ZN6S285C63v58Ev,
  (VTBL_ENTRY)&_ZN6S285C63v59Ev,
  (VTBL_ENTRY)&_ZN6S285C63v60Ev,
  (VTBL_ENTRY)&_ZN6S285C63v61Ev,
  (VTBL_ENTRY)&_ZN6S285C63v62Ev,
  (VTBL_ENTRY)&_ZN6S285C63v63Ev,
  (VTBL_ENTRY)&_ZN6S285C63v64Ev,
  (VTBL_ENTRY)&_ZN6S285C63v65Ev,
  (VTBL_ENTRY)&_ZN6S285C63v66Ev,
  (VTBL_ENTRY)&_ZN6S285C63v67Ev,
  (VTBL_ENTRY)&_ZN6S285C63v68Ev,
  (VTBL_ENTRY)&_ZN6S285C63v69Ev,
  (VTBL_ENTRY)&_ZN6S285C63v70Ev,
  (VTBL_ENTRY)&_ZN6S285C63v71Ev,
  (VTBL_ENTRY)&_ZN6S285C63v72Ev,
  (VTBL_ENTRY)&_ZN6S285C53v73Ev,
  (VTBL_ENTRY)&_ZN6S285C53v74Ev,
  (VTBL_ENTRY)&_ZN6S285C53v75Ev,
  (VTBL_ENTRY)&_ZN6S285C53v76Ev,
  (VTBL_ENTRY)&_ZN6S285C53v77Ev,
  (VTBL_ENTRY)&_ZN6S285C43v78Ev,
  (VTBL_ENTRY)&_ZN6S285C43v79Ev,
  (VTBL_ENTRY)&_ZN6S285C43v80Ev,
  (VTBL_ENTRY)&_ZN6S285C43v81Ev,
  (VTBL_ENTRY)&_ZN6S285C43v82Ev,
  (VTBL_ENTRY)&_ZN6S285C43v83Ev,
  (VTBL_ENTRY)&_ZN6S285C43v84Ev,
  (VTBL_ENTRY)&_ZN6S285C43v85Ev,
  (VTBL_ENTRY)&_ZN6S285C43v86Ev,
  (VTBL_ENTRY)&_ZN6S285C43v87Ev,
  (VTBL_ENTRY)&_ZN6S285C43v88Ev,
  (VTBL_ENTRY)&_ZN6S285C43v89Ev,
  (VTBL_ENTRY)&_ZN6S285C43v90Ev,
  (VTBL_ENTRY)&_ZN6S285C43v91Ev,
  (VTBL_ENTRY)&_ZN6S285C43v92Ev,
  (VTBL_ENTRY)&_ZN6S285C43v93Ev,
  (VTBL_ENTRY)&_ZN6S285C43v94Ev,
  (VTBL_ENTRY)&_ZN6S285C43v95Ev,
  (VTBL_ENTRY)&_ZN6S285C43v96Ev,
  (VTBL_ENTRY)&_ZN6S285C43v97Ev,
  (VTBL_ENTRY)&_ZN6S285C43v98Ev,
  (VTBL_ENTRY)&_ZN6S285C43v99Ev,
  (VTBL_ENTRY)&_ZN6S285C34v100Ev,
  (VTBL_ENTRY)&_ZN6S285C34v101Ev,
  (VTBL_ENTRY)&_ZN6S285C34v102Ev,
  (VTBL_ENTRY)&_ZN6S285C34v103Ev,
  (VTBL_ENTRY)&_ZN6S285C34v104Ev,
  (VTBL_ENTRY)&_ZN6S285C34v105Ev,
  (VTBL_ENTRY)&_ZN6S285C34v106Ev,
  (VTBL_ENTRY)&_ZN6S285C34v107Ev,
  (VTBL_ENTRY)&_ZN6S285C34v108Ev,
  (VTBL_ENTRY)&_ZN6S285C34v109Ev,
  (VTBL_ENTRY)&_ZN6S285C34v110Ev,
  (VTBL_ENTRY)&_ZN6S285C34v111Ev,
  (VTBL_ENTRY)&_ZN6S285C34v112Ev,
  (VTBL_ENTRY)&_ZN6S285C34v113Ev,
  (VTBL_ENTRY)&_ZN6S285C34v114Ev,
  (VTBL_ENTRY)&_ZN6S285C34v115Ev,
  (VTBL_ENTRY)&_ZN6S285C34v116Ev,
  (VTBL_ENTRY)&_ZN6S285C34v117Ev,
  (VTBL_ENTRY)&_ZN6S285C34v118Ev,
  (VTBL_ENTRY)&_ZN6S285C34v119Ev,
  (VTBL_ENTRY)&_ZN6S285C34v120Ev,
  (VTBL_ENTRY)&_ZN6S285C34v121Ev,
  (VTBL_ENTRY)&_ZN6S285C34v122Ev,
  (VTBL_ENTRY)&_ZN6S285C34v123Ev,
  (VTBL_ENTRY)&_ZN6S285C34v124Ev,
  (VTBL_ENTRY)&_ZN6S285C34v125Ev,
  (VTBL_ENTRY)&_ZN6S285C34v126Ev,
  (VTBL_ENTRY)&_ZN6S285C24v127Ev,
  (VTBL_ENTRY)&_ZN6S285C24v128Ev,
  (VTBL_ENTRY)&_ZN6S285C24v129Ev,
  (VTBL_ENTRY)&_ZN6S285C24v130Ev,
  (VTBL_ENTRY)&_ZN6S285C24v131Ev,
  (VTBL_ENTRY)&_ZN6S285C24v132Ev,
  (VTBL_ENTRY)&_ZN6S285C24v133Ev,
  (VTBL_ENTRY)&_ZN6S285C24v134Ev,
  (VTBL_ENTRY)&_ZN6S285C24v135Ev,
  (VTBL_ENTRY)&_ZN6S285C24v136Ev,
  (VTBL_ENTRY)&_ZN6S285C24v137Ev,
  (VTBL_ENTRY)&_ZN6S285C24v138Ev,
  (VTBL_ENTRY)&_ZN6S285C24v139Ev,
  (VTBL_ENTRY)&_ZN6S285C24v140Ev,
  (VTBL_ENTRY)&_ZN6S285C12v1Ev,
  (VTBL_ENTRY)&_ZN6S285C12v2Ev,
  (VTBL_ENTRY)&_ZN6S285C12v3Ev,
  (VTBL_ENTRY)&_ZN6S285C12v4Ev,
  (VTBL_ENTRY)&_ZN6S285C12v5Ev,
  (VTBL_ENTRY)&_ZN6S285C12v6Ev,
  (VTBL_ENTRY)&_ZN6S285C12v7Ev,
  (VTBL_ENTRY)&_ZN6S285C12v8Ev,
};
extern VTBL_ENTRY _ZTI6S285C1[];
extern  VTBL_ENTRY _ZTV6S285C1[];
Class_Descriptor cd_S285C1 = {  "S285C1", // class name
  bases_S285C1, 5,
  &(vtc_S285C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(416,304), // object size
  NSPAIRA(_ZTI6S285C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S285C1),144, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  5, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S704C5  {
  int s704c5f0;
  __tsi64 s704c5f1;
  void *s704c5f2[4];
  int s704c5f3[2];
  void *s704c5f4;
  ::S235C7_nt s704c5f5;
  void *s704c5f6[2];
  virtual  ~S704C5(); // _ZN6S704C5D1Ev
  virtual void  v8(); // _ZN6S704C52v8Ev
  virtual void  v9(); // _ZN6S704C52v9Ev
  virtual void  v10(); // _ZN6S704C53v10Ev
  virtual void  v11(); // _ZN6S704C53v11Ev
  virtual void  v12(); // _ZN6S704C53v12Ev
  virtual void  v13(); // _ZN6S704C53v13Ev
  virtual void  v14(); // _ZN6S704C53v14Ev
  virtual void  v15(); // _ZN6S704C53v15Ev
  virtual void  v16(); // _ZN6S704C53v16Ev
  virtual void  v17(); // _ZN6S704C53v17Ev
  virtual void  v18(); // _ZN6S704C53v18Ev
  virtual void  v19(); // _ZN6S704C53v19Ev
  virtual void  v20(); // _ZN6S704C53v20Ev
  virtual void  v21(); // _ZN6S704C53v21Ev
  virtual void  v22(); // _ZN6S704C53v22Ev
  virtual void  v23(); // _ZN6S704C53v23Ev
  virtual void  v24(); // _ZN6S704C53v24Ev
  virtual void  v25(); // _ZN6S704C53v25Ev
  virtual void  v26(); // _ZN6S704C53v26Ev
  virtual void  v27(); // _ZN6S704C53v27Ev
  virtual void  v28(); // _ZN6S704C53v28Ev
  virtual void  v29(); // _ZN6S704C53v29Ev
  virtual void  v30(); // _ZN6S704C53v30Ev
  virtual void  v31(); // _ZN6S704C53v31Ev
  virtual void  v32(); // _ZN6S704C53v32Ev
  virtual void  v33(); // _ZN6S704C53v33Ev
  virtual void  v34(); // _ZN6S704C53v34Ev
  virtual void  v35(); // _ZN6S704C53v35Ev
  virtual void  v36(); // _ZN6S704C53v36Ev
  virtual void  v37(); // _ZN6S704C53v37Ev
  virtual void  v38(); // _ZN6S704C53v38Ev
  virtual void  v39(); // _ZN6S704C53v39Ev
  virtual void  v40(); // _ZN6S704C53v40Ev
  virtual void  v41(); // _ZN6S704C53v41Ev
  virtual void  v42(); // _ZN6S704C53v42Ev
  virtual void  v43(); // _ZN6S704C53v43Ev
  virtual void  v44(); // _ZN6S704C53v44Ev
  virtual void  v45(); // _ZN6S704C53v45Ev
  virtual void  v46(); // _ZN6S704C53v46Ev
  virtual void  v47(); // _ZN6S704C53v47Ev
  virtual void  v48(); // _ZN6S704C53v48Ev
  virtual void  v49(); // _ZN6S704C53v49Ev
  virtual void  v50(); // _ZN6S704C53v50Ev
  virtual void  v51(); // _ZN6S704C53v51Ev
  virtual void  v52(); // _ZN6S704C53v52Ev
  virtual void  v53(); // _ZN6S704C53v53Ev
  virtual void  v54(); // _ZN6S704C53v54Ev
  virtual void  v55(); // _ZN6S704C53v55Ev
  virtual void  v56(); // _ZN6S704C53v56Ev
  virtual void  v57(); // _ZN6S704C53v57Ev
  virtual void  v58(); // _ZN6S704C53v58Ev
  virtual void  v59(); // _ZN6S704C53v59Ev
  virtual void  v60(); // _ZN6S704C53v60Ev
  virtual void  v61(); // _ZN6S704C53v61Ev
  virtual void  v62(); // _ZN6S704C53v62Ev
  virtual void  v63(); // _ZN6S704C53v63Ev
  virtual void  v64(); // _ZN6S704C53v64Ev
  virtual void  v65(); // _ZN6S704C53v65Ev
  virtual void  v66(); // _ZN6S704C53v66Ev
  virtual void  v67(); // _ZN6S704C53v67Ev
  virtual void  v68(); // _ZN6S704C53v68Ev
  virtual void  v69(); // _ZN6S704C53v69Ev
  virtual void  v70(); // _ZN6S704C53v70Ev
  virtual void  v71(); // _ZN6S704C53v71Ev
  S704C5(); // tgen
};
//SIG(-1 S704C5) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 Fi FL Fp[4] Fi[2] Fp FC2{ m Fi[2]} Fp[2]}


 S704C5 ::~S704C5(){ note_dtor("S704C5", this);}
void  S704C5 ::v8(){vfunc_called(this, "_ZN6S704C52v8Ev");}
void  S704C5 ::v9(){vfunc_called(this, "_ZN6S704C52v9Ev");}
void  S704C5 ::v10(){vfunc_called(this, "_ZN6S704C53v10Ev");}
void  S704C5 ::v11(){vfunc_called(this, "_ZN6S704C53v11Ev");}
void  S704C5 ::v12(){vfunc_called(this, "_ZN6S704C53v12Ev");}
void  S704C5 ::v13(){vfunc_called(this, "_ZN6S704C53v13Ev");}
void  S704C5 ::v14(){vfunc_called(this, "_ZN6S704C53v14Ev");}
void  S704C5 ::v15(){vfunc_called(this, "_ZN6S704C53v15Ev");}
void  S704C5 ::v16(){vfunc_called(this, "_ZN6S704C53v16Ev");}
void  S704C5 ::v17(){vfunc_called(this, "_ZN6S704C53v17Ev");}
void  S704C5 ::v18(){vfunc_called(this, "_ZN6S704C53v18Ev");}
void  S704C5 ::v19(){vfunc_called(this, "_ZN6S704C53v19Ev");}
void  S704C5 ::v20(){vfunc_called(this, "_ZN6S704C53v20Ev");}
void  S704C5 ::v21(){vfunc_called(this, "_ZN6S704C53v21Ev");}
void  S704C5 ::v22(){vfunc_called(this, "_ZN6S704C53v22Ev");}
void  S704C5 ::v23(){vfunc_called(this, "_ZN6S704C53v23Ev");}
void  S704C5 ::v24(){vfunc_called(this, "_ZN6S704C53v24Ev");}
void  S704C5 ::v25(){vfunc_called(this, "_ZN6S704C53v25Ev");}
void  S704C5 ::v26(){vfunc_called(this, "_ZN6S704C53v26Ev");}
void  S704C5 ::v27(){vfunc_called(this, "_ZN6S704C53v27Ev");}
void  S704C5 ::v28(){vfunc_called(this, "_ZN6S704C53v28Ev");}
void  S704C5 ::v29(){vfunc_called(this, "_ZN6S704C53v29Ev");}
void  S704C5 ::v30(){vfunc_called(this, "_ZN6S704C53v30Ev");}
void  S704C5 ::v31(){vfunc_called(this, "_ZN6S704C53v31Ev");}
void  S704C5 ::v32(){vfunc_called(this, "_ZN6S704C53v32Ev");}
void  S704C5 ::v33(){vfunc_called(this, "_ZN6S704C53v33Ev");}
void  S704C5 ::v34(){vfunc_called(this, "_ZN6S704C53v34Ev");}
void  S704C5 ::v35(){vfunc_called(this, "_ZN6S704C53v35Ev");}
void  S704C5 ::v36(){vfunc_called(this, "_ZN6S704C53v36Ev");}
void  S704C5 ::v37(){vfunc_called(this, "_ZN6S704C53v37Ev");}
void  S704C5 ::v38(){vfunc_called(this, "_ZN6S704C53v38Ev");}
void  S704C5 ::v39(){vfunc_called(this, "_ZN6S704C53v39Ev");}
void  S704C5 ::v40(){vfunc_called(this, "_ZN6S704C53v40Ev");}
void  S704C5 ::v41(){vfunc_called(this, "_ZN6S704C53v41Ev");}
void  S704C5 ::v42(){vfunc_called(this, "_ZN6S704C53v42Ev");}
void  S704C5 ::v43(){vfunc_called(this, "_ZN6S704C53v43Ev");}
void  S704C5 ::v44(){vfunc_called(this, "_ZN6S704C53v44Ev");}
void  S704C5 ::v45(){vfunc_called(this, "_ZN6S704C53v45Ev");}
void  S704C5 ::v46(){vfunc_called(this, "_ZN6S704C53v46Ev");}
void  S704C5 ::v47(){vfunc_called(this, "_ZN6S704C53v47Ev");}
void  S704C5 ::v48(){vfunc_called(this, "_ZN6S704C53v48Ev");}
void  S704C5 ::v49(){vfunc_called(this, "_ZN6S704C53v49Ev");}
void  S704C5 ::v50(){vfunc_called(this, "_ZN6S704C53v50Ev");}
void  S704C5 ::v51(){vfunc_called(this, "_ZN6S704C53v51Ev");}
void  S704C5 ::v52(){vfunc_called(this, "_ZN6S704C53v52Ev");}
void  S704C5 ::v53(){vfunc_called(this, "_ZN6S704C53v53Ev");}
void  S704C5 ::v54(){vfunc_called(this, "_ZN6S704C53v54Ev");}
void  S704C5 ::v55(){vfunc_called(this, "_ZN6S704C53v55Ev");}
void  S704C5 ::v56(){vfunc_called(this, "_ZN6S704C53v56Ev");}
void  S704C5 ::v57(){vfunc_called(this, "_ZN6S704C53v57Ev");}
void  S704C5 ::v58(){vfunc_called(this, "_ZN6S704C53v58Ev");}
void  S704C5 ::v59(){vfunc_called(this, "_ZN6S704C53v59Ev");}
void  S704C5 ::v60(){vfunc_called(this, "_ZN6S704C53v60Ev");}
void  S704C5 ::v61(){vfunc_called(this, "_ZN6S704C53v61Ev");}
void  S704C5 ::v62(){vfunc_called(this, "_ZN6S704C53v62Ev");}
void  S704C5 ::v63(){vfunc_called(this, "_ZN6S704C53v63Ev");}
void  S704C5 ::v64(){vfunc_called(this, "_ZN6S704C53v64Ev");}
void  S704C5 ::v65(){vfunc_called(this, "_ZN6S704C53v65Ev");}
void  S704C5 ::v66(){vfunc_called(this, "_ZN6S704C53v66Ev");}
void  S704C5 ::v67(){vfunc_called(this, "_ZN6S704C53v67Ev");}
void  S704C5 ::v68(){vfunc_called(this, "_ZN6S704C53v68Ev");}
void  S704C5 ::v69(){vfunc_called(this, "_ZN6S704C53v69Ev");}
void  S704C5 ::v70(){vfunc_called(this, "_ZN6S704C53v70Ev");}
void  S704C5 ::v71(){vfunc_called(this, "_ZN6S704C53v71Ev");}
S704C5 ::S704C5(){ note_ctor("S704C5", this);} // tgen

static void Test_S704C5()
{
  extern Class_Descriptor cd_S704C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S704C5, buf);
    S704C5 *dp, &lv = *(dp=new (buf) S704C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S704C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S704C5)");
    check_field_offset(lv, s704c5f0, ABISELECT(8,4), "S704C5.s704c5f0");
    check_field_offset(lv, s704c5f1, ABISELECT(16,8), "S704C5.s704c5f1");
    check_field_offset(lv, s704c5f2, ABISELECT(24,16), "S704C5.s704c5f2");
    check_field_offset(lv, s704c5f3, ABISELECT(56,32), "S704C5.s704c5f3");
    check_field_offset(lv, s704c5f4, ABISELECT(64,40), "S704C5.s704c5f4");
    check_field_offset(lv, s704c5f5, ABISELECT(72,44), "S704C5.s704c5f5");
    check_field_offset(lv, s704c5f6, ABISELECT(80,52), "S704C5.s704c5f6");
    test_class_info(&lv, &cd_S704C5);
    dp->~S704C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS704C5(Test_S704C5, "S704C5", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN6S704C5C1Ev();
extern void _ZN6S704C5D1Ev();
Name_Map name_map_S704C5[] = {
  NSPAIR(_ZN6S704C5C1Ev),
  NSPAIR(_ZN6S704C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI6S704C5[];
extern void _ZN6S704C5D1Ev();
extern void _ZN6S704C5D0Ev();
extern void _ZN6S704C52v8Ev();
extern void _ZN6S704C52v9Ev();
extern void _ZN6S704C53v10Ev();
extern void _ZN6S704C53v11Ev();
extern void _ZN6S704C53v12Ev();
extern void _ZN6S704C53v13Ev();
extern void _ZN6S704C53v14Ev();
extern void _ZN6S704C53v15Ev();
extern void _ZN6S704C53v16Ev();
extern void _ZN6S704C53v17Ev();
extern void _ZN6S704C53v18Ev();
extern void _ZN6S704C53v19Ev();
extern void _ZN6S704C53v20Ev();
extern void _ZN6S704C53v21Ev();
extern void _ZN6S704C53v22Ev();
extern void _ZN6S704C53v23Ev();
extern void _ZN6S704C53v24Ev();
extern void _ZN6S704C53v25Ev();
extern void _ZN6S704C53v26Ev();
extern void _ZN6S704C53v27Ev();
extern void _ZN6S704C53v28Ev();
extern void _ZN6S704C53v29Ev();
extern void _ZN6S704C53v30Ev();
extern void _ZN6S704C53v31Ev();
extern void _ZN6S704C53v32Ev();
extern void _ZN6S704C53v33Ev();
extern void _ZN6S704C53v34Ev();
extern void _ZN6S704C53v35Ev();
extern void _ZN6S704C53v36Ev();
extern void _ZN6S704C53v37Ev();
extern void _ZN6S704C53v38Ev();
extern void _ZN6S704C53v39Ev();
extern void _ZN6S704C53v40Ev();
extern void _ZN6S704C53v41Ev();
extern void _ZN6S704C53v42Ev();
extern void _ZN6S704C53v43Ev();
extern void _ZN6S704C53v44Ev();
extern void _ZN6S704C53v45Ev();
extern void _ZN6S704C53v46Ev();
extern void _ZN6S704C53v47Ev();
extern void _ZN6S704C53v48Ev();
extern void _ZN6S704C53v49Ev();
extern void _ZN6S704C53v50Ev();
extern void _ZN6S704C53v51Ev();
extern void _ZN6S704C53v52Ev();
extern void _ZN6S704C53v53Ev();
extern void _ZN6S704C53v54Ev();
extern void _ZN6S704C53v55Ev();
extern void _ZN6S704C53v56Ev();
extern void _ZN6S704C53v57Ev();
extern void _ZN6S704C53v58Ev();
extern void _ZN6S704C53v59Ev();
extern void _ZN6S704C53v60Ev();
extern void _ZN6S704C53v61Ev();
extern void _ZN6S704C53v62Ev();
extern void _ZN6S704C53v63Ev();
extern void _ZN6S704C53v64Ev();
extern void _ZN6S704C53v65Ev();
extern void _ZN6S704C53v66Ev();
extern void _ZN6S704C53v67Ev();
extern void _ZN6S704C53v68Ev();
extern void _ZN6S704C53v69Ev();
extern void _ZN6S704C53v70Ev();
extern void _ZN6S704C53v71Ev();
static  VTBL_ENTRY vtc_S704C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S704C5[0]),
  (VTBL_ENTRY)&_ZN6S704C5D1Ev,
  (VTBL_ENTRY)&_ZN6S704C5D0Ev,
  (VTBL_ENTRY)&_ZN6S704C52v8Ev,
  (VTBL_ENTRY)&_ZN6S704C52v9Ev,
  (VTBL_ENTRY)&_ZN6S704C53v10Ev,
  (VTBL_ENTRY)&_ZN6S704C53v11Ev,
  (VTBL_ENTRY)&_ZN6S704C53v12Ev,
  (VTBL_ENTRY)&_ZN6S704C53v13Ev,
  (VTBL_ENTRY)&_ZN6S704C53v14Ev,
  (VTBL_ENTRY)&_ZN6S704C53v15Ev,
  (VTBL_ENTRY)&_ZN6S704C53v16Ev,
  (VTBL_ENTRY)&_ZN6S704C53v17Ev,
  (VTBL_ENTRY)&_ZN6S704C53v18Ev,
  (VTBL_ENTRY)&_ZN6S704C53v19Ev,
  (VTBL_ENTRY)&_ZN6S704C53v20Ev,
  (VTBL_ENTRY)&_ZN6S704C53v21Ev,
  (VTBL_ENTRY)&_ZN6S704C53v22Ev,
  (VTBL_ENTRY)&_ZN6S704C53v23Ev,
  (VTBL_ENTRY)&_ZN6S704C53v24Ev,
  (VTBL_ENTRY)&_ZN6S704C53v25Ev,
  (VTBL_ENTRY)&_ZN6S704C53v26Ev,
  (VTBL_ENTRY)&_ZN6S704C53v27Ev,
  (VTBL_ENTRY)&_ZN6S704C53v28Ev,
  (VTBL_ENTRY)&_ZN6S704C53v29Ev,
  (VTBL_ENTRY)&_ZN6S704C53v30Ev,
  (VTBL_ENTRY)&_ZN6S704C53v31Ev,
  (VTBL_ENTRY)&_ZN6S704C53v32Ev,
  (VTBL_ENTRY)&_ZN6S704C53v33Ev,
  (VTBL_ENTRY)&_ZN6S704C53v34Ev,
  (VTBL_ENTRY)&_ZN6S704C53v35Ev,
  (VTBL_ENTRY)&_ZN6S704C53v36Ev,
  (VTBL_ENTRY)&_ZN6S704C53v37Ev,
  (VTBL_ENTRY)&_ZN6S704C53v38Ev,
  (VTBL_ENTRY)&_ZN6S704C53v39Ev,
  (VTBL_ENTRY)&_ZN6S704C53v40Ev,
  (VTBL_ENTRY)&_ZN6S704C53v41Ev,
  (VTBL_ENTRY)&_ZN6S704C53v42Ev,
  (VTBL_ENTRY)&_ZN6S704C53v43Ev,
  (VTBL_ENTRY)&_ZN6S704C53v44Ev,
  (VTBL_ENTRY)&_ZN6S704C53v45Ev,
  (VTBL_ENTRY)&_ZN6S704C53v46Ev,
  (VTBL_ENTRY)&_ZN6S704C53v47Ev,
  (VTBL_ENTRY)&_ZN6S704C53v48Ev,
  (VTBL_ENTRY)&_ZN6S704C53v49Ev,
  (VTBL_ENTRY)&_ZN6S704C53v50Ev,
  (VTBL_ENTRY)&_ZN6S704C53v51Ev,
  (VTBL_ENTRY)&_ZN6S704C53v52Ev,
  (VTBL_ENTRY)&_ZN6S704C53v53Ev,
  (VTBL_ENTRY)&_ZN6S704C53v54Ev,
  (VTBL_ENTRY)&_ZN6S704C53v55Ev,
  (VTBL_ENTRY)&_ZN6S704C53v56Ev,
  (VTBL_ENTRY)&_ZN6S704C53v57Ev,
  (VTBL_ENTRY)&_ZN6S704C53v58Ev,
  (VTBL_ENTRY)&_ZN6S704C53v59Ev,
  (VTBL_ENTRY)&_ZN6S704C53v60Ev,
  (VTBL_ENTRY)&_ZN6S704C53v61Ev,
  (VTBL_ENTRY)&_ZN6S704C53v62Ev,
  (VTBL_ENTRY)&_ZN6S704C53v63Ev,
  (VTBL_ENTRY)&_ZN6S704C53v64Ev,
  (VTBL_ENTRY)&_ZN6S704C53v65Ev,
  (VTBL_ENTRY)&_ZN6S704C53v66Ev,
  (VTBL_ENTRY)&_ZN6S704C53v67Ev,
  (VTBL_ENTRY)&_ZN6S704C53v68Ev,
  (VTBL_ENTRY)&_ZN6S704C53v69Ev,
  (VTBL_ENTRY)&_ZN6S704C53v70Ev,
  (VTBL_ENTRY)&_ZN6S704C53v71Ev,
};
extern VTBL_ENTRY _ZTI6S704C5[];
extern  VTBL_ENTRY _ZTV6S704C5[];
Class_Descriptor cd_S704C5 = {  "S704C5", // class name
  0,0,//no base classes
  &(vtc_S704C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI6S704C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV6S704C5),68, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S704C4  : S704C5 {
  void *s704c4f0;
  ::S235C7_nt s704c4f1;
  virtual  ~S704C4(); // _ZN6S704C4D1Ev
  virtual void  v72(); // _ZN6S704C43v72Ev
  virtual void  v73(); // _ZN6S704C43v73Ev
  virtual void  v74(); // _ZN6S704C43v74Ev
  virtual void  v75(); // _ZN6S704C43v75Ev
  virtual void  v76(); // _ZN6S704C43v76Ev
  S704C4(); // tgen
};
//SIG(-1 S704C4) C1{ BC2{ vd v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 Fi FL Fp[4] Fi[2] Fp FC3{ m Fi[2]} Fp[2]} vd v1 v2 v3 v4 v5 Fp FC3}


 S704C4 ::~S704C4(){ note_dtor("S704C4", this);}
void  S704C4 ::v72(){vfunc_called(this, "_ZN6S704C43v72Ev");}
void  S704C4 ::v73(){vfunc_called(this, "_ZN6S704C43v73Ev");}
void  S704C4 ::v74(){vfunc_called(this, "_ZN6S704C43v74Ev");}
void  S704C4 ::v75(){vfunc_called(this, "_ZN6S704C43v75Ev");}
void  S704C4 ::v76(){vfunc_called(this, "_ZN6S704C43v76Ev");}
S704C4 ::S704C4(){ note_ctor("S704C4", this);} // tgen

static void Test_S704C4()
{
  extern Class_Descriptor cd_S704C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(15,19)];
    init_test(&cd_S704C4, buf);
    S704C4 *dp, &lv = *(dp=new (buf) S704C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(112,72), "sizeof(S704C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S704C4)");
    check_base_class_offset(lv, (S704C5*), 0, "S704C4");
    check_field_offset(lv, s704c4f0, ABISELECT(96,60), "S704C4.s704c4f0");
    check_field_offset(lv, s704c4f1, ABISELECT(104,64), "S704C4.s704c4f1");
    test_class_info(&lv, &cd_S704C4);
    dp->~S704C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS704C4(Test_S704C4, "S704C4", ABISELECT(112,72));

#else // __cplusplus

extern void _ZN6S704C4C1Ev();
extern void _ZN6S704C4D1Ev();
Name_Map name_map_S704C4[] = {
  NSPAIR(_ZN6S704C4C1Ev),
  NSPAIR(_ZN6S704C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S704C5;
extern VTBL_ENTRY _ZTI6S704C5[];
extern  VTBL_ENTRY _ZTV6S704C5[];
static Base_Class bases_S704C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S704C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S704C4[];
extern void _ZN6S704C4D1Ev();
extern void _ZN6S704C4D0Ev();
extern void _ZN6S704C52v8Ev();
extern void _ZN6S704C52v9Ev();
extern void _ZN6S704C53v10Ev();
extern void _ZN6S704C53v11Ev();
extern void _ZN6S704C53v12Ev();
extern void _ZN6S704C53v13Ev();
extern void _ZN6S704C53v14Ev();
extern void _ZN6S704C53v15Ev();
extern void _ZN6S704C53v16Ev();
extern void _ZN6S704C53v17Ev();
extern void _ZN6S704C53v18Ev();
extern void _ZN6S704C53v19Ev();
extern void _ZN6S704C53v20Ev();
extern void _ZN6S704C53v21Ev();
extern void _ZN6S704C53v22Ev();
extern void _ZN6S704C53v23Ev();
extern void _ZN6S704C53v24Ev();
extern void _ZN6S704C53v25Ev();
extern void _ZN6S704C53v26Ev();
extern void _ZN6S704C53v27Ev();
extern void _ZN6S704C53v28Ev();
extern void _ZN6S704C53v29Ev();
extern void _ZN6S704C53v30Ev();
extern void _ZN6S704C53v31Ev();
extern void _ZN6S704C53v32Ev();
extern void _ZN6S704C53v33Ev();
extern void _ZN6S704C53v34Ev();
extern void _ZN6S704C53v35Ev();
extern void _ZN6S704C53v36Ev();
extern void _ZN6S704C53v37Ev();
extern void _ZN6S704C53v38Ev();
extern void _ZN6S704C53v39Ev();
extern void _ZN6S704C53v40Ev();
extern void _ZN6S704C53v41Ev();
extern void _ZN6S704C53v42Ev();
extern void _ZN6S704C53v43Ev();
extern void _ZN6S704C53v44Ev();
extern void _ZN6S704C53v45Ev();
extern void _ZN6S704C53v46Ev();
extern void _ZN6S704C53v47Ev();
extern void _ZN6S704C53v48Ev();
extern void _ZN6S704C53v49Ev();
extern void _ZN6S704C53v50Ev();
extern void _ZN6S704C53v51Ev();
extern void _ZN6S704C53v52Ev();
extern void _ZN6S704C53v53Ev();
extern void _ZN6S704C53v54Ev();
extern void _ZN6S704C53v55Ev();
extern void _ZN6S704C53v56Ev();
extern void _ZN6S704C53v57Ev();
extern void _ZN6S704C53v58Ev();
extern void _ZN6S704C53v59Ev();
extern void _ZN6S704C53v60Ev();
extern void _ZN6S704C53v61Ev();
extern void _ZN6S704C53v62Ev();
extern void _ZN6S704C53v63Ev();
extern void _ZN6S704C53v64Ev();
extern void _ZN6S704C53v65Ev();
extern void _ZN6S704C53v66Ev();
extern void _ZN6S704C53v67Ev();
extern void _ZN6S704C53v68Ev();
extern void _ZN6S704C53v69Ev();
extern void _ZN6S704C53v70Ev();
extern void _ZN6S704C53v71Ev();
extern void _ZN6S704C43v72Ev();
extern void _ZN6S704C43v73Ev();
extern void _ZN6S704C43v74Ev();
extern void _ZN6S704C43v75Ev();
extern void _ZN6S704C43v76Ev();
static  VTBL_ENTRY vtc_S704C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S704C4[0]),
  (VTBL_ENTRY)&_ZN6S704C4D1Ev,
  (VTBL_ENTRY)&_ZN6S704C4D0Ev,
  (VTBL_ENTRY)&_ZN6S704C52v8Ev,
  (VTBL_ENTRY)&_ZN6S704C52v9Ev,
  (VTBL_ENTRY)&_ZN6S704C53v10Ev,
  (VTBL_ENTRY)&_ZN6S704C53v11Ev,
  (VTBL_ENTRY)&_ZN6S704C53v12Ev,
  (VTBL_ENTRY)&_ZN6S704C53v13Ev,
  (VTBL_ENTRY)&_ZN6S704C53v14Ev,
  (VTBL_ENTRY)&_ZN6S704C53v15Ev,
  (VTBL_ENTRY)&_ZN6S704C53v16Ev,
  (VTBL_ENTRY)&_ZN6S704C53v17Ev,
  (VTBL_ENTRY)&_ZN6S704C53v18Ev,
  (VTBL_ENTRY)&_ZN6S704C53v19Ev,
  (VTBL_ENTRY)&_ZN6S704C53v20Ev,
  (VTBL_ENTRY)&_ZN6S704C53v21Ev,
  (VTBL_ENTRY)&_ZN6S704C53v22Ev,
  (VTBL_ENTRY)&_ZN6S704C53v23Ev,
  (VTBL_ENTRY)&_ZN6S704C53v24Ev,
  (VTBL_ENTRY)&_ZN6S704C53v25Ev,
  (VTBL_ENTRY)&_ZN6S704C53v26Ev,
  (VTBL_ENTRY)&_ZN6S704C53v27Ev,
  (VTBL_ENTRY)&_ZN6S704C53v28Ev,
  (VTBL_ENTRY)&_ZN6S704C53v29Ev,
  (VTBL_ENTRY)&_ZN6S704C53v30Ev,
  (VTBL_ENTRY)&_ZN6S704C53v31Ev,
  (VTBL_ENTRY)&_ZN6S704C53v32Ev,
  (VTBL_ENTRY)&_ZN6S704C53v33Ev,
  (VTBL_ENTRY)&_ZN6S704C53v34Ev,
  (VTBL_ENTRY)&_ZN6S704C53v35Ev,
  (VTBL_ENTRY)&_ZN6S704C53v36Ev,
  (VTBL_ENTRY)&_ZN6S704C53v37Ev,
  (VTBL_ENTRY)&_ZN6S704C53v38Ev,
  (VTBL_ENTRY)&_ZN6S704C53v39Ev,
  (VTBL_ENTRY)&_ZN6S704C53v40Ev,
  (VTBL_ENTRY)&_ZN6S704C53v41Ev,
  (VTBL_ENTRY)&_ZN6S704C53v42Ev,
  (VTBL_ENTRY)&_ZN6S704C53v43Ev,
  (VTBL_ENTRY)&_ZN6S704C53v44Ev,
  (VTBL_ENTRY)&_ZN6S704C53v45Ev,
  (VTBL_ENTRY)&_ZN6S704C53v46Ev,
  (VTBL_ENTRY)&_ZN6S704C53v47Ev,
  (VTBL_ENTRY)&_ZN6S704C53v48Ev,
  (VTBL_ENTRY)&_ZN6S704C53v49Ev,
  (VTBL_ENTRY)&_ZN6S704C53v50Ev,
  (VTBL_ENTRY)&_ZN6S704C53v51Ev,
  (VTBL_ENTRY)&_ZN6S704C53v52Ev,
  (VTBL_ENTRY)&_ZN6S704C53v53Ev,
  (VTBL_ENTRY)&_ZN6S704C53v54Ev,
  (VTBL_ENTRY)&_ZN6S704C53v55Ev,
  (VTBL_ENTRY)&_ZN6S704C53v56Ev,
  (VTBL_ENTRY)&_ZN6S704C53v57Ev,
  (VTBL_ENTRY)&_ZN6S704C53v58Ev,
  (VTBL_ENTRY)&_ZN6S704C53v59Ev,
  (VTBL_ENTRY)&_ZN6S704C53v60Ev,
  (VTBL_ENTRY)&_ZN6S704C53v61Ev,
  (VTBL_ENTRY)&_ZN6S704C53v62Ev,
  (VTBL_ENTRY)&_ZN6S704C53v63Ev,
  (VTBL_ENTRY)&_ZN6S704C53v64Ev,
  (VTBL_ENTRY)&_ZN6S704C53v65Ev,
  (VTBL_ENTRY)&_ZN6S704C53v66Ev,
  (VTBL_ENTRY)&_ZN6S704C53v67Ev,
  (VTBL_ENTRY)&_ZN6S704C53v68Ev,
  (VTBL_ENTRY)&_ZN6S704C53v69Ev,
  (VTBL_ENTRY)&_ZN6S704C53v70Ev,
  (VTBL_ENTRY)&_ZN6S704C53v71Ev,
  (VTBL_ENTRY)&_ZN6S704C43v72Ev,
  (VTBL_ENTRY)&_ZN6S704C43v73Ev,
  (VTBL_ENTRY)&_ZN6S704C43v74Ev,
  (VTBL_ENTRY)&_ZN6S704C43v75Ev,
  (VTBL_ENTRY)&_ZN6S704C43v76Ev,
};
extern VTBL_ENTRY _ZTI6S704C4[];
extern  VTBL_ENTRY _ZTV6S704C4[];
Class_Descriptor cd_S704C4 = {  "S704C4", // class name
  bases_S704C4, 1,
  &(vtc_S704C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(112,72), // object size
  NSPAIRA(_ZTI6S704C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S704C4),73, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S704C3  : S704C4 {
  void *s704c3f0[2];
  unsigned int s704c3f1:1;
  unsigned int s704c3f2:1;
  unsigned int s704c3f3:1;
  unsigned int s704c3f4:1;
  char s704c3f5;
  virtual  ~S704C3(); // _ZN6S704C3D1Ev
  virtual void  v77(); // _ZN6S704C33v77Ev
  virtual void  v78(); // _ZN6S704C33v78Ev
  virtual void  v79(); // _ZN6S704C33v79Ev
  virtual void  v80(); // _ZN6S704C33v80Ev
  virtual void  v81(); // _ZN6S704C33v81Ev
  virtual void  v82(); // _ZN6S704C33v82Ev
  virtual void  v83(); // _ZN6S704C33v83Ev
  virtual void  v84(); // _ZN6S704C33v84Ev
  virtual void  v85(); // _ZN6S704C33v85Ev
  virtual void  v86(); // _ZN6S704C33v86Ev
  virtual void  v87(); // _ZN6S704C33v87Ev
  virtual void  v88(); // _ZN6S704C33v88Ev
  virtual void  v89(); // _ZN6S704C33v89Ev
  virtual void  v90(); // _ZN6S704C33v90Ev
  virtual void  v91(); // _ZN6S704C33v91Ev
  virtual void  v92(); // _ZN6S704C33v92Ev
  virtual void  v93(); // _ZN6S704C33v93Ev
  virtual void  v94(); // _ZN6S704C33v94Ev
  virtual void  v95(); // _ZN6S704C33v95Ev
  virtual void  v96(); // _ZN6S704C33v96Ev
  virtual void  v97(); // _ZN6S704C33v97Ev
  virtual void  v98(); // _ZN6S704C33v98Ev
  S704C3(); // tgen
};
//SIG(-1 S704C3) C1{ BC2{ BC3{ vd v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 Fi FL Fp[4] Fi[2] Fp FC4{ m Fi[2]} Fp[2]} vd v87 v88 v89 v90 v91 Fp FC4} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 Fp[2] Fi:1 Fi:1 Fi:1 Fi:1 Fc}


 S704C3 ::~S704C3(){ note_dtor("S704C3", this);}
void  S704C3 ::v77(){vfunc_called(this, "_ZN6S704C33v77Ev");}
void  S704C3 ::v78(){vfunc_called(this, "_ZN6S704C33v78Ev");}
void  S704C3 ::v79(){vfunc_called(this, "_ZN6S704C33v79Ev");}
void  S704C3 ::v80(){vfunc_called(this, "_ZN6S704C33v80Ev");}
void  S704C3 ::v81(){vfunc_called(this, "_ZN6S704C33v81Ev");}
void  S704C3 ::v82(){vfunc_called(this, "_ZN6S704C33v82Ev");}
void  S704C3 ::v83(){vfunc_called(this, "_ZN6S704C33v83Ev");}
void  S704C3 ::v84(){vfunc_called(this, "_ZN6S704C33v84Ev");}
void  S704C3 ::v85(){vfunc_called(this, "_ZN6S704C33v85Ev");}
void  S704C3 ::v86(){vfunc_called(this, "_ZN6S704C33v86Ev");}
void  S704C3 ::v87(){vfunc_called(this, "_ZN6S704C33v87Ev");}
void  S704C3 ::v88(){vfunc_called(this, "_ZN6S704C33v88Ev");}
void  S704C3 ::v89(){vfunc_called(this, "_ZN6S704C33v89Ev");}
void  S704C3 ::v90(){vfunc_called(this, "_ZN6S704C33v90Ev");}
void  S704C3 ::v91(){vfunc_called(this, "_ZN6S704C33v91Ev");}
void  S704C3 ::v92(){vfunc_called(this, "_ZN6S704C33v92Ev");}
void  S704C3 ::v93(){vfunc_called(this, "_ZN6S704C33v93Ev");}
void  S704C3 ::v94(){vfunc_called(this, "_ZN6S704C33v94Ev");}
void  S704C3 ::v95(){vfunc_called(this, "_ZN6S704C33v95Ev");}
void  S704C3 ::v96(){vfunc_called(this, "_ZN6S704C33v96Ev");}
void  S704C3 ::v97(){vfunc_called(this, "_ZN6S704C33v97Ev");}
void  S704C3 ::v98(){vfunc_called(this, "_ZN6S704C33v98Ev");}
S704C3 ::S704C3(){ note_ctor("S704C3", this);} // tgen

static void Test_S704C3()
{
  extern Class_Descriptor cd_S704C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(18,22)];
    init_test(&cd_S704C3, buf);
    S704C3 *dp, &lv = *(dp=new (buf) S704C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(136,84), "sizeof(S704C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S704C3)");
    check_base_class_offset(lv, (S704C5*)(S704C4*), 0, "S704C3");
    check_base_class_offset(lv, (S704C4*), 0, "S704C3");
    check_field_offset(lv, s704c3f0, ABISELECT(112,72), "S704C3.s704c3f0");
    set_bf_and_test(lv, s704c3f1, ABISELECT(128,80), 0, 1, 1, "S704C3");
    set_bf_and_test(lv, s704c3f2, ABISELECT(128,80), 1, 1, 1, "S704C3");
    set_bf_and_test(lv, s704c3f3, ABISELECT(128,80), 2, 1, 1, "S704C3");
    set_bf_and_test(lv, s704c3f4, ABISELECT(128,80), 3, 1, 1, "S704C3");
    check_field_offset(lv, s704c3f5, ABISELECT(129,81), "S704C3.s704c3f5");
    test_class_info(&lv, &cd_S704C3);
    dp->~S704C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS704C3(Test_S704C3, "S704C3", ABISELECT(136,84));

#else // __cplusplus

extern void _ZN6S704C3C1Ev();
extern void _ZN6S704C3D1Ev();
Name_Map name_map_S704C3[] = {
  NSPAIR(_ZN6S704C3C1Ev),
  NSPAIR(_ZN6S704C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S704C5;
extern VTBL_ENTRY _ZTI6S704C5[];
extern  VTBL_ENTRY _ZTV6S704C5[];
extern Class_Descriptor cd_S704C4;
extern VTBL_ENTRY _ZTI6S704C4[];
extern  VTBL_ENTRY _ZTV6S704C4[];
static Base_Class bases_S704C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S704C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S704C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S704C3[];
extern void _ZN6S704C3D1Ev();
extern void _ZN6S704C3D0Ev();
extern void _ZN6S704C52v8Ev();
extern void _ZN6S704C52v9Ev();
extern void _ZN6S704C53v10Ev();
extern void _ZN6S704C53v11Ev();
extern void _ZN6S704C53v12Ev();
extern void _ZN6S704C53v13Ev();
extern void _ZN6S704C53v14Ev();
extern void _ZN6S704C53v15Ev();
extern void _ZN6S704C53v16Ev();
extern void _ZN6S704C53v17Ev();
extern void _ZN6S704C53v18Ev();
extern void _ZN6S704C53v19Ev();
extern void _ZN6S704C53v20Ev();
extern void _ZN6S704C53v21Ev();
extern void _ZN6S704C53v22Ev();
extern void _ZN6S704C53v23Ev();
extern void _ZN6S704C53v24Ev();
extern void _ZN6S704C53v25Ev();
extern void _ZN6S704C53v26Ev();
extern void _ZN6S704C53v27Ev();
extern void _ZN6S704C53v28Ev();
extern void _ZN6S704C53v29Ev();
extern void _ZN6S704C53v30Ev();
extern void _ZN6S704C53v31Ev();
extern void _ZN6S704C53v32Ev();
extern void _ZN6S704C53v33Ev();
extern void _ZN6S704C53v34Ev();
extern void _ZN6S704C53v35Ev();
extern void _ZN6S704C53v36Ev();
extern void _ZN6S704C53v37Ev();
extern void _ZN6S704C53v38Ev();
extern void _ZN6S704C53v39Ev();
extern void _ZN6S704C53v40Ev();
extern void _ZN6S704C53v41Ev();
extern void _ZN6S704C53v42Ev();
extern void _ZN6S704C53v43Ev();
extern void _ZN6S704C53v44Ev();
extern void _ZN6S704C53v45Ev();
extern void _ZN6S704C53v46Ev();
extern void _ZN6S704C53v47Ev();
extern void _ZN6S704C53v48Ev();
extern void _ZN6S704C53v49Ev();
extern void _ZN6S704C53v50Ev();
extern void _ZN6S704C53v51Ev();
extern void _ZN6S704C53v52Ev();
extern void _ZN6S704C53v53Ev();
extern void _ZN6S704C53v54Ev();
extern void _ZN6S704C53v55Ev();
extern void _ZN6S704C53v56Ev();
extern void _ZN6S704C53v57Ev();
extern void _ZN6S704C53v58Ev();
extern void _ZN6S704C53v59Ev();
extern void _ZN6S704C53v60Ev();
extern void _ZN6S704C53v61Ev();
extern void _ZN6S704C53v62Ev();
extern void _ZN6S704C53v63Ev();
extern void _ZN6S704C53v64Ev();
extern void _ZN6S704C53v65Ev();
extern void _ZN6S704C53v66Ev();
extern void _ZN6S704C53v67Ev();
extern void _ZN6S704C53v68Ev();
extern void _ZN6S704C53v69Ev();
extern void _ZN6S704C53v70Ev();
extern void _ZN6S704C53v71Ev();
extern void _ZN6S704C43v72Ev();
extern void _ZN6S704C43v73Ev();
extern void _ZN6S704C43v74Ev();
extern void _ZN6S704C43v75Ev();
extern void _ZN6S704C43v76Ev();
extern void _ZN6S704C33v77Ev();
extern void _ZN6S704C33v78Ev();
extern void _ZN6S704C33v79Ev();
extern void _ZN6S704C33v80Ev();
extern void _ZN6S704C33v81Ev();
extern void _ZN6S704C33v82Ev();
extern void _ZN6S704C33v83Ev();
extern void _ZN6S704C33v84Ev();
extern void _ZN6S704C33v85Ev();
extern void _ZN6S704C33v86Ev();
extern void _ZN6S704C33v87Ev();
extern void _ZN6S704C33v88Ev();
extern void _ZN6S704C33v89Ev();
extern void _ZN6S704C33v90Ev();
extern void _ZN6S704C33v91Ev();
extern void _ZN6S704C33v92Ev();
extern void _ZN6S704C33v93Ev();
extern void _ZN6S704C33v94Ev();
extern void _ZN6S704C33v95Ev();
extern void _ZN6S704C33v96Ev();
extern void _ZN6S704C33v97Ev();
extern void _ZN6S704C33v98Ev();
static  VTBL_ENTRY vtc_S704C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S704C3[0]),
  (VTBL_ENTRY)&_ZN6S704C3D1Ev,
  (VTBL_ENTRY)&_ZN6S704C3D0Ev,
  (VTBL_ENTRY)&_ZN6S704C52v8Ev,
  (VTBL_ENTRY)&_ZN6S704C52v9Ev,
  (VTBL_ENTRY)&_ZN6S704C53v10Ev,
  (VTBL_ENTRY)&_ZN6S704C53v11Ev,
  (VTBL_ENTRY)&_ZN6S704C53v12Ev,
  (VTBL_ENTRY)&_ZN6S704C53v13Ev,
  (VTBL_ENTRY)&_ZN6S704C53v14Ev,
  (VTBL_ENTRY)&_ZN6S704C53v15Ev,
  (VTBL_ENTRY)&_ZN6S704C53v16Ev,
  (VTBL_ENTRY)&_ZN6S704C53v17Ev,
  (VTBL_ENTRY)&_ZN6S704C53v18Ev,
  (VTBL_ENTRY)&_ZN6S704C53v19Ev,
  (VTBL_ENTRY)&_ZN6S704C53v20Ev,
  (VTBL_ENTRY)&_ZN6S704C53v21Ev,
  (VTBL_ENTRY)&_ZN6S704C53v22Ev,
  (VTBL_ENTRY)&_ZN6S704C53v23Ev,
  (VTBL_ENTRY)&_ZN6S704C53v24Ev,
  (VTBL_ENTRY)&_ZN6S704C53v25Ev,
  (VTBL_ENTRY)&_ZN6S704C53v26Ev,
  (VTBL_ENTRY)&_ZN6S704C53v27Ev,
  (VTBL_ENTRY)&_ZN6S704C53v28Ev,
  (VTBL_ENTRY)&_ZN6S704C53v29Ev,
  (VTBL_ENTRY)&_ZN6S704C53v30Ev,
  (VTBL_ENTRY)&_ZN6S704C53v31Ev,
  (VTBL_ENTRY)&_ZN6S704C53v32Ev,
  (VTBL_ENTRY)&_ZN6S704C53v33Ev,
  (VTBL_ENTRY)&_ZN6S704C53v34Ev,
  (VTBL_ENTRY)&_ZN6S704C53v35Ev,
  (VTBL_ENTRY)&_ZN6S704C53v36Ev,
  (VTBL_ENTRY)&_ZN6S704C53v37Ev,
  (VTBL_ENTRY)&_ZN6S704C53v38Ev,
  (VTBL_ENTRY)&_ZN6S704C53v39Ev,
  (VTBL_ENTRY)&_ZN6S704C53v40Ev,
  (VTBL_ENTRY)&_ZN6S704C53v41Ev,
  (VTBL_ENTRY)&_ZN6S704C53v42Ev,
  (VTBL_ENTRY)&_ZN6S704C53v43Ev,
  (VTBL_ENTRY)&_ZN6S704C53v44Ev,
  (VTBL_ENTRY)&_ZN6S704C53v45Ev,
  (VTBL_ENTRY)&_ZN6S704C53v46Ev,
  (VTBL_ENTRY)&_ZN6S704C53v47Ev,
  (VTBL_ENTRY)&_ZN6S704C53v48Ev,
  (VTBL_ENTRY)&_ZN6S704C53v49Ev,
  (VTBL_ENTRY)&_ZN6S704C53v50Ev,
  (VTBL_ENTRY)&_ZN6S704C53v51Ev,
  (VTBL_ENTRY)&_ZN6S704C53v52Ev,
  (VTBL_ENTRY)&_ZN6S704C53v53Ev,
  (VTBL_ENTRY)&_ZN6S704C53v54Ev,
  (VTBL_ENTRY)&_ZN6S704C53v55Ev,
  (VTBL_ENTRY)&_ZN6S704C53v56Ev,
  (VTBL_ENTRY)&_ZN6S704C53v57Ev,
  (VTBL_ENTRY)&_ZN6S704C53v58Ev,
  (VTBL_ENTRY)&_ZN6S704C53v59Ev,
  (VTBL_ENTRY)&_ZN6S704C53v60Ev,
  (VTBL_ENTRY)&_ZN6S704C53v61Ev,
  (VTBL_ENTRY)&_ZN6S704C53v62Ev,
  (VTBL_ENTRY)&_ZN6S704C53v63Ev,
  (VTBL_ENTRY)&_ZN6S704C53v64Ev,
  (VTBL_ENTRY)&_ZN6S704C53v65Ev,
  (VTBL_ENTRY)&_ZN6S704C53v66Ev,
  (VTBL_ENTRY)&_ZN6S704C53v67Ev,
  (VTBL_ENTRY)&_ZN6S704C53v68Ev,
  (VTBL_ENTRY)&_ZN6S704C53v69Ev,
  (VTBL_ENTRY)&_ZN6S704C53v70Ev,
  (VTBL_ENTRY)&_ZN6S704C53v71Ev,
  (VTBL_ENTRY)&_ZN6S704C43v72Ev,
  (VTBL_ENTRY)&_ZN6S704C43v73Ev,
  (VTBL_ENTRY)&_ZN6S704C43v74Ev,
  (VTBL_ENTRY)&_ZN6S704C43v75Ev,
  (VTBL_ENTRY)&_ZN6S704C43v76Ev,
  (VTBL_ENTRY)&_ZN6S704C33v77Ev,
  (VTBL_ENTRY)&_ZN6S704C33v78Ev,
  (VTBL_ENTRY)&_ZN6S704C33v79Ev,
  (VTBL_ENTRY)&_ZN6S704C33v80Ev,
  (VTBL_ENTRY)&_ZN6S704C33v81Ev,
  (VTBL_ENTRY)&_ZN6S704C33v82Ev,
  (VTBL_ENTRY)&_ZN6S704C33v83Ev,
  (VTBL_ENTRY)&_ZN6S704C33v84Ev,
  (VTBL_ENTRY)&_ZN6S704C33v85Ev,
  (VTBL_ENTRY)&_ZN6S704C33v86Ev,
  (VTBL_ENTRY)&_ZN6S704C33v87Ev,
  (VTBL_ENTRY)&_ZN6S704C33v88Ev,
  (VTBL_ENTRY)&_ZN6S704C33v89Ev,
  (VTBL_ENTRY)&_ZN6S704C33v90Ev,
  (VTBL_ENTRY)&_ZN6S704C33v91Ev,
  (VTBL_ENTRY)&_ZN6S704C33v92Ev,
  (VTBL_ENTRY)&_ZN6S704C33v93Ev,
  (VTBL_ENTRY)&_ZN6S704C33v94Ev,
  (VTBL_ENTRY)&_ZN6S704C33v95Ev,
  (VTBL_ENTRY)&_ZN6S704C33v96Ev,
  (VTBL_ENTRY)&_ZN6S704C33v97Ev,
  (VTBL_ENTRY)&_ZN6S704C33v98Ev,
};
extern VTBL_ENTRY _ZTI6S704C3[];
extern  VTBL_ENTRY _ZTV6S704C3[];
Class_Descriptor cd_S704C3 = {  "S704C3", // class name
  bases_S704C3, 2,
  &(vtc_S704C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(136,84), // object size
  NSPAIRA(_ZTI6S704C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S704C3),95, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S704C2  : S704C3 {
  void *s704c2f0;
  ::S836C39 s704c2f1;
  ::S836C39 s704c2f2;
  ::S285C19 s704c2f3;
  ::S285C19 s704c2f4;
  int s704c2f5;
  ::S836C29 s704c2f6;
  void *s704c2f7;
  unsigned int s704c2f8:1;
  unsigned int s704c2f9:1;
  unsigned int s704c2f10:1;
  unsigned int s704c2f11:1;
  unsigned int s704c2f12:1;
  unsigned int s704c2f13:1;
  unsigned int s704c2f14:1;
  unsigned int s704c2f15:1;
  unsigned int s704c2f16:1;
  unsigned int s704c2f17:1;
  unsigned int s704c2f18:1;
  void *s704c2f19;
  ::S285C17 s704c2f20;
  ::S836C25 s704c2f21;
  unsigned int s704c2f22:1;
  ::S235C17 s704c2f23;
  ::S235C17 s704c2f24;
  ::S235C11_nt s704c2f25;
  ::S235C11_nt s704c2f26;
  char s704c2f27[2];
  ::S235C9_nt s704c2f28;
  int s704c2f29[3];
  char s704c2f30[2];
  int s704c2f31[2];
  virtual  ~S704C2(); // _ZN6S704C2D1Ev
  virtual void  v99(); // _ZN6S704C23v99Ev
  virtual void  v100(); // _ZN6S704C24v100Ev
  virtual void  v101(); // _ZN6S704C24v101Ev
  virtual void  v102(); // _ZN6S704C24v102Ev
  virtual void  v103(); // _ZN6S704C24v103Ev
  virtual void  v104(); // _ZN6S704C24v104Ev
  virtual void  v105(); // _ZN6S704C24v105Ev
  virtual void  v106(); // _ZN6S704C24v106Ev
  virtual void  v107(); // _ZN6S704C24v107Ev
  virtual void  v108(); // _ZN6S704C24v108Ev
  virtual void  v109(); // _ZN6S704C24v109Ev
  virtual void  v110(); // _ZN6S704C24v110Ev
  virtual void  v111(); // _ZN6S704C24v111Ev
  virtual void  v112(); // _ZN6S704C24v112Ev
  virtual void  v113(); // _ZN6S704C24v113Ev
  virtual void  v114(); // _ZN6S704C24v114Ev
  virtual void  v115(); // _ZN6S704C24v115Ev
  virtual void  v116(); // _ZN6S704C24v116Ev
  virtual void  v117(); // _ZN6S704C24v117Ev
  virtual void  v118(); // _ZN6S704C24v118Ev
  virtual void  v119(); // _ZN6S704C24v119Ev
  virtual void  v120(); // _ZN6S704C24v120Ev
  virtual void  v121(); // _ZN6S704C24v121Ev
  virtual void  v122(); // _ZN6S704C24v122Ev
  virtual void  v123(); // _ZN6S704C24v123Ev
  virtual void  v124(); // _ZN6S704C24v124Ev
  virtual void  v125(); // _ZN6S704C24v125Ev
  S704C2(); // tgen
};
//SIG(-1 S704C2) C1{ BC2{ BC3{ BC4{ vd v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 v91 Fi FL Fp[4] Fi[2] Fp FC5{ m Fi[2]} Fp[2]} vd v92 v93 v94 v95 v96 Fp FC5} vd v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 v110 v111 v112 v113 v114 v115 v116 v117 v118 Fp[2] Fi:1 Fi:1 Fi:1 Fi:1 Fc} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 Fp FC6{ m} FC6 FC7{ m Fi[4]} FC7 Fi FC8{ m} Fp Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fp FC9{ BC10{ BC11{ m Fp Fi[2]}}} FC12{ m} Fi:1 FC13{ BC14{ BC11}} FC13 FC15{ BC16{ BC11}} FC15 Fc[2] FC17{ m Fi[4]} Fi[3] Fc[2] Fi[2]}


 S704C2 ::~S704C2(){ note_dtor("S704C2", this);}
void  S704C2 ::v99(){vfunc_called(this, "_ZN6S704C23v99Ev");}
void  S704C2 ::v100(){vfunc_called(this, "_ZN6S704C24v100Ev");}
void  S704C2 ::v101(){vfunc_called(this, "_ZN6S704C24v101Ev");}
void  S704C2 ::v102(){vfunc_called(this, "_ZN6S704C24v102Ev");}
void  S704C2 ::v103(){vfunc_called(this, "_ZN6S704C24v103Ev");}
void  S704C2 ::v104(){vfunc_called(this, "_ZN6S704C24v104Ev");}
void  S704C2 ::v105(){vfunc_called(this, "_ZN6S704C24v105Ev");}
void  S704C2 ::v106(){vfunc_called(this, "_ZN6S704C24v106Ev");}
void  S704C2 ::v107(){vfunc_called(this, "_ZN6S704C24v107Ev");}
void  S704C2 ::v108(){vfunc_called(this, "_ZN6S704C24v108Ev");}
void  S704C2 ::v109(){vfunc_called(this, "_ZN6S704C24v109Ev");}
void  S704C2 ::v110(){vfunc_called(this, "_ZN6S704C24v110Ev");}
void  S704C2 ::v111(){vfunc_called(this, "_ZN6S704C24v111Ev");}
void  S704C2 ::v112(){vfunc_called(this, "_ZN6S704C24v112Ev");}
void  S704C2 ::v113(){vfunc_called(this, "_ZN6S704C24v113Ev");}
void  S704C2 ::v114(){vfunc_called(this, "_ZN6S704C24v114Ev");}
void  S704C2 ::v115(){vfunc_called(this, "_ZN6S704C24v115Ev");}
void  S704C2 ::v116(){vfunc_called(this, "_ZN6S704C24v116Ev");}
void  S704C2 ::v117(){vfunc_called(this, "_ZN6S704C24v117Ev");}
void  S704C2 ::v118(){vfunc_called(this, "_ZN6S704C24v118Ev");}
void  S704C2 ::v119(){vfunc_called(this, "_ZN6S704C24v119Ev");}
void  S704C2 ::v120(){vfunc_called(this, "_ZN6S704C24v120Ev");}
void  S704C2 ::v121(){vfunc_called(this, "_ZN6S704C24v121Ev");}
void  S704C2 ::v122(){vfunc_called(this, "_ZN6S704C24v122Ev");}
void  S704C2 ::v123(){vfunc_called(this, "_ZN6S704C24v123Ev");}
void  S704C2 ::v124(){vfunc_called(this, "_ZN6S704C24v124Ev");}
void  S704C2 ::v125(){vfunc_called(this, "_ZN6S704C24v125Ev");}
S704C2 ::S704C2(){ note_ctor("S704C2", this);} // tgen

static void Test_S704C2()
{
  extern Class_Descriptor cd_S704C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(45,64)];
    init_test(&cd_S704C2, buf);
    S704C2 *dp, &lv = *(dp=new (buf) S704C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(352,252), "sizeof(S704C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S704C2)");
    check_base_class_offset(lv, (S704C5*)(S704C4*)(S704C3*), 0, "S704C2");
    check_base_class_offset(lv, (S704C4*)(S704C3*), 0, "S704C2");
    check_base_class_offset(lv, (S704C3*), 0, "S704C2");
    check_field_offset(lv, s704c2f0, ABISELECT(136,84), "S704C2.s704c2f0");
    check_field_offset(lv, s704c2f1, ABISELECT(144,88), "S704C2.s704c2f1");
    check_field_offset(lv, s704c2f2, ABISELECT(145,89), "S704C2.s704c2f2");
    check_field_offset(lv, s704c2f3, ABISELECT(148,92), "S704C2.s704c2f3");
    check_field_offset(lv, s704c2f4, ABISELECT(164,108), "S704C2.s704c2f4");
    check_field_offset(lv, s704c2f5, ABISELECT(180,124), "S704C2.s704c2f5");
    check_field_offset(lv, s704c2f6, ABISELECT(184,128), "S704C2.s704c2f6");
    check_field_offset(lv, s704c2f7, ABISELECT(192,132), "S704C2.s704c2f7");
    set_bf_and_test(lv, s704c2f8, ABISELECT(200,136), 0, 1, 1, "S704C2");
    set_bf_and_test(lv, s704c2f9, ABISELECT(200,136), 1, 1, 1, "S704C2");
    set_bf_and_test(lv, s704c2f10, ABISELECT(200,136), 2, 1, 1, "S704C2");
    set_bf_and_test(lv, s704c2f11, ABISELECT(200,136), 3, 1, 1, "S704C2");
    set_bf_and_test(lv, s704c2f12, ABISELECT(200,136), 4, 1, 1, "S704C2");
    set_bf_and_test(lv, s704c2f13, ABISELECT(200,136), 5, 1, 1, "S704C2");
    set_bf_and_test(lv, s704c2f14, ABISELECT(200,136), 6, 1, 1, "S704C2");
    set_bf_and_test(lv, s704c2f15, ABISELECT(200,136), 7, 1, 1, "S704C2");
    set_bf_and_test(lv, s704c2f16, ABISELECT(201,137), 0, 1, 1, "S704C2");
    set_bf_and_test(lv, s704c2f17, ABISELECT(201,137), 1, 1, 1, "S704C2");
    set_bf_and_test(lv, s704c2f18, ABISELECT(201,137), 2, 1, 1, "S704C2");
    check_field_offset(lv, s704c2f19, ABISELECT(208,140), "S704C2.s704c2f19");
    check_field_offset(lv, s704c2f20, ABISELECT(216,144), "S704C2.s704c2f20");
    check_field_offset(lv, s704c2f21, ABISELECT(232,156), "S704C2.s704c2f21");
    set_bf_and_test(lv, s704c2f22, ABISELECT(233,157), 0, 1, 1, "S704C2");
    check_field_offset(lv, s704c2f23, ABISELECT(240,160), "S704C2.s704c2f23");
    check_field_offset(lv, s704c2f24, ABISELECT(256,172), "S704C2.s704c2f24");
    check_field_offset(lv, s704c2f25, ABISELECT(272,184), "S704C2.s704c2f25");
    check_field_offset(lv, s704c2f26, ABISELECT(288,196), "S704C2.s704c2f26");
    check_field_offset(lv, s704c2f27, ABISELECT(304,208), "S704C2.s704c2f27");
    check_field_offset(lv, s704c2f28, ABISELECT(308,212), "S704C2.s704c2f28");
    check_field_offset(lv, s704c2f29, ABISELECT(324,228), "S704C2.s704c2f29");
    check_field_offset(lv, s704c2f30, ABISELECT(336,240), "S704C2.s704c2f30");
    check_field_offset(lv, s704c2f31, ABISELECT(340,244), "S704C2.s704c2f31");
    test_class_info(&lv, &cd_S704C2);
    dp->~S704C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS704C2(Test_S704C2, "S704C2", ABISELECT(352,252));

#else // __cplusplus

extern void _ZN6S704C2C1Ev();
extern void _ZN6S704C2D1Ev();
Name_Map name_map_S704C2[] = {
  NSPAIR(_ZN6S704C2C1Ev),
  NSPAIR(_ZN6S704C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S704C5;
extern VTBL_ENTRY _ZTI6S704C5[];
extern  VTBL_ENTRY _ZTV6S704C5[];
extern Class_Descriptor cd_S704C4;
extern VTBL_ENTRY _ZTI6S704C4[];
extern  VTBL_ENTRY _ZTV6S704C4[];
extern Class_Descriptor cd_S704C3;
extern VTBL_ENTRY _ZTI6S704C3[];
extern  VTBL_ENTRY _ZTV6S704C3[];
static Base_Class bases_S704C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S704C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S704C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S704C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S704C2[];
extern void _ZN6S704C2D1Ev();
extern void _ZN6S704C2D0Ev();
extern void _ZN6S704C52v8Ev();
extern void _ZN6S704C52v9Ev();
extern void _ZN6S704C53v10Ev();
extern void _ZN6S704C53v11Ev();
extern void _ZN6S704C53v12Ev();
extern void _ZN6S704C53v13Ev();
extern void _ZN6S704C53v14Ev();
extern void _ZN6S704C53v15Ev();
extern void _ZN6S704C53v16Ev();
extern void _ZN6S704C53v17Ev();
extern void _ZN6S704C53v18Ev();
extern void _ZN6S704C53v19Ev();
extern void _ZN6S704C53v20Ev();
extern void _ZN6S704C53v21Ev();
extern void _ZN6S704C53v22Ev();
extern void _ZN6S704C53v23Ev();
extern void _ZN6S704C53v24Ev();
extern void _ZN6S704C53v25Ev();
extern void _ZN6S704C53v26Ev();
extern void _ZN6S704C53v27Ev();
extern void _ZN6S704C53v28Ev();
extern void _ZN6S704C53v29Ev();
extern void _ZN6S704C53v30Ev();
extern void _ZN6S704C53v31Ev();
extern void _ZN6S704C53v32Ev();
extern void _ZN6S704C53v33Ev();
extern void _ZN6S704C53v34Ev();
extern void _ZN6S704C53v35Ev();
extern void _ZN6S704C53v36Ev();
extern void _ZN6S704C53v37Ev();
extern void _ZN6S704C53v38Ev();
extern void _ZN6S704C53v39Ev();
extern void _ZN6S704C53v40Ev();
extern void _ZN6S704C53v41Ev();
extern void _ZN6S704C53v42Ev();
extern void _ZN6S704C53v43Ev();
extern void _ZN6S704C53v44Ev();
extern void _ZN6S704C53v45Ev();
extern void _ZN6S704C53v46Ev();
extern void _ZN6S704C53v47Ev();
extern void _ZN6S704C53v48Ev();
extern void _ZN6S704C53v49Ev();
extern void _ZN6S704C53v50Ev();
extern void _ZN6S704C53v51Ev();
extern void _ZN6S704C53v52Ev();
extern void _ZN6S704C53v53Ev();
extern void _ZN6S704C53v54Ev();
extern void _ZN6S704C53v55Ev();
extern void _ZN6S704C53v56Ev();
extern void _ZN6S704C53v57Ev();
extern void _ZN6S704C53v58Ev();
extern void _ZN6S704C53v59Ev();
extern void _ZN6S704C53v60Ev();
extern void _ZN6S704C53v61Ev();
extern void _ZN6S704C53v62Ev();
extern void _ZN6S704C53v63Ev();
extern void _ZN6S704C53v64Ev();
extern void _ZN6S704C53v65Ev();
extern void _ZN6S704C53v66Ev();
extern void _ZN6S704C53v67Ev();
extern void _ZN6S704C53v68Ev();
extern void _ZN6S704C53v69Ev();
extern void _ZN6S704C53v70Ev();
extern void _ZN6S704C53v71Ev();
extern void _ZN6S704C43v72Ev();
extern void _ZN6S704C43v73Ev();
extern void _ZN6S704C43v74Ev();
extern void _ZN6S704C43v75Ev();
extern void _ZN6S704C43v76Ev();
extern void _ZN6S704C33v77Ev();
extern void _ZN6S704C33v78Ev();
extern void _ZN6S704C33v79Ev();
extern void _ZN6S704C33v80Ev();
extern void _ZN6S704C33v81Ev();
extern void _ZN6S704C33v82Ev();
extern void _ZN6S704C33v83Ev();
extern void _ZN6S704C33v84Ev();
extern void _ZN6S704C33v85Ev();
extern void _ZN6S704C33v86Ev();
extern void _ZN6S704C33v87Ev();
extern void _ZN6S704C33v88Ev();
extern void _ZN6S704C33v89Ev();
extern void _ZN6S704C33v90Ev();
extern void _ZN6S704C33v91Ev();
extern void _ZN6S704C33v92Ev();
extern void _ZN6S704C33v93Ev();
extern void _ZN6S704C33v94Ev();
extern void _ZN6S704C33v95Ev();
extern void _ZN6S704C33v96Ev();
extern void _ZN6S704C33v97Ev();
extern void _ZN6S704C33v98Ev();
extern void _ZN6S704C23v99Ev();
extern void _ZN6S704C24v100Ev();
extern void _ZN6S704C24v101Ev();
extern void _ZN6S704C24v102Ev();
extern void _ZN6S704C24v103Ev();
extern void _ZN6S704C24v104Ev();
extern void _ZN6S704C24v105Ev();
extern void _ZN6S704C24v106Ev();
extern void _ZN6S704C24v107Ev();
extern void _ZN6S704C24v108Ev();
extern void _ZN6S704C24v109Ev();
extern void _ZN6S704C24v110Ev();
extern void _ZN6S704C24v111Ev();
extern void _ZN6S704C24v112Ev();
extern void _ZN6S704C24v113Ev();
extern void _ZN6S704C24v114Ev();
extern void _ZN6S704C24v115Ev();
extern void _ZN6S704C24v116Ev();
extern void _ZN6S704C24v117Ev();
extern void _ZN6S704C24v118Ev();
extern void _ZN6S704C24v119Ev();
extern void _ZN6S704C24v120Ev();
extern void _ZN6S704C24v121Ev();
extern void _ZN6S704C24v122Ev();
extern void _ZN6S704C24v123Ev();
extern void _ZN6S704C24v124Ev();
extern void _ZN6S704C24v125Ev();
static  VTBL_ENTRY vtc_S704C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S704C2[0]),
  (VTBL_ENTRY)&_ZN6S704C2D1Ev,
  (VTBL_ENTRY)&_ZN6S704C2D0Ev,
  (VTBL_ENTRY)&_ZN6S704C52v8Ev,
  (VTBL_ENTRY)&_ZN6S704C52v9Ev,
  (VTBL_ENTRY)&_ZN6S704C53v10Ev,
  (VTBL_ENTRY)&_ZN6S704C53v11Ev,
  (VTBL_ENTRY)&_ZN6S704C53v12Ev,
  (VTBL_ENTRY)&_ZN6S704C53v13Ev,
  (VTBL_ENTRY)&_ZN6S704C53v14Ev,
  (VTBL_ENTRY)&_ZN6S704C53v15Ev,
  (VTBL_ENTRY)&_ZN6S704C53v16Ev,
  (VTBL_ENTRY)&_ZN6S704C53v17Ev,
  (VTBL_ENTRY)&_ZN6S704C53v18Ev,
  (VTBL_ENTRY)&_ZN6S704C53v19Ev,
  (VTBL_ENTRY)&_ZN6S704C53v20Ev,
  (VTBL_ENTRY)&_ZN6S704C53v21Ev,
  (VTBL_ENTRY)&_ZN6S704C53v22Ev,
  (VTBL_ENTRY)&_ZN6S704C53v23Ev,
  (VTBL_ENTRY)&_ZN6S704C53v24Ev,
  (VTBL_ENTRY)&_ZN6S704C53v25Ev,
  (VTBL_ENTRY)&_ZN6S704C53v26Ev,
  (VTBL_ENTRY)&_ZN6S704C53v27Ev,
  (VTBL_ENTRY)&_ZN6S704C53v28Ev,
  (VTBL_ENTRY)&_ZN6S704C53v29Ev,
  (VTBL_ENTRY)&_ZN6S704C53v30Ev,
  (VTBL_ENTRY)&_ZN6S704C53v31Ev,
  (VTBL_ENTRY)&_ZN6S704C53v32Ev,
  (VTBL_ENTRY)&_ZN6S704C53v33Ev,
  (VTBL_ENTRY)&_ZN6S704C53v34Ev,
  (VTBL_ENTRY)&_ZN6S704C53v35Ev,
  (VTBL_ENTRY)&_ZN6S704C53v36Ev,
  (VTBL_ENTRY)&_ZN6S704C53v37Ev,
  (VTBL_ENTRY)&_ZN6S704C53v38Ev,
  (VTBL_ENTRY)&_ZN6S704C53v39Ev,
  (VTBL_ENTRY)&_ZN6S704C53v40Ev,
  (VTBL_ENTRY)&_ZN6S704C53v41Ev,
  (VTBL_ENTRY)&_ZN6S704C53v42Ev,
  (VTBL_ENTRY)&_ZN6S704C53v43Ev,
  (VTBL_ENTRY)&_ZN6S704C53v44Ev,
  (VTBL_ENTRY)&_ZN6S704C53v45Ev,
  (VTBL_ENTRY)&_ZN6S704C53v46Ev,
  (VTBL_ENTRY)&_ZN6S704C53v47Ev,
  (VTBL_ENTRY)&_ZN6S704C53v48Ev,
  (VTBL_ENTRY)&_ZN6S704C53v49Ev,
  (VTBL_ENTRY)&_ZN6S704C53v50Ev,
  (VTBL_ENTRY)&_ZN6S704C53v51Ev,
  (VTBL_ENTRY)&_ZN6S704C53v52Ev,
  (VTBL_ENTRY)&_ZN6S704C53v53Ev,
  (VTBL_ENTRY)&_ZN6S704C53v54Ev,
  (VTBL_ENTRY)&_ZN6S704C53v55Ev,
  (VTBL_ENTRY)&_ZN6S704C53v56Ev,
  (VTBL_ENTRY)&_ZN6S704C53v57Ev,
  (VTBL_ENTRY)&_ZN6S704C53v58Ev,
  (VTBL_ENTRY)&_ZN6S704C53v59Ev,
  (VTBL_ENTRY)&_ZN6S704C53v60Ev,
  (VTBL_ENTRY)&_ZN6S704C53v61Ev,
  (VTBL_ENTRY)&_ZN6S704C53v62Ev,
  (VTBL_ENTRY)&_ZN6S704C53v63Ev,
  (VTBL_ENTRY)&_ZN6S704C53v64Ev,
  (VTBL_ENTRY)&_ZN6S704C53v65Ev,
  (VTBL_ENTRY)&_ZN6S704C53v66Ev,
  (VTBL_ENTRY)&_ZN6S704C53v67Ev,
  (VTBL_ENTRY)&_ZN6S704C53v68Ev,
  (VTBL_ENTRY)&_ZN6S704C53v69Ev,
  (VTBL_ENTRY)&_ZN6S704C53v70Ev,
  (VTBL_ENTRY)&_ZN6S704C53v71Ev,
  (VTBL_ENTRY)&_ZN6S704C43v72Ev,
  (VTBL_ENTRY)&_ZN6S704C43v73Ev,
  (VTBL_ENTRY)&_ZN6S704C43v74Ev,
  (VTBL_ENTRY)&_ZN6S704C43v75Ev,
  (VTBL_ENTRY)&_ZN6S704C43v76Ev,
  (VTBL_ENTRY)&_ZN6S704C33v77Ev,
  (VTBL_ENTRY)&_ZN6S704C33v78Ev,
  (VTBL_ENTRY)&_ZN6S704C33v79Ev,
  (VTBL_ENTRY)&_ZN6S704C33v80Ev,
  (VTBL_ENTRY)&_ZN6S704C33v81Ev,
  (VTBL_ENTRY)&_ZN6S704C33v82Ev,
  (VTBL_ENTRY)&_ZN6S704C33v83Ev,
  (VTBL_ENTRY)&_ZN6S704C33v84Ev,
  (VTBL_ENTRY)&_ZN6S704C33v85Ev,
  (VTBL_ENTRY)&_ZN6S704C33v86Ev,
  (VTBL_ENTRY)&_ZN6S704C33v87Ev,
  (VTBL_ENTRY)&_ZN6S704C33v88Ev,
  (VTBL_ENTRY)&_ZN6S704C33v89Ev,
  (VTBL_ENTRY)&_ZN6S704C33v90Ev,
  (VTBL_ENTRY)&_ZN6S704C33v91Ev,
  (VTBL_ENTRY)&_ZN6S704C33v92Ev,
  (VTBL_ENTRY)&_ZN6S704C33v93Ev,
  (VTBL_ENTRY)&_ZN6S704C33v94Ev,
  (VTBL_ENTRY)&_ZN6S704C33v95Ev,
  (VTBL_ENTRY)&_ZN6S704C33v96Ev,
  (VTBL_ENTRY)&_ZN6S704C33v97Ev,
  (VTBL_ENTRY)&_ZN6S704C33v98Ev,
  (VTBL_ENTRY)&_ZN6S704C23v99Ev,
  (VTBL_ENTRY)&_ZN6S704C24v100Ev,
  (VTBL_ENTRY)&_ZN6S704C24v101Ev,
  (VTBL_ENTRY)&_ZN6S704C24v102Ev,
  (VTBL_ENTRY)&_ZN6S704C24v103Ev,
  (VTBL_ENTRY)&_ZN6S704C24v104Ev,
  (VTBL_ENTRY)&_ZN6S704C24v105Ev,
  (VTBL_ENTRY)&_ZN6S704C24v106Ev,
  (VTBL_ENTRY)&_ZN6S704C24v107Ev,
  (VTBL_ENTRY)&_ZN6S704C24v108Ev,
  (VTBL_ENTRY)&_ZN6S704C24v109Ev,
  (VTBL_ENTRY)&_ZN6S704C24v110Ev,
  (VTBL_ENTRY)&_ZN6S704C24v111Ev,
  (VTBL_ENTRY)&_ZN6S704C24v112Ev,
  (VTBL_ENTRY)&_ZN6S704C24v113Ev,
  (VTBL_ENTRY)&_ZN6S704C24v114Ev,
  (VTBL_ENTRY)&_ZN6S704C24v115Ev,
  (VTBL_ENTRY)&_ZN6S704C24v116Ev,
  (VTBL_ENTRY)&_ZN6S704C24v117Ev,
  (VTBL_ENTRY)&_ZN6S704C24v118Ev,
  (VTBL_ENTRY)&_ZN6S704C24v119Ev,
  (VTBL_ENTRY)&_ZN6S704C24v120Ev,
  (VTBL_ENTRY)&_ZN6S704C24v121Ev,
  (VTBL_ENTRY)&_ZN6S704C24v122Ev,
  (VTBL_ENTRY)&_ZN6S704C24v123Ev,
  (VTBL_ENTRY)&_ZN6S704C24v124Ev,
  (VTBL_ENTRY)&_ZN6S704C24v125Ev,
};
extern VTBL_ENTRY _ZTI6S704C2[];
extern  VTBL_ENTRY _ZTV6S704C2[];
Class_Descriptor cd_S704C2 = {  "S704C2", // class name
  bases_S704C2, 3,
  &(vtc_S704C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(352,252), // object size
  NSPAIRA(_ZTI6S704C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S704C2),122, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S704C1  : S704C2 {
  int s704c1f0;
  ::S836C29 s704c1f1;
  virtual  ~S704C1(); // _ZN6S704C1D1Ev
  virtual void  v1(); // _ZN6S704C12v1Ev
  virtual void  v2(); // _ZN6S704C12v2Ev
  virtual void  v3(); // _ZN6S704C12v3Ev
  virtual void  v4(); // _ZN6S704C12v4Ev
  virtual void  v5(); // _ZN6S704C12v5Ev
  virtual void  v6(); // _ZN6S704C12v6Ev
  virtual void  v7(); // _ZN6S704C12v7Ev
  S704C1(); // tgen
};
//SIG(1 S704C1) C1{ BC2{ BC3{ BC4{ BC5{ vd v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 Fi FL Fp[4] Fi[2] Fp FC6{ m Fi[2]} Fp[2]} vd v72 v73 v74 v75 v76 Fp FC6} vd v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 v91 v92 v93 v94 v95 v96 v97 v98 Fp[2] Fi:1 Fi:1 Fi:1 Fi:1 Fc} vd v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 v110 v111 v112 v113 v114 v115 v116 v117 v118 v119 v120 v121 v122 v123 v124 v125 Fp FC7{ m} FC7 FC8{ m Fi[4]} FC8 Fi FC9{ m} Fp Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fp FC10{ BC11{ BC12{ m Fp Fi[2]}}} FC13{ m} Fi:1 FC14{ BC15{ BC12}} FC14 FC16{ BC17{ BC12}} FC16 Fc[2] FC18{ m Fi[4]} Fi[3] Fc[2] Fi[2]} vd v1 v2 v3 v4 v5 v6 v7 Fi FC9}


 S704C1 ::~S704C1(){ note_dtor("S704C1", this);}
void  S704C1 ::v1(){vfunc_called(this, "_ZN6S704C12v1Ev");}
void  S704C1 ::v2(){vfunc_called(this, "_ZN6S704C12v2Ev");}
void  S704C1 ::v3(){vfunc_called(this, "_ZN6S704C12v3Ev");}
void  S704C1 ::v4(){vfunc_called(this, "_ZN6S704C12v4Ev");}
void  S704C1 ::v5(){vfunc_called(this, "_ZN6S704C12v5Ev");}
void  S704C1 ::v6(){vfunc_called(this, "_ZN6S704C12v6Ev");}
void  S704C1 ::v7(){vfunc_called(this, "_ZN6S704C12v7Ev");}
S704C1 ::S704C1(){ note_ctor("S704C1", this);} // tgen

static void Test_S704C1()
{
  extern Class_Descriptor cd_S704C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(46,66)];
    init_test(&cd_S704C1, buf);
    S704C1 *dp, &lv = *(dp=new (buf) S704C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(360,260), "sizeof(S704C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S704C1)");
    check_base_class_offset(lv, (S704C5*)(S704C4*)(S704C3*)(S704C2*), 0, "S704C1");
    check_base_class_offset(lv, (S704C4*)(S704C3*)(S704C2*), 0, "S704C1");
    check_base_class_offset(lv, (S704C3*)(S704C2*), 0, "S704C1");
    check_base_class_offset(lv, (S704C2*), 0, "S704C1");
    check_field_offset(lv, s704c1f0, ABISELECT(348,252), "S704C1.s704c1f0");
    check_field_offset(lv, s704c1f1, ABISELECT(352,256), "S704C1.s704c1f1");
    test_class_info(&lv, &cd_S704C1);
    dp->~S704C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS704C1(Test_S704C1, "S704C1", ABISELECT(360,260));

#else // __cplusplus

extern void _ZN6S704C1C1Ev();
extern void _ZN6S704C1D1Ev();
Name_Map name_map_S704C1[] = {
  NSPAIR(_ZN6S704C1C1Ev),
  NSPAIR(_ZN6S704C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S704C5;
extern VTBL_ENTRY _ZTI6S704C5[];
extern  VTBL_ENTRY _ZTV6S704C5[];
extern Class_Descriptor cd_S704C4;
extern VTBL_ENTRY _ZTI6S704C4[];
extern  VTBL_ENTRY _ZTV6S704C4[];
extern Class_Descriptor cd_S704C3;
extern VTBL_ENTRY _ZTI6S704C3[];
extern  VTBL_ENTRY _ZTV6S704C3[];
extern Class_Descriptor cd_S704C2;
extern VTBL_ENTRY _ZTI6S704C2[];
extern  VTBL_ENTRY _ZTV6S704C2[];
static Base_Class bases_S704C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S704C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S704C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S704C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S704C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S704C1[];
extern void _ZN6S704C1D1Ev();
extern void _ZN6S704C1D0Ev();
extern void _ZN6S704C52v8Ev();
extern void _ZN6S704C52v9Ev();
extern void _ZN6S704C53v10Ev();
extern void _ZN6S704C53v11Ev();
extern void _ZN6S704C53v12Ev();
extern void _ZN6S704C53v13Ev();
extern void _ZN6S704C53v14Ev();
extern void _ZN6S704C53v15Ev();
extern void _ZN6S704C53v16Ev();
extern void _ZN6S704C53v17Ev();
extern void _ZN6S704C53v18Ev();
extern void _ZN6S704C53v19Ev();
extern void _ZN6S704C53v20Ev();
extern void _ZN6S704C53v21Ev();
extern void _ZN6S704C53v22Ev();
extern void _ZN6S704C53v23Ev();
extern void _ZN6S704C53v24Ev();
extern void _ZN6S704C53v25Ev();
extern void _ZN6S704C53v26Ev();
extern void _ZN6S704C53v27Ev();
extern void _ZN6S704C53v28Ev();
extern void _ZN6S704C53v29Ev();
extern void _ZN6S704C53v30Ev();
extern void _ZN6S704C53v31Ev();
extern void _ZN6S704C53v32Ev();
extern void _ZN6S704C53v33Ev();
extern void _ZN6S704C53v34Ev();
extern void _ZN6S704C53v35Ev();
extern void _ZN6S704C53v36Ev();
extern void _ZN6S704C53v37Ev();
extern void _ZN6S704C53v38Ev();
extern void _ZN6S704C53v39Ev();
extern void _ZN6S704C53v40Ev();
extern void _ZN6S704C53v41Ev();
extern void _ZN6S704C53v42Ev();
extern void _ZN6S704C53v43Ev();
extern void _ZN6S704C53v44Ev();
extern void _ZN6S704C53v45Ev();
extern void _ZN6S704C53v46Ev();
extern void _ZN6S704C53v47Ev();
extern void _ZN6S704C53v48Ev();
extern void _ZN6S704C53v49Ev();
extern void _ZN6S704C53v50Ev();
extern void _ZN6S704C53v51Ev();
extern void _ZN6S704C53v52Ev();
extern void _ZN6S704C53v53Ev();
extern void _ZN6S704C53v54Ev();
extern void _ZN6S704C53v55Ev();
extern void _ZN6S704C53v56Ev();
extern void _ZN6S704C53v57Ev();
extern void _ZN6S704C53v58Ev();
extern void _ZN6S704C53v59Ev();
extern void _ZN6S704C53v60Ev();
extern void _ZN6S704C53v61Ev();
extern void _ZN6S704C53v62Ev();
extern void _ZN6S704C53v63Ev();
extern void _ZN6S704C53v64Ev();
extern void _ZN6S704C53v65Ev();
extern void _ZN6S704C53v66Ev();
extern void _ZN6S704C53v67Ev();
extern void _ZN6S704C53v68Ev();
extern void _ZN6S704C53v69Ev();
extern void _ZN6S704C53v70Ev();
extern void _ZN6S704C53v71Ev();
extern void _ZN6S704C43v72Ev();
extern void _ZN6S704C43v73Ev();
extern void _ZN6S704C43v74Ev();
extern void _ZN6S704C43v75Ev();
extern void _ZN6S704C43v76Ev();
extern void _ZN6S704C33v77Ev();
extern void _ZN6S704C33v78Ev();
extern void _ZN6S704C33v79Ev();
extern void _ZN6S704C33v80Ev();
extern void _ZN6S704C33v81Ev();
extern void _ZN6S704C33v82Ev();
extern void _ZN6S704C33v83Ev();
extern void _ZN6S704C33v84Ev();
extern void _ZN6S704C33v85Ev();
extern void _ZN6S704C33v86Ev();
extern void _ZN6S704C33v87Ev();
extern void _ZN6S704C33v88Ev();
extern void _ZN6S704C33v89Ev();
extern void _ZN6S704C33v90Ev();
extern void _ZN6S704C33v91Ev();
extern void _ZN6S704C33v92Ev();
extern void _ZN6S704C33v93Ev();
extern void _ZN6S704C33v94Ev();
extern void _ZN6S704C33v95Ev();
extern void _ZN6S704C33v96Ev();
extern void _ZN6S704C33v97Ev();
extern void _ZN6S704C33v98Ev();
extern void _ZN6S704C23v99Ev();
extern void _ZN6S704C24v100Ev();
extern void _ZN6S704C24v101Ev();
extern void _ZN6S704C24v102Ev();
extern void _ZN6S704C24v103Ev();
extern void _ZN6S704C24v104Ev();
extern void _ZN6S704C24v105Ev();
extern void _ZN6S704C24v106Ev();
extern void _ZN6S704C24v107Ev();
extern void _ZN6S704C24v108Ev();
extern void _ZN6S704C24v109Ev();
extern void _ZN6S704C24v110Ev();
extern void _ZN6S704C24v111Ev();
extern void _ZN6S704C24v112Ev();
extern void _ZN6S704C24v113Ev();
extern void _ZN6S704C24v114Ev();
extern void _ZN6S704C24v115Ev();
extern void _ZN6S704C24v116Ev();
extern void _ZN6S704C24v117Ev();
extern void _ZN6S704C24v118Ev();
extern void _ZN6S704C24v119Ev();
extern void _ZN6S704C24v120Ev();
extern void _ZN6S704C24v121Ev();
extern void _ZN6S704C24v122Ev();
extern void _ZN6S704C24v123Ev();
extern void _ZN6S704C24v124Ev();
extern void _ZN6S704C24v125Ev();
extern void _ZN6S704C12v1Ev();
extern void _ZN6S704C12v2Ev();
extern void _ZN6S704C12v3Ev();
extern void _ZN6S704C12v4Ev();
extern void _ZN6S704C12v5Ev();
extern void _ZN6S704C12v6Ev();
extern void _ZN6S704C12v7Ev();
static  VTBL_ENTRY vtc_S704C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S704C1[0]),
  (VTBL_ENTRY)&_ZN6S704C1D1Ev,
  (VTBL_ENTRY)&_ZN6S704C1D0Ev,
  (VTBL_ENTRY)&_ZN6S704C52v8Ev,
  (VTBL_ENTRY)&_ZN6S704C52v9Ev,
  (VTBL_ENTRY)&_ZN6S704C53v10Ev,
  (VTBL_ENTRY)&_ZN6S704C53v11Ev,
  (VTBL_ENTRY)&_ZN6S704C53v12Ev,
  (VTBL_ENTRY)&_ZN6S704C53v13Ev,
  (VTBL_ENTRY)&_ZN6S704C53v14Ev,
  (VTBL_ENTRY)&_ZN6S704C53v15Ev,
  (VTBL_ENTRY)&_ZN6S704C53v16Ev,
  (VTBL_ENTRY)&_ZN6S704C53v17Ev,
  (VTBL_ENTRY)&_ZN6S704C53v18Ev,
  (VTBL_ENTRY)&_ZN6S704C53v19Ev,
  (VTBL_ENTRY)&_ZN6S704C53v20Ev,
  (VTBL_ENTRY)&_ZN6S704C53v21Ev,
  (VTBL_ENTRY)&_ZN6S704C53v22Ev,
  (VTBL_ENTRY)&_ZN6S704C53v23Ev,
  (VTBL_ENTRY)&_ZN6S704C53v24Ev,
  (VTBL_ENTRY)&_ZN6S704C53v25Ev,
  (VTBL_ENTRY)&_ZN6S704C53v26Ev,
  (VTBL_ENTRY)&_ZN6S704C53v27Ev,
  (VTBL_ENTRY)&_ZN6S704C53v28Ev,
  (VTBL_ENTRY)&_ZN6S704C53v29Ev,
  (VTBL_ENTRY)&_ZN6S704C53v30Ev,
  (VTBL_ENTRY)&_ZN6S704C53v31Ev,
  (VTBL_ENTRY)&_ZN6S704C53v32Ev,
  (VTBL_ENTRY)&_ZN6S704C53v33Ev,
  (VTBL_ENTRY)&_ZN6S704C53v34Ev,
  (VTBL_ENTRY)&_ZN6S704C53v35Ev,
  (VTBL_ENTRY)&_ZN6S704C53v36Ev,
  (VTBL_ENTRY)&_ZN6S704C53v37Ev,
  (VTBL_ENTRY)&_ZN6S704C53v38Ev,
  (VTBL_ENTRY)&_ZN6S704C53v39Ev,
  (VTBL_ENTRY)&_ZN6S704C53v40Ev,
  (VTBL_ENTRY)&_ZN6S704C53v41Ev,
  (VTBL_ENTRY)&_ZN6S704C53v42Ev,
  (VTBL_ENTRY)&_ZN6S704C53v43Ev,
  (VTBL_ENTRY)&_ZN6S704C53v44Ev,
  (VTBL_ENTRY)&_ZN6S704C53v45Ev,
  (VTBL_ENTRY)&_ZN6S704C53v46Ev,
  (VTBL_ENTRY)&_ZN6S704C53v47Ev,
  (VTBL_ENTRY)&_ZN6S704C53v48Ev,
  (VTBL_ENTRY)&_ZN6S704C53v49Ev,
  (VTBL_ENTRY)&_ZN6S704C53v50Ev,
  (VTBL_ENTRY)&_ZN6S704C53v51Ev,
  (VTBL_ENTRY)&_ZN6S704C53v52Ev,
  (VTBL_ENTRY)&_ZN6S704C53v53Ev,
  (VTBL_ENTRY)&_ZN6S704C53v54Ev,
  (VTBL_ENTRY)&_ZN6S704C53v55Ev,
  (VTBL_ENTRY)&_ZN6S704C53v56Ev,
  (VTBL_ENTRY)&_ZN6S704C53v57Ev,
  (VTBL_ENTRY)&_ZN6S704C53v58Ev,
  (VTBL_ENTRY)&_ZN6S704C53v59Ev,
  (VTBL_ENTRY)&_ZN6S704C53v60Ev,
  (VTBL_ENTRY)&_ZN6S704C53v61Ev,
  (VTBL_ENTRY)&_ZN6S704C53v62Ev,
  (VTBL_ENTRY)&_ZN6S704C53v63Ev,
  (VTBL_ENTRY)&_ZN6S704C53v64Ev,
  (VTBL_ENTRY)&_ZN6S704C53v65Ev,
  (VTBL_ENTRY)&_ZN6S704C53v66Ev,
  (VTBL_ENTRY)&_ZN6S704C53v67Ev,
  (VTBL_ENTRY)&_ZN6S704C53v68Ev,
  (VTBL_ENTRY)&_ZN6S704C53v69Ev,
  (VTBL_ENTRY)&_ZN6S704C53v70Ev,
  (VTBL_ENTRY)&_ZN6S704C53v71Ev,
  (VTBL_ENTRY)&_ZN6S704C43v72Ev,
  (VTBL_ENTRY)&_ZN6S704C43v73Ev,
  (VTBL_ENTRY)&_ZN6S704C43v74Ev,
  (VTBL_ENTRY)&_ZN6S704C43v75Ev,
  (VTBL_ENTRY)&_ZN6S704C43v76Ev,
  (VTBL_ENTRY)&_ZN6S704C33v77Ev,
  (VTBL_ENTRY)&_ZN6S704C33v78Ev,
  (VTBL_ENTRY)&_ZN6S704C33v79Ev,
  (VTBL_ENTRY)&_ZN6S704C33v80Ev,
  (VTBL_ENTRY)&_ZN6S704C33v81Ev,
  (VTBL_ENTRY)&_ZN6S704C33v82Ev,
  (VTBL_ENTRY)&_ZN6S704C33v83Ev,
  (VTBL_ENTRY)&_ZN6S704C33v84Ev,
  (VTBL_ENTRY)&_ZN6S704C33v85Ev,
  (VTBL_ENTRY)&_ZN6S704C33v86Ev,
  (VTBL_ENTRY)&_ZN6S704C33v87Ev,
  (VTBL_ENTRY)&_ZN6S704C33v88Ev,
  (VTBL_ENTRY)&_ZN6S704C33v89Ev,
  (VTBL_ENTRY)&_ZN6S704C33v90Ev,
  (VTBL_ENTRY)&_ZN6S704C33v91Ev,
  (VTBL_ENTRY)&_ZN6S704C33v92Ev,
  (VTBL_ENTRY)&_ZN6S704C33v93Ev,
  (VTBL_ENTRY)&_ZN6S704C33v94Ev,
  (VTBL_ENTRY)&_ZN6S704C33v95Ev,
  (VTBL_ENTRY)&_ZN6S704C33v96Ev,
  (VTBL_ENTRY)&_ZN6S704C33v97Ev,
  (VTBL_ENTRY)&_ZN6S704C33v98Ev,
  (VTBL_ENTRY)&_ZN6S704C23v99Ev,
  (VTBL_ENTRY)&_ZN6S704C24v100Ev,
  (VTBL_ENTRY)&_ZN6S704C24v101Ev,
  (VTBL_ENTRY)&_ZN6S704C24v102Ev,
  (VTBL_ENTRY)&_ZN6S704C24v103Ev,
  (VTBL_ENTRY)&_ZN6S704C24v104Ev,
  (VTBL_ENTRY)&_ZN6S704C24v105Ev,
  (VTBL_ENTRY)&_ZN6S704C24v106Ev,
  (VTBL_ENTRY)&_ZN6S704C24v107Ev,
  (VTBL_ENTRY)&_ZN6S704C24v108Ev,
  (VTBL_ENTRY)&_ZN6S704C24v109Ev,
  (VTBL_ENTRY)&_ZN6S704C24v110Ev,
  (VTBL_ENTRY)&_ZN6S704C24v111Ev,
  (VTBL_ENTRY)&_ZN6S704C24v112Ev,
  (VTBL_ENTRY)&_ZN6S704C24v113Ev,
  (VTBL_ENTRY)&_ZN6S704C24v114Ev,
  (VTBL_ENTRY)&_ZN6S704C24v115Ev,
  (VTBL_ENTRY)&_ZN6S704C24v116Ev,
  (VTBL_ENTRY)&_ZN6S704C24v117Ev,
  (VTBL_ENTRY)&_ZN6S704C24v118Ev,
  (VTBL_ENTRY)&_ZN6S704C24v119Ev,
  (VTBL_ENTRY)&_ZN6S704C24v120Ev,
  (VTBL_ENTRY)&_ZN6S704C24v121Ev,
  (VTBL_ENTRY)&_ZN6S704C24v122Ev,
  (VTBL_ENTRY)&_ZN6S704C24v123Ev,
  (VTBL_ENTRY)&_ZN6S704C24v124Ev,
  (VTBL_ENTRY)&_ZN6S704C24v125Ev,
  (VTBL_ENTRY)&_ZN6S704C12v1Ev,
  (VTBL_ENTRY)&_ZN6S704C12v2Ev,
  (VTBL_ENTRY)&_ZN6S704C12v3Ev,
  (VTBL_ENTRY)&_ZN6S704C12v4Ev,
  (VTBL_ENTRY)&_ZN6S704C12v5Ev,
  (VTBL_ENTRY)&_ZN6S704C12v6Ev,
  (VTBL_ENTRY)&_ZN6S704C12v7Ev,
};
extern VTBL_ENTRY _ZTI6S704C1[];
extern  VTBL_ENTRY _ZTV6S704C1[];
Class_Descriptor cd_S704C1 = {  "S704C1", // class name
  bases_S704C1, 4,
  &(vtc_S704C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(360,260), // object size
  NSPAIRA(_ZTI6S704C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S704C1),129, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  4, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S661C5  {
  int s661c5f0;
  __tsi64 s661c5f1;
  void *s661c5f2[4];
  int s661c5f3[2];
  void *s661c5f4;
  ::S235C7_nt s661c5f5;
  void *s661c5f6[2];
  virtual  ~S661C5(); // _ZN6S661C5D1Ev
  virtual void  v6(); // _ZN6S661C52v6Ev
  virtual void  v7(); // _ZN6S661C52v7Ev
  virtual void  v8(); // _ZN6S661C52v8Ev
  virtual void  v9(); // _ZN6S661C52v9Ev
  virtual void  v10(); // _ZN6S661C53v10Ev
  virtual void  v11(); // _ZN6S661C53v11Ev
  virtual void  v12(); // _ZN6S661C53v12Ev
  virtual void  v13(); // _ZN6S661C53v13Ev
  virtual void  v14(); // _ZN6S661C53v14Ev
  virtual void  v15(); // _ZN6S661C53v15Ev
  virtual void  v16(); // _ZN6S661C53v16Ev
  virtual void  v17(); // _ZN6S661C53v17Ev
  virtual void  v18(); // _ZN6S661C53v18Ev
  virtual void  v19(); // _ZN6S661C53v19Ev
  virtual void  v20(); // _ZN6S661C53v20Ev
  virtual void  v21(); // _ZN6S661C53v21Ev
  virtual void  v22(); // _ZN6S661C53v22Ev
  virtual void  v23(); // _ZN6S661C53v23Ev
  virtual void  v24(); // _ZN6S661C53v24Ev
  virtual void  v25(); // _ZN6S661C53v25Ev
  virtual void  v26(); // _ZN6S661C53v26Ev
  virtual void  v27(); // _ZN6S661C53v27Ev
  virtual void  v28(); // _ZN6S661C53v28Ev
  virtual void  v29(); // _ZN6S661C53v29Ev
  virtual void  v30(); // _ZN6S661C53v30Ev
  virtual void  v31(); // _ZN6S661C53v31Ev
  virtual void  v32(); // _ZN6S661C53v32Ev
  virtual void  v33(); // _ZN6S661C53v33Ev
  virtual void  v34(); // _ZN6S661C53v34Ev
  virtual void  v35(); // _ZN6S661C53v35Ev
  virtual void  v36(); // _ZN6S661C53v36Ev
  virtual void  v37(); // _ZN6S661C53v37Ev
  virtual void  v38(); // _ZN6S661C53v38Ev
  virtual void  v39(); // _ZN6S661C53v39Ev
  virtual void  v40(); // _ZN6S661C53v40Ev
  virtual void  v41(); // _ZN6S661C53v41Ev
  virtual void  v42(); // _ZN6S661C53v42Ev
  virtual void  v43(); // _ZN6S661C53v43Ev
  virtual void  v44(); // _ZN6S661C53v44Ev
  virtual void  v45(); // _ZN6S661C53v45Ev
  virtual void  v46(); // _ZN6S661C53v46Ev
  virtual void  v47(); // _ZN6S661C53v47Ev
  virtual void  v48(); // _ZN6S661C53v48Ev
  virtual void  v49(); // _ZN6S661C53v49Ev
  virtual void  v50(); // _ZN6S661C53v50Ev
  virtual void  v51(); // _ZN6S661C53v51Ev
  virtual void  v52(); // _ZN6S661C53v52Ev
  virtual void  v53(); // _ZN6S661C53v53Ev
  virtual void  v54(); // _ZN6S661C53v54Ev
  virtual void  v55(); // _ZN6S661C53v55Ev
  virtual void  v56(); // _ZN6S661C53v56Ev
  virtual void  v57(); // _ZN6S661C53v57Ev
  virtual void  v58(); // _ZN6S661C53v58Ev
  virtual void  v59(); // _ZN6S661C53v59Ev
  virtual void  v60(); // _ZN6S661C53v60Ev
  virtual void  v61(); // _ZN6S661C53v61Ev
  virtual void  v62(); // _ZN6S661C53v62Ev
  virtual void  v63(); // _ZN6S661C53v63Ev
  virtual void  v64(); // _ZN6S661C53v64Ev
  virtual void  v65(); // _ZN6S661C53v65Ev
  virtual void  v66(); // _ZN6S661C53v66Ev
  virtual void  v67(); // _ZN6S661C53v67Ev
  virtual void  v68(); // _ZN6S661C53v68Ev
  virtual void  v69(); // _ZN6S661C53v69Ev
  S661C5(); // tgen
};
//SIG(-1 S661C5) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 Fi FL Fp[4] Fi[2] Fp FC2{ m Fi[2]} Fp[2]}


 S661C5 ::~S661C5(){ note_dtor("S661C5", this);}
void  S661C5 ::v6(){vfunc_called(this, "_ZN6S661C52v6Ev");}
void  S661C5 ::v7(){vfunc_called(this, "_ZN6S661C52v7Ev");}
void  S661C5 ::v8(){vfunc_called(this, "_ZN6S661C52v8Ev");}
void  S661C5 ::v9(){vfunc_called(this, "_ZN6S661C52v9Ev");}
void  S661C5 ::v10(){vfunc_called(this, "_ZN6S661C53v10Ev");}
void  S661C5 ::v11(){vfunc_called(this, "_ZN6S661C53v11Ev");}
void  S661C5 ::v12(){vfunc_called(this, "_ZN6S661C53v12Ev");}
void  S661C5 ::v13(){vfunc_called(this, "_ZN6S661C53v13Ev");}
void  S661C5 ::v14(){vfunc_called(this, "_ZN6S661C53v14Ev");}
void  S661C5 ::v15(){vfunc_called(this, "_ZN6S661C53v15Ev");}
void  S661C5 ::v16(){vfunc_called(this, "_ZN6S661C53v16Ev");}
void  S661C5 ::v17(){vfunc_called(this, "_ZN6S661C53v17Ev");}
void  S661C5 ::v18(){vfunc_called(this, "_ZN6S661C53v18Ev");}
void  S661C5 ::v19(){vfunc_called(this, "_ZN6S661C53v19Ev");}
void  S661C5 ::v20(){vfunc_called(this, "_ZN6S661C53v20Ev");}
void  S661C5 ::v21(){vfunc_called(this, "_ZN6S661C53v21Ev");}
void  S661C5 ::v22(){vfunc_called(this, "_ZN6S661C53v22Ev");}
void  S661C5 ::v23(){vfunc_called(this, "_ZN6S661C53v23Ev");}
void  S661C5 ::v24(){vfunc_called(this, "_ZN6S661C53v24Ev");}
void  S661C5 ::v25(){vfunc_called(this, "_ZN6S661C53v25Ev");}
void  S661C5 ::v26(){vfunc_called(this, "_ZN6S661C53v26Ev");}
void  S661C5 ::v27(){vfunc_called(this, "_ZN6S661C53v27Ev");}
void  S661C5 ::v28(){vfunc_called(this, "_ZN6S661C53v28Ev");}
void  S661C5 ::v29(){vfunc_called(this, "_ZN6S661C53v29Ev");}
void  S661C5 ::v30(){vfunc_called(this, "_ZN6S661C53v30Ev");}
void  S661C5 ::v31(){vfunc_called(this, "_ZN6S661C53v31Ev");}
void  S661C5 ::v32(){vfunc_called(this, "_ZN6S661C53v32Ev");}
void  S661C5 ::v33(){vfunc_called(this, "_ZN6S661C53v33Ev");}
void  S661C5 ::v34(){vfunc_called(this, "_ZN6S661C53v34Ev");}
void  S661C5 ::v35(){vfunc_called(this, "_ZN6S661C53v35Ev");}
void  S661C5 ::v36(){vfunc_called(this, "_ZN6S661C53v36Ev");}
void  S661C5 ::v37(){vfunc_called(this, "_ZN6S661C53v37Ev");}
void  S661C5 ::v38(){vfunc_called(this, "_ZN6S661C53v38Ev");}
void  S661C5 ::v39(){vfunc_called(this, "_ZN6S661C53v39Ev");}
void  S661C5 ::v40(){vfunc_called(this, "_ZN6S661C53v40Ev");}
void  S661C5 ::v41(){vfunc_called(this, "_ZN6S661C53v41Ev");}
void  S661C5 ::v42(){vfunc_called(this, "_ZN6S661C53v42Ev");}
void  S661C5 ::v43(){vfunc_called(this, "_ZN6S661C53v43Ev");}
void  S661C5 ::v44(){vfunc_called(this, "_ZN6S661C53v44Ev");}
void  S661C5 ::v45(){vfunc_called(this, "_ZN6S661C53v45Ev");}
void  S661C5 ::v46(){vfunc_called(this, "_ZN6S661C53v46Ev");}
void  S661C5 ::v47(){vfunc_called(this, "_ZN6S661C53v47Ev");}
void  S661C5 ::v48(){vfunc_called(this, "_ZN6S661C53v48Ev");}
void  S661C5 ::v49(){vfunc_called(this, "_ZN6S661C53v49Ev");}
void  S661C5 ::v50(){vfunc_called(this, "_ZN6S661C53v50Ev");}
void  S661C5 ::v51(){vfunc_called(this, "_ZN6S661C53v51Ev");}
void  S661C5 ::v52(){vfunc_called(this, "_ZN6S661C53v52Ev");}
void  S661C5 ::v53(){vfunc_called(this, "_ZN6S661C53v53Ev");}
void  S661C5 ::v54(){vfunc_called(this, "_ZN6S661C53v54Ev");}
void  S661C5 ::v55(){vfunc_called(this, "_ZN6S661C53v55Ev");}
void  S661C5 ::v56(){vfunc_called(this, "_ZN6S661C53v56Ev");}
void  S661C5 ::v57(){vfunc_called(this, "_ZN6S661C53v57Ev");}
void  S661C5 ::v58(){vfunc_called(this, "_ZN6S661C53v58Ev");}
void  S661C5 ::v59(){vfunc_called(this, "_ZN6S661C53v59Ev");}
void  S661C5 ::v60(){vfunc_called(this, "_ZN6S661C53v60Ev");}
void  S661C5 ::v61(){vfunc_called(this, "_ZN6S661C53v61Ev");}
void  S661C5 ::v62(){vfunc_called(this, "_ZN6S661C53v62Ev");}
void  S661C5 ::v63(){vfunc_called(this, "_ZN6S661C53v63Ev");}
void  S661C5 ::v64(){vfunc_called(this, "_ZN6S661C53v64Ev");}
void  S661C5 ::v65(){vfunc_called(this, "_ZN6S661C53v65Ev");}
void  S661C5 ::v66(){vfunc_called(this, "_ZN6S661C53v66Ev");}
void  S661C5 ::v67(){vfunc_called(this, "_ZN6S661C53v67Ev");}
void  S661C5 ::v68(){vfunc_called(this, "_ZN6S661C53v68Ev");}
void  S661C5 ::v69(){vfunc_called(this, "_ZN6S661C53v69Ev");}
S661C5 ::S661C5(){ note_ctor("S661C5", this);} // tgen

static void Test_S661C5()
{
  extern Class_Descriptor cd_S661C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S661C5, buf);
    S661C5 *dp, &lv = *(dp=new (buf) S661C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S661C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S661C5)");
    check_field_offset(lv, s661c5f0, ABISELECT(8,4), "S661C5.s661c5f0");
    check_field_offset(lv, s661c5f1, ABISELECT(16,8), "S661C5.s661c5f1");
    check_field_offset(lv, s661c5f2, ABISELECT(24,16), "S661C5.s661c5f2");
    check_field_offset(lv, s661c5f3, ABISELECT(56,32), "S661C5.s661c5f3");
    check_field_offset(lv, s661c5f4, ABISELECT(64,40), "S661C5.s661c5f4");
    check_field_offset(lv, s661c5f5, ABISELECT(72,44), "S661C5.s661c5f5");
    check_field_offset(lv, s661c5f6, ABISELECT(80,52), "S661C5.s661c5f6");
    test_class_info(&lv, &cd_S661C5);
    dp->~S661C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS661C5(Test_S661C5, "S661C5", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN6S661C5C1Ev();
extern void _ZN6S661C5D1Ev();
Name_Map name_map_S661C5[] = {
  NSPAIR(_ZN6S661C5C1Ev),
  NSPAIR(_ZN6S661C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI6S661C5[];
extern void _ZN6S661C5D1Ev();
extern void _ZN6S661C5D0Ev();
extern void _ZN6S661C52v6Ev();
extern void _ZN6S661C52v7Ev();
extern void _ZN6S661C52v8Ev();
extern void _ZN6S661C52v9Ev();
extern void _ZN6S661C53v10Ev();
extern void _ZN6S661C53v11Ev();
extern void _ZN6S661C53v12Ev();
extern void _ZN6S661C53v13Ev();
extern void _ZN6S661C53v14Ev();
extern void _ZN6S661C53v15Ev();
extern void _ZN6S661C53v16Ev();
extern void _ZN6S661C53v17Ev();
extern void _ZN6S661C53v18Ev();
extern void _ZN6S661C53v19Ev();
extern void _ZN6S661C53v20Ev();
extern void _ZN6S661C53v21Ev();
extern void _ZN6S661C53v22Ev();
extern void _ZN6S661C53v23Ev();
extern void _ZN6S661C53v24Ev();
extern void _ZN6S661C53v25Ev();
extern void _ZN6S661C53v26Ev();
extern void _ZN6S661C53v27Ev();
extern void _ZN6S661C53v28Ev();
extern void _ZN6S661C53v29Ev();
extern void _ZN6S661C53v30Ev();
extern void _ZN6S661C53v31Ev();
extern void _ZN6S661C53v32Ev();
extern void _ZN6S661C53v33Ev();
extern void _ZN6S661C53v34Ev();
extern void _ZN6S661C53v35Ev();
extern void _ZN6S661C53v36Ev();
extern void _ZN6S661C53v37Ev();
extern void _ZN6S661C53v38Ev();
extern void _ZN6S661C53v39Ev();
extern void _ZN6S661C53v40Ev();
extern void _ZN6S661C53v41Ev();
extern void _ZN6S661C53v42Ev();
extern void _ZN6S661C53v43Ev();
extern void _ZN6S661C53v44Ev();
extern void _ZN6S661C53v45Ev();
extern void _ZN6S661C53v46Ev();
extern void _ZN6S661C53v47Ev();
extern void _ZN6S661C53v48Ev();
extern void _ZN6S661C53v49Ev();
extern void _ZN6S661C53v50Ev();
extern void _ZN6S661C53v51Ev();
extern void _ZN6S661C53v52Ev();
extern void _ZN6S661C53v53Ev();
extern void _ZN6S661C53v54Ev();
extern void _ZN6S661C53v55Ev();
extern void _ZN6S661C53v56Ev();
extern void _ZN6S661C53v57Ev();
extern void _ZN6S661C53v58Ev();
extern void _ZN6S661C53v59Ev();
extern void _ZN6S661C53v60Ev();
extern void _ZN6S661C53v61Ev();
extern void _ZN6S661C53v62Ev();
extern void _ZN6S661C53v63Ev();
extern void _ZN6S661C53v64Ev();
extern void _ZN6S661C53v65Ev();
extern void _ZN6S661C53v66Ev();
extern void _ZN6S661C53v67Ev();
extern void _ZN6S661C53v68Ev();
extern void _ZN6S661C53v69Ev();
static  VTBL_ENTRY vtc_S661C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S661C5[0]),
  (VTBL_ENTRY)&_ZN6S661C5D1Ev,
  (VTBL_ENTRY)&_ZN6S661C5D0Ev,
  (VTBL_ENTRY)&_ZN6S661C52v6Ev,
  (VTBL_ENTRY)&_ZN6S661C52v7Ev,
  (VTBL_ENTRY)&_ZN6S661C52v8Ev,
  (VTBL_ENTRY)&_ZN6S661C52v9Ev,
  (VTBL_ENTRY)&_ZN6S661C53v10Ev,
  (VTBL_ENTRY)&_ZN6S661C53v11Ev,
  (VTBL_ENTRY)&_ZN6S661C53v12Ev,
  (VTBL_ENTRY)&_ZN6S661C53v13Ev,
  (VTBL_ENTRY)&_ZN6S661C53v14Ev,
  (VTBL_ENTRY)&_ZN6S661C53v15Ev,
  (VTBL_ENTRY)&_ZN6S661C53v16Ev,
  (VTBL_ENTRY)&_ZN6S661C53v17Ev,
  (VTBL_ENTRY)&_ZN6S661C53v18Ev,
  (VTBL_ENTRY)&_ZN6S661C53v19Ev,
  (VTBL_ENTRY)&_ZN6S661C53v20Ev,
  (VTBL_ENTRY)&_ZN6S661C53v21Ev,
  (VTBL_ENTRY)&_ZN6S661C53v22Ev,
  (VTBL_ENTRY)&_ZN6S661C53v23Ev,
  (VTBL_ENTRY)&_ZN6S661C53v24Ev,
  (VTBL_ENTRY)&_ZN6S661C53v25Ev,
  (VTBL_ENTRY)&_ZN6S661C53v26Ev,
  (VTBL_ENTRY)&_ZN6S661C53v27Ev,
  (VTBL_ENTRY)&_ZN6S661C53v28Ev,
  (VTBL_ENTRY)&_ZN6S661C53v29Ev,
  (VTBL_ENTRY)&_ZN6S661C53v30Ev,
  (VTBL_ENTRY)&_ZN6S661C53v31Ev,
  (VTBL_ENTRY)&_ZN6S661C53v32Ev,
  (VTBL_ENTRY)&_ZN6S661C53v33Ev,
  (VTBL_ENTRY)&_ZN6S661C53v34Ev,
  (VTBL_ENTRY)&_ZN6S661C53v35Ev,
  (VTBL_ENTRY)&_ZN6S661C53v36Ev,
  (VTBL_ENTRY)&_ZN6S661C53v37Ev,
  (VTBL_ENTRY)&_ZN6S661C53v38Ev,
  (VTBL_ENTRY)&_ZN6S661C53v39Ev,
  (VTBL_ENTRY)&_ZN6S661C53v40Ev,
  (VTBL_ENTRY)&_ZN6S661C53v41Ev,
  (VTBL_ENTRY)&_ZN6S661C53v42Ev,
  (VTBL_ENTRY)&_ZN6S661C53v43Ev,
  (VTBL_ENTRY)&_ZN6S661C53v44Ev,
  (VTBL_ENTRY)&_ZN6S661C53v45Ev,
  (VTBL_ENTRY)&_ZN6S661C53v46Ev,
  (VTBL_ENTRY)&_ZN6S661C53v47Ev,
  (VTBL_ENTRY)&_ZN6S661C53v48Ev,
  (VTBL_ENTRY)&_ZN6S661C53v49Ev,
  (VTBL_ENTRY)&_ZN6S661C53v50Ev,
  (VTBL_ENTRY)&_ZN6S661C53v51Ev,
  (VTBL_ENTRY)&_ZN6S661C53v52Ev,
  (VTBL_ENTRY)&_ZN6S661C53v53Ev,
  (VTBL_ENTRY)&_ZN6S661C53v54Ev,
  (VTBL_ENTRY)&_ZN6S661C53v55Ev,
  (VTBL_ENTRY)&_ZN6S661C53v56Ev,
  (VTBL_ENTRY)&_ZN6S661C53v57Ev,
  (VTBL_ENTRY)&_ZN6S661C53v58Ev,
  (VTBL_ENTRY)&_ZN6S661C53v59Ev,
  (VTBL_ENTRY)&_ZN6S661C53v60Ev,
  (VTBL_ENTRY)&_ZN6S661C53v61Ev,
  (VTBL_ENTRY)&_ZN6S661C53v62Ev,
  (VTBL_ENTRY)&_ZN6S661C53v63Ev,
  (VTBL_ENTRY)&_ZN6S661C53v64Ev,
  (VTBL_ENTRY)&_ZN6S661C53v65Ev,
  (VTBL_ENTRY)&_ZN6S661C53v66Ev,
  (VTBL_ENTRY)&_ZN6S661C53v67Ev,
  (VTBL_ENTRY)&_ZN6S661C53v68Ev,
  (VTBL_ENTRY)&_ZN6S661C53v69Ev,
};
extern VTBL_ENTRY _ZTI6S661C5[];
extern  VTBL_ENTRY _ZTV6S661C5[];
Class_Descriptor cd_S661C5 = {  "S661C5", // class name
  0,0,//no base classes
  &(vtc_S661C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI6S661C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV6S661C5),68, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S661C4  : S661C5 {
  void *s661c4f0;
  ::S235C7_nt s661c4f1;
  virtual  ~S661C4(); // _ZN6S661C4D1Ev
  virtual void  v70(); // _ZN6S661C43v70Ev
  virtual void  v71(); // _ZN6S661C43v71Ev
  virtual void  v72(); // _ZN6S661C43v72Ev
  virtual void  v73(); // _ZN6S661C43v73Ev
  virtual void  v74(); // _ZN6S661C43v74Ev
  S661C4(); // tgen
};
//SIG(-1 S661C4) C1{ BC2{ vd v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 Fi FL Fp[4] Fi[2] Fp FC3{ m Fi[2]} Fp[2]} vd v1 v2 v3 v4 v5 Fp FC3}


 S661C4 ::~S661C4(){ note_dtor("S661C4", this);}
void  S661C4 ::v70(){vfunc_called(this, "_ZN6S661C43v70Ev");}
void  S661C4 ::v71(){vfunc_called(this, "_ZN6S661C43v71Ev");}
void  S661C4 ::v72(){vfunc_called(this, "_ZN6S661C43v72Ev");}
void  S661C4 ::v73(){vfunc_called(this, "_ZN6S661C43v73Ev");}
void  S661C4 ::v74(){vfunc_called(this, "_ZN6S661C43v74Ev");}
S661C4 ::S661C4(){ note_ctor("S661C4", this);} // tgen

static void Test_S661C4()
{
  extern Class_Descriptor cd_S661C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(15,19)];
    init_test(&cd_S661C4, buf);
    S661C4 *dp, &lv = *(dp=new (buf) S661C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(112,72), "sizeof(S661C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S661C4)");
    check_base_class_offset(lv, (S661C5*), 0, "S661C4");
    check_field_offset(lv, s661c4f0, ABISELECT(96,60), "S661C4.s661c4f0");
    check_field_offset(lv, s661c4f1, ABISELECT(104,64), "S661C4.s661c4f1");
    test_class_info(&lv, &cd_S661C4);
    dp->~S661C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS661C4(Test_S661C4, "S661C4", ABISELECT(112,72));

#else // __cplusplus

extern void _ZN6S661C4C1Ev();
extern void _ZN6S661C4D1Ev();
Name_Map name_map_S661C4[] = {
  NSPAIR(_ZN6S661C4C1Ev),
  NSPAIR(_ZN6S661C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S661C5;
extern VTBL_ENTRY _ZTI6S661C5[];
extern  VTBL_ENTRY _ZTV6S661C5[];
static Base_Class bases_S661C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S661C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S661C4[];
extern void _ZN6S661C4D1Ev();
extern void _ZN6S661C4D0Ev();
extern void _ZN6S661C52v6Ev();
extern void _ZN6S661C52v7Ev();
extern void _ZN6S661C52v8Ev();
extern void _ZN6S661C52v9Ev();
extern void _ZN6S661C53v10Ev();
extern void _ZN6S661C53v11Ev();
extern void _ZN6S661C53v12Ev();
extern void _ZN6S661C53v13Ev();
extern void _ZN6S661C53v14Ev();
extern void _ZN6S661C53v15Ev();
extern void _ZN6S661C53v16Ev();
extern void _ZN6S661C53v17Ev();
extern void _ZN6S661C53v18Ev();
extern void _ZN6S661C53v19Ev();
extern void _ZN6S661C53v20Ev();
extern void _ZN6S661C53v21Ev();
extern void _ZN6S661C53v22Ev();
extern void _ZN6S661C53v23Ev();
extern void _ZN6S661C53v24Ev();
extern void _ZN6S661C53v25Ev();
extern void _ZN6S661C53v26Ev();
extern void _ZN6S661C53v27Ev();
extern void _ZN6S661C53v28Ev();
extern void _ZN6S661C53v29Ev();
extern void _ZN6S661C53v30Ev();
extern void _ZN6S661C53v31Ev();
extern void _ZN6S661C53v32Ev();
extern void _ZN6S661C53v33Ev();
extern void _ZN6S661C53v34Ev();
extern void _ZN6S661C53v35Ev();
extern void _ZN6S661C53v36Ev();
extern void _ZN6S661C53v37Ev();
extern void _ZN6S661C53v38Ev();
extern void _ZN6S661C53v39Ev();
extern void _ZN6S661C53v40Ev();
extern void _ZN6S661C53v41Ev();
extern void _ZN6S661C53v42Ev();
extern void _ZN6S661C53v43Ev();
extern void _ZN6S661C53v44Ev();
extern void _ZN6S661C53v45Ev();
extern void _ZN6S661C53v46Ev();
extern void _ZN6S661C53v47Ev();
extern void _ZN6S661C53v48Ev();
extern void _ZN6S661C53v49Ev();
extern void _ZN6S661C53v50Ev();
extern void _ZN6S661C53v51Ev();
extern void _ZN6S661C53v52Ev();
extern void _ZN6S661C53v53Ev();
extern void _ZN6S661C53v54Ev();
extern void _ZN6S661C53v55Ev();
extern void _ZN6S661C53v56Ev();
extern void _ZN6S661C53v57Ev();
extern void _ZN6S661C53v58Ev();
extern void _ZN6S661C53v59Ev();
extern void _ZN6S661C53v60Ev();
extern void _ZN6S661C53v61Ev();
extern void _ZN6S661C53v62Ev();
extern void _ZN6S661C53v63Ev();
extern void _ZN6S661C53v64Ev();
extern void _ZN6S661C53v65Ev();
extern void _ZN6S661C53v66Ev();
extern void _ZN6S661C53v67Ev();
extern void _ZN6S661C53v68Ev();
extern void _ZN6S661C53v69Ev();
extern void _ZN6S661C43v70Ev();
extern void _ZN6S661C43v71Ev();
extern void _ZN6S661C43v72Ev();
extern void _ZN6S661C43v73Ev();
extern void _ZN6S661C43v74Ev();
static  VTBL_ENTRY vtc_S661C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S661C4[0]),
  (VTBL_ENTRY)&_ZN6S661C4D1Ev,
  (VTBL_ENTRY)&_ZN6S661C4D0Ev,
  (VTBL_ENTRY)&_ZN6S661C52v6Ev,
  (VTBL_ENTRY)&_ZN6S661C52v7Ev,
  (VTBL_ENTRY)&_ZN6S661C52v8Ev,
  (VTBL_ENTRY)&_ZN6S661C52v9Ev,
  (VTBL_ENTRY)&_ZN6S661C53v10Ev,
  (VTBL_ENTRY)&_ZN6S661C53v11Ev,
  (VTBL_ENTRY)&_ZN6S661C53v12Ev,
  (VTBL_ENTRY)&_ZN6S661C53v13Ev,
  (VTBL_ENTRY)&_ZN6S661C53v14Ev,
  (VTBL_ENTRY)&_ZN6S661C53v15Ev,
  (VTBL_ENTRY)&_ZN6S661C53v16Ev,
  (VTBL_ENTRY)&_ZN6S661C53v17Ev,
  (VTBL_ENTRY)&_ZN6S661C53v18Ev,
  (VTBL_ENTRY)&_ZN6S661C53v19Ev,
  (VTBL_ENTRY)&_ZN6S661C53v20Ev,
  (VTBL_ENTRY)&_ZN6S661C53v21Ev,
  (VTBL_ENTRY)&_ZN6S661C53v22Ev,
  (VTBL_ENTRY)&_ZN6S661C53v23Ev,
  (VTBL_ENTRY)&_ZN6S661C53v24Ev,
  (VTBL_ENTRY)&_ZN6S661C53v25Ev,
  (VTBL_ENTRY)&_ZN6S661C53v26Ev,
  (VTBL_ENTRY)&_ZN6S661C53v27Ev,
  (VTBL_ENTRY)&_ZN6S661C53v28Ev,
  (VTBL_ENTRY)&_ZN6S661C53v29Ev,
  (VTBL_ENTRY)&_ZN6S661C53v30Ev,
  (VTBL_ENTRY)&_ZN6S661C53v31Ev,
  (VTBL_ENTRY)&_ZN6S661C53v32Ev,
  (VTBL_ENTRY)&_ZN6S661C53v33Ev,
  (VTBL_ENTRY)&_ZN6S661C53v34Ev,
  (VTBL_ENTRY)&_ZN6S661C53v35Ev,
  (VTBL_ENTRY)&_ZN6S661C53v36Ev,
  (VTBL_ENTRY)&_ZN6S661C53v37Ev,
  (VTBL_ENTRY)&_ZN6S661C53v38Ev,
  (VTBL_ENTRY)&_ZN6S661C53v39Ev,
  (VTBL_ENTRY)&_ZN6S661C53v40Ev,
  (VTBL_ENTRY)&_ZN6S661C53v41Ev,
  (VTBL_ENTRY)&_ZN6S661C53v42Ev,
  (VTBL_ENTRY)&_ZN6S661C53v43Ev,
  (VTBL_ENTRY)&_ZN6S661C53v44Ev,
  (VTBL_ENTRY)&_ZN6S661C53v45Ev,
  (VTBL_ENTRY)&_ZN6S661C53v46Ev,
  (VTBL_ENTRY)&_ZN6S661C53v47Ev,
  (VTBL_ENTRY)&_ZN6S661C53v48Ev,
  (VTBL_ENTRY)&_ZN6S661C53v49Ev,
  (VTBL_ENTRY)&_ZN6S661C53v50Ev,
  (VTBL_ENTRY)&_ZN6S661C53v51Ev,
  (VTBL_ENTRY)&_ZN6S661C53v52Ev,
  (VTBL_ENTRY)&_ZN6S661C53v53Ev,
  (VTBL_ENTRY)&_ZN6S661C53v54Ev,
  (VTBL_ENTRY)&_ZN6S661C53v55Ev,
  (VTBL_ENTRY)&_ZN6S661C53v56Ev,
  (VTBL_ENTRY)&_ZN6S661C53v57Ev,
  (VTBL_ENTRY)&_ZN6S661C53v58Ev,
  (VTBL_ENTRY)&_ZN6S661C53v59Ev,
  (VTBL_ENTRY)&_ZN6S661C53v60Ev,
  (VTBL_ENTRY)&_ZN6S661C53v61Ev,
  (VTBL_ENTRY)&_ZN6S661C53v62Ev,
  (VTBL_ENTRY)&_ZN6S661C53v63Ev,
  (VTBL_ENTRY)&_ZN6S661C53v64Ev,
  (VTBL_ENTRY)&_ZN6S661C53v65Ev,
  (VTBL_ENTRY)&_ZN6S661C53v66Ev,
  (VTBL_ENTRY)&_ZN6S661C53v67Ev,
  (VTBL_ENTRY)&_ZN6S661C53v68Ev,
  (VTBL_ENTRY)&_ZN6S661C53v69Ev,
  (VTBL_ENTRY)&_ZN6S661C43v70Ev,
  (VTBL_ENTRY)&_ZN6S661C43v71Ev,
  (VTBL_ENTRY)&_ZN6S661C43v72Ev,
  (VTBL_ENTRY)&_ZN6S661C43v73Ev,
  (VTBL_ENTRY)&_ZN6S661C43v74Ev,
};
extern VTBL_ENTRY _ZTI6S661C4[];
extern  VTBL_ENTRY _ZTV6S661C4[];
Class_Descriptor cd_S661C4 = {  "S661C4", // class name
  bases_S661C4, 1,
  &(vtc_S661C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(112,72), // object size
  NSPAIRA(_ZTI6S661C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S661C4),73, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S661C3  : S661C4 {
  void *s661c3f0[2];
  unsigned int s661c3f1:1;
  unsigned int s661c3f2:1;
  unsigned int s661c3f3:1;
  unsigned int s661c3f4:1;
  char s661c3f5;
  virtual  ~S661C3(); // _ZN6S661C3D1Ev
  virtual void  v75(); // _ZN6S661C33v75Ev
  virtual void  v76(); // _ZN6S661C33v76Ev
  virtual void  v77(); // _ZN6S661C33v77Ev
  virtual void  v78(); // _ZN6S661C33v78Ev
  virtual void  v79(); // _ZN6S661C33v79Ev
  virtual void  v80(); // _ZN6S661C33v80Ev
  virtual void  v81(); // _ZN6S661C33v81Ev
  virtual void  v82(); // _ZN6S661C33v82Ev
  virtual void  v83(); // _ZN6S661C33v83Ev
  virtual void  v84(); // _ZN6S661C33v84Ev
  virtual void  v85(); // _ZN6S661C33v85Ev
  virtual void  v86(); // _ZN6S661C33v86Ev
  virtual void  v87(); // _ZN6S661C33v87Ev
  virtual void  v88(); // _ZN6S661C33v88Ev
  virtual void  v89(); // _ZN6S661C33v89Ev
  virtual void  v90(); // _ZN6S661C33v90Ev
  virtual void  v91(); // _ZN6S661C33v91Ev
  virtual void  v92(); // _ZN6S661C33v92Ev
  virtual void  v93(); // _ZN6S661C33v93Ev
  virtual void  v94(); // _ZN6S661C33v94Ev
  virtual void  v95(); // _ZN6S661C33v95Ev
  virtual void  v96(); // _ZN6S661C33v96Ev
  S661C3(); // tgen
};
//SIG(-1 S661C3) C1{ BC2{ BC3{ vd v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 Fi FL Fp[4] Fi[2] Fp FC4{ m Fi[2]} Fp[2]} vd v87 v88 v89 v90 v91 Fp FC4} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 Fp[2] Fi:1 Fi:1 Fi:1 Fi:1 Fc}


 S661C3 ::~S661C3(){ note_dtor("S661C3", this);}
void  S661C3 ::v75(){vfunc_called(this, "_ZN6S661C33v75Ev");}
void  S661C3 ::v76(){vfunc_called(this, "_ZN6S661C33v76Ev");}
void  S661C3 ::v77(){vfunc_called(this, "_ZN6S661C33v77Ev");}
void  S661C3 ::v78(){vfunc_called(this, "_ZN6S661C33v78Ev");}
void  S661C3 ::v79(){vfunc_called(this, "_ZN6S661C33v79Ev");}
void  S661C3 ::v80(){vfunc_called(this, "_ZN6S661C33v80Ev");}
void  S661C3 ::v81(){vfunc_called(this, "_ZN6S661C33v81Ev");}
void  S661C3 ::v82(){vfunc_called(this, "_ZN6S661C33v82Ev");}
void  S661C3 ::v83(){vfunc_called(this, "_ZN6S661C33v83Ev");}
void  S661C3 ::v84(){vfunc_called(this, "_ZN6S661C33v84Ev");}
void  S661C3 ::v85(){vfunc_called(this, "_ZN6S661C33v85Ev");}
void  S661C3 ::v86(){vfunc_called(this, "_ZN6S661C33v86Ev");}
void  S661C3 ::v87(){vfunc_called(this, "_ZN6S661C33v87Ev");}
void  S661C3 ::v88(){vfunc_called(this, "_ZN6S661C33v88Ev");}
void  S661C3 ::v89(){vfunc_called(this, "_ZN6S661C33v89Ev");}
void  S661C3 ::v90(){vfunc_called(this, "_ZN6S661C33v90Ev");}
void  S661C3 ::v91(){vfunc_called(this, "_ZN6S661C33v91Ev");}
void  S661C3 ::v92(){vfunc_called(this, "_ZN6S661C33v92Ev");}
void  S661C3 ::v93(){vfunc_called(this, "_ZN6S661C33v93Ev");}
void  S661C3 ::v94(){vfunc_called(this, "_ZN6S661C33v94Ev");}
void  S661C3 ::v95(){vfunc_called(this, "_ZN6S661C33v95Ev");}
void  S661C3 ::v96(){vfunc_called(this, "_ZN6S661C33v96Ev");}
S661C3 ::S661C3(){ note_ctor("S661C3", this);} // tgen

static void Test_S661C3()
{
  extern Class_Descriptor cd_S661C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(18,22)];
    init_test(&cd_S661C3, buf);
    S661C3 *dp, &lv = *(dp=new (buf) S661C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(136,84), "sizeof(S661C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S661C3)");
    check_base_class_offset(lv, (S661C5*)(S661C4*), 0, "S661C3");
    check_base_class_offset(lv, (S661C4*), 0, "S661C3");
    check_field_offset(lv, s661c3f0, ABISELECT(112,72), "S661C3.s661c3f0");
    set_bf_and_test(lv, s661c3f1, ABISELECT(128,80), 0, 1, 1, "S661C3");
    set_bf_and_test(lv, s661c3f2, ABISELECT(128,80), 1, 1, 1, "S661C3");
    set_bf_and_test(lv, s661c3f3, ABISELECT(128,80), 2, 1, 1, "S661C3");
    set_bf_and_test(lv, s661c3f4, ABISELECT(128,80), 3, 1, 1, "S661C3");
    check_field_offset(lv, s661c3f5, ABISELECT(129,81), "S661C3.s661c3f5");
    test_class_info(&lv, &cd_S661C3);
    dp->~S661C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS661C3(Test_S661C3, "S661C3", ABISELECT(136,84));

#else // __cplusplus

extern void _ZN6S661C3C1Ev();
extern void _ZN6S661C3D1Ev();
Name_Map name_map_S661C3[] = {
  NSPAIR(_ZN6S661C3C1Ev),
  NSPAIR(_ZN6S661C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S661C5;
extern VTBL_ENTRY _ZTI6S661C5[];
extern  VTBL_ENTRY _ZTV6S661C5[];
extern Class_Descriptor cd_S661C4;
extern VTBL_ENTRY _ZTI6S661C4[];
extern  VTBL_ENTRY _ZTV6S661C4[];
static Base_Class bases_S661C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S661C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S661C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S661C3[];
extern void _ZN6S661C3D1Ev();
extern void _ZN6S661C3D0Ev();
extern void _ZN6S661C52v6Ev();
extern void _ZN6S661C52v7Ev();
extern void _ZN6S661C52v8Ev();
extern void _ZN6S661C52v9Ev();
extern void _ZN6S661C53v10Ev();
extern void _ZN6S661C53v11Ev();
extern void _ZN6S661C53v12Ev();
extern void _ZN6S661C53v13Ev();
extern void _ZN6S661C53v14Ev();
extern void _ZN6S661C53v15Ev();
extern void _ZN6S661C53v16Ev();
extern void _ZN6S661C53v17Ev();
extern void _ZN6S661C53v18Ev();
extern void _ZN6S661C53v19Ev();
extern void _ZN6S661C53v20Ev();
extern void _ZN6S661C53v21Ev();
extern void _ZN6S661C53v22Ev();
extern void _ZN6S661C53v23Ev();
extern void _ZN6S661C53v24Ev();
extern void _ZN6S661C53v25Ev();
extern void _ZN6S661C53v26Ev();
extern void _ZN6S661C53v27Ev();
extern void _ZN6S661C53v28Ev();
extern void _ZN6S661C53v29Ev();
extern void _ZN6S661C53v30Ev();
extern void _ZN6S661C53v31Ev();
extern void _ZN6S661C53v32Ev();
extern void _ZN6S661C53v33Ev();
extern void _ZN6S661C53v34Ev();
extern void _ZN6S661C53v35Ev();
extern void _ZN6S661C53v36Ev();
extern void _ZN6S661C53v37Ev();
extern void _ZN6S661C53v38Ev();
extern void _ZN6S661C53v39Ev();
extern void _ZN6S661C53v40Ev();
extern void _ZN6S661C53v41Ev();
extern void _ZN6S661C53v42Ev();
extern void _ZN6S661C53v43Ev();
extern void _ZN6S661C53v44Ev();
extern void _ZN6S661C53v45Ev();
extern void _ZN6S661C53v46Ev();
extern void _ZN6S661C53v47Ev();
extern void _ZN6S661C53v48Ev();
extern void _ZN6S661C53v49Ev();
extern void _ZN6S661C53v50Ev();
extern void _ZN6S661C53v51Ev();
extern void _ZN6S661C53v52Ev();
extern void _ZN6S661C53v53Ev();
extern void _ZN6S661C53v54Ev();
extern void _ZN6S661C53v55Ev();
extern void _ZN6S661C53v56Ev();
extern void _ZN6S661C53v57Ev();
extern void _ZN6S661C53v58Ev();
extern void _ZN6S661C53v59Ev();
extern void _ZN6S661C53v60Ev();
extern void _ZN6S661C53v61Ev();
extern void _ZN6S661C53v62Ev();
extern void _ZN6S661C53v63Ev();
extern void _ZN6S661C53v64Ev();
extern void _ZN6S661C53v65Ev();
extern void _ZN6S661C53v66Ev();
extern void _ZN6S661C53v67Ev();
extern void _ZN6S661C53v68Ev();
extern void _ZN6S661C53v69Ev();
extern void _ZN6S661C43v70Ev();
extern void _ZN6S661C43v71Ev();
extern void _ZN6S661C43v72Ev();
extern void _ZN6S661C43v73Ev();
extern void _ZN6S661C43v74Ev();
extern void _ZN6S661C33v75Ev();
extern void _ZN6S661C33v76Ev();
extern void _ZN6S661C33v77Ev();
extern void _ZN6S661C33v78Ev();
extern void _ZN6S661C33v79Ev();
extern void _ZN6S661C33v80Ev();
extern void _ZN6S661C33v81Ev();
extern void _ZN6S661C33v82Ev();
extern void _ZN6S661C33v83Ev();
extern void _ZN6S661C33v84Ev();
extern void _ZN6S661C33v85Ev();
extern void _ZN6S661C33v86Ev();
extern void _ZN6S661C33v87Ev();
extern void _ZN6S661C33v88Ev();
extern void _ZN6S661C33v89Ev();
extern void _ZN6S661C33v90Ev();
extern void _ZN6S661C33v91Ev();
extern void _ZN6S661C33v92Ev();
extern void _ZN6S661C33v93Ev();
extern void _ZN6S661C33v94Ev();
extern void _ZN6S661C33v95Ev();
extern void _ZN6S661C33v96Ev();
static  VTBL_ENTRY vtc_S661C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S661C3[0]),
  (VTBL_ENTRY)&_ZN6S661C3D1Ev,
  (VTBL_ENTRY)&_ZN6S661C3D0Ev,
  (VTBL_ENTRY)&_ZN6S661C52v6Ev,
  (VTBL_ENTRY)&_ZN6S661C52v7Ev,
  (VTBL_ENTRY)&_ZN6S661C52v8Ev,
  (VTBL_ENTRY)&_ZN6S661C52v9Ev,
  (VTBL_ENTRY)&_ZN6S661C53v10Ev,
  (VTBL_ENTRY)&_ZN6S661C53v11Ev,
  (VTBL_ENTRY)&_ZN6S661C53v12Ev,
  (VTBL_ENTRY)&_ZN6S661C53v13Ev,
  (VTBL_ENTRY)&_ZN6S661C53v14Ev,
  (VTBL_ENTRY)&_ZN6S661C53v15Ev,
  (VTBL_ENTRY)&_ZN6S661C53v16Ev,
  (VTBL_ENTRY)&_ZN6S661C53v17Ev,
  (VTBL_ENTRY)&_ZN6S661C53v18Ev,
  (VTBL_ENTRY)&_ZN6S661C53v19Ev,
  (VTBL_ENTRY)&_ZN6S661C53v20Ev,
  (VTBL_ENTRY)&_ZN6S661C53v21Ev,
  (VTBL_ENTRY)&_ZN6S661C53v22Ev,
  (VTBL_ENTRY)&_ZN6S661C53v23Ev,
  (VTBL_ENTRY)&_ZN6S661C53v24Ev,
  (VTBL_ENTRY)&_ZN6S661C53v25Ev,
  (VTBL_ENTRY)&_ZN6S661C53v26Ev,
  (VTBL_ENTRY)&_ZN6S661C53v27Ev,
  (VTBL_ENTRY)&_ZN6S661C53v28Ev,
  (VTBL_ENTRY)&_ZN6S661C53v29Ev,
  (VTBL_ENTRY)&_ZN6S661C53v30Ev,
  (VTBL_ENTRY)&_ZN6S661C53v31Ev,
  (VTBL_ENTRY)&_ZN6S661C53v32Ev,
  (VTBL_ENTRY)&_ZN6S661C53v33Ev,
  (VTBL_ENTRY)&_ZN6S661C53v34Ev,
  (VTBL_ENTRY)&_ZN6S661C53v35Ev,
  (VTBL_ENTRY)&_ZN6S661C53v36Ev,
  (VTBL_ENTRY)&_ZN6S661C53v37Ev,
  (VTBL_ENTRY)&_ZN6S661C53v38Ev,
  (VTBL_ENTRY)&_ZN6S661C53v39Ev,
  (VTBL_ENTRY)&_ZN6S661C53v40Ev,
  (VTBL_ENTRY)&_ZN6S661C53v41Ev,
  (VTBL_ENTRY)&_ZN6S661C53v42Ev,
  (VTBL_ENTRY)&_ZN6S661C53v43Ev,
  (VTBL_ENTRY)&_ZN6S661C53v44Ev,
  (VTBL_ENTRY)&_ZN6S661C53v45Ev,
  (VTBL_ENTRY)&_ZN6S661C53v46Ev,
  (VTBL_ENTRY)&_ZN6S661C53v47Ev,
  (VTBL_ENTRY)&_ZN6S661C53v48Ev,
  (VTBL_ENTRY)&_ZN6S661C53v49Ev,
  (VTBL_ENTRY)&_ZN6S661C53v50Ev,
  (VTBL_ENTRY)&_ZN6S661C53v51Ev,
  (VTBL_ENTRY)&_ZN6S661C53v52Ev,
  (VTBL_ENTRY)&_ZN6S661C53v53Ev,
  (VTBL_ENTRY)&_ZN6S661C53v54Ev,
  (VTBL_ENTRY)&_ZN6S661C53v55Ev,
  (VTBL_ENTRY)&_ZN6S661C53v56Ev,
  (VTBL_ENTRY)&_ZN6S661C53v57Ev,
  (VTBL_ENTRY)&_ZN6S661C53v58Ev,
  (VTBL_ENTRY)&_ZN6S661C53v59Ev,
  (VTBL_ENTRY)&_ZN6S661C53v60Ev,
  (VTBL_ENTRY)&_ZN6S661C53v61Ev,
  (VTBL_ENTRY)&_ZN6S661C53v62Ev,
  (VTBL_ENTRY)&_ZN6S661C53v63Ev,
  (VTBL_ENTRY)&_ZN6S661C53v64Ev,
  (VTBL_ENTRY)&_ZN6S661C53v65Ev,
  (VTBL_ENTRY)&_ZN6S661C53v66Ev,
  (VTBL_ENTRY)&_ZN6S661C53v67Ev,
  (VTBL_ENTRY)&_ZN6S661C53v68Ev,
  (VTBL_ENTRY)&_ZN6S661C53v69Ev,
  (VTBL_ENTRY)&_ZN6S661C43v70Ev,
  (VTBL_ENTRY)&_ZN6S661C43v71Ev,
  (VTBL_ENTRY)&_ZN6S661C43v72Ev,
  (VTBL_ENTRY)&_ZN6S661C43v73Ev,
  (VTBL_ENTRY)&_ZN6S661C43v74Ev,
  (VTBL_ENTRY)&_ZN6S661C33v75Ev,
  (VTBL_ENTRY)&_ZN6S661C33v76Ev,
  (VTBL_ENTRY)&_ZN6S661C33v77Ev,
  (VTBL_ENTRY)&_ZN6S661C33v78Ev,
  (VTBL_ENTRY)&_ZN6S661C33v79Ev,
  (VTBL_ENTRY)&_ZN6S661C33v80Ev,
  (VTBL_ENTRY)&_ZN6S661C33v81Ev,
  (VTBL_ENTRY)&_ZN6S661C33v82Ev,
  (VTBL_ENTRY)&_ZN6S661C33v83Ev,
  (VTBL_ENTRY)&_ZN6S661C33v84Ev,
  (VTBL_ENTRY)&_ZN6S661C33v85Ev,
  (VTBL_ENTRY)&_ZN6S661C33v86Ev,
  (VTBL_ENTRY)&_ZN6S661C33v87Ev,
  (VTBL_ENTRY)&_ZN6S661C33v88Ev,
  (VTBL_ENTRY)&_ZN6S661C33v89Ev,
  (VTBL_ENTRY)&_ZN6S661C33v90Ev,
  (VTBL_ENTRY)&_ZN6S661C33v91Ev,
  (VTBL_ENTRY)&_ZN6S661C33v92Ev,
  (VTBL_ENTRY)&_ZN6S661C33v93Ev,
  (VTBL_ENTRY)&_ZN6S661C33v94Ev,
  (VTBL_ENTRY)&_ZN6S661C33v95Ev,
  (VTBL_ENTRY)&_ZN6S661C33v96Ev,
};
extern VTBL_ENTRY _ZTI6S661C3[];
extern  VTBL_ENTRY _ZTV6S661C3[];
Class_Descriptor cd_S661C3 = {  "S661C3", // class name
  bases_S661C3, 2,
  &(vtc_S661C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(136,84), // object size
  NSPAIRA(_ZTI6S661C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S661C3),95, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S661C2  : S661C3 {
  void *s661c2f0;
  ::S836C39 s661c2f1;
  ::S836C39 s661c2f2;
  ::S285C19 s661c2f3;
  ::S285C19 s661c2f4;
  int s661c2f5;
  ::S836C29 s661c2f6;
  void *s661c2f7;
  unsigned int s661c2f8:1;
  unsigned int s661c2f9:1;
  unsigned int s661c2f10:1;
  unsigned int s661c2f11:1;
  unsigned int s661c2f12:1;
  unsigned int s661c2f13:1;
  unsigned int s661c2f14:1;
  unsigned int s661c2f15:1;
  unsigned int s661c2f16:1;
  unsigned int s661c2f17:1;
  unsigned int s661c2f18:1;
  void *s661c2f19;
  ::S285C17 s661c2f20;
  ::S836C25 s661c2f21;
  unsigned int s661c2f22:1;
  ::S235C17 s661c2f23;
  ::S235C17 s661c2f24;
  ::S235C11_nt s661c2f25;
  ::S235C11_nt s661c2f26;
  char s661c2f27[2];
  ::S235C9_nt s661c2f28;
  int s661c2f29[3];
  char s661c2f30[2];
  int s661c2f31[2];
  virtual  ~S661C2(); // _ZN6S661C2D1Ev
  virtual void  v97(); // _ZN6S661C23v97Ev
  virtual void  v98(); // _ZN6S661C23v98Ev
  virtual void  v99(); // _ZN6S661C23v99Ev
  virtual void  v100(); // _ZN6S661C24v100Ev
  virtual void  v101(); // _ZN6S661C24v101Ev
  virtual void  v102(); // _ZN6S661C24v102Ev
  virtual void  v103(); // _ZN6S661C24v103Ev
  virtual void  v104(); // _ZN6S661C24v104Ev
  virtual void  v105(); // _ZN6S661C24v105Ev
  virtual void  v106(); // _ZN6S661C24v106Ev
  virtual void  v107(); // _ZN6S661C24v107Ev
  virtual void  v108(); // _ZN6S661C24v108Ev
  virtual void  v109(); // _ZN6S661C24v109Ev
  virtual void  v110(); // _ZN6S661C24v110Ev
  virtual void  v111(); // _ZN6S661C24v111Ev
  virtual void  v112(); // _ZN6S661C24v112Ev
  virtual void  v113(); // _ZN6S661C24v113Ev
  virtual void  v114(); // _ZN6S661C24v114Ev
  virtual void  v115(); // _ZN6S661C24v115Ev
  virtual void  v116(); // _ZN6S661C24v116Ev
  virtual void  v117(); // _ZN6S661C24v117Ev
  virtual void  v118(); // _ZN6S661C24v118Ev
  virtual void  v119(); // _ZN6S661C24v119Ev
  virtual void  v120(); // _ZN6S661C24v120Ev
  virtual void  v121(); // _ZN6S661C24v121Ev
  virtual void  v122(); // _ZN6S661C24v122Ev
  virtual void  v123(); // _ZN6S661C24v123Ev
  S661C2(); // tgen
};
//SIG(-1 S661C2) C1{ BC2{ BC3{ BC4{ vd v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 v91 Fi FL Fp[4] Fi[2] Fp FC5{ m Fi[2]} Fp[2]} vd v92 v93 v94 v95 v96 Fp FC5} vd v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 v110 v111 v112 v113 v114 v115 v116 v117 v118 Fp[2] Fi:1 Fi:1 Fi:1 Fi:1 Fc} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 Fp FC6{ m} FC6 FC7{ m Fi[4]} FC7 Fi FC8{ m} Fp Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fp FC9{ BC10{ BC11{ m Fp Fi[2]}}} FC12{ m} Fi:1 FC13{ BC14{ BC11}} FC13 FC15{ BC16{ BC11}} FC15 Fc[2] FC17{ m Fi[4]} Fi[3] Fc[2] Fi[2]}


 S661C2 ::~S661C2(){ note_dtor("S661C2", this);}
void  S661C2 ::v97(){vfunc_called(this, "_ZN6S661C23v97Ev");}
void  S661C2 ::v98(){vfunc_called(this, "_ZN6S661C23v98Ev");}
void  S661C2 ::v99(){vfunc_called(this, "_ZN6S661C23v99Ev");}
void  S661C2 ::v100(){vfunc_called(this, "_ZN6S661C24v100Ev");}
void  S661C2 ::v101(){vfunc_called(this, "_ZN6S661C24v101Ev");}
void  S661C2 ::v102(){vfunc_called(this, "_ZN6S661C24v102Ev");}
void  S661C2 ::v103(){vfunc_called(this, "_ZN6S661C24v103Ev");}
void  S661C2 ::v104(){vfunc_called(this, "_ZN6S661C24v104Ev");}
void  S661C2 ::v105(){vfunc_called(this, "_ZN6S661C24v105Ev");}
void  S661C2 ::v106(){vfunc_called(this, "_ZN6S661C24v106Ev");}
void  S661C2 ::v107(){vfunc_called(this, "_ZN6S661C24v107Ev");}
void  S661C2 ::v108(){vfunc_called(this, "_ZN6S661C24v108Ev");}
void  S661C2 ::v109(){vfunc_called(this, "_ZN6S661C24v109Ev");}
void  S661C2 ::v110(){vfunc_called(this, "_ZN6S661C24v110Ev");}
void  S661C2 ::v111(){vfunc_called(this, "_ZN6S661C24v111Ev");}
void  S661C2 ::v112(){vfunc_called(this, "_ZN6S661C24v112Ev");}
void  S661C2 ::v113(){vfunc_called(this, "_ZN6S661C24v113Ev");}
void  S661C2 ::v114(){vfunc_called(this, "_ZN6S661C24v114Ev");}
void  S661C2 ::v115(){vfunc_called(this, "_ZN6S661C24v115Ev");}
void  S661C2 ::v116(){vfunc_called(this, "_ZN6S661C24v116Ev");}
void  S661C2 ::v117(){vfunc_called(this, "_ZN6S661C24v117Ev");}
void  S661C2 ::v118(){vfunc_called(this, "_ZN6S661C24v118Ev");}
void  S661C2 ::v119(){vfunc_called(this, "_ZN6S661C24v119Ev");}
void  S661C2 ::v120(){vfunc_called(this, "_ZN6S661C24v120Ev");}
void  S661C2 ::v121(){vfunc_called(this, "_ZN6S661C24v121Ev");}
void  S661C2 ::v122(){vfunc_called(this, "_ZN6S661C24v122Ev");}
void  S661C2 ::v123(){vfunc_called(this, "_ZN6S661C24v123Ev");}
S661C2 ::S661C2(){ note_ctor("S661C2", this);} // tgen

static void Test_S661C2()
{
  extern Class_Descriptor cd_S661C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(45,64)];
    init_test(&cd_S661C2, buf);
    S661C2 *dp, &lv = *(dp=new (buf) S661C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(352,252), "sizeof(S661C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S661C2)");
    check_base_class_offset(lv, (S661C5*)(S661C4*)(S661C3*), 0, "S661C2");
    check_base_class_offset(lv, (S661C4*)(S661C3*), 0, "S661C2");
    check_base_class_offset(lv, (S661C3*), 0, "S661C2");
    check_field_offset(lv, s661c2f0, ABISELECT(136,84), "S661C2.s661c2f0");
    check_field_offset(lv, s661c2f1, ABISELECT(144,88), "S661C2.s661c2f1");
    check_field_offset(lv, s661c2f2, ABISELECT(145,89), "S661C2.s661c2f2");
    check_field_offset(lv, s661c2f3, ABISELECT(148,92), "S661C2.s661c2f3");
    check_field_offset(lv, s661c2f4, ABISELECT(164,108), "S661C2.s661c2f4");
    check_field_offset(lv, s661c2f5, ABISELECT(180,124), "S661C2.s661c2f5");
    check_field_offset(lv, s661c2f6, ABISELECT(184,128), "S661C2.s661c2f6");
    check_field_offset(lv, s661c2f7, ABISELECT(192,132), "S661C2.s661c2f7");
    set_bf_and_test(lv, s661c2f8, ABISELECT(200,136), 0, 1, 1, "S661C2");
    set_bf_and_test(lv, s661c2f9, ABISELECT(200,136), 1, 1, 1, "S661C2");
    set_bf_and_test(lv, s661c2f10, ABISELECT(200,136), 2, 1, 1, "S661C2");
    set_bf_and_test(lv, s661c2f11, ABISELECT(200,136), 3, 1, 1, "S661C2");
    set_bf_and_test(lv, s661c2f12, ABISELECT(200,136), 4, 1, 1, "S661C2");
    set_bf_and_test(lv, s661c2f13, ABISELECT(200,136), 5, 1, 1, "S661C2");
    set_bf_and_test(lv, s661c2f14, ABISELECT(200,136), 6, 1, 1, "S661C2");
    set_bf_and_test(lv, s661c2f15, ABISELECT(200,136), 7, 1, 1, "S661C2");
    set_bf_and_test(lv, s661c2f16, ABISELECT(201,137), 0, 1, 1, "S661C2");
    set_bf_and_test(lv, s661c2f17, ABISELECT(201,137), 1, 1, 1, "S661C2");
    set_bf_and_test(lv, s661c2f18, ABISELECT(201,137), 2, 1, 1, "S661C2");
    check_field_offset(lv, s661c2f19, ABISELECT(208,140), "S661C2.s661c2f19");
    check_field_offset(lv, s661c2f20, ABISELECT(216,144), "S661C2.s661c2f20");
    check_field_offset(lv, s661c2f21, ABISELECT(232,156), "S661C2.s661c2f21");
    set_bf_and_test(lv, s661c2f22, ABISELECT(233,157), 0, 1, 1, "S661C2");
    check_field_offset(lv, s661c2f23, ABISELECT(240,160), "S661C2.s661c2f23");
    check_field_offset(lv, s661c2f24, ABISELECT(256,172), "S661C2.s661c2f24");
    check_field_offset(lv, s661c2f25, ABISELECT(272,184), "S661C2.s661c2f25");
    check_field_offset(lv, s661c2f26, ABISELECT(288,196), "S661C2.s661c2f26");
    check_field_offset(lv, s661c2f27, ABISELECT(304,208), "S661C2.s661c2f27");
    check_field_offset(lv, s661c2f28, ABISELECT(308,212), "S661C2.s661c2f28");
    check_field_offset(lv, s661c2f29, ABISELECT(324,228), "S661C2.s661c2f29");
    check_field_offset(lv, s661c2f30, ABISELECT(336,240), "S661C2.s661c2f30");
    check_field_offset(lv, s661c2f31, ABISELECT(340,244), "S661C2.s661c2f31");
    test_class_info(&lv, &cd_S661C2);
    dp->~S661C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS661C2(Test_S661C2, "S661C2", ABISELECT(352,252));

#else // __cplusplus

extern void _ZN6S661C2C1Ev();
extern void _ZN6S661C2D1Ev();
Name_Map name_map_S661C2[] = {
  NSPAIR(_ZN6S661C2C1Ev),
  NSPAIR(_ZN6S661C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S661C5;
extern VTBL_ENTRY _ZTI6S661C5[];
extern  VTBL_ENTRY _ZTV6S661C5[];
extern Class_Descriptor cd_S661C4;
extern VTBL_ENTRY _ZTI6S661C4[];
extern  VTBL_ENTRY _ZTV6S661C4[];
extern Class_Descriptor cd_S661C3;
extern VTBL_ENTRY _ZTI6S661C3[];
extern  VTBL_ENTRY _ZTV6S661C3[];
static Base_Class bases_S661C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S661C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S661C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S661C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S661C2[];
extern void _ZN6S661C2D1Ev();
extern void _ZN6S661C2D0Ev();
extern void _ZN6S661C52v6Ev();
extern void _ZN6S661C52v7Ev();
extern void _ZN6S661C52v8Ev();
extern void _ZN6S661C52v9Ev();
extern void _ZN6S661C53v10Ev();
extern void _ZN6S661C53v11Ev();
extern void _ZN6S661C53v12Ev();
extern void _ZN6S661C53v13Ev();
extern void _ZN6S661C53v14Ev();
extern void _ZN6S661C53v15Ev();
extern void _ZN6S661C53v16Ev();
extern void _ZN6S661C53v17Ev();
extern void _ZN6S661C53v18Ev();
extern void _ZN6S661C53v19Ev();
extern void _ZN6S661C53v20Ev();
extern void _ZN6S661C53v21Ev();
extern void _ZN6S661C53v22Ev();
extern void _ZN6S661C53v23Ev();
extern void _ZN6S661C53v24Ev();
extern void _ZN6S661C53v25Ev();
extern void _ZN6S661C53v26Ev();
extern void _ZN6S661C53v27Ev();
extern void _ZN6S661C53v28Ev();
extern void _ZN6S661C53v29Ev();
extern void _ZN6S661C53v30Ev();
extern void _ZN6S661C53v31Ev();
extern void _ZN6S661C53v32Ev();
extern void _ZN6S661C53v33Ev();
extern void _ZN6S661C53v34Ev();
extern void _ZN6S661C53v35Ev();
extern void _ZN6S661C53v36Ev();
extern void _ZN6S661C53v37Ev();
extern void _ZN6S661C53v38Ev();
extern void _ZN6S661C53v39Ev();
extern void _ZN6S661C53v40Ev();
extern void _ZN6S661C53v41Ev();
extern void _ZN6S661C53v42Ev();
extern void _ZN6S661C53v43Ev();
extern void _ZN6S661C53v44Ev();
extern void _ZN6S661C53v45Ev();
extern void _ZN6S661C53v46Ev();
extern void _ZN6S661C53v47Ev();
extern void _ZN6S661C53v48Ev();
extern void _ZN6S661C53v49Ev();
extern void _ZN6S661C53v50Ev();
extern void _ZN6S661C53v51Ev();
extern void _ZN6S661C53v52Ev();
extern void _ZN6S661C53v53Ev();
extern void _ZN6S661C53v54Ev();
extern void _ZN6S661C53v55Ev();
extern void _ZN6S661C53v56Ev();
extern void _ZN6S661C53v57Ev();
extern void _ZN6S661C53v58Ev();
extern void _ZN6S661C53v59Ev();
extern void _ZN6S661C53v60Ev();
extern void _ZN6S661C53v61Ev();
extern void _ZN6S661C53v62Ev();
extern void _ZN6S661C53v63Ev();
extern void _ZN6S661C53v64Ev();
extern void _ZN6S661C53v65Ev();
extern void _ZN6S661C53v66Ev();
extern void _ZN6S661C53v67Ev();
extern void _ZN6S661C53v68Ev();
extern void _ZN6S661C53v69Ev();
extern void _ZN6S661C43v70Ev();
extern void _ZN6S661C43v71Ev();
extern void _ZN6S661C43v72Ev();
extern void _ZN6S661C43v73Ev();
extern void _ZN6S661C43v74Ev();
extern void _ZN6S661C33v75Ev();
extern void _ZN6S661C33v76Ev();
extern void _ZN6S661C33v77Ev();
extern void _ZN6S661C33v78Ev();
extern void _ZN6S661C33v79Ev();
extern void _ZN6S661C33v80Ev();
extern void _ZN6S661C33v81Ev();
extern void _ZN6S661C33v82Ev();
extern void _ZN6S661C33v83Ev();
extern void _ZN6S661C33v84Ev();
extern void _ZN6S661C33v85Ev();
extern void _ZN6S661C33v86Ev();
extern void _ZN6S661C33v87Ev();
extern void _ZN6S661C33v88Ev();
extern void _ZN6S661C33v89Ev();
extern void _ZN6S661C33v90Ev();
extern void _ZN6S661C33v91Ev();
extern void _ZN6S661C33v92Ev();
extern void _ZN6S661C33v93Ev();
extern void _ZN6S661C33v94Ev();
extern void _ZN6S661C33v95Ev();
extern void _ZN6S661C33v96Ev();
extern void _ZN6S661C23v97Ev();
extern void _ZN6S661C23v98Ev();
extern void _ZN6S661C23v99Ev();
extern void _ZN6S661C24v100Ev();
extern void _ZN6S661C24v101Ev();
extern void _ZN6S661C24v102Ev();
extern void _ZN6S661C24v103Ev();
extern void _ZN6S661C24v104Ev();
extern void _ZN6S661C24v105Ev();
extern void _ZN6S661C24v106Ev();
extern void _ZN6S661C24v107Ev();
extern void _ZN6S661C24v108Ev();
extern void _ZN6S661C24v109Ev();
extern void _ZN6S661C24v110Ev();
extern void _ZN6S661C24v111Ev();
extern void _ZN6S661C24v112Ev();
extern void _ZN6S661C24v113Ev();
extern void _ZN6S661C24v114Ev();
extern void _ZN6S661C24v115Ev();
extern void _ZN6S661C24v116Ev();
extern void _ZN6S661C24v117Ev();
extern void _ZN6S661C24v118Ev();
extern void _ZN6S661C24v119Ev();
extern void _ZN6S661C24v120Ev();
extern void _ZN6S661C24v121Ev();
extern void _ZN6S661C24v122Ev();
extern void _ZN6S661C24v123Ev();
static  VTBL_ENTRY vtc_S661C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S661C2[0]),
  (VTBL_ENTRY)&_ZN6S661C2D1Ev,
  (VTBL_ENTRY)&_ZN6S661C2D0Ev,
  (VTBL_ENTRY)&_ZN6S661C52v6Ev,
  (VTBL_ENTRY)&_ZN6S661C52v7Ev,
  (VTBL_ENTRY)&_ZN6S661C52v8Ev,
  (VTBL_ENTRY)&_ZN6S661C52v9Ev,
  (VTBL_ENTRY)&_ZN6S661C53v10Ev,
  (VTBL_ENTRY)&_ZN6S661C53v11Ev,
  (VTBL_ENTRY)&_ZN6S661C53v12Ev,
  (VTBL_ENTRY)&_ZN6S661C53v13Ev,
  (VTBL_ENTRY)&_ZN6S661C53v14Ev,
  (VTBL_ENTRY)&_ZN6S661C53v15Ev,
  (VTBL_ENTRY)&_ZN6S661C53v16Ev,
  (VTBL_ENTRY)&_ZN6S661C53v17Ev,
  (VTBL_ENTRY)&_ZN6S661C53v18Ev,
  (VTBL_ENTRY)&_ZN6S661C53v19Ev,
  (VTBL_ENTRY)&_ZN6S661C53v20Ev,
  (VTBL_ENTRY)&_ZN6S661C53v21Ev,
  (VTBL_ENTRY)&_ZN6S661C53v22Ev,
  (VTBL_ENTRY)&_ZN6S661C53v23Ev,
  (VTBL_ENTRY)&_ZN6S661C53v24Ev,
  (VTBL_ENTRY)&_ZN6S661C53v25Ev,
  (VTBL_ENTRY)&_ZN6S661C53v26Ev,
  (VTBL_ENTRY)&_ZN6S661C53v27Ev,
  (VTBL_ENTRY)&_ZN6S661C53v28Ev,
  (VTBL_ENTRY)&_ZN6S661C53v29Ev,
  (VTBL_ENTRY)&_ZN6S661C53v30Ev,
  (VTBL_ENTRY)&_ZN6S661C53v31Ev,
  (VTBL_ENTRY)&_ZN6S661C53v32Ev,
  (VTBL_ENTRY)&_ZN6S661C53v33Ev,
  (VTBL_ENTRY)&_ZN6S661C53v34Ev,
  (VTBL_ENTRY)&_ZN6S661C53v35Ev,
  (VTBL_ENTRY)&_ZN6S661C53v36Ev,
  (VTBL_ENTRY)&_ZN6S661C53v37Ev,
  (VTBL_ENTRY)&_ZN6S661C53v38Ev,
  (VTBL_ENTRY)&_ZN6S661C53v39Ev,
  (VTBL_ENTRY)&_ZN6S661C53v40Ev,
  (VTBL_ENTRY)&_ZN6S661C53v41Ev,
  (VTBL_ENTRY)&_ZN6S661C53v42Ev,
  (VTBL_ENTRY)&_ZN6S661C53v43Ev,
  (VTBL_ENTRY)&_ZN6S661C53v44Ev,
  (VTBL_ENTRY)&_ZN6S661C53v45Ev,
  (VTBL_ENTRY)&_ZN6S661C53v46Ev,
  (VTBL_ENTRY)&_ZN6S661C53v47Ev,
  (VTBL_ENTRY)&_ZN6S661C53v48Ev,
  (VTBL_ENTRY)&_ZN6S661C53v49Ev,
  (VTBL_ENTRY)&_ZN6S661C53v50Ev,
  (VTBL_ENTRY)&_ZN6S661C53v51Ev,
  (VTBL_ENTRY)&_ZN6S661C53v52Ev,
  (VTBL_ENTRY)&_ZN6S661C53v53Ev,
  (VTBL_ENTRY)&_ZN6S661C53v54Ev,
  (VTBL_ENTRY)&_ZN6S661C53v55Ev,
  (VTBL_ENTRY)&_ZN6S661C53v56Ev,
  (VTBL_ENTRY)&_ZN6S661C53v57Ev,
  (VTBL_ENTRY)&_ZN6S661C53v58Ev,
  (VTBL_ENTRY)&_ZN6S661C53v59Ev,
  (VTBL_ENTRY)&_ZN6S661C53v60Ev,
  (VTBL_ENTRY)&_ZN6S661C53v61Ev,
  (VTBL_ENTRY)&_ZN6S661C53v62Ev,
  (VTBL_ENTRY)&_ZN6S661C53v63Ev,
  (VTBL_ENTRY)&_ZN6S661C53v64Ev,
  (VTBL_ENTRY)&_ZN6S661C53v65Ev,
  (VTBL_ENTRY)&_ZN6S661C53v66Ev,
  (VTBL_ENTRY)&_ZN6S661C53v67Ev,
  (VTBL_ENTRY)&_ZN6S661C53v68Ev,
  (VTBL_ENTRY)&_ZN6S661C53v69Ev,
  (VTBL_ENTRY)&_ZN6S661C43v70Ev,
  (VTBL_ENTRY)&_ZN6S661C43v71Ev,
  (VTBL_ENTRY)&_ZN6S661C43v72Ev,
  (VTBL_ENTRY)&_ZN6S661C43v73Ev,
  (VTBL_ENTRY)&_ZN6S661C43v74Ev,
  (VTBL_ENTRY)&_ZN6S661C33v75Ev,
  (VTBL_ENTRY)&_ZN6S661C33v76Ev,
  (VTBL_ENTRY)&_ZN6S661C33v77Ev,
  (VTBL_ENTRY)&_ZN6S661C33v78Ev,
  (VTBL_ENTRY)&_ZN6S661C33v79Ev,
  (VTBL_ENTRY)&_ZN6S661C33v80Ev,
  (VTBL_ENTRY)&_ZN6S661C33v81Ev,
  (VTBL_ENTRY)&_ZN6S661C33v82Ev,
  (VTBL_ENTRY)&_ZN6S661C33v83Ev,
  (VTBL_ENTRY)&_ZN6S661C33v84Ev,
  (VTBL_ENTRY)&_ZN6S661C33v85Ev,
  (VTBL_ENTRY)&_ZN6S661C33v86Ev,
  (VTBL_ENTRY)&_ZN6S661C33v87Ev,
  (VTBL_ENTRY)&_ZN6S661C33v88Ev,
  (VTBL_ENTRY)&_ZN6S661C33v89Ev,
  (VTBL_ENTRY)&_ZN6S661C33v90Ev,
  (VTBL_ENTRY)&_ZN6S661C33v91Ev,
  (VTBL_ENTRY)&_ZN6S661C33v92Ev,
  (VTBL_ENTRY)&_ZN6S661C33v93Ev,
  (VTBL_ENTRY)&_ZN6S661C33v94Ev,
  (VTBL_ENTRY)&_ZN6S661C33v95Ev,
  (VTBL_ENTRY)&_ZN6S661C33v96Ev,
  (VTBL_ENTRY)&_ZN6S661C23v97Ev,
  (VTBL_ENTRY)&_ZN6S661C23v98Ev,
  (VTBL_ENTRY)&_ZN6S661C23v99Ev,
  (VTBL_ENTRY)&_ZN6S661C24v100Ev,
  (VTBL_ENTRY)&_ZN6S661C24v101Ev,
  (VTBL_ENTRY)&_ZN6S661C24v102Ev,
  (VTBL_ENTRY)&_ZN6S661C24v103Ev,
  (VTBL_ENTRY)&_ZN6S661C24v104Ev,
  (VTBL_ENTRY)&_ZN6S661C24v105Ev,
  (VTBL_ENTRY)&_ZN6S661C24v106Ev,
  (VTBL_ENTRY)&_ZN6S661C24v107Ev,
  (VTBL_ENTRY)&_ZN6S661C24v108Ev,
  (VTBL_ENTRY)&_ZN6S661C24v109Ev,
  (VTBL_ENTRY)&_ZN6S661C24v110Ev,
  (VTBL_ENTRY)&_ZN6S661C24v111Ev,
  (VTBL_ENTRY)&_ZN6S661C24v112Ev,
  (VTBL_ENTRY)&_ZN6S661C24v113Ev,
  (VTBL_ENTRY)&_ZN6S661C24v114Ev,
  (VTBL_ENTRY)&_ZN6S661C24v115Ev,
  (VTBL_ENTRY)&_ZN6S661C24v116Ev,
  (VTBL_ENTRY)&_ZN6S661C24v117Ev,
  (VTBL_ENTRY)&_ZN6S661C24v118Ev,
  (VTBL_ENTRY)&_ZN6S661C24v119Ev,
  (VTBL_ENTRY)&_ZN6S661C24v120Ev,
  (VTBL_ENTRY)&_ZN6S661C24v121Ev,
  (VTBL_ENTRY)&_ZN6S661C24v122Ev,
  (VTBL_ENTRY)&_ZN6S661C24v123Ev,
};
extern VTBL_ENTRY _ZTI6S661C2[];
extern  VTBL_ENTRY _ZTV6S661C2[];
Class_Descriptor cd_S661C2 = {  "S661C2", // class name
  bases_S661C2, 3,
  &(vtc_S661C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(352,252), // object size
  NSPAIRA(_ZTI6S661C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S661C2),122, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S661C1  : S661C2 {
  int s661c1f0;
  virtual  ~S661C1(); // _ZN6S661C1D1Ev
  virtual void  v1(); // _ZN6S661C12v1Ev
  virtual void  v2(); // _ZN6S661C12v2Ev
  virtual void  v3(); // _ZN6S661C12v3Ev
  virtual void  v4(); // _ZN6S661C12v4Ev
  virtual void  v5(); // _ZN6S661C12v5Ev
  S661C1(); // tgen
};
//SIG(1 S661C1) C1{ BC2{ BC3{ BC4{ BC5{ vd v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 Fi FL Fp[4] Fi[2] Fp FC6{ m Fi[2]} Fp[2]} vd v70 v71 v72 v73 v74 Fp FC6} vd v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 v91 v92 v93 v94 v95 v96 Fp[2] Fi:1 Fi:1 Fi:1 Fi:1 Fc} vd v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 v110 v111 v112 v113 v114 v115 v116 v117 v118 v119 v120 v121 v122 v123 Fp FC7{ m} FC7 FC8{ m Fi[4]} FC8 Fi FC9{ m} Fp Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fp FC10{ BC11{ BC12{ m Fp Fi[2]}}} FC13{ m} Fi:1 FC14{ BC15{ BC12}} FC14 FC16{ BC17{ BC12}} FC16 Fc[2] FC18{ m Fi[4]} Fi[3] Fc[2] Fi[2]} vd v1 v2 v3 v4 v5 Fi}


 S661C1 ::~S661C1(){ note_dtor("S661C1", this);}
void  S661C1 ::v1(){vfunc_called(this, "_ZN6S661C12v1Ev");}
void  S661C1 ::v2(){vfunc_called(this, "_ZN6S661C12v2Ev");}
void  S661C1 ::v3(){vfunc_called(this, "_ZN6S661C12v3Ev");}
void  S661C1 ::v4(){vfunc_called(this, "_ZN6S661C12v4Ev");}
void  S661C1 ::v5(){vfunc_called(this, "_ZN6S661C12v5Ev");}
S661C1 ::S661C1(){ note_ctor("S661C1", this);} // tgen

static void Test_S661C1()
{
  extern Class_Descriptor cd_S661C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(45,65)];
    init_test(&cd_S661C1, buf);
    S661C1 *dp, &lv = *(dp=new (buf) S661C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(352,256), "sizeof(S661C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S661C1)");
    check_base_class_offset(lv, (S661C5*)(S661C4*)(S661C3*)(S661C2*), 0, "S661C1");
    check_base_class_offset(lv, (S661C4*)(S661C3*)(S661C2*), 0, "S661C1");
    check_base_class_offset(lv, (S661C3*)(S661C2*), 0, "S661C1");
    check_base_class_offset(lv, (S661C2*), 0, "S661C1");
    check_field_offset(lv, s661c1f0, ABISELECT(348,252), "S661C1.s661c1f0");
    test_class_info(&lv, &cd_S661C1);
    dp->~S661C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS661C1(Test_S661C1, "S661C1", ABISELECT(352,256));

#else // __cplusplus

extern void _ZN6S661C1C1Ev();
extern void _ZN6S661C1D1Ev();
Name_Map name_map_S661C1[] = {
  NSPAIR(_ZN6S661C1C1Ev),
  NSPAIR(_ZN6S661C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S661C5;
extern VTBL_ENTRY _ZTI6S661C5[];
extern  VTBL_ENTRY _ZTV6S661C5[];
extern Class_Descriptor cd_S661C4;
extern VTBL_ENTRY _ZTI6S661C4[];
extern  VTBL_ENTRY _ZTV6S661C4[];
extern Class_Descriptor cd_S661C3;
extern VTBL_ENTRY _ZTI6S661C3[];
extern  VTBL_ENTRY _ZTV6S661C3[];
extern Class_Descriptor cd_S661C2;
extern VTBL_ENTRY _ZTI6S661C2[];
extern  VTBL_ENTRY _ZTV6S661C2[];
static Base_Class bases_S661C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S661C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S661C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S661C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S661C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S661C1[];
extern void _ZN6S661C1D1Ev();
extern void _ZN6S661C1D0Ev();
extern void _ZN6S661C52v6Ev();
extern void _ZN6S661C52v7Ev();
extern void _ZN6S661C52v8Ev();
extern void _ZN6S661C52v9Ev();
extern void _ZN6S661C53v10Ev();
extern void _ZN6S661C53v11Ev();
extern void _ZN6S661C53v12Ev();
extern void _ZN6S661C53v13Ev();
extern void _ZN6S661C53v14Ev();
extern void _ZN6S661C53v15Ev();
extern void _ZN6S661C53v16Ev();
extern void _ZN6S661C53v17Ev();
extern void _ZN6S661C53v18Ev();
extern void _ZN6S661C53v19Ev();
extern void _ZN6S661C53v20Ev();
extern void _ZN6S661C53v21Ev();
extern void _ZN6S661C53v22Ev();
extern void _ZN6S661C53v23Ev();
extern void _ZN6S661C53v24Ev();
extern void _ZN6S661C53v25Ev();
extern void _ZN6S661C53v26Ev();
extern void _ZN6S661C53v27Ev();
extern void _ZN6S661C53v28Ev();
extern void _ZN6S661C53v29Ev();
extern void _ZN6S661C53v30Ev();
extern void _ZN6S661C53v31Ev();
extern void _ZN6S661C53v32Ev();
extern void _ZN6S661C53v33Ev();
extern void _ZN6S661C53v34Ev();
extern void _ZN6S661C53v35Ev();
extern void _ZN6S661C53v36Ev();
extern void _ZN6S661C53v37Ev();
extern void _ZN6S661C53v38Ev();
extern void _ZN6S661C53v39Ev();
extern void _ZN6S661C53v40Ev();
extern void _ZN6S661C53v41Ev();
extern void _ZN6S661C53v42Ev();
extern void _ZN6S661C53v43Ev();
extern void _ZN6S661C53v44Ev();
extern void _ZN6S661C53v45Ev();
extern void _ZN6S661C53v46Ev();
extern void _ZN6S661C53v47Ev();
extern void _ZN6S661C53v48Ev();
extern void _ZN6S661C53v49Ev();
extern void _ZN6S661C53v50Ev();
extern void _ZN6S661C53v51Ev();
extern void _ZN6S661C53v52Ev();
extern void _ZN6S661C53v53Ev();
extern void _ZN6S661C53v54Ev();
extern void _ZN6S661C53v55Ev();
extern void _ZN6S661C53v56Ev();
extern void _ZN6S661C53v57Ev();
extern void _ZN6S661C53v58Ev();
extern void _ZN6S661C53v59Ev();
extern void _ZN6S661C53v60Ev();
extern void _ZN6S661C53v61Ev();
extern void _ZN6S661C53v62Ev();
extern void _ZN6S661C53v63Ev();
extern void _ZN6S661C53v64Ev();
extern void _ZN6S661C53v65Ev();
extern void _ZN6S661C53v66Ev();
extern void _ZN6S661C53v67Ev();
extern void _ZN6S661C53v68Ev();
extern void _ZN6S661C53v69Ev();
extern void _ZN6S661C43v70Ev();
extern void _ZN6S661C43v71Ev();
extern void _ZN6S661C43v72Ev();
extern void _ZN6S661C43v73Ev();
extern void _ZN6S661C43v74Ev();
extern void _ZN6S661C33v75Ev();
extern void _ZN6S661C33v76Ev();
extern void _ZN6S661C33v77Ev();
extern void _ZN6S661C33v78Ev();
extern void _ZN6S661C33v79Ev();
extern void _ZN6S661C33v80Ev();
extern void _ZN6S661C33v81Ev();
extern void _ZN6S661C33v82Ev();
extern void _ZN6S661C33v83Ev();
extern void _ZN6S661C33v84Ev();
extern void _ZN6S661C33v85Ev();
extern void _ZN6S661C33v86Ev();
extern void _ZN6S661C33v87Ev();
extern void _ZN6S661C33v88Ev();
extern void _ZN6S661C33v89Ev();
extern void _ZN6S661C33v90Ev();
extern void _ZN6S661C33v91Ev();
extern void _ZN6S661C33v92Ev();
extern void _ZN6S661C33v93Ev();
extern void _ZN6S661C33v94Ev();
extern void _ZN6S661C33v95Ev();
extern void _ZN6S661C33v96Ev();
extern void _ZN6S661C23v97Ev();
extern void _ZN6S661C23v98Ev();
extern void _ZN6S661C23v99Ev();
extern void _ZN6S661C24v100Ev();
extern void _ZN6S661C24v101Ev();
extern void _ZN6S661C24v102Ev();
extern void _ZN6S661C24v103Ev();
extern void _ZN6S661C24v104Ev();
extern void _ZN6S661C24v105Ev();
extern void _ZN6S661C24v106Ev();
extern void _ZN6S661C24v107Ev();
extern void _ZN6S661C24v108Ev();
extern void _ZN6S661C24v109Ev();
extern void _ZN6S661C24v110Ev();
extern void _ZN6S661C24v111Ev();
extern void _ZN6S661C24v112Ev();
extern void _ZN6S661C24v113Ev();
extern void _ZN6S661C24v114Ev();
extern void _ZN6S661C24v115Ev();
extern void _ZN6S661C24v116Ev();
extern void _ZN6S661C24v117Ev();
extern void _ZN6S661C24v118Ev();
extern void _ZN6S661C24v119Ev();
extern void _ZN6S661C24v120Ev();
extern void _ZN6S661C24v121Ev();
extern void _ZN6S661C24v122Ev();
extern void _ZN6S661C24v123Ev();
extern void _ZN6S661C12v1Ev();
extern void _ZN6S661C12v2Ev();
extern void _ZN6S661C12v3Ev();
extern void _ZN6S661C12v4Ev();
extern void _ZN6S661C12v5Ev();
static  VTBL_ENTRY vtc_S661C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S661C1[0]),
  (VTBL_ENTRY)&_ZN6S661C1D1Ev,
  (VTBL_ENTRY)&_ZN6S661C1D0Ev,
  (VTBL_ENTRY)&_ZN6S661C52v6Ev,
  (VTBL_ENTRY)&_ZN6S661C52v7Ev,
  (VTBL_ENTRY)&_ZN6S661C52v8Ev,
  (VTBL_ENTRY)&_ZN6S661C52v9Ev,
  (VTBL_ENTRY)&_ZN6S661C53v10Ev,
  (VTBL_ENTRY)&_ZN6S661C53v11Ev,
  (VTBL_ENTRY)&_ZN6S661C53v12Ev,
  (VTBL_ENTRY)&_ZN6S661C53v13Ev,
  (VTBL_ENTRY)&_ZN6S661C53v14Ev,
  (VTBL_ENTRY)&_ZN6S661C53v15Ev,
  (VTBL_ENTRY)&_ZN6S661C53v16Ev,
  (VTBL_ENTRY)&_ZN6S661C53v17Ev,
  (VTBL_ENTRY)&_ZN6S661C53v18Ev,
  (VTBL_ENTRY)&_ZN6S661C53v19Ev,
  (VTBL_ENTRY)&_ZN6S661C53v20Ev,
  (VTBL_ENTRY)&_ZN6S661C53v21Ev,
  (VTBL_ENTRY)&_ZN6S661C53v22Ev,
  (VTBL_ENTRY)&_ZN6S661C53v23Ev,
  (VTBL_ENTRY)&_ZN6S661C53v24Ev,
  (VTBL_ENTRY)&_ZN6S661C53v25Ev,
  (VTBL_ENTRY)&_ZN6S661C53v26Ev,
  (VTBL_ENTRY)&_ZN6S661C53v27Ev,
  (VTBL_ENTRY)&_ZN6S661C53v28Ev,
  (VTBL_ENTRY)&_ZN6S661C53v29Ev,
  (VTBL_ENTRY)&_ZN6S661C53v30Ev,
  (VTBL_ENTRY)&_ZN6S661C53v31Ev,
  (VTBL_ENTRY)&_ZN6S661C53v32Ev,
  (VTBL_ENTRY)&_ZN6S661C53v33Ev,
  (VTBL_ENTRY)&_ZN6S661C53v34Ev,
  (VTBL_ENTRY)&_ZN6S661C53v35Ev,
  (VTBL_ENTRY)&_ZN6S661C53v36Ev,
  (VTBL_ENTRY)&_ZN6S661C53v37Ev,
  (VTBL_ENTRY)&_ZN6S661C53v38Ev,
  (VTBL_ENTRY)&_ZN6S661C53v39Ev,
  (VTBL_ENTRY)&_ZN6S661C53v40Ev,
  (VTBL_ENTRY)&_ZN6S661C53v41Ev,
  (VTBL_ENTRY)&_ZN6S661C53v42Ev,
  (VTBL_ENTRY)&_ZN6S661C53v43Ev,
  (VTBL_ENTRY)&_ZN6S661C53v44Ev,
  (VTBL_ENTRY)&_ZN6S661C53v45Ev,
  (VTBL_ENTRY)&_ZN6S661C53v46Ev,
  (VTBL_ENTRY)&_ZN6S661C53v47Ev,
  (VTBL_ENTRY)&_ZN6S661C53v48Ev,
  (VTBL_ENTRY)&_ZN6S661C53v49Ev,
  (VTBL_ENTRY)&_ZN6S661C53v50Ev,
  (VTBL_ENTRY)&_ZN6S661C53v51Ev,
  (VTBL_ENTRY)&_ZN6S661C53v52Ev,
  (VTBL_ENTRY)&_ZN6S661C53v53Ev,
  (VTBL_ENTRY)&_ZN6S661C53v54Ev,
  (VTBL_ENTRY)&_ZN6S661C53v55Ev,
  (VTBL_ENTRY)&_ZN6S661C53v56Ev,
  (VTBL_ENTRY)&_ZN6S661C53v57Ev,
  (VTBL_ENTRY)&_ZN6S661C53v58Ev,
  (VTBL_ENTRY)&_ZN6S661C53v59Ev,
  (VTBL_ENTRY)&_ZN6S661C53v60Ev,
  (VTBL_ENTRY)&_ZN6S661C53v61Ev,
  (VTBL_ENTRY)&_ZN6S661C53v62Ev,
  (VTBL_ENTRY)&_ZN6S661C53v63Ev,
  (VTBL_ENTRY)&_ZN6S661C53v64Ev,
  (VTBL_ENTRY)&_ZN6S661C53v65Ev,
  (VTBL_ENTRY)&_ZN6S661C53v66Ev,
  (VTBL_ENTRY)&_ZN6S661C53v67Ev,
  (VTBL_ENTRY)&_ZN6S661C53v68Ev,
  (VTBL_ENTRY)&_ZN6S661C53v69Ev,
  (VTBL_ENTRY)&_ZN6S661C43v70Ev,
  (VTBL_ENTRY)&_ZN6S661C43v71Ev,
  (VTBL_ENTRY)&_ZN6S661C43v72Ev,
  (VTBL_ENTRY)&_ZN6S661C43v73Ev,
  (VTBL_ENTRY)&_ZN6S661C43v74Ev,
  (VTBL_ENTRY)&_ZN6S661C33v75Ev,
  (VTBL_ENTRY)&_ZN6S661C33v76Ev,
  (VTBL_ENTRY)&_ZN6S661C33v77Ev,
  (VTBL_ENTRY)&_ZN6S661C33v78Ev,
  (VTBL_ENTRY)&_ZN6S661C33v79Ev,
  (VTBL_ENTRY)&_ZN6S661C33v80Ev,
  (VTBL_ENTRY)&_ZN6S661C33v81Ev,
  (VTBL_ENTRY)&_ZN6S661C33v82Ev,
  (VTBL_ENTRY)&_ZN6S661C33v83Ev,
  (VTBL_ENTRY)&_ZN6S661C33v84Ev,
  (VTBL_ENTRY)&_ZN6S661C33v85Ev,
  (VTBL_ENTRY)&_ZN6S661C33v86Ev,
  (VTBL_ENTRY)&_ZN6S661C33v87Ev,
  (VTBL_ENTRY)&_ZN6S661C33v88Ev,
  (VTBL_ENTRY)&_ZN6S661C33v89Ev,
  (VTBL_ENTRY)&_ZN6S661C33v90Ev,
  (VTBL_ENTRY)&_ZN6S661C33v91Ev,
  (VTBL_ENTRY)&_ZN6S661C33v92Ev,
  (VTBL_ENTRY)&_ZN6S661C33v93Ev,
  (VTBL_ENTRY)&_ZN6S661C33v94Ev,
  (VTBL_ENTRY)&_ZN6S661C33v95Ev,
  (VTBL_ENTRY)&_ZN6S661C33v96Ev,
  (VTBL_ENTRY)&_ZN6S661C23v97Ev,
  (VTBL_ENTRY)&_ZN6S661C23v98Ev,
  (VTBL_ENTRY)&_ZN6S661C23v99Ev,
  (VTBL_ENTRY)&_ZN6S661C24v100Ev,
  (VTBL_ENTRY)&_ZN6S661C24v101Ev,
  (VTBL_ENTRY)&_ZN6S661C24v102Ev,
  (VTBL_ENTRY)&_ZN6S661C24v103Ev,
  (VTBL_ENTRY)&_ZN6S661C24v104Ev,
  (VTBL_ENTRY)&_ZN6S661C24v105Ev,
  (VTBL_ENTRY)&_ZN6S661C24v106Ev,
  (VTBL_ENTRY)&_ZN6S661C24v107Ev,
  (VTBL_ENTRY)&_ZN6S661C24v108Ev,
  (VTBL_ENTRY)&_ZN6S661C24v109Ev,
  (VTBL_ENTRY)&_ZN6S661C24v110Ev,
  (VTBL_ENTRY)&_ZN6S661C24v111Ev,
  (VTBL_ENTRY)&_ZN6S661C24v112Ev,
  (VTBL_ENTRY)&_ZN6S661C24v113Ev,
  (VTBL_ENTRY)&_ZN6S661C24v114Ev,
  (VTBL_ENTRY)&_ZN6S661C24v115Ev,
  (VTBL_ENTRY)&_ZN6S661C24v116Ev,
  (VTBL_ENTRY)&_ZN6S661C24v117Ev,
  (VTBL_ENTRY)&_ZN6S661C24v118Ev,
  (VTBL_ENTRY)&_ZN6S661C24v119Ev,
  (VTBL_ENTRY)&_ZN6S661C24v120Ev,
  (VTBL_ENTRY)&_ZN6S661C24v121Ev,
  (VTBL_ENTRY)&_ZN6S661C24v122Ev,
  (VTBL_ENTRY)&_ZN6S661C24v123Ev,
  (VTBL_ENTRY)&_ZN6S661C12v1Ev,
  (VTBL_ENTRY)&_ZN6S661C12v2Ev,
  (VTBL_ENTRY)&_ZN6S661C12v3Ev,
  (VTBL_ENTRY)&_ZN6S661C12v4Ev,
  (VTBL_ENTRY)&_ZN6S661C12v5Ev,
};
extern VTBL_ENTRY _ZTI6S661C1[];
extern  VTBL_ENTRY _ZTV6S661C1[];
Class_Descriptor cd_S661C1 = {  "S661C1", // class name
  bases_S661C1, 4,
  &(vtc_S661C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(352,256), // object size
  NSPAIRA(_ZTI6S661C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S661C1),127, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  4, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2226C4_nt  {
  virtual  ~S2226C4_nt(); // _ZN10S2226C4_ntD1Ev
  virtual void  v38(); // _ZN10S2226C4_nt3v38Ev
  virtual void  v39(); // _ZN10S2226C4_nt3v39Ev
  virtual void  v40(); // _ZN10S2226C4_nt3v40Ev
  virtual void  v41(); // _ZN10S2226C4_nt3v41Ev
  S2226C4_nt(); // tgen
};
//SIG(-1 S2226C4_nt) C1{ vd v1 v2 v3 v4}


 S2226C4_nt ::~S2226C4_nt(){ note_dtor("S2226C4_nt", this);}
void  S2226C4_nt ::v38(){vfunc_called(this, "_ZN10S2226C4_nt3v38Ev");}
void  S2226C4_nt ::v39(){vfunc_called(this, "_ZN10S2226C4_nt3v39Ev");}
void  S2226C4_nt ::v40(){vfunc_called(this, "_ZN10S2226C4_nt3v40Ev");}
void  S2226C4_nt ::v41(){vfunc_called(this, "_ZN10S2226C4_nt3v41Ev");}
S2226C4_nt ::S2226C4_nt(){ note_ctor("S2226C4_nt", this);} // tgen

//skip512 S2226C4_nt

#else // __cplusplus

extern void _ZN10S2226C4_ntC1Ev();
extern void _ZN10S2226C4_ntD1Ev();
Name_Map name_map_S2226C4_nt[] = {
  NSPAIR(_ZN10S2226C4_ntC1Ev),
  NSPAIR(_ZN10S2226C4_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S2226C4_nt[];
extern void _ZN10S2226C4_ntD1Ev();
extern void _ZN10S2226C4_ntD0Ev();
extern void _ZN10S2226C4_nt3v38Ev();
extern void _ZN10S2226C4_nt3v39Ev();
extern void _ZN10S2226C4_nt3v40Ev();
extern void _ZN10S2226C4_nt3v41Ev();
static  VTBL_ENTRY vtc_S2226C4_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S2226C4_nt[0]),
  (VTBL_ENTRY)&_ZN10S2226C4_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S2226C4_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S2226C4_nt3v38Ev,
  (VTBL_ENTRY)&_ZN10S2226C4_nt3v39Ev,
  (VTBL_ENTRY)&_ZN10S2226C4_nt3v40Ev,
  (VTBL_ENTRY)&_ZN10S2226C4_nt3v41Ev,
};
extern VTBL_ENTRY _ZTI10S2226C4_nt[];
VTBL_ENTRY *P__ZTI10S2226C4_nt = _ZTI10S2226C4_nt; 
extern  VTBL_ENTRY _ZTV10S2226C4_nt[];
Class_Descriptor cd_S2226C4_nt = {  "S2226C4_nt", // class name
  0,0,//no base classes
  &(vtc_S2226C4_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI10S2226C4_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S2226C4_nt),8, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2226C3  : S2226C4_nt {
  virtual  ~S2226C3(); // _ZN7S2226C3D1Ev
  virtual void  v42(); // _ZN7S2226C33v42Ev
  virtual void  v43(); // _ZN7S2226C33v43Ev
  virtual void  v44(); // _ZN7S2226C33v44Ev
  virtual void  v45(); // _ZN7S2226C33v45Ev
  virtual void  v46(); // _ZN7S2226C33v46Ev
  S2226C3(); // tgen
};
//SIG(-1 S2226C3) C1{ BC2{ vd v6 v7 v8 v9} vd v1 v2 v3 v4 v5}


 S2226C3 ::~S2226C3(){ note_dtor("S2226C3", this);}
void  S2226C3 ::v42(){vfunc_called(this, "_ZN7S2226C33v42Ev");}
void  S2226C3 ::v43(){vfunc_called(this, "_ZN7S2226C33v43Ev");}
void  S2226C3 ::v44(){vfunc_called(this, "_ZN7S2226C33v44Ev");}
void  S2226C3 ::v45(){vfunc_called(this, "_ZN7S2226C33v45Ev");}
void  S2226C3 ::v46(){vfunc_called(this, "_ZN7S2226C33v46Ev");}
S2226C3 ::S2226C3(){ note_ctor("S2226C3", this);} // tgen

static void Test_S2226C3()
{
  extern Class_Descriptor cd_S2226C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S2226C3, buf);
    S2226C3 *dp, &lv = *(dp=new (buf) S2226C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S2226C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2226C3)");
    check_base_class_offset(lv, (S2226C4_nt*), 0, "S2226C3");
    test_class_info(&lv, &cd_S2226C3);
    dp->~S2226C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2226C3(Test_S2226C3, "S2226C3", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S2226C3C1Ev();
extern void _ZN7S2226C3D1Ev();
Name_Map name_map_S2226C3[] = {
  NSPAIR(_ZN7S2226C3C1Ev),
  NSPAIR(_ZN7S2226C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2226C4_nt;
extern VTBL_ENTRY _ZTI10S2226C4_nt[];
extern  VTBL_ENTRY _ZTV10S2226C4_nt[];
static Base_Class bases_S2226C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2226C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S2226C3[];
extern void _ZN7S2226C3D1Ev();
extern void _ZN7S2226C3D0Ev();
extern void _ZN10S2226C4_nt3v38Ev();
extern void _ZN10S2226C4_nt3v39Ev();
extern void _ZN10S2226C4_nt3v40Ev();
extern void _ZN10S2226C4_nt3v41Ev();
extern void _ZN7S2226C33v42Ev();
extern void _ZN7S2226C33v43Ev();
extern void _ZN7S2226C33v44Ev();
extern void _ZN7S2226C33v45Ev();
extern void _ZN7S2226C33v46Ev();
static  VTBL_ENTRY vtc_S2226C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2226C3[0]),
  (VTBL_ENTRY)&_ZN7S2226C3D1Ev,
  (VTBL_ENTRY)&_ZN7S2226C3D0Ev,
  (VTBL_ENTRY)&_ZN10S2226C4_nt3v38Ev,
  (VTBL_ENTRY)&_ZN10S2226C4_nt3v39Ev,
  (VTBL_ENTRY)&_ZN10S2226C4_nt3v40Ev,
  (VTBL_ENTRY)&_ZN10S2226C4_nt3v41Ev,
  (VTBL_ENTRY)&_ZN7S2226C33v42Ev,
  (VTBL_ENTRY)&_ZN7S2226C33v43Ev,
  (VTBL_ENTRY)&_ZN7S2226C33v44Ev,
  (VTBL_ENTRY)&_ZN7S2226C33v45Ev,
  (VTBL_ENTRY)&_ZN7S2226C33v46Ev,
};
extern VTBL_ENTRY _ZTI7S2226C3[];
extern  VTBL_ENTRY _ZTV7S2226C3[];
Class_Descriptor cd_S2226C3 = {  "S2226C3", // class name
  bases_S2226C3, 1,
  &(vtc_S2226C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S2226C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2226C3),13, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2226C6  {
  char s2226c6f0[1024];
  int s2226c6f1[2];
  virtual  ~S2226C6(); // _ZN7S2226C6D1Ev
  virtual void  v47(); // _ZN7S2226C63v47Ev
  virtual void  v48(); // _ZN7S2226C63v48Ev
  virtual void  v49(); // _ZN7S2226C63v49Ev
  virtual void  v50(); // _ZN7S2226C63v50Ev
  virtual void  v51(); // _ZN7S2226C63v51Ev
  virtual void  v52(); // _ZN7S2226C63v52Ev
  virtual void  v53(); // _ZN7S2226C63v53Ev
  virtual void  v54(); // _ZN7S2226C63v54Ev
  virtual void  v55(); // _ZN7S2226C63v55Ev
  virtual void  v56(); // _ZN7S2226C63v56Ev
  virtual void  v57(); // _ZN7S2226C63v57Ev
  virtual void  v58(); // _ZN7S2226C63v58Ev
  virtual void  v59(); // _ZN7S2226C63v59Ev
  S2226C6(); // tgen
};
//SIG(-1 S2226C6) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 Fc[1024] Fi[2]}


 S2226C6 ::~S2226C6(){ note_dtor("S2226C6", this);}
void  S2226C6 ::v47(){vfunc_called(this, "_ZN7S2226C63v47Ev");}
void  S2226C6 ::v48(){vfunc_called(this, "_ZN7S2226C63v48Ev");}
void  S2226C6 ::v49(){vfunc_called(this, "_ZN7S2226C63v49Ev");}
void  S2226C6 ::v50(){vfunc_called(this, "_ZN7S2226C63v50Ev");}
void  S2226C6 ::v51(){vfunc_called(this, "_ZN7S2226C63v51Ev");}
void  S2226C6 ::v52(){vfunc_called(this, "_ZN7S2226C63v52Ev");}
void  S2226C6 ::v53(){vfunc_called(this, "_ZN7S2226C63v53Ev");}
void  S2226C6 ::v54(){vfunc_called(this, "_ZN7S2226C63v54Ev");}
void  S2226C6 ::v55(){vfunc_called(this, "_ZN7S2226C63v55Ev");}
void  S2226C6 ::v56(){vfunc_called(this, "_ZN7S2226C63v56Ev");}
void  S2226C6 ::v57(){vfunc_called(this, "_ZN7S2226C63v57Ev");}
void  S2226C6 ::v58(){vfunc_called(this, "_ZN7S2226C63v58Ev");}
void  S2226C6 ::v59(){vfunc_called(this, "_ZN7S2226C63v59Ev");}
S2226C6 ::S2226C6(){ note_ctor("S2226C6", this);} // tgen

static void Test_S2226C6()
{
  extern Class_Descriptor cd_S2226C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(131,260)];
    init_test(&cd_S2226C6, buf);
    S2226C6 *dp, &lv = *(dp=new (buf) S2226C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1040,1036), "sizeof(S2226C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2226C6)");
    check_field_offset(lv, s2226c6f0, ABISELECT(8,4), "S2226C6.s2226c6f0");
    check_field_offset(lv, s2226c6f1, ABISELECT(1032,1028), "S2226C6.s2226c6f1");
    test_class_info(&lv, &cd_S2226C6);
    dp->~S2226C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2226C6(Test_S2226C6, "S2226C6", ABISELECT(1040,1036));

#else // __cplusplus

extern void _ZN7S2226C6C1Ev();
extern void _ZN7S2226C6D1Ev();
Name_Map name_map_S2226C6[] = {
  NSPAIR(_ZN7S2226C6C1Ev),
  NSPAIR(_ZN7S2226C6D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S2226C6[];
extern void _ZN7S2226C6D1Ev();
extern void _ZN7S2226C6D0Ev();
extern void _ZN7S2226C63v47Ev();
extern void _ZN7S2226C63v48Ev();
extern void _ZN7S2226C63v49Ev();
extern void _ZN7S2226C63v50Ev();
extern void _ZN7S2226C63v51Ev();
extern void _ZN7S2226C63v52Ev();
extern void _ZN7S2226C63v53Ev();
extern void _ZN7S2226C63v54Ev();
extern void _ZN7S2226C63v55Ev();
extern void _ZN7S2226C63v56Ev();
extern void _ZN7S2226C63v57Ev();
extern void _ZN7S2226C63v58Ev();
extern void _ZN7S2226C63v59Ev();
static  VTBL_ENTRY vtc_S2226C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2226C6[0]),
  (VTBL_ENTRY)&_ZN7S2226C6D1Ev,
  (VTBL_ENTRY)&_ZN7S2226C6D0Ev,
  (VTBL_ENTRY)&_ZN7S2226C63v47Ev,
  (VTBL_ENTRY)&_ZN7S2226C63v48Ev,
  (VTBL_ENTRY)&_ZN7S2226C63v49Ev,
  (VTBL_ENTRY)&_ZN7S2226C63v50Ev,
  (VTBL_ENTRY)&_ZN7S2226C63v51Ev,
  (VTBL_ENTRY)&_ZN7S2226C63v52Ev,
  (VTBL_ENTRY)&_ZN7S2226C63v53Ev,
  (VTBL_ENTRY)&_ZN7S2226C63v54Ev,
  (VTBL_ENTRY)&_ZN7S2226C63v55Ev,
  (VTBL_ENTRY)&_ZN7S2226C63v56Ev,
  (VTBL_ENTRY)&_ZN7S2226C63v57Ev,
  (VTBL_ENTRY)&_ZN7S2226C63v58Ev,
  (VTBL_ENTRY)&_ZN7S2226C63v59Ev,
};
extern VTBL_ENTRY _ZTI7S2226C6[];
extern  VTBL_ENTRY _ZTV7S2226C6[];
Class_Descriptor cd_S2226C6 = {  "S2226C6", // class name
  0,0,//no base classes
  &(vtc_S2226C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(1040,1036), // object size
  NSPAIRA(_ZTI7S2226C6),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S2226C6),17, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2226C5  : S2226C6 {
  virtual  ~S2226C5(); // _ZN7S2226C5D1Ev
  virtual void  v60(); // _ZN7S2226C53v60Ev
  virtual void  v61(); // _ZN7S2226C53v61Ev
  virtual void  v62(); // _ZN7S2226C53v62Ev
  virtual void  v63(); // _ZN7S2226C53v63Ev
  S2226C5(); // tgen
};
//SIG(-1 S2226C5) C1{ BC2{ vd v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 Fc[1024] Fi[2]} vd v1 v2 v3 v4}


 S2226C5 ::~S2226C5(){ note_dtor("S2226C5", this);}
void  S2226C5 ::v60(){vfunc_called(this, "_ZN7S2226C53v60Ev");}
void  S2226C5 ::v61(){vfunc_called(this, "_ZN7S2226C53v61Ev");}
void  S2226C5 ::v62(){vfunc_called(this, "_ZN7S2226C53v62Ev");}
void  S2226C5 ::v63(){vfunc_called(this, "_ZN7S2226C53v63Ev");}
S2226C5 ::S2226C5(){ note_ctor("S2226C5", this);} // tgen

static void Test_S2226C5()
{
  extern Class_Descriptor cd_S2226C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(131,260)];
    init_test(&cd_S2226C5, buf);
    S2226C5 *dp, &lv = *(dp=new (buf) S2226C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1040,1036), "sizeof(S2226C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2226C5)");
    check_base_class_offset(lv, (S2226C6*), 0, "S2226C5");
    test_class_info(&lv, &cd_S2226C5);
    dp->~S2226C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2226C5(Test_S2226C5, "S2226C5", ABISELECT(1040,1036));

#else // __cplusplus

extern void _ZN7S2226C5C1Ev();
extern void _ZN7S2226C5D1Ev();
Name_Map name_map_S2226C5[] = {
  NSPAIR(_ZN7S2226C5C1Ev),
  NSPAIR(_ZN7S2226C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2226C6;
extern VTBL_ENTRY _ZTI7S2226C6[];
extern  VTBL_ENTRY _ZTV7S2226C6[];
static Base_Class bases_S2226C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2226C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S2226C5[];
extern void _ZN7S2226C5D1Ev();
extern void _ZN7S2226C5D0Ev();
extern void _ZN7S2226C63v47Ev();
extern void _ZN7S2226C63v48Ev();
extern void _ZN7S2226C63v49Ev();
extern void _ZN7S2226C63v50Ev();
extern void _ZN7S2226C63v51Ev();
extern void _ZN7S2226C63v52Ev();
extern void _ZN7S2226C63v53Ev();
extern void _ZN7S2226C63v54Ev();
extern void _ZN7S2226C63v55Ev();
extern void _ZN7S2226C63v56Ev();
extern void _ZN7S2226C63v57Ev();
extern void _ZN7S2226C63v58Ev();
extern void _ZN7S2226C63v59Ev();
extern void _ZN7S2226C53v60Ev();
extern void _ZN7S2226C53v61Ev();
extern void _ZN7S2226C53v62Ev();
extern void _ZN7S2226C53v63Ev();
static  VTBL_ENTRY vtc_S2226C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2226C5[0]),
  (VTBL_ENTRY)&_ZN7S2226C5D1Ev,
  (VTBL_ENTRY)&_ZN7S2226C5D0Ev,
  (VTBL_ENTRY)&_ZN7S2226C63v47Ev,
  (VTBL_ENTRY)&_ZN7S2226C63v48Ev,
  (VTBL_ENTRY)&_ZN7S2226C63v49Ev,
  (VTBL_ENTRY)&_ZN7S2226C63v50Ev,
  (VTBL_ENTRY)&_ZN7S2226C63v51Ev,
  (VTBL_ENTRY)&_ZN7S2226C63v52Ev,
  (VTBL_ENTRY)&_ZN7S2226C63v53Ev,
  (VTBL_ENTRY)&_ZN7S2226C63v54Ev,
  (VTBL_ENTRY)&_ZN7S2226C63v55Ev,
  (VTBL_ENTRY)&_ZN7S2226C63v56Ev,
  (VTBL_ENTRY)&_ZN7S2226C63v57Ev,
  (VTBL_ENTRY)&_ZN7S2226C63v58Ev,
  (VTBL_ENTRY)&_ZN7S2226C63v59Ev,
  (VTBL_ENTRY)&_ZN7S2226C53v60Ev,
  (VTBL_ENTRY)&_ZN7S2226C53v61Ev,
  (VTBL_ENTRY)&_ZN7S2226C53v62Ev,
  (VTBL_ENTRY)&_ZN7S2226C53v63Ev,
};
extern VTBL_ENTRY _ZTI7S2226C5[];
extern  VTBL_ENTRY _ZTV7S2226C5[];
Class_Descriptor cd_S2226C5 = {  "S2226C5", // class name
  bases_S2226C5, 1,
  &(vtc_S2226C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(1040,1036), // object size
  NSPAIRA(_ZTI7S2226C5),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2226C5),21, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2226C2  : S2226C3 , S2226C5 {
  virtual  ~S2226C2(); // _ZN7S2226C2D1Ev
  virtual void  v64(); // _ZN7S2226C23v64Ev
  virtual void  v65(); // _ZN7S2226C23v65Ev
  virtual void  v66(); // _ZN7S2226C23v66Ev
  virtual void  v67(); // _ZN7S2226C23v67Ev
  virtual void  v68(); // _ZN7S2226C23v68Ev
  virtual void  v69(); // _ZN7S2226C23v69Ev
  virtual void  v70(); // _ZN7S2226C23v70Ev
  virtual void  v71(); // _ZN7S2226C23v71Ev
  virtual void  v72(); // _ZN7S2226C23v72Ev
  virtual void  v73(); // _ZN7S2226C23v73Ev
  S2226C2(); // tgen
};
//SIG(-1 S2226C2) C1{ BC2{ BC3{ vd v11 v12 v13 v14} vd v15 v16 v17 v18 v19} BC4{ BC5{ vd v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 Fc[1024] Fi[2]} vd v33 v34 v35 v36} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10}


 S2226C2 ::~S2226C2(){ note_dtor("S2226C2", this);}
void  S2226C2 ::v64(){vfunc_called(this, "_ZN7S2226C23v64Ev");}
void  S2226C2 ::v65(){vfunc_called(this, "_ZN7S2226C23v65Ev");}
void  S2226C2 ::v66(){vfunc_called(this, "_ZN7S2226C23v66Ev");}
void  S2226C2 ::v67(){vfunc_called(this, "_ZN7S2226C23v67Ev");}
void  S2226C2 ::v68(){vfunc_called(this, "_ZN7S2226C23v68Ev");}
void  S2226C2 ::v69(){vfunc_called(this, "_ZN7S2226C23v69Ev");}
void  S2226C2 ::v70(){vfunc_called(this, "_ZN7S2226C23v70Ev");}
void  S2226C2 ::v71(){vfunc_called(this, "_ZN7S2226C23v71Ev");}
void  S2226C2 ::v72(){vfunc_called(this, "_ZN7S2226C23v72Ev");}
void  S2226C2 ::v73(){vfunc_called(this, "_ZN7S2226C23v73Ev");}
S2226C2 ::S2226C2(){ note_ctor("S2226C2", this);} // tgen

static void Test_S2226C2()
{
  extern Class_Descriptor cd_S2226C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(132,261)];
    init_test(&cd_S2226C2, buf);
    S2226C2 *dp, &lv = *(dp=new (buf) S2226C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1048,1040), "sizeof(S2226C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2226C2)");
    check_base_class_offset(lv, (S2226C4_nt*)(S2226C3*), 0, "S2226C2");
    check_base_class_offset(lv, (S2226C3*), 0, "S2226C2");
    check_base_class_offset(lv, (S2226C6*)(S2226C5*), ABISELECT(8,4), "S2226C2");
    check_base_class_offset(lv, (S2226C5*), ABISELECT(8,4), "S2226C2");
    test_class_info(&lv, &cd_S2226C2);
    dp->~S2226C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2226C2(Test_S2226C2, "S2226C2", ABISELECT(1048,1040));

#else // __cplusplus

extern void _ZN7S2226C2C1Ev();
extern void _ZN7S2226C2D1Ev();
Name_Map name_map_S2226C2[] = {
  NSPAIR(_ZN7S2226C2C1Ev),
  NSPAIR(_ZN7S2226C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2226C4_nt;
extern VTBL_ENTRY _ZTI10S2226C4_nt[];
extern  VTBL_ENTRY _ZTV10S2226C4_nt[];
extern Class_Descriptor cd_S2226C3;
extern VTBL_ENTRY _ZTI7S2226C3[];
extern  VTBL_ENTRY _ZTV7S2226C3[];
extern Class_Descriptor cd_S2226C6;
extern VTBL_ENTRY _ZTI7S2226C6[];
extern  VTBL_ENTRY _ZTV7S2226C6[];
extern Class_Descriptor cd_S2226C5;
extern VTBL_ENTRY _ZTI7S2226C5[];
extern  VTBL_ENTRY _ZTV7S2226C5[];
static Base_Class bases_S2226C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2226C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S2226C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2226C6,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S2226C5,    ABISELECT(8,4), //bcp->offset
    23, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S2226C2[];
extern void _ZN7S2226C2D1Ev();
extern void _ZN7S2226C2D0Ev();
extern void _ZN10S2226C4_nt3v38Ev();
extern void _ZN10S2226C4_nt3v39Ev();
extern void _ZN10S2226C4_nt3v40Ev();
extern void _ZN10S2226C4_nt3v41Ev();
extern void _ZN7S2226C33v42Ev();
extern void _ZN7S2226C33v43Ev();
extern void _ZN7S2226C33v44Ev();
extern void _ZN7S2226C33v45Ev();
extern void _ZN7S2226C33v46Ev();
extern void _ZN7S2226C23v64Ev();
extern void _ZN7S2226C23v65Ev();
extern void _ZN7S2226C23v66Ev();
extern void _ZN7S2226C23v67Ev();
extern void _ZN7S2226C23v68Ev();
extern void _ZN7S2226C23v69Ev();
extern void _ZN7S2226C23v70Ev();
extern void _ZN7S2226C23v71Ev();
extern void _ZN7S2226C23v72Ev();
extern void _ZN7S2226C23v73Ev();
extern void ABISELECT(_ZThn8_N7S2226C2D1Ev,_ZThn4_N7S2226C2D1Ev)();
extern void ABISELECT(_ZThn8_N7S2226C2D0Ev,_ZThn4_N7S2226C2D0Ev)();
extern void _ZN7S2226C63v47Ev();
extern void _ZN7S2226C63v48Ev();
extern void _ZN7S2226C63v49Ev();
extern void _ZN7S2226C63v50Ev();
extern void _ZN7S2226C63v51Ev();
extern void _ZN7S2226C63v52Ev();
extern void _ZN7S2226C63v53Ev();
extern void _ZN7S2226C63v54Ev();
extern void _ZN7S2226C63v55Ev();
extern void _ZN7S2226C63v56Ev();
extern void _ZN7S2226C63v57Ev();
extern void _ZN7S2226C63v58Ev();
extern void _ZN7S2226C63v59Ev();
extern void _ZN7S2226C53v60Ev();
extern void _ZN7S2226C53v61Ev();
extern void _ZN7S2226C53v62Ev();
extern void _ZN7S2226C53v63Ev();
static  VTBL_ENTRY vtc_S2226C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2226C2[0]),
  (VTBL_ENTRY)&_ZN7S2226C2D1Ev,
  (VTBL_ENTRY)&_ZN7S2226C2D0Ev,
  (VTBL_ENTRY)&_ZN10S2226C4_nt3v38Ev,
  (VTBL_ENTRY)&_ZN10S2226C4_nt3v39Ev,
  (VTBL_ENTRY)&_ZN10S2226C4_nt3v40Ev,
  (VTBL_ENTRY)&_ZN10S2226C4_nt3v41Ev,
  (VTBL_ENTRY)&_ZN7S2226C33v42Ev,
  (VTBL_ENTRY)&_ZN7S2226C33v43Ev,
  (VTBL_ENTRY)&_ZN7S2226C33v44Ev,
  (VTBL_ENTRY)&_ZN7S2226C33v45Ev,
  (VTBL_ENTRY)&_ZN7S2226C33v46Ev,
  (VTBL_ENTRY)&_ZN7S2226C23v64Ev,
  (VTBL_ENTRY)&_ZN7S2226C23v65Ev,
  (VTBL_ENTRY)&_ZN7S2226C23v66Ev,
  (VTBL_ENTRY)&_ZN7S2226C23v67Ev,
  (VTBL_ENTRY)&_ZN7S2226C23v68Ev,
  (VTBL_ENTRY)&_ZN7S2226C23v69Ev,
  (VTBL_ENTRY)&_ZN7S2226C23v70Ev,
  (VTBL_ENTRY)&_ZN7S2226C23v71Ev,
  (VTBL_ENTRY)&_ZN7S2226C23v72Ev,
  (VTBL_ENTRY)&_ZN7S2226C23v73Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S2226C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S2226C2D1Ev,_ZThn4_N7S2226C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S2226C2D0Ev,_ZThn4_N7S2226C2D0Ev),
  (VTBL_ENTRY)&_ZN7S2226C63v47Ev,
  (VTBL_ENTRY)&_ZN7S2226C63v48Ev,
  (VTBL_ENTRY)&_ZN7S2226C63v49Ev,
  (VTBL_ENTRY)&_ZN7S2226C63v50Ev,
  (VTBL_ENTRY)&_ZN7S2226C63v51Ev,
  (VTBL_ENTRY)&_ZN7S2226C63v52Ev,
  (VTBL_ENTRY)&_ZN7S2226C63v53Ev,
  (VTBL_ENTRY)&_ZN7S2226C63v54Ev,
  (VTBL_ENTRY)&_ZN7S2226C63v55Ev,
  (VTBL_ENTRY)&_ZN7S2226C63v56Ev,
  (VTBL_ENTRY)&_ZN7S2226C63v57Ev,
  (VTBL_ENTRY)&_ZN7S2226C63v58Ev,
  (VTBL_ENTRY)&_ZN7S2226C63v59Ev,
  (VTBL_ENTRY)&_ZN7S2226C53v60Ev,
  (VTBL_ENTRY)&_ZN7S2226C53v61Ev,
  (VTBL_ENTRY)&_ZN7S2226C53v62Ev,
  (VTBL_ENTRY)&_ZN7S2226C53v63Ev,
};
extern VTBL_ENTRY _ZTI7S2226C2[];
extern  VTBL_ENTRY _ZTV7S2226C2[];
Class_Descriptor cd_S2226C2 = {  "S2226C2", // class name
  bases_S2226C2, 4,
  &(vtc_S2226C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(1048,1040), // object size
  NSPAIRA(_ZTI7S2226C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S2226C2),44, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  4, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2226C7_nt  {
  virtual  ~S2226C7_nt(); // _ZN10S2226C7_ntD1Ev
  virtual void  v74(); // _ZN10S2226C7_nt3v74Ev
  virtual void  v75(); // _ZN10S2226C7_nt3v75Ev
  S2226C7_nt(); // tgen
};
//SIG(-1 S2226C7_nt) C1{ vd v1 v2}


 S2226C7_nt ::~S2226C7_nt(){ note_dtor("S2226C7_nt", this);}
void  S2226C7_nt ::v74(){vfunc_called(this, "_ZN10S2226C7_nt3v74Ev");}
void  S2226C7_nt ::v75(){vfunc_called(this, "_ZN10S2226C7_nt3v75Ev");}
S2226C7_nt ::S2226C7_nt(){ note_ctor("S2226C7_nt", this);} // tgen

//skip512 S2226C7_nt

#else // __cplusplus

extern void _ZN10S2226C7_ntC1Ev();
extern void _ZN10S2226C7_ntD1Ev();
Name_Map name_map_S2226C7_nt[] = {
  NSPAIR(_ZN10S2226C7_ntC1Ev),
  NSPAIR(_ZN10S2226C7_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S2226C7_nt[];
extern void _ZN10S2226C7_ntD1Ev();
extern void _ZN10S2226C7_ntD0Ev();
extern void _ZN10S2226C7_nt3v74Ev();
extern void _ZN10S2226C7_nt3v75Ev();
static  VTBL_ENTRY vtc_S2226C7_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S2226C7_nt[0]),
  (VTBL_ENTRY)&_ZN10S2226C7_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S2226C7_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S2226C7_nt3v74Ev,
  (VTBL_ENTRY)&_ZN10S2226C7_nt3v75Ev,
};
extern VTBL_ENTRY _ZTI10S2226C7_nt[];
VTBL_ENTRY *P__ZTI10S2226C7_nt = _ZTI10S2226C7_nt; 
extern  VTBL_ENTRY _ZTV10S2226C7_nt[];
Class_Descriptor cd_S2226C7_nt = {  "S2226C7_nt", // class name
  0,0,//no base classes
  &(vtc_S2226C7_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI10S2226C7_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S2226C7_nt),6, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2226C8  {
  virtual  ~S2226C8(); // _ZN7S2226C8D1Ev
  virtual void  v76(); // _ZN7S2226C83v76Ev
  virtual void  v77(); // _ZN7S2226C83v77Ev
  S2226C8(); // tgen
};
//SIG(-1 S2226C8) C1{ vd v1 v2}


 S2226C8 ::~S2226C8(){ note_dtor("S2226C8", this);}
void  S2226C8 ::v76(){vfunc_called(this, "_ZN7S2226C83v76Ev");}
void  S2226C8 ::v77(){vfunc_called(this, "_ZN7S2226C83v77Ev");}
S2226C8 ::S2226C8(){ note_ctor("S2226C8", this);} // tgen

static void Test_S2226C8()
{
  extern Class_Descriptor cd_S2226C8;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S2226C8, buf);
    S2226C8 *dp, &lv = *(dp=new (buf) S2226C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S2226C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2226C8)");
    test_class_info(&lv, &cd_S2226C8);
    dp->~S2226C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2226C8(Test_S2226C8, "S2226C8", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S2226C8C1Ev();
extern void _ZN7S2226C8D1Ev();
Name_Map name_map_S2226C8[] = {
  NSPAIR(_ZN7S2226C8C1Ev),
  NSPAIR(_ZN7S2226C8D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S2226C8[];
extern void _ZN7S2226C8D1Ev();
extern void _ZN7S2226C8D0Ev();
extern void _ZN7S2226C83v76Ev();
extern void _ZN7S2226C83v77Ev();
static  VTBL_ENTRY vtc_S2226C8[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2226C8[0]),
  (VTBL_ENTRY)&_ZN7S2226C8D1Ev,
  (VTBL_ENTRY)&_ZN7S2226C8D0Ev,
  (VTBL_ENTRY)&_ZN7S2226C83v76Ev,
  (VTBL_ENTRY)&_ZN7S2226C83v77Ev,
};
extern VTBL_ENTRY _ZTI7S2226C8[];
extern  VTBL_ENTRY _ZTV7S2226C8[];
Class_Descriptor cd_S2226C8 = {  "S2226C8", // class name
  0,0,//no base classes
  &(vtc_S2226C8[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S2226C8),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S2226C8),6, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2226C10  {
  __tsi64 s2226c10f0;
  __tsi64 s2226c10f1;
  int s2226c10f2;
  int s2226c10f3;
  void  mf2226c10(); // _ZN8S2226C109mf2226c10Ev
};
//SIG(-1 S2226C10) C1{ m FL[2] Fi[2]}


void  S2226C10 ::mf2226c10(){}

static void Test_S2226C10()
{
  {
    init_simple_test("S2226C10");
    S2226C10 lv;
    check2(sizeof(lv), 24, "sizeof(S2226C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2226C10)");
    check_field_offset(lv, s2226c10f0, 0, "S2226C10.s2226c10f0");
    check_field_offset(lv, s2226c10f1, 8, "S2226C10.s2226c10f1");
    check_field_offset(lv, s2226c10f2, 16, "S2226C10.s2226c10f2");
    check_field_offset(lv, s2226c10f3, 20, "S2226C10.s2226c10f3");
  }
}
static Arrange_To_Call_Me vS2226C10(Test_S2226C10, "S2226C10", 24);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2226C11  {
  char s2226c11f0[8];
  __tsi64 s2226c11f1;
  __tsi64 s2226c11f2;
  __tsi64 s2226c11f3;
  __tsi64 s2226c11f4;
  __tsi64 s2226c11f5;
  int s2226c11f6;
  int s2226c11f7;
  void  mf2226c11(); // _ZN8S2226C119mf2226c11Ev
};
//SIG(-1 S2226C11) C1{ m Fc[8] FL[5] Fi[2]}


void  S2226C11 ::mf2226c11(){}

static void Test_S2226C11()
{
  {
    init_simple_test("S2226C11");
    S2226C11 lv;
    check2(sizeof(lv), 56, "sizeof(S2226C11)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2226C11)");
    check_field_offset(lv, s2226c11f0, 0, "S2226C11.s2226c11f0");
    check_field_offset(lv, s2226c11f1, 8, "S2226C11.s2226c11f1");
    check_field_offset(lv, s2226c11f2, 16, "S2226C11.s2226c11f2");
    check_field_offset(lv, s2226c11f3, 24, "S2226C11.s2226c11f3");
    check_field_offset(lv, s2226c11f4, 32, "S2226C11.s2226c11f4");
    check_field_offset(lv, s2226c11f5, 40, "S2226C11.s2226c11f5");
    check_field_offset(lv, s2226c11f6, 48, "S2226C11.s2226c11f6");
    check_field_offset(lv, s2226c11f7, 52, "S2226C11.s2226c11f7");
  }
}
static Arrange_To_Call_Me vS2226C11(Test_S2226C11, "S2226C11", 56);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2226C9  {
  char s2226c9f0[2];
  void *s2226c9f1;
  __tsi64 s2226c9f2;
  ::S2226C10 s2226c9f3;
  __tsi64 s2226c9f4[4];
  ::S2226C10 s2226c9f5;
  __tsi64 s2226c9f6;
  ::S2226C10 s2226c9f7;
  char s2226c9f8;
  ::S2226C11 s2226c9f9;
  int s2226c9f10;
  void  mf2226c9(); // _ZN7S2226C98mf2226c9Ev
  virtual  ~S2226C9(); // _ZN7S2226C9D1Ev
  S2226C9(); // tgen
};
//SIG(-1 S2226C9) C1{ vd m Fc[2] Fp FL FC2{ m FL[2] Fi[2]} FL[4] FC2 FL FC2 Fc FC3{ m Fc[8] FL[5] Fi[2]} Fi}


void  S2226C9 ::mf2226c9(){}
 S2226C9 ::~S2226C9(){ note_dtor("S2226C9", this);}
S2226C9 ::S2226C9(){ note_ctor("S2226C9", this);} // tgen

static void Test_S2226C9()
{
  extern Class_Descriptor cd_S2226C9;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(28,50)];
    init_test(&cd_S2226C9, buf);
    S2226C9 *dp, &lv = *(dp=new (buf) S2226C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(216,196), "sizeof(S2226C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2226C9)");
    check_field_offset(lv, s2226c9f0, ABISELECT(8,4), "S2226C9.s2226c9f0");
    check_field_offset(lv, s2226c9f1, ABISELECT(16,8), "S2226C9.s2226c9f1");
    check_field_offset(lv, s2226c9f2, ABISELECT(24,12), "S2226C9.s2226c9f2");
    check_field_offset(lv, s2226c9f3, ABISELECT(32,20), "S2226C9.s2226c9f3");
    check_field_offset(lv, s2226c9f4, ABISELECT(56,44), "S2226C9.s2226c9f4");
    check_field_offset(lv, s2226c9f5, ABISELECT(88,76), "S2226C9.s2226c9f5");
    check_field_offset(lv, s2226c9f6, ABISELECT(112,100), "S2226C9.s2226c9f6");
    check_field_offset(lv, s2226c9f7, ABISELECT(120,108), "S2226C9.s2226c9f7");
    check_field_offset(lv, s2226c9f8, ABISELECT(144,132), "S2226C9.s2226c9f8");
    check_field_offset(lv, s2226c9f9, ABISELECT(152,136), "S2226C9.s2226c9f9");
    check_field_offset(lv, s2226c9f10, ABISELECT(208,192), "S2226C9.s2226c9f10");
    test_class_info(&lv, &cd_S2226C9);
    dp->~S2226C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2226C9(Test_S2226C9, "S2226C9", ABISELECT(216,196));

#else // __cplusplus

extern void _ZN7S2226C9C1Ev();
extern void _ZN7S2226C9D1Ev();
Name_Map name_map_S2226C9[] = {
  NSPAIR(_ZN7S2226C9C1Ev),
  NSPAIR(_ZN7S2226C9D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S2226C9[];
extern void _ZN7S2226C9D1Ev();
extern void _ZN7S2226C9D0Ev();
static  VTBL_ENTRY vtc_S2226C9[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2226C9[0]),
  (VTBL_ENTRY)&_ZN7S2226C9D1Ev,
  (VTBL_ENTRY)&_ZN7S2226C9D0Ev,
};
extern VTBL_ENTRY _ZTI7S2226C9[];
extern  VTBL_ENTRY _ZTV7S2226C9[];
Class_Descriptor cd_S2226C9 = {  "S2226C9", // class name
  0,0,//no base classes
  &(vtc_S2226C9[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(216,196), // object size
  NSPAIRA(_ZTI7S2226C9),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S2226C9),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2226C12  {
  void *s2226c12f0[2];
  int s2226c12f1;
  void *s2226c12f2;
  int s2226c12f3[2];
  char s2226c12f4[256];
  int s2226c12f5;
  char s2226c12f6[3];
  int s2226c12f7;
  char s2226c12f8;
  void  mf2226c12(); // _ZN8S2226C129mf2226c12Ev
};
//SIG(-1 S2226C12) C1{ m Fp[2] Fi Fp Fi[2] Fc[256] Fi Fc[3] Fi Fc}


void  S2226C12 ::mf2226c12(){}

static void Test_S2226C12()
{
  {
    init_simple_test("S2226C12");
    S2226C12 lv;
    check2(sizeof(lv), ABISELECT(312,296), "sizeof(S2226C12)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2226C12)");
    check_field_offset(lv, s2226c12f0, 0, "S2226C12.s2226c12f0");
    check_field_offset(lv, s2226c12f1, ABISELECT(16,8), "S2226C12.s2226c12f1");
    check_field_offset(lv, s2226c12f2, ABISELECT(24,12), "S2226C12.s2226c12f2");
    check_field_offset(lv, s2226c12f3, ABISELECT(32,16), "S2226C12.s2226c12f3");
    check_field_offset(lv, s2226c12f4, ABISELECT(40,24), "S2226C12.s2226c12f4");
    check_field_offset(lv, s2226c12f5, ABISELECT(296,280), "S2226C12.s2226c12f5");
    check_field_offset(lv, s2226c12f6, ABISELECT(300,284), "S2226C12.s2226c12f6");
    check_field_offset(lv, s2226c12f7, ABISELECT(304,288), "S2226C12.s2226c12f7");
    check_field_offset(lv, s2226c12f8, ABISELECT(308,292), "S2226C12.s2226c12f8");
  }
}
static Arrange_To_Call_Me vS2226C12(Test_S2226C12, "S2226C12", ABISELECT(312,296));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2226C14  {
  ::S2226C10 s2226c14f0;
  int s2226c14f1[2];
  void  mf2226c14(); // _ZN8S2226C149mf2226c14Ev
};
//SIG(-1 S2226C14) C1{ m FC2{ m FL[2] Fi[2]} Fi[2]}


void  S2226C14 ::mf2226c14(){}

static void Test_S2226C14()
{
  {
    init_simple_test("S2226C14");
    S2226C14 lv;
    check2(sizeof(lv), 32, "sizeof(S2226C14)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2226C14)");
    check_field_offset(lv, s2226c14f0, 0, "S2226C14.s2226c14f0");
    check_field_offset(lv, s2226c14f1, 24, "S2226C14.s2226c14f1");
  }
}
static Arrange_To_Call_Me vS2226C14(Test_S2226C14, "S2226C14", 32);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2226C13  {
  void *s2226c13f0;
  int s2226c13f1[3];
  ::S2226C14 s2226c13f2;
  ::S2226C14 s2226c13f3;
  void  mf2226c13(); // _ZN8S2226C139mf2226c13Ev
  virtual  ~S2226C13(); // _ZN8S2226C13D1Ev
  S2226C13(); // tgen
};
//SIG(-1 S2226C13) C1{ vd m Fp Fi[3] FC2{ m FC3{ m FL[2] Fi[2]} Fi[2]} FC2}


void  S2226C13 ::mf2226c13(){}
 S2226C13 ::~S2226C13(){ note_dtor("S2226C13", this);}
S2226C13 ::S2226C13(){ note_ctor("S2226C13", this);} // tgen

static void Test_S2226C13()
{
  extern Class_Descriptor cd_S2226C13;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,22)];
    init_test(&cd_S2226C13, buf);
    S2226C13 *dp, &lv = *(dp=new (buf) S2226C13());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,84), "sizeof(S2226C13)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2226C13)");
    check_field_offset(lv, s2226c13f0, ABISELECT(8,4), "S2226C13.s2226c13f0");
    check_field_offset(lv, s2226c13f1, ABISELECT(16,8), "S2226C13.s2226c13f1");
    check_field_offset(lv, s2226c13f2, ABISELECT(32,20), "S2226C13.s2226c13f2");
    check_field_offset(lv, s2226c13f3, ABISELECT(64,52), "S2226C13.s2226c13f3");
    test_class_info(&lv, &cd_S2226C13);
    dp->~S2226C13();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2226C13(Test_S2226C13, "S2226C13", ABISELECT(96,84));

#else // __cplusplus

extern void _ZN8S2226C13C1Ev();
extern void _ZN8S2226C13D1Ev();
Name_Map name_map_S2226C13[] = {
  NSPAIR(_ZN8S2226C13C1Ev),
  NSPAIR(_ZN8S2226C13D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S2226C13[];
extern void _ZN8S2226C13D1Ev();
extern void _ZN8S2226C13D0Ev();
static  VTBL_ENTRY vtc_S2226C13[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S2226C13[0]),
  (VTBL_ENTRY)&_ZN8S2226C13D1Ev,
  (VTBL_ENTRY)&_ZN8S2226C13D0Ev,
};
extern VTBL_ENTRY _ZTI8S2226C13[];
extern  VTBL_ENTRY _ZTV8S2226C13[];
Class_Descriptor cd_S2226C13 = {  "S2226C13", // class name
  0,0,//no base classes
  &(vtc_S2226C13[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,84), // object size
  NSPAIRA(_ZTI8S2226C13),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S2226C13),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2226C16  {
  int s2226c16f0;
  int s2226c16f1;
};
//SIG(1 S2226C16) C1{ Fi[2]}



static void Test_S2226C16()
{
  {
    init_simple_test("S2226C16");
    S2226C16 lv;
    check2(sizeof(lv), 8, "sizeof(S2226C16)");
    check2(__alignof__(lv), 4, "__alignof__(S2226C16)");
    check_field_offset(lv, s2226c16f0, 0, "S2226C16.s2226c16f0");
    check_field_offset(lv, s2226c16f1, 4, "S2226C16.s2226c16f1");
  }
}
static Arrange_To_Call_Me vS2226C16(Test_S2226C16, "S2226C16", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

union  S2226C15  {
  ::S2226C16 s2226c15f0;
  __tsi64 s2226c15f1;
};
//SIG(1 S2226C15) U1{ FC2{ Fi Fi} FL}

#endif // __cplusplus
#ifdef __cplusplus

struct  S2226C17  {
  ::S2226C10 s2226c17f0;
  int s2226c17f1;
  void  mf2226c17(); // _ZN8S2226C179mf2226c17Ev
};
//SIG(-1 S2226C17) C1{ m FC2{ m FL[2] Fi[2]} Fi}


void  S2226C17 ::mf2226c17(){}

static void Test_S2226C17()
{
  {
    init_simple_test("S2226C17");
    S2226C17 lv;
    check2(sizeof(lv), ABISELECT(32,28), "sizeof(S2226C17)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2226C17)");
    check_field_offset(lv, s2226c17f0, 0, "S2226C17.s2226c17f0");
    check_field_offset(lv, s2226c17f1, 24, "S2226C17.s2226c17f1");
  }
}
static Arrange_To_Call_Me vS2226C17(Test_S2226C17, "S2226C17", ABISELECT(32,28));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2226C1  : S2226C2 , S2226C7_nt , S2226C8 {
  void *s2226c1f0;
  ::S2226C9 s2226c1f1;
  int s2226c1f2;
  char s2226c1f3;
  void *s2226c1f4;
  ::S2226C12 s2226c1f5;
  int s2226c1f6[2];
  __tsi64 s2226c1f7;
  int s2226c1f8;
  __tsi64 s2226c1f9;
  char s2226c1f10[2];
  int s2226c1f11[3];
  ::S2226C13 s2226c1f12;
  int s2226c1f13;
  ::S2226C15 s2226c1f14;
  void *s2226c1f15;
  char s2226c1f16;
  ::S2226C17 s2226c1f17;
  virtual  ~S2226C1(); // _ZN7S2226C1D1Ev
  virtual void  v1(); // _ZN7S2226C12v1Ev
  virtual void  v2(); // _ZN7S2226C12v2Ev
  virtual void  v3(); // _ZN7S2226C12v3Ev
  virtual void  v4(); // _ZN7S2226C12v4Ev
  virtual void  v5(); // _ZN7S2226C12v5Ev
  virtual void  v6(); // _ZN7S2226C12v6Ev
  virtual void  v7(); // _ZN7S2226C12v7Ev
  virtual void  v8(); // _ZN7S2226C12v8Ev
  virtual void  v9(); // _ZN7S2226C12v9Ev
  virtual void  v10(); // _ZN7S2226C13v10Ev
  virtual void  v11(); // _ZN7S2226C13v11Ev
  virtual void  v12(); // _ZN7S2226C13v12Ev
  virtual void  v13(); // _ZN7S2226C13v13Ev
  virtual void  v14(); // _ZN7S2226C13v14Ev
  virtual void  v15(); // _ZN7S2226C13v15Ev
  virtual void  v16(); // _ZN7S2226C13v16Ev
  virtual void  v17(); // _ZN7S2226C13v17Ev
  virtual void  v18(); // _ZN7S2226C13v18Ev
  virtual void  v19(); // _ZN7S2226C13v19Ev
  virtual void  v20(); // _ZN7S2226C13v20Ev
  virtual void  v21(); // _ZN7S2226C13v21Ev
  virtual void  v22(); // _ZN7S2226C13v22Ev
  virtual void  v23(); // _ZN7S2226C13v23Ev
  virtual void  v24(); // _ZN7S2226C13v24Ev
  virtual void  v25(); // _ZN7S2226C13v25Ev
  virtual void  v26(); // _ZN7S2226C13v26Ev
  virtual void  v27(); // _ZN7S2226C13v27Ev
  virtual void  v28(); // _ZN7S2226C13v28Ev
  virtual void  v29(); // _ZN7S2226C13v29Ev
  virtual void  v30(); // _ZN7S2226C13v30Ev
  virtual void  v31(); // _ZN7S2226C13v31Ev
  virtual void  v32(); // _ZN7S2226C13v32Ev
  virtual void  v33(); // _ZN7S2226C13v33Ev
  virtual void  v34(); // _ZN7S2226C13v34Ev
  virtual void  v35(); // _ZN7S2226C13v35Ev
  virtual void  v36(); // _ZN7S2226C13v36Ev
  virtual void  v37(); // _ZN7S2226C13v37Ev
  S2226C1(); // tgen
};
//SIG(1 S2226C1) C1{ BC2{ BC3{ BC4{ vd v38 v39 v40 v41} vd v42 v43 v44 v45 v46} BC5{ BC6{ vd v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 Fc[1024] Fi[2]} vd v60 v61 v62 v63} vd v64 v65 v66 v67 v68 v69 v70 v71 v72 v73} BC7{ vd v74 v75} BC8{ vd v76 v77} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 Fp FC9{ vd m Fc[2] Fp FL FC10{ m FL[2] Fi[2]} FL[4] FC10 FL FC10 Fc FC11{ m Fc[8] FL[5] Fi[2]} Fi} Fi Fc Fp FC12{ m Fp[2] Fi Fp Fi[2] Fc[256] Fi Fc[3] Fi Fc} Fi[2] FL Fi FL Fc[2] Fi[3] FC13{ vd m Fp Fi[3] FC14{ m FC10 Fi[2]} FC14} Fi FU15{ FC16{ Fi Fi} FL} Fp Fc FC17{ m FC10 Fi}}


 S2226C1 ::~S2226C1(){ note_dtor("S2226C1", this);}
void  S2226C1 ::v1(){vfunc_called(this, "_ZN7S2226C12v1Ev");}
void  S2226C1 ::v2(){vfunc_called(this, "_ZN7S2226C12v2Ev");}
void  S2226C1 ::v3(){vfunc_called(this, "_ZN7S2226C12v3Ev");}
void  S2226C1 ::v4(){vfunc_called(this, "_ZN7S2226C12v4Ev");}
void  S2226C1 ::v5(){vfunc_called(this, "_ZN7S2226C12v5Ev");}
void  S2226C1 ::v6(){vfunc_called(this, "_ZN7S2226C12v6Ev");}
void  S2226C1 ::v7(){vfunc_called(this, "_ZN7S2226C12v7Ev");}
void  S2226C1 ::v8(){vfunc_called(this, "_ZN7S2226C12v8Ev");}
void  S2226C1 ::v9(){vfunc_called(this, "_ZN7S2226C12v9Ev");}
void  S2226C1 ::v10(){vfunc_called(this, "_ZN7S2226C13v10Ev");}
void  S2226C1 ::v11(){vfunc_called(this, "_ZN7S2226C13v11Ev");}
void  S2226C1 ::v12(){vfunc_called(this, "_ZN7S2226C13v12Ev");}
void  S2226C1 ::v13(){vfunc_called(this, "_ZN7S2226C13v13Ev");}
void  S2226C1 ::v14(){vfunc_called(this, "_ZN7S2226C13v14Ev");}
void  S2226C1 ::v15(){vfunc_called(this, "_ZN7S2226C13v15Ev");}
void  S2226C1 ::v16(){vfunc_called(this, "_ZN7S2226C13v16Ev");}
void  S2226C1 ::v17(){vfunc_called(this, "_ZN7S2226C13v17Ev");}
void  S2226C1 ::v18(){vfunc_called(this, "_ZN7S2226C13v18Ev");}
void  S2226C1 ::v19(){vfunc_called(this, "_ZN7S2226C13v19Ev");}
void  S2226C1 ::v20(){vfunc_called(this, "_ZN7S2226C13v20Ev");}
void  S2226C1 ::v21(){vfunc_called(this, "_ZN7S2226C13v21Ev");}
void  S2226C1 ::v22(){vfunc_called(this, "_ZN7S2226C13v22Ev");}
void  S2226C1 ::v23(){vfunc_called(this, "_ZN7S2226C13v23Ev");}
void  S2226C1 ::v24(){vfunc_called(this, "_ZN7S2226C13v24Ev");}
void  S2226C1 ::v25(){vfunc_called(this, "_ZN7S2226C13v25Ev");}
void  S2226C1 ::v26(){vfunc_called(this, "_ZN7S2226C13v26Ev");}
void  S2226C1 ::v27(){vfunc_called(this, "_ZN7S2226C13v27Ev");}
void  S2226C1 ::v28(){vfunc_called(this, "_ZN7S2226C13v28Ev");}
void  S2226C1 ::v29(){vfunc_called(this, "_ZN7S2226C13v29Ev");}
void  S2226C1 ::v30(){vfunc_called(this, "_ZN7S2226C13v30Ev");}
void  S2226C1 ::v31(){vfunc_called(this, "_ZN7S2226C13v31Ev");}
void  S2226C1 ::v32(){vfunc_called(this, "_ZN7S2226C13v32Ev");}
void  S2226C1 ::v33(){vfunc_called(this, "_ZN7S2226C13v33Ev");}
void  S2226C1 ::v34(){vfunc_called(this, "_ZN7S2226C13v34Ev");}
void  S2226C1 ::v35(){vfunc_called(this, "_ZN7S2226C13v35Ev");}
void  S2226C1 ::v36(){vfunc_called(this, "_ZN7S2226C13v36Ev");}
void  S2226C1 ::v37(){vfunc_called(this, "_ZN7S2226C13v37Ev");}
S2226C1 ::S2226C1(){ note_ctor("S2226C1", this);} // tgen

static void Test_S2226C1()
{
  extern Class_Descriptor cd_S2226C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(229,434)];
    init_test(&cd_S2226C1, buf);
    S2226C1 *dp, &lv = *(dp=new (buf) S2226C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1824,1732), "sizeof(S2226C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2226C1)");
    check_base_class_offset(lv, (S2226C4_nt*)(S2226C3*)(S2226C2*), 0, "S2226C1");
    check_base_class_offset(lv, (S2226C3*)(S2226C2*), 0, "S2226C1");
    check_base_class_offset(lv, (S2226C6*)(S2226C5*)(S2226C2*), ABISELECT(8,4), "S2226C1");
    check_base_class_offset(lv, (S2226C5*)(S2226C2*), ABISELECT(8,4), "S2226C1");
    check_base_class_offset(lv, (S2226C2*), 0, "S2226C1");
    check_base_class_offset(lv, (S2226C7_nt*), ABISELECT(1048,1040), "S2226C1");
    check_base_class_offset(lv, (S2226C8*), ABISELECT(1056,1044), "S2226C1");
    check_field_offset(lv, s2226c1f0, ABISELECT(1064,1048), "S2226C1.s2226c1f0");
    check_field_offset(lv, s2226c1f1, ABISELECT(1072,1052), "S2226C1.s2226c1f1");
    check_field_offset(lv, s2226c1f2, ABISELECT(1288,1248), "S2226C1.s2226c1f2");
    check_field_offset(lv, s2226c1f3, ABISELECT(1292,1252), "S2226C1.s2226c1f3");
    check_field_offset(lv, s2226c1f4, ABISELECT(1296,1256), "S2226C1.s2226c1f4");
    check_field_offset(lv, s2226c1f5, ABISELECT(1304,1260), "S2226C1.s2226c1f5");
    check_field_offset(lv, s2226c1f6, ABISELECT(1616,1556), "S2226C1.s2226c1f6");
    check_field_offset(lv, s2226c1f7, ABISELECT(1624,1564), "S2226C1.s2226c1f7");
    check_field_offset(lv, s2226c1f8, ABISELECT(1632,1572), "S2226C1.s2226c1f8");
    check_field_offset(lv, s2226c1f9, ABISELECT(1640,1576), "S2226C1.s2226c1f9");
    check_field_offset(lv, s2226c1f10, ABISELECT(1648,1584), "S2226C1.s2226c1f10");
    check_field_offset(lv, s2226c1f11, ABISELECT(1652,1588), "S2226C1.s2226c1f11");
    check_field_offset(lv, s2226c1f12, ABISELECT(1664,1600), "S2226C1.s2226c1f12");
    check_field_offset(lv, s2226c1f13, ABISELECT(1760,1684), "S2226C1.s2226c1f13");
    check_field_offset(lv, s2226c1f14, ABISELECT(1768,1688), "S2226C1.s2226c1f14");
    check_field_offset(lv, s2226c1f15, ABISELECT(1776,1696), "S2226C1.s2226c1f15");
    check_field_offset(lv, s2226c1f16, ABISELECT(1784,1700), "S2226C1.s2226c1f16");
    check_field_offset(lv, s2226c1f17, ABISELECT(1792,1704), "S2226C1.s2226c1f17");
    test_class_info(&lv, &cd_S2226C1);
    dp->~S2226C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2226C1(Test_S2226C1, "S2226C1", ABISELECT(1824,1732));

#else // __cplusplus

extern void _ZN7S2226C1C1Ev();
extern void _ZN7S2226C1D1Ev();
Name_Map name_map_S2226C1[] = {
  NSPAIR(_ZN7S2226C1C1Ev),
  NSPAIR(_ZN7S2226C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2226C4_nt;
extern VTBL_ENTRY _ZTI10S2226C4_nt[];
extern  VTBL_ENTRY _ZTV10S2226C4_nt[];
extern Class_Descriptor cd_S2226C3;
extern VTBL_ENTRY _ZTI7S2226C3[];
extern  VTBL_ENTRY _ZTV7S2226C3[];
extern Class_Descriptor cd_S2226C6;
extern VTBL_ENTRY _ZTI7S2226C6[];
extern  VTBL_ENTRY _ZTV7S2226C6[];
extern Class_Descriptor cd_S2226C5;
extern VTBL_ENTRY _ZTI7S2226C5[];
extern  VTBL_ENTRY _ZTV7S2226C5[];
extern Class_Descriptor cd_S2226C2;
extern VTBL_ENTRY _ZTI7S2226C2[];
extern  VTBL_ENTRY _ZTV7S2226C2[];
extern Class_Descriptor cd_S2226C7_nt;
extern VTBL_ENTRY _ZTI10S2226C7_nt[];
extern  VTBL_ENTRY _ZTV10S2226C7_nt[];
extern Class_Descriptor cd_S2226C8;
extern VTBL_ENTRY _ZTI7S2226C8[];
extern  VTBL_ENTRY _ZTV7S2226C8[];
static Base_Class bases_S2226C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2226C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S2226C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S2226C6,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S2226C5,    ABISELECT(8,4), //bcp->offset
    60, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S2226C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2226C7_nt,    ABISELECT(1048,1040), //bcp->offset
    81, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2226C8,    ABISELECT(1056,1044), //bcp->offset
    87, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S2226C1[];
extern void _ZN7S2226C1D1Ev();
extern void _ZN7S2226C1D0Ev();
extern void _ZN10S2226C4_nt3v38Ev();
extern void _ZN10S2226C4_nt3v39Ev();
extern void _ZN10S2226C4_nt3v40Ev();
extern void _ZN10S2226C4_nt3v41Ev();
extern void _ZN7S2226C33v42Ev();
extern void _ZN7S2226C33v43Ev();
extern void _ZN7S2226C33v44Ev();
extern void _ZN7S2226C33v45Ev();
extern void _ZN7S2226C33v46Ev();
extern void _ZN7S2226C23v64Ev();
extern void _ZN7S2226C23v65Ev();
extern void _ZN7S2226C23v66Ev();
extern void _ZN7S2226C23v67Ev();
extern void _ZN7S2226C23v68Ev();
extern void _ZN7S2226C23v69Ev();
extern void _ZN7S2226C23v70Ev();
extern void _ZN7S2226C23v71Ev();
extern void _ZN7S2226C23v72Ev();
extern void _ZN7S2226C23v73Ev();
extern void _ZN7S2226C12v1Ev();
extern void _ZN7S2226C12v2Ev();
extern void _ZN7S2226C12v3Ev();
extern void _ZN7S2226C12v4Ev();
extern void _ZN7S2226C12v5Ev();
extern void _ZN7S2226C12v6Ev();
extern void _ZN7S2226C12v7Ev();
extern void _ZN7S2226C12v8Ev();
extern void _ZN7S2226C12v9Ev();
extern void _ZN7S2226C13v10Ev();
extern void _ZN7S2226C13v11Ev();
extern void _ZN7S2226C13v12Ev();
extern void _ZN7S2226C13v13Ev();
extern void _ZN7S2226C13v14Ev();
extern void _ZN7S2226C13v15Ev();
extern void _ZN7S2226C13v16Ev();
extern void _ZN7S2226C13v17Ev();
extern void _ZN7S2226C13v18Ev();
extern void _ZN7S2226C13v19Ev();
extern void _ZN7S2226C13v20Ev();
extern void _ZN7S2226C13v21Ev();
extern void _ZN7S2226C13v22Ev();
extern void _ZN7S2226C13v23Ev();
extern void _ZN7S2226C13v24Ev();
extern void _ZN7S2226C13v25Ev();
extern void _ZN7S2226C13v26Ev();
extern void _ZN7S2226C13v27Ev();
extern void _ZN7S2226C13v28Ev();
extern void _ZN7S2226C13v29Ev();
extern void _ZN7S2226C13v30Ev();
extern void _ZN7S2226C13v31Ev();
extern void _ZN7S2226C13v32Ev();
extern void _ZN7S2226C13v33Ev();
extern void _ZN7S2226C13v34Ev();
extern void _ZN7S2226C13v35Ev();
extern void _ZN7S2226C13v36Ev();
extern void _ZN7S2226C13v37Ev();
extern void ABISELECT(_ZThn8_N7S2226C1D1Ev,_ZThn4_N7S2226C1D1Ev)();
extern void ABISELECT(_ZThn8_N7S2226C1D0Ev,_ZThn4_N7S2226C1D0Ev)();
extern void _ZN7S2226C63v47Ev();
extern void _ZN7S2226C63v48Ev();
extern void _ZN7S2226C63v49Ev();
extern void _ZN7S2226C63v50Ev();
extern void _ZN7S2226C63v51Ev();
extern void _ZN7S2226C63v52Ev();
extern void _ZN7S2226C63v53Ev();
extern void _ZN7S2226C63v54Ev();
extern void _ZN7S2226C63v55Ev();
extern void _ZN7S2226C63v56Ev();
extern void _ZN7S2226C63v57Ev();
extern void _ZN7S2226C63v58Ev();
extern void _ZN7S2226C63v59Ev();
extern void _ZN7S2226C53v60Ev();
extern void _ZN7S2226C53v61Ev();
extern void _ZN7S2226C53v62Ev();
extern void _ZN7S2226C53v63Ev();
extern void ABISELECT(_ZThn1048_N7S2226C1D1Ev,_ZThn1040_N7S2226C1D1Ev)();
extern void ABISELECT(_ZThn1048_N7S2226C1D0Ev,_ZThn1040_N7S2226C1D0Ev)();
extern void _ZN10S2226C7_nt3v74Ev();
extern void _ZN10S2226C7_nt3v75Ev();
extern void ABISELECT(_ZThn1056_N7S2226C1D1Ev,_ZThn1044_N7S2226C1D1Ev)();
extern void ABISELECT(_ZThn1056_N7S2226C1D0Ev,_ZThn1044_N7S2226C1D0Ev)();
extern void _ZN7S2226C83v76Ev();
extern void _ZN7S2226C83v77Ev();
static  VTBL_ENTRY vtc_S2226C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2226C1[0]),
  (VTBL_ENTRY)&_ZN7S2226C1D1Ev,
  (VTBL_ENTRY)&_ZN7S2226C1D0Ev,
  (VTBL_ENTRY)&_ZN10S2226C4_nt3v38Ev,
  (VTBL_ENTRY)&_ZN10S2226C4_nt3v39Ev,
  (VTBL_ENTRY)&_ZN10S2226C4_nt3v40Ev,
  (VTBL_ENTRY)&_ZN10S2226C4_nt3v41Ev,
  (VTBL_ENTRY)&_ZN7S2226C33v42Ev,
  (VTBL_ENTRY)&_ZN7S2226C33v43Ev,
  (VTBL_ENTRY)&_ZN7S2226C33v44Ev,
  (VTBL_ENTRY)&_ZN7S2226C33v45Ev,
  (VTBL_ENTRY)&_ZN7S2226C33v46Ev,
  (VTBL_ENTRY)&_ZN7S2226C23v64Ev,
  (VTBL_ENTRY)&_ZN7S2226C23v65Ev,
  (VTBL_ENTRY)&_ZN7S2226C23v66Ev,
  (VTBL_ENTRY)&_ZN7S2226C23v67Ev,
  (VTBL_ENTRY)&_ZN7S2226C23v68Ev,
  (VTBL_ENTRY)&_ZN7S2226C23v69Ev,
  (VTBL_ENTRY)&_ZN7S2226C23v70Ev,
  (VTBL_ENTRY)&_ZN7S2226C23v71Ev,
  (VTBL_ENTRY)&_ZN7S2226C23v72Ev,
  (VTBL_ENTRY)&_ZN7S2226C23v73Ev,
  (VTBL_ENTRY)&_ZN7S2226C12v1Ev,
  (VTBL_ENTRY)&_ZN7S2226C12v2Ev,
  (VTBL_ENTRY)&_ZN7S2226C12v3Ev,
  (VTBL_ENTRY)&_ZN7S2226C12v4Ev,
  (VTBL_ENTRY)&_ZN7S2226C12v5Ev,
  (VTBL_ENTRY)&_ZN7S2226C12v6Ev,
  (VTBL_ENTRY)&_ZN7S2226C12v7Ev,
  (VTBL_ENTRY)&_ZN7S2226C12v8Ev,
  (VTBL_ENTRY)&_ZN7S2226C12v9Ev,
  (VTBL_ENTRY)&_ZN7S2226C13v10Ev,
  (VTBL_ENTRY)&_ZN7S2226C13v11Ev,
  (VTBL_ENTRY)&_ZN7S2226C13v12Ev,
  (VTBL_ENTRY)&_ZN7S2226C13v13Ev,
  (VTBL_ENTRY)&_ZN7S2226C13v14Ev,
  (VTBL_ENTRY)&_ZN7S2226C13v15Ev,
  (VTBL_ENTRY)&_ZN7S2226C13v16Ev,
  (VTBL_ENTRY)&_ZN7S2226C13v17Ev,
  (VTBL_ENTRY)&_ZN7S2226C13v18Ev,
  (VTBL_ENTRY)&_ZN7S2226C13v19Ev,
  (VTBL_ENTRY)&_ZN7S2226C13v20Ev,
  (VTBL_ENTRY)&_ZN7S2226C13v21Ev,
  (VTBL_ENTRY)&_ZN7S2226C13v22Ev,
  (VTBL_ENTRY)&_ZN7S2226C13v23Ev,
  (VTBL_ENTRY)&_ZN7S2226C13v24Ev,
  (VTBL_ENTRY)&_ZN7S2226C13v25Ev,
  (VTBL_ENTRY)&_ZN7S2226C13v26Ev,
  (VTBL_ENTRY)&_ZN7S2226C13v27Ev,
  (VTBL_ENTRY)&_ZN7S2226C13v28Ev,
  (VTBL_ENTRY)&_ZN7S2226C13v29Ev,
  (VTBL_ENTRY)&_ZN7S2226C13v30Ev,
  (VTBL_ENTRY)&_ZN7S2226C13v31Ev,
  (VTBL_ENTRY)&_ZN7S2226C13v32Ev,
  (VTBL_ENTRY)&_ZN7S2226C13v33Ev,
  (VTBL_ENTRY)&_ZN7S2226C13v34Ev,
  (VTBL_ENTRY)&_ZN7S2226C13v35Ev,
  (VTBL_ENTRY)&_ZN7S2226C13v36Ev,
  (VTBL_ENTRY)&_ZN7S2226C13v37Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S2226C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S2226C1D1Ev,_ZThn4_N7S2226C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S2226C1D0Ev,_ZThn4_N7S2226C1D0Ev),
  (VTBL_ENTRY)&_ZN7S2226C63v47Ev,
  (VTBL_ENTRY)&_ZN7S2226C63v48Ev,
  (VTBL_ENTRY)&_ZN7S2226C63v49Ev,
  (VTBL_ENTRY)&_ZN7S2226C63v50Ev,
  (VTBL_ENTRY)&_ZN7S2226C63v51Ev,
  (VTBL_ENTRY)&_ZN7S2226C63v52Ev,
  (VTBL_ENTRY)&_ZN7S2226C63v53Ev,
  (VTBL_ENTRY)&_ZN7S2226C63v54Ev,
  (VTBL_ENTRY)&_ZN7S2226C63v55Ev,
  (VTBL_ENTRY)&_ZN7S2226C63v56Ev,
  (VTBL_ENTRY)&_ZN7S2226C63v57Ev,
  (VTBL_ENTRY)&_ZN7S2226C63v58Ev,
  (VTBL_ENTRY)&_ZN7S2226C63v59Ev,
  (VTBL_ENTRY)&_ZN7S2226C53v60Ev,
  (VTBL_ENTRY)&_ZN7S2226C53v61Ev,
  (VTBL_ENTRY)&_ZN7S2226C53v62Ev,
  (VTBL_ENTRY)&_ZN7S2226C53v63Ev,
  ABISELECT(-1048,-1040),
  (VTBL_ENTRY)&(_ZTI7S2226C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn1048_N7S2226C1D1Ev,_ZThn1040_N7S2226C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1048_N7S2226C1D0Ev,_ZThn1040_N7S2226C1D0Ev),
  (VTBL_ENTRY)&_ZN10S2226C7_nt3v74Ev,
  (VTBL_ENTRY)&_ZN10S2226C7_nt3v75Ev,
  ABISELECT(-1056,-1044),
  (VTBL_ENTRY)&(_ZTI7S2226C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn1056_N7S2226C1D1Ev,_ZThn1044_N7S2226C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1056_N7S2226C1D0Ev,_ZThn1044_N7S2226C1D0Ev),
  (VTBL_ENTRY)&_ZN7S2226C83v76Ev,
  (VTBL_ENTRY)&_ZN7S2226C83v77Ev,
};
extern VTBL_ENTRY _ZTI7S2226C1[];
extern  VTBL_ENTRY _ZTV7S2226C1[];
Class_Descriptor cd_S2226C1 = {  "S2226C1", // class name
  bases_S2226C1, 7,
  &(vtc_S2226C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(1824,1732), // object size
  NSPAIRA(_ZTI7S2226C1),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S2226C1),93, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  7, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20956C5  {
  __tsi64 s20956c5f0;
  int s20956c5f1[4];
  char s20956c5f2;
  __tsi64 s20956c5f3;
  void *s20956c5f4[2];
  void  mf20956c5(); // _ZN8S20956C59mf20956c5Ev
};
//SIG(-1 S20956C5) C1{ m FL Fi[4] Fc FL Fp[2]}


void  S20956C5 ::mf20956c5(){}

static void Test_S20956C5()
{
  {
    init_simple_test("S20956C5");
    S20956C5 lv;
    check2(sizeof(lv), ABISELECT(56,44), "sizeof(S20956C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20956C5)");
    check_field_offset(lv, s20956c5f0, 0, "S20956C5.s20956c5f0");
    check_field_offset(lv, s20956c5f1, 8, "S20956C5.s20956c5f1");
    check_field_offset(lv, s20956c5f2, 24, "S20956C5.s20956c5f2");
    check_field_offset(lv, s20956c5f3, ABISELECT(32,28), "S20956C5.s20956c5f3");
    check_field_offset(lv, s20956c5f4, ABISELECT(40,36), "S20956C5.s20956c5f4");
  }
}
static Arrange_To_Call_Me vS20956C5(Test_S20956C5, "S20956C5", ABISELECT(56,44));

#else // __cplusplus

extern VTBL_ENTRY _ZTI8S20956C5[];
VTBL_ENTRY *P__ZTI8S20956C5 = _ZTI8S20956C5; 
Class_Descriptor cd_S20956C5 = {  "S20956C5", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  ABISELECT(56,44), // object size
  NSPAIRA(_ZTI8S20956C5),ABISELECT(16,8), //typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20956C4  : S20956C5 {
  int s20956c4f0;
  ::S20956C5 s20956c4f1;
  ::S20956C5 s20956c4f2;
  int s20956c4f3;
  void *s20956c4f4;
  __tsi64 s20956c4f5[6];
  void *s20956c4f6;
};
//SIG(-1 S20956C4) C1{ BC2{ m FL Fi[4] Fc FL Fp[2]} Fi FC2 FC2 Fi Fp FL[6] Fp}



static void Test_S20956C4()
{
  extern Class_Descriptor cd_S20956C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(32,50)];
    init_test(&cd_S20956C4, buf);
    S20956C4 &lv = *(new (buf) S20956C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(248,196), "sizeof(S20956C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20956C4)");
    check_base_class_offset(lv, (S20956C5*), 0, "S20956C4");
    check_field_offset(lv, s20956c4f0, ABISELECT(56,44), "S20956C4.s20956c4f0");
    check_field_offset(lv, s20956c4f1, ABISELECT(64,48), "S20956C4.s20956c4f1");
    check_field_offset(lv, s20956c4f2, ABISELECT(120,92), "S20956C4.s20956c4f2");
    check_field_offset(lv, s20956c4f3, ABISELECT(176,136), "S20956C4.s20956c4f3");
    check_field_offset(lv, s20956c4f4, ABISELECT(184,140), "S20956C4.s20956c4f4");
    check_field_offset(lv, s20956c4f5, ABISELECT(192,144), "S20956C4.s20956c4f5");
    check_field_offset(lv, s20956c4f6, ABISELECT(240,192), "S20956C4.s20956c4f6");
    test_class_info(&lv, &cd_S20956C4);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20956C4(Test_S20956C4, "S20956C4", ABISELECT(248,196));

#else // __cplusplus

extern Class_Descriptor cd_S20956C5;
extern VTBL_ENTRY _ZTI8S20956C5[];
static Base_Class bases_S20956C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20956C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20956C4[];
Class_Descriptor cd_S20956C4 = {  "S20956C4", // class name
  bases_S20956C4, 1,
  0, // no vftv
  0, //no vtt
  ABISELECT(248,196), // object size
  NSPAIRA(_ZTI8S20956C4),ABISELECT(24,12), //typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20956C3  : virtual S20956C4 , virtual S20956C5 {
  ::S20956C5 s20956c3f0;
  short s20956c3f1;
  int s20956c3f2;
  ::S20956C4 s20956c3f3;
  __tsi64 s20956c3f4[4];
  ::S20956C4 s20956c3f5;
  ~S20956C3(); // tgen
  S20956C3(); // tgen
};
//SIG(-1 S20956C3) C1{ VBC2{ BC3{ m FL Fi[4] Fc FL Fp[2]} Fi FC3 FC3 Fi Fp FL[6] Fp} VBC3 FC3 Fs Fi FC2 FL[4] FC2}


S20956C3 ::~S20956C3(){ note_dtor("S20956C3", this);} // tgen
S20956C3 ::S20956C3(){ note_ctor("S20956C3", this);} // tgen

static void Test_S20956C3()
{
  extern Class_Descriptor cd_S20956C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(114,181)];
    init_test(&cd_S20956C3, buf);
    S20956C3 *dp, &lv = *(dp=new (buf) S20956C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(904,720), "sizeof(S20956C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20956C3)");
    check_base_class_offset(lv, (S20956C5*)(S20956C4*), ABISELECT(600,480), "S20956C3");
    check_base_class_offset(lv, (S20956C4*), ABISELECT(600,480), "S20956C3");
    /*is_ambiguous_... S20956C3::S20956C5 */ AMB_check_base_class_offset(lv, (S20956C5*), ABISELECT(848,676), "S20956C3");
    check_field_offset(lv, s20956c3f0, ABISELECT(8,4), "S20956C3.s20956c3f0");
    check_field_offset(lv, s20956c3f1, ABISELECT(64,48), "S20956C3.s20956c3f1");
    check_field_offset(lv, s20956c3f2, ABISELECT(68,52), "S20956C3.s20956c3f2");
    check_field_offset(lv, s20956c3f3, ABISELECT(72,56), "S20956C3.s20956c3f3");
    check_field_offset(lv, s20956c3f4, ABISELECT(320,252), "S20956C3.s20956c3f4");
    check_field_offset(lv, s20956c3f5, ABISELECT(352,284), "S20956C3.s20956c3f5");
    test_class_info(&lv, &cd_S20956C3);
    dp->~S20956C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20956C3(Test_S20956C3, "S20956C3", ABISELECT(904,720));

#else // __cplusplus

extern void _ZN8S20956C3C1Ev();
extern void _ZN8S20956C3D1Ev();
Name_Map name_map_S20956C3[] = {
  NSPAIR(_ZN8S20956C3C1Ev),
  NSPAIR(_ZN8S20956C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20956C5;
extern VTBL_ENTRY _ZTI8S20956C5[];
extern Class_Descriptor cd_S20956C4;
extern VTBL_ENTRY _ZTI8S20956C4[];
extern Class_Descriptor cd_S20956C5;
extern VTBL_ENTRY _ZTI8S20956C5[];
static Base_Class bases_S20956C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20956C5,    ABISELECT(600,480), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S20956C4,    ABISELECT(600,480), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20956C5,    ABISELECT(848,676), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20956C3[];
static  VTBL_ENTRY vtc_S20956C3[] = {
  ABISELECT(848,676),
  ABISELECT(600,480),
  0,
  (VTBL_ENTRY)&(_ZTI8S20956C3[0]),
};
extern VTBL_ENTRY _ZTV8S20956C3[];
static  VTT_ENTRY vtt_S20956C3[] = {
  {&(_ZTV8S20956C3[4]),  4,4},
};
extern VTBL_ENTRY _ZTI8S20956C3[];
extern  VTBL_ENTRY _ZTV8S20956C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20956C3[];
Class_Descriptor cd_S20956C3 = {  "S20956C3", // class name
  bases_S20956C3, 3,
  &(vtc_S20956C3[0]), // expected_vtbl_contents
  &(vtt_S20956C3[0]), // expected_vtt_contents
  ABISELECT(904,720), // object size
  NSPAIRA(_ZTI8S20956C3),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20956C3),4, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20956C3),1, //virtual table table var
  0, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

union  S20956C6  {
  int s20956c6f0[8];
  void *s20956c6f1;
  __tsi64 s20956c6f2;
  char s20956c6f3;
  void *s20956c6f4[5];
  long double s20956c6f5;
  char s20956c6f6[7];
  void *s20956c6f7;
  unsigned char s20956c6f8:1;
  int s20956c6f9;
  void  mf20956c6(); // _ZN8S20956C69mf20956c6Ev
};
//SIG(1 S20956C6) U1{ m Fi[8] Fp FL Fc Fp[5] FD Fc[7] Fp Fc:1 Fi}

#endif // __cplusplus
#ifdef __cplusplus

struct  S20956C2  : virtual S20956C3 , S20956C4 {
  int s20956c2f0[2];
  ::S20956C4 s20956c2f1;
  ::S20956C4 s20956c2f2[5];
  ::S20956C6 s20956c2f3;
  int s20956c2f4;
  ~S20956C2(); // tgen
  S20956C2(); // tgen
};
//SIG(-1 S20956C2) C1{ VBC2{ VBC3{ BC4{ m FL Fi[4] Fc FL Fp[2]} Fi FC4 FC4 Fi Fp FL[6] Fp} VBC4 FC4 Fs Fi FC3 FL[4] FC3} BC3 Fi[2] FC3 FC3[5] FU5{ m Fi[8] Fp FL Fc Fp[5] FD Fc[7] Fp Fc:1 Fi} Fi}


S20956C2 ::~S20956C2(){ note_dtor("S20956C2", this);} // tgen
S20956C2 ::S20956C2(){ note_ctor("S20956C2", this);} // tgen

static void Test_S20956C2()
{
  extern Class_Descriptor cd_S20956C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(171,536)];
    init_test(&cd_S20956C2, buf);
    S20956C2 *dp, &lv = *(dp=new (buf) S20956C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(2720,2140), "sizeof(S20956C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20956C2)");
    /*is_ambiguous_... S20956C2::S20956C4 */ AMB_check_base_class_offset(lv, (S20956C5*)(S20956C4*), ABISELECT(2416,1900), "S20956C2");
    check_base_class_offset(lv, (S20956C4*)(S20956C3*), ABISELECT(2416,1900), "S20956C2");
    /*is_ambiguous_... S20956C3::S20956C5 */ AMB_check_base_class_offset(lv, (S20956C5*)(S20956C3*), ABISELECT(2664,2096), "S20956C2");
    check_base_class_offset(lv, (S20956C3*), ABISELECT(1816,1420), "S20956C2");
    /*is_ambiguous_... S20956C2::S20956C4 */ AMB_check_base_class_offset(lv, (S20956C5*)(S20956C4*), ABISELECT(8,4), "S20956C2");
    /*is_ambiguous_... S20956C2::S20956C4 */ AMB_check_base_class_offset(lv, (S20956C4*), ABISELECT(8,4), "S20956C2");
    check_field_offset(lv, s20956c2f0, ABISELECT(256,200), "S20956C2.s20956c2f0");
    check_field_offset(lv, s20956c2f1, ABISELECT(264,208), "S20956C2.s20956c2f1");
    check_field_offset(lv, s20956c2f2, ABISELECT(512,404), "S20956C2.s20956c2f2");
    check_field_offset(lv, s20956c2f3, ABISELECT(1760,1384), "S20956C2.s20956c2f3");
    check_field_offset(lv, s20956c2f4, ABISELECT(1808,1416), "S20956C2.s20956c2f4");
    test_class_info(&lv, &cd_S20956C2);
    dp->~S20956C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20956C2(Test_S20956C2, "S20956C2", ABISELECT(2720,2140));

#else // __cplusplus

extern void _ZN8S20956C2C1Ev();
extern void _ZN8S20956C2D1Ev();
Name_Map name_map_S20956C2[] = {
  NSPAIR(_ZN8S20956C2C1Ev),
  NSPAIR(_ZN8S20956C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20956C5;
extern VTBL_ENTRY _ZTI8S20956C5[];
extern Class_Descriptor cd_S20956C4;
extern VTBL_ENTRY _ZTI8S20956C4[];
extern Class_Descriptor cd_S20956C5;
extern VTBL_ENTRY _ZTI8S20956C5[];
extern Class_Descriptor cd_S20956C3;
extern VTBL_ENTRY _ZTI8S20956C3[];
extern  VTBL_ENTRY _ZTV8S20956C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20956C3[];
extern Class_Descriptor cd_S20956C5;
extern VTBL_ENTRY _ZTI8S20956C5[];
extern Class_Descriptor cd_S20956C4;
extern VTBL_ENTRY _ZTI8S20956C4[];
static Base_Class bases_S20956C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20956C5,    ABISELECT(2416,1900), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S20956C4,    ABISELECT(2416,1900), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S20956C5,    ABISELECT(2664,2096), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S20956C3,    ABISELECT(1816,1420), //bcp->offset
    5, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20956C5,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S20956C4,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20956C2[];
static  VTBL_ENTRY vtc_S20956C2[] = {
  ABISELECT(2664,2096),
  ABISELECT(2416,1900),
  ABISELECT(1816,1420),
  0,
  (VTBL_ENTRY)&(_ZTI8S20956C2[0]),
  ABISELECT(848,676),
  ABISELECT(600,480),
  ABISELECT(-1816,-1420),
  (VTBL_ENTRY)&(_ZTI8S20956C2[0]),
};
extern VTBL_ENTRY _ZTV8S20956C2[];
static  VTBL_ENTRY _tg__ZTV8S20956C3__8S20956C2[] = {
  ABISELECT(848,676),
  ABISELECT(600,480),
  0,
  (VTBL_ENTRY)&(_ZTI8S20956C3[0]),
};
static  VTT_ENTRY vtt_S20956C2[] = {
  {&(_ZTV8S20956C2[5]),  5,9},
  {&(_ZTV8S20956C2[9]),  9,9},
  {&(_tg__ZTV8S20956C3__8S20956C2[4]),  4,4},
};
extern VTBL_ENTRY _ZTI8S20956C2[];
extern  VTBL_ENTRY _ZTV8S20956C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20956C2[];
Class_Descriptor cd_S20956C2 = {  "S20956C2", // class name
  bases_S20956C2, 6,
  &(vtc_S20956C2[0]), // expected_vtbl_contents
  &(vtt_S20956C2[0]), // expected_vtt_contents
  ABISELECT(2720,2140), // object size
  NSPAIRA(_ZTI8S20956C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20956C2),9, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20956C2),3, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20956C8  : S20956C4 , virtual S20956C2 {
  ::S20956C2 s20956c8f0;
  ~S20956C8(); // tgen
  S20956C8(); // tgen
};
//SIG(-1 S20956C8) C1{ BC2{ BC3{ m FL Fi[4] Fc FL Fp[2]} Fi FC3 FC3 Fi Fp FL[6] Fp} VBC4{ VBC5{ VBC2 VBC3 FC3 Fs Fi FC2 FL[4] FC2} BC2 Fi[2] FC2 FC2[5] FU6{ m Fi[8] Fp FL Fc Fp[5] FD Fc[7] Fp Fc:1 Fi} Fi} FC4}


S20956C8 ::~S20956C8(){ note_dtor("S20956C8", this);} // tgen
S20956C8 ::S20956C8(){ note_ctor("S20956C8", this);} // tgen

static void Test_S20956C8()
{
  extern Class_Descriptor cd_S20956C8;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(357,1121)];
    init_test(&cd_S20956C8, buf);
    S20956C8 *dp, &lv = *(dp=new (buf) S20956C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(5696,4480), "sizeof(S20956C8)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20956C8)");
    /*is_ambiguous_... S20956C8::S20956C4 */ AMB_check_base_class_offset(lv, (S20956C5*)(S20956C4*), ABISELECT(8,4), "S20956C8");
    /*is_ambiguous_... S20956C8::S20956C4 */ AMB_check_base_class_offset(lv, (S20956C4*), ABISELECT(8,4), "S20956C8");
    /*is_ambiguous_... S20956C8::S20956C4 */ AMB_check_base_class_offset(lv, (S20956C5*)(S20956C4*), ABISELECT(5392,4240), "S20956C8");
    check_base_class_offset(lv, (S20956C4*)(S20956C3*), ABISELECT(5392,4240), "S20956C8");
    /*is_ambiguous_... S20956C3::S20956C5 */ AMB_check_base_class_offset(lv, (S20956C5*)(S20956C3*), ABISELECT(5640,4436), "S20956C8");
    check_base_class_offset(lv, (S20956C3*)(S20956C2*), ABISELECT(4792,3760), "S20956C8");
    /*is_ambiguous_... S20956C2::S20956C4 */ AMB_check_base_class_offset(lv, (S20956C5*)(S20956C4*)(S20956C2*), ABISELECT(2984,2344), "S20956C8");
    /*is_ambiguous_... S20956C2::S20956C4 */ AMB_check_base_class_offset(lv, (S20956C4*)(S20956C2*), ABISELECT(2984,2344), "S20956C8");
    check_base_class_offset(lv, (S20956C2*), ABISELECT(2976,2340), "S20956C8");
    check_field_offset(lv, s20956c8f0, ABISELECT(256,200), "S20956C8.s20956c8f0");
    test_class_info(&lv, &cd_S20956C8);
    dp->~S20956C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20956C8(Test_S20956C8, "S20956C8", ABISELECT(5696,4480));

#else // __cplusplus

extern void _ZN8S20956C8C1Ev();
extern void _ZN8S20956C8D1Ev();
Name_Map name_map_S20956C8[] = {
  NSPAIR(_ZN8S20956C8C1Ev),
  NSPAIR(_ZN8S20956C8D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20956C5;
extern VTBL_ENTRY _ZTI8S20956C5[];
extern Class_Descriptor cd_S20956C4;
extern VTBL_ENTRY _ZTI8S20956C4[];
extern Class_Descriptor cd_S20956C5;
extern VTBL_ENTRY _ZTI8S20956C5[];
extern Class_Descriptor cd_S20956C4;
extern VTBL_ENTRY _ZTI8S20956C4[];
extern Class_Descriptor cd_S20956C5;
extern VTBL_ENTRY _ZTI8S20956C5[];
extern Class_Descriptor cd_S20956C3;
extern VTBL_ENTRY _ZTI8S20956C3[];
extern  VTBL_ENTRY _ZTV8S20956C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20956C3[];
extern Class_Descriptor cd_S20956C5;
extern VTBL_ENTRY _ZTI8S20956C5[];
extern Class_Descriptor cd_S20956C4;
extern VTBL_ENTRY _ZTI8S20956C4[];
extern Class_Descriptor cd_S20956C2;
extern VTBL_ENTRY _ZTI8S20956C2[];
extern  VTBL_ENTRY _ZTV8S20956C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20956C2[];
static Base_Class bases_S20956C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20956C5,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S20956C4,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20956C5,    ABISELECT(5392,4240), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S20956C4,    ABISELECT(5392,4240), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S20956C5,    ABISELECT(5640,4436), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S20956C3,    ABISELECT(4792,3760), //bcp->offset
    11, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S20956C5,    ABISELECT(2984,2344), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S20956C4,    ABISELECT(2984,2344), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S20956C2,    ABISELECT(2976,2340), //bcp->offset
    6, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20956C8[];
static  VTBL_ENTRY vtc_S20956C8[] = {
  ABISELECT(5640,4436),
  ABISELECT(5392,4240),
  ABISELECT(4792,3760),
  ABISELECT(2976,2340),
  0,
  (VTBL_ENTRY)&(_ZTI8S20956C8[0]),
  ABISELECT(2664,2096),
  ABISELECT(2416,1900),
  ABISELECT(1816,1420),
  ABISELECT(-2976,-2340),
  (VTBL_ENTRY)&(_ZTI8S20956C8[0]),
  ABISELECT(848,676),
  ABISELECT(600,480),
  ABISELECT(-4792,-3760),
  (VTBL_ENTRY)&(_ZTI8S20956C8[0]),
};
extern VTBL_ENTRY _ZTV8S20956C8[];
static  VTBL_ENTRY _tg__ZTV8S20956C2__8S20956C8[] = {
  ABISELECT(2664,2096),
  ABISELECT(2416,1900),
  ABISELECT(1816,1420),
  0,
  (VTBL_ENTRY)&(_ZTI8S20956C2[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20956C3__8S20956C2__8S20956C8[] = {
  ABISELECT(848,676),
  ABISELECT(600,480),
  ABISELECT(-1816,-1420),
  (VTBL_ENTRY)&(_ZTI8S20956C2[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20956C3__8S20956C8[] = {
  ABISELECT(848,676),
  ABISELECT(600,480),
  0,
  (VTBL_ENTRY)&(_ZTI8S20956C3[0]),
};
static  VTT_ENTRY vtt_S20956C8[] = {
  {&(_ZTV8S20956C8[6]),  6,15},
  {&(_ZTV8S20956C8[11]),  11,15},
  {&(_ZTV8S20956C8[15]),  15,15},
  {&(_tg__ZTV8S20956C2__8S20956C8[5]),  5,5},
  {&(_tg__ZTV8S20956C3__8S20956C2__8S20956C8[4]),  4,4},
  {&(_tg__ZTV8S20956C3__8S20956C8[4]),  4,4},
};
extern VTBL_ENTRY _ZTI8S20956C8[];
extern  VTBL_ENTRY _ZTV8S20956C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20956C8[];
Class_Descriptor cd_S20956C8 = {  "S20956C8", // class name
  bases_S20956C8, 9,
  &(vtc_S20956C8[0]), // expected_vtbl_contents
  &(vtt_S20956C8[0]), // expected_vtt_contents
  ABISELECT(5696,4480), // object size
  NSPAIRA(_ZTI8S20956C8),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20956C8),15, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20956C8),6, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20956C9  : virtual S20956C5 {
  int s20956c9f0;
  int s20956c9f1;
  ::S20956C5 s20956c9f2;
  int s20956c9f3;
  ::S20956C4 s20956c9f4;
  void *s20956c9f5;
  ::S20956C5 s20956c9f6;
  char s20956c9f7:3;
  virtual  ~S20956C9(); // _ZN8S20956C9D2Ev
  virtual void  v3(); // _ZN8S20956C92v3Ev
  virtual void  v4(); // _ZN8S20956C92v4Ev
  virtual void  v5(); // _ZN8S20956C92v5Ev
  S20956C9(); // tgen
};
//SIG(-1 S20956C9) C1{ VBC2{ m FL Fi[4] Fc FL Fp[2]} vd v1 v2 v3 Fi[2] FC2 Fi FC3{ BC2 Fi FC2 FC2 Fi Fp FL[6] Fp} Fp FC2 Fc:3}


 S20956C9 ::~S20956C9(){ note_dtor("S20956C9", this);}
void  S20956C9 ::v3(){vfunc_called(this, "_ZN8S20956C92v3Ev");}
void  S20956C9 ::v4(){vfunc_called(this, "_ZN8S20956C92v4Ev");}
void  S20956C9 ::v5(){vfunc_called(this, "_ZN8S20956C92v5Ev");}
S20956C9 ::S20956C9(){ note_ctor("S20956C9", this);} // tgen

static void Test_S20956C9()
{
  extern Class_Descriptor cd_S20956C9;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(58,89)];
    init_test(&cd_S20956C9, buf);
    S20956C9 *dp, &lv = *(dp=new (buf) S20956C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(456,352), "sizeof(S20956C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20956C9)");
    check_base_class_offset(lv, (S20956C5*), ABISELECT(400,308), "S20956C9");
    check_field_offset(lv, s20956c9f0, ABISELECT(8,4), "S20956C9.s20956c9f0");
    check_field_offset(lv, s20956c9f1, ABISELECT(12,8), "S20956C9.s20956c9f1");
    check_field_offset(lv, s20956c9f2, ABISELECT(16,12), "S20956C9.s20956c9f2");
    check_field_offset(lv, s20956c9f3, ABISELECT(72,56), "S20956C9.s20956c9f3");
    check_field_offset(lv, s20956c9f4, ABISELECT(80,60), "S20956C9.s20956c9f4");
    check_field_offset(lv, s20956c9f5, ABISELECT(328,256), "S20956C9.s20956c9f5");
    check_field_offset(lv, s20956c9f6, ABISELECT(336,260), "S20956C9.s20956c9f6");
    set_bf_and_test(lv, s20956c9f7, ABISELECT(392,304), 0, 3, 1, "S20956C9");
    set_bf_and_test(lv, s20956c9f7, ABISELECT(392,304), 0, 3, hide_sll(1LL<<2), "S20956C9");
    test_class_info(&lv, &cd_S20956C9);
    dp->~S20956C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20956C9(Test_S20956C9, "S20956C9", ABISELECT(456,352));

#else // __cplusplus

extern void _ZN8S20956C9C1Ev();
extern void _ZN8S20956C9D2Ev();
Name_Map name_map_S20956C9[] = {
  NSPAIR(_ZN8S20956C9C1Ev),
  NSPAIR(_ZN8S20956C9D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20956C5;
extern VTBL_ENTRY _ZTI8S20956C5[];
static Base_Class bases_S20956C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20956C5,    ABISELECT(400,308), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20956C9[];
extern void _ZN8S20956C9D1Ev();
extern void _ZN8S20956C9D0Ev();
extern void _ZN8S20956C92v3Ev();
extern void _ZN8S20956C92v4Ev();
extern void _ZN8S20956C92v5Ev();
static  VTBL_ENTRY vtc_S20956C9[] = {
  ABISELECT(400,308),
  0,
  (VTBL_ENTRY)&(_ZTI8S20956C9[0]),
  (VTBL_ENTRY)&_ZN8S20956C9D1Ev,
  (VTBL_ENTRY)&_ZN8S20956C9D0Ev,
  (VTBL_ENTRY)&_ZN8S20956C92v3Ev,
  (VTBL_ENTRY)&_ZN8S20956C92v4Ev,
  (VTBL_ENTRY)&_ZN8S20956C92v5Ev,
};
extern VTBL_ENTRY _ZTV8S20956C9[];
static  VTT_ENTRY vtt_S20956C9[] = {
  {&(_ZTV8S20956C9[3]),  3,8},
};
extern VTBL_ENTRY _ZTI8S20956C9[];
extern  VTBL_ENTRY _ZTV8S20956C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20956C9[];
Class_Descriptor cd_S20956C9 = {  "S20956C9", // class name
  bases_S20956C9, 1,
  &(vtc_S20956C9[0]), // expected_vtbl_contents
  &(vtt_S20956C9[0]), // expected_vtt_contents
  ABISELECT(456,352), // object size
  NSPAIRA(_ZTI8S20956C9),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S20956C9),8, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20956C9),1, //virtual table table var
  0, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

union  S20956C10  {
  void *s20956c10f0;
  __tsi64 s20956c10f1;
  int s20956c10f2;
  char s20956c10f3;
  int s20956c10f4;
  __tsi64 s20956c10f5;
  long s20956c10f6;
  __tsi64 s20956c10f7;
  short s20956c10f8;
  void *s20956c10f9;
  long double s20956c10f10;
  char s20956c10f11[6];
  void  mf20956c10(); // _ZN9S20956C1010mf20956c10Ev
};
//SIG(1 S20956C10) U1{ m Fp FL Fi Fc Fi FL Fl FL Fs Fp FD Fc[6]}

#endif // __cplusplus
#ifdef __cplusplus

struct  S20956C7  : virtual S20956C8 {
  int s20956c7f0;
  ::S20956C9 s20956c7f1[2];
  ::S20956C10 s20956c7f2[8];
  ~S20956C7(); // tgen
  S20956C7(); // tgen
};
//SIG(-1 S20956C7) C1{ VBC2{ BC3{ BC4{ m FL Fi[4] Fc FL Fp[2]} Fi FC4 FC4 Fi Fp FL[6] Fp} VBC5{ VBC6{ VBC3 VBC4 FC4 Fs Fi FC3 FL[4] FC3} BC3 Fi[2] FC3 FC3[5] FU7{ m Fi[8] Fp FL Fc Fp[5] FD Fc[7] Fp Fc:1 Fi} Fi} FC5} Fi FC8{ VBC4 vd v1 v2 v3 Fi Fi FC4 Fi FC3 Fp FC4 Fc:3}[2] FU9{ m Fp FL Fi Fc Fi FL Fl FL Fs Fp FD Fc[6]}[8]}


S20956C7 ::~S20956C7(){ note_dtor("S20956C7", this);} // tgen
S20956C7 ::S20956C7(){ note_ctor("S20956C7", this);} // tgen

static void Test_S20956C7()
{
  extern Class_Descriptor cd_S20956C7;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(423,1323)];
    init_test(&cd_S20956C7, buf);
    S20956C7 *dp, &lv = *(dp=new (buf) S20956C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(6752,5288), "sizeof(S20956C7)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20956C7)");
    /*is_ambiguous_... S20956C8::S20956C4 */ AMB_check_base_class_offset(lv, (S20956C5*)(S20956C4*)(S20956C8*), ABISELECT(1064,812), "S20956C7");
    /*is_ambiguous_... S20956C8::S20956C4 */ AMB_check_base_class_offset(lv, (S20956C4*)(S20956C8*), ABISELECT(1064,812), "S20956C7");
    /*is_ambiguous_... S20956C7::S20956C4 */ AMB_check_base_class_offset(lv, (S20956C5*)(S20956C4*), ABISELECT(6448,5048), "S20956C7");
    check_base_class_offset(lv, (S20956C4*)(S20956C3*), ABISELECT(6448,5048), "S20956C7");
    /*is_ambiguous_... S20956C3::S20956C5 */ AMB_check_base_class_offset(lv, (S20956C5*)(S20956C3*), ABISELECT(6696,5244), "S20956C7");
    check_base_class_offset(lv, (S20956C3*)(S20956C2*), ABISELECT(5848,4568), "S20956C7");
    /*is_ambiguous_... S20956C2::S20956C4 */ AMB_check_base_class_offset(lv, (S20956C5*)(S20956C4*)(S20956C2*), ABISELECT(4040,3152), "S20956C7");
    /*is_ambiguous_... S20956C2::S20956C4 */ AMB_check_base_class_offset(lv, (S20956C4*)(S20956C2*), ABISELECT(4040,3152), "S20956C7");
    check_base_class_offset(lv, (S20956C2*)(S20956C8*), ABISELECT(4032,3148), "S20956C7");
    check_base_class_offset(lv, (S20956C8*), ABISELECT(1056,808), "S20956C7");
    check_field_offset(lv, s20956c7f0, ABISELECT(8,4), "S20956C7.s20956c7f0");
    check_field_offset(lv, s20956c7f1, ABISELECT(16,8), "S20956C7.s20956c7f1");
    check_field_offset(lv, s20956c7f2, ABISELECT(928,712), "S20956C7.s20956c7f2");
    test_class_info(&lv, &cd_S20956C7);
    dp->~S20956C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20956C7(Test_S20956C7, "S20956C7", ABISELECT(6752,5288));

#else // __cplusplus

extern void _ZN8S20956C7C1Ev();
extern void _ZN8S20956C7D1Ev();
Name_Map name_map_S20956C7[] = {
  NSPAIR(_ZN8S20956C7C1Ev),
  NSPAIR(_ZN8S20956C7D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20956C5;
extern VTBL_ENTRY _ZTI8S20956C5[];
extern Class_Descriptor cd_S20956C4;
extern VTBL_ENTRY _ZTI8S20956C4[];
extern Class_Descriptor cd_S20956C5;
extern VTBL_ENTRY _ZTI8S20956C5[];
extern Class_Descriptor cd_S20956C4;
extern VTBL_ENTRY _ZTI8S20956C4[];
extern Class_Descriptor cd_S20956C5;
extern VTBL_ENTRY _ZTI8S20956C5[];
extern Class_Descriptor cd_S20956C3;
extern VTBL_ENTRY _ZTI8S20956C3[];
extern  VTBL_ENTRY _ZTV8S20956C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20956C3[];
extern Class_Descriptor cd_S20956C5;
extern VTBL_ENTRY _ZTI8S20956C5[];
extern Class_Descriptor cd_S20956C4;
extern VTBL_ENTRY _ZTI8S20956C4[];
extern Class_Descriptor cd_S20956C2;
extern VTBL_ENTRY _ZTI8S20956C2[];
extern  VTBL_ENTRY _ZTV8S20956C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20956C2[];
extern Class_Descriptor cd_S20956C8;
extern VTBL_ENTRY _ZTI8S20956C8[];
extern  VTBL_ENTRY _ZTV8S20956C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20956C8[];
static Base_Class bases_S20956C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20956C5,    ABISELECT(1064,812), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S20956C4,    ABISELECT(1064,812), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S20956C5,    ABISELECT(6448,5048), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S20956C4,    ABISELECT(6448,5048), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S20956C5,    ABISELECT(6696,5244), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S20956C3,    ABISELECT(5848,4568), //bcp->offset
    18, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S20956C5,    ABISELECT(4040,3152), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S20956C4,    ABISELECT(4040,3152), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S20956C2,    ABISELECT(4032,3148), //bcp->offset
    13, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S20956C8,    ABISELECT(1056,808), //bcp->offset
    7, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20956C7[];
static  VTBL_ENTRY vtc_S20956C7[] = {
  ABISELECT(6696,5244),
  ABISELECT(6448,5048),
  ABISELECT(5848,4568),
  ABISELECT(4032,3148),
  ABISELECT(1056,808),
  0,
  (VTBL_ENTRY)&(_ZTI8S20956C7[0]),
  ABISELECT(5640,4436),
  ABISELECT(5392,4240),
  ABISELECT(4792,3760),
  ABISELECT(2976,2340),
  ABISELECT(-1056,-808),
  (VTBL_ENTRY)&(_ZTI8S20956C7[0]),
  ABISELECT(2664,2096),
  ABISELECT(2416,1900),
  ABISELECT(1816,1420),
  ABISELECT(-4032,-3148),
  (VTBL_ENTRY)&(_ZTI8S20956C7[0]),
  ABISELECT(848,676),
  ABISELECT(600,480),
  ABISELECT(-5848,-4568),
  (VTBL_ENTRY)&(_ZTI8S20956C7[0]),
};
extern VTBL_ENTRY _ZTV8S20956C7[];
static  VTBL_ENTRY _tg__ZTV8S20956C8__8S20956C7[] = {
  ABISELECT(5640,4436),
  ABISELECT(5392,4240),
  ABISELECT(4792,3760),
  ABISELECT(2976,2340),
  0,
  (VTBL_ENTRY)&(_ZTI8S20956C8[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20956C2__8S20956C8__8S20956C7[] = {
  ABISELECT(2664,2096),
  ABISELECT(2416,1900),
  ABISELECT(1816,1420),
  ABISELECT(-2976,-2340),
  (VTBL_ENTRY)&(_ZTI8S20956C8[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20956C3__8S20956C8__8S20956C7[] = {
  ABISELECT(848,676),
  ABISELECT(600,480),
  ABISELECT(-4792,-3760),
  (VTBL_ENTRY)&(_ZTI8S20956C8[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20956C2__8S20956C7[] = {
  ABISELECT(2664,2096),
  ABISELECT(2416,1900),
  ABISELECT(1816,1420),
  0,
  (VTBL_ENTRY)&(_ZTI8S20956C2[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20956C3__8S20956C2__8S20956C7[] = {
  ABISELECT(848,676),
  ABISELECT(600,480),
  ABISELECT(-1816,-1420),
  (VTBL_ENTRY)&(_ZTI8S20956C2[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20956C3__8S20956C7[] = {
  ABISELECT(848,676),
  ABISELECT(600,480),
  0,
  (VTBL_ENTRY)&(_ZTI8S20956C3[0]),
};
static  VTT_ENTRY vtt_S20956C7[] = {
  {&(_ZTV8S20956C7[7]),  7,22},
  {&(_ZTV8S20956C7[13]),  13,22},
  {&(_ZTV8S20956C7[18]),  18,22},
  {&(_ZTV8S20956C7[22]),  22,22},
  {&(_tg__ZTV8S20956C8__8S20956C7[6]),  6,6},
  {&(_tg__ZTV8S20956C2__8S20956C8__8S20956C7[5]),  5,5},
  {&(_tg__ZTV8S20956C3__8S20956C8__8S20956C7[4]),  4,4},
  {&(_tg__ZTV8S20956C2__8S20956C7[5]),  5,5},
  {&(_tg__ZTV8S20956C3__8S20956C2__8S20956C7[4]),  4,4},
  {&(_tg__ZTV8S20956C3__8S20956C7[4]),  4,4},
};
extern VTBL_ENTRY _ZTI8S20956C7[];
extern  VTBL_ENTRY _ZTV8S20956C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20956C7[];
Class_Descriptor cd_S20956C7 = {  "S20956C7", // class name
  bases_S20956C7, 10,
  &(vtc_S20956C7[0]), // expected_vtbl_contents
  &(vtt_S20956C7[0]), // expected_vtt_contents
  ABISELECT(6752,5288), // object size
  NSPAIRA(_ZTI8S20956C7),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S20956C7),22, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20956C7),10, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20956C12  {
  int s20956c12f0;
  ::S20956C9 s20956c12f1[2];
  char s20956c12f2;
  void  mf20956c12(); // _ZN9S20956C1210mf20956c12Ev
};
//SIG(-1 S20956C12) C1{ m Fi FC2{ VBC3{ m FL Fi[4] Fc FL Fp[2]} vd v1 v2 v3 Fi[2] FC3 Fi FC4{ BC3 Fi FC3 FC3 Fi Fp FL[6] Fp} Fp FC3 Fc:3}[2] Fc}


void  S20956C12 ::mf20956c12(){}

static void Test_S20956C12()
{
  {
    init_simple_test("S20956C12");
    static S20956C12 lv;
    check2(sizeof(lv), ABISELECT(928,712), "sizeof(S20956C12)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20956C12)");
    check_field_offset(lv, s20956c12f0, 0, "S20956C12.s20956c12f0");
    check_field_offset(lv, s20956c12f1, ABISELECT(8,4), "S20956C12.s20956c12f1");
    check_field_offset(lv, s20956c12f2, ABISELECT(920,708), "S20956C12.s20956c12f2");
  }
}
static Arrange_To_Call_Me vS20956C12(Test_S20956C12, "S20956C12", ABISELECT(928,712));

#else // __cplusplus

extern VTBL_ENTRY _ZTI9S20956C12[];
VTBL_ENTRY *P__ZTI9S20956C12 = _ZTI9S20956C12; 
Class_Descriptor cd_S20956C12 = {  "S20956C12", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  ABISELECT(928,712), // object size
  NSPAIRA(_ZTI9S20956C12),ABISELECT(16,8), //typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20956C14_nt  {
};
//SIG(-1 S20956C14_nt) C1{}



//skip512 S20956C14_nt

#else // __cplusplus

extern VTBL_ENTRY _ZTI12S20956C14_nt[];
VTBL_ENTRY *P__ZTI12S20956C14_nt = _ZTI12S20956C14_nt; 
Class_Descriptor cd_S20956C14_nt = {  "S20956C14_nt", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  1, // object size
  NSPAIRA(_ZTI12S20956C14_nt),ABISELECT(16,8), //typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20956C13  : S20956C4 , virtual S20956C5 , virtual S20956C9 , virtual S20956C3 {
  int s20956c13f0;
  ::S20956C14_nt s20956c13f1;
  long double s20956c13f2;
  void *s20956c13f3;
  ::S20956C9 s20956c13f4[2];
  long double s20956c13f5;
  __tsi64 s20956c13f6;
  int s20956c13f7;
  ::S20956C3 s20956c13f8;
  virtual  ~S20956C13(); // _ZN9S20956C13D2Ev
  virtual void  v6(); // _ZN9S20956C132v6Ev
  virtual void  v7(); // _ZN9S20956C132v7Ev
  S20956C13(); // tgen
};
//SIG(-1 S20956C13) C1{ BC2{ BC3{ m FL Fi[4] Fc FL Fp[2]} Fi FC3 FC3 Fi Fp FL[6] Fp} VBC3 VBC4{ VBC3 vd v3 v4 v5 Fi[2] FC3 Fi FC2 Fp FC3 Fc:3} VBC5{ VBC2 VBC3 FC3 Fs Fi FC2 FL[4] FC2} vd v1 v2 Fi FC6{} FD Fp FC4[2] FD FL Fi FC5}


 S20956C13 ::~S20956C13(){ note_dtor("S20956C13", this);}
void  S20956C13 ::v6(){vfunc_called(this, "_ZN9S20956C132v6Ev");}
void  S20956C13 ::v7(){vfunc_called(this, "_ZN9S20956C132v7Ev");}
S20956C13 ::S20956C13(){ note_ctor("S20956C13", this);} // tgen

static void Test_S20956C13()
{
  extern Class_Descriptor cd_S20956C13;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(217,676)];
    init_test(&cd_S20956C13, buf);
    S20956C13 *dp, &lv = *(dp=new (buf) S20956C13());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(3456,2700), "sizeof(S20956C13)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20956C13)");
    /*is_ambiguous_... S20956C13::S20956C4 */ AMB_check_base_class_offset(lv, (S20956C5*)(S20956C4*), ABISELECT(8,4), "S20956C13");
    /*is_ambiguous_... S20956C13::S20956C4 */ AMB_check_base_class_offset(lv, (S20956C4*), ABISELECT(8,4), "S20956C13");
    /*is_ambiguous_... S20956C13::S20956C5 */ AMB_check_base_class_offset(lv, (S20956C5*), ABISELECT(2152,1672), "S20956C13");
    check_base_class_offset(lv, (S20956C5*)(S20956C9*), ABISELECT(2152,1672), "S20956C13");
    /*is_ambiguous_... S20956C3::S20956C5 */ AMB_check_base_class_offset(lv, (S20956C5*)(S20956C3*), ABISELECT(2152,1672), "S20956C13");
    check_base_class_offset(lv, (S20956C9*), ABISELECT(2208,1716), "S20956C13");
    /*is_ambiguous_... S20956C13::S20956C4 */ AMB_check_base_class_offset(lv, (S20956C5*)(S20956C4*), ABISELECT(3208,2504), "S20956C13");
    check_base_class_offset(lv, (S20956C4*)(S20956C3*), ABISELECT(3208,2504), "S20956C13");
    check_base_class_offset(lv, (S20956C3*), ABISELECT(2608,2024), "S20956C13");
    check_field_offset(lv, s20956c13f0, ABISELECT(256,200), "S20956C13.s20956c13f0");
    check_field_offset(lv, s20956c13f1, ABISELECT(260,204), "S20956C13.s20956c13f1");
    check_field_offset(lv, s20956c13f2, ABISELECT(272,208), "S20956C13.s20956c13f2");
    check_field_offset(lv, s20956c13f3, ABISELECT(288,220), "S20956C13.s20956c13f3");
    check_field_offset(lv, s20956c13f4, ABISELECT(296,224), "S20956C13.s20956c13f4");
    check_field_offset(lv, s20956c13f5, ABISELECT(1216,928), "S20956C13.s20956c13f5");
    check_field_offset(lv, s20956c13f6, ABISELECT(1232,940), "S20956C13.s20956c13f6");
    check_field_offset(lv, s20956c13f7, ABISELECT(1240,948), "S20956C13.s20956c13f7");
    check_field_offset(lv, s20956c13f8, ABISELECT(1248,952), "S20956C13.s20956c13f8");
    test_class_info(&lv, &cd_S20956C13);
    dp->~S20956C13();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20956C13(Test_S20956C13, "S20956C13", ABISELECT(3456,2700));

#else // __cplusplus

extern void _ZN9S20956C13C1Ev();
extern void _ZN9S20956C13D2Ev();
Name_Map name_map_S20956C13[] = {
  NSPAIR(_ZN9S20956C13C1Ev),
  NSPAIR(_ZN9S20956C13D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20956C5;
extern VTBL_ENTRY _ZTI8S20956C5[];
extern Class_Descriptor cd_S20956C4;
extern VTBL_ENTRY _ZTI8S20956C4[];
extern Class_Descriptor cd_S20956C5;
extern VTBL_ENTRY _ZTI8S20956C5[];
extern Class_Descriptor cd_S20956C9;
extern VTBL_ENTRY _ZTI8S20956C9[];
extern  VTBL_ENTRY _ZTV8S20956C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20956C9[];
extern Class_Descriptor cd_S20956C5;
extern VTBL_ENTRY _ZTI8S20956C5[];
extern Class_Descriptor cd_S20956C4;
extern VTBL_ENTRY _ZTI8S20956C4[];
extern Class_Descriptor cd_S20956C3;
extern VTBL_ENTRY _ZTI8S20956C3[];
extern  VTBL_ENTRY _ZTV8S20956C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20956C3[];
static Base_Class bases_S20956C13[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20956C5,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S20956C4,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20956C5,    ABISELECT(2152,1672), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20956C9,    ABISELECT(2208,1716), //bcp->offset
    10, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20956C5,    ABISELECT(3208,2504), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S20956C4,    ABISELECT(3208,2504), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S20956C3,    ABISELECT(2608,2024), //bcp->offset
    22, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S20956C13[];
extern void _ZN9S20956C13D1Ev();
extern void _ZN9S20956C13D0Ev();
extern void _ZN9S20956C132v6Ev();
extern void _ZN9S20956C132v7Ev();
extern void ABISELECT(_ZTv0_n32_N9S20956C13D1Ev,_ZTv0_n16_N9S20956C13D1Ev)();
extern void ABISELECT(_ZThn2208_N9S20956C13D1Ev,_ZThn1716_N9S20956C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S20956C13D0Ev,_ZTv0_n16_N9S20956C13D0Ev)();
extern void ABISELECT(_ZThn2208_N9S20956C13D0Ev,_ZThn1716_N9S20956C13D0Ev)() __attribute__((weak));
extern void _ZN8S20956C92v3Ev();
extern void _ZN8S20956C92v4Ev();
extern void _ZN8S20956C92v5Ev();
static  VTBL_ENTRY vtc_S20956C13[] = {
  ABISELECT(3208,2504),
  ABISELECT(2608,2024),
  ABISELECT(2208,1716),
  ABISELECT(2152,1672),
  0,
  (VTBL_ENTRY)&(_ZTI9S20956C13[0]),
  (VTBL_ENTRY)&_ZN9S20956C13D1Ev,
  (VTBL_ENTRY)&_ZN9S20956C13D0Ev,
  (VTBL_ENTRY)&_ZN9S20956C132v6Ev,
  (VTBL_ENTRY)&_ZN9S20956C132v7Ev,
  0,
  0,
  0,
  ABISELECT(-2208,-1716),
  ABISELECT(-56,-44),
  ABISELECT(-2208,-1716),
  (VTBL_ENTRY)&(_ZTI9S20956C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20956C13D1Ev,_ZTv0_n16_N9S20956C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20956C13D0Ev,_ZTv0_n16_N9S20956C13D0Ev),
  (VTBL_ENTRY)&_ZN8S20956C92v3Ev,
  (VTBL_ENTRY)&_ZN8S20956C92v4Ev,
  (VTBL_ENTRY)&_ZN8S20956C92v5Ev,
  ABISELECT(-456,-352),
  ABISELECT(600,480),
  ABISELECT(-2608,-2024),
  (VTBL_ENTRY)&(_ZTI9S20956C13[0]),
};
extern VTBL_ENTRY _ZTV9S20956C13[];
extern void _ZN8S20956C9D1Ev();
extern void _ZN8S20956C9D0Ev();
extern void _ZN8S20956C92v3Ev();
extern void _ZN8S20956C92v4Ev();
extern void _ZN8S20956C92v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20956C9__9S20956C13[] = {
  ABISELECT(-56,-44),
  0,
  (VTBL_ENTRY)&(_ZTI8S20956C9[0]),
  (VTBL_ENTRY)&_ZN8S20956C9D1Ev,
  (VTBL_ENTRY)&_ZN8S20956C9D0Ev,
  (VTBL_ENTRY)&_ZN8S20956C92v3Ev,
  (VTBL_ENTRY)&_ZN8S20956C92v4Ev,
  (VTBL_ENTRY)&_ZN8S20956C92v5Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20956C3__9S20956C13[] = {
  ABISELECT(-456,-352),
  ABISELECT(600,480),
  0,
  (VTBL_ENTRY)&(_ZTI8S20956C3[0]),
};
static  VTT_ENTRY vtt_S20956C13[] = {
  {&(_ZTV9S20956C13[6]),  6,26},
  {&(_ZTV9S20956C13[17]),  17,26},
  {&(_ZTV9S20956C13[26]),  26,26},
  {&(_tg__ZTV8S20956C9__9S20956C13[3]),  3,8},
  {&(_tg__ZTV8S20956C3__9S20956C13[4]),  4,4},
};
extern VTBL_ENTRY _ZTI9S20956C13[];
extern  VTBL_ENTRY _ZTV9S20956C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20956C13[];
static VTBL_ENTRY alt_thunk_names1[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20956C13D0Ev,_ZTv0_n16_N9S20956C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2208_N9S20956C13D0Ev,_ZThn1716_N9S20956C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20956C13D1Ev,_ZTv0_n16_N9S20956C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2208_N9S20956C13D1Ev,_ZThn1716_N9S20956C13D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20956C13 = {  "S20956C13", // class name
  bases_S20956C13, 7,
  &(vtc_S20956C13[0]), // expected_vtbl_contents
  &(vtt_S20956C13[0]), // expected_vtt_contents
  ABISELECT(3456,2700), // object size
  NSPAIRA(_ZTI9S20956C13),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV9S20956C13),26, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20956C13),5, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names1,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20956C11  : S20956C12 , S20956C13 {
  void *s20956c11f0[2];
  ::S20956C10 s20956c11f1;
  long s20956c11f2;
  void *s20956c11f3;
  virtual  ~S20956C11(); // _ZN9S20956C11D2Ev
  S20956C11(); // tgen
};
//SIG(-1 S20956C11) C1{ BC2{ m Fi FC3{ VBC4{ m FL Fi[4] Fc FL Fp[2]} vd v1 v2 v3 Fi[2] FC4 Fi FC5{ BC4 Fi FC4 FC4 Fi Fp FL[6] Fp} Fp FC4 Fc:3}[2] Fc} BC6{ BC5 VBC4 VBC3 VBC7{ VBC5 VBC4 FC4 Fs Fi FC5 FL[4] FC5} vd v4 v5 Fi FC8{} FD Fp FC3[2] FD FL Fi FC7} vd Fp[2] FU9{ m Fp FL Fi Fc Fi FL Fl FL Fs Fp FD Fc[6]} Fl Fp}


 S20956C11 ::~S20956C11(){ note_dtor("S20956C11", this);}
S20956C11 ::S20956C11(){ note_ctor("S20956C11", this);} // tgen

static void Test_S20956C11()
{
  extern Class_Descriptor cd_S20956C11;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(279,861)];
    init_test(&cd_S20956C11, buf);
    S20956C11 *dp, &lv = *(dp=new (buf) S20956C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(4448,3440), "sizeof(S20956C11)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20956C11)");
    check_base_class_offset(lv, (S20956C12*), ABISELECT(2152,1672), "S20956C11");
    /*is_ambiguous_... S20956C13::S20956C4 */ AMB_check_base_class_offset(lv, (S20956C5*)(S20956C4*)(S20956C13*), ABISELECT(8,4), "S20956C11");
    /*is_ambiguous_... S20956C13::S20956C4 */ AMB_check_base_class_offset(lv, (S20956C4*)(S20956C13*), ABISELECT(8,4), "S20956C11");
    /*is_ambiguous_... S20956C13::S20956C5 */ AMB_check_base_class_offset(lv, (S20956C5*)(S20956C13*), ABISELECT(3136,2412), "S20956C11");
    check_base_class_offset(lv, (S20956C5*)(S20956C9*), ABISELECT(3136,2412), "S20956C11");
    /*is_ambiguous_... S20956C3::S20956C5 */ AMB_check_base_class_offset(lv, (S20956C5*)(S20956C3*), ABISELECT(3136,2412), "S20956C11");
    check_base_class_offset(lv, (S20956C9*)(S20956C13*), ABISELECT(3192,2456), "S20956C11");
    /*is_ambiguous_... S20956C11::S20956C4 */ AMB_check_base_class_offset(lv, (S20956C5*)(S20956C4*), ABISELECT(4192,3244), "S20956C11");
    check_base_class_offset(lv, (S20956C4*)(S20956C3*), ABISELECT(4192,3244), "S20956C11");
    check_base_class_offset(lv, (S20956C3*)(S20956C13*), ABISELECT(3592,2764), "S20956C11");
    check_base_class_offset(lv, (S20956C13*), 0, "S20956C11");
    check_field_offset(lv, s20956c11f0, ABISELECT(3080,2384), "S20956C11.s20956c11f0");
    check_field_offset(lv, s20956c11f1, ABISELECT(3104,2392), "S20956C11.s20956c11f1");
    check_field_offset(lv, s20956c11f2, ABISELECT(3120,2404), "S20956C11.s20956c11f2");
    check_field_offset(lv, s20956c11f3, ABISELECT(3128,2408), "S20956C11.s20956c11f3");
    test_class_info(&lv, &cd_S20956C11);
    dp->~S20956C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20956C11(Test_S20956C11, "S20956C11", ABISELECT(4448,3440));

#else // __cplusplus

extern void _ZN9S20956C11C1Ev();
extern void _ZN9S20956C11D2Ev();
Name_Map name_map_S20956C11[] = {
  NSPAIR(_ZN9S20956C11C1Ev),
  NSPAIR(_ZN9S20956C11D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20956C12;
extern VTBL_ENTRY _ZTI9S20956C12[];
extern Class_Descriptor cd_S20956C5;
extern VTBL_ENTRY _ZTI8S20956C5[];
extern Class_Descriptor cd_S20956C4;
extern VTBL_ENTRY _ZTI8S20956C4[];
extern Class_Descriptor cd_S20956C5;
extern VTBL_ENTRY _ZTI8S20956C5[];
extern Class_Descriptor cd_S20956C9;
extern VTBL_ENTRY _ZTI8S20956C9[];
extern  VTBL_ENTRY _ZTV8S20956C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20956C9[];
extern Class_Descriptor cd_S20956C5;
extern VTBL_ENTRY _ZTI8S20956C5[];
extern Class_Descriptor cd_S20956C4;
extern VTBL_ENTRY _ZTI8S20956C4[];
extern Class_Descriptor cd_S20956C3;
extern VTBL_ENTRY _ZTI8S20956C3[];
extern  VTBL_ENTRY _ZTV8S20956C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20956C3[];
extern Class_Descriptor cd_S20956C13;
extern VTBL_ENTRY _ZTI9S20956C13[];
extern  VTBL_ENTRY _ZTV9S20956C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20956C13[];
static Base_Class bases_S20956C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20956C12,    ABISELECT(2152,1672), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20956C5,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S20956C4,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S20956C5,    ABISELECT(3136,2412), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S20956C9,    ABISELECT(3192,2456), //bcp->offset
    10, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S20956C5,    ABISELECT(4192,3244), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S20956C4,    ABISELECT(4192,3244), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S20956C3,    ABISELECT(3592,2764), //bcp->offset
    22, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S20956C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S20956C11[];
extern void _ZN9S20956C11D1Ev();
extern void _ZN9S20956C11D0Ev();
extern void _ZN9S20956C132v6Ev();
extern void _ZN9S20956C132v7Ev();
extern void ABISELECT(_ZTv0_n32_N9S20956C11D1Ev,_ZTv0_n16_N9S20956C11D1Ev)();
extern void ABISELECT(_ZThn3192_N9S20956C11D1Ev,_ZThn2456_N9S20956C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S20956C11D0Ev,_ZTv0_n16_N9S20956C11D0Ev)();
extern void ABISELECT(_ZThn3192_N9S20956C11D0Ev,_ZThn2456_N9S20956C11D0Ev)() __attribute__((weak));
extern void _ZN8S20956C92v3Ev();
extern void _ZN8S20956C92v4Ev();
extern void _ZN8S20956C92v5Ev();
static  VTBL_ENTRY vtc_S20956C11[] = {
  ABISELECT(4192,3244),
  ABISELECT(3592,2764),
  ABISELECT(3192,2456),
  ABISELECT(3136,2412),
  0,
  (VTBL_ENTRY)&(_ZTI9S20956C11[0]),
  (VTBL_ENTRY)&_ZN9S20956C11D1Ev,
  (VTBL_ENTRY)&_ZN9S20956C11D0Ev,
  (VTBL_ENTRY)&_ZN9S20956C132v6Ev,
  (VTBL_ENTRY)&_ZN9S20956C132v7Ev,
  0,
  0,
  0,
  ABISELECT(-3192,-2456),
  ABISELECT(-56,-44),
  ABISELECT(-3192,-2456),
  (VTBL_ENTRY)&(_ZTI9S20956C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20956C11D1Ev,_ZTv0_n16_N9S20956C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20956C11D0Ev,_ZTv0_n16_N9S20956C11D0Ev),
  (VTBL_ENTRY)&_ZN8S20956C92v3Ev,
  (VTBL_ENTRY)&_ZN8S20956C92v4Ev,
  (VTBL_ENTRY)&_ZN8S20956C92v5Ev,
  ABISELECT(-456,-352),
  ABISELECT(600,480),
  ABISELECT(-3592,-2764),
  (VTBL_ENTRY)&(_ZTI9S20956C11[0]),
};
extern VTBL_ENTRY _ZTV9S20956C11[];
extern void _ZN9S20956C13D1Ev();
extern void _ZN9S20956C13D0Ev();
extern void _ZN9S20956C132v6Ev();
extern void _ZN9S20956C132v7Ev();
static  VTBL_ENTRY _tg__ZTV9S20956C13__9S20956C11[] = {
  ABISELECT(4192,3244),
  ABISELECT(3592,2764),
  ABISELECT(3192,2456),
  ABISELECT(3136,2412),
  0,
  (VTBL_ENTRY)&(_ZTI9S20956C13[0]),
  (VTBL_ENTRY)&_ZN9S20956C13D1Ev,
  (VTBL_ENTRY)&_ZN9S20956C13D0Ev,
  (VTBL_ENTRY)&_ZN9S20956C132v6Ev,
  (VTBL_ENTRY)&_ZN9S20956C132v7Ev,
};
extern void ABISELECT(_ZTv0_n32_N9S20956C13D1Ev,_ZTv0_n16_N9S20956C13D1Ev)();
extern void ABISELECT(_ZThn3192_N9S20956C13D1Ev,_ZThn2456_N9S20956C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S20956C13D0Ev,_ZTv0_n16_N9S20956C13D0Ev)();
extern void ABISELECT(_ZThn3192_N9S20956C13D0Ev,_ZThn2456_N9S20956C13D0Ev)() __attribute__((weak));
extern void _ZN8S20956C92v3Ev();
extern void _ZN8S20956C92v4Ev();
extern void _ZN8S20956C92v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20956C9__9S20956C13__9S20956C11[] = {
  0,
  0,
  0,
  ABISELECT(-3192,-2456),
  ABISELECT(-56,-44),
  ABISELECT(-3192,-2456),
  (VTBL_ENTRY)&(_ZTI9S20956C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20956C13D1Ev,_ZTv0_n16_N9S20956C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20956C13D0Ev,_ZTv0_n16_N9S20956C13D0Ev),
  (VTBL_ENTRY)&_ZN8S20956C92v3Ev,
  (VTBL_ENTRY)&_ZN8S20956C92v4Ev,
  (VTBL_ENTRY)&_ZN8S20956C92v5Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20956C3__9S20956C13__9S20956C11[] = {
  ABISELECT(-456,-352),
  ABISELECT(600,480),
  ABISELECT(-3592,-2764),
  (VTBL_ENTRY)&(_ZTI9S20956C13[0]),
};
extern void _ZN8S20956C9D1Ev();
extern void _ZN8S20956C9D0Ev();
extern void _ZN8S20956C92v3Ev();
extern void _ZN8S20956C92v4Ev();
extern void _ZN8S20956C92v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20956C9__9S20956C11[] = {
  ABISELECT(-56,-44),
  0,
  (VTBL_ENTRY)&(_ZTI8S20956C9[0]),
  (VTBL_ENTRY)&_ZN8S20956C9D1Ev,
  (VTBL_ENTRY)&_ZN8S20956C9D0Ev,
  (VTBL_ENTRY)&_ZN8S20956C92v3Ev,
  (VTBL_ENTRY)&_ZN8S20956C92v4Ev,
  (VTBL_ENTRY)&_ZN8S20956C92v5Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20956C3__9S20956C11[] = {
  ABISELECT(-456,-352),
  ABISELECT(600,480),
  0,
  (VTBL_ENTRY)&(_ZTI8S20956C3[0]),
};
static  VTT_ENTRY vtt_S20956C11[] = {
  {&(_ZTV9S20956C11[6]),  6,26},
  {&(_tg__ZTV9S20956C13__9S20956C11[6]),  6,10},
  {&(_tg__ZTV8S20956C9__9S20956C13__9S20956C11[7]),  7,12},
  {&(_tg__ZTV8S20956C3__9S20956C13__9S20956C11[4]),  4,4},
  {&(_ZTV9S20956C11[17]),  17,26},
  {&(_ZTV9S20956C11[26]),  26,26},
  {&(_tg__ZTV8S20956C9__9S20956C11[3]),  3,8},
  {&(_tg__ZTV8S20956C3__9S20956C11[4]),  4,4},
};
extern VTBL_ENTRY _ZTI9S20956C11[];
extern  VTBL_ENTRY _ZTV9S20956C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20956C11[];
static VTBL_ENTRY alt_thunk_names2[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20956C13D0Ev,_ZTv0_n16_N9S20956C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3192_N9S20956C13D0Ev,_ZThn2456_N9S20956C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20956C13D1Ev,_ZTv0_n16_N9S20956C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3192_N9S20956C13D1Ev,_ZThn2456_N9S20956C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20956C11D0Ev,_ZTv0_n16_N9S20956C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3192_N9S20956C11D0Ev,_ZThn2456_N9S20956C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20956C11D1Ev,_ZTv0_n16_N9S20956C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3192_N9S20956C11D1Ev,_ZThn2456_N9S20956C11D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20956C11 = {  "S20956C11", // class name
  bases_S20956C11, 9,
  &(vtc_S20956C11[0]), // expected_vtbl_contents
  &(vtt_S20956C11[0]), // expected_vtt_contents
  ABISELECT(4448,3440), // object size
  NSPAIRA(_ZTI9S20956C11),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV9S20956C11),26, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20956C11),8, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names2,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20956C18  : virtual S20956C5 , S20956C3 {
  void *s20956c18f0;
  char s20956c18f1[9];
  ::S20956C3 s20956c18f2;
  ::S20956C4 s20956c18f3;
  __tsi64 s20956c18f4:37;
  char s20956c18f5;
  ::S20956C4 s20956c18f6;
  char s20956c18f7:8;
  void *s20956c18f8;
  char s20956c18f9;
  int s20956c18f10;
  int s20956c18f11;
  ~S20956C18(); // tgen
  S20956C18(); // tgen
};
//SIG(-1 S20956C18) C1{ VBC2{ m FL Fi[4] Fc FL Fp[2]} BC3{ VBC4{ BC2 Fi FC2 FC2 Fi Fp FL[6] Fp} VBC2 FC2 Fs Fi FC4 FL[4] FC4} Fp Fc[9] FC3 FC4 FL:37 Fc FC4 Fc:8 Fp Fc Fi[2]}


S20956C18 ::~S20956C18(){ note_dtor("S20956C18", this);} // tgen
S20956C18 ::S20956C18(){ note_ctor("S20956C18", this);} // tgen

static void Test_S20956C18()
{
  extern Class_Descriptor cd_S20956C18;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(297,470)];
    init_test(&cd_S20956C18, buf);
    S20956C18 *dp, &lv = *(dp=new (buf) S20956C18());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(2368,1876), "sizeof(S20956C18)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20956C18)");
    /*is_ambiguous_... S20956C18::S20956C5 */ AMB_check_base_class_offset(lv, (S20956C5*), ABISELECT(2064,1636), "S20956C18");
    /*is_ambiguous_... S20956C3::S20956C5 */ AMB_check_base_class_offset(lv, (S20956C5*)(S20956C3*), ABISELECT(2064,1636), "S20956C18");
    check_base_class_offset(lv, (S20956C5*)(S20956C4*), ABISELECT(2120,1680), "S20956C18");
    check_base_class_offset(lv, (S20956C4*)(S20956C3*), ABISELECT(2120,1680), "S20956C18");
    check_base_class_offset(lv, (S20956C3*), 0, "S20956C18");
    check_field_offset(lv, s20956c18f0, ABISELECT(600,480), "S20956C18.s20956c18f0");
    check_field_offset(lv, s20956c18f1, ABISELECT(608,484), "S20956C18.s20956c18f1");
    check_field_offset(lv, s20956c18f2, ABISELECT(624,496), "S20956C18.s20956c18f2");
    check_field_offset(lv, s20956c18f3, ABISELECT(1528,1216), "S20956C18.s20956c18f3");
    set_bf_and_test(lv, s20956c18f4, ABISELECT(1776,1412), 0, 37, 1, "S20956C18");
    set_bf_and_test(lv, s20956c18f4, ABISELECT(1776,1412), 0, 37, hide_sll(1LL<<36), "S20956C18");
    check_field_offset(lv, s20956c18f5, ABISELECT(1781,1417), "S20956C18.s20956c18f5");
    check_field_offset(lv, s20956c18f6, ABISELECT(1784,1420), "S20956C18.s20956c18f6");
    set_bf_and_test(lv, s20956c18f7, ABISELECT(2032,1616), 0, 8, 1, "S20956C18");
    set_bf_and_test(lv, s20956c18f7, ABISELECT(2032,1616), 0, 8, hide_sll(1LL<<7), "S20956C18");
    check_field_offset(lv, s20956c18f8, ABISELECT(2040,1620), "S20956C18.s20956c18f8");
    check_field_offset(lv, s20956c18f9, ABISELECT(2048,1624), "S20956C18.s20956c18f9");
    check_field_offset(lv, s20956c18f10, ABISELECT(2052,1628), "S20956C18.s20956c18f10");
    check_field_offset(lv, s20956c18f11, ABISELECT(2056,1632), "S20956C18.s20956c18f11");
    test_class_info(&lv, &cd_S20956C18);
    dp->~S20956C18();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20956C18(Test_S20956C18, "S20956C18", ABISELECT(2368,1876));

#else // __cplusplus

extern void _ZN9S20956C18C1Ev();
extern void _ZN9S20956C18D1Ev();
Name_Map name_map_S20956C18[] = {
  NSPAIR(_ZN9S20956C18C1Ev),
  NSPAIR(_ZN9S20956C18D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20956C5;
extern VTBL_ENTRY _ZTI8S20956C5[];
extern Class_Descriptor cd_S20956C5;
extern VTBL_ENTRY _ZTI8S20956C5[];
extern Class_Descriptor cd_S20956C4;
extern VTBL_ENTRY _ZTI8S20956C4[];
extern Class_Descriptor cd_S20956C3;
extern VTBL_ENTRY _ZTI8S20956C3[];
extern  VTBL_ENTRY _ZTV8S20956C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20956C3[];
static Base_Class bases_S20956C18[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20956C5,    ABISELECT(2064,1636), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20956C5,    ABISELECT(2120,1680), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S20956C4,    ABISELECT(2120,1680), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S20956C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S20956C18[];
static  VTBL_ENTRY vtc_S20956C18[] = {
  ABISELECT(2064,1636),
  ABISELECT(2120,1680),
  0,
  (VTBL_ENTRY)&(_ZTI9S20956C18[0]),
};
extern VTBL_ENTRY _ZTV9S20956C18[];
static  VTBL_ENTRY _tg__ZTV8S20956C3__9S20956C18[] = {
  ABISELECT(2064,1636),
  ABISELECT(2120,1680),
  0,
  (VTBL_ENTRY)&(_ZTI8S20956C3[0]),
};
static  VTT_ENTRY vtt_S20956C18[] = {
  {&(_ZTV9S20956C18[4]),  4,4},
  {&(_tg__ZTV8S20956C3__9S20956C18[4]),  4,4},
};
extern VTBL_ENTRY _ZTI9S20956C18[];
extern  VTBL_ENTRY _ZTV9S20956C18[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20956C18[];
Class_Descriptor cd_S20956C18 = {  "S20956C18", // class name
  bases_S20956C18, 4,
  &(vtc_S20956C18[0]), // expected_vtbl_contents
  &(vtt_S20956C18[0]), // expected_vtt_contents
  ABISELECT(2368,1876), // object size
  NSPAIRA(_ZTI9S20956C18),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV9S20956C18),4, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20956C18),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20956C17  : virtual S20956C13 , S20956C18 {
  int s20956c17f0;
  int s20956c17f1;
  short s20956c17f2;
  ::S20956C10 s20956c17f3;
  int s20956c17f4;
  int s20956c17f5;
  short s20956c17f6;
  int s20956c17f7;
  int s20956c17f8;
  virtual void  v8(); // _ZN9S20956C172v8Ev
  virtual void  v9(); // _ZN9S20956C172v9Ev
  ~S20956C17(); // tgen
  S20956C17(); // tgen
};
//SIG(-1 S20956C17) C1{ VBC2{ BC3{ BC4{ m FL Fi[4] Fc FL Fp[2]} Fi FC4 FC4 Fi Fp FL[6] Fp} VBC4 VBC5{ VBC4 vd v3 v4 v5 Fi[2] FC4 Fi FC3 Fp FC4 Fc:3} VBC6{ VBC3 VBC4 FC4 Fs Fi FC3 FL[4] FC3} vd v6 v7 Fi FC7{} FD Fp FC5[2] FD FL Fi FC6} BC8{ VBC4 BC6 Fp Fc[9] FC6 FC3 FL:37 Fc FC3 Fc:8 Fp Fc Fi[2]} v1 v2 Fi[2] Fs FU9{ m Fp FL Fi Fc Fi FL Fl FL Fs Fp FD Fc[6]} Fi Fi Fs Fi Fi}


void  S20956C17 ::v8(){vfunc_called(this, "_ZN9S20956C172v8Ev");}
void  S20956C17 ::v9(){vfunc_called(this, "_ZN9S20956C172v9Ev");}
S20956C17 ::~S20956C17(){ note_dtor("S20956C17", this);} // tgen
S20956C17 ::S20956C17(){ note_ctor("S20956C17", this);} // tgen

static void Test_S20956C17()
{
  extern Class_Descriptor cd_S20956C17;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(350,1096)];
    init_test(&cd_S20956C17, buf);
    S20956C17 *dp, &lv = *(dp=new (buf) S20956C17());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(5584,4380), "sizeof(S20956C17)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20956C17)");
    /*is_ambiguous_... S20956C13::S20956C4 */ AMB_check_base_class_offset(lv, (S20956C5*)(S20956C4*)(S20956C13*), ABISELECT(2136,1684), "S20956C17");
    /*is_ambiguous_... S20956C13::S20956C4 */ AMB_check_base_class_offset(lv, (S20956C4*)(S20956C13*), ABISELECT(2136,1684), "S20956C17");
    /*is_ambiguous_... S20956C13::S20956C5 */ AMB_check_base_class_offset(lv, (S20956C5*)(S20956C13*), ABISELECT(4280,3352), "S20956C17");
    check_base_class_offset(lv, (S20956C5*)(S20956C9*), ABISELECT(4280,3352), "S20956C17");
    /*is_ambiguous_... S20956C17::S20956C3 */ AMB_check_base_class_offset(lv, (S20956C5*)(S20956C3*), ABISELECT(4280,3352), "S20956C17");
    /*is_ambiguous_... S20956C18::S20956C5 */ AMB_check_base_class_offset(lv, (S20956C5*)(S20956C18*), ABISELECT(4280,3352), "S20956C17");
    /*is_ambiguous_... S20956C3::S20956C5 */ AMB_check_base_class_offset(lv, (S20956C5*)(S20956C3*)(S20956C18*), ABISELECT(4280,3352), "S20956C17");
    check_base_class_offset(lv, (S20956C9*)(S20956C13*), ABISELECT(4336,3396), "S20956C17");
    /*is_ambiguous_... S20956C17::S20956C4 */ AMB_check_base_class_offset(lv, (S20956C5*)(S20956C4*), ABISELECT(5336,4184), "S20956C17");
    /*is_ambiguous_... S20956C17::S20956C3 */ AMB_check_base_class_offset(lv, (S20956C4*)(S20956C3*), ABISELECT(5336,4184), "S20956C17");
    check_base_class_offset(lv, (S20956C4*)(S20956C3*)(S20956C18*), ABISELECT(5336,4184), "S20956C17");
    check_base_class_offset(lv, (S20956C3*)(S20956C13*), ABISELECT(4736,3704), "S20956C17");
    check_base_class_offset(lv, (S20956C13*), ABISELECT(2128,1680), "S20956C17");
    check_base_class_offset(lv, (S20956C3*)(S20956C18*), 0, "S20956C17");
    check_base_class_offset(lv, (S20956C18*), 0, "S20956C17");
    check_field_offset(lv, s20956c17f0, ABISELECT(2060,1636), "S20956C17.s20956c17f0");
    check_field_offset(lv, s20956c17f1, ABISELECT(2064,1640), "S20956C17.s20956c17f1");
    check_field_offset(lv, s20956c17f2, ABISELECT(2068,1644), "S20956C17.s20956c17f2");
    check_field_offset(lv, s20956c17f3, ABISELECT(2080,1648), "S20956C17.s20956c17f3");
    check_field_offset(lv, s20956c17f4, ABISELECT(2096,1660), "S20956C17.s20956c17f4");
    check_field_offset(lv, s20956c17f5, ABISELECT(2100,1664), "S20956C17.s20956c17f5");
    check_field_offset(lv, s20956c17f6, ABISELECT(2104,1668), "S20956C17.s20956c17f6");
    check_field_offset(lv, s20956c17f7, ABISELECT(2108,1672), "S20956C17.s20956c17f7");
    check_field_offset(lv, s20956c17f8, ABISELECT(2112,1676), "S20956C17.s20956c17f8");
    test_class_info(&lv, &cd_S20956C17);
    dp->~S20956C17();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20956C17(Test_S20956C17, "S20956C17", ABISELECT(5584,4380));

#else // __cplusplus

extern void _ZN9S20956C17C1Ev();
extern void _ZN9S20956C17D1Ev();
Name_Map name_map_S20956C17[] = {
  NSPAIR(_ZN9S20956C17C1Ev),
  NSPAIR(_ZN9S20956C17D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20956C5;
extern VTBL_ENTRY _ZTI8S20956C5[];
extern Class_Descriptor cd_S20956C4;
extern VTBL_ENTRY _ZTI8S20956C4[];
extern Class_Descriptor cd_S20956C5;
extern VTBL_ENTRY _ZTI8S20956C5[];
extern Class_Descriptor cd_S20956C9;
extern VTBL_ENTRY _ZTI8S20956C9[];
extern  VTBL_ENTRY _ZTV8S20956C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20956C9[];
extern Class_Descriptor cd_S20956C5;
extern VTBL_ENTRY _ZTI8S20956C5[];
extern Class_Descriptor cd_S20956C4;
extern VTBL_ENTRY _ZTI8S20956C4[];
extern Class_Descriptor cd_S20956C3;
extern VTBL_ENTRY _ZTI8S20956C3[];
extern  VTBL_ENTRY _ZTV8S20956C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20956C3[];
extern Class_Descriptor cd_S20956C13;
extern VTBL_ENTRY _ZTI9S20956C13[];
extern  VTBL_ENTRY _ZTV9S20956C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20956C13[];
extern Class_Descriptor cd_S20956C3;
extern VTBL_ENTRY _ZTI8S20956C3[];
extern  VTBL_ENTRY _ZTV8S20956C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20956C3[];
extern Class_Descriptor cd_S20956C18;
extern VTBL_ENTRY _ZTI9S20956C18[];
extern  VTBL_ENTRY _ZTV9S20956C18[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20956C18[];
static Base_Class bases_S20956C17[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20956C5,    ABISELECT(2136,1684), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S20956C4,    ABISELECT(2136,1684), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S20956C5,    ABISELECT(4280,3352), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S20956C9,    ABISELECT(4336,3396), //bcp->offset
    24, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S20956C5,    ABISELECT(5336,4184), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S20956C4,    ABISELECT(5336,4184), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S20956C3,    ABISELECT(4736,3704), //bcp->offset
    36, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S20956C13,    ABISELECT(2128,1680), //bcp->offset
    11, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20956C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S20956C18,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S20956C17[];
extern void _ZN9S20956C172v8Ev();
extern void _ZN9S20956C172v9Ev();
extern void _ZN9S20956C17D1Ev();
extern void _ZN9S20956C17D0Ev();
extern void ABISELECT(_ZTv0_n56_N9S20956C17D1Ev,_ZTv0_n28_N9S20956C17D1Ev)();
extern void ABISELECT(_ZThn2128_N9S20956C17D1Ev,_ZThn1680_N9S20956C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N9S20956C17D0Ev,_ZTv0_n28_N9S20956C17D0Ev)();
extern void ABISELECT(_ZThn2128_N9S20956C17D0Ev,_ZThn1680_N9S20956C17D0Ev)() __attribute__((weak));
extern void _ZN9S20956C132v6Ev();
extern void _ZN9S20956C132v7Ev();
extern void ABISELECT(_ZTv0_n32_N9S20956C17D1Ev,_ZTv0_n16_N9S20956C17D1Ev)();
extern void ABISELECT(_ZThn4336_N9S20956C17D1Ev,_ZThn3396_N9S20956C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S20956C17D0Ev,_ZTv0_n16_N9S20956C17D0Ev)();
extern void ABISELECT(_ZThn4336_N9S20956C17D0Ev,_ZThn3396_N9S20956C17D0Ev)() __attribute__((weak));
extern void _ZN8S20956C92v3Ev();
extern void _ZN8S20956C92v4Ev();
extern void _ZN8S20956C92v5Ev();
static  VTBL_ENTRY vtc_S20956C17[] = {
  ABISELECT(4736,3704),
  ABISELECT(4336,3396),
  ABISELECT(2128,1680),
  ABISELECT(4280,3352),
  ABISELECT(5336,4184),
  0,
  (VTBL_ENTRY)&(_ZTI9S20956C17[0]),
  (VTBL_ENTRY)&_ZN9S20956C172v8Ev,
  (VTBL_ENTRY)&_ZN9S20956C172v9Ev,
  (VTBL_ENTRY)&_ZN9S20956C17D1Ev,
  (VTBL_ENTRY)&_ZN9S20956C17D0Ev,
  0,
  0,
  ABISELECT(-2128,-1680),
  ABISELECT(3208,2504),
  ABISELECT(2608,2024),
  ABISELECT(2208,1716),
  ABISELECT(2152,1672),
  ABISELECT(-2128,-1680),
  (VTBL_ENTRY)&(_ZTI9S20956C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S20956C17D1Ev,_ZTv0_n28_N9S20956C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S20956C17D0Ev,_ZTv0_n28_N9S20956C17D0Ev),
  (VTBL_ENTRY)&_ZN9S20956C132v6Ev,
  (VTBL_ENTRY)&_ZN9S20956C132v7Ev,
  0,
  0,
  0,
  ABISELECT(-4336,-3396),
  ABISELECT(-56,-44),
  ABISELECT(-4336,-3396),
  (VTBL_ENTRY)&(_ZTI9S20956C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20956C17D1Ev,_ZTv0_n16_N9S20956C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20956C17D0Ev,_ZTv0_n16_N9S20956C17D0Ev),
  (VTBL_ENTRY)&_ZN8S20956C92v3Ev,
  (VTBL_ENTRY)&_ZN8S20956C92v4Ev,
  (VTBL_ENTRY)&_ZN8S20956C92v5Ev,
  ABISELECT(-456,-352),
  ABISELECT(600,480),
  ABISELECT(-4736,-3704),
  (VTBL_ENTRY)&(_ZTI9S20956C17[0]),
};
extern VTBL_ENTRY _ZTV9S20956C17[];
static  VTBL_ENTRY _tg__ZTV9S20956C18__9S20956C17[] = {
  ABISELECT(4280,3352),
  ABISELECT(5336,4184),
  0,
  (VTBL_ENTRY)&(_ZTI9S20956C18[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20956C39S20956C18__A1__9S20956C17[] = {
  ABISELECT(4280,3352),
  ABISELECT(5336,4184),
  0,
  (VTBL_ENTRY)&(_ZTI8S20956C3[0]),
};
extern void _ZN9S20956C13D1Ev();
extern void _ZN9S20956C13D0Ev();
extern void _ZN9S20956C132v6Ev();
extern void _ZN9S20956C132v7Ev();
static  VTBL_ENTRY _tg__ZTV9S20956C13__9S20956C17[] = {
  ABISELECT(3208,2504),
  ABISELECT(2608,2024),
  ABISELECT(2208,1716),
  ABISELECT(2152,1672),
  0,
  (VTBL_ENTRY)&(_ZTI9S20956C13[0]),
  (VTBL_ENTRY)&_ZN9S20956C13D1Ev,
  (VTBL_ENTRY)&_ZN9S20956C13D0Ev,
  (VTBL_ENTRY)&_ZN9S20956C132v6Ev,
  (VTBL_ENTRY)&_ZN9S20956C132v7Ev,
};
extern void ABISELECT(_ZTv0_n32_N9S20956C13D1Ev,_ZTv0_n16_N9S20956C13D1Ev)();
extern void ABISELECT(_ZThn2208_N9S20956C13D1Ev,_ZThn1716_N9S20956C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S20956C13D0Ev,_ZTv0_n16_N9S20956C13D0Ev)();
extern void ABISELECT(_ZThn2208_N9S20956C13D0Ev,_ZThn1716_N9S20956C13D0Ev)() __attribute__((weak));
extern void _ZN8S20956C92v3Ev();
extern void _ZN8S20956C92v4Ev();
extern void _ZN8S20956C92v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20956C9__9S20956C13__9S20956C17[] = {
  0,
  0,
  0,
  ABISELECT(-2208,-1716),
  ABISELECT(-56,-44),
  ABISELECT(-2208,-1716),
  (VTBL_ENTRY)&(_ZTI9S20956C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20956C13D1Ev,_ZTv0_n16_N9S20956C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20956C13D0Ev,_ZTv0_n16_N9S20956C13D0Ev),
  (VTBL_ENTRY)&_ZN8S20956C92v3Ev,
  (VTBL_ENTRY)&_ZN8S20956C92v4Ev,
  (VTBL_ENTRY)&_ZN8S20956C92v5Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20956C3__9S20956C13__9S20956C17[] = {
  ABISELECT(-456,-352),
  ABISELECT(600,480),
  ABISELECT(-2608,-2024),
  (VTBL_ENTRY)&(_ZTI9S20956C13[0]),
};
extern void _ZN8S20956C9D1Ev();
extern void _ZN8S20956C9D0Ev();
extern void _ZN8S20956C92v3Ev();
extern void _ZN8S20956C92v4Ev();
extern void _ZN8S20956C92v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20956C9__9S20956C17[] = {
  ABISELECT(-56,-44),
  0,
  (VTBL_ENTRY)&(_ZTI8S20956C9[0]),
  (VTBL_ENTRY)&_ZN8S20956C9D1Ev,
  (VTBL_ENTRY)&_ZN8S20956C9D0Ev,
  (VTBL_ENTRY)&_ZN8S20956C92v3Ev,
  (VTBL_ENTRY)&_ZN8S20956C92v4Ev,
  (VTBL_ENTRY)&_ZN8S20956C92v5Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20956C3__9S20956C17[] = {
  ABISELECT(-456,-352),
  ABISELECT(600,480),
  0,
  (VTBL_ENTRY)&(_ZTI8S20956C3[0]),
};
static  VTT_ENTRY vtt_S20956C17[] = {
  {&(_ZTV9S20956C17[7]),  7,40},
  {&(_tg__ZTV9S20956C18__9S20956C17[4]),  4,4},
  {&(_tg__ZTV8S20956C39S20956C18__A1__9S20956C17[4]),  4,4},
  {&(_ZTV9S20956C17[20]),  20,40},
  {&(_ZTV9S20956C17[31]),  31,40},
  {&(_ZTV9S20956C17[40]),  40,40},
  {&(_tg__ZTV9S20956C13__9S20956C17[6]),  6,10},
  {&(_tg__ZTV8S20956C9__9S20956C13__9S20956C17[7]),  7,12},
  {&(_tg__ZTV8S20956C3__9S20956C13__9S20956C17[4]),  4,4},
  {&(_tg__ZTV8S20956C9__9S20956C17[3]),  3,8},
  {&(_tg__ZTV8S20956C3__9S20956C17[4]),  4,4},
};
extern VTBL_ENTRY _ZTI9S20956C17[];
extern  VTBL_ENTRY _ZTV9S20956C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20956C17[];
static VTBL_ENTRY alt_thunk_names3[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20956C13D0Ev,_ZTv0_n16_N9S20956C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2208_N9S20956C13D0Ev,_ZThn1716_N9S20956C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20956C13D1Ev,_ZTv0_n16_N9S20956C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2208_N9S20956C13D1Ev,_ZThn1716_N9S20956C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20956C17D0Ev,_ZTv0_n16_N9S20956C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4336_N9S20956C17D0Ev,_ZThn3396_N9S20956C17D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20956C17D1Ev,_ZTv0_n16_N9S20956C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4336_N9S20956C17D1Ev,_ZThn3396_N9S20956C17D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N9S20956C17D0Ev,_ZTv0_n28_N9S20956C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2128_N9S20956C17D0Ev,_ZThn1680_N9S20956C17D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N9S20956C17D1Ev,_ZTv0_n28_N9S20956C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2128_N9S20956C17D1Ev,_ZThn1680_N9S20956C17D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20956C17 = {  "S20956C17", // class name
  bases_S20956C17, 10,
  &(vtc_S20956C17[0]), // expected_vtbl_contents
  &(vtt_S20956C17[0]), // expected_vtt_contents
  ABISELECT(5584,4380), // object size
  NSPAIRA(_ZTI9S20956C17),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV9S20956C17),40, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20956C17),11, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names3,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20956C16  : virtual S20956C17 {
  ::S20956C9 s20956c16f0[2];
  long double s20956c16f1;
  __tsi64 s20956c16f2;
  ::S20956C5 s20956c16f3;
  void *s20956c16f4;
  virtual  ~S20956C16(); // _ZN9S20956C16D2Ev
  S20956C16(); // tgen
};
//SIG(-1 S20956C16) C1{ VBC2{ VBC3{ BC4{ BC5{ m FL Fi[4] Fc FL Fp[2]} Fi FC5 FC5 Fi Fp FL[6] Fp} VBC5 VBC6{ VBC5 vd v1 v2 v3 Fi[2] FC5 Fi FC4 Fp FC5 Fc:3} VBC7{ VBC4 VBC5 FC5 Fs Fi FC4 FL[4] FC4} vd v4 v5 Fi FC8{} FD Fp FC6[2] FD FL Fi FC7} BC9{ VBC5 BC7 Fp Fc[9] FC7 FC4 FL:37 Fc FC4 Fc:8 Fp Fc Fi[2]} v6 v7 Fi[2] Fs FU10{ m Fp FL Fi Fc Fi FL Fl FL Fs Fp FD Fc[6]} Fi Fi Fs Fi Fi} vd FC6[2] FD FL FC5 Fp}


 S20956C16 ::~S20956C16(){ note_dtor("S20956C16", this);}
S20956C16 ::S20956C16(){ note_ctor("S20956C16", this);} // tgen

static void Test_S20956C16()
{
  extern Class_Descriptor cd_S20956C16;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(414,1290)];
    init_test(&cd_S20956C16, buf);
    S20956C16 *dp, &lv = *(dp=new (buf) S20956C16());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(6608,5156), "sizeof(S20956C16)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20956C16)");
    /*is_ambiguous_... S20956C13::S20956C4 */ AMB_check_base_class_offset(lv, (S20956C5*)(S20956C4*)(S20956C13*), ABISELECT(3160,2460), "S20956C16");
    /*is_ambiguous_... S20956C13::S20956C4 */ AMB_check_base_class_offset(lv, (S20956C4*)(S20956C13*), ABISELECT(3160,2460), "S20956C16");
    /*is_ambiguous_... S20956C13::S20956C5 */ AMB_check_base_class_offset(lv, (S20956C5*)(S20956C13*), ABISELECT(5304,4128), "S20956C16");
    check_base_class_offset(lv, (S20956C5*)(S20956C9*), ABISELECT(5304,4128), "S20956C16");
    /*is_ambiguous_... S20956C16::S20956C3 */ AMB_check_base_class_offset(lv, (S20956C5*)(S20956C3*), ABISELECT(5304,4128), "S20956C16");
    /*is_ambiguous_... S20956C18::S20956C5 */ AMB_check_base_class_offset(lv, (S20956C5*)(S20956C18*)(S20956C17*), ABISELECT(5304,4128), "S20956C16");
    /*is_ambiguous_... S20956C3::S20956C5 */ AMB_check_base_class_offset(lv, (S20956C5*)(S20956C3*)(S20956C18*)(S20956C17*), ABISELECT(5304,4128), "S20956C16");
    check_base_class_offset(lv, (S20956C9*)(S20956C13*), ABISELECT(5360,4172), "S20956C16");
    /*is_ambiguous_... S20956C16::S20956C4 */ AMB_check_base_class_offset(lv, (S20956C5*)(S20956C4*), ABISELECT(6360,4960), "S20956C16");
    /*is_ambiguous_... S20956C16::S20956C3 */ AMB_check_base_class_offset(lv, (S20956C4*)(S20956C3*), ABISELECT(6360,4960), "S20956C16");
    check_base_class_offset(lv, (S20956C4*)(S20956C3*)(S20956C18*)(S20956C17*), ABISELECT(6360,4960), "S20956C16");
    check_base_class_offset(lv, (S20956C3*)(S20956C13*), ABISELECT(5760,4480), "S20956C16");
    check_base_class_offset(lv, (S20956C13*)(S20956C17*), ABISELECT(3152,2456), "S20956C16");
    check_base_class_offset(lv, (S20956C3*)(S20956C18*)(S20956C17*), ABISELECT(1024,776), "S20956C16");
    check_base_class_offset(lv, (S20956C18*)(S20956C17*), ABISELECT(1024,776), "S20956C16");
    check_base_class_offset(lv, (S20956C17*), ABISELECT(1024,776), "S20956C16");
    check_field_offset(lv, s20956c16f0, ABISELECT(8,4), "S20956C16.s20956c16f0");
    check_field_offset(lv, s20956c16f1, ABISELECT(928,708), "S20956C16.s20956c16f1");
    check_field_offset(lv, s20956c16f2, ABISELECT(944,720), "S20956C16.s20956c16f2");
    check_field_offset(lv, s20956c16f3, ABISELECT(952,728), "S20956C16.s20956c16f3");
    check_field_offset(lv, s20956c16f4, ABISELECT(1008,772), "S20956C16.s20956c16f4");
    test_class_info(&lv, &cd_S20956C16);
    dp->~S20956C16();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20956C16(Test_S20956C16, "S20956C16", ABISELECT(6608,5156));

#else // __cplusplus

extern void _ZN9S20956C16C1Ev();
extern void _ZN9S20956C16D2Ev();
Name_Map name_map_S20956C16[] = {
  NSPAIR(_ZN9S20956C16C1Ev),
  NSPAIR(_ZN9S20956C16D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20956C5;
extern VTBL_ENTRY _ZTI8S20956C5[];
extern Class_Descriptor cd_S20956C4;
extern VTBL_ENTRY _ZTI8S20956C4[];
extern Class_Descriptor cd_S20956C5;
extern VTBL_ENTRY _ZTI8S20956C5[];
extern Class_Descriptor cd_S20956C9;
extern VTBL_ENTRY _ZTI8S20956C9[];
extern  VTBL_ENTRY _ZTV8S20956C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20956C9[];
extern Class_Descriptor cd_S20956C5;
extern VTBL_ENTRY _ZTI8S20956C5[];
extern Class_Descriptor cd_S20956C4;
extern VTBL_ENTRY _ZTI8S20956C4[];
extern Class_Descriptor cd_S20956C3;
extern VTBL_ENTRY _ZTI8S20956C3[];
extern  VTBL_ENTRY _ZTV8S20956C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20956C3[];
extern Class_Descriptor cd_S20956C13;
extern VTBL_ENTRY _ZTI9S20956C13[];
extern  VTBL_ENTRY _ZTV9S20956C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20956C13[];
extern Class_Descriptor cd_S20956C3;
extern VTBL_ENTRY _ZTI8S20956C3[];
extern  VTBL_ENTRY _ZTV8S20956C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20956C3[];
extern Class_Descriptor cd_S20956C18;
extern VTBL_ENTRY _ZTI9S20956C18[];
extern  VTBL_ENTRY _ZTV9S20956C18[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20956C18[];
extern Class_Descriptor cd_S20956C17;
extern VTBL_ENTRY _ZTI9S20956C17[];
extern  VTBL_ENTRY _ZTV9S20956C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20956C17[];
static Base_Class bases_S20956C16[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20956C5,    ABISELECT(3160,2460), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S20956C4,    ABISELECT(3160,2460), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S20956C5,    ABISELECT(5304,4128), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S20956C9,    ABISELECT(5360,4172), //bcp->offset
    37, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S20956C5,    ABISELECT(6360,4960), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S20956C4,    ABISELECT(6360,4960), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S20956C3,    ABISELECT(5760,4480), //bcp->offset
    49, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S20956C13,    ABISELECT(3152,2456), //bcp->offset
    24, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S20956C3,    ABISELECT(1024,776), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S20956C18,    ABISELECT(1024,776), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S20956C17,    ABISELECT(1024,776), //bcp->offset
    10, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S20956C16[];
extern void _ZN9S20956C16D1Ev();
extern void _ZN9S20956C16D0Ev();
extern void _ZN9S20956C172v8Ev();
extern void _ZN9S20956C172v9Ev();
extern void ABISELECT(_ZTv0_n80_N9S20956C16D1Ev,_ZTv0_n40_N9S20956C16D1Ev)();
extern void ABISELECT(_ZThn1024_N9S20956C16D1Ev,_ZThn776_N9S20956C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N9S20956C16D0Ev,_ZTv0_n40_N9S20956C16D0Ev)();
extern void ABISELECT(_ZThn1024_N9S20956C16D0Ev,_ZThn776_N9S20956C16D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N9S20956C16D1Ev,_ZTv0_n28_N9S20956C16D1Ev)();
extern void ABISELECT(_ZThn3152_N9S20956C16D1Ev,_ZThn2456_N9S20956C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N9S20956C16D0Ev,_ZTv0_n28_N9S20956C16D0Ev)();
extern void ABISELECT(_ZThn3152_N9S20956C16D0Ev,_ZThn2456_N9S20956C16D0Ev)() __attribute__((weak));
extern void _ZN9S20956C132v6Ev();
extern void _ZN9S20956C132v7Ev();
extern void ABISELECT(_ZTv0_n32_N9S20956C16D1Ev,_ZTv0_n16_N9S20956C16D1Ev)();
extern void ABISELECT(_ZThn5360_N9S20956C16D1Ev,_ZThn4172_N9S20956C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S20956C16D0Ev,_ZTv0_n16_N9S20956C16D0Ev)();
extern void ABISELECT(_ZThn5360_N9S20956C16D0Ev,_ZThn4172_N9S20956C16D0Ev)() __attribute__((weak));
extern void _ZN8S20956C92v3Ev();
extern void _ZN8S20956C92v4Ev();
extern void _ZN8S20956C92v5Ev();
static  VTBL_ENTRY vtc_S20956C16[] = {
  ABISELECT(6360,4960),
  ABISELECT(5760,4480),
  ABISELECT(5360,4172),
  ABISELECT(5304,4128),
  ABISELECT(3152,2456),
  ABISELECT(1024,776),
  0,
  (VTBL_ENTRY)&(_ZTI9S20956C16[0]),
  (VTBL_ENTRY)&_ZN9S20956C16D1Ev,
  (VTBL_ENTRY)&_ZN9S20956C16D0Ev,
  ABISELECT(-1024,-776),
  0,
  0,
  ABISELECT(4736,3704),
  ABISELECT(4336,3396),
  ABISELECT(2128,1680),
  ABISELECT(4280,3352),
  ABISELECT(5336,4184),
  ABISELECT(-1024,-776),
  (VTBL_ENTRY)&(_ZTI9S20956C16[0]),
  (VTBL_ENTRY)&_ZN9S20956C172v8Ev,
  (VTBL_ENTRY)&_ZN9S20956C172v9Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N9S20956C16D1Ev,_ZTv0_n40_N9S20956C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N9S20956C16D0Ev,_ZTv0_n40_N9S20956C16D0Ev),
  0,
  0,
  ABISELECT(-3152,-2456),
  ABISELECT(3208,2504),
  ABISELECT(2608,2024),
  ABISELECT(2208,1716),
  ABISELECT(2152,1672),
  ABISELECT(-3152,-2456),
  (VTBL_ENTRY)&(_ZTI9S20956C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S20956C16D1Ev,_ZTv0_n28_N9S20956C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S20956C16D0Ev,_ZTv0_n28_N9S20956C16D0Ev),
  (VTBL_ENTRY)&_ZN9S20956C132v6Ev,
  (VTBL_ENTRY)&_ZN9S20956C132v7Ev,
  0,
  0,
  0,
  ABISELECT(-5360,-4172),
  ABISELECT(-56,-44),
  ABISELECT(-5360,-4172),
  (VTBL_ENTRY)&(_ZTI9S20956C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20956C16D1Ev,_ZTv0_n16_N9S20956C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20956C16D0Ev,_ZTv0_n16_N9S20956C16D0Ev),
  (VTBL_ENTRY)&_ZN8S20956C92v3Ev,
  (VTBL_ENTRY)&_ZN8S20956C92v4Ev,
  (VTBL_ENTRY)&_ZN8S20956C92v5Ev,
  ABISELECT(-456,-352),
  ABISELECT(600,480),
  ABISELECT(-5760,-4480),
  (VTBL_ENTRY)&(_ZTI9S20956C16[0]),
};
extern VTBL_ENTRY _ZTV9S20956C16[];
extern void _ZN9S20956C172v8Ev();
extern void _ZN9S20956C172v9Ev();
extern void _ZN9S20956C17D1Ev();
extern void _ZN9S20956C17D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20956C17__9S20956C16[] = {
  ABISELECT(4736,3704),
  ABISELECT(4336,3396),
  ABISELECT(2128,1680),
  ABISELECT(4280,3352),
  ABISELECT(5336,4184),
  0,
  (VTBL_ENTRY)&(_ZTI9S20956C17[0]),
  (VTBL_ENTRY)&_ZN9S20956C172v8Ev,
  (VTBL_ENTRY)&_ZN9S20956C172v9Ev,
  (VTBL_ENTRY)&_ZN9S20956C17D1Ev,
  (VTBL_ENTRY)&_ZN9S20956C17D0Ev,
};
static  VTBL_ENTRY _tg__ZTV9S20956C189S20956C17__9S20956C16[] = {
  ABISELECT(4280,3352),
  ABISELECT(5336,4184),
  0,
  (VTBL_ENTRY)&(_ZTI9S20956C18[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20956C39S20956C189S20956C17__A1__9S20956C16[] = {
  ABISELECT(4280,3352),
  ABISELECT(5336,4184),
  0,
  (VTBL_ENTRY)&(_ZTI8S20956C3[0]),
};
extern void ABISELECT(_ZTv0_n56_N9S20956C17D1Ev,_ZTv0_n28_N9S20956C17D1Ev)();
extern void ABISELECT(_ZThn2128_N9S20956C17D1Ev,_ZThn1680_N9S20956C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N9S20956C17D0Ev,_ZTv0_n28_N9S20956C17D0Ev)();
extern void ABISELECT(_ZThn2128_N9S20956C17D0Ev,_ZThn1680_N9S20956C17D0Ev)() __attribute__((weak));
extern void _ZN9S20956C132v6Ev();
extern void _ZN9S20956C132v7Ev();
static  VTBL_ENTRY _tg__ZTV9S20956C13__9S20956C17__9S20956C16[] = {
  0,
  0,
  ABISELECT(-2128,-1680),
  ABISELECT(3208,2504),
  ABISELECT(2608,2024),
  ABISELECT(2208,1716),
  ABISELECT(2152,1672),
  ABISELECT(-2128,-1680),
  (VTBL_ENTRY)&(_ZTI9S20956C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S20956C17D1Ev,_ZTv0_n28_N9S20956C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S20956C17D0Ev,_ZTv0_n28_N9S20956C17D0Ev),
  (VTBL_ENTRY)&_ZN9S20956C132v6Ev,
  (VTBL_ENTRY)&_ZN9S20956C132v7Ev,
};
extern void ABISELECT(_ZTv0_n32_N9S20956C17D1Ev,_ZTv0_n16_N9S20956C17D1Ev)();
extern void ABISELECT(_ZThn4336_N9S20956C17D1Ev,_ZThn3396_N9S20956C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S20956C17D0Ev,_ZTv0_n16_N9S20956C17D0Ev)();
extern void ABISELECT(_ZThn4336_N9S20956C17D0Ev,_ZThn3396_N9S20956C17D0Ev)() __attribute__((weak));
extern void _ZN8S20956C92v3Ev();
extern void _ZN8S20956C92v4Ev();
extern void _ZN8S20956C92v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20956C9__9S20956C17__9S20956C16[] = {
  0,
  0,
  0,
  ABISELECT(-4336,-3396),
  ABISELECT(-56,-44),
  ABISELECT(-4336,-3396),
  (VTBL_ENTRY)&(_ZTI9S20956C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20956C17D1Ev,_ZTv0_n16_N9S20956C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20956C17D0Ev,_ZTv0_n16_N9S20956C17D0Ev),
  (VTBL_ENTRY)&_ZN8S20956C92v3Ev,
  (VTBL_ENTRY)&_ZN8S20956C92v4Ev,
  (VTBL_ENTRY)&_ZN8S20956C92v5Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20956C3__9S20956C17__9S20956C16[] = {
  ABISELECT(-456,-352),
  ABISELECT(600,480),
  ABISELECT(-4736,-3704),
  (VTBL_ENTRY)&(_ZTI9S20956C17[0]),
};
extern void _ZN9S20956C13D1Ev();
extern void _ZN9S20956C13D0Ev();
extern void _ZN9S20956C132v6Ev();
extern void _ZN9S20956C132v7Ev();
static  VTBL_ENTRY _tg__ZTV9S20956C13__9S20956C16[] = {
  ABISELECT(3208,2504),
  ABISELECT(2608,2024),
  ABISELECT(2208,1716),
  ABISELECT(2152,1672),
  0,
  (VTBL_ENTRY)&(_ZTI9S20956C13[0]),
  (VTBL_ENTRY)&_ZN9S20956C13D1Ev,
  (VTBL_ENTRY)&_ZN9S20956C13D0Ev,
  (VTBL_ENTRY)&_ZN9S20956C132v6Ev,
  (VTBL_ENTRY)&_ZN9S20956C132v7Ev,
};
extern void ABISELECT(_ZTv0_n32_N9S20956C13D1Ev,_ZTv0_n16_N9S20956C13D1Ev)();
extern void ABISELECT(_ZThn2208_N9S20956C13D1Ev,_ZThn1716_N9S20956C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S20956C13D0Ev,_ZTv0_n16_N9S20956C13D0Ev)();
extern void ABISELECT(_ZThn2208_N9S20956C13D0Ev,_ZThn1716_N9S20956C13D0Ev)() __attribute__((weak));
extern void _ZN8S20956C92v3Ev();
extern void _ZN8S20956C92v4Ev();
extern void _ZN8S20956C92v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20956C9__9S20956C13__9S20956C16[] = {
  0,
  0,
  0,
  ABISELECT(-2208,-1716),
  ABISELECT(-56,-44),
  ABISELECT(-2208,-1716),
  (VTBL_ENTRY)&(_ZTI9S20956C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20956C13D1Ev,_ZTv0_n16_N9S20956C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20956C13D0Ev,_ZTv0_n16_N9S20956C13D0Ev),
  (VTBL_ENTRY)&_ZN8S20956C92v3Ev,
  (VTBL_ENTRY)&_ZN8S20956C92v4Ev,
  (VTBL_ENTRY)&_ZN8S20956C92v5Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20956C3__9S20956C13__9S20956C16[] = {
  ABISELECT(-456,-352),
  ABISELECT(600,480),
  ABISELECT(-2608,-2024),
  (VTBL_ENTRY)&(_ZTI9S20956C13[0]),
};
extern void _ZN8S20956C9D1Ev();
extern void _ZN8S20956C9D0Ev();
extern void _ZN8S20956C92v3Ev();
extern void _ZN8S20956C92v4Ev();
extern void _ZN8S20956C92v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20956C9__9S20956C16[] = {
  ABISELECT(-56,-44),
  0,
  (VTBL_ENTRY)&(_ZTI8S20956C9[0]),
  (VTBL_ENTRY)&_ZN8S20956C9D1Ev,
  (VTBL_ENTRY)&_ZN8S20956C9D0Ev,
  (VTBL_ENTRY)&_ZN8S20956C92v3Ev,
  (VTBL_ENTRY)&_ZN8S20956C92v4Ev,
  (VTBL_ENTRY)&_ZN8S20956C92v5Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20956C3__9S20956C16[] = {
  ABISELECT(-456,-352),
  ABISELECT(600,480),
  0,
  (VTBL_ENTRY)&(_ZTI8S20956C3[0]),
};
static  VTT_ENTRY vtt_S20956C16[] = {
  {&(_ZTV9S20956C16[8]),  8,53},
  {&(_ZTV9S20956C16[20]),  20,53},
  {&(_ZTV9S20956C16[33]),  33,53},
  {&(_ZTV9S20956C16[44]),  44,53},
  {&(_ZTV9S20956C16[53]),  53,53},
  {&(_tg__ZTV9S20956C17__9S20956C16[7]),  7,11},
  {&(_tg__ZTV9S20956C189S20956C17__9S20956C16[4]),  4,4},
  {&(_tg__ZTV8S20956C39S20956C189S20956C17__A1__9S20956C16[4]),  4,4},
  {&(_tg__ZTV9S20956C13__9S20956C17__9S20956C16[9]),  9,13},
  {&(_tg__ZTV8S20956C9__9S20956C17__9S20956C16[7]),  7,12},
  {&(_tg__ZTV8S20956C3__9S20956C17__9S20956C16[4]),  4,4},
  {&(_tg__ZTV9S20956C13__9S20956C16[6]),  6,10},
  {&(_tg__ZTV8S20956C9__9S20956C13__9S20956C16[7]),  7,12},
  {&(_tg__ZTV8S20956C3__9S20956C13__9S20956C16[4]),  4,4},
  {&(_tg__ZTV8S20956C9__9S20956C16[3]),  3,8},
  {&(_tg__ZTV8S20956C3__9S20956C16[4]),  4,4},
};
extern VTBL_ENTRY _ZTI9S20956C16[];
extern  VTBL_ENTRY _ZTV9S20956C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20956C16[];
static VTBL_ENTRY alt_thunk_names4[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20956C13D0Ev,_ZTv0_n16_N9S20956C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2208_N9S20956C13D0Ev,_ZThn1716_N9S20956C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20956C13D1Ev,_ZTv0_n16_N9S20956C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2208_N9S20956C13D1Ev,_ZThn1716_N9S20956C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20956C17D0Ev,_ZTv0_n16_N9S20956C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4336_N9S20956C17D0Ev,_ZThn3396_N9S20956C17D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20956C17D1Ev,_ZTv0_n16_N9S20956C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4336_N9S20956C17D1Ev,_ZThn3396_N9S20956C17D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N9S20956C17D0Ev,_ZTv0_n28_N9S20956C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2128_N9S20956C17D0Ev,_ZThn1680_N9S20956C17D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N9S20956C17D1Ev,_ZTv0_n28_N9S20956C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2128_N9S20956C17D1Ev,_ZThn1680_N9S20956C17D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20956C16D0Ev,_ZTv0_n16_N9S20956C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5360_N9S20956C16D0Ev,_ZThn4172_N9S20956C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20956C16D1Ev,_ZTv0_n16_N9S20956C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5360_N9S20956C16D1Ev,_ZThn4172_N9S20956C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N9S20956C16D0Ev,_ZTv0_n28_N9S20956C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3152_N9S20956C16D0Ev,_ZThn2456_N9S20956C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N9S20956C16D1Ev,_ZTv0_n28_N9S20956C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3152_N9S20956C16D1Ev,_ZThn2456_N9S20956C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N9S20956C16D0Ev,_ZTv0_n40_N9S20956C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1024_N9S20956C16D0Ev,_ZThn776_N9S20956C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N9S20956C16D1Ev,_ZTv0_n40_N9S20956C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1024_N9S20956C16D1Ev,_ZThn776_N9S20956C16D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20956C16 = {  "S20956C16", // class name
  bases_S20956C16, 11,
  &(vtc_S20956C16[0]), // expected_vtbl_contents
  &(vtt_S20956C16[0]), // expected_vtt_contents
  ABISELECT(6608,5156), // object size
  NSPAIRA(_ZTI9S20956C16),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV9S20956C16),53, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20956C16),16, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names4,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20956C15  : S20956C2 , virtual S20956C16 {
  int s20956c15f0;
  int s20956c15f1[7];
  virtual  ~S20956C15(); // _ZN9S20956C15D2Ev
  virtual void  v10(); // _ZN9S20956C153v10Ev
  S20956C15(); // tgen
};
//SIG(-1 S20956C15) C1{ BC2{ VBC3{ VBC4{ BC5{ m FL Fi[4] Fc FL Fp[2]} Fi FC5 FC5 Fi Fp FL[6] Fp} VBC5 FC5 Fs Fi FC4 FL[4] FC4} BC4 Fi[2] FC4 FC4[5] FU6{ m Fi[8] Fp FL Fc Fp[5] FD Fc[7] Fp Fc:1 Fi} Fi} VBC7{ VBC8{ VBC9{ BC4 VBC5 VBC10{ VBC5 vd v2 v3 v4 Fi Fi FC5 Fi FC4 Fp FC5 Fc:3} VBC3 vd v5 v6 Fi FC11{} FD Fp FC10[2] FD FL Fi FC3} BC12{ VBC5 BC3 Fp Fc[9] FC3 FC4 FL:37 Fc FC4 Fc:8 Fp Fc Fi Fi} v7 v8 Fi Fi Fs FU13{ m Fp FL Fi Fc Fi FL Fl FL Fs Fp FD Fc[6]} Fi Fi Fs Fi Fi} vd FC10[2] FD FL FC5 Fp} vd v1 Fi Fi[7]}


 S20956C15 ::~S20956C15(){ note_dtor("S20956C15", this);}
void  S20956C15 ::v10(){vfunc_called(this, "_ZN9S20956C153v10Ev");}
S20956C15 ::S20956C15(){ note_ctor("S20956C15", this);} // tgen

static void Test_S20956C15()
{
  extern Class_Descriptor cd_S20956C15;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(530,1653)];
    init_test(&cd_S20956C15, buf);
    S20956C15 *dp, &lv = *(dp=new (buf) S20956C15());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8464,6608), "sizeof(S20956C15)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20956C15)");
    /*is_ambiguous_... S20956C15::S20956C4 */ AMB_check_base_class_offset(lv, (S20956C5*)(S20956C4*), ABISELECT(2448,1932), "S20956C15");
    /*is_ambiguous_... S20956C15::S20956C3 */ AMB_check_base_class_offset(lv, (S20956C4*)(S20956C3*), ABISELECT(2448,1932), "S20956C15");
    check_base_class_offset(lv, (S20956C4*)(S20956C3*)(S20956C18*)(S20956C17*), ABISELECT(2448,1932), "S20956C15");
    /*is_ambiguous_... S20956C15::S20956C3 */ AMB_check_base_class_offset(lv, (S20956C5*)(S20956C3*), ABISELECT(2696,2128), "S20956C15");
    /*is_ambiguous_... S20956C13::S20956C5 */ AMB_check_base_class_offset(lv, (S20956C5*)(S20956C13*), ABISELECT(2696,2128), "S20956C15");
    check_base_class_offset(lv, (S20956C5*)(S20956C9*), ABISELECT(2696,2128), "S20956C15");
    /*is_ambiguous_... S20956C18::S20956C5 */ AMB_check_base_class_offset(lv, (S20956C5*)(S20956C18*)(S20956C17*), ABISELECT(2696,2128), "S20956C15");
    /*is_ambiguous_... S20956C3::S20956C5 */ AMB_check_base_class_offset(lv, (S20956C5*)(S20956C3*)(S20956C18*)(S20956C17*), ABISELECT(2696,2128), "S20956C15");
    check_base_class_offset(lv, (S20956C3*)(S20956C2*), ABISELECT(1848,1452), "S20956C15");
    check_base_class_offset(lv, (S20956C3*)(S20956C13*), ABISELECT(1848,1452), "S20956C15");
    /*is_ambiguous_... S20956C2::S20956C4 */ AMB_check_base_class_offset(lv, (S20956C5*)(S20956C4*)(S20956C2*), ABISELECT(8,4), "S20956C15");
    /*is_ambiguous_... S20956C2::S20956C4 */ AMB_check_base_class_offset(lv, (S20956C4*)(S20956C2*), ABISELECT(8,4), "S20956C15");
    check_base_class_offset(lv, (S20956C2*), 0, "S20956C15");
    /*is_ambiguous_... S20956C13::S20956C4 */ AMB_check_base_class_offset(lv, (S20956C5*)(S20956C4*)(S20956C13*), ABISELECT(5912,4632), "S20956C15");
    /*is_ambiguous_... S20956C13::S20956C4 */ AMB_check_base_class_offset(lv, (S20956C4*)(S20956C13*), ABISELECT(5912,4632), "S20956C15");
    check_base_class_offset(lv, (S20956C9*)(S20956C13*), ABISELECT(8056,6300), "S20956C15");
    check_base_class_offset(lv, (S20956C13*)(S20956C17*), ABISELECT(5904,4628), "S20956C15");
    check_base_class_offset(lv, (S20956C3*)(S20956C18*)(S20956C17*), ABISELECT(3776,2948), "S20956C15");
    check_base_class_offset(lv, (S20956C18*)(S20956C17*), ABISELECT(3776,2948), "S20956C15");
    check_base_class_offset(lv, (S20956C17*)(S20956C16*), ABISELECT(3776,2948), "S20956C15");
    check_base_class_offset(lv, (S20956C16*), ABISELECT(2752,2172), "S20956C15");
    check_field_offset(lv, s20956c15f0, ABISELECT(1812,1420), "S20956C15.s20956c15f0");
    check_field_offset(lv, s20956c15f1, ABISELECT(1816,1424), "S20956C15.s20956c15f1");
    test_class_info(&lv, &cd_S20956C15);
    dp->~S20956C15();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20956C15(Test_S20956C15, "S20956C15", ABISELECT(8464,6608));

#else // __cplusplus

extern void _ZN9S20956C15C1Ev();
extern void _ZN9S20956C15D2Ev();
Name_Map name_map_S20956C15[] = {
  NSPAIR(_ZN9S20956C15C1Ev),
  NSPAIR(_ZN9S20956C15D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20956C5;
extern VTBL_ENTRY _ZTI8S20956C5[];
extern Class_Descriptor cd_S20956C4;
extern VTBL_ENTRY _ZTI8S20956C4[];
extern Class_Descriptor cd_S20956C5;
extern VTBL_ENTRY _ZTI8S20956C5[];
extern Class_Descriptor cd_S20956C3;
extern VTBL_ENTRY _ZTI8S20956C3[];
extern  VTBL_ENTRY _ZTV8S20956C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20956C3[];
extern Class_Descriptor cd_S20956C5;
extern VTBL_ENTRY _ZTI8S20956C5[];
extern Class_Descriptor cd_S20956C4;
extern VTBL_ENTRY _ZTI8S20956C4[];
extern Class_Descriptor cd_S20956C2;
extern VTBL_ENTRY _ZTI8S20956C2[];
extern  VTBL_ENTRY _ZTV8S20956C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20956C2[];
extern Class_Descriptor cd_S20956C5;
extern VTBL_ENTRY _ZTI8S20956C5[];
extern Class_Descriptor cd_S20956C4;
extern VTBL_ENTRY _ZTI8S20956C4[];
extern Class_Descriptor cd_S20956C9;
extern VTBL_ENTRY _ZTI8S20956C9[];
extern  VTBL_ENTRY _ZTV8S20956C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20956C9[];
extern Class_Descriptor cd_S20956C13;
extern VTBL_ENTRY _ZTI9S20956C13[];
extern  VTBL_ENTRY _ZTV9S20956C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20956C13[];
extern Class_Descriptor cd_S20956C3;
extern VTBL_ENTRY _ZTI8S20956C3[];
extern  VTBL_ENTRY _ZTV8S20956C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20956C3[];
extern Class_Descriptor cd_S20956C18;
extern VTBL_ENTRY _ZTI9S20956C18[];
extern  VTBL_ENTRY _ZTV9S20956C18[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20956C18[];
extern Class_Descriptor cd_S20956C17;
extern VTBL_ENTRY _ZTI9S20956C17[];
extern  VTBL_ENTRY _ZTV9S20956C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20956C17[];
extern Class_Descriptor cd_S20956C16;
extern VTBL_ENTRY _ZTI9S20956C16[];
extern  VTBL_ENTRY _ZTV9S20956C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20956C16[];
static Base_Class bases_S20956C15[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20956C5,    ABISELECT(2448,1932), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S20956C4,    ABISELECT(2448,1932), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S20956C5,    ABISELECT(2696,2128), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S20956C3,    ABISELECT(1848,1452), //bcp->offset
    12, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S20956C5,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S20956C4,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S20956C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20956C5,    ABISELECT(5912,4632), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S20956C4,    ABISELECT(5912,4632), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S20956C9,    ABISELECT(8056,6300), //bcp->offset
    54, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    24, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S20956C13,    ABISELECT(5904,4628), //bcp->offset
    41, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    21, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    13, //immediately_derived
  0, 1},
  {&cd_S20956C3,    ABISELECT(3776,2948), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S20956C18,    ABISELECT(3776,2948), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S20956C17,    ABISELECT(3776,2948), //bcp->offset
    27, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S20956C16,    ABISELECT(2752,2172), //bcp->offset
    16, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S20956C15[];
extern void _ZN9S20956C15D1Ev();
extern void _ZN9S20956C15D0Ev();
extern void _ZN9S20956C153v10Ev();
extern void ABISELECT(_ZTv0_n72_N9S20956C15D1Ev,_ZTv0_n36_N9S20956C15D1Ev)();
extern void ABISELECT(_ZThn2752_N9S20956C15D1Ev,_ZThn2172_N9S20956C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N9S20956C15D0Ev,_ZTv0_n36_N9S20956C15D0Ev)();
extern void ABISELECT(_ZThn2752_N9S20956C15D0Ev,_ZThn2172_N9S20956C15D0Ev)() __attribute__((weak));
extern void _ZN9S20956C172v8Ev();
extern void _ZN9S20956C172v9Ev();
extern void ABISELECT(_ZTv0_n80_N9S20956C15D1Ev,_ZTv0_n40_N9S20956C15D1Ev)();
extern void ABISELECT(_ZThn3776_N9S20956C15D1Ev,_ZThn2948_N9S20956C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N9S20956C15D0Ev,_ZTv0_n40_N9S20956C15D0Ev)();
extern void ABISELECT(_ZThn3776_N9S20956C15D0Ev,_ZThn2948_N9S20956C15D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N9S20956C15D1Ev,_ZTv0_n28_N9S20956C15D1Ev)();
extern void ABISELECT(_ZThn5904_N9S20956C15D1Ev,_ZThn4628_N9S20956C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N9S20956C15D0Ev,_ZTv0_n28_N9S20956C15D0Ev)();
extern void ABISELECT(_ZThn5904_N9S20956C15D0Ev,_ZThn4628_N9S20956C15D0Ev)() __attribute__((weak));
extern void _ZN9S20956C132v6Ev();
extern void _ZN9S20956C132v7Ev();
extern void ABISELECT(_ZTv0_n32_N9S20956C15D1Ev,_ZTv0_n16_N9S20956C15D1Ev)();
extern void ABISELECT(_ZThn8056_N9S20956C15D1Ev,_ZThn6300_N9S20956C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S20956C15D0Ev,_ZTv0_n16_N9S20956C15D0Ev)();
extern void ABISELECT(_ZThn8056_N9S20956C15D0Ev,_ZThn6300_N9S20956C15D0Ev)() __attribute__((weak));
extern void _ZN8S20956C92v3Ev();
extern void _ZN8S20956C92v4Ev();
extern void _ZN8S20956C92v5Ev();
static  VTBL_ENTRY vtc_S20956C15[] = {
  ABISELECT(8056,6300),
  ABISELECT(5904,4628),
  ABISELECT(3776,2948),
  ABISELECT(2752,2172),
  ABISELECT(2696,2128),
  ABISELECT(2448,1932),
  ABISELECT(1848,1452),
  0,
  (VTBL_ENTRY)&(_ZTI9S20956C15[0]),
  (VTBL_ENTRY)&_ZN9S20956C15D1Ev,
  (VTBL_ENTRY)&_ZN9S20956C15D0Ev,
  (VTBL_ENTRY)&_ZN9S20956C153v10Ev,
  ABISELECT(848,676),
  ABISELECT(600,480),
  ABISELECT(-1848,-1452),
  (VTBL_ENTRY)&(_ZTI9S20956C15[0]),
  ABISELECT(-2752,-2172),
  ABISELECT(-304,-240),
  ABISELECT(-904,-720),
  ABISELECT(5304,4128),
  ABISELECT(-56,-44),
  ABISELECT(3152,2456),
  ABISELECT(1024,776),
  ABISELECT(-2752,-2172),
  (VTBL_ENTRY)&(_ZTI9S20956C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N9S20956C15D1Ev,_ZTv0_n36_N9S20956C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N9S20956C15D0Ev,_ZTv0_n36_N9S20956C15D0Ev),
  ABISELECT(-3776,-2948),
  0,
  0,
  ABISELECT(-1928,-1496),
  ABISELECT(4280,3352),
  ABISELECT(2128,1680),
  ABISELECT(-1080,-820),
  ABISELECT(-1328,-1016),
  ABISELECT(-3776,-2948),
  (VTBL_ENTRY)&(_ZTI9S20956C15[0]),
  (VTBL_ENTRY)&_ZN9S20956C172v8Ev,
  (VTBL_ENTRY)&_ZN9S20956C172v9Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N9S20956C15D1Ev,_ZTv0_n40_N9S20956C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N9S20956C15D0Ev,_ZTv0_n40_N9S20956C15D0Ev),
  0,
  0,
  ABISELECT(-5904,-4628),
  ABISELECT(-3456,-2696),
  ABISELECT(-4056,-3176),
  ABISELECT(2152,1672),
  ABISELECT(-3208,-2500),
  ABISELECT(-5904,-4628),
  (VTBL_ENTRY)&(_ZTI9S20956C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S20956C15D1Ev,_ZTv0_n28_N9S20956C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S20956C15D0Ev,_ZTv0_n28_N9S20956C15D0Ev),
  (VTBL_ENTRY)&_ZN9S20956C132v6Ev,
  (VTBL_ENTRY)&_ZN9S20956C132v7Ev,
  0,
  0,
  0,
  ABISELECT(-8056,-6300),
  ABISELECT(-5360,-4172),
  ABISELECT(-8056,-6300),
  (VTBL_ENTRY)&(_ZTI9S20956C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20956C15D1Ev,_ZTv0_n16_N9S20956C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20956C15D0Ev,_ZTv0_n16_N9S20956C15D0Ev),
  (VTBL_ENTRY)&_ZN8S20956C92v3Ev,
  (VTBL_ENTRY)&_ZN8S20956C92v4Ev,
  (VTBL_ENTRY)&_ZN8S20956C92v5Ev,
};
extern VTBL_ENTRY _ZTV9S20956C15[];
static  VTBL_ENTRY _tg__ZTV8S20956C2__9S20956C15[] = {
  ABISELECT(2696,2128),
  ABISELECT(2448,1932),
  ABISELECT(1848,1452),
  0,
  (VTBL_ENTRY)&(_ZTI8S20956C2[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20956C3__8S20956C2__9S20956C15[] = {
  ABISELECT(848,676),
  ABISELECT(600,480),
  ABISELECT(-1848,-1452),
  (VTBL_ENTRY)&(_ZTI8S20956C2[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20956C3__9S20956C15[] = {
  ABISELECT(848,676),
  ABISELECT(600,480),
  0,
  (VTBL_ENTRY)&(_ZTI8S20956C3[0]),
};
extern void _ZN9S20956C16D1Ev();
extern void _ZN9S20956C16D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20956C16__9S20956C15[] = {
  ABISELECT(-304,-240),
  ABISELECT(-904,-720),
  ABISELECT(5304,4128),
  ABISELECT(-56,-44),
  ABISELECT(3152,2456),
  ABISELECT(1024,776),
  0,
  (VTBL_ENTRY)&(_ZTI9S20956C16[0]),
  (VTBL_ENTRY)&_ZN9S20956C16D1Ev,
  (VTBL_ENTRY)&_ZN9S20956C16D0Ev,
};
extern void _ZN9S20956C172v8Ev();
extern void _ZN9S20956C172v9Ev();
extern void ABISELECT(_ZTv0_n80_N9S20956C16D1Ev,_ZTv0_n40_N9S20956C16D1Ev)();
extern void ABISELECT(_ZThn1024_N9S20956C16D1Ev,_ZThn776_N9S20956C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N9S20956C16D0Ev,_ZTv0_n40_N9S20956C16D0Ev)();
extern void ABISELECT(_ZThn1024_N9S20956C16D0Ev,_ZThn776_N9S20956C16D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20956C17__9S20956C16__9S20956C15[] = {
  ABISELECT(-1024,-776),
  0,
  0,
  ABISELECT(-1928,-1496),
  ABISELECT(4280,3352),
  ABISELECT(2128,1680),
  ABISELECT(-1080,-820),
  ABISELECT(-1328,-1016),
  ABISELECT(-1024,-776),
  (VTBL_ENTRY)&(_ZTI9S20956C16[0]),
  (VTBL_ENTRY)&_ZN9S20956C172v8Ev,
  (VTBL_ENTRY)&_ZN9S20956C172v9Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N9S20956C16D1Ev,_ZTv0_n40_N9S20956C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N9S20956C16D0Ev,_ZTv0_n40_N9S20956C16D0Ev),
};
extern void ABISELECT(_ZTv0_n56_N9S20956C16D1Ev,_ZTv0_n28_N9S20956C16D1Ev)();
extern void ABISELECT(_ZThn3152_N9S20956C16D1Ev,_ZThn2456_N9S20956C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N9S20956C16D0Ev,_ZTv0_n28_N9S20956C16D0Ev)();
extern void ABISELECT(_ZThn3152_N9S20956C16D0Ev,_ZThn2456_N9S20956C16D0Ev)() __attribute__((weak));
extern void _ZN9S20956C132v6Ev();
extern void _ZN9S20956C132v7Ev();
static  VTBL_ENTRY _tg__ZTV9S20956C13__9S20956C16__9S20956C15[] = {
  0,
  0,
  ABISELECT(-3152,-2456),
  ABISELECT(-3456,-2696),
  ABISELECT(-4056,-3176),
  ABISELECT(2152,1672),
  ABISELECT(-3208,-2500),
  ABISELECT(-3152,-2456),
  (VTBL_ENTRY)&(_ZTI9S20956C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S20956C16D1Ev,_ZTv0_n28_N9S20956C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S20956C16D0Ev,_ZTv0_n28_N9S20956C16D0Ev),
  (VTBL_ENTRY)&_ZN9S20956C132v6Ev,
  (VTBL_ENTRY)&_ZN9S20956C132v7Ev,
};
extern void ABISELECT(_ZTv0_n32_N9S20956C16D1Ev,_ZTv0_n16_N9S20956C16D1Ev)();
extern void ABISELECT(_ZThn5304_N9S20956C16D1Ev,_ZThn4128_N9S20956C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S20956C16D0Ev,_ZTv0_n16_N9S20956C16D0Ev)();
extern void ABISELECT(_ZThn5304_N9S20956C16D0Ev,_ZThn4128_N9S20956C16D0Ev)() __attribute__((weak));
extern void _ZN8S20956C92v3Ev();
extern void _ZN8S20956C92v4Ev();
extern void _ZN8S20956C92v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20956C9__9S20956C16__9S20956C15[] = {
  0,
  0,
  0,
  ABISELECT(-5304,-4128),
  ABISELECT(-5360,-4172),
  ABISELECT(-5304,-4128),
  (VTBL_ENTRY)&(_ZTI9S20956C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20956C16D1Ev,_ZTv0_n16_N9S20956C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20956C16D0Ev,_ZTv0_n16_N9S20956C16D0Ev),
  (VTBL_ENTRY)&_ZN8S20956C92v3Ev,
  (VTBL_ENTRY)&_ZN8S20956C92v4Ev,
  (VTBL_ENTRY)&_ZN8S20956C92v5Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20956C3__9S20956C16__9S20956C15[] = {
  ABISELECT(848,676),
  ABISELECT(600,480),
  ABISELECT(904,720),
  (VTBL_ENTRY)&(_ZTI9S20956C16[0]),
};
extern void _ZN9S20956C172v8Ev();
extern void _ZN9S20956C172v9Ev();
extern void _ZN9S20956C17D1Ev();
extern void _ZN9S20956C17D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20956C17__9S20956C15[] = {
  ABISELECT(-1928,-1496),
  ABISELECT(4280,3352),
  ABISELECT(2128,1680),
  ABISELECT(-1080,-820),
  ABISELECT(-1328,-1016),
  0,
  (VTBL_ENTRY)&(_ZTI9S20956C17[0]),
  (VTBL_ENTRY)&_ZN9S20956C172v8Ev,
  (VTBL_ENTRY)&_ZN9S20956C172v9Ev,
  (VTBL_ENTRY)&_ZN9S20956C17D1Ev,
  (VTBL_ENTRY)&_ZN9S20956C17D0Ev,
};
static  VTBL_ENTRY _tg__ZTV9S20956C189S20956C17__9S20956C15[] = {
  ABISELECT(-1080,-820),
  ABISELECT(-1328,-1016),
  0,
  (VTBL_ENTRY)&(_ZTI9S20956C18[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20956C39S20956C189S20956C17__A1__9S20956C15[] = {
  ABISELECT(-1080,-820),
  ABISELECT(-1328,-1016),
  0,
  (VTBL_ENTRY)&(_ZTI8S20956C3[0]),
};
extern void ABISELECT(_ZTv0_n56_N9S20956C17D1Ev,_ZTv0_n28_N9S20956C17D1Ev)();
extern void ABISELECT(_ZThn2128_N9S20956C17D1Ev,_ZThn1680_N9S20956C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N9S20956C17D0Ev,_ZTv0_n28_N9S20956C17D0Ev)();
extern void ABISELECT(_ZThn2128_N9S20956C17D0Ev,_ZThn1680_N9S20956C17D0Ev)() __attribute__((weak));
extern void _ZN9S20956C132v6Ev();
extern void _ZN9S20956C132v7Ev();
static  VTBL_ENTRY _tg__ZTV9S20956C13__9S20956C17__9S20956C15[] = {
  0,
  0,
  ABISELECT(-2128,-1680),
  ABISELECT(-3456,-2696),
  ABISELECT(-4056,-3176),
  ABISELECT(2152,1672),
  ABISELECT(-3208,-2500),
  ABISELECT(-2128,-1680),
  (VTBL_ENTRY)&(_ZTI9S20956C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S20956C17D1Ev,_ZTv0_n28_N9S20956C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S20956C17D0Ev,_ZTv0_n28_N9S20956C17D0Ev),
  (VTBL_ENTRY)&_ZN9S20956C132v6Ev,
  (VTBL_ENTRY)&_ZN9S20956C132v7Ev,
};
extern void ABISELECT(_ZTv0_n32_N9S20956C17D1Ev,_ZTv0_n16_N9S20956C17D1Ev)();
extern void ABISELECT(_ZThn4280_N9S20956C17D1Ev,_ZThn3352_N9S20956C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S20956C17D0Ev,_ZTv0_n16_N9S20956C17D0Ev)();
extern void ABISELECT(_ZThn4280_N9S20956C17D0Ev,_ZThn3352_N9S20956C17D0Ev)() __attribute__((weak));
extern void _ZN8S20956C92v3Ev();
extern void _ZN8S20956C92v4Ev();
extern void _ZN8S20956C92v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20956C9__9S20956C17__9S20956C15[] = {
  0,
  0,
  0,
  ABISELECT(-4280,-3352),
  ABISELECT(-5360,-4172),
  ABISELECT(-4280,-3352),
  (VTBL_ENTRY)&(_ZTI9S20956C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20956C17D1Ev,_ZTv0_n16_N9S20956C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20956C17D0Ev,_ZTv0_n16_N9S20956C17D0Ev),
  (VTBL_ENTRY)&_ZN8S20956C92v3Ev,
  (VTBL_ENTRY)&_ZN8S20956C92v4Ev,
  (VTBL_ENTRY)&_ZN8S20956C92v5Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20956C3__9S20956C17__9S20956C15[] = {
  ABISELECT(848,676),
  ABISELECT(600,480),
  ABISELECT(1928,1496),
  (VTBL_ENTRY)&(_ZTI9S20956C17[0]),
};
extern void _ZN9S20956C13D1Ev();
extern void _ZN9S20956C13D0Ev();
extern void _ZN9S20956C132v6Ev();
extern void _ZN9S20956C132v7Ev();
static  VTBL_ENTRY _tg__ZTV9S20956C13__9S20956C15[] = {
  ABISELECT(-3456,-2696),
  ABISELECT(-4056,-3176),
  ABISELECT(2152,1672),
  ABISELECT(-3208,-2500),
  0,
  (VTBL_ENTRY)&(_ZTI9S20956C13[0]),
  (VTBL_ENTRY)&_ZN9S20956C13D1Ev,
  (VTBL_ENTRY)&_ZN9S20956C13D0Ev,
  (VTBL_ENTRY)&_ZN9S20956C132v6Ev,
  (VTBL_ENTRY)&_ZN9S20956C132v7Ev,
};
extern void ABISELECT(_ZTv0_n32_N9S20956C13D1Ev,_ZTv0_n16_N9S20956C13D1Ev)();
extern void ABISELECT(_ZThn2152_N9S20956C13D1Ev,_ZThn1672_N9S20956C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S20956C13D0Ev,_ZTv0_n16_N9S20956C13D0Ev)();
extern void ABISELECT(_ZThn2152_N9S20956C13D0Ev,_ZThn1672_N9S20956C13D0Ev)() __attribute__((weak));
extern void _ZN8S20956C92v3Ev();
extern void _ZN8S20956C92v4Ev();
extern void _ZN8S20956C92v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20956C9__9S20956C13__9S20956C15[] = {
  0,
  0,
  0,
  ABISELECT(-2152,-1672),
  ABISELECT(-5360,-4172),
  ABISELECT(-2152,-1672),
  (VTBL_ENTRY)&(_ZTI9S20956C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20956C13D1Ev,_ZTv0_n16_N9S20956C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20956C13D0Ev,_ZTv0_n16_N9S20956C13D0Ev),
  (VTBL_ENTRY)&_ZN8S20956C92v3Ev,
  (VTBL_ENTRY)&_ZN8S20956C92v4Ev,
  (VTBL_ENTRY)&_ZN8S20956C92v5Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20956C3__9S20956C13__9S20956C15[] = {
  ABISELECT(848,676),
  ABISELECT(600,480),
  ABISELECT(4056,3176),
  (VTBL_ENTRY)&(_ZTI9S20956C13[0]),
};
extern void _ZN8S20956C9D1Ev();
extern void _ZN8S20956C9D0Ev();
extern void _ZN8S20956C92v3Ev();
extern void _ZN8S20956C92v4Ev();
extern void _ZN8S20956C92v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20956C9__9S20956C15[] = {
  ABISELECT(-5360,-4172),
  0,
  (VTBL_ENTRY)&(_ZTI8S20956C9[0]),
  (VTBL_ENTRY)&_ZN8S20956C9D1Ev,
  (VTBL_ENTRY)&_ZN8S20956C9D0Ev,
  (VTBL_ENTRY)&_ZN8S20956C92v3Ev,
  (VTBL_ENTRY)&_ZN8S20956C92v4Ev,
  (VTBL_ENTRY)&_ZN8S20956C92v5Ev,
};
static  VTT_ENTRY vtt_S20956C15[] = {
  {&(_ZTV9S20956C15[9]),  9,66},
  {&(_tg__ZTV8S20956C2__9S20956C15[5]),  5,5},
  {&(_tg__ZTV8S20956C3__8S20956C2__9S20956C15[4]),  4,4},
  {&(_ZTV9S20956C15[16]),  16,66},
  {&(_ZTV9S20956C15[25]),  25,66},
  {&(_ZTV9S20956C15[37]),  37,66},
  {&(_ZTV9S20956C15[50]),  50,66},
  {&(_ZTV9S20956C15[61]),  61,66},
  {&(_tg__ZTV8S20956C3__9S20956C15[4]),  4,4},
  {&(_tg__ZTV9S20956C16__9S20956C15[8]),  8,10},
  {&(_tg__ZTV9S20956C17__9S20956C16__9S20956C15[10]),  10,14},
  {&(_tg__ZTV9S20956C13__9S20956C16__9S20956C15[9]),  9,13},
  {&(_tg__ZTV8S20956C9__9S20956C16__9S20956C15[7]),  7,12},
  {&(_tg__ZTV8S20956C3__9S20956C16__9S20956C15[4]),  4,4},
  {&(_tg__ZTV9S20956C17__9S20956C15[7]),  7,11},
  {&(_tg__ZTV9S20956C189S20956C17__9S20956C15[4]),  4,4},
  {&(_tg__ZTV8S20956C39S20956C189S20956C17__A1__9S20956C15[4]),  4,4},
  {&(_tg__ZTV9S20956C13__9S20956C17__9S20956C15[9]),  9,13},
  {&(_tg__ZTV8S20956C9__9S20956C17__9S20956C15[7]),  7,12},
  {&(_tg__ZTV8S20956C3__9S20956C17__9S20956C15[4]),  4,4},
  {&(_tg__ZTV9S20956C13__9S20956C15[6]),  6,10},
  {&(_tg__ZTV8S20956C9__9S20956C13__9S20956C15[7]),  7,12},
  {&(_tg__ZTV8S20956C3__9S20956C13__9S20956C15[4]),  4,4},
  {&(_tg__ZTV8S20956C9__9S20956C15[3]),  3,8},
};
extern VTBL_ENTRY _ZTI9S20956C15[];
extern  VTBL_ENTRY _ZTV9S20956C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20956C15[];
static VTBL_ENTRY alt_thunk_names5[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20956C13D0Ev,_ZTv0_n16_N9S20956C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2152_N9S20956C13D0Ev,_ZThn1672_N9S20956C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20956C13D1Ev,_ZTv0_n16_N9S20956C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2152_N9S20956C13D1Ev,_ZThn1672_N9S20956C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20956C17D0Ev,_ZTv0_n16_N9S20956C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4280_N9S20956C17D0Ev,_ZThn3352_N9S20956C17D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20956C17D1Ev,_ZTv0_n16_N9S20956C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4280_N9S20956C17D1Ev,_ZThn3352_N9S20956C17D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N9S20956C17D0Ev,_ZTv0_n28_N9S20956C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2128_N9S20956C17D0Ev,_ZThn1680_N9S20956C17D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N9S20956C17D1Ev,_ZTv0_n28_N9S20956C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2128_N9S20956C17D1Ev,_ZThn1680_N9S20956C17D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20956C16D0Ev,_ZTv0_n16_N9S20956C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5304_N9S20956C16D0Ev,_ZThn4128_N9S20956C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20956C16D1Ev,_ZTv0_n16_N9S20956C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5304_N9S20956C16D1Ev,_ZThn4128_N9S20956C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N9S20956C16D0Ev,_ZTv0_n28_N9S20956C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3152_N9S20956C16D0Ev,_ZThn2456_N9S20956C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N9S20956C16D1Ev,_ZTv0_n28_N9S20956C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3152_N9S20956C16D1Ev,_ZThn2456_N9S20956C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N9S20956C16D0Ev,_ZTv0_n40_N9S20956C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1024_N9S20956C16D0Ev,_ZThn776_N9S20956C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N9S20956C16D1Ev,_ZTv0_n40_N9S20956C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1024_N9S20956C16D1Ev,_ZThn776_N9S20956C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20956C15D0Ev,_ZTv0_n16_N9S20956C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8056_N9S20956C15D0Ev,_ZThn6300_N9S20956C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20956C15D1Ev,_ZTv0_n16_N9S20956C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8056_N9S20956C15D1Ev,_ZThn6300_N9S20956C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N9S20956C15D0Ev,_ZTv0_n28_N9S20956C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5904_N9S20956C15D0Ev,_ZThn4628_N9S20956C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N9S20956C15D1Ev,_ZTv0_n28_N9S20956C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5904_N9S20956C15D1Ev,_ZThn4628_N9S20956C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N9S20956C15D0Ev,_ZTv0_n40_N9S20956C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3776_N9S20956C15D0Ev,_ZThn2948_N9S20956C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N9S20956C15D1Ev,_ZTv0_n40_N9S20956C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3776_N9S20956C15D1Ev,_ZThn2948_N9S20956C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N9S20956C15D0Ev,_ZTv0_n36_N9S20956C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2752_N9S20956C15D0Ev,_ZThn2172_N9S20956C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N9S20956C15D1Ev,_ZTv0_n36_N9S20956C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2752_N9S20956C15D1Ev,_ZThn2172_N9S20956C15D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20956C15 = {  "S20956C15", // class name
  bases_S20956C15, 15,
  &(vtc_S20956C15[0]), // expected_vtbl_contents
  &(vtt_S20956C15[0]), // expected_vtt_contents
  ABISELECT(8464,6608), // object size
  NSPAIRA(_ZTI9S20956C15),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV9S20956C15),66, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20956C15),24, //virtual table table var
  8, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names5,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20956C1  : virtual S20956C2 , virtual S20956C7 , S20956C11 , virtual S20956C15 {
  long double s20956c1f0;
  ::S20956C9 s20956c1f1[2];
  ::S20956C9 s20956c1f2[2];
  ::S20956C10 s20956c1f3;
  int s20956c1f4;
  long double s20956c1f5;
  virtual  ~S20956C1(); // _ZN8S20956C1D2Ev
  virtual void  v1(); // _ZN8S20956C12v1Ev
  virtual void  v2(); // _ZN8S20956C12v2Ev
  S20956C1(); // tgen
};
//SIG(1 S20956C1) C1{ VBC2{ VBC3{ VBC4{ BC5{ m FL Fi[4] Fc FL Fp[2]} Fi FC5 FC5 Fi Fp FL[6] Fp} VBC5 FC5 Fs Fi FC4 FL[4] FC4} BC4 Fi[2] FC4 FC4[5] FU6{ m Fi[8] Fp FL Fc Fp[5] FD Fc[7] Fp Fc:1 Fi} Fi} VBC7{ VBC8{ BC4 VBC2 FC2} Fi FC9{ VBC5 vd v3 v4 v5 Fi Fi FC5 Fi FC4 Fp FC5 Fc:3}[2] FU10{ m Fp FL Fi Fc Fi FL Fl FL Fs Fp FD Fc[6]}[8]} BC11{ BC12{ m Fi FC9[2] Fc} BC13{ BC4 VBC5 VBC9 VBC3 vd v6 v7 Fi FC14{} FD Fp FC9[2] FD FL Fi FC3} vd Fp[2] FU10 Fl Fp} VBC15{ BC2 VBC16{ VBC17{ VBC13 BC18{ VBC5 BC3 Fp Fc[9] FC3 FC4 FL:37 Fc FC4 Fc:8 Fp Fc Fi Fi} v8 v9 Fi Fi Fs FU10 Fi Fi Fs Fi Fi} vd FC9[2] FD FL FC5 Fp} vd v10 Fi Fi[7]} vd v1 v2 FD FC9[2] FC9[2] FU10 Fi FD}


 S20956C1 ::~S20956C1(){ note_dtor("S20956C1", this);}
void  S20956C1 ::v1(){vfunc_called(this, "_ZN8S20956C12v1Ev");}
void  S20956C1 ::v2(){vfunc_called(this, "_ZN8S20956C12v2Ev");}
S20956C1 ::S20956C1(){ note_ctor("S20956C1", this);} // tgen

static void Test_S20956C1()
{
  extern Class_Descriptor cd_S20956C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(1210,3760)];
    init_test(&cd_S20956C1, buf);
    S20956C1 *dp, &lv = *(dp=new (buf) S20956C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(19344,15036), "sizeof(S20956C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20956C1)");
    /*is_ambiguous_... S20956C1::S20956C4 */ AMB_check_base_class_offset(lv, (S20956C5*)(S20956C4*), ABISELECT(7440,5760), "S20956C1");
    /*is_ambiguous_... S20956C1::S20956C3 */ AMB_check_base_class_offset(lv, (S20956C4*)(S20956C3*), ABISELECT(7440,5760), "S20956C1");
    check_base_class_offset(lv, (S20956C4*)(S20956C3*)(S20956C18*)(S20956C17*), ABISELECT(7440,5760), "S20956C1");
    /*is_ambiguous_... S20956C1::S20956C3 */ AMB_check_base_class_offset(lv, (S20956C5*)(S20956C3*), ABISELECT(7688,5956), "S20956C1");
    /*is_ambiguous_... S20956C13::S20956C5 */ AMB_check_base_class_offset(lv, (S20956C5*)(S20956C13*)(S20956C11*), ABISELECT(7688,5956), "S20956C1");
    check_base_class_offset(lv, (S20956C5*)(S20956C9*), ABISELECT(7688,5956), "S20956C1");
    /*is_ambiguous_... S20956C1::S20956C13 */ AMB_check_base_class_offset(lv, (S20956C5*)(S20956C13*), ABISELECT(7688,5956), "S20956C1");
    /*is_ambiguous_... S20956C18::S20956C5 */ AMB_check_base_class_offset(lv, (S20956C5*)(S20956C18*)(S20956C17*), ABISELECT(7688,5956), "S20956C1");
    /*is_ambiguous_... S20956C3::S20956C5 */ AMB_check_base_class_offset(lv, (S20956C5*)(S20956C3*)(S20956C18*)(S20956C17*), ABISELECT(7688,5956), "S20956C1");
    /*is_ambiguous_... S20956C1::S20956C2 */ AMB_check_base_class_offset(lv, (S20956C3*)(S20956C2*), ABISELECT(6840,5280), "S20956C1");
    check_base_class_offset(lv, (S20956C3*)(S20956C13*)(S20956C11*), ABISELECT(6840,5280), "S20956C1");
    check_base_class_offset(lv, (S20956C3*)(S20956C2*)(S20956C15*), ABISELECT(6840,5280), "S20956C1");
    /*is_ambiguous_... S20956C1::S20956C13 */ AMB_check_base_class_offset(lv, (S20956C3*)(S20956C13*), ABISELECT(6840,5280), "S20956C1");
    /*is_ambiguous_... S20956C1::S20956C2 */ AMB_check_base_class_offset(lv, (S20956C5*)(S20956C4*)(S20956C2*), ABISELECT(5032,3864), "S20956C1");
    /*is_ambiguous_... S20956C1::S20956C2 */ AMB_check_base_class_offset(lv, (S20956C4*)(S20956C2*), ABISELECT(5032,3864), "S20956C1");
    /*is_ambiguous_... S20956C1::S20956C2 */ AMB_check_base_class_offset(lv, (S20956C2*), ABISELECT(5024,3860), "S20956C1");
    check_base_class_offset(lv, (S20956C2*)(S20956C8*), ABISELECT(5024,3860), "S20956C1");
    /*is_ambiguous_... S20956C8::S20956C4 */ AMB_check_base_class_offset(lv, (S20956C5*)(S20956C4*)(S20956C8*), ABISELECT(8808,6812), "S20956C1");
    /*is_ambiguous_... S20956C8::S20956C4 */ AMB_check_base_class_offset(lv, (S20956C4*)(S20956C8*), ABISELECT(8808,6812), "S20956C1");
    check_base_class_offset(lv, (S20956C8*)(S20956C7*), ABISELECT(8800,6808), "S20956C1");
    check_base_class_offset(lv, (S20956C7*), ABISELECT(7744,6000), "S20956C1");
    check_base_class_offset(lv, (S20956C12*)(S20956C11*), ABISELECT(2152,1672), "S20956C1");
    /*is_ambiguous_... S20956C13::S20956C4 */ AMB_check_base_class_offset(lv, (S20956C5*)(S20956C4*)(S20956C13*)(S20956C11*), ABISELECT(8,4), "S20956C1");
    /*is_ambiguous_... S20956C13::S20956C4 */ AMB_check_base_class_offset(lv, (S20956C4*)(S20956C13*)(S20956C11*), ABISELECT(8,4), "S20956C1");
    check_base_class_offset(lv, (S20956C9*)(S20956C13*)(S20956C11*), ABISELECT(11776,9148), "S20956C1");
    /*is_ambiguous_... S20956C1::S20956C13 */ AMB_check_base_class_offset(lv, (S20956C9*)(S20956C13*), ABISELECT(11776,9148), "S20956C1");
    check_base_class_offset(lv, (S20956C13*)(S20956C11*), 0, "S20956C1");
    check_base_class_offset(lv, (S20956C11*), 0, "S20956C1");
    /*is_ambiguous_... S20956C2::S20956C4 */ AMB_check_base_class_offset(lv, (S20956C5*)(S20956C4*)(S20956C2*)(S20956C15*), ABISELECT(12184,9460), "S20956C1");
    /*is_ambiguous_... S20956C2::S20956C4 */ AMB_check_base_class_offset(lv, (S20956C4*)(S20956C2*)(S20956C15*), ABISELECT(12184,9460), "S20956C1");
    check_base_class_offset(lv, (S20956C2*)(S20956C15*), ABISELECT(12176,9456), "S20956C1");
    /*is_ambiguous_... S20956C1::S20956C13 */ AMB_check_base_class_offset(lv, (S20956C5*)(S20956C4*)(S20956C13*), ABISELECT(17192,13368), "S20956C1");
    /*is_ambiguous_... S20956C1::S20956C13 */ AMB_check_base_class_offset(lv, (S20956C4*)(S20956C13*), ABISELECT(17192,13368), "S20956C1");
    check_base_class_offset(lv, (S20956C13*)(S20956C17*), ABISELECT(17184,13364), "S20956C1");
    check_base_class_offset(lv, (S20956C3*)(S20956C18*)(S20956C17*), ABISELECT(15056,11684), "S20956C1");
    check_base_class_offset(lv, (S20956C18*)(S20956C17*), ABISELECT(15056,11684), "S20956C1");
    check_base_class_offset(lv, (S20956C17*)(S20956C16*), ABISELECT(15056,11684), "S20956C1");
    check_base_class_offset(lv, (S20956C16*)(S20956C15*), ABISELECT(14032,10908), "S20956C1");
    check_base_class_offset(lv, (S20956C15*), ABISELECT(12176,9456), "S20956C1");
    check_field_offset(lv, s20956c1f0, ABISELECT(3136,2412), "S20956C1.s20956c1f0");
    check_field_offset(lv, s20956c1f1, ABISELECT(3152,2424), "S20956C1.s20956c1f1");
    check_field_offset(lv, s20956c1f2, ABISELECT(4064,3128), "S20956C1.s20956c1f2");
    check_field_offset(lv, s20956c1f3, ABISELECT(4976,3832), "S20956C1.s20956c1f3");
    check_field_offset(lv, s20956c1f4, ABISELECT(4992,3844), "S20956C1.s20956c1f4");
    check_field_offset(lv, s20956c1f5, ABISELECT(5008,3848), "S20956C1.s20956c1f5");
    test_class_info(&lv, &cd_S20956C1);
    dp->~S20956C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20956C1(Test_S20956C1, "S20956C1", ABISELECT(19344,15036));

#else // __cplusplus

extern void _ZN8S20956C1C1Ev();
extern void _ZN8S20956C1D2Ev();
Name_Map name_map_S20956C1[] = {
  NSPAIR(_ZN8S20956C1C1Ev),
  NSPAIR(_ZN8S20956C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20956C5;
extern VTBL_ENTRY _ZTI8S20956C5[];
extern Class_Descriptor cd_S20956C4;
extern VTBL_ENTRY _ZTI8S20956C4[];
extern Class_Descriptor cd_S20956C5;
extern VTBL_ENTRY _ZTI8S20956C5[];
extern Class_Descriptor cd_S20956C3;
extern VTBL_ENTRY _ZTI8S20956C3[];
extern  VTBL_ENTRY _ZTV8S20956C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20956C3[];
extern Class_Descriptor cd_S20956C5;
extern VTBL_ENTRY _ZTI8S20956C5[];
extern Class_Descriptor cd_S20956C4;
extern VTBL_ENTRY _ZTI8S20956C4[];
extern Class_Descriptor cd_S20956C2;
extern VTBL_ENTRY _ZTI8S20956C2[];
extern  VTBL_ENTRY _ZTV8S20956C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20956C2[];
extern Class_Descriptor cd_S20956C5;
extern VTBL_ENTRY _ZTI8S20956C5[];
extern Class_Descriptor cd_S20956C4;
extern VTBL_ENTRY _ZTI8S20956C4[];
extern Class_Descriptor cd_S20956C8;
extern VTBL_ENTRY _ZTI8S20956C8[];
extern  VTBL_ENTRY _ZTV8S20956C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20956C8[];
extern Class_Descriptor cd_S20956C7;
extern VTBL_ENTRY _ZTI8S20956C7[];
extern  VTBL_ENTRY _ZTV8S20956C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20956C7[];
extern Class_Descriptor cd_S20956C12;
extern VTBL_ENTRY _ZTI9S20956C12[];
extern Class_Descriptor cd_S20956C5;
extern VTBL_ENTRY _ZTI8S20956C5[];
extern Class_Descriptor cd_S20956C4;
extern VTBL_ENTRY _ZTI8S20956C4[];
extern Class_Descriptor cd_S20956C9;
extern VTBL_ENTRY _ZTI8S20956C9[];
extern  VTBL_ENTRY _ZTV8S20956C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20956C9[];
extern Class_Descriptor cd_S20956C13;
extern VTBL_ENTRY _ZTI9S20956C13[];
extern  VTBL_ENTRY _ZTV9S20956C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20956C13[];
extern Class_Descriptor cd_S20956C11;
extern VTBL_ENTRY _ZTI9S20956C11[];
extern  VTBL_ENTRY _ZTV9S20956C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20956C11[];
extern Class_Descriptor cd_S20956C5;
extern VTBL_ENTRY _ZTI8S20956C5[];
extern Class_Descriptor cd_S20956C4;
extern VTBL_ENTRY _ZTI8S20956C4[];
extern Class_Descriptor cd_S20956C2;
extern VTBL_ENTRY _ZTI8S20956C2[];
extern  VTBL_ENTRY _ZTV8S20956C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20956C2[];
extern Class_Descriptor cd_S20956C5;
extern VTBL_ENTRY _ZTI8S20956C5[];
extern Class_Descriptor cd_S20956C4;
extern VTBL_ENTRY _ZTI8S20956C4[];
extern Class_Descriptor cd_S20956C13;
extern VTBL_ENTRY _ZTI9S20956C13[];
extern  VTBL_ENTRY _ZTV9S20956C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20956C13[];
extern Class_Descriptor cd_S20956C3;
extern VTBL_ENTRY _ZTI8S20956C3[];
extern  VTBL_ENTRY _ZTV8S20956C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20956C3[];
extern Class_Descriptor cd_S20956C18;
extern VTBL_ENTRY _ZTI9S20956C18[];
extern  VTBL_ENTRY _ZTV9S20956C18[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20956C18[];
extern Class_Descriptor cd_S20956C17;
extern VTBL_ENTRY _ZTI9S20956C17[];
extern  VTBL_ENTRY _ZTV9S20956C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20956C17[];
extern Class_Descriptor cd_S20956C16;
extern VTBL_ENTRY _ZTI9S20956C16[];
extern  VTBL_ENTRY _ZTV9S20956C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20956C16[];
extern Class_Descriptor cd_S20956C15;
extern VTBL_ENTRY _ZTI9S20956C15[];
extern  VTBL_ENTRY _ZTV9S20956C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20956C15[];
static Base_Class bases_S20956C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20956C5,    ABISELECT(7440,5760), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S20956C4,    ABISELECT(7440,5760), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S20956C5,    ABISELECT(7688,5956), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S20956C3,    ABISELECT(6840,5280), //bcp->offset
    24, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S20956C5,    ABISELECT(5032,3864), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S20956C4,    ABISELECT(5032,3864), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S20956C2,    ABISELECT(5024,3860), //bcp->offset
    19, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20956C5,    ABISELECT(8808,6812), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S20956C4,    ABISELECT(8808,6812), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S20956C8,    ABISELECT(8800,6808), //bcp->offset
    35, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    24, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S20956C7,    ABISELECT(7744,6000), //bcp->offset
    28, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20956C12,    ABISELECT(2152,1672), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S20956C5,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S20956C4,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S20956C9,    ABISELECT(11776,9148), //bcp->offset
    41, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    27, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    15, //immediately_derived
  0, 1},
  {&cd_S20956C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S20956C11,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20956C5,    ABISELECT(12184,9460), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S20956C4,    ABISELECT(12184,9460), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S20956C2,    ABISELECT(12176,9456), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    29, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    27, //immediately_derived
  0, 0},
  {&cd_S20956C5,    ABISELECT(17192,13368), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S20956C4,    ABISELECT(17192,13368), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S20956C13,    ABISELECT(17184,13364), //bcp->offset
    92, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    47, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    25, //immediately_derived
  0, 1},
  {&cd_S20956C3,    ABISELECT(15056,11684), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    43, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S20956C18,    ABISELECT(15056,11684), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    42, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    25, //immediately_derived
  0, 0},
  {&cd_S20956C17,    ABISELECT(15056,11684), //bcp->offset
    78, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    41, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    26, //immediately_derived
  0, 1},
  {&cd_S20956C16,    ABISELECT(14032,10908), //bcp->offset
    67, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    36, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    27, //immediately_derived
  0, 1},
  {&cd_S20956C15,    ABISELECT(12176,9456), //bcp->offset
    53, //bcp->virtual_function_table_offset
    11, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    28, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20956C1[];
extern void _ZN8S20956C1D1Ev();
extern void _ZN8S20956C1D0Ev();
extern void _ZN9S20956C132v6Ev();
extern void _ZN9S20956C132v7Ev();
extern void _ZN8S20956C12v1Ev();
extern void _ZN8S20956C12v2Ev();
extern void ABISELECT(_ZTv0_n32_N8S20956C1D1Ev,_ZTv0_n16_N8S20956C1D1Ev)();
extern void ABISELECT(_ZThn11776_N8S20956C1D1Ev,_ZThn9148_N8S20956C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S20956C1D0Ev,_ZTv0_n16_N8S20956C1D0Ev)();
extern void ABISELECT(_ZThn11776_N8S20956C1D0Ev,_ZThn9148_N8S20956C1D0Ev)() __attribute__((weak));
extern void _ZN8S20956C92v3Ev();
extern void _ZN8S20956C92v4Ev();
extern void _ZN8S20956C92v5Ev();
extern void ABISELECT(_ZTv0_n80_N8S20956C1D1Ev,_ZTv0_n40_N8S20956C1D1Ev)();
extern void ABISELECT(_ZThn12176_N8S20956C1D1Ev,_ZThn9456_N8S20956C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N8S20956C1D0Ev,_ZTv0_n40_N8S20956C1D0Ev)();
extern void ABISELECT(_ZThn12176_N8S20956C1D0Ev,_ZThn9456_N8S20956C1D0Ev)() __attribute__((weak));
extern void _ZN9S20956C153v10Ev();
extern void ABISELECT(_ZTv0_n72_N8S20956C1D1Ev,_ZTv0_n36_N8S20956C1D1Ev)();
extern void ABISELECT(_ZThn14032_N8S20956C1D1Ev,_ZThn10908_N8S20956C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S20956C1D0Ev,_ZTv0_n36_N8S20956C1D0Ev)();
extern void ABISELECT(_ZThn14032_N8S20956C1D0Ev,_ZThn10908_N8S20956C1D0Ev)() __attribute__((weak));
extern void _ZN9S20956C172v8Ev();
extern void _ZN9S20956C172v9Ev();
extern void ABISELECT(_ZTv0_n80_N8S20956C1D1Ev,_ZTv0_n40_N8S20956C1D1Ev)();
extern void ABISELECT(_ZThn15056_N8S20956C1D1Ev,_ZThn11684_N8S20956C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N8S20956C1D0Ev,_ZTv0_n40_N8S20956C1D0Ev)();
extern void ABISELECT(_ZThn15056_N8S20956C1D0Ev,_ZThn11684_N8S20956C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S20956C1D1Ev,_ZTv0_n28_N8S20956C1D1Ev)();
extern void ABISELECT(_ZThn17184_N8S20956C1D1Ev,_ZThn13364_N8S20956C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S20956C1D0Ev,_ZTv0_n28_N8S20956C1D0Ev)();
extern void ABISELECT(_ZThn17184_N8S20956C1D0Ev,_ZThn13364_N8S20956C1D0Ev)() __attribute__((weak));
extern void _ZN9S20956C132v6Ev();
extern void _ZN9S20956C132v7Ev();
static  VTBL_ENTRY vtc_S20956C1[] = {
  ABISELECT(17184,13364),
  ABISELECT(15056,11684),
  ABISELECT(14032,10908),
  ABISELECT(12176,9456),
  ABISELECT(8800,6808),
  ABISELECT(7744,6000),
  ABISELECT(5024,3860),
  ABISELECT(7440,5760),
  ABISELECT(6840,5280),
  ABISELECT(11776,9148),
  ABISELECT(7688,5956),
  0,
  (VTBL_ENTRY)&(_ZTI8S20956C1[0]),
  (VTBL_ENTRY)&_ZN8S20956C1D1Ev,
  (VTBL_ENTRY)&_ZN8S20956C1D0Ev,
  (VTBL_ENTRY)&_ZN9S20956C132v6Ev,
  (VTBL_ENTRY)&_ZN9S20956C132v7Ev,
  (VTBL_ENTRY)&_ZN8S20956C12v1Ev,
  (VTBL_ENTRY)&_ZN8S20956C12v2Ev,
  ABISELECT(2664,2096),
  ABISELECT(2416,1900),
  ABISELECT(1816,1420),
  ABISELECT(-5024,-3860),
  (VTBL_ENTRY)&(_ZTI8S20956C1[0]),
  ABISELECT(848,676),
  ABISELECT(600,480),
  ABISELECT(-6840,-5280),
  (VTBL_ENTRY)&(_ZTI8S20956C1[0]),
  ABISELECT(-56,-44),
  ABISELECT(-304,-240),
  ABISELECT(-904,-720),
  ABISELECT(-2720,-2140),
  ABISELECT(1056,808),
  ABISELECT(-7744,-6000),
  (VTBL_ENTRY)&(_ZTI8S20956C1[0]),
  ABISELECT(-1112,-852),
  ABISELECT(-1360,-1048),
  ABISELECT(-1960,-1528),
  ABISELECT(-3776,-2948),
  ABISELECT(-8800,-6808),
  (VTBL_ENTRY)&(_ZTI8S20956C1[0]),
  0,
  0,
  0,
  ABISELECT(-11776,-9148),
  ABISELECT(-4088,-3192),
  ABISELECT(-11776,-9148),
  (VTBL_ENTRY)&(_ZTI8S20956C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20956C1D1Ev,_ZTv0_n16_N8S20956C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20956C1D0Ev,_ZTv0_n16_N8S20956C1D0Ev),
  (VTBL_ENTRY)&_ZN8S20956C92v3Ev,
  (VTBL_ENTRY)&_ZN8S20956C92v4Ev,
  (VTBL_ENTRY)&_ZN8S20956C92v5Ev,
  0,
  ABISELECT(-12176,-9456),
  ABISELECT(-400,-308),
  ABISELECT(5008,3908),
  ABISELECT(2880,2228),
  ABISELECT(1856,1452),
  ABISELECT(-4488,-3500),
  ABISELECT(-4736,-3696),
  ABISELECT(-5336,-4176),
  ABISELECT(-12176,-9456),
  (VTBL_ENTRY)&(_ZTI8S20956C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S20956C1D1Ev,_ZTv0_n40_N8S20956C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S20956C1D0Ev,_ZTv0_n40_N8S20956C1D0Ev),
  (VTBL_ENTRY)&_ZN9S20956C153v10Ev,
  ABISELECT(-14032,-10908),
  ABISELECT(-6592,-5148),
  ABISELECT(-7192,-5628),
  ABISELECT(-2256,-1760),
  ABISELECT(-6344,-4952),
  ABISELECT(3152,2456),
  ABISELECT(1024,776),
  ABISELECT(-14032,-10908),
  (VTBL_ENTRY)&(_ZTI8S20956C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S20956C1D1Ev,_ZTv0_n36_N8S20956C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S20956C1D0Ev,_ZTv0_n36_N8S20956C1D0Ev),
  ABISELECT(-15056,-11684),
  0,
  0,
  ABISELECT(-8216,-6404),
  ABISELECT(-3280,-2536),
  ABISELECT(2128,1680),
  ABISELECT(-7368,-5728),
  ABISELECT(-7616,-5924),
  ABISELECT(-15056,-11684),
  (VTBL_ENTRY)&(_ZTI8S20956C1[0]),
  (VTBL_ENTRY)&_ZN9S20956C172v8Ev,
  (VTBL_ENTRY)&_ZN9S20956C172v9Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S20956C1D1Ev,_ZTv0_n40_N8S20956C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S20956C1D0Ev,_ZTv0_n40_N8S20956C1D0Ev),
  0,
  0,
  ABISELECT(-17184,-13364),
  ABISELECT(-9744,-7604),
  ABISELECT(-10344,-8084),
  ABISELECT(-5408,-4216),
  ABISELECT(-9496,-7408),
  ABISELECT(-17184,-13364),
  (VTBL_ENTRY)&(_ZTI8S20956C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S20956C1D1Ev,_ZTv0_n28_N8S20956C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S20956C1D0Ev,_ZTv0_n28_N8S20956C1D0Ev),
  (VTBL_ENTRY)&_ZN9S20956C132v6Ev,
  (VTBL_ENTRY)&_ZN9S20956C132v7Ev,
};
extern VTBL_ENTRY _ZTV8S20956C1[];
extern void _ZN9S20956C11D1Ev();
extern void _ZN9S20956C11D0Ev();
extern void _ZN9S20956C132v6Ev();
extern void _ZN9S20956C132v7Ev();
static  VTBL_ENTRY _tg__ZTV9S20956C11__8S20956C1[] = {
  ABISELECT(7440,5760),
  ABISELECT(6840,5280),
  ABISELECT(11776,9148),
  ABISELECT(7688,5956),
  0,
  (VTBL_ENTRY)&(_ZTI9S20956C11[0]),
  (VTBL_ENTRY)&_ZN9S20956C11D1Ev,
  (VTBL_ENTRY)&_ZN9S20956C11D0Ev,
  (VTBL_ENTRY)&_ZN9S20956C132v6Ev,
  (VTBL_ENTRY)&_ZN9S20956C132v7Ev,
};
extern void _ZN9S20956C13D1Ev();
extern void _ZN9S20956C13D0Ev();
extern void _ZN9S20956C132v6Ev();
extern void _ZN9S20956C132v7Ev();
static  VTBL_ENTRY _tg__ZTV9S20956C139S20956C11__8S20956C1[] = {
  ABISELECT(7440,5760),
  ABISELECT(6840,5280),
  ABISELECT(11776,9148),
  ABISELECT(7688,5956),
  0,
  (VTBL_ENTRY)&(_ZTI9S20956C13[0]),
  (VTBL_ENTRY)&_ZN9S20956C13D1Ev,
  (VTBL_ENTRY)&_ZN9S20956C13D0Ev,
  (VTBL_ENTRY)&_ZN9S20956C132v6Ev,
  (VTBL_ENTRY)&_ZN9S20956C132v7Ev,
};
extern void ABISELECT(_ZTv0_n32_N9S20956C13D1Ev,_ZTv0_n16_N9S20956C13D1Ev)();
extern void ABISELECT(_ZThn11776_N9S20956C13D1Ev,_ZThn9148_N9S20956C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S20956C13D0Ev,_ZTv0_n16_N9S20956C13D0Ev)();
extern void ABISELECT(_ZThn11776_N9S20956C13D0Ev,_ZThn9148_N9S20956C13D0Ev)() __attribute__((weak));
extern void _ZN8S20956C92v3Ev();
extern void _ZN8S20956C92v4Ev();
extern void _ZN8S20956C92v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20956C9__9S20956C139S20956C11__8S20956C1[] = {
  0,
  0,
  0,
  ABISELECT(-11776,-9148),
  ABISELECT(-4088,-3192),
  ABISELECT(-11776,-9148),
  (VTBL_ENTRY)&(_ZTI9S20956C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20956C13D1Ev,_ZTv0_n16_N9S20956C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20956C13D0Ev,_ZTv0_n16_N9S20956C13D0Ev),
  (VTBL_ENTRY)&_ZN8S20956C92v3Ev,
  (VTBL_ENTRY)&_ZN8S20956C92v4Ev,
  (VTBL_ENTRY)&_ZN8S20956C92v5Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20956C3__9S20956C139S20956C11__8S20956C1[] = {
  ABISELECT(848,676),
  ABISELECT(600,480),
  ABISELECT(-6840,-5280),
  (VTBL_ENTRY)&(_ZTI9S20956C13[0]),
};
extern void ABISELECT(_ZTv0_n32_N9S20956C11D1Ev,_ZTv0_n16_N9S20956C11D1Ev)();
extern void ABISELECT(_ZThn11776_N9S20956C11D1Ev,_ZThn9148_N9S20956C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S20956C11D0Ev,_ZTv0_n16_N9S20956C11D0Ev)();
extern void ABISELECT(_ZThn11776_N9S20956C11D0Ev,_ZThn9148_N9S20956C11D0Ev)() __attribute__((weak));
extern void _ZN8S20956C92v3Ev();
extern void _ZN8S20956C92v4Ev();
extern void _ZN8S20956C92v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20956C9__9S20956C11__8S20956C1[] = {
  0,
  0,
  0,
  ABISELECT(-11776,-9148),
  ABISELECT(-4088,-3192),
  ABISELECT(-11776,-9148),
  (VTBL_ENTRY)&(_ZTI9S20956C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20956C11D1Ev,_ZTv0_n16_N9S20956C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20956C11D0Ev,_ZTv0_n16_N9S20956C11D0Ev),
  (VTBL_ENTRY)&_ZN8S20956C92v3Ev,
  (VTBL_ENTRY)&_ZN8S20956C92v4Ev,
  (VTBL_ENTRY)&_ZN8S20956C92v5Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20956C3__9S20956C11__8S20956C1[] = {
  ABISELECT(848,676),
  ABISELECT(600,480),
  ABISELECT(-6840,-5280),
  (VTBL_ENTRY)&(_ZTI9S20956C11[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20956C2__8S20956C1[] = {
  ABISELECT(2664,2096),
  ABISELECT(2416,1900),
  ABISELECT(1816,1420),
  0,
  (VTBL_ENTRY)&(_ZTI8S20956C2[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20956C3__8S20956C2__8S20956C1[] = {
  ABISELECT(848,676),
  ABISELECT(600,480),
  ABISELECT(-1816,-1420),
  (VTBL_ENTRY)&(_ZTI8S20956C2[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20956C3__8S20956C1[] = {
  ABISELECT(848,676),
  ABISELECT(600,480),
  0,
  (VTBL_ENTRY)&(_ZTI8S20956C3[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20956C7__8S20956C1[] = {
  ABISELECT(-56,-44),
  ABISELECT(-304,-240),
  ABISELECT(-904,-720),
  ABISELECT(-2720,-2140),
  ABISELECT(1056,808),
  0,
  (VTBL_ENTRY)&(_ZTI8S20956C7[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20956C8__8S20956C7__8S20956C1[] = {
  ABISELECT(-1112,-852),
  ABISELECT(-1360,-1048),
  ABISELECT(-1960,-1528),
  ABISELECT(-3776,-2948),
  ABISELECT(-1056,-808),
  (VTBL_ENTRY)&(_ZTI8S20956C7[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20956C2__8S20956C7__8S20956C1[] = {
  ABISELECT(2664,2096),
  ABISELECT(2416,1900),
  ABISELECT(1816,1420),
  ABISELECT(2720,2140),
  (VTBL_ENTRY)&(_ZTI8S20956C7[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20956C3__8S20956C7__8S20956C1[] = {
  ABISELECT(848,676),
  ABISELECT(600,480),
  ABISELECT(904,720),
  (VTBL_ENTRY)&(_ZTI8S20956C7[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20956C8__8S20956C1[] = {
  ABISELECT(-1112,-852),
  ABISELECT(-1360,-1048),
  ABISELECT(-1960,-1528),
  ABISELECT(-3776,-2948),
  0,
  (VTBL_ENTRY)&(_ZTI8S20956C8[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20956C2__8S20956C8__8S20956C1[] = {
  ABISELECT(2664,2096),
  ABISELECT(2416,1900),
  ABISELECT(1816,1420),
  ABISELECT(3776,2948),
  (VTBL_ENTRY)&(_ZTI8S20956C8[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20956C3__8S20956C8__8S20956C1[] = {
  ABISELECT(848,676),
  ABISELECT(600,480),
  ABISELECT(1960,1528),
  (VTBL_ENTRY)&(_ZTI8S20956C8[0]),
};
extern void _ZN8S20956C9D1Ev();
extern void _ZN8S20956C9D0Ev();
extern void _ZN8S20956C92v3Ev();
extern void _ZN8S20956C92v4Ev();
extern void _ZN8S20956C92v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20956C9__8S20956C1[] = {
  ABISELECT(-4088,-3192),
  0,
  (VTBL_ENTRY)&(_ZTI8S20956C9[0]),
  (VTBL_ENTRY)&_ZN8S20956C9D1Ev,
  (VTBL_ENTRY)&_ZN8S20956C9D0Ev,
  (VTBL_ENTRY)&_ZN8S20956C92v3Ev,
  (VTBL_ENTRY)&_ZN8S20956C92v4Ev,
  (VTBL_ENTRY)&_ZN8S20956C92v5Ev,
};
extern void _ZN9S20956C15D1Ev();
extern void _ZN9S20956C15D0Ev();
extern void _ZN9S20956C153v10Ev();
static  VTBL_ENTRY _tg__ZTV9S20956C15__8S20956C1[] = {
  ABISELECT(-400,-308),
  ABISELECT(5008,3908),
  ABISELECT(2880,2228),
  ABISELECT(1856,1452),
  ABISELECT(-4488,-3500),
  ABISELECT(-4736,-3696),
  ABISELECT(-5336,-4176),
  0,
  (VTBL_ENTRY)&(_ZTI9S20956C15[0]),
  (VTBL_ENTRY)&_ZN9S20956C15D1Ev,
  (VTBL_ENTRY)&_ZN9S20956C15D0Ev,
  (VTBL_ENTRY)&_ZN9S20956C153v10Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20956C29S20956C15__A1__8S20956C1[] = {
  ABISELECT(-4488,-3500),
  ABISELECT(-4736,-3696),
  ABISELECT(-5336,-4176),
  0,
  (VTBL_ENTRY)&(_ZTI8S20956C2[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20956C3__8S20956C29S20956C15__A1__8S20956C1[] = {
  ABISELECT(848,676),
  ABISELECT(600,480),
  ABISELECT(5336,4176),
  (VTBL_ENTRY)&(_ZTI8S20956C2[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20956C3__9S20956C15__8S20956C1[] = {
  ABISELECT(848,676),
  ABISELECT(600,480),
  ABISELECT(5336,4176),
  (VTBL_ENTRY)&(_ZTI9S20956C15[0]),
};
extern void ABISELECT(_ZTv0_n72_N9S20956C15D1Ev,_ZTv0_n36_N9S20956C15D1Ev)();
extern void ABISELECT(_ZThn1856_N9S20956C15D1Ev,_ZThn1452_N9S20956C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N9S20956C15D0Ev,_ZTv0_n36_N9S20956C15D0Ev)();
extern void ABISELECT(_ZThn1856_N9S20956C15D0Ev,_ZThn1452_N9S20956C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20956C16__9S20956C15__8S20956C1[] = {
  ABISELECT(-1856,-1452),
  ABISELECT(-6592,-5148),
  ABISELECT(-7192,-5628),
  ABISELECT(-2256,-1760),
  ABISELECT(-6344,-4952),
  ABISELECT(3152,2456),
  ABISELECT(1024,776),
  ABISELECT(-1856,-1452),
  (VTBL_ENTRY)&(_ZTI9S20956C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N9S20956C15D1Ev,_ZTv0_n36_N9S20956C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N9S20956C15D0Ev,_ZTv0_n36_N9S20956C15D0Ev),
};
extern void _ZN9S20956C172v8Ev();
extern void _ZN9S20956C172v9Ev();
extern void ABISELECT(_ZTv0_n80_N9S20956C15D1Ev,_ZTv0_n40_N9S20956C15D1Ev)();
extern void ABISELECT(_ZThn2880_N9S20956C15D1Ev,_ZThn2228_N9S20956C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N9S20956C15D0Ev,_ZTv0_n40_N9S20956C15D0Ev)();
extern void ABISELECT(_ZThn2880_N9S20956C15D0Ev,_ZThn2228_N9S20956C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20956C17__9S20956C15__8S20956C1[] = {
  ABISELECT(-2880,-2228),
  0,
  0,
  ABISELECT(-8216,-6404),
  ABISELECT(-3280,-2536),
  ABISELECT(2128,1680),
  ABISELECT(-7368,-5728),
  ABISELECT(-7616,-5924),
  ABISELECT(-2880,-2228),
  (VTBL_ENTRY)&(_ZTI9S20956C15[0]),
  (VTBL_ENTRY)&_ZN9S20956C172v8Ev,
  (VTBL_ENTRY)&_ZN9S20956C172v9Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N9S20956C15D1Ev,_ZTv0_n40_N9S20956C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N9S20956C15D0Ev,_ZTv0_n40_N9S20956C15D0Ev),
};
extern void ABISELECT(_ZTv0_n56_N9S20956C15D1Ev,_ZTv0_n28_N9S20956C15D1Ev)();
extern void ABISELECT(_ZThn5008_N9S20956C15D1Ev,_ZThn3908_N9S20956C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N9S20956C15D0Ev,_ZTv0_n28_N9S20956C15D0Ev)();
extern void ABISELECT(_ZThn5008_N9S20956C15D0Ev,_ZThn3908_N9S20956C15D0Ev)() __attribute__((weak));
extern void _ZN9S20956C132v6Ev();
extern void _ZN9S20956C132v7Ev();
static  VTBL_ENTRY _tg__ZTV9S20956C13__9S20956C15__8S20956C1[] = {
  0,
  0,
  ABISELECT(-5008,-3908),
  ABISELECT(-9744,-7604),
  ABISELECT(-10344,-8084),
  ABISELECT(-5408,-4216),
  ABISELECT(-9496,-7408),
  ABISELECT(-5008,-3908),
  (VTBL_ENTRY)&(_ZTI9S20956C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S20956C15D1Ev,_ZTv0_n28_N9S20956C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S20956C15D0Ev,_ZTv0_n28_N9S20956C15D0Ev),
  (VTBL_ENTRY)&_ZN9S20956C132v6Ev,
  (VTBL_ENTRY)&_ZN9S20956C132v7Ev,
};
extern void ABISELECT(_ZTv0_n32_N9S20956C15D1Ev,_ZTv0_n16_N9S20956C15D1Ev)();
extern void ABISELECT(_ZTv0_n32_N9S20956C15D0Ev,_ZTv0_n16_N9S20956C15D0Ev)();
extern void _ZN8S20956C92v3Ev();
extern void _ZN8S20956C92v4Ev();
extern void _ZN8S20956C92v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20956C9__9S20956C15__8S20956C1[] = {
  0,
  0,
  0,
  ABISELECT(400,308),
  ABISELECT(-4088,-3192),
  ABISELECT(400,308),
  (VTBL_ENTRY)&(_ZTI9S20956C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20956C15D1Ev,_ZTv0_n16_N9S20956C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20956C15D0Ev,_ZTv0_n16_N9S20956C15D0Ev),
  (VTBL_ENTRY)&_ZN8S20956C92v3Ev,
  (VTBL_ENTRY)&_ZN8S20956C92v4Ev,
  (VTBL_ENTRY)&_ZN8S20956C92v5Ev,
};
extern void _ZN9S20956C16D1Ev();
extern void _ZN9S20956C16D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20956C16__8S20956C1[] = {
  ABISELECT(-6592,-5148),
  ABISELECT(-7192,-5628),
  ABISELECT(-2256,-1760),
  ABISELECT(-6344,-4952),
  ABISELECT(3152,2456),
  ABISELECT(1024,776),
  0,
  (VTBL_ENTRY)&(_ZTI9S20956C16[0]),
  (VTBL_ENTRY)&_ZN9S20956C16D1Ev,
  (VTBL_ENTRY)&_ZN9S20956C16D0Ev,
};
extern void _ZN9S20956C172v8Ev();
extern void _ZN9S20956C172v9Ev();
extern void ABISELECT(_ZTv0_n80_N9S20956C16D1Ev,_ZTv0_n40_N9S20956C16D1Ev)();
extern void ABISELECT(_ZThn1024_N9S20956C16D1Ev,_ZThn776_N9S20956C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N9S20956C16D0Ev,_ZTv0_n40_N9S20956C16D0Ev)();
extern void ABISELECT(_ZThn1024_N9S20956C16D0Ev,_ZThn776_N9S20956C16D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20956C17__9S20956C16__8S20956C1[] = {
  ABISELECT(-1024,-776),
  0,
  0,
  ABISELECT(-8216,-6404),
  ABISELECT(-3280,-2536),
  ABISELECT(2128,1680),
  ABISELECT(-7368,-5728),
  ABISELECT(-7616,-5924),
  ABISELECT(-1024,-776),
  (VTBL_ENTRY)&(_ZTI9S20956C16[0]),
  (VTBL_ENTRY)&_ZN9S20956C172v8Ev,
  (VTBL_ENTRY)&_ZN9S20956C172v9Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N9S20956C16D1Ev,_ZTv0_n40_N9S20956C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N9S20956C16D0Ev,_ZTv0_n40_N9S20956C16D0Ev),
};
extern void ABISELECT(_ZTv0_n56_N9S20956C16D1Ev,_ZTv0_n28_N9S20956C16D1Ev)();
extern void ABISELECT(_ZThn3152_N9S20956C16D1Ev,_ZThn2456_N9S20956C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N9S20956C16D0Ev,_ZTv0_n28_N9S20956C16D0Ev)();
extern void ABISELECT(_ZThn3152_N9S20956C16D0Ev,_ZThn2456_N9S20956C16D0Ev)() __attribute__((weak));
extern void _ZN9S20956C132v6Ev();
extern void _ZN9S20956C132v7Ev();
static  VTBL_ENTRY _tg__ZTV9S20956C13__9S20956C16__8S20956C1[] = {
  0,
  0,
  ABISELECT(-3152,-2456),
  ABISELECT(-9744,-7604),
  ABISELECT(-10344,-8084),
  ABISELECT(-5408,-4216),
  ABISELECT(-9496,-7408),
  ABISELECT(-3152,-2456),
  (VTBL_ENTRY)&(_ZTI9S20956C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S20956C16D1Ev,_ZTv0_n28_N9S20956C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S20956C16D0Ev,_ZTv0_n28_N9S20956C16D0Ev),
  (VTBL_ENTRY)&_ZN9S20956C132v6Ev,
  (VTBL_ENTRY)&_ZN9S20956C132v7Ev,
};
extern void ABISELECT(_ZTv0_n32_N9S20956C16D1Ev,_ZTv0_n16_N9S20956C16D1Ev)();
extern void ABISELECT(_ZTv0_n32_N9S20956C16D0Ev,_ZTv0_n16_N9S20956C16D0Ev)();
extern void _ZN8S20956C92v3Ev();
extern void _ZN8S20956C92v4Ev();
extern void _ZN8S20956C92v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20956C9__9S20956C16__8S20956C1[] = {
  0,
  0,
  0,
  ABISELECT(2256,1760),
  ABISELECT(-4088,-3192),
  ABISELECT(2256,1760),
  (VTBL_ENTRY)&(_ZTI9S20956C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20956C16D1Ev,_ZTv0_n16_N9S20956C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20956C16D0Ev,_ZTv0_n16_N9S20956C16D0Ev),
  (VTBL_ENTRY)&_ZN8S20956C92v3Ev,
  (VTBL_ENTRY)&_ZN8S20956C92v4Ev,
  (VTBL_ENTRY)&_ZN8S20956C92v5Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20956C3__9S20956C16__8S20956C1[] = {
  ABISELECT(848,676),
  ABISELECT(600,480),
  ABISELECT(7192,5628),
  (VTBL_ENTRY)&(_ZTI9S20956C16[0]),
};
extern void _ZN9S20956C172v8Ev();
extern void _ZN9S20956C172v9Ev();
extern void _ZN9S20956C17D1Ev();
extern void _ZN9S20956C17D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20956C17__8S20956C1[] = {
  ABISELECT(-8216,-6404),
  ABISELECT(-3280,-2536),
  ABISELECT(2128,1680),
  ABISELECT(-7368,-5728),
  ABISELECT(-7616,-5924),
  0,
  (VTBL_ENTRY)&(_ZTI9S20956C17[0]),
  (VTBL_ENTRY)&_ZN9S20956C172v8Ev,
  (VTBL_ENTRY)&_ZN9S20956C172v9Ev,
  (VTBL_ENTRY)&_ZN9S20956C17D1Ev,
  (VTBL_ENTRY)&_ZN9S20956C17D0Ev,
};
static  VTBL_ENTRY _tg__ZTV9S20956C189S20956C17__8S20956C1[] = {
  ABISELECT(-7368,-5728),
  ABISELECT(-7616,-5924),
  0,
  (VTBL_ENTRY)&(_ZTI9S20956C18[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20956C39S20956C189S20956C17__A1__8S20956C1[] = {
  ABISELECT(-7368,-5728),
  ABISELECT(-7616,-5924),
  0,
  (VTBL_ENTRY)&(_ZTI8S20956C3[0]),
};
extern void ABISELECT(_ZTv0_n56_N9S20956C17D1Ev,_ZTv0_n28_N9S20956C17D1Ev)();
extern void ABISELECT(_ZThn2128_N9S20956C17D1Ev,_ZThn1680_N9S20956C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N9S20956C17D0Ev,_ZTv0_n28_N9S20956C17D0Ev)();
extern void ABISELECT(_ZThn2128_N9S20956C17D0Ev,_ZThn1680_N9S20956C17D0Ev)() __attribute__((weak));
extern void _ZN9S20956C132v6Ev();
extern void _ZN9S20956C132v7Ev();
static  VTBL_ENTRY _tg__ZTV9S20956C13__9S20956C17__8S20956C1[] = {
  0,
  0,
  ABISELECT(-2128,-1680),
  ABISELECT(-9744,-7604),
  ABISELECT(-10344,-8084),
  ABISELECT(-5408,-4216),
  ABISELECT(-9496,-7408),
  ABISELECT(-2128,-1680),
  (VTBL_ENTRY)&(_ZTI9S20956C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S20956C17D1Ev,_ZTv0_n28_N9S20956C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S20956C17D0Ev,_ZTv0_n28_N9S20956C17D0Ev),
  (VTBL_ENTRY)&_ZN9S20956C132v6Ev,
  (VTBL_ENTRY)&_ZN9S20956C132v7Ev,
};
extern void ABISELECT(_ZTv0_n32_N9S20956C17D1Ev,_ZTv0_n16_N9S20956C17D1Ev)();
extern void ABISELECT(_ZTv0_n32_N9S20956C17D0Ev,_ZTv0_n16_N9S20956C17D0Ev)();
extern void _ZN8S20956C92v3Ev();
extern void _ZN8S20956C92v4Ev();
extern void _ZN8S20956C92v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20956C9__9S20956C17__8S20956C1[] = {
  0,
  0,
  0,
  ABISELECT(3280,2536),
  ABISELECT(-4088,-3192),
  ABISELECT(3280,2536),
  (VTBL_ENTRY)&(_ZTI9S20956C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20956C17D1Ev,_ZTv0_n16_N9S20956C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20956C17D0Ev,_ZTv0_n16_N9S20956C17D0Ev),
  (VTBL_ENTRY)&_ZN8S20956C92v3Ev,
  (VTBL_ENTRY)&_ZN8S20956C92v4Ev,
  (VTBL_ENTRY)&_ZN8S20956C92v5Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20956C3__9S20956C17__8S20956C1[] = {
  ABISELECT(848,676),
  ABISELECT(600,480),
  ABISELECT(8216,6404),
  (VTBL_ENTRY)&(_ZTI9S20956C17[0]),
};
extern void _ZN9S20956C13D1Ev();
extern void _ZN9S20956C13D0Ev();
extern void _ZN9S20956C132v6Ev();
extern void _ZN9S20956C132v7Ev();
static  VTBL_ENTRY _tg__ZTV9S20956C13__A1__8S20956C1[] = {
  ABISELECT(-9744,-7604),
  ABISELECT(-10344,-8084),
  ABISELECT(-5408,-4216),
  ABISELECT(-9496,-7408),
  0,
  (VTBL_ENTRY)&(_ZTI9S20956C13[0]),
  (VTBL_ENTRY)&_ZN9S20956C13D1Ev,
  (VTBL_ENTRY)&_ZN9S20956C13D0Ev,
  (VTBL_ENTRY)&_ZN9S20956C132v6Ev,
  (VTBL_ENTRY)&_ZN9S20956C132v7Ev,
};
extern void ABISELECT(_ZTv0_n32_N9S20956C13D1Ev,_ZTv0_n16_N9S20956C13D1Ev)();
extern void ABISELECT(_ZTv0_n32_N9S20956C13D0Ev,_ZTv0_n16_N9S20956C13D0Ev)();
extern void _ZN8S20956C92v3Ev();
extern void _ZN8S20956C92v4Ev();
extern void _ZN8S20956C92v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20956C9__9S20956C13__A1__8S20956C1[] = {
  0,
  0,
  0,
  ABISELECT(5408,4216),
  ABISELECT(-4088,-3192),
  ABISELECT(5408,4216),
  (VTBL_ENTRY)&(_ZTI9S20956C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20956C13D1Ev,_ZTv0_n16_N9S20956C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20956C13D0Ev,_ZTv0_n16_N9S20956C13D0Ev),
  (VTBL_ENTRY)&_ZN8S20956C92v3Ev,
  (VTBL_ENTRY)&_ZN8S20956C92v4Ev,
  (VTBL_ENTRY)&_ZN8S20956C92v5Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20956C3__9S20956C13__A1__8S20956C1[] = {
  ABISELECT(848,676),
  ABISELECT(600,480),
  ABISELECT(10344,8084),
  (VTBL_ENTRY)&(_ZTI9S20956C13[0]),
};
static  VTT_ENTRY vtt_S20956C1[] = {
  {&(_ZTV8S20956C1[13]),  13,105},
  {&(_tg__ZTV9S20956C11__8S20956C1[6]),  6,10},
  {&(_tg__ZTV9S20956C139S20956C11__8S20956C1[6]),  6,10},
  {&(_tg__ZTV8S20956C9__9S20956C139S20956C11__8S20956C1[7]),  7,12},
  {&(_tg__ZTV8S20956C3__9S20956C139S20956C11__8S20956C1[4]),  4,4},
  {&(_tg__ZTV8S20956C9__9S20956C11__8S20956C1[7]),  7,12},
  {&(_tg__ZTV8S20956C3__9S20956C11__8S20956C1[4]),  4,4},
  {&(_ZTV8S20956C1[24]),  24,105},
  {&(_ZTV8S20956C1[28]),  28,105},
  {&(_ZTV8S20956C1[35]),  35,105},
  {&(_ZTV8S20956C1[41]),  41,105},
  {&(_ZTV8S20956C1[48]),  48,105},
  {&(_ZTV8S20956C1[64]),  64,105},
  {&(_ZTV8S20956C1[76]),  76,105},
  {&(_ZTV8S20956C1[88]),  88,105},
  {&(_ZTV8S20956C1[101]),  101,105},
  {&(_tg__ZTV8S20956C2__8S20956C1[5]),  5,5},
  {&(_tg__ZTV8S20956C3__8S20956C2__8S20956C1[4]),  4,4},
  {&(_tg__ZTV8S20956C3__8S20956C1[4]),  4,4},
  {&(_tg__ZTV8S20956C7__8S20956C1[7]),  7,7},
  {&(_tg__ZTV8S20956C8__8S20956C7__8S20956C1[6]),  6,6},
  {&(_tg__ZTV8S20956C2__8S20956C7__8S20956C1[5]),  5,5},
  {&(_tg__ZTV8S20956C3__8S20956C7__8S20956C1[4]),  4,4},
  {&(_tg__ZTV8S20956C8__8S20956C1[6]),  6,6},
  {&(_tg__ZTV8S20956C2__8S20956C8__8S20956C1[5]),  5,5},
  {&(_tg__ZTV8S20956C3__8S20956C8__8S20956C1[4]),  4,4},
  {&(_tg__ZTV8S20956C9__8S20956C1[3]),  3,8},
  {&(_tg__ZTV9S20956C15__8S20956C1[9]),  9,12},
  {&(_tg__ZTV8S20956C29S20956C15__A1__8S20956C1[5]),  5,5},
  {&(_tg__ZTV8S20956C3__8S20956C29S20956C15__A1__8S20956C1[4]),  4,4},
  {&(_tg__ZTV8S20956C3__9S20956C15__8S20956C1[4]),  4,4},
  {&(_tg__ZTV9S20956C16__9S20956C15__8S20956C1[9]),  9,11},
  {&(_tg__ZTV9S20956C17__9S20956C15__8S20956C1[10]),  10,14},
  {&(_tg__ZTV9S20956C13__9S20956C15__8S20956C1[9]),  9,13},
  {&(_tg__ZTV8S20956C9__9S20956C15__8S20956C1[7]),  7,12},
  {&(_tg__ZTV9S20956C16__8S20956C1[8]),  8,10},
  {&(_tg__ZTV9S20956C17__9S20956C16__8S20956C1[10]),  10,14},
  {&(_tg__ZTV9S20956C13__9S20956C16__8S20956C1[9]),  9,13},
  {&(_tg__ZTV8S20956C9__9S20956C16__8S20956C1[7]),  7,12},
  {&(_tg__ZTV8S20956C3__9S20956C16__8S20956C1[4]),  4,4},
  {&(_tg__ZTV9S20956C17__8S20956C1[7]),  7,11},
  {&(_tg__ZTV9S20956C189S20956C17__8S20956C1[4]),  4,4},
  {&(_tg__ZTV8S20956C39S20956C189S20956C17__A1__8S20956C1[4]),  4,4},
  {&(_tg__ZTV9S20956C13__9S20956C17__8S20956C1[9]),  9,13},
  {&(_tg__ZTV8S20956C9__9S20956C17__8S20956C1[7]),  7,12},
  {&(_tg__ZTV8S20956C3__9S20956C17__8S20956C1[4]),  4,4},
  {&(_tg__ZTV9S20956C13__A1__8S20956C1[6]),  6,10},
  {&(_tg__ZTV8S20956C9__9S20956C13__A1__8S20956C1[7]),  7,12},
  {&(_tg__ZTV8S20956C3__9S20956C13__A1__8S20956C1[4]),  4,4},
};
extern VTBL_ENTRY _ZTI8S20956C1[];
extern  VTBL_ENTRY _ZTV8S20956C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20956C1[];
static VTBL_ENTRY alt_thunk_names6[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N9S20956C17D0Ev,_ZTv0_n28_N9S20956C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2128_N9S20956C17D0Ev,_ZThn1680_N9S20956C17D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N9S20956C17D1Ev,_ZTv0_n28_N9S20956C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2128_N9S20956C17D1Ev,_ZThn1680_N9S20956C17D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N9S20956C16D0Ev,_ZTv0_n28_N9S20956C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3152_N9S20956C16D0Ev,_ZThn2456_N9S20956C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N9S20956C16D1Ev,_ZTv0_n28_N9S20956C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3152_N9S20956C16D1Ev,_ZThn2456_N9S20956C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N9S20956C16D0Ev,_ZTv0_n40_N9S20956C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1024_N9S20956C16D0Ev,_ZThn776_N9S20956C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N9S20956C16D1Ev,_ZTv0_n40_N9S20956C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1024_N9S20956C16D1Ev,_ZThn776_N9S20956C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N9S20956C15D0Ev,_ZTv0_n28_N9S20956C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5008_N9S20956C15D0Ev,_ZThn3908_N9S20956C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N9S20956C15D1Ev,_ZTv0_n28_N9S20956C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5008_N9S20956C15D1Ev,_ZThn3908_N9S20956C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N9S20956C15D0Ev,_ZTv0_n40_N9S20956C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2880_N9S20956C15D0Ev,_ZThn2228_N9S20956C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N9S20956C15D1Ev,_ZTv0_n40_N9S20956C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2880_N9S20956C15D1Ev,_ZThn2228_N9S20956C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N9S20956C15D0Ev,_ZTv0_n36_N9S20956C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1856_N9S20956C15D0Ev,_ZThn1452_N9S20956C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N9S20956C15D1Ev,_ZTv0_n36_N9S20956C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1856_N9S20956C15D1Ev,_ZThn1452_N9S20956C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20956C11D0Ev,_ZTv0_n16_N9S20956C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn11776_N9S20956C11D0Ev,_ZThn9148_N9S20956C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20956C11D1Ev,_ZTv0_n16_N9S20956C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn11776_N9S20956C11D1Ev,_ZThn9148_N9S20956C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20956C13D0Ev,_ZTv0_n16_N9S20956C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn11776_N9S20956C13D0Ev,_ZThn9148_N9S20956C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20956C13D1Ev,_ZTv0_n16_N9S20956C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn11776_N9S20956C13D1Ev,_ZThn9148_N9S20956C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S20956C1D0Ev,_ZTv0_n28_N8S20956C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn17184_N8S20956C1D0Ev,_ZThn13364_N8S20956C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S20956C1D1Ev,_ZTv0_n28_N8S20956C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn17184_N8S20956C1D1Ev,_ZThn13364_N8S20956C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S20956C1D0Ev,_ZTv0_n36_N8S20956C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn14032_N8S20956C1D0Ev,_ZThn10908_N8S20956C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S20956C1D1Ev,_ZTv0_n36_N8S20956C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn14032_N8S20956C1D1Ev,_ZThn10908_N8S20956C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S20956C1D0Ev,_ZTv0_n40_N8S20956C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn15056_N8S20956C1D0Ev,_ZThn11684_N8S20956C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn12176_N8S20956C1D0Ev,_ZThn9456_N8S20956C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S20956C1D1Ev,_ZTv0_n40_N8S20956C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn15056_N8S20956C1D1Ev,_ZThn11684_N8S20956C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn12176_N8S20956C1D1Ev,_ZThn9456_N8S20956C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20956C1D0Ev,_ZTv0_n16_N8S20956C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn11776_N8S20956C1D0Ev,_ZThn9148_N8S20956C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20956C1D1Ev,_ZTv0_n16_N8S20956C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn11776_N8S20956C1D1Ev,_ZThn9148_N8S20956C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20956C1 = {  "S20956C1", // class name
  bases_S20956C1, 28,
  &(vtc_S20956C1[0]), // expected_vtbl_contents
  &(vtt_S20956C1[0]), // expected_vtt_contents
  ABISELECT(19344,15036), // object size
  NSPAIRA(_ZTI8S20956C1),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S20956C1),105, //virtual function table var
  13, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20956C1),49, //virtual table table var
  14, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names6,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2423C4_nt  {
  virtual  ~S2423C4_nt(); // _ZN10S2423C4_ntD1Ev
  virtual void  v7(); // _ZN10S2423C4_nt2v7Ev
  virtual void  v8(); // _ZN10S2423C4_nt2v8Ev
  virtual void  v9(); // _ZN10S2423C4_nt2v9Ev
  virtual void  v10(); // _ZN10S2423C4_nt3v10Ev
  virtual void  v11(); // _ZN10S2423C4_nt3v11Ev
  virtual void  v12(); // _ZN10S2423C4_nt3v12Ev
  virtual void  v13(); // _ZN10S2423C4_nt3v13Ev
  virtual void  v14(); // _ZN10S2423C4_nt3v14Ev
  virtual void  v15(); // _ZN10S2423C4_nt3v15Ev
  virtual void  v16(); // _ZN10S2423C4_nt3v16Ev
  virtual void  v17(); // _ZN10S2423C4_nt3v17Ev
  virtual void  v18(); // _ZN10S2423C4_nt3v18Ev
  virtual void  v19(); // _ZN10S2423C4_nt3v19Ev
  virtual void  v20(); // _ZN10S2423C4_nt3v20Ev
  virtual void  v21(); // _ZN10S2423C4_nt3v21Ev
  virtual void  v22(); // _ZN10S2423C4_nt3v22Ev
  virtual void  v23(); // _ZN10S2423C4_nt3v23Ev
  virtual void  v24(); // _ZN10S2423C4_nt3v24Ev
  virtual void  v25(); // _ZN10S2423C4_nt3v25Ev
  virtual void  v26(); // _ZN10S2423C4_nt3v26Ev
  virtual void  v27(); // _ZN10S2423C4_nt3v27Ev
  virtual void  v28(); // _ZN10S2423C4_nt3v28Ev
  virtual void  v29(); // _ZN10S2423C4_nt3v29Ev
  virtual void  v30(); // _ZN10S2423C4_nt3v30Ev
  virtual void  v31(); // _ZN10S2423C4_nt3v31Ev
  virtual void  v32(); // _ZN10S2423C4_nt3v32Ev
  S2423C4_nt(); // tgen
};
//SIG(-1 S2423C4_nt) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26}


 S2423C4_nt ::~S2423C4_nt(){ note_dtor("S2423C4_nt", this);}
void  S2423C4_nt ::v7(){vfunc_called(this, "_ZN10S2423C4_nt2v7Ev");}
void  S2423C4_nt ::v8(){vfunc_called(this, "_ZN10S2423C4_nt2v8Ev");}
void  S2423C4_nt ::v9(){vfunc_called(this, "_ZN10S2423C4_nt2v9Ev");}
void  S2423C4_nt ::v10(){vfunc_called(this, "_ZN10S2423C4_nt3v10Ev");}
void  S2423C4_nt ::v11(){vfunc_called(this, "_ZN10S2423C4_nt3v11Ev");}
void  S2423C4_nt ::v12(){vfunc_called(this, "_ZN10S2423C4_nt3v12Ev");}
void  S2423C4_nt ::v13(){vfunc_called(this, "_ZN10S2423C4_nt3v13Ev");}
void  S2423C4_nt ::v14(){vfunc_called(this, "_ZN10S2423C4_nt3v14Ev");}
void  S2423C4_nt ::v15(){vfunc_called(this, "_ZN10S2423C4_nt3v15Ev");}
void  S2423C4_nt ::v16(){vfunc_called(this, "_ZN10S2423C4_nt3v16Ev");}
void  S2423C4_nt ::v17(){vfunc_called(this, "_ZN10S2423C4_nt3v17Ev");}
void  S2423C4_nt ::v18(){vfunc_called(this, "_ZN10S2423C4_nt3v18Ev");}
void  S2423C4_nt ::v19(){vfunc_called(this, "_ZN10S2423C4_nt3v19Ev");}
void  S2423C4_nt ::v20(){vfunc_called(this, "_ZN10S2423C4_nt3v20Ev");}
void  S2423C4_nt ::v21(){vfunc_called(this, "_ZN10S2423C4_nt3v21Ev");}
void  S2423C4_nt ::v22(){vfunc_called(this, "_ZN10S2423C4_nt3v22Ev");}
void  S2423C4_nt ::v23(){vfunc_called(this, "_ZN10S2423C4_nt3v23Ev");}
void  S2423C4_nt ::v24(){vfunc_called(this, "_ZN10S2423C4_nt3v24Ev");}
void  S2423C4_nt ::v25(){vfunc_called(this, "_ZN10S2423C4_nt3v25Ev");}
void  S2423C4_nt ::v26(){vfunc_called(this, "_ZN10S2423C4_nt3v26Ev");}
void  S2423C4_nt ::v27(){vfunc_called(this, "_ZN10S2423C4_nt3v27Ev");}
void  S2423C4_nt ::v28(){vfunc_called(this, "_ZN10S2423C4_nt3v28Ev");}
void  S2423C4_nt ::v29(){vfunc_called(this, "_ZN10S2423C4_nt3v29Ev");}
void  S2423C4_nt ::v30(){vfunc_called(this, "_ZN10S2423C4_nt3v30Ev");}
void  S2423C4_nt ::v31(){vfunc_called(this, "_ZN10S2423C4_nt3v31Ev");}
void  S2423C4_nt ::v32(){vfunc_called(this, "_ZN10S2423C4_nt3v32Ev");}
S2423C4_nt ::S2423C4_nt(){ note_ctor("S2423C4_nt", this);} // tgen

//skip512 S2423C4_nt

#else // __cplusplus

extern void _ZN10S2423C4_ntC1Ev();
extern void _ZN10S2423C4_ntD1Ev();
Name_Map name_map_S2423C4_nt[] = {
  NSPAIR(_ZN10S2423C4_ntC1Ev),
  NSPAIR(_ZN10S2423C4_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S2423C4_nt[];
extern void _ZN10S2423C4_ntD1Ev();
extern void _ZN10S2423C4_ntD0Ev();
extern void _ZN10S2423C4_nt2v7Ev();
extern void _ZN10S2423C4_nt2v8Ev();
extern void _ZN10S2423C4_nt2v9Ev();
extern void _ZN10S2423C4_nt3v10Ev();
extern void _ZN10S2423C4_nt3v11Ev();
extern void _ZN10S2423C4_nt3v12Ev();
extern void _ZN10S2423C4_nt3v13Ev();
extern void _ZN10S2423C4_nt3v14Ev();
extern void _ZN10S2423C4_nt3v15Ev();
extern void _ZN10S2423C4_nt3v16Ev();
extern void _ZN10S2423C4_nt3v17Ev();
extern void _ZN10S2423C4_nt3v18Ev();
extern void _ZN10S2423C4_nt3v19Ev();
extern void _ZN10S2423C4_nt3v20Ev();
extern void _ZN10S2423C4_nt3v21Ev();
extern void _ZN10S2423C4_nt3v22Ev();
extern void _ZN10S2423C4_nt3v23Ev();
extern void _ZN10S2423C4_nt3v24Ev();
extern void _ZN10S2423C4_nt3v25Ev();
extern void _ZN10S2423C4_nt3v26Ev();
extern void _ZN10S2423C4_nt3v27Ev();
extern void _ZN10S2423C4_nt3v28Ev();
extern void _ZN10S2423C4_nt3v29Ev();
extern void _ZN10S2423C4_nt3v30Ev();
extern void _ZN10S2423C4_nt3v31Ev();
extern void _ZN10S2423C4_nt3v32Ev();
static  VTBL_ENTRY vtc_S2423C4_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S2423C4_nt[0]),
  (VTBL_ENTRY)&_ZN10S2423C4_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S2423C4_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S2423C4_nt2v7Ev,
  (VTBL_ENTRY)&_ZN10S2423C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S2423C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S2423C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S2423C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S2423C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S2423C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S2423C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN10S2423C4_nt3v15Ev,
  (VTBL_ENTRY)&_ZN10S2423C4_nt3v16Ev,
  (VTBL_ENTRY)&_ZN10S2423C4_nt3v17Ev,
  (VTBL_ENTRY)&_ZN10S2423C4_nt3v18Ev,
  (VTBL_ENTRY)&_ZN10S2423C4_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S2423C4_nt3v20Ev,
  (VTBL_ENTRY)&_ZN10S2423C4_nt3v21Ev,
  (VTBL_ENTRY)&_ZN10S2423C4_nt3v22Ev,
  (VTBL_ENTRY)&_ZN10S2423C4_nt3v23Ev,
  (VTBL_ENTRY)&_ZN10S2423C4_nt3v24Ev,
  (VTBL_ENTRY)&_ZN10S2423C4_nt3v25Ev,
  (VTBL_ENTRY)&_ZN10S2423C4_nt3v26Ev,
  (VTBL_ENTRY)&_ZN10S2423C4_nt3v27Ev,
  (VTBL_ENTRY)&_ZN10S2423C4_nt3v28Ev,
  (VTBL_ENTRY)&_ZN10S2423C4_nt3v29Ev,
  (VTBL_ENTRY)&_ZN10S2423C4_nt3v30Ev,
  (VTBL_ENTRY)&_ZN10S2423C4_nt3v31Ev,
  (VTBL_ENTRY)&_ZN10S2423C4_nt3v32Ev,
};
extern VTBL_ENTRY _ZTI10S2423C4_nt[];
VTBL_ENTRY *P__ZTI10S2423C4_nt = _ZTI10S2423C4_nt; 
extern  VTBL_ENTRY _ZTV10S2423C4_nt[];
Class_Descriptor cd_S2423C4_nt = {  "S2423C4_nt", // class name
  0,0,//no base classes
  &(vtc_S2423C4_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI10S2423C4_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S2423C4_nt),30, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2423C5_nt  {
  int s2423c5f0[2];
};
//SIG(-1 S2423C5_nt) C1{ Fi[2]}



//skip512 S2423C5_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2423C3  : S2423C4_nt {
  void *s2423c3f0[2];
  int s2423c3f1[4];
  ::S2423C5_nt s2423c3f2;
  void *s2423c3f3;
  char s2423c3f4;
  void *s2423c3f5;
  virtual  ~S2423C3(); // _ZN7S2423C3D1Ev
  virtual void  v33(); // _ZN7S2423C33v33Ev
  virtual void  v34(); // _ZN7S2423C33v34Ev
  virtual void  v35(); // _ZN7S2423C33v35Ev
  virtual void  v36(); // _ZN7S2423C33v36Ev
  virtual void  v37(); // _ZN7S2423C33v37Ev
  virtual void  v38(); // _ZN7S2423C33v38Ev
  virtual void  v39(); // _ZN7S2423C33v39Ev
  virtual void  v40(); // _ZN7S2423C33v40Ev
  virtual void  v41(); // _ZN7S2423C33v41Ev
  virtual void  v42(); // _ZN7S2423C33v42Ev
  virtual void  v43(); // _ZN7S2423C33v43Ev
  virtual void  v44(); // _ZN7S2423C33v44Ev
  virtual void  v45(); // _ZN7S2423C33v45Ev
  virtual void  v46(); // _ZN7S2423C33v46Ev
  S2423C3(); // tgen
};
//SIG(-1 S2423C3) C1{ BC2{ vd v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 Fp[2] Fi[4] FC3{ Fi[2]} Fp Fc Fp}


 S2423C3 ::~S2423C3(){ note_dtor("S2423C3", this);}
void  S2423C3 ::v33(){vfunc_called(this, "_ZN7S2423C33v33Ev");}
void  S2423C3 ::v34(){vfunc_called(this, "_ZN7S2423C33v34Ev");}
void  S2423C3 ::v35(){vfunc_called(this, "_ZN7S2423C33v35Ev");}
void  S2423C3 ::v36(){vfunc_called(this, "_ZN7S2423C33v36Ev");}
void  S2423C3 ::v37(){vfunc_called(this, "_ZN7S2423C33v37Ev");}
void  S2423C3 ::v38(){vfunc_called(this, "_ZN7S2423C33v38Ev");}
void  S2423C3 ::v39(){vfunc_called(this, "_ZN7S2423C33v39Ev");}
void  S2423C3 ::v40(){vfunc_called(this, "_ZN7S2423C33v40Ev");}
void  S2423C3 ::v41(){vfunc_called(this, "_ZN7S2423C33v41Ev");}
void  S2423C3 ::v42(){vfunc_called(this, "_ZN7S2423C33v42Ev");}
void  S2423C3 ::v43(){vfunc_called(this, "_ZN7S2423C33v43Ev");}
void  S2423C3 ::v44(){vfunc_called(this, "_ZN7S2423C33v44Ev");}
void  S2423C3 ::v45(){vfunc_called(this, "_ZN7S2423C33v45Ev");}
void  S2423C3 ::v46(){vfunc_called(this, "_ZN7S2423C33v46Ev");}
S2423C3 ::S2423C3(){ note_ctor("S2423C3", this);} // tgen

static void Test_S2423C3()
{
  extern Class_Descriptor cd_S2423C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,13)];
    init_test(&cd_S2423C3, buf);
    S2423C3 *dp, &lv = *(dp=new (buf) S2423C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,48), "sizeof(S2423C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2423C3)");
    check_base_class_offset(lv, (S2423C4_nt*), 0, "S2423C3");
    check_field_offset(lv, s2423c3f0, ABISELECT(8,4), "S2423C3.s2423c3f0");
    check_field_offset(lv, s2423c3f1, ABISELECT(24,12), "S2423C3.s2423c3f1");
    check_field_offset(lv, s2423c3f2, ABISELECT(40,28), "S2423C3.s2423c3f2");
    check_field_offset(lv, s2423c3f3, ABISELECT(48,36), "S2423C3.s2423c3f3");
    check_field_offset(lv, s2423c3f4, ABISELECT(56,40), "S2423C3.s2423c3f4");
    check_field_offset(lv, s2423c3f5, ABISELECT(64,44), "S2423C3.s2423c3f5");
    test_class_info(&lv, &cd_S2423C3);
    dp->~S2423C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2423C3(Test_S2423C3, "S2423C3", ABISELECT(72,48));

#else // __cplusplus

extern void _ZN7S2423C3C1Ev();
extern void _ZN7S2423C3D1Ev();
Name_Map name_map_S2423C3[] = {
  NSPAIR(_ZN7S2423C3C1Ev),
  NSPAIR(_ZN7S2423C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2423C4_nt;
extern VTBL_ENTRY _ZTI10S2423C4_nt[];
extern  VTBL_ENTRY _ZTV10S2423C4_nt[];
static Base_Class bases_S2423C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2423C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S2423C3[];
extern void _ZN7S2423C3D1Ev();
extern void _ZN7S2423C3D0Ev();
extern void _ZN10S2423C4_nt2v7Ev();
extern void _ZN10S2423C4_nt2v8Ev();
extern void _ZN10S2423C4_nt2v9Ev();
extern void _ZN10S2423C4_nt3v10Ev();
extern void _ZN10S2423C4_nt3v11Ev();
extern void _ZN10S2423C4_nt3v12Ev();
extern void _ZN10S2423C4_nt3v13Ev();
extern void _ZN10S2423C4_nt3v14Ev();
extern void _ZN10S2423C4_nt3v15Ev();
extern void _ZN10S2423C4_nt3v16Ev();
extern void _ZN10S2423C4_nt3v17Ev();
extern void _ZN10S2423C4_nt3v18Ev();
extern void _ZN10S2423C4_nt3v19Ev();
extern void _ZN10S2423C4_nt3v20Ev();
extern void _ZN10S2423C4_nt3v21Ev();
extern void _ZN10S2423C4_nt3v22Ev();
extern void _ZN10S2423C4_nt3v23Ev();
extern void _ZN10S2423C4_nt3v24Ev();
extern void _ZN10S2423C4_nt3v25Ev();
extern void _ZN10S2423C4_nt3v26Ev();
extern void _ZN10S2423C4_nt3v27Ev();
extern void _ZN10S2423C4_nt3v28Ev();
extern void _ZN10S2423C4_nt3v29Ev();
extern void _ZN10S2423C4_nt3v30Ev();
extern void _ZN10S2423C4_nt3v31Ev();
extern void _ZN10S2423C4_nt3v32Ev();
extern void _ZN7S2423C33v33Ev();
extern void _ZN7S2423C33v34Ev();
extern void _ZN7S2423C33v35Ev();
extern void _ZN7S2423C33v36Ev();
extern void _ZN7S2423C33v37Ev();
extern void _ZN7S2423C33v38Ev();
extern void _ZN7S2423C33v39Ev();
extern void _ZN7S2423C33v40Ev();
extern void _ZN7S2423C33v41Ev();
extern void _ZN7S2423C33v42Ev();
extern void _ZN7S2423C33v43Ev();
extern void _ZN7S2423C33v44Ev();
extern void _ZN7S2423C33v45Ev();
extern void _ZN7S2423C33v46Ev();
static  VTBL_ENTRY vtc_S2423C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2423C3[0]),
  (VTBL_ENTRY)&_ZN7S2423C3D1Ev,
  (VTBL_ENTRY)&_ZN7S2423C3D0Ev,
  (VTBL_ENTRY)&_ZN10S2423C4_nt2v7Ev,
  (VTBL_ENTRY)&_ZN10S2423C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S2423C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S2423C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S2423C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S2423C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S2423C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S2423C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN10S2423C4_nt3v15Ev,
  (VTBL_ENTRY)&_ZN10S2423C4_nt3v16Ev,
  (VTBL_ENTRY)&_ZN10S2423C4_nt3v17Ev,
  (VTBL_ENTRY)&_ZN10S2423C4_nt3v18Ev,
  (VTBL_ENTRY)&_ZN10S2423C4_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S2423C4_nt3v20Ev,
  (VTBL_ENTRY)&_ZN10S2423C4_nt3v21Ev,
  (VTBL_ENTRY)&_ZN10S2423C4_nt3v22Ev,
  (VTBL_ENTRY)&_ZN10S2423C4_nt3v23Ev,
  (VTBL_ENTRY)&_ZN10S2423C4_nt3v24Ev,
  (VTBL_ENTRY)&_ZN10S2423C4_nt3v25Ev,
  (VTBL_ENTRY)&_ZN10S2423C4_nt3v26Ev,
  (VTBL_ENTRY)&_ZN10S2423C4_nt3v27Ev,
  (VTBL_ENTRY)&_ZN10S2423C4_nt3v28Ev,
  (VTBL_ENTRY)&_ZN10S2423C4_nt3v29Ev,
  (VTBL_ENTRY)&_ZN10S2423C4_nt3v30Ev,
  (VTBL_ENTRY)&_ZN10S2423C4_nt3v31Ev,
  (VTBL_ENTRY)&_ZN10S2423C4_nt3v32Ev,
  (VTBL_ENTRY)&_ZN7S2423C33v33Ev,
  (VTBL_ENTRY)&_ZN7S2423C33v34Ev,
  (VTBL_ENTRY)&_ZN7S2423C33v35Ev,
  (VTBL_ENTRY)&_ZN7S2423C33v36Ev,
  (VTBL_ENTRY)&_ZN7S2423C33v37Ev,
  (VTBL_ENTRY)&_ZN7S2423C33v38Ev,
  (VTBL_ENTRY)&_ZN7S2423C33v39Ev,
  (VTBL_ENTRY)&_ZN7S2423C33v40Ev,
  (VTBL_ENTRY)&_ZN7S2423C33v41Ev,
  (VTBL_ENTRY)&_ZN7S2423C33v42Ev,
  (VTBL_ENTRY)&_ZN7S2423C33v43Ev,
  (VTBL_ENTRY)&_ZN7S2423C33v44Ev,
  (VTBL_ENTRY)&_ZN7S2423C33v45Ev,
  (VTBL_ENTRY)&_ZN7S2423C33v46Ev,
};
extern VTBL_ENTRY _ZTI7S2423C3[];
extern  VTBL_ENTRY _ZTV7S2423C3[];
Class_Descriptor cd_S2423C3 = {  "S2423C3", // class name
  bases_S2423C3, 1,
  &(vtc_S2423C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,48), // object size
  NSPAIRA(_ZTI7S2423C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2423C3),44, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2423C6  {
  void *s2423c6f0;
  char s2423c6f1[32];
  int s2423c6f2[6];
  char s2423c6f3;
  int s2423c6f4[2];
  virtual  ~S2423C6(); // _ZN7S2423C6D1Ev
  virtual void  v47(); // _ZN7S2423C63v47Ev
  virtual void  v48(); // _ZN7S2423C63v48Ev
  S2423C6(); // tgen
};
//SIG(-1 S2423C6) C1{ vd v1 v2 Fp Fc[32] Fi[6] Fc Fi[2]}


 S2423C6 ::~S2423C6(){ note_dtor("S2423C6", this);}
void  S2423C6 ::v47(){vfunc_called(this, "_ZN7S2423C63v47Ev");}
void  S2423C6 ::v48(){vfunc_called(this, "_ZN7S2423C63v48Ev");}
S2423C6 ::S2423C6(){ note_ctor("S2423C6", this);} // tgen

static void Test_S2423C6()
{
  extern Class_Descriptor cd_S2423C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(12,20)];
    init_test(&cd_S2423C6, buf);
    S2423C6 *dp, &lv = *(dp=new (buf) S2423C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(88,76), "sizeof(S2423C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2423C6)");
    check_field_offset(lv, s2423c6f0, ABISELECT(8,4), "S2423C6.s2423c6f0");
    check_field_offset(lv, s2423c6f1, ABISELECT(16,8), "S2423C6.s2423c6f1");
    check_field_offset(lv, s2423c6f2, ABISELECT(48,40), "S2423C6.s2423c6f2");
    check_field_offset(lv, s2423c6f3, ABISELECT(72,64), "S2423C6.s2423c6f3");
    check_field_offset(lv, s2423c6f4, ABISELECT(76,68), "S2423C6.s2423c6f4");
    test_class_info(&lv, &cd_S2423C6);
    dp->~S2423C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2423C6(Test_S2423C6, "S2423C6", ABISELECT(88,76));

#else // __cplusplus

extern void _ZN7S2423C6C1Ev();
extern void _ZN7S2423C6D1Ev();
Name_Map name_map_S2423C6[] = {
  NSPAIR(_ZN7S2423C6C1Ev),
  NSPAIR(_ZN7S2423C6D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S2423C6[];
extern void _ZN7S2423C6D1Ev();
extern void _ZN7S2423C6D0Ev();
extern void _ZN7S2423C63v47Ev();
extern void _ZN7S2423C63v48Ev();
static  VTBL_ENTRY vtc_S2423C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2423C6[0]),
  (VTBL_ENTRY)&_ZN7S2423C6D1Ev,
  (VTBL_ENTRY)&_ZN7S2423C6D0Ev,
  (VTBL_ENTRY)&_ZN7S2423C63v47Ev,
  (VTBL_ENTRY)&_ZN7S2423C63v48Ev,
};
extern VTBL_ENTRY _ZTI7S2423C6[];
extern  VTBL_ENTRY _ZTV7S2423C6[];
Class_Descriptor cd_S2423C6 = {  "S2423C6", // class name
  0,0,//no base classes
  &(vtc_S2423C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(88,76), // object size
  NSPAIRA(_ZTI7S2423C6),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S2423C6),6, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2423C2  : S2423C3 , S2423C6 {
  void *s2423c2f0;
  long s2423c2f1[2];
  __tsi64 s2423c2f2[2];
  long s2423c2f3;
  char s2423c2f4;
  int s2423c2f5;
  __tsi64 s2423c2f6;
  int s2423c2f7;
  void *s2423c2f8[4];
  long s2423c2f9[2];
  void *s2423c2f10;
  virtual  ~S2423C2(); // _ZN7S2423C2D1Ev
  virtual void  v49(); // _ZN7S2423C23v49Ev
  virtual void  v50(); // _ZN7S2423C23v50Ev
  virtual void  v51(); // _ZN7S2423C23v51Ev
  virtual void  v52(); // _ZN7S2423C23v52Ev
  virtual void  v53(); // _ZN7S2423C23v53Ev
  virtual void  v54(); // _ZN7S2423C23v54Ev
  virtual void  v55(); // _ZN7S2423C23v55Ev
  virtual void  v56(); // _ZN7S2423C23v56Ev
  virtual void  v57(); // _ZN7S2423C23v57Ev
  virtual void  v58(); // _ZN7S2423C23v58Ev
  virtual void  v59(); // _ZN7S2423C23v59Ev
  virtual void  v60(); // _ZN7S2423C23v60Ev
  virtual void  v61(); // _ZN7S2423C23v61Ev
  virtual void  v62(); // _ZN7S2423C23v62Ev
  virtual void  v63(); // _ZN7S2423C23v63Ev
  virtual void  v64(); // _ZN7S2423C23v64Ev
  virtual void  v65(); // _ZN7S2423C23v65Ev
  virtual void  v66(); // _ZN7S2423C23v66Ev
  virtual void  v67(); // _ZN7S2423C23v67Ev
  S2423C2(); // tgen
};
//SIG(-1 S2423C2) C1{ BC2{ BC3{ vd v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45} vd v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 Fp[2] Fi[4] FC4{ Fi[2]} Fp Fc Fp} BC5{ vd v60 v61 Fp Fc[32] Fi[6] Fc Fi[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 Fp Fl[2] FL[2] Fl Fc Fi FL Fi Fp[4] Fl[2] Fp}


 S2423C2 ::~S2423C2(){ note_dtor("S2423C2", this);}
void  S2423C2 ::v49(){vfunc_called(this, "_ZN7S2423C23v49Ev");}
void  S2423C2 ::v50(){vfunc_called(this, "_ZN7S2423C23v50Ev");}
void  S2423C2 ::v51(){vfunc_called(this, "_ZN7S2423C23v51Ev");}
void  S2423C2 ::v52(){vfunc_called(this, "_ZN7S2423C23v52Ev");}
void  S2423C2 ::v53(){vfunc_called(this, "_ZN7S2423C23v53Ev");}
void  S2423C2 ::v54(){vfunc_called(this, "_ZN7S2423C23v54Ev");}
void  S2423C2 ::v55(){vfunc_called(this, "_ZN7S2423C23v55Ev");}
void  S2423C2 ::v56(){vfunc_called(this, "_ZN7S2423C23v56Ev");}
void  S2423C2 ::v57(){vfunc_called(this, "_ZN7S2423C23v57Ev");}
void  S2423C2 ::v58(){vfunc_called(this, "_ZN7S2423C23v58Ev");}
void  S2423C2 ::v59(){vfunc_called(this, "_ZN7S2423C23v59Ev");}
void  S2423C2 ::v60(){vfunc_called(this, "_ZN7S2423C23v60Ev");}
void  S2423C2 ::v61(){vfunc_called(this, "_ZN7S2423C23v61Ev");}
void  S2423C2 ::v62(){vfunc_called(this, "_ZN7S2423C23v62Ev");}
void  S2423C2 ::v63(){vfunc_called(this, "_ZN7S2423C23v63Ev");}
void  S2423C2 ::v64(){vfunc_called(this, "_ZN7S2423C23v64Ev");}
void  S2423C2 ::v65(){vfunc_called(this, "_ZN7S2423C23v65Ev");}
void  S2423C2 ::v66(){vfunc_called(this, "_ZN7S2423C23v66Ev");}
void  S2423C2 ::v67(){vfunc_called(this, "_ZN7S2423C23v67Ev");}
S2423C2 ::S2423C2(){ note_ctor("S2423C2", this);} // tgen

static void Test_S2423C2()
{
  extern Class_Descriptor cd_S2423C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(37,52)];
    init_test(&cd_S2423C2, buf);
    S2423C2 *dp, &lv = *(dp=new (buf) S2423C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(288,204), "sizeof(S2423C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2423C2)");
    check_base_class_offset(lv, (S2423C4_nt*)(S2423C3*), 0, "S2423C2");
    check_base_class_offset(lv, (S2423C3*), 0, "S2423C2");
    check_base_class_offset(lv, (S2423C6*), ABISELECT(72,48), "S2423C2");
    check_field_offset(lv, s2423c2f0, ABISELECT(160,124), "S2423C2.s2423c2f0");
    check_field_offset(lv, s2423c2f1, ABISELECT(168,128), "S2423C2.s2423c2f1");
    check_field_offset(lv, s2423c2f2, ABISELECT(184,136), "S2423C2.s2423c2f2");
    check_field_offset(lv, s2423c2f3, ABISELECT(200,152), "S2423C2.s2423c2f3");
    check_field_offset(lv, s2423c2f4, ABISELECT(208,156), "S2423C2.s2423c2f4");
    check_field_offset(lv, s2423c2f5, ABISELECT(212,160), "S2423C2.s2423c2f5");
    check_field_offset(lv, s2423c2f6, ABISELECT(216,164), "S2423C2.s2423c2f6");
    check_field_offset(lv, s2423c2f7, ABISELECT(224,172), "S2423C2.s2423c2f7");
    check_field_offset(lv, s2423c2f8, ABISELECT(232,176), "S2423C2.s2423c2f8");
    check_field_offset(lv, s2423c2f9, ABISELECT(264,192), "S2423C2.s2423c2f9");
    check_field_offset(lv, s2423c2f10, ABISELECT(280,200), "S2423C2.s2423c2f10");
    test_class_info(&lv, &cd_S2423C2);
    dp->~S2423C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2423C2(Test_S2423C2, "S2423C2", ABISELECT(288,204));

#else // __cplusplus

extern void _ZN7S2423C2C1Ev();
extern void _ZN7S2423C2D1Ev();
Name_Map name_map_S2423C2[] = {
  NSPAIR(_ZN7S2423C2C1Ev),
  NSPAIR(_ZN7S2423C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2423C4_nt;
extern VTBL_ENTRY _ZTI10S2423C4_nt[];
extern  VTBL_ENTRY _ZTV10S2423C4_nt[];
extern Class_Descriptor cd_S2423C3;
extern VTBL_ENTRY _ZTI7S2423C3[];
extern  VTBL_ENTRY _ZTV7S2423C3[];
extern Class_Descriptor cd_S2423C6;
extern VTBL_ENTRY _ZTI7S2423C6[];
extern  VTBL_ENTRY _ZTV7S2423C6[];
static Base_Class bases_S2423C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2423C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S2423C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2423C6,    ABISELECT(72,48), //bcp->offset
    63, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S2423C2[];
extern void _ZN7S2423C2D1Ev();
extern void _ZN7S2423C2D0Ev();
extern void _ZN10S2423C4_nt2v7Ev();
extern void _ZN10S2423C4_nt2v8Ev();
extern void _ZN10S2423C4_nt2v9Ev();
extern void _ZN10S2423C4_nt3v10Ev();
extern void _ZN10S2423C4_nt3v11Ev();
extern void _ZN10S2423C4_nt3v12Ev();
extern void _ZN10S2423C4_nt3v13Ev();
extern void _ZN10S2423C4_nt3v14Ev();
extern void _ZN10S2423C4_nt3v15Ev();
extern void _ZN10S2423C4_nt3v16Ev();
extern void _ZN10S2423C4_nt3v17Ev();
extern void _ZN10S2423C4_nt3v18Ev();
extern void _ZN10S2423C4_nt3v19Ev();
extern void _ZN10S2423C4_nt3v20Ev();
extern void _ZN10S2423C4_nt3v21Ev();
extern void _ZN10S2423C4_nt3v22Ev();
extern void _ZN10S2423C4_nt3v23Ev();
extern void _ZN10S2423C4_nt3v24Ev();
extern void _ZN10S2423C4_nt3v25Ev();
extern void _ZN10S2423C4_nt3v26Ev();
extern void _ZN10S2423C4_nt3v27Ev();
extern void _ZN10S2423C4_nt3v28Ev();
extern void _ZN10S2423C4_nt3v29Ev();
extern void _ZN10S2423C4_nt3v30Ev();
extern void _ZN10S2423C4_nt3v31Ev();
extern void _ZN10S2423C4_nt3v32Ev();
extern void _ZN7S2423C33v33Ev();
extern void _ZN7S2423C33v34Ev();
extern void _ZN7S2423C33v35Ev();
extern void _ZN7S2423C33v36Ev();
extern void _ZN7S2423C33v37Ev();
extern void _ZN7S2423C33v38Ev();
extern void _ZN7S2423C33v39Ev();
extern void _ZN7S2423C33v40Ev();
extern void _ZN7S2423C33v41Ev();
extern void _ZN7S2423C33v42Ev();
extern void _ZN7S2423C33v43Ev();
extern void _ZN7S2423C33v44Ev();
extern void _ZN7S2423C33v45Ev();
extern void _ZN7S2423C33v46Ev();
extern void _ZN7S2423C23v49Ev();
extern void _ZN7S2423C23v50Ev();
extern void _ZN7S2423C23v51Ev();
extern void _ZN7S2423C23v52Ev();
extern void _ZN7S2423C23v53Ev();
extern void _ZN7S2423C23v54Ev();
extern void _ZN7S2423C23v55Ev();
extern void _ZN7S2423C23v56Ev();
extern void _ZN7S2423C23v57Ev();
extern void _ZN7S2423C23v58Ev();
extern void _ZN7S2423C23v59Ev();
extern void _ZN7S2423C23v60Ev();
extern void _ZN7S2423C23v61Ev();
extern void _ZN7S2423C23v62Ev();
extern void _ZN7S2423C23v63Ev();
extern void _ZN7S2423C23v64Ev();
extern void _ZN7S2423C23v65Ev();
extern void _ZN7S2423C23v66Ev();
extern void _ZN7S2423C23v67Ev();
extern void ABISELECT(_ZThn72_N7S2423C2D1Ev,_ZThn48_N7S2423C2D1Ev)();
extern void ABISELECT(_ZThn72_N7S2423C2D0Ev,_ZThn48_N7S2423C2D0Ev)();
extern void _ZN7S2423C63v47Ev();
extern void _ZN7S2423C63v48Ev();
static  VTBL_ENTRY vtc_S2423C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2423C2[0]),
  (VTBL_ENTRY)&_ZN7S2423C2D1Ev,
  (VTBL_ENTRY)&_ZN7S2423C2D0Ev,
  (VTBL_ENTRY)&_ZN10S2423C4_nt2v7Ev,
  (VTBL_ENTRY)&_ZN10S2423C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S2423C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S2423C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S2423C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S2423C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S2423C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S2423C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN10S2423C4_nt3v15Ev,
  (VTBL_ENTRY)&_ZN10S2423C4_nt3v16Ev,
  (VTBL_ENTRY)&_ZN10S2423C4_nt3v17Ev,
  (VTBL_ENTRY)&_ZN10S2423C4_nt3v18Ev,
  (VTBL_ENTRY)&_ZN10S2423C4_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S2423C4_nt3v20Ev,
  (VTBL_ENTRY)&_ZN10S2423C4_nt3v21Ev,
  (VTBL_ENTRY)&_ZN10S2423C4_nt3v22Ev,
  (VTBL_ENTRY)&_ZN10S2423C4_nt3v23Ev,
  (VTBL_ENTRY)&_ZN10S2423C4_nt3v24Ev,
  (VTBL_ENTRY)&_ZN10S2423C4_nt3v25Ev,
  (VTBL_ENTRY)&_ZN10S2423C4_nt3v26Ev,
  (VTBL_ENTRY)&_ZN10S2423C4_nt3v27Ev,
  (VTBL_ENTRY)&_ZN10S2423C4_nt3v28Ev,
  (VTBL_ENTRY)&_ZN10S2423C4_nt3v29Ev,
  (VTBL_ENTRY)&_ZN10S2423C4_nt3v30Ev,
  (VTBL_ENTRY)&_ZN10S2423C4_nt3v31Ev,
  (VTBL_ENTRY)&_ZN10S2423C4_nt3v32Ev,
  (VTBL_ENTRY)&_ZN7S2423C33v33Ev,
  (VTBL_ENTRY)&_ZN7S2423C33v34Ev,
  (VTBL_ENTRY)&_ZN7S2423C33v35Ev,
  (VTBL_ENTRY)&_ZN7S2423C33v36Ev,
  (VTBL_ENTRY)&_ZN7S2423C33v37Ev,
  (VTBL_ENTRY)&_ZN7S2423C33v38Ev,
  (VTBL_ENTRY)&_ZN7S2423C33v39Ev,
  (VTBL_ENTRY)&_ZN7S2423C33v40Ev,
  (VTBL_ENTRY)&_ZN7S2423C33v41Ev,
  (VTBL_ENTRY)&_ZN7S2423C33v42Ev,
  (VTBL_ENTRY)&_ZN7S2423C33v43Ev,
  (VTBL_ENTRY)&_ZN7S2423C33v44Ev,
  (VTBL_ENTRY)&_ZN7S2423C33v45Ev,
  (VTBL_ENTRY)&_ZN7S2423C33v46Ev,
  (VTBL_ENTRY)&_ZN7S2423C23v49Ev,
  (VTBL_ENTRY)&_ZN7S2423C23v50Ev,
  (VTBL_ENTRY)&_ZN7S2423C23v51Ev,
  (VTBL_ENTRY)&_ZN7S2423C23v52Ev,
  (VTBL_ENTRY)&_ZN7S2423C23v53Ev,
  (VTBL_ENTRY)&_ZN7S2423C23v54Ev,
  (VTBL_ENTRY)&_ZN7S2423C23v55Ev,
  (VTBL_ENTRY)&_ZN7S2423C23v56Ev,
  (VTBL_ENTRY)&_ZN7S2423C23v57Ev,
  (VTBL_ENTRY)&_ZN7S2423C23v58Ev,
  (VTBL_ENTRY)&_ZN7S2423C23v59Ev,
  (VTBL_ENTRY)&_ZN7S2423C23v60Ev,
  (VTBL_ENTRY)&_ZN7S2423C23v61Ev,
  (VTBL_ENTRY)&_ZN7S2423C23v62Ev,
  (VTBL_ENTRY)&_ZN7S2423C23v63Ev,
  (VTBL_ENTRY)&_ZN7S2423C23v64Ev,
  (VTBL_ENTRY)&_ZN7S2423C23v65Ev,
  (VTBL_ENTRY)&_ZN7S2423C23v66Ev,
  (VTBL_ENTRY)&_ZN7S2423C23v67Ev,
  ABISELECT(-72,-48),
  (VTBL_ENTRY)&(_ZTI7S2423C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn72_N7S2423C2D1Ev,_ZThn48_N7S2423C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn72_N7S2423C2D0Ev,_ZThn48_N7S2423C2D0Ev),
  (VTBL_ENTRY)&_ZN7S2423C63v47Ev,
  (VTBL_ENTRY)&_ZN7S2423C63v48Ev,
};
extern VTBL_ENTRY _ZTI7S2423C2[];
extern  VTBL_ENTRY _ZTV7S2423C2[];
Class_Descriptor cd_S2423C2 = {  "S2423C2", // class name
  bases_S2423C2, 3,
  &(vtc_S2423C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(288,204), // object size
  NSPAIRA(_ZTI7S2423C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S2423C2),69, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2423C8_nt  {
  void *s2423c8f0;
  int s2423c8f1;
};
//SIG(-1 S2423C8_nt) C1{ Fp Fi}



//skip512 S2423C8_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2423C7_nt  {
  int s2423c7f0;
  ::S2423C8_nt s2423c7f1;
};
//SIG(-1 S2423C7_nt) C1{ Fi FC2{ Fp Fi}}



//skip512 S2423C7_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2423C9_nt  {
  int s2423c9f0[3];
};
//SIG(-1 S2423C9_nt) C1{ Fi[3]}



//skip512 S2423C9_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2423C10  {
  ::S2423C5_nt s2423c10f0;
  ::S2423C5_nt s2423c10f1;
  ::S2423C8_nt s2423c10f2;
};
//SIG(-1 S2423C10) C1{ FC2{ Fi[2]} FC2 FC3{ Fp Fi}}



static void Test_S2423C10()
{
  {
    init_simple_test("S2423C10");
    S2423C10 lv;
    check2(sizeof(lv), ABISELECT(32,24), "sizeof(S2423C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2423C10)");
    check_field_offset(lv, s2423c10f0, 0, "S2423C10.s2423c10f0");
    check_field_offset(lv, s2423c10f1, 8, "S2423C10.s2423c10f1");
    check_field_offset(lv, s2423c10f2, 16, "S2423C10.s2423c10f2");
  }
}
static Arrange_To_Call_Me vS2423C10(Test_S2423C10, "S2423C10", ABISELECT(32,24));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2423C15  {
  char s2423c15f0;
  char s2423c15f1;
  char s2423c15f2[14];
};
//SIG(1 S2423C15) C1{ Fc[16]}



static void Test_S2423C15()
{
  {
    init_simple_test("S2423C15");
    S2423C15 lv;
    check2(sizeof(lv), 16, "sizeof(S2423C15)");
    check2(__alignof__(lv), 1, "__alignof__(S2423C15)");
    check_field_offset(lv, s2423c15f0, 0, "S2423C15.s2423c15f0");
    check_field_offset(lv, s2423c15f1, 1, "S2423C15.s2423c15f1");
    check_field_offset(lv, s2423c15f2, 2, "S2423C15.s2423c15f2");
  }
}
static Arrange_To_Call_Me vS2423C15(Test_S2423C15, "S2423C15", 16);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

union  S2423C14  {
  char s2423c14f0[16];
  ::S2423C15 s2423c14f1;
};
//SIG(1 S2423C14) U1{ Fc[16] FC2{ Fc Fc Fc[14]}}

#endif // __cplusplus
#ifdef __cplusplus

struct  S2423C13  {
  int s2423c13f0[10];
  ::S2423C14 s2423c13f1;
  void *s2423c13f2[2];
};
//SIG(-1 S2423C13) C1{ Fi[10] FU2{ Fc[16] FC3{ Fc Fc Fc[14]}} Fp[2]}



static void Test_S2423C13()
{
  {
    init_simple_test("S2423C13");
    S2423C13 lv;
    check2(sizeof(lv), ABISELECT(72,64), "sizeof(S2423C13)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2423C13)");
    check_field_offset(lv, s2423c13f0, 0, "S2423C13.s2423c13f0");
    check_field_offset(lv, s2423c13f1, 40, "S2423C13.s2423c13f1");
    check_field_offset(lv, s2423c13f2, 56, "S2423C13.s2423c13f2");
  }
}
static Arrange_To_Call_Me vS2423C13(Test_S2423C13, "S2423C13", ABISELECT(72,64));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2423C16  {
  int s2423c16f0;
  char s2423c16f1;
  char s2423c16f2;
  short s2423c16f3;
  short s2423c16f4;
  char s2423c16f5;
  char s2423c16f6[2];
  char s2423c16f7;
  char s2423c16f8;
  char s2423c16f9;
  ::S2423C5_nt s2423c16f10;
};
//SIG(-1 S2423C16) C1{ Fi Fc[2] Fs[2] Fc[6] FC2{ Fi[2]}}



static void Test_S2423C16()
{
  {
    init_simple_test("S2423C16");
    S2423C16 lv;
    check2(sizeof(lv), 24, "sizeof(S2423C16)");
    check2(__alignof__(lv), 4, "__alignof__(S2423C16)");
    check_field_offset(lv, s2423c16f0, 0, "S2423C16.s2423c16f0");
    check_field_offset(lv, s2423c16f1, 4, "S2423C16.s2423c16f1");
    check_field_offset(lv, s2423c16f2, 5, "S2423C16.s2423c16f2");
    check_field_offset(lv, s2423c16f3, 6, "S2423C16.s2423c16f3");
    check_field_offset(lv, s2423c16f4, 8, "S2423C16.s2423c16f4");
    check_field_offset(lv, s2423c16f5, 10, "S2423C16.s2423c16f5");
    check_field_offset(lv, s2423c16f6, 11, "S2423C16.s2423c16f6");
    check_field_offset(lv, s2423c16f7, 13, "S2423C16.s2423c16f7");
    check_field_offset(lv, s2423c16f8, 14, "S2423C16.s2423c16f8");
    check_field_offset(lv, s2423c16f9, 15, "S2423C16.s2423c16f9");
    check_field_offset(lv, s2423c16f10, 16, "S2423C16.s2423c16f10");
  }
}
static Arrange_To_Call_Me vS2423C16(Test_S2423C16, "S2423C16", 24);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2423C12  {
  int s2423c12f0;
  ::S2423C13 s2423c12f1;
  ::S2423C16 s2423c12f2;
};
//SIG(-1 S2423C12) C1{ Fi FC2{ Fi[10] FU3{ Fc[16] FC4{ Fc Fc Fc[14]}} Fp[2]} FC5{ Fi Fc Fc Fs Fs Fc Fc[2] Fc Fc Fc FC6{ Fi[2]}}}



static void Test_S2423C12()
{
  {
    init_simple_test("S2423C12");
    S2423C12 lv;
    check2(sizeof(lv), ABISELECT(104,92), "sizeof(S2423C12)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2423C12)");
    check_field_offset(lv, s2423c12f0, 0, "S2423C12.s2423c12f0");
    check_field_offset(lv, s2423c12f1, ABISELECT(8,4), "S2423C12.s2423c12f1");
    check_field_offset(lv, s2423c12f2, ABISELECT(80,68), "S2423C12.s2423c12f2");
  }
}
static Arrange_To_Call_Me vS2423C12(Test_S2423C12, "S2423C12", ABISELECT(104,92));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2423C17_nt  {
  int s2423c17f0;
  int s2423c17f1;
  void *s2423c17f2;
};
//SIG(-1 S2423C17_nt) C1{ Fi[2] Fp}



//skip512 S2423C17_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2423C1  : S2423C2 {
  void *s2423c1f0;
  long s2423c1f1;
  char s2423c1f2;
  void *s2423c1f3;
  char s2423c1f4;
  void *s2423c1f5;
  int s2423c1f6[2];
  ::S2423C7_nt s2423c1f7;
  ::S2423C9_nt s2423c1f8;
  ::S2423C10 s2423c1f9;
  ::S2423C12 s2423c1f10;
  void *s2423c1f11;
  ::S2423C17_nt s2423c1f12;
  virtual  ~S2423C1(); // _ZN7S2423C1D1Ev
  virtual void  v1(); // _ZN7S2423C12v1Ev
  virtual void  v2(); // _ZN7S2423C12v2Ev
  virtual void  v3(); // _ZN7S2423C12v3Ev
  virtual void  v4(); // _ZN7S2423C12v4Ev
  virtual void  v5(); // _ZN7S2423C12v5Ev
  virtual void  v6(); // _ZN7S2423C12v6Ev
  S2423C1(); // tgen
};
//SIG(1 S2423C1) C1{ BC2{ BC3{ BC4{ vd v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32} vd v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 Fp[2] Fi[4] FC5{ Fi[2]} Fp Fc Fp} BC6{ vd v47 v48 Fp Fc[32] Fi[6] Fc Fi[2]} vd v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 Fp Fl[2] FL[2] Fl Fc Fi FL Fi Fp[4] Fl[2] Fp} vd v1 v2 v3 v4 v5 v6 Fp Fl Fc Fp Fc Fp Fi[2] FC7{ Fi FC8{ Fp Fi}} FC9{ Fi[3]} FC10{ FC5 FC5 FC8} FC11{ Fi FC12{ Fi[10] FU13{ Fc[16] FC14{ Fc Fc Fc[14]}} Fp[2]} FC15{ Fi Fc Fc Fs Fs Fc Fc[2] Fc Fc Fc FC5}} Fp FC16{ Fi Fi Fp}}


 S2423C1 ::~S2423C1(){ note_dtor("S2423C1", this);}
void  S2423C1 ::v1(){vfunc_called(this, "_ZN7S2423C12v1Ev");}
void  S2423C1 ::v2(){vfunc_called(this, "_ZN7S2423C12v2Ev");}
void  S2423C1 ::v3(){vfunc_called(this, "_ZN7S2423C12v3Ev");}
void  S2423C1 ::v4(){vfunc_called(this, "_ZN7S2423C12v4Ev");}
void  S2423C1 ::v5(){vfunc_called(this, "_ZN7S2423C12v5Ev");}
void  S2423C1 ::v6(){vfunc_called(this, "_ZN7S2423C12v6Ev");}
S2423C1 ::S2423C1(){ note_ctor("S2423C1", this);} // tgen

static void Test_S2423C1()
{
  extern Class_Descriptor cd_S2423C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(69,99)];
    init_test(&cd_S2423C1, buf);
    S2423C1 *dp, &lv = *(dp=new (buf) S2423C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(544,392), "sizeof(S2423C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2423C1)");
    check_base_class_offset(lv, (S2423C4_nt*)(S2423C3*)(S2423C2*), 0, "S2423C1");
    check_base_class_offset(lv, (S2423C3*)(S2423C2*), 0, "S2423C1");
    check_base_class_offset(lv, (S2423C6*)(S2423C2*), ABISELECT(72,48), "S2423C1");
    check_base_class_offset(lv, (S2423C2*), 0, "S2423C1");
    check_field_offset(lv, s2423c1f0, ABISELECT(288,204), "S2423C1.s2423c1f0");
    check_field_offset(lv, s2423c1f1, ABISELECT(296,208), "S2423C1.s2423c1f1");
    check_field_offset(lv, s2423c1f2, ABISELECT(304,212), "S2423C1.s2423c1f2");
    check_field_offset(lv, s2423c1f3, ABISELECT(312,216), "S2423C1.s2423c1f3");
    check_field_offset(lv, s2423c1f4, ABISELECT(320,220), "S2423C1.s2423c1f4");
    check_field_offset(lv, s2423c1f5, ABISELECT(328,224), "S2423C1.s2423c1f5");
    check_field_offset(lv, s2423c1f6, ABISELECT(336,228), "S2423C1.s2423c1f6");
    check_field_offset(lv, s2423c1f7, ABISELECT(344,236), "S2423C1.s2423c1f7");
    check_field_offset(lv, s2423c1f8, ABISELECT(368,248), "S2423C1.s2423c1f8");
    check_field_offset(lv, s2423c1f9, ABISELECT(384,260), "S2423C1.s2423c1f9");
    check_field_offset(lv, s2423c1f10, ABISELECT(416,284), "S2423C1.s2423c1f10");
    check_field_offset(lv, s2423c1f11, ABISELECT(520,376), "S2423C1.s2423c1f11");
    check_field_offset(lv, s2423c1f12, ABISELECT(528,380), "S2423C1.s2423c1f12");
    test_class_info(&lv, &cd_S2423C1);
    dp->~S2423C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2423C1(Test_S2423C1, "S2423C1", ABISELECT(544,392));

#else // __cplusplus

extern void _ZN7S2423C1C1Ev();
extern void _ZN7S2423C1D1Ev();
Name_Map name_map_S2423C1[] = {
  NSPAIR(_ZN7S2423C1C1Ev),
  NSPAIR(_ZN7S2423C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2423C4_nt;
extern VTBL_ENTRY _ZTI10S2423C4_nt[];
extern  VTBL_ENTRY _ZTV10S2423C4_nt[];
extern Class_Descriptor cd_S2423C3;
extern VTBL_ENTRY _ZTI7S2423C3[];
extern  VTBL_ENTRY _ZTV7S2423C3[];
extern Class_Descriptor cd_S2423C6;
extern VTBL_ENTRY _ZTI7S2423C6[];
extern  VTBL_ENTRY _ZTV7S2423C6[];
extern Class_Descriptor cd_S2423C2;
extern VTBL_ENTRY _ZTI7S2423C2[];
extern  VTBL_ENTRY _ZTV7S2423C2[];
static Base_Class bases_S2423C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2423C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S2423C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S2423C6,    ABISELECT(72,48), //bcp->offset
    69, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S2423C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S2423C1[];
extern void _ZN7S2423C1D1Ev();
extern void _ZN7S2423C1D0Ev();
extern void _ZN10S2423C4_nt2v7Ev();
extern void _ZN10S2423C4_nt2v8Ev();
extern void _ZN10S2423C4_nt2v9Ev();
extern void _ZN10S2423C4_nt3v10Ev();
extern void _ZN10S2423C4_nt3v11Ev();
extern void _ZN10S2423C4_nt3v12Ev();
extern void _ZN10S2423C4_nt3v13Ev();
extern void _ZN10S2423C4_nt3v14Ev();
extern void _ZN10S2423C4_nt3v15Ev();
extern void _ZN10S2423C4_nt3v16Ev();
extern void _ZN10S2423C4_nt3v17Ev();
extern void _ZN10S2423C4_nt3v18Ev();
extern void _ZN10S2423C4_nt3v19Ev();
extern void _ZN10S2423C4_nt3v20Ev();
extern void _ZN10S2423C4_nt3v21Ev();
extern void _ZN10S2423C4_nt3v22Ev();
extern void _ZN10S2423C4_nt3v23Ev();
extern void _ZN10S2423C4_nt3v24Ev();
extern void _ZN10S2423C4_nt3v25Ev();
extern void _ZN10S2423C4_nt3v26Ev();
extern void _ZN10S2423C4_nt3v27Ev();
extern void _ZN10S2423C4_nt3v28Ev();
extern void _ZN10S2423C4_nt3v29Ev();
extern void _ZN10S2423C4_nt3v30Ev();
extern void _ZN10S2423C4_nt3v31Ev();
extern void _ZN10S2423C4_nt3v32Ev();
extern void _ZN7S2423C33v33Ev();
extern void _ZN7S2423C33v34Ev();
extern void _ZN7S2423C33v35Ev();
extern void _ZN7S2423C33v36Ev();
extern void _ZN7S2423C33v37Ev();
extern void _ZN7S2423C33v38Ev();
extern void _ZN7S2423C33v39Ev();
extern void _ZN7S2423C33v40Ev();
extern void _ZN7S2423C33v41Ev();
extern void _ZN7S2423C33v42Ev();
extern void _ZN7S2423C33v43Ev();
extern void _ZN7S2423C33v44Ev();
extern void _ZN7S2423C33v45Ev();
extern void _ZN7S2423C33v46Ev();
extern void _ZN7S2423C23v49Ev();
extern void _ZN7S2423C23v50Ev();
extern void _ZN7S2423C23v51Ev();
extern void _ZN7S2423C23v52Ev();
extern void _ZN7S2423C23v53Ev();
extern void _ZN7S2423C23v54Ev();
extern void _ZN7S2423C23v55Ev();
extern void _ZN7S2423C23v56Ev();
extern void _ZN7S2423C23v57Ev();
extern void _ZN7S2423C23v58Ev();
extern void _ZN7S2423C23v59Ev();
extern void _ZN7S2423C23v60Ev();
extern void _ZN7S2423C23v61Ev();
extern void _ZN7S2423C23v62Ev();
extern void _ZN7S2423C23v63Ev();
extern void _ZN7S2423C23v64Ev();
extern void _ZN7S2423C23v65Ev();
extern void _ZN7S2423C23v66Ev();
extern void _ZN7S2423C23v67Ev();
extern void _ZN7S2423C12v1Ev();
extern void _ZN7S2423C12v2Ev();
extern void _ZN7S2423C12v3Ev();
extern void _ZN7S2423C12v4Ev();
extern void _ZN7S2423C12v5Ev();
extern void _ZN7S2423C12v6Ev();
extern void ABISELECT(_ZThn72_N7S2423C1D1Ev,_ZThn48_N7S2423C1D1Ev)();
extern void ABISELECT(_ZThn72_N7S2423C1D0Ev,_ZThn48_N7S2423C1D0Ev)();
extern void _ZN7S2423C63v47Ev();
extern void _ZN7S2423C63v48Ev();
static  VTBL_ENTRY vtc_S2423C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2423C1[0]),
  (VTBL_ENTRY)&_ZN7S2423C1D1Ev,
  (VTBL_ENTRY)&_ZN7S2423C1D0Ev,
  (VTBL_ENTRY)&_ZN10S2423C4_nt2v7Ev,
  (VTBL_ENTRY)&_ZN10S2423C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S2423C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S2423C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S2423C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S2423C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S2423C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S2423C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN10S2423C4_nt3v15Ev,
  (VTBL_ENTRY)&_ZN10S2423C4_nt3v16Ev,
  (VTBL_ENTRY)&_ZN10S2423C4_nt3v17Ev,
  (VTBL_ENTRY)&_ZN10S2423C4_nt3v18Ev,
  (VTBL_ENTRY)&_ZN10S2423C4_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S2423C4_nt3v20Ev,
  (VTBL_ENTRY)&_ZN10S2423C4_nt3v21Ev,
  (VTBL_ENTRY)&_ZN10S2423C4_nt3v22Ev,
  (VTBL_ENTRY)&_ZN10S2423C4_nt3v23Ev,
  (VTBL_ENTRY)&_ZN10S2423C4_nt3v24Ev,
  (VTBL_ENTRY)&_ZN10S2423C4_nt3v25Ev,
  (VTBL_ENTRY)&_ZN10S2423C4_nt3v26Ev,
  (VTBL_ENTRY)&_ZN10S2423C4_nt3v27Ev,
  (VTBL_ENTRY)&_ZN10S2423C4_nt3v28Ev,
  (VTBL_ENTRY)&_ZN10S2423C4_nt3v29Ev,
  (VTBL_ENTRY)&_ZN10S2423C4_nt3v30Ev,
  (VTBL_ENTRY)&_ZN10S2423C4_nt3v31Ev,
  (VTBL_ENTRY)&_ZN10S2423C4_nt3v32Ev,
  (VTBL_ENTRY)&_ZN7S2423C33v33Ev,
  (VTBL_ENTRY)&_ZN7S2423C33v34Ev,
  (VTBL_ENTRY)&_ZN7S2423C33v35Ev,
  (VTBL_ENTRY)&_ZN7S2423C33v36Ev,
  (VTBL_ENTRY)&_ZN7S2423C33v37Ev,
  (VTBL_ENTRY)&_ZN7S2423C33v38Ev,
  (VTBL_ENTRY)&_ZN7S2423C33v39Ev,
  (VTBL_ENTRY)&_ZN7S2423C33v40Ev,
  (VTBL_ENTRY)&_ZN7S2423C33v41Ev,
  (VTBL_ENTRY)&_ZN7S2423C33v42Ev,
  (VTBL_ENTRY)&_ZN7S2423C33v43Ev,
  (VTBL_ENTRY)&_ZN7S2423C33v44Ev,
  (VTBL_ENTRY)&_ZN7S2423C33v45Ev,
  (VTBL_ENTRY)&_ZN7S2423C33v46Ev,
  (VTBL_ENTRY)&_ZN7S2423C23v49Ev,
  (VTBL_ENTRY)&_ZN7S2423C23v50Ev,
  (VTBL_ENTRY)&_ZN7S2423C23v51Ev,
  (VTBL_ENTRY)&_ZN7S2423C23v52Ev,
  (VTBL_ENTRY)&_ZN7S2423C23v53Ev,
  (VTBL_ENTRY)&_ZN7S2423C23v54Ev,
  (VTBL_ENTRY)&_ZN7S2423C23v55Ev,
  (VTBL_ENTRY)&_ZN7S2423C23v56Ev,
  (VTBL_ENTRY)&_ZN7S2423C23v57Ev,
  (VTBL_ENTRY)&_ZN7S2423C23v58Ev,
  (VTBL_ENTRY)&_ZN7S2423C23v59Ev,
  (VTBL_ENTRY)&_ZN7S2423C23v60Ev,
  (VTBL_ENTRY)&_ZN7S2423C23v61Ev,
  (VTBL_ENTRY)&_ZN7S2423C23v62Ev,
  (VTBL_ENTRY)&_ZN7S2423C23v63Ev,
  (VTBL_ENTRY)&_ZN7S2423C23v64Ev,
  (VTBL_ENTRY)&_ZN7S2423C23v65Ev,
  (VTBL_ENTRY)&_ZN7S2423C23v66Ev,
  (VTBL_ENTRY)&_ZN7S2423C23v67Ev,
  (VTBL_ENTRY)&_ZN7S2423C12v1Ev,
  (VTBL_ENTRY)&_ZN7S2423C12v2Ev,
  (VTBL_ENTRY)&_ZN7S2423C12v3Ev,
  (VTBL_ENTRY)&_ZN7S2423C12v4Ev,
  (VTBL_ENTRY)&_ZN7S2423C12v5Ev,
  (VTBL_ENTRY)&_ZN7S2423C12v6Ev,
  ABISELECT(-72,-48),
  (VTBL_ENTRY)&(_ZTI7S2423C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn72_N7S2423C1D1Ev,_ZThn48_N7S2423C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn72_N7S2423C1D0Ev,_ZThn48_N7S2423C1D0Ev),
  (VTBL_ENTRY)&_ZN7S2423C63v47Ev,
  (VTBL_ENTRY)&_ZN7S2423C63v48Ev,
};
extern VTBL_ENTRY _ZTI7S2423C1[];
extern  VTBL_ENTRY _ZTV7S2423C1[];
Class_Descriptor cd_S2423C1 = {  "S2423C1", // class name
  bases_S2423C1, 4,
  &(vtc_S2423C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(544,392), // object size
  NSPAIRA(_ZTI7S2423C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2423C1),75, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  4, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7682C3  {
  short s7682c3f0:13;
  void *s7682c3f1;
  long double s7682c3f2[8];
  virtual void  v8(); // _ZN7S7682C32v8Ev
  virtual void  v9(); // _ZN7S7682C32v9Ev
  virtual void  v10(); // _ZN7S7682C33v10Ev
  virtual void  v11(); // _ZN7S7682C33v11Ev
  ~S7682C3(); // tgen
  S7682C3(); // tgen
};
//SIG(-1 S7682C3) C1{ v1 v2 v3 v4 Fs:13 Fp FD[8]}


void  S7682C3 ::v8(){vfunc_called(this, "_ZN7S7682C32v8Ev");}
void  S7682C3 ::v9(){vfunc_called(this, "_ZN7S7682C32v9Ev");}
void  S7682C3 ::v10(){vfunc_called(this, "_ZN7S7682C33v10Ev");}
void  S7682C3 ::v11(){vfunc_called(this, "_ZN7S7682C33v11Ev");}
S7682C3 ::~S7682C3(){ note_dtor("S7682C3", this);} // tgen
S7682C3 ::S7682C3(){ note_ctor("S7682C3", this);} // tgen

static void Test_S7682C3()
{
  extern Class_Descriptor cd_S7682C3;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(11,28)];
    init_test(&cd_S7682C3, buf);
    S7682C3 *dp, &lv = *(dp=new (buf) S7682C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(160,108), "sizeof(S7682C3)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7682C3)");
    set_bf_and_test(lv, s7682c3f0, ABISELECT(8,4), 0, 13, 1, "S7682C3");
    set_bf_and_test(lv, s7682c3f0, ABISELECT(8,4), 0, 13, hide_sll(1LL<<12), "S7682C3");
    check_field_offset(lv, s7682c3f1, ABISELECT(16,8), "S7682C3.s7682c3f1");
    check_field_offset(lv, s7682c3f2, ABISELECT(32,12), "S7682C3.s7682c3f2");
    test_class_info(&lv, &cd_S7682C3);
    dp->~S7682C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7682C3(Test_S7682C3, "S7682C3", ABISELECT(160,108));

#else // __cplusplus

extern void _ZN7S7682C3C1Ev();
extern void _ZN7S7682C3D1Ev();
Name_Map name_map_S7682C3[] = {
  NSPAIR(_ZN7S7682C3C1Ev),
  NSPAIR(_ZN7S7682C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S7682C3[];
extern void _ZN7S7682C32v8Ev();
extern void _ZN7S7682C32v9Ev();
extern void _ZN7S7682C33v10Ev();
extern void _ZN7S7682C33v11Ev();
static  VTBL_ENTRY vtc_S7682C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7682C3[0]),
  (VTBL_ENTRY)&_ZN7S7682C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7682C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v11Ev,
};
extern VTBL_ENTRY _ZTI7S7682C3[];
extern  VTBL_ENTRY _ZTV7S7682C3[];
Class_Descriptor cd_S7682C3 = {  "S7682C3", // class name
  0,0,//no base classes
  &(vtc_S7682C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(160,108), // object size
  NSPAIRA(_ZTI7S7682C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S7682C3),6, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7682C4  : S7682C3 {
  void *s7682c4f0[6];
  virtual void  v12(); // _ZN7S7682C43v12Ev
  virtual void  v13(); // _ZN7S7682C43v13Ev
  virtual void  v14(); // _ZN7S7682C43v14Ev
  ~S7682C4(); // tgen
  S7682C4(); // tgen
};
//SIG(-1 S7682C4) C1{ BC2{ v4 v5 v6 v7 Fs:13 Fp FD[8]} v1 v2 v3 Fp[6]}


void  S7682C4 ::v12(){vfunc_called(this, "_ZN7S7682C43v12Ev");}
void  S7682C4 ::v13(){vfunc_called(this, "_ZN7S7682C43v13Ev");}
void  S7682C4 ::v14(){vfunc_called(this, "_ZN7S7682C43v14Ev");}
S7682C4 ::~S7682C4(){ note_dtor("S7682C4", this);} // tgen
S7682C4 ::S7682C4(){ note_ctor("S7682C4", this);} // tgen

static void Test_S7682C4()
{
  extern Class_Descriptor cd_S7682C4;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(14,34)];
    init_test(&cd_S7682C4, buf);
    S7682C4 *dp, &lv = *(dp=new (buf) S7682C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(208,132), "sizeof(S7682C4)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7682C4)");
    check_base_class_offset(lv, (S7682C3*), 0, "S7682C4");
    check_field_offset(lv, s7682c4f0, ABISELECT(160,108), "S7682C4.s7682c4f0");
    test_class_info(&lv, &cd_S7682C4);
    dp->~S7682C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7682C4(Test_S7682C4, "S7682C4", ABISELECT(208,132));

#else // __cplusplus

extern void _ZN7S7682C4C1Ev();
extern void _ZN7S7682C4D1Ev();
Name_Map name_map_S7682C4[] = {
  NSPAIR(_ZN7S7682C4C1Ev),
  NSPAIR(_ZN7S7682C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7682C3;
extern VTBL_ENTRY _ZTI7S7682C3[];
extern  VTBL_ENTRY _ZTV7S7682C3[];
static Base_Class bases_S7682C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7682C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7682C4[];
extern void _ZN7S7682C32v8Ev();
extern void _ZN7S7682C32v9Ev();
extern void _ZN7S7682C33v10Ev();
extern void _ZN7S7682C33v11Ev();
extern void _ZN7S7682C43v12Ev();
extern void _ZN7S7682C43v13Ev();
extern void _ZN7S7682C43v14Ev();
static  VTBL_ENTRY vtc_S7682C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7682C4[0]),
  (VTBL_ENTRY)&_ZN7S7682C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7682C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v14Ev,
};
extern VTBL_ENTRY _ZTI7S7682C4[];
extern  VTBL_ENTRY _ZTV7S7682C4[];
Class_Descriptor cd_S7682C4 = {  "S7682C4", // class name
  bases_S7682C4, 1,
  &(vtc_S7682C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(208,132), // object size
  NSPAIRA(_ZTI7S7682C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S7682C4),9, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7682C2  : virtual S7682C3 , S7682C4 {
  void *s7682c2f0;
  virtual void  v15(); // _ZN7S7682C23v15Ev
  virtual void  v16(); // _ZN7S7682C23v16Ev
  virtual void  v17(); // _ZN7S7682C23v17Ev
  virtual void  v18(); // _ZN7S7682C23v18Ev
  ~S7682C2(); // tgen
  S7682C2(); // tgen
};
//SIG(-1 S7682C2) C1{ VBC2{ v5 v6 v7 v8 Fs:13 Fp FD[8]} BC3{ BC2 v9 v10 v11 Fp[6]} v1 v2 v3 v4 Fp}


void  S7682C2 ::v15(){vfunc_called(this, "_ZN7S7682C23v15Ev");}
void  S7682C2 ::v16(){vfunc_called(this, "_ZN7S7682C23v16Ev");}
void  S7682C2 ::v17(){vfunc_called(this, "_ZN7S7682C23v17Ev");}
void  S7682C2 ::v18(){vfunc_called(this, "_ZN7S7682C23v18Ev");}
S7682C2 ::~S7682C2(){ note_dtor("S7682C2", this);} // tgen
S7682C2 ::S7682C2(){ note_ctor("S7682C2", this);} // tgen

static void Test_S7682C2()
{
  extern Class_Descriptor cd_S7682C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(25,62)];
    init_test(&cd_S7682C2, buf);
    S7682C2 *dp, &lv = *(dp=new (buf) S7682C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(384,244), "sizeof(S7682C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7682C2)");
    /*is_ambiguous_... S7682C2::S7682C3 */ AMB_check_base_class_offset(lv, (S7682C3*), ABISELECT(224,136), "S7682C2");
    check_base_class_offset(lv, (S7682C3*)(S7682C4*), 0, "S7682C2");
    check_base_class_offset(lv, (S7682C4*), 0, "S7682C2");
    check_field_offset(lv, s7682c2f0, ABISELECT(208,132), "S7682C2.s7682c2f0");
    test_class_info(&lv, &cd_S7682C2);
    dp->~S7682C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7682C2(Test_S7682C2, "S7682C2", ABISELECT(384,244));

#else // __cplusplus

extern void _ZN7S7682C2C1Ev();
extern void _ZN7S7682C2D1Ev();
Name_Map name_map_S7682C2[] = {
  NSPAIR(_ZN7S7682C2C1Ev),
  NSPAIR(_ZN7S7682C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7682C3;
extern VTBL_ENTRY _ZTI7S7682C3[];
extern  VTBL_ENTRY _ZTV7S7682C3[];
extern Class_Descriptor cd_S7682C3;
extern VTBL_ENTRY _ZTI7S7682C3[];
extern  VTBL_ENTRY _ZTV7S7682C3[];
extern Class_Descriptor cd_S7682C4;
extern VTBL_ENTRY _ZTI7S7682C4[];
extern  VTBL_ENTRY _ZTV7S7682C4[];
static Base_Class bases_S7682C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7682C3,    ABISELECT(224,136), //bcp->offset
    14, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7682C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S7682C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7682C2[];
extern void _ZN7S7682C32v8Ev();
extern void _ZN7S7682C32v9Ev();
extern void _ZN7S7682C33v10Ev();
extern void _ZN7S7682C33v11Ev();
extern void _ZN7S7682C43v12Ev();
extern void _ZN7S7682C43v13Ev();
extern void _ZN7S7682C43v14Ev();
extern void _ZN7S7682C23v15Ev();
extern void _ZN7S7682C23v16Ev();
extern void _ZN7S7682C23v17Ev();
extern void _ZN7S7682C23v18Ev();
extern void _ZN7S7682C32v8Ev();
extern void _ZN7S7682C32v9Ev();
extern void _ZN7S7682C33v10Ev();
extern void _ZN7S7682C33v11Ev();
static  VTBL_ENTRY vtc_S7682C2[] = {
  ABISELECT(224,136),
  0,
  (VTBL_ENTRY)&(_ZTI7S7682C2[0]),
  (VTBL_ENTRY)&_ZN7S7682C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7682C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v15Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v16Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v17Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v18Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-224,-136),
  (VTBL_ENTRY)&(_ZTI7S7682C2[0]),
  (VTBL_ENTRY)&_ZN7S7682C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7682C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v11Ev,
};
extern VTBL_ENTRY _ZTV7S7682C2[];
static  VTT_ENTRY vtt_S7682C2[] = {
  {&(_ZTV7S7682C2[3]),  3,24},
  {&(_ZTV7S7682C2[20]),  20,24},
};
extern VTBL_ENTRY _ZTI7S7682C2[];
extern  VTBL_ENTRY _ZTV7S7682C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7682C2[];
Class_Descriptor cd_S7682C2 = {  "S7682C2", // class name
  bases_S7682C2, 3,
  &(vtc_S7682C2[0]), // expected_vtbl_contents
  &(vtt_S7682C2[0]), // expected_vtt_contents
  ABISELECT(384,244), // object size
  NSPAIRA(_ZTI7S7682C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7682C2),24, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7682C2),2, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7682C6  : virtual S7682C2 {
  virtual  ~S7682C6(); // _ZN7S7682C6D2Ev
  virtual void  v19(); // _ZN7S7682C63v19Ev
  virtual void  v20(); // _ZN7S7682C63v20Ev
  virtual void  v21(); // _ZN7S7682C63v21Ev
  virtual void  v22(); // _ZN7S7682C63v22Ev
  S7682C6(); // tgen
};
//SIG(-1 S7682C6) C1{ VBC2{ VBC3{ v5 v6 v7 v8 Fs:13 Fp FD[8]} BC4{ BC3 v9 v10 v11 Fp[6]} v12 v13 v14 v15 Fp} vd v1 v2 v3 v4}


 S7682C6 ::~S7682C6(){ note_dtor("S7682C6", this);}
void  S7682C6 ::v19(){vfunc_called(this, "_ZN7S7682C63v19Ev");}
void  S7682C6 ::v20(){vfunc_called(this, "_ZN7S7682C63v20Ev");}
void  S7682C6 ::v21(){vfunc_called(this, "_ZN7S7682C63v21Ev");}
void  S7682C6 ::v22(){vfunc_called(this, "_ZN7S7682C63v22Ev");}
S7682C6 ::S7682C6(){ note_ctor("S7682C6", this);} // tgen

static void Test_S7682C6()
{
  extern Class_Descriptor cd_S7682C6;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(26,63)];
    init_test(&cd_S7682C6, buf);
    S7682C6 *dp, &lv = *(dp=new (buf) S7682C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(400,248), "sizeof(S7682C6)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7682C6)");
    /*is_ambiguous_... S7682C2::S7682C3 */ AMB_check_base_class_offset(lv, (S7682C3*)(S7682C2*), ABISELECT(240,140), "S7682C6");
    check_base_class_offset(lv, (S7682C3*)(S7682C4*)(S7682C2*), ABISELECT(16,4), "S7682C6");
    check_base_class_offset(lv, (S7682C4*)(S7682C2*), ABISELECT(16,4), "S7682C6");
    check_base_class_offset(lv, (S7682C2*), ABISELECT(16,4), "S7682C6");
    test_class_info(&lv, &cd_S7682C6);
    dp->~S7682C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7682C6(Test_S7682C6, "S7682C6", ABISELECT(400,248));

#else // __cplusplus

extern void _ZN7S7682C6C1Ev();
extern void _ZN7S7682C6D2Ev();
Name_Map name_map_S7682C6[] = {
  NSPAIR(_ZN7S7682C6C1Ev),
  NSPAIR(_ZN7S7682C6D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7682C3;
extern VTBL_ENTRY _ZTI7S7682C3[];
extern  VTBL_ENTRY _ZTV7S7682C3[];
extern Class_Descriptor cd_S7682C3;
extern VTBL_ENTRY _ZTI7S7682C3[];
extern  VTBL_ENTRY _ZTV7S7682C3[];
extern Class_Descriptor cd_S7682C4;
extern VTBL_ENTRY _ZTI7S7682C4[];
extern  VTBL_ENTRY _ZTV7S7682C4[];
extern Class_Descriptor cd_S7682C2;
extern VTBL_ENTRY _ZTI7S7682C2[];
extern  VTBL_ENTRY _ZTV7S7682C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7682C2[];
static Base_Class bases_S7682C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7682C3,    ABISELECT(240,140), //bcp->offset
    35, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S7682C3,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S7682C4,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S7682C2,    ABISELECT(16,4), //bcp->offset
    10, //bcp->virtual_function_table_offset
    14, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7682C6[];
extern void _ZN7S7682C6D1Ev();
extern void _ZN7S7682C6D0Ev();
extern void _ZN7S7682C63v19Ev();
extern void _ZN7S7682C63v20Ev();
extern void _ZN7S7682C63v21Ev();
extern void _ZN7S7682C63v22Ev();
extern void _ZN7S7682C32v8Ev();
extern void _ZN7S7682C32v9Ev();
extern void _ZN7S7682C33v10Ev();
extern void _ZN7S7682C33v11Ev();
extern void _ZN7S7682C43v12Ev();
extern void _ZN7S7682C43v13Ev();
extern void _ZN7S7682C43v14Ev();
extern void _ZN7S7682C23v15Ev();
extern void _ZN7S7682C23v16Ev();
extern void _ZN7S7682C23v17Ev();
extern void _ZN7S7682C23v18Ev();
extern void _ZN7S7682C32v8Ev();
extern void _ZN7S7682C32v9Ev();
extern void _ZN7S7682C33v10Ev();
extern void _ZN7S7682C33v11Ev();
static  VTBL_ENTRY vtc_S7682C6[] = {
  ABISELECT(240,140),
  ABISELECT(16,4),
  0,
  (VTBL_ENTRY)&(_ZTI7S7682C6[0]),
  (VTBL_ENTRY)&_ZN7S7682C6D1Ev,
  (VTBL_ENTRY)&_ZN7S7682C6D0Ev,
  (VTBL_ENTRY)&_ZN7S7682C63v19Ev,
  (VTBL_ENTRY)&_ZN7S7682C63v20Ev,
  (VTBL_ENTRY)&_ZN7S7682C63v21Ev,
  (VTBL_ENTRY)&_ZN7S7682C63v22Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(224,136),
  ABISELECT(-16,-4),
  (VTBL_ENTRY)&(_ZTI7S7682C6[0]),
  (VTBL_ENTRY)&_ZN7S7682C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7682C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v15Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v16Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v17Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v18Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-240,-140),
  (VTBL_ENTRY)&(_ZTI7S7682C6[0]),
  (VTBL_ENTRY)&_ZN7S7682C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7682C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v11Ev,
};
extern VTBL_ENTRY _ZTV7S7682C6[];
extern void _ZN7S7682C32v8Ev();
extern void _ZN7S7682C32v9Ev();
extern void _ZN7S7682C33v10Ev();
extern void _ZN7S7682C33v11Ev();
extern void _ZN7S7682C43v12Ev();
extern void _ZN7S7682C43v13Ev();
extern void _ZN7S7682C43v14Ev();
extern void _ZN7S7682C23v15Ev();
extern void _ZN7S7682C23v16Ev();
extern void _ZN7S7682C23v17Ev();
extern void _ZN7S7682C23v18Ev();
static  VTBL_ENTRY _tg__ZTV7S7682C2__7S7682C6[] = {
  ABISELECT(224,136),
  0,
  (VTBL_ENTRY)&(_ZTI7S7682C2[0]),
  (VTBL_ENTRY)&_ZN7S7682C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7682C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v15Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v16Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v17Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v18Ev,
};
extern void _ZN7S7682C32v8Ev();
extern void _ZN7S7682C32v9Ev();
extern void _ZN7S7682C33v10Ev();
extern void _ZN7S7682C33v11Ev();
static  VTBL_ENTRY _tg__ZTV7S7682C3__7S7682C2__7S7682C6[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-224,-136),
  (VTBL_ENTRY)&(_ZTI7S7682C2[0]),
  (VTBL_ENTRY)&_ZN7S7682C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7682C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v11Ev,
};
static  VTT_ENTRY vtt_S7682C6[] = {
  {&(_ZTV7S7682C6[4]),  4,45},
  {&(_ZTV7S7682C6[24]),  24,45},
  {&(_ZTV7S7682C6[41]),  41,45},
  {&(_tg__ZTV7S7682C2__7S7682C6[3]),  3,14},
  {&(_tg__ZTV7S7682C3__7S7682C2__7S7682C6[6]),  6,10},
};
extern VTBL_ENTRY _ZTI7S7682C6[];
extern  VTBL_ENTRY _ZTV7S7682C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7682C6[];
Class_Descriptor cd_S7682C6 = {  "S7682C6", // class name
  bases_S7682C6, 4,
  &(vtc_S7682C6[0]), // expected_vtbl_contents
  &(vtt_S7682C6[0]), // expected_vtt_contents
  ABISELECT(400,248), // object size
  NSPAIRA(_ZTI7S7682C6),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S7682C6),45, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7682C6),5, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7682C5  : S7682C6 {
  long double s7682c5f0;
  virtual void  v23(); // _ZN7S7682C53v23Ev
  virtual void  v24(); // _ZN7S7682C53v24Ev
  virtual void  v25(); // _ZN7S7682C53v25Ev
  virtual void  v26(); // _ZN7S7682C53v26Ev
  virtual void  v27(); // _ZN7S7682C53v27Ev
  virtual void  v28(); // _ZN7S7682C53v28Ev
  ~S7682C5(); // tgen
  S7682C5(); // tgen
};
//SIG(-1 S7682C5) C1{ BC2{ VBC3{ VBC4{ v7 v8 v9 v10 Fs:13 Fp FD[8]} BC5{ BC4 v11 v12 v13 Fp[6]} v14 v15 v16 v17 Fp} vd v18 v19 v20 v21} v1 v2 v3 v4 v5 v6 FD}


void  S7682C5 ::v23(){vfunc_called(this, "_ZN7S7682C53v23Ev");}
void  S7682C5 ::v24(){vfunc_called(this, "_ZN7S7682C53v24Ev");}
void  S7682C5 ::v25(){vfunc_called(this, "_ZN7S7682C53v25Ev");}
void  S7682C5 ::v26(){vfunc_called(this, "_ZN7S7682C53v26Ev");}
void  S7682C5 ::v27(){vfunc_called(this, "_ZN7S7682C53v27Ev");}
void  S7682C5 ::v28(){vfunc_called(this, "_ZN7S7682C53v28Ev");}
S7682C5 ::~S7682C5(){ note_dtor("S7682C5", this);} // tgen
S7682C5 ::S7682C5(){ note_ctor("S7682C5", this);} // tgen

static void Test_S7682C5()
{
  extern Class_Descriptor cd_S7682C5;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(27,66)];
    init_test(&cd_S7682C5, buf);
    S7682C5 *dp, &lv = *(dp=new (buf) S7682C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(416,260), "sizeof(S7682C5)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7682C5)");
    /*is_ambiguous_... S7682C2::S7682C3 */ AMB_check_base_class_offset(lv, (S7682C3*)(S7682C2*), ABISELECT(256,152), "S7682C5");
    check_base_class_offset(lv, (S7682C3*)(S7682C4*)(S7682C2*), ABISELECT(32,16), "S7682C5");
    check_base_class_offset(lv, (S7682C4*)(S7682C2*), ABISELECT(32,16), "S7682C5");
    check_base_class_offset(lv, (S7682C2*)(S7682C6*), ABISELECT(32,16), "S7682C5");
    check_base_class_offset(lv, (S7682C6*), 0, "S7682C5");
    check_field_offset(lv, s7682c5f0, ABISELECT(16,4), "S7682C5.s7682c5f0");
    test_class_info(&lv, &cd_S7682C5);
    dp->~S7682C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7682C5(Test_S7682C5, "S7682C5", ABISELECT(416,260));

#else // __cplusplus

extern void _ZN7S7682C5C1Ev();
extern void _ZN7S7682C5D1Ev();
Name_Map name_map_S7682C5[] = {
  NSPAIR(_ZN7S7682C5C1Ev),
  NSPAIR(_ZN7S7682C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7682C3;
extern VTBL_ENTRY _ZTI7S7682C3[];
extern  VTBL_ENTRY _ZTV7S7682C3[];
extern Class_Descriptor cd_S7682C3;
extern VTBL_ENTRY _ZTI7S7682C3[];
extern  VTBL_ENTRY _ZTV7S7682C3[];
extern Class_Descriptor cd_S7682C4;
extern VTBL_ENTRY _ZTI7S7682C4[];
extern  VTBL_ENTRY _ZTV7S7682C4[];
extern Class_Descriptor cd_S7682C2;
extern VTBL_ENTRY _ZTI7S7682C2[];
extern  VTBL_ENTRY _ZTV7S7682C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7682C2[];
extern Class_Descriptor cd_S7682C6;
extern VTBL_ENTRY _ZTI7S7682C6[];
extern  VTBL_ENTRY _ZTV7S7682C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7682C6[];
static Base_Class bases_S7682C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7682C3,    ABISELECT(256,152), //bcp->offset
    41, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S7682C3,    ABISELECT(32,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S7682C4,    ABISELECT(32,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S7682C2,    ABISELECT(32,16), //bcp->offset
    16, //bcp->virtual_function_table_offset
    14, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S7682C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7682C5[];
extern void _ZN7S7682C5D1Ev();
extern void _ZN7S7682C5D0Ev();
extern void _ZN7S7682C63v19Ev();
extern void _ZN7S7682C63v20Ev();
extern void _ZN7S7682C63v21Ev();
extern void _ZN7S7682C63v22Ev();
extern void _ZN7S7682C53v23Ev();
extern void _ZN7S7682C53v24Ev();
extern void _ZN7S7682C53v25Ev();
extern void _ZN7S7682C53v26Ev();
extern void _ZN7S7682C53v27Ev();
extern void _ZN7S7682C53v28Ev();
extern void _ZN7S7682C32v8Ev();
extern void _ZN7S7682C32v9Ev();
extern void _ZN7S7682C33v10Ev();
extern void _ZN7S7682C33v11Ev();
extern void _ZN7S7682C43v12Ev();
extern void _ZN7S7682C43v13Ev();
extern void _ZN7S7682C43v14Ev();
extern void _ZN7S7682C23v15Ev();
extern void _ZN7S7682C23v16Ev();
extern void _ZN7S7682C23v17Ev();
extern void _ZN7S7682C23v18Ev();
extern void _ZN7S7682C32v8Ev();
extern void _ZN7S7682C32v9Ev();
extern void _ZN7S7682C33v10Ev();
extern void _ZN7S7682C33v11Ev();
static  VTBL_ENTRY vtc_S7682C5[] = {
  ABISELECT(256,152),
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI7S7682C5[0]),
  (VTBL_ENTRY)&_ZN7S7682C5D1Ev,
  (VTBL_ENTRY)&_ZN7S7682C5D0Ev,
  (VTBL_ENTRY)&_ZN7S7682C63v19Ev,
  (VTBL_ENTRY)&_ZN7S7682C63v20Ev,
  (VTBL_ENTRY)&_ZN7S7682C63v21Ev,
  (VTBL_ENTRY)&_ZN7S7682C63v22Ev,
  (VTBL_ENTRY)&_ZN7S7682C53v23Ev,
  (VTBL_ENTRY)&_ZN7S7682C53v24Ev,
  (VTBL_ENTRY)&_ZN7S7682C53v25Ev,
  (VTBL_ENTRY)&_ZN7S7682C53v26Ev,
  (VTBL_ENTRY)&_ZN7S7682C53v27Ev,
  (VTBL_ENTRY)&_ZN7S7682C53v28Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(224,136),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI7S7682C5[0]),
  (VTBL_ENTRY)&_ZN7S7682C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7682C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v15Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v16Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v17Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v18Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-256,-152),
  (VTBL_ENTRY)&(_ZTI7S7682C5[0]),
  (VTBL_ENTRY)&_ZN7S7682C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7682C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v11Ev,
};
extern VTBL_ENTRY _ZTV7S7682C5[];
extern void _ZN7S7682C6D1Ev();
extern void _ZN7S7682C6D0Ev();
extern void _ZN7S7682C63v19Ev();
extern void _ZN7S7682C63v20Ev();
extern void _ZN7S7682C63v21Ev();
extern void _ZN7S7682C63v22Ev();
static  VTBL_ENTRY _tg__ZTV7S7682C6__7S7682C5[] = {
  ABISELECT(256,152),
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI7S7682C6[0]),
  (VTBL_ENTRY)&_ZN7S7682C6D1Ev,
  (VTBL_ENTRY)&_ZN7S7682C6D0Ev,
  (VTBL_ENTRY)&_ZN7S7682C63v19Ev,
  (VTBL_ENTRY)&_ZN7S7682C63v20Ev,
  (VTBL_ENTRY)&_ZN7S7682C63v21Ev,
  (VTBL_ENTRY)&_ZN7S7682C63v22Ev,
};
extern void _ZN7S7682C32v8Ev();
extern void _ZN7S7682C32v9Ev();
extern void _ZN7S7682C33v10Ev();
extern void _ZN7S7682C33v11Ev();
extern void _ZN7S7682C43v12Ev();
extern void _ZN7S7682C43v13Ev();
extern void _ZN7S7682C43v14Ev();
extern void _ZN7S7682C23v15Ev();
extern void _ZN7S7682C23v16Ev();
extern void _ZN7S7682C23v17Ev();
extern void _ZN7S7682C23v18Ev();
static  VTBL_ENTRY _tg__ZTV7S7682C2__7S7682C6__7S7682C5[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(224,136),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI7S7682C6[0]),
  (VTBL_ENTRY)&_ZN7S7682C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7682C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v15Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v16Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v17Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v18Ev,
};
extern void _ZN7S7682C32v8Ev();
extern void _ZN7S7682C32v9Ev();
extern void _ZN7S7682C33v10Ev();
extern void _ZN7S7682C33v11Ev();
static  VTBL_ENTRY _tg__ZTV7S7682C3__7S7682C6__7S7682C5[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-256,-152),
  (VTBL_ENTRY)&(_ZTI7S7682C6[0]),
  (VTBL_ENTRY)&_ZN7S7682C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7682C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v11Ev,
};
extern void _ZN7S7682C32v8Ev();
extern void _ZN7S7682C32v9Ev();
extern void _ZN7S7682C33v10Ev();
extern void _ZN7S7682C33v11Ev();
extern void _ZN7S7682C43v12Ev();
extern void _ZN7S7682C43v13Ev();
extern void _ZN7S7682C43v14Ev();
extern void _ZN7S7682C23v15Ev();
extern void _ZN7S7682C23v16Ev();
extern void _ZN7S7682C23v17Ev();
extern void _ZN7S7682C23v18Ev();
static  VTBL_ENTRY _tg__ZTV7S7682C2__7S7682C5[] = {
  ABISELECT(224,136),
  0,
  (VTBL_ENTRY)&(_ZTI7S7682C2[0]),
  (VTBL_ENTRY)&_ZN7S7682C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7682C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v15Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v16Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v17Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v18Ev,
};
extern void _ZN7S7682C32v8Ev();
extern void _ZN7S7682C32v9Ev();
extern void _ZN7S7682C33v10Ev();
extern void _ZN7S7682C33v11Ev();
static  VTBL_ENTRY _tg__ZTV7S7682C3__7S7682C2__7S7682C5[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-224,-136),
  (VTBL_ENTRY)&(_ZTI7S7682C2[0]),
  (VTBL_ENTRY)&_ZN7S7682C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7682C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v11Ev,
};
static  VTT_ENTRY vtt_S7682C5[] = {
  {&(_ZTV7S7682C5[4]),  4,51},
  {&(_tg__ZTV7S7682C6__7S7682C5[4]),  4,10},
  {&(_tg__ZTV7S7682C2__7S7682C6__7S7682C5[14]),  14,25},
  {&(_tg__ZTV7S7682C3__7S7682C6__7S7682C5[6]),  6,10},
  {&(_ZTV7S7682C5[30]),  30,51},
  {&(_ZTV7S7682C5[47]),  47,51},
  {&(_tg__ZTV7S7682C2__7S7682C5[3]),  3,14},
  {&(_tg__ZTV7S7682C3__7S7682C2__7S7682C5[6]),  6,10},
};
extern VTBL_ENTRY _ZTI7S7682C5[];
extern  VTBL_ENTRY _ZTV7S7682C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7682C5[];
Class_Descriptor cd_S7682C5 = {  "S7682C5", // class name
  bases_S7682C5, 5,
  &(vtc_S7682C5[0]), // expected_vtbl_contents
  &(vtt_S7682C5[0]), // expected_vtt_contents
  ABISELECT(416,260), // object size
  NSPAIRA(_ZTI7S7682C5),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S7682C5),51, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7682C5),8, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7682C8_nt  {
  virtual void  v29(); // _ZN10S7682C8_nt3v29Ev
  virtual void  v30(); // _ZN10S7682C8_nt3v30Ev
  virtual void  v31(); // _ZN10S7682C8_nt3v31Ev
  virtual void  v32(); // _ZN10S7682C8_nt3v32Ev
  ~S7682C8_nt(); // tgen
  S7682C8_nt(); // tgen
};
//SIG(-1 S7682C8_nt) C1{ v1 v2 v3 v4}


void  S7682C8_nt ::v29(){vfunc_called(this, "_ZN10S7682C8_nt3v29Ev");}
void  S7682C8_nt ::v30(){vfunc_called(this, "_ZN10S7682C8_nt3v30Ev");}
void  S7682C8_nt ::v31(){vfunc_called(this, "_ZN10S7682C8_nt3v31Ev");}
void  S7682C8_nt ::v32(){vfunc_called(this, "_ZN10S7682C8_nt3v32Ev");}
S7682C8_nt ::~S7682C8_nt(){ note_dtor("S7682C8_nt", this);} // tgen
S7682C8_nt ::S7682C8_nt(){ note_ctor("S7682C8_nt", this);} // tgen

//skip512 S7682C8_nt

#else // __cplusplus

extern void _ZN10S7682C8_ntC1Ev();
extern void _ZN10S7682C8_ntD1Ev();
Name_Map name_map_S7682C8_nt[] = {
  NSPAIR(_ZN10S7682C8_ntC1Ev),
  NSPAIR(_ZN10S7682C8_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S7682C8_nt[];
extern void _ZN10S7682C8_nt3v29Ev();
extern void _ZN10S7682C8_nt3v30Ev();
extern void _ZN10S7682C8_nt3v31Ev();
extern void _ZN10S7682C8_nt3v32Ev();
static  VTBL_ENTRY vtc_S7682C8_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S7682C8_nt[0]),
  (VTBL_ENTRY)&_ZN10S7682C8_nt3v29Ev,
  (VTBL_ENTRY)&_ZN10S7682C8_nt3v30Ev,
  (VTBL_ENTRY)&_ZN10S7682C8_nt3v31Ev,
  (VTBL_ENTRY)&_ZN10S7682C8_nt3v32Ev,
};
extern VTBL_ENTRY _ZTI10S7682C8_nt[];
VTBL_ENTRY *P__ZTI10S7682C8_nt = _ZTI10S7682C8_nt; 
extern  VTBL_ENTRY _ZTV10S7682C8_nt[];
Class_Descriptor cd_S7682C8_nt = {  "S7682C8_nt", // class name
  0,0,//no base classes
  &(vtc_S7682C8_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI10S7682C8_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S7682C8_nt),6, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7682C9  {
  ::S7682C4 s7682c9f0[7];
  virtual void  v33(); // _ZN7S7682C93v33Ev
  virtual void  v34(); // _ZN7S7682C93v34Ev
  virtual void  v35(); // _ZN7S7682C93v35Ev
  virtual void  v36(); // _ZN7S7682C93v36Ev
  virtual void  v37(); // _ZN7S7682C93v37Ev
  virtual void  v38(); // _ZN7S7682C93v38Ev
  virtual void  v39(); // _ZN7S7682C93v39Ev
  virtual void  v40(); // _ZN7S7682C93v40Ev
  virtual void  v41(); // _ZN7S7682C93v41Ev
  ~S7682C9(); // tgen
  S7682C9(); // tgen
};
//SIG(-1 S7682C9) C1{ v1 v2 v3 v4 v5 v6 v7 v8 v9 FC2{ BC3{ v13 v14 v15 v16 Fs:13 Fp FD[8]} v10 v11 v12 Fp[6]}[7]}


void  S7682C9 ::v33(){vfunc_called(this, "_ZN7S7682C93v33Ev");}
void  S7682C9 ::v34(){vfunc_called(this, "_ZN7S7682C93v34Ev");}
void  S7682C9 ::v35(){vfunc_called(this, "_ZN7S7682C93v35Ev");}
void  S7682C9 ::v36(){vfunc_called(this, "_ZN7S7682C93v36Ev");}
void  S7682C9 ::v37(){vfunc_called(this, "_ZN7S7682C93v37Ev");}
void  S7682C9 ::v38(){vfunc_called(this, "_ZN7S7682C93v38Ev");}
void  S7682C9 ::v39(){vfunc_called(this, "_ZN7S7682C93v39Ev");}
void  S7682C9 ::v40(){vfunc_called(this, "_ZN7S7682C93v40Ev");}
void  S7682C9 ::v41(){vfunc_called(this, "_ZN7S7682C93v41Ev");}
S7682C9 ::~S7682C9(){ note_dtor("S7682C9", this);} // tgen
S7682C9 ::S7682C9(){ note_ctor("S7682C9", this);} // tgen

static void Test_S7682C9()
{
  extern Class_Descriptor cd_S7682C9;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(93,233)];
    init_test(&cd_S7682C9, buf);
    S7682C9 *dp, &lv = *(dp=new (buf) S7682C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1472,928), "sizeof(S7682C9)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7682C9)");
    check_field_offset(lv, s7682c9f0, ABISELECT(16,4), "S7682C9.s7682c9f0");
    test_class_info(&lv, &cd_S7682C9);
    dp->~S7682C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7682C9(Test_S7682C9, "S7682C9", ABISELECT(1472,928));

#else // __cplusplus

extern void _ZN7S7682C9C1Ev();
extern void _ZN7S7682C9D1Ev();
Name_Map name_map_S7682C9[] = {
  NSPAIR(_ZN7S7682C9C1Ev),
  NSPAIR(_ZN7S7682C9D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S7682C9[];
extern void _ZN7S7682C93v33Ev();
extern void _ZN7S7682C93v34Ev();
extern void _ZN7S7682C93v35Ev();
extern void _ZN7S7682C93v36Ev();
extern void _ZN7S7682C93v37Ev();
extern void _ZN7S7682C93v38Ev();
extern void _ZN7S7682C93v39Ev();
extern void _ZN7S7682C93v40Ev();
extern void _ZN7S7682C93v41Ev();
static  VTBL_ENTRY vtc_S7682C9[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7682C9[0]),
  (VTBL_ENTRY)&_ZN7S7682C93v33Ev,
  (VTBL_ENTRY)&_ZN7S7682C93v34Ev,
  (VTBL_ENTRY)&_ZN7S7682C93v35Ev,
  (VTBL_ENTRY)&_ZN7S7682C93v36Ev,
  (VTBL_ENTRY)&_ZN7S7682C93v37Ev,
  (VTBL_ENTRY)&_ZN7S7682C93v38Ev,
  (VTBL_ENTRY)&_ZN7S7682C93v39Ev,
  (VTBL_ENTRY)&_ZN7S7682C93v40Ev,
  (VTBL_ENTRY)&_ZN7S7682C93v41Ev,
};
extern VTBL_ENTRY _ZTI7S7682C9[];
extern  VTBL_ENTRY _ZTV7S7682C9[];
Class_Descriptor cd_S7682C9 = {  "S7682C9", // class name
  0,0,//no base classes
  &(vtc_S7682C9[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(1472,928), // object size
  NSPAIRA(_ZTI7S7682C9),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S7682C9),11, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7682C13  : virtual S7682C3 , virtual S7682C4 {
  void *s7682c13f0[2];
  virtual void  v42(); // _ZN8S7682C133v42Ev
  virtual void  v43(); // _ZN8S7682C133v43Ev
  virtual void  v44(); // _ZN8S7682C133v44Ev
  virtual void  v45(); // _ZN8S7682C133v45Ev
  virtual void  v46(); // _ZN8S7682C133v46Ev
  ~S7682C13(); // tgen
  S7682C13(); // tgen
};
//SIG(-1 S7682C13) C1{ VBC2{ v6 v7 v8 v9 Fs:13 Fp FD[8]} VBC3{ BC2 v10 v11 v12 Fp[6]} v1 v2 v3 v4 v5 Fp[2]}


void  S7682C13 ::v42(){vfunc_called(this, "_ZN8S7682C133v42Ev");}
void  S7682C13 ::v43(){vfunc_called(this, "_ZN8S7682C133v43Ev");}
void  S7682C13 ::v44(){vfunc_called(this, "_ZN8S7682C133v44Ev");}
void  S7682C13 ::v45(){vfunc_called(this, "_ZN8S7682C133v45Ev");}
void  S7682C13 ::v46(){vfunc_called(this, "_ZN8S7682C133v46Ev");}
S7682C13 ::~S7682C13(){ note_dtor("S7682C13", this);} // tgen
S7682C13 ::S7682C13(){ note_ctor("S7682C13", this);} // tgen

static void Test_S7682C13()
{
  extern Class_Descriptor cd_S7682C13;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(26,64)];
    init_test(&cd_S7682C13, buf);
    S7682C13 *dp, &lv = *(dp=new (buf) S7682C13());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(400,252), "sizeof(S7682C13)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7682C13)");
    /*is_ambiguous_... S7682C13::S7682C3 */ AMB_check_base_class_offset(lv, (S7682C3*), ABISELECT(32,12), "S7682C13");
    check_base_class_offset(lv, (S7682C3*)(S7682C4*), ABISELECT(192,120), "S7682C13");
    check_base_class_offset(lv, (S7682C4*), ABISELECT(192,120), "S7682C13");
    check_field_offset(lv, s7682c13f0, ABISELECT(8,4), "S7682C13.s7682c13f0");
    test_class_info(&lv, &cd_S7682C13);
    dp->~S7682C13();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7682C13(Test_S7682C13, "S7682C13", ABISELECT(400,252));

#else // __cplusplus

extern void _ZN8S7682C13C1Ev();
extern void _ZN8S7682C13D1Ev();
Name_Map name_map_S7682C13[] = {
  NSPAIR(_ZN8S7682C13C1Ev),
  NSPAIR(_ZN8S7682C13D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7682C3;
extern VTBL_ENTRY _ZTI7S7682C3[];
extern  VTBL_ENTRY _ZTV7S7682C3[];
extern Class_Descriptor cd_S7682C3;
extern VTBL_ENTRY _ZTI7S7682C3[];
extern  VTBL_ENTRY _ZTV7S7682C3[];
extern Class_Descriptor cd_S7682C4;
extern VTBL_ENTRY _ZTI7S7682C4[];
extern  VTBL_ENTRY _ZTV7S7682C4[];
static Base_Class bases_S7682C13[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7682C3,    ABISELECT(32,12), //bcp->offset
    9, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7682C3,    ABISELECT(192,120), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S7682C4,    ABISELECT(192,120), //bcp->offset
    19, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S7682C13[];
extern void _ZN8S7682C133v42Ev();
extern void _ZN8S7682C133v43Ev();
extern void _ZN8S7682C133v44Ev();
extern void _ZN8S7682C133v45Ev();
extern void _ZN8S7682C133v46Ev();
extern void _ZN7S7682C32v8Ev();
extern void _ZN7S7682C32v9Ev();
extern void _ZN7S7682C33v10Ev();
extern void _ZN7S7682C33v11Ev();
extern void _ZN7S7682C32v8Ev();
extern void _ZN7S7682C32v9Ev();
extern void _ZN7S7682C33v10Ev();
extern void _ZN7S7682C33v11Ev();
extern void _ZN7S7682C43v12Ev();
extern void _ZN7S7682C43v13Ev();
extern void _ZN7S7682C43v14Ev();
static  VTBL_ENTRY vtc_S7682C13[] = {
  ABISELECT(192,120),
  ABISELECT(32,12),
  0,
  (VTBL_ENTRY)&(_ZTI8S7682C13[0]),
  (VTBL_ENTRY)&_ZN8S7682C133v42Ev,
  (VTBL_ENTRY)&_ZN8S7682C133v43Ev,
  (VTBL_ENTRY)&_ZN8S7682C133v44Ev,
  (VTBL_ENTRY)&_ZN8S7682C133v45Ev,
  (VTBL_ENTRY)&_ZN8S7682C133v46Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-32,-12),
  (VTBL_ENTRY)&(_ZTI8S7682C13[0]),
  (VTBL_ENTRY)&_ZN7S7682C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7682C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v11Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-192,-120),
  (VTBL_ENTRY)&(_ZTI8S7682C13[0]),
  (VTBL_ENTRY)&_ZN7S7682C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7682C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v14Ev,
};
extern VTBL_ENTRY _ZTV8S7682C13[];
static  VTT_ENTRY vtt_S7682C13[] = {
  {&(_ZTV8S7682C13[4]),  4,35},
  {&(_ZTV8S7682C13[15]),  15,35},
  {&(_ZTV8S7682C13[28]),  28,35},
};
extern VTBL_ENTRY _ZTI8S7682C13[];
extern  VTBL_ENTRY _ZTV8S7682C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7682C13[];
Class_Descriptor cd_S7682C13 = {  "S7682C13", // class name
  bases_S7682C13, 3,
  &(vtc_S7682C13[0]), // expected_vtbl_contents
  &(vtt_S7682C13[0]), // expected_vtt_contents
  ABISELECT(400,252), // object size
  NSPAIRA(_ZTI8S7682C13),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S7682C13),35, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7682C13),3, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7682C12  : virtual S7682C13 , S7682C2 {
  __tsi64 s7682c12f0[5];
  ::S20956C14_nt s7682c12f1;
  long double s7682c12f2;
  virtual void  v47(); // _ZN8S7682C123v47Ev
  virtual void  v48(); // _ZN8S7682C123v48Ev
  virtual void  v49(); // _ZN8S7682C123v49Ev
  virtual void  v50(); // _ZN8S7682C123v50Ev
  ~S7682C12(); // tgen
  S7682C12(); // tgen
};
//SIG(-1 S7682C12) C1{ VBC2{ VBC3{ v5 v6 v7 v8 Fs:13 Fp FD[8]} VBC4{ BC3 v9 v10 v11 Fp[6]} v12 v13 v14 v15 v16 Fp[2]} BC5{ VBC3 BC4 v17 v18 v19 v20 Fp} v1 v2 v3 v4 FL[5] FC6{} FD}


void  S7682C12 ::v47(){vfunc_called(this, "_ZN8S7682C123v47Ev");}
void  S7682C12 ::v48(){vfunc_called(this, "_ZN8S7682C123v48Ev");}
void  S7682C12 ::v49(){vfunc_called(this, "_ZN8S7682C123v49Ev");}
void  S7682C12 ::v50(){vfunc_called(this, "_ZN8S7682C123v50Ev");}
S7682C12 ::~S7682C12(){ note_dtor("S7682C12", this);} // tgen
S7682C12 ::S7682C12(){ note_ctor("S7682C12", this);} // tgen

static void Test_S7682C12()
{
  extern Class_Descriptor cd_S7682C12;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(44,112)];
    init_test(&cd_S7682C12, buf);
    S7682C12 *dp, &lv = *(dp=new (buf) S7682C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(688,444), "sizeof(S7682C12)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7682C12)");
    /*is_ambiguous_... S7682C13::S7682C3 */ AMB_check_base_class_offset(lv, (S7682C3*)(S7682C13*), ABISELECT(320,204), "S7682C12");
    /*is_ambiguous_... S7682C2::S7682C3 */ AMB_check_base_class_offset(lv, (S7682C3*)(S7682C2*), ABISELECT(320,204), "S7682C12");
    /*is_ambiguous_... S7682C12::S7682C4 */ AMB_check_base_class_offset(lv, (S7682C3*)(S7682C4*), ABISELECT(480,312), "S7682C12");
    check_base_class_offset(lv, (S7682C4*)(S7682C13*), ABISELECT(480,312), "S7682C12");
    check_base_class_offset(lv, (S7682C13*), ABISELECT(288,192), "S7682C12");
    check_base_class_offset(lv, (S7682C3*)(S7682C4*)(S7682C2*), 0, "S7682C12");
    check_base_class_offset(lv, (S7682C4*)(S7682C2*), 0, "S7682C12");
    check_base_class_offset(lv, (S7682C2*), 0, "S7682C12");
    check_field_offset(lv, s7682c12f0, ABISELECT(216,136), "S7682C12.s7682c12f0");
    check_field_offset(lv, s7682c12f1, ABISELECT(256,176), "S7682C12.s7682c12f1");
    check_field_offset(lv, s7682c12f2, ABISELECT(272,180), "S7682C12.s7682c12f2");
    test_class_info(&lv, &cd_S7682C12);
    dp->~S7682C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7682C12(Test_S7682C12, "S7682C12", ABISELECT(688,444));

#else // __cplusplus

extern void _ZN8S7682C12C1Ev();
extern void _ZN8S7682C12D1Ev();
Name_Map name_map_S7682C12[] = {
  NSPAIR(_ZN8S7682C12C1Ev),
  NSPAIR(_ZN8S7682C12D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7682C3;
extern VTBL_ENTRY _ZTI7S7682C3[];
extern  VTBL_ENTRY _ZTV7S7682C3[];
extern Class_Descriptor cd_S7682C3;
extern VTBL_ENTRY _ZTI7S7682C3[];
extern  VTBL_ENTRY _ZTV7S7682C3[];
extern Class_Descriptor cd_S7682C4;
extern VTBL_ENTRY _ZTI7S7682C4[];
extern  VTBL_ENTRY _ZTV7S7682C4[];
extern Class_Descriptor cd_S7682C13;
extern VTBL_ENTRY _ZTI8S7682C13[];
extern  VTBL_ENTRY _ZTV8S7682C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7682C13[];
extern Class_Descriptor cd_S7682C3;
extern VTBL_ENTRY _ZTI7S7682C3[];
extern  VTBL_ENTRY _ZTV7S7682C3[];
extern Class_Descriptor cd_S7682C4;
extern VTBL_ENTRY _ZTI7S7682C4[];
extern  VTBL_ENTRY _ZTV7S7682C4[];
extern Class_Descriptor cd_S7682C2;
extern VTBL_ENTRY _ZTI7S7682C2[];
extern  VTBL_ENTRY _ZTV7S7682C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7682C2[];
static Base_Class bases_S7682C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7682C3,    ABISELECT(320,204), //bcp->offset
    34, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S7682C3,    ABISELECT(480,312), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S7682C4,    ABISELECT(480,312), //bcp->offset
    44, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S7682C13,    ABISELECT(288,192), //bcp->offset
    20, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7682C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S7682C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S7682C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S7682C12[];
extern void _ZN7S7682C32v8Ev();
extern void _ZN7S7682C32v9Ev();
extern void _ZN7S7682C33v10Ev();
extern void _ZN7S7682C33v11Ev();
extern void _ZN7S7682C43v12Ev();
extern void _ZN7S7682C43v13Ev();
extern void _ZN7S7682C43v14Ev();
extern void _ZN7S7682C23v15Ev();
extern void _ZN7S7682C23v16Ev();
extern void _ZN7S7682C23v17Ev();
extern void _ZN7S7682C23v18Ev();
extern void _ZN8S7682C123v47Ev();
extern void _ZN8S7682C123v48Ev();
extern void _ZN8S7682C123v49Ev();
extern void _ZN8S7682C123v50Ev();
extern void _ZN8S7682C133v42Ev();
extern void _ZN8S7682C133v43Ev();
extern void _ZN8S7682C133v44Ev();
extern void _ZN8S7682C133v45Ev();
extern void _ZN8S7682C133v46Ev();
extern void _ZN7S7682C32v8Ev();
extern void _ZN7S7682C32v9Ev();
extern void _ZN7S7682C33v10Ev();
extern void _ZN7S7682C33v11Ev();
extern void _ZN7S7682C32v8Ev();
extern void _ZN7S7682C32v9Ev();
extern void _ZN7S7682C33v10Ev();
extern void _ZN7S7682C33v11Ev();
extern void _ZN7S7682C43v12Ev();
extern void _ZN7S7682C43v13Ev();
extern void _ZN7S7682C43v14Ev();
static  VTBL_ENTRY vtc_S7682C12[] = {
  ABISELECT(480,312),
  ABISELECT(288,192),
  ABISELECT(320,204),
  0,
  (VTBL_ENTRY)&(_ZTI8S7682C12[0]),
  (VTBL_ENTRY)&_ZN7S7682C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7682C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v15Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v16Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v17Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v18Ev,
  (VTBL_ENTRY)&_ZN8S7682C123v47Ev,
  (VTBL_ENTRY)&_ZN8S7682C123v48Ev,
  (VTBL_ENTRY)&_ZN8S7682C123v49Ev,
  (VTBL_ENTRY)&_ZN8S7682C123v50Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(192,120),
  ABISELECT(32,12),
  ABISELECT(-288,-192),
  (VTBL_ENTRY)&(_ZTI8S7682C12[0]),
  (VTBL_ENTRY)&_ZN8S7682C133v42Ev,
  (VTBL_ENTRY)&_ZN8S7682C133v43Ev,
  (VTBL_ENTRY)&_ZN8S7682C133v44Ev,
  (VTBL_ENTRY)&_ZN8S7682C133v45Ev,
  (VTBL_ENTRY)&_ZN8S7682C133v46Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-320,-204),
  (VTBL_ENTRY)&(_ZTI8S7682C12[0]),
  (VTBL_ENTRY)&_ZN7S7682C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7682C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v11Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-480,-312),
  (VTBL_ENTRY)&(_ZTI8S7682C12[0]),
  (VTBL_ENTRY)&_ZN7S7682C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7682C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v14Ev,
};
extern VTBL_ENTRY _ZTV8S7682C12[];
extern void _ZN7S7682C32v8Ev();
extern void _ZN7S7682C32v9Ev();
extern void _ZN7S7682C33v10Ev();
extern void _ZN7S7682C33v11Ev();
extern void _ZN7S7682C43v12Ev();
extern void _ZN7S7682C43v13Ev();
extern void _ZN7S7682C43v14Ev();
extern void _ZN7S7682C23v15Ev();
extern void _ZN7S7682C23v16Ev();
extern void _ZN7S7682C23v17Ev();
extern void _ZN7S7682C23v18Ev();
static  VTBL_ENTRY _tg__ZTV7S7682C2__8S7682C12[] = {
  ABISELECT(320,204),
  0,
  (VTBL_ENTRY)&(_ZTI7S7682C2[0]),
  (VTBL_ENTRY)&_ZN7S7682C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7682C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v15Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v16Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v17Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v18Ev,
};
extern void _ZN7S7682C32v8Ev();
extern void _ZN7S7682C32v9Ev();
extern void _ZN7S7682C33v10Ev();
extern void _ZN7S7682C33v11Ev();
static  VTBL_ENTRY _tg__ZTV7S7682C3__7S7682C2__8S7682C12[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-320,-204),
  (VTBL_ENTRY)&(_ZTI7S7682C2[0]),
  (VTBL_ENTRY)&_ZN7S7682C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7682C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v11Ev,
};
extern void _ZN8S7682C133v42Ev();
extern void _ZN8S7682C133v43Ev();
extern void _ZN8S7682C133v44Ev();
extern void _ZN8S7682C133v45Ev();
extern void _ZN8S7682C133v46Ev();
static  VTBL_ENTRY _tg__ZTV8S7682C13__8S7682C12[] = {
  ABISELECT(192,120),
  ABISELECT(32,12),
  0,
  (VTBL_ENTRY)&(_ZTI8S7682C13[0]),
  (VTBL_ENTRY)&_ZN8S7682C133v42Ev,
  (VTBL_ENTRY)&_ZN8S7682C133v43Ev,
  (VTBL_ENTRY)&_ZN8S7682C133v44Ev,
  (VTBL_ENTRY)&_ZN8S7682C133v45Ev,
  (VTBL_ENTRY)&_ZN8S7682C133v46Ev,
};
extern void _ZN7S7682C32v8Ev();
extern void _ZN7S7682C32v9Ev();
extern void _ZN7S7682C33v10Ev();
extern void _ZN7S7682C33v11Ev();
static  VTBL_ENTRY _tg__ZTV7S7682C3__8S7682C13__8S7682C12[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-32,-12),
  (VTBL_ENTRY)&(_ZTI8S7682C13[0]),
  (VTBL_ENTRY)&_ZN7S7682C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7682C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v11Ev,
};
extern void _ZN7S7682C32v8Ev();
extern void _ZN7S7682C32v9Ev();
extern void _ZN7S7682C33v10Ev();
extern void _ZN7S7682C33v11Ev();
extern void _ZN7S7682C43v12Ev();
extern void _ZN7S7682C43v13Ev();
extern void _ZN7S7682C43v14Ev();
static  VTBL_ENTRY _tg__ZTV7S7682C4__8S7682C13__8S7682C12[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-192,-120),
  (VTBL_ENTRY)&(_ZTI8S7682C13[0]),
  (VTBL_ENTRY)&_ZN7S7682C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7682C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v14Ev,
};
static  VTT_ENTRY vtt_S7682C12[] = {
  {&(_ZTV8S7682C12[5]),  5,60},
  {&(_tg__ZTV7S7682C2__8S7682C12[3]),  3,14},
  {&(_tg__ZTV7S7682C3__7S7682C2__8S7682C12[6]),  6,10},
  {&(_ZTV8S7682C12[29]),  29,60},
  {&(_ZTV8S7682C12[40]),  40,60},
  {&(_ZTV8S7682C12[53]),  53,60},
  {&(_tg__ZTV8S7682C13__8S7682C12[4]),  4,9},
  {&(_tg__ZTV7S7682C3__8S7682C13__8S7682C12[6]),  6,10},
  {&(_tg__ZTV7S7682C4__8S7682C13__8S7682C12[9]),  9,16},
};
extern VTBL_ENTRY _ZTI8S7682C12[];
extern  VTBL_ENTRY _ZTV8S7682C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7682C12[];
Class_Descriptor cd_S7682C12 = {  "S7682C12", // class name
  bases_S7682C12, 7,
  &(vtc_S7682C12[0]), // expected_vtbl_contents
  &(vtt_S7682C12[0]), // expected_vtt_contents
  ABISELECT(688,444), // object size
  NSPAIRA(_ZTI8S7682C12),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S7682C12),60, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7682C12),9, //virtual table table var
  7, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7682C11  : virtual S7682C12 {
  virtual  ~S7682C11(); // _ZN8S7682C11D2Ev
  virtual void  v51(); // _ZN8S7682C113v51Ev
  virtual void  v52(); // _ZN8S7682C113v52Ev
  S7682C11(); // tgen
};
//SIG(-1 S7682C11) C1{ VBC2{ VBC3{ VBC4{ v3 v4 v5 v6 Fs:13 Fp FD[8]} VBC5{ BC4 v7 v8 v9 Fp[6]} v10 v11 v12 v13 v14 Fp[2]} BC6{ VBC4 BC5 v15 v16 v17 v18 Fp} v19 v20 v21 v22 FL[5] FC7{} FD} vd v1 v2}


 S7682C11 ::~S7682C11(){ note_dtor("S7682C11", this);}
void  S7682C11 ::v51(){vfunc_called(this, "_ZN8S7682C113v51Ev");}
void  S7682C11 ::v52(){vfunc_called(this, "_ZN8S7682C113v52Ev");}
S7682C11 ::S7682C11(){ note_ctor("S7682C11", this);} // tgen

static void Test_S7682C11()
{
  extern Class_Descriptor cd_S7682C11;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(45,113)];
    init_test(&cd_S7682C11, buf);
    S7682C11 *dp, &lv = *(dp=new (buf) S7682C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(704,448), "sizeof(S7682C11)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7682C11)");
    /*is_ambiguous_... S7682C13::S7682C3 */ AMB_check_base_class_offset(lv, (S7682C3*)(S7682C13*), ABISELECT(336,208), "S7682C11");
    /*is_ambiguous_... S7682C2::S7682C3 */ AMB_check_base_class_offset(lv, (S7682C3*)(S7682C2*)(S7682C12*), ABISELECT(336,208), "S7682C11");
    /*is_ambiguous_... S7682C11::S7682C4 */ AMB_check_base_class_offset(lv, (S7682C3*)(S7682C4*), ABISELECT(496,316), "S7682C11");
    check_base_class_offset(lv, (S7682C4*)(S7682C13*), ABISELECT(496,316), "S7682C11");
    check_base_class_offset(lv, (S7682C13*)(S7682C12*), ABISELECT(304,196), "S7682C11");
    check_base_class_offset(lv, (S7682C3*)(S7682C4*)(S7682C2*)(S7682C12*), ABISELECT(16,4), "S7682C11");
    check_base_class_offset(lv, (S7682C4*)(S7682C2*)(S7682C12*), ABISELECT(16,4), "S7682C11");
    check_base_class_offset(lv, (S7682C2*)(S7682C12*), ABISELECT(16,4), "S7682C11");
    check_base_class_offset(lv, (S7682C12*), ABISELECT(16,4), "S7682C11");
    test_class_info(&lv, &cd_S7682C11);
    dp->~S7682C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7682C11(Test_S7682C11, "S7682C11", ABISELECT(704,448));

#else // __cplusplus

extern void _ZN8S7682C11C1Ev();
extern void _ZN8S7682C11D2Ev();
Name_Map name_map_S7682C11[] = {
  NSPAIR(_ZN8S7682C11C1Ev),
  NSPAIR(_ZN8S7682C11D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7682C3;
extern VTBL_ENTRY _ZTI7S7682C3[];
extern  VTBL_ENTRY _ZTV7S7682C3[];
extern Class_Descriptor cd_S7682C3;
extern VTBL_ENTRY _ZTI7S7682C3[];
extern  VTBL_ENTRY _ZTV7S7682C3[];
extern Class_Descriptor cd_S7682C4;
extern VTBL_ENTRY _ZTI7S7682C4[];
extern  VTBL_ENTRY _ZTV7S7682C4[];
extern Class_Descriptor cd_S7682C13;
extern VTBL_ENTRY _ZTI8S7682C13[];
extern  VTBL_ENTRY _ZTV8S7682C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7682C13[];
extern Class_Descriptor cd_S7682C3;
extern VTBL_ENTRY _ZTI7S7682C3[];
extern  VTBL_ENTRY _ZTV7S7682C3[];
extern Class_Descriptor cd_S7682C4;
extern VTBL_ENTRY _ZTI7S7682C4[];
extern  VTBL_ENTRY _ZTV7S7682C4[];
extern Class_Descriptor cd_S7682C2;
extern VTBL_ENTRY _ZTI7S7682C2[];
extern  VTBL_ENTRY _ZTV7S7682C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7682C2[];
extern Class_Descriptor cd_S7682C12;
extern VTBL_ENTRY _ZTI8S7682C12[];
extern  VTBL_ENTRY _ZTV8S7682C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7682C12[];
static Base_Class bases_S7682C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7682C3,    ABISELECT(336,208), //bcp->offset
    59, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S7682C3,    ABISELECT(496,316), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S7682C4,    ABISELECT(496,316), //bcp->offset
    69, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S7682C13,    ABISELECT(304,196), //bcp->offset
    45, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S7682C3,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S7682C4,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S7682C2,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S7682C12,    ABISELECT(16,4), //bcp->offset
    10, //bcp->virtual_function_table_offset
    20, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S7682C11[];
extern void _ZN8S7682C11D1Ev();
extern void _ZN8S7682C11D0Ev();
extern void _ZN8S7682C113v51Ev();
extern void _ZN8S7682C113v52Ev();
extern void _ZN7S7682C32v8Ev();
extern void _ZN7S7682C32v9Ev();
extern void _ZN7S7682C33v10Ev();
extern void _ZN7S7682C33v11Ev();
extern void _ZN7S7682C43v12Ev();
extern void _ZN7S7682C43v13Ev();
extern void _ZN7S7682C43v14Ev();
extern void _ZN7S7682C23v15Ev();
extern void _ZN7S7682C23v16Ev();
extern void _ZN7S7682C23v17Ev();
extern void _ZN7S7682C23v18Ev();
extern void _ZN8S7682C123v47Ev();
extern void _ZN8S7682C123v48Ev();
extern void _ZN8S7682C123v49Ev();
extern void _ZN8S7682C123v50Ev();
extern void _ZN8S7682C133v42Ev();
extern void _ZN8S7682C133v43Ev();
extern void _ZN8S7682C133v44Ev();
extern void _ZN8S7682C133v45Ev();
extern void _ZN8S7682C133v46Ev();
extern void _ZN7S7682C32v8Ev();
extern void _ZN7S7682C32v9Ev();
extern void _ZN7S7682C33v10Ev();
extern void _ZN7S7682C33v11Ev();
extern void _ZN7S7682C32v8Ev();
extern void _ZN7S7682C32v9Ev();
extern void _ZN7S7682C33v10Ev();
extern void _ZN7S7682C33v11Ev();
extern void _ZN7S7682C43v12Ev();
extern void _ZN7S7682C43v13Ev();
extern void _ZN7S7682C43v14Ev();
static  VTBL_ENTRY vtc_S7682C11[] = {
  ABISELECT(496,316),
  ABISELECT(336,208),
  ABISELECT(304,196),
  ABISELECT(16,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S7682C11[0]),
  (VTBL_ENTRY)&_ZN8S7682C11D1Ev,
  (VTBL_ENTRY)&_ZN8S7682C11D0Ev,
  (VTBL_ENTRY)&_ZN8S7682C113v51Ev,
  (VTBL_ENTRY)&_ZN8S7682C113v52Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(480,312),
  ABISELECT(288,192),
  ABISELECT(320,204),
  ABISELECT(-16,-4),
  (VTBL_ENTRY)&(_ZTI8S7682C11[0]),
  (VTBL_ENTRY)&_ZN7S7682C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7682C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v15Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v16Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v17Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v18Ev,
  (VTBL_ENTRY)&_ZN8S7682C123v47Ev,
  (VTBL_ENTRY)&_ZN8S7682C123v48Ev,
  (VTBL_ENTRY)&_ZN8S7682C123v49Ev,
  (VTBL_ENTRY)&_ZN8S7682C123v50Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(192,120),
  ABISELECT(32,12),
  ABISELECT(-304,-196),
  (VTBL_ENTRY)&(_ZTI8S7682C11[0]),
  (VTBL_ENTRY)&_ZN8S7682C133v42Ev,
  (VTBL_ENTRY)&_ZN8S7682C133v43Ev,
  (VTBL_ENTRY)&_ZN8S7682C133v44Ev,
  (VTBL_ENTRY)&_ZN8S7682C133v45Ev,
  (VTBL_ENTRY)&_ZN8S7682C133v46Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-336,-208),
  (VTBL_ENTRY)&(_ZTI8S7682C11[0]),
  (VTBL_ENTRY)&_ZN7S7682C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7682C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v11Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-496,-316),
  (VTBL_ENTRY)&(_ZTI8S7682C11[0]),
  (VTBL_ENTRY)&_ZN7S7682C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7682C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v14Ev,
};
extern VTBL_ENTRY _ZTV8S7682C11[];
extern void _ZN7S7682C32v8Ev();
extern void _ZN7S7682C32v9Ev();
extern void _ZN7S7682C33v10Ev();
extern void _ZN7S7682C33v11Ev();
extern void _ZN7S7682C43v12Ev();
extern void _ZN7S7682C43v13Ev();
extern void _ZN7S7682C43v14Ev();
extern void _ZN7S7682C23v15Ev();
extern void _ZN7S7682C23v16Ev();
extern void _ZN7S7682C23v17Ev();
extern void _ZN7S7682C23v18Ev();
extern void _ZN8S7682C123v47Ev();
extern void _ZN8S7682C123v48Ev();
extern void _ZN8S7682C123v49Ev();
extern void _ZN8S7682C123v50Ev();
static  VTBL_ENTRY _tg__ZTV8S7682C12__8S7682C11[] = {
  ABISELECT(480,312),
  ABISELECT(288,192),
  ABISELECT(320,204),
  0,
  (VTBL_ENTRY)&(_ZTI8S7682C12[0]),
  (VTBL_ENTRY)&_ZN7S7682C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7682C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v15Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v16Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v17Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v18Ev,
  (VTBL_ENTRY)&_ZN8S7682C123v47Ev,
  (VTBL_ENTRY)&_ZN8S7682C123v48Ev,
  (VTBL_ENTRY)&_ZN8S7682C123v49Ev,
  (VTBL_ENTRY)&_ZN8S7682C123v50Ev,
};
extern void _ZN7S7682C32v8Ev();
extern void _ZN7S7682C32v9Ev();
extern void _ZN7S7682C33v10Ev();
extern void _ZN7S7682C33v11Ev();
extern void _ZN7S7682C43v12Ev();
extern void _ZN7S7682C43v13Ev();
extern void _ZN7S7682C43v14Ev();
extern void _ZN7S7682C23v15Ev();
extern void _ZN7S7682C23v16Ev();
extern void _ZN7S7682C23v17Ev();
extern void _ZN7S7682C23v18Ev();
static  VTBL_ENTRY _tg__ZTV7S7682C28S7682C12__8S7682C11[] = {
  ABISELECT(320,204),
  0,
  (VTBL_ENTRY)&(_ZTI7S7682C2[0]),
  (VTBL_ENTRY)&_ZN7S7682C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7682C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v15Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v16Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v17Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v18Ev,
};
extern void _ZN7S7682C32v8Ev();
extern void _ZN7S7682C32v9Ev();
extern void _ZN7S7682C33v10Ev();
extern void _ZN7S7682C33v11Ev();
static  VTBL_ENTRY _tg__ZTV7S7682C3__7S7682C28S7682C12__8S7682C11[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-320,-204),
  (VTBL_ENTRY)&(_ZTI7S7682C2[0]),
  (VTBL_ENTRY)&_ZN7S7682C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7682C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v11Ev,
};
extern void _ZN8S7682C133v42Ev();
extern void _ZN8S7682C133v43Ev();
extern void _ZN8S7682C133v44Ev();
extern void _ZN8S7682C133v45Ev();
extern void _ZN8S7682C133v46Ev();
static  VTBL_ENTRY _tg__ZTV8S7682C13__8S7682C12__8S7682C11[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(192,120),
  ABISELECT(32,12),
  ABISELECT(-288,-192),
  (VTBL_ENTRY)&(_ZTI8S7682C12[0]),
  (VTBL_ENTRY)&_ZN8S7682C133v42Ev,
  (VTBL_ENTRY)&_ZN8S7682C133v43Ev,
  (VTBL_ENTRY)&_ZN8S7682C133v44Ev,
  (VTBL_ENTRY)&_ZN8S7682C133v45Ev,
  (VTBL_ENTRY)&_ZN8S7682C133v46Ev,
};
extern void _ZN7S7682C32v8Ev();
extern void _ZN7S7682C32v9Ev();
extern void _ZN7S7682C33v10Ev();
extern void _ZN7S7682C33v11Ev();
static  VTBL_ENTRY _tg__ZTV7S7682C3__8S7682C12__8S7682C11[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-320,-204),
  (VTBL_ENTRY)&(_ZTI8S7682C12[0]),
  (VTBL_ENTRY)&_ZN7S7682C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7682C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v11Ev,
};
extern void _ZN7S7682C32v8Ev();
extern void _ZN7S7682C32v9Ev();
extern void _ZN7S7682C33v10Ev();
extern void _ZN7S7682C33v11Ev();
extern void _ZN7S7682C43v12Ev();
extern void _ZN7S7682C43v13Ev();
extern void _ZN7S7682C43v14Ev();
static  VTBL_ENTRY _tg__ZTV7S7682C4__8S7682C12__8S7682C11[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-480,-312),
  (VTBL_ENTRY)&(_ZTI8S7682C12[0]),
  (VTBL_ENTRY)&_ZN7S7682C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7682C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v14Ev,
};
extern void _ZN8S7682C133v42Ev();
extern void _ZN8S7682C133v43Ev();
extern void _ZN8S7682C133v44Ev();
extern void _ZN8S7682C133v45Ev();
extern void _ZN8S7682C133v46Ev();
static  VTBL_ENTRY _tg__ZTV8S7682C13__8S7682C11[] = {
  ABISELECT(192,120),
  ABISELECT(32,12),
  0,
  (VTBL_ENTRY)&(_ZTI8S7682C13[0]),
  (VTBL_ENTRY)&_ZN8S7682C133v42Ev,
  (VTBL_ENTRY)&_ZN8S7682C133v43Ev,
  (VTBL_ENTRY)&_ZN8S7682C133v44Ev,
  (VTBL_ENTRY)&_ZN8S7682C133v45Ev,
  (VTBL_ENTRY)&_ZN8S7682C133v46Ev,
};
extern void _ZN7S7682C32v8Ev();
extern void _ZN7S7682C32v9Ev();
extern void _ZN7S7682C33v10Ev();
extern void _ZN7S7682C33v11Ev();
static  VTBL_ENTRY _tg__ZTV7S7682C3__8S7682C13__8S7682C11[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-32,-12),
  (VTBL_ENTRY)&(_ZTI8S7682C13[0]),
  (VTBL_ENTRY)&_ZN7S7682C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7682C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v11Ev,
};
extern void _ZN7S7682C32v8Ev();
extern void _ZN7S7682C32v9Ev();
extern void _ZN7S7682C33v10Ev();
extern void _ZN7S7682C33v11Ev();
extern void _ZN7S7682C43v12Ev();
extern void _ZN7S7682C43v13Ev();
extern void _ZN7S7682C43v14Ev();
static  VTBL_ENTRY _tg__ZTV7S7682C4__8S7682C13__8S7682C11[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-192,-120),
  (VTBL_ENTRY)&(_ZTI8S7682C13[0]),
  (VTBL_ENTRY)&_ZN7S7682C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7682C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v14Ev,
};
static  VTT_ENTRY vtt_S7682C11[] = {
  {&(_ZTV8S7682C11[6]),  6,85},
  {&(_ZTV8S7682C11[30]),  30,85},
  {&(_ZTV8S7682C11[54]),  54,85},
  {&(_ZTV8S7682C11[65]),  65,85},
  {&(_ZTV8S7682C11[78]),  78,85},
  {&(_tg__ZTV8S7682C12__8S7682C11[5]),  5,20},
  {&(_tg__ZTV7S7682C28S7682C12__8S7682C11[3]),  3,14},
  {&(_tg__ZTV7S7682C3__7S7682C28S7682C12__8S7682C11[6]),  6,10},
  {&(_tg__ZTV8S7682C13__8S7682C12__8S7682C11[9]),  9,14},
  {&(_tg__ZTV7S7682C3__8S7682C12__8S7682C11[6]),  6,10},
  {&(_tg__ZTV7S7682C4__8S7682C12__8S7682C11[9]),  9,16},
  {&(_tg__ZTV8S7682C13__8S7682C11[4]),  4,9},
  {&(_tg__ZTV7S7682C3__8S7682C13__8S7682C11[6]),  6,10},
  {&(_tg__ZTV7S7682C4__8S7682C13__8S7682C11[9]),  9,16},
};
extern VTBL_ENTRY _ZTI8S7682C11[];
extern  VTBL_ENTRY _ZTV8S7682C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7682C11[];
Class_Descriptor cd_S7682C11 = {  "S7682C11", // class name
  bases_S7682C11, 8,
  &(vtc_S7682C11[0]), // expected_vtbl_contents
  &(vtt_S7682C11[0]), // expected_vtt_contents
  ABISELECT(704,448), // object size
  NSPAIRA(_ZTI8S7682C11),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S7682C11),85, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7682C11),14, //virtual table table var
  8, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7682C15  : virtual S7682C3 , virtual S7682C13 , virtual S7682C9 , S7682C4 {
  int s7682c15f0;
  virtual  ~S7682C15(); // _ZN8S7682C15D2Ev
  virtual void  v53(); // _ZN8S7682C153v53Ev
  virtual void  v54(); // _ZN8S7682C153v54Ev
  virtual void  v55(); // _ZN8S7682C153v55Ev
  virtual void  v56(); // _ZN8S7682C153v56Ev
  S7682C15(); // tgen
};
//SIG(-1 S7682C15) C1{ VBC2{ v5 v6 v7 v8 Fs:13 Fp FD[8]} VBC3{ VBC2 VBC4{ BC2 v9 v10 v11 Fp[6]} v12 v13 v14 v15 v16 Fp[2]} VBC5{ v17 v18 v19 v20 v21 v22 v23 v24 v25 FC4[7]} BC4 vd v1 v2 v3 v4 Fi}


 S7682C15 ::~S7682C15(){ note_dtor("S7682C15", this);}
void  S7682C15 ::v53(){vfunc_called(this, "_ZN8S7682C153v53Ev");}
void  S7682C15 ::v54(){vfunc_called(this, "_ZN8S7682C153v54Ev");}
void  S7682C15 ::v55(){vfunc_called(this, "_ZN8S7682C153v55Ev");}
void  S7682C15 ::v56(){vfunc_called(this, "_ZN8S7682C153v56Ev");}
S7682C15 ::S7682C15(){ note_ctor("S7682C15", this);} // tgen

static void Test_S7682C15()
{
  extern Class_Descriptor cd_S7682C15;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(132,330)];
    init_test(&cd_S7682C15, buf);
    S7682C15 *dp, &lv = *(dp=new (buf) S7682C15());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(2096,1316), "sizeof(S7682C15)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7682C15)");
    /*is_ambiguous_... S7682C15::S7682C3 */ AMB_check_base_class_offset(lv, (S7682C3*), ABISELECT(224,136), "S7682C15");
    /*is_ambiguous_... S7682C13::S7682C3 */ AMB_check_base_class_offset(lv, (S7682C3*)(S7682C13*), ABISELECT(224,136), "S7682C15");
    /*is_ambiguous_... S7682C15::S7682C4 */ AMB_check_base_class_offset(lv, (S7682C3*)(S7682C4*), ABISELECT(416,256), "S7682C15");
    check_base_class_offset(lv, (S7682C4*)(S7682C13*), ABISELECT(416,256), "S7682C15");
    check_base_class_offset(lv, (S7682C13*), ABISELECT(384,244), "S7682C15");
    check_base_class_offset(lv, (S7682C9*), ABISELECT(624,388), "S7682C15");
    /*is_ambiguous_... S7682C15::S7682C4 */ AMB_check_base_class_offset(lv, (S7682C3*)(S7682C4*), 0, "S7682C15");
    /*is_ambiguous_... S7682C15::S7682C4 */ AMB_check_base_class_offset(lv, (S7682C4*), 0, "S7682C15");
    check_field_offset(lv, s7682c15f0, ABISELECT(208,132), "S7682C15.s7682c15f0");
    test_class_info(&lv, &cd_S7682C15);
    dp->~S7682C15();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7682C15(Test_S7682C15, "S7682C15", ABISELECT(2096,1316));

#else // __cplusplus

extern void _ZN8S7682C15C1Ev();
extern void _ZN8S7682C15D2Ev();
Name_Map name_map_S7682C15[] = {
  NSPAIR(_ZN8S7682C15C1Ev),
  NSPAIR(_ZN8S7682C15D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7682C3;
extern VTBL_ENTRY _ZTI7S7682C3[];
extern  VTBL_ENTRY _ZTV7S7682C3[];
extern Class_Descriptor cd_S7682C3;
extern VTBL_ENTRY _ZTI7S7682C3[];
extern  VTBL_ENTRY _ZTV7S7682C3[];
extern Class_Descriptor cd_S7682C4;
extern VTBL_ENTRY _ZTI7S7682C4[];
extern  VTBL_ENTRY _ZTV7S7682C4[];
extern Class_Descriptor cd_S7682C13;
extern VTBL_ENTRY _ZTI8S7682C13[];
extern  VTBL_ENTRY _ZTV8S7682C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7682C13[];
extern Class_Descriptor cd_S7682C9;
extern VTBL_ENTRY _ZTI7S7682C9[];
extern  VTBL_ENTRY _ZTV7S7682C9[];
extern Class_Descriptor cd_S7682C3;
extern VTBL_ENTRY _ZTI7S7682C3[];
extern  VTBL_ENTRY _ZTV7S7682C3[];
extern Class_Descriptor cd_S7682C4;
extern VTBL_ENTRY _ZTI7S7682C4[];
extern  VTBL_ENTRY _ZTV7S7682C4[];
static Base_Class bases_S7682C15[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7682C3,    ABISELECT(224,136), //bcp->offset
    19, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7682C3,    ABISELECT(416,256), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S7682C4,    ABISELECT(416,256), //bcp->offset
    43, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S7682C13,    ABISELECT(384,244), //bcp->offset
    29, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7682C9,    ABISELECT(624,388), //bcp->offset
    59, //bcp->virtual_function_table_offset
    11, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7682C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S7682C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S7682C15[];
extern void _ZN7S7682C32v8Ev();
extern void _ZN7S7682C32v9Ev();
extern void _ZN7S7682C33v10Ev();
extern void _ZN7S7682C33v11Ev();
extern void _ZN7S7682C43v12Ev();
extern void _ZN7S7682C43v13Ev();
extern void _ZN7S7682C43v14Ev();
extern void _ZN8S7682C15D1Ev();
extern void _ZN8S7682C15D0Ev();
extern void _ZN8S7682C153v53Ev();
extern void _ZN8S7682C153v54Ev();
extern void _ZN8S7682C153v55Ev();
extern void _ZN8S7682C153v56Ev();
extern void _ZN7S7682C32v8Ev();
extern void _ZN7S7682C32v9Ev();
extern void _ZN7S7682C33v10Ev();
extern void _ZN7S7682C33v11Ev();
extern void _ZN8S7682C133v42Ev();
extern void _ZN8S7682C133v43Ev();
extern void _ZN8S7682C133v44Ev();
extern void _ZN8S7682C133v45Ev();
extern void _ZN8S7682C133v46Ev();
extern void _ZN7S7682C32v8Ev();
extern void _ZN7S7682C32v9Ev();
extern void _ZN7S7682C33v10Ev();
extern void _ZN7S7682C33v11Ev();
extern void _ZN7S7682C43v12Ev();
extern void _ZN7S7682C43v13Ev();
extern void _ZN7S7682C43v14Ev();
extern void _ZN7S7682C93v33Ev();
extern void _ZN7S7682C93v34Ev();
extern void _ZN7S7682C93v35Ev();
extern void _ZN7S7682C93v36Ev();
extern void _ZN7S7682C93v37Ev();
extern void _ZN7S7682C93v38Ev();
extern void _ZN7S7682C93v39Ev();
extern void _ZN7S7682C93v40Ev();
extern void _ZN7S7682C93v41Ev();
static  VTBL_ENTRY vtc_S7682C15[] = {
  ABISELECT(624,388),
  ABISELECT(416,256),
  ABISELECT(384,244),
  ABISELECT(224,136),
  0,
  (VTBL_ENTRY)&(_ZTI8S7682C15[0]),
  (VTBL_ENTRY)&_ZN7S7682C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7682C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v14Ev,
  (VTBL_ENTRY)&_ZN8S7682C15D1Ev,
  (VTBL_ENTRY)&_ZN8S7682C15D0Ev,
  (VTBL_ENTRY)&_ZN8S7682C153v53Ev,
  (VTBL_ENTRY)&_ZN8S7682C153v54Ev,
  (VTBL_ENTRY)&_ZN8S7682C153v55Ev,
  (VTBL_ENTRY)&_ZN8S7682C153v56Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-224,-136),
  (VTBL_ENTRY)&(_ZTI8S7682C15[0]),
  (VTBL_ENTRY)&_ZN7S7682C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7682C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v11Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(32,12),
  ABISELECT(-160,-108),
  ABISELECT(-384,-244),
  (VTBL_ENTRY)&(_ZTI8S7682C15[0]),
  (VTBL_ENTRY)&_ZN8S7682C133v42Ev,
  (VTBL_ENTRY)&_ZN8S7682C133v43Ev,
  (VTBL_ENTRY)&_ZN8S7682C133v44Ev,
  (VTBL_ENTRY)&_ZN8S7682C133v45Ev,
  (VTBL_ENTRY)&_ZN8S7682C133v46Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-416,-256),
  (VTBL_ENTRY)&(_ZTI8S7682C15[0]),
  (VTBL_ENTRY)&_ZN7S7682C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7682C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v14Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-624,-388),
  (VTBL_ENTRY)&(_ZTI8S7682C15[0]),
  (VTBL_ENTRY)&_ZN7S7682C93v33Ev,
  (VTBL_ENTRY)&_ZN7S7682C93v34Ev,
  (VTBL_ENTRY)&_ZN7S7682C93v35Ev,
  (VTBL_ENTRY)&_ZN7S7682C93v36Ev,
  (VTBL_ENTRY)&_ZN7S7682C93v37Ev,
  (VTBL_ENTRY)&_ZN7S7682C93v38Ev,
  (VTBL_ENTRY)&_ZN7S7682C93v39Ev,
  (VTBL_ENTRY)&_ZN7S7682C93v40Ev,
  (VTBL_ENTRY)&_ZN7S7682C93v41Ev,
};
extern VTBL_ENTRY _ZTV8S7682C15[];
extern void _ZN8S7682C133v42Ev();
extern void _ZN8S7682C133v43Ev();
extern void _ZN8S7682C133v44Ev();
extern void _ZN8S7682C133v45Ev();
extern void _ZN8S7682C133v46Ev();
static  VTBL_ENTRY _tg__ZTV8S7682C13__8S7682C15[] = {
  ABISELECT(32,12),
  ABISELECT(-160,-108),
  0,
  (VTBL_ENTRY)&(_ZTI8S7682C13[0]),
  (VTBL_ENTRY)&_ZN8S7682C133v42Ev,
  (VTBL_ENTRY)&_ZN8S7682C133v43Ev,
  (VTBL_ENTRY)&_ZN8S7682C133v44Ev,
  (VTBL_ENTRY)&_ZN8S7682C133v45Ev,
  (VTBL_ENTRY)&_ZN8S7682C133v46Ev,
};
extern void _ZN7S7682C32v8Ev();
extern void _ZN7S7682C32v9Ev();
extern void _ZN7S7682C33v10Ev();
extern void _ZN7S7682C33v11Ev();
static  VTBL_ENTRY _tg__ZTV7S7682C3__8S7682C13__8S7682C15[] = {
  0,
  0,
  0,
  0,
  ABISELECT(160,108),
  (VTBL_ENTRY)&(_ZTI8S7682C13[0]),
  (VTBL_ENTRY)&_ZN7S7682C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7682C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v11Ev,
};
extern void _ZN7S7682C32v8Ev();
extern void _ZN7S7682C32v9Ev();
extern void _ZN7S7682C33v10Ev();
extern void _ZN7S7682C33v11Ev();
extern void _ZN7S7682C43v12Ev();
extern void _ZN7S7682C43v13Ev();
extern void _ZN7S7682C43v14Ev();
static  VTBL_ENTRY _tg__ZTV7S7682C4__8S7682C13__8S7682C15[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-32,-12),
  (VTBL_ENTRY)&(_ZTI8S7682C13[0]),
  (VTBL_ENTRY)&_ZN7S7682C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7682C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v14Ev,
};
static  VTT_ENTRY vtt_S7682C15[] = {
  {&(_ZTV8S7682C15[6]),  6,79},
  {&(_ZTV8S7682C15[25]),  25,79},
  {&(_ZTV8S7682C15[38]),  38,79},
  {&(_ZTV8S7682C15[52]),  52,79},
  {&(_ZTV8S7682C15[70]),  70,79},
  {&(_tg__ZTV8S7682C13__8S7682C15[4]),  4,9},
  {&(_tg__ZTV7S7682C3__8S7682C13__8S7682C15[6]),  6,10},
  {&(_tg__ZTV7S7682C4__8S7682C13__8S7682C15[9]),  9,16},
};
extern VTBL_ENTRY _ZTI8S7682C15[];
extern  VTBL_ENTRY _ZTV8S7682C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7682C15[];
Class_Descriptor cd_S7682C15 = {  "S7682C15", // class name
  bases_S7682C15, 7,
  &(vtc_S7682C15[0]), // expected_vtbl_contents
  &(vtt_S7682C15[0]), // expected_vtt_contents
  ABISELECT(2096,1316), // object size
  NSPAIRA(_ZTI8S7682C15),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S7682C15),79, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7682C15),8, //virtual table table var
  7, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7682C10  : virtual S7682C8_nt , virtual S7682C11 , S7682C12 , S7682C15 {
  int s7682c10f0[8];
  char s7682c10f1;
  __tsi64 s7682c10f2;
  virtual  ~S7682C10(); // _ZN8S7682C10D2Ev
  virtual void  v57(); // _ZN8S7682C103v57Ev
  virtual void  v58(); // _ZN8S7682C103v58Ev
  virtual void  v59(); // _ZN8S7682C103v59Ev
  virtual void  v60(); // _ZN8S7682C103v60Ev
  virtual void  v61(); // _ZN8S7682C103v61Ev
  virtual void  v62(); // _ZN8S7682C103v62Ev
  virtual void  v63(); // _ZN8S7682C103v63Ev
  virtual void  v64(); // _ZN8S7682C103v64Ev
  S7682C10(); // tgen
};
//SIG(-1 S7682C10) C1{ VBC2{ v9 v10 v11 v12} VBC3{ VBC4{ VBC5{ VBC6{ v13 v14 v15 v16 Fs:13 Fp FD[8]} VBC7{ BC6 v17 v18 v19 Fp[6]} v20 v21 v22 v23 v24 Fp[2]} BC8{ VBC6 BC7 v25 v26 v27 v28 Fp} v29 v30 v31 v32 FL[5] FC9{} FD} vd v33 v34} BC4 BC10{ VBC6 VBC5 VBC11{ v35 v36 v37 v38 v39 v40 v41 v42 v43 FC7[7]} BC7 vd v44 v45 v46 v47 Fi} vd v1 v2 v3 v4 v5 v6 v7 v8 Fi[8] Fc FL}


 S7682C10 ::~S7682C10(){ note_dtor("S7682C10", this);}
void  S7682C10 ::v57(){vfunc_called(this, "_ZN8S7682C103v57Ev");}
void  S7682C10 ::v58(){vfunc_called(this, "_ZN8S7682C103v58Ev");}
void  S7682C10 ::v59(){vfunc_called(this, "_ZN8S7682C103v59Ev");}
void  S7682C10 ::v60(){vfunc_called(this, "_ZN8S7682C103v60Ev");}
void  S7682C10 ::v61(){vfunc_called(this, "_ZN8S7682C103v61Ev");}
void  S7682C10 ::v62(){vfunc_called(this, "_ZN8S7682C103v62Ev");}
void  S7682C10 ::v63(){vfunc_called(this, "_ZN8S7682C103v63Ev");}
void  S7682C10 ::v64(){vfunc_called(this, "_ZN8S7682C103v64Ev");}
S7682C10 ::S7682C10(){ note_ctor("S7682C10", this);} // tgen

static void Test_S7682C10()
{
  extern Class_Descriptor cd_S7682C10;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(171,439)];
    init_test(&cd_S7682C10, buf);
    S7682C10 *dp, &lv = *(dp=new (buf) S7682C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(2720,1752), "sizeof(S7682C10)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7682C10)");
    check_base_class_offset(lv, (S7682C8_nt*), ABISELECT(544,372), "S7682C10");
    /*is_ambiguous_... S7682C13::S7682C3 */ AMB_check_base_class_offset(lv, (S7682C3*)(S7682C13*), ABISELECT(880,584), "S7682C10");
    /*is_ambiguous_... S7682C10::S7682C12 */ AMB_check_base_class_offset(lv, (S7682C3*)(S7682C2*)(S7682C12*), ABISELECT(880,584), "S7682C10");
    /*is_ambiguous_... S7682C10::S7682C12 */ AMB_check_base_class_offset(lv, (S7682C3*)(S7682C2*)(S7682C12*), ABISELECT(880,584), "S7682C10");
    /*is_ambiguous_... S7682C15::S7682C3 */ AMB_check_base_class_offset(lv, (S7682C3*)(S7682C15*), ABISELECT(880,584), "S7682C10");
    /*is_ambiguous_... S7682C10::S7682C4 */ AMB_check_base_class_offset(lv, (S7682C3*)(S7682C4*), ABISELECT(1040,692), "S7682C10");
    check_base_class_offset(lv, (S7682C4*)(S7682C13*), ABISELECT(1040,692), "S7682C10");
    /*is_ambiguous_... S7682C10::S7682C12 */ AMB_check_base_class_offset(lv, (S7682C13*)(S7682C12*), ABISELECT(848,572), "S7682C10");
    /*is_ambiguous_... S7682C10::S7682C12 */ AMB_check_base_class_offset(lv, (S7682C13*)(S7682C12*), ABISELECT(848,572), "S7682C10");
    check_base_class_offset(lv, (S7682C13*)(S7682C15*), ABISELECT(848,572), "S7682C10");
    /*is_ambiguous_... S7682C10::S7682C12 */ AMB_check_base_class_offset(lv, (S7682C3*)(S7682C4*)(S7682C2*)(S7682C12*), ABISELECT(560,380), "S7682C10");
    /*is_ambiguous_... S7682C10::S7682C12 */ AMB_check_base_class_offset(lv, (S7682C4*)(S7682C2*)(S7682C12*), ABISELECT(560,380), "S7682C10");
    /*is_ambiguous_... S7682C10::S7682C12 */ AMB_check_base_class_offset(lv, (S7682C2*)(S7682C12*), ABISELECT(560,380), "S7682C10");
    check_base_class_offset(lv, (S7682C12*)(S7682C11*), ABISELECT(560,380), "S7682C10");
    check_base_class_offset(lv, (S7682C11*), ABISELECT(552,376), "S7682C10");
    /*is_ambiguous_... S7682C10::S7682C12 */ AMB_check_base_class_offset(lv, (S7682C3*)(S7682C4*)(S7682C2*)(S7682C12*), 0, "S7682C10");
    /*is_ambiguous_... S7682C10::S7682C12 */ AMB_check_base_class_offset(lv, (S7682C4*)(S7682C2*)(S7682C12*), 0, "S7682C10");
    /*is_ambiguous_... S7682C10::S7682C12 */ AMB_check_base_class_offset(lv, (S7682C2*)(S7682C12*), 0, "S7682C10");
    /*is_ambiguous_... S7682C10::S7682C12 */ AMB_check_base_class_offset(lv, (S7682C12*), 0, "S7682C10");
    check_base_class_offset(lv, (S7682C9*)(S7682C15*), ABISELECT(1248,824), "S7682C10");
    /*is_ambiguous_... S7682C15::S7682C4 */ AMB_check_base_class_offset(lv, (S7682C3*)(S7682C4*)(S7682C15*), ABISELECT(288,192), "S7682C10");
    /*is_ambiguous_... S7682C15::S7682C4 */ AMB_check_base_class_offset(lv, (S7682C4*)(S7682C15*), ABISELECT(288,192), "S7682C10");
    check_base_class_offset(lv, (S7682C15*), ABISELECT(288,192), "S7682C10");
    check_field_offset(lv, s7682c10f0, ABISELECT(500,328), "S7682C10.s7682c10f0");
    check_field_offset(lv, s7682c10f1, ABISELECT(532,360), "S7682C10.s7682c10f1");
    check_field_offset(lv, s7682c10f2, ABISELECT(536,364), "S7682C10.s7682c10f2");
    test_class_info(&lv, &cd_S7682C10);
    dp->~S7682C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7682C10(Test_S7682C10, "S7682C10", ABISELECT(2720,1752));

#else // __cplusplus

extern void _ZN8S7682C10C1Ev();
extern void _ZN8S7682C10D2Ev();
Name_Map name_map_S7682C10[] = {
  NSPAIR(_ZN8S7682C10C1Ev),
  NSPAIR(_ZN8S7682C10D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7682C8_nt;
extern VTBL_ENTRY _ZTI10S7682C8_nt[];
extern  VTBL_ENTRY _ZTV10S7682C8_nt[];
extern Class_Descriptor cd_S7682C3;
extern VTBL_ENTRY _ZTI7S7682C3[];
extern  VTBL_ENTRY _ZTV7S7682C3[];
extern Class_Descriptor cd_S7682C3;
extern VTBL_ENTRY _ZTI7S7682C3[];
extern  VTBL_ENTRY _ZTV7S7682C3[];
extern Class_Descriptor cd_S7682C4;
extern VTBL_ENTRY _ZTI7S7682C4[];
extern  VTBL_ENTRY _ZTV7S7682C4[];
extern Class_Descriptor cd_S7682C13;
extern VTBL_ENTRY _ZTI8S7682C13[];
extern  VTBL_ENTRY _ZTV8S7682C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7682C13[];
extern Class_Descriptor cd_S7682C3;
extern VTBL_ENTRY _ZTI7S7682C3[];
extern  VTBL_ENTRY _ZTV7S7682C3[];
extern Class_Descriptor cd_S7682C4;
extern VTBL_ENTRY _ZTI7S7682C4[];
extern  VTBL_ENTRY _ZTV7S7682C4[];
extern Class_Descriptor cd_S7682C2;
extern VTBL_ENTRY _ZTI7S7682C2[];
extern  VTBL_ENTRY _ZTV7S7682C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7682C2[];
extern Class_Descriptor cd_S7682C12;
extern VTBL_ENTRY _ZTI8S7682C12[];
extern  VTBL_ENTRY _ZTV8S7682C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7682C12[];
extern Class_Descriptor cd_S7682C11;
extern VTBL_ENTRY _ZTI8S7682C11[];
extern  VTBL_ENTRY _ZTV8S7682C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7682C11[];
extern Class_Descriptor cd_S7682C3;
extern VTBL_ENTRY _ZTI7S7682C3[];
extern  VTBL_ENTRY _ZTV7S7682C3[];
extern Class_Descriptor cd_S7682C4;
extern VTBL_ENTRY _ZTI7S7682C4[];
extern  VTBL_ENTRY _ZTV7S7682C4[];
extern Class_Descriptor cd_S7682C2;
extern VTBL_ENTRY _ZTI7S7682C2[];
extern  VTBL_ENTRY _ZTV7S7682C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7682C2[];
extern Class_Descriptor cd_S7682C12;
extern VTBL_ENTRY _ZTI8S7682C12[];
extern  VTBL_ENTRY _ZTV8S7682C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7682C12[];
extern Class_Descriptor cd_S7682C9;
extern VTBL_ENTRY _ZTI7S7682C9[];
extern  VTBL_ENTRY _ZTV7S7682C9[];
extern Class_Descriptor cd_S7682C3;
extern VTBL_ENTRY _ZTI7S7682C3[];
extern  VTBL_ENTRY _ZTV7S7682C3[];
extern Class_Descriptor cd_S7682C4;
extern VTBL_ENTRY _ZTI7S7682C4[];
extern  VTBL_ENTRY _ZTV7S7682C4[];
extern Class_Descriptor cd_S7682C15;
extern VTBL_ENTRY _ZTI8S7682C15[];
extern  VTBL_ENTRY _ZTV8S7682C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7682C15[];
static Base_Class bases_S7682C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7682C8_nt,    ABISELECT(544,372), //bcp->offset
    53, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7682C3,    ABISELECT(880,584), //bcp->offset
    125, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S7682C3,    ABISELECT(1040,692), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S7682C4,    ABISELECT(1040,692), //bcp->offset
    135, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S7682C13,    ABISELECT(848,572), //bcp->offset
    111, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    32, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S7682C3,    ABISELECT(560,380), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S7682C4,    ABISELECT(560,380), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S7682C2,    ABISELECT(560,380), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    27, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S7682C12,    ABISELECT(560,380), //bcp->offset
    76, //bcp->virtual_function_table_offset
    20, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    26, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S7682C11,    ABISELECT(552,376), //bcp->offset
    63, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    21, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7682C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S7682C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S7682C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S7682C12,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7682C9,    ABISELECT(1248,824), //bcp->offset
    151, //bcp->virtual_function_table_offset
    11, //num_negative_vtable_entries(t, bcp)
    20, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    17, //immediately_derived
  0, 1},
  {&cd_S7682C3,    ABISELECT(288,192), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S7682C4,    ABISELECT(288,192), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S7682C15,    ABISELECT(288,192), //bcp->offset
    34, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S7682C10[];
extern void _ZN7S7682C32v8Ev();
extern void _ZN7S7682C32v9Ev();
extern void _ZN7S7682C33v10Ev();
extern void _ZN7S7682C33v11Ev();
extern void _ZN7S7682C43v12Ev();
extern void _ZN7S7682C43v13Ev();
extern void _ZN7S7682C43v14Ev();
extern void _ZN7S7682C23v15Ev();
extern void _ZN7S7682C23v16Ev();
extern void _ZN7S7682C23v17Ev();
extern void _ZN7S7682C23v18Ev();
extern void _ZN8S7682C123v47Ev();
extern void _ZN8S7682C123v48Ev();
extern void _ZN8S7682C123v49Ev();
extern void _ZN8S7682C123v50Ev();
extern void _ZN8S7682C10D1Ev();
extern void _ZN8S7682C10D0Ev();
extern void _ZN8S7682C103v57Ev();
extern void _ZN8S7682C103v58Ev();
extern void _ZN8S7682C103v59Ev();
extern void _ZN8S7682C103v60Ev();
extern void _ZN8S7682C103v61Ev();
extern void _ZN8S7682C103v62Ev();
extern void _ZN8S7682C103v63Ev();
extern void _ZN8S7682C103v64Ev();
extern void _ZN7S7682C32v8Ev();
extern void _ZN7S7682C32v9Ev();
extern void _ZN7S7682C33v10Ev();
extern void _ZN7S7682C33v11Ev();
extern void _ZN7S7682C43v12Ev();
extern void _ZN7S7682C43v13Ev();
extern void _ZN7S7682C43v14Ev();
extern void ABISELECT(_ZThn288_N8S7682C10D1Ev,_ZThn192_N8S7682C10D1Ev)();
extern void ABISELECT(_ZThn288_N8S7682C10D0Ev,_ZThn192_N8S7682C10D0Ev)();
extern void _ZN8S7682C153v53Ev();
extern void _ZN8S7682C153v54Ev();
extern void _ZN8S7682C153v55Ev();
extern void _ZN8S7682C153v56Ev();
extern void _ZN10S7682C8_nt3v29Ev();
extern void _ZN10S7682C8_nt3v30Ev();
extern void _ZN10S7682C8_nt3v31Ev();
extern void _ZN10S7682C8_nt3v32Ev();
extern void ABISELECT(_ZTv0_n56_N8S7682C10D1Ev,_ZTv0_n28_N8S7682C10D1Ev)();
extern void ABISELECT(_ZThn552_N8S7682C10D1Ev,_ZThn376_N8S7682C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S7682C10D0Ev,_ZTv0_n28_N8S7682C10D0Ev)();
extern void ABISELECT(_ZThn552_N8S7682C10D0Ev,_ZThn376_N8S7682C10D0Ev)() __attribute__((weak));
extern void _ZN8S7682C113v51Ev();
extern void _ZN8S7682C113v52Ev();
extern void _ZN7S7682C32v8Ev();
extern void _ZN7S7682C32v9Ev();
extern void _ZN7S7682C33v10Ev();
extern void _ZN7S7682C33v11Ev();
extern void _ZN7S7682C43v12Ev();
extern void _ZN7S7682C43v13Ev();
extern void _ZN7S7682C43v14Ev();
extern void _ZN7S7682C23v15Ev();
extern void _ZN7S7682C23v16Ev();
extern void _ZN7S7682C23v17Ev();
extern void _ZN7S7682C23v18Ev();
extern void _ZN8S7682C123v47Ev();
extern void _ZN8S7682C123v48Ev();
extern void _ZN8S7682C123v49Ev();
extern void _ZN8S7682C123v50Ev();
extern void _ZN8S7682C133v42Ev();
extern void _ZN8S7682C133v43Ev();
extern void _ZN8S7682C133v44Ev();
extern void _ZN8S7682C133v45Ev();
extern void _ZN8S7682C133v46Ev();
extern void _ZN7S7682C32v8Ev();
extern void _ZN7S7682C32v9Ev();
extern void _ZN7S7682C33v10Ev();
extern void _ZN7S7682C33v11Ev();
extern void _ZN7S7682C32v8Ev();
extern void _ZN7S7682C32v9Ev();
extern void _ZN7S7682C33v10Ev();
extern void _ZN7S7682C33v11Ev();
extern void _ZN7S7682C43v12Ev();
extern void _ZN7S7682C43v13Ev();
extern void _ZN7S7682C43v14Ev();
extern void _ZN7S7682C93v33Ev();
extern void _ZN7S7682C93v34Ev();
extern void _ZN7S7682C93v35Ev();
extern void _ZN7S7682C93v36Ev();
extern void _ZN7S7682C93v37Ev();
extern void _ZN7S7682C93v38Ev();
extern void _ZN7S7682C93v39Ev();
extern void _ZN7S7682C93v40Ev();
extern void _ZN7S7682C93v41Ev();
static  VTBL_ENTRY vtc_S7682C10[] = {
  ABISELECT(1248,824),
  ABISELECT(560,380),
  ABISELECT(552,376),
  ABISELECT(544,372),
  ABISELECT(1040,692),
  ABISELECT(848,572),
  ABISELECT(880,584),
  0,
  (VTBL_ENTRY)&(_ZTI8S7682C10[0]),
  (VTBL_ENTRY)&_ZN7S7682C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7682C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v15Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v16Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v17Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v18Ev,
  (VTBL_ENTRY)&_ZN8S7682C123v47Ev,
  (VTBL_ENTRY)&_ZN8S7682C123v48Ev,
  (VTBL_ENTRY)&_ZN8S7682C123v49Ev,
  (VTBL_ENTRY)&_ZN8S7682C123v50Ev,
  (VTBL_ENTRY)&_ZN8S7682C10D1Ev,
  (VTBL_ENTRY)&_ZN8S7682C10D0Ev,
  (VTBL_ENTRY)&_ZN8S7682C103v57Ev,
  (VTBL_ENTRY)&_ZN8S7682C103v58Ev,
  (VTBL_ENTRY)&_ZN8S7682C103v59Ev,
  (VTBL_ENTRY)&_ZN8S7682C103v60Ev,
  (VTBL_ENTRY)&_ZN8S7682C103v61Ev,
  (VTBL_ENTRY)&_ZN8S7682C103v62Ev,
  (VTBL_ENTRY)&_ZN8S7682C103v63Ev,
  (VTBL_ENTRY)&_ZN8S7682C103v64Ev,
  ABISELECT(960,632),
  ABISELECT(752,500),
  ABISELECT(560,380),
  ABISELECT(592,392),
  ABISELECT(-288,-192),
  (VTBL_ENTRY)&(_ZTI8S7682C10[0]),
  (VTBL_ENTRY)&_ZN7S7682C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7682C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v14Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn288_N8S7682C10D1Ev,_ZThn192_N8S7682C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn288_N8S7682C10D0Ev,_ZThn192_N8S7682C10D0Ev),
  (VTBL_ENTRY)&_ZN8S7682C153v53Ev,
  (VTBL_ENTRY)&_ZN8S7682C153v54Ev,
  (VTBL_ENTRY)&_ZN8S7682C153v55Ev,
  (VTBL_ENTRY)&_ZN8S7682C153v56Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-544,-372),
  (VTBL_ENTRY)&(_ZTI8S7682C10[0]),
  (VTBL_ENTRY)&_ZN10S7682C8_nt3v29Ev,
  (VTBL_ENTRY)&_ZN10S7682C8_nt3v30Ev,
  (VTBL_ENTRY)&_ZN10S7682C8_nt3v31Ev,
  (VTBL_ENTRY)&_ZN10S7682C8_nt3v32Ev,
  0,
  0,
  ABISELECT(-552,-376),
  ABISELECT(488,316),
  ABISELECT(328,208),
  ABISELECT(296,196),
  ABISELECT(8,4),
  ABISELECT(-552,-376),
  (VTBL_ENTRY)&(_ZTI8S7682C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S7682C10D1Ev,_ZTv0_n28_N8S7682C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S7682C10D0Ev,_ZTv0_n28_N8S7682C10D0Ev),
  (VTBL_ENTRY)&_ZN8S7682C113v51Ev,
  (VTBL_ENTRY)&_ZN8S7682C113v52Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(480,312),
  ABISELECT(288,192),
  ABISELECT(320,204),
  ABISELECT(-560,-380),
  (VTBL_ENTRY)&(_ZTI8S7682C10[0]),
  (VTBL_ENTRY)&_ZN7S7682C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7682C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v15Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v16Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v17Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v18Ev,
  (VTBL_ENTRY)&_ZN8S7682C123v47Ev,
  (VTBL_ENTRY)&_ZN8S7682C123v48Ev,
  (VTBL_ENTRY)&_ZN8S7682C123v49Ev,
  (VTBL_ENTRY)&_ZN8S7682C123v50Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(192,120),
  ABISELECT(32,12),
  ABISELECT(-848,-572),
  (VTBL_ENTRY)&(_ZTI8S7682C10[0]),
  (VTBL_ENTRY)&_ZN8S7682C133v42Ev,
  (VTBL_ENTRY)&_ZN8S7682C133v43Ev,
  (VTBL_ENTRY)&_ZN8S7682C133v44Ev,
  (VTBL_ENTRY)&_ZN8S7682C133v45Ev,
  (VTBL_ENTRY)&_ZN8S7682C133v46Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-880,-584),
  (VTBL_ENTRY)&(_ZTI8S7682C10[0]),
  (VTBL_ENTRY)&_ZN7S7682C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7682C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v11Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-1040,-692),
  (VTBL_ENTRY)&(_ZTI8S7682C10[0]),
  (VTBL_ENTRY)&_ZN7S7682C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7682C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v14Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-1248,-824),
  (VTBL_ENTRY)&(_ZTI8S7682C10[0]),
  (VTBL_ENTRY)&_ZN7S7682C93v33Ev,
  (VTBL_ENTRY)&_ZN7S7682C93v34Ev,
  (VTBL_ENTRY)&_ZN7S7682C93v35Ev,
  (VTBL_ENTRY)&_ZN7S7682C93v36Ev,
  (VTBL_ENTRY)&_ZN7S7682C93v37Ev,
  (VTBL_ENTRY)&_ZN7S7682C93v38Ev,
  (VTBL_ENTRY)&_ZN7S7682C93v39Ev,
  (VTBL_ENTRY)&_ZN7S7682C93v40Ev,
  (VTBL_ENTRY)&_ZN7S7682C93v41Ev,
};
extern VTBL_ENTRY _ZTV8S7682C10[];
extern void _ZN7S7682C32v8Ev();
extern void _ZN7S7682C32v9Ev();
extern void _ZN7S7682C33v10Ev();
extern void _ZN7S7682C33v11Ev();
extern void _ZN7S7682C43v12Ev();
extern void _ZN7S7682C43v13Ev();
extern void _ZN7S7682C43v14Ev();
extern void _ZN7S7682C23v15Ev();
extern void _ZN7S7682C23v16Ev();
extern void _ZN7S7682C23v17Ev();
extern void _ZN7S7682C23v18Ev();
extern void _ZN8S7682C123v47Ev();
extern void _ZN8S7682C123v48Ev();
extern void _ZN8S7682C123v49Ev();
extern void _ZN8S7682C123v50Ev();
static  VTBL_ENTRY _tg__ZTV8S7682C12__A__8S7682C10[] = {
  ABISELECT(1040,692),
  ABISELECT(848,572),
  ABISELECT(880,584),
  0,
  (VTBL_ENTRY)&(_ZTI8S7682C12[0]),
  (VTBL_ENTRY)&_ZN7S7682C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7682C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v15Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v16Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v17Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v18Ev,
  (VTBL_ENTRY)&_ZN8S7682C123v47Ev,
  (VTBL_ENTRY)&_ZN8S7682C123v48Ev,
  (VTBL_ENTRY)&_ZN8S7682C123v49Ev,
  (VTBL_ENTRY)&_ZN8S7682C123v50Ev,
};
extern void _ZN7S7682C32v8Ev();
extern void _ZN7S7682C32v9Ev();
extern void _ZN7S7682C33v10Ev();
extern void _ZN7S7682C33v11Ev();
extern void _ZN7S7682C43v12Ev();
extern void _ZN7S7682C43v13Ev();
extern void _ZN7S7682C43v14Ev();
extern void _ZN7S7682C23v15Ev();
extern void _ZN7S7682C23v16Ev();
extern void _ZN7S7682C23v17Ev();
extern void _ZN7S7682C23v18Ev();
static  VTBL_ENTRY _tg__ZTV7S7682C28S7682C12__A1__8S7682C10[] = {
  ABISELECT(880,584),
  0,
  (VTBL_ENTRY)&(_ZTI7S7682C2[0]),
  (VTBL_ENTRY)&_ZN7S7682C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7682C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v15Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v16Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v17Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v18Ev,
};
extern void _ZN7S7682C32v8Ev();
extern void _ZN7S7682C32v9Ev();
extern void _ZN7S7682C33v10Ev();
extern void _ZN7S7682C33v11Ev();
static  VTBL_ENTRY _tg__ZTV7S7682C3__7S7682C28S7682C12__A1__8S7682C10[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-880,-584),
  (VTBL_ENTRY)&(_ZTI7S7682C2[0]),
  (VTBL_ENTRY)&_ZN7S7682C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7682C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v11Ev,
};
extern void _ZN8S7682C133v42Ev();
extern void _ZN8S7682C133v43Ev();
extern void _ZN8S7682C133v44Ev();
extern void _ZN8S7682C133v45Ev();
extern void _ZN8S7682C133v46Ev();
static  VTBL_ENTRY _tg__ZTV8S7682C13__8S7682C12__A__8S7682C10[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(192,120),
  ABISELECT(32,12),
  ABISELECT(-848,-572),
  (VTBL_ENTRY)&(_ZTI8S7682C12[0]),
  (VTBL_ENTRY)&_ZN8S7682C133v42Ev,
  (VTBL_ENTRY)&_ZN8S7682C133v43Ev,
  (VTBL_ENTRY)&_ZN8S7682C133v44Ev,
  (VTBL_ENTRY)&_ZN8S7682C133v45Ev,
  (VTBL_ENTRY)&_ZN8S7682C133v46Ev,
};
extern void _ZN7S7682C32v8Ev();
extern void _ZN7S7682C32v9Ev();
extern void _ZN7S7682C33v10Ev();
extern void _ZN7S7682C33v11Ev();
static  VTBL_ENTRY _tg__ZTV7S7682C3__8S7682C12__A__8S7682C10[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-880,-584),
  (VTBL_ENTRY)&(_ZTI8S7682C12[0]),
  (VTBL_ENTRY)&_ZN7S7682C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7682C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v11Ev,
};
extern void _ZN7S7682C32v8Ev();
extern void _ZN7S7682C32v9Ev();
extern void _ZN7S7682C33v10Ev();
extern void _ZN7S7682C33v11Ev();
extern void _ZN7S7682C43v12Ev();
extern void _ZN7S7682C43v13Ev();
extern void _ZN7S7682C43v14Ev();
static  VTBL_ENTRY _tg__ZTV7S7682C4__8S7682C12__A__8S7682C10[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-1040,-692),
  (VTBL_ENTRY)&(_ZTI8S7682C12[0]),
  (VTBL_ENTRY)&_ZN7S7682C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7682C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v14Ev,
};
extern void _ZN7S7682C32v8Ev();
extern void _ZN7S7682C32v9Ev();
extern void _ZN7S7682C33v10Ev();
extern void _ZN7S7682C33v11Ev();
extern void _ZN7S7682C43v12Ev();
extern void _ZN7S7682C43v13Ev();
extern void _ZN7S7682C43v14Ev();
extern void _ZN8S7682C15D1Ev();
extern void _ZN8S7682C15D0Ev();
extern void _ZN8S7682C153v53Ev();
extern void _ZN8S7682C153v54Ev();
extern void _ZN8S7682C153v55Ev();
extern void _ZN8S7682C153v56Ev();
static  VTBL_ENTRY _tg__ZTV8S7682C15__8S7682C10[] = {
  ABISELECT(960,632),
  ABISELECT(752,500),
  ABISELECT(560,380),
  ABISELECT(592,392),
  0,
  (VTBL_ENTRY)&(_ZTI8S7682C15[0]),
  (VTBL_ENTRY)&_ZN7S7682C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7682C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v14Ev,
  (VTBL_ENTRY)&_ZN8S7682C15D1Ev,
  (VTBL_ENTRY)&_ZN8S7682C15D0Ev,
  (VTBL_ENTRY)&_ZN8S7682C153v53Ev,
  (VTBL_ENTRY)&_ZN8S7682C153v54Ev,
  (VTBL_ENTRY)&_ZN8S7682C153v55Ev,
  (VTBL_ENTRY)&_ZN8S7682C153v56Ev,
};
extern void _ZN7S7682C32v8Ev();
extern void _ZN7S7682C32v9Ev();
extern void _ZN7S7682C33v10Ev();
extern void _ZN7S7682C33v11Ev();
static  VTBL_ENTRY _tg__ZTV7S7682C3__8S7682C15__8S7682C10[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-592,-392),
  (VTBL_ENTRY)&(_ZTI8S7682C15[0]),
  (VTBL_ENTRY)&_ZN7S7682C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7682C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v11Ev,
};
extern void _ZN8S7682C133v42Ev();
extern void _ZN8S7682C133v43Ev();
extern void _ZN8S7682C133v44Ev();
extern void _ZN8S7682C133v45Ev();
extern void _ZN8S7682C133v46Ev();
static  VTBL_ENTRY _tg__ZTV8S7682C13__8S7682C15__8S7682C10[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(192,120),
  ABISELECT(32,12),
  ABISELECT(-560,-380),
  (VTBL_ENTRY)&(_ZTI8S7682C15[0]),
  (VTBL_ENTRY)&_ZN8S7682C133v42Ev,
  (VTBL_ENTRY)&_ZN8S7682C133v43Ev,
  (VTBL_ENTRY)&_ZN8S7682C133v44Ev,
  (VTBL_ENTRY)&_ZN8S7682C133v45Ev,
  (VTBL_ENTRY)&_ZN8S7682C133v46Ev,
};
extern void _ZN7S7682C32v8Ev();
extern void _ZN7S7682C32v9Ev();
extern void _ZN7S7682C33v10Ev();
extern void _ZN7S7682C33v11Ev();
extern void _ZN7S7682C43v12Ev();
extern void _ZN7S7682C43v13Ev();
extern void _ZN7S7682C43v14Ev();
static  VTBL_ENTRY _tg__ZTV7S7682C4__8S7682C15__8S7682C10[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-752,-500),
  (VTBL_ENTRY)&(_ZTI8S7682C15[0]),
  (VTBL_ENTRY)&_ZN7S7682C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7682C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v14Ev,
};
extern void _ZN7S7682C93v33Ev();
extern void _ZN7S7682C93v34Ev();
extern void _ZN7S7682C93v35Ev();
extern void _ZN7S7682C93v36Ev();
extern void _ZN7S7682C93v37Ev();
extern void _ZN7S7682C93v38Ev();
extern void _ZN7S7682C93v39Ev();
extern void _ZN7S7682C93v40Ev();
extern void _ZN7S7682C93v41Ev();
static  VTBL_ENTRY _tg__ZTV7S7682C9__8S7682C15__8S7682C10[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-960,-632),
  (VTBL_ENTRY)&(_ZTI8S7682C15[0]),
  (VTBL_ENTRY)&_ZN7S7682C93v33Ev,
  (VTBL_ENTRY)&_ZN7S7682C93v34Ev,
  (VTBL_ENTRY)&_ZN7S7682C93v35Ev,
  (VTBL_ENTRY)&_ZN7S7682C93v36Ev,
  (VTBL_ENTRY)&_ZN7S7682C93v37Ev,
  (VTBL_ENTRY)&_ZN7S7682C93v38Ev,
  (VTBL_ENTRY)&_ZN7S7682C93v39Ev,
  (VTBL_ENTRY)&_ZN7S7682C93v40Ev,
  (VTBL_ENTRY)&_ZN7S7682C93v41Ev,
};
extern void _ZN8S7682C11D1Ev();
extern void _ZN8S7682C11D0Ev();
extern void _ZN8S7682C113v51Ev();
extern void _ZN8S7682C113v52Ev();
static  VTBL_ENTRY _tg__ZTV8S7682C11__8S7682C10[] = {
  ABISELECT(488,316),
  ABISELECT(328,208),
  ABISELECT(296,196),
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S7682C11[0]),
  (VTBL_ENTRY)&_ZN8S7682C11D1Ev,
  (VTBL_ENTRY)&_ZN8S7682C11D0Ev,
  (VTBL_ENTRY)&_ZN8S7682C113v51Ev,
  (VTBL_ENTRY)&_ZN8S7682C113v52Ev,
};
extern void _ZN7S7682C32v8Ev();
extern void _ZN7S7682C32v9Ev();
extern void _ZN7S7682C33v10Ev();
extern void _ZN7S7682C33v11Ev();
extern void _ZN7S7682C43v12Ev();
extern void _ZN7S7682C43v13Ev();
extern void _ZN7S7682C43v14Ev();
extern void _ZN7S7682C23v15Ev();
extern void _ZN7S7682C23v16Ev();
extern void _ZN7S7682C23v17Ev();
extern void _ZN7S7682C23v18Ev();
extern void _ZN8S7682C123v47Ev();
extern void _ZN8S7682C123v48Ev();
extern void _ZN8S7682C123v49Ev();
extern void _ZN8S7682C123v50Ev();
static  VTBL_ENTRY _tg__ZTV8S7682C12__8S7682C11__8S7682C10[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(480,312),
  ABISELECT(288,192),
  ABISELECT(320,204),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S7682C11[0]),
  (VTBL_ENTRY)&_ZN7S7682C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7682C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v15Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v16Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v17Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v18Ev,
  (VTBL_ENTRY)&_ZN8S7682C123v47Ev,
  (VTBL_ENTRY)&_ZN8S7682C123v48Ev,
  (VTBL_ENTRY)&_ZN8S7682C123v49Ev,
  (VTBL_ENTRY)&_ZN8S7682C123v50Ev,
};
extern void _ZN8S7682C133v42Ev();
extern void _ZN8S7682C133v43Ev();
extern void _ZN8S7682C133v44Ev();
extern void _ZN8S7682C133v45Ev();
extern void _ZN8S7682C133v46Ev();
static  VTBL_ENTRY _tg__ZTV8S7682C13__8S7682C11__8S7682C10[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(192,120),
  ABISELECT(32,12),
  ABISELECT(-296,-196),
  (VTBL_ENTRY)&(_ZTI8S7682C11[0]),
  (VTBL_ENTRY)&_ZN8S7682C133v42Ev,
  (VTBL_ENTRY)&_ZN8S7682C133v43Ev,
  (VTBL_ENTRY)&_ZN8S7682C133v44Ev,
  (VTBL_ENTRY)&_ZN8S7682C133v45Ev,
  (VTBL_ENTRY)&_ZN8S7682C133v46Ev,
};
extern void _ZN7S7682C32v8Ev();
extern void _ZN7S7682C32v9Ev();
extern void _ZN7S7682C33v10Ev();
extern void _ZN7S7682C33v11Ev();
static  VTBL_ENTRY _tg__ZTV7S7682C3__8S7682C11__8S7682C10[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-328,-208),
  (VTBL_ENTRY)&(_ZTI8S7682C11[0]),
  (VTBL_ENTRY)&_ZN7S7682C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7682C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v11Ev,
};
extern void _ZN7S7682C32v8Ev();
extern void _ZN7S7682C32v9Ev();
extern void _ZN7S7682C33v10Ev();
extern void _ZN7S7682C33v11Ev();
extern void _ZN7S7682C43v12Ev();
extern void _ZN7S7682C43v13Ev();
extern void _ZN7S7682C43v14Ev();
static  VTBL_ENTRY _tg__ZTV7S7682C4__8S7682C11__8S7682C10[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-488,-316),
  (VTBL_ENTRY)&(_ZTI8S7682C11[0]),
  (VTBL_ENTRY)&_ZN7S7682C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7682C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v14Ev,
};
extern void _ZN7S7682C32v8Ev();
extern void _ZN7S7682C32v9Ev();
extern void _ZN7S7682C33v10Ev();
extern void _ZN7S7682C33v11Ev();
extern void _ZN7S7682C43v12Ev();
extern void _ZN7S7682C43v13Ev();
extern void _ZN7S7682C43v14Ev();
extern void _ZN7S7682C23v15Ev();
extern void _ZN7S7682C23v16Ev();
extern void _ZN7S7682C23v17Ev();
extern void _ZN7S7682C23v18Ev();
extern void _ZN8S7682C123v47Ev();
extern void _ZN8S7682C123v48Ev();
extern void _ZN8S7682C123v49Ev();
extern void _ZN8S7682C123v50Ev();
static  VTBL_ENTRY _tg__ZTV8S7682C12__8S7682C10[] = {
  ABISELECT(480,312),
  ABISELECT(288,192),
  ABISELECT(320,204),
  0,
  (VTBL_ENTRY)&(_ZTI8S7682C12[0]),
  (VTBL_ENTRY)&_ZN7S7682C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7682C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v15Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v16Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v17Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v18Ev,
  (VTBL_ENTRY)&_ZN8S7682C123v47Ev,
  (VTBL_ENTRY)&_ZN8S7682C123v48Ev,
  (VTBL_ENTRY)&_ZN8S7682C123v49Ev,
  (VTBL_ENTRY)&_ZN8S7682C123v50Ev,
};
extern void _ZN7S7682C32v8Ev();
extern void _ZN7S7682C32v9Ev();
extern void _ZN7S7682C33v10Ev();
extern void _ZN7S7682C33v11Ev();
extern void _ZN7S7682C43v12Ev();
extern void _ZN7S7682C43v13Ev();
extern void _ZN7S7682C43v14Ev();
extern void _ZN7S7682C23v15Ev();
extern void _ZN7S7682C23v16Ev();
extern void _ZN7S7682C23v17Ev();
extern void _ZN7S7682C23v18Ev();
static  VTBL_ENTRY _tg__ZTV7S7682C28S7682C12__8S7682C10[] = {
  ABISELECT(320,204),
  0,
  (VTBL_ENTRY)&(_ZTI7S7682C2[0]),
  (VTBL_ENTRY)&_ZN7S7682C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7682C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v15Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v16Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v17Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v18Ev,
};
extern void _ZN7S7682C32v8Ev();
extern void _ZN7S7682C32v9Ev();
extern void _ZN7S7682C33v10Ev();
extern void _ZN7S7682C33v11Ev();
static  VTBL_ENTRY _tg__ZTV7S7682C3__7S7682C28S7682C12__8S7682C10[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-320,-204),
  (VTBL_ENTRY)&(_ZTI7S7682C2[0]),
  (VTBL_ENTRY)&_ZN7S7682C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7682C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v11Ev,
};
extern void _ZN8S7682C133v42Ev();
extern void _ZN8S7682C133v43Ev();
extern void _ZN8S7682C133v44Ev();
extern void _ZN8S7682C133v45Ev();
extern void _ZN8S7682C133v46Ev();
static  VTBL_ENTRY _tg__ZTV8S7682C13__8S7682C12__8S7682C10[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(192,120),
  ABISELECT(32,12),
  ABISELECT(-288,-192),
  (VTBL_ENTRY)&(_ZTI8S7682C12[0]),
  (VTBL_ENTRY)&_ZN8S7682C133v42Ev,
  (VTBL_ENTRY)&_ZN8S7682C133v43Ev,
  (VTBL_ENTRY)&_ZN8S7682C133v44Ev,
  (VTBL_ENTRY)&_ZN8S7682C133v45Ev,
  (VTBL_ENTRY)&_ZN8S7682C133v46Ev,
};
extern void _ZN7S7682C32v8Ev();
extern void _ZN7S7682C32v9Ev();
extern void _ZN7S7682C33v10Ev();
extern void _ZN7S7682C33v11Ev();
static  VTBL_ENTRY _tg__ZTV7S7682C3__8S7682C12__8S7682C10[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-320,-204),
  (VTBL_ENTRY)&(_ZTI8S7682C12[0]),
  (VTBL_ENTRY)&_ZN7S7682C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7682C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v11Ev,
};
extern void _ZN7S7682C32v8Ev();
extern void _ZN7S7682C32v9Ev();
extern void _ZN7S7682C33v10Ev();
extern void _ZN7S7682C33v11Ev();
extern void _ZN7S7682C43v12Ev();
extern void _ZN7S7682C43v13Ev();
extern void _ZN7S7682C43v14Ev();
static  VTBL_ENTRY _tg__ZTV7S7682C4__8S7682C12__8S7682C10[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-480,-312),
  (VTBL_ENTRY)&(_ZTI8S7682C12[0]),
  (VTBL_ENTRY)&_ZN7S7682C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7682C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v14Ev,
};
extern void _ZN8S7682C133v42Ev();
extern void _ZN8S7682C133v43Ev();
extern void _ZN8S7682C133v44Ev();
extern void _ZN8S7682C133v45Ev();
extern void _ZN8S7682C133v46Ev();
static  VTBL_ENTRY _tg__ZTV8S7682C13__8S7682C10[] = {
  ABISELECT(192,120),
  ABISELECT(32,12),
  0,
  (VTBL_ENTRY)&(_ZTI8S7682C13[0]),
  (VTBL_ENTRY)&_ZN8S7682C133v42Ev,
  (VTBL_ENTRY)&_ZN8S7682C133v43Ev,
  (VTBL_ENTRY)&_ZN8S7682C133v44Ev,
  (VTBL_ENTRY)&_ZN8S7682C133v45Ev,
  (VTBL_ENTRY)&_ZN8S7682C133v46Ev,
};
extern void _ZN7S7682C32v8Ev();
extern void _ZN7S7682C32v9Ev();
extern void _ZN7S7682C33v10Ev();
extern void _ZN7S7682C33v11Ev();
static  VTBL_ENTRY _tg__ZTV7S7682C3__8S7682C13__8S7682C10[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-32,-12),
  (VTBL_ENTRY)&(_ZTI8S7682C13[0]),
  (VTBL_ENTRY)&_ZN7S7682C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7682C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v11Ev,
};
extern void _ZN7S7682C32v8Ev();
extern void _ZN7S7682C32v9Ev();
extern void _ZN7S7682C33v10Ev();
extern void _ZN7S7682C33v11Ev();
extern void _ZN7S7682C43v12Ev();
extern void _ZN7S7682C43v13Ev();
extern void _ZN7S7682C43v14Ev();
static  VTBL_ENTRY _tg__ZTV7S7682C4__8S7682C13__8S7682C10[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-192,-120),
  (VTBL_ENTRY)&(_ZTI8S7682C13[0]),
  (VTBL_ENTRY)&_ZN7S7682C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7682C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v14Ev,
};
static  VTT_ENTRY vtt_S7682C10[] = {
  {&(_ZTV8S7682C10[9]),  9,171},
  {&(_tg__ZTV8S7682C12__A__8S7682C10[5]),  5,20},
  {&(_tg__ZTV7S7682C28S7682C12__A1__8S7682C10[3]),  3,14},
  {&(_tg__ZTV7S7682C3__7S7682C28S7682C12__A1__8S7682C10[6]),  6,10},
  {&(_tg__ZTV8S7682C13__8S7682C12__A__8S7682C10[9]),  9,14},
  {&(_tg__ZTV7S7682C3__8S7682C12__A__8S7682C10[6]),  6,10},
  {&(_tg__ZTV7S7682C4__8S7682C12__A__8S7682C10[9]),  9,16},
  {&(_tg__ZTV8S7682C15__8S7682C10[6]),  6,19},
  {&(_tg__ZTV7S7682C3__8S7682C15__8S7682C10[6]),  6,10},
  {&(_tg__ZTV8S7682C13__8S7682C15__8S7682C10[9]),  9,14},
  {&(_tg__ZTV7S7682C4__8S7682C15__8S7682C10[9]),  9,16},
  {&(_tg__ZTV7S7682C9__8S7682C15__8S7682C10[11]),  11,20},
  {&(_ZTV8S7682C10[59]),  59,171},
  {&(_ZTV8S7682C10[72]),  72,171},
  {&(_ZTV8S7682C10[96]),  96,171},
  {&(_ZTV8S7682C10[120]),  120,171},
  {&(_ZTV8S7682C10[131]),  131,171},
  {&(_ZTV8S7682C10[144]),  144,171},
  {&(_ZTV8S7682C10[40]),  40,171},
  {&(_ZTV8S7682C10[162]),  162,171},
  {&(_tg__ZTV8S7682C11__8S7682C10[6]),  6,10},
  {&(_tg__ZTV8S7682C12__8S7682C11__8S7682C10[20]),  20,35},
  {&(_tg__ZTV8S7682C13__8S7682C11__8S7682C10[9]),  9,14},
  {&(_tg__ZTV7S7682C3__8S7682C11__8S7682C10[6]),  6,10},
  {&(_tg__ZTV7S7682C4__8S7682C11__8S7682C10[9]),  9,16},
  {&(_tg__ZTV8S7682C12__8S7682C10[5]),  5,20},
  {&(_tg__ZTV7S7682C28S7682C12__8S7682C10[3]),  3,14},
  {&(_tg__ZTV7S7682C3__7S7682C28S7682C12__8S7682C10[6]),  6,10},
  {&(_tg__ZTV8S7682C13__8S7682C12__8S7682C10[9]),  9,14},
  {&(_tg__ZTV7S7682C3__8S7682C12__8S7682C10[6]),  6,10},
  {&(_tg__ZTV7S7682C4__8S7682C12__8S7682C10[9]),  9,16},
  {&(_tg__ZTV8S7682C13__8S7682C10[4]),  4,9},
  {&(_tg__ZTV7S7682C3__8S7682C13__8S7682C10[6]),  6,10},
  {&(_tg__ZTV7S7682C4__8S7682C13__8S7682C10[9]),  9,16},
};
extern VTBL_ENTRY _ZTI8S7682C10[];
extern  VTBL_ENTRY _ZTV8S7682C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7682C10[];
static VTBL_ENTRY alt_thunk_names7[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S7682C10D0Ev,_ZTv0_n28_N8S7682C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn552_N8S7682C10D0Ev,_ZThn376_N8S7682C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S7682C10D1Ev,_ZTv0_n28_N8S7682C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn552_N8S7682C10D1Ev,_ZThn376_N8S7682C10D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7682C10 = {  "S7682C10", // class name
  bases_S7682C10, 18,
  &(vtc_S7682C10[0]), // expected_vtbl_contents
  &(vtt_S7682C10[0]), // expected_vtt_contents
  ABISELECT(2720,1752), // object size
  NSPAIRA(_ZTI8S7682C10),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S7682C10),171, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7682C10),34, //virtual table table var
  18, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names7,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7682C7  : virtual S7682C8_nt , S7682C9 , S7682C10 {
  int s7682c7f0[5];
  int s7682c7f1:15;
  virtual  ~S7682C7(); // _ZN7S7682C7D2Ev
  S7682C7(); // tgen
};
//SIG(-1 S7682C7) C1{ VBC2{ v1 v2 v3 v4} BC3{ v5 v6 v7 v8 v9 v10 v11 v12 v13 FC4{ BC5{ v14 v15 v16 v17 Fs:13 Fp FD[8]} v18 v19 v20 Fp[6]}[7]} BC6{ VBC2 VBC7{ VBC8{ VBC9{ VBC5 VBC4 v21 v22 v23 v24 v25 Fp[2]} BC10{ VBC5 BC4 v26 v27 v28 v29 Fp} v30 v31 v32 v33 FL[5] FC11{} FD} vd v34 v35} BC8 BC12{ VBC5 VBC9 VBC3 BC4 vd v36 v37 v38 v39 Fi} vd v40 v41 v42 v43 v44 v45 v46 v47 Fi[8] Fc FL} vd Fi[5] Fi:15}


 S7682C7 ::~S7682C7(){ note_dtor("S7682C7", this);}
S7682C7 ::S7682C7(){ note_ctor("S7682C7", this);} // tgen

static void Test_S7682C7()
{
  extern Class_Descriptor cd_S7682C7;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(265,677)];
    init_test(&cd_S7682C7, buf);
    S7682C7 *dp, &lv = *(dp=new (buf) S7682C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(4224,2704), "sizeof(S7682C7)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7682C7)");
    check_base_class_offset(lv, (S7682C8_nt*), ABISELECT(2040,1324), "S7682C7");
    check_base_class_offset(lv, (S7682C8_nt*)(S7682C10*), ABISELECT(2040,1324), "S7682C7");
    /*is_ambiguous_... S7682C7::S7682C9 */ AMB_check_base_class_offset(lv, (S7682C9*), 0, "S7682C7");
    /*is_ambiguous_... S7682C13::S7682C3 */ AMB_check_base_class_offset(lv, (S7682C3*)(S7682C13*), ABISELECT(2384,1536), "S7682C7");
    /*is_ambiguous_... S7682C7::S7682C12 */ AMB_check_base_class_offset(lv, (S7682C3*)(S7682C2*)(S7682C12*), ABISELECT(2384,1536), "S7682C7");
    /*is_ambiguous_... S7682C10::S7682C12 */ AMB_check_base_class_offset(lv, (S7682C3*)(S7682C2*)(S7682C12*)(S7682C10*), ABISELECT(2384,1536), "S7682C7");
    /*is_ambiguous_... S7682C15::S7682C3 */ AMB_check_base_class_offset(lv, (S7682C3*)(S7682C15*)(S7682C10*), ABISELECT(2384,1536), "S7682C7");
    /*is_ambiguous_... S7682C7::S7682C4 */ AMB_check_base_class_offset(lv, (S7682C3*)(S7682C4*), ABISELECT(2544,1644), "S7682C7");
    check_base_class_offset(lv, (S7682C4*)(S7682C13*), ABISELECT(2544,1644), "S7682C7");
    /*is_ambiguous_... S7682C7::S7682C12 */ AMB_check_base_class_offset(lv, (S7682C13*)(S7682C12*), ABISELECT(2352,1524), "S7682C7");
    /*is_ambiguous_... S7682C10::S7682C12 */ AMB_check_base_class_offset(lv, (S7682C13*)(S7682C12*)(S7682C10*), ABISELECT(2352,1524), "S7682C7");
    check_base_class_offset(lv, (S7682C13*)(S7682C15*)(S7682C10*), ABISELECT(2352,1524), "S7682C7");
    /*is_ambiguous_... S7682C7::S7682C12 */ AMB_check_base_class_offset(lv, (S7682C3*)(S7682C4*)(S7682C2*)(S7682C12*), ABISELECT(2064,1332), "S7682C7");
    /*is_ambiguous_... S7682C7::S7682C12 */ AMB_check_base_class_offset(lv, (S7682C4*)(S7682C2*)(S7682C12*), ABISELECT(2064,1332), "S7682C7");
    /*is_ambiguous_... S7682C7::S7682C12 */ AMB_check_base_class_offset(lv, (S7682C2*)(S7682C12*), ABISELECT(2064,1332), "S7682C7");
    check_base_class_offset(lv, (S7682C12*)(S7682C11*), ABISELECT(2064,1332), "S7682C7");
    check_base_class_offset(lv, (S7682C11*)(S7682C10*), ABISELECT(2048,1328), "S7682C7");
    /*is_ambiguous_... S7682C10::S7682C12 */ AMB_check_base_class_offset(lv, (S7682C3*)(S7682C4*)(S7682C2*)(S7682C12*)(S7682C10*), ABISELECT(1472,928), "S7682C7");
    /*is_ambiguous_... S7682C10::S7682C12 */ AMB_check_base_class_offset(lv, (S7682C4*)(S7682C2*)(S7682C12*)(S7682C10*), ABISELECT(1472,928), "S7682C7");
    /*is_ambiguous_... S7682C10::S7682C12 */ AMB_check_base_class_offset(lv, (S7682C2*)(S7682C12*)(S7682C10*), ABISELECT(1472,928), "S7682C7");
    /*is_ambiguous_... S7682C10::S7682C12 */ AMB_check_base_class_offset(lv, (S7682C12*)(S7682C10*), ABISELECT(1472,928), "S7682C7");
    check_base_class_offset(lv, (S7682C9*)(S7682C15*)(S7682C10*), ABISELECT(2752,1776), "S7682C7");
    /*is_ambiguous_... S7682C15::S7682C4 */ AMB_check_base_class_offset(lv, (S7682C3*)(S7682C4*)(S7682C15*)(S7682C10*), ABISELECT(1760,1120), "S7682C7");
    /*is_ambiguous_... S7682C15::S7682C4 */ AMB_check_base_class_offset(lv, (S7682C4*)(S7682C15*)(S7682C10*), ABISELECT(1760,1120), "S7682C7");
    check_base_class_offset(lv, (S7682C15*)(S7682C10*), ABISELECT(1760,1120), "S7682C7");
    check_base_class_offset(lv, (S7682C10*), ABISELECT(1472,928), "S7682C7");
    check_field_offset(lv, s7682c7f0, ABISELECT(2016,1300), "S7682C7.s7682c7f0");
    set_bf_and_test(lv, s7682c7f1, ABISELECT(2036,1320), 0, 15, 1, "S7682C7");
    set_bf_and_test(lv, s7682c7f1, ABISELECT(2036,1320), 0, 15, hide_sll(1LL<<14), "S7682C7");
    test_class_info(&lv, &cd_S7682C7);
    dp->~S7682C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7682C7(Test_S7682C7, "S7682C7", ABISELECT(4224,2704));

#else // __cplusplus

extern void _ZN7S7682C7C1Ev();
extern void _ZN7S7682C7D2Ev();
Name_Map name_map_S7682C7[] = {
  NSPAIR(_ZN7S7682C7C1Ev),
  NSPAIR(_ZN7S7682C7D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7682C8_nt;
extern VTBL_ENTRY _ZTI10S7682C8_nt[];
extern  VTBL_ENTRY _ZTV10S7682C8_nt[];
extern Class_Descriptor cd_S7682C9;
extern VTBL_ENTRY _ZTI7S7682C9[];
extern  VTBL_ENTRY _ZTV7S7682C9[];
extern Class_Descriptor cd_S7682C3;
extern VTBL_ENTRY _ZTI7S7682C3[];
extern  VTBL_ENTRY _ZTV7S7682C3[];
extern Class_Descriptor cd_S7682C3;
extern VTBL_ENTRY _ZTI7S7682C3[];
extern  VTBL_ENTRY _ZTV7S7682C3[];
extern Class_Descriptor cd_S7682C4;
extern VTBL_ENTRY _ZTI7S7682C4[];
extern  VTBL_ENTRY _ZTV7S7682C4[];
extern Class_Descriptor cd_S7682C13;
extern VTBL_ENTRY _ZTI8S7682C13[];
extern  VTBL_ENTRY _ZTV8S7682C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7682C13[];
extern Class_Descriptor cd_S7682C3;
extern VTBL_ENTRY _ZTI7S7682C3[];
extern  VTBL_ENTRY _ZTV7S7682C3[];
extern Class_Descriptor cd_S7682C4;
extern VTBL_ENTRY _ZTI7S7682C4[];
extern  VTBL_ENTRY _ZTV7S7682C4[];
extern Class_Descriptor cd_S7682C2;
extern VTBL_ENTRY _ZTI7S7682C2[];
extern  VTBL_ENTRY _ZTV7S7682C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7682C2[];
extern Class_Descriptor cd_S7682C12;
extern VTBL_ENTRY _ZTI8S7682C12[];
extern  VTBL_ENTRY _ZTV8S7682C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7682C12[];
extern Class_Descriptor cd_S7682C11;
extern VTBL_ENTRY _ZTI8S7682C11[];
extern  VTBL_ENTRY _ZTV8S7682C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7682C11[];
extern Class_Descriptor cd_S7682C3;
extern VTBL_ENTRY _ZTI7S7682C3[];
extern  VTBL_ENTRY _ZTV7S7682C3[];
extern Class_Descriptor cd_S7682C4;
extern VTBL_ENTRY _ZTI7S7682C4[];
extern  VTBL_ENTRY _ZTV7S7682C4[];
extern Class_Descriptor cd_S7682C2;
extern VTBL_ENTRY _ZTI7S7682C2[];
extern  VTBL_ENTRY _ZTV7S7682C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7682C2[];
extern Class_Descriptor cd_S7682C12;
extern VTBL_ENTRY _ZTI8S7682C12[];
extern  VTBL_ENTRY _ZTV8S7682C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7682C12[];
extern Class_Descriptor cd_S7682C9;
extern VTBL_ENTRY _ZTI7S7682C9[];
extern  VTBL_ENTRY _ZTV7S7682C9[];
extern Class_Descriptor cd_S7682C3;
extern VTBL_ENTRY _ZTI7S7682C3[];
extern  VTBL_ENTRY _ZTV7S7682C3[];
extern Class_Descriptor cd_S7682C4;
extern VTBL_ENTRY _ZTI7S7682C4[];
extern  VTBL_ENTRY _ZTV7S7682C4[];
extern Class_Descriptor cd_S7682C15;
extern VTBL_ENTRY _ZTI8S7682C15[];
extern  VTBL_ENTRY _ZTV8S7682C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7682C15[];
extern Class_Descriptor cd_S7682C10;
extern VTBL_ENTRY _ZTI8S7682C10[];
extern  VTBL_ENTRY _ZTV8S7682C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7682C10[];
static Base_Class bases_S7682C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7682C8_nt,    ABISELECT(2040,1324), //bcp->offset
    73, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    22, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7682C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7682C3,    ABISELECT(2384,1536), //bcp->offset
    145, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    27, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S7682C3,    ABISELECT(2544,1644), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S7682C4,    ABISELECT(2544,1644), //bcp->offset
    155, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    28, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S7682C13,    ABISELECT(2352,1524), //bcp->offset
    131, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    26, //bcp->index_in_construction_vtbl_array
    42, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S7682C3,    ABISELECT(2064,1332), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S7682C4,    ABISELECT(2064,1332), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S7682C2,    ABISELECT(2064,1332), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    37, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S7682C12,    ABISELECT(2064,1332), //bcp->offset
    96, //bcp->virtual_function_table_offset
    20, //num_negative_vtable_entries(t, bcp)
    25, //bcp->index_in_construction_vtbl_array
    36, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S7682C11,    ABISELECT(2048,1328), //bcp->offset
    83, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    24, //bcp->index_in_construction_vtbl_array
    31, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    19, //immediately_derived
  0, 1},
  {&cd_S7682C3,    ABISELECT(1472,928), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S7682C4,    ABISELECT(1472,928), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S7682C2,    ABISELECT(1472,928), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S7682C12,    ABISELECT(1472,928), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S7682C9,    ABISELECT(2752,1776), //bcp->offset
    171, //bcp->virtual_function_table_offset
    11, //num_negative_vtable_entries(t, bcp)
    30, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    18, //immediately_derived
  0, 1},
  {&cd_S7682C3,    ABISELECT(1760,1120), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S7682C4,    ABISELECT(1760,1120), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S7682C15,    ABISELECT(1760,1120), //bcp->offset
    54, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    29, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S7682C10,    ABISELECT(1472,928), //bcp->offset
    20, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    23, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    20, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7682C7[];
extern void _ZN7S7682C93v33Ev();
extern void _ZN7S7682C93v34Ev();
extern void _ZN7S7682C93v35Ev();
extern void _ZN7S7682C93v36Ev();
extern void _ZN7S7682C93v37Ev();
extern void _ZN7S7682C93v38Ev();
extern void _ZN7S7682C93v39Ev();
extern void _ZN7S7682C93v40Ev();
extern void _ZN7S7682C93v41Ev();
extern void _ZN7S7682C7D1Ev();
extern void _ZN7S7682C7D0Ev();
extern void _ZN7S7682C32v8Ev();
extern void _ZN7S7682C32v9Ev();
extern void _ZN7S7682C33v10Ev();
extern void _ZN7S7682C33v11Ev();
extern void _ZN7S7682C43v12Ev();
extern void _ZN7S7682C43v13Ev();
extern void _ZN7S7682C43v14Ev();
extern void _ZN7S7682C23v15Ev();
extern void _ZN7S7682C23v16Ev();
extern void _ZN7S7682C23v17Ev();
extern void _ZN7S7682C23v18Ev();
extern void _ZN8S7682C123v47Ev();
extern void _ZN8S7682C123v48Ev();
extern void _ZN8S7682C123v49Ev();
extern void _ZN8S7682C123v50Ev();
extern void ABISELECT(_ZThn1472_N7S7682C7D1Ev,_ZThn928_N7S7682C7D1Ev)();
extern void ABISELECT(_ZThn1472_N7S7682C7D0Ev,_ZThn928_N7S7682C7D0Ev)();
extern void _ZN8S7682C103v57Ev();
extern void _ZN8S7682C103v58Ev();
extern void _ZN8S7682C103v59Ev();
extern void _ZN8S7682C103v60Ev();
extern void _ZN8S7682C103v61Ev();
extern void _ZN8S7682C103v62Ev();
extern void _ZN8S7682C103v63Ev();
extern void _ZN8S7682C103v64Ev();
extern void _ZN7S7682C32v8Ev();
extern void _ZN7S7682C32v9Ev();
extern void _ZN7S7682C33v10Ev();
extern void _ZN7S7682C33v11Ev();
extern void _ZN7S7682C43v12Ev();
extern void _ZN7S7682C43v13Ev();
extern void _ZN7S7682C43v14Ev();
extern void ABISELECT(_ZThn1760_N7S7682C7D1Ev,_ZThn1120_N7S7682C7D1Ev)();
extern void ABISELECT(_ZThn1760_N7S7682C7D0Ev,_ZThn1120_N7S7682C7D0Ev)();
extern void _ZN8S7682C153v53Ev();
extern void _ZN8S7682C153v54Ev();
extern void _ZN8S7682C153v55Ev();
extern void _ZN8S7682C153v56Ev();
extern void _ZN10S7682C8_nt3v29Ev();
extern void _ZN10S7682C8_nt3v30Ev();
extern void _ZN10S7682C8_nt3v31Ev();
extern void _ZN10S7682C8_nt3v32Ev();
extern void ABISELECT(_ZTv0_n56_N7S7682C7D1Ev,_ZTv0_n28_N7S7682C7D1Ev)();
extern void ABISELECT(_ZThn2048_N7S7682C7D1Ev,_ZThn1328_N7S7682C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N7S7682C7D0Ev,_ZTv0_n28_N7S7682C7D0Ev)();
extern void ABISELECT(_ZThn2048_N7S7682C7D0Ev,_ZThn1328_N7S7682C7D0Ev)() __attribute__((weak));
extern void _ZN8S7682C113v51Ev();
extern void _ZN8S7682C113v52Ev();
extern void _ZN7S7682C32v8Ev();
extern void _ZN7S7682C32v9Ev();
extern void _ZN7S7682C33v10Ev();
extern void _ZN7S7682C33v11Ev();
extern void _ZN7S7682C43v12Ev();
extern void _ZN7S7682C43v13Ev();
extern void _ZN7S7682C43v14Ev();
extern void _ZN7S7682C23v15Ev();
extern void _ZN7S7682C23v16Ev();
extern void _ZN7S7682C23v17Ev();
extern void _ZN7S7682C23v18Ev();
extern void _ZN8S7682C123v47Ev();
extern void _ZN8S7682C123v48Ev();
extern void _ZN8S7682C123v49Ev();
extern void _ZN8S7682C123v50Ev();
extern void _ZN8S7682C133v42Ev();
extern void _ZN8S7682C133v43Ev();
extern void _ZN8S7682C133v44Ev();
extern void _ZN8S7682C133v45Ev();
extern void _ZN8S7682C133v46Ev();
extern void _ZN7S7682C32v8Ev();
extern void _ZN7S7682C32v9Ev();
extern void _ZN7S7682C33v10Ev();
extern void _ZN7S7682C33v11Ev();
extern void _ZN7S7682C32v8Ev();
extern void _ZN7S7682C32v9Ev();
extern void _ZN7S7682C33v10Ev();
extern void _ZN7S7682C33v11Ev();
extern void _ZN7S7682C43v12Ev();
extern void _ZN7S7682C43v13Ev();
extern void _ZN7S7682C43v14Ev();
extern void _ZN7S7682C93v33Ev();
extern void _ZN7S7682C93v34Ev();
extern void _ZN7S7682C93v35Ev();
extern void _ZN7S7682C93v36Ev();
extern void _ZN7S7682C93v37Ev();
extern void _ZN7S7682C93v38Ev();
extern void _ZN7S7682C93v39Ev();
extern void _ZN7S7682C93v40Ev();
extern void _ZN7S7682C93v41Ev();
static  VTBL_ENTRY vtc_S7682C7[] = {
  ABISELECT(2752,1776),
  ABISELECT(2544,1644),
  ABISELECT(2384,1536),
  ABISELECT(2352,1524),
  ABISELECT(2064,1332),
  ABISELECT(2048,1328),
  ABISELECT(2040,1324),
  0,
  (VTBL_ENTRY)&(_ZTI7S7682C7[0]),
  (VTBL_ENTRY)&_ZN7S7682C93v33Ev,
  (VTBL_ENTRY)&_ZN7S7682C93v34Ev,
  (VTBL_ENTRY)&_ZN7S7682C93v35Ev,
  (VTBL_ENTRY)&_ZN7S7682C93v36Ev,
  (VTBL_ENTRY)&_ZN7S7682C93v37Ev,
  (VTBL_ENTRY)&_ZN7S7682C93v38Ev,
  (VTBL_ENTRY)&_ZN7S7682C93v39Ev,
  (VTBL_ENTRY)&_ZN7S7682C93v40Ev,
  (VTBL_ENTRY)&_ZN7S7682C93v41Ev,
  (VTBL_ENTRY)&_ZN7S7682C7D1Ev,
  (VTBL_ENTRY)&_ZN7S7682C7D0Ev,
  ABISELECT(1280,848),
  ABISELECT(592,404),
  ABISELECT(576,400),
  ABISELECT(568,396),
  ABISELECT(1072,716),
  ABISELECT(880,596),
  ABISELECT(912,608),
  ABISELECT(-1472,-928),
  (VTBL_ENTRY)&(_ZTI7S7682C7[0]),
  (VTBL_ENTRY)&_ZN7S7682C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7682C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v15Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v16Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v17Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v18Ev,
  (VTBL_ENTRY)&_ZN8S7682C123v47Ev,
  (VTBL_ENTRY)&_ZN8S7682C123v48Ev,
  (VTBL_ENTRY)&_ZN8S7682C123v49Ev,
  (VTBL_ENTRY)&_ZN8S7682C123v50Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn1472_N7S7682C7D1Ev,_ZThn928_N7S7682C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1472_N7S7682C7D0Ev,_ZThn928_N7S7682C7D0Ev),
  (VTBL_ENTRY)&_ZN8S7682C103v57Ev,
  (VTBL_ENTRY)&_ZN8S7682C103v58Ev,
  (VTBL_ENTRY)&_ZN8S7682C103v59Ev,
  (VTBL_ENTRY)&_ZN8S7682C103v60Ev,
  (VTBL_ENTRY)&_ZN8S7682C103v61Ev,
  (VTBL_ENTRY)&_ZN8S7682C103v62Ev,
  (VTBL_ENTRY)&_ZN8S7682C103v63Ev,
  (VTBL_ENTRY)&_ZN8S7682C103v64Ev,
  ABISELECT(992,656),
  ABISELECT(784,524),
  ABISELECT(592,404),
  ABISELECT(624,416),
  ABISELECT(-1760,-1120),
  (VTBL_ENTRY)&(_ZTI7S7682C7[0]),
  (VTBL_ENTRY)&_ZN7S7682C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7682C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v14Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn1760_N7S7682C7D1Ev,_ZThn1120_N7S7682C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1760_N7S7682C7D0Ev,_ZThn1120_N7S7682C7D0Ev),
  (VTBL_ENTRY)&_ZN8S7682C153v53Ev,
  (VTBL_ENTRY)&_ZN8S7682C153v54Ev,
  (VTBL_ENTRY)&_ZN8S7682C153v55Ev,
  (VTBL_ENTRY)&_ZN8S7682C153v56Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-2040,-1324),
  (VTBL_ENTRY)&(_ZTI7S7682C7[0]),
  (VTBL_ENTRY)&_ZN10S7682C8_nt3v29Ev,
  (VTBL_ENTRY)&_ZN10S7682C8_nt3v30Ev,
  (VTBL_ENTRY)&_ZN10S7682C8_nt3v31Ev,
  (VTBL_ENTRY)&_ZN10S7682C8_nt3v32Ev,
  0,
  0,
  ABISELECT(-2048,-1328),
  ABISELECT(496,316),
  ABISELECT(336,208),
  ABISELECT(304,196),
  ABISELECT(16,4),
  ABISELECT(-2048,-1328),
  (VTBL_ENTRY)&(_ZTI7S7682C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N7S7682C7D1Ev,_ZTv0_n28_N7S7682C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N7S7682C7D0Ev,_ZTv0_n28_N7S7682C7D0Ev),
  (VTBL_ENTRY)&_ZN8S7682C113v51Ev,
  (VTBL_ENTRY)&_ZN8S7682C113v52Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(480,312),
  ABISELECT(288,192),
  ABISELECT(320,204),
  ABISELECT(-2064,-1332),
  (VTBL_ENTRY)&(_ZTI7S7682C7[0]),
  (VTBL_ENTRY)&_ZN7S7682C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7682C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v15Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v16Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v17Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v18Ev,
  (VTBL_ENTRY)&_ZN8S7682C123v47Ev,
  (VTBL_ENTRY)&_ZN8S7682C123v48Ev,
  (VTBL_ENTRY)&_ZN8S7682C123v49Ev,
  (VTBL_ENTRY)&_ZN8S7682C123v50Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(192,120),
  ABISELECT(32,12),
  ABISELECT(-2352,-1524),
  (VTBL_ENTRY)&(_ZTI7S7682C7[0]),
  (VTBL_ENTRY)&_ZN8S7682C133v42Ev,
  (VTBL_ENTRY)&_ZN8S7682C133v43Ev,
  (VTBL_ENTRY)&_ZN8S7682C133v44Ev,
  (VTBL_ENTRY)&_ZN8S7682C133v45Ev,
  (VTBL_ENTRY)&_ZN8S7682C133v46Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-2384,-1536),
  (VTBL_ENTRY)&(_ZTI7S7682C7[0]),
  (VTBL_ENTRY)&_ZN7S7682C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7682C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v11Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-2544,-1644),
  (VTBL_ENTRY)&(_ZTI7S7682C7[0]),
  (VTBL_ENTRY)&_ZN7S7682C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7682C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v14Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-2752,-1776),
  (VTBL_ENTRY)&(_ZTI7S7682C7[0]),
  (VTBL_ENTRY)&_ZN7S7682C93v33Ev,
  (VTBL_ENTRY)&_ZN7S7682C93v34Ev,
  (VTBL_ENTRY)&_ZN7S7682C93v35Ev,
  (VTBL_ENTRY)&_ZN7S7682C93v36Ev,
  (VTBL_ENTRY)&_ZN7S7682C93v37Ev,
  (VTBL_ENTRY)&_ZN7S7682C93v38Ev,
  (VTBL_ENTRY)&_ZN7S7682C93v39Ev,
  (VTBL_ENTRY)&_ZN7S7682C93v40Ev,
  (VTBL_ENTRY)&_ZN7S7682C93v41Ev,
};
extern VTBL_ENTRY _ZTV7S7682C7[];
extern void _ZN7S7682C32v8Ev();
extern void _ZN7S7682C32v9Ev();
extern void _ZN7S7682C33v10Ev();
extern void _ZN7S7682C33v11Ev();
extern void _ZN7S7682C43v12Ev();
extern void _ZN7S7682C43v13Ev();
extern void _ZN7S7682C43v14Ev();
extern void _ZN7S7682C23v15Ev();
extern void _ZN7S7682C23v16Ev();
extern void _ZN7S7682C23v17Ev();
extern void _ZN7S7682C23v18Ev();
extern void _ZN8S7682C123v47Ev();
extern void _ZN8S7682C123v48Ev();
extern void _ZN8S7682C123v49Ev();
extern void _ZN8S7682C123v50Ev();
extern void _ZN8S7682C10D1Ev();
extern void _ZN8S7682C10D0Ev();
extern void _ZN8S7682C103v57Ev();
extern void _ZN8S7682C103v58Ev();
extern void _ZN8S7682C103v59Ev();
extern void _ZN8S7682C103v60Ev();
extern void _ZN8S7682C103v61Ev();
extern void _ZN8S7682C103v62Ev();
extern void _ZN8S7682C103v63Ev();
extern void _ZN8S7682C103v64Ev();
static  VTBL_ENTRY _tg__ZTV8S7682C10__7S7682C7[] = {
  ABISELECT(1280,848),
  ABISELECT(592,404),
  ABISELECT(576,400),
  ABISELECT(568,396),
  ABISELECT(1072,716),
  ABISELECT(880,596),
  ABISELECT(912,608),
  0,
  (VTBL_ENTRY)&(_ZTI8S7682C10[0]),
  (VTBL_ENTRY)&_ZN7S7682C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7682C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v15Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v16Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v17Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v18Ev,
  (VTBL_ENTRY)&_ZN8S7682C123v47Ev,
  (VTBL_ENTRY)&_ZN8S7682C123v48Ev,
  (VTBL_ENTRY)&_ZN8S7682C123v49Ev,
  (VTBL_ENTRY)&_ZN8S7682C123v50Ev,
  (VTBL_ENTRY)&_ZN8S7682C10D1Ev,
  (VTBL_ENTRY)&_ZN8S7682C10D0Ev,
  (VTBL_ENTRY)&_ZN8S7682C103v57Ev,
  (VTBL_ENTRY)&_ZN8S7682C103v58Ev,
  (VTBL_ENTRY)&_ZN8S7682C103v59Ev,
  (VTBL_ENTRY)&_ZN8S7682C103v60Ev,
  (VTBL_ENTRY)&_ZN8S7682C103v61Ev,
  (VTBL_ENTRY)&_ZN8S7682C103v62Ev,
  (VTBL_ENTRY)&_ZN8S7682C103v63Ev,
  (VTBL_ENTRY)&_ZN8S7682C103v64Ev,
};
extern void _ZN7S7682C32v8Ev();
extern void _ZN7S7682C32v9Ev();
extern void _ZN7S7682C33v10Ev();
extern void _ZN7S7682C33v11Ev();
extern void _ZN7S7682C43v12Ev();
extern void _ZN7S7682C43v13Ev();
extern void _ZN7S7682C43v14Ev();
extern void _ZN7S7682C23v15Ev();
extern void _ZN7S7682C23v16Ev();
extern void _ZN7S7682C23v17Ev();
extern void _ZN7S7682C23v18Ev();
extern void _ZN8S7682C123v47Ev();
extern void _ZN8S7682C123v48Ev();
extern void _ZN8S7682C123v49Ev();
extern void _ZN8S7682C123v50Ev();
static  VTBL_ENTRY _tg__ZTV8S7682C128S7682C10__A1__7S7682C7[] = {
  ABISELECT(1072,716),
  ABISELECT(880,596),
  ABISELECT(912,608),
  0,
  (VTBL_ENTRY)&(_ZTI8S7682C12[0]),
  (VTBL_ENTRY)&_ZN7S7682C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7682C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v15Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v16Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v17Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v18Ev,
  (VTBL_ENTRY)&_ZN8S7682C123v47Ev,
  (VTBL_ENTRY)&_ZN8S7682C123v48Ev,
  (VTBL_ENTRY)&_ZN8S7682C123v49Ev,
  (VTBL_ENTRY)&_ZN8S7682C123v50Ev,
};
extern void _ZN7S7682C32v8Ev();
extern void _ZN7S7682C32v9Ev();
extern void _ZN7S7682C33v10Ev();
extern void _ZN7S7682C33v11Ev();
extern void _ZN7S7682C43v12Ev();
extern void _ZN7S7682C43v13Ev();
extern void _ZN7S7682C43v14Ev();
extern void _ZN7S7682C23v15Ev();
extern void _ZN7S7682C23v16Ev();
extern void _ZN7S7682C23v17Ev();
extern void _ZN7S7682C23v18Ev();
static  VTBL_ENTRY _tg__ZTV7S7682C28S7682C128S7682C10__A1__7S7682C7[] = {
  ABISELECT(912,608),
  0,
  (VTBL_ENTRY)&(_ZTI7S7682C2[0]),
  (VTBL_ENTRY)&_ZN7S7682C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7682C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v15Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v16Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v17Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v18Ev,
};
extern void _ZN7S7682C32v8Ev();
extern void _ZN7S7682C32v9Ev();
extern void _ZN7S7682C33v10Ev();
extern void _ZN7S7682C33v11Ev();
static  VTBL_ENTRY _tg__ZTV7S7682C3__7S7682C28S7682C128S7682C10__A1__7S7682C7[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-912,-608),
  (VTBL_ENTRY)&(_ZTI7S7682C2[0]),
  (VTBL_ENTRY)&_ZN7S7682C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7682C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v11Ev,
};
extern void _ZN8S7682C133v42Ev();
extern void _ZN8S7682C133v43Ev();
extern void _ZN8S7682C133v44Ev();
extern void _ZN8S7682C133v45Ev();
extern void _ZN8S7682C133v46Ev();
static  VTBL_ENTRY _tg__ZTV8S7682C13__8S7682C128S7682C10__A1__7S7682C7[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(192,120),
  ABISELECT(32,12),
  ABISELECT(-880,-596),
  (VTBL_ENTRY)&(_ZTI8S7682C12[0]),
  (VTBL_ENTRY)&_ZN8S7682C133v42Ev,
  (VTBL_ENTRY)&_ZN8S7682C133v43Ev,
  (VTBL_ENTRY)&_ZN8S7682C133v44Ev,
  (VTBL_ENTRY)&_ZN8S7682C133v45Ev,
  (VTBL_ENTRY)&_ZN8S7682C133v46Ev,
};
extern void _ZN7S7682C32v8Ev();
extern void _ZN7S7682C32v9Ev();
extern void _ZN7S7682C33v10Ev();
extern void _ZN7S7682C33v11Ev();
static  VTBL_ENTRY _tg__ZTV7S7682C3__8S7682C128S7682C10__A1__7S7682C7[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-912,-608),
  (VTBL_ENTRY)&(_ZTI8S7682C12[0]),
  (VTBL_ENTRY)&_ZN7S7682C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7682C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v11Ev,
};
extern void _ZN7S7682C32v8Ev();
extern void _ZN7S7682C32v9Ev();
extern void _ZN7S7682C33v10Ev();
extern void _ZN7S7682C33v11Ev();
extern void _ZN7S7682C43v12Ev();
extern void _ZN7S7682C43v13Ev();
extern void _ZN7S7682C43v14Ev();
static  VTBL_ENTRY _tg__ZTV7S7682C4__8S7682C128S7682C10__A1__7S7682C7[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-1072,-716),
  (VTBL_ENTRY)&(_ZTI8S7682C12[0]),
  (VTBL_ENTRY)&_ZN7S7682C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7682C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v14Ev,
};
extern void _ZN7S7682C32v8Ev();
extern void _ZN7S7682C32v9Ev();
extern void _ZN7S7682C33v10Ev();
extern void _ZN7S7682C33v11Ev();
extern void _ZN7S7682C43v12Ev();
extern void _ZN7S7682C43v13Ev();
extern void _ZN7S7682C43v14Ev();
extern void _ZN8S7682C15D1Ev();
extern void _ZN8S7682C15D0Ev();
extern void _ZN8S7682C153v53Ev();
extern void _ZN8S7682C153v54Ev();
extern void _ZN8S7682C153v55Ev();
extern void _ZN8S7682C153v56Ev();
static  VTBL_ENTRY _tg__ZTV8S7682C158S7682C10__7S7682C7[] = {
  ABISELECT(992,656),
  ABISELECT(784,524),
  ABISELECT(592,404),
  ABISELECT(624,416),
  0,
  (VTBL_ENTRY)&(_ZTI8S7682C15[0]),
  (VTBL_ENTRY)&_ZN7S7682C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7682C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v14Ev,
  (VTBL_ENTRY)&_ZN8S7682C15D1Ev,
  (VTBL_ENTRY)&_ZN8S7682C15D0Ev,
  (VTBL_ENTRY)&_ZN8S7682C153v53Ev,
  (VTBL_ENTRY)&_ZN8S7682C153v54Ev,
  (VTBL_ENTRY)&_ZN8S7682C153v55Ev,
  (VTBL_ENTRY)&_ZN8S7682C153v56Ev,
};
extern void _ZN7S7682C32v8Ev();
extern void _ZN7S7682C32v9Ev();
extern void _ZN7S7682C33v10Ev();
extern void _ZN7S7682C33v11Ev();
static  VTBL_ENTRY _tg__ZTV7S7682C3__8S7682C158S7682C10__7S7682C7[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-624,-416),
  (VTBL_ENTRY)&(_ZTI8S7682C15[0]),
  (VTBL_ENTRY)&_ZN7S7682C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7682C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v11Ev,
};
extern void _ZN8S7682C133v42Ev();
extern void _ZN8S7682C133v43Ev();
extern void _ZN8S7682C133v44Ev();
extern void _ZN8S7682C133v45Ev();
extern void _ZN8S7682C133v46Ev();
static  VTBL_ENTRY _tg__ZTV8S7682C13__8S7682C158S7682C10__7S7682C7[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(192,120),
  ABISELECT(32,12),
  ABISELECT(-592,-404),
  (VTBL_ENTRY)&(_ZTI8S7682C15[0]),
  (VTBL_ENTRY)&_ZN8S7682C133v42Ev,
  (VTBL_ENTRY)&_ZN8S7682C133v43Ev,
  (VTBL_ENTRY)&_ZN8S7682C133v44Ev,
  (VTBL_ENTRY)&_ZN8S7682C133v45Ev,
  (VTBL_ENTRY)&_ZN8S7682C133v46Ev,
};
extern void _ZN7S7682C32v8Ev();
extern void _ZN7S7682C32v9Ev();
extern void _ZN7S7682C33v10Ev();
extern void _ZN7S7682C33v11Ev();
extern void _ZN7S7682C43v12Ev();
extern void _ZN7S7682C43v13Ev();
extern void _ZN7S7682C43v14Ev();
static  VTBL_ENTRY _tg__ZTV7S7682C4__8S7682C158S7682C10__7S7682C7[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-784,-524),
  (VTBL_ENTRY)&(_ZTI8S7682C15[0]),
  (VTBL_ENTRY)&_ZN7S7682C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7682C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v14Ev,
};
extern void _ZN7S7682C93v33Ev();
extern void _ZN7S7682C93v34Ev();
extern void _ZN7S7682C93v35Ev();
extern void _ZN7S7682C93v36Ev();
extern void _ZN7S7682C93v37Ev();
extern void _ZN7S7682C93v38Ev();
extern void _ZN7S7682C93v39Ev();
extern void _ZN7S7682C93v40Ev();
extern void _ZN7S7682C93v41Ev();
static  VTBL_ENTRY _tg__ZTV7S7682C9__8S7682C158S7682C10__7S7682C7[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-992,-656),
  (VTBL_ENTRY)&(_ZTI8S7682C15[0]),
  (VTBL_ENTRY)&_ZN7S7682C93v33Ev,
  (VTBL_ENTRY)&_ZN7S7682C93v34Ev,
  (VTBL_ENTRY)&_ZN7S7682C93v35Ev,
  (VTBL_ENTRY)&_ZN7S7682C93v36Ev,
  (VTBL_ENTRY)&_ZN7S7682C93v37Ev,
  (VTBL_ENTRY)&_ZN7S7682C93v38Ev,
  (VTBL_ENTRY)&_ZN7S7682C93v39Ev,
  (VTBL_ENTRY)&_ZN7S7682C93v40Ev,
  (VTBL_ENTRY)&_ZN7S7682C93v41Ev,
};
extern void _ZN10S7682C8_nt3v29Ev();
extern void _ZN10S7682C8_nt3v30Ev();
extern void _ZN10S7682C8_nt3v31Ev();
extern void _ZN10S7682C8_nt3v32Ev();
static  VTBL_ENTRY _tg__ZTV10S7682C8_nt__8S7682C10__7S7682C7[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-568,-396),
  (VTBL_ENTRY)&(_ZTI8S7682C10[0]),
  (VTBL_ENTRY)&_ZN10S7682C8_nt3v29Ev,
  (VTBL_ENTRY)&_ZN10S7682C8_nt3v30Ev,
  (VTBL_ENTRY)&_ZN10S7682C8_nt3v31Ev,
  (VTBL_ENTRY)&_ZN10S7682C8_nt3v32Ev,
};
extern void ABISELECT(_ZTv0_n56_N8S7682C10D1Ev,_ZTv0_n28_N8S7682C10D1Ev)();
extern void ABISELECT(_ZThn576_N8S7682C10D1Ev,_ZThn400_N8S7682C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S7682C10D0Ev,_ZTv0_n28_N8S7682C10D0Ev)();
extern void ABISELECT(_ZThn576_N8S7682C10D0Ev,_ZThn400_N8S7682C10D0Ev)() __attribute__((weak));
extern void _ZN8S7682C113v51Ev();
extern void _ZN8S7682C113v52Ev();
static  VTBL_ENTRY _tg__ZTV8S7682C11__8S7682C10__7S7682C7[] = {
  0,
  0,
  ABISELECT(-576,-400),
  ABISELECT(496,316),
  ABISELECT(336,208),
  ABISELECT(304,196),
  ABISELECT(16,4),
  ABISELECT(-576,-400),
  (VTBL_ENTRY)&(_ZTI8S7682C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S7682C10D1Ev,_ZTv0_n28_N8S7682C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S7682C10D0Ev,_ZTv0_n28_N8S7682C10D0Ev),
  (VTBL_ENTRY)&_ZN8S7682C113v51Ev,
  (VTBL_ENTRY)&_ZN8S7682C113v52Ev,
};
extern void _ZN7S7682C32v8Ev();
extern void _ZN7S7682C32v9Ev();
extern void _ZN7S7682C33v10Ev();
extern void _ZN7S7682C33v11Ev();
extern void _ZN7S7682C43v12Ev();
extern void _ZN7S7682C43v13Ev();
extern void _ZN7S7682C43v14Ev();
extern void _ZN7S7682C23v15Ev();
extern void _ZN7S7682C23v16Ev();
extern void _ZN7S7682C23v17Ev();
extern void _ZN7S7682C23v18Ev();
extern void _ZN8S7682C123v47Ev();
extern void _ZN8S7682C123v48Ev();
extern void _ZN8S7682C123v49Ev();
extern void _ZN8S7682C123v50Ev();
static  VTBL_ENTRY _tg__ZTV8S7682C12__8S7682C10__7S7682C7[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(480,312),
  ABISELECT(288,192),
  ABISELECT(320,204),
  ABISELECT(-592,-404),
  (VTBL_ENTRY)&(_ZTI8S7682C10[0]),
  (VTBL_ENTRY)&_ZN7S7682C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7682C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v15Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v16Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v17Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v18Ev,
  (VTBL_ENTRY)&_ZN8S7682C123v47Ev,
  (VTBL_ENTRY)&_ZN8S7682C123v48Ev,
  (VTBL_ENTRY)&_ZN8S7682C123v49Ev,
  (VTBL_ENTRY)&_ZN8S7682C123v50Ev,
};
extern void _ZN8S7682C133v42Ev();
extern void _ZN8S7682C133v43Ev();
extern void _ZN8S7682C133v44Ev();
extern void _ZN8S7682C133v45Ev();
extern void _ZN8S7682C133v46Ev();
static  VTBL_ENTRY _tg__ZTV8S7682C13__8S7682C10__7S7682C7[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(192,120),
  ABISELECT(32,12),
  ABISELECT(-880,-596),
  (VTBL_ENTRY)&(_ZTI8S7682C10[0]),
  (VTBL_ENTRY)&_ZN8S7682C133v42Ev,
  (VTBL_ENTRY)&_ZN8S7682C133v43Ev,
  (VTBL_ENTRY)&_ZN8S7682C133v44Ev,
  (VTBL_ENTRY)&_ZN8S7682C133v45Ev,
  (VTBL_ENTRY)&_ZN8S7682C133v46Ev,
};
extern void _ZN7S7682C32v8Ev();
extern void _ZN7S7682C32v9Ev();
extern void _ZN7S7682C33v10Ev();
extern void _ZN7S7682C33v11Ev();
static  VTBL_ENTRY _tg__ZTV7S7682C3__8S7682C10__7S7682C7[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-912,-608),
  (VTBL_ENTRY)&(_ZTI8S7682C10[0]),
  (VTBL_ENTRY)&_ZN7S7682C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7682C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v11Ev,
};
extern void _ZN7S7682C32v8Ev();
extern void _ZN7S7682C32v9Ev();
extern void _ZN7S7682C33v10Ev();
extern void _ZN7S7682C33v11Ev();
extern void _ZN7S7682C43v12Ev();
extern void _ZN7S7682C43v13Ev();
extern void _ZN7S7682C43v14Ev();
static  VTBL_ENTRY _tg__ZTV7S7682C4__8S7682C10__7S7682C7[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-1072,-716),
  (VTBL_ENTRY)&(_ZTI8S7682C10[0]),
  (VTBL_ENTRY)&_ZN7S7682C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7682C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v14Ev,
};
extern void _ZN7S7682C32v8Ev();
extern void _ZN7S7682C32v9Ev();
extern void _ZN7S7682C33v10Ev();
extern void _ZN7S7682C33v11Ev();
extern void _ZN7S7682C43v12Ev();
extern void _ZN7S7682C43v13Ev();
extern void _ZN7S7682C43v14Ev();
extern void ABISELECT(_ZThn288_N8S7682C10D1Ev,_ZThn192_N8S7682C10D1Ev)();
extern void ABISELECT(_ZThn288_N8S7682C10D0Ev,_ZThn192_N8S7682C10D0Ev)();
extern void _ZN8S7682C153v53Ev();
extern void _ZN8S7682C153v54Ev();
extern void _ZN8S7682C153v55Ev();
extern void _ZN8S7682C153v56Ev();
static  VTBL_ENTRY _tg__ZTV8S7682C15__8S7682C10__7S7682C7[] = {
  ABISELECT(992,656),
  ABISELECT(784,524),
  ABISELECT(592,404),
  ABISELECT(624,416),
  ABISELECT(-288,-192),
  (VTBL_ENTRY)&(_ZTI8S7682C10[0]),
  (VTBL_ENTRY)&_ZN7S7682C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7682C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v14Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn288_N8S7682C10D1Ev,_ZThn192_N8S7682C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn288_N8S7682C10D0Ev,_ZThn192_N8S7682C10D0Ev),
  (VTBL_ENTRY)&_ZN8S7682C153v53Ev,
  (VTBL_ENTRY)&_ZN8S7682C153v54Ev,
  (VTBL_ENTRY)&_ZN8S7682C153v55Ev,
  (VTBL_ENTRY)&_ZN8S7682C153v56Ev,
};
extern void _ZN7S7682C93v33Ev();
extern void _ZN7S7682C93v34Ev();
extern void _ZN7S7682C93v35Ev();
extern void _ZN7S7682C93v36Ev();
extern void _ZN7S7682C93v37Ev();
extern void _ZN7S7682C93v38Ev();
extern void _ZN7S7682C93v39Ev();
extern void _ZN7S7682C93v40Ev();
extern void _ZN7S7682C93v41Ev();
static  VTBL_ENTRY _tg__ZTV7S7682C9__8S7682C10__7S7682C7[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-1280,-848),
  (VTBL_ENTRY)&(_ZTI8S7682C10[0]),
  (VTBL_ENTRY)&_ZN7S7682C93v33Ev,
  (VTBL_ENTRY)&_ZN7S7682C93v34Ev,
  (VTBL_ENTRY)&_ZN7S7682C93v35Ev,
  (VTBL_ENTRY)&_ZN7S7682C93v36Ev,
  (VTBL_ENTRY)&_ZN7S7682C93v37Ev,
  (VTBL_ENTRY)&_ZN7S7682C93v38Ev,
  (VTBL_ENTRY)&_ZN7S7682C93v39Ev,
  (VTBL_ENTRY)&_ZN7S7682C93v40Ev,
  (VTBL_ENTRY)&_ZN7S7682C93v41Ev,
};
extern void _ZN8S7682C11D1Ev();
extern void _ZN8S7682C11D0Ev();
extern void _ZN8S7682C113v51Ev();
extern void _ZN8S7682C113v52Ev();
static  VTBL_ENTRY _tg__ZTV8S7682C11__7S7682C7[] = {
  ABISELECT(496,316),
  ABISELECT(336,208),
  ABISELECT(304,196),
  ABISELECT(16,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S7682C11[0]),
  (VTBL_ENTRY)&_ZN8S7682C11D1Ev,
  (VTBL_ENTRY)&_ZN8S7682C11D0Ev,
  (VTBL_ENTRY)&_ZN8S7682C113v51Ev,
  (VTBL_ENTRY)&_ZN8S7682C113v52Ev,
};
extern void _ZN7S7682C32v8Ev();
extern void _ZN7S7682C32v9Ev();
extern void _ZN7S7682C33v10Ev();
extern void _ZN7S7682C33v11Ev();
extern void _ZN7S7682C43v12Ev();
extern void _ZN7S7682C43v13Ev();
extern void _ZN7S7682C43v14Ev();
extern void _ZN7S7682C23v15Ev();
extern void _ZN7S7682C23v16Ev();
extern void _ZN7S7682C23v17Ev();
extern void _ZN7S7682C23v18Ev();
extern void _ZN8S7682C123v47Ev();
extern void _ZN8S7682C123v48Ev();
extern void _ZN8S7682C123v49Ev();
extern void _ZN8S7682C123v50Ev();
static  VTBL_ENTRY _tg__ZTV8S7682C12__8S7682C11__7S7682C7[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(480,312),
  ABISELECT(288,192),
  ABISELECT(320,204),
  ABISELECT(-16,-4),
  (VTBL_ENTRY)&(_ZTI8S7682C11[0]),
  (VTBL_ENTRY)&_ZN7S7682C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7682C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v15Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v16Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v17Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v18Ev,
  (VTBL_ENTRY)&_ZN8S7682C123v47Ev,
  (VTBL_ENTRY)&_ZN8S7682C123v48Ev,
  (VTBL_ENTRY)&_ZN8S7682C123v49Ev,
  (VTBL_ENTRY)&_ZN8S7682C123v50Ev,
};
extern void _ZN8S7682C133v42Ev();
extern void _ZN8S7682C133v43Ev();
extern void _ZN8S7682C133v44Ev();
extern void _ZN8S7682C133v45Ev();
extern void _ZN8S7682C133v46Ev();
static  VTBL_ENTRY _tg__ZTV8S7682C13__8S7682C11__7S7682C7[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(192,120),
  ABISELECT(32,12),
  ABISELECT(-304,-196),
  (VTBL_ENTRY)&(_ZTI8S7682C11[0]),
  (VTBL_ENTRY)&_ZN8S7682C133v42Ev,
  (VTBL_ENTRY)&_ZN8S7682C133v43Ev,
  (VTBL_ENTRY)&_ZN8S7682C133v44Ev,
  (VTBL_ENTRY)&_ZN8S7682C133v45Ev,
  (VTBL_ENTRY)&_ZN8S7682C133v46Ev,
};
extern void _ZN7S7682C32v8Ev();
extern void _ZN7S7682C32v9Ev();
extern void _ZN7S7682C33v10Ev();
extern void _ZN7S7682C33v11Ev();
static  VTBL_ENTRY _tg__ZTV7S7682C3__8S7682C11__7S7682C7[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-336,-208),
  (VTBL_ENTRY)&(_ZTI8S7682C11[0]),
  (VTBL_ENTRY)&_ZN7S7682C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7682C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v11Ev,
};
extern void _ZN7S7682C32v8Ev();
extern void _ZN7S7682C32v9Ev();
extern void _ZN7S7682C33v10Ev();
extern void _ZN7S7682C33v11Ev();
extern void _ZN7S7682C43v12Ev();
extern void _ZN7S7682C43v13Ev();
extern void _ZN7S7682C43v14Ev();
static  VTBL_ENTRY _tg__ZTV7S7682C4__8S7682C11__7S7682C7[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-496,-316),
  (VTBL_ENTRY)&(_ZTI8S7682C11[0]),
  (VTBL_ENTRY)&_ZN7S7682C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7682C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v14Ev,
};
extern void _ZN7S7682C32v8Ev();
extern void _ZN7S7682C32v9Ev();
extern void _ZN7S7682C33v10Ev();
extern void _ZN7S7682C33v11Ev();
extern void _ZN7S7682C43v12Ev();
extern void _ZN7S7682C43v13Ev();
extern void _ZN7S7682C43v14Ev();
extern void _ZN7S7682C23v15Ev();
extern void _ZN7S7682C23v16Ev();
extern void _ZN7S7682C23v17Ev();
extern void _ZN7S7682C23v18Ev();
extern void _ZN8S7682C123v47Ev();
extern void _ZN8S7682C123v48Ev();
extern void _ZN8S7682C123v49Ev();
extern void _ZN8S7682C123v50Ev();
static  VTBL_ENTRY _tg__ZTV8S7682C12__7S7682C7[] = {
  ABISELECT(480,312),
  ABISELECT(288,192),
  ABISELECT(320,204),
  0,
  (VTBL_ENTRY)&(_ZTI8S7682C12[0]),
  (VTBL_ENTRY)&_ZN7S7682C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7682C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v15Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v16Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v17Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v18Ev,
  (VTBL_ENTRY)&_ZN8S7682C123v47Ev,
  (VTBL_ENTRY)&_ZN8S7682C123v48Ev,
  (VTBL_ENTRY)&_ZN8S7682C123v49Ev,
  (VTBL_ENTRY)&_ZN8S7682C123v50Ev,
};
extern void _ZN7S7682C32v8Ev();
extern void _ZN7S7682C32v9Ev();
extern void _ZN7S7682C33v10Ev();
extern void _ZN7S7682C33v11Ev();
extern void _ZN7S7682C43v12Ev();
extern void _ZN7S7682C43v13Ev();
extern void _ZN7S7682C43v14Ev();
extern void _ZN7S7682C23v15Ev();
extern void _ZN7S7682C23v16Ev();
extern void _ZN7S7682C23v17Ev();
extern void _ZN7S7682C23v18Ev();
static  VTBL_ENTRY _tg__ZTV7S7682C28S7682C12__7S7682C7[] = {
  ABISELECT(320,204),
  0,
  (VTBL_ENTRY)&(_ZTI7S7682C2[0]),
  (VTBL_ENTRY)&_ZN7S7682C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7682C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v15Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v16Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v17Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v18Ev,
};
extern void _ZN7S7682C32v8Ev();
extern void _ZN7S7682C32v9Ev();
extern void _ZN7S7682C33v10Ev();
extern void _ZN7S7682C33v11Ev();
static  VTBL_ENTRY _tg__ZTV7S7682C3__7S7682C28S7682C12__7S7682C7[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-320,-204),
  (VTBL_ENTRY)&(_ZTI7S7682C2[0]),
  (VTBL_ENTRY)&_ZN7S7682C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7682C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v11Ev,
};
extern void _ZN8S7682C133v42Ev();
extern void _ZN8S7682C133v43Ev();
extern void _ZN8S7682C133v44Ev();
extern void _ZN8S7682C133v45Ev();
extern void _ZN8S7682C133v46Ev();
static  VTBL_ENTRY _tg__ZTV8S7682C13__8S7682C12__7S7682C7[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(192,120),
  ABISELECT(32,12),
  ABISELECT(-288,-192),
  (VTBL_ENTRY)&(_ZTI8S7682C12[0]),
  (VTBL_ENTRY)&_ZN8S7682C133v42Ev,
  (VTBL_ENTRY)&_ZN8S7682C133v43Ev,
  (VTBL_ENTRY)&_ZN8S7682C133v44Ev,
  (VTBL_ENTRY)&_ZN8S7682C133v45Ev,
  (VTBL_ENTRY)&_ZN8S7682C133v46Ev,
};
extern void _ZN7S7682C32v8Ev();
extern void _ZN7S7682C32v9Ev();
extern void _ZN7S7682C33v10Ev();
extern void _ZN7S7682C33v11Ev();
static  VTBL_ENTRY _tg__ZTV7S7682C3__8S7682C12__7S7682C7[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-320,-204),
  (VTBL_ENTRY)&(_ZTI8S7682C12[0]),
  (VTBL_ENTRY)&_ZN7S7682C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7682C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v11Ev,
};
extern void _ZN7S7682C32v8Ev();
extern void _ZN7S7682C32v9Ev();
extern void _ZN7S7682C33v10Ev();
extern void _ZN7S7682C33v11Ev();
extern void _ZN7S7682C43v12Ev();
extern void _ZN7S7682C43v13Ev();
extern void _ZN7S7682C43v14Ev();
static  VTBL_ENTRY _tg__ZTV7S7682C4__8S7682C12__7S7682C7[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-480,-312),
  (VTBL_ENTRY)&(_ZTI8S7682C12[0]),
  (VTBL_ENTRY)&_ZN7S7682C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7682C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v14Ev,
};
extern void _ZN8S7682C133v42Ev();
extern void _ZN8S7682C133v43Ev();
extern void _ZN8S7682C133v44Ev();
extern void _ZN8S7682C133v45Ev();
extern void _ZN8S7682C133v46Ev();
static  VTBL_ENTRY _tg__ZTV8S7682C13__7S7682C7[] = {
  ABISELECT(192,120),
  ABISELECT(32,12),
  0,
  (VTBL_ENTRY)&(_ZTI8S7682C13[0]),
  (VTBL_ENTRY)&_ZN8S7682C133v42Ev,
  (VTBL_ENTRY)&_ZN8S7682C133v43Ev,
  (VTBL_ENTRY)&_ZN8S7682C133v44Ev,
  (VTBL_ENTRY)&_ZN8S7682C133v45Ev,
  (VTBL_ENTRY)&_ZN8S7682C133v46Ev,
};
extern void _ZN7S7682C32v8Ev();
extern void _ZN7S7682C32v9Ev();
extern void _ZN7S7682C33v10Ev();
extern void _ZN7S7682C33v11Ev();
static  VTBL_ENTRY _tg__ZTV7S7682C3__8S7682C13__7S7682C7[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-32,-12),
  (VTBL_ENTRY)&(_ZTI8S7682C13[0]),
  (VTBL_ENTRY)&_ZN7S7682C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7682C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v11Ev,
};
extern void _ZN7S7682C32v8Ev();
extern void _ZN7S7682C32v9Ev();
extern void _ZN7S7682C33v10Ev();
extern void _ZN7S7682C33v11Ev();
extern void _ZN7S7682C43v12Ev();
extern void _ZN7S7682C43v13Ev();
extern void _ZN7S7682C43v14Ev();
static  VTBL_ENTRY _tg__ZTV7S7682C4__8S7682C13__7S7682C7[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-192,-120),
  (VTBL_ENTRY)&(_ZTI8S7682C13[0]),
  (VTBL_ENTRY)&_ZN7S7682C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7682C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v14Ev,
};
static  VTT_ENTRY vtt_S7682C7[] = {
  {&(_ZTV7S7682C7[9]),  9,191},
  {&(_tg__ZTV8S7682C10__7S7682C7[9]),  9,34},
  {&(_tg__ZTV8S7682C128S7682C10__A1__7S7682C7[5]),  5,20},
  {&(_tg__ZTV7S7682C28S7682C128S7682C10__A1__7S7682C7[3]),  3,14},
  {&(_tg__ZTV7S7682C3__7S7682C28S7682C128S7682C10__A1__7S7682C7[6]),  6,10},
  {&(_tg__ZTV8S7682C13__8S7682C128S7682C10__A1__7S7682C7[9]),  9,14},
  {&(_tg__ZTV7S7682C3__8S7682C128S7682C10__A1__7S7682C7[6]),  6,10},
  {&(_tg__ZTV7S7682C4__8S7682C128S7682C10__A1__7S7682C7[9]),  9,16},
  {&(_tg__ZTV8S7682C158S7682C10__7S7682C7[6]),  6,19},
  {&(_tg__ZTV7S7682C3__8S7682C158S7682C10__7S7682C7[6]),  6,10},
  {&(_tg__ZTV8S7682C13__8S7682C158S7682C10__7S7682C7[9]),  9,14},
  {&(_tg__ZTV7S7682C4__8S7682C158S7682C10__7S7682C7[9]),  9,16},
  {&(_tg__ZTV7S7682C9__8S7682C158S7682C10__7S7682C7[11]),  11,20},
  {&(_tg__ZTV10S7682C8_nt__8S7682C10__7S7682C7[6]),  6,10},
  {&(_tg__ZTV8S7682C11__8S7682C10__7S7682C7[9]),  9,13},
  {&(_tg__ZTV8S7682C12__8S7682C10__7S7682C7[20]),  20,35},
  {&(_tg__ZTV8S7682C13__8S7682C10__7S7682C7[9]),  9,14},
  {&(_tg__ZTV7S7682C3__8S7682C10__7S7682C7[6]),  6,10},
  {&(_tg__ZTV7S7682C4__8S7682C10__7S7682C7[9]),  9,16},
  {&(_tg__ZTV8S7682C15__8S7682C10__7S7682C7[6]),  6,19},
  {&(_tg__ZTV7S7682C9__8S7682C10__7S7682C7[11]),  11,20},
  {&(_ZTV7S7682C7[79]),  79,191},
  {&(_ZTV7S7682C7[29]),  29,191},
  {&(_ZTV7S7682C7[92]),  92,191},
  {&(_ZTV7S7682C7[116]),  116,191},
  {&(_ZTV7S7682C7[140]),  140,191},
  {&(_ZTV7S7682C7[151]),  151,191},
  {&(_ZTV7S7682C7[164]),  164,191},
  {&(_ZTV7S7682C7[60]),  60,191},
  {&(_ZTV7S7682C7[182]),  182,191},
  {&(_tg__ZTV8S7682C11__7S7682C7[6]),  6,10},
  {&(_tg__ZTV8S7682C12__8S7682C11__7S7682C7[20]),  20,35},
  {&(_tg__ZTV8S7682C13__8S7682C11__7S7682C7[9]),  9,14},
  {&(_tg__ZTV7S7682C3__8S7682C11__7S7682C7[6]),  6,10},
  {&(_tg__ZTV7S7682C4__8S7682C11__7S7682C7[9]),  9,16},
  {&(_tg__ZTV8S7682C12__7S7682C7[5]),  5,20},
  {&(_tg__ZTV7S7682C28S7682C12__7S7682C7[3]),  3,14},
  {&(_tg__ZTV7S7682C3__7S7682C28S7682C12__7S7682C7[6]),  6,10},
  {&(_tg__ZTV8S7682C13__8S7682C12__7S7682C7[9]),  9,14},
  {&(_tg__ZTV7S7682C3__8S7682C12__7S7682C7[6]),  6,10},
  {&(_tg__ZTV7S7682C4__8S7682C12__7S7682C7[9]),  9,16},
  {&(_tg__ZTV8S7682C13__7S7682C7[4]),  4,9},
  {&(_tg__ZTV7S7682C3__8S7682C13__7S7682C7[6]),  6,10},
  {&(_tg__ZTV7S7682C4__8S7682C13__7S7682C7[9]),  9,16},
};
extern VTBL_ENTRY _ZTI7S7682C7[];
extern  VTBL_ENTRY _ZTV7S7682C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7682C7[];
static VTBL_ENTRY alt_thunk_names8[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S7682C10D0Ev,_ZTv0_n28_N8S7682C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn576_N8S7682C10D0Ev,_ZThn400_N8S7682C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S7682C10D1Ev,_ZTv0_n28_N8S7682C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn576_N8S7682C10D1Ev,_ZThn400_N8S7682C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N7S7682C7D0Ev,_ZTv0_n28_N7S7682C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2048_N7S7682C7D0Ev,_ZThn1328_N7S7682C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N7S7682C7D1Ev,_ZTv0_n28_N7S7682C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2048_N7S7682C7D1Ev,_ZThn1328_N7S7682C7D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7682C7 = {  "S7682C7", // class name
  bases_S7682C7, 20,
  &(vtc_S7682C7[0]), // expected_vtbl_contents
  &(vtt_S7682C7[0]), // expected_vtt_contents
  ABISELECT(4224,2704), // object size
  NSPAIRA(_ZTI7S7682C7),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S7682C7),191, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7682C7),44, //virtual table table var
  20, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names8,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7682C16  : S7682C8_nt , virtual S7682C3 , virtual S7682C13 , virtual S7682C10 , S7682C6 {
  void *s7682c16f0[2];
  virtual  ~S7682C16(); // _ZN8S7682C16D2Ev
  virtual void  v65(); // _ZN8S7682C163v65Ev
  virtual void  v66(); // _ZN8S7682C163v66Ev
  virtual void  v67(); // _ZN8S7682C163v67Ev
  virtual void  v68(); // _ZN8S7682C163v68Ev
  virtual void  v69(); // _ZN8S7682C163v69Ev
  virtual void  v70(); // _ZN8S7682C163v70Ev
  virtual void  v71(); // _ZN8S7682C163v71Ev
  S7682C16(); // tgen
};
//SIG(-1 S7682C16) C1{ BC2{ v8 v9 v10 v11} VBC3{ v12 v13 v14 v15 Fs:13 Fp FD[8]} VBC4{ VBC3 VBC5{ BC3 v16 v17 v18 Fp[6]} v19 v20 v21 v22 v23 Fp[2]} VBC6{ VBC2 VBC7{ VBC8{ VBC4 BC9{ VBC3 BC5 v24 v25 v26 v27 Fp} v28 v29 v30 v31 FL[5] FC10{} FD} vd v32 v33} BC8 BC11{ VBC3 VBC4 VBC12{ v34 v35 v36 v37 v38 v39 v40 v41 v42 FC5[7]} BC5 vd v43 v44 v45 v46 Fi} vd v47 v48 v49 v50 v51 v52 v53 v54 Fi[8] Fc FL} BC13{ VBC9 vd v55 v56 v57 v58} vd v1 v2 v3 v4 v5 v6 v7 Fp[2]}


 S7682C16 ::~S7682C16(){ note_dtor("S7682C16", this);}
void  S7682C16 ::v65(){vfunc_called(this, "_ZN8S7682C163v65Ev");}
void  S7682C16 ::v66(){vfunc_called(this, "_ZN8S7682C163v66Ev");}
void  S7682C16 ::v67(){vfunc_called(this, "_ZN8S7682C163v67Ev");}
void  S7682C16 ::v68(){vfunc_called(this, "_ZN8S7682C163v68Ev");}
void  S7682C16 ::v69(){vfunc_called(this, "_ZN8S7682C163v69Ev");}
void  S7682C16 ::v70(){vfunc_called(this, "_ZN8S7682C163v70Ev");}
void  S7682C16 ::v71(){vfunc_called(this, "_ZN8S7682C163v71Ev");}
S7682C16 ::S7682C16(){ note_ctor("S7682C16", this);} // tgen

static void Test_S7682C16()
{
  extern Class_Descriptor cd_S7682C16;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(187,477)];
    init_test(&cd_S7682C16, buf);
    S7682C16 *dp, &lv = *(dp=new (buf) S7682C16());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(2976,1904), "sizeof(S7682C16)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7682C16)");
    /*is_ambiguous_... S7682C16::S7682C8_nt */ AMB_check_base_class_offset(lv, (S7682C8_nt*), 0, "S7682C16");
    /*is_ambiguous_... S7682C16::S7682C3 */ AMB_check_base_class_offset(lv, (S7682C3*), ABISELECT(32,16), "S7682C16");
    /*is_ambiguous_... S7682C13::S7682C3 */ AMB_check_base_class_offset(lv, (S7682C3*)(S7682C13*), ABISELECT(32,16), "S7682C16");
    /*is_ambiguous_... S7682C16::S7682C12 */ AMB_check_base_class_offset(lv, (S7682C3*)(S7682C2*)(S7682C12*), ABISELECT(32,16), "S7682C16");
    /*is_ambiguous_... S7682C10::S7682C12 */ AMB_check_base_class_offset(lv, (S7682C3*)(S7682C2*)(S7682C12*)(S7682C10*), ABISELECT(32,16), "S7682C16");
    /*is_ambiguous_... S7682C15::S7682C3 */ AMB_check_base_class_offset(lv, (S7682C3*)(S7682C15*)(S7682C10*), ABISELECT(32,16), "S7682C16");
    /*is_ambiguous_... S7682C16::S7682C2 */ AMB_check_base_class_offset(lv, (S7682C3*)(S7682C2*), ABISELECT(32,16), "S7682C16");
    /*is_ambiguous_... S7682C16::S7682C4 */ AMB_check_base_class_offset(lv, (S7682C3*)(S7682C4*), ABISELECT(224,136), "S7682C16");
    check_base_class_offset(lv, (S7682C4*)(S7682C13*), ABISELECT(224,136), "S7682C16");
    check_base_class_offset(lv, (S7682C13*), ABISELECT(192,124), "S7682C16");
    /*is_ambiguous_... S7682C16::S7682C12 */ AMB_check_base_class_offset(lv, (S7682C13*)(S7682C12*), ABISELECT(192,124), "S7682C16");
    /*is_ambiguous_... S7682C10::S7682C12 */ AMB_check_base_class_offset(lv, (S7682C13*)(S7682C12*)(S7682C10*), ABISELECT(192,124), "S7682C16");
    check_base_class_offset(lv, (S7682C13*)(S7682C15*)(S7682C10*), ABISELECT(192,124), "S7682C16");
    check_base_class_offset(lv, (S7682C8_nt*)(S7682C10*), ABISELECT(976,640), "S7682C16");
    /*is_ambiguous_... S7682C16::S7682C12 */ AMB_check_base_class_offset(lv, (S7682C3*)(S7682C4*)(S7682C2*)(S7682C12*), ABISELECT(992,648), "S7682C16");
    /*is_ambiguous_... S7682C16::S7682C12 */ AMB_check_base_class_offset(lv, (S7682C4*)(S7682C2*)(S7682C12*), ABISELECT(992,648), "S7682C16");
    /*is_ambiguous_... S7682C16::S7682C12 */ AMB_check_base_class_offset(lv, (S7682C2*)(S7682C12*), ABISELECT(992,648), "S7682C16");
    check_base_class_offset(lv, (S7682C12*)(S7682C11*), ABISELECT(992,648), "S7682C16");
    check_base_class_offset(lv, (S7682C11*)(S7682C10*), ABISELECT(984,644), "S7682C16");
    /*is_ambiguous_... S7682C10::S7682C12 */ AMB_check_base_class_offset(lv, (S7682C3*)(S7682C4*)(S7682C2*)(S7682C12*)(S7682C10*), ABISELECT(432,268), "S7682C16");
    /*is_ambiguous_... S7682C10::S7682C12 */ AMB_check_base_class_offset(lv, (S7682C4*)(S7682C2*)(S7682C12*)(S7682C10*), ABISELECT(432,268), "S7682C16");
    /*is_ambiguous_... S7682C10::S7682C12 */ AMB_check_base_class_offset(lv, (S7682C2*)(S7682C12*)(S7682C10*), ABISELECT(432,268), "S7682C16");
    /*is_ambiguous_... S7682C10::S7682C12 */ AMB_check_base_class_offset(lv, (S7682C12*)(S7682C10*), ABISELECT(432,268), "S7682C16");
    check_base_class_offset(lv, (S7682C9*)(S7682C15*)(S7682C10*), ABISELECT(1280,840), "S7682C16");
    /*is_ambiguous_... S7682C15::S7682C4 */ AMB_check_base_class_offset(lv, (S7682C3*)(S7682C4*)(S7682C15*)(S7682C10*), ABISELECT(720,460), "S7682C16");
    /*is_ambiguous_... S7682C15::S7682C4 */ AMB_check_base_class_offset(lv, (S7682C4*)(S7682C15*)(S7682C10*), ABISELECT(720,460), "S7682C16");
    check_base_class_offset(lv, (S7682C15*)(S7682C10*), ABISELECT(720,460), "S7682C16");
    check_base_class_offset(lv, (S7682C10*), ABISELECT(432,268), "S7682C16");
    /*is_ambiguous_... S7682C16::S7682C2 */ AMB_check_base_class_offset(lv, (S7682C3*)(S7682C4*)(S7682C2*), ABISELECT(2752,1768), "S7682C16");
    /*is_ambiguous_... S7682C16::S7682C2 */ AMB_check_base_class_offset(lv, (S7682C4*)(S7682C2*), ABISELECT(2752,1768), "S7682C16");
    check_base_class_offset(lv, (S7682C2*)(S7682C6*), ABISELECT(2752,1768), "S7682C16");
    check_base_class_offset(lv, (S7682C6*), ABISELECT(8,4), "S7682C16");
    check_field_offset(lv, s7682c16f0, ABISELECT(16,8), "S7682C16.s7682c16f0");
    test_class_info(&lv, &cd_S7682C16);
    dp->~S7682C16();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7682C16(Test_S7682C16, "S7682C16", ABISELECT(2976,1904));

#else // __cplusplus

extern void _ZN8S7682C16C1Ev();
extern void _ZN8S7682C16D2Ev();
Name_Map name_map_S7682C16[] = {
  NSPAIR(_ZN8S7682C16C1Ev),
  NSPAIR(_ZN8S7682C16D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7682C8_nt;
extern VTBL_ENTRY _ZTI10S7682C8_nt[];
extern  VTBL_ENTRY _ZTV10S7682C8_nt[];
extern Class_Descriptor cd_S7682C3;
extern VTBL_ENTRY _ZTI7S7682C3[];
extern  VTBL_ENTRY _ZTV7S7682C3[];
extern Class_Descriptor cd_S7682C3;
extern VTBL_ENTRY _ZTI7S7682C3[];
extern  VTBL_ENTRY _ZTV7S7682C3[];
extern Class_Descriptor cd_S7682C4;
extern VTBL_ENTRY _ZTI7S7682C4[];
extern  VTBL_ENTRY _ZTV7S7682C4[];
extern Class_Descriptor cd_S7682C13;
extern VTBL_ENTRY _ZTI8S7682C13[];
extern  VTBL_ENTRY _ZTV8S7682C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7682C13[];
extern Class_Descriptor cd_S7682C8_nt;
extern VTBL_ENTRY _ZTI10S7682C8_nt[];
extern  VTBL_ENTRY _ZTV10S7682C8_nt[];
extern Class_Descriptor cd_S7682C3;
extern VTBL_ENTRY _ZTI7S7682C3[];
extern  VTBL_ENTRY _ZTV7S7682C3[];
extern Class_Descriptor cd_S7682C4;
extern VTBL_ENTRY _ZTI7S7682C4[];
extern  VTBL_ENTRY _ZTV7S7682C4[];
extern Class_Descriptor cd_S7682C2;
extern VTBL_ENTRY _ZTI7S7682C2[];
extern  VTBL_ENTRY _ZTV7S7682C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7682C2[];
extern Class_Descriptor cd_S7682C12;
extern VTBL_ENTRY _ZTI8S7682C12[];
extern  VTBL_ENTRY _ZTV8S7682C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7682C12[];
extern Class_Descriptor cd_S7682C11;
extern VTBL_ENTRY _ZTI8S7682C11[];
extern  VTBL_ENTRY _ZTV8S7682C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7682C11[];
extern Class_Descriptor cd_S7682C3;
extern VTBL_ENTRY _ZTI7S7682C3[];
extern  VTBL_ENTRY _ZTV7S7682C3[];
extern Class_Descriptor cd_S7682C4;
extern VTBL_ENTRY _ZTI7S7682C4[];
extern  VTBL_ENTRY _ZTV7S7682C4[];
extern Class_Descriptor cd_S7682C2;
extern VTBL_ENTRY _ZTI7S7682C2[];
extern  VTBL_ENTRY _ZTV7S7682C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7682C2[];
extern Class_Descriptor cd_S7682C12;
extern VTBL_ENTRY _ZTI8S7682C12[];
extern  VTBL_ENTRY _ZTV8S7682C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7682C12[];
extern Class_Descriptor cd_S7682C9;
extern VTBL_ENTRY _ZTI7S7682C9[];
extern  VTBL_ENTRY _ZTV7S7682C9[];
extern Class_Descriptor cd_S7682C3;
extern VTBL_ENTRY _ZTI7S7682C3[];
extern  VTBL_ENTRY _ZTV7S7682C3[];
extern Class_Descriptor cd_S7682C4;
extern VTBL_ENTRY _ZTI7S7682C4[];
extern  VTBL_ENTRY _ZTV7S7682C4[];
extern Class_Descriptor cd_S7682C15;
extern VTBL_ENTRY _ZTI8S7682C15[];
extern  VTBL_ENTRY _ZTV8S7682C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7682C15[];
extern Class_Descriptor cd_S7682C10;
extern VTBL_ENTRY _ZTI8S7682C10[];
extern  VTBL_ENTRY _ZTV8S7682C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7682C10[];
extern Class_Descriptor cd_S7682C3;
extern VTBL_ENTRY _ZTI7S7682C3[];
extern  VTBL_ENTRY _ZTV7S7682C3[];
extern Class_Descriptor cd_S7682C4;
extern VTBL_ENTRY _ZTI7S7682C4[];
extern  VTBL_ENTRY _ZTV7S7682C4[];
extern Class_Descriptor cd_S7682C2;
extern VTBL_ENTRY _ZTI7S7682C2[];
extern  VTBL_ENTRY _ZTV7S7682C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7682C2[];
extern Class_Descriptor cd_S7682C6;
extern VTBL_ENTRY _ZTI7S7682C6[];
extern  VTBL_ENTRY _ZTV7S7682C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7682C6[];
static Base_Class bases_S7682C16[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7682C8_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    23, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7682C3,    ABISELECT(32,16), //bcp->offset
    34, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7682C3,    ABISELECT(224,136), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S7682C4,    ABISELECT(224,136), //bcp->offset
    58, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S7682C13,    ABISELECT(192,124), //bcp->offset
    44, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7682C8_nt,    ABISELECT(976,640), //bcp->offset
    155, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    19, //immediately_derived
  0, 1},
  {&cd_S7682C3,    ABISELECT(992,648), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S7682C4,    ABISELECT(992,648), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S7682C2,    ABISELECT(992,648), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    45, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S7682C12,    ABISELECT(992,648), //bcp->offset
    178, //bcp->virtual_function_table_offset
    20, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    44, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S7682C11,    ABISELECT(984,644), //bcp->offset
    165, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    39, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    19, //immediately_derived
  0, 1},
  {&cd_S7682C3,    ABISELECT(432,268), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S7682C4,    ABISELECT(432,268), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S7682C2,    ABISELECT(432,268), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    21, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S7682C12,    ABISELECT(432,268), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S7682C9,    ABISELECT(1280,840), //bcp->offset
    213, //bcp->virtual_function_table_offset
    11, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    18, //immediately_derived
  0, 1},
  {&cd_S7682C3,    ABISELECT(720,460), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S7682C4,    ABISELECT(720,460), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S7682C15,    ABISELECT(720,460), //bcp->offset
    136, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    26, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S7682C10,    ABISELECT(432,268), //bcp->offset
    74, //bcp->virtual_function_table_offset
    37, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7682C3,    ABISELECT(2752,1768), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    20, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S7682C4,    ABISELECT(2752,1768), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    21, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S7682C2,    ABISELECT(2752,1768), //bcp->offset
    233, //bcp->virtual_function_table_offset
    14, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    50, //bcp->base_subarray_index_in_construction_vtbl_array
    22, //init_seq
    23, //immediately_derived
  0, 1},
  {&cd_S7682C6,    ABISELECT(8,4), //bcp->offset
    24, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    24, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S7682C16[];
extern void _ZN10S7682C8_nt3v29Ev();
extern void _ZN10S7682C8_nt3v30Ev();
extern void _ZN10S7682C8_nt3v31Ev();
extern void _ZN10S7682C8_nt3v32Ev();
extern void _ZN8S7682C16D1Ev();
extern void _ZN8S7682C16D0Ev();
extern void _ZN8S7682C163v65Ev();
extern void _ZN8S7682C163v66Ev();
extern void _ZN8S7682C163v67Ev();
extern void _ZN8S7682C163v68Ev();
extern void _ZN8S7682C163v69Ev();
extern void _ZN8S7682C163v70Ev();
extern void _ZN8S7682C163v71Ev();
extern void ABISELECT(_ZThn8_N8S7682C16D1Ev,_ZThn4_N8S7682C16D1Ev)();
extern void ABISELECT(_ZThn8_N8S7682C16D0Ev,_ZThn4_N8S7682C16D0Ev)();
extern void _ZN7S7682C63v19Ev();
extern void _ZN7S7682C63v20Ev();
extern void _ZN7S7682C63v21Ev();
extern void _ZN7S7682C63v22Ev();
extern void _ZN7S7682C32v8Ev();
extern void _ZN7S7682C32v9Ev();
extern void _ZN7S7682C33v10Ev();
extern void _ZN7S7682C33v11Ev();
extern void _ZN8S7682C133v42Ev();
extern void _ZN8S7682C133v43Ev();
extern void _ZN8S7682C133v44Ev();
extern void _ZN8S7682C133v45Ev();
extern void _ZN8S7682C133v46Ev();
extern void _ZN7S7682C32v8Ev();
extern void _ZN7S7682C32v9Ev();
extern void _ZN7S7682C33v10Ev();
extern void _ZN7S7682C33v11Ev();
extern void _ZN7S7682C43v12Ev();
extern void _ZN7S7682C43v13Ev();
extern void _ZN7S7682C43v14Ev();
extern void _ZN7S7682C32v8Ev();
extern void _ZN7S7682C32v9Ev();
extern void _ZN7S7682C33v10Ev();
extern void _ZN7S7682C33v11Ev();
extern void _ZN7S7682C43v12Ev();
extern void _ZN7S7682C43v13Ev();
extern void _ZN7S7682C43v14Ev();
extern void _ZN7S7682C23v15Ev();
extern void _ZN7S7682C23v16Ev();
extern void _ZN7S7682C23v17Ev();
extern void _ZN7S7682C23v18Ev();
extern void _ZN8S7682C123v47Ev();
extern void _ZN8S7682C123v48Ev();
extern void _ZN8S7682C123v49Ev();
extern void _ZN8S7682C123v50Ev();
extern void ABISELECT(_ZTv0_n200_N8S7682C16D1Ev,_ZTv0_n100_N8S7682C16D1Ev)();
extern void ABISELECT(_ZThn432_N8S7682C16D1Ev,_ZThn268_N8S7682C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n200_N8S7682C16D0Ev,_ZTv0_n100_N8S7682C16D0Ev)();
extern void ABISELECT(_ZThn432_N8S7682C16D0Ev,_ZThn268_N8S7682C16D0Ev)() __attribute__((weak));
extern void _ZN8S7682C103v57Ev();
extern void _ZN8S7682C103v58Ev();
extern void _ZN8S7682C103v59Ev();
extern void _ZN8S7682C103v60Ev();
extern void _ZN8S7682C103v61Ev();
extern void _ZN8S7682C103v62Ev();
extern void _ZN8S7682C103v63Ev();
extern void _ZN8S7682C103v64Ev();
extern void _ZN7S7682C32v8Ev();
extern void _ZN7S7682C32v9Ev();
extern void _ZN7S7682C33v10Ev();
extern void _ZN7S7682C33v11Ev();
extern void _ZN7S7682C43v12Ev();
extern void _ZN7S7682C43v13Ev();
extern void _ZN7S7682C43v14Ev();
extern void ABISELECT(_ZTvn288_n200_N8S7682C16D1Ev,_ZTvn192_n100_N8S7682C16D1Ev)();
extern void ABISELECT(_ZTvn288_n200_N8S7682C16D0Ev,_ZTvn192_n100_N8S7682C16D0Ev)();
extern void _ZN8S7682C153v53Ev();
extern void _ZN8S7682C153v54Ev();
extern void _ZN8S7682C153v55Ev();
extern void _ZN8S7682C153v56Ev();
extern void _ZN10S7682C8_nt3v29Ev();
extern void _ZN10S7682C8_nt3v30Ev();
extern void _ZN10S7682C8_nt3v31Ev();
extern void _ZN10S7682C8_nt3v32Ev();
extern void ABISELECT(_ZTv0_n56_N8S7682C16D1Ev,_ZTv0_n28_N8S7682C16D1Ev)();
extern void ABISELECT(_ZThn984_N8S7682C16D1Ev,_ZThn644_N8S7682C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S7682C16D0Ev,_ZTv0_n28_N8S7682C16D0Ev)();
extern void ABISELECT(_ZThn984_N8S7682C16D0Ev,_ZThn644_N8S7682C16D0Ev)() __attribute__((weak));
extern void _ZN8S7682C113v51Ev();
extern void _ZN8S7682C113v52Ev();
extern void _ZN7S7682C32v8Ev();
extern void _ZN7S7682C32v9Ev();
extern void _ZN7S7682C33v10Ev();
extern void _ZN7S7682C33v11Ev();
extern void _ZN7S7682C43v12Ev();
extern void _ZN7S7682C43v13Ev();
extern void _ZN7S7682C43v14Ev();
extern void _ZN7S7682C23v15Ev();
extern void _ZN7S7682C23v16Ev();
extern void _ZN7S7682C23v17Ev();
extern void _ZN7S7682C23v18Ev();
extern void _ZN8S7682C123v47Ev();
extern void _ZN8S7682C123v48Ev();
extern void _ZN8S7682C123v49Ev();
extern void _ZN8S7682C123v50Ev();
extern void _ZN7S7682C93v33Ev();
extern void _ZN7S7682C93v34Ev();
extern void _ZN7S7682C93v35Ev();
extern void _ZN7S7682C93v36Ev();
extern void _ZN7S7682C93v37Ev();
extern void _ZN7S7682C93v38Ev();
extern void _ZN7S7682C93v39Ev();
extern void _ZN7S7682C93v40Ev();
extern void _ZN7S7682C93v41Ev();
extern void _ZN7S7682C32v8Ev();
extern void _ZN7S7682C32v9Ev();
extern void _ZN7S7682C33v10Ev();
extern void _ZN7S7682C33v11Ev();
extern void _ZN7S7682C43v12Ev();
extern void _ZN7S7682C43v13Ev();
extern void _ZN7S7682C43v14Ev();
extern void _ZN7S7682C23v15Ev();
extern void _ZN7S7682C23v16Ev();
extern void _ZN7S7682C23v17Ev();
extern void _ZN7S7682C23v18Ev();
static  VTBL_ENTRY vtc_S7682C16[] = {
  ABISELECT(2752,1768),
  ABISELECT(1280,840),
  ABISELECT(992,648),
  ABISELECT(984,644),
  ABISELECT(976,640),
  ABISELECT(432,268),
  ABISELECT(224,136),
  ABISELECT(192,124),
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI8S7682C16[0]),
  (VTBL_ENTRY)&_ZN10S7682C8_nt3v29Ev,
  (VTBL_ENTRY)&_ZN10S7682C8_nt3v30Ev,
  (VTBL_ENTRY)&_ZN10S7682C8_nt3v31Ev,
  (VTBL_ENTRY)&_ZN10S7682C8_nt3v32Ev,
  (VTBL_ENTRY)&_ZN8S7682C16D1Ev,
  (VTBL_ENTRY)&_ZN8S7682C16D0Ev,
  (VTBL_ENTRY)&_ZN8S7682C163v65Ev,
  (VTBL_ENTRY)&_ZN8S7682C163v66Ev,
  (VTBL_ENTRY)&_ZN8S7682C163v67Ev,
  (VTBL_ENTRY)&_ZN8S7682C163v68Ev,
  (VTBL_ENTRY)&_ZN8S7682C163v69Ev,
  (VTBL_ENTRY)&_ZN8S7682C163v70Ev,
  (VTBL_ENTRY)&_ZN8S7682C163v71Ev,
  ABISELECT(24,12),
  ABISELECT(2744,1764),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S7682C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N8S7682C16D1Ev,_ZThn4_N8S7682C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N8S7682C16D0Ev,_ZThn4_N8S7682C16D0Ev),
  (VTBL_ENTRY)&_ZN7S7682C63v19Ev,
  (VTBL_ENTRY)&_ZN7S7682C63v20Ev,
  (VTBL_ENTRY)&_ZN7S7682C63v21Ev,
  (VTBL_ENTRY)&_ZN7S7682C63v22Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S7682C16[0]),
  (VTBL_ENTRY)&_ZN7S7682C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7682C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v11Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(32,12),
  ABISELECT(-160,-108),
  ABISELECT(-192,-124),
  (VTBL_ENTRY)&(_ZTI8S7682C16[0]),
  (VTBL_ENTRY)&_ZN8S7682C133v42Ev,
  (VTBL_ENTRY)&_ZN8S7682C133v43Ev,
  (VTBL_ENTRY)&_ZN8S7682C133v44Ev,
  (VTBL_ENTRY)&_ZN8S7682C133v45Ev,
  (VTBL_ENTRY)&_ZN8S7682C133v46Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-224,-136),
  (VTBL_ENTRY)&(_ZTI8S7682C16[0]),
  (VTBL_ENTRY)&_ZN7S7682C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7682C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v14Ev,
  ABISELECT(288,192),
  ABISELECT(288,192),
  ABISELECT(288,192),
  ABISELECT(288,192),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-432,-268),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(848,572),
  ABISELECT(560,380),
  ABISELECT(552,376),
  ABISELECT(544,372),
  ABISELECT(-208,-132),
  ABISELECT(-240,-144),
  ABISELECT(-400,-252),
  ABISELECT(-432,-268),
  (VTBL_ENTRY)&(_ZTI8S7682C16[0]),
  (VTBL_ENTRY)&_ZN7S7682C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7682C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v15Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v16Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v17Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v18Ev,
  (VTBL_ENTRY)&_ZN8S7682C123v47Ev,
  (VTBL_ENTRY)&_ZN8S7682C123v48Ev,
  (VTBL_ENTRY)&_ZN8S7682C123v49Ev,
  (VTBL_ENTRY)&_ZN8S7682C123v50Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n200_N8S7682C16D1Ev,_ZTv0_n100_N8S7682C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n200_N8S7682C16D0Ev,_ZTv0_n100_N8S7682C16D0Ev),
  (VTBL_ENTRY)&_ZN8S7682C103v57Ev,
  (VTBL_ENTRY)&_ZN8S7682C103v58Ev,
  (VTBL_ENTRY)&_ZN8S7682C103v59Ev,
  (VTBL_ENTRY)&_ZN8S7682C103v60Ev,
  (VTBL_ENTRY)&_ZN8S7682C103v61Ev,
  (VTBL_ENTRY)&_ZN8S7682C103v62Ev,
  (VTBL_ENTRY)&_ZN8S7682C103v63Ev,
  (VTBL_ENTRY)&_ZN8S7682C103v64Ev,
  ABISELECT(560,380),
  ABISELECT(-496,-324),
  ABISELECT(-528,-336),
  ABISELECT(-688,-444),
  ABISELECT(-720,-460),
  (VTBL_ENTRY)&(_ZTI8S7682C16[0]),
  (VTBL_ENTRY)&_ZN7S7682C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7682C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v14Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn288_n200_N8S7682C16D1Ev,_ZTvn192_n100_N8S7682C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn288_n200_N8S7682C16D0Ev,_ZTvn192_n100_N8S7682C16D0Ev),
  (VTBL_ENTRY)&_ZN8S7682C153v53Ev,
  (VTBL_ENTRY)&_ZN8S7682C153v54Ev,
  (VTBL_ENTRY)&_ZN8S7682C153v55Ev,
  (VTBL_ENTRY)&_ZN8S7682C153v56Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-976,-640),
  (VTBL_ENTRY)&(_ZTI8S7682C16[0]),
  (VTBL_ENTRY)&_ZN10S7682C8_nt3v29Ev,
  (VTBL_ENTRY)&_ZN10S7682C8_nt3v30Ev,
  (VTBL_ENTRY)&_ZN10S7682C8_nt3v31Ev,
  (VTBL_ENTRY)&_ZN10S7682C8_nt3v32Ev,
  0,
  0,
  ABISELECT(-984,-644),
  ABISELECT(-760,-508),
  ABISELECT(-952,-628),
  ABISELECT(-792,-520),
  ABISELECT(8,4),
  ABISELECT(-984,-644),
  (VTBL_ENTRY)&(_ZTI8S7682C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S7682C16D1Ev,_ZTv0_n28_N8S7682C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S7682C16D0Ev,_ZTv0_n28_N8S7682C16D0Ev),
  (VTBL_ENTRY)&_ZN8S7682C113v51Ev,
  (VTBL_ENTRY)&_ZN8S7682C113v52Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-768,-512),
  ABISELECT(-800,-524),
  ABISELECT(-960,-632),
  ABISELECT(-992,-648),
  (VTBL_ENTRY)&(_ZTI8S7682C16[0]),
  (VTBL_ENTRY)&_ZN7S7682C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7682C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v15Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v16Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v17Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v18Ev,
  (VTBL_ENTRY)&_ZN8S7682C123v47Ev,
  (VTBL_ENTRY)&_ZN8S7682C123v48Ev,
  (VTBL_ENTRY)&_ZN8S7682C123v49Ev,
  (VTBL_ENTRY)&_ZN8S7682C123v50Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-1280,-840),
  (VTBL_ENTRY)&(_ZTI8S7682C16[0]),
  (VTBL_ENTRY)&_ZN7S7682C93v33Ev,
  (VTBL_ENTRY)&_ZN7S7682C93v34Ev,
  (VTBL_ENTRY)&_ZN7S7682C93v35Ev,
  (VTBL_ENTRY)&_ZN7S7682C93v36Ev,
  (VTBL_ENTRY)&_ZN7S7682C93v37Ev,
  (VTBL_ENTRY)&_ZN7S7682C93v38Ev,
  (VTBL_ENTRY)&_ZN7S7682C93v39Ev,
  (VTBL_ENTRY)&_ZN7S7682C93v40Ev,
  (VTBL_ENTRY)&_ZN7S7682C93v41Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-2720,-1752),
  ABISELECT(-2752,-1768),
  (VTBL_ENTRY)&(_ZTI8S7682C16[0]),
  (VTBL_ENTRY)&_ZN7S7682C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7682C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v15Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v16Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v17Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v18Ev,
};
extern VTBL_ENTRY _ZTV8S7682C16[];
extern void _ZN7S7682C6D1Ev();
extern void _ZN7S7682C6D0Ev();
extern void _ZN7S7682C63v19Ev();
extern void _ZN7S7682C63v20Ev();
extern void _ZN7S7682C63v21Ev();
extern void _ZN7S7682C63v22Ev();
static  VTBL_ENTRY _tg__ZTV7S7682C6__8S7682C16[] = {
  ABISELECT(24,12),
  ABISELECT(2744,1764),
  0,
  (VTBL_ENTRY)&(_ZTI7S7682C6[0]),
  (VTBL_ENTRY)&_ZN7S7682C6D1Ev,
  (VTBL_ENTRY)&_ZN7S7682C6D0Ev,
  (VTBL_ENTRY)&_ZN7S7682C63v19Ev,
  (VTBL_ENTRY)&_ZN7S7682C63v20Ev,
  (VTBL_ENTRY)&_ZN7S7682C63v21Ev,
  (VTBL_ENTRY)&_ZN7S7682C63v22Ev,
};
extern void _ZN7S7682C32v8Ev();
extern void _ZN7S7682C32v9Ev();
extern void _ZN7S7682C33v10Ev();
extern void _ZN7S7682C33v11Ev();
extern void _ZN7S7682C43v12Ev();
extern void _ZN7S7682C43v13Ev();
extern void _ZN7S7682C43v14Ev();
extern void _ZN7S7682C23v15Ev();
extern void _ZN7S7682C23v16Ev();
extern void _ZN7S7682C23v17Ev();
extern void _ZN7S7682C23v18Ev();
static  VTBL_ENTRY _tg__ZTV7S7682C2__7S7682C6__8S7682C16[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-2720,-1752),
  ABISELECT(-2744,-1764),
  (VTBL_ENTRY)&(_ZTI7S7682C6[0]),
  (VTBL_ENTRY)&_ZN7S7682C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7682C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v15Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v16Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v17Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v18Ev,
};
extern void _ZN7S7682C32v8Ev();
extern void _ZN7S7682C32v9Ev();
extern void _ZN7S7682C33v10Ev();
extern void _ZN7S7682C33v11Ev();
static  VTBL_ENTRY _tg__ZTV7S7682C3__7S7682C6__8S7682C16[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI7S7682C6[0]),
  (VTBL_ENTRY)&_ZN7S7682C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7682C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v11Ev,
};
extern void _ZN8S7682C133v42Ev();
extern void _ZN8S7682C133v43Ev();
extern void _ZN8S7682C133v44Ev();
extern void _ZN8S7682C133v45Ev();
extern void _ZN8S7682C133v46Ev();
static  VTBL_ENTRY _tg__ZTV8S7682C13__8S7682C16[] = {
  ABISELECT(32,12),
  ABISELECT(-160,-108),
  0,
  (VTBL_ENTRY)&(_ZTI8S7682C13[0]),
  (VTBL_ENTRY)&_ZN8S7682C133v42Ev,
  (VTBL_ENTRY)&_ZN8S7682C133v43Ev,
  (VTBL_ENTRY)&_ZN8S7682C133v44Ev,
  (VTBL_ENTRY)&_ZN8S7682C133v45Ev,
  (VTBL_ENTRY)&_ZN8S7682C133v46Ev,
};
extern void _ZN7S7682C32v8Ev();
extern void _ZN7S7682C32v9Ev();
extern void _ZN7S7682C33v10Ev();
extern void _ZN7S7682C33v11Ev();
static  VTBL_ENTRY _tg__ZTV7S7682C3__8S7682C13__8S7682C16[] = {
  0,
  0,
  0,
  0,
  ABISELECT(160,108),
  (VTBL_ENTRY)&(_ZTI8S7682C13[0]),
  (VTBL_ENTRY)&_ZN7S7682C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7682C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v11Ev,
};
extern void _ZN7S7682C32v8Ev();
extern void _ZN7S7682C32v9Ev();
extern void _ZN7S7682C33v10Ev();
extern void _ZN7S7682C33v11Ev();
extern void _ZN7S7682C43v12Ev();
extern void _ZN7S7682C43v13Ev();
extern void _ZN7S7682C43v14Ev();
static  VTBL_ENTRY _tg__ZTV7S7682C4__8S7682C13__8S7682C16[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-32,-12),
  (VTBL_ENTRY)&(_ZTI8S7682C13[0]),
  (VTBL_ENTRY)&_ZN7S7682C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7682C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v14Ev,
};
extern void _ZN7S7682C32v8Ev();
extern void _ZN7S7682C32v9Ev();
extern void _ZN7S7682C33v10Ev();
extern void _ZN7S7682C33v11Ev();
extern void _ZN7S7682C43v12Ev();
extern void _ZN7S7682C43v13Ev();
extern void _ZN7S7682C43v14Ev();
extern void _ZN7S7682C23v15Ev();
extern void _ZN7S7682C23v16Ev();
extern void _ZN7S7682C23v17Ev();
extern void _ZN7S7682C23v18Ev();
extern void _ZN8S7682C123v47Ev();
extern void _ZN8S7682C123v48Ev();
extern void _ZN8S7682C123v49Ev();
extern void _ZN8S7682C123v50Ev();
extern void _ZN8S7682C10D1Ev();
extern void _ZN8S7682C10D0Ev();
extern void _ZN8S7682C103v57Ev();
extern void _ZN8S7682C103v58Ev();
extern void _ZN8S7682C103v59Ev();
extern void _ZN8S7682C103v60Ev();
extern void _ZN8S7682C103v61Ev();
extern void _ZN8S7682C103v62Ev();
extern void _ZN8S7682C103v63Ev();
extern void _ZN8S7682C103v64Ev();
static  VTBL_ENTRY _tg__ZTV8S7682C10__8S7682C16[] = {
  ABISELECT(848,572),
  ABISELECT(560,380),
  ABISELECT(552,376),
  ABISELECT(544,372),
  ABISELECT(-208,-132),
  ABISELECT(-240,-144),
  ABISELECT(-400,-252),
  0,
  (VTBL_ENTRY)&(_ZTI8S7682C10[0]),
  (VTBL_ENTRY)&_ZN7S7682C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7682C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v15Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v16Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v17Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v18Ev,
  (VTBL_ENTRY)&_ZN8S7682C123v47Ev,
  (VTBL_ENTRY)&_ZN8S7682C123v48Ev,
  (VTBL_ENTRY)&_ZN8S7682C123v49Ev,
  (VTBL_ENTRY)&_ZN8S7682C123v50Ev,
  (VTBL_ENTRY)&_ZN8S7682C10D1Ev,
  (VTBL_ENTRY)&_ZN8S7682C10D0Ev,
  (VTBL_ENTRY)&_ZN8S7682C103v57Ev,
  (VTBL_ENTRY)&_ZN8S7682C103v58Ev,
  (VTBL_ENTRY)&_ZN8S7682C103v59Ev,
  (VTBL_ENTRY)&_ZN8S7682C103v60Ev,
  (VTBL_ENTRY)&_ZN8S7682C103v61Ev,
  (VTBL_ENTRY)&_ZN8S7682C103v62Ev,
  (VTBL_ENTRY)&_ZN8S7682C103v63Ev,
  (VTBL_ENTRY)&_ZN8S7682C103v64Ev,
};
extern void _ZN7S7682C32v8Ev();
extern void _ZN7S7682C32v9Ev();
extern void _ZN7S7682C33v10Ev();
extern void _ZN7S7682C33v11Ev();
extern void _ZN7S7682C43v12Ev();
extern void _ZN7S7682C43v13Ev();
extern void _ZN7S7682C43v14Ev();
extern void _ZN7S7682C23v15Ev();
extern void _ZN7S7682C23v16Ev();
extern void _ZN7S7682C23v17Ev();
extern void _ZN7S7682C23v18Ev();
extern void _ZN8S7682C123v47Ev();
extern void _ZN8S7682C123v48Ev();
extern void _ZN8S7682C123v49Ev();
extern void _ZN8S7682C123v50Ev();
static  VTBL_ENTRY _tg__ZTV8S7682C128S7682C10__A1__8S7682C16[] = {
  ABISELECT(-208,-132),
  ABISELECT(-240,-144),
  ABISELECT(-400,-252),
  0,
  (VTBL_ENTRY)&(_ZTI8S7682C12[0]),
  (VTBL_ENTRY)&_ZN7S7682C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7682C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v15Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v16Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v17Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v18Ev,
  (VTBL_ENTRY)&_ZN8S7682C123v47Ev,
  (VTBL_ENTRY)&_ZN8S7682C123v48Ev,
  (VTBL_ENTRY)&_ZN8S7682C123v49Ev,
  (VTBL_ENTRY)&_ZN8S7682C123v50Ev,
};
extern void _ZN7S7682C32v8Ev();
extern void _ZN7S7682C32v9Ev();
extern void _ZN7S7682C33v10Ev();
extern void _ZN7S7682C33v11Ev();
extern void _ZN7S7682C43v12Ev();
extern void _ZN7S7682C43v13Ev();
extern void _ZN7S7682C43v14Ev();
extern void _ZN7S7682C23v15Ev();
extern void _ZN7S7682C23v16Ev();
extern void _ZN7S7682C23v17Ev();
extern void _ZN7S7682C23v18Ev();
static  VTBL_ENTRY _tg__ZTV7S7682C28S7682C128S7682C10__A1__8S7682C16[] = {
  ABISELECT(-400,-252),
  0,
  (VTBL_ENTRY)&(_ZTI7S7682C2[0]),
  (VTBL_ENTRY)&_ZN7S7682C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7682C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v15Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v16Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v17Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v18Ev,
};
extern void _ZN7S7682C32v8Ev();
extern void _ZN7S7682C32v9Ev();
extern void _ZN7S7682C33v10Ev();
extern void _ZN7S7682C33v11Ev();
static  VTBL_ENTRY _tg__ZTV7S7682C3__7S7682C28S7682C128S7682C10__A1__8S7682C16[] = {
  0,
  0,
  0,
  0,
  ABISELECT(400,252),
  (VTBL_ENTRY)&(_ZTI7S7682C2[0]),
  (VTBL_ENTRY)&_ZN7S7682C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7682C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v11Ev,
};
extern void _ZN8S7682C133v42Ev();
extern void _ZN8S7682C133v43Ev();
extern void _ZN8S7682C133v44Ev();
extern void _ZN8S7682C133v45Ev();
extern void _ZN8S7682C133v46Ev();
static  VTBL_ENTRY _tg__ZTV8S7682C13__8S7682C128S7682C10__A1__8S7682C16[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(32,12),
  ABISELECT(-160,-108),
  ABISELECT(240,144),
  (VTBL_ENTRY)&(_ZTI8S7682C12[0]),
  (VTBL_ENTRY)&_ZN8S7682C133v42Ev,
  (VTBL_ENTRY)&_ZN8S7682C133v43Ev,
  (VTBL_ENTRY)&_ZN8S7682C133v44Ev,
  (VTBL_ENTRY)&_ZN8S7682C133v45Ev,
  (VTBL_ENTRY)&_ZN8S7682C133v46Ev,
};
extern void _ZN7S7682C32v8Ev();
extern void _ZN7S7682C32v9Ev();
extern void _ZN7S7682C33v10Ev();
extern void _ZN7S7682C33v11Ev();
static  VTBL_ENTRY _tg__ZTV7S7682C3__8S7682C128S7682C10__A1__8S7682C16[] = {
  0,
  0,
  0,
  0,
  ABISELECT(400,252),
  (VTBL_ENTRY)&(_ZTI8S7682C12[0]),
  (VTBL_ENTRY)&_ZN7S7682C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7682C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v11Ev,
};
extern void _ZN7S7682C32v8Ev();
extern void _ZN7S7682C32v9Ev();
extern void _ZN7S7682C33v10Ev();
extern void _ZN7S7682C33v11Ev();
extern void _ZN7S7682C43v12Ev();
extern void _ZN7S7682C43v13Ev();
extern void _ZN7S7682C43v14Ev();
static  VTBL_ENTRY _tg__ZTV7S7682C4__8S7682C128S7682C10__A1__8S7682C16[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(208,132),
  (VTBL_ENTRY)&(_ZTI8S7682C12[0]),
  (VTBL_ENTRY)&_ZN7S7682C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7682C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v14Ev,
};
extern void _ZN7S7682C32v8Ev();
extern void _ZN7S7682C32v9Ev();
extern void _ZN7S7682C33v10Ev();
extern void _ZN7S7682C33v11Ev();
extern void _ZN7S7682C43v12Ev();
extern void _ZN7S7682C43v13Ev();
extern void _ZN7S7682C43v14Ev();
extern void _ZN8S7682C15D1Ev();
extern void _ZN8S7682C15D0Ev();
extern void _ZN8S7682C153v53Ev();
extern void _ZN8S7682C153v54Ev();
extern void _ZN8S7682C153v55Ev();
extern void _ZN8S7682C153v56Ev();
static  VTBL_ENTRY _tg__ZTV8S7682C158S7682C10__8S7682C16[] = {
  ABISELECT(560,380),
  ABISELECT(-496,-324),
  ABISELECT(-528,-336),
  ABISELECT(-688,-444),
  0,
  (VTBL_ENTRY)&(_ZTI8S7682C15[0]),
  (VTBL_ENTRY)&_ZN7S7682C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7682C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v14Ev,
  (VTBL_ENTRY)&_ZN8S7682C15D1Ev,
  (VTBL_ENTRY)&_ZN8S7682C15D0Ev,
  (VTBL_ENTRY)&_ZN8S7682C153v53Ev,
  (VTBL_ENTRY)&_ZN8S7682C153v54Ev,
  (VTBL_ENTRY)&_ZN8S7682C153v55Ev,
  (VTBL_ENTRY)&_ZN8S7682C153v56Ev,
};
extern void _ZN7S7682C32v8Ev();
extern void _ZN7S7682C32v9Ev();
extern void _ZN7S7682C33v10Ev();
extern void _ZN7S7682C33v11Ev();
static  VTBL_ENTRY _tg__ZTV7S7682C3__8S7682C158S7682C10__8S7682C16[] = {
  0,
  0,
  0,
  0,
  ABISELECT(688,444),
  (VTBL_ENTRY)&(_ZTI8S7682C15[0]),
  (VTBL_ENTRY)&_ZN7S7682C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7682C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v11Ev,
};
extern void _ZN8S7682C133v42Ev();
extern void _ZN8S7682C133v43Ev();
extern void _ZN8S7682C133v44Ev();
extern void _ZN8S7682C133v45Ev();
extern void _ZN8S7682C133v46Ev();
static  VTBL_ENTRY _tg__ZTV8S7682C13__8S7682C158S7682C10__8S7682C16[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(32,12),
  ABISELECT(-160,-108),
  ABISELECT(528,336),
  (VTBL_ENTRY)&(_ZTI8S7682C15[0]),
  (VTBL_ENTRY)&_ZN8S7682C133v42Ev,
  (VTBL_ENTRY)&_ZN8S7682C133v43Ev,
  (VTBL_ENTRY)&_ZN8S7682C133v44Ev,
  (VTBL_ENTRY)&_ZN8S7682C133v45Ev,
  (VTBL_ENTRY)&_ZN8S7682C133v46Ev,
};
extern void _ZN7S7682C32v8Ev();
extern void _ZN7S7682C32v9Ev();
extern void _ZN7S7682C33v10Ev();
extern void _ZN7S7682C33v11Ev();
extern void _ZN7S7682C43v12Ev();
extern void _ZN7S7682C43v13Ev();
extern void _ZN7S7682C43v14Ev();
static  VTBL_ENTRY _tg__ZTV7S7682C4__8S7682C158S7682C10__8S7682C16[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(496,324),
  (VTBL_ENTRY)&(_ZTI8S7682C15[0]),
  (VTBL_ENTRY)&_ZN7S7682C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7682C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v14Ev,
};
extern void _ZN7S7682C93v33Ev();
extern void _ZN7S7682C93v34Ev();
extern void _ZN7S7682C93v35Ev();
extern void _ZN7S7682C93v36Ev();
extern void _ZN7S7682C93v37Ev();
extern void _ZN7S7682C93v38Ev();
extern void _ZN7S7682C93v39Ev();
extern void _ZN7S7682C93v40Ev();
extern void _ZN7S7682C93v41Ev();
static  VTBL_ENTRY _tg__ZTV7S7682C9__8S7682C158S7682C10__8S7682C16[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-560,-380),
  (VTBL_ENTRY)&(_ZTI8S7682C15[0]),
  (VTBL_ENTRY)&_ZN7S7682C93v33Ev,
  (VTBL_ENTRY)&_ZN7S7682C93v34Ev,
  (VTBL_ENTRY)&_ZN7S7682C93v35Ev,
  (VTBL_ENTRY)&_ZN7S7682C93v36Ev,
  (VTBL_ENTRY)&_ZN7S7682C93v37Ev,
  (VTBL_ENTRY)&_ZN7S7682C93v38Ev,
  (VTBL_ENTRY)&_ZN7S7682C93v39Ev,
  (VTBL_ENTRY)&_ZN7S7682C93v40Ev,
  (VTBL_ENTRY)&_ZN7S7682C93v41Ev,
};
extern void _ZN10S7682C8_nt3v29Ev();
extern void _ZN10S7682C8_nt3v30Ev();
extern void _ZN10S7682C8_nt3v31Ev();
extern void _ZN10S7682C8_nt3v32Ev();
static  VTBL_ENTRY _tg__ZTV10S7682C8_nt__8S7682C10__8S7682C16[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-544,-372),
  (VTBL_ENTRY)&(_ZTI8S7682C10[0]),
  (VTBL_ENTRY)&_ZN10S7682C8_nt3v29Ev,
  (VTBL_ENTRY)&_ZN10S7682C8_nt3v30Ev,
  (VTBL_ENTRY)&_ZN10S7682C8_nt3v31Ev,
  (VTBL_ENTRY)&_ZN10S7682C8_nt3v32Ev,
};
extern void ABISELECT(_ZTv0_n56_N8S7682C10D1Ev,_ZTv0_n28_N8S7682C10D1Ev)();
extern void ABISELECT(_ZThn552_N8S7682C10D1Ev,_ZThn376_N8S7682C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S7682C10D0Ev,_ZTv0_n28_N8S7682C10D0Ev)();
extern void ABISELECT(_ZThn552_N8S7682C10D0Ev,_ZThn376_N8S7682C10D0Ev)() __attribute__((weak));
extern void _ZN8S7682C113v51Ev();
extern void _ZN8S7682C113v52Ev();
static  VTBL_ENTRY _tg__ZTV8S7682C11__8S7682C10__8S7682C16[] = {
  0,
  0,
  ABISELECT(-552,-376),
  ABISELECT(-760,-508),
  ABISELECT(-952,-628),
  ABISELECT(-792,-520),
  ABISELECT(8,4),
  ABISELECT(-552,-376),
  (VTBL_ENTRY)&(_ZTI8S7682C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S7682C10D1Ev,_ZTv0_n28_N8S7682C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S7682C10D0Ev,_ZTv0_n28_N8S7682C10D0Ev),
  (VTBL_ENTRY)&_ZN8S7682C113v51Ev,
  (VTBL_ENTRY)&_ZN8S7682C113v52Ev,
};
extern void _ZN7S7682C32v8Ev();
extern void _ZN7S7682C32v9Ev();
extern void _ZN7S7682C33v10Ev();
extern void _ZN7S7682C33v11Ev();
extern void _ZN7S7682C43v12Ev();
extern void _ZN7S7682C43v13Ev();
extern void _ZN7S7682C43v14Ev();
extern void _ZN7S7682C23v15Ev();
extern void _ZN7S7682C23v16Ev();
extern void _ZN7S7682C23v17Ev();
extern void _ZN7S7682C23v18Ev();
extern void _ZN8S7682C123v47Ev();
extern void _ZN8S7682C123v48Ev();
extern void _ZN8S7682C123v49Ev();
extern void _ZN8S7682C123v50Ev();
static  VTBL_ENTRY _tg__ZTV8S7682C12__8S7682C10__8S7682C16[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-768,-512),
  ABISELECT(-800,-524),
  ABISELECT(-960,-632),
  ABISELECT(-560,-380),
  (VTBL_ENTRY)&(_ZTI8S7682C10[0]),
  (VTBL_ENTRY)&_ZN7S7682C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7682C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v15Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v16Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v17Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v18Ev,
  (VTBL_ENTRY)&_ZN8S7682C123v47Ev,
  (VTBL_ENTRY)&_ZN8S7682C123v48Ev,
  (VTBL_ENTRY)&_ZN8S7682C123v49Ev,
  (VTBL_ENTRY)&_ZN8S7682C123v50Ev,
};
extern void _ZN8S7682C133v42Ev();
extern void _ZN8S7682C133v43Ev();
extern void _ZN8S7682C133v44Ev();
extern void _ZN8S7682C133v45Ev();
extern void _ZN8S7682C133v46Ev();
static  VTBL_ENTRY _tg__ZTV8S7682C13__8S7682C10__8S7682C16[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(32,12),
  ABISELECT(-160,-108),
  ABISELECT(240,144),
  (VTBL_ENTRY)&(_ZTI8S7682C10[0]),
  (VTBL_ENTRY)&_ZN8S7682C133v42Ev,
  (VTBL_ENTRY)&_ZN8S7682C133v43Ev,
  (VTBL_ENTRY)&_ZN8S7682C133v44Ev,
  (VTBL_ENTRY)&_ZN8S7682C133v45Ev,
  (VTBL_ENTRY)&_ZN8S7682C133v46Ev,
};
extern void _ZN7S7682C32v8Ev();
extern void _ZN7S7682C32v9Ev();
extern void _ZN7S7682C33v10Ev();
extern void _ZN7S7682C33v11Ev();
static  VTBL_ENTRY _tg__ZTV7S7682C3__8S7682C10__8S7682C16[] = {
  0,
  0,
  0,
  0,
  ABISELECT(400,252),
  (VTBL_ENTRY)&(_ZTI8S7682C10[0]),
  (VTBL_ENTRY)&_ZN7S7682C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7682C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v11Ev,
};
extern void _ZN7S7682C32v8Ev();
extern void _ZN7S7682C32v9Ev();
extern void _ZN7S7682C33v10Ev();
extern void _ZN7S7682C33v11Ev();
extern void _ZN7S7682C43v12Ev();
extern void _ZN7S7682C43v13Ev();
extern void _ZN7S7682C43v14Ev();
static  VTBL_ENTRY _tg__ZTV7S7682C4__8S7682C10__8S7682C16[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(208,132),
  (VTBL_ENTRY)&(_ZTI8S7682C10[0]),
  (VTBL_ENTRY)&_ZN7S7682C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7682C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v14Ev,
};
extern void _ZN7S7682C32v8Ev();
extern void _ZN7S7682C32v9Ev();
extern void _ZN7S7682C33v10Ev();
extern void _ZN7S7682C33v11Ev();
extern void _ZN7S7682C43v12Ev();
extern void _ZN7S7682C43v13Ev();
extern void _ZN7S7682C43v14Ev();
extern void ABISELECT(_ZThn288_N8S7682C10D1Ev,_ZThn192_N8S7682C10D1Ev)();
extern void ABISELECT(_ZThn288_N8S7682C10D0Ev,_ZThn192_N8S7682C10D0Ev)();
extern void _ZN8S7682C153v53Ev();
extern void _ZN8S7682C153v54Ev();
extern void _ZN8S7682C153v55Ev();
extern void _ZN8S7682C153v56Ev();
static  VTBL_ENTRY _tg__ZTV8S7682C15__8S7682C10__8S7682C16[] = {
  ABISELECT(560,380),
  ABISELECT(-496,-324),
  ABISELECT(-528,-336),
  ABISELECT(-688,-444),
  ABISELECT(-288,-192),
  (VTBL_ENTRY)&(_ZTI8S7682C10[0]),
  (VTBL_ENTRY)&_ZN7S7682C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7682C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v14Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn288_N8S7682C10D1Ev,_ZThn192_N8S7682C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn288_N8S7682C10D0Ev,_ZThn192_N8S7682C10D0Ev),
  (VTBL_ENTRY)&_ZN8S7682C153v53Ev,
  (VTBL_ENTRY)&_ZN8S7682C153v54Ev,
  (VTBL_ENTRY)&_ZN8S7682C153v55Ev,
  (VTBL_ENTRY)&_ZN8S7682C153v56Ev,
};
extern void _ZN7S7682C93v33Ev();
extern void _ZN7S7682C93v34Ev();
extern void _ZN7S7682C93v35Ev();
extern void _ZN7S7682C93v36Ev();
extern void _ZN7S7682C93v37Ev();
extern void _ZN7S7682C93v38Ev();
extern void _ZN7S7682C93v39Ev();
extern void _ZN7S7682C93v40Ev();
extern void _ZN7S7682C93v41Ev();
static  VTBL_ENTRY _tg__ZTV7S7682C9__8S7682C10__8S7682C16[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-848,-572),
  (VTBL_ENTRY)&(_ZTI8S7682C10[0]),
  (VTBL_ENTRY)&_ZN7S7682C93v33Ev,
  (VTBL_ENTRY)&_ZN7S7682C93v34Ev,
  (VTBL_ENTRY)&_ZN7S7682C93v35Ev,
  (VTBL_ENTRY)&_ZN7S7682C93v36Ev,
  (VTBL_ENTRY)&_ZN7S7682C93v37Ev,
  (VTBL_ENTRY)&_ZN7S7682C93v38Ev,
  (VTBL_ENTRY)&_ZN7S7682C93v39Ev,
  (VTBL_ENTRY)&_ZN7S7682C93v40Ev,
  (VTBL_ENTRY)&_ZN7S7682C93v41Ev,
};
extern void _ZN8S7682C11D1Ev();
extern void _ZN8S7682C11D0Ev();
extern void _ZN8S7682C113v51Ev();
extern void _ZN8S7682C113v52Ev();
static  VTBL_ENTRY _tg__ZTV8S7682C11__8S7682C16[] = {
  ABISELECT(-760,-508),
  ABISELECT(-952,-628),
  ABISELECT(-792,-520),
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S7682C11[0]),
  (VTBL_ENTRY)&_ZN8S7682C11D1Ev,
  (VTBL_ENTRY)&_ZN8S7682C11D0Ev,
  (VTBL_ENTRY)&_ZN8S7682C113v51Ev,
  (VTBL_ENTRY)&_ZN8S7682C113v52Ev,
};
extern void _ZN7S7682C32v8Ev();
extern void _ZN7S7682C32v9Ev();
extern void _ZN7S7682C33v10Ev();
extern void _ZN7S7682C33v11Ev();
extern void _ZN7S7682C43v12Ev();
extern void _ZN7S7682C43v13Ev();
extern void _ZN7S7682C43v14Ev();
extern void _ZN7S7682C23v15Ev();
extern void _ZN7S7682C23v16Ev();
extern void _ZN7S7682C23v17Ev();
extern void _ZN7S7682C23v18Ev();
extern void _ZN8S7682C123v47Ev();
extern void _ZN8S7682C123v48Ev();
extern void _ZN8S7682C123v49Ev();
extern void _ZN8S7682C123v50Ev();
static  VTBL_ENTRY _tg__ZTV8S7682C12__8S7682C11__8S7682C16[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-768,-512),
  ABISELECT(-800,-524),
  ABISELECT(-960,-632),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S7682C11[0]),
  (VTBL_ENTRY)&_ZN7S7682C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7682C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v15Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v16Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v17Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v18Ev,
  (VTBL_ENTRY)&_ZN8S7682C123v47Ev,
  (VTBL_ENTRY)&_ZN8S7682C123v48Ev,
  (VTBL_ENTRY)&_ZN8S7682C123v49Ev,
  (VTBL_ENTRY)&_ZN8S7682C123v50Ev,
};
extern void _ZN8S7682C133v42Ev();
extern void _ZN8S7682C133v43Ev();
extern void _ZN8S7682C133v44Ev();
extern void _ZN8S7682C133v45Ev();
extern void _ZN8S7682C133v46Ev();
static  VTBL_ENTRY _tg__ZTV8S7682C13__8S7682C11__8S7682C16[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(32,12),
  ABISELECT(-160,-108),
  ABISELECT(792,520),
  (VTBL_ENTRY)&(_ZTI8S7682C11[0]),
  (VTBL_ENTRY)&_ZN8S7682C133v42Ev,
  (VTBL_ENTRY)&_ZN8S7682C133v43Ev,
  (VTBL_ENTRY)&_ZN8S7682C133v44Ev,
  (VTBL_ENTRY)&_ZN8S7682C133v45Ev,
  (VTBL_ENTRY)&_ZN8S7682C133v46Ev,
};
extern void _ZN7S7682C32v8Ev();
extern void _ZN7S7682C32v9Ev();
extern void _ZN7S7682C33v10Ev();
extern void _ZN7S7682C33v11Ev();
static  VTBL_ENTRY _tg__ZTV7S7682C3__8S7682C11__8S7682C16[] = {
  0,
  0,
  0,
  0,
  ABISELECT(952,628),
  (VTBL_ENTRY)&(_ZTI8S7682C11[0]),
  (VTBL_ENTRY)&_ZN7S7682C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7682C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v11Ev,
};
extern void _ZN7S7682C32v8Ev();
extern void _ZN7S7682C32v9Ev();
extern void _ZN7S7682C33v10Ev();
extern void _ZN7S7682C33v11Ev();
extern void _ZN7S7682C43v12Ev();
extern void _ZN7S7682C43v13Ev();
extern void _ZN7S7682C43v14Ev();
static  VTBL_ENTRY _tg__ZTV7S7682C4__8S7682C11__8S7682C16[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(760,508),
  (VTBL_ENTRY)&(_ZTI8S7682C11[0]),
  (VTBL_ENTRY)&_ZN7S7682C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7682C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v14Ev,
};
extern void _ZN7S7682C32v8Ev();
extern void _ZN7S7682C32v9Ev();
extern void _ZN7S7682C33v10Ev();
extern void _ZN7S7682C33v11Ev();
extern void _ZN7S7682C43v12Ev();
extern void _ZN7S7682C43v13Ev();
extern void _ZN7S7682C43v14Ev();
extern void _ZN7S7682C23v15Ev();
extern void _ZN7S7682C23v16Ev();
extern void _ZN7S7682C23v17Ev();
extern void _ZN7S7682C23v18Ev();
extern void _ZN8S7682C123v47Ev();
extern void _ZN8S7682C123v48Ev();
extern void _ZN8S7682C123v49Ev();
extern void _ZN8S7682C123v50Ev();
static  VTBL_ENTRY _tg__ZTV8S7682C12__8S7682C16[] = {
  ABISELECT(-768,-512),
  ABISELECT(-800,-524),
  ABISELECT(-960,-632),
  0,
  (VTBL_ENTRY)&(_ZTI8S7682C12[0]),
  (VTBL_ENTRY)&_ZN7S7682C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7682C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v15Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v16Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v17Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v18Ev,
  (VTBL_ENTRY)&_ZN8S7682C123v47Ev,
  (VTBL_ENTRY)&_ZN8S7682C123v48Ev,
  (VTBL_ENTRY)&_ZN8S7682C123v49Ev,
  (VTBL_ENTRY)&_ZN8S7682C123v50Ev,
};
extern void _ZN7S7682C32v8Ev();
extern void _ZN7S7682C32v9Ev();
extern void _ZN7S7682C33v10Ev();
extern void _ZN7S7682C33v11Ev();
extern void _ZN7S7682C43v12Ev();
extern void _ZN7S7682C43v13Ev();
extern void _ZN7S7682C43v14Ev();
extern void _ZN7S7682C23v15Ev();
extern void _ZN7S7682C23v16Ev();
extern void _ZN7S7682C23v17Ev();
extern void _ZN7S7682C23v18Ev();
static  VTBL_ENTRY _tg__ZTV7S7682C28S7682C12__8S7682C16[] = {
  ABISELECT(-960,-632),
  0,
  (VTBL_ENTRY)&(_ZTI7S7682C2[0]),
  (VTBL_ENTRY)&_ZN7S7682C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7682C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v15Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v16Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v17Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v18Ev,
};
extern void _ZN7S7682C32v8Ev();
extern void _ZN7S7682C32v9Ev();
extern void _ZN7S7682C33v10Ev();
extern void _ZN7S7682C33v11Ev();
static  VTBL_ENTRY _tg__ZTV7S7682C3__7S7682C28S7682C12__8S7682C16[] = {
  0,
  0,
  0,
  0,
  ABISELECT(960,632),
  (VTBL_ENTRY)&(_ZTI7S7682C2[0]),
  (VTBL_ENTRY)&_ZN7S7682C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7682C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v11Ev,
};
extern void _ZN8S7682C133v42Ev();
extern void _ZN8S7682C133v43Ev();
extern void _ZN8S7682C133v44Ev();
extern void _ZN8S7682C133v45Ev();
extern void _ZN8S7682C133v46Ev();
static  VTBL_ENTRY _tg__ZTV8S7682C13__8S7682C12__8S7682C16[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(32,12),
  ABISELECT(-160,-108),
  ABISELECT(800,524),
  (VTBL_ENTRY)&(_ZTI8S7682C12[0]),
  (VTBL_ENTRY)&_ZN8S7682C133v42Ev,
  (VTBL_ENTRY)&_ZN8S7682C133v43Ev,
  (VTBL_ENTRY)&_ZN8S7682C133v44Ev,
  (VTBL_ENTRY)&_ZN8S7682C133v45Ev,
  (VTBL_ENTRY)&_ZN8S7682C133v46Ev,
};
extern void _ZN7S7682C32v8Ev();
extern void _ZN7S7682C32v9Ev();
extern void _ZN7S7682C33v10Ev();
extern void _ZN7S7682C33v11Ev();
static  VTBL_ENTRY _tg__ZTV7S7682C3__8S7682C12__8S7682C16[] = {
  0,
  0,
  0,
  0,
  ABISELECT(960,632),
  (VTBL_ENTRY)&(_ZTI8S7682C12[0]),
  (VTBL_ENTRY)&_ZN7S7682C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7682C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v11Ev,
};
extern void _ZN7S7682C32v8Ev();
extern void _ZN7S7682C32v9Ev();
extern void _ZN7S7682C33v10Ev();
extern void _ZN7S7682C33v11Ev();
extern void _ZN7S7682C43v12Ev();
extern void _ZN7S7682C43v13Ev();
extern void _ZN7S7682C43v14Ev();
static  VTBL_ENTRY _tg__ZTV7S7682C4__8S7682C12__8S7682C16[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(768,512),
  (VTBL_ENTRY)&(_ZTI8S7682C12[0]),
  (VTBL_ENTRY)&_ZN7S7682C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7682C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v14Ev,
};
extern void _ZN7S7682C32v8Ev();
extern void _ZN7S7682C32v9Ev();
extern void _ZN7S7682C33v10Ev();
extern void _ZN7S7682C33v11Ev();
extern void _ZN7S7682C43v12Ev();
extern void _ZN7S7682C43v13Ev();
extern void _ZN7S7682C43v14Ev();
extern void _ZN7S7682C23v15Ev();
extern void _ZN7S7682C23v16Ev();
extern void _ZN7S7682C23v17Ev();
extern void _ZN7S7682C23v18Ev();
static  VTBL_ENTRY _tg__ZTV7S7682C2__A2__8S7682C16[] = {
  ABISELECT(-2720,-1752),
  0,
  (VTBL_ENTRY)&(_ZTI7S7682C2[0]),
  (VTBL_ENTRY)&_ZN7S7682C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7682C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v15Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v16Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v17Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v18Ev,
};
extern void _ZN7S7682C32v8Ev();
extern void _ZN7S7682C32v9Ev();
extern void _ZN7S7682C33v10Ev();
extern void _ZN7S7682C33v11Ev();
static  VTBL_ENTRY _tg__ZTV7S7682C3__7S7682C2__A2__8S7682C16[] = {
  0,
  0,
  0,
  0,
  ABISELECT(2720,1752),
  (VTBL_ENTRY)&(_ZTI7S7682C2[0]),
  (VTBL_ENTRY)&_ZN7S7682C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7682C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v11Ev,
};
static  VTT_ENTRY vtt_S7682C16[] = {
  {&(_ZTV8S7682C16[11]),  11,258},
  {&(_tg__ZTV7S7682C6__8S7682C16[4]),  4,10},
  {&(_tg__ZTV7S7682C2__7S7682C6__8S7682C16[14]),  14,25},
  {&(_tg__ZTV7S7682C3__7S7682C6__8S7682C16[6]),  6,10},
  {&(_ZTV8S7682C16[40]),  40,258},
  {&(_ZTV8S7682C16[53]),  53,258},
  {&(_ZTV8S7682C16[67]),  67,258},
  {&(_ZTV8S7682C16[111]),  111,258},
  {&(_ZTV8S7682C16[161]),  161,258},
  {&(_ZTV8S7682C16[174]),  174,258},
  {&(_ZTV8S7682C16[198]),  198,258},
  {&(_ZTV8S7682C16[142]),  142,258},
  {&(_ZTV8S7682C16[224]),  224,258},
  {&(_ZTV8S7682C16[28]),  28,258},
  {&(_ZTV8S7682C16[247]),  247,258},
  {&(_tg__ZTV8S7682C13__8S7682C16[4]),  4,9},
  {&(_tg__ZTV7S7682C3__8S7682C13__8S7682C16[6]),  6,10},
  {&(_tg__ZTV7S7682C4__8S7682C13__8S7682C16[9]),  9,16},
  {&(_tg__ZTV8S7682C10__8S7682C16[9]),  9,34},
  {&(_tg__ZTV8S7682C128S7682C10__A1__8S7682C16[5]),  5,20},
  {&(_tg__ZTV7S7682C28S7682C128S7682C10__A1__8S7682C16[3]),  3,14},
  {&(_tg__ZTV7S7682C3__7S7682C28S7682C128S7682C10__A1__8S7682C16[6]),  6,10},
  {&(_tg__ZTV8S7682C13__8S7682C128S7682C10__A1__8S7682C16[9]),  9,14},
  {&(_tg__ZTV7S7682C3__8S7682C128S7682C10__A1__8S7682C16[6]),  6,10},
  {&(_tg__ZTV7S7682C4__8S7682C128S7682C10__A1__8S7682C16[9]),  9,16},
  {&(_tg__ZTV8S7682C158S7682C10__8S7682C16[6]),  6,19},
  {&(_tg__ZTV7S7682C3__8S7682C158S7682C10__8S7682C16[6]),  6,10},
  {&(_tg__ZTV8S7682C13__8S7682C158S7682C10__8S7682C16[9]),  9,14},
  {&(_tg__ZTV7S7682C4__8S7682C158S7682C10__8S7682C16[9]),  9,16},
  {&(_tg__ZTV7S7682C9__8S7682C158S7682C10__8S7682C16[11]),  11,20},
  {&(_tg__ZTV10S7682C8_nt__8S7682C10__8S7682C16[6]),  6,10},
  {&(_tg__ZTV8S7682C11__8S7682C10__8S7682C16[9]),  9,13},
  {&(_tg__ZTV8S7682C12__8S7682C10__8S7682C16[20]),  20,35},
  {&(_tg__ZTV8S7682C13__8S7682C10__8S7682C16[9]),  9,14},
  {&(_tg__ZTV7S7682C3__8S7682C10__8S7682C16[6]),  6,10},
  {&(_tg__ZTV7S7682C4__8S7682C10__8S7682C16[9]),  9,16},
  {&(_tg__ZTV8S7682C15__8S7682C10__8S7682C16[6]),  6,19},
  {&(_tg__ZTV7S7682C9__8S7682C10__8S7682C16[11]),  11,20},
  {&(_tg__ZTV8S7682C11__8S7682C16[6]),  6,10},
  {&(_tg__ZTV8S7682C12__8S7682C11__8S7682C16[20]),  20,35},
  {&(_tg__ZTV8S7682C13__8S7682C11__8S7682C16[9]),  9,14},
  {&(_tg__ZTV7S7682C3__8S7682C11__8S7682C16[6]),  6,10},
  {&(_tg__ZTV7S7682C4__8S7682C11__8S7682C16[9]),  9,16},
  {&(_tg__ZTV8S7682C12__8S7682C16[5]),  5,20},
  {&(_tg__ZTV7S7682C28S7682C12__8S7682C16[3]),  3,14},
  {&(_tg__ZTV7S7682C3__7S7682C28S7682C12__8S7682C16[6]),  6,10},
  {&(_tg__ZTV8S7682C13__8S7682C12__8S7682C16[9]),  9,14},
  {&(_tg__ZTV7S7682C3__8S7682C12__8S7682C16[6]),  6,10},
  {&(_tg__ZTV7S7682C4__8S7682C12__8S7682C16[9]),  9,16},
  {&(_tg__ZTV7S7682C2__A2__8S7682C16[3]),  3,14},
  {&(_tg__ZTV7S7682C3__7S7682C2__A2__8S7682C16[6]),  6,10},
};
extern VTBL_ENTRY _ZTI8S7682C16[];
extern  VTBL_ENTRY _ZTV8S7682C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7682C16[];
static VTBL_ENTRY alt_thunk_names9[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S7682C10D0Ev,_ZTv0_n28_N8S7682C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn552_N8S7682C10D0Ev,_ZThn376_N8S7682C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S7682C10D1Ev,_ZTv0_n28_N8S7682C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn552_N8S7682C10D1Ev,_ZThn376_N8S7682C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S7682C16D0Ev,_ZTv0_n28_N8S7682C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn984_N8S7682C16D0Ev,_ZThn644_N8S7682C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S7682C16D1Ev,_ZTv0_n28_N8S7682C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn984_N8S7682C16D1Ev,_ZThn644_N8S7682C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n200_N8S7682C16D0Ev,_ZTv0_n100_N8S7682C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn432_N8S7682C16D0Ev,_ZThn268_N8S7682C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n200_N8S7682C16D1Ev,_ZTv0_n100_N8S7682C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn432_N8S7682C16D1Ev,_ZThn268_N8S7682C16D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7682C16 = {  "S7682C16", // class name
  bases_S7682C16, 24,
  &(vtc_S7682C16[0]), // expected_vtbl_contents
  &(vtt_S7682C16[0]), // expected_vtt_contents
  ABISELECT(2976,1904), // object size
  NSPAIRA(_ZTI8S7682C16),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S7682C16),258, //virtual function table var
  11, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7682C16),51, //virtual table table var
  24, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names9,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7682C17  {
  ::S7682C3 s7682c17f0;
  long double s7682c17f1;
  virtual void  v72(); // _ZN8S7682C173v72Ev
  virtual void  v73(); // _ZN8S7682C173v73Ev
  virtual void  v74(); // _ZN8S7682C173v74Ev
  virtual void  v75(); // _ZN8S7682C173v75Ev
  virtual void  v76(); // _ZN8S7682C173v76Ev
  virtual void  v77(); // _ZN8S7682C173v77Ev
  ~S7682C17(); // tgen
  S7682C17(); // tgen
};
//SIG(-1 S7682C17) C1{ v1 v2 v3 v4 v5 v6 FC2{ v7 v8 v9 v10 Fs:13 Fp FD[8]} FD}


void  S7682C17 ::v72(){vfunc_called(this, "_ZN8S7682C173v72Ev");}
void  S7682C17 ::v73(){vfunc_called(this, "_ZN8S7682C173v73Ev");}
void  S7682C17 ::v74(){vfunc_called(this, "_ZN8S7682C173v74Ev");}
void  S7682C17 ::v75(){vfunc_called(this, "_ZN8S7682C173v75Ev");}
void  S7682C17 ::v76(){vfunc_called(this, "_ZN8S7682C173v76Ev");}
void  S7682C17 ::v77(){vfunc_called(this, "_ZN8S7682C173v77Ev");}
S7682C17 ::~S7682C17(){ note_dtor("S7682C17", this);} // tgen
S7682C17 ::S7682C17(){ note_ctor("S7682C17", this);} // tgen

static void Test_S7682C17()
{
  extern Class_Descriptor cd_S7682C17;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(13,32)];
    init_test(&cd_S7682C17, buf);
    S7682C17 *dp, &lv = *(dp=new (buf) S7682C17());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(192,124), "sizeof(S7682C17)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7682C17)");
    check_field_offset(lv, s7682c17f0, ABISELECT(16,4), "S7682C17.s7682c17f0");
    check_field_offset(lv, s7682c17f1, ABISELECT(176,112), "S7682C17.s7682c17f1");
    test_class_info(&lv, &cd_S7682C17);
    dp->~S7682C17();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7682C17(Test_S7682C17, "S7682C17", ABISELECT(192,124));

#else // __cplusplus

extern void _ZN8S7682C17C1Ev();
extern void _ZN8S7682C17D1Ev();
Name_Map name_map_S7682C17[] = {
  NSPAIR(_ZN8S7682C17C1Ev),
  NSPAIR(_ZN8S7682C17D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S7682C17[];
extern void _ZN8S7682C173v72Ev();
extern void _ZN8S7682C173v73Ev();
extern void _ZN8S7682C173v74Ev();
extern void _ZN8S7682C173v75Ev();
extern void _ZN8S7682C173v76Ev();
extern void _ZN8S7682C173v77Ev();
static  VTBL_ENTRY vtc_S7682C17[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S7682C17[0]),
  (VTBL_ENTRY)&_ZN8S7682C173v72Ev,
  (VTBL_ENTRY)&_ZN8S7682C173v73Ev,
  (VTBL_ENTRY)&_ZN8S7682C173v74Ev,
  (VTBL_ENTRY)&_ZN8S7682C173v75Ev,
  (VTBL_ENTRY)&_ZN8S7682C173v76Ev,
  (VTBL_ENTRY)&_ZN8S7682C173v77Ev,
};
extern VTBL_ENTRY _ZTI8S7682C17[];
extern  VTBL_ENTRY _ZTV8S7682C17[];
Class_Descriptor cd_S7682C17 = {  "S7682C17", // class name
  0,0,//no base classes
  &(vtc_S7682C17[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(192,124), // object size
  NSPAIRA(_ZTI8S7682C17),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S7682C17),8, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7682C1  : S7682C2 , S7682C5 , virtual S7682C7 , S7682C16 , S7682C10 {
  ::S7682C17 s7682c1f0;
  virtual void  v1(); // _ZN7S7682C12v1Ev
  virtual void  v2(); // _ZN7S7682C12v2Ev
  virtual void  v3(); // _ZN7S7682C12v3Ev
  virtual void  v4(); // _ZN7S7682C12v4Ev
  virtual void  v5(); // _ZN7S7682C12v5Ev
  virtual void  v6(); // _ZN7S7682C12v6Ev
  virtual void  v7(); // _ZN7S7682C12v7Ev
  ~S7682C1(); // tgen
  S7682C1(); // tgen
};
//SIG(1 S7682C1) C1{ BC2{ VBC3{ v8 v9 v10 v11 Fs:13 Fp FD[8]} BC4{ BC3 v12 v13 v14 Fp[6]} v15 v16 v17 v18 Fp} BC5{ BC6{ VBC2 vd v19 v20 v21 v22} v23 v24 v25 v26 v27 v28 FD} VBC7{ VBC8{ v29 v30 v31 v32} BC9{ v33 v34 v35 v36 v37 v38 v39 v40 v41 FC4[7]} BC10{ VBC8 VBC11{ VBC12{ VBC13{ VBC3 VBC4 v42 v43 v44 v45 v46 Fp[2]} BC2 v47 v48 v49 v50 FL[5] FC14{} FD} vd v51 v52} BC12 BC15{ VBC3 VBC13 VBC9 BC4 vd v53 v54 v55 v56 Fi} vd v57 v58 v59 v60 v61 v62 v63 v64 Fi[8] Fc FL} vd Fi[5] Fi:15} BC16{ BC8 VBC3 VBC13 VBC10 BC6 vd v65 v66 v67 v68 v69 v70 v71 Fp[2]} BC10 v1 v2 v3 v4 v5 v6 v7 FC17{ v72 v73 v74 v75 v76 v77 FC3 FD}}


void  S7682C1 ::v1(){vfunc_called(this, "_ZN7S7682C12v1Ev");}
void  S7682C1 ::v2(){vfunc_called(this, "_ZN7S7682C12v2Ev");}
void  S7682C1 ::v3(){vfunc_called(this, "_ZN7S7682C12v3Ev");}
void  S7682C1 ::v4(){vfunc_called(this, "_ZN7S7682C12v4Ev");}
void  S7682C1 ::v5(){vfunc_called(this, "_ZN7S7682C12v5Ev");}
void  S7682C1 ::v6(){vfunc_called(this, "_ZN7S7682C12v6Ev");}
void  S7682C1 ::v7(){vfunc_called(this, "_ZN7S7682C12v7Ev");}
S7682C1 ::~S7682C1(){ note_dtor("S7682C1", this);} // tgen
S7682C1 ::S7682C1(){ note_ctor("S7682C1", this);} // tgen

static void Test_S7682C1()
{
  extern Class_Descriptor cd_S7682C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(377,970)];
    init_test(&cd_S7682C1, buf);
    S7682C1 *dp, &lv = *(dp=new (buf) S7682C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(6016,3876), "sizeof(S7682C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7682C1)");
    /*is_ambiguous_... S7682C1::S7682C2 */ AMB_check_base_class_offset(lv, (S7682C3*)(S7682C2*), ABISELECT(1024,664), "S7682C1");
    /*is_ambiguous_... S7682C1::S7682C2 */ AMB_check_base_class_offset(lv, (S7682C3*)(S7682C2*), ABISELECT(1024,664), "S7682C1");
    /*is_ambiguous_... S7682C13::S7682C3 */ AMB_check_base_class_offset(lv, (S7682C3*)(S7682C13*), ABISELECT(1024,664), "S7682C1");
    /*is_ambiguous_... S7682C1::S7682C12 */ AMB_check_base_class_offset(lv, (S7682C3*)(S7682C2*)(S7682C12*), ABISELECT(1024,664), "S7682C1");
    /*is_ambiguous_... S7682C10::S7682C12 */ AMB_check_base_class_offset(lv, (S7682C3*)(S7682C2*)(S7682C12*)(S7682C10*)(S7682C7*), ABISELECT(1024,664), "S7682C1");
    /*is_ambiguous_... S7682C15::S7682C3 */ AMB_check_base_class_offset(lv, (S7682C3*)(S7682C15*)(S7682C10*)(S7682C7*), ABISELECT(1024,664), "S7682C1");
    /*is_ambiguous_... S7682C16::S7682C3 */ AMB_check_base_class_offset(lv, (S7682C3*)(S7682C16*), ABISELECT(1024,664), "S7682C1");
    /*is_ambiguous_... S7682C1::S7682C10 */ AMB_check_base_class_offset(lv, (S7682C3*)(S7682C2*)(S7682C12*)(S7682C10*), ABISELECT(1024,664), "S7682C1");
    /*is_ambiguous_... S7682C1::S7682C10 */ AMB_check_base_class_offset(lv, (S7682C3*)(S7682C15*)(S7682C10*), ABISELECT(1024,664), "S7682C1");
    /*is_ambiguous_... S7682C1::S7682C10 */ AMB_check_base_class_offset(lv, (S7682C3*)(S7682C2*)(S7682C12*)(S7682C10*), ABISELECT(1024,664), "S7682C1");
    /*is_ambiguous_... S7682C1::S7682C10 */ AMB_check_base_class_offset(lv, (S7682C3*)(S7682C15*)(S7682C10*), ABISELECT(1024,664), "S7682C1");
    /*is_ambiguous_... S7682C1::S7682C2 */ AMB_check_base_class_offset(lv, (S7682C3*)(S7682C4*)(S7682C2*), 0, "S7682C1");
    /*is_ambiguous_... S7682C1::S7682C2 */ AMB_check_base_class_offset(lv, (S7682C4*)(S7682C2*), 0, "S7682C1");
    /*is_ambiguous_... S7682C1::S7682C2 */ AMB_check_base_class_offset(lv, (S7682C2*), 0, "S7682C1");
    /*is_ambiguous_... S7682C1::S7682C2 */ AMB_check_base_class_offset(lv, (S7682C3*)(S7682C4*)(S7682C2*), ABISELECT(1184,772), "S7682C1");
    /*is_ambiguous_... S7682C1::S7682C2 */ AMB_check_base_class_offset(lv, (S7682C4*)(S7682C2*), ABISELECT(1184,772), "S7682C1");
    check_base_class_offset(lv, (S7682C2*)(S7682C6*)(S7682C5*), ABISELECT(1184,772), "S7682C1");
    check_base_class_offset(lv, (S7682C2*)(S7682C6*)(S7682C16*), ABISELECT(1184,772), "S7682C1");
    check_base_class_offset(lv, (S7682C6*)(S7682C5*), ABISELECT(224,136), "S7682C1");
    check_base_class_offset(lv, (S7682C5*), ABISELECT(224,136), "S7682C1");
    check_base_class_offset(lv, (S7682C8_nt*)(S7682C7*), ABISELECT(3448,2232), "S7682C1");
    check_base_class_offset(lv, (S7682C8_nt*)(S7682C10*)(S7682C7*), ABISELECT(3448,2232), "S7682C1");
    /*is_ambiguous_... S7682C1::S7682C10 */ AMB_check_base_class_offset(lv, (S7682C8_nt*)(S7682C10*), ABISELECT(3448,2232), "S7682C1");
    /*is_ambiguous_... S7682C1::S7682C10 */ AMB_check_base_class_offset(lv, (S7682C8_nt*)(S7682C10*), ABISELECT(3448,2232), "S7682C1");
    /*is_ambiguous_... S7682C7::S7682C9 */ AMB_check_base_class_offset(lv, (S7682C9*)(S7682C7*), ABISELECT(1408,908), "S7682C1");
    /*is_ambiguous_... S7682C1::S7682C4 */ AMB_check_base_class_offset(lv, (S7682C3*)(S7682C4*), ABISELECT(3792,2444), "S7682C1");
    check_base_class_offset(lv, (S7682C4*)(S7682C13*), ABISELECT(3792,2444), "S7682C1");
    /*is_ambiguous_... S7682C1::S7682C12 */ AMB_check_base_class_offset(lv, (S7682C13*)(S7682C12*), ABISELECT(3760,2432), "S7682C1");
    /*is_ambiguous_... S7682C10::S7682C12 */ AMB_check_base_class_offset(lv, (S7682C13*)(S7682C12*)(S7682C10*)(S7682C7*), ABISELECT(3760,2432), "S7682C1");
    check_base_class_offset(lv, (S7682C13*)(S7682C15*)(S7682C10*)(S7682C7*), ABISELECT(3760,2432), "S7682C1");
    check_base_class_offset(lv, (S7682C13*)(S7682C16*), ABISELECT(3760,2432), "S7682C1");
    /*is_ambiguous_... S7682C1::S7682C10 */ AMB_check_base_class_offset(lv, (S7682C13*)(S7682C12*)(S7682C10*), ABISELECT(3760,2432), "S7682C1");
    /*is_ambiguous_... S7682C1::S7682C10 */ AMB_check_base_class_offset(lv, (S7682C13*)(S7682C15*)(S7682C10*), ABISELECT(3760,2432), "S7682C1");
    /*is_ambiguous_... S7682C1::S7682C10 */ AMB_check_base_class_offset(lv, (S7682C13*)(S7682C12*)(S7682C10*), ABISELECT(3760,2432), "S7682C1");
    /*is_ambiguous_... S7682C1::S7682C10 */ AMB_check_base_class_offset(lv, (S7682C13*)(S7682C15*)(S7682C10*), ABISELECT(3760,2432), "S7682C1");
    /*is_ambiguous_... S7682C1::S7682C12 */ AMB_check_base_class_offset(lv, (S7682C3*)(S7682C4*)(S7682C2*)(S7682C12*), ABISELECT(3472,2240), "S7682C1");
    /*is_ambiguous_... S7682C1::S7682C12 */ AMB_check_base_class_offset(lv, (S7682C4*)(S7682C2*)(S7682C12*), ABISELECT(3472,2240), "S7682C1");
    /*is_ambiguous_... S7682C1::S7682C12 */ AMB_check_base_class_offset(lv, (S7682C2*)(S7682C12*), ABISELECT(3472,2240), "S7682C1");
    check_base_class_offset(lv, (S7682C12*)(S7682C11*), ABISELECT(3472,2240), "S7682C1");
    check_base_class_offset(lv, (S7682C11*)(S7682C10*)(S7682C7*), ABISELECT(3456,2236), "S7682C1");
    /*is_ambiguous_... S7682C1::S7682C10 */ AMB_check_base_class_offset(lv, (S7682C11*)(S7682C10*), ABISELECT(3456,2236), "S7682C1");
    /*is_ambiguous_... S7682C1::S7682C10 */ AMB_check_base_class_offset(lv, (S7682C11*)(S7682C10*), ABISELECT(3456,2236), "S7682C1");
    /*is_ambiguous_... S7682C10::S7682C12 */ AMB_check_base_class_offset(lv, (S7682C3*)(S7682C4*)(S7682C2*)(S7682C12*)(S7682C10*)(S7682C7*), ABISELECT(2880,1836), "S7682C1");
    /*is_ambiguous_... S7682C10::S7682C12 */ AMB_check_base_class_offset(lv, (S7682C4*)(S7682C2*)(S7682C12*)(S7682C10*)(S7682C7*), ABISELECT(2880,1836), "S7682C1");
    /*is_ambiguous_... S7682C10::S7682C12 */ AMB_check_base_class_offset(lv, (S7682C2*)(S7682C12*)(S7682C10*)(S7682C7*), ABISELECT(2880,1836), "S7682C1");
    /*is_ambiguous_... S7682C10::S7682C12 */ AMB_check_base_class_offset(lv, (S7682C12*)(S7682C10*)(S7682C7*), ABISELECT(2880,1836), "S7682C1");
    check_base_class_offset(lv, (S7682C9*)(S7682C15*)(S7682C10*)(S7682C7*), ABISELECT(4000,2576), "S7682C1");
    /*is_ambiguous_... S7682C1::S7682C10 */ AMB_check_base_class_offset(lv, (S7682C9*)(S7682C15*)(S7682C10*), ABISELECT(4000,2576), "S7682C1");
    /*is_ambiguous_... S7682C1::S7682C10 */ AMB_check_base_class_offset(lv, (S7682C9*)(S7682C15*)(S7682C10*), ABISELECT(4000,2576), "S7682C1");
    /*is_ambiguous_... S7682C15::S7682C4 */ AMB_check_base_class_offset(lv, (S7682C3*)(S7682C4*)(S7682C15*)(S7682C10*)(S7682C7*), ABISELECT(3168,2028), "S7682C1");
    /*is_ambiguous_... S7682C15::S7682C4 */ AMB_check_base_class_offset(lv, (S7682C4*)(S7682C15*)(S7682C10*)(S7682C7*), ABISELECT(3168,2028), "S7682C1");
    check_base_class_offset(lv, (S7682C15*)(S7682C10*)(S7682C7*), ABISELECT(3168,2028), "S7682C1");
    check_base_class_offset(lv, (S7682C10*)(S7682C7*), ABISELECT(2880,1836), "S7682C1");
    check_base_class_offset(lv, (S7682C7*), ABISELECT(1408,908), "S7682C1");
    /*is_ambiguous_... S7682C16::S7682C8_nt */ AMB_check_base_class_offset(lv, (S7682C8_nt*)(S7682C16*), ABISELECT(256,152), "S7682C1");
    /*is_ambiguous_... S7682C1::S7682C10 */ AMB_check_base_class_offset(lv, (S7682C3*)(S7682C4*)(S7682C2*)(S7682C12*)(S7682C10*), ABISELECT(5472,3504), "S7682C1");
    /*is_ambiguous_... S7682C1::S7682C10 */ AMB_check_base_class_offset(lv, (S7682C4*)(S7682C2*)(S7682C12*)(S7682C10*), ABISELECT(5472,3504), "S7682C1");
    /*is_ambiguous_... S7682C1::S7682C10 */ AMB_check_base_class_offset(lv, (S7682C2*)(S7682C12*)(S7682C10*), ABISELECT(5472,3504), "S7682C1");
    /*is_ambiguous_... S7682C1::S7682C10 */ AMB_check_base_class_offset(lv, (S7682C12*)(S7682C10*), ABISELECT(5472,3504), "S7682C1");
    /*is_ambiguous_... S7682C1::S7682C10 */ AMB_check_base_class_offset(lv, (S7682C3*)(S7682C4*)(S7682C15*)(S7682C10*), ABISELECT(5760,3696), "S7682C1");
    /*is_ambiguous_... S7682C1::S7682C10 */ AMB_check_base_class_offset(lv, (S7682C4*)(S7682C15*)(S7682C10*), ABISELECT(5760,3696), "S7682C1");
    /*is_ambiguous_... S7682C1::S7682C10 */ AMB_check_base_class_offset(lv, (S7682C15*)(S7682C10*), ABISELECT(5760,3696), "S7682C1");
    check_base_class_offset(lv, (S7682C10*)(S7682C16*), ABISELECT(5472,3504), "S7682C1");
    check_base_class_offset(lv, (S7682C6*)(S7682C16*), ABISELECT(264,156), "S7682C1");
    check_base_class_offset(lv, (S7682C16*), ABISELECT(256,152), "S7682C1");
    /*is_ambiguous_... S7682C1::S7682C10 */ AMB_check_base_class_offset(lv, (S7682C3*)(S7682C4*)(S7682C2*)(S7682C12*)(S7682C10*), ABISELECT(288,168), "S7682C1");
    /*is_ambiguous_... S7682C1::S7682C10 */ AMB_check_base_class_offset(lv, (S7682C4*)(S7682C2*)(S7682C12*)(S7682C10*), ABISELECT(288,168), "S7682C1");
    /*is_ambiguous_... S7682C1::S7682C10 */ AMB_check_base_class_offset(lv, (S7682C2*)(S7682C12*)(S7682C10*), ABISELECT(288,168), "S7682C1");
    /*is_ambiguous_... S7682C1::S7682C10 */ AMB_check_base_class_offset(lv, (S7682C12*)(S7682C10*), ABISELECT(288,168), "S7682C1");
    /*is_ambiguous_... S7682C1::S7682C10 */ AMB_check_base_class_offset(lv, (S7682C3*)(S7682C4*)(S7682C15*)(S7682C10*), ABISELECT(576,360), "S7682C1");
    /*is_ambiguous_... S7682C1::S7682C10 */ AMB_check_base_class_offset(lv, (S7682C4*)(S7682C15*)(S7682C10*), ABISELECT(576,360), "S7682C1");
    /*is_ambiguous_... S7682C1::S7682C10 */ AMB_check_base_class_offset(lv, (S7682C15*)(S7682C10*), ABISELECT(576,360), "S7682C1");
    /*is_ambiguous_... S7682C1::S7682C10 */ AMB_check_base_class_offset(lv, (S7682C10*), ABISELECT(288,168), "S7682C1");
    check_field_offset(lv, s7682c1f0, ABISELECT(832,540), "S7682C1.s7682c1f0");
    test_class_info(&lv, &cd_S7682C1);
    dp->~S7682C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7682C1(Test_S7682C1, "S7682C1", ABISELECT(6016,3876));

#else // __cplusplus

extern void _ZN7S7682C1C1Ev();
extern void _ZN7S7682C1D1Ev();
Name_Map name_map_S7682C1[] = {
  NSPAIR(_ZN7S7682C1C1Ev),
  NSPAIR(_ZN7S7682C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7682C3;
extern VTBL_ENTRY _ZTI7S7682C3[];
extern  VTBL_ENTRY _ZTV7S7682C3[];
extern Class_Descriptor cd_S7682C3;
extern VTBL_ENTRY _ZTI7S7682C3[];
extern  VTBL_ENTRY _ZTV7S7682C3[];
extern Class_Descriptor cd_S7682C4;
extern VTBL_ENTRY _ZTI7S7682C4[];
extern  VTBL_ENTRY _ZTV7S7682C4[];
extern Class_Descriptor cd_S7682C2;
extern VTBL_ENTRY _ZTI7S7682C2[];
extern  VTBL_ENTRY _ZTV7S7682C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7682C2[];
extern Class_Descriptor cd_S7682C3;
extern VTBL_ENTRY _ZTI7S7682C3[];
extern  VTBL_ENTRY _ZTV7S7682C3[];
extern Class_Descriptor cd_S7682C4;
extern VTBL_ENTRY _ZTI7S7682C4[];
extern  VTBL_ENTRY _ZTV7S7682C4[];
extern Class_Descriptor cd_S7682C2;
extern VTBL_ENTRY _ZTI7S7682C2[];
extern  VTBL_ENTRY _ZTV7S7682C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7682C2[];
extern Class_Descriptor cd_S7682C6;
extern VTBL_ENTRY _ZTI7S7682C6[];
extern  VTBL_ENTRY _ZTV7S7682C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7682C6[];
extern Class_Descriptor cd_S7682C5;
extern VTBL_ENTRY _ZTI7S7682C5[];
extern  VTBL_ENTRY _ZTV7S7682C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7682C5[];
extern Class_Descriptor cd_S7682C8_nt;
extern VTBL_ENTRY _ZTI10S7682C8_nt[];
extern  VTBL_ENTRY _ZTV10S7682C8_nt[];
extern Class_Descriptor cd_S7682C9;
extern VTBL_ENTRY _ZTI7S7682C9[];
extern  VTBL_ENTRY _ZTV7S7682C9[];
extern Class_Descriptor cd_S7682C3;
extern VTBL_ENTRY _ZTI7S7682C3[];
extern  VTBL_ENTRY _ZTV7S7682C3[];
extern Class_Descriptor cd_S7682C4;
extern VTBL_ENTRY _ZTI7S7682C4[];
extern  VTBL_ENTRY _ZTV7S7682C4[];
extern Class_Descriptor cd_S7682C13;
extern VTBL_ENTRY _ZTI8S7682C13[];
extern  VTBL_ENTRY _ZTV8S7682C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7682C13[];
extern Class_Descriptor cd_S7682C3;
extern VTBL_ENTRY _ZTI7S7682C3[];
extern  VTBL_ENTRY _ZTV7S7682C3[];
extern Class_Descriptor cd_S7682C4;
extern VTBL_ENTRY _ZTI7S7682C4[];
extern  VTBL_ENTRY _ZTV7S7682C4[];
extern Class_Descriptor cd_S7682C2;
extern VTBL_ENTRY _ZTI7S7682C2[];
extern  VTBL_ENTRY _ZTV7S7682C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7682C2[];
extern Class_Descriptor cd_S7682C12;
extern VTBL_ENTRY _ZTI8S7682C12[];
extern  VTBL_ENTRY _ZTV8S7682C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7682C12[];
extern Class_Descriptor cd_S7682C11;
extern VTBL_ENTRY _ZTI8S7682C11[];
extern  VTBL_ENTRY _ZTV8S7682C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7682C11[];
extern Class_Descriptor cd_S7682C3;
extern VTBL_ENTRY _ZTI7S7682C3[];
extern  VTBL_ENTRY _ZTV7S7682C3[];
extern Class_Descriptor cd_S7682C4;
extern VTBL_ENTRY _ZTI7S7682C4[];
extern  VTBL_ENTRY _ZTV7S7682C4[];
extern Class_Descriptor cd_S7682C2;
extern VTBL_ENTRY _ZTI7S7682C2[];
extern  VTBL_ENTRY _ZTV7S7682C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7682C2[];
extern Class_Descriptor cd_S7682C12;
extern VTBL_ENTRY _ZTI8S7682C12[];
extern  VTBL_ENTRY _ZTV8S7682C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7682C12[];
extern Class_Descriptor cd_S7682C9;
extern VTBL_ENTRY _ZTI7S7682C9[];
extern  VTBL_ENTRY _ZTV7S7682C9[];
extern Class_Descriptor cd_S7682C3;
extern VTBL_ENTRY _ZTI7S7682C3[];
extern  VTBL_ENTRY _ZTV7S7682C3[];
extern Class_Descriptor cd_S7682C4;
extern VTBL_ENTRY _ZTI7S7682C4[];
extern  VTBL_ENTRY _ZTV7S7682C4[];
extern Class_Descriptor cd_S7682C15;
extern VTBL_ENTRY _ZTI8S7682C15[];
extern  VTBL_ENTRY _ZTV8S7682C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7682C15[];
extern Class_Descriptor cd_S7682C10;
extern VTBL_ENTRY _ZTI8S7682C10[];
extern  VTBL_ENTRY _ZTV8S7682C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7682C10[];
extern Class_Descriptor cd_S7682C7;
extern VTBL_ENTRY _ZTI7S7682C7[];
extern  VTBL_ENTRY _ZTV7S7682C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7682C7[];
extern Class_Descriptor cd_S7682C8_nt;
extern VTBL_ENTRY _ZTI10S7682C8_nt[];
extern  VTBL_ENTRY _ZTV10S7682C8_nt[];
extern Class_Descriptor cd_S7682C3;
extern VTBL_ENTRY _ZTI7S7682C3[];
extern  VTBL_ENTRY _ZTV7S7682C3[];
extern Class_Descriptor cd_S7682C4;
extern VTBL_ENTRY _ZTI7S7682C4[];
extern  VTBL_ENTRY _ZTV7S7682C4[];
extern Class_Descriptor cd_S7682C2;
extern VTBL_ENTRY _ZTI7S7682C2[];
extern  VTBL_ENTRY _ZTV7S7682C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7682C2[];
extern Class_Descriptor cd_S7682C12;
extern VTBL_ENTRY _ZTI8S7682C12[];
extern  VTBL_ENTRY _ZTV8S7682C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7682C12[];
extern Class_Descriptor cd_S7682C3;
extern VTBL_ENTRY _ZTI7S7682C3[];
extern  VTBL_ENTRY _ZTV7S7682C3[];
extern Class_Descriptor cd_S7682C4;
extern VTBL_ENTRY _ZTI7S7682C4[];
extern  VTBL_ENTRY _ZTV7S7682C4[];
extern Class_Descriptor cd_S7682C15;
extern VTBL_ENTRY _ZTI8S7682C15[];
extern  VTBL_ENTRY _ZTV8S7682C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7682C15[];
extern Class_Descriptor cd_S7682C10;
extern VTBL_ENTRY _ZTI8S7682C10[];
extern  VTBL_ENTRY _ZTV8S7682C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7682C10[];
extern Class_Descriptor cd_S7682C6;
extern VTBL_ENTRY _ZTI7S7682C6[];
extern  VTBL_ENTRY _ZTV7S7682C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7682C6[];
extern Class_Descriptor cd_S7682C16;
extern VTBL_ENTRY _ZTI8S7682C16[];
extern  VTBL_ENTRY _ZTV8S7682C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7682C16[];
extern Class_Descriptor cd_S7682C3;
extern VTBL_ENTRY _ZTI7S7682C3[];
extern  VTBL_ENTRY _ZTV7S7682C3[];
extern Class_Descriptor cd_S7682C4;
extern VTBL_ENTRY _ZTI7S7682C4[];
extern  VTBL_ENTRY _ZTV7S7682C4[];
extern Class_Descriptor cd_S7682C2;
extern VTBL_ENTRY _ZTI7S7682C2[];
extern  VTBL_ENTRY _ZTV7S7682C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7682C2[];
extern Class_Descriptor cd_S7682C12;
extern VTBL_ENTRY _ZTI8S7682C12[];
extern  VTBL_ENTRY _ZTV8S7682C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7682C12[];
extern Class_Descriptor cd_S7682C3;
extern VTBL_ENTRY _ZTI7S7682C3[];
extern  VTBL_ENTRY _ZTV7S7682C3[];
extern Class_Descriptor cd_S7682C4;
extern VTBL_ENTRY _ZTI7S7682C4[];
extern  VTBL_ENTRY _ZTV7S7682C4[];
extern Class_Descriptor cd_S7682C15;
extern VTBL_ENTRY _ZTI8S7682C15[];
extern  VTBL_ENTRY _ZTV8S7682C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7682C15[];
extern Class_Descriptor cd_S7682C10;
extern VTBL_ENTRY _ZTI8S7682C10[];
extern  VTBL_ENTRY _ZTV8S7682C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7682C10[];
static Base_Class bases_S7682C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7682C3,    ABISELECT(1024,664), //bcp->offset
    135, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    45, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S7682C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    33, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S7682C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    34, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S7682C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    35, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7682C3,    ABISELECT(1184,772), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S7682C4,    ABISELECT(1184,772), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S7682C2,    ABISELECT(1184,772), //bcp->offset
    145, //bcp->virtual_function_table_offset
    14, //num_negative_vtable_entries(t, bcp)
    47, //bcp->index_in_construction_vtbl_array
    63, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S7682C6,    ABISELECT(224,136), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    36, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S7682C5,    ABISELECT(224,136), //bcp->offset
    32, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    46, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    37, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7682C8_nt,    ABISELECT(3448,2232), //bcp->offset
    280, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    49, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    27, //immediately_derived
  0, 1},
  {&cd_S7682C9,    ABISELECT(1408,908), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    28, //immediately_derived
  0, 0},
  {&cd_S7682C3,    ABISELECT(3792,2444), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S7682C4,    ABISELECT(3792,2444), //bcp->offset
    352, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    54, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    13, //immediately_derived
  0, 1},
  {&cd_S7682C13,    ABISELECT(3760,2432), //bcp->offset
    338, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    53, //bcp->index_in_construction_vtbl_array
    106, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    17, //immediately_derived
  0, 1},
  {&cd_S7682C3,    ABISELECT(3472,2240), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S7682C4,    ABISELECT(3472,2240), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S7682C2,    ABISELECT(3472,2240), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    101, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S7682C12,    ABISELECT(3472,2240), //bcp->offset
    303, //bcp->virtual_function_table_offset
    20, //num_negative_vtable_entries(t, bcp)
    52, //bcp->index_in_construction_vtbl_array
    100, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    18, //immediately_derived
  0, 1},
  {&cd_S7682C11,    ABISELECT(3456,2236), //bcp->offset
    290, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    51, //bcp->index_in_construction_vtbl_array
    95, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    27, //immediately_derived
  0, 1},
  {&cd_S7682C3,    ABISELECT(2880,1836), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S7682C4,    ABISELECT(2880,1836), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S7682C2,    ABISELECT(2880,1836), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    68, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S7682C12,    ABISELECT(2880,1836), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    67, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    27, //immediately_derived
  0, 0},
  {&cd_S7682C9,    ABISELECT(4000,2576), //bcp->offset
    368, //bcp->virtual_function_table_offset
    11, //num_negative_vtable_entries(t, bcp)
    56, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    26, //immediately_derived
  0, 1},
  {&cd_S7682C3,    ABISELECT(3168,2028), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    20, //init_seq
    25, //immediately_derived
  0, 0},
  {&cd_S7682C4,    ABISELECT(3168,2028), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    21, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S7682C15,    ABISELECT(3168,2028), //bcp->offset
    261, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    55, //bcp->index_in_construction_vtbl_array
    73, //bcp->base_subarray_index_in_construction_vtbl_array
    22, //init_seq
    27, //immediately_derived
  0, 0},
  {&cd_S7682C10,    ABISELECT(2880,1836), //bcp->offset
    227, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    50, //bcp->index_in_construction_vtbl_array
    66, //bcp->base_subarray_index_in_construction_vtbl_array
    23, //init_seq
    28, //immediately_derived
  0, 0},
  {&cd_S7682C7,    ABISELECT(1408,908), //bcp->offset
    170, //bcp->virtual_function_table_offset
    46, //num_negative_vtable_entries(t, bcp)
    48, //bcp->index_in_construction_vtbl_array
    65, //bcp->base_subarray_index_in_construction_vtbl_array
    24, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7682C8_nt,    ABISELECT(256,152), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    38, //init_seq
    39, //immediately_derived
  0, 0},
  {&cd_S7682C3,    ABISELECT(5472,3504), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    25, //init_seq
    31, //immediately_derived
  0, 0},
  {&cd_S7682C4,    ABISELECT(5472,3504), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    26, //init_seq
    32, //immediately_derived
  0, 0},
  {&cd_S7682C2,    ABISELECT(5472,3504), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    111, //bcp->base_subarray_index_in_construction_vtbl_array
    27, //init_seq
    33, //immediately_derived
  0, 0},
  {&cd_S7682C12,    ABISELECT(5472,3504), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    110, //bcp->base_subarray_index_in_construction_vtbl_array
    28, //init_seq
    37, //immediately_derived
  0, 0},
  {&cd_S7682C3,    ABISELECT(5760,3696), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    29, //init_seq
    35, //immediately_derived
  0, 0},
  {&cd_S7682C4,    ABISELECT(5760,3696), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    30, //init_seq
    36, //immediately_derived
  0, 0},
  {&cd_S7682C15,    ABISELECT(5760,3696), //bcp->offset
    450, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    59, //bcp->index_in_construction_vtbl_array
    116, //bcp->base_subarray_index_in_construction_vtbl_array
    31, //init_seq
    37, //immediately_derived
  0, 0},
  {&cd_S7682C10,    ABISELECT(5472,3504), //bcp->offset
    388, //bcp->virtual_function_table_offset
    37, //num_negative_vtable_entries(t, bcp)
    58, //bcp->index_in_construction_vtbl_array
    109, //bcp->base_subarray_index_in_construction_vtbl_array
    32, //init_seq
    39, //immediately_derived
  0, 1},
  {&cd_S7682C6,    ABISELECT(264,156), //bcp->offset
    72, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    60, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    39, //init_seq
    39, //immediately_derived
  0, 0},
  {&cd_S7682C16,    ABISELECT(256,152), //bcp->offset
    48, //bcp->virtual_function_table_offset
    11, //num_negative_vtable_entries(t, bcp)
    57, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    40, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7682C3,    ABISELECT(288,168), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    41, //init_seq
    41, //immediately_derived
  0, 0},
  {&cd_S7682C4,    ABISELECT(288,168), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    42, //init_seq
    42, //immediately_derived
  0, 0},
  {&cd_S7682C2,    ABISELECT(288,168), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    27, //bcp->base_subarray_index_in_construction_vtbl_array
    43, //init_seq
    43, //immediately_derived
  0, 0},
  {&cd_S7682C12,    ABISELECT(288,168), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    26, //bcp->base_subarray_index_in_construction_vtbl_array
    44, //init_seq
    47, //immediately_derived
  0, 0},
  {&cd_S7682C3,    ABISELECT(576,360), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    45, //init_seq
    45, //immediately_derived
  0, 0},
  {&cd_S7682C4,    ABISELECT(576,360), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    46, //init_seq
    46, //immediately_derived
  0, 0},
  {&cd_S7682C15,    ABISELECT(576,360), //bcp->offset
    116, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    62, //bcp->index_in_construction_vtbl_array
    32, //bcp->base_subarray_index_in_construction_vtbl_array
    47, //init_seq
    47, //immediately_derived
  0, 0},
  {&cd_S7682C10,    ABISELECT(288,168), //bcp->offset
    82, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    61, //bcp->index_in_construction_vtbl_array
    25, //bcp->base_subarray_index_in_construction_vtbl_array
    48, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7682C1[];
extern void _ZN7S7682C32v8Ev();
extern void _ZN7S7682C32v9Ev();
extern void _ZN7S7682C33v10Ev();
extern void _ZN7S7682C33v11Ev();
extern void _ZN7S7682C43v12Ev();
extern void _ZN7S7682C43v13Ev();
extern void _ZN7S7682C43v14Ev();
extern void _ZN7S7682C23v15Ev();
extern void _ZN7S7682C23v16Ev();
extern void _ZN7S7682C23v17Ev();
extern void _ZN7S7682C23v18Ev();
extern void _ZN7S7682C12v1Ev();
extern void _ZN7S7682C12v2Ev();
extern void _ZN7S7682C12v3Ev();
extern void _ZN7S7682C12v4Ev();
extern void _ZN7S7682C12v5Ev();
extern void _ZN7S7682C12v6Ev();
extern void _ZN7S7682C12v7Ev();
extern void _ZN7S7682C1D1Ev();
extern void _ZN7S7682C1D0Ev();
extern void ABISELECT(_ZThn224_N7S7682C1D1Ev,_ZThn136_N7S7682C1D1Ev)();
extern void ABISELECT(_ZThn224_N7S7682C1D0Ev,_ZThn136_N7S7682C1D0Ev)();
extern void _ZN7S7682C63v19Ev();
extern void _ZN7S7682C63v20Ev();
extern void _ZN7S7682C63v21Ev();
extern void _ZN7S7682C63v22Ev();
extern void _ZN7S7682C53v23Ev();
extern void _ZN7S7682C53v24Ev();
extern void _ZN7S7682C53v25Ev();
extern void _ZN7S7682C53v26Ev();
extern void _ZN7S7682C53v27Ev();
extern void _ZN7S7682C53v28Ev();
extern void _ZN10S7682C8_nt3v29Ev();
extern void _ZN10S7682C8_nt3v30Ev();
extern void _ZN10S7682C8_nt3v31Ev();
extern void _ZN10S7682C8_nt3v32Ev();
extern void ABISELECT(_ZThn256_N7S7682C1D1Ev,_ZThn152_N7S7682C1D1Ev)();
extern void ABISELECT(_ZThn256_N7S7682C1D0Ev,_ZThn152_N7S7682C1D0Ev)();
extern void _ZN8S7682C163v65Ev();
extern void _ZN8S7682C163v66Ev();
extern void _ZN8S7682C163v67Ev();
extern void _ZN8S7682C163v68Ev();
extern void _ZN8S7682C163v69Ev();
extern void _ZN8S7682C163v70Ev();
extern void _ZN8S7682C163v71Ev();
extern void ABISELECT(_ZThn264_N7S7682C1D1Ev,_ZThn156_N7S7682C1D1Ev)();
extern void ABISELECT(_ZThn264_N7S7682C1D0Ev,_ZThn156_N7S7682C1D0Ev)();
extern void _ZN7S7682C63v19Ev();
extern void _ZN7S7682C63v20Ev();
extern void _ZN7S7682C63v21Ev();
extern void _ZN7S7682C63v22Ev();
extern void _ZN7S7682C32v8Ev();
extern void _ZN7S7682C32v9Ev();
extern void _ZN7S7682C33v10Ev();
extern void _ZN7S7682C33v11Ev();
extern void _ZN7S7682C43v12Ev();
extern void _ZN7S7682C43v13Ev();
extern void _ZN7S7682C43v14Ev();
extern void _ZN7S7682C23v15Ev();
extern void _ZN7S7682C23v16Ev();
extern void _ZN7S7682C23v17Ev();
extern void _ZN7S7682C23v18Ev();
extern void _ZN8S7682C123v47Ev();
extern void _ZN8S7682C123v48Ev();
extern void _ZN8S7682C123v49Ev();
extern void _ZN8S7682C123v50Ev();
extern void ABISELECT(_ZThn288_N7S7682C1D1Ev,_ZThn168_N7S7682C1D1Ev)();
extern void ABISELECT(_ZThn288_N7S7682C1D0Ev,_ZThn168_N7S7682C1D0Ev)();
extern void _ZN8S7682C103v57Ev();
extern void _ZN8S7682C103v58Ev();
extern void _ZN8S7682C103v59Ev();
extern void _ZN8S7682C103v60Ev();
extern void _ZN8S7682C103v61Ev();
extern void _ZN8S7682C103v62Ev();
extern void _ZN8S7682C103v63Ev();
extern void _ZN8S7682C103v64Ev();
extern void _ZN7S7682C32v8Ev();
extern void _ZN7S7682C32v9Ev();
extern void _ZN7S7682C33v10Ev();
extern void _ZN7S7682C33v11Ev();
extern void _ZN7S7682C43v12Ev();
extern void _ZN7S7682C43v13Ev();
extern void _ZN7S7682C43v14Ev();
extern void ABISELECT(_ZThn576_N7S7682C1D1Ev,_ZThn360_N7S7682C1D1Ev)();
extern void ABISELECT(_ZThn576_N7S7682C1D0Ev,_ZThn360_N7S7682C1D0Ev)();
extern void _ZN8S7682C153v53Ev();
extern void _ZN8S7682C153v54Ev();
extern void _ZN8S7682C153v55Ev();
extern void _ZN8S7682C153v56Ev();
extern void _ZN7S7682C32v8Ev();
extern void _ZN7S7682C32v9Ev();
extern void _ZN7S7682C33v10Ev();
extern void _ZN7S7682C33v11Ev();
extern void _ZN7S7682C32v8Ev();
extern void _ZN7S7682C32v9Ev();
extern void _ZN7S7682C33v10Ev();
extern void _ZN7S7682C33v11Ev();
extern void _ZN7S7682C43v12Ev();
extern void _ZN7S7682C43v13Ev();
extern void _ZN7S7682C43v14Ev();
extern void _ZN7S7682C23v15Ev();
extern void _ZN7S7682C23v16Ev();
extern void _ZN7S7682C23v17Ev();
extern void _ZN7S7682C23v18Ev();
extern void _ZN7S7682C93v33Ev();
extern void _ZN7S7682C93v34Ev();
extern void _ZN7S7682C93v35Ev();
extern void _ZN7S7682C93v36Ev();
extern void _ZN7S7682C93v37Ev();
extern void _ZN7S7682C93v38Ev();
extern void _ZN7S7682C93v39Ev();
extern void _ZN7S7682C93v40Ev();
extern void _ZN7S7682C93v41Ev();
extern void ABISELECT(_ZTv0_n152_N7S7682C1D1Ev,_ZTv0_n76_N7S7682C1D1Ev)();
extern void ABISELECT(_ZThn1408_N7S7682C1D1Ev,_ZThn908_N7S7682C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n152_N7S7682C1D0Ev,_ZTv0_n76_N7S7682C1D0Ev)();
extern void ABISELECT(_ZThn1408_N7S7682C1D0Ev,_ZThn908_N7S7682C1D0Ev)() __attribute__((weak));
extern void _ZN7S7682C32v8Ev();
extern void _ZN7S7682C32v9Ev();
extern void _ZN7S7682C33v10Ev();
extern void _ZN7S7682C33v11Ev();
extern void _ZN7S7682C43v12Ev();
extern void _ZN7S7682C43v13Ev();
extern void _ZN7S7682C43v14Ev();
extern void _ZN7S7682C23v15Ev();
extern void _ZN7S7682C23v16Ev();
extern void _ZN7S7682C23v17Ev();
extern void _ZN7S7682C23v18Ev();
extern void _ZN8S7682C123v47Ev();
extern void _ZN8S7682C123v48Ev();
extern void _ZN8S7682C123v49Ev();
extern void _ZN8S7682C123v50Ev();
extern void ABISELECT(_ZTvn1472_n152_N7S7682C1D1Ev,_ZTvn928_n76_N7S7682C1D1Ev)();
extern void ABISELECT(_ZTvn1472_n152_N7S7682C1D0Ev,_ZTvn928_n76_N7S7682C1D0Ev)();
extern void _ZN8S7682C103v57Ev();
extern void _ZN8S7682C103v58Ev();
extern void _ZN8S7682C103v59Ev();
extern void _ZN8S7682C103v60Ev();
extern void _ZN8S7682C103v61Ev();
extern void _ZN8S7682C103v62Ev();
extern void _ZN8S7682C103v63Ev();
extern void _ZN8S7682C103v64Ev();
extern void _ZN7S7682C32v8Ev();
extern void _ZN7S7682C32v9Ev();
extern void _ZN7S7682C33v10Ev();
extern void _ZN7S7682C33v11Ev();
extern void _ZN7S7682C43v12Ev();
extern void _ZN7S7682C43v13Ev();
extern void _ZN7S7682C43v14Ev();
extern void ABISELECT(_ZTvn1760_n152_N7S7682C1D1Ev,_ZTvn1120_n76_N7S7682C1D1Ev)();
extern void ABISELECT(_ZTvn1760_n152_N7S7682C1D0Ev,_ZTvn1120_n76_N7S7682C1D0Ev)();
extern void _ZN8S7682C153v53Ev();
extern void _ZN8S7682C153v54Ev();
extern void _ZN8S7682C153v55Ev();
extern void _ZN8S7682C153v56Ev();
extern void _ZN10S7682C8_nt3v29Ev();
extern void _ZN10S7682C8_nt3v30Ev();
extern void _ZN10S7682C8_nt3v31Ev();
extern void _ZN10S7682C8_nt3v32Ev();
extern void ABISELECT(_ZTv0_n56_N7S7682C1D1Ev,_ZTv0_n28_N7S7682C1D1Ev)();
extern void ABISELECT(_ZThn3456_N7S7682C1D1Ev,_ZThn2236_N7S7682C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N7S7682C1D0Ev,_ZTv0_n28_N7S7682C1D0Ev)();
extern void ABISELECT(_ZThn3456_N7S7682C1D0Ev,_ZThn2236_N7S7682C1D0Ev)() __attribute__((weak));
extern void _ZN8S7682C113v51Ev();
extern void _ZN8S7682C113v52Ev();
extern void _ZN7S7682C32v8Ev();
extern void _ZN7S7682C32v9Ev();
extern void _ZN7S7682C33v10Ev();
extern void _ZN7S7682C33v11Ev();
extern void _ZN7S7682C43v12Ev();
extern void _ZN7S7682C43v13Ev();
extern void _ZN7S7682C43v14Ev();
extern void _ZN7S7682C23v15Ev();
extern void _ZN7S7682C23v16Ev();
extern void _ZN7S7682C23v17Ev();
extern void _ZN7S7682C23v18Ev();
extern void _ZN8S7682C123v47Ev();
extern void _ZN8S7682C123v48Ev();
extern void _ZN8S7682C123v49Ev();
extern void _ZN8S7682C123v50Ev();
extern void _ZN8S7682C133v42Ev();
extern void _ZN8S7682C133v43Ev();
extern void _ZN8S7682C133v44Ev();
extern void _ZN8S7682C133v45Ev();
extern void _ZN8S7682C133v46Ev();
extern void _ZN7S7682C32v8Ev();
extern void _ZN7S7682C32v9Ev();
extern void _ZN7S7682C33v10Ev();
extern void _ZN7S7682C33v11Ev();
extern void _ZN7S7682C43v12Ev();
extern void _ZN7S7682C43v13Ev();
extern void _ZN7S7682C43v14Ev();
extern void _ZN7S7682C93v33Ev();
extern void _ZN7S7682C93v34Ev();
extern void _ZN7S7682C93v35Ev();
extern void _ZN7S7682C93v36Ev();
extern void _ZN7S7682C93v37Ev();
extern void _ZN7S7682C93v38Ev();
extern void _ZN7S7682C93v39Ev();
extern void _ZN7S7682C93v40Ev();
extern void _ZN7S7682C93v41Ev();
extern void _ZN7S7682C32v8Ev();
extern void _ZN7S7682C32v9Ev();
extern void _ZN7S7682C33v10Ev();
extern void _ZN7S7682C33v11Ev();
extern void _ZN7S7682C43v12Ev();
extern void _ZN7S7682C43v13Ev();
extern void _ZN7S7682C43v14Ev();
extern void _ZN7S7682C23v15Ev();
extern void _ZN7S7682C23v16Ev();
extern void _ZN7S7682C23v17Ev();
extern void _ZN7S7682C23v18Ev();
extern void _ZN8S7682C123v47Ev();
extern void _ZN8S7682C123v48Ev();
extern void _ZN8S7682C123v49Ev();
extern void _ZN8S7682C123v50Ev();
extern void ABISELECT(_ZTv0_n200_N7S7682C1D1Ev,_ZTv0_n100_N7S7682C1D1Ev)();
extern void ABISELECT(_ZThn5472_N7S7682C1D1Ev,_ZThn3504_N7S7682C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n200_N7S7682C1D0Ev,_ZTv0_n100_N7S7682C1D0Ev)();
extern void ABISELECT(_ZThn5472_N7S7682C1D0Ev,_ZThn3504_N7S7682C1D0Ev)() __attribute__((weak));
extern void _ZN8S7682C103v57Ev();
extern void _ZN8S7682C103v58Ev();
extern void _ZN8S7682C103v59Ev();
extern void _ZN8S7682C103v60Ev();
extern void _ZN8S7682C103v61Ev();
extern void _ZN8S7682C103v62Ev();
extern void _ZN8S7682C103v63Ev();
extern void _ZN8S7682C103v64Ev();
extern void _ZN7S7682C32v8Ev();
extern void _ZN7S7682C32v9Ev();
extern void _ZN7S7682C33v10Ev();
extern void _ZN7S7682C33v11Ev();
extern void _ZN7S7682C43v12Ev();
extern void _ZN7S7682C43v13Ev();
extern void _ZN7S7682C43v14Ev();
extern void ABISELECT(_ZTvn288_n200_N7S7682C1D1Ev,_ZTvn192_n100_N7S7682C1D1Ev)();
extern void ABISELECT(_ZTvn288_n200_N7S7682C1D0Ev,_ZTvn192_n100_N7S7682C1D0Ev)();
extern void _ZN8S7682C153v53Ev();
extern void _ZN8S7682C153v54Ev();
extern void _ZN8S7682C153v55Ev();
extern void _ZN8S7682C153v56Ev();
static  VTBL_ENTRY vtc_S7682C1[] = {
  ABISELECT(5472,3504),
  ABISELECT(4000,2576),
  ABISELECT(3792,2444),
  ABISELECT(3760,2432),
  ABISELECT(3472,2240),
  ABISELECT(3456,2236),
  ABISELECT(3448,2232),
  ABISELECT(1408,908),
  ABISELECT(1184,772),
  ABISELECT(1024,664),
  0,
  (VTBL_ENTRY)&(_ZTI7S7682C1[0]),
  (VTBL_ENTRY)&_ZN7S7682C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7682C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v15Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v16Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v17Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v18Ev,
  (VTBL_ENTRY)&_ZN7S7682C12v1Ev,
  (VTBL_ENTRY)&_ZN7S7682C12v2Ev,
  (VTBL_ENTRY)&_ZN7S7682C12v3Ev,
  (VTBL_ENTRY)&_ZN7S7682C12v4Ev,
  (VTBL_ENTRY)&_ZN7S7682C12v5Ev,
  (VTBL_ENTRY)&_ZN7S7682C12v6Ev,
  (VTBL_ENTRY)&_ZN7S7682C12v7Ev,
  (VTBL_ENTRY)&_ZN7S7682C1D1Ev,
  (VTBL_ENTRY)&_ZN7S7682C1D0Ev,
  ABISELECT(800,528),
  ABISELECT(960,636),
  ABISELECT(-224,-136),
  (VTBL_ENTRY)&(_ZTI7S7682C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn224_N7S7682C1D1Ev,_ZThn136_N7S7682C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn224_N7S7682C1D0Ev,_ZThn136_N7S7682C1D0Ev),
  (VTBL_ENTRY)&_ZN7S7682C63v19Ev,
  (VTBL_ENTRY)&_ZN7S7682C63v20Ev,
  (VTBL_ENTRY)&_ZN7S7682C63v21Ev,
  (VTBL_ENTRY)&_ZN7S7682C63v22Ev,
  (VTBL_ENTRY)&_ZN7S7682C53v23Ev,
  (VTBL_ENTRY)&_ZN7S7682C53v24Ev,
  (VTBL_ENTRY)&_ZN7S7682C53v25Ev,
  (VTBL_ENTRY)&_ZN7S7682C53v26Ev,
  (VTBL_ENTRY)&_ZN7S7682C53v27Ev,
  (VTBL_ENTRY)&_ZN7S7682C53v28Ev,
  ABISELECT(928,620),
  ABISELECT(3744,2424),
  ABISELECT(3216,2088),
  ABISELECT(3200,2084),
  ABISELECT(3192,2080),
  ABISELECT(5216,3352),
  ABISELECT(3536,2292),
  ABISELECT(3504,2280),
  ABISELECT(768,512),
  ABISELECT(-256,-152),
  (VTBL_ENTRY)&(_ZTI7S7682C1[0]),
  (VTBL_ENTRY)&_ZN10S7682C8_nt3v29Ev,
  (VTBL_ENTRY)&_ZN10S7682C8_nt3v30Ev,
  (VTBL_ENTRY)&_ZN10S7682C8_nt3v31Ev,
  (VTBL_ENTRY)&_ZN10S7682C8_nt3v32Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn256_N7S7682C1D1Ev,_ZThn152_N7S7682C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn256_N7S7682C1D0Ev,_ZThn152_N7S7682C1D0Ev),
  (VTBL_ENTRY)&_ZN8S7682C163v65Ev,
  (VTBL_ENTRY)&_ZN8S7682C163v66Ev,
  (VTBL_ENTRY)&_ZN8S7682C163v67Ev,
  (VTBL_ENTRY)&_ZN8S7682C163v68Ev,
  (VTBL_ENTRY)&_ZN8S7682C163v69Ev,
  (VTBL_ENTRY)&_ZN8S7682C163v70Ev,
  (VTBL_ENTRY)&_ZN8S7682C163v71Ev,
  ABISELECT(760,508),
  ABISELECT(920,616),
  ABISELECT(-264,-156),
  (VTBL_ENTRY)&(_ZTI7S7682C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn264_N7S7682C1D1Ev,_ZThn156_N7S7682C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn264_N7S7682C1D0Ev,_ZThn156_N7S7682C1D0Ev),
  (VTBL_ENTRY)&_ZN7S7682C63v19Ev,
  (VTBL_ENTRY)&_ZN7S7682C63v20Ev,
  (VTBL_ENTRY)&_ZN7S7682C63v21Ev,
  (VTBL_ENTRY)&_ZN7S7682C63v22Ev,
  ABISELECT(3712,2408),
  ABISELECT(3184,2072),
  ABISELECT(3168,2068),
  ABISELECT(3160,2064),
  ABISELECT(3504,2276),
  ABISELECT(3472,2264),
  ABISELECT(736,496),
  ABISELECT(-288,-168),
  (VTBL_ENTRY)&(_ZTI7S7682C1[0]),
  (VTBL_ENTRY)&_ZN7S7682C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7682C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v15Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v16Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v17Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v18Ev,
  (VTBL_ENTRY)&_ZN8S7682C123v47Ev,
  (VTBL_ENTRY)&_ZN8S7682C123v48Ev,
  (VTBL_ENTRY)&_ZN8S7682C123v49Ev,
  (VTBL_ENTRY)&_ZN8S7682C123v50Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn288_N7S7682C1D1Ev,_ZThn168_N7S7682C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn288_N7S7682C1D0Ev,_ZThn168_N7S7682C1D0Ev),
  (VTBL_ENTRY)&_ZN8S7682C103v57Ev,
  (VTBL_ENTRY)&_ZN8S7682C103v58Ev,
  (VTBL_ENTRY)&_ZN8S7682C103v59Ev,
  (VTBL_ENTRY)&_ZN8S7682C103v60Ev,
  (VTBL_ENTRY)&_ZN8S7682C103v61Ev,
  (VTBL_ENTRY)&_ZN8S7682C103v62Ev,
  (VTBL_ENTRY)&_ZN8S7682C103v63Ev,
  (VTBL_ENTRY)&_ZN8S7682C103v64Ev,
  ABISELECT(3424,2216),
  ABISELECT(3216,2084),
  ABISELECT(3184,2072),
  ABISELECT(448,304),
  ABISELECT(-576,-360),
  (VTBL_ENTRY)&(_ZTI7S7682C1[0]),
  (VTBL_ENTRY)&_ZN7S7682C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7682C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v14Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn576_N7S7682C1D1Ev,_ZThn360_N7S7682C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn576_N7S7682C1D0Ev,_ZThn360_N7S7682C1D0Ev),
  (VTBL_ENTRY)&_ZN8S7682C153v53Ev,
  (VTBL_ENTRY)&_ZN8S7682C153v54Ev,
  (VTBL_ENTRY)&_ZN8S7682C153v55Ev,
  (VTBL_ENTRY)&_ZN8S7682C153v56Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-1024,-664),
  (VTBL_ENTRY)&(_ZTI7S7682C1[0]),
  (VTBL_ENTRY)&_ZN7S7682C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7682C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v11Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-160,-108),
  ABISELECT(-1184,-772),
  (VTBL_ENTRY)&(_ZTI7S7682C1[0]),
  (VTBL_ENTRY)&_ZN7S7682C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7682C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v15Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v16Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v17Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v18Ev,
  ABISELECT(1760,1120),
  ABISELECT(1760,1120),
  ABISELECT(1760,1120),
  ABISELECT(1760,1120),
  ABISELECT(1472,928),
  ABISELECT(1472,928),
  ABISELECT(1472,928),
  ABISELECT(1472,928),
  ABISELECT(1472,928),
  ABISELECT(1472,928),
  ABISELECT(1472,928),
  ABISELECT(1472,928),
  ABISELECT(1472,928),
  ABISELECT(1472,928),
  ABISELECT(1472,928),
  ABISELECT(1472,928),
  ABISELECT(1472,928),
  ABISELECT(1472,928),
  ABISELECT(1472,928),
  ABISELECT(1472,928),
  ABISELECT(1472,928),
  ABISELECT(1472,928),
  ABISELECT(1472,928),
  ABISELECT(1472,928),
  ABISELECT(1472,928),
  ABISELECT(1472,928),
  ABISELECT(1472,928),
  ABISELECT(-1408,-908),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(2592,1668),
  ABISELECT(2384,1536),
  ABISELECT(-384,-244),
  ABISELECT(2352,1524),
  ABISELECT(2064,1332),
  ABISELECT(2048,1328),
  ABISELECT(2040,1324),
  ABISELECT(-1408,-908),
  (VTBL_ENTRY)&(_ZTI7S7682C1[0]),
  (VTBL_ENTRY)&_ZN7S7682C93v33Ev,
  (VTBL_ENTRY)&_ZN7S7682C93v34Ev,
  (VTBL_ENTRY)&_ZN7S7682C93v35Ev,
  (VTBL_ENTRY)&_ZN7S7682C93v36Ev,
  (VTBL_ENTRY)&_ZN7S7682C93v37Ev,
  (VTBL_ENTRY)&_ZN7S7682C93v38Ev,
  (VTBL_ENTRY)&_ZN7S7682C93v39Ev,
  (VTBL_ENTRY)&_ZN7S7682C93v40Ev,
  (VTBL_ENTRY)&_ZN7S7682C93v41Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n152_N7S7682C1D1Ev,_ZTv0_n76_N7S7682C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n152_N7S7682C1D0Ev,_ZTv0_n76_N7S7682C1D0Ev),
  ABISELECT(1120,740),
  ABISELECT(592,404),
  ABISELECT(576,400),
  ABISELECT(568,396),
  ABISELECT(912,608),
  ABISELECT(880,596),
  ABISELECT(-1856,-1172),
  ABISELECT(-2880,-1836),
  (VTBL_ENTRY)&(_ZTI7S7682C1[0]),
  (VTBL_ENTRY)&_ZN7S7682C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7682C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v15Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v16Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v17Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v18Ev,
  (VTBL_ENTRY)&_ZN8S7682C123v47Ev,
  (VTBL_ENTRY)&_ZN8S7682C123v48Ev,
  (VTBL_ENTRY)&_ZN8S7682C123v49Ev,
  (VTBL_ENTRY)&_ZN8S7682C123v50Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn1472_n152_N7S7682C1D1Ev,_ZTvn928_n76_N7S7682C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn1472_n152_N7S7682C1D0Ev,_ZTvn928_n76_N7S7682C1D0Ev),
  (VTBL_ENTRY)&_ZN8S7682C103v57Ev,
  (VTBL_ENTRY)&_ZN8S7682C103v58Ev,
  (VTBL_ENTRY)&_ZN8S7682C103v59Ev,
  (VTBL_ENTRY)&_ZN8S7682C103v60Ev,
  (VTBL_ENTRY)&_ZN8S7682C103v61Ev,
  (VTBL_ENTRY)&_ZN8S7682C103v62Ev,
  (VTBL_ENTRY)&_ZN8S7682C103v63Ev,
  (VTBL_ENTRY)&_ZN8S7682C103v64Ev,
  ABISELECT(832,548),
  ABISELECT(624,416),
  ABISELECT(592,404),
  ABISELECT(-2144,-1364),
  ABISELECT(-3168,-2028),
  (VTBL_ENTRY)&(_ZTI7S7682C1[0]),
  (VTBL_ENTRY)&_ZN7S7682C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7682C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v14Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn1760_n152_N7S7682C1D1Ev,_ZTvn1120_n76_N7S7682C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn1760_n152_N7S7682C1D0Ev,_ZTvn1120_n76_N7S7682C1D0Ev),
  (VTBL_ENTRY)&_ZN8S7682C153v53Ev,
  (VTBL_ENTRY)&_ZN8S7682C153v54Ev,
  (VTBL_ENTRY)&_ZN8S7682C153v55Ev,
  (VTBL_ENTRY)&_ZN8S7682C153v56Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-3448,-2232),
  (VTBL_ENTRY)&(_ZTI7S7682C1[0]),
  (VTBL_ENTRY)&_ZN10S7682C8_nt3v29Ev,
  (VTBL_ENTRY)&_ZN10S7682C8_nt3v30Ev,
  (VTBL_ENTRY)&_ZN10S7682C8_nt3v31Ev,
  (VTBL_ENTRY)&_ZN10S7682C8_nt3v32Ev,
  0,
  0,
  ABISELECT(-3456,-2236),
  ABISELECT(336,208),
  ABISELECT(-2432,-1572),
  ABISELECT(304,196),
  ABISELECT(16,4),
  ABISELECT(-3456,-2236),
  (VTBL_ENTRY)&(_ZTI7S7682C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N7S7682C1D1Ev,_ZTv0_n28_N7S7682C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N7S7682C1D0Ev,_ZTv0_n28_N7S7682C1D0Ev),
  (VTBL_ENTRY)&_ZN8S7682C113v51Ev,
  (VTBL_ENTRY)&_ZN8S7682C113v52Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(320,204),
  ABISELECT(288,192),
  ABISELECT(-2448,-1576),
  ABISELECT(-3472,-2240),
  (VTBL_ENTRY)&(_ZTI7S7682C1[0]),
  (VTBL_ENTRY)&_ZN7S7682C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7682C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v15Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v16Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v17Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v18Ev,
  (VTBL_ENTRY)&_ZN8S7682C123v47Ev,
  (VTBL_ENTRY)&_ZN8S7682C123v48Ev,
  (VTBL_ENTRY)&_ZN8S7682C123v49Ev,
  (VTBL_ENTRY)&_ZN8S7682C123v50Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(32,12),
  ABISELECT(-2736,-1768),
  ABISELECT(-3760,-2432),
  (VTBL_ENTRY)&(_ZTI7S7682C1[0]),
  (VTBL_ENTRY)&_ZN8S7682C133v42Ev,
  (VTBL_ENTRY)&_ZN8S7682C133v43Ev,
  (VTBL_ENTRY)&_ZN8S7682C133v44Ev,
  (VTBL_ENTRY)&_ZN8S7682C133v45Ev,
  (VTBL_ENTRY)&_ZN8S7682C133v46Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-3792,-2444),
  (VTBL_ENTRY)&(_ZTI7S7682C1[0]),
  (VTBL_ENTRY)&_ZN7S7682C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7682C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v14Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-4000,-2576),
  (VTBL_ENTRY)&(_ZTI7S7682C1[0]),
  (VTBL_ENTRY)&_ZN7S7682C93v33Ev,
  (VTBL_ENTRY)&_ZN7S7682C93v34Ev,
  (VTBL_ENTRY)&_ZN7S7682C93v35Ev,
  (VTBL_ENTRY)&_ZN7S7682C93v36Ev,
  (VTBL_ENTRY)&_ZN7S7682C93v37Ev,
  (VTBL_ENTRY)&_ZN7S7682C93v38Ev,
  (VTBL_ENTRY)&_ZN7S7682C93v39Ev,
  (VTBL_ENTRY)&_ZN7S7682C93v40Ev,
  (VTBL_ENTRY)&_ZN7S7682C93v41Ev,
  ABISELECT(288,192),
  ABISELECT(288,192),
  ABISELECT(288,192),
  ABISELECT(288,192),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-5472,-3504),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-1472,-928),
  ABISELECT(-2000,-1264),
  ABISELECT(-2016,-1268),
  ABISELECT(-2024,-1272),
  ABISELECT(-1680,-1060),
  ABISELECT(-1712,-1072),
  ABISELECT(-4448,-2840),
  ABISELECT(-5472,-3504),
  (VTBL_ENTRY)&(_ZTI7S7682C1[0]),
  (VTBL_ENTRY)&_ZN7S7682C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7682C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v15Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v16Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v17Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v18Ev,
  (VTBL_ENTRY)&_ZN8S7682C123v47Ev,
  (VTBL_ENTRY)&_ZN8S7682C123v48Ev,
  (VTBL_ENTRY)&_ZN8S7682C123v49Ev,
  (VTBL_ENTRY)&_ZN8S7682C123v50Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n200_N7S7682C1D1Ev,_ZTv0_n100_N7S7682C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n200_N7S7682C1D0Ev,_ZTv0_n100_N7S7682C1D0Ev),
  (VTBL_ENTRY)&_ZN8S7682C103v57Ev,
  (VTBL_ENTRY)&_ZN8S7682C103v58Ev,
  (VTBL_ENTRY)&_ZN8S7682C103v59Ev,
  (VTBL_ENTRY)&_ZN8S7682C103v60Ev,
  (VTBL_ENTRY)&_ZN8S7682C103v61Ev,
  (VTBL_ENTRY)&_ZN8S7682C103v62Ev,
  (VTBL_ENTRY)&_ZN8S7682C103v63Ev,
  (VTBL_ENTRY)&_ZN8S7682C103v64Ev,
  ABISELECT(-1760,-1120),
  ABISELECT(-1968,-1252),
  ABISELECT(-2000,-1264),
  ABISELECT(-4736,-3032),
  ABISELECT(-5760,-3696),
  (VTBL_ENTRY)&(_ZTI7S7682C1[0]),
  (VTBL_ENTRY)&_ZN7S7682C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7682C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v14Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn288_n200_N7S7682C1D1Ev,_ZTvn192_n100_N7S7682C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn288_n200_N7S7682C1D0Ev,_ZTvn192_n100_N7S7682C1D0Ev),
  (VTBL_ENTRY)&_ZN8S7682C153v53Ev,
  (VTBL_ENTRY)&_ZN8S7682C153v54Ev,
  (VTBL_ENTRY)&_ZN8S7682C153v55Ev,
  (VTBL_ENTRY)&_ZN8S7682C153v56Ev,
};
extern VTBL_ENTRY _ZTV7S7682C1[];
extern void _ZN7S7682C32v8Ev();
extern void _ZN7S7682C32v9Ev();
extern void _ZN7S7682C33v10Ev();
extern void _ZN7S7682C33v11Ev();
extern void _ZN7S7682C43v12Ev();
extern void _ZN7S7682C43v13Ev();
extern void _ZN7S7682C43v14Ev();
extern void _ZN7S7682C23v15Ev();
extern void _ZN7S7682C23v16Ev();
extern void _ZN7S7682C23v17Ev();
extern void _ZN7S7682C23v18Ev();
static  VTBL_ENTRY _tg__ZTV7S7682C2__A__7S7682C1[] = {
  ABISELECT(1024,664),
  0,
  (VTBL_ENTRY)&(_ZTI7S7682C2[0]),
  (VTBL_ENTRY)&_ZN7S7682C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7682C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v15Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v16Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v17Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v18Ev,
};
extern void _ZN7S7682C32v8Ev();
extern void _ZN7S7682C32v9Ev();
extern void _ZN7S7682C33v10Ev();
extern void _ZN7S7682C33v11Ev();
static  VTBL_ENTRY _tg__ZTV7S7682C3__7S7682C2__A__7S7682C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-1024,-664),
  (VTBL_ENTRY)&(_ZTI7S7682C2[0]),
  (VTBL_ENTRY)&_ZN7S7682C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7682C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v11Ev,
};
extern void _ZN7S7682C5D1Ev();
extern void _ZN7S7682C5D0Ev();
extern void _ZN7S7682C63v19Ev();
extern void _ZN7S7682C63v20Ev();
extern void _ZN7S7682C63v21Ev();
extern void _ZN7S7682C63v22Ev();
extern void _ZN7S7682C53v23Ev();
extern void _ZN7S7682C53v24Ev();
extern void _ZN7S7682C53v25Ev();
extern void _ZN7S7682C53v26Ev();
extern void _ZN7S7682C53v27Ev();
extern void _ZN7S7682C53v28Ev();
static  VTBL_ENTRY _tg__ZTV7S7682C5__7S7682C1[] = {
  ABISELECT(800,528),
  ABISELECT(960,636),
  0,
  (VTBL_ENTRY)&(_ZTI7S7682C5[0]),
  (VTBL_ENTRY)&_ZN7S7682C5D1Ev,
  (VTBL_ENTRY)&_ZN7S7682C5D0Ev,
  (VTBL_ENTRY)&_ZN7S7682C63v19Ev,
  (VTBL_ENTRY)&_ZN7S7682C63v20Ev,
  (VTBL_ENTRY)&_ZN7S7682C63v21Ev,
  (VTBL_ENTRY)&_ZN7S7682C63v22Ev,
  (VTBL_ENTRY)&_ZN7S7682C53v23Ev,
  (VTBL_ENTRY)&_ZN7S7682C53v24Ev,
  (VTBL_ENTRY)&_ZN7S7682C53v25Ev,
  (VTBL_ENTRY)&_ZN7S7682C53v26Ev,
  (VTBL_ENTRY)&_ZN7S7682C53v27Ev,
  (VTBL_ENTRY)&_ZN7S7682C53v28Ev,
};
extern void _ZN7S7682C6D1Ev();
extern void _ZN7S7682C6D0Ev();
extern void _ZN7S7682C63v19Ev();
extern void _ZN7S7682C63v20Ev();
extern void _ZN7S7682C63v21Ev();
extern void _ZN7S7682C63v22Ev();
static  VTBL_ENTRY _tg__ZTV7S7682C67S7682C5__7S7682C1[] = {
  ABISELECT(800,528),
  ABISELECT(960,636),
  0,
  (VTBL_ENTRY)&(_ZTI7S7682C6[0]),
  (VTBL_ENTRY)&_ZN7S7682C6D1Ev,
  (VTBL_ENTRY)&_ZN7S7682C6D0Ev,
  (VTBL_ENTRY)&_ZN7S7682C63v19Ev,
  (VTBL_ENTRY)&_ZN7S7682C63v20Ev,
  (VTBL_ENTRY)&_ZN7S7682C63v21Ev,
  (VTBL_ENTRY)&_ZN7S7682C63v22Ev,
};
extern void _ZN7S7682C32v8Ev();
extern void _ZN7S7682C32v9Ev();
extern void _ZN7S7682C33v10Ev();
extern void _ZN7S7682C33v11Ev();
extern void _ZN7S7682C43v12Ev();
extern void _ZN7S7682C43v13Ev();
extern void _ZN7S7682C43v14Ev();
extern void _ZN7S7682C23v15Ev();
extern void _ZN7S7682C23v16Ev();
extern void _ZN7S7682C23v17Ev();
extern void _ZN7S7682C23v18Ev();
static  VTBL_ENTRY _tg__ZTV7S7682C2__7S7682C67S7682C5__7S7682C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-160,-108),
  ABISELECT(-960,-636),
  (VTBL_ENTRY)&(_ZTI7S7682C6[0]),
  (VTBL_ENTRY)&_ZN7S7682C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7682C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v15Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v16Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v17Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v18Ev,
};
extern void _ZN7S7682C32v8Ev();
extern void _ZN7S7682C32v9Ev();
extern void _ZN7S7682C33v10Ev();
extern void _ZN7S7682C33v11Ev();
static  VTBL_ENTRY _tg__ZTV7S7682C3__7S7682C67S7682C5__7S7682C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-800,-528),
  (VTBL_ENTRY)&(_ZTI7S7682C6[0]),
  (VTBL_ENTRY)&_ZN7S7682C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7682C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v11Ev,
};
extern void _ZN7S7682C32v8Ev();
extern void _ZN7S7682C32v9Ev();
extern void _ZN7S7682C33v10Ev();
extern void _ZN7S7682C33v11Ev();
extern void _ZN7S7682C43v12Ev();
extern void _ZN7S7682C43v13Ev();
extern void _ZN7S7682C43v14Ev();
extern void _ZN7S7682C23v15Ev();
extern void _ZN7S7682C23v16Ev();
extern void _ZN7S7682C23v17Ev();
extern void _ZN7S7682C23v18Ev();
static  VTBL_ENTRY _tg__ZTV7S7682C2__7S7682C5__7S7682C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-160,-108),
  ABISELECT(-960,-636),
  (VTBL_ENTRY)&(_ZTI7S7682C5[0]),
  (VTBL_ENTRY)&_ZN7S7682C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7682C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v15Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v16Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v17Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v18Ev,
};
extern void _ZN7S7682C32v8Ev();
extern void _ZN7S7682C32v9Ev();
extern void _ZN7S7682C33v10Ev();
extern void _ZN7S7682C33v11Ev();
static  VTBL_ENTRY _tg__ZTV7S7682C3__7S7682C5__7S7682C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-800,-528),
  (VTBL_ENTRY)&(_ZTI7S7682C5[0]),
  (VTBL_ENTRY)&_ZN7S7682C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7682C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v11Ev,
};
extern void _ZN10S7682C8_nt3v29Ev();
extern void _ZN10S7682C8_nt3v30Ev();
extern void _ZN10S7682C8_nt3v31Ev();
extern void _ZN10S7682C8_nt3v32Ev();
extern void _ZN8S7682C16D1Ev();
extern void _ZN8S7682C16D0Ev();
extern void _ZN8S7682C163v65Ev();
extern void _ZN8S7682C163v66Ev();
extern void _ZN8S7682C163v67Ev();
extern void _ZN8S7682C163v68Ev();
extern void _ZN8S7682C163v69Ev();
extern void _ZN8S7682C163v70Ev();
extern void _ZN8S7682C163v71Ev();
static  VTBL_ENTRY _tg__ZTV8S7682C16__7S7682C1[] = {
  ABISELECT(928,620),
  ABISELECT(3744,2424),
  ABISELECT(3216,2088),
  ABISELECT(3200,2084),
  ABISELECT(3192,2080),
  ABISELECT(5216,3352),
  ABISELECT(3536,2292),
  ABISELECT(3504,2280),
  ABISELECT(768,512),
  0,
  (VTBL_ENTRY)&(_ZTI8S7682C16[0]),
  (VTBL_ENTRY)&_ZN10S7682C8_nt3v29Ev,
  (VTBL_ENTRY)&_ZN10S7682C8_nt3v30Ev,
  (VTBL_ENTRY)&_ZN10S7682C8_nt3v31Ev,
  (VTBL_ENTRY)&_ZN10S7682C8_nt3v32Ev,
  (VTBL_ENTRY)&_ZN8S7682C16D1Ev,
  (VTBL_ENTRY)&_ZN8S7682C16D0Ev,
  (VTBL_ENTRY)&_ZN8S7682C163v65Ev,
  (VTBL_ENTRY)&_ZN8S7682C163v66Ev,
  (VTBL_ENTRY)&_ZN8S7682C163v67Ev,
  (VTBL_ENTRY)&_ZN8S7682C163v68Ev,
  (VTBL_ENTRY)&_ZN8S7682C163v69Ev,
  (VTBL_ENTRY)&_ZN8S7682C163v70Ev,
  (VTBL_ENTRY)&_ZN8S7682C163v71Ev,
};
extern void _ZN7S7682C6D1Ev();
extern void _ZN7S7682C6D0Ev();
extern void _ZN7S7682C63v19Ev();
extern void _ZN7S7682C63v20Ev();
extern void _ZN7S7682C63v21Ev();
extern void _ZN7S7682C63v22Ev();
static  VTBL_ENTRY _tg__ZTV7S7682C68S7682C16__A1__7S7682C1[] = {
  ABISELECT(760,508),
  ABISELECT(920,616),
  0,
  (VTBL_ENTRY)&(_ZTI7S7682C6[0]),
  (VTBL_ENTRY)&_ZN7S7682C6D1Ev,
  (VTBL_ENTRY)&_ZN7S7682C6D0Ev,
  (VTBL_ENTRY)&_ZN7S7682C63v19Ev,
  (VTBL_ENTRY)&_ZN7S7682C63v20Ev,
  (VTBL_ENTRY)&_ZN7S7682C63v21Ev,
  (VTBL_ENTRY)&_ZN7S7682C63v22Ev,
};
extern void _ZN7S7682C32v8Ev();
extern void _ZN7S7682C32v9Ev();
extern void _ZN7S7682C33v10Ev();
extern void _ZN7S7682C33v11Ev();
extern void _ZN7S7682C43v12Ev();
extern void _ZN7S7682C43v13Ev();
extern void _ZN7S7682C43v14Ev();
extern void _ZN7S7682C23v15Ev();
extern void _ZN7S7682C23v16Ev();
extern void _ZN7S7682C23v17Ev();
extern void _ZN7S7682C23v18Ev();
static  VTBL_ENTRY _tg__ZTV7S7682C2__7S7682C68S7682C16__A1__7S7682C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-160,-108),
  ABISELECT(-920,-616),
  (VTBL_ENTRY)&(_ZTI7S7682C6[0]),
  (VTBL_ENTRY)&_ZN7S7682C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7682C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v15Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v16Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v17Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v18Ev,
};
extern void _ZN7S7682C32v8Ev();
extern void _ZN7S7682C32v9Ev();
extern void _ZN7S7682C33v10Ev();
extern void _ZN7S7682C33v11Ev();
static  VTBL_ENTRY _tg__ZTV7S7682C3__7S7682C68S7682C16__A1__7S7682C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-760,-508),
  (VTBL_ENTRY)&(_ZTI7S7682C6[0]),
  (VTBL_ENTRY)&_ZN7S7682C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7682C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v11Ev,
};
extern void _ZN7S7682C32v8Ev();
extern void _ZN7S7682C32v9Ev();
extern void _ZN7S7682C33v10Ev();
extern void _ZN7S7682C33v11Ev();
static  VTBL_ENTRY _tg__ZTV7S7682C3__8S7682C16__7S7682C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-768,-512),
  (VTBL_ENTRY)&(_ZTI8S7682C16[0]),
  (VTBL_ENTRY)&_ZN7S7682C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7682C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v11Ev,
};
extern void _ZN8S7682C133v42Ev();
extern void _ZN8S7682C133v43Ev();
extern void _ZN8S7682C133v44Ev();
extern void _ZN8S7682C133v45Ev();
extern void _ZN8S7682C133v46Ev();
static  VTBL_ENTRY _tg__ZTV8S7682C13__8S7682C16__7S7682C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(32,12),
  ABISELECT(-2736,-1768),
  ABISELECT(-3504,-2280),
  (VTBL_ENTRY)&(_ZTI8S7682C16[0]),
  (VTBL_ENTRY)&_ZN8S7682C133v42Ev,
  (VTBL_ENTRY)&_ZN8S7682C133v43Ev,
  (VTBL_ENTRY)&_ZN8S7682C133v44Ev,
  (VTBL_ENTRY)&_ZN8S7682C133v45Ev,
  (VTBL_ENTRY)&_ZN8S7682C133v46Ev,
};
extern void _ZN7S7682C32v8Ev();
extern void _ZN7S7682C32v9Ev();
extern void _ZN7S7682C33v10Ev();
extern void _ZN7S7682C33v11Ev();
extern void _ZN7S7682C43v12Ev();
extern void _ZN7S7682C43v13Ev();
extern void _ZN7S7682C43v14Ev();
static  VTBL_ENTRY _tg__ZTV7S7682C4__8S7682C16__7S7682C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-3536,-2292),
  (VTBL_ENTRY)&(_ZTI8S7682C16[0]),
  (VTBL_ENTRY)&_ZN7S7682C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7682C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v14Ev,
};
extern void _ZN7S7682C32v8Ev();
extern void _ZN7S7682C32v9Ev();
extern void _ZN7S7682C33v10Ev();
extern void _ZN7S7682C33v11Ev();
extern void _ZN7S7682C43v12Ev();
extern void _ZN7S7682C43v13Ev();
extern void _ZN7S7682C43v14Ev();
extern void _ZN7S7682C23v15Ev();
extern void _ZN7S7682C23v16Ev();
extern void _ZN7S7682C23v17Ev();
extern void _ZN7S7682C23v18Ev();
extern void _ZN8S7682C123v47Ev();
extern void _ZN8S7682C123v48Ev();
extern void _ZN8S7682C123v49Ev();
extern void _ZN8S7682C123v50Ev();
extern void ABISELECT(_ZTv0_n200_N8S7682C16D1Ev,_ZTv0_n100_N8S7682C16D1Ev)();
extern void ABISELECT(_ZThn5216_N8S7682C16D1Ev,_ZThn3352_N8S7682C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n200_N8S7682C16D0Ev,_ZTv0_n100_N8S7682C16D0Ev)();
extern void ABISELECT(_ZThn5216_N8S7682C16D0Ev,_ZThn3352_N8S7682C16D0Ev)() __attribute__((weak));
extern void _ZN8S7682C103v57Ev();
extern void _ZN8S7682C103v58Ev();
extern void _ZN8S7682C103v59Ev();
extern void _ZN8S7682C103v60Ev();
extern void _ZN8S7682C103v61Ev();
extern void _ZN8S7682C103v62Ev();
extern void _ZN8S7682C103v63Ev();
extern void _ZN8S7682C103v64Ev();
static  VTBL_ENTRY _tg__ZTV8S7682C10__8S7682C16__7S7682C1[] = {
  ABISELECT(288,192),
  ABISELECT(288,192),
  ABISELECT(288,192),
  ABISELECT(288,192),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-5216,-3352),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-1472,-928),
  ABISELECT(-2000,-1264),
  ABISELECT(-2016,-1268),
  ABISELECT(-2024,-1272),
  ABISELECT(-1680,-1060),
  ABISELECT(-1712,-1072),
  ABISELECT(-4448,-2840),
  ABISELECT(-5216,-3352),
  (VTBL_ENTRY)&(_ZTI8S7682C16[0]),
  (VTBL_ENTRY)&_ZN7S7682C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7682C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v15Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v16Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v17Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v18Ev,
  (VTBL_ENTRY)&_ZN8S7682C123v47Ev,
  (VTBL_ENTRY)&_ZN8S7682C123v48Ev,
  (VTBL_ENTRY)&_ZN8S7682C123v49Ev,
  (VTBL_ENTRY)&_ZN8S7682C123v50Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n200_N8S7682C16D1Ev,_ZTv0_n100_N8S7682C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n200_N8S7682C16D0Ev,_ZTv0_n100_N8S7682C16D0Ev),
  (VTBL_ENTRY)&_ZN8S7682C103v57Ev,
  (VTBL_ENTRY)&_ZN8S7682C103v58Ev,
  (VTBL_ENTRY)&_ZN8S7682C103v59Ev,
  (VTBL_ENTRY)&_ZN8S7682C103v60Ev,
  (VTBL_ENTRY)&_ZN8S7682C103v61Ev,
  (VTBL_ENTRY)&_ZN8S7682C103v62Ev,
  (VTBL_ENTRY)&_ZN8S7682C103v63Ev,
  (VTBL_ENTRY)&_ZN8S7682C103v64Ev,
};
extern void _ZN10S7682C8_nt3v29Ev();
extern void _ZN10S7682C8_nt3v30Ev();
extern void _ZN10S7682C8_nt3v31Ev();
extern void _ZN10S7682C8_nt3v32Ev();
static  VTBL_ENTRY _tg__ZTV10S7682C8_nt__A1__8S7682C16__7S7682C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-3192,-2080),
  (VTBL_ENTRY)&(_ZTI8S7682C16[0]),
  (VTBL_ENTRY)&_ZN10S7682C8_nt3v29Ev,
  (VTBL_ENTRY)&_ZN10S7682C8_nt3v30Ev,
  (VTBL_ENTRY)&_ZN10S7682C8_nt3v31Ev,
  (VTBL_ENTRY)&_ZN10S7682C8_nt3v32Ev,
};
extern void ABISELECT(_ZTv0_n56_N8S7682C16D1Ev,_ZTv0_n28_N8S7682C16D1Ev)();
extern void ABISELECT(_ZThn3200_N8S7682C16D1Ev,_ZThn2084_N8S7682C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S7682C16D0Ev,_ZTv0_n28_N8S7682C16D0Ev)();
extern void ABISELECT(_ZThn3200_N8S7682C16D0Ev,_ZThn2084_N8S7682C16D0Ev)() __attribute__((weak));
extern void _ZN8S7682C113v51Ev();
extern void _ZN8S7682C113v52Ev();
static  VTBL_ENTRY _tg__ZTV8S7682C11__8S7682C16__7S7682C1[] = {
  0,
  0,
  ABISELECT(-3200,-2084),
  ABISELECT(336,208),
  ABISELECT(-2432,-1572),
  ABISELECT(304,196),
  ABISELECT(16,4),
  ABISELECT(-3200,-2084),
  (VTBL_ENTRY)&(_ZTI8S7682C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S7682C16D1Ev,_ZTv0_n28_N8S7682C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S7682C16D0Ev,_ZTv0_n28_N8S7682C16D0Ev),
  (VTBL_ENTRY)&_ZN8S7682C113v51Ev,
  (VTBL_ENTRY)&_ZN8S7682C113v52Ev,
};
extern void _ZN7S7682C32v8Ev();
extern void _ZN7S7682C32v9Ev();
extern void _ZN7S7682C33v10Ev();
extern void _ZN7S7682C33v11Ev();
extern void _ZN7S7682C43v12Ev();
extern void _ZN7S7682C43v13Ev();
extern void _ZN7S7682C43v14Ev();
extern void _ZN7S7682C23v15Ev();
extern void _ZN7S7682C23v16Ev();
extern void _ZN7S7682C23v17Ev();
extern void _ZN7S7682C23v18Ev();
extern void _ZN8S7682C123v47Ev();
extern void _ZN8S7682C123v48Ev();
extern void _ZN8S7682C123v49Ev();
extern void _ZN8S7682C123v50Ev();
static  VTBL_ENTRY _tg__ZTV8S7682C12__8S7682C16__7S7682C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(320,204),
  ABISELECT(288,192),
  ABISELECT(-2448,-1576),
  ABISELECT(-3216,-2088),
  (VTBL_ENTRY)&(_ZTI8S7682C16[0]),
  (VTBL_ENTRY)&_ZN7S7682C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7682C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v15Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v16Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v17Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v18Ev,
  (VTBL_ENTRY)&_ZN8S7682C123v47Ev,
  (VTBL_ENTRY)&_ZN8S7682C123v48Ev,
  (VTBL_ENTRY)&_ZN8S7682C123v49Ev,
  (VTBL_ENTRY)&_ZN8S7682C123v50Ev,
};
extern void _ZN7S7682C32v8Ev();
extern void _ZN7S7682C32v9Ev();
extern void _ZN7S7682C33v10Ev();
extern void _ZN7S7682C33v11Ev();
extern void _ZN7S7682C43v12Ev();
extern void _ZN7S7682C43v13Ev();
extern void _ZN7S7682C43v14Ev();
extern void ABISELECT(_ZTvn288_n200_N8S7682C16D1Ev,_ZTvn192_n100_N8S7682C16D1Ev)();
extern void ABISELECT(_ZTvn288_n200_N8S7682C16D0Ev,_ZTvn192_n100_N8S7682C16D0Ev)();
extern void _ZN8S7682C153v53Ev();
extern void _ZN8S7682C153v54Ev();
extern void _ZN8S7682C153v55Ev();
extern void _ZN8S7682C153v56Ev();
static  VTBL_ENTRY _tg__ZTV8S7682C158S7682C10__8S7682C16__7S7682C1[] = {
  ABISELECT(-1760,-1120),
  ABISELECT(-1968,-1252),
  ABISELECT(-2000,-1264),
  ABISELECT(-4736,-3032),
  ABISELECT(-5504,-3544),
  (VTBL_ENTRY)&(_ZTI8S7682C16[0]),
  (VTBL_ENTRY)&_ZN7S7682C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7682C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v14Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn288_n200_N8S7682C16D1Ev,_ZTvn192_n100_N8S7682C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn288_n200_N8S7682C16D0Ev,_ZTvn192_n100_N8S7682C16D0Ev),
  (VTBL_ENTRY)&_ZN8S7682C153v53Ev,
  (VTBL_ENTRY)&_ZN8S7682C153v54Ev,
  (VTBL_ENTRY)&_ZN8S7682C153v55Ev,
  (VTBL_ENTRY)&_ZN8S7682C153v56Ev,
};
extern void _ZN7S7682C93v33Ev();
extern void _ZN7S7682C93v34Ev();
extern void _ZN7S7682C93v35Ev();
extern void _ZN7S7682C93v36Ev();
extern void _ZN7S7682C93v37Ev();
extern void _ZN7S7682C93v38Ev();
extern void _ZN7S7682C93v39Ev();
extern void _ZN7S7682C93v40Ev();
extern void _ZN7S7682C93v41Ev();
static  VTBL_ENTRY _tg__ZTV7S7682C9__8S7682C16__7S7682C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-3744,-2424),
  (VTBL_ENTRY)&(_ZTI8S7682C16[0]),
  (VTBL_ENTRY)&_ZN7S7682C93v33Ev,
  (VTBL_ENTRY)&_ZN7S7682C93v34Ev,
  (VTBL_ENTRY)&_ZN7S7682C93v35Ev,
  (VTBL_ENTRY)&_ZN7S7682C93v36Ev,
  (VTBL_ENTRY)&_ZN7S7682C93v37Ev,
  (VTBL_ENTRY)&_ZN7S7682C93v38Ev,
  (VTBL_ENTRY)&_ZN7S7682C93v39Ev,
  (VTBL_ENTRY)&_ZN7S7682C93v40Ev,
  (VTBL_ENTRY)&_ZN7S7682C93v41Ev,
};
extern void ABISELECT(_ZThn8_N8S7682C16D1Ev,_ZThn4_N8S7682C16D1Ev)();
extern void ABISELECT(_ZThn8_N8S7682C16D0Ev,_ZThn4_N8S7682C16D0Ev)();
extern void _ZN7S7682C63v19Ev();
extern void _ZN7S7682C63v20Ev();
extern void _ZN7S7682C63v21Ev();
extern void _ZN7S7682C63v22Ev();
static  VTBL_ENTRY _tg__ZTV7S7682C6__8S7682C16__7S7682C1[] = {
  ABISELECT(760,508),
  ABISELECT(920,616),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S7682C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N8S7682C16D1Ev,_ZThn4_N8S7682C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N8S7682C16D0Ev,_ZThn4_N8S7682C16D0Ev),
  (VTBL_ENTRY)&_ZN7S7682C63v19Ev,
  (VTBL_ENTRY)&_ZN7S7682C63v20Ev,
  (VTBL_ENTRY)&_ZN7S7682C63v21Ev,
  (VTBL_ENTRY)&_ZN7S7682C63v22Ev,
};
extern void _ZN7S7682C32v8Ev();
extern void _ZN7S7682C32v9Ev();
extern void _ZN7S7682C33v10Ev();
extern void _ZN7S7682C33v11Ev();
extern void _ZN7S7682C43v12Ev();
extern void _ZN7S7682C43v13Ev();
extern void _ZN7S7682C43v14Ev();
extern void _ZN7S7682C23v15Ev();
extern void _ZN7S7682C23v16Ev();
extern void _ZN7S7682C23v17Ev();
extern void _ZN7S7682C23v18Ev();
static  VTBL_ENTRY _tg__ZTV7S7682C2__A2__8S7682C16__7S7682C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-160,-108),
  ABISELECT(-928,-620),
  (VTBL_ENTRY)&(_ZTI8S7682C16[0]),
  (VTBL_ENTRY)&_ZN7S7682C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7682C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v15Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v16Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v17Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v18Ev,
};
extern void _ZN7S7682C32v8Ev();
extern void _ZN7S7682C32v9Ev();
extern void _ZN7S7682C33v10Ev();
extern void _ZN7S7682C33v11Ev();
extern void _ZN7S7682C43v12Ev();
extern void _ZN7S7682C43v13Ev();
extern void _ZN7S7682C43v14Ev();
extern void _ZN7S7682C23v15Ev();
extern void _ZN7S7682C23v16Ev();
extern void _ZN7S7682C23v17Ev();
extern void _ZN7S7682C23v18Ev();
extern void _ZN8S7682C123v47Ev();
extern void _ZN8S7682C123v48Ev();
extern void _ZN8S7682C123v49Ev();
extern void _ZN8S7682C123v50Ev();
extern void _ZN8S7682C10D1Ev();
extern void _ZN8S7682C10D0Ev();
extern void _ZN8S7682C103v57Ev();
extern void _ZN8S7682C103v58Ev();
extern void _ZN8S7682C103v59Ev();
extern void _ZN8S7682C103v60Ev();
extern void _ZN8S7682C103v61Ev();
extern void _ZN8S7682C103v62Ev();
extern void _ZN8S7682C103v63Ev();
extern void _ZN8S7682C103v64Ev();
static  VTBL_ENTRY _tg__ZTV8S7682C10__A__7S7682C1[] = {
  ABISELECT(3712,2408),
  ABISELECT(3184,2072),
  ABISELECT(3168,2068),
  ABISELECT(3160,2064),
  ABISELECT(3504,2276),
  ABISELECT(3472,2264),
  ABISELECT(736,496),
  0,
  (VTBL_ENTRY)&(_ZTI8S7682C10[0]),
  (VTBL_ENTRY)&_ZN7S7682C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7682C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v15Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v16Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v17Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v18Ev,
  (VTBL_ENTRY)&_ZN8S7682C123v47Ev,
  (VTBL_ENTRY)&_ZN8S7682C123v48Ev,
  (VTBL_ENTRY)&_ZN8S7682C123v49Ev,
  (VTBL_ENTRY)&_ZN8S7682C123v50Ev,
  (VTBL_ENTRY)&_ZN8S7682C10D1Ev,
  (VTBL_ENTRY)&_ZN8S7682C10D0Ev,
  (VTBL_ENTRY)&_ZN8S7682C103v57Ev,
  (VTBL_ENTRY)&_ZN8S7682C103v58Ev,
  (VTBL_ENTRY)&_ZN8S7682C103v59Ev,
  (VTBL_ENTRY)&_ZN8S7682C103v60Ev,
  (VTBL_ENTRY)&_ZN8S7682C103v61Ev,
  (VTBL_ENTRY)&_ZN8S7682C103v62Ev,
  (VTBL_ENTRY)&_ZN8S7682C103v63Ev,
  (VTBL_ENTRY)&_ZN8S7682C103v64Ev,
};
extern void _ZN7S7682C32v8Ev();
extern void _ZN7S7682C32v9Ev();
extern void _ZN7S7682C33v10Ev();
extern void _ZN7S7682C33v11Ev();
extern void _ZN7S7682C43v12Ev();
extern void _ZN7S7682C43v13Ev();
extern void _ZN7S7682C43v14Ev();
extern void _ZN7S7682C23v15Ev();
extern void _ZN7S7682C23v16Ev();
extern void _ZN7S7682C23v17Ev();
extern void _ZN7S7682C23v18Ev();
extern void _ZN8S7682C123v47Ev();
extern void _ZN8S7682C123v48Ev();
extern void _ZN8S7682C123v49Ev();
extern void _ZN8S7682C123v50Ev();
static  VTBL_ENTRY _tg__ZTV8S7682C128S7682C10__A3__7S7682C1[] = {
  ABISELECT(3504,2276),
  ABISELECT(3472,2264),
  ABISELECT(736,496),
  0,
  (VTBL_ENTRY)&(_ZTI8S7682C12[0]),
  (VTBL_ENTRY)&_ZN7S7682C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7682C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v15Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v16Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v17Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v18Ev,
  (VTBL_ENTRY)&_ZN8S7682C123v47Ev,
  (VTBL_ENTRY)&_ZN8S7682C123v48Ev,
  (VTBL_ENTRY)&_ZN8S7682C123v49Ev,
  (VTBL_ENTRY)&_ZN8S7682C123v50Ev,
};
extern void _ZN7S7682C32v8Ev();
extern void _ZN7S7682C32v9Ev();
extern void _ZN7S7682C33v10Ev();
extern void _ZN7S7682C33v11Ev();
extern void _ZN7S7682C43v12Ev();
extern void _ZN7S7682C43v13Ev();
extern void _ZN7S7682C43v14Ev();
extern void _ZN7S7682C23v15Ev();
extern void _ZN7S7682C23v16Ev();
extern void _ZN7S7682C23v17Ev();
extern void _ZN7S7682C23v18Ev();
static  VTBL_ENTRY _tg__ZTV7S7682C28S7682C128S7682C10__A5__7S7682C1[] = {
  ABISELECT(736,496),
  0,
  (VTBL_ENTRY)&(_ZTI7S7682C2[0]),
  (VTBL_ENTRY)&_ZN7S7682C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7682C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v15Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v16Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v17Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v18Ev,
};
extern void _ZN7S7682C32v8Ev();
extern void _ZN7S7682C32v9Ev();
extern void _ZN7S7682C33v10Ev();
extern void _ZN7S7682C33v11Ev();
static  VTBL_ENTRY _tg__ZTV7S7682C3__7S7682C28S7682C128S7682C10__A5__7S7682C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-736,-496),
  (VTBL_ENTRY)&(_ZTI7S7682C2[0]),
  (VTBL_ENTRY)&_ZN7S7682C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7682C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v11Ev,
};
extern void _ZN8S7682C133v42Ev();
extern void _ZN8S7682C133v43Ev();
extern void _ZN8S7682C133v44Ev();
extern void _ZN8S7682C133v45Ev();
extern void _ZN8S7682C133v46Ev();
static  VTBL_ENTRY _tg__ZTV8S7682C13__8S7682C128S7682C10__A3__7S7682C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(32,12),
  ABISELECT(-2736,-1768),
  ABISELECT(-3472,-2264),
  (VTBL_ENTRY)&(_ZTI8S7682C12[0]),
  (VTBL_ENTRY)&_ZN8S7682C133v42Ev,
  (VTBL_ENTRY)&_ZN8S7682C133v43Ev,
  (VTBL_ENTRY)&_ZN8S7682C133v44Ev,
  (VTBL_ENTRY)&_ZN8S7682C133v45Ev,
  (VTBL_ENTRY)&_ZN8S7682C133v46Ev,
};
extern void _ZN7S7682C32v8Ev();
extern void _ZN7S7682C32v9Ev();
extern void _ZN7S7682C33v10Ev();
extern void _ZN7S7682C33v11Ev();
static  VTBL_ENTRY _tg__ZTV7S7682C3__8S7682C128S7682C10__A3__7S7682C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-736,-496),
  (VTBL_ENTRY)&(_ZTI8S7682C12[0]),
  (VTBL_ENTRY)&_ZN7S7682C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7682C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v11Ev,
};
extern void _ZN7S7682C32v8Ev();
extern void _ZN7S7682C32v9Ev();
extern void _ZN7S7682C33v10Ev();
extern void _ZN7S7682C33v11Ev();
extern void _ZN7S7682C43v12Ev();
extern void _ZN7S7682C43v13Ev();
extern void _ZN7S7682C43v14Ev();
static  VTBL_ENTRY _tg__ZTV7S7682C4__8S7682C128S7682C10__A3__7S7682C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-3504,-2276),
  (VTBL_ENTRY)&(_ZTI8S7682C12[0]),
  (VTBL_ENTRY)&_ZN7S7682C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7682C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v14Ev,
};
extern void _ZN7S7682C32v8Ev();
extern void _ZN7S7682C32v9Ev();
extern void _ZN7S7682C33v10Ev();
extern void _ZN7S7682C33v11Ev();
extern void _ZN7S7682C43v12Ev();
extern void _ZN7S7682C43v13Ev();
extern void _ZN7S7682C43v14Ev();
extern void _ZN8S7682C15D1Ev();
extern void _ZN8S7682C15D0Ev();
extern void _ZN8S7682C153v53Ev();
extern void _ZN8S7682C153v54Ev();
extern void _ZN8S7682C153v55Ev();
extern void _ZN8S7682C153v56Ev();
static  VTBL_ENTRY _tg__ZTV8S7682C158S7682C10__A2__7S7682C1[] = {
  ABISELECT(3424,2216),
  ABISELECT(3216,2084),
  ABISELECT(3184,2072),
  ABISELECT(448,304),
  0,
  (VTBL_ENTRY)&(_ZTI8S7682C15[0]),
  (VTBL_ENTRY)&_ZN7S7682C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7682C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v14Ev,
  (VTBL_ENTRY)&_ZN8S7682C15D1Ev,
  (VTBL_ENTRY)&_ZN8S7682C15D0Ev,
  (VTBL_ENTRY)&_ZN8S7682C153v53Ev,
  (VTBL_ENTRY)&_ZN8S7682C153v54Ev,
  (VTBL_ENTRY)&_ZN8S7682C153v55Ev,
  (VTBL_ENTRY)&_ZN8S7682C153v56Ev,
};
extern void _ZN7S7682C32v8Ev();
extern void _ZN7S7682C32v9Ev();
extern void _ZN7S7682C33v10Ev();
extern void _ZN7S7682C33v11Ev();
static  VTBL_ENTRY _tg__ZTV7S7682C3__8S7682C158S7682C10__A2__7S7682C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-448,-304),
  (VTBL_ENTRY)&(_ZTI8S7682C15[0]),
  (VTBL_ENTRY)&_ZN7S7682C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7682C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v11Ev,
};
extern void _ZN8S7682C133v42Ev();
extern void _ZN8S7682C133v43Ev();
extern void _ZN8S7682C133v44Ev();
extern void _ZN8S7682C133v45Ev();
extern void _ZN8S7682C133v46Ev();
static  VTBL_ENTRY _tg__ZTV8S7682C13__8S7682C158S7682C10__A2__7S7682C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(32,12),
  ABISELECT(-2736,-1768),
  ABISELECT(-3184,-2072),
  (VTBL_ENTRY)&(_ZTI8S7682C15[0]),
  (VTBL_ENTRY)&_ZN8S7682C133v42Ev,
  (VTBL_ENTRY)&_ZN8S7682C133v43Ev,
  (VTBL_ENTRY)&_ZN8S7682C133v44Ev,
  (VTBL_ENTRY)&_ZN8S7682C133v45Ev,
  (VTBL_ENTRY)&_ZN8S7682C133v46Ev,
};
extern void _ZN7S7682C32v8Ev();
extern void _ZN7S7682C32v9Ev();
extern void _ZN7S7682C33v10Ev();
extern void _ZN7S7682C33v11Ev();
extern void _ZN7S7682C43v12Ev();
extern void _ZN7S7682C43v13Ev();
extern void _ZN7S7682C43v14Ev();
static  VTBL_ENTRY _tg__ZTV7S7682C4__8S7682C158S7682C10__A2__7S7682C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-3216,-2084),
  (VTBL_ENTRY)&(_ZTI8S7682C15[0]),
  (VTBL_ENTRY)&_ZN7S7682C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7682C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v14Ev,
};
extern void _ZN7S7682C93v33Ev();
extern void _ZN7S7682C93v34Ev();
extern void _ZN7S7682C93v35Ev();
extern void _ZN7S7682C93v36Ev();
extern void _ZN7S7682C93v37Ev();
extern void _ZN7S7682C93v38Ev();
extern void _ZN7S7682C93v39Ev();
extern void _ZN7S7682C93v40Ev();
extern void _ZN7S7682C93v41Ev();
static  VTBL_ENTRY _tg__ZTV7S7682C9__8S7682C158S7682C10__A2__7S7682C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-3424,-2216),
  (VTBL_ENTRY)&(_ZTI8S7682C15[0]),
  (VTBL_ENTRY)&_ZN7S7682C93v33Ev,
  (VTBL_ENTRY)&_ZN7S7682C93v34Ev,
  (VTBL_ENTRY)&_ZN7S7682C93v35Ev,
  (VTBL_ENTRY)&_ZN7S7682C93v36Ev,
  (VTBL_ENTRY)&_ZN7S7682C93v37Ev,
  (VTBL_ENTRY)&_ZN7S7682C93v38Ev,
  (VTBL_ENTRY)&_ZN7S7682C93v39Ev,
  (VTBL_ENTRY)&_ZN7S7682C93v40Ev,
  (VTBL_ENTRY)&_ZN7S7682C93v41Ev,
};
extern void _ZN10S7682C8_nt3v29Ev();
extern void _ZN10S7682C8_nt3v30Ev();
extern void _ZN10S7682C8_nt3v31Ev();
extern void _ZN10S7682C8_nt3v32Ev();
static  VTBL_ENTRY _tg__ZTV10S7682C8_nt__8S7682C10__A__7S7682C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-3160,-2064),
  (VTBL_ENTRY)&(_ZTI8S7682C10[0]),
  (VTBL_ENTRY)&_ZN10S7682C8_nt3v29Ev,
  (VTBL_ENTRY)&_ZN10S7682C8_nt3v30Ev,
  (VTBL_ENTRY)&_ZN10S7682C8_nt3v31Ev,
  (VTBL_ENTRY)&_ZN10S7682C8_nt3v32Ev,
};
extern void ABISELECT(_ZTv0_n56_N8S7682C10D1Ev,_ZTv0_n28_N8S7682C10D1Ev)();
extern void ABISELECT(_ZThn3168_N8S7682C10D1Ev,_ZThn2068_N8S7682C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S7682C10D0Ev,_ZTv0_n28_N8S7682C10D0Ev)();
extern void ABISELECT(_ZThn3168_N8S7682C10D0Ev,_ZThn2068_N8S7682C10D0Ev)() __attribute__((weak));
extern void _ZN8S7682C113v51Ev();
extern void _ZN8S7682C113v52Ev();
static  VTBL_ENTRY _tg__ZTV8S7682C11__8S7682C10__A__7S7682C1[] = {
  0,
  0,
  ABISELECT(-3168,-2068),
  ABISELECT(336,208),
  ABISELECT(-2432,-1572),
  ABISELECT(304,196),
  ABISELECT(16,4),
  ABISELECT(-3168,-2068),
  (VTBL_ENTRY)&(_ZTI8S7682C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S7682C10D1Ev,_ZTv0_n28_N8S7682C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S7682C10D0Ev,_ZTv0_n28_N8S7682C10D0Ev),
  (VTBL_ENTRY)&_ZN8S7682C113v51Ev,
  (VTBL_ENTRY)&_ZN8S7682C113v52Ev,
};
extern void _ZN7S7682C32v8Ev();
extern void _ZN7S7682C32v9Ev();
extern void _ZN7S7682C33v10Ev();
extern void _ZN7S7682C33v11Ev();
extern void _ZN7S7682C43v12Ev();
extern void _ZN7S7682C43v13Ev();
extern void _ZN7S7682C43v14Ev();
extern void _ZN7S7682C23v15Ev();
extern void _ZN7S7682C23v16Ev();
extern void _ZN7S7682C23v17Ev();
extern void _ZN7S7682C23v18Ev();
extern void _ZN8S7682C123v47Ev();
extern void _ZN8S7682C123v48Ev();
extern void _ZN8S7682C123v49Ev();
extern void _ZN8S7682C123v50Ev();
static  VTBL_ENTRY _tg__ZTV8S7682C12__8S7682C10__A__7S7682C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(320,204),
  ABISELECT(288,192),
  ABISELECT(-2448,-1576),
  ABISELECT(-3184,-2072),
  (VTBL_ENTRY)&(_ZTI8S7682C10[0]),
  (VTBL_ENTRY)&_ZN7S7682C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7682C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v15Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v16Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v17Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v18Ev,
  (VTBL_ENTRY)&_ZN8S7682C123v47Ev,
  (VTBL_ENTRY)&_ZN8S7682C123v48Ev,
  (VTBL_ENTRY)&_ZN8S7682C123v49Ev,
  (VTBL_ENTRY)&_ZN8S7682C123v50Ev,
};
extern void _ZN8S7682C133v42Ev();
extern void _ZN8S7682C133v43Ev();
extern void _ZN8S7682C133v44Ev();
extern void _ZN8S7682C133v45Ev();
extern void _ZN8S7682C133v46Ev();
static  VTBL_ENTRY _tg__ZTV8S7682C13__8S7682C10__A__7S7682C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(32,12),
  ABISELECT(-2736,-1768),
  ABISELECT(-3472,-2264),
  (VTBL_ENTRY)&(_ZTI8S7682C10[0]),
  (VTBL_ENTRY)&_ZN8S7682C133v42Ev,
  (VTBL_ENTRY)&_ZN8S7682C133v43Ev,
  (VTBL_ENTRY)&_ZN8S7682C133v44Ev,
  (VTBL_ENTRY)&_ZN8S7682C133v45Ev,
  (VTBL_ENTRY)&_ZN8S7682C133v46Ev,
};
extern void _ZN7S7682C32v8Ev();
extern void _ZN7S7682C32v9Ev();
extern void _ZN7S7682C33v10Ev();
extern void _ZN7S7682C33v11Ev();
static  VTBL_ENTRY _tg__ZTV7S7682C3__8S7682C10__A__7S7682C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-736,-496),
  (VTBL_ENTRY)&(_ZTI8S7682C10[0]),
  (VTBL_ENTRY)&_ZN7S7682C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7682C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v11Ev,
};
extern void _ZN7S7682C32v8Ev();
extern void _ZN7S7682C32v9Ev();
extern void _ZN7S7682C33v10Ev();
extern void _ZN7S7682C33v11Ev();
extern void _ZN7S7682C43v12Ev();
extern void _ZN7S7682C43v13Ev();
extern void _ZN7S7682C43v14Ev();
static  VTBL_ENTRY _tg__ZTV7S7682C4__8S7682C10__A__7S7682C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-3504,-2276),
  (VTBL_ENTRY)&(_ZTI8S7682C10[0]),
  (VTBL_ENTRY)&_ZN7S7682C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7682C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v14Ev,
};
extern void _ZN7S7682C32v8Ev();
extern void _ZN7S7682C32v9Ev();
extern void _ZN7S7682C33v10Ev();
extern void _ZN7S7682C33v11Ev();
extern void _ZN7S7682C43v12Ev();
extern void _ZN7S7682C43v13Ev();
extern void _ZN7S7682C43v14Ev();
extern void ABISELECT(_ZThn288_N8S7682C10D1Ev,_ZThn192_N8S7682C10D1Ev)();
extern void ABISELECT(_ZThn288_N8S7682C10D0Ev,_ZThn192_N8S7682C10D0Ev)();
extern void _ZN8S7682C153v53Ev();
extern void _ZN8S7682C153v54Ev();
extern void _ZN8S7682C153v55Ev();
extern void _ZN8S7682C153v56Ev();
static  VTBL_ENTRY _tg__ZTV8S7682C15__8S7682C10__A__7S7682C1[] = {
  ABISELECT(3424,2216),
  ABISELECT(3216,2084),
  ABISELECT(3184,2072),
  ABISELECT(448,304),
  ABISELECT(-288,-192),
  (VTBL_ENTRY)&(_ZTI8S7682C10[0]),
  (VTBL_ENTRY)&_ZN7S7682C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7682C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v14Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn288_N8S7682C10D1Ev,_ZThn192_N8S7682C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn288_N8S7682C10D0Ev,_ZThn192_N8S7682C10D0Ev),
  (VTBL_ENTRY)&_ZN8S7682C153v53Ev,
  (VTBL_ENTRY)&_ZN8S7682C153v54Ev,
  (VTBL_ENTRY)&_ZN8S7682C153v55Ev,
  (VTBL_ENTRY)&_ZN8S7682C153v56Ev,
};
extern void _ZN7S7682C93v33Ev();
extern void _ZN7S7682C93v34Ev();
extern void _ZN7S7682C93v35Ev();
extern void _ZN7S7682C93v36Ev();
extern void _ZN7S7682C93v37Ev();
extern void _ZN7S7682C93v38Ev();
extern void _ZN7S7682C93v39Ev();
extern void _ZN7S7682C93v40Ev();
extern void _ZN7S7682C93v41Ev();
static  VTBL_ENTRY _tg__ZTV7S7682C9__8S7682C10__A__7S7682C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-3712,-2408),
  (VTBL_ENTRY)&(_ZTI8S7682C10[0]),
  (VTBL_ENTRY)&_ZN7S7682C93v33Ev,
  (VTBL_ENTRY)&_ZN7S7682C93v34Ev,
  (VTBL_ENTRY)&_ZN7S7682C93v35Ev,
  (VTBL_ENTRY)&_ZN7S7682C93v36Ev,
  (VTBL_ENTRY)&_ZN7S7682C93v37Ev,
  (VTBL_ENTRY)&_ZN7S7682C93v38Ev,
  (VTBL_ENTRY)&_ZN7S7682C93v39Ev,
  (VTBL_ENTRY)&_ZN7S7682C93v40Ev,
  (VTBL_ENTRY)&_ZN7S7682C93v41Ev,
};
extern void _ZN7S7682C32v8Ev();
extern void _ZN7S7682C32v9Ev();
extern void _ZN7S7682C33v10Ev();
extern void _ZN7S7682C33v11Ev();
extern void _ZN7S7682C43v12Ev();
extern void _ZN7S7682C43v13Ev();
extern void _ZN7S7682C43v14Ev();
extern void _ZN7S7682C23v15Ev();
extern void _ZN7S7682C23v16Ev();
extern void _ZN7S7682C23v17Ev();
extern void _ZN7S7682C23v18Ev();
static  VTBL_ENTRY _tg__ZTV7S7682C2__A1__7S7682C1[] = {
  ABISELECT(-160,-108),
  0,
  (VTBL_ENTRY)&(_ZTI7S7682C2[0]),
  (VTBL_ENTRY)&_ZN7S7682C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7682C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v15Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v16Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v17Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v18Ev,
};
extern void _ZN7S7682C32v8Ev();
extern void _ZN7S7682C32v9Ev();
extern void _ZN7S7682C33v10Ev();
extern void _ZN7S7682C33v11Ev();
static  VTBL_ENTRY _tg__ZTV7S7682C3__7S7682C2__A1__7S7682C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(160,108),
  (VTBL_ENTRY)&(_ZTI7S7682C2[0]),
  (VTBL_ENTRY)&_ZN7S7682C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7682C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v11Ev,
};
extern void _ZN7S7682C93v33Ev();
extern void _ZN7S7682C93v34Ev();
extern void _ZN7S7682C93v35Ev();
extern void _ZN7S7682C93v36Ev();
extern void _ZN7S7682C93v37Ev();
extern void _ZN7S7682C93v38Ev();
extern void _ZN7S7682C93v39Ev();
extern void _ZN7S7682C93v40Ev();
extern void _ZN7S7682C93v41Ev();
extern void _ZN7S7682C7D1Ev();
extern void _ZN7S7682C7D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7682C7__7S7682C1[] = {
  ABISELECT(2592,1668),
  ABISELECT(2384,1536),
  ABISELECT(-384,-244),
  ABISELECT(2352,1524),
  ABISELECT(2064,1332),
  ABISELECT(2048,1328),
  ABISELECT(2040,1324),
  0,
  (VTBL_ENTRY)&(_ZTI7S7682C7[0]),
  (VTBL_ENTRY)&_ZN7S7682C93v33Ev,
  (VTBL_ENTRY)&_ZN7S7682C93v34Ev,
  (VTBL_ENTRY)&_ZN7S7682C93v35Ev,
  (VTBL_ENTRY)&_ZN7S7682C93v36Ev,
  (VTBL_ENTRY)&_ZN7S7682C93v37Ev,
  (VTBL_ENTRY)&_ZN7S7682C93v38Ev,
  (VTBL_ENTRY)&_ZN7S7682C93v39Ev,
  (VTBL_ENTRY)&_ZN7S7682C93v40Ev,
  (VTBL_ENTRY)&_ZN7S7682C93v41Ev,
  (VTBL_ENTRY)&_ZN7S7682C7D1Ev,
  (VTBL_ENTRY)&_ZN7S7682C7D0Ev,
};
extern void _ZN7S7682C32v8Ev();
extern void _ZN7S7682C32v9Ev();
extern void _ZN7S7682C33v10Ev();
extern void _ZN7S7682C33v11Ev();
extern void _ZN7S7682C43v12Ev();
extern void _ZN7S7682C43v13Ev();
extern void _ZN7S7682C43v14Ev();
extern void _ZN7S7682C23v15Ev();
extern void _ZN7S7682C23v16Ev();
extern void _ZN7S7682C23v17Ev();
extern void _ZN7S7682C23v18Ev();
extern void _ZN8S7682C123v47Ev();
extern void _ZN8S7682C123v48Ev();
extern void _ZN8S7682C123v49Ev();
extern void _ZN8S7682C123v50Ev();
extern void _ZN8S7682C10D1Ev();
extern void _ZN8S7682C10D0Ev();
extern void _ZN8S7682C103v57Ev();
extern void _ZN8S7682C103v58Ev();
extern void _ZN8S7682C103v59Ev();
extern void _ZN8S7682C103v60Ev();
extern void _ZN8S7682C103v61Ev();
extern void _ZN8S7682C103v62Ev();
extern void _ZN8S7682C103v63Ev();
extern void _ZN8S7682C103v64Ev();
static  VTBL_ENTRY _tg__ZTV8S7682C107S7682C7__7S7682C1[] = {
  ABISELECT(1120,740),
  ABISELECT(592,404),
  ABISELECT(576,400),
  ABISELECT(568,396),
  ABISELECT(912,608),
  ABISELECT(880,596),
  ABISELECT(-1856,-1172),
  0,
  (VTBL_ENTRY)&(_ZTI8S7682C10[0]),
  (VTBL_ENTRY)&_ZN7S7682C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7682C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v15Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v16Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v17Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v18Ev,
  (VTBL_ENTRY)&_ZN8S7682C123v47Ev,
  (VTBL_ENTRY)&_ZN8S7682C123v48Ev,
  (VTBL_ENTRY)&_ZN8S7682C123v49Ev,
  (VTBL_ENTRY)&_ZN8S7682C123v50Ev,
  (VTBL_ENTRY)&_ZN8S7682C10D1Ev,
  (VTBL_ENTRY)&_ZN8S7682C10D0Ev,
  (VTBL_ENTRY)&_ZN8S7682C103v57Ev,
  (VTBL_ENTRY)&_ZN8S7682C103v58Ev,
  (VTBL_ENTRY)&_ZN8S7682C103v59Ev,
  (VTBL_ENTRY)&_ZN8S7682C103v60Ev,
  (VTBL_ENTRY)&_ZN8S7682C103v61Ev,
  (VTBL_ENTRY)&_ZN8S7682C103v62Ev,
  (VTBL_ENTRY)&_ZN8S7682C103v63Ev,
  (VTBL_ENTRY)&_ZN8S7682C103v64Ev,
};
extern void _ZN7S7682C32v8Ev();
extern void _ZN7S7682C32v9Ev();
extern void _ZN7S7682C33v10Ev();
extern void _ZN7S7682C33v11Ev();
extern void _ZN7S7682C43v12Ev();
extern void _ZN7S7682C43v13Ev();
extern void _ZN7S7682C43v14Ev();
extern void _ZN7S7682C23v15Ev();
extern void _ZN7S7682C23v16Ev();
extern void _ZN7S7682C23v17Ev();
extern void _ZN7S7682C23v18Ev();
extern void _ZN8S7682C123v47Ev();
extern void _ZN8S7682C123v48Ev();
extern void _ZN8S7682C123v49Ev();
extern void _ZN8S7682C123v50Ev();
static  VTBL_ENTRY _tg__ZTV8S7682C128S7682C107S7682C7__A1__7S7682C1[] = {
  ABISELECT(912,608),
  ABISELECT(880,596),
  ABISELECT(-1856,-1172),
  0,
  (VTBL_ENTRY)&(_ZTI8S7682C12[0]),
  (VTBL_ENTRY)&_ZN7S7682C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7682C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v15Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v16Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v17Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v18Ev,
  (VTBL_ENTRY)&_ZN8S7682C123v47Ev,
  (VTBL_ENTRY)&_ZN8S7682C123v48Ev,
  (VTBL_ENTRY)&_ZN8S7682C123v49Ev,
  (VTBL_ENTRY)&_ZN8S7682C123v50Ev,
};
extern void _ZN7S7682C32v8Ev();
extern void _ZN7S7682C32v9Ev();
extern void _ZN7S7682C33v10Ev();
extern void _ZN7S7682C33v11Ev();
extern void _ZN7S7682C43v12Ev();
extern void _ZN7S7682C43v13Ev();
extern void _ZN7S7682C43v14Ev();
extern void _ZN7S7682C23v15Ev();
extern void _ZN7S7682C23v16Ev();
extern void _ZN7S7682C23v17Ev();
extern void _ZN7S7682C23v18Ev();
static  VTBL_ENTRY _tg__ZTV7S7682C28S7682C128S7682C107S7682C7__A3__7S7682C1[] = {
  ABISELECT(-1856,-1172),
  0,
  (VTBL_ENTRY)&(_ZTI7S7682C2[0]),
  (VTBL_ENTRY)&_ZN7S7682C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7682C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v15Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v16Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v17Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v18Ev,
};
extern void _ZN7S7682C32v8Ev();
extern void _ZN7S7682C32v9Ev();
extern void _ZN7S7682C33v10Ev();
extern void _ZN7S7682C33v11Ev();
static  VTBL_ENTRY _tg__ZTV7S7682C3__7S7682C28S7682C128S7682C107S7682C7__A3__7S7682C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(1856,1172),
  (VTBL_ENTRY)&(_ZTI7S7682C2[0]),
  (VTBL_ENTRY)&_ZN7S7682C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7682C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v11Ev,
};
extern void _ZN8S7682C133v42Ev();
extern void _ZN8S7682C133v43Ev();
extern void _ZN8S7682C133v44Ev();
extern void _ZN8S7682C133v45Ev();
extern void _ZN8S7682C133v46Ev();
static  VTBL_ENTRY _tg__ZTV8S7682C13__8S7682C128S7682C107S7682C7__A1__7S7682C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(32,12),
  ABISELECT(-2736,-1768),
  ABISELECT(-880,-596),
  (VTBL_ENTRY)&(_ZTI8S7682C12[0]),
  (VTBL_ENTRY)&_ZN8S7682C133v42Ev,
  (VTBL_ENTRY)&_ZN8S7682C133v43Ev,
  (VTBL_ENTRY)&_ZN8S7682C133v44Ev,
  (VTBL_ENTRY)&_ZN8S7682C133v45Ev,
  (VTBL_ENTRY)&_ZN8S7682C133v46Ev,
};
extern void _ZN7S7682C32v8Ev();
extern void _ZN7S7682C32v9Ev();
extern void _ZN7S7682C33v10Ev();
extern void _ZN7S7682C33v11Ev();
static  VTBL_ENTRY _tg__ZTV7S7682C3__8S7682C128S7682C107S7682C7__A1__7S7682C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(1856,1172),
  (VTBL_ENTRY)&(_ZTI8S7682C12[0]),
  (VTBL_ENTRY)&_ZN7S7682C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7682C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v11Ev,
};
extern void _ZN7S7682C32v8Ev();
extern void _ZN7S7682C32v9Ev();
extern void _ZN7S7682C33v10Ev();
extern void _ZN7S7682C33v11Ev();
extern void _ZN7S7682C43v12Ev();
extern void _ZN7S7682C43v13Ev();
extern void _ZN7S7682C43v14Ev();
static  VTBL_ENTRY _tg__ZTV7S7682C4__8S7682C128S7682C107S7682C7__A1__7S7682C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-912,-608),
  (VTBL_ENTRY)&(_ZTI8S7682C12[0]),
  (VTBL_ENTRY)&_ZN7S7682C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7682C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v14Ev,
};
extern void _ZN7S7682C32v8Ev();
extern void _ZN7S7682C32v9Ev();
extern void _ZN7S7682C33v10Ev();
extern void _ZN7S7682C33v11Ev();
extern void _ZN7S7682C43v12Ev();
extern void _ZN7S7682C43v13Ev();
extern void _ZN7S7682C43v14Ev();
extern void _ZN8S7682C15D1Ev();
extern void _ZN8S7682C15D0Ev();
extern void _ZN8S7682C153v53Ev();
extern void _ZN8S7682C153v54Ev();
extern void _ZN8S7682C153v55Ev();
extern void _ZN8S7682C153v56Ev();
static  VTBL_ENTRY _tg__ZTV8S7682C158S7682C107S7682C7__7S7682C1[] = {
  ABISELECT(832,548),
  ABISELECT(624,416),
  ABISELECT(592,404),
  ABISELECT(-2144,-1364),
  0,
  (VTBL_ENTRY)&(_ZTI8S7682C15[0]),
  (VTBL_ENTRY)&_ZN7S7682C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7682C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v14Ev,
  (VTBL_ENTRY)&_ZN8S7682C15D1Ev,
  (VTBL_ENTRY)&_ZN8S7682C15D0Ev,
  (VTBL_ENTRY)&_ZN8S7682C153v53Ev,
  (VTBL_ENTRY)&_ZN8S7682C153v54Ev,
  (VTBL_ENTRY)&_ZN8S7682C153v55Ev,
  (VTBL_ENTRY)&_ZN8S7682C153v56Ev,
};
extern void _ZN7S7682C32v8Ev();
extern void _ZN7S7682C32v9Ev();
extern void _ZN7S7682C33v10Ev();
extern void _ZN7S7682C33v11Ev();
static  VTBL_ENTRY _tg__ZTV7S7682C3__8S7682C158S7682C107S7682C7__7S7682C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(2144,1364),
  (VTBL_ENTRY)&(_ZTI8S7682C15[0]),
  (VTBL_ENTRY)&_ZN7S7682C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7682C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v11Ev,
};
extern void _ZN8S7682C133v42Ev();
extern void _ZN8S7682C133v43Ev();
extern void _ZN8S7682C133v44Ev();
extern void _ZN8S7682C133v45Ev();
extern void _ZN8S7682C133v46Ev();
static  VTBL_ENTRY _tg__ZTV8S7682C13__8S7682C158S7682C107S7682C7__7S7682C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(32,12),
  ABISELECT(-2736,-1768),
  ABISELECT(-592,-404),
  (VTBL_ENTRY)&(_ZTI8S7682C15[0]),
  (VTBL_ENTRY)&_ZN8S7682C133v42Ev,
  (VTBL_ENTRY)&_ZN8S7682C133v43Ev,
  (VTBL_ENTRY)&_ZN8S7682C133v44Ev,
  (VTBL_ENTRY)&_ZN8S7682C133v45Ev,
  (VTBL_ENTRY)&_ZN8S7682C133v46Ev,
};
extern void _ZN7S7682C32v8Ev();
extern void _ZN7S7682C32v9Ev();
extern void _ZN7S7682C33v10Ev();
extern void _ZN7S7682C33v11Ev();
extern void _ZN7S7682C43v12Ev();
extern void _ZN7S7682C43v13Ev();
extern void _ZN7S7682C43v14Ev();
static  VTBL_ENTRY _tg__ZTV7S7682C4__8S7682C158S7682C107S7682C7__7S7682C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-624,-416),
  (VTBL_ENTRY)&(_ZTI8S7682C15[0]),
  (VTBL_ENTRY)&_ZN7S7682C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7682C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v14Ev,
};
extern void _ZN7S7682C93v33Ev();
extern void _ZN7S7682C93v34Ev();
extern void _ZN7S7682C93v35Ev();
extern void _ZN7S7682C93v36Ev();
extern void _ZN7S7682C93v37Ev();
extern void _ZN7S7682C93v38Ev();
extern void _ZN7S7682C93v39Ev();
extern void _ZN7S7682C93v40Ev();
extern void _ZN7S7682C93v41Ev();
static  VTBL_ENTRY _tg__ZTV7S7682C9__8S7682C158S7682C107S7682C7__7S7682C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-832,-548),
  (VTBL_ENTRY)&(_ZTI8S7682C15[0]),
  (VTBL_ENTRY)&_ZN7S7682C93v33Ev,
  (VTBL_ENTRY)&_ZN7S7682C93v34Ev,
  (VTBL_ENTRY)&_ZN7S7682C93v35Ev,
  (VTBL_ENTRY)&_ZN7S7682C93v36Ev,
  (VTBL_ENTRY)&_ZN7S7682C93v37Ev,
  (VTBL_ENTRY)&_ZN7S7682C93v38Ev,
  (VTBL_ENTRY)&_ZN7S7682C93v39Ev,
  (VTBL_ENTRY)&_ZN7S7682C93v40Ev,
  (VTBL_ENTRY)&_ZN7S7682C93v41Ev,
};
extern void _ZN10S7682C8_nt3v29Ev();
extern void _ZN10S7682C8_nt3v30Ev();
extern void _ZN10S7682C8_nt3v31Ev();
extern void _ZN10S7682C8_nt3v32Ev();
static  VTBL_ENTRY _tg__ZTV10S7682C8_nt__8S7682C107S7682C7__7S7682C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-568,-396),
  (VTBL_ENTRY)&(_ZTI8S7682C10[0]),
  (VTBL_ENTRY)&_ZN10S7682C8_nt3v29Ev,
  (VTBL_ENTRY)&_ZN10S7682C8_nt3v30Ev,
  (VTBL_ENTRY)&_ZN10S7682C8_nt3v31Ev,
  (VTBL_ENTRY)&_ZN10S7682C8_nt3v32Ev,
};
extern void ABISELECT(_ZTv0_n56_N8S7682C10D1Ev,_ZTv0_n28_N8S7682C10D1Ev)();
extern void ABISELECT(_ZThn576_N8S7682C10D1Ev,_ZThn400_N8S7682C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S7682C10D0Ev,_ZTv0_n28_N8S7682C10D0Ev)();
extern void ABISELECT(_ZThn576_N8S7682C10D0Ev,_ZThn400_N8S7682C10D0Ev)() __attribute__((weak));
extern void _ZN8S7682C113v51Ev();
extern void _ZN8S7682C113v52Ev();
static  VTBL_ENTRY _tg__ZTV8S7682C11__8S7682C107S7682C7__7S7682C1[] = {
  0,
  0,
  ABISELECT(-576,-400),
  ABISELECT(336,208),
  ABISELECT(-2432,-1572),
  ABISELECT(304,196),
  ABISELECT(16,4),
  ABISELECT(-576,-400),
  (VTBL_ENTRY)&(_ZTI8S7682C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S7682C10D1Ev,_ZTv0_n28_N8S7682C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S7682C10D0Ev,_ZTv0_n28_N8S7682C10D0Ev),
  (VTBL_ENTRY)&_ZN8S7682C113v51Ev,
  (VTBL_ENTRY)&_ZN8S7682C113v52Ev,
};
extern void _ZN7S7682C32v8Ev();
extern void _ZN7S7682C32v9Ev();
extern void _ZN7S7682C33v10Ev();
extern void _ZN7S7682C33v11Ev();
extern void _ZN7S7682C43v12Ev();
extern void _ZN7S7682C43v13Ev();
extern void _ZN7S7682C43v14Ev();
extern void _ZN7S7682C23v15Ev();
extern void _ZN7S7682C23v16Ev();
extern void _ZN7S7682C23v17Ev();
extern void _ZN7S7682C23v18Ev();
extern void _ZN8S7682C123v47Ev();
extern void _ZN8S7682C123v48Ev();
extern void _ZN8S7682C123v49Ev();
extern void _ZN8S7682C123v50Ev();
static  VTBL_ENTRY _tg__ZTV8S7682C12__8S7682C107S7682C7__7S7682C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(320,204),
  ABISELECT(288,192),
  ABISELECT(-2448,-1576),
  ABISELECT(-592,-404),
  (VTBL_ENTRY)&(_ZTI8S7682C10[0]),
  (VTBL_ENTRY)&_ZN7S7682C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7682C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v15Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v16Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v17Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v18Ev,
  (VTBL_ENTRY)&_ZN8S7682C123v47Ev,
  (VTBL_ENTRY)&_ZN8S7682C123v48Ev,
  (VTBL_ENTRY)&_ZN8S7682C123v49Ev,
  (VTBL_ENTRY)&_ZN8S7682C123v50Ev,
};
extern void _ZN8S7682C133v42Ev();
extern void _ZN8S7682C133v43Ev();
extern void _ZN8S7682C133v44Ev();
extern void _ZN8S7682C133v45Ev();
extern void _ZN8S7682C133v46Ev();
static  VTBL_ENTRY _tg__ZTV8S7682C13__8S7682C107S7682C7__7S7682C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(32,12),
  ABISELECT(-2736,-1768),
  ABISELECT(-880,-596),
  (VTBL_ENTRY)&(_ZTI8S7682C10[0]),
  (VTBL_ENTRY)&_ZN8S7682C133v42Ev,
  (VTBL_ENTRY)&_ZN8S7682C133v43Ev,
  (VTBL_ENTRY)&_ZN8S7682C133v44Ev,
  (VTBL_ENTRY)&_ZN8S7682C133v45Ev,
  (VTBL_ENTRY)&_ZN8S7682C133v46Ev,
};
extern void _ZN7S7682C32v8Ev();
extern void _ZN7S7682C32v9Ev();
extern void _ZN7S7682C33v10Ev();
extern void _ZN7S7682C33v11Ev();
static  VTBL_ENTRY _tg__ZTV7S7682C3__8S7682C107S7682C7__7S7682C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(1856,1172),
  (VTBL_ENTRY)&(_ZTI8S7682C10[0]),
  (VTBL_ENTRY)&_ZN7S7682C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7682C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v11Ev,
};
extern void _ZN7S7682C32v8Ev();
extern void _ZN7S7682C32v9Ev();
extern void _ZN7S7682C33v10Ev();
extern void _ZN7S7682C33v11Ev();
extern void _ZN7S7682C43v12Ev();
extern void _ZN7S7682C43v13Ev();
extern void _ZN7S7682C43v14Ev();
static  VTBL_ENTRY _tg__ZTV7S7682C4__8S7682C107S7682C7__7S7682C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-912,-608),
  (VTBL_ENTRY)&(_ZTI8S7682C10[0]),
  (VTBL_ENTRY)&_ZN7S7682C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7682C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v14Ev,
};
extern void _ZN7S7682C32v8Ev();
extern void _ZN7S7682C32v9Ev();
extern void _ZN7S7682C33v10Ev();
extern void _ZN7S7682C33v11Ev();
extern void _ZN7S7682C43v12Ev();
extern void _ZN7S7682C43v13Ev();
extern void _ZN7S7682C43v14Ev();
extern void ABISELECT(_ZThn288_N8S7682C10D1Ev,_ZThn192_N8S7682C10D1Ev)();
extern void ABISELECT(_ZThn288_N8S7682C10D0Ev,_ZThn192_N8S7682C10D0Ev)();
extern void _ZN8S7682C153v53Ev();
extern void _ZN8S7682C153v54Ev();
extern void _ZN8S7682C153v55Ev();
extern void _ZN8S7682C153v56Ev();
static  VTBL_ENTRY _tg__ZTV8S7682C15__8S7682C107S7682C7__7S7682C1[] = {
  ABISELECT(832,548),
  ABISELECT(624,416),
  ABISELECT(592,404),
  ABISELECT(-2144,-1364),
  ABISELECT(-288,-192),
  (VTBL_ENTRY)&(_ZTI8S7682C10[0]),
  (VTBL_ENTRY)&_ZN7S7682C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7682C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v14Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn288_N8S7682C10D1Ev,_ZThn192_N8S7682C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn288_N8S7682C10D0Ev,_ZThn192_N8S7682C10D0Ev),
  (VTBL_ENTRY)&_ZN8S7682C153v53Ev,
  (VTBL_ENTRY)&_ZN8S7682C153v54Ev,
  (VTBL_ENTRY)&_ZN8S7682C153v55Ev,
  (VTBL_ENTRY)&_ZN8S7682C153v56Ev,
};
extern void _ZN7S7682C93v33Ev();
extern void _ZN7S7682C93v34Ev();
extern void _ZN7S7682C93v35Ev();
extern void _ZN7S7682C93v36Ev();
extern void _ZN7S7682C93v37Ev();
extern void _ZN7S7682C93v38Ev();
extern void _ZN7S7682C93v39Ev();
extern void _ZN7S7682C93v40Ev();
extern void _ZN7S7682C93v41Ev();
static  VTBL_ENTRY _tg__ZTV7S7682C9__8S7682C107S7682C7__7S7682C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-1120,-740),
  (VTBL_ENTRY)&(_ZTI8S7682C10[0]),
  (VTBL_ENTRY)&_ZN7S7682C93v33Ev,
  (VTBL_ENTRY)&_ZN7S7682C93v34Ev,
  (VTBL_ENTRY)&_ZN7S7682C93v35Ev,
  (VTBL_ENTRY)&_ZN7S7682C93v36Ev,
  (VTBL_ENTRY)&_ZN7S7682C93v37Ev,
  (VTBL_ENTRY)&_ZN7S7682C93v38Ev,
  (VTBL_ENTRY)&_ZN7S7682C93v39Ev,
  (VTBL_ENTRY)&_ZN7S7682C93v40Ev,
  (VTBL_ENTRY)&_ZN7S7682C93v41Ev,
};
extern void _ZN10S7682C8_nt3v29Ev();
extern void _ZN10S7682C8_nt3v30Ev();
extern void _ZN10S7682C8_nt3v31Ev();
extern void _ZN10S7682C8_nt3v32Ev();
static  VTBL_ENTRY _tg__ZTV10S7682C8_nt__7S7682C7__7S7682C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-2040,-1324),
  (VTBL_ENTRY)&(_ZTI7S7682C7[0]),
  (VTBL_ENTRY)&_ZN10S7682C8_nt3v29Ev,
  (VTBL_ENTRY)&_ZN10S7682C8_nt3v30Ev,
  (VTBL_ENTRY)&_ZN10S7682C8_nt3v31Ev,
  (VTBL_ENTRY)&_ZN10S7682C8_nt3v32Ev,
};
extern void _ZN7S7682C32v8Ev();
extern void _ZN7S7682C32v9Ev();
extern void _ZN7S7682C33v10Ev();
extern void _ZN7S7682C33v11Ev();
extern void _ZN7S7682C43v12Ev();
extern void _ZN7S7682C43v13Ev();
extern void _ZN7S7682C43v14Ev();
extern void _ZN7S7682C23v15Ev();
extern void _ZN7S7682C23v16Ev();
extern void _ZN7S7682C23v17Ev();
extern void _ZN7S7682C23v18Ev();
extern void _ZN8S7682C123v47Ev();
extern void _ZN8S7682C123v48Ev();
extern void _ZN8S7682C123v49Ev();
extern void _ZN8S7682C123v50Ev();
extern void ABISELECT(_ZThn1472_N7S7682C7D1Ev,_ZThn928_N7S7682C7D1Ev)();
extern void ABISELECT(_ZThn1472_N7S7682C7D0Ev,_ZThn928_N7S7682C7D0Ev)();
extern void _ZN8S7682C103v57Ev();
extern void _ZN8S7682C103v58Ev();
extern void _ZN8S7682C103v59Ev();
extern void _ZN8S7682C103v60Ev();
extern void _ZN8S7682C103v61Ev();
extern void _ZN8S7682C103v62Ev();
extern void _ZN8S7682C103v63Ev();
extern void _ZN8S7682C103v64Ev();
static  VTBL_ENTRY _tg__ZTV8S7682C10__7S7682C7__7S7682C1[] = {
  ABISELECT(1120,740),
  ABISELECT(592,404),
  ABISELECT(576,400),
  ABISELECT(568,396),
  ABISELECT(912,608),
  ABISELECT(880,596),
  ABISELECT(-1856,-1172),
  ABISELECT(-1472,-928),
  (VTBL_ENTRY)&(_ZTI7S7682C7[0]),
  (VTBL_ENTRY)&_ZN7S7682C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7682C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v15Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v16Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v17Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v18Ev,
  (VTBL_ENTRY)&_ZN8S7682C123v47Ev,
  (VTBL_ENTRY)&_ZN8S7682C123v48Ev,
  (VTBL_ENTRY)&_ZN8S7682C123v49Ev,
  (VTBL_ENTRY)&_ZN8S7682C123v50Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn1472_N7S7682C7D1Ev,_ZThn928_N7S7682C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1472_N7S7682C7D0Ev,_ZThn928_N7S7682C7D0Ev),
  (VTBL_ENTRY)&_ZN8S7682C103v57Ev,
  (VTBL_ENTRY)&_ZN8S7682C103v58Ev,
  (VTBL_ENTRY)&_ZN8S7682C103v59Ev,
  (VTBL_ENTRY)&_ZN8S7682C103v60Ev,
  (VTBL_ENTRY)&_ZN8S7682C103v61Ev,
  (VTBL_ENTRY)&_ZN8S7682C103v62Ev,
  (VTBL_ENTRY)&_ZN8S7682C103v63Ev,
  (VTBL_ENTRY)&_ZN8S7682C103v64Ev,
};
extern void ABISELECT(_ZTv0_n56_N7S7682C7D1Ev,_ZTv0_n28_N7S7682C7D1Ev)();
extern void ABISELECT(_ZThn2048_N7S7682C7D1Ev,_ZThn1328_N7S7682C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N7S7682C7D0Ev,_ZTv0_n28_N7S7682C7D0Ev)();
extern void ABISELECT(_ZThn2048_N7S7682C7D0Ev,_ZThn1328_N7S7682C7D0Ev)() __attribute__((weak));
extern void _ZN8S7682C113v51Ev();
extern void _ZN8S7682C113v52Ev();
static  VTBL_ENTRY _tg__ZTV8S7682C11__7S7682C7__7S7682C1[] = {
  0,
  0,
  ABISELECT(-2048,-1328),
  ABISELECT(336,208),
  ABISELECT(-2432,-1572),
  ABISELECT(304,196),
  ABISELECT(16,4),
  ABISELECT(-2048,-1328),
  (VTBL_ENTRY)&(_ZTI7S7682C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N7S7682C7D1Ev,_ZTv0_n28_N7S7682C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N7S7682C7D0Ev,_ZTv0_n28_N7S7682C7D0Ev),
  (VTBL_ENTRY)&_ZN8S7682C113v51Ev,
  (VTBL_ENTRY)&_ZN8S7682C113v52Ev,
};
extern void _ZN7S7682C32v8Ev();
extern void _ZN7S7682C32v9Ev();
extern void _ZN7S7682C33v10Ev();
extern void _ZN7S7682C33v11Ev();
extern void _ZN7S7682C43v12Ev();
extern void _ZN7S7682C43v13Ev();
extern void _ZN7S7682C43v14Ev();
extern void _ZN7S7682C23v15Ev();
extern void _ZN7S7682C23v16Ev();
extern void _ZN7S7682C23v17Ev();
extern void _ZN7S7682C23v18Ev();
extern void _ZN8S7682C123v47Ev();
extern void _ZN8S7682C123v48Ev();
extern void _ZN8S7682C123v49Ev();
extern void _ZN8S7682C123v50Ev();
static  VTBL_ENTRY _tg__ZTV8S7682C12__7S7682C7__7S7682C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(320,204),
  ABISELECT(288,192),
  ABISELECT(-2448,-1576),
  ABISELECT(-2064,-1332),
  (VTBL_ENTRY)&(_ZTI7S7682C7[0]),
  (VTBL_ENTRY)&_ZN7S7682C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7682C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v15Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v16Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v17Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v18Ev,
  (VTBL_ENTRY)&_ZN8S7682C123v47Ev,
  (VTBL_ENTRY)&_ZN8S7682C123v48Ev,
  (VTBL_ENTRY)&_ZN8S7682C123v49Ev,
  (VTBL_ENTRY)&_ZN8S7682C123v50Ev,
};
extern void _ZN8S7682C133v42Ev();
extern void _ZN8S7682C133v43Ev();
extern void _ZN8S7682C133v44Ev();
extern void _ZN8S7682C133v45Ev();
extern void _ZN8S7682C133v46Ev();
static  VTBL_ENTRY _tg__ZTV8S7682C13__7S7682C7__7S7682C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(32,12),
  ABISELECT(-2736,-1768),
  ABISELECT(-2352,-1524),
  (VTBL_ENTRY)&(_ZTI7S7682C7[0]),
  (VTBL_ENTRY)&_ZN8S7682C133v42Ev,
  (VTBL_ENTRY)&_ZN8S7682C133v43Ev,
  (VTBL_ENTRY)&_ZN8S7682C133v44Ev,
  (VTBL_ENTRY)&_ZN8S7682C133v45Ev,
  (VTBL_ENTRY)&_ZN8S7682C133v46Ev,
};
extern void _ZN7S7682C32v8Ev();
extern void _ZN7S7682C32v9Ev();
extern void _ZN7S7682C33v10Ev();
extern void _ZN7S7682C33v11Ev();
static  VTBL_ENTRY _tg__ZTV7S7682C3__7S7682C7__7S7682C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(384,244),
  (VTBL_ENTRY)&(_ZTI7S7682C7[0]),
  (VTBL_ENTRY)&_ZN7S7682C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7682C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v11Ev,
};
extern void _ZN7S7682C32v8Ev();
extern void _ZN7S7682C32v9Ev();
extern void _ZN7S7682C33v10Ev();
extern void _ZN7S7682C33v11Ev();
extern void _ZN7S7682C43v12Ev();
extern void _ZN7S7682C43v13Ev();
extern void _ZN7S7682C43v14Ev();
static  VTBL_ENTRY _tg__ZTV7S7682C4__7S7682C7__7S7682C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-2384,-1536),
  (VTBL_ENTRY)&(_ZTI7S7682C7[0]),
  (VTBL_ENTRY)&_ZN7S7682C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7682C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v14Ev,
};
extern void _ZN7S7682C32v8Ev();
extern void _ZN7S7682C32v9Ev();
extern void _ZN7S7682C33v10Ev();
extern void _ZN7S7682C33v11Ev();
extern void _ZN7S7682C43v12Ev();
extern void _ZN7S7682C43v13Ev();
extern void _ZN7S7682C43v14Ev();
extern void ABISELECT(_ZThn1760_N7S7682C7D1Ev,_ZThn1120_N7S7682C7D1Ev)();
extern void ABISELECT(_ZThn1760_N7S7682C7D0Ev,_ZThn1120_N7S7682C7D0Ev)();
extern void _ZN8S7682C153v53Ev();
extern void _ZN8S7682C153v54Ev();
extern void _ZN8S7682C153v55Ev();
extern void _ZN8S7682C153v56Ev();
static  VTBL_ENTRY _tg__ZTV8S7682C158S7682C10__7S7682C7__7S7682C1[] = {
  ABISELECT(832,548),
  ABISELECT(624,416),
  ABISELECT(592,404),
  ABISELECT(-2144,-1364),
  ABISELECT(-1760,-1120),
  (VTBL_ENTRY)&(_ZTI7S7682C7[0]),
  (VTBL_ENTRY)&_ZN7S7682C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7682C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v14Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn1760_N7S7682C7D1Ev,_ZThn1120_N7S7682C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1760_N7S7682C7D0Ev,_ZThn1120_N7S7682C7D0Ev),
  (VTBL_ENTRY)&_ZN8S7682C153v53Ev,
  (VTBL_ENTRY)&_ZN8S7682C153v54Ev,
  (VTBL_ENTRY)&_ZN8S7682C153v55Ev,
  (VTBL_ENTRY)&_ZN8S7682C153v56Ev,
};
extern void _ZN7S7682C93v33Ev();
extern void _ZN7S7682C93v34Ev();
extern void _ZN7S7682C93v35Ev();
extern void _ZN7S7682C93v36Ev();
extern void _ZN7S7682C93v37Ev();
extern void _ZN7S7682C93v38Ev();
extern void _ZN7S7682C93v39Ev();
extern void _ZN7S7682C93v40Ev();
extern void _ZN7S7682C93v41Ev();
static  VTBL_ENTRY _tg__ZTV7S7682C9__A1__7S7682C7__7S7682C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-2592,-1668),
  (VTBL_ENTRY)&(_ZTI7S7682C7[0]),
  (VTBL_ENTRY)&_ZN7S7682C93v33Ev,
  (VTBL_ENTRY)&_ZN7S7682C93v34Ev,
  (VTBL_ENTRY)&_ZN7S7682C93v35Ev,
  (VTBL_ENTRY)&_ZN7S7682C93v36Ev,
  (VTBL_ENTRY)&_ZN7S7682C93v37Ev,
  (VTBL_ENTRY)&_ZN7S7682C93v38Ev,
  (VTBL_ENTRY)&_ZN7S7682C93v39Ev,
  (VTBL_ENTRY)&_ZN7S7682C93v40Ev,
  (VTBL_ENTRY)&_ZN7S7682C93v41Ev,
};
extern void _ZN8S7682C11D1Ev();
extern void _ZN8S7682C11D0Ev();
extern void _ZN8S7682C113v51Ev();
extern void _ZN8S7682C113v52Ev();
static  VTBL_ENTRY _tg__ZTV8S7682C11__7S7682C1[] = {
  ABISELECT(336,208),
  ABISELECT(-2432,-1572),
  ABISELECT(304,196),
  ABISELECT(16,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S7682C11[0]),
  (VTBL_ENTRY)&_ZN8S7682C11D1Ev,
  (VTBL_ENTRY)&_ZN8S7682C11D0Ev,
  (VTBL_ENTRY)&_ZN8S7682C113v51Ev,
  (VTBL_ENTRY)&_ZN8S7682C113v52Ev,
};
extern void _ZN7S7682C32v8Ev();
extern void _ZN7S7682C32v9Ev();
extern void _ZN7S7682C33v10Ev();
extern void _ZN7S7682C33v11Ev();
extern void _ZN7S7682C43v12Ev();
extern void _ZN7S7682C43v13Ev();
extern void _ZN7S7682C43v14Ev();
extern void _ZN7S7682C23v15Ev();
extern void _ZN7S7682C23v16Ev();
extern void _ZN7S7682C23v17Ev();
extern void _ZN7S7682C23v18Ev();
extern void _ZN8S7682C123v47Ev();
extern void _ZN8S7682C123v48Ev();
extern void _ZN8S7682C123v49Ev();
extern void _ZN8S7682C123v50Ev();
static  VTBL_ENTRY _tg__ZTV8S7682C12__8S7682C11__7S7682C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(320,204),
  ABISELECT(288,192),
  ABISELECT(-2448,-1576),
  ABISELECT(-16,-4),
  (VTBL_ENTRY)&(_ZTI8S7682C11[0]),
  (VTBL_ENTRY)&_ZN7S7682C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7682C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v15Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v16Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v17Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v18Ev,
  (VTBL_ENTRY)&_ZN8S7682C123v47Ev,
  (VTBL_ENTRY)&_ZN8S7682C123v48Ev,
  (VTBL_ENTRY)&_ZN8S7682C123v49Ev,
  (VTBL_ENTRY)&_ZN8S7682C123v50Ev,
};
extern void _ZN8S7682C133v42Ev();
extern void _ZN8S7682C133v43Ev();
extern void _ZN8S7682C133v44Ev();
extern void _ZN8S7682C133v45Ev();
extern void _ZN8S7682C133v46Ev();
static  VTBL_ENTRY _tg__ZTV8S7682C13__8S7682C11__7S7682C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(32,12),
  ABISELECT(-2736,-1768),
  ABISELECT(-304,-196),
  (VTBL_ENTRY)&(_ZTI8S7682C11[0]),
  (VTBL_ENTRY)&_ZN8S7682C133v42Ev,
  (VTBL_ENTRY)&_ZN8S7682C133v43Ev,
  (VTBL_ENTRY)&_ZN8S7682C133v44Ev,
  (VTBL_ENTRY)&_ZN8S7682C133v45Ev,
  (VTBL_ENTRY)&_ZN8S7682C133v46Ev,
};
extern void _ZN7S7682C32v8Ev();
extern void _ZN7S7682C32v9Ev();
extern void _ZN7S7682C33v10Ev();
extern void _ZN7S7682C33v11Ev();
static  VTBL_ENTRY _tg__ZTV7S7682C3__8S7682C11__7S7682C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(2432,1572),
  (VTBL_ENTRY)&(_ZTI8S7682C11[0]),
  (VTBL_ENTRY)&_ZN7S7682C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7682C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v11Ev,
};
extern void _ZN7S7682C32v8Ev();
extern void _ZN7S7682C32v9Ev();
extern void _ZN7S7682C33v10Ev();
extern void _ZN7S7682C33v11Ev();
extern void _ZN7S7682C43v12Ev();
extern void _ZN7S7682C43v13Ev();
extern void _ZN7S7682C43v14Ev();
static  VTBL_ENTRY _tg__ZTV7S7682C4__8S7682C11__7S7682C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-336,-208),
  (VTBL_ENTRY)&(_ZTI8S7682C11[0]),
  (VTBL_ENTRY)&_ZN7S7682C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7682C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v14Ev,
};
extern void _ZN7S7682C32v8Ev();
extern void _ZN7S7682C32v9Ev();
extern void _ZN7S7682C33v10Ev();
extern void _ZN7S7682C33v11Ev();
extern void _ZN7S7682C43v12Ev();
extern void _ZN7S7682C43v13Ev();
extern void _ZN7S7682C43v14Ev();
extern void _ZN7S7682C23v15Ev();
extern void _ZN7S7682C23v16Ev();
extern void _ZN7S7682C23v17Ev();
extern void _ZN7S7682C23v18Ev();
extern void _ZN8S7682C123v47Ev();
extern void _ZN8S7682C123v48Ev();
extern void _ZN8S7682C123v49Ev();
extern void _ZN8S7682C123v50Ev();
static  VTBL_ENTRY _tg__ZTV8S7682C12__7S7682C1[] = {
  ABISELECT(320,204),
  ABISELECT(288,192),
  ABISELECT(-2448,-1576),
  0,
  (VTBL_ENTRY)&(_ZTI8S7682C12[0]),
  (VTBL_ENTRY)&_ZN7S7682C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7682C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v15Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v16Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v17Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v18Ev,
  (VTBL_ENTRY)&_ZN8S7682C123v47Ev,
  (VTBL_ENTRY)&_ZN8S7682C123v48Ev,
  (VTBL_ENTRY)&_ZN8S7682C123v49Ev,
  (VTBL_ENTRY)&_ZN8S7682C123v50Ev,
};
extern void _ZN7S7682C32v8Ev();
extern void _ZN7S7682C32v9Ev();
extern void _ZN7S7682C33v10Ev();
extern void _ZN7S7682C33v11Ev();
extern void _ZN7S7682C43v12Ev();
extern void _ZN7S7682C43v13Ev();
extern void _ZN7S7682C43v14Ev();
extern void _ZN7S7682C23v15Ev();
extern void _ZN7S7682C23v16Ev();
extern void _ZN7S7682C23v17Ev();
extern void _ZN7S7682C23v18Ev();
static  VTBL_ENTRY _tg__ZTV7S7682C28S7682C12__A2__7S7682C1[] = {
  ABISELECT(-2448,-1576),
  0,
  (VTBL_ENTRY)&(_ZTI7S7682C2[0]),
  (VTBL_ENTRY)&_ZN7S7682C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7682C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v15Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v16Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v17Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v18Ev,
};
extern void _ZN7S7682C32v8Ev();
extern void _ZN7S7682C32v9Ev();
extern void _ZN7S7682C33v10Ev();
extern void _ZN7S7682C33v11Ev();
static  VTBL_ENTRY _tg__ZTV7S7682C3__7S7682C28S7682C12__A2__7S7682C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(2448,1576),
  (VTBL_ENTRY)&(_ZTI7S7682C2[0]),
  (VTBL_ENTRY)&_ZN7S7682C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7682C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v11Ev,
};
extern void _ZN8S7682C133v42Ev();
extern void _ZN8S7682C133v43Ev();
extern void _ZN8S7682C133v44Ev();
extern void _ZN8S7682C133v45Ev();
extern void _ZN8S7682C133v46Ev();
static  VTBL_ENTRY _tg__ZTV8S7682C13__8S7682C12__7S7682C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(32,12),
  ABISELECT(-2736,-1768),
  ABISELECT(-288,-192),
  (VTBL_ENTRY)&(_ZTI8S7682C12[0]),
  (VTBL_ENTRY)&_ZN8S7682C133v42Ev,
  (VTBL_ENTRY)&_ZN8S7682C133v43Ev,
  (VTBL_ENTRY)&_ZN8S7682C133v44Ev,
  (VTBL_ENTRY)&_ZN8S7682C133v45Ev,
  (VTBL_ENTRY)&_ZN8S7682C133v46Ev,
};
extern void _ZN7S7682C32v8Ev();
extern void _ZN7S7682C32v9Ev();
extern void _ZN7S7682C33v10Ev();
extern void _ZN7S7682C33v11Ev();
static  VTBL_ENTRY _tg__ZTV7S7682C3__8S7682C12__7S7682C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(2448,1576),
  (VTBL_ENTRY)&(_ZTI8S7682C12[0]),
  (VTBL_ENTRY)&_ZN7S7682C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7682C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v11Ev,
};
extern void _ZN7S7682C32v8Ev();
extern void _ZN7S7682C32v9Ev();
extern void _ZN7S7682C33v10Ev();
extern void _ZN7S7682C33v11Ev();
extern void _ZN7S7682C43v12Ev();
extern void _ZN7S7682C43v13Ev();
extern void _ZN7S7682C43v14Ev();
static  VTBL_ENTRY _tg__ZTV7S7682C4__8S7682C12__7S7682C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-320,-204),
  (VTBL_ENTRY)&(_ZTI8S7682C12[0]),
  (VTBL_ENTRY)&_ZN7S7682C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7682C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v14Ev,
};
extern void _ZN8S7682C133v42Ev();
extern void _ZN8S7682C133v43Ev();
extern void _ZN8S7682C133v44Ev();
extern void _ZN8S7682C133v45Ev();
extern void _ZN8S7682C133v46Ev();
static  VTBL_ENTRY _tg__ZTV8S7682C13__7S7682C1[] = {
  ABISELECT(32,12),
  ABISELECT(-2736,-1768),
  0,
  (VTBL_ENTRY)&(_ZTI8S7682C13[0]),
  (VTBL_ENTRY)&_ZN8S7682C133v42Ev,
  (VTBL_ENTRY)&_ZN8S7682C133v43Ev,
  (VTBL_ENTRY)&_ZN8S7682C133v44Ev,
  (VTBL_ENTRY)&_ZN8S7682C133v45Ev,
  (VTBL_ENTRY)&_ZN8S7682C133v46Ev,
};
extern void _ZN7S7682C32v8Ev();
extern void _ZN7S7682C32v9Ev();
extern void _ZN7S7682C33v10Ev();
extern void _ZN7S7682C33v11Ev();
static  VTBL_ENTRY _tg__ZTV7S7682C3__8S7682C13__7S7682C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(2736,1768),
  (VTBL_ENTRY)&(_ZTI8S7682C13[0]),
  (VTBL_ENTRY)&_ZN7S7682C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7682C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v11Ev,
};
extern void _ZN7S7682C32v8Ev();
extern void _ZN7S7682C32v9Ev();
extern void _ZN7S7682C33v10Ev();
extern void _ZN7S7682C33v11Ev();
extern void _ZN7S7682C43v12Ev();
extern void _ZN7S7682C43v13Ev();
extern void _ZN7S7682C43v14Ev();
static  VTBL_ENTRY _tg__ZTV7S7682C4__8S7682C13__7S7682C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-32,-12),
  (VTBL_ENTRY)&(_ZTI8S7682C13[0]),
  (VTBL_ENTRY)&_ZN7S7682C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7682C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v14Ev,
};
extern void _ZN7S7682C32v8Ev();
extern void _ZN7S7682C32v9Ev();
extern void _ZN7S7682C33v10Ev();
extern void _ZN7S7682C33v11Ev();
extern void _ZN7S7682C43v12Ev();
extern void _ZN7S7682C43v13Ev();
extern void _ZN7S7682C43v14Ev();
extern void _ZN7S7682C23v15Ev();
extern void _ZN7S7682C23v16Ev();
extern void _ZN7S7682C23v17Ev();
extern void _ZN7S7682C23v18Ev();
extern void _ZN8S7682C123v47Ev();
extern void _ZN8S7682C123v48Ev();
extern void _ZN8S7682C123v49Ev();
extern void _ZN8S7682C123v50Ev();
extern void _ZN8S7682C10D1Ev();
extern void _ZN8S7682C10D0Ev();
extern void _ZN8S7682C103v57Ev();
extern void _ZN8S7682C103v58Ev();
extern void _ZN8S7682C103v59Ev();
extern void _ZN8S7682C103v60Ev();
extern void _ZN8S7682C103v61Ev();
extern void _ZN8S7682C103v62Ev();
extern void _ZN8S7682C103v63Ev();
extern void _ZN8S7682C103v64Ev();
static  VTBL_ENTRY _tg__ZTV8S7682C10__A1__7S7682C1[] = {
  ABISELECT(-1472,-928),
  ABISELECT(-2000,-1264),
  ABISELECT(-2016,-1268),
  ABISELECT(-2024,-1272),
  ABISELECT(-1680,-1060),
  ABISELECT(-1712,-1072),
  ABISELECT(-4448,-2840),
  0,
  (VTBL_ENTRY)&(_ZTI8S7682C10[0]),
  (VTBL_ENTRY)&_ZN7S7682C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7682C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v15Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v16Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v17Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v18Ev,
  (VTBL_ENTRY)&_ZN8S7682C123v47Ev,
  (VTBL_ENTRY)&_ZN8S7682C123v48Ev,
  (VTBL_ENTRY)&_ZN8S7682C123v49Ev,
  (VTBL_ENTRY)&_ZN8S7682C123v50Ev,
  (VTBL_ENTRY)&_ZN8S7682C10D1Ev,
  (VTBL_ENTRY)&_ZN8S7682C10D0Ev,
  (VTBL_ENTRY)&_ZN8S7682C103v57Ev,
  (VTBL_ENTRY)&_ZN8S7682C103v58Ev,
  (VTBL_ENTRY)&_ZN8S7682C103v59Ev,
  (VTBL_ENTRY)&_ZN8S7682C103v60Ev,
  (VTBL_ENTRY)&_ZN8S7682C103v61Ev,
  (VTBL_ENTRY)&_ZN8S7682C103v62Ev,
  (VTBL_ENTRY)&_ZN8S7682C103v63Ev,
  (VTBL_ENTRY)&_ZN8S7682C103v64Ev,
};
extern void _ZN7S7682C32v8Ev();
extern void _ZN7S7682C32v9Ev();
extern void _ZN7S7682C33v10Ev();
extern void _ZN7S7682C33v11Ev();
extern void _ZN7S7682C43v12Ev();
extern void _ZN7S7682C43v13Ev();
extern void _ZN7S7682C43v14Ev();
extern void _ZN7S7682C23v15Ev();
extern void _ZN7S7682C23v16Ev();
extern void _ZN7S7682C23v17Ev();
extern void _ZN7S7682C23v18Ev();
extern void _ZN8S7682C123v47Ev();
extern void _ZN8S7682C123v48Ev();
extern void _ZN8S7682C123v49Ev();
extern void _ZN8S7682C123v50Ev();
static  VTBL_ENTRY _tg__ZTV8S7682C128S7682C10__A2__7S7682C1[] = {
  ABISELECT(-1680,-1060),
  ABISELECT(-1712,-1072),
  ABISELECT(-4448,-2840),
  0,
  (VTBL_ENTRY)&(_ZTI8S7682C12[0]),
  (VTBL_ENTRY)&_ZN7S7682C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7682C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v15Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v16Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v17Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v18Ev,
  (VTBL_ENTRY)&_ZN8S7682C123v47Ev,
  (VTBL_ENTRY)&_ZN8S7682C123v48Ev,
  (VTBL_ENTRY)&_ZN8S7682C123v49Ev,
  (VTBL_ENTRY)&_ZN8S7682C123v50Ev,
};
extern void _ZN7S7682C32v8Ev();
extern void _ZN7S7682C32v9Ev();
extern void _ZN7S7682C33v10Ev();
extern void _ZN7S7682C33v11Ev();
extern void _ZN7S7682C43v12Ev();
extern void _ZN7S7682C43v13Ev();
extern void _ZN7S7682C43v14Ev();
extern void _ZN7S7682C23v15Ev();
extern void _ZN7S7682C23v16Ev();
extern void _ZN7S7682C23v17Ev();
extern void _ZN7S7682C23v18Ev();
static  VTBL_ENTRY _tg__ZTV7S7682C28S7682C128S7682C10__A4__7S7682C1[] = {
  ABISELECT(-4448,-2840),
  0,
  (VTBL_ENTRY)&(_ZTI7S7682C2[0]),
  (VTBL_ENTRY)&_ZN7S7682C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7682C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v15Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v16Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v17Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v18Ev,
};
extern void _ZN7S7682C32v8Ev();
extern void _ZN7S7682C32v9Ev();
extern void _ZN7S7682C33v10Ev();
extern void _ZN7S7682C33v11Ev();
static  VTBL_ENTRY _tg__ZTV7S7682C3__7S7682C28S7682C128S7682C10__A4__7S7682C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(4448,2840),
  (VTBL_ENTRY)&(_ZTI7S7682C2[0]),
  (VTBL_ENTRY)&_ZN7S7682C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7682C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v11Ev,
};
extern void _ZN8S7682C133v42Ev();
extern void _ZN8S7682C133v43Ev();
extern void _ZN8S7682C133v44Ev();
extern void _ZN8S7682C133v45Ev();
extern void _ZN8S7682C133v46Ev();
static  VTBL_ENTRY _tg__ZTV8S7682C13__8S7682C128S7682C10__A2__7S7682C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(32,12),
  ABISELECT(-2736,-1768),
  ABISELECT(1712,1072),
  (VTBL_ENTRY)&(_ZTI8S7682C12[0]),
  (VTBL_ENTRY)&_ZN8S7682C133v42Ev,
  (VTBL_ENTRY)&_ZN8S7682C133v43Ev,
  (VTBL_ENTRY)&_ZN8S7682C133v44Ev,
  (VTBL_ENTRY)&_ZN8S7682C133v45Ev,
  (VTBL_ENTRY)&_ZN8S7682C133v46Ev,
};
extern void _ZN7S7682C32v8Ev();
extern void _ZN7S7682C32v9Ev();
extern void _ZN7S7682C33v10Ev();
extern void _ZN7S7682C33v11Ev();
static  VTBL_ENTRY _tg__ZTV7S7682C3__8S7682C128S7682C10__A2__7S7682C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(4448,2840),
  (VTBL_ENTRY)&(_ZTI8S7682C12[0]),
  (VTBL_ENTRY)&_ZN7S7682C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7682C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v11Ev,
};
extern void _ZN7S7682C32v8Ev();
extern void _ZN7S7682C32v9Ev();
extern void _ZN7S7682C33v10Ev();
extern void _ZN7S7682C33v11Ev();
extern void _ZN7S7682C43v12Ev();
extern void _ZN7S7682C43v13Ev();
extern void _ZN7S7682C43v14Ev();
static  VTBL_ENTRY _tg__ZTV7S7682C4__8S7682C128S7682C10__A2__7S7682C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(1680,1060),
  (VTBL_ENTRY)&(_ZTI8S7682C12[0]),
  (VTBL_ENTRY)&_ZN7S7682C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7682C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v14Ev,
};
extern void _ZN7S7682C32v8Ev();
extern void _ZN7S7682C32v9Ev();
extern void _ZN7S7682C33v10Ev();
extern void _ZN7S7682C33v11Ev();
extern void _ZN7S7682C43v12Ev();
extern void _ZN7S7682C43v13Ev();
extern void _ZN7S7682C43v14Ev();
extern void _ZN8S7682C15D1Ev();
extern void _ZN8S7682C15D0Ev();
extern void _ZN8S7682C153v53Ev();
extern void _ZN8S7682C153v54Ev();
extern void _ZN8S7682C153v55Ev();
extern void _ZN8S7682C153v56Ev();
static  VTBL_ENTRY _tg__ZTV8S7682C158S7682C10__A1__7S7682C1[] = {
  ABISELECT(-1760,-1120),
  ABISELECT(-1968,-1252),
  ABISELECT(-2000,-1264),
  ABISELECT(-4736,-3032),
  0,
  (VTBL_ENTRY)&(_ZTI8S7682C15[0]),
  (VTBL_ENTRY)&_ZN7S7682C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7682C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v14Ev,
  (VTBL_ENTRY)&_ZN8S7682C15D1Ev,
  (VTBL_ENTRY)&_ZN8S7682C15D0Ev,
  (VTBL_ENTRY)&_ZN8S7682C153v53Ev,
  (VTBL_ENTRY)&_ZN8S7682C153v54Ev,
  (VTBL_ENTRY)&_ZN8S7682C153v55Ev,
  (VTBL_ENTRY)&_ZN8S7682C153v56Ev,
};
extern void _ZN7S7682C32v8Ev();
extern void _ZN7S7682C32v9Ev();
extern void _ZN7S7682C33v10Ev();
extern void _ZN7S7682C33v11Ev();
static  VTBL_ENTRY _tg__ZTV7S7682C3__8S7682C158S7682C10__A1__7S7682C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(4736,3032),
  (VTBL_ENTRY)&(_ZTI8S7682C15[0]),
  (VTBL_ENTRY)&_ZN7S7682C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7682C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v11Ev,
};
extern void _ZN8S7682C133v42Ev();
extern void _ZN8S7682C133v43Ev();
extern void _ZN8S7682C133v44Ev();
extern void _ZN8S7682C133v45Ev();
extern void _ZN8S7682C133v46Ev();
static  VTBL_ENTRY _tg__ZTV8S7682C13__8S7682C158S7682C10__A1__7S7682C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(32,12),
  ABISELECT(-2736,-1768),
  ABISELECT(2000,1264),
  (VTBL_ENTRY)&(_ZTI8S7682C15[0]),
  (VTBL_ENTRY)&_ZN8S7682C133v42Ev,
  (VTBL_ENTRY)&_ZN8S7682C133v43Ev,
  (VTBL_ENTRY)&_ZN8S7682C133v44Ev,
  (VTBL_ENTRY)&_ZN8S7682C133v45Ev,
  (VTBL_ENTRY)&_ZN8S7682C133v46Ev,
};
extern void _ZN7S7682C32v8Ev();
extern void _ZN7S7682C32v9Ev();
extern void _ZN7S7682C33v10Ev();
extern void _ZN7S7682C33v11Ev();
extern void _ZN7S7682C43v12Ev();
extern void _ZN7S7682C43v13Ev();
extern void _ZN7S7682C43v14Ev();
static  VTBL_ENTRY _tg__ZTV7S7682C4__8S7682C158S7682C10__A1__7S7682C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(1968,1252),
  (VTBL_ENTRY)&(_ZTI8S7682C15[0]),
  (VTBL_ENTRY)&_ZN7S7682C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7682C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v14Ev,
};
extern void _ZN7S7682C93v33Ev();
extern void _ZN7S7682C93v34Ev();
extern void _ZN7S7682C93v35Ev();
extern void _ZN7S7682C93v36Ev();
extern void _ZN7S7682C93v37Ev();
extern void _ZN7S7682C93v38Ev();
extern void _ZN7S7682C93v39Ev();
extern void _ZN7S7682C93v40Ev();
extern void _ZN7S7682C93v41Ev();
static  VTBL_ENTRY _tg__ZTV7S7682C9__8S7682C158S7682C10__A1__7S7682C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(1760,1120),
  (VTBL_ENTRY)&(_ZTI8S7682C15[0]),
  (VTBL_ENTRY)&_ZN7S7682C93v33Ev,
  (VTBL_ENTRY)&_ZN7S7682C93v34Ev,
  (VTBL_ENTRY)&_ZN7S7682C93v35Ev,
  (VTBL_ENTRY)&_ZN7S7682C93v36Ev,
  (VTBL_ENTRY)&_ZN7S7682C93v37Ev,
  (VTBL_ENTRY)&_ZN7S7682C93v38Ev,
  (VTBL_ENTRY)&_ZN7S7682C93v39Ev,
  (VTBL_ENTRY)&_ZN7S7682C93v40Ev,
  (VTBL_ENTRY)&_ZN7S7682C93v41Ev,
};
extern void _ZN10S7682C8_nt3v29Ev();
extern void _ZN10S7682C8_nt3v30Ev();
extern void _ZN10S7682C8_nt3v31Ev();
extern void _ZN10S7682C8_nt3v32Ev();
static  VTBL_ENTRY _tg__ZTV10S7682C8_nt__8S7682C10__A1__7S7682C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(2024,1272),
  (VTBL_ENTRY)&(_ZTI8S7682C10[0]),
  (VTBL_ENTRY)&_ZN10S7682C8_nt3v29Ev,
  (VTBL_ENTRY)&_ZN10S7682C8_nt3v30Ev,
  (VTBL_ENTRY)&_ZN10S7682C8_nt3v31Ev,
  (VTBL_ENTRY)&_ZN10S7682C8_nt3v32Ev,
};
extern void ABISELECT(_ZTv0_n56_N8S7682C10D1Ev,_ZTv0_n28_N8S7682C10D1Ev)();
extern void ABISELECT(_ZTv0_n56_N8S7682C10D0Ev,_ZTv0_n28_N8S7682C10D0Ev)();
extern void _ZN8S7682C113v51Ev();
extern void _ZN8S7682C113v52Ev();
static  VTBL_ENTRY _tg__ZTV8S7682C11__8S7682C10__A1__7S7682C1[] = {
  0,
  0,
  ABISELECT(2016,1268),
  ABISELECT(336,208),
  ABISELECT(-2432,-1572),
  ABISELECT(304,196),
  ABISELECT(16,4),
  ABISELECT(2016,1268),
  (VTBL_ENTRY)&(_ZTI8S7682C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S7682C10D1Ev,_ZTv0_n28_N8S7682C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S7682C10D0Ev,_ZTv0_n28_N8S7682C10D0Ev),
  (VTBL_ENTRY)&_ZN8S7682C113v51Ev,
  (VTBL_ENTRY)&_ZN8S7682C113v52Ev,
};
extern void _ZN7S7682C32v8Ev();
extern void _ZN7S7682C32v9Ev();
extern void _ZN7S7682C33v10Ev();
extern void _ZN7S7682C33v11Ev();
extern void _ZN7S7682C43v12Ev();
extern void _ZN7S7682C43v13Ev();
extern void _ZN7S7682C43v14Ev();
extern void _ZN7S7682C23v15Ev();
extern void _ZN7S7682C23v16Ev();
extern void _ZN7S7682C23v17Ev();
extern void _ZN7S7682C23v18Ev();
extern void _ZN8S7682C123v47Ev();
extern void _ZN8S7682C123v48Ev();
extern void _ZN8S7682C123v49Ev();
extern void _ZN8S7682C123v50Ev();
static  VTBL_ENTRY _tg__ZTV8S7682C12__8S7682C10__A1__7S7682C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(320,204),
  ABISELECT(288,192),
  ABISELECT(-2448,-1576),
  ABISELECT(2000,1264),
  (VTBL_ENTRY)&(_ZTI8S7682C10[0]),
  (VTBL_ENTRY)&_ZN7S7682C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7682C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v15Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v16Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v17Ev,
  (VTBL_ENTRY)&_ZN7S7682C23v18Ev,
  (VTBL_ENTRY)&_ZN8S7682C123v47Ev,
  (VTBL_ENTRY)&_ZN8S7682C123v48Ev,
  (VTBL_ENTRY)&_ZN8S7682C123v49Ev,
  (VTBL_ENTRY)&_ZN8S7682C123v50Ev,
};
extern void _ZN8S7682C133v42Ev();
extern void _ZN8S7682C133v43Ev();
extern void _ZN8S7682C133v44Ev();
extern void _ZN8S7682C133v45Ev();
extern void _ZN8S7682C133v46Ev();
static  VTBL_ENTRY _tg__ZTV8S7682C13__8S7682C10__A1__7S7682C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(32,12),
  ABISELECT(-2736,-1768),
  ABISELECT(1712,1072),
  (VTBL_ENTRY)&(_ZTI8S7682C10[0]),
  (VTBL_ENTRY)&_ZN8S7682C133v42Ev,
  (VTBL_ENTRY)&_ZN8S7682C133v43Ev,
  (VTBL_ENTRY)&_ZN8S7682C133v44Ev,
  (VTBL_ENTRY)&_ZN8S7682C133v45Ev,
  (VTBL_ENTRY)&_ZN8S7682C133v46Ev,
};
extern void _ZN7S7682C32v8Ev();
extern void _ZN7S7682C32v9Ev();
extern void _ZN7S7682C33v10Ev();
extern void _ZN7S7682C33v11Ev();
static  VTBL_ENTRY _tg__ZTV7S7682C3__8S7682C10__A1__7S7682C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(4448,2840),
  (VTBL_ENTRY)&(_ZTI8S7682C10[0]),
  (VTBL_ENTRY)&_ZN7S7682C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7682C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v11Ev,
};
extern void _ZN7S7682C32v8Ev();
extern void _ZN7S7682C32v9Ev();
extern void _ZN7S7682C33v10Ev();
extern void _ZN7S7682C33v11Ev();
extern void _ZN7S7682C43v12Ev();
extern void _ZN7S7682C43v13Ev();
extern void _ZN7S7682C43v14Ev();
static  VTBL_ENTRY _tg__ZTV7S7682C4__8S7682C10__A1__7S7682C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(1680,1060),
  (VTBL_ENTRY)&(_ZTI8S7682C10[0]),
  (VTBL_ENTRY)&_ZN7S7682C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7682C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v14Ev,
};
extern void _ZN7S7682C32v8Ev();
extern void _ZN7S7682C32v9Ev();
extern void _ZN7S7682C33v10Ev();
extern void _ZN7S7682C33v11Ev();
extern void _ZN7S7682C43v12Ev();
extern void _ZN7S7682C43v13Ev();
extern void _ZN7S7682C43v14Ev();
extern void ABISELECT(_ZThn288_N8S7682C10D1Ev,_ZThn192_N8S7682C10D1Ev)();
extern void ABISELECT(_ZThn288_N8S7682C10D0Ev,_ZThn192_N8S7682C10D0Ev)();
extern void _ZN8S7682C153v53Ev();
extern void _ZN8S7682C153v54Ev();
extern void _ZN8S7682C153v55Ev();
extern void _ZN8S7682C153v56Ev();
static  VTBL_ENTRY _tg__ZTV8S7682C15__8S7682C10__A1__7S7682C1[] = {
  ABISELECT(-1760,-1120),
  ABISELECT(-1968,-1252),
  ABISELECT(-2000,-1264),
  ABISELECT(-4736,-3032),
  ABISELECT(-288,-192),
  (VTBL_ENTRY)&(_ZTI8S7682C10[0]),
  (VTBL_ENTRY)&_ZN7S7682C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7682C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7682C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7682C43v14Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn288_N8S7682C10D1Ev,_ZThn192_N8S7682C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn288_N8S7682C10D0Ev,_ZThn192_N8S7682C10D0Ev),
  (VTBL_ENTRY)&_ZN8S7682C153v53Ev,
  (VTBL_ENTRY)&_ZN8S7682C153v54Ev,
  (VTBL_ENTRY)&_ZN8S7682C153v55Ev,
  (VTBL_ENTRY)&_ZN8S7682C153v56Ev,
};
extern void _ZN7S7682C93v33Ev();
extern void _ZN7S7682C93v34Ev();
extern void _ZN7S7682C93v35Ev();
extern void _ZN7S7682C93v36Ev();
extern void _ZN7S7682C93v37Ev();
extern void _ZN7S7682C93v38Ev();
extern void _ZN7S7682C93v39Ev();
extern void _ZN7S7682C93v40Ev();
extern void _ZN7S7682C93v41Ev();
static  VTBL_ENTRY _tg__ZTV7S7682C9__8S7682C10__A1__7S7682C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(1472,928),
  (VTBL_ENTRY)&(_ZTI8S7682C10[0]),
  (VTBL_ENTRY)&_ZN7S7682C93v33Ev,
  (VTBL_ENTRY)&_ZN7S7682C93v34Ev,
  (VTBL_ENTRY)&_ZN7S7682C93v35Ev,
  (VTBL_ENTRY)&_ZN7S7682C93v36Ev,
  (VTBL_ENTRY)&_ZN7S7682C93v37Ev,
  (VTBL_ENTRY)&_ZN7S7682C93v38Ev,
  (VTBL_ENTRY)&_ZN7S7682C93v39Ev,
  (VTBL_ENTRY)&_ZN7S7682C93v40Ev,
  (VTBL_ENTRY)&_ZN7S7682C93v41Ev,
};
static  VTT_ENTRY vtt_S7682C1[] = {
  {&(_ZTV7S7682C1[12]),  12,469},
  {&(_tg__ZTV7S7682C2__A__7S7682C1[3]),  3,14},
  {&(_tg__ZTV7S7682C3__7S7682C2__A__7S7682C1[6]),  6,10},
  {&(_tg__ZTV7S7682C5__7S7682C1[4]),  4,16},
  {&(_tg__ZTV7S7682C67S7682C5__7S7682C1[4]),  4,10},
  {&(_tg__ZTV7S7682C2__7S7682C67S7682C5__7S7682C1[14]),  14,25},
  {&(_tg__ZTV7S7682C3__7S7682C67S7682C5__7S7682C1[6]),  6,10},
  {&(_tg__ZTV7S7682C2__7S7682C5__7S7682C1[14]),  14,25},
  {&(_tg__ZTV7S7682C3__7S7682C5__7S7682C1[6]),  6,10},
  {&(_tg__ZTV8S7682C16__7S7682C1[11]),  11,24},
  {&(_tg__ZTV7S7682C68S7682C16__A1__7S7682C1[4]),  4,10},
  {&(_tg__ZTV7S7682C2__7S7682C68S7682C16__A1__7S7682C1[14]),  14,25},
  {&(_tg__ZTV7S7682C3__7S7682C68S7682C16__A1__7S7682C1[6]),  6,10},
  {&(_tg__ZTV7S7682C3__8S7682C16__7S7682C1[6]),  6,10},
  {&(_tg__ZTV8S7682C13__8S7682C16__7S7682C1[9]),  9,14},
  {&(_tg__ZTV7S7682C4__8S7682C16__7S7682C1[9]),  9,16},
  {&(_tg__ZTV8S7682C10__8S7682C16__7S7682C1[37]),  37,62},
  {&(_tg__ZTV10S7682C8_nt__A1__8S7682C16__7S7682C1[6]),  6,10},
  {&(_tg__ZTV8S7682C11__8S7682C16__7S7682C1[9]),  9,13},
  {&(_tg__ZTV8S7682C12__8S7682C16__7S7682C1[20]),  20,35},
  {&(_tg__ZTV8S7682C158S7682C10__8S7682C16__7S7682C1[6]),  6,19},
  {&(_tg__ZTV7S7682C9__8S7682C16__7S7682C1[11]),  11,20},
  {&(_tg__ZTV7S7682C6__8S7682C16__7S7682C1[4]),  4,10},
  {&(_tg__ZTV7S7682C2__A2__8S7682C16__7S7682C1[14]),  14,25},
  {&(_tg__ZTV8S7682C10__A__7S7682C1[9]),  9,34},
  {&(_tg__ZTV8S7682C128S7682C10__A3__7S7682C1[5]),  5,20},
  {&(_tg__ZTV7S7682C28S7682C128S7682C10__A5__7S7682C1[3]),  3,14},
  {&(_tg__ZTV7S7682C3__7S7682C28S7682C128S7682C10__A5__7S7682C1[6]),  6,10},
  {&(_tg__ZTV8S7682C13__8S7682C128S7682C10__A3__7S7682C1[9]),  9,14},
  {&(_tg__ZTV7S7682C3__8S7682C128S7682C10__A3__7S7682C1[6]),  6,10},
  {&(_tg__ZTV7S7682C4__8S7682C128S7682C10__A3__7S7682C1[9]),  9,16},
  {&(_tg__ZTV8S7682C158S7682C10__A2__7S7682C1[6]),  6,19},
  {&(_tg__ZTV7S7682C3__8S7682C158S7682C10__A2__7S7682C1[6]),  6,10},
  {&(_tg__ZTV8S7682C13__8S7682C158S7682C10__A2__7S7682C1[9]),  9,14},
  {&(_tg__ZTV7S7682C4__8S7682C158S7682C10__A2__7S7682C1[9]),  9,16},
  {&(_tg__ZTV7S7682C9__8S7682C158S7682C10__A2__7S7682C1[11]),  11,20},
  {&(_tg__ZTV10S7682C8_nt__8S7682C10__A__7S7682C1[6]),  6,10},
  {&(_tg__ZTV8S7682C11__8S7682C10__A__7S7682C1[9]),  9,13},
  {&(_tg__ZTV8S7682C12__8S7682C10__A__7S7682C1[20]),  20,35},
  {&(_tg__ZTV8S7682C13__8S7682C10__A__7S7682C1[9]),  9,14},
  {&(_tg__ZTV7S7682C3__8S7682C10__A__7S7682C1[6]),  6,10},
  {&(_tg__ZTV7S7682C4__8S7682C10__A__7S7682C1[9]),  9,16},
  {&(_tg__ZTV8S7682C15__8S7682C10__A__7S7682C1[6]),  6,19},
  {&(_tg__ZTV7S7682C9__8S7682C10__A__7S7682C1[11]),  11,20},
  {&(_ZTV7S7682C1[141]),  141,469},
  {&(_ZTV7S7682C1[36]),  36,469},
  {&(_ZTV7S7682C1[159]),  159,469},
  {&(_ZTV7S7682C1[216]),  216,469},
  {&(_ZTV7S7682C1[286]),  286,469},
  {&(_ZTV7S7682C1[236]),  236,469},
  {&(_ZTV7S7682C1[299]),  299,469},
  {&(_ZTV7S7682C1[323]),  323,469},
  {&(_ZTV7S7682C1[347]),  347,469},
  {&(_ZTV7S7682C1[361]),  361,469},
  {&(_ZTV7S7682C1[267]),  267,469},
  {&(_ZTV7S7682C1[379]),  379,469},
  {&(_ZTV7S7682C1[59]),  59,469},
  {&(_ZTV7S7682C1[425]),  425,469},
  {&(_ZTV7S7682C1[456]),  456,469},
  {&(_ZTV7S7682C1[76]),  76,469},
  {&(_ZTV7S7682C1[91]),  91,469},
  {&(_ZTV7S7682C1[122]),  122,469},
  {&(_tg__ZTV7S7682C2__A1__7S7682C1[3]),  3,14},
  {&(_tg__ZTV7S7682C3__7S7682C2__A1__7S7682C1[6]),  6,10},
  {&(_tg__ZTV7S7682C7__7S7682C1[9]),  9,20},
  {&(_tg__ZTV8S7682C107S7682C7__7S7682C1[9]),  9,34},
  {&(_tg__ZTV8S7682C128S7682C107S7682C7__A1__7S7682C1[5]),  5,20},
  {&(_tg__ZTV7S7682C28S7682C128S7682C107S7682C7__A3__7S7682C1[3]),  3,14},
  {&(_tg__ZTV7S7682C3__7S7682C28S7682C128S7682C107S7682C7__A3__7S7682C1[6]),  6,10},
  {&(_tg__ZTV8S7682C13__8S7682C128S7682C107S7682C7__A1__7S7682C1[9]),  9,14},
  {&(_tg__ZTV7S7682C3__8S7682C128S7682C107S7682C7__A1__7S7682C1[6]),  6,10},
  {&(_tg__ZTV7S7682C4__8S7682C128S7682C107S7682C7__A1__7S7682C1[9]),  9,16},
  {&(_tg__ZTV8S7682C158S7682C107S7682C7__7S7682C1[6]),  6,19},
  {&(_tg__ZTV7S7682C3__8S7682C158S7682C107S7682C7__7S7682C1[6]),  6,10},
  {&(_tg__ZTV8S7682C13__8S7682C158S7682C107S7682C7__7S7682C1[9]),  9,14},
  {&(_tg__ZTV7S7682C4__8S7682C158S7682C107S7682C7__7S7682C1[9]),  9,16},
  {&(_tg__ZTV7S7682C9__8S7682C158S7682C107S7682C7__7S7682C1[11]),  11,20},
  {&(_tg__ZTV10S7682C8_nt__8S7682C107S7682C7__7S7682C1[6]),  6,10},
  {&(_tg__ZTV8S7682C11__8S7682C107S7682C7__7S7682C1[9]),  9,13},
  {&(_tg__ZTV8S7682C12__8S7682C107S7682C7__7S7682C1[20]),  20,35},
  {&(_tg__ZTV8S7682C13__8S7682C107S7682C7__7S7682C1[9]),  9,14},
  {&(_tg__ZTV7S7682C3__8S7682C107S7682C7__7S7682C1[6]),  6,10},
  {&(_tg__ZTV7S7682C4__8S7682C107S7682C7__7S7682C1[9]),  9,16},
  {&(_tg__ZTV8S7682C15__8S7682C107S7682C7__7S7682C1[6]),  6,19},
  {&(_tg__ZTV7S7682C9__8S7682C107S7682C7__7S7682C1[11]),  11,20},
  {&(_tg__ZTV10S7682C8_nt__7S7682C7__7S7682C1[6]),  6,10},
  {&(_tg__ZTV8S7682C10__7S7682C7__7S7682C1[9]),  9,34},
  {&(_tg__ZTV8S7682C11__7S7682C7__7S7682C1[9]),  9,13},
  {&(_tg__ZTV8S7682C12__7S7682C7__7S7682C1[20]),  20,35},
  {&(_tg__ZTV8S7682C13__7S7682C7__7S7682C1[9]),  9,14},
  {&(_tg__ZTV7S7682C3__7S7682C7__7S7682C1[6]),  6,10},
  {&(_tg__ZTV7S7682C4__7S7682C7__7S7682C1[9]),  9,16},
  {&(_tg__ZTV8S7682C158S7682C10__7S7682C7__7S7682C1[6]),  6,19},
  {&(_tg__ZTV7S7682C9__A1__7S7682C7__7S7682C1[11]),  11,20},
  {&(_tg__ZTV8S7682C11__7S7682C1[6]),  6,10},
  {&(_tg__ZTV8S7682C12__8S7682C11__7S7682C1[20]),  20,35},
  {&(_tg__ZTV8S7682C13__8S7682C11__7S7682C1[9]),  9,14},
  {&(_tg__ZTV7S7682C3__8S7682C11__7S7682C1[6]),  6,10},
  {&(_tg__ZTV7S7682C4__8S7682C11__7S7682C1[9]),  9,16},
  {&(_tg__ZTV8S7682C12__7S7682C1[5]),  5,20},
  {&(_tg__ZTV7S7682C28S7682C12__A2__7S7682C1[3]),  3,14},
  {&(_tg__ZTV7S7682C3__7S7682C28S7682C12__A2__7S7682C1[6]),  6,10},
  {&(_tg__ZTV8S7682C13__8S7682C12__7S7682C1[9]),  9,14},
  {&(_tg__ZTV7S7682C3__8S7682C12__7S7682C1[6]),  6,10},
  {&(_tg__ZTV7S7682C4__8S7682C12__7S7682C1[9]),  9,16},
  {&(_tg__ZTV8S7682C13__7S7682C1[4]),  4,9},
  {&(_tg__ZTV7S7682C3__8S7682C13__7S7682C1[6]),  6,10},
  {&(_tg__ZTV7S7682C4__8S7682C13__7S7682C1[9]),  9,16},
  {&(_tg__ZTV8S7682C10__A1__7S7682C1[9]),  9,34},
  {&(_tg__ZTV8S7682C128S7682C10__A2__7S7682C1[5]),  5,20},
  {&(_tg__ZTV7S7682C28S7682C128S7682C10__A4__7S7682C1[3]),  3,14},
  {&(_tg__ZTV7S7682C3__7S7682C28S7682C128S7682C10__A4__7S7682C1[6]),  6,10},
  {&(_tg__ZTV8S7682C13__8S7682C128S7682C10__A2__7S7682C1[9]),  9,14},
  {&(_tg__ZTV7S7682C3__8S7682C128S7682C10__A2__7S7682C1[6]),  6,10},
  {&(_tg__ZTV7S7682C4__8S7682C128S7682C10__A2__7S7682C1[9]),  9,16},
  {&(_tg__ZTV8S7682C158S7682C10__A1__7S7682C1[6]),  6,19},
  {&(_tg__ZTV7S7682C3__8S7682C158S7682C10__A1__7S7682C1[6]),  6,10},
  {&(_tg__ZTV8S7682C13__8S7682C158S7682C10__A1__7S7682C1[9]),  9,14},
  {&(_tg__ZTV7S7682C4__8S7682C158S7682C10__A1__7S7682C1[9]),  9,16},
  {&(_tg__ZTV7S7682C9__8S7682C158S7682C10__A1__7S7682C1[11]),  11,20},
  {&(_tg__ZTV10S7682C8_nt__8S7682C10__A1__7S7682C1[6]),  6,10},
  {&(_tg__ZTV8S7682C11__8S7682C10__A1__7S7682C1[9]),  9,13},
  {&(_tg__ZTV8S7682C12__8S7682C10__A1__7S7682C1[20]),  20,35},
  {&(_tg__ZTV8S7682C13__8S7682C10__A1__7S7682C1[9]),  9,14},
  {&(_tg__ZTV7S7682C3__8S7682C10__A1__7S7682C1[6]),  6,10},
  {&(_tg__ZTV7S7682C4__8S7682C10__A1__7S7682C1[9]),  9,16},
  {&(_tg__ZTV8S7682C15__8S7682C10__A1__7S7682C1[6]),  6,19},
  {&(_tg__ZTV7S7682C9__8S7682C10__A1__7S7682C1[11]),  11,20},
};
extern VTBL_ENTRY _ZTI7S7682C1[];
extern  VTBL_ENTRY _ZTV7S7682C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7682C1[];
static VTBL_ENTRY alt_thunk_names10[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N7S7682C7D0Ev,_ZTv0_n28_N7S7682C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2048_N7S7682C7D0Ev,_ZThn1328_N7S7682C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N7S7682C7D1Ev,_ZTv0_n28_N7S7682C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2048_N7S7682C7D1Ev,_ZThn1328_N7S7682C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S7682C10D0Ev,_ZTv0_n28_N8S7682C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn576_N8S7682C10D0Ev,_ZThn400_N8S7682C10D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn3168_N8S7682C10D0Ev,_ZThn2068_N8S7682C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S7682C10D1Ev,_ZTv0_n28_N8S7682C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn576_N8S7682C10D1Ev,_ZThn400_N8S7682C10D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn3168_N8S7682C10D1Ev,_ZThn2068_N8S7682C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S7682C16D0Ev,_ZTv0_n28_N8S7682C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3200_N8S7682C16D0Ev,_ZThn2084_N8S7682C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S7682C16D1Ev,_ZTv0_n28_N8S7682C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3200_N8S7682C16D1Ev,_ZThn2084_N8S7682C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n200_N8S7682C16D0Ev,_ZTv0_n100_N8S7682C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5216_N8S7682C16D0Ev,_ZThn3352_N8S7682C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n200_N8S7682C16D1Ev,_ZTv0_n100_N8S7682C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5216_N8S7682C16D1Ev,_ZThn3352_N8S7682C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n200_N7S7682C1D0Ev,_ZTv0_n100_N7S7682C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5472_N7S7682C1D0Ev,_ZThn3504_N7S7682C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n200_N7S7682C1D1Ev,_ZTv0_n100_N7S7682C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5472_N7S7682C1D1Ev,_ZThn3504_N7S7682C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N7S7682C1D0Ev,_ZTv0_n28_N7S7682C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3456_N7S7682C1D0Ev,_ZThn2236_N7S7682C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N7S7682C1D1Ev,_ZTv0_n28_N7S7682C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3456_N7S7682C1D1Ev,_ZThn2236_N7S7682C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n152_N7S7682C1D0Ev,_ZTv0_n76_N7S7682C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1408_N7S7682C1D0Ev,_ZThn908_N7S7682C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n152_N7S7682C1D1Ev,_ZTv0_n76_N7S7682C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1408_N7S7682C1D1Ev,_ZThn908_N7S7682C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7682C1 = {  "S7682C1", // class name
  bases_S7682C1, 48,
  &(vtc_S7682C1[0]), // expected_vtbl_contents
  &(vtt_S7682C1[0]), // expected_vtt_contents
  ABISELECT(6016,3876), // object size
  NSPAIRA(_ZTI7S7682C1),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV7S7682C1),469, //virtual function table var
  12, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7682C1),128, //virtual table table var
  48, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names10,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7681C3  {
  short s7681c3f0:13;
  void *s7681c3f1;
  long double s7681c3f2[8];
  virtual void  v8(); // _ZN7S7681C32v8Ev
  virtual void  v9(); // _ZN7S7681C32v9Ev
  virtual void  v10(); // _ZN7S7681C33v10Ev
  virtual void  v11(); // _ZN7S7681C33v11Ev
  ~S7681C3(); // tgen
  S7681C3(); // tgen
};
//SIG(-1 S7681C3) C1{ v1 v2 v3 v4 Fs:13 Fp FD[8]}


void  S7681C3 ::v8(){vfunc_called(this, "_ZN7S7681C32v8Ev");}
void  S7681C3 ::v9(){vfunc_called(this, "_ZN7S7681C32v9Ev");}
void  S7681C3 ::v10(){vfunc_called(this, "_ZN7S7681C33v10Ev");}
void  S7681C3 ::v11(){vfunc_called(this, "_ZN7S7681C33v11Ev");}
S7681C3 ::~S7681C3(){ note_dtor("S7681C3", this);} // tgen
S7681C3 ::S7681C3(){ note_ctor("S7681C3", this);} // tgen

static void Test_S7681C3()
{
  extern Class_Descriptor cd_S7681C3;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(11,28)];
    init_test(&cd_S7681C3, buf);
    S7681C3 *dp, &lv = *(dp=new (buf) S7681C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(160,108), "sizeof(S7681C3)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7681C3)");
    set_bf_and_test(lv, s7681c3f0, ABISELECT(8,4), 0, 13, 1, "S7681C3");
    set_bf_and_test(lv, s7681c3f0, ABISELECT(8,4), 0, 13, hide_sll(1LL<<12), "S7681C3");
    check_field_offset(lv, s7681c3f1, ABISELECT(16,8), "S7681C3.s7681c3f1");
    check_field_offset(lv, s7681c3f2, ABISELECT(32,12), "S7681C3.s7681c3f2");
    test_class_info(&lv, &cd_S7681C3);
    dp->~S7681C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7681C3(Test_S7681C3, "S7681C3", ABISELECT(160,108));

#else // __cplusplus

extern void _ZN7S7681C3C1Ev();
extern void _ZN7S7681C3D1Ev();
Name_Map name_map_S7681C3[] = {
  NSPAIR(_ZN7S7681C3C1Ev),
  NSPAIR(_ZN7S7681C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S7681C3[];
extern void _ZN7S7681C32v8Ev();
extern void _ZN7S7681C32v9Ev();
extern void _ZN7S7681C33v10Ev();
extern void _ZN7S7681C33v11Ev();
static  VTBL_ENTRY vtc_S7681C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7681C3[0]),
  (VTBL_ENTRY)&_ZN7S7681C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7681C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v11Ev,
};
extern VTBL_ENTRY _ZTI7S7681C3[];
extern  VTBL_ENTRY _ZTV7S7681C3[];
Class_Descriptor cd_S7681C3 = {  "S7681C3", // class name
  0,0,//no base classes
  &(vtc_S7681C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(160,108), // object size
  NSPAIRA(_ZTI7S7681C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S7681C3),6, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7681C4  : S7681C3 {
  void *s7681c4f0[6];
  virtual void  v12(); // _ZN7S7681C43v12Ev
  virtual void  v13(); // _ZN7S7681C43v13Ev
  virtual void  v14(); // _ZN7S7681C43v14Ev
  ~S7681C4(); // tgen
  S7681C4(); // tgen
};
//SIG(-1 S7681C4) C1{ BC2{ v4 v5 v6 v7 Fs:13 Fp FD[8]} v1 v2 v3 Fp[6]}


void  S7681C4 ::v12(){vfunc_called(this, "_ZN7S7681C43v12Ev");}
void  S7681C4 ::v13(){vfunc_called(this, "_ZN7S7681C43v13Ev");}
void  S7681C4 ::v14(){vfunc_called(this, "_ZN7S7681C43v14Ev");}
S7681C4 ::~S7681C4(){ note_dtor("S7681C4", this);} // tgen
S7681C4 ::S7681C4(){ note_ctor("S7681C4", this);} // tgen

static void Test_S7681C4()
{
  extern Class_Descriptor cd_S7681C4;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(14,34)];
    init_test(&cd_S7681C4, buf);
    S7681C4 *dp, &lv = *(dp=new (buf) S7681C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(208,132), "sizeof(S7681C4)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7681C4)");
    check_base_class_offset(lv, (S7681C3*), 0, "S7681C4");
    check_field_offset(lv, s7681c4f0, ABISELECT(160,108), "S7681C4.s7681c4f0");
    test_class_info(&lv, &cd_S7681C4);
    dp->~S7681C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7681C4(Test_S7681C4, "S7681C4", ABISELECT(208,132));

#else // __cplusplus

extern void _ZN7S7681C4C1Ev();
extern void _ZN7S7681C4D1Ev();
Name_Map name_map_S7681C4[] = {
  NSPAIR(_ZN7S7681C4C1Ev),
  NSPAIR(_ZN7S7681C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7681C3;
extern VTBL_ENTRY _ZTI7S7681C3[];
extern  VTBL_ENTRY _ZTV7S7681C3[];
static Base_Class bases_S7681C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7681C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7681C4[];
extern void _ZN7S7681C32v8Ev();
extern void _ZN7S7681C32v9Ev();
extern void _ZN7S7681C33v10Ev();
extern void _ZN7S7681C33v11Ev();
extern void _ZN7S7681C43v12Ev();
extern void _ZN7S7681C43v13Ev();
extern void _ZN7S7681C43v14Ev();
static  VTBL_ENTRY vtc_S7681C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7681C4[0]),
  (VTBL_ENTRY)&_ZN7S7681C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7681C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v14Ev,
};
extern VTBL_ENTRY _ZTI7S7681C4[];
extern  VTBL_ENTRY _ZTV7S7681C4[];
Class_Descriptor cd_S7681C4 = {  "S7681C4", // class name
  bases_S7681C4, 1,
  &(vtc_S7681C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(208,132), // object size
  NSPAIRA(_ZTI7S7681C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S7681C4),9, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7681C2  : virtual S7681C3 , S7681C4 {
  void *s7681c2f0;
  virtual void  v15(); // _ZN7S7681C23v15Ev
  virtual void  v16(); // _ZN7S7681C23v16Ev
  virtual void  v17(); // _ZN7S7681C23v17Ev
  virtual void  v18(); // _ZN7S7681C23v18Ev
  ~S7681C2(); // tgen
  S7681C2(); // tgen
};
//SIG(-1 S7681C2) C1{ VBC2{ v5 v6 v7 v8 Fs:13 Fp FD[8]} BC3{ BC2 v9 v10 v11 Fp[6]} v1 v2 v3 v4 Fp}


void  S7681C2 ::v15(){vfunc_called(this, "_ZN7S7681C23v15Ev");}
void  S7681C2 ::v16(){vfunc_called(this, "_ZN7S7681C23v16Ev");}
void  S7681C2 ::v17(){vfunc_called(this, "_ZN7S7681C23v17Ev");}
void  S7681C2 ::v18(){vfunc_called(this, "_ZN7S7681C23v18Ev");}
S7681C2 ::~S7681C2(){ note_dtor("S7681C2", this);} // tgen
S7681C2 ::S7681C2(){ note_ctor("S7681C2", this);} // tgen

static void Test_S7681C2()
{
  extern Class_Descriptor cd_S7681C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(25,62)];
    init_test(&cd_S7681C2, buf);
    S7681C2 *dp, &lv = *(dp=new (buf) S7681C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(384,244), "sizeof(S7681C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7681C2)");
    /*is_ambiguous_... S7681C2::S7681C3 */ AMB_check_base_class_offset(lv, (S7681C3*), ABISELECT(224,136), "S7681C2");
    check_base_class_offset(lv, (S7681C3*)(S7681C4*), 0, "S7681C2");
    check_base_class_offset(lv, (S7681C4*), 0, "S7681C2");
    check_field_offset(lv, s7681c2f0, ABISELECT(208,132), "S7681C2.s7681c2f0");
    test_class_info(&lv, &cd_S7681C2);
    dp->~S7681C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7681C2(Test_S7681C2, "S7681C2", ABISELECT(384,244));

#else // __cplusplus

extern void _ZN7S7681C2C1Ev();
extern void _ZN7S7681C2D1Ev();
Name_Map name_map_S7681C2[] = {
  NSPAIR(_ZN7S7681C2C1Ev),
  NSPAIR(_ZN7S7681C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7681C3;
extern VTBL_ENTRY _ZTI7S7681C3[];
extern  VTBL_ENTRY _ZTV7S7681C3[];
extern Class_Descriptor cd_S7681C3;
extern VTBL_ENTRY _ZTI7S7681C3[];
extern  VTBL_ENTRY _ZTV7S7681C3[];
extern Class_Descriptor cd_S7681C4;
extern VTBL_ENTRY _ZTI7S7681C4[];
extern  VTBL_ENTRY _ZTV7S7681C4[];
static Base_Class bases_S7681C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7681C3,    ABISELECT(224,136), //bcp->offset
    14, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7681C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S7681C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7681C2[];
extern void _ZN7S7681C32v8Ev();
extern void _ZN7S7681C32v9Ev();
extern void _ZN7S7681C33v10Ev();
extern void _ZN7S7681C33v11Ev();
extern void _ZN7S7681C43v12Ev();
extern void _ZN7S7681C43v13Ev();
extern void _ZN7S7681C43v14Ev();
extern void _ZN7S7681C23v15Ev();
extern void _ZN7S7681C23v16Ev();
extern void _ZN7S7681C23v17Ev();
extern void _ZN7S7681C23v18Ev();
extern void _ZN7S7681C32v8Ev();
extern void _ZN7S7681C32v9Ev();
extern void _ZN7S7681C33v10Ev();
extern void _ZN7S7681C33v11Ev();
static  VTBL_ENTRY vtc_S7681C2[] = {
  ABISELECT(224,136),
  0,
  (VTBL_ENTRY)&(_ZTI7S7681C2[0]),
  (VTBL_ENTRY)&_ZN7S7681C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7681C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v15Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v16Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v17Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v18Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-224,-136),
  (VTBL_ENTRY)&(_ZTI7S7681C2[0]),
  (VTBL_ENTRY)&_ZN7S7681C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7681C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v11Ev,
};
extern VTBL_ENTRY _ZTV7S7681C2[];
static  VTT_ENTRY vtt_S7681C2[] = {
  {&(_ZTV7S7681C2[3]),  3,24},
  {&(_ZTV7S7681C2[20]),  20,24},
};
extern VTBL_ENTRY _ZTI7S7681C2[];
extern  VTBL_ENTRY _ZTV7S7681C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7681C2[];
Class_Descriptor cd_S7681C2 = {  "S7681C2", // class name
  bases_S7681C2, 3,
  &(vtc_S7681C2[0]), // expected_vtbl_contents
  &(vtt_S7681C2[0]), // expected_vtt_contents
  ABISELECT(384,244), // object size
  NSPAIRA(_ZTI7S7681C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7681C2),24, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7681C2),2, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7681C6  : virtual S7681C2 {
  virtual  ~S7681C6(); // _ZN7S7681C6D2Ev
  virtual void  v19(); // _ZN7S7681C63v19Ev
  virtual void  v20(); // _ZN7S7681C63v20Ev
  virtual void  v21(); // _ZN7S7681C63v21Ev
  virtual void  v22(); // _ZN7S7681C63v22Ev
  S7681C6(); // tgen
};
//SIG(-1 S7681C6) C1{ VBC2{ VBC3{ v5 v6 v7 v8 Fs:13 Fp FD[8]} BC4{ BC3 v9 v10 v11 Fp[6]} v12 v13 v14 v15 Fp} vd v1 v2 v3 v4}


 S7681C6 ::~S7681C6(){ note_dtor("S7681C6", this);}
void  S7681C6 ::v19(){vfunc_called(this, "_ZN7S7681C63v19Ev");}
void  S7681C6 ::v20(){vfunc_called(this, "_ZN7S7681C63v20Ev");}
void  S7681C6 ::v21(){vfunc_called(this, "_ZN7S7681C63v21Ev");}
void  S7681C6 ::v22(){vfunc_called(this, "_ZN7S7681C63v22Ev");}
S7681C6 ::S7681C6(){ note_ctor("S7681C6", this);} // tgen

static void Test_S7681C6()
{
  extern Class_Descriptor cd_S7681C6;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(26,63)];
    init_test(&cd_S7681C6, buf);
    S7681C6 *dp, &lv = *(dp=new (buf) S7681C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(400,248), "sizeof(S7681C6)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7681C6)");
    /*is_ambiguous_... S7681C2::S7681C3 */ AMB_check_base_class_offset(lv, (S7681C3*)(S7681C2*), ABISELECT(240,140), "S7681C6");
    check_base_class_offset(lv, (S7681C3*)(S7681C4*)(S7681C2*), ABISELECT(16,4), "S7681C6");
    check_base_class_offset(lv, (S7681C4*)(S7681C2*), ABISELECT(16,4), "S7681C6");
    check_base_class_offset(lv, (S7681C2*), ABISELECT(16,4), "S7681C6");
    test_class_info(&lv, &cd_S7681C6);
    dp->~S7681C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7681C6(Test_S7681C6, "S7681C6", ABISELECT(400,248));

#else // __cplusplus

extern void _ZN7S7681C6C1Ev();
extern void _ZN7S7681C6D2Ev();
Name_Map name_map_S7681C6[] = {
  NSPAIR(_ZN7S7681C6C1Ev),
  NSPAIR(_ZN7S7681C6D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7681C3;
extern VTBL_ENTRY _ZTI7S7681C3[];
extern  VTBL_ENTRY _ZTV7S7681C3[];
extern Class_Descriptor cd_S7681C3;
extern VTBL_ENTRY _ZTI7S7681C3[];
extern  VTBL_ENTRY _ZTV7S7681C3[];
extern Class_Descriptor cd_S7681C4;
extern VTBL_ENTRY _ZTI7S7681C4[];
extern  VTBL_ENTRY _ZTV7S7681C4[];
extern Class_Descriptor cd_S7681C2;
extern VTBL_ENTRY _ZTI7S7681C2[];
extern  VTBL_ENTRY _ZTV7S7681C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7681C2[];
static Base_Class bases_S7681C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7681C3,    ABISELECT(240,140), //bcp->offset
    35, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S7681C3,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S7681C4,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S7681C2,    ABISELECT(16,4), //bcp->offset
    10, //bcp->virtual_function_table_offset
    14, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7681C6[];
extern void _ZN7S7681C6D1Ev();
extern void _ZN7S7681C6D0Ev();
extern void _ZN7S7681C63v19Ev();
extern void _ZN7S7681C63v20Ev();
extern void _ZN7S7681C63v21Ev();
extern void _ZN7S7681C63v22Ev();
extern void _ZN7S7681C32v8Ev();
extern void _ZN7S7681C32v9Ev();
extern void _ZN7S7681C33v10Ev();
extern void _ZN7S7681C33v11Ev();
extern void _ZN7S7681C43v12Ev();
extern void _ZN7S7681C43v13Ev();
extern void _ZN7S7681C43v14Ev();
extern void _ZN7S7681C23v15Ev();
extern void _ZN7S7681C23v16Ev();
extern void _ZN7S7681C23v17Ev();
extern void _ZN7S7681C23v18Ev();
extern void _ZN7S7681C32v8Ev();
extern void _ZN7S7681C32v9Ev();
extern void _ZN7S7681C33v10Ev();
extern void _ZN7S7681C33v11Ev();
static  VTBL_ENTRY vtc_S7681C6[] = {
  ABISELECT(240,140),
  ABISELECT(16,4),
  0,
  (VTBL_ENTRY)&(_ZTI7S7681C6[0]),
  (VTBL_ENTRY)&_ZN7S7681C6D1Ev,
  (VTBL_ENTRY)&_ZN7S7681C6D0Ev,
  (VTBL_ENTRY)&_ZN7S7681C63v19Ev,
  (VTBL_ENTRY)&_ZN7S7681C63v20Ev,
  (VTBL_ENTRY)&_ZN7S7681C63v21Ev,
  (VTBL_ENTRY)&_ZN7S7681C63v22Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(224,136),
  ABISELECT(-16,-4),
  (VTBL_ENTRY)&(_ZTI7S7681C6[0]),
  (VTBL_ENTRY)&_ZN7S7681C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7681C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v15Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v16Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v17Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v18Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-240,-140),
  (VTBL_ENTRY)&(_ZTI7S7681C6[0]),
  (VTBL_ENTRY)&_ZN7S7681C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7681C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v11Ev,
};
extern VTBL_ENTRY _ZTV7S7681C6[];
extern void _ZN7S7681C32v8Ev();
extern void _ZN7S7681C32v9Ev();
extern void _ZN7S7681C33v10Ev();
extern void _ZN7S7681C33v11Ev();
extern void _ZN7S7681C43v12Ev();
extern void _ZN7S7681C43v13Ev();
extern void _ZN7S7681C43v14Ev();
extern void _ZN7S7681C23v15Ev();
extern void _ZN7S7681C23v16Ev();
extern void _ZN7S7681C23v17Ev();
extern void _ZN7S7681C23v18Ev();
static  VTBL_ENTRY _tg__ZTV7S7681C2__7S7681C6[] = {
  ABISELECT(224,136),
  0,
  (VTBL_ENTRY)&(_ZTI7S7681C2[0]),
  (VTBL_ENTRY)&_ZN7S7681C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7681C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v15Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v16Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v17Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v18Ev,
};
extern void _ZN7S7681C32v8Ev();
extern void _ZN7S7681C32v9Ev();
extern void _ZN7S7681C33v10Ev();
extern void _ZN7S7681C33v11Ev();
static  VTBL_ENTRY _tg__ZTV7S7681C3__7S7681C2__7S7681C6[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-224,-136),
  (VTBL_ENTRY)&(_ZTI7S7681C2[0]),
  (VTBL_ENTRY)&_ZN7S7681C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7681C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v11Ev,
};
static  VTT_ENTRY vtt_S7681C6[] = {
  {&(_ZTV7S7681C6[4]),  4,45},
  {&(_ZTV7S7681C6[24]),  24,45},
  {&(_ZTV7S7681C6[41]),  41,45},
  {&(_tg__ZTV7S7681C2__7S7681C6[3]),  3,14},
  {&(_tg__ZTV7S7681C3__7S7681C2__7S7681C6[6]),  6,10},
};
extern VTBL_ENTRY _ZTI7S7681C6[];
extern  VTBL_ENTRY _ZTV7S7681C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7681C6[];
Class_Descriptor cd_S7681C6 = {  "S7681C6", // class name
  bases_S7681C6, 4,
  &(vtc_S7681C6[0]), // expected_vtbl_contents
  &(vtt_S7681C6[0]), // expected_vtt_contents
  ABISELECT(400,248), // object size
  NSPAIRA(_ZTI7S7681C6),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S7681C6),45, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7681C6),5, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7681C5  : S7681C6 {
  long double s7681c5f0;
  virtual void  v23(); // _ZN7S7681C53v23Ev
  virtual void  v24(); // _ZN7S7681C53v24Ev
  virtual void  v25(); // _ZN7S7681C53v25Ev
  virtual void  v26(); // _ZN7S7681C53v26Ev
  virtual void  v27(); // _ZN7S7681C53v27Ev
  virtual void  v28(); // _ZN7S7681C53v28Ev
  ~S7681C5(); // tgen
  S7681C5(); // tgen
};
//SIG(-1 S7681C5) C1{ BC2{ VBC3{ VBC4{ v7 v8 v9 v10 Fs:13 Fp FD[8]} BC5{ BC4 v11 v12 v13 Fp[6]} v14 v15 v16 v17 Fp} vd v18 v19 v20 v21} v1 v2 v3 v4 v5 v6 FD}


void  S7681C5 ::v23(){vfunc_called(this, "_ZN7S7681C53v23Ev");}
void  S7681C5 ::v24(){vfunc_called(this, "_ZN7S7681C53v24Ev");}
void  S7681C5 ::v25(){vfunc_called(this, "_ZN7S7681C53v25Ev");}
void  S7681C5 ::v26(){vfunc_called(this, "_ZN7S7681C53v26Ev");}
void  S7681C5 ::v27(){vfunc_called(this, "_ZN7S7681C53v27Ev");}
void  S7681C5 ::v28(){vfunc_called(this, "_ZN7S7681C53v28Ev");}
S7681C5 ::~S7681C5(){ note_dtor("S7681C5", this);} // tgen
S7681C5 ::S7681C5(){ note_ctor("S7681C5", this);} // tgen

static void Test_S7681C5()
{
  extern Class_Descriptor cd_S7681C5;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(27,66)];
    init_test(&cd_S7681C5, buf);
    S7681C5 *dp, &lv = *(dp=new (buf) S7681C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(416,260), "sizeof(S7681C5)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7681C5)");
    /*is_ambiguous_... S7681C2::S7681C3 */ AMB_check_base_class_offset(lv, (S7681C3*)(S7681C2*), ABISELECT(256,152), "S7681C5");
    check_base_class_offset(lv, (S7681C3*)(S7681C4*)(S7681C2*), ABISELECT(32,16), "S7681C5");
    check_base_class_offset(lv, (S7681C4*)(S7681C2*), ABISELECT(32,16), "S7681C5");
    check_base_class_offset(lv, (S7681C2*)(S7681C6*), ABISELECT(32,16), "S7681C5");
    check_base_class_offset(lv, (S7681C6*), 0, "S7681C5");
    check_field_offset(lv, s7681c5f0, ABISELECT(16,4), "S7681C5.s7681c5f0");
    test_class_info(&lv, &cd_S7681C5);
    dp->~S7681C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7681C5(Test_S7681C5, "S7681C5", ABISELECT(416,260));

#else // __cplusplus

extern void _ZN7S7681C5C1Ev();
extern void _ZN7S7681C5D1Ev();
Name_Map name_map_S7681C5[] = {
  NSPAIR(_ZN7S7681C5C1Ev),
  NSPAIR(_ZN7S7681C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7681C3;
extern VTBL_ENTRY _ZTI7S7681C3[];
extern  VTBL_ENTRY _ZTV7S7681C3[];
extern Class_Descriptor cd_S7681C3;
extern VTBL_ENTRY _ZTI7S7681C3[];
extern  VTBL_ENTRY _ZTV7S7681C3[];
extern Class_Descriptor cd_S7681C4;
extern VTBL_ENTRY _ZTI7S7681C4[];
extern  VTBL_ENTRY _ZTV7S7681C4[];
extern Class_Descriptor cd_S7681C2;
extern VTBL_ENTRY _ZTI7S7681C2[];
extern  VTBL_ENTRY _ZTV7S7681C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7681C2[];
extern Class_Descriptor cd_S7681C6;
extern VTBL_ENTRY _ZTI7S7681C6[];
extern  VTBL_ENTRY _ZTV7S7681C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7681C6[];
static Base_Class bases_S7681C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7681C3,    ABISELECT(256,152), //bcp->offset
    41, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S7681C3,    ABISELECT(32,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S7681C4,    ABISELECT(32,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S7681C2,    ABISELECT(32,16), //bcp->offset
    16, //bcp->virtual_function_table_offset
    14, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S7681C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7681C5[];
extern void _ZN7S7681C5D1Ev();
extern void _ZN7S7681C5D0Ev();
extern void _ZN7S7681C63v19Ev();
extern void _ZN7S7681C63v20Ev();
extern void _ZN7S7681C63v21Ev();
extern void _ZN7S7681C63v22Ev();
extern void _ZN7S7681C53v23Ev();
extern void _ZN7S7681C53v24Ev();
extern void _ZN7S7681C53v25Ev();
extern void _ZN7S7681C53v26Ev();
extern void _ZN7S7681C53v27Ev();
extern void _ZN7S7681C53v28Ev();
extern void _ZN7S7681C32v8Ev();
extern void _ZN7S7681C32v9Ev();
extern void _ZN7S7681C33v10Ev();
extern void _ZN7S7681C33v11Ev();
extern void _ZN7S7681C43v12Ev();
extern void _ZN7S7681C43v13Ev();
extern void _ZN7S7681C43v14Ev();
extern void _ZN7S7681C23v15Ev();
extern void _ZN7S7681C23v16Ev();
extern void _ZN7S7681C23v17Ev();
extern void _ZN7S7681C23v18Ev();
extern void _ZN7S7681C32v8Ev();
extern void _ZN7S7681C32v9Ev();
extern void _ZN7S7681C33v10Ev();
extern void _ZN7S7681C33v11Ev();
static  VTBL_ENTRY vtc_S7681C5[] = {
  ABISELECT(256,152),
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI7S7681C5[0]),
  (VTBL_ENTRY)&_ZN7S7681C5D1Ev,
  (VTBL_ENTRY)&_ZN7S7681C5D0Ev,
  (VTBL_ENTRY)&_ZN7S7681C63v19Ev,
  (VTBL_ENTRY)&_ZN7S7681C63v20Ev,
  (VTBL_ENTRY)&_ZN7S7681C63v21Ev,
  (VTBL_ENTRY)&_ZN7S7681C63v22Ev,
  (VTBL_ENTRY)&_ZN7S7681C53v23Ev,
  (VTBL_ENTRY)&_ZN7S7681C53v24Ev,
  (VTBL_ENTRY)&_ZN7S7681C53v25Ev,
  (VTBL_ENTRY)&_ZN7S7681C53v26Ev,
  (VTBL_ENTRY)&_ZN7S7681C53v27Ev,
  (VTBL_ENTRY)&_ZN7S7681C53v28Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(224,136),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI7S7681C5[0]),
  (VTBL_ENTRY)&_ZN7S7681C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7681C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v15Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v16Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v17Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v18Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-256,-152),
  (VTBL_ENTRY)&(_ZTI7S7681C5[0]),
  (VTBL_ENTRY)&_ZN7S7681C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7681C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v11Ev,
};
extern VTBL_ENTRY _ZTV7S7681C5[];
extern void _ZN7S7681C6D1Ev();
extern void _ZN7S7681C6D0Ev();
extern void _ZN7S7681C63v19Ev();
extern void _ZN7S7681C63v20Ev();
extern void _ZN7S7681C63v21Ev();
extern void _ZN7S7681C63v22Ev();
static  VTBL_ENTRY _tg__ZTV7S7681C6__7S7681C5[] = {
  ABISELECT(256,152),
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI7S7681C6[0]),
  (VTBL_ENTRY)&_ZN7S7681C6D1Ev,
  (VTBL_ENTRY)&_ZN7S7681C6D0Ev,
  (VTBL_ENTRY)&_ZN7S7681C63v19Ev,
  (VTBL_ENTRY)&_ZN7S7681C63v20Ev,
  (VTBL_ENTRY)&_ZN7S7681C63v21Ev,
  (VTBL_ENTRY)&_ZN7S7681C63v22Ev,
};
extern void _ZN7S7681C32v8Ev();
extern void _ZN7S7681C32v9Ev();
extern void _ZN7S7681C33v10Ev();
extern void _ZN7S7681C33v11Ev();
extern void _ZN7S7681C43v12Ev();
extern void _ZN7S7681C43v13Ev();
extern void _ZN7S7681C43v14Ev();
extern void _ZN7S7681C23v15Ev();
extern void _ZN7S7681C23v16Ev();
extern void _ZN7S7681C23v17Ev();
extern void _ZN7S7681C23v18Ev();
static  VTBL_ENTRY _tg__ZTV7S7681C2__7S7681C6__7S7681C5[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(224,136),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI7S7681C6[0]),
  (VTBL_ENTRY)&_ZN7S7681C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7681C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v15Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v16Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v17Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v18Ev,
};
extern void _ZN7S7681C32v8Ev();
extern void _ZN7S7681C32v9Ev();
extern void _ZN7S7681C33v10Ev();
extern void _ZN7S7681C33v11Ev();
static  VTBL_ENTRY _tg__ZTV7S7681C3__7S7681C6__7S7681C5[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-256,-152),
  (VTBL_ENTRY)&(_ZTI7S7681C6[0]),
  (VTBL_ENTRY)&_ZN7S7681C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7681C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v11Ev,
};
extern void _ZN7S7681C32v8Ev();
extern void _ZN7S7681C32v9Ev();
extern void _ZN7S7681C33v10Ev();
extern void _ZN7S7681C33v11Ev();
extern void _ZN7S7681C43v12Ev();
extern void _ZN7S7681C43v13Ev();
extern void _ZN7S7681C43v14Ev();
extern void _ZN7S7681C23v15Ev();
extern void _ZN7S7681C23v16Ev();
extern void _ZN7S7681C23v17Ev();
extern void _ZN7S7681C23v18Ev();
static  VTBL_ENTRY _tg__ZTV7S7681C2__7S7681C5[] = {
  ABISELECT(224,136),
  0,
  (VTBL_ENTRY)&(_ZTI7S7681C2[0]),
  (VTBL_ENTRY)&_ZN7S7681C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7681C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v15Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v16Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v17Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v18Ev,
};
extern void _ZN7S7681C32v8Ev();
extern void _ZN7S7681C32v9Ev();
extern void _ZN7S7681C33v10Ev();
extern void _ZN7S7681C33v11Ev();
static  VTBL_ENTRY _tg__ZTV7S7681C3__7S7681C2__7S7681C5[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-224,-136),
  (VTBL_ENTRY)&(_ZTI7S7681C2[0]),
  (VTBL_ENTRY)&_ZN7S7681C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7681C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v11Ev,
};
static  VTT_ENTRY vtt_S7681C5[] = {
  {&(_ZTV7S7681C5[4]),  4,51},
  {&(_tg__ZTV7S7681C6__7S7681C5[4]),  4,10},
  {&(_tg__ZTV7S7681C2__7S7681C6__7S7681C5[14]),  14,25},
  {&(_tg__ZTV7S7681C3__7S7681C6__7S7681C5[6]),  6,10},
  {&(_ZTV7S7681C5[30]),  30,51},
  {&(_ZTV7S7681C5[47]),  47,51},
  {&(_tg__ZTV7S7681C2__7S7681C5[3]),  3,14},
  {&(_tg__ZTV7S7681C3__7S7681C2__7S7681C5[6]),  6,10},
};
extern VTBL_ENTRY _ZTI7S7681C5[];
extern  VTBL_ENTRY _ZTV7S7681C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7681C5[];
Class_Descriptor cd_S7681C5 = {  "S7681C5", // class name
  bases_S7681C5, 5,
  &(vtc_S7681C5[0]), // expected_vtbl_contents
  &(vtt_S7681C5[0]), // expected_vtt_contents
  ABISELECT(416,260), // object size
  NSPAIRA(_ZTI7S7681C5),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S7681C5),51, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7681C5),8, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7681C8  {
  virtual void  v29(); // _ZN7S7681C83v29Ev
  virtual void  v30(); // _ZN7S7681C83v30Ev
  virtual void  v31(); // _ZN7S7681C83v31Ev
  virtual void  v32(); // _ZN7S7681C83v32Ev
  ~S7681C8(); // tgen
  S7681C8(); // tgen
};
//SIG(-1 S7681C8) C1{ v1 v2 v3 v4}


void  S7681C8 ::v29(){vfunc_called(this, "_ZN7S7681C83v29Ev");}
void  S7681C8 ::v30(){vfunc_called(this, "_ZN7S7681C83v30Ev");}
void  S7681C8 ::v31(){vfunc_called(this, "_ZN7S7681C83v31Ev");}
void  S7681C8 ::v32(){vfunc_called(this, "_ZN7S7681C83v32Ev");}
S7681C8 ::~S7681C8(){ note_dtor("S7681C8", this);} // tgen
S7681C8 ::S7681C8(){ note_ctor("S7681C8", this);} // tgen

static void Test_S7681C8()
{
  extern Class_Descriptor cd_S7681C8;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S7681C8, buf);
    S7681C8 *dp, &lv = *(dp=new (buf) S7681C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S7681C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7681C8)");
    test_class_info(&lv, &cd_S7681C8);
    dp->~S7681C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7681C8(Test_S7681C8, "S7681C8", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S7681C8C1Ev();
extern void _ZN7S7681C8D1Ev();
Name_Map name_map_S7681C8[] = {
  NSPAIR(_ZN7S7681C8C1Ev),
  NSPAIR(_ZN7S7681C8D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S7681C8[];
extern void _ZN7S7681C83v29Ev();
extern void _ZN7S7681C83v30Ev();
extern void _ZN7S7681C83v31Ev();
extern void _ZN7S7681C83v32Ev();
static  VTBL_ENTRY vtc_S7681C8[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7681C8[0]),
  (VTBL_ENTRY)&_ZN7S7681C83v29Ev,
  (VTBL_ENTRY)&_ZN7S7681C83v30Ev,
  (VTBL_ENTRY)&_ZN7S7681C83v31Ev,
  (VTBL_ENTRY)&_ZN7S7681C83v32Ev,
};
extern VTBL_ENTRY _ZTI7S7681C8[];
extern  VTBL_ENTRY _ZTV7S7681C8[];
Class_Descriptor cd_S7681C8 = {  "S7681C8", // class name
  0,0,//no base classes
  &(vtc_S7681C8[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S7681C8),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S7681C8),6, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7681C9  {
  ::S7681C4 s7681c9f0[7];
  virtual void  v33(); // _ZN7S7681C93v33Ev
  virtual void  v34(); // _ZN7S7681C93v34Ev
  virtual void  v35(); // _ZN7S7681C93v35Ev
  virtual void  v36(); // _ZN7S7681C93v36Ev
  virtual void  v37(); // _ZN7S7681C93v37Ev
  virtual void  v38(); // _ZN7S7681C93v38Ev
  virtual void  v39(); // _ZN7S7681C93v39Ev
  virtual void  v40(); // _ZN7S7681C93v40Ev
  virtual void  v41(); // _ZN7S7681C93v41Ev
  ~S7681C9(); // tgen
  S7681C9(); // tgen
};
//SIG(-1 S7681C9) C1{ v1 v2 v3 v4 v5 v6 v7 v8 v9 FC2{ BC3{ v13 v14 v15 v16 Fs:13 Fp FD[8]} v10 v11 v12 Fp[6]}[7]}


void  S7681C9 ::v33(){vfunc_called(this, "_ZN7S7681C93v33Ev");}
void  S7681C9 ::v34(){vfunc_called(this, "_ZN7S7681C93v34Ev");}
void  S7681C9 ::v35(){vfunc_called(this, "_ZN7S7681C93v35Ev");}
void  S7681C9 ::v36(){vfunc_called(this, "_ZN7S7681C93v36Ev");}
void  S7681C9 ::v37(){vfunc_called(this, "_ZN7S7681C93v37Ev");}
void  S7681C9 ::v38(){vfunc_called(this, "_ZN7S7681C93v38Ev");}
void  S7681C9 ::v39(){vfunc_called(this, "_ZN7S7681C93v39Ev");}
void  S7681C9 ::v40(){vfunc_called(this, "_ZN7S7681C93v40Ev");}
void  S7681C9 ::v41(){vfunc_called(this, "_ZN7S7681C93v41Ev");}
S7681C9 ::~S7681C9(){ note_dtor("S7681C9", this);} // tgen
S7681C9 ::S7681C9(){ note_ctor("S7681C9", this);} // tgen

static void Test_S7681C9()
{
  extern Class_Descriptor cd_S7681C9;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(93,233)];
    init_test(&cd_S7681C9, buf);
    S7681C9 *dp, &lv = *(dp=new (buf) S7681C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1472,928), "sizeof(S7681C9)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7681C9)");
    check_field_offset(lv, s7681c9f0, ABISELECT(16,4), "S7681C9.s7681c9f0");
    test_class_info(&lv, &cd_S7681C9);
    dp->~S7681C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7681C9(Test_S7681C9, "S7681C9", ABISELECT(1472,928));

#else // __cplusplus

extern void _ZN7S7681C9C1Ev();
extern void _ZN7S7681C9D1Ev();
Name_Map name_map_S7681C9[] = {
  NSPAIR(_ZN7S7681C9C1Ev),
  NSPAIR(_ZN7S7681C9D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S7681C9[];
extern void _ZN7S7681C93v33Ev();
extern void _ZN7S7681C93v34Ev();
extern void _ZN7S7681C93v35Ev();
extern void _ZN7S7681C93v36Ev();
extern void _ZN7S7681C93v37Ev();
extern void _ZN7S7681C93v38Ev();
extern void _ZN7S7681C93v39Ev();
extern void _ZN7S7681C93v40Ev();
extern void _ZN7S7681C93v41Ev();
static  VTBL_ENTRY vtc_S7681C9[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7681C9[0]),
  (VTBL_ENTRY)&_ZN7S7681C93v33Ev,
  (VTBL_ENTRY)&_ZN7S7681C93v34Ev,
  (VTBL_ENTRY)&_ZN7S7681C93v35Ev,
  (VTBL_ENTRY)&_ZN7S7681C93v36Ev,
  (VTBL_ENTRY)&_ZN7S7681C93v37Ev,
  (VTBL_ENTRY)&_ZN7S7681C93v38Ev,
  (VTBL_ENTRY)&_ZN7S7681C93v39Ev,
  (VTBL_ENTRY)&_ZN7S7681C93v40Ev,
  (VTBL_ENTRY)&_ZN7S7681C93v41Ev,
};
extern VTBL_ENTRY _ZTI7S7681C9[];
extern  VTBL_ENTRY _ZTV7S7681C9[];
Class_Descriptor cd_S7681C9 = {  "S7681C9", // class name
  0,0,//no base classes
  &(vtc_S7681C9[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(1472,928), // object size
  NSPAIRA(_ZTI7S7681C9),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S7681C9),11, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7681C13  : virtual S7681C3 , virtual S7681C4 {
  void *s7681c13f0[2];
  virtual void  v42(); // _ZN8S7681C133v42Ev
  virtual void  v43(); // _ZN8S7681C133v43Ev
  virtual void  v44(); // _ZN8S7681C133v44Ev
  virtual void  v45(); // _ZN8S7681C133v45Ev
  virtual void  v46(); // _ZN8S7681C133v46Ev
  ~S7681C13(); // tgen
  S7681C13(); // tgen
};
//SIG(-1 S7681C13) C1{ VBC2{ v6 v7 v8 v9 Fs:13 Fp FD[8]} VBC3{ BC2 v10 v11 v12 Fp[6]} v1 v2 v3 v4 v5 Fp[2]}


void  S7681C13 ::v42(){vfunc_called(this, "_ZN8S7681C133v42Ev");}
void  S7681C13 ::v43(){vfunc_called(this, "_ZN8S7681C133v43Ev");}
void  S7681C13 ::v44(){vfunc_called(this, "_ZN8S7681C133v44Ev");}
void  S7681C13 ::v45(){vfunc_called(this, "_ZN8S7681C133v45Ev");}
void  S7681C13 ::v46(){vfunc_called(this, "_ZN8S7681C133v46Ev");}
S7681C13 ::~S7681C13(){ note_dtor("S7681C13", this);} // tgen
S7681C13 ::S7681C13(){ note_ctor("S7681C13", this);} // tgen

static void Test_S7681C13()
{
  extern Class_Descriptor cd_S7681C13;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(26,64)];
    init_test(&cd_S7681C13, buf);
    S7681C13 *dp, &lv = *(dp=new (buf) S7681C13());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(400,252), "sizeof(S7681C13)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7681C13)");
    /*is_ambiguous_... S7681C13::S7681C3 */ AMB_check_base_class_offset(lv, (S7681C3*), ABISELECT(32,12), "S7681C13");
    check_base_class_offset(lv, (S7681C3*)(S7681C4*), ABISELECT(192,120), "S7681C13");
    check_base_class_offset(lv, (S7681C4*), ABISELECT(192,120), "S7681C13");
    check_field_offset(lv, s7681c13f0, ABISELECT(8,4), "S7681C13.s7681c13f0");
    test_class_info(&lv, &cd_S7681C13);
    dp->~S7681C13();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7681C13(Test_S7681C13, "S7681C13", ABISELECT(400,252));

#else // __cplusplus

extern void _ZN8S7681C13C1Ev();
extern void _ZN8S7681C13D1Ev();
Name_Map name_map_S7681C13[] = {
  NSPAIR(_ZN8S7681C13C1Ev),
  NSPAIR(_ZN8S7681C13D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7681C3;
extern VTBL_ENTRY _ZTI7S7681C3[];
extern  VTBL_ENTRY _ZTV7S7681C3[];
extern Class_Descriptor cd_S7681C3;
extern VTBL_ENTRY _ZTI7S7681C3[];
extern  VTBL_ENTRY _ZTV7S7681C3[];
extern Class_Descriptor cd_S7681C4;
extern VTBL_ENTRY _ZTI7S7681C4[];
extern  VTBL_ENTRY _ZTV7S7681C4[];
static Base_Class bases_S7681C13[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7681C3,    ABISELECT(32,12), //bcp->offset
    9, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7681C3,    ABISELECT(192,120), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S7681C4,    ABISELECT(192,120), //bcp->offset
    19, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S7681C13[];
extern void _ZN8S7681C133v42Ev();
extern void _ZN8S7681C133v43Ev();
extern void _ZN8S7681C133v44Ev();
extern void _ZN8S7681C133v45Ev();
extern void _ZN8S7681C133v46Ev();
extern void _ZN7S7681C32v8Ev();
extern void _ZN7S7681C32v9Ev();
extern void _ZN7S7681C33v10Ev();
extern void _ZN7S7681C33v11Ev();
extern void _ZN7S7681C32v8Ev();
extern void _ZN7S7681C32v9Ev();
extern void _ZN7S7681C33v10Ev();
extern void _ZN7S7681C33v11Ev();
extern void _ZN7S7681C43v12Ev();
extern void _ZN7S7681C43v13Ev();
extern void _ZN7S7681C43v14Ev();
static  VTBL_ENTRY vtc_S7681C13[] = {
  ABISELECT(192,120),
  ABISELECT(32,12),
  0,
  (VTBL_ENTRY)&(_ZTI8S7681C13[0]),
  (VTBL_ENTRY)&_ZN8S7681C133v42Ev,
  (VTBL_ENTRY)&_ZN8S7681C133v43Ev,
  (VTBL_ENTRY)&_ZN8S7681C133v44Ev,
  (VTBL_ENTRY)&_ZN8S7681C133v45Ev,
  (VTBL_ENTRY)&_ZN8S7681C133v46Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-32,-12),
  (VTBL_ENTRY)&(_ZTI8S7681C13[0]),
  (VTBL_ENTRY)&_ZN7S7681C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7681C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v11Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-192,-120),
  (VTBL_ENTRY)&(_ZTI8S7681C13[0]),
  (VTBL_ENTRY)&_ZN7S7681C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7681C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v14Ev,
};
extern VTBL_ENTRY _ZTV8S7681C13[];
static  VTT_ENTRY vtt_S7681C13[] = {
  {&(_ZTV8S7681C13[4]),  4,35},
  {&(_ZTV8S7681C13[15]),  15,35},
  {&(_ZTV8S7681C13[28]),  28,35},
};
extern VTBL_ENTRY _ZTI8S7681C13[];
extern  VTBL_ENTRY _ZTV8S7681C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7681C13[];
Class_Descriptor cd_S7681C13 = {  "S7681C13", // class name
  bases_S7681C13, 3,
  &(vtc_S7681C13[0]), // expected_vtbl_contents
  &(vtt_S7681C13[0]), // expected_vtt_contents
  ABISELECT(400,252), // object size
  NSPAIRA(_ZTI8S7681C13),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S7681C13),35, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7681C13),3, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7681C12  : virtual S7681C13 , S7681C2 {
  __tsi64 s7681c12f0[5];
  ::S20956C14_nt s7681c12f1;
  long double s7681c12f2;
  virtual void  v47(); // _ZN8S7681C123v47Ev
  virtual void  v48(); // _ZN8S7681C123v48Ev
  virtual void  v49(); // _ZN8S7681C123v49Ev
  virtual void  v50(); // _ZN8S7681C123v50Ev
  ~S7681C12(); // tgen
  S7681C12(); // tgen
};
//SIG(-1 S7681C12) C1{ VBC2{ VBC3{ v5 v6 v7 v8 Fs:13 Fp FD[8]} VBC4{ BC3 v9 v10 v11 Fp[6]} v12 v13 v14 v15 v16 Fp[2]} BC5{ VBC3 BC4 v17 v18 v19 v20 Fp} v1 v2 v3 v4 FL[5] FC6{} FD}


void  S7681C12 ::v47(){vfunc_called(this, "_ZN8S7681C123v47Ev");}
void  S7681C12 ::v48(){vfunc_called(this, "_ZN8S7681C123v48Ev");}
void  S7681C12 ::v49(){vfunc_called(this, "_ZN8S7681C123v49Ev");}
void  S7681C12 ::v50(){vfunc_called(this, "_ZN8S7681C123v50Ev");}
S7681C12 ::~S7681C12(){ note_dtor("S7681C12", this);} // tgen
S7681C12 ::S7681C12(){ note_ctor("S7681C12", this);} // tgen

static void Test_S7681C12()
{
  extern Class_Descriptor cd_S7681C12;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(44,112)];
    init_test(&cd_S7681C12, buf);
    S7681C12 *dp, &lv = *(dp=new (buf) S7681C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(688,444), "sizeof(S7681C12)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7681C12)");
    /*is_ambiguous_... S7681C13::S7681C3 */ AMB_check_base_class_offset(lv, (S7681C3*)(S7681C13*), ABISELECT(320,204), "S7681C12");
    /*is_ambiguous_... S7681C2::S7681C3 */ AMB_check_base_class_offset(lv, (S7681C3*)(S7681C2*), ABISELECT(320,204), "S7681C12");
    /*is_ambiguous_... S7681C12::S7681C4 */ AMB_check_base_class_offset(lv, (S7681C3*)(S7681C4*), ABISELECT(480,312), "S7681C12");
    check_base_class_offset(lv, (S7681C4*)(S7681C13*), ABISELECT(480,312), "S7681C12");
    check_base_class_offset(lv, (S7681C13*), ABISELECT(288,192), "S7681C12");
    check_base_class_offset(lv, (S7681C3*)(S7681C4*)(S7681C2*), 0, "S7681C12");
    check_base_class_offset(lv, (S7681C4*)(S7681C2*), 0, "S7681C12");
    check_base_class_offset(lv, (S7681C2*), 0, "S7681C12");
    check_field_offset(lv, s7681c12f0, ABISELECT(216,136), "S7681C12.s7681c12f0");
    check_field_offset(lv, s7681c12f1, ABISELECT(256,176), "S7681C12.s7681c12f1");
    check_field_offset(lv, s7681c12f2, ABISELECT(272,180), "S7681C12.s7681c12f2");
    test_class_info(&lv, &cd_S7681C12);
    dp->~S7681C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7681C12(Test_S7681C12, "S7681C12", ABISELECT(688,444));

#else // __cplusplus

extern void _ZN8S7681C12C1Ev();
extern void _ZN8S7681C12D1Ev();
Name_Map name_map_S7681C12[] = {
  NSPAIR(_ZN8S7681C12C1Ev),
  NSPAIR(_ZN8S7681C12D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7681C3;
extern VTBL_ENTRY _ZTI7S7681C3[];
extern  VTBL_ENTRY _ZTV7S7681C3[];
extern Class_Descriptor cd_S7681C3;
extern VTBL_ENTRY _ZTI7S7681C3[];
extern  VTBL_ENTRY _ZTV7S7681C3[];
extern Class_Descriptor cd_S7681C4;
extern VTBL_ENTRY _ZTI7S7681C4[];
extern  VTBL_ENTRY _ZTV7S7681C4[];
extern Class_Descriptor cd_S7681C13;
extern VTBL_ENTRY _ZTI8S7681C13[];
extern  VTBL_ENTRY _ZTV8S7681C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7681C13[];
extern Class_Descriptor cd_S7681C3;
extern VTBL_ENTRY _ZTI7S7681C3[];
extern  VTBL_ENTRY _ZTV7S7681C3[];
extern Class_Descriptor cd_S7681C4;
extern VTBL_ENTRY _ZTI7S7681C4[];
extern  VTBL_ENTRY _ZTV7S7681C4[];
extern Class_Descriptor cd_S7681C2;
extern VTBL_ENTRY _ZTI7S7681C2[];
extern  VTBL_ENTRY _ZTV7S7681C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7681C2[];
static Base_Class bases_S7681C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7681C3,    ABISELECT(320,204), //bcp->offset
    34, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S7681C3,    ABISELECT(480,312), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S7681C4,    ABISELECT(480,312), //bcp->offset
    44, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S7681C13,    ABISELECT(288,192), //bcp->offset
    20, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7681C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S7681C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S7681C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S7681C12[];
extern void _ZN7S7681C32v8Ev();
extern void _ZN7S7681C32v9Ev();
extern void _ZN7S7681C33v10Ev();
extern void _ZN7S7681C33v11Ev();
extern void _ZN7S7681C43v12Ev();
extern void _ZN7S7681C43v13Ev();
extern void _ZN7S7681C43v14Ev();
extern void _ZN7S7681C23v15Ev();
extern void _ZN7S7681C23v16Ev();
extern void _ZN7S7681C23v17Ev();
extern void _ZN7S7681C23v18Ev();
extern void _ZN8S7681C123v47Ev();
extern void _ZN8S7681C123v48Ev();
extern void _ZN8S7681C123v49Ev();
extern void _ZN8S7681C123v50Ev();
extern void _ZN8S7681C133v42Ev();
extern void _ZN8S7681C133v43Ev();
extern void _ZN8S7681C133v44Ev();
extern void _ZN8S7681C133v45Ev();
extern void _ZN8S7681C133v46Ev();
extern void _ZN7S7681C32v8Ev();
extern void _ZN7S7681C32v9Ev();
extern void _ZN7S7681C33v10Ev();
extern void _ZN7S7681C33v11Ev();
extern void _ZN7S7681C32v8Ev();
extern void _ZN7S7681C32v9Ev();
extern void _ZN7S7681C33v10Ev();
extern void _ZN7S7681C33v11Ev();
extern void _ZN7S7681C43v12Ev();
extern void _ZN7S7681C43v13Ev();
extern void _ZN7S7681C43v14Ev();
static  VTBL_ENTRY vtc_S7681C12[] = {
  ABISELECT(480,312),
  ABISELECT(288,192),
  ABISELECT(320,204),
  0,
  (VTBL_ENTRY)&(_ZTI8S7681C12[0]),
  (VTBL_ENTRY)&_ZN7S7681C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7681C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v15Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v16Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v17Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v18Ev,
  (VTBL_ENTRY)&_ZN8S7681C123v47Ev,
  (VTBL_ENTRY)&_ZN8S7681C123v48Ev,
  (VTBL_ENTRY)&_ZN8S7681C123v49Ev,
  (VTBL_ENTRY)&_ZN8S7681C123v50Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(192,120),
  ABISELECT(32,12),
  ABISELECT(-288,-192),
  (VTBL_ENTRY)&(_ZTI8S7681C12[0]),
  (VTBL_ENTRY)&_ZN8S7681C133v42Ev,
  (VTBL_ENTRY)&_ZN8S7681C133v43Ev,
  (VTBL_ENTRY)&_ZN8S7681C133v44Ev,
  (VTBL_ENTRY)&_ZN8S7681C133v45Ev,
  (VTBL_ENTRY)&_ZN8S7681C133v46Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-320,-204),
  (VTBL_ENTRY)&(_ZTI8S7681C12[0]),
  (VTBL_ENTRY)&_ZN7S7681C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7681C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v11Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-480,-312),
  (VTBL_ENTRY)&(_ZTI8S7681C12[0]),
  (VTBL_ENTRY)&_ZN7S7681C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7681C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v14Ev,
};
extern VTBL_ENTRY _ZTV8S7681C12[];
extern void _ZN7S7681C32v8Ev();
extern void _ZN7S7681C32v9Ev();
extern void _ZN7S7681C33v10Ev();
extern void _ZN7S7681C33v11Ev();
extern void _ZN7S7681C43v12Ev();
extern void _ZN7S7681C43v13Ev();
extern void _ZN7S7681C43v14Ev();
extern void _ZN7S7681C23v15Ev();
extern void _ZN7S7681C23v16Ev();
extern void _ZN7S7681C23v17Ev();
extern void _ZN7S7681C23v18Ev();
static  VTBL_ENTRY _tg__ZTV7S7681C2__8S7681C12[] = {
  ABISELECT(320,204),
  0,
  (VTBL_ENTRY)&(_ZTI7S7681C2[0]),
  (VTBL_ENTRY)&_ZN7S7681C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7681C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v15Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v16Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v17Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v18Ev,
};
extern void _ZN7S7681C32v8Ev();
extern void _ZN7S7681C32v9Ev();
extern void _ZN7S7681C33v10Ev();
extern void _ZN7S7681C33v11Ev();
static  VTBL_ENTRY _tg__ZTV7S7681C3__7S7681C2__8S7681C12[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-320,-204),
  (VTBL_ENTRY)&(_ZTI7S7681C2[0]),
  (VTBL_ENTRY)&_ZN7S7681C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7681C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v11Ev,
};
extern void _ZN8S7681C133v42Ev();
extern void _ZN8S7681C133v43Ev();
extern void _ZN8S7681C133v44Ev();
extern void _ZN8S7681C133v45Ev();
extern void _ZN8S7681C133v46Ev();
static  VTBL_ENTRY _tg__ZTV8S7681C13__8S7681C12[] = {
  ABISELECT(192,120),
  ABISELECT(32,12),
  0,
  (VTBL_ENTRY)&(_ZTI8S7681C13[0]),
  (VTBL_ENTRY)&_ZN8S7681C133v42Ev,
  (VTBL_ENTRY)&_ZN8S7681C133v43Ev,
  (VTBL_ENTRY)&_ZN8S7681C133v44Ev,
  (VTBL_ENTRY)&_ZN8S7681C133v45Ev,
  (VTBL_ENTRY)&_ZN8S7681C133v46Ev,
};
extern void _ZN7S7681C32v8Ev();
extern void _ZN7S7681C32v9Ev();
extern void _ZN7S7681C33v10Ev();
extern void _ZN7S7681C33v11Ev();
static  VTBL_ENTRY _tg__ZTV7S7681C3__8S7681C13__8S7681C12[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-32,-12),
  (VTBL_ENTRY)&(_ZTI8S7681C13[0]),
  (VTBL_ENTRY)&_ZN7S7681C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7681C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v11Ev,
};
extern void _ZN7S7681C32v8Ev();
extern void _ZN7S7681C32v9Ev();
extern void _ZN7S7681C33v10Ev();
extern void _ZN7S7681C33v11Ev();
extern void _ZN7S7681C43v12Ev();
extern void _ZN7S7681C43v13Ev();
extern void _ZN7S7681C43v14Ev();
static  VTBL_ENTRY _tg__ZTV7S7681C4__8S7681C13__8S7681C12[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-192,-120),
  (VTBL_ENTRY)&(_ZTI8S7681C13[0]),
  (VTBL_ENTRY)&_ZN7S7681C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7681C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v14Ev,
};
static  VTT_ENTRY vtt_S7681C12[] = {
  {&(_ZTV8S7681C12[5]),  5,60},
  {&(_tg__ZTV7S7681C2__8S7681C12[3]),  3,14},
  {&(_tg__ZTV7S7681C3__7S7681C2__8S7681C12[6]),  6,10},
  {&(_ZTV8S7681C12[29]),  29,60},
  {&(_ZTV8S7681C12[40]),  40,60},
  {&(_ZTV8S7681C12[53]),  53,60},
  {&(_tg__ZTV8S7681C13__8S7681C12[4]),  4,9},
  {&(_tg__ZTV7S7681C3__8S7681C13__8S7681C12[6]),  6,10},
  {&(_tg__ZTV7S7681C4__8S7681C13__8S7681C12[9]),  9,16},
};
extern VTBL_ENTRY _ZTI8S7681C12[];
extern  VTBL_ENTRY _ZTV8S7681C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7681C12[];
Class_Descriptor cd_S7681C12 = {  "S7681C12", // class name
  bases_S7681C12, 7,
  &(vtc_S7681C12[0]), // expected_vtbl_contents
  &(vtt_S7681C12[0]), // expected_vtt_contents
  ABISELECT(688,444), // object size
  NSPAIRA(_ZTI8S7681C12),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S7681C12),60, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7681C12),9, //virtual table table var
  7, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7681C11  : virtual S7681C12 {
  virtual  ~S7681C11(); // _ZN8S7681C11D2Ev
  virtual void  v51(); // _ZN8S7681C113v51Ev
  virtual void  v52(); // _ZN8S7681C113v52Ev
  S7681C11(); // tgen
};
//SIG(-1 S7681C11) C1{ VBC2{ VBC3{ VBC4{ v3 v4 v5 v6 Fs:13 Fp FD[8]} VBC5{ BC4 v7 v8 v9 Fp[6]} v10 v11 v12 v13 v14 Fp[2]} BC6{ VBC4 BC5 v15 v16 v17 v18 Fp} v19 v20 v21 v22 FL[5] FC7{} FD} vd v1 v2}


 S7681C11 ::~S7681C11(){ note_dtor("S7681C11", this);}
void  S7681C11 ::v51(){vfunc_called(this, "_ZN8S7681C113v51Ev");}
void  S7681C11 ::v52(){vfunc_called(this, "_ZN8S7681C113v52Ev");}
S7681C11 ::S7681C11(){ note_ctor("S7681C11", this);} // tgen

static void Test_S7681C11()
{
  extern Class_Descriptor cd_S7681C11;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(45,113)];
    init_test(&cd_S7681C11, buf);
    S7681C11 *dp, &lv = *(dp=new (buf) S7681C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(704,448), "sizeof(S7681C11)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7681C11)");
    /*is_ambiguous_... S7681C13::S7681C3 */ AMB_check_base_class_offset(lv, (S7681C3*)(S7681C13*), ABISELECT(336,208), "S7681C11");
    /*is_ambiguous_... S7681C2::S7681C3 */ AMB_check_base_class_offset(lv, (S7681C3*)(S7681C2*)(S7681C12*), ABISELECT(336,208), "S7681C11");
    /*is_ambiguous_... S7681C11::S7681C4 */ AMB_check_base_class_offset(lv, (S7681C3*)(S7681C4*), ABISELECT(496,316), "S7681C11");
    check_base_class_offset(lv, (S7681C4*)(S7681C13*), ABISELECT(496,316), "S7681C11");
    check_base_class_offset(lv, (S7681C13*)(S7681C12*), ABISELECT(304,196), "S7681C11");
    check_base_class_offset(lv, (S7681C3*)(S7681C4*)(S7681C2*)(S7681C12*), ABISELECT(16,4), "S7681C11");
    check_base_class_offset(lv, (S7681C4*)(S7681C2*)(S7681C12*), ABISELECT(16,4), "S7681C11");
    check_base_class_offset(lv, (S7681C2*)(S7681C12*), ABISELECT(16,4), "S7681C11");
    check_base_class_offset(lv, (S7681C12*), ABISELECT(16,4), "S7681C11");
    test_class_info(&lv, &cd_S7681C11);
    dp->~S7681C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7681C11(Test_S7681C11, "S7681C11", ABISELECT(704,448));

#else // __cplusplus

extern void _ZN8S7681C11C1Ev();
extern void _ZN8S7681C11D2Ev();
Name_Map name_map_S7681C11[] = {
  NSPAIR(_ZN8S7681C11C1Ev),
  NSPAIR(_ZN8S7681C11D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7681C3;
extern VTBL_ENTRY _ZTI7S7681C3[];
extern  VTBL_ENTRY _ZTV7S7681C3[];
extern Class_Descriptor cd_S7681C3;
extern VTBL_ENTRY _ZTI7S7681C3[];
extern  VTBL_ENTRY _ZTV7S7681C3[];
extern Class_Descriptor cd_S7681C4;
extern VTBL_ENTRY _ZTI7S7681C4[];
extern  VTBL_ENTRY _ZTV7S7681C4[];
extern Class_Descriptor cd_S7681C13;
extern VTBL_ENTRY _ZTI8S7681C13[];
extern  VTBL_ENTRY _ZTV8S7681C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7681C13[];
extern Class_Descriptor cd_S7681C3;
extern VTBL_ENTRY _ZTI7S7681C3[];
extern  VTBL_ENTRY _ZTV7S7681C3[];
extern Class_Descriptor cd_S7681C4;
extern VTBL_ENTRY _ZTI7S7681C4[];
extern  VTBL_ENTRY _ZTV7S7681C4[];
extern Class_Descriptor cd_S7681C2;
extern VTBL_ENTRY _ZTI7S7681C2[];
extern  VTBL_ENTRY _ZTV7S7681C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7681C2[];
extern Class_Descriptor cd_S7681C12;
extern VTBL_ENTRY _ZTI8S7681C12[];
extern  VTBL_ENTRY _ZTV8S7681C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7681C12[];
static Base_Class bases_S7681C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7681C3,    ABISELECT(336,208), //bcp->offset
    59, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S7681C3,    ABISELECT(496,316), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S7681C4,    ABISELECT(496,316), //bcp->offset
    69, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S7681C13,    ABISELECT(304,196), //bcp->offset
    45, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S7681C3,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S7681C4,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S7681C2,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S7681C12,    ABISELECT(16,4), //bcp->offset
    10, //bcp->virtual_function_table_offset
    20, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S7681C11[];
extern void _ZN8S7681C11D1Ev();
extern void _ZN8S7681C11D0Ev();
extern void _ZN8S7681C113v51Ev();
extern void _ZN8S7681C113v52Ev();
extern void _ZN7S7681C32v8Ev();
extern void _ZN7S7681C32v9Ev();
extern void _ZN7S7681C33v10Ev();
extern void _ZN7S7681C33v11Ev();
extern void _ZN7S7681C43v12Ev();
extern void _ZN7S7681C43v13Ev();
extern void _ZN7S7681C43v14Ev();
extern void _ZN7S7681C23v15Ev();
extern void _ZN7S7681C23v16Ev();
extern void _ZN7S7681C23v17Ev();
extern void _ZN7S7681C23v18Ev();
extern void _ZN8S7681C123v47Ev();
extern void _ZN8S7681C123v48Ev();
extern void _ZN8S7681C123v49Ev();
extern void _ZN8S7681C123v50Ev();
extern void _ZN8S7681C133v42Ev();
extern void _ZN8S7681C133v43Ev();
extern void _ZN8S7681C133v44Ev();
extern void _ZN8S7681C133v45Ev();
extern void _ZN8S7681C133v46Ev();
extern void _ZN7S7681C32v8Ev();
extern void _ZN7S7681C32v9Ev();
extern void _ZN7S7681C33v10Ev();
extern void _ZN7S7681C33v11Ev();
extern void _ZN7S7681C32v8Ev();
extern void _ZN7S7681C32v9Ev();
extern void _ZN7S7681C33v10Ev();
extern void _ZN7S7681C33v11Ev();
extern void _ZN7S7681C43v12Ev();
extern void _ZN7S7681C43v13Ev();
extern void _ZN7S7681C43v14Ev();
static  VTBL_ENTRY vtc_S7681C11[] = {
  ABISELECT(496,316),
  ABISELECT(336,208),
  ABISELECT(304,196),
  ABISELECT(16,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S7681C11[0]),
  (VTBL_ENTRY)&_ZN8S7681C11D1Ev,
  (VTBL_ENTRY)&_ZN8S7681C11D0Ev,
  (VTBL_ENTRY)&_ZN8S7681C113v51Ev,
  (VTBL_ENTRY)&_ZN8S7681C113v52Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(480,312),
  ABISELECT(288,192),
  ABISELECT(320,204),
  ABISELECT(-16,-4),
  (VTBL_ENTRY)&(_ZTI8S7681C11[0]),
  (VTBL_ENTRY)&_ZN7S7681C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7681C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v15Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v16Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v17Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v18Ev,
  (VTBL_ENTRY)&_ZN8S7681C123v47Ev,
  (VTBL_ENTRY)&_ZN8S7681C123v48Ev,
  (VTBL_ENTRY)&_ZN8S7681C123v49Ev,
  (VTBL_ENTRY)&_ZN8S7681C123v50Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(192,120),
  ABISELECT(32,12),
  ABISELECT(-304,-196),
  (VTBL_ENTRY)&(_ZTI8S7681C11[0]),
  (VTBL_ENTRY)&_ZN8S7681C133v42Ev,
  (VTBL_ENTRY)&_ZN8S7681C133v43Ev,
  (VTBL_ENTRY)&_ZN8S7681C133v44Ev,
  (VTBL_ENTRY)&_ZN8S7681C133v45Ev,
  (VTBL_ENTRY)&_ZN8S7681C133v46Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-336,-208),
  (VTBL_ENTRY)&(_ZTI8S7681C11[0]),
  (VTBL_ENTRY)&_ZN7S7681C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7681C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v11Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-496,-316),
  (VTBL_ENTRY)&(_ZTI8S7681C11[0]),
  (VTBL_ENTRY)&_ZN7S7681C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7681C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v14Ev,
};
extern VTBL_ENTRY _ZTV8S7681C11[];
extern void _ZN7S7681C32v8Ev();
extern void _ZN7S7681C32v9Ev();
extern void _ZN7S7681C33v10Ev();
extern void _ZN7S7681C33v11Ev();
extern void _ZN7S7681C43v12Ev();
extern void _ZN7S7681C43v13Ev();
extern void _ZN7S7681C43v14Ev();
extern void _ZN7S7681C23v15Ev();
extern void _ZN7S7681C23v16Ev();
extern void _ZN7S7681C23v17Ev();
extern void _ZN7S7681C23v18Ev();
extern void _ZN8S7681C123v47Ev();
extern void _ZN8S7681C123v48Ev();
extern void _ZN8S7681C123v49Ev();
extern void _ZN8S7681C123v50Ev();
static  VTBL_ENTRY _tg__ZTV8S7681C12__8S7681C11[] = {
  ABISELECT(480,312),
  ABISELECT(288,192),
  ABISELECT(320,204),
  0,
  (VTBL_ENTRY)&(_ZTI8S7681C12[0]),
  (VTBL_ENTRY)&_ZN7S7681C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7681C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v15Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v16Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v17Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v18Ev,
  (VTBL_ENTRY)&_ZN8S7681C123v47Ev,
  (VTBL_ENTRY)&_ZN8S7681C123v48Ev,
  (VTBL_ENTRY)&_ZN8S7681C123v49Ev,
  (VTBL_ENTRY)&_ZN8S7681C123v50Ev,
};
extern void _ZN7S7681C32v8Ev();
extern void _ZN7S7681C32v9Ev();
extern void _ZN7S7681C33v10Ev();
extern void _ZN7S7681C33v11Ev();
extern void _ZN7S7681C43v12Ev();
extern void _ZN7S7681C43v13Ev();
extern void _ZN7S7681C43v14Ev();
extern void _ZN7S7681C23v15Ev();
extern void _ZN7S7681C23v16Ev();
extern void _ZN7S7681C23v17Ev();
extern void _ZN7S7681C23v18Ev();
static  VTBL_ENTRY _tg__ZTV7S7681C28S7681C12__8S7681C11[] = {
  ABISELECT(320,204),
  0,
  (VTBL_ENTRY)&(_ZTI7S7681C2[0]),
  (VTBL_ENTRY)&_ZN7S7681C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7681C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v15Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v16Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v17Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v18Ev,
};
extern void _ZN7S7681C32v8Ev();
extern void _ZN7S7681C32v9Ev();
extern void _ZN7S7681C33v10Ev();
extern void _ZN7S7681C33v11Ev();
static  VTBL_ENTRY _tg__ZTV7S7681C3__7S7681C28S7681C12__8S7681C11[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-320,-204),
  (VTBL_ENTRY)&(_ZTI7S7681C2[0]),
  (VTBL_ENTRY)&_ZN7S7681C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7681C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v11Ev,
};
extern void _ZN8S7681C133v42Ev();
extern void _ZN8S7681C133v43Ev();
extern void _ZN8S7681C133v44Ev();
extern void _ZN8S7681C133v45Ev();
extern void _ZN8S7681C133v46Ev();
static  VTBL_ENTRY _tg__ZTV8S7681C13__8S7681C12__8S7681C11[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(192,120),
  ABISELECT(32,12),
  ABISELECT(-288,-192),
  (VTBL_ENTRY)&(_ZTI8S7681C12[0]),
  (VTBL_ENTRY)&_ZN8S7681C133v42Ev,
  (VTBL_ENTRY)&_ZN8S7681C133v43Ev,
  (VTBL_ENTRY)&_ZN8S7681C133v44Ev,
  (VTBL_ENTRY)&_ZN8S7681C133v45Ev,
  (VTBL_ENTRY)&_ZN8S7681C133v46Ev,
};
extern void _ZN7S7681C32v8Ev();
extern void _ZN7S7681C32v9Ev();
extern void _ZN7S7681C33v10Ev();
extern void _ZN7S7681C33v11Ev();
static  VTBL_ENTRY _tg__ZTV7S7681C3__8S7681C12__8S7681C11[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-320,-204),
  (VTBL_ENTRY)&(_ZTI8S7681C12[0]),
  (VTBL_ENTRY)&_ZN7S7681C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7681C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v11Ev,
};
extern void _ZN7S7681C32v8Ev();
extern void _ZN7S7681C32v9Ev();
extern void _ZN7S7681C33v10Ev();
extern void _ZN7S7681C33v11Ev();
extern void _ZN7S7681C43v12Ev();
extern void _ZN7S7681C43v13Ev();
extern void _ZN7S7681C43v14Ev();
static  VTBL_ENTRY _tg__ZTV7S7681C4__8S7681C12__8S7681C11[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-480,-312),
  (VTBL_ENTRY)&(_ZTI8S7681C12[0]),
  (VTBL_ENTRY)&_ZN7S7681C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7681C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v14Ev,
};
extern void _ZN8S7681C133v42Ev();
extern void _ZN8S7681C133v43Ev();
extern void _ZN8S7681C133v44Ev();
extern void _ZN8S7681C133v45Ev();
extern void _ZN8S7681C133v46Ev();
static  VTBL_ENTRY _tg__ZTV8S7681C13__8S7681C11[] = {
  ABISELECT(192,120),
  ABISELECT(32,12),
  0,
  (VTBL_ENTRY)&(_ZTI8S7681C13[0]),
  (VTBL_ENTRY)&_ZN8S7681C133v42Ev,
  (VTBL_ENTRY)&_ZN8S7681C133v43Ev,
  (VTBL_ENTRY)&_ZN8S7681C133v44Ev,
  (VTBL_ENTRY)&_ZN8S7681C133v45Ev,
  (VTBL_ENTRY)&_ZN8S7681C133v46Ev,
};
extern void _ZN7S7681C32v8Ev();
extern void _ZN7S7681C32v9Ev();
extern void _ZN7S7681C33v10Ev();
extern void _ZN7S7681C33v11Ev();
static  VTBL_ENTRY _tg__ZTV7S7681C3__8S7681C13__8S7681C11[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-32,-12),
  (VTBL_ENTRY)&(_ZTI8S7681C13[0]),
  (VTBL_ENTRY)&_ZN7S7681C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7681C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v11Ev,
};
extern void _ZN7S7681C32v8Ev();
extern void _ZN7S7681C32v9Ev();
extern void _ZN7S7681C33v10Ev();
extern void _ZN7S7681C33v11Ev();
extern void _ZN7S7681C43v12Ev();
extern void _ZN7S7681C43v13Ev();
extern void _ZN7S7681C43v14Ev();
static  VTBL_ENTRY _tg__ZTV7S7681C4__8S7681C13__8S7681C11[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-192,-120),
  (VTBL_ENTRY)&(_ZTI8S7681C13[0]),
  (VTBL_ENTRY)&_ZN7S7681C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7681C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v14Ev,
};
static  VTT_ENTRY vtt_S7681C11[] = {
  {&(_ZTV8S7681C11[6]),  6,85},
  {&(_ZTV8S7681C11[30]),  30,85},
  {&(_ZTV8S7681C11[54]),  54,85},
  {&(_ZTV8S7681C11[65]),  65,85},
  {&(_ZTV8S7681C11[78]),  78,85},
  {&(_tg__ZTV8S7681C12__8S7681C11[5]),  5,20},
  {&(_tg__ZTV7S7681C28S7681C12__8S7681C11[3]),  3,14},
  {&(_tg__ZTV7S7681C3__7S7681C28S7681C12__8S7681C11[6]),  6,10},
  {&(_tg__ZTV8S7681C13__8S7681C12__8S7681C11[9]),  9,14},
  {&(_tg__ZTV7S7681C3__8S7681C12__8S7681C11[6]),  6,10},
  {&(_tg__ZTV7S7681C4__8S7681C12__8S7681C11[9]),  9,16},
  {&(_tg__ZTV8S7681C13__8S7681C11[4]),  4,9},
  {&(_tg__ZTV7S7681C3__8S7681C13__8S7681C11[6]),  6,10},
  {&(_tg__ZTV7S7681C4__8S7681C13__8S7681C11[9]),  9,16},
};
extern VTBL_ENTRY _ZTI8S7681C11[];
extern  VTBL_ENTRY _ZTV8S7681C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7681C11[];
Class_Descriptor cd_S7681C11 = {  "S7681C11", // class name
  bases_S7681C11, 8,
  &(vtc_S7681C11[0]), // expected_vtbl_contents
  &(vtt_S7681C11[0]), // expected_vtt_contents
  ABISELECT(704,448), // object size
  NSPAIRA(_ZTI8S7681C11),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S7681C11),85, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7681C11),14, //virtual table table var
  8, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7681C15  : virtual S7681C3 , virtual S7681C13 , virtual S7681C9 , S7681C4 {
  int s7681c15f0;
  virtual  ~S7681C15(); // _ZN8S7681C15D2Ev
  virtual void  v53(); // _ZN8S7681C153v53Ev
  virtual void  v54(); // _ZN8S7681C153v54Ev
  virtual void  v55(); // _ZN8S7681C153v55Ev
  virtual void  v56(); // _ZN8S7681C153v56Ev
  S7681C15(); // tgen
};
//SIG(-1 S7681C15) C1{ VBC2{ v5 v6 v7 v8 Fs:13 Fp FD[8]} VBC3{ VBC2 VBC4{ BC2 v9 v10 v11 Fp[6]} v12 v13 v14 v15 v16 Fp[2]} VBC5{ v17 v18 v19 v20 v21 v22 v23 v24 v25 FC4[7]} BC4 vd v1 v2 v3 v4 Fi}


 S7681C15 ::~S7681C15(){ note_dtor("S7681C15", this);}
void  S7681C15 ::v53(){vfunc_called(this, "_ZN8S7681C153v53Ev");}
void  S7681C15 ::v54(){vfunc_called(this, "_ZN8S7681C153v54Ev");}
void  S7681C15 ::v55(){vfunc_called(this, "_ZN8S7681C153v55Ev");}
void  S7681C15 ::v56(){vfunc_called(this, "_ZN8S7681C153v56Ev");}
S7681C15 ::S7681C15(){ note_ctor("S7681C15", this);} // tgen

static void Test_S7681C15()
{
  extern Class_Descriptor cd_S7681C15;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(132,330)];
    init_test(&cd_S7681C15, buf);
    S7681C15 *dp, &lv = *(dp=new (buf) S7681C15());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(2096,1316), "sizeof(S7681C15)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7681C15)");
    /*is_ambiguous_... S7681C15::S7681C3 */ AMB_check_base_class_offset(lv, (S7681C3*), ABISELECT(224,136), "S7681C15");
    /*is_ambiguous_... S7681C13::S7681C3 */ AMB_check_base_class_offset(lv, (S7681C3*)(S7681C13*), ABISELECT(224,136), "S7681C15");
    /*is_ambiguous_... S7681C15::S7681C4 */ AMB_check_base_class_offset(lv, (S7681C3*)(S7681C4*), ABISELECT(416,256), "S7681C15");
    check_base_class_offset(lv, (S7681C4*)(S7681C13*), ABISELECT(416,256), "S7681C15");
    check_base_class_offset(lv, (S7681C13*), ABISELECT(384,244), "S7681C15");
    check_base_class_offset(lv, (S7681C9*), ABISELECT(624,388), "S7681C15");
    /*is_ambiguous_... S7681C15::S7681C4 */ AMB_check_base_class_offset(lv, (S7681C3*)(S7681C4*), 0, "S7681C15");
    /*is_ambiguous_... S7681C15::S7681C4 */ AMB_check_base_class_offset(lv, (S7681C4*), 0, "S7681C15");
    check_field_offset(lv, s7681c15f0, ABISELECT(208,132), "S7681C15.s7681c15f0");
    test_class_info(&lv, &cd_S7681C15);
    dp->~S7681C15();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7681C15(Test_S7681C15, "S7681C15", ABISELECT(2096,1316));

#else // __cplusplus

extern void _ZN8S7681C15C1Ev();
extern void _ZN8S7681C15D2Ev();
Name_Map name_map_S7681C15[] = {
  NSPAIR(_ZN8S7681C15C1Ev),
  NSPAIR(_ZN8S7681C15D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7681C3;
extern VTBL_ENTRY _ZTI7S7681C3[];
extern  VTBL_ENTRY _ZTV7S7681C3[];
extern Class_Descriptor cd_S7681C3;
extern VTBL_ENTRY _ZTI7S7681C3[];
extern  VTBL_ENTRY _ZTV7S7681C3[];
extern Class_Descriptor cd_S7681C4;
extern VTBL_ENTRY _ZTI7S7681C4[];
extern  VTBL_ENTRY _ZTV7S7681C4[];
extern Class_Descriptor cd_S7681C13;
extern VTBL_ENTRY _ZTI8S7681C13[];
extern  VTBL_ENTRY _ZTV8S7681C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7681C13[];
extern Class_Descriptor cd_S7681C9;
extern VTBL_ENTRY _ZTI7S7681C9[];
extern  VTBL_ENTRY _ZTV7S7681C9[];
extern Class_Descriptor cd_S7681C3;
extern VTBL_ENTRY _ZTI7S7681C3[];
extern  VTBL_ENTRY _ZTV7S7681C3[];
extern Class_Descriptor cd_S7681C4;
extern VTBL_ENTRY _ZTI7S7681C4[];
extern  VTBL_ENTRY _ZTV7S7681C4[];
static Base_Class bases_S7681C15[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7681C3,    ABISELECT(224,136), //bcp->offset
    19, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7681C3,    ABISELECT(416,256), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S7681C4,    ABISELECT(416,256), //bcp->offset
    43, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S7681C13,    ABISELECT(384,244), //bcp->offset
    29, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7681C9,    ABISELECT(624,388), //bcp->offset
    59, //bcp->virtual_function_table_offset
    11, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7681C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S7681C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S7681C15[];
extern void _ZN7S7681C32v8Ev();
extern void _ZN7S7681C32v9Ev();
extern void _ZN7S7681C33v10Ev();
extern void _ZN7S7681C33v11Ev();
extern void _ZN7S7681C43v12Ev();
extern void _ZN7S7681C43v13Ev();
extern void _ZN7S7681C43v14Ev();
extern void _ZN8S7681C15D1Ev();
extern void _ZN8S7681C15D0Ev();
extern void _ZN8S7681C153v53Ev();
extern void _ZN8S7681C153v54Ev();
extern void _ZN8S7681C153v55Ev();
extern void _ZN8S7681C153v56Ev();
extern void _ZN7S7681C32v8Ev();
extern void _ZN7S7681C32v9Ev();
extern void _ZN7S7681C33v10Ev();
extern void _ZN7S7681C33v11Ev();
extern void _ZN8S7681C133v42Ev();
extern void _ZN8S7681C133v43Ev();
extern void _ZN8S7681C133v44Ev();
extern void _ZN8S7681C133v45Ev();
extern void _ZN8S7681C133v46Ev();
extern void _ZN7S7681C32v8Ev();
extern void _ZN7S7681C32v9Ev();
extern void _ZN7S7681C33v10Ev();
extern void _ZN7S7681C33v11Ev();
extern void _ZN7S7681C43v12Ev();
extern void _ZN7S7681C43v13Ev();
extern void _ZN7S7681C43v14Ev();
extern void _ZN7S7681C93v33Ev();
extern void _ZN7S7681C93v34Ev();
extern void _ZN7S7681C93v35Ev();
extern void _ZN7S7681C93v36Ev();
extern void _ZN7S7681C93v37Ev();
extern void _ZN7S7681C93v38Ev();
extern void _ZN7S7681C93v39Ev();
extern void _ZN7S7681C93v40Ev();
extern void _ZN7S7681C93v41Ev();
static  VTBL_ENTRY vtc_S7681C15[] = {
  ABISELECT(624,388),
  ABISELECT(416,256),
  ABISELECT(384,244),
  ABISELECT(224,136),
  0,
  (VTBL_ENTRY)&(_ZTI8S7681C15[0]),
  (VTBL_ENTRY)&_ZN7S7681C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7681C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v14Ev,
  (VTBL_ENTRY)&_ZN8S7681C15D1Ev,
  (VTBL_ENTRY)&_ZN8S7681C15D0Ev,
  (VTBL_ENTRY)&_ZN8S7681C153v53Ev,
  (VTBL_ENTRY)&_ZN8S7681C153v54Ev,
  (VTBL_ENTRY)&_ZN8S7681C153v55Ev,
  (VTBL_ENTRY)&_ZN8S7681C153v56Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-224,-136),
  (VTBL_ENTRY)&(_ZTI8S7681C15[0]),
  (VTBL_ENTRY)&_ZN7S7681C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7681C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v11Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(32,12),
  ABISELECT(-160,-108),
  ABISELECT(-384,-244),
  (VTBL_ENTRY)&(_ZTI8S7681C15[0]),
  (VTBL_ENTRY)&_ZN8S7681C133v42Ev,
  (VTBL_ENTRY)&_ZN8S7681C133v43Ev,
  (VTBL_ENTRY)&_ZN8S7681C133v44Ev,
  (VTBL_ENTRY)&_ZN8S7681C133v45Ev,
  (VTBL_ENTRY)&_ZN8S7681C133v46Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-416,-256),
  (VTBL_ENTRY)&(_ZTI8S7681C15[0]),
  (VTBL_ENTRY)&_ZN7S7681C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7681C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v14Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-624,-388),
  (VTBL_ENTRY)&(_ZTI8S7681C15[0]),
  (VTBL_ENTRY)&_ZN7S7681C93v33Ev,
  (VTBL_ENTRY)&_ZN7S7681C93v34Ev,
  (VTBL_ENTRY)&_ZN7S7681C93v35Ev,
  (VTBL_ENTRY)&_ZN7S7681C93v36Ev,
  (VTBL_ENTRY)&_ZN7S7681C93v37Ev,
  (VTBL_ENTRY)&_ZN7S7681C93v38Ev,
  (VTBL_ENTRY)&_ZN7S7681C93v39Ev,
  (VTBL_ENTRY)&_ZN7S7681C93v40Ev,
  (VTBL_ENTRY)&_ZN7S7681C93v41Ev,
};
extern VTBL_ENTRY _ZTV8S7681C15[];
extern void _ZN8S7681C133v42Ev();
extern void _ZN8S7681C133v43Ev();
extern void _ZN8S7681C133v44Ev();
extern void _ZN8S7681C133v45Ev();
extern void _ZN8S7681C133v46Ev();
static  VTBL_ENTRY _tg__ZTV8S7681C13__8S7681C15[] = {
  ABISELECT(32,12),
  ABISELECT(-160,-108),
  0,
  (VTBL_ENTRY)&(_ZTI8S7681C13[0]),
  (VTBL_ENTRY)&_ZN8S7681C133v42Ev,
  (VTBL_ENTRY)&_ZN8S7681C133v43Ev,
  (VTBL_ENTRY)&_ZN8S7681C133v44Ev,
  (VTBL_ENTRY)&_ZN8S7681C133v45Ev,
  (VTBL_ENTRY)&_ZN8S7681C133v46Ev,
};
extern void _ZN7S7681C32v8Ev();
extern void _ZN7S7681C32v9Ev();
extern void _ZN7S7681C33v10Ev();
extern void _ZN7S7681C33v11Ev();
static  VTBL_ENTRY _tg__ZTV7S7681C3__8S7681C13__8S7681C15[] = {
  0,
  0,
  0,
  0,
  ABISELECT(160,108),
  (VTBL_ENTRY)&(_ZTI8S7681C13[0]),
  (VTBL_ENTRY)&_ZN7S7681C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7681C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v11Ev,
};
extern void _ZN7S7681C32v8Ev();
extern void _ZN7S7681C32v9Ev();
extern void _ZN7S7681C33v10Ev();
extern void _ZN7S7681C33v11Ev();
extern void _ZN7S7681C43v12Ev();
extern void _ZN7S7681C43v13Ev();
extern void _ZN7S7681C43v14Ev();
static  VTBL_ENTRY _tg__ZTV7S7681C4__8S7681C13__8S7681C15[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-32,-12),
  (VTBL_ENTRY)&(_ZTI8S7681C13[0]),
  (VTBL_ENTRY)&_ZN7S7681C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7681C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v14Ev,
};
static  VTT_ENTRY vtt_S7681C15[] = {
  {&(_ZTV8S7681C15[6]),  6,79},
  {&(_ZTV8S7681C15[25]),  25,79},
  {&(_ZTV8S7681C15[38]),  38,79},
  {&(_ZTV8S7681C15[52]),  52,79},
  {&(_ZTV8S7681C15[70]),  70,79},
  {&(_tg__ZTV8S7681C13__8S7681C15[4]),  4,9},
  {&(_tg__ZTV7S7681C3__8S7681C13__8S7681C15[6]),  6,10},
  {&(_tg__ZTV7S7681C4__8S7681C13__8S7681C15[9]),  9,16},
};
extern VTBL_ENTRY _ZTI8S7681C15[];
extern  VTBL_ENTRY _ZTV8S7681C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7681C15[];
Class_Descriptor cd_S7681C15 = {  "S7681C15", // class name
  bases_S7681C15, 7,
  &(vtc_S7681C15[0]), // expected_vtbl_contents
  &(vtt_S7681C15[0]), // expected_vtt_contents
  ABISELECT(2096,1316), // object size
  NSPAIRA(_ZTI8S7681C15),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S7681C15),79, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7681C15),8, //virtual table table var
  7, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7681C10  : virtual S7681C8 , virtual S7681C11 , S7681C12 , S7681C15 {
  int s7681c10f0[8];
  char s7681c10f1;
  long s7681c10f2;
  virtual  ~S7681C10(); // _ZN8S7681C10D2Ev
  virtual void  v57(); // _ZN8S7681C103v57Ev
  virtual void  v58(); // _ZN8S7681C103v58Ev
  virtual void  v59(); // _ZN8S7681C103v59Ev
  virtual void  v60(); // _ZN8S7681C103v60Ev
  virtual void  v61(); // _ZN8S7681C103v61Ev
  virtual void  v62(); // _ZN8S7681C103v62Ev
  virtual void  v63(); // _ZN8S7681C103v63Ev
  virtual void  v64(); // _ZN8S7681C103v64Ev
  S7681C10(); // tgen
};
//SIG(-1 S7681C10) C1{ VBC2{ v9 v10 v11 v12} VBC3{ VBC4{ VBC5{ VBC6{ v13 v14 v15 v16 Fs:13 Fp FD[8]} VBC7{ BC6 v17 v18 v19 Fp[6]} v20 v21 v22 v23 v24 Fp[2]} BC8{ VBC6 BC7 v25 v26 v27 v28 Fp} v29 v30 v31 v32 FL[5] FC9{} FD} vd v33 v34} BC4 BC10{ VBC6 VBC5 VBC11{ v35 v36 v37 v38 v39 v40 v41 v42 v43 FC7[7]} BC7 vd v44 v45 v46 v47 Fi} vd v1 v2 v3 v4 v5 v6 v7 v8 Fi[8] Fc Fl}


 S7681C10 ::~S7681C10(){ note_dtor("S7681C10", this);}
void  S7681C10 ::v57(){vfunc_called(this, "_ZN8S7681C103v57Ev");}
void  S7681C10 ::v58(){vfunc_called(this, "_ZN8S7681C103v58Ev");}
void  S7681C10 ::v59(){vfunc_called(this, "_ZN8S7681C103v59Ev");}
void  S7681C10 ::v60(){vfunc_called(this, "_ZN8S7681C103v60Ev");}
void  S7681C10 ::v61(){vfunc_called(this, "_ZN8S7681C103v61Ev");}
void  S7681C10 ::v62(){vfunc_called(this, "_ZN8S7681C103v62Ev");}
void  S7681C10 ::v63(){vfunc_called(this, "_ZN8S7681C103v63Ev");}
void  S7681C10 ::v64(){vfunc_called(this, "_ZN8S7681C103v64Ev");}
S7681C10 ::S7681C10(){ note_ctor("S7681C10", this);} // tgen

static void Test_S7681C10()
{
  extern Class_Descriptor cd_S7681C10;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(171,438)];
    init_test(&cd_S7681C10, buf);
    S7681C10 *dp, &lv = *(dp=new (buf) S7681C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(2720,1748), "sizeof(S7681C10)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7681C10)");
    check_base_class_offset(lv, (S7681C8*), ABISELECT(544,368), "S7681C10");
    /*is_ambiguous_... S7681C13::S7681C3 */ AMB_check_base_class_offset(lv, (S7681C3*)(S7681C13*), ABISELECT(880,580), "S7681C10");
    /*is_ambiguous_... S7681C10::S7681C12 */ AMB_check_base_class_offset(lv, (S7681C3*)(S7681C2*)(S7681C12*), ABISELECT(880,580), "S7681C10");
    /*is_ambiguous_... S7681C10::S7681C12 */ AMB_check_base_class_offset(lv, (S7681C3*)(S7681C2*)(S7681C12*), ABISELECT(880,580), "S7681C10");
    /*is_ambiguous_... S7681C15::S7681C3 */ AMB_check_base_class_offset(lv, (S7681C3*)(S7681C15*), ABISELECT(880,580), "S7681C10");
    /*is_ambiguous_... S7681C10::S7681C4 */ AMB_check_base_class_offset(lv, (S7681C3*)(S7681C4*), ABISELECT(1040,688), "S7681C10");
    check_base_class_offset(lv, (S7681C4*)(S7681C13*), ABISELECT(1040,688), "S7681C10");
    /*is_ambiguous_... S7681C10::S7681C12 */ AMB_check_base_class_offset(lv, (S7681C13*)(S7681C12*), ABISELECT(848,568), "S7681C10");
    /*is_ambiguous_... S7681C10::S7681C12 */ AMB_check_base_class_offset(lv, (S7681C13*)(S7681C12*), ABISELECT(848,568), "S7681C10");
    check_base_class_offset(lv, (S7681C13*)(S7681C15*), ABISELECT(848,568), "S7681C10");
    /*is_ambiguous_... S7681C10::S7681C12 */ AMB_check_base_class_offset(lv, (S7681C3*)(S7681C4*)(S7681C2*)(S7681C12*), ABISELECT(560,376), "S7681C10");
    /*is_ambiguous_... S7681C10::S7681C12 */ AMB_check_base_class_offset(lv, (S7681C4*)(S7681C2*)(S7681C12*), ABISELECT(560,376), "S7681C10");
    /*is_ambiguous_... S7681C10::S7681C12 */ AMB_check_base_class_offset(lv, (S7681C2*)(S7681C12*), ABISELECT(560,376), "S7681C10");
    check_base_class_offset(lv, (S7681C12*)(S7681C11*), ABISELECT(560,376), "S7681C10");
    check_base_class_offset(lv, (S7681C11*), ABISELECT(552,372), "S7681C10");
    /*is_ambiguous_... S7681C10::S7681C12 */ AMB_check_base_class_offset(lv, (S7681C3*)(S7681C4*)(S7681C2*)(S7681C12*), 0, "S7681C10");
    /*is_ambiguous_... S7681C10::S7681C12 */ AMB_check_base_class_offset(lv, (S7681C4*)(S7681C2*)(S7681C12*), 0, "S7681C10");
    /*is_ambiguous_... S7681C10::S7681C12 */ AMB_check_base_class_offset(lv, (S7681C2*)(S7681C12*), 0, "S7681C10");
    /*is_ambiguous_... S7681C10::S7681C12 */ AMB_check_base_class_offset(lv, (S7681C12*), 0, "S7681C10");
    check_base_class_offset(lv, (S7681C9*)(S7681C15*), ABISELECT(1248,820), "S7681C10");
    /*is_ambiguous_... S7681C15::S7681C4 */ AMB_check_base_class_offset(lv, (S7681C3*)(S7681C4*)(S7681C15*), ABISELECT(288,192), "S7681C10");
    /*is_ambiguous_... S7681C15::S7681C4 */ AMB_check_base_class_offset(lv, (S7681C4*)(S7681C15*), ABISELECT(288,192), "S7681C10");
    check_base_class_offset(lv, (S7681C15*), ABISELECT(288,192), "S7681C10");
    check_field_offset(lv, s7681c10f0, ABISELECT(500,328), "S7681C10.s7681c10f0");
    check_field_offset(lv, s7681c10f1, ABISELECT(532,360), "S7681C10.s7681c10f1");
    check_field_offset(lv, s7681c10f2, ABISELECT(536,364), "S7681C10.s7681c10f2");
    test_class_info(&lv, &cd_S7681C10);
    dp->~S7681C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7681C10(Test_S7681C10, "S7681C10", ABISELECT(2720,1748));

#else // __cplusplus

extern void _ZN8S7681C10C1Ev();
extern void _ZN8S7681C10D2Ev();
Name_Map name_map_S7681C10[] = {
  NSPAIR(_ZN8S7681C10C1Ev),
  NSPAIR(_ZN8S7681C10D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7681C8;
extern VTBL_ENTRY _ZTI7S7681C8[];
extern  VTBL_ENTRY _ZTV7S7681C8[];
extern Class_Descriptor cd_S7681C3;
extern VTBL_ENTRY _ZTI7S7681C3[];
extern  VTBL_ENTRY _ZTV7S7681C3[];
extern Class_Descriptor cd_S7681C3;
extern VTBL_ENTRY _ZTI7S7681C3[];
extern  VTBL_ENTRY _ZTV7S7681C3[];
extern Class_Descriptor cd_S7681C4;
extern VTBL_ENTRY _ZTI7S7681C4[];
extern  VTBL_ENTRY _ZTV7S7681C4[];
extern Class_Descriptor cd_S7681C13;
extern VTBL_ENTRY _ZTI8S7681C13[];
extern  VTBL_ENTRY _ZTV8S7681C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7681C13[];
extern Class_Descriptor cd_S7681C3;
extern VTBL_ENTRY _ZTI7S7681C3[];
extern  VTBL_ENTRY _ZTV7S7681C3[];
extern Class_Descriptor cd_S7681C4;
extern VTBL_ENTRY _ZTI7S7681C4[];
extern  VTBL_ENTRY _ZTV7S7681C4[];
extern Class_Descriptor cd_S7681C2;
extern VTBL_ENTRY _ZTI7S7681C2[];
extern  VTBL_ENTRY _ZTV7S7681C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7681C2[];
extern Class_Descriptor cd_S7681C12;
extern VTBL_ENTRY _ZTI8S7681C12[];
extern  VTBL_ENTRY _ZTV8S7681C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7681C12[];
extern Class_Descriptor cd_S7681C11;
extern VTBL_ENTRY _ZTI8S7681C11[];
extern  VTBL_ENTRY _ZTV8S7681C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7681C11[];
extern Class_Descriptor cd_S7681C3;
extern VTBL_ENTRY _ZTI7S7681C3[];
extern  VTBL_ENTRY _ZTV7S7681C3[];
extern Class_Descriptor cd_S7681C4;
extern VTBL_ENTRY _ZTI7S7681C4[];
extern  VTBL_ENTRY _ZTV7S7681C4[];
extern Class_Descriptor cd_S7681C2;
extern VTBL_ENTRY _ZTI7S7681C2[];
extern  VTBL_ENTRY _ZTV7S7681C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7681C2[];
extern Class_Descriptor cd_S7681C12;
extern VTBL_ENTRY _ZTI8S7681C12[];
extern  VTBL_ENTRY _ZTV8S7681C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7681C12[];
extern Class_Descriptor cd_S7681C9;
extern VTBL_ENTRY _ZTI7S7681C9[];
extern  VTBL_ENTRY _ZTV7S7681C9[];
extern Class_Descriptor cd_S7681C3;
extern VTBL_ENTRY _ZTI7S7681C3[];
extern  VTBL_ENTRY _ZTV7S7681C3[];
extern Class_Descriptor cd_S7681C4;
extern VTBL_ENTRY _ZTI7S7681C4[];
extern  VTBL_ENTRY _ZTV7S7681C4[];
extern Class_Descriptor cd_S7681C15;
extern VTBL_ENTRY _ZTI8S7681C15[];
extern  VTBL_ENTRY _ZTV8S7681C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7681C15[];
static Base_Class bases_S7681C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7681C8,    ABISELECT(544,368), //bcp->offset
    53, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7681C3,    ABISELECT(880,580), //bcp->offset
    125, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S7681C3,    ABISELECT(1040,688), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S7681C4,    ABISELECT(1040,688), //bcp->offset
    135, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S7681C13,    ABISELECT(848,568), //bcp->offset
    111, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    32, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S7681C3,    ABISELECT(560,376), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S7681C4,    ABISELECT(560,376), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S7681C2,    ABISELECT(560,376), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    27, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S7681C12,    ABISELECT(560,376), //bcp->offset
    76, //bcp->virtual_function_table_offset
    20, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    26, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S7681C11,    ABISELECT(552,372), //bcp->offset
    63, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    21, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7681C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S7681C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S7681C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S7681C12,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7681C9,    ABISELECT(1248,820), //bcp->offset
    151, //bcp->virtual_function_table_offset
    11, //num_negative_vtable_entries(t, bcp)
    20, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    17, //immediately_derived
  0, 1},
  {&cd_S7681C3,    ABISELECT(288,192), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S7681C4,    ABISELECT(288,192), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S7681C15,    ABISELECT(288,192), //bcp->offset
    34, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S7681C10[];
extern void _ZN7S7681C32v8Ev();
extern void _ZN7S7681C32v9Ev();
extern void _ZN7S7681C33v10Ev();
extern void _ZN7S7681C33v11Ev();
extern void _ZN7S7681C43v12Ev();
extern void _ZN7S7681C43v13Ev();
extern void _ZN7S7681C43v14Ev();
extern void _ZN7S7681C23v15Ev();
extern void _ZN7S7681C23v16Ev();
extern void _ZN7S7681C23v17Ev();
extern void _ZN7S7681C23v18Ev();
extern void _ZN8S7681C123v47Ev();
extern void _ZN8S7681C123v48Ev();
extern void _ZN8S7681C123v49Ev();
extern void _ZN8S7681C123v50Ev();
extern void _ZN8S7681C10D1Ev();
extern void _ZN8S7681C10D0Ev();
extern void _ZN8S7681C103v57Ev();
extern void _ZN8S7681C103v58Ev();
extern void _ZN8S7681C103v59Ev();
extern void _ZN8S7681C103v60Ev();
extern void _ZN8S7681C103v61Ev();
extern void _ZN8S7681C103v62Ev();
extern void _ZN8S7681C103v63Ev();
extern void _ZN8S7681C103v64Ev();
extern void _ZN7S7681C32v8Ev();
extern void _ZN7S7681C32v9Ev();
extern void _ZN7S7681C33v10Ev();
extern void _ZN7S7681C33v11Ev();
extern void _ZN7S7681C43v12Ev();
extern void _ZN7S7681C43v13Ev();
extern void _ZN7S7681C43v14Ev();
extern void ABISELECT(_ZThn288_N8S7681C10D1Ev,_ZThn192_N8S7681C10D1Ev)();
extern void ABISELECT(_ZThn288_N8S7681C10D0Ev,_ZThn192_N8S7681C10D0Ev)();
extern void _ZN8S7681C153v53Ev();
extern void _ZN8S7681C153v54Ev();
extern void _ZN8S7681C153v55Ev();
extern void _ZN8S7681C153v56Ev();
extern void _ZN7S7681C83v29Ev();
extern void _ZN7S7681C83v30Ev();
extern void _ZN7S7681C83v31Ev();
extern void _ZN7S7681C83v32Ev();
extern void ABISELECT(_ZTv0_n56_N8S7681C10D1Ev,_ZTv0_n28_N8S7681C10D1Ev)();
extern void ABISELECT(_ZThn552_N8S7681C10D1Ev,_ZThn372_N8S7681C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S7681C10D0Ev,_ZTv0_n28_N8S7681C10D0Ev)();
extern void ABISELECT(_ZThn552_N8S7681C10D0Ev,_ZThn372_N8S7681C10D0Ev)() __attribute__((weak));
extern void _ZN8S7681C113v51Ev();
extern void _ZN8S7681C113v52Ev();
extern void _ZN7S7681C32v8Ev();
extern void _ZN7S7681C32v9Ev();
extern void _ZN7S7681C33v10Ev();
extern void _ZN7S7681C33v11Ev();
extern void _ZN7S7681C43v12Ev();
extern void _ZN7S7681C43v13Ev();
extern void _ZN7S7681C43v14Ev();
extern void _ZN7S7681C23v15Ev();
extern void _ZN7S7681C23v16Ev();
extern void _ZN7S7681C23v17Ev();
extern void _ZN7S7681C23v18Ev();
extern void _ZN8S7681C123v47Ev();
extern void _ZN8S7681C123v48Ev();
extern void _ZN8S7681C123v49Ev();
extern void _ZN8S7681C123v50Ev();
extern void _ZN8S7681C133v42Ev();
extern void _ZN8S7681C133v43Ev();
extern void _ZN8S7681C133v44Ev();
extern void _ZN8S7681C133v45Ev();
extern void _ZN8S7681C133v46Ev();
extern void _ZN7S7681C32v8Ev();
extern void _ZN7S7681C32v9Ev();
extern void _ZN7S7681C33v10Ev();
extern void _ZN7S7681C33v11Ev();
extern void _ZN7S7681C32v8Ev();
extern void _ZN7S7681C32v9Ev();
extern void _ZN7S7681C33v10Ev();
extern void _ZN7S7681C33v11Ev();
extern void _ZN7S7681C43v12Ev();
extern void _ZN7S7681C43v13Ev();
extern void _ZN7S7681C43v14Ev();
extern void _ZN7S7681C93v33Ev();
extern void _ZN7S7681C93v34Ev();
extern void _ZN7S7681C93v35Ev();
extern void _ZN7S7681C93v36Ev();
extern void _ZN7S7681C93v37Ev();
extern void _ZN7S7681C93v38Ev();
extern void _ZN7S7681C93v39Ev();
extern void _ZN7S7681C93v40Ev();
extern void _ZN7S7681C93v41Ev();
static  VTBL_ENTRY vtc_S7681C10[] = {
  ABISELECT(1248,820),
  ABISELECT(560,376),
  ABISELECT(552,372),
  ABISELECT(544,368),
  ABISELECT(1040,688),
  ABISELECT(848,568),
  ABISELECT(880,580),
  0,
  (VTBL_ENTRY)&(_ZTI8S7681C10[0]),
  (VTBL_ENTRY)&_ZN7S7681C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7681C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v15Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v16Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v17Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v18Ev,
  (VTBL_ENTRY)&_ZN8S7681C123v47Ev,
  (VTBL_ENTRY)&_ZN8S7681C123v48Ev,
  (VTBL_ENTRY)&_ZN8S7681C123v49Ev,
  (VTBL_ENTRY)&_ZN8S7681C123v50Ev,
  (VTBL_ENTRY)&_ZN8S7681C10D1Ev,
  (VTBL_ENTRY)&_ZN8S7681C10D0Ev,
  (VTBL_ENTRY)&_ZN8S7681C103v57Ev,
  (VTBL_ENTRY)&_ZN8S7681C103v58Ev,
  (VTBL_ENTRY)&_ZN8S7681C103v59Ev,
  (VTBL_ENTRY)&_ZN8S7681C103v60Ev,
  (VTBL_ENTRY)&_ZN8S7681C103v61Ev,
  (VTBL_ENTRY)&_ZN8S7681C103v62Ev,
  (VTBL_ENTRY)&_ZN8S7681C103v63Ev,
  (VTBL_ENTRY)&_ZN8S7681C103v64Ev,
  ABISELECT(960,628),
  ABISELECT(752,496),
  ABISELECT(560,376),
  ABISELECT(592,388),
  ABISELECT(-288,-192),
  (VTBL_ENTRY)&(_ZTI8S7681C10[0]),
  (VTBL_ENTRY)&_ZN7S7681C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7681C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v14Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn288_N8S7681C10D1Ev,_ZThn192_N8S7681C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn288_N8S7681C10D0Ev,_ZThn192_N8S7681C10D0Ev),
  (VTBL_ENTRY)&_ZN8S7681C153v53Ev,
  (VTBL_ENTRY)&_ZN8S7681C153v54Ev,
  (VTBL_ENTRY)&_ZN8S7681C153v55Ev,
  (VTBL_ENTRY)&_ZN8S7681C153v56Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-544,-368),
  (VTBL_ENTRY)&(_ZTI8S7681C10[0]),
  (VTBL_ENTRY)&_ZN7S7681C83v29Ev,
  (VTBL_ENTRY)&_ZN7S7681C83v30Ev,
  (VTBL_ENTRY)&_ZN7S7681C83v31Ev,
  (VTBL_ENTRY)&_ZN7S7681C83v32Ev,
  0,
  0,
  ABISELECT(-552,-372),
  ABISELECT(488,316),
  ABISELECT(328,208),
  ABISELECT(296,196),
  ABISELECT(8,4),
  ABISELECT(-552,-372),
  (VTBL_ENTRY)&(_ZTI8S7681C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S7681C10D1Ev,_ZTv0_n28_N8S7681C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S7681C10D0Ev,_ZTv0_n28_N8S7681C10D0Ev),
  (VTBL_ENTRY)&_ZN8S7681C113v51Ev,
  (VTBL_ENTRY)&_ZN8S7681C113v52Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(480,312),
  ABISELECT(288,192),
  ABISELECT(320,204),
  ABISELECT(-560,-376),
  (VTBL_ENTRY)&(_ZTI8S7681C10[0]),
  (VTBL_ENTRY)&_ZN7S7681C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7681C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v15Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v16Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v17Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v18Ev,
  (VTBL_ENTRY)&_ZN8S7681C123v47Ev,
  (VTBL_ENTRY)&_ZN8S7681C123v48Ev,
  (VTBL_ENTRY)&_ZN8S7681C123v49Ev,
  (VTBL_ENTRY)&_ZN8S7681C123v50Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(192,120),
  ABISELECT(32,12),
  ABISELECT(-848,-568),
  (VTBL_ENTRY)&(_ZTI8S7681C10[0]),
  (VTBL_ENTRY)&_ZN8S7681C133v42Ev,
  (VTBL_ENTRY)&_ZN8S7681C133v43Ev,
  (VTBL_ENTRY)&_ZN8S7681C133v44Ev,
  (VTBL_ENTRY)&_ZN8S7681C133v45Ev,
  (VTBL_ENTRY)&_ZN8S7681C133v46Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-880,-580),
  (VTBL_ENTRY)&(_ZTI8S7681C10[0]),
  (VTBL_ENTRY)&_ZN7S7681C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7681C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v11Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-1040,-688),
  (VTBL_ENTRY)&(_ZTI8S7681C10[0]),
  (VTBL_ENTRY)&_ZN7S7681C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7681C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v14Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-1248,-820),
  (VTBL_ENTRY)&(_ZTI8S7681C10[0]),
  (VTBL_ENTRY)&_ZN7S7681C93v33Ev,
  (VTBL_ENTRY)&_ZN7S7681C93v34Ev,
  (VTBL_ENTRY)&_ZN7S7681C93v35Ev,
  (VTBL_ENTRY)&_ZN7S7681C93v36Ev,
  (VTBL_ENTRY)&_ZN7S7681C93v37Ev,
  (VTBL_ENTRY)&_ZN7S7681C93v38Ev,
  (VTBL_ENTRY)&_ZN7S7681C93v39Ev,
  (VTBL_ENTRY)&_ZN7S7681C93v40Ev,
  (VTBL_ENTRY)&_ZN7S7681C93v41Ev,
};
extern VTBL_ENTRY _ZTV8S7681C10[];
extern void _ZN7S7681C32v8Ev();
extern void _ZN7S7681C32v9Ev();
extern void _ZN7S7681C33v10Ev();
extern void _ZN7S7681C33v11Ev();
extern void _ZN7S7681C43v12Ev();
extern void _ZN7S7681C43v13Ev();
extern void _ZN7S7681C43v14Ev();
extern void _ZN7S7681C23v15Ev();
extern void _ZN7S7681C23v16Ev();
extern void _ZN7S7681C23v17Ev();
extern void _ZN7S7681C23v18Ev();
extern void _ZN8S7681C123v47Ev();
extern void _ZN8S7681C123v48Ev();
extern void _ZN8S7681C123v49Ev();
extern void _ZN8S7681C123v50Ev();
static  VTBL_ENTRY _tg__ZTV8S7681C12__A__8S7681C10[] = {
  ABISELECT(1040,688),
  ABISELECT(848,568),
  ABISELECT(880,580),
  0,
  (VTBL_ENTRY)&(_ZTI8S7681C12[0]),
  (VTBL_ENTRY)&_ZN7S7681C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7681C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v15Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v16Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v17Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v18Ev,
  (VTBL_ENTRY)&_ZN8S7681C123v47Ev,
  (VTBL_ENTRY)&_ZN8S7681C123v48Ev,
  (VTBL_ENTRY)&_ZN8S7681C123v49Ev,
  (VTBL_ENTRY)&_ZN8S7681C123v50Ev,
};
extern void _ZN7S7681C32v8Ev();
extern void _ZN7S7681C32v9Ev();
extern void _ZN7S7681C33v10Ev();
extern void _ZN7S7681C33v11Ev();
extern void _ZN7S7681C43v12Ev();
extern void _ZN7S7681C43v13Ev();
extern void _ZN7S7681C43v14Ev();
extern void _ZN7S7681C23v15Ev();
extern void _ZN7S7681C23v16Ev();
extern void _ZN7S7681C23v17Ev();
extern void _ZN7S7681C23v18Ev();
static  VTBL_ENTRY _tg__ZTV7S7681C28S7681C12__A1__8S7681C10[] = {
  ABISELECT(880,580),
  0,
  (VTBL_ENTRY)&(_ZTI7S7681C2[0]),
  (VTBL_ENTRY)&_ZN7S7681C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7681C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v15Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v16Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v17Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v18Ev,
};
extern void _ZN7S7681C32v8Ev();
extern void _ZN7S7681C32v9Ev();
extern void _ZN7S7681C33v10Ev();
extern void _ZN7S7681C33v11Ev();
static  VTBL_ENTRY _tg__ZTV7S7681C3__7S7681C28S7681C12__A1__8S7681C10[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-880,-580),
  (VTBL_ENTRY)&(_ZTI7S7681C2[0]),
  (VTBL_ENTRY)&_ZN7S7681C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7681C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v11Ev,
};
extern void _ZN8S7681C133v42Ev();
extern void _ZN8S7681C133v43Ev();
extern void _ZN8S7681C133v44Ev();
extern void _ZN8S7681C133v45Ev();
extern void _ZN8S7681C133v46Ev();
static  VTBL_ENTRY _tg__ZTV8S7681C13__8S7681C12__A__8S7681C10[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(192,120),
  ABISELECT(32,12),
  ABISELECT(-848,-568),
  (VTBL_ENTRY)&(_ZTI8S7681C12[0]),
  (VTBL_ENTRY)&_ZN8S7681C133v42Ev,
  (VTBL_ENTRY)&_ZN8S7681C133v43Ev,
  (VTBL_ENTRY)&_ZN8S7681C133v44Ev,
  (VTBL_ENTRY)&_ZN8S7681C133v45Ev,
  (VTBL_ENTRY)&_ZN8S7681C133v46Ev,
};
extern void _ZN7S7681C32v8Ev();
extern void _ZN7S7681C32v9Ev();
extern void _ZN7S7681C33v10Ev();
extern void _ZN7S7681C33v11Ev();
static  VTBL_ENTRY _tg__ZTV7S7681C3__8S7681C12__A__8S7681C10[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-880,-580),
  (VTBL_ENTRY)&(_ZTI8S7681C12[0]),
  (VTBL_ENTRY)&_ZN7S7681C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7681C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v11Ev,
};
extern void _ZN7S7681C32v8Ev();
extern void _ZN7S7681C32v9Ev();
extern void _ZN7S7681C33v10Ev();
extern void _ZN7S7681C33v11Ev();
extern void _ZN7S7681C43v12Ev();
extern void _ZN7S7681C43v13Ev();
extern void _ZN7S7681C43v14Ev();
static  VTBL_ENTRY _tg__ZTV7S7681C4__8S7681C12__A__8S7681C10[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-1040,-688),
  (VTBL_ENTRY)&(_ZTI8S7681C12[0]),
  (VTBL_ENTRY)&_ZN7S7681C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7681C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v14Ev,
};
extern void _ZN7S7681C32v8Ev();
extern void _ZN7S7681C32v9Ev();
extern void _ZN7S7681C33v10Ev();
extern void _ZN7S7681C33v11Ev();
extern void _ZN7S7681C43v12Ev();
extern void _ZN7S7681C43v13Ev();
extern void _ZN7S7681C43v14Ev();
extern void _ZN8S7681C15D1Ev();
extern void _ZN8S7681C15D0Ev();
extern void _ZN8S7681C153v53Ev();
extern void _ZN8S7681C153v54Ev();
extern void _ZN8S7681C153v55Ev();
extern void _ZN8S7681C153v56Ev();
static  VTBL_ENTRY _tg__ZTV8S7681C15__8S7681C10[] = {
  ABISELECT(960,628),
  ABISELECT(752,496),
  ABISELECT(560,376),
  ABISELECT(592,388),
  0,
  (VTBL_ENTRY)&(_ZTI8S7681C15[0]),
  (VTBL_ENTRY)&_ZN7S7681C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7681C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v14Ev,
  (VTBL_ENTRY)&_ZN8S7681C15D1Ev,
  (VTBL_ENTRY)&_ZN8S7681C15D0Ev,
  (VTBL_ENTRY)&_ZN8S7681C153v53Ev,
  (VTBL_ENTRY)&_ZN8S7681C153v54Ev,
  (VTBL_ENTRY)&_ZN8S7681C153v55Ev,
  (VTBL_ENTRY)&_ZN8S7681C153v56Ev,
};
extern void _ZN7S7681C32v8Ev();
extern void _ZN7S7681C32v9Ev();
extern void _ZN7S7681C33v10Ev();
extern void _ZN7S7681C33v11Ev();
static  VTBL_ENTRY _tg__ZTV7S7681C3__8S7681C15__8S7681C10[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-592,-388),
  (VTBL_ENTRY)&(_ZTI8S7681C15[0]),
  (VTBL_ENTRY)&_ZN7S7681C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7681C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v11Ev,
};
extern void _ZN8S7681C133v42Ev();
extern void _ZN8S7681C133v43Ev();
extern void _ZN8S7681C133v44Ev();
extern void _ZN8S7681C133v45Ev();
extern void _ZN8S7681C133v46Ev();
static  VTBL_ENTRY _tg__ZTV8S7681C13__8S7681C15__8S7681C10[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(192,120),
  ABISELECT(32,12),
  ABISELECT(-560,-376),
  (VTBL_ENTRY)&(_ZTI8S7681C15[0]),
  (VTBL_ENTRY)&_ZN8S7681C133v42Ev,
  (VTBL_ENTRY)&_ZN8S7681C133v43Ev,
  (VTBL_ENTRY)&_ZN8S7681C133v44Ev,
  (VTBL_ENTRY)&_ZN8S7681C133v45Ev,
  (VTBL_ENTRY)&_ZN8S7681C133v46Ev,
};
extern void _ZN7S7681C32v8Ev();
extern void _ZN7S7681C32v9Ev();
extern void _ZN7S7681C33v10Ev();
extern void _ZN7S7681C33v11Ev();
extern void _ZN7S7681C43v12Ev();
extern void _ZN7S7681C43v13Ev();
extern void _ZN7S7681C43v14Ev();
static  VTBL_ENTRY _tg__ZTV7S7681C4__8S7681C15__8S7681C10[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-752,-496),
  (VTBL_ENTRY)&(_ZTI8S7681C15[0]),
  (VTBL_ENTRY)&_ZN7S7681C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7681C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v14Ev,
};
extern void _ZN7S7681C93v33Ev();
extern void _ZN7S7681C93v34Ev();
extern void _ZN7S7681C93v35Ev();
extern void _ZN7S7681C93v36Ev();
extern void _ZN7S7681C93v37Ev();
extern void _ZN7S7681C93v38Ev();
extern void _ZN7S7681C93v39Ev();
extern void _ZN7S7681C93v40Ev();
extern void _ZN7S7681C93v41Ev();
static  VTBL_ENTRY _tg__ZTV7S7681C9__8S7681C15__8S7681C10[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-960,-628),
  (VTBL_ENTRY)&(_ZTI8S7681C15[0]),
  (VTBL_ENTRY)&_ZN7S7681C93v33Ev,
  (VTBL_ENTRY)&_ZN7S7681C93v34Ev,
  (VTBL_ENTRY)&_ZN7S7681C93v35Ev,
  (VTBL_ENTRY)&_ZN7S7681C93v36Ev,
  (VTBL_ENTRY)&_ZN7S7681C93v37Ev,
  (VTBL_ENTRY)&_ZN7S7681C93v38Ev,
  (VTBL_ENTRY)&_ZN7S7681C93v39Ev,
  (VTBL_ENTRY)&_ZN7S7681C93v40Ev,
  (VTBL_ENTRY)&_ZN7S7681C93v41Ev,
};
extern void _ZN8S7681C11D1Ev();
extern void _ZN8S7681C11D0Ev();
extern void _ZN8S7681C113v51Ev();
extern void _ZN8S7681C113v52Ev();
static  VTBL_ENTRY _tg__ZTV8S7681C11__8S7681C10[] = {
  ABISELECT(488,316),
  ABISELECT(328,208),
  ABISELECT(296,196),
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S7681C11[0]),
  (VTBL_ENTRY)&_ZN8S7681C11D1Ev,
  (VTBL_ENTRY)&_ZN8S7681C11D0Ev,
  (VTBL_ENTRY)&_ZN8S7681C113v51Ev,
  (VTBL_ENTRY)&_ZN8S7681C113v52Ev,
};
extern void _ZN7S7681C32v8Ev();
extern void _ZN7S7681C32v9Ev();
extern void _ZN7S7681C33v10Ev();
extern void _ZN7S7681C33v11Ev();
extern void _ZN7S7681C43v12Ev();
extern void _ZN7S7681C43v13Ev();
extern void _ZN7S7681C43v14Ev();
extern void _ZN7S7681C23v15Ev();
extern void _ZN7S7681C23v16Ev();
extern void _ZN7S7681C23v17Ev();
extern void _ZN7S7681C23v18Ev();
extern void _ZN8S7681C123v47Ev();
extern void _ZN8S7681C123v48Ev();
extern void _ZN8S7681C123v49Ev();
extern void _ZN8S7681C123v50Ev();
static  VTBL_ENTRY _tg__ZTV8S7681C12__8S7681C11__8S7681C10[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(480,312),
  ABISELECT(288,192),
  ABISELECT(320,204),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S7681C11[0]),
  (VTBL_ENTRY)&_ZN7S7681C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7681C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v15Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v16Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v17Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v18Ev,
  (VTBL_ENTRY)&_ZN8S7681C123v47Ev,
  (VTBL_ENTRY)&_ZN8S7681C123v48Ev,
  (VTBL_ENTRY)&_ZN8S7681C123v49Ev,
  (VTBL_ENTRY)&_ZN8S7681C123v50Ev,
};
extern void _ZN8S7681C133v42Ev();
extern void _ZN8S7681C133v43Ev();
extern void _ZN8S7681C133v44Ev();
extern void _ZN8S7681C133v45Ev();
extern void _ZN8S7681C133v46Ev();
static  VTBL_ENTRY _tg__ZTV8S7681C13__8S7681C11__8S7681C10[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(192,120),
  ABISELECT(32,12),
  ABISELECT(-296,-196),
  (VTBL_ENTRY)&(_ZTI8S7681C11[0]),
  (VTBL_ENTRY)&_ZN8S7681C133v42Ev,
  (VTBL_ENTRY)&_ZN8S7681C133v43Ev,
  (VTBL_ENTRY)&_ZN8S7681C133v44Ev,
  (VTBL_ENTRY)&_ZN8S7681C133v45Ev,
  (VTBL_ENTRY)&_ZN8S7681C133v46Ev,
};
extern void _ZN7S7681C32v8Ev();
extern void _ZN7S7681C32v9Ev();
extern void _ZN7S7681C33v10Ev();
extern void _ZN7S7681C33v11Ev();
static  VTBL_ENTRY _tg__ZTV7S7681C3__8S7681C11__8S7681C10[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-328,-208),
  (VTBL_ENTRY)&(_ZTI8S7681C11[0]),
  (VTBL_ENTRY)&_ZN7S7681C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7681C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v11Ev,
};
extern void _ZN7S7681C32v8Ev();
extern void _ZN7S7681C32v9Ev();
extern void _ZN7S7681C33v10Ev();
extern void _ZN7S7681C33v11Ev();
extern void _ZN7S7681C43v12Ev();
extern void _ZN7S7681C43v13Ev();
extern void _ZN7S7681C43v14Ev();
static  VTBL_ENTRY _tg__ZTV7S7681C4__8S7681C11__8S7681C10[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-488,-316),
  (VTBL_ENTRY)&(_ZTI8S7681C11[0]),
  (VTBL_ENTRY)&_ZN7S7681C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7681C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v14Ev,
};
extern void _ZN7S7681C32v8Ev();
extern void _ZN7S7681C32v9Ev();
extern void _ZN7S7681C33v10Ev();
extern void _ZN7S7681C33v11Ev();
extern void _ZN7S7681C43v12Ev();
extern void _ZN7S7681C43v13Ev();
extern void _ZN7S7681C43v14Ev();
extern void _ZN7S7681C23v15Ev();
extern void _ZN7S7681C23v16Ev();
extern void _ZN7S7681C23v17Ev();
extern void _ZN7S7681C23v18Ev();
extern void _ZN8S7681C123v47Ev();
extern void _ZN8S7681C123v48Ev();
extern void _ZN8S7681C123v49Ev();
extern void _ZN8S7681C123v50Ev();
static  VTBL_ENTRY _tg__ZTV8S7681C12__8S7681C10[] = {
  ABISELECT(480,312),
  ABISELECT(288,192),
  ABISELECT(320,204),
  0,
  (VTBL_ENTRY)&(_ZTI8S7681C12[0]),
  (VTBL_ENTRY)&_ZN7S7681C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7681C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v15Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v16Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v17Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v18Ev,
  (VTBL_ENTRY)&_ZN8S7681C123v47Ev,
  (VTBL_ENTRY)&_ZN8S7681C123v48Ev,
  (VTBL_ENTRY)&_ZN8S7681C123v49Ev,
  (VTBL_ENTRY)&_ZN8S7681C123v50Ev,
};
extern void _ZN7S7681C32v8Ev();
extern void _ZN7S7681C32v9Ev();
extern void _ZN7S7681C33v10Ev();
extern void _ZN7S7681C33v11Ev();
extern void _ZN7S7681C43v12Ev();
extern void _ZN7S7681C43v13Ev();
extern void _ZN7S7681C43v14Ev();
extern void _ZN7S7681C23v15Ev();
extern void _ZN7S7681C23v16Ev();
extern void _ZN7S7681C23v17Ev();
extern void _ZN7S7681C23v18Ev();
static  VTBL_ENTRY _tg__ZTV7S7681C28S7681C12__8S7681C10[] = {
  ABISELECT(320,204),
  0,
  (VTBL_ENTRY)&(_ZTI7S7681C2[0]),
  (VTBL_ENTRY)&_ZN7S7681C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7681C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v15Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v16Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v17Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v18Ev,
};
extern void _ZN7S7681C32v8Ev();
extern void _ZN7S7681C32v9Ev();
extern void _ZN7S7681C33v10Ev();
extern void _ZN7S7681C33v11Ev();
static  VTBL_ENTRY _tg__ZTV7S7681C3__7S7681C28S7681C12__8S7681C10[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-320,-204),
  (VTBL_ENTRY)&(_ZTI7S7681C2[0]),
  (VTBL_ENTRY)&_ZN7S7681C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7681C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v11Ev,
};
extern void _ZN8S7681C133v42Ev();
extern void _ZN8S7681C133v43Ev();
extern void _ZN8S7681C133v44Ev();
extern void _ZN8S7681C133v45Ev();
extern void _ZN8S7681C133v46Ev();
static  VTBL_ENTRY _tg__ZTV8S7681C13__8S7681C12__8S7681C10[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(192,120),
  ABISELECT(32,12),
  ABISELECT(-288,-192),
  (VTBL_ENTRY)&(_ZTI8S7681C12[0]),
  (VTBL_ENTRY)&_ZN8S7681C133v42Ev,
  (VTBL_ENTRY)&_ZN8S7681C133v43Ev,
  (VTBL_ENTRY)&_ZN8S7681C133v44Ev,
  (VTBL_ENTRY)&_ZN8S7681C133v45Ev,
  (VTBL_ENTRY)&_ZN8S7681C133v46Ev,
};
extern void _ZN7S7681C32v8Ev();
extern void _ZN7S7681C32v9Ev();
extern void _ZN7S7681C33v10Ev();
extern void _ZN7S7681C33v11Ev();
static  VTBL_ENTRY _tg__ZTV7S7681C3__8S7681C12__8S7681C10[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-320,-204),
  (VTBL_ENTRY)&(_ZTI8S7681C12[0]),
  (VTBL_ENTRY)&_ZN7S7681C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7681C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v11Ev,
};
extern void _ZN7S7681C32v8Ev();
extern void _ZN7S7681C32v9Ev();
extern void _ZN7S7681C33v10Ev();
extern void _ZN7S7681C33v11Ev();
extern void _ZN7S7681C43v12Ev();
extern void _ZN7S7681C43v13Ev();
extern void _ZN7S7681C43v14Ev();
static  VTBL_ENTRY _tg__ZTV7S7681C4__8S7681C12__8S7681C10[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-480,-312),
  (VTBL_ENTRY)&(_ZTI8S7681C12[0]),
  (VTBL_ENTRY)&_ZN7S7681C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7681C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v14Ev,
};
extern void _ZN8S7681C133v42Ev();
extern void _ZN8S7681C133v43Ev();
extern void _ZN8S7681C133v44Ev();
extern void _ZN8S7681C133v45Ev();
extern void _ZN8S7681C133v46Ev();
static  VTBL_ENTRY _tg__ZTV8S7681C13__8S7681C10[] = {
  ABISELECT(192,120),
  ABISELECT(32,12),
  0,
  (VTBL_ENTRY)&(_ZTI8S7681C13[0]),
  (VTBL_ENTRY)&_ZN8S7681C133v42Ev,
  (VTBL_ENTRY)&_ZN8S7681C133v43Ev,
  (VTBL_ENTRY)&_ZN8S7681C133v44Ev,
  (VTBL_ENTRY)&_ZN8S7681C133v45Ev,
  (VTBL_ENTRY)&_ZN8S7681C133v46Ev,
};
extern void _ZN7S7681C32v8Ev();
extern void _ZN7S7681C32v9Ev();
extern void _ZN7S7681C33v10Ev();
extern void _ZN7S7681C33v11Ev();
static  VTBL_ENTRY _tg__ZTV7S7681C3__8S7681C13__8S7681C10[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-32,-12),
  (VTBL_ENTRY)&(_ZTI8S7681C13[0]),
  (VTBL_ENTRY)&_ZN7S7681C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7681C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v11Ev,
};
extern void _ZN7S7681C32v8Ev();
extern void _ZN7S7681C32v9Ev();
extern void _ZN7S7681C33v10Ev();
extern void _ZN7S7681C33v11Ev();
extern void _ZN7S7681C43v12Ev();
extern void _ZN7S7681C43v13Ev();
extern void _ZN7S7681C43v14Ev();
static  VTBL_ENTRY _tg__ZTV7S7681C4__8S7681C13__8S7681C10[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-192,-120),
  (VTBL_ENTRY)&(_ZTI8S7681C13[0]),
  (VTBL_ENTRY)&_ZN7S7681C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7681C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v14Ev,
};
static  VTT_ENTRY vtt_S7681C10[] = {
  {&(_ZTV8S7681C10[9]),  9,171},
  {&(_tg__ZTV8S7681C12__A__8S7681C10[5]),  5,20},
  {&(_tg__ZTV7S7681C28S7681C12__A1__8S7681C10[3]),  3,14},
  {&(_tg__ZTV7S7681C3__7S7681C28S7681C12__A1__8S7681C10[6]),  6,10},
  {&(_tg__ZTV8S7681C13__8S7681C12__A__8S7681C10[9]),  9,14},
  {&(_tg__ZTV7S7681C3__8S7681C12__A__8S7681C10[6]),  6,10},
  {&(_tg__ZTV7S7681C4__8S7681C12__A__8S7681C10[9]),  9,16},
  {&(_tg__ZTV8S7681C15__8S7681C10[6]),  6,19},
  {&(_tg__ZTV7S7681C3__8S7681C15__8S7681C10[6]),  6,10},
  {&(_tg__ZTV8S7681C13__8S7681C15__8S7681C10[9]),  9,14},
  {&(_tg__ZTV7S7681C4__8S7681C15__8S7681C10[9]),  9,16},
  {&(_tg__ZTV7S7681C9__8S7681C15__8S7681C10[11]),  11,20},
  {&(_ZTV8S7681C10[59]),  59,171},
  {&(_ZTV8S7681C10[72]),  72,171},
  {&(_ZTV8S7681C10[96]),  96,171},
  {&(_ZTV8S7681C10[120]),  120,171},
  {&(_ZTV8S7681C10[131]),  131,171},
  {&(_ZTV8S7681C10[144]),  144,171},
  {&(_ZTV8S7681C10[40]),  40,171},
  {&(_ZTV8S7681C10[162]),  162,171},
  {&(_tg__ZTV8S7681C11__8S7681C10[6]),  6,10},
  {&(_tg__ZTV8S7681C12__8S7681C11__8S7681C10[20]),  20,35},
  {&(_tg__ZTV8S7681C13__8S7681C11__8S7681C10[9]),  9,14},
  {&(_tg__ZTV7S7681C3__8S7681C11__8S7681C10[6]),  6,10},
  {&(_tg__ZTV7S7681C4__8S7681C11__8S7681C10[9]),  9,16},
  {&(_tg__ZTV8S7681C12__8S7681C10[5]),  5,20},
  {&(_tg__ZTV7S7681C28S7681C12__8S7681C10[3]),  3,14},
  {&(_tg__ZTV7S7681C3__7S7681C28S7681C12__8S7681C10[6]),  6,10},
  {&(_tg__ZTV8S7681C13__8S7681C12__8S7681C10[9]),  9,14},
  {&(_tg__ZTV7S7681C3__8S7681C12__8S7681C10[6]),  6,10},
  {&(_tg__ZTV7S7681C4__8S7681C12__8S7681C10[9]),  9,16},
  {&(_tg__ZTV8S7681C13__8S7681C10[4]),  4,9},
  {&(_tg__ZTV7S7681C3__8S7681C13__8S7681C10[6]),  6,10},
  {&(_tg__ZTV7S7681C4__8S7681C13__8S7681C10[9]),  9,16},
};
extern VTBL_ENTRY _ZTI8S7681C10[];
extern  VTBL_ENTRY _ZTV8S7681C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7681C10[];
static VTBL_ENTRY alt_thunk_names11[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S7681C10D0Ev,_ZTv0_n28_N8S7681C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn552_N8S7681C10D0Ev,_ZThn372_N8S7681C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S7681C10D1Ev,_ZTv0_n28_N8S7681C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn552_N8S7681C10D1Ev,_ZThn372_N8S7681C10D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7681C10 = {  "S7681C10", // class name
  bases_S7681C10, 18,
  &(vtc_S7681C10[0]), // expected_vtbl_contents
  &(vtt_S7681C10[0]), // expected_vtt_contents
  ABISELECT(2720,1748), // object size
  NSPAIRA(_ZTI8S7681C10),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S7681C10),171, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7681C10),34, //virtual table table var
  18, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names11,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7681C7  : virtual S7681C8 , S7681C9 , S7681C10 {
  int s7681c7f0[5];
  int s7681c7f1:15;
  virtual  ~S7681C7(); // _ZN7S7681C7D2Ev
  S7681C7(); // tgen
};
//SIG(-1 S7681C7) C1{ VBC2{ v1 v2 v3 v4} BC3{ v5 v6 v7 v8 v9 v10 v11 v12 v13 FC4{ BC5{ v14 v15 v16 v17 Fs:13 Fp FD[8]} v18 v19 v20 Fp[6]}[7]} BC6{ VBC2 VBC7{ VBC8{ VBC9{ VBC5 VBC4 v21 v22 v23 v24 v25 Fp[2]} BC10{ VBC5 BC4 v26 v27 v28 v29 Fp} v30 v31 v32 v33 FL[5] FC11{} FD} vd v34 v35} BC8 BC12{ VBC5 VBC9 VBC3 BC4 vd v36 v37 v38 v39 Fi} vd v40 v41 v42 v43 v44 v45 v46 v47 Fi[8] Fc Fl} vd Fi[5] Fi:15}


 S7681C7 ::~S7681C7(){ note_dtor("S7681C7", this);}
S7681C7 ::S7681C7(){ note_ctor("S7681C7", this);} // tgen

static void Test_S7681C7()
{
  extern Class_Descriptor cd_S7681C7;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(265,676)];
    init_test(&cd_S7681C7, buf);
    S7681C7 *dp, &lv = *(dp=new (buf) S7681C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(4224,2700), "sizeof(S7681C7)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7681C7)");
    check_base_class_offset(lv, (S7681C8*), ABISELECT(2040,1320), "S7681C7");
    check_base_class_offset(lv, (S7681C8*)(S7681C10*), ABISELECT(2040,1320), "S7681C7");
    /*is_ambiguous_... S7681C7::S7681C9 */ AMB_check_base_class_offset(lv, (S7681C9*), 0, "S7681C7");
    /*is_ambiguous_... S7681C13::S7681C3 */ AMB_check_base_class_offset(lv, (S7681C3*)(S7681C13*), ABISELECT(2384,1532), "S7681C7");
    /*is_ambiguous_... S7681C7::S7681C12 */ AMB_check_base_class_offset(lv, (S7681C3*)(S7681C2*)(S7681C12*), ABISELECT(2384,1532), "S7681C7");
    /*is_ambiguous_... S7681C10::S7681C12 */ AMB_check_base_class_offset(lv, (S7681C3*)(S7681C2*)(S7681C12*)(S7681C10*), ABISELECT(2384,1532), "S7681C7");
    /*is_ambiguous_... S7681C15::S7681C3 */ AMB_check_base_class_offset(lv, (S7681C3*)(S7681C15*)(S7681C10*), ABISELECT(2384,1532), "S7681C7");
    /*is_ambiguous_... S7681C7::S7681C4 */ AMB_check_base_class_offset(lv, (S7681C3*)(S7681C4*), ABISELECT(2544,1640), "S7681C7");
    check_base_class_offset(lv, (S7681C4*)(S7681C13*), ABISELECT(2544,1640), "S7681C7");
    /*is_ambiguous_... S7681C7::S7681C12 */ AMB_check_base_class_offset(lv, (S7681C13*)(S7681C12*), ABISELECT(2352,1520), "S7681C7");
    /*is_ambiguous_... S7681C10::S7681C12 */ AMB_check_base_class_offset(lv, (S7681C13*)(S7681C12*)(S7681C10*), ABISELECT(2352,1520), "S7681C7");
    check_base_class_offset(lv, (S7681C13*)(S7681C15*)(S7681C10*), ABISELECT(2352,1520), "S7681C7");
    /*is_ambiguous_... S7681C7::S7681C12 */ AMB_check_base_class_offset(lv, (S7681C3*)(S7681C4*)(S7681C2*)(S7681C12*), ABISELECT(2064,1328), "S7681C7");
    /*is_ambiguous_... S7681C7::S7681C12 */ AMB_check_base_class_offset(lv, (S7681C4*)(S7681C2*)(S7681C12*), ABISELECT(2064,1328), "S7681C7");
    /*is_ambiguous_... S7681C7::S7681C12 */ AMB_check_base_class_offset(lv, (S7681C2*)(S7681C12*), ABISELECT(2064,1328), "S7681C7");
    check_base_class_offset(lv, (S7681C12*)(S7681C11*), ABISELECT(2064,1328), "S7681C7");
    check_base_class_offset(lv, (S7681C11*)(S7681C10*), ABISELECT(2048,1324), "S7681C7");
    /*is_ambiguous_... S7681C10::S7681C12 */ AMB_check_base_class_offset(lv, (S7681C3*)(S7681C4*)(S7681C2*)(S7681C12*)(S7681C10*), ABISELECT(1472,928), "S7681C7");
    /*is_ambiguous_... S7681C10::S7681C12 */ AMB_check_base_class_offset(lv, (S7681C4*)(S7681C2*)(S7681C12*)(S7681C10*), ABISELECT(1472,928), "S7681C7");
    /*is_ambiguous_... S7681C10::S7681C12 */ AMB_check_base_class_offset(lv, (S7681C2*)(S7681C12*)(S7681C10*), ABISELECT(1472,928), "S7681C7");
    /*is_ambiguous_... S7681C10::S7681C12 */ AMB_check_base_class_offset(lv, (S7681C12*)(S7681C10*), ABISELECT(1472,928), "S7681C7");
    check_base_class_offset(lv, (S7681C9*)(S7681C15*)(S7681C10*), ABISELECT(2752,1772), "S7681C7");
    /*is_ambiguous_... S7681C15::S7681C4 */ AMB_check_base_class_offset(lv, (S7681C3*)(S7681C4*)(S7681C15*)(S7681C10*), ABISELECT(1760,1120), "S7681C7");
    /*is_ambiguous_... S7681C15::S7681C4 */ AMB_check_base_class_offset(lv, (S7681C4*)(S7681C15*)(S7681C10*), ABISELECT(1760,1120), "S7681C7");
    check_base_class_offset(lv, (S7681C15*)(S7681C10*), ABISELECT(1760,1120), "S7681C7");
    check_base_class_offset(lv, (S7681C10*), ABISELECT(1472,928), "S7681C7");
    check_field_offset(lv, s7681c7f0, ABISELECT(2016,1296), "S7681C7.s7681c7f0");
    set_bf_and_test(lv, s7681c7f1, ABISELECT(2036,1316), 0, 15, 1, "S7681C7");
    set_bf_and_test(lv, s7681c7f1, ABISELECT(2036,1316), 0, 15, hide_sll(1LL<<14), "S7681C7");
    test_class_info(&lv, &cd_S7681C7);
    dp->~S7681C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7681C7(Test_S7681C7, "S7681C7", ABISELECT(4224,2700));

#else // __cplusplus

extern void _ZN7S7681C7C1Ev();
extern void _ZN7S7681C7D2Ev();
Name_Map name_map_S7681C7[] = {
  NSPAIR(_ZN7S7681C7C1Ev),
  NSPAIR(_ZN7S7681C7D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7681C8;
extern VTBL_ENTRY _ZTI7S7681C8[];
extern  VTBL_ENTRY _ZTV7S7681C8[];
extern Class_Descriptor cd_S7681C9;
extern VTBL_ENTRY _ZTI7S7681C9[];
extern  VTBL_ENTRY _ZTV7S7681C9[];
extern Class_Descriptor cd_S7681C3;
extern VTBL_ENTRY _ZTI7S7681C3[];
extern  VTBL_ENTRY _ZTV7S7681C3[];
extern Class_Descriptor cd_S7681C3;
extern VTBL_ENTRY _ZTI7S7681C3[];
extern  VTBL_ENTRY _ZTV7S7681C3[];
extern Class_Descriptor cd_S7681C4;
extern VTBL_ENTRY _ZTI7S7681C4[];
extern  VTBL_ENTRY _ZTV7S7681C4[];
extern Class_Descriptor cd_S7681C13;
extern VTBL_ENTRY _ZTI8S7681C13[];
extern  VTBL_ENTRY _ZTV8S7681C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7681C13[];
extern Class_Descriptor cd_S7681C3;
extern VTBL_ENTRY _ZTI7S7681C3[];
extern  VTBL_ENTRY _ZTV7S7681C3[];
extern Class_Descriptor cd_S7681C4;
extern VTBL_ENTRY _ZTI7S7681C4[];
extern  VTBL_ENTRY _ZTV7S7681C4[];
extern Class_Descriptor cd_S7681C2;
extern VTBL_ENTRY _ZTI7S7681C2[];
extern  VTBL_ENTRY _ZTV7S7681C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7681C2[];
extern Class_Descriptor cd_S7681C12;
extern VTBL_ENTRY _ZTI8S7681C12[];
extern  VTBL_ENTRY _ZTV8S7681C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7681C12[];
extern Class_Descriptor cd_S7681C11;
extern VTBL_ENTRY _ZTI8S7681C11[];
extern  VTBL_ENTRY _ZTV8S7681C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7681C11[];
extern Class_Descriptor cd_S7681C3;
extern VTBL_ENTRY _ZTI7S7681C3[];
extern  VTBL_ENTRY _ZTV7S7681C3[];
extern Class_Descriptor cd_S7681C4;
extern VTBL_ENTRY _ZTI7S7681C4[];
extern  VTBL_ENTRY _ZTV7S7681C4[];
extern Class_Descriptor cd_S7681C2;
extern VTBL_ENTRY _ZTI7S7681C2[];
extern  VTBL_ENTRY _ZTV7S7681C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7681C2[];
extern Class_Descriptor cd_S7681C12;
extern VTBL_ENTRY _ZTI8S7681C12[];
extern  VTBL_ENTRY _ZTV8S7681C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7681C12[];
extern Class_Descriptor cd_S7681C9;
extern VTBL_ENTRY _ZTI7S7681C9[];
extern  VTBL_ENTRY _ZTV7S7681C9[];
extern Class_Descriptor cd_S7681C3;
extern VTBL_ENTRY _ZTI7S7681C3[];
extern  VTBL_ENTRY _ZTV7S7681C3[];
extern Class_Descriptor cd_S7681C4;
extern VTBL_ENTRY _ZTI7S7681C4[];
extern  VTBL_ENTRY _ZTV7S7681C4[];
extern Class_Descriptor cd_S7681C15;
extern VTBL_ENTRY _ZTI8S7681C15[];
extern  VTBL_ENTRY _ZTV8S7681C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7681C15[];
extern Class_Descriptor cd_S7681C10;
extern VTBL_ENTRY _ZTI8S7681C10[];
extern  VTBL_ENTRY _ZTV8S7681C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7681C10[];
static Base_Class bases_S7681C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7681C8,    ABISELECT(2040,1320), //bcp->offset
    73, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    22, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7681C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7681C3,    ABISELECT(2384,1532), //bcp->offset
    145, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    27, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S7681C3,    ABISELECT(2544,1640), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S7681C4,    ABISELECT(2544,1640), //bcp->offset
    155, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    28, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S7681C13,    ABISELECT(2352,1520), //bcp->offset
    131, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    26, //bcp->index_in_construction_vtbl_array
    42, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S7681C3,    ABISELECT(2064,1328), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S7681C4,    ABISELECT(2064,1328), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S7681C2,    ABISELECT(2064,1328), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    37, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S7681C12,    ABISELECT(2064,1328), //bcp->offset
    96, //bcp->virtual_function_table_offset
    20, //num_negative_vtable_entries(t, bcp)
    25, //bcp->index_in_construction_vtbl_array
    36, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S7681C11,    ABISELECT(2048,1324), //bcp->offset
    83, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    24, //bcp->index_in_construction_vtbl_array
    31, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    19, //immediately_derived
  0, 1},
  {&cd_S7681C3,    ABISELECT(1472,928), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S7681C4,    ABISELECT(1472,928), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S7681C2,    ABISELECT(1472,928), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S7681C12,    ABISELECT(1472,928), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S7681C9,    ABISELECT(2752,1772), //bcp->offset
    171, //bcp->virtual_function_table_offset
    11, //num_negative_vtable_entries(t, bcp)
    30, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    18, //immediately_derived
  0, 1},
  {&cd_S7681C3,    ABISELECT(1760,1120), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S7681C4,    ABISELECT(1760,1120), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S7681C15,    ABISELECT(1760,1120), //bcp->offset
    54, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    29, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S7681C10,    ABISELECT(1472,928), //bcp->offset
    20, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    23, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    20, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7681C7[];
extern void _ZN7S7681C93v33Ev();
extern void _ZN7S7681C93v34Ev();
extern void _ZN7S7681C93v35Ev();
extern void _ZN7S7681C93v36Ev();
extern void _ZN7S7681C93v37Ev();
extern void _ZN7S7681C93v38Ev();
extern void _ZN7S7681C93v39Ev();
extern void _ZN7S7681C93v40Ev();
extern void _ZN7S7681C93v41Ev();
extern void _ZN7S7681C7D1Ev();
extern void _ZN7S7681C7D0Ev();
extern void _ZN7S7681C32v8Ev();
extern void _ZN7S7681C32v9Ev();
extern void _ZN7S7681C33v10Ev();
extern void _ZN7S7681C33v11Ev();
extern void _ZN7S7681C43v12Ev();
extern void _ZN7S7681C43v13Ev();
extern void _ZN7S7681C43v14Ev();
extern void _ZN7S7681C23v15Ev();
extern void _ZN7S7681C23v16Ev();
extern void _ZN7S7681C23v17Ev();
extern void _ZN7S7681C23v18Ev();
extern void _ZN8S7681C123v47Ev();
extern void _ZN8S7681C123v48Ev();
extern void _ZN8S7681C123v49Ev();
extern void _ZN8S7681C123v50Ev();
extern void ABISELECT(_ZThn1472_N7S7681C7D1Ev,_ZThn928_N7S7681C7D1Ev)();
extern void ABISELECT(_ZThn1472_N7S7681C7D0Ev,_ZThn928_N7S7681C7D0Ev)();
extern void _ZN8S7681C103v57Ev();
extern void _ZN8S7681C103v58Ev();
extern void _ZN8S7681C103v59Ev();
extern void _ZN8S7681C103v60Ev();
extern void _ZN8S7681C103v61Ev();
extern void _ZN8S7681C103v62Ev();
extern void _ZN8S7681C103v63Ev();
extern void _ZN8S7681C103v64Ev();
extern void _ZN7S7681C32v8Ev();
extern void _ZN7S7681C32v9Ev();
extern void _ZN7S7681C33v10Ev();
extern void _ZN7S7681C33v11Ev();
extern void _ZN7S7681C43v12Ev();
extern void _ZN7S7681C43v13Ev();
extern void _ZN7S7681C43v14Ev();
extern void ABISELECT(_ZThn1760_N7S7681C7D1Ev,_ZThn1120_N7S7681C7D1Ev)();
extern void ABISELECT(_ZThn1760_N7S7681C7D0Ev,_ZThn1120_N7S7681C7D0Ev)();
extern void _ZN8S7681C153v53Ev();
extern void _ZN8S7681C153v54Ev();
extern void _ZN8S7681C153v55Ev();
extern void _ZN8S7681C153v56Ev();
extern void _ZN7S7681C83v29Ev();
extern void _ZN7S7681C83v30Ev();
extern void _ZN7S7681C83v31Ev();
extern void _ZN7S7681C83v32Ev();
extern void ABISELECT(_ZTv0_n56_N7S7681C7D1Ev,_ZTv0_n28_N7S7681C7D1Ev)();
extern void ABISELECT(_ZThn2048_N7S7681C7D1Ev,_ZThn1324_N7S7681C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N7S7681C7D0Ev,_ZTv0_n28_N7S7681C7D0Ev)();
extern void ABISELECT(_ZThn2048_N7S7681C7D0Ev,_ZThn1324_N7S7681C7D0Ev)() __attribute__((weak));
extern void _ZN8S7681C113v51Ev();
extern void _ZN8S7681C113v52Ev();
extern void _ZN7S7681C32v8Ev();
extern void _ZN7S7681C32v9Ev();
extern void _ZN7S7681C33v10Ev();
extern void _ZN7S7681C33v11Ev();
extern void _ZN7S7681C43v12Ev();
extern void _ZN7S7681C43v13Ev();
extern void _ZN7S7681C43v14Ev();
extern void _ZN7S7681C23v15Ev();
extern void _ZN7S7681C23v16Ev();
extern void _ZN7S7681C23v17Ev();
extern void _ZN7S7681C23v18Ev();
extern void _ZN8S7681C123v47Ev();
extern void _ZN8S7681C123v48Ev();
extern void _ZN8S7681C123v49Ev();
extern void _ZN8S7681C123v50Ev();
extern void _ZN8S7681C133v42Ev();
extern void _ZN8S7681C133v43Ev();
extern void _ZN8S7681C133v44Ev();
extern void _ZN8S7681C133v45Ev();
extern void _ZN8S7681C133v46Ev();
extern void _ZN7S7681C32v8Ev();
extern void _ZN7S7681C32v9Ev();
extern void _ZN7S7681C33v10Ev();
extern void _ZN7S7681C33v11Ev();
extern void _ZN7S7681C32v8Ev();
extern void _ZN7S7681C32v9Ev();
extern void _ZN7S7681C33v10Ev();
extern void _ZN7S7681C33v11Ev();
extern void _ZN7S7681C43v12Ev();
extern void _ZN7S7681C43v13Ev();
extern void _ZN7S7681C43v14Ev();
extern void _ZN7S7681C93v33Ev();
extern void _ZN7S7681C93v34Ev();
extern void _ZN7S7681C93v35Ev();
extern void _ZN7S7681C93v36Ev();
extern void _ZN7S7681C93v37Ev();
extern void _ZN7S7681C93v38Ev();
extern void _ZN7S7681C93v39Ev();
extern void _ZN7S7681C93v40Ev();
extern void _ZN7S7681C93v41Ev();
static  VTBL_ENTRY vtc_S7681C7[] = {
  ABISELECT(2752,1772),
  ABISELECT(2544,1640),
  ABISELECT(2384,1532),
  ABISELECT(2352,1520),
  ABISELECT(2064,1328),
  ABISELECT(2048,1324),
  ABISELECT(2040,1320),
  0,
  (VTBL_ENTRY)&(_ZTI7S7681C7[0]),
  (VTBL_ENTRY)&_ZN7S7681C93v33Ev,
  (VTBL_ENTRY)&_ZN7S7681C93v34Ev,
  (VTBL_ENTRY)&_ZN7S7681C93v35Ev,
  (VTBL_ENTRY)&_ZN7S7681C93v36Ev,
  (VTBL_ENTRY)&_ZN7S7681C93v37Ev,
  (VTBL_ENTRY)&_ZN7S7681C93v38Ev,
  (VTBL_ENTRY)&_ZN7S7681C93v39Ev,
  (VTBL_ENTRY)&_ZN7S7681C93v40Ev,
  (VTBL_ENTRY)&_ZN7S7681C93v41Ev,
  (VTBL_ENTRY)&_ZN7S7681C7D1Ev,
  (VTBL_ENTRY)&_ZN7S7681C7D0Ev,
  ABISELECT(1280,844),
  ABISELECT(592,400),
  ABISELECT(576,396),
  ABISELECT(568,392),
  ABISELECT(1072,712),
  ABISELECT(880,592),
  ABISELECT(912,604),
  ABISELECT(-1472,-928),
  (VTBL_ENTRY)&(_ZTI7S7681C7[0]),
  (VTBL_ENTRY)&_ZN7S7681C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7681C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v15Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v16Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v17Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v18Ev,
  (VTBL_ENTRY)&_ZN8S7681C123v47Ev,
  (VTBL_ENTRY)&_ZN8S7681C123v48Ev,
  (VTBL_ENTRY)&_ZN8S7681C123v49Ev,
  (VTBL_ENTRY)&_ZN8S7681C123v50Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn1472_N7S7681C7D1Ev,_ZThn928_N7S7681C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1472_N7S7681C7D0Ev,_ZThn928_N7S7681C7D0Ev),
  (VTBL_ENTRY)&_ZN8S7681C103v57Ev,
  (VTBL_ENTRY)&_ZN8S7681C103v58Ev,
  (VTBL_ENTRY)&_ZN8S7681C103v59Ev,
  (VTBL_ENTRY)&_ZN8S7681C103v60Ev,
  (VTBL_ENTRY)&_ZN8S7681C103v61Ev,
  (VTBL_ENTRY)&_ZN8S7681C103v62Ev,
  (VTBL_ENTRY)&_ZN8S7681C103v63Ev,
  (VTBL_ENTRY)&_ZN8S7681C103v64Ev,
  ABISELECT(992,652),
  ABISELECT(784,520),
  ABISELECT(592,400),
  ABISELECT(624,412),
  ABISELECT(-1760,-1120),
  (VTBL_ENTRY)&(_ZTI7S7681C7[0]),
  (VTBL_ENTRY)&_ZN7S7681C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7681C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v14Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn1760_N7S7681C7D1Ev,_ZThn1120_N7S7681C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1760_N7S7681C7D0Ev,_ZThn1120_N7S7681C7D0Ev),
  (VTBL_ENTRY)&_ZN8S7681C153v53Ev,
  (VTBL_ENTRY)&_ZN8S7681C153v54Ev,
  (VTBL_ENTRY)&_ZN8S7681C153v55Ev,
  (VTBL_ENTRY)&_ZN8S7681C153v56Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-2040,-1320),
  (VTBL_ENTRY)&(_ZTI7S7681C7[0]),
  (VTBL_ENTRY)&_ZN7S7681C83v29Ev,
  (VTBL_ENTRY)&_ZN7S7681C83v30Ev,
  (VTBL_ENTRY)&_ZN7S7681C83v31Ev,
  (VTBL_ENTRY)&_ZN7S7681C83v32Ev,
  0,
  0,
  ABISELECT(-2048,-1324),
  ABISELECT(496,316),
  ABISELECT(336,208),
  ABISELECT(304,196),
  ABISELECT(16,4),
  ABISELECT(-2048,-1324),
  (VTBL_ENTRY)&(_ZTI7S7681C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N7S7681C7D1Ev,_ZTv0_n28_N7S7681C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N7S7681C7D0Ev,_ZTv0_n28_N7S7681C7D0Ev),
  (VTBL_ENTRY)&_ZN8S7681C113v51Ev,
  (VTBL_ENTRY)&_ZN8S7681C113v52Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(480,312),
  ABISELECT(288,192),
  ABISELECT(320,204),
  ABISELECT(-2064,-1328),
  (VTBL_ENTRY)&(_ZTI7S7681C7[0]),
  (VTBL_ENTRY)&_ZN7S7681C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7681C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v15Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v16Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v17Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v18Ev,
  (VTBL_ENTRY)&_ZN8S7681C123v47Ev,
  (VTBL_ENTRY)&_ZN8S7681C123v48Ev,
  (VTBL_ENTRY)&_ZN8S7681C123v49Ev,
  (VTBL_ENTRY)&_ZN8S7681C123v50Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(192,120),
  ABISELECT(32,12),
  ABISELECT(-2352,-1520),
  (VTBL_ENTRY)&(_ZTI7S7681C7[0]),
  (VTBL_ENTRY)&_ZN8S7681C133v42Ev,
  (VTBL_ENTRY)&_ZN8S7681C133v43Ev,
  (VTBL_ENTRY)&_ZN8S7681C133v44Ev,
  (VTBL_ENTRY)&_ZN8S7681C133v45Ev,
  (VTBL_ENTRY)&_ZN8S7681C133v46Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-2384,-1532),
  (VTBL_ENTRY)&(_ZTI7S7681C7[0]),
  (VTBL_ENTRY)&_ZN7S7681C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7681C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v11Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-2544,-1640),
  (VTBL_ENTRY)&(_ZTI7S7681C7[0]),
  (VTBL_ENTRY)&_ZN7S7681C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7681C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v14Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-2752,-1772),
  (VTBL_ENTRY)&(_ZTI7S7681C7[0]),
  (VTBL_ENTRY)&_ZN7S7681C93v33Ev,
  (VTBL_ENTRY)&_ZN7S7681C93v34Ev,
  (VTBL_ENTRY)&_ZN7S7681C93v35Ev,
  (VTBL_ENTRY)&_ZN7S7681C93v36Ev,
  (VTBL_ENTRY)&_ZN7S7681C93v37Ev,
  (VTBL_ENTRY)&_ZN7S7681C93v38Ev,
  (VTBL_ENTRY)&_ZN7S7681C93v39Ev,
  (VTBL_ENTRY)&_ZN7S7681C93v40Ev,
  (VTBL_ENTRY)&_ZN7S7681C93v41Ev,
};
extern VTBL_ENTRY _ZTV7S7681C7[];
extern void _ZN7S7681C32v8Ev();
extern void _ZN7S7681C32v9Ev();
extern void _ZN7S7681C33v10Ev();
extern void _ZN7S7681C33v11Ev();
extern void _ZN7S7681C43v12Ev();
extern void _ZN7S7681C43v13Ev();
extern void _ZN7S7681C43v14Ev();
extern void _ZN7S7681C23v15Ev();
extern void _ZN7S7681C23v16Ev();
extern void _ZN7S7681C23v17Ev();
extern void _ZN7S7681C23v18Ev();
extern void _ZN8S7681C123v47Ev();
extern void _ZN8S7681C123v48Ev();
extern void _ZN8S7681C123v49Ev();
extern void _ZN8S7681C123v50Ev();
extern void _ZN8S7681C10D1Ev();
extern void _ZN8S7681C10D0Ev();
extern void _ZN8S7681C103v57Ev();
extern void _ZN8S7681C103v58Ev();
extern void _ZN8S7681C103v59Ev();
extern void _ZN8S7681C103v60Ev();
extern void _ZN8S7681C103v61Ev();
extern void _ZN8S7681C103v62Ev();
extern void _ZN8S7681C103v63Ev();
extern void _ZN8S7681C103v64Ev();
static  VTBL_ENTRY _tg__ZTV8S7681C10__7S7681C7[] = {
  ABISELECT(1280,844),
  ABISELECT(592,400),
  ABISELECT(576,396),
  ABISELECT(568,392),
  ABISELECT(1072,712),
  ABISELECT(880,592),
  ABISELECT(912,604),
  0,
  (VTBL_ENTRY)&(_ZTI8S7681C10[0]),
  (VTBL_ENTRY)&_ZN7S7681C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7681C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v15Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v16Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v17Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v18Ev,
  (VTBL_ENTRY)&_ZN8S7681C123v47Ev,
  (VTBL_ENTRY)&_ZN8S7681C123v48Ev,
  (VTBL_ENTRY)&_ZN8S7681C123v49Ev,
  (VTBL_ENTRY)&_ZN8S7681C123v50Ev,
  (VTBL_ENTRY)&_ZN8S7681C10D1Ev,
  (VTBL_ENTRY)&_ZN8S7681C10D0Ev,
  (VTBL_ENTRY)&_ZN8S7681C103v57Ev,
  (VTBL_ENTRY)&_ZN8S7681C103v58Ev,
  (VTBL_ENTRY)&_ZN8S7681C103v59Ev,
  (VTBL_ENTRY)&_ZN8S7681C103v60Ev,
  (VTBL_ENTRY)&_ZN8S7681C103v61Ev,
  (VTBL_ENTRY)&_ZN8S7681C103v62Ev,
  (VTBL_ENTRY)&_ZN8S7681C103v63Ev,
  (VTBL_ENTRY)&_ZN8S7681C103v64Ev,
};
extern void _ZN7S7681C32v8Ev();
extern void _ZN7S7681C32v9Ev();
extern void _ZN7S7681C33v10Ev();
extern void _ZN7S7681C33v11Ev();
extern void _ZN7S7681C43v12Ev();
extern void _ZN7S7681C43v13Ev();
extern void _ZN7S7681C43v14Ev();
extern void _ZN7S7681C23v15Ev();
extern void _ZN7S7681C23v16Ev();
extern void _ZN7S7681C23v17Ev();
extern void _ZN7S7681C23v18Ev();
extern void _ZN8S7681C123v47Ev();
extern void _ZN8S7681C123v48Ev();
extern void _ZN8S7681C123v49Ev();
extern void _ZN8S7681C123v50Ev();
static  VTBL_ENTRY _tg__ZTV8S7681C128S7681C10__A1__7S7681C7[] = {
  ABISELECT(1072,712),
  ABISELECT(880,592),
  ABISELECT(912,604),
  0,
  (VTBL_ENTRY)&(_ZTI8S7681C12[0]),
  (VTBL_ENTRY)&_ZN7S7681C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7681C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v15Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v16Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v17Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v18Ev,
  (VTBL_ENTRY)&_ZN8S7681C123v47Ev,
  (VTBL_ENTRY)&_ZN8S7681C123v48Ev,
  (VTBL_ENTRY)&_ZN8S7681C123v49Ev,
  (VTBL_ENTRY)&_ZN8S7681C123v50Ev,
};
extern void _ZN7S7681C32v8Ev();
extern void _ZN7S7681C32v9Ev();
extern void _ZN7S7681C33v10Ev();
extern void _ZN7S7681C33v11Ev();
extern void _ZN7S7681C43v12Ev();
extern void _ZN7S7681C43v13Ev();
extern void _ZN7S7681C43v14Ev();
extern void _ZN7S7681C23v15Ev();
extern void _ZN7S7681C23v16Ev();
extern void _ZN7S7681C23v17Ev();
extern void _ZN7S7681C23v18Ev();
static  VTBL_ENTRY _tg__ZTV7S7681C28S7681C128S7681C10__A1__7S7681C7[] = {
  ABISELECT(912,604),
  0,
  (VTBL_ENTRY)&(_ZTI7S7681C2[0]),
  (VTBL_ENTRY)&_ZN7S7681C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7681C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v15Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v16Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v17Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v18Ev,
};
extern void _ZN7S7681C32v8Ev();
extern void _ZN7S7681C32v9Ev();
extern void _ZN7S7681C33v10Ev();
extern void _ZN7S7681C33v11Ev();
static  VTBL_ENTRY _tg__ZTV7S7681C3__7S7681C28S7681C128S7681C10__A1__7S7681C7[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-912,-604),
  (VTBL_ENTRY)&(_ZTI7S7681C2[0]),
  (VTBL_ENTRY)&_ZN7S7681C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7681C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v11Ev,
};
extern void _ZN8S7681C133v42Ev();
extern void _ZN8S7681C133v43Ev();
extern void _ZN8S7681C133v44Ev();
extern void _ZN8S7681C133v45Ev();
extern void _ZN8S7681C133v46Ev();
static  VTBL_ENTRY _tg__ZTV8S7681C13__8S7681C128S7681C10__A1__7S7681C7[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(192,120),
  ABISELECT(32,12),
  ABISELECT(-880,-592),
  (VTBL_ENTRY)&(_ZTI8S7681C12[0]),
  (VTBL_ENTRY)&_ZN8S7681C133v42Ev,
  (VTBL_ENTRY)&_ZN8S7681C133v43Ev,
  (VTBL_ENTRY)&_ZN8S7681C133v44Ev,
  (VTBL_ENTRY)&_ZN8S7681C133v45Ev,
  (VTBL_ENTRY)&_ZN8S7681C133v46Ev,
};
extern void _ZN7S7681C32v8Ev();
extern void _ZN7S7681C32v9Ev();
extern void _ZN7S7681C33v10Ev();
extern void _ZN7S7681C33v11Ev();
static  VTBL_ENTRY _tg__ZTV7S7681C3__8S7681C128S7681C10__A1__7S7681C7[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-912,-604),
  (VTBL_ENTRY)&(_ZTI8S7681C12[0]),
  (VTBL_ENTRY)&_ZN7S7681C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7681C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v11Ev,
};
extern void _ZN7S7681C32v8Ev();
extern void _ZN7S7681C32v9Ev();
extern void _ZN7S7681C33v10Ev();
extern void _ZN7S7681C33v11Ev();
extern void _ZN7S7681C43v12Ev();
extern void _ZN7S7681C43v13Ev();
extern void _ZN7S7681C43v14Ev();
static  VTBL_ENTRY _tg__ZTV7S7681C4__8S7681C128S7681C10__A1__7S7681C7[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-1072,-712),
  (VTBL_ENTRY)&(_ZTI8S7681C12[0]),
  (VTBL_ENTRY)&_ZN7S7681C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7681C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v14Ev,
};
extern void _ZN7S7681C32v8Ev();
extern void _ZN7S7681C32v9Ev();
extern void _ZN7S7681C33v10Ev();
extern void _ZN7S7681C33v11Ev();
extern void _ZN7S7681C43v12Ev();
extern void _ZN7S7681C43v13Ev();
extern void _ZN7S7681C43v14Ev();
extern void _ZN8S7681C15D1Ev();
extern void _ZN8S7681C15D0Ev();
extern void _ZN8S7681C153v53Ev();
extern void _ZN8S7681C153v54Ev();
extern void _ZN8S7681C153v55Ev();
extern void _ZN8S7681C153v56Ev();
static  VTBL_ENTRY _tg__ZTV8S7681C158S7681C10__7S7681C7[] = {
  ABISELECT(992,652),
  ABISELECT(784,520),
  ABISELECT(592,400),
  ABISELECT(624,412),
  0,
  (VTBL_ENTRY)&(_ZTI8S7681C15[0]),
  (VTBL_ENTRY)&_ZN7S7681C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7681C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v14Ev,
  (VTBL_ENTRY)&_ZN8S7681C15D1Ev,
  (VTBL_ENTRY)&_ZN8S7681C15D0Ev,
  (VTBL_ENTRY)&_ZN8S7681C153v53Ev,
  (VTBL_ENTRY)&_ZN8S7681C153v54Ev,
  (VTBL_ENTRY)&_ZN8S7681C153v55Ev,
  (VTBL_ENTRY)&_ZN8S7681C153v56Ev,
};
extern void _ZN7S7681C32v8Ev();
extern void _ZN7S7681C32v9Ev();
extern void _ZN7S7681C33v10Ev();
extern void _ZN7S7681C33v11Ev();
static  VTBL_ENTRY _tg__ZTV7S7681C3__8S7681C158S7681C10__7S7681C7[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-624,-412),
  (VTBL_ENTRY)&(_ZTI8S7681C15[0]),
  (VTBL_ENTRY)&_ZN7S7681C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7681C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v11Ev,
};
extern void _ZN8S7681C133v42Ev();
extern void _ZN8S7681C133v43Ev();
extern void _ZN8S7681C133v44Ev();
extern void _ZN8S7681C133v45Ev();
extern void _ZN8S7681C133v46Ev();
static  VTBL_ENTRY _tg__ZTV8S7681C13__8S7681C158S7681C10__7S7681C7[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(192,120),
  ABISELECT(32,12),
  ABISELECT(-592,-400),
  (VTBL_ENTRY)&(_ZTI8S7681C15[0]),
  (VTBL_ENTRY)&_ZN8S7681C133v42Ev,
  (VTBL_ENTRY)&_ZN8S7681C133v43Ev,
  (VTBL_ENTRY)&_ZN8S7681C133v44Ev,
  (VTBL_ENTRY)&_ZN8S7681C133v45Ev,
  (VTBL_ENTRY)&_ZN8S7681C133v46Ev,
};
extern void _ZN7S7681C32v8Ev();
extern void _ZN7S7681C32v9Ev();
extern void _ZN7S7681C33v10Ev();
extern void _ZN7S7681C33v11Ev();
extern void _ZN7S7681C43v12Ev();
extern void _ZN7S7681C43v13Ev();
extern void _ZN7S7681C43v14Ev();
static  VTBL_ENTRY _tg__ZTV7S7681C4__8S7681C158S7681C10__7S7681C7[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-784,-520),
  (VTBL_ENTRY)&(_ZTI8S7681C15[0]),
  (VTBL_ENTRY)&_ZN7S7681C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7681C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v14Ev,
};
extern void _ZN7S7681C93v33Ev();
extern void _ZN7S7681C93v34Ev();
extern void _ZN7S7681C93v35Ev();
extern void _ZN7S7681C93v36Ev();
extern void _ZN7S7681C93v37Ev();
extern void _ZN7S7681C93v38Ev();
extern void _ZN7S7681C93v39Ev();
extern void _ZN7S7681C93v40Ev();
extern void _ZN7S7681C93v41Ev();
static  VTBL_ENTRY _tg__ZTV7S7681C9__8S7681C158S7681C10__7S7681C7[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-992,-652),
  (VTBL_ENTRY)&(_ZTI8S7681C15[0]),
  (VTBL_ENTRY)&_ZN7S7681C93v33Ev,
  (VTBL_ENTRY)&_ZN7S7681C93v34Ev,
  (VTBL_ENTRY)&_ZN7S7681C93v35Ev,
  (VTBL_ENTRY)&_ZN7S7681C93v36Ev,
  (VTBL_ENTRY)&_ZN7S7681C93v37Ev,
  (VTBL_ENTRY)&_ZN7S7681C93v38Ev,
  (VTBL_ENTRY)&_ZN7S7681C93v39Ev,
  (VTBL_ENTRY)&_ZN7S7681C93v40Ev,
  (VTBL_ENTRY)&_ZN7S7681C93v41Ev,
};
extern void _ZN7S7681C83v29Ev();
extern void _ZN7S7681C83v30Ev();
extern void _ZN7S7681C83v31Ev();
extern void _ZN7S7681C83v32Ev();
static  VTBL_ENTRY _tg__ZTV7S7681C8__8S7681C10__7S7681C7[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-568,-392),
  (VTBL_ENTRY)&(_ZTI8S7681C10[0]),
  (VTBL_ENTRY)&_ZN7S7681C83v29Ev,
  (VTBL_ENTRY)&_ZN7S7681C83v30Ev,
  (VTBL_ENTRY)&_ZN7S7681C83v31Ev,
  (VTBL_ENTRY)&_ZN7S7681C83v32Ev,
};
extern void ABISELECT(_ZTv0_n56_N8S7681C10D1Ev,_ZTv0_n28_N8S7681C10D1Ev)();
extern void ABISELECT(_ZThn576_N8S7681C10D1Ev,_ZThn396_N8S7681C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S7681C10D0Ev,_ZTv0_n28_N8S7681C10D0Ev)();
extern void ABISELECT(_ZThn576_N8S7681C10D0Ev,_ZThn396_N8S7681C10D0Ev)() __attribute__((weak));
extern void _ZN8S7681C113v51Ev();
extern void _ZN8S7681C113v52Ev();
static  VTBL_ENTRY _tg__ZTV8S7681C11__8S7681C10__7S7681C7[] = {
  0,
  0,
  ABISELECT(-576,-396),
  ABISELECT(496,316),
  ABISELECT(336,208),
  ABISELECT(304,196),
  ABISELECT(16,4),
  ABISELECT(-576,-396),
  (VTBL_ENTRY)&(_ZTI8S7681C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S7681C10D1Ev,_ZTv0_n28_N8S7681C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S7681C10D0Ev,_ZTv0_n28_N8S7681C10D0Ev),
  (VTBL_ENTRY)&_ZN8S7681C113v51Ev,
  (VTBL_ENTRY)&_ZN8S7681C113v52Ev,
};
extern void _ZN7S7681C32v8Ev();
extern void _ZN7S7681C32v9Ev();
extern void _ZN7S7681C33v10Ev();
extern void _ZN7S7681C33v11Ev();
extern void _ZN7S7681C43v12Ev();
extern void _ZN7S7681C43v13Ev();
extern void _ZN7S7681C43v14Ev();
extern void _ZN7S7681C23v15Ev();
extern void _ZN7S7681C23v16Ev();
extern void _ZN7S7681C23v17Ev();
extern void _ZN7S7681C23v18Ev();
extern void _ZN8S7681C123v47Ev();
extern void _ZN8S7681C123v48Ev();
extern void _ZN8S7681C123v49Ev();
extern void _ZN8S7681C123v50Ev();
static  VTBL_ENTRY _tg__ZTV8S7681C12__8S7681C10__7S7681C7[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(480,312),
  ABISELECT(288,192),
  ABISELECT(320,204),
  ABISELECT(-592,-400),
  (VTBL_ENTRY)&(_ZTI8S7681C10[0]),
  (VTBL_ENTRY)&_ZN7S7681C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7681C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v15Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v16Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v17Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v18Ev,
  (VTBL_ENTRY)&_ZN8S7681C123v47Ev,
  (VTBL_ENTRY)&_ZN8S7681C123v48Ev,
  (VTBL_ENTRY)&_ZN8S7681C123v49Ev,
  (VTBL_ENTRY)&_ZN8S7681C123v50Ev,
};
extern void _ZN8S7681C133v42Ev();
extern void _ZN8S7681C133v43Ev();
extern void _ZN8S7681C133v44Ev();
extern void _ZN8S7681C133v45Ev();
extern void _ZN8S7681C133v46Ev();
static  VTBL_ENTRY _tg__ZTV8S7681C13__8S7681C10__7S7681C7[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(192,120),
  ABISELECT(32,12),
  ABISELECT(-880,-592),
  (VTBL_ENTRY)&(_ZTI8S7681C10[0]),
  (VTBL_ENTRY)&_ZN8S7681C133v42Ev,
  (VTBL_ENTRY)&_ZN8S7681C133v43Ev,
  (VTBL_ENTRY)&_ZN8S7681C133v44Ev,
  (VTBL_ENTRY)&_ZN8S7681C133v45Ev,
  (VTBL_ENTRY)&_ZN8S7681C133v46Ev,
};
extern void _ZN7S7681C32v8Ev();
extern void _ZN7S7681C32v9Ev();
extern void _ZN7S7681C33v10Ev();
extern void _ZN7S7681C33v11Ev();
static  VTBL_ENTRY _tg__ZTV7S7681C3__8S7681C10__7S7681C7[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-912,-604),
  (VTBL_ENTRY)&(_ZTI8S7681C10[0]),
  (VTBL_ENTRY)&_ZN7S7681C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7681C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v11Ev,
};
extern void _ZN7S7681C32v8Ev();
extern void _ZN7S7681C32v9Ev();
extern void _ZN7S7681C33v10Ev();
extern void _ZN7S7681C33v11Ev();
extern void _ZN7S7681C43v12Ev();
extern void _ZN7S7681C43v13Ev();
extern void _ZN7S7681C43v14Ev();
static  VTBL_ENTRY _tg__ZTV7S7681C4__8S7681C10__7S7681C7[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-1072,-712),
  (VTBL_ENTRY)&(_ZTI8S7681C10[0]),
  (VTBL_ENTRY)&_ZN7S7681C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7681C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v14Ev,
};
extern void _ZN7S7681C32v8Ev();
extern void _ZN7S7681C32v9Ev();
extern void _ZN7S7681C33v10Ev();
extern void _ZN7S7681C33v11Ev();
extern void _ZN7S7681C43v12Ev();
extern void _ZN7S7681C43v13Ev();
extern void _ZN7S7681C43v14Ev();
extern void ABISELECT(_ZThn288_N8S7681C10D1Ev,_ZThn192_N8S7681C10D1Ev)();
extern void ABISELECT(_ZThn288_N8S7681C10D0Ev,_ZThn192_N8S7681C10D0Ev)();
extern void _ZN8S7681C153v53Ev();
extern void _ZN8S7681C153v54Ev();
extern void _ZN8S7681C153v55Ev();
extern void _ZN8S7681C153v56Ev();
static  VTBL_ENTRY _tg__ZTV8S7681C15__8S7681C10__7S7681C7[] = {
  ABISELECT(992,652),
  ABISELECT(784,520),
  ABISELECT(592,400),
  ABISELECT(624,412),
  ABISELECT(-288,-192),
  (VTBL_ENTRY)&(_ZTI8S7681C10[0]),
  (VTBL_ENTRY)&_ZN7S7681C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7681C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v14Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn288_N8S7681C10D1Ev,_ZThn192_N8S7681C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn288_N8S7681C10D0Ev,_ZThn192_N8S7681C10D0Ev),
  (VTBL_ENTRY)&_ZN8S7681C153v53Ev,
  (VTBL_ENTRY)&_ZN8S7681C153v54Ev,
  (VTBL_ENTRY)&_ZN8S7681C153v55Ev,
  (VTBL_ENTRY)&_ZN8S7681C153v56Ev,
};
extern void _ZN7S7681C93v33Ev();
extern void _ZN7S7681C93v34Ev();
extern void _ZN7S7681C93v35Ev();
extern void _ZN7S7681C93v36Ev();
extern void _ZN7S7681C93v37Ev();
extern void _ZN7S7681C93v38Ev();
extern void _ZN7S7681C93v39Ev();
extern void _ZN7S7681C93v40Ev();
extern void _ZN7S7681C93v41Ev();
static  VTBL_ENTRY _tg__ZTV7S7681C9__8S7681C10__7S7681C7[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-1280,-844),
  (VTBL_ENTRY)&(_ZTI8S7681C10[0]),
  (VTBL_ENTRY)&_ZN7S7681C93v33Ev,
  (VTBL_ENTRY)&_ZN7S7681C93v34Ev,
  (VTBL_ENTRY)&_ZN7S7681C93v35Ev,
  (VTBL_ENTRY)&_ZN7S7681C93v36Ev,
  (VTBL_ENTRY)&_ZN7S7681C93v37Ev,
  (VTBL_ENTRY)&_ZN7S7681C93v38Ev,
  (VTBL_ENTRY)&_ZN7S7681C93v39Ev,
  (VTBL_ENTRY)&_ZN7S7681C93v40Ev,
  (VTBL_ENTRY)&_ZN7S7681C93v41Ev,
};
extern void _ZN8S7681C11D1Ev();
extern void _ZN8S7681C11D0Ev();
extern void _ZN8S7681C113v51Ev();
extern void _ZN8S7681C113v52Ev();
static  VTBL_ENTRY _tg__ZTV8S7681C11__7S7681C7[] = {
  ABISELECT(496,316),
  ABISELECT(336,208),
  ABISELECT(304,196),
  ABISELECT(16,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S7681C11[0]),
  (VTBL_ENTRY)&_ZN8S7681C11D1Ev,
  (VTBL_ENTRY)&_ZN8S7681C11D0Ev,
  (VTBL_ENTRY)&_ZN8S7681C113v51Ev,
  (VTBL_ENTRY)&_ZN8S7681C113v52Ev,
};
extern void _ZN7S7681C32v8Ev();
extern void _ZN7S7681C32v9Ev();
extern void _ZN7S7681C33v10Ev();
extern void _ZN7S7681C33v11Ev();
extern void _ZN7S7681C43v12Ev();
extern void _ZN7S7681C43v13Ev();
extern void _ZN7S7681C43v14Ev();
extern void _ZN7S7681C23v15Ev();
extern void _ZN7S7681C23v16Ev();
extern void _ZN7S7681C23v17Ev();
extern void _ZN7S7681C23v18Ev();
extern void _ZN8S7681C123v47Ev();
extern void _ZN8S7681C123v48Ev();
extern void _ZN8S7681C123v49Ev();
extern void _ZN8S7681C123v50Ev();
static  VTBL_ENTRY _tg__ZTV8S7681C12__8S7681C11__7S7681C7[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(480,312),
  ABISELECT(288,192),
  ABISELECT(320,204),
  ABISELECT(-16,-4),
  (VTBL_ENTRY)&(_ZTI8S7681C11[0]),
  (VTBL_ENTRY)&_ZN7S7681C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7681C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v15Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v16Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v17Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v18Ev,
  (VTBL_ENTRY)&_ZN8S7681C123v47Ev,
  (VTBL_ENTRY)&_ZN8S7681C123v48Ev,
  (VTBL_ENTRY)&_ZN8S7681C123v49Ev,
  (VTBL_ENTRY)&_ZN8S7681C123v50Ev,
};
extern void _ZN8S7681C133v42Ev();
extern void _ZN8S7681C133v43Ev();
extern void _ZN8S7681C133v44Ev();
extern void _ZN8S7681C133v45Ev();
extern void _ZN8S7681C133v46Ev();
static  VTBL_ENTRY _tg__ZTV8S7681C13__8S7681C11__7S7681C7[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(192,120),
  ABISELECT(32,12),
  ABISELECT(-304,-196),
  (VTBL_ENTRY)&(_ZTI8S7681C11[0]),
  (VTBL_ENTRY)&_ZN8S7681C133v42Ev,
  (VTBL_ENTRY)&_ZN8S7681C133v43Ev,
  (VTBL_ENTRY)&_ZN8S7681C133v44Ev,
  (VTBL_ENTRY)&_ZN8S7681C133v45Ev,
  (VTBL_ENTRY)&_ZN8S7681C133v46Ev,
};
extern void _ZN7S7681C32v8Ev();
extern void _ZN7S7681C32v9Ev();
extern void _ZN7S7681C33v10Ev();
extern void _ZN7S7681C33v11Ev();
static  VTBL_ENTRY _tg__ZTV7S7681C3__8S7681C11__7S7681C7[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-336,-208),
  (VTBL_ENTRY)&(_ZTI8S7681C11[0]),
  (VTBL_ENTRY)&_ZN7S7681C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7681C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v11Ev,
};
extern void _ZN7S7681C32v8Ev();
extern void _ZN7S7681C32v9Ev();
extern void _ZN7S7681C33v10Ev();
extern void _ZN7S7681C33v11Ev();
extern void _ZN7S7681C43v12Ev();
extern void _ZN7S7681C43v13Ev();
extern void _ZN7S7681C43v14Ev();
static  VTBL_ENTRY _tg__ZTV7S7681C4__8S7681C11__7S7681C7[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-496,-316),
  (VTBL_ENTRY)&(_ZTI8S7681C11[0]),
  (VTBL_ENTRY)&_ZN7S7681C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7681C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v14Ev,
};
extern void _ZN7S7681C32v8Ev();
extern void _ZN7S7681C32v9Ev();
extern void _ZN7S7681C33v10Ev();
extern void _ZN7S7681C33v11Ev();
extern void _ZN7S7681C43v12Ev();
extern void _ZN7S7681C43v13Ev();
extern void _ZN7S7681C43v14Ev();
extern void _ZN7S7681C23v15Ev();
extern void _ZN7S7681C23v16Ev();
extern void _ZN7S7681C23v17Ev();
extern void _ZN7S7681C23v18Ev();
extern void _ZN8S7681C123v47Ev();
extern void _ZN8S7681C123v48Ev();
extern void _ZN8S7681C123v49Ev();
extern void _ZN8S7681C123v50Ev();
static  VTBL_ENTRY _tg__ZTV8S7681C12__7S7681C7[] = {
  ABISELECT(480,312),
  ABISELECT(288,192),
  ABISELECT(320,204),
  0,
  (VTBL_ENTRY)&(_ZTI8S7681C12[0]),
  (VTBL_ENTRY)&_ZN7S7681C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7681C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v15Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v16Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v17Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v18Ev,
  (VTBL_ENTRY)&_ZN8S7681C123v47Ev,
  (VTBL_ENTRY)&_ZN8S7681C123v48Ev,
  (VTBL_ENTRY)&_ZN8S7681C123v49Ev,
  (VTBL_ENTRY)&_ZN8S7681C123v50Ev,
};
extern void _ZN7S7681C32v8Ev();
extern void _ZN7S7681C32v9Ev();
extern void _ZN7S7681C33v10Ev();
extern void _ZN7S7681C33v11Ev();
extern void _ZN7S7681C43v12Ev();
extern void _ZN7S7681C43v13Ev();
extern void _ZN7S7681C43v14Ev();
extern void _ZN7S7681C23v15Ev();
extern void _ZN7S7681C23v16Ev();
extern void _ZN7S7681C23v17Ev();
extern void _ZN7S7681C23v18Ev();
static  VTBL_ENTRY _tg__ZTV7S7681C28S7681C12__7S7681C7[] = {
  ABISELECT(320,204),
  0,
  (VTBL_ENTRY)&(_ZTI7S7681C2[0]),
  (VTBL_ENTRY)&_ZN7S7681C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7681C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v15Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v16Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v17Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v18Ev,
};
extern void _ZN7S7681C32v8Ev();
extern void _ZN7S7681C32v9Ev();
extern void _ZN7S7681C33v10Ev();
extern void _ZN7S7681C33v11Ev();
static  VTBL_ENTRY _tg__ZTV7S7681C3__7S7681C28S7681C12__7S7681C7[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-320,-204),
  (VTBL_ENTRY)&(_ZTI7S7681C2[0]),
  (VTBL_ENTRY)&_ZN7S7681C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7681C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v11Ev,
};
extern void _ZN8S7681C133v42Ev();
extern void _ZN8S7681C133v43Ev();
extern void _ZN8S7681C133v44Ev();
extern void _ZN8S7681C133v45Ev();
extern void _ZN8S7681C133v46Ev();
static  VTBL_ENTRY _tg__ZTV8S7681C13__8S7681C12__7S7681C7[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(192,120),
  ABISELECT(32,12),
  ABISELECT(-288,-192),
  (VTBL_ENTRY)&(_ZTI8S7681C12[0]),
  (VTBL_ENTRY)&_ZN8S7681C133v42Ev,
  (VTBL_ENTRY)&_ZN8S7681C133v43Ev,
  (VTBL_ENTRY)&_ZN8S7681C133v44Ev,
  (VTBL_ENTRY)&_ZN8S7681C133v45Ev,
  (VTBL_ENTRY)&_ZN8S7681C133v46Ev,
};
extern void _ZN7S7681C32v8Ev();
extern void _ZN7S7681C32v9Ev();
extern void _ZN7S7681C33v10Ev();
extern void _ZN7S7681C33v11Ev();
static  VTBL_ENTRY _tg__ZTV7S7681C3__8S7681C12__7S7681C7[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-320,-204),
  (VTBL_ENTRY)&(_ZTI8S7681C12[0]),
  (VTBL_ENTRY)&_ZN7S7681C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7681C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v11Ev,
};
extern void _ZN7S7681C32v8Ev();
extern void _ZN7S7681C32v9Ev();
extern void _ZN7S7681C33v10Ev();
extern void _ZN7S7681C33v11Ev();
extern void _ZN7S7681C43v12Ev();
extern void _ZN7S7681C43v13Ev();
extern void _ZN7S7681C43v14Ev();
static  VTBL_ENTRY _tg__ZTV7S7681C4__8S7681C12__7S7681C7[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-480,-312),
  (VTBL_ENTRY)&(_ZTI8S7681C12[0]),
  (VTBL_ENTRY)&_ZN7S7681C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7681C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v14Ev,
};
extern void _ZN8S7681C133v42Ev();
extern void _ZN8S7681C133v43Ev();
extern void _ZN8S7681C133v44Ev();
extern void _ZN8S7681C133v45Ev();
extern void _ZN8S7681C133v46Ev();
static  VTBL_ENTRY _tg__ZTV8S7681C13__7S7681C7[] = {
  ABISELECT(192,120),
  ABISELECT(32,12),
  0,
  (VTBL_ENTRY)&(_ZTI8S7681C13[0]),
  (VTBL_ENTRY)&_ZN8S7681C133v42Ev,
  (VTBL_ENTRY)&_ZN8S7681C133v43Ev,
  (VTBL_ENTRY)&_ZN8S7681C133v44Ev,
  (VTBL_ENTRY)&_ZN8S7681C133v45Ev,
  (VTBL_ENTRY)&_ZN8S7681C133v46Ev,
};
extern void _ZN7S7681C32v8Ev();
extern void _ZN7S7681C32v9Ev();
extern void _ZN7S7681C33v10Ev();
extern void _ZN7S7681C33v11Ev();
static  VTBL_ENTRY _tg__ZTV7S7681C3__8S7681C13__7S7681C7[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-32,-12),
  (VTBL_ENTRY)&(_ZTI8S7681C13[0]),
  (VTBL_ENTRY)&_ZN7S7681C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7681C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v11Ev,
};
extern void _ZN7S7681C32v8Ev();
extern void _ZN7S7681C32v9Ev();
extern void _ZN7S7681C33v10Ev();
extern void _ZN7S7681C33v11Ev();
extern void _ZN7S7681C43v12Ev();
extern void _ZN7S7681C43v13Ev();
extern void _ZN7S7681C43v14Ev();
static  VTBL_ENTRY _tg__ZTV7S7681C4__8S7681C13__7S7681C7[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-192,-120),
  (VTBL_ENTRY)&(_ZTI8S7681C13[0]),
  (VTBL_ENTRY)&_ZN7S7681C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7681C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v14Ev,
};
static  VTT_ENTRY vtt_S7681C7[] = {
  {&(_ZTV7S7681C7[9]),  9,191},
  {&(_tg__ZTV8S7681C10__7S7681C7[9]),  9,34},
  {&(_tg__ZTV8S7681C128S7681C10__A1__7S7681C7[5]),  5,20},
  {&(_tg__ZTV7S7681C28S7681C128S7681C10__A1__7S7681C7[3]),  3,14},
  {&(_tg__ZTV7S7681C3__7S7681C28S7681C128S7681C10__A1__7S7681C7[6]),  6,10},
  {&(_tg__ZTV8S7681C13__8S7681C128S7681C10__A1__7S7681C7[9]),  9,14},
  {&(_tg__ZTV7S7681C3__8S7681C128S7681C10__A1__7S7681C7[6]),  6,10},
  {&(_tg__ZTV7S7681C4__8S7681C128S7681C10__A1__7S7681C7[9]),  9,16},
  {&(_tg__ZTV8S7681C158S7681C10__7S7681C7[6]),  6,19},
  {&(_tg__ZTV7S7681C3__8S7681C158S7681C10__7S7681C7[6]),  6,10},
  {&(_tg__ZTV8S7681C13__8S7681C158S7681C10__7S7681C7[9]),  9,14},
  {&(_tg__ZTV7S7681C4__8S7681C158S7681C10__7S7681C7[9]),  9,16},
  {&(_tg__ZTV7S7681C9__8S7681C158S7681C10__7S7681C7[11]),  11,20},
  {&(_tg__ZTV7S7681C8__8S7681C10__7S7681C7[6]),  6,10},
  {&(_tg__ZTV8S7681C11__8S7681C10__7S7681C7[9]),  9,13},
  {&(_tg__ZTV8S7681C12__8S7681C10__7S7681C7[20]),  20,35},
  {&(_tg__ZTV8S7681C13__8S7681C10__7S7681C7[9]),  9,14},
  {&(_tg__ZTV7S7681C3__8S7681C10__7S7681C7[6]),  6,10},
  {&(_tg__ZTV7S7681C4__8S7681C10__7S7681C7[9]),  9,16},
  {&(_tg__ZTV8S7681C15__8S7681C10__7S7681C7[6]),  6,19},
  {&(_tg__ZTV7S7681C9__8S7681C10__7S7681C7[11]),  11,20},
  {&(_ZTV7S7681C7[79]),  79,191},
  {&(_ZTV7S7681C7[29]),  29,191},
  {&(_ZTV7S7681C7[92]),  92,191},
  {&(_ZTV7S7681C7[116]),  116,191},
  {&(_ZTV7S7681C7[140]),  140,191},
  {&(_ZTV7S7681C7[151]),  151,191},
  {&(_ZTV7S7681C7[164]),  164,191},
  {&(_ZTV7S7681C7[60]),  60,191},
  {&(_ZTV7S7681C7[182]),  182,191},
  {&(_tg__ZTV8S7681C11__7S7681C7[6]),  6,10},
  {&(_tg__ZTV8S7681C12__8S7681C11__7S7681C7[20]),  20,35},
  {&(_tg__ZTV8S7681C13__8S7681C11__7S7681C7[9]),  9,14},
  {&(_tg__ZTV7S7681C3__8S7681C11__7S7681C7[6]),  6,10},
  {&(_tg__ZTV7S7681C4__8S7681C11__7S7681C7[9]),  9,16},
  {&(_tg__ZTV8S7681C12__7S7681C7[5]),  5,20},
  {&(_tg__ZTV7S7681C28S7681C12__7S7681C7[3]),  3,14},
  {&(_tg__ZTV7S7681C3__7S7681C28S7681C12__7S7681C7[6]),  6,10},
  {&(_tg__ZTV8S7681C13__8S7681C12__7S7681C7[9]),  9,14},
  {&(_tg__ZTV7S7681C3__8S7681C12__7S7681C7[6]),  6,10},
  {&(_tg__ZTV7S7681C4__8S7681C12__7S7681C7[9]),  9,16},
  {&(_tg__ZTV8S7681C13__7S7681C7[4]),  4,9},
  {&(_tg__ZTV7S7681C3__8S7681C13__7S7681C7[6]),  6,10},
  {&(_tg__ZTV7S7681C4__8S7681C13__7S7681C7[9]),  9,16},
};
extern VTBL_ENTRY _ZTI7S7681C7[];
extern  VTBL_ENTRY _ZTV7S7681C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7681C7[];
static VTBL_ENTRY alt_thunk_names12[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S7681C10D0Ev,_ZTv0_n28_N8S7681C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn576_N8S7681C10D0Ev,_ZThn396_N8S7681C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S7681C10D1Ev,_ZTv0_n28_N8S7681C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn576_N8S7681C10D1Ev,_ZThn396_N8S7681C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N7S7681C7D0Ev,_ZTv0_n28_N7S7681C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2048_N7S7681C7D0Ev,_ZThn1324_N7S7681C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N7S7681C7D1Ev,_ZTv0_n28_N7S7681C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2048_N7S7681C7D1Ev,_ZThn1324_N7S7681C7D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7681C7 = {  "S7681C7", // class name
  bases_S7681C7, 20,
  &(vtc_S7681C7[0]), // expected_vtbl_contents
  &(vtt_S7681C7[0]), // expected_vtt_contents
  ABISELECT(4224,2700), // object size
  NSPAIRA(_ZTI7S7681C7),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S7681C7),191, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7681C7),44, //virtual table table var
  20, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names12,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7681C16  : S7681C8 , virtual S7681C3 , virtual S7681C13 , virtual S7681C10 , S7681C6 {
  void *s7681c16f0[2];
  virtual  ~S7681C16(); // _ZN8S7681C16D2Ev
  virtual void  v65(); // _ZN8S7681C163v65Ev
  virtual void  v66(); // _ZN8S7681C163v66Ev
  virtual void  v67(); // _ZN8S7681C163v67Ev
  virtual void  v68(); // _ZN8S7681C163v68Ev
  virtual void  v69(); // _ZN8S7681C163v69Ev
  virtual void  v70(); // _ZN8S7681C163v70Ev
  virtual void  v71(); // _ZN8S7681C163v71Ev
  S7681C16(); // tgen
};
//SIG(-1 S7681C16) C1{ BC2{ v8 v9 v10 v11} VBC3{ v12 v13 v14 v15 Fs:13 Fp FD[8]} VBC4{ VBC3 VBC5{ BC3 v16 v17 v18 Fp[6]} v19 v20 v21 v22 v23 Fp[2]} VBC6{ VBC2 VBC7{ VBC8{ VBC4 BC9{ VBC3 BC5 v24 v25 v26 v27 Fp} v28 v29 v30 v31 FL[5] FC10{} FD} vd v32 v33} BC8 BC11{ VBC3 VBC4 VBC12{ v34 v35 v36 v37 v38 v39 v40 v41 v42 FC5[7]} BC5 vd v43 v44 v45 v46 Fi} vd v47 v48 v49 v50 v51 v52 v53 v54 Fi[8] Fc Fl} BC13{ VBC9 vd v55 v56 v57 v58} vd v1 v2 v3 v4 v5 v6 v7 Fp[2]}


 S7681C16 ::~S7681C16(){ note_dtor("S7681C16", this);}
void  S7681C16 ::v65(){vfunc_called(this, "_ZN8S7681C163v65Ev");}
void  S7681C16 ::v66(){vfunc_called(this, "_ZN8S7681C163v66Ev");}
void  S7681C16 ::v67(){vfunc_called(this, "_ZN8S7681C163v67Ev");}
void  S7681C16 ::v68(){vfunc_called(this, "_ZN8S7681C163v68Ev");}
void  S7681C16 ::v69(){vfunc_called(this, "_ZN8S7681C163v69Ev");}
void  S7681C16 ::v70(){vfunc_called(this, "_ZN8S7681C163v70Ev");}
void  S7681C16 ::v71(){vfunc_called(this, "_ZN8S7681C163v71Ev");}
S7681C16 ::S7681C16(){ note_ctor("S7681C16", this);} // tgen

static void Test_S7681C16()
{
  extern Class_Descriptor cd_S7681C16;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(187,476)];
    init_test(&cd_S7681C16, buf);
    S7681C16 *dp, &lv = *(dp=new (buf) S7681C16());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(2976,1900), "sizeof(S7681C16)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7681C16)");
    /*is_ambiguous_... S7681C16::S7681C8 */ AMB_check_base_class_offset(lv, (S7681C8*), 0, "S7681C16");
    /*is_ambiguous_... S7681C16::S7681C3 */ AMB_check_base_class_offset(lv, (S7681C3*), ABISELECT(32,16), "S7681C16");
    /*is_ambiguous_... S7681C13::S7681C3 */ AMB_check_base_class_offset(lv, (S7681C3*)(S7681C13*), ABISELECT(32,16), "S7681C16");
    /*is_ambiguous_... S7681C16::S7681C12 */ AMB_check_base_class_offset(lv, (S7681C3*)(S7681C2*)(S7681C12*), ABISELECT(32,16), "S7681C16");
    /*is_ambiguous_... S7681C10::S7681C12 */ AMB_check_base_class_offset(lv, (S7681C3*)(S7681C2*)(S7681C12*)(S7681C10*), ABISELECT(32,16), "S7681C16");
    /*is_ambiguous_... S7681C15::S7681C3 */ AMB_check_base_class_offset(lv, (S7681C3*)(S7681C15*)(S7681C10*), ABISELECT(32,16), "S7681C16");
    /*is_ambiguous_... S7681C16::S7681C2 */ AMB_check_base_class_offset(lv, (S7681C3*)(S7681C2*), ABISELECT(32,16), "S7681C16");
    /*is_ambiguous_... S7681C16::S7681C4 */ AMB_check_base_class_offset(lv, (S7681C3*)(S7681C4*), ABISELECT(224,136), "S7681C16");
    check_base_class_offset(lv, (S7681C4*)(S7681C13*), ABISELECT(224,136), "S7681C16");
    check_base_class_offset(lv, (S7681C13*), ABISELECT(192,124), "S7681C16");
    /*is_ambiguous_... S7681C16::S7681C12 */ AMB_check_base_class_offset(lv, (S7681C13*)(S7681C12*), ABISELECT(192,124), "S7681C16");
    /*is_ambiguous_... S7681C10::S7681C12 */ AMB_check_base_class_offset(lv, (S7681C13*)(S7681C12*)(S7681C10*), ABISELECT(192,124), "S7681C16");
    check_base_class_offset(lv, (S7681C13*)(S7681C15*)(S7681C10*), ABISELECT(192,124), "S7681C16");
    check_base_class_offset(lv, (S7681C8*)(S7681C10*), ABISELECT(976,636), "S7681C16");
    /*is_ambiguous_... S7681C16::S7681C12 */ AMB_check_base_class_offset(lv, (S7681C3*)(S7681C4*)(S7681C2*)(S7681C12*), ABISELECT(992,644), "S7681C16");
    /*is_ambiguous_... S7681C16::S7681C12 */ AMB_check_base_class_offset(lv, (S7681C4*)(S7681C2*)(S7681C12*), ABISELECT(992,644), "S7681C16");
    /*is_ambiguous_... S7681C16::S7681C12 */ AMB_check_base_class_offset(lv, (S7681C2*)(S7681C12*), ABISELECT(992,644), "S7681C16");
    check_base_class_offset(lv, (S7681C12*)(S7681C11*), ABISELECT(992,644), "S7681C16");
    check_base_class_offset(lv, (S7681C11*)(S7681C10*), ABISELECT(984,640), "S7681C16");
    /*is_ambiguous_... S7681C10::S7681C12 */ AMB_check_base_class_offset(lv, (S7681C3*)(S7681C4*)(S7681C2*)(S7681C12*)(S7681C10*), ABISELECT(432,268), "S7681C16");
    /*is_ambiguous_... S7681C10::S7681C12 */ AMB_check_base_class_offset(lv, (S7681C4*)(S7681C2*)(S7681C12*)(S7681C10*), ABISELECT(432,268), "S7681C16");
    /*is_ambiguous_... S7681C10::S7681C12 */ AMB_check_base_class_offset(lv, (S7681C2*)(S7681C12*)(S7681C10*), ABISELECT(432,268), "S7681C16");
    /*is_ambiguous_... S7681C10::S7681C12 */ AMB_check_base_class_offset(lv, (S7681C12*)(S7681C10*), ABISELECT(432,268), "S7681C16");
    check_base_class_offset(lv, (S7681C9*)(S7681C15*)(S7681C10*), ABISELECT(1280,836), "S7681C16");
    /*is_ambiguous_... S7681C15::S7681C4 */ AMB_check_base_class_offset(lv, (S7681C3*)(S7681C4*)(S7681C15*)(S7681C10*), ABISELECT(720,460), "S7681C16");
    /*is_ambiguous_... S7681C15::S7681C4 */ AMB_check_base_class_offset(lv, (S7681C4*)(S7681C15*)(S7681C10*), ABISELECT(720,460), "S7681C16");
    check_base_class_offset(lv, (S7681C15*)(S7681C10*), ABISELECT(720,460), "S7681C16");
    check_base_class_offset(lv, (S7681C10*), ABISELECT(432,268), "S7681C16");
    /*is_ambiguous_... S7681C16::S7681C2 */ AMB_check_base_class_offset(lv, (S7681C3*)(S7681C4*)(S7681C2*), ABISELECT(2752,1764), "S7681C16");
    /*is_ambiguous_... S7681C16::S7681C2 */ AMB_check_base_class_offset(lv, (S7681C4*)(S7681C2*), ABISELECT(2752,1764), "S7681C16");
    check_base_class_offset(lv, (S7681C2*)(S7681C6*), ABISELECT(2752,1764), "S7681C16");
    check_base_class_offset(lv, (S7681C6*), ABISELECT(8,4), "S7681C16");
    check_field_offset(lv, s7681c16f0, ABISELECT(16,8), "S7681C16.s7681c16f0");
    test_class_info(&lv, &cd_S7681C16);
    dp->~S7681C16();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7681C16(Test_S7681C16, "S7681C16", ABISELECT(2976,1900));

#else // __cplusplus

extern void _ZN8S7681C16C1Ev();
extern void _ZN8S7681C16D2Ev();
Name_Map name_map_S7681C16[] = {
  NSPAIR(_ZN8S7681C16C1Ev),
  NSPAIR(_ZN8S7681C16D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7681C8;
extern VTBL_ENTRY _ZTI7S7681C8[];
extern  VTBL_ENTRY _ZTV7S7681C8[];
extern Class_Descriptor cd_S7681C3;
extern VTBL_ENTRY _ZTI7S7681C3[];
extern  VTBL_ENTRY _ZTV7S7681C3[];
extern Class_Descriptor cd_S7681C3;
extern VTBL_ENTRY _ZTI7S7681C3[];
extern  VTBL_ENTRY _ZTV7S7681C3[];
extern Class_Descriptor cd_S7681C4;
extern VTBL_ENTRY _ZTI7S7681C4[];
extern  VTBL_ENTRY _ZTV7S7681C4[];
extern Class_Descriptor cd_S7681C13;
extern VTBL_ENTRY _ZTI8S7681C13[];
extern  VTBL_ENTRY _ZTV8S7681C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7681C13[];
extern Class_Descriptor cd_S7681C8;
extern VTBL_ENTRY _ZTI7S7681C8[];
extern  VTBL_ENTRY _ZTV7S7681C8[];
extern Class_Descriptor cd_S7681C3;
extern VTBL_ENTRY _ZTI7S7681C3[];
extern  VTBL_ENTRY _ZTV7S7681C3[];
extern Class_Descriptor cd_S7681C4;
extern VTBL_ENTRY _ZTI7S7681C4[];
extern  VTBL_ENTRY _ZTV7S7681C4[];
extern Class_Descriptor cd_S7681C2;
extern VTBL_ENTRY _ZTI7S7681C2[];
extern  VTBL_ENTRY _ZTV7S7681C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7681C2[];
extern Class_Descriptor cd_S7681C12;
extern VTBL_ENTRY _ZTI8S7681C12[];
extern  VTBL_ENTRY _ZTV8S7681C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7681C12[];
extern Class_Descriptor cd_S7681C11;
extern VTBL_ENTRY _ZTI8S7681C11[];
extern  VTBL_ENTRY _ZTV8S7681C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7681C11[];
extern Class_Descriptor cd_S7681C3;
extern VTBL_ENTRY _ZTI7S7681C3[];
extern  VTBL_ENTRY _ZTV7S7681C3[];
extern Class_Descriptor cd_S7681C4;
extern VTBL_ENTRY _ZTI7S7681C4[];
extern  VTBL_ENTRY _ZTV7S7681C4[];
extern Class_Descriptor cd_S7681C2;
extern VTBL_ENTRY _ZTI7S7681C2[];
extern  VTBL_ENTRY _ZTV7S7681C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7681C2[];
extern Class_Descriptor cd_S7681C12;
extern VTBL_ENTRY _ZTI8S7681C12[];
extern  VTBL_ENTRY _ZTV8S7681C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7681C12[];
extern Class_Descriptor cd_S7681C9;
extern VTBL_ENTRY _ZTI7S7681C9[];
extern  VTBL_ENTRY _ZTV7S7681C9[];
extern Class_Descriptor cd_S7681C3;
extern VTBL_ENTRY _ZTI7S7681C3[];
extern  VTBL_ENTRY _ZTV7S7681C3[];
extern Class_Descriptor cd_S7681C4;
extern VTBL_ENTRY _ZTI7S7681C4[];
extern  VTBL_ENTRY _ZTV7S7681C4[];
extern Class_Descriptor cd_S7681C15;
extern VTBL_ENTRY _ZTI8S7681C15[];
extern  VTBL_ENTRY _ZTV8S7681C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7681C15[];
extern Class_Descriptor cd_S7681C10;
extern VTBL_ENTRY _ZTI8S7681C10[];
extern  VTBL_ENTRY _ZTV8S7681C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7681C10[];
extern Class_Descriptor cd_S7681C3;
extern VTBL_ENTRY _ZTI7S7681C3[];
extern  VTBL_ENTRY _ZTV7S7681C3[];
extern Class_Descriptor cd_S7681C4;
extern VTBL_ENTRY _ZTI7S7681C4[];
extern  VTBL_ENTRY _ZTV7S7681C4[];
extern Class_Descriptor cd_S7681C2;
extern VTBL_ENTRY _ZTI7S7681C2[];
extern  VTBL_ENTRY _ZTV7S7681C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7681C2[];
extern Class_Descriptor cd_S7681C6;
extern VTBL_ENTRY _ZTI7S7681C6[];
extern  VTBL_ENTRY _ZTV7S7681C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7681C6[];
static Base_Class bases_S7681C16[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7681C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    23, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7681C3,    ABISELECT(32,16), //bcp->offset
    34, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7681C3,    ABISELECT(224,136), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S7681C4,    ABISELECT(224,136), //bcp->offset
    58, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S7681C13,    ABISELECT(192,124), //bcp->offset
    44, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7681C8,    ABISELECT(976,636), //bcp->offset
    155, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    19, //immediately_derived
  0, 1},
  {&cd_S7681C3,    ABISELECT(992,644), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S7681C4,    ABISELECT(992,644), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S7681C2,    ABISELECT(992,644), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    45, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S7681C12,    ABISELECT(992,644), //bcp->offset
    178, //bcp->virtual_function_table_offset
    20, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    44, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S7681C11,    ABISELECT(984,640), //bcp->offset
    165, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    39, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    19, //immediately_derived
  0, 1},
  {&cd_S7681C3,    ABISELECT(432,268), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S7681C4,    ABISELECT(432,268), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S7681C2,    ABISELECT(432,268), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    21, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S7681C12,    ABISELECT(432,268), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S7681C9,    ABISELECT(1280,836), //bcp->offset
    213, //bcp->virtual_function_table_offset
    11, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    18, //immediately_derived
  0, 1},
  {&cd_S7681C3,    ABISELECT(720,460), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S7681C4,    ABISELECT(720,460), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S7681C15,    ABISELECT(720,460), //bcp->offset
    136, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    26, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S7681C10,    ABISELECT(432,268), //bcp->offset
    74, //bcp->virtual_function_table_offset
    37, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7681C3,    ABISELECT(2752,1764), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    20, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S7681C4,    ABISELECT(2752,1764), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    21, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S7681C2,    ABISELECT(2752,1764), //bcp->offset
    233, //bcp->virtual_function_table_offset
    14, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    50, //bcp->base_subarray_index_in_construction_vtbl_array
    22, //init_seq
    23, //immediately_derived
  0, 1},
  {&cd_S7681C6,    ABISELECT(8,4), //bcp->offset
    24, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    24, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S7681C16[];
extern void _ZN7S7681C83v29Ev();
extern void _ZN7S7681C83v30Ev();
extern void _ZN7S7681C83v31Ev();
extern void _ZN7S7681C83v32Ev();
extern void _ZN8S7681C16D1Ev();
extern void _ZN8S7681C16D0Ev();
extern void _ZN8S7681C163v65Ev();
extern void _ZN8S7681C163v66Ev();
extern void _ZN8S7681C163v67Ev();
extern void _ZN8S7681C163v68Ev();
extern void _ZN8S7681C163v69Ev();
extern void _ZN8S7681C163v70Ev();
extern void _ZN8S7681C163v71Ev();
extern void ABISELECT(_ZThn8_N8S7681C16D1Ev,_ZThn4_N8S7681C16D1Ev)();
extern void ABISELECT(_ZThn8_N8S7681C16D0Ev,_ZThn4_N8S7681C16D0Ev)();
extern void _ZN7S7681C63v19Ev();
extern void _ZN7S7681C63v20Ev();
extern void _ZN7S7681C63v21Ev();
extern void _ZN7S7681C63v22Ev();
extern void _ZN7S7681C32v8Ev();
extern void _ZN7S7681C32v9Ev();
extern void _ZN7S7681C33v10Ev();
extern void _ZN7S7681C33v11Ev();
extern void _ZN8S7681C133v42Ev();
extern void _ZN8S7681C133v43Ev();
extern void _ZN8S7681C133v44Ev();
extern void _ZN8S7681C133v45Ev();
extern void _ZN8S7681C133v46Ev();
extern void _ZN7S7681C32v8Ev();
extern void _ZN7S7681C32v9Ev();
extern void _ZN7S7681C33v10Ev();
extern void _ZN7S7681C33v11Ev();
extern void _ZN7S7681C43v12Ev();
extern void _ZN7S7681C43v13Ev();
extern void _ZN7S7681C43v14Ev();
extern void _ZN7S7681C32v8Ev();
extern void _ZN7S7681C32v9Ev();
extern void _ZN7S7681C33v10Ev();
extern void _ZN7S7681C33v11Ev();
extern void _ZN7S7681C43v12Ev();
extern void _ZN7S7681C43v13Ev();
extern void _ZN7S7681C43v14Ev();
extern void _ZN7S7681C23v15Ev();
extern void _ZN7S7681C23v16Ev();
extern void _ZN7S7681C23v17Ev();
extern void _ZN7S7681C23v18Ev();
extern void _ZN8S7681C123v47Ev();
extern void _ZN8S7681C123v48Ev();
extern void _ZN8S7681C123v49Ev();
extern void _ZN8S7681C123v50Ev();
extern void ABISELECT(_ZTv0_n200_N8S7681C16D1Ev,_ZTv0_n100_N8S7681C16D1Ev)();
extern void ABISELECT(_ZThn432_N8S7681C16D1Ev,_ZThn268_N8S7681C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n200_N8S7681C16D0Ev,_ZTv0_n100_N8S7681C16D0Ev)();
extern void ABISELECT(_ZThn432_N8S7681C16D0Ev,_ZThn268_N8S7681C16D0Ev)() __attribute__((weak));
extern void _ZN8S7681C103v57Ev();
extern void _ZN8S7681C103v58Ev();
extern void _ZN8S7681C103v59Ev();
extern void _ZN8S7681C103v60Ev();
extern void _ZN8S7681C103v61Ev();
extern void _ZN8S7681C103v62Ev();
extern void _ZN8S7681C103v63Ev();
extern void _ZN8S7681C103v64Ev();
extern void _ZN7S7681C32v8Ev();
extern void _ZN7S7681C32v9Ev();
extern void _ZN7S7681C33v10Ev();
extern void _ZN7S7681C33v11Ev();
extern void _ZN7S7681C43v12Ev();
extern void _ZN7S7681C43v13Ev();
extern void _ZN7S7681C43v14Ev();
extern void ABISELECT(_ZTvn288_n200_N8S7681C16D1Ev,_ZTvn192_n100_N8S7681C16D1Ev)();
extern void ABISELECT(_ZTvn288_n200_N8S7681C16D0Ev,_ZTvn192_n100_N8S7681C16D0Ev)();
extern void _ZN8S7681C153v53Ev();
extern void _ZN8S7681C153v54Ev();
extern void _ZN8S7681C153v55Ev();
extern void _ZN8S7681C153v56Ev();
extern void _ZN7S7681C83v29Ev();
extern void _ZN7S7681C83v30Ev();
extern void _ZN7S7681C83v31Ev();
extern void _ZN7S7681C83v32Ev();
extern void ABISELECT(_ZTv0_n56_N8S7681C16D1Ev,_ZTv0_n28_N8S7681C16D1Ev)();
extern void ABISELECT(_ZThn984_N8S7681C16D1Ev,_ZThn640_N8S7681C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S7681C16D0Ev,_ZTv0_n28_N8S7681C16D0Ev)();
extern void ABISELECT(_ZThn984_N8S7681C16D0Ev,_ZThn640_N8S7681C16D0Ev)() __attribute__((weak));
extern void _ZN8S7681C113v51Ev();
extern void _ZN8S7681C113v52Ev();
extern void _ZN7S7681C32v8Ev();
extern void _ZN7S7681C32v9Ev();
extern void _ZN7S7681C33v10Ev();
extern void _ZN7S7681C33v11Ev();
extern void _ZN7S7681C43v12Ev();
extern void _ZN7S7681C43v13Ev();
extern void _ZN7S7681C43v14Ev();
extern void _ZN7S7681C23v15Ev();
extern void _ZN7S7681C23v16Ev();
extern void _ZN7S7681C23v17Ev();
extern void _ZN7S7681C23v18Ev();
extern void _ZN8S7681C123v47Ev();
extern void _ZN8S7681C123v48Ev();
extern void _ZN8S7681C123v49Ev();
extern void _ZN8S7681C123v50Ev();
extern void _ZN7S7681C93v33Ev();
extern void _ZN7S7681C93v34Ev();
extern void _ZN7S7681C93v35Ev();
extern void _ZN7S7681C93v36Ev();
extern void _ZN7S7681C93v37Ev();
extern void _ZN7S7681C93v38Ev();
extern void _ZN7S7681C93v39Ev();
extern void _ZN7S7681C93v40Ev();
extern void _ZN7S7681C93v41Ev();
extern void _ZN7S7681C32v8Ev();
extern void _ZN7S7681C32v9Ev();
extern void _ZN7S7681C33v10Ev();
extern void _ZN7S7681C33v11Ev();
extern void _ZN7S7681C43v12Ev();
extern void _ZN7S7681C43v13Ev();
extern void _ZN7S7681C43v14Ev();
extern void _ZN7S7681C23v15Ev();
extern void _ZN7S7681C23v16Ev();
extern void _ZN7S7681C23v17Ev();
extern void _ZN7S7681C23v18Ev();
static  VTBL_ENTRY vtc_S7681C16[] = {
  ABISELECT(2752,1764),
  ABISELECT(1280,836),
  ABISELECT(992,644),
  ABISELECT(984,640),
  ABISELECT(976,636),
  ABISELECT(432,268),
  ABISELECT(224,136),
  ABISELECT(192,124),
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI8S7681C16[0]),
  (VTBL_ENTRY)&_ZN7S7681C83v29Ev,
  (VTBL_ENTRY)&_ZN7S7681C83v30Ev,
  (VTBL_ENTRY)&_ZN7S7681C83v31Ev,
  (VTBL_ENTRY)&_ZN7S7681C83v32Ev,
  (VTBL_ENTRY)&_ZN8S7681C16D1Ev,
  (VTBL_ENTRY)&_ZN8S7681C16D0Ev,
  (VTBL_ENTRY)&_ZN8S7681C163v65Ev,
  (VTBL_ENTRY)&_ZN8S7681C163v66Ev,
  (VTBL_ENTRY)&_ZN8S7681C163v67Ev,
  (VTBL_ENTRY)&_ZN8S7681C163v68Ev,
  (VTBL_ENTRY)&_ZN8S7681C163v69Ev,
  (VTBL_ENTRY)&_ZN8S7681C163v70Ev,
  (VTBL_ENTRY)&_ZN8S7681C163v71Ev,
  ABISELECT(24,12),
  ABISELECT(2744,1760),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S7681C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N8S7681C16D1Ev,_ZThn4_N8S7681C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N8S7681C16D0Ev,_ZThn4_N8S7681C16D0Ev),
  (VTBL_ENTRY)&_ZN7S7681C63v19Ev,
  (VTBL_ENTRY)&_ZN7S7681C63v20Ev,
  (VTBL_ENTRY)&_ZN7S7681C63v21Ev,
  (VTBL_ENTRY)&_ZN7S7681C63v22Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S7681C16[0]),
  (VTBL_ENTRY)&_ZN7S7681C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7681C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v11Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(32,12),
  ABISELECT(-160,-108),
  ABISELECT(-192,-124),
  (VTBL_ENTRY)&(_ZTI8S7681C16[0]),
  (VTBL_ENTRY)&_ZN8S7681C133v42Ev,
  (VTBL_ENTRY)&_ZN8S7681C133v43Ev,
  (VTBL_ENTRY)&_ZN8S7681C133v44Ev,
  (VTBL_ENTRY)&_ZN8S7681C133v45Ev,
  (VTBL_ENTRY)&_ZN8S7681C133v46Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-224,-136),
  (VTBL_ENTRY)&(_ZTI8S7681C16[0]),
  (VTBL_ENTRY)&_ZN7S7681C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7681C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v14Ev,
  ABISELECT(288,192),
  ABISELECT(288,192),
  ABISELECT(288,192),
  ABISELECT(288,192),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-432,-268),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(848,568),
  ABISELECT(560,376),
  ABISELECT(552,372),
  ABISELECT(544,368),
  ABISELECT(-208,-132),
  ABISELECT(-240,-144),
  ABISELECT(-400,-252),
  ABISELECT(-432,-268),
  (VTBL_ENTRY)&(_ZTI8S7681C16[0]),
  (VTBL_ENTRY)&_ZN7S7681C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7681C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v15Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v16Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v17Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v18Ev,
  (VTBL_ENTRY)&_ZN8S7681C123v47Ev,
  (VTBL_ENTRY)&_ZN8S7681C123v48Ev,
  (VTBL_ENTRY)&_ZN8S7681C123v49Ev,
  (VTBL_ENTRY)&_ZN8S7681C123v50Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n200_N8S7681C16D1Ev,_ZTv0_n100_N8S7681C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n200_N8S7681C16D0Ev,_ZTv0_n100_N8S7681C16D0Ev),
  (VTBL_ENTRY)&_ZN8S7681C103v57Ev,
  (VTBL_ENTRY)&_ZN8S7681C103v58Ev,
  (VTBL_ENTRY)&_ZN8S7681C103v59Ev,
  (VTBL_ENTRY)&_ZN8S7681C103v60Ev,
  (VTBL_ENTRY)&_ZN8S7681C103v61Ev,
  (VTBL_ENTRY)&_ZN8S7681C103v62Ev,
  (VTBL_ENTRY)&_ZN8S7681C103v63Ev,
  (VTBL_ENTRY)&_ZN8S7681C103v64Ev,
  ABISELECT(560,376),
  ABISELECT(-496,-324),
  ABISELECT(-528,-336),
  ABISELECT(-688,-444),
  ABISELECT(-720,-460),
  (VTBL_ENTRY)&(_ZTI8S7681C16[0]),
  (VTBL_ENTRY)&_ZN7S7681C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7681C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v14Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn288_n200_N8S7681C16D1Ev,_ZTvn192_n100_N8S7681C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn288_n200_N8S7681C16D0Ev,_ZTvn192_n100_N8S7681C16D0Ev),
  (VTBL_ENTRY)&_ZN8S7681C153v53Ev,
  (VTBL_ENTRY)&_ZN8S7681C153v54Ev,
  (VTBL_ENTRY)&_ZN8S7681C153v55Ev,
  (VTBL_ENTRY)&_ZN8S7681C153v56Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-976,-636),
  (VTBL_ENTRY)&(_ZTI8S7681C16[0]),
  (VTBL_ENTRY)&_ZN7S7681C83v29Ev,
  (VTBL_ENTRY)&_ZN7S7681C83v30Ev,
  (VTBL_ENTRY)&_ZN7S7681C83v31Ev,
  (VTBL_ENTRY)&_ZN7S7681C83v32Ev,
  0,
  0,
  ABISELECT(-984,-640),
  ABISELECT(-760,-504),
  ABISELECT(-952,-624),
  ABISELECT(-792,-516),
  ABISELECT(8,4),
  ABISELECT(-984,-640),
  (VTBL_ENTRY)&(_ZTI8S7681C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S7681C16D1Ev,_ZTv0_n28_N8S7681C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S7681C16D0Ev,_ZTv0_n28_N8S7681C16D0Ev),
  (VTBL_ENTRY)&_ZN8S7681C113v51Ev,
  (VTBL_ENTRY)&_ZN8S7681C113v52Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-768,-508),
  ABISELECT(-800,-520),
  ABISELECT(-960,-628),
  ABISELECT(-992,-644),
  (VTBL_ENTRY)&(_ZTI8S7681C16[0]),
  (VTBL_ENTRY)&_ZN7S7681C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7681C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v15Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v16Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v17Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v18Ev,
  (VTBL_ENTRY)&_ZN8S7681C123v47Ev,
  (VTBL_ENTRY)&_ZN8S7681C123v48Ev,
  (VTBL_ENTRY)&_ZN8S7681C123v49Ev,
  (VTBL_ENTRY)&_ZN8S7681C123v50Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-1280,-836),
  (VTBL_ENTRY)&(_ZTI8S7681C16[0]),
  (VTBL_ENTRY)&_ZN7S7681C93v33Ev,
  (VTBL_ENTRY)&_ZN7S7681C93v34Ev,
  (VTBL_ENTRY)&_ZN7S7681C93v35Ev,
  (VTBL_ENTRY)&_ZN7S7681C93v36Ev,
  (VTBL_ENTRY)&_ZN7S7681C93v37Ev,
  (VTBL_ENTRY)&_ZN7S7681C93v38Ev,
  (VTBL_ENTRY)&_ZN7S7681C93v39Ev,
  (VTBL_ENTRY)&_ZN7S7681C93v40Ev,
  (VTBL_ENTRY)&_ZN7S7681C93v41Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-2720,-1748),
  ABISELECT(-2752,-1764),
  (VTBL_ENTRY)&(_ZTI8S7681C16[0]),
  (VTBL_ENTRY)&_ZN7S7681C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7681C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v15Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v16Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v17Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v18Ev,
};
extern VTBL_ENTRY _ZTV8S7681C16[];
extern void _ZN7S7681C6D1Ev();
extern void _ZN7S7681C6D0Ev();
extern void _ZN7S7681C63v19Ev();
extern void _ZN7S7681C63v20Ev();
extern void _ZN7S7681C63v21Ev();
extern void _ZN7S7681C63v22Ev();
static  VTBL_ENTRY _tg__ZTV7S7681C6__8S7681C16[] = {
  ABISELECT(24,12),
  ABISELECT(2744,1760),
  0,
  (VTBL_ENTRY)&(_ZTI7S7681C6[0]),
  (VTBL_ENTRY)&_ZN7S7681C6D1Ev,
  (VTBL_ENTRY)&_ZN7S7681C6D0Ev,
  (VTBL_ENTRY)&_ZN7S7681C63v19Ev,
  (VTBL_ENTRY)&_ZN7S7681C63v20Ev,
  (VTBL_ENTRY)&_ZN7S7681C63v21Ev,
  (VTBL_ENTRY)&_ZN7S7681C63v22Ev,
};
extern void _ZN7S7681C32v8Ev();
extern void _ZN7S7681C32v9Ev();
extern void _ZN7S7681C33v10Ev();
extern void _ZN7S7681C33v11Ev();
extern void _ZN7S7681C43v12Ev();
extern void _ZN7S7681C43v13Ev();
extern void _ZN7S7681C43v14Ev();
extern void _ZN7S7681C23v15Ev();
extern void _ZN7S7681C23v16Ev();
extern void _ZN7S7681C23v17Ev();
extern void _ZN7S7681C23v18Ev();
static  VTBL_ENTRY _tg__ZTV7S7681C2__7S7681C6__8S7681C16[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-2720,-1748),
  ABISELECT(-2744,-1760),
  (VTBL_ENTRY)&(_ZTI7S7681C6[0]),
  (VTBL_ENTRY)&_ZN7S7681C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7681C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v15Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v16Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v17Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v18Ev,
};
extern void _ZN7S7681C32v8Ev();
extern void _ZN7S7681C32v9Ev();
extern void _ZN7S7681C33v10Ev();
extern void _ZN7S7681C33v11Ev();
static  VTBL_ENTRY _tg__ZTV7S7681C3__7S7681C6__8S7681C16[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI7S7681C6[0]),
  (VTBL_ENTRY)&_ZN7S7681C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7681C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v11Ev,
};
extern void _ZN8S7681C133v42Ev();
extern void _ZN8S7681C133v43Ev();
extern void _ZN8S7681C133v44Ev();
extern void _ZN8S7681C133v45Ev();
extern void _ZN8S7681C133v46Ev();
static  VTBL_ENTRY _tg__ZTV8S7681C13__8S7681C16[] = {
  ABISELECT(32,12),
  ABISELECT(-160,-108),
  0,
  (VTBL_ENTRY)&(_ZTI8S7681C13[0]),
  (VTBL_ENTRY)&_ZN8S7681C133v42Ev,
  (VTBL_ENTRY)&_ZN8S7681C133v43Ev,
  (VTBL_ENTRY)&_ZN8S7681C133v44Ev,
  (VTBL_ENTRY)&_ZN8S7681C133v45Ev,
  (VTBL_ENTRY)&_ZN8S7681C133v46Ev,
};
extern void _ZN7S7681C32v8Ev();
extern void _ZN7S7681C32v9Ev();
extern void _ZN7S7681C33v10Ev();
extern void _ZN7S7681C33v11Ev();
static  VTBL_ENTRY _tg__ZTV7S7681C3__8S7681C13__8S7681C16[] = {
  0,
  0,
  0,
  0,
  ABISELECT(160,108),
  (VTBL_ENTRY)&(_ZTI8S7681C13[0]),
  (VTBL_ENTRY)&_ZN7S7681C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7681C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v11Ev,
};
extern void _ZN7S7681C32v8Ev();
extern void _ZN7S7681C32v9Ev();
extern void _ZN7S7681C33v10Ev();
extern void _ZN7S7681C33v11Ev();
extern void _ZN7S7681C43v12Ev();
extern void _ZN7S7681C43v13Ev();
extern void _ZN7S7681C43v14Ev();
static  VTBL_ENTRY _tg__ZTV7S7681C4__8S7681C13__8S7681C16[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-32,-12),
  (VTBL_ENTRY)&(_ZTI8S7681C13[0]),
  (VTBL_ENTRY)&_ZN7S7681C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7681C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v14Ev,
};
extern void _ZN7S7681C32v8Ev();
extern void _ZN7S7681C32v9Ev();
extern void _ZN7S7681C33v10Ev();
extern void _ZN7S7681C33v11Ev();
extern void _ZN7S7681C43v12Ev();
extern void _ZN7S7681C43v13Ev();
extern void _ZN7S7681C43v14Ev();
extern void _ZN7S7681C23v15Ev();
extern void _ZN7S7681C23v16Ev();
extern void _ZN7S7681C23v17Ev();
extern void _ZN7S7681C23v18Ev();
extern void _ZN8S7681C123v47Ev();
extern void _ZN8S7681C123v48Ev();
extern void _ZN8S7681C123v49Ev();
extern void _ZN8S7681C123v50Ev();
extern void _ZN8S7681C10D1Ev();
extern void _ZN8S7681C10D0Ev();
extern void _ZN8S7681C103v57Ev();
extern void _ZN8S7681C103v58Ev();
extern void _ZN8S7681C103v59Ev();
extern void _ZN8S7681C103v60Ev();
extern void _ZN8S7681C103v61Ev();
extern void _ZN8S7681C103v62Ev();
extern void _ZN8S7681C103v63Ev();
extern void _ZN8S7681C103v64Ev();
static  VTBL_ENTRY _tg__ZTV8S7681C10__8S7681C16[] = {
  ABISELECT(848,568),
  ABISELECT(560,376),
  ABISELECT(552,372),
  ABISELECT(544,368),
  ABISELECT(-208,-132),
  ABISELECT(-240,-144),
  ABISELECT(-400,-252),
  0,
  (VTBL_ENTRY)&(_ZTI8S7681C10[0]),
  (VTBL_ENTRY)&_ZN7S7681C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7681C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v15Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v16Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v17Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v18Ev,
  (VTBL_ENTRY)&_ZN8S7681C123v47Ev,
  (VTBL_ENTRY)&_ZN8S7681C123v48Ev,
  (VTBL_ENTRY)&_ZN8S7681C123v49Ev,
  (VTBL_ENTRY)&_ZN8S7681C123v50Ev,
  (VTBL_ENTRY)&_ZN8S7681C10D1Ev,
  (VTBL_ENTRY)&_ZN8S7681C10D0Ev,
  (VTBL_ENTRY)&_ZN8S7681C103v57Ev,
  (VTBL_ENTRY)&_ZN8S7681C103v58Ev,
  (VTBL_ENTRY)&_ZN8S7681C103v59Ev,
  (VTBL_ENTRY)&_ZN8S7681C103v60Ev,
  (VTBL_ENTRY)&_ZN8S7681C103v61Ev,
  (VTBL_ENTRY)&_ZN8S7681C103v62Ev,
  (VTBL_ENTRY)&_ZN8S7681C103v63Ev,
  (VTBL_ENTRY)&_ZN8S7681C103v64Ev,
};
extern void _ZN7S7681C32v8Ev();
extern void _ZN7S7681C32v9Ev();
extern void _ZN7S7681C33v10Ev();
extern void _ZN7S7681C33v11Ev();
extern void _ZN7S7681C43v12Ev();
extern void _ZN7S7681C43v13Ev();
extern void _ZN7S7681C43v14Ev();
extern void _ZN7S7681C23v15Ev();
extern void _ZN7S7681C23v16Ev();
extern void _ZN7S7681C23v17Ev();
extern void _ZN7S7681C23v18Ev();
extern void _ZN8S7681C123v47Ev();
extern void _ZN8S7681C123v48Ev();
extern void _ZN8S7681C123v49Ev();
extern void _ZN8S7681C123v50Ev();
static  VTBL_ENTRY _tg__ZTV8S7681C128S7681C10__A1__8S7681C16[] = {
  ABISELECT(-208,-132),
  ABISELECT(-240,-144),
  ABISELECT(-400,-252),
  0,
  (VTBL_ENTRY)&(_ZTI8S7681C12[0]),
  (VTBL_ENTRY)&_ZN7S7681C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7681C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v15Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v16Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v17Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v18Ev,
  (VTBL_ENTRY)&_ZN8S7681C123v47Ev,
  (VTBL_ENTRY)&_ZN8S7681C123v48Ev,
  (VTBL_ENTRY)&_ZN8S7681C123v49Ev,
  (VTBL_ENTRY)&_ZN8S7681C123v50Ev,
};
extern void _ZN7S7681C32v8Ev();
extern void _ZN7S7681C32v9Ev();
extern void _ZN7S7681C33v10Ev();
extern void _ZN7S7681C33v11Ev();
extern void _ZN7S7681C43v12Ev();
extern void _ZN7S7681C43v13Ev();
extern void _ZN7S7681C43v14Ev();
extern void _ZN7S7681C23v15Ev();
extern void _ZN7S7681C23v16Ev();
extern void _ZN7S7681C23v17Ev();
extern void _ZN7S7681C23v18Ev();
static  VTBL_ENTRY _tg__ZTV7S7681C28S7681C128S7681C10__A1__8S7681C16[] = {
  ABISELECT(-400,-252),
  0,
  (VTBL_ENTRY)&(_ZTI7S7681C2[0]),
  (VTBL_ENTRY)&_ZN7S7681C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7681C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v15Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v16Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v17Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v18Ev,
};
extern void _ZN7S7681C32v8Ev();
extern void _ZN7S7681C32v9Ev();
extern void _ZN7S7681C33v10Ev();
extern void _ZN7S7681C33v11Ev();
static  VTBL_ENTRY _tg__ZTV7S7681C3__7S7681C28S7681C128S7681C10__A1__8S7681C16[] = {
  0,
  0,
  0,
  0,
  ABISELECT(400,252),
  (VTBL_ENTRY)&(_ZTI7S7681C2[0]),
  (VTBL_ENTRY)&_ZN7S7681C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7681C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v11Ev,
};
extern void _ZN8S7681C133v42Ev();
extern void _ZN8S7681C133v43Ev();
extern void _ZN8S7681C133v44Ev();
extern void _ZN8S7681C133v45Ev();
extern void _ZN8S7681C133v46Ev();
static  VTBL_ENTRY _tg__ZTV8S7681C13__8S7681C128S7681C10__A1__8S7681C16[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(32,12),
  ABISELECT(-160,-108),
  ABISELECT(240,144),
  (VTBL_ENTRY)&(_ZTI8S7681C12[0]),
  (VTBL_ENTRY)&_ZN8S7681C133v42Ev,
  (VTBL_ENTRY)&_ZN8S7681C133v43Ev,
  (VTBL_ENTRY)&_ZN8S7681C133v44Ev,
  (VTBL_ENTRY)&_ZN8S7681C133v45Ev,
  (VTBL_ENTRY)&_ZN8S7681C133v46Ev,
};
extern void _ZN7S7681C32v8Ev();
extern void _ZN7S7681C32v9Ev();
extern void _ZN7S7681C33v10Ev();
extern void _ZN7S7681C33v11Ev();
static  VTBL_ENTRY _tg__ZTV7S7681C3__8S7681C128S7681C10__A1__8S7681C16[] = {
  0,
  0,
  0,
  0,
  ABISELECT(400,252),
  (VTBL_ENTRY)&(_ZTI8S7681C12[0]),
  (VTBL_ENTRY)&_ZN7S7681C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7681C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v11Ev,
};
extern void _ZN7S7681C32v8Ev();
extern void _ZN7S7681C32v9Ev();
extern void _ZN7S7681C33v10Ev();
extern void _ZN7S7681C33v11Ev();
extern void _ZN7S7681C43v12Ev();
extern void _ZN7S7681C43v13Ev();
extern void _ZN7S7681C43v14Ev();
static  VTBL_ENTRY _tg__ZTV7S7681C4__8S7681C128S7681C10__A1__8S7681C16[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(208,132),
  (VTBL_ENTRY)&(_ZTI8S7681C12[0]),
  (VTBL_ENTRY)&_ZN7S7681C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7681C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v14Ev,
};
extern void _ZN7S7681C32v8Ev();
extern void _ZN7S7681C32v9Ev();
extern void _ZN7S7681C33v10Ev();
extern void _ZN7S7681C33v11Ev();
extern void _ZN7S7681C43v12Ev();
extern void _ZN7S7681C43v13Ev();
extern void _ZN7S7681C43v14Ev();
extern void _ZN8S7681C15D1Ev();
extern void _ZN8S7681C15D0Ev();
extern void _ZN8S7681C153v53Ev();
extern void _ZN8S7681C153v54Ev();
extern void _ZN8S7681C153v55Ev();
extern void _ZN8S7681C153v56Ev();
static  VTBL_ENTRY _tg__ZTV8S7681C158S7681C10__8S7681C16[] = {
  ABISELECT(560,376),
  ABISELECT(-496,-324),
  ABISELECT(-528,-336),
  ABISELECT(-688,-444),
  0,
  (VTBL_ENTRY)&(_ZTI8S7681C15[0]),
  (VTBL_ENTRY)&_ZN7S7681C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7681C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v14Ev,
  (VTBL_ENTRY)&_ZN8S7681C15D1Ev,
  (VTBL_ENTRY)&_ZN8S7681C15D0Ev,
  (VTBL_ENTRY)&_ZN8S7681C153v53Ev,
  (VTBL_ENTRY)&_ZN8S7681C153v54Ev,
  (VTBL_ENTRY)&_ZN8S7681C153v55Ev,
  (VTBL_ENTRY)&_ZN8S7681C153v56Ev,
};
extern void _ZN7S7681C32v8Ev();
extern void _ZN7S7681C32v9Ev();
extern void _ZN7S7681C33v10Ev();
extern void _ZN7S7681C33v11Ev();
static  VTBL_ENTRY _tg__ZTV7S7681C3__8S7681C158S7681C10__8S7681C16[] = {
  0,
  0,
  0,
  0,
  ABISELECT(688,444),
  (VTBL_ENTRY)&(_ZTI8S7681C15[0]),
  (VTBL_ENTRY)&_ZN7S7681C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7681C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v11Ev,
};
extern void _ZN8S7681C133v42Ev();
extern void _ZN8S7681C133v43Ev();
extern void _ZN8S7681C133v44Ev();
extern void _ZN8S7681C133v45Ev();
extern void _ZN8S7681C133v46Ev();
static  VTBL_ENTRY _tg__ZTV8S7681C13__8S7681C158S7681C10__8S7681C16[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(32,12),
  ABISELECT(-160,-108),
  ABISELECT(528,336),
  (VTBL_ENTRY)&(_ZTI8S7681C15[0]),
  (VTBL_ENTRY)&_ZN8S7681C133v42Ev,
  (VTBL_ENTRY)&_ZN8S7681C133v43Ev,
  (VTBL_ENTRY)&_ZN8S7681C133v44Ev,
  (VTBL_ENTRY)&_ZN8S7681C133v45Ev,
  (VTBL_ENTRY)&_ZN8S7681C133v46Ev,
};
extern void _ZN7S7681C32v8Ev();
extern void _ZN7S7681C32v9Ev();
extern void _ZN7S7681C33v10Ev();
extern void _ZN7S7681C33v11Ev();
extern void _ZN7S7681C43v12Ev();
extern void _ZN7S7681C43v13Ev();
extern void _ZN7S7681C43v14Ev();
static  VTBL_ENTRY _tg__ZTV7S7681C4__8S7681C158S7681C10__8S7681C16[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(496,324),
  (VTBL_ENTRY)&(_ZTI8S7681C15[0]),
  (VTBL_ENTRY)&_ZN7S7681C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7681C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v14Ev,
};
extern void _ZN7S7681C93v33Ev();
extern void _ZN7S7681C93v34Ev();
extern void _ZN7S7681C93v35Ev();
extern void _ZN7S7681C93v36Ev();
extern void _ZN7S7681C93v37Ev();
extern void _ZN7S7681C93v38Ev();
extern void _ZN7S7681C93v39Ev();
extern void _ZN7S7681C93v40Ev();
extern void _ZN7S7681C93v41Ev();
static  VTBL_ENTRY _tg__ZTV7S7681C9__8S7681C158S7681C10__8S7681C16[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-560,-376),
  (VTBL_ENTRY)&(_ZTI8S7681C15[0]),
  (VTBL_ENTRY)&_ZN7S7681C93v33Ev,
  (VTBL_ENTRY)&_ZN7S7681C93v34Ev,
  (VTBL_ENTRY)&_ZN7S7681C93v35Ev,
  (VTBL_ENTRY)&_ZN7S7681C93v36Ev,
  (VTBL_ENTRY)&_ZN7S7681C93v37Ev,
  (VTBL_ENTRY)&_ZN7S7681C93v38Ev,
  (VTBL_ENTRY)&_ZN7S7681C93v39Ev,
  (VTBL_ENTRY)&_ZN7S7681C93v40Ev,
  (VTBL_ENTRY)&_ZN7S7681C93v41Ev,
};
extern void _ZN7S7681C83v29Ev();
extern void _ZN7S7681C83v30Ev();
extern void _ZN7S7681C83v31Ev();
extern void _ZN7S7681C83v32Ev();
static  VTBL_ENTRY _tg__ZTV7S7681C8__8S7681C10__8S7681C16[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-544,-368),
  (VTBL_ENTRY)&(_ZTI8S7681C10[0]),
  (VTBL_ENTRY)&_ZN7S7681C83v29Ev,
  (VTBL_ENTRY)&_ZN7S7681C83v30Ev,
  (VTBL_ENTRY)&_ZN7S7681C83v31Ev,
  (VTBL_ENTRY)&_ZN7S7681C83v32Ev,
};
extern void ABISELECT(_ZTv0_n56_N8S7681C10D1Ev,_ZTv0_n28_N8S7681C10D1Ev)();
extern void ABISELECT(_ZThn552_N8S7681C10D1Ev,_ZThn372_N8S7681C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S7681C10D0Ev,_ZTv0_n28_N8S7681C10D0Ev)();
extern void ABISELECT(_ZThn552_N8S7681C10D0Ev,_ZThn372_N8S7681C10D0Ev)() __attribute__((weak));
extern void _ZN8S7681C113v51Ev();
extern void _ZN8S7681C113v52Ev();
static  VTBL_ENTRY _tg__ZTV8S7681C11__8S7681C10__8S7681C16[] = {
  0,
  0,
  ABISELECT(-552,-372),
  ABISELECT(-760,-504),
  ABISELECT(-952,-624),
  ABISELECT(-792,-516),
  ABISELECT(8,4),
  ABISELECT(-552,-372),
  (VTBL_ENTRY)&(_ZTI8S7681C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S7681C10D1Ev,_ZTv0_n28_N8S7681C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S7681C10D0Ev,_ZTv0_n28_N8S7681C10D0Ev),
  (VTBL_ENTRY)&_ZN8S7681C113v51Ev,
  (VTBL_ENTRY)&_ZN8S7681C113v52Ev,
};
extern void _ZN7S7681C32v8Ev();
extern void _ZN7S7681C32v9Ev();
extern void _ZN7S7681C33v10Ev();
extern void _ZN7S7681C33v11Ev();
extern void _ZN7S7681C43v12Ev();
extern void _ZN7S7681C43v13Ev();
extern void _ZN7S7681C43v14Ev();
extern void _ZN7S7681C23v15Ev();
extern void _ZN7S7681C23v16Ev();
extern void _ZN7S7681C23v17Ev();
extern void _ZN7S7681C23v18Ev();
extern void _ZN8S7681C123v47Ev();
extern void _ZN8S7681C123v48Ev();
extern void _ZN8S7681C123v49Ev();
extern void _ZN8S7681C123v50Ev();
static  VTBL_ENTRY _tg__ZTV8S7681C12__8S7681C10__8S7681C16[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-768,-508),
  ABISELECT(-800,-520),
  ABISELECT(-960,-628),
  ABISELECT(-560,-376),
  (VTBL_ENTRY)&(_ZTI8S7681C10[0]),
  (VTBL_ENTRY)&_ZN7S7681C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7681C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v15Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v16Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v17Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v18Ev,
  (VTBL_ENTRY)&_ZN8S7681C123v47Ev,
  (VTBL_ENTRY)&_ZN8S7681C123v48Ev,
  (VTBL_ENTRY)&_ZN8S7681C123v49Ev,
  (VTBL_ENTRY)&_ZN8S7681C123v50Ev,
};
extern void _ZN8S7681C133v42Ev();
extern void _ZN8S7681C133v43Ev();
extern void _ZN8S7681C133v44Ev();
extern void _ZN8S7681C133v45Ev();
extern void _ZN8S7681C133v46Ev();
static  VTBL_ENTRY _tg__ZTV8S7681C13__8S7681C10__8S7681C16[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(32,12),
  ABISELECT(-160,-108),
  ABISELECT(240,144),
  (VTBL_ENTRY)&(_ZTI8S7681C10[0]),
  (VTBL_ENTRY)&_ZN8S7681C133v42Ev,
  (VTBL_ENTRY)&_ZN8S7681C133v43Ev,
  (VTBL_ENTRY)&_ZN8S7681C133v44Ev,
  (VTBL_ENTRY)&_ZN8S7681C133v45Ev,
  (VTBL_ENTRY)&_ZN8S7681C133v46Ev,
};
extern void _ZN7S7681C32v8Ev();
extern void _ZN7S7681C32v9Ev();
extern void _ZN7S7681C33v10Ev();
extern void _ZN7S7681C33v11Ev();
static  VTBL_ENTRY _tg__ZTV7S7681C3__8S7681C10__8S7681C16[] = {
  0,
  0,
  0,
  0,
  ABISELECT(400,252),
  (VTBL_ENTRY)&(_ZTI8S7681C10[0]),
  (VTBL_ENTRY)&_ZN7S7681C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7681C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v11Ev,
};
extern void _ZN7S7681C32v8Ev();
extern void _ZN7S7681C32v9Ev();
extern void _ZN7S7681C33v10Ev();
extern void _ZN7S7681C33v11Ev();
extern void _ZN7S7681C43v12Ev();
extern void _ZN7S7681C43v13Ev();
extern void _ZN7S7681C43v14Ev();
static  VTBL_ENTRY _tg__ZTV7S7681C4__8S7681C10__8S7681C16[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(208,132),
  (VTBL_ENTRY)&(_ZTI8S7681C10[0]),
  (VTBL_ENTRY)&_ZN7S7681C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7681C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v14Ev,
};
extern void _ZN7S7681C32v8Ev();
extern void _ZN7S7681C32v9Ev();
extern void _ZN7S7681C33v10Ev();
extern void _ZN7S7681C33v11Ev();
extern void _ZN7S7681C43v12Ev();
extern void _ZN7S7681C43v13Ev();
extern void _ZN7S7681C43v14Ev();
extern void ABISELECT(_ZThn288_N8S7681C10D1Ev,_ZThn192_N8S7681C10D1Ev)();
extern void ABISELECT(_ZThn288_N8S7681C10D0Ev,_ZThn192_N8S7681C10D0Ev)();
extern void _ZN8S7681C153v53Ev();
extern void _ZN8S7681C153v54Ev();
extern void _ZN8S7681C153v55Ev();
extern void _ZN8S7681C153v56Ev();
static  VTBL_ENTRY _tg__ZTV8S7681C15__8S7681C10__8S7681C16[] = {
  ABISELECT(560,376),
  ABISELECT(-496,-324),
  ABISELECT(-528,-336),
  ABISELECT(-688,-444),
  ABISELECT(-288,-192),
  (VTBL_ENTRY)&(_ZTI8S7681C10[0]),
  (VTBL_ENTRY)&_ZN7S7681C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7681C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v14Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn288_N8S7681C10D1Ev,_ZThn192_N8S7681C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn288_N8S7681C10D0Ev,_ZThn192_N8S7681C10D0Ev),
  (VTBL_ENTRY)&_ZN8S7681C153v53Ev,
  (VTBL_ENTRY)&_ZN8S7681C153v54Ev,
  (VTBL_ENTRY)&_ZN8S7681C153v55Ev,
  (VTBL_ENTRY)&_ZN8S7681C153v56Ev,
};
extern void _ZN7S7681C93v33Ev();
extern void _ZN7S7681C93v34Ev();
extern void _ZN7S7681C93v35Ev();
extern void _ZN7S7681C93v36Ev();
extern void _ZN7S7681C93v37Ev();
extern void _ZN7S7681C93v38Ev();
extern void _ZN7S7681C93v39Ev();
extern void _ZN7S7681C93v40Ev();
extern void _ZN7S7681C93v41Ev();
static  VTBL_ENTRY _tg__ZTV7S7681C9__8S7681C10__8S7681C16[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-848,-568),
  (VTBL_ENTRY)&(_ZTI8S7681C10[0]),
  (VTBL_ENTRY)&_ZN7S7681C93v33Ev,
  (VTBL_ENTRY)&_ZN7S7681C93v34Ev,
  (VTBL_ENTRY)&_ZN7S7681C93v35Ev,
  (VTBL_ENTRY)&_ZN7S7681C93v36Ev,
  (VTBL_ENTRY)&_ZN7S7681C93v37Ev,
  (VTBL_ENTRY)&_ZN7S7681C93v38Ev,
  (VTBL_ENTRY)&_ZN7S7681C93v39Ev,
  (VTBL_ENTRY)&_ZN7S7681C93v40Ev,
  (VTBL_ENTRY)&_ZN7S7681C93v41Ev,
};
extern void _ZN8S7681C11D1Ev();
extern void _ZN8S7681C11D0Ev();
extern void _ZN8S7681C113v51Ev();
extern void _ZN8S7681C113v52Ev();
static  VTBL_ENTRY _tg__ZTV8S7681C11__8S7681C16[] = {
  ABISELECT(-760,-504),
  ABISELECT(-952,-624),
  ABISELECT(-792,-516),
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S7681C11[0]),
  (VTBL_ENTRY)&_ZN8S7681C11D1Ev,
  (VTBL_ENTRY)&_ZN8S7681C11D0Ev,
  (VTBL_ENTRY)&_ZN8S7681C113v51Ev,
  (VTBL_ENTRY)&_ZN8S7681C113v52Ev,
};
extern void _ZN7S7681C32v8Ev();
extern void _ZN7S7681C32v9Ev();
extern void _ZN7S7681C33v10Ev();
extern void _ZN7S7681C33v11Ev();
extern void _ZN7S7681C43v12Ev();
extern void _ZN7S7681C43v13Ev();
extern void _ZN7S7681C43v14Ev();
extern void _ZN7S7681C23v15Ev();
extern void _ZN7S7681C23v16Ev();
extern void _ZN7S7681C23v17Ev();
extern void _ZN7S7681C23v18Ev();
extern void _ZN8S7681C123v47Ev();
extern void _ZN8S7681C123v48Ev();
extern void _ZN8S7681C123v49Ev();
extern void _ZN8S7681C123v50Ev();
static  VTBL_ENTRY _tg__ZTV8S7681C12__8S7681C11__8S7681C16[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-768,-508),
  ABISELECT(-800,-520),
  ABISELECT(-960,-628),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S7681C11[0]),
  (VTBL_ENTRY)&_ZN7S7681C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7681C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v15Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v16Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v17Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v18Ev,
  (VTBL_ENTRY)&_ZN8S7681C123v47Ev,
  (VTBL_ENTRY)&_ZN8S7681C123v48Ev,
  (VTBL_ENTRY)&_ZN8S7681C123v49Ev,
  (VTBL_ENTRY)&_ZN8S7681C123v50Ev,
};
extern void _ZN8S7681C133v42Ev();
extern void _ZN8S7681C133v43Ev();
extern void _ZN8S7681C133v44Ev();
extern void _ZN8S7681C133v45Ev();
extern void _ZN8S7681C133v46Ev();
static  VTBL_ENTRY _tg__ZTV8S7681C13__8S7681C11__8S7681C16[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(32,12),
  ABISELECT(-160,-108),
  ABISELECT(792,516),
  (VTBL_ENTRY)&(_ZTI8S7681C11[0]),
  (VTBL_ENTRY)&_ZN8S7681C133v42Ev,
  (VTBL_ENTRY)&_ZN8S7681C133v43Ev,
  (VTBL_ENTRY)&_ZN8S7681C133v44Ev,
  (VTBL_ENTRY)&_ZN8S7681C133v45Ev,
  (VTBL_ENTRY)&_ZN8S7681C133v46Ev,
};
extern void _ZN7S7681C32v8Ev();
extern void _ZN7S7681C32v9Ev();
extern void _ZN7S7681C33v10Ev();
extern void _ZN7S7681C33v11Ev();
static  VTBL_ENTRY _tg__ZTV7S7681C3__8S7681C11__8S7681C16[] = {
  0,
  0,
  0,
  0,
  ABISELECT(952,624),
  (VTBL_ENTRY)&(_ZTI8S7681C11[0]),
  (VTBL_ENTRY)&_ZN7S7681C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7681C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v11Ev,
};
extern void _ZN7S7681C32v8Ev();
extern void _ZN7S7681C32v9Ev();
extern void _ZN7S7681C33v10Ev();
extern void _ZN7S7681C33v11Ev();
extern void _ZN7S7681C43v12Ev();
extern void _ZN7S7681C43v13Ev();
extern void _ZN7S7681C43v14Ev();
static  VTBL_ENTRY _tg__ZTV7S7681C4__8S7681C11__8S7681C16[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(760,504),
  (VTBL_ENTRY)&(_ZTI8S7681C11[0]),
  (VTBL_ENTRY)&_ZN7S7681C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7681C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v14Ev,
};
extern void _ZN7S7681C32v8Ev();
extern void _ZN7S7681C32v9Ev();
extern void _ZN7S7681C33v10Ev();
extern void _ZN7S7681C33v11Ev();
extern void _ZN7S7681C43v12Ev();
extern void _ZN7S7681C43v13Ev();
extern void _ZN7S7681C43v14Ev();
extern void _ZN7S7681C23v15Ev();
extern void _ZN7S7681C23v16Ev();
extern void _ZN7S7681C23v17Ev();
extern void _ZN7S7681C23v18Ev();
extern void _ZN8S7681C123v47Ev();
extern void _ZN8S7681C123v48Ev();
extern void _ZN8S7681C123v49Ev();
extern void _ZN8S7681C123v50Ev();
static  VTBL_ENTRY _tg__ZTV8S7681C12__8S7681C16[] = {
  ABISELECT(-768,-508),
  ABISELECT(-800,-520),
  ABISELECT(-960,-628),
  0,
  (VTBL_ENTRY)&(_ZTI8S7681C12[0]),
  (VTBL_ENTRY)&_ZN7S7681C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7681C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v15Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v16Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v17Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v18Ev,
  (VTBL_ENTRY)&_ZN8S7681C123v47Ev,
  (VTBL_ENTRY)&_ZN8S7681C123v48Ev,
  (VTBL_ENTRY)&_ZN8S7681C123v49Ev,
  (VTBL_ENTRY)&_ZN8S7681C123v50Ev,
};
extern void _ZN7S7681C32v8Ev();
extern void _ZN7S7681C32v9Ev();
extern void _ZN7S7681C33v10Ev();
extern void _ZN7S7681C33v11Ev();
extern void _ZN7S7681C43v12Ev();
extern void _ZN7S7681C43v13Ev();
extern void _ZN7S7681C43v14Ev();
extern void _ZN7S7681C23v15Ev();
extern void _ZN7S7681C23v16Ev();
extern void _ZN7S7681C23v17Ev();
extern void _ZN7S7681C23v18Ev();
static  VTBL_ENTRY _tg__ZTV7S7681C28S7681C12__8S7681C16[] = {
  ABISELECT(-960,-628),
  0,
  (VTBL_ENTRY)&(_ZTI7S7681C2[0]),
  (VTBL_ENTRY)&_ZN7S7681C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7681C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v15Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v16Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v17Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v18Ev,
};
extern void _ZN7S7681C32v8Ev();
extern void _ZN7S7681C32v9Ev();
extern void _ZN7S7681C33v10Ev();
extern void _ZN7S7681C33v11Ev();
static  VTBL_ENTRY _tg__ZTV7S7681C3__7S7681C28S7681C12__8S7681C16[] = {
  0,
  0,
  0,
  0,
  ABISELECT(960,628),
  (VTBL_ENTRY)&(_ZTI7S7681C2[0]),
  (VTBL_ENTRY)&_ZN7S7681C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7681C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v11Ev,
};
extern void _ZN8S7681C133v42Ev();
extern void _ZN8S7681C133v43Ev();
extern void _ZN8S7681C133v44Ev();
extern void _ZN8S7681C133v45Ev();
extern void _ZN8S7681C133v46Ev();
static  VTBL_ENTRY _tg__ZTV8S7681C13__8S7681C12__8S7681C16[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(32,12),
  ABISELECT(-160,-108),
  ABISELECT(800,520),
  (VTBL_ENTRY)&(_ZTI8S7681C12[0]),
  (VTBL_ENTRY)&_ZN8S7681C133v42Ev,
  (VTBL_ENTRY)&_ZN8S7681C133v43Ev,
  (VTBL_ENTRY)&_ZN8S7681C133v44Ev,
  (VTBL_ENTRY)&_ZN8S7681C133v45Ev,
  (VTBL_ENTRY)&_ZN8S7681C133v46Ev,
};
extern void _ZN7S7681C32v8Ev();
extern void _ZN7S7681C32v9Ev();
extern void _ZN7S7681C33v10Ev();
extern void _ZN7S7681C33v11Ev();
static  VTBL_ENTRY _tg__ZTV7S7681C3__8S7681C12__8S7681C16[] = {
  0,
  0,
  0,
  0,
  ABISELECT(960,628),
  (VTBL_ENTRY)&(_ZTI8S7681C12[0]),
  (VTBL_ENTRY)&_ZN7S7681C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7681C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v11Ev,
};
extern void _ZN7S7681C32v8Ev();
extern void _ZN7S7681C32v9Ev();
extern void _ZN7S7681C33v10Ev();
extern void _ZN7S7681C33v11Ev();
extern void _ZN7S7681C43v12Ev();
extern void _ZN7S7681C43v13Ev();
extern void _ZN7S7681C43v14Ev();
static  VTBL_ENTRY _tg__ZTV7S7681C4__8S7681C12__8S7681C16[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(768,508),
  (VTBL_ENTRY)&(_ZTI8S7681C12[0]),
  (VTBL_ENTRY)&_ZN7S7681C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7681C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v14Ev,
};
extern void _ZN7S7681C32v8Ev();
extern void _ZN7S7681C32v9Ev();
extern void _ZN7S7681C33v10Ev();
extern void _ZN7S7681C33v11Ev();
extern void _ZN7S7681C43v12Ev();
extern void _ZN7S7681C43v13Ev();
extern void _ZN7S7681C43v14Ev();
extern void _ZN7S7681C23v15Ev();
extern void _ZN7S7681C23v16Ev();
extern void _ZN7S7681C23v17Ev();
extern void _ZN7S7681C23v18Ev();
static  VTBL_ENTRY _tg__ZTV7S7681C2__A2__8S7681C16[] = {
  ABISELECT(-2720,-1748),
  0,
  (VTBL_ENTRY)&(_ZTI7S7681C2[0]),
  (VTBL_ENTRY)&_ZN7S7681C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7681C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v15Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v16Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v17Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v18Ev,
};
extern void _ZN7S7681C32v8Ev();
extern void _ZN7S7681C32v9Ev();
extern void _ZN7S7681C33v10Ev();
extern void _ZN7S7681C33v11Ev();
static  VTBL_ENTRY _tg__ZTV7S7681C3__7S7681C2__A2__8S7681C16[] = {
  0,
  0,
  0,
  0,
  ABISELECT(2720,1748),
  (VTBL_ENTRY)&(_ZTI7S7681C2[0]),
  (VTBL_ENTRY)&_ZN7S7681C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7681C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v11Ev,
};
static  VTT_ENTRY vtt_S7681C16[] = {
  {&(_ZTV8S7681C16[11]),  11,258},
  {&(_tg__ZTV7S7681C6__8S7681C16[4]),  4,10},
  {&(_tg__ZTV7S7681C2__7S7681C6__8S7681C16[14]),  14,25},
  {&(_tg__ZTV7S7681C3__7S7681C6__8S7681C16[6]),  6,10},
  {&(_ZTV8S7681C16[40]),  40,258},
  {&(_ZTV8S7681C16[53]),  53,258},
  {&(_ZTV8S7681C16[67]),  67,258},
  {&(_ZTV8S7681C16[111]),  111,258},
  {&(_ZTV8S7681C16[161]),  161,258},
  {&(_ZTV8S7681C16[174]),  174,258},
  {&(_ZTV8S7681C16[198]),  198,258},
  {&(_ZTV8S7681C16[142]),  142,258},
  {&(_ZTV8S7681C16[224]),  224,258},
  {&(_ZTV8S7681C16[28]),  28,258},
  {&(_ZTV8S7681C16[247]),  247,258},
  {&(_tg__ZTV8S7681C13__8S7681C16[4]),  4,9},
  {&(_tg__ZTV7S7681C3__8S7681C13__8S7681C16[6]),  6,10},
  {&(_tg__ZTV7S7681C4__8S7681C13__8S7681C16[9]),  9,16},
  {&(_tg__ZTV8S7681C10__8S7681C16[9]),  9,34},
  {&(_tg__ZTV8S7681C128S7681C10__A1__8S7681C16[5]),  5,20},
  {&(_tg__ZTV7S7681C28S7681C128S7681C10__A1__8S7681C16[3]),  3,14},
  {&(_tg__ZTV7S7681C3__7S7681C28S7681C128S7681C10__A1__8S7681C16[6]),  6,10},
  {&(_tg__ZTV8S7681C13__8S7681C128S7681C10__A1__8S7681C16[9]),  9,14},
  {&(_tg__ZTV7S7681C3__8S7681C128S7681C10__A1__8S7681C16[6]),  6,10},
  {&(_tg__ZTV7S7681C4__8S7681C128S7681C10__A1__8S7681C16[9]),  9,16},
  {&(_tg__ZTV8S7681C158S7681C10__8S7681C16[6]),  6,19},
  {&(_tg__ZTV7S7681C3__8S7681C158S7681C10__8S7681C16[6]),  6,10},
  {&(_tg__ZTV8S7681C13__8S7681C158S7681C10__8S7681C16[9]),  9,14},
  {&(_tg__ZTV7S7681C4__8S7681C158S7681C10__8S7681C16[9]),  9,16},
  {&(_tg__ZTV7S7681C9__8S7681C158S7681C10__8S7681C16[11]),  11,20},
  {&(_tg__ZTV7S7681C8__8S7681C10__8S7681C16[6]),  6,10},
  {&(_tg__ZTV8S7681C11__8S7681C10__8S7681C16[9]),  9,13},
  {&(_tg__ZTV8S7681C12__8S7681C10__8S7681C16[20]),  20,35},
  {&(_tg__ZTV8S7681C13__8S7681C10__8S7681C16[9]),  9,14},
  {&(_tg__ZTV7S7681C3__8S7681C10__8S7681C16[6]),  6,10},
  {&(_tg__ZTV7S7681C4__8S7681C10__8S7681C16[9]),  9,16},
  {&(_tg__ZTV8S7681C15__8S7681C10__8S7681C16[6]),  6,19},
  {&(_tg__ZTV7S7681C9__8S7681C10__8S7681C16[11]),  11,20},
  {&(_tg__ZTV8S7681C11__8S7681C16[6]),  6,10},
  {&(_tg__ZTV8S7681C12__8S7681C11__8S7681C16[20]),  20,35},
  {&(_tg__ZTV8S7681C13__8S7681C11__8S7681C16[9]),  9,14},
  {&(_tg__ZTV7S7681C3__8S7681C11__8S7681C16[6]),  6,10},
  {&(_tg__ZTV7S7681C4__8S7681C11__8S7681C16[9]),  9,16},
  {&(_tg__ZTV8S7681C12__8S7681C16[5]),  5,20},
  {&(_tg__ZTV7S7681C28S7681C12__8S7681C16[3]),  3,14},
  {&(_tg__ZTV7S7681C3__7S7681C28S7681C12__8S7681C16[6]),  6,10},
  {&(_tg__ZTV8S7681C13__8S7681C12__8S7681C16[9]),  9,14},
  {&(_tg__ZTV7S7681C3__8S7681C12__8S7681C16[6]),  6,10},
  {&(_tg__ZTV7S7681C4__8S7681C12__8S7681C16[9]),  9,16},
  {&(_tg__ZTV7S7681C2__A2__8S7681C16[3]),  3,14},
  {&(_tg__ZTV7S7681C3__7S7681C2__A2__8S7681C16[6]),  6,10},
};
extern VTBL_ENTRY _ZTI8S7681C16[];
extern  VTBL_ENTRY _ZTV8S7681C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7681C16[];
static VTBL_ENTRY alt_thunk_names13[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S7681C10D0Ev,_ZTv0_n28_N8S7681C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn552_N8S7681C10D0Ev,_ZThn372_N8S7681C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S7681C10D1Ev,_ZTv0_n28_N8S7681C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn552_N8S7681C10D1Ev,_ZThn372_N8S7681C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S7681C16D0Ev,_ZTv0_n28_N8S7681C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn984_N8S7681C16D0Ev,_ZThn640_N8S7681C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S7681C16D1Ev,_ZTv0_n28_N8S7681C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn984_N8S7681C16D1Ev,_ZThn640_N8S7681C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n200_N8S7681C16D0Ev,_ZTv0_n100_N8S7681C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn432_N8S7681C16D0Ev,_ZThn268_N8S7681C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n200_N8S7681C16D1Ev,_ZTv0_n100_N8S7681C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn432_N8S7681C16D1Ev,_ZThn268_N8S7681C16D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7681C16 = {  "S7681C16", // class name
  bases_S7681C16, 24,
  &(vtc_S7681C16[0]), // expected_vtbl_contents
  &(vtt_S7681C16[0]), // expected_vtt_contents
  ABISELECT(2976,1900), // object size
  NSPAIRA(_ZTI8S7681C16),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S7681C16),258, //virtual function table var
  11, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7681C16),51, //virtual table table var
  24, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names13,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7681C1  : S7681C2 , S7681C5 , virtual S7681C7 , S7681C16 , S7681C10 {
  ::S7682C17 s7681c1f0;
  virtual void  v1(); // _ZN7S7681C12v1Ev
  virtual void  v2(); // _ZN7S7681C12v2Ev
  virtual void  v3(); // _ZN7S7681C12v3Ev
  virtual void  v4(); // _ZN7S7681C12v4Ev
  virtual void  v5(); // _ZN7S7681C12v5Ev
  virtual void  v6(); // _ZN7S7681C12v6Ev
  virtual void  v7(); // _ZN7S7681C12v7Ev
  ~S7681C1(); // tgen
  S7681C1(); // tgen
};
//SIG(1 S7681C1) C1{ BC2{ VBC3{ v8 v9 v10 v11 Fs:13 Fp FD[8]} BC4{ BC3 v12 v13 v14 Fp[6]} v15 v16 v17 v18 Fp} BC5{ BC6{ VBC2 vd v19 v20 v21 v22} v23 v24 v25 v26 v27 v28 FD} VBC7{ VBC8{ v29 v30 v31 v32} BC9{ v33 v34 v35 v36 v37 v38 v39 v40 v41 FC4[7]} BC10{ VBC8 VBC11{ VBC12{ VBC13{ VBC3 VBC4 v42 v43 v44 v45 v46 Fp[2]} BC2 v47 v48 v49 v50 FL[5] FC14{} FD} vd v51 v52} BC12 BC15{ VBC3 VBC13 VBC9 BC4 vd v53 v54 v55 v56 Fi} vd v57 v58 v59 v60 v61 v62 v63 v64 Fi[8] Fc Fl} vd Fi[5] Fi:15} BC16{ BC8 VBC3 VBC13 VBC10 BC6 vd v65 v66 v67 v68 v69 v70 v71 Fp[2]} BC10 v1 v2 v3 v4 v5 v6 v7 FC17{ v72 v73 v74 v75 v76 v77 FC18{ v78 v79 v80 v81 Fs:13 Fp FD[8]} FD}}


void  S7681C1 ::v1(){vfunc_called(this, "_ZN7S7681C12v1Ev");}
void  S7681C1 ::v2(){vfunc_called(this, "_ZN7S7681C12v2Ev");}
void  S7681C1 ::v3(){vfunc_called(this, "_ZN7S7681C12v3Ev");}
void  S7681C1 ::v4(){vfunc_called(this, "_ZN7S7681C12v4Ev");}
void  S7681C1 ::v5(){vfunc_called(this, "_ZN7S7681C12v5Ev");}
void  S7681C1 ::v6(){vfunc_called(this, "_ZN7S7681C12v6Ev");}
void  S7681C1 ::v7(){vfunc_called(this, "_ZN7S7681C12v7Ev");}
S7681C1 ::~S7681C1(){ note_dtor("S7681C1", this);} // tgen
S7681C1 ::S7681C1(){ note_ctor("S7681C1", this);} // tgen

static void Test_S7681C1()
{
  extern Class_Descriptor cd_S7681C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(377,967)];
    init_test(&cd_S7681C1, buf);
    S7681C1 *dp, &lv = *(dp=new (buf) S7681C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(6016,3864), "sizeof(S7681C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7681C1)");
    /*is_ambiguous_... S7681C1::S7681C2 */ AMB_check_base_class_offset(lv, (S7681C3*)(S7681C2*), ABISELECT(1024,660), "S7681C1");
    /*is_ambiguous_... S7681C1::S7681C2 */ AMB_check_base_class_offset(lv, (S7681C3*)(S7681C2*), ABISELECT(1024,660), "S7681C1");
    /*is_ambiguous_... S7681C13::S7681C3 */ AMB_check_base_class_offset(lv, (S7681C3*)(S7681C13*), ABISELECT(1024,660), "S7681C1");
    /*is_ambiguous_... S7681C1::S7681C12 */ AMB_check_base_class_offset(lv, (S7681C3*)(S7681C2*)(S7681C12*), ABISELECT(1024,660), "S7681C1");
    /*is_ambiguous_... S7681C10::S7681C12 */ AMB_check_base_class_offset(lv, (S7681C3*)(S7681C2*)(S7681C12*)(S7681C10*)(S7681C7*), ABISELECT(1024,660), "S7681C1");
    /*is_ambiguous_... S7681C15::S7681C3 */ AMB_check_base_class_offset(lv, (S7681C3*)(S7681C15*)(S7681C10*)(S7681C7*), ABISELECT(1024,660), "S7681C1");
    /*is_ambiguous_... S7681C16::S7681C3 */ AMB_check_base_class_offset(lv, (S7681C3*)(S7681C16*), ABISELECT(1024,660), "S7681C1");
    /*is_ambiguous_... S7681C1::S7681C10 */ AMB_check_base_class_offset(lv, (S7681C3*)(S7681C2*)(S7681C12*)(S7681C10*), ABISELECT(1024,660), "S7681C1");
    /*is_ambiguous_... S7681C1::S7681C10 */ AMB_check_base_class_offset(lv, (S7681C3*)(S7681C15*)(S7681C10*), ABISELECT(1024,660), "S7681C1");
    /*is_ambiguous_... S7681C1::S7681C10 */ AMB_check_base_class_offset(lv, (S7681C3*)(S7681C2*)(S7681C12*)(S7681C10*), ABISELECT(1024,660), "S7681C1");
    /*is_ambiguous_... S7681C1::S7681C10 */ AMB_check_base_class_offset(lv, (S7681C3*)(S7681C15*)(S7681C10*), ABISELECT(1024,660), "S7681C1");
    /*is_ambiguous_... S7681C1::S7681C2 */ AMB_check_base_class_offset(lv, (S7681C3*)(S7681C4*)(S7681C2*), 0, "S7681C1");
    /*is_ambiguous_... S7681C1::S7681C2 */ AMB_check_base_class_offset(lv, (S7681C4*)(S7681C2*), 0, "S7681C1");
    /*is_ambiguous_... S7681C1::S7681C2 */ AMB_check_base_class_offset(lv, (S7681C2*), 0, "S7681C1");
    /*is_ambiguous_... S7681C1::S7681C2 */ AMB_check_base_class_offset(lv, (S7681C3*)(S7681C4*)(S7681C2*), ABISELECT(1184,768), "S7681C1");
    /*is_ambiguous_... S7681C1::S7681C2 */ AMB_check_base_class_offset(lv, (S7681C4*)(S7681C2*), ABISELECT(1184,768), "S7681C1");
    check_base_class_offset(lv, (S7681C2*)(S7681C6*)(S7681C5*), ABISELECT(1184,768), "S7681C1");
    check_base_class_offset(lv, (S7681C2*)(S7681C6*)(S7681C16*), ABISELECT(1184,768), "S7681C1");
    check_base_class_offset(lv, (S7681C6*)(S7681C5*), ABISELECT(224,136), "S7681C1");
    check_base_class_offset(lv, (S7681C5*), ABISELECT(224,136), "S7681C1");
    check_base_class_offset(lv, (S7681C8*)(S7681C7*), ABISELECT(3448,2224), "S7681C1");
    check_base_class_offset(lv, (S7681C8*)(S7681C10*)(S7681C7*), ABISELECT(3448,2224), "S7681C1");
    /*is_ambiguous_... S7681C1::S7681C10 */ AMB_check_base_class_offset(lv, (S7681C8*)(S7681C10*), ABISELECT(3448,2224), "S7681C1");
    /*is_ambiguous_... S7681C1::S7681C10 */ AMB_check_base_class_offset(lv, (S7681C8*)(S7681C10*), ABISELECT(3448,2224), "S7681C1");
    /*is_ambiguous_... S7681C7::S7681C9 */ AMB_check_base_class_offset(lv, (S7681C9*)(S7681C7*), ABISELECT(1408,904), "S7681C1");
    /*is_ambiguous_... S7681C1::S7681C4 */ AMB_check_base_class_offset(lv, (S7681C3*)(S7681C4*), ABISELECT(3792,2436), "S7681C1");
    check_base_class_offset(lv, (S7681C4*)(S7681C13*), ABISELECT(3792,2436), "S7681C1");
    /*is_ambiguous_... S7681C1::S7681C12 */ AMB_check_base_class_offset(lv, (S7681C13*)(S7681C12*), ABISELECT(3760,2424), "S7681C1");
    /*is_ambiguous_... S7681C10::S7681C12 */ AMB_check_base_class_offset(lv, (S7681C13*)(S7681C12*)(S7681C10*)(S7681C7*), ABISELECT(3760,2424), "S7681C1");
    check_base_class_offset(lv, (S7681C13*)(S7681C15*)(S7681C10*)(S7681C7*), ABISELECT(3760,2424), "S7681C1");
    check_base_class_offset(lv, (S7681C13*)(S7681C16*), ABISELECT(3760,2424), "S7681C1");
    /*is_ambiguous_... S7681C1::S7681C10 */ AMB_check_base_class_offset(lv, (S7681C13*)(S7681C12*)(S7681C10*), ABISELECT(3760,2424), "S7681C1");
    /*is_ambiguous_... S7681C1::S7681C10 */ AMB_check_base_class_offset(lv, (S7681C13*)(S7681C15*)(S7681C10*), ABISELECT(3760,2424), "S7681C1");
    /*is_ambiguous_... S7681C1::S7681C10 */ AMB_check_base_class_offset(lv, (S7681C13*)(S7681C12*)(S7681C10*), ABISELECT(3760,2424), "S7681C1");
    /*is_ambiguous_... S7681C1::S7681C10 */ AMB_check_base_class_offset(lv, (S7681C13*)(S7681C15*)(S7681C10*), ABISELECT(3760,2424), "S7681C1");
    /*is_ambiguous_... S7681C1::S7681C12 */ AMB_check_base_class_offset(lv, (S7681C3*)(S7681C4*)(S7681C2*)(S7681C12*), ABISELECT(3472,2232), "S7681C1");
    /*is_ambiguous_... S7681C1::S7681C12 */ AMB_check_base_class_offset(lv, (S7681C4*)(S7681C2*)(S7681C12*), ABISELECT(3472,2232), "S7681C1");
    /*is_ambiguous_... S7681C1::S7681C12 */ AMB_check_base_class_offset(lv, (S7681C2*)(S7681C12*), ABISELECT(3472,2232), "S7681C1");
    check_base_class_offset(lv, (S7681C12*)(S7681C11*), ABISELECT(3472,2232), "S7681C1");
    check_base_class_offset(lv, (S7681C11*)(S7681C10*)(S7681C7*), ABISELECT(3456,2228), "S7681C1");
    /*is_ambiguous_... S7681C1::S7681C10 */ AMB_check_base_class_offset(lv, (S7681C11*)(S7681C10*), ABISELECT(3456,2228), "S7681C1");
    /*is_ambiguous_... S7681C1::S7681C10 */ AMB_check_base_class_offset(lv, (S7681C11*)(S7681C10*), ABISELECT(3456,2228), "S7681C1");
    /*is_ambiguous_... S7681C10::S7681C12 */ AMB_check_base_class_offset(lv, (S7681C3*)(S7681C4*)(S7681C2*)(S7681C12*)(S7681C10*)(S7681C7*), ABISELECT(2880,1832), "S7681C1");
    /*is_ambiguous_... S7681C10::S7681C12 */ AMB_check_base_class_offset(lv, (S7681C4*)(S7681C2*)(S7681C12*)(S7681C10*)(S7681C7*), ABISELECT(2880,1832), "S7681C1");
    /*is_ambiguous_... S7681C10::S7681C12 */ AMB_check_base_class_offset(lv, (S7681C2*)(S7681C12*)(S7681C10*)(S7681C7*), ABISELECT(2880,1832), "S7681C1");
    /*is_ambiguous_... S7681C10::S7681C12 */ AMB_check_base_class_offset(lv, (S7681C12*)(S7681C10*)(S7681C7*), ABISELECT(2880,1832), "S7681C1");
    check_base_class_offset(lv, (S7681C9*)(S7681C15*)(S7681C10*)(S7681C7*), ABISELECT(4000,2568), "S7681C1");
    /*is_ambiguous_... S7681C1::S7681C10 */ AMB_check_base_class_offset(lv, (S7681C9*)(S7681C15*)(S7681C10*), ABISELECT(4000,2568), "S7681C1");
    /*is_ambiguous_... S7681C1::S7681C10 */ AMB_check_base_class_offset(lv, (S7681C9*)(S7681C15*)(S7681C10*), ABISELECT(4000,2568), "S7681C1");
    /*is_ambiguous_... S7681C15::S7681C4 */ AMB_check_base_class_offset(lv, (S7681C3*)(S7681C4*)(S7681C15*)(S7681C10*)(S7681C7*), ABISELECT(3168,2024), "S7681C1");
    /*is_ambiguous_... S7681C15::S7681C4 */ AMB_check_base_class_offset(lv, (S7681C4*)(S7681C15*)(S7681C10*)(S7681C7*), ABISELECT(3168,2024), "S7681C1");
    check_base_class_offset(lv, (S7681C15*)(S7681C10*)(S7681C7*), ABISELECT(3168,2024), "S7681C1");
    check_base_class_offset(lv, (S7681C10*)(S7681C7*), ABISELECT(2880,1832), "S7681C1");
    check_base_class_offset(lv, (S7681C7*), ABISELECT(1408,904), "S7681C1");
    /*is_ambiguous_... S7681C16::S7681C8 */ AMB_check_base_class_offset(lv, (S7681C8*)(S7681C16*), ABISELECT(256,152), "S7681C1");
    /*is_ambiguous_... S7681C1::S7681C10 */ AMB_check_base_class_offset(lv, (S7681C3*)(S7681C4*)(S7681C2*)(S7681C12*)(S7681C10*), ABISELECT(5472,3496), "S7681C1");
    /*is_ambiguous_... S7681C1::S7681C10 */ AMB_check_base_class_offset(lv, (S7681C4*)(S7681C2*)(S7681C12*)(S7681C10*), ABISELECT(5472,3496), "S7681C1");
    /*is_ambiguous_... S7681C1::S7681C10 */ AMB_check_base_class_offset(lv, (S7681C2*)(S7681C12*)(S7681C10*), ABISELECT(5472,3496), "S7681C1");
    /*is_ambiguous_... S7681C1::S7681C10 */ AMB_check_base_class_offset(lv, (S7681C12*)(S7681C10*), ABISELECT(5472,3496), "S7681C1");
    /*is_ambiguous_... S7681C1::S7681C10 */ AMB_check_base_class_offset(lv, (S7681C3*)(S7681C4*)(S7681C15*)(S7681C10*), ABISELECT(5760,3688), "S7681C1");
    /*is_ambiguous_... S7681C1::S7681C10 */ AMB_check_base_class_offset(lv, (S7681C4*)(S7681C15*)(S7681C10*), ABISELECT(5760,3688), "S7681C1");
    /*is_ambiguous_... S7681C1::S7681C10 */ AMB_check_base_class_offset(lv, (S7681C15*)(S7681C10*), ABISELECT(5760,3688), "S7681C1");
    check_base_class_offset(lv, (S7681C10*)(S7681C16*), ABISELECT(5472,3496), "S7681C1");
    check_base_class_offset(lv, (S7681C6*)(S7681C16*), ABISELECT(264,156), "S7681C1");
    check_base_class_offset(lv, (S7681C16*), ABISELECT(256,152), "S7681C1");
    /*is_ambiguous_... S7681C1::S7681C10 */ AMB_check_base_class_offset(lv, (S7681C3*)(S7681C4*)(S7681C2*)(S7681C12*)(S7681C10*), ABISELECT(288,168), "S7681C1");
    /*is_ambiguous_... S7681C1::S7681C10 */ AMB_check_base_class_offset(lv, (S7681C4*)(S7681C2*)(S7681C12*)(S7681C10*), ABISELECT(288,168), "S7681C1");
    /*is_ambiguous_... S7681C1::S7681C10 */ AMB_check_base_class_offset(lv, (S7681C2*)(S7681C12*)(S7681C10*), ABISELECT(288,168), "S7681C1");
    /*is_ambiguous_... S7681C1::S7681C10 */ AMB_check_base_class_offset(lv, (S7681C12*)(S7681C10*), ABISELECT(288,168), "S7681C1");
    /*is_ambiguous_... S7681C1::S7681C10 */ AMB_check_base_class_offset(lv, (S7681C3*)(S7681C4*)(S7681C15*)(S7681C10*), ABISELECT(576,360), "S7681C1");
    /*is_ambiguous_... S7681C1::S7681C10 */ AMB_check_base_class_offset(lv, (S7681C4*)(S7681C15*)(S7681C10*), ABISELECT(576,360), "S7681C1");
    /*is_ambiguous_... S7681C1::S7681C10 */ AMB_check_base_class_offset(lv, (S7681C15*)(S7681C10*), ABISELECT(576,360), "S7681C1");
    /*is_ambiguous_... S7681C1::S7681C10 */ AMB_check_base_class_offset(lv, (S7681C10*), ABISELECT(288,168), "S7681C1");
    check_field_offset(lv, s7681c1f0, ABISELECT(832,536), "S7681C1.s7681c1f0");
    test_class_info(&lv, &cd_S7681C1);
    dp->~S7681C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7681C1(Test_S7681C1, "S7681C1", ABISELECT(6016,3864));

#else // __cplusplus

extern void _ZN7S7681C1C1Ev();
extern void _ZN7S7681C1D1Ev();
Name_Map name_map_S7681C1[] = {
  NSPAIR(_ZN7S7681C1C1Ev),
  NSPAIR(_ZN7S7681C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7681C3;
extern VTBL_ENTRY _ZTI7S7681C3[];
extern  VTBL_ENTRY _ZTV7S7681C3[];
extern Class_Descriptor cd_S7681C3;
extern VTBL_ENTRY _ZTI7S7681C3[];
extern  VTBL_ENTRY _ZTV7S7681C3[];
extern Class_Descriptor cd_S7681C4;
extern VTBL_ENTRY _ZTI7S7681C4[];
extern  VTBL_ENTRY _ZTV7S7681C4[];
extern Class_Descriptor cd_S7681C2;
extern VTBL_ENTRY _ZTI7S7681C2[];
extern  VTBL_ENTRY _ZTV7S7681C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7681C2[];
extern Class_Descriptor cd_S7681C3;
extern VTBL_ENTRY _ZTI7S7681C3[];
extern  VTBL_ENTRY _ZTV7S7681C3[];
extern Class_Descriptor cd_S7681C4;
extern VTBL_ENTRY _ZTI7S7681C4[];
extern  VTBL_ENTRY _ZTV7S7681C4[];
extern Class_Descriptor cd_S7681C2;
extern VTBL_ENTRY _ZTI7S7681C2[];
extern  VTBL_ENTRY _ZTV7S7681C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7681C2[];
extern Class_Descriptor cd_S7681C6;
extern VTBL_ENTRY _ZTI7S7681C6[];
extern  VTBL_ENTRY _ZTV7S7681C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7681C6[];
extern Class_Descriptor cd_S7681C5;
extern VTBL_ENTRY _ZTI7S7681C5[];
extern  VTBL_ENTRY _ZTV7S7681C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7681C5[];
extern Class_Descriptor cd_S7681C8;
extern VTBL_ENTRY _ZTI7S7681C8[];
extern  VTBL_ENTRY _ZTV7S7681C8[];
extern Class_Descriptor cd_S7681C9;
extern VTBL_ENTRY _ZTI7S7681C9[];
extern  VTBL_ENTRY _ZTV7S7681C9[];
extern Class_Descriptor cd_S7681C3;
extern VTBL_ENTRY _ZTI7S7681C3[];
extern  VTBL_ENTRY _ZTV7S7681C3[];
extern Class_Descriptor cd_S7681C4;
extern VTBL_ENTRY _ZTI7S7681C4[];
extern  VTBL_ENTRY _ZTV7S7681C4[];
extern Class_Descriptor cd_S7681C13;
extern VTBL_ENTRY _ZTI8S7681C13[];
extern  VTBL_ENTRY _ZTV8S7681C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7681C13[];
extern Class_Descriptor cd_S7681C3;
extern VTBL_ENTRY _ZTI7S7681C3[];
extern  VTBL_ENTRY _ZTV7S7681C3[];
extern Class_Descriptor cd_S7681C4;
extern VTBL_ENTRY _ZTI7S7681C4[];
extern  VTBL_ENTRY _ZTV7S7681C4[];
extern Class_Descriptor cd_S7681C2;
extern VTBL_ENTRY _ZTI7S7681C2[];
extern  VTBL_ENTRY _ZTV7S7681C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7681C2[];
extern Class_Descriptor cd_S7681C12;
extern VTBL_ENTRY _ZTI8S7681C12[];
extern  VTBL_ENTRY _ZTV8S7681C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7681C12[];
extern Class_Descriptor cd_S7681C11;
extern VTBL_ENTRY _ZTI8S7681C11[];
extern  VTBL_ENTRY _ZTV8S7681C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7681C11[];
extern Class_Descriptor cd_S7681C3;
extern VTBL_ENTRY _ZTI7S7681C3[];
extern  VTBL_ENTRY _ZTV7S7681C3[];
extern Class_Descriptor cd_S7681C4;
extern VTBL_ENTRY _ZTI7S7681C4[];
extern  VTBL_ENTRY _ZTV7S7681C4[];
extern Class_Descriptor cd_S7681C2;
extern VTBL_ENTRY _ZTI7S7681C2[];
extern  VTBL_ENTRY _ZTV7S7681C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7681C2[];
extern Class_Descriptor cd_S7681C12;
extern VTBL_ENTRY _ZTI8S7681C12[];
extern  VTBL_ENTRY _ZTV8S7681C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7681C12[];
extern Class_Descriptor cd_S7681C9;
extern VTBL_ENTRY _ZTI7S7681C9[];
extern  VTBL_ENTRY _ZTV7S7681C9[];
extern Class_Descriptor cd_S7681C3;
extern VTBL_ENTRY _ZTI7S7681C3[];
extern  VTBL_ENTRY _ZTV7S7681C3[];
extern Class_Descriptor cd_S7681C4;
extern VTBL_ENTRY _ZTI7S7681C4[];
extern  VTBL_ENTRY _ZTV7S7681C4[];
extern Class_Descriptor cd_S7681C15;
extern VTBL_ENTRY _ZTI8S7681C15[];
extern  VTBL_ENTRY _ZTV8S7681C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7681C15[];
extern Class_Descriptor cd_S7681C10;
extern VTBL_ENTRY _ZTI8S7681C10[];
extern  VTBL_ENTRY _ZTV8S7681C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7681C10[];
extern Class_Descriptor cd_S7681C7;
extern VTBL_ENTRY _ZTI7S7681C7[];
extern  VTBL_ENTRY _ZTV7S7681C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7681C7[];
extern Class_Descriptor cd_S7681C8;
extern VTBL_ENTRY _ZTI7S7681C8[];
extern  VTBL_ENTRY _ZTV7S7681C8[];
extern Class_Descriptor cd_S7681C3;
extern VTBL_ENTRY _ZTI7S7681C3[];
extern  VTBL_ENTRY _ZTV7S7681C3[];
extern Class_Descriptor cd_S7681C4;
extern VTBL_ENTRY _ZTI7S7681C4[];
extern  VTBL_ENTRY _ZTV7S7681C4[];
extern Class_Descriptor cd_S7681C2;
extern VTBL_ENTRY _ZTI7S7681C2[];
extern  VTBL_ENTRY _ZTV7S7681C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7681C2[];
extern Class_Descriptor cd_S7681C12;
extern VTBL_ENTRY _ZTI8S7681C12[];
extern  VTBL_ENTRY _ZTV8S7681C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7681C12[];
extern Class_Descriptor cd_S7681C3;
extern VTBL_ENTRY _ZTI7S7681C3[];
extern  VTBL_ENTRY _ZTV7S7681C3[];
extern Class_Descriptor cd_S7681C4;
extern VTBL_ENTRY _ZTI7S7681C4[];
extern  VTBL_ENTRY _ZTV7S7681C4[];
extern Class_Descriptor cd_S7681C15;
extern VTBL_ENTRY _ZTI8S7681C15[];
extern  VTBL_ENTRY _ZTV8S7681C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7681C15[];
extern Class_Descriptor cd_S7681C10;
extern VTBL_ENTRY _ZTI8S7681C10[];
extern  VTBL_ENTRY _ZTV8S7681C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7681C10[];
extern Class_Descriptor cd_S7681C6;
extern VTBL_ENTRY _ZTI7S7681C6[];
extern  VTBL_ENTRY _ZTV7S7681C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7681C6[];
extern Class_Descriptor cd_S7681C16;
extern VTBL_ENTRY _ZTI8S7681C16[];
extern  VTBL_ENTRY _ZTV8S7681C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7681C16[];
extern Class_Descriptor cd_S7681C3;
extern VTBL_ENTRY _ZTI7S7681C3[];
extern  VTBL_ENTRY _ZTV7S7681C3[];
extern Class_Descriptor cd_S7681C4;
extern VTBL_ENTRY _ZTI7S7681C4[];
extern  VTBL_ENTRY _ZTV7S7681C4[];
extern Class_Descriptor cd_S7681C2;
extern VTBL_ENTRY _ZTI7S7681C2[];
extern  VTBL_ENTRY _ZTV7S7681C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7681C2[];
extern Class_Descriptor cd_S7681C12;
extern VTBL_ENTRY _ZTI8S7681C12[];
extern  VTBL_ENTRY _ZTV8S7681C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7681C12[];
extern Class_Descriptor cd_S7681C3;
extern VTBL_ENTRY _ZTI7S7681C3[];
extern  VTBL_ENTRY _ZTV7S7681C3[];
extern Class_Descriptor cd_S7681C4;
extern VTBL_ENTRY _ZTI7S7681C4[];
extern  VTBL_ENTRY _ZTV7S7681C4[];
extern Class_Descriptor cd_S7681C15;
extern VTBL_ENTRY _ZTI8S7681C15[];
extern  VTBL_ENTRY _ZTV8S7681C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7681C15[];
extern Class_Descriptor cd_S7681C10;
extern VTBL_ENTRY _ZTI8S7681C10[];
extern  VTBL_ENTRY _ZTV8S7681C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7681C10[];
static Base_Class bases_S7681C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7681C3,    ABISELECT(1024,660), //bcp->offset
    135, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    45, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S7681C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    33, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S7681C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    34, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S7681C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    35, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7681C3,    ABISELECT(1184,768), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S7681C4,    ABISELECT(1184,768), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S7681C2,    ABISELECT(1184,768), //bcp->offset
    145, //bcp->virtual_function_table_offset
    14, //num_negative_vtable_entries(t, bcp)
    47, //bcp->index_in_construction_vtbl_array
    63, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S7681C6,    ABISELECT(224,136), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    36, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S7681C5,    ABISELECT(224,136), //bcp->offset
    32, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    46, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    37, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7681C8,    ABISELECT(3448,2224), //bcp->offset
    280, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    49, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    27, //immediately_derived
  0, 1},
  {&cd_S7681C9,    ABISELECT(1408,904), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    28, //immediately_derived
  0, 0},
  {&cd_S7681C3,    ABISELECT(3792,2436), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S7681C4,    ABISELECT(3792,2436), //bcp->offset
    352, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    54, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    13, //immediately_derived
  0, 1},
  {&cd_S7681C13,    ABISELECT(3760,2424), //bcp->offset
    338, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    53, //bcp->index_in_construction_vtbl_array
    106, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    17, //immediately_derived
  0, 1},
  {&cd_S7681C3,    ABISELECT(3472,2232), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S7681C4,    ABISELECT(3472,2232), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S7681C2,    ABISELECT(3472,2232), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    101, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S7681C12,    ABISELECT(3472,2232), //bcp->offset
    303, //bcp->virtual_function_table_offset
    20, //num_negative_vtable_entries(t, bcp)
    52, //bcp->index_in_construction_vtbl_array
    100, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    18, //immediately_derived
  0, 1},
  {&cd_S7681C11,    ABISELECT(3456,2228), //bcp->offset
    290, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    51, //bcp->index_in_construction_vtbl_array
    95, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    27, //immediately_derived
  0, 1},
  {&cd_S7681C3,    ABISELECT(2880,1832), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S7681C4,    ABISELECT(2880,1832), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S7681C2,    ABISELECT(2880,1832), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    68, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S7681C12,    ABISELECT(2880,1832), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    67, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    27, //immediately_derived
  0, 0},
  {&cd_S7681C9,    ABISELECT(4000,2568), //bcp->offset
    368, //bcp->virtual_function_table_offset
    11, //num_negative_vtable_entries(t, bcp)
    56, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    26, //immediately_derived
  0, 1},
  {&cd_S7681C3,    ABISELECT(3168,2024), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    20, //init_seq
    25, //immediately_derived
  0, 0},
  {&cd_S7681C4,    ABISELECT(3168,2024), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    21, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S7681C15,    ABISELECT(3168,2024), //bcp->offset
    261, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    55, //bcp->index_in_construction_vtbl_array
    73, //bcp->base_subarray_index_in_construction_vtbl_array
    22, //init_seq
    27, //immediately_derived
  0, 0},
  {&cd_S7681C10,    ABISELECT(2880,1832), //bcp->offset
    227, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    50, //bcp->index_in_construction_vtbl_array
    66, //bcp->base_subarray_index_in_construction_vtbl_array
    23, //init_seq
    28, //immediately_derived
  0, 0},
  {&cd_S7681C7,    ABISELECT(1408,904), //bcp->offset
    170, //bcp->virtual_function_table_offset
    46, //num_negative_vtable_entries(t, bcp)
    48, //bcp->index_in_construction_vtbl_array
    65, //bcp->base_subarray_index_in_construction_vtbl_array
    24, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7681C8,    ABISELECT(256,152), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    38, //init_seq
    39, //immediately_derived
  0, 0},
  {&cd_S7681C3,    ABISELECT(5472,3496), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    25, //init_seq
    31, //immediately_derived
  0, 0},
  {&cd_S7681C4,    ABISELECT(5472,3496), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    26, //init_seq
    32, //immediately_derived
  0, 0},
  {&cd_S7681C2,    ABISELECT(5472,3496), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    111, //bcp->base_subarray_index_in_construction_vtbl_array
    27, //init_seq
    33, //immediately_derived
  0, 0},
  {&cd_S7681C12,    ABISELECT(5472,3496), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    110, //bcp->base_subarray_index_in_construction_vtbl_array
    28, //init_seq
    37, //immediately_derived
  0, 0},
  {&cd_S7681C3,    ABISELECT(5760,3688), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    29, //init_seq
    35, //immediately_derived
  0, 0},
  {&cd_S7681C4,    ABISELECT(5760,3688), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    30, //init_seq
    36, //immediately_derived
  0, 0},
  {&cd_S7681C15,    ABISELECT(5760,3688), //bcp->offset
    450, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    59, //bcp->index_in_construction_vtbl_array
    116, //bcp->base_subarray_index_in_construction_vtbl_array
    31, //init_seq
    37, //immediately_derived
  0, 0},
  {&cd_S7681C10,    ABISELECT(5472,3496), //bcp->offset
    388, //bcp->virtual_function_table_offset
    37, //num_negative_vtable_entries(t, bcp)
    58, //bcp->index_in_construction_vtbl_array
    109, //bcp->base_subarray_index_in_construction_vtbl_array
    32, //init_seq
    39, //immediately_derived
  0, 1},
  {&cd_S7681C6,    ABISELECT(264,156), //bcp->offset
    72, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    60, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    39, //init_seq
    39, //immediately_derived
  0, 0},
  {&cd_S7681C16,    ABISELECT(256,152), //bcp->offset
    48, //bcp->virtual_function_table_offset
    11, //num_negative_vtable_entries(t, bcp)
    57, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    40, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7681C3,    ABISELECT(288,168), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    41, //init_seq
    41, //immediately_derived
  0, 0},
  {&cd_S7681C4,    ABISELECT(288,168), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    42, //init_seq
    42, //immediately_derived
  0, 0},
  {&cd_S7681C2,    ABISELECT(288,168), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    27, //bcp->base_subarray_index_in_construction_vtbl_array
    43, //init_seq
    43, //immediately_derived
  0, 0},
  {&cd_S7681C12,    ABISELECT(288,168), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    26, //bcp->base_subarray_index_in_construction_vtbl_array
    44, //init_seq
    47, //immediately_derived
  0, 0},
  {&cd_S7681C3,    ABISELECT(576,360), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    45, //init_seq
    45, //immediately_derived
  0, 0},
  {&cd_S7681C4,    ABISELECT(576,360), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    46, //init_seq
    46, //immediately_derived
  0, 0},
  {&cd_S7681C15,    ABISELECT(576,360), //bcp->offset
    116, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    62, //bcp->index_in_construction_vtbl_array
    32, //bcp->base_subarray_index_in_construction_vtbl_array
    47, //init_seq
    47, //immediately_derived
  0, 0},
  {&cd_S7681C10,    ABISELECT(288,168), //bcp->offset
    82, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    61, //bcp->index_in_construction_vtbl_array
    25, //bcp->base_subarray_index_in_construction_vtbl_array
    48, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7681C1[];
extern void _ZN7S7681C32v8Ev();
extern void _ZN7S7681C32v9Ev();
extern void _ZN7S7681C33v10Ev();
extern void _ZN7S7681C33v11Ev();
extern void _ZN7S7681C43v12Ev();
extern void _ZN7S7681C43v13Ev();
extern void _ZN7S7681C43v14Ev();
extern void _ZN7S7681C23v15Ev();
extern void _ZN7S7681C23v16Ev();
extern void _ZN7S7681C23v17Ev();
extern void _ZN7S7681C23v18Ev();
extern void _ZN7S7681C12v1Ev();
extern void _ZN7S7681C12v2Ev();
extern void _ZN7S7681C12v3Ev();
extern void _ZN7S7681C12v4Ev();
extern void _ZN7S7681C12v5Ev();
extern void _ZN7S7681C12v6Ev();
extern void _ZN7S7681C12v7Ev();
extern void _ZN7S7681C1D1Ev();
extern void _ZN7S7681C1D0Ev();
extern void ABISELECT(_ZThn224_N7S7681C1D1Ev,_ZThn136_N7S7681C1D1Ev)();
extern void ABISELECT(_ZThn224_N7S7681C1D0Ev,_ZThn136_N7S7681C1D0Ev)();
extern void _ZN7S7681C63v19Ev();
extern void _ZN7S7681C63v20Ev();
extern void _ZN7S7681C63v21Ev();
extern void _ZN7S7681C63v22Ev();
extern void _ZN7S7681C53v23Ev();
extern void _ZN7S7681C53v24Ev();
extern void _ZN7S7681C53v25Ev();
extern void _ZN7S7681C53v26Ev();
extern void _ZN7S7681C53v27Ev();
extern void _ZN7S7681C53v28Ev();
extern void _ZN7S7681C83v29Ev();
extern void _ZN7S7681C83v30Ev();
extern void _ZN7S7681C83v31Ev();
extern void _ZN7S7681C83v32Ev();
extern void ABISELECT(_ZThn256_N7S7681C1D1Ev,_ZThn152_N7S7681C1D1Ev)();
extern void ABISELECT(_ZThn256_N7S7681C1D0Ev,_ZThn152_N7S7681C1D0Ev)();
extern void _ZN8S7681C163v65Ev();
extern void _ZN8S7681C163v66Ev();
extern void _ZN8S7681C163v67Ev();
extern void _ZN8S7681C163v68Ev();
extern void _ZN8S7681C163v69Ev();
extern void _ZN8S7681C163v70Ev();
extern void _ZN8S7681C163v71Ev();
extern void ABISELECT(_ZThn264_N7S7681C1D1Ev,_ZThn156_N7S7681C1D1Ev)();
extern void ABISELECT(_ZThn264_N7S7681C1D0Ev,_ZThn156_N7S7681C1D0Ev)();
extern void _ZN7S7681C63v19Ev();
extern void _ZN7S7681C63v20Ev();
extern void _ZN7S7681C63v21Ev();
extern void _ZN7S7681C63v22Ev();
extern void _ZN7S7681C32v8Ev();
extern void _ZN7S7681C32v9Ev();
extern void _ZN7S7681C33v10Ev();
extern void _ZN7S7681C33v11Ev();
extern void _ZN7S7681C43v12Ev();
extern void _ZN7S7681C43v13Ev();
extern void _ZN7S7681C43v14Ev();
extern void _ZN7S7681C23v15Ev();
extern void _ZN7S7681C23v16Ev();
extern void _ZN7S7681C23v17Ev();
extern void _ZN7S7681C23v18Ev();
extern void _ZN8S7681C123v47Ev();
extern void _ZN8S7681C123v48Ev();
extern void _ZN8S7681C123v49Ev();
extern void _ZN8S7681C123v50Ev();
extern void ABISELECT(_ZThn288_N7S7681C1D1Ev,_ZThn168_N7S7681C1D1Ev)();
extern void ABISELECT(_ZThn288_N7S7681C1D0Ev,_ZThn168_N7S7681C1D0Ev)();
extern void _ZN8S7681C103v57Ev();
extern void _ZN8S7681C103v58Ev();
extern void _ZN8S7681C103v59Ev();
extern void _ZN8S7681C103v60Ev();
extern void _ZN8S7681C103v61Ev();
extern void _ZN8S7681C103v62Ev();
extern void _ZN8S7681C103v63Ev();
extern void _ZN8S7681C103v64Ev();
extern void _ZN7S7681C32v8Ev();
extern void _ZN7S7681C32v9Ev();
extern void _ZN7S7681C33v10Ev();
extern void _ZN7S7681C33v11Ev();
extern void _ZN7S7681C43v12Ev();
extern void _ZN7S7681C43v13Ev();
extern void _ZN7S7681C43v14Ev();
extern void ABISELECT(_ZThn576_N7S7681C1D1Ev,_ZThn360_N7S7681C1D1Ev)();
extern void ABISELECT(_ZThn576_N7S7681C1D0Ev,_ZThn360_N7S7681C1D0Ev)();
extern void _ZN8S7681C153v53Ev();
extern void _ZN8S7681C153v54Ev();
extern void _ZN8S7681C153v55Ev();
extern void _ZN8S7681C153v56Ev();
extern void _ZN7S7681C32v8Ev();
extern void _ZN7S7681C32v9Ev();
extern void _ZN7S7681C33v10Ev();
extern void _ZN7S7681C33v11Ev();
extern void _ZN7S7681C32v8Ev();
extern void _ZN7S7681C32v9Ev();
extern void _ZN7S7681C33v10Ev();
extern void _ZN7S7681C33v11Ev();
extern void _ZN7S7681C43v12Ev();
extern void _ZN7S7681C43v13Ev();
extern void _ZN7S7681C43v14Ev();
extern void _ZN7S7681C23v15Ev();
extern void _ZN7S7681C23v16Ev();
extern void _ZN7S7681C23v17Ev();
extern void _ZN7S7681C23v18Ev();
extern void _ZN7S7681C93v33Ev();
extern void _ZN7S7681C93v34Ev();
extern void _ZN7S7681C93v35Ev();
extern void _ZN7S7681C93v36Ev();
extern void _ZN7S7681C93v37Ev();
extern void _ZN7S7681C93v38Ev();
extern void _ZN7S7681C93v39Ev();
extern void _ZN7S7681C93v40Ev();
extern void _ZN7S7681C93v41Ev();
extern void ABISELECT(_ZTv0_n152_N7S7681C1D1Ev,_ZTv0_n76_N7S7681C1D1Ev)();
extern void ABISELECT(_ZThn1408_N7S7681C1D1Ev,_ZThn904_N7S7681C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n152_N7S7681C1D0Ev,_ZTv0_n76_N7S7681C1D0Ev)();
extern void ABISELECT(_ZThn1408_N7S7681C1D0Ev,_ZThn904_N7S7681C1D0Ev)() __attribute__((weak));
extern void _ZN7S7681C32v8Ev();
extern void _ZN7S7681C32v9Ev();
extern void _ZN7S7681C33v10Ev();
extern void _ZN7S7681C33v11Ev();
extern void _ZN7S7681C43v12Ev();
extern void _ZN7S7681C43v13Ev();
extern void _ZN7S7681C43v14Ev();
extern void _ZN7S7681C23v15Ev();
extern void _ZN7S7681C23v16Ev();
extern void _ZN7S7681C23v17Ev();
extern void _ZN7S7681C23v18Ev();
extern void _ZN8S7681C123v47Ev();
extern void _ZN8S7681C123v48Ev();
extern void _ZN8S7681C123v49Ev();
extern void _ZN8S7681C123v50Ev();
extern void ABISELECT(_ZTvn1472_n152_N7S7681C1D1Ev,_ZTvn928_n76_N7S7681C1D1Ev)();
extern void ABISELECT(_ZTvn1472_n152_N7S7681C1D0Ev,_ZTvn928_n76_N7S7681C1D0Ev)();
extern void _ZN8S7681C103v57Ev();
extern void _ZN8S7681C103v58Ev();
extern void _ZN8S7681C103v59Ev();
extern void _ZN8S7681C103v60Ev();
extern void _ZN8S7681C103v61Ev();
extern void _ZN8S7681C103v62Ev();
extern void _ZN8S7681C103v63Ev();
extern void _ZN8S7681C103v64Ev();
extern void _ZN7S7681C32v8Ev();
extern void _ZN7S7681C32v9Ev();
extern void _ZN7S7681C33v10Ev();
extern void _ZN7S7681C33v11Ev();
extern void _ZN7S7681C43v12Ev();
extern void _ZN7S7681C43v13Ev();
extern void _ZN7S7681C43v14Ev();
extern void ABISELECT(_ZTvn1760_n152_N7S7681C1D1Ev,_ZTvn1120_n76_N7S7681C1D1Ev)();
extern void ABISELECT(_ZTvn1760_n152_N7S7681C1D0Ev,_ZTvn1120_n76_N7S7681C1D0Ev)();
extern void _ZN8S7681C153v53Ev();
extern void _ZN8S7681C153v54Ev();
extern void _ZN8S7681C153v55Ev();
extern void _ZN8S7681C153v56Ev();
extern void _ZN7S7681C83v29Ev();
extern void _ZN7S7681C83v30Ev();
extern void _ZN7S7681C83v31Ev();
extern void _ZN7S7681C83v32Ev();
extern void ABISELECT(_ZTv0_n56_N7S7681C1D1Ev,_ZTv0_n28_N7S7681C1D1Ev)();
extern void ABISELECT(_ZThn3456_N7S7681C1D1Ev,_ZThn2228_N7S7681C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N7S7681C1D0Ev,_ZTv0_n28_N7S7681C1D0Ev)();
extern void ABISELECT(_ZThn3456_N7S7681C1D0Ev,_ZThn2228_N7S7681C1D0Ev)() __attribute__((weak));
extern void _ZN8S7681C113v51Ev();
extern void _ZN8S7681C113v52Ev();
extern void _ZN7S7681C32v8Ev();
extern void _ZN7S7681C32v9Ev();
extern void _ZN7S7681C33v10Ev();
extern void _ZN7S7681C33v11Ev();
extern void _ZN7S7681C43v12Ev();
extern void _ZN7S7681C43v13Ev();
extern void _ZN7S7681C43v14Ev();
extern void _ZN7S7681C23v15Ev();
extern void _ZN7S7681C23v16Ev();
extern void _ZN7S7681C23v17Ev();
extern void _ZN7S7681C23v18Ev();
extern void _ZN8S7681C123v47Ev();
extern void _ZN8S7681C123v48Ev();
extern void _ZN8S7681C123v49Ev();
extern void _ZN8S7681C123v50Ev();
extern void _ZN8S7681C133v42Ev();
extern void _ZN8S7681C133v43Ev();
extern void _ZN8S7681C133v44Ev();
extern void _ZN8S7681C133v45Ev();
extern void _ZN8S7681C133v46Ev();
extern void _ZN7S7681C32v8Ev();
extern void _ZN7S7681C32v9Ev();
extern void _ZN7S7681C33v10Ev();
extern void _ZN7S7681C33v11Ev();
extern void _ZN7S7681C43v12Ev();
extern void _ZN7S7681C43v13Ev();
extern void _ZN7S7681C43v14Ev();
extern void _ZN7S7681C93v33Ev();
extern void _ZN7S7681C93v34Ev();
extern void _ZN7S7681C93v35Ev();
extern void _ZN7S7681C93v36Ev();
extern void _ZN7S7681C93v37Ev();
extern void _ZN7S7681C93v38Ev();
extern void _ZN7S7681C93v39Ev();
extern void _ZN7S7681C93v40Ev();
extern void _ZN7S7681C93v41Ev();
extern void _ZN7S7681C32v8Ev();
extern void _ZN7S7681C32v9Ev();
extern void _ZN7S7681C33v10Ev();
extern void _ZN7S7681C33v11Ev();
extern void _ZN7S7681C43v12Ev();
extern void _ZN7S7681C43v13Ev();
extern void _ZN7S7681C43v14Ev();
extern void _ZN7S7681C23v15Ev();
extern void _ZN7S7681C23v16Ev();
extern void _ZN7S7681C23v17Ev();
extern void _ZN7S7681C23v18Ev();
extern void _ZN8S7681C123v47Ev();
extern void _ZN8S7681C123v48Ev();
extern void _ZN8S7681C123v49Ev();
extern void _ZN8S7681C123v50Ev();
extern void ABISELECT(_ZTv0_n200_N7S7681C1D1Ev,_ZTv0_n100_N7S7681C1D1Ev)();
extern void ABISELECT(_ZThn5472_N7S7681C1D1Ev,_ZThn3496_N7S7681C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n200_N7S7681C1D0Ev,_ZTv0_n100_N7S7681C1D0Ev)();
extern void ABISELECT(_ZThn5472_N7S7681C1D0Ev,_ZThn3496_N7S7681C1D0Ev)() __attribute__((weak));
extern void _ZN8S7681C103v57Ev();
extern void _ZN8S7681C103v58Ev();
extern void _ZN8S7681C103v59Ev();
extern void _ZN8S7681C103v60Ev();
extern void _ZN8S7681C103v61Ev();
extern void _ZN8S7681C103v62Ev();
extern void _ZN8S7681C103v63Ev();
extern void _ZN8S7681C103v64Ev();
extern void _ZN7S7681C32v8Ev();
extern void _ZN7S7681C32v9Ev();
extern void _ZN7S7681C33v10Ev();
extern void _ZN7S7681C33v11Ev();
extern void _ZN7S7681C43v12Ev();
extern void _ZN7S7681C43v13Ev();
extern void _ZN7S7681C43v14Ev();
extern void ABISELECT(_ZTvn288_n200_N7S7681C1D1Ev,_ZTvn192_n100_N7S7681C1D1Ev)();
extern void ABISELECT(_ZTvn288_n200_N7S7681C1D0Ev,_ZTvn192_n100_N7S7681C1D0Ev)();
extern void _ZN8S7681C153v53Ev();
extern void _ZN8S7681C153v54Ev();
extern void _ZN8S7681C153v55Ev();
extern void _ZN8S7681C153v56Ev();
static  VTBL_ENTRY vtc_S7681C1[] = {
  ABISELECT(5472,3496),
  ABISELECT(4000,2568),
  ABISELECT(3792,2436),
  ABISELECT(3760,2424),
  ABISELECT(3472,2232),
  ABISELECT(3456,2228),
  ABISELECT(3448,2224),
  ABISELECT(1408,904),
  ABISELECT(1184,768),
  ABISELECT(1024,660),
  0,
  (VTBL_ENTRY)&(_ZTI7S7681C1[0]),
  (VTBL_ENTRY)&_ZN7S7681C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7681C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v15Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v16Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v17Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v18Ev,
  (VTBL_ENTRY)&_ZN7S7681C12v1Ev,
  (VTBL_ENTRY)&_ZN7S7681C12v2Ev,
  (VTBL_ENTRY)&_ZN7S7681C12v3Ev,
  (VTBL_ENTRY)&_ZN7S7681C12v4Ev,
  (VTBL_ENTRY)&_ZN7S7681C12v5Ev,
  (VTBL_ENTRY)&_ZN7S7681C12v6Ev,
  (VTBL_ENTRY)&_ZN7S7681C12v7Ev,
  (VTBL_ENTRY)&_ZN7S7681C1D1Ev,
  (VTBL_ENTRY)&_ZN7S7681C1D0Ev,
  ABISELECT(800,524),
  ABISELECT(960,632),
  ABISELECT(-224,-136),
  (VTBL_ENTRY)&(_ZTI7S7681C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn224_N7S7681C1D1Ev,_ZThn136_N7S7681C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn224_N7S7681C1D0Ev,_ZThn136_N7S7681C1D0Ev),
  (VTBL_ENTRY)&_ZN7S7681C63v19Ev,
  (VTBL_ENTRY)&_ZN7S7681C63v20Ev,
  (VTBL_ENTRY)&_ZN7S7681C63v21Ev,
  (VTBL_ENTRY)&_ZN7S7681C63v22Ev,
  (VTBL_ENTRY)&_ZN7S7681C53v23Ev,
  (VTBL_ENTRY)&_ZN7S7681C53v24Ev,
  (VTBL_ENTRY)&_ZN7S7681C53v25Ev,
  (VTBL_ENTRY)&_ZN7S7681C53v26Ev,
  (VTBL_ENTRY)&_ZN7S7681C53v27Ev,
  (VTBL_ENTRY)&_ZN7S7681C53v28Ev,
  ABISELECT(928,616),
  ABISELECT(3744,2416),
  ABISELECT(3216,2080),
  ABISELECT(3200,2076),
  ABISELECT(3192,2072),
  ABISELECT(5216,3344),
  ABISELECT(3536,2284),
  ABISELECT(3504,2272),
  ABISELECT(768,508),
  ABISELECT(-256,-152),
  (VTBL_ENTRY)&(_ZTI7S7681C1[0]),
  (VTBL_ENTRY)&_ZN7S7681C83v29Ev,
  (VTBL_ENTRY)&_ZN7S7681C83v30Ev,
  (VTBL_ENTRY)&_ZN7S7681C83v31Ev,
  (VTBL_ENTRY)&_ZN7S7681C83v32Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn256_N7S7681C1D1Ev,_ZThn152_N7S7681C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn256_N7S7681C1D0Ev,_ZThn152_N7S7681C1D0Ev),
  (VTBL_ENTRY)&_ZN8S7681C163v65Ev,
  (VTBL_ENTRY)&_ZN8S7681C163v66Ev,
  (VTBL_ENTRY)&_ZN8S7681C163v67Ev,
  (VTBL_ENTRY)&_ZN8S7681C163v68Ev,
  (VTBL_ENTRY)&_ZN8S7681C163v69Ev,
  (VTBL_ENTRY)&_ZN8S7681C163v70Ev,
  (VTBL_ENTRY)&_ZN8S7681C163v71Ev,
  ABISELECT(760,504),
  ABISELECT(920,612),
  ABISELECT(-264,-156),
  (VTBL_ENTRY)&(_ZTI7S7681C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn264_N7S7681C1D1Ev,_ZThn156_N7S7681C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn264_N7S7681C1D0Ev,_ZThn156_N7S7681C1D0Ev),
  (VTBL_ENTRY)&_ZN7S7681C63v19Ev,
  (VTBL_ENTRY)&_ZN7S7681C63v20Ev,
  (VTBL_ENTRY)&_ZN7S7681C63v21Ev,
  (VTBL_ENTRY)&_ZN7S7681C63v22Ev,
  ABISELECT(3712,2400),
  ABISELECT(3184,2064),
  ABISELECT(3168,2060),
  ABISELECT(3160,2056),
  ABISELECT(3504,2268),
  ABISELECT(3472,2256),
  ABISELECT(736,492),
  ABISELECT(-288,-168),
  (VTBL_ENTRY)&(_ZTI7S7681C1[0]),
  (VTBL_ENTRY)&_ZN7S7681C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7681C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v15Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v16Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v17Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v18Ev,
  (VTBL_ENTRY)&_ZN8S7681C123v47Ev,
  (VTBL_ENTRY)&_ZN8S7681C123v48Ev,
  (VTBL_ENTRY)&_ZN8S7681C123v49Ev,
  (VTBL_ENTRY)&_ZN8S7681C123v50Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn288_N7S7681C1D1Ev,_ZThn168_N7S7681C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn288_N7S7681C1D0Ev,_ZThn168_N7S7681C1D0Ev),
  (VTBL_ENTRY)&_ZN8S7681C103v57Ev,
  (VTBL_ENTRY)&_ZN8S7681C103v58Ev,
  (VTBL_ENTRY)&_ZN8S7681C103v59Ev,
  (VTBL_ENTRY)&_ZN8S7681C103v60Ev,
  (VTBL_ENTRY)&_ZN8S7681C103v61Ev,
  (VTBL_ENTRY)&_ZN8S7681C103v62Ev,
  (VTBL_ENTRY)&_ZN8S7681C103v63Ev,
  (VTBL_ENTRY)&_ZN8S7681C103v64Ev,
  ABISELECT(3424,2208),
  ABISELECT(3216,2076),
  ABISELECT(3184,2064),
  ABISELECT(448,300),
  ABISELECT(-576,-360),
  (VTBL_ENTRY)&(_ZTI7S7681C1[0]),
  (VTBL_ENTRY)&_ZN7S7681C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7681C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v14Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn576_N7S7681C1D1Ev,_ZThn360_N7S7681C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn576_N7S7681C1D0Ev,_ZThn360_N7S7681C1D0Ev),
  (VTBL_ENTRY)&_ZN8S7681C153v53Ev,
  (VTBL_ENTRY)&_ZN8S7681C153v54Ev,
  (VTBL_ENTRY)&_ZN8S7681C153v55Ev,
  (VTBL_ENTRY)&_ZN8S7681C153v56Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-1024,-660),
  (VTBL_ENTRY)&(_ZTI7S7681C1[0]),
  (VTBL_ENTRY)&_ZN7S7681C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7681C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v11Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-160,-108),
  ABISELECT(-1184,-768),
  (VTBL_ENTRY)&(_ZTI7S7681C1[0]),
  (VTBL_ENTRY)&_ZN7S7681C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7681C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v15Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v16Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v17Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v18Ev,
  ABISELECT(1760,1120),
  ABISELECT(1760,1120),
  ABISELECT(1760,1120),
  ABISELECT(1760,1120),
  ABISELECT(1472,928),
  ABISELECT(1472,928),
  ABISELECT(1472,928),
  ABISELECT(1472,928),
  ABISELECT(1472,928),
  ABISELECT(1472,928),
  ABISELECT(1472,928),
  ABISELECT(1472,928),
  ABISELECT(1472,928),
  ABISELECT(1472,928),
  ABISELECT(1472,928),
  ABISELECT(1472,928),
  ABISELECT(1472,928),
  ABISELECT(1472,928),
  ABISELECT(1472,928),
  ABISELECT(1472,928),
  ABISELECT(1472,928),
  ABISELECT(1472,928),
  ABISELECT(1472,928),
  ABISELECT(1472,928),
  ABISELECT(1472,928),
  ABISELECT(1472,928),
  ABISELECT(1472,928),
  ABISELECT(-1408,-904),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(2592,1664),
  ABISELECT(2384,1532),
  ABISELECT(-384,-244),
  ABISELECT(2352,1520),
  ABISELECT(2064,1328),
  ABISELECT(2048,1324),
  ABISELECT(2040,1320),
  ABISELECT(-1408,-904),
  (VTBL_ENTRY)&(_ZTI7S7681C1[0]),
  (VTBL_ENTRY)&_ZN7S7681C93v33Ev,
  (VTBL_ENTRY)&_ZN7S7681C93v34Ev,
  (VTBL_ENTRY)&_ZN7S7681C93v35Ev,
  (VTBL_ENTRY)&_ZN7S7681C93v36Ev,
  (VTBL_ENTRY)&_ZN7S7681C93v37Ev,
  (VTBL_ENTRY)&_ZN7S7681C93v38Ev,
  (VTBL_ENTRY)&_ZN7S7681C93v39Ev,
  (VTBL_ENTRY)&_ZN7S7681C93v40Ev,
  (VTBL_ENTRY)&_ZN7S7681C93v41Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n152_N7S7681C1D1Ev,_ZTv0_n76_N7S7681C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n152_N7S7681C1D0Ev,_ZTv0_n76_N7S7681C1D0Ev),
  ABISELECT(1120,736),
  ABISELECT(592,400),
  ABISELECT(576,396),
  ABISELECT(568,392),
  ABISELECT(912,604),
  ABISELECT(880,592),
  ABISELECT(-1856,-1172),
  ABISELECT(-2880,-1832),
  (VTBL_ENTRY)&(_ZTI7S7681C1[0]),
  (VTBL_ENTRY)&_ZN7S7681C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7681C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v15Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v16Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v17Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v18Ev,
  (VTBL_ENTRY)&_ZN8S7681C123v47Ev,
  (VTBL_ENTRY)&_ZN8S7681C123v48Ev,
  (VTBL_ENTRY)&_ZN8S7681C123v49Ev,
  (VTBL_ENTRY)&_ZN8S7681C123v50Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn1472_n152_N7S7681C1D1Ev,_ZTvn928_n76_N7S7681C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn1472_n152_N7S7681C1D0Ev,_ZTvn928_n76_N7S7681C1D0Ev),
  (VTBL_ENTRY)&_ZN8S7681C103v57Ev,
  (VTBL_ENTRY)&_ZN8S7681C103v58Ev,
  (VTBL_ENTRY)&_ZN8S7681C103v59Ev,
  (VTBL_ENTRY)&_ZN8S7681C103v60Ev,
  (VTBL_ENTRY)&_ZN8S7681C103v61Ev,
  (VTBL_ENTRY)&_ZN8S7681C103v62Ev,
  (VTBL_ENTRY)&_ZN8S7681C103v63Ev,
  (VTBL_ENTRY)&_ZN8S7681C103v64Ev,
  ABISELECT(832,544),
  ABISELECT(624,412),
  ABISELECT(592,400),
  ABISELECT(-2144,-1364),
  ABISELECT(-3168,-2024),
  (VTBL_ENTRY)&(_ZTI7S7681C1[0]),
  (VTBL_ENTRY)&_ZN7S7681C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7681C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v14Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn1760_n152_N7S7681C1D1Ev,_ZTvn1120_n76_N7S7681C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn1760_n152_N7S7681C1D0Ev,_ZTvn1120_n76_N7S7681C1D0Ev),
  (VTBL_ENTRY)&_ZN8S7681C153v53Ev,
  (VTBL_ENTRY)&_ZN8S7681C153v54Ev,
  (VTBL_ENTRY)&_ZN8S7681C153v55Ev,
  (VTBL_ENTRY)&_ZN8S7681C153v56Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-3448,-2224),
  (VTBL_ENTRY)&(_ZTI7S7681C1[0]),
  (VTBL_ENTRY)&_ZN7S7681C83v29Ev,
  (VTBL_ENTRY)&_ZN7S7681C83v30Ev,
  (VTBL_ENTRY)&_ZN7S7681C83v31Ev,
  (VTBL_ENTRY)&_ZN7S7681C83v32Ev,
  0,
  0,
  ABISELECT(-3456,-2228),
  ABISELECT(336,208),
  ABISELECT(-2432,-1568),
  ABISELECT(304,196),
  ABISELECT(16,4),
  ABISELECT(-3456,-2228),
  (VTBL_ENTRY)&(_ZTI7S7681C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N7S7681C1D1Ev,_ZTv0_n28_N7S7681C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N7S7681C1D0Ev,_ZTv0_n28_N7S7681C1D0Ev),
  (VTBL_ENTRY)&_ZN8S7681C113v51Ev,
  (VTBL_ENTRY)&_ZN8S7681C113v52Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(320,204),
  ABISELECT(288,192),
  ABISELECT(-2448,-1572),
  ABISELECT(-3472,-2232),
  (VTBL_ENTRY)&(_ZTI7S7681C1[0]),
  (VTBL_ENTRY)&_ZN7S7681C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7681C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v15Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v16Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v17Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v18Ev,
  (VTBL_ENTRY)&_ZN8S7681C123v47Ev,
  (VTBL_ENTRY)&_ZN8S7681C123v48Ev,
  (VTBL_ENTRY)&_ZN8S7681C123v49Ev,
  (VTBL_ENTRY)&_ZN8S7681C123v50Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(32,12),
  ABISELECT(-2736,-1764),
  ABISELECT(-3760,-2424),
  (VTBL_ENTRY)&(_ZTI7S7681C1[0]),
  (VTBL_ENTRY)&_ZN8S7681C133v42Ev,
  (VTBL_ENTRY)&_ZN8S7681C133v43Ev,
  (VTBL_ENTRY)&_ZN8S7681C133v44Ev,
  (VTBL_ENTRY)&_ZN8S7681C133v45Ev,
  (VTBL_ENTRY)&_ZN8S7681C133v46Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-3792,-2436),
  (VTBL_ENTRY)&(_ZTI7S7681C1[0]),
  (VTBL_ENTRY)&_ZN7S7681C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7681C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v14Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-4000,-2568),
  (VTBL_ENTRY)&(_ZTI7S7681C1[0]),
  (VTBL_ENTRY)&_ZN7S7681C93v33Ev,
  (VTBL_ENTRY)&_ZN7S7681C93v34Ev,
  (VTBL_ENTRY)&_ZN7S7681C93v35Ev,
  (VTBL_ENTRY)&_ZN7S7681C93v36Ev,
  (VTBL_ENTRY)&_ZN7S7681C93v37Ev,
  (VTBL_ENTRY)&_ZN7S7681C93v38Ev,
  (VTBL_ENTRY)&_ZN7S7681C93v39Ev,
  (VTBL_ENTRY)&_ZN7S7681C93v40Ev,
  (VTBL_ENTRY)&_ZN7S7681C93v41Ev,
  ABISELECT(288,192),
  ABISELECT(288,192),
  ABISELECT(288,192),
  ABISELECT(288,192),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-5472,-3496),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-1472,-928),
  ABISELECT(-2000,-1264),
  ABISELECT(-2016,-1268),
  ABISELECT(-2024,-1272),
  ABISELECT(-1680,-1060),
  ABISELECT(-1712,-1072),
  ABISELECT(-4448,-2836),
  ABISELECT(-5472,-3496),
  (VTBL_ENTRY)&(_ZTI7S7681C1[0]),
  (VTBL_ENTRY)&_ZN7S7681C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7681C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v15Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v16Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v17Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v18Ev,
  (VTBL_ENTRY)&_ZN8S7681C123v47Ev,
  (VTBL_ENTRY)&_ZN8S7681C123v48Ev,
  (VTBL_ENTRY)&_ZN8S7681C123v49Ev,
  (VTBL_ENTRY)&_ZN8S7681C123v50Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n200_N7S7681C1D1Ev,_ZTv0_n100_N7S7681C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n200_N7S7681C1D0Ev,_ZTv0_n100_N7S7681C1D0Ev),
  (VTBL_ENTRY)&_ZN8S7681C103v57Ev,
  (VTBL_ENTRY)&_ZN8S7681C103v58Ev,
  (VTBL_ENTRY)&_ZN8S7681C103v59Ev,
  (VTBL_ENTRY)&_ZN8S7681C103v60Ev,
  (VTBL_ENTRY)&_ZN8S7681C103v61Ev,
  (VTBL_ENTRY)&_ZN8S7681C103v62Ev,
  (VTBL_ENTRY)&_ZN8S7681C103v63Ev,
  (VTBL_ENTRY)&_ZN8S7681C103v64Ev,
  ABISELECT(-1760,-1120),
  ABISELECT(-1968,-1252),
  ABISELECT(-2000,-1264),
  ABISELECT(-4736,-3028),
  ABISELECT(-5760,-3688),
  (VTBL_ENTRY)&(_ZTI7S7681C1[0]),
  (VTBL_ENTRY)&_ZN7S7681C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7681C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v14Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn288_n200_N7S7681C1D1Ev,_ZTvn192_n100_N7S7681C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn288_n200_N7S7681C1D0Ev,_ZTvn192_n100_N7S7681C1D0Ev),
  (VTBL_ENTRY)&_ZN8S7681C153v53Ev,
  (VTBL_ENTRY)&_ZN8S7681C153v54Ev,
  (VTBL_ENTRY)&_ZN8S7681C153v55Ev,
  (VTBL_ENTRY)&_ZN8S7681C153v56Ev,
};
extern VTBL_ENTRY _ZTV7S7681C1[];
extern void _ZN7S7681C32v8Ev();
extern void _ZN7S7681C32v9Ev();
extern void _ZN7S7681C33v10Ev();
extern void _ZN7S7681C33v11Ev();
extern void _ZN7S7681C43v12Ev();
extern void _ZN7S7681C43v13Ev();
extern void _ZN7S7681C43v14Ev();
extern void _ZN7S7681C23v15Ev();
extern void _ZN7S7681C23v16Ev();
extern void _ZN7S7681C23v17Ev();
extern void _ZN7S7681C23v18Ev();
static  VTBL_ENTRY _tg__ZTV7S7681C2__A__7S7681C1[] = {
  ABISELECT(1024,660),
  0,
  (VTBL_ENTRY)&(_ZTI7S7681C2[0]),
  (VTBL_ENTRY)&_ZN7S7681C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7681C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v15Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v16Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v17Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v18Ev,
};
extern void _ZN7S7681C32v8Ev();
extern void _ZN7S7681C32v9Ev();
extern void _ZN7S7681C33v10Ev();
extern void _ZN7S7681C33v11Ev();
static  VTBL_ENTRY _tg__ZTV7S7681C3__7S7681C2__A__7S7681C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-1024,-660),
  (VTBL_ENTRY)&(_ZTI7S7681C2[0]),
  (VTBL_ENTRY)&_ZN7S7681C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7681C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v11Ev,
};
extern void _ZN7S7681C5D1Ev();
extern void _ZN7S7681C5D0Ev();
extern void _ZN7S7681C63v19Ev();
extern void _ZN7S7681C63v20Ev();
extern void _ZN7S7681C63v21Ev();
extern void _ZN7S7681C63v22Ev();
extern void _ZN7S7681C53v23Ev();
extern void _ZN7S7681C53v24Ev();
extern void _ZN7S7681C53v25Ev();
extern void _ZN7S7681C53v26Ev();
extern void _ZN7S7681C53v27Ev();
extern void _ZN7S7681C53v28Ev();
static  VTBL_ENTRY _tg__ZTV7S7681C5__7S7681C1[] = {
  ABISELECT(800,524),
  ABISELECT(960,632),
  0,
  (VTBL_ENTRY)&(_ZTI7S7681C5[0]),
  (VTBL_ENTRY)&_ZN7S7681C5D1Ev,
  (VTBL_ENTRY)&_ZN7S7681C5D0Ev,
  (VTBL_ENTRY)&_ZN7S7681C63v19Ev,
  (VTBL_ENTRY)&_ZN7S7681C63v20Ev,
  (VTBL_ENTRY)&_ZN7S7681C63v21Ev,
  (VTBL_ENTRY)&_ZN7S7681C63v22Ev,
  (VTBL_ENTRY)&_ZN7S7681C53v23Ev,
  (VTBL_ENTRY)&_ZN7S7681C53v24Ev,
  (VTBL_ENTRY)&_ZN7S7681C53v25Ev,
  (VTBL_ENTRY)&_ZN7S7681C53v26Ev,
  (VTBL_ENTRY)&_ZN7S7681C53v27Ev,
  (VTBL_ENTRY)&_ZN7S7681C53v28Ev,
};
extern void _ZN7S7681C6D1Ev();
extern void _ZN7S7681C6D0Ev();
extern void _ZN7S7681C63v19Ev();
extern void _ZN7S7681C63v20Ev();
extern void _ZN7S7681C63v21Ev();
extern void _ZN7S7681C63v22Ev();
static  VTBL_ENTRY _tg__ZTV7S7681C67S7681C5__7S7681C1[] = {
  ABISELECT(800,524),
  ABISELECT(960,632),
  0,
  (VTBL_ENTRY)&(_ZTI7S7681C6[0]),
  (VTBL_ENTRY)&_ZN7S7681C6D1Ev,
  (VTBL_ENTRY)&_ZN7S7681C6D0Ev,
  (VTBL_ENTRY)&_ZN7S7681C63v19Ev,
  (VTBL_ENTRY)&_ZN7S7681C63v20Ev,
  (VTBL_ENTRY)&_ZN7S7681C63v21Ev,
  (VTBL_ENTRY)&_ZN7S7681C63v22Ev,
};
extern void _ZN7S7681C32v8Ev();
extern void _ZN7S7681C32v9Ev();
extern void _ZN7S7681C33v10Ev();
extern void _ZN7S7681C33v11Ev();
extern void _ZN7S7681C43v12Ev();
extern void _ZN7S7681C43v13Ev();
extern void _ZN7S7681C43v14Ev();
extern void _ZN7S7681C23v15Ev();
extern void _ZN7S7681C23v16Ev();
extern void _ZN7S7681C23v17Ev();
extern void _ZN7S7681C23v18Ev();
static  VTBL_ENTRY _tg__ZTV7S7681C2__7S7681C67S7681C5__7S7681C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-160,-108),
  ABISELECT(-960,-632),
  (VTBL_ENTRY)&(_ZTI7S7681C6[0]),
  (VTBL_ENTRY)&_ZN7S7681C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7681C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v15Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v16Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v17Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v18Ev,
};
extern void _ZN7S7681C32v8Ev();
extern void _ZN7S7681C32v9Ev();
extern void _ZN7S7681C33v10Ev();
extern void _ZN7S7681C33v11Ev();
static  VTBL_ENTRY _tg__ZTV7S7681C3__7S7681C67S7681C5__7S7681C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-800,-524),
  (VTBL_ENTRY)&(_ZTI7S7681C6[0]),
  (VTBL_ENTRY)&_ZN7S7681C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7681C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v11Ev,
};
extern void _ZN7S7681C32v8Ev();
extern void _ZN7S7681C32v9Ev();
extern void _ZN7S7681C33v10Ev();
extern void _ZN7S7681C33v11Ev();
extern void _ZN7S7681C43v12Ev();
extern void _ZN7S7681C43v13Ev();
extern void _ZN7S7681C43v14Ev();
extern void _ZN7S7681C23v15Ev();
extern void _ZN7S7681C23v16Ev();
extern void _ZN7S7681C23v17Ev();
extern void _ZN7S7681C23v18Ev();
static  VTBL_ENTRY _tg__ZTV7S7681C2__7S7681C5__7S7681C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-160,-108),
  ABISELECT(-960,-632),
  (VTBL_ENTRY)&(_ZTI7S7681C5[0]),
  (VTBL_ENTRY)&_ZN7S7681C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7681C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v15Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v16Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v17Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v18Ev,
};
extern void _ZN7S7681C32v8Ev();
extern void _ZN7S7681C32v9Ev();
extern void _ZN7S7681C33v10Ev();
extern void _ZN7S7681C33v11Ev();
static  VTBL_ENTRY _tg__ZTV7S7681C3__7S7681C5__7S7681C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-800,-524),
  (VTBL_ENTRY)&(_ZTI7S7681C5[0]),
  (VTBL_ENTRY)&_ZN7S7681C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7681C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v11Ev,
};
extern void _ZN7S7681C83v29Ev();
extern void _ZN7S7681C83v30Ev();
extern void _ZN7S7681C83v31Ev();
extern void _ZN7S7681C83v32Ev();
extern void _ZN8S7681C16D1Ev();
extern void _ZN8S7681C16D0Ev();
extern void _ZN8S7681C163v65Ev();
extern void _ZN8S7681C163v66Ev();
extern void _ZN8S7681C163v67Ev();
extern void _ZN8S7681C163v68Ev();
extern void _ZN8S7681C163v69Ev();
extern void _ZN8S7681C163v70Ev();
extern void _ZN8S7681C163v71Ev();
static  VTBL_ENTRY _tg__ZTV8S7681C16__7S7681C1[] = {
  ABISELECT(928,616),
  ABISELECT(3744,2416),
  ABISELECT(3216,2080),
  ABISELECT(3200,2076),
  ABISELECT(3192,2072),
  ABISELECT(5216,3344),
  ABISELECT(3536,2284),
  ABISELECT(3504,2272),
  ABISELECT(768,508),
  0,
  (VTBL_ENTRY)&(_ZTI8S7681C16[0]),
  (VTBL_ENTRY)&_ZN7S7681C83v29Ev,
  (VTBL_ENTRY)&_ZN7S7681C83v30Ev,
  (VTBL_ENTRY)&_ZN7S7681C83v31Ev,
  (VTBL_ENTRY)&_ZN7S7681C83v32Ev,
  (VTBL_ENTRY)&_ZN8S7681C16D1Ev,
  (VTBL_ENTRY)&_ZN8S7681C16D0Ev,
  (VTBL_ENTRY)&_ZN8S7681C163v65Ev,
  (VTBL_ENTRY)&_ZN8S7681C163v66Ev,
  (VTBL_ENTRY)&_ZN8S7681C163v67Ev,
  (VTBL_ENTRY)&_ZN8S7681C163v68Ev,
  (VTBL_ENTRY)&_ZN8S7681C163v69Ev,
  (VTBL_ENTRY)&_ZN8S7681C163v70Ev,
  (VTBL_ENTRY)&_ZN8S7681C163v71Ev,
};
extern void _ZN7S7681C6D1Ev();
extern void _ZN7S7681C6D0Ev();
extern void _ZN7S7681C63v19Ev();
extern void _ZN7S7681C63v20Ev();
extern void _ZN7S7681C63v21Ev();
extern void _ZN7S7681C63v22Ev();
static  VTBL_ENTRY _tg__ZTV7S7681C68S7681C16__A1__7S7681C1[] = {
  ABISELECT(760,504),
  ABISELECT(920,612),
  0,
  (VTBL_ENTRY)&(_ZTI7S7681C6[0]),
  (VTBL_ENTRY)&_ZN7S7681C6D1Ev,
  (VTBL_ENTRY)&_ZN7S7681C6D0Ev,
  (VTBL_ENTRY)&_ZN7S7681C63v19Ev,
  (VTBL_ENTRY)&_ZN7S7681C63v20Ev,
  (VTBL_ENTRY)&_ZN7S7681C63v21Ev,
  (VTBL_ENTRY)&_ZN7S7681C63v22Ev,
};
extern void _ZN7S7681C32v8Ev();
extern void _ZN7S7681C32v9Ev();
extern void _ZN7S7681C33v10Ev();
extern void _ZN7S7681C33v11Ev();
extern void _ZN7S7681C43v12Ev();
extern void _ZN7S7681C43v13Ev();
extern void _ZN7S7681C43v14Ev();
extern void _ZN7S7681C23v15Ev();
extern void _ZN7S7681C23v16Ev();
extern void _ZN7S7681C23v17Ev();
extern void _ZN7S7681C23v18Ev();
static  VTBL_ENTRY _tg__ZTV7S7681C2__7S7681C68S7681C16__A1__7S7681C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-160,-108),
  ABISELECT(-920,-612),
  (VTBL_ENTRY)&(_ZTI7S7681C6[0]),
  (VTBL_ENTRY)&_ZN7S7681C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7681C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v15Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v16Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v17Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v18Ev,
};
extern void _ZN7S7681C32v8Ev();
extern void _ZN7S7681C32v9Ev();
extern void _ZN7S7681C33v10Ev();
extern void _ZN7S7681C33v11Ev();
static  VTBL_ENTRY _tg__ZTV7S7681C3__7S7681C68S7681C16__A1__7S7681C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-760,-504),
  (VTBL_ENTRY)&(_ZTI7S7681C6[0]),
  (VTBL_ENTRY)&_ZN7S7681C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7681C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v11Ev,
};
extern void _ZN7S7681C32v8Ev();
extern void _ZN7S7681C32v9Ev();
extern void _ZN7S7681C33v10Ev();
extern void _ZN7S7681C33v11Ev();
static  VTBL_ENTRY _tg__ZTV7S7681C3__8S7681C16__7S7681C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-768,-508),
  (VTBL_ENTRY)&(_ZTI8S7681C16[0]),
  (VTBL_ENTRY)&_ZN7S7681C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7681C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v11Ev,
};
extern void _ZN8S7681C133v42Ev();
extern void _ZN8S7681C133v43Ev();
extern void _ZN8S7681C133v44Ev();
extern void _ZN8S7681C133v45Ev();
extern void _ZN8S7681C133v46Ev();
static  VTBL_ENTRY _tg__ZTV8S7681C13__8S7681C16__7S7681C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(32,12),
  ABISELECT(-2736,-1764),
  ABISELECT(-3504,-2272),
  (VTBL_ENTRY)&(_ZTI8S7681C16[0]),
  (VTBL_ENTRY)&_ZN8S7681C133v42Ev,
  (VTBL_ENTRY)&_ZN8S7681C133v43Ev,
  (VTBL_ENTRY)&_ZN8S7681C133v44Ev,
  (VTBL_ENTRY)&_ZN8S7681C133v45Ev,
  (VTBL_ENTRY)&_ZN8S7681C133v46Ev,
};
extern void _ZN7S7681C32v8Ev();
extern void _ZN7S7681C32v9Ev();
extern void _ZN7S7681C33v10Ev();
extern void _ZN7S7681C33v11Ev();
extern void _ZN7S7681C43v12Ev();
extern void _ZN7S7681C43v13Ev();
extern void _ZN7S7681C43v14Ev();
static  VTBL_ENTRY _tg__ZTV7S7681C4__8S7681C16__7S7681C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-3536,-2284),
  (VTBL_ENTRY)&(_ZTI8S7681C16[0]),
  (VTBL_ENTRY)&_ZN7S7681C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7681C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v14Ev,
};
extern void _ZN7S7681C32v8Ev();
extern void _ZN7S7681C32v9Ev();
extern void _ZN7S7681C33v10Ev();
extern void _ZN7S7681C33v11Ev();
extern void _ZN7S7681C43v12Ev();
extern void _ZN7S7681C43v13Ev();
extern void _ZN7S7681C43v14Ev();
extern void _ZN7S7681C23v15Ev();
extern void _ZN7S7681C23v16Ev();
extern void _ZN7S7681C23v17Ev();
extern void _ZN7S7681C23v18Ev();
extern void _ZN8S7681C123v47Ev();
extern void _ZN8S7681C123v48Ev();
extern void _ZN8S7681C123v49Ev();
extern void _ZN8S7681C123v50Ev();
extern void ABISELECT(_ZTv0_n200_N8S7681C16D1Ev,_ZTv0_n100_N8S7681C16D1Ev)();
extern void ABISELECT(_ZThn5216_N8S7681C16D1Ev,_ZThn3344_N8S7681C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n200_N8S7681C16D0Ev,_ZTv0_n100_N8S7681C16D0Ev)();
extern void ABISELECT(_ZThn5216_N8S7681C16D0Ev,_ZThn3344_N8S7681C16D0Ev)() __attribute__((weak));
extern void _ZN8S7681C103v57Ev();
extern void _ZN8S7681C103v58Ev();
extern void _ZN8S7681C103v59Ev();
extern void _ZN8S7681C103v60Ev();
extern void _ZN8S7681C103v61Ev();
extern void _ZN8S7681C103v62Ev();
extern void _ZN8S7681C103v63Ev();
extern void _ZN8S7681C103v64Ev();
static  VTBL_ENTRY _tg__ZTV8S7681C10__8S7681C16__7S7681C1[] = {
  ABISELECT(288,192),
  ABISELECT(288,192),
  ABISELECT(288,192),
  ABISELECT(288,192),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-5216,-3344),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-1472,-928),
  ABISELECT(-2000,-1264),
  ABISELECT(-2016,-1268),
  ABISELECT(-2024,-1272),
  ABISELECT(-1680,-1060),
  ABISELECT(-1712,-1072),
  ABISELECT(-4448,-2836),
  ABISELECT(-5216,-3344),
  (VTBL_ENTRY)&(_ZTI8S7681C16[0]),
  (VTBL_ENTRY)&_ZN7S7681C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7681C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v15Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v16Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v17Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v18Ev,
  (VTBL_ENTRY)&_ZN8S7681C123v47Ev,
  (VTBL_ENTRY)&_ZN8S7681C123v48Ev,
  (VTBL_ENTRY)&_ZN8S7681C123v49Ev,
  (VTBL_ENTRY)&_ZN8S7681C123v50Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n200_N8S7681C16D1Ev,_ZTv0_n100_N8S7681C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n200_N8S7681C16D0Ev,_ZTv0_n100_N8S7681C16D0Ev),
  (VTBL_ENTRY)&_ZN8S7681C103v57Ev,
  (VTBL_ENTRY)&_ZN8S7681C103v58Ev,
  (VTBL_ENTRY)&_ZN8S7681C103v59Ev,
  (VTBL_ENTRY)&_ZN8S7681C103v60Ev,
  (VTBL_ENTRY)&_ZN8S7681C103v61Ev,
  (VTBL_ENTRY)&_ZN8S7681C103v62Ev,
  (VTBL_ENTRY)&_ZN8S7681C103v63Ev,
  (VTBL_ENTRY)&_ZN8S7681C103v64Ev,
};
extern void _ZN7S7681C83v29Ev();
extern void _ZN7S7681C83v30Ev();
extern void _ZN7S7681C83v31Ev();
extern void _ZN7S7681C83v32Ev();
static  VTBL_ENTRY _tg__ZTV7S7681C8__A1__8S7681C16__7S7681C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-3192,-2072),
  (VTBL_ENTRY)&(_ZTI8S7681C16[0]),
  (VTBL_ENTRY)&_ZN7S7681C83v29Ev,
  (VTBL_ENTRY)&_ZN7S7681C83v30Ev,
  (VTBL_ENTRY)&_ZN7S7681C83v31Ev,
  (VTBL_ENTRY)&_ZN7S7681C83v32Ev,
};
extern void ABISELECT(_ZTv0_n56_N8S7681C16D1Ev,_ZTv0_n28_N8S7681C16D1Ev)();
extern void ABISELECT(_ZThn3200_N8S7681C16D1Ev,_ZThn2076_N8S7681C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S7681C16D0Ev,_ZTv0_n28_N8S7681C16D0Ev)();
extern void ABISELECT(_ZThn3200_N8S7681C16D0Ev,_ZThn2076_N8S7681C16D0Ev)() __attribute__((weak));
extern void _ZN8S7681C113v51Ev();
extern void _ZN8S7681C113v52Ev();
static  VTBL_ENTRY _tg__ZTV8S7681C11__8S7681C16__7S7681C1[] = {
  0,
  0,
  ABISELECT(-3200,-2076),
  ABISELECT(336,208),
  ABISELECT(-2432,-1568),
  ABISELECT(304,196),
  ABISELECT(16,4),
  ABISELECT(-3200,-2076),
  (VTBL_ENTRY)&(_ZTI8S7681C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S7681C16D1Ev,_ZTv0_n28_N8S7681C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S7681C16D0Ev,_ZTv0_n28_N8S7681C16D0Ev),
  (VTBL_ENTRY)&_ZN8S7681C113v51Ev,
  (VTBL_ENTRY)&_ZN8S7681C113v52Ev,
};
extern void _ZN7S7681C32v8Ev();
extern void _ZN7S7681C32v9Ev();
extern void _ZN7S7681C33v10Ev();
extern void _ZN7S7681C33v11Ev();
extern void _ZN7S7681C43v12Ev();
extern void _ZN7S7681C43v13Ev();
extern void _ZN7S7681C43v14Ev();
extern void _ZN7S7681C23v15Ev();
extern void _ZN7S7681C23v16Ev();
extern void _ZN7S7681C23v17Ev();
extern void _ZN7S7681C23v18Ev();
extern void _ZN8S7681C123v47Ev();
extern void _ZN8S7681C123v48Ev();
extern void _ZN8S7681C123v49Ev();
extern void _ZN8S7681C123v50Ev();
static  VTBL_ENTRY _tg__ZTV8S7681C12__8S7681C16__7S7681C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(320,204),
  ABISELECT(288,192),
  ABISELECT(-2448,-1572),
  ABISELECT(-3216,-2080),
  (VTBL_ENTRY)&(_ZTI8S7681C16[0]),
  (VTBL_ENTRY)&_ZN7S7681C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7681C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v15Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v16Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v17Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v18Ev,
  (VTBL_ENTRY)&_ZN8S7681C123v47Ev,
  (VTBL_ENTRY)&_ZN8S7681C123v48Ev,
  (VTBL_ENTRY)&_ZN8S7681C123v49Ev,
  (VTBL_ENTRY)&_ZN8S7681C123v50Ev,
};
extern void _ZN7S7681C32v8Ev();
extern void _ZN7S7681C32v9Ev();
extern void _ZN7S7681C33v10Ev();
extern void _ZN7S7681C33v11Ev();
extern void _ZN7S7681C43v12Ev();
extern void _ZN7S7681C43v13Ev();
extern void _ZN7S7681C43v14Ev();
extern void ABISELECT(_ZTvn288_n200_N8S7681C16D1Ev,_ZTvn192_n100_N8S7681C16D1Ev)();
extern void ABISELECT(_ZTvn288_n200_N8S7681C16D0Ev,_ZTvn192_n100_N8S7681C16D0Ev)();
extern void _ZN8S7681C153v53Ev();
extern void _ZN8S7681C153v54Ev();
extern void _ZN8S7681C153v55Ev();
extern void _ZN8S7681C153v56Ev();
static  VTBL_ENTRY _tg__ZTV8S7681C158S7681C10__8S7681C16__7S7681C1[] = {
  ABISELECT(-1760,-1120),
  ABISELECT(-1968,-1252),
  ABISELECT(-2000,-1264),
  ABISELECT(-4736,-3028),
  ABISELECT(-5504,-3536),
  (VTBL_ENTRY)&(_ZTI8S7681C16[0]),
  (VTBL_ENTRY)&_ZN7S7681C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7681C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v14Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn288_n200_N8S7681C16D1Ev,_ZTvn192_n100_N8S7681C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn288_n200_N8S7681C16D0Ev,_ZTvn192_n100_N8S7681C16D0Ev),
  (VTBL_ENTRY)&_ZN8S7681C153v53Ev,
  (VTBL_ENTRY)&_ZN8S7681C153v54Ev,
  (VTBL_ENTRY)&_ZN8S7681C153v55Ev,
  (VTBL_ENTRY)&_ZN8S7681C153v56Ev,
};
extern void _ZN7S7681C93v33Ev();
extern void _ZN7S7681C93v34Ev();
extern void _ZN7S7681C93v35Ev();
extern void _ZN7S7681C93v36Ev();
extern void _ZN7S7681C93v37Ev();
extern void _ZN7S7681C93v38Ev();
extern void _ZN7S7681C93v39Ev();
extern void _ZN7S7681C93v40Ev();
extern void _ZN7S7681C93v41Ev();
static  VTBL_ENTRY _tg__ZTV7S7681C9__8S7681C16__7S7681C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-3744,-2416),
  (VTBL_ENTRY)&(_ZTI8S7681C16[0]),
  (VTBL_ENTRY)&_ZN7S7681C93v33Ev,
  (VTBL_ENTRY)&_ZN7S7681C93v34Ev,
  (VTBL_ENTRY)&_ZN7S7681C93v35Ev,
  (VTBL_ENTRY)&_ZN7S7681C93v36Ev,
  (VTBL_ENTRY)&_ZN7S7681C93v37Ev,
  (VTBL_ENTRY)&_ZN7S7681C93v38Ev,
  (VTBL_ENTRY)&_ZN7S7681C93v39Ev,
  (VTBL_ENTRY)&_ZN7S7681C93v40Ev,
  (VTBL_ENTRY)&_ZN7S7681C93v41Ev,
};
extern void ABISELECT(_ZThn8_N8S7681C16D1Ev,_ZThn4_N8S7681C16D1Ev)();
extern void ABISELECT(_ZThn8_N8S7681C16D0Ev,_ZThn4_N8S7681C16D0Ev)();
extern void _ZN7S7681C63v19Ev();
extern void _ZN7S7681C63v20Ev();
extern void _ZN7S7681C63v21Ev();
extern void _ZN7S7681C63v22Ev();
static  VTBL_ENTRY _tg__ZTV7S7681C6__8S7681C16__7S7681C1[] = {
  ABISELECT(760,504),
  ABISELECT(920,612),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S7681C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N8S7681C16D1Ev,_ZThn4_N8S7681C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N8S7681C16D0Ev,_ZThn4_N8S7681C16D0Ev),
  (VTBL_ENTRY)&_ZN7S7681C63v19Ev,
  (VTBL_ENTRY)&_ZN7S7681C63v20Ev,
  (VTBL_ENTRY)&_ZN7S7681C63v21Ev,
  (VTBL_ENTRY)&_ZN7S7681C63v22Ev,
};
extern void _ZN7S7681C32v8Ev();
extern void _ZN7S7681C32v9Ev();
extern void _ZN7S7681C33v10Ev();
extern void _ZN7S7681C33v11Ev();
extern void _ZN7S7681C43v12Ev();
extern void _ZN7S7681C43v13Ev();
extern void _ZN7S7681C43v14Ev();
extern void _ZN7S7681C23v15Ev();
extern void _ZN7S7681C23v16Ev();
extern void _ZN7S7681C23v17Ev();
extern void _ZN7S7681C23v18Ev();
static  VTBL_ENTRY _tg__ZTV7S7681C2__A2__8S7681C16__7S7681C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-160,-108),
  ABISELECT(-928,-616),
  (VTBL_ENTRY)&(_ZTI8S7681C16[0]),
  (VTBL_ENTRY)&_ZN7S7681C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7681C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v15Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v16Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v17Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v18Ev,
};
extern void _ZN7S7681C32v8Ev();
extern void _ZN7S7681C32v9Ev();
extern void _ZN7S7681C33v10Ev();
extern void _ZN7S7681C33v11Ev();
extern void _ZN7S7681C43v12Ev();
extern void _ZN7S7681C43v13Ev();
extern void _ZN7S7681C43v14Ev();
extern void _ZN7S7681C23v15Ev();
extern void _ZN7S7681C23v16Ev();
extern void _ZN7S7681C23v17Ev();
extern void _ZN7S7681C23v18Ev();
extern void _ZN8S7681C123v47Ev();
extern void _ZN8S7681C123v48Ev();
extern void _ZN8S7681C123v49Ev();
extern void _ZN8S7681C123v50Ev();
extern void _ZN8S7681C10D1Ev();
extern void _ZN8S7681C10D0Ev();
extern void _ZN8S7681C103v57Ev();
extern void _ZN8S7681C103v58Ev();
extern void _ZN8S7681C103v59Ev();
extern void _ZN8S7681C103v60Ev();
extern void _ZN8S7681C103v61Ev();
extern void _ZN8S7681C103v62Ev();
extern void _ZN8S7681C103v63Ev();
extern void _ZN8S7681C103v64Ev();
static  VTBL_ENTRY _tg__ZTV8S7681C10__A__7S7681C1[] = {
  ABISELECT(3712,2400),
  ABISELECT(3184,2064),
  ABISELECT(3168,2060),
  ABISELECT(3160,2056),
  ABISELECT(3504,2268),
  ABISELECT(3472,2256),
  ABISELECT(736,492),
  0,
  (VTBL_ENTRY)&(_ZTI8S7681C10[0]),
  (VTBL_ENTRY)&_ZN7S7681C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7681C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v15Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v16Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v17Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v18Ev,
  (VTBL_ENTRY)&_ZN8S7681C123v47Ev,
  (VTBL_ENTRY)&_ZN8S7681C123v48Ev,
  (VTBL_ENTRY)&_ZN8S7681C123v49Ev,
  (VTBL_ENTRY)&_ZN8S7681C123v50Ev,
  (VTBL_ENTRY)&_ZN8S7681C10D1Ev,
  (VTBL_ENTRY)&_ZN8S7681C10D0Ev,
  (VTBL_ENTRY)&_ZN8S7681C103v57Ev,
  (VTBL_ENTRY)&_ZN8S7681C103v58Ev,
  (VTBL_ENTRY)&_ZN8S7681C103v59Ev,
  (VTBL_ENTRY)&_ZN8S7681C103v60Ev,
  (VTBL_ENTRY)&_ZN8S7681C103v61Ev,
  (VTBL_ENTRY)&_ZN8S7681C103v62Ev,
  (VTBL_ENTRY)&_ZN8S7681C103v63Ev,
  (VTBL_ENTRY)&_ZN8S7681C103v64Ev,
};
extern void _ZN7S7681C32v8Ev();
extern void _ZN7S7681C32v9Ev();
extern void _ZN7S7681C33v10Ev();
extern void _ZN7S7681C33v11Ev();
extern void _ZN7S7681C43v12Ev();
extern void _ZN7S7681C43v13Ev();
extern void _ZN7S7681C43v14Ev();
extern void _ZN7S7681C23v15Ev();
extern void _ZN7S7681C23v16Ev();
extern void _ZN7S7681C23v17Ev();
extern void _ZN7S7681C23v18Ev();
extern void _ZN8S7681C123v47Ev();
extern void _ZN8S7681C123v48Ev();
extern void _ZN8S7681C123v49Ev();
extern void _ZN8S7681C123v50Ev();
static  VTBL_ENTRY _tg__ZTV8S7681C128S7681C10__A3__7S7681C1[] = {
  ABISELECT(3504,2268),
  ABISELECT(3472,2256),
  ABISELECT(736,492),
  0,
  (VTBL_ENTRY)&(_ZTI8S7681C12[0]),
  (VTBL_ENTRY)&_ZN7S7681C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7681C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v15Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v16Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v17Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v18Ev,
  (VTBL_ENTRY)&_ZN8S7681C123v47Ev,
  (VTBL_ENTRY)&_ZN8S7681C123v48Ev,
  (VTBL_ENTRY)&_ZN8S7681C123v49Ev,
  (VTBL_ENTRY)&_ZN8S7681C123v50Ev,
};
extern void _ZN7S7681C32v8Ev();
extern void _ZN7S7681C32v9Ev();
extern void _ZN7S7681C33v10Ev();
extern void _ZN7S7681C33v11Ev();
extern void _ZN7S7681C43v12Ev();
extern void _ZN7S7681C43v13Ev();
extern void _ZN7S7681C43v14Ev();
extern void _ZN7S7681C23v15Ev();
extern void _ZN7S7681C23v16Ev();
extern void _ZN7S7681C23v17Ev();
extern void _ZN7S7681C23v18Ev();
static  VTBL_ENTRY _tg__ZTV7S7681C28S7681C128S7681C10__A5__7S7681C1[] = {
  ABISELECT(736,492),
  0,
  (VTBL_ENTRY)&(_ZTI7S7681C2[0]),
  (VTBL_ENTRY)&_ZN7S7681C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7681C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v15Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v16Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v17Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v18Ev,
};
extern void _ZN7S7681C32v8Ev();
extern void _ZN7S7681C32v9Ev();
extern void _ZN7S7681C33v10Ev();
extern void _ZN7S7681C33v11Ev();
static  VTBL_ENTRY _tg__ZTV7S7681C3__7S7681C28S7681C128S7681C10__A5__7S7681C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-736,-492),
  (VTBL_ENTRY)&(_ZTI7S7681C2[0]),
  (VTBL_ENTRY)&_ZN7S7681C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7681C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v11Ev,
};
extern void _ZN8S7681C133v42Ev();
extern void _ZN8S7681C133v43Ev();
extern void _ZN8S7681C133v44Ev();
extern void _ZN8S7681C133v45Ev();
extern void _ZN8S7681C133v46Ev();
static  VTBL_ENTRY _tg__ZTV8S7681C13__8S7681C128S7681C10__A3__7S7681C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(32,12),
  ABISELECT(-2736,-1764),
  ABISELECT(-3472,-2256),
  (VTBL_ENTRY)&(_ZTI8S7681C12[0]),
  (VTBL_ENTRY)&_ZN8S7681C133v42Ev,
  (VTBL_ENTRY)&_ZN8S7681C133v43Ev,
  (VTBL_ENTRY)&_ZN8S7681C133v44Ev,
  (VTBL_ENTRY)&_ZN8S7681C133v45Ev,
  (VTBL_ENTRY)&_ZN8S7681C133v46Ev,
};
extern void _ZN7S7681C32v8Ev();
extern void _ZN7S7681C32v9Ev();
extern void _ZN7S7681C33v10Ev();
extern void _ZN7S7681C33v11Ev();
static  VTBL_ENTRY _tg__ZTV7S7681C3__8S7681C128S7681C10__A3__7S7681C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-736,-492),
  (VTBL_ENTRY)&(_ZTI8S7681C12[0]),
  (VTBL_ENTRY)&_ZN7S7681C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7681C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v11Ev,
};
extern void _ZN7S7681C32v8Ev();
extern void _ZN7S7681C32v9Ev();
extern void _ZN7S7681C33v10Ev();
extern void _ZN7S7681C33v11Ev();
extern void _ZN7S7681C43v12Ev();
extern void _ZN7S7681C43v13Ev();
extern void _ZN7S7681C43v14Ev();
static  VTBL_ENTRY _tg__ZTV7S7681C4__8S7681C128S7681C10__A3__7S7681C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-3504,-2268),
  (VTBL_ENTRY)&(_ZTI8S7681C12[0]),
  (VTBL_ENTRY)&_ZN7S7681C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7681C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v14Ev,
};
extern void _ZN7S7681C32v8Ev();
extern void _ZN7S7681C32v9Ev();
extern void _ZN7S7681C33v10Ev();
extern void _ZN7S7681C33v11Ev();
extern void _ZN7S7681C43v12Ev();
extern void _ZN7S7681C43v13Ev();
extern void _ZN7S7681C43v14Ev();
extern void _ZN8S7681C15D1Ev();
extern void _ZN8S7681C15D0Ev();
extern void _ZN8S7681C153v53Ev();
extern void _ZN8S7681C153v54Ev();
extern void _ZN8S7681C153v55Ev();
extern void _ZN8S7681C153v56Ev();
static  VTBL_ENTRY _tg__ZTV8S7681C158S7681C10__A2__7S7681C1[] = {
  ABISELECT(3424,2208),
  ABISELECT(3216,2076),
  ABISELECT(3184,2064),
  ABISELECT(448,300),
  0,
  (VTBL_ENTRY)&(_ZTI8S7681C15[0]),
  (VTBL_ENTRY)&_ZN7S7681C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7681C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v14Ev,
  (VTBL_ENTRY)&_ZN8S7681C15D1Ev,
  (VTBL_ENTRY)&_ZN8S7681C15D0Ev,
  (VTBL_ENTRY)&_ZN8S7681C153v53Ev,
  (VTBL_ENTRY)&_ZN8S7681C153v54Ev,
  (VTBL_ENTRY)&_ZN8S7681C153v55Ev,
  (VTBL_ENTRY)&_ZN8S7681C153v56Ev,
};
extern void _ZN7S7681C32v8Ev();
extern void _ZN7S7681C32v9Ev();
extern void _ZN7S7681C33v10Ev();
extern void _ZN7S7681C33v11Ev();
static  VTBL_ENTRY _tg__ZTV7S7681C3__8S7681C158S7681C10__A2__7S7681C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-448,-300),
  (VTBL_ENTRY)&(_ZTI8S7681C15[0]),
  (VTBL_ENTRY)&_ZN7S7681C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7681C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v11Ev,
};
extern void _ZN8S7681C133v42Ev();
extern void _ZN8S7681C133v43Ev();
extern void _ZN8S7681C133v44Ev();
extern void _ZN8S7681C133v45Ev();
extern void _ZN8S7681C133v46Ev();
static  VTBL_ENTRY _tg__ZTV8S7681C13__8S7681C158S7681C10__A2__7S7681C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(32,12),
  ABISELECT(-2736,-1764),
  ABISELECT(-3184,-2064),
  (VTBL_ENTRY)&(_ZTI8S7681C15[0]),
  (VTBL_ENTRY)&_ZN8S7681C133v42Ev,
  (VTBL_ENTRY)&_ZN8S7681C133v43Ev,
  (VTBL_ENTRY)&_ZN8S7681C133v44Ev,
  (VTBL_ENTRY)&_ZN8S7681C133v45Ev,
  (VTBL_ENTRY)&_ZN8S7681C133v46Ev,
};
extern void _ZN7S7681C32v8Ev();
extern void _ZN7S7681C32v9Ev();
extern void _ZN7S7681C33v10Ev();
extern void _ZN7S7681C33v11Ev();
extern void _ZN7S7681C43v12Ev();
extern void _ZN7S7681C43v13Ev();
extern void _ZN7S7681C43v14Ev();
static  VTBL_ENTRY _tg__ZTV7S7681C4__8S7681C158S7681C10__A2__7S7681C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-3216,-2076),
  (VTBL_ENTRY)&(_ZTI8S7681C15[0]),
  (VTBL_ENTRY)&_ZN7S7681C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7681C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v14Ev,
};
extern void _ZN7S7681C93v33Ev();
extern void _ZN7S7681C93v34Ev();
extern void _ZN7S7681C93v35Ev();
extern void _ZN7S7681C93v36Ev();
extern void _ZN7S7681C93v37Ev();
extern void _ZN7S7681C93v38Ev();
extern void _ZN7S7681C93v39Ev();
extern void _ZN7S7681C93v40Ev();
extern void _ZN7S7681C93v41Ev();
static  VTBL_ENTRY _tg__ZTV7S7681C9__8S7681C158S7681C10__A2__7S7681C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-3424,-2208),
  (VTBL_ENTRY)&(_ZTI8S7681C15[0]),
  (VTBL_ENTRY)&_ZN7S7681C93v33Ev,
  (VTBL_ENTRY)&_ZN7S7681C93v34Ev,
  (VTBL_ENTRY)&_ZN7S7681C93v35Ev,
  (VTBL_ENTRY)&_ZN7S7681C93v36Ev,
  (VTBL_ENTRY)&_ZN7S7681C93v37Ev,
  (VTBL_ENTRY)&_ZN7S7681C93v38Ev,
  (VTBL_ENTRY)&_ZN7S7681C93v39Ev,
  (VTBL_ENTRY)&_ZN7S7681C93v40Ev,
  (VTBL_ENTRY)&_ZN7S7681C93v41Ev,
};
extern void _ZN7S7681C83v29Ev();
extern void _ZN7S7681C83v30Ev();
extern void _ZN7S7681C83v31Ev();
extern void _ZN7S7681C83v32Ev();
static  VTBL_ENTRY _tg__ZTV7S7681C8__8S7681C10__A__7S7681C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-3160,-2056),
  (VTBL_ENTRY)&(_ZTI8S7681C10[0]),
  (VTBL_ENTRY)&_ZN7S7681C83v29Ev,
  (VTBL_ENTRY)&_ZN7S7681C83v30Ev,
  (VTBL_ENTRY)&_ZN7S7681C83v31Ev,
  (VTBL_ENTRY)&_ZN7S7681C83v32Ev,
};
extern void ABISELECT(_ZTv0_n56_N8S7681C10D1Ev,_ZTv0_n28_N8S7681C10D1Ev)();
extern void ABISELECT(_ZThn3168_N8S7681C10D1Ev,_ZThn2060_N8S7681C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S7681C10D0Ev,_ZTv0_n28_N8S7681C10D0Ev)();
extern void ABISELECT(_ZThn3168_N8S7681C10D0Ev,_ZThn2060_N8S7681C10D0Ev)() __attribute__((weak));
extern void _ZN8S7681C113v51Ev();
extern void _ZN8S7681C113v52Ev();
static  VTBL_ENTRY _tg__ZTV8S7681C11__8S7681C10__A__7S7681C1[] = {
  0,
  0,
  ABISELECT(-3168,-2060),
  ABISELECT(336,208),
  ABISELECT(-2432,-1568),
  ABISELECT(304,196),
  ABISELECT(16,4),
  ABISELECT(-3168,-2060),
  (VTBL_ENTRY)&(_ZTI8S7681C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S7681C10D1Ev,_ZTv0_n28_N8S7681C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S7681C10D0Ev,_ZTv0_n28_N8S7681C10D0Ev),
  (VTBL_ENTRY)&_ZN8S7681C113v51Ev,
  (VTBL_ENTRY)&_ZN8S7681C113v52Ev,
};
extern void _ZN7S7681C32v8Ev();
extern void _ZN7S7681C32v9Ev();
extern void _ZN7S7681C33v10Ev();
extern void _ZN7S7681C33v11Ev();
extern void _ZN7S7681C43v12Ev();
extern void _ZN7S7681C43v13Ev();
extern void _ZN7S7681C43v14Ev();
extern void _ZN7S7681C23v15Ev();
extern void _ZN7S7681C23v16Ev();
extern void _ZN7S7681C23v17Ev();
extern void _ZN7S7681C23v18Ev();
extern void _ZN8S7681C123v47Ev();
extern void _ZN8S7681C123v48Ev();
extern void _ZN8S7681C123v49Ev();
extern void _ZN8S7681C123v50Ev();
static  VTBL_ENTRY _tg__ZTV8S7681C12__8S7681C10__A__7S7681C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(320,204),
  ABISELECT(288,192),
  ABISELECT(-2448,-1572),
  ABISELECT(-3184,-2064),
  (VTBL_ENTRY)&(_ZTI8S7681C10[0]),
  (VTBL_ENTRY)&_ZN7S7681C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7681C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v15Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v16Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v17Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v18Ev,
  (VTBL_ENTRY)&_ZN8S7681C123v47Ev,
  (VTBL_ENTRY)&_ZN8S7681C123v48Ev,
  (VTBL_ENTRY)&_ZN8S7681C123v49Ev,
  (VTBL_ENTRY)&_ZN8S7681C123v50Ev,
};
extern void _ZN8S7681C133v42Ev();
extern void _ZN8S7681C133v43Ev();
extern void _ZN8S7681C133v44Ev();
extern void _ZN8S7681C133v45Ev();
extern void _ZN8S7681C133v46Ev();
static  VTBL_ENTRY _tg__ZTV8S7681C13__8S7681C10__A__7S7681C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(32,12),
  ABISELECT(-2736,-1764),
  ABISELECT(-3472,-2256),
  (VTBL_ENTRY)&(_ZTI8S7681C10[0]),
  (VTBL_ENTRY)&_ZN8S7681C133v42Ev,
  (VTBL_ENTRY)&_ZN8S7681C133v43Ev,
  (VTBL_ENTRY)&_ZN8S7681C133v44Ev,
  (VTBL_ENTRY)&_ZN8S7681C133v45Ev,
  (VTBL_ENTRY)&_ZN8S7681C133v46Ev,
};
extern void _ZN7S7681C32v8Ev();
extern void _ZN7S7681C32v9Ev();
extern void _ZN7S7681C33v10Ev();
extern void _ZN7S7681C33v11Ev();
static  VTBL_ENTRY _tg__ZTV7S7681C3__8S7681C10__A__7S7681C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-736,-492),
  (VTBL_ENTRY)&(_ZTI8S7681C10[0]),
  (VTBL_ENTRY)&_ZN7S7681C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7681C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v11Ev,
};
extern void _ZN7S7681C32v8Ev();
extern void _ZN7S7681C32v9Ev();
extern void _ZN7S7681C33v10Ev();
extern void _ZN7S7681C33v11Ev();
extern void _ZN7S7681C43v12Ev();
extern void _ZN7S7681C43v13Ev();
extern void _ZN7S7681C43v14Ev();
static  VTBL_ENTRY _tg__ZTV7S7681C4__8S7681C10__A__7S7681C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-3504,-2268),
  (VTBL_ENTRY)&(_ZTI8S7681C10[0]),
  (VTBL_ENTRY)&_ZN7S7681C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7681C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v14Ev,
};
extern void _ZN7S7681C32v8Ev();
extern void _ZN7S7681C32v9Ev();
extern void _ZN7S7681C33v10Ev();
extern void _ZN7S7681C33v11Ev();
extern void _ZN7S7681C43v12Ev();
extern void _ZN7S7681C43v13Ev();
extern void _ZN7S7681C43v14Ev();
extern void ABISELECT(_ZThn288_N8S7681C10D1Ev,_ZThn192_N8S7681C10D1Ev)();
extern void ABISELECT(_ZThn288_N8S7681C10D0Ev,_ZThn192_N8S7681C10D0Ev)();
extern void _ZN8S7681C153v53Ev();
extern void _ZN8S7681C153v54Ev();
extern void _ZN8S7681C153v55Ev();
extern void _ZN8S7681C153v56Ev();
static  VTBL_ENTRY _tg__ZTV8S7681C15__8S7681C10__A__7S7681C1[] = {
  ABISELECT(3424,2208),
  ABISELECT(3216,2076),
  ABISELECT(3184,2064),
  ABISELECT(448,300),
  ABISELECT(-288,-192),
  (VTBL_ENTRY)&(_ZTI8S7681C10[0]),
  (VTBL_ENTRY)&_ZN7S7681C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7681C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v14Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn288_N8S7681C10D1Ev,_ZThn192_N8S7681C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn288_N8S7681C10D0Ev,_ZThn192_N8S7681C10D0Ev),
  (VTBL_ENTRY)&_ZN8S7681C153v53Ev,
  (VTBL_ENTRY)&_ZN8S7681C153v54Ev,
  (VTBL_ENTRY)&_ZN8S7681C153v55Ev,
  (VTBL_ENTRY)&_ZN8S7681C153v56Ev,
};
extern void _ZN7S7681C93v33Ev();
extern void _ZN7S7681C93v34Ev();
extern void _ZN7S7681C93v35Ev();
extern void _ZN7S7681C93v36Ev();
extern void _ZN7S7681C93v37Ev();
extern void _ZN7S7681C93v38Ev();
extern void _ZN7S7681C93v39Ev();
extern void _ZN7S7681C93v40Ev();
extern void _ZN7S7681C93v41Ev();
static  VTBL_ENTRY _tg__ZTV7S7681C9__8S7681C10__A__7S7681C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-3712,-2400),
  (VTBL_ENTRY)&(_ZTI8S7681C10[0]),
  (VTBL_ENTRY)&_ZN7S7681C93v33Ev,
  (VTBL_ENTRY)&_ZN7S7681C93v34Ev,
  (VTBL_ENTRY)&_ZN7S7681C93v35Ev,
  (VTBL_ENTRY)&_ZN7S7681C93v36Ev,
  (VTBL_ENTRY)&_ZN7S7681C93v37Ev,
  (VTBL_ENTRY)&_ZN7S7681C93v38Ev,
  (VTBL_ENTRY)&_ZN7S7681C93v39Ev,
  (VTBL_ENTRY)&_ZN7S7681C93v40Ev,
  (VTBL_ENTRY)&_ZN7S7681C93v41Ev,
};
extern void _ZN7S7681C32v8Ev();
extern void _ZN7S7681C32v9Ev();
extern void _ZN7S7681C33v10Ev();
extern void _ZN7S7681C33v11Ev();
extern void _ZN7S7681C43v12Ev();
extern void _ZN7S7681C43v13Ev();
extern void _ZN7S7681C43v14Ev();
extern void _ZN7S7681C23v15Ev();
extern void _ZN7S7681C23v16Ev();
extern void _ZN7S7681C23v17Ev();
extern void _ZN7S7681C23v18Ev();
static  VTBL_ENTRY _tg__ZTV7S7681C2__A1__7S7681C1[] = {
  ABISELECT(-160,-108),
  0,
  (VTBL_ENTRY)&(_ZTI7S7681C2[0]),
  (VTBL_ENTRY)&_ZN7S7681C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7681C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v15Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v16Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v17Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v18Ev,
};
extern void _ZN7S7681C32v8Ev();
extern void _ZN7S7681C32v9Ev();
extern void _ZN7S7681C33v10Ev();
extern void _ZN7S7681C33v11Ev();
static  VTBL_ENTRY _tg__ZTV7S7681C3__7S7681C2__A1__7S7681C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(160,108),
  (VTBL_ENTRY)&(_ZTI7S7681C2[0]),
  (VTBL_ENTRY)&_ZN7S7681C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7681C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v11Ev,
};
extern void _ZN7S7681C93v33Ev();
extern void _ZN7S7681C93v34Ev();
extern void _ZN7S7681C93v35Ev();
extern void _ZN7S7681C93v36Ev();
extern void _ZN7S7681C93v37Ev();
extern void _ZN7S7681C93v38Ev();
extern void _ZN7S7681C93v39Ev();
extern void _ZN7S7681C93v40Ev();
extern void _ZN7S7681C93v41Ev();
extern void _ZN7S7681C7D1Ev();
extern void _ZN7S7681C7D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7681C7__7S7681C1[] = {
  ABISELECT(2592,1664),
  ABISELECT(2384,1532),
  ABISELECT(-384,-244),
  ABISELECT(2352,1520),
  ABISELECT(2064,1328),
  ABISELECT(2048,1324),
  ABISELECT(2040,1320),
  0,
  (VTBL_ENTRY)&(_ZTI7S7681C7[0]),
  (VTBL_ENTRY)&_ZN7S7681C93v33Ev,
  (VTBL_ENTRY)&_ZN7S7681C93v34Ev,
  (VTBL_ENTRY)&_ZN7S7681C93v35Ev,
  (VTBL_ENTRY)&_ZN7S7681C93v36Ev,
  (VTBL_ENTRY)&_ZN7S7681C93v37Ev,
  (VTBL_ENTRY)&_ZN7S7681C93v38Ev,
  (VTBL_ENTRY)&_ZN7S7681C93v39Ev,
  (VTBL_ENTRY)&_ZN7S7681C93v40Ev,
  (VTBL_ENTRY)&_ZN7S7681C93v41Ev,
  (VTBL_ENTRY)&_ZN7S7681C7D1Ev,
  (VTBL_ENTRY)&_ZN7S7681C7D0Ev,
};
extern void _ZN7S7681C32v8Ev();
extern void _ZN7S7681C32v9Ev();
extern void _ZN7S7681C33v10Ev();
extern void _ZN7S7681C33v11Ev();
extern void _ZN7S7681C43v12Ev();
extern void _ZN7S7681C43v13Ev();
extern void _ZN7S7681C43v14Ev();
extern void _ZN7S7681C23v15Ev();
extern void _ZN7S7681C23v16Ev();
extern void _ZN7S7681C23v17Ev();
extern void _ZN7S7681C23v18Ev();
extern void _ZN8S7681C123v47Ev();
extern void _ZN8S7681C123v48Ev();
extern void _ZN8S7681C123v49Ev();
extern void _ZN8S7681C123v50Ev();
extern void _ZN8S7681C10D1Ev();
extern void _ZN8S7681C10D0Ev();
extern void _ZN8S7681C103v57Ev();
extern void _ZN8S7681C103v58Ev();
extern void _ZN8S7681C103v59Ev();
extern void _ZN8S7681C103v60Ev();
extern void _ZN8S7681C103v61Ev();
extern void _ZN8S7681C103v62Ev();
extern void _ZN8S7681C103v63Ev();
extern void _ZN8S7681C103v64Ev();
static  VTBL_ENTRY _tg__ZTV8S7681C107S7681C7__7S7681C1[] = {
  ABISELECT(1120,736),
  ABISELECT(592,400),
  ABISELECT(576,396),
  ABISELECT(568,392),
  ABISELECT(912,604),
  ABISELECT(880,592),
  ABISELECT(-1856,-1172),
  0,
  (VTBL_ENTRY)&(_ZTI8S7681C10[0]),
  (VTBL_ENTRY)&_ZN7S7681C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7681C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v15Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v16Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v17Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v18Ev,
  (VTBL_ENTRY)&_ZN8S7681C123v47Ev,
  (VTBL_ENTRY)&_ZN8S7681C123v48Ev,
  (VTBL_ENTRY)&_ZN8S7681C123v49Ev,
  (VTBL_ENTRY)&_ZN8S7681C123v50Ev,
  (VTBL_ENTRY)&_ZN8S7681C10D1Ev,
  (VTBL_ENTRY)&_ZN8S7681C10D0Ev,
  (VTBL_ENTRY)&_ZN8S7681C103v57Ev,
  (VTBL_ENTRY)&_ZN8S7681C103v58Ev,
  (VTBL_ENTRY)&_ZN8S7681C103v59Ev,
  (VTBL_ENTRY)&_ZN8S7681C103v60Ev,
  (VTBL_ENTRY)&_ZN8S7681C103v61Ev,
  (VTBL_ENTRY)&_ZN8S7681C103v62Ev,
  (VTBL_ENTRY)&_ZN8S7681C103v63Ev,
  (VTBL_ENTRY)&_ZN8S7681C103v64Ev,
};
extern void _ZN7S7681C32v8Ev();
extern void _ZN7S7681C32v9Ev();
extern void _ZN7S7681C33v10Ev();
extern void _ZN7S7681C33v11Ev();
extern void _ZN7S7681C43v12Ev();
extern void _ZN7S7681C43v13Ev();
extern void _ZN7S7681C43v14Ev();
extern void _ZN7S7681C23v15Ev();
extern void _ZN7S7681C23v16Ev();
extern void _ZN7S7681C23v17Ev();
extern void _ZN7S7681C23v18Ev();
extern void _ZN8S7681C123v47Ev();
extern void _ZN8S7681C123v48Ev();
extern void _ZN8S7681C123v49Ev();
extern void _ZN8S7681C123v50Ev();
static  VTBL_ENTRY _tg__ZTV8S7681C128S7681C107S7681C7__A1__7S7681C1[] = {
  ABISELECT(912,604),
  ABISELECT(880,592),
  ABISELECT(-1856,-1172),
  0,
  (VTBL_ENTRY)&(_ZTI8S7681C12[0]),
  (VTBL_ENTRY)&_ZN7S7681C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7681C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v15Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v16Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v17Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v18Ev,
  (VTBL_ENTRY)&_ZN8S7681C123v47Ev,
  (VTBL_ENTRY)&_ZN8S7681C123v48Ev,
  (VTBL_ENTRY)&_ZN8S7681C123v49Ev,
  (VTBL_ENTRY)&_ZN8S7681C123v50Ev,
};
extern void _ZN7S7681C32v8Ev();
extern void _ZN7S7681C32v9Ev();
extern void _ZN7S7681C33v10Ev();
extern void _ZN7S7681C33v11Ev();
extern void _ZN7S7681C43v12Ev();
extern void _ZN7S7681C43v13Ev();
extern void _ZN7S7681C43v14Ev();
extern void _ZN7S7681C23v15Ev();
extern void _ZN7S7681C23v16Ev();
extern void _ZN7S7681C23v17Ev();
extern void _ZN7S7681C23v18Ev();
static  VTBL_ENTRY _tg__ZTV7S7681C28S7681C128S7681C107S7681C7__A3__7S7681C1[] = {
  ABISELECT(-1856,-1172),
  0,
  (VTBL_ENTRY)&(_ZTI7S7681C2[0]),
  (VTBL_ENTRY)&_ZN7S7681C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7681C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v15Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v16Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v17Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v18Ev,
};
extern void _ZN7S7681C32v8Ev();
extern void _ZN7S7681C32v9Ev();
extern void _ZN7S7681C33v10Ev();
extern void _ZN7S7681C33v11Ev();
static  VTBL_ENTRY _tg__ZTV7S7681C3__7S7681C28S7681C128S7681C107S7681C7__A3__7S7681C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(1856,1172),
  (VTBL_ENTRY)&(_ZTI7S7681C2[0]),
  (VTBL_ENTRY)&_ZN7S7681C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7681C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v11Ev,
};
extern void _ZN8S7681C133v42Ev();
extern void _ZN8S7681C133v43Ev();
extern void _ZN8S7681C133v44Ev();
extern void _ZN8S7681C133v45Ev();
extern void _ZN8S7681C133v46Ev();
static  VTBL_ENTRY _tg__ZTV8S7681C13__8S7681C128S7681C107S7681C7__A1__7S7681C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(32,12),
  ABISELECT(-2736,-1764),
  ABISELECT(-880,-592),
  (VTBL_ENTRY)&(_ZTI8S7681C12[0]),
  (VTBL_ENTRY)&_ZN8S7681C133v42Ev,
  (VTBL_ENTRY)&_ZN8S7681C133v43Ev,
  (VTBL_ENTRY)&_ZN8S7681C133v44Ev,
  (VTBL_ENTRY)&_ZN8S7681C133v45Ev,
  (VTBL_ENTRY)&_ZN8S7681C133v46Ev,
};
extern void _ZN7S7681C32v8Ev();
extern void _ZN7S7681C32v9Ev();
extern void _ZN7S7681C33v10Ev();
extern void _ZN7S7681C33v11Ev();
static  VTBL_ENTRY _tg__ZTV7S7681C3__8S7681C128S7681C107S7681C7__A1__7S7681C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(1856,1172),
  (VTBL_ENTRY)&(_ZTI8S7681C12[0]),
  (VTBL_ENTRY)&_ZN7S7681C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7681C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v11Ev,
};
extern void _ZN7S7681C32v8Ev();
extern void _ZN7S7681C32v9Ev();
extern void _ZN7S7681C33v10Ev();
extern void _ZN7S7681C33v11Ev();
extern void _ZN7S7681C43v12Ev();
extern void _ZN7S7681C43v13Ev();
extern void _ZN7S7681C43v14Ev();
static  VTBL_ENTRY _tg__ZTV7S7681C4__8S7681C128S7681C107S7681C7__A1__7S7681C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-912,-604),
  (VTBL_ENTRY)&(_ZTI8S7681C12[0]),
  (VTBL_ENTRY)&_ZN7S7681C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7681C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v14Ev,
};
extern void _ZN7S7681C32v8Ev();
extern void _ZN7S7681C32v9Ev();
extern void _ZN7S7681C33v10Ev();
extern void _ZN7S7681C33v11Ev();
extern void _ZN7S7681C43v12Ev();
extern void _ZN7S7681C43v13Ev();
extern void _ZN7S7681C43v14Ev();
extern void _ZN8S7681C15D1Ev();
extern void _ZN8S7681C15D0Ev();
extern void _ZN8S7681C153v53Ev();
extern void _ZN8S7681C153v54Ev();
extern void _ZN8S7681C153v55Ev();
extern void _ZN8S7681C153v56Ev();
static  VTBL_ENTRY _tg__ZTV8S7681C158S7681C107S7681C7__7S7681C1[] = {
  ABISELECT(832,544),
  ABISELECT(624,412),
  ABISELECT(592,400),
  ABISELECT(-2144,-1364),
  0,
  (VTBL_ENTRY)&(_ZTI8S7681C15[0]),
  (VTBL_ENTRY)&_ZN7S7681C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7681C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v14Ev,
  (VTBL_ENTRY)&_ZN8S7681C15D1Ev,
  (VTBL_ENTRY)&_ZN8S7681C15D0Ev,
  (VTBL_ENTRY)&_ZN8S7681C153v53Ev,
  (VTBL_ENTRY)&_ZN8S7681C153v54Ev,
  (VTBL_ENTRY)&_ZN8S7681C153v55Ev,
  (VTBL_ENTRY)&_ZN8S7681C153v56Ev,
};
extern void _ZN7S7681C32v8Ev();
extern void _ZN7S7681C32v9Ev();
extern void _ZN7S7681C33v10Ev();
extern void _ZN7S7681C33v11Ev();
static  VTBL_ENTRY _tg__ZTV7S7681C3__8S7681C158S7681C107S7681C7__7S7681C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(2144,1364),
  (VTBL_ENTRY)&(_ZTI8S7681C15[0]),
  (VTBL_ENTRY)&_ZN7S7681C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7681C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v11Ev,
};
extern void _ZN8S7681C133v42Ev();
extern void _ZN8S7681C133v43Ev();
extern void _ZN8S7681C133v44Ev();
extern void _ZN8S7681C133v45Ev();
extern void _ZN8S7681C133v46Ev();
static  VTBL_ENTRY _tg__ZTV8S7681C13__8S7681C158S7681C107S7681C7__7S7681C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(32,12),
  ABISELECT(-2736,-1764),
  ABISELECT(-592,-400),
  (VTBL_ENTRY)&(_ZTI8S7681C15[0]),
  (VTBL_ENTRY)&_ZN8S7681C133v42Ev,
  (VTBL_ENTRY)&_ZN8S7681C133v43Ev,
  (VTBL_ENTRY)&_ZN8S7681C133v44Ev,
  (VTBL_ENTRY)&_ZN8S7681C133v45Ev,
  (VTBL_ENTRY)&_ZN8S7681C133v46Ev,
};
extern void _ZN7S7681C32v8Ev();
extern void _ZN7S7681C32v9Ev();
extern void _ZN7S7681C33v10Ev();
extern void _ZN7S7681C33v11Ev();
extern void _ZN7S7681C43v12Ev();
extern void _ZN7S7681C43v13Ev();
extern void _ZN7S7681C43v14Ev();
static  VTBL_ENTRY _tg__ZTV7S7681C4__8S7681C158S7681C107S7681C7__7S7681C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-624,-412),
  (VTBL_ENTRY)&(_ZTI8S7681C15[0]),
  (VTBL_ENTRY)&_ZN7S7681C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7681C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v14Ev,
};
extern void _ZN7S7681C93v33Ev();
extern void _ZN7S7681C93v34Ev();
extern void _ZN7S7681C93v35Ev();
extern void _ZN7S7681C93v36Ev();
extern void _ZN7S7681C93v37Ev();
extern void _ZN7S7681C93v38Ev();
extern void _ZN7S7681C93v39Ev();
extern void _ZN7S7681C93v40Ev();
extern void _ZN7S7681C93v41Ev();
static  VTBL_ENTRY _tg__ZTV7S7681C9__8S7681C158S7681C107S7681C7__7S7681C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-832,-544),
  (VTBL_ENTRY)&(_ZTI8S7681C15[0]),
  (VTBL_ENTRY)&_ZN7S7681C93v33Ev,
  (VTBL_ENTRY)&_ZN7S7681C93v34Ev,
  (VTBL_ENTRY)&_ZN7S7681C93v35Ev,
  (VTBL_ENTRY)&_ZN7S7681C93v36Ev,
  (VTBL_ENTRY)&_ZN7S7681C93v37Ev,
  (VTBL_ENTRY)&_ZN7S7681C93v38Ev,
  (VTBL_ENTRY)&_ZN7S7681C93v39Ev,
  (VTBL_ENTRY)&_ZN7S7681C93v40Ev,
  (VTBL_ENTRY)&_ZN7S7681C93v41Ev,
};
extern void _ZN7S7681C83v29Ev();
extern void _ZN7S7681C83v30Ev();
extern void _ZN7S7681C83v31Ev();
extern void _ZN7S7681C83v32Ev();
static  VTBL_ENTRY _tg__ZTV7S7681C8__8S7681C107S7681C7__7S7681C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-568,-392),
  (VTBL_ENTRY)&(_ZTI8S7681C10[0]),
  (VTBL_ENTRY)&_ZN7S7681C83v29Ev,
  (VTBL_ENTRY)&_ZN7S7681C83v30Ev,
  (VTBL_ENTRY)&_ZN7S7681C83v31Ev,
  (VTBL_ENTRY)&_ZN7S7681C83v32Ev,
};
extern void ABISELECT(_ZTv0_n56_N8S7681C10D1Ev,_ZTv0_n28_N8S7681C10D1Ev)();
extern void ABISELECT(_ZThn576_N8S7681C10D1Ev,_ZThn396_N8S7681C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S7681C10D0Ev,_ZTv0_n28_N8S7681C10D0Ev)();
extern void ABISELECT(_ZThn576_N8S7681C10D0Ev,_ZThn396_N8S7681C10D0Ev)() __attribute__((weak));
extern void _ZN8S7681C113v51Ev();
extern void _ZN8S7681C113v52Ev();
static  VTBL_ENTRY _tg__ZTV8S7681C11__8S7681C107S7681C7__7S7681C1[] = {
  0,
  0,
  ABISELECT(-576,-396),
  ABISELECT(336,208),
  ABISELECT(-2432,-1568),
  ABISELECT(304,196),
  ABISELECT(16,4),
  ABISELECT(-576,-396),
  (VTBL_ENTRY)&(_ZTI8S7681C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S7681C10D1Ev,_ZTv0_n28_N8S7681C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S7681C10D0Ev,_ZTv0_n28_N8S7681C10D0Ev),
  (VTBL_ENTRY)&_ZN8S7681C113v51Ev,
  (VTBL_ENTRY)&_ZN8S7681C113v52Ev,
};
extern void _ZN7S7681C32v8Ev();
extern void _ZN7S7681C32v9Ev();
extern void _ZN7S7681C33v10Ev();
extern void _ZN7S7681C33v11Ev();
extern void _ZN7S7681C43v12Ev();
extern void _ZN7S7681C43v13Ev();
extern void _ZN7S7681C43v14Ev();
extern void _ZN7S7681C23v15Ev();
extern void _ZN7S7681C23v16Ev();
extern void _ZN7S7681C23v17Ev();
extern void _ZN7S7681C23v18Ev();
extern void _ZN8S7681C123v47Ev();
extern void _ZN8S7681C123v48Ev();
extern void _ZN8S7681C123v49Ev();
extern void _ZN8S7681C123v50Ev();
static  VTBL_ENTRY _tg__ZTV8S7681C12__8S7681C107S7681C7__7S7681C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(320,204),
  ABISELECT(288,192),
  ABISELECT(-2448,-1572),
  ABISELECT(-592,-400),
  (VTBL_ENTRY)&(_ZTI8S7681C10[0]),
  (VTBL_ENTRY)&_ZN7S7681C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7681C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v15Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v16Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v17Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v18Ev,
  (VTBL_ENTRY)&_ZN8S7681C123v47Ev,
  (VTBL_ENTRY)&_ZN8S7681C123v48Ev,
  (VTBL_ENTRY)&_ZN8S7681C123v49Ev,
  (VTBL_ENTRY)&_ZN8S7681C123v50Ev,
};
extern void _ZN8S7681C133v42Ev();
extern void _ZN8S7681C133v43Ev();
extern void _ZN8S7681C133v44Ev();
extern void _ZN8S7681C133v45Ev();
extern void _ZN8S7681C133v46Ev();
static  VTBL_ENTRY _tg__ZTV8S7681C13__8S7681C107S7681C7__7S7681C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(32,12),
  ABISELECT(-2736,-1764),
  ABISELECT(-880,-592),
  (VTBL_ENTRY)&(_ZTI8S7681C10[0]),
  (VTBL_ENTRY)&_ZN8S7681C133v42Ev,
  (VTBL_ENTRY)&_ZN8S7681C133v43Ev,
  (VTBL_ENTRY)&_ZN8S7681C133v44Ev,
  (VTBL_ENTRY)&_ZN8S7681C133v45Ev,
  (VTBL_ENTRY)&_ZN8S7681C133v46Ev,
};
extern void _ZN7S7681C32v8Ev();
extern void _ZN7S7681C32v9Ev();
extern void _ZN7S7681C33v10Ev();
extern void _ZN7S7681C33v11Ev();
static  VTBL_ENTRY _tg__ZTV7S7681C3__8S7681C107S7681C7__7S7681C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(1856,1172),
  (VTBL_ENTRY)&(_ZTI8S7681C10[0]),
  (VTBL_ENTRY)&_ZN7S7681C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7681C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v11Ev,
};
extern void _ZN7S7681C32v8Ev();
extern void _ZN7S7681C32v9Ev();
extern void _ZN7S7681C33v10Ev();
extern void _ZN7S7681C33v11Ev();
extern void _ZN7S7681C43v12Ev();
extern void _ZN7S7681C43v13Ev();
extern void _ZN7S7681C43v14Ev();
static  VTBL_ENTRY _tg__ZTV7S7681C4__8S7681C107S7681C7__7S7681C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-912,-604),
  (VTBL_ENTRY)&(_ZTI8S7681C10[0]),
  (VTBL_ENTRY)&_ZN7S7681C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7681C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v14Ev,
};
extern void _ZN7S7681C32v8Ev();
extern void _ZN7S7681C32v9Ev();
extern void _ZN7S7681C33v10Ev();
extern void _ZN7S7681C33v11Ev();
extern void _ZN7S7681C43v12Ev();
extern void _ZN7S7681C43v13Ev();
extern void _ZN7S7681C43v14Ev();
extern void ABISELECT(_ZThn288_N8S7681C10D1Ev,_ZThn192_N8S7681C10D1Ev)();
extern void ABISELECT(_ZThn288_N8S7681C10D0Ev,_ZThn192_N8S7681C10D0Ev)();
extern void _ZN8S7681C153v53Ev();
extern void _ZN8S7681C153v54Ev();
extern void _ZN8S7681C153v55Ev();
extern void _ZN8S7681C153v56Ev();
static  VTBL_ENTRY _tg__ZTV8S7681C15__8S7681C107S7681C7__7S7681C1[] = {
  ABISELECT(832,544),
  ABISELECT(624,412),
  ABISELECT(592,400),
  ABISELECT(-2144,-1364),
  ABISELECT(-288,-192),
  (VTBL_ENTRY)&(_ZTI8S7681C10[0]),
  (VTBL_ENTRY)&_ZN7S7681C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7681C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v14Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn288_N8S7681C10D1Ev,_ZThn192_N8S7681C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn288_N8S7681C10D0Ev,_ZThn192_N8S7681C10D0Ev),
  (VTBL_ENTRY)&_ZN8S7681C153v53Ev,
  (VTBL_ENTRY)&_ZN8S7681C153v54Ev,
  (VTBL_ENTRY)&_ZN8S7681C153v55Ev,
  (VTBL_ENTRY)&_ZN8S7681C153v56Ev,
};
extern void _ZN7S7681C93v33Ev();
extern void _ZN7S7681C93v34Ev();
extern void _ZN7S7681C93v35Ev();
extern void _ZN7S7681C93v36Ev();
extern void _ZN7S7681C93v37Ev();
extern void _ZN7S7681C93v38Ev();
extern void _ZN7S7681C93v39Ev();
extern void _ZN7S7681C93v40Ev();
extern void _ZN7S7681C93v41Ev();
static  VTBL_ENTRY _tg__ZTV7S7681C9__8S7681C107S7681C7__7S7681C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-1120,-736),
  (VTBL_ENTRY)&(_ZTI8S7681C10[0]),
  (VTBL_ENTRY)&_ZN7S7681C93v33Ev,
  (VTBL_ENTRY)&_ZN7S7681C93v34Ev,
  (VTBL_ENTRY)&_ZN7S7681C93v35Ev,
  (VTBL_ENTRY)&_ZN7S7681C93v36Ev,
  (VTBL_ENTRY)&_ZN7S7681C93v37Ev,
  (VTBL_ENTRY)&_ZN7S7681C93v38Ev,
  (VTBL_ENTRY)&_ZN7S7681C93v39Ev,
  (VTBL_ENTRY)&_ZN7S7681C93v40Ev,
  (VTBL_ENTRY)&_ZN7S7681C93v41Ev,
};
extern void _ZN7S7681C83v29Ev();
extern void _ZN7S7681C83v30Ev();
extern void _ZN7S7681C83v31Ev();
extern void _ZN7S7681C83v32Ev();
static  VTBL_ENTRY _tg__ZTV7S7681C8__7S7681C7__7S7681C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-2040,-1320),
  (VTBL_ENTRY)&(_ZTI7S7681C7[0]),
  (VTBL_ENTRY)&_ZN7S7681C83v29Ev,
  (VTBL_ENTRY)&_ZN7S7681C83v30Ev,
  (VTBL_ENTRY)&_ZN7S7681C83v31Ev,
  (VTBL_ENTRY)&_ZN7S7681C83v32Ev,
};
extern void _ZN7S7681C32v8Ev();
extern void _ZN7S7681C32v9Ev();
extern void _ZN7S7681C33v10Ev();
extern void _ZN7S7681C33v11Ev();
extern void _ZN7S7681C43v12Ev();
extern void _ZN7S7681C43v13Ev();
extern void _ZN7S7681C43v14Ev();
extern void _ZN7S7681C23v15Ev();
extern void _ZN7S7681C23v16Ev();
extern void _ZN7S7681C23v17Ev();
extern void _ZN7S7681C23v18Ev();
extern void _ZN8S7681C123v47Ev();
extern void _ZN8S7681C123v48Ev();
extern void _ZN8S7681C123v49Ev();
extern void _ZN8S7681C123v50Ev();
extern void ABISELECT(_ZThn1472_N7S7681C7D1Ev,_ZThn928_N7S7681C7D1Ev)();
extern void ABISELECT(_ZThn1472_N7S7681C7D0Ev,_ZThn928_N7S7681C7D0Ev)();
extern void _ZN8S7681C103v57Ev();
extern void _ZN8S7681C103v58Ev();
extern void _ZN8S7681C103v59Ev();
extern void _ZN8S7681C103v60Ev();
extern void _ZN8S7681C103v61Ev();
extern void _ZN8S7681C103v62Ev();
extern void _ZN8S7681C103v63Ev();
extern void _ZN8S7681C103v64Ev();
static  VTBL_ENTRY _tg__ZTV8S7681C10__7S7681C7__7S7681C1[] = {
  ABISELECT(1120,736),
  ABISELECT(592,400),
  ABISELECT(576,396),
  ABISELECT(568,392),
  ABISELECT(912,604),
  ABISELECT(880,592),
  ABISELECT(-1856,-1172),
  ABISELECT(-1472,-928),
  (VTBL_ENTRY)&(_ZTI7S7681C7[0]),
  (VTBL_ENTRY)&_ZN7S7681C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7681C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v15Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v16Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v17Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v18Ev,
  (VTBL_ENTRY)&_ZN8S7681C123v47Ev,
  (VTBL_ENTRY)&_ZN8S7681C123v48Ev,
  (VTBL_ENTRY)&_ZN8S7681C123v49Ev,
  (VTBL_ENTRY)&_ZN8S7681C123v50Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn1472_N7S7681C7D1Ev,_ZThn928_N7S7681C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1472_N7S7681C7D0Ev,_ZThn928_N7S7681C7D0Ev),
  (VTBL_ENTRY)&_ZN8S7681C103v57Ev,
  (VTBL_ENTRY)&_ZN8S7681C103v58Ev,
  (VTBL_ENTRY)&_ZN8S7681C103v59Ev,
  (VTBL_ENTRY)&_ZN8S7681C103v60Ev,
  (VTBL_ENTRY)&_ZN8S7681C103v61Ev,
  (VTBL_ENTRY)&_ZN8S7681C103v62Ev,
  (VTBL_ENTRY)&_ZN8S7681C103v63Ev,
  (VTBL_ENTRY)&_ZN8S7681C103v64Ev,
};
extern void ABISELECT(_ZTv0_n56_N7S7681C7D1Ev,_ZTv0_n28_N7S7681C7D1Ev)();
extern void ABISELECT(_ZThn2048_N7S7681C7D1Ev,_ZThn1324_N7S7681C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N7S7681C7D0Ev,_ZTv0_n28_N7S7681C7D0Ev)();
extern void ABISELECT(_ZThn2048_N7S7681C7D0Ev,_ZThn1324_N7S7681C7D0Ev)() __attribute__((weak));
extern void _ZN8S7681C113v51Ev();
extern void _ZN8S7681C113v52Ev();
static  VTBL_ENTRY _tg__ZTV8S7681C11__7S7681C7__7S7681C1[] = {
  0,
  0,
  ABISELECT(-2048,-1324),
  ABISELECT(336,208),
  ABISELECT(-2432,-1568),
  ABISELECT(304,196),
  ABISELECT(16,4),
  ABISELECT(-2048,-1324),
  (VTBL_ENTRY)&(_ZTI7S7681C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N7S7681C7D1Ev,_ZTv0_n28_N7S7681C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N7S7681C7D0Ev,_ZTv0_n28_N7S7681C7D0Ev),
  (VTBL_ENTRY)&_ZN8S7681C113v51Ev,
  (VTBL_ENTRY)&_ZN8S7681C113v52Ev,
};
extern void _ZN7S7681C32v8Ev();
extern void _ZN7S7681C32v9Ev();
extern void _ZN7S7681C33v10Ev();
extern void _ZN7S7681C33v11Ev();
extern void _ZN7S7681C43v12Ev();
extern void _ZN7S7681C43v13Ev();
extern void _ZN7S7681C43v14Ev();
extern void _ZN7S7681C23v15Ev();
extern void _ZN7S7681C23v16Ev();
extern void _ZN7S7681C23v17Ev();
extern void _ZN7S7681C23v18Ev();
extern void _ZN8S7681C123v47Ev();
extern void _ZN8S7681C123v48Ev();
extern void _ZN8S7681C123v49Ev();
extern void _ZN8S7681C123v50Ev();
static  VTBL_ENTRY _tg__ZTV8S7681C12__7S7681C7__7S7681C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(320,204),
  ABISELECT(288,192),
  ABISELECT(-2448,-1572),
  ABISELECT(-2064,-1328),
  (VTBL_ENTRY)&(_ZTI7S7681C7[0]),
  (VTBL_ENTRY)&_ZN7S7681C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7681C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v15Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v16Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v17Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v18Ev,
  (VTBL_ENTRY)&_ZN8S7681C123v47Ev,
  (VTBL_ENTRY)&_ZN8S7681C123v48Ev,
  (VTBL_ENTRY)&_ZN8S7681C123v49Ev,
  (VTBL_ENTRY)&_ZN8S7681C123v50Ev,
};
extern void _ZN8S7681C133v42Ev();
extern void _ZN8S7681C133v43Ev();
extern void _ZN8S7681C133v44Ev();
extern void _ZN8S7681C133v45Ev();
extern void _ZN8S7681C133v46Ev();
static  VTBL_ENTRY _tg__ZTV8S7681C13__7S7681C7__7S7681C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(32,12),
  ABISELECT(-2736,-1764),
  ABISELECT(-2352,-1520),
  (VTBL_ENTRY)&(_ZTI7S7681C7[0]),
  (VTBL_ENTRY)&_ZN8S7681C133v42Ev,
  (VTBL_ENTRY)&_ZN8S7681C133v43Ev,
  (VTBL_ENTRY)&_ZN8S7681C133v44Ev,
  (VTBL_ENTRY)&_ZN8S7681C133v45Ev,
  (VTBL_ENTRY)&_ZN8S7681C133v46Ev,
};
extern void _ZN7S7681C32v8Ev();
extern void _ZN7S7681C32v9Ev();
extern void _ZN7S7681C33v10Ev();
extern void _ZN7S7681C33v11Ev();
static  VTBL_ENTRY _tg__ZTV7S7681C3__7S7681C7__7S7681C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(384,244),
  (VTBL_ENTRY)&(_ZTI7S7681C7[0]),
  (VTBL_ENTRY)&_ZN7S7681C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7681C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v11Ev,
};
extern void _ZN7S7681C32v8Ev();
extern void _ZN7S7681C32v9Ev();
extern void _ZN7S7681C33v10Ev();
extern void _ZN7S7681C33v11Ev();
extern void _ZN7S7681C43v12Ev();
extern void _ZN7S7681C43v13Ev();
extern void _ZN7S7681C43v14Ev();
static  VTBL_ENTRY _tg__ZTV7S7681C4__7S7681C7__7S7681C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-2384,-1532),
  (VTBL_ENTRY)&(_ZTI7S7681C7[0]),
  (VTBL_ENTRY)&_ZN7S7681C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7681C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v14Ev,
};
extern void _ZN7S7681C32v8Ev();
extern void _ZN7S7681C32v9Ev();
extern void _ZN7S7681C33v10Ev();
extern void _ZN7S7681C33v11Ev();
extern void _ZN7S7681C43v12Ev();
extern void _ZN7S7681C43v13Ev();
extern void _ZN7S7681C43v14Ev();
extern void ABISELECT(_ZThn1760_N7S7681C7D1Ev,_ZThn1120_N7S7681C7D1Ev)();
extern void ABISELECT(_ZThn1760_N7S7681C7D0Ev,_ZThn1120_N7S7681C7D0Ev)();
extern void _ZN8S7681C153v53Ev();
extern void _ZN8S7681C153v54Ev();
extern void _ZN8S7681C153v55Ev();
extern void _ZN8S7681C153v56Ev();
static  VTBL_ENTRY _tg__ZTV8S7681C158S7681C10__7S7681C7__7S7681C1[] = {
  ABISELECT(832,544),
  ABISELECT(624,412),
  ABISELECT(592,400),
  ABISELECT(-2144,-1364),
  ABISELECT(-1760,-1120),
  (VTBL_ENTRY)&(_ZTI7S7681C7[0]),
  (VTBL_ENTRY)&_ZN7S7681C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7681C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v14Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn1760_N7S7681C7D1Ev,_ZThn1120_N7S7681C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1760_N7S7681C7D0Ev,_ZThn1120_N7S7681C7D0Ev),
  (VTBL_ENTRY)&_ZN8S7681C153v53Ev,
  (VTBL_ENTRY)&_ZN8S7681C153v54Ev,
  (VTBL_ENTRY)&_ZN8S7681C153v55Ev,
  (VTBL_ENTRY)&_ZN8S7681C153v56Ev,
};
extern void _ZN7S7681C93v33Ev();
extern void _ZN7S7681C93v34Ev();
extern void _ZN7S7681C93v35Ev();
extern void _ZN7S7681C93v36Ev();
extern void _ZN7S7681C93v37Ev();
extern void _ZN7S7681C93v38Ev();
extern void _ZN7S7681C93v39Ev();
extern void _ZN7S7681C93v40Ev();
extern void _ZN7S7681C93v41Ev();
static  VTBL_ENTRY _tg__ZTV7S7681C9__A1__7S7681C7__7S7681C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-2592,-1664),
  (VTBL_ENTRY)&(_ZTI7S7681C7[0]),
  (VTBL_ENTRY)&_ZN7S7681C93v33Ev,
  (VTBL_ENTRY)&_ZN7S7681C93v34Ev,
  (VTBL_ENTRY)&_ZN7S7681C93v35Ev,
  (VTBL_ENTRY)&_ZN7S7681C93v36Ev,
  (VTBL_ENTRY)&_ZN7S7681C93v37Ev,
  (VTBL_ENTRY)&_ZN7S7681C93v38Ev,
  (VTBL_ENTRY)&_ZN7S7681C93v39Ev,
  (VTBL_ENTRY)&_ZN7S7681C93v40Ev,
  (VTBL_ENTRY)&_ZN7S7681C93v41Ev,
};
extern void _ZN8S7681C11D1Ev();
extern void _ZN8S7681C11D0Ev();
extern void _ZN8S7681C113v51Ev();
extern void _ZN8S7681C113v52Ev();
static  VTBL_ENTRY _tg__ZTV8S7681C11__7S7681C1[] = {
  ABISELECT(336,208),
  ABISELECT(-2432,-1568),
  ABISELECT(304,196),
  ABISELECT(16,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S7681C11[0]),
  (VTBL_ENTRY)&_ZN8S7681C11D1Ev,
  (VTBL_ENTRY)&_ZN8S7681C11D0Ev,
  (VTBL_ENTRY)&_ZN8S7681C113v51Ev,
  (VTBL_ENTRY)&_ZN8S7681C113v52Ev,
};
extern void _ZN7S7681C32v8Ev();
extern void _ZN7S7681C32v9Ev();
extern void _ZN7S7681C33v10Ev();
extern void _ZN7S7681C33v11Ev();
extern void _ZN7S7681C43v12Ev();
extern void _ZN7S7681C43v13Ev();
extern void _ZN7S7681C43v14Ev();
extern void _ZN7S7681C23v15Ev();
extern void _ZN7S7681C23v16Ev();
extern void _ZN7S7681C23v17Ev();
extern void _ZN7S7681C23v18Ev();
extern void _ZN8S7681C123v47Ev();
extern void _ZN8S7681C123v48Ev();
extern void _ZN8S7681C123v49Ev();
extern void _ZN8S7681C123v50Ev();
static  VTBL_ENTRY _tg__ZTV8S7681C12__8S7681C11__7S7681C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(320,204),
  ABISELECT(288,192),
  ABISELECT(-2448,-1572),
  ABISELECT(-16,-4),
  (VTBL_ENTRY)&(_ZTI8S7681C11[0]),
  (VTBL_ENTRY)&_ZN7S7681C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7681C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v15Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v16Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v17Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v18Ev,
  (VTBL_ENTRY)&_ZN8S7681C123v47Ev,
  (VTBL_ENTRY)&_ZN8S7681C123v48Ev,
  (VTBL_ENTRY)&_ZN8S7681C123v49Ev,
  (VTBL_ENTRY)&_ZN8S7681C123v50Ev,
};
extern void _ZN8S7681C133v42Ev();
extern void _ZN8S7681C133v43Ev();
extern void _ZN8S7681C133v44Ev();
extern void _ZN8S7681C133v45Ev();
extern void _ZN8S7681C133v46Ev();
static  VTBL_ENTRY _tg__ZTV8S7681C13__8S7681C11__7S7681C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(32,12),
  ABISELECT(-2736,-1764),
  ABISELECT(-304,-196),
  (VTBL_ENTRY)&(_ZTI8S7681C11[0]),
  (VTBL_ENTRY)&_ZN8S7681C133v42Ev,
  (VTBL_ENTRY)&_ZN8S7681C133v43Ev,
  (VTBL_ENTRY)&_ZN8S7681C133v44Ev,
  (VTBL_ENTRY)&_ZN8S7681C133v45Ev,
  (VTBL_ENTRY)&_ZN8S7681C133v46Ev,
};
extern void _ZN7S7681C32v8Ev();
extern void _ZN7S7681C32v9Ev();
extern void _ZN7S7681C33v10Ev();
extern void _ZN7S7681C33v11Ev();
static  VTBL_ENTRY _tg__ZTV7S7681C3__8S7681C11__7S7681C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(2432,1568),
  (VTBL_ENTRY)&(_ZTI8S7681C11[0]),
  (VTBL_ENTRY)&_ZN7S7681C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7681C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v11Ev,
};
extern void _ZN7S7681C32v8Ev();
extern void _ZN7S7681C32v9Ev();
extern void _ZN7S7681C33v10Ev();
extern void _ZN7S7681C33v11Ev();
extern void _ZN7S7681C43v12Ev();
extern void _ZN7S7681C43v13Ev();
extern void _ZN7S7681C43v14Ev();
static  VTBL_ENTRY _tg__ZTV7S7681C4__8S7681C11__7S7681C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-336,-208),
  (VTBL_ENTRY)&(_ZTI8S7681C11[0]),
  (VTBL_ENTRY)&_ZN7S7681C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7681C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v14Ev,
};
extern void _ZN7S7681C32v8Ev();
extern void _ZN7S7681C32v9Ev();
extern void _ZN7S7681C33v10Ev();
extern void _ZN7S7681C33v11Ev();
extern void _ZN7S7681C43v12Ev();
extern void _ZN7S7681C43v13Ev();
extern void _ZN7S7681C43v14Ev();
extern void _ZN7S7681C23v15Ev();
extern void _ZN7S7681C23v16Ev();
extern void _ZN7S7681C23v17Ev();
extern void _ZN7S7681C23v18Ev();
extern void _ZN8S7681C123v47Ev();
extern void _ZN8S7681C123v48Ev();
extern void _ZN8S7681C123v49Ev();
extern void _ZN8S7681C123v50Ev();
static  VTBL_ENTRY _tg__ZTV8S7681C12__7S7681C1[] = {
  ABISELECT(320,204),
  ABISELECT(288,192),
  ABISELECT(-2448,-1572),
  0,
  (VTBL_ENTRY)&(_ZTI8S7681C12[0]),
  (VTBL_ENTRY)&_ZN7S7681C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7681C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v15Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v16Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v17Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v18Ev,
  (VTBL_ENTRY)&_ZN8S7681C123v47Ev,
  (VTBL_ENTRY)&_ZN8S7681C123v48Ev,
  (VTBL_ENTRY)&_ZN8S7681C123v49Ev,
  (VTBL_ENTRY)&_ZN8S7681C123v50Ev,
};
extern void _ZN7S7681C32v8Ev();
extern void _ZN7S7681C32v9Ev();
extern void _ZN7S7681C33v10Ev();
extern void _ZN7S7681C33v11Ev();
extern void _ZN7S7681C43v12Ev();
extern void _ZN7S7681C43v13Ev();
extern void _ZN7S7681C43v14Ev();
extern void _ZN7S7681C23v15Ev();
extern void _ZN7S7681C23v16Ev();
extern void _ZN7S7681C23v17Ev();
extern void _ZN7S7681C23v18Ev();
static  VTBL_ENTRY _tg__ZTV7S7681C28S7681C12__A2__7S7681C1[] = {
  ABISELECT(-2448,-1572),
  0,
  (VTBL_ENTRY)&(_ZTI7S7681C2[0]),
  (VTBL_ENTRY)&_ZN7S7681C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7681C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v15Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v16Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v17Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v18Ev,
};
extern void _ZN7S7681C32v8Ev();
extern void _ZN7S7681C32v9Ev();
extern void _ZN7S7681C33v10Ev();
extern void _ZN7S7681C33v11Ev();
static  VTBL_ENTRY _tg__ZTV7S7681C3__7S7681C28S7681C12__A2__7S7681C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(2448,1572),
  (VTBL_ENTRY)&(_ZTI7S7681C2[0]),
  (VTBL_ENTRY)&_ZN7S7681C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7681C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v11Ev,
};
extern void _ZN8S7681C133v42Ev();
extern void _ZN8S7681C133v43Ev();
extern void _ZN8S7681C133v44Ev();
extern void _ZN8S7681C133v45Ev();
extern void _ZN8S7681C133v46Ev();
static  VTBL_ENTRY _tg__ZTV8S7681C13__8S7681C12__7S7681C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(32,12),
  ABISELECT(-2736,-1764),
  ABISELECT(-288,-192),
  (VTBL_ENTRY)&(_ZTI8S7681C12[0]),
  (VTBL_ENTRY)&_ZN8S7681C133v42Ev,
  (VTBL_ENTRY)&_ZN8S7681C133v43Ev,
  (VTBL_ENTRY)&_ZN8S7681C133v44Ev,
  (VTBL_ENTRY)&_ZN8S7681C133v45Ev,
  (VTBL_ENTRY)&_ZN8S7681C133v46Ev,
};
extern void _ZN7S7681C32v8Ev();
extern void _ZN7S7681C32v9Ev();
extern void _ZN7S7681C33v10Ev();
extern void _ZN7S7681C33v11Ev();
static  VTBL_ENTRY _tg__ZTV7S7681C3__8S7681C12__7S7681C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(2448,1572),
  (VTBL_ENTRY)&(_ZTI8S7681C12[0]),
  (VTBL_ENTRY)&_ZN7S7681C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7681C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v11Ev,
};
extern void _ZN7S7681C32v8Ev();
extern void _ZN7S7681C32v9Ev();
extern void _ZN7S7681C33v10Ev();
extern void _ZN7S7681C33v11Ev();
extern void _ZN7S7681C43v12Ev();
extern void _ZN7S7681C43v13Ev();
extern void _ZN7S7681C43v14Ev();
static  VTBL_ENTRY _tg__ZTV7S7681C4__8S7681C12__7S7681C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-320,-204),
  (VTBL_ENTRY)&(_ZTI8S7681C12[0]),
  (VTBL_ENTRY)&_ZN7S7681C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7681C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v14Ev,
};
extern void _ZN8S7681C133v42Ev();
extern void _ZN8S7681C133v43Ev();
extern void _ZN8S7681C133v44Ev();
extern void _ZN8S7681C133v45Ev();
extern void _ZN8S7681C133v46Ev();
static  VTBL_ENTRY _tg__ZTV8S7681C13__7S7681C1[] = {
  ABISELECT(32,12),
  ABISELECT(-2736,-1764),
  0,
  (VTBL_ENTRY)&(_ZTI8S7681C13[0]),
  (VTBL_ENTRY)&_ZN8S7681C133v42Ev,
  (VTBL_ENTRY)&_ZN8S7681C133v43Ev,
  (VTBL_ENTRY)&_ZN8S7681C133v44Ev,
  (VTBL_ENTRY)&_ZN8S7681C133v45Ev,
  (VTBL_ENTRY)&_ZN8S7681C133v46Ev,
};
extern void _ZN7S7681C32v8Ev();
extern void _ZN7S7681C32v9Ev();
extern void _ZN7S7681C33v10Ev();
extern void _ZN7S7681C33v11Ev();
static  VTBL_ENTRY _tg__ZTV7S7681C3__8S7681C13__7S7681C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(2736,1764),
  (VTBL_ENTRY)&(_ZTI8S7681C13[0]),
  (VTBL_ENTRY)&_ZN7S7681C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7681C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v11Ev,
};
extern void _ZN7S7681C32v8Ev();
extern void _ZN7S7681C32v9Ev();
extern void _ZN7S7681C33v10Ev();
extern void _ZN7S7681C33v11Ev();
extern void _ZN7S7681C43v12Ev();
extern void _ZN7S7681C43v13Ev();
extern void _ZN7S7681C43v14Ev();
static  VTBL_ENTRY _tg__ZTV7S7681C4__8S7681C13__7S7681C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-32,-12),
  (VTBL_ENTRY)&(_ZTI8S7681C13[0]),
  (VTBL_ENTRY)&_ZN7S7681C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7681C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v14Ev,
};
extern void _ZN7S7681C32v8Ev();
extern void _ZN7S7681C32v9Ev();
extern void _ZN7S7681C33v10Ev();
extern void _ZN7S7681C33v11Ev();
extern void _ZN7S7681C43v12Ev();
extern void _ZN7S7681C43v13Ev();
extern void _ZN7S7681C43v14Ev();
extern void _ZN7S7681C23v15Ev();
extern void _ZN7S7681C23v16Ev();
extern void _ZN7S7681C23v17Ev();
extern void _ZN7S7681C23v18Ev();
extern void _ZN8S7681C123v47Ev();
extern void _ZN8S7681C123v48Ev();
extern void _ZN8S7681C123v49Ev();
extern void _ZN8S7681C123v50Ev();
extern void _ZN8S7681C10D1Ev();
extern void _ZN8S7681C10D0Ev();
extern void _ZN8S7681C103v57Ev();
extern void _ZN8S7681C103v58Ev();
extern void _ZN8S7681C103v59Ev();
extern void _ZN8S7681C103v60Ev();
extern void _ZN8S7681C103v61Ev();
extern void _ZN8S7681C103v62Ev();
extern void _ZN8S7681C103v63Ev();
extern void _ZN8S7681C103v64Ev();
static  VTBL_ENTRY _tg__ZTV8S7681C10__A1__7S7681C1[] = {
  ABISELECT(-1472,-928),
  ABISELECT(-2000,-1264),
  ABISELECT(-2016,-1268),
  ABISELECT(-2024,-1272),
  ABISELECT(-1680,-1060),
  ABISELECT(-1712,-1072),
  ABISELECT(-4448,-2836),
  0,
  (VTBL_ENTRY)&(_ZTI8S7681C10[0]),
  (VTBL_ENTRY)&_ZN7S7681C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7681C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v15Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v16Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v17Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v18Ev,
  (VTBL_ENTRY)&_ZN8S7681C123v47Ev,
  (VTBL_ENTRY)&_ZN8S7681C123v48Ev,
  (VTBL_ENTRY)&_ZN8S7681C123v49Ev,
  (VTBL_ENTRY)&_ZN8S7681C123v50Ev,
  (VTBL_ENTRY)&_ZN8S7681C10D1Ev,
  (VTBL_ENTRY)&_ZN8S7681C10D0Ev,
  (VTBL_ENTRY)&_ZN8S7681C103v57Ev,
  (VTBL_ENTRY)&_ZN8S7681C103v58Ev,
  (VTBL_ENTRY)&_ZN8S7681C103v59Ev,
  (VTBL_ENTRY)&_ZN8S7681C103v60Ev,
  (VTBL_ENTRY)&_ZN8S7681C103v61Ev,
  (VTBL_ENTRY)&_ZN8S7681C103v62Ev,
  (VTBL_ENTRY)&_ZN8S7681C103v63Ev,
  (VTBL_ENTRY)&_ZN8S7681C103v64Ev,
};
extern void _ZN7S7681C32v8Ev();
extern void _ZN7S7681C32v9Ev();
extern void _ZN7S7681C33v10Ev();
extern void _ZN7S7681C33v11Ev();
extern void _ZN7S7681C43v12Ev();
extern void _ZN7S7681C43v13Ev();
extern void _ZN7S7681C43v14Ev();
extern void _ZN7S7681C23v15Ev();
extern void _ZN7S7681C23v16Ev();
extern void _ZN7S7681C23v17Ev();
extern void _ZN7S7681C23v18Ev();
extern void _ZN8S7681C123v47Ev();
extern void _ZN8S7681C123v48Ev();
extern void _ZN8S7681C123v49Ev();
extern void _ZN8S7681C123v50Ev();
static  VTBL_ENTRY _tg__ZTV8S7681C128S7681C10__A2__7S7681C1[] = {
  ABISELECT(-1680,-1060),
  ABISELECT(-1712,-1072),
  ABISELECT(-4448,-2836),
  0,
  (VTBL_ENTRY)&(_ZTI8S7681C12[0]),
  (VTBL_ENTRY)&_ZN7S7681C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7681C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v15Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v16Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v17Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v18Ev,
  (VTBL_ENTRY)&_ZN8S7681C123v47Ev,
  (VTBL_ENTRY)&_ZN8S7681C123v48Ev,
  (VTBL_ENTRY)&_ZN8S7681C123v49Ev,
  (VTBL_ENTRY)&_ZN8S7681C123v50Ev,
};
extern void _ZN7S7681C32v8Ev();
extern void _ZN7S7681C32v9Ev();
extern void _ZN7S7681C33v10Ev();
extern void _ZN7S7681C33v11Ev();
extern void _ZN7S7681C43v12Ev();
extern void _ZN7S7681C43v13Ev();
extern void _ZN7S7681C43v14Ev();
extern void _ZN7S7681C23v15Ev();
extern void _ZN7S7681C23v16Ev();
extern void _ZN7S7681C23v17Ev();
extern void _ZN7S7681C23v18Ev();
static  VTBL_ENTRY _tg__ZTV7S7681C28S7681C128S7681C10__A4__7S7681C1[] = {
  ABISELECT(-4448,-2836),
  0,
  (VTBL_ENTRY)&(_ZTI7S7681C2[0]),
  (VTBL_ENTRY)&_ZN7S7681C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7681C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v15Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v16Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v17Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v18Ev,
};
extern void _ZN7S7681C32v8Ev();
extern void _ZN7S7681C32v9Ev();
extern void _ZN7S7681C33v10Ev();
extern void _ZN7S7681C33v11Ev();
static  VTBL_ENTRY _tg__ZTV7S7681C3__7S7681C28S7681C128S7681C10__A4__7S7681C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(4448,2836),
  (VTBL_ENTRY)&(_ZTI7S7681C2[0]),
  (VTBL_ENTRY)&_ZN7S7681C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7681C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v11Ev,
};
extern void _ZN8S7681C133v42Ev();
extern void _ZN8S7681C133v43Ev();
extern void _ZN8S7681C133v44Ev();
extern void _ZN8S7681C133v45Ev();
extern void _ZN8S7681C133v46Ev();
static  VTBL_ENTRY _tg__ZTV8S7681C13__8S7681C128S7681C10__A2__7S7681C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(32,12),
  ABISELECT(-2736,-1764),
  ABISELECT(1712,1072),
  (VTBL_ENTRY)&(_ZTI8S7681C12[0]),
  (VTBL_ENTRY)&_ZN8S7681C133v42Ev,
  (VTBL_ENTRY)&_ZN8S7681C133v43Ev,
  (VTBL_ENTRY)&_ZN8S7681C133v44Ev,
  (VTBL_ENTRY)&_ZN8S7681C133v45Ev,
  (VTBL_ENTRY)&_ZN8S7681C133v46Ev,
};
extern void _ZN7S7681C32v8Ev();
extern void _ZN7S7681C32v9Ev();
extern void _ZN7S7681C33v10Ev();
extern void _ZN7S7681C33v11Ev();
static  VTBL_ENTRY _tg__ZTV7S7681C3__8S7681C128S7681C10__A2__7S7681C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(4448,2836),
  (VTBL_ENTRY)&(_ZTI8S7681C12[0]),
  (VTBL_ENTRY)&_ZN7S7681C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7681C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v11Ev,
};
extern void _ZN7S7681C32v8Ev();
extern void _ZN7S7681C32v9Ev();
extern void _ZN7S7681C33v10Ev();
extern void _ZN7S7681C33v11Ev();
extern void _ZN7S7681C43v12Ev();
extern void _ZN7S7681C43v13Ev();
extern void _ZN7S7681C43v14Ev();
static  VTBL_ENTRY _tg__ZTV7S7681C4__8S7681C128S7681C10__A2__7S7681C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(1680,1060),
  (VTBL_ENTRY)&(_ZTI8S7681C12[0]),
  (VTBL_ENTRY)&_ZN7S7681C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7681C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v14Ev,
};
extern void _ZN7S7681C32v8Ev();
extern void _ZN7S7681C32v9Ev();
extern void _ZN7S7681C33v10Ev();
extern void _ZN7S7681C33v11Ev();
extern void _ZN7S7681C43v12Ev();
extern void _ZN7S7681C43v13Ev();
extern void _ZN7S7681C43v14Ev();
extern void _ZN8S7681C15D1Ev();
extern void _ZN8S7681C15D0Ev();
extern void _ZN8S7681C153v53Ev();
extern void _ZN8S7681C153v54Ev();
extern void _ZN8S7681C153v55Ev();
extern void _ZN8S7681C153v56Ev();
static  VTBL_ENTRY _tg__ZTV8S7681C158S7681C10__A1__7S7681C1[] = {
  ABISELECT(-1760,-1120),
  ABISELECT(-1968,-1252),
  ABISELECT(-2000,-1264),
  ABISELECT(-4736,-3028),
  0,
  (VTBL_ENTRY)&(_ZTI8S7681C15[0]),
  (VTBL_ENTRY)&_ZN7S7681C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7681C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v14Ev,
  (VTBL_ENTRY)&_ZN8S7681C15D1Ev,
  (VTBL_ENTRY)&_ZN8S7681C15D0Ev,
  (VTBL_ENTRY)&_ZN8S7681C153v53Ev,
  (VTBL_ENTRY)&_ZN8S7681C153v54Ev,
  (VTBL_ENTRY)&_ZN8S7681C153v55Ev,
  (VTBL_ENTRY)&_ZN8S7681C153v56Ev,
};
extern void _ZN7S7681C32v8Ev();
extern void _ZN7S7681C32v9Ev();
extern void _ZN7S7681C33v10Ev();
extern void _ZN7S7681C33v11Ev();
static  VTBL_ENTRY _tg__ZTV7S7681C3__8S7681C158S7681C10__A1__7S7681C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(4736,3028),
  (VTBL_ENTRY)&(_ZTI8S7681C15[0]),
  (VTBL_ENTRY)&_ZN7S7681C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7681C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v11Ev,
};
extern void _ZN8S7681C133v42Ev();
extern void _ZN8S7681C133v43Ev();
extern void _ZN8S7681C133v44Ev();
extern void _ZN8S7681C133v45Ev();
extern void _ZN8S7681C133v46Ev();
static  VTBL_ENTRY _tg__ZTV8S7681C13__8S7681C158S7681C10__A1__7S7681C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(32,12),
  ABISELECT(-2736,-1764),
  ABISELECT(2000,1264),
  (VTBL_ENTRY)&(_ZTI8S7681C15[0]),
  (VTBL_ENTRY)&_ZN8S7681C133v42Ev,
  (VTBL_ENTRY)&_ZN8S7681C133v43Ev,
  (VTBL_ENTRY)&_ZN8S7681C133v44Ev,
  (VTBL_ENTRY)&_ZN8S7681C133v45Ev,
  (VTBL_ENTRY)&_ZN8S7681C133v46Ev,
};
extern void _ZN7S7681C32v8Ev();
extern void _ZN7S7681C32v9Ev();
extern void _ZN7S7681C33v10Ev();
extern void _ZN7S7681C33v11Ev();
extern void _ZN7S7681C43v12Ev();
extern void _ZN7S7681C43v13Ev();
extern void _ZN7S7681C43v14Ev();
static  VTBL_ENTRY _tg__ZTV7S7681C4__8S7681C158S7681C10__A1__7S7681C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(1968,1252),
  (VTBL_ENTRY)&(_ZTI8S7681C15[0]),
  (VTBL_ENTRY)&_ZN7S7681C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7681C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v14Ev,
};
extern void _ZN7S7681C93v33Ev();
extern void _ZN7S7681C93v34Ev();
extern void _ZN7S7681C93v35Ev();
extern void _ZN7S7681C93v36Ev();
extern void _ZN7S7681C93v37Ev();
extern void _ZN7S7681C93v38Ev();
extern void _ZN7S7681C93v39Ev();
extern void _ZN7S7681C93v40Ev();
extern void _ZN7S7681C93v41Ev();
static  VTBL_ENTRY _tg__ZTV7S7681C9__8S7681C158S7681C10__A1__7S7681C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(1760,1120),
  (VTBL_ENTRY)&(_ZTI8S7681C15[0]),
  (VTBL_ENTRY)&_ZN7S7681C93v33Ev,
  (VTBL_ENTRY)&_ZN7S7681C93v34Ev,
  (VTBL_ENTRY)&_ZN7S7681C93v35Ev,
  (VTBL_ENTRY)&_ZN7S7681C93v36Ev,
  (VTBL_ENTRY)&_ZN7S7681C93v37Ev,
  (VTBL_ENTRY)&_ZN7S7681C93v38Ev,
  (VTBL_ENTRY)&_ZN7S7681C93v39Ev,
  (VTBL_ENTRY)&_ZN7S7681C93v40Ev,
  (VTBL_ENTRY)&_ZN7S7681C93v41Ev,
};
extern void _ZN7S7681C83v29Ev();
extern void _ZN7S7681C83v30Ev();
extern void _ZN7S7681C83v31Ev();
extern void _ZN7S7681C83v32Ev();
static  VTBL_ENTRY _tg__ZTV7S7681C8__8S7681C10__A1__7S7681C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(2024,1272),
  (VTBL_ENTRY)&(_ZTI8S7681C10[0]),
  (VTBL_ENTRY)&_ZN7S7681C83v29Ev,
  (VTBL_ENTRY)&_ZN7S7681C83v30Ev,
  (VTBL_ENTRY)&_ZN7S7681C83v31Ev,
  (VTBL_ENTRY)&_ZN7S7681C83v32Ev,
};
extern void ABISELECT(_ZTv0_n56_N8S7681C10D1Ev,_ZTv0_n28_N8S7681C10D1Ev)();
extern void ABISELECT(_ZTv0_n56_N8S7681C10D0Ev,_ZTv0_n28_N8S7681C10D0Ev)();
extern void _ZN8S7681C113v51Ev();
extern void _ZN8S7681C113v52Ev();
static  VTBL_ENTRY _tg__ZTV8S7681C11__8S7681C10__A1__7S7681C1[] = {
  0,
  0,
  ABISELECT(2016,1268),
  ABISELECT(336,208),
  ABISELECT(-2432,-1568),
  ABISELECT(304,196),
  ABISELECT(16,4),
  ABISELECT(2016,1268),
  (VTBL_ENTRY)&(_ZTI8S7681C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S7681C10D1Ev,_ZTv0_n28_N8S7681C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S7681C10D0Ev,_ZTv0_n28_N8S7681C10D0Ev),
  (VTBL_ENTRY)&_ZN8S7681C113v51Ev,
  (VTBL_ENTRY)&_ZN8S7681C113v52Ev,
};
extern void _ZN7S7681C32v8Ev();
extern void _ZN7S7681C32v9Ev();
extern void _ZN7S7681C33v10Ev();
extern void _ZN7S7681C33v11Ev();
extern void _ZN7S7681C43v12Ev();
extern void _ZN7S7681C43v13Ev();
extern void _ZN7S7681C43v14Ev();
extern void _ZN7S7681C23v15Ev();
extern void _ZN7S7681C23v16Ev();
extern void _ZN7S7681C23v17Ev();
extern void _ZN7S7681C23v18Ev();
extern void _ZN8S7681C123v47Ev();
extern void _ZN8S7681C123v48Ev();
extern void _ZN8S7681C123v49Ev();
extern void _ZN8S7681C123v50Ev();
static  VTBL_ENTRY _tg__ZTV8S7681C12__8S7681C10__A1__7S7681C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(320,204),
  ABISELECT(288,192),
  ABISELECT(-2448,-1572),
  ABISELECT(2000,1264),
  (VTBL_ENTRY)&(_ZTI8S7681C10[0]),
  (VTBL_ENTRY)&_ZN7S7681C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7681C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v15Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v16Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v17Ev,
  (VTBL_ENTRY)&_ZN7S7681C23v18Ev,
  (VTBL_ENTRY)&_ZN8S7681C123v47Ev,
  (VTBL_ENTRY)&_ZN8S7681C123v48Ev,
  (VTBL_ENTRY)&_ZN8S7681C123v49Ev,
  (VTBL_ENTRY)&_ZN8S7681C123v50Ev,
};
extern void _ZN8S7681C133v42Ev();
extern void _ZN8S7681C133v43Ev();
extern void _ZN8S7681C133v44Ev();
extern void _ZN8S7681C133v45Ev();
extern void _ZN8S7681C133v46Ev();
static  VTBL_ENTRY _tg__ZTV8S7681C13__8S7681C10__A1__7S7681C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(32,12),
  ABISELECT(-2736,-1764),
  ABISELECT(1712,1072),
  (VTBL_ENTRY)&(_ZTI8S7681C10[0]),
  (VTBL_ENTRY)&_ZN8S7681C133v42Ev,
  (VTBL_ENTRY)&_ZN8S7681C133v43Ev,
  (VTBL_ENTRY)&_ZN8S7681C133v44Ev,
  (VTBL_ENTRY)&_ZN8S7681C133v45Ev,
  (VTBL_ENTRY)&_ZN8S7681C133v46Ev,
};
extern void _ZN7S7681C32v8Ev();
extern void _ZN7S7681C32v9Ev();
extern void _ZN7S7681C33v10Ev();
extern void _ZN7S7681C33v11Ev();
static  VTBL_ENTRY _tg__ZTV7S7681C3__8S7681C10__A1__7S7681C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(4448,2836),
  (VTBL_ENTRY)&(_ZTI8S7681C10[0]),
  (VTBL_ENTRY)&_ZN7S7681C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7681C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v11Ev,
};
extern void _ZN7S7681C32v8Ev();
extern void _ZN7S7681C32v9Ev();
extern void _ZN7S7681C33v10Ev();
extern void _ZN7S7681C33v11Ev();
extern void _ZN7S7681C43v12Ev();
extern void _ZN7S7681C43v13Ev();
extern void _ZN7S7681C43v14Ev();
static  VTBL_ENTRY _tg__ZTV7S7681C4__8S7681C10__A1__7S7681C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(1680,1060),
  (VTBL_ENTRY)&(_ZTI8S7681C10[0]),
  (VTBL_ENTRY)&_ZN7S7681C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7681C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v14Ev,
};
extern void _ZN7S7681C32v8Ev();
extern void _ZN7S7681C32v9Ev();
extern void _ZN7S7681C33v10Ev();
extern void _ZN7S7681C33v11Ev();
extern void _ZN7S7681C43v12Ev();
extern void _ZN7S7681C43v13Ev();
extern void _ZN7S7681C43v14Ev();
extern void ABISELECT(_ZThn288_N8S7681C10D1Ev,_ZThn192_N8S7681C10D1Ev)();
extern void ABISELECT(_ZThn288_N8S7681C10D0Ev,_ZThn192_N8S7681C10D0Ev)();
extern void _ZN8S7681C153v53Ev();
extern void _ZN8S7681C153v54Ev();
extern void _ZN8S7681C153v55Ev();
extern void _ZN8S7681C153v56Ev();
static  VTBL_ENTRY _tg__ZTV8S7681C15__8S7681C10__A1__7S7681C1[] = {
  ABISELECT(-1760,-1120),
  ABISELECT(-1968,-1252),
  ABISELECT(-2000,-1264),
  ABISELECT(-4736,-3028),
  ABISELECT(-288,-192),
  (VTBL_ENTRY)&(_ZTI8S7681C10[0]),
  (VTBL_ENTRY)&_ZN7S7681C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7681C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7681C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7681C43v14Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn288_N8S7681C10D1Ev,_ZThn192_N8S7681C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn288_N8S7681C10D0Ev,_ZThn192_N8S7681C10D0Ev),
  (VTBL_ENTRY)&_ZN8S7681C153v53Ev,
  (VTBL_ENTRY)&_ZN8S7681C153v54Ev,
  (VTBL_ENTRY)&_ZN8S7681C153v55Ev,
  (VTBL_ENTRY)&_ZN8S7681C153v56Ev,
};
extern void _ZN7S7681C93v33Ev();
extern void _ZN7S7681C93v34Ev();
extern void _ZN7S7681C93v35Ev();
extern void _ZN7S7681C93v36Ev();
extern void _ZN7S7681C93v37Ev();
extern void _ZN7S7681C93v38Ev();
extern void _ZN7S7681C93v39Ev();
extern void _ZN7S7681C93v40Ev();
extern void _ZN7S7681C93v41Ev();
static  VTBL_ENTRY _tg__ZTV7S7681C9__8S7681C10__A1__7S7681C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(1472,928),
  (VTBL_ENTRY)&(_ZTI8S7681C10[0]),
  (VTBL_ENTRY)&_ZN7S7681C93v33Ev,
  (VTBL_ENTRY)&_ZN7S7681C93v34Ev,
  (VTBL_ENTRY)&_ZN7S7681C93v35Ev,
  (VTBL_ENTRY)&_ZN7S7681C93v36Ev,
  (VTBL_ENTRY)&_ZN7S7681C93v37Ev,
  (VTBL_ENTRY)&_ZN7S7681C93v38Ev,
  (VTBL_ENTRY)&_ZN7S7681C93v39Ev,
  (VTBL_ENTRY)&_ZN7S7681C93v40Ev,
  (VTBL_ENTRY)&_ZN7S7681C93v41Ev,
};
static  VTT_ENTRY vtt_S7681C1[] = {
  {&(_ZTV7S7681C1[12]),  12,469},
  {&(_tg__ZTV7S7681C2__A__7S7681C1[3]),  3,14},
  {&(_tg__ZTV7S7681C3__7S7681C2__A__7S7681C1[6]),  6,10},
  {&(_tg__ZTV7S7681C5__7S7681C1[4]),  4,16},
  {&(_tg__ZTV7S7681C67S7681C5__7S7681C1[4]),  4,10},
  {&(_tg__ZTV7S7681C2__7S7681C67S7681C5__7S7681C1[14]),  14,25},
  {&(_tg__ZTV7S7681C3__7S7681C67S7681C5__7S7681C1[6]),  6,10},
  {&(_tg__ZTV7S7681C2__7S7681C5__7S7681C1[14]),  14,25},
  {&(_tg__ZTV7S7681C3__7S7681C5__7S7681C1[6]),  6,10},
  {&(_tg__ZTV8S7681C16__7S7681C1[11]),  11,24},
  {&(_tg__ZTV7S7681C68S7681C16__A1__7S7681C1[4]),  4,10},
  {&(_tg__ZTV7S7681C2__7S7681C68S7681C16__A1__7S7681C1[14]),  14,25},
  {&(_tg__ZTV7S7681C3__7S7681C68S7681C16__A1__7S7681C1[6]),  6,10},
  {&(_tg__ZTV7S7681C3__8S7681C16__7S7681C1[6]),  6,10},
  {&(_tg__ZTV8S7681C13__8S7681C16__7S7681C1[9]),  9,14},
  {&(_tg__ZTV7S7681C4__8S7681C16__7S7681C1[9]),  9,16},
  {&(_tg__ZTV8S7681C10__8S7681C16__7S7681C1[37]),  37,62},
  {&(_tg__ZTV7S7681C8__A1__8S7681C16__7S7681C1[6]),  6,10},
  {&(_tg__ZTV8S7681C11__8S7681C16__7S7681C1[9]),  9,13},
  {&(_tg__ZTV8S7681C12__8S7681C16__7S7681C1[20]),  20,35},
  {&(_tg__ZTV8S7681C158S7681C10__8S7681C16__7S7681C1[6]),  6,19},
  {&(_tg__ZTV7S7681C9__8S7681C16__7S7681C1[11]),  11,20},
  {&(_tg__ZTV7S7681C6__8S7681C16__7S7681C1[4]),  4,10},
  {&(_tg__ZTV7S7681C2__A2__8S7681C16__7S7681C1[14]),  14,25},
  {&(_tg__ZTV8S7681C10__A__7S7681C1[9]),  9,34},
  {&(_tg__ZTV8S7681C128S7681C10__A3__7S7681C1[5]),  5,20},
  {&(_tg__ZTV7S7681C28S7681C128S7681C10__A5__7S7681C1[3]),  3,14},
  {&(_tg__ZTV7S7681C3__7S7681C28S7681C128S7681C10__A5__7S7681C1[6]),  6,10},
  {&(_tg__ZTV8S7681C13__8S7681C128S7681C10__A3__7S7681C1[9]),  9,14},
  {&(_tg__ZTV7S7681C3__8S7681C128S7681C10__A3__7S7681C1[6]),  6,10},
  {&(_tg__ZTV7S7681C4__8S7681C128S7681C10__A3__7S7681C1[9]),  9,16},
  {&(_tg__ZTV8S7681C158S7681C10__A2__7S7681C1[6]),  6,19},
  {&(_tg__ZTV7S7681C3__8S7681C158S7681C10__A2__7S7681C1[6]),  6,10},
  {&(_tg__ZTV8S7681C13__8S7681C158S7681C10__A2__7S7681C1[9]),  9,14},
  {&(_tg__ZTV7S7681C4__8S7681C158S7681C10__A2__7S7681C1[9]),  9,16},
  {&(_tg__ZTV7S7681C9__8S7681C158S7681C10__A2__7S7681C1[11]),  11,20},
  {&(_tg__ZTV7S7681C8__8S7681C10__A__7S7681C1[6]),  6,10},
  {&(_tg__ZTV8S7681C11__8S7681C10__A__7S7681C1[9]),  9,13},
  {&(_tg__ZTV8S7681C12__8S7681C10__A__7S7681C1[20]),  20,35},
  {&(_tg__ZTV8S7681C13__8S7681C10__A__7S7681C1[9]),  9,14},
  {&(_tg__ZTV7S7681C3__8S7681C10__A__7S7681C1[6]),  6,10},
  {&(_tg__ZTV7S7681C4__8S7681C10__A__7S7681C1[9]),  9,16},
  {&(_tg__ZTV8S7681C15__8S7681C10__A__7S7681C1[6]),  6,19},
  {&(_tg__ZTV7S7681C9__8S7681C10__A__7S7681C1[11]),  11,20},
  {&(_ZTV7S7681C1[141]),  141,469},
  {&(_ZTV7S7681C1[36]),  36,469},
  {&(_ZTV7S7681C1[159]),  159,469},
  {&(_ZTV7S7681C1[216]),  216,469},
  {&(_ZTV7S7681C1[286]),  286,469},
  {&(_ZTV7S7681C1[236]),  236,469},
  {&(_ZTV7S7681C1[299]),  299,469},
  {&(_ZTV7S7681C1[323]),  323,469},
  {&(_ZTV7S7681C1[347]),  347,469},
  {&(_ZTV7S7681C1[361]),  361,469},
  {&(_ZTV7S7681C1[267]),  267,469},
  {&(_ZTV7S7681C1[379]),  379,469},
  {&(_ZTV7S7681C1[59]),  59,469},
  {&(_ZTV7S7681C1[425]),  425,469},
  {&(_ZTV7S7681C1[456]),  456,469},
  {&(_ZTV7S7681C1[76]),  76,469},
  {&(_ZTV7S7681C1[91]),  91,469},
  {&(_ZTV7S7681C1[122]),  122,469},
  {&(_tg__ZTV7S7681C2__A1__7S7681C1[3]),  3,14},
  {&(_tg__ZTV7S7681C3__7S7681C2__A1__7S7681C1[6]),  6,10},
  {&(_tg__ZTV7S7681C7__7S7681C1[9]),  9,20},
  {&(_tg__ZTV8S7681C107S7681C7__7S7681C1[9]),  9,34},
  {&(_tg__ZTV8S7681C128S7681C107S7681C7__A1__7S7681C1[5]),  5,20},
  {&(_tg__ZTV7S7681C28S7681C128S7681C107S7681C7__A3__7S7681C1[3]),  3,14},
  {&(_tg__ZTV7S7681C3__7S7681C28S7681C128S7681C107S7681C7__A3__7S7681C1[6]),  6,10},
  {&(_tg__ZTV8S7681C13__8S7681C128S7681C107S7681C7__A1__7S7681C1[9]),  9,14},
  {&(_tg__ZTV7S7681C3__8S7681C128S7681C107S7681C7__A1__7S7681C1[6]),  6,10},
  {&(_tg__ZTV7S7681C4__8S7681C128S7681C107S7681C7__A1__7S7681C1[9]),  9,16},
  {&(_tg__ZTV8S7681C158S7681C107S7681C7__7S7681C1[6]),  6,19},
  {&(_tg__ZTV7S7681C3__8S7681C158S7681C107S7681C7__7S7681C1[6]),  6,10},
  {&(_tg__ZTV8S7681C13__8S7681C158S7681C107S7681C7__7S7681C1[9]),  9,14},
  {&(_tg__ZTV7S7681C4__8S7681C158S7681C107S7681C7__7S7681C1[9]),  9,16},
  {&(_tg__ZTV7S7681C9__8S7681C158S7681C107S7681C7__7S7681C1[11]),  11,20},
  {&(_tg__ZTV7S7681C8__8S7681C107S7681C7__7S7681C1[6]),  6,10},
  {&(_tg__ZTV8S7681C11__8S7681C107S7681C7__7S7681C1[9]),  9,13},
  {&(_tg__ZTV8S7681C12__8S7681C107S7681C7__7S7681C1[20]),  20,35},
  {&(_tg__ZTV8S7681C13__8S7681C107S7681C7__7S7681C1[9]),  9,14},
  {&(_tg__ZTV7S7681C3__8S7681C107S7681C7__7S7681C1[6]),  6,10},
  {&(_tg__ZTV7S7681C4__8S7681C107S7681C7__7S7681C1[9]),  9,16},
  {&(_tg__ZTV8S7681C15__8S7681C107S7681C7__7S7681C1[6]),  6,19},
  {&(_tg__ZTV7S7681C9__8S7681C107S7681C7__7S7681C1[11]),  11,20},
  {&(_tg__ZTV7S7681C8__7S7681C7__7S7681C1[6]),  6,10},
  {&(_tg__ZTV8S7681C10__7S7681C7__7S7681C1[9]),  9,34},
  {&(_tg__ZTV8S7681C11__7S7681C7__7S7681C1[9]),  9,13},
  {&(_tg__ZTV8S7681C12__7S7681C7__7S7681C1[20]),  20,35},
  {&(_tg__ZTV8S7681C13__7S7681C7__7S7681C1[9]),  9,14},
  {&(_tg__ZTV7S7681C3__7S7681C7__7S7681C1[6]),  6,10},
  {&(_tg__ZTV7S7681C4__7S7681C7__7S7681C1[9]),  9,16},
  {&(_tg__ZTV8S7681C158S7681C10__7S7681C7__7S7681C1[6]),  6,19},
  {&(_tg__ZTV7S7681C9__A1__7S7681C7__7S7681C1[11]),  11,20},
  {&(_tg__ZTV8S7681C11__7S7681C1[6]),  6,10},
  {&(_tg__ZTV8S7681C12__8S7681C11__7S7681C1[20]),  20,35},
  {&(_tg__ZTV8S7681C13__8S7681C11__7S7681C1[9]),  9,14},
  {&(_tg__ZTV7S7681C3__8S7681C11__7S7681C1[6]),  6,10},
  {&(_tg__ZTV7S7681C4__8S7681C11__7S7681C1[9]),  9,16},
  {&(_tg__ZTV8S7681C12__7S7681C1[5]),  5,20},
  {&(_tg__ZTV7S7681C28S7681C12__A2__7S7681C1[3]),  3,14},
  {&(_tg__ZTV7S7681C3__7S7681C28S7681C12__A2__7S7681C1[6]),  6,10},
  {&(_tg__ZTV8S7681C13__8S7681C12__7S7681C1[9]),  9,14},
  {&(_tg__ZTV7S7681C3__8S7681C12__7S7681C1[6]),  6,10},
  {&(_tg__ZTV7S7681C4__8S7681C12__7S7681C1[9]),  9,16},
  {&(_tg__ZTV8S7681C13__7S7681C1[4]),  4,9},
  {&(_tg__ZTV7S7681C3__8S7681C13__7S7681C1[6]),  6,10},
  {&(_tg__ZTV7S7681C4__8S7681C13__7S7681C1[9]),  9,16},
  {&(_tg__ZTV8S7681C10__A1__7S7681C1[9]),  9,34},
  {&(_tg__ZTV8S7681C128S7681C10__A2__7S7681C1[5]),  5,20},
  {&(_tg__ZTV7S7681C28S7681C128S7681C10__A4__7S7681C1[3]),  3,14},
  {&(_tg__ZTV7S7681C3__7S7681C28S7681C128S7681C10__A4__7S7681C1[6]),  6,10},
  {&(_tg__ZTV8S7681C13__8S7681C128S7681C10__A2__7S7681C1[9]),  9,14},
  {&(_tg__ZTV7S7681C3__8S7681C128S7681C10__A2__7S7681C1[6]),  6,10},
  {&(_tg__ZTV7S7681C4__8S7681C128S7681C10__A2__7S7681C1[9]),  9,16},
  {&(_tg__ZTV8S7681C158S7681C10__A1__7S7681C1[6]),  6,19},
  {&(_tg__ZTV7S7681C3__8S7681C158S7681C10__A1__7S7681C1[6]),  6,10},
  {&(_tg__ZTV8S7681C13__8S7681C158S7681C10__A1__7S7681C1[9]),  9,14},
  {&(_tg__ZTV7S7681C4__8S7681C158S7681C10__A1__7S7681C1[9]),  9,16},
  {&(_tg__ZTV7S7681C9__8S7681C158S7681C10__A1__7S7681C1[11]),  11,20},
  {&(_tg__ZTV7S7681C8__8S7681C10__A1__7S7681C1[6]),  6,10},
  {&(_tg__ZTV8S7681C11__8S7681C10__A1__7S7681C1[9]),  9,13},
  {&(_tg__ZTV8S7681C12__8S7681C10__A1__7S7681C1[20]),  20,35},
  {&(_tg__ZTV8S7681C13__8S7681C10__A1__7S7681C1[9]),  9,14},
  {&(_tg__ZTV7S7681C3__8S7681C10__A1__7S7681C1[6]),  6,10},
  {&(_tg__ZTV7S7681C4__8S7681C10__A1__7S7681C1[9]),  9,16},
  {&(_tg__ZTV8S7681C15__8S7681C10__A1__7S7681C1[6]),  6,19},
  {&(_tg__ZTV7S7681C9__8S7681C10__A1__7S7681C1[11]),  11,20},
};
extern VTBL_ENTRY _ZTI7S7681C1[];
extern  VTBL_ENTRY _ZTV7S7681C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7681C1[];
static VTBL_ENTRY alt_thunk_names14[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N7S7681C7D0Ev,_ZTv0_n28_N7S7681C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2048_N7S7681C7D0Ev,_ZThn1324_N7S7681C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N7S7681C7D1Ev,_ZTv0_n28_N7S7681C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2048_N7S7681C7D1Ev,_ZThn1324_N7S7681C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S7681C10D0Ev,_ZTv0_n28_N8S7681C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn576_N8S7681C10D0Ev,_ZThn396_N8S7681C10D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn3168_N8S7681C10D0Ev,_ZThn2060_N8S7681C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S7681C10D1Ev,_ZTv0_n28_N8S7681C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn576_N8S7681C10D1Ev,_ZThn396_N8S7681C10D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn3168_N8S7681C10D1Ev,_ZThn2060_N8S7681C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S7681C16D0Ev,_ZTv0_n28_N8S7681C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3200_N8S7681C16D0Ev,_ZThn2076_N8S7681C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S7681C16D1Ev,_ZTv0_n28_N8S7681C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3200_N8S7681C16D1Ev,_ZThn2076_N8S7681C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n200_N8S7681C16D0Ev,_ZTv0_n100_N8S7681C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5216_N8S7681C16D0Ev,_ZThn3344_N8S7681C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n200_N8S7681C16D1Ev,_ZTv0_n100_N8S7681C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5216_N8S7681C16D1Ev,_ZThn3344_N8S7681C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n200_N7S7681C1D0Ev,_ZTv0_n100_N7S7681C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5472_N7S7681C1D0Ev,_ZThn3496_N7S7681C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n200_N7S7681C1D1Ev,_ZTv0_n100_N7S7681C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5472_N7S7681C1D1Ev,_ZThn3496_N7S7681C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N7S7681C1D0Ev,_ZTv0_n28_N7S7681C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3456_N7S7681C1D0Ev,_ZThn2228_N7S7681C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N7S7681C1D1Ev,_ZTv0_n28_N7S7681C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3456_N7S7681C1D1Ev,_ZThn2228_N7S7681C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n152_N7S7681C1D0Ev,_ZTv0_n76_N7S7681C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1408_N7S7681C1D0Ev,_ZThn904_N7S7681C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n152_N7S7681C1D1Ev,_ZTv0_n76_N7S7681C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1408_N7S7681C1D1Ev,_ZThn904_N7S7681C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7681C1 = {  "S7681C1", // class name
  bases_S7681C1, 48,
  &(vtc_S7681C1[0]), // expected_vtbl_contents
  &(vtt_S7681C1[0]), // expected_vtt_contents
  ABISELECT(6016,3864), // object size
  NSPAIRA(_ZTI7S7681C1),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV7S7681C1),469, //virtual function table var
  12, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7681C1),128, //virtual table table var
  48, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names14,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4666C3  {
  virtual  ~S4666C3(); // _ZN7S4666C3D1Ev
  virtual void  v22(); // _ZN7S4666C33v22Ev
  virtual void  v23(); // _ZN7S4666C33v23Ev
  virtual void  v24(); // _ZN7S4666C33v24Ev
  virtual void  v25(); // _ZN7S4666C33v25Ev
  virtual void  v26(); // _ZN7S4666C33v26Ev
  virtual void  v27(); // _ZN7S4666C33v27Ev
  virtual void  v28(); // _ZN7S4666C33v28Ev
  virtual void  v29(); // _ZN7S4666C33v29Ev
  virtual void  v30(); // _ZN7S4666C33v30Ev
  virtual void  v31(); // _ZN7S4666C33v31Ev
  virtual void  v32(); // _ZN7S4666C33v32Ev
  virtual void  v33(); // _ZN7S4666C33v33Ev
  virtual void  v34(); // _ZN7S4666C33v34Ev
  virtual void  v35(); // _ZN7S4666C33v35Ev
  virtual void  v36(); // _ZN7S4666C33v36Ev
  virtual void  v37(); // _ZN7S4666C33v37Ev
  virtual void  v38(); // _ZN7S4666C33v38Ev
  virtual void  v39(); // _ZN7S4666C33v39Ev
  virtual void  v40(); // _ZN7S4666C33v40Ev
  virtual void  v41(); // _ZN7S4666C33v41Ev
  virtual void  v42(); // _ZN7S4666C33v42Ev
  virtual void  v43(); // _ZN7S4666C33v43Ev
  virtual void  v44(); // _ZN7S4666C33v44Ev
  virtual void  v45(); // _ZN7S4666C33v45Ev
  virtual void  v46(); // _ZN7S4666C33v46Ev
  virtual void  v47(); // _ZN7S4666C33v47Ev
  S4666C3(); // tgen
};
//SIG(-1 S4666C3) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26}


 S4666C3 ::~S4666C3(){ note_dtor("S4666C3", this);}
void  S4666C3 ::v22(){vfunc_called(this, "_ZN7S4666C33v22Ev");}
void  S4666C3 ::v23(){vfunc_called(this, "_ZN7S4666C33v23Ev");}
void  S4666C3 ::v24(){vfunc_called(this, "_ZN7S4666C33v24Ev");}
void  S4666C3 ::v25(){vfunc_called(this, "_ZN7S4666C33v25Ev");}
void  S4666C3 ::v26(){vfunc_called(this, "_ZN7S4666C33v26Ev");}
void  S4666C3 ::v27(){vfunc_called(this, "_ZN7S4666C33v27Ev");}
void  S4666C3 ::v28(){vfunc_called(this, "_ZN7S4666C33v28Ev");}
void  S4666C3 ::v29(){vfunc_called(this, "_ZN7S4666C33v29Ev");}
void  S4666C3 ::v30(){vfunc_called(this, "_ZN7S4666C33v30Ev");}
void  S4666C3 ::v31(){vfunc_called(this, "_ZN7S4666C33v31Ev");}
void  S4666C3 ::v32(){vfunc_called(this, "_ZN7S4666C33v32Ev");}
void  S4666C3 ::v33(){vfunc_called(this, "_ZN7S4666C33v33Ev");}
void  S4666C3 ::v34(){vfunc_called(this, "_ZN7S4666C33v34Ev");}
void  S4666C3 ::v35(){vfunc_called(this, "_ZN7S4666C33v35Ev");}
void  S4666C3 ::v36(){vfunc_called(this, "_ZN7S4666C33v36Ev");}
void  S4666C3 ::v37(){vfunc_called(this, "_ZN7S4666C33v37Ev");}
void  S4666C3 ::v38(){vfunc_called(this, "_ZN7S4666C33v38Ev");}
void  S4666C3 ::v39(){vfunc_called(this, "_ZN7S4666C33v39Ev");}
void  S4666C3 ::v40(){vfunc_called(this, "_ZN7S4666C33v40Ev");}
void  S4666C3 ::v41(){vfunc_called(this, "_ZN7S4666C33v41Ev");}
void  S4666C3 ::v42(){vfunc_called(this, "_ZN7S4666C33v42Ev");}
void  S4666C3 ::v43(){vfunc_called(this, "_ZN7S4666C33v43Ev");}
void  S4666C3 ::v44(){vfunc_called(this, "_ZN7S4666C33v44Ev");}
void  S4666C3 ::v45(){vfunc_called(this, "_ZN7S4666C33v45Ev");}
void  S4666C3 ::v46(){vfunc_called(this, "_ZN7S4666C33v46Ev");}
void  S4666C3 ::v47(){vfunc_called(this, "_ZN7S4666C33v47Ev");}
S4666C3 ::S4666C3(){ note_ctor("S4666C3", this);} // tgen

static void Test_S4666C3()
{
  extern Class_Descriptor cd_S4666C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S4666C3, buf);
    S4666C3 *dp, &lv = *(dp=new (buf) S4666C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S4666C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4666C3)");
    test_class_info(&lv, &cd_S4666C3);
    dp->~S4666C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4666C3(Test_S4666C3, "S4666C3", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S4666C3C1Ev();
extern void _ZN7S4666C3D1Ev();
Name_Map name_map_S4666C3[] = {
  NSPAIR(_ZN7S4666C3C1Ev),
  NSPAIR(_ZN7S4666C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4666C3[];
extern void _ZN7S4666C3D1Ev();
extern void _ZN7S4666C3D0Ev();
extern void _ZN7S4666C33v22Ev();
extern void _ZN7S4666C33v23Ev();
extern void _ZN7S4666C33v24Ev();
extern void _ZN7S4666C33v25Ev();
extern void _ZN7S4666C33v26Ev();
extern void _ZN7S4666C33v27Ev();
extern void _ZN7S4666C33v28Ev();
extern void _ZN7S4666C33v29Ev();
extern void _ZN7S4666C33v30Ev();
extern void _ZN7S4666C33v31Ev();
extern void _ZN7S4666C33v32Ev();
extern void _ZN7S4666C33v33Ev();
extern void _ZN7S4666C33v34Ev();
extern void _ZN7S4666C33v35Ev();
extern void _ZN7S4666C33v36Ev();
extern void _ZN7S4666C33v37Ev();
extern void _ZN7S4666C33v38Ev();
extern void _ZN7S4666C33v39Ev();
extern void _ZN7S4666C33v40Ev();
extern void _ZN7S4666C33v41Ev();
extern void _ZN7S4666C33v42Ev();
extern void _ZN7S4666C33v43Ev();
extern void _ZN7S4666C33v44Ev();
extern void _ZN7S4666C33v45Ev();
extern void _ZN7S4666C33v46Ev();
extern void _ZN7S4666C33v47Ev();
static  VTBL_ENTRY vtc_S4666C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4666C3[0]),
  (VTBL_ENTRY)&_ZN7S4666C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4666C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4666C33v22Ev,
  (VTBL_ENTRY)&_ZN7S4666C33v23Ev,
  (VTBL_ENTRY)&_ZN7S4666C33v24Ev,
  (VTBL_ENTRY)&_ZN7S4666C33v25Ev,
  (VTBL_ENTRY)&_ZN7S4666C33v26Ev,
  (VTBL_ENTRY)&_ZN7S4666C33v27Ev,
  (VTBL_ENTRY)&_ZN7S4666C33v28Ev,
  (VTBL_ENTRY)&_ZN7S4666C33v29Ev,
  (VTBL_ENTRY)&_ZN7S4666C33v30Ev,
  (VTBL_ENTRY)&_ZN7S4666C33v31Ev,
  (VTBL_ENTRY)&_ZN7S4666C33v32Ev,
  (VTBL_ENTRY)&_ZN7S4666C33v33Ev,
  (VTBL_ENTRY)&_ZN7S4666C33v34Ev,
  (VTBL_ENTRY)&_ZN7S4666C33v35Ev,
  (VTBL_ENTRY)&_ZN7S4666C33v36Ev,
  (VTBL_ENTRY)&_ZN7S4666C33v37Ev,
  (VTBL_ENTRY)&_ZN7S4666C33v38Ev,
  (VTBL_ENTRY)&_ZN7S4666C33v39Ev,
  (VTBL_ENTRY)&_ZN7S4666C33v40Ev,
  (VTBL_ENTRY)&_ZN7S4666C33v41Ev,
  (VTBL_ENTRY)&_ZN7S4666C33v42Ev,
  (VTBL_ENTRY)&_ZN7S4666C33v43Ev,
  (VTBL_ENTRY)&_ZN7S4666C33v44Ev,
  (VTBL_ENTRY)&_ZN7S4666C33v45Ev,
  (VTBL_ENTRY)&_ZN7S4666C33v46Ev,
  (VTBL_ENTRY)&_ZN7S4666C33v47Ev,
};
extern VTBL_ENTRY _ZTI7S4666C3[];
extern  VTBL_ENTRY _ZTV7S4666C3[];
Class_Descriptor cd_S4666C3 = {  "S4666C3", // class name
  0,0,//no base classes
  &(vtc_S4666C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S4666C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4666C3),30, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4666C2  : S4666C3 {
  void *s4666c2f0[2];
  int s4666c2f1[4];
  ::S2423C5_nt s4666c2f2;
  void *s4666c2f3;
  char s4666c2f4;
  void *s4666c2f5;
  virtual  ~S4666C2(); // _ZN7S4666C2D1Ev
  virtual void  v48(); // _ZN7S4666C23v48Ev
  virtual void  v49(); // _ZN7S4666C23v49Ev
  virtual void  v50(); // _ZN7S4666C23v50Ev
  virtual void  v51(); // _ZN7S4666C23v51Ev
  virtual void  v52(); // _ZN7S4666C23v52Ev
  virtual void  v53(); // _ZN7S4666C23v53Ev
  virtual void  v54(); // _ZN7S4666C23v54Ev
  virtual void  v55(); // _ZN7S4666C23v55Ev
  virtual void  v56(); // _ZN7S4666C23v56Ev
  virtual void  v57(); // _ZN7S4666C23v57Ev
  virtual void  v58(); // _ZN7S4666C23v58Ev
  virtual void  v59(); // _ZN7S4666C23v59Ev
  virtual void  v60(); // _ZN7S4666C23v60Ev
  virtual void  v61(); // _ZN7S4666C23v61Ev
  S4666C2(); // tgen
};
//SIG(-1 S4666C2) C1{ BC2{ vd v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 Fp[2] Fi[4] FC3{ Fi[2]} Fp Fc Fp}


 S4666C2 ::~S4666C2(){ note_dtor("S4666C2", this);}
void  S4666C2 ::v48(){vfunc_called(this, "_ZN7S4666C23v48Ev");}
void  S4666C2 ::v49(){vfunc_called(this, "_ZN7S4666C23v49Ev");}
void  S4666C2 ::v50(){vfunc_called(this, "_ZN7S4666C23v50Ev");}
void  S4666C2 ::v51(){vfunc_called(this, "_ZN7S4666C23v51Ev");}
void  S4666C2 ::v52(){vfunc_called(this, "_ZN7S4666C23v52Ev");}
void  S4666C2 ::v53(){vfunc_called(this, "_ZN7S4666C23v53Ev");}
void  S4666C2 ::v54(){vfunc_called(this, "_ZN7S4666C23v54Ev");}
void  S4666C2 ::v55(){vfunc_called(this, "_ZN7S4666C23v55Ev");}
void  S4666C2 ::v56(){vfunc_called(this, "_ZN7S4666C23v56Ev");}
void  S4666C2 ::v57(){vfunc_called(this, "_ZN7S4666C23v57Ev");}
void  S4666C2 ::v58(){vfunc_called(this, "_ZN7S4666C23v58Ev");}
void  S4666C2 ::v59(){vfunc_called(this, "_ZN7S4666C23v59Ev");}
void  S4666C2 ::v60(){vfunc_called(this, "_ZN7S4666C23v60Ev");}
void  S4666C2 ::v61(){vfunc_called(this, "_ZN7S4666C23v61Ev");}
S4666C2 ::S4666C2(){ note_ctor("S4666C2", this);} // tgen

static void Test_S4666C2()
{
  extern Class_Descriptor cd_S4666C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,13)];
    init_test(&cd_S4666C2, buf);
    S4666C2 *dp, &lv = *(dp=new (buf) S4666C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,48), "sizeof(S4666C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4666C2)");
    check_base_class_offset(lv, (S4666C3*), 0, "S4666C2");
    check_field_offset(lv, s4666c2f0, ABISELECT(8,4), "S4666C2.s4666c2f0");
    check_field_offset(lv, s4666c2f1, ABISELECT(24,12), "S4666C2.s4666c2f1");
    check_field_offset(lv, s4666c2f2, ABISELECT(40,28), "S4666C2.s4666c2f2");
    check_field_offset(lv, s4666c2f3, ABISELECT(48,36), "S4666C2.s4666c2f3");
    check_field_offset(lv, s4666c2f4, ABISELECT(56,40), "S4666C2.s4666c2f4");
    check_field_offset(lv, s4666c2f5, ABISELECT(64,44), "S4666C2.s4666c2f5");
    test_class_info(&lv, &cd_S4666C2);
    dp->~S4666C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4666C2(Test_S4666C2, "S4666C2", ABISELECT(72,48));

#else // __cplusplus

extern void _ZN7S4666C2C1Ev();
extern void _ZN7S4666C2D1Ev();
Name_Map name_map_S4666C2[] = {
  NSPAIR(_ZN7S4666C2C1Ev),
  NSPAIR(_ZN7S4666C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4666C3;
extern VTBL_ENTRY _ZTI7S4666C3[];
extern  VTBL_ENTRY _ZTV7S4666C3[];
static Base_Class bases_S4666C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4666C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4666C2[];
extern void _ZN7S4666C2D1Ev();
extern void _ZN7S4666C2D0Ev();
extern void _ZN7S4666C33v22Ev();
extern void _ZN7S4666C33v23Ev();
extern void _ZN7S4666C33v24Ev();
extern void _ZN7S4666C33v25Ev();
extern void _ZN7S4666C33v26Ev();
extern void _ZN7S4666C33v27Ev();
extern void _ZN7S4666C33v28Ev();
extern void _ZN7S4666C33v29Ev();
extern void _ZN7S4666C33v30Ev();
extern void _ZN7S4666C33v31Ev();
extern void _ZN7S4666C33v32Ev();
extern void _ZN7S4666C33v33Ev();
extern void _ZN7S4666C33v34Ev();
extern void _ZN7S4666C33v35Ev();
extern void _ZN7S4666C33v36Ev();
extern void _ZN7S4666C33v37Ev();
extern void _ZN7S4666C33v38Ev();
extern void _ZN7S4666C33v39Ev();
extern void _ZN7S4666C33v40Ev();
extern void _ZN7S4666C33v41Ev();
extern void _ZN7S4666C33v42Ev();
extern void _ZN7S4666C33v43Ev();
extern void _ZN7S4666C33v44Ev();
extern void _ZN7S4666C33v45Ev();
extern void _ZN7S4666C33v46Ev();
extern void _ZN7S4666C33v47Ev();
extern void _ZN7S4666C23v48Ev();
extern void _ZN7S4666C23v49Ev();
extern void _ZN7S4666C23v50Ev();
extern void _ZN7S4666C23v51Ev();
extern void _ZN7S4666C23v52Ev();
extern void _ZN7S4666C23v53Ev();
extern void _ZN7S4666C23v54Ev();
extern void _ZN7S4666C23v55Ev();
extern void _ZN7S4666C23v56Ev();
extern void _ZN7S4666C23v57Ev();
extern void _ZN7S4666C23v58Ev();
extern void _ZN7S4666C23v59Ev();
extern void _ZN7S4666C23v60Ev();
extern void _ZN7S4666C23v61Ev();
static  VTBL_ENTRY vtc_S4666C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4666C2[0]),
  (VTBL_ENTRY)&_ZN7S4666C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4666C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4666C33v22Ev,
  (VTBL_ENTRY)&_ZN7S4666C33v23Ev,
  (VTBL_ENTRY)&_ZN7S4666C33v24Ev,
  (VTBL_ENTRY)&_ZN7S4666C33v25Ev,
  (VTBL_ENTRY)&_ZN7S4666C33v26Ev,
  (VTBL_ENTRY)&_ZN7S4666C33v27Ev,
  (VTBL_ENTRY)&_ZN7S4666C33v28Ev,
  (VTBL_ENTRY)&_ZN7S4666C33v29Ev,
  (VTBL_ENTRY)&_ZN7S4666C33v30Ev,
  (VTBL_ENTRY)&_ZN7S4666C33v31Ev,
  (VTBL_ENTRY)&_ZN7S4666C33v32Ev,
  (VTBL_ENTRY)&_ZN7S4666C33v33Ev,
  (VTBL_ENTRY)&_ZN7S4666C33v34Ev,
  (VTBL_ENTRY)&_ZN7S4666C33v35Ev,
  (VTBL_ENTRY)&_ZN7S4666C33v36Ev,
  (VTBL_ENTRY)&_ZN7S4666C33v37Ev,
  (VTBL_ENTRY)&_ZN7S4666C33v38Ev,
  (VTBL_ENTRY)&_ZN7S4666C33v39Ev,
  (VTBL_ENTRY)&_ZN7S4666C33v40Ev,
  (VTBL_ENTRY)&_ZN7S4666C33v41Ev,
  (VTBL_ENTRY)&_ZN7S4666C33v42Ev,
  (VTBL_ENTRY)&_ZN7S4666C33v43Ev,
  (VTBL_ENTRY)&_ZN7S4666C33v44Ev,
  (VTBL_ENTRY)&_ZN7S4666C33v45Ev,
  (VTBL_ENTRY)&_ZN7S4666C33v46Ev,
  (VTBL_ENTRY)&_ZN7S4666C33v47Ev,
  (VTBL_ENTRY)&_ZN7S4666C23v48Ev,
  (VTBL_ENTRY)&_ZN7S4666C23v49Ev,
  (VTBL_ENTRY)&_ZN7S4666C23v50Ev,
  (VTBL_ENTRY)&_ZN7S4666C23v51Ev,
  (VTBL_ENTRY)&_ZN7S4666C23v52Ev,
  (VTBL_ENTRY)&_ZN7S4666C23v53Ev,
  (VTBL_ENTRY)&_ZN7S4666C23v54Ev,
  (VTBL_ENTRY)&_ZN7S4666C23v55Ev,
  (VTBL_ENTRY)&_ZN7S4666C23v56Ev,
  (VTBL_ENTRY)&_ZN7S4666C23v57Ev,
  (VTBL_ENTRY)&_ZN7S4666C23v58Ev,
  (VTBL_ENTRY)&_ZN7S4666C23v59Ev,
  (VTBL_ENTRY)&_ZN7S4666C23v60Ev,
  (VTBL_ENTRY)&_ZN7S4666C23v61Ev,
};
extern VTBL_ENTRY _ZTI7S4666C2[];
extern  VTBL_ENTRY _ZTV7S4666C2[];
Class_Descriptor cd_S4666C2 = {  "S4666C2", // class name
  bases_S4666C2, 1,
  &(vtc_S4666C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,48), // object size
  NSPAIRA(_ZTI7S4666C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4666C2),44, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4666C5  {
  void *s4666c5f0;
  char s4666c5f1[32];
  int s4666c5f2[6];
  char s4666c5f3;
  int s4666c5f4[2];
  virtual  ~S4666C5(); // _ZN7S4666C5D1Ev
  virtual void  v62(); // _ZN7S4666C53v62Ev
  virtual void  v63(); // _ZN7S4666C53v63Ev
  S4666C5(); // tgen
};
//SIG(-1 S4666C5) C1{ vd v1 v2 Fp Fc[32] Fi[6] Fc Fi[2]}


 S4666C5 ::~S4666C5(){ note_dtor("S4666C5", this);}
void  S4666C5 ::v62(){vfunc_called(this, "_ZN7S4666C53v62Ev");}
void  S4666C5 ::v63(){vfunc_called(this, "_ZN7S4666C53v63Ev");}
S4666C5 ::S4666C5(){ note_ctor("S4666C5", this);} // tgen

static void Test_S4666C5()
{
  extern Class_Descriptor cd_S4666C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(12,20)];
    init_test(&cd_S4666C5, buf);
    S4666C5 *dp, &lv = *(dp=new (buf) S4666C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(88,76), "sizeof(S4666C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4666C5)");
    check_field_offset(lv, s4666c5f0, ABISELECT(8,4), "S4666C5.s4666c5f0");
    check_field_offset(lv, s4666c5f1, ABISELECT(16,8), "S4666C5.s4666c5f1");
    check_field_offset(lv, s4666c5f2, ABISELECT(48,40), "S4666C5.s4666c5f2");
    check_field_offset(lv, s4666c5f3, ABISELECT(72,64), "S4666C5.s4666c5f3");
    check_field_offset(lv, s4666c5f4, ABISELECT(76,68), "S4666C5.s4666c5f4");
    test_class_info(&lv, &cd_S4666C5);
    dp->~S4666C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4666C5(Test_S4666C5, "S4666C5", ABISELECT(88,76));

#else // __cplusplus

extern void _ZN7S4666C5C1Ev();
extern void _ZN7S4666C5D1Ev();
Name_Map name_map_S4666C5[] = {
  NSPAIR(_ZN7S4666C5C1Ev),
  NSPAIR(_ZN7S4666C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4666C5[];
extern void _ZN7S4666C5D1Ev();
extern void _ZN7S4666C5D0Ev();
extern void _ZN7S4666C53v62Ev();
extern void _ZN7S4666C53v63Ev();
static  VTBL_ENTRY vtc_S4666C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4666C5[0]),
  (VTBL_ENTRY)&_ZN7S4666C5D1Ev,
  (VTBL_ENTRY)&_ZN7S4666C5D0Ev,
  (VTBL_ENTRY)&_ZN7S4666C53v62Ev,
  (VTBL_ENTRY)&_ZN7S4666C53v63Ev,
};
extern VTBL_ENTRY _ZTI7S4666C5[];
extern  VTBL_ENTRY _ZTV7S4666C5[];
Class_Descriptor cd_S4666C5 = {  "S4666C5", // class name
  0,0,//no base classes
  &(vtc_S4666C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(88,76), // object size
  NSPAIRA(_ZTI7S4666C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4666C5),6, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4666C6_nt  {
  virtual  ~S4666C6_nt(); // _ZN10S4666C6_ntD1Ev
  virtual void  v64(); // _ZN10S4666C6_nt3v64Ev
  virtual void  v65(); // _ZN10S4666C6_nt3v65Ev
  virtual void  v66(); // _ZN10S4666C6_nt3v66Ev
  virtual void  v67(); // _ZN10S4666C6_nt3v67Ev
  virtual void  v68(); // _ZN10S4666C6_nt3v68Ev
  virtual void  v69(); // _ZN10S4666C6_nt3v69Ev
  S4666C6_nt(); // tgen
};
//SIG(-1 S4666C6_nt) C1{ vd v1 v2 v3 v4 v5 v6}


 S4666C6_nt ::~S4666C6_nt(){ note_dtor("S4666C6_nt", this);}
void  S4666C6_nt ::v64(){vfunc_called(this, "_ZN10S4666C6_nt3v64Ev");}
void  S4666C6_nt ::v65(){vfunc_called(this, "_ZN10S4666C6_nt3v65Ev");}
void  S4666C6_nt ::v66(){vfunc_called(this, "_ZN10S4666C6_nt3v66Ev");}
void  S4666C6_nt ::v67(){vfunc_called(this, "_ZN10S4666C6_nt3v67Ev");}
void  S4666C6_nt ::v68(){vfunc_called(this, "_ZN10S4666C6_nt3v68Ev");}
void  S4666C6_nt ::v69(){vfunc_called(this, "_ZN10S4666C6_nt3v69Ev");}
S4666C6_nt ::S4666C6_nt(){ note_ctor("S4666C6_nt", this);} // tgen

//skip512 S4666C6_nt

#else // __cplusplus

extern void _ZN10S4666C6_ntC1Ev();
extern void _ZN10S4666C6_ntD1Ev();
Name_Map name_map_S4666C6_nt[] = {
  NSPAIR(_ZN10S4666C6_ntC1Ev),
  NSPAIR(_ZN10S4666C6_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S4666C6_nt[];
extern void _ZN10S4666C6_ntD1Ev();
extern void _ZN10S4666C6_ntD0Ev();
extern void _ZN10S4666C6_nt3v64Ev();
extern void _ZN10S4666C6_nt3v65Ev();
extern void _ZN10S4666C6_nt3v66Ev();
extern void _ZN10S4666C6_nt3v67Ev();
extern void _ZN10S4666C6_nt3v68Ev();
extern void _ZN10S4666C6_nt3v69Ev();
static  VTBL_ENTRY vtc_S4666C6_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S4666C6_nt[0]),
  (VTBL_ENTRY)&_ZN10S4666C6_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S4666C6_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S4666C6_nt3v64Ev,
  (VTBL_ENTRY)&_ZN10S4666C6_nt3v65Ev,
  (VTBL_ENTRY)&_ZN10S4666C6_nt3v66Ev,
  (VTBL_ENTRY)&_ZN10S4666C6_nt3v67Ev,
  (VTBL_ENTRY)&_ZN10S4666C6_nt3v68Ev,
  (VTBL_ENTRY)&_ZN10S4666C6_nt3v69Ev,
};
extern VTBL_ENTRY _ZTI10S4666C6_nt[];
VTBL_ENTRY *P__ZTI10S4666C6_nt = _ZTI10S4666C6_nt; 
extern  VTBL_ENTRY _ZTV10S4666C6_nt[];
Class_Descriptor cd_S4666C6_nt = {  "S4666C6_nt", // class name
  0,0,//no base classes
  &(vtc_S4666C6_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI10S4666C6_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S4666C6_nt),10, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4666C7_nt  {
  virtual  ~S4666C7_nt(); // _ZN10S4666C7_ntD1Ev
  virtual void  v70(); // _ZN10S4666C7_nt3v70Ev
  virtual void  v71(); // _ZN10S4666C7_nt3v71Ev
  virtual void  v72(); // _ZN10S4666C7_nt3v72Ev
  S4666C7_nt(); // tgen
};
//SIG(-1 S4666C7_nt) C1{ vd v1 v2 v3}


 S4666C7_nt ::~S4666C7_nt(){ note_dtor("S4666C7_nt", this);}
void  S4666C7_nt ::v70(){vfunc_called(this, "_ZN10S4666C7_nt3v70Ev");}
void  S4666C7_nt ::v71(){vfunc_called(this, "_ZN10S4666C7_nt3v71Ev");}
void  S4666C7_nt ::v72(){vfunc_called(this, "_ZN10S4666C7_nt3v72Ev");}
S4666C7_nt ::S4666C7_nt(){ note_ctor("S4666C7_nt", this);} // tgen

//skip512 S4666C7_nt

#else // __cplusplus

extern void _ZN10S4666C7_ntC1Ev();
extern void _ZN10S4666C7_ntD1Ev();
Name_Map name_map_S4666C7_nt[] = {
  NSPAIR(_ZN10S4666C7_ntC1Ev),
  NSPAIR(_ZN10S4666C7_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S4666C7_nt[];
extern void _ZN10S4666C7_ntD1Ev();
extern void _ZN10S4666C7_ntD0Ev();
extern void _ZN10S4666C7_nt3v70Ev();
extern void _ZN10S4666C7_nt3v71Ev();
extern void _ZN10S4666C7_nt3v72Ev();
static  VTBL_ENTRY vtc_S4666C7_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S4666C7_nt[0]),
  (VTBL_ENTRY)&_ZN10S4666C7_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S4666C7_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S4666C7_nt3v70Ev,
  (VTBL_ENTRY)&_ZN10S4666C7_nt3v71Ev,
  (VTBL_ENTRY)&_ZN10S4666C7_nt3v72Ev,
};
extern VTBL_ENTRY _ZTI10S4666C7_nt[];
VTBL_ENTRY *P__ZTI10S4666C7_nt = _ZTI10S4666C7_nt; 
extern  VTBL_ENTRY _ZTV10S4666C7_nt[];
Class_Descriptor cd_S4666C7_nt = {  "S4666C7_nt", // class name
  0,0,//no base classes
  &(vtc_S4666C7_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI10S4666C7_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S4666C7_nt),7, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4666C9_nt  {
  void *s4666c9f0;
  int s4666c9f1;
  void  mf4666c9(); // _ZN10S4666C9_nt8mf4666c9Ev
};
//SIG(-1 S4666C9_nt) C1{ m Fp Fi}


void  S4666C9_nt ::mf4666c9(){}

//skip512 S4666C9_nt

#else // __cplusplus

extern VTBL_ENTRY _ZTI10S4666C9_nt[];
VTBL_ENTRY *P__ZTI10S4666C9_nt = _ZTI10S4666C9_nt; 
Class_Descriptor cd_S4666C9_nt = {  "S4666C9_nt", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI10S4666C9_nt),ABISELECT(16,8), //typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4666C10_nt  {
  int s4666c10f0;
  void *s4666c10f1;
};
//SIG(-1 S4666C10_nt) C1{ Fi Fp}



//skip512 S4666C10_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4666C12  {
  long s4666c12f0[3];
  void *s4666c12f1;
  short s4666c12f2[13];
  char s4666c12f3[6];
};
//SIG(-1 S4666C12) C1{ Fl[3] Fp Fs[13] Fc[6]}



static void Test_S4666C12()
{
  {
    init_simple_test("S4666C12");
    S4666C12 lv;
    check2(sizeof(lv), ABISELECT(64,48), "sizeof(S4666C12)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4666C12)");
    check_field_offset(lv, s4666c12f0, 0, "S4666C12.s4666c12f0");
    check_field_offset(lv, s4666c12f1, ABISELECT(24,12), "S4666C12.s4666c12f1");
    check_field_offset(lv, s4666c12f2, ABISELECT(32,16), "S4666C12.s4666c12f2");
    check_field_offset(lv, s4666c12f3, ABISELECT(58,42), "S4666C12.s4666c12f3");
  }
}
static Arrange_To_Call_Me vS4666C12(Test_S4666C12, "S4666C12", ABISELECT(64,48));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4666C13_nt  {
  __tsi64 s4666c13f0;
};
//SIG(-1 S4666C13_nt) C1{ FL}



//skip512 S4666C13_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4666C14  {
  long s4666c14f0;
  __tsi64 s4666c14f1;
  long s4666c14f2;
  int s4666c14f3;
  long s4666c14f4[3];
  __tsi64 s4666c14f5[2];
  long s4666c14f6;
};
//SIG(-1 S4666C14) C1{ Fl FL Fl Fi Fl[3] FL[2] Fl}



static void Test_S4666C14()
{
  {
    init_simple_test("S4666C14");
    S4666C14 lv;
    check2(sizeof(lv), ABISELECT(80,52), "sizeof(S4666C14)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4666C14)");
    check_field_offset(lv, s4666c14f0, 0, "S4666C14.s4666c14f0");
    check_field_offset(lv, s4666c14f1, ABISELECT(8,4), "S4666C14.s4666c14f1");
    check_field_offset(lv, s4666c14f2, ABISELECT(16,12), "S4666C14.s4666c14f2");
    check_field_offset(lv, s4666c14f3, ABISELECT(24,16), "S4666C14.s4666c14f3");
    check_field_offset(lv, s4666c14f4, ABISELECT(32,20), "S4666C14.s4666c14f4");
    check_field_offset(lv, s4666c14f5, ABISELECT(56,32), "S4666C14.s4666c14f5");
    check_field_offset(lv, s4666c14f6, ABISELECT(72,48), "S4666C14.s4666c14f6");
  }
}
static Arrange_To_Call_Me vS4666C14(Test_S4666C14, "S4666C14", ABISELECT(80,52));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4666C1  : S4666C2 , S4666C5 , S4666C6_nt , S4666C7_nt , S836C39 , S4666C9_nt {
  void *s4666c1f0[2];
  long s4666c1f1;
  ::S4666C10_nt s4666c1f2;
  ::S4666C10_nt s4666c1f3;
  __tsi64 s4666c1f4;
  int s4666c1f5;
  long s4666c1f6;
  ::S4666C12 s4666c1f7;
  short s4666c1f8[2];
  __tsi64 s4666c1f9[5];
  ::S4666C13_nt s4666c1f10;
  int s4666c1f11[2];
  char s4666c1f12;
  int s4666c1f13[2];
  void *s4666c1f14;
  ::S4666C14 s4666c1f15;
  void *s4666c1f16;
  ::S836C29 s4666c1f17;
  void *s4666c1f18[2];
  char s4666c1f19;
  void *s4666c1f20[3];
  virtual  ~S4666C1(); // _ZN7S4666C1D1Ev
  virtual void  v1(); // _ZN7S4666C12v1Ev
  virtual void  v2(); // _ZN7S4666C12v2Ev
  virtual void  v3(); // _ZN7S4666C12v3Ev
  virtual void  v4(); // _ZN7S4666C12v4Ev
  virtual void  v5(); // _ZN7S4666C12v5Ev
  virtual void  v6(); // _ZN7S4666C12v6Ev
  virtual void  v7(); // _ZN7S4666C12v7Ev
  virtual void  v8(); // _ZN7S4666C12v8Ev
  virtual void  v9(); // _ZN7S4666C12v9Ev
  virtual void  v10(); // _ZN7S4666C13v10Ev
  virtual void  v11(); // _ZN7S4666C13v11Ev
  virtual void  v12(); // _ZN7S4666C13v12Ev
  virtual void  v13(); // _ZN7S4666C13v13Ev
  virtual void  v14(); // _ZN7S4666C13v14Ev
  virtual void  v15(); // _ZN7S4666C13v15Ev
  virtual void  v16(); // _ZN7S4666C13v16Ev
  virtual void  v17(); // _ZN7S4666C13v17Ev
  virtual void  v18(); // _ZN7S4666C13v18Ev
  virtual void  v19(); // _ZN7S4666C13v19Ev
  virtual void  v20(); // _ZN7S4666C13v20Ev
  virtual void  v21(); // _ZN7S4666C13v21Ev
  S4666C1(); // tgen
};
//SIG(1 S4666C1) C1{ BC2{ BC3{ vd v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47} vd v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 Fp[2] Fi[4] FC4{ Fi[2]} Fp Fc Fp} BC5{ vd v62 v63 Fp Fc[32] Fi[6] Fc Fi[2]} BC6{ vd v64 v65 v66 v67 v68 v69} BC7{ vd v70 v71 v72} BC8{ m} BC9{ m Fp Fi} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 Fp[2] Fl FC10{ Fi Fp} FC10 FL Fi Fl FC11{ Fl[3] Fp Fs[13] Fc[6]} Fs[2] FL[5] FC12{ FL} Fi[2] Fc Fi[2] Fp FC13{ Fl FL Fl Fi Fl[3] FL[2] Fl} Fp FC14{ m} Fp[2] Fc Fp[3]}


 S4666C1 ::~S4666C1(){ note_dtor("S4666C1", this);}
void  S4666C1 ::v1(){vfunc_called(this, "_ZN7S4666C12v1Ev");}
void  S4666C1 ::v2(){vfunc_called(this, "_ZN7S4666C12v2Ev");}
void  S4666C1 ::v3(){vfunc_called(this, "_ZN7S4666C12v3Ev");}
void  S4666C1 ::v4(){vfunc_called(this, "_ZN7S4666C12v4Ev");}
void  S4666C1 ::v5(){vfunc_called(this, "_ZN7S4666C12v5Ev");}
void  S4666C1 ::v6(){vfunc_called(this, "_ZN7S4666C12v6Ev");}
void  S4666C1 ::v7(){vfunc_called(this, "_ZN7S4666C12v7Ev");}
void  S4666C1 ::v8(){vfunc_called(this, "_ZN7S4666C12v8Ev");}
void  S4666C1 ::v9(){vfunc_called(this, "_ZN7S4666C12v9Ev");}
void  S4666C1 ::v10(){vfunc_called(this, "_ZN7S4666C13v10Ev");}
void  S4666C1 ::v11(){vfunc_called(this, "_ZN7S4666C13v11Ev");}
void  S4666C1 ::v12(){vfunc_called(this, "_ZN7S4666C13v12Ev");}
void  S4666C1 ::v13(){vfunc_called(this, "_ZN7S4666C13v13Ev");}
void  S4666C1 ::v14(){vfunc_called(this, "_ZN7S4666C13v14Ev");}
void  S4666C1 ::v15(){vfunc_called(this, "_ZN7S4666C13v15Ev");}
void  S4666C1 ::v16(){vfunc_called(this, "_ZN7S4666C13v16Ev");}
void  S4666C1 ::v17(){vfunc_called(this, "_ZN7S4666C13v17Ev");}
void  S4666C1 ::v18(){vfunc_called(this, "_ZN7S4666C13v18Ev");}
void  S4666C1 ::v19(){vfunc_called(this, "_ZN7S4666C13v19Ev");}
void  S4666C1 ::v20(){vfunc_called(this, "_ZN7S4666C13v20Ev");}
void  S4666C1 ::v21(){vfunc_called(this, "_ZN7S4666C13v21Ev");}
S4666C1 ::S4666C1(){ note_ctor("S4666C1", this);} // tgen

static void Test_S4666C1()
{
  extern Class_Descriptor cd_S4666C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(72,99)];
    init_test(&cd_S4666C1, buf);
    S4666C1 *dp, &lv = *(dp=new (buf) S4666C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(568,392), "sizeof(S4666C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4666C1)");
    check_base_class_offset(lv, (S4666C3*)(S4666C2*), 0, "S4666C1");
    check_base_class_offset(lv, (S4666C2*), 0, "S4666C1");
    check_base_class_offset(lv, (S4666C5*), ABISELECT(72,48), "S4666C1");
    check_base_class_offset(lv, (S4666C6_nt*), ABISELECT(160,124), "S4666C1");
    check_base_class_offset(lv, (S4666C7_nt*), ABISELECT(168,128), "S4666C1");
    check_base_class_offset(lv, (S836C39*), 0, "S4666C1");
    check_base_class_offset(lv, (S4666C9_nt*), ABISELECT(176,132), "S4666C1");
    check_field_offset(lv, s4666c1f0, ABISELECT(192,140), "S4666C1.s4666c1f0");
    check_field_offset(lv, s4666c1f1, ABISELECT(208,148), "S4666C1.s4666c1f1");
    check_field_offset(lv, s4666c1f2, ABISELECT(216,152), "S4666C1.s4666c1f2");
    check_field_offset(lv, s4666c1f3, ABISELECT(232,160), "S4666C1.s4666c1f3");
    check_field_offset(lv, s4666c1f4, ABISELECT(248,168), "S4666C1.s4666c1f4");
    check_field_offset(lv, s4666c1f5, ABISELECT(256,176), "S4666C1.s4666c1f5");
    check_field_offset(lv, s4666c1f6, ABISELECT(264,180), "S4666C1.s4666c1f6");
    check_field_offset(lv, s4666c1f7, ABISELECT(272,184), "S4666C1.s4666c1f7");
    check_field_offset(lv, s4666c1f8, ABISELECT(336,232), "S4666C1.s4666c1f8");
    check_field_offset(lv, s4666c1f9, ABISELECT(344,236), "S4666C1.s4666c1f9");
    check_field_offset(lv, s4666c1f10, ABISELECT(384,276), "S4666C1.s4666c1f10");
    check_field_offset(lv, s4666c1f11, ABISELECT(392,284), "S4666C1.s4666c1f11");
    check_field_offset(lv, s4666c1f12, ABISELECT(400,292), "S4666C1.s4666c1f12");
    check_field_offset(lv, s4666c1f13, ABISELECT(404,296), "S4666C1.s4666c1f13");
    check_field_offset(lv, s4666c1f14, ABISELECT(416,304), "S4666C1.s4666c1f14");
    check_field_offset(lv, s4666c1f15, ABISELECT(424,308), "S4666C1.s4666c1f15");
    check_field_offset(lv, s4666c1f16, ABISELECT(504,360), "S4666C1.s4666c1f16");
    check_field_offset(lv, s4666c1f17, ABISELECT(512,364), "S4666C1.s4666c1f17");
    check_field_offset(lv, s4666c1f18, ABISELECT(520,368), "S4666C1.s4666c1f18");
    check_field_offset(lv, s4666c1f19, ABISELECT(536,376), "S4666C1.s4666c1f19");
    check_field_offset(lv, s4666c1f20, ABISELECT(544,380), "S4666C1.s4666c1f20");
    test_class_info(&lv, &cd_S4666C1);
    dp->~S4666C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4666C1(Test_S4666C1, "S4666C1", ABISELECT(568,392));

#else // __cplusplus

extern void _ZN7S4666C1C1Ev();
extern void _ZN7S4666C1D1Ev();
Name_Map name_map_S4666C1[] = {
  NSPAIR(_ZN7S4666C1C1Ev),
  NSPAIR(_ZN7S4666C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4666C3;
extern VTBL_ENTRY _ZTI7S4666C3[];
extern  VTBL_ENTRY _ZTV7S4666C3[];
extern Class_Descriptor cd_S4666C2;
extern VTBL_ENTRY _ZTI7S4666C2[];
extern  VTBL_ENTRY _ZTV7S4666C2[];
extern Class_Descriptor cd_S4666C5;
extern VTBL_ENTRY _ZTI7S4666C5[];
extern  VTBL_ENTRY _ZTV7S4666C5[];
extern Class_Descriptor cd_S4666C6_nt;
extern VTBL_ENTRY _ZTI10S4666C6_nt[];
extern  VTBL_ENTRY _ZTV10S4666C6_nt[];
extern Class_Descriptor cd_S4666C7_nt;
extern VTBL_ENTRY _ZTI10S4666C7_nt[];
extern  VTBL_ENTRY _ZTV10S4666C7_nt[];
extern Class_Descriptor cd_S836C39;
extern VTBL_ENTRY _ZTI7S836C39[];
extern Class_Descriptor cd_S4666C9_nt;
extern VTBL_ENTRY _ZTI10S4666C9_nt[];
static Base_Class bases_S4666C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4666C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S4666C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S4666C5,    ABISELECT(72,48), //bcp->offset
    65, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S4666C6_nt,    ABISELECT(160,124), //bcp->offset
    71, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S4666C7_nt,    ABISELECT(168,128), //bcp->offset
    81, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S836C39,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S4666C9_nt,    ABISELECT(176,132), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4666C1[];
extern void _ZN7S4666C1D1Ev();
extern void _ZN7S4666C1D0Ev();
extern void _ZN7S4666C33v22Ev();
extern void _ZN7S4666C33v23Ev();
extern void _ZN7S4666C33v24Ev();
extern void _ZN7S4666C33v25Ev();
extern void _ZN7S4666C33v26Ev();
extern void _ZN7S4666C33v27Ev();
extern void _ZN7S4666C33v28Ev();
extern void _ZN7S4666C33v29Ev();
extern void _ZN7S4666C33v30Ev();
extern void _ZN7S4666C33v31Ev();
extern void _ZN7S4666C33v32Ev();
extern void _ZN7S4666C33v33Ev();
extern void _ZN7S4666C33v34Ev();
extern void _ZN7S4666C33v35Ev();
extern void _ZN7S4666C33v36Ev();
extern void _ZN7S4666C33v37Ev();
extern void _ZN7S4666C33v38Ev();
extern void _ZN7S4666C33v39Ev();
extern void _ZN7S4666C33v40Ev();
extern void _ZN7S4666C33v41Ev();
extern void _ZN7S4666C33v42Ev();
extern void _ZN7S4666C33v43Ev();
extern void _ZN7S4666C33v44Ev();
extern void _ZN7S4666C33v45Ev();
extern void _ZN7S4666C33v46Ev();
extern void _ZN7S4666C33v47Ev();
extern void _ZN7S4666C23v48Ev();
extern void _ZN7S4666C23v49Ev();
extern void _ZN7S4666C23v50Ev();
extern void _ZN7S4666C23v51Ev();
extern void _ZN7S4666C23v52Ev();
extern void _ZN7S4666C23v53Ev();
extern void _ZN7S4666C23v54Ev();
extern void _ZN7S4666C23v55Ev();
extern void _ZN7S4666C23v56Ev();
extern void _ZN7S4666C23v57Ev();
extern void _ZN7S4666C23v58Ev();
extern void _ZN7S4666C23v59Ev();
extern void _ZN7S4666C23v60Ev();
extern void _ZN7S4666C23v61Ev();
extern void _ZN7S4666C12v1Ev();
extern void _ZN7S4666C12v2Ev();
extern void _ZN7S4666C12v3Ev();
extern void _ZN7S4666C12v4Ev();
extern void _ZN7S4666C12v5Ev();
extern void _ZN7S4666C12v6Ev();
extern void _ZN7S4666C12v7Ev();
extern void _ZN7S4666C12v8Ev();
extern void _ZN7S4666C12v9Ev();
extern void _ZN7S4666C13v10Ev();
extern void _ZN7S4666C13v11Ev();
extern void _ZN7S4666C13v12Ev();
extern void _ZN7S4666C13v13Ev();
extern void _ZN7S4666C13v14Ev();
extern void _ZN7S4666C13v15Ev();
extern void _ZN7S4666C13v16Ev();
extern void _ZN7S4666C13v17Ev();
extern void _ZN7S4666C13v18Ev();
extern void _ZN7S4666C13v19Ev();
extern void _ZN7S4666C13v20Ev();
extern void _ZN7S4666C13v21Ev();
extern void ABISELECT(_ZThn72_N7S4666C1D1Ev,_ZThn48_N7S4666C1D1Ev)();
extern void ABISELECT(_ZThn72_N7S4666C1D0Ev,_ZThn48_N7S4666C1D0Ev)();
extern void _ZN7S4666C53v62Ev();
extern void _ZN7S4666C53v63Ev();
extern void ABISELECT(_ZThn160_N7S4666C1D1Ev,_ZThn124_N7S4666C1D1Ev)();
extern void ABISELECT(_ZThn160_N7S4666C1D0Ev,_ZThn124_N7S4666C1D0Ev)();
extern void _ZN10S4666C6_nt3v64Ev();
extern void _ZN10S4666C6_nt3v65Ev();
extern void _ZN10S4666C6_nt3v66Ev();
extern void _ZN10S4666C6_nt3v67Ev();
extern void _ZN10S4666C6_nt3v68Ev();
extern void _ZN10S4666C6_nt3v69Ev();
extern void ABISELECT(_ZThn168_N7S4666C1D1Ev,_ZThn128_N7S4666C1D1Ev)();
extern void ABISELECT(_ZThn168_N7S4666C1D0Ev,_ZThn128_N7S4666C1D0Ev)();
extern void _ZN10S4666C7_nt3v70Ev();
extern void _ZN10S4666C7_nt3v71Ev();
extern void _ZN10S4666C7_nt3v72Ev();
static  VTBL_ENTRY vtc_S4666C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4666C1[0]),
  (VTBL_ENTRY)&_ZN7S4666C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4666C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4666C33v22Ev,
  (VTBL_ENTRY)&_ZN7S4666C33v23Ev,
  (VTBL_ENTRY)&_ZN7S4666C33v24Ev,
  (VTBL_ENTRY)&_ZN7S4666C33v25Ev,
  (VTBL_ENTRY)&_ZN7S4666C33v26Ev,
  (VTBL_ENTRY)&_ZN7S4666C33v27Ev,
  (VTBL_ENTRY)&_ZN7S4666C33v28Ev,
  (VTBL_ENTRY)&_ZN7S4666C33v29Ev,
  (VTBL_ENTRY)&_ZN7S4666C33v30Ev,
  (VTBL_ENTRY)&_ZN7S4666C33v31Ev,
  (VTBL_ENTRY)&_ZN7S4666C33v32Ev,
  (VTBL_ENTRY)&_ZN7S4666C33v33Ev,
  (VTBL_ENTRY)&_ZN7S4666C33v34Ev,
  (VTBL_ENTRY)&_ZN7S4666C33v35Ev,
  (VTBL_ENTRY)&_ZN7S4666C33v36Ev,
  (VTBL_ENTRY)&_ZN7S4666C33v37Ev,
  (VTBL_ENTRY)&_ZN7S4666C33v38Ev,
  (VTBL_ENTRY)&_ZN7S4666C33v39Ev,
  (VTBL_ENTRY)&_ZN7S4666C33v40Ev,
  (VTBL_ENTRY)&_ZN7S4666C33v41Ev,
  (VTBL_ENTRY)&_ZN7S4666C33v42Ev,
  (VTBL_ENTRY)&_ZN7S4666C33v43Ev,
  (VTBL_ENTRY)&_ZN7S4666C33v44Ev,
  (VTBL_ENTRY)&_ZN7S4666C33v45Ev,
  (VTBL_ENTRY)&_ZN7S4666C33v46Ev,
  (VTBL_ENTRY)&_ZN7S4666C33v47Ev,
  (VTBL_ENTRY)&_ZN7S4666C23v48Ev,
  (VTBL_ENTRY)&_ZN7S4666C23v49Ev,
  (VTBL_ENTRY)&_ZN7S4666C23v50Ev,
  (VTBL_ENTRY)&_ZN7S4666C23v51Ev,
  (VTBL_ENTRY)&_ZN7S4666C23v52Ev,
  (VTBL_ENTRY)&_ZN7S4666C23v53Ev,
  (VTBL_ENTRY)&_ZN7S4666C23v54Ev,
  (VTBL_ENTRY)&_ZN7S4666C23v55Ev,
  (VTBL_ENTRY)&_ZN7S4666C23v56Ev,
  (VTBL_ENTRY)&_ZN7S4666C23v57Ev,
  (VTBL_ENTRY)&_ZN7S4666C23v58Ev,
  (VTBL_ENTRY)&_ZN7S4666C23v59Ev,
  (VTBL_ENTRY)&_ZN7S4666C23v60Ev,
  (VTBL_ENTRY)&_ZN7S4666C23v61Ev,
  (VTBL_ENTRY)&_ZN7S4666C12v1Ev,
  (VTBL_ENTRY)&_ZN7S4666C12v2Ev,
  (VTBL_ENTRY)&_ZN7S4666C12v3Ev,
  (VTBL_ENTRY)&_ZN7S4666C12v4Ev,
  (VTBL_ENTRY)&_ZN7S4666C12v5Ev,
  (VTBL_ENTRY)&_ZN7S4666C12v6Ev,
  (VTBL_ENTRY)&_ZN7S4666C12v7Ev,
  (VTBL_ENTRY)&_ZN7S4666C12v8Ev,
  (VTBL_ENTRY)&_ZN7S4666C12v9Ev,
  (VTBL_ENTRY)&_ZN7S4666C13v10Ev,
  (VTBL_ENTRY)&_ZN7S4666C13v11Ev,
  (VTBL_ENTRY)&_ZN7S4666C13v12Ev,
  (VTBL_ENTRY)&_ZN7S4666C13v13Ev,
  (VTBL_ENTRY)&_ZN7S4666C13v14Ev,
  (VTBL_ENTRY)&_ZN7S4666C13v15Ev,
  (VTBL_ENTRY)&_ZN7S4666C13v16Ev,
  (VTBL_ENTRY)&_ZN7S4666C13v17Ev,
  (VTBL_ENTRY)&_ZN7S4666C13v18Ev,
  (VTBL_ENTRY)&_ZN7S4666C13v19Ev,
  (VTBL_ENTRY)&_ZN7S4666C13v20Ev,
  (VTBL_ENTRY)&_ZN7S4666C13v21Ev,
  ABISELECT(-72,-48),
  (VTBL_ENTRY)&(_ZTI7S4666C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn72_N7S4666C1D1Ev,_ZThn48_N7S4666C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn72_N7S4666C1D0Ev,_ZThn48_N7S4666C1D0Ev),
  (VTBL_ENTRY)&_ZN7S4666C53v62Ev,
  (VTBL_ENTRY)&_ZN7S4666C53v63Ev,
  ABISELECT(-160,-124),
  (VTBL_ENTRY)&(_ZTI7S4666C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn160_N7S4666C1D1Ev,_ZThn124_N7S4666C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn160_N7S4666C1D0Ev,_ZThn124_N7S4666C1D0Ev),
  (VTBL_ENTRY)&_ZN10S4666C6_nt3v64Ev,
  (VTBL_ENTRY)&_ZN10S4666C6_nt3v65Ev,
  (VTBL_ENTRY)&_ZN10S4666C6_nt3v66Ev,
  (VTBL_ENTRY)&_ZN10S4666C6_nt3v67Ev,
  (VTBL_ENTRY)&_ZN10S4666C6_nt3v68Ev,
  (VTBL_ENTRY)&_ZN10S4666C6_nt3v69Ev,
  ABISELECT(-168,-128),
  (VTBL_ENTRY)&(_ZTI7S4666C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn168_N7S4666C1D1Ev,_ZThn128_N7S4666C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn168_N7S4666C1D0Ev,_ZThn128_N7S4666C1D0Ev),
  (VTBL_ENTRY)&_ZN10S4666C7_nt3v70Ev,
  (VTBL_ENTRY)&_ZN10S4666C7_nt3v71Ev,
  (VTBL_ENTRY)&_ZN10S4666C7_nt3v72Ev,
};
extern VTBL_ENTRY _ZTI7S4666C1[];
extern  VTBL_ENTRY _ZTV7S4666C1[];
Class_Descriptor cd_S4666C1 = {  "S4666C1", // class name
  bases_S4666C1, 7,
  &(vtc_S4666C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(568,392), // object size
  NSPAIRA(_ZTI7S4666C1),ABISELECT(120,64), //typeinfo_var
  NSPAIRA(_ZTV7S4666C1),88, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  5, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4648C3  {
  virtual  ~S4648C3(); // _ZN7S4648C3D1Ev
  virtual void  v20(); // _ZN7S4648C33v20Ev
  virtual void  v21(); // _ZN7S4648C33v21Ev
  virtual void  v22(); // _ZN7S4648C33v22Ev
  virtual void  v23(); // _ZN7S4648C33v23Ev
  virtual void  v24(); // _ZN7S4648C33v24Ev
  virtual void  v25(); // _ZN7S4648C33v25Ev
  virtual void  v26(); // _ZN7S4648C33v26Ev
  virtual void  v27(); // _ZN7S4648C33v27Ev
  virtual void  v28(); // _ZN7S4648C33v28Ev
  virtual void  v29(); // _ZN7S4648C33v29Ev
  virtual void  v30(); // _ZN7S4648C33v30Ev
  virtual void  v31(); // _ZN7S4648C33v31Ev
  virtual void  v32(); // _ZN7S4648C33v32Ev
  virtual void  v33(); // _ZN7S4648C33v33Ev
  virtual void  v34(); // _ZN7S4648C33v34Ev
  virtual void  v35(); // _ZN7S4648C33v35Ev
  virtual void  v36(); // _ZN7S4648C33v36Ev
  virtual void  v37(); // _ZN7S4648C33v37Ev
  virtual void  v38(); // _ZN7S4648C33v38Ev
  virtual void  v39(); // _ZN7S4648C33v39Ev
  virtual void  v40(); // _ZN7S4648C33v40Ev
  virtual void  v41(); // _ZN7S4648C33v41Ev
  virtual void  v42(); // _ZN7S4648C33v42Ev
  virtual void  v43(); // _ZN7S4648C33v43Ev
  virtual void  v44(); // _ZN7S4648C33v44Ev
  virtual void  v45(); // _ZN7S4648C33v45Ev
  S4648C3(); // tgen
};
//SIG(-1 S4648C3) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26}


 S4648C3 ::~S4648C3(){ note_dtor("S4648C3", this);}
void  S4648C3 ::v20(){vfunc_called(this, "_ZN7S4648C33v20Ev");}
void  S4648C3 ::v21(){vfunc_called(this, "_ZN7S4648C33v21Ev");}
void  S4648C3 ::v22(){vfunc_called(this, "_ZN7S4648C33v22Ev");}
void  S4648C3 ::v23(){vfunc_called(this, "_ZN7S4648C33v23Ev");}
void  S4648C3 ::v24(){vfunc_called(this, "_ZN7S4648C33v24Ev");}
void  S4648C3 ::v25(){vfunc_called(this, "_ZN7S4648C33v25Ev");}
void  S4648C3 ::v26(){vfunc_called(this, "_ZN7S4648C33v26Ev");}
void  S4648C3 ::v27(){vfunc_called(this, "_ZN7S4648C33v27Ev");}
void  S4648C3 ::v28(){vfunc_called(this, "_ZN7S4648C33v28Ev");}
void  S4648C3 ::v29(){vfunc_called(this, "_ZN7S4648C33v29Ev");}
void  S4648C3 ::v30(){vfunc_called(this, "_ZN7S4648C33v30Ev");}
void  S4648C3 ::v31(){vfunc_called(this, "_ZN7S4648C33v31Ev");}
void  S4648C3 ::v32(){vfunc_called(this, "_ZN7S4648C33v32Ev");}
void  S4648C3 ::v33(){vfunc_called(this, "_ZN7S4648C33v33Ev");}
void  S4648C3 ::v34(){vfunc_called(this, "_ZN7S4648C33v34Ev");}
void  S4648C3 ::v35(){vfunc_called(this, "_ZN7S4648C33v35Ev");}
void  S4648C3 ::v36(){vfunc_called(this, "_ZN7S4648C33v36Ev");}
void  S4648C3 ::v37(){vfunc_called(this, "_ZN7S4648C33v37Ev");}
void  S4648C3 ::v38(){vfunc_called(this, "_ZN7S4648C33v38Ev");}
void  S4648C3 ::v39(){vfunc_called(this, "_ZN7S4648C33v39Ev");}
void  S4648C3 ::v40(){vfunc_called(this, "_ZN7S4648C33v40Ev");}
void  S4648C3 ::v41(){vfunc_called(this, "_ZN7S4648C33v41Ev");}
void  S4648C3 ::v42(){vfunc_called(this, "_ZN7S4648C33v42Ev");}
void  S4648C3 ::v43(){vfunc_called(this, "_ZN7S4648C33v43Ev");}
void  S4648C3 ::v44(){vfunc_called(this, "_ZN7S4648C33v44Ev");}
void  S4648C3 ::v45(){vfunc_called(this, "_ZN7S4648C33v45Ev");}
S4648C3 ::S4648C3(){ note_ctor("S4648C3", this);} // tgen

static void Test_S4648C3()
{
  extern Class_Descriptor cd_S4648C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S4648C3, buf);
    S4648C3 *dp, &lv = *(dp=new (buf) S4648C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S4648C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4648C3)");
    test_class_info(&lv, &cd_S4648C3);
    dp->~S4648C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4648C3(Test_S4648C3, "S4648C3", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S4648C3C1Ev();
extern void _ZN7S4648C3D1Ev();
Name_Map name_map_S4648C3[] = {
  NSPAIR(_ZN7S4648C3C1Ev),
  NSPAIR(_ZN7S4648C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4648C3[];
extern void _ZN7S4648C3D1Ev();
extern void _ZN7S4648C3D0Ev();
extern void _ZN7S4648C33v20Ev();
extern void _ZN7S4648C33v21Ev();
extern void _ZN7S4648C33v22Ev();
extern void _ZN7S4648C33v23Ev();
extern void _ZN7S4648C33v24Ev();
extern void _ZN7S4648C33v25Ev();
extern void _ZN7S4648C33v26Ev();
extern void _ZN7S4648C33v27Ev();
extern void _ZN7S4648C33v28Ev();
extern void _ZN7S4648C33v29Ev();
extern void _ZN7S4648C33v30Ev();
extern void _ZN7S4648C33v31Ev();
extern void _ZN7S4648C33v32Ev();
extern void _ZN7S4648C33v33Ev();
extern void _ZN7S4648C33v34Ev();
extern void _ZN7S4648C33v35Ev();
extern void _ZN7S4648C33v36Ev();
extern void _ZN7S4648C33v37Ev();
extern void _ZN7S4648C33v38Ev();
extern void _ZN7S4648C33v39Ev();
extern void _ZN7S4648C33v40Ev();
extern void _ZN7S4648C33v41Ev();
extern void _ZN7S4648C33v42Ev();
extern void _ZN7S4648C33v43Ev();
extern void _ZN7S4648C33v44Ev();
extern void _ZN7S4648C33v45Ev();
static  VTBL_ENTRY vtc_S4648C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4648C3[0]),
  (VTBL_ENTRY)&_ZN7S4648C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4648C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4648C33v20Ev,
  (VTBL_ENTRY)&_ZN7S4648C33v21Ev,
  (VTBL_ENTRY)&_ZN7S4648C33v22Ev,
  (VTBL_ENTRY)&_ZN7S4648C33v23Ev,
  (VTBL_ENTRY)&_ZN7S4648C33v24Ev,
  (VTBL_ENTRY)&_ZN7S4648C33v25Ev,
  (VTBL_ENTRY)&_ZN7S4648C33v26Ev,
  (VTBL_ENTRY)&_ZN7S4648C33v27Ev,
  (VTBL_ENTRY)&_ZN7S4648C33v28Ev,
  (VTBL_ENTRY)&_ZN7S4648C33v29Ev,
  (VTBL_ENTRY)&_ZN7S4648C33v30Ev,
  (VTBL_ENTRY)&_ZN7S4648C33v31Ev,
  (VTBL_ENTRY)&_ZN7S4648C33v32Ev,
  (VTBL_ENTRY)&_ZN7S4648C33v33Ev,
  (VTBL_ENTRY)&_ZN7S4648C33v34Ev,
  (VTBL_ENTRY)&_ZN7S4648C33v35Ev,
  (VTBL_ENTRY)&_ZN7S4648C33v36Ev,
  (VTBL_ENTRY)&_ZN7S4648C33v37Ev,
  (VTBL_ENTRY)&_ZN7S4648C33v38Ev,
  (VTBL_ENTRY)&_ZN7S4648C33v39Ev,
  (VTBL_ENTRY)&_ZN7S4648C33v40Ev,
  (VTBL_ENTRY)&_ZN7S4648C33v41Ev,
  (VTBL_ENTRY)&_ZN7S4648C33v42Ev,
  (VTBL_ENTRY)&_ZN7S4648C33v43Ev,
  (VTBL_ENTRY)&_ZN7S4648C33v44Ev,
  (VTBL_ENTRY)&_ZN7S4648C33v45Ev,
};
extern VTBL_ENTRY _ZTI7S4648C3[];
extern  VTBL_ENTRY _ZTV7S4648C3[];
Class_Descriptor cd_S4648C3 = {  "S4648C3", // class name
  0,0,//no base classes
  &(vtc_S4648C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S4648C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4648C3),30, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4648C2  : S4648C3 {
  void *s4648c2f0[2];
  int s4648c2f1[4];
  ::S2423C5_nt s4648c2f2;
  void *s4648c2f3;
  char s4648c2f4;
  void *s4648c2f5;
  virtual  ~S4648C2(); // _ZN7S4648C2D1Ev
  virtual void  v46(); // _ZN7S4648C23v46Ev
  virtual void  v47(); // _ZN7S4648C23v47Ev
  virtual void  v48(); // _ZN7S4648C23v48Ev
  virtual void  v49(); // _ZN7S4648C23v49Ev
  virtual void  v50(); // _ZN7S4648C23v50Ev
  virtual void  v51(); // _ZN7S4648C23v51Ev
  virtual void  v52(); // _ZN7S4648C23v52Ev
  virtual void  v53(); // _ZN7S4648C23v53Ev
  virtual void  v54(); // _ZN7S4648C23v54Ev
  virtual void  v55(); // _ZN7S4648C23v55Ev
  virtual void  v56(); // _ZN7S4648C23v56Ev
  virtual void  v57(); // _ZN7S4648C23v57Ev
  virtual void  v58(); // _ZN7S4648C23v58Ev
  virtual void  v59(); // _ZN7S4648C23v59Ev
  S4648C2(); // tgen
};
//SIG(-1 S4648C2) C1{ BC2{ vd v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 Fp[2] Fi[4] FC3{ Fi[2]} Fp Fc Fp}


 S4648C2 ::~S4648C2(){ note_dtor("S4648C2", this);}
void  S4648C2 ::v46(){vfunc_called(this, "_ZN7S4648C23v46Ev");}
void  S4648C2 ::v47(){vfunc_called(this, "_ZN7S4648C23v47Ev");}
void  S4648C2 ::v48(){vfunc_called(this, "_ZN7S4648C23v48Ev");}
void  S4648C2 ::v49(){vfunc_called(this, "_ZN7S4648C23v49Ev");}
void  S4648C2 ::v50(){vfunc_called(this, "_ZN7S4648C23v50Ev");}
void  S4648C2 ::v51(){vfunc_called(this, "_ZN7S4648C23v51Ev");}
void  S4648C2 ::v52(){vfunc_called(this, "_ZN7S4648C23v52Ev");}
void  S4648C2 ::v53(){vfunc_called(this, "_ZN7S4648C23v53Ev");}
void  S4648C2 ::v54(){vfunc_called(this, "_ZN7S4648C23v54Ev");}
void  S4648C2 ::v55(){vfunc_called(this, "_ZN7S4648C23v55Ev");}
void  S4648C2 ::v56(){vfunc_called(this, "_ZN7S4648C23v56Ev");}
void  S4648C2 ::v57(){vfunc_called(this, "_ZN7S4648C23v57Ev");}
void  S4648C2 ::v58(){vfunc_called(this, "_ZN7S4648C23v58Ev");}
void  S4648C2 ::v59(){vfunc_called(this, "_ZN7S4648C23v59Ev");}
S4648C2 ::S4648C2(){ note_ctor("S4648C2", this);} // tgen

static void Test_S4648C2()
{
  extern Class_Descriptor cd_S4648C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,13)];
    init_test(&cd_S4648C2, buf);
    S4648C2 *dp, &lv = *(dp=new (buf) S4648C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,48), "sizeof(S4648C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4648C2)");
    check_base_class_offset(lv, (S4648C3*), 0, "S4648C2");
    check_field_offset(lv, s4648c2f0, ABISELECT(8,4), "S4648C2.s4648c2f0");
    check_field_offset(lv, s4648c2f1, ABISELECT(24,12), "S4648C2.s4648c2f1");
    check_field_offset(lv, s4648c2f2, ABISELECT(40,28), "S4648C2.s4648c2f2");
    check_field_offset(lv, s4648c2f3, ABISELECT(48,36), "S4648C2.s4648c2f3");
    check_field_offset(lv, s4648c2f4, ABISELECT(56,40), "S4648C2.s4648c2f4");
    check_field_offset(lv, s4648c2f5, ABISELECT(64,44), "S4648C2.s4648c2f5");
    test_class_info(&lv, &cd_S4648C2);
    dp->~S4648C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4648C2(Test_S4648C2, "S4648C2", ABISELECT(72,48));

#else // __cplusplus

extern void _ZN7S4648C2C1Ev();
extern void _ZN7S4648C2D1Ev();
Name_Map name_map_S4648C2[] = {
  NSPAIR(_ZN7S4648C2C1Ev),
  NSPAIR(_ZN7S4648C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4648C3;
extern VTBL_ENTRY _ZTI7S4648C3[];
extern  VTBL_ENTRY _ZTV7S4648C3[];
static Base_Class bases_S4648C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4648C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4648C2[];
extern void _ZN7S4648C2D1Ev();
extern void _ZN7S4648C2D0Ev();
extern void _ZN7S4648C33v20Ev();
extern void _ZN7S4648C33v21Ev();
extern void _ZN7S4648C33v22Ev();
extern void _ZN7S4648C33v23Ev();
extern void _ZN7S4648C33v24Ev();
extern void _ZN7S4648C33v25Ev();
extern void _ZN7S4648C33v26Ev();
extern void _ZN7S4648C33v27Ev();
extern void _ZN7S4648C33v28Ev();
extern void _ZN7S4648C33v29Ev();
extern void _ZN7S4648C33v30Ev();
extern void _ZN7S4648C33v31Ev();
extern void _ZN7S4648C33v32Ev();
extern void _ZN7S4648C33v33Ev();
extern void _ZN7S4648C33v34Ev();
extern void _ZN7S4648C33v35Ev();
extern void _ZN7S4648C33v36Ev();
extern void _ZN7S4648C33v37Ev();
extern void _ZN7S4648C33v38Ev();
extern void _ZN7S4648C33v39Ev();
extern void _ZN7S4648C33v40Ev();
extern void _ZN7S4648C33v41Ev();
extern void _ZN7S4648C33v42Ev();
extern void _ZN7S4648C33v43Ev();
extern void _ZN7S4648C33v44Ev();
extern void _ZN7S4648C33v45Ev();
extern void _ZN7S4648C23v46Ev();
extern void _ZN7S4648C23v47Ev();
extern void _ZN7S4648C23v48Ev();
extern void _ZN7S4648C23v49Ev();
extern void _ZN7S4648C23v50Ev();
extern void _ZN7S4648C23v51Ev();
extern void _ZN7S4648C23v52Ev();
extern void _ZN7S4648C23v53Ev();
extern void _ZN7S4648C23v54Ev();
extern void _ZN7S4648C23v55Ev();
extern void _ZN7S4648C23v56Ev();
extern void _ZN7S4648C23v57Ev();
extern void _ZN7S4648C23v58Ev();
extern void _ZN7S4648C23v59Ev();
static  VTBL_ENTRY vtc_S4648C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4648C2[0]),
  (VTBL_ENTRY)&_ZN7S4648C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4648C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4648C33v20Ev,
  (VTBL_ENTRY)&_ZN7S4648C33v21Ev,
  (VTBL_ENTRY)&_ZN7S4648C33v22Ev,
  (VTBL_ENTRY)&_ZN7S4648C33v23Ev,
  (VTBL_ENTRY)&_ZN7S4648C33v24Ev,
  (VTBL_ENTRY)&_ZN7S4648C33v25Ev,
  (VTBL_ENTRY)&_ZN7S4648C33v26Ev,
  (VTBL_ENTRY)&_ZN7S4648C33v27Ev,
  (VTBL_ENTRY)&_ZN7S4648C33v28Ev,
  (VTBL_ENTRY)&_ZN7S4648C33v29Ev,
  (VTBL_ENTRY)&_ZN7S4648C33v30Ev,
  (VTBL_ENTRY)&_ZN7S4648C33v31Ev,
  (VTBL_ENTRY)&_ZN7S4648C33v32Ev,
  (VTBL_ENTRY)&_ZN7S4648C33v33Ev,
  (VTBL_ENTRY)&_ZN7S4648C33v34Ev,
  (VTBL_ENTRY)&_ZN7S4648C33v35Ev,
  (VTBL_ENTRY)&_ZN7S4648C33v36Ev,
  (VTBL_ENTRY)&_ZN7S4648C33v37Ev,
  (VTBL_ENTRY)&_ZN7S4648C33v38Ev,
  (VTBL_ENTRY)&_ZN7S4648C33v39Ev,
  (VTBL_ENTRY)&_ZN7S4648C33v40Ev,
  (VTBL_ENTRY)&_ZN7S4648C33v41Ev,
  (VTBL_ENTRY)&_ZN7S4648C33v42Ev,
  (VTBL_ENTRY)&_ZN7S4648C33v43Ev,
  (VTBL_ENTRY)&_ZN7S4648C33v44Ev,
  (VTBL_ENTRY)&_ZN7S4648C33v45Ev,
  (VTBL_ENTRY)&_ZN7S4648C23v46Ev,
  (VTBL_ENTRY)&_ZN7S4648C23v47Ev,
  (VTBL_ENTRY)&_ZN7S4648C23v48Ev,
  (VTBL_ENTRY)&_ZN7S4648C23v49Ev,
  (VTBL_ENTRY)&_ZN7S4648C23v50Ev,
  (VTBL_ENTRY)&_ZN7S4648C23v51Ev,
  (VTBL_ENTRY)&_ZN7S4648C23v52Ev,
  (VTBL_ENTRY)&_ZN7S4648C23v53Ev,
  (VTBL_ENTRY)&_ZN7S4648C23v54Ev,
  (VTBL_ENTRY)&_ZN7S4648C23v55Ev,
  (VTBL_ENTRY)&_ZN7S4648C23v56Ev,
  (VTBL_ENTRY)&_ZN7S4648C23v57Ev,
  (VTBL_ENTRY)&_ZN7S4648C23v58Ev,
  (VTBL_ENTRY)&_ZN7S4648C23v59Ev,
};
extern VTBL_ENTRY _ZTI7S4648C2[];
extern  VTBL_ENTRY _ZTV7S4648C2[];
Class_Descriptor cd_S4648C2 = {  "S4648C2", // class name
  bases_S4648C2, 1,
  &(vtc_S4648C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,48), // object size
  NSPAIRA(_ZTI7S4648C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4648C2),44, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4648C5  {
  void *s4648c5f0;
  char s4648c5f1[32];
  int s4648c5f2[6];
  char s4648c5f3;
  int s4648c5f4[2];
  virtual  ~S4648C5(); // _ZN7S4648C5D1Ev
  virtual void  v60(); // _ZN7S4648C53v60Ev
  virtual void  v61(); // _ZN7S4648C53v61Ev
  S4648C5(); // tgen
};
//SIG(-1 S4648C5) C1{ vd v1 v2 Fp Fc[32] Fi[6] Fc Fi[2]}


 S4648C5 ::~S4648C5(){ note_dtor("S4648C5", this);}
void  S4648C5 ::v60(){vfunc_called(this, "_ZN7S4648C53v60Ev");}
void  S4648C5 ::v61(){vfunc_called(this, "_ZN7S4648C53v61Ev");}
S4648C5 ::S4648C5(){ note_ctor("S4648C5", this);} // tgen

static void Test_S4648C5()
{
  extern Class_Descriptor cd_S4648C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(12,20)];
    init_test(&cd_S4648C5, buf);
    S4648C5 *dp, &lv = *(dp=new (buf) S4648C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(88,76), "sizeof(S4648C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4648C5)");
    check_field_offset(lv, s4648c5f0, ABISELECT(8,4), "S4648C5.s4648c5f0");
    check_field_offset(lv, s4648c5f1, ABISELECT(16,8), "S4648C5.s4648c5f1");
    check_field_offset(lv, s4648c5f2, ABISELECT(48,40), "S4648C5.s4648c5f2");
    check_field_offset(lv, s4648c5f3, ABISELECT(72,64), "S4648C5.s4648c5f3");
    check_field_offset(lv, s4648c5f4, ABISELECT(76,68), "S4648C5.s4648c5f4");
    test_class_info(&lv, &cd_S4648C5);
    dp->~S4648C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4648C5(Test_S4648C5, "S4648C5", ABISELECT(88,76));

#else // __cplusplus

extern void _ZN7S4648C5C1Ev();
extern void _ZN7S4648C5D1Ev();
Name_Map name_map_S4648C5[] = {
  NSPAIR(_ZN7S4648C5C1Ev),
  NSPAIR(_ZN7S4648C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4648C5[];
extern void _ZN7S4648C5D1Ev();
extern void _ZN7S4648C5D0Ev();
extern void _ZN7S4648C53v60Ev();
extern void _ZN7S4648C53v61Ev();
static  VTBL_ENTRY vtc_S4648C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4648C5[0]),
  (VTBL_ENTRY)&_ZN7S4648C5D1Ev,
  (VTBL_ENTRY)&_ZN7S4648C5D0Ev,
  (VTBL_ENTRY)&_ZN7S4648C53v60Ev,
  (VTBL_ENTRY)&_ZN7S4648C53v61Ev,
};
extern VTBL_ENTRY _ZTI7S4648C5[];
extern  VTBL_ENTRY _ZTV7S4648C5[];
Class_Descriptor cd_S4648C5 = {  "S4648C5", // class name
  0,0,//no base classes
  &(vtc_S4648C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(88,76), // object size
  NSPAIRA(_ZTI7S4648C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4648C5),6, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4648C6  {
  virtual  ~S4648C6(); // _ZN7S4648C6D1Ev
  virtual void  v62(); // _ZN7S4648C63v62Ev
  virtual void  v63(); // _ZN7S4648C63v63Ev
  virtual void  v64(); // _ZN7S4648C63v64Ev
  virtual void  v65(); // _ZN7S4648C63v65Ev
  virtual void  v66(); // _ZN7S4648C63v66Ev
  virtual void  v67(); // _ZN7S4648C63v67Ev
  S4648C6(); // tgen
};
//SIG(-1 S4648C6) C1{ vd v1 v2 v3 v4 v5 v6}


 S4648C6 ::~S4648C6(){ note_dtor("S4648C6", this);}
void  S4648C6 ::v62(){vfunc_called(this, "_ZN7S4648C63v62Ev");}
void  S4648C6 ::v63(){vfunc_called(this, "_ZN7S4648C63v63Ev");}
void  S4648C6 ::v64(){vfunc_called(this, "_ZN7S4648C63v64Ev");}
void  S4648C6 ::v65(){vfunc_called(this, "_ZN7S4648C63v65Ev");}
void  S4648C6 ::v66(){vfunc_called(this, "_ZN7S4648C63v66Ev");}
void  S4648C6 ::v67(){vfunc_called(this, "_ZN7S4648C63v67Ev");}
S4648C6 ::S4648C6(){ note_ctor("S4648C6", this);} // tgen

static void Test_S4648C6()
{
  extern Class_Descriptor cd_S4648C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S4648C6, buf);
    S4648C6 *dp, &lv = *(dp=new (buf) S4648C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S4648C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4648C6)");
    test_class_info(&lv, &cd_S4648C6);
    dp->~S4648C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4648C6(Test_S4648C6, "S4648C6", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S4648C6C1Ev();
extern void _ZN7S4648C6D1Ev();
Name_Map name_map_S4648C6[] = {
  NSPAIR(_ZN7S4648C6C1Ev),
  NSPAIR(_ZN7S4648C6D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4648C6[];
extern void _ZN7S4648C6D1Ev();
extern void _ZN7S4648C6D0Ev();
extern void _ZN7S4648C63v62Ev();
extern void _ZN7S4648C63v63Ev();
extern void _ZN7S4648C63v64Ev();
extern void _ZN7S4648C63v65Ev();
extern void _ZN7S4648C63v66Ev();
extern void _ZN7S4648C63v67Ev();
static  VTBL_ENTRY vtc_S4648C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4648C6[0]),
  (VTBL_ENTRY)&_ZN7S4648C6D1Ev,
  (VTBL_ENTRY)&_ZN7S4648C6D0Ev,
  (VTBL_ENTRY)&_ZN7S4648C63v62Ev,
  (VTBL_ENTRY)&_ZN7S4648C63v63Ev,
  (VTBL_ENTRY)&_ZN7S4648C63v64Ev,
  (VTBL_ENTRY)&_ZN7S4648C63v65Ev,
  (VTBL_ENTRY)&_ZN7S4648C63v66Ev,
  (VTBL_ENTRY)&_ZN7S4648C63v67Ev,
};
extern VTBL_ENTRY _ZTI7S4648C6[];
extern  VTBL_ENTRY _ZTV7S4648C6[];
Class_Descriptor cd_S4648C6 = {  "S4648C6", // class name
  0,0,//no base classes
  &(vtc_S4648C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S4648C6),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4648C6),10, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4648C7  {
  virtual  ~S4648C7(); // _ZN7S4648C7D1Ev
  virtual void  v68(); // _ZN7S4648C73v68Ev
  virtual void  v69(); // _ZN7S4648C73v69Ev
  virtual void  v70(); // _ZN7S4648C73v70Ev
  S4648C7(); // tgen
};
//SIG(-1 S4648C7) C1{ vd v1 v2 v3}


 S4648C7 ::~S4648C7(){ note_dtor("S4648C7", this);}
void  S4648C7 ::v68(){vfunc_called(this, "_ZN7S4648C73v68Ev");}
void  S4648C7 ::v69(){vfunc_called(this, "_ZN7S4648C73v69Ev");}
void  S4648C7 ::v70(){vfunc_called(this, "_ZN7S4648C73v70Ev");}
S4648C7 ::S4648C7(){ note_ctor("S4648C7", this);} // tgen

static void Test_S4648C7()
{
  extern Class_Descriptor cd_S4648C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S4648C7, buf);
    S4648C7 *dp, &lv = *(dp=new (buf) S4648C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S4648C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4648C7)");
    test_class_info(&lv, &cd_S4648C7);
    dp->~S4648C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4648C7(Test_S4648C7, "S4648C7", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S4648C7C1Ev();
extern void _ZN7S4648C7D1Ev();
Name_Map name_map_S4648C7[] = {
  NSPAIR(_ZN7S4648C7C1Ev),
  NSPAIR(_ZN7S4648C7D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4648C7[];
extern void _ZN7S4648C7D1Ev();
extern void _ZN7S4648C7D0Ev();
extern void _ZN7S4648C73v68Ev();
extern void _ZN7S4648C73v69Ev();
extern void _ZN7S4648C73v70Ev();
static  VTBL_ENTRY vtc_S4648C7[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4648C7[0]),
  (VTBL_ENTRY)&_ZN7S4648C7D1Ev,
  (VTBL_ENTRY)&_ZN7S4648C7D0Ev,
  (VTBL_ENTRY)&_ZN7S4648C73v68Ev,
  (VTBL_ENTRY)&_ZN7S4648C73v69Ev,
  (VTBL_ENTRY)&_ZN7S4648C73v70Ev,
};
extern VTBL_ENTRY _ZTI7S4648C7[];
extern  VTBL_ENTRY _ZTV7S4648C7[];
Class_Descriptor cd_S4648C7 = {  "S4648C7", // class name
  0,0,//no base classes
  &(vtc_S4648C7[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S4648C7),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4648C7),7, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4648C11  {
  int s4648c11f0;
  void *s4648c11f1;
};
//SIG(-1 S4648C11) C1{ Fi Fp}



static void Test_S4648C11()
{
  {
    init_simple_test("S4648C11");
    S4648C11 lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S4648C11)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4648C11)");
    check_field_offset(lv, s4648c11f0, 0, "S4648C11.s4648c11f0");
    check_field_offset(lv, s4648c11f1, ABISELECT(8,4), "S4648C11.s4648c11f1");
  }
}
static Arrange_To_Call_Me vS4648C11(Test_S4648C11, "S4648C11", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4648C1  : S4648C2 , S4648C5 , S4648C6 , S4648C7 , S836C39 , S4666C9_nt {
  void *s4648c1f0[2];
  long s4648c1f1;
  ::S4666C10_nt s4648c1f2;
  ::S4648C11 s4648c1f3;
  __tsi64 s4648c1f4;
  int s4648c1f5;
  long s4648c1f6;
  ::S4666C12 s4648c1f7;
  short s4648c1f8[2];
  __tsi64 s4648c1f9[7];
  long s4648c1f10;
  __tsi64 s4648c1f11;
  ::S4666C13_nt s4648c1f12;
  __tsi64 s4648c1f13;
  ::S4666C13_nt s4648c1f14;
  int s4648c1f15[5];
  char s4648c1f16[3];
  __tsi64 s4648c1f17;
  char s4648c1f18;
  __tsi64 s4648c1f19;
  char s4648c1f20;
  int s4648c1f21;
  void *s4648c1f22;
  ::S4666C14 s4648c1f23;
  void *s4648c1f24[3];
  virtual  ~S4648C1(); // _ZN7S4648C1D1Ev
  virtual void  v1(); // _ZN7S4648C12v1Ev
  virtual void  v2(); // _ZN7S4648C12v2Ev
  virtual void  v3(); // _ZN7S4648C12v3Ev
  virtual void  v4(); // _ZN7S4648C12v4Ev
  virtual void  v5(); // _ZN7S4648C12v5Ev
  virtual void  v6(); // _ZN7S4648C12v6Ev
  virtual void  v7(); // _ZN7S4648C12v7Ev
  virtual void  v8(); // _ZN7S4648C12v8Ev
  virtual void  v9(); // _ZN7S4648C12v9Ev
  virtual void  v10(); // _ZN7S4648C13v10Ev
  virtual void  v11(); // _ZN7S4648C13v11Ev
  virtual void  v12(); // _ZN7S4648C13v12Ev
  virtual void  v13(); // _ZN7S4648C13v13Ev
  virtual void  v14(); // _ZN7S4648C13v14Ev
  virtual void  v15(); // _ZN7S4648C13v15Ev
  virtual void  v16(); // _ZN7S4648C13v16Ev
  virtual void  v17(); // _ZN7S4648C13v17Ev
  virtual void  v18(); // _ZN7S4648C13v18Ev
  virtual void  v19(); // _ZN7S4648C13v19Ev
  S4648C1(); // tgen
};
//SIG(1 S4648C1) C1{ BC2{ BC3{ vd v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45} vd v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 Fp[2] Fi[4] FC4{ Fi[2]} Fp Fc Fp} BC5{ vd v60 v61 Fp Fc[32] Fi[6] Fc Fi[2]} BC6{ vd v62 v63 v64 v65 v66 v67} BC7{ vd v68 v69 v70} BC8{ m} BC9{ m Fp Fi} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 Fp[2] Fl FC10{ Fi Fp} FC11{ Fi Fp} FL Fi Fl FC12{ Fl[3] Fp Fs[13] Fc[6]} Fs[2] FL[7] Fl FL FC13{ FL} FL FC13 Fi[5] Fc[3] FL Fc FL Fc Fi Fp FC14{ Fl FL Fl Fi Fl[3] FL[2] Fl} Fp[3]}


 S4648C1 ::~S4648C1(){ note_dtor("S4648C1", this);}
void  S4648C1 ::v1(){vfunc_called(this, "_ZN7S4648C12v1Ev");}
void  S4648C1 ::v2(){vfunc_called(this, "_ZN7S4648C12v2Ev");}
void  S4648C1 ::v3(){vfunc_called(this, "_ZN7S4648C12v3Ev");}
void  S4648C1 ::v4(){vfunc_called(this, "_ZN7S4648C12v4Ev");}
void  S4648C1 ::v5(){vfunc_called(this, "_ZN7S4648C12v5Ev");}
void  S4648C1 ::v6(){vfunc_called(this, "_ZN7S4648C12v6Ev");}
void  S4648C1 ::v7(){vfunc_called(this, "_ZN7S4648C12v7Ev");}
void  S4648C1 ::v8(){vfunc_called(this, "_ZN7S4648C12v8Ev");}
void  S4648C1 ::v9(){vfunc_called(this, "_ZN7S4648C12v9Ev");}
void  S4648C1 ::v10(){vfunc_called(this, "_ZN7S4648C13v10Ev");}
void  S4648C1 ::v11(){vfunc_called(this, "_ZN7S4648C13v11Ev");}
void  S4648C1 ::v12(){vfunc_called(this, "_ZN7S4648C13v12Ev");}
void  S4648C1 ::v13(){vfunc_called(this, "_ZN7S4648C13v13Ev");}
void  S4648C1 ::v14(){vfunc_called(this, "_ZN7S4648C13v14Ev");}
void  S4648C1 ::v15(){vfunc_called(this, "_ZN7S4648C13v15Ev");}
void  S4648C1 ::v16(){vfunc_called(this, "_ZN7S4648C13v16Ev");}
void  S4648C1 ::v17(){vfunc_called(this, "_ZN7S4648C13v17Ev");}
void  S4648C1 ::v18(){vfunc_called(this, "_ZN7S4648C13v18Ev");}
void  S4648C1 ::v19(){vfunc_called(this, "_ZN7S4648C13v19Ev");}
S4648C1 ::S4648C1(){ note_ctor("S4648C1", this);} // tgen

static void Test_S4648C1()
{
  extern Class_Descriptor cd_S4648C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(77,113)];
    init_test(&cd_S4648C1, buf);
    S4648C1 *dp, &lv = *(dp=new (buf) S4648C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(608,448), "sizeof(S4648C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4648C1)");
    check_base_class_offset(lv, (S4648C3*)(S4648C2*), 0, "S4648C1");
    check_base_class_offset(lv, (S4648C2*), 0, "S4648C1");
    check_base_class_offset(lv, (S4648C5*), ABISELECT(72,48), "S4648C1");
    check_base_class_offset(lv, (S4648C6*), ABISELECT(160,124), "S4648C1");
    check_base_class_offset(lv, (S4648C7*), ABISELECT(168,128), "S4648C1");
    check_base_class_offset(lv, (S836C39*), 0, "S4648C1");
    check_base_class_offset(lv, (S4666C9_nt*), ABISELECT(176,132), "S4648C1");
    check_field_offset(lv, s4648c1f0, ABISELECT(192,140), "S4648C1.s4648c1f0");
    check_field_offset(lv, s4648c1f1, ABISELECT(208,148), "S4648C1.s4648c1f1");
    check_field_offset(lv, s4648c1f2, ABISELECT(216,152), "S4648C1.s4648c1f2");
    check_field_offset(lv, s4648c1f3, ABISELECT(232,160), "S4648C1.s4648c1f3");
    check_field_offset(lv, s4648c1f4, ABISELECT(248,168), "S4648C1.s4648c1f4");
    check_field_offset(lv, s4648c1f5, ABISELECT(256,176), "S4648C1.s4648c1f5");
    check_field_offset(lv, s4648c1f6, ABISELECT(264,180), "S4648C1.s4648c1f6");
    check_field_offset(lv, s4648c1f7, ABISELECT(272,184), "S4648C1.s4648c1f7");
    check_field_offset(lv, s4648c1f8, ABISELECT(336,232), "S4648C1.s4648c1f8");
    check_field_offset(lv, s4648c1f9, ABISELECT(344,236), "S4648C1.s4648c1f9");
    check_field_offset(lv, s4648c1f10, ABISELECT(400,292), "S4648C1.s4648c1f10");
    check_field_offset(lv, s4648c1f11, ABISELECT(408,296), "S4648C1.s4648c1f11");
    check_field_offset(lv, s4648c1f12, ABISELECT(416,304), "S4648C1.s4648c1f12");
    check_field_offset(lv, s4648c1f13, ABISELECT(424,312), "S4648C1.s4648c1f13");
    check_field_offset(lv, s4648c1f14, ABISELECT(432,320), "S4648C1.s4648c1f14");
    check_field_offset(lv, s4648c1f15, ABISELECT(440,328), "S4648C1.s4648c1f15");
    check_field_offset(lv, s4648c1f16, ABISELECT(460,348), "S4648C1.s4648c1f16");
    check_field_offset(lv, s4648c1f17, ABISELECT(464,352), "S4648C1.s4648c1f17");
    check_field_offset(lv, s4648c1f18, ABISELECT(472,360), "S4648C1.s4648c1f18");
    check_field_offset(lv, s4648c1f19, ABISELECT(480,364), "S4648C1.s4648c1f19");
    check_field_offset(lv, s4648c1f20, ABISELECT(488,372), "S4648C1.s4648c1f20");
    check_field_offset(lv, s4648c1f21, ABISELECT(492,376), "S4648C1.s4648c1f21");
    check_field_offset(lv, s4648c1f22, ABISELECT(496,380), "S4648C1.s4648c1f22");
    check_field_offset(lv, s4648c1f23, ABISELECT(504,384), "S4648C1.s4648c1f23");
    check_field_offset(lv, s4648c1f24, ABISELECT(584,436), "S4648C1.s4648c1f24");
    test_class_info(&lv, &cd_S4648C1);
    dp->~S4648C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4648C1(Test_S4648C1, "S4648C1", ABISELECT(608,448));

#else // __cplusplus

extern void _ZN7S4648C1C1Ev();
extern void _ZN7S4648C1D1Ev();
Name_Map name_map_S4648C1[] = {
  NSPAIR(_ZN7S4648C1C1Ev),
  NSPAIR(_ZN7S4648C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4648C3;
extern VTBL_ENTRY _ZTI7S4648C3[];
extern  VTBL_ENTRY _ZTV7S4648C3[];
extern Class_Descriptor cd_S4648C2;
extern VTBL_ENTRY _ZTI7S4648C2[];
extern  VTBL_ENTRY _ZTV7S4648C2[];
extern Class_Descriptor cd_S4648C5;
extern VTBL_ENTRY _ZTI7S4648C5[];
extern  VTBL_ENTRY _ZTV7S4648C5[];
extern Class_Descriptor cd_S4648C6;
extern VTBL_ENTRY _ZTI7S4648C6[];
extern  VTBL_ENTRY _ZTV7S4648C6[];
extern Class_Descriptor cd_S4648C7;
extern VTBL_ENTRY _ZTI7S4648C7[];
extern  VTBL_ENTRY _ZTV7S4648C7[];
extern Class_Descriptor cd_S836C39;
extern VTBL_ENTRY _ZTI7S836C39[];
extern Class_Descriptor cd_S4666C9_nt;
extern VTBL_ENTRY _ZTI10S4666C9_nt[];
static Base_Class bases_S4648C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4648C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S4648C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S4648C5,    ABISELECT(72,48), //bcp->offset
    63, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S4648C6,    ABISELECT(160,124), //bcp->offset
    69, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S4648C7,    ABISELECT(168,128), //bcp->offset
    79, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S836C39,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S4666C9_nt,    ABISELECT(176,132), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4648C1[];
extern void _ZN7S4648C1D1Ev();
extern void _ZN7S4648C1D0Ev();
extern void _ZN7S4648C33v20Ev();
extern void _ZN7S4648C33v21Ev();
extern void _ZN7S4648C33v22Ev();
extern void _ZN7S4648C33v23Ev();
extern void _ZN7S4648C33v24Ev();
extern void _ZN7S4648C33v25Ev();
extern void _ZN7S4648C33v26Ev();
extern void _ZN7S4648C33v27Ev();
extern void _ZN7S4648C33v28Ev();
extern void _ZN7S4648C33v29Ev();
extern void _ZN7S4648C33v30Ev();
extern void _ZN7S4648C33v31Ev();
extern void _ZN7S4648C33v32Ev();
extern void _ZN7S4648C33v33Ev();
extern void _ZN7S4648C33v34Ev();
extern void _ZN7S4648C33v35Ev();
extern void _ZN7S4648C33v36Ev();
extern void _ZN7S4648C33v37Ev();
extern void _ZN7S4648C33v38Ev();
extern void _ZN7S4648C33v39Ev();
extern void _ZN7S4648C33v40Ev();
extern void _ZN7S4648C33v41Ev();
extern void _ZN7S4648C33v42Ev();
extern void _ZN7S4648C33v43Ev();
extern void _ZN7S4648C33v44Ev();
extern void _ZN7S4648C33v45Ev();
extern void _ZN7S4648C23v46Ev();
extern void _ZN7S4648C23v47Ev();
extern void _ZN7S4648C23v48Ev();
extern void _ZN7S4648C23v49Ev();
extern void _ZN7S4648C23v50Ev();
extern void _ZN7S4648C23v51Ev();
extern void _ZN7S4648C23v52Ev();
extern void _ZN7S4648C23v53Ev();
extern void _ZN7S4648C23v54Ev();
extern void _ZN7S4648C23v55Ev();
extern void _ZN7S4648C23v56Ev();
extern void _ZN7S4648C23v57Ev();
extern void _ZN7S4648C23v58Ev();
extern void _ZN7S4648C23v59Ev();
extern void _ZN7S4648C12v1Ev();
extern void _ZN7S4648C12v2Ev();
extern void _ZN7S4648C12v3Ev();
extern void _ZN7S4648C12v4Ev();
extern void _ZN7S4648C12v5Ev();
extern void _ZN7S4648C12v6Ev();
extern void _ZN7S4648C12v7Ev();
extern void _ZN7S4648C12v8Ev();
extern void _ZN7S4648C12v9Ev();
extern void _ZN7S4648C13v10Ev();
extern void _ZN7S4648C13v11Ev();
extern void _ZN7S4648C13v12Ev();
extern void _ZN7S4648C13v13Ev();
extern void _ZN7S4648C13v14Ev();
extern void _ZN7S4648C13v15Ev();
extern void _ZN7S4648C13v16Ev();
extern void _ZN7S4648C13v17Ev();
extern void _ZN7S4648C13v18Ev();
extern void _ZN7S4648C13v19Ev();
extern void ABISELECT(_ZThn72_N7S4648C1D1Ev,_ZThn48_N7S4648C1D1Ev)();
extern void ABISELECT(_ZThn72_N7S4648C1D0Ev,_ZThn48_N7S4648C1D0Ev)();
extern void _ZN7S4648C53v60Ev();
extern void _ZN7S4648C53v61Ev();
extern void ABISELECT(_ZThn160_N7S4648C1D1Ev,_ZThn124_N7S4648C1D1Ev)();
extern void ABISELECT(_ZThn160_N7S4648C1D0Ev,_ZThn124_N7S4648C1D0Ev)();
extern void _ZN7S4648C63v62Ev();
extern void _ZN7S4648C63v63Ev();
extern void _ZN7S4648C63v64Ev();
extern void _ZN7S4648C63v65Ev();
extern void _ZN7S4648C63v66Ev();
extern void _ZN7S4648C63v67Ev();
extern void ABISELECT(_ZThn168_N7S4648C1D1Ev,_ZThn128_N7S4648C1D1Ev)();
extern void ABISELECT(_ZThn168_N7S4648C1D0Ev,_ZThn128_N7S4648C1D0Ev)();
extern void _ZN7S4648C73v68Ev();
extern void _ZN7S4648C73v69Ev();
extern void _ZN7S4648C73v70Ev();
static  VTBL_ENTRY vtc_S4648C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4648C1[0]),
  (VTBL_ENTRY)&_ZN7S4648C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4648C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4648C33v20Ev,
  (VTBL_ENTRY)&_ZN7S4648C33v21Ev,
  (VTBL_ENTRY)&_ZN7S4648C33v22Ev,
  (VTBL_ENTRY)&_ZN7S4648C33v23Ev,
  (VTBL_ENTRY)&_ZN7S4648C33v24Ev,
  (VTBL_ENTRY)&_ZN7S4648C33v25Ev,
  (VTBL_ENTRY)&_ZN7S4648C33v26Ev,
  (VTBL_ENTRY)&_ZN7S4648C33v27Ev,
  (VTBL_ENTRY)&_ZN7S4648C33v28Ev,
  (VTBL_ENTRY)&_ZN7S4648C33v29Ev,
  (VTBL_ENTRY)&_ZN7S4648C33v30Ev,
  (VTBL_ENTRY)&_ZN7S4648C33v31Ev,
  (VTBL_ENTRY)&_ZN7S4648C33v32Ev,
  (VTBL_ENTRY)&_ZN7S4648C33v33Ev,
  (VTBL_ENTRY)&_ZN7S4648C33v34Ev,
  (VTBL_ENTRY)&_ZN7S4648C33v35Ev,
  (VTBL_ENTRY)&_ZN7S4648C33v36Ev,
  (VTBL_ENTRY)&_ZN7S4648C33v37Ev,
  (VTBL_ENTRY)&_ZN7S4648C33v38Ev,
  (VTBL_ENTRY)&_ZN7S4648C33v39Ev,
  (VTBL_ENTRY)&_ZN7S4648C33v40Ev,
  (VTBL_ENTRY)&_ZN7S4648C33v41Ev,
  (VTBL_ENTRY)&_ZN7S4648C33v42Ev,
  (VTBL_ENTRY)&_ZN7S4648C33v43Ev,
  (VTBL_ENTRY)&_ZN7S4648C33v44Ev,
  (VTBL_ENTRY)&_ZN7S4648C33v45Ev,
  (VTBL_ENTRY)&_ZN7S4648C23v46Ev,
  (VTBL_ENTRY)&_ZN7S4648C23v47Ev,
  (VTBL_ENTRY)&_ZN7S4648C23v48Ev,
  (VTBL_ENTRY)&_ZN7S4648C23v49Ev,
  (VTBL_ENTRY)&_ZN7S4648C23v50Ev,
  (VTBL_ENTRY)&_ZN7S4648C23v51Ev,
  (VTBL_ENTRY)&_ZN7S4648C23v52Ev,
  (VTBL_ENTRY)&_ZN7S4648C23v53Ev,
  (VTBL_ENTRY)&_ZN7S4648C23v54Ev,
  (VTBL_ENTRY)&_ZN7S4648C23v55Ev,
  (VTBL_ENTRY)&_ZN7S4648C23v56Ev,
  (VTBL_ENTRY)&_ZN7S4648C23v57Ev,
  (VTBL_ENTRY)&_ZN7S4648C23v58Ev,
  (VTBL_ENTRY)&_ZN7S4648C23v59Ev,
  (VTBL_ENTRY)&_ZN7S4648C12v1Ev,
  (VTBL_ENTRY)&_ZN7S4648C12v2Ev,
  (VTBL_ENTRY)&_ZN7S4648C12v3Ev,
  (VTBL_ENTRY)&_ZN7S4648C12v4Ev,
  (VTBL_ENTRY)&_ZN7S4648C12v5Ev,
  (VTBL_ENTRY)&_ZN7S4648C12v6Ev,
  (VTBL_ENTRY)&_ZN7S4648C12v7Ev,
  (VTBL_ENTRY)&_ZN7S4648C12v8Ev,
  (VTBL_ENTRY)&_ZN7S4648C12v9Ev,
  (VTBL_ENTRY)&_ZN7S4648C13v10Ev,
  (VTBL_ENTRY)&_ZN7S4648C13v11Ev,
  (VTBL_ENTRY)&_ZN7S4648C13v12Ev,
  (VTBL_ENTRY)&_ZN7S4648C13v13Ev,
  (VTBL_ENTRY)&_ZN7S4648C13v14Ev,
  (VTBL_ENTRY)&_ZN7S4648C13v15Ev,
  (VTBL_ENTRY)&_ZN7S4648C13v16Ev,
  (VTBL_ENTRY)&_ZN7S4648C13v17Ev,
  (VTBL_ENTRY)&_ZN7S4648C13v18Ev,
  (VTBL_ENTRY)&_ZN7S4648C13v19Ev,
  ABISELECT(-72,-48),
  (VTBL_ENTRY)&(_ZTI7S4648C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn72_N7S4648C1D1Ev,_ZThn48_N7S4648C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn72_N7S4648C1D0Ev,_ZThn48_N7S4648C1D0Ev),
  (VTBL_ENTRY)&_ZN7S4648C53v60Ev,
  (VTBL_ENTRY)&_ZN7S4648C53v61Ev,
  ABISELECT(-160,-124),
  (VTBL_ENTRY)&(_ZTI7S4648C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn160_N7S4648C1D1Ev,_ZThn124_N7S4648C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn160_N7S4648C1D0Ev,_ZThn124_N7S4648C1D0Ev),
  (VTBL_ENTRY)&_ZN7S4648C63v62Ev,
  (VTBL_ENTRY)&_ZN7S4648C63v63Ev,
  (VTBL_ENTRY)&_ZN7S4648C63v64Ev,
  (VTBL_ENTRY)&_ZN7S4648C63v65Ev,
  (VTBL_ENTRY)&_ZN7S4648C63v66Ev,
  (VTBL_ENTRY)&_ZN7S4648C63v67Ev,
  ABISELECT(-168,-128),
  (VTBL_ENTRY)&(_ZTI7S4648C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn168_N7S4648C1D1Ev,_ZThn128_N7S4648C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn168_N7S4648C1D0Ev,_ZThn128_N7S4648C1D0Ev),
  (VTBL_ENTRY)&_ZN7S4648C73v68Ev,
  (VTBL_ENTRY)&_ZN7S4648C73v69Ev,
  (VTBL_ENTRY)&_ZN7S4648C73v70Ev,
};
extern VTBL_ENTRY _ZTI7S4648C1[];
extern  VTBL_ENTRY _ZTV7S4648C1[];
Class_Descriptor cd_S4648C1 = {  "S4648C1", // class name
  bases_S4648C1, 7,
  &(vtc_S4648C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(608,448), // object size
  NSPAIRA(_ZTI7S4648C1),ABISELECT(120,64), //typeinfo_var
  NSPAIRA(_ZTV7S4648C1),86, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  5, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7258C3  : S20956C5 {
  int s7258c3f0;
  ::S20956C5 s7258c3f1;
  ::S20956C5 s7258c3f2;
  int s7258c3f3;
  void *s7258c3f4;
  __tsi64 s7258c3f5[6];
  void *s7258c3f6;
};
//SIG(-1 S7258C3) C1{ BC2{ m FL Fi[4] Fc FL Fp[2]} Fi FC2 FC2 Fi Fp FL[6] Fp}



static void Test_S7258C3()
{
  extern Class_Descriptor cd_S7258C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(32,50)];
    init_test(&cd_S7258C3, buf);
    S7258C3 &lv = *(new (buf) S7258C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(248,196), "sizeof(S7258C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7258C3)");
    check_base_class_offset(lv, (S20956C5*), 0, "S7258C3");
    check_field_offset(lv, s7258c3f0, ABISELECT(56,44), "S7258C3.s7258c3f0");
    check_field_offset(lv, s7258c3f1, ABISELECT(64,48), "S7258C3.s7258c3f1");
    check_field_offset(lv, s7258c3f2, ABISELECT(120,92), "S7258C3.s7258c3f2");
    check_field_offset(lv, s7258c3f3, ABISELECT(176,136), "S7258C3.s7258c3f3");
    check_field_offset(lv, s7258c3f4, ABISELECT(184,140), "S7258C3.s7258c3f4");
    check_field_offset(lv, s7258c3f5, ABISELECT(192,144), "S7258C3.s7258c3f5");
    check_field_offset(lv, s7258c3f6, ABISELECT(240,192), "S7258C3.s7258c3f6");
    test_class_info(&lv, &cd_S7258C3);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7258C3(Test_S7258C3, "S7258C3", ABISELECT(248,196));

#else // __cplusplus

extern Class_Descriptor cd_S20956C5;
extern VTBL_ENTRY _ZTI8S20956C5[];
static Base_Class bases_S7258C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20956C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7258C3[];
Class_Descriptor cd_S7258C3 = {  "S7258C3", // class name
  bases_S7258C3, 1,
  0, // no vftv
  0, //no vtt
  ABISELECT(248,196), // object size
  NSPAIRA(_ZTI7S7258C3),ABISELECT(24,12), //typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7258C2  : virtual S7258C3 , virtual S20956C5 {
  ::S20956C5 s7258c2f0;
  short s7258c2f1;
  int s7258c2f2;
  ::S7258C3 s7258c2f3;
  __tsi64 s7258c2f4[4];
  ::S7258C3 s7258c2f5;
  ~S7258C2(); // tgen
  S7258C2(); // tgen
};
//SIG(-1 S7258C2) C1{ VBC2{ BC3{ m FL Fi[4] Fc FL Fp[2]} Fi FC3 FC3 Fi Fp FL[6] Fp} VBC3 FC3 Fs Fi FC2 FL[4] FC2}


S7258C2 ::~S7258C2(){ note_dtor("S7258C2", this);} // tgen
S7258C2 ::S7258C2(){ note_ctor("S7258C2", this);} // tgen

static void Test_S7258C2()
{
  extern Class_Descriptor cd_S7258C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(114,181)];
    init_test(&cd_S7258C2, buf);
    S7258C2 *dp, &lv = *(dp=new (buf) S7258C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(904,720), "sizeof(S7258C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7258C2)");
    check_base_class_offset(lv, (S20956C5*)(S7258C3*), ABISELECT(600,480), "S7258C2");
    check_base_class_offset(lv, (S7258C3*), ABISELECT(600,480), "S7258C2");
    /*is_ambiguous_... S7258C2::S20956C5 */ AMB_check_base_class_offset(lv, (S20956C5*), ABISELECT(848,676), "S7258C2");
    check_field_offset(lv, s7258c2f0, ABISELECT(8,4), "S7258C2.s7258c2f0");
    check_field_offset(lv, s7258c2f1, ABISELECT(64,48), "S7258C2.s7258c2f1");
    check_field_offset(lv, s7258c2f2, ABISELECT(68,52), "S7258C2.s7258c2f2");
    check_field_offset(lv, s7258c2f3, ABISELECT(72,56), "S7258C2.s7258c2f3");
    check_field_offset(lv, s7258c2f4, ABISELECT(320,252), "S7258C2.s7258c2f4");
    check_field_offset(lv, s7258c2f5, ABISELECT(352,284), "S7258C2.s7258c2f5");
    test_class_info(&lv, &cd_S7258C2);
    dp->~S7258C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7258C2(Test_S7258C2, "S7258C2", ABISELECT(904,720));

#else // __cplusplus

extern void _ZN7S7258C2C1Ev();
extern void _ZN7S7258C2D1Ev();
Name_Map name_map_S7258C2[] = {
  NSPAIR(_ZN7S7258C2C1Ev),
  NSPAIR(_ZN7S7258C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20956C5;
extern VTBL_ENTRY _ZTI8S20956C5[];
extern Class_Descriptor cd_S7258C3;
extern VTBL_ENTRY _ZTI7S7258C3[];
extern Class_Descriptor cd_S20956C5;
extern VTBL_ENTRY _ZTI8S20956C5[];
static Base_Class bases_S7258C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20956C5,    ABISELECT(600,480), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S7258C3,    ABISELECT(600,480), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20956C5,    ABISELECT(848,676), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7258C2[];
static  VTBL_ENTRY vtc_S7258C2[] = {
  ABISELECT(848,676),
  ABISELECT(600,480),
  0,
  (VTBL_ENTRY)&(_ZTI7S7258C2[0]),
};
extern VTBL_ENTRY _ZTV7S7258C2[];
static  VTT_ENTRY vtt_S7258C2[] = {
  {&(_ZTV7S7258C2[4]),  4,4},
};
extern VTBL_ENTRY _ZTI7S7258C2[];
extern  VTBL_ENTRY _ZTV7S7258C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7258C2[];
Class_Descriptor cd_S7258C2 = {  "S7258C2", // class name
  bases_S7258C2, 3,
  &(vtc_S7258C2[0]), // expected_vtbl_contents
  &(vtt_S7258C2[0]), // expected_vtt_contents
  ABISELECT(904,720), // object size
  NSPAIRA(_ZTI7S7258C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7258C2),4, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7258C2),1, //virtual table table var
  0, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7258C7  : virtual S20956C5 {
  int s7258c7f0[2];
  ::S20956C5 s7258c7f1;
  int s7258c7f2;
  ::S7258C3 s7258c7f3;
  void *s7258c7f4;
  ::S20956C5 s7258c7f5;
  char s7258c7f6:3;
  virtual  ~S7258C7(); // _ZN7S7258C7D2Ev
  virtual void  v1(); // _ZN7S7258C72v1Ev
  virtual void  v2(); // _ZN7S7258C72v2Ev
  virtual void  v3(); // _ZN7S7258C72v3Ev
  S7258C7(); // tgen
};
//SIG(-1 S7258C7) C1{ VBC2{ m FL Fi[4] Fc FL Fp[2]} vd v1 v2 v3 Fi[2] FC2 Fi FC3{ BC2 Fi FC2 FC2 Fi Fp FL[6] Fp} Fp FC2 Fc:3}


 S7258C7 ::~S7258C7(){ note_dtor("S7258C7", this);}
void  S7258C7 ::v1(){vfunc_called(this, "_ZN7S7258C72v1Ev");}
void  S7258C7 ::v2(){vfunc_called(this, "_ZN7S7258C72v2Ev");}
void  S7258C7 ::v3(){vfunc_called(this, "_ZN7S7258C72v3Ev");}
S7258C7 ::S7258C7(){ note_ctor("S7258C7", this);} // tgen

static void Test_S7258C7()
{
  extern Class_Descriptor cd_S7258C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(58,89)];
    init_test(&cd_S7258C7, buf);
    S7258C7 *dp, &lv = *(dp=new (buf) S7258C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(456,352), "sizeof(S7258C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7258C7)");
    check_base_class_offset(lv, (S20956C5*), ABISELECT(400,308), "S7258C7");
    check_field_offset(lv, s7258c7f0, ABISELECT(8,4), "S7258C7.s7258c7f0");
    check_field_offset(lv, s7258c7f1, ABISELECT(16,12), "S7258C7.s7258c7f1");
    check_field_offset(lv, s7258c7f2, ABISELECT(72,56), "S7258C7.s7258c7f2");
    check_field_offset(lv, s7258c7f3, ABISELECT(80,60), "S7258C7.s7258c7f3");
    check_field_offset(lv, s7258c7f4, ABISELECT(328,256), "S7258C7.s7258c7f4");
    check_field_offset(lv, s7258c7f5, ABISELECT(336,260), "S7258C7.s7258c7f5");
    set_bf_and_test(lv, s7258c7f6, ABISELECT(392,304), 0, 3, 1, "S7258C7");
    set_bf_and_test(lv, s7258c7f6, ABISELECT(392,304), 0, 3, hide_sll(1LL<<2), "S7258C7");
    test_class_info(&lv, &cd_S7258C7);
    dp->~S7258C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7258C7(Test_S7258C7, "S7258C7", ABISELECT(456,352));

#else // __cplusplus

extern void _ZN7S7258C7C1Ev();
extern void _ZN7S7258C7D2Ev();
Name_Map name_map_S7258C7[] = {
  NSPAIR(_ZN7S7258C7C1Ev),
  NSPAIR(_ZN7S7258C7D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20956C5;
extern VTBL_ENTRY _ZTI8S20956C5[];
static Base_Class bases_S7258C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20956C5,    ABISELECT(400,308), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7258C7[];
extern void _ZN7S7258C7D1Ev();
extern void _ZN7S7258C7D0Ev();
extern void _ZN7S7258C72v1Ev();
extern void _ZN7S7258C72v2Ev();
extern void _ZN7S7258C72v3Ev();
static  VTBL_ENTRY vtc_S7258C7[] = {
  ABISELECT(400,308),
  0,
  (VTBL_ENTRY)&(_ZTI7S7258C7[0]),
  (VTBL_ENTRY)&_ZN7S7258C7D1Ev,
  (VTBL_ENTRY)&_ZN7S7258C7D0Ev,
  (VTBL_ENTRY)&_ZN7S7258C72v1Ev,
  (VTBL_ENTRY)&_ZN7S7258C72v2Ev,
  (VTBL_ENTRY)&_ZN7S7258C72v3Ev,
};
extern VTBL_ENTRY _ZTV7S7258C7[];
static  VTT_ENTRY vtt_S7258C7[] = {
  {&(_ZTV7S7258C7[3]),  3,8},
};
extern VTBL_ENTRY _ZTI7S7258C7[];
extern  VTBL_ENTRY _ZTV7S7258C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7258C7[];
Class_Descriptor cd_S7258C7 = {  "S7258C7", // class name
  bases_S7258C7, 1,
  &(vtc_S7258C7[0]), // expected_vtbl_contents
  &(vtt_S7258C7[0]), // expected_vtt_contents
  ABISELECT(456,352), // object size
  NSPAIRA(_ZTI7S7258C7),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S7258C7),8, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7258C7),1, //virtual table table var
  0, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7258C6  {
  int s7258c6f0;
  ::S7258C7 s7258c6f1[2];
  char s7258c6f2;
  void  mf7258c6(); // _ZN7S7258C68mf7258c6Ev
};
//SIG(-1 S7258C6) C1{ m Fi FC2{ VBC3{ m FL Fi[4] Fc FL Fp[2]} vd v1 v2 v3 Fi[2] FC3 Fi FC4{ BC3 Fi FC3 FC3 Fi Fp FL[6] Fp} Fp FC3 Fc:3}[2] Fc}


void  S7258C6 ::mf7258c6(){}

static void Test_S7258C6()
{
  {
    init_simple_test("S7258C6");
    static S7258C6 lv;
    check2(sizeof(lv), ABISELECT(928,712), "sizeof(S7258C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7258C6)");
    check_field_offset(lv, s7258c6f0, 0, "S7258C6.s7258c6f0");
    check_field_offset(lv, s7258c6f1, ABISELECT(8,4), "S7258C6.s7258c6f1");
    check_field_offset(lv, s7258c6f2, ABISELECT(920,708), "S7258C6.s7258c6f2");
  }
}
static Arrange_To_Call_Me vS7258C6(Test_S7258C6, "S7258C6", ABISELECT(928,712));

#else // __cplusplus

extern VTBL_ENTRY _ZTI7S7258C6[];
VTBL_ENTRY *P__ZTI7S7258C6 = _ZTI7S7258C6; 
Class_Descriptor cd_S7258C6 = {  "S7258C6", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  ABISELECT(928,712), // object size
  NSPAIRA(_ZTI7S7258C6),ABISELECT(16,8), //typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7258C8  : S7258C3 , virtual S20956C5 , virtual S7258C7 , virtual S7258C2 {
  int s7258c8f0;
  ::S20956C14_nt s7258c8f1;
  long double s7258c8f2;
  void *s7258c8f3;
  ::S7258C7 s7258c8f4[2];
  long double s7258c8f5;
  __tsi64 s7258c8f6;
  int s7258c8f7;
  ::S7258C2 s7258c8f8;
  virtual  ~S7258C8(); // _ZN7S7258C8D2Ev
  virtual void  v4(); // _ZN7S7258C82v4Ev
  virtual void  v5(); // _ZN7S7258C82v5Ev
  S7258C8(); // tgen
};
//SIG(-1 S7258C8) C1{ BC2{ BC3{ m FL Fi[4] Fc FL Fp[2]} Fi FC3 FC3 Fi Fp FL[6] Fp} VBC3 VBC4{ VBC3 vd v3 v4 v5 Fi[2] FC3 Fi FC2 Fp FC3 Fc:3} VBC5{ VBC2 VBC3 FC3 Fs Fi FC2 FL[4] FC2} vd v1 v2 Fi FC6{} FD Fp FC4[2] FD FL Fi FC5}


 S7258C8 ::~S7258C8(){ note_dtor("S7258C8", this);}
void  S7258C8 ::v4(){vfunc_called(this, "_ZN7S7258C82v4Ev");}
void  S7258C8 ::v5(){vfunc_called(this, "_ZN7S7258C82v5Ev");}
S7258C8 ::S7258C8(){ note_ctor("S7258C8", this);} // tgen

static void Test_S7258C8()
{
  extern Class_Descriptor cd_S7258C8;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(217,676)];
    init_test(&cd_S7258C8, buf);
    S7258C8 *dp, &lv = *(dp=new (buf) S7258C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(3456,2700), "sizeof(S7258C8)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7258C8)");
    /*is_ambiguous_... S7258C8::S7258C3 */ AMB_check_base_class_offset(lv, (S20956C5*)(S7258C3*), ABISELECT(8,4), "S7258C8");
    /*is_ambiguous_... S7258C8::S7258C3 */ AMB_check_base_class_offset(lv, (S7258C3*), ABISELECT(8,4), "S7258C8");
    /*is_ambiguous_... S7258C8::S20956C5 */ AMB_check_base_class_offset(lv, (S20956C5*), ABISELECT(2152,1672), "S7258C8");
    check_base_class_offset(lv, (S20956C5*)(S7258C7*), ABISELECT(2152,1672), "S7258C8");
    /*is_ambiguous_... S7258C2::S20956C5 */ AMB_check_base_class_offset(lv, (S20956C5*)(S7258C2*), ABISELECT(2152,1672), "S7258C8");
    check_base_class_offset(lv, (S7258C7*), ABISELECT(2208,1716), "S7258C8");
    /*is_ambiguous_... S7258C8::S7258C3 */ AMB_check_base_class_offset(lv, (S20956C5*)(S7258C3*), ABISELECT(3208,2504), "S7258C8");
    check_base_class_offset(lv, (S7258C3*)(S7258C2*), ABISELECT(3208,2504), "S7258C8");
    check_base_class_offset(lv, (S7258C2*), ABISELECT(2608,2024), "S7258C8");
    check_field_offset(lv, s7258c8f0, ABISELECT(256,200), "S7258C8.s7258c8f0");
    check_field_offset(lv, s7258c8f1, ABISELECT(260,204), "S7258C8.s7258c8f1");
    check_field_offset(lv, s7258c8f2, ABISELECT(272,208), "S7258C8.s7258c8f2");
    check_field_offset(lv, s7258c8f3, ABISELECT(288,220), "S7258C8.s7258c8f3");
    check_field_offset(lv, s7258c8f4, ABISELECT(296,224), "S7258C8.s7258c8f4");
    check_field_offset(lv, s7258c8f5, ABISELECT(1216,928), "S7258C8.s7258c8f5");
    check_field_offset(lv, s7258c8f6, ABISELECT(1232,940), "S7258C8.s7258c8f6");
    check_field_offset(lv, s7258c8f7, ABISELECT(1240,948), "S7258C8.s7258c8f7");
    check_field_offset(lv, s7258c8f8, ABISELECT(1248,952), "S7258C8.s7258c8f8");
    test_class_info(&lv, &cd_S7258C8);
    dp->~S7258C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7258C8(Test_S7258C8, "S7258C8", ABISELECT(3456,2700));

#else // __cplusplus

extern void _ZN7S7258C8C1Ev();
extern void _ZN7S7258C8D2Ev();
Name_Map name_map_S7258C8[] = {
  NSPAIR(_ZN7S7258C8C1Ev),
  NSPAIR(_ZN7S7258C8D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20956C5;
extern VTBL_ENTRY _ZTI8S20956C5[];
extern Class_Descriptor cd_S7258C3;
extern VTBL_ENTRY _ZTI7S7258C3[];
extern Class_Descriptor cd_S20956C5;
extern VTBL_ENTRY _ZTI8S20956C5[];
extern Class_Descriptor cd_S7258C7;
extern VTBL_ENTRY _ZTI7S7258C7[];
extern  VTBL_ENTRY _ZTV7S7258C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7258C7[];
extern Class_Descriptor cd_S20956C5;
extern VTBL_ENTRY _ZTI8S20956C5[];
extern Class_Descriptor cd_S7258C3;
extern VTBL_ENTRY _ZTI7S7258C3[];
extern Class_Descriptor cd_S7258C2;
extern VTBL_ENTRY _ZTI7S7258C2[];
extern  VTBL_ENTRY _ZTV7S7258C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7258C2[];
static Base_Class bases_S7258C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20956C5,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S7258C3,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20956C5,    ABISELECT(2152,1672), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7258C7,    ABISELECT(2208,1716), //bcp->offset
    10, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20956C5,    ABISELECT(3208,2504), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S7258C3,    ABISELECT(3208,2504), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S7258C2,    ABISELECT(2608,2024), //bcp->offset
    22, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7258C8[];
extern void _ZN7S7258C8D1Ev();
extern void _ZN7S7258C8D0Ev();
extern void _ZN7S7258C82v4Ev();
extern void _ZN7S7258C82v5Ev();
extern void ABISELECT(_ZTv0_n32_N7S7258C8D1Ev,_ZTv0_n16_N7S7258C8D1Ev)();
extern void ABISELECT(_ZThn2208_N7S7258C8D1Ev,_ZThn1716_N7S7258C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S7258C8D0Ev,_ZTv0_n16_N7S7258C8D0Ev)();
extern void ABISELECT(_ZThn2208_N7S7258C8D0Ev,_ZThn1716_N7S7258C8D0Ev)() __attribute__((weak));
extern void _ZN7S7258C72v1Ev();
extern void _ZN7S7258C72v2Ev();
extern void _ZN7S7258C72v3Ev();
static  VTBL_ENTRY vtc_S7258C8[] = {
  ABISELECT(3208,2504),
  ABISELECT(2608,2024),
  ABISELECT(2208,1716),
  ABISELECT(2152,1672),
  0,
  (VTBL_ENTRY)&(_ZTI7S7258C8[0]),
  (VTBL_ENTRY)&_ZN7S7258C8D1Ev,
  (VTBL_ENTRY)&_ZN7S7258C8D0Ev,
  (VTBL_ENTRY)&_ZN7S7258C82v4Ev,
  (VTBL_ENTRY)&_ZN7S7258C82v5Ev,
  0,
  0,
  0,
  ABISELECT(-2208,-1716),
  ABISELECT(-56,-44),
  ABISELECT(-2208,-1716),
  (VTBL_ENTRY)&(_ZTI7S7258C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7258C8D1Ev,_ZTv0_n16_N7S7258C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7258C8D0Ev,_ZTv0_n16_N7S7258C8D0Ev),
  (VTBL_ENTRY)&_ZN7S7258C72v1Ev,
  (VTBL_ENTRY)&_ZN7S7258C72v2Ev,
  (VTBL_ENTRY)&_ZN7S7258C72v3Ev,
  ABISELECT(-456,-352),
  ABISELECT(600,480),
  ABISELECT(-2608,-2024),
  (VTBL_ENTRY)&(_ZTI7S7258C8[0]),
};
extern VTBL_ENTRY _ZTV7S7258C8[];
extern void _ZN7S7258C7D1Ev();
extern void _ZN7S7258C7D0Ev();
extern void _ZN7S7258C72v1Ev();
extern void _ZN7S7258C72v2Ev();
extern void _ZN7S7258C72v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7258C7__7S7258C8[] = {
  ABISELECT(-56,-44),
  0,
  (VTBL_ENTRY)&(_ZTI7S7258C7[0]),
  (VTBL_ENTRY)&_ZN7S7258C7D1Ev,
  (VTBL_ENTRY)&_ZN7S7258C7D0Ev,
  (VTBL_ENTRY)&_ZN7S7258C72v1Ev,
  (VTBL_ENTRY)&_ZN7S7258C72v2Ev,
  (VTBL_ENTRY)&_ZN7S7258C72v3Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7258C2__7S7258C8[] = {
  ABISELECT(-456,-352),
  ABISELECT(600,480),
  0,
  (VTBL_ENTRY)&(_ZTI7S7258C2[0]),
};
static  VTT_ENTRY vtt_S7258C8[] = {
  {&(_ZTV7S7258C8[6]),  6,26},
  {&(_ZTV7S7258C8[17]),  17,26},
  {&(_ZTV7S7258C8[26]),  26,26},
  {&(_tg__ZTV7S7258C7__7S7258C8[3]),  3,8},
  {&(_tg__ZTV7S7258C2__7S7258C8[4]),  4,4},
};
extern VTBL_ENTRY _ZTI7S7258C8[];
extern  VTBL_ENTRY _ZTV7S7258C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7258C8[];
static VTBL_ENTRY alt_thunk_names15[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7258C8D0Ev,_ZTv0_n16_N7S7258C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2208_N7S7258C8D0Ev,_ZThn1716_N7S7258C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7258C8D1Ev,_ZTv0_n16_N7S7258C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2208_N7S7258C8D1Ev,_ZThn1716_N7S7258C8D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7258C8 = {  "S7258C8", // class name
  bases_S7258C8, 7,
  &(vtc_S7258C8[0]), // expected_vtbl_contents
  &(vtt_S7258C8[0]), // expected_vtt_contents
  ABISELECT(3456,2700), // object size
  NSPAIRA(_ZTI7S7258C8),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV7S7258C8),26, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7258C8),5, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names15,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7258C5  : S7258C6 , S7258C8 {
  void *s7258c5f0[2];
  ::S20956C10 s7258c5f1;
  long s7258c5f2;
  void *s7258c5f3;
  virtual  ~S7258C5(); // _ZN7S7258C5D2Ev
  S7258C5(); // tgen
};
//SIG(-1 S7258C5) C1{ BC2{ m Fi FC3{ VBC4{ m FL Fi[4] Fc FL Fp[2]} vd v1 v2 v3 Fi[2] FC4 Fi FC5{ BC4 Fi FC4 FC4 Fi Fp FL[6] Fp} Fp FC4 Fc:3}[2] Fc} BC6{ BC5 VBC4 VBC3 VBC7{ VBC5 VBC4 FC4 Fs Fi FC5 FL[4] FC5} vd v4 v5 Fi FC8{} FD Fp FC3[2] FD FL Fi FC7} vd Fp[2] FU9{ m Fp FL Fi Fc Fi FL Fl FL Fs Fp FD Fc[6]} Fl Fp}


 S7258C5 ::~S7258C5(){ note_dtor("S7258C5", this);}
S7258C5 ::S7258C5(){ note_ctor("S7258C5", this);} // tgen

static void Test_S7258C5()
{
  extern Class_Descriptor cd_S7258C5;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(279,861)];
    init_test(&cd_S7258C5, buf);
    S7258C5 *dp, &lv = *(dp=new (buf) S7258C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(4448,3440), "sizeof(S7258C5)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7258C5)");
    check_base_class_offset(lv, (S7258C6*), ABISELECT(2152,1672), "S7258C5");
    /*is_ambiguous_... S7258C8::S7258C3 */ AMB_check_base_class_offset(lv, (S20956C5*)(S7258C3*)(S7258C8*), ABISELECT(8,4), "S7258C5");
    /*is_ambiguous_... S7258C8::S7258C3 */ AMB_check_base_class_offset(lv, (S7258C3*)(S7258C8*), ABISELECT(8,4), "S7258C5");
    /*is_ambiguous_... S7258C8::S20956C5 */ AMB_check_base_class_offset(lv, (S20956C5*)(S7258C8*), ABISELECT(3136,2412), "S7258C5");
    check_base_class_offset(lv, (S20956C5*)(S7258C7*), ABISELECT(3136,2412), "S7258C5");
    /*is_ambiguous_... S7258C2::S20956C5 */ AMB_check_base_class_offset(lv, (S20956C5*)(S7258C2*), ABISELECT(3136,2412), "S7258C5");
    check_base_class_offset(lv, (S7258C7*)(S7258C8*), ABISELECT(3192,2456), "S7258C5");
    /*is_ambiguous_... S7258C5::S7258C3 */ AMB_check_base_class_offset(lv, (S20956C5*)(S7258C3*), ABISELECT(4192,3244), "S7258C5");
    check_base_class_offset(lv, (S7258C3*)(S7258C2*), ABISELECT(4192,3244), "S7258C5");
    check_base_class_offset(lv, (S7258C2*)(S7258C8*), ABISELECT(3592,2764), "S7258C5");
    check_base_class_offset(lv, (S7258C8*), 0, "S7258C5");
    check_field_offset(lv, s7258c5f0, ABISELECT(3080,2384), "S7258C5.s7258c5f0");
    check_field_offset(lv, s7258c5f1, ABISELECT(3104,2392), "S7258C5.s7258c5f1");
    check_field_offset(lv, s7258c5f2, ABISELECT(3120,2404), "S7258C5.s7258c5f2");
    check_field_offset(lv, s7258c5f3, ABISELECT(3128,2408), "S7258C5.s7258c5f3");
    test_class_info(&lv, &cd_S7258C5);
    dp->~S7258C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7258C5(Test_S7258C5, "S7258C5", ABISELECT(4448,3440));

#else // __cplusplus

extern void _ZN7S7258C5C1Ev();
extern void _ZN7S7258C5D2Ev();
Name_Map name_map_S7258C5[] = {
  NSPAIR(_ZN7S7258C5C1Ev),
  NSPAIR(_ZN7S7258C5D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7258C6;
extern VTBL_ENTRY _ZTI7S7258C6[];
extern Class_Descriptor cd_S20956C5;
extern VTBL_ENTRY _ZTI8S20956C5[];
extern Class_Descriptor cd_S7258C3;
extern VTBL_ENTRY _ZTI7S7258C3[];
extern Class_Descriptor cd_S20956C5;
extern VTBL_ENTRY _ZTI8S20956C5[];
extern Class_Descriptor cd_S7258C7;
extern VTBL_ENTRY _ZTI7S7258C7[];
extern  VTBL_ENTRY _ZTV7S7258C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7258C7[];
extern Class_Descriptor cd_S20956C5;
extern VTBL_ENTRY _ZTI8S20956C5[];
extern Class_Descriptor cd_S7258C3;
extern VTBL_ENTRY _ZTI7S7258C3[];
extern Class_Descriptor cd_S7258C2;
extern VTBL_ENTRY _ZTI7S7258C2[];
extern  VTBL_ENTRY _ZTV7S7258C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7258C2[];
extern Class_Descriptor cd_S7258C8;
extern VTBL_ENTRY _ZTI7S7258C8[];
extern  VTBL_ENTRY _ZTV7S7258C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7258C8[];
static Base_Class bases_S7258C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7258C6,    ABISELECT(2152,1672), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20956C5,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S7258C3,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S20956C5,    ABISELECT(3136,2412), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S7258C7,    ABISELECT(3192,2456), //bcp->offset
    10, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S20956C5,    ABISELECT(4192,3244), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S7258C3,    ABISELECT(4192,3244), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S7258C2,    ABISELECT(3592,2764), //bcp->offset
    22, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S7258C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7258C5[];
extern void _ZN7S7258C5D1Ev();
extern void _ZN7S7258C5D0Ev();
extern void _ZN7S7258C82v4Ev();
extern void _ZN7S7258C82v5Ev();
extern void ABISELECT(_ZTv0_n32_N7S7258C5D1Ev,_ZTv0_n16_N7S7258C5D1Ev)();
extern void ABISELECT(_ZThn3192_N7S7258C5D1Ev,_ZThn2456_N7S7258C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S7258C5D0Ev,_ZTv0_n16_N7S7258C5D0Ev)();
extern void ABISELECT(_ZThn3192_N7S7258C5D0Ev,_ZThn2456_N7S7258C5D0Ev)() __attribute__((weak));
extern void _ZN7S7258C72v1Ev();
extern void _ZN7S7258C72v2Ev();
extern void _ZN7S7258C72v3Ev();
static  VTBL_ENTRY vtc_S7258C5[] = {
  ABISELECT(4192,3244),
  ABISELECT(3592,2764),
  ABISELECT(3192,2456),
  ABISELECT(3136,2412),
  0,
  (VTBL_ENTRY)&(_ZTI7S7258C5[0]),
  (VTBL_ENTRY)&_ZN7S7258C5D1Ev,
  (VTBL_ENTRY)&_ZN7S7258C5D0Ev,
  (VTBL_ENTRY)&_ZN7S7258C82v4Ev,
  (VTBL_ENTRY)&_ZN7S7258C82v5Ev,
  0,
  0,
  0,
  ABISELECT(-3192,-2456),
  ABISELECT(-56,-44),
  ABISELECT(-3192,-2456),
  (VTBL_ENTRY)&(_ZTI7S7258C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7258C5D1Ev,_ZTv0_n16_N7S7258C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7258C5D0Ev,_ZTv0_n16_N7S7258C5D0Ev),
  (VTBL_ENTRY)&_ZN7S7258C72v1Ev,
  (VTBL_ENTRY)&_ZN7S7258C72v2Ev,
  (VTBL_ENTRY)&_ZN7S7258C72v3Ev,
  ABISELECT(-456,-352),
  ABISELECT(600,480),
  ABISELECT(-3592,-2764),
  (VTBL_ENTRY)&(_ZTI7S7258C5[0]),
};
extern VTBL_ENTRY _ZTV7S7258C5[];
extern void _ZN7S7258C8D1Ev();
extern void _ZN7S7258C8D0Ev();
extern void _ZN7S7258C82v4Ev();
extern void _ZN7S7258C82v5Ev();
static  VTBL_ENTRY _tg__ZTV7S7258C8__7S7258C5[] = {
  ABISELECT(4192,3244),
  ABISELECT(3592,2764),
  ABISELECT(3192,2456),
  ABISELECT(3136,2412),
  0,
  (VTBL_ENTRY)&(_ZTI7S7258C8[0]),
  (VTBL_ENTRY)&_ZN7S7258C8D1Ev,
  (VTBL_ENTRY)&_ZN7S7258C8D0Ev,
  (VTBL_ENTRY)&_ZN7S7258C82v4Ev,
  (VTBL_ENTRY)&_ZN7S7258C82v5Ev,
};
extern void ABISELECT(_ZTv0_n32_N7S7258C8D1Ev,_ZTv0_n16_N7S7258C8D1Ev)();
extern void ABISELECT(_ZThn3192_N7S7258C8D1Ev,_ZThn2456_N7S7258C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S7258C8D0Ev,_ZTv0_n16_N7S7258C8D0Ev)();
extern void ABISELECT(_ZThn3192_N7S7258C8D0Ev,_ZThn2456_N7S7258C8D0Ev)() __attribute__((weak));
extern void _ZN7S7258C72v1Ev();
extern void _ZN7S7258C72v2Ev();
extern void _ZN7S7258C72v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7258C7__7S7258C8__7S7258C5[] = {
  0,
  0,
  0,
  ABISELECT(-3192,-2456),
  ABISELECT(-56,-44),
  ABISELECT(-3192,-2456),
  (VTBL_ENTRY)&(_ZTI7S7258C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7258C8D1Ev,_ZTv0_n16_N7S7258C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7258C8D0Ev,_ZTv0_n16_N7S7258C8D0Ev),
  (VTBL_ENTRY)&_ZN7S7258C72v1Ev,
  (VTBL_ENTRY)&_ZN7S7258C72v2Ev,
  (VTBL_ENTRY)&_ZN7S7258C72v3Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7258C2__7S7258C8__7S7258C5[] = {
  ABISELECT(-456,-352),
  ABISELECT(600,480),
  ABISELECT(-3592,-2764),
  (VTBL_ENTRY)&(_ZTI7S7258C8[0]),
};
extern void _ZN7S7258C7D1Ev();
extern void _ZN7S7258C7D0Ev();
extern void _ZN7S7258C72v1Ev();
extern void _ZN7S7258C72v2Ev();
extern void _ZN7S7258C72v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7258C7__7S7258C5[] = {
  ABISELECT(-56,-44),
  0,
  (VTBL_ENTRY)&(_ZTI7S7258C7[0]),
  (VTBL_ENTRY)&_ZN7S7258C7D1Ev,
  (VTBL_ENTRY)&_ZN7S7258C7D0Ev,
  (VTBL_ENTRY)&_ZN7S7258C72v1Ev,
  (VTBL_ENTRY)&_ZN7S7258C72v2Ev,
  (VTBL_ENTRY)&_ZN7S7258C72v3Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7258C2__7S7258C5[] = {
  ABISELECT(-456,-352),
  ABISELECT(600,480),
  0,
  (VTBL_ENTRY)&(_ZTI7S7258C2[0]),
};
static  VTT_ENTRY vtt_S7258C5[] = {
  {&(_ZTV7S7258C5[6]),  6,26},
  {&(_tg__ZTV7S7258C8__7S7258C5[6]),  6,10},
  {&(_tg__ZTV7S7258C7__7S7258C8__7S7258C5[7]),  7,12},
  {&(_tg__ZTV7S7258C2__7S7258C8__7S7258C5[4]),  4,4},
  {&(_ZTV7S7258C5[17]),  17,26},
  {&(_ZTV7S7258C5[26]),  26,26},
  {&(_tg__ZTV7S7258C7__7S7258C5[3]),  3,8},
  {&(_tg__ZTV7S7258C2__7S7258C5[4]),  4,4},
};
extern VTBL_ENTRY _ZTI7S7258C5[];
extern  VTBL_ENTRY _ZTV7S7258C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7258C5[];
static VTBL_ENTRY alt_thunk_names16[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7258C8D0Ev,_ZTv0_n16_N7S7258C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3192_N7S7258C8D0Ev,_ZThn2456_N7S7258C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7258C8D1Ev,_ZTv0_n16_N7S7258C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3192_N7S7258C8D1Ev,_ZThn2456_N7S7258C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7258C5D0Ev,_ZTv0_n16_N7S7258C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3192_N7S7258C5D0Ev,_ZThn2456_N7S7258C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7258C5D1Ev,_ZTv0_n16_N7S7258C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3192_N7S7258C5D1Ev,_ZThn2456_N7S7258C5D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7258C5 = {  "S7258C5", // class name
  bases_S7258C5, 9,
  &(vtc_S7258C5[0]), // expected_vtbl_contents
  &(vtt_S7258C5[0]), // expected_vtt_contents
  ABISELECT(4448,3440), // object size
  NSPAIRA(_ZTI7S7258C5),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7258C5),26, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7258C5),8, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names16,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7258C12  : virtual S7258C2 , S7258C3 {
  int s7258c12f0[2];
  ::S7258C3 s7258c12f1;
  ::S7258C3 s7258c12f2[5];
  ::S20956C6 s7258c12f3;
  int s7258c12f4;
  ~S7258C12(); // tgen
  S7258C12(); // tgen
};
//SIG(-1 S7258C12) C1{ VBC2{ VBC3{ BC4{ m FL Fi[4] Fc FL Fp[2]} Fi FC4 FC4 Fi Fp FL[6] Fp} VBC4 FC4 Fs Fi FC3 FL[4] FC3} BC3 Fi[2] FC3 FC3[5] FU5{ m Fi[8] Fp FL Fc Fp[5] FD Fc[7] Fp Fc:1 Fi} Fi}


S7258C12 ::~S7258C12(){ note_dtor("S7258C12", this);} // tgen
S7258C12 ::S7258C12(){ note_ctor("S7258C12", this);} // tgen

static void Test_S7258C12()
{
  extern Class_Descriptor cd_S7258C12;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(171,536)];
    init_test(&cd_S7258C12, buf);
    S7258C12 *dp, &lv = *(dp=new (buf) S7258C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(2720,2140), "sizeof(S7258C12)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7258C12)");
    /*is_ambiguous_... S7258C12::S7258C3 */ AMB_check_base_class_offset(lv, (S20956C5*)(S7258C3*), ABISELECT(2416,1900), "S7258C12");
    check_base_class_offset(lv, (S7258C3*)(S7258C2*), ABISELECT(2416,1900), "S7258C12");
    /*is_ambiguous_... S7258C2::S20956C5 */ AMB_check_base_class_offset(lv, (S20956C5*)(S7258C2*), ABISELECT(2664,2096), "S7258C12");
    check_base_class_offset(lv, (S7258C2*), ABISELECT(1816,1420), "S7258C12");
    /*is_ambiguous_... S7258C12::S7258C3 */ AMB_check_base_class_offset(lv, (S20956C5*)(S7258C3*), ABISELECT(8,4), "S7258C12");
    /*is_ambiguous_... S7258C12::S7258C3 */ AMB_check_base_class_offset(lv, (S7258C3*), ABISELECT(8,4), "S7258C12");
    check_field_offset(lv, s7258c12f0, ABISELECT(256,200), "S7258C12.s7258c12f0");
    check_field_offset(lv, s7258c12f1, ABISELECT(264,208), "S7258C12.s7258c12f1");
    check_field_offset(lv, s7258c12f2, ABISELECT(512,404), "S7258C12.s7258c12f2");
    check_field_offset(lv, s7258c12f3, ABISELECT(1760,1384), "S7258C12.s7258c12f3");
    check_field_offset(lv, s7258c12f4, ABISELECT(1808,1416), "S7258C12.s7258c12f4");
    test_class_info(&lv, &cd_S7258C12);
    dp->~S7258C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7258C12(Test_S7258C12, "S7258C12", ABISELECT(2720,2140));

#else // __cplusplus

extern void _ZN8S7258C12C1Ev();
extern void _ZN8S7258C12D1Ev();
Name_Map name_map_S7258C12[] = {
  NSPAIR(_ZN8S7258C12C1Ev),
  NSPAIR(_ZN8S7258C12D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20956C5;
extern VTBL_ENTRY _ZTI8S20956C5[];
extern Class_Descriptor cd_S7258C3;
extern VTBL_ENTRY _ZTI7S7258C3[];
extern Class_Descriptor cd_S20956C5;
extern VTBL_ENTRY _ZTI8S20956C5[];
extern Class_Descriptor cd_S7258C2;
extern VTBL_ENTRY _ZTI7S7258C2[];
extern  VTBL_ENTRY _ZTV7S7258C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7258C2[];
extern Class_Descriptor cd_S20956C5;
extern VTBL_ENTRY _ZTI8S20956C5[];
extern Class_Descriptor cd_S7258C3;
extern VTBL_ENTRY _ZTI7S7258C3[];
static Base_Class bases_S7258C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20956C5,    ABISELECT(2416,1900), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S7258C3,    ABISELECT(2416,1900), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S20956C5,    ABISELECT(2664,2096), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S7258C2,    ABISELECT(1816,1420), //bcp->offset
    5, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20956C5,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S7258C3,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S7258C12[];
static  VTBL_ENTRY vtc_S7258C12[] = {
  ABISELECT(2664,2096),
  ABISELECT(2416,1900),
  ABISELECT(1816,1420),
  0,
  (VTBL_ENTRY)&(_ZTI8S7258C12[0]),
  ABISELECT(848,676),
  ABISELECT(600,480),
  ABISELECT(-1816,-1420),
  (VTBL_ENTRY)&(_ZTI8S7258C12[0]),
};
extern VTBL_ENTRY _ZTV8S7258C12[];
static  VTBL_ENTRY _tg__ZTV7S7258C2__8S7258C12[] = {
  ABISELECT(848,676),
  ABISELECT(600,480),
  0,
  (VTBL_ENTRY)&(_ZTI7S7258C2[0]),
};
static  VTT_ENTRY vtt_S7258C12[] = {
  {&(_ZTV8S7258C12[5]),  5,9},
  {&(_ZTV8S7258C12[9]),  9,9},
  {&(_tg__ZTV7S7258C2__8S7258C12[4]),  4,4},
};
extern VTBL_ENTRY _ZTI8S7258C12[];
extern  VTBL_ENTRY _ZTV8S7258C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7258C12[];
Class_Descriptor cd_S7258C12 = {  "S7258C12", // class name
  bases_S7258C12, 6,
  &(vtc_S7258C12[0]), // expected_vtbl_contents
  &(vtt_S7258C12[0]), // expected_vtt_contents
  ABISELECT(2720,2140), // object size
  NSPAIRA(_ZTI8S7258C12),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S7258C12),9, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7258C12),3, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7258C16  : virtual S20956C5 , S7258C2 {
  void *s7258c16f0;
  char s7258c16f1[9];
  ::S7258C2 s7258c16f2;
  ::S7258C3 s7258c16f3;
  __tsi64 s7258c16f4:37;
  char s7258c16f5;
  ::S7258C3 s7258c16f6;
  char s7258c16f7:8;
  void *s7258c16f8;
  char s7258c16f9;
  int s7258c16f10;
  int s7258c16f11;
  ~S7258C16(); // tgen
  S7258C16(); // tgen
};
//SIG(-1 S7258C16) C1{ VBC2{ m FL Fi[4] Fc FL Fp[2]} BC3{ VBC4{ BC2 Fi FC2 FC2 Fi Fp FL[6] Fp} VBC2 FC2 Fs Fi FC4 FL[4] FC4} Fp Fc[9] FC3 FC4 FL:37 Fc FC4 Fc:8 Fp Fc Fi[2]}


S7258C16 ::~S7258C16(){ note_dtor("S7258C16", this);} // tgen
S7258C16 ::S7258C16(){ note_ctor("S7258C16", this);} // tgen

static void Test_S7258C16()
{
  extern Class_Descriptor cd_S7258C16;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(297,470)];
    init_test(&cd_S7258C16, buf);
    S7258C16 *dp, &lv = *(dp=new (buf) S7258C16());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(2368,1876), "sizeof(S7258C16)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7258C16)");
    /*is_ambiguous_... S7258C16::S20956C5 */ AMB_check_base_class_offset(lv, (S20956C5*), ABISELECT(2064,1636), "S7258C16");
    /*is_ambiguous_... S7258C2::S20956C5 */ AMB_check_base_class_offset(lv, (S20956C5*)(S7258C2*), ABISELECT(2064,1636), "S7258C16");
    check_base_class_offset(lv, (S20956C5*)(S7258C3*), ABISELECT(2120,1680), "S7258C16");
    check_base_class_offset(lv, (S7258C3*)(S7258C2*), ABISELECT(2120,1680), "S7258C16");
    check_base_class_offset(lv, (S7258C2*), 0, "S7258C16");
    check_field_offset(lv, s7258c16f0, ABISELECT(600,480), "S7258C16.s7258c16f0");
    check_field_offset(lv, s7258c16f1, ABISELECT(608,484), "S7258C16.s7258c16f1");
    check_field_offset(lv, s7258c16f2, ABISELECT(624,496), "S7258C16.s7258c16f2");
    check_field_offset(lv, s7258c16f3, ABISELECT(1528,1216), "S7258C16.s7258c16f3");
    set_bf_and_test(lv, s7258c16f4, ABISELECT(1776,1412), 0, 37, 1, "S7258C16");
    set_bf_and_test(lv, s7258c16f4, ABISELECT(1776,1412), 0, 37, hide_sll(1LL<<36), "S7258C16");
    check_field_offset(lv, s7258c16f5, ABISELECT(1781,1417), "S7258C16.s7258c16f5");
    check_field_offset(lv, s7258c16f6, ABISELECT(1784,1420), "S7258C16.s7258c16f6");
    set_bf_and_test(lv, s7258c16f7, ABISELECT(2032,1616), 0, 8, 1, "S7258C16");
    set_bf_and_test(lv, s7258c16f7, ABISELECT(2032,1616), 0, 8, hide_sll(1LL<<7), "S7258C16");
    check_field_offset(lv, s7258c16f8, ABISELECT(2040,1620), "S7258C16.s7258c16f8");
    check_field_offset(lv, s7258c16f9, ABISELECT(2048,1624), "S7258C16.s7258c16f9");
    check_field_offset(lv, s7258c16f10, ABISELECT(2052,1628), "S7258C16.s7258c16f10");
    check_field_offset(lv, s7258c16f11, ABISELECT(2056,1632), "S7258C16.s7258c16f11");
    test_class_info(&lv, &cd_S7258C16);
    dp->~S7258C16();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7258C16(Test_S7258C16, "S7258C16", ABISELECT(2368,1876));

#else // __cplusplus

extern void _ZN8S7258C16C1Ev();
extern void _ZN8S7258C16D1Ev();
Name_Map name_map_S7258C16[] = {
  NSPAIR(_ZN8S7258C16C1Ev),
  NSPAIR(_ZN8S7258C16D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20956C5;
extern VTBL_ENTRY _ZTI8S20956C5[];
extern Class_Descriptor cd_S20956C5;
extern VTBL_ENTRY _ZTI8S20956C5[];
extern Class_Descriptor cd_S7258C3;
extern VTBL_ENTRY _ZTI7S7258C3[];
extern Class_Descriptor cd_S7258C2;
extern VTBL_ENTRY _ZTI7S7258C2[];
extern  VTBL_ENTRY _ZTV7S7258C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7258C2[];
static Base_Class bases_S7258C16[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20956C5,    ABISELECT(2064,1636), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20956C5,    ABISELECT(2120,1680), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S7258C3,    ABISELECT(2120,1680), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S7258C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S7258C16[];
static  VTBL_ENTRY vtc_S7258C16[] = {
  ABISELECT(2064,1636),
  ABISELECT(2120,1680),
  0,
  (VTBL_ENTRY)&(_ZTI8S7258C16[0]),
};
extern VTBL_ENTRY _ZTV8S7258C16[];
static  VTBL_ENTRY _tg__ZTV7S7258C2__8S7258C16[] = {
  ABISELECT(2064,1636),
  ABISELECT(2120,1680),
  0,
  (VTBL_ENTRY)&(_ZTI7S7258C2[0]),
};
static  VTT_ENTRY vtt_S7258C16[] = {
  {&(_ZTV8S7258C16[4]),  4,4},
  {&(_tg__ZTV7S7258C2__8S7258C16[4]),  4,4},
};
extern VTBL_ENTRY _ZTI8S7258C16[];
extern  VTBL_ENTRY _ZTV8S7258C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7258C16[];
Class_Descriptor cd_S7258C16 = {  "S7258C16", // class name
  bases_S7258C16, 4,
  &(vtc_S7258C16[0]), // expected_vtbl_contents
  &(vtt_S7258C16[0]), // expected_vtt_contents
  ABISELECT(2368,1876), // object size
  NSPAIRA(_ZTI8S7258C16),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S7258C16),4, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7258C16),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7258C15  : virtual S7258C8 , S7258C16 {
  int s7258c15f0;
  int s7258c15f1;
  short s7258c15f2;
  ::S20956C10 s7258c15f3;
  int s7258c15f4;
  int s7258c15f5;
  short s7258c15f6;
  int s7258c15f7;
  int s7258c15f8;
  virtual void  v6(); // _ZN8S7258C152v6Ev
  virtual void  v7(); // _ZN8S7258C152v7Ev
  ~S7258C15(); // tgen
  S7258C15(); // tgen
};
//SIG(-1 S7258C15) C1{ VBC2{ BC3{ BC4{ m FL Fi[4] Fc FL Fp[2]} Fi FC4 FC4 Fi Fp FL[6] Fp} VBC4 VBC5{ VBC4 vd v3 v4 v5 Fi[2] FC4 Fi FC3 Fp FC4 Fc:3} VBC6{ VBC3 VBC4 FC4 Fs Fi FC3 FL[4] FC3} vd v6 v7 Fi FC7{} FD Fp FC5[2] FD FL Fi FC6} BC8{ VBC4 BC6 Fp Fc[9] FC6 FC3 FL:37 Fc FC3 Fc:8 Fp Fc Fi[2]} v1 v2 Fi[2] Fs FU9{ m Fp FL Fi Fc Fi FL Fl FL Fs Fp FD Fc[6]} Fi Fi Fs Fi Fi}


void  S7258C15 ::v6(){vfunc_called(this, "_ZN8S7258C152v6Ev");}
void  S7258C15 ::v7(){vfunc_called(this, "_ZN8S7258C152v7Ev");}
S7258C15 ::~S7258C15(){ note_dtor("S7258C15", this);} // tgen
S7258C15 ::S7258C15(){ note_ctor("S7258C15", this);} // tgen

static void Test_S7258C15()
{
  extern Class_Descriptor cd_S7258C15;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(350,1096)];
    init_test(&cd_S7258C15, buf);
    S7258C15 *dp, &lv = *(dp=new (buf) S7258C15());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(5584,4380), "sizeof(S7258C15)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7258C15)");
    /*is_ambiguous_... S7258C8::S7258C3 */ AMB_check_base_class_offset(lv, (S20956C5*)(S7258C3*)(S7258C8*), ABISELECT(2136,1684), "S7258C15");
    /*is_ambiguous_... S7258C8::S7258C3 */ AMB_check_base_class_offset(lv, (S7258C3*)(S7258C8*), ABISELECT(2136,1684), "S7258C15");
    /*is_ambiguous_... S7258C8::S20956C5 */ AMB_check_base_class_offset(lv, (S20956C5*)(S7258C8*), ABISELECT(4280,3352), "S7258C15");
    check_base_class_offset(lv, (S20956C5*)(S7258C7*), ABISELECT(4280,3352), "S7258C15");
    /*is_ambiguous_... S7258C15::S7258C2 */ AMB_check_base_class_offset(lv, (S20956C5*)(S7258C2*), ABISELECT(4280,3352), "S7258C15");
    /*is_ambiguous_... S7258C16::S20956C5 */ AMB_check_base_class_offset(lv, (S20956C5*)(S7258C16*), ABISELECT(4280,3352), "S7258C15");
    /*is_ambiguous_... S7258C2::S20956C5 */ AMB_check_base_class_offset(lv, (S20956C5*)(S7258C2*)(S7258C16*), ABISELECT(4280,3352), "S7258C15");
    check_base_class_offset(lv, (S7258C7*)(S7258C8*), ABISELECT(4336,3396), "S7258C15");
    /*is_ambiguous_... S7258C15::S7258C3 */ AMB_check_base_class_offset(lv, (S20956C5*)(S7258C3*), ABISELECT(5336,4184), "S7258C15");
    /*is_ambiguous_... S7258C15::S7258C2 */ AMB_check_base_class_offset(lv, (S7258C3*)(S7258C2*), ABISELECT(5336,4184), "S7258C15");
    check_base_class_offset(lv, (S7258C3*)(S7258C2*)(S7258C16*), ABISELECT(5336,4184), "S7258C15");
    check_base_class_offset(lv, (S7258C2*)(S7258C8*), ABISELECT(4736,3704), "S7258C15");
    check_base_class_offset(lv, (S7258C8*), ABISELECT(2128,1680), "S7258C15");
    check_base_class_offset(lv, (S7258C2*)(S7258C16*), 0, "S7258C15");
    check_base_class_offset(lv, (S7258C16*), 0, "S7258C15");
    check_field_offset(lv, s7258c15f0, ABISELECT(2060,1636), "S7258C15.s7258c15f0");
    check_field_offset(lv, s7258c15f1, ABISELECT(2064,1640), "S7258C15.s7258c15f1");
    check_field_offset(lv, s7258c15f2, ABISELECT(2068,1644), "S7258C15.s7258c15f2");
    check_field_offset(lv, s7258c15f3, ABISELECT(2080,1648), "S7258C15.s7258c15f3");
    check_field_offset(lv, s7258c15f4, ABISELECT(2096,1660), "S7258C15.s7258c15f4");
    check_field_offset(lv, s7258c15f5, ABISELECT(2100,1664), "S7258C15.s7258c15f5");
    check_field_offset(lv, s7258c15f6, ABISELECT(2104,1668), "S7258C15.s7258c15f6");
    check_field_offset(lv, s7258c15f7, ABISELECT(2108,1672), "S7258C15.s7258c15f7");
    check_field_offset(lv, s7258c15f8, ABISELECT(2112,1676), "S7258C15.s7258c15f8");
    test_class_info(&lv, &cd_S7258C15);
    dp->~S7258C15();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7258C15(Test_S7258C15, "S7258C15", ABISELECT(5584,4380));

#else // __cplusplus

extern void _ZN8S7258C15C1Ev();
extern void _ZN8S7258C15D1Ev();
Name_Map name_map_S7258C15[] = {
  NSPAIR(_ZN8S7258C15C1Ev),
  NSPAIR(_ZN8S7258C15D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20956C5;
extern VTBL_ENTRY _ZTI8S20956C5[];
extern Class_Descriptor cd_S7258C3;
extern VTBL_ENTRY _ZTI7S7258C3[];
extern Class_Descriptor cd_S20956C5;
extern VTBL_ENTRY _ZTI8S20956C5[];
extern Class_Descriptor cd_S7258C7;
extern VTBL_ENTRY _ZTI7S7258C7[];
extern  VTBL_ENTRY _ZTV7S7258C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7258C7[];
extern Class_Descriptor cd_S20956C5;
extern VTBL_ENTRY _ZTI8S20956C5[];
extern Class_Descriptor cd_S7258C3;
extern VTBL_ENTRY _ZTI7S7258C3[];
extern Class_Descriptor cd_S7258C2;
extern VTBL_ENTRY _ZTI7S7258C2[];
extern  VTBL_ENTRY _ZTV7S7258C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7258C2[];
extern Class_Descriptor cd_S7258C8;
extern VTBL_ENTRY _ZTI7S7258C8[];
extern  VTBL_ENTRY _ZTV7S7258C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7258C8[];
extern Class_Descriptor cd_S7258C2;
extern VTBL_ENTRY _ZTI7S7258C2[];
extern  VTBL_ENTRY _ZTV7S7258C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7258C2[];
extern Class_Descriptor cd_S7258C16;
extern VTBL_ENTRY _ZTI8S7258C16[];
extern  VTBL_ENTRY _ZTV8S7258C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7258C16[];
static Base_Class bases_S7258C15[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20956C5,    ABISELECT(2136,1684), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S7258C3,    ABISELECT(2136,1684), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S20956C5,    ABISELECT(4280,3352), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S7258C7,    ABISELECT(4336,3396), //bcp->offset
    24, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S20956C5,    ABISELECT(5336,4184), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S7258C3,    ABISELECT(5336,4184), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S7258C2,    ABISELECT(4736,3704), //bcp->offset
    36, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S7258C8,    ABISELECT(2128,1680), //bcp->offset
    11, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7258C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S7258C16,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S7258C15[];
extern void _ZN8S7258C152v6Ev();
extern void _ZN8S7258C152v7Ev();
extern void _ZN8S7258C15D1Ev();
extern void _ZN8S7258C15D0Ev();
extern void ABISELECT(_ZTv0_n56_N8S7258C15D1Ev,_ZTv0_n28_N8S7258C15D1Ev)();
extern void ABISELECT(_ZThn2128_N8S7258C15D1Ev,_ZThn1680_N8S7258C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S7258C15D0Ev,_ZTv0_n28_N8S7258C15D0Ev)();
extern void ABISELECT(_ZThn2128_N8S7258C15D0Ev,_ZThn1680_N8S7258C15D0Ev)() __attribute__((weak));
extern void _ZN7S7258C82v4Ev();
extern void _ZN7S7258C82v5Ev();
extern void ABISELECT(_ZTv0_n32_N8S7258C15D1Ev,_ZTv0_n16_N8S7258C15D1Ev)();
extern void ABISELECT(_ZThn4336_N8S7258C15D1Ev,_ZThn3396_N8S7258C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S7258C15D0Ev,_ZTv0_n16_N8S7258C15D0Ev)();
extern void ABISELECT(_ZThn4336_N8S7258C15D0Ev,_ZThn3396_N8S7258C15D0Ev)() __attribute__((weak));
extern void _ZN7S7258C72v1Ev();
extern void _ZN7S7258C72v2Ev();
extern void _ZN7S7258C72v3Ev();
static  VTBL_ENTRY vtc_S7258C15[] = {
  ABISELECT(4736,3704),
  ABISELECT(4336,3396),
  ABISELECT(2128,1680),
  ABISELECT(4280,3352),
  ABISELECT(5336,4184),
  0,
  (VTBL_ENTRY)&(_ZTI8S7258C15[0]),
  (VTBL_ENTRY)&_ZN8S7258C152v6Ev,
  (VTBL_ENTRY)&_ZN8S7258C152v7Ev,
  (VTBL_ENTRY)&_ZN8S7258C15D1Ev,
  (VTBL_ENTRY)&_ZN8S7258C15D0Ev,
  0,
  0,
  ABISELECT(-2128,-1680),
  ABISELECT(3208,2504),
  ABISELECT(2608,2024),
  ABISELECT(2208,1716),
  ABISELECT(2152,1672),
  ABISELECT(-2128,-1680),
  (VTBL_ENTRY)&(_ZTI8S7258C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S7258C15D1Ev,_ZTv0_n28_N8S7258C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S7258C15D0Ev,_ZTv0_n28_N8S7258C15D0Ev),
  (VTBL_ENTRY)&_ZN7S7258C82v4Ev,
  (VTBL_ENTRY)&_ZN7S7258C82v5Ev,
  0,
  0,
  0,
  ABISELECT(-4336,-3396),
  ABISELECT(-56,-44),
  ABISELECT(-4336,-3396),
  (VTBL_ENTRY)&(_ZTI8S7258C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S7258C15D1Ev,_ZTv0_n16_N8S7258C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S7258C15D0Ev,_ZTv0_n16_N8S7258C15D0Ev),
  (VTBL_ENTRY)&_ZN7S7258C72v1Ev,
  (VTBL_ENTRY)&_ZN7S7258C72v2Ev,
  (VTBL_ENTRY)&_ZN7S7258C72v3Ev,
  ABISELECT(-456,-352),
  ABISELECT(600,480),
  ABISELECT(-4736,-3704),
  (VTBL_ENTRY)&(_ZTI8S7258C15[0]),
};
extern VTBL_ENTRY _ZTV8S7258C15[];
static  VTBL_ENTRY _tg__ZTV8S7258C16__8S7258C15[] = {
  ABISELECT(4280,3352),
  ABISELECT(5336,4184),
  0,
  (VTBL_ENTRY)&(_ZTI8S7258C16[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7258C28S7258C16__A1__8S7258C15[] = {
  ABISELECT(4280,3352),
  ABISELECT(5336,4184),
  0,
  (VTBL_ENTRY)&(_ZTI7S7258C2[0]),
};
extern void _ZN7S7258C8D1Ev();
extern void _ZN7S7258C8D0Ev();
extern void _ZN7S7258C82v4Ev();
extern void _ZN7S7258C82v5Ev();
static  VTBL_ENTRY _tg__ZTV7S7258C8__8S7258C15[] = {
  ABISELECT(3208,2504),
  ABISELECT(2608,2024),
  ABISELECT(2208,1716),
  ABISELECT(2152,1672),
  0,
  (VTBL_ENTRY)&(_ZTI7S7258C8[0]),
  (VTBL_ENTRY)&_ZN7S7258C8D1Ev,
  (VTBL_ENTRY)&_ZN7S7258C8D0Ev,
  (VTBL_ENTRY)&_ZN7S7258C82v4Ev,
  (VTBL_ENTRY)&_ZN7S7258C82v5Ev,
};
extern void ABISELECT(_ZTv0_n32_N7S7258C8D1Ev,_ZTv0_n16_N7S7258C8D1Ev)();
extern void ABISELECT(_ZThn2208_N7S7258C8D1Ev,_ZThn1716_N7S7258C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S7258C8D0Ev,_ZTv0_n16_N7S7258C8D0Ev)();
extern void ABISELECT(_ZThn2208_N7S7258C8D0Ev,_ZThn1716_N7S7258C8D0Ev)() __attribute__((weak));
extern void _ZN7S7258C72v1Ev();
extern void _ZN7S7258C72v2Ev();
extern void _ZN7S7258C72v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7258C7__7S7258C8__8S7258C15[] = {
  0,
  0,
  0,
  ABISELECT(-2208,-1716),
  ABISELECT(-56,-44),
  ABISELECT(-2208,-1716),
  (VTBL_ENTRY)&(_ZTI7S7258C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7258C8D1Ev,_ZTv0_n16_N7S7258C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7258C8D0Ev,_ZTv0_n16_N7S7258C8D0Ev),
  (VTBL_ENTRY)&_ZN7S7258C72v1Ev,
  (VTBL_ENTRY)&_ZN7S7258C72v2Ev,
  (VTBL_ENTRY)&_ZN7S7258C72v3Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7258C2__7S7258C8__8S7258C15[] = {
  ABISELECT(-456,-352),
  ABISELECT(600,480),
  ABISELECT(-2608,-2024),
  (VTBL_ENTRY)&(_ZTI7S7258C8[0]),
};
extern void _ZN7S7258C7D1Ev();
extern void _ZN7S7258C7D0Ev();
extern void _ZN7S7258C72v1Ev();
extern void _ZN7S7258C72v2Ev();
extern void _ZN7S7258C72v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7258C7__8S7258C15[] = {
  ABISELECT(-56,-44),
  0,
  (VTBL_ENTRY)&(_ZTI7S7258C7[0]),
  (VTBL_ENTRY)&_ZN7S7258C7D1Ev,
  (VTBL_ENTRY)&_ZN7S7258C7D0Ev,
  (VTBL_ENTRY)&_ZN7S7258C72v1Ev,
  (VTBL_ENTRY)&_ZN7S7258C72v2Ev,
  (VTBL_ENTRY)&_ZN7S7258C72v3Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7258C2__8S7258C15[] = {
  ABISELECT(-456,-352),
  ABISELECT(600,480),
  0,
  (VTBL_ENTRY)&(_ZTI7S7258C2[0]),
};
static  VTT_ENTRY vtt_S7258C15[] = {
  {&(_ZTV8S7258C15[7]),  7,40},
  {&(_tg__ZTV8S7258C16__8S7258C15[4]),  4,4},
  {&(_tg__ZTV7S7258C28S7258C16__A1__8S7258C15[4]),  4,4},
  {&(_ZTV8S7258C15[20]),  20,40},
  {&(_ZTV8S7258C15[31]),  31,40},
  {&(_ZTV8S7258C15[40]),  40,40},
  {&(_tg__ZTV7S7258C8__8S7258C15[6]),  6,10},
  {&(_tg__ZTV7S7258C7__7S7258C8__8S7258C15[7]),  7,12},
  {&(_tg__ZTV7S7258C2__7S7258C8__8S7258C15[4]),  4,4},
  {&(_tg__ZTV7S7258C7__8S7258C15[3]),  3,8},
  {&(_tg__ZTV7S7258C2__8S7258C15[4]),  4,4},
};
extern VTBL_ENTRY _ZTI8S7258C15[];
extern  VTBL_ENTRY _ZTV8S7258C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7258C15[];
static VTBL_ENTRY alt_thunk_names17[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7258C8D0Ev,_ZTv0_n16_N7S7258C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2208_N7S7258C8D0Ev,_ZThn1716_N7S7258C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7258C8D1Ev,_ZTv0_n16_N7S7258C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2208_N7S7258C8D1Ev,_ZThn1716_N7S7258C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S7258C15D0Ev,_ZTv0_n16_N8S7258C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4336_N8S7258C15D0Ev,_ZThn3396_N8S7258C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S7258C15D1Ev,_ZTv0_n16_N8S7258C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4336_N8S7258C15D1Ev,_ZThn3396_N8S7258C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S7258C15D0Ev,_ZTv0_n28_N8S7258C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2128_N8S7258C15D0Ev,_ZThn1680_N8S7258C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S7258C15D1Ev,_ZTv0_n28_N8S7258C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2128_N8S7258C15D1Ev,_ZThn1680_N8S7258C15D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7258C15 = {  "S7258C15", // class name
  bases_S7258C15, 10,
  &(vtc_S7258C15[0]), // expected_vtbl_contents
  &(vtt_S7258C15[0]), // expected_vtt_contents
  ABISELECT(5584,4380), // object size
  NSPAIRA(_ZTI8S7258C15),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S7258C15),40, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7258C15),11, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names17,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7258C14  : virtual S7258C15 {
  ::S7258C7 s7258c14f0[2];
  long double s7258c14f1;
  __tsi64 s7258c14f2;
  ::S20956C5 s7258c14f3;
  void *s7258c14f4;
  virtual  ~S7258C14(); // _ZN8S7258C14D2Ev
  S7258C14(); // tgen
};
//SIG(-1 S7258C14) C1{ VBC2{ VBC3{ BC4{ BC5{ m FL Fi[4] Fc FL Fp[2]} Fi FC5 FC5 Fi Fp FL[6] Fp} VBC5 VBC6{ VBC5 vd v1 v2 v3 Fi[2] FC5 Fi FC4 Fp FC5 Fc:3} VBC7{ VBC4 VBC5 FC5 Fs Fi FC4 FL[4] FC4} vd v4 v5 Fi FC8{} FD Fp FC6[2] FD FL Fi FC7} BC9{ VBC5 BC7 Fp Fc[9] FC7 FC4 FL:37 Fc FC4 Fc:8 Fp Fc Fi[2]} v6 v7 Fi[2] Fs FU10{ m Fp FL Fi Fc Fi FL Fl FL Fs Fp FD Fc[6]} Fi Fi Fs Fi Fi} vd FC6[2] FD FL FC5 Fp}


 S7258C14 ::~S7258C14(){ note_dtor("S7258C14", this);}
S7258C14 ::S7258C14(){ note_ctor("S7258C14", this);} // tgen

static void Test_S7258C14()
{
  extern Class_Descriptor cd_S7258C14;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(414,1290)];
    init_test(&cd_S7258C14, buf);
    S7258C14 *dp, &lv = *(dp=new (buf) S7258C14());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(6608,5156), "sizeof(S7258C14)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7258C14)");
    /*is_ambiguous_... S7258C8::S7258C3 */ AMB_check_base_class_offset(lv, (S20956C5*)(S7258C3*)(S7258C8*), ABISELECT(3160,2460), "S7258C14");
    /*is_ambiguous_... S7258C8::S7258C3 */ AMB_check_base_class_offset(lv, (S7258C3*)(S7258C8*), ABISELECT(3160,2460), "S7258C14");
    /*is_ambiguous_... S7258C8::S20956C5 */ AMB_check_base_class_offset(lv, (S20956C5*)(S7258C8*), ABISELECT(5304,4128), "S7258C14");
    check_base_class_offset(lv, (S20956C5*)(S7258C7*), ABISELECT(5304,4128), "S7258C14");
    /*is_ambiguous_... S7258C14::S7258C2 */ AMB_check_base_class_offset(lv, (S20956C5*)(S7258C2*), ABISELECT(5304,4128), "S7258C14");
    /*is_ambiguous_... S7258C16::S20956C5 */ AMB_check_base_class_offset(lv, (S20956C5*)(S7258C16*)(S7258C15*), ABISELECT(5304,4128), "S7258C14");
    /*is_ambiguous_... S7258C2::S20956C5 */ AMB_check_base_class_offset(lv, (S20956C5*)(S7258C2*)(S7258C16*)(S7258C15*), ABISELECT(5304,4128), "S7258C14");
    check_base_class_offset(lv, (S7258C7*)(S7258C8*), ABISELECT(5360,4172), "S7258C14");
    /*is_ambiguous_... S7258C14::S7258C3 */ AMB_check_base_class_offset(lv, (S20956C5*)(S7258C3*), ABISELECT(6360,4960), "S7258C14");
    /*is_ambiguous_... S7258C14::S7258C2 */ AMB_check_base_class_offset(lv, (S7258C3*)(S7258C2*), ABISELECT(6360,4960), "S7258C14");
    check_base_class_offset(lv, (S7258C3*)(S7258C2*)(S7258C16*)(S7258C15*), ABISELECT(6360,4960), "S7258C14");
    check_base_class_offset(lv, (S7258C2*)(S7258C8*), ABISELECT(5760,4480), "S7258C14");
    check_base_class_offset(lv, (S7258C8*)(S7258C15*), ABISELECT(3152,2456), "S7258C14");
    check_base_class_offset(lv, (S7258C2*)(S7258C16*)(S7258C15*), ABISELECT(1024,776), "S7258C14");
    check_base_class_offset(lv, (S7258C16*)(S7258C15*), ABISELECT(1024,776), "S7258C14");
    check_base_class_offset(lv, (S7258C15*), ABISELECT(1024,776), "S7258C14");
    check_field_offset(lv, s7258c14f0, ABISELECT(8,4), "S7258C14.s7258c14f0");
    check_field_offset(lv, s7258c14f1, ABISELECT(928,708), "S7258C14.s7258c14f1");
    check_field_offset(lv, s7258c14f2, ABISELECT(944,720), "S7258C14.s7258c14f2");
    check_field_offset(lv, s7258c14f3, ABISELECT(952,728), "S7258C14.s7258c14f3");
    check_field_offset(lv, s7258c14f4, ABISELECT(1008,772), "S7258C14.s7258c14f4");
    test_class_info(&lv, &cd_S7258C14);
    dp->~S7258C14();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7258C14(Test_S7258C14, "S7258C14", ABISELECT(6608,5156));

#else // __cplusplus

extern void _ZN8S7258C14C1Ev();
extern void _ZN8S7258C14D2Ev();
Name_Map name_map_S7258C14[] = {
  NSPAIR(_ZN8S7258C14C1Ev),
  NSPAIR(_ZN8S7258C14D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20956C5;
extern VTBL_ENTRY _ZTI8S20956C5[];
extern Class_Descriptor cd_S7258C3;
extern VTBL_ENTRY _ZTI7S7258C3[];
extern Class_Descriptor cd_S20956C5;
extern VTBL_ENTRY _ZTI8S20956C5[];
extern Class_Descriptor cd_S7258C7;
extern VTBL_ENTRY _ZTI7S7258C7[];
extern  VTBL_ENTRY _ZTV7S7258C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7258C7[];
extern Class_Descriptor cd_S20956C5;
extern VTBL_ENTRY _ZTI8S20956C5[];
extern Class_Descriptor cd_S7258C3;
extern VTBL_ENTRY _ZTI7S7258C3[];
extern Class_Descriptor cd_S7258C2;
extern VTBL_ENTRY _ZTI7S7258C2[];
extern  VTBL_ENTRY _ZTV7S7258C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7258C2[];
extern Class_Descriptor cd_S7258C8;
extern VTBL_ENTRY _ZTI7S7258C8[];
extern  VTBL_ENTRY _ZTV7S7258C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7258C8[];
extern Class_Descriptor cd_S7258C2;
extern VTBL_ENTRY _ZTI7S7258C2[];
extern  VTBL_ENTRY _ZTV7S7258C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7258C2[];
extern Class_Descriptor cd_S7258C16;
extern VTBL_ENTRY _ZTI8S7258C16[];
extern  VTBL_ENTRY _ZTV8S7258C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7258C16[];
extern Class_Descriptor cd_S7258C15;
extern VTBL_ENTRY _ZTI8S7258C15[];
extern  VTBL_ENTRY _ZTV8S7258C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7258C15[];
static Base_Class bases_S7258C14[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20956C5,    ABISELECT(3160,2460), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S7258C3,    ABISELECT(3160,2460), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S20956C5,    ABISELECT(5304,4128), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S7258C7,    ABISELECT(5360,4172), //bcp->offset
    37, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S20956C5,    ABISELECT(6360,4960), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S7258C3,    ABISELECT(6360,4960), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S7258C2,    ABISELECT(5760,4480), //bcp->offset
    49, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S7258C8,    ABISELECT(3152,2456), //bcp->offset
    24, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S7258C2,    ABISELECT(1024,776), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S7258C16,    ABISELECT(1024,776), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S7258C15,    ABISELECT(1024,776), //bcp->offset
    10, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S7258C14[];
extern void _ZN8S7258C14D1Ev();
extern void _ZN8S7258C14D0Ev();
extern void _ZN8S7258C152v6Ev();
extern void _ZN8S7258C152v7Ev();
extern void ABISELECT(_ZTv0_n80_N8S7258C14D1Ev,_ZTv0_n40_N8S7258C14D1Ev)();
extern void ABISELECT(_ZThn1024_N8S7258C14D1Ev,_ZThn776_N8S7258C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N8S7258C14D0Ev,_ZTv0_n40_N8S7258C14D0Ev)();
extern void ABISELECT(_ZThn1024_N8S7258C14D0Ev,_ZThn776_N8S7258C14D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S7258C14D1Ev,_ZTv0_n28_N8S7258C14D1Ev)();
extern void ABISELECT(_ZThn3152_N8S7258C14D1Ev,_ZThn2456_N8S7258C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S7258C14D0Ev,_ZTv0_n28_N8S7258C14D0Ev)();
extern void ABISELECT(_ZThn3152_N8S7258C14D0Ev,_ZThn2456_N8S7258C14D0Ev)() __attribute__((weak));
extern void _ZN7S7258C82v4Ev();
extern void _ZN7S7258C82v5Ev();
extern void ABISELECT(_ZTv0_n32_N8S7258C14D1Ev,_ZTv0_n16_N8S7258C14D1Ev)();
extern void ABISELECT(_ZThn5360_N8S7258C14D1Ev,_ZThn4172_N8S7258C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S7258C14D0Ev,_ZTv0_n16_N8S7258C14D0Ev)();
extern void ABISELECT(_ZThn5360_N8S7258C14D0Ev,_ZThn4172_N8S7258C14D0Ev)() __attribute__((weak));
extern void _ZN7S7258C72v1Ev();
extern void _ZN7S7258C72v2Ev();
extern void _ZN7S7258C72v3Ev();
static  VTBL_ENTRY vtc_S7258C14[] = {
  ABISELECT(6360,4960),
  ABISELECT(5760,4480),
  ABISELECT(5360,4172),
  ABISELECT(5304,4128),
  ABISELECT(3152,2456),
  ABISELECT(1024,776),
  0,
  (VTBL_ENTRY)&(_ZTI8S7258C14[0]),
  (VTBL_ENTRY)&_ZN8S7258C14D1Ev,
  (VTBL_ENTRY)&_ZN8S7258C14D0Ev,
  ABISELECT(-1024,-776),
  0,
  0,
  ABISELECT(4736,3704),
  ABISELECT(4336,3396),
  ABISELECT(2128,1680),
  ABISELECT(4280,3352),
  ABISELECT(5336,4184),
  ABISELECT(-1024,-776),
  (VTBL_ENTRY)&(_ZTI8S7258C14[0]),
  (VTBL_ENTRY)&_ZN8S7258C152v6Ev,
  (VTBL_ENTRY)&_ZN8S7258C152v7Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S7258C14D1Ev,_ZTv0_n40_N8S7258C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S7258C14D0Ev,_ZTv0_n40_N8S7258C14D0Ev),
  0,
  0,
  ABISELECT(-3152,-2456),
  ABISELECT(3208,2504),
  ABISELECT(2608,2024),
  ABISELECT(2208,1716),
  ABISELECT(2152,1672),
  ABISELECT(-3152,-2456),
  (VTBL_ENTRY)&(_ZTI8S7258C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S7258C14D1Ev,_ZTv0_n28_N8S7258C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S7258C14D0Ev,_ZTv0_n28_N8S7258C14D0Ev),
  (VTBL_ENTRY)&_ZN7S7258C82v4Ev,
  (VTBL_ENTRY)&_ZN7S7258C82v5Ev,
  0,
  0,
  0,
  ABISELECT(-5360,-4172),
  ABISELECT(-56,-44),
  ABISELECT(-5360,-4172),
  (VTBL_ENTRY)&(_ZTI8S7258C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S7258C14D1Ev,_ZTv0_n16_N8S7258C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S7258C14D0Ev,_ZTv0_n16_N8S7258C14D0Ev),
  (VTBL_ENTRY)&_ZN7S7258C72v1Ev,
  (VTBL_ENTRY)&_ZN7S7258C72v2Ev,
  (VTBL_ENTRY)&_ZN7S7258C72v3Ev,
  ABISELECT(-456,-352),
  ABISELECT(600,480),
  ABISELECT(-5760,-4480),
  (VTBL_ENTRY)&(_ZTI8S7258C14[0]),
};
extern VTBL_ENTRY _ZTV8S7258C14[];
extern void _ZN8S7258C152v6Ev();
extern void _ZN8S7258C152v7Ev();
extern void _ZN8S7258C15D1Ev();
extern void _ZN8S7258C15D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7258C15__8S7258C14[] = {
  ABISELECT(4736,3704),
  ABISELECT(4336,3396),
  ABISELECT(2128,1680),
  ABISELECT(4280,3352),
  ABISELECT(5336,4184),
  0,
  (VTBL_ENTRY)&(_ZTI8S7258C15[0]),
  (VTBL_ENTRY)&_ZN8S7258C152v6Ev,
  (VTBL_ENTRY)&_ZN8S7258C152v7Ev,
  (VTBL_ENTRY)&_ZN8S7258C15D1Ev,
  (VTBL_ENTRY)&_ZN8S7258C15D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S7258C168S7258C15__8S7258C14[] = {
  ABISELECT(4280,3352),
  ABISELECT(5336,4184),
  0,
  (VTBL_ENTRY)&(_ZTI8S7258C16[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7258C28S7258C168S7258C15__A1__8S7258C14[] = {
  ABISELECT(4280,3352),
  ABISELECT(5336,4184),
  0,
  (VTBL_ENTRY)&(_ZTI7S7258C2[0]),
};
extern void ABISELECT(_ZTv0_n56_N8S7258C15D1Ev,_ZTv0_n28_N8S7258C15D1Ev)();
extern void ABISELECT(_ZThn2128_N8S7258C15D1Ev,_ZThn1680_N8S7258C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S7258C15D0Ev,_ZTv0_n28_N8S7258C15D0Ev)();
extern void ABISELECT(_ZThn2128_N8S7258C15D0Ev,_ZThn1680_N8S7258C15D0Ev)() __attribute__((weak));
extern void _ZN7S7258C82v4Ev();
extern void _ZN7S7258C82v5Ev();
static  VTBL_ENTRY _tg__ZTV7S7258C8__8S7258C15__8S7258C14[] = {
  0,
  0,
  ABISELECT(-2128,-1680),
  ABISELECT(3208,2504),
  ABISELECT(2608,2024),
  ABISELECT(2208,1716),
  ABISELECT(2152,1672),
  ABISELECT(-2128,-1680),
  (VTBL_ENTRY)&(_ZTI8S7258C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S7258C15D1Ev,_ZTv0_n28_N8S7258C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S7258C15D0Ev,_ZTv0_n28_N8S7258C15D0Ev),
  (VTBL_ENTRY)&_ZN7S7258C82v4Ev,
  (VTBL_ENTRY)&_ZN7S7258C82v5Ev,
};
extern void ABISELECT(_ZTv0_n32_N8S7258C15D1Ev,_ZTv0_n16_N8S7258C15D1Ev)();
extern void ABISELECT(_ZThn4336_N8S7258C15D1Ev,_ZThn3396_N8S7258C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S7258C15D0Ev,_ZTv0_n16_N8S7258C15D0Ev)();
extern void ABISELECT(_ZThn4336_N8S7258C15D0Ev,_ZThn3396_N8S7258C15D0Ev)() __attribute__((weak));
extern void _ZN7S7258C72v1Ev();
extern void _ZN7S7258C72v2Ev();
extern void _ZN7S7258C72v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7258C7__8S7258C15__8S7258C14[] = {
  0,
  0,
  0,
  ABISELECT(-4336,-3396),
  ABISELECT(-56,-44),
  ABISELECT(-4336,-3396),
  (VTBL_ENTRY)&(_ZTI8S7258C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S7258C15D1Ev,_ZTv0_n16_N8S7258C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S7258C15D0Ev,_ZTv0_n16_N8S7258C15D0Ev),
  (VTBL_ENTRY)&_ZN7S7258C72v1Ev,
  (VTBL_ENTRY)&_ZN7S7258C72v2Ev,
  (VTBL_ENTRY)&_ZN7S7258C72v3Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7258C2__8S7258C15__8S7258C14[] = {
  ABISELECT(-456,-352),
  ABISELECT(600,480),
  ABISELECT(-4736,-3704),
  (VTBL_ENTRY)&(_ZTI8S7258C15[0]),
};
extern void _ZN7S7258C8D1Ev();
extern void _ZN7S7258C8D0Ev();
extern void _ZN7S7258C82v4Ev();
extern void _ZN7S7258C82v5Ev();
static  VTBL_ENTRY _tg__ZTV7S7258C8__8S7258C14[] = {
  ABISELECT(3208,2504),
  ABISELECT(2608,2024),
  ABISELECT(2208,1716),
  ABISELECT(2152,1672),
  0,
  (VTBL_ENTRY)&(_ZTI7S7258C8[0]),
  (VTBL_ENTRY)&_ZN7S7258C8D1Ev,
  (VTBL_ENTRY)&_ZN7S7258C8D0Ev,
  (VTBL_ENTRY)&_ZN7S7258C82v4Ev,
  (VTBL_ENTRY)&_ZN7S7258C82v5Ev,
};
extern void ABISELECT(_ZTv0_n32_N7S7258C8D1Ev,_ZTv0_n16_N7S7258C8D1Ev)();
extern void ABISELECT(_ZThn2208_N7S7258C8D1Ev,_ZThn1716_N7S7258C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S7258C8D0Ev,_ZTv0_n16_N7S7258C8D0Ev)();
extern void ABISELECT(_ZThn2208_N7S7258C8D0Ev,_ZThn1716_N7S7258C8D0Ev)() __attribute__((weak));
extern void _ZN7S7258C72v1Ev();
extern void _ZN7S7258C72v2Ev();
extern void _ZN7S7258C72v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7258C7__7S7258C8__8S7258C14[] = {
  0,
  0,
  0,
  ABISELECT(-2208,-1716),
  ABISELECT(-56,-44),
  ABISELECT(-2208,-1716),
  (VTBL_ENTRY)&(_ZTI7S7258C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7258C8D1Ev,_ZTv0_n16_N7S7258C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7258C8D0Ev,_ZTv0_n16_N7S7258C8D0Ev),
  (VTBL_ENTRY)&_ZN7S7258C72v1Ev,
  (VTBL_ENTRY)&_ZN7S7258C72v2Ev,
  (VTBL_ENTRY)&_ZN7S7258C72v3Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7258C2__7S7258C8__8S7258C14[] = {
  ABISELECT(-456,-352),
  ABISELECT(600,480),
  ABISELECT(-2608,-2024),
  (VTBL_ENTRY)&(_ZTI7S7258C8[0]),
};
extern void _ZN7S7258C7D1Ev();
extern void _ZN7S7258C7D0Ev();
extern void _ZN7S7258C72v1Ev();
extern void _ZN7S7258C72v2Ev();
extern void _ZN7S7258C72v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7258C7__8S7258C14[] = {
  ABISELECT(-56,-44),
  0,
  (VTBL_ENTRY)&(_ZTI7S7258C7[0]),
  (VTBL_ENTRY)&_ZN7S7258C7D1Ev,
  (VTBL_ENTRY)&_ZN7S7258C7D0Ev,
  (VTBL_ENTRY)&_ZN7S7258C72v1Ev,
  (VTBL_ENTRY)&_ZN7S7258C72v2Ev,
  (VTBL_ENTRY)&_ZN7S7258C72v3Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7258C2__8S7258C14[] = {
  ABISELECT(-456,-352),
  ABISELECT(600,480),
  0,
  (VTBL_ENTRY)&(_ZTI7S7258C2[0]),
};
static  VTT_ENTRY vtt_S7258C14[] = {
  {&(_ZTV8S7258C14[8]),  8,53},
  {&(_ZTV8S7258C14[20]),  20,53},
  {&(_ZTV8S7258C14[33]),  33,53},
  {&(_ZTV8S7258C14[44]),  44,53},
  {&(_ZTV8S7258C14[53]),  53,53},
  {&(_tg__ZTV8S7258C15__8S7258C14[7]),  7,11},
  {&(_tg__ZTV8S7258C168S7258C15__8S7258C14[4]),  4,4},
  {&(_tg__ZTV7S7258C28S7258C168S7258C15__A1__8S7258C14[4]),  4,4},
  {&(_tg__ZTV7S7258C8__8S7258C15__8S7258C14[9]),  9,13},
  {&(_tg__ZTV7S7258C7__8S7258C15__8S7258C14[7]),  7,12},
  {&(_tg__ZTV7S7258C2__8S7258C15__8S7258C14[4]),  4,4},
  {&(_tg__ZTV7S7258C8__8S7258C14[6]),  6,10},
  {&(_tg__ZTV7S7258C7__7S7258C8__8S7258C14[7]),  7,12},
  {&(_tg__ZTV7S7258C2__7S7258C8__8S7258C14[4]),  4,4},
  {&(_tg__ZTV7S7258C7__8S7258C14[3]),  3,8},
  {&(_tg__ZTV7S7258C2__8S7258C14[4]),  4,4},
};
extern VTBL_ENTRY _ZTI8S7258C14[];
extern  VTBL_ENTRY _ZTV8S7258C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7258C14[];
static VTBL_ENTRY alt_thunk_names18[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7258C8D0Ev,_ZTv0_n16_N7S7258C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2208_N7S7258C8D0Ev,_ZThn1716_N7S7258C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7258C8D1Ev,_ZTv0_n16_N7S7258C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2208_N7S7258C8D1Ev,_ZThn1716_N7S7258C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S7258C15D0Ev,_ZTv0_n16_N8S7258C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4336_N8S7258C15D0Ev,_ZThn3396_N8S7258C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S7258C15D1Ev,_ZTv0_n16_N8S7258C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4336_N8S7258C15D1Ev,_ZThn3396_N8S7258C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S7258C15D0Ev,_ZTv0_n28_N8S7258C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2128_N8S7258C15D0Ev,_ZThn1680_N8S7258C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S7258C15D1Ev,_ZTv0_n28_N8S7258C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2128_N8S7258C15D1Ev,_ZThn1680_N8S7258C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S7258C14D0Ev,_ZTv0_n16_N8S7258C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5360_N8S7258C14D0Ev,_ZThn4172_N8S7258C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S7258C14D1Ev,_ZTv0_n16_N8S7258C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5360_N8S7258C14D1Ev,_ZThn4172_N8S7258C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S7258C14D0Ev,_ZTv0_n28_N8S7258C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3152_N8S7258C14D0Ev,_ZThn2456_N8S7258C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S7258C14D1Ev,_ZTv0_n28_N8S7258C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3152_N8S7258C14D1Ev,_ZThn2456_N8S7258C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S7258C14D0Ev,_ZTv0_n40_N8S7258C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1024_N8S7258C14D0Ev,_ZThn776_N8S7258C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S7258C14D1Ev,_ZTv0_n40_N8S7258C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1024_N8S7258C14D1Ev,_ZThn776_N8S7258C14D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7258C14 = {  "S7258C14", // class name
  bases_S7258C14, 11,
  &(vtc_S7258C14[0]), // expected_vtbl_contents
  &(vtt_S7258C14[0]), // expected_vtt_contents
  ABISELECT(6608,5156), // object size
  NSPAIRA(_ZTI8S7258C14),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S7258C14),53, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7258C14),16, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names18,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7258C11  : S7258C12 , virtual S7258C14 {
  int s7258c11f0;
  int s7258c11f1[7];
  virtual  ~S7258C11(); // _ZN8S7258C11D2Ev
  virtual void  v8(); // _ZN8S7258C112v8Ev
  S7258C11(); // tgen
};
//SIG(-1 S7258C11) C1{ BC2{ VBC3{ VBC4{ BC5{ m FL Fi[4] Fc FL Fp[2]} Fi FC5 FC5 Fi Fp FL[6] Fp} VBC5 FC5 Fs Fi FC4 FL[4] FC4} BC4 Fi[2] FC4 FC4[5] FU6{ m Fi[8] Fp FL Fc Fp[5] FD Fc[7] Fp Fc:1 Fi} Fi} VBC7{ VBC8{ VBC9{ BC4 VBC5 VBC10{ VBC5 vd v2 v3 v4 Fi[2] FC5 Fi FC4 Fp FC5 Fc:3} VBC3 vd v5 v6 Fi FC11{} FD Fp FC10[2] FD FL Fi FC3} BC12{ VBC5 BC3 Fp Fc[9] FC3 FC4 FL:37 Fc FC4 Fc:8 Fp Fc Fi Fi} v7 v8 Fi Fi Fs FU13{ m Fp FL Fi Fc Fi FL Fl FL Fs Fp FD Fc[6]} Fi Fi Fs Fi Fi} vd FC10[2] FD FL FC5 Fp} vd v1 Fi Fi[7]}


 S7258C11 ::~S7258C11(){ note_dtor("S7258C11", this);}
void  S7258C11 ::v8(){vfunc_called(this, "_ZN8S7258C112v8Ev");}
S7258C11 ::S7258C11(){ note_ctor("S7258C11", this);} // tgen

static void Test_S7258C11()
{
  extern Class_Descriptor cd_S7258C11;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(530,1653)];
    init_test(&cd_S7258C11, buf);
    S7258C11 *dp, &lv = *(dp=new (buf) S7258C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8464,6608), "sizeof(S7258C11)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7258C11)");
    /*is_ambiguous_... S7258C11::S7258C3 */ AMB_check_base_class_offset(lv, (S20956C5*)(S7258C3*), ABISELECT(2448,1932), "S7258C11");
    /*is_ambiguous_... S7258C11::S7258C2 */ AMB_check_base_class_offset(lv, (S7258C3*)(S7258C2*), ABISELECT(2448,1932), "S7258C11");
    check_base_class_offset(lv, (S7258C3*)(S7258C2*)(S7258C16*)(S7258C15*), ABISELECT(2448,1932), "S7258C11");
    /*is_ambiguous_... S7258C11::S7258C2 */ AMB_check_base_class_offset(lv, (S20956C5*)(S7258C2*), ABISELECT(2696,2128), "S7258C11");
    /*is_ambiguous_... S7258C8::S20956C5 */ AMB_check_base_class_offset(lv, (S20956C5*)(S7258C8*), ABISELECT(2696,2128), "S7258C11");
    check_base_class_offset(lv, (S20956C5*)(S7258C7*), ABISELECT(2696,2128), "S7258C11");
    /*is_ambiguous_... S7258C16::S20956C5 */ AMB_check_base_class_offset(lv, (S20956C5*)(S7258C16*)(S7258C15*), ABISELECT(2696,2128), "S7258C11");
    /*is_ambiguous_... S7258C2::S20956C5 */ AMB_check_base_class_offset(lv, (S20956C5*)(S7258C2*)(S7258C16*)(S7258C15*), ABISELECT(2696,2128), "S7258C11");
    check_base_class_offset(lv, (S7258C2*)(S7258C12*), ABISELECT(1848,1452), "S7258C11");
    check_base_class_offset(lv, (S7258C2*)(S7258C8*), ABISELECT(1848,1452), "S7258C11");
    /*is_ambiguous_... S7258C12::S7258C3 */ AMB_check_base_class_offset(lv, (S20956C5*)(S7258C3*)(S7258C12*), ABISELECT(8,4), "S7258C11");
    /*is_ambiguous_... S7258C12::S7258C3 */ AMB_check_base_class_offset(lv, (S7258C3*)(S7258C12*), ABISELECT(8,4), "S7258C11");
    check_base_class_offset(lv, (S7258C12*), 0, "S7258C11");
    /*is_ambiguous_... S7258C8::S7258C3 */ AMB_check_base_class_offset(lv, (S20956C5*)(S7258C3*)(S7258C8*), ABISELECT(5912,4632), "S7258C11");
    /*is_ambiguous_... S7258C8::S7258C3 */ AMB_check_base_class_offset(lv, (S7258C3*)(S7258C8*), ABISELECT(5912,4632), "S7258C11");
    check_base_class_offset(lv, (S7258C7*)(S7258C8*), ABISELECT(8056,6300), "S7258C11");
    check_base_class_offset(lv, (S7258C8*)(S7258C15*), ABISELECT(5904,4628), "S7258C11");
    check_base_class_offset(lv, (S7258C2*)(S7258C16*)(S7258C15*), ABISELECT(3776,2948), "S7258C11");
    check_base_class_offset(lv, (S7258C16*)(S7258C15*), ABISELECT(3776,2948), "S7258C11");
    check_base_class_offset(lv, (S7258C15*)(S7258C14*), ABISELECT(3776,2948), "S7258C11");
    check_base_class_offset(lv, (S7258C14*), ABISELECT(2752,2172), "S7258C11");
    check_field_offset(lv, s7258c11f0, ABISELECT(1812,1420), "S7258C11.s7258c11f0");
    check_field_offset(lv, s7258c11f1, ABISELECT(1816,1424), "S7258C11.s7258c11f1");
    test_class_info(&lv, &cd_S7258C11);
    dp->~S7258C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7258C11(Test_S7258C11, "S7258C11", ABISELECT(8464,6608));

#else // __cplusplus

extern void _ZN8S7258C11C1Ev();
extern void _ZN8S7258C11D2Ev();
Name_Map name_map_S7258C11[] = {
  NSPAIR(_ZN8S7258C11C1Ev),
  NSPAIR(_ZN8S7258C11D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20956C5;
extern VTBL_ENTRY _ZTI8S20956C5[];
extern Class_Descriptor cd_S7258C3;
extern VTBL_ENTRY _ZTI7S7258C3[];
extern Class_Descriptor cd_S20956C5;
extern VTBL_ENTRY _ZTI8S20956C5[];
extern Class_Descriptor cd_S7258C2;
extern VTBL_ENTRY _ZTI7S7258C2[];
extern  VTBL_ENTRY _ZTV7S7258C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7258C2[];
extern Class_Descriptor cd_S20956C5;
extern VTBL_ENTRY _ZTI8S20956C5[];
extern Class_Descriptor cd_S7258C3;
extern VTBL_ENTRY _ZTI7S7258C3[];
extern Class_Descriptor cd_S7258C12;
extern VTBL_ENTRY _ZTI8S7258C12[];
extern  VTBL_ENTRY _ZTV8S7258C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7258C12[];
extern Class_Descriptor cd_S20956C5;
extern VTBL_ENTRY _ZTI8S20956C5[];
extern Class_Descriptor cd_S7258C3;
extern VTBL_ENTRY _ZTI7S7258C3[];
extern Class_Descriptor cd_S7258C7;
extern VTBL_ENTRY _ZTI7S7258C7[];
extern  VTBL_ENTRY _ZTV7S7258C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7258C7[];
extern Class_Descriptor cd_S7258C8;
extern VTBL_ENTRY _ZTI7S7258C8[];
extern  VTBL_ENTRY _ZTV7S7258C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7258C8[];
extern Class_Descriptor cd_S7258C2;
extern VTBL_ENTRY _ZTI7S7258C2[];
extern  VTBL_ENTRY _ZTV7S7258C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7258C2[];
extern Class_Descriptor cd_S7258C16;
extern VTBL_ENTRY _ZTI8S7258C16[];
extern  VTBL_ENTRY _ZTV8S7258C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7258C16[];
extern Class_Descriptor cd_S7258C15;
extern VTBL_ENTRY _ZTI8S7258C15[];
extern  VTBL_ENTRY _ZTV8S7258C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7258C15[];
extern Class_Descriptor cd_S7258C14;
extern VTBL_ENTRY _ZTI8S7258C14[];
extern  VTBL_ENTRY _ZTV8S7258C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7258C14[];
static Base_Class bases_S7258C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20956C5,    ABISELECT(2448,1932), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S7258C3,    ABISELECT(2448,1932), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S20956C5,    ABISELECT(2696,2128), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S7258C2,    ABISELECT(1848,1452), //bcp->offset
    12, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S20956C5,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S7258C3,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S7258C12,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20956C5,    ABISELECT(5912,4632), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S7258C3,    ABISELECT(5912,4632), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S7258C7,    ABISELECT(8056,6300), //bcp->offset
    54, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    24, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S7258C8,    ABISELECT(5904,4628), //bcp->offset
    41, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    21, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    13, //immediately_derived
  0, 1},
  {&cd_S7258C2,    ABISELECT(3776,2948), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S7258C16,    ABISELECT(3776,2948), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S7258C15,    ABISELECT(3776,2948), //bcp->offset
    27, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S7258C14,    ABISELECT(2752,2172), //bcp->offset
    16, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S7258C11[];
extern void _ZN8S7258C11D1Ev();
extern void _ZN8S7258C11D0Ev();
extern void _ZN8S7258C112v8Ev();
extern void ABISELECT(_ZTv0_n72_N8S7258C11D1Ev,_ZTv0_n36_N8S7258C11D1Ev)();
extern void ABISELECT(_ZThn2752_N8S7258C11D1Ev,_ZThn2172_N8S7258C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S7258C11D0Ev,_ZTv0_n36_N8S7258C11D0Ev)();
extern void ABISELECT(_ZThn2752_N8S7258C11D0Ev,_ZThn2172_N8S7258C11D0Ev)() __attribute__((weak));
extern void _ZN8S7258C152v6Ev();
extern void _ZN8S7258C152v7Ev();
extern void ABISELECT(_ZTv0_n80_N8S7258C11D1Ev,_ZTv0_n40_N8S7258C11D1Ev)();
extern void ABISELECT(_ZThn3776_N8S7258C11D1Ev,_ZThn2948_N8S7258C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N8S7258C11D0Ev,_ZTv0_n40_N8S7258C11D0Ev)();
extern void ABISELECT(_ZThn3776_N8S7258C11D0Ev,_ZThn2948_N8S7258C11D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S7258C11D1Ev,_ZTv0_n28_N8S7258C11D1Ev)();
extern void ABISELECT(_ZThn5904_N8S7258C11D1Ev,_ZThn4628_N8S7258C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S7258C11D0Ev,_ZTv0_n28_N8S7258C11D0Ev)();
extern void ABISELECT(_ZThn5904_N8S7258C11D0Ev,_ZThn4628_N8S7258C11D0Ev)() __attribute__((weak));
extern void _ZN7S7258C82v4Ev();
extern void _ZN7S7258C82v5Ev();
extern void ABISELECT(_ZTv0_n32_N8S7258C11D1Ev,_ZTv0_n16_N8S7258C11D1Ev)();
extern void ABISELECT(_ZThn8056_N8S7258C11D1Ev,_ZThn6300_N8S7258C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S7258C11D0Ev,_ZTv0_n16_N8S7258C11D0Ev)();
extern void ABISELECT(_ZThn8056_N8S7258C11D0Ev,_ZThn6300_N8S7258C11D0Ev)() __attribute__((weak));
extern void _ZN7S7258C72v1Ev();
extern void _ZN7S7258C72v2Ev();
extern void _ZN7S7258C72v3Ev();
static  VTBL_ENTRY vtc_S7258C11[] = {
  ABISELECT(8056,6300),
  ABISELECT(5904,4628),
  ABISELECT(3776,2948),
  ABISELECT(2752,2172),
  ABISELECT(2696,2128),
  ABISELECT(2448,1932),
  ABISELECT(1848,1452),
  0,
  (VTBL_ENTRY)&(_ZTI8S7258C11[0]),
  (VTBL_ENTRY)&_ZN8S7258C11D1Ev,
  (VTBL_ENTRY)&_ZN8S7258C11D0Ev,
  (VTBL_ENTRY)&_ZN8S7258C112v8Ev,
  ABISELECT(848,676),
  ABISELECT(600,480),
  ABISELECT(-1848,-1452),
  (VTBL_ENTRY)&(_ZTI8S7258C11[0]),
  ABISELECT(-2752,-2172),
  ABISELECT(-304,-240),
  ABISELECT(-904,-720),
  ABISELECT(5304,4128),
  ABISELECT(-56,-44),
  ABISELECT(3152,2456),
  ABISELECT(1024,776),
  ABISELECT(-2752,-2172),
  (VTBL_ENTRY)&(_ZTI8S7258C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S7258C11D1Ev,_ZTv0_n36_N8S7258C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S7258C11D0Ev,_ZTv0_n36_N8S7258C11D0Ev),
  ABISELECT(-3776,-2948),
  0,
  0,
  ABISELECT(-1928,-1496),
  ABISELECT(4280,3352),
  ABISELECT(2128,1680),
  ABISELECT(-1080,-820),
  ABISELECT(-1328,-1016),
  ABISELECT(-3776,-2948),
  (VTBL_ENTRY)&(_ZTI8S7258C11[0]),
  (VTBL_ENTRY)&_ZN8S7258C152v6Ev,
  (VTBL_ENTRY)&_ZN8S7258C152v7Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S7258C11D1Ev,_ZTv0_n40_N8S7258C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S7258C11D0Ev,_ZTv0_n40_N8S7258C11D0Ev),
  0,
  0,
  ABISELECT(-5904,-4628),
  ABISELECT(-3456,-2696),
  ABISELECT(-4056,-3176),
  ABISELECT(2152,1672),
  ABISELECT(-3208,-2500),
  ABISELECT(-5904,-4628),
  (VTBL_ENTRY)&(_ZTI8S7258C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S7258C11D1Ev,_ZTv0_n28_N8S7258C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S7258C11D0Ev,_ZTv0_n28_N8S7258C11D0Ev),
  (VTBL_ENTRY)&_ZN7S7258C82v4Ev,
  (VTBL_ENTRY)&_ZN7S7258C82v5Ev,
  0,
  0,
  0,
  ABISELECT(-8056,-6300),
  ABISELECT(-5360,-4172),
  ABISELECT(-8056,-6300),
  (VTBL_ENTRY)&(_ZTI8S7258C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S7258C11D1Ev,_ZTv0_n16_N8S7258C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S7258C11D0Ev,_ZTv0_n16_N8S7258C11D0Ev),
  (VTBL_ENTRY)&_ZN7S7258C72v1Ev,
  (VTBL_ENTRY)&_ZN7S7258C72v2Ev,
  (VTBL_ENTRY)&_ZN7S7258C72v3Ev,
};
extern VTBL_ENTRY _ZTV8S7258C11[];
static  VTBL_ENTRY _tg__ZTV8S7258C12__8S7258C11[] = {
  ABISELECT(2696,2128),
  ABISELECT(2448,1932),
  ABISELECT(1848,1452),
  0,
  (VTBL_ENTRY)&(_ZTI8S7258C12[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7258C2__8S7258C12__8S7258C11[] = {
  ABISELECT(848,676),
  ABISELECT(600,480),
  ABISELECT(-1848,-1452),
  (VTBL_ENTRY)&(_ZTI8S7258C12[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7258C2__8S7258C11[] = {
  ABISELECT(848,676),
  ABISELECT(600,480),
  0,
  (VTBL_ENTRY)&(_ZTI7S7258C2[0]),
};
extern void _ZN8S7258C14D1Ev();
extern void _ZN8S7258C14D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7258C14__8S7258C11[] = {
  ABISELECT(-304,-240),
  ABISELECT(-904,-720),
  ABISELECT(5304,4128),
  ABISELECT(-56,-44),
  ABISELECT(3152,2456),
  ABISELECT(1024,776),
  0,
  (VTBL_ENTRY)&(_ZTI8S7258C14[0]),
  (VTBL_ENTRY)&_ZN8S7258C14D1Ev,
  (VTBL_ENTRY)&_ZN8S7258C14D0Ev,
};
extern void _ZN8S7258C152v6Ev();
extern void _ZN8S7258C152v7Ev();
extern void ABISELECT(_ZTv0_n80_N8S7258C14D1Ev,_ZTv0_n40_N8S7258C14D1Ev)();
extern void ABISELECT(_ZThn1024_N8S7258C14D1Ev,_ZThn776_N8S7258C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N8S7258C14D0Ev,_ZTv0_n40_N8S7258C14D0Ev)();
extern void ABISELECT(_ZThn1024_N8S7258C14D0Ev,_ZThn776_N8S7258C14D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7258C15__8S7258C14__8S7258C11[] = {
  ABISELECT(-1024,-776),
  0,
  0,
  ABISELECT(-1928,-1496),
  ABISELECT(4280,3352),
  ABISELECT(2128,1680),
  ABISELECT(-1080,-820),
  ABISELECT(-1328,-1016),
  ABISELECT(-1024,-776),
  (VTBL_ENTRY)&(_ZTI8S7258C14[0]),
  (VTBL_ENTRY)&_ZN8S7258C152v6Ev,
  (VTBL_ENTRY)&_ZN8S7258C152v7Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S7258C14D1Ev,_ZTv0_n40_N8S7258C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S7258C14D0Ev,_ZTv0_n40_N8S7258C14D0Ev),
};
extern void ABISELECT(_ZTv0_n56_N8S7258C14D1Ev,_ZTv0_n28_N8S7258C14D1Ev)();
extern void ABISELECT(_ZThn3152_N8S7258C14D1Ev,_ZThn2456_N8S7258C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S7258C14D0Ev,_ZTv0_n28_N8S7258C14D0Ev)();
extern void ABISELECT(_ZThn3152_N8S7258C14D0Ev,_ZThn2456_N8S7258C14D0Ev)() __attribute__((weak));
extern void _ZN7S7258C82v4Ev();
extern void _ZN7S7258C82v5Ev();
static  VTBL_ENTRY _tg__ZTV7S7258C8__8S7258C14__8S7258C11[] = {
  0,
  0,
  ABISELECT(-3152,-2456),
  ABISELECT(-3456,-2696),
  ABISELECT(-4056,-3176),
  ABISELECT(2152,1672),
  ABISELECT(-3208,-2500),
  ABISELECT(-3152,-2456),
  (VTBL_ENTRY)&(_ZTI8S7258C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S7258C14D1Ev,_ZTv0_n28_N8S7258C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S7258C14D0Ev,_ZTv0_n28_N8S7258C14D0Ev),
  (VTBL_ENTRY)&_ZN7S7258C82v4Ev,
  (VTBL_ENTRY)&_ZN7S7258C82v5Ev,
};
extern void ABISELECT(_ZTv0_n32_N8S7258C14D1Ev,_ZTv0_n16_N8S7258C14D1Ev)();
extern void ABISELECT(_ZThn5304_N8S7258C14D1Ev,_ZThn4128_N8S7258C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S7258C14D0Ev,_ZTv0_n16_N8S7258C14D0Ev)();
extern void ABISELECT(_ZThn5304_N8S7258C14D0Ev,_ZThn4128_N8S7258C14D0Ev)() __attribute__((weak));
extern void _ZN7S7258C72v1Ev();
extern void _ZN7S7258C72v2Ev();
extern void _ZN7S7258C72v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7258C7__8S7258C14__8S7258C11[] = {
  0,
  0,
  0,
  ABISELECT(-5304,-4128),
  ABISELECT(-5360,-4172),
  ABISELECT(-5304,-4128),
  (VTBL_ENTRY)&(_ZTI8S7258C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S7258C14D1Ev,_ZTv0_n16_N8S7258C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S7258C14D0Ev,_ZTv0_n16_N8S7258C14D0Ev),
  (VTBL_ENTRY)&_ZN7S7258C72v1Ev,
  (VTBL_ENTRY)&_ZN7S7258C72v2Ev,
  (VTBL_ENTRY)&_ZN7S7258C72v3Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7258C2__8S7258C14__8S7258C11[] = {
  ABISELECT(848,676),
  ABISELECT(600,480),
  ABISELECT(904,720),
  (VTBL_ENTRY)&(_ZTI8S7258C14[0]),
};
extern void _ZN8S7258C152v6Ev();
extern void _ZN8S7258C152v7Ev();
extern void _ZN8S7258C15D1Ev();
extern void _ZN8S7258C15D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7258C15__8S7258C11[] = {
  ABISELECT(-1928,-1496),
  ABISELECT(4280,3352),
  ABISELECT(2128,1680),
  ABISELECT(-1080,-820),
  ABISELECT(-1328,-1016),
  0,
  (VTBL_ENTRY)&(_ZTI8S7258C15[0]),
  (VTBL_ENTRY)&_ZN8S7258C152v6Ev,
  (VTBL_ENTRY)&_ZN8S7258C152v7Ev,
  (VTBL_ENTRY)&_ZN8S7258C15D1Ev,
  (VTBL_ENTRY)&_ZN8S7258C15D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S7258C168S7258C15__8S7258C11[] = {
  ABISELECT(-1080,-820),
  ABISELECT(-1328,-1016),
  0,
  (VTBL_ENTRY)&(_ZTI8S7258C16[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7258C28S7258C168S7258C15__A1__8S7258C11[] = {
  ABISELECT(-1080,-820),
  ABISELECT(-1328,-1016),
  0,
  (VTBL_ENTRY)&(_ZTI7S7258C2[0]),
};
extern void ABISELECT(_ZTv0_n56_N8S7258C15D1Ev,_ZTv0_n28_N8S7258C15D1Ev)();
extern void ABISELECT(_ZThn2128_N8S7258C15D1Ev,_ZThn1680_N8S7258C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S7258C15D0Ev,_ZTv0_n28_N8S7258C15D0Ev)();
extern void ABISELECT(_ZThn2128_N8S7258C15D0Ev,_ZThn1680_N8S7258C15D0Ev)() __attribute__((weak));
extern void _ZN7S7258C82v4Ev();
extern void _ZN7S7258C82v5Ev();
static  VTBL_ENTRY _tg__ZTV7S7258C8__8S7258C15__8S7258C11[] = {
  0,
  0,
  ABISELECT(-2128,-1680),
  ABISELECT(-3456,-2696),
  ABISELECT(-4056,-3176),
  ABISELECT(2152,1672),
  ABISELECT(-3208,-2500),
  ABISELECT(-2128,-1680),
  (VTBL_ENTRY)&(_ZTI8S7258C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S7258C15D1Ev,_ZTv0_n28_N8S7258C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S7258C15D0Ev,_ZTv0_n28_N8S7258C15D0Ev),
  (VTBL_ENTRY)&_ZN7S7258C82v4Ev,
  (VTBL_ENTRY)&_ZN7S7258C82v5Ev,
};
extern void ABISELECT(_ZTv0_n32_N8S7258C15D1Ev,_ZTv0_n16_N8S7258C15D1Ev)();
extern void ABISELECT(_ZThn4280_N8S7258C15D1Ev,_ZThn3352_N8S7258C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S7258C15D0Ev,_ZTv0_n16_N8S7258C15D0Ev)();
extern void ABISELECT(_ZThn4280_N8S7258C15D0Ev,_ZThn3352_N8S7258C15D0Ev)() __attribute__((weak));
extern void _ZN7S7258C72v1Ev();
extern void _ZN7S7258C72v2Ev();
extern void _ZN7S7258C72v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7258C7__8S7258C15__8S7258C11[] = {
  0,
  0,
  0,
  ABISELECT(-4280,-3352),
  ABISELECT(-5360,-4172),
  ABISELECT(-4280,-3352),
  (VTBL_ENTRY)&(_ZTI8S7258C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S7258C15D1Ev,_ZTv0_n16_N8S7258C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S7258C15D0Ev,_ZTv0_n16_N8S7258C15D0Ev),
  (VTBL_ENTRY)&_ZN7S7258C72v1Ev,
  (VTBL_ENTRY)&_ZN7S7258C72v2Ev,
  (VTBL_ENTRY)&_ZN7S7258C72v3Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7258C2__8S7258C15__8S7258C11[] = {
  ABISELECT(848,676),
  ABISELECT(600,480),
  ABISELECT(1928,1496),
  (VTBL_ENTRY)&(_ZTI8S7258C15[0]),
};
extern void _ZN7S7258C8D1Ev();
extern void _ZN7S7258C8D0Ev();
extern void _ZN7S7258C82v4Ev();
extern void _ZN7S7258C82v5Ev();
static  VTBL_ENTRY _tg__ZTV7S7258C8__8S7258C11[] = {
  ABISELECT(-3456,-2696),
  ABISELECT(-4056,-3176),
  ABISELECT(2152,1672),
  ABISELECT(-3208,-2500),
  0,
  (VTBL_ENTRY)&(_ZTI7S7258C8[0]),
  (VTBL_ENTRY)&_ZN7S7258C8D1Ev,
  (VTBL_ENTRY)&_ZN7S7258C8D0Ev,
  (VTBL_ENTRY)&_ZN7S7258C82v4Ev,
  (VTBL_ENTRY)&_ZN7S7258C82v5Ev,
};
extern void ABISELECT(_ZTv0_n32_N7S7258C8D1Ev,_ZTv0_n16_N7S7258C8D1Ev)();
extern void ABISELECT(_ZThn2152_N7S7258C8D1Ev,_ZThn1672_N7S7258C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S7258C8D0Ev,_ZTv0_n16_N7S7258C8D0Ev)();
extern void ABISELECT(_ZThn2152_N7S7258C8D0Ev,_ZThn1672_N7S7258C8D0Ev)() __attribute__((weak));
extern void _ZN7S7258C72v1Ev();
extern void _ZN7S7258C72v2Ev();
extern void _ZN7S7258C72v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7258C7__7S7258C8__8S7258C11[] = {
  0,
  0,
  0,
  ABISELECT(-2152,-1672),
  ABISELECT(-5360,-4172),
  ABISELECT(-2152,-1672),
  (VTBL_ENTRY)&(_ZTI7S7258C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7258C8D1Ev,_ZTv0_n16_N7S7258C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7258C8D0Ev,_ZTv0_n16_N7S7258C8D0Ev),
  (VTBL_ENTRY)&_ZN7S7258C72v1Ev,
  (VTBL_ENTRY)&_ZN7S7258C72v2Ev,
  (VTBL_ENTRY)&_ZN7S7258C72v3Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7258C2__7S7258C8__8S7258C11[] = {
  ABISELECT(848,676),
  ABISELECT(600,480),
  ABISELECT(4056,3176),
  (VTBL_ENTRY)&(_ZTI7S7258C8[0]),
};
extern void _ZN7S7258C7D1Ev();
extern void _ZN7S7258C7D0Ev();
extern void _ZN7S7258C72v1Ev();
extern void _ZN7S7258C72v2Ev();
extern void _ZN7S7258C72v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7258C7__8S7258C11[] = {
  ABISELECT(-5360,-4172),
  0,
  (VTBL_ENTRY)&(_ZTI7S7258C7[0]),
  (VTBL_ENTRY)&_ZN7S7258C7D1Ev,
  (VTBL_ENTRY)&_ZN7S7258C7D0Ev,
  (VTBL_ENTRY)&_ZN7S7258C72v1Ev,
  (VTBL_ENTRY)&_ZN7S7258C72v2Ev,
  (VTBL_ENTRY)&_ZN7S7258C72v3Ev,
};
static  VTT_ENTRY vtt_S7258C11[] = {
  {&(_ZTV8S7258C11[9]),  9,66},
  {&(_tg__ZTV8S7258C12__8S7258C11[5]),  5,5},
  {&(_tg__ZTV7S7258C2__8S7258C12__8S7258C11[4]),  4,4},
  {&(_ZTV8S7258C11[16]),  16,66},
  {&(_ZTV8S7258C11[25]),  25,66},
  {&(_ZTV8S7258C11[37]),  37,66},
  {&(_ZTV8S7258C11[50]),  50,66},
  {&(_ZTV8S7258C11[61]),  61,66},
  {&(_tg__ZTV7S7258C2__8S7258C11[4]),  4,4},
  {&(_tg__ZTV8S7258C14__8S7258C11[8]),  8,10},
  {&(_tg__ZTV8S7258C15__8S7258C14__8S7258C11[10]),  10,14},
  {&(_tg__ZTV7S7258C8__8S7258C14__8S7258C11[9]),  9,13},
  {&(_tg__ZTV7S7258C7__8S7258C14__8S7258C11[7]),  7,12},
  {&(_tg__ZTV7S7258C2__8S7258C14__8S7258C11[4]),  4,4},
  {&(_tg__ZTV8S7258C15__8S7258C11[7]),  7,11},
  {&(_tg__ZTV8S7258C168S7258C15__8S7258C11[4]),  4,4},
  {&(_tg__ZTV7S7258C28S7258C168S7258C15__A1__8S7258C11[4]),  4,4},
  {&(_tg__ZTV7S7258C8__8S7258C15__8S7258C11[9]),  9,13},
  {&(_tg__ZTV7S7258C7__8S7258C15__8S7258C11[7]),  7,12},
  {&(_tg__ZTV7S7258C2__8S7258C15__8S7258C11[4]),  4,4},
  {&(_tg__ZTV7S7258C8__8S7258C11[6]),  6,10},
  {&(_tg__ZTV7S7258C7__7S7258C8__8S7258C11[7]),  7,12},
  {&(_tg__ZTV7S7258C2__7S7258C8__8S7258C11[4]),  4,4},
  {&(_tg__ZTV7S7258C7__8S7258C11[3]),  3,8},
};
extern VTBL_ENTRY _ZTI8S7258C11[];
extern  VTBL_ENTRY _ZTV8S7258C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7258C11[];
static VTBL_ENTRY alt_thunk_names19[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7258C8D0Ev,_ZTv0_n16_N7S7258C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2152_N7S7258C8D0Ev,_ZThn1672_N7S7258C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7258C8D1Ev,_ZTv0_n16_N7S7258C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2152_N7S7258C8D1Ev,_ZThn1672_N7S7258C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S7258C15D0Ev,_ZTv0_n16_N8S7258C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4280_N8S7258C15D0Ev,_ZThn3352_N8S7258C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S7258C15D1Ev,_ZTv0_n16_N8S7258C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4280_N8S7258C15D1Ev,_ZThn3352_N8S7258C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S7258C15D0Ev,_ZTv0_n28_N8S7258C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2128_N8S7258C15D0Ev,_ZThn1680_N8S7258C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S7258C15D1Ev,_ZTv0_n28_N8S7258C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2128_N8S7258C15D1Ev,_ZThn1680_N8S7258C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S7258C14D0Ev,_ZTv0_n16_N8S7258C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5304_N8S7258C14D0Ev,_ZThn4128_N8S7258C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S7258C14D1Ev,_ZTv0_n16_N8S7258C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5304_N8S7258C14D1Ev,_ZThn4128_N8S7258C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S7258C14D0Ev,_ZTv0_n28_N8S7258C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3152_N8S7258C14D0Ev,_ZThn2456_N8S7258C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S7258C14D1Ev,_ZTv0_n28_N8S7258C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3152_N8S7258C14D1Ev,_ZThn2456_N8S7258C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S7258C14D0Ev,_ZTv0_n40_N8S7258C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1024_N8S7258C14D0Ev,_ZThn776_N8S7258C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S7258C14D1Ev,_ZTv0_n40_N8S7258C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1024_N8S7258C14D1Ev,_ZThn776_N8S7258C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S7258C11D0Ev,_ZTv0_n16_N8S7258C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8056_N8S7258C11D0Ev,_ZThn6300_N8S7258C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S7258C11D1Ev,_ZTv0_n16_N8S7258C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8056_N8S7258C11D1Ev,_ZThn6300_N8S7258C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S7258C11D0Ev,_ZTv0_n28_N8S7258C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5904_N8S7258C11D0Ev,_ZThn4628_N8S7258C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S7258C11D1Ev,_ZTv0_n28_N8S7258C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5904_N8S7258C11D1Ev,_ZThn4628_N8S7258C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S7258C11D0Ev,_ZTv0_n40_N8S7258C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3776_N8S7258C11D0Ev,_ZThn2948_N8S7258C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S7258C11D1Ev,_ZTv0_n40_N8S7258C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3776_N8S7258C11D1Ev,_ZThn2948_N8S7258C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S7258C11D0Ev,_ZTv0_n36_N8S7258C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2752_N8S7258C11D0Ev,_ZThn2172_N8S7258C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S7258C11D1Ev,_ZTv0_n36_N8S7258C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2752_N8S7258C11D1Ev,_ZThn2172_N8S7258C11D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7258C11 = {  "S7258C11", // class name
  bases_S7258C11, 15,
  &(vtc_S7258C11[0]), // expected_vtbl_contents
  &(vtt_S7258C11[0]), // expected_vtt_contents
  ABISELECT(8464,6608), // object size
  NSPAIRA(_ZTI8S7258C11),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S7258C11),66, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7258C11),24, //virtual table table var
  8, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names19,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7258C1  : S7258C2 , S7258C5 , S7258C11 , S7258C8 , S7258C6 {
  long double s7258c1f0;
  ::S7258C16 s7258c1f1;
  char s7258c1f2;
  virtual  ~S7258C1(); // _ZN7S7258C1D2Ev
  S7258C1(); // tgen
};
//SIG(1 S7258C1) C1{ BC2{ VBC3{ BC4{ m FL Fi[4] Fc FL Fp[2]} Fi FC4 FC4 Fi Fp FL[6] Fp} VBC4 FC4 Fs Fi FC3 FL[4] FC3} BC5{ BC6{ m Fi FC7{ VBC4 vd v1 v2 v3 Fi[2] FC4 Fi FC3 Fp FC4 Fc:3}[2] Fc} BC8{ BC3 VBC4 VBC7 VBC2 vd v4 v5 Fi FC9{} FD Fp FC7[2] FD FL Fi FC2} vd Fp[2] FU10{ m Fp FL Fi Fc Fi FL Fl FL Fs Fp FD Fc[6]} Fl Fp} BC11{ BC12{ VBC2 BC3 Fi[2] FC3 FC3[5] FU13{ m Fi[8] Fp FL Fc Fp[5] FD Fc[7] Fp Fc:1 Fi} Fi} VBC14{ VBC15{ VBC8 BC16{ VBC4 BC2 Fp Fc[9] FC2 FC3 FL:37 Fc FC3 Fc:8 Fp Fc Fi Fi} v6 v7 Fi Fi Fs FU10 Fi Fi Fs Fi Fi} vd FC7[2] FD FL FC4 Fp} vd v8 Fi Fi[7]} BC8 BC6 vd FD FC16 Fc}


 S7258C1 ::~S7258C1(){ note_dtor("S7258C1", this);}
S7258C1 ::S7258C1(){ note_ctor("S7258C1", this);} // tgen

static void Test_S7258C1()
{
  extern Class_Descriptor cd_S7258C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(1107,3445)];
    init_test(&cd_S7258C1, buf);
    S7258C1 *dp, &lv = *(dp=new (buf) S7258C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(17696,13776), "sizeof(S7258C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7258C1)");
    /*is_ambiguous_... S7258C1::S7258C3 */ AMB_check_base_class_offset(lv, (S20956C5*)(S7258C3*), ABISELECT(11080,8620), "S7258C1");
    /*is_ambiguous_... S7258C1::S7258C2 */ AMB_check_base_class_offset(lv, (S7258C3*)(S7258C2*), ABISELECT(11080,8620), "S7258C1");
    /*is_ambiguous_... S7258C1::S7258C2 */ AMB_check_base_class_offset(lv, (S7258C3*)(S7258C2*), ABISELECT(11080,8620), "S7258C1");
    check_base_class_offset(lv, (S7258C3*)(S7258C2*)(S7258C16*)(S7258C15*), ABISELECT(11080,8620), "S7258C1");
    /*is_ambiguous_... S7258C1::S7258C2 */ AMB_check_base_class_offset(lv, (S20956C5*)(S7258C2*), ABISELECT(11328,8816), "S7258C1");
    /*is_ambiguous_... S7258C8::S20956C5 */ AMB_check_base_class_offset(lv, (S20956C5*)(S7258C8*)(S7258C5*), ABISELECT(11328,8816), "S7258C1");
    check_base_class_offset(lv, (S20956C5*)(S7258C7*), ABISELECT(11328,8816), "S7258C1");
    /*is_ambiguous_... S7258C1::S7258C2 */ AMB_check_base_class_offset(lv, (S20956C5*)(S7258C2*), ABISELECT(11328,8816), "S7258C1");
    /*is_ambiguous_... S7258C1::S7258C8 */ AMB_check_base_class_offset(lv, (S20956C5*)(S7258C8*), ABISELECT(11328,8816), "S7258C1");
    /*is_ambiguous_... S7258C16::S20956C5 */ AMB_check_base_class_offset(lv, (S20956C5*)(S7258C16*)(S7258C15*), ABISELECT(11328,8816), "S7258C1");
    /*is_ambiguous_... S7258C2::S20956C5 */ AMB_check_base_class_offset(lv, (S20956C5*)(S7258C2*)(S7258C16*)(S7258C15*), ABISELECT(11328,8816), "S7258C1");
    /*is_ambiguous_... S7258C1::S7258C8 */ AMB_check_base_class_offset(lv, (S20956C5*)(S7258C8*), ABISELECT(11328,8816), "S7258C1");
    /*is_ambiguous_... S7258C1::S7258C2 */ AMB_check_base_class_offset(lv, (S7258C2*), 0, "S7258C1");
    check_base_class_offset(lv, (S7258C6*)(S7258C5*), ABISELECT(2760,2152), "S7258C1");
    /*is_ambiguous_... S7258C8::S7258C3 */ AMB_check_base_class_offset(lv, (S20956C5*)(S7258C3*)(S7258C8*)(S7258C5*), ABISELECT(616,484), "S7258C1");
    /*is_ambiguous_... S7258C8::S7258C3 */ AMB_check_base_class_offset(lv, (S7258C3*)(S7258C8*)(S7258C5*), ABISELECT(616,484), "S7258C1");
    check_base_class_offset(lv, (S7258C7*)(S7258C8*)(S7258C5*), ABISELECT(11384,8860), "S7258C1");
    /*is_ambiguous_... S7258C1::S7258C8 */ AMB_check_base_class_offset(lv, (S7258C7*)(S7258C8*), ABISELECT(11384,8860), "S7258C1");
    /*is_ambiguous_... S7258C1::S7258C8 */ AMB_check_base_class_offset(lv, (S7258C7*)(S7258C8*), ABISELECT(11384,8860), "S7258C1");
    check_base_class_offset(lv, (S7258C2*)(S7258C8*)(S7258C5*), ABISELECT(11784,9168), "S7258C1");
    check_base_class_offset(lv, (S7258C2*)(S7258C12*)(S7258C11*), ABISELECT(11784,9168), "S7258C1");
    /*is_ambiguous_... S7258C1::S7258C8 */ AMB_check_base_class_offset(lv, (S7258C2*)(S7258C8*), ABISELECT(11784,9168), "S7258C1");
    /*is_ambiguous_... S7258C1::S7258C8 */ AMB_check_base_class_offset(lv, (S7258C2*)(S7258C8*), ABISELECT(11784,9168), "S7258C1");
    check_base_class_offset(lv, (S7258C8*)(S7258C5*), ABISELECT(608,480), "S7258C1");
    check_base_class_offset(lv, (S7258C5*), ABISELECT(608,480), "S7258C1");
    /*is_ambiguous_... S7258C12::S7258C3 */ AMB_check_base_class_offset(lv, (S20956C5*)(S7258C3*)(S7258C12*)(S7258C11*), ABISELECT(3752,2896), "S7258C1");
    /*is_ambiguous_... S7258C12::S7258C3 */ AMB_check_base_class_offset(lv, (S7258C3*)(S7258C12*)(S7258C11*), ABISELECT(3752,2896), "S7258C1");
    check_base_class_offset(lv, (S7258C12*)(S7258C11*), ABISELECT(3744,2892), "S7258C1");
    /*is_ambiguous_... S7258C1::S7258C8 */ AMB_check_base_class_offset(lv, (S20956C5*)(S7258C3*)(S7258C8*), ABISELECT(15544,12108), "S7258C1");
    /*is_ambiguous_... S7258C1::S7258C8 */ AMB_check_base_class_offset(lv, (S7258C3*)(S7258C8*), ABISELECT(15544,12108), "S7258C1");
    check_base_class_offset(lv, (S7258C8*)(S7258C15*), ABISELECT(15536,12104), "S7258C1");
    check_base_class_offset(lv, (S7258C2*)(S7258C16*)(S7258C15*), ABISELECT(13408,10424), "S7258C1");
    check_base_class_offset(lv, (S7258C16*)(S7258C15*), ABISELECT(13408,10424), "S7258C1");
    check_base_class_offset(lv, (S7258C15*)(S7258C14*), ABISELECT(13408,10424), "S7258C1");
    check_base_class_offset(lv, (S7258C14*)(S7258C11*), ABISELECT(12384,9648), "S7258C1");
    check_base_class_offset(lv, (S7258C11*), ABISELECT(3744,2892), "S7258C1");
    /*is_ambiguous_... S7258C1::S7258C8 */ AMB_check_base_class_offset(lv, (S20956C5*)(S7258C3*)(S7258C8*), ABISELECT(5608,4348), "S7258C1");
    /*is_ambiguous_... S7258C1::S7258C8 */ AMB_check_base_class_offset(lv, (S7258C3*)(S7258C8*), ABISELECT(5608,4348), "S7258C1");
    /*is_ambiguous_... S7258C1::S7258C8 */ AMB_check_base_class_offset(lv, (S7258C8*), ABISELECT(5600,4344), "S7258C1");
    /*is_ambiguous_... S7258C1::S7258C6 */ AMB_check_base_class_offset(lv, (S7258C6*), ABISELECT(7752,6016), "S7258C1");
    check_field_offset(lv, s7258c1f0, ABISELECT(8688,6728), "S7258C1.s7258c1f0");
    check_field_offset(lv, s7258c1f1, ABISELECT(8704,6740), "S7258C1.s7258c1f1");
    check_field_offset(lv, s7258c1f2, ABISELECT(11072,8616), "S7258C1.s7258c1f2");
    test_class_info(&lv, &cd_S7258C1);
    dp->~S7258C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7258C1(Test_S7258C1, "S7258C1", ABISELECT(17696,13776));

#else // __cplusplus

extern void _ZN7S7258C1C1Ev();
extern void _ZN7S7258C1D2Ev();
Name_Map name_map_S7258C1[] = {
  NSPAIR(_ZN7S7258C1C1Ev),
  NSPAIR(_ZN7S7258C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20956C5;
extern VTBL_ENTRY _ZTI8S20956C5[];
extern Class_Descriptor cd_S7258C3;
extern VTBL_ENTRY _ZTI7S7258C3[];
extern Class_Descriptor cd_S20956C5;
extern VTBL_ENTRY _ZTI8S20956C5[];
extern Class_Descriptor cd_S7258C2;
extern VTBL_ENTRY _ZTI7S7258C2[];
extern  VTBL_ENTRY _ZTV7S7258C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7258C2[];
extern Class_Descriptor cd_S7258C6;
extern VTBL_ENTRY _ZTI7S7258C6[];
extern Class_Descriptor cd_S20956C5;
extern VTBL_ENTRY _ZTI8S20956C5[];
extern Class_Descriptor cd_S7258C3;
extern VTBL_ENTRY _ZTI7S7258C3[];
extern Class_Descriptor cd_S7258C7;
extern VTBL_ENTRY _ZTI7S7258C7[];
extern  VTBL_ENTRY _ZTV7S7258C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7258C7[];
extern Class_Descriptor cd_S7258C2;
extern VTBL_ENTRY _ZTI7S7258C2[];
extern  VTBL_ENTRY _ZTV7S7258C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7258C2[];
extern Class_Descriptor cd_S7258C8;
extern VTBL_ENTRY _ZTI7S7258C8[];
extern  VTBL_ENTRY _ZTV7S7258C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7258C8[];
extern Class_Descriptor cd_S7258C5;
extern VTBL_ENTRY _ZTI7S7258C5[];
extern  VTBL_ENTRY _ZTV7S7258C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7258C5[];
extern Class_Descriptor cd_S20956C5;
extern VTBL_ENTRY _ZTI8S20956C5[];
extern Class_Descriptor cd_S7258C3;
extern VTBL_ENTRY _ZTI7S7258C3[];
extern Class_Descriptor cd_S7258C12;
extern VTBL_ENTRY _ZTI8S7258C12[];
extern  VTBL_ENTRY _ZTV8S7258C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7258C12[];
extern Class_Descriptor cd_S20956C5;
extern VTBL_ENTRY _ZTI8S20956C5[];
extern Class_Descriptor cd_S7258C3;
extern VTBL_ENTRY _ZTI7S7258C3[];
extern Class_Descriptor cd_S7258C8;
extern VTBL_ENTRY _ZTI7S7258C8[];
extern  VTBL_ENTRY _ZTV7S7258C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7258C8[];
extern Class_Descriptor cd_S7258C2;
extern VTBL_ENTRY _ZTI7S7258C2[];
extern  VTBL_ENTRY _ZTV7S7258C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7258C2[];
extern Class_Descriptor cd_S7258C16;
extern VTBL_ENTRY _ZTI8S7258C16[];
extern  VTBL_ENTRY _ZTV8S7258C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7258C16[];
extern Class_Descriptor cd_S7258C15;
extern VTBL_ENTRY _ZTI8S7258C15[];
extern  VTBL_ENTRY _ZTV8S7258C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7258C15[];
extern Class_Descriptor cd_S7258C14;
extern VTBL_ENTRY _ZTI8S7258C14[];
extern  VTBL_ENTRY _ZTV8S7258C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7258C14[];
extern Class_Descriptor cd_S7258C11;
extern VTBL_ENTRY _ZTI8S7258C11[];
extern  VTBL_ENTRY _ZTV8S7258C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7258C11[];
extern Class_Descriptor cd_S20956C5;
extern VTBL_ENTRY _ZTI8S20956C5[];
extern Class_Descriptor cd_S7258C3;
extern VTBL_ENTRY _ZTI7S7258C3[];
extern Class_Descriptor cd_S7258C8;
extern VTBL_ENTRY _ZTI7S7258C8[];
extern  VTBL_ENTRY _ZTV7S7258C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7258C8[];
extern Class_Descriptor cd_S7258C6;
extern VTBL_ENTRY _ZTI7S7258C6[];
static Base_Class bases_S7258C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20956C5,    ABISELECT(11080,8620), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S7258C3,    ABISELECT(11080,8620), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S20956C5,    ABISELECT(11328,8816), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S7258C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7258C6,    ABISELECT(2760,2152), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S20956C5,    ABISELECT(616,484), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S7258C3,    ABISELECT(616,484), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S7258C7,    ABISELECT(11384,8860), //bcp->offset
    43, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    21, //bcp->index_in_construction_vtbl_array
    28, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S7258C2,    ABISELECT(11784,9168), //bcp->offset
    55, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    22, //bcp->index_in_construction_vtbl_array
    29, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S7258C8,    ABISELECT(608,480), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S7258C5,    ABISELECT(608,480), //bcp->offset
    11, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    20, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20956C5,    ABISELECT(3752,2896), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S7258C3,    ABISELECT(3752,2896), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S7258C12,    ABISELECT(3744,2892), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S20956C5,    ABISELECT(15544,12108), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S7258C3,    ABISELECT(15544,12108), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S7258C8,    ABISELECT(15536,12104), //bcp->offset
    84, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    26, //bcp->index_in_construction_vtbl_array
    41, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    19, //immediately_derived
  0, 1},
  {&cd_S7258C2,    ABISELECT(13408,10424), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    37, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S7258C16,    ABISELECT(13408,10424), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    36, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S7258C15,    ABISELECT(13408,10424), //bcp->offset
    70, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    25, //bcp->index_in_construction_vtbl_array
    35, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    20, //immediately_derived
  0, 1},
  {&cd_S7258C14,    ABISELECT(12384,9648), //bcp->offset
    59, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    24, //bcp->index_in_construction_vtbl_array
    30, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    21, //immediately_derived
  0, 1},
  {&cd_S7258C11,    ABISELECT(3744,2892), //bcp->offset
    21, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    23, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20956C5,    ABISELECT(5608,4348), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S7258C3,    ABISELECT(5608,4348), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S7258C8,    ABISELECT(5600,4344), //bcp->offset
    33, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    27, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7258C6,    ABISELECT(7752,6016), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7258C1[];
extern void _ZN7S7258C1D1Ev();
extern void _ZN7S7258C1D0Ev();
extern void ABISELECT(_ZThn608_N7S7258C1D1Ev,_ZThn480_N7S7258C1D1Ev)();
extern void ABISELECT(_ZThn608_N7S7258C1D0Ev,_ZThn480_N7S7258C1D0Ev)();
extern void _ZN7S7258C82v4Ev();
extern void _ZN7S7258C82v5Ev();
extern void ABISELECT(_ZThn3744_N7S7258C1D1Ev,_ZThn2892_N7S7258C1D1Ev)();
extern void ABISELECT(_ZThn3744_N7S7258C1D0Ev,_ZThn2892_N7S7258C1D0Ev)();
extern void _ZN8S7258C112v8Ev();
extern void ABISELECT(_ZThn5600_N7S7258C1D1Ev,_ZThn4344_N7S7258C1D1Ev)();
extern void ABISELECT(_ZThn5600_N7S7258C1D0Ev,_ZThn4344_N7S7258C1D0Ev)();
extern void _ZN7S7258C82v4Ev();
extern void _ZN7S7258C82v5Ev();
extern void ABISELECT(_ZTv0_n32_N7S7258C1D1Ev,_ZTv0_n16_N7S7258C1D1Ev)();
extern void ABISELECT(_ZThn11384_N7S7258C1D1Ev,_ZThn8860_N7S7258C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S7258C1D0Ev,_ZTv0_n16_N7S7258C1D0Ev)();
extern void ABISELECT(_ZThn11384_N7S7258C1D0Ev,_ZThn8860_N7S7258C1D0Ev)() __attribute__((weak));
extern void _ZN7S7258C72v1Ev();
extern void _ZN7S7258C72v2Ev();
extern void _ZN7S7258C72v3Ev();
extern void ABISELECT(_ZTv0_n72_N7S7258C1D1Ev,_ZTv0_n36_N7S7258C1D1Ev)();
extern void ABISELECT(_ZThn12384_N7S7258C1D1Ev,_ZThn9648_N7S7258C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N7S7258C1D0Ev,_ZTv0_n36_N7S7258C1D0Ev)();
extern void ABISELECT(_ZThn12384_N7S7258C1D0Ev,_ZThn9648_N7S7258C1D0Ev)() __attribute__((weak));
extern void _ZN8S7258C152v6Ev();
extern void _ZN8S7258C152v7Ev();
extern void ABISELECT(_ZTv0_n80_N7S7258C1D1Ev,_ZTv0_n40_N7S7258C1D1Ev)();
extern void ABISELECT(_ZThn13408_N7S7258C1D1Ev,_ZThn10424_N7S7258C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N7S7258C1D0Ev,_ZTv0_n40_N7S7258C1D0Ev)();
extern void ABISELECT(_ZThn13408_N7S7258C1D0Ev,_ZThn10424_N7S7258C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N7S7258C1D1Ev,_ZTv0_n28_N7S7258C1D1Ev)();
extern void ABISELECT(_ZThn15536_N7S7258C1D1Ev,_ZThn12104_N7S7258C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N7S7258C1D0Ev,_ZTv0_n28_N7S7258C1D0Ev)();
extern void ABISELECT(_ZThn15536_N7S7258C1D0Ev,_ZThn12104_N7S7258C1D0Ev)() __attribute__((weak));
extern void _ZN7S7258C82v4Ev();
extern void _ZN7S7258C82v5Ev();
static  VTBL_ENTRY vtc_S7258C1[] = {
  ABISELECT(15536,12104),
  ABISELECT(13408,10424),
  ABISELECT(12384,9648),
  ABISELECT(11784,9168),
  ABISELECT(11384,8860),
  ABISELECT(11328,8816),
  ABISELECT(11080,8620),
  0,
  (VTBL_ENTRY)&(_ZTI7S7258C1[0]),
  (VTBL_ENTRY)&_ZN7S7258C1D1Ev,
  (VTBL_ENTRY)&_ZN7S7258C1D0Ev,
  ABISELECT(10472,8140),
  ABISELECT(11176,8688),
  ABISELECT(10776,8380),
  ABISELECT(10720,8336),
  ABISELECT(-608,-480),
  (VTBL_ENTRY)&(_ZTI7S7258C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn608_N7S7258C1D1Ev,_ZThn480_N7S7258C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn608_N7S7258C1D0Ev,_ZThn480_N7S7258C1D0Ev),
  (VTBL_ENTRY)&_ZN7S7258C82v4Ev,
  (VTBL_ENTRY)&_ZN7S7258C82v5Ev,
  ABISELECT(7640,5968),
  ABISELECT(11792,9212),
  ABISELECT(9664,7532),
  ABISELECT(8640,6756),
  ABISELECT(7584,5924),
  ABISELECT(7336,5728),
  ABISELECT(8040,6276),
  ABISELECT(-3744,-2892),
  (VTBL_ENTRY)&(_ZTI7S7258C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn3744_N7S7258C1D1Ev,_ZThn2892_N7S7258C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn3744_N7S7258C1D0Ev,_ZThn2892_N7S7258C1D0Ev),
  (VTBL_ENTRY)&_ZN8S7258C112v8Ev,
  ABISELECT(5480,4276),
  ABISELECT(6184,4824),
  ABISELECT(5784,4516),
  ABISELECT(5728,4472),
  ABISELECT(-5600,-4344),
  (VTBL_ENTRY)&(_ZTI7S7258C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn5600_N7S7258C1D1Ev,_ZThn4344_N7S7258C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn5600_N7S7258C1D0Ev,_ZThn4344_N7S7258C1D0Ev),
  (VTBL_ENTRY)&_ZN7S7258C82v4Ev,
  (VTBL_ENTRY)&_ZN7S7258C82v5Ev,
  0,
  0,
  0,
  ABISELECT(-11384,-8860),
  ABISELECT(-56,-44),
  ABISELECT(-11384,-8860),
  (VTBL_ENTRY)&(_ZTI7S7258C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7258C1D1Ev,_ZTv0_n16_N7S7258C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7258C1D0Ev,_ZTv0_n16_N7S7258C1D0Ev),
  (VTBL_ENTRY)&_ZN7S7258C72v1Ev,
  (VTBL_ENTRY)&_ZN7S7258C72v2Ev,
  (VTBL_ENTRY)&_ZN7S7258C72v3Ev,
  ABISELECT(-456,-352),
  ABISELECT(-704,-548),
  ABISELECT(-11784,-9168),
  (VTBL_ENTRY)&(_ZTI7S7258C1[0]),
  ABISELECT(-12384,-9648),
  ABISELECT(-1304,-1028),
  ABISELECT(-600,-480),
  ABISELECT(-1000,-788),
  ABISELECT(-1056,-832),
  ABISELECT(3152,2456),
  ABISELECT(1024,776),
  ABISELECT(-12384,-9648),
  (VTBL_ENTRY)&(_ZTI7S7258C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S7258C1D1Ev,_ZTv0_n36_N7S7258C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S7258C1D0Ev,_ZTv0_n36_N7S7258C1D0Ev),
  ABISELECT(-13408,-10424),
  0,
  0,
  ABISELECT(-1624,-1256),
  ABISELECT(-2024,-1564),
  ABISELECT(2128,1680),
  ABISELECT(-2080,-1608),
  ABISELECT(-2328,-1804),
  ABISELECT(-13408,-10424),
  (VTBL_ENTRY)&(_ZTI7S7258C1[0]),
  (VTBL_ENTRY)&_ZN8S7258C152v6Ev,
  (VTBL_ENTRY)&_ZN8S7258C152v7Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N7S7258C1D1Ev,_ZTv0_n40_N7S7258C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N7S7258C1D0Ev,_ZTv0_n40_N7S7258C1D0Ev),
  0,
  0,
  ABISELECT(-15536,-12104),
  ABISELECT(-4456,-3484),
  ABISELECT(-3752,-2936),
  ABISELECT(-4152,-3244),
  ABISELECT(-4208,-3288),
  ABISELECT(-15536,-12104),
  (VTBL_ENTRY)&(_ZTI7S7258C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N7S7258C1D1Ev,_ZTv0_n28_N7S7258C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N7S7258C1D0Ev,_ZTv0_n28_N7S7258C1D0Ev),
  (VTBL_ENTRY)&_ZN7S7258C82v4Ev,
  (VTBL_ENTRY)&_ZN7S7258C82v5Ev,
};
extern VTBL_ENTRY _ZTV7S7258C1[];
static  VTBL_ENTRY _tg__ZTV7S7258C2__A__7S7258C1[] = {
  ABISELECT(11328,8816),
  ABISELECT(11080,8620),
  0,
  (VTBL_ENTRY)&(_ZTI7S7258C2[0]),
};
extern void _ZN7S7258C5D1Ev();
extern void _ZN7S7258C5D0Ev();
extern void _ZN7S7258C82v4Ev();
extern void _ZN7S7258C82v5Ev();
static  VTBL_ENTRY _tg__ZTV7S7258C5__7S7258C1[] = {
  ABISELECT(10472,8140),
  ABISELECT(11176,8688),
  ABISELECT(10776,8380),
  ABISELECT(10720,8336),
  0,
  (VTBL_ENTRY)&(_ZTI7S7258C5[0]),
  (VTBL_ENTRY)&_ZN7S7258C5D1Ev,
  (VTBL_ENTRY)&_ZN7S7258C5D0Ev,
  (VTBL_ENTRY)&_ZN7S7258C82v4Ev,
  (VTBL_ENTRY)&_ZN7S7258C82v5Ev,
};
extern void _ZN7S7258C8D1Ev();
extern void _ZN7S7258C8D0Ev();
extern void _ZN7S7258C82v4Ev();
extern void _ZN7S7258C82v5Ev();
static  VTBL_ENTRY _tg__ZTV7S7258C87S7258C5__7S7258C1[] = {
  ABISELECT(10472,8140),
  ABISELECT(11176,8688),
  ABISELECT(10776,8380),
  ABISELECT(10720,8336),
  0,
  (VTBL_ENTRY)&(_ZTI7S7258C8[0]),
  (VTBL_ENTRY)&_ZN7S7258C8D1Ev,
  (VTBL_ENTRY)&_ZN7S7258C8D0Ev,
  (VTBL_ENTRY)&_ZN7S7258C82v4Ev,
  (VTBL_ENTRY)&_ZN7S7258C82v5Ev,
};
extern void ABISELECT(_ZTv0_n32_N7S7258C8D1Ev,_ZTv0_n16_N7S7258C8D1Ev)();
extern void ABISELECT(_ZThn10776_N7S7258C8D1Ev,_ZThn8380_N7S7258C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S7258C8D0Ev,_ZTv0_n16_N7S7258C8D0Ev)();
extern void ABISELECT(_ZThn10776_N7S7258C8D0Ev,_ZThn8380_N7S7258C8D0Ev)() __attribute__((weak));
extern void _ZN7S7258C72v1Ev();
extern void _ZN7S7258C72v2Ev();
extern void _ZN7S7258C72v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7258C7__7S7258C87S7258C5__7S7258C1[] = {
  0,
  0,
  0,
  ABISELECT(-10776,-8380),
  ABISELECT(-56,-44),
  ABISELECT(-10776,-8380),
  (VTBL_ENTRY)&(_ZTI7S7258C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7258C8D1Ev,_ZTv0_n16_N7S7258C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7258C8D0Ev,_ZTv0_n16_N7S7258C8D0Ev),
  (VTBL_ENTRY)&_ZN7S7258C72v1Ev,
  (VTBL_ENTRY)&_ZN7S7258C72v2Ev,
  (VTBL_ENTRY)&_ZN7S7258C72v3Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7258C2__7S7258C87S7258C5__7S7258C1[] = {
  ABISELECT(-456,-352),
  ABISELECT(-704,-548),
  ABISELECT(-11176,-8688),
  (VTBL_ENTRY)&(_ZTI7S7258C8[0]),
};
extern void ABISELECT(_ZTv0_n32_N7S7258C5D1Ev,_ZTv0_n16_N7S7258C5D1Ev)();
extern void ABISELECT(_ZThn10776_N7S7258C5D1Ev,_ZThn8380_N7S7258C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S7258C5D0Ev,_ZTv0_n16_N7S7258C5D0Ev)();
extern void ABISELECT(_ZThn10776_N7S7258C5D0Ev,_ZThn8380_N7S7258C5D0Ev)() __attribute__((weak));
extern void _ZN7S7258C72v1Ev();
extern void _ZN7S7258C72v2Ev();
extern void _ZN7S7258C72v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7258C7__7S7258C5__7S7258C1[] = {
  0,
  0,
  0,
  ABISELECT(-10776,-8380),
  ABISELECT(-56,-44),
  ABISELECT(-10776,-8380),
  (VTBL_ENTRY)&(_ZTI7S7258C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7258C5D1Ev,_ZTv0_n16_N7S7258C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7258C5D0Ev,_ZTv0_n16_N7S7258C5D0Ev),
  (VTBL_ENTRY)&_ZN7S7258C72v1Ev,
  (VTBL_ENTRY)&_ZN7S7258C72v2Ev,
  (VTBL_ENTRY)&_ZN7S7258C72v3Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7258C2__7S7258C5__7S7258C1[] = {
  ABISELECT(-456,-352),
  ABISELECT(-704,-548),
  ABISELECT(-11176,-8688),
  (VTBL_ENTRY)&(_ZTI7S7258C5[0]),
};
extern void _ZN8S7258C11D1Ev();
extern void _ZN8S7258C11D0Ev();
extern void _ZN8S7258C112v8Ev();
static  VTBL_ENTRY _tg__ZTV8S7258C11__7S7258C1[] = {
  ABISELECT(7640,5968),
  ABISELECT(11792,9212),
  ABISELECT(9664,7532),
  ABISELECT(8640,6756),
  ABISELECT(7584,5924),
  ABISELECT(7336,5728),
  ABISELECT(8040,6276),
  0,
  (VTBL_ENTRY)&(_ZTI8S7258C11[0]),
  (VTBL_ENTRY)&_ZN8S7258C11D1Ev,
  (VTBL_ENTRY)&_ZN8S7258C11D0Ev,
  (VTBL_ENTRY)&_ZN8S7258C112v8Ev,
};
static  VTBL_ENTRY _tg__ZTV8S7258C128S7258C11__7S7258C1[] = {
  ABISELECT(7584,5924),
  ABISELECT(7336,5728),
  ABISELECT(8040,6276),
  0,
  (VTBL_ENTRY)&(_ZTI8S7258C12[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7258C2__8S7258C128S7258C11__7S7258C1[] = {
  ABISELECT(-456,-352),
  ABISELECT(-704,-548),
  ABISELECT(-8040,-6276),
  (VTBL_ENTRY)&(_ZTI8S7258C12[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7258C2__8S7258C11__7S7258C1[] = {
  ABISELECT(-456,-352),
  ABISELECT(-704,-548),
  ABISELECT(-8040,-6276),
  (VTBL_ENTRY)&(_ZTI8S7258C11[0]),
};
extern void ABISELECT(_ZTv0_n72_N8S7258C11D1Ev,_ZTv0_n36_N8S7258C11D1Ev)();
extern void ABISELECT(_ZThn8640_N8S7258C11D1Ev,_ZThn6756_N8S7258C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S7258C11D0Ev,_ZTv0_n36_N8S7258C11D0Ev)();
extern void ABISELECT(_ZThn8640_N8S7258C11D0Ev,_ZThn6756_N8S7258C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7258C14__8S7258C11__7S7258C1[] = {
  ABISELECT(-8640,-6756),
  ABISELECT(-1304,-1028),
  ABISELECT(-600,-480),
  ABISELECT(-1000,-788),
  ABISELECT(-1056,-832),
  ABISELECT(3152,2456),
  ABISELECT(1024,776),
  ABISELECT(-8640,-6756),
  (VTBL_ENTRY)&(_ZTI8S7258C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S7258C11D1Ev,_ZTv0_n36_N8S7258C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S7258C11D0Ev,_ZTv0_n36_N8S7258C11D0Ev),
};
extern void _ZN8S7258C152v6Ev();
extern void _ZN8S7258C152v7Ev();
extern void ABISELECT(_ZTv0_n80_N8S7258C11D1Ev,_ZTv0_n40_N8S7258C11D1Ev)();
extern void ABISELECT(_ZThn9664_N8S7258C11D1Ev,_ZThn7532_N8S7258C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N8S7258C11D0Ev,_ZTv0_n40_N8S7258C11D0Ev)();
extern void ABISELECT(_ZThn9664_N8S7258C11D0Ev,_ZThn7532_N8S7258C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7258C15__8S7258C11__7S7258C1[] = {
  ABISELECT(-9664,-7532),
  0,
  0,
  ABISELECT(-1624,-1256),
  ABISELECT(-2024,-1564),
  ABISELECT(2128,1680),
  ABISELECT(-2080,-1608),
  ABISELECT(-2328,-1804),
  ABISELECT(-9664,-7532),
  (VTBL_ENTRY)&(_ZTI8S7258C11[0]),
  (VTBL_ENTRY)&_ZN8S7258C152v6Ev,
  (VTBL_ENTRY)&_ZN8S7258C152v7Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S7258C11D1Ev,_ZTv0_n40_N8S7258C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S7258C11D0Ev,_ZTv0_n40_N8S7258C11D0Ev),
};
extern void ABISELECT(_ZTv0_n56_N8S7258C11D1Ev,_ZTv0_n28_N8S7258C11D1Ev)();
extern void ABISELECT(_ZThn11792_N8S7258C11D1Ev,_ZThn9212_N8S7258C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S7258C11D0Ev,_ZTv0_n28_N8S7258C11D0Ev)();
extern void ABISELECT(_ZThn11792_N8S7258C11D0Ev,_ZThn9212_N8S7258C11D0Ev)() __attribute__((weak));
extern void _ZN7S7258C82v4Ev();
extern void _ZN7S7258C82v5Ev();
static  VTBL_ENTRY _tg__ZTV7S7258C8__8S7258C11__7S7258C1[] = {
  0,
  0,
  ABISELECT(-11792,-9212),
  ABISELECT(-4456,-3484),
  ABISELECT(-3752,-2936),
  ABISELECT(-4152,-3244),
  ABISELECT(-4208,-3288),
  ABISELECT(-11792,-9212),
  (VTBL_ENTRY)&(_ZTI8S7258C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S7258C11D1Ev,_ZTv0_n28_N8S7258C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S7258C11D0Ev,_ZTv0_n28_N8S7258C11D0Ev),
  (VTBL_ENTRY)&_ZN7S7258C82v4Ev,
  (VTBL_ENTRY)&_ZN7S7258C82v5Ev,
};
extern void ABISELECT(_ZTv0_n32_N8S7258C11D1Ev,_ZTv0_n16_N8S7258C11D1Ev)();
extern void ABISELECT(_ZThn7640_N8S7258C11D1Ev,_ZThn5968_N8S7258C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S7258C11D0Ev,_ZTv0_n16_N8S7258C11D0Ev)();
extern void ABISELECT(_ZThn7640_N8S7258C11D0Ev,_ZThn5968_N8S7258C11D0Ev)() __attribute__((weak));
extern void _ZN7S7258C72v1Ev();
extern void _ZN7S7258C72v2Ev();
extern void _ZN7S7258C72v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7258C7__8S7258C11__7S7258C1[] = {
  0,
  0,
  0,
  ABISELECT(-7640,-5968),
  ABISELECT(-56,-44),
  ABISELECT(-7640,-5968),
  (VTBL_ENTRY)&(_ZTI8S7258C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S7258C11D1Ev,_ZTv0_n16_N8S7258C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S7258C11D0Ev,_ZTv0_n16_N8S7258C11D0Ev),
  (VTBL_ENTRY)&_ZN7S7258C72v1Ev,
  (VTBL_ENTRY)&_ZN7S7258C72v2Ev,
  (VTBL_ENTRY)&_ZN7S7258C72v3Ev,
};
extern void _ZN7S7258C8D1Ev();
extern void _ZN7S7258C8D0Ev();
extern void _ZN7S7258C82v4Ev();
extern void _ZN7S7258C82v5Ev();
static  VTBL_ENTRY _tg__ZTV7S7258C8__A__7S7258C1[] = {
  ABISELECT(5480,4276),
  ABISELECT(6184,4824),
  ABISELECT(5784,4516),
  ABISELECT(5728,4472),
  0,
  (VTBL_ENTRY)&(_ZTI7S7258C8[0]),
  (VTBL_ENTRY)&_ZN7S7258C8D1Ev,
  (VTBL_ENTRY)&_ZN7S7258C8D0Ev,
  (VTBL_ENTRY)&_ZN7S7258C82v4Ev,
  (VTBL_ENTRY)&_ZN7S7258C82v5Ev,
};
extern void ABISELECT(_ZTv0_n32_N7S7258C8D1Ev,_ZTv0_n16_N7S7258C8D1Ev)();
extern void ABISELECT(_ZThn5784_N7S7258C8D1Ev,_ZThn4516_N7S7258C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S7258C8D0Ev,_ZTv0_n16_N7S7258C8D0Ev)();
extern void ABISELECT(_ZThn5784_N7S7258C8D0Ev,_ZThn4516_N7S7258C8D0Ev)() __attribute__((weak));
extern void _ZN7S7258C72v1Ev();
extern void _ZN7S7258C72v2Ev();
extern void _ZN7S7258C72v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7258C7__7S7258C8__A__7S7258C1[] = {
  0,
  0,
  0,
  ABISELECT(-5784,-4516),
  ABISELECT(-56,-44),
  ABISELECT(-5784,-4516),
  (VTBL_ENTRY)&(_ZTI7S7258C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7258C8D1Ev,_ZTv0_n16_N7S7258C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7258C8D0Ev,_ZTv0_n16_N7S7258C8D0Ev),
  (VTBL_ENTRY)&_ZN7S7258C72v1Ev,
  (VTBL_ENTRY)&_ZN7S7258C72v2Ev,
  (VTBL_ENTRY)&_ZN7S7258C72v3Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7258C2__7S7258C8__A__7S7258C1[] = {
  ABISELECT(-456,-352),
  ABISELECT(-704,-548),
  ABISELECT(-6184,-4824),
  (VTBL_ENTRY)&(_ZTI7S7258C8[0]),
};
extern void _ZN7S7258C7D1Ev();
extern void _ZN7S7258C7D0Ev();
extern void _ZN7S7258C72v1Ev();
extern void _ZN7S7258C72v2Ev();
extern void _ZN7S7258C72v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7258C7__7S7258C1[] = {
  ABISELECT(-56,-44),
  0,
  (VTBL_ENTRY)&(_ZTI7S7258C7[0]),
  (VTBL_ENTRY)&_ZN7S7258C7D1Ev,
  (VTBL_ENTRY)&_ZN7S7258C7D0Ev,
  (VTBL_ENTRY)&_ZN7S7258C72v1Ev,
  (VTBL_ENTRY)&_ZN7S7258C72v2Ev,
  (VTBL_ENTRY)&_ZN7S7258C72v3Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7258C2__A1__7S7258C1[] = {
  ABISELECT(-456,-352),
  ABISELECT(-704,-548),
  0,
  (VTBL_ENTRY)&(_ZTI7S7258C2[0]),
};
extern void _ZN8S7258C14D1Ev();
extern void _ZN8S7258C14D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7258C14__7S7258C1[] = {
  ABISELECT(-1304,-1028),
  ABISELECT(-600,-480),
  ABISELECT(-1000,-788),
  ABISELECT(-1056,-832),
  ABISELECT(3152,2456),
  ABISELECT(1024,776),
  0,
  (VTBL_ENTRY)&(_ZTI8S7258C14[0]),
  (VTBL_ENTRY)&_ZN8S7258C14D1Ev,
  (VTBL_ENTRY)&_ZN8S7258C14D0Ev,
};
extern void _ZN8S7258C152v6Ev();
extern void _ZN8S7258C152v7Ev();
extern void ABISELECT(_ZTv0_n80_N8S7258C14D1Ev,_ZTv0_n40_N8S7258C14D1Ev)();
extern void ABISELECT(_ZThn1024_N8S7258C14D1Ev,_ZThn776_N8S7258C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N8S7258C14D0Ev,_ZTv0_n40_N8S7258C14D0Ev)();
extern void ABISELECT(_ZThn1024_N8S7258C14D0Ev,_ZThn776_N8S7258C14D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7258C15__8S7258C14__7S7258C1[] = {
  ABISELECT(-1024,-776),
  0,
  0,
  ABISELECT(-1624,-1256),
  ABISELECT(-2024,-1564),
  ABISELECT(2128,1680),
  ABISELECT(-2080,-1608),
  ABISELECT(-2328,-1804),
  ABISELECT(-1024,-776),
  (VTBL_ENTRY)&(_ZTI8S7258C14[0]),
  (VTBL_ENTRY)&_ZN8S7258C152v6Ev,
  (VTBL_ENTRY)&_ZN8S7258C152v7Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S7258C14D1Ev,_ZTv0_n40_N8S7258C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S7258C14D0Ev,_ZTv0_n40_N8S7258C14D0Ev),
};
extern void ABISELECT(_ZTv0_n56_N8S7258C14D1Ev,_ZTv0_n28_N8S7258C14D1Ev)();
extern void ABISELECT(_ZThn3152_N8S7258C14D1Ev,_ZThn2456_N8S7258C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S7258C14D0Ev,_ZTv0_n28_N8S7258C14D0Ev)();
extern void ABISELECT(_ZThn3152_N8S7258C14D0Ev,_ZThn2456_N8S7258C14D0Ev)() __attribute__((weak));
extern void _ZN7S7258C82v4Ev();
extern void _ZN7S7258C82v5Ev();
static  VTBL_ENTRY _tg__ZTV7S7258C8__8S7258C14__7S7258C1[] = {
  0,
  0,
  ABISELECT(-3152,-2456),
  ABISELECT(-4456,-3484),
  ABISELECT(-3752,-2936),
  ABISELECT(-4152,-3244),
  ABISELECT(-4208,-3288),
  ABISELECT(-3152,-2456),
  (VTBL_ENTRY)&(_ZTI8S7258C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S7258C14D1Ev,_ZTv0_n28_N8S7258C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S7258C14D0Ev,_ZTv0_n28_N8S7258C14D0Ev),
  (VTBL_ENTRY)&_ZN7S7258C82v4Ev,
  (VTBL_ENTRY)&_ZN7S7258C82v5Ev,
};
extern void ABISELECT(_ZTv0_n32_N8S7258C14D1Ev,_ZTv0_n16_N8S7258C14D1Ev)();
extern void ABISELECT(_ZTv0_n32_N8S7258C14D0Ev,_ZTv0_n16_N8S7258C14D0Ev)();
extern void _ZN7S7258C72v1Ev();
extern void _ZN7S7258C72v2Ev();
extern void _ZN7S7258C72v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7258C7__8S7258C14__7S7258C1[] = {
  0,
  0,
  0,
  ABISELECT(1000,788),
  ABISELECT(-56,-44),
  ABISELECT(1000,788),
  (VTBL_ENTRY)&(_ZTI8S7258C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S7258C14D1Ev,_ZTv0_n16_N8S7258C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S7258C14D0Ev,_ZTv0_n16_N8S7258C14D0Ev),
  (VTBL_ENTRY)&_ZN7S7258C72v1Ev,
  (VTBL_ENTRY)&_ZN7S7258C72v2Ev,
  (VTBL_ENTRY)&_ZN7S7258C72v3Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7258C2__8S7258C14__7S7258C1[] = {
  ABISELECT(-456,-352),
  ABISELECT(-704,-548),
  ABISELECT(600,480),
  (VTBL_ENTRY)&(_ZTI8S7258C14[0]),
};
extern void _ZN8S7258C152v6Ev();
extern void _ZN8S7258C152v7Ev();
extern void _ZN8S7258C15D1Ev();
extern void _ZN8S7258C15D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7258C15__7S7258C1[] = {
  ABISELECT(-1624,-1256),
  ABISELECT(-2024,-1564),
  ABISELECT(2128,1680),
  ABISELECT(-2080,-1608),
  ABISELECT(-2328,-1804),
  0,
  (VTBL_ENTRY)&(_ZTI8S7258C15[0]),
  (VTBL_ENTRY)&_ZN8S7258C152v6Ev,
  (VTBL_ENTRY)&_ZN8S7258C152v7Ev,
  (VTBL_ENTRY)&_ZN8S7258C15D1Ev,
  (VTBL_ENTRY)&_ZN8S7258C15D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S7258C168S7258C15__7S7258C1[] = {
  ABISELECT(-2080,-1608),
  ABISELECT(-2328,-1804),
  0,
  (VTBL_ENTRY)&(_ZTI8S7258C16[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7258C28S7258C168S7258C15__A2__7S7258C1[] = {
  ABISELECT(-2080,-1608),
  ABISELECT(-2328,-1804),
  0,
  (VTBL_ENTRY)&(_ZTI7S7258C2[0]),
};
extern void ABISELECT(_ZTv0_n56_N8S7258C15D1Ev,_ZTv0_n28_N8S7258C15D1Ev)();
extern void ABISELECT(_ZThn2128_N8S7258C15D1Ev,_ZThn1680_N8S7258C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S7258C15D0Ev,_ZTv0_n28_N8S7258C15D0Ev)();
extern void ABISELECT(_ZThn2128_N8S7258C15D0Ev,_ZThn1680_N8S7258C15D0Ev)() __attribute__((weak));
extern void _ZN7S7258C82v4Ev();
extern void _ZN7S7258C82v5Ev();
static  VTBL_ENTRY _tg__ZTV7S7258C8__8S7258C15__7S7258C1[] = {
  0,
  0,
  ABISELECT(-2128,-1680),
  ABISELECT(-4456,-3484),
  ABISELECT(-3752,-2936),
  ABISELECT(-4152,-3244),
  ABISELECT(-4208,-3288),
  ABISELECT(-2128,-1680),
  (VTBL_ENTRY)&(_ZTI8S7258C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S7258C15D1Ev,_ZTv0_n28_N8S7258C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S7258C15D0Ev,_ZTv0_n28_N8S7258C15D0Ev),
  (VTBL_ENTRY)&_ZN7S7258C82v4Ev,
  (VTBL_ENTRY)&_ZN7S7258C82v5Ev,
};
extern void ABISELECT(_ZTv0_n32_N8S7258C15D1Ev,_ZTv0_n16_N8S7258C15D1Ev)();
extern void ABISELECT(_ZTv0_n32_N8S7258C15D0Ev,_ZTv0_n16_N8S7258C15D0Ev)();
extern void _ZN7S7258C72v1Ev();
extern void _ZN7S7258C72v2Ev();
extern void _ZN7S7258C72v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7258C7__8S7258C15__7S7258C1[] = {
  0,
  0,
  0,
  ABISELECT(2024,1564),
  ABISELECT(-56,-44),
  ABISELECT(2024,1564),
  (VTBL_ENTRY)&(_ZTI8S7258C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S7258C15D1Ev,_ZTv0_n16_N8S7258C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S7258C15D0Ev,_ZTv0_n16_N8S7258C15D0Ev),
  (VTBL_ENTRY)&_ZN7S7258C72v1Ev,
  (VTBL_ENTRY)&_ZN7S7258C72v2Ev,
  (VTBL_ENTRY)&_ZN7S7258C72v3Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7258C2__8S7258C15__7S7258C1[] = {
  ABISELECT(-456,-352),
  ABISELECT(-704,-548),
  ABISELECT(1624,1256),
  (VTBL_ENTRY)&(_ZTI8S7258C15[0]),
};
extern void _ZN7S7258C8D1Ev();
extern void _ZN7S7258C8D0Ev();
extern void _ZN7S7258C82v4Ev();
extern void _ZN7S7258C82v5Ev();
static  VTBL_ENTRY _tg__ZTV7S7258C8__A1__7S7258C1[] = {
  ABISELECT(-4456,-3484),
  ABISELECT(-3752,-2936),
  ABISELECT(-4152,-3244),
  ABISELECT(-4208,-3288),
  0,
  (VTBL_ENTRY)&(_ZTI7S7258C8[0]),
  (VTBL_ENTRY)&_ZN7S7258C8D1Ev,
  (VTBL_ENTRY)&_ZN7S7258C8D0Ev,
  (VTBL_ENTRY)&_ZN7S7258C82v4Ev,
  (VTBL_ENTRY)&_ZN7S7258C82v5Ev,
};
extern void ABISELECT(_ZTv0_n32_N7S7258C8D1Ev,_ZTv0_n16_N7S7258C8D1Ev)();
extern void ABISELECT(_ZTv0_n32_N7S7258C8D0Ev,_ZTv0_n16_N7S7258C8D0Ev)();
extern void _ZN7S7258C72v1Ev();
extern void _ZN7S7258C72v2Ev();
extern void _ZN7S7258C72v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7258C7__7S7258C8__A1__7S7258C1[] = {
  0,
  0,
  0,
  ABISELECT(4152,3244),
  ABISELECT(-56,-44),
  ABISELECT(4152,3244),
  (VTBL_ENTRY)&(_ZTI7S7258C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7258C8D1Ev,_ZTv0_n16_N7S7258C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7258C8D0Ev,_ZTv0_n16_N7S7258C8D0Ev),
  (VTBL_ENTRY)&_ZN7S7258C72v1Ev,
  (VTBL_ENTRY)&_ZN7S7258C72v2Ev,
  (VTBL_ENTRY)&_ZN7S7258C72v3Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7258C2__7S7258C8__A1__7S7258C1[] = {
  ABISELECT(-456,-352),
  ABISELECT(-704,-548),
  ABISELECT(3752,2936),
  (VTBL_ENTRY)&(_ZTI7S7258C8[0]),
};
static  VTT_ENTRY vtt_S7258C1[] = {
  {&(_ZTV7S7258C1[9]),  9,97},
  {&(_tg__ZTV7S7258C2__A__7S7258C1[4]),  4,4},
  {&(_tg__ZTV7S7258C5__7S7258C1[6]),  6,10},
  {&(_tg__ZTV7S7258C87S7258C5__7S7258C1[6]),  6,10},
  {&(_tg__ZTV7S7258C7__7S7258C87S7258C5__7S7258C1[7]),  7,12},
  {&(_tg__ZTV7S7258C2__7S7258C87S7258C5__7S7258C1[4]),  4,4},
  {&(_tg__ZTV7S7258C7__7S7258C5__7S7258C1[7]),  7,12},
  {&(_tg__ZTV7S7258C2__7S7258C5__7S7258C1[4]),  4,4},
  {&(_tg__ZTV8S7258C11__7S7258C1[9]),  9,12},
  {&(_tg__ZTV8S7258C128S7258C11__7S7258C1[5]),  5,5},
  {&(_tg__ZTV7S7258C2__8S7258C128S7258C11__7S7258C1[4]),  4,4},
  {&(_tg__ZTV7S7258C2__8S7258C11__7S7258C1[4]),  4,4},
  {&(_tg__ZTV8S7258C14__8S7258C11__7S7258C1[9]),  9,11},
  {&(_tg__ZTV8S7258C15__8S7258C11__7S7258C1[10]),  10,14},
  {&(_tg__ZTV7S7258C8__8S7258C11__7S7258C1[9]),  9,13},
  {&(_tg__ZTV7S7258C7__8S7258C11__7S7258C1[7]),  7,12},
  {&(_tg__ZTV7S7258C8__A__7S7258C1[6]),  6,10},
  {&(_tg__ZTV7S7258C7__7S7258C8__A__7S7258C1[7]),  7,12},
  {&(_tg__ZTV7S7258C2__7S7258C8__A__7S7258C1[4]),  4,4},
  {&(_ZTV7S7258C1[17]),  17,97},
  {&(_ZTV7S7258C1[50]),  50,97},
  {&(_ZTV7S7258C1[59]),  59,97},
  {&(_ZTV7S7258C1[30]),  30,97},
  {&(_ZTV7S7258C1[68]),  68,97},
  {&(_ZTV7S7258C1[80]),  80,97},
  {&(_ZTV7S7258C1[93]),  93,97},
  {&(_ZTV7S7258C1[39]),  39,97},
  {&(_tg__ZTV7S7258C7__7S7258C1[3]),  3,8},
  {&(_tg__ZTV7S7258C2__A1__7S7258C1[4]),  4,4},
  {&(_tg__ZTV8S7258C14__7S7258C1[8]),  8,10},
  {&(_tg__ZTV8S7258C15__8S7258C14__7S7258C1[10]),  10,14},
  {&(_tg__ZTV7S7258C8__8S7258C14__7S7258C1[9]),  9,13},
  {&(_tg__ZTV7S7258C7__8S7258C14__7S7258C1[7]),  7,12},
  {&(_tg__ZTV7S7258C2__8S7258C14__7S7258C1[4]),  4,4},
  {&(_tg__ZTV8S7258C15__7S7258C1[7]),  7,11},
  {&(_tg__ZTV8S7258C168S7258C15__7S7258C1[4]),  4,4},
  {&(_tg__ZTV7S7258C28S7258C168S7258C15__A2__7S7258C1[4]),  4,4},
  {&(_tg__ZTV7S7258C8__8S7258C15__7S7258C1[9]),  9,13},
  {&(_tg__ZTV7S7258C7__8S7258C15__7S7258C1[7]),  7,12},
  {&(_tg__ZTV7S7258C2__8S7258C15__7S7258C1[4]),  4,4},
  {&(_tg__ZTV7S7258C8__A1__7S7258C1[6]),  6,10},
  {&(_tg__ZTV7S7258C7__7S7258C8__A1__7S7258C1[7]),  7,12},
  {&(_tg__ZTV7S7258C2__7S7258C8__A1__7S7258C1[4]),  4,4},
};
extern VTBL_ENTRY _ZTI7S7258C1[];
extern  VTBL_ENTRY _ZTV7S7258C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7258C1[];
static VTBL_ENTRY alt_thunk_names20[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S7258C15D0Ev,_ZTv0_n28_N8S7258C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2128_N8S7258C15D0Ev,_ZThn1680_N8S7258C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S7258C15D1Ev,_ZTv0_n28_N8S7258C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2128_N8S7258C15D1Ev,_ZThn1680_N8S7258C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S7258C14D0Ev,_ZTv0_n28_N8S7258C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3152_N8S7258C14D0Ev,_ZThn2456_N8S7258C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S7258C14D1Ev,_ZTv0_n28_N8S7258C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3152_N8S7258C14D1Ev,_ZThn2456_N8S7258C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S7258C14D0Ev,_ZTv0_n40_N8S7258C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1024_N8S7258C14D0Ev,_ZThn776_N8S7258C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S7258C14D1Ev,_ZTv0_n40_N8S7258C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1024_N8S7258C14D1Ev,_ZThn776_N8S7258C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S7258C11D0Ev,_ZTv0_n16_N8S7258C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn7640_N8S7258C11D0Ev,_ZThn5968_N8S7258C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S7258C11D1Ev,_ZTv0_n16_N8S7258C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn7640_N8S7258C11D1Ev,_ZThn5968_N8S7258C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S7258C11D0Ev,_ZTv0_n28_N8S7258C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn11792_N8S7258C11D0Ev,_ZThn9212_N8S7258C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S7258C11D1Ev,_ZTv0_n28_N8S7258C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn11792_N8S7258C11D1Ev,_ZThn9212_N8S7258C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S7258C11D0Ev,_ZTv0_n40_N8S7258C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn9664_N8S7258C11D0Ev,_ZThn7532_N8S7258C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S7258C11D1Ev,_ZTv0_n40_N8S7258C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn9664_N8S7258C11D1Ev,_ZThn7532_N8S7258C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S7258C11D0Ev,_ZTv0_n36_N8S7258C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8640_N8S7258C11D0Ev,_ZThn6756_N8S7258C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S7258C11D1Ev,_ZTv0_n36_N8S7258C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8640_N8S7258C11D1Ev,_ZThn6756_N8S7258C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7258C5D0Ev,_ZTv0_n16_N7S7258C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn10776_N7S7258C5D0Ev,_ZThn8380_N7S7258C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7258C5D1Ev,_ZTv0_n16_N7S7258C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn10776_N7S7258C5D1Ev,_ZThn8380_N7S7258C5D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7258C8D0Ev,_ZTv0_n16_N7S7258C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5784_N7S7258C8D0Ev,_ZThn4516_N7S7258C8D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn10776_N7S7258C8D0Ev,_ZThn8380_N7S7258C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7258C8D1Ev,_ZTv0_n16_N7S7258C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5784_N7S7258C8D1Ev,_ZThn4516_N7S7258C8D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn10776_N7S7258C8D1Ev,_ZThn8380_N7S7258C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N7S7258C1D0Ev,_ZTv0_n28_N7S7258C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn15536_N7S7258C1D0Ev,_ZThn12104_N7S7258C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N7S7258C1D1Ev,_ZTv0_n28_N7S7258C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn15536_N7S7258C1D1Ev,_ZThn12104_N7S7258C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N7S7258C1D0Ev,_ZTv0_n40_N7S7258C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn13408_N7S7258C1D0Ev,_ZThn10424_N7S7258C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N7S7258C1D1Ev,_ZTv0_n40_N7S7258C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn13408_N7S7258C1D1Ev,_ZThn10424_N7S7258C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S7258C1D0Ev,_ZTv0_n36_N7S7258C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn12384_N7S7258C1D0Ev,_ZThn9648_N7S7258C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S7258C1D1Ev,_ZTv0_n36_N7S7258C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn12384_N7S7258C1D1Ev,_ZThn9648_N7S7258C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7258C1D0Ev,_ZTv0_n16_N7S7258C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn11384_N7S7258C1D0Ev,_ZThn8860_N7S7258C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7258C1D1Ev,_ZTv0_n16_N7S7258C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn11384_N7S7258C1D1Ev,_ZThn8860_N7S7258C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7258C1 = {  "S7258C1", // class name
  bases_S7258C1, 26,
  &(vtc_S7258C1[0]), // expected_vtbl_contents
  &(vtt_S7258C1[0]), // expected_vtt_contents
  ABISELECT(17696,13776), // object size
  NSPAIRA(_ZTI7S7258C1),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV7S7258C1),97, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7258C1),43, //virtual table table var
  13, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names20,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4299C3  {
  virtual  ~S4299C3(); // _ZN7S4299C3D1Ev
  virtual void  v18(); // _ZN7S4299C33v18Ev
  virtual void  v19(); // _ZN7S4299C33v19Ev
  virtual void  v20(); // _ZN7S4299C33v20Ev
  virtual void  v21(); // _ZN7S4299C33v21Ev
  virtual void  v22(); // _ZN7S4299C33v22Ev
  virtual void  v23(); // _ZN7S4299C33v23Ev
  virtual void  v24(); // _ZN7S4299C33v24Ev
  virtual void  v25(); // _ZN7S4299C33v25Ev
  virtual void  v26(); // _ZN7S4299C33v26Ev
  virtual void  v27(); // _ZN7S4299C33v27Ev
  virtual void  v28(); // _ZN7S4299C33v28Ev
  virtual void  v29(); // _ZN7S4299C33v29Ev
  virtual void  v30(); // _ZN7S4299C33v30Ev
  virtual void  v31(); // _ZN7S4299C33v31Ev
  virtual void  v32(); // _ZN7S4299C33v32Ev
  virtual void  v33(); // _ZN7S4299C33v33Ev
  virtual void  v34(); // _ZN7S4299C33v34Ev
  virtual void  v35(); // _ZN7S4299C33v35Ev
  virtual void  v36(); // _ZN7S4299C33v36Ev
  virtual void  v37(); // _ZN7S4299C33v37Ev
  virtual void  v38(); // _ZN7S4299C33v38Ev
  virtual void  v39(); // _ZN7S4299C33v39Ev
  virtual void  v40(); // _ZN7S4299C33v40Ev
  virtual void  v41(); // _ZN7S4299C33v41Ev
  virtual void  v42(); // _ZN7S4299C33v42Ev
  virtual void  v43(); // _ZN7S4299C33v43Ev
  S4299C3(); // tgen
};
//SIG(-1 S4299C3) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26}


 S4299C3 ::~S4299C3(){ note_dtor("S4299C3", this);}
void  S4299C3 ::v18(){vfunc_called(this, "_ZN7S4299C33v18Ev");}
void  S4299C3 ::v19(){vfunc_called(this, "_ZN7S4299C33v19Ev");}
void  S4299C3 ::v20(){vfunc_called(this, "_ZN7S4299C33v20Ev");}
void  S4299C3 ::v21(){vfunc_called(this, "_ZN7S4299C33v21Ev");}
void  S4299C3 ::v22(){vfunc_called(this, "_ZN7S4299C33v22Ev");}
void  S4299C3 ::v23(){vfunc_called(this, "_ZN7S4299C33v23Ev");}
void  S4299C3 ::v24(){vfunc_called(this, "_ZN7S4299C33v24Ev");}
void  S4299C3 ::v25(){vfunc_called(this, "_ZN7S4299C33v25Ev");}
void  S4299C3 ::v26(){vfunc_called(this, "_ZN7S4299C33v26Ev");}
void  S4299C3 ::v27(){vfunc_called(this, "_ZN7S4299C33v27Ev");}
void  S4299C3 ::v28(){vfunc_called(this, "_ZN7S4299C33v28Ev");}
void  S4299C3 ::v29(){vfunc_called(this, "_ZN7S4299C33v29Ev");}
void  S4299C3 ::v30(){vfunc_called(this, "_ZN7S4299C33v30Ev");}
void  S4299C3 ::v31(){vfunc_called(this, "_ZN7S4299C33v31Ev");}
void  S4299C3 ::v32(){vfunc_called(this, "_ZN7S4299C33v32Ev");}
void  S4299C3 ::v33(){vfunc_called(this, "_ZN7S4299C33v33Ev");}
void  S4299C3 ::v34(){vfunc_called(this, "_ZN7S4299C33v34Ev");}
void  S4299C3 ::v35(){vfunc_called(this, "_ZN7S4299C33v35Ev");}
void  S4299C3 ::v36(){vfunc_called(this, "_ZN7S4299C33v36Ev");}
void  S4299C3 ::v37(){vfunc_called(this, "_ZN7S4299C33v37Ev");}
void  S4299C3 ::v38(){vfunc_called(this, "_ZN7S4299C33v38Ev");}
void  S4299C3 ::v39(){vfunc_called(this, "_ZN7S4299C33v39Ev");}
void  S4299C3 ::v40(){vfunc_called(this, "_ZN7S4299C33v40Ev");}
void  S4299C3 ::v41(){vfunc_called(this, "_ZN7S4299C33v41Ev");}
void  S4299C3 ::v42(){vfunc_called(this, "_ZN7S4299C33v42Ev");}
void  S4299C3 ::v43(){vfunc_called(this, "_ZN7S4299C33v43Ev");}
S4299C3 ::S4299C3(){ note_ctor("S4299C3", this);} // tgen

static void Test_S4299C3()
{
  extern Class_Descriptor cd_S4299C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S4299C3, buf);
    S4299C3 *dp, &lv = *(dp=new (buf) S4299C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S4299C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4299C3)");
    test_class_info(&lv, &cd_S4299C3);
    dp->~S4299C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4299C3(Test_S4299C3, "S4299C3", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S4299C3C1Ev();
extern void _ZN7S4299C3D1Ev();
Name_Map name_map_S4299C3[] = {
  NSPAIR(_ZN7S4299C3C1Ev),
  NSPAIR(_ZN7S4299C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4299C3[];
extern void _ZN7S4299C3D1Ev();
extern void _ZN7S4299C3D0Ev();
extern void _ZN7S4299C33v18Ev();
extern void _ZN7S4299C33v19Ev();
extern void _ZN7S4299C33v20Ev();
extern void _ZN7S4299C33v21Ev();
extern void _ZN7S4299C33v22Ev();
extern void _ZN7S4299C33v23Ev();
extern void _ZN7S4299C33v24Ev();
extern void _ZN7S4299C33v25Ev();
extern void _ZN7S4299C33v26Ev();
extern void _ZN7S4299C33v27Ev();
extern void _ZN7S4299C33v28Ev();
extern void _ZN7S4299C33v29Ev();
extern void _ZN7S4299C33v30Ev();
extern void _ZN7S4299C33v31Ev();
extern void _ZN7S4299C33v32Ev();
extern void _ZN7S4299C33v33Ev();
extern void _ZN7S4299C33v34Ev();
extern void _ZN7S4299C33v35Ev();
extern void _ZN7S4299C33v36Ev();
extern void _ZN7S4299C33v37Ev();
extern void _ZN7S4299C33v38Ev();
extern void _ZN7S4299C33v39Ev();
extern void _ZN7S4299C33v40Ev();
extern void _ZN7S4299C33v41Ev();
extern void _ZN7S4299C33v42Ev();
extern void _ZN7S4299C33v43Ev();
static  VTBL_ENTRY vtc_S4299C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4299C3[0]),
  (VTBL_ENTRY)&_ZN7S4299C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4299C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4299C33v18Ev,
  (VTBL_ENTRY)&_ZN7S4299C33v19Ev,
  (VTBL_ENTRY)&_ZN7S4299C33v20Ev,
  (VTBL_ENTRY)&_ZN7S4299C33v21Ev,
  (VTBL_ENTRY)&_ZN7S4299C33v22Ev,
  (VTBL_ENTRY)&_ZN7S4299C33v23Ev,
  (VTBL_ENTRY)&_ZN7S4299C33v24Ev,
  (VTBL_ENTRY)&_ZN7S4299C33v25Ev,
  (VTBL_ENTRY)&_ZN7S4299C33v26Ev,
  (VTBL_ENTRY)&_ZN7S4299C33v27Ev,
  (VTBL_ENTRY)&_ZN7S4299C33v28Ev,
  (VTBL_ENTRY)&_ZN7S4299C33v29Ev,
  (VTBL_ENTRY)&_ZN7S4299C33v30Ev,
  (VTBL_ENTRY)&_ZN7S4299C33v31Ev,
  (VTBL_ENTRY)&_ZN7S4299C33v32Ev,
  (VTBL_ENTRY)&_ZN7S4299C33v33Ev,
  (VTBL_ENTRY)&_ZN7S4299C33v34Ev,
  (VTBL_ENTRY)&_ZN7S4299C33v35Ev,
  (VTBL_ENTRY)&_ZN7S4299C33v36Ev,
  (VTBL_ENTRY)&_ZN7S4299C33v37Ev,
  (VTBL_ENTRY)&_ZN7S4299C33v38Ev,
  (VTBL_ENTRY)&_ZN7S4299C33v39Ev,
  (VTBL_ENTRY)&_ZN7S4299C33v40Ev,
  (VTBL_ENTRY)&_ZN7S4299C33v41Ev,
  (VTBL_ENTRY)&_ZN7S4299C33v42Ev,
  (VTBL_ENTRY)&_ZN7S4299C33v43Ev,
};
extern VTBL_ENTRY _ZTI7S4299C3[];
extern  VTBL_ENTRY _ZTV7S4299C3[];
Class_Descriptor cd_S4299C3 = {  "S4299C3", // class name
  0,0,//no base classes
  &(vtc_S4299C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S4299C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4299C3),30, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4299C2  : S4299C3 {
  void *s4299c2f0[2];
  int s4299c2f1[4];
  ::S2423C5_nt s4299c2f2;
  void *s4299c2f3;
  char s4299c2f4;
  void *s4299c2f5;
  virtual  ~S4299C2(); // _ZN7S4299C2D1Ev
  virtual void  v44(); // _ZN7S4299C23v44Ev
  virtual void  v45(); // _ZN7S4299C23v45Ev
  virtual void  v46(); // _ZN7S4299C23v46Ev
  virtual void  v47(); // _ZN7S4299C23v47Ev
  virtual void  v48(); // _ZN7S4299C23v48Ev
  virtual void  v49(); // _ZN7S4299C23v49Ev
  virtual void  v50(); // _ZN7S4299C23v50Ev
  virtual void  v51(); // _ZN7S4299C23v51Ev
  virtual void  v52(); // _ZN7S4299C23v52Ev
  virtual void  v53(); // _ZN7S4299C23v53Ev
  virtual void  v54(); // _ZN7S4299C23v54Ev
  virtual void  v55(); // _ZN7S4299C23v55Ev
  virtual void  v56(); // _ZN7S4299C23v56Ev
  virtual void  v57(); // _ZN7S4299C23v57Ev
  S4299C2(); // tgen
};
//SIG(-1 S4299C2) C1{ BC2{ vd v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 Fp[2] Fi[4] FC3{ Fi[2]} Fp Fc Fp}


 S4299C2 ::~S4299C2(){ note_dtor("S4299C2", this);}
void  S4299C2 ::v44(){vfunc_called(this, "_ZN7S4299C23v44Ev");}
void  S4299C2 ::v45(){vfunc_called(this, "_ZN7S4299C23v45Ev");}
void  S4299C2 ::v46(){vfunc_called(this, "_ZN7S4299C23v46Ev");}
void  S4299C2 ::v47(){vfunc_called(this, "_ZN7S4299C23v47Ev");}
void  S4299C2 ::v48(){vfunc_called(this, "_ZN7S4299C23v48Ev");}
void  S4299C2 ::v49(){vfunc_called(this, "_ZN7S4299C23v49Ev");}
void  S4299C2 ::v50(){vfunc_called(this, "_ZN7S4299C23v50Ev");}
void  S4299C2 ::v51(){vfunc_called(this, "_ZN7S4299C23v51Ev");}
void  S4299C2 ::v52(){vfunc_called(this, "_ZN7S4299C23v52Ev");}
void  S4299C2 ::v53(){vfunc_called(this, "_ZN7S4299C23v53Ev");}
void  S4299C2 ::v54(){vfunc_called(this, "_ZN7S4299C23v54Ev");}
void  S4299C2 ::v55(){vfunc_called(this, "_ZN7S4299C23v55Ev");}
void  S4299C2 ::v56(){vfunc_called(this, "_ZN7S4299C23v56Ev");}
void  S4299C2 ::v57(){vfunc_called(this, "_ZN7S4299C23v57Ev");}
S4299C2 ::S4299C2(){ note_ctor("S4299C2", this);} // tgen

static void Test_S4299C2()
{
  extern Class_Descriptor cd_S4299C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,13)];
    init_test(&cd_S4299C2, buf);
    S4299C2 *dp, &lv = *(dp=new (buf) S4299C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,48), "sizeof(S4299C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4299C2)");
    check_base_class_offset(lv, (S4299C3*), 0, "S4299C2");
    check_field_offset(lv, s4299c2f0, ABISELECT(8,4), "S4299C2.s4299c2f0");
    check_field_offset(lv, s4299c2f1, ABISELECT(24,12), "S4299C2.s4299c2f1");
    check_field_offset(lv, s4299c2f2, ABISELECT(40,28), "S4299C2.s4299c2f2");
    check_field_offset(lv, s4299c2f3, ABISELECT(48,36), "S4299C2.s4299c2f3");
    check_field_offset(lv, s4299c2f4, ABISELECT(56,40), "S4299C2.s4299c2f4");
    check_field_offset(lv, s4299c2f5, ABISELECT(64,44), "S4299C2.s4299c2f5");
    test_class_info(&lv, &cd_S4299C2);
    dp->~S4299C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4299C2(Test_S4299C2, "S4299C2", ABISELECT(72,48));

#else // __cplusplus

extern void _ZN7S4299C2C1Ev();
extern void _ZN7S4299C2D1Ev();
Name_Map name_map_S4299C2[] = {
  NSPAIR(_ZN7S4299C2C1Ev),
  NSPAIR(_ZN7S4299C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4299C3;
extern VTBL_ENTRY _ZTI7S4299C3[];
extern  VTBL_ENTRY _ZTV7S4299C3[];
static Base_Class bases_S4299C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4299C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4299C2[];
extern void _ZN7S4299C2D1Ev();
extern void _ZN7S4299C2D0Ev();
extern void _ZN7S4299C33v18Ev();
extern void _ZN7S4299C33v19Ev();
extern void _ZN7S4299C33v20Ev();
extern void _ZN7S4299C33v21Ev();
extern void _ZN7S4299C33v22Ev();
extern void _ZN7S4299C33v23Ev();
extern void _ZN7S4299C33v24Ev();
extern void _ZN7S4299C33v25Ev();
extern void _ZN7S4299C33v26Ev();
extern void _ZN7S4299C33v27Ev();
extern void _ZN7S4299C33v28Ev();
extern void _ZN7S4299C33v29Ev();
extern void _ZN7S4299C33v30Ev();
extern void _ZN7S4299C33v31Ev();
extern void _ZN7S4299C33v32Ev();
extern void _ZN7S4299C33v33Ev();
extern void _ZN7S4299C33v34Ev();
extern void _ZN7S4299C33v35Ev();
extern void _ZN7S4299C33v36Ev();
extern void _ZN7S4299C33v37Ev();
extern void _ZN7S4299C33v38Ev();
extern void _ZN7S4299C33v39Ev();
extern void _ZN7S4299C33v40Ev();
extern void _ZN7S4299C33v41Ev();
extern void _ZN7S4299C33v42Ev();
extern void _ZN7S4299C33v43Ev();
extern void _ZN7S4299C23v44Ev();
extern void _ZN7S4299C23v45Ev();
extern void _ZN7S4299C23v46Ev();
extern void _ZN7S4299C23v47Ev();
extern void _ZN7S4299C23v48Ev();
extern void _ZN7S4299C23v49Ev();
extern void _ZN7S4299C23v50Ev();
extern void _ZN7S4299C23v51Ev();
extern void _ZN7S4299C23v52Ev();
extern void _ZN7S4299C23v53Ev();
extern void _ZN7S4299C23v54Ev();
extern void _ZN7S4299C23v55Ev();
extern void _ZN7S4299C23v56Ev();
extern void _ZN7S4299C23v57Ev();
static  VTBL_ENTRY vtc_S4299C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4299C2[0]),
  (VTBL_ENTRY)&_ZN7S4299C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4299C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4299C33v18Ev,
  (VTBL_ENTRY)&_ZN7S4299C33v19Ev,
  (VTBL_ENTRY)&_ZN7S4299C33v20Ev,
  (VTBL_ENTRY)&_ZN7S4299C33v21Ev,
  (VTBL_ENTRY)&_ZN7S4299C33v22Ev,
  (VTBL_ENTRY)&_ZN7S4299C33v23Ev,
  (VTBL_ENTRY)&_ZN7S4299C33v24Ev,
  (VTBL_ENTRY)&_ZN7S4299C33v25Ev,
  (VTBL_ENTRY)&_ZN7S4299C33v26Ev,
  (VTBL_ENTRY)&_ZN7S4299C33v27Ev,
  (VTBL_ENTRY)&_ZN7S4299C33v28Ev,
  (VTBL_ENTRY)&_ZN7S4299C33v29Ev,
  (VTBL_ENTRY)&_ZN7S4299C33v30Ev,
  (VTBL_ENTRY)&_ZN7S4299C33v31Ev,
  (VTBL_ENTRY)&_ZN7S4299C33v32Ev,
  (VTBL_ENTRY)&_ZN7S4299C33v33Ev,
  (VTBL_ENTRY)&_ZN7S4299C33v34Ev,
  (VTBL_ENTRY)&_ZN7S4299C33v35Ev,
  (VTBL_ENTRY)&_ZN7S4299C33v36Ev,
  (VTBL_ENTRY)&_ZN7S4299C33v37Ev,
  (VTBL_ENTRY)&_ZN7S4299C33v38Ev,
  (VTBL_ENTRY)&_ZN7S4299C33v39Ev,
  (VTBL_ENTRY)&_ZN7S4299C33v40Ev,
  (VTBL_ENTRY)&_ZN7S4299C33v41Ev,
  (VTBL_ENTRY)&_ZN7S4299C33v42Ev,
  (VTBL_ENTRY)&_ZN7S4299C33v43Ev,
  (VTBL_ENTRY)&_ZN7S4299C23v44Ev,
  (VTBL_ENTRY)&_ZN7S4299C23v45Ev,
  (VTBL_ENTRY)&_ZN7S4299C23v46Ev,
  (VTBL_ENTRY)&_ZN7S4299C23v47Ev,
  (VTBL_ENTRY)&_ZN7S4299C23v48Ev,
  (VTBL_ENTRY)&_ZN7S4299C23v49Ev,
  (VTBL_ENTRY)&_ZN7S4299C23v50Ev,
  (VTBL_ENTRY)&_ZN7S4299C23v51Ev,
  (VTBL_ENTRY)&_ZN7S4299C23v52Ev,
  (VTBL_ENTRY)&_ZN7S4299C23v53Ev,
  (VTBL_ENTRY)&_ZN7S4299C23v54Ev,
  (VTBL_ENTRY)&_ZN7S4299C23v55Ev,
  (VTBL_ENTRY)&_ZN7S4299C23v56Ev,
  (VTBL_ENTRY)&_ZN7S4299C23v57Ev,
};
extern VTBL_ENTRY _ZTI7S4299C2[];
extern  VTBL_ENTRY _ZTV7S4299C2[];
Class_Descriptor cd_S4299C2 = {  "S4299C2", // class name
  bases_S4299C2, 1,
  &(vtc_S4299C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,48), // object size
  NSPAIRA(_ZTI7S4299C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4299C2),44, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4299C5  {
  void *s4299c5f0;
  char s4299c5f1[32];
  int s4299c5f2[6];
  char s4299c5f3;
  int s4299c5f4[2];
  virtual  ~S4299C5(); // _ZN7S4299C5D1Ev
  virtual void  v58(); // _ZN7S4299C53v58Ev
  virtual void  v59(); // _ZN7S4299C53v59Ev
  S4299C5(); // tgen
};
//SIG(-1 S4299C5) C1{ vd v1 v2 Fp Fc[32] Fi[6] Fc Fi[2]}


 S4299C5 ::~S4299C5(){ note_dtor("S4299C5", this);}
void  S4299C5 ::v58(){vfunc_called(this, "_ZN7S4299C53v58Ev");}
void  S4299C5 ::v59(){vfunc_called(this, "_ZN7S4299C53v59Ev");}
S4299C5 ::S4299C5(){ note_ctor("S4299C5", this);} // tgen

static void Test_S4299C5()
{
  extern Class_Descriptor cd_S4299C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(12,20)];
    init_test(&cd_S4299C5, buf);
    S4299C5 *dp, &lv = *(dp=new (buf) S4299C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(88,76), "sizeof(S4299C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4299C5)");
    check_field_offset(lv, s4299c5f0, ABISELECT(8,4), "S4299C5.s4299c5f0");
    check_field_offset(lv, s4299c5f1, ABISELECT(16,8), "S4299C5.s4299c5f1");
    check_field_offset(lv, s4299c5f2, ABISELECT(48,40), "S4299C5.s4299c5f2");
    check_field_offset(lv, s4299c5f3, ABISELECT(72,64), "S4299C5.s4299c5f3");
    check_field_offset(lv, s4299c5f4, ABISELECT(76,68), "S4299C5.s4299c5f4");
    test_class_info(&lv, &cd_S4299C5);
    dp->~S4299C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4299C5(Test_S4299C5, "S4299C5", ABISELECT(88,76));

#else // __cplusplus

extern void _ZN7S4299C5C1Ev();
extern void _ZN7S4299C5D1Ev();
Name_Map name_map_S4299C5[] = {
  NSPAIR(_ZN7S4299C5C1Ev),
  NSPAIR(_ZN7S4299C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4299C5[];
extern void _ZN7S4299C5D1Ev();
extern void _ZN7S4299C5D0Ev();
extern void _ZN7S4299C53v58Ev();
extern void _ZN7S4299C53v59Ev();
static  VTBL_ENTRY vtc_S4299C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4299C5[0]),
  (VTBL_ENTRY)&_ZN7S4299C5D1Ev,
  (VTBL_ENTRY)&_ZN7S4299C5D0Ev,
  (VTBL_ENTRY)&_ZN7S4299C53v58Ev,
  (VTBL_ENTRY)&_ZN7S4299C53v59Ev,
};
extern VTBL_ENTRY _ZTI7S4299C5[];
extern  VTBL_ENTRY _ZTV7S4299C5[];
Class_Descriptor cd_S4299C5 = {  "S4299C5", // class name
  0,0,//no base classes
  &(vtc_S4299C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(88,76), // object size
  NSPAIRA(_ZTI7S4299C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4299C5),6, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4299C6  {
  virtual  ~S4299C6(); // _ZN7S4299C6D1Ev
  virtual void  v60(); // _ZN7S4299C63v60Ev
  virtual void  v61(); // _ZN7S4299C63v61Ev
  virtual void  v62(); // _ZN7S4299C63v62Ev
  virtual void  v63(); // _ZN7S4299C63v63Ev
  S4299C6(); // tgen
};
//SIG(-1 S4299C6) C1{ vd v1 v2 v3 v4}


 S4299C6 ::~S4299C6(){ note_dtor("S4299C6", this);}
void  S4299C6 ::v60(){vfunc_called(this, "_ZN7S4299C63v60Ev");}
void  S4299C6 ::v61(){vfunc_called(this, "_ZN7S4299C63v61Ev");}
void  S4299C6 ::v62(){vfunc_called(this, "_ZN7S4299C63v62Ev");}
void  S4299C6 ::v63(){vfunc_called(this, "_ZN7S4299C63v63Ev");}
S4299C6 ::S4299C6(){ note_ctor("S4299C6", this);} // tgen

static void Test_S4299C6()
{
  extern Class_Descriptor cd_S4299C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S4299C6, buf);
    S4299C6 *dp, &lv = *(dp=new (buf) S4299C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S4299C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4299C6)");
    test_class_info(&lv, &cd_S4299C6);
    dp->~S4299C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4299C6(Test_S4299C6, "S4299C6", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S4299C6C1Ev();
extern void _ZN7S4299C6D1Ev();
Name_Map name_map_S4299C6[] = {
  NSPAIR(_ZN7S4299C6C1Ev),
  NSPAIR(_ZN7S4299C6D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4299C6[];
extern void _ZN7S4299C6D1Ev();
extern void _ZN7S4299C6D0Ev();
extern void _ZN7S4299C63v60Ev();
extern void _ZN7S4299C63v61Ev();
extern void _ZN7S4299C63v62Ev();
extern void _ZN7S4299C63v63Ev();
static  VTBL_ENTRY vtc_S4299C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4299C6[0]),
  (VTBL_ENTRY)&_ZN7S4299C6D1Ev,
  (VTBL_ENTRY)&_ZN7S4299C6D0Ev,
  (VTBL_ENTRY)&_ZN7S4299C63v60Ev,
  (VTBL_ENTRY)&_ZN7S4299C63v61Ev,
  (VTBL_ENTRY)&_ZN7S4299C63v62Ev,
  (VTBL_ENTRY)&_ZN7S4299C63v63Ev,
};
extern VTBL_ENTRY _ZTI7S4299C6[];
extern  VTBL_ENTRY _ZTV7S4299C6[];
Class_Descriptor cd_S4299C6 = {  "S4299C6", // class name
  0,0,//no base classes
  &(vtc_S4299C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S4299C6),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4299C6),8, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4299C7  {
  int s4299c7f0[2];
  void *s4299c7f1;
  int s4299c7f2[2];
  void *s4299c7f3;
  int s4299c7f4[3];
  void *s4299c7f5;
};
//SIG(-1 S4299C7) C1{ Fi[2] Fp Fi[2] Fp Fi[3] Fp}



static void Test_S4299C7()
{
  {
    init_simple_test("S4299C7");
    S4299C7 lv;
    check2(sizeof(lv), ABISELECT(56,40), "sizeof(S4299C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4299C7)");
    check_field_offset(lv, s4299c7f0, 0, "S4299C7.s4299c7f0");
    check_field_offset(lv, s4299c7f1, 8, "S4299C7.s4299c7f1");
    check_field_offset(lv, s4299c7f2, ABISELECT(16,12), "S4299C7.s4299c7f2");
    check_field_offset(lv, s4299c7f3, ABISELECT(24,20), "S4299C7.s4299c7f3");
    check_field_offset(lv, s4299c7f4, ABISELECT(32,24), "S4299C7.s4299c7f4");
    check_field_offset(lv, s4299c7f5, ABISELECT(48,36), "S4299C7.s4299c7f5");
  }
}
static Arrange_To_Call_Me vS4299C7(Test_S4299C7, "S4299C7", ABISELECT(56,40));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4299C9_nt  {
  int s4299c9f0;
  int s4299c9f1;
};
//SIG(-1 S4299C9_nt) C1{ Fi[2]}



//skip512 S4299C9_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

union  S4299C8  {
  int s4299c8f0;
  ::S4299C9_nt s4299c8f1;
  ::S4299C9_nt s4299c8f2;
  ::S4299C9_nt s4299c8f3;
  ::S4299C9_nt s4299c8f4;
};
//SIG(1 S4299C8) U1{ Fi FC2{ Fi Fi} FC2 FC2 FC2}

#endif // __cplusplus
#ifdef __cplusplus

struct  S4299C12  {
  int s4299c12f0;
  char s4299c12f1[4];
  int s4299c12f2;
  int s4299c12f3;
  int s4299c12f4;
  int s4299c12f5;
  int s4299c12f6;
};
//SIG(1 S4299C12) C1{ Fi Fc[4] Fi[5]}



static void Test_S4299C12()
{
  {
    init_simple_test("S4299C12");
    S4299C12 lv;
    check2(sizeof(lv), 28, "sizeof(S4299C12)");
    check2(__alignof__(lv), 4, "__alignof__(S4299C12)");
    check_field_offset(lv, s4299c12f0, 0, "S4299C12.s4299c12f0");
    check_field_offset(lv, s4299c12f1, 4, "S4299C12.s4299c12f1");
    check_field_offset(lv, s4299c12f2, 8, "S4299C12.s4299c12f2");
    check_field_offset(lv, s4299c12f3, 12, "S4299C12.s4299c12f3");
    check_field_offset(lv, s4299c12f4, 16, "S4299C12.s4299c12f4");
    check_field_offset(lv, s4299c12f5, 20, "S4299C12.s4299c12f5");
    check_field_offset(lv, s4299c12f6, 24, "S4299C12.s4299c12f6");
  }
}
static Arrange_To_Call_Me vS4299C12(Test_S4299C12, "S4299C12", 28);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4299C13_nt  {
  int s4299c13f0;
  int s4299c13f1;
  int s4299c13f2;
};
//SIG(1 S4299C13_nt) C1{ Fi[3]}



//skip512 S4299C13_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4299C14_nt  {
  int s4299c14f0;
  int s4299c14f1;
  int s4299c14f2;
  int s4299c14f3;
  int s4299c14f4;
};
//SIG(1 S4299C14_nt) C1{ Fi[5]}



//skip512 S4299C14_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

union  S4299C11  {
  int s4299c11f0;
  ::S4299C12 s4299c11f1;
  ::S4299C13_nt s4299c11f2;
  ::S4299C14_nt s4299c11f3;
  ::S4299C14_nt s4299c11f4;
};
//SIG(1 S4299C11) U1{ Fi FC2{ Fi Fc[4] Fi Fi Fi Fi Fi} FC3{ Fi Fi Fi} FC4{ Fi Fi Fi Fi Fi} FC4}

#endif // __cplusplus
#ifdef __cplusplus

struct  S4299C1  : S4299C2 , S4299C5 , S4299C6 {
  char s4299c1f0;
  void *s4299c1f1;
  int s4299c1f2;
  long s4299c1f3[3];
  void *s4299c1f4;
  char s4299c1f5[2];
  ::S4299C7 s4299c1f6;
  ::S4299C8 s4299c1f7;
  ::S4299C11 s4299c1f8;
  void *s4299c1f9;
  int s4299c1f10;
  int s4299c1f11;
  void *s4299c1f12;
  void *s4299c1f13;
  void *s4299c1f14;
  void *s4299c1f15;
  long s4299c1f16;
  long s4299c1f17;
  void *s4299c1f18;
  virtual  ~S4299C1(); // _ZN7S4299C1D1Ev
  virtual void  v1(); // _ZN7S4299C12v1Ev
  virtual void  v2(); // _ZN7S4299C12v2Ev
  virtual void  v3(); // _ZN7S4299C12v3Ev
  virtual void  v4(); // _ZN7S4299C12v4Ev
  virtual void  v5(); // _ZN7S4299C12v5Ev
  virtual void  v6(); // _ZN7S4299C12v6Ev
  virtual void  v7(); // _ZN7S4299C12v7Ev
  virtual void  v8(); // _ZN7S4299C12v8Ev
  virtual void  v9(); // _ZN7S4299C12v9Ev
  virtual void  v10(); // _ZN7S4299C13v10Ev
  virtual void  v11(); // _ZN7S4299C13v11Ev
  virtual void  v12(); // _ZN7S4299C13v12Ev
  virtual void  v13(); // _ZN7S4299C13v13Ev
  virtual void  v14(); // _ZN7S4299C13v14Ev
  virtual void  v15(); // _ZN7S4299C13v15Ev
  virtual void  v16(); // _ZN7S4299C13v16Ev
  virtual void  v17(); // _ZN7S4299C13v17Ev
  S4299C1(); // tgen
};
//SIG(1 S4299C1) C1{ BC2{ BC3{ vd v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43} vd v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 Fp[2] Fi[4] FC4{ Fi[2]} Fp Fc Fp} BC5{ vd v58 v59 Fp Fc[32] Fi[6] Fc Fi[2]} BC6{ vd v60 v61 v62 v63} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 Fc Fp Fi Fl[3] Fp Fc[2] FC7{ Fi[2] Fp Fi[2] Fp Fi[3] Fp} FU8{ Fi FC9{ Fi Fi} FC9 FC9 FC9} FU10{ Fi FC11{ Fi Fc[4] Fi Fi Fi Fi Fi} FC12{ Fi Fi Fi} FC13{ Fi Fi Fi Fi Fi} FC13} Fp Fi Fi Fp Fp Fp Fp Fl Fl Fp}


 S4299C1 ::~S4299C1(){ note_dtor("S4299C1", this);}
void  S4299C1 ::v1(){vfunc_called(this, "_ZN7S4299C12v1Ev");}
void  S4299C1 ::v2(){vfunc_called(this, "_ZN7S4299C12v2Ev");}
void  S4299C1 ::v3(){vfunc_called(this, "_ZN7S4299C12v3Ev");}
void  S4299C1 ::v4(){vfunc_called(this, "_ZN7S4299C12v4Ev");}
void  S4299C1 ::v5(){vfunc_called(this, "_ZN7S4299C12v5Ev");}
void  S4299C1 ::v6(){vfunc_called(this, "_ZN7S4299C12v6Ev");}
void  S4299C1 ::v7(){vfunc_called(this, "_ZN7S4299C12v7Ev");}
void  S4299C1 ::v8(){vfunc_called(this, "_ZN7S4299C12v8Ev");}
void  S4299C1 ::v9(){vfunc_called(this, "_ZN7S4299C12v9Ev");}
void  S4299C1 ::v10(){vfunc_called(this, "_ZN7S4299C13v10Ev");}
void  S4299C1 ::v11(){vfunc_called(this, "_ZN7S4299C13v11Ev");}
void  S4299C1 ::v12(){vfunc_called(this, "_ZN7S4299C13v12Ev");}
void  S4299C1 ::v13(){vfunc_called(this, "_ZN7S4299C13v13Ev");}
void  S4299C1 ::v14(){vfunc_called(this, "_ZN7S4299C13v14Ev");}
void  S4299C1 ::v15(){vfunc_called(this, "_ZN7S4299C13v15Ev");}
void  S4299C1 ::v16(){vfunc_called(this, "_ZN7S4299C13v16Ev");}
void  S4299C1 ::v17(){vfunc_called(this, "_ZN7S4299C13v17Ev");}
S4299C1 ::S4299C1(){ note_ctor("S4299C1", this);} // tgen

static void Test_S4299C1()
{
  extern Class_Descriptor cd_S4299C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(51,70)];
    init_test(&cd_S4299C1, buf);
    S4299C1 *dp, &lv = *(dp=new (buf) S4299C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(400,276), "sizeof(S4299C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4299C1)");
    check_base_class_offset(lv, (S4299C3*)(S4299C2*), 0, "S4299C1");
    check_base_class_offset(lv, (S4299C2*), 0, "S4299C1");
    check_base_class_offset(lv, (S4299C5*), ABISELECT(72,48), "S4299C1");
    check_base_class_offset(lv, (S4299C6*), ABISELECT(160,124), "S4299C1");
    check_field_offset(lv, s4299c1f0, ABISELECT(168,128), "S4299C1.s4299c1f0");
    check_field_offset(lv, s4299c1f1, ABISELECT(176,132), "S4299C1.s4299c1f1");
    check_field_offset(lv, s4299c1f2, ABISELECT(184,136), "S4299C1.s4299c1f2");
    check_field_offset(lv, s4299c1f3, ABISELECT(192,140), "S4299C1.s4299c1f3");
    check_field_offset(lv, s4299c1f4, ABISELECT(216,152), "S4299C1.s4299c1f4");
    check_field_offset(lv, s4299c1f5, ABISELECT(224,156), "S4299C1.s4299c1f5");
    check_field_offset(lv, s4299c1f6, ABISELECT(232,160), "S4299C1.s4299c1f6");
    check_field_offset(lv, s4299c1f7, ABISELECT(288,200), "S4299C1.s4299c1f7");
    check_field_offset(lv, s4299c1f8, ABISELECT(296,208), "S4299C1.s4299c1f8");
    check_field_offset(lv, s4299c1f9, ABISELECT(328,236), "S4299C1.s4299c1f9");
    check_field_offset(lv, s4299c1f10, ABISELECT(336,240), "S4299C1.s4299c1f10");
    check_field_offset(lv, s4299c1f11, ABISELECT(340,244), "S4299C1.s4299c1f11");
    check_field_offset(lv, s4299c1f12, ABISELECT(344,248), "S4299C1.s4299c1f12");
    check_field_offset(lv, s4299c1f13, ABISELECT(352,252), "S4299C1.s4299c1f13");
    check_field_offset(lv, s4299c1f14, ABISELECT(360,256), "S4299C1.s4299c1f14");
    check_field_offset(lv, s4299c1f15, ABISELECT(368,260), "S4299C1.s4299c1f15");
    check_field_offset(lv, s4299c1f16, ABISELECT(376,264), "S4299C1.s4299c1f16");
    check_field_offset(lv, s4299c1f17, ABISELECT(384,268), "S4299C1.s4299c1f17");
    check_field_offset(lv, s4299c1f18, ABISELECT(392,272), "S4299C1.s4299c1f18");
    test_class_info(&lv, &cd_S4299C1);
    dp->~S4299C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4299C1(Test_S4299C1, "S4299C1", ABISELECT(400,276));

#else // __cplusplus

extern void _ZN7S4299C1C1Ev();
extern void _ZN7S4299C1D1Ev();
Name_Map name_map_S4299C1[] = {
  NSPAIR(_ZN7S4299C1C1Ev),
  NSPAIR(_ZN7S4299C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4299C3;
extern VTBL_ENTRY _ZTI7S4299C3[];
extern  VTBL_ENTRY _ZTV7S4299C3[];
extern Class_Descriptor cd_S4299C2;
extern VTBL_ENTRY _ZTI7S4299C2[];
extern  VTBL_ENTRY _ZTV7S4299C2[];
extern Class_Descriptor cd_S4299C5;
extern VTBL_ENTRY _ZTI7S4299C5[];
extern  VTBL_ENTRY _ZTV7S4299C5[];
extern Class_Descriptor cd_S4299C6;
extern VTBL_ENTRY _ZTI7S4299C6[];
extern  VTBL_ENTRY _ZTV7S4299C6[];
static Base_Class bases_S4299C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4299C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S4299C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S4299C5,    ABISELECT(72,48), //bcp->offset
    61, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S4299C6,    ABISELECT(160,124), //bcp->offset
    67, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4299C1[];
extern void _ZN7S4299C1D1Ev();
extern void _ZN7S4299C1D0Ev();
extern void _ZN7S4299C33v18Ev();
extern void _ZN7S4299C33v19Ev();
extern void _ZN7S4299C33v20Ev();
extern void _ZN7S4299C33v21Ev();
extern void _ZN7S4299C33v22Ev();
extern void _ZN7S4299C33v23Ev();
extern void _ZN7S4299C33v24Ev();
extern void _ZN7S4299C33v25Ev();
extern void _ZN7S4299C33v26Ev();
extern void _ZN7S4299C33v27Ev();
extern void _ZN7S4299C33v28Ev();
extern void _ZN7S4299C33v29Ev();
extern void _ZN7S4299C33v30Ev();
extern void _ZN7S4299C33v31Ev();
extern void _ZN7S4299C33v32Ev();
extern void _ZN7S4299C33v33Ev();
extern void _ZN7S4299C33v34Ev();
extern void _ZN7S4299C33v35Ev();
extern void _ZN7S4299C33v36Ev();
extern void _ZN7S4299C33v37Ev();
extern void _ZN7S4299C33v38Ev();
extern void _ZN7S4299C33v39Ev();
extern void _ZN7S4299C33v40Ev();
extern void _ZN7S4299C33v41Ev();
extern void _ZN7S4299C33v42Ev();
extern void _ZN7S4299C33v43Ev();
extern void _ZN7S4299C23v44Ev();
extern void _ZN7S4299C23v45Ev();
extern void _ZN7S4299C23v46Ev();
extern void _ZN7S4299C23v47Ev();
extern void _ZN7S4299C23v48Ev();
extern void _ZN7S4299C23v49Ev();
extern void _ZN7S4299C23v50Ev();
extern void _ZN7S4299C23v51Ev();
extern void _ZN7S4299C23v52Ev();
extern void _ZN7S4299C23v53Ev();
extern void _ZN7S4299C23v54Ev();
extern void _ZN7S4299C23v55Ev();
extern void _ZN7S4299C23v56Ev();
extern void _ZN7S4299C23v57Ev();
extern void _ZN7S4299C12v1Ev();
extern void _ZN7S4299C12v2Ev();
extern void _ZN7S4299C12v3Ev();
extern void _ZN7S4299C12v4Ev();
extern void _ZN7S4299C12v5Ev();
extern void _ZN7S4299C12v6Ev();
extern void _ZN7S4299C12v7Ev();
extern void _ZN7S4299C12v8Ev();
extern void _ZN7S4299C12v9Ev();
extern void _ZN7S4299C13v10Ev();
extern void _ZN7S4299C13v11Ev();
extern void _ZN7S4299C13v12Ev();
extern void _ZN7S4299C13v13Ev();
extern void _ZN7S4299C13v14Ev();
extern void _ZN7S4299C13v15Ev();
extern void _ZN7S4299C13v16Ev();
extern void _ZN7S4299C13v17Ev();
extern void ABISELECT(_ZThn72_N7S4299C1D1Ev,_ZThn48_N7S4299C1D1Ev)();
extern void ABISELECT(_ZThn72_N7S4299C1D0Ev,_ZThn48_N7S4299C1D0Ev)();
extern void _ZN7S4299C53v58Ev();
extern void _ZN7S4299C53v59Ev();
extern void ABISELECT(_ZThn160_N7S4299C1D1Ev,_ZThn124_N7S4299C1D1Ev)();
extern void ABISELECT(_ZThn160_N7S4299C1D0Ev,_ZThn124_N7S4299C1D0Ev)();
extern void _ZN7S4299C63v60Ev();
extern void _ZN7S4299C63v61Ev();
extern void _ZN7S4299C63v62Ev();
extern void _ZN7S4299C63v63Ev();
static  VTBL_ENTRY vtc_S4299C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4299C1[0]),
  (VTBL_ENTRY)&_ZN7S4299C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4299C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4299C33v18Ev,
  (VTBL_ENTRY)&_ZN7S4299C33v19Ev,
  (VTBL_ENTRY)&_ZN7S4299C33v20Ev,
  (VTBL_ENTRY)&_ZN7S4299C33v21Ev,
  (VTBL_ENTRY)&_ZN7S4299C33v22Ev,
  (VTBL_ENTRY)&_ZN7S4299C33v23Ev,
  (VTBL_ENTRY)&_ZN7S4299C33v24Ev,
  (VTBL_ENTRY)&_ZN7S4299C33v25Ev,
  (VTBL_ENTRY)&_ZN7S4299C33v26Ev,
  (VTBL_ENTRY)&_ZN7S4299C33v27Ev,
  (VTBL_ENTRY)&_ZN7S4299C33v28Ev,
  (VTBL_ENTRY)&_ZN7S4299C33v29Ev,
  (VTBL_ENTRY)&_ZN7S4299C33v30Ev,
  (VTBL_ENTRY)&_ZN7S4299C33v31Ev,
  (VTBL_ENTRY)&_ZN7S4299C33v32Ev,
  (VTBL_ENTRY)&_ZN7S4299C33v33Ev,
  (VTBL_ENTRY)&_ZN7S4299C33v34Ev,
  (VTBL_ENTRY)&_ZN7S4299C33v35Ev,
  (VTBL_ENTRY)&_ZN7S4299C33v36Ev,
  (VTBL_ENTRY)&_ZN7S4299C33v37Ev,
  (VTBL_ENTRY)&_ZN7S4299C33v38Ev,
  (VTBL_ENTRY)&_ZN7S4299C33v39Ev,
  (VTBL_ENTRY)&_ZN7S4299C33v40Ev,
  (VTBL_ENTRY)&_ZN7S4299C33v41Ev,
  (VTBL_ENTRY)&_ZN7S4299C33v42Ev,
  (VTBL_ENTRY)&_ZN7S4299C33v43Ev,
  (VTBL_ENTRY)&_ZN7S4299C23v44Ev,
  (VTBL_ENTRY)&_ZN7S4299C23v45Ev,
  (VTBL_ENTRY)&_ZN7S4299C23v46Ev,
  (VTBL_ENTRY)&_ZN7S4299C23v47Ev,
  (VTBL_ENTRY)&_ZN7S4299C23v48Ev,
  (VTBL_ENTRY)&_ZN7S4299C23v49Ev,
  (VTBL_ENTRY)&_ZN7S4299C23v50Ev,
  (VTBL_ENTRY)&_ZN7S4299C23v51Ev,
  (VTBL_ENTRY)&_ZN7S4299C23v52Ev,
  (VTBL_ENTRY)&_ZN7S4299C23v53Ev,
  (VTBL_ENTRY)&_ZN7S4299C23v54Ev,
  (VTBL_ENTRY)&_ZN7S4299C23v55Ev,
  (VTBL_ENTRY)&_ZN7S4299C23v56Ev,
  (VTBL_ENTRY)&_ZN7S4299C23v57Ev,
  (VTBL_ENTRY)&_ZN7S4299C12v1Ev,
  (VTBL_ENTRY)&_ZN7S4299C12v2Ev,
  (VTBL_ENTRY)&_ZN7S4299C12v3Ev,
  (VTBL_ENTRY)&_ZN7S4299C12v4Ev,
  (VTBL_ENTRY)&_ZN7S4299C12v5Ev,
  (VTBL_ENTRY)&_ZN7S4299C12v6Ev,
  (VTBL_ENTRY)&_ZN7S4299C12v7Ev,
  (VTBL_ENTRY)&_ZN7S4299C12v8Ev,
  (VTBL_ENTRY)&_ZN7S4299C12v9Ev,
  (VTBL_ENTRY)&_ZN7S4299C13v10Ev,
  (VTBL_ENTRY)&_ZN7S4299C13v11Ev,
  (VTBL_ENTRY)&_ZN7S4299C13v12Ev,
  (VTBL_ENTRY)&_ZN7S4299C13v13Ev,
  (VTBL_ENTRY)&_ZN7S4299C13v14Ev,
  (VTBL_ENTRY)&_ZN7S4299C13v15Ev,
  (VTBL_ENTRY)&_ZN7S4299C13v16Ev,
  (VTBL_ENTRY)&_ZN7S4299C13v17Ev,
  ABISELECT(-72,-48),
  (VTBL_ENTRY)&(_ZTI7S4299C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn72_N7S4299C1D1Ev,_ZThn48_N7S4299C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn72_N7S4299C1D0Ev,_ZThn48_N7S4299C1D0Ev),
  (VTBL_ENTRY)&_ZN7S4299C53v58Ev,
  (VTBL_ENTRY)&_ZN7S4299C53v59Ev,
  ABISELECT(-160,-124),
  (VTBL_ENTRY)&(_ZTI7S4299C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn160_N7S4299C1D1Ev,_ZThn124_N7S4299C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn160_N7S4299C1D0Ev,_ZThn124_N7S4299C1D0Ev),
  (VTBL_ENTRY)&_ZN7S4299C63v60Ev,
  (VTBL_ENTRY)&_ZN7S4299C63v61Ev,
  (VTBL_ENTRY)&_ZN7S4299C63v62Ev,
  (VTBL_ENTRY)&_ZN7S4299C63v63Ev,
};
extern VTBL_ENTRY _ZTI7S4299C1[];
extern  VTBL_ENTRY _ZTV7S4299C1[];
Class_Descriptor cd_S4299C1 = {  "S4299C1", // class name
  bases_S4299C1, 4,
  &(vtc_S4299C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(400,276), // object size
  NSPAIRA(_ZTI7S4299C1),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S4299C1),75, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  4, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4672C3  {
  virtual  ~S4672C3(); // _ZN7S4672C3D1Ev
  virtual void  v25(); // _ZN7S4672C33v25Ev
  virtual void  v26(); // _ZN7S4672C33v26Ev
  virtual void  v27(); // _ZN7S4672C33v27Ev
  virtual void  v28(); // _ZN7S4672C33v28Ev
  virtual void  v29(); // _ZN7S4672C33v29Ev
  virtual void  v30(); // _ZN7S4672C33v30Ev
  virtual void  v31(); // _ZN7S4672C33v31Ev
  virtual void  v32(); // _ZN7S4672C33v32Ev
  virtual void  v33(); // _ZN7S4672C33v33Ev
  virtual void  v34(); // _ZN7S4672C33v34Ev
  virtual void  v35(); // _ZN7S4672C33v35Ev
  virtual void  v36(); // _ZN7S4672C33v36Ev
  virtual void  v37(); // _ZN7S4672C33v37Ev
  virtual void  v38(); // _ZN7S4672C33v38Ev
  virtual void  v39(); // _ZN7S4672C33v39Ev
  virtual void  v40(); // _ZN7S4672C33v40Ev
  virtual void  v41(); // _ZN7S4672C33v41Ev
  virtual void  v42(); // _ZN7S4672C33v42Ev
  virtual void  v43(); // _ZN7S4672C33v43Ev
  virtual void  v44(); // _ZN7S4672C33v44Ev
  virtual void  v45(); // _ZN7S4672C33v45Ev
  virtual void  v46(); // _ZN7S4672C33v46Ev
  virtual void  v47(); // _ZN7S4672C33v47Ev
  virtual void  v48(); // _ZN7S4672C33v48Ev
  virtual void  v49(); // _ZN7S4672C33v49Ev
  virtual void  v50(); // _ZN7S4672C33v50Ev
  S4672C3(); // tgen
};
//SIG(-1 S4672C3) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26}


 S4672C3 ::~S4672C3(){ note_dtor("S4672C3", this);}
void  S4672C3 ::v25(){vfunc_called(this, "_ZN7S4672C33v25Ev");}
void  S4672C3 ::v26(){vfunc_called(this, "_ZN7S4672C33v26Ev");}
void  S4672C3 ::v27(){vfunc_called(this, "_ZN7S4672C33v27Ev");}
void  S4672C3 ::v28(){vfunc_called(this, "_ZN7S4672C33v28Ev");}
void  S4672C3 ::v29(){vfunc_called(this, "_ZN7S4672C33v29Ev");}
void  S4672C3 ::v30(){vfunc_called(this, "_ZN7S4672C33v30Ev");}
void  S4672C3 ::v31(){vfunc_called(this, "_ZN7S4672C33v31Ev");}
void  S4672C3 ::v32(){vfunc_called(this, "_ZN7S4672C33v32Ev");}
void  S4672C3 ::v33(){vfunc_called(this, "_ZN7S4672C33v33Ev");}
void  S4672C3 ::v34(){vfunc_called(this, "_ZN7S4672C33v34Ev");}
void  S4672C3 ::v35(){vfunc_called(this, "_ZN7S4672C33v35Ev");}
void  S4672C3 ::v36(){vfunc_called(this, "_ZN7S4672C33v36Ev");}
void  S4672C3 ::v37(){vfunc_called(this, "_ZN7S4672C33v37Ev");}
void  S4672C3 ::v38(){vfunc_called(this, "_ZN7S4672C33v38Ev");}
void  S4672C3 ::v39(){vfunc_called(this, "_ZN7S4672C33v39Ev");}
void  S4672C3 ::v40(){vfunc_called(this, "_ZN7S4672C33v40Ev");}
void  S4672C3 ::v41(){vfunc_called(this, "_ZN7S4672C33v41Ev");}
void  S4672C3 ::v42(){vfunc_called(this, "_ZN7S4672C33v42Ev");}
void  S4672C3 ::v43(){vfunc_called(this, "_ZN7S4672C33v43Ev");}
void  S4672C3 ::v44(){vfunc_called(this, "_ZN7S4672C33v44Ev");}
void  S4672C3 ::v45(){vfunc_called(this, "_ZN7S4672C33v45Ev");}
void  S4672C3 ::v46(){vfunc_called(this, "_ZN7S4672C33v46Ev");}
void  S4672C3 ::v47(){vfunc_called(this, "_ZN7S4672C33v47Ev");}
void  S4672C3 ::v48(){vfunc_called(this, "_ZN7S4672C33v48Ev");}
void  S4672C3 ::v49(){vfunc_called(this, "_ZN7S4672C33v49Ev");}
void  S4672C3 ::v50(){vfunc_called(this, "_ZN7S4672C33v50Ev");}
S4672C3 ::S4672C3(){ note_ctor("S4672C3", this);} // tgen

static void Test_S4672C3()
{
  extern Class_Descriptor cd_S4672C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S4672C3, buf);
    S4672C3 *dp, &lv = *(dp=new (buf) S4672C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S4672C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4672C3)");
    test_class_info(&lv, &cd_S4672C3);
    dp->~S4672C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4672C3(Test_S4672C3, "S4672C3", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S4672C3C1Ev();
extern void _ZN7S4672C3D1Ev();
Name_Map name_map_S4672C3[] = {
  NSPAIR(_ZN7S4672C3C1Ev),
  NSPAIR(_ZN7S4672C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4672C3[];
extern void _ZN7S4672C3D1Ev();
extern void _ZN7S4672C3D0Ev();
extern void _ZN7S4672C33v25Ev();
extern void _ZN7S4672C33v26Ev();
extern void _ZN7S4672C33v27Ev();
extern void _ZN7S4672C33v28Ev();
extern void _ZN7S4672C33v29Ev();
extern void _ZN7S4672C33v30Ev();
extern void _ZN7S4672C33v31Ev();
extern void _ZN7S4672C33v32Ev();
extern void _ZN7S4672C33v33Ev();
extern void _ZN7S4672C33v34Ev();
extern void _ZN7S4672C33v35Ev();
extern void _ZN7S4672C33v36Ev();
extern void _ZN7S4672C33v37Ev();
extern void _ZN7S4672C33v38Ev();
extern void _ZN7S4672C33v39Ev();
extern void _ZN7S4672C33v40Ev();
extern void _ZN7S4672C33v41Ev();
extern void _ZN7S4672C33v42Ev();
extern void _ZN7S4672C33v43Ev();
extern void _ZN7S4672C33v44Ev();
extern void _ZN7S4672C33v45Ev();
extern void _ZN7S4672C33v46Ev();
extern void _ZN7S4672C33v47Ev();
extern void _ZN7S4672C33v48Ev();
extern void _ZN7S4672C33v49Ev();
extern void _ZN7S4672C33v50Ev();
static  VTBL_ENTRY vtc_S4672C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4672C3[0]),
  (VTBL_ENTRY)&_ZN7S4672C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4672C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4672C33v25Ev,
  (VTBL_ENTRY)&_ZN7S4672C33v26Ev,
  (VTBL_ENTRY)&_ZN7S4672C33v27Ev,
  (VTBL_ENTRY)&_ZN7S4672C33v28Ev,
  (VTBL_ENTRY)&_ZN7S4672C33v29Ev,
  (VTBL_ENTRY)&_ZN7S4672C33v30Ev,
  (VTBL_ENTRY)&_ZN7S4672C33v31Ev,
  (VTBL_ENTRY)&_ZN7S4672C33v32Ev,
  (VTBL_ENTRY)&_ZN7S4672C33v33Ev,
  (VTBL_ENTRY)&_ZN7S4672C33v34Ev,
  (VTBL_ENTRY)&_ZN7S4672C33v35Ev,
  (VTBL_ENTRY)&_ZN7S4672C33v36Ev,
  (VTBL_ENTRY)&_ZN7S4672C33v37Ev,
  (VTBL_ENTRY)&_ZN7S4672C33v38Ev,
  (VTBL_ENTRY)&_ZN7S4672C33v39Ev,
  (VTBL_ENTRY)&_ZN7S4672C33v40Ev,
  (VTBL_ENTRY)&_ZN7S4672C33v41Ev,
  (VTBL_ENTRY)&_ZN7S4672C33v42Ev,
  (VTBL_ENTRY)&_ZN7S4672C33v43Ev,
  (VTBL_ENTRY)&_ZN7S4672C33v44Ev,
  (VTBL_ENTRY)&_ZN7S4672C33v45Ev,
  (VTBL_ENTRY)&_ZN7S4672C33v46Ev,
  (VTBL_ENTRY)&_ZN7S4672C33v47Ev,
  (VTBL_ENTRY)&_ZN7S4672C33v48Ev,
  (VTBL_ENTRY)&_ZN7S4672C33v49Ev,
  (VTBL_ENTRY)&_ZN7S4672C33v50Ev,
};
extern VTBL_ENTRY _ZTI7S4672C3[];
extern  VTBL_ENTRY _ZTV7S4672C3[];
Class_Descriptor cd_S4672C3 = {  "S4672C3", // class name
  0,0,//no base classes
  &(vtc_S4672C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S4672C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4672C3),30, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4672C2  : S4672C3 {
  void *s4672c2f0[2];
  int s4672c2f1[4];
  ::S2423C5_nt s4672c2f2;
  void *s4672c2f3;
  char s4672c2f4;
  void *s4672c2f5;
  virtual  ~S4672C2(); // _ZN7S4672C2D1Ev
  virtual void  v51(); // _ZN7S4672C23v51Ev
  virtual void  v52(); // _ZN7S4672C23v52Ev
  virtual void  v53(); // _ZN7S4672C23v53Ev
  virtual void  v54(); // _ZN7S4672C23v54Ev
  virtual void  v55(); // _ZN7S4672C23v55Ev
  virtual void  v56(); // _ZN7S4672C23v56Ev
  virtual void  v57(); // _ZN7S4672C23v57Ev
  virtual void  v58(); // _ZN7S4672C23v58Ev
  virtual void  v59(); // _ZN7S4672C23v59Ev
  virtual void  v60(); // _ZN7S4672C23v60Ev
  virtual void  v61(); // _ZN7S4672C23v61Ev
  virtual void  v62(); // _ZN7S4672C23v62Ev
  virtual void  v63(); // _ZN7S4672C23v63Ev
  virtual void  v64(); // _ZN7S4672C23v64Ev
  S4672C2(); // tgen
};
//SIG(-1 S4672C2) C1{ BC2{ vd v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 Fp[2] Fi[4] FC3{ Fi[2]} Fp Fc Fp}


 S4672C2 ::~S4672C2(){ note_dtor("S4672C2", this);}
void  S4672C2 ::v51(){vfunc_called(this, "_ZN7S4672C23v51Ev");}
void  S4672C2 ::v52(){vfunc_called(this, "_ZN7S4672C23v52Ev");}
void  S4672C2 ::v53(){vfunc_called(this, "_ZN7S4672C23v53Ev");}
void  S4672C2 ::v54(){vfunc_called(this, "_ZN7S4672C23v54Ev");}
void  S4672C2 ::v55(){vfunc_called(this, "_ZN7S4672C23v55Ev");}
void  S4672C2 ::v56(){vfunc_called(this, "_ZN7S4672C23v56Ev");}
void  S4672C2 ::v57(){vfunc_called(this, "_ZN7S4672C23v57Ev");}
void  S4672C2 ::v58(){vfunc_called(this, "_ZN7S4672C23v58Ev");}
void  S4672C2 ::v59(){vfunc_called(this, "_ZN7S4672C23v59Ev");}
void  S4672C2 ::v60(){vfunc_called(this, "_ZN7S4672C23v60Ev");}
void  S4672C2 ::v61(){vfunc_called(this, "_ZN7S4672C23v61Ev");}
void  S4672C2 ::v62(){vfunc_called(this, "_ZN7S4672C23v62Ev");}
void  S4672C2 ::v63(){vfunc_called(this, "_ZN7S4672C23v63Ev");}
void  S4672C2 ::v64(){vfunc_called(this, "_ZN7S4672C23v64Ev");}
S4672C2 ::S4672C2(){ note_ctor("S4672C2", this);} // tgen

static void Test_S4672C2()
{
  extern Class_Descriptor cd_S4672C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,13)];
    init_test(&cd_S4672C2, buf);
    S4672C2 *dp, &lv = *(dp=new (buf) S4672C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,48), "sizeof(S4672C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4672C2)");
    check_base_class_offset(lv, (S4672C3*), 0, "S4672C2");
    check_field_offset(lv, s4672c2f0, ABISELECT(8,4), "S4672C2.s4672c2f0");
    check_field_offset(lv, s4672c2f1, ABISELECT(24,12), "S4672C2.s4672c2f1");
    check_field_offset(lv, s4672c2f2, ABISELECT(40,28), "S4672C2.s4672c2f2");
    check_field_offset(lv, s4672c2f3, ABISELECT(48,36), "S4672C2.s4672c2f3");
    check_field_offset(lv, s4672c2f4, ABISELECT(56,40), "S4672C2.s4672c2f4");
    check_field_offset(lv, s4672c2f5, ABISELECT(64,44), "S4672C2.s4672c2f5");
    test_class_info(&lv, &cd_S4672C2);
    dp->~S4672C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4672C2(Test_S4672C2, "S4672C2", ABISELECT(72,48));

#else // __cplusplus

extern void _ZN7S4672C2C1Ev();
extern void _ZN7S4672C2D1Ev();
Name_Map name_map_S4672C2[] = {
  NSPAIR(_ZN7S4672C2C1Ev),
  NSPAIR(_ZN7S4672C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4672C3;
extern VTBL_ENTRY _ZTI7S4672C3[];
extern  VTBL_ENTRY _ZTV7S4672C3[];
static Base_Class bases_S4672C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4672C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4672C2[];
extern void _ZN7S4672C2D1Ev();
extern void _ZN7S4672C2D0Ev();
extern void _ZN7S4672C33v25Ev();
extern void _ZN7S4672C33v26Ev();
extern void _ZN7S4672C33v27Ev();
extern void _ZN7S4672C33v28Ev();
extern void _ZN7S4672C33v29Ev();
extern void _ZN7S4672C33v30Ev();
extern void _ZN7S4672C33v31Ev();
extern void _ZN7S4672C33v32Ev();
extern void _ZN7S4672C33v33Ev();
extern void _ZN7S4672C33v34Ev();
extern void _ZN7S4672C33v35Ev();
extern void _ZN7S4672C33v36Ev();
extern void _ZN7S4672C33v37Ev();
extern void _ZN7S4672C33v38Ev();
extern void _ZN7S4672C33v39Ev();
extern void _ZN7S4672C33v40Ev();
extern void _ZN7S4672C33v41Ev();
extern void _ZN7S4672C33v42Ev();
extern void _ZN7S4672C33v43Ev();
extern void _ZN7S4672C33v44Ev();
extern void _ZN7S4672C33v45Ev();
extern void _ZN7S4672C33v46Ev();
extern void _ZN7S4672C33v47Ev();
extern void _ZN7S4672C33v48Ev();
extern void _ZN7S4672C33v49Ev();
extern void _ZN7S4672C33v50Ev();
extern void _ZN7S4672C23v51Ev();
extern void _ZN7S4672C23v52Ev();
extern void _ZN7S4672C23v53Ev();
extern void _ZN7S4672C23v54Ev();
extern void _ZN7S4672C23v55Ev();
extern void _ZN7S4672C23v56Ev();
extern void _ZN7S4672C23v57Ev();
extern void _ZN7S4672C23v58Ev();
extern void _ZN7S4672C23v59Ev();
extern void _ZN7S4672C23v60Ev();
extern void _ZN7S4672C23v61Ev();
extern void _ZN7S4672C23v62Ev();
extern void _ZN7S4672C23v63Ev();
extern void _ZN7S4672C23v64Ev();
static  VTBL_ENTRY vtc_S4672C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4672C2[0]),
  (VTBL_ENTRY)&_ZN7S4672C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4672C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4672C33v25Ev,
  (VTBL_ENTRY)&_ZN7S4672C33v26Ev,
  (VTBL_ENTRY)&_ZN7S4672C33v27Ev,
  (VTBL_ENTRY)&_ZN7S4672C33v28Ev,
  (VTBL_ENTRY)&_ZN7S4672C33v29Ev,
  (VTBL_ENTRY)&_ZN7S4672C33v30Ev,
  (VTBL_ENTRY)&_ZN7S4672C33v31Ev,
  (VTBL_ENTRY)&_ZN7S4672C33v32Ev,
  (VTBL_ENTRY)&_ZN7S4672C33v33Ev,
  (VTBL_ENTRY)&_ZN7S4672C33v34Ev,
  (VTBL_ENTRY)&_ZN7S4672C33v35Ev,
  (VTBL_ENTRY)&_ZN7S4672C33v36Ev,
  (VTBL_ENTRY)&_ZN7S4672C33v37Ev,
  (VTBL_ENTRY)&_ZN7S4672C33v38Ev,
  (VTBL_ENTRY)&_ZN7S4672C33v39Ev,
  (VTBL_ENTRY)&_ZN7S4672C33v40Ev,
  (VTBL_ENTRY)&_ZN7S4672C33v41Ev,
  (VTBL_ENTRY)&_ZN7S4672C33v42Ev,
  (VTBL_ENTRY)&_ZN7S4672C33v43Ev,
  (VTBL_ENTRY)&_ZN7S4672C33v44Ev,
  (VTBL_ENTRY)&_ZN7S4672C33v45Ev,
  (VTBL_ENTRY)&_ZN7S4672C33v46Ev,
  (VTBL_ENTRY)&_ZN7S4672C33v47Ev,
  (VTBL_ENTRY)&_ZN7S4672C33v48Ev,
  (VTBL_ENTRY)&_ZN7S4672C33v49Ev,
  (VTBL_ENTRY)&_ZN7S4672C33v50Ev,
  (VTBL_ENTRY)&_ZN7S4672C23v51Ev,
  (VTBL_ENTRY)&_ZN7S4672C23v52Ev,
  (VTBL_ENTRY)&_ZN7S4672C23v53Ev,
  (VTBL_ENTRY)&_ZN7S4672C23v54Ev,
  (VTBL_ENTRY)&_ZN7S4672C23v55Ev,
  (VTBL_ENTRY)&_ZN7S4672C23v56Ev,
  (VTBL_ENTRY)&_ZN7S4672C23v57Ev,
  (VTBL_ENTRY)&_ZN7S4672C23v58Ev,
  (VTBL_ENTRY)&_ZN7S4672C23v59Ev,
  (VTBL_ENTRY)&_ZN7S4672C23v60Ev,
  (VTBL_ENTRY)&_ZN7S4672C23v61Ev,
  (VTBL_ENTRY)&_ZN7S4672C23v62Ev,
  (VTBL_ENTRY)&_ZN7S4672C23v63Ev,
  (VTBL_ENTRY)&_ZN7S4672C23v64Ev,
};
extern VTBL_ENTRY _ZTI7S4672C2[];
extern  VTBL_ENTRY _ZTV7S4672C2[];
Class_Descriptor cd_S4672C2 = {  "S4672C2", // class name
  bases_S4672C2, 1,
  &(vtc_S4672C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,48), // object size
  NSPAIRA(_ZTI7S4672C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4672C2),44, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4672C5  {
  void *s4672c5f0;
  char s4672c5f1[32];
  int s4672c5f2[6];
  char s4672c5f3;
  int s4672c5f4[2];
  virtual  ~S4672C5(); // _ZN7S4672C5D1Ev
  virtual void  v65(); // _ZN7S4672C53v65Ev
  virtual void  v66(); // _ZN7S4672C53v66Ev
  S4672C5(); // tgen
};
//SIG(-1 S4672C5) C1{ vd v1 v2 Fp Fc[32] Fi[6] Fc Fi[2]}


 S4672C5 ::~S4672C5(){ note_dtor("S4672C5", this);}
void  S4672C5 ::v65(){vfunc_called(this, "_ZN7S4672C53v65Ev");}
void  S4672C5 ::v66(){vfunc_called(this, "_ZN7S4672C53v66Ev");}
S4672C5 ::S4672C5(){ note_ctor("S4672C5", this);} // tgen

static void Test_S4672C5()
{
  extern Class_Descriptor cd_S4672C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(12,20)];
    init_test(&cd_S4672C5, buf);
    S4672C5 *dp, &lv = *(dp=new (buf) S4672C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(88,76), "sizeof(S4672C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4672C5)");
    check_field_offset(lv, s4672c5f0, ABISELECT(8,4), "S4672C5.s4672c5f0");
    check_field_offset(lv, s4672c5f1, ABISELECT(16,8), "S4672C5.s4672c5f1");
    check_field_offset(lv, s4672c5f2, ABISELECT(48,40), "S4672C5.s4672c5f2");
    check_field_offset(lv, s4672c5f3, ABISELECT(72,64), "S4672C5.s4672c5f3");
    check_field_offset(lv, s4672c5f4, ABISELECT(76,68), "S4672C5.s4672c5f4");
    test_class_info(&lv, &cd_S4672C5);
    dp->~S4672C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4672C5(Test_S4672C5, "S4672C5", ABISELECT(88,76));

#else // __cplusplus

extern void _ZN7S4672C5C1Ev();
extern void _ZN7S4672C5D1Ev();
Name_Map name_map_S4672C5[] = {
  NSPAIR(_ZN7S4672C5C1Ev),
  NSPAIR(_ZN7S4672C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4672C5[];
extern void _ZN7S4672C5D1Ev();
extern void _ZN7S4672C5D0Ev();
extern void _ZN7S4672C53v65Ev();
extern void _ZN7S4672C53v66Ev();
static  VTBL_ENTRY vtc_S4672C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4672C5[0]),
  (VTBL_ENTRY)&_ZN7S4672C5D1Ev,
  (VTBL_ENTRY)&_ZN7S4672C5D0Ev,
  (VTBL_ENTRY)&_ZN7S4672C53v65Ev,
  (VTBL_ENTRY)&_ZN7S4672C53v66Ev,
};
extern VTBL_ENTRY _ZTI7S4672C5[];
extern  VTBL_ENTRY _ZTV7S4672C5[];
Class_Descriptor cd_S4672C5 = {  "S4672C5", // class name
  0,0,//no base classes
  &(vtc_S4672C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(88,76), // object size
  NSPAIRA(_ZTI7S4672C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4672C5),6, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4672C6_nt  {
  virtual  ~S4672C6_nt(); // _ZN10S4672C6_ntD1Ev
  virtual void  v67(); // _ZN10S4672C6_nt3v67Ev
  virtual void  v68(); // _ZN10S4672C6_nt3v68Ev
  virtual void  v69(); // _ZN10S4672C6_nt3v69Ev
  virtual void  v70(); // _ZN10S4672C6_nt3v70Ev
  virtual void  v71(); // _ZN10S4672C6_nt3v71Ev
  virtual void  v72(); // _ZN10S4672C6_nt3v72Ev
  virtual void  v73(); // _ZN10S4672C6_nt3v73Ev
  S4672C6_nt(); // tgen
};
//SIG(-1 S4672C6_nt) C1{ vd v1 v2 v3 v4 v5 v6 v7}


 S4672C6_nt ::~S4672C6_nt(){ note_dtor("S4672C6_nt", this);}
void  S4672C6_nt ::v67(){vfunc_called(this, "_ZN10S4672C6_nt3v67Ev");}
void  S4672C6_nt ::v68(){vfunc_called(this, "_ZN10S4672C6_nt3v68Ev");}
void  S4672C6_nt ::v69(){vfunc_called(this, "_ZN10S4672C6_nt3v69Ev");}
void  S4672C6_nt ::v70(){vfunc_called(this, "_ZN10S4672C6_nt3v70Ev");}
void  S4672C6_nt ::v71(){vfunc_called(this, "_ZN10S4672C6_nt3v71Ev");}
void  S4672C6_nt ::v72(){vfunc_called(this, "_ZN10S4672C6_nt3v72Ev");}
void  S4672C6_nt ::v73(){vfunc_called(this, "_ZN10S4672C6_nt3v73Ev");}
S4672C6_nt ::S4672C6_nt(){ note_ctor("S4672C6_nt", this);} // tgen

//skip512 S4672C6_nt

#else // __cplusplus

extern void _ZN10S4672C6_ntC1Ev();
extern void _ZN10S4672C6_ntD1Ev();
Name_Map name_map_S4672C6_nt[] = {
  NSPAIR(_ZN10S4672C6_ntC1Ev),
  NSPAIR(_ZN10S4672C6_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S4672C6_nt[];
extern void _ZN10S4672C6_ntD1Ev();
extern void _ZN10S4672C6_ntD0Ev();
extern void _ZN10S4672C6_nt3v67Ev();
extern void _ZN10S4672C6_nt3v68Ev();
extern void _ZN10S4672C6_nt3v69Ev();
extern void _ZN10S4672C6_nt3v70Ev();
extern void _ZN10S4672C6_nt3v71Ev();
extern void _ZN10S4672C6_nt3v72Ev();
extern void _ZN10S4672C6_nt3v73Ev();
static  VTBL_ENTRY vtc_S4672C6_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S4672C6_nt[0]),
  (VTBL_ENTRY)&_ZN10S4672C6_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S4672C6_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S4672C6_nt3v67Ev,
  (VTBL_ENTRY)&_ZN10S4672C6_nt3v68Ev,
  (VTBL_ENTRY)&_ZN10S4672C6_nt3v69Ev,
  (VTBL_ENTRY)&_ZN10S4672C6_nt3v70Ev,
  (VTBL_ENTRY)&_ZN10S4672C6_nt3v71Ev,
  (VTBL_ENTRY)&_ZN10S4672C6_nt3v72Ev,
  (VTBL_ENTRY)&_ZN10S4672C6_nt3v73Ev,
};
extern VTBL_ENTRY _ZTI10S4672C6_nt[];
VTBL_ENTRY *P__ZTI10S4672C6_nt = _ZTI10S4672C6_nt; 
extern  VTBL_ENTRY _ZTV10S4672C6_nt[];
Class_Descriptor cd_S4672C6_nt = {  "S4672C6_nt", // class name
  0,0,//no base classes
  &(vtc_S4672C6_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI10S4672C6_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S4672C6_nt),11, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4672C7_nt  {
  virtual  ~S4672C7_nt(); // _ZN10S4672C7_ntD1Ev
  virtual void  v74(); // _ZN10S4672C7_nt3v74Ev
  virtual void  v75(); // _ZN10S4672C7_nt3v75Ev
  virtual void  v76(); // _ZN10S4672C7_nt3v76Ev
  virtual void  v77(); // _ZN10S4672C7_nt3v77Ev
  virtual void  v78(); // _ZN10S4672C7_nt3v78Ev
  virtual void  v79(); // _ZN10S4672C7_nt3v79Ev
  virtual void  v80(); // _ZN10S4672C7_nt3v80Ev
  virtual void  v81(); // _ZN10S4672C7_nt3v81Ev
  virtual void  v82(); // _ZN10S4672C7_nt3v82Ev
  S4672C7_nt(); // tgen
};
//SIG(-1 S4672C7_nt) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9}


 S4672C7_nt ::~S4672C7_nt(){ note_dtor("S4672C7_nt", this);}
void  S4672C7_nt ::v74(){vfunc_called(this, "_ZN10S4672C7_nt3v74Ev");}
void  S4672C7_nt ::v75(){vfunc_called(this, "_ZN10S4672C7_nt3v75Ev");}
void  S4672C7_nt ::v76(){vfunc_called(this, "_ZN10S4672C7_nt3v76Ev");}
void  S4672C7_nt ::v77(){vfunc_called(this, "_ZN10S4672C7_nt3v77Ev");}
void  S4672C7_nt ::v78(){vfunc_called(this, "_ZN10S4672C7_nt3v78Ev");}
void  S4672C7_nt ::v79(){vfunc_called(this, "_ZN10S4672C7_nt3v79Ev");}
void  S4672C7_nt ::v80(){vfunc_called(this, "_ZN10S4672C7_nt3v80Ev");}
void  S4672C7_nt ::v81(){vfunc_called(this, "_ZN10S4672C7_nt3v81Ev");}
void  S4672C7_nt ::v82(){vfunc_called(this, "_ZN10S4672C7_nt3v82Ev");}
S4672C7_nt ::S4672C7_nt(){ note_ctor("S4672C7_nt", this);} // tgen

//skip512 S4672C7_nt

#else // __cplusplus

extern void _ZN10S4672C7_ntC1Ev();
extern void _ZN10S4672C7_ntD1Ev();
Name_Map name_map_S4672C7_nt[] = {
  NSPAIR(_ZN10S4672C7_ntC1Ev),
  NSPAIR(_ZN10S4672C7_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S4672C7_nt[];
extern void _ZN10S4672C7_ntD1Ev();
extern void _ZN10S4672C7_ntD0Ev();
extern void _ZN10S4672C7_nt3v74Ev();
extern void _ZN10S4672C7_nt3v75Ev();
extern void _ZN10S4672C7_nt3v76Ev();
extern void _ZN10S4672C7_nt3v77Ev();
extern void _ZN10S4672C7_nt3v78Ev();
extern void _ZN10S4672C7_nt3v79Ev();
extern void _ZN10S4672C7_nt3v80Ev();
extern void _ZN10S4672C7_nt3v81Ev();
extern void _ZN10S4672C7_nt3v82Ev();
static  VTBL_ENTRY vtc_S4672C7_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S4672C7_nt[0]),
  (VTBL_ENTRY)&_ZN10S4672C7_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S4672C7_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S4672C7_nt3v74Ev,
  (VTBL_ENTRY)&_ZN10S4672C7_nt3v75Ev,
  (VTBL_ENTRY)&_ZN10S4672C7_nt3v76Ev,
  (VTBL_ENTRY)&_ZN10S4672C7_nt3v77Ev,
  (VTBL_ENTRY)&_ZN10S4672C7_nt3v78Ev,
  (VTBL_ENTRY)&_ZN10S4672C7_nt3v79Ev,
  (VTBL_ENTRY)&_ZN10S4672C7_nt3v80Ev,
  (VTBL_ENTRY)&_ZN10S4672C7_nt3v81Ev,
  (VTBL_ENTRY)&_ZN10S4672C7_nt3v82Ev,
};
extern VTBL_ENTRY _ZTI10S4672C7_nt[];
VTBL_ENTRY *P__ZTI10S4672C7_nt = _ZTI10S4672C7_nt; 
extern  VTBL_ENTRY _ZTV10S4672C7_nt[];
Class_Descriptor cd_S4672C7_nt = {  "S4672C7_nt", // class name
  0,0,//no base classes
  &(vtc_S4672C7_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI10S4672C7_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S4672C7_nt),13, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4672C8  {
  virtual  ~S4672C8(); // _ZN7S4672C8D1Ev
  virtual void  v83(); // _ZN7S4672C83v83Ev
  virtual void  v84(); // _ZN7S4672C83v84Ev
  virtual void  v85(); // _ZN7S4672C83v85Ev
  virtual void  v86(); // _ZN7S4672C83v86Ev
  virtual void  v87(); // _ZN7S4672C83v87Ev
  virtual void  v88(); // _ZN7S4672C83v88Ev
  virtual void  v89(); // _ZN7S4672C83v89Ev
  virtual void  v90(); // _ZN7S4672C83v90Ev
  virtual void  v91(); // _ZN7S4672C83v91Ev
  S4672C8(); // tgen
};
//SIG(-1 S4672C8) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9}


 S4672C8 ::~S4672C8(){ note_dtor("S4672C8", this);}
void  S4672C8 ::v83(){vfunc_called(this, "_ZN7S4672C83v83Ev");}
void  S4672C8 ::v84(){vfunc_called(this, "_ZN7S4672C83v84Ev");}
void  S4672C8 ::v85(){vfunc_called(this, "_ZN7S4672C83v85Ev");}
void  S4672C8 ::v86(){vfunc_called(this, "_ZN7S4672C83v86Ev");}
void  S4672C8 ::v87(){vfunc_called(this, "_ZN7S4672C83v87Ev");}
void  S4672C8 ::v88(){vfunc_called(this, "_ZN7S4672C83v88Ev");}
void  S4672C8 ::v89(){vfunc_called(this, "_ZN7S4672C83v89Ev");}
void  S4672C8 ::v90(){vfunc_called(this, "_ZN7S4672C83v90Ev");}
void  S4672C8 ::v91(){vfunc_called(this, "_ZN7S4672C83v91Ev");}
S4672C8 ::S4672C8(){ note_ctor("S4672C8", this);} // tgen

static void Test_S4672C8()
{
  extern Class_Descriptor cd_S4672C8;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S4672C8, buf);
    S4672C8 *dp, &lv = *(dp=new (buf) S4672C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S4672C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4672C8)");
    test_class_info(&lv, &cd_S4672C8);
    dp->~S4672C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4672C8(Test_S4672C8, "S4672C8", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S4672C8C1Ev();
extern void _ZN7S4672C8D1Ev();
Name_Map name_map_S4672C8[] = {
  NSPAIR(_ZN7S4672C8C1Ev),
  NSPAIR(_ZN7S4672C8D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4672C8[];
extern void _ZN7S4672C8D1Ev();
extern void _ZN7S4672C8D0Ev();
extern void _ZN7S4672C83v83Ev();
extern void _ZN7S4672C83v84Ev();
extern void _ZN7S4672C83v85Ev();
extern void _ZN7S4672C83v86Ev();
extern void _ZN7S4672C83v87Ev();
extern void _ZN7S4672C83v88Ev();
extern void _ZN7S4672C83v89Ev();
extern void _ZN7S4672C83v90Ev();
extern void _ZN7S4672C83v91Ev();
static  VTBL_ENTRY vtc_S4672C8[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4672C8[0]),
  (VTBL_ENTRY)&_ZN7S4672C8D1Ev,
  (VTBL_ENTRY)&_ZN7S4672C8D0Ev,
  (VTBL_ENTRY)&_ZN7S4672C83v83Ev,
  (VTBL_ENTRY)&_ZN7S4672C83v84Ev,
  (VTBL_ENTRY)&_ZN7S4672C83v85Ev,
  (VTBL_ENTRY)&_ZN7S4672C83v86Ev,
  (VTBL_ENTRY)&_ZN7S4672C83v87Ev,
  (VTBL_ENTRY)&_ZN7S4672C83v88Ev,
  (VTBL_ENTRY)&_ZN7S4672C83v89Ev,
  (VTBL_ENTRY)&_ZN7S4672C83v90Ev,
  (VTBL_ENTRY)&_ZN7S4672C83v91Ev,
};
extern VTBL_ENTRY _ZTI7S4672C8[];
extern  VTBL_ENTRY _ZTV7S4672C8[];
Class_Descriptor cd_S4672C8 = {  "S4672C8", // class name
  0,0,//no base classes
  &(vtc_S4672C8[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S4672C8),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4672C8),13, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4672C1  : S4672C2 , S4672C5 , S4672C6_nt , S4672C7_nt , S4672C8 {
  void *s4672c1f0[2];
  int s4672c1f1;
  __tsi64 s4672c1f2[3];
  long s4672c1f3;
  char s4672c1f4;
  __tsi64 s4672c1f5[2];
  char s4672c1f6[2];
  int s4672c1f7;
  char s4672c1f8;
  __tsi64 s4672c1f9[2];
  void *s4672c1f10;
  char s4672c1f11;
  void *s4672c1f12[3];
  char s4672c1f13;
  void *s4672c1f14[2];
  char s4672c1f15;
  void *s4672c1f16;
  int s4672c1f17[2];
  void *s4672c1f18[5];
  virtual  ~S4672C1(); // _ZN7S4672C1D1Ev
  virtual void  v1(); // _ZN7S4672C12v1Ev
  virtual void  v2(); // _ZN7S4672C12v2Ev
  virtual void  v3(); // _ZN7S4672C12v3Ev
  virtual void  v4(); // _ZN7S4672C12v4Ev
  virtual void  v5(); // _ZN7S4672C12v5Ev
  virtual void  v6(); // _ZN7S4672C12v6Ev
  virtual void  v7(); // _ZN7S4672C12v7Ev
  virtual void  v8(); // _ZN7S4672C12v8Ev
  virtual void  v9(); // _ZN7S4672C12v9Ev
  virtual void  v10(); // _ZN7S4672C13v10Ev
  virtual void  v11(); // _ZN7S4672C13v11Ev
  virtual void  v12(); // _ZN7S4672C13v12Ev
  virtual void  v13(); // _ZN7S4672C13v13Ev
  virtual void  v14(); // _ZN7S4672C13v14Ev
  virtual void  v15(); // _ZN7S4672C13v15Ev
  virtual void  v16(); // _ZN7S4672C13v16Ev
  virtual void  v17(); // _ZN7S4672C13v17Ev
  virtual void  v18(); // _ZN7S4672C13v18Ev
  virtual void  v19(); // _ZN7S4672C13v19Ev
  virtual void  v20(); // _ZN7S4672C13v20Ev
  virtual void  v21(); // _ZN7S4672C13v21Ev
  virtual void  v22(); // _ZN7S4672C13v22Ev
  virtual void  v23(); // _ZN7S4672C13v23Ev
  virtual void  v24(); // _ZN7S4672C13v24Ev
  S4672C1(); // tgen
};
//SIG(1 S4672C1) C1{ BC2{ BC3{ vd v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50} vd v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 Fp[2] Fi[4] FC4{ Fi[2]} Fp Fc Fp} BC5{ vd v65 v66 Fp Fc[32] Fi[6] Fc Fi[2]} BC6{ vd v67 v68 v69 v70 v71 v72 v73} BC7{ vd v74 v75 v76 v77 v78 v79 v80 v81 v82} BC8{ vd v83 v84 v85 v86 v87 v88 v89 v90 v91} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 Fp[2] Fi FL[3] Fl Fc FL[2] Fc[2] Fi Fc FL[2] Fp Fc Fp[3] Fc Fp[2] Fc Fp Fi[2] Fp[5]}


 S4672C1 ::~S4672C1(){ note_dtor("S4672C1", this);}
void  S4672C1 ::v1(){vfunc_called(this, "_ZN7S4672C12v1Ev");}
void  S4672C1 ::v2(){vfunc_called(this, "_ZN7S4672C12v2Ev");}
void  S4672C1 ::v3(){vfunc_called(this, "_ZN7S4672C12v3Ev");}
void  S4672C1 ::v4(){vfunc_called(this, "_ZN7S4672C12v4Ev");}
void  S4672C1 ::v5(){vfunc_called(this, "_ZN7S4672C12v5Ev");}
void  S4672C1 ::v6(){vfunc_called(this, "_ZN7S4672C12v6Ev");}
void  S4672C1 ::v7(){vfunc_called(this, "_ZN7S4672C12v7Ev");}
void  S4672C1 ::v8(){vfunc_called(this, "_ZN7S4672C12v8Ev");}
void  S4672C1 ::v9(){vfunc_called(this, "_ZN7S4672C12v9Ev");}
void  S4672C1 ::v10(){vfunc_called(this, "_ZN7S4672C13v10Ev");}
void  S4672C1 ::v11(){vfunc_called(this, "_ZN7S4672C13v11Ev");}
void  S4672C1 ::v12(){vfunc_called(this, "_ZN7S4672C13v12Ev");}
void  S4672C1 ::v13(){vfunc_called(this, "_ZN7S4672C13v13Ev");}
void  S4672C1 ::v14(){vfunc_called(this, "_ZN7S4672C13v14Ev");}
void  S4672C1 ::v15(){vfunc_called(this, "_ZN7S4672C13v15Ev");}
void  S4672C1 ::v16(){vfunc_called(this, "_ZN7S4672C13v16Ev");}
void  S4672C1 ::v17(){vfunc_called(this, "_ZN7S4672C13v17Ev");}
void  S4672C1 ::v18(){vfunc_called(this, "_ZN7S4672C13v18Ev");}
void  S4672C1 ::v19(){vfunc_called(this, "_ZN7S4672C13v19Ev");}
void  S4672C1 ::v20(){vfunc_called(this, "_ZN7S4672C13v20Ev");}
void  S4672C1 ::v21(){vfunc_called(this, "_ZN7S4672C13v21Ev");}
void  S4672C1 ::v22(){vfunc_called(this, "_ZN7S4672C13v22Ev");}
void  S4672C1 ::v23(){vfunc_called(this, "_ZN7S4672C13v23Ev");}
void  S4672C1 ::v24(){vfunc_called(this, "_ZN7S4672C13v24Ev");}
S4672C1 ::S4672C1(){ note_ctor("S4672C1", this);} // tgen

static void Test_S4672C1()
{
  extern Class_Descriptor cd_S4672C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(54,74)];
    init_test(&cd_S4672C1, buf);
    S4672C1 *dp, &lv = *(dp=new (buf) S4672C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(424,292), "sizeof(S4672C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4672C1)");
    check_base_class_offset(lv, (S4672C3*)(S4672C2*), 0, "S4672C1");
    check_base_class_offset(lv, (S4672C2*), 0, "S4672C1");
    check_base_class_offset(lv, (S4672C5*), ABISELECT(72,48), "S4672C1");
    check_base_class_offset(lv, (S4672C6_nt*), ABISELECT(160,124), "S4672C1");
    check_base_class_offset(lv, (S4672C7_nt*), ABISELECT(168,128), "S4672C1");
    check_base_class_offset(lv, (S4672C8*), ABISELECT(176,132), "S4672C1");
    check_field_offset(lv, s4672c1f0, ABISELECT(184,136), "S4672C1.s4672c1f0");
    check_field_offset(lv, s4672c1f1, ABISELECT(200,144), "S4672C1.s4672c1f1");
    check_field_offset(lv, s4672c1f2, ABISELECT(208,148), "S4672C1.s4672c1f2");
    check_field_offset(lv, s4672c1f3, ABISELECT(232,172), "S4672C1.s4672c1f3");
    check_field_offset(lv, s4672c1f4, ABISELECT(240,176), "S4672C1.s4672c1f4");
    check_field_offset(lv, s4672c1f5, ABISELECT(248,180), "S4672C1.s4672c1f5");
    check_field_offset(lv, s4672c1f6, ABISELECT(264,196), "S4672C1.s4672c1f6");
    check_field_offset(lv, s4672c1f7, ABISELECT(268,200), "S4672C1.s4672c1f7");
    check_field_offset(lv, s4672c1f8, ABISELECT(272,204), "S4672C1.s4672c1f8");
    check_field_offset(lv, s4672c1f9, ABISELECT(280,208), "S4672C1.s4672c1f9");
    check_field_offset(lv, s4672c1f10, ABISELECT(296,224), "S4672C1.s4672c1f10");
    check_field_offset(lv, s4672c1f11, ABISELECT(304,228), "S4672C1.s4672c1f11");
    check_field_offset(lv, s4672c1f12, ABISELECT(312,232), "S4672C1.s4672c1f12");
    check_field_offset(lv, s4672c1f13, ABISELECT(336,244), "S4672C1.s4672c1f13");
    check_field_offset(lv, s4672c1f14, ABISELECT(344,248), "S4672C1.s4672c1f14");
    check_field_offset(lv, s4672c1f15, ABISELECT(360,256), "S4672C1.s4672c1f15");
    check_field_offset(lv, s4672c1f16, ABISELECT(368,260), "S4672C1.s4672c1f16");
    check_field_offset(lv, s4672c1f17, ABISELECT(376,264), "S4672C1.s4672c1f17");
    check_field_offset(lv, s4672c1f18, ABISELECT(384,272), "S4672C1.s4672c1f18");
    test_class_info(&lv, &cd_S4672C1);
    dp->~S4672C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4672C1(Test_S4672C1, "S4672C1", ABISELECT(424,292));

#else // __cplusplus

extern void _ZN7S4672C1C1Ev();
extern void _ZN7S4672C1D1Ev();
Name_Map name_map_S4672C1[] = {
  NSPAIR(_ZN7S4672C1C1Ev),
  NSPAIR(_ZN7S4672C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4672C3;
extern VTBL_ENTRY _ZTI7S4672C3[];
extern  VTBL_ENTRY _ZTV7S4672C3[];
extern Class_Descriptor cd_S4672C2;
extern VTBL_ENTRY _ZTI7S4672C2[];
extern  VTBL_ENTRY _ZTV7S4672C2[];
extern Class_Descriptor cd_S4672C5;
extern VTBL_ENTRY _ZTI7S4672C5[];
extern  VTBL_ENTRY _ZTV7S4672C5[];
extern Class_Descriptor cd_S4672C6_nt;
extern VTBL_ENTRY _ZTI10S4672C6_nt[];
extern  VTBL_ENTRY _ZTV10S4672C6_nt[];
extern Class_Descriptor cd_S4672C7_nt;
extern VTBL_ENTRY _ZTI10S4672C7_nt[];
extern  VTBL_ENTRY _ZTV10S4672C7_nt[];
extern Class_Descriptor cd_S4672C8;
extern VTBL_ENTRY _ZTI7S4672C8[];
extern  VTBL_ENTRY _ZTV7S4672C8[];
static Base_Class bases_S4672C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4672C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S4672C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S4672C5,    ABISELECT(72,48), //bcp->offset
    68, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S4672C6_nt,    ABISELECT(160,124), //bcp->offset
    74, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S4672C7_nt,    ABISELECT(168,128), //bcp->offset
    85, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S4672C8,    ABISELECT(176,132), //bcp->offset
    98, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4672C1[];
extern void _ZN7S4672C1D1Ev();
extern void _ZN7S4672C1D0Ev();
extern void _ZN7S4672C33v25Ev();
extern void _ZN7S4672C33v26Ev();
extern void _ZN7S4672C33v27Ev();
extern void _ZN7S4672C33v28Ev();
extern void _ZN7S4672C33v29Ev();
extern void _ZN7S4672C33v30Ev();
extern void _ZN7S4672C33v31Ev();
extern void _ZN7S4672C33v32Ev();
extern void _ZN7S4672C33v33Ev();
extern void _ZN7S4672C33v34Ev();
extern void _ZN7S4672C33v35Ev();
extern void _ZN7S4672C33v36Ev();
extern void _ZN7S4672C33v37Ev();
extern void _ZN7S4672C33v38Ev();
extern void _ZN7S4672C33v39Ev();
extern void _ZN7S4672C33v40Ev();
extern void _ZN7S4672C33v41Ev();
extern void _ZN7S4672C33v42Ev();
extern void _ZN7S4672C33v43Ev();
extern void _ZN7S4672C33v44Ev();
extern void _ZN7S4672C33v45Ev();
extern void _ZN7S4672C33v46Ev();
extern void _ZN7S4672C33v47Ev();
extern void _ZN7S4672C33v48Ev();
extern void _ZN7S4672C33v49Ev();
extern void _ZN7S4672C33v50Ev();
extern void _ZN7S4672C23v51Ev();
extern void _ZN7S4672C23v52Ev();
extern void _ZN7S4672C23v53Ev();
extern void _ZN7S4672C23v54Ev();
extern void _ZN7S4672C23v55Ev();
extern void _ZN7S4672C23v56Ev();
extern void _ZN7S4672C23v57Ev();
extern void _ZN7S4672C23v58Ev();
extern void _ZN7S4672C23v59Ev();
extern void _ZN7S4672C23v60Ev();
extern void _ZN7S4672C23v61Ev();
extern void _ZN7S4672C23v62Ev();
extern void _ZN7S4672C23v63Ev();
extern void _ZN7S4672C23v64Ev();
extern void _ZN7S4672C12v1Ev();
extern void _ZN7S4672C12v2Ev();
extern void _ZN7S4672C12v3Ev();
extern void _ZN7S4672C12v4Ev();
extern void _ZN7S4672C12v5Ev();
extern void _ZN7S4672C12v6Ev();
extern void _ZN7S4672C12v7Ev();
extern void _ZN7S4672C12v8Ev();
extern void _ZN7S4672C12v9Ev();
extern void _ZN7S4672C13v10Ev();
extern void _ZN7S4672C13v11Ev();
extern void _ZN7S4672C13v12Ev();
extern void _ZN7S4672C13v13Ev();
extern void _ZN7S4672C13v14Ev();
extern void _ZN7S4672C13v15Ev();
extern void _ZN7S4672C13v16Ev();
extern void _ZN7S4672C13v17Ev();
extern void _ZN7S4672C13v18Ev();
extern void _ZN7S4672C13v19Ev();
extern void _ZN7S4672C13v20Ev();
extern void _ZN7S4672C13v21Ev();
extern void _ZN7S4672C13v22Ev();
extern void _ZN7S4672C13v23Ev();
extern void _ZN7S4672C13v24Ev();
extern void ABISELECT(_ZThn72_N7S4672C1D1Ev,_ZThn48_N7S4672C1D1Ev)();
extern void ABISELECT(_ZThn72_N7S4672C1D0Ev,_ZThn48_N7S4672C1D0Ev)();
extern void _ZN7S4672C53v65Ev();
extern void _ZN7S4672C53v66Ev();
extern void ABISELECT(_ZThn160_N7S4672C1D1Ev,_ZThn124_N7S4672C1D1Ev)();
extern void ABISELECT(_ZThn160_N7S4672C1D0Ev,_ZThn124_N7S4672C1D0Ev)();
extern void _ZN10S4672C6_nt3v67Ev();
extern void _ZN10S4672C6_nt3v68Ev();
extern void _ZN10S4672C6_nt3v69Ev();
extern void _ZN10S4672C6_nt3v70Ev();
extern void _ZN10S4672C6_nt3v71Ev();
extern void _ZN10S4672C6_nt3v72Ev();
extern void _ZN10S4672C6_nt3v73Ev();
extern void ABISELECT(_ZThn168_N7S4672C1D1Ev,_ZThn128_N7S4672C1D1Ev)();
extern void ABISELECT(_ZThn168_N7S4672C1D0Ev,_ZThn128_N7S4672C1D0Ev)();
extern void _ZN10S4672C7_nt3v74Ev();
extern void _ZN10S4672C7_nt3v75Ev();
extern void _ZN10S4672C7_nt3v76Ev();
extern void _ZN10S4672C7_nt3v77Ev();
extern void _ZN10S4672C7_nt3v78Ev();
extern void _ZN10S4672C7_nt3v79Ev();
extern void _ZN10S4672C7_nt3v80Ev();
extern void _ZN10S4672C7_nt3v81Ev();
extern void _ZN10S4672C7_nt3v82Ev();
extern void ABISELECT(_ZThn176_N7S4672C1D1Ev,_ZThn132_N7S4672C1D1Ev)();
extern void ABISELECT(_ZThn176_N7S4672C1D0Ev,_ZThn132_N7S4672C1D0Ev)();
extern void _ZN7S4672C83v83Ev();
extern void _ZN7S4672C83v84Ev();
extern void _ZN7S4672C83v85Ev();
extern void _ZN7S4672C83v86Ev();
extern void _ZN7S4672C83v87Ev();
extern void _ZN7S4672C83v88Ev();
extern void _ZN7S4672C83v89Ev();
extern void _ZN7S4672C83v90Ev();
extern void _ZN7S4672C83v91Ev();
static  VTBL_ENTRY vtc_S4672C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4672C1[0]),
  (VTBL_ENTRY)&_ZN7S4672C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4672C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4672C33v25Ev,
  (VTBL_ENTRY)&_ZN7S4672C33v26Ev,
  (VTBL_ENTRY)&_ZN7S4672C33v27Ev,
  (VTBL_ENTRY)&_ZN7S4672C33v28Ev,
  (VTBL_ENTRY)&_ZN7S4672C33v29Ev,
  (VTBL_ENTRY)&_ZN7S4672C33v30Ev,
  (VTBL_ENTRY)&_ZN7S4672C33v31Ev,
  (VTBL_ENTRY)&_ZN7S4672C33v32Ev,
  (VTBL_ENTRY)&_ZN7S4672C33v33Ev,
  (VTBL_ENTRY)&_ZN7S4672C33v34Ev,
  (VTBL_ENTRY)&_ZN7S4672C33v35Ev,
  (VTBL_ENTRY)&_ZN7S4672C33v36Ev,
  (VTBL_ENTRY)&_ZN7S4672C33v37Ev,
  (VTBL_ENTRY)&_ZN7S4672C33v38Ev,
  (VTBL_ENTRY)&_ZN7S4672C33v39Ev,
  (VTBL_ENTRY)&_ZN7S4672C33v40Ev,
  (VTBL_ENTRY)&_ZN7S4672C33v41Ev,
  (VTBL_ENTRY)&_ZN7S4672C33v42Ev,
  (VTBL_ENTRY)&_ZN7S4672C33v43Ev,
  (VTBL_ENTRY)&_ZN7S4672C33v44Ev,
  (VTBL_ENTRY)&_ZN7S4672C33v45Ev,
  (VTBL_ENTRY)&_ZN7S4672C33v46Ev,
  (VTBL_ENTRY)&_ZN7S4672C33v47Ev,
  (VTBL_ENTRY)&_ZN7S4672C33v48Ev,
  (VTBL_ENTRY)&_ZN7S4672C33v49Ev,
  (VTBL_ENTRY)&_ZN7S4672C33v50Ev,
  (VTBL_ENTRY)&_ZN7S4672C23v51Ev,
  (VTBL_ENTRY)&_ZN7S4672C23v52Ev,
  (VTBL_ENTRY)&_ZN7S4672C23v53Ev,
  (VTBL_ENTRY)&_ZN7S4672C23v54Ev,
  (VTBL_ENTRY)&_ZN7S4672C23v55Ev,
  (VTBL_ENTRY)&_ZN7S4672C23v56Ev,
  (VTBL_ENTRY)&_ZN7S4672C23v57Ev,
  (VTBL_ENTRY)&_ZN7S4672C23v58Ev,
  (VTBL_ENTRY)&_ZN7S4672C23v59Ev,
  (VTBL_ENTRY)&_ZN7S4672C23v60Ev,
  (VTBL_ENTRY)&_ZN7S4672C23v61Ev,
  (VTBL_ENTRY)&_ZN7S4672C23v62Ev,
  (VTBL_ENTRY)&_ZN7S4672C23v63Ev,
  (VTBL_ENTRY)&_ZN7S4672C23v64Ev,
  (VTBL_ENTRY)&_ZN7S4672C12v1Ev,
  (VTBL_ENTRY)&_ZN7S4672C12v2Ev,
  (VTBL_ENTRY)&_ZN7S4672C12v3Ev,
  (VTBL_ENTRY)&_ZN7S4672C12v4Ev,
  (VTBL_ENTRY)&_ZN7S4672C12v5Ev,
  (VTBL_ENTRY)&_ZN7S4672C12v6Ev,
  (VTBL_ENTRY)&_ZN7S4672C12v7Ev,
  (VTBL_ENTRY)&_ZN7S4672C12v8Ev,
  (VTBL_ENTRY)&_ZN7S4672C12v9Ev,
  (VTBL_ENTRY)&_ZN7S4672C13v10Ev,
  (VTBL_ENTRY)&_ZN7S4672C13v11Ev,
  (VTBL_ENTRY)&_ZN7S4672C13v12Ev,
  (VTBL_ENTRY)&_ZN7S4672C13v13Ev,
  (VTBL_ENTRY)&_ZN7S4672C13v14Ev,
  (VTBL_ENTRY)&_ZN7S4672C13v15Ev,
  (VTBL_ENTRY)&_ZN7S4672C13v16Ev,
  (VTBL_ENTRY)&_ZN7S4672C13v17Ev,
  (VTBL_ENTRY)&_ZN7S4672C13v18Ev,
  (VTBL_ENTRY)&_ZN7S4672C13v19Ev,
  (VTBL_ENTRY)&_ZN7S4672C13v20Ev,
  (VTBL_ENTRY)&_ZN7S4672C13v21Ev,
  (VTBL_ENTRY)&_ZN7S4672C13v22Ev,
  (VTBL_ENTRY)&_ZN7S4672C13v23Ev,
  (VTBL_ENTRY)&_ZN7S4672C13v24Ev,
  ABISELECT(-72,-48),
  (VTBL_ENTRY)&(_ZTI7S4672C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn72_N7S4672C1D1Ev,_ZThn48_N7S4672C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn72_N7S4672C1D0Ev,_ZThn48_N7S4672C1D0Ev),
  (VTBL_ENTRY)&_ZN7S4672C53v65Ev,
  (VTBL_ENTRY)&_ZN7S4672C53v66Ev,
  ABISELECT(-160,-124),
  (VTBL_ENTRY)&(_ZTI7S4672C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn160_N7S4672C1D1Ev,_ZThn124_N7S4672C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn160_N7S4672C1D0Ev,_ZThn124_N7S4672C1D0Ev),
  (VTBL_ENTRY)&_ZN10S4672C6_nt3v67Ev,
  (VTBL_ENTRY)&_ZN10S4672C6_nt3v68Ev,
  (VTBL_ENTRY)&_ZN10S4672C6_nt3v69Ev,
  (VTBL_ENTRY)&_ZN10S4672C6_nt3v70Ev,
  (VTBL_ENTRY)&_ZN10S4672C6_nt3v71Ev,
  (VTBL_ENTRY)&_ZN10S4672C6_nt3v72Ev,
  (VTBL_ENTRY)&_ZN10S4672C6_nt3v73Ev,
  ABISELECT(-168,-128),
  (VTBL_ENTRY)&(_ZTI7S4672C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn168_N7S4672C1D1Ev,_ZThn128_N7S4672C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn168_N7S4672C1D0Ev,_ZThn128_N7S4672C1D0Ev),
  (VTBL_ENTRY)&_ZN10S4672C7_nt3v74Ev,
  (VTBL_ENTRY)&_ZN10S4672C7_nt3v75Ev,
  (VTBL_ENTRY)&_ZN10S4672C7_nt3v76Ev,
  (VTBL_ENTRY)&_ZN10S4672C7_nt3v77Ev,
  (VTBL_ENTRY)&_ZN10S4672C7_nt3v78Ev,
  (VTBL_ENTRY)&_ZN10S4672C7_nt3v79Ev,
  (VTBL_ENTRY)&_ZN10S4672C7_nt3v80Ev,
  (VTBL_ENTRY)&_ZN10S4672C7_nt3v81Ev,
  (VTBL_ENTRY)&_ZN10S4672C7_nt3v82Ev,
  ABISELECT(-176,-132),
  (VTBL_ENTRY)&(_ZTI7S4672C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn176_N7S4672C1D1Ev,_ZThn132_N7S4672C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn176_N7S4672C1D0Ev,_ZThn132_N7S4672C1D0Ev),
  (VTBL_ENTRY)&_ZN7S4672C83v83Ev,
  (VTBL_ENTRY)&_ZN7S4672C83v84Ev,
  (VTBL_ENTRY)&_ZN7S4672C83v85Ev,
  (VTBL_ENTRY)&_ZN7S4672C83v86Ev,
  (VTBL_ENTRY)&_ZN7S4672C83v87Ev,
  (VTBL_ENTRY)&_ZN7S4672C83v88Ev,
  (VTBL_ENTRY)&_ZN7S4672C83v89Ev,
  (VTBL_ENTRY)&_ZN7S4672C83v90Ev,
  (VTBL_ENTRY)&_ZN7S4672C83v91Ev,
};
extern VTBL_ENTRY _ZTI7S4672C1[];
extern  VTBL_ENTRY _ZTV7S4672C1[];
Class_Descriptor cd_S4672C1 = {  "S4672C1", // class name
  bases_S4672C1, 6,
  &(vtc_S4672C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(424,292), // object size
  NSPAIRA(_ZTI7S4672C1),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV7S4672C1),111, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  6, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7203C4  : S20956C5 {
  int s7203c4f0;
  ::S20956C5 s7203c4f1;
  ::S20956C5 s7203c4f2;
  int s7203c4f3;
  void *s7203c4f4;
  __tsi64 s7203c4f5[6];
  void *s7203c4f6;
};
//SIG(-1 S7203C4) C1{ BC2{ m FL Fi[4] Fc FL Fp[2]} Fi FC2 FC2 Fi Fp FL[6] Fp}



static void Test_S7203C4()
{
  extern Class_Descriptor cd_S7203C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(32,50)];
    init_test(&cd_S7203C4, buf);
    S7203C4 &lv = *(new (buf) S7203C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(248,196), "sizeof(S7203C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7203C4)");
    check_base_class_offset(lv, (S20956C5*), 0, "S7203C4");
    check_field_offset(lv, s7203c4f0, ABISELECT(56,44), "S7203C4.s7203c4f0");
    check_field_offset(lv, s7203c4f1, ABISELECT(64,48), "S7203C4.s7203c4f1");
    check_field_offset(lv, s7203c4f2, ABISELECT(120,92), "S7203C4.s7203c4f2");
    check_field_offset(lv, s7203c4f3, ABISELECT(176,136), "S7203C4.s7203c4f3");
    check_field_offset(lv, s7203c4f4, ABISELECT(184,140), "S7203C4.s7203c4f4");
    check_field_offset(lv, s7203c4f5, ABISELECT(192,144), "S7203C4.s7203c4f5");
    check_field_offset(lv, s7203c4f6, ABISELECT(240,192), "S7203C4.s7203c4f6");
    test_class_info(&lv, &cd_S7203C4);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7203C4(Test_S7203C4, "S7203C4", ABISELECT(248,196));

#else // __cplusplus

extern Class_Descriptor cd_S20956C5;
extern VTBL_ENTRY _ZTI8S20956C5[];
static Base_Class bases_S7203C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20956C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7203C4[];
Class_Descriptor cd_S7203C4 = {  "S7203C4", // class name
  bases_S7203C4, 1,
  0, // no vftv
  0, //no vtt
  ABISELECT(248,196), // object size
  NSPAIRA(_ZTI7S7203C4),ABISELECT(24,12), //typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7203C6  : virtual S20956C5 {
  int s7203c6f0[2];
  ::S20956C5 s7203c6f1;
  int s7203c6f2;
  ::S7203C4 s7203c6f3;
  void *s7203c6f4;
  ::S20956C5 s7203c6f5;
  char s7203c6f6:3;
  virtual  ~S7203C6(); // _ZN7S7203C6D2Ev
  virtual void  v1(); // _ZN7S7203C62v1Ev
  virtual void  v2(); // _ZN7S7203C62v2Ev
  virtual void  v3(); // _ZN7S7203C62v3Ev
  S7203C6(); // tgen
};
//SIG(-1 S7203C6) C1{ VBC2{ m FL Fi[4] Fc FL Fp[2]} vd v1 v2 v3 Fi[2] FC2 Fi FC3{ BC2 Fi FC2 FC2 Fi Fp FL[6] Fp} Fp FC2 Fc:3}


 S7203C6 ::~S7203C6(){ note_dtor("S7203C6", this);}
void  S7203C6 ::v1(){vfunc_called(this, "_ZN7S7203C62v1Ev");}
void  S7203C6 ::v2(){vfunc_called(this, "_ZN7S7203C62v2Ev");}
void  S7203C6 ::v3(){vfunc_called(this, "_ZN7S7203C62v3Ev");}
S7203C6 ::S7203C6(){ note_ctor("S7203C6", this);} // tgen

static void Test_S7203C6()
{
  extern Class_Descriptor cd_S7203C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(58,89)];
    init_test(&cd_S7203C6, buf);
    S7203C6 *dp, &lv = *(dp=new (buf) S7203C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(456,352), "sizeof(S7203C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7203C6)");
    check_base_class_offset(lv, (S20956C5*), ABISELECT(400,308), "S7203C6");
    check_field_offset(lv, s7203c6f0, ABISELECT(8,4), "S7203C6.s7203c6f0");
    check_field_offset(lv, s7203c6f1, ABISELECT(16,12), "S7203C6.s7203c6f1");
    check_field_offset(lv, s7203c6f2, ABISELECT(72,56), "S7203C6.s7203c6f2");
    check_field_offset(lv, s7203c6f3, ABISELECT(80,60), "S7203C6.s7203c6f3");
    check_field_offset(lv, s7203c6f4, ABISELECT(328,256), "S7203C6.s7203c6f4");
    check_field_offset(lv, s7203c6f5, ABISELECT(336,260), "S7203C6.s7203c6f5");
    set_bf_and_test(lv, s7203c6f6, ABISELECT(392,304), 0, 3, 1, "S7203C6");
    set_bf_and_test(lv, s7203c6f6, ABISELECT(392,304), 0, 3, hide_sll(1LL<<2), "S7203C6");
    test_class_info(&lv, &cd_S7203C6);
    dp->~S7203C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7203C6(Test_S7203C6, "S7203C6", ABISELECT(456,352));

#else // __cplusplus

extern void _ZN7S7203C6C1Ev();
extern void _ZN7S7203C6D2Ev();
Name_Map name_map_S7203C6[] = {
  NSPAIR(_ZN7S7203C6C1Ev),
  NSPAIR(_ZN7S7203C6D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20956C5;
extern VTBL_ENTRY _ZTI8S20956C5[];
static Base_Class bases_S7203C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20956C5,    ABISELECT(400,308), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7203C6[];
extern void _ZN7S7203C6D1Ev();
extern void _ZN7S7203C6D0Ev();
extern void _ZN7S7203C62v1Ev();
extern void _ZN7S7203C62v2Ev();
extern void _ZN7S7203C62v3Ev();
static  VTBL_ENTRY vtc_S7203C6[] = {
  ABISELECT(400,308),
  0,
  (VTBL_ENTRY)&(_ZTI7S7203C6[0]),
  (VTBL_ENTRY)&_ZN7S7203C6D1Ev,
  (VTBL_ENTRY)&_ZN7S7203C6D0Ev,
  (VTBL_ENTRY)&_ZN7S7203C62v1Ev,
  (VTBL_ENTRY)&_ZN7S7203C62v2Ev,
  (VTBL_ENTRY)&_ZN7S7203C62v3Ev,
};
extern VTBL_ENTRY _ZTV7S7203C6[];
static  VTT_ENTRY vtt_S7203C6[] = {
  {&(_ZTV7S7203C6[3]),  3,8},
};
extern VTBL_ENTRY _ZTI7S7203C6[];
extern  VTBL_ENTRY _ZTV7S7203C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7203C6[];
Class_Descriptor cd_S7203C6 = {  "S7203C6", // class name
  bases_S7203C6, 1,
  &(vtc_S7203C6[0]), // expected_vtbl_contents
  &(vtt_S7203C6[0]), // expected_vtt_contents
  ABISELECT(456,352), // object size
  NSPAIRA(_ZTI7S7203C6),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S7203C6),8, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7203C6),1, //virtual table table var
  0, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7203C7  : virtual S7203C4 , virtual S20956C5 {
  ::S20956C5 s7203c7f0;
  short s7203c7f1;
  int s7203c7f2;
  ::S7203C4 s7203c7f3;
  __tsi64 s7203c7f4[4];
  ::S7203C4 s7203c7f5;
  ~S7203C7(); // tgen
  S7203C7(); // tgen
};
//SIG(-1 S7203C7) C1{ VBC2{ BC3{ m FL Fi[4] Fc FL Fp[2]} Fi FC3 FC3 Fi Fp FL[6] Fp} VBC3 FC3 Fs Fi FC2 FL[4] FC2}


S7203C7 ::~S7203C7(){ note_dtor("S7203C7", this);} // tgen
S7203C7 ::S7203C7(){ note_ctor("S7203C7", this);} // tgen

static void Test_S7203C7()
{
  extern Class_Descriptor cd_S7203C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(114,181)];
    init_test(&cd_S7203C7, buf);
    S7203C7 *dp, &lv = *(dp=new (buf) S7203C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(904,720), "sizeof(S7203C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7203C7)");
    check_base_class_offset(lv, (S20956C5*)(S7203C4*), ABISELECT(600,480), "S7203C7");
    check_base_class_offset(lv, (S7203C4*), ABISELECT(600,480), "S7203C7");
    /*is_ambiguous_... S7203C7::S20956C5 */ AMB_check_base_class_offset(lv, (S20956C5*), ABISELECT(848,676), "S7203C7");
    check_field_offset(lv, s7203c7f0, ABISELECT(8,4), "S7203C7.s7203c7f0");
    check_field_offset(lv, s7203c7f1, ABISELECT(64,48), "S7203C7.s7203c7f1");
    check_field_offset(lv, s7203c7f2, ABISELECT(68,52), "S7203C7.s7203c7f2");
    check_field_offset(lv, s7203c7f3, ABISELECT(72,56), "S7203C7.s7203c7f3");
    check_field_offset(lv, s7203c7f4, ABISELECT(320,252), "S7203C7.s7203c7f4");
    check_field_offset(lv, s7203c7f5, ABISELECT(352,284), "S7203C7.s7203c7f5");
    test_class_info(&lv, &cd_S7203C7);
    dp->~S7203C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7203C7(Test_S7203C7, "S7203C7", ABISELECT(904,720));

#else // __cplusplus

extern void _ZN7S7203C7C1Ev();
extern void _ZN7S7203C7D1Ev();
Name_Map name_map_S7203C7[] = {
  NSPAIR(_ZN7S7203C7C1Ev),
  NSPAIR(_ZN7S7203C7D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20956C5;
extern VTBL_ENTRY _ZTI8S20956C5[];
extern Class_Descriptor cd_S7203C4;
extern VTBL_ENTRY _ZTI7S7203C4[];
extern Class_Descriptor cd_S20956C5;
extern VTBL_ENTRY _ZTI8S20956C5[];
static Base_Class bases_S7203C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20956C5,    ABISELECT(600,480), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S7203C4,    ABISELECT(600,480), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20956C5,    ABISELECT(848,676), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7203C7[];
static  VTBL_ENTRY vtc_S7203C7[] = {
  ABISELECT(848,676),
  ABISELECT(600,480),
  0,
  (VTBL_ENTRY)&(_ZTI7S7203C7[0]),
};
extern VTBL_ENTRY _ZTV7S7203C7[];
static  VTT_ENTRY vtt_S7203C7[] = {
  {&(_ZTV7S7203C7[4]),  4,4},
};
extern VTBL_ENTRY _ZTI7S7203C7[];
extern  VTBL_ENTRY _ZTV7S7203C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7203C7[];
Class_Descriptor cd_S7203C7 = {  "S7203C7", // class name
  bases_S7203C7, 3,
  &(vtc_S7203C7[0]), // expected_vtbl_contents
  &(vtt_S7203C7[0]), // expected_vtt_contents
  ABISELECT(904,720), // object size
  NSPAIRA(_ZTI7S7203C7),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7203C7),4, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7203C7),1, //virtual table table var
  0, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7203C3  : S7203C4 , virtual S20956C5 , virtual S7203C6 , virtual S7203C7 {
  int s7203c3f0;
  ::S20956C14_nt s7203c3f1;
  long double s7203c3f2;
  void *s7203c3f3;
  ::S7203C6 s7203c3f4[2];
  long double s7203c3f5;
  __tsi64 s7203c3f6;
  int s7203c3f7;
  ::S7203C7 s7203c3f8;
  virtual  ~S7203C3(); // _ZN7S7203C3D2Ev
  virtual void  v4(); // _ZN7S7203C32v4Ev
  virtual void  v5(); // _ZN7S7203C32v5Ev
  S7203C3(); // tgen
};
//SIG(-1 S7203C3) C1{ BC2{ BC3{ m FL Fi[4] Fc FL Fp[2]} Fi FC3 FC3 Fi Fp FL[6] Fp} VBC3 VBC4{ VBC3 vd v3 v4 v5 Fi[2] FC3 Fi FC2 Fp FC3 Fc:3} VBC5{ VBC2 VBC3 FC3 Fs Fi FC2 FL[4] FC2} vd v1 v2 Fi FC6{} FD Fp FC4[2] FD FL Fi FC5}


 S7203C3 ::~S7203C3(){ note_dtor("S7203C3", this);}
void  S7203C3 ::v4(){vfunc_called(this, "_ZN7S7203C32v4Ev");}
void  S7203C3 ::v5(){vfunc_called(this, "_ZN7S7203C32v5Ev");}
S7203C3 ::S7203C3(){ note_ctor("S7203C3", this);} // tgen

static void Test_S7203C3()
{
  extern Class_Descriptor cd_S7203C3;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(217,676)];
    init_test(&cd_S7203C3, buf);
    S7203C3 *dp, &lv = *(dp=new (buf) S7203C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(3456,2700), "sizeof(S7203C3)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7203C3)");
    /*is_ambiguous_... S7203C3::S7203C4 */ AMB_check_base_class_offset(lv, (S20956C5*)(S7203C4*), ABISELECT(8,4), "S7203C3");
    /*is_ambiguous_... S7203C3::S7203C4 */ AMB_check_base_class_offset(lv, (S7203C4*), ABISELECT(8,4), "S7203C3");
    /*is_ambiguous_... S7203C3::S20956C5 */ AMB_check_base_class_offset(lv, (S20956C5*), ABISELECT(2152,1672), "S7203C3");
    check_base_class_offset(lv, (S20956C5*)(S7203C6*), ABISELECT(2152,1672), "S7203C3");
    /*is_ambiguous_... S7203C7::S20956C5 */ AMB_check_base_class_offset(lv, (S20956C5*)(S7203C7*), ABISELECT(2152,1672), "S7203C3");
    check_base_class_offset(lv, (S7203C6*), ABISELECT(2208,1716), "S7203C3");
    /*is_ambiguous_... S7203C3::S7203C4 */ AMB_check_base_class_offset(lv, (S20956C5*)(S7203C4*), ABISELECT(3208,2504), "S7203C3");
    check_base_class_offset(lv, (S7203C4*)(S7203C7*), ABISELECT(3208,2504), "S7203C3");
    check_base_class_offset(lv, (S7203C7*), ABISELECT(2608,2024), "S7203C3");
    check_field_offset(lv, s7203c3f0, ABISELECT(256,200), "S7203C3.s7203c3f0");
    check_field_offset(lv, s7203c3f1, ABISELECT(260,204), "S7203C3.s7203c3f1");
    check_field_offset(lv, s7203c3f2, ABISELECT(272,208), "S7203C3.s7203c3f2");
    check_field_offset(lv, s7203c3f3, ABISELECT(288,220), "S7203C3.s7203c3f3");
    check_field_offset(lv, s7203c3f4, ABISELECT(296,224), "S7203C3.s7203c3f4");
    check_field_offset(lv, s7203c3f5, ABISELECT(1216,928), "S7203C3.s7203c3f5");
    check_field_offset(lv, s7203c3f6, ABISELECT(1232,940), "S7203C3.s7203c3f6");
    check_field_offset(lv, s7203c3f7, ABISELECT(1240,948), "S7203C3.s7203c3f7");
    check_field_offset(lv, s7203c3f8, ABISELECT(1248,952), "S7203C3.s7203c3f8");
    test_class_info(&lv, &cd_S7203C3);
    dp->~S7203C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7203C3(Test_S7203C3, "S7203C3", ABISELECT(3456,2700));

#else // __cplusplus

extern void _ZN7S7203C3C1Ev();
extern void _ZN7S7203C3D2Ev();
Name_Map name_map_S7203C3[] = {
  NSPAIR(_ZN7S7203C3C1Ev),
  NSPAIR(_ZN7S7203C3D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20956C5;
extern VTBL_ENTRY _ZTI8S20956C5[];
extern Class_Descriptor cd_S7203C4;
extern VTBL_ENTRY _ZTI7S7203C4[];
extern Class_Descriptor cd_S20956C5;
extern VTBL_ENTRY _ZTI8S20956C5[];
extern Class_Descriptor cd_S7203C6;
extern VTBL_ENTRY _ZTI7S7203C6[];
extern  VTBL_ENTRY _ZTV7S7203C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7203C6[];
extern Class_Descriptor cd_S20956C5;
extern VTBL_ENTRY _ZTI8S20956C5[];
extern Class_Descriptor cd_S7203C4;
extern VTBL_ENTRY _ZTI7S7203C4[];
extern Class_Descriptor cd_S7203C7;
extern VTBL_ENTRY _ZTI7S7203C7[];
extern  VTBL_ENTRY _ZTV7S7203C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7203C7[];
static Base_Class bases_S7203C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20956C5,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S7203C4,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20956C5,    ABISELECT(2152,1672), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7203C6,    ABISELECT(2208,1716), //bcp->offset
    10, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20956C5,    ABISELECT(3208,2504), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S7203C4,    ABISELECT(3208,2504), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S7203C7,    ABISELECT(2608,2024), //bcp->offset
    22, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7203C3[];
extern void _ZN7S7203C3D1Ev();
extern void _ZN7S7203C3D0Ev();
extern void _ZN7S7203C32v4Ev();
extern void _ZN7S7203C32v5Ev();
extern void ABISELECT(_ZTv0_n32_N7S7203C3D1Ev,_ZTv0_n16_N7S7203C3D1Ev)();
extern void ABISELECT(_ZThn2208_N7S7203C3D1Ev,_ZThn1716_N7S7203C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S7203C3D0Ev,_ZTv0_n16_N7S7203C3D0Ev)();
extern void ABISELECT(_ZThn2208_N7S7203C3D0Ev,_ZThn1716_N7S7203C3D0Ev)() __attribute__((weak));
extern void _ZN7S7203C62v1Ev();
extern void _ZN7S7203C62v2Ev();
extern void _ZN7S7203C62v3Ev();
static  VTBL_ENTRY vtc_S7203C3[] = {
  ABISELECT(3208,2504),
  ABISELECT(2608,2024),
  ABISELECT(2208,1716),
  ABISELECT(2152,1672),
  0,
  (VTBL_ENTRY)&(_ZTI7S7203C3[0]),
  (VTBL_ENTRY)&_ZN7S7203C3D1Ev,
  (VTBL_ENTRY)&_ZN7S7203C3D0Ev,
  (VTBL_ENTRY)&_ZN7S7203C32v4Ev,
  (VTBL_ENTRY)&_ZN7S7203C32v5Ev,
  0,
  0,
  0,
  ABISELECT(-2208,-1716),
  ABISELECT(-56,-44),
  ABISELECT(-2208,-1716),
  (VTBL_ENTRY)&(_ZTI7S7203C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7203C3D1Ev,_ZTv0_n16_N7S7203C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7203C3D0Ev,_ZTv0_n16_N7S7203C3D0Ev),
  (VTBL_ENTRY)&_ZN7S7203C62v1Ev,
  (VTBL_ENTRY)&_ZN7S7203C62v2Ev,
  (VTBL_ENTRY)&_ZN7S7203C62v3Ev,
  ABISELECT(-456,-352),
  ABISELECT(600,480),
  ABISELECT(-2608,-2024),
  (VTBL_ENTRY)&(_ZTI7S7203C3[0]),
};
extern VTBL_ENTRY _ZTV7S7203C3[];
extern void _ZN7S7203C6D1Ev();
extern void _ZN7S7203C6D0Ev();
extern void _ZN7S7203C62v1Ev();
extern void _ZN7S7203C62v2Ev();
extern void _ZN7S7203C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7203C6__7S7203C3[] = {
  ABISELECT(-56,-44),
  0,
  (VTBL_ENTRY)&(_ZTI7S7203C6[0]),
  (VTBL_ENTRY)&_ZN7S7203C6D1Ev,
  (VTBL_ENTRY)&_ZN7S7203C6D0Ev,
  (VTBL_ENTRY)&_ZN7S7203C62v1Ev,
  (VTBL_ENTRY)&_ZN7S7203C62v2Ev,
  (VTBL_ENTRY)&_ZN7S7203C62v3Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7203C7__7S7203C3[] = {
  ABISELECT(-456,-352),
  ABISELECT(600,480),
  0,
  (VTBL_ENTRY)&(_ZTI7S7203C7[0]),
};
static  VTT_ENTRY vtt_S7203C3[] = {
  {&(_ZTV7S7203C3[6]),  6,26},
  {&(_ZTV7S7203C3[17]),  17,26},
  {&(_ZTV7S7203C3[26]),  26,26},
  {&(_tg__ZTV7S7203C6__7S7203C3[3]),  3,8},
  {&(_tg__ZTV7S7203C7__7S7203C3[4]),  4,4},
};
extern VTBL_ENTRY _ZTI7S7203C3[];
extern  VTBL_ENTRY _ZTV7S7203C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7203C3[];
static VTBL_ENTRY alt_thunk_names21[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7203C3D0Ev,_ZTv0_n16_N7S7203C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2208_N7S7203C3D0Ev,_ZThn1716_N7S7203C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7203C3D1Ev,_ZTv0_n16_N7S7203C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2208_N7S7203C3D1Ev,_ZThn1716_N7S7203C3D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7203C3 = {  "S7203C3", // class name
  bases_S7203C3, 7,
  &(vtc_S7203C3[0]), // expected_vtbl_contents
  &(vtt_S7203C3[0]), // expected_vtt_contents
  ABISELECT(3456,2700), // object size
  NSPAIRA(_ZTI7S7203C3),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV7S7203C3),26, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7203C3),5, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names21,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7203C9  : virtual S20956C5 , S7203C7 {
  void *s7203c9f0;
  char s7203c9f1[9];
  ::S7203C7 s7203c9f2;
  ::S7203C4 s7203c9f3;
  __tsi64 s7203c9f4:37;
  char s7203c9f5;
  ::S7203C4 s7203c9f6;
  char s7203c9f7:8;
  void *s7203c9f8;
  char s7203c9f9;
  int s7203c9f10[2];
  ~S7203C9(); // tgen
  S7203C9(); // tgen
};
//SIG(-1 S7203C9) C1{ VBC2{ m FL Fi[4] Fc FL Fp[2]} BC3{ VBC4{ BC2 Fi FC2 FC2 Fi Fp FL[6] Fp} VBC2 FC2 Fs Fi FC4 FL[4] FC4} Fp Fc[9] FC3 FC4 FL:37 Fc FC4 Fc:8 Fp Fc Fi[2]}


S7203C9 ::~S7203C9(){ note_dtor("S7203C9", this);} // tgen
S7203C9 ::S7203C9(){ note_ctor("S7203C9", this);} // tgen

static void Test_S7203C9()
{
  extern Class_Descriptor cd_S7203C9;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(297,470)];
    init_test(&cd_S7203C9, buf);
    S7203C9 *dp, &lv = *(dp=new (buf) S7203C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(2368,1876), "sizeof(S7203C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7203C9)");
    /*is_ambiguous_... S7203C9::S20956C5 */ AMB_check_base_class_offset(lv, (S20956C5*), ABISELECT(2064,1636), "S7203C9");
    /*is_ambiguous_... S7203C7::S20956C5 */ AMB_check_base_class_offset(lv, (S20956C5*)(S7203C7*), ABISELECT(2064,1636), "S7203C9");
    check_base_class_offset(lv, (S20956C5*)(S7203C4*), ABISELECT(2120,1680), "S7203C9");
    check_base_class_offset(lv, (S7203C4*)(S7203C7*), ABISELECT(2120,1680), "S7203C9");
    check_base_class_offset(lv, (S7203C7*), 0, "S7203C9");
    check_field_offset(lv, s7203c9f0, ABISELECT(600,480), "S7203C9.s7203c9f0");
    check_field_offset(lv, s7203c9f1, ABISELECT(608,484), "S7203C9.s7203c9f1");
    check_field_offset(lv, s7203c9f2, ABISELECT(624,496), "S7203C9.s7203c9f2");
    check_field_offset(lv, s7203c9f3, ABISELECT(1528,1216), "S7203C9.s7203c9f3");
    set_bf_and_test(lv, s7203c9f4, ABISELECT(1776,1412), 0, 37, 1, "S7203C9");
    set_bf_and_test(lv, s7203c9f4, ABISELECT(1776,1412), 0, 37, hide_sll(1LL<<36), "S7203C9");
    check_field_offset(lv, s7203c9f5, ABISELECT(1781,1417), "S7203C9.s7203c9f5");
    check_field_offset(lv, s7203c9f6, ABISELECT(1784,1420), "S7203C9.s7203c9f6");
    set_bf_and_test(lv, s7203c9f7, ABISELECT(2032,1616), 0, 8, 1, "S7203C9");
    set_bf_and_test(lv, s7203c9f7, ABISELECT(2032,1616), 0, 8, hide_sll(1LL<<7), "S7203C9");
    check_field_offset(lv, s7203c9f8, ABISELECT(2040,1620), "S7203C9.s7203c9f8");
    check_field_offset(lv, s7203c9f9, ABISELECT(2048,1624), "S7203C9.s7203c9f9");
    check_field_offset(lv, s7203c9f10, ABISELECT(2052,1628), "S7203C9.s7203c9f10");
    test_class_info(&lv, &cd_S7203C9);
    dp->~S7203C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7203C9(Test_S7203C9, "S7203C9", ABISELECT(2368,1876));

#else // __cplusplus

extern void _ZN7S7203C9C1Ev();
extern void _ZN7S7203C9D1Ev();
Name_Map name_map_S7203C9[] = {
  NSPAIR(_ZN7S7203C9C1Ev),
  NSPAIR(_ZN7S7203C9D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20956C5;
extern VTBL_ENTRY _ZTI8S20956C5[];
extern Class_Descriptor cd_S20956C5;
extern VTBL_ENTRY _ZTI8S20956C5[];
extern Class_Descriptor cd_S7203C4;
extern VTBL_ENTRY _ZTI7S7203C4[];
extern Class_Descriptor cd_S7203C7;
extern VTBL_ENTRY _ZTI7S7203C7[];
extern  VTBL_ENTRY _ZTV7S7203C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7203C7[];
static Base_Class bases_S7203C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20956C5,    ABISELECT(2064,1636), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20956C5,    ABISELECT(2120,1680), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S7203C4,    ABISELECT(2120,1680), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S7203C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7203C9[];
static  VTBL_ENTRY vtc_S7203C9[] = {
  ABISELECT(2064,1636),
  ABISELECT(2120,1680),
  0,
  (VTBL_ENTRY)&(_ZTI7S7203C9[0]),
};
extern VTBL_ENTRY _ZTV7S7203C9[];
static  VTBL_ENTRY _tg__ZTV7S7203C7__7S7203C9[] = {
  ABISELECT(2064,1636),
  ABISELECT(2120,1680),
  0,
  (VTBL_ENTRY)&(_ZTI7S7203C7[0]),
};
static  VTT_ENTRY vtt_S7203C9[] = {
  {&(_ZTV7S7203C9[4]),  4,4},
  {&(_tg__ZTV7S7203C7__7S7203C9[4]),  4,4},
};
extern VTBL_ENTRY _ZTI7S7203C9[];
extern  VTBL_ENTRY _ZTV7S7203C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7203C9[];
Class_Descriptor cd_S7203C9 = {  "S7203C9", // class name
  bases_S7203C9, 4,
  &(vtc_S7203C9[0]), // expected_vtbl_contents
  &(vtt_S7203C9[0]), // expected_vtt_contents
  ABISELECT(2368,1876), // object size
  NSPAIRA(_ZTI7S7203C9),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7203C9),4, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7203C9),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7203C2  : virtual S7203C3 , S7203C9 {
  int s7203c2f0[2];
  short s7203c2f1;
  ::S20956C10 s7203c2f2;
  int s7203c2f3;
  int s7203c2f4;
  short s7203c2f5;
  int s7203c2f6;
  int s7203c2f7;
  virtual void  v6(); // _ZN7S7203C22v6Ev
  virtual void  v7(); // _ZN7S7203C22v7Ev
  ~S7203C2(); // tgen
  S7203C2(); // tgen
};
//SIG(-1 S7203C2) C1{ VBC2{ BC3{ BC4{ m FL Fi[4] Fc FL Fp[2]} Fi FC4 FC4 Fi Fp FL[6] Fp} VBC4 VBC5{ VBC4 vd v3 v4 v5 Fi[2] FC4 Fi FC3 Fp FC4 Fc:3} VBC6{ VBC3 VBC4 FC4 Fs Fi FC3 FL[4] FC3} vd v6 v7 Fi FC7{} FD Fp FC5[2] FD FL Fi FC6} BC8{ VBC4 BC6 Fp Fc[9] FC6 FC3 FL:37 Fc FC3 Fc:8 Fp Fc Fi[2]} v1 v2 Fi[2] Fs FU9{ m Fp FL Fi Fc Fi FL Fl FL Fs Fp FD Fc[6]} Fi Fi Fs Fi Fi}


void  S7203C2 ::v6(){vfunc_called(this, "_ZN7S7203C22v6Ev");}
void  S7203C2 ::v7(){vfunc_called(this, "_ZN7S7203C22v7Ev");}
S7203C2 ::~S7203C2(){ note_dtor("S7203C2", this);} // tgen
S7203C2 ::S7203C2(){ note_ctor("S7203C2", this);} // tgen

static void Test_S7203C2()
{
  extern Class_Descriptor cd_S7203C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(350,1096)];
    init_test(&cd_S7203C2, buf);
    S7203C2 *dp, &lv = *(dp=new (buf) S7203C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(5584,4380), "sizeof(S7203C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7203C2)");
    /*is_ambiguous_... S7203C3::S7203C4 */ AMB_check_base_class_offset(lv, (S20956C5*)(S7203C4*)(S7203C3*), ABISELECT(2136,1684), "S7203C2");
    /*is_ambiguous_... S7203C3::S7203C4 */ AMB_check_base_class_offset(lv, (S7203C4*)(S7203C3*), ABISELECT(2136,1684), "S7203C2");
    /*is_ambiguous_... S7203C3::S20956C5 */ AMB_check_base_class_offset(lv, (S20956C5*)(S7203C3*), ABISELECT(4280,3352), "S7203C2");
    check_base_class_offset(lv, (S20956C5*)(S7203C6*), ABISELECT(4280,3352), "S7203C2");
    /*is_ambiguous_... S7203C2::S7203C7 */ AMB_check_base_class_offset(lv, (S20956C5*)(S7203C7*), ABISELECT(4280,3352), "S7203C2");
    /*is_ambiguous_... S7203C9::S20956C5 */ AMB_check_base_class_offset(lv, (S20956C5*)(S7203C9*), ABISELECT(4280,3352), "S7203C2");
    /*is_ambiguous_... S7203C7::S20956C5 */ AMB_check_base_class_offset(lv, (S20956C5*)(S7203C7*)(S7203C9*), ABISELECT(4280,3352), "S7203C2");
    check_base_class_offset(lv, (S7203C6*)(S7203C3*), ABISELECT(4336,3396), "S7203C2");
    /*is_ambiguous_... S7203C2::S7203C4 */ AMB_check_base_class_offset(lv, (S20956C5*)(S7203C4*), ABISELECT(5336,4184), "S7203C2");
    /*is_ambiguous_... S7203C2::S7203C7 */ AMB_check_base_class_offset(lv, (S7203C4*)(S7203C7*), ABISELECT(5336,4184), "S7203C2");
    check_base_class_offset(lv, (S7203C4*)(S7203C7*)(S7203C9*), ABISELECT(5336,4184), "S7203C2");
    check_base_class_offset(lv, (S7203C7*)(S7203C3*), ABISELECT(4736,3704), "S7203C2");
    check_base_class_offset(lv, (S7203C3*), ABISELECT(2128,1680), "S7203C2");
    check_base_class_offset(lv, (S7203C7*)(S7203C9*), 0, "S7203C2");
    check_base_class_offset(lv, (S7203C9*), 0, "S7203C2");
    check_field_offset(lv, s7203c2f0, ABISELECT(2060,1636), "S7203C2.s7203c2f0");
    check_field_offset(lv, s7203c2f1, ABISELECT(2068,1644), "S7203C2.s7203c2f1");
    check_field_offset(lv, s7203c2f2, ABISELECT(2080,1648), "S7203C2.s7203c2f2");
    check_field_offset(lv, s7203c2f3, ABISELECT(2096,1660), "S7203C2.s7203c2f3");
    check_field_offset(lv, s7203c2f4, ABISELECT(2100,1664), "S7203C2.s7203c2f4");
    check_field_offset(lv, s7203c2f5, ABISELECT(2104,1668), "S7203C2.s7203c2f5");
    check_field_offset(lv, s7203c2f6, ABISELECT(2108,1672), "S7203C2.s7203c2f6");
    check_field_offset(lv, s7203c2f7, ABISELECT(2112,1676), "S7203C2.s7203c2f7");
    test_class_info(&lv, &cd_S7203C2);
    dp->~S7203C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7203C2(Test_S7203C2, "S7203C2", ABISELECT(5584,4380));

#else // __cplusplus

extern void _ZN7S7203C2C1Ev();
extern void _ZN7S7203C2D1Ev();
Name_Map name_map_S7203C2[] = {
  NSPAIR(_ZN7S7203C2C1Ev),
  NSPAIR(_ZN7S7203C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20956C5;
extern VTBL_ENTRY _ZTI8S20956C5[];
extern Class_Descriptor cd_S7203C4;
extern VTBL_ENTRY _ZTI7S7203C4[];
extern Class_Descriptor cd_S20956C5;
extern VTBL_ENTRY _ZTI8S20956C5[];
extern Class_Descriptor cd_S7203C6;
extern VTBL_ENTRY _ZTI7S7203C6[];
extern  VTBL_ENTRY _ZTV7S7203C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7203C6[];
extern Class_Descriptor cd_S20956C5;
extern VTBL_ENTRY _ZTI8S20956C5[];
extern Class_Descriptor cd_S7203C4;
extern VTBL_ENTRY _ZTI7S7203C4[];
extern Class_Descriptor cd_S7203C7;
extern VTBL_ENTRY _ZTI7S7203C7[];
extern  VTBL_ENTRY _ZTV7S7203C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7203C7[];
extern Class_Descriptor cd_S7203C3;
extern VTBL_ENTRY _ZTI7S7203C3[];
extern  VTBL_ENTRY _ZTV7S7203C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7203C3[];
extern Class_Descriptor cd_S7203C7;
extern VTBL_ENTRY _ZTI7S7203C7[];
extern  VTBL_ENTRY _ZTV7S7203C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7203C7[];
extern Class_Descriptor cd_S7203C9;
extern VTBL_ENTRY _ZTI7S7203C9[];
extern  VTBL_ENTRY _ZTV7S7203C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7203C9[];
static Base_Class bases_S7203C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20956C5,    ABISELECT(2136,1684), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S7203C4,    ABISELECT(2136,1684), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S20956C5,    ABISELECT(4280,3352), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S7203C6,    ABISELECT(4336,3396), //bcp->offset
    24, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S20956C5,    ABISELECT(5336,4184), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S7203C4,    ABISELECT(5336,4184), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S7203C7,    ABISELECT(4736,3704), //bcp->offset
    36, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S7203C3,    ABISELECT(2128,1680), //bcp->offset
    11, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7203C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S7203C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7203C2[];
extern void _ZN7S7203C22v6Ev();
extern void _ZN7S7203C22v7Ev();
extern void _ZN7S7203C2D1Ev();
extern void _ZN7S7203C2D0Ev();
extern void ABISELECT(_ZTv0_n56_N7S7203C2D1Ev,_ZTv0_n28_N7S7203C2D1Ev)();
extern void ABISELECT(_ZThn2128_N7S7203C2D1Ev,_ZThn1680_N7S7203C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N7S7203C2D0Ev,_ZTv0_n28_N7S7203C2D0Ev)();
extern void ABISELECT(_ZThn2128_N7S7203C2D0Ev,_ZThn1680_N7S7203C2D0Ev)() __attribute__((weak));
extern void _ZN7S7203C32v4Ev();
extern void _ZN7S7203C32v5Ev();
extern void ABISELECT(_ZTv0_n32_N7S7203C2D1Ev,_ZTv0_n16_N7S7203C2D1Ev)();
extern void ABISELECT(_ZThn4336_N7S7203C2D1Ev,_ZThn3396_N7S7203C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S7203C2D0Ev,_ZTv0_n16_N7S7203C2D0Ev)();
extern void ABISELECT(_ZThn4336_N7S7203C2D0Ev,_ZThn3396_N7S7203C2D0Ev)() __attribute__((weak));
extern void _ZN7S7203C62v1Ev();
extern void _ZN7S7203C62v2Ev();
extern void _ZN7S7203C62v3Ev();
static  VTBL_ENTRY vtc_S7203C2[] = {
  ABISELECT(4736,3704),
  ABISELECT(4336,3396),
  ABISELECT(2128,1680),
  ABISELECT(4280,3352),
  ABISELECT(5336,4184),
  0,
  (VTBL_ENTRY)&(_ZTI7S7203C2[0]),
  (VTBL_ENTRY)&_ZN7S7203C22v6Ev,
  (VTBL_ENTRY)&_ZN7S7203C22v7Ev,
  (VTBL_ENTRY)&_ZN7S7203C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7203C2D0Ev,
  0,
  0,
  ABISELECT(-2128,-1680),
  ABISELECT(3208,2504),
  ABISELECT(2608,2024),
  ABISELECT(2208,1716),
  ABISELECT(2152,1672),
  ABISELECT(-2128,-1680),
  (VTBL_ENTRY)&(_ZTI7S7203C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N7S7203C2D1Ev,_ZTv0_n28_N7S7203C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N7S7203C2D0Ev,_ZTv0_n28_N7S7203C2D0Ev),
  (VTBL_ENTRY)&_ZN7S7203C32v4Ev,
  (VTBL_ENTRY)&_ZN7S7203C32v5Ev,
  0,
  0,
  0,
  ABISELECT(-4336,-3396),
  ABISELECT(-56,-44),
  ABISELECT(-4336,-3396),
  (VTBL_ENTRY)&(_ZTI7S7203C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7203C2D1Ev,_ZTv0_n16_N7S7203C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7203C2D0Ev,_ZTv0_n16_N7S7203C2D0Ev),
  (VTBL_ENTRY)&_ZN7S7203C62v1Ev,
  (VTBL_ENTRY)&_ZN7S7203C62v2Ev,
  (VTBL_ENTRY)&_ZN7S7203C62v3Ev,
  ABISELECT(-456,-352),
  ABISELECT(600,480),
  ABISELECT(-4736,-3704),
  (VTBL_ENTRY)&(_ZTI7S7203C2[0]),
};
extern VTBL_ENTRY _ZTV7S7203C2[];
static  VTBL_ENTRY _tg__ZTV7S7203C9__7S7203C2[] = {
  ABISELECT(4280,3352),
  ABISELECT(5336,4184),
  0,
  (VTBL_ENTRY)&(_ZTI7S7203C9[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7203C77S7203C9__A1__7S7203C2[] = {
  ABISELECT(4280,3352),
  ABISELECT(5336,4184),
  0,
  (VTBL_ENTRY)&(_ZTI7S7203C7[0]),
};
extern void _ZN7S7203C3D1Ev();
extern void _ZN7S7203C3D0Ev();
extern void _ZN7S7203C32v4Ev();
extern void _ZN7S7203C32v5Ev();
static  VTBL_ENTRY _tg__ZTV7S7203C3__7S7203C2[] = {
  ABISELECT(3208,2504),
  ABISELECT(2608,2024),
  ABISELECT(2208,1716),
  ABISELECT(2152,1672),
  0,
  (VTBL_ENTRY)&(_ZTI7S7203C3[0]),
  (VTBL_ENTRY)&_ZN7S7203C3D1Ev,
  (VTBL_ENTRY)&_ZN7S7203C3D0Ev,
  (VTBL_ENTRY)&_ZN7S7203C32v4Ev,
  (VTBL_ENTRY)&_ZN7S7203C32v5Ev,
};
extern void ABISELECT(_ZTv0_n32_N7S7203C3D1Ev,_ZTv0_n16_N7S7203C3D1Ev)();
extern void ABISELECT(_ZThn2208_N7S7203C3D1Ev,_ZThn1716_N7S7203C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S7203C3D0Ev,_ZTv0_n16_N7S7203C3D0Ev)();
extern void ABISELECT(_ZThn2208_N7S7203C3D0Ev,_ZThn1716_N7S7203C3D0Ev)() __attribute__((weak));
extern void _ZN7S7203C62v1Ev();
extern void _ZN7S7203C62v2Ev();
extern void _ZN7S7203C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7203C6__7S7203C3__7S7203C2[] = {
  0,
  0,
  0,
  ABISELECT(-2208,-1716),
  ABISELECT(-56,-44),
  ABISELECT(-2208,-1716),
  (VTBL_ENTRY)&(_ZTI7S7203C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7203C3D1Ev,_ZTv0_n16_N7S7203C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7203C3D0Ev,_ZTv0_n16_N7S7203C3D0Ev),
  (VTBL_ENTRY)&_ZN7S7203C62v1Ev,
  (VTBL_ENTRY)&_ZN7S7203C62v2Ev,
  (VTBL_ENTRY)&_ZN7S7203C62v3Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7203C7__7S7203C3__7S7203C2[] = {
  ABISELECT(-456,-352),
  ABISELECT(600,480),
  ABISELECT(-2608,-2024),
  (VTBL_ENTRY)&(_ZTI7S7203C3[0]),
};
extern void _ZN7S7203C6D1Ev();
extern void _ZN7S7203C6D0Ev();
extern void _ZN7S7203C62v1Ev();
extern void _ZN7S7203C62v2Ev();
extern void _ZN7S7203C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7203C6__7S7203C2[] = {
  ABISELECT(-56,-44),
  0,
  (VTBL_ENTRY)&(_ZTI7S7203C6[0]),
  (VTBL_ENTRY)&_ZN7S7203C6D1Ev,
  (VTBL_ENTRY)&_ZN7S7203C6D0Ev,
  (VTBL_ENTRY)&_ZN7S7203C62v1Ev,
  (VTBL_ENTRY)&_ZN7S7203C62v2Ev,
  (VTBL_ENTRY)&_ZN7S7203C62v3Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7203C7__7S7203C2[] = {
  ABISELECT(-456,-352),
  ABISELECT(600,480),
  0,
  (VTBL_ENTRY)&(_ZTI7S7203C7[0]),
};
static  VTT_ENTRY vtt_S7203C2[] = {
  {&(_ZTV7S7203C2[7]),  7,40},
  {&(_tg__ZTV7S7203C9__7S7203C2[4]),  4,4},
  {&(_tg__ZTV7S7203C77S7203C9__A1__7S7203C2[4]),  4,4},
  {&(_ZTV7S7203C2[20]),  20,40},
  {&(_ZTV7S7203C2[31]),  31,40},
  {&(_ZTV7S7203C2[40]),  40,40},
  {&(_tg__ZTV7S7203C3__7S7203C2[6]),  6,10},
  {&(_tg__ZTV7S7203C6__7S7203C3__7S7203C2[7]),  7,12},
  {&(_tg__ZTV7S7203C7__7S7203C3__7S7203C2[4]),  4,4},
  {&(_tg__ZTV7S7203C6__7S7203C2[3]),  3,8},
  {&(_tg__ZTV7S7203C7__7S7203C2[4]),  4,4},
};
extern VTBL_ENTRY _ZTI7S7203C2[];
extern  VTBL_ENTRY _ZTV7S7203C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7203C2[];
static VTBL_ENTRY alt_thunk_names22[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7203C3D0Ev,_ZTv0_n16_N7S7203C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2208_N7S7203C3D0Ev,_ZThn1716_N7S7203C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7203C3D1Ev,_ZTv0_n16_N7S7203C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2208_N7S7203C3D1Ev,_ZThn1716_N7S7203C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7203C2D0Ev,_ZTv0_n16_N7S7203C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4336_N7S7203C2D0Ev,_ZThn3396_N7S7203C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7203C2D1Ev,_ZTv0_n16_N7S7203C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4336_N7S7203C2D1Ev,_ZThn3396_N7S7203C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N7S7203C2D0Ev,_ZTv0_n28_N7S7203C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2128_N7S7203C2D0Ev,_ZThn1680_N7S7203C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N7S7203C2D1Ev,_ZTv0_n28_N7S7203C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2128_N7S7203C2D1Ev,_ZThn1680_N7S7203C2D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7203C2 = {  "S7203C2", // class name
  bases_S7203C2, 10,
  &(vtc_S7203C2[0]), // expected_vtbl_contents
  &(vtt_S7203C2[0]), // expected_vtt_contents
  ABISELECT(5584,4380), // object size
  NSPAIRA(_ZTI7S7203C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7203C2),40, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7203C2),11, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names22,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7203C11  {
  int s7203c11f0;
  ::S7203C7 s7203c11f1[9];
  void *s7203c11f2;
  virtual  ~S7203C11(); // _ZN8S7203C11D1Ev
  virtual void  v8(); // _ZN8S7203C112v8Ev
  S7203C11(); // tgen
};
//SIG(-1 S7203C11) C1{ vd v1 Fi FC2{ VBC3{ BC4{ m FL Fi[4] Fc FL Fp[2]} Fi FC4 FC4 Fi Fp FL[6] Fp} VBC4 FC4 Fs Fi FC3 FL[4] FC3}[9] Fp}


 S7203C11 ::~S7203C11(){ note_dtor("S7203C11", this);}
void  S7203C11 ::v8(){vfunc_called(this, "_ZN8S7203C112v8Ev");}
S7203C11 ::S7203C11(){ note_ctor("S7203C11", this);} // tgen

static void Test_S7203C11()
{
  extern Class_Descriptor cd_S7203C11;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(1021,1624)];
    init_test(&cd_S7203C11, buf);
    S7203C11 *dp, &lv = *(dp=new (buf) S7203C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8160,6492), "sizeof(S7203C11)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7203C11)");
    check_field_offset(lv, s7203c11f0, ABISELECT(8,4), "S7203C11.s7203c11f0");
    check_field_offset(lv, s7203c11f1, ABISELECT(16,8), "S7203C11.s7203c11f1");
    check_field_offset(lv, s7203c11f2, ABISELECT(8152,6488), "S7203C11.s7203c11f2");
    test_class_info(&lv, &cd_S7203C11);
    dp->~S7203C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7203C11(Test_S7203C11, "S7203C11", ABISELECT(8160,6492));

#else // __cplusplus

extern void _ZN8S7203C11C1Ev();
extern void _ZN8S7203C11D1Ev();
Name_Map name_map_S7203C11[] = {
  NSPAIR(_ZN8S7203C11C1Ev),
  NSPAIR(_ZN8S7203C11D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S7203C11[];
extern void _ZN8S7203C11D1Ev();
extern void _ZN8S7203C11D0Ev();
extern void _ZN8S7203C112v8Ev();
static  VTBL_ENTRY vtc_S7203C11[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S7203C11[0]),
  (VTBL_ENTRY)&_ZN8S7203C11D1Ev,
  (VTBL_ENTRY)&_ZN8S7203C11D0Ev,
  (VTBL_ENTRY)&_ZN8S7203C112v8Ev,
};
extern VTBL_ENTRY _ZTI8S7203C11[];
extern  VTBL_ENTRY _ZTV8S7203C11[];
Class_Descriptor cd_S7203C11 = {  "S7203C11", // class name
  0,0,//no base classes
  &(vtc_S7203C11[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8160,6492), // object size
  NSPAIRA(_ZTI8S7203C11),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S7203C11),5, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7203C14  : virtual S7203C7 , S7203C4 {
  int s7203c14f0[2];
  ::S7203C4 s7203c14f1;
  ::S7203C4 s7203c14f2[5];
  ::S20956C6 s7203c14f3;
  int s7203c14f4;
  ~S7203C14(); // tgen
  S7203C14(); // tgen
};
//SIG(-1 S7203C14) C1{ VBC2{ VBC3{ BC4{ m FL Fi[4] Fc FL Fp[2]} Fi FC4 FC4 Fi Fp FL[6] Fp} VBC4 FC4 Fs Fi FC3 FL[4] FC3} BC3 Fi[2] FC3 FC3[5] FU5{ m Fi[8] Fp FL Fc Fp[5] FD Fc[7] Fp Fc:1 Fi} Fi}


S7203C14 ::~S7203C14(){ note_dtor("S7203C14", this);} // tgen
S7203C14 ::S7203C14(){ note_ctor("S7203C14", this);} // tgen

static void Test_S7203C14()
{
  extern Class_Descriptor cd_S7203C14;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(171,536)];
    init_test(&cd_S7203C14, buf);
    S7203C14 *dp, &lv = *(dp=new (buf) S7203C14());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(2720,2140), "sizeof(S7203C14)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7203C14)");
    /*is_ambiguous_... S7203C14::S7203C4 */ AMB_check_base_class_offset(lv, (S20956C5*)(S7203C4*), ABISELECT(2416,1900), "S7203C14");
    check_base_class_offset(lv, (S7203C4*)(S7203C7*), ABISELECT(2416,1900), "S7203C14");
    /*is_ambiguous_... S7203C7::S20956C5 */ AMB_check_base_class_offset(lv, (S20956C5*)(S7203C7*), ABISELECT(2664,2096), "S7203C14");
    check_base_class_offset(lv, (S7203C7*), ABISELECT(1816,1420), "S7203C14");
    /*is_ambiguous_... S7203C14::S7203C4 */ AMB_check_base_class_offset(lv, (S20956C5*)(S7203C4*), ABISELECT(8,4), "S7203C14");
    /*is_ambiguous_... S7203C14::S7203C4 */ AMB_check_base_class_offset(lv, (S7203C4*), ABISELECT(8,4), "S7203C14");
    check_field_offset(lv, s7203c14f0, ABISELECT(256,200), "S7203C14.s7203c14f0");
    check_field_offset(lv, s7203c14f1, ABISELECT(264,208), "S7203C14.s7203c14f1");
    check_field_offset(lv, s7203c14f2, ABISELECT(512,404), "S7203C14.s7203c14f2");
    check_field_offset(lv, s7203c14f3, ABISELECT(1760,1384), "S7203C14.s7203c14f3");
    check_field_offset(lv, s7203c14f4, ABISELECT(1808,1416), "S7203C14.s7203c14f4");
    test_class_info(&lv, &cd_S7203C14);
    dp->~S7203C14();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7203C14(Test_S7203C14, "S7203C14", ABISELECT(2720,2140));

#else // __cplusplus

extern void _ZN8S7203C14C1Ev();
extern void _ZN8S7203C14D1Ev();
Name_Map name_map_S7203C14[] = {
  NSPAIR(_ZN8S7203C14C1Ev),
  NSPAIR(_ZN8S7203C14D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20956C5;
extern VTBL_ENTRY _ZTI8S20956C5[];
extern Class_Descriptor cd_S7203C4;
extern VTBL_ENTRY _ZTI7S7203C4[];
extern Class_Descriptor cd_S20956C5;
extern VTBL_ENTRY _ZTI8S20956C5[];
extern Class_Descriptor cd_S7203C7;
extern VTBL_ENTRY _ZTI7S7203C7[];
extern  VTBL_ENTRY _ZTV7S7203C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7203C7[];
extern Class_Descriptor cd_S20956C5;
extern VTBL_ENTRY _ZTI8S20956C5[];
extern Class_Descriptor cd_S7203C4;
extern VTBL_ENTRY _ZTI7S7203C4[];
static Base_Class bases_S7203C14[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20956C5,    ABISELECT(2416,1900), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S7203C4,    ABISELECT(2416,1900), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S20956C5,    ABISELECT(2664,2096), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S7203C7,    ABISELECT(1816,1420), //bcp->offset
    5, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20956C5,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S7203C4,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S7203C14[];
static  VTBL_ENTRY vtc_S7203C14[] = {
  ABISELECT(2664,2096),
  ABISELECT(2416,1900),
  ABISELECT(1816,1420),
  0,
  (VTBL_ENTRY)&(_ZTI8S7203C14[0]),
  ABISELECT(848,676),
  ABISELECT(600,480),
  ABISELECT(-1816,-1420),
  (VTBL_ENTRY)&(_ZTI8S7203C14[0]),
};
extern VTBL_ENTRY _ZTV8S7203C14[];
static  VTBL_ENTRY _tg__ZTV7S7203C7__8S7203C14[] = {
  ABISELECT(848,676),
  ABISELECT(600,480),
  0,
  (VTBL_ENTRY)&(_ZTI7S7203C7[0]),
};
static  VTT_ENTRY vtt_S7203C14[] = {
  {&(_ZTV8S7203C14[5]),  5,9},
  {&(_ZTV8S7203C14[9]),  9,9},
  {&(_tg__ZTV7S7203C7__8S7203C14[4]),  4,4},
};
extern VTBL_ENTRY _ZTI8S7203C14[];
extern  VTBL_ENTRY _ZTV8S7203C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7203C14[];
Class_Descriptor cd_S7203C14 = {  "S7203C14", // class name
  bases_S7203C14, 6,
  &(vtc_S7203C14[0]), // expected_vtbl_contents
  &(vtt_S7203C14[0]), // expected_vtt_contents
  ABISELECT(2720,2140), // object size
  NSPAIRA(_ZTI8S7203C14),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S7203C14),9, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7203C14),3, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7203C13  : S7203C4 , virtual S7203C14 {
  ::S7203C14 s7203c13f0;
  ~S7203C13(); // tgen
  S7203C13(); // tgen
};
//SIG(-1 S7203C13) C1{ BC2{ BC3{ m FL Fi[4] Fc FL Fp[2]} Fi FC3 FC3 Fi Fp FL[6] Fp} VBC4{ VBC5{ VBC2 VBC3 FC3 Fs Fi FC2 FL[4] FC2} BC2 Fi[2] FC2 FC2[5] FU6{ m Fi[8] Fp FL Fc Fp[5] FD Fc[7] Fp Fc:1 Fi} Fi} FC4}


S7203C13 ::~S7203C13(){ note_dtor("S7203C13", this);} // tgen
S7203C13 ::S7203C13(){ note_ctor("S7203C13", this);} // tgen

static void Test_S7203C13()
{
  extern Class_Descriptor cd_S7203C13;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(357,1121)];
    init_test(&cd_S7203C13, buf);
    S7203C13 *dp, &lv = *(dp=new (buf) S7203C13());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(5696,4480), "sizeof(S7203C13)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7203C13)");
    /*is_ambiguous_... S7203C13::S7203C4 */ AMB_check_base_class_offset(lv, (S20956C5*)(S7203C4*), ABISELECT(8,4), "S7203C13");
    /*is_ambiguous_... S7203C13::S7203C4 */ AMB_check_base_class_offset(lv, (S7203C4*), ABISELECT(8,4), "S7203C13");
    /*is_ambiguous_... S7203C13::S7203C4 */ AMB_check_base_class_offset(lv, (S20956C5*)(S7203C4*), ABISELECT(5392,4240), "S7203C13");
    check_base_class_offset(lv, (S7203C4*)(S7203C7*), ABISELECT(5392,4240), "S7203C13");
    /*is_ambiguous_... S7203C7::S20956C5 */ AMB_check_base_class_offset(lv, (S20956C5*)(S7203C7*), ABISELECT(5640,4436), "S7203C13");
    check_base_class_offset(lv, (S7203C7*)(S7203C14*), ABISELECT(4792,3760), "S7203C13");
    /*is_ambiguous_... S7203C14::S7203C4 */ AMB_check_base_class_offset(lv, (S20956C5*)(S7203C4*)(S7203C14*), ABISELECT(2984,2344), "S7203C13");
    /*is_ambiguous_... S7203C14::S7203C4 */ AMB_check_base_class_offset(lv, (S7203C4*)(S7203C14*), ABISELECT(2984,2344), "S7203C13");
    check_base_class_offset(lv, (S7203C14*), ABISELECT(2976,2340), "S7203C13");
    check_field_offset(lv, s7203c13f0, ABISELECT(256,200), "S7203C13.s7203c13f0");
    test_class_info(&lv, &cd_S7203C13);
    dp->~S7203C13();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7203C13(Test_S7203C13, "S7203C13", ABISELECT(5696,4480));

#else // __cplusplus

extern void _ZN8S7203C13C1Ev();
extern void _ZN8S7203C13D1Ev();
Name_Map name_map_S7203C13[] = {
  NSPAIR(_ZN8S7203C13C1Ev),
  NSPAIR(_ZN8S7203C13D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20956C5;
extern VTBL_ENTRY _ZTI8S20956C5[];
extern Class_Descriptor cd_S7203C4;
extern VTBL_ENTRY _ZTI7S7203C4[];
extern Class_Descriptor cd_S20956C5;
extern VTBL_ENTRY _ZTI8S20956C5[];
extern Class_Descriptor cd_S7203C4;
extern VTBL_ENTRY _ZTI7S7203C4[];
extern Class_Descriptor cd_S20956C5;
extern VTBL_ENTRY _ZTI8S20956C5[];
extern Class_Descriptor cd_S7203C7;
extern VTBL_ENTRY _ZTI7S7203C7[];
extern  VTBL_ENTRY _ZTV7S7203C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7203C7[];
extern Class_Descriptor cd_S20956C5;
extern VTBL_ENTRY _ZTI8S20956C5[];
extern Class_Descriptor cd_S7203C4;
extern VTBL_ENTRY _ZTI7S7203C4[];
extern Class_Descriptor cd_S7203C14;
extern VTBL_ENTRY _ZTI8S7203C14[];
extern  VTBL_ENTRY _ZTV8S7203C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7203C14[];
static Base_Class bases_S7203C13[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20956C5,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S7203C4,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20956C5,    ABISELECT(5392,4240), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S7203C4,    ABISELECT(5392,4240), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S20956C5,    ABISELECT(5640,4436), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S7203C7,    ABISELECT(4792,3760), //bcp->offset
    11, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S20956C5,    ABISELECT(2984,2344), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S7203C4,    ABISELECT(2984,2344), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S7203C14,    ABISELECT(2976,2340), //bcp->offset
    6, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S7203C13[];
static  VTBL_ENTRY vtc_S7203C13[] = {
  ABISELECT(5640,4436),
  ABISELECT(5392,4240),
  ABISELECT(4792,3760),
  ABISELECT(2976,2340),
  0,
  (VTBL_ENTRY)&(_ZTI8S7203C13[0]),
  ABISELECT(2664,2096),
  ABISELECT(2416,1900),
  ABISELECT(1816,1420),
  ABISELECT(-2976,-2340),
  (VTBL_ENTRY)&(_ZTI8S7203C13[0]),
  ABISELECT(848,676),
  ABISELECT(600,480),
  ABISELECT(-4792,-3760),
  (VTBL_ENTRY)&(_ZTI8S7203C13[0]),
};
extern VTBL_ENTRY _ZTV8S7203C13[];
static  VTBL_ENTRY _tg__ZTV8S7203C14__8S7203C13[] = {
  ABISELECT(2664,2096),
  ABISELECT(2416,1900),
  ABISELECT(1816,1420),
  0,
  (VTBL_ENTRY)&(_ZTI8S7203C14[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7203C7__8S7203C14__8S7203C13[] = {
  ABISELECT(848,676),
  ABISELECT(600,480),
  ABISELECT(-1816,-1420),
  (VTBL_ENTRY)&(_ZTI8S7203C14[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7203C7__8S7203C13[] = {
  ABISELECT(848,676),
  ABISELECT(600,480),
  0,
  (VTBL_ENTRY)&(_ZTI7S7203C7[0]),
};
static  VTT_ENTRY vtt_S7203C13[] = {
  {&(_ZTV8S7203C13[6]),  6,15},
  {&(_ZTV8S7203C13[11]),  11,15},
  {&(_ZTV8S7203C13[15]),  15,15},
  {&(_tg__ZTV8S7203C14__8S7203C13[5]),  5,5},
  {&(_tg__ZTV7S7203C7__8S7203C14__8S7203C13[4]),  4,4},
  {&(_tg__ZTV7S7203C7__8S7203C13[4]),  4,4},
};
extern VTBL_ENTRY _ZTI8S7203C13[];
extern  VTBL_ENTRY _ZTV8S7203C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7203C13[];
Class_Descriptor cd_S7203C13 = {  "S7203C13", // class name
  bases_S7203C13, 9,
  &(vtc_S7203C13[0]), // expected_vtbl_contents
  &(vtt_S7203C13[0]), // expected_vtt_contents
  ABISELECT(5696,4480), // object size
  NSPAIRA(_ZTI8S7203C13),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S7203C13),15, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7203C13),6, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7203C12  : virtual S7203C13 {
  int s7203c12f0;
  ::S7203C6 s7203c12f1[2];
  ::S20956C10 s7203c12f2[8];
  ~S7203C12(); // tgen
  S7203C12(); // tgen
};
//SIG(-1 S7203C12) C1{ VBC2{ BC3{ BC4{ m FL Fi[4] Fc FL Fp[2]} Fi FC4 FC4 Fi Fp FL[6] Fp} VBC5{ VBC6{ VBC3 VBC4 FC4 Fs Fi FC3 FL[4] FC3} BC3 Fi[2] FC3 FC3[5] FU7{ m Fi[8] Fp FL Fc Fp[5] FD Fc[7] Fp Fc:1 Fi} Fi} FC5} Fi FC8{ VBC4 vd v1 v2 v3 Fi[2] FC4 Fi FC3 Fp FC4 Fc:3}[2] FU9{ m Fp FL Fi Fc Fi FL Fl FL Fs Fp FD Fc[6]}[8]}


S7203C12 ::~S7203C12(){ note_dtor("S7203C12", this);} // tgen
S7203C12 ::S7203C12(){ note_ctor("S7203C12", this);} // tgen

static void Test_S7203C12()
{
  extern Class_Descriptor cd_S7203C12;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(423,1323)];
    init_test(&cd_S7203C12, buf);
    S7203C12 *dp, &lv = *(dp=new (buf) S7203C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(6752,5288), "sizeof(S7203C12)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7203C12)");
    /*is_ambiguous_... S7203C13::S7203C4 */ AMB_check_base_class_offset(lv, (S20956C5*)(S7203C4*)(S7203C13*), ABISELECT(1064,812), "S7203C12");
    /*is_ambiguous_... S7203C13::S7203C4 */ AMB_check_base_class_offset(lv, (S7203C4*)(S7203C13*), ABISELECT(1064,812), "S7203C12");
    /*is_ambiguous_... S7203C12::S7203C4 */ AMB_check_base_class_offset(lv, (S20956C5*)(S7203C4*), ABISELECT(6448,5048), "S7203C12");
    check_base_class_offset(lv, (S7203C4*)(S7203C7*), ABISELECT(6448,5048), "S7203C12");
    /*is_ambiguous_... S7203C7::S20956C5 */ AMB_check_base_class_offset(lv, (S20956C5*)(S7203C7*), ABISELECT(6696,5244), "S7203C12");
    check_base_class_offset(lv, (S7203C7*)(S7203C14*), ABISELECT(5848,4568), "S7203C12");
    /*is_ambiguous_... S7203C14::S7203C4 */ AMB_check_base_class_offset(lv, (S20956C5*)(S7203C4*)(S7203C14*), ABISELECT(4040,3152), "S7203C12");
    /*is_ambiguous_... S7203C14::S7203C4 */ AMB_check_base_class_offset(lv, (S7203C4*)(S7203C14*), ABISELECT(4040,3152), "S7203C12");
    check_base_class_offset(lv, (S7203C14*)(S7203C13*), ABISELECT(4032,3148), "S7203C12");
    check_base_class_offset(lv, (S7203C13*), ABISELECT(1056,808), "S7203C12");
    check_field_offset(lv, s7203c12f0, ABISELECT(8,4), "S7203C12.s7203c12f0");
    check_field_offset(lv, s7203c12f1, ABISELECT(16,8), "S7203C12.s7203c12f1");
    check_field_offset(lv, s7203c12f2, ABISELECT(928,712), "S7203C12.s7203c12f2");
    test_class_info(&lv, &cd_S7203C12);
    dp->~S7203C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7203C12(Test_S7203C12, "S7203C12", ABISELECT(6752,5288));

#else // __cplusplus

extern void _ZN8S7203C12C1Ev();
extern void _ZN8S7203C12D1Ev();
Name_Map name_map_S7203C12[] = {
  NSPAIR(_ZN8S7203C12C1Ev),
  NSPAIR(_ZN8S7203C12D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20956C5;
extern VTBL_ENTRY _ZTI8S20956C5[];
extern Class_Descriptor cd_S7203C4;
extern VTBL_ENTRY _ZTI7S7203C4[];
extern Class_Descriptor cd_S20956C5;
extern VTBL_ENTRY _ZTI8S20956C5[];
extern Class_Descriptor cd_S7203C4;
extern VTBL_ENTRY _ZTI7S7203C4[];
extern Class_Descriptor cd_S20956C5;
extern VTBL_ENTRY _ZTI8S20956C5[];
extern Class_Descriptor cd_S7203C7;
extern VTBL_ENTRY _ZTI7S7203C7[];
extern  VTBL_ENTRY _ZTV7S7203C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7203C7[];
extern Class_Descriptor cd_S20956C5;
extern VTBL_ENTRY _ZTI8S20956C5[];
extern Class_Descriptor cd_S7203C4;
extern VTBL_ENTRY _ZTI7S7203C4[];
extern Class_Descriptor cd_S7203C14;
extern VTBL_ENTRY _ZTI8S7203C14[];
extern  VTBL_ENTRY _ZTV8S7203C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7203C14[];
extern Class_Descriptor cd_S7203C13;
extern VTBL_ENTRY _ZTI8S7203C13[];
extern  VTBL_ENTRY _ZTV8S7203C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7203C13[];
static Base_Class bases_S7203C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20956C5,    ABISELECT(1064,812), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S7203C4,    ABISELECT(1064,812), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S20956C5,    ABISELECT(6448,5048), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S7203C4,    ABISELECT(6448,5048), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S20956C5,    ABISELECT(6696,5244), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S7203C7,    ABISELECT(5848,4568), //bcp->offset
    18, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S20956C5,    ABISELECT(4040,3152), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S7203C4,    ABISELECT(4040,3152), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S7203C14,    ABISELECT(4032,3148), //bcp->offset
    13, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S7203C13,    ABISELECT(1056,808), //bcp->offset
    7, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S7203C12[];
static  VTBL_ENTRY vtc_S7203C12[] = {
  ABISELECT(6696,5244),
  ABISELECT(6448,5048),
  ABISELECT(5848,4568),
  ABISELECT(4032,3148),
  ABISELECT(1056,808),
  0,
  (VTBL_ENTRY)&(_ZTI8S7203C12[0]),
  ABISELECT(5640,4436),
  ABISELECT(5392,4240),
  ABISELECT(4792,3760),
  ABISELECT(2976,2340),
  ABISELECT(-1056,-808),
  (VTBL_ENTRY)&(_ZTI8S7203C12[0]),
  ABISELECT(2664,2096),
  ABISELECT(2416,1900),
  ABISELECT(1816,1420),
  ABISELECT(-4032,-3148),
  (VTBL_ENTRY)&(_ZTI8S7203C12[0]),
  ABISELECT(848,676),
  ABISELECT(600,480),
  ABISELECT(-5848,-4568),
  (VTBL_ENTRY)&(_ZTI8S7203C12[0]),
};
extern VTBL_ENTRY _ZTV8S7203C12[];
static  VTBL_ENTRY _tg__ZTV8S7203C13__8S7203C12[] = {
  ABISELECT(5640,4436),
  ABISELECT(5392,4240),
  ABISELECT(4792,3760),
  ABISELECT(2976,2340),
  0,
  (VTBL_ENTRY)&(_ZTI8S7203C13[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7203C14__8S7203C13__8S7203C12[] = {
  ABISELECT(2664,2096),
  ABISELECT(2416,1900),
  ABISELECT(1816,1420),
  ABISELECT(-2976,-2340),
  (VTBL_ENTRY)&(_ZTI8S7203C13[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7203C7__8S7203C13__8S7203C12[] = {
  ABISELECT(848,676),
  ABISELECT(600,480),
  ABISELECT(-4792,-3760),
  (VTBL_ENTRY)&(_ZTI8S7203C13[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7203C14__8S7203C12[] = {
  ABISELECT(2664,2096),
  ABISELECT(2416,1900),
  ABISELECT(1816,1420),
  0,
  (VTBL_ENTRY)&(_ZTI8S7203C14[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7203C7__8S7203C14__8S7203C12[] = {
  ABISELECT(848,676),
  ABISELECT(600,480),
  ABISELECT(-1816,-1420),
  (VTBL_ENTRY)&(_ZTI8S7203C14[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7203C7__8S7203C12[] = {
  ABISELECT(848,676),
  ABISELECT(600,480),
  0,
  (VTBL_ENTRY)&(_ZTI7S7203C7[0]),
};
static  VTT_ENTRY vtt_S7203C12[] = {
  {&(_ZTV8S7203C12[7]),  7,22},
  {&(_ZTV8S7203C12[13]),  13,22},
  {&(_ZTV8S7203C12[18]),  18,22},
  {&(_ZTV8S7203C12[22]),  22,22},
  {&(_tg__ZTV8S7203C13__8S7203C12[6]),  6,6},
  {&(_tg__ZTV8S7203C14__8S7203C13__8S7203C12[5]),  5,5},
  {&(_tg__ZTV7S7203C7__8S7203C13__8S7203C12[4]),  4,4},
  {&(_tg__ZTV8S7203C14__8S7203C12[5]),  5,5},
  {&(_tg__ZTV7S7203C7__8S7203C14__8S7203C12[4]),  4,4},
  {&(_tg__ZTV7S7203C7__8S7203C12[4]),  4,4},
};
extern VTBL_ENTRY _ZTI8S7203C12[];
extern  VTBL_ENTRY _ZTV8S7203C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7203C12[];
Class_Descriptor cd_S7203C12 = {  "S7203C12", // class name
  bases_S7203C12, 10,
  &(vtc_S7203C12[0]), // expected_vtbl_contents
  &(vtt_S7203C12[0]), // expected_vtt_contents
  ABISELECT(6752,5288), // object size
  NSPAIRA(_ZTI8S7203C12),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S7203C12),22, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7203C12),10, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7203C1  : S7203C2 , virtual S7203C11 {
  void *s7203c1f0[2];
  int s7203c1f1;
  ::S7203C12 s7203c1f2;
  ::S7203C3 s7203c1f3[7];
  ::S7203C14 s7203c1f4;
  void *s7203c1f5;
  virtual  ~S7203C1(); // _ZN7S7203C1D2Ev
  S7203C1(); // tgen
};
//SIG(1 S7203C1) C1{ BC2{ VBC3{ BC4{ BC5{ m FL Fi[4] Fc FL Fp[2]} Fi FC5 FC5 Fi Fp FL[6] Fp} VBC5 VBC6{ VBC5 vd v1 v2 v3 Fi[2] FC5 Fi FC4 Fp FC5 Fc:3} VBC7{ VBC4 VBC5 FC5 Fs Fi FC4 FL[4] FC4} vd v4 v5 Fi FC8{} FD Fp FC6[2] FD FL Fi FC7} BC9{ VBC5 BC7 Fp Fc[9] FC7 FC4 FL:37 Fc FC4 Fc:8 Fp Fc Fi[2]} v6 v7 Fi[2] Fs FU10{ m Fp FL Fi Fc Fi FL Fl FL Fs Fp FD Fc[6]} Fi Fi Fs Fi Fi} VBC11{ vd v8 Fi FC7[9] Fp} vd Fp[2] Fi FC12{ VBC13{ BC4 VBC14{ VBC7 BC4 Fi[2] FC4 FC4[5] FU15{ m Fi[8] Fp FL Fc Fp[5] FD Fc[7] Fp Fc:1 Fi} Fi} FC14} Fi FC6[2] FU10[8]} FC3[7] FC14 Fp}


 S7203C1 ::~S7203C1(){ note_dtor("S7203C1", this);}
S7203C1 ::S7203C1(){ note_ctor("S7203C1", this);} // tgen

static void Test_S7203C1()
{
  extern Class_Descriptor cd_S7203C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(2966,9305)];
    init_test(&cd_S7203C1, buf);
    S7203C1 *dp, &lv = *(dp=new (buf) S7203C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(47440,37216), "sizeof(S7203C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7203C1)");
    /*is_ambiguous_... S7203C3::S7203C4 */ AMB_check_base_class_offset(lv, (S20956C5*)(S7203C4*)(S7203C3*), ABISELECT(35832,28028), "S7203C1");
    /*is_ambiguous_... S7203C3::S7203C4 */ AMB_check_base_class_offset(lv, (S7203C4*)(S7203C3*), ABISELECT(35832,28028), "S7203C1");
    /*is_ambiguous_... S7203C3::S20956C5 */ AMB_check_base_class_offset(lv, (S20956C5*)(S7203C3*), ABISELECT(37976,29696), "S7203C1");
    check_base_class_offset(lv, (S20956C5*)(S7203C6*), ABISELECT(37976,29696), "S7203C1");
    /*is_ambiguous_... S7203C1::S7203C7 */ AMB_check_base_class_offset(lv, (S20956C5*)(S7203C7*), ABISELECT(37976,29696), "S7203C1");
    /*is_ambiguous_... S7203C9::S20956C5 */ AMB_check_base_class_offset(lv, (S20956C5*)(S7203C9*)(S7203C2*), ABISELECT(37976,29696), "S7203C1");
    /*is_ambiguous_... S7203C7::S20956C5 */ AMB_check_base_class_offset(lv, (S20956C5*)(S7203C7*)(S7203C9*)(S7203C2*), ABISELECT(37976,29696), "S7203C1");
    check_base_class_offset(lv, (S7203C6*)(S7203C3*), ABISELECT(38032,29740), "S7203C1");
    /*is_ambiguous_... S7203C1::S7203C4 */ AMB_check_base_class_offset(lv, (S20956C5*)(S7203C4*), ABISELECT(39032,30528), "S7203C1");
    /*is_ambiguous_... S7203C1::S7203C7 */ AMB_check_base_class_offset(lv, (S7203C4*)(S7203C7*), ABISELECT(39032,30528), "S7203C1");
    check_base_class_offset(lv, (S7203C4*)(S7203C7*)(S7203C9*)(S7203C2*), ABISELECT(39032,30528), "S7203C1");
    check_base_class_offset(lv, (S7203C7*)(S7203C3*), ABISELECT(38432,30048), "S7203C1");
    check_base_class_offset(lv, (S7203C3*)(S7203C2*), ABISELECT(35824,28024), "S7203C1");
    check_base_class_offset(lv, (S7203C7*)(S7203C9*)(S7203C2*), 0, "S7203C1");
    check_base_class_offset(lv, (S7203C9*)(S7203C2*), 0, "S7203C1");
    check_base_class_offset(lv, (S7203C2*), 0, "S7203C1");
    check_base_class_offset(lv, (S7203C11*), ABISELECT(39280,30724), "S7203C1");
    check_field_offset(lv, s7203c1f0, ABISELECT(2120,1680), "S7203C1.s7203c1f0");
    check_field_offset(lv, s7203c1f1, ABISELECT(2136,1688), "S7203C1.s7203c1f1");
    check_field_offset(lv, s7203c1f2, ABISELECT(2144,1692), "S7203C1.s7203c1f2");
    check_field_offset(lv, s7203c1f3, ABISELECT(8896,6980), "S7203C1.s7203c1f3");
    check_field_offset(lv, s7203c1f4, ABISELECT(33088,25880), "S7203C1.s7203c1f4");
    check_field_offset(lv, s7203c1f5, ABISELECT(35808,28020), "S7203C1.s7203c1f5");
    test_class_info(&lv, &cd_S7203C1);
    dp->~S7203C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7203C1(Test_S7203C1, "S7203C1", ABISELECT(47440,37216));

#else // __cplusplus

extern void _ZN7S7203C1C1Ev();
extern void _ZN7S7203C1D2Ev();
Name_Map name_map_S7203C1[] = {
  NSPAIR(_ZN7S7203C1C1Ev),
  NSPAIR(_ZN7S7203C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20956C5;
extern VTBL_ENTRY _ZTI8S20956C5[];
extern Class_Descriptor cd_S7203C4;
extern VTBL_ENTRY _ZTI7S7203C4[];
extern Class_Descriptor cd_S20956C5;
extern VTBL_ENTRY _ZTI8S20956C5[];
extern Class_Descriptor cd_S7203C6;
extern VTBL_ENTRY _ZTI7S7203C6[];
extern  VTBL_ENTRY _ZTV7S7203C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7203C6[];
extern Class_Descriptor cd_S20956C5;
extern VTBL_ENTRY _ZTI8S20956C5[];
extern Class_Descriptor cd_S7203C4;
extern VTBL_ENTRY _ZTI7S7203C4[];
extern Class_Descriptor cd_S7203C7;
extern VTBL_ENTRY _ZTI7S7203C7[];
extern  VTBL_ENTRY _ZTV7S7203C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7203C7[];
extern Class_Descriptor cd_S7203C3;
extern VTBL_ENTRY _ZTI7S7203C3[];
extern  VTBL_ENTRY _ZTV7S7203C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7203C3[];
extern Class_Descriptor cd_S7203C7;
extern VTBL_ENTRY _ZTI7S7203C7[];
extern  VTBL_ENTRY _ZTV7S7203C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7203C7[];
extern Class_Descriptor cd_S7203C9;
extern VTBL_ENTRY _ZTI7S7203C9[];
extern  VTBL_ENTRY _ZTV7S7203C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7203C9[];
extern Class_Descriptor cd_S7203C2;
extern VTBL_ENTRY _ZTI7S7203C2[];
extern  VTBL_ENTRY _ZTV7S7203C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7203C2[];
extern Class_Descriptor cd_S7203C11;
extern VTBL_ENTRY _ZTI8S7203C11[];
extern  VTBL_ENTRY _ZTV8S7203C11[];
static Base_Class bases_S7203C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20956C5,    ABISELECT(35832,28028), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S7203C4,    ABISELECT(35832,28028), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S20956C5,    ABISELECT(37976,29696), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S7203C6,    ABISELECT(38032,29740), //bcp->offset
    25, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S20956C5,    ABISELECT(39032,30528), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S7203C4,    ABISELECT(39032,30528), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S7203C7,    ABISELECT(38432,30048), //bcp->offset
    37, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S7203C3,    ABISELECT(35824,28024), //bcp->offset
    12, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S7203C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S7203C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S7203C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7203C11,    ABISELECT(39280,30724), //bcp->offset
    41, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7203C1[];
extern void _ZN7S7203C22v6Ev();
extern void _ZN7S7203C22v7Ev();
extern void _ZN7S7203C1D1Ev();
extern void _ZN7S7203C1D0Ev();
extern void ABISELECT(_ZTv0_n56_N7S7203C1D1Ev,_ZTv0_n28_N7S7203C1D1Ev)();
extern void ABISELECT(_ZThn35824_N7S7203C1D1Ev,_ZThn28024_N7S7203C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N7S7203C1D0Ev,_ZTv0_n28_N7S7203C1D0Ev)();
extern void ABISELECT(_ZThn35824_N7S7203C1D0Ev,_ZThn28024_N7S7203C1D0Ev)() __attribute__((weak));
extern void _ZN7S7203C32v4Ev();
extern void _ZN7S7203C32v5Ev();
extern void ABISELECT(_ZTv0_n32_N7S7203C1D1Ev,_ZTv0_n16_N7S7203C1D1Ev)();
extern void ABISELECT(_ZThn38032_N7S7203C1D1Ev,_ZThn29740_N7S7203C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S7203C1D0Ev,_ZTv0_n16_N7S7203C1D0Ev)();
extern void ABISELECT(_ZThn38032_N7S7203C1D0Ev,_ZThn29740_N7S7203C1D0Ev)() __attribute__((weak));
extern void _ZN7S7203C62v1Ev();
extern void _ZN7S7203C62v2Ev();
extern void _ZN7S7203C62v3Ev();
extern void ABISELECT(_ZTv0_n24_N7S7203C1D1Ev,_ZTv0_n12_N7S7203C1D1Ev)();
extern void ABISELECT(_ZThn39280_N7S7203C1D1Ev,_ZThn30724_N7S7203C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7203C1D0Ev,_ZTv0_n12_N7S7203C1D0Ev)();
extern void ABISELECT(_ZThn39280_N7S7203C1D0Ev,_ZThn30724_N7S7203C1D0Ev)() __attribute__((weak));
extern void _ZN8S7203C112v8Ev();
static  VTBL_ENTRY vtc_S7203C1[] = {
  ABISELECT(39280,30724),
  ABISELECT(38432,30048),
  ABISELECT(38032,29740),
  ABISELECT(35824,28024),
  ABISELECT(37976,29696),
  ABISELECT(39032,30528),
  0,
  (VTBL_ENTRY)&(_ZTI7S7203C1[0]),
  (VTBL_ENTRY)&_ZN7S7203C22v6Ev,
  (VTBL_ENTRY)&_ZN7S7203C22v7Ev,
  (VTBL_ENTRY)&_ZN7S7203C1D1Ev,
  (VTBL_ENTRY)&_ZN7S7203C1D0Ev,
  0,
  0,
  ABISELECT(-35824,-28024),
  ABISELECT(3208,2504),
  ABISELECT(2608,2024),
  ABISELECT(2208,1716),
  ABISELECT(2152,1672),
  ABISELECT(-35824,-28024),
  (VTBL_ENTRY)&(_ZTI7S7203C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N7S7203C1D1Ev,_ZTv0_n28_N7S7203C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N7S7203C1D0Ev,_ZTv0_n28_N7S7203C1D0Ev),
  (VTBL_ENTRY)&_ZN7S7203C32v4Ev,
  (VTBL_ENTRY)&_ZN7S7203C32v5Ev,
  0,
  0,
  0,
  ABISELECT(-38032,-29740),
  ABISELECT(-56,-44),
  ABISELECT(-38032,-29740),
  (VTBL_ENTRY)&(_ZTI7S7203C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7203C1D1Ev,_ZTv0_n16_N7S7203C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7203C1D0Ev,_ZTv0_n16_N7S7203C1D0Ev),
  (VTBL_ENTRY)&_ZN7S7203C62v1Ev,
  (VTBL_ENTRY)&_ZN7S7203C62v2Ev,
  (VTBL_ENTRY)&_ZN7S7203C62v3Ev,
  ABISELECT(-456,-352),
  ABISELECT(600,480),
  ABISELECT(-38432,-30048),
  (VTBL_ENTRY)&(_ZTI7S7203C1[0]),
  0,
  ABISELECT(-39280,-30724),
  ABISELECT(-39280,-30724),
  (VTBL_ENTRY)&(_ZTI7S7203C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7203C1D1Ev,_ZTv0_n12_N7S7203C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7203C1D0Ev,_ZTv0_n12_N7S7203C1D0Ev),
  (VTBL_ENTRY)&_ZN8S7203C112v8Ev,
};
extern VTBL_ENTRY _ZTV7S7203C1[];
extern void _ZN7S7203C22v6Ev();
extern void _ZN7S7203C22v7Ev();
extern void _ZN7S7203C2D1Ev();
extern void _ZN7S7203C2D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7203C2__7S7203C1[] = {
  ABISELECT(38432,30048),
  ABISELECT(38032,29740),
  ABISELECT(35824,28024),
  ABISELECT(37976,29696),
  ABISELECT(39032,30528),
  0,
  (VTBL_ENTRY)&(_ZTI7S7203C2[0]),
  (VTBL_ENTRY)&_ZN7S7203C22v6Ev,
  (VTBL_ENTRY)&_ZN7S7203C22v7Ev,
  (VTBL_ENTRY)&_ZN7S7203C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7203C2D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7203C97S7203C2__7S7203C1[] = {
  ABISELECT(37976,29696),
  ABISELECT(39032,30528),
  0,
  (VTBL_ENTRY)&(_ZTI7S7203C9[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7203C77S7203C97S7203C2__A1__7S7203C1[] = {
  ABISELECT(37976,29696),
  ABISELECT(39032,30528),
  0,
  (VTBL_ENTRY)&(_ZTI7S7203C7[0]),
};
extern void ABISELECT(_ZTv0_n56_N7S7203C2D1Ev,_ZTv0_n28_N7S7203C2D1Ev)();
extern void ABISELECT(_ZThn35824_N7S7203C2D1Ev,_ZThn28024_N7S7203C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N7S7203C2D0Ev,_ZTv0_n28_N7S7203C2D0Ev)();
extern void ABISELECT(_ZThn35824_N7S7203C2D0Ev,_ZThn28024_N7S7203C2D0Ev)() __attribute__((weak));
extern void _ZN7S7203C32v4Ev();
extern void _ZN7S7203C32v5Ev();
static  VTBL_ENTRY _tg__ZTV7S7203C3__7S7203C2__7S7203C1[] = {
  0,
  0,
  ABISELECT(-35824,-28024),
  ABISELECT(3208,2504),
  ABISELECT(2608,2024),
  ABISELECT(2208,1716),
  ABISELECT(2152,1672),
  ABISELECT(-35824,-28024),
  (VTBL_ENTRY)&(_ZTI7S7203C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N7S7203C2D1Ev,_ZTv0_n28_N7S7203C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N7S7203C2D0Ev,_ZTv0_n28_N7S7203C2D0Ev),
  (VTBL_ENTRY)&_ZN7S7203C32v4Ev,
  (VTBL_ENTRY)&_ZN7S7203C32v5Ev,
};
extern void ABISELECT(_ZTv0_n32_N7S7203C2D1Ev,_ZTv0_n16_N7S7203C2D1Ev)();
extern void ABISELECT(_ZThn38032_N7S7203C2D1Ev,_ZThn29740_N7S7203C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S7203C2D0Ev,_ZTv0_n16_N7S7203C2D0Ev)();
extern void ABISELECT(_ZThn38032_N7S7203C2D0Ev,_ZThn29740_N7S7203C2D0Ev)() __attribute__((weak));
extern void _ZN7S7203C62v1Ev();
extern void _ZN7S7203C62v2Ev();
extern void _ZN7S7203C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7203C6__7S7203C2__7S7203C1[] = {
  0,
  0,
  0,
  ABISELECT(-38032,-29740),
  ABISELECT(-56,-44),
  ABISELECT(-38032,-29740),
  (VTBL_ENTRY)&(_ZTI7S7203C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7203C2D1Ev,_ZTv0_n16_N7S7203C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7203C2D0Ev,_ZTv0_n16_N7S7203C2D0Ev),
  (VTBL_ENTRY)&_ZN7S7203C62v1Ev,
  (VTBL_ENTRY)&_ZN7S7203C62v2Ev,
  (VTBL_ENTRY)&_ZN7S7203C62v3Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7203C7__7S7203C2__7S7203C1[] = {
  ABISELECT(-456,-352),
  ABISELECT(600,480),
  ABISELECT(-38432,-30048),
  (VTBL_ENTRY)&(_ZTI7S7203C2[0]),
};
extern void _ZN7S7203C3D1Ev();
extern void _ZN7S7203C3D0Ev();
extern void _ZN7S7203C32v4Ev();
extern void _ZN7S7203C32v5Ev();
static  VTBL_ENTRY _tg__ZTV7S7203C3__7S7203C1[] = {
  ABISELECT(3208,2504),
  ABISELECT(2608,2024),
  ABISELECT(2208,1716),
  ABISELECT(2152,1672),
  0,
  (VTBL_ENTRY)&(_ZTI7S7203C3[0]),
  (VTBL_ENTRY)&_ZN7S7203C3D1Ev,
  (VTBL_ENTRY)&_ZN7S7203C3D0Ev,
  (VTBL_ENTRY)&_ZN7S7203C32v4Ev,
  (VTBL_ENTRY)&_ZN7S7203C32v5Ev,
};
extern void ABISELECT(_ZTv0_n32_N7S7203C3D1Ev,_ZTv0_n16_N7S7203C3D1Ev)();
extern void ABISELECT(_ZThn2208_N7S7203C3D1Ev,_ZThn1716_N7S7203C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S7203C3D0Ev,_ZTv0_n16_N7S7203C3D0Ev)();
extern void ABISELECT(_ZThn2208_N7S7203C3D0Ev,_ZThn1716_N7S7203C3D0Ev)() __attribute__((weak));
extern void _ZN7S7203C62v1Ev();
extern void _ZN7S7203C62v2Ev();
extern void _ZN7S7203C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7203C6__7S7203C3__7S7203C1[] = {
  0,
  0,
  0,
  ABISELECT(-2208,-1716),
  ABISELECT(-56,-44),
  ABISELECT(-2208,-1716),
  (VTBL_ENTRY)&(_ZTI7S7203C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7203C3D1Ev,_ZTv0_n16_N7S7203C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7203C3D0Ev,_ZTv0_n16_N7S7203C3D0Ev),
  (VTBL_ENTRY)&_ZN7S7203C62v1Ev,
  (VTBL_ENTRY)&_ZN7S7203C62v2Ev,
  (VTBL_ENTRY)&_ZN7S7203C62v3Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7203C7__7S7203C3__7S7203C1[] = {
  ABISELECT(-456,-352),
  ABISELECT(600,480),
  ABISELECT(-2608,-2024),
  (VTBL_ENTRY)&(_ZTI7S7203C3[0]),
};
extern void _ZN7S7203C6D1Ev();
extern void _ZN7S7203C6D0Ev();
extern void _ZN7S7203C62v1Ev();
extern void _ZN7S7203C62v2Ev();
extern void _ZN7S7203C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7203C6__7S7203C1[] = {
  ABISELECT(-56,-44),
  0,
  (VTBL_ENTRY)&(_ZTI7S7203C6[0]),
  (VTBL_ENTRY)&_ZN7S7203C6D1Ev,
  (VTBL_ENTRY)&_ZN7S7203C6D0Ev,
  (VTBL_ENTRY)&_ZN7S7203C62v1Ev,
  (VTBL_ENTRY)&_ZN7S7203C62v2Ev,
  (VTBL_ENTRY)&_ZN7S7203C62v3Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7203C7__7S7203C1[] = {
  ABISELECT(-456,-352),
  ABISELECT(600,480),
  0,
  (VTBL_ENTRY)&(_ZTI7S7203C7[0]),
};
static  VTT_ENTRY vtt_S7203C1[] = {
  {&(_ZTV7S7203C1[8]),  8,48},
  {&(_tg__ZTV7S7203C2__7S7203C1[7]),  7,11},
  {&(_tg__ZTV7S7203C97S7203C2__7S7203C1[4]),  4,4},
  {&(_tg__ZTV7S7203C77S7203C97S7203C2__A1__7S7203C1[4]),  4,4},
  {&(_tg__ZTV7S7203C3__7S7203C2__7S7203C1[9]),  9,13},
  {&(_tg__ZTV7S7203C6__7S7203C2__7S7203C1[7]),  7,12},
  {&(_tg__ZTV7S7203C7__7S7203C2__7S7203C1[4]),  4,4},
  {&(_ZTV7S7203C1[21]),  21,48},
  {&(_ZTV7S7203C1[32]),  32,48},
  {&(_ZTV7S7203C1[41]),  41,48},
  {&(_ZTV7S7203C1[45]),  45,48},
  {&(_tg__ZTV7S7203C3__7S7203C1[6]),  6,10},
  {&(_tg__ZTV7S7203C6__7S7203C3__7S7203C1[7]),  7,12},
  {&(_tg__ZTV7S7203C7__7S7203C3__7S7203C1[4]),  4,4},
  {&(_tg__ZTV7S7203C6__7S7203C1[3]),  3,8},
  {&(_tg__ZTV7S7203C7__7S7203C1[4]),  4,4},
};
extern VTBL_ENTRY _ZTI7S7203C1[];
extern  VTBL_ENTRY _ZTV7S7203C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7203C1[];
static VTBL_ENTRY alt_thunk_names23[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7203C3D0Ev,_ZTv0_n16_N7S7203C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2208_N7S7203C3D0Ev,_ZThn1716_N7S7203C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7203C3D1Ev,_ZTv0_n16_N7S7203C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2208_N7S7203C3D1Ev,_ZThn1716_N7S7203C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7203C2D0Ev,_ZTv0_n16_N7S7203C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn38032_N7S7203C2D0Ev,_ZThn29740_N7S7203C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7203C2D1Ev,_ZTv0_n16_N7S7203C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn38032_N7S7203C2D1Ev,_ZThn29740_N7S7203C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N7S7203C2D0Ev,_ZTv0_n28_N7S7203C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn35824_N7S7203C2D0Ev,_ZThn28024_N7S7203C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N7S7203C2D1Ev,_ZTv0_n28_N7S7203C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn35824_N7S7203C2D1Ev,_ZThn28024_N7S7203C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7203C1D0Ev,_ZTv0_n12_N7S7203C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn39280_N7S7203C1D0Ev,_ZThn30724_N7S7203C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7203C1D1Ev,_ZTv0_n12_N7S7203C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn39280_N7S7203C1D1Ev,_ZThn30724_N7S7203C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7203C1D0Ev,_ZTv0_n16_N7S7203C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn38032_N7S7203C1D0Ev,_ZThn29740_N7S7203C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7203C1D1Ev,_ZTv0_n16_N7S7203C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn38032_N7S7203C1D1Ev,_ZThn29740_N7S7203C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N7S7203C1D0Ev,_ZTv0_n28_N7S7203C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn35824_N7S7203C1D0Ev,_ZThn28024_N7S7203C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N7S7203C1D1Ev,_ZTv0_n28_N7S7203C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn35824_N7S7203C1D1Ev,_ZThn28024_N7S7203C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7203C1 = {  "S7203C1", // class name
  bases_S7203C1, 12,
  &(vtc_S7203C1[0]), // expected_vtbl_contents
  &(vtt_S7203C1[0]), // expected_vtt_contents
  ABISELECT(47440,37216), // object size
  NSPAIRA(_ZTI7S7203C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7203C1),48, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7203C1),16, //virtual table table var
  7, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names23,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S18630C1  {
  int s18630c1f0[4];
  int s18630c1f1:4;
  ::S20956C15 s18630c1f2[10];
  long double s18630c1f3;
  int s18630c1f4;
  virtual void  v1(); // _ZN8S18630C12v1Ev
  virtual void  v2(); // _ZN8S18630C12v2Ev
  virtual void  v3(); // _ZN8S18630C12v3Ev
  ~S18630C1(); // tgen
  S18630C1(); // tgen
};
//SIG(1 S18630C1) C1{ v1 v2 v3 Fi[4] Fi:4 FC2{ BC3{ VBC4{ VBC5{ BC6{ m FL Fi[4] Fc FL Fp[2]} Fi FC6 FC6 Fi Fp FL[6] Fp} VBC6 FC6 Fs Fi FC5 FL[4] FC5} BC5 Fi[2] FC5 FC5[5] FU7{ m Fi[8] Fp FL Fc Fp[5] FD Fc[7] Fp Fc:1 Fi} Fi} VBC8{ VBC9{ VBC10{ BC5 VBC6 VBC11{ VBC6 vd v5 v6 v7 Fi Fi FC6 Fi FC5 Fp FC6 Fc:3} VBC4 vd v8 v9 Fi FC12{} FD Fp FC11[2] FD FL Fi FC4} BC13{ VBC6 BC4 Fp Fc[9] FC4 FC5 FL:37 Fc FC5 Fc:8 Fp Fc Fi Fi} v10 v11 Fi Fi Fs FU14{ m Fp FL Fi Fc Fi FL Fl FL Fs Fp FD Fc[6]} Fi Fi Fs Fi Fi} vd FC11[2] FD FL FC6 Fp} vd v4 Fi Fi[7]}[10] FD Fi}


void  S18630C1 ::v1(){vfunc_called(this, "_ZN8S18630C12v1Ev");}
void  S18630C1 ::v2(){vfunc_called(this, "_ZN8S18630C12v2Ev");}
void  S18630C1 ::v3(){vfunc_called(this, "_ZN8S18630C12v3Ev");}
S18630C1 ::~S18630C1(){ note_dtor("S18630C1", this);} // tgen
S18630C1 ::S18630C1(){ note_ctor("S18630C1", this);} // tgen

static void Test_S18630C1()
{
  extern Class_Descriptor cd_S18630C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(5295,16531)];
    init_test(&cd_S18630C1, buf);
    S18630C1 *dp, &lv = *(dp=new (buf) S18630C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(84704,66120), "sizeof(S18630C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S18630C1)");
    check_field_offset(lv, s18630c1f0, ABISELECT(8,4), "S18630C1.s18630c1f0");
    set_bf_and_test(lv, s18630c1f1, ABISELECT(24,20), 0, 4, 1, "S18630C1");
    set_bf_and_test(lv, s18630c1f1, ABISELECT(24,20), 0, 4, hide_sll(1LL<<3), "S18630C1");
    check_field_offset(lv, s18630c1f2, ABISELECT(32,24), "S18630C1.s18630c1f2");
    check_field_offset(lv, s18630c1f3, ABISELECT(84672,66104), "S18630C1.s18630c1f3");
    check_field_offset(lv, s18630c1f4, ABISELECT(84688,66116), "S18630C1.s18630c1f4");
    test_class_info(&lv, &cd_S18630C1);
    dp->~S18630C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS18630C1(Test_S18630C1, "S18630C1", ABISELECT(84704,66120));

#else // __cplusplus

extern void _ZN8S18630C1C1Ev();
extern void _ZN8S18630C1D1Ev();
Name_Map name_map_S18630C1[] = {
  NSPAIR(_ZN8S18630C1C1Ev),
  NSPAIR(_ZN8S18630C1D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S18630C1[];
extern void _ZN8S18630C12v1Ev();
extern void _ZN8S18630C12v2Ev();
extern void _ZN8S18630C12v3Ev();
static  VTBL_ENTRY vtc_S18630C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S18630C1[0]),
  (VTBL_ENTRY)&_ZN8S18630C12v1Ev,
  (VTBL_ENTRY)&_ZN8S18630C12v2Ev,
  (VTBL_ENTRY)&_ZN8S18630C12v3Ev,
};
extern VTBL_ENTRY _ZTI8S18630C1[];
extern  VTBL_ENTRY _ZTV8S18630C1[];
Class_Descriptor cd_S18630C1 = {  "S18630C1", // class name
  0,0,//no base classes
  &(vtc_S18630C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(84704,66120), // object size
  NSPAIRA(_ZTI8S18630C1),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S18630C1),5, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S18631C1  {
  int s18631c1f0[4];
  __tsi64 s18631c1f1:4;
  ::S20956C15 s18631c1f2[10];
  long double s18631c1f3;
  int s18631c1f4;
  virtual void  v1(); // _ZN8S18631C12v1Ev
  virtual void  v2(); // _ZN8S18631C12v2Ev
  virtual void  v3(); // _ZN8S18631C12v3Ev
  ~S18631C1(); // tgen
  S18631C1(); // tgen
};
//SIG(1 S18631C1) C1{ v1 v2 v3 Fi[4] FL:4 FC2{ BC3{ VBC4{ VBC5{ BC6{ m FL Fi[4] Fc FL Fp[2]} Fi FC6 FC6 Fi Fp FL[6] Fp} VBC6 FC6 Fs Fi FC5 FL[4] FC5} BC5 Fi[2] FC5 FC5[5] FU7{ m Fi[8] Fp FL Fc Fp[5] FD Fc[7] Fp Fc:1 Fi} Fi} VBC8{ VBC9{ VBC10{ BC5 VBC6 VBC11{ VBC6 vd v5 v6 v7 Fi Fi FC6 Fi FC5 Fp FC6 Fc:3} VBC4 vd v8 v9 Fi FC12{} FD Fp FC11[2] FD FL Fi FC4} BC13{ VBC6 BC4 Fp Fc[9] FC4 FC5 FL:37 Fc FC5 Fc:8 Fp Fc Fi Fi} v10 v11 Fi Fi Fs FU14{ m Fp FL Fi Fc Fi FL Fl FL Fs Fp FD Fc[6]} Fi Fi Fs Fi Fi} vd FC11[2] FD FL FC6 Fp} vd v4 Fi Fi[7]}[10] FD Fi}


void  S18631C1 ::v1(){vfunc_called(this, "_ZN8S18631C12v1Ev");}
void  S18631C1 ::v2(){vfunc_called(this, "_ZN8S18631C12v2Ev");}
void  S18631C1 ::v3(){vfunc_called(this, "_ZN8S18631C12v3Ev");}
S18631C1 ::~S18631C1(){ note_dtor("S18631C1", this);} // tgen
S18631C1 ::S18631C1(){ note_ctor("S18631C1", this);} // tgen

static void Test_S18631C1()
{
  extern Class_Descriptor cd_S18631C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(5295,16531)];
    init_test(&cd_S18631C1, buf);
    S18631C1 *dp, &lv = *(dp=new (buf) S18631C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(84704,66120), "sizeof(S18631C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S18631C1)");
    check_field_offset(lv, s18631c1f0, ABISELECT(8,4), "S18631C1.s18631c1f0");
    set_bf_and_test(lv, s18631c1f1, ABISELECT(24,20), 0, 4, 1, "S18631C1");
    set_bf_and_test(lv, s18631c1f1, ABISELECT(24,20), 0, 4, hide_sll(1LL<<3), "S18631C1");
    check_field_offset(lv, s18631c1f2, ABISELECT(32,24), "S18631C1.s18631c1f2");
    check_field_offset(lv, s18631c1f3, ABISELECT(84672,66104), "S18631C1.s18631c1f3");
    check_field_offset(lv, s18631c1f4, ABISELECT(84688,66116), "S18631C1.s18631c1f4");
    test_class_info(&lv, &cd_S18631C1);
    dp->~S18631C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS18631C1(Test_S18631C1, "S18631C1", ABISELECT(84704,66120));

#else // __cplusplus

extern void _ZN8S18631C1C1Ev();
extern void _ZN8S18631C1D1Ev();
Name_Map name_map_S18631C1[] = {
  NSPAIR(_ZN8S18631C1C1Ev),
  NSPAIR(_ZN8S18631C1D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S18631C1[];
extern void _ZN8S18631C12v1Ev();
extern void _ZN8S18631C12v2Ev();
extern void _ZN8S18631C12v3Ev();
static  VTBL_ENTRY vtc_S18631C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S18631C1[0]),
  (VTBL_ENTRY)&_ZN8S18631C12v1Ev,
  (VTBL_ENTRY)&_ZN8S18631C12v2Ev,
  (VTBL_ENTRY)&_ZN8S18631C12v3Ev,
};
extern VTBL_ENTRY _ZTI8S18631C1[];
extern  VTBL_ENTRY _ZTV8S18631C1[];
Class_Descriptor cd_S18631C1 = {  "S18631C1", // class name
  0,0,//no base classes
  &(vtc_S18631C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(84704,66120), // object size
  NSPAIRA(_ZTI8S18631C1),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S18631C1),5, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20472C3  : S20956C5 {
  int s20472c3f0;
  ::S20956C5 s20472c3f1;
  ::S20956C5 s20472c3f2;
  int s20472c3f3;
  void *s20472c3f4;
  __tsi64 s20472c3f5[6];
  void *s20472c3f6;
};
//SIG(-1 S20472C3) C1{ BC2{ m FL Fi[4] Fc FL Fp[2]} Fi FC2 FC2 Fi Fp FL[6] Fp}



static void Test_S20472C3()
{
  extern Class_Descriptor cd_S20472C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(32,50)];
    init_test(&cd_S20472C3, buf);
    S20472C3 &lv = *(new (buf) S20472C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(248,196), "sizeof(S20472C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20472C3)");
    check_base_class_offset(lv, (S20956C5*), 0, "S20472C3");
    check_field_offset(lv, s20472c3f0, ABISELECT(56,44), "S20472C3.s20472c3f0");
    check_field_offset(lv, s20472c3f1, ABISELECT(64,48), "S20472C3.s20472c3f1");
    check_field_offset(lv, s20472c3f2, ABISELECT(120,92), "S20472C3.s20472c3f2");
    check_field_offset(lv, s20472c3f3, ABISELECT(176,136), "S20472C3.s20472c3f3");
    check_field_offset(lv, s20472c3f4, ABISELECT(184,140), "S20472C3.s20472c3f4");
    check_field_offset(lv, s20472c3f5, ABISELECT(192,144), "S20472C3.s20472c3f5");
    check_field_offset(lv, s20472c3f6, ABISELECT(240,192), "S20472C3.s20472c3f6");
    test_class_info(&lv, &cd_S20472C3);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20472C3(Test_S20472C3, "S20472C3", ABISELECT(248,196));

#else // __cplusplus

extern Class_Descriptor cd_S20956C5;
extern VTBL_ENTRY _ZTI8S20956C5[];
static Base_Class bases_S20472C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20956C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20472C3[];
Class_Descriptor cd_S20472C3 = {  "S20472C3", // class name
  bases_S20472C3, 1,
  0, // no vftv
  0, //no vtt
  ABISELECT(248,196), // object size
  NSPAIRA(_ZTI8S20472C3),ABISELECT(24,12), //typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20472C2  : virtual S20472C3 , virtual S20956C5 {
  ::S20956C5 s20472c2f0;
  short s20472c2f1;
  int s20472c2f2;
  ::S20472C3 s20472c2f3;
  __tsi64 s20472c2f4[4];
  ::S20472C3 s20472c2f5;
  ~S20472C2(); // tgen
  S20472C2(); // tgen
};
//SIG(-1 S20472C2) C1{ VBC2{ BC3{ m FL Fi[4] Fc FL Fp[2]} Fi FC3 FC3 Fi Fp FL[6] Fp} VBC3 FC3 Fs Fi FC2 FL[4] FC2}


S20472C2 ::~S20472C2(){ note_dtor("S20472C2", this);} // tgen
S20472C2 ::S20472C2(){ note_ctor("S20472C2", this);} // tgen

static void Test_S20472C2()
{
  extern Class_Descriptor cd_S20472C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(114,181)];
    init_test(&cd_S20472C2, buf);
    S20472C2 *dp, &lv = *(dp=new (buf) S20472C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(904,720), "sizeof(S20472C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20472C2)");
    check_base_class_offset(lv, (S20956C5*)(S20472C3*), ABISELECT(600,480), "S20472C2");
    check_base_class_offset(lv, (S20472C3*), ABISELECT(600,480), "S20472C2");
    /*is_ambiguous_... S20472C2::S20956C5 */ AMB_check_base_class_offset(lv, (S20956C5*), ABISELECT(848,676), "S20472C2");
    check_field_offset(lv, s20472c2f0, ABISELECT(8,4), "S20472C2.s20472c2f0");
    check_field_offset(lv, s20472c2f1, ABISELECT(64,48), "S20472C2.s20472c2f1");
    check_field_offset(lv, s20472c2f2, ABISELECT(68,52), "S20472C2.s20472c2f2");
    check_field_offset(lv, s20472c2f3, ABISELECT(72,56), "S20472C2.s20472c2f3");
    check_field_offset(lv, s20472c2f4, ABISELECT(320,252), "S20472C2.s20472c2f4");
    check_field_offset(lv, s20472c2f5, ABISELECT(352,284), "S20472C2.s20472c2f5");
    test_class_info(&lv, &cd_S20472C2);
    dp->~S20472C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20472C2(Test_S20472C2, "S20472C2", ABISELECT(904,720));

#else // __cplusplus

extern void _ZN8S20472C2C1Ev();
extern void _ZN8S20472C2D1Ev();
Name_Map name_map_S20472C2[] = {
  NSPAIR(_ZN8S20472C2C1Ev),
  NSPAIR(_ZN8S20472C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20956C5;
extern VTBL_ENTRY _ZTI8S20956C5[];
extern Class_Descriptor cd_S20472C3;
extern VTBL_ENTRY _ZTI8S20472C3[];
extern Class_Descriptor cd_S20956C5;
extern VTBL_ENTRY _ZTI8S20956C5[];
static Base_Class bases_S20472C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20956C5,    ABISELECT(600,480), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S20472C3,    ABISELECT(600,480), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20956C5,    ABISELECT(848,676), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20472C2[];
static  VTBL_ENTRY vtc_S20472C2[] = {
  ABISELECT(848,676),
  ABISELECT(600,480),
  0,
  (VTBL_ENTRY)&(_ZTI8S20472C2[0]),
};
extern VTBL_ENTRY _ZTV8S20472C2[];
static  VTT_ENTRY vtt_S20472C2[] = {
  {&(_ZTV8S20472C2[4]),  4,4},
};
extern VTBL_ENTRY _ZTI8S20472C2[];
extern  VTBL_ENTRY _ZTV8S20472C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20472C2[];
Class_Descriptor cd_S20472C2 = {  "S20472C2", // class name
  bases_S20472C2, 3,
  &(vtc_S20472C2[0]), // expected_vtbl_contents
  &(vtt_S20472C2[0]), // expected_vtt_contents
  ABISELECT(904,720), // object size
  NSPAIRA(_ZTI8S20472C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20472C2),4, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20472C2),1, //virtual table table var
  0, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20472C7  : virtual S20956C5 {
  int s20472c7f0[2];
  ::S20956C5 s20472c7f1;
  int s20472c7f2;
  ::S20472C3 s20472c7f3;
  void *s20472c7f4;
  ::S20956C5 s20472c7f5;
  char s20472c7f6:3;
  virtual  ~S20472C7(); // _ZN8S20472C7D2Ev
  virtual void  v2(); // _ZN8S20472C72v2Ev
  virtual void  v3(); // _ZN8S20472C72v3Ev
  virtual void  v4(); // _ZN8S20472C72v4Ev
  S20472C7(); // tgen
};
//SIG(-1 S20472C7) C1{ VBC2{ m FL Fi[4] Fc FL Fp[2]} vd v1 v2 v3 Fi[2] FC2 Fi FC3{ BC2 Fi FC2 FC2 Fi Fp FL[6] Fp} Fp FC2 Fc:3}


 S20472C7 ::~S20472C7(){ note_dtor("S20472C7", this);}
void  S20472C7 ::v2(){vfunc_called(this, "_ZN8S20472C72v2Ev");}
void  S20472C7 ::v3(){vfunc_called(this, "_ZN8S20472C72v3Ev");}
void  S20472C7 ::v4(){vfunc_called(this, "_ZN8S20472C72v4Ev");}
S20472C7 ::S20472C7(){ note_ctor("S20472C7", this);} // tgen

static void Test_S20472C7()
{
  extern Class_Descriptor cd_S20472C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(58,89)];
    init_test(&cd_S20472C7, buf);
    S20472C7 *dp, &lv = *(dp=new (buf) S20472C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(456,352), "sizeof(S20472C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20472C7)");
    check_base_class_offset(lv, (S20956C5*), ABISELECT(400,308), "S20472C7");
    check_field_offset(lv, s20472c7f0, ABISELECT(8,4), "S20472C7.s20472c7f0");
    check_field_offset(lv, s20472c7f1, ABISELECT(16,12), "S20472C7.s20472c7f1");
    check_field_offset(lv, s20472c7f2, ABISELECT(72,56), "S20472C7.s20472c7f2");
    check_field_offset(lv, s20472c7f3, ABISELECT(80,60), "S20472C7.s20472c7f3");
    check_field_offset(lv, s20472c7f4, ABISELECT(328,256), "S20472C7.s20472c7f4");
    check_field_offset(lv, s20472c7f5, ABISELECT(336,260), "S20472C7.s20472c7f5");
    set_bf_and_test(lv, s20472c7f6, ABISELECT(392,304), 0, 3, 1, "S20472C7");
    set_bf_and_test(lv, s20472c7f6, ABISELECT(392,304), 0, 3, hide_sll(1LL<<2), "S20472C7");
    test_class_info(&lv, &cd_S20472C7);
    dp->~S20472C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20472C7(Test_S20472C7, "S20472C7", ABISELECT(456,352));

#else // __cplusplus

extern void _ZN8S20472C7C1Ev();
extern void _ZN8S20472C7D2Ev();
Name_Map name_map_S20472C7[] = {
  NSPAIR(_ZN8S20472C7C1Ev),
  NSPAIR(_ZN8S20472C7D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20956C5;
extern VTBL_ENTRY _ZTI8S20956C5[];
static Base_Class bases_S20472C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20956C5,    ABISELECT(400,308), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20472C7[];
extern void _ZN8S20472C7D1Ev();
extern void _ZN8S20472C7D0Ev();
extern void _ZN8S20472C72v2Ev();
extern void _ZN8S20472C72v3Ev();
extern void _ZN8S20472C72v4Ev();
static  VTBL_ENTRY vtc_S20472C7[] = {
  ABISELECT(400,308),
  0,
  (VTBL_ENTRY)&(_ZTI8S20472C7[0]),
  (VTBL_ENTRY)&_ZN8S20472C7D1Ev,
  (VTBL_ENTRY)&_ZN8S20472C7D0Ev,
  (VTBL_ENTRY)&_ZN8S20472C72v2Ev,
  (VTBL_ENTRY)&_ZN8S20472C72v3Ev,
  (VTBL_ENTRY)&_ZN8S20472C72v4Ev,
};
extern VTBL_ENTRY _ZTV8S20472C7[];
static  VTT_ENTRY vtt_S20472C7[] = {
  {&(_ZTV8S20472C7[3]),  3,8},
};
extern VTBL_ENTRY _ZTI8S20472C7[];
extern  VTBL_ENTRY _ZTV8S20472C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20472C7[];
Class_Descriptor cd_S20472C7 = {  "S20472C7", // class name
  bases_S20472C7, 1,
  &(vtc_S20472C7[0]), // expected_vtbl_contents
  &(vtt_S20472C7[0]), // expected_vtt_contents
  ABISELECT(456,352), // object size
  NSPAIRA(_ZTI8S20472C7),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S20472C7),8, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20472C7),1, //virtual table table var
  0, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20472C8  : S20472C3 , virtual S20956C5 , virtual S20472C7 , virtual S20472C2 {
  int s20472c8f0;
  ::S20956C14_nt s20472c8f1;
  long double s20472c8f2;
  void *s20472c8f3;
  ::S20472C7 s20472c8f4[2];
  long double s20472c8f5;
  __tsi64 s20472c8f6;
  int s20472c8f7;
  ::S20472C2 s20472c8f8;
  virtual  ~S20472C8(); // _ZN8S20472C8D2Ev
  virtual void  v5(); // _ZN8S20472C82v5Ev
  virtual void  v6(); // _ZN8S20472C82v6Ev
  S20472C8(); // tgen
};
//SIG(-1 S20472C8) C1{ BC2{ BC3{ m FL Fi[4] Fc FL Fp[2]} Fi FC3 FC3 Fi Fp FL[6] Fp} VBC3 VBC4{ VBC3 vd v3 v4 v5 Fi[2] FC3 Fi FC2 Fp FC3 Fc:3} VBC5{ VBC2 VBC3 FC3 Fs Fi FC2 FL[4] FC2} vd v1 v2 Fi FC6{} FD Fp FC4[2] FD FL Fi FC5}


 S20472C8 ::~S20472C8(){ note_dtor("S20472C8", this);}
void  S20472C8 ::v5(){vfunc_called(this, "_ZN8S20472C82v5Ev");}
void  S20472C8 ::v6(){vfunc_called(this, "_ZN8S20472C82v6Ev");}
S20472C8 ::S20472C8(){ note_ctor("S20472C8", this);} // tgen

static void Test_S20472C8()
{
  extern Class_Descriptor cd_S20472C8;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(217,676)];
    init_test(&cd_S20472C8, buf);
    S20472C8 *dp, &lv = *(dp=new (buf) S20472C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(3456,2700), "sizeof(S20472C8)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20472C8)");
    /*is_ambiguous_... S20472C8::S20472C3 */ AMB_check_base_class_offset(lv, (S20956C5*)(S20472C3*), ABISELECT(8,4), "S20472C8");
    /*is_ambiguous_... S20472C8::S20472C3 */ AMB_check_base_class_offset(lv, (S20472C3*), ABISELECT(8,4), "S20472C8");
    /*is_ambiguous_... S20472C8::S20956C5 */ AMB_check_base_class_offset(lv, (S20956C5*), ABISELECT(2152,1672), "S20472C8");
    check_base_class_offset(lv, (S20956C5*)(S20472C7*), ABISELECT(2152,1672), "S20472C8");
    /*is_ambiguous_... S20472C2::S20956C5 */ AMB_check_base_class_offset(lv, (S20956C5*)(S20472C2*), ABISELECT(2152,1672), "S20472C8");
    check_base_class_offset(lv, (S20472C7*), ABISELECT(2208,1716), "S20472C8");
    /*is_ambiguous_... S20472C8::S20472C3 */ AMB_check_base_class_offset(lv, (S20956C5*)(S20472C3*), ABISELECT(3208,2504), "S20472C8");
    check_base_class_offset(lv, (S20472C3*)(S20472C2*), ABISELECT(3208,2504), "S20472C8");
    check_base_class_offset(lv, (S20472C2*), ABISELECT(2608,2024), "S20472C8");
    check_field_offset(lv, s20472c8f0, ABISELECT(256,200), "S20472C8.s20472c8f0");
    check_field_offset(lv, s20472c8f1, ABISELECT(260,204), "S20472C8.s20472c8f1");
    check_field_offset(lv, s20472c8f2, ABISELECT(272,208), "S20472C8.s20472c8f2");
    check_field_offset(lv, s20472c8f3, ABISELECT(288,220), "S20472C8.s20472c8f3");
    check_field_offset(lv, s20472c8f4, ABISELECT(296,224), "S20472C8.s20472c8f4");
    check_field_offset(lv, s20472c8f5, ABISELECT(1216,928), "S20472C8.s20472c8f5");
    check_field_offset(lv, s20472c8f6, ABISELECT(1232,940), "S20472C8.s20472c8f6");
    check_field_offset(lv, s20472c8f7, ABISELECT(1240,948), "S20472C8.s20472c8f7");
    check_field_offset(lv, s20472c8f8, ABISELECT(1248,952), "S20472C8.s20472c8f8");
    test_class_info(&lv, &cd_S20472C8);
    dp->~S20472C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20472C8(Test_S20472C8, "S20472C8", ABISELECT(3456,2700));

#else // __cplusplus

extern void _ZN8S20472C8C1Ev();
extern void _ZN8S20472C8D2Ev();
Name_Map name_map_S20472C8[] = {
  NSPAIR(_ZN8S20472C8C1Ev),
  NSPAIR(_ZN8S20472C8D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20956C5;
extern VTBL_ENTRY _ZTI8S20956C5[];
extern Class_Descriptor cd_S20472C3;
extern VTBL_ENTRY _ZTI8S20472C3[];
extern Class_Descriptor cd_S20956C5;
extern VTBL_ENTRY _ZTI8S20956C5[];
extern Class_Descriptor cd_S20472C7;
extern VTBL_ENTRY _ZTI8S20472C7[];
extern  VTBL_ENTRY _ZTV8S20472C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20472C7[];
extern Class_Descriptor cd_S20956C5;
extern VTBL_ENTRY _ZTI8S20956C5[];
extern Class_Descriptor cd_S20472C3;
extern VTBL_ENTRY _ZTI8S20472C3[];
extern Class_Descriptor cd_S20472C2;
extern VTBL_ENTRY _ZTI8S20472C2[];
extern  VTBL_ENTRY _ZTV8S20472C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20472C2[];
static Base_Class bases_S20472C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20956C5,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S20472C3,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20956C5,    ABISELECT(2152,1672), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20472C7,    ABISELECT(2208,1716), //bcp->offset
    10, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20956C5,    ABISELECT(3208,2504), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S20472C3,    ABISELECT(3208,2504), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S20472C2,    ABISELECT(2608,2024), //bcp->offset
    22, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20472C8[];
extern void _ZN8S20472C8D1Ev();
extern void _ZN8S20472C8D0Ev();
extern void _ZN8S20472C82v5Ev();
extern void _ZN8S20472C82v6Ev();
extern void ABISELECT(_ZTv0_n32_N8S20472C8D1Ev,_ZTv0_n16_N8S20472C8D1Ev)();
extern void ABISELECT(_ZThn2208_N8S20472C8D1Ev,_ZThn1716_N8S20472C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S20472C8D0Ev,_ZTv0_n16_N8S20472C8D0Ev)();
extern void ABISELECT(_ZThn2208_N8S20472C8D0Ev,_ZThn1716_N8S20472C8D0Ev)() __attribute__((weak));
extern void _ZN8S20472C72v2Ev();
extern void _ZN8S20472C72v3Ev();
extern void _ZN8S20472C72v4Ev();
static  VTBL_ENTRY vtc_S20472C8[] = {
  ABISELECT(3208,2504),
  ABISELECT(2608,2024),
  ABISELECT(2208,1716),
  ABISELECT(2152,1672),
  0,
  (VTBL_ENTRY)&(_ZTI8S20472C8[0]),
  (VTBL_ENTRY)&_ZN8S20472C8D1Ev,
  (VTBL_ENTRY)&_ZN8S20472C8D0Ev,
  (VTBL_ENTRY)&_ZN8S20472C82v5Ev,
  (VTBL_ENTRY)&_ZN8S20472C82v6Ev,
  0,
  0,
  0,
  ABISELECT(-2208,-1716),
  ABISELECT(-56,-44),
  ABISELECT(-2208,-1716),
  (VTBL_ENTRY)&(_ZTI8S20472C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20472C8D1Ev,_ZTv0_n16_N8S20472C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20472C8D0Ev,_ZTv0_n16_N8S20472C8D0Ev),
  (VTBL_ENTRY)&_ZN8S20472C72v2Ev,
  (VTBL_ENTRY)&_ZN8S20472C72v3Ev,
  (VTBL_ENTRY)&_ZN8S20472C72v4Ev,
  ABISELECT(-456,-352),
  ABISELECT(600,480),
  ABISELECT(-2608,-2024),
  (VTBL_ENTRY)&(_ZTI8S20472C8[0]),
};
extern VTBL_ENTRY _ZTV8S20472C8[];
extern void _ZN8S20472C7D1Ev();
extern void _ZN8S20472C7D0Ev();
extern void _ZN8S20472C72v2Ev();
extern void _ZN8S20472C72v3Ev();
extern void _ZN8S20472C72v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20472C7__8S20472C8[] = {
  ABISELECT(-56,-44),
  0,
  (VTBL_ENTRY)&(_ZTI8S20472C7[0]),
  (VTBL_ENTRY)&_ZN8S20472C7D1Ev,
  (VTBL_ENTRY)&_ZN8S20472C7D0Ev,
  (VTBL_ENTRY)&_ZN8S20472C72v2Ev,
  (VTBL_ENTRY)&_ZN8S20472C72v3Ev,
  (VTBL_ENTRY)&_ZN8S20472C72v4Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20472C2__8S20472C8[] = {
  ABISELECT(-456,-352),
  ABISELECT(600,480),
  0,
  (VTBL_ENTRY)&(_ZTI8S20472C2[0]),
};
static  VTT_ENTRY vtt_S20472C8[] = {
  {&(_ZTV8S20472C8[6]),  6,26},
  {&(_ZTV8S20472C8[17]),  17,26},
  {&(_ZTV8S20472C8[26]),  26,26},
  {&(_tg__ZTV8S20472C7__8S20472C8[3]),  3,8},
  {&(_tg__ZTV8S20472C2__8S20472C8[4]),  4,4},
};
extern VTBL_ENTRY _ZTI8S20472C8[];
extern  VTBL_ENTRY _ZTV8S20472C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20472C8[];
static VTBL_ENTRY alt_thunk_names24[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20472C8D0Ev,_ZTv0_n16_N8S20472C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2208_N8S20472C8D0Ev,_ZThn1716_N8S20472C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20472C8D1Ev,_ZTv0_n16_N8S20472C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2208_N8S20472C8D1Ev,_ZThn1716_N8S20472C8D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20472C8 = {  "S20472C8", // class name
  bases_S20472C8, 7,
  &(vtc_S20472C8[0]), // expected_vtbl_contents
  &(vtt_S20472C8[0]), // expected_vtt_contents
  ABISELECT(3456,2700), // object size
  NSPAIRA(_ZTI8S20472C8),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S20472C8),26, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20472C8),5, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names24,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20472C5  : S7258C6 , S20472C8 {
  void *s20472c5f0[2];
  ::S20956C10 s20472c5f1;
  long s20472c5f2;
  void *s20472c5f3;
  virtual  ~S20472C5(); // _ZN8S20472C5D2Ev
  S20472C5(); // tgen
};
//SIG(-1 S20472C5) C1{ BC2{ m Fi FC3{ VBC4{ m FL Fi[4] Fc FL Fp[2]} vd v6 v7 v8 Fi[2] FC4 Fi FC5{ BC4 Fi FC4 FC4 Fi Fp FL[6] Fp} Fp FC4 Fc:3}[2] Fc} BC6{ BC7{ BC4 Fi FC4 FC4 Fi Fp FL[6] Fp} VBC4 VBC8{ VBC4 vd v1 v2 v3 Fi[2] FC4 Fi FC7 Fp FC4 Fc:3} VBC9{ VBC7 VBC4 FC4 Fs Fi FC7 FL[4] FC7} vd v4 v5 Fi FC10{} FD Fp FC8[2] FD FL Fi FC9} vd Fp[2] FU11{ m Fp FL Fi Fc Fi FL Fl FL Fs Fp FD Fc[6]} Fl Fp}


 S20472C5 ::~S20472C5(){ note_dtor("S20472C5", this);}
S20472C5 ::S20472C5(){ note_ctor("S20472C5", this);} // tgen

static void Test_S20472C5()
{
  extern Class_Descriptor cd_S20472C5;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(279,861)];
    init_test(&cd_S20472C5, buf);
    S20472C5 *dp, &lv = *(dp=new (buf) S20472C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(4448,3440), "sizeof(S20472C5)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20472C5)");
    check_base_class_offset(lv, (S7258C6*), ABISELECT(2152,1672), "S20472C5");
    /*is_ambiguous_... S20472C8::S20472C3 */ AMB_check_base_class_offset(lv, (S20956C5*)(S20472C3*)(S20472C8*), ABISELECT(8,4), "S20472C5");
    /*is_ambiguous_... S20472C8::S20472C3 */ AMB_check_base_class_offset(lv, (S20472C3*)(S20472C8*), ABISELECT(8,4), "S20472C5");
    /*is_ambiguous_... S20472C8::S20956C5 */ AMB_check_base_class_offset(lv, (S20956C5*)(S20472C8*), ABISELECT(3136,2412), "S20472C5");
    check_base_class_offset(lv, (S20956C5*)(S20472C7*), ABISELECT(3136,2412), "S20472C5");
    /*is_ambiguous_... S20472C2::S20956C5 */ AMB_check_base_class_offset(lv, (S20956C5*)(S20472C2*), ABISELECT(3136,2412), "S20472C5");
    check_base_class_offset(lv, (S20472C7*)(S20472C8*), ABISELECT(3192,2456), "S20472C5");
    /*is_ambiguous_... S20472C5::S20472C3 */ AMB_check_base_class_offset(lv, (S20956C5*)(S20472C3*), ABISELECT(4192,3244), "S20472C5");
    check_base_class_offset(lv, (S20472C3*)(S20472C2*), ABISELECT(4192,3244), "S20472C5");
    check_base_class_offset(lv, (S20472C2*)(S20472C8*), ABISELECT(3592,2764), "S20472C5");
    check_base_class_offset(lv, (S20472C8*), 0, "S20472C5");
    check_field_offset(lv, s20472c5f0, ABISELECT(3080,2384), "S20472C5.s20472c5f0");
    check_field_offset(lv, s20472c5f1, ABISELECT(3104,2392), "S20472C5.s20472c5f1");
    check_field_offset(lv, s20472c5f2, ABISELECT(3120,2404), "S20472C5.s20472c5f2");
    check_field_offset(lv, s20472c5f3, ABISELECT(3128,2408), "S20472C5.s20472c5f3");
    test_class_info(&lv, &cd_S20472C5);
    dp->~S20472C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20472C5(Test_S20472C5, "S20472C5", ABISELECT(4448,3440));

#else // __cplusplus

extern void _ZN8S20472C5C1Ev();
extern void _ZN8S20472C5D2Ev();
Name_Map name_map_S20472C5[] = {
  NSPAIR(_ZN8S20472C5C1Ev),
  NSPAIR(_ZN8S20472C5D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7258C6;
extern VTBL_ENTRY _ZTI7S7258C6[];
extern Class_Descriptor cd_S20956C5;
extern VTBL_ENTRY _ZTI8S20956C5[];
extern Class_Descriptor cd_S20472C3;
extern VTBL_ENTRY _ZTI8S20472C3[];
extern Class_Descriptor cd_S20956C5;
extern VTBL_ENTRY _ZTI8S20956C5[];
extern Class_Descriptor cd_S20472C7;
extern VTBL_ENTRY _ZTI8S20472C7[];
extern  VTBL_ENTRY _ZTV8S20472C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20472C7[];
extern Class_Descriptor cd_S20956C5;
extern VTBL_ENTRY _ZTI8S20956C5[];
extern Class_Descriptor cd_S20472C3;
extern VTBL_ENTRY _ZTI8S20472C3[];
extern Class_Descriptor cd_S20472C2;
extern VTBL_ENTRY _ZTI8S20472C2[];
extern  VTBL_ENTRY _ZTV8S20472C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20472C2[];
extern Class_Descriptor cd_S20472C8;
extern VTBL_ENTRY _ZTI8S20472C8[];
extern  VTBL_ENTRY _ZTV8S20472C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20472C8[];
static Base_Class bases_S20472C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7258C6,    ABISELECT(2152,1672), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20956C5,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S20472C3,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S20956C5,    ABISELECT(3136,2412), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S20472C7,    ABISELECT(3192,2456), //bcp->offset
    10, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S20956C5,    ABISELECT(4192,3244), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S20472C3,    ABISELECT(4192,3244), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S20472C2,    ABISELECT(3592,2764), //bcp->offset
    22, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S20472C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20472C5[];
extern void _ZN8S20472C5D1Ev();
extern void _ZN8S20472C5D0Ev();
extern void _ZN8S20472C82v5Ev();
extern void _ZN8S20472C82v6Ev();
extern void ABISELECT(_ZTv0_n32_N8S20472C5D1Ev,_ZTv0_n16_N8S20472C5D1Ev)();
extern void ABISELECT(_ZThn3192_N8S20472C5D1Ev,_ZThn2456_N8S20472C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S20472C5D0Ev,_ZTv0_n16_N8S20472C5D0Ev)();
extern void ABISELECT(_ZThn3192_N8S20472C5D0Ev,_ZThn2456_N8S20472C5D0Ev)() __attribute__((weak));
extern void _ZN8S20472C72v2Ev();
extern void _ZN8S20472C72v3Ev();
extern void _ZN8S20472C72v4Ev();
static  VTBL_ENTRY vtc_S20472C5[] = {
  ABISELECT(4192,3244),
  ABISELECT(3592,2764),
  ABISELECT(3192,2456),
  ABISELECT(3136,2412),
  0,
  (VTBL_ENTRY)&(_ZTI8S20472C5[0]),
  (VTBL_ENTRY)&_ZN8S20472C5D1Ev,
  (VTBL_ENTRY)&_ZN8S20472C5D0Ev,
  (VTBL_ENTRY)&_ZN8S20472C82v5Ev,
  (VTBL_ENTRY)&_ZN8S20472C82v6Ev,
  0,
  0,
  0,
  ABISELECT(-3192,-2456),
  ABISELECT(-56,-44),
  ABISELECT(-3192,-2456),
  (VTBL_ENTRY)&(_ZTI8S20472C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20472C5D1Ev,_ZTv0_n16_N8S20472C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20472C5D0Ev,_ZTv0_n16_N8S20472C5D0Ev),
  (VTBL_ENTRY)&_ZN8S20472C72v2Ev,
  (VTBL_ENTRY)&_ZN8S20472C72v3Ev,
  (VTBL_ENTRY)&_ZN8S20472C72v4Ev,
  ABISELECT(-456,-352),
  ABISELECT(600,480),
  ABISELECT(-3592,-2764),
  (VTBL_ENTRY)&(_ZTI8S20472C5[0]),
};
extern VTBL_ENTRY _ZTV8S20472C5[];
extern void _ZN8S20472C8D1Ev();
extern void _ZN8S20472C8D0Ev();
extern void _ZN8S20472C82v5Ev();
extern void _ZN8S20472C82v6Ev();
static  VTBL_ENTRY _tg__ZTV8S20472C8__8S20472C5[] = {
  ABISELECT(4192,3244),
  ABISELECT(3592,2764),
  ABISELECT(3192,2456),
  ABISELECT(3136,2412),
  0,
  (VTBL_ENTRY)&(_ZTI8S20472C8[0]),
  (VTBL_ENTRY)&_ZN8S20472C8D1Ev,
  (VTBL_ENTRY)&_ZN8S20472C8D0Ev,
  (VTBL_ENTRY)&_ZN8S20472C82v5Ev,
  (VTBL_ENTRY)&_ZN8S20472C82v6Ev,
};
extern void ABISELECT(_ZTv0_n32_N8S20472C8D1Ev,_ZTv0_n16_N8S20472C8D1Ev)();
extern void ABISELECT(_ZThn3192_N8S20472C8D1Ev,_ZThn2456_N8S20472C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S20472C8D0Ev,_ZTv0_n16_N8S20472C8D0Ev)();
extern void ABISELECT(_ZThn3192_N8S20472C8D0Ev,_ZThn2456_N8S20472C8D0Ev)() __attribute__((weak));
extern void _ZN8S20472C72v2Ev();
extern void _ZN8S20472C72v3Ev();
extern void _ZN8S20472C72v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20472C7__8S20472C8__8S20472C5[] = {
  0,
  0,
  0,
  ABISELECT(-3192,-2456),
  ABISELECT(-56,-44),
  ABISELECT(-3192,-2456),
  (VTBL_ENTRY)&(_ZTI8S20472C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20472C8D1Ev,_ZTv0_n16_N8S20472C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20472C8D0Ev,_ZTv0_n16_N8S20472C8D0Ev),
  (VTBL_ENTRY)&_ZN8S20472C72v2Ev,
  (VTBL_ENTRY)&_ZN8S20472C72v3Ev,
  (VTBL_ENTRY)&_ZN8S20472C72v4Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20472C2__8S20472C8__8S20472C5[] = {
  ABISELECT(-456,-352),
  ABISELECT(600,480),
  ABISELECT(-3592,-2764),
  (VTBL_ENTRY)&(_ZTI8S20472C8[0]),
};
extern void _ZN8S20472C7D1Ev();
extern void _ZN8S20472C7D0Ev();
extern void _ZN8S20472C72v2Ev();
extern void _ZN8S20472C72v3Ev();
extern void _ZN8S20472C72v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20472C7__8S20472C5[] = {
  ABISELECT(-56,-44),
  0,
  (VTBL_ENTRY)&(_ZTI8S20472C7[0]),
  (VTBL_ENTRY)&_ZN8S20472C7D1Ev,
  (VTBL_ENTRY)&_ZN8S20472C7D0Ev,
  (VTBL_ENTRY)&_ZN8S20472C72v2Ev,
  (VTBL_ENTRY)&_ZN8S20472C72v3Ev,
  (VTBL_ENTRY)&_ZN8S20472C72v4Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20472C2__8S20472C5[] = {
  ABISELECT(-456,-352),
  ABISELECT(600,480),
  0,
  (VTBL_ENTRY)&(_ZTI8S20472C2[0]),
};
static  VTT_ENTRY vtt_S20472C5[] = {
  {&(_ZTV8S20472C5[6]),  6,26},
  {&(_tg__ZTV8S20472C8__8S20472C5[6]),  6,10},
  {&(_tg__ZTV8S20472C7__8S20472C8__8S20472C5[7]),  7,12},
  {&(_tg__ZTV8S20472C2__8S20472C8__8S20472C5[4]),  4,4},
  {&(_ZTV8S20472C5[17]),  17,26},
  {&(_ZTV8S20472C5[26]),  26,26},
  {&(_tg__ZTV8S20472C7__8S20472C5[3]),  3,8},
  {&(_tg__ZTV8S20472C2__8S20472C5[4]),  4,4},
};
extern VTBL_ENTRY _ZTI8S20472C5[];
extern  VTBL_ENTRY _ZTV8S20472C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20472C5[];
static VTBL_ENTRY alt_thunk_names25[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20472C8D0Ev,_ZTv0_n16_N8S20472C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3192_N8S20472C8D0Ev,_ZThn2456_N8S20472C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20472C8D1Ev,_ZTv0_n16_N8S20472C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3192_N8S20472C8D1Ev,_ZThn2456_N8S20472C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20472C5D0Ev,_ZTv0_n16_N8S20472C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3192_N8S20472C5D0Ev,_ZThn2456_N8S20472C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20472C5D1Ev,_ZTv0_n16_N8S20472C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3192_N8S20472C5D1Ev,_ZThn2456_N8S20472C5D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20472C5 = {  "S20472C5", // class name
  bases_S20472C5, 9,
  &(vtc_S20472C5[0]), // expected_vtbl_contents
  &(vtt_S20472C5[0]), // expected_vtt_contents
  ABISELECT(4448,3440), // object size
  NSPAIRA(_ZTI8S20472C5),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20472C5),26, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20472C5),8, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names25,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20472C13  : virtual S20472C2 , S20472C3 {
  int s20472c13f0[2];
  ::S20472C3 s20472c13f1;
  ::S20472C3 s20472c13f2[5];
  ::S20956C6 s20472c13f3;
  int s20472c13f4;
  ~S20472C13(); // tgen
  S20472C13(); // tgen
};
//SIG(-1 S20472C13) C1{ VBC2{ VBC3{ BC4{ m FL Fi[4] Fc FL Fp[2]} Fi FC4 FC4 Fi Fp FL[6] Fp} VBC4 FC4 Fs Fi FC3 FL[4] FC3} BC3 Fi[2] FC3 FC3[5] FU5{ m Fi[8] Fp FL Fc Fp[5] FD Fc[7] Fp Fc:1 Fi} Fi}


S20472C13 ::~S20472C13(){ note_dtor("S20472C13", this);} // tgen
S20472C13 ::S20472C13(){ note_ctor("S20472C13", this);} // tgen

static void Test_S20472C13()
{
  extern Class_Descriptor cd_S20472C13;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(171,536)];
    init_test(&cd_S20472C13, buf);
    S20472C13 *dp, &lv = *(dp=new (buf) S20472C13());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(2720,2140), "sizeof(S20472C13)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20472C13)");
    /*is_ambiguous_... S20472C13::S20472C3 */ AMB_check_base_class_offset(lv, (S20956C5*)(S20472C3*), ABISELECT(2416,1900), "S20472C13");
    check_base_class_offset(lv, (S20472C3*)(S20472C2*), ABISELECT(2416,1900), "S20472C13");
    /*is_ambiguous_... S20472C2::S20956C5 */ AMB_check_base_class_offset(lv, (S20956C5*)(S20472C2*), ABISELECT(2664,2096), "S20472C13");
    check_base_class_offset(lv, (S20472C2*), ABISELECT(1816,1420), "S20472C13");
    /*is_ambiguous_... S20472C13::S20472C3 */ AMB_check_base_class_offset(lv, (S20956C5*)(S20472C3*), ABISELECT(8,4), "S20472C13");
    /*is_ambiguous_... S20472C13::S20472C3 */ AMB_check_base_class_offset(lv, (S20472C3*), ABISELECT(8,4), "S20472C13");
    check_field_offset(lv, s20472c13f0, ABISELECT(256,200), "S20472C13.s20472c13f0");
    check_field_offset(lv, s20472c13f1, ABISELECT(264,208), "S20472C13.s20472c13f1");
    check_field_offset(lv, s20472c13f2, ABISELECT(512,404), "S20472C13.s20472c13f2");
    check_field_offset(lv, s20472c13f3, ABISELECT(1760,1384), "S20472C13.s20472c13f3");
    check_field_offset(lv, s20472c13f4, ABISELECT(1808,1416), "S20472C13.s20472c13f4");
    test_class_info(&lv, &cd_S20472C13);
    dp->~S20472C13();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20472C13(Test_S20472C13, "S20472C13", ABISELECT(2720,2140));

#else // __cplusplus

extern void _ZN9S20472C13C1Ev();
extern void _ZN9S20472C13D1Ev();
Name_Map name_map_S20472C13[] = {
  NSPAIR(_ZN9S20472C13C1Ev),
  NSPAIR(_ZN9S20472C13D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20956C5;
extern VTBL_ENTRY _ZTI8S20956C5[];
extern Class_Descriptor cd_S20472C3;
extern VTBL_ENTRY _ZTI8S20472C3[];
extern Class_Descriptor cd_S20956C5;
extern VTBL_ENTRY _ZTI8S20956C5[];
extern Class_Descriptor cd_S20472C2;
extern VTBL_ENTRY _ZTI8S20472C2[];
extern  VTBL_ENTRY _ZTV8S20472C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20472C2[];
extern Class_Descriptor cd_S20956C5;
extern VTBL_ENTRY _ZTI8S20956C5[];
extern Class_Descriptor cd_S20472C3;
extern VTBL_ENTRY _ZTI8S20472C3[];
static Base_Class bases_S20472C13[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20956C5,    ABISELECT(2416,1900), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S20472C3,    ABISELECT(2416,1900), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S20956C5,    ABISELECT(2664,2096), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S20472C2,    ABISELECT(1816,1420), //bcp->offset
    5, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20956C5,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S20472C3,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S20472C13[];
static  VTBL_ENTRY vtc_S20472C13[] = {
  ABISELECT(2664,2096),
  ABISELECT(2416,1900),
  ABISELECT(1816,1420),
  0,
  (VTBL_ENTRY)&(_ZTI9S20472C13[0]),
  ABISELECT(848,676),
  ABISELECT(600,480),
  ABISELECT(-1816,-1420),
  (VTBL_ENTRY)&(_ZTI9S20472C13[0]),
};
extern VTBL_ENTRY _ZTV9S20472C13[];
static  VTBL_ENTRY _tg__ZTV8S20472C2__9S20472C13[] = {
  ABISELECT(848,676),
  ABISELECT(600,480),
  0,
  (VTBL_ENTRY)&(_ZTI8S20472C2[0]),
};
static  VTT_ENTRY vtt_S20472C13[] = {
  {&(_ZTV9S20472C13[5]),  5,9},
  {&(_ZTV9S20472C13[9]),  9,9},
  {&(_tg__ZTV8S20472C2__9S20472C13[4]),  4,4},
};
extern VTBL_ENTRY _ZTI9S20472C13[];
extern  VTBL_ENTRY _ZTV9S20472C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20472C13[];
Class_Descriptor cd_S20472C13 = {  "S20472C13", // class name
  bases_S20472C13, 6,
  &(vtc_S20472C13[0]), // expected_vtbl_contents
  &(vtt_S20472C13[0]), // expected_vtt_contents
  ABISELECT(2720,2140), // object size
  NSPAIRA(_ZTI9S20472C13),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV9S20472C13),9, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20472C13),3, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20472C12  : S20472C3 , virtual S20472C13 {
  ::S20472C13 s20472c12f0;
  ~S20472C12(); // tgen
  S20472C12(); // tgen
};
//SIG(-1 S20472C12) C1{ BC2{ BC3{ m FL Fi[4] Fc FL Fp[2]} Fi FC3 FC3 Fi Fp FL[6] Fp} VBC4{ VBC5{ VBC2 VBC3 FC3 Fs Fi FC2 FL[4] FC2} BC2 Fi[2] FC2 FC2[5] FU6{ m Fi[8] Fp FL Fc Fp[5] FD Fc[7] Fp Fc:1 Fi} Fi} FC4}


S20472C12 ::~S20472C12(){ note_dtor("S20472C12", this);} // tgen
S20472C12 ::S20472C12(){ note_ctor("S20472C12", this);} // tgen

static void Test_S20472C12()
{
  extern Class_Descriptor cd_S20472C12;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(357,1121)];
    init_test(&cd_S20472C12, buf);
    S20472C12 *dp, &lv = *(dp=new (buf) S20472C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(5696,4480), "sizeof(S20472C12)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20472C12)");
    /*is_ambiguous_... S20472C12::S20472C3 */ AMB_check_base_class_offset(lv, (S20956C5*)(S20472C3*), ABISELECT(8,4), "S20472C12");
    /*is_ambiguous_... S20472C12::S20472C3 */ AMB_check_base_class_offset(lv, (S20472C3*), ABISELECT(8,4), "S20472C12");
    /*is_ambiguous_... S20472C12::S20472C3 */ AMB_check_base_class_offset(lv, (S20956C5*)(S20472C3*), ABISELECT(5392,4240), "S20472C12");
    check_base_class_offset(lv, (S20472C3*)(S20472C2*), ABISELECT(5392,4240), "S20472C12");
    /*is_ambiguous_... S20472C2::S20956C5 */ AMB_check_base_class_offset(lv, (S20956C5*)(S20472C2*), ABISELECT(5640,4436), "S20472C12");
    check_base_class_offset(lv, (S20472C2*)(S20472C13*), ABISELECT(4792,3760), "S20472C12");
    /*is_ambiguous_... S20472C13::S20472C3 */ AMB_check_base_class_offset(lv, (S20956C5*)(S20472C3*)(S20472C13*), ABISELECT(2984,2344), "S20472C12");
    /*is_ambiguous_... S20472C13::S20472C3 */ AMB_check_base_class_offset(lv, (S20472C3*)(S20472C13*), ABISELECT(2984,2344), "S20472C12");
    check_base_class_offset(lv, (S20472C13*), ABISELECT(2976,2340), "S20472C12");
    check_field_offset(lv, s20472c12f0, ABISELECT(256,200), "S20472C12.s20472c12f0");
    test_class_info(&lv, &cd_S20472C12);
    dp->~S20472C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20472C12(Test_S20472C12, "S20472C12", ABISELECT(5696,4480));

#else // __cplusplus

extern void _ZN9S20472C12C1Ev();
extern void _ZN9S20472C12D1Ev();
Name_Map name_map_S20472C12[] = {
  NSPAIR(_ZN9S20472C12C1Ev),
  NSPAIR(_ZN9S20472C12D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20956C5;
extern VTBL_ENTRY _ZTI8S20956C5[];
extern Class_Descriptor cd_S20472C3;
extern VTBL_ENTRY _ZTI8S20472C3[];
extern Class_Descriptor cd_S20956C5;
extern VTBL_ENTRY _ZTI8S20956C5[];
extern Class_Descriptor cd_S20472C3;
extern VTBL_ENTRY _ZTI8S20472C3[];
extern Class_Descriptor cd_S20956C5;
extern VTBL_ENTRY _ZTI8S20956C5[];
extern Class_Descriptor cd_S20472C2;
extern VTBL_ENTRY _ZTI8S20472C2[];
extern  VTBL_ENTRY _ZTV8S20472C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20472C2[];
extern Class_Descriptor cd_S20956C5;
extern VTBL_ENTRY _ZTI8S20956C5[];
extern Class_Descriptor cd_S20472C3;
extern VTBL_ENTRY _ZTI8S20472C3[];
extern Class_Descriptor cd_S20472C13;
extern VTBL_ENTRY _ZTI9S20472C13[];
extern  VTBL_ENTRY _ZTV9S20472C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20472C13[];
static Base_Class bases_S20472C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20956C5,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S20472C3,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20956C5,    ABISELECT(5392,4240), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S20472C3,    ABISELECT(5392,4240), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S20956C5,    ABISELECT(5640,4436), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S20472C2,    ABISELECT(4792,3760), //bcp->offset
    11, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S20956C5,    ABISELECT(2984,2344), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S20472C3,    ABISELECT(2984,2344), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S20472C13,    ABISELECT(2976,2340), //bcp->offset
    6, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S20472C12[];
static  VTBL_ENTRY vtc_S20472C12[] = {
  ABISELECT(5640,4436),
  ABISELECT(5392,4240),
  ABISELECT(4792,3760),
  ABISELECT(2976,2340),
  0,
  (VTBL_ENTRY)&(_ZTI9S20472C12[0]),
  ABISELECT(2664,2096),
  ABISELECT(2416,1900),
  ABISELECT(1816,1420),
  ABISELECT(-2976,-2340),
  (VTBL_ENTRY)&(_ZTI9S20472C12[0]),
  ABISELECT(848,676),
  ABISELECT(600,480),
  ABISELECT(-4792,-3760),
  (VTBL_ENTRY)&(_ZTI9S20472C12[0]),
};
extern VTBL_ENTRY _ZTV9S20472C12[];
static  VTBL_ENTRY _tg__ZTV9S20472C13__9S20472C12[] = {
  ABISELECT(2664,2096),
  ABISELECT(2416,1900),
  ABISELECT(1816,1420),
  0,
  (VTBL_ENTRY)&(_ZTI9S20472C13[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20472C2__9S20472C13__9S20472C12[] = {
  ABISELECT(848,676),
  ABISELECT(600,480),
  ABISELECT(-1816,-1420),
  (VTBL_ENTRY)&(_ZTI9S20472C13[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20472C2__9S20472C12[] = {
  ABISELECT(848,676),
  ABISELECT(600,480),
  0,
  (VTBL_ENTRY)&(_ZTI8S20472C2[0]),
};
static  VTT_ENTRY vtt_S20472C12[] = {
  {&(_ZTV9S20472C12[6]),  6,15},
  {&(_ZTV9S20472C12[11]),  11,15},
  {&(_ZTV9S20472C12[15]),  15,15},
  {&(_tg__ZTV9S20472C13__9S20472C12[5]),  5,5},
  {&(_tg__ZTV8S20472C2__9S20472C13__9S20472C12[4]),  4,4},
  {&(_tg__ZTV8S20472C2__9S20472C12[4]),  4,4},
};
extern VTBL_ENTRY _ZTI9S20472C12[];
extern  VTBL_ENTRY _ZTV9S20472C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20472C12[];
Class_Descriptor cd_S20472C12 = {  "S20472C12", // class name
  bases_S20472C12, 9,
  &(vtc_S20472C12[0]), // expected_vtbl_contents
  &(vtt_S20472C12[0]), // expected_vtt_contents
  ABISELECT(5696,4480), // object size
  NSPAIRA(_ZTI9S20472C12),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV9S20472C12),15, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20472C12),6, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20472C11  : virtual S20472C12 {
  int s20472c11f0;
  ::S20472C7 s20472c11f1[2];
  ::S20956C10 s20472c11f2[8];
  ~S20472C11(); // tgen
  S20472C11(); // tgen
};
//SIG(-1 S20472C11) C1{ VBC2{ BC3{ BC4{ m FL Fi[4] Fc FL Fp[2]} Fi FC4 FC4 Fi Fp FL[6] Fp} VBC5{ VBC6{ VBC3 VBC4 FC4 Fs Fi FC3 FL[4] FC3} BC3 Fi[2] FC3 FC3[5] FU7{ m Fi[8] Fp FL Fc Fp[5] FD Fc[7] Fp Fc:1 Fi} Fi} FC5} Fi FC8{ VBC4 vd v1 v2 v3 Fi[2] FC4 Fi FC3 Fp FC4 Fc:3}[2] FU9{ m Fp FL Fi Fc Fi FL Fl FL Fs Fp FD Fc[6]}[8]}


S20472C11 ::~S20472C11(){ note_dtor("S20472C11", this);} // tgen
S20472C11 ::S20472C11(){ note_ctor("S20472C11", this);} // tgen

static void Test_S20472C11()
{
  extern Class_Descriptor cd_S20472C11;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(423,1323)];
    init_test(&cd_S20472C11, buf);
    S20472C11 *dp, &lv = *(dp=new (buf) S20472C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(6752,5288), "sizeof(S20472C11)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20472C11)");
    /*is_ambiguous_... S20472C12::S20472C3 */ AMB_check_base_class_offset(lv, (S20956C5*)(S20472C3*)(S20472C12*), ABISELECT(1064,812), "S20472C11");
    /*is_ambiguous_... S20472C12::S20472C3 */ AMB_check_base_class_offset(lv, (S20472C3*)(S20472C12*), ABISELECT(1064,812), "S20472C11");
    /*is_ambiguous_... S20472C11::S20472C3 */ AMB_check_base_class_offset(lv, (S20956C5*)(S20472C3*), ABISELECT(6448,5048), "S20472C11");
    check_base_class_offset(lv, (S20472C3*)(S20472C2*), ABISELECT(6448,5048), "S20472C11");
    /*is_ambiguous_... S20472C2::S20956C5 */ AMB_check_base_class_offset(lv, (S20956C5*)(S20472C2*), ABISELECT(6696,5244), "S20472C11");
    check_base_class_offset(lv, (S20472C2*)(S20472C13*), ABISELECT(5848,4568), "S20472C11");
    /*is_ambiguous_... S20472C13::S20472C3 */ AMB_check_base_class_offset(lv, (S20956C5*)(S20472C3*)(S20472C13*), ABISELECT(4040,3152), "S20472C11");
    /*is_ambiguous_... S20472C13::S20472C3 */ AMB_check_base_class_offset(lv, (S20472C3*)(S20472C13*), ABISELECT(4040,3152), "S20472C11");
    check_base_class_offset(lv, (S20472C13*)(S20472C12*), ABISELECT(4032,3148), "S20472C11");
    check_base_class_offset(lv, (S20472C12*), ABISELECT(1056,808), "S20472C11");
    check_field_offset(lv, s20472c11f0, ABISELECT(8,4), "S20472C11.s20472c11f0");
    check_field_offset(lv, s20472c11f1, ABISELECT(16,8), "S20472C11.s20472c11f1");
    check_field_offset(lv, s20472c11f2, ABISELECT(928,712), "S20472C11.s20472c11f2");
    test_class_info(&lv, &cd_S20472C11);
    dp->~S20472C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20472C11(Test_S20472C11, "S20472C11", ABISELECT(6752,5288));

#else // __cplusplus

extern void _ZN9S20472C11C1Ev();
extern void _ZN9S20472C11D1Ev();
Name_Map name_map_S20472C11[] = {
  NSPAIR(_ZN9S20472C11C1Ev),
  NSPAIR(_ZN9S20472C11D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20956C5;
extern VTBL_ENTRY _ZTI8S20956C5[];
extern Class_Descriptor cd_S20472C3;
extern VTBL_ENTRY _ZTI8S20472C3[];
extern Class_Descriptor cd_S20956C5;
extern VTBL_ENTRY _ZTI8S20956C5[];
extern Class_Descriptor cd_S20472C3;
extern VTBL_ENTRY _ZTI8S20472C3[];
extern Class_Descriptor cd_S20956C5;
extern VTBL_ENTRY _ZTI8S20956C5[];
extern Class_Descriptor cd_S20472C2;
extern VTBL_ENTRY _ZTI8S20472C2[];
extern  VTBL_ENTRY _ZTV8S20472C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20472C2[];
extern Class_Descriptor cd_S20956C5;
extern VTBL_ENTRY _ZTI8S20956C5[];
extern Class_Descriptor cd_S20472C3;
extern VTBL_ENTRY _ZTI8S20472C3[];
extern Class_Descriptor cd_S20472C13;
extern VTBL_ENTRY _ZTI9S20472C13[];
extern  VTBL_ENTRY _ZTV9S20472C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20472C13[];
extern Class_Descriptor cd_S20472C12;
extern VTBL_ENTRY _ZTI9S20472C12[];
extern  VTBL_ENTRY _ZTV9S20472C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20472C12[];
static Base_Class bases_S20472C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20956C5,    ABISELECT(1064,812), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S20472C3,    ABISELECT(1064,812), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S20956C5,    ABISELECT(6448,5048), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S20472C3,    ABISELECT(6448,5048), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S20956C5,    ABISELECT(6696,5244), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S20472C2,    ABISELECT(5848,4568), //bcp->offset
    18, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S20956C5,    ABISELECT(4040,3152), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S20472C3,    ABISELECT(4040,3152), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S20472C13,    ABISELECT(4032,3148), //bcp->offset
    13, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S20472C12,    ABISELECT(1056,808), //bcp->offset
    7, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S20472C11[];
static  VTBL_ENTRY vtc_S20472C11[] = {
  ABISELECT(6696,5244),
  ABISELECT(6448,5048),
  ABISELECT(5848,4568),
  ABISELECT(4032,3148),
  ABISELECT(1056,808),
  0,
  (VTBL_ENTRY)&(_ZTI9S20472C11[0]),
  ABISELECT(5640,4436),
  ABISELECT(5392,4240),
  ABISELECT(4792,3760),
  ABISELECT(2976,2340),
  ABISELECT(-1056,-808),
  (VTBL_ENTRY)&(_ZTI9S20472C11[0]),
  ABISELECT(2664,2096),
  ABISELECT(2416,1900),
  ABISELECT(1816,1420),
  ABISELECT(-4032,-3148),
  (VTBL_ENTRY)&(_ZTI9S20472C11[0]),
  ABISELECT(848,676),
  ABISELECT(600,480),
  ABISELECT(-5848,-4568),
  (VTBL_ENTRY)&(_ZTI9S20472C11[0]),
};
extern VTBL_ENTRY _ZTV9S20472C11[];
static  VTBL_ENTRY _tg__ZTV9S20472C12__9S20472C11[] = {
  ABISELECT(5640,4436),
  ABISELECT(5392,4240),
  ABISELECT(4792,3760),
  ABISELECT(2976,2340),
  0,
  (VTBL_ENTRY)&(_ZTI9S20472C12[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20472C13__9S20472C12__9S20472C11[] = {
  ABISELECT(2664,2096),
  ABISELECT(2416,1900),
  ABISELECT(1816,1420),
  ABISELECT(-2976,-2340),
  (VTBL_ENTRY)&(_ZTI9S20472C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20472C2__9S20472C12__9S20472C11[] = {
  ABISELECT(848,676),
  ABISELECT(600,480),
  ABISELECT(-4792,-3760),
  (VTBL_ENTRY)&(_ZTI9S20472C12[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20472C13__9S20472C11[] = {
  ABISELECT(2664,2096),
  ABISELECT(2416,1900),
  ABISELECT(1816,1420),
  0,
  (VTBL_ENTRY)&(_ZTI9S20472C13[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20472C2__9S20472C13__9S20472C11[] = {
  ABISELECT(848,676),
  ABISELECT(600,480),
  ABISELECT(-1816,-1420),
  (VTBL_ENTRY)&(_ZTI9S20472C13[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20472C2__9S20472C11[] = {
  ABISELECT(848,676),
  ABISELECT(600,480),
  0,
  (VTBL_ENTRY)&(_ZTI8S20472C2[0]),
};
static  VTT_ENTRY vtt_S20472C11[] = {
  {&(_ZTV9S20472C11[7]),  7,22},
  {&(_ZTV9S20472C11[13]),  13,22},
  {&(_ZTV9S20472C11[18]),  18,22},
  {&(_ZTV9S20472C11[22]),  22,22},
  {&(_tg__ZTV9S20472C12__9S20472C11[6]),  6,6},
  {&(_tg__ZTV9S20472C13__9S20472C12__9S20472C11[5]),  5,5},
  {&(_tg__ZTV8S20472C2__9S20472C12__9S20472C11[4]),  4,4},
  {&(_tg__ZTV9S20472C13__9S20472C11[5]),  5,5},
  {&(_tg__ZTV8S20472C2__9S20472C13__9S20472C11[4]),  4,4},
  {&(_tg__ZTV8S20472C2__9S20472C11[4]),  4,4},
};
extern VTBL_ENTRY _ZTI9S20472C11[];
extern  VTBL_ENTRY _ZTV9S20472C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20472C11[];
Class_Descriptor cd_S20472C11 = {  "S20472C11", // class name
  bases_S20472C11, 10,
  &(vtc_S20472C11[0]), // expected_vtbl_contents
  &(vtt_S20472C11[0]), // expected_vtt_contents
  ABISELECT(6752,5288), // object size
  NSPAIRA(_ZTI9S20472C11),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV9S20472C11),22, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20472C11),10, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20472C1  : virtual S20472C2 , virtual S20472C5 , S20472C11 {
  ::S20956C14_nt s20472c1f0;
  ::S20472C7 s20472c1f1[2];
  __tsi64 s20472c1f2;
  void *s20472c1f3;
  __tsi64 s20472c1f4;
  ::S20956C18 s20472c1f5;
  __tsi64 s20472c1f6;
  virtual  ~S20472C1(); // _ZN8S20472C1D2Ev
  virtual void  v1(); // _ZN8S20472C12v1Ev
  S20472C1(); // tgen
};
//SIG(1 S20472C1) C1{ VBC2{ VBC3{ BC4{ m FL Fi[4] Fc FL Fp[2]} Fi FC4 FC4 Fi Fp FL[6] Fp} VBC4 FC4 Fs Fi FC3 FL[4] FC3} VBC5{ BC6{ m Fi FC7{ VBC4 vd v7 v8 v9 Fi[2] FC4 Fi FC8{ BC4 Fi FC4 FC4 Fi Fp FL[6] Fp} Fp FC4 Fc:3}[2] Fc} BC9{ BC3 VBC4 VBC10{ VBC4 vd v2 v3 v4 Fi[2] FC4 Fi FC3 Fp FC4 Fc:3} VBC2 vd v5 v6 Fi FC11{} FD Fp FC10[2] FD FL Fi FC2} vd Fp[2] FU12{ m Fp FL Fi Fc Fi FL Fl FL Fs Fp FD Fc[6]} Fl Fp} BC13{ VBC14{ BC3 VBC15{ VBC2 BC3 Fi[2] FC3 FC3[5] FU16{ m Fi[8] Fp FL Fc Fp[5] FD Fc[7] Fp Fc:1 Fi} Fi} FC15} Fi FC10[2] FU12[8]} vd v1 FC11 FC10[2] FL Fp FL FC17{ VBC4 BC18{ VBC19{ BC4 Fi FC4 FC4 Fi Fp FL[6] Fp} VBC4 FC4 Fs Fi FC19 FL[4] FC19} Fp Fc[9] FC18 FC19 FL:37 Fc FC19 Fc:8 Fp Fc Fi Fi} FL}


 S20472C1 ::~S20472C1(){ note_dtor("S20472C1", this);}
void  S20472C1 ::v1(){vfunc_called(this, "_ZN8S20472C12v1Ev");}
S20472C1 ::S20472C1(){ note_ctor("S20472C1", this);} // tgen

static void Test_S20472C1()
{
  extern Class_Descriptor cd_S20472C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(852,2656)];
    init_test(&cd_S20472C1, buf);
    S20472C1 *dp, &lv = *(dp=new (buf) S20472C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(13616,10620), "sizeof(S20472C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20472C1)");
    /*is_ambiguous_... S20472C1::S20472C3 */ AMB_check_base_class_offset(lv, (S20956C5*)(S20472C3*), ABISELECT(4976,3900), "S20472C1");
    check_base_class_offset(lv, (S20472C3*)(S20472C2*), ABISELECT(4976,3900), "S20472C1");
    /*is_ambiguous_... S20472C2::S20956C5 */ AMB_check_base_class_offset(lv, (S20956C5*)(S20472C2*), ABISELECT(5224,4096), "S20472C1");
    /*is_ambiguous_... S20472C8::S20956C5 */ AMB_check_base_class_offset(lv, (S20956C5*)(S20472C8*)(S20472C5*), ABISELECT(5224,4096), "S20472C1");
    check_base_class_offset(lv, (S20956C5*)(S20472C7*), ABISELECT(5224,4096), "S20472C1");
    check_base_class_offset(lv, (S20472C2*), ABISELECT(4376,3420), "S20472C1");
    check_base_class_offset(lv, (S20472C2*)(S20472C8*)(S20472C5*), ABISELECT(4376,3420), "S20472C1");
    check_base_class_offset(lv, (S20472C2*)(S20472C13*), ABISELECT(4376,3420), "S20472C1");
    check_base_class_offset(lv, (S7258C6*)(S20472C5*), ABISELECT(7432,5812), "S20472C1");
    /*is_ambiguous_... S20472C8::S20472C3 */ AMB_check_base_class_offset(lv, (S20956C5*)(S20472C3*)(S20472C8*)(S20472C5*), ABISELECT(5288,4144), "S20472C1");
    /*is_ambiguous_... S20472C8::S20472C3 */ AMB_check_base_class_offset(lv, (S20472C3*)(S20472C8*)(S20472C5*), ABISELECT(5288,4144), "S20472C1");
    check_base_class_offset(lv, (S20472C7*)(S20472C8*)(S20472C5*), ABISELECT(8416,6552), "S20472C1");
    check_base_class_offset(lv, (S20472C8*)(S20472C5*), ABISELECT(5280,4140), "S20472C1");
    check_base_class_offset(lv, (S20472C5*), ABISELECT(5280,4140), "S20472C1");
    /*is_ambiguous_... S20472C12::S20472C3 */ AMB_check_base_class_offset(lv, (S20956C5*)(S20472C3*)(S20472C12*), ABISELECT(8824,6864), "S20472C1");
    /*is_ambiguous_... S20472C12::S20472C3 */ AMB_check_base_class_offset(lv, (S20472C3*)(S20472C12*), ABISELECT(8824,6864), "S20472C1");
    /*is_ambiguous_... S20472C13::S20472C3 */ AMB_check_base_class_offset(lv, (S20956C5*)(S20472C3*)(S20472C13*), ABISELECT(11800,9204), "S20472C1");
    /*is_ambiguous_... S20472C13::S20472C3 */ AMB_check_base_class_offset(lv, (S20472C3*)(S20472C13*), ABISELECT(11800,9204), "S20472C1");
    check_base_class_offset(lv, (S20472C13*)(S20472C12*), ABISELECT(11792,9200), "S20472C1");
    check_base_class_offset(lv, (S20472C12*)(S20472C11*), ABISELECT(8816,6860), "S20472C1");
    check_base_class_offset(lv, (S20472C11*), 0, "S20472C1");
    check_field_offset(lv, s20472c1f0, ABISELECT(1056,808), "S20472C1.s20472c1f0");
    check_field_offset(lv, s20472c1f1, ABISELECT(1064,812), "S20472C1.s20472c1f1");
    check_field_offset(lv, s20472c1f2, ABISELECT(1976,1516), "S20472C1.s20472c1f2");
    check_field_offset(lv, s20472c1f3, ABISELECT(1984,1524), "S20472C1.s20472c1f3");
    check_field_offset(lv, s20472c1f4, ABISELECT(1992,1528), "S20472C1.s20472c1f4");
    check_field_offset(lv, s20472c1f5, ABISELECT(2000,1536), "S20472C1.s20472c1f5");
    check_field_offset(lv, s20472c1f6, ABISELECT(4368,3412), "S20472C1.s20472c1f6");
    test_class_info(&lv, &cd_S20472C1);
    dp->~S20472C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20472C1(Test_S20472C1, "S20472C1", ABISELECT(13616,10620));

#else // __cplusplus

extern void _ZN8S20472C1C1Ev();
extern void _ZN8S20472C1D2Ev();
Name_Map name_map_S20472C1[] = {
  NSPAIR(_ZN8S20472C1C1Ev),
  NSPAIR(_ZN8S20472C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20956C5;
extern VTBL_ENTRY _ZTI8S20956C5[];
extern Class_Descriptor cd_S20472C3;
extern VTBL_ENTRY _ZTI8S20472C3[];
extern Class_Descriptor cd_S20956C5;
extern VTBL_ENTRY _ZTI8S20956C5[];
extern Class_Descriptor cd_S20472C2;
extern VTBL_ENTRY _ZTI8S20472C2[];
extern  VTBL_ENTRY _ZTV8S20472C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20472C2[];
extern Class_Descriptor cd_S7258C6;
extern VTBL_ENTRY _ZTI7S7258C6[];
extern Class_Descriptor cd_S20956C5;
extern VTBL_ENTRY _ZTI8S20956C5[];
extern Class_Descriptor cd_S20472C3;
extern VTBL_ENTRY _ZTI8S20472C3[];
extern Class_Descriptor cd_S20472C7;
extern VTBL_ENTRY _ZTI8S20472C7[];
extern  VTBL_ENTRY _ZTV8S20472C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20472C7[];
extern Class_Descriptor cd_S20472C8;
extern VTBL_ENTRY _ZTI8S20472C8[];
extern  VTBL_ENTRY _ZTV8S20472C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20472C8[];
extern Class_Descriptor cd_S20472C5;
extern VTBL_ENTRY _ZTI8S20472C5[];
extern  VTBL_ENTRY _ZTV8S20472C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20472C5[];
extern Class_Descriptor cd_S20956C5;
extern VTBL_ENTRY _ZTI8S20956C5[];
extern Class_Descriptor cd_S20472C3;
extern VTBL_ENTRY _ZTI8S20472C3[];
extern Class_Descriptor cd_S20956C5;
extern VTBL_ENTRY _ZTI8S20956C5[];
extern Class_Descriptor cd_S20472C3;
extern VTBL_ENTRY _ZTI8S20472C3[];
extern Class_Descriptor cd_S20472C13;
extern VTBL_ENTRY _ZTI9S20472C13[];
extern  VTBL_ENTRY _ZTV9S20472C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20472C13[];
extern Class_Descriptor cd_S20472C12;
extern VTBL_ENTRY _ZTI9S20472C12[];
extern  VTBL_ENTRY _ZTV9S20472C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20472C12[];
extern Class_Descriptor cd_S20472C11;
extern VTBL_ENTRY _ZTI9S20472C11[];
extern  VTBL_ENTRY _ZTV9S20472C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20472C11[];
static Base_Class bases_S20472C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20956C5,    ABISELECT(4976,3900), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S20472C3,    ABISELECT(4976,3900), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S20956C5,    ABISELECT(5224,4096), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S20472C2,    ABISELECT(4376,3420), //bcp->offset
    12, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7258C6,    ABISELECT(7432,5812), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S20956C5,    ABISELECT(5288,4144), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S20472C3,    ABISELECT(5288,4144), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S20472C7,    ABISELECT(8416,6552), //bcp->offset
    29, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S20472C8,    ABISELECT(5280,4140), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S20472C5,    ABISELECT(5280,4140), //bcp->offset
    16, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20956C5,    ABISELECT(8824,6864), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S20472C3,    ABISELECT(8824,6864), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S20956C5,    ABISELECT(11800,9204), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S20472C3,    ABISELECT(11800,9204), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S20472C13,    ABISELECT(11792,9200), //bcp->offset
    47, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    22, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    15, //immediately_derived
  0, 1},
  {&cd_S20472C12,    ABISELECT(8816,6860), //bcp->offset
    41, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    16, //immediately_derived
  0, 1},
  {&cd_S20472C11,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20472C1[];
extern void _ZN8S20472C1D1Ev();
extern void _ZN8S20472C1D0Ev();
extern void _ZN8S20472C12v1Ev();
extern void ABISELECT(_ZTv0_n56_N8S20472C1D1Ev,_ZTv0_n28_N8S20472C1D1Ev)();
extern void ABISELECT(_ZThn5280_N8S20472C1D1Ev,_ZThn4140_N8S20472C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S20472C1D0Ev,_ZTv0_n28_N8S20472C1D0Ev)();
extern void ABISELECT(_ZThn5280_N8S20472C1D0Ev,_ZThn4140_N8S20472C1D0Ev)() __attribute__((weak));
extern void _ZN8S20472C82v5Ev();
extern void _ZN8S20472C82v6Ev();
extern void ABISELECT(_ZTv0_n32_N8S20472C1D1Ev,_ZTv0_n16_N8S20472C1D1Ev)();
extern void ABISELECT(_ZThn8416_N8S20472C1D1Ev,_ZThn6552_N8S20472C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S20472C1D0Ev,_ZTv0_n16_N8S20472C1D0Ev)();
extern void ABISELECT(_ZThn8416_N8S20472C1D0Ev,_ZThn6552_N8S20472C1D0Ev)() __attribute__((weak));
extern void _ZN8S20472C72v2Ev();
extern void _ZN8S20472C72v3Ev();
extern void _ZN8S20472C72v4Ev();
static  VTBL_ENTRY vtc_S20472C1[] = {
  ABISELECT(8416,6552),
  ABISELECT(5280,4140),
  ABISELECT(5224,4096),
  ABISELECT(4976,3900),
  ABISELECT(4376,3420),
  ABISELECT(11792,9200),
  ABISELECT(8816,6860),
  0,
  (VTBL_ENTRY)&(_ZTI8S20472C1[0]),
  (VTBL_ENTRY)&_ZN8S20472C1D1Ev,
  (VTBL_ENTRY)&_ZN8S20472C1D0Ev,
  (VTBL_ENTRY)&_ZN8S20472C12v1Ev,
  ABISELECT(848,676),
  ABISELECT(600,480),
  ABISELECT(-4376,-3420),
  (VTBL_ENTRY)&(_ZTI8S20472C1[0]),
  0,
  0,
  ABISELECT(-5280,-4140),
  ABISELECT(-304,-240),
  ABISELECT(-904,-720),
  ABISELECT(3136,2412),
  ABISELECT(-56,-44),
  ABISELECT(-5280,-4140),
  (VTBL_ENTRY)&(_ZTI8S20472C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S20472C1D1Ev,_ZTv0_n28_N8S20472C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S20472C1D0Ev,_ZTv0_n28_N8S20472C1D0Ev),
  (VTBL_ENTRY)&_ZN8S20472C82v5Ev,
  (VTBL_ENTRY)&_ZN8S20472C82v6Ev,
  0,
  0,
  0,
  ABISELECT(-8416,-6552),
  ABISELECT(-3192,-2456),
  ABISELECT(-8416,-6552),
  (VTBL_ENTRY)&(_ZTI8S20472C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20472C1D1Ev,_ZTv0_n16_N8S20472C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20472C1D0Ev,_ZTv0_n16_N8S20472C1D0Ev),
  (VTBL_ENTRY)&_ZN8S20472C72v2Ev,
  (VTBL_ENTRY)&_ZN8S20472C72v3Ev,
  (VTBL_ENTRY)&_ZN8S20472C72v4Ev,
  ABISELECT(-3592,-2764),
  ABISELECT(-3840,-2960),
  ABISELECT(-4440,-3440),
  ABISELECT(2976,2340),
  ABISELECT(-8816,-6860),
  (VTBL_ENTRY)&(_ZTI8S20472C1[0]),
  ABISELECT(-6568,-5104),
  ABISELECT(-6816,-5300),
  ABISELECT(-7416,-5780),
  ABISELECT(-11792,-9200),
  (VTBL_ENTRY)&(_ZTI8S20472C1[0]),
};
extern VTBL_ENTRY _ZTV8S20472C1[];
static  VTBL_ENTRY _tg__ZTV9S20472C11__8S20472C1[] = {
  ABISELECT(5224,4096),
  ABISELECT(4976,3900),
  ABISELECT(4376,3420),
  ABISELECT(11792,9200),
  ABISELECT(8816,6860),
  0,
  (VTBL_ENTRY)&(_ZTI9S20472C11[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20472C12__9S20472C11__8S20472C1[] = {
  ABISELECT(-3592,-2764),
  ABISELECT(-3840,-2960),
  ABISELECT(-4440,-3440),
  ABISELECT(2976,2340),
  ABISELECT(-8816,-6860),
  (VTBL_ENTRY)&(_ZTI9S20472C11[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20472C13__9S20472C11__8S20472C1[] = {
  ABISELECT(-6568,-5104),
  ABISELECT(-6816,-5300),
  ABISELECT(-7416,-5780),
  ABISELECT(-11792,-9200),
  (VTBL_ENTRY)&(_ZTI9S20472C11[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20472C2__9S20472C11__8S20472C1[] = {
  ABISELECT(848,676),
  ABISELECT(600,480),
  ABISELECT(-4376,-3420),
  (VTBL_ENTRY)&(_ZTI9S20472C11[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20472C2__8S20472C1[] = {
  ABISELECT(848,676),
  ABISELECT(600,480),
  0,
  (VTBL_ENTRY)&(_ZTI8S20472C2[0]),
};
extern void _ZN8S20472C5D1Ev();
extern void _ZN8S20472C5D0Ev();
extern void _ZN8S20472C82v5Ev();
extern void _ZN8S20472C82v6Ev();
static  VTBL_ENTRY _tg__ZTV8S20472C5__8S20472C1[] = {
  ABISELECT(-304,-240),
  ABISELECT(-904,-720),
  ABISELECT(3136,2412),
  ABISELECT(-56,-44),
  0,
  (VTBL_ENTRY)&(_ZTI8S20472C5[0]),
  (VTBL_ENTRY)&_ZN8S20472C5D1Ev,
  (VTBL_ENTRY)&_ZN8S20472C5D0Ev,
  (VTBL_ENTRY)&_ZN8S20472C82v5Ev,
  (VTBL_ENTRY)&_ZN8S20472C82v6Ev,
};
extern void _ZN8S20472C8D1Ev();
extern void _ZN8S20472C8D0Ev();
extern void _ZN8S20472C82v5Ev();
extern void _ZN8S20472C82v6Ev();
static  VTBL_ENTRY _tg__ZTV8S20472C88S20472C5__8S20472C1[] = {
  ABISELECT(-304,-240),
  ABISELECT(-904,-720),
  ABISELECT(3136,2412),
  ABISELECT(-56,-44),
  0,
  (VTBL_ENTRY)&(_ZTI8S20472C8[0]),
  (VTBL_ENTRY)&_ZN8S20472C8D1Ev,
  (VTBL_ENTRY)&_ZN8S20472C8D0Ev,
  (VTBL_ENTRY)&_ZN8S20472C82v5Ev,
  (VTBL_ENTRY)&_ZN8S20472C82v6Ev,
};
extern void ABISELECT(_ZTv0_n32_N8S20472C8D1Ev,_ZTv0_n16_N8S20472C8D1Ev)();
extern void ABISELECT(_ZThn3136_N8S20472C8D1Ev,_ZThn2412_N8S20472C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S20472C8D0Ev,_ZTv0_n16_N8S20472C8D0Ev)();
extern void ABISELECT(_ZThn3136_N8S20472C8D0Ev,_ZThn2412_N8S20472C8D0Ev)() __attribute__((weak));
extern void _ZN8S20472C72v2Ev();
extern void _ZN8S20472C72v3Ev();
extern void _ZN8S20472C72v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20472C7__8S20472C88S20472C5__8S20472C1[] = {
  0,
  0,
  0,
  ABISELECT(-3136,-2412),
  ABISELECT(-3192,-2456),
  ABISELECT(-3136,-2412),
  (VTBL_ENTRY)&(_ZTI8S20472C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20472C8D1Ev,_ZTv0_n16_N8S20472C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20472C8D0Ev,_ZTv0_n16_N8S20472C8D0Ev),
  (VTBL_ENTRY)&_ZN8S20472C72v2Ev,
  (VTBL_ENTRY)&_ZN8S20472C72v3Ev,
  (VTBL_ENTRY)&_ZN8S20472C72v4Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20472C2__8S20472C88S20472C5__8S20472C1[] = {
  ABISELECT(848,676),
  ABISELECT(600,480),
  ABISELECT(904,720),
  (VTBL_ENTRY)&(_ZTI8S20472C8[0]),
};
extern void ABISELECT(_ZTv0_n32_N8S20472C5D1Ev,_ZTv0_n16_N8S20472C5D1Ev)();
extern void ABISELECT(_ZThn3136_N8S20472C5D1Ev,_ZThn2412_N8S20472C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S20472C5D0Ev,_ZTv0_n16_N8S20472C5D0Ev)();
extern void ABISELECT(_ZThn3136_N8S20472C5D0Ev,_ZThn2412_N8S20472C5D0Ev)() __attribute__((weak));
extern void _ZN8S20472C72v2Ev();
extern void _ZN8S20472C72v3Ev();
extern void _ZN8S20472C72v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20472C7__8S20472C5__8S20472C1[] = {
  0,
  0,
  0,
  ABISELECT(-3136,-2412),
  ABISELECT(-3192,-2456),
  ABISELECT(-3136,-2412),
  (VTBL_ENTRY)&(_ZTI8S20472C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20472C5D1Ev,_ZTv0_n16_N8S20472C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20472C5D0Ev,_ZTv0_n16_N8S20472C5D0Ev),
  (VTBL_ENTRY)&_ZN8S20472C72v2Ev,
  (VTBL_ENTRY)&_ZN8S20472C72v3Ev,
  (VTBL_ENTRY)&_ZN8S20472C72v4Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20472C2__8S20472C5__8S20472C1[] = {
  ABISELECT(848,676),
  ABISELECT(600,480),
  ABISELECT(904,720),
  (VTBL_ENTRY)&(_ZTI8S20472C5[0]),
};
extern void _ZN8S20472C7D1Ev();
extern void _ZN8S20472C7D0Ev();
extern void _ZN8S20472C72v2Ev();
extern void _ZN8S20472C72v3Ev();
extern void _ZN8S20472C72v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20472C7__8S20472C1[] = {
  ABISELECT(-3192,-2456),
  0,
  (VTBL_ENTRY)&(_ZTI8S20472C7[0]),
  (VTBL_ENTRY)&_ZN8S20472C7D1Ev,
  (VTBL_ENTRY)&_ZN8S20472C7D0Ev,
  (VTBL_ENTRY)&_ZN8S20472C72v2Ev,
  (VTBL_ENTRY)&_ZN8S20472C72v3Ev,
  (VTBL_ENTRY)&_ZN8S20472C72v4Ev,
};
static  VTBL_ENTRY _tg__ZTV9S20472C12__8S20472C1[] = {
  ABISELECT(-3592,-2764),
  ABISELECT(-3840,-2960),
  ABISELECT(-4440,-3440),
  ABISELECT(2976,2340),
  0,
  (VTBL_ENTRY)&(_ZTI9S20472C12[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20472C13__9S20472C12__8S20472C1[] = {
  ABISELECT(-6568,-5104),
  ABISELECT(-6816,-5300),
  ABISELECT(-7416,-5780),
  ABISELECT(-2976,-2340),
  (VTBL_ENTRY)&(_ZTI9S20472C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20472C2__9S20472C12__8S20472C1[] = {
  ABISELECT(848,676),
  ABISELECT(600,480),
  ABISELECT(4440,3440),
  (VTBL_ENTRY)&(_ZTI9S20472C12[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20472C13__8S20472C1[] = {
  ABISELECT(-6568,-5104),
  ABISELECT(-6816,-5300),
  ABISELECT(-7416,-5780),
  0,
  (VTBL_ENTRY)&(_ZTI9S20472C13[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20472C2__9S20472C13__8S20472C1[] = {
  ABISELECT(848,676),
  ABISELECT(600,480),
  ABISELECT(7416,5780),
  (VTBL_ENTRY)&(_ZTI9S20472C13[0]),
};
static  VTT_ENTRY vtt_S20472C1[] = {
  {&(_ZTV8S20472C1[9]),  9,52},
  {&(_tg__ZTV9S20472C11__8S20472C1[7]),  7,7},
  {&(_tg__ZTV9S20472C12__9S20472C11__8S20472C1[6]),  6,6},
  {&(_tg__ZTV9S20472C13__9S20472C11__8S20472C1[5]),  5,5},
  {&(_tg__ZTV8S20472C2__9S20472C11__8S20472C1[4]),  4,4},
  {&(_ZTV8S20472C1[16]),  16,52},
  {&(_ZTV8S20472C1[25]),  25,52},
  {&(_ZTV8S20472C1[36]),  36,52},
  {&(_ZTV8S20472C1[47]),  47,52},
  {&(_ZTV8S20472C1[52]),  52,52},
  {&(_tg__ZTV8S20472C2__8S20472C1[4]),  4,4},
  {&(_tg__ZTV8S20472C5__8S20472C1[6]),  6,10},
  {&(_tg__ZTV8S20472C88S20472C5__8S20472C1[6]),  6,10},
  {&(_tg__ZTV8S20472C7__8S20472C88S20472C5__8S20472C1[7]),  7,12},
  {&(_tg__ZTV8S20472C2__8S20472C88S20472C5__8S20472C1[4]),  4,4},
  {&(_tg__ZTV8S20472C7__8S20472C5__8S20472C1[7]),  7,12},
  {&(_tg__ZTV8S20472C2__8S20472C5__8S20472C1[4]),  4,4},
  {&(_tg__ZTV8S20472C7__8S20472C1[3]),  3,8},
  {&(_tg__ZTV9S20472C12__8S20472C1[6]),  6,6},
  {&(_tg__ZTV9S20472C13__9S20472C12__8S20472C1[5]),  5,5},
  {&(_tg__ZTV8S20472C2__9S20472C12__8S20472C1[4]),  4,4},
  {&(_tg__ZTV9S20472C13__8S20472C1[5]),  5,5},
  {&(_tg__ZTV8S20472C2__9S20472C13__8S20472C1[4]),  4,4},
};
extern VTBL_ENTRY _ZTI8S20472C1[];
extern  VTBL_ENTRY _ZTV8S20472C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20472C1[];
static VTBL_ENTRY alt_thunk_names26[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20472C5D0Ev,_ZTv0_n16_N8S20472C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3136_N8S20472C5D0Ev,_ZThn2412_N8S20472C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20472C5D1Ev,_ZTv0_n16_N8S20472C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3136_N8S20472C5D1Ev,_ZThn2412_N8S20472C5D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20472C8D0Ev,_ZTv0_n16_N8S20472C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3136_N8S20472C8D0Ev,_ZThn2412_N8S20472C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20472C8D1Ev,_ZTv0_n16_N8S20472C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3136_N8S20472C8D1Ev,_ZThn2412_N8S20472C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20472C1D0Ev,_ZTv0_n16_N8S20472C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8416_N8S20472C1D0Ev,_ZThn6552_N8S20472C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20472C1D1Ev,_ZTv0_n16_N8S20472C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8416_N8S20472C1D1Ev,_ZThn6552_N8S20472C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S20472C1D0Ev,_ZTv0_n28_N8S20472C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5280_N8S20472C1D0Ev,_ZThn4140_N8S20472C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S20472C1D1Ev,_ZTv0_n28_N8S20472C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5280_N8S20472C1D1Ev,_ZThn4140_N8S20472C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20472C1 = {  "S20472C1", // class name
  bases_S20472C1, 17,
  &(vtc_S20472C1[0]), // expected_vtbl_contents
  &(vtt_S20472C1[0]), // expected_vtt_contents
  ABISELECT(13616,10620), // object size
  NSPAIRA(_ZTI8S20472C1),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S20472C1),52, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20472C1),23, //virtual table table var
  7, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names26,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4647C3  {
  virtual  ~S4647C3(); // _ZN7S4647C3D1Ev
  virtual void  v20(); // _ZN7S4647C33v20Ev
  virtual void  v21(); // _ZN7S4647C33v21Ev
  virtual void  v22(); // _ZN7S4647C33v22Ev
  virtual void  v23(); // _ZN7S4647C33v23Ev
  virtual void  v24(); // _ZN7S4647C33v24Ev
  virtual void  v25(); // _ZN7S4647C33v25Ev
  virtual void  v26(); // _ZN7S4647C33v26Ev
  virtual void  v27(); // _ZN7S4647C33v27Ev
  virtual void  v28(); // _ZN7S4647C33v28Ev
  virtual void  v29(); // _ZN7S4647C33v29Ev
  virtual void  v30(); // _ZN7S4647C33v30Ev
  virtual void  v31(); // _ZN7S4647C33v31Ev
  virtual void  v32(); // _ZN7S4647C33v32Ev
  virtual void  v33(); // _ZN7S4647C33v33Ev
  virtual void  v34(); // _ZN7S4647C33v34Ev
  virtual void  v35(); // _ZN7S4647C33v35Ev
  virtual void  v36(); // _ZN7S4647C33v36Ev
  virtual void  v37(); // _ZN7S4647C33v37Ev
  virtual void  v38(); // _ZN7S4647C33v38Ev
  virtual void  v39(); // _ZN7S4647C33v39Ev
  virtual void  v40(); // _ZN7S4647C33v40Ev
  virtual void  v41(); // _ZN7S4647C33v41Ev
  virtual void  v42(); // _ZN7S4647C33v42Ev
  virtual void  v43(); // _ZN7S4647C33v43Ev
  virtual void  v44(); // _ZN7S4647C33v44Ev
  virtual void  v45(); // _ZN7S4647C33v45Ev
  S4647C3(); // tgen
};
//SIG(-1 S4647C3) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26}


 S4647C3 ::~S4647C3(){ note_dtor("S4647C3", this);}
void  S4647C3 ::v20(){vfunc_called(this, "_ZN7S4647C33v20Ev");}
void  S4647C3 ::v21(){vfunc_called(this, "_ZN7S4647C33v21Ev");}
void  S4647C3 ::v22(){vfunc_called(this, "_ZN7S4647C33v22Ev");}
void  S4647C3 ::v23(){vfunc_called(this, "_ZN7S4647C33v23Ev");}
void  S4647C3 ::v24(){vfunc_called(this, "_ZN7S4647C33v24Ev");}
void  S4647C3 ::v25(){vfunc_called(this, "_ZN7S4647C33v25Ev");}
void  S4647C3 ::v26(){vfunc_called(this, "_ZN7S4647C33v26Ev");}
void  S4647C3 ::v27(){vfunc_called(this, "_ZN7S4647C33v27Ev");}
void  S4647C3 ::v28(){vfunc_called(this, "_ZN7S4647C33v28Ev");}
void  S4647C3 ::v29(){vfunc_called(this, "_ZN7S4647C33v29Ev");}
void  S4647C3 ::v30(){vfunc_called(this, "_ZN7S4647C33v30Ev");}
void  S4647C3 ::v31(){vfunc_called(this, "_ZN7S4647C33v31Ev");}
void  S4647C3 ::v32(){vfunc_called(this, "_ZN7S4647C33v32Ev");}
void  S4647C3 ::v33(){vfunc_called(this, "_ZN7S4647C33v33Ev");}
void  S4647C3 ::v34(){vfunc_called(this, "_ZN7S4647C33v34Ev");}
void  S4647C3 ::v35(){vfunc_called(this, "_ZN7S4647C33v35Ev");}
void  S4647C3 ::v36(){vfunc_called(this, "_ZN7S4647C33v36Ev");}
void  S4647C3 ::v37(){vfunc_called(this, "_ZN7S4647C33v37Ev");}
void  S4647C3 ::v38(){vfunc_called(this, "_ZN7S4647C33v38Ev");}
void  S4647C3 ::v39(){vfunc_called(this, "_ZN7S4647C33v39Ev");}
void  S4647C3 ::v40(){vfunc_called(this, "_ZN7S4647C33v40Ev");}
void  S4647C3 ::v41(){vfunc_called(this, "_ZN7S4647C33v41Ev");}
void  S4647C3 ::v42(){vfunc_called(this, "_ZN7S4647C33v42Ev");}
void  S4647C3 ::v43(){vfunc_called(this, "_ZN7S4647C33v43Ev");}
void  S4647C3 ::v44(){vfunc_called(this, "_ZN7S4647C33v44Ev");}
void  S4647C3 ::v45(){vfunc_called(this, "_ZN7S4647C33v45Ev");}
S4647C3 ::S4647C3(){ note_ctor("S4647C3", this);} // tgen

static void Test_S4647C3()
{
  extern Class_Descriptor cd_S4647C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S4647C3, buf);
    S4647C3 *dp, &lv = *(dp=new (buf) S4647C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S4647C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4647C3)");
    test_class_info(&lv, &cd_S4647C3);
    dp->~S4647C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4647C3(Test_S4647C3, "S4647C3", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S4647C3C1Ev();
extern void _ZN7S4647C3D1Ev();
Name_Map name_map_S4647C3[] = {
  NSPAIR(_ZN7S4647C3C1Ev),
  NSPAIR(_ZN7S4647C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4647C3[];
extern void _ZN7S4647C3D1Ev();
extern void _ZN7S4647C3D0Ev();
extern void _ZN7S4647C33v20Ev();
extern void _ZN7S4647C33v21Ev();
extern void _ZN7S4647C33v22Ev();
extern void _ZN7S4647C33v23Ev();
extern void _ZN7S4647C33v24Ev();
extern void _ZN7S4647C33v25Ev();
extern void _ZN7S4647C33v26Ev();
extern void _ZN7S4647C33v27Ev();
extern void _ZN7S4647C33v28Ev();
extern void _ZN7S4647C33v29Ev();
extern void _ZN7S4647C33v30Ev();
extern void _ZN7S4647C33v31Ev();
extern void _ZN7S4647C33v32Ev();
extern void _ZN7S4647C33v33Ev();
extern void _ZN7S4647C33v34Ev();
extern void _ZN7S4647C33v35Ev();
extern void _ZN7S4647C33v36Ev();
extern void _ZN7S4647C33v37Ev();
extern void _ZN7S4647C33v38Ev();
extern void _ZN7S4647C33v39Ev();
extern void _ZN7S4647C33v40Ev();
extern void _ZN7S4647C33v41Ev();
extern void _ZN7S4647C33v42Ev();
extern void _ZN7S4647C33v43Ev();
extern void _ZN7S4647C33v44Ev();
extern void _ZN7S4647C33v45Ev();
static  VTBL_ENTRY vtc_S4647C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4647C3[0]),
  (VTBL_ENTRY)&_ZN7S4647C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4647C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4647C33v20Ev,
  (VTBL_ENTRY)&_ZN7S4647C33v21Ev,
  (VTBL_ENTRY)&_ZN7S4647C33v22Ev,
  (VTBL_ENTRY)&_ZN7S4647C33v23Ev,
  (VTBL_ENTRY)&_ZN7S4647C33v24Ev,
  (VTBL_ENTRY)&_ZN7S4647C33v25Ev,
  (VTBL_ENTRY)&_ZN7S4647C33v26Ev,
  (VTBL_ENTRY)&_ZN7S4647C33v27Ev,
  (VTBL_ENTRY)&_ZN7S4647C33v28Ev,
  (VTBL_ENTRY)&_ZN7S4647C33v29Ev,
  (VTBL_ENTRY)&_ZN7S4647C33v30Ev,
  (VTBL_ENTRY)&_ZN7S4647C33v31Ev,
  (VTBL_ENTRY)&_ZN7S4647C33v32Ev,
  (VTBL_ENTRY)&_ZN7S4647C33v33Ev,
  (VTBL_ENTRY)&_ZN7S4647C33v34Ev,
  (VTBL_ENTRY)&_ZN7S4647C33v35Ev,
  (VTBL_ENTRY)&_ZN7S4647C33v36Ev,
  (VTBL_ENTRY)&_ZN7S4647C33v37Ev,
  (VTBL_ENTRY)&_ZN7S4647C33v38Ev,
  (VTBL_ENTRY)&_ZN7S4647C33v39Ev,
  (VTBL_ENTRY)&_ZN7S4647C33v40Ev,
  (VTBL_ENTRY)&_ZN7S4647C33v41Ev,
  (VTBL_ENTRY)&_ZN7S4647C33v42Ev,
  (VTBL_ENTRY)&_ZN7S4647C33v43Ev,
  (VTBL_ENTRY)&_ZN7S4647C33v44Ev,
  (VTBL_ENTRY)&_ZN7S4647C33v45Ev,
};
extern VTBL_ENTRY _ZTI7S4647C3[];
extern  VTBL_ENTRY _ZTV7S4647C3[];
Class_Descriptor cd_S4647C3 = {  "S4647C3", // class name
  0,0,//no base classes
  &(vtc_S4647C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S4647C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4647C3),30, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4647C2  : S4647C3 {
  void *s4647c2f0[2];
  int s4647c2f1[4];
  ::S2423C5_nt s4647c2f2;
  void *s4647c2f3;
  char s4647c2f4;
  void *s4647c2f5;
  virtual  ~S4647C2(); // _ZN7S4647C2D1Ev
  virtual void  v46(); // _ZN7S4647C23v46Ev
  virtual void  v47(); // _ZN7S4647C23v47Ev
  virtual void  v48(); // _ZN7S4647C23v48Ev
  virtual void  v49(); // _ZN7S4647C23v49Ev
  virtual void  v50(); // _ZN7S4647C23v50Ev
  virtual void  v51(); // _ZN7S4647C23v51Ev
  virtual void  v52(); // _ZN7S4647C23v52Ev
  virtual void  v53(); // _ZN7S4647C23v53Ev
  virtual void  v54(); // _ZN7S4647C23v54Ev
  virtual void  v55(); // _ZN7S4647C23v55Ev
  virtual void  v56(); // _ZN7S4647C23v56Ev
  virtual void  v57(); // _ZN7S4647C23v57Ev
  virtual void  v58(); // _ZN7S4647C23v58Ev
  virtual void  v59(); // _ZN7S4647C23v59Ev
  S4647C2(); // tgen
};
//SIG(-1 S4647C2) C1{ BC2{ vd v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 Fp[2] Fi[4] FC3{ Fi[2]} Fp Fc Fp}


 S4647C2 ::~S4647C2(){ note_dtor("S4647C2", this);}
void  S4647C2 ::v46(){vfunc_called(this, "_ZN7S4647C23v46Ev");}
void  S4647C2 ::v47(){vfunc_called(this, "_ZN7S4647C23v47Ev");}
void  S4647C2 ::v48(){vfunc_called(this, "_ZN7S4647C23v48Ev");}
void  S4647C2 ::v49(){vfunc_called(this, "_ZN7S4647C23v49Ev");}
void  S4647C2 ::v50(){vfunc_called(this, "_ZN7S4647C23v50Ev");}
void  S4647C2 ::v51(){vfunc_called(this, "_ZN7S4647C23v51Ev");}
void  S4647C2 ::v52(){vfunc_called(this, "_ZN7S4647C23v52Ev");}
void  S4647C2 ::v53(){vfunc_called(this, "_ZN7S4647C23v53Ev");}
void  S4647C2 ::v54(){vfunc_called(this, "_ZN7S4647C23v54Ev");}
void  S4647C2 ::v55(){vfunc_called(this, "_ZN7S4647C23v55Ev");}
void  S4647C2 ::v56(){vfunc_called(this, "_ZN7S4647C23v56Ev");}
void  S4647C2 ::v57(){vfunc_called(this, "_ZN7S4647C23v57Ev");}
void  S4647C2 ::v58(){vfunc_called(this, "_ZN7S4647C23v58Ev");}
void  S4647C2 ::v59(){vfunc_called(this, "_ZN7S4647C23v59Ev");}
S4647C2 ::S4647C2(){ note_ctor("S4647C2", this);} // tgen

static void Test_S4647C2()
{
  extern Class_Descriptor cd_S4647C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,13)];
    init_test(&cd_S4647C2, buf);
    S4647C2 *dp, &lv = *(dp=new (buf) S4647C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,48), "sizeof(S4647C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4647C2)");
    check_base_class_offset(lv, (S4647C3*), 0, "S4647C2");
    check_field_offset(lv, s4647c2f0, ABISELECT(8,4), "S4647C2.s4647c2f0");
    check_field_offset(lv, s4647c2f1, ABISELECT(24,12), "S4647C2.s4647c2f1");
    check_field_offset(lv, s4647c2f2, ABISELECT(40,28), "S4647C2.s4647c2f2");
    check_field_offset(lv, s4647c2f3, ABISELECT(48,36), "S4647C2.s4647c2f3");
    check_field_offset(lv, s4647c2f4, ABISELECT(56,40), "S4647C2.s4647c2f4");
    check_field_offset(lv, s4647c2f5, ABISELECT(64,44), "S4647C2.s4647c2f5");
    test_class_info(&lv, &cd_S4647C2);
    dp->~S4647C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4647C2(Test_S4647C2, "S4647C2", ABISELECT(72,48));

#else // __cplusplus

extern void _ZN7S4647C2C1Ev();
extern void _ZN7S4647C2D1Ev();
Name_Map name_map_S4647C2[] = {
  NSPAIR(_ZN7S4647C2C1Ev),
  NSPAIR(_ZN7S4647C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4647C3;
extern VTBL_ENTRY _ZTI7S4647C3[];
extern  VTBL_ENTRY _ZTV7S4647C3[];
static Base_Class bases_S4647C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4647C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4647C2[];
extern void _ZN7S4647C2D1Ev();
extern void _ZN7S4647C2D0Ev();
extern void _ZN7S4647C33v20Ev();
extern void _ZN7S4647C33v21Ev();
extern void _ZN7S4647C33v22Ev();
extern void _ZN7S4647C33v23Ev();
extern void _ZN7S4647C33v24Ev();
extern void _ZN7S4647C33v25Ev();
extern void _ZN7S4647C33v26Ev();
extern void _ZN7S4647C33v27Ev();
extern void _ZN7S4647C33v28Ev();
extern void _ZN7S4647C33v29Ev();
extern void _ZN7S4647C33v30Ev();
extern void _ZN7S4647C33v31Ev();
extern void _ZN7S4647C33v32Ev();
extern void _ZN7S4647C33v33Ev();
extern void _ZN7S4647C33v34Ev();
extern void _ZN7S4647C33v35Ev();
extern void _ZN7S4647C33v36Ev();
extern void _ZN7S4647C33v37Ev();
extern void _ZN7S4647C33v38Ev();
extern void _ZN7S4647C33v39Ev();
extern void _ZN7S4647C33v40Ev();
extern void _ZN7S4647C33v41Ev();
extern void _ZN7S4647C33v42Ev();
extern void _ZN7S4647C33v43Ev();
extern void _ZN7S4647C33v44Ev();
extern void _ZN7S4647C33v45Ev();
extern void _ZN7S4647C23v46Ev();
extern void _ZN7S4647C23v47Ev();
extern void _ZN7S4647C23v48Ev();
extern void _ZN7S4647C23v49Ev();
extern void _ZN7S4647C23v50Ev();
extern void _ZN7S4647C23v51Ev();
extern void _ZN7S4647C23v52Ev();
extern void _ZN7S4647C23v53Ev();
extern void _ZN7S4647C23v54Ev();
extern void _ZN7S4647C23v55Ev();
extern void _ZN7S4647C23v56Ev();
extern void _ZN7S4647C23v57Ev();
extern void _ZN7S4647C23v58Ev();
extern void _ZN7S4647C23v59Ev();
static  VTBL_ENTRY vtc_S4647C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4647C2[0]),
  (VTBL_ENTRY)&_ZN7S4647C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4647C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4647C33v20Ev,
  (VTBL_ENTRY)&_ZN7S4647C33v21Ev,
  (VTBL_ENTRY)&_ZN7S4647C33v22Ev,
  (VTBL_ENTRY)&_ZN7S4647C33v23Ev,
  (VTBL_ENTRY)&_ZN7S4647C33v24Ev,
  (VTBL_ENTRY)&_ZN7S4647C33v25Ev,
  (VTBL_ENTRY)&_ZN7S4647C33v26Ev,
  (VTBL_ENTRY)&_ZN7S4647C33v27Ev,
  (VTBL_ENTRY)&_ZN7S4647C33v28Ev,
  (VTBL_ENTRY)&_ZN7S4647C33v29Ev,
  (VTBL_ENTRY)&_ZN7S4647C33v30Ev,
  (VTBL_ENTRY)&_ZN7S4647C33v31Ev,
  (VTBL_ENTRY)&_ZN7S4647C33v32Ev,
  (VTBL_ENTRY)&_ZN7S4647C33v33Ev,
  (VTBL_ENTRY)&_ZN7S4647C33v34Ev,
  (VTBL_ENTRY)&_ZN7S4647C33v35Ev,
  (VTBL_ENTRY)&_ZN7S4647C33v36Ev,
  (VTBL_ENTRY)&_ZN7S4647C33v37Ev,
  (VTBL_ENTRY)&_ZN7S4647C33v38Ev,
  (VTBL_ENTRY)&_ZN7S4647C33v39Ev,
  (VTBL_ENTRY)&_ZN7S4647C33v40Ev,
  (VTBL_ENTRY)&_ZN7S4647C33v41Ev,
  (VTBL_ENTRY)&_ZN7S4647C33v42Ev,
  (VTBL_ENTRY)&_ZN7S4647C33v43Ev,
  (VTBL_ENTRY)&_ZN7S4647C33v44Ev,
  (VTBL_ENTRY)&_ZN7S4647C33v45Ev,
  (VTBL_ENTRY)&_ZN7S4647C23v46Ev,
  (VTBL_ENTRY)&_ZN7S4647C23v47Ev,
  (VTBL_ENTRY)&_ZN7S4647C23v48Ev,
  (VTBL_ENTRY)&_ZN7S4647C23v49Ev,
  (VTBL_ENTRY)&_ZN7S4647C23v50Ev,
  (VTBL_ENTRY)&_ZN7S4647C23v51Ev,
  (VTBL_ENTRY)&_ZN7S4647C23v52Ev,
  (VTBL_ENTRY)&_ZN7S4647C23v53Ev,
  (VTBL_ENTRY)&_ZN7S4647C23v54Ev,
  (VTBL_ENTRY)&_ZN7S4647C23v55Ev,
  (VTBL_ENTRY)&_ZN7S4647C23v56Ev,
  (VTBL_ENTRY)&_ZN7S4647C23v57Ev,
  (VTBL_ENTRY)&_ZN7S4647C23v58Ev,
  (VTBL_ENTRY)&_ZN7S4647C23v59Ev,
};
extern VTBL_ENTRY _ZTI7S4647C2[];
extern  VTBL_ENTRY _ZTV7S4647C2[];
Class_Descriptor cd_S4647C2 = {  "S4647C2", // class name
  bases_S4647C2, 1,
  &(vtc_S4647C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,48), // object size
  NSPAIRA(_ZTI7S4647C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4647C2),44, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4647C5  {
  void *s4647c5f0;
  char s4647c5f1[32];
  int s4647c5f2[6];
  char s4647c5f3;
  int s4647c5f4[2];
  virtual  ~S4647C5(); // _ZN7S4647C5D1Ev
  virtual void  v60(); // _ZN7S4647C53v60Ev
  virtual void  v61(); // _ZN7S4647C53v61Ev
  S4647C5(); // tgen
};
//SIG(-1 S4647C5) C1{ vd v1 v2 Fp Fc[32] Fi[6] Fc Fi[2]}


 S4647C5 ::~S4647C5(){ note_dtor("S4647C5", this);}
void  S4647C5 ::v60(){vfunc_called(this, "_ZN7S4647C53v60Ev");}
void  S4647C5 ::v61(){vfunc_called(this, "_ZN7S4647C53v61Ev");}
S4647C5 ::S4647C5(){ note_ctor("S4647C5", this);} // tgen

static void Test_S4647C5()
{
  extern Class_Descriptor cd_S4647C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(12,20)];
    init_test(&cd_S4647C5, buf);
    S4647C5 *dp, &lv = *(dp=new (buf) S4647C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(88,76), "sizeof(S4647C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4647C5)");
    check_field_offset(lv, s4647c5f0, ABISELECT(8,4), "S4647C5.s4647c5f0");
    check_field_offset(lv, s4647c5f1, ABISELECT(16,8), "S4647C5.s4647c5f1");
    check_field_offset(lv, s4647c5f2, ABISELECT(48,40), "S4647C5.s4647c5f2");
    check_field_offset(lv, s4647c5f3, ABISELECT(72,64), "S4647C5.s4647c5f3");
    check_field_offset(lv, s4647c5f4, ABISELECT(76,68), "S4647C5.s4647c5f4");
    test_class_info(&lv, &cd_S4647C5);
    dp->~S4647C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4647C5(Test_S4647C5, "S4647C5", ABISELECT(88,76));

#else // __cplusplus

extern void _ZN7S4647C5C1Ev();
extern void _ZN7S4647C5D1Ev();
Name_Map name_map_S4647C5[] = {
  NSPAIR(_ZN7S4647C5C1Ev),
  NSPAIR(_ZN7S4647C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4647C5[];
extern void _ZN7S4647C5D1Ev();
extern void _ZN7S4647C5D0Ev();
extern void _ZN7S4647C53v60Ev();
extern void _ZN7S4647C53v61Ev();
static  VTBL_ENTRY vtc_S4647C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4647C5[0]),
  (VTBL_ENTRY)&_ZN7S4647C5D1Ev,
  (VTBL_ENTRY)&_ZN7S4647C5D0Ev,
  (VTBL_ENTRY)&_ZN7S4647C53v60Ev,
  (VTBL_ENTRY)&_ZN7S4647C53v61Ev,
};
extern VTBL_ENTRY _ZTI7S4647C5[];
extern  VTBL_ENTRY _ZTV7S4647C5[];
Class_Descriptor cd_S4647C5 = {  "S4647C5", // class name
  0,0,//no base classes
  &(vtc_S4647C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(88,76), // object size
  NSPAIRA(_ZTI7S4647C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4647C5),6, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4647C6  {
  virtual  ~S4647C6(); // _ZN7S4647C6D1Ev
  virtual void  v62(); // _ZN7S4647C63v62Ev
  virtual void  v63(); // _ZN7S4647C63v63Ev
  virtual void  v64(); // _ZN7S4647C63v64Ev
  virtual void  v65(); // _ZN7S4647C63v65Ev
  virtual void  v66(); // _ZN7S4647C63v66Ev
  virtual void  v67(); // _ZN7S4647C63v67Ev
  S4647C6(); // tgen
};
//SIG(-1 S4647C6) C1{ vd v1 v2 v3 v4 v5 v6}


 S4647C6 ::~S4647C6(){ note_dtor("S4647C6", this);}
void  S4647C6 ::v62(){vfunc_called(this, "_ZN7S4647C63v62Ev");}
void  S4647C6 ::v63(){vfunc_called(this, "_ZN7S4647C63v63Ev");}
void  S4647C6 ::v64(){vfunc_called(this, "_ZN7S4647C63v64Ev");}
void  S4647C6 ::v65(){vfunc_called(this, "_ZN7S4647C63v65Ev");}
void  S4647C6 ::v66(){vfunc_called(this, "_ZN7S4647C63v66Ev");}
void  S4647C6 ::v67(){vfunc_called(this, "_ZN7S4647C63v67Ev");}
S4647C6 ::S4647C6(){ note_ctor("S4647C6", this);} // tgen

static void Test_S4647C6()
{
  extern Class_Descriptor cd_S4647C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S4647C6, buf);
    S4647C6 *dp, &lv = *(dp=new (buf) S4647C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S4647C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4647C6)");
    test_class_info(&lv, &cd_S4647C6);
    dp->~S4647C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4647C6(Test_S4647C6, "S4647C6", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S4647C6C1Ev();
extern void _ZN7S4647C6D1Ev();
Name_Map name_map_S4647C6[] = {
  NSPAIR(_ZN7S4647C6C1Ev),
  NSPAIR(_ZN7S4647C6D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4647C6[];
extern void _ZN7S4647C6D1Ev();
extern void _ZN7S4647C6D0Ev();
extern void _ZN7S4647C63v62Ev();
extern void _ZN7S4647C63v63Ev();
extern void _ZN7S4647C63v64Ev();
extern void _ZN7S4647C63v65Ev();
extern void _ZN7S4647C63v66Ev();
extern void _ZN7S4647C63v67Ev();
static  VTBL_ENTRY vtc_S4647C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4647C6[0]),
  (VTBL_ENTRY)&_ZN7S4647C6D1Ev,
  (VTBL_ENTRY)&_ZN7S4647C6D0Ev,
  (VTBL_ENTRY)&_ZN7S4647C63v62Ev,
  (VTBL_ENTRY)&_ZN7S4647C63v63Ev,
  (VTBL_ENTRY)&_ZN7S4647C63v64Ev,
  (VTBL_ENTRY)&_ZN7S4647C63v65Ev,
  (VTBL_ENTRY)&_ZN7S4647C63v66Ev,
  (VTBL_ENTRY)&_ZN7S4647C63v67Ev,
};
extern VTBL_ENTRY _ZTI7S4647C6[];
extern  VTBL_ENTRY _ZTV7S4647C6[];
Class_Descriptor cd_S4647C6 = {  "S4647C6", // class name
  0,0,//no base classes
  &(vtc_S4647C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S4647C6),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4647C6),10, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4647C7  {
  virtual  ~S4647C7(); // _ZN7S4647C7D1Ev
  virtual void  v68(); // _ZN7S4647C73v68Ev
  virtual void  v69(); // _ZN7S4647C73v69Ev
  virtual void  v70(); // _ZN7S4647C73v70Ev
  S4647C7(); // tgen
};
//SIG(-1 S4647C7) C1{ vd v1 v2 v3}


 S4647C7 ::~S4647C7(){ note_dtor("S4647C7", this);}
void  S4647C7 ::v68(){vfunc_called(this, "_ZN7S4647C73v68Ev");}
void  S4647C7 ::v69(){vfunc_called(this, "_ZN7S4647C73v69Ev");}
void  S4647C7 ::v70(){vfunc_called(this, "_ZN7S4647C73v70Ev");}
S4647C7 ::S4647C7(){ note_ctor("S4647C7", this);} // tgen

static void Test_S4647C7()
{
  extern Class_Descriptor cd_S4647C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S4647C7, buf);
    S4647C7 *dp, &lv = *(dp=new (buf) S4647C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S4647C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4647C7)");
    test_class_info(&lv, &cd_S4647C7);
    dp->~S4647C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4647C7(Test_S4647C7, "S4647C7", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S4647C7C1Ev();
extern void _ZN7S4647C7D1Ev();
Name_Map name_map_S4647C7[] = {
  NSPAIR(_ZN7S4647C7C1Ev),
  NSPAIR(_ZN7S4647C7D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4647C7[];
extern void _ZN7S4647C7D1Ev();
extern void _ZN7S4647C7D0Ev();
extern void _ZN7S4647C73v68Ev();
extern void _ZN7S4647C73v69Ev();
extern void _ZN7S4647C73v70Ev();
static  VTBL_ENTRY vtc_S4647C7[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4647C7[0]),
  (VTBL_ENTRY)&_ZN7S4647C7D1Ev,
  (VTBL_ENTRY)&_ZN7S4647C7D0Ev,
  (VTBL_ENTRY)&_ZN7S4647C73v68Ev,
  (VTBL_ENTRY)&_ZN7S4647C73v69Ev,
  (VTBL_ENTRY)&_ZN7S4647C73v70Ev,
};
extern VTBL_ENTRY _ZTI7S4647C7[];
extern  VTBL_ENTRY _ZTV7S4647C7[];
Class_Descriptor cd_S4647C7 = {  "S4647C7", // class name
  0,0,//no base classes
  &(vtc_S4647C7[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S4647C7),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4647C7),7, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4647C10  {
  long s4647c10f0[5];
  void *s4647c10f1;
};
//SIG(-1 S4647C10) C1{ Fl[5] Fp}



static void Test_S4647C10()
{
  {
    init_simple_test("S4647C10");
    S4647C10 lv;
    check2(sizeof(lv), ABISELECT(48,24), "sizeof(S4647C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4647C10)");
    check_field_offset(lv, s4647c10f0, 0, "S4647C10.s4647c10f0");
    check_field_offset(lv, s4647c10f1, ABISELECT(40,20), "S4647C10.s4647c10f1");
  }
}
static Arrange_To_Call_Me vS4647C10(Test_S4647C10, "S4647C10", ABISELECT(48,24));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4647C11_nt  {
  char s4647c11f0[2];
};
//SIG(-1 S4647C11_nt) C1{ Fc[2]}



//skip512 S4647C11_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4647C1  : S4647C2 , S4647C5 , S4647C6 , S4647C7 , S4666C9_nt {
  void *s4647c1f0[2];
  __tsi64 s4647c1f1;
  ::S4666C13_nt s4647c1f2;
  int s4647c1f3;
  long s4647c1f4;
  ::S4647C10 s4647c1f5;
  long s4647c1f6[2];
  ::S4647C11_nt s4647c1f7;
  __tsi64 s4647c1f8[5];
  int s4647c1f9[2];
  __tsi64 s4647c1f10;
  char s4647c1f11[2];
  void *s4647c1f12;
  int s4647c1f13[9];
  ::S4666C14 s4647c1f14;
  void *s4647c1f15[3];
  virtual  ~S4647C1(); // _ZN7S4647C1D1Ev
  virtual void  v1(); // _ZN7S4647C12v1Ev
  virtual void  v2(); // _ZN7S4647C12v2Ev
  virtual void  v3(); // _ZN7S4647C12v3Ev
  virtual void  v4(); // _ZN7S4647C12v4Ev
  virtual void  v5(); // _ZN7S4647C12v5Ev
  virtual void  v6(); // _ZN7S4647C12v6Ev
  virtual void  v7(); // _ZN7S4647C12v7Ev
  virtual void  v8(); // _ZN7S4647C12v8Ev
  virtual void  v9(); // _ZN7S4647C12v9Ev
  virtual void  v10(); // _ZN7S4647C13v10Ev
  virtual void  v11(); // _ZN7S4647C13v11Ev
  virtual void  v12(); // _ZN7S4647C13v12Ev
  virtual void  v13(); // _ZN7S4647C13v13Ev
  virtual void  v14(); // _ZN7S4647C13v14Ev
  virtual void  v15(); // _ZN7S4647C13v15Ev
  virtual void  v16(); // _ZN7S4647C13v16Ev
  virtual void  v17(); // _ZN7S4647C13v17Ev
  virtual void  v18(); // _ZN7S4647C13v18Ev
  virtual void  v19(); // _ZN7S4647C13v19Ev
  S4647C1(); // tgen
};
//SIG(1 S4647C1) C1{ BC2{ BC3{ vd v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45} vd v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 Fp[2] Fi[4] FC4{ Fi[2]} Fp Fc Fp} BC5{ vd v60 v61 Fp Fc[32] Fi[6] Fc Fi[2]} BC6{ vd v62 v63 v64 v65 v66 v67} BC7{ vd v68 v69 v70} BC8{ m Fp Fi} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 Fp[2] FL FC9{ FL} Fi Fl FC10{ Fl[5] Fp} Fl[2] FC11{ Fc[2]} FL[5] Fi[2] FL Fc[2] Fp Fi[9] FC12{ Fl FL Fl Fi Fl[3] FL[2] Fl} Fp[3]}


 S4647C1 ::~S4647C1(){ note_dtor("S4647C1", this);}
void  S4647C1 ::v1(){vfunc_called(this, "_ZN7S4647C12v1Ev");}
void  S4647C1 ::v2(){vfunc_called(this, "_ZN7S4647C12v2Ev");}
void  S4647C1 ::v3(){vfunc_called(this, "_ZN7S4647C12v3Ev");}
void  S4647C1 ::v4(){vfunc_called(this, "_ZN7S4647C12v4Ev");}
void  S4647C1 ::v5(){vfunc_called(this, "_ZN7S4647C12v5Ev");}
void  S4647C1 ::v6(){vfunc_called(this, "_ZN7S4647C12v6Ev");}
void  S4647C1 ::v7(){vfunc_called(this, "_ZN7S4647C12v7Ev");}
void  S4647C1 ::v8(){vfunc_called(this, "_ZN7S4647C12v8Ev");}
void  S4647C1 ::v9(){vfunc_called(this, "_ZN7S4647C12v9Ev");}
void  S4647C1 ::v10(){vfunc_called(this, "_ZN7S4647C13v10Ev");}
void  S4647C1 ::v11(){vfunc_called(this, "_ZN7S4647C13v11Ev");}
void  S4647C1 ::v12(){vfunc_called(this, "_ZN7S4647C13v12Ev");}
void  S4647C1 ::v13(){vfunc_called(this, "_ZN7S4647C13v13Ev");}
void  S4647C1 ::v14(){vfunc_called(this, "_ZN7S4647C13v14Ev");}
void  S4647C1 ::v15(){vfunc_called(this, "_ZN7S4647C13v15Ev");}
void  S4647C1 ::v16(){vfunc_called(this, "_ZN7S4647C13v16Ev");}
void  S4647C1 ::v17(){vfunc_called(this, "_ZN7S4647C13v17Ev");}
void  S4647C1 ::v18(){vfunc_called(this, "_ZN7S4647C13v18Ev");}
void  S4647C1 ::v19(){vfunc_called(this, "_ZN7S4647C13v19Ev");}
S4647C1 ::S4647C1(){ note_ctor("S4647C1", this);} // tgen

static void Test_S4647C1()
{
  extern Class_Descriptor cd_S4647C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(67,94)];
    init_test(&cd_S4647C1, buf);
    S4647C1 *dp, &lv = *(dp=new (buf) S4647C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(528,372), "sizeof(S4647C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4647C1)");
    check_base_class_offset(lv, (S4647C3*)(S4647C2*), 0, "S4647C1");
    check_base_class_offset(lv, (S4647C2*), 0, "S4647C1");
    check_base_class_offset(lv, (S4647C5*), ABISELECT(72,48), "S4647C1");
    check_base_class_offset(lv, (S4647C6*), ABISELECT(160,124), "S4647C1");
    check_base_class_offset(lv, (S4647C7*), ABISELECT(168,128), "S4647C1");
    check_base_class_offset(lv, (S4666C9_nt*), ABISELECT(176,132), "S4647C1");
    check_field_offset(lv, s4647c1f0, ABISELECT(192,140), "S4647C1.s4647c1f0");
    check_field_offset(lv, s4647c1f1, ABISELECT(208,148), "S4647C1.s4647c1f1");
    check_field_offset(lv, s4647c1f2, ABISELECT(216,156), "S4647C1.s4647c1f2");
    check_field_offset(lv, s4647c1f3, ABISELECT(224,164), "S4647C1.s4647c1f3");
    check_field_offset(lv, s4647c1f4, ABISELECT(232,168), "S4647C1.s4647c1f4");
    check_field_offset(lv, s4647c1f5, ABISELECT(240,172), "S4647C1.s4647c1f5");
    check_field_offset(lv, s4647c1f6, ABISELECT(288,196), "S4647C1.s4647c1f6");
    check_field_offset(lv, s4647c1f7, ABISELECT(304,204), "S4647C1.s4647c1f7");
    check_field_offset(lv, s4647c1f8, ABISELECT(312,208), "S4647C1.s4647c1f8");
    check_field_offset(lv, s4647c1f9, ABISELECT(352,248), "S4647C1.s4647c1f9");
    check_field_offset(lv, s4647c1f10, ABISELECT(360,256), "S4647C1.s4647c1f10");
    check_field_offset(lv, s4647c1f11, ABISELECT(368,264), "S4647C1.s4647c1f11");
    check_field_offset(lv, s4647c1f12, ABISELECT(376,268), "S4647C1.s4647c1f12");
    check_field_offset(lv, s4647c1f13, ABISELECT(384,272), "S4647C1.s4647c1f13");
    check_field_offset(lv, s4647c1f14, ABISELECT(424,308), "S4647C1.s4647c1f14");
    check_field_offset(lv, s4647c1f15, ABISELECT(504,360), "S4647C1.s4647c1f15");
    test_class_info(&lv, &cd_S4647C1);
    dp->~S4647C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4647C1(Test_S4647C1, "S4647C1", ABISELECT(528,372));

#else // __cplusplus

extern void _ZN7S4647C1C1Ev();
extern void _ZN7S4647C1D1Ev();
Name_Map name_map_S4647C1[] = {
  NSPAIR(_ZN7S4647C1C1Ev),
  NSPAIR(_ZN7S4647C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4647C3;
extern VTBL_ENTRY _ZTI7S4647C3[];
extern  VTBL_ENTRY _ZTV7S4647C3[];
extern Class_Descriptor cd_S4647C2;
extern VTBL_ENTRY _ZTI7S4647C2[];
extern  VTBL_ENTRY _ZTV7S4647C2[];
extern Class_Descriptor cd_S4647C5;
extern VTBL_ENTRY _ZTI7S4647C5[];
extern  VTBL_ENTRY _ZTV7S4647C5[];
extern Class_Descriptor cd_S4647C6;
extern VTBL_ENTRY _ZTI7S4647C6[];
extern  VTBL_ENTRY _ZTV7S4647C6[];
extern Class_Descriptor cd_S4647C7;
extern VTBL_ENTRY _ZTI7S4647C7[];
extern  VTBL_ENTRY _ZTV7S4647C7[];
extern Class_Descriptor cd_S4666C9_nt;
extern VTBL_ENTRY _ZTI10S4666C9_nt[];
static Base_Class bases_S4647C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4647C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S4647C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S4647C5,    ABISELECT(72,48), //bcp->offset
    63, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S4647C6,    ABISELECT(160,124), //bcp->offset
    69, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S4647C7,    ABISELECT(168,128), //bcp->offset
    79, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S4666C9_nt,    ABISELECT(176,132), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4647C1[];
extern void _ZN7S4647C1D1Ev();
extern void _ZN7S4647C1D0Ev();
extern void _ZN7S4647C33v20Ev();
extern void _ZN7S4647C33v21Ev();
extern void _ZN7S4647C33v22Ev();
extern void _ZN7S4647C33v23Ev();
extern void _ZN7S4647C33v24Ev();
extern void _ZN7S4647C33v25Ev();
extern void _ZN7S4647C33v26Ev();
extern void _ZN7S4647C33v27Ev();
extern void _ZN7S4647C33v28Ev();
extern void _ZN7S4647C33v29Ev();
extern void _ZN7S4647C33v30Ev();
extern void _ZN7S4647C33v31Ev();
extern void _ZN7S4647C33v32Ev();
extern void _ZN7S4647C33v33Ev();
extern void _ZN7S4647C33v34Ev();
extern void _ZN7S4647C33v35Ev();
extern void _ZN7S4647C33v36Ev();
extern void _ZN7S4647C33v37Ev();
extern void _ZN7S4647C33v38Ev();
extern void _ZN7S4647C33v39Ev();
extern void _ZN7S4647C33v40Ev();
extern void _ZN7S4647C33v41Ev();
extern void _ZN7S4647C33v42Ev();
extern void _ZN7S4647C33v43Ev();
extern void _ZN7S4647C33v44Ev();
extern void _ZN7S4647C33v45Ev();
extern void _ZN7S4647C23v46Ev();
extern void _ZN7S4647C23v47Ev();
extern void _ZN7S4647C23v48Ev();
extern void _ZN7S4647C23v49Ev();
extern void _ZN7S4647C23v50Ev();
extern void _ZN7S4647C23v51Ev();
extern void _ZN7S4647C23v52Ev();
extern void _ZN7S4647C23v53Ev();
extern void _ZN7S4647C23v54Ev();
extern void _ZN7S4647C23v55Ev();
extern void _ZN7S4647C23v56Ev();
extern void _ZN7S4647C23v57Ev();
extern void _ZN7S4647C23v58Ev();
extern void _ZN7S4647C23v59Ev();
extern void _ZN7S4647C12v1Ev();
extern void _ZN7S4647C12v2Ev();
extern void _ZN7S4647C12v3Ev();
extern void _ZN7S4647C12v4Ev();
extern void _ZN7S4647C12v5Ev();
extern void _ZN7S4647C12v6Ev();
extern void _ZN7S4647C12v7Ev();
extern void _ZN7S4647C12v8Ev();
extern void _ZN7S4647C12v9Ev();
extern void _ZN7S4647C13v10Ev();
extern void _ZN7S4647C13v11Ev();
extern void _ZN7S4647C13v12Ev();
extern void _ZN7S4647C13v13Ev();
extern void _ZN7S4647C13v14Ev();
extern void _ZN7S4647C13v15Ev();
extern void _ZN7S4647C13v16Ev();
extern void _ZN7S4647C13v17Ev();
extern void _ZN7S4647C13v18Ev();
extern void _ZN7S4647C13v19Ev();
extern void ABISELECT(_ZThn72_N7S4647C1D1Ev,_ZThn48_N7S4647C1D1Ev)();
extern void ABISELECT(_ZThn72_N7S4647C1D0Ev,_ZThn48_N7S4647C1D0Ev)();
extern void _ZN7S4647C53v60Ev();
extern void _ZN7S4647C53v61Ev();
extern void ABISELECT(_ZThn160_N7S4647C1D1Ev,_ZThn124_N7S4647C1D1Ev)();
extern void ABISELECT(_ZThn160_N7S4647C1D0Ev,_ZThn124_N7S4647C1D0Ev)();
extern void _ZN7S4647C63v62Ev();
extern void _ZN7S4647C63v63Ev();
extern void _ZN7S4647C63v64Ev();
extern void _ZN7S4647C63v65Ev();
extern void _ZN7S4647C63v66Ev();
extern void _ZN7S4647C63v67Ev();
extern void ABISELECT(_ZThn168_N7S4647C1D1Ev,_ZThn128_N7S4647C1D1Ev)();
extern void ABISELECT(_ZThn168_N7S4647C1D0Ev,_ZThn128_N7S4647C1D0Ev)();
extern void _ZN7S4647C73v68Ev();
extern void _ZN7S4647C73v69Ev();
extern void _ZN7S4647C73v70Ev();
static  VTBL_ENTRY vtc_S4647C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4647C1[0]),
  (VTBL_ENTRY)&_ZN7S4647C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4647C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4647C33v20Ev,
  (VTBL_ENTRY)&_ZN7S4647C33v21Ev,
  (VTBL_ENTRY)&_ZN7S4647C33v22Ev,
  (VTBL_ENTRY)&_ZN7S4647C33v23Ev,
  (VTBL_ENTRY)&_ZN7S4647C33v24Ev,
  (VTBL_ENTRY)&_ZN7S4647C33v25Ev,
  (VTBL_ENTRY)&_ZN7S4647C33v26Ev,
  (VTBL_ENTRY)&_ZN7S4647C33v27Ev,
  (VTBL_ENTRY)&_ZN7S4647C33v28Ev,
  (VTBL_ENTRY)&_ZN7S4647C33v29Ev,
  (VTBL_ENTRY)&_ZN7S4647C33v30Ev,
  (VTBL_ENTRY)&_ZN7S4647C33v31Ev,
  (VTBL_ENTRY)&_ZN7S4647C33v32Ev,
  (VTBL_ENTRY)&_ZN7S4647C33v33Ev,
  (VTBL_ENTRY)&_ZN7S4647C33v34Ev,
  (VTBL_ENTRY)&_ZN7S4647C33v35Ev,
  (VTBL_ENTRY)&_ZN7S4647C33v36Ev,
  (VTBL_ENTRY)&_ZN7S4647C33v37Ev,
  (VTBL_ENTRY)&_ZN7S4647C33v38Ev,
  (VTBL_ENTRY)&_ZN7S4647C33v39Ev,
  (VTBL_ENTRY)&_ZN7S4647C33v40Ev,
  (VTBL_ENTRY)&_ZN7S4647C33v41Ev,
  (VTBL_ENTRY)&_ZN7S4647C33v42Ev,
  (VTBL_ENTRY)&_ZN7S4647C33v43Ev,
  (VTBL_ENTRY)&_ZN7S4647C33v44Ev,
  (VTBL_ENTRY)&_ZN7S4647C33v45Ev,
  (VTBL_ENTRY)&_ZN7S4647C23v46Ev,
  (VTBL_ENTRY)&_ZN7S4647C23v47Ev,
  (VTBL_ENTRY)&_ZN7S4647C23v48Ev,
  (VTBL_ENTRY)&_ZN7S4647C23v49Ev,
  (VTBL_ENTRY)&_ZN7S4647C23v50Ev,
  (VTBL_ENTRY)&_ZN7S4647C23v51Ev,
  (VTBL_ENTRY)&_ZN7S4647C23v52Ev,
  (VTBL_ENTRY)&_ZN7S4647C23v53Ev,
  (VTBL_ENTRY)&_ZN7S4647C23v54Ev,
  (VTBL_ENTRY)&_ZN7S4647C23v55Ev,
  (VTBL_ENTRY)&_ZN7S4647C23v56Ev,
  (VTBL_ENTRY)&_ZN7S4647C23v57Ev,
  (VTBL_ENTRY)&_ZN7S4647C23v58Ev,
  (VTBL_ENTRY)&_ZN7S4647C23v59Ev,
  (VTBL_ENTRY)&_ZN7S4647C12v1Ev,
  (VTBL_ENTRY)&_ZN7S4647C12v2Ev,
  (VTBL_ENTRY)&_ZN7S4647C12v3Ev,
  (VTBL_ENTRY)&_ZN7S4647C12v4Ev,
  (VTBL_ENTRY)&_ZN7S4647C12v5Ev,
  (VTBL_ENTRY)&_ZN7S4647C12v6Ev,
  (VTBL_ENTRY)&_ZN7S4647C12v7Ev,
  (VTBL_ENTRY)&_ZN7S4647C12v8Ev,
  (VTBL_ENTRY)&_ZN7S4647C12v9Ev,
  (VTBL_ENTRY)&_ZN7S4647C13v10Ev,
  (VTBL_ENTRY)&_ZN7S4647C13v11Ev,
  (VTBL_ENTRY)&_ZN7S4647C13v12Ev,
  (VTBL_ENTRY)&_ZN7S4647C13v13Ev,
  (VTBL_ENTRY)&_ZN7S4647C13v14Ev,
  (VTBL_ENTRY)&_ZN7S4647C13v15Ev,
  (VTBL_ENTRY)&_ZN7S4647C13v16Ev,
  (VTBL_ENTRY)&_ZN7S4647C13v17Ev,
  (VTBL_ENTRY)&_ZN7S4647C13v18Ev,
  (VTBL_ENTRY)&_ZN7S4647C13v19Ev,
  ABISELECT(-72,-48),
  (VTBL_ENTRY)&(_ZTI7S4647C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn72_N7S4647C1D1Ev,_ZThn48_N7S4647C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn72_N7S4647C1D0Ev,_ZThn48_N7S4647C1D0Ev),
  (VTBL_ENTRY)&_ZN7S4647C53v60Ev,
  (VTBL_ENTRY)&_ZN7S4647C53v61Ev,
  ABISELECT(-160,-124),
  (VTBL_ENTRY)&(_ZTI7S4647C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn160_N7S4647C1D1Ev,_ZThn124_N7S4647C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn160_N7S4647C1D0Ev,_ZThn124_N7S4647C1D0Ev),
  (VTBL_ENTRY)&_ZN7S4647C63v62Ev,
  (VTBL_ENTRY)&_ZN7S4647C63v63Ev,
  (VTBL_ENTRY)&_ZN7S4647C63v64Ev,
  (VTBL_ENTRY)&_ZN7S4647C63v65Ev,
  (VTBL_ENTRY)&_ZN7S4647C63v66Ev,
  (VTBL_ENTRY)&_ZN7S4647C63v67Ev,
  ABISELECT(-168,-128),
  (VTBL_ENTRY)&(_ZTI7S4647C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn168_N7S4647C1D1Ev,_ZThn128_N7S4647C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn168_N7S4647C1D0Ev,_ZThn128_N7S4647C1D0Ev),
  (VTBL_ENTRY)&_ZN7S4647C73v68Ev,
  (VTBL_ENTRY)&_ZN7S4647C73v69Ev,
  (VTBL_ENTRY)&_ZN7S4647C73v70Ev,
};
extern VTBL_ENTRY _ZTI7S4647C1[];
extern  VTBL_ENTRY _ZTV7S4647C1[];
Class_Descriptor cd_S4647C1 = {  "S4647C1", // class name
  bases_S4647C1, 6,
  &(vtc_S4647C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(528,372), // object size
  NSPAIRA(_ZTI7S4647C1),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV7S4647C1),86, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  5, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4659C3  {
  virtual  ~S4659C3(); // _ZN7S4659C3D1Ev
  virtual void  v21(); // _ZN7S4659C33v21Ev
  virtual void  v22(); // _ZN7S4659C33v22Ev
  virtual void  v23(); // _ZN7S4659C33v23Ev
  virtual void  v24(); // _ZN7S4659C33v24Ev
  virtual void  v25(); // _ZN7S4659C33v25Ev
  virtual void  v26(); // _ZN7S4659C33v26Ev
  virtual void  v27(); // _ZN7S4659C33v27Ev
  virtual void  v28(); // _ZN7S4659C33v28Ev
  virtual void  v29(); // _ZN7S4659C33v29Ev
  virtual void  v30(); // _ZN7S4659C33v30Ev
  virtual void  v31(); // _ZN7S4659C33v31Ev
  virtual void  v32(); // _ZN7S4659C33v32Ev
  virtual void  v33(); // _ZN7S4659C33v33Ev
  virtual void  v34(); // _ZN7S4659C33v34Ev
  virtual void  v35(); // _ZN7S4659C33v35Ev
  virtual void  v36(); // _ZN7S4659C33v36Ev
  virtual void  v37(); // _ZN7S4659C33v37Ev
  virtual void  v38(); // _ZN7S4659C33v38Ev
  virtual void  v39(); // _ZN7S4659C33v39Ev
  virtual void  v40(); // _ZN7S4659C33v40Ev
  virtual void  v41(); // _ZN7S4659C33v41Ev
  virtual void  v42(); // _ZN7S4659C33v42Ev
  virtual void  v43(); // _ZN7S4659C33v43Ev
  virtual void  v44(); // _ZN7S4659C33v44Ev
  virtual void  v45(); // _ZN7S4659C33v45Ev
  virtual void  v46(); // _ZN7S4659C33v46Ev
  S4659C3(); // tgen
};
//SIG(-1 S4659C3) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26}


 S4659C3 ::~S4659C3(){ note_dtor("S4659C3", this);}
void  S4659C3 ::v21(){vfunc_called(this, "_ZN7S4659C33v21Ev");}
void  S4659C3 ::v22(){vfunc_called(this, "_ZN7S4659C33v22Ev");}
void  S4659C3 ::v23(){vfunc_called(this, "_ZN7S4659C33v23Ev");}
void  S4659C3 ::v24(){vfunc_called(this, "_ZN7S4659C33v24Ev");}
void  S4659C3 ::v25(){vfunc_called(this, "_ZN7S4659C33v25Ev");}
void  S4659C3 ::v26(){vfunc_called(this, "_ZN7S4659C33v26Ev");}
void  S4659C3 ::v27(){vfunc_called(this, "_ZN7S4659C33v27Ev");}
void  S4659C3 ::v28(){vfunc_called(this, "_ZN7S4659C33v28Ev");}
void  S4659C3 ::v29(){vfunc_called(this, "_ZN7S4659C33v29Ev");}
void  S4659C3 ::v30(){vfunc_called(this, "_ZN7S4659C33v30Ev");}
void  S4659C3 ::v31(){vfunc_called(this, "_ZN7S4659C33v31Ev");}
void  S4659C3 ::v32(){vfunc_called(this, "_ZN7S4659C33v32Ev");}
void  S4659C3 ::v33(){vfunc_called(this, "_ZN7S4659C33v33Ev");}
void  S4659C3 ::v34(){vfunc_called(this, "_ZN7S4659C33v34Ev");}
void  S4659C3 ::v35(){vfunc_called(this, "_ZN7S4659C33v35Ev");}
void  S4659C3 ::v36(){vfunc_called(this, "_ZN7S4659C33v36Ev");}
void  S4659C3 ::v37(){vfunc_called(this, "_ZN7S4659C33v37Ev");}
void  S4659C3 ::v38(){vfunc_called(this, "_ZN7S4659C33v38Ev");}
void  S4659C3 ::v39(){vfunc_called(this, "_ZN7S4659C33v39Ev");}
void  S4659C3 ::v40(){vfunc_called(this, "_ZN7S4659C33v40Ev");}
void  S4659C3 ::v41(){vfunc_called(this, "_ZN7S4659C33v41Ev");}
void  S4659C3 ::v42(){vfunc_called(this, "_ZN7S4659C33v42Ev");}
void  S4659C3 ::v43(){vfunc_called(this, "_ZN7S4659C33v43Ev");}
void  S4659C3 ::v44(){vfunc_called(this, "_ZN7S4659C33v44Ev");}
void  S4659C3 ::v45(){vfunc_called(this, "_ZN7S4659C33v45Ev");}
void  S4659C3 ::v46(){vfunc_called(this, "_ZN7S4659C33v46Ev");}
S4659C3 ::S4659C3(){ note_ctor("S4659C3", this);} // tgen

static void Test_S4659C3()
{
  extern Class_Descriptor cd_S4659C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S4659C3, buf);
    S4659C3 *dp, &lv = *(dp=new (buf) S4659C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S4659C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4659C3)");
    test_class_info(&lv, &cd_S4659C3);
    dp->~S4659C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4659C3(Test_S4659C3, "S4659C3", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S4659C3C1Ev();
extern void _ZN7S4659C3D1Ev();
Name_Map name_map_S4659C3[] = {
  NSPAIR(_ZN7S4659C3C1Ev),
  NSPAIR(_ZN7S4659C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4659C3[];
extern void _ZN7S4659C3D1Ev();
extern void _ZN7S4659C3D0Ev();
extern void _ZN7S4659C33v21Ev();
extern void _ZN7S4659C33v22Ev();
extern void _ZN7S4659C33v23Ev();
extern void _ZN7S4659C33v24Ev();
extern void _ZN7S4659C33v25Ev();
extern void _ZN7S4659C33v26Ev();
extern void _ZN7S4659C33v27Ev();
extern void _ZN7S4659C33v28Ev();
extern void _ZN7S4659C33v29Ev();
extern void _ZN7S4659C33v30Ev();
extern void _ZN7S4659C33v31Ev();
extern void _ZN7S4659C33v32Ev();
extern void _ZN7S4659C33v33Ev();
extern void _ZN7S4659C33v34Ev();
extern void _ZN7S4659C33v35Ev();
extern void _ZN7S4659C33v36Ev();
extern void _ZN7S4659C33v37Ev();
extern void _ZN7S4659C33v38Ev();
extern void _ZN7S4659C33v39Ev();
extern void _ZN7S4659C33v40Ev();
extern void _ZN7S4659C33v41Ev();
extern void _ZN7S4659C33v42Ev();
extern void _ZN7S4659C33v43Ev();
extern void _ZN7S4659C33v44Ev();
extern void _ZN7S4659C33v45Ev();
extern void _ZN7S4659C33v46Ev();
static  VTBL_ENTRY vtc_S4659C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4659C3[0]),
  (VTBL_ENTRY)&_ZN7S4659C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4659C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4659C33v21Ev,
  (VTBL_ENTRY)&_ZN7S4659C33v22Ev,
  (VTBL_ENTRY)&_ZN7S4659C33v23Ev,
  (VTBL_ENTRY)&_ZN7S4659C33v24Ev,
  (VTBL_ENTRY)&_ZN7S4659C33v25Ev,
  (VTBL_ENTRY)&_ZN7S4659C33v26Ev,
  (VTBL_ENTRY)&_ZN7S4659C33v27Ev,
  (VTBL_ENTRY)&_ZN7S4659C33v28Ev,
  (VTBL_ENTRY)&_ZN7S4659C33v29Ev,
  (VTBL_ENTRY)&_ZN7S4659C33v30Ev,
  (VTBL_ENTRY)&_ZN7S4659C33v31Ev,
  (VTBL_ENTRY)&_ZN7S4659C33v32Ev,
  (VTBL_ENTRY)&_ZN7S4659C33v33Ev,
  (VTBL_ENTRY)&_ZN7S4659C33v34Ev,
  (VTBL_ENTRY)&_ZN7S4659C33v35Ev,
  (VTBL_ENTRY)&_ZN7S4659C33v36Ev,
  (VTBL_ENTRY)&_ZN7S4659C33v37Ev,
  (VTBL_ENTRY)&_ZN7S4659C33v38Ev,
  (VTBL_ENTRY)&_ZN7S4659C33v39Ev,
  (VTBL_ENTRY)&_ZN7S4659C33v40Ev,
  (VTBL_ENTRY)&_ZN7S4659C33v41Ev,
  (VTBL_ENTRY)&_ZN7S4659C33v42Ev,
  (VTBL_ENTRY)&_ZN7S4659C33v43Ev,
  (VTBL_ENTRY)&_ZN7S4659C33v44Ev,
  (VTBL_ENTRY)&_ZN7S4659C33v45Ev,
  (VTBL_ENTRY)&_ZN7S4659C33v46Ev,
};
extern VTBL_ENTRY _ZTI7S4659C3[];
extern  VTBL_ENTRY _ZTV7S4659C3[];
Class_Descriptor cd_S4659C3 = {  "S4659C3", // class name
  0,0,//no base classes
  &(vtc_S4659C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S4659C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4659C3),30, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4659C2  : S4659C3 {
  void *s4659c2f0[2];
  int s4659c2f1[4];
  ::S2423C5_nt s4659c2f2;
  void *s4659c2f3;
  char s4659c2f4;
  void *s4659c2f5;
  virtual  ~S4659C2(); // _ZN7S4659C2D1Ev
  virtual void  v47(); // _ZN7S4659C23v47Ev
  virtual void  v48(); // _ZN7S4659C23v48Ev
  virtual void  v49(); // _ZN7S4659C23v49Ev
  virtual void  v50(); // _ZN7S4659C23v50Ev
  virtual void  v51(); // _ZN7S4659C23v51Ev
  virtual void  v52(); // _ZN7S4659C23v52Ev
  virtual void  v53(); // _ZN7S4659C23v53Ev
  virtual void  v54(); // _ZN7S4659C23v54Ev
  virtual void  v55(); // _ZN7S4659C23v55Ev
  virtual void  v56(); // _ZN7S4659C23v56Ev
  virtual void  v57(); // _ZN7S4659C23v57Ev
  virtual void  v58(); // _ZN7S4659C23v58Ev
  virtual void  v59(); // _ZN7S4659C23v59Ev
  virtual void  v60(); // _ZN7S4659C23v60Ev
  S4659C2(); // tgen
};
//SIG(-1 S4659C2) C1{ BC2{ vd v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 Fp[2] Fi[4] FC3{ Fi[2]} Fp Fc Fp}


 S4659C2 ::~S4659C2(){ note_dtor("S4659C2", this);}
void  S4659C2 ::v47(){vfunc_called(this, "_ZN7S4659C23v47Ev");}
void  S4659C2 ::v48(){vfunc_called(this, "_ZN7S4659C23v48Ev");}
void  S4659C2 ::v49(){vfunc_called(this, "_ZN7S4659C23v49Ev");}
void  S4659C2 ::v50(){vfunc_called(this, "_ZN7S4659C23v50Ev");}
void  S4659C2 ::v51(){vfunc_called(this, "_ZN7S4659C23v51Ev");}
void  S4659C2 ::v52(){vfunc_called(this, "_ZN7S4659C23v52Ev");}
void  S4659C2 ::v53(){vfunc_called(this, "_ZN7S4659C23v53Ev");}
void  S4659C2 ::v54(){vfunc_called(this, "_ZN7S4659C23v54Ev");}
void  S4659C2 ::v55(){vfunc_called(this, "_ZN7S4659C23v55Ev");}
void  S4659C2 ::v56(){vfunc_called(this, "_ZN7S4659C23v56Ev");}
void  S4659C2 ::v57(){vfunc_called(this, "_ZN7S4659C23v57Ev");}
void  S4659C2 ::v58(){vfunc_called(this, "_ZN7S4659C23v58Ev");}
void  S4659C2 ::v59(){vfunc_called(this, "_ZN7S4659C23v59Ev");}
void  S4659C2 ::v60(){vfunc_called(this, "_ZN7S4659C23v60Ev");}
S4659C2 ::S4659C2(){ note_ctor("S4659C2", this);} // tgen

static void Test_S4659C2()
{
  extern Class_Descriptor cd_S4659C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,13)];
    init_test(&cd_S4659C2, buf);
    S4659C2 *dp, &lv = *(dp=new (buf) S4659C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,48), "sizeof(S4659C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4659C2)");
    check_base_class_offset(lv, (S4659C3*), 0, "S4659C2");
    check_field_offset(lv, s4659c2f0, ABISELECT(8,4), "S4659C2.s4659c2f0");
    check_field_offset(lv, s4659c2f1, ABISELECT(24,12), "S4659C2.s4659c2f1");
    check_field_offset(lv, s4659c2f2, ABISELECT(40,28), "S4659C2.s4659c2f2");
    check_field_offset(lv, s4659c2f3, ABISELECT(48,36), "S4659C2.s4659c2f3");
    check_field_offset(lv, s4659c2f4, ABISELECT(56,40), "S4659C2.s4659c2f4");
    check_field_offset(lv, s4659c2f5, ABISELECT(64,44), "S4659C2.s4659c2f5");
    test_class_info(&lv, &cd_S4659C2);
    dp->~S4659C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4659C2(Test_S4659C2, "S4659C2", ABISELECT(72,48));

#else // __cplusplus

extern void _ZN7S4659C2C1Ev();
extern void _ZN7S4659C2D1Ev();
Name_Map name_map_S4659C2[] = {
  NSPAIR(_ZN7S4659C2C1Ev),
  NSPAIR(_ZN7S4659C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4659C3;
extern VTBL_ENTRY _ZTI7S4659C3[];
extern  VTBL_ENTRY _ZTV7S4659C3[];
static Base_Class bases_S4659C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4659C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4659C2[];
extern void _ZN7S4659C2D1Ev();
extern void _ZN7S4659C2D0Ev();
extern void _ZN7S4659C33v21Ev();
extern void _ZN7S4659C33v22Ev();
extern void _ZN7S4659C33v23Ev();
extern void _ZN7S4659C33v24Ev();
extern void _ZN7S4659C33v25Ev();
extern void _ZN7S4659C33v26Ev();
extern void _ZN7S4659C33v27Ev();
extern void _ZN7S4659C33v28Ev();
extern void _ZN7S4659C33v29Ev();
extern void _ZN7S4659C33v30Ev();
extern void _ZN7S4659C33v31Ev();
extern void _ZN7S4659C33v32Ev();
extern void _ZN7S4659C33v33Ev();
extern void _ZN7S4659C33v34Ev();
extern void _ZN7S4659C33v35Ev();
extern void _ZN7S4659C33v36Ev();
extern void _ZN7S4659C33v37Ev();
extern void _ZN7S4659C33v38Ev();
extern void _ZN7S4659C33v39Ev();
extern void _ZN7S4659C33v40Ev();
extern void _ZN7S4659C33v41Ev();
extern void _ZN7S4659C33v42Ev();
extern void _ZN7S4659C33v43Ev();
extern void _ZN7S4659C33v44Ev();
extern void _ZN7S4659C33v45Ev();
extern void _ZN7S4659C33v46Ev();
extern void _ZN7S4659C23v47Ev();
extern void _ZN7S4659C23v48Ev();
extern void _ZN7S4659C23v49Ev();
extern void _ZN7S4659C23v50Ev();
extern void _ZN7S4659C23v51Ev();
extern void _ZN7S4659C23v52Ev();
extern void _ZN7S4659C23v53Ev();
extern void _ZN7S4659C23v54Ev();
extern void _ZN7S4659C23v55Ev();
extern void _ZN7S4659C23v56Ev();
extern void _ZN7S4659C23v57Ev();
extern void _ZN7S4659C23v58Ev();
extern void _ZN7S4659C23v59Ev();
extern void _ZN7S4659C23v60Ev();
static  VTBL_ENTRY vtc_S4659C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4659C2[0]),
  (VTBL_ENTRY)&_ZN7S4659C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4659C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4659C33v21Ev,
  (VTBL_ENTRY)&_ZN7S4659C33v22Ev,
  (VTBL_ENTRY)&_ZN7S4659C33v23Ev,
  (VTBL_ENTRY)&_ZN7S4659C33v24Ev,
  (VTBL_ENTRY)&_ZN7S4659C33v25Ev,
  (VTBL_ENTRY)&_ZN7S4659C33v26Ev,
  (VTBL_ENTRY)&_ZN7S4659C33v27Ev,
  (VTBL_ENTRY)&_ZN7S4659C33v28Ev,
  (VTBL_ENTRY)&_ZN7S4659C33v29Ev,
  (VTBL_ENTRY)&_ZN7S4659C33v30Ev,
  (VTBL_ENTRY)&_ZN7S4659C33v31Ev,
  (VTBL_ENTRY)&_ZN7S4659C33v32Ev,
  (VTBL_ENTRY)&_ZN7S4659C33v33Ev,
  (VTBL_ENTRY)&_ZN7S4659C33v34Ev,
  (VTBL_ENTRY)&_ZN7S4659C33v35Ev,
  (VTBL_ENTRY)&_ZN7S4659C33v36Ev,
  (VTBL_ENTRY)&_ZN7S4659C33v37Ev,
  (VTBL_ENTRY)&_ZN7S4659C33v38Ev,
  (VTBL_ENTRY)&_ZN7S4659C33v39Ev,
  (VTBL_ENTRY)&_ZN7S4659C33v40Ev,
  (VTBL_ENTRY)&_ZN7S4659C33v41Ev,
  (VTBL_ENTRY)&_ZN7S4659C33v42Ev,
  (VTBL_ENTRY)&_ZN7S4659C33v43Ev,
  (VTBL_ENTRY)&_ZN7S4659C33v44Ev,
  (VTBL_ENTRY)&_ZN7S4659C33v45Ev,
  (VTBL_ENTRY)&_ZN7S4659C33v46Ev,
  (VTBL_ENTRY)&_ZN7S4659C23v47Ev,
  (VTBL_ENTRY)&_ZN7S4659C23v48Ev,
  (VTBL_ENTRY)&_ZN7S4659C23v49Ev,
  (VTBL_ENTRY)&_ZN7S4659C23v50Ev,
  (VTBL_ENTRY)&_ZN7S4659C23v51Ev,
  (VTBL_ENTRY)&_ZN7S4659C23v52Ev,
  (VTBL_ENTRY)&_ZN7S4659C23v53Ev,
  (VTBL_ENTRY)&_ZN7S4659C23v54Ev,
  (VTBL_ENTRY)&_ZN7S4659C23v55Ev,
  (VTBL_ENTRY)&_ZN7S4659C23v56Ev,
  (VTBL_ENTRY)&_ZN7S4659C23v57Ev,
  (VTBL_ENTRY)&_ZN7S4659C23v58Ev,
  (VTBL_ENTRY)&_ZN7S4659C23v59Ev,
  (VTBL_ENTRY)&_ZN7S4659C23v60Ev,
};
extern VTBL_ENTRY _ZTI7S4659C2[];
extern  VTBL_ENTRY _ZTV7S4659C2[];
Class_Descriptor cd_S4659C2 = {  "S4659C2", // class name
  bases_S4659C2, 1,
  &(vtc_S4659C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,48), // object size
  NSPAIRA(_ZTI7S4659C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4659C2),44, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4659C5  {
  void *s4659c5f0;
  char s4659c5f1[32];
  int s4659c5f2[6];
  char s4659c5f3;
  int s4659c5f4[2];
  virtual  ~S4659C5(); // _ZN7S4659C5D1Ev
  virtual void  v61(); // _ZN7S4659C53v61Ev
  virtual void  v62(); // _ZN7S4659C53v62Ev
  S4659C5(); // tgen
};
//SIG(-1 S4659C5) C1{ vd v1 v2 Fp Fc[32] Fi[6] Fc Fi[2]}


 S4659C5 ::~S4659C5(){ note_dtor("S4659C5", this);}
void  S4659C5 ::v61(){vfunc_called(this, "_ZN7S4659C53v61Ev");}
void  S4659C5 ::v62(){vfunc_called(this, "_ZN7S4659C53v62Ev");}
S4659C5 ::S4659C5(){ note_ctor("S4659C5", this);} // tgen

static void Test_S4659C5()
{
  extern Class_Descriptor cd_S4659C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(12,20)];
    init_test(&cd_S4659C5, buf);
    S4659C5 *dp, &lv = *(dp=new (buf) S4659C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(88,76), "sizeof(S4659C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4659C5)");
    check_field_offset(lv, s4659c5f0, ABISELECT(8,4), "S4659C5.s4659c5f0");
    check_field_offset(lv, s4659c5f1, ABISELECT(16,8), "S4659C5.s4659c5f1");
    check_field_offset(lv, s4659c5f2, ABISELECT(48,40), "S4659C5.s4659c5f2");
    check_field_offset(lv, s4659c5f3, ABISELECT(72,64), "S4659C5.s4659c5f3");
    check_field_offset(lv, s4659c5f4, ABISELECT(76,68), "S4659C5.s4659c5f4");
    test_class_info(&lv, &cd_S4659C5);
    dp->~S4659C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4659C5(Test_S4659C5, "S4659C5", ABISELECT(88,76));

#else // __cplusplus

extern void _ZN7S4659C5C1Ev();
extern void _ZN7S4659C5D1Ev();
Name_Map name_map_S4659C5[] = {
  NSPAIR(_ZN7S4659C5C1Ev),
  NSPAIR(_ZN7S4659C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4659C5[];
extern void _ZN7S4659C5D1Ev();
extern void _ZN7S4659C5D0Ev();
extern void _ZN7S4659C53v61Ev();
extern void _ZN7S4659C53v62Ev();
static  VTBL_ENTRY vtc_S4659C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4659C5[0]),
  (VTBL_ENTRY)&_ZN7S4659C5D1Ev,
  (VTBL_ENTRY)&_ZN7S4659C5D0Ev,
  (VTBL_ENTRY)&_ZN7S4659C53v61Ev,
  (VTBL_ENTRY)&_ZN7S4659C53v62Ev,
};
extern VTBL_ENTRY _ZTI7S4659C5[];
extern  VTBL_ENTRY _ZTV7S4659C5[];
Class_Descriptor cd_S4659C5 = {  "S4659C5", // class name
  0,0,//no base classes
  &(vtc_S4659C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(88,76), // object size
  NSPAIRA(_ZTI7S4659C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4659C5),6, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4659C6  {
  virtual  ~S4659C6(); // _ZN7S4659C6D1Ev
  virtual void  v63(); // _ZN7S4659C63v63Ev
  virtual void  v64(); // _ZN7S4659C63v64Ev
  virtual void  v65(); // _ZN7S4659C63v65Ev
  virtual void  v66(); // _ZN7S4659C63v66Ev
  virtual void  v67(); // _ZN7S4659C63v67Ev
  virtual void  v68(); // _ZN7S4659C63v68Ev
  virtual void  v69(); // _ZN7S4659C63v69Ev
  virtual void  v70(); // _ZN7S4659C63v70Ev
  virtual void  v71(); // _ZN7S4659C63v71Ev
  S4659C6(); // tgen
};
//SIG(-1 S4659C6) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9}


 S4659C6 ::~S4659C6(){ note_dtor("S4659C6", this);}
void  S4659C6 ::v63(){vfunc_called(this, "_ZN7S4659C63v63Ev");}
void  S4659C6 ::v64(){vfunc_called(this, "_ZN7S4659C63v64Ev");}
void  S4659C6 ::v65(){vfunc_called(this, "_ZN7S4659C63v65Ev");}
void  S4659C6 ::v66(){vfunc_called(this, "_ZN7S4659C63v66Ev");}
void  S4659C6 ::v67(){vfunc_called(this, "_ZN7S4659C63v67Ev");}
void  S4659C6 ::v68(){vfunc_called(this, "_ZN7S4659C63v68Ev");}
void  S4659C6 ::v69(){vfunc_called(this, "_ZN7S4659C63v69Ev");}
void  S4659C6 ::v70(){vfunc_called(this, "_ZN7S4659C63v70Ev");}
void  S4659C6 ::v71(){vfunc_called(this, "_ZN7S4659C63v71Ev");}
S4659C6 ::S4659C6(){ note_ctor("S4659C6", this);} // tgen

static void Test_S4659C6()
{
  extern Class_Descriptor cd_S4659C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S4659C6, buf);
    S4659C6 *dp, &lv = *(dp=new (buf) S4659C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S4659C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4659C6)");
    test_class_info(&lv, &cd_S4659C6);
    dp->~S4659C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4659C6(Test_S4659C6, "S4659C6", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S4659C6C1Ev();
extern void _ZN7S4659C6D1Ev();
Name_Map name_map_S4659C6[] = {
  NSPAIR(_ZN7S4659C6C1Ev),
  NSPAIR(_ZN7S4659C6D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4659C6[];
extern void _ZN7S4659C6D1Ev();
extern void _ZN7S4659C6D0Ev();
extern void _ZN7S4659C63v63Ev();
extern void _ZN7S4659C63v64Ev();
extern void _ZN7S4659C63v65Ev();
extern void _ZN7S4659C63v66Ev();
extern void _ZN7S4659C63v67Ev();
extern void _ZN7S4659C63v68Ev();
extern void _ZN7S4659C63v69Ev();
extern void _ZN7S4659C63v70Ev();
extern void _ZN7S4659C63v71Ev();
static  VTBL_ENTRY vtc_S4659C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4659C6[0]),
  (VTBL_ENTRY)&_ZN7S4659C6D1Ev,
  (VTBL_ENTRY)&_ZN7S4659C6D0Ev,
  (VTBL_ENTRY)&_ZN7S4659C63v63Ev,
  (VTBL_ENTRY)&_ZN7S4659C63v64Ev,
  (VTBL_ENTRY)&_ZN7S4659C63v65Ev,
  (VTBL_ENTRY)&_ZN7S4659C63v66Ev,
  (VTBL_ENTRY)&_ZN7S4659C63v67Ev,
  (VTBL_ENTRY)&_ZN7S4659C63v68Ev,
  (VTBL_ENTRY)&_ZN7S4659C63v69Ev,
  (VTBL_ENTRY)&_ZN7S4659C63v70Ev,
  (VTBL_ENTRY)&_ZN7S4659C63v71Ev,
};
extern VTBL_ENTRY _ZTI7S4659C6[];
extern  VTBL_ENTRY _ZTV7S4659C6[];
Class_Descriptor cd_S4659C6 = {  "S4659C6", // class name
  0,0,//no base classes
  &(vtc_S4659C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S4659C6),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4659C6),13, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4659C7  {
  virtual  ~S4659C7(); // _ZN7S4659C7D1Ev
  virtual void  v72(); // _ZN7S4659C73v72Ev
  virtual void  v73(); // _ZN7S4659C73v73Ev
  virtual void  v74(); // _ZN7S4659C73v74Ev
  virtual void  v75(); // _ZN7S4659C73v75Ev
  virtual void  v76(); // _ZN7S4659C73v76Ev
  virtual void  v77(); // _ZN7S4659C73v77Ev
  virtual void  v78(); // _ZN7S4659C73v78Ev
  virtual void  v79(); // _ZN7S4659C73v79Ev
  virtual void  v80(); // _ZN7S4659C73v80Ev
  S4659C7(); // tgen
};
//SIG(-1 S4659C7) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9}


 S4659C7 ::~S4659C7(){ note_dtor("S4659C7", this);}
void  S4659C7 ::v72(){vfunc_called(this, "_ZN7S4659C73v72Ev");}
void  S4659C7 ::v73(){vfunc_called(this, "_ZN7S4659C73v73Ev");}
void  S4659C7 ::v74(){vfunc_called(this, "_ZN7S4659C73v74Ev");}
void  S4659C7 ::v75(){vfunc_called(this, "_ZN7S4659C73v75Ev");}
void  S4659C7 ::v76(){vfunc_called(this, "_ZN7S4659C73v76Ev");}
void  S4659C7 ::v77(){vfunc_called(this, "_ZN7S4659C73v77Ev");}
void  S4659C7 ::v78(){vfunc_called(this, "_ZN7S4659C73v78Ev");}
void  S4659C7 ::v79(){vfunc_called(this, "_ZN7S4659C73v79Ev");}
void  S4659C7 ::v80(){vfunc_called(this, "_ZN7S4659C73v80Ev");}
S4659C7 ::S4659C7(){ note_ctor("S4659C7", this);} // tgen

static void Test_S4659C7()
{
  extern Class_Descriptor cd_S4659C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S4659C7, buf);
    S4659C7 *dp, &lv = *(dp=new (buf) S4659C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S4659C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4659C7)");
    test_class_info(&lv, &cd_S4659C7);
    dp->~S4659C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4659C7(Test_S4659C7, "S4659C7", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S4659C7C1Ev();
extern void _ZN7S4659C7D1Ev();
Name_Map name_map_S4659C7[] = {
  NSPAIR(_ZN7S4659C7C1Ev),
  NSPAIR(_ZN7S4659C7D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4659C7[];
extern void _ZN7S4659C7D1Ev();
extern void _ZN7S4659C7D0Ev();
extern void _ZN7S4659C73v72Ev();
extern void _ZN7S4659C73v73Ev();
extern void _ZN7S4659C73v74Ev();
extern void _ZN7S4659C73v75Ev();
extern void _ZN7S4659C73v76Ev();
extern void _ZN7S4659C73v77Ev();
extern void _ZN7S4659C73v78Ev();
extern void _ZN7S4659C73v79Ev();
extern void _ZN7S4659C73v80Ev();
static  VTBL_ENTRY vtc_S4659C7[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4659C7[0]),
  (VTBL_ENTRY)&_ZN7S4659C7D1Ev,
  (VTBL_ENTRY)&_ZN7S4659C7D0Ev,
  (VTBL_ENTRY)&_ZN7S4659C73v72Ev,
  (VTBL_ENTRY)&_ZN7S4659C73v73Ev,
  (VTBL_ENTRY)&_ZN7S4659C73v74Ev,
  (VTBL_ENTRY)&_ZN7S4659C73v75Ev,
  (VTBL_ENTRY)&_ZN7S4659C73v76Ev,
  (VTBL_ENTRY)&_ZN7S4659C73v77Ev,
  (VTBL_ENTRY)&_ZN7S4659C73v78Ev,
  (VTBL_ENTRY)&_ZN7S4659C73v79Ev,
  (VTBL_ENTRY)&_ZN7S4659C73v80Ev,
};
extern VTBL_ENTRY _ZTI7S4659C7[];
extern  VTBL_ENTRY _ZTV7S4659C7[];
Class_Descriptor cd_S4659C7 = {  "S4659C7", // class name
  0,0,//no base classes
  &(vtc_S4659C7[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S4659C7),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4659C7),13, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4659C1  : S4659C2 , S4659C5 , S4659C6 , S4659C7 {
  void *s4659c1f0[2];
  __tsi64 s4659c1f1[4];
  char s4659c1f2[3];
  __tsi64 s4659c1f3[3];
  int s4659c1f4;
  char s4659c1f5;
  __tsi64 s4659c1f6;
  char s4659c1f7[2];
  __tsi64 s4659c1f8[3];
  int s4659c1f9;
  long s4659c1f10[3];
  int s4659c1f11;
  void *s4659c1f12;
  long s4659c1f13;
  void *s4659c1f14[2];
  virtual  ~S4659C1(); // _ZN7S4659C1D1Ev
  virtual void  v1(); // _ZN7S4659C12v1Ev
  virtual void  v2(); // _ZN7S4659C12v2Ev
  virtual void  v3(); // _ZN7S4659C12v3Ev
  virtual void  v4(); // _ZN7S4659C12v4Ev
  virtual void  v5(); // _ZN7S4659C12v5Ev
  virtual void  v6(); // _ZN7S4659C12v6Ev
  virtual void  v7(); // _ZN7S4659C12v7Ev
  virtual void  v8(); // _ZN7S4659C12v8Ev
  virtual void  v9(); // _ZN7S4659C12v9Ev
  virtual void  v10(); // _ZN7S4659C13v10Ev
  virtual void  v11(); // _ZN7S4659C13v11Ev
  virtual void  v12(); // _ZN7S4659C13v12Ev
  virtual void  v13(); // _ZN7S4659C13v13Ev
  virtual void  v14(); // _ZN7S4659C13v14Ev
  virtual void  v15(); // _ZN7S4659C13v15Ev
  virtual void  v16(); // _ZN7S4659C13v16Ev
  virtual void  v17(); // _ZN7S4659C13v17Ev
  virtual void  v18(); // _ZN7S4659C13v18Ev
  virtual void  v19(); // _ZN7S4659C13v19Ev
  virtual void  v20(); // _ZN7S4659C13v20Ev
  S4659C1(); // tgen
};
//SIG(1 S4659C1) C1{ BC2{ BC3{ vd v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46} vd v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 Fp[2] Fi[4] FC4{ Fi[2]} Fp Fc Fp} BC5{ vd v61 v62 Fp Fc[32] Fi[6] Fc Fi[2]} BC6{ vd v63 v64 v65 v66 v67 v68 v69 v70 v71} BC7{ vd v72 v73 v74 v75 v76 v77 v78 v79 v80} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 Fp[2] FL[4] Fc[3] FL[3] Fi Fc FL Fc[2] FL[3] Fi Fl[3] Fi Fp Fl Fp[2]}


 S4659C1 ::~S4659C1(){ note_dtor("S4659C1", this);}
void  S4659C1 ::v1(){vfunc_called(this, "_ZN7S4659C12v1Ev");}
void  S4659C1 ::v2(){vfunc_called(this, "_ZN7S4659C12v2Ev");}
void  S4659C1 ::v3(){vfunc_called(this, "_ZN7S4659C12v3Ev");}
void  S4659C1 ::v4(){vfunc_called(this, "_ZN7S4659C12v4Ev");}
void  S4659C1 ::v5(){vfunc_called(this, "_ZN7S4659C12v5Ev");}
void  S4659C1 ::v6(){vfunc_called(this, "_ZN7S4659C12v6Ev");}
void  S4659C1 ::v7(){vfunc_called(this, "_ZN7S4659C12v7Ev");}
void  S4659C1 ::v8(){vfunc_called(this, "_ZN7S4659C12v8Ev");}
void  S4659C1 ::v9(){vfunc_called(this, "_ZN7S4659C12v9Ev");}
void  S4659C1 ::v10(){vfunc_called(this, "_ZN7S4659C13v10Ev");}
void  S4659C1 ::v11(){vfunc_called(this, "_ZN7S4659C13v11Ev");}
void  S4659C1 ::v12(){vfunc_called(this, "_ZN7S4659C13v12Ev");}
void  S4659C1 ::v13(){vfunc_called(this, "_ZN7S4659C13v13Ev");}
void  S4659C1 ::v14(){vfunc_called(this, "_ZN7S4659C13v14Ev");}
void  S4659C1 ::v15(){vfunc_called(this, "_ZN7S4659C13v15Ev");}
void  S4659C1 ::v16(){vfunc_called(this, "_ZN7S4659C13v16Ev");}
void  S4659C1 ::v17(){vfunc_called(this, "_ZN7S4659C13v17Ev");}
void  S4659C1 ::v18(){vfunc_called(this, "_ZN7S4659C13v18Ev");}
void  S4659C1 ::v19(){vfunc_called(this, "_ZN7S4659C13v19Ev");}
void  S4659C1 ::v20(){vfunc_called(this, "_ZN7S4659C13v20Ev");}
S4659C1 ::S4659C1(){ note_ctor("S4659C1", this);} // tgen

static void Test_S4659C1()
{
  extern Class_Descriptor cd_S4659C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(48,71)];
    init_test(&cd_S4659C1, buf);
    S4659C1 *dp, &lv = *(dp=new (buf) S4659C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(376,280), "sizeof(S4659C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4659C1)");
    check_base_class_offset(lv, (S4659C3*)(S4659C2*), 0, "S4659C1");
    check_base_class_offset(lv, (S4659C2*), 0, "S4659C1");
    check_base_class_offset(lv, (S4659C5*), ABISELECT(72,48), "S4659C1");
    check_base_class_offset(lv, (S4659C6*), ABISELECT(160,124), "S4659C1");
    check_base_class_offset(lv, (S4659C7*), ABISELECT(168,128), "S4659C1");
    check_field_offset(lv, s4659c1f0, ABISELECT(176,132), "S4659C1.s4659c1f0");
    check_field_offset(lv, s4659c1f1, ABISELECT(192,140), "S4659C1.s4659c1f1");
    check_field_offset(lv, s4659c1f2, ABISELECT(224,172), "S4659C1.s4659c1f2");
    check_field_offset(lv, s4659c1f3, ABISELECT(232,176), "S4659C1.s4659c1f3");
    check_field_offset(lv, s4659c1f4, ABISELECT(256,200), "S4659C1.s4659c1f4");
    check_field_offset(lv, s4659c1f5, ABISELECT(260,204), "S4659C1.s4659c1f5");
    check_field_offset(lv, s4659c1f6, ABISELECT(264,208), "S4659C1.s4659c1f6");
    check_field_offset(lv, s4659c1f7, ABISELECT(272,216), "S4659C1.s4659c1f7");
    check_field_offset(lv, s4659c1f8, ABISELECT(280,220), "S4659C1.s4659c1f8");
    check_field_offset(lv, s4659c1f9, ABISELECT(304,244), "S4659C1.s4659c1f9");
    check_field_offset(lv, s4659c1f10, ABISELECT(312,248), "S4659C1.s4659c1f10");
    check_field_offset(lv, s4659c1f11, ABISELECT(336,260), "S4659C1.s4659c1f11");
    check_field_offset(lv, s4659c1f12, ABISELECT(344,264), "S4659C1.s4659c1f12");
    check_field_offset(lv, s4659c1f13, ABISELECT(352,268), "S4659C1.s4659c1f13");
    check_field_offset(lv, s4659c1f14, ABISELECT(360,272), "S4659C1.s4659c1f14");
    test_class_info(&lv, &cd_S4659C1);
    dp->~S4659C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4659C1(Test_S4659C1, "S4659C1", ABISELECT(376,280));

#else // __cplusplus

extern void _ZN7S4659C1C1Ev();
extern void _ZN7S4659C1D1Ev();
Name_Map name_map_S4659C1[] = {
  NSPAIR(_ZN7S4659C1C1Ev),
  NSPAIR(_ZN7S4659C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4659C3;
extern VTBL_ENTRY _ZTI7S4659C3[];
extern  VTBL_ENTRY _ZTV7S4659C3[];
extern Class_Descriptor cd_S4659C2;
extern VTBL_ENTRY _ZTI7S4659C2[];
extern  VTBL_ENTRY _ZTV7S4659C2[];
extern Class_Descriptor cd_S4659C5;
extern VTBL_ENTRY _ZTI7S4659C5[];
extern  VTBL_ENTRY _ZTV7S4659C5[];
extern Class_Descriptor cd_S4659C6;
extern VTBL_ENTRY _ZTI7S4659C6[];
extern  VTBL_ENTRY _ZTV7S4659C6[];
extern Class_Descriptor cd_S4659C7;
extern VTBL_ENTRY _ZTI7S4659C7[];
extern  VTBL_ENTRY _ZTV7S4659C7[];
static Base_Class bases_S4659C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4659C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S4659C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S4659C5,    ABISELECT(72,48), //bcp->offset
    64, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S4659C6,    ABISELECT(160,124), //bcp->offset
    70, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S4659C7,    ABISELECT(168,128), //bcp->offset
    83, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4659C1[];
extern void _ZN7S4659C1D1Ev();
extern void _ZN7S4659C1D0Ev();
extern void _ZN7S4659C33v21Ev();
extern void _ZN7S4659C33v22Ev();
extern void _ZN7S4659C33v23Ev();
extern void _ZN7S4659C33v24Ev();
extern void _ZN7S4659C33v25Ev();
extern void _ZN7S4659C33v26Ev();
extern void _ZN7S4659C33v27Ev();
extern void _ZN7S4659C33v28Ev();
extern void _ZN7S4659C33v29Ev();
extern void _ZN7S4659C33v30Ev();
extern void _ZN7S4659C33v31Ev();
extern void _ZN7S4659C33v32Ev();
extern void _ZN7S4659C33v33Ev();
extern void _ZN7S4659C33v34Ev();
extern void _ZN7S4659C33v35Ev();
extern void _ZN7S4659C33v36Ev();
extern void _ZN7S4659C33v37Ev();
extern void _ZN7S4659C33v38Ev();
extern void _ZN7S4659C33v39Ev();
extern void _ZN7S4659C33v40Ev();
extern void _ZN7S4659C33v41Ev();
extern void _ZN7S4659C33v42Ev();
extern void _ZN7S4659C33v43Ev();
extern void _ZN7S4659C33v44Ev();
extern void _ZN7S4659C33v45Ev();
extern void _ZN7S4659C33v46Ev();
extern void _ZN7S4659C23v47Ev();
extern void _ZN7S4659C23v48Ev();
extern void _ZN7S4659C23v49Ev();
extern void _ZN7S4659C23v50Ev();
extern void _ZN7S4659C23v51Ev();
extern void _ZN7S4659C23v52Ev();
extern void _ZN7S4659C23v53Ev();
extern void _ZN7S4659C23v54Ev();
extern void _ZN7S4659C23v55Ev();
extern void _ZN7S4659C23v56Ev();
extern void _ZN7S4659C23v57Ev();
extern void _ZN7S4659C23v58Ev();
extern void _ZN7S4659C23v59Ev();
extern void _ZN7S4659C23v60Ev();
extern void _ZN7S4659C12v1Ev();
extern void _ZN7S4659C12v2Ev();
extern void _ZN7S4659C12v3Ev();
extern void _ZN7S4659C12v4Ev();
extern void _ZN7S4659C12v5Ev();
extern void _ZN7S4659C12v6Ev();
extern void _ZN7S4659C12v7Ev();
extern void _ZN7S4659C12v8Ev();
extern void _ZN7S4659C12v9Ev();
extern void _ZN7S4659C13v10Ev();
extern void _ZN7S4659C13v11Ev();
extern void _ZN7S4659C13v12Ev();
extern void _ZN7S4659C13v13Ev();
extern void _ZN7S4659C13v14Ev();
extern void _ZN7S4659C13v15Ev();
extern void _ZN7S4659C13v16Ev();
extern void _ZN7S4659C13v17Ev();
extern void _ZN7S4659C13v18Ev();
extern void _ZN7S4659C13v19Ev();
extern void _ZN7S4659C13v20Ev();
extern void ABISELECT(_ZThn72_N7S4659C1D1Ev,_ZThn48_N7S4659C1D1Ev)();
extern void ABISELECT(_ZThn72_N7S4659C1D0Ev,_ZThn48_N7S4659C1D0Ev)();
extern void _ZN7S4659C53v61Ev();
extern void _ZN7S4659C53v62Ev();
extern void ABISELECT(_ZThn160_N7S4659C1D1Ev,_ZThn124_N7S4659C1D1Ev)();
extern void ABISELECT(_ZThn160_N7S4659C1D0Ev,_ZThn124_N7S4659C1D0Ev)();
extern void _ZN7S4659C63v63Ev();
extern void _ZN7S4659C63v64Ev();
extern void _ZN7S4659C63v65Ev();
extern void _ZN7S4659C63v66Ev();
extern void _ZN7S4659C63v67Ev();
extern void _ZN7S4659C63v68Ev();
extern void _ZN7S4659C63v69Ev();
extern void _ZN7S4659C63v70Ev();
extern void _ZN7S4659C63v71Ev();
extern void ABISELECT(_ZThn168_N7S4659C1D1Ev,_ZThn128_N7S4659C1D1Ev)();
extern void ABISELECT(_ZThn168_N7S4659C1D0Ev,_ZThn128_N7S4659C1D0Ev)();
extern void _ZN7S4659C73v72Ev();
extern void _ZN7S4659C73v73Ev();
extern void _ZN7S4659C73v74Ev();
extern void _ZN7S4659C73v75Ev();
extern void _ZN7S4659C73v76Ev();
extern void _ZN7S4659C73v77Ev();
extern void _ZN7S4659C73v78Ev();
extern void _ZN7S4659C73v79Ev();
extern void _ZN7S4659C73v80Ev();
static  VTBL_ENTRY vtc_S4659C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4659C1[0]),
  (VTBL_ENTRY)&_ZN7S4659C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4659C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4659C33v21Ev,
  (VTBL_ENTRY)&_ZN7S4659C33v22Ev,
  (VTBL_ENTRY)&_ZN7S4659C33v23Ev,
  (VTBL_ENTRY)&_ZN7S4659C33v24Ev,
  (VTBL_ENTRY)&_ZN7S4659C33v25Ev,
  (VTBL_ENTRY)&_ZN7S4659C33v26Ev,
  (VTBL_ENTRY)&_ZN7S4659C33v27Ev,
  (VTBL_ENTRY)&_ZN7S4659C33v28Ev,
  (VTBL_ENTRY)&_ZN7S4659C33v29Ev,
  (VTBL_ENTRY)&_ZN7S4659C33v30Ev,
  (VTBL_ENTRY)&_ZN7S4659C33v31Ev,
  (VTBL_ENTRY)&_ZN7S4659C33v32Ev,
  (VTBL_ENTRY)&_ZN7S4659C33v33Ev,
  (VTBL_ENTRY)&_ZN7S4659C33v34Ev,
  (VTBL_ENTRY)&_ZN7S4659C33v35Ev,
  (VTBL_ENTRY)&_ZN7S4659C33v36Ev,
  (VTBL_ENTRY)&_ZN7S4659C33v37Ev,
  (VTBL_ENTRY)&_ZN7S4659C33v38Ev,
  (VTBL_ENTRY)&_ZN7S4659C33v39Ev,
  (VTBL_ENTRY)&_ZN7S4659C33v40Ev,
  (VTBL_ENTRY)&_ZN7S4659C33v41Ev,
  (VTBL_ENTRY)&_ZN7S4659C33v42Ev,
  (VTBL_ENTRY)&_ZN7S4659C33v43Ev,
  (VTBL_ENTRY)&_ZN7S4659C33v44Ev,
  (VTBL_ENTRY)&_ZN7S4659C33v45Ev,
  (VTBL_ENTRY)&_ZN7S4659C33v46Ev,
  (VTBL_ENTRY)&_ZN7S4659C23v47Ev,
  (VTBL_ENTRY)&_ZN7S4659C23v48Ev,
  (VTBL_ENTRY)&_ZN7S4659C23v49Ev,
  (VTBL_ENTRY)&_ZN7S4659C23v50Ev,
  (VTBL_ENTRY)&_ZN7S4659C23v51Ev,
  (VTBL_ENTRY)&_ZN7S4659C23v52Ev,
  (VTBL_ENTRY)&_ZN7S4659C23v53Ev,
  (VTBL_ENTRY)&_ZN7S4659C23v54Ev,
  (VTBL_ENTRY)&_ZN7S4659C23v55Ev,
  (VTBL_ENTRY)&_ZN7S4659C23v56Ev,
  (VTBL_ENTRY)&_ZN7S4659C23v57Ev,
  (VTBL_ENTRY)&_ZN7S4659C23v58Ev,
  (VTBL_ENTRY)&_ZN7S4659C23v59Ev,
  (VTBL_ENTRY)&_ZN7S4659C23v60Ev,
  (VTBL_ENTRY)&_ZN7S4659C12v1Ev,
  (VTBL_ENTRY)&_ZN7S4659C12v2Ev,
  (VTBL_ENTRY)&_ZN7S4659C12v3Ev,
  (VTBL_ENTRY)&_ZN7S4659C12v4Ev,
  (VTBL_ENTRY)&_ZN7S4659C12v5Ev,
  (VTBL_ENTRY)&_ZN7S4659C12v6Ev,
  (VTBL_ENTRY)&_ZN7S4659C12v7Ev,
  (VTBL_ENTRY)&_ZN7S4659C12v8Ev,
  (VTBL_ENTRY)&_ZN7S4659C12v9Ev,
  (VTBL_ENTRY)&_ZN7S4659C13v10Ev,
  (VTBL_ENTRY)&_ZN7S4659C13v11Ev,
  (VTBL_ENTRY)&_ZN7S4659C13v12Ev,
  (VTBL_ENTRY)&_ZN7S4659C13v13Ev,
  (VTBL_ENTRY)&_ZN7S4659C13v14Ev,
  (VTBL_ENTRY)&_ZN7S4659C13v15Ev,
  (VTBL_ENTRY)&_ZN7S4659C13v16Ev,
  (VTBL_ENTRY)&_ZN7S4659C13v17Ev,
  (VTBL_ENTRY)&_ZN7S4659C13v18Ev,
  (VTBL_ENTRY)&_ZN7S4659C13v19Ev,
  (VTBL_ENTRY)&_ZN7S4659C13v20Ev,
  ABISELECT(-72,-48),
  (VTBL_ENTRY)&(_ZTI7S4659C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn72_N7S4659C1D1Ev,_ZThn48_N7S4659C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn72_N7S4659C1D0Ev,_ZThn48_N7S4659C1D0Ev),
  (VTBL_ENTRY)&_ZN7S4659C53v61Ev,
  (VTBL_ENTRY)&_ZN7S4659C53v62Ev,
  ABISELECT(-160,-124),
  (VTBL_ENTRY)&(_ZTI7S4659C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn160_N7S4659C1D1Ev,_ZThn124_N7S4659C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn160_N7S4659C1D0Ev,_ZThn124_N7S4659C1D0Ev),
  (VTBL_ENTRY)&_ZN7S4659C63v63Ev,
  (VTBL_ENTRY)&_ZN7S4659C63v64Ev,
  (VTBL_ENTRY)&_ZN7S4659C63v65Ev,
  (VTBL_ENTRY)&_ZN7S4659C63v66Ev,
  (VTBL_ENTRY)&_ZN7S4659C63v67Ev,
  (VTBL_ENTRY)&_ZN7S4659C63v68Ev,
  (VTBL_ENTRY)&_ZN7S4659C63v69Ev,
  (VTBL_ENTRY)&_ZN7S4659C63v70Ev,
  (VTBL_ENTRY)&_ZN7S4659C63v71Ev,
  ABISELECT(-168,-128),
  (VTBL_ENTRY)&(_ZTI7S4659C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn168_N7S4659C1D1Ev,_ZThn128_N7S4659C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn168_N7S4659C1D0Ev,_ZThn128_N7S4659C1D0Ev),
  (VTBL_ENTRY)&_ZN7S4659C73v72Ev,
  (VTBL_ENTRY)&_ZN7S4659C73v73Ev,
  (VTBL_ENTRY)&_ZN7S4659C73v74Ev,
  (VTBL_ENTRY)&_ZN7S4659C73v75Ev,
  (VTBL_ENTRY)&_ZN7S4659C73v76Ev,
  (VTBL_ENTRY)&_ZN7S4659C73v77Ev,
  (VTBL_ENTRY)&_ZN7S4659C73v78Ev,
  (VTBL_ENTRY)&_ZN7S4659C73v79Ev,
  (VTBL_ENTRY)&_ZN7S4659C73v80Ev,
};
extern VTBL_ENTRY _ZTI7S4659C1[];
extern  VTBL_ENTRY _ZTV7S4659C1[];
Class_Descriptor cd_S4659C1 = {  "S4659C1", // class name
  bases_S4659C1, 5,
  &(vtc_S4659C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(376,280), // object size
  NSPAIRA(_ZTI7S4659C1),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV7S4659C1),96, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  5, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4646C3  {
  virtual  ~S4646C3(); // _ZN7S4646C3D1Ev
  virtual void  v20(); // _ZN7S4646C33v20Ev
  virtual void  v21(); // _ZN7S4646C33v21Ev
  virtual void  v22(); // _ZN7S4646C33v22Ev
  virtual void  v23(); // _ZN7S4646C33v23Ev
  virtual void  v24(); // _ZN7S4646C33v24Ev
  virtual void  v25(); // _ZN7S4646C33v25Ev
  virtual void  v26(); // _ZN7S4646C33v26Ev
  virtual void  v27(); // _ZN7S4646C33v27Ev
  virtual void  v28(); // _ZN7S4646C33v28Ev
  virtual void  v29(); // _ZN7S4646C33v29Ev
  virtual void  v30(); // _ZN7S4646C33v30Ev
  virtual void  v31(); // _ZN7S4646C33v31Ev
  virtual void  v32(); // _ZN7S4646C33v32Ev
  virtual void  v33(); // _ZN7S4646C33v33Ev
  virtual void  v34(); // _ZN7S4646C33v34Ev
  virtual void  v35(); // _ZN7S4646C33v35Ev
  virtual void  v36(); // _ZN7S4646C33v36Ev
  virtual void  v37(); // _ZN7S4646C33v37Ev
  virtual void  v38(); // _ZN7S4646C33v38Ev
  virtual void  v39(); // _ZN7S4646C33v39Ev
  virtual void  v40(); // _ZN7S4646C33v40Ev
  virtual void  v41(); // _ZN7S4646C33v41Ev
  virtual void  v42(); // _ZN7S4646C33v42Ev
  virtual void  v43(); // _ZN7S4646C33v43Ev
  virtual void  v44(); // _ZN7S4646C33v44Ev
  virtual void  v45(); // _ZN7S4646C33v45Ev
  S4646C3(); // tgen
};
//SIG(-1 S4646C3) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26}


 S4646C3 ::~S4646C3(){ note_dtor("S4646C3", this);}
void  S4646C3 ::v20(){vfunc_called(this, "_ZN7S4646C33v20Ev");}
void  S4646C3 ::v21(){vfunc_called(this, "_ZN7S4646C33v21Ev");}
void  S4646C3 ::v22(){vfunc_called(this, "_ZN7S4646C33v22Ev");}
void  S4646C3 ::v23(){vfunc_called(this, "_ZN7S4646C33v23Ev");}
void  S4646C3 ::v24(){vfunc_called(this, "_ZN7S4646C33v24Ev");}
void  S4646C3 ::v25(){vfunc_called(this, "_ZN7S4646C33v25Ev");}
void  S4646C3 ::v26(){vfunc_called(this, "_ZN7S4646C33v26Ev");}
void  S4646C3 ::v27(){vfunc_called(this, "_ZN7S4646C33v27Ev");}
void  S4646C3 ::v28(){vfunc_called(this, "_ZN7S4646C33v28Ev");}
void  S4646C3 ::v29(){vfunc_called(this, "_ZN7S4646C33v29Ev");}
void  S4646C3 ::v30(){vfunc_called(this, "_ZN7S4646C33v30Ev");}
void  S4646C3 ::v31(){vfunc_called(this, "_ZN7S4646C33v31Ev");}
void  S4646C3 ::v32(){vfunc_called(this, "_ZN7S4646C33v32Ev");}
void  S4646C3 ::v33(){vfunc_called(this, "_ZN7S4646C33v33Ev");}
void  S4646C3 ::v34(){vfunc_called(this, "_ZN7S4646C33v34Ev");}
void  S4646C3 ::v35(){vfunc_called(this, "_ZN7S4646C33v35Ev");}
void  S4646C3 ::v36(){vfunc_called(this, "_ZN7S4646C33v36Ev");}
void  S4646C3 ::v37(){vfunc_called(this, "_ZN7S4646C33v37Ev");}
void  S4646C3 ::v38(){vfunc_called(this, "_ZN7S4646C33v38Ev");}
void  S4646C3 ::v39(){vfunc_called(this, "_ZN7S4646C33v39Ev");}
void  S4646C3 ::v40(){vfunc_called(this, "_ZN7S4646C33v40Ev");}
void  S4646C3 ::v41(){vfunc_called(this, "_ZN7S4646C33v41Ev");}
void  S4646C3 ::v42(){vfunc_called(this, "_ZN7S4646C33v42Ev");}
void  S4646C3 ::v43(){vfunc_called(this, "_ZN7S4646C33v43Ev");}
void  S4646C3 ::v44(){vfunc_called(this, "_ZN7S4646C33v44Ev");}
void  S4646C3 ::v45(){vfunc_called(this, "_ZN7S4646C33v45Ev");}
S4646C3 ::S4646C3(){ note_ctor("S4646C3", this);} // tgen

static void Test_S4646C3()
{
  extern Class_Descriptor cd_S4646C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S4646C3, buf);
    S4646C3 *dp, &lv = *(dp=new (buf) S4646C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S4646C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4646C3)");
    test_class_info(&lv, &cd_S4646C3);
    dp->~S4646C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4646C3(Test_S4646C3, "S4646C3", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S4646C3C1Ev();
extern void _ZN7S4646C3D1Ev();
Name_Map name_map_S4646C3[] = {
  NSPAIR(_ZN7S4646C3C1Ev),
  NSPAIR(_ZN7S4646C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4646C3[];
extern void _ZN7S4646C3D1Ev();
extern void _ZN7S4646C3D0Ev();
extern void _ZN7S4646C33v20Ev();
extern void _ZN7S4646C33v21Ev();
extern void _ZN7S4646C33v22Ev();
extern void _ZN7S4646C33v23Ev();
extern void _ZN7S4646C33v24Ev();
extern void _ZN7S4646C33v25Ev();
extern void _ZN7S4646C33v26Ev();
extern void _ZN7S4646C33v27Ev();
extern void _ZN7S4646C33v28Ev();
extern void _ZN7S4646C33v29Ev();
extern void _ZN7S4646C33v30Ev();
extern void _ZN7S4646C33v31Ev();
extern void _ZN7S4646C33v32Ev();
extern void _ZN7S4646C33v33Ev();
extern void _ZN7S4646C33v34Ev();
extern void _ZN7S4646C33v35Ev();
extern void _ZN7S4646C33v36Ev();
extern void _ZN7S4646C33v37Ev();
extern void _ZN7S4646C33v38Ev();
extern void _ZN7S4646C33v39Ev();
extern void _ZN7S4646C33v40Ev();
extern void _ZN7S4646C33v41Ev();
extern void _ZN7S4646C33v42Ev();
extern void _ZN7S4646C33v43Ev();
extern void _ZN7S4646C33v44Ev();
extern void _ZN7S4646C33v45Ev();
static  VTBL_ENTRY vtc_S4646C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4646C3[0]),
  (VTBL_ENTRY)&_ZN7S4646C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4646C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4646C33v20Ev,
  (VTBL_ENTRY)&_ZN7S4646C33v21Ev,
  (VTBL_ENTRY)&_ZN7S4646C33v22Ev,
  (VTBL_ENTRY)&_ZN7S4646C33v23Ev,
  (VTBL_ENTRY)&_ZN7S4646C33v24Ev,
  (VTBL_ENTRY)&_ZN7S4646C33v25Ev,
  (VTBL_ENTRY)&_ZN7S4646C33v26Ev,
  (VTBL_ENTRY)&_ZN7S4646C33v27Ev,
  (VTBL_ENTRY)&_ZN7S4646C33v28Ev,
  (VTBL_ENTRY)&_ZN7S4646C33v29Ev,
  (VTBL_ENTRY)&_ZN7S4646C33v30Ev,
  (VTBL_ENTRY)&_ZN7S4646C33v31Ev,
  (VTBL_ENTRY)&_ZN7S4646C33v32Ev,
  (VTBL_ENTRY)&_ZN7S4646C33v33Ev,
  (VTBL_ENTRY)&_ZN7S4646C33v34Ev,
  (VTBL_ENTRY)&_ZN7S4646C33v35Ev,
  (VTBL_ENTRY)&_ZN7S4646C33v36Ev,
  (VTBL_ENTRY)&_ZN7S4646C33v37Ev,
  (VTBL_ENTRY)&_ZN7S4646C33v38Ev,
  (VTBL_ENTRY)&_ZN7S4646C33v39Ev,
  (VTBL_ENTRY)&_ZN7S4646C33v40Ev,
  (VTBL_ENTRY)&_ZN7S4646C33v41Ev,
  (VTBL_ENTRY)&_ZN7S4646C33v42Ev,
  (VTBL_ENTRY)&_ZN7S4646C33v43Ev,
  (VTBL_ENTRY)&_ZN7S4646C33v44Ev,
  (VTBL_ENTRY)&_ZN7S4646C33v45Ev,
};
extern VTBL_ENTRY _ZTI7S4646C3[];
extern  VTBL_ENTRY _ZTV7S4646C3[];
Class_Descriptor cd_S4646C3 = {  "S4646C3", // class name
  0,0,//no base classes
  &(vtc_S4646C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S4646C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4646C3),30, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4646C2  : S4646C3 {
  void *s4646c2f0[2];
  int s4646c2f1[4];
  ::S2423C5_nt s4646c2f2;
  void *s4646c2f3;
  char s4646c2f4;
  void *s4646c2f5;
  virtual  ~S4646C2(); // _ZN7S4646C2D1Ev
  virtual void  v46(); // _ZN7S4646C23v46Ev
  virtual void  v47(); // _ZN7S4646C23v47Ev
  virtual void  v48(); // _ZN7S4646C23v48Ev
  virtual void  v49(); // _ZN7S4646C23v49Ev
  virtual void  v50(); // _ZN7S4646C23v50Ev
  virtual void  v51(); // _ZN7S4646C23v51Ev
  virtual void  v52(); // _ZN7S4646C23v52Ev
  virtual void  v53(); // _ZN7S4646C23v53Ev
  virtual void  v54(); // _ZN7S4646C23v54Ev
  virtual void  v55(); // _ZN7S4646C23v55Ev
  virtual void  v56(); // _ZN7S4646C23v56Ev
  virtual void  v57(); // _ZN7S4646C23v57Ev
  virtual void  v58(); // _ZN7S4646C23v58Ev
  virtual void  v59(); // _ZN7S4646C23v59Ev
  S4646C2(); // tgen
};
//SIG(-1 S4646C2) C1{ BC2{ vd v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 Fp[2] Fi[4] FC3{ Fi[2]} Fp Fc Fp}


 S4646C2 ::~S4646C2(){ note_dtor("S4646C2", this);}
void  S4646C2 ::v46(){vfunc_called(this, "_ZN7S4646C23v46Ev");}
void  S4646C2 ::v47(){vfunc_called(this, "_ZN7S4646C23v47Ev");}
void  S4646C2 ::v48(){vfunc_called(this, "_ZN7S4646C23v48Ev");}
void  S4646C2 ::v49(){vfunc_called(this, "_ZN7S4646C23v49Ev");}
void  S4646C2 ::v50(){vfunc_called(this, "_ZN7S4646C23v50Ev");}
void  S4646C2 ::v51(){vfunc_called(this, "_ZN7S4646C23v51Ev");}
void  S4646C2 ::v52(){vfunc_called(this, "_ZN7S4646C23v52Ev");}
void  S4646C2 ::v53(){vfunc_called(this, "_ZN7S4646C23v53Ev");}
void  S4646C2 ::v54(){vfunc_called(this, "_ZN7S4646C23v54Ev");}
void  S4646C2 ::v55(){vfunc_called(this, "_ZN7S4646C23v55Ev");}
void  S4646C2 ::v56(){vfunc_called(this, "_ZN7S4646C23v56Ev");}
void  S4646C2 ::v57(){vfunc_called(this, "_ZN7S4646C23v57Ev");}
void  S4646C2 ::v58(){vfunc_called(this, "_ZN7S4646C23v58Ev");}
void  S4646C2 ::v59(){vfunc_called(this, "_ZN7S4646C23v59Ev");}
S4646C2 ::S4646C2(){ note_ctor("S4646C2", this);} // tgen

static void Test_S4646C2()
{
  extern Class_Descriptor cd_S4646C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,13)];
    init_test(&cd_S4646C2, buf);
    S4646C2 *dp, &lv = *(dp=new (buf) S4646C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,48), "sizeof(S4646C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4646C2)");
    check_base_class_offset(lv, (S4646C3*), 0, "S4646C2");
    check_field_offset(lv, s4646c2f0, ABISELECT(8,4), "S4646C2.s4646c2f0");
    check_field_offset(lv, s4646c2f1, ABISELECT(24,12), "S4646C2.s4646c2f1");
    check_field_offset(lv, s4646c2f2, ABISELECT(40,28), "S4646C2.s4646c2f2");
    check_field_offset(lv, s4646c2f3, ABISELECT(48,36), "S4646C2.s4646c2f3");
    check_field_offset(lv, s4646c2f4, ABISELECT(56,40), "S4646C2.s4646c2f4");
    check_field_offset(lv, s4646c2f5, ABISELECT(64,44), "S4646C2.s4646c2f5");
    test_class_info(&lv, &cd_S4646C2);
    dp->~S4646C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4646C2(Test_S4646C2, "S4646C2", ABISELECT(72,48));

#else // __cplusplus

extern void _ZN7S4646C2C1Ev();
extern void _ZN7S4646C2D1Ev();
Name_Map name_map_S4646C2[] = {
  NSPAIR(_ZN7S4646C2C1Ev),
  NSPAIR(_ZN7S4646C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4646C3;
extern VTBL_ENTRY _ZTI7S4646C3[];
extern  VTBL_ENTRY _ZTV7S4646C3[];
static Base_Class bases_S4646C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4646C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4646C2[];
extern void _ZN7S4646C2D1Ev();
extern void _ZN7S4646C2D0Ev();
extern void _ZN7S4646C33v20Ev();
extern void _ZN7S4646C33v21Ev();
extern void _ZN7S4646C33v22Ev();
extern void _ZN7S4646C33v23Ev();
extern void _ZN7S4646C33v24Ev();
extern void _ZN7S4646C33v25Ev();
extern void _ZN7S4646C33v26Ev();
extern void _ZN7S4646C33v27Ev();
extern void _ZN7S4646C33v28Ev();
extern void _ZN7S4646C33v29Ev();
extern void _ZN7S4646C33v30Ev();
extern void _ZN7S4646C33v31Ev();
extern void _ZN7S4646C33v32Ev();
extern void _ZN7S4646C33v33Ev();
extern void _ZN7S4646C33v34Ev();
extern void _ZN7S4646C33v35Ev();
extern void _ZN7S4646C33v36Ev();
extern void _ZN7S4646C33v37Ev();
extern void _ZN7S4646C33v38Ev();
extern void _ZN7S4646C33v39Ev();
extern void _ZN7S4646C33v40Ev();
extern void _ZN7S4646C33v41Ev();
extern void _ZN7S4646C33v42Ev();
extern void _ZN7S4646C33v43Ev();
extern void _ZN7S4646C33v44Ev();
extern void _ZN7S4646C33v45Ev();
extern void _ZN7S4646C23v46Ev();
extern void _ZN7S4646C23v47Ev();
extern void _ZN7S4646C23v48Ev();
extern void _ZN7S4646C23v49Ev();
extern void _ZN7S4646C23v50Ev();
extern void _ZN7S4646C23v51Ev();
extern void _ZN7S4646C23v52Ev();
extern void _ZN7S4646C23v53Ev();
extern void _ZN7S4646C23v54Ev();
extern void _ZN7S4646C23v55Ev();
extern void _ZN7S4646C23v56Ev();
extern void _ZN7S4646C23v57Ev();
extern void _ZN7S4646C23v58Ev();
extern void _ZN7S4646C23v59Ev();
static  VTBL_ENTRY vtc_S4646C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4646C2[0]),
  (VTBL_ENTRY)&_ZN7S4646C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4646C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4646C33v20Ev,
  (VTBL_ENTRY)&_ZN7S4646C33v21Ev,
  (VTBL_ENTRY)&_ZN7S4646C33v22Ev,
  (VTBL_ENTRY)&_ZN7S4646C33v23Ev,
  (VTBL_ENTRY)&_ZN7S4646C33v24Ev,
  (VTBL_ENTRY)&_ZN7S4646C33v25Ev,
  (VTBL_ENTRY)&_ZN7S4646C33v26Ev,
  (VTBL_ENTRY)&_ZN7S4646C33v27Ev,
  (VTBL_ENTRY)&_ZN7S4646C33v28Ev,
  (VTBL_ENTRY)&_ZN7S4646C33v29Ev,
  (VTBL_ENTRY)&_ZN7S4646C33v30Ev,
  (VTBL_ENTRY)&_ZN7S4646C33v31Ev,
  (VTBL_ENTRY)&_ZN7S4646C33v32Ev,
  (VTBL_ENTRY)&_ZN7S4646C33v33Ev,
  (VTBL_ENTRY)&_ZN7S4646C33v34Ev,
  (VTBL_ENTRY)&_ZN7S4646C33v35Ev,
  (VTBL_ENTRY)&_ZN7S4646C33v36Ev,
  (VTBL_ENTRY)&_ZN7S4646C33v37Ev,
  (VTBL_ENTRY)&_ZN7S4646C33v38Ev,
  (VTBL_ENTRY)&_ZN7S4646C33v39Ev,
  (VTBL_ENTRY)&_ZN7S4646C33v40Ev,
  (VTBL_ENTRY)&_ZN7S4646C33v41Ev,
  (VTBL_ENTRY)&_ZN7S4646C33v42Ev,
  (VTBL_ENTRY)&_ZN7S4646C33v43Ev,
  (VTBL_ENTRY)&_ZN7S4646C33v44Ev,
  (VTBL_ENTRY)&_ZN7S4646C33v45Ev,
  (VTBL_ENTRY)&_ZN7S4646C23v46Ev,
  (VTBL_ENTRY)&_ZN7S4646C23v47Ev,
  (VTBL_ENTRY)&_ZN7S4646C23v48Ev,
  (VTBL_ENTRY)&_ZN7S4646C23v49Ev,
  (VTBL_ENTRY)&_ZN7S4646C23v50Ev,
  (VTBL_ENTRY)&_ZN7S4646C23v51Ev,
  (VTBL_ENTRY)&_ZN7S4646C23v52Ev,
  (VTBL_ENTRY)&_ZN7S4646C23v53Ev,
  (VTBL_ENTRY)&_ZN7S4646C23v54Ev,
  (VTBL_ENTRY)&_ZN7S4646C23v55Ev,
  (VTBL_ENTRY)&_ZN7S4646C23v56Ev,
  (VTBL_ENTRY)&_ZN7S4646C23v57Ev,
  (VTBL_ENTRY)&_ZN7S4646C23v58Ev,
  (VTBL_ENTRY)&_ZN7S4646C23v59Ev,
};
extern VTBL_ENTRY _ZTI7S4646C2[];
extern  VTBL_ENTRY _ZTV7S4646C2[];
Class_Descriptor cd_S4646C2 = {  "S4646C2", // class name
  bases_S4646C2, 1,
  &(vtc_S4646C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,48), // object size
  NSPAIRA(_ZTI7S4646C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4646C2),44, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4646C5  {
  void *s4646c5f0;
  char s4646c5f1[32];
  int s4646c5f2[6];
  char s4646c5f3;
  int s4646c5f4[2];
  virtual  ~S4646C5(); // _ZN7S4646C5D1Ev
  virtual void  v60(); // _ZN7S4646C53v60Ev
  virtual void  v61(); // _ZN7S4646C53v61Ev
  S4646C5(); // tgen
};
//SIG(-1 S4646C5) C1{ vd v1 v2 Fp Fc[32] Fi[6] Fc Fi[2]}


 S4646C5 ::~S4646C5(){ note_dtor("S4646C5", this);}
void  S4646C5 ::v60(){vfunc_called(this, "_ZN7S4646C53v60Ev");}
void  S4646C5 ::v61(){vfunc_called(this, "_ZN7S4646C53v61Ev");}
S4646C5 ::S4646C5(){ note_ctor("S4646C5", this);} // tgen

static void Test_S4646C5()
{
  extern Class_Descriptor cd_S4646C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(12,20)];
    init_test(&cd_S4646C5, buf);
    S4646C5 *dp, &lv = *(dp=new (buf) S4646C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(88,76), "sizeof(S4646C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4646C5)");
    check_field_offset(lv, s4646c5f0, ABISELECT(8,4), "S4646C5.s4646c5f0");
    check_field_offset(lv, s4646c5f1, ABISELECT(16,8), "S4646C5.s4646c5f1");
    check_field_offset(lv, s4646c5f2, ABISELECT(48,40), "S4646C5.s4646c5f2");
    check_field_offset(lv, s4646c5f3, ABISELECT(72,64), "S4646C5.s4646c5f3");
    check_field_offset(lv, s4646c5f4, ABISELECT(76,68), "S4646C5.s4646c5f4");
    test_class_info(&lv, &cd_S4646C5);
    dp->~S4646C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4646C5(Test_S4646C5, "S4646C5", ABISELECT(88,76));

#else // __cplusplus

extern void _ZN7S4646C5C1Ev();
extern void _ZN7S4646C5D1Ev();
Name_Map name_map_S4646C5[] = {
  NSPAIR(_ZN7S4646C5C1Ev),
  NSPAIR(_ZN7S4646C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4646C5[];
extern void _ZN7S4646C5D1Ev();
extern void _ZN7S4646C5D0Ev();
extern void _ZN7S4646C53v60Ev();
extern void _ZN7S4646C53v61Ev();
static  VTBL_ENTRY vtc_S4646C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4646C5[0]),
  (VTBL_ENTRY)&_ZN7S4646C5D1Ev,
  (VTBL_ENTRY)&_ZN7S4646C5D0Ev,
  (VTBL_ENTRY)&_ZN7S4646C53v60Ev,
  (VTBL_ENTRY)&_ZN7S4646C53v61Ev,
};
extern VTBL_ENTRY _ZTI7S4646C5[];
extern  VTBL_ENTRY _ZTV7S4646C5[];
Class_Descriptor cd_S4646C5 = {  "S4646C5", // class name
  0,0,//no base classes
  &(vtc_S4646C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(88,76), // object size
  NSPAIRA(_ZTI7S4646C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4646C5),6, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4646C6  {
  virtual  ~S4646C6(); // _ZN7S4646C6D1Ev
  virtual void  v62(); // _ZN7S4646C63v62Ev
  virtual void  v63(); // _ZN7S4646C63v63Ev
  virtual void  v64(); // _ZN7S4646C63v64Ev
  virtual void  v65(); // _ZN7S4646C63v65Ev
  virtual void  v66(); // _ZN7S4646C63v66Ev
  virtual void  v67(); // _ZN7S4646C63v67Ev
  S4646C6(); // tgen
};
//SIG(-1 S4646C6) C1{ vd v1 v2 v3 v4 v5 v6}


 S4646C6 ::~S4646C6(){ note_dtor("S4646C6", this);}
void  S4646C6 ::v62(){vfunc_called(this, "_ZN7S4646C63v62Ev");}
void  S4646C6 ::v63(){vfunc_called(this, "_ZN7S4646C63v63Ev");}
void  S4646C6 ::v64(){vfunc_called(this, "_ZN7S4646C63v64Ev");}
void  S4646C6 ::v65(){vfunc_called(this, "_ZN7S4646C63v65Ev");}
void  S4646C6 ::v66(){vfunc_called(this, "_ZN7S4646C63v66Ev");}
void  S4646C6 ::v67(){vfunc_called(this, "_ZN7S4646C63v67Ev");}
S4646C6 ::S4646C6(){ note_ctor("S4646C6", this);} // tgen

static void Test_S4646C6()
{
  extern Class_Descriptor cd_S4646C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S4646C6, buf);
    S4646C6 *dp, &lv = *(dp=new (buf) S4646C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S4646C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4646C6)");
    test_class_info(&lv, &cd_S4646C6);
    dp->~S4646C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4646C6(Test_S4646C6, "S4646C6", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S4646C6C1Ev();
extern void _ZN7S4646C6D1Ev();
Name_Map name_map_S4646C6[] = {
  NSPAIR(_ZN7S4646C6C1Ev),
  NSPAIR(_ZN7S4646C6D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4646C6[];
extern void _ZN7S4646C6D1Ev();
extern void _ZN7S4646C6D0Ev();
extern void _ZN7S4646C63v62Ev();
extern void _ZN7S4646C63v63Ev();
extern void _ZN7S4646C63v64Ev();
extern void _ZN7S4646C63v65Ev();
extern void _ZN7S4646C63v66Ev();
extern void _ZN7S4646C63v67Ev();
static  VTBL_ENTRY vtc_S4646C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4646C6[0]),
  (VTBL_ENTRY)&_ZN7S4646C6D1Ev,
  (VTBL_ENTRY)&_ZN7S4646C6D0Ev,
  (VTBL_ENTRY)&_ZN7S4646C63v62Ev,
  (VTBL_ENTRY)&_ZN7S4646C63v63Ev,
  (VTBL_ENTRY)&_ZN7S4646C63v64Ev,
  (VTBL_ENTRY)&_ZN7S4646C63v65Ev,
  (VTBL_ENTRY)&_ZN7S4646C63v66Ev,
  (VTBL_ENTRY)&_ZN7S4646C63v67Ev,
};
extern VTBL_ENTRY _ZTI7S4646C6[];
extern  VTBL_ENTRY _ZTV7S4646C6[];
Class_Descriptor cd_S4646C6 = {  "S4646C6", // class name
  0,0,//no base classes
  &(vtc_S4646C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S4646C6),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4646C6),10, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4646C7_nt  {
  int s4646c7f0;
  virtual  ~S4646C7_nt(); // _ZN10S4646C7_ntD1Ev
  virtual void  v68(); // _ZN10S4646C7_nt3v68Ev
  virtual void  v69(); // _ZN10S4646C7_nt3v69Ev
  virtual void  v70(); // _ZN10S4646C7_nt3v70Ev
  virtual void  v71(); // _ZN10S4646C7_nt3v71Ev
  S4646C7_nt(); // tgen
};
//SIG(-1 S4646C7_nt) C1{ vd v1 v2 v3 v4 Fi}


 S4646C7_nt ::~S4646C7_nt(){ note_dtor("S4646C7_nt", this);}
void  S4646C7_nt ::v68(){vfunc_called(this, "_ZN10S4646C7_nt3v68Ev");}
void  S4646C7_nt ::v69(){vfunc_called(this, "_ZN10S4646C7_nt3v69Ev");}
void  S4646C7_nt ::v70(){vfunc_called(this, "_ZN10S4646C7_nt3v70Ev");}
void  S4646C7_nt ::v71(){vfunc_called(this, "_ZN10S4646C7_nt3v71Ev");}
S4646C7_nt ::S4646C7_nt(){ note_ctor("S4646C7_nt", this);} // tgen

//skip512 S4646C7_nt

#else // __cplusplus

extern void _ZN10S4646C7_ntC1Ev();
extern void _ZN10S4646C7_ntD1Ev();
Name_Map name_map_S4646C7_nt[] = {
  NSPAIR(_ZN10S4646C7_ntC1Ev),
  NSPAIR(_ZN10S4646C7_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S4646C7_nt[];
extern void _ZN10S4646C7_ntD1Ev();
extern void _ZN10S4646C7_ntD0Ev();
extern void _ZN10S4646C7_nt3v68Ev();
extern void _ZN10S4646C7_nt3v69Ev();
extern void _ZN10S4646C7_nt3v70Ev();
extern void _ZN10S4646C7_nt3v71Ev();
static  VTBL_ENTRY vtc_S4646C7_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S4646C7_nt[0]),
  (VTBL_ENTRY)&_ZN10S4646C7_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S4646C7_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S4646C7_nt3v68Ev,
  (VTBL_ENTRY)&_ZN10S4646C7_nt3v69Ev,
  (VTBL_ENTRY)&_ZN10S4646C7_nt3v70Ev,
  (VTBL_ENTRY)&_ZN10S4646C7_nt3v71Ev,
};
extern VTBL_ENTRY _ZTI10S4646C7_nt[];
VTBL_ENTRY *P__ZTI10S4646C7_nt = _ZTI10S4646C7_nt; 
extern  VTBL_ENTRY _ZTV10S4646C7_nt[];
Class_Descriptor cd_S4646C7_nt = {  "S4646C7_nt", // class name
  0,0,//no base classes
  &(vtc_S4646C7_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI10S4646C7_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S4646C7_nt),8, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4646C8  {
  int s4646c8f0;
  __tsi64 s4646c8f1;
  int s4646c8f2[27];
  __tsi64 s4646c8f3[3];
  char s4646c8f4[512];
  void  mf4646c8(); // _ZN7S4646C88mf4646c8Ev
};
//SIG(-1 S4646C8) C1{ m Fi FL Fi[27] FL[3] Fc[512]}


void  S4646C8 ::mf4646c8(){}

static void Test_S4646C8()
{
  {
    init_simple_test("S4646C8");
    S4646C8 lv;
    check2(sizeof(lv), ABISELECT(664,656), "sizeof(S4646C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4646C8)");
    check_field_offset(lv, s4646c8f0, 0, "S4646C8.s4646c8f0");
    check_field_offset(lv, s4646c8f1, ABISELECT(8,4), "S4646C8.s4646c8f1");
    check_field_offset(lv, s4646c8f2, ABISELECT(16,12), "S4646C8.s4646c8f2");
    check_field_offset(lv, s4646c8f3, ABISELECT(128,120), "S4646C8.s4646c8f3");
    check_field_offset(lv, s4646c8f4, ABISELECT(152,144), "S4646C8.s4646c8f4");
  }
}
static Arrange_To_Call_Me vS4646C8(Test_S4646C8, "S4646C8", ABISELECT(664,656));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4646C1  : S4646C2 , S4646C5 , S4646C6 , S4646C7_nt {
  void *s4646c1f0[10];
  long s4646c1f1;
  __tsi64 s4646c1f2;
  int s4646c1f3;
  __tsi64 s4646c1f4[3];
  char s4646c1f5;
  int s4646c1f6;
  void *s4646c1f7;
  int s4646c1f8;
  long s4646c1f9;
  void *s4646c1f10[5];
  ::S4646C8 s4646c1f11;
  virtual  ~S4646C1(); // _ZN7S4646C1D1Ev
  virtual void  v1(); // _ZN7S4646C12v1Ev
  virtual void  v2(); // _ZN7S4646C12v2Ev
  virtual void  v3(); // _ZN7S4646C12v3Ev
  virtual void  v4(); // _ZN7S4646C12v4Ev
  virtual void  v5(); // _ZN7S4646C12v5Ev
  virtual void  v6(); // _ZN7S4646C12v6Ev
  virtual void  v7(); // _ZN7S4646C12v7Ev
  virtual void  v8(); // _ZN7S4646C12v8Ev
  virtual void  v9(); // _ZN7S4646C12v9Ev
  virtual void  v10(); // _ZN7S4646C13v10Ev
  virtual void  v11(); // _ZN7S4646C13v11Ev
  virtual void  v12(); // _ZN7S4646C13v12Ev
  virtual void  v13(); // _ZN7S4646C13v13Ev
  virtual void  v14(); // _ZN7S4646C13v14Ev
  virtual void  v15(); // _ZN7S4646C13v15Ev
  virtual void  v16(); // _ZN7S4646C13v16Ev
  virtual void  v17(); // _ZN7S4646C13v17Ev
  virtual void  v18(); // _ZN7S4646C13v18Ev
  virtual void  v19(); // _ZN7S4646C13v19Ev
  S4646C1(); // tgen
};
//SIG(1 S4646C1) C1{ BC2{ BC3{ vd v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45} vd v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 Fp[2] Fi[4] FC4{ Fi[2]} Fp Fc Fp} BC5{ vd v60 v61 Fp Fc[32] Fi[6] Fc Fi[2]} BC6{ vd v62 v63 v64 v65 v66 v67} BC7{ vd v68 v69 v70 v71 Fi} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 Fp[10] Fl FL Fi FL[3] Fc Fi Fp Fi Fl Fp[5] FC8{ m Fi FL Fi[27] FL[3] Fc[512]}}


 S4646C1 ::~S4646C1(){ note_dtor("S4646C1", this);}
void  S4646C1 ::v1(){vfunc_called(this, "_ZN7S4646C12v1Ev");}
void  S4646C1 ::v2(){vfunc_called(this, "_ZN7S4646C12v2Ev");}
void  S4646C1 ::v3(){vfunc_called(this, "_ZN7S4646C12v3Ev");}
void  S4646C1 ::v4(){vfunc_called(this, "_ZN7S4646C12v4Ev");}
void  S4646C1 ::v5(){vfunc_called(this, "_ZN7S4646C12v5Ev");}
void  S4646C1 ::v6(){vfunc_called(this, "_ZN7S4646C12v6Ev");}
void  S4646C1 ::v7(){vfunc_called(this, "_ZN7S4646C12v7Ev");}
void  S4646C1 ::v8(){vfunc_called(this, "_ZN7S4646C12v8Ev");}
void  S4646C1 ::v9(){vfunc_called(this, "_ZN7S4646C12v9Ev");}
void  S4646C1 ::v10(){vfunc_called(this, "_ZN7S4646C13v10Ev");}
void  S4646C1 ::v11(){vfunc_called(this, "_ZN7S4646C13v11Ev");}
void  S4646C1 ::v12(){vfunc_called(this, "_ZN7S4646C13v12Ev");}
void  S4646C1 ::v13(){vfunc_called(this, "_ZN7S4646C13v13Ev");}
void  S4646C1 ::v14(){vfunc_called(this, "_ZN7S4646C13v14Ev");}
void  S4646C1 ::v15(){vfunc_called(this, "_ZN7S4646C13v15Ev");}
void  S4646C1 ::v16(){vfunc_called(this, "_ZN7S4646C13v16Ev");}
void  S4646C1 ::v17(){vfunc_called(this, "_ZN7S4646C13v17Ev");}
void  S4646C1 ::v18(){vfunc_called(this, "_ZN7S4646C13v18Ev");}
void  S4646C1 ::v19(){vfunc_called(this, "_ZN7S4646C13v19Ev");}
S4646C1 ::S4646C1(){ note_ctor("S4646C1", this);} // tgen

static void Test_S4646C1()
{
  extern Class_Descriptor cd_S4646C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(132,229)];
    init_test(&cd_S4646C1, buf);
    S4646C1 *dp, &lv = *(dp=new (buf) S4646C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1048,912), "sizeof(S4646C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4646C1)");
    check_base_class_offset(lv, (S4646C3*)(S4646C2*), 0, "S4646C1");
    check_base_class_offset(lv, (S4646C2*), 0, "S4646C1");
    check_base_class_offset(lv, (S4646C5*), ABISELECT(72,48), "S4646C1");
    check_base_class_offset(lv, (S4646C6*), ABISELECT(160,124), "S4646C1");
    check_base_class_offset(lv, (S4646C7_nt*), ABISELECT(168,128), "S4646C1");
    check_field_offset(lv, s4646c1f0, ABISELECT(184,136), "S4646C1.s4646c1f0");
    check_field_offset(lv, s4646c1f1, ABISELECT(264,176), "S4646C1.s4646c1f1");
    check_field_offset(lv, s4646c1f2, ABISELECT(272,180), "S4646C1.s4646c1f2");
    check_field_offset(lv, s4646c1f3, ABISELECT(280,188), "S4646C1.s4646c1f3");
    check_field_offset(lv, s4646c1f4, ABISELECT(288,192), "S4646C1.s4646c1f4");
    check_field_offset(lv, s4646c1f5, ABISELECT(312,216), "S4646C1.s4646c1f5");
    check_field_offset(lv, s4646c1f6, ABISELECT(316,220), "S4646C1.s4646c1f6");
    check_field_offset(lv, s4646c1f7, ABISELECT(320,224), "S4646C1.s4646c1f7");
    check_field_offset(lv, s4646c1f8, ABISELECT(328,228), "S4646C1.s4646c1f8");
    check_field_offset(lv, s4646c1f9, ABISELECT(336,232), "S4646C1.s4646c1f9");
    check_field_offset(lv, s4646c1f10, ABISELECT(344,236), "S4646C1.s4646c1f10");
    check_field_offset(lv, s4646c1f11, ABISELECT(384,256), "S4646C1.s4646c1f11");
    test_class_info(&lv, &cd_S4646C1);
    dp->~S4646C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4646C1(Test_S4646C1, "S4646C1", ABISELECT(1048,912));

#else // __cplusplus

extern void _ZN7S4646C1C1Ev();
extern void _ZN7S4646C1D1Ev();
Name_Map name_map_S4646C1[] = {
  NSPAIR(_ZN7S4646C1C1Ev),
  NSPAIR(_ZN7S4646C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4646C3;
extern VTBL_ENTRY _ZTI7S4646C3[];
extern  VTBL_ENTRY _ZTV7S4646C3[];
extern Class_Descriptor cd_S4646C2;
extern VTBL_ENTRY _ZTI7S4646C2[];
extern  VTBL_ENTRY _ZTV7S4646C2[];
extern Class_Descriptor cd_S4646C5;
extern VTBL_ENTRY _ZTI7S4646C5[];
extern  VTBL_ENTRY _ZTV7S4646C5[];
extern Class_Descriptor cd_S4646C6;
extern VTBL_ENTRY _ZTI7S4646C6[];
extern  VTBL_ENTRY _ZTV7S4646C6[];
extern Class_Descriptor cd_S4646C7_nt;
extern VTBL_ENTRY _ZTI10S4646C7_nt[];
extern  VTBL_ENTRY _ZTV10S4646C7_nt[];
static Base_Class bases_S4646C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4646C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S4646C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S4646C5,    ABISELECT(72,48), //bcp->offset
    63, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S4646C6,    ABISELECT(160,124), //bcp->offset
    69, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S4646C7_nt,    ABISELECT(168,128), //bcp->offset
    79, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4646C1[];
extern void _ZN7S4646C1D1Ev();
extern void _ZN7S4646C1D0Ev();
extern void _ZN7S4646C33v20Ev();
extern void _ZN7S4646C33v21Ev();
extern void _ZN7S4646C33v22Ev();
extern void _ZN7S4646C33v23Ev();
extern void _ZN7S4646C33v24Ev();
extern void _ZN7S4646C33v25Ev();
extern void _ZN7S4646C33v26Ev();
extern void _ZN7S4646C33v27Ev();
extern void _ZN7S4646C33v28Ev();
extern void _ZN7S4646C33v29Ev();
extern void _ZN7S4646C33v30Ev();
extern void _ZN7S4646C33v31Ev();
extern void _ZN7S4646C33v32Ev();
extern void _ZN7S4646C33v33Ev();
extern void _ZN7S4646C33v34Ev();
extern void _ZN7S4646C33v35Ev();
extern void _ZN7S4646C33v36Ev();
extern void _ZN7S4646C33v37Ev();
extern void _ZN7S4646C33v38Ev();
extern void _ZN7S4646C33v39Ev();
extern void _ZN7S4646C33v40Ev();
extern void _ZN7S4646C33v41Ev();
extern void _ZN7S4646C33v42Ev();
extern void _ZN7S4646C33v43Ev();
extern void _ZN7S4646C33v44Ev();
extern void _ZN7S4646C33v45Ev();
extern void _ZN7S4646C23v46Ev();
extern void _ZN7S4646C23v47Ev();
extern void _ZN7S4646C23v48Ev();
extern void _ZN7S4646C23v49Ev();
extern void _ZN7S4646C23v50Ev();
extern void _ZN7S4646C23v51Ev();
extern void _ZN7S4646C23v52Ev();
extern void _ZN7S4646C23v53Ev();
extern void _ZN7S4646C23v54Ev();
extern void _ZN7S4646C23v55Ev();
extern void _ZN7S4646C23v56Ev();
extern void _ZN7S4646C23v57Ev();
extern void _ZN7S4646C23v58Ev();
extern void _ZN7S4646C23v59Ev();
extern void _ZN7S4646C12v1Ev();
extern void _ZN7S4646C12v2Ev();
extern void _ZN7S4646C12v3Ev();
extern void _ZN7S4646C12v4Ev();
extern void _ZN7S4646C12v5Ev();
extern void _ZN7S4646C12v6Ev();
extern void _ZN7S4646C12v7Ev();
extern void _ZN7S4646C12v8Ev();
extern void _ZN7S4646C12v9Ev();
extern void _ZN7S4646C13v10Ev();
extern void _ZN7S4646C13v11Ev();
extern void _ZN7S4646C13v12Ev();
extern void _ZN7S4646C13v13Ev();
extern void _ZN7S4646C13v14Ev();
extern void _ZN7S4646C13v15Ev();
extern void _ZN7S4646C13v16Ev();
extern void _ZN7S4646C13v17Ev();
extern void _ZN7S4646C13v18Ev();
extern void _ZN7S4646C13v19Ev();
extern void ABISELECT(_ZThn72_N7S4646C1D1Ev,_ZThn48_N7S4646C1D1Ev)();
extern void ABISELECT(_ZThn72_N7S4646C1D0Ev,_ZThn48_N7S4646C1D0Ev)();
extern void _ZN7S4646C53v60Ev();
extern void _ZN7S4646C53v61Ev();
extern void ABISELECT(_ZThn160_N7S4646C1D1Ev,_ZThn124_N7S4646C1D1Ev)();
extern void ABISELECT(_ZThn160_N7S4646C1D0Ev,_ZThn124_N7S4646C1D0Ev)();
extern void _ZN7S4646C63v62Ev();
extern void _ZN7S4646C63v63Ev();
extern void _ZN7S4646C63v64Ev();
extern void _ZN7S4646C63v65Ev();
extern void _ZN7S4646C63v66Ev();
extern void _ZN7S4646C63v67Ev();
extern void ABISELECT(_ZThn168_N7S4646C1D1Ev,_ZThn128_N7S4646C1D1Ev)();
extern void ABISELECT(_ZThn168_N7S4646C1D0Ev,_ZThn128_N7S4646C1D0Ev)();
extern void _ZN10S4646C7_nt3v68Ev();
extern void _ZN10S4646C7_nt3v69Ev();
extern void _ZN10S4646C7_nt3v70Ev();
extern void _ZN10S4646C7_nt3v71Ev();
static  VTBL_ENTRY vtc_S4646C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4646C1[0]),
  (VTBL_ENTRY)&_ZN7S4646C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4646C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4646C33v20Ev,
  (VTBL_ENTRY)&_ZN7S4646C33v21Ev,
  (VTBL_ENTRY)&_ZN7S4646C33v22Ev,
  (VTBL_ENTRY)&_ZN7S4646C33v23Ev,
  (VTBL_ENTRY)&_ZN7S4646C33v24Ev,
  (VTBL_ENTRY)&_ZN7S4646C33v25Ev,
  (VTBL_ENTRY)&_ZN7S4646C33v26Ev,
  (VTBL_ENTRY)&_ZN7S4646C33v27Ev,
  (VTBL_ENTRY)&_ZN7S4646C33v28Ev,
  (VTBL_ENTRY)&_ZN7S4646C33v29Ev,
  (VTBL_ENTRY)&_ZN7S4646C33v30Ev,
  (VTBL_ENTRY)&_ZN7S4646C33v31Ev,
  (VTBL_ENTRY)&_ZN7S4646C33v32Ev,
  (VTBL_ENTRY)&_ZN7S4646C33v33Ev,
  (VTBL_ENTRY)&_ZN7S4646C33v34Ev,
  (VTBL_ENTRY)&_ZN7S4646C33v35Ev,
  (VTBL_ENTRY)&_ZN7S4646C33v36Ev,
  (VTBL_ENTRY)&_ZN7S4646C33v37Ev,
  (VTBL_ENTRY)&_ZN7S4646C33v38Ev,
  (VTBL_ENTRY)&_ZN7S4646C33v39Ev,
  (VTBL_ENTRY)&_ZN7S4646C33v40Ev,
  (VTBL_ENTRY)&_ZN7S4646C33v41Ev,
  (VTBL_ENTRY)&_ZN7S4646C33v42Ev,
  (VTBL_ENTRY)&_ZN7S4646C33v43Ev,
  (VTBL_ENTRY)&_ZN7S4646C33v44Ev,
  (VTBL_ENTRY)&_ZN7S4646C33v45Ev,
  (VTBL_ENTRY)&_ZN7S4646C23v46Ev,
  (VTBL_ENTRY)&_ZN7S4646C23v47Ev,
  (VTBL_ENTRY)&_ZN7S4646C23v48Ev,
  (VTBL_ENTRY)&_ZN7S4646C23v49Ev,
  (VTBL_ENTRY)&_ZN7S4646C23v50Ev,
  (VTBL_ENTRY)&_ZN7S4646C23v51Ev,
  (VTBL_ENTRY)&_ZN7S4646C23v52Ev,
  (VTBL_ENTRY)&_ZN7S4646C23v53Ev,
  (VTBL_ENTRY)&_ZN7S4646C23v54Ev,
  (VTBL_ENTRY)&_ZN7S4646C23v55Ev,
  (VTBL_ENTRY)&_ZN7S4646C23v56Ev,
  (VTBL_ENTRY)&_ZN7S4646C23v57Ev,
  (VTBL_ENTRY)&_ZN7S4646C23v58Ev,
  (VTBL_ENTRY)&_ZN7S4646C23v59Ev,
  (VTBL_ENTRY)&_ZN7S4646C12v1Ev,
  (VTBL_ENTRY)&_ZN7S4646C12v2Ev,
  (VTBL_ENTRY)&_ZN7S4646C12v3Ev,
  (VTBL_ENTRY)&_ZN7S4646C12v4Ev,
  (VTBL_ENTRY)&_ZN7S4646C12v5Ev,
  (VTBL_ENTRY)&_ZN7S4646C12v6Ev,
  (VTBL_ENTRY)&_ZN7S4646C12v7Ev,
  (VTBL_ENTRY)&_ZN7S4646C12v8Ev,
  (VTBL_ENTRY)&_ZN7S4646C12v9Ev,
  (VTBL_ENTRY)&_ZN7S4646C13v10Ev,
  (VTBL_ENTRY)&_ZN7S4646C13v11Ev,
  (VTBL_ENTRY)&_ZN7S4646C13v12Ev,
  (VTBL_ENTRY)&_ZN7S4646C13v13Ev,
  (VTBL_ENTRY)&_ZN7S4646C13v14Ev,
  (VTBL_ENTRY)&_ZN7S4646C13v15Ev,
  (VTBL_ENTRY)&_ZN7S4646C13v16Ev,
  (VTBL_ENTRY)&_ZN7S4646C13v17Ev,
  (VTBL_ENTRY)&_ZN7S4646C13v18Ev,
  (VTBL_ENTRY)&_ZN7S4646C13v19Ev,
  ABISELECT(-72,-48),
  (VTBL_ENTRY)&(_ZTI7S4646C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn72_N7S4646C1D1Ev,_ZThn48_N7S4646C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn72_N7S4646C1D0Ev,_ZThn48_N7S4646C1D0Ev),
  (VTBL_ENTRY)&_ZN7S4646C53v60Ev,
  (VTBL_ENTRY)&_ZN7S4646C53v61Ev,
  ABISELECT(-160,-124),
  (VTBL_ENTRY)&(_ZTI7S4646C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn160_N7S4646C1D1Ev,_ZThn124_N7S4646C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn160_N7S4646C1D0Ev,_ZThn124_N7S4646C1D0Ev),
  (VTBL_ENTRY)&_ZN7S4646C63v62Ev,
  (VTBL_ENTRY)&_ZN7S4646C63v63Ev,
  (VTBL_ENTRY)&_ZN7S4646C63v64Ev,
  (VTBL_ENTRY)&_ZN7S4646C63v65Ev,
  (VTBL_ENTRY)&_ZN7S4646C63v66Ev,
  (VTBL_ENTRY)&_ZN7S4646C63v67Ev,
  ABISELECT(-168,-128),
  (VTBL_ENTRY)&(_ZTI7S4646C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn168_N7S4646C1D1Ev,_ZThn128_N7S4646C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn168_N7S4646C1D0Ev,_ZThn128_N7S4646C1D0Ev),
  (VTBL_ENTRY)&_ZN10S4646C7_nt3v68Ev,
  (VTBL_ENTRY)&_ZN10S4646C7_nt3v69Ev,
  (VTBL_ENTRY)&_ZN10S4646C7_nt3v70Ev,
  (VTBL_ENTRY)&_ZN10S4646C7_nt3v71Ev,
};
extern VTBL_ENTRY _ZTI7S4646C1[];
extern  VTBL_ENTRY _ZTV7S4646C1[];
Class_Descriptor cd_S4646C1 = {  "S4646C1", // class name
  bases_S4646C1, 5,
  &(vtc_S4646C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(1048,912), // object size
  NSPAIRA(_ZTI7S4646C1),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV7S4646C1),87, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  5, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4305C3  {
  virtual  ~S4305C3(); // _ZN7S4305C3D1Ev
  virtual void  v19(); // _ZN7S4305C33v19Ev
  virtual void  v20(); // _ZN7S4305C33v20Ev
  virtual void  v21(); // _ZN7S4305C33v21Ev
  virtual void  v22(); // _ZN7S4305C33v22Ev
  virtual void  v23(); // _ZN7S4305C33v23Ev
  virtual void  v24(); // _ZN7S4305C33v24Ev
  virtual void  v25(); // _ZN7S4305C33v25Ev
  virtual void  v26(); // _ZN7S4305C33v26Ev
  virtual void  v27(); // _ZN7S4305C33v27Ev
  virtual void  v28(); // _ZN7S4305C33v28Ev
  virtual void  v29(); // _ZN7S4305C33v29Ev
  virtual void  v30(); // _ZN7S4305C33v30Ev
  virtual void  v31(); // _ZN7S4305C33v31Ev
  virtual void  v32(); // _ZN7S4305C33v32Ev
  virtual void  v33(); // _ZN7S4305C33v33Ev
  virtual void  v34(); // _ZN7S4305C33v34Ev
  virtual void  v35(); // _ZN7S4305C33v35Ev
  virtual void  v36(); // _ZN7S4305C33v36Ev
  virtual void  v37(); // _ZN7S4305C33v37Ev
  virtual void  v38(); // _ZN7S4305C33v38Ev
  virtual void  v39(); // _ZN7S4305C33v39Ev
  virtual void  v40(); // _ZN7S4305C33v40Ev
  virtual void  v41(); // _ZN7S4305C33v41Ev
  virtual void  v42(); // _ZN7S4305C33v42Ev
  virtual void  v43(); // _ZN7S4305C33v43Ev
  virtual void  v44(); // _ZN7S4305C33v44Ev
  S4305C3(); // tgen
};
//SIG(-1 S4305C3) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26}


 S4305C3 ::~S4305C3(){ note_dtor("S4305C3", this);}
void  S4305C3 ::v19(){vfunc_called(this, "_ZN7S4305C33v19Ev");}
void  S4305C3 ::v20(){vfunc_called(this, "_ZN7S4305C33v20Ev");}
void  S4305C3 ::v21(){vfunc_called(this, "_ZN7S4305C33v21Ev");}
void  S4305C3 ::v22(){vfunc_called(this, "_ZN7S4305C33v22Ev");}
void  S4305C3 ::v23(){vfunc_called(this, "_ZN7S4305C33v23Ev");}
void  S4305C3 ::v24(){vfunc_called(this, "_ZN7S4305C33v24Ev");}
void  S4305C3 ::v25(){vfunc_called(this, "_ZN7S4305C33v25Ev");}
void  S4305C3 ::v26(){vfunc_called(this, "_ZN7S4305C33v26Ev");}
void  S4305C3 ::v27(){vfunc_called(this, "_ZN7S4305C33v27Ev");}
void  S4305C3 ::v28(){vfunc_called(this, "_ZN7S4305C33v28Ev");}
void  S4305C3 ::v29(){vfunc_called(this, "_ZN7S4305C33v29Ev");}
void  S4305C3 ::v30(){vfunc_called(this, "_ZN7S4305C33v30Ev");}
void  S4305C3 ::v31(){vfunc_called(this, "_ZN7S4305C33v31Ev");}
void  S4305C3 ::v32(){vfunc_called(this, "_ZN7S4305C33v32Ev");}
void  S4305C3 ::v33(){vfunc_called(this, "_ZN7S4305C33v33Ev");}
void  S4305C3 ::v34(){vfunc_called(this, "_ZN7S4305C33v34Ev");}
void  S4305C3 ::v35(){vfunc_called(this, "_ZN7S4305C33v35Ev");}
void  S4305C3 ::v36(){vfunc_called(this, "_ZN7S4305C33v36Ev");}
void  S4305C3 ::v37(){vfunc_called(this, "_ZN7S4305C33v37Ev");}
void  S4305C3 ::v38(){vfunc_called(this, "_ZN7S4305C33v38Ev");}
void  S4305C3 ::v39(){vfunc_called(this, "_ZN7S4305C33v39Ev");}
void  S4305C3 ::v40(){vfunc_called(this, "_ZN7S4305C33v40Ev");}
void  S4305C3 ::v41(){vfunc_called(this, "_ZN7S4305C33v41Ev");}
void  S4305C3 ::v42(){vfunc_called(this, "_ZN7S4305C33v42Ev");}
void  S4305C3 ::v43(){vfunc_called(this, "_ZN7S4305C33v43Ev");}
void  S4305C3 ::v44(){vfunc_called(this, "_ZN7S4305C33v44Ev");}
S4305C3 ::S4305C3(){ note_ctor("S4305C3", this);} // tgen

static void Test_S4305C3()
{
  extern Class_Descriptor cd_S4305C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S4305C3, buf);
    S4305C3 *dp, &lv = *(dp=new (buf) S4305C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S4305C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4305C3)");
    test_class_info(&lv, &cd_S4305C3);
    dp->~S4305C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4305C3(Test_S4305C3, "S4305C3", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S4305C3C1Ev();
extern void _ZN7S4305C3D1Ev();
Name_Map name_map_S4305C3[] = {
  NSPAIR(_ZN7S4305C3C1Ev),
  NSPAIR(_ZN7S4305C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4305C3[];
extern void _ZN7S4305C3D1Ev();
extern void _ZN7S4305C3D0Ev();
extern void _ZN7S4305C33v19Ev();
extern void _ZN7S4305C33v20Ev();
extern void _ZN7S4305C33v21Ev();
extern void _ZN7S4305C33v22Ev();
extern void _ZN7S4305C33v23Ev();
extern void _ZN7S4305C33v24Ev();
extern void _ZN7S4305C33v25Ev();
extern void _ZN7S4305C33v26Ev();
extern void _ZN7S4305C33v27Ev();
extern void _ZN7S4305C33v28Ev();
extern void _ZN7S4305C33v29Ev();
extern void _ZN7S4305C33v30Ev();
extern void _ZN7S4305C33v31Ev();
extern void _ZN7S4305C33v32Ev();
extern void _ZN7S4305C33v33Ev();
extern void _ZN7S4305C33v34Ev();
extern void _ZN7S4305C33v35Ev();
extern void _ZN7S4305C33v36Ev();
extern void _ZN7S4305C33v37Ev();
extern void _ZN7S4305C33v38Ev();
extern void _ZN7S4305C33v39Ev();
extern void _ZN7S4305C33v40Ev();
extern void _ZN7S4305C33v41Ev();
extern void _ZN7S4305C33v42Ev();
extern void _ZN7S4305C33v43Ev();
extern void _ZN7S4305C33v44Ev();
static  VTBL_ENTRY vtc_S4305C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4305C3[0]),
  (VTBL_ENTRY)&_ZN7S4305C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4305C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4305C33v19Ev,
  (VTBL_ENTRY)&_ZN7S4305C33v20Ev,
  (VTBL_ENTRY)&_ZN7S4305C33v21Ev,
  (VTBL_ENTRY)&_ZN7S4305C33v22Ev,
  (VTBL_ENTRY)&_ZN7S4305C33v23Ev,
  (VTBL_ENTRY)&_ZN7S4305C33v24Ev,
  (VTBL_ENTRY)&_ZN7S4305C33v25Ev,
  (VTBL_ENTRY)&_ZN7S4305C33v26Ev,
  (VTBL_ENTRY)&_ZN7S4305C33v27Ev,
  (VTBL_ENTRY)&_ZN7S4305C33v28Ev,
  (VTBL_ENTRY)&_ZN7S4305C33v29Ev,
  (VTBL_ENTRY)&_ZN7S4305C33v30Ev,
  (VTBL_ENTRY)&_ZN7S4305C33v31Ev,
  (VTBL_ENTRY)&_ZN7S4305C33v32Ev,
  (VTBL_ENTRY)&_ZN7S4305C33v33Ev,
  (VTBL_ENTRY)&_ZN7S4305C33v34Ev,
  (VTBL_ENTRY)&_ZN7S4305C33v35Ev,
  (VTBL_ENTRY)&_ZN7S4305C33v36Ev,
  (VTBL_ENTRY)&_ZN7S4305C33v37Ev,
  (VTBL_ENTRY)&_ZN7S4305C33v38Ev,
  (VTBL_ENTRY)&_ZN7S4305C33v39Ev,
  (VTBL_ENTRY)&_ZN7S4305C33v40Ev,
  (VTBL_ENTRY)&_ZN7S4305C33v41Ev,
  (VTBL_ENTRY)&_ZN7S4305C33v42Ev,
  (VTBL_ENTRY)&_ZN7S4305C33v43Ev,
  (VTBL_ENTRY)&_ZN7S4305C33v44Ev,
};
extern VTBL_ENTRY _ZTI7S4305C3[];
extern  VTBL_ENTRY _ZTV7S4305C3[];
Class_Descriptor cd_S4305C3 = {  "S4305C3", // class name
  0,0,//no base classes
  &(vtc_S4305C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S4305C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4305C3),30, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4305C2  : S4305C3 {
  void *s4305c2f0[2];
  int s4305c2f1[4];
  ::S2423C5_nt s4305c2f2;
  void *s4305c2f3;
  char s4305c2f4;
  void *s4305c2f5;
  virtual  ~S4305C2(); // _ZN7S4305C2D1Ev
  virtual void  v45(); // _ZN7S4305C23v45Ev
  virtual void  v46(); // _ZN7S4305C23v46Ev
  virtual void  v47(); // _ZN7S4305C23v47Ev
  virtual void  v48(); // _ZN7S4305C23v48Ev
  virtual void  v49(); // _ZN7S4305C23v49Ev
  virtual void  v50(); // _ZN7S4305C23v50Ev
  virtual void  v51(); // _ZN7S4305C23v51Ev
  virtual void  v52(); // _ZN7S4305C23v52Ev
  virtual void  v53(); // _ZN7S4305C23v53Ev
  virtual void  v54(); // _ZN7S4305C23v54Ev
  virtual void  v55(); // _ZN7S4305C23v55Ev
  virtual void  v56(); // _ZN7S4305C23v56Ev
  virtual void  v57(); // _ZN7S4305C23v57Ev
  virtual void  v58(); // _ZN7S4305C23v58Ev
  S4305C2(); // tgen
};
//SIG(-1 S4305C2) C1{ BC2{ vd v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 Fp[2] Fi[4] FC3{ Fi[2]} Fp Fc Fp}


 S4305C2 ::~S4305C2(){ note_dtor("S4305C2", this);}
void  S4305C2 ::v45(){vfunc_called(this, "_ZN7S4305C23v45Ev");}
void  S4305C2 ::v46(){vfunc_called(this, "_ZN7S4305C23v46Ev");}
void  S4305C2 ::v47(){vfunc_called(this, "_ZN7S4305C23v47Ev");}
void  S4305C2 ::v48(){vfunc_called(this, "_ZN7S4305C23v48Ev");}
void  S4305C2 ::v49(){vfunc_called(this, "_ZN7S4305C23v49Ev");}
void  S4305C2 ::v50(){vfunc_called(this, "_ZN7S4305C23v50Ev");}
void  S4305C2 ::v51(){vfunc_called(this, "_ZN7S4305C23v51Ev");}
void  S4305C2 ::v52(){vfunc_called(this, "_ZN7S4305C23v52Ev");}
void  S4305C2 ::v53(){vfunc_called(this, "_ZN7S4305C23v53Ev");}
void  S4305C2 ::v54(){vfunc_called(this, "_ZN7S4305C23v54Ev");}
void  S4305C2 ::v55(){vfunc_called(this, "_ZN7S4305C23v55Ev");}
void  S4305C2 ::v56(){vfunc_called(this, "_ZN7S4305C23v56Ev");}
void  S4305C2 ::v57(){vfunc_called(this, "_ZN7S4305C23v57Ev");}
void  S4305C2 ::v58(){vfunc_called(this, "_ZN7S4305C23v58Ev");}
S4305C2 ::S4305C2(){ note_ctor("S4305C2", this);} // tgen

static void Test_S4305C2()
{
  extern Class_Descriptor cd_S4305C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,13)];
    init_test(&cd_S4305C2, buf);
    S4305C2 *dp, &lv = *(dp=new (buf) S4305C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,48), "sizeof(S4305C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4305C2)");
    check_base_class_offset(lv, (S4305C3*), 0, "S4305C2");
    check_field_offset(lv, s4305c2f0, ABISELECT(8,4), "S4305C2.s4305c2f0");
    check_field_offset(lv, s4305c2f1, ABISELECT(24,12), "S4305C2.s4305c2f1");
    check_field_offset(lv, s4305c2f2, ABISELECT(40,28), "S4305C2.s4305c2f2");
    check_field_offset(lv, s4305c2f3, ABISELECT(48,36), "S4305C2.s4305c2f3");
    check_field_offset(lv, s4305c2f4, ABISELECT(56,40), "S4305C2.s4305c2f4");
    check_field_offset(lv, s4305c2f5, ABISELECT(64,44), "S4305C2.s4305c2f5");
    test_class_info(&lv, &cd_S4305C2);
    dp->~S4305C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4305C2(Test_S4305C2, "S4305C2", ABISELECT(72,48));

#else // __cplusplus

extern void _ZN7S4305C2C1Ev();
extern void _ZN7S4305C2D1Ev();
Name_Map name_map_S4305C2[] = {
  NSPAIR(_ZN7S4305C2C1Ev),
  NSPAIR(_ZN7S4305C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4305C3;
extern VTBL_ENTRY _ZTI7S4305C3[];
extern  VTBL_ENTRY _ZTV7S4305C3[];
static Base_Class bases_S4305C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4305C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4305C2[];
extern void _ZN7S4305C2D1Ev();
extern void _ZN7S4305C2D0Ev();
extern void _ZN7S4305C33v19Ev();
extern void _ZN7S4305C33v20Ev();
extern void _ZN7S4305C33v21Ev();
extern void _ZN7S4305C33v22Ev();
extern void _ZN7S4305C33v23Ev();
extern void _ZN7S4305C33v24Ev();
extern void _ZN7S4305C33v25Ev();
extern void _ZN7S4305C33v26Ev();
extern void _ZN7S4305C33v27Ev();
extern void _ZN7S4305C33v28Ev();
extern void _ZN7S4305C33v29Ev();
extern void _ZN7S4305C33v30Ev();
extern void _ZN7S4305C33v31Ev();
extern void _ZN7S4305C33v32Ev();
extern void _ZN7S4305C33v33Ev();
extern void _ZN7S4305C33v34Ev();
extern void _ZN7S4305C33v35Ev();
extern void _ZN7S4305C33v36Ev();
extern void _ZN7S4305C33v37Ev();
extern void _ZN7S4305C33v38Ev();
extern void _ZN7S4305C33v39Ev();
extern void _ZN7S4305C33v40Ev();
extern void _ZN7S4305C33v41Ev();
extern void _ZN7S4305C33v42Ev();
extern void _ZN7S4305C33v43Ev();
extern void _ZN7S4305C33v44Ev();
extern void _ZN7S4305C23v45Ev();
extern void _ZN7S4305C23v46Ev();
extern void _ZN7S4305C23v47Ev();
extern void _ZN7S4305C23v48Ev();
extern void _ZN7S4305C23v49Ev();
extern void _ZN7S4305C23v50Ev();
extern void _ZN7S4305C23v51Ev();
extern void _ZN7S4305C23v52Ev();
extern void _ZN7S4305C23v53Ev();
extern void _ZN7S4305C23v54Ev();
extern void _ZN7S4305C23v55Ev();
extern void _ZN7S4305C23v56Ev();
extern void _ZN7S4305C23v57Ev();
extern void _ZN7S4305C23v58Ev();
static  VTBL_ENTRY vtc_S4305C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4305C2[0]),
  (VTBL_ENTRY)&_ZN7S4305C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4305C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4305C33v19Ev,
  (VTBL_ENTRY)&_ZN7S4305C33v20Ev,
  (VTBL_ENTRY)&_ZN7S4305C33v21Ev,
  (VTBL_ENTRY)&_ZN7S4305C33v22Ev,
  (VTBL_ENTRY)&_ZN7S4305C33v23Ev,
  (VTBL_ENTRY)&_ZN7S4305C33v24Ev,
  (VTBL_ENTRY)&_ZN7S4305C33v25Ev,
  (VTBL_ENTRY)&_ZN7S4305C33v26Ev,
  (VTBL_ENTRY)&_ZN7S4305C33v27Ev,
  (VTBL_ENTRY)&_ZN7S4305C33v28Ev,
  (VTBL_ENTRY)&_ZN7S4305C33v29Ev,
  (VTBL_ENTRY)&_ZN7S4305C33v30Ev,
  (VTBL_ENTRY)&_ZN7S4305C33v31Ev,
  (VTBL_ENTRY)&_ZN7S4305C33v32Ev,
  (VTBL_ENTRY)&_ZN7S4305C33v33Ev,
  (VTBL_ENTRY)&_ZN7S4305C33v34Ev,
  (VTBL_ENTRY)&_ZN7S4305C33v35Ev,
  (VTBL_ENTRY)&_ZN7S4305C33v36Ev,
  (VTBL_ENTRY)&_ZN7S4305C33v37Ev,
  (VTBL_ENTRY)&_ZN7S4305C33v38Ev,
  (VTBL_ENTRY)&_ZN7S4305C33v39Ev,
  (VTBL_ENTRY)&_ZN7S4305C33v40Ev,
  (VTBL_ENTRY)&_ZN7S4305C33v41Ev,
  (VTBL_ENTRY)&_ZN7S4305C33v42Ev,
  (VTBL_ENTRY)&_ZN7S4305C33v43Ev,
  (VTBL_ENTRY)&_ZN7S4305C33v44Ev,
  (VTBL_ENTRY)&_ZN7S4305C23v45Ev,
  (VTBL_ENTRY)&_ZN7S4305C23v46Ev,
  (VTBL_ENTRY)&_ZN7S4305C23v47Ev,
  (VTBL_ENTRY)&_ZN7S4305C23v48Ev,
  (VTBL_ENTRY)&_ZN7S4305C23v49Ev,
  (VTBL_ENTRY)&_ZN7S4305C23v50Ev,
  (VTBL_ENTRY)&_ZN7S4305C23v51Ev,
  (VTBL_ENTRY)&_ZN7S4305C23v52Ev,
  (VTBL_ENTRY)&_ZN7S4305C23v53Ev,
  (VTBL_ENTRY)&_ZN7S4305C23v54Ev,
  (VTBL_ENTRY)&_ZN7S4305C23v55Ev,
  (VTBL_ENTRY)&_ZN7S4305C23v56Ev,
  (VTBL_ENTRY)&_ZN7S4305C23v57Ev,
  (VTBL_ENTRY)&_ZN7S4305C23v58Ev,
};
extern VTBL_ENTRY _ZTI7S4305C2[];
extern  VTBL_ENTRY _ZTV7S4305C2[];
Class_Descriptor cd_S4305C2 = {  "S4305C2", // class name
  bases_S4305C2, 1,
  &(vtc_S4305C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,48), // object size
  NSPAIRA(_ZTI7S4305C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4305C2),44, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4305C5  {
  void *s4305c5f0;
  char s4305c5f1[32];
  int s4305c5f2[6];
  char s4305c5f3;
  int s4305c5f4[2];
  virtual  ~S4305C5(); // _ZN7S4305C5D1Ev
  virtual void  v59(); // _ZN7S4305C53v59Ev
  virtual void  v60(); // _ZN7S4305C53v60Ev
  S4305C5(); // tgen
};
//SIG(-1 S4305C5) C1{ vd v1 v2 Fp Fc[32] Fi[6] Fc Fi[2]}


 S4305C5 ::~S4305C5(){ note_dtor("S4305C5", this);}
void  S4305C5 ::v59(){vfunc_called(this, "_ZN7S4305C53v59Ev");}
void  S4305C5 ::v60(){vfunc_called(this, "_ZN7S4305C53v60Ev");}
S4305C5 ::S4305C5(){ note_ctor("S4305C5", this);} // tgen

static void Test_S4305C5()
{
  extern Class_Descriptor cd_S4305C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(12,20)];
    init_test(&cd_S4305C5, buf);
    S4305C5 *dp, &lv = *(dp=new (buf) S4305C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(88,76), "sizeof(S4305C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4305C5)");
    check_field_offset(lv, s4305c5f0, ABISELECT(8,4), "S4305C5.s4305c5f0");
    check_field_offset(lv, s4305c5f1, ABISELECT(16,8), "S4305C5.s4305c5f1");
    check_field_offset(lv, s4305c5f2, ABISELECT(48,40), "S4305C5.s4305c5f2");
    check_field_offset(lv, s4305c5f3, ABISELECT(72,64), "S4305C5.s4305c5f3");
    check_field_offset(lv, s4305c5f4, ABISELECT(76,68), "S4305C5.s4305c5f4");
    test_class_info(&lv, &cd_S4305C5);
    dp->~S4305C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4305C5(Test_S4305C5, "S4305C5", ABISELECT(88,76));

#else // __cplusplus

extern void _ZN7S4305C5C1Ev();
extern void _ZN7S4305C5D1Ev();
Name_Map name_map_S4305C5[] = {
  NSPAIR(_ZN7S4305C5C1Ev),
  NSPAIR(_ZN7S4305C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4305C5[];
extern void _ZN7S4305C5D1Ev();
extern void _ZN7S4305C5D0Ev();
extern void _ZN7S4305C53v59Ev();
extern void _ZN7S4305C53v60Ev();
static  VTBL_ENTRY vtc_S4305C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4305C5[0]),
  (VTBL_ENTRY)&_ZN7S4305C5D1Ev,
  (VTBL_ENTRY)&_ZN7S4305C5D0Ev,
  (VTBL_ENTRY)&_ZN7S4305C53v59Ev,
  (VTBL_ENTRY)&_ZN7S4305C53v60Ev,
};
extern VTBL_ENTRY _ZTI7S4305C5[];
extern  VTBL_ENTRY _ZTV7S4305C5[];
Class_Descriptor cd_S4305C5 = {  "S4305C5", // class name
  0,0,//no base classes
  &(vtc_S4305C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(88,76), // object size
  NSPAIRA(_ZTI7S4305C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4305C5),6, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4305C6_nt  {
  virtual  ~S4305C6_nt(); // _ZN10S4305C6_ntD1Ev
  virtual void  v61(); // _ZN10S4305C6_nt3v61Ev
  virtual void  v62(); // _ZN10S4305C6_nt3v62Ev
  virtual void  v63(); // _ZN10S4305C6_nt3v63Ev
  virtual void  v64(); // _ZN10S4305C6_nt3v64Ev
  virtual void  v65(); // _ZN10S4305C6_nt3v65Ev
  S4305C6_nt(); // tgen
};
//SIG(-1 S4305C6_nt) C1{ vd v1 v2 v3 v4 v5}


 S4305C6_nt ::~S4305C6_nt(){ note_dtor("S4305C6_nt", this);}
void  S4305C6_nt ::v61(){vfunc_called(this, "_ZN10S4305C6_nt3v61Ev");}
void  S4305C6_nt ::v62(){vfunc_called(this, "_ZN10S4305C6_nt3v62Ev");}
void  S4305C6_nt ::v63(){vfunc_called(this, "_ZN10S4305C6_nt3v63Ev");}
void  S4305C6_nt ::v64(){vfunc_called(this, "_ZN10S4305C6_nt3v64Ev");}
void  S4305C6_nt ::v65(){vfunc_called(this, "_ZN10S4305C6_nt3v65Ev");}
S4305C6_nt ::S4305C6_nt(){ note_ctor("S4305C6_nt", this);} // tgen

//skip512 S4305C6_nt

#else // __cplusplus

extern void _ZN10S4305C6_ntC1Ev();
extern void _ZN10S4305C6_ntD1Ev();
Name_Map name_map_S4305C6_nt[] = {
  NSPAIR(_ZN10S4305C6_ntC1Ev),
  NSPAIR(_ZN10S4305C6_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S4305C6_nt[];
extern void _ZN10S4305C6_ntD1Ev();
extern void _ZN10S4305C6_ntD0Ev();
extern void _ZN10S4305C6_nt3v61Ev();
extern void _ZN10S4305C6_nt3v62Ev();
extern void _ZN10S4305C6_nt3v63Ev();
extern void _ZN10S4305C6_nt3v64Ev();
extern void _ZN10S4305C6_nt3v65Ev();
static  VTBL_ENTRY vtc_S4305C6_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S4305C6_nt[0]),
  (VTBL_ENTRY)&_ZN10S4305C6_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S4305C6_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S4305C6_nt3v61Ev,
  (VTBL_ENTRY)&_ZN10S4305C6_nt3v62Ev,
  (VTBL_ENTRY)&_ZN10S4305C6_nt3v63Ev,
  (VTBL_ENTRY)&_ZN10S4305C6_nt3v64Ev,
  (VTBL_ENTRY)&_ZN10S4305C6_nt3v65Ev,
};
extern VTBL_ENTRY _ZTI10S4305C6_nt[];
VTBL_ENTRY *P__ZTI10S4305C6_nt = _ZTI10S4305C6_nt; 
extern  VTBL_ENTRY _ZTV10S4305C6_nt[];
Class_Descriptor cd_S4305C6_nt = {  "S4305C6_nt", // class name
  0,0,//no base classes
  &(vtc_S4305C6_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI10S4305C6_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S4305C6_nt),9, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4305C1  : S4305C2 , S4305C5 , S4305C6_nt {
  long s4305c1f0[3];
  int s4305c1f1[2];
  char s4305c1f2[2];
  int s4305c1f3[2];
  char s4305c1f4;
  int s4305c1f5;
  ::S4666C13_nt s4305c1f6;
  void *s4305c1f7[2];
  int s4305c1f8;
  void *s4305c1f9;
  int s4305c1f10;
  char s4305c1f11[2];
  int s4305c1f12[3];
  void *s4305c1f13[2];
  int s4305c1f14;
  void *s4305c1f15[3];
  virtual  ~S4305C1(); // _ZN7S4305C1D1Ev
  virtual void  v1(); // _ZN7S4305C12v1Ev
  virtual void  v2(); // _ZN7S4305C12v2Ev
  virtual void  v3(); // _ZN7S4305C12v3Ev
  virtual void  v4(); // _ZN7S4305C12v4Ev
  virtual void  v5(); // _ZN7S4305C12v5Ev
  virtual void  v6(); // _ZN7S4305C12v6Ev
  virtual void  v7(); // _ZN7S4305C12v7Ev
  virtual void  v8(); // _ZN7S4305C12v8Ev
  virtual void  v9(); // _ZN7S4305C12v9Ev
  virtual void  v10(); // _ZN7S4305C13v10Ev
  virtual void  v11(); // _ZN7S4305C13v11Ev
  virtual void  v12(); // _ZN7S4305C13v12Ev
  virtual void  v13(); // _ZN7S4305C13v13Ev
  virtual void  v14(); // _ZN7S4305C13v14Ev
  virtual void  v15(); // _ZN7S4305C13v15Ev
  virtual void  v16(); // _ZN7S4305C13v16Ev
  virtual void  v17(); // _ZN7S4305C13v17Ev
  virtual void  v18(); // _ZN7S4305C13v18Ev
  S4305C1(); // tgen
};
//SIG(1 S4305C1) C1{ BC2{ BC3{ vd v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44} vd v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 Fp[2] Fi[4] FC4{ Fi[2]} Fp Fc Fp} BC5{ vd v59 v60 Fp Fc[32] Fi[6] Fc Fi[2]} BC6{ vd v61 v62 v63 v64 v65} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 Fl[3] Fi[2] Fc[2] Fi[2] Fc Fi FC7{ FL} Fp[2] Fi Fp Fi Fc[2] Fi[3] Fp[2] Fi Fp[3]}


 S4305C1 ::~S4305C1(){ note_dtor("S4305C1", this);}
void  S4305C1 ::v1(){vfunc_called(this, "_ZN7S4305C12v1Ev");}
void  S4305C1 ::v2(){vfunc_called(this, "_ZN7S4305C12v2Ev");}
void  S4305C1 ::v3(){vfunc_called(this, "_ZN7S4305C12v3Ev");}
void  S4305C1 ::v4(){vfunc_called(this, "_ZN7S4305C12v4Ev");}
void  S4305C1 ::v5(){vfunc_called(this, "_ZN7S4305C12v5Ev");}
void  S4305C1 ::v6(){vfunc_called(this, "_ZN7S4305C12v6Ev");}
void  S4305C1 ::v7(){vfunc_called(this, "_ZN7S4305C12v7Ev");}
void  S4305C1 ::v8(){vfunc_called(this, "_ZN7S4305C12v8Ev");}
void  S4305C1 ::v9(){vfunc_called(this, "_ZN7S4305C12v9Ev");}
void  S4305C1 ::v10(){vfunc_called(this, "_ZN7S4305C13v10Ev");}
void  S4305C1 ::v11(){vfunc_called(this, "_ZN7S4305C13v11Ev");}
void  S4305C1 ::v12(){vfunc_called(this, "_ZN7S4305C13v12Ev");}
void  S4305C1 ::v13(){vfunc_called(this, "_ZN7S4305C13v13Ev");}
void  S4305C1 ::v14(){vfunc_called(this, "_ZN7S4305C13v14Ev");}
void  S4305C1 ::v15(){vfunc_called(this, "_ZN7S4305C13v15Ev");}
void  S4305C1 ::v16(){vfunc_called(this, "_ZN7S4305C13v16Ev");}
void  S4305C1 ::v17(){vfunc_called(this, "_ZN7S4305C13v17Ev");}
void  S4305C1 ::v18(){vfunc_called(this, "_ZN7S4305C13v18Ev");}
S4305C1 ::S4305C1(){ note_ctor("S4305C1", this);} // tgen

static void Test_S4305C1()
{
  extern Class_Descriptor cd_S4305C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(43,60)];
    init_test(&cd_S4305C1, buf);
    S4305C1 *dp, &lv = *(dp=new (buf) S4305C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(336,236), "sizeof(S4305C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4305C1)");
    check_base_class_offset(lv, (S4305C3*)(S4305C2*), 0, "S4305C1");
    check_base_class_offset(lv, (S4305C2*), 0, "S4305C1");
    check_base_class_offset(lv, (S4305C5*), ABISELECT(72,48), "S4305C1");
    check_base_class_offset(lv, (S4305C6_nt*), ABISELECT(160,124), "S4305C1");
    check_field_offset(lv, s4305c1f0, ABISELECT(168,128), "S4305C1.s4305c1f0");
    check_field_offset(lv, s4305c1f1, ABISELECT(192,140), "S4305C1.s4305c1f1");
    check_field_offset(lv, s4305c1f2, ABISELECT(200,148), "S4305C1.s4305c1f2");
    check_field_offset(lv, s4305c1f3, ABISELECT(204,152), "S4305C1.s4305c1f3");
    check_field_offset(lv, s4305c1f4, ABISELECT(212,160), "S4305C1.s4305c1f4");
    check_field_offset(lv, s4305c1f5, ABISELECT(216,164), "S4305C1.s4305c1f5");
    check_field_offset(lv, s4305c1f6, ABISELECT(224,168), "S4305C1.s4305c1f6");
    check_field_offset(lv, s4305c1f7, ABISELECT(232,176), "S4305C1.s4305c1f7");
    check_field_offset(lv, s4305c1f8, ABISELECT(248,184), "S4305C1.s4305c1f8");
    check_field_offset(lv, s4305c1f9, ABISELECT(256,188), "S4305C1.s4305c1f9");
    check_field_offset(lv, s4305c1f10, ABISELECT(264,192), "S4305C1.s4305c1f10");
    check_field_offset(lv, s4305c1f11, ABISELECT(268,196), "S4305C1.s4305c1f11");
    check_field_offset(lv, s4305c1f12, ABISELECT(272,200), "S4305C1.s4305c1f12");
    check_field_offset(lv, s4305c1f13, ABISELECT(288,212), "S4305C1.s4305c1f13");
    check_field_offset(lv, s4305c1f14, ABISELECT(304,220), "S4305C1.s4305c1f14");
    check_field_offset(lv, s4305c1f15, ABISELECT(312,224), "S4305C1.s4305c1f15");
    test_class_info(&lv, &cd_S4305C1);
    dp->~S4305C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4305C1(Test_S4305C1, "S4305C1", ABISELECT(336,236));

#else // __cplusplus

extern void _ZN7S4305C1C1Ev();
extern void _ZN7S4305C1D1Ev();
Name_Map name_map_S4305C1[] = {
  NSPAIR(_ZN7S4305C1C1Ev),
  NSPAIR(_ZN7S4305C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4305C3;
extern VTBL_ENTRY _ZTI7S4305C3[];
extern  VTBL_ENTRY _ZTV7S4305C3[];
extern Class_Descriptor cd_S4305C2;
extern VTBL_ENTRY _ZTI7S4305C2[];
extern  VTBL_ENTRY _ZTV7S4305C2[];
extern Class_Descriptor cd_S4305C5;
extern VTBL_ENTRY _ZTI7S4305C5[];
extern  VTBL_ENTRY _ZTV7S4305C5[];
extern Class_Descriptor cd_S4305C6_nt;
extern VTBL_ENTRY _ZTI10S4305C6_nt[];
extern  VTBL_ENTRY _ZTV10S4305C6_nt[];
static Base_Class bases_S4305C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4305C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S4305C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S4305C5,    ABISELECT(72,48), //bcp->offset
    62, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S4305C6_nt,    ABISELECT(160,124), //bcp->offset
    68, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4305C1[];
extern void _ZN7S4305C1D1Ev();
extern void _ZN7S4305C1D0Ev();
extern void _ZN7S4305C33v19Ev();
extern void _ZN7S4305C33v20Ev();
extern void _ZN7S4305C33v21Ev();
extern void _ZN7S4305C33v22Ev();
extern void _ZN7S4305C33v23Ev();
extern void _ZN7S4305C33v24Ev();
extern void _ZN7S4305C33v25Ev();
extern void _ZN7S4305C33v26Ev();
extern void _ZN7S4305C33v27Ev();
extern void _ZN7S4305C33v28Ev();
extern void _ZN7S4305C33v29Ev();
extern void _ZN7S4305C33v30Ev();
extern void _ZN7S4305C33v31Ev();
extern void _ZN7S4305C33v32Ev();
extern void _ZN7S4305C33v33Ev();
extern void _ZN7S4305C33v34Ev();
extern void _ZN7S4305C33v35Ev();
extern void _ZN7S4305C33v36Ev();
extern void _ZN7S4305C33v37Ev();
extern void _ZN7S4305C33v38Ev();
extern void _ZN7S4305C33v39Ev();
extern void _ZN7S4305C33v40Ev();
extern void _ZN7S4305C33v41Ev();
extern void _ZN7S4305C33v42Ev();
extern void _ZN7S4305C33v43Ev();
extern void _ZN7S4305C33v44Ev();
extern void _ZN7S4305C23v45Ev();
extern void _ZN7S4305C23v46Ev();
extern void _ZN7S4305C23v47Ev();
extern void _ZN7S4305C23v48Ev();
extern void _ZN7S4305C23v49Ev();
extern void _ZN7S4305C23v50Ev();
extern void _ZN7S4305C23v51Ev();
extern void _ZN7S4305C23v52Ev();
extern void _ZN7S4305C23v53Ev();
extern void _ZN7S4305C23v54Ev();
extern void _ZN7S4305C23v55Ev();
extern void _ZN7S4305C23v56Ev();
extern void _ZN7S4305C23v57Ev();
extern void _ZN7S4305C23v58Ev();
extern void _ZN7S4305C12v1Ev();
extern void _ZN7S4305C12v2Ev();
extern void _ZN7S4305C12v3Ev();
extern void _ZN7S4305C12v4Ev();
extern void _ZN7S4305C12v5Ev();
extern void _ZN7S4305C12v6Ev();
extern void _ZN7S4305C12v7Ev();
extern void _ZN7S4305C12v8Ev();
extern void _ZN7S4305C12v9Ev();
extern void _ZN7S4305C13v10Ev();
extern void _ZN7S4305C13v11Ev();
extern void _ZN7S4305C13v12Ev();
extern void _ZN7S4305C13v13Ev();
extern void _ZN7S4305C13v14Ev();
extern void _ZN7S4305C13v15Ev();
extern void _ZN7S4305C13v16Ev();
extern void _ZN7S4305C13v17Ev();
extern void _ZN7S4305C13v18Ev();
extern void ABISELECT(_ZThn72_N7S4305C1D1Ev,_ZThn48_N7S4305C1D1Ev)();
extern void ABISELECT(_ZThn72_N7S4305C1D0Ev,_ZThn48_N7S4305C1D0Ev)();
extern void _ZN7S4305C53v59Ev();
extern void _ZN7S4305C53v60Ev();
extern void ABISELECT(_ZThn160_N7S4305C1D1Ev,_ZThn124_N7S4305C1D1Ev)();
extern void ABISELECT(_ZThn160_N7S4305C1D0Ev,_ZThn124_N7S4305C1D0Ev)();
extern void _ZN10S4305C6_nt3v61Ev();
extern void _ZN10S4305C6_nt3v62Ev();
extern void _ZN10S4305C6_nt3v63Ev();
extern void _ZN10S4305C6_nt3v64Ev();
extern void _ZN10S4305C6_nt3v65Ev();
static  VTBL_ENTRY vtc_S4305C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4305C1[0]),
  (VTBL_ENTRY)&_ZN7S4305C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4305C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4305C33v19Ev,
  (VTBL_ENTRY)&_ZN7S4305C33v20Ev,
  (VTBL_ENTRY)&_ZN7S4305C33v21Ev,
  (VTBL_ENTRY)&_ZN7S4305C33v22Ev,
  (VTBL_ENTRY)&_ZN7S4305C33v23Ev,
  (VTBL_ENTRY)&_ZN7S4305C33v24Ev,
  (VTBL_ENTRY)&_ZN7S4305C33v25Ev,
  (VTBL_ENTRY)&_ZN7S4305C33v26Ev,
  (VTBL_ENTRY)&_ZN7S4305C33v27Ev,
  (VTBL_ENTRY)&_ZN7S4305C33v28Ev,
  (VTBL_ENTRY)&_ZN7S4305C33v29Ev,
  (VTBL_ENTRY)&_ZN7S4305C33v30Ev,
  (VTBL_ENTRY)&_ZN7S4305C33v31Ev,
  (VTBL_ENTRY)&_ZN7S4305C33v32Ev,
  (VTBL_ENTRY)&_ZN7S4305C33v33Ev,
  (VTBL_ENTRY)&_ZN7S4305C33v34Ev,
  (VTBL_ENTRY)&_ZN7S4305C33v35Ev,
  (VTBL_ENTRY)&_ZN7S4305C33v36Ev,
  (VTBL_ENTRY)&_ZN7S4305C33v37Ev,
  (VTBL_ENTRY)&_ZN7S4305C33v38Ev,
  (VTBL_ENTRY)&_ZN7S4305C33v39Ev,
  (VTBL_ENTRY)&_ZN7S4305C33v40Ev,
  (VTBL_ENTRY)&_ZN7S4305C33v41Ev,
  (VTBL_ENTRY)&_ZN7S4305C33v42Ev,
  (VTBL_ENTRY)&_ZN7S4305C33v43Ev,
  (VTBL_ENTRY)&_ZN7S4305C33v44Ev,
  (VTBL_ENTRY)&_ZN7S4305C23v45Ev,
  (VTBL_ENTRY)&_ZN7S4305C23v46Ev,
  (VTBL_ENTRY)&_ZN7S4305C23v47Ev,
  (VTBL_ENTRY)&_ZN7S4305C23v48Ev,
  (VTBL_ENTRY)&_ZN7S4305C23v49Ev,
  (VTBL_ENTRY)&_ZN7S4305C23v50Ev,
  (VTBL_ENTRY)&_ZN7S4305C23v51Ev,
  (VTBL_ENTRY)&_ZN7S4305C23v52Ev,
  (VTBL_ENTRY)&_ZN7S4305C23v53Ev,
  (VTBL_ENTRY)&_ZN7S4305C23v54Ev,
  (VTBL_ENTRY)&_ZN7S4305C23v55Ev,
  (VTBL_ENTRY)&_ZN7S4305C23v56Ev,
  (VTBL_ENTRY)&_ZN7S4305C23v57Ev,
  (VTBL_ENTRY)&_ZN7S4305C23v58Ev,
  (VTBL_ENTRY)&_ZN7S4305C12v1Ev,
  (VTBL_ENTRY)&_ZN7S4305C12v2Ev,
  (VTBL_ENTRY)&_ZN7S4305C12v3Ev,
  (VTBL_ENTRY)&_ZN7S4305C12v4Ev,
  (VTBL_ENTRY)&_ZN7S4305C12v5Ev,
  (VTBL_ENTRY)&_ZN7S4305C12v6Ev,
  (VTBL_ENTRY)&_ZN7S4305C12v7Ev,
  (VTBL_ENTRY)&_ZN7S4305C12v8Ev,
  (VTBL_ENTRY)&_ZN7S4305C12v9Ev,
  (VTBL_ENTRY)&_ZN7S4305C13v10Ev,
  (VTBL_ENTRY)&_ZN7S4305C13v11Ev,
  (VTBL_ENTRY)&_ZN7S4305C13v12Ev,
  (VTBL_ENTRY)&_ZN7S4305C13v13Ev,
  (VTBL_ENTRY)&_ZN7S4305C13v14Ev,
  (VTBL_ENTRY)&_ZN7S4305C13v15Ev,
  (VTBL_ENTRY)&_ZN7S4305C13v16Ev,
  (VTBL_ENTRY)&_ZN7S4305C13v17Ev,
  (VTBL_ENTRY)&_ZN7S4305C13v18Ev,
  ABISELECT(-72,-48),
  (VTBL_ENTRY)&(_ZTI7S4305C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn72_N7S4305C1D1Ev,_ZThn48_N7S4305C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn72_N7S4305C1D0Ev,_ZThn48_N7S4305C1D0Ev),
  (VTBL_ENTRY)&_ZN7S4305C53v59Ev,
  (VTBL_ENTRY)&_ZN7S4305C53v60Ev,
  ABISELECT(-160,-124),
  (VTBL_ENTRY)&(_ZTI7S4305C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn160_N7S4305C1D1Ev,_ZThn124_N7S4305C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn160_N7S4305C1D0Ev,_ZThn124_N7S4305C1D0Ev),
  (VTBL_ENTRY)&_ZN10S4305C6_nt3v61Ev,
  (VTBL_ENTRY)&_ZN10S4305C6_nt3v62Ev,
  (VTBL_ENTRY)&_ZN10S4305C6_nt3v63Ev,
  (VTBL_ENTRY)&_ZN10S4305C6_nt3v64Ev,
  (VTBL_ENTRY)&_ZN10S4305C6_nt3v65Ev,
};
extern VTBL_ENTRY _ZTI7S4305C1[];
extern  VTBL_ENTRY _ZTV7S4305C1[];
Class_Descriptor cd_S4305C1 = {  "S4305C1", // class name
  bases_S4305C1, 4,
  &(vtc_S4305C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(336,236), // object size
  NSPAIRA(_ZTI7S4305C1),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S4305C1),77, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  4, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4289C3  {
  virtual  ~S4289C3(); // _ZN7S4289C3D1Ev
  virtual void  v17(); // _ZN7S4289C33v17Ev
  virtual void  v18(); // _ZN7S4289C33v18Ev
  virtual void  v19(); // _ZN7S4289C33v19Ev
  virtual void  v20(); // _ZN7S4289C33v20Ev
  virtual void  v21(); // _ZN7S4289C33v21Ev
  virtual void  v22(); // _ZN7S4289C33v22Ev
  virtual void  v23(); // _ZN7S4289C33v23Ev
  virtual void  v24(); // _ZN7S4289C33v24Ev
  virtual void  v25(); // _ZN7S4289C33v25Ev
  virtual void  v26(); // _ZN7S4289C33v26Ev
  virtual void  v27(); // _ZN7S4289C33v27Ev
  virtual void  v28(); // _ZN7S4289C33v28Ev
  virtual void  v29(); // _ZN7S4289C33v29Ev
  virtual void  v30(); // _ZN7S4289C33v30Ev
  virtual void  v31(); // _ZN7S4289C33v31Ev
  virtual void  v32(); // _ZN7S4289C33v32Ev
  virtual void  v33(); // _ZN7S4289C33v33Ev
  virtual void  v34(); // _ZN7S4289C33v34Ev
  virtual void  v35(); // _ZN7S4289C33v35Ev
  virtual void  v36(); // _ZN7S4289C33v36Ev
  virtual void  v37(); // _ZN7S4289C33v37Ev
  virtual void  v38(); // _ZN7S4289C33v38Ev
  virtual void  v39(); // _ZN7S4289C33v39Ev
  virtual void  v40(); // _ZN7S4289C33v40Ev
  virtual void  v41(); // _ZN7S4289C33v41Ev
  virtual void  v42(); // _ZN7S4289C33v42Ev
  S4289C3(); // tgen
};
//SIG(-1 S4289C3) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26}


 S4289C3 ::~S4289C3(){ note_dtor("S4289C3", this);}
void  S4289C3 ::v17(){vfunc_called(this, "_ZN7S4289C33v17Ev");}
void  S4289C3 ::v18(){vfunc_called(this, "_ZN7S4289C33v18Ev");}
void  S4289C3 ::v19(){vfunc_called(this, "_ZN7S4289C33v19Ev");}
void  S4289C3 ::v20(){vfunc_called(this, "_ZN7S4289C33v20Ev");}
void  S4289C3 ::v21(){vfunc_called(this, "_ZN7S4289C33v21Ev");}
void  S4289C3 ::v22(){vfunc_called(this, "_ZN7S4289C33v22Ev");}
void  S4289C3 ::v23(){vfunc_called(this, "_ZN7S4289C33v23Ev");}
void  S4289C3 ::v24(){vfunc_called(this, "_ZN7S4289C33v24Ev");}
void  S4289C3 ::v25(){vfunc_called(this, "_ZN7S4289C33v25Ev");}
void  S4289C3 ::v26(){vfunc_called(this, "_ZN7S4289C33v26Ev");}
void  S4289C3 ::v27(){vfunc_called(this, "_ZN7S4289C33v27Ev");}
void  S4289C3 ::v28(){vfunc_called(this, "_ZN7S4289C33v28Ev");}
void  S4289C3 ::v29(){vfunc_called(this, "_ZN7S4289C33v29Ev");}
void  S4289C3 ::v30(){vfunc_called(this, "_ZN7S4289C33v30Ev");}
void  S4289C3 ::v31(){vfunc_called(this, "_ZN7S4289C33v31Ev");}
void  S4289C3 ::v32(){vfunc_called(this, "_ZN7S4289C33v32Ev");}
void  S4289C3 ::v33(){vfunc_called(this, "_ZN7S4289C33v33Ev");}
void  S4289C3 ::v34(){vfunc_called(this, "_ZN7S4289C33v34Ev");}
void  S4289C3 ::v35(){vfunc_called(this, "_ZN7S4289C33v35Ev");}
void  S4289C3 ::v36(){vfunc_called(this, "_ZN7S4289C33v36Ev");}
void  S4289C3 ::v37(){vfunc_called(this, "_ZN7S4289C33v37Ev");}
void  S4289C3 ::v38(){vfunc_called(this, "_ZN7S4289C33v38Ev");}
void  S4289C3 ::v39(){vfunc_called(this, "_ZN7S4289C33v39Ev");}
void  S4289C3 ::v40(){vfunc_called(this, "_ZN7S4289C33v40Ev");}
void  S4289C3 ::v41(){vfunc_called(this, "_ZN7S4289C33v41Ev");}
void  S4289C3 ::v42(){vfunc_called(this, "_ZN7S4289C33v42Ev");}
S4289C3 ::S4289C3(){ note_ctor("S4289C3", this);} // tgen

static void Test_S4289C3()
{
  extern Class_Descriptor cd_S4289C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S4289C3, buf);
    S4289C3 *dp, &lv = *(dp=new (buf) S4289C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S4289C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4289C3)");
    test_class_info(&lv, &cd_S4289C3);
    dp->~S4289C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4289C3(Test_S4289C3, "S4289C3", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S4289C3C1Ev();
extern void _ZN7S4289C3D1Ev();
Name_Map name_map_S4289C3[] = {
  NSPAIR(_ZN7S4289C3C1Ev),
  NSPAIR(_ZN7S4289C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4289C3[];
extern void _ZN7S4289C3D1Ev();
extern void _ZN7S4289C3D0Ev();
extern void _ZN7S4289C33v17Ev();
extern void _ZN7S4289C33v18Ev();
extern void _ZN7S4289C33v19Ev();
extern void _ZN7S4289C33v20Ev();
extern void _ZN7S4289C33v21Ev();
extern void _ZN7S4289C33v22Ev();
extern void _ZN7S4289C33v23Ev();
extern void _ZN7S4289C33v24Ev();
extern void _ZN7S4289C33v25Ev();
extern void _ZN7S4289C33v26Ev();
extern void _ZN7S4289C33v27Ev();
extern void _ZN7S4289C33v28Ev();
extern void _ZN7S4289C33v29Ev();
extern void _ZN7S4289C33v30Ev();
extern void _ZN7S4289C33v31Ev();
extern void _ZN7S4289C33v32Ev();
extern void _ZN7S4289C33v33Ev();
extern void _ZN7S4289C33v34Ev();
extern void _ZN7S4289C33v35Ev();
extern void _ZN7S4289C33v36Ev();
extern void _ZN7S4289C33v37Ev();
extern void _ZN7S4289C33v38Ev();
extern void _ZN7S4289C33v39Ev();
extern void _ZN7S4289C33v40Ev();
extern void _ZN7S4289C33v41Ev();
extern void _ZN7S4289C33v42Ev();
static  VTBL_ENTRY vtc_S4289C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4289C3[0]),
  (VTBL_ENTRY)&_ZN7S4289C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4289C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4289C33v17Ev,
  (VTBL_ENTRY)&_ZN7S4289C33v18Ev,
  (VTBL_ENTRY)&_ZN7S4289C33v19Ev,
  (VTBL_ENTRY)&_ZN7S4289C33v20Ev,
  (VTBL_ENTRY)&_ZN7S4289C33v21Ev,
  (VTBL_ENTRY)&_ZN7S4289C33v22Ev,
  (VTBL_ENTRY)&_ZN7S4289C33v23Ev,
  (VTBL_ENTRY)&_ZN7S4289C33v24Ev,
  (VTBL_ENTRY)&_ZN7S4289C33v25Ev,
  (VTBL_ENTRY)&_ZN7S4289C33v26Ev,
  (VTBL_ENTRY)&_ZN7S4289C33v27Ev,
  (VTBL_ENTRY)&_ZN7S4289C33v28Ev,
  (VTBL_ENTRY)&_ZN7S4289C33v29Ev,
  (VTBL_ENTRY)&_ZN7S4289C33v30Ev,
  (VTBL_ENTRY)&_ZN7S4289C33v31Ev,
  (VTBL_ENTRY)&_ZN7S4289C33v32Ev,
  (VTBL_ENTRY)&_ZN7S4289C33v33Ev,
  (VTBL_ENTRY)&_ZN7S4289C33v34Ev,
  (VTBL_ENTRY)&_ZN7S4289C33v35Ev,
  (VTBL_ENTRY)&_ZN7S4289C33v36Ev,
  (VTBL_ENTRY)&_ZN7S4289C33v37Ev,
  (VTBL_ENTRY)&_ZN7S4289C33v38Ev,
  (VTBL_ENTRY)&_ZN7S4289C33v39Ev,
  (VTBL_ENTRY)&_ZN7S4289C33v40Ev,
  (VTBL_ENTRY)&_ZN7S4289C33v41Ev,
  (VTBL_ENTRY)&_ZN7S4289C33v42Ev,
};
extern VTBL_ENTRY _ZTI7S4289C3[];
extern  VTBL_ENTRY _ZTV7S4289C3[];
Class_Descriptor cd_S4289C3 = {  "S4289C3", // class name
  0,0,//no base classes
  &(vtc_S4289C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S4289C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4289C3),30, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4289C2  : S4289C3 {
  void *s4289c2f0[2];
  int s4289c2f1[4];
  ::S2423C5_nt s4289c2f2;
  void *s4289c2f3;
  char s4289c2f4;
  void *s4289c2f5;
  virtual  ~S4289C2(); // _ZN7S4289C2D1Ev
  virtual void  v43(); // _ZN7S4289C23v43Ev
  virtual void  v44(); // _ZN7S4289C23v44Ev
  virtual void  v45(); // _ZN7S4289C23v45Ev
  virtual void  v46(); // _ZN7S4289C23v46Ev
  virtual void  v47(); // _ZN7S4289C23v47Ev
  virtual void  v48(); // _ZN7S4289C23v48Ev
  virtual void  v49(); // _ZN7S4289C23v49Ev
  virtual void  v50(); // _ZN7S4289C23v50Ev
  virtual void  v51(); // _ZN7S4289C23v51Ev
  virtual void  v52(); // _ZN7S4289C23v52Ev
  virtual void  v53(); // _ZN7S4289C23v53Ev
  virtual void  v54(); // _ZN7S4289C23v54Ev
  virtual void  v55(); // _ZN7S4289C23v55Ev
  virtual void  v56(); // _ZN7S4289C23v56Ev
  S4289C2(); // tgen
};
//SIG(-1 S4289C2) C1{ BC2{ vd v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 Fp[2] Fi[4] FC3{ Fi[2]} Fp Fc Fp}


 S4289C2 ::~S4289C2(){ note_dtor("S4289C2", this);}
void  S4289C2 ::v43(){vfunc_called(this, "_ZN7S4289C23v43Ev");}
void  S4289C2 ::v44(){vfunc_called(this, "_ZN7S4289C23v44Ev");}
void  S4289C2 ::v45(){vfunc_called(this, "_ZN7S4289C23v45Ev");}
void  S4289C2 ::v46(){vfunc_called(this, "_ZN7S4289C23v46Ev");}
void  S4289C2 ::v47(){vfunc_called(this, "_ZN7S4289C23v47Ev");}
void  S4289C2 ::v48(){vfunc_called(this, "_ZN7S4289C23v48Ev");}
void  S4289C2 ::v49(){vfunc_called(this, "_ZN7S4289C23v49Ev");}
void  S4289C2 ::v50(){vfunc_called(this, "_ZN7S4289C23v50Ev");}
void  S4289C2 ::v51(){vfunc_called(this, "_ZN7S4289C23v51Ev");}
void  S4289C2 ::v52(){vfunc_called(this, "_ZN7S4289C23v52Ev");}
void  S4289C2 ::v53(){vfunc_called(this, "_ZN7S4289C23v53Ev");}
void  S4289C2 ::v54(){vfunc_called(this, "_ZN7S4289C23v54Ev");}
void  S4289C2 ::v55(){vfunc_called(this, "_ZN7S4289C23v55Ev");}
void  S4289C2 ::v56(){vfunc_called(this, "_ZN7S4289C23v56Ev");}
S4289C2 ::S4289C2(){ note_ctor("S4289C2", this);} // tgen

static void Test_S4289C2()
{
  extern Class_Descriptor cd_S4289C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,13)];
    init_test(&cd_S4289C2, buf);
    S4289C2 *dp, &lv = *(dp=new (buf) S4289C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,48), "sizeof(S4289C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4289C2)");
    check_base_class_offset(lv, (S4289C3*), 0, "S4289C2");
    check_field_offset(lv, s4289c2f0, ABISELECT(8,4), "S4289C2.s4289c2f0");
    check_field_offset(lv, s4289c2f1, ABISELECT(24,12), "S4289C2.s4289c2f1");
    check_field_offset(lv, s4289c2f2, ABISELECT(40,28), "S4289C2.s4289c2f2");
    check_field_offset(lv, s4289c2f3, ABISELECT(48,36), "S4289C2.s4289c2f3");
    check_field_offset(lv, s4289c2f4, ABISELECT(56,40), "S4289C2.s4289c2f4");
    check_field_offset(lv, s4289c2f5, ABISELECT(64,44), "S4289C2.s4289c2f5");
    test_class_info(&lv, &cd_S4289C2);
    dp->~S4289C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4289C2(Test_S4289C2, "S4289C2", ABISELECT(72,48));

#else // __cplusplus

extern void _ZN7S4289C2C1Ev();
extern void _ZN7S4289C2D1Ev();
Name_Map name_map_S4289C2[] = {
  NSPAIR(_ZN7S4289C2C1Ev),
  NSPAIR(_ZN7S4289C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4289C3;
extern VTBL_ENTRY _ZTI7S4289C3[];
extern  VTBL_ENTRY _ZTV7S4289C3[];
static Base_Class bases_S4289C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4289C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4289C2[];
extern void _ZN7S4289C2D1Ev();
extern void _ZN7S4289C2D0Ev();
extern void _ZN7S4289C33v17Ev();
extern void _ZN7S4289C33v18Ev();
extern void _ZN7S4289C33v19Ev();
extern void _ZN7S4289C33v20Ev();
extern void _ZN7S4289C33v21Ev();
extern void _ZN7S4289C33v22Ev();
extern void _ZN7S4289C33v23Ev();
extern void _ZN7S4289C33v24Ev();
extern void _ZN7S4289C33v25Ev();
extern void _ZN7S4289C33v26Ev();
extern void _ZN7S4289C33v27Ev();
extern void _ZN7S4289C33v28Ev();
extern void _ZN7S4289C33v29Ev();
extern void _ZN7S4289C33v30Ev();
extern void _ZN7S4289C33v31Ev();
extern void _ZN7S4289C33v32Ev();
extern void _ZN7S4289C33v33Ev();
extern void _ZN7S4289C33v34Ev();
extern void _ZN7S4289C33v35Ev();
extern void _ZN7S4289C33v36Ev();
extern void _ZN7S4289C33v37Ev();
extern void _ZN7S4289C33v38Ev();
extern void _ZN7S4289C33v39Ev();
extern void _ZN7S4289C33v40Ev();
extern void _ZN7S4289C33v41Ev();
extern void _ZN7S4289C33v42Ev();
extern void _ZN7S4289C23v43Ev();
extern void _ZN7S4289C23v44Ev();
extern void _ZN7S4289C23v45Ev();
extern void _ZN7S4289C23v46Ev();
extern void _ZN7S4289C23v47Ev();
extern void _ZN7S4289C23v48Ev();
extern void _ZN7S4289C23v49Ev();
extern void _ZN7S4289C23v50Ev();
extern void _ZN7S4289C23v51Ev();
extern void _ZN7S4289C23v52Ev();
extern void _ZN7S4289C23v53Ev();
extern void _ZN7S4289C23v54Ev();
extern void _ZN7S4289C23v55Ev();
extern void _ZN7S4289C23v56Ev();
static  VTBL_ENTRY vtc_S4289C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4289C2[0]),
  (VTBL_ENTRY)&_ZN7S4289C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4289C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4289C33v17Ev,
  (VTBL_ENTRY)&_ZN7S4289C33v18Ev,
  (VTBL_ENTRY)&_ZN7S4289C33v19Ev,
  (VTBL_ENTRY)&_ZN7S4289C33v20Ev,
  (VTBL_ENTRY)&_ZN7S4289C33v21Ev,
  (VTBL_ENTRY)&_ZN7S4289C33v22Ev,
  (VTBL_ENTRY)&_ZN7S4289C33v23Ev,
  (VTBL_ENTRY)&_ZN7S4289C33v24Ev,
  (VTBL_ENTRY)&_ZN7S4289C33v25Ev,
  (VTBL_ENTRY)&_ZN7S4289C33v26Ev,
  (VTBL_ENTRY)&_ZN7S4289C33v27Ev,
  (VTBL_ENTRY)&_ZN7S4289C33v28Ev,
  (VTBL_ENTRY)&_ZN7S4289C33v29Ev,
  (VTBL_ENTRY)&_ZN7S4289C33v30Ev,
  (VTBL_ENTRY)&_ZN7S4289C33v31Ev,
  (VTBL_ENTRY)&_ZN7S4289C33v32Ev,
  (VTBL_ENTRY)&_ZN7S4289C33v33Ev,
  (VTBL_ENTRY)&_ZN7S4289C33v34Ev,
  (VTBL_ENTRY)&_ZN7S4289C33v35Ev,
  (VTBL_ENTRY)&_ZN7S4289C33v36Ev,
  (VTBL_ENTRY)&_ZN7S4289C33v37Ev,
  (VTBL_ENTRY)&_ZN7S4289C33v38Ev,
  (VTBL_ENTRY)&_ZN7S4289C33v39Ev,
  (VTBL_ENTRY)&_ZN7S4289C33v40Ev,
  (VTBL_ENTRY)&_ZN7S4289C33v41Ev,
  (VTBL_ENTRY)&_ZN7S4289C33v42Ev,
  (VTBL_ENTRY)&_ZN7S4289C23v43Ev,
  (VTBL_ENTRY)&_ZN7S4289C23v44Ev,
  (VTBL_ENTRY)&_ZN7S4289C23v45Ev,
  (VTBL_ENTRY)&_ZN7S4289C23v46Ev,
  (VTBL_ENTRY)&_ZN7S4289C23v47Ev,
  (VTBL_ENTRY)&_ZN7S4289C23v48Ev,
  (VTBL_ENTRY)&_ZN7S4289C23v49Ev,
  (VTBL_ENTRY)&_ZN7S4289C23v50Ev,
  (VTBL_ENTRY)&_ZN7S4289C23v51Ev,
  (VTBL_ENTRY)&_ZN7S4289C23v52Ev,
  (VTBL_ENTRY)&_ZN7S4289C23v53Ev,
  (VTBL_ENTRY)&_ZN7S4289C23v54Ev,
  (VTBL_ENTRY)&_ZN7S4289C23v55Ev,
  (VTBL_ENTRY)&_ZN7S4289C23v56Ev,
};
extern VTBL_ENTRY _ZTI7S4289C2[];
extern  VTBL_ENTRY _ZTV7S4289C2[];
Class_Descriptor cd_S4289C2 = {  "S4289C2", // class name
  bases_S4289C2, 1,
  &(vtc_S4289C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,48), // object size
  NSPAIRA(_ZTI7S4289C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4289C2),44, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4289C5  {
  void *s4289c5f0;
  char s4289c5f1[32];
  int s4289c5f2[6];
  char s4289c5f3;
  int s4289c5f4[2];
  virtual  ~S4289C5(); // _ZN7S4289C5D1Ev
  virtual void  v57(); // _ZN7S4289C53v57Ev
  virtual void  v58(); // _ZN7S4289C53v58Ev
  S4289C5(); // tgen
};
//SIG(-1 S4289C5) C1{ vd v1 v2 Fp Fc[32] Fi[6] Fc Fi[2]}


 S4289C5 ::~S4289C5(){ note_dtor("S4289C5", this);}
void  S4289C5 ::v57(){vfunc_called(this, "_ZN7S4289C53v57Ev");}
void  S4289C5 ::v58(){vfunc_called(this, "_ZN7S4289C53v58Ev");}
S4289C5 ::S4289C5(){ note_ctor("S4289C5", this);} // tgen

static void Test_S4289C5()
{
  extern Class_Descriptor cd_S4289C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(12,20)];
    init_test(&cd_S4289C5, buf);
    S4289C5 *dp, &lv = *(dp=new (buf) S4289C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(88,76), "sizeof(S4289C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4289C5)");
    check_field_offset(lv, s4289c5f0, ABISELECT(8,4), "S4289C5.s4289c5f0");
    check_field_offset(lv, s4289c5f1, ABISELECT(16,8), "S4289C5.s4289c5f1");
    check_field_offset(lv, s4289c5f2, ABISELECT(48,40), "S4289C5.s4289c5f2");
    check_field_offset(lv, s4289c5f3, ABISELECT(72,64), "S4289C5.s4289c5f3");
    check_field_offset(lv, s4289c5f4, ABISELECT(76,68), "S4289C5.s4289c5f4");
    test_class_info(&lv, &cd_S4289C5);
    dp->~S4289C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4289C5(Test_S4289C5, "S4289C5", ABISELECT(88,76));

#else // __cplusplus

extern void _ZN7S4289C5C1Ev();
extern void _ZN7S4289C5D1Ev();
Name_Map name_map_S4289C5[] = {
  NSPAIR(_ZN7S4289C5C1Ev),
  NSPAIR(_ZN7S4289C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4289C5[];
extern void _ZN7S4289C5D1Ev();
extern void _ZN7S4289C5D0Ev();
extern void _ZN7S4289C53v57Ev();
extern void _ZN7S4289C53v58Ev();
static  VTBL_ENTRY vtc_S4289C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4289C5[0]),
  (VTBL_ENTRY)&_ZN7S4289C5D1Ev,
  (VTBL_ENTRY)&_ZN7S4289C5D0Ev,
  (VTBL_ENTRY)&_ZN7S4289C53v57Ev,
  (VTBL_ENTRY)&_ZN7S4289C53v58Ev,
};
extern VTBL_ENTRY _ZTI7S4289C5[];
extern  VTBL_ENTRY _ZTV7S4289C5[];
Class_Descriptor cd_S4289C5 = {  "S4289C5", // class name
  0,0,//no base classes
  &(vtc_S4289C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(88,76), // object size
  NSPAIRA(_ZTI7S4289C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4289C5),6, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4289C6  {
  virtual  ~S4289C6(); // _ZN7S4289C6D1Ev
  virtual void  v59(); // _ZN7S4289C63v59Ev
  virtual void  v60(); // _ZN7S4289C63v60Ev
  virtual void  v61(); // _ZN7S4289C63v61Ev
  virtual void  v62(); // _ZN7S4289C63v62Ev
  virtual void  v63(); // _ZN7S4289C63v63Ev
  S4289C6(); // tgen
};
//SIG(-1 S4289C6) C1{ vd v1 v2 v3 v4 v5}


 S4289C6 ::~S4289C6(){ note_dtor("S4289C6", this);}
void  S4289C6 ::v59(){vfunc_called(this, "_ZN7S4289C63v59Ev");}
void  S4289C6 ::v60(){vfunc_called(this, "_ZN7S4289C63v60Ev");}
void  S4289C6 ::v61(){vfunc_called(this, "_ZN7S4289C63v61Ev");}
void  S4289C6 ::v62(){vfunc_called(this, "_ZN7S4289C63v62Ev");}
void  S4289C6 ::v63(){vfunc_called(this, "_ZN7S4289C63v63Ev");}
S4289C6 ::S4289C6(){ note_ctor("S4289C6", this);} // tgen

static void Test_S4289C6()
{
  extern Class_Descriptor cd_S4289C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S4289C6, buf);
    S4289C6 *dp, &lv = *(dp=new (buf) S4289C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S4289C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4289C6)");
    test_class_info(&lv, &cd_S4289C6);
    dp->~S4289C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4289C6(Test_S4289C6, "S4289C6", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S4289C6C1Ev();
extern void _ZN7S4289C6D1Ev();
Name_Map name_map_S4289C6[] = {
  NSPAIR(_ZN7S4289C6C1Ev),
  NSPAIR(_ZN7S4289C6D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4289C6[];
extern void _ZN7S4289C6D1Ev();
extern void _ZN7S4289C6D0Ev();
extern void _ZN7S4289C63v59Ev();
extern void _ZN7S4289C63v60Ev();
extern void _ZN7S4289C63v61Ev();
extern void _ZN7S4289C63v62Ev();
extern void _ZN7S4289C63v63Ev();
static  VTBL_ENTRY vtc_S4289C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4289C6[0]),
  (VTBL_ENTRY)&_ZN7S4289C6D1Ev,
  (VTBL_ENTRY)&_ZN7S4289C6D0Ev,
  (VTBL_ENTRY)&_ZN7S4289C63v59Ev,
  (VTBL_ENTRY)&_ZN7S4289C63v60Ev,
  (VTBL_ENTRY)&_ZN7S4289C63v61Ev,
  (VTBL_ENTRY)&_ZN7S4289C63v62Ev,
  (VTBL_ENTRY)&_ZN7S4289C63v63Ev,
};
extern VTBL_ENTRY _ZTI7S4289C6[];
extern  VTBL_ENTRY _ZTV7S4289C6[];
Class_Descriptor cd_S4289C6 = {  "S4289C6", // class name
  0,0,//no base classes
  &(vtc_S4289C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S4289C6),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4289C6),9, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4289C1  : S4289C2 , S4289C5 , S4289C6 {
  long s4289c1f0[3];
  int s4289c1f1[2];
  char s4289c1f2;
  int s4289c1f3[2];
  ::S4666C13_nt s4289c1f4;
  void *s4289c1f5[2];
  int s4289c1f6;
  void *s4289c1f7;
  int s4289c1f8;
  char s4289c1f9[2];
  int s4289c1f10[3];
  void *s4289c1f11[3];
  virtual  ~S4289C1(); // _ZN7S4289C1D1Ev
  virtual void  v1(); // _ZN7S4289C12v1Ev
  virtual void  v2(); // _ZN7S4289C12v2Ev
  virtual void  v3(); // _ZN7S4289C12v3Ev
  virtual void  v4(); // _ZN7S4289C12v4Ev
  virtual void  v5(); // _ZN7S4289C12v5Ev
  virtual void  v6(); // _ZN7S4289C12v6Ev
  virtual void  v7(); // _ZN7S4289C12v7Ev
  virtual void  v8(); // _ZN7S4289C12v8Ev
  virtual void  v9(); // _ZN7S4289C12v9Ev
  virtual void  v10(); // _ZN7S4289C13v10Ev
  virtual void  v11(); // _ZN7S4289C13v11Ev
  virtual void  v12(); // _ZN7S4289C13v12Ev
  virtual void  v13(); // _ZN7S4289C13v13Ev
  virtual void  v14(); // _ZN7S4289C13v14Ev
  virtual void  v15(); // _ZN7S4289C13v15Ev
  virtual void  v16(); // _ZN7S4289C13v16Ev
  S4289C1(); // tgen
};
//SIG(1 S4289C1) C1{ BC2{ BC3{ vd v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42} vd v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 Fp[2] Fi[4] FC4{ Fi[2]} Fp Fc Fp} BC5{ vd v57 v58 Fp Fc[32] Fi[6] Fc Fi[2]} BC6{ vd v59 v60 v61 v62 v63} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 Fl[3] Fi[2] Fc Fi[2] FC7{ FL} Fp[2] Fi Fp Fi Fc[2] Fi[3] Fp[3]}


 S4289C1 ::~S4289C1(){ note_dtor("S4289C1", this);}
void  S4289C1 ::v1(){vfunc_called(this, "_ZN7S4289C12v1Ev");}
void  S4289C1 ::v2(){vfunc_called(this, "_ZN7S4289C12v2Ev");}
void  S4289C1 ::v3(){vfunc_called(this, "_ZN7S4289C12v3Ev");}
void  S4289C1 ::v4(){vfunc_called(this, "_ZN7S4289C12v4Ev");}
void  S4289C1 ::v5(){vfunc_called(this, "_ZN7S4289C12v5Ev");}
void  S4289C1 ::v6(){vfunc_called(this, "_ZN7S4289C12v6Ev");}
void  S4289C1 ::v7(){vfunc_called(this, "_ZN7S4289C12v7Ev");}
void  S4289C1 ::v8(){vfunc_called(this, "_ZN7S4289C12v8Ev");}
void  S4289C1 ::v9(){vfunc_called(this, "_ZN7S4289C12v9Ev");}
void  S4289C1 ::v10(){vfunc_called(this, "_ZN7S4289C13v10Ev");}
void  S4289C1 ::v11(){vfunc_called(this, "_ZN7S4289C13v11Ev");}
void  S4289C1 ::v12(){vfunc_called(this, "_ZN7S4289C13v12Ev");}
void  S4289C1 ::v13(){vfunc_called(this, "_ZN7S4289C13v13Ev");}
void  S4289C1 ::v14(){vfunc_called(this, "_ZN7S4289C13v14Ev");}
void  S4289C1 ::v15(){vfunc_called(this, "_ZN7S4289C13v15Ev");}
void  S4289C1 ::v16(){vfunc_called(this, "_ZN7S4289C13v16Ev");}
S4289C1 ::S4289C1(){ note_ctor("S4289C1", this);} // tgen

static void Test_S4289C1()
{
  extern Class_Descriptor cd_S4289C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(39,55)];
    init_test(&cd_S4289C1, buf);
    S4289C1 *dp, &lv = *(dp=new (buf) S4289C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(304,216), "sizeof(S4289C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4289C1)");
    check_base_class_offset(lv, (S4289C3*)(S4289C2*), 0, "S4289C1");
    check_base_class_offset(lv, (S4289C2*), 0, "S4289C1");
    check_base_class_offset(lv, (S4289C5*), ABISELECT(72,48), "S4289C1");
    check_base_class_offset(lv, (S4289C6*), ABISELECT(160,124), "S4289C1");
    check_field_offset(lv, s4289c1f0, ABISELECT(168,128), "S4289C1.s4289c1f0");
    check_field_offset(lv, s4289c1f1, ABISELECT(192,140), "S4289C1.s4289c1f1");
    check_field_offset(lv, s4289c1f2, ABISELECT(200,148), "S4289C1.s4289c1f2");
    check_field_offset(lv, s4289c1f3, ABISELECT(204,152), "S4289C1.s4289c1f3");
    check_field_offset(lv, s4289c1f4, ABISELECT(216,160), "S4289C1.s4289c1f4");
    check_field_offset(lv, s4289c1f5, ABISELECT(224,168), "S4289C1.s4289c1f5");
    check_field_offset(lv, s4289c1f6, ABISELECT(240,176), "S4289C1.s4289c1f6");
    check_field_offset(lv, s4289c1f7, ABISELECT(248,180), "S4289C1.s4289c1f7");
    check_field_offset(lv, s4289c1f8, ABISELECT(256,184), "S4289C1.s4289c1f8");
    check_field_offset(lv, s4289c1f9, ABISELECT(260,188), "S4289C1.s4289c1f9");
    check_field_offset(lv, s4289c1f10, ABISELECT(264,192), "S4289C1.s4289c1f10");
    check_field_offset(lv, s4289c1f11, ABISELECT(280,204), "S4289C1.s4289c1f11");
    test_class_info(&lv, &cd_S4289C1);
    dp->~S4289C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4289C1(Test_S4289C1, "S4289C1", ABISELECT(304,216));

#else // __cplusplus

extern void _ZN7S4289C1C1Ev();
extern void _ZN7S4289C1D1Ev();
Name_Map name_map_S4289C1[] = {
  NSPAIR(_ZN7S4289C1C1Ev),
  NSPAIR(_ZN7S4289C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4289C3;
extern VTBL_ENTRY _ZTI7S4289C3[];
extern  VTBL_ENTRY _ZTV7S4289C3[];
extern Class_Descriptor cd_S4289C2;
extern VTBL_ENTRY _ZTI7S4289C2[];
extern  VTBL_ENTRY _ZTV7S4289C2[];
extern Class_Descriptor cd_S4289C5;
extern VTBL_ENTRY _ZTI7S4289C5[];
extern  VTBL_ENTRY _ZTV7S4289C5[];
extern Class_Descriptor cd_S4289C6;
extern VTBL_ENTRY _ZTI7S4289C6[];
extern  VTBL_ENTRY _ZTV7S4289C6[];
static Base_Class bases_S4289C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4289C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S4289C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S4289C5,    ABISELECT(72,48), //bcp->offset
    60, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S4289C6,    ABISELECT(160,124), //bcp->offset
    66, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4289C1[];
extern void _ZN7S4289C1D1Ev();
extern void _ZN7S4289C1D0Ev();
extern void _ZN7S4289C33v17Ev();
extern void _ZN7S4289C33v18Ev();
extern void _ZN7S4289C33v19Ev();
extern void _ZN7S4289C33v20Ev();
extern void _ZN7S4289C33v21Ev();
extern void _ZN7S4289C33v22Ev();
extern void _ZN7S4289C33v23Ev();
extern void _ZN7S4289C33v24Ev();
extern void _ZN7S4289C33v25Ev();
extern void _ZN7S4289C33v26Ev();
extern void _ZN7S4289C33v27Ev();
extern void _ZN7S4289C33v28Ev();
extern void _ZN7S4289C33v29Ev();
extern void _ZN7S4289C33v30Ev();
extern void _ZN7S4289C33v31Ev();
extern void _ZN7S4289C33v32Ev();
extern void _ZN7S4289C33v33Ev();
extern void _ZN7S4289C33v34Ev();
extern void _ZN7S4289C33v35Ev();
extern void _ZN7S4289C33v36Ev();
extern void _ZN7S4289C33v37Ev();
extern void _ZN7S4289C33v38Ev();
extern void _ZN7S4289C33v39Ev();
extern void _ZN7S4289C33v40Ev();
extern void _ZN7S4289C33v41Ev();
extern void _ZN7S4289C33v42Ev();
extern void _ZN7S4289C23v43Ev();
extern void _ZN7S4289C23v44Ev();
extern void _ZN7S4289C23v45Ev();
extern void _ZN7S4289C23v46Ev();
extern void _ZN7S4289C23v47Ev();
extern void _ZN7S4289C23v48Ev();
extern void _ZN7S4289C23v49Ev();
extern void _ZN7S4289C23v50Ev();
extern void _ZN7S4289C23v51Ev();
extern void _ZN7S4289C23v52Ev();
extern void _ZN7S4289C23v53Ev();
extern void _ZN7S4289C23v54Ev();
extern void _ZN7S4289C23v55Ev();
extern void _ZN7S4289C23v56Ev();
extern void _ZN7S4289C12v1Ev();
extern void _ZN7S4289C12v2Ev();
extern void _ZN7S4289C12v3Ev();
extern void _ZN7S4289C12v4Ev();
extern void _ZN7S4289C12v5Ev();
extern void _ZN7S4289C12v6Ev();
extern void _ZN7S4289C12v7Ev();
extern void _ZN7S4289C12v8Ev();
extern void _ZN7S4289C12v9Ev();
extern void _ZN7S4289C13v10Ev();
extern void _ZN7S4289C13v11Ev();
extern void _ZN7S4289C13v12Ev();
extern void _ZN7S4289C13v13Ev();
extern void _ZN7S4289C13v14Ev();
extern void _ZN7S4289C13v15Ev();
extern void _ZN7S4289C13v16Ev();
extern void ABISELECT(_ZThn72_N7S4289C1D1Ev,_ZThn48_N7S4289C1D1Ev)();
extern void ABISELECT(_ZThn72_N7S4289C1D0Ev,_ZThn48_N7S4289C1D0Ev)();
extern void _ZN7S4289C53v57Ev();
extern void _ZN7S4289C53v58Ev();
extern void ABISELECT(_ZThn160_N7S4289C1D1Ev,_ZThn124_N7S4289C1D1Ev)();
extern void ABISELECT(_ZThn160_N7S4289C1D0Ev,_ZThn124_N7S4289C1D0Ev)();
extern void _ZN7S4289C63v59Ev();
extern void _ZN7S4289C63v60Ev();
extern void _ZN7S4289C63v61Ev();
extern void _ZN7S4289C63v62Ev();
extern void _ZN7S4289C63v63Ev();
static  VTBL_ENTRY vtc_S4289C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4289C1[0]),
  (VTBL_ENTRY)&_ZN7S4289C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4289C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4289C33v17Ev,
  (VTBL_ENTRY)&_ZN7S4289C33v18Ev,
  (VTBL_ENTRY)&_ZN7S4289C33v19Ev,
  (VTBL_ENTRY)&_ZN7S4289C33v20Ev,
  (VTBL_ENTRY)&_ZN7S4289C33v21Ev,
  (VTBL_ENTRY)&_ZN7S4289C33v22Ev,
  (VTBL_ENTRY)&_ZN7S4289C33v23Ev,
  (VTBL_ENTRY)&_ZN7S4289C33v24Ev,
  (VTBL_ENTRY)&_ZN7S4289C33v25Ev,
  (VTBL_ENTRY)&_ZN7S4289C33v26Ev,
  (VTBL_ENTRY)&_ZN7S4289C33v27Ev,
  (VTBL_ENTRY)&_ZN7S4289C33v28Ev,
  (VTBL_ENTRY)&_ZN7S4289C33v29Ev,
  (VTBL_ENTRY)&_ZN7S4289C33v30Ev,
  (VTBL_ENTRY)&_ZN7S4289C33v31Ev,
  (VTBL_ENTRY)&_ZN7S4289C33v32Ev,
  (VTBL_ENTRY)&_ZN7S4289C33v33Ev,
  (VTBL_ENTRY)&_ZN7S4289C33v34Ev,
  (VTBL_ENTRY)&_ZN7S4289C33v35Ev,
  (VTBL_ENTRY)&_ZN7S4289C33v36Ev,
  (VTBL_ENTRY)&_ZN7S4289C33v37Ev,
  (VTBL_ENTRY)&_ZN7S4289C33v38Ev,
  (VTBL_ENTRY)&_ZN7S4289C33v39Ev,
  (VTBL_ENTRY)&_ZN7S4289C33v40Ev,
  (VTBL_ENTRY)&_ZN7S4289C33v41Ev,
  (VTBL_ENTRY)&_ZN7S4289C33v42Ev,
  (VTBL_ENTRY)&_ZN7S4289C23v43Ev,
  (VTBL_ENTRY)&_ZN7S4289C23v44Ev,
  (VTBL_ENTRY)&_ZN7S4289C23v45Ev,
  (VTBL_ENTRY)&_ZN7S4289C23v46Ev,
  (VTBL_ENTRY)&_ZN7S4289C23v47Ev,
  (VTBL_ENTRY)&_ZN7S4289C23v48Ev,
  (VTBL_ENTRY)&_ZN7S4289C23v49Ev,
  (VTBL_ENTRY)&_ZN7S4289C23v50Ev,
  (VTBL_ENTRY)&_ZN7S4289C23v51Ev,
  (VTBL_ENTRY)&_ZN7S4289C23v52Ev,
  (VTBL_ENTRY)&_ZN7S4289C23v53Ev,
  (VTBL_ENTRY)&_ZN7S4289C23v54Ev,
  (VTBL_ENTRY)&_ZN7S4289C23v55Ev,
  (VTBL_ENTRY)&_ZN7S4289C23v56Ev,
  (VTBL_ENTRY)&_ZN7S4289C12v1Ev,
  (VTBL_ENTRY)&_ZN7S4289C12v2Ev,
  (VTBL_ENTRY)&_ZN7S4289C12v3Ev,
  (VTBL_ENTRY)&_ZN7S4289C12v4Ev,
  (VTBL_ENTRY)&_ZN7S4289C12v5Ev,
  (VTBL_ENTRY)&_ZN7S4289C12v6Ev,
  (VTBL_ENTRY)&_ZN7S4289C12v7Ev,
  (VTBL_ENTRY)&_ZN7S4289C12v8Ev,
  (VTBL_ENTRY)&_ZN7S4289C12v9Ev,
  (VTBL_ENTRY)&_ZN7S4289C13v10Ev,
  (VTBL_ENTRY)&_ZN7S4289C13v11Ev,
  (VTBL_ENTRY)&_ZN7S4289C13v12Ev,
  (VTBL_ENTRY)&_ZN7S4289C13v13Ev,
  (VTBL_ENTRY)&_ZN7S4289C13v14Ev,
  (VTBL_ENTRY)&_ZN7S4289C13v15Ev,
  (VTBL_ENTRY)&_ZN7S4289C13v16Ev,
  ABISELECT(-72,-48),
  (VTBL_ENTRY)&(_ZTI7S4289C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn72_N7S4289C1D1Ev,_ZThn48_N7S4289C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn72_N7S4289C1D0Ev,_ZThn48_N7S4289C1D0Ev),
  (VTBL_ENTRY)&_ZN7S4289C53v57Ev,
  (VTBL_ENTRY)&_ZN7S4289C53v58Ev,
  ABISELECT(-160,-124),
  (VTBL_ENTRY)&(_ZTI7S4289C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn160_N7S4289C1D1Ev,_ZThn124_N7S4289C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn160_N7S4289C1D0Ev,_ZThn124_N7S4289C1D0Ev),
  (VTBL_ENTRY)&_ZN7S4289C63v59Ev,
  (VTBL_ENTRY)&_ZN7S4289C63v60Ev,
  (VTBL_ENTRY)&_ZN7S4289C63v61Ev,
  (VTBL_ENTRY)&_ZN7S4289C63v62Ev,
  (VTBL_ENTRY)&_ZN7S4289C63v63Ev,
};
extern VTBL_ENTRY _ZTI7S4289C1[];
extern  VTBL_ENTRY _ZTV7S4289C1[];
Class_Descriptor cd_S4289C1 = {  "S4289C1", // class name
  bases_S4289C1, 4,
  &(vtc_S4289C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(304,216), // object size
  NSPAIRA(_ZTI7S4289C1),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S4289C1),75, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  4, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2224C4  {
  virtual  ~S2224C4(); // _ZN7S2224C4D1Ev
  virtual void  v35(); // _ZN7S2224C43v35Ev
  virtual void  v36(); // _ZN7S2224C43v36Ev
  virtual void  v37(); // _ZN7S2224C43v37Ev
  virtual void  v38(); // _ZN7S2224C43v38Ev
  S2224C4(); // tgen
};
//SIG(-1 S2224C4) C1{ vd v1 v2 v3 v4}


 S2224C4 ::~S2224C4(){ note_dtor("S2224C4", this);}
void  S2224C4 ::v35(){vfunc_called(this, "_ZN7S2224C43v35Ev");}
void  S2224C4 ::v36(){vfunc_called(this, "_ZN7S2224C43v36Ev");}
void  S2224C4 ::v37(){vfunc_called(this, "_ZN7S2224C43v37Ev");}
void  S2224C4 ::v38(){vfunc_called(this, "_ZN7S2224C43v38Ev");}
S2224C4 ::S2224C4(){ note_ctor("S2224C4", this);} // tgen

static void Test_S2224C4()
{
  extern Class_Descriptor cd_S2224C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S2224C4, buf);
    S2224C4 *dp, &lv = *(dp=new (buf) S2224C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S2224C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2224C4)");
    test_class_info(&lv, &cd_S2224C4);
    dp->~S2224C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2224C4(Test_S2224C4, "S2224C4", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S2224C4C1Ev();
extern void _ZN7S2224C4D1Ev();
Name_Map name_map_S2224C4[] = {
  NSPAIR(_ZN7S2224C4C1Ev),
  NSPAIR(_ZN7S2224C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S2224C4[];
extern void _ZN7S2224C4D1Ev();
extern void _ZN7S2224C4D0Ev();
extern void _ZN7S2224C43v35Ev();
extern void _ZN7S2224C43v36Ev();
extern void _ZN7S2224C43v37Ev();
extern void _ZN7S2224C43v38Ev();
static  VTBL_ENTRY vtc_S2224C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2224C4[0]),
  (VTBL_ENTRY)&_ZN7S2224C4D1Ev,
  (VTBL_ENTRY)&_ZN7S2224C4D0Ev,
  (VTBL_ENTRY)&_ZN7S2224C43v35Ev,
  (VTBL_ENTRY)&_ZN7S2224C43v36Ev,
  (VTBL_ENTRY)&_ZN7S2224C43v37Ev,
  (VTBL_ENTRY)&_ZN7S2224C43v38Ev,
};
extern VTBL_ENTRY _ZTI7S2224C4[];
extern  VTBL_ENTRY _ZTV7S2224C4[];
Class_Descriptor cd_S2224C4 = {  "S2224C4", // class name
  0,0,//no base classes
  &(vtc_S2224C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S2224C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S2224C4),8, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2224C3  : S2224C4 {
  virtual  ~S2224C3(); // _ZN7S2224C3D1Ev
  virtual void  v39(); // _ZN7S2224C33v39Ev
  virtual void  v40(); // _ZN7S2224C33v40Ev
  virtual void  v41(); // _ZN7S2224C33v41Ev
  virtual void  v42(); // _ZN7S2224C33v42Ev
  virtual void  v43(); // _ZN7S2224C33v43Ev
  S2224C3(); // tgen
};
//SIG(-1 S2224C3) C1{ BC2{ vd v6 v7 v8 v9} vd v1 v2 v3 v4 v5}


 S2224C3 ::~S2224C3(){ note_dtor("S2224C3", this);}
void  S2224C3 ::v39(){vfunc_called(this, "_ZN7S2224C33v39Ev");}
void  S2224C3 ::v40(){vfunc_called(this, "_ZN7S2224C33v40Ev");}
void  S2224C3 ::v41(){vfunc_called(this, "_ZN7S2224C33v41Ev");}
void  S2224C3 ::v42(){vfunc_called(this, "_ZN7S2224C33v42Ev");}
void  S2224C3 ::v43(){vfunc_called(this, "_ZN7S2224C33v43Ev");}
S2224C3 ::S2224C3(){ note_ctor("S2224C3", this);} // tgen

static void Test_S2224C3()
{
  extern Class_Descriptor cd_S2224C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S2224C3, buf);
    S2224C3 *dp, &lv = *(dp=new (buf) S2224C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S2224C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2224C3)");
    check_base_class_offset(lv, (S2224C4*), 0, "S2224C3");
    test_class_info(&lv, &cd_S2224C3);
    dp->~S2224C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2224C3(Test_S2224C3, "S2224C3", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S2224C3C1Ev();
extern void _ZN7S2224C3D1Ev();
Name_Map name_map_S2224C3[] = {
  NSPAIR(_ZN7S2224C3C1Ev),
  NSPAIR(_ZN7S2224C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2224C4;
extern VTBL_ENTRY _ZTI7S2224C4[];
extern  VTBL_ENTRY _ZTV7S2224C4[];
static Base_Class bases_S2224C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2224C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S2224C3[];
extern void _ZN7S2224C3D1Ev();
extern void _ZN7S2224C3D0Ev();
extern void _ZN7S2224C43v35Ev();
extern void _ZN7S2224C43v36Ev();
extern void _ZN7S2224C43v37Ev();
extern void _ZN7S2224C43v38Ev();
extern void _ZN7S2224C33v39Ev();
extern void _ZN7S2224C33v40Ev();
extern void _ZN7S2224C33v41Ev();
extern void _ZN7S2224C33v42Ev();
extern void _ZN7S2224C33v43Ev();
static  VTBL_ENTRY vtc_S2224C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2224C3[0]),
  (VTBL_ENTRY)&_ZN7S2224C3D1Ev,
  (VTBL_ENTRY)&_ZN7S2224C3D0Ev,
  (VTBL_ENTRY)&_ZN7S2224C43v35Ev,
  (VTBL_ENTRY)&_ZN7S2224C43v36Ev,
  (VTBL_ENTRY)&_ZN7S2224C43v37Ev,
  (VTBL_ENTRY)&_ZN7S2224C43v38Ev,
  (VTBL_ENTRY)&_ZN7S2224C33v39Ev,
  (VTBL_ENTRY)&_ZN7S2224C33v40Ev,
  (VTBL_ENTRY)&_ZN7S2224C33v41Ev,
  (VTBL_ENTRY)&_ZN7S2224C33v42Ev,
  (VTBL_ENTRY)&_ZN7S2224C33v43Ev,
};
extern VTBL_ENTRY _ZTI7S2224C3[];
extern  VTBL_ENTRY _ZTV7S2224C3[];
Class_Descriptor cd_S2224C3 = {  "S2224C3", // class name
  bases_S2224C3, 1,
  &(vtc_S2224C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S2224C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2224C3),13, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2224C6  {
  char s2224c6f0[1024];
  int s2224c6f1[2];
  virtual  ~S2224C6(); // _ZN7S2224C6D1Ev
  virtual void  v44(); // _ZN7S2224C63v44Ev
  virtual void  v45(); // _ZN7S2224C63v45Ev
  virtual void  v46(); // _ZN7S2224C63v46Ev
  virtual void  v47(); // _ZN7S2224C63v47Ev
  virtual void  v48(); // _ZN7S2224C63v48Ev
  virtual void  v49(); // _ZN7S2224C63v49Ev
  virtual void  v50(); // _ZN7S2224C63v50Ev
  virtual void  v51(); // _ZN7S2224C63v51Ev
  virtual void  v52(); // _ZN7S2224C63v52Ev
  virtual void  v53(); // _ZN7S2224C63v53Ev
  virtual void  v54(); // _ZN7S2224C63v54Ev
  virtual void  v55(); // _ZN7S2224C63v55Ev
  virtual void  v56(); // _ZN7S2224C63v56Ev
  S2224C6(); // tgen
};
//SIG(-1 S2224C6) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 Fc[1024] Fi[2]}


 S2224C6 ::~S2224C6(){ note_dtor("S2224C6", this);}
void  S2224C6 ::v44(){vfunc_called(this, "_ZN7S2224C63v44Ev");}
void  S2224C6 ::v45(){vfunc_called(this, "_ZN7S2224C63v45Ev");}
void  S2224C6 ::v46(){vfunc_called(this, "_ZN7S2224C63v46Ev");}
void  S2224C6 ::v47(){vfunc_called(this, "_ZN7S2224C63v47Ev");}
void  S2224C6 ::v48(){vfunc_called(this, "_ZN7S2224C63v48Ev");}
void  S2224C6 ::v49(){vfunc_called(this, "_ZN7S2224C63v49Ev");}
void  S2224C6 ::v50(){vfunc_called(this, "_ZN7S2224C63v50Ev");}
void  S2224C6 ::v51(){vfunc_called(this, "_ZN7S2224C63v51Ev");}
void  S2224C6 ::v52(){vfunc_called(this, "_ZN7S2224C63v52Ev");}
void  S2224C6 ::v53(){vfunc_called(this, "_ZN7S2224C63v53Ev");}
void  S2224C6 ::v54(){vfunc_called(this, "_ZN7S2224C63v54Ev");}
void  S2224C6 ::v55(){vfunc_called(this, "_ZN7S2224C63v55Ev");}
void  S2224C6 ::v56(){vfunc_called(this, "_ZN7S2224C63v56Ev");}
S2224C6 ::S2224C6(){ note_ctor("S2224C6", this);} // tgen

static void Test_S2224C6()
{
  extern Class_Descriptor cd_S2224C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(131,260)];
    init_test(&cd_S2224C6, buf);
    S2224C6 *dp, &lv = *(dp=new (buf) S2224C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1040,1036), "sizeof(S2224C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2224C6)");
    check_field_offset(lv, s2224c6f0, ABISELECT(8,4), "S2224C6.s2224c6f0");
    check_field_offset(lv, s2224c6f1, ABISELECT(1032,1028), "S2224C6.s2224c6f1");
    test_class_info(&lv, &cd_S2224C6);
    dp->~S2224C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2224C6(Test_S2224C6, "S2224C6", ABISELECT(1040,1036));

#else // __cplusplus

extern void _ZN7S2224C6C1Ev();
extern void _ZN7S2224C6D1Ev();
Name_Map name_map_S2224C6[] = {
  NSPAIR(_ZN7S2224C6C1Ev),
  NSPAIR(_ZN7S2224C6D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S2224C6[];
extern void _ZN7S2224C6D1Ev();
extern void _ZN7S2224C6D0Ev();
extern void _ZN7S2224C63v44Ev();
extern void _ZN7S2224C63v45Ev();
extern void _ZN7S2224C63v46Ev();
extern void _ZN7S2224C63v47Ev();
extern void _ZN7S2224C63v48Ev();
extern void _ZN7S2224C63v49Ev();
extern void _ZN7S2224C63v50Ev();
extern void _ZN7S2224C63v51Ev();
extern void _ZN7S2224C63v52Ev();
extern void _ZN7S2224C63v53Ev();
extern void _ZN7S2224C63v54Ev();
extern void _ZN7S2224C63v55Ev();
extern void _ZN7S2224C63v56Ev();
static  VTBL_ENTRY vtc_S2224C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2224C6[0]),
  (VTBL_ENTRY)&_ZN7S2224C6D1Ev,
  (VTBL_ENTRY)&_ZN7S2224C6D0Ev,
  (VTBL_ENTRY)&_ZN7S2224C63v44Ev,
  (VTBL_ENTRY)&_ZN7S2224C63v45Ev,
  (VTBL_ENTRY)&_ZN7S2224C63v46Ev,
  (VTBL_ENTRY)&_ZN7S2224C63v47Ev,
  (VTBL_ENTRY)&_ZN7S2224C63v48Ev,
  (VTBL_ENTRY)&_ZN7S2224C63v49Ev,
  (VTBL_ENTRY)&_ZN7S2224C63v50Ev,
  (VTBL_ENTRY)&_ZN7S2224C63v51Ev,
  (VTBL_ENTRY)&_ZN7S2224C63v52Ev,
  (VTBL_ENTRY)&_ZN7S2224C63v53Ev,
  (VTBL_ENTRY)&_ZN7S2224C63v54Ev,
  (VTBL_ENTRY)&_ZN7S2224C63v55Ev,
  (VTBL_ENTRY)&_ZN7S2224C63v56Ev,
};
extern VTBL_ENTRY _ZTI7S2224C6[];
extern  VTBL_ENTRY _ZTV7S2224C6[];
Class_Descriptor cd_S2224C6 = {  "S2224C6", // class name
  0,0,//no base classes
  &(vtc_S2224C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(1040,1036), // object size
  NSPAIRA(_ZTI7S2224C6),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S2224C6),17, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2224C5  : S2224C6 {
  virtual  ~S2224C5(); // _ZN7S2224C5D1Ev
  virtual void  v57(); // _ZN7S2224C53v57Ev
  virtual void  v58(); // _ZN7S2224C53v58Ev
  virtual void  v59(); // _ZN7S2224C53v59Ev
  virtual void  v60(); // _ZN7S2224C53v60Ev
  S2224C5(); // tgen
};
//SIG(-1 S2224C5) C1{ BC2{ vd v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 Fc[1024] Fi[2]} vd v1 v2 v3 v4}


 S2224C5 ::~S2224C5(){ note_dtor("S2224C5", this);}
void  S2224C5 ::v57(){vfunc_called(this, "_ZN7S2224C53v57Ev");}
void  S2224C5 ::v58(){vfunc_called(this, "_ZN7S2224C53v58Ev");}
void  S2224C5 ::v59(){vfunc_called(this, "_ZN7S2224C53v59Ev");}
void  S2224C5 ::v60(){vfunc_called(this, "_ZN7S2224C53v60Ev");}
S2224C5 ::S2224C5(){ note_ctor("S2224C5", this);} // tgen

static void Test_S2224C5()
{
  extern Class_Descriptor cd_S2224C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(131,260)];
    init_test(&cd_S2224C5, buf);
    S2224C5 *dp, &lv = *(dp=new (buf) S2224C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1040,1036), "sizeof(S2224C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2224C5)");
    check_base_class_offset(lv, (S2224C6*), 0, "S2224C5");
    test_class_info(&lv, &cd_S2224C5);
    dp->~S2224C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2224C5(Test_S2224C5, "S2224C5", ABISELECT(1040,1036));

#else // __cplusplus

extern void _ZN7S2224C5C1Ev();
extern void _ZN7S2224C5D1Ev();
Name_Map name_map_S2224C5[] = {
  NSPAIR(_ZN7S2224C5C1Ev),
  NSPAIR(_ZN7S2224C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2224C6;
extern VTBL_ENTRY _ZTI7S2224C6[];
extern  VTBL_ENTRY _ZTV7S2224C6[];
static Base_Class bases_S2224C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2224C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S2224C5[];
extern void _ZN7S2224C5D1Ev();
extern void _ZN7S2224C5D0Ev();
extern void _ZN7S2224C63v44Ev();
extern void _ZN7S2224C63v45Ev();
extern void _ZN7S2224C63v46Ev();
extern void _ZN7S2224C63v47Ev();
extern void _ZN7S2224C63v48Ev();
extern void _ZN7S2224C63v49Ev();
extern void _ZN7S2224C63v50Ev();
extern void _ZN7S2224C63v51Ev();
extern void _ZN7S2224C63v52Ev();
extern void _ZN7S2224C63v53Ev();
extern void _ZN7S2224C63v54Ev();
extern void _ZN7S2224C63v55Ev();
extern void _ZN7S2224C63v56Ev();
extern void _ZN7S2224C53v57Ev();
extern void _ZN7S2224C53v58Ev();
extern void _ZN7S2224C53v59Ev();
extern void _ZN7S2224C53v60Ev();
static  VTBL_ENTRY vtc_S2224C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2224C5[0]),
  (VTBL_ENTRY)&_ZN7S2224C5D1Ev,
  (VTBL_ENTRY)&_ZN7S2224C5D0Ev,
  (VTBL_ENTRY)&_ZN7S2224C63v44Ev,
  (VTBL_ENTRY)&_ZN7S2224C63v45Ev,
  (VTBL_ENTRY)&_ZN7S2224C63v46Ev,
  (VTBL_ENTRY)&_ZN7S2224C63v47Ev,
  (VTBL_ENTRY)&_ZN7S2224C63v48Ev,
  (VTBL_ENTRY)&_ZN7S2224C63v49Ev,
  (VTBL_ENTRY)&_ZN7S2224C63v50Ev,
  (VTBL_ENTRY)&_ZN7S2224C63v51Ev,
  (VTBL_ENTRY)&_ZN7S2224C63v52Ev,
  (VTBL_ENTRY)&_ZN7S2224C63v53Ev,
  (VTBL_ENTRY)&_ZN7S2224C63v54Ev,
  (VTBL_ENTRY)&_ZN7S2224C63v55Ev,
  (VTBL_ENTRY)&_ZN7S2224C63v56Ev,
  (VTBL_ENTRY)&_ZN7S2224C53v57Ev,
  (VTBL_ENTRY)&_ZN7S2224C53v58Ev,
  (VTBL_ENTRY)&_ZN7S2224C53v59Ev,
  (VTBL_ENTRY)&_ZN7S2224C53v60Ev,
};
extern VTBL_ENTRY _ZTI7S2224C5[];
extern  VTBL_ENTRY _ZTV7S2224C5[];
Class_Descriptor cd_S2224C5 = {  "S2224C5", // class name
  bases_S2224C5, 1,
  &(vtc_S2224C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(1040,1036), // object size
  NSPAIRA(_ZTI7S2224C5),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2224C5),21, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2224C2  : S2224C3 , S2224C5 {
  virtual  ~S2224C2(); // _ZN7S2224C2D1Ev
  virtual void  v61(); // _ZN7S2224C23v61Ev
  virtual void  v62(); // _ZN7S2224C23v62Ev
  virtual void  v63(); // _ZN7S2224C23v63Ev
  virtual void  v64(); // _ZN7S2224C23v64Ev
  virtual void  v65(); // _ZN7S2224C23v65Ev
  virtual void  v66(); // _ZN7S2224C23v66Ev
  virtual void  v67(); // _ZN7S2224C23v67Ev
  virtual void  v68(); // _ZN7S2224C23v68Ev
  virtual void  v69(); // _ZN7S2224C23v69Ev
  virtual void  v70(); // _ZN7S2224C23v70Ev
  S2224C2(); // tgen
};
//SIG(-1 S2224C2) C1{ BC2{ BC3{ vd v11 v12 v13 v14} vd v15 v16 v17 v18 v19} BC4{ BC5{ vd v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 Fc[1024] Fi[2]} vd v33 v34 v35 v36} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10}


 S2224C2 ::~S2224C2(){ note_dtor("S2224C2", this);}
void  S2224C2 ::v61(){vfunc_called(this, "_ZN7S2224C23v61Ev");}
void  S2224C2 ::v62(){vfunc_called(this, "_ZN7S2224C23v62Ev");}
void  S2224C2 ::v63(){vfunc_called(this, "_ZN7S2224C23v63Ev");}
void  S2224C2 ::v64(){vfunc_called(this, "_ZN7S2224C23v64Ev");}
void  S2224C2 ::v65(){vfunc_called(this, "_ZN7S2224C23v65Ev");}
void  S2224C2 ::v66(){vfunc_called(this, "_ZN7S2224C23v66Ev");}
void  S2224C2 ::v67(){vfunc_called(this, "_ZN7S2224C23v67Ev");}
void  S2224C2 ::v68(){vfunc_called(this, "_ZN7S2224C23v68Ev");}
void  S2224C2 ::v69(){vfunc_called(this, "_ZN7S2224C23v69Ev");}
void  S2224C2 ::v70(){vfunc_called(this, "_ZN7S2224C23v70Ev");}
S2224C2 ::S2224C2(){ note_ctor("S2224C2", this);} // tgen

static void Test_S2224C2()
{
  extern Class_Descriptor cd_S2224C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(132,261)];
    init_test(&cd_S2224C2, buf);
    S2224C2 *dp, &lv = *(dp=new (buf) S2224C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1048,1040), "sizeof(S2224C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2224C2)");
    check_base_class_offset(lv, (S2224C4*)(S2224C3*), 0, "S2224C2");
    check_base_class_offset(lv, (S2224C3*), 0, "S2224C2");
    check_base_class_offset(lv, (S2224C6*)(S2224C5*), ABISELECT(8,4), "S2224C2");
    check_base_class_offset(lv, (S2224C5*), ABISELECT(8,4), "S2224C2");
    test_class_info(&lv, &cd_S2224C2);
    dp->~S2224C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2224C2(Test_S2224C2, "S2224C2", ABISELECT(1048,1040));

#else // __cplusplus

extern void _ZN7S2224C2C1Ev();
extern void _ZN7S2224C2D1Ev();
Name_Map name_map_S2224C2[] = {
  NSPAIR(_ZN7S2224C2C1Ev),
  NSPAIR(_ZN7S2224C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2224C4;
extern VTBL_ENTRY _ZTI7S2224C4[];
extern  VTBL_ENTRY _ZTV7S2224C4[];
extern Class_Descriptor cd_S2224C3;
extern VTBL_ENTRY _ZTI7S2224C3[];
extern  VTBL_ENTRY _ZTV7S2224C3[];
extern Class_Descriptor cd_S2224C6;
extern VTBL_ENTRY _ZTI7S2224C6[];
extern  VTBL_ENTRY _ZTV7S2224C6[];
extern Class_Descriptor cd_S2224C5;
extern VTBL_ENTRY _ZTI7S2224C5[];
extern  VTBL_ENTRY _ZTV7S2224C5[];
static Base_Class bases_S2224C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2224C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S2224C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2224C6,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S2224C5,    ABISELECT(8,4), //bcp->offset
    23, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S2224C2[];
extern void _ZN7S2224C2D1Ev();
extern void _ZN7S2224C2D0Ev();
extern void _ZN7S2224C43v35Ev();
extern void _ZN7S2224C43v36Ev();
extern void _ZN7S2224C43v37Ev();
extern void _ZN7S2224C43v38Ev();
extern void _ZN7S2224C33v39Ev();
extern void _ZN7S2224C33v40Ev();
extern void _ZN7S2224C33v41Ev();
extern void _ZN7S2224C33v42Ev();
extern void _ZN7S2224C33v43Ev();
extern void _ZN7S2224C23v61Ev();
extern void _ZN7S2224C23v62Ev();
extern void _ZN7S2224C23v63Ev();
extern void _ZN7S2224C23v64Ev();
extern void _ZN7S2224C23v65Ev();
extern void _ZN7S2224C23v66Ev();
extern void _ZN7S2224C23v67Ev();
extern void _ZN7S2224C23v68Ev();
extern void _ZN7S2224C23v69Ev();
extern void _ZN7S2224C23v70Ev();
extern void ABISELECT(_ZThn8_N7S2224C2D1Ev,_ZThn4_N7S2224C2D1Ev)();
extern void ABISELECT(_ZThn8_N7S2224C2D0Ev,_ZThn4_N7S2224C2D0Ev)();
extern void _ZN7S2224C63v44Ev();
extern void _ZN7S2224C63v45Ev();
extern void _ZN7S2224C63v46Ev();
extern void _ZN7S2224C63v47Ev();
extern void _ZN7S2224C63v48Ev();
extern void _ZN7S2224C63v49Ev();
extern void _ZN7S2224C63v50Ev();
extern void _ZN7S2224C63v51Ev();
extern void _ZN7S2224C63v52Ev();
extern void _ZN7S2224C63v53Ev();
extern void _ZN7S2224C63v54Ev();
extern void _ZN7S2224C63v55Ev();
extern void _ZN7S2224C63v56Ev();
extern void _ZN7S2224C53v57Ev();
extern void _ZN7S2224C53v58Ev();
extern void _ZN7S2224C53v59Ev();
extern void _ZN7S2224C53v60Ev();
static  VTBL_ENTRY vtc_S2224C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2224C2[0]),
  (VTBL_ENTRY)&_ZN7S2224C2D1Ev,
  (VTBL_ENTRY)&_ZN7S2224C2D0Ev,
  (VTBL_ENTRY)&_ZN7S2224C43v35Ev,
  (VTBL_ENTRY)&_ZN7S2224C43v36Ev,
  (VTBL_ENTRY)&_ZN7S2224C43v37Ev,
  (VTBL_ENTRY)&_ZN7S2224C43v38Ev,
  (VTBL_ENTRY)&_ZN7S2224C33v39Ev,
  (VTBL_ENTRY)&_ZN7S2224C33v40Ev,
  (VTBL_ENTRY)&_ZN7S2224C33v41Ev,
  (VTBL_ENTRY)&_ZN7S2224C33v42Ev,
  (VTBL_ENTRY)&_ZN7S2224C33v43Ev,
  (VTBL_ENTRY)&_ZN7S2224C23v61Ev,
  (VTBL_ENTRY)&_ZN7S2224C23v62Ev,
  (VTBL_ENTRY)&_ZN7S2224C23v63Ev,
  (VTBL_ENTRY)&_ZN7S2224C23v64Ev,
  (VTBL_ENTRY)&_ZN7S2224C23v65Ev,
  (VTBL_ENTRY)&_ZN7S2224C23v66Ev,
  (VTBL_ENTRY)&_ZN7S2224C23v67Ev,
  (VTBL_ENTRY)&_ZN7S2224C23v68Ev,
  (VTBL_ENTRY)&_ZN7S2224C23v69Ev,
  (VTBL_ENTRY)&_ZN7S2224C23v70Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S2224C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S2224C2D1Ev,_ZThn4_N7S2224C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S2224C2D0Ev,_ZThn4_N7S2224C2D0Ev),
  (VTBL_ENTRY)&_ZN7S2224C63v44Ev,
  (VTBL_ENTRY)&_ZN7S2224C63v45Ev,
  (VTBL_ENTRY)&_ZN7S2224C63v46Ev,
  (VTBL_ENTRY)&_ZN7S2224C63v47Ev,
  (VTBL_ENTRY)&_ZN7S2224C63v48Ev,
  (VTBL_ENTRY)&_ZN7S2224C63v49Ev,
  (VTBL_ENTRY)&_ZN7S2224C63v50Ev,
  (VTBL_ENTRY)&_ZN7S2224C63v51Ev,
  (VTBL_ENTRY)&_ZN7S2224C63v52Ev,
  (VTBL_ENTRY)&_ZN7S2224C63v53Ev,
  (VTBL_ENTRY)&_ZN7S2224C63v54Ev,
  (VTBL_ENTRY)&_ZN7S2224C63v55Ev,
  (VTBL_ENTRY)&_ZN7S2224C63v56Ev,
  (VTBL_ENTRY)&_ZN7S2224C53v57Ev,
  (VTBL_ENTRY)&_ZN7S2224C53v58Ev,
  (VTBL_ENTRY)&_ZN7S2224C53v59Ev,
  (VTBL_ENTRY)&_ZN7S2224C53v60Ev,
};
extern VTBL_ENTRY _ZTI7S2224C2[];
extern  VTBL_ENTRY _ZTV7S2224C2[];
Class_Descriptor cd_S2224C2 = {  "S2224C2", // class name
  bases_S2224C2, 4,
  &(vtc_S2224C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(1048,1040), // object size
  NSPAIRA(_ZTI7S2224C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S2224C2),44, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  4, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2224C7  {
  void *s2224c7f0;
  int s2224c7f1[3];
  char s2224c7f2;
  int s2224c7f3;
  void *s2224c7f4;
  char s2224c7f5;
  void  mf2224c7(); // _ZN7S2224C78mf2224c7Ev
};
//SIG(-1 S2224C7) C1{ m Fp Fi[3] Fc Fi Fp Fc}


void  S2224C7 ::mf2224c7(){}

static void Test_S2224C7()
{
  {
    init_simple_test("S2224C7");
    S2224C7 lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S2224C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2224C7)");
    check_field_offset(lv, s2224c7f0, 0, "S2224C7.s2224c7f0");
    check_field_offset(lv, s2224c7f1, ABISELECT(8,4), "S2224C7.s2224c7f1");
    check_field_offset(lv, s2224c7f2, ABISELECT(20,16), "S2224C7.s2224c7f2");
    check_field_offset(lv, s2224c7f3, ABISELECT(24,20), "S2224C7.s2224c7f3");
    check_field_offset(lv, s2224c7f4, ABISELECT(32,24), "S2224C7.s2224c7f4");
    check_field_offset(lv, s2224c7f5, ABISELECT(40,28), "S2224C7.s2224c7f5");
  }
}
static Arrange_To_Call_Me vS2224C7(Test_S2224C7, "S2224C7", ABISELECT(48,32));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2224C1  : S2224C2 {
  void *s2224c1f0[3];
  int s2224c1f1;
  char s2224c1f2[2];
  int s2224c1f3;
  __tsi64 s2224c1f4[2];
  void *s2224c1f5;
  ::S2224C7 s2224c1f6;
  virtual  ~S2224C1(); // _ZN7S2224C1D1Ev
  virtual void  v1(); // _ZN7S2224C12v1Ev
  virtual void  v2(); // _ZN7S2224C12v2Ev
  virtual void  v3(); // _ZN7S2224C12v3Ev
  virtual void  v4(); // _ZN7S2224C12v4Ev
  virtual void  v5(); // _ZN7S2224C12v5Ev
  virtual void  v6(); // _ZN7S2224C12v6Ev
  virtual void  v7(); // _ZN7S2224C12v7Ev
  virtual void  v8(); // _ZN7S2224C12v8Ev
  virtual void  v9(); // _ZN7S2224C12v9Ev
  virtual void  v10(); // _ZN7S2224C13v10Ev
  virtual void  v11(); // _ZN7S2224C13v11Ev
  virtual void  v12(); // _ZN7S2224C13v12Ev
  virtual void  v13(); // _ZN7S2224C13v13Ev
  virtual void  v14(); // _ZN7S2224C13v14Ev
  virtual void  v15(); // _ZN7S2224C13v15Ev
  virtual void  v16(); // _ZN7S2224C13v16Ev
  virtual void  v17(); // _ZN7S2224C13v17Ev
  virtual void  v18(); // _ZN7S2224C13v18Ev
  virtual void  v19(); // _ZN7S2224C13v19Ev
  virtual void  v20(); // _ZN7S2224C13v20Ev
  virtual void  v21(); // _ZN7S2224C13v21Ev
  virtual void  v22(); // _ZN7S2224C13v22Ev
  virtual void  v23(); // _ZN7S2224C13v23Ev
  virtual void  v24(); // _ZN7S2224C13v24Ev
  virtual void  v25(); // _ZN7S2224C13v25Ev
  virtual void  v26(); // _ZN7S2224C13v26Ev
  virtual void  v27(); // _ZN7S2224C13v27Ev
  virtual void  v28(); // _ZN7S2224C13v28Ev
  virtual void  v29(); // _ZN7S2224C13v29Ev
  virtual void  v30(); // _ZN7S2224C13v30Ev
  virtual void  v31(); // _ZN7S2224C13v31Ev
  virtual void  v32(); // _ZN7S2224C13v32Ev
  virtual void  v33(); // _ZN7S2224C13v33Ev
  virtual void  v34(); // _ZN7S2224C13v34Ev
  S2224C1(); // tgen
};
//SIG(1 S2224C1) C1{ BC2{ BC3{ BC4{ vd v35 v36 v37 v38} vd v39 v40 v41 v42 v43} BC5{ BC6{ vd v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 Fc[1024] Fi[2]} vd v57 v58 v59 v60} vd v61 v62 v63 v64 v65 v66 v67 v68 v69 v70} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 Fp[3] Fi Fc[2] Fi FL[2] Fp FC7{ m Fp Fi[3] Fc Fi Fp Fc}}


 S2224C1 ::~S2224C1(){ note_dtor("S2224C1", this);}
void  S2224C1 ::v1(){vfunc_called(this, "_ZN7S2224C12v1Ev");}
void  S2224C1 ::v2(){vfunc_called(this, "_ZN7S2224C12v2Ev");}
void  S2224C1 ::v3(){vfunc_called(this, "_ZN7S2224C12v3Ev");}
void  S2224C1 ::v4(){vfunc_called(this, "_ZN7S2224C12v4Ev");}
void  S2224C1 ::v5(){vfunc_called(this, "_ZN7S2224C12v5Ev");}
void  S2224C1 ::v6(){vfunc_called(this, "_ZN7S2224C12v6Ev");}
void  S2224C1 ::v7(){vfunc_called(this, "_ZN7S2224C12v7Ev");}
void  S2224C1 ::v8(){vfunc_called(this, "_ZN7S2224C12v8Ev");}
void  S2224C1 ::v9(){vfunc_called(this, "_ZN7S2224C12v9Ev");}
void  S2224C1 ::v10(){vfunc_called(this, "_ZN7S2224C13v10Ev");}
void  S2224C1 ::v11(){vfunc_called(this, "_ZN7S2224C13v11Ev");}
void  S2224C1 ::v12(){vfunc_called(this, "_ZN7S2224C13v12Ev");}
void  S2224C1 ::v13(){vfunc_called(this, "_ZN7S2224C13v13Ev");}
void  S2224C1 ::v14(){vfunc_called(this, "_ZN7S2224C13v14Ev");}
void  S2224C1 ::v15(){vfunc_called(this, "_ZN7S2224C13v15Ev");}
void  S2224C1 ::v16(){vfunc_called(this, "_ZN7S2224C13v16Ev");}
void  S2224C1 ::v17(){vfunc_called(this, "_ZN7S2224C13v17Ev");}
void  S2224C1 ::v18(){vfunc_called(this, "_ZN7S2224C13v18Ev");}
void  S2224C1 ::v19(){vfunc_called(this, "_ZN7S2224C13v19Ev");}
void  S2224C1 ::v20(){vfunc_called(this, "_ZN7S2224C13v20Ev");}
void  S2224C1 ::v21(){vfunc_called(this, "_ZN7S2224C13v21Ev");}
void  S2224C1 ::v22(){vfunc_called(this, "_ZN7S2224C13v22Ev");}
void  S2224C1 ::v23(){vfunc_called(this, "_ZN7S2224C13v23Ev");}
void  S2224C1 ::v24(){vfunc_called(this, "_ZN7S2224C13v24Ev");}
void  S2224C1 ::v25(){vfunc_called(this, "_ZN7S2224C13v25Ev");}
void  S2224C1 ::v26(){vfunc_called(this, "_ZN7S2224C13v26Ev");}
void  S2224C1 ::v27(){vfunc_called(this, "_ZN7S2224C13v27Ev");}
void  S2224C1 ::v28(){vfunc_called(this, "_ZN7S2224C13v28Ev");}
void  S2224C1 ::v29(){vfunc_called(this, "_ZN7S2224C13v29Ev");}
void  S2224C1 ::v30(){vfunc_called(this, "_ZN7S2224C13v30Ev");}
void  S2224C1 ::v31(){vfunc_called(this, "_ZN7S2224C13v31Ev");}
void  S2224C1 ::v32(){vfunc_called(this, "_ZN7S2224C13v32Ev");}
void  S2224C1 ::v33(){vfunc_called(this, "_ZN7S2224C13v33Ev");}
void  S2224C1 ::v34(){vfunc_called(this, "_ZN7S2224C13v34Ev");}
S2224C1 ::S2224C1(){ note_ctor("S2224C1", this);} // tgen

static void Test_S2224C1()
{
  extern Class_Descriptor cd_S2224C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(146,280)];
    init_test(&cd_S2224C1, buf);
    S2224C1 *dp, &lv = *(dp=new (buf) S2224C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1160,1116), "sizeof(S2224C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2224C1)");
    check_base_class_offset(lv, (S2224C4*)(S2224C3*)(S2224C2*), 0, "S2224C1");
    check_base_class_offset(lv, (S2224C3*)(S2224C2*), 0, "S2224C1");
    check_base_class_offset(lv, (S2224C6*)(S2224C5*)(S2224C2*), ABISELECT(8,4), "S2224C1");
    check_base_class_offset(lv, (S2224C5*)(S2224C2*), ABISELECT(8,4), "S2224C1");
    check_base_class_offset(lv, (S2224C2*), 0, "S2224C1");
    check_field_offset(lv, s2224c1f0, ABISELECT(1048,1040), "S2224C1.s2224c1f0");
    check_field_offset(lv, s2224c1f1, ABISELECT(1072,1052), "S2224C1.s2224c1f1");
    check_field_offset(lv, s2224c1f2, ABISELECT(1076,1056), "S2224C1.s2224c1f2");
    check_field_offset(lv, s2224c1f3, ABISELECT(1080,1060), "S2224C1.s2224c1f3");
    check_field_offset(lv, s2224c1f4, ABISELECT(1088,1064), "S2224C1.s2224c1f4");
    check_field_offset(lv, s2224c1f5, ABISELECT(1104,1080), "S2224C1.s2224c1f5");
    check_field_offset(lv, s2224c1f6, ABISELECT(1112,1084), "S2224C1.s2224c1f6");
    test_class_info(&lv, &cd_S2224C1);
    dp->~S2224C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2224C1(Test_S2224C1, "S2224C1", ABISELECT(1160,1116));

#else // __cplusplus

extern void _ZN7S2224C1C1Ev();
extern void _ZN7S2224C1D1Ev();
Name_Map name_map_S2224C1[] = {
  NSPAIR(_ZN7S2224C1C1Ev),
  NSPAIR(_ZN7S2224C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2224C4;
extern VTBL_ENTRY _ZTI7S2224C4[];
extern  VTBL_ENTRY _ZTV7S2224C4[];
extern Class_Descriptor cd_S2224C3;
extern VTBL_ENTRY _ZTI7S2224C3[];
extern  VTBL_ENTRY _ZTV7S2224C3[];
extern Class_Descriptor cd_S2224C6;
extern VTBL_ENTRY _ZTI7S2224C6[];
extern  VTBL_ENTRY _ZTV7S2224C6[];
extern Class_Descriptor cd_S2224C5;
extern VTBL_ENTRY _ZTI7S2224C5[];
extern  VTBL_ENTRY _ZTV7S2224C5[];
extern Class_Descriptor cd_S2224C2;
extern VTBL_ENTRY _ZTI7S2224C2[];
extern  VTBL_ENTRY _ZTV7S2224C2[];
static Base_Class bases_S2224C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2224C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S2224C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S2224C6,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S2224C5,    ABISELECT(8,4), //bcp->offset
    57, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S2224C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S2224C1[];
extern void _ZN7S2224C1D1Ev();
extern void _ZN7S2224C1D0Ev();
extern void _ZN7S2224C43v35Ev();
extern void _ZN7S2224C43v36Ev();
extern void _ZN7S2224C43v37Ev();
extern void _ZN7S2224C43v38Ev();
extern void _ZN7S2224C33v39Ev();
extern void _ZN7S2224C33v40Ev();
extern void _ZN7S2224C33v41Ev();
extern void _ZN7S2224C33v42Ev();
extern void _ZN7S2224C33v43Ev();
extern void _ZN7S2224C23v61Ev();
extern void _ZN7S2224C23v62Ev();
extern void _ZN7S2224C23v63Ev();
extern void _ZN7S2224C23v64Ev();
extern void _ZN7S2224C23v65Ev();
extern void _ZN7S2224C23v66Ev();
extern void _ZN7S2224C23v67Ev();
extern void _ZN7S2224C23v68Ev();
extern void _ZN7S2224C23v69Ev();
extern void _ZN7S2224C23v70Ev();
extern void _ZN7S2224C12v1Ev();
extern void _ZN7S2224C12v2Ev();
extern void _ZN7S2224C12v3Ev();
extern void _ZN7S2224C12v4Ev();
extern void _ZN7S2224C12v5Ev();
extern void _ZN7S2224C12v6Ev();
extern void _ZN7S2224C12v7Ev();
extern void _ZN7S2224C12v8Ev();
extern void _ZN7S2224C12v9Ev();
extern void _ZN7S2224C13v10Ev();
extern void _ZN7S2224C13v11Ev();
extern void _ZN7S2224C13v12Ev();
extern void _ZN7S2224C13v13Ev();
extern void _ZN7S2224C13v14Ev();
extern void _ZN7S2224C13v15Ev();
extern void _ZN7S2224C13v16Ev();
extern void _ZN7S2224C13v17Ev();
extern void _ZN7S2224C13v18Ev();
extern void _ZN7S2224C13v19Ev();
extern void _ZN7S2224C13v20Ev();
extern void _ZN7S2224C13v21Ev();
extern void _ZN7S2224C13v22Ev();
extern void _ZN7S2224C13v23Ev();
extern void _ZN7S2224C13v24Ev();
extern void _ZN7S2224C13v25Ev();
extern void _ZN7S2224C13v26Ev();
extern void _ZN7S2224C13v27Ev();
extern void _ZN7S2224C13v28Ev();
extern void _ZN7S2224C13v29Ev();
extern void _ZN7S2224C13v30Ev();
extern void _ZN7S2224C13v31Ev();
extern void _ZN7S2224C13v32Ev();
extern void _ZN7S2224C13v33Ev();
extern void _ZN7S2224C13v34Ev();
extern void ABISELECT(_ZThn8_N7S2224C1D1Ev,_ZThn4_N7S2224C1D1Ev)();
extern void ABISELECT(_ZThn8_N7S2224C1D0Ev,_ZThn4_N7S2224C1D0Ev)();
extern void _ZN7S2224C63v44Ev();
extern void _ZN7S2224C63v45Ev();
extern void _ZN7S2224C63v46Ev();
extern void _ZN7S2224C63v47Ev();
extern void _ZN7S2224C63v48Ev();
extern void _ZN7S2224C63v49Ev();
extern void _ZN7S2224C63v50Ev();
extern void _ZN7S2224C63v51Ev();
extern void _ZN7S2224C63v52Ev();
extern void _ZN7S2224C63v53Ev();
extern void _ZN7S2224C63v54Ev();
extern void _ZN7S2224C63v55Ev();
extern void _ZN7S2224C63v56Ev();
extern void _ZN7S2224C53v57Ev();
extern void _ZN7S2224C53v58Ev();
extern void _ZN7S2224C53v59Ev();
extern void _ZN7S2224C53v60Ev();
static  VTBL_ENTRY vtc_S2224C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2224C1[0]),
  (VTBL_ENTRY)&_ZN7S2224C1D1Ev,
  (VTBL_ENTRY)&_ZN7S2224C1D0Ev,
  (VTBL_ENTRY)&_ZN7S2224C43v35Ev,
  (VTBL_ENTRY)&_ZN7S2224C43v36Ev,
  (VTBL_ENTRY)&_ZN7S2224C43v37Ev,
  (VTBL_ENTRY)&_ZN7S2224C43v38Ev,
  (VTBL_ENTRY)&_ZN7S2224C33v39Ev,
  (VTBL_ENTRY)&_ZN7S2224C33v40Ev,
  (VTBL_ENTRY)&_ZN7S2224C33v41Ev,
  (VTBL_ENTRY)&_ZN7S2224C33v42Ev,
  (VTBL_ENTRY)&_ZN7S2224C33v43Ev,
  (VTBL_ENTRY)&_ZN7S2224C23v61Ev,
  (VTBL_ENTRY)&_ZN7S2224C23v62Ev,
  (VTBL_ENTRY)&_ZN7S2224C23v63Ev,
  (VTBL_ENTRY)&_ZN7S2224C23v64Ev,
  (VTBL_ENTRY)&_ZN7S2224C23v65Ev,
  (VTBL_ENTRY)&_ZN7S2224C23v66Ev,
  (VTBL_ENTRY)&_ZN7S2224C23v67Ev,
  (VTBL_ENTRY)&_ZN7S2224C23v68Ev,
  (VTBL_ENTRY)&_ZN7S2224C23v69Ev,
  (VTBL_ENTRY)&_ZN7S2224C23v70Ev,
  (VTBL_ENTRY)&_ZN7S2224C12v1Ev,
  (VTBL_ENTRY)&_ZN7S2224C12v2Ev,
  (VTBL_ENTRY)&_ZN7S2224C12v3Ev,
  (VTBL_ENTRY)&_ZN7S2224C12v4Ev,
  (VTBL_ENTRY)&_ZN7S2224C12v5Ev,
  (VTBL_ENTRY)&_ZN7S2224C12v6Ev,
  (VTBL_ENTRY)&_ZN7S2224C12v7Ev,
  (VTBL_ENTRY)&_ZN7S2224C12v8Ev,
  (VTBL_ENTRY)&_ZN7S2224C12v9Ev,
  (VTBL_ENTRY)&_ZN7S2224C13v10Ev,
  (VTBL_ENTRY)&_ZN7S2224C13v11Ev,
  (VTBL_ENTRY)&_ZN7S2224C13v12Ev,
  (VTBL_ENTRY)&_ZN7S2224C13v13Ev,
  (VTBL_ENTRY)&_ZN7S2224C13v14Ev,
  (VTBL_ENTRY)&_ZN7S2224C13v15Ev,
  (VTBL_ENTRY)&_ZN7S2224C13v16Ev,
  (VTBL_ENTRY)&_ZN7S2224C13v17Ev,
  (VTBL_ENTRY)&_ZN7S2224C13v18Ev,
  (VTBL_ENTRY)&_ZN7S2224C13v19Ev,
  (VTBL_ENTRY)&_ZN7S2224C13v20Ev,
  (VTBL_ENTRY)&_ZN7S2224C13v21Ev,
  (VTBL_ENTRY)&_ZN7S2224C13v22Ev,
  (VTBL_ENTRY)&_ZN7S2224C13v23Ev,
  (VTBL_ENTRY)&_ZN7S2224C13v24Ev,
  (VTBL_ENTRY)&_ZN7S2224C13v25Ev,
  (VTBL_ENTRY)&_ZN7S2224C13v26Ev,
  (VTBL_ENTRY)&_ZN7S2224C13v27Ev,
  (VTBL_ENTRY)&_ZN7S2224C13v28Ev,
  (VTBL_ENTRY)&_ZN7S2224C13v29Ev,
  (VTBL_ENTRY)&_ZN7S2224C13v30Ev,
  (VTBL_ENTRY)&_ZN7S2224C13v31Ev,
  (VTBL_ENTRY)&_ZN7S2224C13v32Ev,
  (VTBL_ENTRY)&_ZN7S2224C13v33Ev,
  (VTBL_ENTRY)&_ZN7S2224C13v34Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S2224C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S2224C1D1Ev,_ZThn4_N7S2224C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S2224C1D0Ev,_ZThn4_N7S2224C1D0Ev),
  (VTBL_ENTRY)&_ZN7S2224C63v44Ev,
  (VTBL_ENTRY)&_ZN7S2224C63v45Ev,
  (VTBL_ENTRY)&_ZN7S2224C63v46Ev,
  (VTBL_ENTRY)&_ZN7S2224C63v47Ev,
  (VTBL_ENTRY)&_ZN7S2224C63v48Ev,
  (VTBL_ENTRY)&_ZN7S2224C63v49Ev,
  (VTBL_ENTRY)&_ZN7S2224C63v50Ev,
  (VTBL_ENTRY)&_ZN7S2224C63v51Ev,
  (VTBL_ENTRY)&_ZN7S2224C63v52Ev,
  (VTBL_ENTRY)&_ZN7S2224C63v53Ev,
  (VTBL_ENTRY)&_ZN7S2224C63v54Ev,
  (VTBL_ENTRY)&_ZN7S2224C63v55Ev,
  (VTBL_ENTRY)&_ZN7S2224C63v56Ev,
  (VTBL_ENTRY)&_ZN7S2224C53v57Ev,
  (VTBL_ENTRY)&_ZN7S2224C53v58Ev,
  (VTBL_ENTRY)&_ZN7S2224C53v59Ev,
  (VTBL_ENTRY)&_ZN7S2224C53v60Ev,
};
extern VTBL_ENTRY _ZTI7S2224C1[];
extern  VTBL_ENTRY _ZTV7S2224C1[];
Class_Descriptor cd_S2224C1 = {  "S2224C1", // class name
  bases_S2224C1, 5,
  &(vtc_S2224C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(1160,1116), // object size
  NSPAIRA(_ZTI7S2224C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2224C1),78, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  5, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4660C3  {
  virtual  ~S4660C3(); // _ZN7S4660C3D1Ev
  virtual void  v21(); // _ZN7S4660C33v21Ev
  virtual void  v22(); // _ZN7S4660C33v22Ev
  virtual void  v23(); // _ZN7S4660C33v23Ev
  virtual void  v24(); // _ZN7S4660C33v24Ev
  virtual void  v25(); // _ZN7S4660C33v25Ev
  virtual void  v26(); // _ZN7S4660C33v26Ev
  virtual void  v27(); // _ZN7S4660C33v27Ev
  virtual void  v28(); // _ZN7S4660C33v28Ev
  virtual void  v29(); // _ZN7S4660C33v29Ev
  virtual void  v30(); // _ZN7S4660C33v30Ev
  virtual void  v31(); // _ZN7S4660C33v31Ev
  virtual void  v32(); // _ZN7S4660C33v32Ev
  virtual void  v33(); // _ZN7S4660C33v33Ev
  virtual void  v34(); // _ZN7S4660C33v34Ev
  virtual void  v35(); // _ZN7S4660C33v35Ev
  virtual void  v36(); // _ZN7S4660C33v36Ev
  virtual void  v37(); // _ZN7S4660C33v37Ev
  virtual void  v38(); // _ZN7S4660C33v38Ev
  virtual void  v39(); // _ZN7S4660C33v39Ev
  virtual void  v40(); // _ZN7S4660C33v40Ev
  virtual void  v41(); // _ZN7S4660C33v41Ev
  virtual void  v42(); // _ZN7S4660C33v42Ev
  virtual void  v43(); // _ZN7S4660C33v43Ev
  virtual void  v44(); // _ZN7S4660C33v44Ev
  virtual void  v45(); // _ZN7S4660C33v45Ev
  virtual void  v46(); // _ZN7S4660C33v46Ev
  S4660C3(); // tgen
};
//SIG(-1 S4660C3) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26}


 S4660C3 ::~S4660C3(){ note_dtor("S4660C3", this);}
void  S4660C3 ::v21(){vfunc_called(this, "_ZN7S4660C33v21Ev");}
void  S4660C3 ::v22(){vfunc_called(this, "_ZN7S4660C33v22Ev");}
void  S4660C3 ::v23(){vfunc_called(this, "_ZN7S4660C33v23Ev");}
void  S4660C3 ::v24(){vfunc_called(this, "_ZN7S4660C33v24Ev");}
void  S4660C3 ::v25(){vfunc_called(this, "_ZN7S4660C33v25Ev");}
void  S4660C3 ::v26(){vfunc_called(this, "_ZN7S4660C33v26Ev");}
void  S4660C3 ::v27(){vfunc_called(this, "_ZN7S4660C33v27Ev");}
void  S4660C3 ::v28(){vfunc_called(this, "_ZN7S4660C33v28Ev");}
void  S4660C3 ::v29(){vfunc_called(this, "_ZN7S4660C33v29Ev");}
void  S4660C3 ::v30(){vfunc_called(this, "_ZN7S4660C33v30Ev");}
void  S4660C3 ::v31(){vfunc_called(this, "_ZN7S4660C33v31Ev");}
void  S4660C3 ::v32(){vfunc_called(this, "_ZN7S4660C33v32Ev");}
void  S4660C3 ::v33(){vfunc_called(this, "_ZN7S4660C33v33Ev");}
void  S4660C3 ::v34(){vfunc_called(this, "_ZN7S4660C33v34Ev");}
void  S4660C3 ::v35(){vfunc_called(this, "_ZN7S4660C33v35Ev");}
void  S4660C3 ::v36(){vfunc_called(this, "_ZN7S4660C33v36Ev");}
void  S4660C3 ::v37(){vfunc_called(this, "_ZN7S4660C33v37Ev");}
void  S4660C3 ::v38(){vfunc_called(this, "_ZN7S4660C33v38Ev");}
void  S4660C3 ::v39(){vfunc_called(this, "_ZN7S4660C33v39Ev");}
void  S4660C3 ::v40(){vfunc_called(this, "_ZN7S4660C33v40Ev");}
void  S4660C3 ::v41(){vfunc_called(this, "_ZN7S4660C33v41Ev");}
void  S4660C3 ::v42(){vfunc_called(this, "_ZN7S4660C33v42Ev");}
void  S4660C3 ::v43(){vfunc_called(this, "_ZN7S4660C33v43Ev");}
void  S4660C3 ::v44(){vfunc_called(this, "_ZN7S4660C33v44Ev");}
void  S4660C3 ::v45(){vfunc_called(this, "_ZN7S4660C33v45Ev");}
void  S4660C3 ::v46(){vfunc_called(this, "_ZN7S4660C33v46Ev");}
S4660C3 ::S4660C3(){ note_ctor("S4660C3", this);} // tgen

static void Test_S4660C3()
{
  extern Class_Descriptor cd_S4660C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S4660C3, buf);
    S4660C3 *dp, &lv = *(dp=new (buf) S4660C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S4660C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4660C3)");
    test_class_info(&lv, &cd_S4660C3);
    dp->~S4660C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4660C3(Test_S4660C3, "S4660C3", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S4660C3C1Ev();
extern void _ZN7S4660C3D1Ev();
Name_Map name_map_S4660C3[] = {
  NSPAIR(_ZN7S4660C3C1Ev),
  NSPAIR(_ZN7S4660C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4660C3[];
extern void _ZN7S4660C3D1Ev();
extern void _ZN7S4660C3D0Ev();
extern void _ZN7S4660C33v21Ev();
extern void _ZN7S4660C33v22Ev();
extern void _ZN7S4660C33v23Ev();
extern void _ZN7S4660C33v24Ev();
extern void _ZN7S4660C33v25Ev();
extern void _ZN7S4660C33v26Ev();
extern void _ZN7S4660C33v27Ev();
extern void _ZN7S4660C33v28Ev();
extern void _ZN7S4660C33v29Ev();
extern void _ZN7S4660C33v30Ev();
extern void _ZN7S4660C33v31Ev();
extern void _ZN7S4660C33v32Ev();
extern void _ZN7S4660C33v33Ev();
extern void _ZN7S4660C33v34Ev();
extern void _ZN7S4660C33v35Ev();
extern void _ZN7S4660C33v36Ev();
extern void _ZN7S4660C33v37Ev();
extern void _ZN7S4660C33v38Ev();
extern void _ZN7S4660C33v39Ev();
extern void _ZN7S4660C33v40Ev();
extern void _ZN7S4660C33v41Ev();
extern void _ZN7S4660C33v42Ev();
extern void _ZN7S4660C33v43Ev();
extern void _ZN7S4660C33v44Ev();
extern void _ZN7S4660C33v45Ev();
extern void _ZN7S4660C33v46Ev();
static  VTBL_ENTRY vtc_S4660C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4660C3[0]),
  (VTBL_ENTRY)&_ZN7S4660C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4660C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4660C33v21Ev,
  (VTBL_ENTRY)&_ZN7S4660C33v22Ev,
  (VTBL_ENTRY)&_ZN7S4660C33v23Ev,
  (VTBL_ENTRY)&_ZN7S4660C33v24Ev,
  (VTBL_ENTRY)&_ZN7S4660C33v25Ev,
  (VTBL_ENTRY)&_ZN7S4660C33v26Ev,
  (VTBL_ENTRY)&_ZN7S4660C33v27Ev,
  (VTBL_ENTRY)&_ZN7S4660C33v28Ev,
  (VTBL_ENTRY)&_ZN7S4660C33v29Ev,
  (VTBL_ENTRY)&_ZN7S4660C33v30Ev,
  (VTBL_ENTRY)&_ZN7S4660C33v31Ev,
  (VTBL_ENTRY)&_ZN7S4660C33v32Ev,
  (VTBL_ENTRY)&_ZN7S4660C33v33Ev,
  (VTBL_ENTRY)&_ZN7S4660C33v34Ev,
  (VTBL_ENTRY)&_ZN7S4660C33v35Ev,
  (VTBL_ENTRY)&_ZN7S4660C33v36Ev,
  (VTBL_ENTRY)&_ZN7S4660C33v37Ev,
  (VTBL_ENTRY)&_ZN7S4660C33v38Ev,
  (VTBL_ENTRY)&_ZN7S4660C33v39Ev,
  (VTBL_ENTRY)&_ZN7S4660C33v40Ev,
  (VTBL_ENTRY)&_ZN7S4660C33v41Ev,
  (VTBL_ENTRY)&_ZN7S4660C33v42Ev,
  (VTBL_ENTRY)&_ZN7S4660C33v43Ev,
  (VTBL_ENTRY)&_ZN7S4660C33v44Ev,
  (VTBL_ENTRY)&_ZN7S4660C33v45Ev,
  (VTBL_ENTRY)&_ZN7S4660C33v46Ev,
};
extern VTBL_ENTRY _ZTI7S4660C3[];
extern  VTBL_ENTRY _ZTV7S4660C3[];
Class_Descriptor cd_S4660C3 = {  "S4660C3", // class name
  0,0,//no base classes
  &(vtc_S4660C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S4660C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4660C3),30, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4660C2  : S4660C3 {
  void *s4660c2f0[2];
  int s4660c2f1[4];
  ::S2423C5_nt s4660c2f2;
  void *s4660c2f3;
  char s4660c2f4;
  void *s4660c2f5;
  virtual  ~S4660C2(); // _ZN7S4660C2D1Ev
  virtual void  v47(); // _ZN7S4660C23v47Ev
  virtual void  v48(); // _ZN7S4660C23v48Ev
  virtual void  v49(); // _ZN7S4660C23v49Ev
  virtual void  v50(); // _ZN7S4660C23v50Ev
  virtual void  v51(); // _ZN7S4660C23v51Ev
  virtual void  v52(); // _ZN7S4660C23v52Ev
  virtual void  v53(); // _ZN7S4660C23v53Ev
  virtual void  v54(); // _ZN7S4660C23v54Ev
  virtual void  v55(); // _ZN7S4660C23v55Ev
  virtual void  v56(); // _ZN7S4660C23v56Ev
  virtual void  v57(); // _ZN7S4660C23v57Ev
  virtual void  v58(); // _ZN7S4660C23v58Ev
  virtual void  v59(); // _ZN7S4660C23v59Ev
  virtual void  v60(); // _ZN7S4660C23v60Ev
  S4660C2(); // tgen
};
//SIG(-1 S4660C2) C1{ BC2{ vd v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 Fp[2] Fi[4] FC3{ Fi[2]} Fp Fc Fp}


 S4660C2 ::~S4660C2(){ note_dtor("S4660C2", this);}
void  S4660C2 ::v47(){vfunc_called(this, "_ZN7S4660C23v47Ev");}
void  S4660C2 ::v48(){vfunc_called(this, "_ZN7S4660C23v48Ev");}
void  S4660C2 ::v49(){vfunc_called(this, "_ZN7S4660C23v49Ev");}
void  S4660C2 ::v50(){vfunc_called(this, "_ZN7S4660C23v50Ev");}
void  S4660C2 ::v51(){vfunc_called(this, "_ZN7S4660C23v51Ev");}
void  S4660C2 ::v52(){vfunc_called(this, "_ZN7S4660C23v52Ev");}
void  S4660C2 ::v53(){vfunc_called(this, "_ZN7S4660C23v53Ev");}
void  S4660C2 ::v54(){vfunc_called(this, "_ZN7S4660C23v54Ev");}
void  S4660C2 ::v55(){vfunc_called(this, "_ZN7S4660C23v55Ev");}
void  S4660C2 ::v56(){vfunc_called(this, "_ZN7S4660C23v56Ev");}
void  S4660C2 ::v57(){vfunc_called(this, "_ZN7S4660C23v57Ev");}
void  S4660C2 ::v58(){vfunc_called(this, "_ZN7S4660C23v58Ev");}
void  S4660C2 ::v59(){vfunc_called(this, "_ZN7S4660C23v59Ev");}
void  S4660C2 ::v60(){vfunc_called(this, "_ZN7S4660C23v60Ev");}
S4660C2 ::S4660C2(){ note_ctor("S4660C2", this);} // tgen

static void Test_S4660C2()
{
  extern Class_Descriptor cd_S4660C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,13)];
    init_test(&cd_S4660C2, buf);
    S4660C2 *dp, &lv = *(dp=new (buf) S4660C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,48), "sizeof(S4660C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4660C2)");
    check_base_class_offset(lv, (S4660C3*), 0, "S4660C2");
    check_field_offset(lv, s4660c2f0, ABISELECT(8,4), "S4660C2.s4660c2f0");
    check_field_offset(lv, s4660c2f1, ABISELECT(24,12), "S4660C2.s4660c2f1");
    check_field_offset(lv, s4660c2f2, ABISELECT(40,28), "S4660C2.s4660c2f2");
    check_field_offset(lv, s4660c2f3, ABISELECT(48,36), "S4660C2.s4660c2f3");
    check_field_offset(lv, s4660c2f4, ABISELECT(56,40), "S4660C2.s4660c2f4");
    check_field_offset(lv, s4660c2f5, ABISELECT(64,44), "S4660C2.s4660c2f5");
    test_class_info(&lv, &cd_S4660C2);
    dp->~S4660C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4660C2(Test_S4660C2, "S4660C2", ABISELECT(72,48));

#else // __cplusplus

extern void _ZN7S4660C2C1Ev();
extern void _ZN7S4660C2D1Ev();
Name_Map name_map_S4660C2[] = {
  NSPAIR(_ZN7S4660C2C1Ev),
  NSPAIR(_ZN7S4660C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4660C3;
extern VTBL_ENTRY _ZTI7S4660C3[];
extern  VTBL_ENTRY _ZTV7S4660C3[];
static Base_Class bases_S4660C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4660C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4660C2[];
extern void _ZN7S4660C2D1Ev();
extern void _ZN7S4660C2D0Ev();
extern void _ZN7S4660C33v21Ev();
extern void _ZN7S4660C33v22Ev();
extern void _ZN7S4660C33v23Ev();
extern void _ZN7S4660C33v24Ev();
extern void _ZN7S4660C33v25Ev();
extern void _ZN7S4660C33v26Ev();
extern void _ZN7S4660C33v27Ev();
extern void _ZN7S4660C33v28Ev();
extern void _ZN7S4660C33v29Ev();
extern void _ZN7S4660C33v30Ev();
extern void _ZN7S4660C33v31Ev();
extern void _ZN7S4660C33v32Ev();
extern void _ZN7S4660C33v33Ev();
extern void _ZN7S4660C33v34Ev();
extern void _ZN7S4660C33v35Ev();
extern void _ZN7S4660C33v36Ev();
extern void _ZN7S4660C33v37Ev();
extern void _ZN7S4660C33v38Ev();
extern void _ZN7S4660C33v39Ev();
extern void _ZN7S4660C33v40Ev();
extern void _ZN7S4660C33v41Ev();
extern void _ZN7S4660C33v42Ev();
extern void _ZN7S4660C33v43Ev();
extern void _ZN7S4660C33v44Ev();
extern void _ZN7S4660C33v45Ev();
extern void _ZN7S4660C33v46Ev();
extern void _ZN7S4660C23v47Ev();
extern void _ZN7S4660C23v48Ev();
extern void _ZN7S4660C23v49Ev();
extern void _ZN7S4660C23v50Ev();
extern void _ZN7S4660C23v51Ev();
extern void _ZN7S4660C23v52Ev();
extern void _ZN7S4660C23v53Ev();
extern void _ZN7S4660C23v54Ev();
extern void _ZN7S4660C23v55Ev();
extern void _ZN7S4660C23v56Ev();
extern void _ZN7S4660C23v57Ev();
extern void _ZN7S4660C23v58Ev();
extern void _ZN7S4660C23v59Ev();
extern void _ZN7S4660C23v60Ev();
static  VTBL_ENTRY vtc_S4660C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4660C2[0]),
  (VTBL_ENTRY)&_ZN7S4660C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4660C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4660C33v21Ev,
  (VTBL_ENTRY)&_ZN7S4660C33v22Ev,
  (VTBL_ENTRY)&_ZN7S4660C33v23Ev,
  (VTBL_ENTRY)&_ZN7S4660C33v24Ev,
  (VTBL_ENTRY)&_ZN7S4660C33v25Ev,
  (VTBL_ENTRY)&_ZN7S4660C33v26Ev,
  (VTBL_ENTRY)&_ZN7S4660C33v27Ev,
  (VTBL_ENTRY)&_ZN7S4660C33v28Ev,
  (VTBL_ENTRY)&_ZN7S4660C33v29Ev,
  (VTBL_ENTRY)&_ZN7S4660C33v30Ev,
  (VTBL_ENTRY)&_ZN7S4660C33v31Ev,
  (VTBL_ENTRY)&_ZN7S4660C33v32Ev,
  (VTBL_ENTRY)&_ZN7S4660C33v33Ev,
  (VTBL_ENTRY)&_ZN7S4660C33v34Ev,
  (VTBL_ENTRY)&_ZN7S4660C33v35Ev,
  (VTBL_ENTRY)&_ZN7S4660C33v36Ev,
  (VTBL_ENTRY)&_ZN7S4660C33v37Ev,
  (VTBL_ENTRY)&_ZN7S4660C33v38Ev,
  (VTBL_ENTRY)&_ZN7S4660C33v39Ev,
  (VTBL_ENTRY)&_ZN7S4660C33v40Ev,
  (VTBL_ENTRY)&_ZN7S4660C33v41Ev,
  (VTBL_ENTRY)&_ZN7S4660C33v42Ev,
  (VTBL_ENTRY)&_ZN7S4660C33v43Ev,
  (VTBL_ENTRY)&_ZN7S4660C33v44Ev,
  (VTBL_ENTRY)&_ZN7S4660C33v45Ev,
  (VTBL_ENTRY)&_ZN7S4660C33v46Ev,
  (VTBL_ENTRY)&_ZN7S4660C23v47Ev,
  (VTBL_ENTRY)&_ZN7S4660C23v48Ev,
  (VTBL_ENTRY)&_ZN7S4660C23v49Ev,
  (VTBL_ENTRY)&_ZN7S4660C23v50Ev,
  (VTBL_ENTRY)&_ZN7S4660C23v51Ev,
  (VTBL_ENTRY)&_ZN7S4660C23v52Ev,
  (VTBL_ENTRY)&_ZN7S4660C23v53Ev,
  (VTBL_ENTRY)&_ZN7S4660C23v54Ev,
  (VTBL_ENTRY)&_ZN7S4660C23v55Ev,
  (VTBL_ENTRY)&_ZN7S4660C23v56Ev,
  (VTBL_ENTRY)&_ZN7S4660C23v57Ev,
  (VTBL_ENTRY)&_ZN7S4660C23v58Ev,
  (VTBL_ENTRY)&_ZN7S4660C23v59Ev,
  (VTBL_ENTRY)&_ZN7S4660C23v60Ev,
};
extern VTBL_ENTRY _ZTI7S4660C2[];
extern  VTBL_ENTRY _ZTV7S4660C2[];
Class_Descriptor cd_S4660C2 = {  "S4660C2", // class name
  bases_S4660C2, 1,
  &(vtc_S4660C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,48), // object size
  NSPAIRA(_ZTI7S4660C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4660C2),44, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4660C5  {
  virtual  ~S4660C5(); // _ZN7S4660C5D1Ev
  virtual void  v61(); // _ZN7S4660C53v61Ev
  virtual void  v62(); // _ZN7S4660C53v62Ev
  virtual void  v63(); // _ZN7S4660C53v63Ev
  virtual void  v64(); // _ZN7S4660C53v64Ev
  virtual void  v65(); // _ZN7S4660C53v65Ev
  virtual void  v66(); // _ZN7S4660C53v66Ev
  virtual void  v67(); // _ZN7S4660C53v67Ev
  S4660C5(); // tgen
};
//SIG(-1 S4660C5) C1{ vd v1 v2 v3 v4 v5 v6 v7}


 S4660C5 ::~S4660C5(){ note_dtor("S4660C5", this);}
void  S4660C5 ::v61(){vfunc_called(this, "_ZN7S4660C53v61Ev");}
void  S4660C5 ::v62(){vfunc_called(this, "_ZN7S4660C53v62Ev");}
void  S4660C5 ::v63(){vfunc_called(this, "_ZN7S4660C53v63Ev");}
void  S4660C5 ::v64(){vfunc_called(this, "_ZN7S4660C53v64Ev");}
void  S4660C5 ::v65(){vfunc_called(this, "_ZN7S4660C53v65Ev");}
void  S4660C5 ::v66(){vfunc_called(this, "_ZN7S4660C53v66Ev");}
void  S4660C5 ::v67(){vfunc_called(this, "_ZN7S4660C53v67Ev");}
S4660C5 ::S4660C5(){ note_ctor("S4660C5", this);} // tgen

static void Test_S4660C5()
{
  extern Class_Descriptor cd_S4660C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S4660C5, buf);
    S4660C5 *dp, &lv = *(dp=new (buf) S4660C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S4660C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4660C5)");
    test_class_info(&lv, &cd_S4660C5);
    dp->~S4660C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4660C5(Test_S4660C5, "S4660C5", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S4660C5C1Ev();
extern void _ZN7S4660C5D1Ev();
Name_Map name_map_S4660C5[] = {
  NSPAIR(_ZN7S4660C5C1Ev),
  NSPAIR(_ZN7S4660C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4660C5[];
extern void _ZN7S4660C5D1Ev();
extern void _ZN7S4660C5D0Ev();
extern void _ZN7S4660C53v61Ev();
extern void _ZN7S4660C53v62Ev();
extern void _ZN7S4660C53v63Ev();
extern void _ZN7S4660C53v64Ev();
extern void _ZN7S4660C53v65Ev();
extern void _ZN7S4660C53v66Ev();
extern void _ZN7S4660C53v67Ev();
static  VTBL_ENTRY vtc_S4660C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4660C5[0]),
  (VTBL_ENTRY)&_ZN7S4660C5D1Ev,
  (VTBL_ENTRY)&_ZN7S4660C5D0Ev,
  (VTBL_ENTRY)&_ZN7S4660C53v61Ev,
  (VTBL_ENTRY)&_ZN7S4660C53v62Ev,
  (VTBL_ENTRY)&_ZN7S4660C53v63Ev,
  (VTBL_ENTRY)&_ZN7S4660C53v64Ev,
  (VTBL_ENTRY)&_ZN7S4660C53v65Ev,
  (VTBL_ENTRY)&_ZN7S4660C53v66Ev,
  (VTBL_ENTRY)&_ZN7S4660C53v67Ev,
};
extern VTBL_ENTRY _ZTI7S4660C5[];
extern  VTBL_ENTRY _ZTV7S4660C5[];
Class_Descriptor cd_S4660C5 = {  "S4660C5", // class name
  0,0,//no base classes
  &(vtc_S4660C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S4660C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4660C5),11, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4660C6  {
  virtual  ~S4660C6(); // _ZN7S4660C6D1Ev
  virtual void  v68(); // _ZN7S4660C63v68Ev
  virtual void  v69(); // _ZN7S4660C63v69Ev
  virtual void  v70(); // _ZN7S4660C63v70Ev
  virtual void  v71(); // _ZN7S4660C63v71Ev
  virtual void  v72(); // _ZN7S4660C63v72Ev
  virtual void  v73(); // _ZN7S4660C63v73Ev
  virtual void  v74(); // _ZN7S4660C63v74Ev
  virtual void  v75(); // _ZN7S4660C63v75Ev
  virtual void  v76(); // _ZN7S4660C63v76Ev
  S4660C6(); // tgen
};
//SIG(-1 S4660C6) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9}


 S4660C6 ::~S4660C6(){ note_dtor("S4660C6", this);}
void  S4660C6 ::v68(){vfunc_called(this, "_ZN7S4660C63v68Ev");}
void  S4660C6 ::v69(){vfunc_called(this, "_ZN7S4660C63v69Ev");}
void  S4660C6 ::v70(){vfunc_called(this, "_ZN7S4660C63v70Ev");}
void  S4660C6 ::v71(){vfunc_called(this, "_ZN7S4660C63v71Ev");}
void  S4660C6 ::v72(){vfunc_called(this, "_ZN7S4660C63v72Ev");}
void  S4660C6 ::v73(){vfunc_called(this, "_ZN7S4660C63v73Ev");}
void  S4660C6 ::v74(){vfunc_called(this, "_ZN7S4660C63v74Ev");}
void  S4660C6 ::v75(){vfunc_called(this, "_ZN7S4660C63v75Ev");}
void  S4660C6 ::v76(){vfunc_called(this, "_ZN7S4660C63v76Ev");}
S4660C6 ::S4660C6(){ note_ctor("S4660C6", this);} // tgen

static void Test_S4660C6()
{
  extern Class_Descriptor cd_S4660C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S4660C6, buf);
    S4660C6 *dp, &lv = *(dp=new (buf) S4660C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S4660C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4660C6)");
    test_class_info(&lv, &cd_S4660C6);
    dp->~S4660C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4660C6(Test_S4660C6, "S4660C6", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S4660C6C1Ev();
extern void _ZN7S4660C6D1Ev();
Name_Map name_map_S4660C6[] = {
  NSPAIR(_ZN7S4660C6C1Ev),
  NSPAIR(_ZN7S4660C6D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4660C6[];
extern void _ZN7S4660C6D1Ev();
extern void _ZN7S4660C6D0Ev();
extern void _ZN7S4660C63v68Ev();
extern void _ZN7S4660C63v69Ev();
extern void _ZN7S4660C63v70Ev();
extern void _ZN7S4660C63v71Ev();
extern void _ZN7S4660C63v72Ev();
extern void _ZN7S4660C63v73Ev();
extern void _ZN7S4660C63v74Ev();
extern void _ZN7S4660C63v75Ev();
extern void _ZN7S4660C63v76Ev();
static  VTBL_ENTRY vtc_S4660C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4660C6[0]),
  (VTBL_ENTRY)&_ZN7S4660C6D1Ev,
  (VTBL_ENTRY)&_ZN7S4660C6D0Ev,
  (VTBL_ENTRY)&_ZN7S4660C63v68Ev,
  (VTBL_ENTRY)&_ZN7S4660C63v69Ev,
  (VTBL_ENTRY)&_ZN7S4660C63v70Ev,
  (VTBL_ENTRY)&_ZN7S4660C63v71Ev,
  (VTBL_ENTRY)&_ZN7S4660C63v72Ev,
  (VTBL_ENTRY)&_ZN7S4660C63v73Ev,
  (VTBL_ENTRY)&_ZN7S4660C63v74Ev,
  (VTBL_ENTRY)&_ZN7S4660C63v75Ev,
  (VTBL_ENTRY)&_ZN7S4660C63v76Ev,
};
extern VTBL_ENTRY _ZTI7S4660C6[];
extern  VTBL_ENTRY _ZTV7S4660C6[];
Class_Descriptor cd_S4660C6 = {  "S4660C6", // class name
  0,0,//no base classes
  &(vtc_S4660C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S4660C6),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4660C6),13, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4660C1  : S4660C2 , S4660C5 , S4660C6 {
  void *s4660c1f0[2];
  int s4660c1f1;
  __tsi64 s4660c1f2;
  int s4660c1f3;
  void *s4660c1f4;
  virtual  ~S4660C1(); // _ZN7S4660C1D1Ev
  virtual void  v1(); // _ZN7S4660C12v1Ev
  virtual void  v2(); // _ZN7S4660C12v2Ev
  virtual void  v3(); // _ZN7S4660C12v3Ev
  virtual void  v4(); // _ZN7S4660C12v4Ev
  virtual void  v5(); // _ZN7S4660C12v5Ev
  virtual void  v6(); // _ZN7S4660C12v6Ev
  virtual void  v7(); // _ZN7S4660C12v7Ev
  virtual void  v8(); // _ZN7S4660C12v8Ev
  virtual void  v9(); // _ZN7S4660C12v9Ev
  virtual void  v10(); // _ZN7S4660C13v10Ev
  virtual void  v11(); // _ZN7S4660C13v11Ev
  virtual void  v12(); // _ZN7S4660C13v12Ev
  virtual void  v13(); // _ZN7S4660C13v13Ev
  virtual void  v14(); // _ZN7S4660C13v14Ev
  virtual void  v15(); // _ZN7S4660C13v15Ev
  virtual void  v16(); // _ZN7S4660C13v16Ev
  virtual void  v17(); // _ZN7S4660C13v17Ev
  virtual void  v18(); // _ZN7S4660C13v18Ev
  virtual void  v19(); // _ZN7S4660C13v19Ev
  virtual void  v20(); // _ZN7S4660C13v20Ev
  S4660C1(); // tgen
};
//SIG(1 S4660C1) C1{ BC2{ BC3{ vd v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46} vd v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 Fp[2] Fi[4] FC4{ Fi[2]} Fp Fc Fp} BC5{ vd v61 v62 v63 v64 v65 v66 v67} BC6{ vd v68 v69 v70 v71 v72 v73 v74 v75 v76} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 Fp[2] Fi FL Fi Fp}


 S4660C1 ::~S4660C1(){ note_dtor("S4660C1", this);}
void  S4660C1 ::v1(){vfunc_called(this, "_ZN7S4660C12v1Ev");}
void  S4660C1 ::v2(){vfunc_called(this, "_ZN7S4660C12v2Ev");}
void  S4660C1 ::v3(){vfunc_called(this, "_ZN7S4660C12v3Ev");}
void  S4660C1 ::v4(){vfunc_called(this, "_ZN7S4660C12v4Ev");}
void  S4660C1 ::v5(){vfunc_called(this, "_ZN7S4660C12v5Ev");}
void  S4660C1 ::v6(){vfunc_called(this, "_ZN7S4660C12v6Ev");}
void  S4660C1 ::v7(){vfunc_called(this, "_ZN7S4660C12v7Ev");}
void  S4660C1 ::v8(){vfunc_called(this, "_ZN7S4660C12v8Ev");}
void  S4660C1 ::v9(){vfunc_called(this, "_ZN7S4660C12v9Ev");}
void  S4660C1 ::v10(){vfunc_called(this, "_ZN7S4660C13v10Ev");}
void  S4660C1 ::v11(){vfunc_called(this, "_ZN7S4660C13v11Ev");}
void  S4660C1 ::v12(){vfunc_called(this, "_ZN7S4660C13v12Ev");}
void  S4660C1 ::v13(){vfunc_called(this, "_ZN7S4660C13v13Ev");}
void  S4660C1 ::v14(){vfunc_called(this, "_ZN7S4660C13v14Ev");}
void  S4660C1 ::v15(){vfunc_called(this, "_ZN7S4660C13v15Ev");}
void  S4660C1 ::v16(){vfunc_called(this, "_ZN7S4660C13v16Ev");}
void  S4660C1 ::v17(){vfunc_called(this, "_ZN7S4660C13v17Ev");}
void  S4660C1 ::v18(){vfunc_called(this, "_ZN7S4660C13v18Ev");}
void  S4660C1 ::v19(){vfunc_called(this, "_ZN7S4660C13v19Ev");}
void  S4660C1 ::v20(){vfunc_called(this, "_ZN7S4660C13v20Ev");}
S4660C1 ::S4660C1(){ note_ctor("S4660C1", this);} // tgen

static void Test_S4660C1()
{
  extern Class_Descriptor cd_S4660C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(18,22)];
    init_test(&cd_S4660C1, buf);
    S4660C1 *dp, &lv = *(dp=new (buf) S4660C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(136,84), "sizeof(S4660C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4660C1)");
    check_base_class_offset(lv, (S4660C3*)(S4660C2*), 0, "S4660C1");
    check_base_class_offset(lv, (S4660C2*), 0, "S4660C1");
    check_base_class_offset(lv, (S4660C5*), ABISELECT(72,48), "S4660C1");
    check_base_class_offset(lv, (S4660C6*), ABISELECT(80,52), "S4660C1");
    check_field_offset(lv, s4660c1f0, ABISELECT(88,56), "S4660C1.s4660c1f0");
    check_field_offset(lv, s4660c1f1, ABISELECT(104,64), "S4660C1.s4660c1f1");
    check_field_offset(lv, s4660c1f2, ABISELECT(112,68), "S4660C1.s4660c1f2");
    check_field_offset(lv, s4660c1f3, ABISELECT(120,76), "S4660C1.s4660c1f3");
    check_field_offset(lv, s4660c1f4, ABISELECT(128,80), "S4660C1.s4660c1f4");
    test_class_info(&lv, &cd_S4660C1);
    dp->~S4660C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4660C1(Test_S4660C1, "S4660C1", ABISELECT(136,84));

#else // __cplusplus

extern void _ZN7S4660C1C1Ev();
extern void _ZN7S4660C1D1Ev();
Name_Map name_map_S4660C1[] = {
  NSPAIR(_ZN7S4660C1C1Ev),
  NSPAIR(_ZN7S4660C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4660C3;
extern VTBL_ENTRY _ZTI7S4660C3[];
extern  VTBL_ENTRY _ZTV7S4660C3[];
extern Class_Descriptor cd_S4660C2;
extern VTBL_ENTRY _ZTI7S4660C2[];
extern  VTBL_ENTRY _ZTV7S4660C2[];
extern Class_Descriptor cd_S4660C5;
extern VTBL_ENTRY _ZTI7S4660C5[];
extern  VTBL_ENTRY _ZTV7S4660C5[];
extern Class_Descriptor cd_S4660C6;
extern VTBL_ENTRY _ZTI7S4660C6[];
extern  VTBL_ENTRY _ZTV7S4660C6[];
static Base_Class bases_S4660C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4660C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S4660C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S4660C5,    ABISELECT(72,48), //bcp->offset
    64, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S4660C6,    ABISELECT(80,52), //bcp->offset
    75, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4660C1[];
extern void _ZN7S4660C1D1Ev();
extern void _ZN7S4660C1D0Ev();
extern void _ZN7S4660C33v21Ev();
extern void _ZN7S4660C33v22Ev();
extern void _ZN7S4660C33v23Ev();
extern void _ZN7S4660C33v24Ev();
extern void _ZN7S4660C33v25Ev();
extern void _ZN7S4660C33v26Ev();
extern void _ZN7S4660C33v27Ev();
extern void _ZN7S4660C33v28Ev();
extern void _ZN7S4660C33v29Ev();
extern void _ZN7S4660C33v30Ev();
extern void _ZN7S4660C33v31Ev();
extern void _ZN7S4660C33v32Ev();
extern void _ZN7S4660C33v33Ev();
extern void _ZN7S4660C33v34Ev();
extern void _ZN7S4660C33v35Ev();
extern void _ZN7S4660C33v36Ev();
extern void _ZN7S4660C33v37Ev();
extern void _ZN7S4660C33v38Ev();
extern void _ZN7S4660C33v39Ev();
extern void _ZN7S4660C33v40Ev();
extern void _ZN7S4660C33v41Ev();
extern void _ZN7S4660C33v42Ev();
extern void _ZN7S4660C33v43Ev();
extern void _ZN7S4660C33v44Ev();
extern void _ZN7S4660C33v45Ev();
extern void _ZN7S4660C33v46Ev();
extern void _ZN7S4660C23v47Ev();
extern void _ZN7S4660C23v48Ev();
extern void _ZN7S4660C23v49Ev();
extern void _ZN7S4660C23v50Ev();
extern void _ZN7S4660C23v51Ev();
extern void _ZN7S4660C23v52Ev();
extern void _ZN7S4660C23v53Ev();
extern void _ZN7S4660C23v54Ev();
extern void _ZN7S4660C23v55Ev();
extern void _ZN7S4660C23v56Ev();
extern void _ZN7S4660C23v57Ev();
extern void _ZN7S4660C23v58Ev();
extern void _ZN7S4660C23v59Ev();
extern void _ZN7S4660C23v60Ev();
extern void _ZN7S4660C12v1Ev();
extern void _ZN7S4660C12v2Ev();
extern void _ZN7S4660C12v3Ev();
extern void _ZN7S4660C12v4Ev();
extern void _ZN7S4660C12v5Ev();
extern void _ZN7S4660C12v6Ev();
extern void _ZN7S4660C12v7Ev();
extern void _ZN7S4660C12v8Ev();
extern void _ZN7S4660C12v9Ev();
extern void _ZN7S4660C13v10Ev();
extern void _ZN7S4660C13v11Ev();
extern void _ZN7S4660C13v12Ev();
extern void _ZN7S4660C13v13Ev();
extern void _ZN7S4660C13v14Ev();
extern void _ZN7S4660C13v15Ev();
extern void _ZN7S4660C13v16Ev();
extern void _ZN7S4660C13v17Ev();
extern void _ZN7S4660C13v18Ev();
extern void _ZN7S4660C13v19Ev();
extern void _ZN7S4660C13v20Ev();
extern void ABISELECT(_ZThn72_N7S4660C1D1Ev,_ZThn48_N7S4660C1D1Ev)();
extern void ABISELECT(_ZThn72_N7S4660C1D0Ev,_ZThn48_N7S4660C1D0Ev)();
extern void _ZN7S4660C53v61Ev();
extern void _ZN7S4660C53v62Ev();
extern void _ZN7S4660C53v63Ev();
extern void _ZN7S4660C53v64Ev();
extern void _ZN7S4660C53v65Ev();
extern void _ZN7S4660C53v66Ev();
extern void _ZN7S4660C53v67Ev();
extern void ABISELECT(_ZThn80_N7S4660C1D1Ev,_ZThn52_N7S4660C1D1Ev)();
extern void ABISELECT(_ZThn80_N7S4660C1D0Ev,_ZThn52_N7S4660C1D0Ev)();
extern void _ZN7S4660C63v68Ev();
extern void _ZN7S4660C63v69Ev();
extern void _ZN7S4660C63v70Ev();
extern void _ZN7S4660C63v71Ev();
extern void _ZN7S4660C63v72Ev();
extern void _ZN7S4660C63v73Ev();
extern void _ZN7S4660C63v74Ev();
extern void _ZN7S4660C63v75Ev();
extern void _ZN7S4660C63v76Ev();
static  VTBL_ENTRY vtc_S4660C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4660C1[0]),
  (VTBL_ENTRY)&_ZN7S4660C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4660C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4660C33v21Ev,
  (VTBL_ENTRY)&_ZN7S4660C33v22Ev,
  (VTBL_ENTRY)&_ZN7S4660C33v23Ev,
  (VTBL_ENTRY)&_ZN7S4660C33v24Ev,
  (VTBL_ENTRY)&_ZN7S4660C33v25Ev,
  (VTBL_ENTRY)&_ZN7S4660C33v26Ev,
  (VTBL_ENTRY)&_ZN7S4660C33v27Ev,
  (VTBL_ENTRY)&_ZN7S4660C33v28Ev,
  (VTBL_ENTRY)&_ZN7S4660C33v29Ev,
  (VTBL_ENTRY)&_ZN7S4660C33v30Ev,
  (VTBL_ENTRY)&_ZN7S4660C33v31Ev,
  (VTBL_ENTRY)&_ZN7S4660C33v32Ev,
  (VTBL_ENTRY)&_ZN7S4660C33v33Ev,
  (VTBL_ENTRY)&_ZN7S4660C33v34Ev,
  (VTBL_ENTRY)&_ZN7S4660C33v35Ev,
  (VTBL_ENTRY)&_ZN7S4660C33v36Ev,
  (VTBL_ENTRY)&_ZN7S4660C33v37Ev,
  (VTBL_ENTRY)&_ZN7S4660C33v38Ev,
  (VTBL_ENTRY)&_ZN7S4660C33v39Ev,
  (VTBL_ENTRY)&_ZN7S4660C33v40Ev,
  (VTBL_ENTRY)&_ZN7S4660C33v41Ev,
  (VTBL_ENTRY)&_ZN7S4660C33v42Ev,
  (VTBL_ENTRY)&_ZN7S4660C33v43Ev,
  (VTBL_ENTRY)&_ZN7S4660C33v44Ev,
  (VTBL_ENTRY)&_ZN7S4660C33v45Ev,
  (VTBL_ENTRY)&_ZN7S4660C33v46Ev,
  (VTBL_ENTRY)&_ZN7S4660C23v47Ev,
  (VTBL_ENTRY)&_ZN7S4660C23v48Ev,
  (VTBL_ENTRY)&_ZN7S4660C23v49Ev,
  (VTBL_ENTRY)&_ZN7S4660C23v50Ev,
  (VTBL_ENTRY)&_ZN7S4660C23v51Ev,
  (VTBL_ENTRY)&_ZN7S4660C23v52Ev,
  (VTBL_ENTRY)&_ZN7S4660C23v53Ev,
  (VTBL_ENTRY)&_ZN7S4660C23v54Ev,
  (VTBL_ENTRY)&_ZN7S4660C23v55Ev,
  (VTBL_ENTRY)&_ZN7S4660C23v56Ev,
  (VTBL_ENTRY)&_ZN7S4660C23v57Ev,
  (VTBL_ENTRY)&_ZN7S4660C23v58Ev,
  (VTBL_ENTRY)&_ZN7S4660C23v59Ev,
  (VTBL_ENTRY)&_ZN7S4660C23v60Ev,
  (VTBL_ENTRY)&_ZN7S4660C12v1Ev,
  (VTBL_ENTRY)&_ZN7S4660C12v2Ev,
  (VTBL_ENTRY)&_ZN7S4660C12v3Ev,
  (VTBL_ENTRY)&_ZN7S4660C12v4Ev,
  (VTBL_ENTRY)&_ZN7S4660C12v5Ev,
  (VTBL_ENTRY)&_ZN7S4660C12v6Ev,
  (VTBL_ENTRY)&_ZN7S4660C12v7Ev,
  (VTBL_ENTRY)&_ZN7S4660C12v8Ev,
  (VTBL_ENTRY)&_ZN7S4660C12v9Ev,
  (VTBL_ENTRY)&_ZN7S4660C13v10Ev,
  (VTBL_ENTRY)&_ZN7S4660C13v11Ev,
  (VTBL_ENTRY)&_ZN7S4660C13v12Ev,
  (VTBL_ENTRY)&_ZN7S4660C13v13Ev,
  (VTBL_ENTRY)&_ZN7S4660C13v14Ev,
  (VTBL_ENTRY)&_ZN7S4660C13v15Ev,
  (VTBL_ENTRY)&_ZN7S4660C13v16Ev,
  (VTBL_ENTRY)&_ZN7S4660C13v17Ev,
  (VTBL_ENTRY)&_ZN7S4660C13v18Ev,
  (VTBL_ENTRY)&_ZN7S4660C13v19Ev,
  (VTBL_ENTRY)&_ZN7S4660C13v20Ev,
  ABISELECT(-72,-48),
  (VTBL_ENTRY)&(_ZTI7S4660C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn72_N7S4660C1D1Ev,_ZThn48_N7S4660C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn72_N7S4660C1D0Ev,_ZThn48_N7S4660C1D0Ev),
  (VTBL_ENTRY)&_ZN7S4660C53v61Ev,
  (VTBL_ENTRY)&_ZN7S4660C53v62Ev,
  (VTBL_ENTRY)&_ZN7S4660C53v63Ev,
  (VTBL_ENTRY)&_ZN7S4660C53v64Ev,
  (VTBL_ENTRY)&_ZN7S4660C53v65Ev,
  (VTBL_ENTRY)&_ZN7S4660C53v66Ev,
  (VTBL_ENTRY)&_ZN7S4660C53v67Ev,
  ABISELECT(-80,-52),
  (VTBL_ENTRY)&(_ZTI7S4660C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn80_N7S4660C1D1Ev,_ZThn52_N7S4660C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn80_N7S4660C1D0Ev,_ZThn52_N7S4660C1D0Ev),
  (VTBL_ENTRY)&_ZN7S4660C63v68Ev,
  (VTBL_ENTRY)&_ZN7S4660C63v69Ev,
  (VTBL_ENTRY)&_ZN7S4660C63v70Ev,
  (VTBL_ENTRY)&_ZN7S4660C63v71Ev,
  (VTBL_ENTRY)&_ZN7S4660C63v72Ev,
  (VTBL_ENTRY)&_ZN7S4660C63v73Ev,
  (VTBL_ENTRY)&_ZN7S4660C63v74Ev,
  (VTBL_ENTRY)&_ZN7S4660C63v75Ev,
  (VTBL_ENTRY)&_ZN7S4660C63v76Ev,
};
extern VTBL_ENTRY _ZTI7S4660C1[];
extern  VTBL_ENTRY _ZTV7S4660C1[];
Class_Descriptor cd_S4660C1 = {  "S4660C1", // class name
  bases_S4660C1, 4,
  &(vtc_S4660C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(136,84), // object size
  NSPAIRA(_ZTI7S4660C1),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S4660C1),88, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  4, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20191C2  {
  short s20191c2f0:13;
  void *s20191c2f1;
  long double s20191c2f2[8];
  virtual void  v4(); // _ZN8S20191C22v4Ev
  virtual void  v5(); // _ZN8S20191C22v5Ev
  virtual void  v6(); // _ZN8S20191C22v6Ev
  virtual void  v7(); // _ZN8S20191C22v7Ev
  ~S20191C2(); // tgen
  S20191C2(); // tgen
};
//SIG(-1 S20191C2) C1{ v1 v2 v3 v4 Fs:13 Fp FD[8]}


void  S20191C2 ::v4(){vfunc_called(this, "_ZN8S20191C22v4Ev");}
void  S20191C2 ::v5(){vfunc_called(this, "_ZN8S20191C22v5Ev");}
void  S20191C2 ::v6(){vfunc_called(this, "_ZN8S20191C22v6Ev");}
void  S20191C2 ::v7(){vfunc_called(this, "_ZN8S20191C22v7Ev");}
S20191C2 ::~S20191C2(){ note_dtor("S20191C2", this);} // tgen
S20191C2 ::S20191C2(){ note_ctor("S20191C2", this);} // tgen

static void Test_S20191C2()
{
  extern Class_Descriptor cd_S20191C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(11,28)];
    init_test(&cd_S20191C2, buf);
    S20191C2 *dp, &lv = *(dp=new (buf) S20191C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(160,108), "sizeof(S20191C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20191C2)");
    set_bf_and_test(lv, s20191c2f0, ABISELECT(8,4), 0, 13, 1, "S20191C2");
    set_bf_and_test(lv, s20191c2f0, ABISELECT(8,4), 0, 13, hide_sll(1LL<<12), "S20191C2");
    check_field_offset(lv, s20191c2f1, ABISELECT(16,8), "S20191C2.s20191c2f1");
    check_field_offset(lv, s20191c2f2, ABISELECT(32,12), "S20191C2.s20191c2f2");
    test_class_info(&lv, &cd_S20191C2);
    dp->~S20191C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20191C2(Test_S20191C2, "S20191C2", ABISELECT(160,108));

#else // __cplusplus

extern void _ZN8S20191C2C1Ev();
extern void _ZN8S20191C2D1Ev();
Name_Map name_map_S20191C2[] = {
  NSPAIR(_ZN8S20191C2C1Ev),
  NSPAIR(_ZN8S20191C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20191C2[];
extern void _ZN8S20191C22v4Ev();
extern void _ZN8S20191C22v5Ev();
extern void _ZN8S20191C22v6Ev();
extern void _ZN8S20191C22v7Ev();
static  VTBL_ENTRY vtc_S20191C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20191C2[0]),
  (VTBL_ENTRY)&_ZN8S20191C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20191C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20191C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20191C22v7Ev,
};
extern VTBL_ENTRY _ZTI8S20191C2[];
extern  VTBL_ENTRY _ZTV8S20191C2[];
Class_Descriptor cd_S20191C2 = {  "S20191C2", // class name
  0,0,//no base classes
  &(vtc_S20191C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(160,108), // object size
  NSPAIRA(_ZTI8S20191C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20191C2),6, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20191C4  : S20191C2 {
  void *s20191c4f0[6];
  virtual void  v8(); // _ZN8S20191C42v8Ev
  virtual void  v9(); // _ZN8S20191C42v9Ev
  virtual void  v10(); // _ZN8S20191C43v10Ev
  ~S20191C4(); // tgen
  S20191C4(); // tgen
};
//SIG(-1 S20191C4) C1{ BC2{ v4 v5 v6 v7 Fs:13 Fp FD[8]} v1 v2 v3 Fp[6]}


void  S20191C4 ::v8(){vfunc_called(this, "_ZN8S20191C42v8Ev");}
void  S20191C4 ::v9(){vfunc_called(this, "_ZN8S20191C42v9Ev");}
void  S20191C4 ::v10(){vfunc_called(this, "_ZN8S20191C43v10Ev");}
S20191C4 ::~S20191C4(){ note_dtor("S20191C4", this);} // tgen
S20191C4 ::S20191C4(){ note_ctor("S20191C4", this);} // tgen

static void Test_S20191C4()
{
  extern Class_Descriptor cd_S20191C4;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(14,34)];
    init_test(&cd_S20191C4, buf);
    S20191C4 *dp, &lv = *(dp=new (buf) S20191C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(208,132), "sizeof(S20191C4)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20191C4)");
    check_base_class_offset(lv, (S20191C2*), 0, "S20191C4");
    check_field_offset(lv, s20191c4f0, ABISELECT(160,108), "S20191C4.s20191c4f0");
    test_class_info(&lv, &cd_S20191C4);
    dp->~S20191C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20191C4(Test_S20191C4, "S20191C4", ABISELECT(208,132));

#else // __cplusplus

extern void _ZN8S20191C4C1Ev();
extern void _ZN8S20191C4D1Ev();
Name_Map name_map_S20191C4[] = {
  NSPAIR(_ZN8S20191C4C1Ev),
  NSPAIR(_ZN8S20191C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20191C2;
extern VTBL_ENTRY _ZTI8S20191C2[];
extern  VTBL_ENTRY _ZTV8S20191C2[];
static Base_Class bases_S20191C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20191C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20191C4[];
extern void _ZN8S20191C22v4Ev();
extern void _ZN8S20191C22v5Ev();
extern void _ZN8S20191C22v6Ev();
extern void _ZN8S20191C22v7Ev();
extern void _ZN8S20191C42v8Ev();
extern void _ZN8S20191C42v9Ev();
extern void _ZN8S20191C43v10Ev();
static  VTBL_ENTRY vtc_S20191C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20191C4[0]),
  (VTBL_ENTRY)&_ZN8S20191C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20191C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20191C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20191C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20191C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20191C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20191C43v10Ev,
};
extern VTBL_ENTRY _ZTI8S20191C4[];
extern  VTBL_ENTRY _ZTV8S20191C4[];
Class_Descriptor cd_S20191C4 = {  "S20191C4", // class name
  bases_S20191C4, 1,
  &(vtc_S20191C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(208,132), // object size
  NSPAIRA(_ZTI8S20191C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S20191C4),9, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20191C3  : virtual S20191C2 , virtual S20191C4 {
  void *s20191c3f0[2];
  virtual void  v11(); // _ZN8S20191C33v11Ev
  virtual void  v12(); // _ZN8S20191C33v12Ev
  virtual void  v13(); // _ZN8S20191C33v13Ev
  virtual void  v14(); // _ZN8S20191C33v14Ev
  virtual void  v15(); // _ZN8S20191C33v15Ev
  ~S20191C3(); // tgen
  S20191C3(); // tgen
};
//SIG(-1 S20191C3) C1{ VBC2{ v6 v7 v8 v9 Fs:13 Fp FD[8]} VBC3{ BC2 v10 v11 v12 Fp[6]} v1 v2 v3 v4 v5 Fp[2]}


void  S20191C3 ::v11(){vfunc_called(this, "_ZN8S20191C33v11Ev");}
void  S20191C3 ::v12(){vfunc_called(this, "_ZN8S20191C33v12Ev");}
void  S20191C3 ::v13(){vfunc_called(this, "_ZN8S20191C33v13Ev");}
void  S20191C3 ::v14(){vfunc_called(this, "_ZN8S20191C33v14Ev");}
void  S20191C3 ::v15(){vfunc_called(this, "_ZN8S20191C33v15Ev");}
S20191C3 ::~S20191C3(){ note_dtor("S20191C3", this);} // tgen
S20191C3 ::S20191C3(){ note_ctor("S20191C3", this);} // tgen

static void Test_S20191C3()
{
  extern Class_Descriptor cd_S20191C3;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(26,64)];
    init_test(&cd_S20191C3, buf);
    S20191C3 *dp, &lv = *(dp=new (buf) S20191C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(400,252), "sizeof(S20191C3)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20191C3)");
    /*is_ambiguous_... S20191C3::S20191C2 */ AMB_check_base_class_offset(lv, (S20191C2*), ABISELECT(32,12), "S20191C3");
    check_base_class_offset(lv, (S20191C2*)(S20191C4*), ABISELECT(192,120), "S20191C3");
    check_base_class_offset(lv, (S20191C4*), ABISELECT(192,120), "S20191C3");
    check_field_offset(lv, s20191c3f0, ABISELECT(8,4), "S20191C3.s20191c3f0");
    test_class_info(&lv, &cd_S20191C3);
    dp->~S20191C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20191C3(Test_S20191C3, "S20191C3", ABISELECT(400,252));

#else // __cplusplus

extern void _ZN8S20191C3C1Ev();
extern void _ZN8S20191C3D1Ev();
Name_Map name_map_S20191C3[] = {
  NSPAIR(_ZN8S20191C3C1Ev),
  NSPAIR(_ZN8S20191C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20191C2;
extern VTBL_ENTRY _ZTI8S20191C2[];
extern  VTBL_ENTRY _ZTV8S20191C2[];
extern Class_Descriptor cd_S20191C2;
extern VTBL_ENTRY _ZTI8S20191C2[];
extern  VTBL_ENTRY _ZTV8S20191C2[];
extern Class_Descriptor cd_S20191C4;
extern VTBL_ENTRY _ZTI8S20191C4[];
extern  VTBL_ENTRY _ZTV8S20191C4[];
static Base_Class bases_S20191C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20191C2,    ABISELECT(32,12), //bcp->offset
    9, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20191C2,    ABISELECT(192,120), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S20191C4,    ABISELECT(192,120), //bcp->offset
    19, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20191C3[];
extern void _ZN8S20191C33v11Ev();
extern void _ZN8S20191C33v12Ev();
extern void _ZN8S20191C33v13Ev();
extern void _ZN8S20191C33v14Ev();
extern void _ZN8S20191C33v15Ev();
extern void _ZN8S20191C22v4Ev();
extern void _ZN8S20191C22v5Ev();
extern void _ZN8S20191C22v6Ev();
extern void _ZN8S20191C22v7Ev();
extern void _ZN8S20191C22v4Ev();
extern void _ZN8S20191C22v5Ev();
extern void _ZN8S20191C22v6Ev();
extern void _ZN8S20191C22v7Ev();
extern void _ZN8S20191C42v8Ev();
extern void _ZN8S20191C42v9Ev();
extern void _ZN8S20191C43v10Ev();
static  VTBL_ENTRY vtc_S20191C3[] = {
  ABISELECT(192,120),
  ABISELECT(32,12),
  0,
  (VTBL_ENTRY)&(_ZTI8S20191C3[0]),
  (VTBL_ENTRY)&_ZN8S20191C33v11Ev,
  (VTBL_ENTRY)&_ZN8S20191C33v12Ev,
  (VTBL_ENTRY)&_ZN8S20191C33v13Ev,
  (VTBL_ENTRY)&_ZN8S20191C33v14Ev,
  (VTBL_ENTRY)&_ZN8S20191C33v15Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-32,-12),
  (VTBL_ENTRY)&(_ZTI8S20191C3[0]),
  (VTBL_ENTRY)&_ZN8S20191C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20191C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20191C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20191C22v7Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-192,-120),
  (VTBL_ENTRY)&(_ZTI8S20191C3[0]),
  (VTBL_ENTRY)&_ZN8S20191C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20191C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20191C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20191C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20191C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20191C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20191C43v10Ev,
};
extern VTBL_ENTRY _ZTV8S20191C3[];
static  VTT_ENTRY vtt_S20191C3[] = {
  {&(_ZTV8S20191C3[4]),  4,35},
  {&(_ZTV8S20191C3[15]),  15,35},
  {&(_ZTV8S20191C3[28]),  28,35},
};
extern VTBL_ENTRY _ZTI8S20191C3[];
extern  VTBL_ENTRY _ZTV8S20191C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20191C3[];
Class_Descriptor cd_S20191C3 = {  "S20191C3", // class name
  bases_S20191C3, 3,
  &(vtc_S20191C3[0]), // expected_vtbl_contents
  &(vtt_S20191C3[0]), // expected_vtt_contents
  ABISELECT(400,252), // object size
  NSPAIRA(_ZTI8S20191C3),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20191C3),35, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20191C3),3, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20191C5  {
  ::S20191C4 s20191c5f0[7];
  virtual void  v30(); // _ZN8S20191C53v30Ev
  virtual void  v31(); // _ZN8S20191C53v31Ev
  virtual void  v32(); // _ZN8S20191C53v32Ev
  virtual void  v33(); // _ZN8S20191C53v33Ev
  virtual void  v34(); // _ZN8S20191C53v34Ev
  virtual void  v35(); // _ZN8S20191C53v35Ev
  virtual void  v36(); // _ZN8S20191C53v36Ev
  virtual void  v37(); // _ZN8S20191C53v37Ev
  virtual void  v38(); // _ZN8S20191C53v38Ev
  ~S20191C5(); // tgen
  S20191C5(); // tgen
};
//SIG(-1 S20191C5) C1{ v1 v2 v3 v4 v5 v6 v7 v8 v9 FC2{ BC3{ v13 v14 v15 v16 Fs:13 Fp FD[8]} v10 v11 v12 Fp[6]}[7]}


void  S20191C5 ::v30(){vfunc_called(this, "_ZN8S20191C53v30Ev");}
void  S20191C5 ::v31(){vfunc_called(this, "_ZN8S20191C53v31Ev");}
void  S20191C5 ::v32(){vfunc_called(this, "_ZN8S20191C53v32Ev");}
void  S20191C5 ::v33(){vfunc_called(this, "_ZN8S20191C53v33Ev");}
void  S20191C5 ::v34(){vfunc_called(this, "_ZN8S20191C53v34Ev");}
void  S20191C5 ::v35(){vfunc_called(this, "_ZN8S20191C53v35Ev");}
void  S20191C5 ::v36(){vfunc_called(this, "_ZN8S20191C53v36Ev");}
void  S20191C5 ::v37(){vfunc_called(this, "_ZN8S20191C53v37Ev");}
void  S20191C5 ::v38(){vfunc_called(this, "_ZN8S20191C53v38Ev");}
S20191C5 ::~S20191C5(){ note_dtor("S20191C5", this);} // tgen
S20191C5 ::S20191C5(){ note_ctor("S20191C5", this);} // tgen

static void Test_S20191C5()
{
  extern Class_Descriptor cd_S20191C5;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(93,233)];
    init_test(&cd_S20191C5, buf);
    S20191C5 *dp, &lv = *(dp=new (buf) S20191C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1472,928), "sizeof(S20191C5)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20191C5)");
    check_field_offset(lv, s20191c5f0, ABISELECT(16,4), "S20191C5.s20191c5f0");
    test_class_info(&lv, &cd_S20191C5);
    dp->~S20191C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20191C5(Test_S20191C5, "S20191C5", ABISELECT(1472,928));

#else // __cplusplus

extern void _ZN8S20191C5C1Ev();
extern void _ZN8S20191C5D1Ev();
Name_Map name_map_S20191C5[] = {
  NSPAIR(_ZN8S20191C5C1Ev),
  NSPAIR(_ZN8S20191C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20191C5[];
extern void _ZN8S20191C53v30Ev();
extern void _ZN8S20191C53v31Ev();
extern void _ZN8S20191C53v32Ev();
extern void _ZN8S20191C53v33Ev();
extern void _ZN8S20191C53v34Ev();
extern void _ZN8S20191C53v35Ev();
extern void _ZN8S20191C53v36Ev();
extern void _ZN8S20191C53v37Ev();
extern void _ZN8S20191C53v38Ev();
static  VTBL_ENTRY vtc_S20191C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20191C5[0]),
  (VTBL_ENTRY)&_ZN8S20191C53v30Ev,
  (VTBL_ENTRY)&_ZN8S20191C53v31Ev,
  (VTBL_ENTRY)&_ZN8S20191C53v32Ev,
  (VTBL_ENTRY)&_ZN8S20191C53v33Ev,
  (VTBL_ENTRY)&_ZN8S20191C53v34Ev,
  (VTBL_ENTRY)&_ZN8S20191C53v35Ev,
  (VTBL_ENTRY)&_ZN8S20191C53v36Ev,
  (VTBL_ENTRY)&_ZN8S20191C53v37Ev,
  (VTBL_ENTRY)&_ZN8S20191C53v38Ev,
};
extern VTBL_ENTRY _ZTI8S20191C5[];
extern  VTBL_ENTRY _ZTV8S20191C5[];
Class_Descriptor cd_S20191C5 = {  "S20191C5", // class name
  0,0,//no base classes
  &(vtc_S20191C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(1472,928), // object size
  NSPAIRA(_ZTI8S20191C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20191C5),11, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20191C7  {
  virtual void  v16(); // _ZN8S20191C73v16Ev
  virtual void  v17(); // _ZN8S20191C73v17Ev
  virtual void  v18(); // _ZN8S20191C73v18Ev
  virtual void  v19(); // _ZN8S20191C73v19Ev
  ~S20191C7(); // tgen
  S20191C7(); // tgen
};
//SIG(-1 S20191C7) C1{ v1 v2 v3 v4}


void  S20191C7 ::v16(){vfunc_called(this, "_ZN8S20191C73v16Ev");}
void  S20191C7 ::v17(){vfunc_called(this, "_ZN8S20191C73v17Ev");}
void  S20191C7 ::v18(){vfunc_called(this, "_ZN8S20191C73v18Ev");}
void  S20191C7 ::v19(){vfunc_called(this, "_ZN8S20191C73v19Ev");}
S20191C7 ::~S20191C7(){ note_dtor("S20191C7", this);} // tgen
S20191C7 ::S20191C7(){ note_ctor("S20191C7", this);} // tgen

static void Test_S20191C7()
{
  extern Class_Descriptor cd_S20191C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S20191C7, buf);
    S20191C7 *dp, &lv = *(dp=new (buf) S20191C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S20191C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20191C7)");
    test_class_info(&lv, &cd_S20191C7);
    dp->~S20191C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20191C7(Test_S20191C7, "S20191C7", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S20191C7C1Ev();
extern void _ZN8S20191C7D1Ev();
Name_Map name_map_S20191C7[] = {
  NSPAIR(_ZN8S20191C7C1Ev),
  NSPAIR(_ZN8S20191C7D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20191C7[];
extern void _ZN8S20191C73v16Ev();
extern void _ZN8S20191C73v17Ev();
extern void _ZN8S20191C73v18Ev();
extern void _ZN8S20191C73v19Ev();
static  VTBL_ENTRY vtc_S20191C7[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20191C7[0]),
  (VTBL_ENTRY)&_ZN8S20191C73v16Ev,
  (VTBL_ENTRY)&_ZN8S20191C73v17Ev,
  (VTBL_ENTRY)&_ZN8S20191C73v18Ev,
  (VTBL_ENTRY)&_ZN8S20191C73v19Ev,
};
extern VTBL_ENTRY _ZTI8S20191C7[];
extern  VTBL_ENTRY _ZTV8S20191C7[];
Class_Descriptor cd_S20191C7 = {  "S20191C7", // class name
  0,0,//no base classes
  &(vtc_S20191C7[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S20191C7),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20191C7),6, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20191C10  : virtual S20191C2 , S20191C4 {
  void *s20191c10f0;
  virtual void  v20(); // _ZN9S20191C103v20Ev
  virtual void  v21(); // _ZN9S20191C103v21Ev
  virtual void  v22(); // _ZN9S20191C103v22Ev
  virtual void  v23(); // _ZN9S20191C103v23Ev
  ~S20191C10(); // tgen
  S20191C10(); // tgen
};
//SIG(-1 S20191C10) C1{ VBC2{ v5 v6 v7 v8 Fs:13 Fp FD[8]} BC3{ BC2 v9 v10 v11 Fp[6]} v1 v2 v3 v4 Fp}


void  S20191C10 ::v20(){vfunc_called(this, "_ZN9S20191C103v20Ev");}
void  S20191C10 ::v21(){vfunc_called(this, "_ZN9S20191C103v21Ev");}
void  S20191C10 ::v22(){vfunc_called(this, "_ZN9S20191C103v22Ev");}
void  S20191C10 ::v23(){vfunc_called(this, "_ZN9S20191C103v23Ev");}
S20191C10 ::~S20191C10(){ note_dtor("S20191C10", this);} // tgen
S20191C10 ::S20191C10(){ note_ctor("S20191C10", this);} // tgen

static void Test_S20191C10()
{
  extern Class_Descriptor cd_S20191C10;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(25,62)];
    init_test(&cd_S20191C10, buf);
    S20191C10 *dp, &lv = *(dp=new (buf) S20191C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(384,244), "sizeof(S20191C10)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20191C10)");
    /*is_ambiguous_... S20191C10::S20191C2 */ AMB_check_base_class_offset(lv, (S20191C2*), ABISELECT(224,136), "S20191C10");
    check_base_class_offset(lv, (S20191C2*)(S20191C4*), 0, "S20191C10");
    check_base_class_offset(lv, (S20191C4*), 0, "S20191C10");
    check_field_offset(lv, s20191c10f0, ABISELECT(208,132), "S20191C10.s20191c10f0");
    test_class_info(&lv, &cd_S20191C10);
    dp->~S20191C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20191C10(Test_S20191C10, "S20191C10", ABISELECT(384,244));

#else // __cplusplus

extern void _ZN9S20191C10C1Ev();
extern void _ZN9S20191C10D1Ev();
Name_Map name_map_S20191C10[] = {
  NSPAIR(_ZN9S20191C10C1Ev),
  NSPAIR(_ZN9S20191C10D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20191C2;
extern VTBL_ENTRY _ZTI8S20191C2[];
extern  VTBL_ENTRY _ZTV8S20191C2[];
extern Class_Descriptor cd_S20191C2;
extern VTBL_ENTRY _ZTI8S20191C2[];
extern  VTBL_ENTRY _ZTV8S20191C2[];
extern Class_Descriptor cd_S20191C4;
extern VTBL_ENTRY _ZTI8S20191C4[];
extern  VTBL_ENTRY _ZTV8S20191C4[];
static Base_Class bases_S20191C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20191C2,    ABISELECT(224,136), //bcp->offset
    14, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20191C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S20191C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S20191C10[];
extern void _ZN8S20191C22v4Ev();
extern void _ZN8S20191C22v5Ev();
extern void _ZN8S20191C22v6Ev();
extern void _ZN8S20191C22v7Ev();
extern void _ZN8S20191C42v8Ev();
extern void _ZN8S20191C42v9Ev();
extern void _ZN8S20191C43v10Ev();
extern void _ZN9S20191C103v20Ev();
extern void _ZN9S20191C103v21Ev();
extern void _ZN9S20191C103v22Ev();
extern void _ZN9S20191C103v23Ev();
extern void _ZN8S20191C22v4Ev();
extern void _ZN8S20191C22v5Ev();
extern void _ZN8S20191C22v6Ev();
extern void _ZN8S20191C22v7Ev();
static  VTBL_ENTRY vtc_S20191C10[] = {
  ABISELECT(224,136),
  0,
  (VTBL_ENTRY)&(_ZTI9S20191C10[0]),
  (VTBL_ENTRY)&_ZN8S20191C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20191C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20191C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20191C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20191C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20191C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20191C43v10Ev,
  (VTBL_ENTRY)&_ZN9S20191C103v20Ev,
  (VTBL_ENTRY)&_ZN9S20191C103v21Ev,
  (VTBL_ENTRY)&_ZN9S20191C103v22Ev,
  (VTBL_ENTRY)&_ZN9S20191C103v23Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-224,-136),
  (VTBL_ENTRY)&(_ZTI9S20191C10[0]),
  (VTBL_ENTRY)&_ZN8S20191C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20191C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20191C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20191C22v7Ev,
};
extern VTBL_ENTRY _ZTV9S20191C10[];
static  VTT_ENTRY vtt_S20191C10[] = {
  {&(_ZTV9S20191C10[3]),  3,24},
  {&(_ZTV9S20191C10[20]),  20,24},
};
extern VTBL_ENTRY _ZTI9S20191C10[];
extern  VTBL_ENTRY _ZTV9S20191C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20191C10[];
Class_Descriptor cd_S20191C10 = {  "S20191C10", // class name
  bases_S20191C10, 3,
  &(vtc_S20191C10[0]), // expected_vtbl_contents
  &(vtt_S20191C10[0]), // expected_vtt_contents
  ABISELECT(384,244), // object size
  NSPAIRA(_ZTI9S20191C10),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV9S20191C10),24, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20191C10),2, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20191C9  : virtual S20191C3 , S20191C10 {
  __tsi64 s20191c9f0[5];
  ::S20956C14_nt s20191c9f1;
  long double s20191c9f2;
  virtual void  v24(); // _ZN8S20191C93v24Ev
  virtual void  v25(); // _ZN8S20191C93v25Ev
  virtual void  v26(); // _ZN8S20191C93v26Ev
  virtual void  v27(); // _ZN8S20191C93v27Ev
  ~S20191C9(); // tgen
  S20191C9(); // tgen
};
//SIG(-1 S20191C9) C1{ VBC2{ VBC3{ v5 v6 v7 v8 Fs:13 Fp FD[8]} VBC4{ BC3 v9 v10 v11 Fp[6]} v12 v13 v14 v15 v16 Fp[2]} BC5{ VBC3 BC4 v17 v18 v19 v20 Fp} v1 v2 v3 v4 FL[5] FC6{} FD}


void  S20191C9 ::v24(){vfunc_called(this, "_ZN8S20191C93v24Ev");}
void  S20191C9 ::v25(){vfunc_called(this, "_ZN8S20191C93v25Ev");}
void  S20191C9 ::v26(){vfunc_called(this, "_ZN8S20191C93v26Ev");}
void  S20191C9 ::v27(){vfunc_called(this, "_ZN8S20191C93v27Ev");}
S20191C9 ::~S20191C9(){ note_dtor("S20191C9", this);} // tgen
S20191C9 ::S20191C9(){ note_ctor("S20191C9", this);} // tgen

static void Test_S20191C9()
{
  extern Class_Descriptor cd_S20191C9;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(44,112)];
    init_test(&cd_S20191C9, buf);
    S20191C9 *dp, &lv = *(dp=new (buf) S20191C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(688,444), "sizeof(S20191C9)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20191C9)");
    /*is_ambiguous_... S20191C3::S20191C2 */ AMB_check_base_class_offset(lv, (S20191C2*)(S20191C3*), ABISELECT(320,204), "S20191C9");
    /*is_ambiguous_... S20191C10::S20191C2 */ AMB_check_base_class_offset(lv, (S20191C2*)(S20191C10*), ABISELECT(320,204), "S20191C9");
    /*is_ambiguous_... S20191C9::S20191C4 */ AMB_check_base_class_offset(lv, (S20191C2*)(S20191C4*), ABISELECT(480,312), "S20191C9");
    check_base_class_offset(lv, (S20191C4*)(S20191C3*), ABISELECT(480,312), "S20191C9");
    check_base_class_offset(lv, (S20191C3*), ABISELECT(288,192), "S20191C9");
    check_base_class_offset(lv, (S20191C2*)(S20191C4*)(S20191C10*), 0, "S20191C9");
    check_base_class_offset(lv, (S20191C4*)(S20191C10*), 0, "S20191C9");
    check_base_class_offset(lv, (S20191C10*), 0, "S20191C9");
    check_field_offset(lv, s20191c9f0, ABISELECT(216,136), "S20191C9.s20191c9f0");
    check_field_offset(lv, s20191c9f1, ABISELECT(256,176), "S20191C9.s20191c9f1");
    check_field_offset(lv, s20191c9f2, ABISELECT(272,180), "S20191C9.s20191c9f2");
    test_class_info(&lv, &cd_S20191C9);
    dp->~S20191C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20191C9(Test_S20191C9, "S20191C9", ABISELECT(688,444));

#else // __cplusplus

extern void _ZN8S20191C9C1Ev();
extern void _ZN8S20191C9D1Ev();
Name_Map name_map_S20191C9[] = {
  NSPAIR(_ZN8S20191C9C1Ev),
  NSPAIR(_ZN8S20191C9D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20191C2;
extern VTBL_ENTRY _ZTI8S20191C2[];
extern  VTBL_ENTRY _ZTV8S20191C2[];
extern Class_Descriptor cd_S20191C2;
extern VTBL_ENTRY _ZTI8S20191C2[];
extern  VTBL_ENTRY _ZTV8S20191C2[];
extern Class_Descriptor cd_S20191C4;
extern VTBL_ENTRY _ZTI8S20191C4[];
extern  VTBL_ENTRY _ZTV8S20191C4[];
extern Class_Descriptor cd_S20191C3;
extern VTBL_ENTRY _ZTI8S20191C3[];
extern  VTBL_ENTRY _ZTV8S20191C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20191C3[];
extern Class_Descriptor cd_S20191C2;
extern VTBL_ENTRY _ZTI8S20191C2[];
extern  VTBL_ENTRY _ZTV8S20191C2[];
extern Class_Descriptor cd_S20191C4;
extern VTBL_ENTRY _ZTI8S20191C4[];
extern  VTBL_ENTRY _ZTV8S20191C4[];
extern Class_Descriptor cd_S20191C10;
extern VTBL_ENTRY _ZTI9S20191C10[];
extern  VTBL_ENTRY _ZTV9S20191C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20191C10[];
static Base_Class bases_S20191C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20191C2,    ABISELECT(320,204), //bcp->offset
    34, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S20191C2,    ABISELECT(480,312), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S20191C4,    ABISELECT(480,312), //bcp->offset
    44, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S20191C3,    ABISELECT(288,192), //bcp->offset
    20, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20191C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S20191C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S20191C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20191C9[];
extern void _ZN8S20191C22v4Ev();
extern void _ZN8S20191C22v5Ev();
extern void _ZN8S20191C22v6Ev();
extern void _ZN8S20191C22v7Ev();
extern void _ZN8S20191C42v8Ev();
extern void _ZN8S20191C42v9Ev();
extern void _ZN8S20191C43v10Ev();
extern void _ZN9S20191C103v20Ev();
extern void _ZN9S20191C103v21Ev();
extern void _ZN9S20191C103v22Ev();
extern void _ZN9S20191C103v23Ev();
extern void _ZN8S20191C93v24Ev();
extern void _ZN8S20191C93v25Ev();
extern void _ZN8S20191C93v26Ev();
extern void _ZN8S20191C93v27Ev();
extern void _ZN8S20191C33v11Ev();
extern void _ZN8S20191C33v12Ev();
extern void _ZN8S20191C33v13Ev();
extern void _ZN8S20191C33v14Ev();
extern void _ZN8S20191C33v15Ev();
extern void _ZN8S20191C22v4Ev();
extern void _ZN8S20191C22v5Ev();
extern void _ZN8S20191C22v6Ev();
extern void _ZN8S20191C22v7Ev();
extern void _ZN8S20191C22v4Ev();
extern void _ZN8S20191C22v5Ev();
extern void _ZN8S20191C22v6Ev();
extern void _ZN8S20191C22v7Ev();
extern void _ZN8S20191C42v8Ev();
extern void _ZN8S20191C42v9Ev();
extern void _ZN8S20191C43v10Ev();
static  VTBL_ENTRY vtc_S20191C9[] = {
  ABISELECT(480,312),
  ABISELECT(288,192),
  ABISELECT(320,204),
  0,
  (VTBL_ENTRY)&(_ZTI8S20191C9[0]),
  (VTBL_ENTRY)&_ZN8S20191C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20191C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20191C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20191C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20191C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20191C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20191C43v10Ev,
  (VTBL_ENTRY)&_ZN9S20191C103v20Ev,
  (VTBL_ENTRY)&_ZN9S20191C103v21Ev,
  (VTBL_ENTRY)&_ZN9S20191C103v22Ev,
  (VTBL_ENTRY)&_ZN9S20191C103v23Ev,
  (VTBL_ENTRY)&_ZN8S20191C93v24Ev,
  (VTBL_ENTRY)&_ZN8S20191C93v25Ev,
  (VTBL_ENTRY)&_ZN8S20191C93v26Ev,
  (VTBL_ENTRY)&_ZN8S20191C93v27Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(192,120),
  ABISELECT(32,12),
  ABISELECT(-288,-192),
  (VTBL_ENTRY)&(_ZTI8S20191C9[0]),
  (VTBL_ENTRY)&_ZN8S20191C33v11Ev,
  (VTBL_ENTRY)&_ZN8S20191C33v12Ev,
  (VTBL_ENTRY)&_ZN8S20191C33v13Ev,
  (VTBL_ENTRY)&_ZN8S20191C33v14Ev,
  (VTBL_ENTRY)&_ZN8S20191C33v15Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-320,-204),
  (VTBL_ENTRY)&(_ZTI8S20191C9[0]),
  (VTBL_ENTRY)&_ZN8S20191C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20191C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20191C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20191C22v7Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-480,-312),
  (VTBL_ENTRY)&(_ZTI8S20191C9[0]),
  (VTBL_ENTRY)&_ZN8S20191C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20191C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20191C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20191C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20191C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20191C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20191C43v10Ev,
};
extern VTBL_ENTRY _ZTV8S20191C9[];
extern void _ZN8S20191C22v4Ev();
extern void _ZN8S20191C22v5Ev();
extern void _ZN8S20191C22v6Ev();
extern void _ZN8S20191C22v7Ev();
extern void _ZN8S20191C42v8Ev();
extern void _ZN8S20191C42v9Ev();
extern void _ZN8S20191C43v10Ev();
extern void _ZN9S20191C103v20Ev();
extern void _ZN9S20191C103v21Ev();
extern void _ZN9S20191C103v22Ev();
extern void _ZN9S20191C103v23Ev();
static  VTBL_ENTRY _tg__ZTV9S20191C10__8S20191C9[] = {
  ABISELECT(320,204),
  0,
  (VTBL_ENTRY)&(_ZTI9S20191C10[0]),
  (VTBL_ENTRY)&_ZN8S20191C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20191C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20191C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20191C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20191C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20191C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20191C43v10Ev,
  (VTBL_ENTRY)&_ZN9S20191C103v20Ev,
  (VTBL_ENTRY)&_ZN9S20191C103v21Ev,
  (VTBL_ENTRY)&_ZN9S20191C103v22Ev,
  (VTBL_ENTRY)&_ZN9S20191C103v23Ev,
};
extern void _ZN8S20191C22v4Ev();
extern void _ZN8S20191C22v5Ev();
extern void _ZN8S20191C22v6Ev();
extern void _ZN8S20191C22v7Ev();
static  VTBL_ENTRY _tg__ZTV8S20191C2__9S20191C10__8S20191C9[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-320,-204),
  (VTBL_ENTRY)&(_ZTI9S20191C10[0]),
  (VTBL_ENTRY)&_ZN8S20191C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20191C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20191C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20191C22v7Ev,
};
extern void _ZN8S20191C33v11Ev();
extern void _ZN8S20191C33v12Ev();
extern void _ZN8S20191C33v13Ev();
extern void _ZN8S20191C33v14Ev();
extern void _ZN8S20191C33v15Ev();
static  VTBL_ENTRY _tg__ZTV8S20191C3__8S20191C9[] = {
  ABISELECT(192,120),
  ABISELECT(32,12),
  0,
  (VTBL_ENTRY)&(_ZTI8S20191C3[0]),
  (VTBL_ENTRY)&_ZN8S20191C33v11Ev,
  (VTBL_ENTRY)&_ZN8S20191C33v12Ev,
  (VTBL_ENTRY)&_ZN8S20191C33v13Ev,
  (VTBL_ENTRY)&_ZN8S20191C33v14Ev,
  (VTBL_ENTRY)&_ZN8S20191C33v15Ev,
};
extern void _ZN8S20191C22v4Ev();
extern void _ZN8S20191C22v5Ev();
extern void _ZN8S20191C22v6Ev();
extern void _ZN8S20191C22v7Ev();
static  VTBL_ENTRY _tg__ZTV8S20191C2__8S20191C3__8S20191C9[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-32,-12),
  (VTBL_ENTRY)&(_ZTI8S20191C3[0]),
  (VTBL_ENTRY)&_ZN8S20191C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20191C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20191C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20191C22v7Ev,
};
extern void _ZN8S20191C22v4Ev();
extern void _ZN8S20191C22v5Ev();
extern void _ZN8S20191C22v6Ev();
extern void _ZN8S20191C22v7Ev();
extern void _ZN8S20191C42v8Ev();
extern void _ZN8S20191C42v9Ev();
extern void _ZN8S20191C43v10Ev();
static  VTBL_ENTRY _tg__ZTV8S20191C4__8S20191C3__8S20191C9[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-192,-120),
  (VTBL_ENTRY)&(_ZTI8S20191C3[0]),
  (VTBL_ENTRY)&_ZN8S20191C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20191C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20191C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20191C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20191C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20191C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20191C43v10Ev,
};
static  VTT_ENTRY vtt_S20191C9[] = {
  {&(_ZTV8S20191C9[5]),  5,60},
  {&(_tg__ZTV9S20191C10__8S20191C9[3]),  3,14},
  {&(_tg__ZTV8S20191C2__9S20191C10__8S20191C9[6]),  6,10},
  {&(_ZTV8S20191C9[29]),  29,60},
  {&(_ZTV8S20191C9[40]),  40,60},
  {&(_ZTV8S20191C9[53]),  53,60},
  {&(_tg__ZTV8S20191C3__8S20191C9[4]),  4,9},
  {&(_tg__ZTV8S20191C2__8S20191C3__8S20191C9[6]),  6,10},
  {&(_tg__ZTV8S20191C4__8S20191C3__8S20191C9[9]),  9,16},
};
extern VTBL_ENTRY _ZTI8S20191C9[];
extern  VTBL_ENTRY _ZTV8S20191C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20191C9[];
Class_Descriptor cd_S20191C9 = {  "S20191C9", // class name
  bases_S20191C9, 7,
  &(vtc_S20191C9[0]), // expected_vtbl_contents
  &(vtt_S20191C9[0]), // expected_vtt_contents
  ABISELECT(688,444), // object size
  NSPAIRA(_ZTI8S20191C9),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20191C9),60, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20191C9),9, //virtual table table var
  7, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20191C8  : virtual S20191C9 {
  virtual  ~S20191C8(); // _ZN8S20191C8D2Ev
  virtual void  v28(); // _ZN8S20191C83v28Ev
  virtual void  v29(); // _ZN8S20191C83v29Ev
  S20191C8(); // tgen
};
//SIG(-1 S20191C8) C1{ VBC2{ VBC3{ VBC4{ v3 v4 v5 v6 Fs:13 Fp FD[8]} VBC5{ BC4 v7 v8 v9 Fp[6]} v10 v11 v12 v13 v14 Fp[2]} BC6{ VBC4 BC5 v15 v16 v17 v18 Fp} v19 v20 v21 v22 FL[5] FC7{} FD} vd v1 v2}


 S20191C8 ::~S20191C8(){ note_dtor("S20191C8", this);}
void  S20191C8 ::v28(){vfunc_called(this, "_ZN8S20191C83v28Ev");}
void  S20191C8 ::v29(){vfunc_called(this, "_ZN8S20191C83v29Ev");}
S20191C8 ::S20191C8(){ note_ctor("S20191C8", this);} // tgen

static void Test_S20191C8()
{
  extern Class_Descriptor cd_S20191C8;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(45,113)];
    init_test(&cd_S20191C8, buf);
    S20191C8 *dp, &lv = *(dp=new (buf) S20191C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(704,448), "sizeof(S20191C8)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20191C8)");
    /*is_ambiguous_... S20191C3::S20191C2 */ AMB_check_base_class_offset(lv, (S20191C2*)(S20191C3*), ABISELECT(336,208), "S20191C8");
    /*is_ambiguous_... S20191C10::S20191C2 */ AMB_check_base_class_offset(lv, (S20191C2*)(S20191C10*)(S20191C9*), ABISELECT(336,208), "S20191C8");
    /*is_ambiguous_... S20191C8::S20191C4 */ AMB_check_base_class_offset(lv, (S20191C2*)(S20191C4*), ABISELECT(496,316), "S20191C8");
    check_base_class_offset(lv, (S20191C4*)(S20191C3*), ABISELECT(496,316), "S20191C8");
    check_base_class_offset(lv, (S20191C3*)(S20191C9*), ABISELECT(304,196), "S20191C8");
    check_base_class_offset(lv, (S20191C2*)(S20191C4*)(S20191C10*)(S20191C9*), ABISELECT(16,4), "S20191C8");
    check_base_class_offset(lv, (S20191C4*)(S20191C10*)(S20191C9*), ABISELECT(16,4), "S20191C8");
    check_base_class_offset(lv, (S20191C10*)(S20191C9*), ABISELECT(16,4), "S20191C8");
    check_base_class_offset(lv, (S20191C9*), ABISELECT(16,4), "S20191C8");
    test_class_info(&lv, &cd_S20191C8);
    dp->~S20191C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20191C8(Test_S20191C8, "S20191C8", ABISELECT(704,448));

#else // __cplusplus

extern void _ZN8S20191C8C1Ev();
extern void _ZN8S20191C8D2Ev();
Name_Map name_map_S20191C8[] = {
  NSPAIR(_ZN8S20191C8C1Ev),
  NSPAIR(_ZN8S20191C8D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20191C2;
extern VTBL_ENTRY _ZTI8S20191C2[];
extern  VTBL_ENTRY _ZTV8S20191C2[];
extern Class_Descriptor cd_S20191C2;
extern VTBL_ENTRY _ZTI8S20191C2[];
extern  VTBL_ENTRY _ZTV8S20191C2[];
extern Class_Descriptor cd_S20191C4;
extern VTBL_ENTRY _ZTI8S20191C4[];
extern  VTBL_ENTRY _ZTV8S20191C4[];
extern Class_Descriptor cd_S20191C3;
extern VTBL_ENTRY _ZTI8S20191C3[];
extern  VTBL_ENTRY _ZTV8S20191C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20191C3[];
extern Class_Descriptor cd_S20191C2;
extern VTBL_ENTRY _ZTI8S20191C2[];
extern  VTBL_ENTRY _ZTV8S20191C2[];
extern Class_Descriptor cd_S20191C4;
extern VTBL_ENTRY _ZTI8S20191C4[];
extern  VTBL_ENTRY _ZTV8S20191C4[];
extern Class_Descriptor cd_S20191C10;
extern VTBL_ENTRY _ZTI9S20191C10[];
extern  VTBL_ENTRY _ZTV9S20191C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20191C10[];
extern Class_Descriptor cd_S20191C9;
extern VTBL_ENTRY _ZTI8S20191C9[];
extern  VTBL_ENTRY _ZTV8S20191C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20191C9[];
static Base_Class bases_S20191C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20191C2,    ABISELECT(336,208), //bcp->offset
    59, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S20191C2,    ABISELECT(496,316), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S20191C4,    ABISELECT(496,316), //bcp->offset
    69, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S20191C3,    ABISELECT(304,196), //bcp->offset
    45, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S20191C2,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S20191C4,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S20191C10,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S20191C9,    ABISELECT(16,4), //bcp->offset
    10, //bcp->virtual_function_table_offset
    20, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20191C8[];
extern void _ZN8S20191C8D1Ev();
extern void _ZN8S20191C8D0Ev();
extern void _ZN8S20191C83v28Ev();
extern void _ZN8S20191C83v29Ev();
extern void _ZN8S20191C22v4Ev();
extern void _ZN8S20191C22v5Ev();
extern void _ZN8S20191C22v6Ev();
extern void _ZN8S20191C22v7Ev();
extern void _ZN8S20191C42v8Ev();
extern void _ZN8S20191C42v9Ev();
extern void _ZN8S20191C43v10Ev();
extern void _ZN9S20191C103v20Ev();
extern void _ZN9S20191C103v21Ev();
extern void _ZN9S20191C103v22Ev();
extern void _ZN9S20191C103v23Ev();
extern void _ZN8S20191C93v24Ev();
extern void _ZN8S20191C93v25Ev();
extern void _ZN8S20191C93v26Ev();
extern void _ZN8S20191C93v27Ev();
extern void _ZN8S20191C33v11Ev();
extern void _ZN8S20191C33v12Ev();
extern void _ZN8S20191C33v13Ev();
extern void _ZN8S20191C33v14Ev();
extern void _ZN8S20191C33v15Ev();
extern void _ZN8S20191C22v4Ev();
extern void _ZN8S20191C22v5Ev();
extern void _ZN8S20191C22v6Ev();
extern void _ZN8S20191C22v7Ev();
extern void _ZN8S20191C22v4Ev();
extern void _ZN8S20191C22v5Ev();
extern void _ZN8S20191C22v6Ev();
extern void _ZN8S20191C22v7Ev();
extern void _ZN8S20191C42v8Ev();
extern void _ZN8S20191C42v9Ev();
extern void _ZN8S20191C43v10Ev();
static  VTBL_ENTRY vtc_S20191C8[] = {
  ABISELECT(496,316),
  ABISELECT(336,208),
  ABISELECT(304,196),
  ABISELECT(16,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S20191C8[0]),
  (VTBL_ENTRY)&_ZN8S20191C8D1Ev,
  (VTBL_ENTRY)&_ZN8S20191C8D0Ev,
  (VTBL_ENTRY)&_ZN8S20191C83v28Ev,
  (VTBL_ENTRY)&_ZN8S20191C83v29Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(480,312),
  ABISELECT(288,192),
  ABISELECT(320,204),
  ABISELECT(-16,-4),
  (VTBL_ENTRY)&(_ZTI8S20191C8[0]),
  (VTBL_ENTRY)&_ZN8S20191C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20191C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20191C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20191C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20191C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20191C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20191C43v10Ev,
  (VTBL_ENTRY)&_ZN9S20191C103v20Ev,
  (VTBL_ENTRY)&_ZN9S20191C103v21Ev,
  (VTBL_ENTRY)&_ZN9S20191C103v22Ev,
  (VTBL_ENTRY)&_ZN9S20191C103v23Ev,
  (VTBL_ENTRY)&_ZN8S20191C93v24Ev,
  (VTBL_ENTRY)&_ZN8S20191C93v25Ev,
  (VTBL_ENTRY)&_ZN8S20191C93v26Ev,
  (VTBL_ENTRY)&_ZN8S20191C93v27Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(192,120),
  ABISELECT(32,12),
  ABISELECT(-304,-196),
  (VTBL_ENTRY)&(_ZTI8S20191C8[0]),
  (VTBL_ENTRY)&_ZN8S20191C33v11Ev,
  (VTBL_ENTRY)&_ZN8S20191C33v12Ev,
  (VTBL_ENTRY)&_ZN8S20191C33v13Ev,
  (VTBL_ENTRY)&_ZN8S20191C33v14Ev,
  (VTBL_ENTRY)&_ZN8S20191C33v15Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-336,-208),
  (VTBL_ENTRY)&(_ZTI8S20191C8[0]),
  (VTBL_ENTRY)&_ZN8S20191C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20191C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20191C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20191C22v7Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-496,-316),
  (VTBL_ENTRY)&(_ZTI8S20191C8[0]),
  (VTBL_ENTRY)&_ZN8S20191C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20191C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20191C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20191C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20191C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20191C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20191C43v10Ev,
};
extern VTBL_ENTRY _ZTV8S20191C8[];
extern void _ZN8S20191C22v4Ev();
extern void _ZN8S20191C22v5Ev();
extern void _ZN8S20191C22v6Ev();
extern void _ZN8S20191C22v7Ev();
extern void _ZN8S20191C42v8Ev();
extern void _ZN8S20191C42v9Ev();
extern void _ZN8S20191C43v10Ev();
extern void _ZN9S20191C103v20Ev();
extern void _ZN9S20191C103v21Ev();
extern void _ZN9S20191C103v22Ev();
extern void _ZN9S20191C103v23Ev();
extern void _ZN8S20191C93v24Ev();
extern void _ZN8S20191C93v25Ev();
extern void _ZN8S20191C93v26Ev();
extern void _ZN8S20191C93v27Ev();
static  VTBL_ENTRY _tg__ZTV8S20191C9__8S20191C8[] = {
  ABISELECT(480,312),
  ABISELECT(288,192),
  ABISELECT(320,204),
  0,
  (VTBL_ENTRY)&(_ZTI8S20191C9[0]),
  (VTBL_ENTRY)&_ZN8S20191C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20191C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20191C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20191C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20191C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20191C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20191C43v10Ev,
  (VTBL_ENTRY)&_ZN9S20191C103v20Ev,
  (VTBL_ENTRY)&_ZN9S20191C103v21Ev,
  (VTBL_ENTRY)&_ZN9S20191C103v22Ev,
  (VTBL_ENTRY)&_ZN9S20191C103v23Ev,
  (VTBL_ENTRY)&_ZN8S20191C93v24Ev,
  (VTBL_ENTRY)&_ZN8S20191C93v25Ev,
  (VTBL_ENTRY)&_ZN8S20191C93v26Ev,
  (VTBL_ENTRY)&_ZN8S20191C93v27Ev,
};
extern void _ZN8S20191C22v4Ev();
extern void _ZN8S20191C22v5Ev();
extern void _ZN8S20191C22v6Ev();
extern void _ZN8S20191C22v7Ev();
extern void _ZN8S20191C42v8Ev();
extern void _ZN8S20191C42v9Ev();
extern void _ZN8S20191C43v10Ev();
extern void _ZN9S20191C103v20Ev();
extern void _ZN9S20191C103v21Ev();
extern void _ZN9S20191C103v22Ev();
extern void _ZN9S20191C103v23Ev();
static  VTBL_ENTRY _tg__ZTV9S20191C108S20191C9__8S20191C8[] = {
  ABISELECT(320,204),
  0,
  (VTBL_ENTRY)&(_ZTI9S20191C10[0]),
  (VTBL_ENTRY)&_ZN8S20191C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20191C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20191C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20191C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20191C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20191C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20191C43v10Ev,
  (VTBL_ENTRY)&_ZN9S20191C103v20Ev,
  (VTBL_ENTRY)&_ZN9S20191C103v21Ev,
  (VTBL_ENTRY)&_ZN9S20191C103v22Ev,
  (VTBL_ENTRY)&_ZN9S20191C103v23Ev,
};
extern void _ZN8S20191C22v4Ev();
extern void _ZN8S20191C22v5Ev();
extern void _ZN8S20191C22v6Ev();
extern void _ZN8S20191C22v7Ev();
static  VTBL_ENTRY _tg__ZTV8S20191C2__9S20191C108S20191C9__8S20191C8[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-320,-204),
  (VTBL_ENTRY)&(_ZTI9S20191C10[0]),
  (VTBL_ENTRY)&_ZN8S20191C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20191C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20191C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20191C22v7Ev,
};
extern void _ZN8S20191C33v11Ev();
extern void _ZN8S20191C33v12Ev();
extern void _ZN8S20191C33v13Ev();
extern void _ZN8S20191C33v14Ev();
extern void _ZN8S20191C33v15Ev();
static  VTBL_ENTRY _tg__ZTV8S20191C3__8S20191C9__8S20191C8[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(192,120),
  ABISELECT(32,12),
  ABISELECT(-288,-192),
  (VTBL_ENTRY)&(_ZTI8S20191C9[0]),
  (VTBL_ENTRY)&_ZN8S20191C33v11Ev,
  (VTBL_ENTRY)&_ZN8S20191C33v12Ev,
  (VTBL_ENTRY)&_ZN8S20191C33v13Ev,
  (VTBL_ENTRY)&_ZN8S20191C33v14Ev,
  (VTBL_ENTRY)&_ZN8S20191C33v15Ev,
};
extern void _ZN8S20191C22v4Ev();
extern void _ZN8S20191C22v5Ev();
extern void _ZN8S20191C22v6Ev();
extern void _ZN8S20191C22v7Ev();
static  VTBL_ENTRY _tg__ZTV8S20191C2__8S20191C9__8S20191C8[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-320,-204),
  (VTBL_ENTRY)&(_ZTI8S20191C9[0]),
  (VTBL_ENTRY)&_ZN8S20191C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20191C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20191C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20191C22v7Ev,
};
extern void _ZN8S20191C22v4Ev();
extern void _ZN8S20191C22v5Ev();
extern void _ZN8S20191C22v6Ev();
extern void _ZN8S20191C22v7Ev();
extern void _ZN8S20191C42v8Ev();
extern void _ZN8S20191C42v9Ev();
extern void _ZN8S20191C43v10Ev();
static  VTBL_ENTRY _tg__ZTV8S20191C4__8S20191C9__8S20191C8[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-480,-312),
  (VTBL_ENTRY)&(_ZTI8S20191C9[0]),
  (VTBL_ENTRY)&_ZN8S20191C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20191C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20191C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20191C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20191C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20191C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20191C43v10Ev,
};
extern void _ZN8S20191C33v11Ev();
extern void _ZN8S20191C33v12Ev();
extern void _ZN8S20191C33v13Ev();
extern void _ZN8S20191C33v14Ev();
extern void _ZN8S20191C33v15Ev();
static  VTBL_ENTRY _tg__ZTV8S20191C3__8S20191C8[] = {
  ABISELECT(192,120),
  ABISELECT(32,12),
  0,
  (VTBL_ENTRY)&(_ZTI8S20191C3[0]),
  (VTBL_ENTRY)&_ZN8S20191C33v11Ev,
  (VTBL_ENTRY)&_ZN8S20191C33v12Ev,
  (VTBL_ENTRY)&_ZN8S20191C33v13Ev,
  (VTBL_ENTRY)&_ZN8S20191C33v14Ev,
  (VTBL_ENTRY)&_ZN8S20191C33v15Ev,
};
extern void _ZN8S20191C22v4Ev();
extern void _ZN8S20191C22v5Ev();
extern void _ZN8S20191C22v6Ev();
extern void _ZN8S20191C22v7Ev();
static  VTBL_ENTRY _tg__ZTV8S20191C2__8S20191C3__8S20191C8[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-32,-12),
  (VTBL_ENTRY)&(_ZTI8S20191C3[0]),
  (VTBL_ENTRY)&_ZN8S20191C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20191C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20191C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20191C22v7Ev,
};
extern void _ZN8S20191C22v4Ev();
extern void _ZN8S20191C22v5Ev();
extern void _ZN8S20191C22v6Ev();
extern void _ZN8S20191C22v7Ev();
extern void _ZN8S20191C42v8Ev();
extern void _ZN8S20191C42v9Ev();
extern void _ZN8S20191C43v10Ev();
static  VTBL_ENTRY _tg__ZTV8S20191C4__8S20191C3__8S20191C8[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-192,-120),
  (VTBL_ENTRY)&(_ZTI8S20191C3[0]),
  (VTBL_ENTRY)&_ZN8S20191C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20191C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20191C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20191C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20191C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20191C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20191C43v10Ev,
};
static  VTT_ENTRY vtt_S20191C8[] = {
  {&(_ZTV8S20191C8[6]),  6,85},
  {&(_ZTV8S20191C8[30]),  30,85},
  {&(_ZTV8S20191C8[54]),  54,85},
  {&(_ZTV8S20191C8[65]),  65,85},
  {&(_ZTV8S20191C8[78]),  78,85},
  {&(_tg__ZTV8S20191C9__8S20191C8[5]),  5,20},
  {&(_tg__ZTV9S20191C108S20191C9__8S20191C8[3]),  3,14},
  {&(_tg__ZTV8S20191C2__9S20191C108S20191C9__8S20191C8[6]),  6,10},
  {&(_tg__ZTV8S20191C3__8S20191C9__8S20191C8[9]),  9,14},
  {&(_tg__ZTV8S20191C2__8S20191C9__8S20191C8[6]),  6,10},
  {&(_tg__ZTV8S20191C4__8S20191C9__8S20191C8[9]),  9,16},
  {&(_tg__ZTV8S20191C3__8S20191C8[4]),  4,9},
  {&(_tg__ZTV8S20191C2__8S20191C3__8S20191C8[6]),  6,10},
  {&(_tg__ZTV8S20191C4__8S20191C3__8S20191C8[9]),  9,16},
};
extern VTBL_ENTRY _ZTI8S20191C8[];
extern  VTBL_ENTRY _ZTV8S20191C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20191C8[];
Class_Descriptor cd_S20191C8 = {  "S20191C8", // class name
  bases_S20191C8, 8,
  &(vtc_S20191C8[0]), // expected_vtbl_contents
  &(vtt_S20191C8[0]), // expected_vtt_contents
  ABISELECT(704,448), // object size
  NSPAIRA(_ZTI8S20191C8),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S20191C8),85, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20191C8),14, //virtual table table var
  8, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20191C12  : virtual S20191C2 , virtual S20191C3 , virtual S20191C5 , S20191C4 {
  int s20191c12f0;
  virtual  ~S20191C12(); // _ZN9S20191C12D2Ev
  virtual void  v39(); // _ZN9S20191C123v39Ev
  virtual void  v40(); // _ZN9S20191C123v40Ev
  virtual void  v41(); // _ZN9S20191C123v41Ev
  virtual void  v42(); // _ZN9S20191C123v42Ev
  S20191C12(); // tgen
};
//SIG(-1 S20191C12) C1{ VBC2{ v5 v6 v7 v8 Fs:13 Fp FD[8]} VBC3{ VBC2 VBC4{ BC2 v9 v10 v11 Fp[6]} v12 v13 v14 v15 v16 Fp[2]} VBC5{ v17 v18 v19 v20 v21 v22 v23 v24 v25 FC4[7]} BC4 vd v1 v2 v3 v4 Fi}


 S20191C12 ::~S20191C12(){ note_dtor("S20191C12", this);}
void  S20191C12 ::v39(){vfunc_called(this, "_ZN9S20191C123v39Ev");}
void  S20191C12 ::v40(){vfunc_called(this, "_ZN9S20191C123v40Ev");}
void  S20191C12 ::v41(){vfunc_called(this, "_ZN9S20191C123v41Ev");}
void  S20191C12 ::v42(){vfunc_called(this, "_ZN9S20191C123v42Ev");}
S20191C12 ::S20191C12(){ note_ctor("S20191C12", this);} // tgen

static void Test_S20191C12()
{
  extern Class_Descriptor cd_S20191C12;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(132,330)];
    init_test(&cd_S20191C12, buf);
    S20191C12 *dp, &lv = *(dp=new (buf) S20191C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(2096,1316), "sizeof(S20191C12)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20191C12)");
    /*is_ambiguous_... S20191C12::S20191C2 */ AMB_check_base_class_offset(lv, (S20191C2*), ABISELECT(224,136), "S20191C12");
    /*is_ambiguous_... S20191C3::S20191C2 */ AMB_check_base_class_offset(lv, (S20191C2*)(S20191C3*), ABISELECT(224,136), "S20191C12");
    /*is_ambiguous_... S20191C12::S20191C4 */ AMB_check_base_class_offset(lv, (S20191C2*)(S20191C4*), ABISELECT(416,256), "S20191C12");
    check_base_class_offset(lv, (S20191C4*)(S20191C3*), ABISELECT(416,256), "S20191C12");
    check_base_class_offset(lv, (S20191C3*), ABISELECT(384,244), "S20191C12");
    check_base_class_offset(lv, (S20191C5*), ABISELECT(624,388), "S20191C12");
    /*is_ambiguous_... S20191C12::S20191C4 */ AMB_check_base_class_offset(lv, (S20191C2*)(S20191C4*), 0, "S20191C12");
    /*is_ambiguous_... S20191C12::S20191C4 */ AMB_check_base_class_offset(lv, (S20191C4*), 0, "S20191C12");
    check_field_offset(lv, s20191c12f0, ABISELECT(208,132), "S20191C12.s20191c12f0");
    test_class_info(&lv, &cd_S20191C12);
    dp->~S20191C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20191C12(Test_S20191C12, "S20191C12", ABISELECT(2096,1316));

#else // __cplusplus

extern void _ZN9S20191C12C1Ev();
extern void _ZN9S20191C12D2Ev();
Name_Map name_map_S20191C12[] = {
  NSPAIR(_ZN9S20191C12C1Ev),
  NSPAIR(_ZN9S20191C12D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20191C2;
extern VTBL_ENTRY _ZTI8S20191C2[];
extern  VTBL_ENTRY _ZTV8S20191C2[];
extern Class_Descriptor cd_S20191C2;
extern VTBL_ENTRY _ZTI8S20191C2[];
extern  VTBL_ENTRY _ZTV8S20191C2[];
extern Class_Descriptor cd_S20191C4;
extern VTBL_ENTRY _ZTI8S20191C4[];
extern  VTBL_ENTRY _ZTV8S20191C4[];
extern Class_Descriptor cd_S20191C3;
extern VTBL_ENTRY _ZTI8S20191C3[];
extern  VTBL_ENTRY _ZTV8S20191C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20191C3[];
extern Class_Descriptor cd_S20191C5;
extern VTBL_ENTRY _ZTI8S20191C5[];
extern  VTBL_ENTRY _ZTV8S20191C5[];
extern Class_Descriptor cd_S20191C2;
extern VTBL_ENTRY _ZTI8S20191C2[];
extern  VTBL_ENTRY _ZTV8S20191C2[];
extern Class_Descriptor cd_S20191C4;
extern VTBL_ENTRY _ZTI8S20191C4[];
extern  VTBL_ENTRY _ZTV8S20191C4[];
static Base_Class bases_S20191C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20191C2,    ABISELECT(224,136), //bcp->offset
    19, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20191C2,    ABISELECT(416,256), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S20191C4,    ABISELECT(416,256), //bcp->offset
    43, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S20191C3,    ABISELECT(384,244), //bcp->offset
    29, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20191C5,    ABISELECT(624,388), //bcp->offset
    59, //bcp->virtual_function_table_offset
    11, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20191C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S20191C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S20191C12[];
extern void _ZN8S20191C22v4Ev();
extern void _ZN8S20191C22v5Ev();
extern void _ZN8S20191C22v6Ev();
extern void _ZN8S20191C22v7Ev();
extern void _ZN8S20191C42v8Ev();
extern void _ZN8S20191C42v9Ev();
extern void _ZN8S20191C43v10Ev();
extern void _ZN9S20191C12D1Ev();
extern void _ZN9S20191C12D0Ev();
extern void _ZN9S20191C123v39Ev();
extern void _ZN9S20191C123v40Ev();
extern void _ZN9S20191C123v41Ev();
extern void _ZN9S20191C123v42Ev();
extern void _ZN8S20191C22v4Ev();
extern void _ZN8S20191C22v5Ev();
extern void _ZN8S20191C22v6Ev();
extern void _ZN8S20191C22v7Ev();
extern void _ZN8S20191C33v11Ev();
extern void _ZN8S20191C33v12Ev();
extern void _ZN8S20191C33v13Ev();
extern void _ZN8S20191C33v14Ev();
extern void _ZN8S20191C33v15Ev();
extern void _ZN8S20191C22v4Ev();
extern void _ZN8S20191C22v5Ev();
extern void _ZN8S20191C22v6Ev();
extern void _ZN8S20191C22v7Ev();
extern void _ZN8S20191C42v8Ev();
extern void _ZN8S20191C42v9Ev();
extern void _ZN8S20191C43v10Ev();
extern void _ZN8S20191C53v30Ev();
extern void _ZN8S20191C53v31Ev();
extern void _ZN8S20191C53v32Ev();
extern void _ZN8S20191C53v33Ev();
extern void _ZN8S20191C53v34Ev();
extern void _ZN8S20191C53v35Ev();
extern void _ZN8S20191C53v36Ev();
extern void _ZN8S20191C53v37Ev();
extern void _ZN8S20191C53v38Ev();
static  VTBL_ENTRY vtc_S20191C12[] = {
  ABISELECT(624,388),
  ABISELECT(416,256),
  ABISELECT(384,244),
  ABISELECT(224,136),
  0,
  (VTBL_ENTRY)&(_ZTI9S20191C12[0]),
  (VTBL_ENTRY)&_ZN8S20191C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20191C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20191C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20191C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20191C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20191C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20191C43v10Ev,
  (VTBL_ENTRY)&_ZN9S20191C12D1Ev,
  (VTBL_ENTRY)&_ZN9S20191C12D0Ev,
  (VTBL_ENTRY)&_ZN9S20191C123v39Ev,
  (VTBL_ENTRY)&_ZN9S20191C123v40Ev,
  (VTBL_ENTRY)&_ZN9S20191C123v41Ev,
  (VTBL_ENTRY)&_ZN9S20191C123v42Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-224,-136),
  (VTBL_ENTRY)&(_ZTI9S20191C12[0]),
  (VTBL_ENTRY)&_ZN8S20191C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20191C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20191C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20191C22v7Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(32,12),
  ABISELECT(-160,-108),
  ABISELECT(-384,-244),
  (VTBL_ENTRY)&(_ZTI9S20191C12[0]),
  (VTBL_ENTRY)&_ZN8S20191C33v11Ev,
  (VTBL_ENTRY)&_ZN8S20191C33v12Ev,
  (VTBL_ENTRY)&_ZN8S20191C33v13Ev,
  (VTBL_ENTRY)&_ZN8S20191C33v14Ev,
  (VTBL_ENTRY)&_ZN8S20191C33v15Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-416,-256),
  (VTBL_ENTRY)&(_ZTI9S20191C12[0]),
  (VTBL_ENTRY)&_ZN8S20191C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20191C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20191C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20191C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20191C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20191C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20191C43v10Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-624,-388),
  (VTBL_ENTRY)&(_ZTI9S20191C12[0]),
  (VTBL_ENTRY)&_ZN8S20191C53v30Ev,
  (VTBL_ENTRY)&_ZN8S20191C53v31Ev,
  (VTBL_ENTRY)&_ZN8S20191C53v32Ev,
  (VTBL_ENTRY)&_ZN8S20191C53v33Ev,
  (VTBL_ENTRY)&_ZN8S20191C53v34Ev,
  (VTBL_ENTRY)&_ZN8S20191C53v35Ev,
  (VTBL_ENTRY)&_ZN8S20191C53v36Ev,
  (VTBL_ENTRY)&_ZN8S20191C53v37Ev,
  (VTBL_ENTRY)&_ZN8S20191C53v38Ev,
};
extern VTBL_ENTRY _ZTV9S20191C12[];
extern void _ZN8S20191C33v11Ev();
extern void _ZN8S20191C33v12Ev();
extern void _ZN8S20191C33v13Ev();
extern void _ZN8S20191C33v14Ev();
extern void _ZN8S20191C33v15Ev();
static  VTBL_ENTRY _tg__ZTV8S20191C3__9S20191C12[] = {
  ABISELECT(32,12),
  ABISELECT(-160,-108),
  0,
  (VTBL_ENTRY)&(_ZTI8S20191C3[0]),
  (VTBL_ENTRY)&_ZN8S20191C33v11Ev,
  (VTBL_ENTRY)&_ZN8S20191C33v12Ev,
  (VTBL_ENTRY)&_ZN8S20191C33v13Ev,
  (VTBL_ENTRY)&_ZN8S20191C33v14Ev,
  (VTBL_ENTRY)&_ZN8S20191C33v15Ev,
};
extern void _ZN8S20191C22v4Ev();
extern void _ZN8S20191C22v5Ev();
extern void _ZN8S20191C22v6Ev();
extern void _ZN8S20191C22v7Ev();
static  VTBL_ENTRY _tg__ZTV8S20191C2__8S20191C3__9S20191C12[] = {
  0,
  0,
  0,
  0,
  ABISELECT(160,108),
  (VTBL_ENTRY)&(_ZTI8S20191C3[0]),
  (VTBL_ENTRY)&_ZN8S20191C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20191C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20191C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20191C22v7Ev,
};
extern void _ZN8S20191C22v4Ev();
extern void _ZN8S20191C22v5Ev();
extern void _ZN8S20191C22v6Ev();
extern void _ZN8S20191C22v7Ev();
extern void _ZN8S20191C42v8Ev();
extern void _ZN8S20191C42v9Ev();
extern void _ZN8S20191C43v10Ev();
static  VTBL_ENTRY _tg__ZTV8S20191C4__8S20191C3__9S20191C12[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-32,-12),
  (VTBL_ENTRY)&(_ZTI8S20191C3[0]),
  (VTBL_ENTRY)&_ZN8S20191C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20191C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20191C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20191C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20191C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20191C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20191C43v10Ev,
};
static  VTT_ENTRY vtt_S20191C12[] = {
  {&(_ZTV9S20191C12[6]),  6,79},
  {&(_ZTV9S20191C12[25]),  25,79},
  {&(_ZTV9S20191C12[38]),  38,79},
  {&(_ZTV9S20191C12[52]),  52,79},
  {&(_ZTV9S20191C12[70]),  70,79},
  {&(_tg__ZTV8S20191C3__9S20191C12[4]),  4,9},
  {&(_tg__ZTV8S20191C2__8S20191C3__9S20191C12[6]),  6,10},
  {&(_tg__ZTV8S20191C4__8S20191C3__9S20191C12[9]),  9,16},
};
extern VTBL_ENTRY _ZTI9S20191C12[];
extern  VTBL_ENTRY _ZTV9S20191C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20191C12[];
Class_Descriptor cd_S20191C12 = {  "S20191C12", // class name
  bases_S20191C12, 7,
  &(vtc_S20191C12[0]), // expected_vtbl_contents
  &(vtt_S20191C12[0]), // expected_vtt_contents
  ABISELECT(2096,1316), // object size
  NSPAIRA(_ZTI9S20191C12),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV9S20191C12),79, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20191C12),8, //virtual table table var
  7, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20191C6  : virtual S20191C7 , virtual S20191C8 , S20191C9 , S20191C12 {
  int s20191c6f0[8];
  char s20191c6f1;
  long s20191c6f2;
  virtual  ~S20191C6(); // _ZN8S20191C6D2Ev
  virtual void  v43(); // _ZN8S20191C63v43Ev
  virtual void  v44(); // _ZN8S20191C63v44Ev
  virtual void  v45(); // _ZN8S20191C63v45Ev
  virtual void  v46(); // _ZN8S20191C63v46Ev
  virtual void  v47(); // _ZN8S20191C63v47Ev
  virtual void  v48(); // _ZN8S20191C63v48Ev
  virtual void  v49(); // _ZN8S20191C63v49Ev
  virtual void  v50(); // _ZN8S20191C63v50Ev
  S20191C6(); // tgen
};
//SIG(-1 S20191C6) C1{ VBC2{ v9 v10 v11 v12} VBC3{ VBC4{ VBC5{ VBC6{ v13 v14 v15 v16 Fs:13 Fp FD[8]} VBC7{ BC6 v17 v18 v19 Fp[6]} v20 v21 v22 v23 v24 Fp[2]} BC8{ VBC6 BC7 v25 v26 v27 v28 Fp} v29 v30 v31 v32 FL[5] FC9{} FD} vd v33 v34} BC4 BC10{ VBC6 VBC5 VBC11{ v35 v36 v37 v38 v39 v40 v41 v42 v43 FC7[7]} BC7 vd v44 v45 v46 v47 Fi} vd v1 v2 v3 v4 v5 v6 v7 v8 Fi[8] Fc Fl}


 S20191C6 ::~S20191C6(){ note_dtor("S20191C6", this);}
void  S20191C6 ::v43(){vfunc_called(this, "_ZN8S20191C63v43Ev");}
void  S20191C6 ::v44(){vfunc_called(this, "_ZN8S20191C63v44Ev");}
void  S20191C6 ::v45(){vfunc_called(this, "_ZN8S20191C63v45Ev");}
void  S20191C6 ::v46(){vfunc_called(this, "_ZN8S20191C63v46Ev");}
void  S20191C6 ::v47(){vfunc_called(this, "_ZN8S20191C63v47Ev");}
void  S20191C6 ::v48(){vfunc_called(this, "_ZN8S20191C63v48Ev");}
void  S20191C6 ::v49(){vfunc_called(this, "_ZN8S20191C63v49Ev");}
void  S20191C6 ::v50(){vfunc_called(this, "_ZN8S20191C63v50Ev");}
S20191C6 ::S20191C6(){ note_ctor("S20191C6", this);} // tgen

static void Test_S20191C6()
{
  extern Class_Descriptor cd_S20191C6;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(171,438)];
    init_test(&cd_S20191C6, buf);
    S20191C6 *dp, &lv = *(dp=new (buf) S20191C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(2720,1748), "sizeof(S20191C6)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20191C6)");
    check_base_class_offset(lv, (S20191C7*), ABISELECT(544,368), "S20191C6");
    /*is_ambiguous_... S20191C3::S20191C2 */ AMB_check_base_class_offset(lv, (S20191C2*)(S20191C3*), ABISELECT(880,580), "S20191C6");
    /*is_ambiguous_... S20191C6::S20191C9 */ AMB_check_base_class_offset(lv, (S20191C2*)(S20191C10*)(S20191C9*), ABISELECT(880,580), "S20191C6");
    /*is_ambiguous_... S20191C6::S20191C9 */ AMB_check_base_class_offset(lv, (S20191C2*)(S20191C10*)(S20191C9*), ABISELECT(880,580), "S20191C6");
    /*is_ambiguous_... S20191C12::S20191C2 */ AMB_check_base_class_offset(lv, (S20191C2*)(S20191C12*), ABISELECT(880,580), "S20191C6");
    /*is_ambiguous_... S20191C6::S20191C4 */ AMB_check_base_class_offset(lv, (S20191C2*)(S20191C4*), ABISELECT(1040,688), "S20191C6");
    check_base_class_offset(lv, (S20191C4*)(S20191C3*), ABISELECT(1040,688), "S20191C6");
    /*is_ambiguous_... S20191C6::S20191C9 */ AMB_check_base_class_offset(lv, (S20191C3*)(S20191C9*), ABISELECT(848,568), "S20191C6");
    /*is_ambiguous_... S20191C6::S20191C9 */ AMB_check_base_class_offset(lv, (S20191C3*)(S20191C9*), ABISELECT(848,568), "S20191C6");
    check_base_class_offset(lv, (S20191C3*)(S20191C12*), ABISELECT(848,568), "S20191C6");
    /*is_ambiguous_... S20191C6::S20191C9 */ AMB_check_base_class_offset(lv, (S20191C2*)(S20191C4*)(S20191C10*)(S20191C9*), ABISELECT(560,376), "S20191C6");
    /*is_ambiguous_... S20191C6::S20191C9 */ AMB_check_base_class_offset(lv, (S20191C4*)(S20191C10*)(S20191C9*), ABISELECT(560,376), "S20191C6");
    /*is_ambiguous_... S20191C6::S20191C9 */ AMB_check_base_class_offset(lv, (S20191C10*)(S20191C9*), ABISELECT(560,376), "S20191C6");
    check_base_class_offset(lv, (S20191C9*)(S20191C8*), ABISELECT(560,376), "S20191C6");
    check_base_class_offset(lv, (S20191C8*), ABISELECT(552,372), "S20191C6");
    /*is_ambiguous_... S20191C6::S20191C9 */ AMB_check_base_class_offset(lv, (S20191C2*)(S20191C4*)(S20191C10*)(S20191C9*), 0, "S20191C6");
    /*is_ambiguous_... S20191C6::S20191C9 */ AMB_check_base_class_offset(lv, (S20191C4*)(S20191C10*)(S20191C9*), 0, "S20191C6");
    /*is_ambiguous_... S20191C6::S20191C9 */ AMB_check_base_class_offset(lv, (S20191C10*)(S20191C9*), 0, "S20191C6");
    /*is_ambiguous_... S20191C6::S20191C9 */ AMB_check_base_class_offset(lv, (S20191C9*), 0, "S20191C6");
    check_base_class_offset(lv, (S20191C5*)(S20191C12*), ABISELECT(1248,820), "S20191C6");
    /*is_ambiguous_... S20191C12::S20191C4 */ AMB_check_base_class_offset(lv, (S20191C2*)(S20191C4*)(S20191C12*), ABISELECT(288,192), "S20191C6");
    /*is_ambiguous_... S20191C12::S20191C4 */ AMB_check_base_class_offset(lv, (S20191C4*)(S20191C12*), ABISELECT(288,192), "S20191C6");
    check_base_class_offset(lv, (S20191C12*), ABISELECT(288,192), "S20191C6");
    check_field_offset(lv, s20191c6f0, ABISELECT(500,328), "S20191C6.s20191c6f0");
    check_field_offset(lv, s20191c6f1, ABISELECT(532,360), "S20191C6.s20191c6f1");
    check_field_offset(lv, s20191c6f2, ABISELECT(536,364), "S20191C6.s20191c6f2");
    test_class_info(&lv, &cd_S20191C6);
    dp->~S20191C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20191C6(Test_S20191C6, "S20191C6", ABISELECT(2720,1748));

#else // __cplusplus

extern void _ZN8S20191C6C1Ev();
extern void _ZN8S20191C6D2Ev();
Name_Map name_map_S20191C6[] = {
  NSPAIR(_ZN8S20191C6C1Ev),
  NSPAIR(_ZN8S20191C6D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20191C7;
extern VTBL_ENTRY _ZTI8S20191C7[];
extern  VTBL_ENTRY _ZTV8S20191C7[];
extern Class_Descriptor cd_S20191C2;
extern VTBL_ENTRY _ZTI8S20191C2[];
extern  VTBL_ENTRY _ZTV8S20191C2[];
extern Class_Descriptor cd_S20191C2;
extern VTBL_ENTRY _ZTI8S20191C2[];
extern  VTBL_ENTRY _ZTV8S20191C2[];
extern Class_Descriptor cd_S20191C4;
extern VTBL_ENTRY _ZTI8S20191C4[];
extern  VTBL_ENTRY _ZTV8S20191C4[];
extern Class_Descriptor cd_S20191C3;
extern VTBL_ENTRY _ZTI8S20191C3[];
extern  VTBL_ENTRY _ZTV8S20191C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20191C3[];
extern Class_Descriptor cd_S20191C2;
extern VTBL_ENTRY _ZTI8S20191C2[];
extern  VTBL_ENTRY _ZTV8S20191C2[];
extern Class_Descriptor cd_S20191C4;
extern VTBL_ENTRY _ZTI8S20191C4[];
extern  VTBL_ENTRY _ZTV8S20191C4[];
extern Class_Descriptor cd_S20191C10;
extern VTBL_ENTRY _ZTI9S20191C10[];
extern  VTBL_ENTRY _ZTV9S20191C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20191C10[];
extern Class_Descriptor cd_S20191C9;
extern VTBL_ENTRY _ZTI8S20191C9[];
extern  VTBL_ENTRY _ZTV8S20191C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20191C9[];
extern Class_Descriptor cd_S20191C8;
extern VTBL_ENTRY _ZTI8S20191C8[];
extern  VTBL_ENTRY _ZTV8S20191C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20191C8[];
extern Class_Descriptor cd_S20191C2;
extern VTBL_ENTRY _ZTI8S20191C2[];
extern  VTBL_ENTRY _ZTV8S20191C2[];
extern Class_Descriptor cd_S20191C4;
extern VTBL_ENTRY _ZTI8S20191C4[];
extern  VTBL_ENTRY _ZTV8S20191C4[];
extern Class_Descriptor cd_S20191C10;
extern VTBL_ENTRY _ZTI9S20191C10[];
extern  VTBL_ENTRY _ZTV9S20191C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20191C10[];
extern Class_Descriptor cd_S20191C9;
extern VTBL_ENTRY _ZTI8S20191C9[];
extern  VTBL_ENTRY _ZTV8S20191C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20191C9[];
extern Class_Descriptor cd_S20191C5;
extern VTBL_ENTRY _ZTI8S20191C5[];
extern  VTBL_ENTRY _ZTV8S20191C5[];
extern Class_Descriptor cd_S20191C2;
extern VTBL_ENTRY _ZTI8S20191C2[];
extern  VTBL_ENTRY _ZTV8S20191C2[];
extern Class_Descriptor cd_S20191C4;
extern VTBL_ENTRY _ZTI8S20191C4[];
extern  VTBL_ENTRY _ZTV8S20191C4[];
extern Class_Descriptor cd_S20191C12;
extern VTBL_ENTRY _ZTI9S20191C12[];
extern  VTBL_ENTRY _ZTV9S20191C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20191C12[];
static Base_Class bases_S20191C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20191C7,    ABISELECT(544,368), //bcp->offset
    53, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20191C2,    ABISELECT(880,580), //bcp->offset
    125, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S20191C2,    ABISELECT(1040,688), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S20191C4,    ABISELECT(1040,688), //bcp->offset
    135, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S20191C3,    ABISELECT(848,568), //bcp->offset
    111, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    32, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S20191C2,    ABISELECT(560,376), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S20191C4,    ABISELECT(560,376), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S20191C10,    ABISELECT(560,376), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    27, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S20191C9,    ABISELECT(560,376), //bcp->offset
    76, //bcp->virtual_function_table_offset
    20, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    26, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S20191C8,    ABISELECT(552,372), //bcp->offset
    63, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    21, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20191C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S20191C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S20191C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S20191C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20191C5,    ABISELECT(1248,820), //bcp->offset
    151, //bcp->virtual_function_table_offset
    11, //num_negative_vtable_entries(t, bcp)
    20, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    17, //immediately_derived
  0, 1},
  {&cd_S20191C2,    ABISELECT(288,192), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S20191C4,    ABISELECT(288,192), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S20191C12,    ABISELECT(288,192), //bcp->offset
    34, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20191C6[];
extern void _ZN8S20191C22v4Ev();
extern void _ZN8S20191C22v5Ev();
extern void _ZN8S20191C22v6Ev();
extern void _ZN8S20191C22v7Ev();
extern void _ZN8S20191C42v8Ev();
extern void _ZN8S20191C42v9Ev();
extern void _ZN8S20191C43v10Ev();
extern void _ZN9S20191C103v20Ev();
extern void _ZN9S20191C103v21Ev();
extern void _ZN9S20191C103v22Ev();
extern void _ZN9S20191C103v23Ev();
extern void _ZN8S20191C93v24Ev();
extern void _ZN8S20191C93v25Ev();
extern void _ZN8S20191C93v26Ev();
extern void _ZN8S20191C93v27Ev();
extern void _ZN8S20191C6D1Ev();
extern void _ZN8S20191C6D0Ev();
extern void _ZN8S20191C63v43Ev();
extern void _ZN8S20191C63v44Ev();
extern void _ZN8S20191C63v45Ev();
extern void _ZN8S20191C63v46Ev();
extern void _ZN8S20191C63v47Ev();
extern void _ZN8S20191C63v48Ev();
extern void _ZN8S20191C63v49Ev();
extern void _ZN8S20191C63v50Ev();
extern void _ZN8S20191C22v4Ev();
extern void _ZN8S20191C22v5Ev();
extern void _ZN8S20191C22v6Ev();
extern void _ZN8S20191C22v7Ev();
extern void _ZN8S20191C42v8Ev();
extern void _ZN8S20191C42v9Ev();
extern void _ZN8S20191C43v10Ev();
extern void ABISELECT(_ZThn288_N8S20191C6D1Ev,_ZThn192_N8S20191C6D1Ev)();
extern void ABISELECT(_ZThn288_N8S20191C6D0Ev,_ZThn192_N8S20191C6D0Ev)();
extern void _ZN9S20191C123v39Ev();
extern void _ZN9S20191C123v40Ev();
extern void _ZN9S20191C123v41Ev();
extern void _ZN9S20191C123v42Ev();
extern void _ZN8S20191C73v16Ev();
extern void _ZN8S20191C73v17Ev();
extern void _ZN8S20191C73v18Ev();
extern void _ZN8S20191C73v19Ev();
extern void ABISELECT(_ZTv0_n56_N8S20191C6D1Ev,_ZTv0_n28_N8S20191C6D1Ev)();
extern void ABISELECT(_ZThn552_N8S20191C6D1Ev,_ZThn372_N8S20191C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S20191C6D0Ev,_ZTv0_n28_N8S20191C6D0Ev)();
extern void ABISELECT(_ZThn552_N8S20191C6D0Ev,_ZThn372_N8S20191C6D0Ev)() __attribute__((weak));
extern void _ZN8S20191C83v28Ev();
extern void _ZN8S20191C83v29Ev();
extern void _ZN8S20191C22v4Ev();
extern void _ZN8S20191C22v5Ev();
extern void _ZN8S20191C22v6Ev();
extern void _ZN8S20191C22v7Ev();
extern void _ZN8S20191C42v8Ev();
extern void _ZN8S20191C42v9Ev();
extern void _ZN8S20191C43v10Ev();
extern void _ZN9S20191C103v20Ev();
extern void _ZN9S20191C103v21Ev();
extern void _ZN9S20191C103v22Ev();
extern void _ZN9S20191C103v23Ev();
extern void _ZN8S20191C93v24Ev();
extern void _ZN8S20191C93v25Ev();
extern void _ZN8S20191C93v26Ev();
extern void _ZN8S20191C93v27Ev();
extern void _ZN8S20191C33v11Ev();
extern void _ZN8S20191C33v12Ev();
extern void _ZN8S20191C33v13Ev();
extern void _ZN8S20191C33v14Ev();
extern void _ZN8S20191C33v15Ev();
extern void _ZN8S20191C22v4Ev();
extern void _ZN8S20191C22v5Ev();
extern void _ZN8S20191C22v6Ev();
extern void _ZN8S20191C22v7Ev();
extern void _ZN8S20191C22v4Ev();
extern void _ZN8S20191C22v5Ev();
extern void _ZN8S20191C22v6Ev();
extern void _ZN8S20191C22v7Ev();
extern void _ZN8S20191C42v8Ev();
extern void _ZN8S20191C42v9Ev();
extern void _ZN8S20191C43v10Ev();
extern void _ZN8S20191C53v30Ev();
extern void _ZN8S20191C53v31Ev();
extern void _ZN8S20191C53v32Ev();
extern void _ZN8S20191C53v33Ev();
extern void _ZN8S20191C53v34Ev();
extern void _ZN8S20191C53v35Ev();
extern void _ZN8S20191C53v36Ev();
extern void _ZN8S20191C53v37Ev();
extern void _ZN8S20191C53v38Ev();
static  VTBL_ENTRY vtc_S20191C6[] = {
  ABISELECT(1248,820),
  ABISELECT(560,376),
  ABISELECT(552,372),
  ABISELECT(544,368),
  ABISELECT(1040,688),
  ABISELECT(848,568),
  ABISELECT(880,580),
  0,
  (VTBL_ENTRY)&(_ZTI8S20191C6[0]),
  (VTBL_ENTRY)&_ZN8S20191C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20191C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20191C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20191C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20191C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20191C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20191C43v10Ev,
  (VTBL_ENTRY)&_ZN9S20191C103v20Ev,
  (VTBL_ENTRY)&_ZN9S20191C103v21Ev,
  (VTBL_ENTRY)&_ZN9S20191C103v22Ev,
  (VTBL_ENTRY)&_ZN9S20191C103v23Ev,
  (VTBL_ENTRY)&_ZN8S20191C93v24Ev,
  (VTBL_ENTRY)&_ZN8S20191C93v25Ev,
  (VTBL_ENTRY)&_ZN8S20191C93v26Ev,
  (VTBL_ENTRY)&_ZN8S20191C93v27Ev,
  (VTBL_ENTRY)&_ZN8S20191C6D1Ev,
  (VTBL_ENTRY)&_ZN8S20191C6D0Ev,
  (VTBL_ENTRY)&_ZN8S20191C63v43Ev,
  (VTBL_ENTRY)&_ZN8S20191C63v44Ev,
  (VTBL_ENTRY)&_ZN8S20191C63v45Ev,
  (VTBL_ENTRY)&_ZN8S20191C63v46Ev,
  (VTBL_ENTRY)&_ZN8S20191C63v47Ev,
  (VTBL_ENTRY)&_ZN8S20191C63v48Ev,
  (VTBL_ENTRY)&_ZN8S20191C63v49Ev,
  (VTBL_ENTRY)&_ZN8S20191C63v50Ev,
  ABISELECT(960,628),
  ABISELECT(752,496),
  ABISELECT(560,376),
  ABISELECT(592,388),
  ABISELECT(-288,-192),
  (VTBL_ENTRY)&(_ZTI8S20191C6[0]),
  (VTBL_ENTRY)&_ZN8S20191C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20191C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20191C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20191C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20191C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20191C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20191C43v10Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn288_N8S20191C6D1Ev,_ZThn192_N8S20191C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn288_N8S20191C6D0Ev,_ZThn192_N8S20191C6D0Ev),
  (VTBL_ENTRY)&_ZN9S20191C123v39Ev,
  (VTBL_ENTRY)&_ZN9S20191C123v40Ev,
  (VTBL_ENTRY)&_ZN9S20191C123v41Ev,
  (VTBL_ENTRY)&_ZN9S20191C123v42Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-544,-368),
  (VTBL_ENTRY)&(_ZTI8S20191C6[0]),
  (VTBL_ENTRY)&_ZN8S20191C73v16Ev,
  (VTBL_ENTRY)&_ZN8S20191C73v17Ev,
  (VTBL_ENTRY)&_ZN8S20191C73v18Ev,
  (VTBL_ENTRY)&_ZN8S20191C73v19Ev,
  0,
  0,
  ABISELECT(-552,-372),
  ABISELECT(488,316),
  ABISELECT(328,208),
  ABISELECT(296,196),
  ABISELECT(8,4),
  ABISELECT(-552,-372),
  (VTBL_ENTRY)&(_ZTI8S20191C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S20191C6D1Ev,_ZTv0_n28_N8S20191C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S20191C6D0Ev,_ZTv0_n28_N8S20191C6D0Ev),
  (VTBL_ENTRY)&_ZN8S20191C83v28Ev,
  (VTBL_ENTRY)&_ZN8S20191C83v29Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(480,312),
  ABISELECT(288,192),
  ABISELECT(320,204),
  ABISELECT(-560,-376),
  (VTBL_ENTRY)&(_ZTI8S20191C6[0]),
  (VTBL_ENTRY)&_ZN8S20191C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20191C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20191C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20191C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20191C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20191C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20191C43v10Ev,
  (VTBL_ENTRY)&_ZN9S20191C103v20Ev,
  (VTBL_ENTRY)&_ZN9S20191C103v21Ev,
  (VTBL_ENTRY)&_ZN9S20191C103v22Ev,
  (VTBL_ENTRY)&_ZN9S20191C103v23Ev,
  (VTBL_ENTRY)&_ZN8S20191C93v24Ev,
  (VTBL_ENTRY)&_ZN8S20191C93v25Ev,
  (VTBL_ENTRY)&_ZN8S20191C93v26Ev,
  (VTBL_ENTRY)&_ZN8S20191C93v27Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(192,120),
  ABISELECT(32,12),
  ABISELECT(-848,-568),
  (VTBL_ENTRY)&(_ZTI8S20191C6[0]),
  (VTBL_ENTRY)&_ZN8S20191C33v11Ev,
  (VTBL_ENTRY)&_ZN8S20191C33v12Ev,
  (VTBL_ENTRY)&_ZN8S20191C33v13Ev,
  (VTBL_ENTRY)&_ZN8S20191C33v14Ev,
  (VTBL_ENTRY)&_ZN8S20191C33v15Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-880,-580),
  (VTBL_ENTRY)&(_ZTI8S20191C6[0]),
  (VTBL_ENTRY)&_ZN8S20191C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20191C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20191C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20191C22v7Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-1040,-688),
  (VTBL_ENTRY)&(_ZTI8S20191C6[0]),
  (VTBL_ENTRY)&_ZN8S20191C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20191C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20191C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20191C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20191C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20191C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20191C43v10Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-1248,-820),
  (VTBL_ENTRY)&(_ZTI8S20191C6[0]),
  (VTBL_ENTRY)&_ZN8S20191C53v30Ev,
  (VTBL_ENTRY)&_ZN8S20191C53v31Ev,
  (VTBL_ENTRY)&_ZN8S20191C53v32Ev,
  (VTBL_ENTRY)&_ZN8S20191C53v33Ev,
  (VTBL_ENTRY)&_ZN8S20191C53v34Ev,
  (VTBL_ENTRY)&_ZN8S20191C53v35Ev,
  (VTBL_ENTRY)&_ZN8S20191C53v36Ev,
  (VTBL_ENTRY)&_ZN8S20191C53v37Ev,
  (VTBL_ENTRY)&_ZN8S20191C53v38Ev,
};
extern VTBL_ENTRY _ZTV8S20191C6[];
extern void _ZN8S20191C22v4Ev();
extern void _ZN8S20191C22v5Ev();
extern void _ZN8S20191C22v6Ev();
extern void _ZN8S20191C22v7Ev();
extern void _ZN8S20191C42v8Ev();
extern void _ZN8S20191C42v9Ev();
extern void _ZN8S20191C43v10Ev();
extern void _ZN9S20191C103v20Ev();
extern void _ZN9S20191C103v21Ev();
extern void _ZN9S20191C103v22Ev();
extern void _ZN9S20191C103v23Ev();
extern void _ZN8S20191C93v24Ev();
extern void _ZN8S20191C93v25Ev();
extern void _ZN8S20191C93v26Ev();
extern void _ZN8S20191C93v27Ev();
static  VTBL_ENTRY _tg__ZTV8S20191C9__A__8S20191C6[] = {
  ABISELECT(1040,688),
  ABISELECT(848,568),
  ABISELECT(880,580),
  0,
  (VTBL_ENTRY)&(_ZTI8S20191C9[0]),
  (VTBL_ENTRY)&_ZN8S20191C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20191C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20191C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20191C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20191C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20191C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20191C43v10Ev,
  (VTBL_ENTRY)&_ZN9S20191C103v20Ev,
  (VTBL_ENTRY)&_ZN9S20191C103v21Ev,
  (VTBL_ENTRY)&_ZN9S20191C103v22Ev,
  (VTBL_ENTRY)&_ZN9S20191C103v23Ev,
  (VTBL_ENTRY)&_ZN8S20191C93v24Ev,
  (VTBL_ENTRY)&_ZN8S20191C93v25Ev,
  (VTBL_ENTRY)&_ZN8S20191C93v26Ev,
  (VTBL_ENTRY)&_ZN8S20191C93v27Ev,
};
extern void _ZN8S20191C22v4Ev();
extern void _ZN8S20191C22v5Ev();
extern void _ZN8S20191C22v6Ev();
extern void _ZN8S20191C22v7Ev();
extern void _ZN8S20191C42v8Ev();
extern void _ZN8S20191C42v9Ev();
extern void _ZN8S20191C43v10Ev();
extern void _ZN9S20191C103v20Ev();
extern void _ZN9S20191C103v21Ev();
extern void _ZN9S20191C103v22Ev();
extern void _ZN9S20191C103v23Ev();
static  VTBL_ENTRY _tg__ZTV9S20191C108S20191C9__A1__8S20191C6[] = {
  ABISELECT(880,580),
  0,
  (VTBL_ENTRY)&(_ZTI9S20191C10[0]),
  (VTBL_ENTRY)&_ZN8S20191C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20191C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20191C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20191C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20191C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20191C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20191C43v10Ev,
  (VTBL_ENTRY)&_ZN9S20191C103v20Ev,
  (VTBL_ENTRY)&_ZN9S20191C103v21Ev,
  (VTBL_ENTRY)&_ZN9S20191C103v22Ev,
  (VTBL_ENTRY)&_ZN9S20191C103v23Ev,
};
extern void _ZN8S20191C22v4Ev();
extern void _ZN8S20191C22v5Ev();
extern void _ZN8S20191C22v6Ev();
extern void _ZN8S20191C22v7Ev();
static  VTBL_ENTRY _tg__ZTV8S20191C2__9S20191C108S20191C9__A1__8S20191C6[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-880,-580),
  (VTBL_ENTRY)&(_ZTI9S20191C10[0]),
  (VTBL_ENTRY)&_ZN8S20191C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20191C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20191C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20191C22v7Ev,
};
extern void _ZN8S20191C33v11Ev();
extern void _ZN8S20191C33v12Ev();
extern void _ZN8S20191C33v13Ev();
extern void _ZN8S20191C33v14Ev();
extern void _ZN8S20191C33v15Ev();
static  VTBL_ENTRY _tg__ZTV8S20191C3__8S20191C9__A__8S20191C6[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(192,120),
  ABISELECT(32,12),
  ABISELECT(-848,-568),
  (VTBL_ENTRY)&(_ZTI8S20191C9[0]),
  (VTBL_ENTRY)&_ZN8S20191C33v11Ev,
  (VTBL_ENTRY)&_ZN8S20191C33v12Ev,
  (VTBL_ENTRY)&_ZN8S20191C33v13Ev,
  (VTBL_ENTRY)&_ZN8S20191C33v14Ev,
  (VTBL_ENTRY)&_ZN8S20191C33v15Ev,
};
extern void _ZN8S20191C22v4Ev();
extern void _ZN8S20191C22v5Ev();
extern void _ZN8S20191C22v6Ev();
extern void _ZN8S20191C22v7Ev();
static  VTBL_ENTRY _tg__ZTV8S20191C2__8S20191C9__A__8S20191C6[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-880,-580),
  (VTBL_ENTRY)&(_ZTI8S20191C9[0]),
  (VTBL_ENTRY)&_ZN8S20191C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20191C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20191C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20191C22v7Ev,
};
extern void _ZN8S20191C22v4Ev();
extern void _ZN8S20191C22v5Ev();
extern void _ZN8S20191C22v6Ev();
extern void _ZN8S20191C22v7Ev();
extern void _ZN8S20191C42v8Ev();
extern void _ZN8S20191C42v9Ev();
extern void _ZN8S20191C43v10Ev();
static  VTBL_ENTRY _tg__ZTV8S20191C4__8S20191C9__A__8S20191C6[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-1040,-688),
  (VTBL_ENTRY)&(_ZTI8S20191C9[0]),
  (VTBL_ENTRY)&_ZN8S20191C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20191C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20191C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20191C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20191C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20191C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20191C43v10Ev,
};
extern void _ZN8S20191C22v4Ev();
extern void _ZN8S20191C22v5Ev();
extern void _ZN8S20191C22v6Ev();
extern void _ZN8S20191C22v7Ev();
extern void _ZN8S20191C42v8Ev();
extern void _ZN8S20191C42v9Ev();
extern void _ZN8S20191C43v10Ev();
extern void _ZN9S20191C12D1Ev();
extern void _ZN9S20191C12D0Ev();
extern void _ZN9S20191C123v39Ev();
extern void _ZN9S20191C123v40Ev();
extern void _ZN9S20191C123v41Ev();
extern void _ZN9S20191C123v42Ev();
static  VTBL_ENTRY _tg__ZTV9S20191C12__8S20191C6[] = {
  ABISELECT(960,628),
  ABISELECT(752,496),
  ABISELECT(560,376),
  ABISELECT(592,388),
  0,
  (VTBL_ENTRY)&(_ZTI9S20191C12[0]),
  (VTBL_ENTRY)&_ZN8S20191C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20191C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20191C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20191C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20191C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20191C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20191C43v10Ev,
  (VTBL_ENTRY)&_ZN9S20191C12D1Ev,
  (VTBL_ENTRY)&_ZN9S20191C12D0Ev,
  (VTBL_ENTRY)&_ZN9S20191C123v39Ev,
  (VTBL_ENTRY)&_ZN9S20191C123v40Ev,
  (VTBL_ENTRY)&_ZN9S20191C123v41Ev,
  (VTBL_ENTRY)&_ZN9S20191C123v42Ev,
};
extern void _ZN8S20191C22v4Ev();
extern void _ZN8S20191C22v5Ev();
extern void _ZN8S20191C22v6Ev();
extern void _ZN8S20191C22v7Ev();
static  VTBL_ENTRY _tg__ZTV8S20191C2__9S20191C12__8S20191C6[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-592,-388),
  (VTBL_ENTRY)&(_ZTI9S20191C12[0]),
  (VTBL_ENTRY)&_ZN8S20191C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20191C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20191C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20191C22v7Ev,
};
extern void _ZN8S20191C33v11Ev();
extern void _ZN8S20191C33v12Ev();
extern void _ZN8S20191C33v13Ev();
extern void _ZN8S20191C33v14Ev();
extern void _ZN8S20191C33v15Ev();
static  VTBL_ENTRY _tg__ZTV8S20191C3__9S20191C12__8S20191C6[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(192,120),
  ABISELECT(32,12),
  ABISELECT(-560,-376),
  (VTBL_ENTRY)&(_ZTI9S20191C12[0]),
  (VTBL_ENTRY)&_ZN8S20191C33v11Ev,
  (VTBL_ENTRY)&_ZN8S20191C33v12Ev,
  (VTBL_ENTRY)&_ZN8S20191C33v13Ev,
  (VTBL_ENTRY)&_ZN8S20191C33v14Ev,
  (VTBL_ENTRY)&_ZN8S20191C33v15Ev,
};
extern void _ZN8S20191C22v4Ev();
extern void _ZN8S20191C22v5Ev();
extern void _ZN8S20191C22v6Ev();
extern void _ZN8S20191C22v7Ev();
extern void _ZN8S20191C42v8Ev();
extern void _ZN8S20191C42v9Ev();
extern void _ZN8S20191C43v10Ev();
static  VTBL_ENTRY _tg__ZTV8S20191C4__9S20191C12__8S20191C6[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-752,-496),
  (VTBL_ENTRY)&(_ZTI9S20191C12[0]),
  (VTBL_ENTRY)&_ZN8S20191C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20191C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20191C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20191C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20191C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20191C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20191C43v10Ev,
};
extern void _ZN8S20191C53v30Ev();
extern void _ZN8S20191C53v31Ev();
extern void _ZN8S20191C53v32Ev();
extern void _ZN8S20191C53v33Ev();
extern void _ZN8S20191C53v34Ev();
extern void _ZN8S20191C53v35Ev();
extern void _ZN8S20191C53v36Ev();
extern void _ZN8S20191C53v37Ev();
extern void _ZN8S20191C53v38Ev();
static  VTBL_ENTRY _tg__ZTV8S20191C5__9S20191C12__8S20191C6[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-960,-628),
  (VTBL_ENTRY)&(_ZTI9S20191C12[0]),
  (VTBL_ENTRY)&_ZN8S20191C53v30Ev,
  (VTBL_ENTRY)&_ZN8S20191C53v31Ev,
  (VTBL_ENTRY)&_ZN8S20191C53v32Ev,
  (VTBL_ENTRY)&_ZN8S20191C53v33Ev,
  (VTBL_ENTRY)&_ZN8S20191C53v34Ev,
  (VTBL_ENTRY)&_ZN8S20191C53v35Ev,
  (VTBL_ENTRY)&_ZN8S20191C53v36Ev,
  (VTBL_ENTRY)&_ZN8S20191C53v37Ev,
  (VTBL_ENTRY)&_ZN8S20191C53v38Ev,
};
extern void _ZN8S20191C8D1Ev();
extern void _ZN8S20191C8D0Ev();
extern void _ZN8S20191C83v28Ev();
extern void _ZN8S20191C83v29Ev();
static  VTBL_ENTRY _tg__ZTV8S20191C8__8S20191C6[] = {
  ABISELECT(488,316),
  ABISELECT(328,208),
  ABISELECT(296,196),
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S20191C8[0]),
  (VTBL_ENTRY)&_ZN8S20191C8D1Ev,
  (VTBL_ENTRY)&_ZN8S20191C8D0Ev,
  (VTBL_ENTRY)&_ZN8S20191C83v28Ev,
  (VTBL_ENTRY)&_ZN8S20191C83v29Ev,
};
extern void _ZN8S20191C22v4Ev();
extern void _ZN8S20191C22v5Ev();
extern void _ZN8S20191C22v6Ev();
extern void _ZN8S20191C22v7Ev();
extern void _ZN8S20191C42v8Ev();
extern void _ZN8S20191C42v9Ev();
extern void _ZN8S20191C43v10Ev();
extern void _ZN9S20191C103v20Ev();
extern void _ZN9S20191C103v21Ev();
extern void _ZN9S20191C103v22Ev();
extern void _ZN9S20191C103v23Ev();
extern void _ZN8S20191C93v24Ev();
extern void _ZN8S20191C93v25Ev();
extern void _ZN8S20191C93v26Ev();
extern void _ZN8S20191C93v27Ev();
static  VTBL_ENTRY _tg__ZTV8S20191C9__8S20191C8__8S20191C6[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(480,312),
  ABISELECT(288,192),
  ABISELECT(320,204),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S20191C8[0]),
  (VTBL_ENTRY)&_ZN8S20191C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20191C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20191C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20191C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20191C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20191C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20191C43v10Ev,
  (VTBL_ENTRY)&_ZN9S20191C103v20Ev,
  (VTBL_ENTRY)&_ZN9S20191C103v21Ev,
  (VTBL_ENTRY)&_ZN9S20191C103v22Ev,
  (VTBL_ENTRY)&_ZN9S20191C103v23Ev,
  (VTBL_ENTRY)&_ZN8S20191C93v24Ev,
  (VTBL_ENTRY)&_ZN8S20191C93v25Ev,
  (VTBL_ENTRY)&_ZN8S20191C93v26Ev,
  (VTBL_ENTRY)&_ZN8S20191C93v27Ev,
};
extern void _ZN8S20191C33v11Ev();
extern void _ZN8S20191C33v12Ev();
extern void _ZN8S20191C33v13Ev();
extern void _ZN8S20191C33v14Ev();
extern void _ZN8S20191C33v15Ev();
static  VTBL_ENTRY _tg__ZTV8S20191C3__8S20191C8__8S20191C6[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(192,120),
  ABISELECT(32,12),
  ABISELECT(-296,-196),
  (VTBL_ENTRY)&(_ZTI8S20191C8[0]),
  (VTBL_ENTRY)&_ZN8S20191C33v11Ev,
  (VTBL_ENTRY)&_ZN8S20191C33v12Ev,
  (VTBL_ENTRY)&_ZN8S20191C33v13Ev,
  (VTBL_ENTRY)&_ZN8S20191C33v14Ev,
  (VTBL_ENTRY)&_ZN8S20191C33v15Ev,
};
extern void _ZN8S20191C22v4Ev();
extern void _ZN8S20191C22v5Ev();
extern void _ZN8S20191C22v6Ev();
extern void _ZN8S20191C22v7Ev();
static  VTBL_ENTRY _tg__ZTV8S20191C2__8S20191C8__8S20191C6[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-328,-208),
  (VTBL_ENTRY)&(_ZTI8S20191C8[0]),
  (VTBL_ENTRY)&_ZN8S20191C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20191C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20191C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20191C22v7Ev,
};
extern void _ZN8S20191C22v4Ev();
extern void _ZN8S20191C22v5Ev();
extern void _ZN8S20191C22v6Ev();
extern void _ZN8S20191C22v7Ev();
extern void _ZN8S20191C42v8Ev();
extern void _ZN8S20191C42v9Ev();
extern void _ZN8S20191C43v10Ev();
static  VTBL_ENTRY _tg__ZTV8S20191C4__8S20191C8__8S20191C6[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-488,-316),
  (VTBL_ENTRY)&(_ZTI8S20191C8[0]),
  (VTBL_ENTRY)&_ZN8S20191C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20191C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20191C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20191C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20191C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20191C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20191C43v10Ev,
};
extern void _ZN8S20191C22v4Ev();
extern void _ZN8S20191C22v5Ev();
extern void _ZN8S20191C22v6Ev();
extern void _ZN8S20191C22v7Ev();
extern void _ZN8S20191C42v8Ev();
extern void _ZN8S20191C42v9Ev();
extern void _ZN8S20191C43v10Ev();
extern void _ZN9S20191C103v20Ev();
extern void _ZN9S20191C103v21Ev();
extern void _ZN9S20191C103v22Ev();
extern void _ZN9S20191C103v23Ev();
extern void _ZN8S20191C93v24Ev();
extern void _ZN8S20191C93v25Ev();
extern void _ZN8S20191C93v26Ev();
extern void _ZN8S20191C93v27Ev();
static  VTBL_ENTRY _tg__ZTV8S20191C9__8S20191C6[] = {
  ABISELECT(480,312),
  ABISELECT(288,192),
  ABISELECT(320,204),
  0,
  (VTBL_ENTRY)&(_ZTI8S20191C9[0]),
  (VTBL_ENTRY)&_ZN8S20191C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20191C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20191C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20191C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20191C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20191C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20191C43v10Ev,
  (VTBL_ENTRY)&_ZN9S20191C103v20Ev,
  (VTBL_ENTRY)&_ZN9S20191C103v21Ev,
  (VTBL_ENTRY)&_ZN9S20191C103v22Ev,
  (VTBL_ENTRY)&_ZN9S20191C103v23Ev,
  (VTBL_ENTRY)&_ZN8S20191C93v24Ev,
  (VTBL_ENTRY)&_ZN8S20191C93v25Ev,
  (VTBL_ENTRY)&_ZN8S20191C93v26Ev,
  (VTBL_ENTRY)&_ZN8S20191C93v27Ev,
};
extern void _ZN8S20191C22v4Ev();
extern void _ZN8S20191C22v5Ev();
extern void _ZN8S20191C22v6Ev();
extern void _ZN8S20191C22v7Ev();
extern void _ZN8S20191C42v8Ev();
extern void _ZN8S20191C42v9Ev();
extern void _ZN8S20191C43v10Ev();
extern void _ZN9S20191C103v20Ev();
extern void _ZN9S20191C103v21Ev();
extern void _ZN9S20191C103v22Ev();
extern void _ZN9S20191C103v23Ev();
static  VTBL_ENTRY _tg__ZTV9S20191C108S20191C9__8S20191C6[] = {
  ABISELECT(320,204),
  0,
  (VTBL_ENTRY)&(_ZTI9S20191C10[0]),
  (VTBL_ENTRY)&_ZN8S20191C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20191C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20191C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20191C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20191C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20191C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20191C43v10Ev,
  (VTBL_ENTRY)&_ZN9S20191C103v20Ev,
  (VTBL_ENTRY)&_ZN9S20191C103v21Ev,
  (VTBL_ENTRY)&_ZN9S20191C103v22Ev,
  (VTBL_ENTRY)&_ZN9S20191C103v23Ev,
};
extern void _ZN8S20191C22v4Ev();
extern void _ZN8S20191C22v5Ev();
extern void _ZN8S20191C22v6Ev();
extern void _ZN8S20191C22v7Ev();
static  VTBL_ENTRY _tg__ZTV8S20191C2__9S20191C108S20191C9__8S20191C6[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-320,-204),
  (VTBL_ENTRY)&(_ZTI9S20191C10[0]),
  (VTBL_ENTRY)&_ZN8S20191C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20191C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20191C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20191C22v7Ev,
};
extern void _ZN8S20191C33v11Ev();
extern void _ZN8S20191C33v12Ev();
extern void _ZN8S20191C33v13Ev();
extern void _ZN8S20191C33v14Ev();
extern void _ZN8S20191C33v15Ev();
static  VTBL_ENTRY _tg__ZTV8S20191C3__8S20191C9__8S20191C6[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(192,120),
  ABISELECT(32,12),
  ABISELECT(-288,-192),
  (VTBL_ENTRY)&(_ZTI8S20191C9[0]),
  (VTBL_ENTRY)&_ZN8S20191C33v11Ev,
  (VTBL_ENTRY)&_ZN8S20191C33v12Ev,
  (VTBL_ENTRY)&_ZN8S20191C33v13Ev,
  (VTBL_ENTRY)&_ZN8S20191C33v14Ev,
  (VTBL_ENTRY)&_ZN8S20191C33v15Ev,
};
extern void _ZN8S20191C22v4Ev();
extern void _ZN8S20191C22v5Ev();
extern void _ZN8S20191C22v6Ev();
extern void _ZN8S20191C22v7Ev();
static  VTBL_ENTRY _tg__ZTV8S20191C2__8S20191C9__8S20191C6[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-320,-204),
  (VTBL_ENTRY)&(_ZTI8S20191C9[0]),
  (VTBL_ENTRY)&_ZN8S20191C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20191C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20191C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20191C22v7Ev,
};
extern void _ZN8S20191C22v4Ev();
extern void _ZN8S20191C22v5Ev();
extern void _ZN8S20191C22v6Ev();
extern void _ZN8S20191C22v7Ev();
extern void _ZN8S20191C42v8Ev();
extern void _ZN8S20191C42v9Ev();
extern void _ZN8S20191C43v10Ev();
static  VTBL_ENTRY _tg__ZTV8S20191C4__8S20191C9__8S20191C6[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-480,-312),
  (VTBL_ENTRY)&(_ZTI8S20191C9[0]),
  (VTBL_ENTRY)&_ZN8S20191C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20191C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20191C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20191C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20191C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20191C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20191C43v10Ev,
};
extern void _ZN8S20191C33v11Ev();
extern void _ZN8S20191C33v12Ev();
extern void _ZN8S20191C33v13Ev();
extern void _ZN8S20191C33v14Ev();
extern void _ZN8S20191C33v15Ev();
static  VTBL_ENTRY _tg__ZTV8S20191C3__8S20191C6[] = {
  ABISELECT(192,120),
  ABISELECT(32,12),
  0,
  (VTBL_ENTRY)&(_ZTI8S20191C3[0]),
  (VTBL_ENTRY)&_ZN8S20191C33v11Ev,
  (VTBL_ENTRY)&_ZN8S20191C33v12Ev,
  (VTBL_ENTRY)&_ZN8S20191C33v13Ev,
  (VTBL_ENTRY)&_ZN8S20191C33v14Ev,
  (VTBL_ENTRY)&_ZN8S20191C33v15Ev,
};
extern void _ZN8S20191C22v4Ev();
extern void _ZN8S20191C22v5Ev();
extern void _ZN8S20191C22v6Ev();
extern void _ZN8S20191C22v7Ev();
static  VTBL_ENTRY _tg__ZTV8S20191C2__8S20191C3__8S20191C6[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-32,-12),
  (VTBL_ENTRY)&(_ZTI8S20191C3[0]),
  (VTBL_ENTRY)&_ZN8S20191C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20191C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20191C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20191C22v7Ev,
};
extern void _ZN8S20191C22v4Ev();
extern void _ZN8S20191C22v5Ev();
extern void _ZN8S20191C22v6Ev();
extern void _ZN8S20191C22v7Ev();
extern void _ZN8S20191C42v8Ev();
extern void _ZN8S20191C42v9Ev();
extern void _ZN8S20191C43v10Ev();
static  VTBL_ENTRY _tg__ZTV8S20191C4__8S20191C3__8S20191C6[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-192,-120),
  (VTBL_ENTRY)&(_ZTI8S20191C3[0]),
  (VTBL_ENTRY)&_ZN8S20191C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20191C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20191C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20191C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20191C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20191C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20191C43v10Ev,
};
static  VTT_ENTRY vtt_S20191C6[] = {
  {&(_ZTV8S20191C6[9]),  9,171},
  {&(_tg__ZTV8S20191C9__A__8S20191C6[5]),  5,20},
  {&(_tg__ZTV9S20191C108S20191C9__A1__8S20191C6[3]),  3,14},
  {&(_tg__ZTV8S20191C2__9S20191C108S20191C9__A1__8S20191C6[6]),  6,10},
  {&(_tg__ZTV8S20191C3__8S20191C9__A__8S20191C6[9]),  9,14},
  {&(_tg__ZTV8S20191C2__8S20191C9__A__8S20191C6[6]),  6,10},
  {&(_tg__ZTV8S20191C4__8S20191C9__A__8S20191C6[9]),  9,16},
  {&(_tg__ZTV9S20191C12__8S20191C6[6]),  6,19},
  {&(_tg__ZTV8S20191C2__9S20191C12__8S20191C6[6]),  6,10},
  {&(_tg__ZTV8S20191C3__9S20191C12__8S20191C6[9]),  9,14},
  {&(_tg__ZTV8S20191C4__9S20191C12__8S20191C6[9]),  9,16},
  {&(_tg__ZTV8S20191C5__9S20191C12__8S20191C6[11]),  11,20},
  {&(_ZTV8S20191C6[59]),  59,171},
  {&(_ZTV8S20191C6[72]),  72,171},
  {&(_ZTV8S20191C6[96]),  96,171},
  {&(_ZTV8S20191C6[120]),  120,171},
  {&(_ZTV8S20191C6[131]),  131,171},
  {&(_ZTV8S20191C6[144]),  144,171},
  {&(_ZTV8S20191C6[40]),  40,171},
  {&(_ZTV8S20191C6[162]),  162,171},
  {&(_tg__ZTV8S20191C8__8S20191C6[6]),  6,10},
  {&(_tg__ZTV8S20191C9__8S20191C8__8S20191C6[20]),  20,35},
  {&(_tg__ZTV8S20191C3__8S20191C8__8S20191C6[9]),  9,14},
  {&(_tg__ZTV8S20191C2__8S20191C8__8S20191C6[6]),  6,10},
  {&(_tg__ZTV8S20191C4__8S20191C8__8S20191C6[9]),  9,16},
  {&(_tg__ZTV8S20191C9__8S20191C6[5]),  5,20},
  {&(_tg__ZTV9S20191C108S20191C9__8S20191C6[3]),  3,14},
  {&(_tg__ZTV8S20191C2__9S20191C108S20191C9__8S20191C6[6]),  6,10},
  {&(_tg__ZTV8S20191C3__8S20191C9__8S20191C6[9]),  9,14},
  {&(_tg__ZTV8S20191C2__8S20191C9__8S20191C6[6]),  6,10},
  {&(_tg__ZTV8S20191C4__8S20191C9__8S20191C6[9]),  9,16},
  {&(_tg__ZTV8S20191C3__8S20191C6[4]),  4,9},
  {&(_tg__ZTV8S20191C2__8S20191C3__8S20191C6[6]),  6,10},
  {&(_tg__ZTV8S20191C4__8S20191C3__8S20191C6[9]),  9,16},
};
extern VTBL_ENTRY _ZTI8S20191C6[];
extern  VTBL_ENTRY _ZTV8S20191C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20191C6[];
static VTBL_ENTRY alt_thunk_names27[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S20191C6D0Ev,_ZTv0_n28_N8S20191C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn552_N8S20191C6D0Ev,_ZThn372_N8S20191C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S20191C6D1Ev,_ZTv0_n28_N8S20191C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn552_N8S20191C6D1Ev,_ZThn372_N8S20191C6D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20191C6 = {  "S20191C6", // class name
  bases_S20191C6, 18,
  &(vtc_S20191C6[0]), // expected_vtbl_contents
  &(vtt_S20191C6[0]), // expected_vtt_contents
  ABISELECT(2720,1748), // object size
  NSPAIRA(_ZTI8S20191C6),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S20191C6),171, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20191C6),34, //virtual table table var
  18, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names27,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20191C1  : virtual S20191C2 , virtual S20191C3 , virtual S20191C5 , S20191C6 , S20191C4 {
  virtual  ~S20191C1(); // _ZN8S20191C1D2Ev
  virtual void  v1(); // _ZN8S20191C12v1Ev
  virtual void  v2(); // _ZN8S20191C12v2Ev
  virtual void  v3(); // _ZN8S20191C12v3Ev
  S20191C1(); // tgen
};
//SIG(1 S20191C1) C1{ VBC2{ v4 v5 v6 v7 Fs:13 Fp FD[8]} VBC3{ VBC2 VBC4{ BC2 v8 v9 v10 Fp[6]} v11 v12 v13 v14 v15 Fp[2]} VBC5{ v16 v17 v18 v19 v20 v21 v22 v23 v24 FC4[7]} BC6{ VBC7{ v25 v26 v27 v28} VBC8{ VBC9{ VBC3 BC10{ VBC2 BC4 v29 v30 v31 v32 Fp} v33 v34 v35 v36 FL[5] FC11{} FD} vd v37 v38} BC9 BC12{ VBC2 VBC3 VBC5 BC4 vd v39 v40 v41 v42 Fi} vd v43 v44 v45 v46 v47 v48 v49 v50 Fi[8] Fc Fl} BC4 vd v1 v2 v3}


 S20191C1 ::~S20191C1(){ note_dtor("S20191C1", this);}
void  S20191C1 ::v1(){vfunc_called(this, "_ZN8S20191C12v1Ev");}
void  S20191C1 ::v2(){vfunc_called(this, "_ZN8S20191C12v2Ev");}
void  S20191C1 ::v3(){vfunc_called(this, "_ZN8S20191C12v3Ev");}
S20191C1 ::S20191C1(){ note_ctor("S20191C1", this);} // tgen

static void Test_S20191C1()
{
  extern Class_Descriptor cd_S20191C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(184,471)];
    init_test(&cd_S20191C1, buf);
    S20191C1 *dp, &lv = *(dp=new (buf) S20191C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(2928,1880), "sizeof(S20191C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20191C1)");
    /*is_ambiguous_... S20191C1::S20191C2 */ AMB_check_base_class_offset(lv, (S20191C2*), ABISELECT(752,500), "S20191C1");
    /*is_ambiguous_... S20191C3::S20191C2 */ AMB_check_base_class_offset(lv, (S20191C2*)(S20191C3*), ABISELECT(752,500), "S20191C1");
    /*is_ambiguous_... S20191C1::S20191C9 */ AMB_check_base_class_offset(lv, (S20191C2*)(S20191C10*)(S20191C9*), ABISELECT(752,500), "S20191C1");
    /*is_ambiguous_... S20191C6::S20191C9 */ AMB_check_base_class_offset(lv, (S20191C2*)(S20191C10*)(S20191C9*)(S20191C6*), ABISELECT(752,500), "S20191C1");
    /*is_ambiguous_... S20191C12::S20191C2 */ AMB_check_base_class_offset(lv, (S20191C2*)(S20191C12*)(S20191C6*), ABISELECT(752,500), "S20191C1");
    /*is_ambiguous_... S20191C1::S20191C4 */ AMB_check_base_class_offset(lv, (S20191C2*)(S20191C4*), ABISELECT(944,620), "S20191C1");
    check_base_class_offset(lv, (S20191C4*)(S20191C3*), ABISELECT(944,620), "S20191C1");
    check_base_class_offset(lv, (S20191C3*), ABISELECT(912,608), "S20191C1");
    /*is_ambiguous_... S20191C1::S20191C9 */ AMB_check_base_class_offset(lv, (S20191C3*)(S20191C9*), ABISELECT(912,608), "S20191C1");
    /*is_ambiguous_... S20191C6::S20191C9 */ AMB_check_base_class_offset(lv, (S20191C3*)(S20191C9*)(S20191C6*), ABISELECT(912,608), "S20191C1");
    check_base_class_offset(lv, (S20191C3*)(S20191C12*)(S20191C6*), ABISELECT(912,608), "S20191C1");
    check_base_class_offset(lv, (S20191C5*), ABISELECT(1152,752), "S20191C1");
    check_base_class_offset(lv, (S20191C5*)(S20191C12*)(S20191C6*), ABISELECT(1152,752), "S20191C1");
    check_base_class_offset(lv, (S20191C7*)(S20191C6*), ABISELECT(2624,1680), "S20191C1");
    /*is_ambiguous_... S20191C1::S20191C9 */ AMB_check_base_class_offset(lv, (S20191C2*)(S20191C4*)(S20191C10*)(S20191C9*), ABISELECT(2640,1688), "S20191C1");
    /*is_ambiguous_... S20191C1::S20191C9 */ AMB_check_base_class_offset(lv, (S20191C4*)(S20191C10*)(S20191C9*), ABISELECT(2640,1688), "S20191C1");
    /*is_ambiguous_... S20191C1::S20191C9 */ AMB_check_base_class_offset(lv, (S20191C10*)(S20191C9*), ABISELECT(2640,1688), "S20191C1");
    check_base_class_offset(lv, (S20191C9*)(S20191C8*), ABISELECT(2640,1688), "S20191C1");
    check_base_class_offset(lv, (S20191C8*)(S20191C6*), ABISELECT(2632,1684), "S20191C1");
    /*is_ambiguous_... S20191C6::S20191C9 */ AMB_check_base_class_offset(lv, (S20191C2*)(S20191C4*)(S20191C10*)(S20191C9*)(S20191C6*), 0, "S20191C1");
    /*is_ambiguous_... S20191C6::S20191C9 */ AMB_check_base_class_offset(lv, (S20191C4*)(S20191C10*)(S20191C9*)(S20191C6*), 0, "S20191C1");
    /*is_ambiguous_... S20191C6::S20191C9 */ AMB_check_base_class_offset(lv, (S20191C10*)(S20191C9*)(S20191C6*), 0, "S20191C1");
    /*is_ambiguous_... S20191C6::S20191C9 */ AMB_check_base_class_offset(lv, (S20191C9*)(S20191C6*), 0, "S20191C1");
    /*is_ambiguous_... S20191C12::S20191C4 */ AMB_check_base_class_offset(lv, (S20191C2*)(S20191C4*)(S20191C12*)(S20191C6*), ABISELECT(288,192), "S20191C1");
    /*is_ambiguous_... S20191C12::S20191C4 */ AMB_check_base_class_offset(lv, (S20191C4*)(S20191C12*)(S20191C6*), ABISELECT(288,192), "S20191C1");
    check_base_class_offset(lv, (S20191C12*)(S20191C6*), ABISELECT(288,192), "S20191C1");
    check_base_class_offset(lv, (S20191C6*), 0, "S20191C1");
    /*is_ambiguous_... S20191C1::S20191C4 */ AMB_check_base_class_offset(lv, (S20191C2*)(S20191C4*), ABISELECT(544,368), "S20191C1");
    /*is_ambiguous_... S20191C1::S20191C4 */ AMB_check_base_class_offset(lv, (S20191C4*), ABISELECT(544,368), "S20191C1");
    test_class_info(&lv, &cd_S20191C1);
    dp->~S20191C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20191C1(Test_S20191C1, "S20191C1", ABISELECT(2928,1880));

#else // __cplusplus

extern void _ZN8S20191C1C1Ev();
extern void _ZN8S20191C1D2Ev();
Name_Map name_map_S20191C1[] = {
  NSPAIR(_ZN8S20191C1C1Ev),
  NSPAIR(_ZN8S20191C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20191C2;
extern VTBL_ENTRY _ZTI8S20191C2[];
extern  VTBL_ENTRY _ZTV8S20191C2[];
extern Class_Descriptor cd_S20191C2;
extern VTBL_ENTRY _ZTI8S20191C2[];
extern  VTBL_ENTRY _ZTV8S20191C2[];
extern Class_Descriptor cd_S20191C4;
extern VTBL_ENTRY _ZTI8S20191C4[];
extern  VTBL_ENTRY _ZTV8S20191C4[];
extern Class_Descriptor cd_S20191C3;
extern VTBL_ENTRY _ZTI8S20191C3[];
extern  VTBL_ENTRY _ZTV8S20191C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20191C3[];
extern Class_Descriptor cd_S20191C5;
extern VTBL_ENTRY _ZTI8S20191C5[];
extern  VTBL_ENTRY _ZTV8S20191C5[];
extern Class_Descriptor cd_S20191C7;
extern VTBL_ENTRY _ZTI8S20191C7[];
extern  VTBL_ENTRY _ZTV8S20191C7[];
extern Class_Descriptor cd_S20191C2;
extern VTBL_ENTRY _ZTI8S20191C2[];
extern  VTBL_ENTRY _ZTV8S20191C2[];
extern Class_Descriptor cd_S20191C4;
extern VTBL_ENTRY _ZTI8S20191C4[];
extern  VTBL_ENTRY _ZTV8S20191C4[];
extern Class_Descriptor cd_S20191C10;
extern VTBL_ENTRY _ZTI9S20191C10[];
extern  VTBL_ENTRY _ZTV9S20191C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20191C10[];
extern Class_Descriptor cd_S20191C9;
extern VTBL_ENTRY _ZTI8S20191C9[];
extern  VTBL_ENTRY _ZTV8S20191C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20191C9[];
extern Class_Descriptor cd_S20191C8;
extern VTBL_ENTRY _ZTI8S20191C8[];
extern  VTBL_ENTRY _ZTV8S20191C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20191C8[];
extern Class_Descriptor cd_S20191C2;
extern VTBL_ENTRY _ZTI8S20191C2[];
extern  VTBL_ENTRY _ZTV8S20191C2[];
extern Class_Descriptor cd_S20191C4;
extern VTBL_ENTRY _ZTI8S20191C4[];
extern  VTBL_ENTRY _ZTV8S20191C4[];
extern Class_Descriptor cd_S20191C10;
extern VTBL_ENTRY _ZTI9S20191C10[];
extern  VTBL_ENTRY _ZTV9S20191C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20191C10[];
extern Class_Descriptor cd_S20191C9;
extern VTBL_ENTRY _ZTI8S20191C9[];
extern  VTBL_ENTRY _ZTV8S20191C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20191C9[];
extern Class_Descriptor cd_S20191C2;
extern VTBL_ENTRY _ZTI8S20191C2[];
extern  VTBL_ENTRY _ZTV8S20191C2[];
extern Class_Descriptor cd_S20191C4;
extern VTBL_ENTRY _ZTI8S20191C4[];
extern  VTBL_ENTRY _ZTV8S20191C4[];
extern Class_Descriptor cd_S20191C12;
extern VTBL_ENTRY _ZTI9S20191C12[];
extern  VTBL_ENTRY _ZTV9S20191C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20191C12[];
extern Class_Descriptor cd_S20191C6;
extern VTBL_ENTRY _ZTI8S20191C6[];
extern  VTBL_ENTRY _ZTV8S20191C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20191C6[];
extern Class_Descriptor cd_S20191C2;
extern VTBL_ENTRY _ZTI8S20191C2[];
extern  VTBL_ENTRY _ZTV8S20191C2[];
extern Class_Descriptor cd_S20191C4;
extern VTBL_ENTRY _ZTI8S20191C4[];
extern  VTBL_ENTRY _ZTV8S20191C4[];
static Base_Class bases_S20191C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20191C2,    ABISELECT(752,500), //bcp->offset
    65, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    22, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20191C2,    ABISELECT(944,620), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S20191C4,    ABISELECT(944,620), //bcp->offset
    89, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    24, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S20191C3,    ABISELECT(912,608), //bcp->offset
    75, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    23, //bcp->index_in_construction_vtbl_array
    30, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20191C5,    ABISELECT(1152,752), //bcp->offset
    105, //bcp->virtual_function_table_offset
    11, //num_negative_vtable_entries(t, bcp)
    25, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20191C7,    ABISELECT(2624,1680), //bcp->offset
    125, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    26, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    18, //immediately_derived
  0, 1},
  {&cd_S20191C2,    ABISELECT(2640,1688), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S20191C4,    ABISELECT(2640,1688), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S20191C10,    ABISELECT(2640,1688), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    39, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S20191C9,    ABISELECT(2640,1688), //bcp->offset
    148, //bcp->virtual_function_table_offset
    20, //num_negative_vtable_entries(t, bcp)
    28, //bcp->index_in_construction_vtbl_array
    38, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S20191C8,    ABISELECT(2632,1684), //bcp->offset
    135, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    27, //bcp->index_in_construction_vtbl_array
    33, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    18, //immediately_derived
  0, 1},
  {&cd_S20191C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S20191C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S20191C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S20191C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S20191C2,    ABISELECT(288,192), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S20191C4,    ABISELECT(288,192), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S20191C12,    ABISELECT(288,192), //bcp->offset
    37, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    29, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S20191C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20191C2,    ABISELECT(544,368), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    20, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S20191C4,    ABISELECT(544,368), //bcp->offset
    56, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    21, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20191C1[];
extern void _ZN8S20191C22v4Ev();
extern void _ZN8S20191C22v5Ev();
extern void _ZN8S20191C22v6Ev();
extern void _ZN8S20191C22v7Ev();
extern void _ZN8S20191C42v8Ev();
extern void _ZN8S20191C42v9Ev();
extern void _ZN8S20191C43v10Ev();
extern void _ZN9S20191C103v20Ev();
extern void _ZN9S20191C103v21Ev();
extern void _ZN9S20191C103v22Ev();
extern void _ZN9S20191C103v23Ev();
extern void _ZN8S20191C93v24Ev();
extern void _ZN8S20191C93v25Ev();
extern void _ZN8S20191C93v26Ev();
extern void _ZN8S20191C93v27Ev();
extern void _ZN8S20191C1D1Ev();
extern void _ZN8S20191C1D0Ev();
extern void _ZN8S20191C63v43Ev();
extern void _ZN8S20191C63v44Ev();
extern void _ZN8S20191C63v45Ev();
extern void _ZN8S20191C63v46Ev();
extern void _ZN8S20191C63v47Ev();
extern void _ZN8S20191C63v48Ev();
extern void _ZN8S20191C63v49Ev();
extern void _ZN8S20191C63v50Ev();
extern void _ZN8S20191C12v1Ev();
extern void _ZN8S20191C12v2Ev();
extern void _ZN8S20191C12v3Ev();
extern void _ZN8S20191C22v4Ev();
extern void _ZN8S20191C22v5Ev();
extern void _ZN8S20191C22v6Ev();
extern void _ZN8S20191C22v7Ev();
extern void _ZN8S20191C42v8Ev();
extern void _ZN8S20191C42v9Ev();
extern void _ZN8S20191C43v10Ev();
extern void ABISELECT(_ZThn288_N8S20191C1D1Ev,_ZThn192_N8S20191C1D1Ev)();
extern void ABISELECT(_ZThn288_N8S20191C1D0Ev,_ZThn192_N8S20191C1D0Ev)();
extern void _ZN9S20191C123v39Ev();
extern void _ZN9S20191C123v40Ev();
extern void _ZN9S20191C123v41Ev();
extern void _ZN9S20191C123v42Ev();
extern void _ZN8S20191C22v4Ev();
extern void _ZN8S20191C22v5Ev();
extern void _ZN8S20191C22v6Ev();
extern void _ZN8S20191C22v7Ev();
extern void _ZN8S20191C42v8Ev();
extern void _ZN8S20191C42v9Ev();
extern void _ZN8S20191C43v10Ev();
extern void _ZN8S20191C22v4Ev();
extern void _ZN8S20191C22v5Ev();
extern void _ZN8S20191C22v6Ev();
extern void _ZN8S20191C22v7Ev();
extern void _ZN8S20191C33v11Ev();
extern void _ZN8S20191C33v12Ev();
extern void _ZN8S20191C33v13Ev();
extern void _ZN8S20191C33v14Ev();
extern void _ZN8S20191C33v15Ev();
extern void _ZN8S20191C22v4Ev();
extern void _ZN8S20191C22v5Ev();
extern void _ZN8S20191C22v6Ev();
extern void _ZN8S20191C22v7Ev();
extern void _ZN8S20191C42v8Ev();
extern void _ZN8S20191C42v9Ev();
extern void _ZN8S20191C43v10Ev();
extern void _ZN8S20191C53v30Ev();
extern void _ZN8S20191C53v31Ev();
extern void _ZN8S20191C53v32Ev();
extern void _ZN8S20191C53v33Ev();
extern void _ZN8S20191C53v34Ev();
extern void _ZN8S20191C53v35Ev();
extern void _ZN8S20191C53v36Ev();
extern void _ZN8S20191C53v37Ev();
extern void _ZN8S20191C53v38Ev();
extern void _ZN8S20191C73v16Ev();
extern void _ZN8S20191C73v17Ev();
extern void _ZN8S20191C73v18Ev();
extern void _ZN8S20191C73v19Ev();
extern void ABISELECT(_ZTv0_n56_N8S20191C1D1Ev,_ZTv0_n28_N8S20191C1D1Ev)();
extern void ABISELECT(_ZThn2632_N8S20191C1D1Ev,_ZThn1684_N8S20191C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S20191C1D0Ev,_ZTv0_n28_N8S20191C1D0Ev)();
extern void ABISELECT(_ZThn2632_N8S20191C1D0Ev,_ZThn1684_N8S20191C1D0Ev)() __attribute__((weak));
extern void _ZN8S20191C83v28Ev();
extern void _ZN8S20191C83v29Ev();
extern void _ZN8S20191C22v4Ev();
extern void _ZN8S20191C22v5Ev();
extern void _ZN8S20191C22v6Ev();
extern void _ZN8S20191C22v7Ev();
extern void _ZN8S20191C42v8Ev();
extern void _ZN8S20191C42v9Ev();
extern void _ZN8S20191C43v10Ev();
extern void _ZN9S20191C103v20Ev();
extern void _ZN9S20191C103v21Ev();
extern void _ZN9S20191C103v22Ev();
extern void _ZN9S20191C103v23Ev();
extern void _ZN8S20191C93v24Ev();
extern void _ZN8S20191C93v25Ev();
extern void _ZN8S20191C93v26Ev();
extern void _ZN8S20191C93v27Ev();
static  VTBL_ENTRY vtc_S20191C1[] = {
  ABISELECT(1152,752),
  ABISELECT(2640,1688),
  ABISELECT(2632,1684),
  ABISELECT(2624,1680),
  ABISELECT(944,620),
  ABISELECT(912,608),
  ABISELECT(752,500),
  0,
  (VTBL_ENTRY)&(_ZTI8S20191C1[0]),
  (VTBL_ENTRY)&_ZN8S20191C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20191C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20191C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20191C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20191C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20191C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20191C43v10Ev,
  (VTBL_ENTRY)&_ZN9S20191C103v20Ev,
  (VTBL_ENTRY)&_ZN9S20191C103v21Ev,
  (VTBL_ENTRY)&_ZN9S20191C103v22Ev,
  (VTBL_ENTRY)&_ZN9S20191C103v23Ev,
  (VTBL_ENTRY)&_ZN8S20191C93v24Ev,
  (VTBL_ENTRY)&_ZN8S20191C93v25Ev,
  (VTBL_ENTRY)&_ZN8S20191C93v26Ev,
  (VTBL_ENTRY)&_ZN8S20191C93v27Ev,
  (VTBL_ENTRY)&_ZN8S20191C1D1Ev,
  (VTBL_ENTRY)&_ZN8S20191C1D0Ev,
  (VTBL_ENTRY)&_ZN8S20191C63v43Ev,
  (VTBL_ENTRY)&_ZN8S20191C63v44Ev,
  (VTBL_ENTRY)&_ZN8S20191C63v45Ev,
  (VTBL_ENTRY)&_ZN8S20191C63v46Ev,
  (VTBL_ENTRY)&_ZN8S20191C63v47Ev,
  (VTBL_ENTRY)&_ZN8S20191C63v48Ev,
  (VTBL_ENTRY)&_ZN8S20191C63v49Ev,
  (VTBL_ENTRY)&_ZN8S20191C63v50Ev,
  (VTBL_ENTRY)&_ZN8S20191C12v1Ev,
  (VTBL_ENTRY)&_ZN8S20191C12v2Ev,
  (VTBL_ENTRY)&_ZN8S20191C12v3Ev,
  ABISELECT(864,560),
  ABISELECT(656,428),
  ABISELECT(624,416),
  ABISELECT(464,308),
  ABISELECT(-288,-192),
  (VTBL_ENTRY)&(_ZTI8S20191C1[0]),
  (VTBL_ENTRY)&_ZN8S20191C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20191C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20191C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20191C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20191C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20191C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20191C43v10Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn288_N8S20191C1D1Ev,_ZThn192_N8S20191C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn288_N8S20191C1D0Ev,_ZThn192_N8S20191C1D0Ev),
  (VTBL_ENTRY)&_ZN9S20191C123v39Ev,
  (VTBL_ENTRY)&_ZN9S20191C123v40Ev,
  (VTBL_ENTRY)&_ZN9S20191C123v41Ev,
  (VTBL_ENTRY)&_ZN9S20191C123v42Ev,
  ABISELECT(-544,-368),
  (VTBL_ENTRY)&(_ZTI8S20191C1[0]),
  (VTBL_ENTRY)&_ZN8S20191C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20191C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20191C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20191C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20191C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20191C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20191C43v10Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-752,-500),
  (VTBL_ENTRY)&(_ZTI8S20191C1[0]),
  (VTBL_ENTRY)&_ZN8S20191C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20191C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20191C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20191C22v7Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(32,12),
  ABISELECT(-160,-108),
  ABISELECT(-912,-608),
  (VTBL_ENTRY)&(_ZTI8S20191C1[0]),
  (VTBL_ENTRY)&_ZN8S20191C33v11Ev,
  (VTBL_ENTRY)&_ZN8S20191C33v12Ev,
  (VTBL_ENTRY)&_ZN8S20191C33v13Ev,
  (VTBL_ENTRY)&_ZN8S20191C33v14Ev,
  (VTBL_ENTRY)&_ZN8S20191C33v15Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-944,-620),
  (VTBL_ENTRY)&(_ZTI8S20191C1[0]),
  (VTBL_ENTRY)&_ZN8S20191C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20191C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20191C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20191C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20191C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20191C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20191C43v10Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-1152,-752),
  (VTBL_ENTRY)&(_ZTI8S20191C1[0]),
  (VTBL_ENTRY)&_ZN8S20191C53v30Ev,
  (VTBL_ENTRY)&_ZN8S20191C53v31Ev,
  (VTBL_ENTRY)&_ZN8S20191C53v32Ev,
  (VTBL_ENTRY)&_ZN8S20191C53v33Ev,
  (VTBL_ENTRY)&_ZN8S20191C53v34Ev,
  (VTBL_ENTRY)&_ZN8S20191C53v35Ev,
  (VTBL_ENTRY)&_ZN8S20191C53v36Ev,
  (VTBL_ENTRY)&_ZN8S20191C53v37Ev,
  (VTBL_ENTRY)&_ZN8S20191C53v38Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-2624,-1680),
  (VTBL_ENTRY)&(_ZTI8S20191C1[0]),
  (VTBL_ENTRY)&_ZN8S20191C73v16Ev,
  (VTBL_ENTRY)&_ZN8S20191C73v17Ev,
  (VTBL_ENTRY)&_ZN8S20191C73v18Ev,
  (VTBL_ENTRY)&_ZN8S20191C73v19Ev,
  0,
  0,
  ABISELECT(-2632,-1684),
  ABISELECT(-1688,-1064),
  ABISELECT(-1880,-1184),
  ABISELECT(-1720,-1076),
  ABISELECT(8,4),
  ABISELECT(-2632,-1684),
  (VTBL_ENTRY)&(_ZTI8S20191C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S20191C1D1Ev,_ZTv0_n28_N8S20191C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S20191C1D0Ev,_ZTv0_n28_N8S20191C1D0Ev),
  (VTBL_ENTRY)&_ZN8S20191C83v28Ev,
  (VTBL_ENTRY)&_ZN8S20191C83v29Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-1696,-1068),
  ABISELECT(-1728,-1080),
  ABISELECT(-1888,-1188),
  ABISELECT(-2640,-1688),
  (VTBL_ENTRY)&(_ZTI8S20191C1[0]),
  (VTBL_ENTRY)&_ZN8S20191C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20191C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20191C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20191C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20191C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20191C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20191C43v10Ev,
  (VTBL_ENTRY)&_ZN9S20191C103v20Ev,
  (VTBL_ENTRY)&_ZN9S20191C103v21Ev,
  (VTBL_ENTRY)&_ZN9S20191C103v22Ev,
  (VTBL_ENTRY)&_ZN9S20191C103v23Ev,
  (VTBL_ENTRY)&_ZN8S20191C93v24Ev,
  (VTBL_ENTRY)&_ZN8S20191C93v25Ev,
  (VTBL_ENTRY)&_ZN8S20191C93v26Ev,
  (VTBL_ENTRY)&_ZN8S20191C93v27Ev,
};
extern VTBL_ENTRY _ZTV8S20191C1[];
extern void _ZN8S20191C22v4Ev();
extern void _ZN8S20191C22v5Ev();
extern void _ZN8S20191C22v6Ev();
extern void _ZN8S20191C22v7Ev();
extern void _ZN8S20191C42v8Ev();
extern void _ZN8S20191C42v9Ev();
extern void _ZN8S20191C43v10Ev();
extern void _ZN9S20191C103v20Ev();
extern void _ZN9S20191C103v21Ev();
extern void _ZN9S20191C103v22Ev();
extern void _ZN9S20191C103v23Ev();
extern void _ZN8S20191C93v24Ev();
extern void _ZN8S20191C93v25Ev();
extern void _ZN8S20191C93v26Ev();
extern void _ZN8S20191C93v27Ev();
extern void _ZN8S20191C6D1Ev();
extern void _ZN8S20191C6D0Ev();
extern void _ZN8S20191C63v43Ev();
extern void _ZN8S20191C63v44Ev();
extern void _ZN8S20191C63v45Ev();
extern void _ZN8S20191C63v46Ev();
extern void _ZN8S20191C63v47Ev();
extern void _ZN8S20191C63v48Ev();
extern void _ZN8S20191C63v49Ev();
extern void _ZN8S20191C63v50Ev();
static  VTBL_ENTRY _tg__ZTV8S20191C6__8S20191C1[] = {
  ABISELECT(1152,752),
  ABISELECT(2640,1688),
  ABISELECT(2632,1684),
  ABISELECT(2624,1680),
  ABISELECT(944,620),
  ABISELECT(912,608),
  ABISELECT(752,500),
  0,
  (VTBL_ENTRY)&(_ZTI8S20191C6[0]),
  (VTBL_ENTRY)&_ZN8S20191C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20191C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20191C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20191C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20191C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20191C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20191C43v10Ev,
  (VTBL_ENTRY)&_ZN9S20191C103v20Ev,
  (VTBL_ENTRY)&_ZN9S20191C103v21Ev,
  (VTBL_ENTRY)&_ZN9S20191C103v22Ev,
  (VTBL_ENTRY)&_ZN9S20191C103v23Ev,
  (VTBL_ENTRY)&_ZN8S20191C93v24Ev,
  (VTBL_ENTRY)&_ZN8S20191C93v25Ev,
  (VTBL_ENTRY)&_ZN8S20191C93v26Ev,
  (VTBL_ENTRY)&_ZN8S20191C93v27Ev,
  (VTBL_ENTRY)&_ZN8S20191C6D1Ev,
  (VTBL_ENTRY)&_ZN8S20191C6D0Ev,
  (VTBL_ENTRY)&_ZN8S20191C63v43Ev,
  (VTBL_ENTRY)&_ZN8S20191C63v44Ev,
  (VTBL_ENTRY)&_ZN8S20191C63v45Ev,
  (VTBL_ENTRY)&_ZN8S20191C63v46Ev,
  (VTBL_ENTRY)&_ZN8S20191C63v47Ev,
  (VTBL_ENTRY)&_ZN8S20191C63v48Ev,
  (VTBL_ENTRY)&_ZN8S20191C63v49Ev,
  (VTBL_ENTRY)&_ZN8S20191C63v50Ev,
};
extern void _ZN8S20191C22v4Ev();
extern void _ZN8S20191C22v5Ev();
extern void _ZN8S20191C22v6Ev();
extern void _ZN8S20191C22v7Ev();
extern void _ZN8S20191C42v8Ev();
extern void _ZN8S20191C42v9Ev();
extern void _ZN8S20191C43v10Ev();
extern void _ZN9S20191C103v20Ev();
extern void _ZN9S20191C103v21Ev();
extern void _ZN9S20191C103v22Ev();
extern void _ZN9S20191C103v23Ev();
extern void _ZN8S20191C93v24Ev();
extern void _ZN8S20191C93v25Ev();
extern void _ZN8S20191C93v26Ev();
extern void _ZN8S20191C93v27Ev();
static  VTBL_ENTRY _tg__ZTV8S20191C98S20191C6__A1__8S20191C1[] = {
  ABISELECT(944,620),
  ABISELECT(912,608),
  ABISELECT(752,500),
  0,
  (VTBL_ENTRY)&(_ZTI8S20191C9[0]),
  (VTBL_ENTRY)&_ZN8S20191C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20191C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20191C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20191C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20191C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20191C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20191C43v10Ev,
  (VTBL_ENTRY)&_ZN9S20191C103v20Ev,
  (VTBL_ENTRY)&_ZN9S20191C103v21Ev,
  (VTBL_ENTRY)&_ZN9S20191C103v22Ev,
  (VTBL_ENTRY)&_ZN9S20191C103v23Ev,
  (VTBL_ENTRY)&_ZN8S20191C93v24Ev,
  (VTBL_ENTRY)&_ZN8S20191C93v25Ev,
  (VTBL_ENTRY)&_ZN8S20191C93v26Ev,
  (VTBL_ENTRY)&_ZN8S20191C93v27Ev,
};
extern void _ZN8S20191C22v4Ev();
extern void _ZN8S20191C22v5Ev();
extern void _ZN8S20191C22v6Ev();
extern void _ZN8S20191C22v7Ev();
extern void _ZN8S20191C42v8Ev();
extern void _ZN8S20191C42v9Ev();
extern void _ZN8S20191C43v10Ev();
extern void _ZN9S20191C103v20Ev();
extern void _ZN9S20191C103v21Ev();
extern void _ZN9S20191C103v22Ev();
extern void _ZN9S20191C103v23Ev();
static  VTBL_ENTRY _tg__ZTV9S20191C108S20191C98S20191C6__A1__8S20191C1[] = {
  ABISELECT(752,500),
  0,
  (VTBL_ENTRY)&(_ZTI9S20191C10[0]),
  (VTBL_ENTRY)&_ZN8S20191C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20191C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20191C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20191C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20191C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20191C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20191C43v10Ev,
  (VTBL_ENTRY)&_ZN9S20191C103v20Ev,
  (VTBL_ENTRY)&_ZN9S20191C103v21Ev,
  (VTBL_ENTRY)&_ZN9S20191C103v22Ev,
  (VTBL_ENTRY)&_ZN9S20191C103v23Ev,
};
extern void _ZN8S20191C22v4Ev();
extern void _ZN8S20191C22v5Ev();
extern void _ZN8S20191C22v6Ev();
extern void _ZN8S20191C22v7Ev();
static  VTBL_ENTRY _tg__ZTV8S20191C2__9S20191C108S20191C98S20191C6__A1__8S20191C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-752,-500),
  (VTBL_ENTRY)&(_ZTI9S20191C10[0]),
  (VTBL_ENTRY)&_ZN8S20191C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20191C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20191C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20191C22v7Ev,
};
extern void _ZN8S20191C33v11Ev();
extern void _ZN8S20191C33v12Ev();
extern void _ZN8S20191C33v13Ev();
extern void _ZN8S20191C33v14Ev();
extern void _ZN8S20191C33v15Ev();
static  VTBL_ENTRY _tg__ZTV8S20191C3__8S20191C98S20191C6__A1__8S20191C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(32,12),
  ABISELECT(-160,-108),
  ABISELECT(-912,-608),
  (VTBL_ENTRY)&(_ZTI8S20191C9[0]),
  (VTBL_ENTRY)&_ZN8S20191C33v11Ev,
  (VTBL_ENTRY)&_ZN8S20191C33v12Ev,
  (VTBL_ENTRY)&_ZN8S20191C33v13Ev,
  (VTBL_ENTRY)&_ZN8S20191C33v14Ev,
  (VTBL_ENTRY)&_ZN8S20191C33v15Ev,
};
extern void _ZN8S20191C22v4Ev();
extern void _ZN8S20191C22v5Ev();
extern void _ZN8S20191C22v6Ev();
extern void _ZN8S20191C22v7Ev();
static  VTBL_ENTRY _tg__ZTV8S20191C2__8S20191C98S20191C6__A1__8S20191C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-752,-500),
  (VTBL_ENTRY)&(_ZTI8S20191C9[0]),
  (VTBL_ENTRY)&_ZN8S20191C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20191C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20191C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20191C22v7Ev,
};
extern void _ZN8S20191C22v4Ev();
extern void _ZN8S20191C22v5Ev();
extern void _ZN8S20191C22v6Ev();
extern void _ZN8S20191C22v7Ev();
extern void _ZN8S20191C42v8Ev();
extern void _ZN8S20191C42v9Ev();
extern void _ZN8S20191C43v10Ev();
static  VTBL_ENTRY _tg__ZTV8S20191C4__8S20191C98S20191C6__A1__8S20191C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-944,-620),
  (VTBL_ENTRY)&(_ZTI8S20191C9[0]),
  (VTBL_ENTRY)&_ZN8S20191C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20191C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20191C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20191C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20191C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20191C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20191C43v10Ev,
};
extern void _ZN8S20191C22v4Ev();
extern void _ZN8S20191C22v5Ev();
extern void _ZN8S20191C22v6Ev();
extern void _ZN8S20191C22v7Ev();
extern void _ZN8S20191C42v8Ev();
extern void _ZN8S20191C42v9Ev();
extern void _ZN8S20191C43v10Ev();
extern void _ZN9S20191C12D1Ev();
extern void _ZN9S20191C12D0Ev();
extern void _ZN9S20191C123v39Ev();
extern void _ZN9S20191C123v40Ev();
extern void _ZN9S20191C123v41Ev();
extern void _ZN9S20191C123v42Ev();
static  VTBL_ENTRY _tg__ZTV9S20191C128S20191C6__8S20191C1[] = {
  ABISELECT(864,560),
  ABISELECT(656,428),
  ABISELECT(624,416),
  ABISELECT(464,308),
  0,
  (VTBL_ENTRY)&(_ZTI9S20191C12[0]),
  (VTBL_ENTRY)&_ZN8S20191C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20191C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20191C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20191C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20191C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20191C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20191C43v10Ev,
  (VTBL_ENTRY)&_ZN9S20191C12D1Ev,
  (VTBL_ENTRY)&_ZN9S20191C12D0Ev,
  (VTBL_ENTRY)&_ZN9S20191C123v39Ev,
  (VTBL_ENTRY)&_ZN9S20191C123v40Ev,
  (VTBL_ENTRY)&_ZN9S20191C123v41Ev,
  (VTBL_ENTRY)&_ZN9S20191C123v42Ev,
};
extern void _ZN8S20191C22v4Ev();
extern void _ZN8S20191C22v5Ev();
extern void _ZN8S20191C22v6Ev();
extern void _ZN8S20191C22v7Ev();
static  VTBL_ENTRY _tg__ZTV8S20191C2__9S20191C128S20191C6__8S20191C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-464,-308),
  (VTBL_ENTRY)&(_ZTI9S20191C12[0]),
  (VTBL_ENTRY)&_ZN8S20191C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20191C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20191C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20191C22v7Ev,
};
extern void _ZN8S20191C33v11Ev();
extern void _ZN8S20191C33v12Ev();
extern void _ZN8S20191C33v13Ev();
extern void _ZN8S20191C33v14Ev();
extern void _ZN8S20191C33v15Ev();
static  VTBL_ENTRY _tg__ZTV8S20191C3__9S20191C128S20191C6__8S20191C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(32,12),
  ABISELECT(-160,-108),
  ABISELECT(-624,-416),
  (VTBL_ENTRY)&(_ZTI9S20191C12[0]),
  (VTBL_ENTRY)&_ZN8S20191C33v11Ev,
  (VTBL_ENTRY)&_ZN8S20191C33v12Ev,
  (VTBL_ENTRY)&_ZN8S20191C33v13Ev,
  (VTBL_ENTRY)&_ZN8S20191C33v14Ev,
  (VTBL_ENTRY)&_ZN8S20191C33v15Ev,
};
extern void _ZN8S20191C22v4Ev();
extern void _ZN8S20191C22v5Ev();
extern void _ZN8S20191C22v6Ev();
extern void _ZN8S20191C22v7Ev();
extern void _ZN8S20191C42v8Ev();
extern void _ZN8S20191C42v9Ev();
extern void _ZN8S20191C43v10Ev();
static  VTBL_ENTRY _tg__ZTV8S20191C4__9S20191C128S20191C6__8S20191C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-656,-428),
  (VTBL_ENTRY)&(_ZTI9S20191C12[0]),
  (VTBL_ENTRY)&_ZN8S20191C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20191C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20191C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20191C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20191C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20191C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20191C43v10Ev,
};
extern void _ZN8S20191C53v30Ev();
extern void _ZN8S20191C53v31Ev();
extern void _ZN8S20191C53v32Ev();
extern void _ZN8S20191C53v33Ev();
extern void _ZN8S20191C53v34Ev();
extern void _ZN8S20191C53v35Ev();
extern void _ZN8S20191C53v36Ev();
extern void _ZN8S20191C53v37Ev();
extern void _ZN8S20191C53v38Ev();
static  VTBL_ENTRY _tg__ZTV8S20191C5__9S20191C128S20191C6__8S20191C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-864,-560),
  (VTBL_ENTRY)&(_ZTI9S20191C12[0]),
  (VTBL_ENTRY)&_ZN8S20191C53v30Ev,
  (VTBL_ENTRY)&_ZN8S20191C53v31Ev,
  (VTBL_ENTRY)&_ZN8S20191C53v32Ev,
  (VTBL_ENTRY)&_ZN8S20191C53v33Ev,
  (VTBL_ENTRY)&_ZN8S20191C53v34Ev,
  (VTBL_ENTRY)&_ZN8S20191C53v35Ev,
  (VTBL_ENTRY)&_ZN8S20191C53v36Ev,
  (VTBL_ENTRY)&_ZN8S20191C53v37Ev,
  (VTBL_ENTRY)&_ZN8S20191C53v38Ev,
};
extern void _ZN8S20191C73v16Ev();
extern void _ZN8S20191C73v17Ev();
extern void _ZN8S20191C73v18Ev();
extern void _ZN8S20191C73v19Ev();
static  VTBL_ENTRY _tg__ZTV8S20191C7__8S20191C6__8S20191C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-2624,-1680),
  (VTBL_ENTRY)&(_ZTI8S20191C6[0]),
  (VTBL_ENTRY)&_ZN8S20191C73v16Ev,
  (VTBL_ENTRY)&_ZN8S20191C73v17Ev,
  (VTBL_ENTRY)&_ZN8S20191C73v18Ev,
  (VTBL_ENTRY)&_ZN8S20191C73v19Ev,
};
extern void ABISELECT(_ZTv0_n56_N8S20191C6D1Ev,_ZTv0_n28_N8S20191C6D1Ev)();
extern void ABISELECT(_ZThn2632_N8S20191C6D1Ev,_ZThn1684_N8S20191C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S20191C6D0Ev,_ZTv0_n28_N8S20191C6D0Ev)();
extern void ABISELECT(_ZThn2632_N8S20191C6D0Ev,_ZThn1684_N8S20191C6D0Ev)() __attribute__((weak));
extern void _ZN8S20191C83v28Ev();
extern void _ZN8S20191C83v29Ev();
static  VTBL_ENTRY _tg__ZTV8S20191C8__8S20191C6__8S20191C1[] = {
  0,
  0,
  ABISELECT(-2632,-1684),
  ABISELECT(-1688,-1064),
  ABISELECT(-1880,-1184),
  ABISELECT(-1720,-1076),
  ABISELECT(8,4),
  ABISELECT(-2632,-1684),
  (VTBL_ENTRY)&(_ZTI8S20191C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S20191C6D1Ev,_ZTv0_n28_N8S20191C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S20191C6D0Ev,_ZTv0_n28_N8S20191C6D0Ev),
  (VTBL_ENTRY)&_ZN8S20191C83v28Ev,
  (VTBL_ENTRY)&_ZN8S20191C83v29Ev,
};
extern void _ZN8S20191C22v4Ev();
extern void _ZN8S20191C22v5Ev();
extern void _ZN8S20191C22v6Ev();
extern void _ZN8S20191C22v7Ev();
extern void _ZN8S20191C42v8Ev();
extern void _ZN8S20191C42v9Ev();
extern void _ZN8S20191C43v10Ev();
extern void _ZN9S20191C103v20Ev();
extern void _ZN9S20191C103v21Ev();
extern void _ZN9S20191C103v22Ev();
extern void _ZN9S20191C103v23Ev();
extern void _ZN8S20191C93v24Ev();
extern void _ZN8S20191C93v25Ev();
extern void _ZN8S20191C93v26Ev();
extern void _ZN8S20191C93v27Ev();
static  VTBL_ENTRY _tg__ZTV8S20191C9__8S20191C6__8S20191C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-1696,-1068),
  ABISELECT(-1728,-1080),
  ABISELECT(-1888,-1188),
  ABISELECT(-2640,-1688),
  (VTBL_ENTRY)&(_ZTI8S20191C6[0]),
  (VTBL_ENTRY)&_ZN8S20191C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20191C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20191C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20191C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20191C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20191C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20191C43v10Ev,
  (VTBL_ENTRY)&_ZN9S20191C103v20Ev,
  (VTBL_ENTRY)&_ZN9S20191C103v21Ev,
  (VTBL_ENTRY)&_ZN9S20191C103v22Ev,
  (VTBL_ENTRY)&_ZN9S20191C103v23Ev,
  (VTBL_ENTRY)&_ZN8S20191C93v24Ev,
  (VTBL_ENTRY)&_ZN8S20191C93v25Ev,
  (VTBL_ENTRY)&_ZN8S20191C93v26Ev,
  (VTBL_ENTRY)&_ZN8S20191C93v27Ev,
};
extern void _ZN8S20191C33v11Ev();
extern void _ZN8S20191C33v12Ev();
extern void _ZN8S20191C33v13Ev();
extern void _ZN8S20191C33v14Ev();
extern void _ZN8S20191C33v15Ev();
static  VTBL_ENTRY _tg__ZTV8S20191C3__8S20191C6__8S20191C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(32,12),
  ABISELECT(-160,-108),
  ABISELECT(-912,-608),
  (VTBL_ENTRY)&(_ZTI8S20191C6[0]),
  (VTBL_ENTRY)&_ZN8S20191C33v11Ev,
  (VTBL_ENTRY)&_ZN8S20191C33v12Ev,
  (VTBL_ENTRY)&_ZN8S20191C33v13Ev,
  (VTBL_ENTRY)&_ZN8S20191C33v14Ev,
  (VTBL_ENTRY)&_ZN8S20191C33v15Ev,
};
extern void _ZN8S20191C22v4Ev();
extern void _ZN8S20191C22v5Ev();
extern void _ZN8S20191C22v6Ev();
extern void _ZN8S20191C22v7Ev();
static  VTBL_ENTRY _tg__ZTV8S20191C2__8S20191C6__8S20191C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-752,-500),
  (VTBL_ENTRY)&(_ZTI8S20191C6[0]),
  (VTBL_ENTRY)&_ZN8S20191C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20191C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20191C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20191C22v7Ev,
};
extern void _ZN8S20191C22v4Ev();
extern void _ZN8S20191C22v5Ev();
extern void _ZN8S20191C22v6Ev();
extern void _ZN8S20191C22v7Ev();
extern void _ZN8S20191C42v8Ev();
extern void _ZN8S20191C42v9Ev();
extern void _ZN8S20191C43v10Ev();
static  VTBL_ENTRY _tg__ZTV8S20191C4__8S20191C6__8S20191C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-944,-620),
  (VTBL_ENTRY)&(_ZTI8S20191C6[0]),
  (VTBL_ENTRY)&_ZN8S20191C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20191C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20191C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20191C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20191C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20191C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20191C43v10Ev,
};
extern void _ZN8S20191C22v4Ev();
extern void _ZN8S20191C22v5Ev();
extern void _ZN8S20191C22v6Ev();
extern void _ZN8S20191C22v7Ev();
extern void _ZN8S20191C42v8Ev();
extern void _ZN8S20191C42v9Ev();
extern void _ZN8S20191C43v10Ev();
extern void ABISELECT(_ZThn288_N8S20191C6D1Ev,_ZThn192_N8S20191C6D1Ev)();
extern void ABISELECT(_ZThn288_N8S20191C6D0Ev,_ZThn192_N8S20191C6D0Ev)();
extern void _ZN9S20191C123v39Ev();
extern void _ZN9S20191C123v40Ev();
extern void _ZN9S20191C123v41Ev();
extern void _ZN9S20191C123v42Ev();
static  VTBL_ENTRY _tg__ZTV9S20191C12__8S20191C6__8S20191C1[] = {
  ABISELECT(864,560),
  ABISELECT(656,428),
  ABISELECT(624,416),
  ABISELECT(464,308),
  ABISELECT(-288,-192),
  (VTBL_ENTRY)&(_ZTI8S20191C6[0]),
  (VTBL_ENTRY)&_ZN8S20191C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20191C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20191C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20191C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20191C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20191C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20191C43v10Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn288_N8S20191C6D1Ev,_ZThn192_N8S20191C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn288_N8S20191C6D0Ev,_ZThn192_N8S20191C6D0Ev),
  (VTBL_ENTRY)&_ZN9S20191C123v39Ev,
  (VTBL_ENTRY)&_ZN9S20191C123v40Ev,
  (VTBL_ENTRY)&_ZN9S20191C123v41Ev,
  (VTBL_ENTRY)&_ZN9S20191C123v42Ev,
};
extern void _ZN8S20191C53v30Ev();
extern void _ZN8S20191C53v31Ev();
extern void _ZN8S20191C53v32Ev();
extern void _ZN8S20191C53v33Ev();
extern void _ZN8S20191C53v34Ev();
extern void _ZN8S20191C53v35Ev();
extern void _ZN8S20191C53v36Ev();
extern void _ZN8S20191C53v37Ev();
extern void _ZN8S20191C53v38Ev();
static  VTBL_ENTRY _tg__ZTV8S20191C5__8S20191C6__8S20191C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-1152,-752),
  (VTBL_ENTRY)&(_ZTI8S20191C6[0]),
  (VTBL_ENTRY)&_ZN8S20191C53v30Ev,
  (VTBL_ENTRY)&_ZN8S20191C53v31Ev,
  (VTBL_ENTRY)&_ZN8S20191C53v32Ev,
  (VTBL_ENTRY)&_ZN8S20191C53v33Ev,
  (VTBL_ENTRY)&_ZN8S20191C53v34Ev,
  (VTBL_ENTRY)&_ZN8S20191C53v35Ev,
  (VTBL_ENTRY)&_ZN8S20191C53v36Ev,
  (VTBL_ENTRY)&_ZN8S20191C53v37Ev,
  (VTBL_ENTRY)&_ZN8S20191C53v38Ev,
};
extern void _ZN8S20191C33v11Ev();
extern void _ZN8S20191C33v12Ev();
extern void _ZN8S20191C33v13Ev();
extern void _ZN8S20191C33v14Ev();
extern void _ZN8S20191C33v15Ev();
static  VTBL_ENTRY _tg__ZTV8S20191C3__8S20191C1[] = {
  ABISELECT(32,12),
  ABISELECT(-160,-108),
  0,
  (VTBL_ENTRY)&(_ZTI8S20191C3[0]),
  (VTBL_ENTRY)&_ZN8S20191C33v11Ev,
  (VTBL_ENTRY)&_ZN8S20191C33v12Ev,
  (VTBL_ENTRY)&_ZN8S20191C33v13Ev,
  (VTBL_ENTRY)&_ZN8S20191C33v14Ev,
  (VTBL_ENTRY)&_ZN8S20191C33v15Ev,
};
extern void _ZN8S20191C22v4Ev();
extern void _ZN8S20191C22v5Ev();
extern void _ZN8S20191C22v6Ev();
extern void _ZN8S20191C22v7Ev();
static  VTBL_ENTRY _tg__ZTV8S20191C2__8S20191C3__8S20191C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(160,108),
  (VTBL_ENTRY)&(_ZTI8S20191C3[0]),
  (VTBL_ENTRY)&_ZN8S20191C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20191C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20191C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20191C22v7Ev,
};
extern void _ZN8S20191C22v4Ev();
extern void _ZN8S20191C22v5Ev();
extern void _ZN8S20191C22v6Ev();
extern void _ZN8S20191C22v7Ev();
extern void _ZN8S20191C42v8Ev();
extern void _ZN8S20191C42v9Ev();
extern void _ZN8S20191C43v10Ev();
static  VTBL_ENTRY _tg__ZTV8S20191C4__8S20191C3__8S20191C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-32,-12),
  (VTBL_ENTRY)&(_ZTI8S20191C3[0]),
  (VTBL_ENTRY)&_ZN8S20191C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20191C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20191C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20191C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20191C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20191C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20191C43v10Ev,
};
extern void _ZN8S20191C8D1Ev();
extern void _ZN8S20191C8D0Ev();
extern void _ZN8S20191C83v28Ev();
extern void _ZN8S20191C83v29Ev();
static  VTBL_ENTRY _tg__ZTV8S20191C8__8S20191C1[] = {
  ABISELECT(-1688,-1064),
  ABISELECT(-1880,-1184),
  ABISELECT(-1720,-1076),
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S20191C8[0]),
  (VTBL_ENTRY)&_ZN8S20191C8D1Ev,
  (VTBL_ENTRY)&_ZN8S20191C8D0Ev,
  (VTBL_ENTRY)&_ZN8S20191C83v28Ev,
  (VTBL_ENTRY)&_ZN8S20191C83v29Ev,
};
extern void _ZN8S20191C22v4Ev();
extern void _ZN8S20191C22v5Ev();
extern void _ZN8S20191C22v6Ev();
extern void _ZN8S20191C22v7Ev();
extern void _ZN8S20191C42v8Ev();
extern void _ZN8S20191C42v9Ev();
extern void _ZN8S20191C43v10Ev();
extern void _ZN9S20191C103v20Ev();
extern void _ZN9S20191C103v21Ev();
extern void _ZN9S20191C103v22Ev();
extern void _ZN9S20191C103v23Ev();
extern void _ZN8S20191C93v24Ev();
extern void _ZN8S20191C93v25Ev();
extern void _ZN8S20191C93v26Ev();
extern void _ZN8S20191C93v27Ev();
static  VTBL_ENTRY _tg__ZTV8S20191C9__8S20191C8__8S20191C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-1696,-1068),
  ABISELECT(-1728,-1080),
  ABISELECT(-1888,-1188),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S20191C8[0]),
  (VTBL_ENTRY)&_ZN8S20191C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20191C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20191C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20191C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20191C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20191C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20191C43v10Ev,
  (VTBL_ENTRY)&_ZN9S20191C103v20Ev,
  (VTBL_ENTRY)&_ZN9S20191C103v21Ev,
  (VTBL_ENTRY)&_ZN9S20191C103v22Ev,
  (VTBL_ENTRY)&_ZN9S20191C103v23Ev,
  (VTBL_ENTRY)&_ZN8S20191C93v24Ev,
  (VTBL_ENTRY)&_ZN8S20191C93v25Ev,
  (VTBL_ENTRY)&_ZN8S20191C93v26Ev,
  (VTBL_ENTRY)&_ZN8S20191C93v27Ev,
};
extern void _ZN8S20191C33v11Ev();
extern void _ZN8S20191C33v12Ev();
extern void _ZN8S20191C33v13Ev();
extern void _ZN8S20191C33v14Ev();
extern void _ZN8S20191C33v15Ev();
static  VTBL_ENTRY _tg__ZTV8S20191C3__8S20191C8__8S20191C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(32,12),
  ABISELECT(-160,-108),
  ABISELECT(1720,1076),
  (VTBL_ENTRY)&(_ZTI8S20191C8[0]),
  (VTBL_ENTRY)&_ZN8S20191C33v11Ev,
  (VTBL_ENTRY)&_ZN8S20191C33v12Ev,
  (VTBL_ENTRY)&_ZN8S20191C33v13Ev,
  (VTBL_ENTRY)&_ZN8S20191C33v14Ev,
  (VTBL_ENTRY)&_ZN8S20191C33v15Ev,
};
extern void _ZN8S20191C22v4Ev();
extern void _ZN8S20191C22v5Ev();
extern void _ZN8S20191C22v6Ev();
extern void _ZN8S20191C22v7Ev();
static  VTBL_ENTRY _tg__ZTV8S20191C2__8S20191C8__8S20191C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(1880,1184),
  (VTBL_ENTRY)&(_ZTI8S20191C8[0]),
  (VTBL_ENTRY)&_ZN8S20191C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20191C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20191C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20191C22v7Ev,
};
extern void _ZN8S20191C22v4Ev();
extern void _ZN8S20191C22v5Ev();
extern void _ZN8S20191C22v6Ev();
extern void _ZN8S20191C22v7Ev();
extern void _ZN8S20191C42v8Ev();
extern void _ZN8S20191C42v9Ev();
extern void _ZN8S20191C43v10Ev();
static  VTBL_ENTRY _tg__ZTV8S20191C4__8S20191C8__8S20191C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(1688,1064),
  (VTBL_ENTRY)&(_ZTI8S20191C8[0]),
  (VTBL_ENTRY)&_ZN8S20191C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20191C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20191C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20191C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20191C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20191C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20191C43v10Ev,
};
extern void _ZN8S20191C22v4Ev();
extern void _ZN8S20191C22v5Ev();
extern void _ZN8S20191C22v6Ev();
extern void _ZN8S20191C22v7Ev();
extern void _ZN8S20191C42v8Ev();
extern void _ZN8S20191C42v9Ev();
extern void _ZN8S20191C43v10Ev();
extern void _ZN9S20191C103v20Ev();
extern void _ZN9S20191C103v21Ev();
extern void _ZN9S20191C103v22Ev();
extern void _ZN9S20191C103v23Ev();
extern void _ZN8S20191C93v24Ev();
extern void _ZN8S20191C93v25Ev();
extern void _ZN8S20191C93v26Ev();
extern void _ZN8S20191C93v27Ev();
static  VTBL_ENTRY _tg__ZTV8S20191C9__8S20191C1[] = {
  ABISELECT(-1696,-1068),
  ABISELECT(-1728,-1080),
  ABISELECT(-1888,-1188),
  0,
  (VTBL_ENTRY)&(_ZTI8S20191C9[0]),
  (VTBL_ENTRY)&_ZN8S20191C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20191C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20191C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20191C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20191C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20191C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20191C43v10Ev,
  (VTBL_ENTRY)&_ZN9S20191C103v20Ev,
  (VTBL_ENTRY)&_ZN9S20191C103v21Ev,
  (VTBL_ENTRY)&_ZN9S20191C103v22Ev,
  (VTBL_ENTRY)&_ZN9S20191C103v23Ev,
  (VTBL_ENTRY)&_ZN8S20191C93v24Ev,
  (VTBL_ENTRY)&_ZN8S20191C93v25Ev,
  (VTBL_ENTRY)&_ZN8S20191C93v26Ev,
  (VTBL_ENTRY)&_ZN8S20191C93v27Ev,
};
extern void _ZN8S20191C22v4Ev();
extern void _ZN8S20191C22v5Ev();
extern void _ZN8S20191C22v6Ev();
extern void _ZN8S20191C22v7Ev();
extern void _ZN8S20191C42v8Ev();
extern void _ZN8S20191C42v9Ev();
extern void _ZN8S20191C43v10Ev();
extern void _ZN9S20191C103v20Ev();
extern void _ZN9S20191C103v21Ev();
extern void _ZN9S20191C103v22Ev();
extern void _ZN9S20191C103v23Ev();
static  VTBL_ENTRY _tg__ZTV9S20191C108S20191C9__8S20191C1[] = {
  ABISELECT(-1888,-1188),
  0,
  (VTBL_ENTRY)&(_ZTI9S20191C10[0]),
  (VTBL_ENTRY)&_ZN8S20191C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20191C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20191C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20191C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20191C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20191C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20191C43v10Ev,
  (VTBL_ENTRY)&_ZN9S20191C103v20Ev,
  (VTBL_ENTRY)&_ZN9S20191C103v21Ev,
  (VTBL_ENTRY)&_ZN9S20191C103v22Ev,
  (VTBL_ENTRY)&_ZN9S20191C103v23Ev,
};
extern void _ZN8S20191C22v4Ev();
extern void _ZN8S20191C22v5Ev();
extern void _ZN8S20191C22v6Ev();
extern void _ZN8S20191C22v7Ev();
static  VTBL_ENTRY _tg__ZTV8S20191C2__9S20191C108S20191C9__8S20191C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(1888,1188),
  (VTBL_ENTRY)&(_ZTI9S20191C10[0]),
  (VTBL_ENTRY)&_ZN8S20191C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20191C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20191C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20191C22v7Ev,
};
extern void _ZN8S20191C33v11Ev();
extern void _ZN8S20191C33v12Ev();
extern void _ZN8S20191C33v13Ev();
extern void _ZN8S20191C33v14Ev();
extern void _ZN8S20191C33v15Ev();
static  VTBL_ENTRY _tg__ZTV8S20191C3__8S20191C9__8S20191C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(32,12),
  ABISELECT(-160,-108),
  ABISELECT(1728,1080),
  (VTBL_ENTRY)&(_ZTI8S20191C9[0]),
  (VTBL_ENTRY)&_ZN8S20191C33v11Ev,
  (VTBL_ENTRY)&_ZN8S20191C33v12Ev,
  (VTBL_ENTRY)&_ZN8S20191C33v13Ev,
  (VTBL_ENTRY)&_ZN8S20191C33v14Ev,
  (VTBL_ENTRY)&_ZN8S20191C33v15Ev,
};
extern void _ZN8S20191C22v4Ev();
extern void _ZN8S20191C22v5Ev();
extern void _ZN8S20191C22v6Ev();
extern void _ZN8S20191C22v7Ev();
static  VTBL_ENTRY _tg__ZTV8S20191C2__8S20191C9__8S20191C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(1888,1188),
  (VTBL_ENTRY)&(_ZTI8S20191C9[0]),
  (VTBL_ENTRY)&_ZN8S20191C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20191C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20191C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20191C22v7Ev,
};
extern void _ZN8S20191C22v4Ev();
extern void _ZN8S20191C22v5Ev();
extern void _ZN8S20191C22v6Ev();
extern void _ZN8S20191C22v7Ev();
extern void _ZN8S20191C42v8Ev();
extern void _ZN8S20191C42v9Ev();
extern void _ZN8S20191C43v10Ev();
static  VTBL_ENTRY _tg__ZTV8S20191C4__8S20191C9__8S20191C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(1696,1068),
  (VTBL_ENTRY)&(_ZTI8S20191C9[0]),
  (VTBL_ENTRY)&_ZN8S20191C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20191C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20191C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20191C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20191C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20191C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20191C43v10Ev,
};
static  VTT_ENTRY vtt_S20191C1[] = {
  {&(_ZTV8S20191C1[9]),  9,183},
  {&(_tg__ZTV8S20191C6__8S20191C1[9]),  9,34},
  {&(_tg__ZTV8S20191C98S20191C6__A1__8S20191C1[5]),  5,20},
  {&(_tg__ZTV9S20191C108S20191C98S20191C6__A1__8S20191C1[3]),  3,14},
  {&(_tg__ZTV8S20191C2__9S20191C108S20191C98S20191C6__A1__8S20191C1[6]),  6,10},
  {&(_tg__ZTV8S20191C3__8S20191C98S20191C6__A1__8S20191C1[9]),  9,14},
  {&(_tg__ZTV8S20191C2__8S20191C98S20191C6__A1__8S20191C1[6]),  6,10},
  {&(_tg__ZTV8S20191C4__8S20191C98S20191C6__A1__8S20191C1[9]),  9,16},
  {&(_tg__ZTV9S20191C128S20191C6__8S20191C1[6]),  6,19},
  {&(_tg__ZTV8S20191C2__9S20191C128S20191C6__8S20191C1[6]),  6,10},
  {&(_tg__ZTV8S20191C3__9S20191C128S20191C6__8S20191C1[9]),  9,14},
  {&(_tg__ZTV8S20191C4__9S20191C128S20191C6__8S20191C1[9]),  9,16},
  {&(_tg__ZTV8S20191C5__9S20191C128S20191C6__8S20191C1[11]),  11,20},
  {&(_tg__ZTV8S20191C7__8S20191C6__8S20191C1[6]),  6,10},
  {&(_tg__ZTV8S20191C8__8S20191C6__8S20191C1[9]),  9,13},
  {&(_tg__ZTV8S20191C9__8S20191C6__8S20191C1[20]),  20,35},
  {&(_tg__ZTV8S20191C3__8S20191C6__8S20191C1[9]),  9,14},
  {&(_tg__ZTV8S20191C2__8S20191C6__8S20191C1[6]),  6,10},
  {&(_tg__ZTV8S20191C4__8S20191C6__8S20191C1[9]),  9,16},
  {&(_tg__ZTV9S20191C12__8S20191C6__8S20191C1[6]),  6,19},
  {&(_tg__ZTV8S20191C5__8S20191C6__8S20191C1[11]),  11,20},
  {&(_ZTV8S20191C1[71]),  71,183},
  {&(_ZTV8S20191C1[84]),  84,183},
  {&(_ZTV8S20191C1[98]),  98,183},
  {&(_ZTV8S20191C1[116]),  116,183},
  {&(_ZTV8S20191C1[131]),  131,183},
  {&(_ZTV8S20191C1[144]),  144,183},
  {&(_ZTV8S20191C1[168]),  168,183},
  {&(_ZTV8S20191C1[43]),  43,183},
  {&(_tg__ZTV8S20191C3__8S20191C1[4]),  4,9},
  {&(_tg__ZTV8S20191C2__8S20191C3__8S20191C1[6]),  6,10},
  {&(_tg__ZTV8S20191C4__8S20191C3__8S20191C1[9]),  9,16},
  {&(_tg__ZTV8S20191C8__8S20191C1[6]),  6,10},
  {&(_tg__ZTV8S20191C9__8S20191C8__8S20191C1[20]),  20,35},
  {&(_tg__ZTV8S20191C3__8S20191C8__8S20191C1[9]),  9,14},
  {&(_tg__ZTV8S20191C2__8S20191C8__8S20191C1[6]),  6,10},
  {&(_tg__ZTV8S20191C4__8S20191C8__8S20191C1[9]),  9,16},
  {&(_tg__ZTV8S20191C9__8S20191C1[5]),  5,20},
  {&(_tg__ZTV9S20191C108S20191C9__8S20191C1[3]),  3,14},
  {&(_tg__ZTV8S20191C2__9S20191C108S20191C9__8S20191C1[6]),  6,10},
  {&(_tg__ZTV8S20191C3__8S20191C9__8S20191C1[9]),  9,14},
  {&(_tg__ZTV8S20191C2__8S20191C9__8S20191C1[6]),  6,10},
  {&(_tg__ZTV8S20191C4__8S20191C9__8S20191C1[9]),  9,16},
};
extern VTBL_ENTRY _ZTI8S20191C1[];
extern  VTBL_ENTRY _ZTV8S20191C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20191C1[];
static VTBL_ENTRY alt_thunk_names28[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S20191C6D0Ev,_ZTv0_n28_N8S20191C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2632_N8S20191C6D0Ev,_ZThn1684_N8S20191C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S20191C6D1Ev,_ZTv0_n28_N8S20191C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2632_N8S20191C6D1Ev,_ZThn1684_N8S20191C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S20191C1D0Ev,_ZTv0_n28_N8S20191C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2632_N8S20191C1D0Ev,_ZThn1684_N8S20191C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S20191C1D1Ev,_ZTv0_n28_N8S20191C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2632_N8S20191C1D1Ev,_ZThn1684_N8S20191C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20191C1 = {  "S20191C1", // class name
  bases_S20191C1, 21,
  &(vtc_S20191C1[0]), // expected_vtbl_contents
  &(vtt_S20191C1[0]), // expected_vtt_contents
  ABISELECT(2928,1880), // object size
  NSPAIRA(_ZTI8S20191C1),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S20191C1),183, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20191C1),43, //virtual table table var
  21, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names28,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20192C2  {
  short s20192c2f0:13;
  void *s20192c2f1;
  long double s20192c2f2[8];
  virtual void  v4(); // _ZN8S20192C22v4Ev
  virtual void  v5(); // _ZN8S20192C22v5Ev
  virtual void  v6(); // _ZN8S20192C22v6Ev
  virtual void  v7(); // _ZN8S20192C22v7Ev
  ~S20192C2(); // tgen
  S20192C2(); // tgen
};
//SIG(-1 S20192C2) C1{ v1 v2 v3 v4 Fs:13 Fp FD[8]}


void  S20192C2 ::v4(){vfunc_called(this, "_ZN8S20192C22v4Ev");}
void  S20192C2 ::v5(){vfunc_called(this, "_ZN8S20192C22v5Ev");}
void  S20192C2 ::v6(){vfunc_called(this, "_ZN8S20192C22v6Ev");}
void  S20192C2 ::v7(){vfunc_called(this, "_ZN8S20192C22v7Ev");}
S20192C2 ::~S20192C2(){ note_dtor("S20192C2", this);} // tgen
S20192C2 ::S20192C2(){ note_ctor("S20192C2", this);} // tgen

static void Test_S20192C2()
{
  extern Class_Descriptor cd_S20192C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(11,28)];
    init_test(&cd_S20192C2, buf);
    S20192C2 *dp, &lv = *(dp=new (buf) S20192C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(160,108), "sizeof(S20192C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20192C2)");
    set_bf_and_test(lv, s20192c2f0, ABISELECT(8,4), 0, 13, 1, "S20192C2");
    set_bf_and_test(lv, s20192c2f0, ABISELECT(8,4), 0, 13, hide_sll(1LL<<12), "S20192C2");
    check_field_offset(lv, s20192c2f1, ABISELECT(16,8), "S20192C2.s20192c2f1");
    check_field_offset(lv, s20192c2f2, ABISELECT(32,12), "S20192C2.s20192c2f2");
    test_class_info(&lv, &cd_S20192C2);
    dp->~S20192C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20192C2(Test_S20192C2, "S20192C2", ABISELECT(160,108));

#else // __cplusplus

extern void _ZN8S20192C2C1Ev();
extern void _ZN8S20192C2D1Ev();
Name_Map name_map_S20192C2[] = {
  NSPAIR(_ZN8S20192C2C1Ev),
  NSPAIR(_ZN8S20192C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20192C2[];
extern void _ZN8S20192C22v4Ev();
extern void _ZN8S20192C22v5Ev();
extern void _ZN8S20192C22v6Ev();
extern void _ZN8S20192C22v7Ev();
static  VTBL_ENTRY vtc_S20192C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20192C2[0]),
  (VTBL_ENTRY)&_ZN8S20192C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20192C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20192C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20192C22v7Ev,
};
extern VTBL_ENTRY _ZTI8S20192C2[];
extern  VTBL_ENTRY _ZTV8S20192C2[];
Class_Descriptor cd_S20192C2 = {  "S20192C2", // class name
  0,0,//no base classes
  &(vtc_S20192C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(160,108), // object size
  NSPAIRA(_ZTI8S20192C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20192C2),6, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20192C4  : S20192C2 {
  void *s20192c4f0[6];
  virtual void  v8(); // _ZN8S20192C42v8Ev
  virtual void  v9(); // _ZN8S20192C42v9Ev
  virtual void  v10(); // _ZN8S20192C43v10Ev
  ~S20192C4(); // tgen
  S20192C4(); // tgen
};
//SIG(-1 S20192C4) C1{ BC2{ v4 v5 v6 v7 Fs:13 Fp FD[8]} v1 v2 v3 Fp[6]}


void  S20192C4 ::v8(){vfunc_called(this, "_ZN8S20192C42v8Ev");}
void  S20192C4 ::v9(){vfunc_called(this, "_ZN8S20192C42v9Ev");}
void  S20192C4 ::v10(){vfunc_called(this, "_ZN8S20192C43v10Ev");}
S20192C4 ::~S20192C4(){ note_dtor("S20192C4", this);} // tgen
S20192C4 ::S20192C4(){ note_ctor("S20192C4", this);} // tgen

static void Test_S20192C4()
{
  extern Class_Descriptor cd_S20192C4;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(14,34)];
    init_test(&cd_S20192C4, buf);
    S20192C4 *dp, &lv = *(dp=new (buf) S20192C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(208,132), "sizeof(S20192C4)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20192C4)");
    check_base_class_offset(lv, (S20192C2*), 0, "S20192C4");
    check_field_offset(lv, s20192c4f0, ABISELECT(160,108), "S20192C4.s20192c4f0");
    test_class_info(&lv, &cd_S20192C4);
    dp->~S20192C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20192C4(Test_S20192C4, "S20192C4", ABISELECT(208,132));

#else // __cplusplus

extern void _ZN8S20192C4C1Ev();
extern void _ZN8S20192C4D1Ev();
Name_Map name_map_S20192C4[] = {
  NSPAIR(_ZN8S20192C4C1Ev),
  NSPAIR(_ZN8S20192C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20192C2;
extern VTBL_ENTRY _ZTI8S20192C2[];
extern  VTBL_ENTRY _ZTV8S20192C2[];
static Base_Class bases_S20192C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20192C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20192C4[];
extern void _ZN8S20192C22v4Ev();
extern void _ZN8S20192C22v5Ev();
extern void _ZN8S20192C22v6Ev();
extern void _ZN8S20192C22v7Ev();
extern void _ZN8S20192C42v8Ev();
extern void _ZN8S20192C42v9Ev();
extern void _ZN8S20192C43v10Ev();
static  VTBL_ENTRY vtc_S20192C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20192C4[0]),
  (VTBL_ENTRY)&_ZN8S20192C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20192C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20192C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20192C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20192C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20192C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20192C43v10Ev,
};
extern VTBL_ENTRY _ZTI8S20192C4[];
extern  VTBL_ENTRY _ZTV8S20192C4[];
Class_Descriptor cd_S20192C4 = {  "S20192C4", // class name
  bases_S20192C4, 1,
  &(vtc_S20192C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(208,132), // object size
  NSPAIRA(_ZTI8S20192C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S20192C4),9, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20192C3  : virtual S20192C2 , virtual S20192C4 {
  void *s20192c3f0[2];
  virtual void  v11(); // _ZN8S20192C33v11Ev
  virtual void  v12(); // _ZN8S20192C33v12Ev
  virtual void  v13(); // _ZN8S20192C33v13Ev
  virtual void  v14(); // _ZN8S20192C33v14Ev
  virtual void  v15(); // _ZN8S20192C33v15Ev
  ~S20192C3(); // tgen
  S20192C3(); // tgen
};
//SIG(-1 S20192C3) C1{ VBC2{ v6 v7 v8 v9 Fs:13 Fp FD[8]} VBC3{ BC2 v10 v11 v12 Fp[6]} v1 v2 v3 v4 v5 Fp[2]}


void  S20192C3 ::v11(){vfunc_called(this, "_ZN8S20192C33v11Ev");}
void  S20192C3 ::v12(){vfunc_called(this, "_ZN8S20192C33v12Ev");}
void  S20192C3 ::v13(){vfunc_called(this, "_ZN8S20192C33v13Ev");}
void  S20192C3 ::v14(){vfunc_called(this, "_ZN8S20192C33v14Ev");}
void  S20192C3 ::v15(){vfunc_called(this, "_ZN8S20192C33v15Ev");}
S20192C3 ::~S20192C3(){ note_dtor("S20192C3", this);} // tgen
S20192C3 ::S20192C3(){ note_ctor("S20192C3", this);} // tgen

static void Test_S20192C3()
{
  extern Class_Descriptor cd_S20192C3;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(26,64)];
    init_test(&cd_S20192C3, buf);
    S20192C3 *dp, &lv = *(dp=new (buf) S20192C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(400,252), "sizeof(S20192C3)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20192C3)");
    /*is_ambiguous_... S20192C3::S20192C2 */ AMB_check_base_class_offset(lv, (S20192C2*), ABISELECT(32,12), "S20192C3");
    check_base_class_offset(lv, (S20192C2*)(S20192C4*), ABISELECT(192,120), "S20192C3");
    check_base_class_offset(lv, (S20192C4*), ABISELECT(192,120), "S20192C3");
    check_field_offset(lv, s20192c3f0, ABISELECT(8,4), "S20192C3.s20192c3f0");
    test_class_info(&lv, &cd_S20192C3);
    dp->~S20192C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20192C3(Test_S20192C3, "S20192C3", ABISELECT(400,252));

#else // __cplusplus

extern void _ZN8S20192C3C1Ev();
extern void _ZN8S20192C3D1Ev();
Name_Map name_map_S20192C3[] = {
  NSPAIR(_ZN8S20192C3C1Ev),
  NSPAIR(_ZN8S20192C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20192C2;
extern VTBL_ENTRY _ZTI8S20192C2[];
extern  VTBL_ENTRY _ZTV8S20192C2[];
extern Class_Descriptor cd_S20192C2;
extern VTBL_ENTRY _ZTI8S20192C2[];
extern  VTBL_ENTRY _ZTV8S20192C2[];
extern Class_Descriptor cd_S20192C4;
extern VTBL_ENTRY _ZTI8S20192C4[];
extern  VTBL_ENTRY _ZTV8S20192C4[];
static Base_Class bases_S20192C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20192C2,    ABISELECT(32,12), //bcp->offset
    9, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20192C2,    ABISELECT(192,120), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S20192C4,    ABISELECT(192,120), //bcp->offset
    19, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20192C3[];
extern void _ZN8S20192C33v11Ev();
extern void _ZN8S20192C33v12Ev();
extern void _ZN8S20192C33v13Ev();
extern void _ZN8S20192C33v14Ev();
extern void _ZN8S20192C33v15Ev();
extern void _ZN8S20192C22v4Ev();
extern void _ZN8S20192C22v5Ev();
extern void _ZN8S20192C22v6Ev();
extern void _ZN8S20192C22v7Ev();
extern void _ZN8S20192C22v4Ev();
extern void _ZN8S20192C22v5Ev();
extern void _ZN8S20192C22v6Ev();
extern void _ZN8S20192C22v7Ev();
extern void _ZN8S20192C42v8Ev();
extern void _ZN8S20192C42v9Ev();
extern void _ZN8S20192C43v10Ev();
static  VTBL_ENTRY vtc_S20192C3[] = {
  ABISELECT(192,120),
  ABISELECT(32,12),
  0,
  (VTBL_ENTRY)&(_ZTI8S20192C3[0]),
  (VTBL_ENTRY)&_ZN8S20192C33v11Ev,
  (VTBL_ENTRY)&_ZN8S20192C33v12Ev,
  (VTBL_ENTRY)&_ZN8S20192C33v13Ev,
  (VTBL_ENTRY)&_ZN8S20192C33v14Ev,
  (VTBL_ENTRY)&_ZN8S20192C33v15Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-32,-12),
  (VTBL_ENTRY)&(_ZTI8S20192C3[0]),
  (VTBL_ENTRY)&_ZN8S20192C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20192C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20192C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20192C22v7Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-192,-120),
  (VTBL_ENTRY)&(_ZTI8S20192C3[0]),
  (VTBL_ENTRY)&_ZN8S20192C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20192C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20192C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20192C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20192C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20192C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20192C43v10Ev,
};
extern VTBL_ENTRY _ZTV8S20192C3[];
static  VTT_ENTRY vtt_S20192C3[] = {
  {&(_ZTV8S20192C3[4]),  4,35},
  {&(_ZTV8S20192C3[15]),  15,35},
  {&(_ZTV8S20192C3[28]),  28,35},
};
extern VTBL_ENTRY _ZTI8S20192C3[];
extern  VTBL_ENTRY _ZTV8S20192C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20192C3[];
Class_Descriptor cd_S20192C3 = {  "S20192C3", // class name
  bases_S20192C3, 3,
  &(vtc_S20192C3[0]), // expected_vtbl_contents
  &(vtt_S20192C3[0]), // expected_vtt_contents
  ABISELECT(400,252), // object size
  NSPAIRA(_ZTI8S20192C3),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20192C3),35, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20192C3),3, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20192C5  {
  ::S20192C4 s20192c5f0[7];
  virtual void  v30(); // _ZN8S20192C53v30Ev
  virtual void  v31(); // _ZN8S20192C53v31Ev
  virtual void  v32(); // _ZN8S20192C53v32Ev
  virtual void  v33(); // _ZN8S20192C53v33Ev
  virtual void  v34(); // _ZN8S20192C53v34Ev
  virtual void  v35(); // _ZN8S20192C53v35Ev
  virtual void  v36(); // _ZN8S20192C53v36Ev
  virtual void  v37(); // _ZN8S20192C53v37Ev
  virtual void  v38(); // _ZN8S20192C53v38Ev
  ~S20192C5(); // tgen
  S20192C5(); // tgen
};
//SIG(-1 S20192C5) C1{ v1 v2 v3 v4 v5 v6 v7 v8 v9 FC2{ BC3{ v13 v14 v15 v16 Fs:13 Fp FD[8]} v10 v11 v12 Fp[6]}[7]}


void  S20192C5 ::v30(){vfunc_called(this, "_ZN8S20192C53v30Ev");}
void  S20192C5 ::v31(){vfunc_called(this, "_ZN8S20192C53v31Ev");}
void  S20192C5 ::v32(){vfunc_called(this, "_ZN8S20192C53v32Ev");}
void  S20192C5 ::v33(){vfunc_called(this, "_ZN8S20192C53v33Ev");}
void  S20192C5 ::v34(){vfunc_called(this, "_ZN8S20192C53v34Ev");}
void  S20192C5 ::v35(){vfunc_called(this, "_ZN8S20192C53v35Ev");}
void  S20192C5 ::v36(){vfunc_called(this, "_ZN8S20192C53v36Ev");}
void  S20192C5 ::v37(){vfunc_called(this, "_ZN8S20192C53v37Ev");}
void  S20192C5 ::v38(){vfunc_called(this, "_ZN8S20192C53v38Ev");}
S20192C5 ::~S20192C5(){ note_dtor("S20192C5", this);} // tgen
S20192C5 ::S20192C5(){ note_ctor("S20192C5", this);} // tgen

static void Test_S20192C5()
{
  extern Class_Descriptor cd_S20192C5;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(93,233)];
    init_test(&cd_S20192C5, buf);
    S20192C5 *dp, &lv = *(dp=new (buf) S20192C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1472,928), "sizeof(S20192C5)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20192C5)");
    check_field_offset(lv, s20192c5f0, ABISELECT(16,4), "S20192C5.s20192c5f0");
    test_class_info(&lv, &cd_S20192C5);
    dp->~S20192C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20192C5(Test_S20192C5, "S20192C5", ABISELECT(1472,928));

#else // __cplusplus

extern void _ZN8S20192C5C1Ev();
extern void _ZN8S20192C5D1Ev();
Name_Map name_map_S20192C5[] = {
  NSPAIR(_ZN8S20192C5C1Ev),
  NSPAIR(_ZN8S20192C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20192C5[];
extern void _ZN8S20192C53v30Ev();
extern void _ZN8S20192C53v31Ev();
extern void _ZN8S20192C53v32Ev();
extern void _ZN8S20192C53v33Ev();
extern void _ZN8S20192C53v34Ev();
extern void _ZN8S20192C53v35Ev();
extern void _ZN8S20192C53v36Ev();
extern void _ZN8S20192C53v37Ev();
extern void _ZN8S20192C53v38Ev();
static  VTBL_ENTRY vtc_S20192C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20192C5[0]),
  (VTBL_ENTRY)&_ZN8S20192C53v30Ev,
  (VTBL_ENTRY)&_ZN8S20192C53v31Ev,
  (VTBL_ENTRY)&_ZN8S20192C53v32Ev,
  (VTBL_ENTRY)&_ZN8S20192C53v33Ev,
  (VTBL_ENTRY)&_ZN8S20192C53v34Ev,
  (VTBL_ENTRY)&_ZN8S20192C53v35Ev,
  (VTBL_ENTRY)&_ZN8S20192C53v36Ev,
  (VTBL_ENTRY)&_ZN8S20192C53v37Ev,
  (VTBL_ENTRY)&_ZN8S20192C53v38Ev,
};
extern VTBL_ENTRY _ZTI8S20192C5[];
extern  VTBL_ENTRY _ZTV8S20192C5[];
Class_Descriptor cd_S20192C5 = {  "S20192C5", // class name
  0,0,//no base classes
  &(vtc_S20192C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(1472,928), // object size
  NSPAIRA(_ZTI8S20192C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20192C5),11, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20192C7  {
  virtual void  v16(); // _ZN8S20192C73v16Ev
  virtual void  v17(); // _ZN8S20192C73v17Ev
  virtual void  v18(); // _ZN8S20192C73v18Ev
  virtual void  v19(); // _ZN8S20192C73v19Ev
  ~S20192C7(); // tgen
  S20192C7(); // tgen
};
//SIG(-1 S20192C7) C1{ v1 v2 v3 v4}


void  S20192C7 ::v16(){vfunc_called(this, "_ZN8S20192C73v16Ev");}
void  S20192C7 ::v17(){vfunc_called(this, "_ZN8S20192C73v17Ev");}
void  S20192C7 ::v18(){vfunc_called(this, "_ZN8S20192C73v18Ev");}
void  S20192C7 ::v19(){vfunc_called(this, "_ZN8S20192C73v19Ev");}
S20192C7 ::~S20192C7(){ note_dtor("S20192C7", this);} // tgen
S20192C7 ::S20192C7(){ note_ctor("S20192C7", this);} // tgen

static void Test_S20192C7()
{
  extern Class_Descriptor cd_S20192C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S20192C7, buf);
    S20192C7 *dp, &lv = *(dp=new (buf) S20192C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S20192C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20192C7)");
    test_class_info(&lv, &cd_S20192C7);
    dp->~S20192C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20192C7(Test_S20192C7, "S20192C7", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S20192C7C1Ev();
extern void _ZN8S20192C7D1Ev();
Name_Map name_map_S20192C7[] = {
  NSPAIR(_ZN8S20192C7C1Ev),
  NSPAIR(_ZN8S20192C7D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20192C7[];
extern void _ZN8S20192C73v16Ev();
extern void _ZN8S20192C73v17Ev();
extern void _ZN8S20192C73v18Ev();
extern void _ZN8S20192C73v19Ev();
static  VTBL_ENTRY vtc_S20192C7[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20192C7[0]),
  (VTBL_ENTRY)&_ZN8S20192C73v16Ev,
  (VTBL_ENTRY)&_ZN8S20192C73v17Ev,
  (VTBL_ENTRY)&_ZN8S20192C73v18Ev,
  (VTBL_ENTRY)&_ZN8S20192C73v19Ev,
};
extern VTBL_ENTRY _ZTI8S20192C7[];
extern  VTBL_ENTRY _ZTV8S20192C7[];
Class_Descriptor cd_S20192C7 = {  "S20192C7", // class name
  0,0,//no base classes
  &(vtc_S20192C7[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S20192C7),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20192C7),6, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20192C10  : virtual S20192C2 , S20192C4 {
  void *s20192c10f0;
  virtual void  v20(); // _ZN9S20192C103v20Ev
  virtual void  v21(); // _ZN9S20192C103v21Ev
  virtual void  v22(); // _ZN9S20192C103v22Ev
  virtual void  v23(); // _ZN9S20192C103v23Ev
  ~S20192C10(); // tgen
  S20192C10(); // tgen
};
//SIG(-1 S20192C10) C1{ VBC2{ v5 v6 v7 v8 Fs:13 Fp FD[8]} BC3{ BC2 v9 v10 v11 Fp[6]} v1 v2 v3 v4 Fp}


void  S20192C10 ::v20(){vfunc_called(this, "_ZN9S20192C103v20Ev");}
void  S20192C10 ::v21(){vfunc_called(this, "_ZN9S20192C103v21Ev");}
void  S20192C10 ::v22(){vfunc_called(this, "_ZN9S20192C103v22Ev");}
void  S20192C10 ::v23(){vfunc_called(this, "_ZN9S20192C103v23Ev");}
S20192C10 ::~S20192C10(){ note_dtor("S20192C10", this);} // tgen
S20192C10 ::S20192C10(){ note_ctor("S20192C10", this);} // tgen

static void Test_S20192C10()
{
  extern Class_Descriptor cd_S20192C10;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(25,62)];
    init_test(&cd_S20192C10, buf);
    S20192C10 *dp, &lv = *(dp=new (buf) S20192C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(384,244), "sizeof(S20192C10)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20192C10)");
    /*is_ambiguous_... S20192C10::S20192C2 */ AMB_check_base_class_offset(lv, (S20192C2*), ABISELECT(224,136), "S20192C10");
    check_base_class_offset(lv, (S20192C2*)(S20192C4*), 0, "S20192C10");
    check_base_class_offset(lv, (S20192C4*), 0, "S20192C10");
    check_field_offset(lv, s20192c10f0, ABISELECT(208,132), "S20192C10.s20192c10f0");
    test_class_info(&lv, &cd_S20192C10);
    dp->~S20192C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20192C10(Test_S20192C10, "S20192C10", ABISELECT(384,244));

#else // __cplusplus

extern void _ZN9S20192C10C1Ev();
extern void _ZN9S20192C10D1Ev();
Name_Map name_map_S20192C10[] = {
  NSPAIR(_ZN9S20192C10C1Ev),
  NSPAIR(_ZN9S20192C10D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20192C2;
extern VTBL_ENTRY _ZTI8S20192C2[];
extern  VTBL_ENTRY _ZTV8S20192C2[];
extern Class_Descriptor cd_S20192C2;
extern VTBL_ENTRY _ZTI8S20192C2[];
extern  VTBL_ENTRY _ZTV8S20192C2[];
extern Class_Descriptor cd_S20192C4;
extern VTBL_ENTRY _ZTI8S20192C4[];
extern  VTBL_ENTRY _ZTV8S20192C4[];
static Base_Class bases_S20192C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20192C2,    ABISELECT(224,136), //bcp->offset
    14, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20192C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S20192C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S20192C10[];
extern void _ZN8S20192C22v4Ev();
extern void _ZN8S20192C22v5Ev();
extern void _ZN8S20192C22v6Ev();
extern void _ZN8S20192C22v7Ev();
extern void _ZN8S20192C42v8Ev();
extern void _ZN8S20192C42v9Ev();
extern void _ZN8S20192C43v10Ev();
extern void _ZN9S20192C103v20Ev();
extern void _ZN9S20192C103v21Ev();
extern void _ZN9S20192C103v22Ev();
extern void _ZN9S20192C103v23Ev();
extern void _ZN8S20192C22v4Ev();
extern void _ZN8S20192C22v5Ev();
extern void _ZN8S20192C22v6Ev();
extern void _ZN8S20192C22v7Ev();
static  VTBL_ENTRY vtc_S20192C10[] = {
  ABISELECT(224,136),
  0,
  (VTBL_ENTRY)&(_ZTI9S20192C10[0]),
  (VTBL_ENTRY)&_ZN8S20192C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20192C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20192C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20192C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20192C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20192C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20192C43v10Ev,
  (VTBL_ENTRY)&_ZN9S20192C103v20Ev,
  (VTBL_ENTRY)&_ZN9S20192C103v21Ev,
  (VTBL_ENTRY)&_ZN9S20192C103v22Ev,
  (VTBL_ENTRY)&_ZN9S20192C103v23Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-224,-136),
  (VTBL_ENTRY)&(_ZTI9S20192C10[0]),
  (VTBL_ENTRY)&_ZN8S20192C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20192C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20192C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20192C22v7Ev,
};
extern VTBL_ENTRY _ZTV9S20192C10[];
static  VTT_ENTRY vtt_S20192C10[] = {
  {&(_ZTV9S20192C10[3]),  3,24},
  {&(_ZTV9S20192C10[20]),  20,24},
};
extern VTBL_ENTRY _ZTI9S20192C10[];
extern  VTBL_ENTRY _ZTV9S20192C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20192C10[];
Class_Descriptor cd_S20192C10 = {  "S20192C10", // class name
  bases_S20192C10, 3,
  &(vtc_S20192C10[0]), // expected_vtbl_contents
  &(vtt_S20192C10[0]), // expected_vtt_contents
  ABISELECT(384,244), // object size
  NSPAIRA(_ZTI9S20192C10),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV9S20192C10),24, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20192C10),2, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20192C9  : virtual S20192C3 , S20192C10 {
  __tsi64 s20192c9f0[5];
  ::S20956C14_nt s20192c9f1;
  long double s20192c9f2;
  virtual void  v24(); // _ZN8S20192C93v24Ev
  virtual void  v25(); // _ZN8S20192C93v25Ev
  virtual void  v26(); // _ZN8S20192C93v26Ev
  virtual void  v27(); // _ZN8S20192C93v27Ev
  ~S20192C9(); // tgen
  S20192C9(); // tgen
};
//SIG(-1 S20192C9) C1{ VBC2{ VBC3{ v5 v6 v7 v8 Fs:13 Fp FD[8]} VBC4{ BC3 v9 v10 v11 Fp[6]} v12 v13 v14 v15 v16 Fp[2]} BC5{ VBC3 BC4 v17 v18 v19 v20 Fp} v1 v2 v3 v4 FL[5] FC6{} FD}


void  S20192C9 ::v24(){vfunc_called(this, "_ZN8S20192C93v24Ev");}
void  S20192C9 ::v25(){vfunc_called(this, "_ZN8S20192C93v25Ev");}
void  S20192C9 ::v26(){vfunc_called(this, "_ZN8S20192C93v26Ev");}
void  S20192C9 ::v27(){vfunc_called(this, "_ZN8S20192C93v27Ev");}
S20192C9 ::~S20192C9(){ note_dtor("S20192C9", this);} // tgen
S20192C9 ::S20192C9(){ note_ctor("S20192C9", this);} // tgen

static void Test_S20192C9()
{
  extern Class_Descriptor cd_S20192C9;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(44,112)];
    init_test(&cd_S20192C9, buf);
    S20192C9 *dp, &lv = *(dp=new (buf) S20192C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(688,444), "sizeof(S20192C9)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20192C9)");
    /*is_ambiguous_... S20192C3::S20192C2 */ AMB_check_base_class_offset(lv, (S20192C2*)(S20192C3*), ABISELECT(320,204), "S20192C9");
    /*is_ambiguous_... S20192C10::S20192C2 */ AMB_check_base_class_offset(lv, (S20192C2*)(S20192C10*), ABISELECT(320,204), "S20192C9");
    /*is_ambiguous_... S20192C9::S20192C4 */ AMB_check_base_class_offset(lv, (S20192C2*)(S20192C4*), ABISELECT(480,312), "S20192C9");
    check_base_class_offset(lv, (S20192C4*)(S20192C3*), ABISELECT(480,312), "S20192C9");
    check_base_class_offset(lv, (S20192C3*), ABISELECT(288,192), "S20192C9");
    check_base_class_offset(lv, (S20192C2*)(S20192C4*)(S20192C10*), 0, "S20192C9");
    check_base_class_offset(lv, (S20192C4*)(S20192C10*), 0, "S20192C9");
    check_base_class_offset(lv, (S20192C10*), 0, "S20192C9");
    check_field_offset(lv, s20192c9f0, ABISELECT(216,136), "S20192C9.s20192c9f0");
    check_field_offset(lv, s20192c9f1, ABISELECT(256,176), "S20192C9.s20192c9f1");
    check_field_offset(lv, s20192c9f2, ABISELECT(272,180), "S20192C9.s20192c9f2");
    test_class_info(&lv, &cd_S20192C9);
    dp->~S20192C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20192C9(Test_S20192C9, "S20192C9", ABISELECT(688,444));

#else // __cplusplus

extern void _ZN8S20192C9C1Ev();
extern void _ZN8S20192C9D1Ev();
Name_Map name_map_S20192C9[] = {
  NSPAIR(_ZN8S20192C9C1Ev),
  NSPAIR(_ZN8S20192C9D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20192C2;
extern VTBL_ENTRY _ZTI8S20192C2[];
extern  VTBL_ENTRY _ZTV8S20192C2[];
extern Class_Descriptor cd_S20192C2;
extern VTBL_ENTRY _ZTI8S20192C2[];
extern  VTBL_ENTRY _ZTV8S20192C2[];
extern Class_Descriptor cd_S20192C4;
extern VTBL_ENTRY _ZTI8S20192C4[];
extern  VTBL_ENTRY _ZTV8S20192C4[];
extern Class_Descriptor cd_S20192C3;
extern VTBL_ENTRY _ZTI8S20192C3[];
extern  VTBL_ENTRY _ZTV8S20192C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20192C3[];
extern Class_Descriptor cd_S20192C2;
extern VTBL_ENTRY _ZTI8S20192C2[];
extern  VTBL_ENTRY _ZTV8S20192C2[];
extern Class_Descriptor cd_S20192C4;
extern VTBL_ENTRY _ZTI8S20192C4[];
extern  VTBL_ENTRY _ZTV8S20192C4[];
extern Class_Descriptor cd_S20192C10;
extern VTBL_ENTRY _ZTI9S20192C10[];
extern  VTBL_ENTRY _ZTV9S20192C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20192C10[];
static Base_Class bases_S20192C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20192C2,    ABISELECT(320,204), //bcp->offset
    34, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S20192C2,    ABISELECT(480,312), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S20192C4,    ABISELECT(480,312), //bcp->offset
    44, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S20192C3,    ABISELECT(288,192), //bcp->offset
    20, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20192C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S20192C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S20192C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20192C9[];
extern void _ZN8S20192C22v4Ev();
extern void _ZN8S20192C22v5Ev();
extern void _ZN8S20192C22v6Ev();
extern void _ZN8S20192C22v7Ev();
extern void _ZN8S20192C42v8Ev();
extern void _ZN8S20192C42v9Ev();
extern void _ZN8S20192C43v10Ev();
extern void _ZN9S20192C103v20Ev();
extern void _ZN9S20192C103v21Ev();
extern void _ZN9S20192C103v22Ev();
extern void _ZN9S20192C103v23Ev();
extern void _ZN8S20192C93v24Ev();
extern void _ZN8S20192C93v25Ev();
extern void _ZN8S20192C93v26Ev();
extern void _ZN8S20192C93v27Ev();
extern void _ZN8S20192C33v11Ev();
extern void _ZN8S20192C33v12Ev();
extern void _ZN8S20192C33v13Ev();
extern void _ZN8S20192C33v14Ev();
extern void _ZN8S20192C33v15Ev();
extern void _ZN8S20192C22v4Ev();
extern void _ZN8S20192C22v5Ev();
extern void _ZN8S20192C22v6Ev();
extern void _ZN8S20192C22v7Ev();
extern void _ZN8S20192C22v4Ev();
extern void _ZN8S20192C22v5Ev();
extern void _ZN8S20192C22v6Ev();
extern void _ZN8S20192C22v7Ev();
extern void _ZN8S20192C42v8Ev();
extern void _ZN8S20192C42v9Ev();
extern void _ZN8S20192C43v10Ev();
static  VTBL_ENTRY vtc_S20192C9[] = {
  ABISELECT(480,312),
  ABISELECT(288,192),
  ABISELECT(320,204),
  0,
  (VTBL_ENTRY)&(_ZTI8S20192C9[0]),
  (VTBL_ENTRY)&_ZN8S20192C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20192C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20192C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20192C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20192C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20192C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20192C43v10Ev,
  (VTBL_ENTRY)&_ZN9S20192C103v20Ev,
  (VTBL_ENTRY)&_ZN9S20192C103v21Ev,
  (VTBL_ENTRY)&_ZN9S20192C103v22Ev,
  (VTBL_ENTRY)&_ZN9S20192C103v23Ev,
  (VTBL_ENTRY)&_ZN8S20192C93v24Ev,
  (VTBL_ENTRY)&_ZN8S20192C93v25Ev,
  (VTBL_ENTRY)&_ZN8S20192C93v26Ev,
  (VTBL_ENTRY)&_ZN8S20192C93v27Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(192,120),
  ABISELECT(32,12),
  ABISELECT(-288,-192),
  (VTBL_ENTRY)&(_ZTI8S20192C9[0]),
  (VTBL_ENTRY)&_ZN8S20192C33v11Ev,
  (VTBL_ENTRY)&_ZN8S20192C33v12Ev,
  (VTBL_ENTRY)&_ZN8S20192C33v13Ev,
  (VTBL_ENTRY)&_ZN8S20192C33v14Ev,
  (VTBL_ENTRY)&_ZN8S20192C33v15Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-320,-204),
  (VTBL_ENTRY)&(_ZTI8S20192C9[0]),
  (VTBL_ENTRY)&_ZN8S20192C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20192C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20192C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20192C22v7Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-480,-312),
  (VTBL_ENTRY)&(_ZTI8S20192C9[0]),
  (VTBL_ENTRY)&_ZN8S20192C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20192C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20192C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20192C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20192C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20192C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20192C43v10Ev,
};
extern VTBL_ENTRY _ZTV8S20192C9[];
extern void _ZN8S20192C22v4Ev();
extern void _ZN8S20192C22v5Ev();
extern void _ZN8S20192C22v6Ev();
extern void _ZN8S20192C22v7Ev();
extern void _ZN8S20192C42v8Ev();
extern void _ZN8S20192C42v9Ev();
extern void _ZN8S20192C43v10Ev();
extern void _ZN9S20192C103v20Ev();
extern void _ZN9S20192C103v21Ev();
extern void _ZN9S20192C103v22Ev();
extern void _ZN9S20192C103v23Ev();
static  VTBL_ENTRY _tg__ZTV9S20192C10__8S20192C9[] = {
  ABISELECT(320,204),
  0,
  (VTBL_ENTRY)&(_ZTI9S20192C10[0]),
  (VTBL_ENTRY)&_ZN8S20192C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20192C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20192C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20192C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20192C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20192C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20192C43v10Ev,
  (VTBL_ENTRY)&_ZN9S20192C103v20Ev,
  (VTBL_ENTRY)&_ZN9S20192C103v21Ev,
  (VTBL_ENTRY)&_ZN9S20192C103v22Ev,
  (VTBL_ENTRY)&_ZN9S20192C103v23Ev,
};
extern void _ZN8S20192C22v4Ev();
extern void _ZN8S20192C22v5Ev();
extern void _ZN8S20192C22v6Ev();
extern void _ZN8S20192C22v7Ev();
static  VTBL_ENTRY _tg__ZTV8S20192C2__9S20192C10__8S20192C9[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-320,-204),
  (VTBL_ENTRY)&(_ZTI9S20192C10[0]),
  (VTBL_ENTRY)&_ZN8S20192C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20192C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20192C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20192C22v7Ev,
};
extern void _ZN8S20192C33v11Ev();
extern void _ZN8S20192C33v12Ev();
extern void _ZN8S20192C33v13Ev();
extern void _ZN8S20192C33v14Ev();
extern void _ZN8S20192C33v15Ev();
static  VTBL_ENTRY _tg__ZTV8S20192C3__8S20192C9[] = {
  ABISELECT(192,120),
  ABISELECT(32,12),
  0,
  (VTBL_ENTRY)&(_ZTI8S20192C3[0]),
  (VTBL_ENTRY)&_ZN8S20192C33v11Ev,
  (VTBL_ENTRY)&_ZN8S20192C33v12Ev,
  (VTBL_ENTRY)&_ZN8S20192C33v13Ev,
  (VTBL_ENTRY)&_ZN8S20192C33v14Ev,
  (VTBL_ENTRY)&_ZN8S20192C33v15Ev,
};
extern void _ZN8S20192C22v4Ev();
extern void _ZN8S20192C22v5Ev();
extern void _ZN8S20192C22v6Ev();
extern void _ZN8S20192C22v7Ev();
static  VTBL_ENTRY _tg__ZTV8S20192C2__8S20192C3__8S20192C9[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-32,-12),
  (VTBL_ENTRY)&(_ZTI8S20192C3[0]),
  (VTBL_ENTRY)&_ZN8S20192C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20192C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20192C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20192C22v7Ev,
};
extern void _ZN8S20192C22v4Ev();
extern void _ZN8S20192C22v5Ev();
extern void _ZN8S20192C22v6Ev();
extern void _ZN8S20192C22v7Ev();
extern void _ZN8S20192C42v8Ev();
extern void _ZN8S20192C42v9Ev();
extern void _ZN8S20192C43v10Ev();
static  VTBL_ENTRY _tg__ZTV8S20192C4__8S20192C3__8S20192C9[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-192,-120),
  (VTBL_ENTRY)&(_ZTI8S20192C3[0]),
  (VTBL_ENTRY)&_ZN8S20192C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20192C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20192C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20192C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20192C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20192C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20192C43v10Ev,
};
static  VTT_ENTRY vtt_S20192C9[] = {
  {&(_ZTV8S20192C9[5]),  5,60},
  {&(_tg__ZTV9S20192C10__8S20192C9[3]),  3,14},
  {&(_tg__ZTV8S20192C2__9S20192C10__8S20192C9[6]),  6,10},
  {&(_ZTV8S20192C9[29]),  29,60},
  {&(_ZTV8S20192C9[40]),  40,60},
  {&(_ZTV8S20192C9[53]),  53,60},
  {&(_tg__ZTV8S20192C3__8S20192C9[4]),  4,9},
  {&(_tg__ZTV8S20192C2__8S20192C3__8S20192C9[6]),  6,10},
  {&(_tg__ZTV8S20192C4__8S20192C3__8S20192C9[9]),  9,16},
};
extern VTBL_ENTRY _ZTI8S20192C9[];
extern  VTBL_ENTRY _ZTV8S20192C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20192C9[];
Class_Descriptor cd_S20192C9 = {  "S20192C9", // class name
  bases_S20192C9, 7,
  &(vtc_S20192C9[0]), // expected_vtbl_contents
  &(vtt_S20192C9[0]), // expected_vtt_contents
  ABISELECT(688,444), // object size
  NSPAIRA(_ZTI8S20192C9),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20192C9),60, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20192C9),9, //virtual table table var
  7, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20192C8  : virtual S20192C9 {
  virtual  ~S20192C8(); // _ZN8S20192C8D2Ev
  virtual void  v28(); // _ZN8S20192C83v28Ev
  virtual void  v29(); // _ZN8S20192C83v29Ev
  S20192C8(); // tgen
};
//SIG(-1 S20192C8) C1{ VBC2{ VBC3{ VBC4{ v3 v4 v5 v6 Fs:13 Fp FD[8]} VBC5{ BC4 v7 v8 v9 Fp[6]} v10 v11 v12 v13 v14 Fp[2]} BC6{ VBC4 BC5 v15 v16 v17 v18 Fp} v19 v20 v21 v22 FL[5] FC7{} FD} vd v1 v2}


 S20192C8 ::~S20192C8(){ note_dtor("S20192C8", this);}
void  S20192C8 ::v28(){vfunc_called(this, "_ZN8S20192C83v28Ev");}
void  S20192C8 ::v29(){vfunc_called(this, "_ZN8S20192C83v29Ev");}
S20192C8 ::S20192C8(){ note_ctor("S20192C8", this);} // tgen

static void Test_S20192C8()
{
  extern Class_Descriptor cd_S20192C8;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(45,113)];
    init_test(&cd_S20192C8, buf);
    S20192C8 *dp, &lv = *(dp=new (buf) S20192C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(704,448), "sizeof(S20192C8)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20192C8)");
    /*is_ambiguous_... S20192C3::S20192C2 */ AMB_check_base_class_offset(lv, (S20192C2*)(S20192C3*), ABISELECT(336,208), "S20192C8");
    /*is_ambiguous_... S20192C10::S20192C2 */ AMB_check_base_class_offset(lv, (S20192C2*)(S20192C10*)(S20192C9*), ABISELECT(336,208), "S20192C8");
    /*is_ambiguous_... S20192C8::S20192C4 */ AMB_check_base_class_offset(lv, (S20192C2*)(S20192C4*), ABISELECT(496,316), "S20192C8");
    check_base_class_offset(lv, (S20192C4*)(S20192C3*), ABISELECT(496,316), "S20192C8");
    check_base_class_offset(lv, (S20192C3*)(S20192C9*), ABISELECT(304,196), "S20192C8");
    check_base_class_offset(lv, (S20192C2*)(S20192C4*)(S20192C10*)(S20192C9*), ABISELECT(16,4), "S20192C8");
    check_base_class_offset(lv, (S20192C4*)(S20192C10*)(S20192C9*), ABISELECT(16,4), "S20192C8");
    check_base_class_offset(lv, (S20192C10*)(S20192C9*), ABISELECT(16,4), "S20192C8");
    check_base_class_offset(lv, (S20192C9*), ABISELECT(16,4), "S20192C8");
    test_class_info(&lv, &cd_S20192C8);
    dp->~S20192C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20192C8(Test_S20192C8, "S20192C8", ABISELECT(704,448));

#else // __cplusplus

extern void _ZN8S20192C8C1Ev();
extern void _ZN8S20192C8D2Ev();
Name_Map name_map_S20192C8[] = {
  NSPAIR(_ZN8S20192C8C1Ev),
  NSPAIR(_ZN8S20192C8D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20192C2;
extern VTBL_ENTRY _ZTI8S20192C2[];
extern  VTBL_ENTRY _ZTV8S20192C2[];
extern Class_Descriptor cd_S20192C2;
extern VTBL_ENTRY _ZTI8S20192C2[];
extern  VTBL_ENTRY _ZTV8S20192C2[];
extern Class_Descriptor cd_S20192C4;
extern VTBL_ENTRY _ZTI8S20192C4[];
extern  VTBL_ENTRY _ZTV8S20192C4[];
extern Class_Descriptor cd_S20192C3;
extern VTBL_ENTRY _ZTI8S20192C3[];
extern  VTBL_ENTRY _ZTV8S20192C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20192C3[];
extern Class_Descriptor cd_S20192C2;
extern VTBL_ENTRY _ZTI8S20192C2[];
extern  VTBL_ENTRY _ZTV8S20192C2[];
extern Class_Descriptor cd_S20192C4;
extern VTBL_ENTRY _ZTI8S20192C4[];
extern  VTBL_ENTRY _ZTV8S20192C4[];
extern Class_Descriptor cd_S20192C10;
extern VTBL_ENTRY _ZTI9S20192C10[];
extern  VTBL_ENTRY _ZTV9S20192C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20192C10[];
extern Class_Descriptor cd_S20192C9;
extern VTBL_ENTRY _ZTI8S20192C9[];
extern  VTBL_ENTRY _ZTV8S20192C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20192C9[];
static Base_Class bases_S20192C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20192C2,    ABISELECT(336,208), //bcp->offset
    59, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S20192C2,    ABISELECT(496,316), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S20192C4,    ABISELECT(496,316), //bcp->offset
    69, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S20192C3,    ABISELECT(304,196), //bcp->offset
    45, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S20192C2,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S20192C4,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S20192C10,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S20192C9,    ABISELECT(16,4), //bcp->offset
    10, //bcp->virtual_function_table_offset
    20, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20192C8[];
extern void _ZN8S20192C8D1Ev();
extern void _ZN8S20192C8D0Ev();
extern void _ZN8S20192C83v28Ev();
extern void _ZN8S20192C83v29Ev();
extern void _ZN8S20192C22v4Ev();
extern void _ZN8S20192C22v5Ev();
extern void _ZN8S20192C22v6Ev();
extern void _ZN8S20192C22v7Ev();
extern void _ZN8S20192C42v8Ev();
extern void _ZN8S20192C42v9Ev();
extern void _ZN8S20192C43v10Ev();
extern void _ZN9S20192C103v20Ev();
extern void _ZN9S20192C103v21Ev();
extern void _ZN9S20192C103v22Ev();
extern void _ZN9S20192C103v23Ev();
extern void _ZN8S20192C93v24Ev();
extern void _ZN8S20192C93v25Ev();
extern void _ZN8S20192C93v26Ev();
extern void _ZN8S20192C93v27Ev();
extern void _ZN8S20192C33v11Ev();
extern void _ZN8S20192C33v12Ev();
extern void _ZN8S20192C33v13Ev();
extern void _ZN8S20192C33v14Ev();
extern void _ZN8S20192C33v15Ev();
extern void _ZN8S20192C22v4Ev();
extern void _ZN8S20192C22v5Ev();
extern void _ZN8S20192C22v6Ev();
extern void _ZN8S20192C22v7Ev();
extern void _ZN8S20192C22v4Ev();
extern void _ZN8S20192C22v5Ev();
extern void _ZN8S20192C22v6Ev();
extern void _ZN8S20192C22v7Ev();
extern void _ZN8S20192C42v8Ev();
extern void _ZN8S20192C42v9Ev();
extern void _ZN8S20192C43v10Ev();
static  VTBL_ENTRY vtc_S20192C8[] = {
  ABISELECT(496,316),
  ABISELECT(336,208),
  ABISELECT(304,196),
  ABISELECT(16,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S20192C8[0]),
  (VTBL_ENTRY)&_ZN8S20192C8D1Ev,
  (VTBL_ENTRY)&_ZN8S20192C8D0Ev,
  (VTBL_ENTRY)&_ZN8S20192C83v28Ev,
  (VTBL_ENTRY)&_ZN8S20192C83v29Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(480,312),
  ABISELECT(288,192),
  ABISELECT(320,204),
  ABISELECT(-16,-4),
  (VTBL_ENTRY)&(_ZTI8S20192C8[0]),
  (VTBL_ENTRY)&_ZN8S20192C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20192C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20192C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20192C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20192C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20192C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20192C43v10Ev,
  (VTBL_ENTRY)&_ZN9S20192C103v20Ev,
  (VTBL_ENTRY)&_ZN9S20192C103v21Ev,
  (VTBL_ENTRY)&_ZN9S20192C103v22Ev,
  (VTBL_ENTRY)&_ZN9S20192C103v23Ev,
  (VTBL_ENTRY)&_ZN8S20192C93v24Ev,
  (VTBL_ENTRY)&_ZN8S20192C93v25Ev,
  (VTBL_ENTRY)&_ZN8S20192C93v26Ev,
  (VTBL_ENTRY)&_ZN8S20192C93v27Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(192,120),
  ABISELECT(32,12),
  ABISELECT(-304,-196),
  (VTBL_ENTRY)&(_ZTI8S20192C8[0]),
  (VTBL_ENTRY)&_ZN8S20192C33v11Ev,
  (VTBL_ENTRY)&_ZN8S20192C33v12Ev,
  (VTBL_ENTRY)&_ZN8S20192C33v13Ev,
  (VTBL_ENTRY)&_ZN8S20192C33v14Ev,
  (VTBL_ENTRY)&_ZN8S20192C33v15Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-336,-208),
  (VTBL_ENTRY)&(_ZTI8S20192C8[0]),
  (VTBL_ENTRY)&_ZN8S20192C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20192C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20192C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20192C22v7Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-496,-316),
  (VTBL_ENTRY)&(_ZTI8S20192C8[0]),
  (VTBL_ENTRY)&_ZN8S20192C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20192C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20192C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20192C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20192C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20192C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20192C43v10Ev,
};
extern VTBL_ENTRY _ZTV8S20192C8[];
extern void _ZN8S20192C22v4Ev();
extern void _ZN8S20192C22v5Ev();
extern void _ZN8S20192C22v6Ev();
extern void _ZN8S20192C22v7Ev();
extern void _ZN8S20192C42v8Ev();
extern void _ZN8S20192C42v9Ev();
extern void _ZN8S20192C43v10Ev();
extern void _ZN9S20192C103v20Ev();
extern void _ZN9S20192C103v21Ev();
extern void _ZN9S20192C103v22Ev();
extern void _ZN9S20192C103v23Ev();
extern void _ZN8S20192C93v24Ev();
extern void _ZN8S20192C93v25Ev();
extern void _ZN8S20192C93v26Ev();
extern void _ZN8S20192C93v27Ev();
static  VTBL_ENTRY _tg__ZTV8S20192C9__8S20192C8[] = {
  ABISELECT(480,312),
  ABISELECT(288,192),
  ABISELECT(320,204),
  0,
  (VTBL_ENTRY)&(_ZTI8S20192C9[0]),
  (VTBL_ENTRY)&_ZN8S20192C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20192C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20192C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20192C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20192C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20192C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20192C43v10Ev,
  (VTBL_ENTRY)&_ZN9S20192C103v20Ev,
  (VTBL_ENTRY)&_ZN9S20192C103v21Ev,
  (VTBL_ENTRY)&_ZN9S20192C103v22Ev,
  (VTBL_ENTRY)&_ZN9S20192C103v23Ev,
  (VTBL_ENTRY)&_ZN8S20192C93v24Ev,
  (VTBL_ENTRY)&_ZN8S20192C93v25Ev,
  (VTBL_ENTRY)&_ZN8S20192C93v26Ev,
  (VTBL_ENTRY)&_ZN8S20192C93v27Ev,
};
extern void _ZN8S20192C22v4Ev();
extern void _ZN8S20192C22v5Ev();
extern void _ZN8S20192C22v6Ev();
extern void _ZN8S20192C22v7Ev();
extern void _ZN8S20192C42v8Ev();
extern void _ZN8S20192C42v9Ev();
extern void _ZN8S20192C43v10Ev();
extern void _ZN9S20192C103v20Ev();
extern void _ZN9S20192C103v21Ev();
extern void _ZN9S20192C103v22Ev();
extern void _ZN9S20192C103v23Ev();
static  VTBL_ENTRY _tg__ZTV9S20192C108S20192C9__8S20192C8[] = {
  ABISELECT(320,204),
  0,
  (VTBL_ENTRY)&(_ZTI9S20192C10[0]),
  (VTBL_ENTRY)&_ZN8S20192C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20192C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20192C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20192C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20192C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20192C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20192C43v10Ev,
  (VTBL_ENTRY)&_ZN9S20192C103v20Ev,
  (VTBL_ENTRY)&_ZN9S20192C103v21Ev,
  (VTBL_ENTRY)&_ZN9S20192C103v22Ev,
  (VTBL_ENTRY)&_ZN9S20192C103v23Ev,
};
extern void _ZN8S20192C22v4Ev();
extern void _ZN8S20192C22v5Ev();
extern void _ZN8S20192C22v6Ev();
extern void _ZN8S20192C22v7Ev();
static  VTBL_ENTRY _tg__ZTV8S20192C2__9S20192C108S20192C9__8S20192C8[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-320,-204),
  (VTBL_ENTRY)&(_ZTI9S20192C10[0]),
  (VTBL_ENTRY)&_ZN8S20192C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20192C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20192C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20192C22v7Ev,
};
extern void _ZN8S20192C33v11Ev();
extern void _ZN8S20192C33v12Ev();
extern void _ZN8S20192C33v13Ev();
extern void _ZN8S20192C33v14Ev();
extern void _ZN8S20192C33v15Ev();
static  VTBL_ENTRY _tg__ZTV8S20192C3__8S20192C9__8S20192C8[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(192,120),
  ABISELECT(32,12),
  ABISELECT(-288,-192),
  (VTBL_ENTRY)&(_ZTI8S20192C9[0]),
  (VTBL_ENTRY)&_ZN8S20192C33v11Ev,
  (VTBL_ENTRY)&_ZN8S20192C33v12Ev,
  (VTBL_ENTRY)&_ZN8S20192C33v13Ev,
  (VTBL_ENTRY)&_ZN8S20192C33v14Ev,
  (VTBL_ENTRY)&_ZN8S20192C33v15Ev,
};
extern void _ZN8S20192C22v4Ev();
extern void _ZN8S20192C22v5Ev();
extern void _ZN8S20192C22v6Ev();
extern void _ZN8S20192C22v7Ev();
static  VTBL_ENTRY _tg__ZTV8S20192C2__8S20192C9__8S20192C8[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-320,-204),
  (VTBL_ENTRY)&(_ZTI8S20192C9[0]),
  (VTBL_ENTRY)&_ZN8S20192C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20192C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20192C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20192C22v7Ev,
};
extern void _ZN8S20192C22v4Ev();
extern void _ZN8S20192C22v5Ev();
extern void _ZN8S20192C22v6Ev();
extern void _ZN8S20192C22v7Ev();
extern void _ZN8S20192C42v8Ev();
extern void _ZN8S20192C42v9Ev();
extern void _ZN8S20192C43v10Ev();
static  VTBL_ENTRY _tg__ZTV8S20192C4__8S20192C9__8S20192C8[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-480,-312),
  (VTBL_ENTRY)&(_ZTI8S20192C9[0]),
  (VTBL_ENTRY)&_ZN8S20192C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20192C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20192C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20192C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20192C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20192C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20192C43v10Ev,
};
extern void _ZN8S20192C33v11Ev();
extern void _ZN8S20192C33v12Ev();
extern void _ZN8S20192C33v13Ev();
extern void _ZN8S20192C33v14Ev();
extern void _ZN8S20192C33v15Ev();
static  VTBL_ENTRY _tg__ZTV8S20192C3__8S20192C8[] = {
  ABISELECT(192,120),
  ABISELECT(32,12),
  0,
  (VTBL_ENTRY)&(_ZTI8S20192C3[0]),
  (VTBL_ENTRY)&_ZN8S20192C33v11Ev,
  (VTBL_ENTRY)&_ZN8S20192C33v12Ev,
  (VTBL_ENTRY)&_ZN8S20192C33v13Ev,
  (VTBL_ENTRY)&_ZN8S20192C33v14Ev,
  (VTBL_ENTRY)&_ZN8S20192C33v15Ev,
};
extern void _ZN8S20192C22v4Ev();
extern void _ZN8S20192C22v5Ev();
extern void _ZN8S20192C22v6Ev();
extern void _ZN8S20192C22v7Ev();
static  VTBL_ENTRY _tg__ZTV8S20192C2__8S20192C3__8S20192C8[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-32,-12),
  (VTBL_ENTRY)&(_ZTI8S20192C3[0]),
  (VTBL_ENTRY)&_ZN8S20192C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20192C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20192C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20192C22v7Ev,
};
extern void _ZN8S20192C22v4Ev();
extern void _ZN8S20192C22v5Ev();
extern void _ZN8S20192C22v6Ev();
extern void _ZN8S20192C22v7Ev();
extern void _ZN8S20192C42v8Ev();
extern void _ZN8S20192C42v9Ev();
extern void _ZN8S20192C43v10Ev();
static  VTBL_ENTRY _tg__ZTV8S20192C4__8S20192C3__8S20192C8[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-192,-120),
  (VTBL_ENTRY)&(_ZTI8S20192C3[0]),
  (VTBL_ENTRY)&_ZN8S20192C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20192C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20192C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20192C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20192C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20192C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20192C43v10Ev,
};
static  VTT_ENTRY vtt_S20192C8[] = {
  {&(_ZTV8S20192C8[6]),  6,85},
  {&(_ZTV8S20192C8[30]),  30,85},
  {&(_ZTV8S20192C8[54]),  54,85},
  {&(_ZTV8S20192C8[65]),  65,85},
  {&(_ZTV8S20192C8[78]),  78,85},
  {&(_tg__ZTV8S20192C9__8S20192C8[5]),  5,20},
  {&(_tg__ZTV9S20192C108S20192C9__8S20192C8[3]),  3,14},
  {&(_tg__ZTV8S20192C2__9S20192C108S20192C9__8S20192C8[6]),  6,10},
  {&(_tg__ZTV8S20192C3__8S20192C9__8S20192C8[9]),  9,14},
  {&(_tg__ZTV8S20192C2__8S20192C9__8S20192C8[6]),  6,10},
  {&(_tg__ZTV8S20192C4__8S20192C9__8S20192C8[9]),  9,16},
  {&(_tg__ZTV8S20192C3__8S20192C8[4]),  4,9},
  {&(_tg__ZTV8S20192C2__8S20192C3__8S20192C8[6]),  6,10},
  {&(_tg__ZTV8S20192C4__8S20192C3__8S20192C8[9]),  9,16},
};
extern VTBL_ENTRY _ZTI8S20192C8[];
extern  VTBL_ENTRY _ZTV8S20192C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20192C8[];
Class_Descriptor cd_S20192C8 = {  "S20192C8", // class name
  bases_S20192C8, 8,
  &(vtc_S20192C8[0]), // expected_vtbl_contents
  &(vtt_S20192C8[0]), // expected_vtt_contents
  ABISELECT(704,448), // object size
  NSPAIRA(_ZTI8S20192C8),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S20192C8),85, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20192C8),14, //virtual table table var
  8, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20192C12  : virtual S20192C2 , virtual S20192C3 , virtual S20192C5 , S20192C4 {
  int s20192c12f0;
  virtual  ~S20192C12(); // _ZN9S20192C12D2Ev
  virtual void  v39(); // _ZN9S20192C123v39Ev
  virtual void  v40(); // _ZN9S20192C123v40Ev
  virtual void  v41(); // _ZN9S20192C123v41Ev
  virtual void  v42(); // _ZN9S20192C123v42Ev
  S20192C12(); // tgen
};
//SIG(-1 S20192C12) C1{ VBC2{ v5 v6 v7 v8 Fs:13 Fp FD[8]} VBC3{ VBC2 VBC4{ BC2 v9 v10 v11 Fp[6]} v12 v13 v14 v15 v16 Fp[2]} VBC5{ v17 v18 v19 v20 v21 v22 v23 v24 v25 FC4[7]} BC4 vd v1 v2 v3 v4 Fi}


 S20192C12 ::~S20192C12(){ note_dtor("S20192C12", this);}
void  S20192C12 ::v39(){vfunc_called(this, "_ZN9S20192C123v39Ev");}
void  S20192C12 ::v40(){vfunc_called(this, "_ZN9S20192C123v40Ev");}
void  S20192C12 ::v41(){vfunc_called(this, "_ZN9S20192C123v41Ev");}
void  S20192C12 ::v42(){vfunc_called(this, "_ZN9S20192C123v42Ev");}
S20192C12 ::S20192C12(){ note_ctor("S20192C12", this);} // tgen

static void Test_S20192C12()
{
  extern Class_Descriptor cd_S20192C12;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(132,330)];
    init_test(&cd_S20192C12, buf);
    S20192C12 *dp, &lv = *(dp=new (buf) S20192C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(2096,1316), "sizeof(S20192C12)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20192C12)");
    /*is_ambiguous_... S20192C12::S20192C2 */ AMB_check_base_class_offset(lv, (S20192C2*), ABISELECT(224,136), "S20192C12");
    /*is_ambiguous_... S20192C3::S20192C2 */ AMB_check_base_class_offset(lv, (S20192C2*)(S20192C3*), ABISELECT(224,136), "S20192C12");
    /*is_ambiguous_... S20192C12::S20192C4 */ AMB_check_base_class_offset(lv, (S20192C2*)(S20192C4*), ABISELECT(416,256), "S20192C12");
    check_base_class_offset(lv, (S20192C4*)(S20192C3*), ABISELECT(416,256), "S20192C12");
    check_base_class_offset(lv, (S20192C3*), ABISELECT(384,244), "S20192C12");
    check_base_class_offset(lv, (S20192C5*), ABISELECT(624,388), "S20192C12");
    /*is_ambiguous_... S20192C12::S20192C4 */ AMB_check_base_class_offset(lv, (S20192C2*)(S20192C4*), 0, "S20192C12");
    /*is_ambiguous_... S20192C12::S20192C4 */ AMB_check_base_class_offset(lv, (S20192C4*), 0, "S20192C12");
    check_field_offset(lv, s20192c12f0, ABISELECT(208,132), "S20192C12.s20192c12f0");
    test_class_info(&lv, &cd_S20192C12);
    dp->~S20192C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20192C12(Test_S20192C12, "S20192C12", ABISELECT(2096,1316));

#else // __cplusplus

extern void _ZN9S20192C12C1Ev();
extern void _ZN9S20192C12D2Ev();
Name_Map name_map_S20192C12[] = {
  NSPAIR(_ZN9S20192C12C1Ev),
  NSPAIR(_ZN9S20192C12D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20192C2;
extern VTBL_ENTRY _ZTI8S20192C2[];
extern  VTBL_ENTRY _ZTV8S20192C2[];
extern Class_Descriptor cd_S20192C2;
extern VTBL_ENTRY _ZTI8S20192C2[];
extern  VTBL_ENTRY _ZTV8S20192C2[];
extern Class_Descriptor cd_S20192C4;
extern VTBL_ENTRY _ZTI8S20192C4[];
extern  VTBL_ENTRY _ZTV8S20192C4[];
extern Class_Descriptor cd_S20192C3;
extern VTBL_ENTRY _ZTI8S20192C3[];
extern  VTBL_ENTRY _ZTV8S20192C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20192C3[];
extern Class_Descriptor cd_S20192C5;
extern VTBL_ENTRY _ZTI8S20192C5[];
extern  VTBL_ENTRY _ZTV8S20192C5[];
extern Class_Descriptor cd_S20192C2;
extern VTBL_ENTRY _ZTI8S20192C2[];
extern  VTBL_ENTRY _ZTV8S20192C2[];
extern Class_Descriptor cd_S20192C4;
extern VTBL_ENTRY _ZTI8S20192C4[];
extern  VTBL_ENTRY _ZTV8S20192C4[];
static Base_Class bases_S20192C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20192C2,    ABISELECT(224,136), //bcp->offset
    19, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20192C2,    ABISELECT(416,256), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S20192C4,    ABISELECT(416,256), //bcp->offset
    43, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S20192C3,    ABISELECT(384,244), //bcp->offset
    29, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20192C5,    ABISELECT(624,388), //bcp->offset
    59, //bcp->virtual_function_table_offset
    11, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20192C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S20192C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S20192C12[];
extern void _ZN8S20192C22v4Ev();
extern void _ZN8S20192C22v5Ev();
extern void _ZN8S20192C22v6Ev();
extern void _ZN8S20192C22v7Ev();
extern void _ZN8S20192C42v8Ev();
extern void _ZN8S20192C42v9Ev();
extern void _ZN8S20192C43v10Ev();
extern void _ZN9S20192C12D1Ev();
extern void _ZN9S20192C12D0Ev();
extern void _ZN9S20192C123v39Ev();
extern void _ZN9S20192C123v40Ev();
extern void _ZN9S20192C123v41Ev();
extern void _ZN9S20192C123v42Ev();
extern void _ZN8S20192C22v4Ev();
extern void _ZN8S20192C22v5Ev();
extern void _ZN8S20192C22v6Ev();
extern void _ZN8S20192C22v7Ev();
extern void _ZN8S20192C33v11Ev();
extern void _ZN8S20192C33v12Ev();
extern void _ZN8S20192C33v13Ev();
extern void _ZN8S20192C33v14Ev();
extern void _ZN8S20192C33v15Ev();
extern void _ZN8S20192C22v4Ev();
extern void _ZN8S20192C22v5Ev();
extern void _ZN8S20192C22v6Ev();
extern void _ZN8S20192C22v7Ev();
extern void _ZN8S20192C42v8Ev();
extern void _ZN8S20192C42v9Ev();
extern void _ZN8S20192C43v10Ev();
extern void _ZN8S20192C53v30Ev();
extern void _ZN8S20192C53v31Ev();
extern void _ZN8S20192C53v32Ev();
extern void _ZN8S20192C53v33Ev();
extern void _ZN8S20192C53v34Ev();
extern void _ZN8S20192C53v35Ev();
extern void _ZN8S20192C53v36Ev();
extern void _ZN8S20192C53v37Ev();
extern void _ZN8S20192C53v38Ev();
static  VTBL_ENTRY vtc_S20192C12[] = {
  ABISELECT(624,388),
  ABISELECT(416,256),
  ABISELECT(384,244),
  ABISELECT(224,136),
  0,
  (VTBL_ENTRY)&(_ZTI9S20192C12[0]),
  (VTBL_ENTRY)&_ZN8S20192C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20192C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20192C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20192C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20192C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20192C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20192C43v10Ev,
  (VTBL_ENTRY)&_ZN9S20192C12D1Ev,
  (VTBL_ENTRY)&_ZN9S20192C12D0Ev,
  (VTBL_ENTRY)&_ZN9S20192C123v39Ev,
  (VTBL_ENTRY)&_ZN9S20192C123v40Ev,
  (VTBL_ENTRY)&_ZN9S20192C123v41Ev,
  (VTBL_ENTRY)&_ZN9S20192C123v42Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-224,-136),
  (VTBL_ENTRY)&(_ZTI9S20192C12[0]),
  (VTBL_ENTRY)&_ZN8S20192C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20192C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20192C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20192C22v7Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(32,12),
  ABISELECT(-160,-108),
  ABISELECT(-384,-244),
  (VTBL_ENTRY)&(_ZTI9S20192C12[0]),
  (VTBL_ENTRY)&_ZN8S20192C33v11Ev,
  (VTBL_ENTRY)&_ZN8S20192C33v12Ev,
  (VTBL_ENTRY)&_ZN8S20192C33v13Ev,
  (VTBL_ENTRY)&_ZN8S20192C33v14Ev,
  (VTBL_ENTRY)&_ZN8S20192C33v15Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-416,-256),
  (VTBL_ENTRY)&(_ZTI9S20192C12[0]),
  (VTBL_ENTRY)&_ZN8S20192C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20192C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20192C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20192C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20192C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20192C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20192C43v10Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-624,-388),
  (VTBL_ENTRY)&(_ZTI9S20192C12[0]),
  (VTBL_ENTRY)&_ZN8S20192C53v30Ev,
  (VTBL_ENTRY)&_ZN8S20192C53v31Ev,
  (VTBL_ENTRY)&_ZN8S20192C53v32Ev,
  (VTBL_ENTRY)&_ZN8S20192C53v33Ev,
  (VTBL_ENTRY)&_ZN8S20192C53v34Ev,
  (VTBL_ENTRY)&_ZN8S20192C53v35Ev,
  (VTBL_ENTRY)&_ZN8S20192C53v36Ev,
  (VTBL_ENTRY)&_ZN8S20192C53v37Ev,
  (VTBL_ENTRY)&_ZN8S20192C53v38Ev,
};
extern VTBL_ENTRY _ZTV9S20192C12[];
extern void _ZN8S20192C33v11Ev();
extern void _ZN8S20192C33v12Ev();
extern void _ZN8S20192C33v13Ev();
extern void _ZN8S20192C33v14Ev();
extern void _ZN8S20192C33v15Ev();
static  VTBL_ENTRY _tg__ZTV8S20192C3__9S20192C12[] = {
  ABISELECT(32,12),
  ABISELECT(-160,-108),
  0,
  (VTBL_ENTRY)&(_ZTI8S20192C3[0]),
  (VTBL_ENTRY)&_ZN8S20192C33v11Ev,
  (VTBL_ENTRY)&_ZN8S20192C33v12Ev,
  (VTBL_ENTRY)&_ZN8S20192C33v13Ev,
  (VTBL_ENTRY)&_ZN8S20192C33v14Ev,
  (VTBL_ENTRY)&_ZN8S20192C33v15Ev,
};
extern void _ZN8S20192C22v4Ev();
extern void _ZN8S20192C22v5Ev();
extern void _ZN8S20192C22v6Ev();
extern void _ZN8S20192C22v7Ev();
static  VTBL_ENTRY _tg__ZTV8S20192C2__8S20192C3__9S20192C12[] = {
  0,
  0,
  0,
  0,
  ABISELECT(160,108),
  (VTBL_ENTRY)&(_ZTI8S20192C3[0]),
  (VTBL_ENTRY)&_ZN8S20192C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20192C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20192C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20192C22v7Ev,
};
extern void _ZN8S20192C22v4Ev();
extern void _ZN8S20192C22v5Ev();
extern void _ZN8S20192C22v6Ev();
extern void _ZN8S20192C22v7Ev();
extern void _ZN8S20192C42v8Ev();
extern void _ZN8S20192C42v9Ev();
extern void _ZN8S20192C43v10Ev();
static  VTBL_ENTRY _tg__ZTV8S20192C4__8S20192C3__9S20192C12[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-32,-12),
  (VTBL_ENTRY)&(_ZTI8S20192C3[0]),
  (VTBL_ENTRY)&_ZN8S20192C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20192C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20192C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20192C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20192C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20192C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20192C43v10Ev,
};
static  VTT_ENTRY vtt_S20192C12[] = {
  {&(_ZTV9S20192C12[6]),  6,79},
  {&(_ZTV9S20192C12[25]),  25,79},
  {&(_ZTV9S20192C12[38]),  38,79},
  {&(_ZTV9S20192C12[52]),  52,79},
  {&(_ZTV9S20192C12[70]),  70,79},
  {&(_tg__ZTV8S20192C3__9S20192C12[4]),  4,9},
  {&(_tg__ZTV8S20192C2__8S20192C3__9S20192C12[6]),  6,10},
  {&(_tg__ZTV8S20192C4__8S20192C3__9S20192C12[9]),  9,16},
};
extern VTBL_ENTRY _ZTI9S20192C12[];
extern  VTBL_ENTRY _ZTV9S20192C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20192C12[];
Class_Descriptor cd_S20192C12 = {  "S20192C12", // class name
  bases_S20192C12, 7,
  &(vtc_S20192C12[0]), // expected_vtbl_contents
  &(vtt_S20192C12[0]), // expected_vtt_contents
  ABISELECT(2096,1316), // object size
  NSPAIRA(_ZTI9S20192C12),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV9S20192C12),79, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20192C12),8, //virtual table table var
  7, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20192C6  : virtual S20192C7 , virtual S20192C8 , S20192C9 , S20192C12 {
  int s20192c6f0[8];
  char s20192c6f1;
  __tsi64 s20192c6f2;
  virtual  ~S20192C6(); // _ZN8S20192C6D2Ev
  virtual void  v43(); // _ZN8S20192C63v43Ev
  virtual void  v44(); // _ZN8S20192C63v44Ev
  virtual void  v45(); // _ZN8S20192C63v45Ev
  virtual void  v46(); // _ZN8S20192C63v46Ev
  virtual void  v47(); // _ZN8S20192C63v47Ev
  virtual void  v48(); // _ZN8S20192C63v48Ev
  virtual void  v49(); // _ZN8S20192C63v49Ev
  virtual void  v50(); // _ZN8S20192C63v50Ev
  S20192C6(); // tgen
};
//SIG(-1 S20192C6) C1{ VBC2{ v9 v10 v11 v12} VBC3{ VBC4{ VBC5{ VBC6{ v13 v14 v15 v16 Fs:13 Fp FD[8]} VBC7{ BC6 v17 v18 v19 Fp[6]} v20 v21 v22 v23 v24 Fp[2]} BC8{ VBC6 BC7 v25 v26 v27 v28 Fp} v29 v30 v31 v32 FL[5] FC9{} FD} vd v33 v34} BC4 BC10{ VBC6 VBC5 VBC11{ v35 v36 v37 v38 v39 v40 v41 v42 v43 FC7[7]} BC7 vd v44 v45 v46 v47 Fi} vd v1 v2 v3 v4 v5 v6 v7 v8 Fi[8] Fc FL}


 S20192C6 ::~S20192C6(){ note_dtor("S20192C6", this);}
void  S20192C6 ::v43(){vfunc_called(this, "_ZN8S20192C63v43Ev");}
void  S20192C6 ::v44(){vfunc_called(this, "_ZN8S20192C63v44Ev");}
void  S20192C6 ::v45(){vfunc_called(this, "_ZN8S20192C63v45Ev");}
void  S20192C6 ::v46(){vfunc_called(this, "_ZN8S20192C63v46Ev");}
void  S20192C6 ::v47(){vfunc_called(this, "_ZN8S20192C63v47Ev");}
void  S20192C6 ::v48(){vfunc_called(this, "_ZN8S20192C63v48Ev");}
void  S20192C6 ::v49(){vfunc_called(this, "_ZN8S20192C63v49Ev");}
void  S20192C6 ::v50(){vfunc_called(this, "_ZN8S20192C63v50Ev");}
S20192C6 ::S20192C6(){ note_ctor("S20192C6", this);} // tgen

static void Test_S20192C6()
{
  extern Class_Descriptor cd_S20192C6;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(171,439)];
    init_test(&cd_S20192C6, buf);
    S20192C6 *dp, &lv = *(dp=new (buf) S20192C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(2720,1752), "sizeof(S20192C6)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20192C6)");
    check_base_class_offset(lv, (S20192C7*), ABISELECT(544,372), "S20192C6");
    /*is_ambiguous_... S20192C3::S20192C2 */ AMB_check_base_class_offset(lv, (S20192C2*)(S20192C3*), ABISELECT(880,584), "S20192C6");
    /*is_ambiguous_... S20192C6::S20192C9 */ AMB_check_base_class_offset(lv, (S20192C2*)(S20192C10*)(S20192C9*), ABISELECT(880,584), "S20192C6");
    /*is_ambiguous_... S20192C6::S20192C9 */ AMB_check_base_class_offset(lv, (S20192C2*)(S20192C10*)(S20192C9*), ABISELECT(880,584), "S20192C6");
    /*is_ambiguous_... S20192C12::S20192C2 */ AMB_check_base_class_offset(lv, (S20192C2*)(S20192C12*), ABISELECT(880,584), "S20192C6");
    /*is_ambiguous_... S20192C6::S20192C4 */ AMB_check_base_class_offset(lv, (S20192C2*)(S20192C4*), ABISELECT(1040,692), "S20192C6");
    check_base_class_offset(lv, (S20192C4*)(S20192C3*), ABISELECT(1040,692), "S20192C6");
    /*is_ambiguous_... S20192C6::S20192C9 */ AMB_check_base_class_offset(lv, (S20192C3*)(S20192C9*), ABISELECT(848,572), "S20192C6");
    /*is_ambiguous_... S20192C6::S20192C9 */ AMB_check_base_class_offset(lv, (S20192C3*)(S20192C9*), ABISELECT(848,572), "S20192C6");
    check_base_class_offset(lv, (S20192C3*)(S20192C12*), ABISELECT(848,572), "S20192C6");
    /*is_ambiguous_... S20192C6::S20192C9 */ AMB_check_base_class_offset(lv, (S20192C2*)(S20192C4*)(S20192C10*)(S20192C9*), ABISELECT(560,380), "S20192C6");
    /*is_ambiguous_... S20192C6::S20192C9 */ AMB_check_base_class_offset(lv, (S20192C4*)(S20192C10*)(S20192C9*), ABISELECT(560,380), "S20192C6");
    /*is_ambiguous_... S20192C6::S20192C9 */ AMB_check_base_class_offset(lv, (S20192C10*)(S20192C9*), ABISELECT(560,380), "S20192C6");
    check_base_class_offset(lv, (S20192C9*)(S20192C8*), ABISELECT(560,380), "S20192C6");
    check_base_class_offset(lv, (S20192C8*), ABISELECT(552,376), "S20192C6");
    /*is_ambiguous_... S20192C6::S20192C9 */ AMB_check_base_class_offset(lv, (S20192C2*)(S20192C4*)(S20192C10*)(S20192C9*), 0, "S20192C6");
    /*is_ambiguous_... S20192C6::S20192C9 */ AMB_check_base_class_offset(lv, (S20192C4*)(S20192C10*)(S20192C9*), 0, "S20192C6");
    /*is_ambiguous_... S20192C6::S20192C9 */ AMB_check_base_class_offset(lv, (S20192C10*)(S20192C9*), 0, "S20192C6");
    /*is_ambiguous_... S20192C6::S20192C9 */ AMB_check_base_class_offset(lv, (S20192C9*), 0, "S20192C6");
    check_base_class_offset(lv, (S20192C5*)(S20192C12*), ABISELECT(1248,824), "S20192C6");
    /*is_ambiguous_... S20192C12::S20192C4 */ AMB_check_base_class_offset(lv, (S20192C2*)(S20192C4*)(S20192C12*), ABISELECT(288,192), "S20192C6");
    /*is_ambiguous_... S20192C12::S20192C4 */ AMB_check_base_class_offset(lv, (S20192C4*)(S20192C12*), ABISELECT(288,192), "S20192C6");
    check_base_class_offset(lv, (S20192C12*), ABISELECT(288,192), "S20192C6");
    check_field_offset(lv, s20192c6f0, ABISELECT(500,328), "S20192C6.s20192c6f0");
    check_field_offset(lv, s20192c6f1, ABISELECT(532,360), "S20192C6.s20192c6f1");
    check_field_offset(lv, s20192c6f2, ABISELECT(536,364), "S20192C6.s20192c6f2");
    test_class_info(&lv, &cd_S20192C6);
    dp->~S20192C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20192C6(Test_S20192C6, "S20192C6", ABISELECT(2720,1752));

#else // __cplusplus

extern void _ZN8S20192C6C1Ev();
extern void _ZN8S20192C6D2Ev();
Name_Map name_map_S20192C6[] = {
  NSPAIR(_ZN8S20192C6C1Ev),
  NSPAIR(_ZN8S20192C6D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20192C7;
extern VTBL_ENTRY _ZTI8S20192C7[];
extern  VTBL_ENTRY _ZTV8S20192C7[];
extern Class_Descriptor cd_S20192C2;
extern VTBL_ENTRY _ZTI8S20192C2[];
extern  VTBL_ENTRY _ZTV8S20192C2[];
extern Class_Descriptor cd_S20192C2;
extern VTBL_ENTRY _ZTI8S20192C2[];
extern  VTBL_ENTRY _ZTV8S20192C2[];
extern Class_Descriptor cd_S20192C4;
extern VTBL_ENTRY _ZTI8S20192C4[];
extern  VTBL_ENTRY _ZTV8S20192C4[];
extern Class_Descriptor cd_S20192C3;
extern VTBL_ENTRY _ZTI8S20192C3[];
extern  VTBL_ENTRY _ZTV8S20192C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20192C3[];
extern Class_Descriptor cd_S20192C2;
extern VTBL_ENTRY _ZTI8S20192C2[];
extern  VTBL_ENTRY _ZTV8S20192C2[];
extern Class_Descriptor cd_S20192C4;
extern VTBL_ENTRY _ZTI8S20192C4[];
extern  VTBL_ENTRY _ZTV8S20192C4[];
extern Class_Descriptor cd_S20192C10;
extern VTBL_ENTRY _ZTI9S20192C10[];
extern  VTBL_ENTRY _ZTV9S20192C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20192C10[];
extern Class_Descriptor cd_S20192C9;
extern VTBL_ENTRY _ZTI8S20192C9[];
extern  VTBL_ENTRY _ZTV8S20192C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20192C9[];
extern Class_Descriptor cd_S20192C8;
extern VTBL_ENTRY _ZTI8S20192C8[];
extern  VTBL_ENTRY _ZTV8S20192C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20192C8[];
extern Class_Descriptor cd_S20192C2;
extern VTBL_ENTRY _ZTI8S20192C2[];
extern  VTBL_ENTRY _ZTV8S20192C2[];
extern Class_Descriptor cd_S20192C4;
extern VTBL_ENTRY _ZTI8S20192C4[];
extern  VTBL_ENTRY _ZTV8S20192C4[];
extern Class_Descriptor cd_S20192C10;
extern VTBL_ENTRY _ZTI9S20192C10[];
extern  VTBL_ENTRY _ZTV9S20192C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20192C10[];
extern Class_Descriptor cd_S20192C9;
extern VTBL_ENTRY _ZTI8S20192C9[];
extern  VTBL_ENTRY _ZTV8S20192C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20192C9[];
extern Class_Descriptor cd_S20192C5;
extern VTBL_ENTRY _ZTI8S20192C5[];
extern  VTBL_ENTRY _ZTV8S20192C5[];
extern Class_Descriptor cd_S20192C2;
extern VTBL_ENTRY _ZTI8S20192C2[];
extern  VTBL_ENTRY _ZTV8S20192C2[];
extern Class_Descriptor cd_S20192C4;
extern VTBL_ENTRY _ZTI8S20192C4[];
extern  VTBL_ENTRY _ZTV8S20192C4[];
extern Class_Descriptor cd_S20192C12;
extern VTBL_ENTRY _ZTI9S20192C12[];
extern  VTBL_ENTRY _ZTV9S20192C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20192C12[];
static Base_Class bases_S20192C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20192C7,    ABISELECT(544,372), //bcp->offset
    53, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20192C2,    ABISELECT(880,584), //bcp->offset
    125, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S20192C2,    ABISELECT(1040,692), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S20192C4,    ABISELECT(1040,692), //bcp->offset
    135, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S20192C3,    ABISELECT(848,572), //bcp->offset
    111, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    32, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S20192C2,    ABISELECT(560,380), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S20192C4,    ABISELECT(560,380), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S20192C10,    ABISELECT(560,380), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    27, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S20192C9,    ABISELECT(560,380), //bcp->offset
    76, //bcp->virtual_function_table_offset
    20, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    26, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S20192C8,    ABISELECT(552,376), //bcp->offset
    63, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    21, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20192C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S20192C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S20192C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S20192C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20192C5,    ABISELECT(1248,824), //bcp->offset
    151, //bcp->virtual_function_table_offset
    11, //num_negative_vtable_entries(t, bcp)
    20, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    17, //immediately_derived
  0, 1},
  {&cd_S20192C2,    ABISELECT(288,192), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S20192C4,    ABISELECT(288,192), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S20192C12,    ABISELECT(288,192), //bcp->offset
    34, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20192C6[];
extern void _ZN8S20192C22v4Ev();
extern void _ZN8S20192C22v5Ev();
extern void _ZN8S20192C22v6Ev();
extern void _ZN8S20192C22v7Ev();
extern void _ZN8S20192C42v8Ev();
extern void _ZN8S20192C42v9Ev();
extern void _ZN8S20192C43v10Ev();
extern void _ZN9S20192C103v20Ev();
extern void _ZN9S20192C103v21Ev();
extern void _ZN9S20192C103v22Ev();
extern void _ZN9S20192C103v23Ev();
extern void _ZN8S20192C93v24Ev();
extern void _ZN8S20192C93v25Ev();
extern void _ZN8S20192C93v26Ev();
extern void _ZN8S20192C93v27Ev();
extern void _ZN8S20192C6D1Ev();
extern void _ZN8S20192C6D0Ev();
extern void _ZN8S20192C63v43Ev();
extern void _ZN8S20192C63v44Ev();
extern void _ZN8S20192C63v45Ev();
extern void _ZN8S20192C63v46Ev();
extern void _ZN8S20192C63v47Ev();
extern void _ZN8S20192C63v48Ev();
extern void _ZN8S20192C63v49Ev();
extern void _ZN8S20192C63v50Ev();
extern void _ZN8S20192C22v4Ev();
extern void _ZN8S20192C22v5Ev();
extern void _ZN8S20192C22v6Ev();
extern void _ZN8S20192C22v7Ev();
extern void _ZN8S20192C42v8Ev();
extern void _ZN8S20192C42v9Ev();
extern void _ZN8S20192C43v10Ev();
extern void ABISELECT(_ZThn288_N8S20192C6D1Ev,_ZThn192_N8S20192C6D1Ev)();
extern void ABISELECT(_ZThn288_N8S20192C6D0Ev,_ZThn192_N8S20192C6D0Ev)();
extern void _ZN9S20192C123v39Ev();
extern void _ZN9S20192C123v40Ev();
extern void _ZN9S20192C123v41Ev();
extern void _ZN9S20192C123v42Ev();
extern void _ZN8S20192C73v16Ev();
extern void _ZN8S20192C73v17Ev();
extern void _ZN8S20192C73v18Ev();
extern void _ZN8S20192C73v19Ev();
extern void ABISELECT(_ZTv0_n56_N8S20192C6D1Ev,_ZTv0_n28_N8S20192C6D1Ev)();
extern void ABISELECT(_ZThn552_N8S20192C6D1Ev,_ZThn376_N8S20192C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S20192C6D0Ev,_ZTv0_n28_N8S20192C6D0Ev)();
extern void ABISELECT(_ZThn552_N8S20192C6D0Ev,_ZThn376_N8S20192C6D0Ev)() __attribute__((weak));
extern void _ZN8S20192C83v28Ev();
extern void _ZN8S20192C83v29Ev();
extern void _ZN8S20192C22v4Ev();
extern void _ZN8S20192C22v5Ev();
extern void _ZN8S20192C22v6Ev();
extern void _ZN8S20192C22v7Ev();
extern void _ZN8S20192C42v8Ev();
extern void _ZN8S20192C42v9Ev();
extern void _ZN8S20192C43v10Ev();
extern void _ZN9S20192C103v20Ev();
extern void _ZN9S20192C103v21Ev();
extern void _ZN9S20192C103v22Ev();
extern void _ZN9S20192C103v23Ev();
extern void _ZN8S20192C93v24Ev();
extern void _ZN8S20192C93v25Ev();
extern void _ZN8S20192C93v26Ev();
extern void _ZN8S20192C93v27Ev();
extern void _ZN8S20192C33v11Ev();
extern void _ZN8S20192C33v12Ev();
extern void _ZN8S20192C33v13Ev();
extern void _ZN8S20192C33v14Ev();
extern void _ZN8S20192C33v15Ev();
extern void _ZN8S20192C22v4Ev();
extern void _ZN8S20192C22v5Ev();
extern void _ZN8S20192C22v6Ev();
extern void _ZN8S20192C22v7Ev();
extern void _ZN8S20192C22v4Ev();
extern void _ZN8S20192C22v5Ev();
extern void _ZN8S20192C22v6Ev();
extern void _ZN8S20192C22v7Ev();
extern void _ZN8S20192C42v8Ev();
extern void _ZN8S20192C42v9Ev();
extern void _ZN8S20192C43v10Ev();
extern void _ZN8S20192C53v30Ev();
extern void _ZN8S20192C53v31Ev();
extern void _ZN8S20192C53v32Ev();
extern void _ZN8S20192C53v33Ev();
extern void _ZN8S20192C53v34Ev();
extern void _ZN8S20192C53v35Ev();
extern void _ZN8S20192C53v36Ev();
extern void _ZN8S20192C53v37Ev();
extern void _ZN8S20192C53v38Ev();
static  VTBL_ENTRY vtc_S20192C6[] = {
  ABISELECT(1248,824),
  ABISELECT(560,380),
  ABISELECT(552,376),
  ABISELECT(544,372),
  ABISELECT(1040,692),
  ABISELECT(848,572),
  ABISELECT(880,584),
  0,
  (VTBL_ENTRY)&(_ZTI8S20192C6[0]),
  (VTBL_ENTRY)&_ZN8S20192C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20192C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20192C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20192C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20192C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20192C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20192C43v10Ev,
  (VTBL_ENTRY)&_ZN9S20192C103v20Ev,
  (VTBL_ENTRY)&_ZN9S20192C103v21Ev,
  (VTBL_ENTRY)&_ZN9S20192C103v22Ev,
  (VTBL_ENTRY)&_ZN9S20192C103v23Ev,
  (VTBL_ENTRY)&_ZN8S20192C93v24Ev,
  (VTBL_ENTRY)&_ZN8S20192C93v25Ev,
  (VTBL_ENTRY)&_ZN8S20192C93v26Ev,
  (VTBL_ENTRY)&_ZN8S20192C93v27Ev,
  (VTBL_ENTRY)&_ZN8S20192C6D1Ev,
  (VTBL_ENTRY)&_ZN8S20192C6D0Ev,
  (VTBL_ENTRY)&_ZN8S20192C63v43Ev,
  (VTBL_ENTRY)&_ZN8S20192C63v44Ev,
  (VTBL_ENTRY)&_ZN8S20192C63v45Ev,
  (VTBL_ENTRY)&_ZN8S20192C63v46Ev,
  (VTBL_ENTRY)&_ZN8S20192C63v47Ev,
  (VTBL_ENTRY)&_ZN8S20192C63v48Ev,
  (VTBL_ENTRY)&_ZN8S20192C63v49Ev,
  (VTBL_ENTRY)&_ZN8S20192C63v50Ev,
  ABISELECT(960,632),
  ABISELECT(752,500),
  ABISELECT(560,380),
  ABISELECT(592,392),
  ABISELECT(-288,-192),
  (VTBL_ENTRY)&(_ZTI8S20192C6[0]),
  (VTBL_ENTRY)&_ZN8S20192C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20192C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20192C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20192C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20192C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20192C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20192C43v10Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn288_N8S20192C6D1Ev,_ZThn192_N8S20192C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn288_N8S20192C6D0Ev,_ZThn192_N8S20192C6D0Ev),
  (VTBL_ENTRY)&_ZN9S20192C123v39Ev,
  (VTBL_ENTRY)&_ZN9S20192C123v40Ev,
  (VTBL_ENTRY)&_ZN9S20192C123v41Ev,
  (VTBL_ENTRY)&_ZN9S20192C123v42Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-544,-372),
  (VTBL_ENTRY)&(_ZTI8S20192C6[0]),
  (VTBL_ENTRY)&_ZN8S20192C73v16Ev,
  (VTBL_ENTRY)&_ZN8S20192C73v17Ev,
  (VTBL_ENTRY)&_ZN8S20192C73v18Ev,
  (VTBL_ENTRY)&_ZN8S20192C73v19Ev,
  0,
  0,
  ABISELECT(-552,-376),
  ABISELECT(488,316),
  ABISELECT(328,208),
  ABISELECT(296,196),
  ABISELECT(8,4),
  ABISELECT(-552,-376),
  (VTBL_ENTRY)&(_ZTI8S20192C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S20192C6D1Ev,_ZTv0_n28_N8S20192C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S20192C6D0Ev,_ZTv0_n28_N8S20192C6D0Ev),
  (VTBL_ENTRY)&_ZN8S20192C83v28Ev,
  (VTBL_ENTRY)&_ZN8S20192C83v29Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(480,312),
  ABISELECT(288,192),
  ABISELECT(320,204),
  ABISELECT(-560,-380),
  (VTBL_ENTRY)&(_ZTI8S20192C6[0]),
  (VTBL_ENTRY)&_ZN8S20192C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20192C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20192C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20192C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20192C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20192C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20192C43v10Ev,
  (VTBL_ENTRY)&_ZN9S20192C103v20Ev,
  (VTBL_ENTRY)&_ZN9S20192C103v21Ev,
  (VTBL_ENTRY)&_ZN9S20192C103v22Ev,
  (VTBL_ENTRY)&_ZN9S20192C103v23Ev,
  (VTBL_ENTRY)&_ZN8S20192C93v24Ev,
  (VTBL_ENTRY)&_ZN8S20192C93v25Ev,
  (VTBL_ENTRY)&_ZN8S20192C93v26Ev,
  (VTBL_ENTRY)&_ZN8S20192C93v27Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(192,120),
  ABISELECT(32,12),
  ABISELECT(-848,-572),
  (VTBL_ENTRY)&(_ZTI8S20192C6[0]),
  (VTBL_ENTRY)&_ZN8S20192C33v11Ev,
  (VTBL_ENTRY)&_ZN8S20192C33v12Ev,
  (VTBL_ENTRY)&_ZN8S20192C33v13Ev,
  (VTBL_ENTRY)&_ZN8S20192C33v14Ev,
  (VTBL_ENTRY)&_ZN8S20192C33v15Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-880,-584),
  (VTBL_ENTRY)&(_ZTI8S20192C6[0]),
  (VTBL_ENTRY)&_ZN8S20192C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20192C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20192C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20192C22v7Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-1040,-692),
  (VTBL_ENTRY)&(_ZTI8S20192C6[0]),
  (VTBL_ENTRY)&_ZN8S20192C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20192C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20192C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20192C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20192C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20192C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20192C43v10Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-1248,-824),
  (VTBL_ENTRY)&(_ZTI8S20192C6[0]),
  (VTBL_ENTRY)&_ZN8S20192C53v30Ev,
  (VTBL_ENTRY)&_ZN8S20192C53v31Ev,
  (VTBL_ENTRY)&_ZN8S20192C53v32Ev,
  (VTBL_ENTRY)&_ZN8S20192C53v33Ev,
  (VTBL_ENTRY)&_ZN8S20192C53v34Ev,
  (VTBL_ENTRY)&_ZN8S20192C53v35Ev,
  (VTBL_ENTRY)&_ZN8S20192C53v36Ev,
  (VTBL_ENTRY)&_ZN8S20192C53v37Ev,
  (VTBL_ENTRY)&_ZN8S20192C53v38Ev,
};
extern VTBL_ENTRY _ZTV8S20192C6[];
extern void _ZN8S20192C22v4Ev();
extern void _ZN8S20192C22v5Ev();
extern void _ZN8S20192C22v6Ev();
extern void _ZN8S20192C22v7Ev();
extern void _ZN8S20192C42v8Ev();
extern void _ZN8S20192C42v9Ev();
extern void _ZN8S20192C43v10Ev();
extern void _ZN9S20192C103v20Ev();
extern void _ZN9S20192C103v21Ev();
extern void _ZN9S20192C103v22Ev();
extern void _ZN9S20192C103v23Ev();
extern void _ZN8S20192C93v24Ev();
extern void _ZN8S20192C93v25Ev();
extern void _ZN8S20192C93v26Ev();
extern void _ZN8S20192C93v27Ev();
static  VTBL_ENTRY _tg__ZTV8S20192C9__A__8S20192C6[] = {
  ABISELECT(1040,692),
  ABISELECT(848,572),
  ABISELECT(880,584),
  0,
  (VTBL_ENTRY)&(_ZTI8S20192C9[0]),
  (VTBL_ENTRY)&_ZN8S20192C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20192C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20192C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20192C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20192C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20192C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20192C43v10Ev,
  (VTBL_ENTRY)&_ZN9S20192C103v20Ev,
  (VTBL_ENTRY)&_ZN9S20192C103v21Ev,
  (VTBL_ENTRY)&_ZN9S20192C103v22Ev,
  (VTBL_ENTRY)&_ZN9S20192C103v23Ev,
  (VTBL_ENTRY)&_ZN8S20192C93v24Ev,
  (VTBL_ENTRY)&_ZN8S20192C93v25Ev,
  (VTBL_ENTRY)&_ZN8S20192C93v26Ev,
  (VTBL_ENTRY)&_ZN8S20192C93v27Ev,
};
extern void _ZN8S20192C22v4Ev();
extern void _ZN8S20192C22v5Ev();
extern void _ZN8S20192C22v6Ev();
extern void _ZN8S20192C22v7Ev();
extern void _ZN8S20192C42v8Ev();
extern void _ZN8S20192C42v9Ev();
extern void _ZN8S20192C43v10Ev();
extern void _ZN9S20192C103v20Ev();
extern void _ZN9S20192C103v21Ev();
extern void _ZN9S20192C103v22Ev();
extern void _ZN9S20192C103v23Ev();
static  VTBL_ENTRY _tg__ZTV9S20192C108S20192C9__A1__8S20192C6[] = {
  ABISELECT(880,584),
  0,
  (VTBL_ENTRY)&(_ZTI9S20192C10[0]),
  (VTBL_ENTRY)&_ZN8S20192C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20192C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20192C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20192C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20192C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20192C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20192C43v10Ev,
  (VTBL_ENTRY)&_ZN9S20192C103v20Ev,
  (VTBL_ENTRY)&_ZN9S20192C103v21Ev,
  (VTBL_ENTRY)&_ZN9S20192C103v22Ev,
  (VTBL_ENTRY)&_ZN9S20192C103v23Ev,
};
extern void _ZN8S20192C22v4Ev();
extern void _ZN8S20192C22v5Ev();
extern void _ZN8S20192C22v6Ev();
extern void _ZN8S20192C22v7Ev();
static  VTBL_ENTRY _tg__ZTV8S20192C2__9S20192C108S20192C9__A1__8S20192C6[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-880,-584),
  (VTBL_ENTRY)&(_ZTI9S20192C10[0]),
  (VTBL_ENTRY)&_ZN8S20192C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20192C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20192C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20192C22v7Ev,
};
extern void _ZN8S20192C33v11Ev();
extern void _ZN8S20192C33v12Ev();
extern void _ZN8S20192C33v13Ev();
extern void _ZN8S20192C33v14Ev();
extern void _ZN8S20192C33v15Ev();
static  VTBL_ENTRY _tg__ZTV8S20192C3__8S20192C9__A__8S20192C6[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(192,120),
  ABISELECT(32,12),
  ABISELECT(-848,-572),
  (VTBL_ENTRY)&(_ZTI8S20192C9[0]),
  (VTBL_ENTRY)&_ZN8S20192C33v11Ev,
  (VTBL_ENTRY)&_ZN8S20192C33v12Ev,
  (VTBL_ENTRY)&_ZN8S20192C33v13Ev,
  (VTBL_ENTRY)&_ZN8S20192C33v14Ev,
  (VTBL_ENTRY)&_ZN8S20192C33v15Ev,
};
extern void _ZN8S20192C22v4Ev();
extern void _ZN8S20192C22v5Ev();
extern void _ZN8S20192C22v6Ev();
extern void _ZN8S20192C22v7Ev();
static  VTBL_ENTRY _tg__ZTV8S20192C2__8S20192C9__A__8S20192C6[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-880,-584),
  (VTBL_ENTRY)&(_ZTI8S20192C9[0]),
  (VTBL_ENTRY)&_ZN8S20192C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20192C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20192C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20192C22v7Ev,
};
extern void _ZN8S20192C22v4Ev();
extern void _ZN8S20192C22v5Ev();
extern void _ZN8S20192C22v6Ev();
extern void _ZN8S20192C22v7Ev();
extern void _ZN8S20192C42v8Ev();
extern void _ZN8S20192C42v9Ev();
extern void _ZN8S20192C43v10Ev();
static  VTBL_ENTRY _tg__ZTV8S20192C4__8S20192C9__A__8S20192C6[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-1040,-692),
  (VTBL_ENTRY)&(_ZTI8S20192C9[0]),
  (VTBL_ENTRY)&_ZN8S20192C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20192C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20192C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20192C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20192C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20192C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20192C43v10Ev,
};
extern void _ZN8S20192C22v4Ev();
extern void _ZN8S20192C22v5Ev();
extern void _ZN8S20192C22v6Ev();
extern void _ZN8S20192C22v7Ev();
extern void _ZN8S20192C42v8Ev();
extern void _ZN8S20192C42v9Ev();
extern void _ZN8S20192C43v10Ev();
extern void _ZN9S20192C12D1Ev();
extern void _ZN9S20192C12D0Ev();
extern void _ZN9S20192C123v39Ev();
extern void _ZN9S20192C123v40Ev();
extern void _ZN9S20192C123v41Ev();
extern void _ZN9S20192C123v42Ev();
static  VTBL_ENTRY _tg__ZTV9S20192C12__8S20192C6[] = {
  ABISELECT(960,632),
  ABISELECT(752,500),
  ABISELECT(560,380),
  ABISELECT(592,392),
  0,
  (VTBL_ENTRY)&(_ZTI9S20192C12[0]),
  (VTBL_ENTRY)&_ZN8S20192C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20192C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20192C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20192C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20192C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20192C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20192C43v10Ev,
  (VTBL_ENTRY)&_ZN9S20192C12D1Ev,
  (VTBL_ENTRY)&_ZN9S20192C12D0Ev,
  (VTBL_ENTRY)&_ZN9S20192C123v39Ev,
  (VTBL_ENTRY)&_ZN9S20192C123v40Ev,
  (VTBL_ENTRY)&_ZN9S20192C123v41Ev,
  (VTBL_ENTRY)&_ZN9S20192C123v42Ev,
};
extern void _ZN8S20192C22v4Ev();
extern void _ZN8S20192C22v5Ev();
extern void _ZN8S20192C22v6Ev();
extern void _ZN8S20192C22v7Ev();
static  VTBL_ENTRY _tg__ZTV8S20192C2__9S20192C12__8S20192C6[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-592,-392),
  (VTBL_ENTRY)&(_ZTI9S20192C12[0]),
  (VTBL_ENTRY)&_ZN8S20192C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20192C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20192C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20192C22v7Ev,
};
extern void _ZN8S20192C33v11Ev();
extern void _ZN8S20192C33v12Ev();
extern void _ZN8S20192C33v13Ev();
extern void _ZN8S20192C33v14Ev();
extern void _ZN8S20192C33v15Ev();
static  VTBL_ENTRY _tg__ZTV8S20192C3__9S20192C12__8S20192C6[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(192,120),
  ABISELECT(32,12),
  ABISELECT(-560,-380),
  (VTBL_ENTRY)&(_ZTI9S20192C12[0]),
  (VTBL_ENTRY)&_ZN8S20192C33v11Ev,
  (VTBL_ENTRY)&_ZN8S20192C33v12Ev,
  (VTBL_ENTRY)&_ZN8S20192C33v13Ev,
  (VTBL_ENTRY)&_ZN8S20192C33v14Ev,
  (VTBL_ENTRY)&_ZN8S20192C33v15Ev,
};
extern void _ZN8S20192C22v4Ev();
extern void _ZN8S20192C22v5Ev();
extern void _ZN8S20192C22v6Ev();
extern void _ZN8S20192C22v7Ev();
extern void _ZN8S20192C42v8Ev();
extern void _ZN8S20192C42v9Ev();
extern void _ZN8S20192C43v10Ev();
static  VTBL_ENTRY _tg__ZTV8S20192C4__9S20192C12__8S20192C6[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-752,-500),
  (VTBL_ENTRY)&(_ZTI9S20192C12[0]),
  (VTBL_ENTRY)&_ZN8S20192C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20192C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20192C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20192C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20192C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20192C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20192C43v10Ev,
};
extern void _ZN8S20192C53v30Ev();
extern void _ZN8S20192C53v31Ev();
extern void _ZN8S20192C53v32Ev();
extern void _ZN8S20192C53v33Ev();
extern void _ZN8S20192C53v34Ev();
extern void _ZN8S20192C53v35Ev();
extern void _ZN8S20192C53v36Ev();
extern void _ZN8S20192C53v37Ev();
extern void _ZN8S20192C53v38Ev();
static  VTBL_ENTRY _tg__ZTV8S20192C5__9S20192C12__8S20192C6[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-960,-632),
  (VTBL_ENTRY)&(_ZTI9S20192C12[0]),
  (VTBL_ENTRY)&_ZN8S20192C53v30Ev,
  (VTBL_ENTRY)&_ZN8S20192C53v31Ev,
  (VTBL_ENTRY)&_ZN8S20192C53v32Ev,
  (VTBL_ENTRY)&_ZN8S20192C53v33Ev,
  (VTBL_ENTRY)&_ZN8S20192C53v34Ev,
  (VTBL_ENTRY)&_ZN8S20192C53v35Ev,
  (VTBL_ENTRY)&_ZN8S20192C53v36Ev,
  (VTBL_ENTRY)&_ZN8S20192C53v37Ev,
  (VTBL_ENTRY)&_ZN8S20192C53v38Ev,
};
extern void _ZN8S20192C8D1Ev();
extern void _ZN8S20192C8D0Ev();
extern void _ZN8S20192C83v28Ev();
extern void _ZN8S20192C83v29Ev();
static  VTBL_ENTRY _tg__ZTV8S20192C8__8S20192C6[] = {
  ABISELECT(488,316),
  ABISELECT(328,208),
  ABISELECT(296,196),
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S20192C8[0]),
  (VTBL_ENTRY)&_ZN8S20192C8D1Ev,
  (VTBL_ENTRY)&_ZN8S20192C8D0Ev,
  (VTBL_ENTRY)&_ZN8S20192C83v28Ev,
  (VTBL_ENTRY)&_ZN8S20192C83v29Ev,
};
extern void _ZN8S20192C22v4Ev();
extern void _ZN8S20192C22v5Ev();
extern void _ZN8S20192C22v6Ev();
extern void _ZN8S20192C22v7Ev();
extern void _ZN8S20192C42v8Ev();
extern void _ZN8S20192C42v9Ev();
extern void _ZN8S20192C43v10Ev();
extern void _ZN9S20192C103v20Ev();
extern void _ZN9S20192C103v21Ev();
extern void _ZN9S20192C103v22Ev();
extern void _ZN9S20192C103v23Ev();
extern void _ZN8S20192C93v24Ev();
extern void _ZN8S20192C93v25Ev();
extern void _ZN8S20192C93v26Ev();
extern void _ZN8S20192C93v27Ev();
static  VTBL_ENTRY _tg__ZTV8S20192C9__8S20192C8__8S20192C6[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(480,312),
  ABISELECT(288,192),
  ABISELECT(320,204),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S20192C8[0]),
  (VTBL_ENTRY)&_ZN8S20192C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20192C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20192C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20192C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20192C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20192C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20192C43v10Ev,
  (VTBL_ENTRY)&_ZN9S20192C103v20Ev,
  (VTBL_ENTRY)&_ZN9S20192C103v21Ev,
  (VTBL_ENTRY)&_ZN9S20192C103v22Ev,
  (VTBL_ENTRY)&_ZN9S20192C103v23Ev,
  (VTBL_ENTRY)&_ZN8S20192C93v24Ev,
  (VTBL_ENTRY)&_ZN8S20192C93v25Ev,
  (VTBL_ENTRY)&_ZN8S20192C93v26Ev,
  (VTBL_ENTRY)&_ZN8S20192C93v27Ev,
};
extern void _ZN8S20192C33v11Ev();
extern void _ZN8S20192C33v12Ev();
extern void _ZN8S20192C33v13Ev();
extern void _ZN8S20192C33v14Ev();
extern void _ZN8S20192C33v15Ev();
static  VTBL_ENTRY _tg__ZTV8S20192C3__8S20192C8__8S20192C6[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(192,120),
  ABISELECT(32,12),
  ABISELECT(-296,-196),
  (VTBL_ENTRY)&(_ZTI8S20192C8[0]),
  (VTBL_ENTRY)&_ZN8S20192C33v11Ev,
  (VTBL_ENTRY)&_ZN8S20192C33v12Ev,
  (VTBL_ENTRY)&_ZN8S20192C33v13Ev,
  (VTBL_ENTRY)&_ZN8S20192C33v14Ev,
  (VTBL_ENTRY)&_ZN8S20192C33v15Ev,
};
extern void _ZN8S20192C22v4Ev();
extern void _ZN8S20192C22v5Ev();
extern void _ZN8S20192C22v6Ev();
extern void _ZN8S20192C22v7Ev();
static  VTBL_ENTRY _tg__ZTV8S20192C2__8S20192C8__8S20192C6[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-328,-208),
  (VTBL_ENTRY)&(_ZTI8S20192C8[0]),
  (VTBL_ENTRY)&_ZN8S20192C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20192C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20192C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20192C22v7Ev,
};
extern void _ZN8S20192C22v4Ev();
extern void _ZN8S20192C22v5Ev();
extern void _ZN8S20192C22v6Ev();
extern void _ZN8S20192C22v7Ev();
extern void _ZN8S20192C42v8Ev();
extern void _ZN8S20192C42v9Ev();
extern void _ZN8S20192C43v10Ev();
static  VTBL_ENTRY _tg__ZTV8S20192C4__8S20192C8__8S20192C6[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-488,-316),
  (VTBL_ENTRY)&(_ZTI8S20192C8[0]),
  (VTBL_ENTRY)&_ZN8S20192C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20192C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20192C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20192C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20192C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20192C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20192C43v10Ev,
};
extern void _ZN8S20192C22v4Ev();
extern void _ZN8S20192C22v5Ev();
extern void _ZN8S20192C22v6Ev();
extern void _ZN8S20192C22v7Ev();
extern void _ZN8S20192C42v8Ev();
extern void _ZN8S20192C42v9Ev();
extern void _ZN8S20192C43v10Ev();
extern void _ZN9S20192C103v20Ev();
extern void _ZN9S20192C103v21Ev();
extern void _ZN9S20192C103v22Ev();
extern void _ZN9S20192C103v23Ev();
extern void _ZN8S20192C93v24Ev();
extern void _ZN8S20192C93v25Ev();
extern void _ZN8S20192C93v26Ev();
extern void _ZN8S20192C93v27Ev();
static  VTBL_ENTRY _tg__ZTV8S20192C9__8S20192C6[] = {
  ABISELECT(480,312),
  ABISELECT(288,192),
  ABISELECT(320,204),
  0,
  (VTBL_ENTRY)&(_ZTI8S20192C9[0]),
  (VTBL_ENTRY)&_ZN8S20192C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20192C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20192C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20192C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20192C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20192C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20192C43v10Ev,
  (VTBL_ENTRY)&_ZN9S20192C103v20Ev,
  (VTBL_ENTRY)&_ZN9S20192C103v21Ev,
  (VTBL_ENTRY)&_ZN9S20192C103v22Ev,
  (VTBL_ENTRY)&_ZN9S20192C103v23Ev,
  (VTBL_ENTRY)&_ZN8S20192C93v24Ev,
  (VTBL_ENTRY)&_ZN8S20192C93v25Ev,
  (VTBL_ENTRY)&_ZN8S20192C93v26Ev,
  (VTBL_ENTRY)&_ZN8S20192C93v27Ev,
};
extern void _ZN8S20192C22v4Ev();
extern void _ZN8S20192C22v5Ev();
extern void _ZN8S20192C22v6Ev();
extern void _ZN8S20192C22v7Ev();
extern void _ZN8S20192C42v8Ev();
extern void _ZN8S20192C42v9Ev();
extern void _ZN8S20192C43v10Ev();
extern void _ZN9S20192C103v20Ev();
extern void _ZN9S20192C103v21Ev();
extern void _ZN9S20192C103v22Ev();
extern void _ZN9S20192C103v23Ev();
static  VTBL_ENTRY _tg__ZTV9S20192C108S20192C9__8S20192C6[] = {
  ABISELECT(320,204),
  0,
  (VTBL_ENTRY)&(_ZTI9S20192C10[0]),
  (VTBL_ENTRY)&_ZN8S20192C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20192C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20192C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20192C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20192C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20192C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20192C43v10Ev,
  (VTBL_ENTRY)&_ZN9S20192C103v20Ev,
  (VTBL_ENTRY)&_ZN9S20192C103v21Ev,
  (VTBL_ENTRY)&_ZN9S20192C103v22Ev,
  (VTBL_ENTRY)&_ZN9S20192C103v23Ev,
};
extern void _ZN8S20192C22v4Ev();
extern void _ZN8S20192C22v5Ev();
extern void _ZN8S20192C22v6Ev();
extern void _ZN8S20192C22v7Ev();
static  VTBL_ENTRY _tg__ZTV8S20192C2__9S20192C108S20192C9__8S20192C6[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-320,-204),
  (VTBL_ENTRY)&(_ZTI9S20192C10[0]),
  (VTBL_ENTRY)&_ZN8S20192C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20192C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20192C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20192C22v7Ev,
};
extern void _ZN8S20192C33v11Ev();
extern void _ZN8S20192C33v12Ev();
extern void _ZN8S20192C33v13Ev();
extern void _ZN8S20192C33v14Ev();
extern void _ZN8S20192C33v15Ev();
static  VTBL_ENTRY _tg__ZTV8S20192C3__8S20192C9__8S20192C6[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(192,120),
  ABISELECT(32,12),
  ABISELECT(-288,-192),
  (VTBL_ENTRY)&(_ZTI8S20192C9[0]),
  (VTBL_ENTRY)&_ZN8S20192C33v11Ev,
  (VTBL_ENTRY)&_ZN8S20192C33v12Ev,
  (VTBL_ENTRY)&_ZN8S20192C33v13Ev,
  (VTBL_ENTRY)&_ZN8S20192C33v14Ev,
  (VTBL_ENTRY)&_ZN8S20192C33v15Ev,
};
extern void _ZN8S20192C22v4Ev();
extern void _ZN8S20192C22v5Ev();
extern void _ZN8S20192C22v6Ev();
extern void _ZN8S20192C22v7Ev();
static  VTBL_ENTRY _tg__ZTV8S20192C2__8S20192C9__8S20192C6[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-320,-204),
  (VTBL_ENTRY)&(_ZTI8S20192C9[0]),
  (VTBL_ENTRY)&_ZN8S20192C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20192C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20192C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20192C22v7Ev,
};
extern void _ZN8S20192C22v4Ev();
extern void _ZN8S20192C22v5Ev();
extern void _ZN8S20192C22v6Ev();
extern void _ZN8S20192C22v7Ev();
extern void _ZN8S20192C42v8Ev();
extern void _ZN8S20192C42v9Ev();
extern void _ZN8S20192C43v10Ev();
static  VTBL_ENTRY _tg__ZTV8S20192C4__8S20192C9__8S20192C6[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-480,-312),
  (VTBL_ENTRY)&(_ZTI8S20192C9[0]),
  (VTBL_ENTRY)&_ZN8S20192C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20192C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20192C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20192C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20192C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20192C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20192C43v10Ev,
};
extern void _ZN8S20192C33v11Ev();
extern void _ZN8S20192C33v12Ev();
extern void _ZN8S20192C33v13Ev();
extern void _ZN8S20192C33v14Ev();
extern void _ZN8S20192C33v15Ev();
static  VTBL_ENTRY _tg__ZTV8S20192C3__8S20192C6[] = {
  ABISELECT(192,120),
  ABISELECT(32,12),
  0,
  (VTBL_ENTRY)&(_ZTI8S20192C3[0]),
  (VTBL_ENTRY)&_ZN8S20192C33v11Ev,
  (VTBL_ENTRY)&_ZN8S20192C33v12Ev,
  (VTBL_ENTRY)&_ZN8S20192C33v13Ev,
  (VTBL_ENTRY)&_ZN8S20192C33v14Ev,
  (VTBL_ENTRY)&_ZN8S20192C33v15Ev,
};
extern void _ZN8S20192C22v4Ev();
extern void _ZN8S20192C22v5Ev();
extern void _ZN8S20192C22v6Ev();
extern void _ZN8S20192C22v7Ev();
static  VTBL_ENTRY _tg__ZTV8S20192C2__8S20192C3__8S20192C6[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-32,-12),
  (VTBL_ENTRY)&(_ZTI8S20192C3[0]),
  (VTBL_ENTRY)&_ZN8S20192C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20192C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20192C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20192C22v7Ev,
};
extern void _ZN8S20192C22v4Ev();
extern void _ZN8S20192C22v5Ev();
extern void _ZN8S20192C22v6Ev();
extern void _ZN8S20192C22v7Ev();
extern void _ZN8S20192C42v8Ev();
extern void _ZN8S20192C42v9Ev();
extern void _ZN8S20192C43v10Ev();
static  VTBL_ENTRY _tg__ZTV8S20192C4__8S20192C3__8S20192C6[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-192,-120),
  (VTBL_ENTRY)&(_ZTI8S20192C3[0]),
  (VTBL_ENTRY)&_ZN8S20192C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20192C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20192C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20192C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20192C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20192C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20192C43v10Ev,
};
static  VTT_ENTRY vtt_S20192C6[] = {
  {&(_ZTV8S20192C6[9]),  9,171},
  {&(_tg__ZTV8S20192C9__A__8S20192C6[5]),  5,20},
  {&(_tg__ZTV9S20192C108S20192C9__A1__8S20192C6[3]),  3,14},
  {&(_tg__ZTV8S20192C2__9S20192C108S20192C9__A1__8S20192C6[6]),  6,10},
  {&(_tg__ZTV8S20192C3__8S20192C9__A__8S20192C6[9]),  9,14},
  {&(_tg__ZTV8S20192C2__8S20192C9__A__8S20192C6[6]),  6,10},
  {&(_tg__ZTV8S20192C4__8S20192C9__A__8S20192C6[9]),  9,16},
  {&(_tg__ZTV9S20192C12__8S20192C6[6]),  6,19},
  {&(_tg__ZTV8S20192C2__9S20192C12__8S20192C6[6]),  6,10},
  {&(_tg__ZTV8S20192C3__9S20192C12__8S20192C6[9]),  9,14},
  {&(_tg__ZTV8S20192C4__9S20192C12__8S20192C6[9]),  9,16},
  {&(_tg__ZTV8S20192C5__9S20192C12__8S20192C6[11]),  11,20},
  {&(_ZTV8S20192C6[59]),  59,171},
  {&(_ZTV8S20192C6[72]),  72,171},
  {&(_ZTV8S20192C6[96]),  96,171},
  {&(_ZTV8S20192C6[120]),  120,171},
  {&(_ZTV8S20192C6[131]),  131,171},
  {&(_ZTV8S20192C6[144]),  144,171},
  {&(_ZTV8S20192C6[40]),  40,171},
  {&(_ZTV8S20192C6[162]),  162,171},
  {&(_tg__ZTV8S20192C8__8S20192C6[6]),  6,10},
  {&(_tg__ZTV8S20192C9__8S20192C8__8S20192C6[20]),  20,35},
  {&(_tg__ZTV8S20192C3__8S20192C8__8S20192C6[9]),  9,14},
  {&(_tg__ZTV8S20192C2__8S20192C8__8S20192C6[6]),  6,10},
  {&(_tg__ZTV8S20192C4__8S20192C8__8S20192C6[9]),  9,16},
  {&(_tg__ZTV8S20192C9__8S20192C6[5]),  5,20},
  {&(_tg__ZTV9S20192C108S20192C9__8S20192C6[3]),  3,14},
  {&(_tg__ZTV8S20192C2__9S20192C108S20192C9__8S20192C6[6]),  6,10},
  {&(_tg__ZTV8S20192C3__8S20192C9__8S20192C6[9]),  9,14},
  {&(_tg__ZTV8S20192C2__8S20192C9__8S20192C6[6]),  6,10},
  {&(_tg__ZTV8S20192C4__8S20192C9__8S20192C6[9]),  9,16},
  {&(_tg__ZTV8S20192C3__8S20192C6[4]),  4,9},
  {&(_tg__ZTV8S20192C2__8S20192C3__8S20192C6[6]),  6,10},
  {&(_tg__ZTV8S20192C4__8S20192C3__8S20192C6[9]),  9,16},
};
extern VTBL_ENTRY _ZTI8S20192C6[];
extern  VTBL_ENTRY _ZTV8S20192C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20192C6[];
static VTBL_ENTRY alt_thunk_names29[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S20192C6D0Ev,_ZTv0_n28_N8S20192C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn552_N8S20192C6D0Ev,_ZThn376_N8S20192C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S20192C6D1Ev,_ZTv0_n28_N8S20192C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn552_N8S20192C6D1Ev,_ZThn376_N8S20192C6D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20192C6 = {  "S20192C6", // class name
  bases_S20192C6, 18,
  &(vtc_S20192C6[0]), // expected_vtbl_contents
  &(vtt_S20192C6[0]), // expected_vtt_contents
  ABISELECT(2720,1752), // object size
  NSPAIRA(_ZTI8S20192C6),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S20192C6),171, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20192C6),34, //virtual table table var
  18, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names29,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20192C1  : virtual S20192C2 , virtual S20192C3 , virtual S20192C5 , S20192C6 , S20192C4 {
  virtual  ~S20192C1(); // _ZN8S20192C1D2Ev
  virtual void  v1(); // _ZN8S20192C12v1Ev
  virtual void  v2(); // _ZN8S20192C12v2Ev
  virtual void  v3(); // _ZN8S20192C12v3Ev
  S20192C1(); // tgen
};
//SIG(1 S20192C1) C1{ VBC2{ v4 v5 v6 v7 Fs:13 Fp FD[8]} VBC3{ VBC2 VBC4{ BC2 v8 v9 v10 Fp[6]} v11 v12 v13 v14 v15 Fp[2]} VBC5{ v16 v17 v18 v19 v20 v21 v22 v23 v24 FC4[7]} BC6{ VBC7{ v25 v26 v27 v28} VBC8{ VBC9{ VBC3 BC10{ VBC2 BC4 v29 v30 v31 v32 Fp} v33 v34 v35 v36 FL[5] FC11{} FD} vd v37 v38} BC9 BC12{ VBC2 VBC3 VBC5 BC4 vd v39 v40 v41 v42 Fi} vd v43 v44 v45 v46 v47 v48 v49 v50 Fi[8] Fc FL} BC4 vd v1 v2 v3}


 S20192C1 ::~S20192C1(){ note_dtor("S20192C1", this);}
void  S20192C1 ::v1(){vfunc_called(this, "_ZN8S20192C12v1Ev");}
void  S20192C1 ::v2(){vfunc_called(this, "_ZN8S20192C12v2Ev");}
void  S20192C1 ::v3(){vfunc_called(this, "_ZN8S20192C12v3Ev");}
S20192C1 ::S20192C1(){ note_ctor("S20192C1", this);} // tgen

static void Test_S20192C1()
{
  extern Class_Descriptor cd_S20192C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(184,472)];
    init_test(&cd_S20192C1, buf);
    S20192C1 *dp, &lv = *(dp=new (buf) S20192C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(2928,1884), "sizeof(S20192C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20192C1)");
    /*is_ambiguous_... S20192C1::S20192C2 */ AMB_check_base_class_offset(lv, (S20192C2*), ABISELECT(752,504), "S20192C1");
    /*is_ambiguous_... S20192C3::S20192C2 */ AMB_check_base_class_offset(lv, (S20192C2*)(S20192C3*), ABISELECT(752,504), "S20192C1");
    /*is_ambiguous_... S20192C1::S20192C9 */ AMB_check_base_class_offset(lv, (S20192C2*)(S20192C10*)(S20192C9*), ABISELECT(752,504), "S20192C1");
    /*is_ambiguous_... S20192C6::S20192C9 */ AMB_check_base_class_offset(lv, (S20192C2*)(S20192C10*)(S20192C9*)(S20192C6*), ABISELECT(752,504), "S20192C1");
    /*is_ambiguous_... S20192C12::S20192C2 */ AMB_check_base_class_offset(lv, (S20192C2*)(S20192C12*)(S20192C6*), ABISELECT(752,504), "S20192C1");
    /*is_ambiguous_... S20192C1::S20192C4 */ AMB_check_base_class_offset(lv, (S20192C2*)(S20192C4*), ABISELECT(944,624), "S20192C1");
    check_base_class_offset(lv, (S20192C4*)(S20192C3*), ABISELECT(944,624), "S20192C1");
    check_base_class_offset(lv, (S20192C3*), ABISELECT(912,612), "S20192C1");
    /*is_ambiguous_... S20192C1::S20192C9 */ AMB_check_base_class_offset(lv, (S20192C3*)(S20192C9*), ABISELECT(912,612), "S20192C1");
    /*is_ambiguous_... S20192C6::S20192C9 */ AMB_check_base_class_offset(lv, (S20192C3*)(S20192C9*)(S20192C6*), ABISELECT(912,612), "S20192C1");
    check_base_class_offset(lv, (S20192C3*)(S20192C12*)(S20192C6*), ABISELECT(912,612), "S20192C1");
    check_base_class_offset(lv, (S20192C5*), ABISELECT(1152,756), "S20192C1");
    check_base_class_offset(lv, (S20192C5*)(S20192C12*)(S20192C6*), ABISELECT(1152,756), "S20192C1");
    check_base_class_offset(lv, (S20192C7*)(S20192C6*), ABISELECT(2624,1684), "S20192C1");
    /*is_ambiguous_... S20192C1::S20192C9 */ AMB_check_base_class_offset(lv, (S20192C2*)(S20192C4*)(S20192C10*)(S20192C9*), ABISELECT(2640,1692), "S20192C1");
    /*is_ambiguous_... S20192C1::S20192C9 */ AMB_check_base_class_offset(lv, (S20192C4*)(S20192C10*)(S20192C9*), ABISELECT(2640,1692), "S20192C1");
    /*is_ambiguous_... S20192C1::S20192C9 */ AMB_check_base_class_offset(lv, (S20192C10*)(S20192C9*), ABISELECT(2640,1692), "S20192C1");
    check_base_class_offset(lv, (S20192C9*)(S20192C8*), ABISELECT(2640,1692), "S20192C1");
    check_base_class_offset(lv, (S20192C8*)(S20192C6*), ABISELECT(2632,1688), "S20192C1");
    /*is_ambiguous_... S20192C6::S20192C9 */ AMB_check_base_class_offset(lv, (S20192C2*)(S20192C4*)(S20192C10*)(S20192C9*)(S20192C6*), 0, "S20192C1");
    /*is_ambiguous_... S20192C6::S20192C9 */ AMB_check_base_class_offset(lv, (S20192C4*)(S20192C10*)(S20192C9*)(S20192C6*), 0, "S20192C1");
    /*is_ambiguous_... S20192C6::S20192C9 */ AMB_check_base_class_offset(lv, (S20192C10*)(S20192C9*)(S20192C6*), 0, "S20192C1");
    /*is_ambiguous_... S20192C6::S20192C9 */ AMB_check_base_class_offset(lv, (S20192C9*)(S20192C6*), 0, "S20192C1");
    /*is_ambiguous_... S20192C12::S20192C4 */ AMB_check_base_class_offset(lv, (S20192C2*)(S20192C4*)(S20192C12*)(S20192C6*), ABISELECT(288,192), "S20192C1");
    /*is_ambiguous_... S20192C12::S20192C4 */ AMB_check_base_class_offset(lv, (S20192C4*)(S20192C12*)(S20192C6*), ABISELECT(288,192), "S20192C1");
    check_base_class_offset(lv, (S20192C12*)(S20192C6*), ABISELECT(288,192), "S20192C1");
    check_base_class_offset(lv, (S20192C6*), 0, "S20192C1");
    /*is_ambiguous_... S20192C1::S20192C4 */ AMB_check_base_class_offset(lv, (S20192C2*)(S20192C4*), ABISELECT(544,372), "S20192C1");
    /*is_ambiguous_... S20192C1::S20192C4 */ AMB_check_base_class_offset(lv, (S20192C4*), ABISELECT(544,372), "S20192C1");
    test_class_info(&lv, &cd_S20192C1);
    dp->~S20192C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20192C1(Test_S20192C1, "S20192C1", ABISELECT(2928,1884));

#else // __cplusplus

extern void _ZN8S20192C1C1Ev();
extern void _ZN8S20192C1D2Ev();
Name_Map name_map_S20192C1[] = {
  NSPAIR(_ZN8S20192C1C1Ev),
  NSPAIR(_ZN8S20192C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20192C2;
extern VTBL_ENTRY _ZTI8S20192C2[];
extern  VTBL_ENTRY _ZTV8S20192C2[];
extern Class_Descriptor cd_S20192C2;
extern VTBL_ENTRY _ZTI8S20192C2[];
extern  VTBL_ENTRY _ZTV8S20192C2[];
extern Class_Descriptor cd_S20192C4;
extern VTBL_ENTRY _ZTI8S20192C4[];
extern  VTBL_ENTRY _ZTV8S20192C4[];
extern Class_Descriptor cd_S20192C3;
extern VTBL_ENTRY _ZTI8S20192C3[];
extern  VTBL_ENTRY _ZTV8S20192C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20192C3[];
extern Class_Descriptor cd_S20192C5;
extern VTBL_ENTRY _ZTI8S20192C5[];
extern  VTBL_ENTRY _ZTV8S20192C5[];
extern Class_Descriptor cd_S20192C7;
extern VTBL_ENTRY _ZTI8S20192C7[];
extern  VTBL_ENTRY _ZTV8S20192C7[];
extern Class_Descriptor cd_S20192C2;
extern VTBL_ENTRY _ZTI8S20192C2[];
extern  VTBL_ENTRY _ZTV8S20192C2[];
extern Class_Descriptor cd_S20192C4;
extern VTBL_ENTRY _ZTI8S20192C4[];
extern  VTBL_ENTRY _ZTV8S20192C4[];
extern Class_Descriptor cd_S20192C10;
extern VTBL_ENTRY _ZTI9S20192C10[];
extern  VTBL_ENTRY _ZTV9S20192C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20192C10[];
extern Class_Descriptor cd_S20192C9;
extern VTBL_ENTRY _ZTI8S20192C9[];
extern  VTBL_ENTRY _ZTV8S20192C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20192C9[];
extern Class_Descriptor cd_S20192C8;
extern VTBL_ENTRY _ZTI8S20192C8[];
extern  VTBL_ENTRY _ZTV8S20192C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20192C8[];
extern Class_Descriptor cd_S20192C2;
extern VTBL_ENTRY _ZTI8S20192C2[];
extern  VTBL_ENTRY _ZTV8S20192C2[];
extern Class_Descriptor cd_S20192C4;
extern VTBL_ENTRY _ZTI8S20192C4[];
extern  VTBL_ENTRY _ZTV8S20192C4[];
extern Class_Descriptor cd_S20192C10;
extern VTBL_ENTRY _ZTI9S20192C10[];
extern  VTBL_ENTRY _ZTV9S20192C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20192C10[];
extern Class_Descriptor cd_S20192C9;
extern VTBL_ENTRY _ZTI8S20192C9[];
extern  VTBL_ENTRY _ZTV8S20192C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20192C9[];
extern Class_Descriptor cd_S20192C2;
extern VTBL_ENTRY _ZTI8S20192C2[];
extern  VTBL_ENTRY _ZTV8S20192C2[];
extern Class_Descriptor cd_S20192C4;
extern VTBL_ENTRY _ZTI8S20192C4[];
extern  VTBL_ENTRY _ZTV8S20192C4[];
extern Class_Descriptor cd_S20192C12;
extern VTBL_ENTRY _ZTI9S20192C12[];
extern  VTBL_ENTRY _ZTV9S20192C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20192C12[];
extern Class_Descriptor cd_S20192C6;
extern VTBL_ENTRY _ZTI8S20192C6[];
extern  VTBL_ENTRY _ZTV8S20192C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20192C6[];
extern Class_Descriptor cd_S20192C2;
extern VTBL_ENTRY _ZTI8S20192C2[];
extern  VTBL_ENTRY _ZTV8S20192C2[];
extern Class_Descriptor cd_S20192C4;
extern VTBL_ENTRY _ZTI8S20192C4[];
extern  VTBL_ENTRY _ZTV8S20192C4[];
static Base_Class bases_S20192C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20192C2,    ABISELECT(752,504), //bcp->offset
    65, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    22, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20192C2,    ABISELECT(944,624), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S20192C4,    ABISELECT(944,624), //bcp->offset
    89, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    24, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S20192C3,    ABISELECT(912,612), //bcp->offset
    75, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    23, //bcp->index_in_construction_vtbl_array
    30, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20192C5,    ABISELECT(1152,756), //bcp->offset
    105, //bcp->virtual_function_table_offset
    11, //num_negative_vtable_entries(t, bcp)
    25, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20192C7,    ABISELECT(2624,1684), //bcp->offset
    125, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    26, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    18, //immediately_derived
  0, 1},
  {&cd_S20192C2,    ABISELECT(2640,1692), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S20192C4,    ABISELECT(2640,1692), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S20192C10,    ABISELECT(2640,1692), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    39, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S20192C9,    ABISELECT(2640,1692), //bcp->offset
    148, //bcp->virtual_function_table_offset
    20, //num_negative_vtable_entries(t, bcp)
    28, //bcp->index_in_construction_vtbl_array
    38, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S20192C8,    ABISELECT(2632,1688), //bcp->offset
    135, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    27, //bcp->index_in_construction_vtbl_array
    33, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    18, //immediately_derived
  0, 1},
  {&cd_S20192C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S20192C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S20192C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S20192C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S20192C2,    ABISELECT(288,192), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S20192C4,    ABISELECT(288,192), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S20192C12,    ABISELECT(288,192), //bcp->offset
    37, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    29, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S20192C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20192C2,    ABISELECT(544,372), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    20, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S20192C4,    ABISELECT(544,372), //bcp->offset
    56, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    21, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20192C1[];
extern void _ZN8S20192C22v4Ev();
extern void _ZN8S20192C22v5Ev();
extern void _ZN8S20192C22v6Ev();
extern void _ZN8S20192C22v7Ev();
extern void _ZN8S20192C42v8Ev();
extern void _ZN8S20192C42v9Ev();
extern void _ZN8S20192C43v10Ev();
extern void _ZN9S20192C103v20Ev();
extern void _ZN9S20192C103v21Ev();
extern void _ZN9S20192C103v22Ev();
extern void _ZN9S20192C103v23Ev();
extern void _ZN8S20192C93v24Ev();
extern void _ZN8S20192C93v25Ev();
extern void _ZN8S20192C93v26Ev();
extern void _ZN8S20192C93v27Ev();
extern void _ZN8S20192C1D1Ev();
extern void _ZN8S20192C1D0Ev();
extern void _ZN8S20192C63v43Ev();
extern void _ZN8S20192C63v44Ev();
extern void _ZN8S20192C63v45Ev();
extern void _ZN8S20192C63v46Ev();
extern void _ZN8S20192C63v47Ev();
extern void _ZN8S20192C63v48Ev();
extern void _ZN8S20192C63v49Ev();
extern void _ZN8S20192C63v50Ev();
extern void _ZN8S20192C12v1Ev();
extern void _ZN8S20192C12v2Ev();
extern void _ZN8S20192C12v3Ev();
extern void _ZN8S20192C22v4Ev();
extern void _ZN8S20192C22v5Ev();
extern void _ZN8S20192C22v6Ev();
extern void _ZN8S20192C22v7Ev();
extern void _ZN8S20192C42v8Ev();
extern void _ZN8S20192C42v9Ev();
extern void _ZN8S20192C43v10Ev();
extern void ABISELECT(_ZThn288_N8S20192C1D1Ev,_ZThn192_N8S20192C1D1Ev)();
extern void ABISELECT(_ZThn288_N8S20192C1D0Ev,_ZThn192_N8S20192C1D0Ev)();
extern void _ZN9S20192C123v39Ev();
extern void _ZN9S20192C123v40Ev();
extern void _ZN9S20192C123v41Ev();
extern void _ZN9S20192C123v42Ev();
extern void _ZN8S20192C22v4Ev();
extern void _ZN8S20192C22v5Ev();
extern void _ZN8S20192C22v6Ev();
extern void _ZN8S20192C22v7Ev();
extern void _ZN8S20192C42v8Ev();
extern void _ZN8S20192C42v9Ev();
extern void _ZN8S20192C43v10Ev();
extern void _ZN8S20192C22v4Ev();
extern void _ZN8S20192C22v5Ev();
extern void _ZN8S20192C22v6Ev();
extern void _ZN8S20192C22v7Ev();
extern void _ZN8S20192C33v11Ev();
extern void _ZN8S20192C33v12Ev();
extern void _ZN8S20192C33v13Ev();
extern void _ZN8S20192C33v14Ev();
extern void _ZN8S20192C33v15Ev();
extern void _ZN8S20192C22v4Ev();
extern void _ZN8S20192C22v5Ev();
extern void _ZN8S20192C22v6Ev();
extern void _ZN8S20192C22v7Ev();
extern void _ZN8S20192C42v8Ev();
extern void _ZN8S20192C42v9Ev();
extern void _ZN8S20192C43v10Ev();
extern void _ZN8S20192C53v30Ev();
extern void _ZN8S20192C53v31Ev();
extern void _ZN8S20192C53v32Ev();
extern void _ZN8S20192C53v33Ev();
extern void _ZN8S20192C53v34Ev();
extern void _ZN8S20192C53v35Ev();
extern void _ZN8S20192C53v36Ev();
extern void _ZN8S20192C53v37Ev();
extern void _ZN8S20192C53v38Ev();
extern void _ZN8S20192C73v16Ev();
extern void _ZN8S20192C73v17Ev();
extern void _ZN8S20192C73v18Ev();
extern void _ZN8S20192C73v19Ev();
extern void ABISELECT(_ZTv0_n56_N8S20192C1D1Ev,_ZTv0_n28_N8S20192C1D1Ev)();
extern void ABISELECT(_ZThn2632_N8S20192C1D1Ev,_ZThn1688_N8S20192C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S20192C1D0Ev,_ZTv0_n28_N8S20192C1D0Ev)();
extern void ABISELECT(_ZThn2632_N8S20192C1D0Ev,_ZThn1688_N8S20192C1D0Ev)() __attribute__((weak));
extern void _ZN8S20192C83v28Ev();
extern void _ZN8S20192C83v29Ev();
extern void _ZN8S20192C22v4Ev();
extern void _ZN8S20192C22v5Ev();
extern void _ZN8S20192C22v6Ev();
extern void _ZN8S20192C22v7Ev();
extern void _ZN8S20192C42v8Ev();
extern void _ZN8S20192C42v9Ev();
extern void _ZN8S20192C43v10Ev();
extern void _ZN9S20192C103v20Ev();
extern void _ZN9S20192C103v21Ev();
extern void _ZN9S20192C103v22Ev();
extern void _ZN9S20192C103v23Ev();
extern void _ZN8S20192C93v24Ev();
extern void _ZN8S20192C93v25Ev();
extern void _ZN8S20192C93v26Ev();
extern void _ZN8S20192C93v27Ev();
static  VTBL_ENTRY vtc_S20192C1[] = {
  ABISELECT(1152,756),
  ABISELECT(2640,1692),
  ABISELECT(2632,1688),
  ABISELECT(2624,1684),
  ABISELECT(944,624),
  ABISELECT(912,612),
  ABISELECT(752,504),
  0,
  (VTBL_ENTRY)&(_ZTI8S20192C1[0]),
  (VTBL_ENTRY)&_ZN8S20192C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20192C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20192C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20192C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20192C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20192C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20192C43v10Ev,
  (VTBL_ENTRY)&_ZN9S20192C103v20Ev,
  (VTBL_ENTRY)&_ZN9S20192C103v21Ev,
  (VTBL_ENTRY)&_ZN9S20192C103v22Ev,
  (VTBL_ENTRY)&_ZN9S20192C103v23Ev,
  (VTBL_ENTRY)&_ZN8S20192C93v24Ev,
  (VTBL_ENTRY)&_ZN8S20192C93v25Ev,
  (VTBL_ENTRY)&_ZN8S20192C93v26Ev,
  (VTBL_ENTRY)&_ZN8S20192C93v27Ev,
  (VTBL_ENTRY)&_ZN8S20192C1D1Ev,
  (VTBL_ENTRY)&_ZN8S20192C1D0Ev,
  (VTBL_ENTRY)&_ZN8S20192C63v43Ev,
  (VTBL_ENTRY)&_ZN8S20192C63v44Ev,
  (VTBL_ENTRY)&_ZN8S20192C63v45Ev,
  (VTBL_ENTRY)&_ZN8S20192C63v46Ev,
  (VTBL_ENTRY)&_ZN8S20192C63v47Ev,
  (VTBL_ENTRY)&_ZN8S20192C63v48Ev,
  (VTBL_ENTRY)&_ZN8S20192C63v49Ev,
  (VTBL_ENTRY)&_ZN8S20192C63v50Ev,
  (VTBL_ENTRY)&_ZN8S20192C12v1Ev,
  (VTBL_ENTRY)&_ZN8S20192C12v2Ev,
  (VTBL_ENTRY)&_ZN8S20192C12v3Ev,
  ABISELECT(864,564),
  ABISELECT(656,432),
  ABISELECT(624,420),
  ABISELECT(464,312),
  ABISELECT(-288,-192),
  (VTBL_ENTRY)&(_ZTI8S20192C1[0]),
  (VTBL_ENTRY)&_ZN8S20192C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20192C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20192C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20192C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20192C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20192C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20192C43v10Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn288_N8S20192C1D1Ev,_ZThn192_N8S20192C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn288_N8S20192C1D0Ev,_ZThn192_N8S20192C1D0Ev),
  (VTBL_ENTRY)&_ZN9S20192C123v39Ev,
  (VTBL_ENTRY)&_ZN9S20192C123v40Ev,
  (VTBL_ENTRY)&_ZN9S20192C123v41Ev,
  (VTBL_ENTRY)&_ZN9S20192C123v42Ev,
  ABISELECT(-544,-372),
  (VTBL_ENTRY)&(_ZTI8S20192C1[0]),
  (VTBL_ENTRY)&_ZN8S20192C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20192C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20192C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20192C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20192C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20192C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20192C43v10Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-752,-504),
  (VTBL_ENTRY)&(_ZTI8S20192C1[0]),
  (VTBL_ENTRY)&_ZN8S20192C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20192C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20192C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20192C22v7Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(32,12),
  ABISELECT(-160,-108),
  ABISELECT(-912,-612),
  (VTBL_ENTRY)&(_ZTI8S20192C1[0]),
  (VTBL_ENTRY)&_ZN8S20192C33v11Ev,
  (VTBL_ENTRY)&_ZN8S20192C33v12Ev,
  (VTBL_ENTRY)&_ZN8S20192C33v13Ev,
  (VTBL_ENTRY)&_ZN8S20192C33v14Ev,
  (VTBL_ENTRY)&_ZN8S20192C33v15Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-944,-624),
  (VTBL_ENTRY)&(_ZTI8S20192C1[0]),
  (VTBL_ENTRY)&_ZN8S20192C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20192C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20192C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20192C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20192C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20192C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20192C43v10Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-1152,-756),
  (VTBL_ENTRY)&(_ZTI8S20192C1[0]),
  (VTBL_ENTRY)&_ZN8S20192C53v30Ev,
  (VTBL_ENTRY)&_ZN8S20192C53v31Ev,
  (VTBL_ENTRY)&_ZN8S20192C53v32Ev,
  (VTBL_ENTRY)&_ZN8S20192C53v33Ev,
  (VTBL_ENTRY)&_ZN8S20192C53v34Ev,
  (VTBL_ENTRY)&_ZN8S20192C53v35Ev,
  (VTBL_ENTRY)&_ZN8S20192C53v36Ev,
  (VTBL_ENTRY)&_ZN8S20192C53v37Ev,
  (VTBL_ENTRY)&_ZN8S20192C53v38Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-2624,-1684),
  (VTBL_ENTRY)&(_ZTI8S20192C1[0]),
  (VTBL_ENTRY)&_ZN8S20192C73v16Ev,
  (VTBL_ENTRY)&_ZN8S20192C73v17Ev,
  (VTBL_ENTRY)&_ZN8S20192C73v18Ev,
  (VTBL_ENTRY)&_ZN8S20192C73v19Ev,
  0,
  0,
  ABISELECT(-2632,-1688),
  ABISELECT(-1688,-1064),
  ABISELECT(-1880,-1184),
  ABISELECT(-1720,-1076),
  ABISELECT(8,4),
  ABISELECT(-2632,-1688),
  (VTBL_ENTRY)&(_ZTI8S20192C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S20192C1D1Ev,_ZTv0_n28_N8S20192C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S20192C1D0Ev,_ZTv0_n28_N8S20192C1D0Ev),
  (VTBL_ENTRY)&_ZN8S20192C83v28Ev,
  (VTBL_ENTRY)&_ZN8S20192C83v29Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-1696,-1068),
  ABISELECT(-1728,-1080),
  ABISELECT(-1888,-1188),
  ABISELECT(-2640,-1692),
  (VTBL_ENTRY)&(_ZTI8S20192C1[0]),
  (VTBL_ENTRY)&_ZN8S20192C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20192C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20192C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20192C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20192C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20192C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20192C43v10Ev,
  (VTBL_ENTRY)&_ZN9S20192C103v20Ev,
  (VTBL_ENTRY)&_ZN9S20192C103v21Ev,
  (VTBL_ENTRY)&_ZN9S20192C103v22Ev,
  (VTBL_ENTRY)&_ZN9S20192C103v23Ev,
  (VTBL_ENTRY)&_ZN8S20192C93v24Ev,
  (VTBL_ENTRY)&_ZN8S20192C93v25Ev,
  (VTBL_ENTRY)&_ZN8S20192C93v26Ev,
  (VTBL_ENTRY)&_ZN8S20192C93v27Ev,
};
extern VTBL_ENTRY _ZTV8S20192C1[];
extern void _ZN8S20192C22v4Ev();
extern void _ZN8S20192C22v5Ev();
extern void _ZN8S20192C22v6Ev();
extern void _ZN8S20192C22v7Ev();
extern void _ZN8S20192C42v8Ev();
extern void _ZN8S20192C42v9Ev();
extern void _ZN8S20192C43v10Ev();
extern void _ZN9S20192C103v20Ev();
extern void _ZN9S20192C103v21Ev();
extern void _ZN9S20192C103v22Ev();
extern void _ZN9S20192C103v23Ev();
extern void _ZN8S20192C93v24Ev();
extern void _ZN8S20192C93v25Ev();
extern void _ZN8S20192C93v26Ev();
extern void _ZN8S20192C93v27Ev();
extern void _ZN8S20192C6D1Ev();
extern void _ZN8S20192C6D0Ev();
extern void _ZN8S20192C63v43Ev();
extern void _ZN8S20192C63v44Ev();
extern void _ZN8S20192C63v45Ev();
extern void _ZN8S20192C63v46Ev();
extern void _ZN8S20192C63v47Ev();
extern void _ZN8S20192C63v48Ev();
extern void _ZN8S20192C63v49Ev();
extern void _ZN8S20192C63v50Ev();
static  VTBL_ENTRY _tg__ZTV8S20192C6__8S20192C1[] = {
  ABISELECT(1152,756),
  ABISELECT(2640,1692),
  ABISELECT(2632,1688),
  ABISELECT(2624,1684),
  ABISELECT(944,624),
  ABISELECT(912,612),
  ABISELECT(752,504),
  0,
  (VTBL_ENTRY)&(_ZTI8S20192C6[0]),
  (VTBL_ENTRY)&_ZN8S20192C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20192C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20192C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20192C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20192C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20192C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20192C43v10Ev,
  (VTBL_ENTRY)&_ZN9S20192C103v20Ev,
  (VTBL_ENTRY)&_ZN9S20192C103v21Ev,
  (VTBL_ENTRY)&_ZN9S20192C103v22Ev,
  (VTBL_ENTRY)&_ZN9S20192C103v23Ev,
  (VTBL_ENTRY)&_ZN8S20192C93v24Ev,
  (VTBL_ENTRY)&_ZN8S20192C93v25Ev,
  (VTBL_ENTRY)&_ZN8S20192C93v26Ev,
  (VTBL_ENTRY)&_ZN8S20192C93v27Ev,
  (VTBL_ENTRY)&_ZN8S20192C6D1Ev,
  (VTBL_ENTRY)&_ZN8S20192C6D0Ev,
  (VTBL_ENTRY)&_ZN8S20192C63v43Ev,
  (VTBL_ENTRY)&_ZN8S20192C63v44Ev,
  (VTBL_ENTRY)&_ZN8S20192C63v45Ev,
  (VTBL_ENTRY)&_ZN8S20192C63v46Ev,
  (VTBL_ENTRY)&_ZN8S20192C63v47Ev,
  (VTBL_ENTRY)&_ZN8S20192C63v48Ev,
  (VTBL_ENTRY)&_ZN8S20192C63v49Ev,
  (VTBL_ENTRY)&_ZN8S20192C63v50Ev,
};
extern void _ZN8S20192C22v4Ev();
extern void _ZN8S20192C22v5Ev();
extern void _ZN8S20192C22v6Ev();
extern void _ZN8S20192C22v7Ev();
extern void _ZN8S20192C42v8Ev();
extern void _ZN8S20192C42v9Ev();
extern void _ZN8S20192C43v10Ev();
extern void _ZN9S20192C103v20Ev();
extern void _ZN9S20192C103v21Ev();
extern void _ZN9S20192C103v22Ev();
extern void _ZN9S20192C103v23Ev();
extern void _ZN8S20192C93v24Ev();
extern void _ZN8S20192C93v25Ev();
extern void _ZN8S20192C93v26Ev();
extern void _ZN8S20192C93v27Ev();
static  VTBL_ENTRY _tg__ZTV8S20192C98S20192C6__A1__8S20192C1[] = {
  ABISELECT(944,624),
  ABISELECT(912,612),
  ABISELECT(752,504),
  0,
  (VTBL_ENTRY)&(_ZTI8S20192C9[0]),
  (VTBL_ENTRY)&_ZN8S20192C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20192C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20192C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20192C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20192C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20192C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20192C43v10Ev,
  (VTBL_ENTRY)&_ZN9S20192C103v20Ev,
  (VTBL_ENTRY)&_ZN9S20192C103v21Ev,
  (VTBL_ENTRY)&_ZN9S20192C103v22Ev,
  (VTBL_ENTRY)&_ZN9S20192C103v23Ev,
  (VTBL_ENTRY)&_ZN8S20192C93v24Ev,
  (VTBL_ENTRY)&_ZN8S20192C93v25Ev,
  (VTBL_ENTRY)&_ZN8S20192C93v26Ev,
  (VTBL_ENTRY)&_ZN8S20192C93v27Ev,
};
extern void _ZN8S20192C22v4Ev();
extern void _ZN8S20192C22v5Ev();
extern void _ZN8S20192C22v6Ev();
extern void _ZN8S20192C22v7Ev();
extern void _ZN8S20192C42v8Ev();
extern void _ZN8S20192C42v9Ev();
extern void _ZN8S20192C43v10Ev();
extern void _ZN9S20192C103v20Ev();
extern void _ZN9S20192C103v21Ev();
extern void _ZN9S20192C103v22Ev();
extern void _ZN9S20192C103v23Ev();
static  VTBL_ENTRY _tg__ZTV9S20192C108S20192C98S20192C6__A1__8S20192C1[] = {
  ABISELECT(752,504),
  0,
  (VTBL_ENTRY)&(_ZTI9S20192C10[0]),
  (VTBL_ENTRY)&_ZN8S20192C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20192C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20192C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20192C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20192C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20192C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20192C43v10Ev,
  (VTBL_ENTRY)&_ZN9S20192C103v20Ev,
  (VTBL_ENTRY)&_ZN9S20192C103v21Ev,
  (VTBL_ENTRY)&_ZN9S20192C103v22Ev,
  (VTBL_ENTRY)&_ZN9S20192C103v23Ev,
};
extern void _ZN8S20192C22v4Ev();
extern void _ZN8S20192C22v5Ev();
extern void _ZN8S20192C22v6Ev();
extern void _ZN8S20192C22v7Ev();
static  VTBL_ENTRY _tg__ZTV8S20192C2__9S20192C108S20192C98S20192C6__A1__8S20192C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-752,-504),
  (VTBL_ENTRY)&(_ZTI9S20192C10[0]),
  (VTBL_ENTRY)&_ZN8S20192C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20192C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20192C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20192C22v7Ev,
};
extern void _ZN8S20192C33v11Ev();
extern void _ZN8S20192C33v12Ev();
extern void _ZN8S20192C33v13Ev();
extern void _ZN8S20192C33v14Ev();
extern void _ZN8S20192C33v15Ev();
static  VTBL_ENTRY _tg__ZTV8S20192C3__8S20192C98S20192C6__A1__8S20192C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(32,12),
  ABISELECT(-160,-108),
  ABISELECT(-912,-612),
  (VTBL_ENTRY)&(_ZTI8S20192C9[0]),
  (VTBL_ENTRY)&_ZN8S20192C33v11Ev,
  (VTBL_ENTRY)&_ZN8S20192C33v12Ev,
  (VTBL_ENTRY)&_ZN8S20192C33v13Ev,
  (VTBL_ENTRY)&_ZN8S20192C33v14Ev,
  (VTBL_ENTRY)&_ZN8S20192C33v15Ev,
};
extern void _ZN8S20192C22v4Ev();
extern void _ZN8S20192C22v5Ev();
extern void _ZN8S20192C22v6Ev();
extern void _ZN8S20192C22v7Ev();
static  VTBL_ENTRY _tg__ZTV8S20192C2__8S20192C98S20192C6__A1__8S20192C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-752,-504),
  (VTBL_ENTRY)&(_ZTI8S20192C9[0]),
  (VTBL_ENTRY)&_ZN8S20192C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20192C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20192C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20192C22v7Ev,
};
extern void _ZN8S20192C22v4Ev();
extern void _ZN8S20192C22v5Ev();
extern void _ZN8S20192C22v6Ev();
extern void _ZN8S20192C22v7Ev();
extern void _ZN8S20192C42v8Ev();
extern void _ZN8S20192C42v9Ev();
extern void _ZN8S20192C43v10Ev();
static  VTBL_ENTRY _tg__ZTV8S20192C4__8S20192C98S20192C6__A1__8S20192C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-944,-624),
  (VTBL_ENTRY)&(_ZTI8S20192C9[0]),
  (VTBL_ENTRY)&_ZN8S20192C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20192C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20192C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20192C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20192C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20192C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20192C43v10Ev,
};
extern void _ZN8S20192C22v4Ev();
extern void _ZN8S20192C22v5Ev();
extern void _ZN8S20192C22v6Ev();
extern void _ZN8S20192C22v7Ev();
extern void _ZN8S20192C42v8Ev();
extern void _ZN8S20192C42v9Ev();
extern void _ZN8S20192C43v10Ev();
extern void _ZN9S20192C12D1Ev();
extern void _ZN9S20192C12D0Ev();
extern void _ZN9S20192C123v39Ev();
extern void _ZN9S20192C123v40Ev();
extern void _ZN9S20192C123v41Ev();
extern void _ZN9S20192C123v42Ev();
static  VTBL_ENTRY _tg__ZTV9S20192C128S20192C6__8S20192C1[] = {
  ABISELECT(864,564),
  ABISELECT(656,432),
  ABISELECT(624,420),
  ABISELECT(464,312),
  0,
  (VTBL_ENTRY)&(_ZTI9S20192C12[0]),
  (VTBL_ENTRY)&_ZN8S20192C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20192C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20192C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20192C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20192C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20192C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20192C43v10Ev,
  (VTBL_ENTRY)&_ZN9S20192C12D1Ev,
  (VTBL_ENTRY)&_ZN9S20192C12D0Ev,
  (VTBL_ENTRY)&_ZN9S20192C123v39Ev,
  (VTBL_ENTRY)&_ZN9S20192C123v40Ev,
  (VTBL_ENTRY)&_ZN9S20192C123v41Ev,
  (VTBL_ENTRY)&_ZN9S20192C123v42Ev,
};
extern void _ZN8S20192C22v4Ev();
extern void _ZN8S20192C22v5Ev();
extern void _ZN8S20192C22v6Ev();
extern void _ZN8S20192C22v7Ev();
static  VTBL_ENTRY _tg__ZTV8S20192C2__9S20192C128S20192C6__8S20192C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-464,-312),
  (VTBL_ENTRY)&(_ZTI9S20192C12[0]),
  (VTBL_ENTRY)&_ZN8S20192C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20192C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20192C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20192C22v7Ev,
};
extern void _ZN8S20192C33v11Ev();
extern void _ZN8S20192C33v12Ev();
extern void _ZN8S20192C33v13Ev();
extern void _ZN8S20192C33v14Ev();
extern void _ZN8S20192C33v15Ev();
static  VTBL_ENTRY _tg__ZTV8S20192C3__9S20192C128S20192C6__8S20192C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(32,12),
  ABISELECT(-160,-108),
  ABISELECT(-624,-420),
  (VTBL_ENTRY)&(_ZTI9S20192C12[0]),
  (VTBL_ENTRY)&_ZN8S20192C33v11Ev,
  (VTBL_ENTRY)&_ZN8S20192C33v12Ev,
  (VTBL_ENTRY)&_ZN8S20192C33v13Ev,
  (VTBL_ENTRY)&_ZN8S20192C33v14Ev,
  (VTBL_ENTRY)&_ZN8S20192C33v15Ev,
};
extern void _ZN8S20192C22v4Ev();
extern void _ZN8S20192C22v5Ev();
extern void _ZN8S20192C22v6Ev();
extern void _ZN8S20192C22v7Ev();
extern void _ZN8S20192C42v8Ev();
extern void _ZN8S20192C42v9Ev();
extern void _ZN8S20192C43v10Ev();
static  VTBL_ENTRY _tg__ZTV8S20192C4__9S20192C128S20192C6__8S20192C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-656,-432),
  (VTBL_ENTRY)&(_ZTI9S20192C12[0]),
  (VTBL_ENTRY)&_ZN8S20192C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20192C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20192C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20192C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20192C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20192C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20192C43v10Ev,
};
extern void _ZN8S20192C53v30Ev();
extern void _ZN8S20192C53v31Ev();
extern void _ZN8S20192C53v32Ev();
extern void _ZN8S20192C53v33Ev();
extern void _ZN8S20192C53v34Ev();
extern void _ZN8S20192C53v35Ev();
extern void _ZN8S20192C53v36Ev();
extern void _ZN8S20192C53v37Ev();
extern void _ZN8S20192C53v38Ev();
static  VTBL_ENTRY _tg__ZTV8S20192C5__9S20192C128S20192C6__8S20192C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-864,-564),
  (VTBL_ENTRY)&(_ZTI9S20192C12[0]),
  (VTBL_ENTRY)&_ZN8S20192C53v30Ev,
  (VTBL_ENTRY)&_ZN8S20192C53v31Ev,
  (VTBL_ENTRY)&_ZN8S20192C53v32Ev,
  (VTBL_ENTRY)&_ZN8S20192C53v33Ev,
  (VTBL_ENTRY)&_ZN8S20192C53v34Ev,
  (VTBL_ENTRY)&_ZN8S20192C53v35Ev,
  (VTBL_ENTRY)&_ZN8S20192C53v36Ev,
  (VTBL_ENTRY)&_ZN8S20192C53v37Ev,
  (VTBL_ENTRY)&_ZN8S20192C53v38Ev,
};
extern void _ZN8S20192C73v16Ev();
extern void _ZN8S20192C73v17Ev();
extern void _ZN8S20192C73v18Ev();
extern void _ZN8S20192C73v19Ev();
static  VTBL_ENTRY _tg__ZTV8S20192C7__8S20192C6__8S20192C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-2624,-1684),
  (VTBL_ENTRY)&(_ZTI8S20192C6[0]),
  (VTBL_ENTRY)&_ZN8S20192C73v16Ev,
  (VTBL_ENTRY)&_ZN8S20192C73v17Ev,
  (VTBL_ENTRY)&_ZN8S20192C73v18Ev,
  (VTBL_ENTRY)&_ZN8S20192C73v19Ev,
};
extern void ABISELECT(_ZTv0_n56_N8S20192C6D1Ev,_ZTv0_n28_N8S20192C6D1Ev)();
extern void ABISELECT(_ZThn2632_N8S20192C6D1Ev,_ZThn1688_N8S20192C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S20192C6D0Ev,_ZTv0_n28_N8S20192C6D0Ev)();
extern void ABISELECT(_ZThn2632_N8S20192C6D0Ev,_ZThn1688_N8S20192C6D0Ev)() __attribute__((weak));
extern void _ZN8S20192C83v28Ev();
extern void _ZN8S20192C83v29Ev();
static  VTBL_ENTRY _tg__ZTV8S20192C8__8S20192C6__8S20192C1[] = {
  0,
  0,
  ABISELECT(-2632,-1688),
  ABISELECT(-1688,-1064),
  ABISELECT(-1880,-1184),
  ABISELECT(-1720,-1076),
  ABISELECT(8,4),
  ABISELECT(-2632,-1688),
  (VTBL_ENTRY)&(_ZTI8S20192C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S20192C6D1Ev,_ZTv0_n28_N8S20192C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S20192C6D0Ev,_ZTv0_n28_N8S20192C6D0Ev),
  (VTBL_ENTRY)&_ZN8S20192C83v28Ev,
  (VTBL_ENTRY)&_ZN8S20192C83v29Ev,
};
extern void _ZN8S20192C22v4Ev();
extern void _ZN8S20192C22v5Ev();
extern void _ZN8S20192C22v6Ev();
extern void _ZN8S20192C22v7Ev();
extern void _ZN8S20192C42v8Ev();
extern void _ZN8S20192C42v9Ev();
extern void _ZN8S20192C43v10Ev();
extern void _ZN9S20192C103v20Ev();
extern void _ZN9S20192C103v21Ev();
extern void _ZN9S20192C103v22Ev();
extern void _ZN9S20192C103v23Ev();
extern void _ZN8S20192C93v24Ev();
extern void _ZN8S20192C93v25Ev();
extern void _ZN8S20192C93v26Ev();
extern void _ZN8S20192C93v27Ev();
static  VTBL_ENTRY _tg__ZTV8S20192C9__8S20192C6__8S20192C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-1696,-1068),
  ABISELECT(-1728,-1080),
  ABISELECT(-1888,-1188),
  ABISELECT(-2640,-1692),
  (VTBL_ENTRY)&(_ZTI8S20192C6[0]),
  (VTBL_ENTRY)&_ZN8S20192C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20192C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20192C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20192C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20192C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20192C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20192C43v10Ev,
  (VTBL_ENTRY)&_ZN9S20192C103v20Ev,
  (VTBL_ENTRY)&_ZN9S20192C103v21Ev,
  (VTBL_ENTRY)&_ZN9S20192C103v22Ev,
  (VTBL_ENTRY)&_ZN9S20192C103v23Ev,
  (VTBL_ENTRY)&_ZN8S20192C93v24Ev,
  (VTBL_ENTRY)&_ZN8S20192C93v25Ev,
  (VTBL_ENTRY)&_ZN8S20192C93v26Ev,
  (VTBL_ENTRY)&_ZN8S20192C93v27Ev,
};
extern void _ZN8S20192C33v11Ev();
extern void _ZN8S20192C33v12Ev();
extern void _ZN8S20192C33v13Ev();
extern void _ZN8S20192C33v14Ev();
extern void _ZN8S20192C33v15Ev();
static  VTBL_ENTRY _tg__ZTV8S20192C3__8S20192C6__8S20192C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(32,12),
  ABISELECT(-160,-108),
  ABISELECT(-912,-612),
  (VTBL_ENTRY)&(_ZTI8S20192C6[0]),
  (VTBL_ENTRY)&_ZN8S20192C33v11Ev,
  (VTBL_ENTRY)&_ZN8S20192C33v12Ev,
  (VTBL_ENTRY)&_ZN8S20192C33v13Ev,
  (VTBL_ENTRY)&_ZN8S20192C33v14Ev,
  (VTBL_ENTRY)&_ZN8S20192C33v15Ev,
};
extern void _ZN8S20192C22v4Ev();
extern void _ZN8S20192C22v5Ev();
extern void _ZN8S20192C22v6Ev();
extern void _ZN8S20192C22v7Ev();
static  VTBL_ENTRY _tg__ZTV8S20192C2__8S20192C6__8S20192C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-752,-504),
  (VTBL_ENTRY)&(_ZTI8S20192C6[0]),
  (VTBL_ENTRY)&_ZN8S20192C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20192C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20192C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20192C22v7Ev,
};
extern void _ZN8S20192C22v4Ev();
extern void _ZN8S20192C22v5Ev();
extern void _ZN8S20192C22v6Ev();
extern void _ZN8S20192C22v7Ev();
extern void _ZN8S20192C42v8Ev();
extern void _ZN8S20192C42v9Ev();
extern void _ZN8S20192C43v10Ev();
static  VTBL_ENTRY _tg__ZTV8S20192C4__8S20192C6__8S20192C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-944,-624),
  (VTBL_ENTRY)&(_ZTI8S20192C6[0]),
  (VTBL_ENTRY)&_ZN8S20192C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20192C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20192C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20192C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20192C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20192C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20192C43v10Ev,
};
extern void _ZN8S20192C22v4Ev();
extern void _ZN8S20192C22v5Ev();
extern void _ZN8S20192C22v6Ev();
extern void _ZN8S20192C22v7Ev();
extern void _ZN8S20192C42v8Ev();
extern void _ZN8S20192C42v9Ev();
extern void _ZN8S20192C43v10Ev();
extern void ABISELECT(_ZThn288_N8S20192C6D1Ev,_ZThn192_N8S20192C6D1Ev)();
extern void ABISELECT(_ZThn288_N8S20192C6D0Ev,_ZThn192_N8S20192C6D0Ev)();
extern void _ZN9S20192C123v39Ev();
extern void _ZN9S20192C123v40Ev();
extern void _ZN9S20192C123v41Ev();
extern void _ZN9S20192C123v42Ev();
static  VTBL_ENTRY _tg__ZTV9S20192C12__8S20192C6__8S20192C1[] = {
  ABISELECT(864,564),
  ABISELECT(656,432),
  ABISELECT(624,420),
  ABISELECT(464,312),
  ABISELECT(-288,-192),
  (VTBL_ENTRY)&(_ZTI8S20192C6[0]),
  (VTBL_ENTRY)&_ZN8S20192C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20192C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20192C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20192C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20192C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20192C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20192C43v10Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn288_N8S20192C6D1Ev,_ZThn192_N8S20192C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn288_N8S20192C6D0Ev,_ZThn192_N8S20192C6D0Ev),
  (VTBL_ENTRY)&_ZN9S20192C123v39Ev,
  (VTBL_ENTRY)&_ZN9S20192C123v40Ev,
  (VTBL_ENTRY)&_ZN9S20192C123v41Ev,
  (VTBL_ENTRY)&_ZN9S20192C123v42Ev,
};
extern void _ZN8S20192C53v30Ev();
extern void _ZN8S20192C53v31Ev();
extern void _ZN8S20192C53v32Ev();
extern void _ZN8S20192C53v33Ev();
extern void _ZN8S20192C53v34Ev();
extern void _ZN8S20192C53v35Ev();
extern void _ZN8S20192C53v36Ev();
extern void _ZN8S20192C53v37Ev();
extern void _ZN8S20192C53v38Ev();
static  VTBL_ENTRY _tg__ZTV8S20192C5__8S20192C6__8S20192C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-1152,-756),
  (VTBL_ENTRY)&(_ZTI8S20192C6[0]),
  (VTBL_ENTRY)&_ZN8S20192C53v30Ev,
  (VTBL_ENTRY)&_ZN8S20192C53v31Ev,
  (VTBL_ENTRY)&_ZN8S20192C53v32Ev,
  (VTBL_ENTRY)&_ZN8S20192C53v33Ev,
  (VTBL_ENTRY)&_ZN8S20192C53v34Ev,
  (VTBL_ENTRY)&_ZN8S20192C53v35Ev,
  (VTBL_ENTRY)&_ZN8S20192C53v36Ev,
  (VTBL_ENTRY)&_ZN8S20192C53v37Ev,
  (VTBL_ENTRY)&_ZN8S20192C53v38Ev,
};
extern void _ZN8S20192C33v11Ev();
extern void _ZN8S20192C33v12Ev();
extern void _ZN8S20192C33v13Ev();
extern void _ZN8S20192C33v14Ev();
extern void _ZN8S20192C33v15Ev();
static  VTBL_ENTRY _tg__ZTV8S20192C3__8S20192C1[] = {
  ABISELECT(32,12),
  ABISELECT(-160,-108),
  0,
  (VTBL_ENTRY)&(_ZTI8S20192C3[0]),
  (VTBL_ENTRY)&_ZN8S20192C33v11Ev,
  (VTBL_ENTRY)&_ZN8S20192C33v12Ev,
  (VTBL_ENTRY)&_ZN8S20192C33v13Ev,
  (VTBL_ENTRY)&_ZN8S20192C33v14Ev,
  (VTBL_ENTRY)&_ZN8S20192C33v15Ev,
};
extern void _ZN8S20192C22v4Ev();
extern void _ZN8S20192C22v5Ev();
extern void _ZN8S20192C22v6Ev();
extern void _ZN8S20192C22v7Ev();
static  VTBL_ENTRY _tg__ZTV8S20192C2__8S20192C3__8S20192C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(160,108),
  (VTBL_ENTRY)&(_ZTI8S20192C3[0]),
  (VTBL_ENTRY)&_ZN8S20192C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20192C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20192C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20192C22v7Ev,
};
extern void _ZN8S20192C22v4Ev();
extern void _ZN8S20192C22v5Ev();
extern void _ZN8S20192C22v6Ev();
extern void _ZN8S20192C22v7Ev();
extern void _ZN8S20192C42v8Ev();
extern void _ZN8S20192C42v9Ev();
extern void _ZN8S20192C43v10Ev();
static  VTBL_ENTRY _tg__ZTV8S20192C4__8S20192C3__8S20192C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-32,-12),
  (VTBL_ENTRY)&(_ZTI8S20192C3[0]),
  (VTBL_ENTRY)&_ZN8S20192C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20192C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20192C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20192C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20192C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20192C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20192C43v10Ev,
};
extern void _ZN8S20192C8D1Ev();
extern void _ZN8S20192C8D0Ev();
extern void _ZN8S20192C83v28Ev();
extern void _ZN8S20192C83v29Ev();
static  VTBL_ENTRY _tg__ZTV8S20192C8__8S20192C1[] = {
  ABISELECT(-1688,-1064),
  ABISELECT(-1880,-1184),
  ABISELECT(-1720,-1076),
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S20192C8[0]),
  (VTBL_ENTRY)&_ZN8S20192C8D1Ev,
  (VTBL_ENTRY)&_ZN8S20192C8D0Ev,
  (VTBL_ENTRY)&_ZN8S20192C83v28Ev,
  (VTBL_ENTRY)&_ZN8S20192C83v29Ev,
};
extern void _ZN8S20192C22v4Ev();
extern void _ZN8S20192C22v5Ev();
extern void _ZN8S20192C22v6Ev();
extern void _ZN8S20192C22v7Ev();
extern void _ZN8S20192C42v8Ev();
extern void _ZN8S20192C42v9Ev();
extern void _ZN8S20192C43v10Ev();
extern void _ZN9S20192C103v20Ev();
extern void _ZN9S20192C103v21Ev();
extern void _ZN9S20192C103v22Ev();
extern void _ZN9S20192C103v23Ev();
extern void _ZN8S20192C93v24Ev();
extern void _ZN8S20192C93v25Ev();
extern void _ZN8S20192C93v26Ev();
extern void _ZN8S20192C93v27Ev();
static  VTBL_ENTRY _tg__ZTV8S20192C9__8S20192C8__8S20192C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-1696,-1068),
  ABISELECT(-1728,-1080),
  ABISELECT(-1888,-1188),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S20192C8[0]),
  (VTBL_ENTRY)&_ZN8S20192C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20192C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20192C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20192C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20192C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20192C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20192C43v10Ev,
  (VTBL_ENTRY)&_ZN9S20192C103v20Ev,
  (VTBL_ENTRY)&_ZN9S20192C103v21Ev,
  (VTBL_ENTRY)&_ZN9S20192C103v22Ev,
  (VTBL_ENTRY)&_ZN9S20192C103v23Ev,
  (VTBL_ENTRY)&_ZN8S20192C93v24Ev,
  (VTBL_ENTRY)&_ZN8S20192C93v25Ev,
  (VTBL_ENTRY)&_ZN8S20192C93v26Ev,
  (VTBL_ENTRY)&_ZN8S20192C93v27Ev,
};
extern void _ZN8S20192C33v11Ev();
extern void _ZN8S20192C33v12Ev();
extern void _ZN8S20192C33v13Ev();
extern void _ZN8S20192C33v14Ev();
extern void _ZN8S20192C33v15Ev();
static  VTBL_ENTRY _tg__ZTV8S20192C3__8S20192C8__8S20192C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(32,12),
  ABISELECT(-160,-108),
  ABISELECT(1720,1076),
  (VTBL_ENTRY)&(_ZTI8S20192C8[0]),
  (VTBL_ENTRY)&_ZN8S20192C33v11Ev,
  (VTBL_ENTRY)&_ZN8S20192C33v12Ev,
  (VTBL_ENTRY)&_ZN8S20192C33v13Ev,
  (VTBL_ENTRY)&_ZN8S20192C33v14Ev,
  (VTBL_ENTRY)&_ZN8S20192C33v15Ev,
};
extern void _ZN8S20192C22v4Ev();
extern void _ZN8S20192C22v5Ev();
extern void _ZN8S20192C22v6Ev();
extern void _ZN8S20192C22v7Ev();
static  VTBL_ENTRY _tg__ZTV8S20192C2__8S20192C8__8S20192C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(1880,1184),
  (VTBL_ENTRY)&(_ZTI8S20192C8[0]),
  (VTBL_ENTRY)&_ZN8S20192C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20192C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20192C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20192C22v7Ev,
};
extern void _ZN8S20192C22v4Ev();
extern void _ZN8S20192C22v5Ev();
extern void _ZN8S20192C22v6Ev();
extern void _ZN8S20192C22v7Ev();
extern void _ZN8S20192C42v8Ev();
extern void _ZN8S20192C42v9Ev();
extern void _ZN8S20192C43v10Ev();
static  VTBL_ENTRY _tg__ZTV8S20192C4__8S20192C8__8S20192C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(1688,1064),
  (VTBL_ENTRY)&(_ZTI8S20192C8[0]),
  (VTBL_ENTRY)&_ZN8S20192C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20192C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20192C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20192C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20192C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20192C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20192C43v10Ev,
};
extern void _ZN8S20192C22v4Ev();
extern void _ZN8S20192C22v5Ev();
extern void _ZN8S20192C22v6Ev();
extern void _ZN8S20192C22v7Ev();
extern void _ZN8S20192C42v8Ev();
extern void _ZN8S20192C42v9Ev();
extern void _ZN8S20192C43v10Ev();
extern void _ZN9S20192C103v20Ev();
extern void _ZN9S20192C103v21Ev();
extern void _ZN9S20192C103v22Ev();
extern void _ZN9S20192C103v23Ev();
extern void _ZN8S20192C93v24Ev();
extern void _ZN8S20192C93v25Ev();
extern void _ZN8S20192C93v26Ev();
extern void _ZN8S20192C93v27Ev();
static  VTBL_ENTRY _tg__ZTV8S20192C9__8S20192C1[] = {
  ABISELECT(-1696,-1068),
  ABISELECT(-1728,-1080),
  ABISELECT(-1888,-1188),
  0,
  (VTBL_ENTRY)&(_ZTI8S20192C9[0]),
  (VTBL_ENTRY)&_ZN8S20192C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20192C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20192C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20192C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20192C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20192C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20192C43v10Ev,
  (VTBL_ENTRY)&_ZN9S20192C103v20Ev,
  (VTBL_ENTRY)&_ZN9S20192C103v21Ev,
  (VTBL_ENTRY)&_ZN9S20192C103v22Ev,
  (VTBL_ENTRY)&_ZN9S20192C103v23Ev,
  (VTBL_ENTRY)&_ZN8S20192C93v24Ev,
  (VTBL_ENTRY)&_ZN8S20192C93v25Ev,
  (VTBL_ENTRY)&_ZN8S20192C93v26Ev,
  (VTBL_ENTRY)&_ZN8S20192C93v27Ev,
};
extern void _ZN8S20192C22v4Ev();
extern void _ZN8S20192C22v5Ev();
extern void _ZN8S20192C22v6Ev();
extern void _ZN8S20192C22v7Ev();
extern void _ZN8S20192C42v8Ev();
extern void _ZN8S20192C42v9Ev();
extern void _ZN8S20192C43v10Ev();
extern void _ZN9S20192C103v20Ev();
extern void _ZN9S20192C103v21Ev();
extern void _ZN9S20192C103v22Ev();
extern void _ZN9S20192C103v23Ev();
static  VTBL_ENTRY _tg__ZTV9S20192C108S20192C9__8S20192C1[] = {
  ABISELECT(-1888,-1188),
  0,
  (VTBL_ENTRY)&(_ZTI9S20192C10[0]),
  (VTBL_ENTRY)&_ZN8S20192C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20192C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20192C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20192C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20192C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20192C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20192C43v10Ev,
  (VTBL_ENTRY)&_ZN9S20192C103v20Ev,
  (VTBL_ENTRY)&_ZN9S20192C103v21Ev,
  (VTBL_ENTRY)&_ZN9S20192C103v22Ev,
  (VTBL_ENTRY)&_ZN9S20192C103v23Ev,
};
extern void _ZN8S20192C22v4Ev();
extern void _ZN8S20192C22v5Ev();
extern void _ZN8S20192C22v6Ev();
extern void _ZN8S20192C22v7Ev();
static  VTBL_ENTRY _tg__ZTV8S20192C2__9S20192C108S20192C9__8S20192C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(1888,1188),
  (VTBL_ENTRY)&(_ZTI9S20192C10[0]),
  (VTBL_ENTRY)&_ZN8S20192C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20192C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20192C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20192C22v7Ev,
};
extern void _ZN8S20192C33v11Ev();
extern void _ZN8S20192C33v12Ev();
extern void _ZN8S20192C33v13Ev();
extern void _ZN8S20192C33v14Ev();
extern void _ZN8S20192C33v15Ev();
static  VTBL_ENTRY _tg__ZTV8S20192C3__8S20192C9__8S20192C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(32,12),
  ABISELECT(-160,-108),
  ABISELECT(1728,1080),
  (VTBL_ENTRY)&(_ZTI8S20192C9[0]),
  (VTBL_ENTRY)&_ZN8S20192C33v11Ev,
  (VTBL_ENTRY)&_ZN8S20192C33v12Ev,
  (VTBL_ENTRY)&_ZN8S20192C33v13Ev,
  (VTBL_ENTRY)&_ZN8S20192C33v14Ev,
  (VTBL_ENTRY)&_ZN8S20192C33v15Ev,
};
extern void _ZN8S20192C22v4Ev();
extern void _ZN8S20192C22v5Ev();
extern void _ZN8S20192C22v6Ev();
extern void _ZN8S20192C22v7Ev();
static  VTBL_ENTRY _tg__ZTV8S20192C2__8S20192C9__8S20192C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(1888,1188),
  (VTBL_ENTRY)&(_ZTI8S20192C9[0]),
  (VTBL_ENTRY)&_ZN8S20192C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20192C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20192C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20192C22v7Ev,
};
extern void _ZN8S20192C22v4Ev();
extern void _ZN8S20192C22v5Ev();
extern void _ZN8S20192C22v6Ev();
extern void _ZN8S20192C22v7Ev();
extern void _ZN8S20192C42v8Ev();
extern void _ZN8S20192C42v9Ev();
extern void _ZN8S20192C43v10Ev();
static  VTBL_ENTRY _tg__ZTV8S20192C4__8S20192C9__8S20192C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(1696,1068),
  (VTBL_ENTRY)&(_ZTI8S20192C9[0]),
  (VTBL_ENTRY)&_ZN8S20192C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20192C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20192C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20192C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20192C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20192C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20192C43v10Ev,
};
static  VTT_ENTRY vtt_S20192C1[] = {
  {&(_ZTV8S20192C1[9]),  9,183},
  {&(_tg__ZTV8S20192C6__8S20192C1[9]),  9,34},
  {&(_tg__ZTV8S20192C98S20192C6__A1__8S20192C1[5]),  5,20},
  {&(_tg__ZTV9S20192C108S20192C98S20192C6__A1__8S20192C1[3]),  3,14},
  {&(_tg__ZTV8S20192C2__9S20192C108S20192C98S20192C6__A1__8S20192C1[6]),  6,10},
  {&(_tg__ZTV8S20192C3__8S20192C98S20192C6__A1__8S20192C1[9]),  9,14},
  {&(_tg__ZTV8S20192C2__8S20192C98S20192C6__A1__8S20192C1[6]),  6,10},
  {&(_tg__ZTV8S20192C4__8S20192C98S20192C6__A1__8S20192C1[9]),  9,16},
  {&(_tg__ZTV9S20192C128S20192C6__8S20192C1[6]),  6,19},
  {&(_tg__ZTV8S20192C2__9S20192C128S20192C6__8S20192C1[6]),  6,10},
  {&(_tg__ZTV8S20192C3__9S20192C128S20192C6__8S20192C1[9]),  9,14},
  {&(_tg__ZTV8S20192C4__9S20192C128S20192C6__8S20192C1[9]),  9,16},
  {&(_tg__ZTV8S20192C5__9S20192C128S20192C6__8S20192C1[11]),  11,20},
  {&(_tg__ZTV8S20192C7__8S20192C6__8S20192C1[6]),  6,10},
  {&(_tg__ZTV8S20192C8__8S20192C6__8S20192C1[9]),  9,13},
  {&(_tg__ZTV8S20192C9__8S20192C6__8S20192C1[20]),  20,35},
  {&(_tg__ZTV8S20192C3__8S20192C6__8S20192C1[9]),  9,14},
  {&(_tg__ZTV8S20192C2__8S20192C6__8S20192C1[6]),  6,10},
  {&(_tg__ZTV8S20192C4__8S20192C6__8S20192C1[9]),  9,16},
  {&(_tg__ZTV9S20192C12__8S20192C6__8S20192C1[6]),  6,19},
  {&(_tg__ZTV8S20192C5__8S20192C6__8S20192C1[11]),  11,20},
  {&(_ZTV8S20192C1[71]),  71,183},
  {&(_ZTV8S20192C1[84]),  84,183},
  {&(_ZTV8S20192C1[98]),  98,183},
  {&(_ZTV8S20192C1[116]),  116,183},
  {&(_ZTV8S20192C1[131]),  131,183},
  {&(_ZTV8S20192C1[144]),  144,183},
  {&(_ZTV8S20192C1[168]),  168,183},
  {&(_ZTV8S20192C1[43]),  43,183},
  {&(_tg__ZTV8S20192C3__8S20192C1[4]),  4,9},
  {&(_tg__ZTV8S20192C2__8S20192C3__8S20192C1[6]),  6,10},
  {&(_tg__ZTV8S20192C4__8S20192C3__8S20192C1[9]),  9,16},
  {&(_tg__ZTV8S20192C8__8S20192C1[6]),  6,10},
  {&(_tg__ZTV8S20192C9__8S20192C8__8S20192C1[20]),  20,35},
  {&(_tg__ZTV8S20192C3__8S20192C8__8S20192C1[9]),  9,14},
  {&(_tg__ZTV8S20192C2__8S20192C8__8S20192C1[6]),  6,10},
  {&(_tg__ZTV8S20192C4__8S20192C8__8S20192C1[9]),  9,16},
  {&(_tg__ZTV8S20192C9__8S20192C1[5]),  5,20},
  {&(_tg__ZTV9S20192C108S20192C9__8S20192C1[3]),  3,14},
  {&(_tg__ZTV8S20192C2__9S20192C108S20192C9__8S20192C1[6]),  6,10},
  {&(_tg__ZTV8S20192C3__8S20192C9__8S20192C1[9]),  9,14},
  {&(_tg__ZTV8S20192C2__8S20192C9__8S20192C1[6]),  6,10},
  {&(_tg__ZTV8S20192C4__8S20192C9__8S20192C1[9]),  9,16},
};
extern VTBL_ENTRY _ZTI8S20192C1[];
extern  VTBL_ENTRY _ZTV8S20192C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20192C1[];
static VTBL_ENTRY alt_thunk_names30[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S20192C6D0Ev,_ZTv0_n28_N8S20192C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2632_N8S20192C6D0Ev,_ZThn1688_N8S20192C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S20192C6D1Ev,_ZTv0_n28_N8S20192C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2632_N8S20192C6D1Ev,_ZThn1688_N8S20192C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S20192C1D0Ev,_ZTv0_n28_N8S20192C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2632_N8S20192C1D0Ev,_ZThn1688_N8S20192C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S20192C1D1Ev,_ZTv0_n28_N8S20192C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2632_N8S20192C1D1Ev,_ZThn1688_N8S20192C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20192C1 = {  "S20192C1", // class name
  bases_S20192C1, 21,
  &(vtc_S20192C1[0]), // expected_vtbl_contents
  &(vtt_S20192C1[0]), // expected_vtt_contents
  ABISELECT(2928,1884), // object size
  NSPAIRA(_ZTI8S20192C1),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S20192C1),183, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20192C1),43, //virtual table table var
  21, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names30,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4308C3  {
  virtual  ~S4308C3(); // _ZN7S4308C3D1Ev
  virtual void  v19(); // _ZN7S4308C33v19Ev
  virtual void  v20(); // _ZN7S4308C33v20Ev
  virtual void  v21(); // _ZN7S4308C33v21Ev
  virtual void  v22(); // _ZN7S4308C33v22Ev
  virtual void  v23(); // _ZN7S4308C33v23Ev
  virtual void  v24(); // _ZN7S4308C33v24Ev
  virtual void  v25(); // _ZN7S4308C33v25Ev
  virtual void  v26(); // _ZN7S4308C33v26Ev
  virtual void  v27(); // _ZN7S4308C33v27Ev
  virtual void  v28(); // _ZN7S4308C33v28Ev
  virtual void  v29(); // _ZN7S4308C33v29Ev
  virtual void  v30(); // _ZN7S4308C33v30Ev
  virtual void  v31(); // _ZN7S4308C33v31Ev
  virtual void  v32(); // _ZN7S4308C33v32Ev
  virtual void  v33(); // _ZN7S4308C33v33Ev
  virtual void  v34(); // _ZN7S4308C33v34Ev
  virtual void  v35(); // _ZN7S4308C33v35Ev
  virtual void  v36(); // _ZN7S4308C33v36Ev
  virtual void  v37(); // _ZN7S4308C33v37Ev
  virtual void  v38(); // _ZN7S4308C33v38Ev
  virtual void  v39(); // _ZN7S4308C33v39Ev
  virtual void  v40(); // _ZN7S4308C33v40Ev
  virtual void  v41(); // _ZN7S4308C33v41Ev
  virtual void  v42(); // _ZN7S4308C33v42Ev
  virtual void  v43(); // _ZN7S4308C33v43Ev
  virtual void  v44(); // _ZN7S4308C33v44Ev
  S4308C3(); // tgen
};
//SIG(-1 S4308C3) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26}


 S4308C3 ::~S4308C3(){ note_dtor("S4308C3", this);}
void  S4308C3 ::v19(){vfunc_called(this, "_ZN7S4308C33v19Ev");}
void  S4308C3 ::v20(){vfunc_called(this, "_ZN7S4308C33v20Ev");}
void  S4308C3 ::v21(){vfunc_called(this, "_ZN7S4308C33v21Ev");}
void  S4308C3 ::v22(){vfunc_called(this, "_ZN7S4308C33v22Ev");}
void  S4308C3 ::v23(){vfunc_called(this, "_ZN7S4308C33v23Ev");}
void  S4308C3 ::v24(){vfunc_called(this, "_ZN7S4308C33v24Ev");}
void  S4308C3 ::v25(){vfunc_called(this, "_ZN7S4308C33v25Ev");}
void  S4308C3 ::v26(){vfunc_called(this, "_ZN7S4308C33v26Ev");}
void  S4308C3 ::v27(){vfunc_called(this, "_ZN7S4308C33v27Ev");}
void  S4308C3 ::v28(){vfunc_called(this, "_ZN7S4308C33v28Ev");}
void  S4308C3 ::v29(){vfunc_called(this, "_ZN7S4308C33v29Ev");}
void  S4308C3 ::v30(){vfunc_called(this, "_ZN7S4308C33v30Ev");}
void  S4308C3 ::v31(){vfunc_called(this, "_ZN7S4308C33v31Ev");}
void  S4308C3 ::v32(){vfunc_called(this, "_ZN7S4308C33v32Ev");}
void  S4308C3 ::v33(){vfunc_called(this, "_ZN7S4308C33v33Ev");}
void  S4308C3 ::v34(){vfunc_called(this, "_ZN7S4308C33v34Ev");}
void  S4308C3 ::v35(){vfunc_called(this, "_ZN7S4308C33v35Ev");}
void  S4308C3 ::v36(){vfunc_called(this, "_ZN7S4308C33v36Ev");}
void  S4308C3 ::v37(){vfunc_called(this, "_ZN7S4308C33v37Ev");}
void  S4308C3 ::v38(){vfunc_called(this, "_ZN7S4308C33v38Ev");}
void  S4308C3 ::v39(){vfunc_called(this, "_ZN7S4308C33v39Ev");}
void  S4308C3 ::v40(){vfunc_called(this, "_ZN7S4308C33v40Ev");}
void  S4308C3 ::v41(){vfunc_called(this, "_ZN7S4308C33v41Ev");}
void  S4308C3 ::v42(){vfunc_called(this, "_ZN7S4308C33v42Ev");}
void  S4308C3 ::v43(){vfunc_called(this, "_ZN7S4308C33v43Ev");}
void  S4308C3 ::v44(){vfunc_called(this, "_ZN7S4308C33v44Ev");}
S4308C3 ::S4308C3(){ note_ctor("S4308C3", this);} // tgen

static void Test_S4308C3()
{
  extern Class_Descriptor cd_S4308C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S4308C3, buf);
    S4308C3 *dp, &lv = *(dp=new (buf) S4308C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S4308C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4308C3)");
    test_class_info(&lv, &cd_S4308C3);
    dp->~S4308C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4308C3(Test_S4308C3, "S4308C3", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S4308C3C1Ev();
extern void _ZN7S4308C3D1Ev();
Name_Map name_map_S4308C3[] = {
  NSPAIR(_ZN7S4308C3C1Ev),
  NSPAIR(_ZN7S4308C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4308C3[];
extern void _ZN7S4308C3D1Ev();
extern void _ZN7S4308C3D0Ev();
extern void _ZN7S4308C33v19Ev();
extern void _ZN7S4308C33v20Ev();
extern void _ZN7S4308C33v21Ev();
extern void _ZN7S4308C33v22Ev();
extern void _ZN7S4308C33v23Ev();
extern void _ZN7S4308C33v24Ev();
extern void _ZN7S4308C33v25Ev();
extern void _ZN7S4308C33v26Ev();
extern void _ZN7S4308C33v27Ev();
extern void _ZN7S4308C33v28Ev();
extern void _ZN7S4308C33v29Ev();
extern void _ZN7S4308C33v30Ev();
extern void _ZN7S4308C33v31Ev();
extern void _ZN7S4308C33v32Ev();
extern void _ZN7S4308C33v33Ev();
extern void _ZN7S4308C33v34Ev();
extern void _ZN7S4308C33v35Ev();
extern void _ZN7S4308C33v36Ev();
extern void _ZN7S4308C33v37Ev();
extern void _ZN7S4308C33v38Ev();
extern void _ZN7S4308C33v39Ev();
extern void _ZN7S4308C33v40Ev();
extern void _ZN7S4308C33v41Ev();
extern void _ZN7S4308C33v42Ev();
extern void _ZN7S4308C33v43Ev();
extern void _ZN7S4308C33v44Ev();
static  VTBL_ENTRY vtc_S4308C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4308C3[0]),
  (VTBL_ENTRY)&_ZN7S4308C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4308C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4308C33v19Ev,
  (VTBL_ENTRY)&_ZN7S4308C33v20Ev,
  (VTBL_ENTRY)&_ZN7S4308C33v21Ev,
  (VTBL_ENTRY)&_ZN7S4308C33v22Ev,
  (VTBL_ENTRY)&_ZN7S4308C33v23Ev,
  (VTBL_ENTRY)&_ZN7S4308C33v24Ev,
  (VTBL_ENTRY)&_ZN7S4308C33v25Ev,
  (VTBL_ENTRY)&_ZN7S4308C33v26Ev,
  (VTBL_ENTRY)&_ZN7S4308C33v27Ev,
  (VTBL_ENTRY)&_ZN7S4308C33v28Ev,
  (VTBL_ENTRY)&_ZN7S4308C33v29Ev,
  (VTBL_ENTRY)&_ZN7S4308C33v30Ev,
  (VTBL_ENTRY)&_ZN7S4308C33v31Ev,
  (VTBL_ENTRY)&_ZN7S4308C33v32Ev,
  (VTBL_ENTRY)&_ZN7S4308C33v33Ev,
  (VTBL_ENTRY)&_ZN7S4308C33v34Ev,
  (VTBL_ENTRY)&_ZN7S4308C33v35Ev,
  (VTBL_ENTRY)&_ZN7S4308C33v36Ev,
  (VTBL_ENTRY)&_ZN7S4308C33v37Ev,
  (VTBL_ENTRY)&_ZN7S4308C33v38Ev,
  (VTBL_ENTRY)&_ZN7S4308C33v39Ev,
  (VTBL_ENTRY)&_ZN7S4308C33v40Ev,
  (VTBL_ENTRY)&_ZN7S4308C33v41Ev,
  (VTBL_ENTRY)&_ZN7S4308C33v42Ev,
  (VTBL_ENTRY)&_ZN7S4308C33v43Ev,
  (VTBL_ENTRY)&_ZN7S4308C33v44Ev,
};
extern VTBL_ENTRY _ZTI7S4308C3[];
extern  VTBL_ENTRY _ZTV7S4308C3[];
Class_Descriptor cd_S4308C3 = {  "S4308C3", // class name
  0,0,//no base classes
  &(vtc_S4308C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S4308C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4308C3),30, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4308C2  : S4308C3 {
  void *s4308c2f0[2];
  int s4308c2f1[4];
  ::S2423C5_nt s4308c2f2;
  void *s4308c2f3;
  char s4308c2f4;
  void *s4308c2f5;
  virtual  ~S4308C2(); // _ZN7S4308C2D1Ev
  virtual void  v45(); // _ZN7S4308C23v45Ev
  virtual void  v46(); // _ZN7S4308C23v46Ev
  virtual void  v47(); // _ZN7S4308C23v47Ev
  virtual void  v48(); // _ZN7S4308C23v48Ev
  virtual void  v49(); // _ZN7S4308C23v49Ev
  virtual void  v50(); // _ZN7S4308C23v50Ev
  virtual void  v51(); // _ZN7S4308C23v51Ev
  virtual void  v52(); // _ZN7S4308C23v52Ev
  virtual void  v53(); // _ZN7S4308C23v53Ev
  virtual void  v54(); // _ZN7S4308C23v54Ev
  virtual void  v55(); // _ZN7S4308C23v55Ev
  virtual void  v56(); // _ZN7S4308C23v56Ev
  virtual void  v57(); // _ZN7S4308C23v57Ev
  virtual void  v58(); // _ZN7S4308C23v58Ev
  S4308C2(); // tgen
};
//SIG(-1 S4308C2) C1{ BC2{ vd v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 Fp[2] Fi[4] FC3{ Fi[2]} Fp Fc Fp}


 S4308C2 ::~S4308C2(){ note_dtor("S4308C2", this);}
void  S4308C2 ::v45(){vfunc_called(this, "_ZN7S4308C23v45Ev");}
void  S4308C2 ::v46(){vfunc_called(this, "_ZN7S4308C23v46Ev");}
void  S4308C2 ::v47(){vfunc_called(this, "_ZN7S4308C23v47Ev");}
void  S4308C2 ::v48(){vfunc_called(this, "_ZN7S4308C23v48Ev");}
void  S4308C2 ::v49(){vfunc_called(this, "_ZN7S4308C23v49Ev");}
void  S4308C2 ::v50(){vfunc_called(this, "_ZN7S4308C23v50Ev");}
void  S4308C2 ::v51(){vfunc_called(this, "_ZN7S4308C23v51Ev");}
void  S4308C2 ::v52(){vfunc_called(this, "_ZN7S4308C23v52Ev");}
void  S4308C2 ::v53(){vfunc_called(this, "_ZN7S4308C23v53Ev");}
void  S4308C2 ::v54(){vfunc_called(this, "_ZN7S4308C23v54Ev");}
void  S4308C2 ::v55(){vfunc_called(this, "_ZN7S4308C23v55Ev");}
void  S4308C2 ::v56(){vfunc_called(this, "_ZN7S4308C23v56Ev");}
void  S4308C2 ::v57(){vfunc_called(this, "_ZN7S4308C23v57Ev");}
void  S4308C2 ::v58(){vfunc_called(this, "_ZN7S4308C23v58Ev");}
S4308C2 ::S4308C2(){ note_ctor("S4308C2", this);} // tgen

static void Test_S4308C2()
{
  extern Class_Descriptor cd_S4308C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,13)];
    init_test(&cd_S4308C2, buf);
    S4308C2 *dp, &lv = *(dp=new (buf) S4308C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,48), "sizeof(S4308C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4308C2)");
    check_base_class_offset(lv, (S4308C3*), 0, "S4308C2");
    check_field_offset(lv, s4308c2f0, ABISELECT(8,4), "S4308C2.s4308c2f0");
    check_field_offset(lv, s4308c2f1, ABISELECT(24,12), "S4308C2.s4308c2f1");
    check_field_offset(lv, s4308c2f2, ABISELECT(40,28), "S4308C2.s4308c2f2");
    check_field_offset(lv, s4308c2f3, ABISELECT(48,36), "S4308C2.s4308c2f3");
    check_field_offset(lv, s4308c2f4, ABISELECT(56,40), "S4308C2.s4308c2f4");
    check_field_offset(lv, s4308c2f5, ABISELECT(64,44), "S4308C2.s4308c2f5");
    test_class_info(&lv, &cd_S4308C2);
    dp->~S4308C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4308C2(Test_S4308C2, "S4308C2", ABISELECT(72,48));

#else // __cplusplus

extern void _ZN7S4308C2C1Ev();
extern void _ZN7S4308C2D1Ev();
Name_Map name_map_S4308C2[] = {
  NSPAIR(_ZN7S4308C2C1Ev),
  NSPAIR(_ZN7S4308C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4308C3;
extern VTBL_ENTRY _ZTI7S4308C3[];
extern  VTBL_ENTRY _ZTV7S4308C3[];
static Base_Class bases_S4308C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4308C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4308C2[];
extern void _ZN7S4308C2D1Ev();
extern void _ZN7S4308C2D0Ev();
extern void _ZN7S4308C33v19Ev();
extern void _ZN7S4308C33v20Ev();
extern void _ZN7S4308C33v21Ev();
extern void _ZN7S4308C33v22Ev();
extern void _ZN7S4308C33v23Ev();
extern void _ZN7S4308C33v24Ev();
extern void _ZN7S4308C33v25Ev();
extern void _ZN7S4308C33v26Ev();
extern void _ZN7S4308C33v27Ev();
extern void _ZN7S4308C33v28Ev();
extern void _ZN7S4308C33v29Ev();
extern void _ZN7S4308C33v30Ev();
extern void _ZN7S4308C33v31Ev();
extern void _ZN7S4308C33v32Ev();
extern void _ZN7S4308C33v33Ev();
extern void _ZN7S4308C33v34Ev();
extern void _ZN7S4308C33v35Ev();
extern void _ZN7S4308C33v36Ev();
extern void _ZN7S4308C33v37Ev();
extern void _ZN7S4308C33v38Ev();
extern void _ZN7S4308C33v39Ev();
extern void _ZN7S4308C33v40Ev();
extern void _ZN7S4308C33v41Ev();
extern void _ZN7S4308C33v42Ev();
extern void _ZN7S4308C33v43Ev();
extern void _ZN7S4308C33v44Ev();
extern void _ZN7S4308C23v45Ev();
extern void _ZN7S4308C23v46Ev();
extern void _ZN7S4308C23v47Ev();
extern void _ZN7S4308C23v48Ev();
extern void _ZN7S4308C23v49Ev();
extern void _ZN7S4308C23v50Ev();
extern void _ZN7S4308C23v51Ev();
extern void _ZN7S4308C23v52Ev();
extern void _ZN7S4308C23v53Ev();
extern void _ZN7S4308C23v54Ev();
extern void _ZN7S4308C23v55Ev();
extern void _ZN7S4308C23v56Ev();
extern void _ZN7S4308C23v57Ev();
extern void _ZN7S4308C23v58Ev();
static  VTBL_ENTRY vtc_S4308C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4308C2[0]),
  (VTBL_ENTRY)&_ZN7S4308C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4308C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4308C33v19Ev,
  (VTBL_ENTRY)&_ZN7S4308C33v20Ev,
  (VTBL_ENTRY)&_ZN7S4308C33v21Ev,
  (VTBL_ENTRY)&_ZN7S4308C33v22Ev,
  (VTBL_ENTRY)&_ZN7S4308C33v23Ev,
  (VTBL_ENTRY)&_ZN7S4308C33v24Ev,
  (VTBL_ENTRY)&_ZN7S4308C33v25Ev,
  (VTBL_ENTRY)&_ZN7S4308C33v26Ev,
  (VTBL_ENTRY)&_ZN7S4308C33v27Ev,
  (VTBL_ENTRY)&_ZN7S4308C33v28Ev,
  (VTBL_ENTRY)&_ZN7S4308C33v29Ev,
  (VTBL_ENTRY)&_ZN7S4308C33v30Ev,
  (VTBL_ENTRY)&_ZN7S4308C33v31Ev,
  (VTBL_ENTRY)&_ZN7S4308C33v32Ev,
  (VTBL_ENTRY)&_ZN7S4308C33v33Ev,
  (VTBL_ENTRY)&_ZN7S4308C33v34Ev,
  (VTBL_ENTRY)&_ZN7S4308C33v35Ev,
  (VTBL_ENTRY)&_ZN7S4308C33v36Ev,
  (VTBL_ENTRY)&_ZN7S4308C33v37Ev,
  (VTBL_ENTRY)&_ZN7S4308C33v38Ev,
  (VTBL_ENTRY)&_ZN7S4308C33v39Ev,
  (VTBL_ENTRY)&_ZN7S4308C33v40Ev,
  (VTBL_ENTRY)&_ZN7S4308C33v41Ev,
  (VTBL_ENTRY)&_ZN7S4308C33v42Ev,
  (VTBL_ENTRY)&_ZN7S4308C33v43Ev,
  (VTBL_ENTRY)&_ZN7S4308C33v44Ev,
  (VTBL_ENTRY)&_ZN7S4308C23v45Ev,
  (VTBL_ENTRY)&_ZN7S4308C23v46Ev,
  (VTBL_ENTRY)&_ZN7S4308C23v47Ev,
  (VTBL_ENTRY)&_ZN7S4308C23v48Ev,
  (VTBL_ENTRY)&_ZN7S4308C23v49Ev,
  (VTBL_ENTRY)&_ZN7S4308C23v50Ev,
  (VTBL_ENTRY)&_ZN7S4308C23v51Ev,
  (VTBL_ENTRY)&_ZN7S4308C23v52Ev,
  (VTBL_ENTRY)&_ZN7S4308C23v53Ev,
  (VTBL_ENTRY)&_ZN7S4308C23v54Ev,
  (VTBL_ENTRY)&_ZN7S4308C23v55Ev,
  (VTBL_ENTRY)&_ZN7S4308C23v56Ev,
  (VTBL_ENTRY)&_ZN7S4308C23v57Ev,
  (VTBL_ENTRY)&_ZN7S4308C23v58Ev,
};
extern VTBL_ENTRY _ZTI7S4308C2[];
extern  VTBL_ENTRY _ZTV7S4308C2[];
Class_Descriptor cd_S4308C2 = {  "S4308C2", // class name
  bases_S4308C2, 1,
  &(vtc_S4308C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,48), // object size
  NSPAIRA(_ZTI7S4308C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4308C2),44, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4308C5  {
  virtual  ~S4308C5(); // _ZN7S4308C5D1Ev
  virtual void  v59(); // _ZN7S4308C53v59Ev
  virtual void  v60(); // _ZN7S4308C53v60Ev
  virtual void  v61(); // _ZN7S4308C53v61Ev
  virtual void  v62(); // _ZN7S4308C53v62Ev
  virtual void  v63(); // _ZN7S4308C53v63Ev
  virtual void  v64(); // _ZN7S4308C53v64Ev
  S4308C5(); // tgen
};
//SIG(-1 S4308C5) C1{ vd v1 v2 v3 v4 v5 v6}


 S4308C5 ::~S4308C5(){ note_dtor("S4308C5", this);}
void  S4308C5 ::v59(){vfunc_called(this, "_ZN7S4308C53v59Ev");}
void  S4308C5 ::v60(){vfunc_called(this, "_ZN7S4308C53v60Ev");}
void  S4308C5 ::v61(){vfunc_called(this, "_ZN7S4308C53v61Ev");}
void  S4308C5 ::v62(){vfunc_called(this, "_ZN7S4308C53v62Ev");}
void  S4308C5 ::v63(){vfunc_called(this, "_ZN7S4308C53v63Ev");}
void  S4308C5 ::v64(){vfunc_called(this, "_ZN7S4308C53v64Ev");}
S4308C5 ::S4308C5(){ note_ctor("S4308C5", this);} // tgen

static void Test_S4308C5()
{
  extern Class_Descriptor cd_S4308C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S4308C5, buf);
    S4308C5 *dp, &lv = *(dp=new (buf) S4308C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S4308C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4308C5)");
    test_class_info(&lv, &cd_S4308C5);
    dp->~S4308C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4308C5(Test_S4308C5, "S4308C5", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S4308C5C1Ev();
extern void _ZN7S4308C5D1Ev();
Name_Map name_map_S4308C5[] = {
  NSPAIR(_ZN7S4308C5C1Ev),
  NSPAIR(_ZN7S4308C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4308C5[];
extern void _ZN7S4308C5D1Ev();
extern void _ZN7S4308C5D0Ev();
extern void _ZN7S4308C53v59Ev();
extern void _ZN7S4308C53v60Ev();
extern void _ZN7S4308C53v61Ev();
extern void _ZN7S4308C53v62Ev();
extern void _ZN7S4308C53v63Ev();
extern void _ZN7S4308C53v64Ev();
static  VTBL_ENTRY vtc_S4308C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4308C5[0]),
  (VTBL_ENTRY)&_ZN7S4308C5D1Ev,
  (VTBL_ENTRY)&_ZN7S4308C5D0Ev,
  (VTBL_ENTRY)&_ZN7S4308C53v59Ev,
  (VTBL_ENTRY)&_ZN7S4308C53v60Ev,
  (VTBL_ENTRY)&_ZN7S4308C53v61Ev,
  (VTBL_ENTRY)&_ZN7S4308C53v62Ev,
  (VTBL_ENTRY)&_ZN7S4308C53v63Ev,
  (VTBL_ENTRY)&_ZN7S4308C53v64Ev,
};
extern VTBL_ENTRY _ZTI7S4308C5[];
extern  VTBL_ENTRY _ZTV7S4308C5[];
Class_Descriptor cd_S4308C5 = {  "S4308C5", // class name
  0,0,//no base classes
  &(vtc_S4308C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S4308C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4308C5),10, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4308C6  {
  virtual  ~S4308C6(); // _ZN7S4308C6D1Ev
  virtual void  v65(); // _ZN7S4308C63v65Ev
  virtual void  v66(); // _ZN7S4308C63v66Ev
  virtual void  v67(); // _ZN7S4308C63v67Ev
  S4308C6(); // tgen
};
//SIG(-1 S4308C6) C1{ vd v1 v2 v3}


 S4308C6 ::~S4308C6(){ note_dtor("S4308C6", this);}
void  S4308C6 ::v65(){vfunc_called(this, "_ZN7S4308C63v65Ev");}
void  S4308C6 ::v66(){vfunc_called(this, "_ZN7S4308C63v66Ev");}
void  S4308C6 ::v67(){vfunc_called(this, "_ZN7S4308C63v67Ev");}
S4308C6 ::S4308C6(){ note_ctor("S4308C6", this);} // tgen

static void Test_S4308C6()
{
  extern Class_Descriptor cd_S4308C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S4308C6, buf);
    S4308C6 *dp, &lv = *(dp=new (buf) S4308C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S4308C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4308C6)");
    test_class_info(&lv, &cd_S4308C6);
    dp->~S4308C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4308C6(Test_S4308C6, "S4308C6", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S4308C6C1Ev();
extern void _ZN7S4308C6D1Ev();
Name_Map name_map_S4308C6[] = {
  NSPAIR(_ZN7S4308C6C1Ev),
  NSPAIR(_ZN7S4308C6D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4308C6[];
extern void _ZN7S4308C6D1Ev();
extern void _ZN7S4308C6D0Ev();
extern void _ZN7S4308C63v65Ev();
extern void _ZN7S4308C63v66Ev();
extern void _ZN7S4308C63v67Ev();
static  VTBL_ENTRY vtc_S4308C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4308C6[0]),
  (VTBL_ENTRY)&_ZN7S4308C6D1Ev,
  (VTBL_ENTRY)&_ZN7S4308C6D0Ev,
  (VTBL_ENTRY)&_ZN7S4308C63v65Ev,
  (VTBL_ENTRY)&_ZN7S4308C63v66Ev,
  (VTBL_ENTRY)&_ZN7S4308C63v67Ev,
};
extern VTBL_ENTRY _ZTI7S4308C6[];
extern  VTBL_ENTRY _ZTV7S4308C6[];
Class_Descriptor cd_S4308C6 = {  "S4308C6", // class name
  0,0,//no base classes
  &(vtc_S4308C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S4308C6),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4308C6),7, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4308C1  : S4308C2 , S4308C5 , S4308C6 {
  int s4308c1f0;
  void *s4308c1f1;
  __tsi64 s4308c1f2;
  long s4308c1f3;
  __tsi64 s4308c1f4;
  void *s4308c1f5;
  long s4308c1f6;
  __tsi64 s4308c1f7[2];
  void *s4308c1f8[4];
  char s4308c1f9[4];
  void *s4308c1f10[4];
  virtual  ~S4308C1(); // _ZN7S4308C1D1Ev
  virtual void  v1(); // _ZN7S4308C12v1Ev
  virtual void  v2(); // _ZN7S4308C12v2Ev
  virtual void  v3(); // _ZN7S4308C12v3Ev
  virtual void  v4(); // _ZN7S4308C12v4Ev
  virtual void  v5(); // _ZN7S4308C12v5Ev
  virtual void  v6(); // _ZN7S4308C12v6Ev
  virtual void  v7(); // _ZN7S4308C12v7Ev
  virtual void  v8(); // _ZN7S4308C12v8Ev
  virtual void  v9(); // _ZN7S4308C12v9Ev
  virtual void  v10(); // _ZN7S4308C13v10Ev
  virtual void  v11(); // _ZN7S4308C13v11Ev
  virtual void  v12(); // _ZN7S4308C13v12Ev
  virtual void  v13(); // _ZN7S4308C13v13Ev
  virtual void  v14(); // _ZN7S4308C13v14Ev
  virtual void  v15(); // _ZN7S4308C13v15Ev
  virtual void  v16(); // _ZN7S4308C13v16Ev
  virtual void  v17(); // _ZN7S4308C13v17Ev
  virtual void  v18(); // _ZN7S4308C13v18Ev
  S4308C1(); // tgen
};
//SIG(1 S4308C1) C1{ BC2{ BC3{ vd v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44} vd v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 Fp[2] Fi[4] FC4{ Fi[2]} Fp Fc Fp} BC5{ vd v59 v60 v61 v62 v63 v64} BC6{ vd v65 v66 v67} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 Fi Fp FL Fl FL Fp Fl FL[2] Fp[4] Fc[4] Fp[4]}


 S4308C1 ::~S4308C1(){ note_dtor("S4308C1", this);}
void  S4308C1 ::v1(){vfunc_called(this, "_ZN7S4308C12v1Ev");}
void  S4308C1 ::v2(){vfunc_called(this, "_ZN7S4308C12v2Ev");}
void  S4308C1 ::v3(){vfunc_called(this, "_ZN7S4308C12v3Ev");}
void  S4308C1 ::v4(){vfunc_called(this, "_ZN7S4308C12v4Ev");}
void  S4308C1 ::v5(){vfunc_called(this, "_ZN7S4308C12v5Ev");}
void  S4308C1 ::v6(){vfunc_called(this, "_ZN7S4308C12v6Ev");}
void  S4308C1 ::v7(){vfunc_called(this, "_ZN7S4308C12v7Ev");}
void  S4308C1 ::v8(){vfunc_called(this, "_ZN7S4308C12v8Ev");}
void  S4308C1 ::v9(){vfunc_called(this, "_ZN7S4308C12v9Ev");}
void  S4308C1 ::v10(){vfunc_called(this, "_ZN7S4308C13v10Ev");}
void  S4308C1 ::v11(){vfunc_called(this, "_ZN7S4308C13v11Ev");}
void  S4308C1 ::v12(){vfunc_called(this, "_ZN7S4308C13v12Ev");}
void  S4308C1 ::v13(){vfunc_called(this, "_ZN7S4308C13v13Ev");}
void  S4308C1 ::v14(){vfunc_called(this, "_ZN7S4308C13v14Ev");}
void  S4308C1 ::v15(){vfunc_called(this, "_ZN7S4308C13v15Ev");}
void  S4308C1 ::v16(){vfunc_called(this, "_ZN7S4308C13v16Ev");}
void  S4308C1 ::v17(){vfunc_called(this, "_ZN7S4308C13v17Ev");}
void  S4308C1 ::v18(){vfunc_called(this, "_ZN7S4308C13v18Ev");}
S4308C1 ::S4308C1(){ note_ctor("S4308C1", this);} // tgen

static void Test_S4308C1()
{
  extern Class_Descriptor cd_S4308C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(30,37)];
    init_test(&cd_S4308C1, buf);
    S4308C1 *dp, &lv = *(dp=new (buf) S4308C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(232,144), "sizeof(S4308C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4308C1)");
    check_base_class_offset(lv, (S4308C3*)(S4308C2*), 0, "S4308C1");
    check_base_class_offset(lv, (S4308C2*), 0, "S4308C1");
    check_base_class_offset(lv, (S4308C5*), ABISELECT(72,48), "S4308C1");
    check_base_class_offset(lv, (S4308C6*), ABISELECT(80,52), "S4308C1");
    check_field_offset(lv, s4308c1f0, ABISELECT(88,56), "S4308C1.s4308c1f0");
    check_field_offset(lv, s4308c1f1, ABISELECT(96,60), "S4308C1.s4308c1f1");
    check_field_offset(lv, s4308c1f2, ABISELECT(104,64), "S4308C1.s4308c1f2");
    check_field_offset(lv, s4308c1f3, ABISELECT(112,72), "S4308C1.s4308c1f3");
    check_field_offset(lv, s4308c1f4, ABISELECT(120,76), "S4308C1.s4308c1f4");
    check_field_offset(lv, s4308c1f5, ABISELECT(128,84), "S4308C1.s4308c1f5");
    check_field_offset(lv, s4308c1f6, ABISELECT(136,88), "S4308C1.s4308c1f6");
    check_field_offset(lv, s4308c1f7, ABISELECT(144,92), "S4308C1.s4308c1f7");
    check_field_offset(lv, s4308c1f8, ABISELECT(160,108), "S4308C1.s4308c1f8");
    check_field_offset(lv, s4308c1f9, ABISELECT(192,124), "S4308C1.s4308c1f9");
    check_field_offset(lv, s4308c1f10, ABISELECT(200,128), "S4308C1.s4308c1f10");
    test_class_info(&lv, &cd_S4308C1);
    dp->~S4308C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4308C1(Test_S4308C1, "S4308C1", ABISELECT(232,144));

#else // __cplusplus

extern void _ZN7S4308C1C1Ev();
extern void _ZN7S4308C1D1Ev();
Name_Map name_map_S4308C1[] = {
  NSPAIR(_ZN7S4308C1C1Ev),
  NSPAIR(_ZN7S4308C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4308C3;
extern VTBL_ENTRY _ZTI7S4308C3[];
extern  VTBL_ENTRY _ZTV7S4308C3[];
extern Class_Descriptor cd_S4308C2;
extern VTBL_ENTRY _ZTI7S4308C2[];
extern  VTBL_ENTRY _ZTV7S4308C2[];
extern Class_Descriptor cd_S4308C5;
extern VTBL_ENTRY _ZTI7S4308C5[];
extern  VTBL_ENTRY _ZTV7S4308C5[];
extern Class_Descriptor cd_S4308C6;
extern VTBL_ENTRY _ZTI7S4308C6[];
extern  VTBL_ENTRY _ZTV7S4308C6[];
static Base_Class bases_S4308C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4308C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S4308C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S4308C5,    ABISELECT(72,48), //bcp->offset
    62, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S4308C6,    ABISELECT(80,52), //bcp->offset
    72, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4308C1[];
extern void _ZN7S4308C1D1Ev();
extern void _ZN7S4308C1D0Ev();
extern void _ZN7S4308C33v19Ev();
extern void _ZN7S4308C33v20Ev();
extern void _ZN7S4308C33v21Ev();
extern void _ZN7S4308C33v22Ev();
extern void _ZN7S4308C33v23Ev();
extern void _ZN7S4308C33v24Ev();
extern void _ZN7S4308C33v25Ev();
extern void _ZN7S4308C33v26Ev();
extern void _ZN7S4308C33v27Ev();
extern void _ZN7S4308C33v28Ev();
extern void _ZN7S4308C33v29Ev();
extern void _ZN7S4308C33v30Ev();
extern void _ZN7S4308C33v31Ev();
extern void _ZN7S4308C33v32Ev();
extern void _ZN7S4308C33v33Ev();
extern void _ZN7S4308C33v34Ev();
extern void _ZN7S4308C33v35Ev();
extern void _ZN7S4308C33v36Ev();
extern void _ZN7S4308C33v37Ev();
extern void _ZN7S4308C33v38Ev();
extern void _ZN7S4308C33v39Ev();
extern void _ZN7S4308C33v40Ev();
extern void _ZN7S4308C33v41Ev();
extern void _ZN7S4308C33v42Ev();
extern void _ZN7S4308C33v43Ev();
extern void _ZN7S4308C33v44Ev();
extern void _ZN7S4308C23v45Ev();
extern void _ZN7S4308C23v46Ev();
extern void _ZN7S4308C23v47Ev();
extern void _ZN7S4308C23v48Ev();
extern void _ZN7S4308C23v49Ev();
extern void _ZN7S4308C23v50Ev();
extern void _ZN7S4308C23v51Ev();
extern void _ZN7S4308C23v52Ev();
extern void _ZN7S4308C23v53Ev();
extern void _ZN7S4308C23v54Ev();
extern void _ZN7S4308C23v55Ev();
extern void _ZN7S4308C23v56Ev();
extern void _ZN7S4308C23v57Ev();
extern void _ZN7S4308C23v58Ev();
extern void _ZN7S4308C12v1Ev();
extern void _ZN7S4308C12v2Ev();
extern void _ZN7S4308C12v3Ev();
extern void _ZN7S4308C12v4Ev();
extern void _ZN7S4308C12v5Ev();
extern void _ZN7S4308C12v6Ev();
extern void _ZN7S4308C12v7Ev();
extern void _ZN7S4308C12v8Ev();
extern void _ZN7S4308C12v9Ev();
extern void _ZN7S4308C13v10Ev();
extern void _ZN7S4308C13v11Ev();
extern void _ZN7S4308C13v12Ev();
extern void _ZN7S4308C13v13Ev();
extern void _ZN7S4308C13v14Ev();
extern void _ZN7S4308C13v15Ev();
extern void _ZN7S4308C13v16Ev();
extern void _ZN7S4308C13v17Ev();
extern void _ZN7S4308C13v18Ev();
extern void ABISELECT(_ZThn72_N7S4308C1D1Ev,_ZThn48_N7S4308C1D1Ev)();
extern void ABISELECT(_ZThn72_N7S4308C1D0Ev,_ZThn48_N7S4308C1D0Ev)();
extern void _ZN7S4308C53v59Ev();
extern void _ZN7S4308C53v60Ev();
extern void _ZN7S4308C53v61Ev();
extern void _ZN7S4308C53v62Ev();
extern void _ZN7S4308C53v63Ev();
extern void _ZN7S4308C53v64Ev();
extern void ABISELECT(_ZThn80_N7S4308C1D1Ev,_ZThn52_N7S4308C1D1Ev)();
extern void ABISELECT(_ZThn80_N7S4308C1D0Ev,_ZThn52_N7S4308C1D0Ev)();
extern void _ZN7S4308C63v65Ev();
extern void _ZN7S4308C63v66Ev();
extern void _ZN7S4308C63v67Ev();
static  VTBL_ENTRY vtc_S4308C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4308C1[0]),
  (VTBL_ENTRY)&_ZN7S4308C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4308C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4308C33v19Ev,
  (VTBL_ENTRY)&_ZN7S4308C33v20Ev,
  (VTBL_ENTRY)&_ZN7S4308C33v21Ev,
  (VTBL_ENTRY)&_ZN7S4308C33v22Ev,
  (VTBL_ENTRY)&_ZN7S4308C33v23Ev,
  (VTBL_ENTRY)&_ZN7S4308C33v24Ev,
  (VTBL_ENTRY)&_ZN7S4308C33v25Ev,
  (VTBL_ENTRY)&_ZN7S4308C33v26Ev,
  (VTBL_ENTRY)&_ZN7S4308C33v27Ev,
  (VTBL_ENTRY)&_ZN7S4308C33v28Ev,
  (VTBL_ENTRY)&_ZN7S4308C33v29Ev,
  (VTBL_ENTRY)&_ZN7S4308C33v30Ev,
  (VTBL_ENTRY)&_ZN7S4308C33v31Ev,
  (VTBL_ENTRY)&_ZN7S4308C33v32Ev,
  (VTBL_ENTRY)&_ZN7S4308C33v33Ev,
  (VTBL_ENTRY)&_ZN7S4308C33v34Ev,
  (VTBL_ENTRY)&_ZN7S4308C33v35Ev,
  (VTBL_ENTRY)&_ZN7S4308C33v36Ev,
  (VTBL_ENTRY)&_ZN7S4308C33v37Ev,
  (VTBL_ENTRY)&_ZN7S4308C33v38Ev,
  (VTBL_ENTRY)&_ZN7S4308C33v39Ev,
  (VTBL_ENTRY)&_ZN7S4308C33v40Ev,
  (VTBL_ENTRY)&_ZN7S4308C33v41Ev,
  (VTBL_ENTRY)&_ZN7S4308C33v42Ev,
  (VTBL_ENTRY)&_ZN7S4308C33v43Ev,
  (VTBL_ENTRY)&_ZN7S4308C33v44Ev,
  (VTBL_ENTRY)&_ZN7S4308C23v45Ev,
  (VTBL_ENTRY)&_ZN7S4308C23v46Ev,
  (VTBL_ENTRY)&_ZN7S4308C23v47Ev,
  (VTBL_ENTRY)&_ZN7S4308C23v48Ev,
  (VTBL_ENTRY)&_ZN7S4308C23v49Ev,
  (VTBL_ENTRY)&_ZN7S4308C23v50Ev,
  (VTBL_ENTRY)&_ZN7S4308C23v51Ev,
  (VTBL_ENTRY)&_ZN7S4308C23v52Ev,
  (VTBL_ENTRY)&_ZN7S4308C23v53Ev,
  (VTBL_ENTRY)&_ZN7S4308C23v54Ev,
  (VTBL_ENTRY)&_ZN7S4308C23v55Ev,
  (VTBL_ENTRY)&_ZN7S4308C23v56Ev,
  (VTBL_ENTRY)&_ZN7S4308C23v57Ev,
  (VTBL_ENTRY)&_ZN7S4308C23v58Ev,
  (VTBL_ENTRY)&_ZN7S4308C12v1Ev,
  (VTBL_ENTRY)&_ZN7S4308C12v2Ev,
  (VTBL_ENTRY)&_ZN7S4308C12v3Ev,
  (VTBL_ENTRY)&_ZN7S4308C12v4Ev,
  (VTBL_ENTRY)&_ZN7S4308C12v5Ev,
  (VTBL_ENTRY)&_ZN7S4308C12v6Ev,
  (VTBL_ENTRY)&_ZN7S4308C12v7Ev,
  (VTBL_ENTRY)&_ZN7S4308C12v8Ev,
  (VTBL_ENTRY)&_ZN7S4308C12v9Ev,
  (VTBL_ENTRY)&_ZN7S4308C13v10Ev,
  (VTBL_ENTRY)&_ZN7S4308C13v11Ev,
  (VTBL_ENTRY)&_ZN7S4308C13v12Ev,
  (VTBL_ENTRY)&_ZN7S4308C13v13Ev,
  (VTBL_ENTRY)&_ZN7S4308C13v14Ev,
  (VTBL_ENTRY)&_ZN7S4308C13v15Ev,
  (VTBL_ENTRY)&_ZN7S4308C13v16Ev,
  (VTBL_ENTRY)&_ZN7S4308C13v17Ev,
  (VTBL_ENTRY)&_ZN7S4308C13v18Ev,
  ABISELECT(-72,-48),
  (VTBL_ENTRY)&(_ZTI7S4308C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn72_N7S4308C1D1Ev,_ZThn48_N7S4308C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn72_N7S4308C1D0Ev,_ZThn48_N7S4308C1D0Ev),
  (VTBL_ENTRY)&_ZN7S4308C53v59Ev,
  (VTBL_ENTRY)&_ZN7S4308C53v60Ev,
  (VTBL_ENTRY)&_ZN7S4308C53v61Ev,
  (VTBL_ENTRY)&_ZN7S4308C53v62Ev,
  (VTBL_ENTRY)&_ZN7S4308C53v63Ev,
  (VTBL_ENTRY)&_ZN7S4308C53v64Ev,
  ABISELECT(-80,-52),
  (VTBL_ENTRY)&(_ZTI7S4308C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn80_N7S4308C1D1Ev,_ZThn52_N7S4308C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn80_N7S4308C1D0Ev,_ZThn52_N7S4308C1D0Ev),
  (VTBL_ENTRY)&_ZN7S4308C63v65Ev,
  (VTBL_ENTRY)&_ZN7S4308C63v66Ev,
  (VTBL_ENTRY)&_ZN7S4308C63v67Ev,
};
extern VTBL_ENTRY _ZTI7S4308C1[];
extern  VTBL_ENTRY _ZTV7S4308C1[];
Class_Descriptor cd_S4308C1 = {  "S4308C1", // class name
  bases_S4308C1, 4,
  &(vtc_S4308C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(232,144), // object size
  NSPAIRA(_ZTI7S4308C1),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S4308C1),79, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  4, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4307C3  {
  virtual  ~S4307C3(); // _ZN7S4307C3D1Ev
  virtual void  v19(); // _ZN7S4307C33v19Ev
  virtual void  v20(); // _ZN7S4307C33v20Ev
  virtual void  v21(); // _ZN7S4307C33v21Ev
  virtual void  v22(); // _ZN7S4307C33v22Ev
  virtual void  v23(); // _ZN7S4307C33v23Ev
  virtual void  v24(); // _ZN7S4307C33v24Ev
  virtual void  v25(); // _ZN7S4307C33v25Ev
  virtual void  v26(); // _ZN7S4307C33v26Ev
  virtual void  v27(); // _ZN7S4307C33v27Ev
  virtual void  v28(); // _ZN7S4307C33v28Ev
  virtual void  v29(); // _ZN7S4307C33v29Ev
  virtual void  v30(); // _ZN7S4307C33v30Ev
  virtual void  v31(); // _ZN7S4307C33v31Ev
  virtual void  v32(); // _ZN7S4307C33v32Ev
  virtual void  v33(); // _ZN7S4307C33v33Ev
  virtual void  v34(); // _ZN7S4307C33v34Ev
  virtual void  v35(); // _ZN7S4307C33v35Ev
  virtual void  v36(); // _ZN7S4307C33v36Ev
  virtual void  v37(); // _ZN7S4307C33v37Ev
  virtual void  v38(); // _ZN7S4307C33v38Ev
  virtual void  v39(); // _ZN7S4307C33v39Ev
  virtual void  v40(); // _ZN7S4307C33v40Ev
  virtual void  v41(); // _ZN7S4307C33v41Ev
  virtual void  v42(); // _ZN7S4307C33v42Ev
  virtual void  v43(); // _ZN7S4307C33v43Ev
  virtual void  v44(); // _ZN7S4307C33v44Ev
  S4307C3(); // tgen
};
//SIG(-1 S4307C3) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26}


 S4307C3 ::~S4307C3(){ note_dtor("S4307C3", this);}
void  S4307C3 ::v19(){vfunc_called(this, "_ZN7S4307C33v19Ev");}
void  S4307C3 ::v20(){vfunc_called(this, "_ZN7S4307C33v20Ev");}
void  S4307C3 ::v21(){vfunc_called(this, "_ZN7S4307C33v21Ev");}
void  S4307C3 ::v22(){vfunc_called(this, "_ZN7S4307C33v22Ev");}
void  S4307C3 ::v23(){vfunc_called(this, "_ZN7S4307C33v23Ev");}
void  S4307C3 ::v24(){vfunc_called(this, "_ZN7S4307C33v24Ev");}
void  S4307C3 ::v25(){vfunc_called(this, "_ZN7S4307C33v25Ev");}
void  S4307C3 ::v26(){vfunc_called(this, "_ZN7S4307C33v26Ev");}
void  S4307C3 ::v27(){vfunc_called(this, "_ZN7S4307C33v27Ev");}
void  S4307C3 ::v28(){vfunc_called(this, "_ZN7S4307C33v28Ev");}
void  S4307C3 ::v29(){vfunc_called(this, "_ZN7S4307C33v29Ev");}
void  S4307C3 ::v30(){vfunc_called(this, "_ZN7S4307C33v30Ev");}
void  S4307C3 ::v31(){vfunc_called(this, "_ZN7S4307C33v31Ev");}
void  S4307C3 ::v32(){vfunc_called(this, "_ZN7S4307C33v32Ev");}
void  S4307C3 ::v33(){vfunc_called(this, "_ZN7S4307C33v33Ev");}
void  S4307C3 ::v34(){vfunc_called(this, "_ZN7S4307C33v34Ev");}
void  S4307C3 ::v35(){vfunc_called(this, "_ZN7S4307C33v35Ev");}
void  S4307C3 ::v36(){vfunc_called(this, "_ZN7S4307C33v36Ev");}
void  S4307C3 ::v37(){vfunc_called(this, "_ZN7S4307C33v37Ev");}
void  S4307C3 ::v38(){vfunc_called(this, "_ZN7S4307C33v38Ev");}
void  S4307C3 ::v39(){vfunc_called(this, "_ZN7S4307C33v39Ev");}
void  S4307C3 ::v40(){vfunc_called(this, "_ZN7S4307C33v40Ev");}
void  S4307C3 ::v41(){vfunc_called(this, "_ZN7S4307C33v41Ev");}
void  S4307C3 ::v42(){vfunc_called(this, "_ZN7S4307C33v42Ev");}
void  S4307C3 ::v43(){vfunc_called(this, "_ZN7S4307C33v43Ev");}
void  S4307C3 ::v44(){vfunc_called(this, "_ZN7S4307C33v44Ev");}
S4307C3 ::S4307C3(){ note_ctor("S4307C3", this);} // tgen

static void Test_S4307C3()
{
  extern Class_Descriptor cd_S4307C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S4307C3, buf);
    S4307C3 *dp, &lv = *(dp=new (buf) S4307C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S4307C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4307C3)");
    test_class_info(&lv, &cd_S4307C3);
    dp->~S4307C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4307C3(Test_S4307C3, "S4307C3", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S4307C3C1Ev();
extern void _ZN7S4307C3D1Ev();
Name_Map name_map_S4307C3[] = {
  NSPAIR(_ZN7S4307C3C1Ev),
  NSPAIR(_ZN7S4307C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4307C3[];
extern void _ZN7S4307C3D1Ev();
extern void _ZN7S4307C3D0Ev();
extern void _ZN7S4307C33v19Ev();
extern void _ZN7S4307C33v20Ev();
extern void _ZN7S4307C33v21Ev();
extern void _ZN7S4307C33v22Ev();
extern void _ZN7S4307C33v23Ev();
extern void _ZN7S4307C33v24Ev();
extern void _ZN7S4307C33v25Ev();
extern void _ZN7S4307C33v26Ev();
extern void _ZN7S4307C33v27Ev();
extern void _ZN7S4307C33v28Ev();
extern void _ZN7S4307C33v29Ev();
extern void _ZN7S4307C33v30Ev();
extern void _ZN7S4307C33v31Ev();
extern void _ZN7S4307C33v32Ev();
extern void _ZN7S4307C33v33Ev();
extern void _ZN7S4307C33v34Ev();
extern void _ZN7S4307C33v35Ev();
extern void _ZN7S4307C33v36Ev();
extern void _ZN7S4307C33v37Ev();
extern void _ZN7S4307C33v38Ev();
extern void _ZN7S4307C33v39Ev();
extern void _ZN7S4307C33v40Ev();
extern void _ZN7S4307C33v41Ev();
extern void _ZN7S4307C33v42Ev();
extern void _ZN7S4307C33v43Ev();
extern void _ZN7S4307C33v44Ev();
static  VTBL_ENTRY vtc_S4307C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4307C3[0]),
  (VTBL_ENTRY)&_ZN7S4307C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4307C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4307C33v19Ev,
  (VTBL_ENTRY)&_ZN7S4307C33v20Ev,
  (VTBL_ENTRY)&_ZN7S4307C33v21Ev,
  (VTBL_ENTRY)&_ZN7S4307C33v22Ev,
  (VTBL_ENTRY)&_ZN7S4307C33v23Ev,
  (VTBL_ENTRY)&_ZN7S4307C33v24Ev,
  (VTBL_ENTRY)&_ZN7S4307C33v25Ev,
  (VTBL_ENTRY)&_ZN7S4307C33v26Ev,
  (VTBL_ENTRY)&_ZN7S4307C33v27Ev,
  (VTBL_ENTRY)&_ZN7S4307C33v28Ev,
  (VTBL_ENTRY)&_ZN7S4307C33v29Ev,
  (VTBL_ENTRY)&_ZN7S4307C33v30Ev,
  (VTBL_ENTRY)&_ZN7S4307C33v31Ev,
  (VTBL_ENTRY)&_ZN7S4307C33v32Ev,
  (VTBL_ENTRY)&_ZN7S4307C33v33Ev,
  (VTBL_ENTRY)&_ZN7S4307C33v34Ev,
  (VTBL_ENTRY)&_ZN7S4307C33v35Ev,
  (VTBL_ENTRY)&_ZN7S4307C33v36Ev,
  (VTBL_ENTRY)&_ZN7S4307C33v37Ev,
  (VTBL_ENTRY)&_ZN7S4307C33v38Ev,
  (VTBL_ENTRY)&_ZN7S4307C33v39Ev,
  (VTBL_ENTRY)&_ZN7S4307C33v40Ev,
  (VTBL_ENTRY)&_ZN7S4307C33v41Ev,
  (VTBL_ENTRY)&_ZN7S4307C33v42Ev,
  (VTBL_ENTRY)&_ZN7S4307C33v43Ev,
  (VTBL_ENTRY)&_ZN7S4307C33v44Ev,
};
extern VTBL_ENTRY _ZTI7S4307C3[];
extern  VTBL_ENTRY _ZTV7S4307C3[];
Class_Descriptor cd_S4307C3 = {  "S4307C3", // class name
  0,0,//no base classes
  &(vtc_S4307C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S4307C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4307C3),30, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4307C2  : S4307C3 {
  void *s4307c2f0[2];
  int s4307c2f1[4];
  ::S2423C5_nt s4307c2f2;
  void *s4307c2f3;
  char s4307c2f4;
  void *s4307c2f5;
  virtual  ~S4307C2(); // _ZN7S4307C2D1Ev
  virtual void  v45(); // _ZN7S4307C23v45Ev
  virtual void  v46(); // _ZN7S4307C23v46Ev
  virtual void  v47(); // _ZN7S4307C23v47Ev
  virtual void  v48(); // _ZN7S4307C23v48Ev
  virtual void  v49(); // _ZN7S4307C23v49Ev
  virtual void  v50(); // _ZN7S4307C23v50Ev
  virtual void  v51(); // _ZN7S4307C23v51Ev
  virtual void  v52(); // _ZN7S4307C23v52Ev
  virtual void  v53(); // _ZN7S4307C23v53Ev
  virtual void  v54(); // _ZN7S4307C23v54Ev
  virtual void  v55(); // _ZN7S4307C23v55Ev
  virtual void  v56(); // _ZN7S4307C23v56Ev
  virtual void  v57(); // _ZN7S4307C23v57Ev
  virtual void  v58(); // _ZN7S4307C23v58Ev
  S4307C2(); // tgen
};
//SIG(-1 S4307C2) C1{ BC2{ vd v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 Fp[2] Fi[4] FC3{ Fi[2]} Fp Fc Fp}


 S4307C2 ::~S4307C2(){ note_dtor("S4307C2", this);}
void  S4307C2 ::v45(){vfunc_called(this, "_ZN7S4307C23v45Ev");}
void  S4307C2 ::v46(){vfunc_called(this, "_ZN7S4307C23v46Ev");}
void  S4307C2 ::v47(){vfunc_called(this, "_ZN7S4307C23v47Ev");}
void  S4307C2 ::v48(){vfunc_called(this, "_ZN7S4307C23v48Ev");}
void  S4307C2 ::v49(){vfunc_called(this, "_ZN7S4307C23v49Ev");}
void  S4307C2 ::v50(){vfunc_called(this, "_ZN7S4307C23v50Ev");}
void  S4307C2 ::v51(){vfunc_called(this, "_ZN7S4307C23v51Ev");}
void  S4307C2 ::v52(){vfunc_called(this, "_ZN7S4307C23v52Ev");}
void  S4307C2 ::v53(){vfunc_called(this, "_ZN7S4307C23v53Ev");}
void  S4307C2 ::v54(){vfunc_called(this, "_ZN7S4307C23v54Ev");}
void  S4307C2 ::v55(){vfunc_called(this, "_ZN7S4307C23v55Ev");}
void  S4307C2 ::v56(){vfunc_called(this, "_ZN7S4307C23v56Ev");}
void  S4307C2 ::v57(){vfunc_called(this, "_ZN7S4307C23v57Ev");}
void  S4307C2 ::v58(){vfunc_called(this, "_ZN7S4307C23v58Ev");}
S4307C2 ::S4307C2(){ note_ctor("S4307C2", this);} // tgen

static void Test_S4307C2()
{
  extern Class_Descriptor cd_S4307C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,13)];
    init_test(&cd_S4307C2, buf);
    S4307C2 *dp, &lv = *(dp=new (buf) S4307C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,48), "sizeof(S4307C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4307C2)");
    check_base_class_offset(lv, (S4307C3*), 0, "S4307C2");
    check_field_offset(lv, s4307c2f0, ABISELECT(8,4), "S4307C2.s4307c2f0");
    check_field_offset(lv, s4307c2f1, ABISELECT(24,12), "S4307C2.s4307c2f1");
    check_field_offset(lv, s4307c2f2, ABISELECT(40,28), "S4307C2.s4307c2f2");
    check_field_offset(lv, s4307c2f3, ABISELECT(48,36), "S4307C2.s4307c2f3");
    check_field_offset(lv, s4307c2f4, ABISELECT(56,40), "S4307C2.s4307c2f4");
    check_field_offset(lv, s4307c2f5, ABISELECT(64,44), "S4307C2.s4307c2f5");
    test_class_info(&lv, &cd_S4307C2);
    dp->~S4307C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4307C2(Test_S4307C2, "S4307C2", ABISELECT(72,48));

#else // __cplusplus

extern void _ZN7S4307C2C1Ev();
extern void _ZN7S4307C2D1Ev();
Name_Map name_map_S4307C2[] = {
  NSPAIR(_ZN7S4307C2C1Ev),
  NSPAIR(_ZN7S4307C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4307C3;
extern VTBL_ENTRY _ZTI7S4307C3[];
extern  VTBL_ENTRY _ZTV7S4307C3[];
static Base_Class bases_S4307C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4307C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4307C2[];
extern void _ZN7S4307C2D1Ev();
extern void _ZN7S4307C2D0Ev();
extern void _ZN7S4307C33v19Ev();
extern void _ZN7S4307C33v20Ev();
extern void _ZN7S4307C33v21Ev();
extern void _ZN7S4307C33v22Ev();
extern void _ZN7S4307C33v23Ev();
extern void _ZN7S4307C33v24Ev();
extern void _ZN7S4307C33v25Ev();
extern void _ZN7S4307C33v26Ev();
extern void _ZN7S4307C33v27Ev();
extern void _ZN7S4307C33v28Ev();
extern void _ZN7S4307C33v29Ev();
extern void _ZN7S4307C33v30Ev();
extern void _ZN7S4307C33v31Ev();
extern void _ZN7S4307C33v32Ev();
extern void _ZN7S4307C33v33Ev();
extern void _ZN7S4307C33v34Ev();
extern void _ZN7S4307C33v35Ev();
extern void _ZN7S4307C33v36Ev();
extern void _ZN7S4307C33v37Ev();
extern void _ZN7S4307C33v38Ev();
extern void _ZN7S4307C33v39Ev();
extern void _ZN7S4307C33v40Ev();
extern void _ZN7S4307C33v41Ev();
extern void _ZN7S4307C33v42Ev();
extern void _ZN7S4307C33v43Ev();
extern void _ZN7S4307C33v44Ev();
extern void _ZN7S4307C23v45Ev();
extern void _ZN7S4307C23v46Ev();
extern void _ZN7S4307C23v47Ev();
extern void _ZN7S4307C23v48Ev();
extern void _ZN7S4307C23v49Ev();
extern void _ZN7S4307C23v50Ev();
extern void _ZN7S4307C23v51Ev();
extern void _ZN7S4307C23v52Ev();
extern void _ZN7S4307C23v53Ev();
extern void _ZN7S4307C23v54Ev();
extern void _ZN7S4307C23v55Ev();
extern void _ZN7S4307C23v56Ev();
extern void _ZN7S4307C23v57Ev();
extern void _ZN7S4307C23v58Ev();
static  VTBL_ENTRY vtc_S4307C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4307C2[0]),
  (VTBL_ENTRY)&_ZN7S4307C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4307C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4307C33v19Ev,
  (VTBL_ENTRY)&_ZN7S4307C33v20Ev,
  (VTBL_ENTRY)&_ZN7S4307C33v21Ev,
  (VTBL_ENTRY)&_ZN7S4307C33v22Ev,
  (VTBL_ENTRY)&_ZN7S4307C33v23Ev,
  (VTBL_ENTRY)&_ZN7S4307C33v24Ev,
  (VTBL_ENTRY)&_ZN7S4307C33v25Ev,
  (VTBL_ENTRY)&_ZN7S4307C33v26Ev,
  (VTBL_ENTRY)&_ZN7S4307C33v27Ev,
  (VTBL_ENTRY)&_ZN7S4307C33v28Ev,
  (VTBL_ENTRY)&_ZN7S4307C33v29Ev,
  (VTBL_ENTRY)&_ZN7S4307C33v30Ev,
  (VTBL_ENTRY)&_ZN7S4307C33v31Ev,
  (VTBL_ENTRY)&_ZN7S4307C33v32Ev,
  (VTBL_ENTRY)&_ZN7S4307C33v33Ev,
  (VTBL_ENTRY)&_ZN7S4307C33v34Ev,
  (VTBL_ENTRY)&_ZN7S4307C33v35Ev,
  (VTBL_ENTRY)&_ZN7S4307C33v36Ev,
  (VTBL_ENTRY)&_ZN7S4307C33v37Ev,
  (VTBL_ENTRY)&_ZN7S4307C33v38Ev,
  (VTBL_ENTRY)&_ZN7S4307C33v39Ev,
  (VTBL_ENTRY)&_ZN7S4307C33v40Ev,
  (VTBL_ENTRY)&_ZN7S4307C33v41Ev,
  (VTBL_ENTRY)&_ZN7S4307C33v42Ev,
  (VTBL_ENTRY)&_ZN7S4307C33v43Ev,
  (VTBL_ENTRY)&_ZN7S4307C33v44Ev,
  (VTBL_ENTRY)&_ZN7S4307C23v45Ev,
  (VTBL_ENTRY)&_ZN7S4307C23v46Ev,
  (VTBL_ENTRY)&_ZN7S4307C23v47Ev,
  (VTBL_ENTRY)&_ZN7S4307C23v48Ev,
  (VTBL_ENTRY)&_ZN7S4307C23v49Ev,
  (VTBL_ENTRY)&_ZN7S4307C23v50Ev,
  (VTBL_ENTRY)&_ZN7S4307C23v51Ev,
  (VTBL_ENTRY)&_ZN7S4307C23v52Ev,
  (VTBL_ENTRY)&_ZN7S4307C23v53Ev,
  (VTBL_ENTRY)&_ZN7S4307C23v54Ev,
  (VTBL_ENTRY)&_ZN7S4307C23v55Ev,
  (VTBL_ENTRY)&_ZN7S4307C23v56Ev,
  (VTBL_ENTRY)&_ZN7S4307C23v57Ev,
  (VTBL_ENTRY)&_ZN7S4307C23v58Ev,
};
extern VTBL_ENTRY _ZTI7S4307C2[];
extern  VTBL_ENTRY _ZTV7S4307C2[];
Class_Descriptor cd_S4307C2 = {  "S4307C2", // class name
  bases_S4307C2, 1,
  &(vtc_S4307C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,48), // object size
  NSPAIRA(_ZTI7S4307C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4307C2),44, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4307C5  {
  virtual  ~S4307C5(); // _ZN7S4307C5D1Ev
  virtual void  v59(); // _ZN7S4307C53v59Ev
  virtual void  v60(); // _ZN7S4307C53v60Ev
  virtual void  v61(); // _ZN7S4307C53v61Ev
  virtual void  v62(); // _ZN7S4307C53v62Ev
  virtual void  v63(); // _ZN7S4307C53v63Ev
  virtual void  v64(); // _ZN7S4307C53v64Ev
  S4307C5(); // tgen
};
//SIG(-1 S4307C5) C1{ vd v1 v2 v3 v4 v5 v6}


 S4307C5 ::~S4307C5(){ note_dtor("S4307C5", this);}
void  S4307C5 ::v59(){vfunc_called(this, "_ZN7S4307C53v59Ev");}
void  S4307C5 ::v60(){vfunc_called(this, "_ZN7S4307C53v60Ev");}
void  S4307C5 ::v61(){vfunc_called(this, "_ZN7S4307C53v61Ev");}
void  S4307C5 ::v62(){vfunc_called(this, "_ZN7S4307C53v62Ev");}
void  S4307C5 ::v63(){vfunc_called(this, "_ZN7S4307C53v63Ev");}
void  S4307C5 ::v64(){vfunc_called(this, "_ZN7S4307C53v64Ev");}
S4307C5 ::S4307C5(){ note_ctor("S4307C5", this);} // tgen

static void Test_S4307C5()
{
  extern Class_Descriptor cd_S4307C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S4307C5, buf);
    S4307C5 *dp, &lv = *(dp=new (buf) S4307C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S4307C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4307C5)");
    test_class_info(&lv, &cd_S4307C5);
    dp->~S4307C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4307C5(Test_S4307C5, "S4307C5", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S4307C5C1Ev();
extern void _ZN7S4307C5D1Ev();
Name_Map name_map_S4307C5[] = {
  NSPAIR(_ZN7S4307C5C1Ev),
  NSPAIR(_ZN7S4307C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4307C5[];
extern void _ZN7S4307C5D1Ev();
extern void _ZN7S4307C5D0Ev();
extern void _ZN7S4307C53v59Ev();
extern void _ZN7S4307C53v60Ev();
extern void _ZN7S4307C53v61Ev();
extern void _ZN7S4307C53v62Ev();
extern void _ZN7S4307C53v63Ev();
extern void _ZN7S4307C53v64Ev();
static  VTBL_ENTRY vtc_S4307C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4307C5[0]),
  (VTBL_ENTRY)&_ZN7S4307C5D1Ev,
  (VTBL_ENTRY)&_ZN7S4307C5D0Ev,
  (VTBL_ENTRY)&_ZN7S4307C53v59Ev,
  (VTBL_ENTRY)&_ZN7S4307C53v60Ev,
  (VTBL_ENTRY)&_ZN7S4307C53v61Ev,
  (VTBL_ENTRY)&_ZN7S4307C53v62Ev,
  (VTBL_ENTRY)&_ZN7S4307C53v63Ev,
  (VTBL_ENTRY)&_ZN7S4307C53v64Ev,
};
extern VTBL_ENTRY _ZTI7S4307C5[];
extern  VTBL_ENTRY _ZTV7S4307C5[];
Class_Descriptor cd_S4307C5 = {  "S4307C5", // class name
  0,0,//no base classes
  &(vtc_S4307C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S4307C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4307C5),10, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4307C6  {
  virtual  ~S4307C6(); // _ZN7S4307C6D1Ev
  virtual void  v65(); // _ZN7S4307C63v65Ev
  virtual void  v66(); // _ZN7S4307C63v66Ev
  virtual void  v67(); // _ZN7S4307C63v67Ev
  S4307C6(); // tgen
};
//SIG(-1 S4307C6) C1{ vd v1 v2 v3}


 S4307C6 ::~S4307C6(){ note_dtor("S4307C6", this);}
void  S4307C6 ::v65(){vfunc_called(this, "_ZN7S4307C63v65Ev");}
void  S4307C6 ::v66(){vfunc_called(this, "_ZN7S4307C63v66Ev");}
void  S4307C6 ::v67(){vfunc_called(this, "_ZN7S4307C63v67Ev");}
S4307C6 ::S4307C6(){ note_ctor("S4307C6", this);} // tgen

static void Test_S4307C6()
{
  extern Class_Descriptor cd_S4307C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S4307C6, buf);
    S4307C6 *dp, &lv = *(dp=new (buf) S4307C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S4307C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4307C6)");
    test_class_info(&lv, &cd_S4307C6);
    dp->~S4307C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4307C6(Test_S4307C6, "S4307C6", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S4307C6C1Ev();
extern void _ZN7S4307C6D1Ev();
Name_Map name_map_S4307C6[] = {
  NSPAIR(_ZN7S4307C6C1Ev),
  NSPAIR(_ZN7S4307C6D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4307C6[];
extern void _ZN7S4307C6D1Ev();
extern void _ZN7S4307C6D0Ev();
extern void _ZN7S4307C63v65Ev();
extern void _ZN7S4307C63v66Ev();
extern void _ZN7S4307C63v67Ev();
static  VTBL_ENTRY vtc_S4307C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4307C6[0]),
  (VTBL_ENTRY)&_ZN7S4307C6D1Ev,
  (VTBL_ENTRY)&_ZN7S4307C6D0Ev,
  (VTBL_ENTRY)&_ZN7S4307C63v65Ev,
  (VTBL_ENTRY)&_ZN7S4307C63v66Ev,
  (VTBL_ENTRY)&_ZN7S4307C63v67Ev,
};
extern VTBL_ENTRY _ZTI7S4307C6[];
extern  VTBL_ENTRY _ZTV7S4307C6[];
Class_Descriptor cd_S4307C6 = {  "S4307C6", // class name
  0,0,//no base classes
  &(vtc_S4307C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S4307C6),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4307C6),7, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4307C1  : S4307C2 , S4307C5 , S4307C6 {
  int s4307c1f0;
  void *s4307c1f1;
  __tsi64 s4307c1f2;
  long s4307c1f3;
  __tsi64 s4307c1f4;
  void *s4307c1f5;
  long s4307c1f6;
  __tsi64 s4307c1f7[2];
  void *s4307c1f8;
  char s4307c1f9;
  void *s4307c1f10;
  virtual  ~S4307C1(); // _ZN7S4307C1D1Ev
  virtual void  v1(); // _ZN7S4307C12v1Ev
  virtual void  v2(); // _ZN7S4307C12v2Ev
  virtual void  v3(); // _ZN7S4307C12v3Ev
  virtual void  v4(); // _ZN7S4307C12v4Ev
  virtual void  v5(); // _ZN7S4307C12v5Ev
  virtual void  v6(); // _ZN7S4307C12v6Ev
  virtual void  v7(); // _ZN7S4307C12v7Ev
  virtual void  v8(); // _ZN7S4307C12v8Ev
  virtual void  v9(); // _ZN7S4307C12v9Ev
  virtual void  v10(); // _ZN7S4307C13v10Ev
  virtual void  v11(); // _ZN7S4307C13v11Ev
  virtual void  v12(); // _ZN7S4307C13v12Ev
  virtual void  v13(); // _ZN7S4307C13v13Ev
  virtual void  v14(); // _ZN7S4307C13v14Ev
  virtual void  v15(); // _ZN7S4307C13v15Ev
  virtual void  v16(); // _ZN7S4307C13v16Ev
  virtual void  v17(); // _ZN7S4307C13v17Ev
  virtual void  v18(); // _ZN7S4307C13v18Ev
  S4307C1(); // tgen
};
//SIG(1 S4307C1) C1{ BC2{ BC3{ vd v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44} vd v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 Fp[2] Fi[4] FC4{ Fi[2]} Fp Fc Fp} BC5{ vd v59 v60 v61 v62 v63 v64} BC6{ vd v65 v66 v67} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 Fi Fp FL Fl FL Fp Fl FL[2] Fp Fc Fp}


 S4307C1 ::~S4307C1(){ note_dtor("S4307C1", this);}
void  S4307C1 ::v1(){vfunc_called(this, "_ZN7S4307C12v1Ev");}
void  S4307C1 ::v2(){vfunc_called(this, "_ZN7S4307C12v2Ev");}
void  S4307C1 ::v3(){vfunc_called(this, "_ZN7S4307C12v3Ev");}
void  S4307C1 ::v4(){vfunc_called(this, "_ZN7S4307C12v4Ev");}
void  S4307C1 ::v5(){vfunc_called(this, "_ZN7S4307C12v5Ev");}
void  S4307C1 ::v6(){vfunc_called(this, "_ZN7S4307C12v6Ev");}
void  S4307C1 ::v7(){vfunc_called(this, "_ZN7S4307C12v7Ev");}
void  S4307C1 ::v8(){vfunc_called(this, "_ZN7S4307C12v8Ev");}
void  S4307C1 ::v9(){vfunc_called(this, "_ZN7S4307C12v9Ev");}
void  S4307C1 ::v10(){vfunc_called(this, "_ZN7S4307C13v10Ev");}
void  S4307C1 ::v11(){vfunc_called(this, "_ZN7S4307C13v11Ev");}
void  S4307C1 ::v12(){vfunc_called(this, "_ZN7S4307C13v12Ev");}
void  S4307C1 ::v13(){vfunc_called(this, "_ZN7S4307C13v13Ev");}
void  S4307C1 ::v14(){vfunc_called(this, "_ZN7S4307C13v14Ev");}
void  S4307C1 ::v15(){vfunc_called(this, "_ZN7S4307C13v15Ev");}
void  S4307C1 ::v16(){vfunc_called(this, "_ZN7S4307C13v16Ev");}
void  S4307C1 ::v17(){vfunc_called(this, "_ZN7S4307C13v17Ev");}
void  S4307C1 ::v18(){vfunc_called(this, "_ZN7S4307C13v18Ev");}
S4307C1 ::S4307C1(){ note_ctor("S4307C1", this);} // tgen

static void Test_S4307C1()
{
  extern Class_Descriptor cd_S4307C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(24,31)];
    init_test(&cd_S4307C1, buf);
    S4307C1 *dp, &lv = *(dp=new (buf) S4307C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(184,120), "sizeof(S4307C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4307C1)");
    check_base_class_offset(lv, (S4307C3*)(S4307C2*), 0, "S4307C1");
    check_base_class_offset(lv, (S4307C2*), 0, "S4307C1");
    check_base_class_offset(lv, (S4307C5*), ABISELECT(72,48), "S4307C1");
    check_base_class_offset(lv, (S4307C6*), ABISELECT(80,52), "S4307C1");
    check_field_offset(lv, s4307c1f0, ABISELECT(88,56), "S4307C1.s4307c1f0");
    check_field_offset(lv, s4307c1f1, ABISELECT(96,60), "S4307C1.s4307c1f1");
    check_field_offset(lv, s4307c1f2, ABISELECT(104,64), "S4307C1.s4307c1f2");
    check_field_offset(lv, s4307c1f3, ABISELECT(112,72), "S4307C1.s4307c1f3");
    check_field_offset(lv, s4307c1f4, ABISELECT(120,76), "S4307C1.s4307c1f4");
    check_field_offset(lv, s4307c1f5, ABISELECT(128,84), "S4307C1.s4307c1f5");
    check_field_offset(lv, s4307c1f6, ABISELECT(136,88), "S4307C1.s4307c1f6");
    check_field_offset(lv, s4307c1f7, ABISELECT(144,92), "S4307C1.s4307c1f7");
    check_field_offset(lv, s4307c1f8, ABISELECT(160,108), "S4307C1.s4307c1f8");
    check_field_offset(lv, s4307c1f9, ABISELECT(168,112), "S4307C1.s4307c1f9");
    check_field_offset(lv, s4307c1f10, ABISELECT(176,116), "S4307C1.s4307c1f10");
    test_class_info(&lv, &cd_S4307C1);
    dp->~S4307C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4307C1(Test_S4307C1, "S4307C1", ABISELECT(184,120));

#else // __cplusplus

extern void _ZN7S4307C1C1Ev();
extern void _ZN7S4307C1D1Ev();
Name_Map name_map_S4307C1[] = {
  NSPAIR(_ZN7S4307C1C1Ev),
  NSPAIR(_ZN7S4307C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4307C3;
extern VTBL_ENTRY _ZTI7S4307C3[];
extern  VTBL_ENTRY _ZTV7S4307C3[];
extern Class_Descriptor cd_S4307C2;
extern VTBL_ENTRY _ZTI7S4307C2[];
extern  VTBL_ENTRY _ZTV7S4307C2[];
extern Class_Descriptor cd_S4307C5;
extern VTBL_ENTRY _ZTI7S4307C5[];
extern  VTBL_ENTRY _ZTV7S4307C5[];
extern Class_Descriptor cd_S4307C6;
extern VTBL_ENTRY _ZTI7S4307C6[];
extern  VTBL_ENTRY _ZTV7S4307C6[];
static Base_Class bases_S4307C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4307C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S4307C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S4307C5,    ABISELECT(72,48), //bcp->offset
    62, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S4307C6,    ABISELECT(80,52), //bcp->offset
    72, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4307C1[];
extern void _ZN7S4307C1D1Ev();
extern void _ZN7S4307C1D0Ev();
extern void _ZN7S4307C33v19Ev();
extern void _ZN7S4307C33v20Ev();
extern void _ZN7S4307C33v21Ev();
extern void _ZN7S4307C33v22Ev();
extern void _ZN7S4307C33v23Ev();
extern void _ZN7S4307C33v24Ev();
extern void _ZN7S4307C33v25Ev();
extern void _ZN7S4307C33v26Ev();
extern void _ZN7S4307C33v27Ev();
extern void _ZN7S4307C33v28Ev();
extern void _ZN7S4307C33v29Ev();
extern void _ZN7S4307C33v30Ev();
extern void _ZN7S4307C33v31Ev();
extern void _ZN7S4307C33v32Ev();
extern void _ZN7S4307C33v33Ev();
extern void _ZN7S4307C33v34Ev();
extern void _ZN7S4307C33v35Ev();
extern void _ZN7S4307C33v36Ev();
extern void _ZN7S4307C33v37Ev();
extern void _ZN7S4307C33v38Ev();
extern void _ZN7S4307C33v39Ev();
extern void _ZN7S4307C33v40Ev();
extern void _ZN7S4307C33v41Ev();
extern void _ZN7S4307C33v42Ev();
extern void _ZN7S4307C33v43Ev();
extern void _ZN7S4307C33v44Ev();
extern void _ZN7S4307C23v45Ev();
extern void _ZN7S4307C23v46Ev();
extern void _ZN7S4307C23v47Ev();
extern void _ZN7S4307C23v48Ev();
extern void _ZN7S4307C23v49Ev();
extern void _ZN7S4307C23v50Ev();
extern void _ZN7S4307C23v51Ev();
extern void _ZN7S4307C23v52Ev();
extern void _ZN7S4307C23v53Ev();
extern void _ZN7S4307C23v54Ev();
extern void _ZN7S4307C23v55Ev();
extern void _ZN7S4307C23v56Ev();
extern void _ZN7S4307C23v57Ev();
extern void _ZN7S4307C23v58Ev();
extern void _ZN7S4307C12v1Ev();
extern void _ZN7S4307C12v2Ev();
extern void _ZN7S4307C12v3Ev();
extern void _ZN7S4307C12v4Ev();
extern void _ZN7S4307C12v5Ev();
extern void _ZN7S4307C12v6Ev();
extern void _ZN7S4307C12v7Ev();
extern void _ZN7S4307C12v8Ev();
extern void _ZN7S4307C12v9Ev();
extern void _ZN7S4307C13v10Ev();
extern void _ZN7S4307C13v11Ev();
extern void _ZN7S4307C13v12Ev();
extern void _ZN7S4307C13v13Ev();
extern void _ZN7S4307C13v14Ev();
extern void _ZN7S4307C13v15Ev();
extern void _ZN7S4307C13v16Ev();
extern void _ZN7S4307C13v17Ev();
extern void _ZN7S4307C13v18Ev();
extern void ABISELECT(_ZThn72_N7S4307C1D1Ev,_ZThn48_N7S4307C1D1Ev)();
extern void ABISELECT(_ZThn72_N7S4307C1D0Ev,_ZThn48_N7S4307C1D0Ev)();
extern void _ZN7S4307C53v59Ev();
extern void _ZN7S4307C53v60Ev();
extern void _ZN7S4307C53v61Ev();
extern void _ZN7S4307C53v62Ev();
extern void _ZN7S4307C53v63Ev();
extern void _ZN7S4307C53v64Ev();
extern void ABISELECT(_ZThn80_N7S4307C1D1Ev,_ZThn52_N7S4307C1D1Ev)();
extern void ABISELECT(_ZThn80_N7S4307C1D0Ev,_ZThn52_N7S4307C1D0Ev)();
extern void _ZN7S4307C63v65Ev();
extern void _ZN7S4307C63v66Ev();
extern void _ZN7S4307C63v67Ev();
static  VTBL_ENTRY vtc_S4307C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4307C1[0]),
  (VTBL_ENTRY)&_ZN7S4307C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4307C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4307C33v19Ev,
  (VTBL_ENTRY)&_ZN7S4307C33v20Ev,
  (VTBL_ENTRY)&_ZN7S4307C33v21Ev,
  (VTBL_ENTRY)&_ZN7S4307C33v22Ev,
  (VTBL_ENTRY)&_ZN7S4307C33v23Ev,
  (VTBL_ENTRY)&_ZN7S4307C33v24Ev,
  (VTBL_ENTRY)&_ZN7S4307C33v25Ev,
  (VTBL_ENTRY)&_ZN7S4307C33v26Ev,
  (VTBL_ENTRY)&_ZN7S4307C33v27Ev,
  (VTBL_ENTRY)&_ZN7S4307C33v28Ev,
  (VTBL_ENTRY)&_ZN7S4307C33v29Ev,
  (VTBL_ENTRY)&_ZN7S4307C33v30Ev,
  (VTBL_ENTRY)&_ZN7S4307C33v31Ev,
  (VTBL_ENTRY)&_ZN7S4307C33v32Ev,
  (VTBL_ENTRY)&_ZN7S4307C33v33Ev,
  (VTBL_ENTRY)&_ZN7S4307C33v34Ev,
  (VTBL_ENTRY)&_ZN7S4307C33v35Ev,
  (VTBL_ENTRY)&_ZN7S4307C33v36Ev,
  (VTBL_ENTRY)&_ZN7S4307C33v37Ev,
  (VTBL_ENTRY)&_ZN7S4307C33v38Ev,
  (VTBL_ENTRY)&_ZN7S4307C33v39Ev,
  (VTBL_ENTRY)&_ZN7S4307C33v40Ev,
  (VTBL_ENTRY)&_ZN7S4307C33v41Ev,
  (VTBL_ENTRY)&_ZN7S4307C33v42Ev,
  (VTBL_ENTRY)&_ZN7S4307C33v43Ev,
  (VTBL_ENTRY)&_ZN7S4307C33v44Ev,
  (VTBL_ENTRY)&_ZN7S4307C23v45Ev,
  (VTBL_ENTRY)&_ZN7S4307C23v46Ev,
  (VTBL_ENTRY)&_ZN7S4307C23v47Ev,
  (VTBL_ENTRY)&_ZN7S4307C23v48Ev,
  (VTBL_ENTRY)&_ZN7S4307C23v49Ev,
  (VTBL_ENTRY)&_ZN7S4307C23v50Ev,
  (VTBL_ENTRY)&_ZN7S4307C23v51Ev,
  (VTBL_ENTRY)&_ZN7S4307C23v52Ev,
  (VTBL_ENTRY)&_ZN7S4307C23v53Ev,
  (VTBL_ENTRY)&_ZN7S4307C23v54Ev,
  (VTBL_ENTRY)&_ZN7S4307C23v55Ev,
  (VTBL_ENTRY)&_ZN7S4307C23v56Ev,
  (VTBL_ENTRY)&_ZN7S4307C23v57Ev,
  (VTBL_ENTRY)&_ZN7S4307C23v58Ev,
  (VTBL_ENTRY)&_ZN7S4307C12v1Ev,
  (VTBL_ENTRY)&_ZN7S4307C12v2Ev,
  (VTBL_ENTRY)&_ZN7S4307C12v3Ev,
  (VTBL_ENTRY)&_ZN7S4307C12v4Ev,
  (VTBL_ENTRY)&_ZN7S4307C12v5Ev,
  (VTBL_ENTRY)&_ZN7S4307C12v6Ev,
  (VTBL_ENTRY)&_ZN7S4307C12v7Ev,
  (VTBL_ENTRY)&_ZN7S4307C12v8Ev,
  (VTBL_ENTRY)&_ZN7S4307C12v9Ev,
  (VTBL_ENTRY)&_ZN7S4307C13v10Ev,
  (VTBL_ENTRY)&_ZN7S4307C13v11Ev,
  (VTBL_ENTRY)&_ZN7S4307C13v12Ev,
  (VTBL_ENTRY)&_ZN7S4307C13v13Ev,
  (VTBL_ENTRY)&_ZN7S4307C13v14Ev,
  (VTBL_ENTRY)&_ZN7S4307C13v15Ev,
  (VTBL_ENTRY)&_ZN7S4307C13v16Ev,
  (VTBL_ENTRY)&_ZN7S4307C13v17Ev,
  (VTBL_ENTRY)&_ZN7S4307C13v18Ev,
  ABISELECT(-72,-48),
  (VTBL_ENTRY)&(_ZTI7S4307C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn72_N7S4307C1D1Ev,_ZThn48_N7S4307C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn72_N7S4307C1D0Ev,_ZThn48_N7S4307C1D0Ev),
  (VTBL_ENTRY)&_ZN7S4307C53v59Ev,
  (VTBL_ENTRY)&_ZN7S4307C53v60Ev,
  (VTBL_ENTRY)&_ZN7S4307C53v61Ev,
  (VTBL_ENTRY)&_ZN7S4307C53v62Ev,
  (VTBL_ENTRY)&_ZN7S4307C53v63Ev,
  (VTBL_ENTRY)&_ZN7S4307C53v64Ev,
  ABISELECT(-80,-52),
  (VTBL_ENTRY)&(_ZTI7S4307C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn80_N7S4307C1D1Ev,_ZThn52_N7S4307C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn80_N7S4307C1D0Ev,_ZThn52_N7S4307C1D0Ev),
  (VTBL_ENTRY)&_ZN7S4307C63v65Ev,
  (VTBL_ENTRY)&_ZN7S4307C63v66Ev,
  (VTBL_ENTRY)&_ZN7S4307C63v67Ev,
};
extern VTBL_ENTRY _ZTI7S4307C1[];
extern  VTBL_ENTRY _ZTV7S4307C1[];
Class_Descriptor cd_S4307C1 = {  "S4307C1", // class name
  bases_S4307C1, 4,
  &(vtc_S4307C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(184,120), // object size
  NSPAIRA(_ZTI7S4307C1),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S4307C1),79, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  4, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4262C3  {
  virtual  ~S4262C3(); // _ZN7S4262C3D1Ev
  virtual void  v14(); // _ZN7S4262C33v14Ev
  virtual void  v15(); // _ZN7S4262C33v15Ev
  virtual void  v16(); // _ZN7S4262C33v16Ev
  virtual void  v17(); // _ZN7S4262C33v17Ev
  virtual void  v18(); // _ZN7S4262C33v18Ev
  virtual void  v19(); // _ZN7S4262C33v19Ev
  virtual void  v20(); // _ZN7S4262C33v20Ev
  virtual void  v21(); // _ZN7S4262C33v21Ev
  virtual void  v22(); // _ZN7S4262C33v22Ev
  virtual void  v23(); // _ZN7S4262C33v23Ev
  virtual void  v24(); // _ZN7S4262C33v24Ev
  virtual void  v25(); // _ZN7S4262C33v25Ev
  virtual void  v26(); // _ZN7S4262C33v26Ev
  virtual void  v27(); // _ZN7S4262C33v27Ev
  virtual void  v28(); // _ZN7S4262C33v28Ev
  virtual void  v29(); // _ZN7S4262C33v29Ev
  virtual void  v30(); // _ZN7S4262C33v30Ev
  virtual void  v31(); // _ZN7S4262C33v31Ev
  virtual void  v32(); // _ZN7S4262C33v32Ev
  virtual void  v33(); // _ZN7S4262C33v33Ev
  virtual void  v34(); // _ZN7S4262C33v34Ev
  virtual void  v35(); // _ZN7S4262C33v35Ev
  virtual void  v36(); // _ZN7S4262C33v36Ev
  virtual void  v37(); // _ZN7S4262C33v37Ev
  virtual void  v38(); // _ZN7S4262C33v38Ev
  virtual void  v39(); // _ZN7S4262C33v39Ev
  S4262C3(); // tgen
};
//SIG(-1 S4262C3) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26}


 S4262C3 ::~S4262C3(){ note_dtor("S4262C3", this);}
void  S4262C3 ::v14(){vfunc_called(this, "_ZN7S4262C33v14Ev");}
void  S4262C3 ::v15(){vfunc_called(this, "_ZN7S4262C33v15Ev");}
void  S4262C3 ::v16(){vfunc_called(this, "_ZN7S4262C33v16Ev");}
void  S4262C3 ::v17(){vfunc_called(this, "_ZN7S4262C33v17Ev");}
void  S4262C3 ::v18(){vfunc_called(this, "_ZN7S4262C33v18Ev");}
void  S4262C3 ::v19(){vfunc_called(this, "_ZN7S4262C33v19Ev");}
void  S4262C3 ::v20(){vfunc_called(this, "_ZN7S4262C33v20Ev");}
void  S4262C3 ::v21(){vfunc_called(this, "_ZN7S4262C33v21Ev");}
void  S4262C3 ::v22(){vfunc_called(this, "_ZN7S4262C33v22Ev");}
void  S4262C3 ::v23(){vfunc_called(this, "_ZN7S4262C33v23Ev");}
void  S4262C3 ::v24(){vfunc_called(this, "_ZN7S4262C33v24Ev");}
void  S4262C3 ::v25(){vfunc_called(this, "_ZN7S4262C33v25Ev");}
void  S4262C3 ::v26(){vfunc_called(this, "_ZN7S4262C33v26Ev");}
void  S4262C3 ::v27(){vfunc_called(this, "_ZN7S4262C33v27Ev");}
void  S4262C3 ::v28(){vfunc_called(this, "_ZN7S4262C33v28Ev");}
void  S4262C3 ::v29(){vfunc_called(this, "_ZN7S4262C33v29Ev");}
void  S4262C3 ::v30(){vfunc_called(this, "_ZN7S4262C33v30Ev");}
void  S4262C3 ::v31(){vfunc_called(this, "_ZN7S4262C33v31Ev");}
void  S4262C3 ::v32(){vfunc_called(this, "_ZN7S4262C33v32Ev");}
void  S4262C3 ::v33(){vfunc_called(this, "_ZN7S4262C33v33Ev");}
void  S4262C3 ::v34(){vfunc_called(this, "_ZN7S4262C33v34Ev");}
void  S4262C3 ::v35(){vfunc_called(this, "_ZN7S4262C33v35Ev");}
void  S4262C3 ::v36(){vfunc_called(this, "_ZN7S4262C33v36Ev");}
void  S4262C3 ::v37(){vfunc_called(this, "_ZN7S4262C33v37Ev");}
void  S4262C3 ::v38(){vfunc_called(this, "_ZN7S4262C33v38Ev");}
void  S4262C3 ::v39(){vfunc_called(this, "_ZN7S4262C33v39Ev");}
S4262C3 ::S4262C3(){ note_ctor("S4262C3", this);} // tgen

static void Test_S4262C3()
{
  extern Class_Descriptor cd_S4262C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S4262C3, buf);
    S4262C3 *dp, &lv = *(dp=new (buf) S4262C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S4262C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4262C3)");
    test_class_info(&lv, &cd_S4262C3);
    dp->~S4262C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4262C3(Test_S4262C3, "S4262C3", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S4262C3C1Ev();
extern void _ZN7S4262C3D1Ev();
Name_Map name_map_S4262C3[] = {
  NSPAIR(_ZN7S4262C3C1Ev),
  NSPAIR(_ZN7S4262C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4262C3[];
extern void _ZN7S4262C3D1Ev();
extern void _ZN7S4262C3D0Ev();
extern void _ZN7S4262C33v14Ev();
extern void _ZN7S4262C33v15Ev();
extern void _ZN7S4262C33v16Ev();
extern void _ZN7S4262C33v17Ev();
extern void _ZN7S4262C33v18Ev();
extern void _ZN7S4262C33v19Ev();
extern void _ZN7S4262C33v20Ev();
extern void _ZN7S4262C33v21Ev();
extern void _ZN7S4262C33v22Ev();
extern void _ZN7S4262C33v23Ev();
extern void _ZN7S4262C33v24Ev();
extern void _ZN7S4262C33v25Ev();
extern void _ZN7S4262C33v26Ev();
extern void _ZN7S4262C33v27Ev();
extern void _ZN7S4262C33v28Ev();
extern void _ZN7S4262C33v29Ev();
extern void _ZN7S4262C33v30Ev();
extern void _ZN7S4262C33v31Ev();
extern void _ZN7S4262C33v32Ev();
extern void _ZN7S4262C33v33Ev();
extern void _ZN7S4262C33v34Ev();
extern void _ZN7S4262C33v35Ev();
extern void _ZN7S4262C33v36Ev();
extern void _ZN7S4262C33v37Ev();
extern void _ZN7S4262C33v38Ev();
extern void _ZN7S4262C33v39Ev();
static  VTBL_ENTRY vtc_S4262C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4262C3[0]),
  (VTBL_ENTRY)&_ZN7S4262C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4262C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4262C33v14Ev,
  (VTBL_ENTRY)&_ZN7S4262C33v15Ev,
  (VTBL_ENTRY)&_ZN7S4262C33v16Ev,
  (VTBL_ENTRY)&_ZN7S4262C33v17Ev,
  (VTBL_ENTRY)&_ZN7S4262C33v18Ev,
  (VTBL_ENTRY)&_ZN7S4262C33v19Ev,
  (VTBL_ENTRY)&_ZN7S4262C33v20Ev,
  (VTBL_ENTRY)&_ZN7S4262C33v21Ev,
  (VTBL_ENTRY)&_ZN7S4262C33v22Ev,
  (VTBL_ENTRY)&_ZN7S4262C33v23Ev,
  (VTBL_ENTRY)&_ZN7S4262C33v24Ev,
  (VTBL_ENTRY)&_ZN7S4262C33v25Ev,
  (VTBL_ENTRY)&_ZN7S4262C33v26Ev,
  (VTBL_ENTRY)&_ZN7S4262C33v27Ev,
  (VTBL_ENTRY)&_ZN7S4262C33v28Ev,
  (VTBL_ENTRY)&_ZN7S4262C33v29Ev,
  (VTBL_ENTRY)&_ZN7S4262C33v30Ev,
  (VTBL_ENTRY)&_ZN7S4262C33v31Ev,
  (VTBL_ENTRY)&_ZN7S4262C33v32Ev,
  (VTBL_ENTRY)&_ZN7S4262C33v33Ev,
  (VTBL_ENTRY)&_ZN7S4262C33v34Ev,
  (VTBL_ENTRY)&_ZN7S4262C33v35Ev,
  (VTBL_ENTRY)&_ZN7S4262C33v36Ev,
  (VTBL_ENTRY)&_ZN7S4262C33v37Ev,
  (VTBL_ENTRY)&_ZN7S4262C33v38Ev,
  (VTBL_ENTRY)&_ZN7S4262C33v39Ev,
};
extern VTBL_ENTRY _ZTI7S4262C3[];
extern  VTBL_ENTRY _ZTV7S4262C3[];
Class_Descriptor cd_S4262C3 = {  "S4262C3", // class name
  0,0,//no base classes
  &(vtc_S4262C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S4262C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4262C3),30, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4262C2  : S4262C3 {
  void *s4262c2f0[2];
  int s4262c2f1[4];
  ::S2423C5_nt s4262c2f2;
  void *s4262c2f3;
  char s4262c2f4;
  void *s4262c2f5;
  virtual  ~S4262C2(); // _ZN7S4262C2D1Ev
  virtual void  v40(); // _ZN7S4262C23v40Ev
  virtual void  v41(); // _ZN7S4262C23v41Ev
  virtual void  v42(); // _ZN7S4262C23v42Ev
  virtual void  v43(); // _ZN7S4262C23v43Ev
  virtual void  v44(); // _ZN7S4262C23v44Ev
  virtual void  v45(); // _ZN7S4262C23v45Ev
  virtual void  v46(); // _ZN7S4262C23v46Ev
  virtual void  v47(); // _ZN7S4262C23v47Ev
  virtual void  v48(); // _ZN7S4262C23v48Ev
  virtual void  v49(); // _ZN7S4262C23v49Ev
  virtual void  v50(); // _ZN7S4262C23v50Ev
  virtual void  v51(); // _ZN7S4262C23v51Ev
  virtual void  v52(); // _ZN7S4262C23v52Ev
  virtual void  v53(); // _ZN7S4262C23v53Ev
  S4262C2(); // tgen
};
//SIG(-1 S4262C2) C1{ BC2{ vd v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 Fp[2] Fi[4] FC3{ Fi[2]} Fp Fc Fp}


 S4262C2 ::~S4262C2(){ note_dtor("S4262C2", this);}
void  S4262C2 ::v40(){vfunc_called(this, "_ZN7S4262C23v40Ev");}
void  S4262C2 ::v41(){vfunc_called(this, "_ZN7S4262C23v41Ev");}
void  S4262C2 ::v42(){vfunc_called(this, "_ZN7S4262C23v42Ev");}
void  S4262C2 ::v43(){vfunc_called(this, "_ZN7S4262C23v43Ev");}
void  S4262C2 ::v44(){vfunc_called(this, "_ZN7S4262C23v44Ev");}
void  S4262C2 ::v45(){vfunc_called(this, "_ZN7S4262C23v45Ev");}
void  S4262C2 ::v46(){vfunc_called(this, "_ZN7S4262C23v46Ev");}
void  S4262C2 ::v47(){vfunc_called(this, "_ZN7S4262C23v47Ev");}
void  S4262C2 ::v48(){vfunc_called(this, "_ZN7S4262C23v48Ev");}
void  S4262C2 ::v49(){vfunc_called(this, "_ZN7S4262C23v49Ev");}
void  S4262C2 ::v50(){vfunc_called(this, "_ZN7S4262C23v50Ev");}
void  S4262C2 ::v51(){vfunc_called(this, "_ZN7S4262C23v51Ev");}
void  S4262C2 ::v52(){vfunc_called(this, "_ZN7S4262C23v52Ev");}
void  S4262C2 ::v53(){vfunc_called(this, "_ZN7S4262C23v53Ev");}
S4262C2 ::S4262C2(){ note_ctor("S4262C2", this);} // tgen

static void Test_S4262C2()
{
  extern Class_Descriptor cd_S4262C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,13)];
    init_test(&cd_S4262C2, buf);
    S4262C2 *dp, &lv = *(dp=new (buf) S4262C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,48), "sizeof(S4262C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4262C2)");
    check_base_class_offset(lv, (S4262C3*), 0, "S4262C2");
    check_field_offset(lv, s4262c2f0, ABISELECT(8,4), "S4262C2.s4262c2f0");
    check_field_offset(lv, s4262c2f1, ABISELECT(24,12), "S4262C2.s4262c2f1");
    check_field_offset(lv, s4262c2f2, ABISELECT(40,28), "S4262C2.s4262c2f2");
    check_field_offset(lv, s4262c2f3, ABISELECT(48,36), "S4262C2.s4262c2f3");
    check_field_offset(lv, s4262c2f4, ABISELECT(56,40), "S4262C2.s4262c2f4");
    check_field_offset(lv, s4262c2f5, ABISELECT(64,44), "S4262C2.s4262c2f5");
    test_class_info(&lv, &cd_S4262C2);
    dp->~S4262C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4262C2(Test_S4262C2, "S4262C2", ABISELECT(72,48));

#else // __cplusplus

extern void _ZN7S4262C2C1Ev();
extern void _ZN7S4262C2D1Ev();
Name_Map name_map_S4262C2[] = {
  NSPAIR(_ZN7S4262C2C1Ev),
  NSPAIR(_ZN7S4262C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4262C3;
extern VTBL_ENTRY _ZTI7S4262C3[];
extern  VTBL_ENTRY _ZTV7S4262C3[];
static Base_Class bases_S4262C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4262C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4262C2[];
extern void _ZN7S4262C2D1Ev();
extern void _ZN7S4262C2D0Ev();
extern void _ZN7S4262C33v14Ev();
extern void _ZN7S4262C33v15Ev();
extern void _ZN7S4262C33v16Ev();
extern void _ZN7S4262C33v17Ev();
extern void _ZN7S4262C33v18Ev();
extern void _ZN7S4262C33v19Ev();
extern void _ZN7S4262C33v20Ev();
extern void _ZN7S4262C33v21Ev();
extern void _ZN7S4262C33v22Ev();
extern void _ZN7S4262C33v23Ev();
extern void _ZN7S4262C33v24Ev();
extern void _ZN7S4262C33v25Ev();
extern void _ZN7S4262C33v26Ev();
extern void _ZN7S4262C33v27Ev();
extern void _ZN7S4262C33v28Ev();
extern void _ZN7S4262C33v29Ev();
extern void _ZN7S4262C33v30Ev();
extern void _ZN7S4262C33v31Ev();
extern void _ZN7S4262C33v32Ev();
extern void _ZN7S4262C33v33Ev();
extern void _ZN7S4262C33v34Ev();
extern void _ZN7S4262C33v35Ev();
extern void _ZN7S4262C33v36Ev();
extern void _ZN7S4262C33v37Ev();
extern void _ZN7S4262C33v38Ev();
extern void _ZN7S4262C33v39Ev();
extern void _ZN7S4262C23v40Ev();
extern void _ZN7S4262C23v41Ev();
extern void _ZN7S4262C23v42Ev();
extern void _ZN7S4262C23v43Ev();
extern void _ZN7S4262C23v44Ev();
extern void _ZN7S4262C23v45Ev();
extern void _ZN7S4262C23v46Ev();
extern void _ZN7S4262C23v47Ev();
extern void _ZN7S4262C23v48Ev();
extern void _ZN7S4262C23v49Ev();
extern void _ZN7S4262C23v50Ev();
extern void _ZN7S4262C23v51Ev();
extern void _ZN7S4262C23v52Ev();
extern void _ZN7S4262C23v53Ev();
static  VTBL_ENTRY vtc_S4262C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4262C2[0]),
  (VTBL_ENTRY)&_ZN7S4262C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4262C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4262C33v14Ev,
  (VTBL_ENTRY)&_ZN7S4262C33v15Ev,
  (VTBL_ENTRY)&_ZN7S4262C33v16Ev,
  (VTBL_ENTRY)&_ZN7S4262C33v17Ev,
  (VTBL_ENTRY)&_ZN7S4262C33v18Ev,
  (VTBL_ENTRY)&_ZN7S4262C33v19Ev,
  (VTBL_ENTRY)&_ZN7S4262C33v20Ev,
  (VTBL_ENTRY)&_ZN7S4262C33v21Ev,
  (VTBL_ENTRY)&_ZN7S4262C33v22Ev,
  (VTBL_ENTRY)&_ZN7S4262C33v23Ev,
  (VTBL_ENTRY)&_ZN7S4262C33v24Ev,
  (VTBL_ENTRY)&_ZN7S4262C33v25Ev,
  (VTBL_ENTRY)&_ZN7S4262C33v26Ev,
  (VTBL_ENTRY)&_ZN7S4262C33v27Ev,
  (VTBL_ENTRY)&_ZN7S4262C33v28Ev,
  (VTBL_ENTRY)&_ZN7S4262C33v29Ev,
  (VTBL_ENTRY)&_ZN7S4262C33v30Ev,
  (VTBL_ENTRY)&_ZN7S4262C33v31Ev,
  (VTBL_ENTRY)&_ZN7S4262C33v32Ev,
  (VTBL_ENTRY)&_ZN7S4262C33v33Ev,
  (VTBL_ENTRY)&_ZN7S4262C33v34Ev,
  (VTBL_ENTRY)&_ZN7S4262C33v35Ev,
  (VTBL_ENTRY)&_ZN7S4262C33v36Ev,
  (VTBL_ENTRY)&_ZN7S4262C33v37Ev,
  (VTBL_ENTRY)&_ZN7S4262C33v38Ev,
  (VTBL_ENTRY)&_ZN7S4262C33v39Ev,
  (VTBL_ENTRY)&_ZN7S4262C23v40Ev,
  (VTBL_ENTRY)&_ZN7S4262C23v41Ev,
  (VTBL_ENTRY)&_ZN7S4262C23v42Ev,
  (VTBL_ENTRY)&_ZN7S4262C23v43Ev,
  (VTBL_ENTRY)&_ZN7S4262C23v44Ev,
  (VTBL_ENTRY)&_ZN7S4262C23v45Ev,
  (VTBL_ENTRY)&_ZN7S4262C23v46Ev,
  (VTBL_ENTRY)&_ZN7S4262C23v47Ev,
  (VTBL_ENTRY)&_ZN7S4262C23v48Ev,
  (VTBL_ENTRY)&_ZN7S4262C23v49Ev,
  (VTBL_ENTRY)&_ZN7S4262C23v50Ev,
  (VTBL_ENTRY)&_ZN7S4262C23v51Ev,
  (VTBL_ENTRY)&_ZN7S4262C23v52Ev,
  (VTBL_ENTRY)&_ZN7S4262C23v53Ev,
};
extern VTBL_ENTRY _ZTI7S4262C2[];
extern  VTBL_ENTRY _ZTV7S4262C2[];
Class_Descriptor cd_S4262C2 = {  "S4262C2", // class name
  bases_S4262C2, 1,
  &(vtc_S4262C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,48), // object size
  NSPAIRA(_ZTI7S4262C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4262C2),44, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4262C5  {
  void *s4262c5f0;
  char s4262c5f1[32];
  int s4262c5f2[6];
  char s4262c5f3;
  int s4262c5f4[2];
  virtual  ~S4262C5(); // _ZN7S4262C5D1Ev
  virtual void  v54(); // _ZN7S4262C53v54Ev
  virtual void  v55(); // _ZN7S4262C53v55Ev
  S4262C5(); // tgen
};
//SIG(-1 S4262C5) C1{ vd v1 v2 Fp Fc[32] Fi[6] Fc Fi[2]}


 S4262C5 ::~S4262C5(){ note_dtor("S4262C5", this);}
void  S4262C5 ::v54(){vfunc_called(this, "_ZN7S4262C53v54Ev");}
void  S4262C5 ::v55(){vfunc_called(this, "_ZN7S4262C53v55Ev");}
S4262C5 ::S4262C5(){ note_ctor("S4262C5", this);} // tgen

static void Test_S4262C5()
{
  extern Class_Descriptor cd_S4262C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(12,20)];
    init_test(&cd_S4262C5, buf);
    S4262C5 *dp, &lv = *(dp=new (buf) S4262C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(88,76), "sizeof(S4262C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4262C5)");
    check_field_offset(lv, s4262c5f0, ABISELECT(8,4), "S4262C5.s4262c5f0");
    check_field_offset(lv, s4262c5f1, ABISELECT(16,8), "S4262C5.s4262c5f1");
    check_field_offset(lv, s4262c5f2, ABISELECT(48,40), "S4262C5.s4262c5f2");
    check_field_offset(lv, s4262c5f3, ABISELECT(72,64), "S4262C5.s4262c5f3");
    check_field_offset(lv, s4262c5f4, ABISELECT(76,68), "S4262C5.s4262c5f4");
    test_class_info(&lv, &cd_S4262C5);
    dp->~S4262C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4262C5(Test_S4262C5, "S4262C5", ABISELECT(88,76));

#else // __cplusplus

extern void _ZN7S4262C5C1Ev();
extern void _ZN7S4262C5D1Ev();
Name_Map name_map_S4262C5[] = {
  NSPAIR(_ZN7S4262C5C1Ev),
  NSPAIR(_ZN7S4262C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4262C5[];
extern void _ZN7S4262C5D1Ev();
extern void _ZN7S4262C5D0Ev();
extern void _ZN7S4262C53v54Ev();
extern void _ZN7S4262C53v55Ev();
static  VTBL_ENTRY vtc_S4262C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4262C5[0]),
  (VTBL_ENTRY)&_ZN7S4262C5D1Ev,
  (VTBL_ENTRY)&_ZN7S4262C5D0Ev,
  (VTBL_ENTRY)&_ZN7S4262C53v54Ev,
  (VTBL_ENTRY)&_ZN7S4262C53v55Ev,
};
extern VTBL_ENTRY _ZTI7S4262C5[];
extern  VTBL_ENTRY _ZTV7S4262C5[];
Class_Descriptor cd_S4262C5 = {  "S4262C5", // class name
  0,0,//no base classes
  &(vtc_S4262C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(88,76), // object size
  NSPAIRA(_ZTI7S4262C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4262C5),6, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4262C1  : S4262C2 , S4262C5 {
  void *s4262c1f0[2];
  int s4262c1f1;
  __tsi64 s4262c1f2;
  int s4262c1f3[2];
  __tsi64 s4262c1f4[2];
  long s4262c1f5;
  char s4262c1f6;
  int s4262c1f7[3];
  char s4262c1f8;
  int s4262c1f9[3];
  void *s4262c1f10[8];
  long s4262c1f11[2];
  void *s4262c1f12[2];
  virtual  ~S4262C1(); // _ZN7S4262C1D1Ev
  virtual void  v1(); // _ZN7S4262C12v1Ev
  virtual void  v2(); // _ZN7S4262C12v2Ev
  virtual void  v3(); // _ZN7S4262C12v3Ev
  virtual void  v4(); // _ZN7S4262C12v4Ev
  virtual void  v5(); // _ZN7S4262C12v5Ev
  virtual void  v6(); // _ZN7S4262C12v6Ev
  virtual void  v7(); // _ZN7S4262C12v7Ev
  virtual void  v8(); // _ZN7S4262C12v8Ev
  virtual void  v9(); // _ZN7S4262C12v9Ev
  virtual void  v10(); // _ZN7S4262C13v10Ev
  virtual void  v11(); // _ZN7S4262C13v11Ev
  virtual void  v12(); // _ZN7S4262C13v12Ev
  virtual void  v13(); // _ZN7S4262C13v13Ev
  S4262C1(); // tgen
};
//SIG(1 S4262C1) C1{ BC2{ BC3{ vd v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39} vd v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 Fp[2] Fi[4] FC4{ Fi[2]} Fp Fc Fp} BC5{ vd v54 v55 Fp Fc[32] Fi[6] Fc Fi[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 Fp[2] Fi FL Fi[2] FL[2] Fl Fc Fi[3] Fc Fi[3] Fp[8] Fl[2] Fp[2]}


 S4262C1 ::~S4262C1(){ note_dtor("S4262C1", this);}
void  S4262C1 ::v1(){vfunc_called(this, "_ZN7S4262C12v1Ev");}
void  S4262C1 ::v2(){vfunc_called(this, "_ZN7S4262C12v2Ev");}
void  S4262C1 ::v3(){vfunc_called(this, "_ZN7S4262C12v3Ev");}
void  S4262C1 ::v4(){vfunc_called(this, "_ZN7S4262C12v4Ev");}
void  S4262C1 ::v5(){vfunc_called(this, "_ZN7S4262C12v5Ev");}
void  S4262C1 ::v6(){vfunc_called(this, "_ZN7S4262C12v6Ev");}
void  S4262C1 ::v7(){vfunc_called(this, "_ZN7S4262C12v7Ev");}
void  S4262C1 ::v8(){vfunc_called(this, "_ZN7S4262C12v8Ev");}
void  S4262C1 ::v9(){vfunc_called(this, "_ZN7S4262C12v9Ev");}
void  S4262C1 ::v10(){vfunc_called(this, "_ZN7S4262C13v10Ev");}
void  S4262C1 ::v11(){vfunc_called(this, "_ZN7S4262C13v11Ev");}
void  S4262C1 ::v12(){vfunc_called(this, "_ZN7S4262C13v12Ev");}
void  S4262C1 ::v13(){vfunc_called(this, "_ZN7S4262C13v13Ev");}
S4262C1 ::S4262C1(){ note_ctor("S4262C1", this);} // tgen

static void Test_S4262C1()
{
  extern Class_Descriptor cd_S4262C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(45,64)];
    init_test(&cd_S4262C1, buf);
    S4262C1 *dp, &lv = *(dp=new (buf) S4262C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(352,252), "sizeof(S4262C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4262C1)");
    check_base_class_offset(lv, (S4262C3*)(S4262C2*), 0, "S4262C1");
    check_base_class_offset(lv, (S4262C2*), 0, "S4262C1");
    check_base_class_offset(lv, (S4262C5*), ABISELECT(72,48), "S4262C1");
    check_field_offset(lv, s4262c1f0, ABISELECT(160,124), "S4262C1.s4262c1f0");
    check_field_offset(lv, s4262c1f1, ABISELECT(176,132), "S4262C1.s4262c1f1");
    check_field_offset(lv, s4262c1f2, ABISELECT(184,136), "S4262C1.s4262c1f2");
    check_field_offset(lv, s4262c1f3, ABISELECT(192,144), "S4262C1.s4262c1f3");
    check_field_offset(lv, s4262c1f4, ABISELECT(200,152), "S4262C1.s4262c1f4");
    check_field_offset(lv, s4262c1f5, ABISELECT(216,168), "S4262C1.s4262c1f5");
    check_field_offset(lv, s4262c1f6, ABISELECT(224,172), "S4262C1.s4262c1f6");
    check_field_offset(lv, s4262c1f7, ABISELECT(228,176), "S4262C1.s4262c1f7");
    check_field_offset(lv, s4262c1f8, ABISELECT(240,188), "S4262C1.s4262c1f8");
    check_field_offset(lv, s4262c1f9, ABISELECT(244,192), "S4262C1.s4262c1f9");
    check_field_offset(lv, s4262c1f10, ABISELECT(256,204), "S4262C1.s4262c1f10");
    check_field_offset(lv, s4262c1f11, ABISELECT(320,236), "S4262C1.s4262c1f11");
    check_field_offset(lv, s4262c1f12, ABISELECT(336,244), "S4262C1.s4262c1f12");
    test_class_info(&lv, &cd_S4262C1);
    dp->~S4262C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4262C1(Test_S4262C1, "S4262C1", ABISELECT(352,252));

#else // __cplusplus

extern void _ZN7S4262C1C1Ev();
extern void _ZN7S4262C1D1Ev();
Name_Map name_map_S4262C1[] = {
  NSPAIR(_ZN7S4262C1C1Ev),
  NSPAIR(_ZN7S4262C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4262C3;
extern VTBL_ENTRY _ZTI7S4262C3[];
extern  VTBL_ENTRY _ZTV7S4262C3[];
extern Class_Descriptor cd_S4262C2;
extern VTBL_ENTRY _ZTI7S4262C2[];
extern  VTBL_ENTRY _ZTV7S4262C2[];
extern Class_Descriptor cd_S4262C5;
extern VTBL_ENTRY _ZTI7S4262C5[];
extern  VTBL_ENTRY _ZTV7S4262C5[];
static Base_Class bases_S4262C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4262C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S4262C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S4262C5,    ABISELECT(72,48), //bcp->offset
    57, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4262C1[];
extern void _ZN7S4262C1D1Ev();
extern void _ZN7S4262C1D0Ev();
extern void _ZN7S4262C33v14Ev();
extern void _ZN7S4262C33v15Ev();
extern void _ZN7S4262C33v16Ev();
extern void _ZN7S4262C33v17Ev();
extern void _ZN7S4262C33v18Ev();
extern void _ZN7S4262C33v19Ev();
extern void _ZN7S4262C33v20Ev();
extern void _ZN7S4262C33v21Ev();
extern void _ZN7S4262C33v22Ev();
extern void _ZN7S4262C33v23Ev();
extern void _ZN7S4262C33v24Ev();
extern void _ZN7S4262C33v25Ev();
extern void _ZN7S4262C33v26Ev();
extern void _ZN7S4262C33v27Ev();
extern void _ZN7S4262C33v28Ev();
extern void _ZN7S4262C33v29Ev();
extern void _ZN7S4262C33v30Ev();
extern void _ZN7S4262C33v31Ev();
extern void _ZN7S4262C33v32Ev();
extern void _ZN7S4262C33v33Ev();
extern void _ZN7S4262C33v34Ev();
extern void _ZN7S4262C33v35Ev();
extern void _ZN7S4262C33v36Ev();
extern void _ZN7S4262C33v37Ev();
extern void _ZN7S4262C33v38Ev();
extern void _ZN7S4262C33v39Ev();
extern void _ZN7S4262C23v40Ev();
extern void _ZN7S4262C23v41Ev();
extern void _ZN7S4262C23v42Ev();
extern void _ZN7S4262C23v43Ev();
extern void _ZN7S4262C23v44Ev();
extern void _ZN7S4262C23v45Ev();
extern void _ZN7S4262C23v46Ev();
extern void _ZN7S4262C23v47Ev();
extern void _ZN7S4262C23v48Ev();
extern void _ZN7S4262C23v49Ev();
extern void _ZN7S4262C23v50Ev();
extern void _ZN7S4262C23v51Ev();
extern void _ZN7S4262C23v52Ev();
extern void _ZN7S4262C23v53Ev();
extern void _ZN7S4262C12v1Ev();
extern void _ZN7S4262C12v2Ev();
extern void _ZN7S4262C12v3Ev();
extern void _ZN7S4262C12v4Ev();
extern void _ZN7S4262C12v5Ev();
extern void _ZN7S4262C12v6Ev();
extern void _ZN7S4262C12v7Ev();
extern void _ZN7S4262C12v8Ev();
extern void _ZN7S4262C12v9Ev();
extern void _ZN7S4262C13v10Ev();
extern void _ZN7S4262C13v11Ev();
extern void _ZN7S4262C13v12Ev();
extern void _ZN7S4262C13v13Ev();
extern void ABISELECT(_ZThn72_N7S4262C1D1Ev,_ZThn48_N7S4262C1D1Ev)();
extern void ABISELECT(_ZThn72_N7S4262C1D0Ev,_ZThn48_N7S4262C1D0Ev)();
extern void _ZN7S4262C53v54Ev();
extern void _ZN7S4262C53v55Ev();
static  VTBL_ENTRY vtc_S4262C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4262C1[0]),
  (VTBL_ENTRY)&_ZN7S4262C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4262C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4262C33v14Ev,
  (VTBL_ENTRY)&_ZN7S4262C33v15Ev,
  (VTBL_ENTRY)&_ZN7S4262C33v16Ev,
  (VTBL_ENTRY)&_ZN7S4262C33v17Ev,
  (VTBL_ENTRY)&_ZN7S4262C33v18Ev,
  (VTBL_ENTRY)&_ZN7S4262C33v19Ev,
  (VTBL_ENTRY)&_ZN7S4262C33v20Ev,
  (VTBL_ENTRY)&_ZN7S4262C33v21Ev,
  (VTBL_ENTRY)&_ZN7S4262C33v22Ev,
  (VTBL_ENTRY)&_ZN7S4262C33v23Ev,
  (VTBL_ENTRY)&_ZN7S4262C33v24Ev,
  (VTBL_ENTRY)&_ZN7S4262C33v25Ev,
  (VTBL_ENTRY)&_ZN7S4262C33v26Ev,
  (VTBL_ENTRY)&_ZN7S4262C33v27Ev,
  (VTBL_ENTRY)&_ZN7S4262C33v28Ev,
  (VTBL_ENTRY)&_ZN7S4262C33v29Ev,
  (VTBL_ENTRY)&_ZN7S4262C33v30Ev,
  (VTBL_ENTRY)&_ZN7S4262C33v31Ev,
  (VTBL_ENTRY)&_ZN7S4262C33v32Ev,
  (VTBL_ENTRY)&_ZN7S4262C33v33Ev,
  (VTBL_ENTRY)&_ZN7S4262C33v34Ev,
  (VTBL_ENTRY)&_ZN7S4262C33v35Ev,
  (VTBL_ENTRY)&_ZN7S4262C33v36Ev,
  (VTBL_ENTRY)&_ZN7S4262C33v37Ev,
  (VTBL_ENTRY)&_ZN7S4262C33v38Ev,
  (VTBL_ENTRY)&_ZN7S4262C33v39Ev,
  (VTBL_ENTRY)&_ZN7S4262C23v40Ev,
  (VTBL_ENTRY)&_ZN7S4262C23v41Ev,
  (VTBL_ENTRY)&_ZN7S4262C23v42Ev,
  (VTBL_ENTRY)&_ZN7S4262C23v43Ev,
  (VTBL_ENTRY)&_ZN7S4262C23v44Ev,
  (VTBL_ENTRY)&_ZN7S4262C23v45Ev,
  (VTBL_ENTRY)&_ZN7S4262C23v46Ev,
  (VTBL_ENTRY)&_ZN7S4262C23v47Ev,
  (VTBL_ENTRY)&_ZN7S4262C23v48Ev,
  (VTBL_ENTRY)&_ZN7S4262C23v49Ev,
  (VTBL_ENTRY)&_ZN7S4262C23v50Ev,
  (VTBL_ENTRY)&_ZN7S4262C23v51Ev,
  (VTBL_ENTRY)&_ZN7S4262C23v52Ev,
  (VTBL_ENTRY)&_ZN7S4262C23v53Ev,
  (VTBL_ENTRY)&_ZN7S4262C12v1Ev,
  (VTBL_ENTRY)&_ZN7S4262C12v2Ev,
  (VTBL_ENTRY)&_ZN7S4262C12v3Ev,
  (VTBL_ENTRY)&_ZN7S4262C12v4Ev,
  (VTBL_ENTRY)&_ZN7S4262C12v5Ev,
  (VTBL_ENTRY)&_ZN7S4262C12v6Ev,
  (VTBL_ENTRY)&_ZN7S4262C12v7Ev,
  (VTBL_ENTRY)&_ZN7S4262C12v8Ev,
  (VTBL_ENTRY)&_ZN7S4262C12v9Ev,
  (VTBL_ENTRY)&_ZN7S4262C13v10Ev,
  (VTBL_ENTRY)&_ZN7S4262C13v11Ev,
  (VTBL_ENTRY)&_ZN7S4262C13v12Ev,
  (VTBL_ENTRY)&_ZN7S4262C13v13Ev,
  ABISELECT(-72,-48),
  (VTBL_ENTRY)&(_ZTI7S4262C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn72_N7S4262C1D1Ev,_ZThn48_N7S4262C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn72_N7S4262C1D0Ev,_ZThn48_N7S4262C1D0Ev),
  (VTBL_ENTRY)&_ZN7S4262C53v54Ev,
  (VTBL_ENTRY)&_ZN7S4262C53v55Ev,
};
extern VTBL_ENTRY _ZTI7S4262C1[];
extern  VTBL_ENTRY _ZTV7S4262C1[];
Class_Descriptor cd_S4262C1 = {  "S4262C1", // class name
  bases_S4262C1, 3,
  &(vtc_S4262C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(352,252), // object size
  NSPAIRA(_ZTI7S4262C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S4262C1),63, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4260C3  {
  virtual  ~S4260C3(); // _ZN7S4260C3D1Ev
  virtual void  v14(); // _ZN7S4260C33v14Ev
  virtual void  v15(); // _ZN7S4260C33v15Ev
  virtual void  v16(); // _ZN7S4260C33v16Ev
  virtual void  v17(); // _ZN7S4260C33v17Ev
  virtual void  v18(); // _ZN7S4260C33v18Ev
  virtual void  v19(); // _ZN7S4260C33v19Ev
  virtual void  v20(); // _ZN7S4260C33v20Ev
  virtual void  v21(); // _ZN7S4260C33v21Ev
  virtual void  v22(); // _ZN7S4260C33v22Ev
  virtual void  v23(); // _ZN7S4260C33v23Ev
  virtual void  v24(); // _ZN7S4260C33v24Ev
  virtual void  v25(); // _ZN7S4260C33v25Ev
  virtual void  v26(); // _ZN7S4260C33v26Ev
  virtual void  v27(); // _ZN7S4260C33v27Ev
  virtual void  v28(); // _ZN7S4260C33v28Ev
  virtual void  v29(); // _ZN7S4260C33v29Ev
  virtual void  v30(); // _ZN7S4260C33v30Ev
  virtual void  v31(); // _ZN7S4260C33v31Ev
  virtual void  v32(); // _ZN7S4260C33v32Ev
  virtual void  v33(); // _ZN7S4260C33v33Ev
  virtual void  v34(); // _ZN7S4260C33v34Ev
  virtual void  v35(); // _ZN7S4260C33v35Ev
  virtual void  v36(); // _ZN7S4260C33v36Ev
  virtual void  v37(); // _ZN7S4260C33v37Ev
  virtual void  v38(); // _ZN7S4260C33v38Ev
  virtual void  v39(); // _ZN7S4260C33v39Ev
  S4260C3(); // tgen
};
//SIG(-1 S4260C3) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26}


 S4260C3 ::~S4260C3(){ note_dtor("S4260C3", this);}
void  S4260C3 ::v14(){vfunc_called(this, "_ZN7S4260C33v14Ev");}
void  S4260C3 ::v15(){vfunc_called(this, "_ZN7S4260C33v15Ev");}
void  S4260C3 ::v16(){vfunc_called(this, "_ZN7S4260C33v16Ev");}
void  S4260C3 ::v17(){vfunc_called(this, "_ZN7S4260C33v17Ev");}
void  S4260C3 ::v18(){vfunc_called(this, "_ZN7S4260C33v18Ev");}
void  S4260C3 ::v19(){vfunc_called(this, "_ZN7S4260C33v19Ev");}
void  S4260C3 ::v20(){vfunc_called(this, "_ZN7S4260C33v20Ev");}
void  S4260C3 ::v21(){vfunc_called(this, "_ZN7S4260C33v21Ev");}
void  S4260C3 ::v22(){vfunc_called(this, "_ZN7S4260C33v22Ev");}
void  S4260C3 ::v23(){vfunc_called(this, "_ZN7S4260C33v23Ev");}
void  S4260C3 ::v24(){vfunc_called(this, "_ZN7S4260C33v24Ev");}
void  S4260C3 ::v25(){vfunc_called(this, "_ZN7S4260C33v25Ev");}
void  S4260C3 ::v26(){vfunc_called(this, "_ZN7S4260C33v26Ev");}
void  S4260C3 ::v27(){vfunc_called(this, "_ZN7S4260C33v27Ev");}
void  S4260C3 ::v28(){vfunc_called(this, "_ZN7S4260C33v28Ev");}
void  S4260C3 ::v29(){vfunc_called(this, "_ZN7S4260C33v29Ev");}
void  S4260C3 ::v30(){vfunc_called(this, "_ZN7S4260C33v30Ev");}
void  S4260C3 ::v31(){vfunc_called(this, "_ZN7S4260C33v31Ev");}
void  S4260C3 ::v32(){vfunc_called(this, "_ZN7S4260C33v32Ev");}
void  S4260C3 ::v33(){vfunc_called(this, "_ZN7S4260C33v33Ev");}
void  S4260C3 ::v34(){vfunc_called(this, "_ZN7S4260C33v34Ev");}
void  S4260C3 ::v35(){vfunc_called(this, "_ZN7S4260C33v35Ev");}
void  S4260C3 ::v36(){vfunc_called(this, "_ZN7S4260C33v36Ev");}
void  S4260C3 ::v37(){vfunc_called(this, "_ZN7S4260C33v37Ev");}
void  S4260C3 ::v38(){vfunc_called(this, "_ZN7S4260C33v38Ev");}
void  S4260C3 ::v39(){vfunc_called(this, "_ZN7S4260C33v39Ev");}
S4260C3 ::S4260C3(){ note_ctor("S4260C3", this);} // tgen

static void Test_S4260C3()
{
  extern Class_Descriptor cd_S4260C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S4260C3, buf);
    S4260C3 *dp, &lv = *(dp=new (buf) S4260C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S4260C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4260C3)");
    test_class_info(&lv, &cd_S4260C3);
    dp->~S4260C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4260C3(Test_S4260C3, "S4260C3", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S4260C3C1Ev();
extern void _ZN7S4260C3D1Ev();
Name_Map name_map_S4260C3[] = {
  NSPAIR(_ZN7S4260C3C1Ev),
  NSPAIR(_ZN7S4260C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4260C3[];
extern void _ZN7S4260C3D1Ev();
extern void _ZN7S4260C3D0Ev();
extern void _ZN7S4260C33v14Ev();
extern void _ZN7S4260C33v15Ev();
extern void _ZN7S4260C33v16Ev();
extern void _ZN7S4260C33v17Ev();
extern void _ZN7S4260C33v18Ev();
extern void _ZN7S4260C33v19Ev();
extern void _ZN7S4260C33v20Ev();
extern void _ZN7S4260C33v21Ev();
extern void _ZN7S4260C33v22Ev();
extern void _ZN7S4260C33v23Ev();
extern void _ZN7S4260C33v24Ev();
extern void _ZN7S4260C33v25Ev();
extern void _ZN7S4260C33v26Ev();
extern void _ZN7S4260C33v27Ev();
extern void _ZN7S4260C33v28Ev();
extern void _ZN7S4260C33v29Ev();
extern void _ZN7S4260C33v30Ev();
extern void _ZN7S4260C33v31Ev();
extern void _ZN7S4260C33v32Ev();
extern void _ZN7S4260C33v33Ev();
extern void _ZN7S4260C33v34Ev();
extern void _ZN7S4260C33v35Ev();
extern void _ZN7S4260C33v36Ev();
extern void _ZN7S4260C33v37Ev();
extern void _ZN7S4260C33v38Ev();
extern void _ZN7S4260C33v39Ev();
static  VTBL_ENTRY vtc_S4260C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4260C3[0]),
  (VTBL_ENTRY)&_ZN7S4260C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4260C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4260C33v14Ev,
  (VTBL_ENTRY)&_ZN7S4260C33v15Ev,
  (VTBL_ENTRY)&_ZN7S4260C33v16Ev,
  (VTBL_ENTRY)&_ZN7S4260C33v17Ev,
  (VTBL_ENTRY)&_ZN7S4260C33v18Ev,
  (VTBL_ENTRY)&_ZN7S4260C33v19Ev,
  (VTBL_ENTRY)&_ZN7S4260C33v20Ev,
  (VTBL_ENTRY)&_ZN7S4260C33v21Ev,
  (VTBL_ENTRY)&_ZN7S4260C33v22Ev,
  (VTBL_ENTRY)&_ZN7S4260C33v23Ev,
  (VTBL_ENTRY)&_ZN7S4260C33v24Ev,
  (VTBL_ENTRY)&_ZN7S4260C33v25Ev,
  (VTBL_ENTRY)&_ZN7S4260C33v26Ev,
  (VTBL_ENTRY)&_ZN7S4260C33v27Ev,
  (VTBL_ENTRY)&_ZN7S4260C33v28Ev,
  (VTBL_ENTRY)&_ZN7S4260C33v29Ev,
  (VTBL_ENTRY)&_ZN7S4260C33v30Ev,
  (VTBL_ENTRY)&_ZN7S4260C33v31Ev,
  (VTBL_ENTRY)&_ZN7S4260C33v32Ev,
  (VTBL_ENTRY)&_ZN7S4260C33v33Ev,
  (VTBL_ENTRY)&_ZN7S4260C33v34Ev,
  (VTBL_ENTRY)&_ZN7S4260C33v35Ev,
  (VTBL_ENTRY)&_ZN7S4260C33v36Ev,
  (VTBL_ENTRY)&_ZN7S4260C33v37Ev,
  (VTBL_ENTRY)&_ZN7S4260C33v38Ev,
  (VTBL_ENTRY)&_ZN7S4260C33v39Ev,
};
extern VTBL_ENTRY _ZTI7S4260C3[];
extern  VTBL_ENTRY _ZTV7S4260C3[];
Class_Descriptor cd_S4260C3 = {  "S4260C3", // class name
  0,0,//no base classes
  &(vtc_S4260C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S4260C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4260C3),30, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4260C2  : S4260C3 {
  void *s4260c2f0[2];
  int s4260c2f1[4];
  ::S2423C5_nt s4260c2f2;
  void *s4260c2f3;
  char s4260c2f4;
  void *s4260c2f5;
  virtual  ~S4260C2(); // _ZN7S4260C2D1Ev
  virtual void  v40(); // _ZN7S4260C23v40Ev
  virtual void  v41(); // _ZN7S4260C23v41Ev
  virtual void  v42(); // _ZN7S4260C23v42Ev
  virtual void  v43(); // _ZN7S4260C23v43Ev
  virtual void  v44(); // _ZN7S4260C23v44Ev
  virtual void  v45(); // _ZN7S4260C23v45Ev
  virtual void  v46(); // _ZN7S4260C23v46Ev
  virtual void  v47(); // _ZN7S4260C23v47Ev
  virtual void  v48(); // _ZN7S4260C23v48Ev
  virtual void  v49(); // _ZN7S4260C23v49Ev
  virtual void  v50(); // _ZN7S4260C23v50Ev
  virtual void  v51(); // _ZN7S4260C23v51Ev
  virtual void  v52(); // _ZN7S4260C23v52Ev
  virtual void  v53(); // _ZN7S4260C23v53Ev
  S4260C2(); // tgen
};
//SIG(-1 S4260C2) C1{ BC2{ vd v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 Fp[2] Fi[4] FC3{ Fi[2]} Fp Fc Fp}


 S4260C2 ::~S4260C2(){ note_dtor("S4260C2", this);}
void  S4260C2 ::v40(){vfunc_called(this, "_ZN7S4260C23v40Ev");}
void  S4260C2 ::v41(){vfunc_called(this, "_ZN7S4260C23v41Ev");}
void  S4260C2 ::v42(){vfunc_called(this, "_ZN7S4260C23v42Ev");}
void  S4260C2 ::v43(){vfunc_called(this, "_ZN7S4260C23v43Ev");}
void  S4260C2 ::v44(){vfunc_called(this, "_ZN7S4260C23v44Ev");}
void  S4260C2 ::v45(){vfunc_called(this, "_ZN7S4260C23v45Ev");}
void  S4260C2 ::v46(){vfunc_called(this, "_ZN7S4260C23v46Ev");}
void  S4260C2 ::v47(){vfunc_called(this, "_ZN7S4260C23v47Ev");}
void  S4260C2 ::v48(){vfunc_called(this, "_ZN7S4260C23v48Ev");}
void  S4260C2 ::v49(){vfunc_called(this, "_ZN7S4260C23v49Ev");}
void  S4260C2 ::v50(){vfunc_called(this, "_ZN7S4260C23v50Ev");}
void  S4260C2 ::v51(){vfunc_called(this, "_ZN7S4260C23v51Ev");}
void  S4260C2 ::v52(){vfunc_called(this, "_ZN7S4260C23v52Ev");}
void  S4260C2 ::v53(){vfunc_called(this, "_ZN7S4260C23v53Ev");}
S4260C2 ::S4260C2(){ note_ctor("S4260C2", this);} // tgen

static void Test_S4260C2()
{
  extern Class_Descriptor cd_S4260C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,13)];
    init_test(&cd_S4260C2, buf);
    S4260C2 *dp, &lv = *(dp=new (buf) S4260C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,48), "sizeof(S4260C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4260C2)");
    check_base_class_offset(lv, (S4260C3*), 0, "S4260C2");
    check_field_offset(lv, s4260c2f0, ABISELECT(8,4), "S4260C2.s4260c2f0");
    check_field_offset(lv, s4260c2f1, ABISELECT(24,12), "S4260C2.s4260c2f1");
    check_field_offset(lv, s4260c2f2, ABISELECT(40,28), "S4260C2.s4260c2f2");
    check_field_offset(lv, s4260c2f3, ABISELECT(48,36), "S4260C2.s4260c2f3");
    check_field_offset(lv, s4260c2f4, ABISELECT(56,40), "S4260C2.s4260c2f4");
    check_field_offset(lv, s4260c2f5, ABISELECT(64,44), "S4260C2.s4260c2f5");
    test_class_info(&lv, &cd_S4260C2);
    dp->~S4260C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4260C2(Test_S4260C2, "S4260C2", ABISELECT(72,48));

#else // __cplusplus

extern void _ZN7S4260C2C1Ev();
extern void _ZN7S4260C2D1Ev();
Name_Map name_map_S4260C2[] = {
  NSPAIR(_ZN7S4260C2C1Ev),
  NSPAIR(_ZN7S4260C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4260C3;
extern VTBL_ENTRY _ZTI7S4260C3[];
extern  VTBL_ENTRY _ZTV7S4260C3[];
static Base_Class bases_S4260C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4260C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4260C2[];
extern void _ZN7S4260C2D1Ev();
extern void _ZN7S4260C2D0Ev();
extern void _ZN7S4260C33v14Ev();
extern void _ZN7S4260C33v15Ev();
extern void _ZN7S4260C33v16Ev();
extern void _ZN7S4260C33v17Ev();
extern void _ZN7S4260C33v18Ev();
extern void _ZN7S4260C33v19Ev();
extern void _ZN7S4260C33v20Ev();
extern void _ZN7S4260C33v21Ev();
extern void _ZN7S4260C33v22Ev();
extern void _ZN7S4260C33v23Ev();
extern void _ZN7S4260C33v24Ev();
extern void _ZN7S4260C33v25Ev();
extern void _ZN7S4260C33v26Ev();
extern void _ZN7S4260C33v27Ev();
extern void _ZN7S4260C33v28Ev();
extern void _ZN7S4260C33v29Ev();
extern void _ZN7S4260C33v30Ev();
extern void _ZN7S4260C33v31Ev();
extern void _ZN7S4260C33v32Ev();
extern void _ZN7S4260C33v33Ev();
extern void _ZN7S4260C33v34Ev();
extern void _ZN7S4260C33v35Ev();
extern void _ZN7S4260C33v36Ev();
extern void _ZN7S4260C33v37Ev();
extern void _ZN7S4260C33v38Ev();
extern void _ZN7S4260C33v39Ev();
extern void _ZN7S4260C23v40Ev();
extern void _ZN7S4260C23v41Ev();
extern void _ZN7S4260C23v42Ev();
extern void _ZN7S4260C23v43Ev();
extern void _ZN7S4260C23v44Ev();
extern void _ZN7S4260C23v45Ev();
extern void _ZN7S4260C23v46Ev();
extern void _ZN7S4260C23v47Ev();
extern void _ZN7S4260C23v48Ev();
extern void _ZN7S4260C23v49Ev();
extern void _ZN7S4260C23v50Ev();
extern void _ZN7S4260C23v51Ev();
extern void _ZN7S4260C23v52Ev();
extern void _ZN7S4260C23v53Ev();
static  VTBL_ENTRY vtc_S4260C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4260C2[0]),
  (VTBL_ENTRY)&_ZN7S4260C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4260C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4260C33v14Ev,
  (VTBL_ENTRY)&_ZN7S4260C33v15Ev,
  (VTBL_ENTRY)&_ZN7S4260C33v16Ev,
  (VTBL_ENTRY)&_ZN7S4260C33v17Ev,
  (VTBL_ENTRY)&_ZN7S4260C33v18Ev,
  (VTBL_ENTRY)&_ZN7S4260C33v19Ev,
  (VTBL_ENTRY)&_ZN7S4260C33v20Ev,
  (VTBL_ENTRY)&_ZN7S4260C33v21Ev,
  (VTBL_ENTRY)&_ZN7S4260C33v22Ev,
  (VTBL_ENTRY)&_ZN7S4260C33v23Ev,
  (VTBL_ENTRY)&_ZN7S4260C33v24Ev,
  (VTBL_ENTRY)&_ZN7S4260C33v25Ev,
  (VTBL_ENTRY)&_ZN7S4260C33v26Ev,
  (VTBL_ENTRY)&_ZN7S4260C33v27Ev,
  (VTBL_ENTRY)&_ZN7S4260C33v28Ev,
  (VTBL_ENTRY)&_ZN7S4260C33v29Ev,
  (VTBL_ENTRY)&_ZN7S4260C33v30Ev,
  (VTBL_ENTRY)&_ZN7S4260C33v31Ev,
  (VTBL_ENTRY)&_ZN7S4260C33v32Ev,
  (VTBL_ENTRY)&_ZN7S4260C33v33Ev,
  (VTBL_ENTRY)&_ZN7S4260C33v34Ev,
  (VTBL_ENTRY)&_ZN7S4260C33v35Ev,
  (VTBL_ENTRY)&_ZN7S4260C33v36Ev,
  (VTBL_ENTRY)&_ZN7S4260C33v37Ev,
  (VTBL_ENTRY)&_ZN7S4260C33v38Ev,
  (VTBL_ENTRY)&_ZN7S4260C33v39Ev,
  (VTBL_ENTRY)&_ZN7S4260C23v40Ev,
  (VTBL_ENTRY)&_ZN7S4260C23v41Ev,
  (VTBL_ENTRY)&_ZN7S4260C23v42Ev,
  (VTBL_ENTRY)&_ZN7S4260C23v43Ev,
  (VTBL_ENTRY)&_ZN7S4260C23v44Ev,
  (VTBL_ENTRY)&_ZN7S4260C23v45Ev,
  (VTBL_ENTRY)&_ZN7S4260C23v46Ev,
  (VTBL_ENTRY)&_ZN7S4260C23v47Ev,
  (VTBL_ENTRY)&_ZN7S4260C23v48Ev,
  (VTBL_ENTRY)&_ZN7S4260C23v49Ev,
  (VTBL_ENTRY)&_ZN7S4260C23v50Ev,
  (VTBL_ENTRY)&_ZN7S4260C23v51Ev,
  (VTBL_ENTRY)&_ZN7S4260C23v52Ev,
  (VTBL_ENTRY)&_ZN7S4260C23v53Ev,
};
extern VTBL_ENTRY _ZTI7S4260C2[];
extern  VTBL_ENTRY _ZTV7S4260C2[];
Class_Descriptor cd_S4260C2 = {  "S4260C2", // class name
  bases_S4260C2, 1,
  &(vtc_S4260C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,48), // object size
  NSPAIRA(_ZTI7S4260C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4260C2),44, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4260C5  {
  void *s4260c5f0;
  char s4260c5f1[32];
  int s4260c5f2[6];
  char s4260c5f3;
  int s4260c5f4[2];
  virtual  ~S4260C5(); // _ZN7S4260C5D1Ev
  virtual void  v54(); // _ZN7S4260C53v54Ev
  virtual void  v55(); // _ZN7S4260C53v55Ev
  S4260C5(); // tgen
};
//SIG(-1 S4260C5) C1{ vd v1 v2 Fp Fc[32] Fi[6] Fc Fi[2]}


 S4260C5 ::~S4260C5(){ note_dtor("S4260C5", this);}
void  S4260C5 ::v54(){vfunc_called(this, "_ZN7S4260C53v54Ev");}
void  S4260C5 ::v55(){vfunc_called(this, "_ZN7S4260C53v55Ev");}
S4260C5 ::S4260C5(){ note_ctor("S4260C5", this);} // tgen

static void Test_S4260C5()
{
  extern Class_Descriptor cd_S4260C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(12,20)];
    init_test(&cd_S4260C5, buf);
    S4260C5 *dp, &lv = *(dp=new (buf) S4260C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(88,76), "sizeof(S4260C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4260C5)");
    check_field_offset(lv, s4260c5f0, ABISELECT(8,4), "S4260C5.s4260c5f0");
    check_field_offset(lv, s4260c5f1, ABISELECT(16,8), "S4260C5.s4260c5f1");
    check_field_offset(lv, s4260c5f2, ABISELECT(48,40), "S4260C5.s4260c5f2");
    check_field_offset(lv, s4260c5f3, ABISELECT(72,64), "S4260C5.s4260c5f3");
    check_field_offset(lv, s4260c5f4, ABISELECT(76,68), "S4260C5.s4260c5f4");
    test_class_info(&lv, &cd_S4260C5);
    dp->~S4260C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4260C5(Test_S4260C5, "S4260C5", ABISELECT(88,76));

#else // __cplusplus

extern void _ZN7S4260C5C1Ev();
extern void _ZN7S4260C5D1Ev();
Name_Map name_map_S4260C5[] = {
  NSPAIR(_ZN7S4260C5C1Ev),
  NSPAIR(_ZN7S4260C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4260C5[];
extern void _ZN7S4260C5D1Ev();
extern void _ZN7S4260C5D0Ev();
extern void _ZN7S4260C53v54Ev();
extern void _ZN7S4260C53v55Ev();
static  VTBL_ENTRY vtc_S4260C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4260C5[0]),
  (VTBL_ENTRY)&_ZN7S4260C5D1Ev,
  (VTBL_ENTRY)&_ZN7S4260C5D0Ev,
  (VTBL_ENTRY)&_ZN7S4260C53v54Ev,
  (VTBL_ENTRY)&_ZN7S4260C53v55Ev,
};
extern VTBL_ENTRY _ZTI7S4260C5[];
extern  VTBL_ENTRY _ZTV7S4260C5[];
Class_Descriptor cd_S4260C5 = {  "S4260C5", // class name
  0,0,//no base classes
  &(vtc_S4260C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(88,76), // object size
  NSPAIRA(_ZTI7S4260C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4260C5),6, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4260C1  : S4260C2 , S4260C5 {
  long s4260c1f0[2];
  int s4260c1f1;
  ::S4666C13_nt s4260c1f2;
  void *s4260c1f3[4];
  int s4260c1f4;
  void *s4260c1f5[2];
  int s4260c1f6[3];
  void *s4260c1f7[4];
  long s4260c1f8[2];
  virtual  ~S4260C1(); // _ZN7S4260C1D1Ev
  virtual void  v1(); // _ZN7S4260C12v1Ev
  virtual void  v2(); // _ZN7S4260C12v2Ev
  virtual void  v3(); // _ZN7S4260C12v3Ev
  virtual void  v4(); // _ZN7S4260C12v4Ev
  virtual void  v5(); // _ZN7S4260C12v5Ev
  virtual void  v6(); // _ZN7S4260C12v6Ev
  virtual void  v7(); // _ZN7S4260C12v7Ev
  virtual void  v8(); // _ZN7S4260C12v8Ev
  virtual void  v9(); // _ZN7S4260C12v9Ev
  virtual void  v10(); // _ZN7S4260C13v10Ev
  virtual void  v11(); // _ZN7S4260C13v11Ev
  virtual void  v12(); // _ZN7S4260C13v12Ev
  virtual void  v13(); // _ZN7S4260C13v13Ev
  S4260C1(); // tgen
};
//SIG(1 S4260C1) C1{ BC2{ BC3{ vd v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39} vd v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 Fp[2] Fi[4] FC4{ Fi[2]} Fp Fc Fp} BC5{ vd v54 v55 Fp Fc[32] Fi[6] Fc Fi[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 Fl[2] Fi FC6{ FL} Fp[4] Fi Fp[2] Fi[3] Fp[4] Fl[2]}


 S4260C1 ::~S4260C1(){ note_dtor("S4260C1", this);}
void  S4260C1 ::v1(){vfunc_called(this, "_ZN7S4260C12v1Ev");}
void  S4260C1 ::v2(){vfunc_called(this, "_ZN7S4260C12v2Ev");}
void  S4260C1 ::v3(){vfunc_called(this, "_ZN7S4260C12v3Ev");}
void  S4260C1 ::v4(){vfunc_called(this, "_ZN7S4260C12v4Ev");}
void  S4260C1 ::v5(){vfunc_called(this, "_ZN7S4260C12v5Ev");}
void  S4260C1 ::v6(){vfunc_called(this, "_ZN7S4260C12v6Ev");}
void  S4260C1 ::v7(){vfunc_called(this, "_ZN7S4260C12v7Ev");}
void  S4260C1 ::v8(){vfunc_called(this, "_ZN7S4260C12v8Ev");}
void  S4260C1 ::v9(){vfunc_called(this, "_ZN7S4260C12v9Ev");}
void  S4260C1 ::v10(){vfunc_called(this, "_ZN7S4260C13v10Ev");}
void  S4260C1 ::v11(){vfunc_called(this, "_ZN7S4260C13v11Ev");}
void  S4260C1 ::v12(){vfunc_called(this, "_ZN7S4260C13v12Ev");}
void  S4260C1 ::v13(){vfunc_called(this, "_ZN7S4260C13v13Ev");}
S4260C1 ::S4260C1(){ note_ctor("S4260C1", this);} // tgen

static void Test_S4260C1()
{
  extern Class_Descriptor cd_S4260C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(40,53)];
    init_test(&cd_S4260C1, buf);
    S4260C1 *dp, &lv = *(dp=new (buf) S4260C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(312,208), "sizeof(S4260C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4260C1)");
    check_base_class_offset(lv, (S4260C3*)(S4260C2*), 0, "S4260C1");
    check_base_class_offset(lv, (S4260C2*), 0, "S4260C1");
    check_base_class_offset(lv, (S4260C5*), ABISELECT(72,48), "S4260C1");
    check_field_offset(lv, s4260c1f0, ABISELECT(160,124), "S4260C1.s4260c1f0");
    check_field_offset(lv, s4260c1f1, ABISELECT(176,132), "S4260C1.s4260c1f1");
    check_field_offset(lv, s4260c1f2, ABISELECT(184,136), "S4260C1.s4260c1f2");
    check_field_offset(lv, s4260c1f3, ABISELECT(192,144), "S4260C1.s4260c1f3");
    check_field_offset(lv, s4260c1f4, ABISELECT(224,160), "S4260C1.s4260c1f4");
    check_field_offset(lv, s4260c1f5, ABISELECT(232,164), "S4260C1.s4260c1f5");
    check_field_offset(lv, s4260c1f6, ABISELECT(248,172), "S4260C1.s4260c1f6");
    check_field_offset(lv, s4260c1f7, ABISELECT(264,184), "S4260C1.s4260c1f7");
    check_field_offset(lv, s4260c1f8, ABISELECT(296,200), "S4260C1.s4260c1f8");
    test_class_info(&lv, &cd_S4260C1);
    dp->~S4260C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4260C1(Test_S4260C1, "S4260C1", ABISELECT(312,208));

#else // __cplusplus

extern void _ZN7S4260C1C1Ev();
extern void _ZN7S4260C1D1Ev();
Name_Map name_map_S4260C1[] = {
  NSPAIR(_ZN7S4260C1C1Ev),
  NSPAIR(_ZN7S4260C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4260C3;
extern VTBL_ENTRY _ZTI7S4260C3[];
extern  VTBL_ENTRY _ZTV7S4260C3[];
extern Class_Descriptor cd_S4260C2;
extern VTBL_ENTRY _ZTI7S4260C2[];
extern  VTBL_ENTRY _ZTV7S4260C2[];
extern Class_Descriptor cd_S4260C5;
extern VTBL_ENTRY _ZTI7S4260C5[];
extern  VTBL_ENTRY _ZTV7S4260C5[];
static Base_Class bases_S4260C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4260C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S4260C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S4260C5,    ABISELECT(72,48), //bcp->offset
    57, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4260C1[];
extern void _ZN7S4260C1D1Ev();
extern void _ZN7S4260C1D0Ev();
extern void _ZN7S4260C33v14Ev();
extern void _ZN7S4260C33v15Ev();
extern void _ZN7S4260C33v16Ev();
extern void _ZN7S4260C33v17Ev();
extern void _ZN7S4260C33v18Ev();
extern void _ZN7S4260C33v19Ev();
extern void _ZN7S4260C33v20Ev();
extern void _ZN7S4260C33v21Ev();
extern void _ZN7S4260C33v22Ev();
extern void _ZN7S4260C33v23Ev();
extern void _ZN7S4260C33v24Ev();
extern void _ZN7S4260C33v25Ev();
extern void _ZN7S4260C33v26Ev();
extern void _ZN7S4260C33v27Ev();
extern void _ZN7S4260C33v28Ev();
extern void _ZN7S4260C33v29Ev();
extern void _ZN7S4260C33v30Ev();
extern void _ZN7S4260C33v31Ev();
extern void _ZN7S4260C33v32Ev();
extern void _ZN7S4260C33v33Ev();
extern void _ZN7S4260C33v34Ev();
extern void _ZN7S4260C33v35Ev();
extern void _ZN7S4260C33v36Ev();
extern void _ZN7S4260C33v37Ev();
extern void _ZN7S4260C33v38Ev();
extern void _ZN7S4260C33v39Ev();
extern void _ZN7S4260C23v40Ev();
extern void _ZN7S4260C23v41Ev();
extern void _ZN7S4260C23v42Ev();
extern void _ZN7S4260C23v43Ev();
extern void _ZN7S4260C23v44Ev();
extern void _ZN7S4260C23v45Ev();
extern void _ZN7S4260C23v46Ev();
extern void _ZN7S4260C23v47Ev();
extern void _ZN7S4260C23v48Ev();
extern void _ZN7S4260C23v49Ev();
extern void _ZN7S4260C23v50Ev();
extern void _ZN7S4260C23v51Ev();
extern void _ZN7S4260C23v52Ev();
extern void _ZN7S4260C23v53Ev();
extern void _ZN7S4260C12v1Ev();
extern void _ZN7S4260C12v2Ev();
extern void _ZN7S4260C12v3Ev();
extern void _ZN7S4260C12v4Ev();
extern void _ZN7S4260C12v5Ev();
extern void _ZN7S4260C12v6Ev();
extern void _ZN7S4260C12v7Ev();
extern void _ZN7S4260C12v8Ev();
extern void _ZN7S4260C12v9Ev();
extern void _ZN7S4260C13v10Ev();
extern void _ZN7S4260C13v11Ev();
extern void _ZN7S4260C13v12Ev();
extern void _ZN7S4260C13v13Ev();
extern void ABISELECT(_ZThn72_N7S4260C1D1Ev,_ZThn48_N7S4260C1D1Ev)();
extern void ABISELECT(_ZThn72_N7S4260C1D0Ev,_ZThn48_N7S4260C1D0Ev)();
extern void _ZN7S4260C53v54Ev();
extern void _ZN7S4260C53v55Ev();
static  VTBL_ENTRY vtc_S4260C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4260C1[0]),
  (VTBL_ENTRY)&_ZN7S4260C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4260C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4260C33v14Ev,
  (VTBL_ENTRY)&_ZN7S4260C33v15Ev,
  (VTBL_ENTRY)&_ZN7S4260C33v16Ev,
  (VTBL_ENTRY)&_ZN7S4260C33v17Ev,
  (VTBL_ENTRY)&_ZN7S4260C33v18Ev,
  (VTBL_ENTRY)&_ZN7S4260C33v19Ev,
  (VTBL_ENTRY)&_ZN7S4260C33v20Ev,
  (VTBL_ENTRY)&_ZN7S4260C33v21Ev,
  (VTBL_ENTRY)&_ZN7S4260C33v22Ev,
  (VTBL_ENTRY)&_ZN7S4260C33v23Ev,
  (VTBL_ENTRY)&_ZN7S4260C33v24Ev,
  (VTBL_ENTRY)&_ZN7S4260C33v25Ev,
  (VTBL_ENTRY)&_ZN7S4260C33v26Ev,
  (VTBL_ENTRY)&_ZN7S4260C33v27Ev,
  (VTBL_ENTRY)&_ZN7S4260C33v28Ev,
  (VTBL_ENTRY)&_ZN7S4260C33v29Ev,
  (VTBL_ENTRY)&_ZN7S4260C33v30Ev,
  (VTBL_ENTRY)&_ZN7S4260C33v31Ev,
  (VTBL_ENTRY)&_ZN7S4260C33v32Ev,
  (VTBL_ENTRY)&_ZN7S4260C33v33Ev,
  (VTBL_ENTRY)&_ZN7S4260C33v34Ev,
  (VTBL_ENTRY)&_ZN7S4260C33v35Ev,
  (VTBL_ENTRY)&_ZN7S4260C33v36Ev,
  (VTBL_ENTRY)&_ZN7S4260C33v37Ev,
  (VTBL_ENTRY)&_ZN7S4260C33v38Ev,
  (VTBL_ENTRY)&_ZN7S4260C33v39Ev,
  (VTBL_ENTRY)&_ZN7S4260C23v40Ev,
  (VTBL_ENTRY)&_ZN7S4260C23v41Ev,
  (VTBL_ENTRY)&_ZN7S4260C23v42Ev,
  (VTBL_ENTRY)&_ZN7S4260C23v43Ev,
  (VTBL_ENTRY)&_ZN7S4260C23v44Ev,
  (VTBL_ENTRY)&_ZN7S4260C23v45Ev,
  (VTBL_ENTRY)&_ZN7S4260C23v46Ev,
  (VTBL_ENTRY)&_ZN7S4260C23v47Ev,
  (VTBL_ENTRY)&_ZN7S4260C23v48Ev,
  (VTBL_ENTRY)&_ZN7S4260C23v49Ev,
  (VTBL_ENTRY)&_ZN7S4260C23v50Ev,
  (VTBL_ENTRY)&_ZN7S4260C23v51Ev,
  (VTBL_ENTRY)&_ZN7S4260C23v52Ev,
  (VTBL_ENTRY)&_ZN7S4260C23v53Ev,
  (VTBL_ENTRY)&_ZN7S4260C12v1Ev,
  (VTBL_ENTRY)&_ZN7S4260C12v2Ev,
  (VTBL_ENTRY)&_ZN7S4260C12v3Ev,
  (VTBL_ENTRY)&_ZN7S4260C12v4Ev,
  (VTBL_ENTRY)&_ZN7S4260C12v5Ev,
  (VTBL_ENTRY)&_ZN7S4260C12v6Ev,
  (VTBL_ENTRY)&_ZN7S4260C12v7Ev,
  (VTBL_ENTRY)&_ZN7S4260C12v8Ev,
  (VTBL_ENTRY)&_ZN7S4260C12v9Ev,
  (VTBL_ENTRY)&_ZN7S4260C13v10Ev,
  (VTBL_ENTRY)&_ZN7S4260C13v11Ev,
  (VTBL_ENTRY)&_ZN7S4260C13v12Ev,
  (VTBL_ENTRY)&_ZN7S4260C13v13Ev,
  ABISELECT(-72,-48),
  (VTBL_ENTRY)&(_ZTI7S4260C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn72_N7S4260C1D1Ev,_ZThn48_N7S4260C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn72_N7S4260C1D0Ev,_ZThn48_N7S4260C1D0Ev),
  (VTBL_ENTRY)&_ZN7S4260C53v54Ev,
  (VTBL_ENTRY)&_ZN7S4260C53v55Ev,
};
extern VTBL_ENTRY _ZTI7S4260C1[];
extern  VTBL_ENTRY _ZTV7S4260C1[];
Class_Descriptor cd_S4260C1 = {  "S4260C1", // class name
  bases_S4260C1, 3,
  &(vtc_S4260C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(312,208), // object size
  NSPAIRA(_ZTI7S4260C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S4260C1),63, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4287C3  {
  virtual  ~S4287C3(); // _ZN7S4287C3D1Ev
  virtual void  v16(); // _ZN7S4287C33v16Ev
  virtual void  v17(); // _ZN7S4287C33v17Ev
  virtual void  v18(); // _ZN7S4287C33v18Ev
  virtual void  v19(); // _ZN7S4287C33v19Ev
  virtual void  v20(); // _ZN7S4287C33v20Ev
  virtual void  v21(); // _ZN7S4287C33v21Ev
  virtual void  v22(); // _ZN7S4287C33v22Ev
  virtual void  v23(); // _ZN7S4287C33v23Ev
  virtual void  v24(); // _ZN7S4287C33v24Ev
  virtual void  v25(); // _ZN7S4287C33v25Ev
  virtual void  v26(); // _ZN7S4287C33v26Ev
  virtual void  v27(); // _ZN7S4287C33v27Ev
  virtual void  v28(); // _ZN7S4287C33v28Ev
  virtual void  v29(); // _ZN7S4287C33v29Ev
  virtual void  v30(); // _ZN7S4287C33v30Ev
  virtual void  v31(); // _ZN7S4287C33v31Ev
  virtual void  v32(); // _ZN7S4287C33v32Ev
  virtual void  v33(); // _ZN7S4287C33v33Ev
  virtual void  v34(); // _ZN7S4287C33v34Ev
  virtual void  v35(); // _ZN7S4287C33v35Ev
  virtual void  v36(); // _ZN7S4287C33v36Ev
  virtual void  v37(); // _ZN7S4287C33v37Ev
  virtual void  v38(); // _ZN7S4287C33v38Ev
  virtual void  v39(); // _ZN7S4287C33v39Ev
  virtual void  v40(); // _ZN7S4287C33v40Ev
  virtual void  v41(); // _ZN7S4287C33v41Ev
  S4287C3(); // tgen
};
//SIG(-1 S4287C3) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26}


 S4287C3 ::~S4287C3(){ note_dtor("S4287C3", this);}
void  S4287C3 ::v16(){vfunc_called(this, "_ZN7S4287C33v16Ev");}
void  S4287C3 ::v17(){vfunc_called(this, "_ZN7S4287C33v17Ev");}
void  S4287C3 ::v18(){vfunc_called(this, "_ZN7S4287C33v18Ev");}
void  S4287C3 ::v19(){vfunc_called(this, "_ZN7S4287C33v19Ev");}
void  S4287C3 ::v20(){vfunc_called(this, "_ZN7S4287C33v20Ev");}
void  S4287C3 ::v21(){vfunc_called(this, "_ZN7S4287C33v21Ev");}
void  S4287C3 ::v22(){vfunc_called(this, "_ZN7S4287C33v22Ev");}
void  S4287C3 ::v23(){vfunc_called(this, "_ZN7S4287C33v23Ev");}
void  S4287C3 ::v24(){vfunc_called(this, "_ZN7S4287C33v24Ev");}
void  S4287C3 ::v25(){vfunc_called(this, "_ZN7S4287C33v25Ev");}
void  S4287C3 ::v26(){vfunc_called(this, "_ZN7S4287C33v26Ev");}
void  S4287C3 ::v27(){vfunc_called(this, "_ZN7S4287C33v27Ev");}
void  S4287C3 ::v28(){vfunc_called(this, "_ZN7S4287C33v28Ev");}
void  S4287C3 ::v29(){vfunc_called(this, "_ZN7S4287C33v29Ev");}
void  S4287C3 ::v30(){vfunc_called(this, "_ZN7S4287C33v30Ev");}
void  S4287C3 ::v31(){vfunc_called(this, "_ZN7S4287C33v31Ev");}
void  S4287C3 ::v32(){vfunc_called(this, "_ZN7S4287C33v32Ev");}
void  S4287C3 ::v33(){vfunc_called(this, "_ZN7S4287C33v33Ev");}
void  S4287C3 ::v34(){vfunc_called(this, "_ZN7S4287C33v34Ev");}
void  S4287C3 ::v35(){vfunc_called(this, "_ZN7S4287C33v35Ev");}
void  S4287C3 ::v36(){vfunc_called(this, "_ZN7S4287C33v36Ev");}
void  S4287C3 ::v37(){vfunc_called(this, "_ZN7S4287C33v37Ev");}
void  S4287C3 ::v38(){vfunc_called(this, "_ZN7S4287C33v38Ev");}
void  S4287C3 ::v39(){vfunc_called(this, "_ZN7S4287C33v39Ev");}
void  S4287C3 ::v40(){vfunc_called(this, "_ZN7S4287C33v40Ev");}
void  S4287C3 ::v41(){vfunc_called(this, "_ZN7S4287C33v41Ev");}
S4287C3 ::S4287C3(){ note_ctor("S4287C3", this);} // tgen

static void Test_S4287C3()
{
  extern Class_Descriptor cd_S4287C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S4287C3, buf);
    S4287C3 *dp, &lv = *(dp=new (buf) S4287C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S4287C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4287C3)");
    test_class_info(&lv, &cd_S4287C3);
    dp->~S4287C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4287C3(Test_S4287C3, "S4287C3", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S4287C3C1Ev();
extern void _ZN7S4287C3D1Ev();
Name_Map name_map_S4287C3[] = {
  NSPAIR(_ZN7S4287C3C1Ev),
  NSPAIR(_ZN7S4287C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4287C3[];
extern void _ZN7S4287C3D1Ev();
extern void _ZN7S4287C3D0Ev();
extern void _ZN7S4287C33v16Ev();
extern void _ZN7S4287C33v17Ev();
extern void _ZN7S4287C33v18Ev();
extern void _ZN7S4287C33v19Ev();
extern void _ZN7S4287C33v20Ev();
extern void _ZN7S4287C33v21Ev();
extern void _ZN7S4287C33v22Ev();
extern void _ZN7S4287C33v23Ev();
extern void _ZN7S4287C33v24Ev();
extern void _ZN7S4287C33v25Ev();
extern void _ZN7S4287C33v26Ev();
extern void _ZN7S4287C33v27Ev();
extern void _ZN7S4287C33v28Ev();
extern void _ZN7S4287C33v29Ev();
extern void _ZN7S4287C33v30Ev();
extern void _ZN7S4287C33v31Ev();
extern void _ZN7S4287C33v32Ev();
extern void _ZN7S4287C33v33Ev();
extern void _ZN7S4287C33v34Ev();
extern void _ZN7S4287C33v35Ev();
extern void _ZN7S4287C33v36Ev();
extern void _ZN7S4287C33v37Ev();
extern void _ZN7S4287C33v38Ev();
extern void _ZN7S4287C33v39Ev();
extern void _ZN7S4287C33v40Ev();
extern void _ZN7S4287C33v41Ev();
static  VTBL_ENTRY vtc_S4287C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4287C3[0]),
  (VTBL_ENTRY)&_ZN7S4287C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4287C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4287C33v16Ev,
  (VTBL_ENTRY)&_ZN7S4287C33v17Ev,
  (VTBL_ENTRY)&_ZN7S4287C33v18Ev,
  (VTBL_ENTRY)&_ZN7S4287C33v19Ev,
  (VTBL_ENTRY)&_ZN7S4287C33v20Ev,
  (VTBL_ENTRY)&_ZN7S4287C33v21Ev,
  (VTBL_ENTRY)&_ZN7S4287C33v22Ev,
  (VTBL_ENTRY)&_ZN7S4287C33v23Ev,
  (VTBL_ENTRY)&_ZN7S4287C33v24Ev,
  (VTBL_ENTRY)&_ZN7S4287C33v25Ev,
  (VTBL_ENTRY)&_ZN7S4287C33v26Ev,
  (VTBL_ENTRY)&_ZN7S4287C33v27Ev,
  (VTBL_ENTRY)&_ZN7S4287C33v28Ev,
  (VTBL_ENTRY)&_ZN7S4287C33v29Ev,
  (VTBL_ENTRY)&_ZN7S4287C33v30Ev,
  (VTBL_ENTRY)&_ZN7S4287C33v31Ev,
  (VTBL_ENTRY)&_ZN7S4287C33v32Ev,
  (VTBL_ENTRY)&_ZN7S4287C33v33Ev,
  (VTBL_ENTRY)&_ZN7S4287C33v34Ev,
  (VTBL_ENTRY)&_ZN7S4287C33v35Ev,
  (VTBL_ENTRY)&_ZN7S4287C33v36Ev,
  (VTBL_ENTRY)&_ZN7S4287C33v37Ev,
  (VTBL_ENTRY)&_ZN7S4287C33v38Ev,
  (VTBL_ENTRY)&_ZN7S4287C33v39Ev,
  (VTBL_ENTRY)&_ZN7S4287C33v40Ev,
  (VTBL_ENTRY)&_ZN7S4287C33v41Ev,
};
extern VTBL_ENTRY _ZTI7S4287C3[];
extern  VTBL_ENTRY _ZTV7S4287C3[];
Class_Descriptor cd_S4287C3 = {  "S4287C3", // class name
  0,0,//no base classes
  &(vtc_S4287C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S4287C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4287C3),30, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4287C2  : S4287C3 {
  void *s4287c2f0[2];
  int s4287c2f1[4];
  ::S2423C5_nt s4287c2f2;
  void *s4287c2f3;
  char s4287c2f4;
  void *s4287c2f5;
  virtual  ~S4287C2(); // _ZN7S4287C2D1Ev
  virtual void  v42(); // _ZN7S4287C23v42Ev
  virtual void  v43(); // _ZN7S4287C23v43Ev
  virtual void  v44(); // _ZN7S4287C23v44Ev
  virtual void  v45(); // _ZN7S4287C23v45Ev
  virtual void  v46(); // _ZN7S4287C23v46Ev
  virtual void  v47(); // _ZN7S4287C23v47Ev
  virtual void  v48(); // _ZN7S4287C23v48Ev
  virtual void  v49(); // _ZN7S4287C23v49Ev
  virtual void  v50(); // _ZN7S4287C23v50Ev
  virtual void  v51(); // _ZN7S4287C23v51Ev
  virtual void  v52(); // _ZN7S4287C23v52Ev
  virtual void  v53(); // _ZN7S4287C23v53Ev
  virtual void  v54(); // _ZN7S4287C23v54Ev
  virtual void  v55(); // _ZN7S4287C23v55Ev
  S4287C2(); // tgen
};
//SIG(-1 S4287C2) C1{ BC2{ vd v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 Fp[2] Fi[4] FC3{ Fi[2]} Fp Fc Fp}


 S4287C2 ::~S4287C2(){ note_dtor("S4287C2", this);}
void  S4287C2 ::v42(){vfunc_called(this, "_ZN7S4287C23v42Ev");}
void  S4287C2 ::v43(){vfunc_called(this, "_ZN7S4287C23v43Ev");}
void  S4287C2 ::v44(){vfunc_called(this, "_ZN7S4287C23v44Ev");}
void  S4287C2 ::v45(){vfunc_called(this, "_ZN7S4287C23v45Ev");}
void  S4287C2 ::v46(){vfunc_called(this, "_ZN7S4287C23v46Ev");}
void  S4287C2 ::v47(){vfunc_called(this, "_ZN7S4287C23v47Ev");}
void  S4287C2 ::v48(){vfunc_called(this, "_ZN7S4287C23v48Ev");}
void  S4287C2 ::v49(){vfunc_called(this, "_ZN7S4287C23v49Ev");}
void  S4287C2 ::v50(){vfunc_called(this, "_ZN7S4287C23v50Ev");}
void  S4287C2 ::v51(){vfunc_called(this, "_ZN7S4287C23v51Ev");}
void  S4287C2 ::v52(){vfunc_called(this, "_ZN7S4287C23v52Ev");}
void  S4287C2 ::v53(){vfunc_called(this, "_ZN7S4287C23v53Ev");}
void  S4287C2 ::v54(){vfunc_called(this, "_ZN7S4287C23v54Ev");}
void  S4287C2 ::v55(){vfunc_called(this, "_ZN7S4287C23v55Ev");}
S4287C2 ::S4287C2(){ note_ctor("S4287C2", this);} // tgen

static void Test_S4287C2()
{
  extern Class_Descriptor cd_S4287C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,13)];
    init_test(&cd_S4287C2, buf);
    S4287C2 *dp, &lv = *(dp=new (buf) S4287C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,48), "sizeof(S4287C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4287C2)");
    check_base_class_offset(lv, (S4287C3*), 0, "S4287C2");
    check_field_offset(lv, s4287c2f0, ABISELECT(8,4), "S4287C2.s4287c2f0");
    check_field_offset(lv, s4287c2f1, ABISELECT(24,12), "S4287C2.s4287c2f1");
    check_field_offset(lv, s4287c2f2, ABISELECT(40,28), "S4287C2.s4287c2f2");
    check_field_offset(lv, s4287c2f3, ABISELECT(48,36), "S4287C2.s4287c2f3");
    check_field_offset(lv, s4287c2f4, ABISELECT(56,40), "S4287C2.s4287c2f4");
    check_field_offset(lv, s4287c2f5, ABISELECT(64,44), "S4287C2.s4287c2f5");
    test_class_info(&lv, &cd_S4287C2);
    dp->~S4287C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4287C2(Test_S4287C2, "S4287C2", ABISELECT(72,48));

#else // __cplusplus

extern void _ZN7S4287C2C1Ev();
extern void _ZN7S4287C2D1Ev();
Name_Map name_map_S4287C2[] = {
  NSPAIR(_ZN7S4287C2C1Ev),
  NSPAIR(_ZN7S4287C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4287C3;
extern VTBL_ENTRY _ZTI7S4287C3[];
extern  VTBL_ENTRY _ZTV7S4287C3[];
static Base_Class bases_S4287C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4287C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4287C2[];
extern void _ZN7S4287C2D1Ev();
extern void _ZN7S4287C2D0Ev();
extern void _ZN7S4287C33v16Ev();
extern void _ZN7S4287C33v17Ev();
extern void _ZN7S4287C33v18Ev();
extern void _ZN7S4287C33v19Ev();
extern void _ZN7S4287C33v20Ev();
extern void _ZN7S4287C33v21Ev();
extern void _ZN7S4287C33v22Ev();
extern void _ZN7S4287C33v23Ev();
extern void _ZN7S4287C33v24Ev();
extern void _ZN7S4287C33v25Ev();
extern void _ZN7S4287C33v26Ev();
extern void _ZN7S4287C33v27Ev();
extern void _ZN7S4287C33v28Ev();
extern void _ZN7S4287C33v29Ev();
extern void _ZN7S4287C33v30Ev();
extern void _ZN7S4287C33v31Ev();
extern void _ZN7S4287C33v32Ev();
extern void _ZN7S4287C33v33Ev();
extern void _ZN7S4287C33v34Ev();
extern void _ZN7S4287C33v35Ev();
extern void _ZN7S4287C33v36Ev();
extern void _ZN7S4287C33v37Ev();
extern void _ZN7S4287C33v38Ev();
extern void _ZN7S4287C33v39Ev();
extern void _ZN7S4287C33v40Ev();
extern void _ZN7S4287C33v41Ev();
extern void _ZN7S4287C23v42Ev();
extern void _ZN7S4287C23v43Ev();
extern void _ZN7S4287C23v44Ev();
extern void _ZN7S4287C23v45Ev();
extern void _ZN7S4287C23v46Ev();
extern void _ZN7S4287C23v47Ev();
extern void _ZN7S4287C23v48Ev();
extern void _ZN7S4287C23v49Ev();
extern void _ZN7S4287C23v50Ev();
extern void _ZN7S4287C23v51Ev();
extern void _ZN7S4287C23v52Ev();
extern void _ZN7S4287C23v53Ev();
extern void _ZN7S4287C23v54Ev();
extern void _ZN7S4287C23v55Ev();
static  VTBL_ENTRY vtc_S4287C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4287C2[0]),
  (VTBL_ENTRY)&_ZN7S4287C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4287C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4287C33v16Ev,
  (VTBL_ENTRY)&_ZN7S4287C33v17Ev,
  (VTBL_ENTRY)&_ZN7S4287C33v18Ev,
  (VTBL_ENTRY)&_ZN7S4287C33v19Ev,
  (VTBL_ENTRY)&_ZN7S4287C33v20Ev,
  (VTBL_ENTRY)&_ZN7S4287C33v21Ev,
  (VTBL_ENTRY)&_ZN7S4287C33v22Ev,
  (VTBL_ENTRY)&_ZN7S4287C33v23Ev,
  (VTBL_ENTRY)&_ZN7S4287C33v24Ev,
  (VTBL_ENTRY)&_ZN7S4287C33v25Ev,
  (VTBL_ENTRY)&_ZN7S4287C33v26Ev,
  (VTBL_ENTRY)&_ZN7S4287C33v27Ev,
  (VTBL_ENTRY)&_ZN7S4287C33v28Ev,
  (VTBL_ENTRY)&_ZN7S4287C33v29Ev,
  (VTBL_ENTRY)&_ZN7S4287C33v30Ev,
  (VTBL_ENTRY)&_ZN7S4287C33v31Ev,
  (VTBL_ENTRY)&_ZN7S4287C33v32Ev,
  (VTBL_ENTRY)&_ZN7S4287C33v33Ev,
  (VTBL_ENTRY)&_ZN7S4287C33v34Ev,
  (VTBL_ENTRY)&_ZN7S4287C33v35Ev,
  (VTBL_ENTRY)&_ZN7S4287C33v36Ev,
  (VTBL_ENTRY)&_ZN7S4287C33v37Ev,
  (VTBL_ENTRY)&_ZN7S4287C33v38Ev,
  (VTBL_ENTRY)&_ZN7S4287C33v39Ev,
  (VTBL_ENTRY)&_ZN7S4287C33v40Ev,
  (VTBL_ENTRY)&_ZN7S4287C33v41Ev,
  (VTBL_ENTRY)&_ZN7S4287C23v42Ev,
  (VTBL_ENTRY)&_ZN7S4287C23v43Ev,
  (VTBL_ENTRY)&_ZN7S4287C23v44Ev,
  (VTBL_ENTRY)&_ZN7S4287C23v45Ev,
  (VTBL_ENTRY)&_ZN7S4287C23v46Ev,
  (VTBL_ENTRY)&_ZN7S4287C23v47Ev,
  (VTBL_ENTRY)&_ZN7S4287C23v48Ev,
  (VTBL_ENTRY)&_ZN7S4287C23v49Ev,
  (VTBL_ENTRY)&_ZN7S4287C23v50Ev,
  (VTBL_ENTRY)&_ZN7S4287C23v51Ev,
  (VTBL_ENTRY)&_ZN7S4287C23v52Ev,
  (VTBL_ENTRY)&_ZN7S4287C23v53Ev,
  (VTBL_ENTRY)&_ZN7S4287C23v54Ev,
  (VTBL_ENTRY)&_ZN7S4287C23v55Ev,
};
extern VTBL_ENTRY _ZTI7S4287C2[];
extern  VTBL_ENTRY _ZTV7S4287C2[];
Class_Descriptor cd_S4287C2 = {  "S4287C2", // class name
  bases_S4287C2, 1,
  &(vtc_S4287C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,48), // object size
  NSPAIRA(_ZTI7S4287C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4287C2),44, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4287C5_nt  {
  int s4287c5f0;
  void  mf4287c5(); // _ZN10S4287C5_nt8mf4287c5Ev
  virtual  ~S4287C5_nt(); // _ZN10S4287C5_ntD1Ev
  S4287C5_nt(); // tgen
};
//SIG(-1 S4287C5_nt) C1{ vd m Fi}


void  S4287C5_nt ::mf4287c5(){}
 S4287C5_nt ::~S4287C5_nt(){ note_dtor("S4287C5_nt", this);}
S4287C5_nt ::S4287C5_nt(){ note_ctor("S4287C5_nt", this);} // tgen

//skip512 S4287C5_nt

#else // __cplusplus

extern void _ZN10S4287C5_ntC1Ev();
extern void _ZN10S4287C5_ntD1Ev();
Name_Map name_map_S4287C5_nt[] = {
  NSPAIR(_ZN10S4287C5_ntC1Ev),
  NSPAIR(_ZN10S4287C5_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S4287C5_nt[];
extern void _ZN10S4287C5_ntD1Ev();
extern void _ZN10S4287C5_ntD0Ev();
static  VTBL_ENTRY vtc_S4287C5_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S4287C5_nt[0]),
  (VTBL_ENTRY)&_ZN10S4287C5_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S4287C5_ntD0Ev,
};
extern VTBL_ENTRY _ZTI10S4287C5_nt[];
VTBL_ENTRY *P__ZTI10S4287C5_nt = _ZTI10S4287C5_nt; 
extern  VTBL_ENTRY _ZTV10S4287C5_nt[];
Class_Descriptor cd_S4287C5_nt = {  "S4287C5_nt", // class name
  0,0,//no base classes
  &(vtc_S4287C5_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI10S4287C5_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S4287C5_nt),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4287C6  {
  virtual  ~S4287C6(); // _ZN7S4287C6D1Ev
  virtual void  v56(); // _ZN7S4287C63v56Ev
  virtual void  v57(); // _ZN7S4287C63v57Ev
  virtual void  v58(); // _ZN7S4287C63v58Ev
  virtual void  v59(); // _ZN7S4287C63v59Ev
  virtual void  v60(); // _ZN7S4287C63v60Ev
  virtual void  v61(); // _ZN7S4287C63v61Ev
  virtual void  v62(); // _ZN7S4287C63v62Ev
  S4287C6(); // tgen
};
//SIG(-1 S4287C6) C1{ vd v1 v2 v3 v4 v5 v6 v7}


 S4287C6 ::~S4287C6(){ note_dtor("S4287C6", this);}
void  S4287C6 ::v56(){vfunc_called(this, "_ZN7S4287C63v56Ev");}
void  S4287C6 ::v57(){vfunc_called(this, "_ZN7S4287C63v57Ev");}
void  S4287C6 ::v58(){vfunc_called(this, "_ZN7S4287C63v58Ev");}
void  S4287C6 ::v59(){vfunc_called(this, "_ZN7S4287C63v59Ev");}
void  S4287C6 ::v60(){vfunc_called(this, "_ZN7S4287C63v60Ev");}
void  S4287C6 ::v61(){vfunc_called(this, "_ZN7S4287C63v61Ev");}
void  S4287C6 ::v62(){vfunc_called(this, "_ZN7S4287C63v62Ev");}
S4287C6 ::S4287C6(){ note_ctor("S4287C6", this);} // tgen

static void Test_S4287C6()
{
  extern Class_Descriptor cd_S4287C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S4287C6, buf);
    S4287C6 *dp, &lv = *(dp=new (buf) S4287C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S4287C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4287C6)");
    test_class_info(&lv, &cd_S4287C6);
    dp->~S4287C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4287C6(Test_S4287C6, "S4287C6", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S4287C6C1Ev();
extern void _ZN7S4287C6D1Ev();
Name_Map name_map_S4287C6[] = {
  NSPAIR(_ZN7S4287C6C1Ev),
  NSPAIR(_ZN7S4287C6D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4287C6[];
extern void _ZN7S4287C6D1Ev();
extern void _ZN7S4287C6D0Ev();
extern void _ZN7S4287C63v56Ev();
extern void _ZN7S4287C63v57Ev();
extern void _ZN7S4287C63v58Ev();
extern void _ZN7S4287C63v59Ev();
extern void _ZN7S4287C63v60Ev();
extern void _ZN7S4287C63v61Ev();
extern void _ZN7S4287C63v62Ev();
static  VTBL_ENTRY vtc_S4287C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4287C6[0]),
  (VTBL_ENTRY)&_ZN7S4287C6D1Ev,
  (VTBL_ENTRY)&_ZN7S4287C6D0Ev,
  (VTBL_ENTRY)&_ZN7S4287C63v56Ev,
  (VTBL_ENTRY)&_ZN7S4287C63v57Ev,
  (VTBL_ENTRY)&_ZN7S4287C63v58Ev,
  (VTBL_ENTRY)&_ZN7S4287C63v59Ev,
  (VTBL_ENTRY)&_ZN7S4287C63v60Ev,
  (VTBL_ENTRY)&_ZN7S4287C63v61Ev,
  (VTBL_ENTRY)&_ZN7S4287C63v62Ev,
};
extern VTBL_ENTRY _ZTI7S4287C6[];
extern  VTBL_ENTRY _ZTV7S4287C6[];
Class_Descriptor cd_S4287C6 = {  "S4287C6", // class name
  0,0,//no base classes
  &(vtc_S4287C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S4287C6),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4287C6),11, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4287C1  : S4287C2 , S4287C5_nt , S4287C6 {
  __tsi64 s4287c1f0[2];
  long s4287c1f1[2];
  char s4287c1f2;
  long s4287c1f3[2];
  void *s4287c1f4[6];
  long s4287c1f5;
  virtual  ~S4287C1(); // _ZN7S4287C1D1Ev
  virtual void  v1(); // _ZN7S4287C12v1Ev
  virtual void  v2(); // _ZN7S4287C12v2Ev
  virtual void  v3(); // _ZN7S4287C12v3Ev
  virtual void  v4(); // _ZN7S4287C12v4Ev
  virtual void  v5(); // _ZN7S4287C12v5Ev
  virtual void  v6(); // _ZN7S4287C12v6Ev
  virtual void  v7(); // _ZN7S4287C12v7Ev
  virtual void  v8(); // _ZN7S4287C12v8Ev
  virtual void  v9(); // _ZN7S4287C12v9Ev
  virtual void  v10(); // _ZN7S4287C13v10Ev
  virtual void  v11(); // _ZN7S4287C13v11Ev
  virtual void  v12(); // _ZN7S4287C13v12Ev
  virtual void  v13(); // _ZN7S4287C13v13Ev
  virtual void  v14(); // _ZN7S4287C13v14Ev
  virtual void  v15(); // _ZN7S4287C13v15Ev
  S4287C1(); // tgen
};
//SIG(1 S4287C1) C1{ BC2{ BC3{ vd v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41} vd v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 Fp[2] Fi[4] FC4{ Fi[2]} Fp Fc Fp} BC5{ vd m Fi} BC6{ vd v56 v57 v58 v59 v60 v61 v62} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 FL[2] Fl[2] Fc Fl[2] Fp[6] Fl}


 S4287C1 ::~S4287C1(){ note_dtor("S4287C1", this);}
void  S4287C1 ::v1(){vfunc_called(this, "_ZN7S4287C12v1Ev");}
void  S4287C1 ::v2(){vfunc_called(this, "_ZN7S4287C12v2Ev");}
void  S4287C1 ::v3(){vfunc_called(this, "_ZN7S4287C12v3Ev");}
void  S4287C1 ::v4(){vfunc_called(this, "_ZN7S4287C12v4Ev");}
void  S4287C1 ::v5(){vfunc_called(this, "_ZN7S4287C12v5Ev");}
void  S4287C1 ::v6(){vfunc_called(this, "_ZN7S4287C12v6Ev");}
void  S4287C1 ::v7(){vfunc_called(this, "_ZN7S4287C12v7Ev");}
void  S4287C1 ::v8(){vfunc_called(this, "_ZN7S4287C12v8Ev");}
void  S4287C1 ::v9(){vfunc_called(this, "_ZN7S4287C12v9Ev");}
void  S4287C1 ::v10(){vfunc_called(this, "_ZN7S4287C13v10Ev");}
void  S4287C1 ::v11(){vfunc_called(this, "_ZN7S4287C13v11Ev");}
void  S4287C1 ::v12(){vfunc_called(this, "_ZN7S4287C13v12Ev");}
void  S4287C1 ::v13(){vfunc_called(this, "_ZN7S4287C13v13Ev");}
void  S4287C1 ::v14(){vfunc_called(this, "_ZN7S4287C13v14Ev");}
void  S4287C1 ::v15(){vfunc_called(this, "_ZN7S4287C13v15Ev");}
S4287C1 ::S4287C1(){ note_ctor("S4287C1", this);} // tgen

static void Test_S4287C1()
{
  extern Class_Descriptor cd_S4287C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(27,32)];
    init_test(&cd_S4287C1, buf);
    S4287C1 *dp, &lv = *(dp=new (buf) S4287C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(208,124), "sizeof(S4287C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4287C1)");
    check_base_class_offset(lv, (S4287C3*)(S4287C2*), 0, "S4287C1");
    check_base_class_offset(lv, (S4287C2*), 0, "S4287C1");
    check_base_class_offset(lv, (S4287C5_nt*), ABISELECT(72,48), "S4287C1");
    check_base_class_offset(lv, (S4287C6*), ABISELECT(88,56), "S4287C1");
    check_field_offset(lv, s4287c1f0, ABISELECT(96,60), "S4287C1.s4287c1f0");
    check_field_offset(lv, s4287c1f1, ABISELECT(112,76), "S4287C1.s4287c1f1");
    check_field_offset(lv, s4287c1f2, ABISELECT(128,84), "S4287C1.s4287c1f2");
    check_field_offset(lv, s4287c1f3, ABISELECT(136,88), "S4287C1.s4287c1f3");
    check_field_offset(lv, s4287c1f4, ABISELECT(152,96), "S4287C1.s4287c1f4");
    check_field_offset(lv, s4287c1f5, ABISELECT(200,120), "S4287C1.s4287c1f5");
    test_class_info(&lv, &cd_S4287C1);
    dp->~S4287C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4287C1(Test_S4287C1, "S4287C1", ABISELECT(208,124));

#else // __cplusplus

extern void _ZN7S4287C1C1Ev();
extern void _ZN7S4287C1D1Ev();
Name_Map name_map_S4287C1[] = {
  NSPAIR(_ZN7S4287C1C1Ev),
  NSPAIR(_ZN7S4287C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4287C3;
extern VTBL_ENTRY _ZTI7S4287C3[];
extern  VTBL_ENTRY _ZTV7S4287C3[];
extern Class_Descriptor cd_S4287C2;
extern VTBL_ENTRY _ZTI7S4287C2[];
extern  VTBL_ENTRY _ZTV7S4287C2[];
extern Class_Descriptor cd_S4287C5_nt;
extern VTBL_ENTRY _ZTI10S4287C5_nt[];
extern  VTBL_ENTRY _ZTV10S4287C5_nt[];
extern Class_Descriptor cd_S4287C6;
extern VTBL_ENTRY _ZTI7S4287C6[];
extern  VTBL_ENTRY _ZTV7S4287C6[];
static Base_Class bases_S4287C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4287C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S4287C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S4287C5_nt,    ABISELECT(72,48), //bcp->offset
    59, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S4287C6,    ABISELECT(88,56), //bcp->offset
    63, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4287C1[];
extern void _ZN7S4287C1D1Ev();
extern void _ZN7S4287C1D0Ev();
extern void _ZN7S4287C33v16Ev();
extern void _ZN7S4287C33v17Ev();
extern void _ZN7S4287C33v18Ev();
extern void _ZN7S4287C33v19Ev();
extern void _ZN7S4287C33v20Ev();
extern void _ZN7S4287C33v21Ev();
extern void _ZN7S4287C33v22Ev();
extern void _ZN7S4287C33v23Ev();
extern void _ZN7S4287C33v24Ev();
extern void _ZN7S4287C33v25Ev();
extern void _ZN7S4287C33v26Ev();
extern void _ZN7S4287C33v27Ev();
extern void _ZN7S4287C33v28Ev();
extern void _ZN7S4287C33v29Ev();
extern void _ZN7S4287C33v30Ev();
extern void _ZN7S4287C33v31Ev();
extern void _ZN7S4287C33v32Ev();
extern void _ZN7S4287C33v33Ev();
extern void _ZN7S4287C33v34Ev();
extern void _ZN7S4287C33v35Ev();
extern void _ZN7S4287C33v36Ev();
extern void _ZN7S4287C33v37Ev();
extern void _ZN7S4287C33v38Ev();
extern void _ZN7S4287C33v39Ev();
extern void _ZN7S4287C33v40Ev();
extern void _ZN7S4287C33v41Ev();
extern void _ZN7S4287C23v42Ev();
extern void _ZN7S4287C23v43Ev();
extern void _ZN7S4287C23v44Ev();
extern void _ZN7S4287C23v45Ev();
extern void _ZN7S4287C23v46Ev();
extern void _ZN7S4287C23v47Ev();
extern void _ZN7S4287C23v48Ev();
extern void _ZN7S4287C23v49Ev();
extern void _ZN7S4287C23v50Ev();
extern void _ZN7S4287C23v51Ev();
extern void _ZN7S4287C23v52Ev();
extern void _ZN7S4287C23v53Ev();
extern void _ZN7S4287C23v54Ev();
extern void _ZN7S4287C23v55Ev();
extern void _ZN7S4287C12v1Ev();
extern void _ZN7S4287C12v2Ev();
extern void _ZN7S4287C12v3Ev();
extern void _ZN7S4287C12v4Ev();
extern void _ZN7S4287C12v5Ev();
extern void _ZN7S4287C12v6Ev();
extern void _ZN7S4287C12v7Ev();
extern void _ZN7S4287C12v8Ev();
extern void _ZN7S4287C12v9Ev();
extern void _ZN7S4287C13v10Ev();
extern void _ZN7S4287C13v11Ev();
extern void _ZN7S4287C13v12Ev();
extern void _ZN7S4287C13v13Ev();
extern void _ZN7S4287C13v14Ev();
extern void _ZN7S4287C13v15Ev();
extern void ABISELECT(_ZThn72_N7S4287C1D1Ev,_ZThn48_N7S4287C1D1Ev)();
extern void ABISELECT(_ZThn72_N7S4287C1D0Ev,_ZThn48_N7S4287C1D0Ev)();
extern void ABISELECT(_ZThn88_N7S4287C1D1Ev,_ZThn56_N7S4287C1D1Ev)();
extern void ABISELECT(_ZThn88_N7S4287C1D0Ev,_ZThn56_N7S4287C1D0Ev)();
extern void _ZN7S4287C63v56Ev();
extern void _ZN7S4287C63v57Ev();
extern void _ZN7S4287C63v58Ev();
extern void _ZN7S4287C63v59Ev();
extern void _ZN7S4287C63v60Ev();
extern void _ZN7S4287C63v61Ev();
extern void _ZN7S4287C63v62Ev();
static  VTBL_ENTRY vtc_S4287C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4287C1[0]),
  (VTBL_ENTRY)&_ZN7S4287C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4287C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4287C33v16Ev,
  (VTBL_ENTRY)&_ZN7S4287C33v17Ev,
  (VTBL_ENTRY)&_ZN7S4287C33v18Ev,
  (VTBL_ENTRY)&_ZN7S4287C33v19Ev,
  (VTBL_ENTRY)&_ZN7S4287C33v20Ev,
  (VTBL_ENTRY)&_ZN7S4287C33v21Ev,
  (VTBL_ENTRY)&_ZN7S4287C33v22Ev,
  (VTBL_ENTRY)&_ZN7S4287C33v23Ev,
  (VTBL_ENTRY)&_ZN7S4287C33v24Ev,
  (VTBL_ENTRY)&_ZN7S4287C33v25Ev,
  (VTBL_ENTRY)&_ZN7S4287C33v26Ev,
  (VTBL_ENTRY)&_ZN7S4287C33v27Ev,
  (VTBL_ENTRY)&_ZN7S4287C33v28Ev,
  (VTBL_ENTRY)&_ZN7S4287C33v29Ev,
  (VTBL_ENTRY)&_ZN7S4287C33v30Ev,
  (VTBL_ENTRY)&_ZN7S4287C33v31Ev,
  (VTBL_ENTRY)&_ZN7S4287C33v32Ev,
  (VTBL_ENTRY)&_ZN7S4287C33v33Ev,
  (VTBL_ENTRY)&_ZN7S4287C33v34Ev,
  (VTBL_ENTRY)&_ZN7S4287C33v35Ev,
  (VTBL_ENTRY)&_ZN7S4287C33v36Ev,
  (VTBL_ENTRY)&_ZN7S4287C33v37Ev,
  (VTBL_ENTRY)&_ZN7S4287C33v38Ev,
  (VTBL_ENTRY)&_ZN7S4287C33v39Ev,
  (VTBL_ENTRY)&_ZN7S4287C33v40Ev,
  (VTBL_ENTRY)&_ZN7S4287C33v41Ev,
  (VTBL_ENTRY)&_ZN7S4287C23v42Ev,
  (VTBL_ENTRY)&_ZN7S4287C23v43Ev,
  (VTBL_ENTRY)&_ZN7S4287C23v44Ev,
  (VTBL_ENTRY)&_ZN7S4287C23v45Ev,
  (VTBL_ENTRY)&_ZN7S4287C23v46Ev,
  (VTBL_ENTRY)&_ZN7S4287C23v47Ev,
  (VTBL_ENTRY)&_ZN7S4287C23v48Ev,
  (VTBL_ENTRY)&_ZN7S4287C23v49Ev,
  (VTBL_ENTRY)&_ZN7S4287C23v50Ev,
  (VTBL_ENTRY)&_ZN7S4287C23v51Ev,
  (VTBL_ENTRY)&_ZN7S4287C23v52Ev,
  (VTBL_ENTRY)&_ZN7S4287C23v53Ev,
  (VTBL_ENTRY)&_ZN7S4287C23v54Ev,
  (VTBL_ENTRY)&_ZN7S4287C23v55Ev,
  (VTBL_ENTRY)&_ZN7S4287C12v1Ev,
  (VTBL_ENTRY)&_ZN7S4287C12v2Ev,
  (VTBL_ENTRY)&_ZN7S4287C12v3Ev,
  (VTBL_ENTRY)&_ZN7S4287C12v4Ev,
  (VTBL_ENTRY)&_ZN7S4287C12v5Ev,
  (VTBL_ENTRY)&_ZN7S4287C12v6Ev,
  (VTBL_ENTRY)&_ZN7S4287C12v7Ev,
  (VTBL_ENTRY)&_ZN7S4287C12v8Ev,
  (VTBL_ENTRY)&_ZN7S4287C12v9Ev,
  (VTBL_ENTRY)&_ZN7S4287C13v10Ev,
  (VTBL_ENTRY)&_ZN7S4287C13v11Ev,
  (VTBL_ENTRY)&_ZN7S4287C13v12Ev,
  (VTBL_ENTRY)&_ZN7S4287C13v13Ev,
  (VTBL_ENTRY)&_ZN7S4287C13v14Ev,
  (VTBL_ENTRY)&_ZN7S4287C13v15Ev,
  ABISELECT(-72,-48),
  (VTBL_ENTRY)&(_ZTI7S4287C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn72_N7S4287C1D1Ev,_ZThn48_N7S4287C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn72_N7S4287C1D0Ev,_ZThn48_N7S4287C1D0Ev),
  ABISELECT(-88,-56),
  (VTBL_ENTRY)&(_ZTI7S4287C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn88_N7S4287C1D1Ev,_ZThn56_N7S4287C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn88_N7S4287C1D0Ev,_ZThn56_N7S4287C1D0Ev),
  (VTBL_ENTRY)&_ZN7S4287C63v56Ev,
  (VTBL_ENTRY)&_ZN7S4287C63v57Ev,
  (VTBL_ENTRY)&_ZN7S4287C63v58Ev,
  (VTBL_ENTRY)&_ZN7S4287C63v59Ev,
  (VTBL_ENTRY)&_ZN7S4287C63v60Ev,
  (VTBL_ENTRY)&_ZN7S4287C63v61Ev,
  (VTBL_ENTRY)&_ZN7S4287C63v62Ev,
};
extern VTBL_ENTRY _ZTI7S4287C1[];
extern  VTBL_ENTRY _ZTV7S4287C1[];
Class_Descriptor cd_S4287C1 = {  "S4287C1", // class name
  bases_S4287C1, 4,
  &(vtc_S4287C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(208,124), // object size
  NSPAIRA(_ZTI7S4287C1),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S4287C1),74, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  4, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4263C3  {
  virtual  ~S4263C3(); // _ZN7S4263C3D1Ev
  virtual void  v14(); // _ZN7S4263C33v14Ev
  virtual void  v15(); // _ZN7S4263C33v15Ev
  virtual void  v16(); // _ZN7S4263C33v16Ev
  virtual void  v17(); // _ZN7S4263C33v17Ev
  virtual void  v18(); // _ZN7S4263C33v18Ev
  virtual void  v19(); // _ZN7S4263C33v19Ev
  virtual void  v20(); // _ZN7S4263C33v20Ev
  virtual void  v21(); // _ZN7S4263C33v21Ev
  virtual void  v22(); // _ZN7S4263C33v22Ev
  virtual void  v23(); // _ZN7S4263C33v23Ev
  virtual void  v24(); // _ZN7S4263C33v24Ev
  virtual void  v25(); // _ZN7S4263C33v25Ev
  virtual void  v26(); // _ZN7S4263C33v26Ev
  virtual void  v27(); // _ZN7S4263C33v27Ev
  virtual void  v28(); // _ZN7S4263C33v28Ev
  virtual void  v29(); // _ZN7S4263C33v29Ev
  virtual void  v30(); // _ZN7S4263C33v30Ev
  virtual void  v31(); // _ZN7S4263C33v31Ev
  virtual void  v32(); // _ZN7S4263C33v32Ev
  virtual void  v33(); // _ZN7S4263C33v33Ev
  virtual void  v34(); // _ZN7S4263C33v34Ev
  virtual void  v35(); // _ZN7S4263C33v35Ev
  virtual void  v36(); // _ZN7S4263C33v36Ev
  virtual void  v37(); // _ZN7S4263C33v37Ev
  virtual void  v38(); // _ZN7S4263C33v38Ev
  virtual void  v39(); // _ZN7S4263C33v39Ev
  S4263C3(); // tgen
};
//SIG(-1 S4263C3) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26}


 S4263C3 ::~S4263C3(){ note_dtor("S4263C3", this);}
void  S4263C3 ::v14(){vfunc_called(this, "_ZN7S4263C33v14Ev");}
void  S4263C3 ::v15(){vfunc_called(this, "_ZN7S4263C33v15Ev");}
void  S4263C3 ::v16(){vfunc_called(this, "_ZN7S4263C33v16Ev");}
void  S4263C3 ::v17(){vfunc_called(this, "_ZN7S4263C33v17Ev");}
void  S4263C3 ::v18(){vfunc_called(this, "_ZN7S4263C33v18Ev");}
void  S4263C3 ::v19(){vfunc_called(this, "_ZN7S4263C33v19Ev");}
void  S4263C3 ::v20(){vfunc_called(this, "_ZN7S4263C33v20Ev");}
void  S4263C3 ::v21(){vfunc_called(this, "_ZN7S4263C33v21Ev");}
void  S4263C3 ::v22(){vfunc_called(this, "_ZN7S4263C33v22Ev");}
void  S4263C3 ::v23(){vfunc_called(this, "_ZN7S4263C33v23Ev");}
void  S4263C3 ::v24(){vfunc_called(this, "_ZN7S4263C33v24Ev");}
void  S4263C3 ::v25(){vfunc_called(this, "_ZN7S4263C33v25Ev");}
void  S4263C3 ::v26(){vfunc_called(this, "_ZN7S4263C33v26Ev");}
void  S4263C3 ::v27(){vfunc_called(this, "_ZN7S4263C33v27Ev");}
void  S4263C3 ::v28(){vfunc_called(this, "_ZN7S4263C33v28Ev");}
void  S4263C3 ::v29(){vfunc_called(this, "_ZN7S4263C33v29Ev");}
void  S4263C3 ::v30(){vfunc_called(this, "_ZN7S4263C33v30Ev");}
void  S4263C3 ::v31(){vfunc_called(this, "_ZN7S4263C33v31Ev");}
void  S4263C3 ::v32(){vfunc_called(this, "_ZN7S4263C33v32Ev");}
void  S4263C3 ::v33(){vfunc_called(this, "_ZN7S4263C33v33Ev");}
void  S4263C3 ::v34(){vfunc_called(this, "_ZN7S4263C33v34Ev");}
void  S4263C3 ::v35(){vfunc_called(this, "_ZN7S4263C33v35Ev");}
void  S4263C3 ::v36(){vfunc_called(this, "_ZN7S4263C33v36Ev");}
void  S4263C3 ::v37(){vfunc_called(this, "_ZN7S4263C33v37Ev");}
void  S4263C3 ::v38(){vfunc_called(this, "_ZN7S4263C33v38Ev");}
void  S4263C3 ::v39(){vfunc_called(this, "_ZN7S4263C33v39Ev");}
S4263C3 ::S4263C3(){ note_ctor("S4263C3", this);} // tgen

static void Test_S4263C3()
{
  extern Class_Descriptor cd_S4263C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S4263C3, buf);
    S4263C3 *dp, &lv = *(dp=new (buf) S4263C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S4263C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4263C3)");
    test_class_info(&lv, &cd_S4263C3);
    dp->~S4263C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4263C3(Test_S4263C3, "S4263C3", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S4263C3C1Ev();
extern void _ZN7S4263C3D1Ev();
Name_Map name_map_S4263C3[] = {
  NSPAIR(_ZN7S4263C3C1Ev),
  NSPAIR(_ZN7S4263C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4263C3[];
extern void _ZN7S4263C3D1Ev();
extern void _ZN7S4263C3D0Ev();
extern void _ZN7S4263C33v14Ev();
extern void _ZN7S4263C33v15Ev();
extern void _ZN7S4263C33v16Ev();
extern void _ZN7S4263C33v17Ev();
extern void _ZN7S4263C33v18Ev();
extern void _ZN7S4263C33v19Ev();
extern void _ZN7S4263C33v20Ev();
extern void _ZN7S4263C33v21Ev();
extern void _ZN7S4263C33v22Ev();
extern void _ZN7S4263C33v23Ev();
extern void _ZN7S4263C33v24Ev();
extern void _ZN7S4263C33v25Ev();
extern void _ZN7S4263C33v26Ev();
extern void _ZN7S4263C33v27Ev();
extern void _ZN7S4263C33v28Ev();
extern void _ZN7S4263C33v29Ev();
extern void _ZN7S4263C33v30Ev();
extern void _ZN7S4263C33v31Ev();
extern void _ZN7S4263C33v32Ev();
extern void _ZN7S4263C33v33Ev();
extern void _ZN7S4263C33v34Ev();
extern void _ZN7S4263C33v35Ev();
extern void _ZN7S4263C33v36Ev();
extern void _ZN7S4263C33v37Ev();
extern void _ZN7S4263C33v38Ev();
extern void _ZN7S4263C33v39Ev();
static  VTBL_ENTRY vtc_S4263C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4263C3[0]),
  (VTBL_ENTRY)&_ZN7S4263C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4263C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4263C33v14Ev,
  (VTBL_ENTRY)&_ZN7S4263C33v15Ev,
  (VTBL_ENTRY)&_ZN7S4263C33v16Ev,
  (VTBL_ENTRY)&_ZN7S4263C33v17Ev,
  (VTBL_ENTRY)&_ZN7S4263C33v18Ev,
  (VTBL_ENTRY)&_ZN7S4263C33v19Ev,
  (VTBL_ENTRY)&_ZN7S4263C33v20Ev,
  (VTBL_ENTRY)&_ZN7S4263C33v21Ev,
  (VTBL_ENTRY)&_ZN7S4263C33v22Ev,
  (VTBL_ENTRY)&_ZN7S4263C33v23Ev,
  (VTBL_ENTRY)&_ZN7S4263C33v24Ev,
  (VTBL_ENTRY)&_ZN7S4263C33v25Ev,
  (VTBL_ENTRY)&_ZN7S4263C33v26Ev,
  (VTBL_ENTRY)&_ZN7S4263C33v27Ev,
  (VTBL_ENTRY)&_ZN7S4263C33v28Ev,
  (VTBL_ENTRY)&_ZN7S4263C33v29Ev,
  (VTBL_ENTRY)&_ZN7S4263C33v30Ev,
  (VTBL_ENTRY)&_ZN7S4263C33v31Ev,
  (VTBL_ENTRY)&_ZN7S4263C33v32Ev,
  (VTBL_ENTRY)&_ZN7S4263C33v33Ev,
  (VTBL_ENTRY)&_ZN7S4263C33v34Ev,
  (VTBL_ENTRY)&_ZN7S4263C33v35Ev,
  (VTBL_ENTRY)&_ZN7S4263C33v36Ev,
  (VTBL_ENTRY)&_ZN7S4263C33v37Ev,
  (VTBL_ENTRY)&_ZN7S4263C33v38Ev,
  (VTBL_ENTRY)&_ZN7S4263C33v39Ev,
};
extern VTBL_ENTRY _ZTI7S4263C3[];
extern  VTBL_ENTRY _ZTV7S4263C3[];
Class_Descriptor cd_S4263C3 = {  "S4263C3", // class name
  0,0,//no base classes
  &(vtc_S4263C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S4263C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4263C3),30, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4263C2  : S4263C3 {
  void *s4263c2f0[2];
  int s4263c2f1[4];
  ::S2423C5_nt s4263c2f2;
  void *s4263c2f3;
  char s4263c2f4;
  void *s4263c2f5;
  virtual  ~S4263C2(); // _ZN7S4263C2D1Ev
  virtual void  v40(); // _ZN7S4263C23v40Ev
  virtual void  v41(); // _ZN7S4263C23v41Ev
  virtual void  v42(); // _ZN7S4263C23v42Ev
  virtual void  v43(); // _ZN7S4263C23v43Ev
  virtual void  v44(); // _ZN7S4263C23v44Ev
  virtual void  v45(); // _ZN7S4263C23v45Ev
  virtual void  v46(); // _ZN7S4263C23v46Ev
  virtual void  v47(); // _ZN7S4263C23v47Ev
  virtual void  v48(); // _ZN7S4263C23v48Ev
  virtual void  v49(); // _ZN7S4263C23v49Ev
  virtual void  v50(); // _ZN7S4263C23v50Ev
  virtual void  v51(); // _ZN7S4263C23v51Ev
  virtual void  v52(); // _ZN7S4263C23v52Ev
  virtual void  v53(); // _ZN7S4263C23v53Ev
  S4263C2(); // tgen
};
//SIG(-1 S4263C2) C1{ BC2{ vd v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 Fp[2] Fi[4] FC3{ Fi[2]} Fp Fc Fp}


 S4263C2 ::~S4263C2(){ note_dtor("S4263C2", this);}
void  S4263C2 ::v40(){vfunc_called(this, "_ZN7S4263C23v40Ev");}
void  S4263C2 ::v41(){vfunc_called(this, "_ZN7S4263C23v41Ev");}
void  S4263C2 ::v42(){vfunc_called(this, "_ZN7S4263C23v42Ev");}
void  S4263C2 ::v43(){vfunc_called(this, "_ZN7S4263C23v43Ev");}
void  S4263C2 ::v44(){vfunc_called(this, "_ZN7S4263C23v44Ev");}
void  S4263C2 ::v45(){vfunc_called(this, "_ZN7S4263C23v45Ev");}
void  S4263C2 ::v46(){vfunc_called(this, "_ZN7S4263C23v46Ev");}
void  S4263C2 ::v47(){vfunc_called(this, "_ZN7S4263C23v47Ev");}
void  S4263C2 ::v48(){vfunc_called(this, "_ZN7S4263C23v48Ev");}
void  S4263C2 ::v49(){vfunc_called(this, "_ZN7S4263C23v49Ev");}
void  S4263C2 ::v50(){vfunc_called(this, "_ZN7S4263C23v50Ev");}
void  S4263C2 ::v51(){vfunc_called(this, "_ZN7S4263C23v51Ev");}
void  S4263C2 ::v52(){vfunc_called(this, "_ZN7S4263C23v52Ev");}
void  S4263C2 ::v53(){vfunc_called(this, "_ZN7S4263C23v53Ev");}
S4263C2 ::S4263C2(){ note_ctor("S4263C2", this);} // tgen

static void Test_S4263C2()
{
  extern Class_Descriptor cd_S4263C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,13)];
    init_test(&cd_S4263C2, buf);
    S4263C2 *dp, &lv = *(dp=new (buf) S4263C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,48), "sizeof(S4263C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4263C2)");
    check_base_class_offset(lv, (S4263C3*), 0, "S4263C2");
    check_field_offset(lv, s4263c2f0, ABISELECT(8,4), "S4263C2.s4263c2f0");
    check_field_offset(lv, s4263c2f1, ABISELECT(24,12), "S4263C2.s4263c2f1");
    check_field_offset(lv, s4263c2f2, ABISELECT(40,28), "S4263C2.s4263c2f2");
    check_field_offset(lv, s4263c2f3, ABISELECT(48,36), "S4263C2.s4263c2f3");
    check_field_offset(lv, s4263c2f4, ABISELECT(56,40), "S4263C2.s4263c2f4");
    check_field_offset(lv, s4263c2f5, ABISELECT(64,44), "S4263C2.s4263c2f5");
    test_class_info(&lv, &cd_S4263C2);
    dp->~S4263C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4263C2(Test_S4263C2, "S4263C2", ABISELECT(72,48));

#else // __cplusplus

extern void _ZN7S4263C2C1Ev();
extern void _ZN7S4263C2D1Ev();
Name_Map name_map_S4263C2[] = {
  NSPAIR(_ZN7S4263C2C1Ev),
  NSPAIR(_ZN7S4263C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4263C3;
extern VTBL_ENTRY _ZTI7S4263C3[];
extern  VTBL_ENTRY _ZTV7S4263C3[];
static Base_Class bases_S4263C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4263C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4263C2[];
extern void _ZN7S4263C2D1Ev();
extern void _ZN7S4263C2D0Ev();
extern void _ZN7S4263C33v14Ev();
extern void _ZN7S4263C33v15Ev();
extern void _ZN7S4263C33v16Ev();
extern void _ZN7S4263C33v17Ev();
extern void _ZN7S4263C33v18Ev();
extern void _ZN7S4263C33v19Ev();
extern void _ZN7S4263C33v20Ev();
extern void _ZN7S4263C33v21Ev();
extern void _ZN7S4263C33v22Ev();
extern void _ZN7S4263C33v23Ev();
extern void _ZN7S4263C33v24Ev();
extern void _ZN7S4263C33v25Ev();
extern void _ZN7S4263C33v26Ev();
extern void _ZN7S4263C33v27Ev();
extern void _ZN7S4263C33v28Ev();
extern void _ZN7S4263C33v29Ev();
extern void _ZN7S4263C33v30Ev();
extern void _ZN7S4263C33v31Ev();
extern void _ZN7S4263C33v32Ev();
extern void _ZN7S4263C33v33Ev();
extern void _ZN7S4263C33v34Ev();
extern void _ZN7S4263C33v35Ev();
extern void _ZN7S4263C33v36Ev();
extern void _ZN7S4263C33v37Ev();
extern void _ZN7S4263C33v38Ev();
extern void _ZN7S4263C33v39Ev();
extern void _ZN7S4263C23v40Ev();
extern void _ZN7S4263C23v41Ev();
extern void _ZN7S4263C23v42Ev();
extern void _ZN7S4263C23v43Ev();
extern void _ZN7S4263C23v44Ev();
extern void _ZN7S4263C23v45Ev();
extern void _ZN7S4263C23v46Ev();
extern void _ZN7S4263C23v47Ev();
extern void _ZN7S4263C23v48Ev();
extern void _ZN7S4263C23v49Ev();
extern void _ZN7S4263C23v50Ev();
extern void _ZN7S4263C23v51Ev();
extern void _ZN7S4263C23v52Ev();
extern void _ZN7S4263C23v53Ev();
static  VTBL_ENTRY vtc_S4263C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4263C2[0]),
  (VTBL_ENTRY)&_ZN7S4263C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4263C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4263C33v14Ev,
  (VTBL_ENTRY)&_ZN7S4263C33v15Ev,
  (VTBL_ENTRY)&_ZN7S4263C33v16Ev,
  (VTBL_ENTRY)&_ZN7S4263C33v17Ev,
  (VTBL_ENTRY)&_ZN7S4263C33v18Ev,
  (VTBL_ENTRY)&_ZN7S4263C33v19Ev,
  (VTBL_ENTRY)&_ZN7S4263C33v20Ev,
  (VTBL_ENTRY)&_ZN7S4263C33v21Ev,
  (VTBL_ENTRY)&_ZN7S4263C33v22Ev,
  (VTBL_ENTRY)&_ZN7S4263C33v23Ev,
  (VTBL_ENTRY)&_ZN7S4263C33v24Ev,
  (VTBL_ENTRY)&_ZN7S4263C33v25Ev,
  (VTBL_ENTRY)&_ZN7S4263C33v26Ev,
  (VTBL_ENTRY)&_ZN7S4263C33v27Ev,
  (VTBL_ENTRY)&_ZN7S4263C33v28Ev,
  (VTBL_ENTRY)&_ZN7S4263C33v29Ev,
  (VTBL_ENTRY)&_ZN7S4263C33v30Ev,
  (VTBL_ENTRY)&_ZN7S4263C33v31Ev,
  (VTBL_ENTRY)&_ZN7S4263C33v32Ev,
  (VTBL_ENTRY)&_ZN7S4263C33v33Ev,
  (VTBL_ENTRY)&_ZN7S4263C33v34Ev,
  (VTBL_ENTRY)&_ZN7S4263C33v35Ev,
  (VTBL_ENTRY)&_ZN7S4263C33v36Ev,
  (VTBL_ENTRY)&_ZN7S4263C33v37Ev,
  (VTBL_ENTRY)&_ZN7S4263C33v38Ev,
  (VTBL_ENTRY)&_ZN7S4263C33v39Ev,
  (VTBL_ENTRY)&_ZN7S4263C23v40Ev,
  (VTBL_ENTRY)&_ZN7S4263C23v41Ev,
  (VTBL_ENTRY)&_ZN7S4263C23v42Ev,
  (VTBL_ENTRY)&_ZN7S4263C23v43Ev,
  (VTBL_ENTRY)&_ZN7S4263C23v44Ev,
  (VTBL_ENTRY)&_ZN7S4263C23v45Ev,
  (VTBL_ENTRY)&_ZN7S4263C23v46Ev,
  (VTBL_ENTRY)&_ZN7S4263C23v47Ev,
  (VTBL_ENTRY)&_ZN7S4263C23v48Ev,
  (VTBL_ENTRY)&_ZN7S4263C23v49Ev,
  (VTBL_ENTRY)&_ZN7S4263C23v50Ev,
  (VTBL_ENTRY)&_ZN7S4263C23v51Ev,
  (VTBL_ENTRY)&_ZN7S4263C23v52Ev,
  (VTBL_ENTRY)&_ZN7S4263C23v53Ev,
};
extern VTBL_ENTRY _ZTI7S4263C2[];
extern  VTBL_ENTRY _ZTV7S4263C2[];
Class_Descriptor cd_S4263C2 = {  "S4263C2", // class name
  bases_S4263C2, 1,
  &(vtc_S4263C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,48), // object size
  NSPAIRA(_ZTI7S4263C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4263C2),44, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4263C5  {
  void *s4263c5f0;
  char s4263c5f1[32];
  int s4263c5f2[6];
  char s4263c5f3;
  int s4263c5f4[2];
  virtual  ~S4263C5(); // _ZN7S4263C5D1Ev
  virtual void  v54(); // _ZN7S4263C53v54Ev
  virtual void  v55(); // _ZN7S4263C53v55Ev
  S4263C5(); // tgen
};
//SIG(-1 S4263C5) C1{ vd v1 v2 Fp Fc[32] Fi[6] Fc Fi[2]}


 S4263C5 ::~S4263C5(){ note_dtor("S4263C5", this);}
void  S4263C5 ::v54(){vfunc_called(this, "_ZN7S4263C53v54Ev");}
void  S4263C5 ::v55(){vfunc_called(this, "_ZN7S4263C53v55Ev");}
S4263C5 ::S4263C5(){ note_ctor("S4263C5", this);} // tgen

static void Test_S4263C5()
{
  extern Class_Descriptor cd_S4263C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(12,20)];
    init_test(&cd_S4263C5, buf);
    S4263C5 *dp, &lv = *(dp=new (buf) S4263C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(88,76), "sizeof(S4263C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4263C5)");
    check_field_offset(lv, s4263c5f0, ABISELECT(8,4), "S4263C5.s4263c5f0");
    check_field_offset(lv, s4263c5f1, ABISELECT(16,8), "S4263C5.s4263c5f1");
    check_field_offset(lv, s4263c5f2, ABISELECT(48,40), "S4263C5.s4263c5f2");
    check_field_offset(lv, s4263c5f3, ABISELECT(72,64), "S4263C5.s4263c5f3");
    check_field_offset(lv, s4263c5f4, ABISELECT(76,68), "S4263C5.s4263c5f4");
    test_class_info(&lv, &cd_S4263C5);
    dp->~S4263C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4263C5(Test_S4263C5, "S4263C5", ABISELECT(88,76));

#else // __cplusplus

extern void _ZN7S4263C5C1Ev();
extern void _ZN7S4263C5D1Ev();
Name_Map name_map_S4263C5[] = {
  NSPAIR(_ZN7S4263C5C1Ev),
  NSPAIR(_ZN7S4263C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4263C5[];
extern void _ZN7S4263C5D1Ev();
extern void _ZN7S4263C5D0Ev();
extern void _ZN7S4263C53v54Ev();
extern void _ZN7S4263C53v55Ev();
static  VTBL_ENTRY vtc_S4263C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4263C5[0]),
  (VTBL_ENTRY)&_ZN7S4263C5D1Ev,
  (VTBL_ENTRY)&_ZN7S4263C5D0Ev,
  (VTBL_ENTRY)&_ZN7S4263C53v54Ev,
  (VTBL_ENTRY)&_ZN7S4263C53v55Ev,
};
extern VTBL_ENTRY _ZTI7S4263C5[];
extern  VTBL_ENTRY _ZTV7S4263C5[];
Class_Descriptor cd_S4263C5 = {  "S4263C5", // class name
  0,0,//no base classes
  &(vtc_S4263C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(88,76), // object size
  NSPAIRA(_ZTI7S4263C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4263C5),6, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4263C1  : S4263C2 , S4263C5 {
  void *s4263c1f0[2];
  int s4263c1f1[2];
  __tsi64 s4263c1f2[2];
  long s4263c1f3;
  void *s4263c1f4[3];
  char s4263c1f5;
  void *s4263c1f6[4];
  long s4263c1f7[2];
  virtual  ~S4263C1(); // _ZN7S4263C1D1Ev
  virtual void  v1(); // _ZN7S4263C12v1Ev
  virtual void  v2(); // _ZN7S4263C12v2Ev
  virtual void  v3(); // _ZN7S4263C12v3Ev
  virtual void  v4(); // _ZN7S4263C12v4Ev
  virtual void  v5(); // _ZN7S4263C12v5Ev
  virtual void  v6(); // _ZN7S4263C12v6Ev
  virtual void  v7(); // _ZN7S4263C12v7Ev
  virtual void  v8(); // _ZN7S4263C12v8Ev
  virtual void  v9(); // _ZN7S4263C12v9Ev
  virtual void  v10(); // _ZN7S4263C13v10Ev
  virtual void  v11(); // _ZN7S4263C13v11Ev
  virtual void  v12(); // _ZN7S4263C13v12Ev
  virtual void  v13(); // _ZN7S4263C13v13Ev
  S4263C1(); // tgen
};
//SIG(1 S4263C1) C1{ BC2{ BC3{ vd v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39} vd v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 Fp[2] Fi[4] FC4{ Fi[2]} Fp Fc Fp} BC5{ vd v54 v55 Fp Fc[32] Fi[6] Fc Fi[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 Fp[2] Fi[2] FL[2] Fl Fp[3] Fc Fp[4] Fl[2]}


 S4263C1 ::~S4263C1(){ note_dtor("S4263C1", this);}
void  S4263C1 ::v1(){vfunc_called(this, "_ZN7S4263C12v1Ev");}
void  S4263C1 ::v2(){vfunc_called(this, "_ZN7S4263C12v2Ev");}
void  S4263C1 ::v3(){vfunc_called(this, "_ZN7S4263C12v3Ev");}
void  S4263C1 ::v4(){vfunc_called(this, "_ZN7S4263C12v4Ev");}
void  S4263C1 ::v5(){vfunc_called(this, "_ZN7S4263C12v5Ev");}
void  S4263C1 ::v6(){vfunc_called(this, "_ZN7S4263C12v6Ev");}
void  S4263C1 ::v7(){vfunc_called(this, "_ZN7S4263C12v7Ev");}
void  S4263C1 ::v8(){vfunc_called(this, "_ZN7S4263C12v8Ev");}
void  S4263C1 ::v9(){vfunc_called(this, "_ZN7S4263C12v9Ev");}
void  S4263C1 ::v10(){vfunc_called(this, "_ZN7S4263C13v10Ev");}
void  S4263C1 ::v11(){vfunc_called(this, "_ZN7S4263C13v11Ev");}
void  S4263C1 ::v12(){vfunc_called(this, "_ZN7S4263C13v12Ev");}
void  S4263C1 ::v13(){vfunc_called(this, "_ZN7S4263C13v13Ev");}
S4263C1 ::S4263C1(){ note_ctor("S4263C1", this);} // tgen

static void Test_S4263C1()
{
  extern Class_Descriptor cd_S4263C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(37,51)];
    init_test(&cd_S4263C1, buf);
    S4263C1 *dp, &lv = *(dp=new (buf) S4263C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(288,200), "sizeof(S4263C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4263C1)");
    check_base_class_offset(lv, (S4263C3*)(S4263C2*), 0, "S4263C1");
    check_base_class_offset(lv, (S4263C2*), 0, "S4263C1");
    check_base_class_offset(lv, (S4263C5*), ABISELECT(72,48), "S4263C1");
    check_field_offset(lv, s4263c1f0, ABISELECT(160,124), "S4263C1.s4263c1f0");
    check_field_offset(lv, s4263c1f1, ABISELECT(176,132), "S4263C1.s4263c1f1");
    check_field_offset(lv, s4263c1f2, ABISELECT(184,140), "S4263C1.s4263c1f2");
    check_field_offset(lv, s4263c1f3, ABISELECT(200,156), "S4263C1.s4263c1f3");
    check_field_offset(lv, s4263c1f4, ABISELECT(208,160), "S4263C1.s4263c1f4");
    check_field_offset(lv, s4263c1f5, ABISELECT(232,172), "S4263C1.s4263c1f5");
    check_field_offset(lv, s4263c1f6, ABISELECT(240,176), "S4263C1.s4263c1f6");
    check_field_offset(lv, s4263c1f7, ABISELECT(272,192), "S4263C1.s4263c1f7");
    test_class_info(&lv, &cd_S4263C1);
    dp->~S4263C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4263C1(Test_S4263C1, "S4263C1", ABISELECT(288,200));

#else // __cplusplus

extern void _ZN7S4263C1C1Ev();
extern void _ZN7S4263C1D1Ev();
Name_Map name_map_S4263C1[] = {
  NSPAIR(_ZN7S4263C1C1Ev),
  NSPAIR(_ZN7S4263C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4263C3;
extern VTBL_ENTRY _ZTI7S4263C3[];
extern  VTBL_ENTRY _ZTV7S4263C3[];
extern Class_Descriptor cd_S4263C2;
extern VTBL_ENTRY _ZTI7S4263C2[];
extern  VTBL_ENTRY _ZTV7S4263C2[];
extern Class_Descriptor cd_S4263C5;
extern VTBL_ENTRY _ZTI7S4263C5[];
extern  VTBL_ENTRY _ZTV7S4263C5[];
static Base_Class bases_S4263C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4263C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S4263C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S4263C5,    ABISELECT(72,48), //bcp->offset
    57, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4263C1[];
extern void _ZN7S4263C1D1Ev();
extern void _ZN7S4263C1D0Ev();
extern void _ZN7S4263C33v14Ev();
extern void _ZN7S4263C33v15Ev();
extern void _ZN7S4263C33v16Ev();
extern void _ZN7S4263C33v17Ev();
extern void _ZN7S4263C33v18Ev();
extern void _ZN7S4263C33v19Ev();
extern void _ZN7S4263C33v20Ev();
extern void _ZN7S4263C33v21Ev();
extern void _ZN7S4263C33v22Ev();
extern void _ZN7S4263C33v23Ev();
extern void _ZN7S4263C33v24Ev();
extern void _ZN7S4263C33v25Ev();
extern void _ZN7S4263C33v26Ev();
extern void _ZN7S4263C33v27Ev();
extern void _ZN7S4263C33v28Ev();
extern void _ZN7S4263C33v29Ev();
extern void _ZN7S4263C33v30Ev();
extern void _ZN7S4263C33v31Ev();
extern void _ZN7S4263C33v32Ev();
extern void _ZN7S4263C33v33Ev();
extern void _ZN7S4263C33v34Ev();
extern void _ZN7S4263C33v35Ev();
extern void _ZN7S4263C33v36Ev();
extern void _ZN7S4263C33v37Ev();
extern void _ZN7S4263C33v38Ev();
extern void _ZN7S4263C33v39Ev();
extern void _ZN7S4263C23v40Ev();
extern void _ZN7S4263C23v41Ev();
extern void _ZN7S4263C23v42Ev();
extern void _ZN7S4263C23v43Ev();
extern void _ZN7S4263C23v44Ev();
extern void _ZN7S4263C23v45Ev();
extern void _ZN7S4263C23v46Ev();
extern void _ZN7S4263C23v47Ev();
extern void _ZN7S4263C23v48Ev();
extern void _ZN7S4263C23v49Ev();
extern void _ZN7S4263C23v50Ev();
extern void _ZN7S4263C23v51Ev();
extern void _ZN7S4263C23v52Ev();
extern void _ZN7S4263C23v53Ev();
extern void _ZN7S4263C12v1Ev();
extern void _ZN7S4263C12v2Ev();
extern void _ZN7S4263C12v3Ev();
extern void _ZN7S4263C12v4Ev();
extern void _ZN7S4263C12v5Ev();
extern void _ZN7S4263C12v6Ev();
extern void _ZN7S4263C12v7Ev();
extern void _ZN7S4263C12v8Ev();
extern void _ZN7S4263C12v9Ev();
extern void _ZN7S4263C13v10Ev();
extern void _ZN7S4263C13v11Ev();
extern void _ZN7S4263C13v12Ev();
extern void _ZN7S4263C13v13Ev();
extern void ABISELECT(_ZThn72_N7S4263C1D1Ev,_ZThn48_N7S4263C1D1Ev)();
extern void ABISELECT(_ZThn72_N7S4263C1D0Ev,_ZThn48_N7S4263C1D0Ev)();
extern void _ZN7S4263C53v54Ev();
extern void _ZN7S4263C53v55Ev();
static  VTBL_ENTRY vtc_S4263C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4263C1[0]),
  (VTBL_ENTRY)&_ZN7S4263C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4263C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4263C33v14Ev,
  (VTBL_ENTRY)&_ZN7S4263C33v15Ev,
  (VTBL_ENTRY)&_ZN7S4263C33v16Ev,
  (VTBL_ENTRY)&_ZN7S4263C33v17Ev,
  (VTBL_ENTRY)&_ZN7S4263C33v18Ev,
  (VTBL_ENTRY)&_ZN7S4263C33v19Ev,
  (VTBL_ENTRY)&_ZN7S4263C33v20Ev,
  (VTBL_ENTRY)&_ZN7S4263C33v21Ev,
  (VTBL_ENTRY)&_ZN7S4263C33v22Ev,
  (VTBL_ENTRY)&_ZN7S4263C33v23Ev,
  (VTBL_ENTRY)&_ZN7S4263C33v24Ev,
  (VTBL_ENTRY)&_ZN7S4263C33v25Ev,
  (VTBL_ENTRY)&_ZN7S4263C33v26Ev,
  (VTBL_ENTRY)&_ZN7S4263C33v27Ev,
  (VTBL_ENTRY)&_ZN7S4263C33v28Ev,
  (VTBL_ENTRY)&_ZN7S4263C33v29Ev,
  (VTBL_ENTRY)&_ZN7S4263C33v30Ev,
  (VTBL_ENTRY)&_ZN7S4263C33v31Ev,
  (VTBL_ENTRY)&_ZN7S4263C33v32Ev,
  (VTBL_ENTRY)&_ZN7S4263C33v33Ev,
  (VTBL_ENTRY)&_ZN7S4263C33v34Ev,
  (VTBL_ENTRY)&_ZN7S4263C33v35Ev,
  (VTBL_ENTRY)&_ZN7S4263C33v36Ev,
  (VTBL_ENTRY)&_ZN7S4263C33v37Ev,
  (VTBL_ENTRY)&_ZN7S4263C33v38Ev,
  (VTBL_ENTRY)&_ZN7S4263C33v39Ev,
  (VTBL_ENTRY)&_ZN7S4263C23v40Ev,
  (VTBL_ENTRY)&_ZN7S4263C23v41Ev,
  (VTBL_ENTRY)&_ZN7S4263C23v42Ev,
  (VTBL_ENTRY)&_ZN7S4263C23v43Ev,
  (VTBL_ENTRY)&_ZN7S4263C23v44Ev,
  (VTBL_ENTRY)&_ZN7S4263C23v45Ev,
  (VTBL_ENTRY)&_ZN7S4263C23v46Ev,
  (VTBL_ENTRY)&_ZN7S4263C23v47Ev,
  (VTBL_ENTRY)&_ZN7S4263C23v48Ev,
  (VTBL_ENTRY)&_ZN7S4263C23v49Ev,
  (VTBL_ENTRY)&_ZN7S4263C23v50Ev,
  (VTBL_ENTRY)&_ZN7S4263C23v51Ev,
  (VTBL_ENTRY)&_ZN7S4263C23v52Ev,
  (VTBL_ENTRY)&_ZN7S4263C23v53Ev,
  (VTBL_ENTRY)&_ZN7S4263C12v1Ev,
  (VTBL_ENTRY)&_ZN7S4263C12v2Ev,
  (VTBL_ENTRY)&_ZN7S4263C12v3Ev,
  (VTBL_ENTRY)&_ZN7S4263C12v4Ev,
  (VTBL_ENTRY)&_ZN7S4263C12v5Ev,
  (VTBL_ENTRY)&_ZN7S4263C12v6Ev,
  (VTBL_ENTRY)&_ZN7S4263C12v7Ev,
  (VTBL_ENTRY)&_ZN7S4263C12v8Ev,
  (VTBL_ENTRY)&_ZN7S4263C12v9Ev,
  (VTBL_ENTRY)&_ZN7S4263C13v10Ev,
  (VTBL_ENTRY)&_ZN7S4263C13v11Ev,
  (VTBL_ENTRY)&_ZN7S4263C13v12Ev,
  (VTBL_ENTRY)&_ZN7S4263C13v13Ev,
  ABISELECT(-72,-48),
  (VTBL_ENTRY)&(_ZTI7S4263C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn72_N7S4263C1D1Ev,_ZThn48_N7S4263C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn72_N7S4263C1D0Ev,_ZThn48_N7S4263C1D0Ev),
  (VTBL_ENTRY)&_ZN7S4263C53v54Ev,
  (VTBL_ENTRY)&_ZN7S4263C53v55Ev,
};
extern VTBL_ENTRY _ZTI7S4263C1[];
extern  VTBL_ENTRY _ZTV7S4263C1[];
Class_Descriptor cd_S4263C1 = {  "S4263C1", // class name
  bases_S4263C1, 3,
  &(vtc_S4263C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(288,200), // object size
  NSPAIRA(_ZTI7S4263C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S4263C1),63, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4261C3  {
  virtual  ~S4261C3(); // _ZN7S4261C3D1Ev
  virtual void  v14(); // _ZN7S4261C33v14Ev
  virtual void  v15(); // _ZN7S4261C33v15Ev
  virtual void  v16(); // _ZN7S4261C33v16Ev
  virtual void  v17(); // _ZN7S4261C33v17Ev
  virtual void  v18(); // _ZN7S4261C33v18Ev
  virtual void  v19(); // _ZN7S4261C33v19Ev
  virtual void  v20(); // _ZN7S4261C33v20Ev
  virtual void  v21(); // _ZN7S4261C33v21Ev
  virtual void  v22(); // _ZN7S4261C33v22Ev
  virtual void  v23(); // _ZN7S4261C33v23Ev
  virtual void  v24(); // _ZN7S4261C33v24Ev
  virtual void  v25(); // _ZN7S4261C33v25Ev
  virtual void  v26(); // _ZN7S4261C33v26Ev
  virtual void  v27(); // _ZN7S4261C33v27Ev
  virtual void  v28(); // _ZN7S4261C33v28Ev
  virtual void  v29(); // _ZN7S4261C33v29Ev
  virtual void  v30(); // _ZN7S4261C33v30Ev
  virtual void  v31(); // _ZN7S4261C33v31Ev
  virtual void  v32(); // _ZN7S4261C33v32Ev
  virtual void  v33(); // _ZN7S4261C33v33Ev
  virtual void  v34(); // _ZN7S4261C33v34Ev
  virtual void  v35(); // _ZN7S4261C33v35Ev
  virtual void  v36(); // _ZN7S4261C33v36Ev
  virtual void  v37(); // _ZN7S4261C33v37Ev
  virtual void  v38(); // _ZN7S4261C33v38Ev
  virtual void  v39(); // _ZN7S4261C33v39Ev
  S4261C3(); // tgen
};
//SIG(-1 S4261C3) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26}


 S4261C3 ::~S4261C3(){ note_dtor("S4261C3", this);}
void  S4261C3 ::v14(){vfunc_called(this, "_ZN7S4261C33v14Ev");}
void  S4261C3 ::v15(){vfunc_called(this, "_ZN7S4261C33v15Ev");}
void  S4261C3 ::v16(){vfunc_called(this, "_ZN7S4261C33v16Ev");}
void  S4261C3 ::v17(){vfunc_called(this, "_ZN7S4261C33v17Ev");}
void  S4261C3 ::v18(){vfunc_called(this, "_ZN7S4261C33v18Ev");}
void  S4261C3 ::v19(){vfunc_called(this, "_ZN7S4261C33v19Ev");}
void  S4261C3 ::v20(){vfunc_called(this, "_ZN7S4261C33v20Ev");}
void  S4261C3 ::v21(){vfunc_called(this, "_ZN7S4261C33v21Ev");}
void  S4261C3 ::v22(){vfunc_called(this, "_ZN7S4261C33v22Ev");}
void  S4261C3 ::v23(){vfunc_called(this, "_ZN7S4261C33v23Ev");}
void  S4261C3 ::v24(){vfunc_called(this, "_ZN7S4261C33v24Ev");}
void  S4261C3 ::v25(){vfunc_called(this, "_ZN7S4261C33v25Ev");}
void  S4261C3 ::v26(){vfunc_called(this, "_ZN7S4261C33v26Ev");}
void  S4261C3 ::v27(){vfunc_called(this, "_ZN7S4261C33v27Ev");}
void  S4261C3 ::v28(){vfunc_called(this, "_ZN7S4261C33v28Ev");}
void  S4261C3 ::v29(){vfunc_called(this, "_ZN7S4261C33v29Ev");}
void  S4261C3 ::v30(){vfunc_called(this, "_ZN7S4261C33v30Ev");}
void  S4261C3 ::v31(){vfunc_called(this, "_ZN7S4261C33v31Ev");}
void  S4261C3 ::v32(){vfunc_called(this, "_ZN7S4261C33v32Ev");}
void  S4261C3 ::v33(){vfunc_called(this, "_ZN7S4261C33v33Ev");}
void  S4261C3 ::v34(){vfunc_called(this, "_ZN7S4261C33v34Ev");}
void  S4261C3 ::v35(){vfunc_called(this, "_ZN7S4261C33v35Ev");}
void  S4261C3 ::v36(){vfunc_called(this, "_ZN7S4261C33v36Ev");}
void  S4261C3 ::v37(){vfunc_called(this, "_ZN7S4261C33v37Ev");}
void  S4261C3 ::v38(){vfunc_called(this, "_ZN7S4261C33v38Ev");}
void  S4261C3 ::v39(){vfunc_called(this, "_ZN7S4261C33v39Ev");}
S4261C3 ::S4261C3(){ note_ctor("S4261C3", this);} // tgen

static void Test_S4261C3()
{
  extern Class_Descriptor cd_S4261C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S4261C3, buf);
    S4261C3 *dp, &lv = *(dp=new (buf) S4261C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S4261C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4261C3)");
    test_class_info(&lv, &cd_S4261C3);
    dp->~S4261C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4261C3(Test_S4261C3, "S4261C3", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S4261C3C1Ev();
extern void _ZN7S4261C3D1Ev();
Name_Map name_map_S4261C3[] = {
  NSPAIR(_ZN7S4261C3C1Ev),
  NSPAIR(_ZN7S4261C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4261C3[];
extern void _ZN7S4261C3D1Ev();
extern void _ZN7S4261C3D0Ev();
extern void _ZN7S4261C33v14Ev();
extern void _ZN7S4261C33v15Ev();
extern void _ZN7S4261C33v16Ev();
extern void _ZN7S4261C33v17Ev();
extern void _ZN7S4261C33v18Ev();
extern void _ZN7S4261C33v19Ev();
extern void _ZN7S4261C33v20Ev();
extern void _ZN7S4261C33v21Ev();
extern void _ZN7S4261C33v22Ev();
extern void _ZN7S4261C33v23Ev();
extern void _ZN7S4261C33v24Ev();
extern void _ZN7S4261C33v25Ev();
extern void _ZN7S4261C33v26Ev();
extern void _ZN7S4261C33v27Ev();
extern void _ZN7S4261C33v28Ev();
extern void _ZN7S4261C33v29Ev();
extern void _ZN7S4261C33v30Ev();
extern void _ZN7S4261C33v31Ev();
extern void _ZN7S4261C33v32Ev();
extern void _ZN7S4261C33v33Ev();
extern void _ZN7S4261C33v34Ev();
extern void _ZN7S4261C33v35Ev();
extern void _ZN7S4261C33v36Ev();
extern void _ZN7S4261C33v37Ev();
extern void _ZN7S4261C33v38Ev();
extern void _ZN7S4261C33v39Ev();
static  VTBL_ENTRY vtc_S4261C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4261C3[0]),
  (VTBL_ENTRY)&_ZN7S4261C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4261C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4261C33v14Ev,
  (VTBL_ENTRY)&_ZN7S4261C33v15Ev,
  (VTBL_ENTRY)&_ZN7S4261C33v16Ev,
  (VTBL_ENTRY)&_ZN7S4261C33v17Ev,
  (VTBL_ENTRY)&_ZN7S4261C33v18Ev,
  (VTBL_ENTRY)&_ZN7S4261C33v19Ev,
  (VTBL_ENTRY)&_ZN7S4261C33v20Ev,
  (VTBL_ENTRY)&_ZN7S4261C33v21Ev,
  (VTBL_ENTRY)&_ZN7S4261C33v22Ev,
  (VTBL_ENTRY)&_ZN7S4261C33v23Ev,
  (VTBL_ENTRY)&_ZN7S4261C33v24Ev,
  (VTBL_ENTRY)&_ZN7S4261C33v25Ev,
  (VTBL_ENTRY)&_ZN7S4261C33v26Ev,
  (VTBL_ENTRY)&_ZN7S4261C33v27Ev,
  (VTBL_ENTRY)&_ZN7S4261C33v28Ev,
  (VTBL_ENTRY)&_ZN7S4261C33v29Ev,
  (VTBL_ENTRY)&_ZN7S4261C33v30Ev,
  (VTBL_ENTRY)&_ZN7S4261C33v31Ev,
  (VTBL_ENTRY)&_ZN7S4261C33v32Ev,
  (VTBL_ENTRY)&_ZN7S4261C33v33Ev,
  (VTBL_ENTRY)&_ZN7S4261C33v34Ev,
  (VTBL_ENTRY)&_ZN7S4261C33v35Ev,
  (VTBL_ENTRY)&_ZN7S4261C33v36Ev,
  (VTBL_ENTRY)&_ZN7S4261C33v37Ev,
  (VTBL_ENTRY)&_ZN7S4261C33v38Ev,
  (VTBL_ENTRY)&_ZN7S4261C33v39Ev,
};
extern VTBL_ENTRY _ZTI7S4261C3[];
extern  VTBL_ENTRY _ZTV7S4261C3[];
Class_Descriptor cd_S4261C3 = {  "S4261C3", // class name
  0,0,//no base classes
  &(vtc_S4261C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S4261C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4261C3),30, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4261C2  : S4261C3 {
  void *s4261c2f0[2];
  int s4261c2f1[4];
  ::S2423C5_nt s4261c2f2;
  void *s4261c2f3;
  char s4261c2f4;
  void *s4261c2f5;
  virtual  ~S4261C2(); // _ZN7S4261C2D1Ev
  virtual void  v40(); // _ZN7S4261C23v40Ev
  virtual void  v41(); // _ZN7S4261C23v41Ev
  virtual void  v42(); // _ZN7S4261C23v42Ev
  virtual void  v43(); // _ZN7S4261C23v43Ev
  virtual void  v44(); // _ZN7S4261C23v44Ev
  virtual void  v45(); // _ZN7S4261C23v45Ev
  virtual void  v46(); // _ZN7S4261C23v46Ev
  virtual void  v47(); // _ZN7S4261C23v47Ev
  virtual void  v48(); // _ZN7S4261C23v48Ev
  virtual void  v49(); // _ZN7S4261C23v49Ev
  virtual void  v50(); // _ZN7S4261C23v50Ev
  virtual void  v51(); // _ZN7S4261C23v51Ev
  virtual void  v52(); // _ZN7S4261C23v52Ev
  virtual void  v53(); // _ZN7S4261C23v53Ev
  S4261C2(); // tgen
};
//SIG(-1 S4261C2) C1{ BC2{ vd v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 Fp[2] Fi[4] FC3{ Fi[2]} Fp Fc Fp}


 S4261C2 ::~S4261C2(){ note_dtor("S4261C2", this);}
void  S4261C2 ::v40(){vfunc_called(this, "_ZN7S4261C23v40Ev");}
void  S4261C2 ::v41(){vfunc_called(this, "_ZN7S4261C23v41Ev");}
void  S4261C2 ::v42(){vfunc_called(this, "_ZN7S4261C23v42Ev");}
void  S4261C2 ::v43(){vfunc_called(this, "_ZN7S4261C23v43Ev");}
void  S4261C2 ::v44(){vfunc_called(this, "_ZN7S4261C23v44Ev");}
void  S4261C2 ::v45(){vfunc_called(this, "_ZN7S4261C23v45Ev");}
void  S4261C2 ::v46(){vfunc_called(this, "_ZN7S4261C23v46Ev");}
void  S4261C2 ::v47(){vfunc_called(this, "_ZN7S4261C23v47Ev");}
void  S4261C2 ::v48(){vfunc_called(this, "_ZN7S4261C23v48Ev");}
void  S4261C2 ::v49(){vfunc_called(this, "_ZN7S4261C23v49Ev");}
void  S4261C2 ::v50(){vfunc_called(this, "_ZN7S4261C23v50Ev");}
void  S4261C2 ::v51(){vfunc_called(this, "_ZN7S4261C23v51Ev");}
void  S4261C2 ::v52(){vfunc_called(this, "_ZN7S4261C23v52Ev");}
void  S4261C2 ::v53(){vfunc_called(this, "_ZN7S4261C23v53Ev");}
S4261C2 ::S4261C2(){ note_ctor("S4261C2", this);} // tgen

static void Test_S4261C2()
{
  extern Class_Descriptor cd_S4261C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,13)];
    init_test(&cd_S4261C2, buf);
    S4261C2 *dp, &lv = *(dp=new (buf) S4261C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,48), "sizeof(S4261C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4261C2)");
    check_base_class_offset(lv, (S4261C3*), 0, "S4261C2");
    check_field_offset(lv, s4261c2f0, ABISELECT(8,4), "S4261C2.s4261c2f0");
    check_field_offset(lv, s4261c2f1, ABISELECT(24,12), "S4261C2.s4261c2f1");
    check_field_offset(lv, s4261c2f2, ABISELECT(40,28), "S4261C2.s4261c2f2");
    check_field_offset(lv, s4261c2f3, ABISELECT(48,36), "S4261C2.s4261c2f3");
    check_field_offset(lv, s4261c2f4, ABISELECT(56,40), "S4261C2.s4261c2f4");
    check_field_offset(lv, s4261c2f5, ABISELECT(64,44), "S4261C2.s4261c2f5");
    test_class_info(&lv, &cd_S4261C2);
    dp->~S4261C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4261C2(Test_S4261C2, "S4261C2", ABISELECT(72,48));

#else // __cplusplus

extern void _ZN7S4261C2C1Ev();
extern void _ZN7S4261C2D1Ev();
Name_Map name_map_S4261C2[] = {
  NSPAIR(_ZN7S4261C2C1Ev),
  NSPAIR(_ZN7S4261C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4261C3;
extern VTBL_ENTRY _ZTI7S4261C3[];
extern  VTBL_ENTRY _ZTV7S4261C3[];
static Base_Class bases_S4261C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4261C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4261C2[];
extern void _ZN7S4261C2D1Ev();
extern void _ZN7S4261C2D0Ev();
extern void _ZN7S4261C33v14Ev();
extern void _ZN7S4261C33v15Ev();
extern void _ZN7S4261C33v16Ev();
extern void _ZN7S4261C33v17Ev();
extern void _ZN7S4261C33v18Ev();
extern void _ZN7S4261C33v19Ev();
extern void _ZN7S4261C33v20Ev();
extern void _ZN7S4261C33v21Ev();
extern void _ZN7S4261C33v22Ev();
extern void _ZN7S4261C33v23Ev();
extern void _ZN7S4261C33v24Ev();
extern void _ZN7S4261C33v25Ev();
extern void _ZN7S4261C33v26Ev();
extern void _ZN7S4261C33v27Ev();
extern void _ZN7S4261C33v28Ev();
extern void _ZN7S4261C33v29Ev();
extern void _ZN7S4261C33v30Ev();
extern void _ZN7S4261C33v31Ev();
extern void _ZN7S4261C33v32Ev();
extern void _ZN7S4261C33v33Ev();
extern void _ZN7S4261C33v34Ev();
extern void _ZN7S4261C33v35Ev();
extern void _ZN7S4261C33v36Ev();
extern void _ZN7S4261C33v37Ev();
extern void _ZN7S4261C33v38Ev();
extern void _ZN7S4261C33v39Ev();
extern void _ZN7S4261C23v40Ev();
extern void _ZN7S4261C23v41Ev();
extern void _ZN7S4261C23v42Ev();
extern void _ZN7S4261C23v43Ev();
extern void _ZN7S4261C23v44Ev();
extern void _ZN7S4261C23v45Ev();
extern void _ZN7S4261C23v46Ev();
extern void _ZN7S4261C23v47Ev();
extern void _ZN7S4261C23v48Ev();
extern void _ZN7S4261C23v49Ev();
extern void _ZN7S4261C23v50Ev();
extern void _ZN7S4261C23v51Ev();
extern void _ZN7S4261C23v52Ev();
extern void _ZN7S4261C23v53Ev();
static  VTBL_ENTRY vtc_S4261C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4261C2[0]),
  (VTBL_ENTRY)&_ZN7S4261C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4261C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4261C33v14Ev,
  (VTBL_ENTRY)&_ZN7S4261C33v15Ev,
  (VTBL_ENTRY)&_ZN7S4261C33v16Ev,
  (VTBL_ENTRY)&_ZN7S4261C33v17Ev,
  (VTBL_ENTRY)&_ZN7S4261C33v18Ev,
  (VTBL_ENTRY)&_ZN7S4261C33v19Ev,
  (VTBL_ENTRY)&_ZN7S4261C33v20Ev,
  (VTBL_ENTRY)&_ZN7S4261C33v21Ev,
  (VTBL_ENTRY)&_ZN7S4261C33v22Ev,
  (VTBL_ENTRY)&_ZN7S4261C33v23Ev,
  (VTBL_ENTRY)&_ZN7S4261C33v24Ev,
  (VTBL_ENTRY)&_ZN7S4261C33v25Ev,
  (VTBL_ENTRY)&_ZN7S4261C33v26Ev,
  (VTBL_ENTRY)&_ZN7S4261C33v27Ev,
  (VTBL_ENTRY)&_ZN7S4261C33v28Ev,
  (VTBL_ENTRY)&_ZN7S4261C33v29Ev,
  (VTBL_ENTRY)&_ZN7S4261C33v30Ev,
  (VTBL_ENTRY)&_ZN7S4261C33v31Ev,
  (VTBL_ENTRY)&_ZN7S4261C33v32Ev,
  (VTBL_ENTRY)&_ZN7S4261C33v33Ev,
  (VTBL_ENTRY)&_ZN7S4261C33v34Ev,
  (VTBL_ENTRY)&_ZN7S4261C33v35Ev,
  (VTBL_ENTRY)&_ZN7S4261C33v36Ev,
  (VTBL_ENTRY)&_ZN7S4261C33v37Ev,
  (VTBL_ENTRY)&_ZN7S4261C33v38Ev,
  (VTBL_ENTRY)&_ZN7S4261C33v39Ev,
  (VTBL_ENTRY)&_ZN7S4261C23v40Ev,
  (VTBL_ENTRY)&_ZN7S4261C23v41Ev,
  (VTBL_ENTRY)&_ZN7S4261C23v42Ev,
  (VTBL_ENTRY)&_ZN7S4261C23v43Ev,
  (VTBL_ENTRY)&_ZN7S4261C23v44Ev,
  (VTBL_ENTRY)&_ZN7S4261C23v45Ev,
  (VTBL_ENTRY)&_ZN7S4261C23v46Ev,
  (VTBL_ENTRY)&_ZN7S4261C23v47Ev,
  (VTBL_ENTRY)&_ZN7S4261C23v48Ev,
  (VTBL_ENTRY)&_ZN7S4261C23v49Ev,
  (VTBL_ENTRY)&_ZN7S4261C23v50Ev,
  (VTBL_ENTRY)&_ZN7S4261C23v51Ev,
  (VTBL_ENTRY)&_ZN7S4261C23v52Ev,
  (VTBL_ENTRY)&_ZN7S4261C23v53Ev,
};
extern VTBL_ENTRY _ZTI7S4261C2[];
extern  VTBL_ENTRY _ZTV7S4261C2[];
Class_Descriptor cd_S4261C2 = {  "S4261C2", // class name
  bases_S4261C2, 1,
  &(vtc_S4261C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,48), // object size
  NSPAIRA(_ZTI7S4261C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4261C2),44, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4261C5  {
  void *s4261c5f0;
  char s4261c5f1[32];
  int s4261c5f2[6];
  char s4261c5f3;
  int s4261c5f4[2];
  virtual  ~S4261C5(); // _ZN7S4261C5D1Ev
  virtual void  v54(); // _ZN7S4261C53v54Ev
  virtual void  v55(); // _ZN7S4261C53v55Ev
  S4261C5(); // tgen
};
//SIG(-1 S4261C5) C1{ vd v1 v2 Fp Fc[32] Fi[6] Fc Fi[2]}


 S4261C5 ::~S4261C5(){ note_dtor("S4261C5", this);}
void  S4261C5 ::v54(){vfunc_called(this, "_ZN7S4261C53v54Ev");}
void  S4261C5 ::v55(){vfunc_called(this, "_ZN7S4261C53v55Ev");}
S4261C5 ::S4261C5(){ note_ctor("S4261C5", this);} // tgen

static void Test_S4261C5()
{
  extern Class_Descriptor cd_S4261C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(12,20)];
    init_test(&cd_S4261C5, buf);
    S4261C5 *dp, &lv = *(dp=new (buf) S4261C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(88,76), "sizeof(S4261C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4261C5)");
    check_field_offset(lv, s4261c5f0, ABISELECT(8,4), "S4261C5.s4261c5f0");
    check_field_offset(lv, s4261c5f1, ABISELECT(16,8), "S4261C5.s4261c5f1");
    check_field_offset(lv, s4261c5f2, ABISELECT(48,40), "S4261C5.s4261c5f2");
    check_field_offset(lv, s4261c5f3, ABISELECT(72,64), "S4261C5.s4261c5f3");
    check_field_offset(lv, s4261c5f4, ABISELECT(76,68), "S4261C5.s4261c5f4");
    test_class_info(&lv, &cd_S4261C5);
    dp->~S4261C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4261C5(Test_S4261C5, "S4261C5", ABISELECT(88,76));

#else // __cplusplus

extern void _ZN7S4261C5C1Ev();
extern void _ZN7S4261C5D1Ev();
Name_Map name_map_S4261C5[] = {
  NSPAIR(_ZN7S4261C5C1Ev),
  NSPAIR(_ZN7S4261C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4261C5[];
extern void _ZN7S4261C5D1Ev();
extern void _ZN7S4261C5D0Ev();
extern void _ZN7S4261C53v54Ev();
extern void _ZN7S4261C53v55Ev();
static  VTBL_ENTRY vtc_S4261C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4261C5[0]),
  (VTBL_ENTRY)&_ZN7S4261C5D1Ev,
  (VTBL_ENTRY)&_ZN7S4261C5D0Ev,
  (VTBL_ENTRY)&_ZN7S4261C53v54Ev,
  (VTBL_ENTRY)&_ZN7S4261C53v55Ev,
};
extern VTBL_ENTRY _ZTI7S4261C5[];
extern  VTBL_ENTRY _ZTV7S4261C5[];
Class_Descriptor cd_S4261C5 = {  "S4261C5", // class name
  0,0,//no base classes
  &(vtc_S4261C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(88,76), // object size
  NSPAIRA(_ZTI7S4261C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4261C5),6, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4261C1  : S4261C2 , S4261C5 {
  void *s4261c1f0[2];
  char s4261c1f1;
  int s4261c1f2[2];
  __tsi64 s4261c1f3[2];
  long s4261c1f4;
  int s4261c1f5[2];
  void *s4261c1f6[8];
  long s4261c1f7[2];
  virtual  ~S4261C1(); // _ZN7S4261C1D1Ev
  virtual void  v1(); // _ZN7S4261C12v1Ev
  virtual void  v2(); // _ZN7S4261C12v2Ev
  virtual void  v3(); // _ZN7S4261C12v3Ev
  virtual void  v4(); // _ZN7S4261C12v4Ev
  virtual void  v5(); // _ZN7S4261C12v5Ev
  virtual void  v6(); // _ZN7S4261C12v6Ev
  virtual void  v7(); // _ZN7S4261C12v7Ev
  virtual void  v8(); // _ZN7S4261C12v8Ev
  virtual void  v9(); // _ZN7S4261C12v9Ev
  virtual void  v10(); // _ZN7S4261C13v10Ev
  virtual void  v11(); // _ZN7S4261C13v11Ev
  virtual void  v12(); // _ZN7S4261C13v12Ev
  virtual void  v13(); // _ZN7S4261C13v13Ev
  S4261C1(); // tgen
};
//SIG(1 S4261C1) C1{ BC2{ BC3{ vd v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39} vd v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 Fp[2] Fi[4] FC4{ Fi[2]} Fp Fc Fp} BC5{ vd v54 v55 Fp Fc[32] Fi[6] Fc Fi[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 Fp[2] Fc Fi[2] FL[2] Fl Fi[2] Fp[8] Fl[2]}


 S4261C1 ::~S4261C1(){ note_dtor("S4261C1", this);}
void  S4261C1 ::v1(){vfunc_called(this, "_ZN7S4261C12v1Ev");}
void  S4261C1 ::v2(){vfunc_called(this, "_ZN7S4261C12v2Ev");}
void  S4261C1 ::v3(){vfunc_called(this, "_ZN7S4261C12v3Ev");}
void  S4261C1 ::v4(){vfunc_called(this, "_ZN7S4261C12v4Ev");}
void  S4261C1 ::v5(){vfunc_called(this, "_ZN7S4261C12v5Ev");}
void  S4261C1 ::v6(){vfunc_called(this, "_ZN7S4261C12v6Ev");}
void  S4261C1 ::v7(){vfunc_called(this, "_ZN7S4261C12v7Ev");}
void  S4261C1 ::v8(){vfunc_called(this, "_ZN7S4261C12v8Ev");}
void  S4261C1 ::v9(){vfunc_called(this, "_ZN7S4261C12v9Ev");}
void  S4261C1 ::v10(){vfunc_called(this, "_ZN7S4261C13v10Ev");}
void  S4261C1 ::v11(){vfunc_called(this, "_ZN7S4261C13v11Ev");}
void  S4261C1 ::v12(){vfunc_called(this, "_ZN7S4261C13v12Ev");}
void  S4261C1 ::v13(){vfunc_called(this, "_ZN7S4261C13v13Ev");}
S4261C1 ::S4261C1(){ note_ctor("S4261C1", this);} // tgen

static void Test_S4261C1()
{
  extern Class_Descriptor cd_S4261C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(39,54)];
    init_test(&cd_S4261C1, buf);
    S4261C1 *dp, &lv = *(dp=new (buf) S4261C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(304,212), "sizeof(S4261C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4261C1)");
    check_base_class_offset(lv, (S4261C3*)(S4261C2*), 0, "S4261C1");
    check_base_class_offset(lv, (S4261C2*), 0, "S4261C1");
    check_base_class_offset(lv, (S4261C5*), ABISELECT(72,48), "S4261C1");
    check_field_offset(lv, s4261c1f0, ABISELECT(160,124), "S4261C1.s4261c1f0");
    check_field_offset(lv, s4261c1f1, ABISELECT(176,132), "S4261C1.s4261c1f1");
    check_field_offset(lv, s4261c1f2, ABISELECT(180,136), "S4261C1.s4261c1f2");
    check_field_offset(lv, s4261c1f3, ABISELECT(192,144), "S4261C1.s4261c1f3");
    check_field_offset(lv, s4261c1f4, ABISELECT(208,160), "S4261C1.s4261c1f4");
    check_field_offset(lv, s4261c1f5, ABISELECT(216,164), "S4261C1.s4261c1f5");
    check_field_offset(lv, s4261c1f6, ABISELECT(224,172), "S4261C1.s4261c1f6");
    check_field_offset(lv, s4261c1f7, ABISELECT(288,204), "S4261C1.s4261c1f7");
    test_class_info(&lv, &cd_S4261C1);
    dp->~S4261C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4261C1(Test_S4261C1, "S4261C1", ABISELECT(304,212));

#else // __cplusplus

extern void _ZN7S4261C1C1Ev();
extern void _ZN7S4261C1D1Ev();
Name_Map name_map_S4261C1[] = {
  NSPAIR(_ZN7S4261C1C1Ev),
  NSPAIR(_ZN7S4261C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4261C3;
extern VTBL_ENTRY _ZTI7S4261C3[];
extern  VTBL_ENTRY _ZTV7S4261C3[];
extern Class_Descriptor cd_S4261C2;
extern VTBL_ENTRY _ZTI7S4261C2[];
extern  VTBL_ENTRY _ZTV7S4261C2[];
extern Class_Descriptor cd_S4261C5;
extern VTBL_ENTRY _ZTI7S4261C5[];
extern  VTBL_ENTRY _ZTV7S4261C5[];
static Base_Class bases_S4261C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4261C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S4261C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S4261C5,    ABISELECT(72,48), //bcp->offset
    57, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4261C1[];
extern void _ZN7S4261C1D1Ev();
extern void _ZN7S4261C1D0Ev();
extern void _ZN7S4261C33v14Ev();
extern void _ZN7S4261C33v15Ev();
extern void _ZN7S4261C33v16Ev();
extern void _ZN7S4261C33v17Ev();
extern void _ZN7S4261C33v18Ev();
extern void _ZN7S4261C33v19Ev();
extern void _ZN7S4261C33v20Ev();
extern void _ZN7S4261C33v21Ev();
extern void _ZN7S4261C33v22Ev();
extern void _ZN7S4261C33v23Ev();
extern void _ZN7S4261C33v24Ev();
extern void _ZN7S4261C33v25Ev();
extern void _ZN7S4261C33v26Ev();
extern void _ZN7S4261C33v27Ev();
extern void _ZN7S4261C33v28Ev();
extern void _ZN7S4261C33v29Ev();
extern void _ZN7S4261C33v30Ev();
extern void _ZN7S4261C33v31Ev();
extern void _ZN7S4261C33v32Ev();
extern void _ZN7S4261C33v33Ev();
extern void _ZN7S4261C33v34Ev();
extern void _ZN7S4261C33v35Ev();
extern void _ZN7S4261C33v36Ev();
extern void _ZN7S4261C33v37Ev();
extern void _ZN7S4261C33v38Ev();
extern void _ZN7S4261C33v39Ev();
extern void _ZN7S4261C23v40Ev();
extern void _ZN7S4261C23v41Ev();
extern void _ZN7S4261C23v42Ev();
extern void _ZN7S4261C23v43Ev();
extern void _ZN7S4261C23v44Ev();
extern void _ZN7S4261C23v45Ev();
extern void _ZN7S4261C23v46Ev();
extern void _ZN7S4261C23v47Ev();
extern void _ZN7S4261C23v48Ev();
extern void _ZN7S4261C23v49Ev();
extern void _ZN7S4261C23v50Ev();
extern void _ZN7S4261C23v51Ev();
extern void _ZN7S4261C23v52Ev();
extern void _ZN7S4261C23v53Ev();
extern void _ZN7S4261C12v1Ev();
extern void _ZN7S4261C12v2Ev();
extern void _ZN7S4261C12v3Ev();
extern void _ZN7S4261C12v4Ev();
extern void _ZN7S4261C12v5Ev();
extern void _ZN7S4261C12v6Ev();
extern void _ZN7S4261C12v7Ev();
extern void _ZN7S4261C12v8Ev();
extern void _ZN7S4261C12v9Ev();
extern void _ZN7S4261C13v10Ev();
extern void _ZN7S4261C13v11Ev();
extern void _ZN7S4261C13v12Ev();
extern void _ZN7S4261C13v13Ev();
extern void ABISELECT(_ZThn72_N7S4261C1D1Ev,_ZThn48_N7S4261C1D1Ev)();
extern void ABISELECT(_ZThn72_N7S4261C1D0Ev,_ZThn48_N7S4261C1D0Ev)();
extern void _ZN7S4261C53v54Ev();
extern void _ZN7S4261C53v55Ev();
static  VTBL_ENTRY vtc_S4261C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4261C1[0]),
  (VTBL_ENTRY)&_ZN7S4261C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4261C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4261C33v14Ev,
  (VTBL_ENTRY)&_ZN7S4261C33v15Ev,
  (VTBL_ENTRY)&_ZN7S4261C33v16Ev,
  (VTBL_ENTRY)&_ZN7S4261C33v17Ev,
  (VTBL_ENTRY)&_ZN7S4261C33v18Ev,
  (VTBL_ENTRY)&_ZN7S4261C33v19Ev,
  (VTBL_ENTRY)&_ZN7S4261C33v20Ev,
  (VTBL_ENTRY)&_ZN7S4261C33v21Ev,
  (VTBL_ENTRY)&_ZN7S4261C33v22Ev,
  (VTBL_ENTRY)&_ZN7S4261C33v23Ev,
  (VTBL_ENTRY)&_ZN7S4261C33v24Ev,
  (VTBL_ENTRY)&_ZN7S4261C33v25Ev,
  (VTBL_ENTRY)&_ZN7S4261C33v26Ev,
  (VTBL_ENTRY)&_ZN7S4261C33v27Ev,
  (VTBL_ENTRY)&_ZN7S4261C33v28Ev,
  (VTBL_ENTRY)&_ZN7S4261C33v29Ev,
  (VTBL_ENTRY)&_ZN7S4261C33v30Ev,
  (VTBL_ENTRY)&_ZN7S4261C33v31Ev,
  (VTBL_ENTRY)&_ZN7S4261C33v32Ev,
  (VTBL_ENTRY)&_ZN7S4261C33v33Ev,
  (VTBL_ENTRY)&_ZN7S4261C33v34Ev,
  (VTBL_ENTRY)&_ZN7S4261C33v35Ev,
  (VTBL_ENTRY)&_ZN7S4261C33v36Ev,
  (VTBL_ENTRY)&_ZN7S4261C33v37Ev,
  (VTBL_ENTRY)&_ZN7S4261C33v38Ev,
  (VTBL_ENTRY)&_ZN7S4261C33v39Ev,
  (VTBL_ENTRY)&_ZN7S4261C23v40Ev,
  (VTBL_ENTRY)&_ZN7S4261C23v41Ev,
  (VTBL_ENTRY)&_ZN7S4261C23v42Ev,
  (VTBL_ENTRY)&_ZN7S4261C23v43Ev,
  (VTBL_ENTRY)&_ZN7S4261C23v44Ev,
  (VTBL_ENTRY)&_ZN7S4261C23v45Ev,
  (VTBL_ENTRY)&_ZN7S4261C23v46Ev,
  (VTBL_ENTRY)&_ZN7S4261C23v47Ev,
  (VTBL_ENTRY)&_ZN7S4261C23v48Ev,
  (VTBL_ENTRY)&_ZN7S4261C23v49Ev,
  (VTBL_ENTRY)&_ZN7S4261C23v50Ev,
  (VTBL_ENTRY)&_ZN7S4261C23v51Ev,
  (VTBL_ENTRY)&_ZN7S4261C23v52Ev,
  (VTBL_ENTRY)&_ZN7S4261C23v53Ev,
  (VTBL_ENTRY)&_ZN7S4261C12v1Ev,
  (VTBL_ENTRY)&_ZN7S4261C12v2Ev,
  (VTBL_ENTRY)&_ZN7S4261C12v3Ev,
  (VTBL_ENTRY)&_ZN7S4261C12v4Ev,
  (VTBL_ENTRY)&_ZN7S4261C12v5Ev,
  (VTBL_ENTRY)&_ZN7S4261C12v6Ev,
  (VTBL_ENTRY)&_ZN7S4261C12v7Ev,
  (VTBL_ENTRY)&_ZN7S4261C12v8Ev,
  (VTBL_ENTRY)&_ZN7S4261C12v9Ev,
  (VTBL_ENTRY)&_ZN7S4261C13v10Ev,
  (VTBL_ENTRY)&_ZN7S4261C13v11Ev,
  (VTBL_ENTRY)&_ZN7S4261C13v12Ev,
  (VTBL_ENTRY)&_ZN7S4261C13v13Ev,
  ABISELECT(-72,-48),
  (VTBL_ENTRY)&(_ZTI7S4261C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn72_N7S4261C1D1Ev,_ZThn48_N7S4261C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn72_N7S4261C1D0Ev,_ZThn48_N7S4261C1D0Ev),
  (VTBL_ENTRY)&_ZN7S4261C53v54Ev,
  (VTBL_ENTRY)&_ZN7S4261C53v55Ev,
};
extern VTBL_ENTRY _ZTI7S4261C1[];
extern  VTBL_ENTRY _ZTV7S4261C1[];
Class_Descriptor cd_S4261C1 = {  "S4261C1", // class name
  bases_S4261C1, 3,
  &(vtc_S4261C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(304,212), // object size
  NSPAIRA(_ZTI7S4261C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S4261C1),63, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4264C3  {
  virtual  ~S4264C3(); // _ZN7S4264C3D1Ev
  virtual void  v14(); // _ZN7S4264C33v14Ev
  virtual void  v15(); // _ZN7S4264C33v15Ev
  virtual void  v16(); // _ZN7S4264C33v16Ev
  virtual void  v17(); // _ZN7S4264C33v17Ev
  virtual void  v18(); // _ZN7S4264C33v18Ev
  virtual void  v19(); // _ZN7S4264C33v19Ev
  virtual void  v20(); // _ZN7S4264C33v20Ev
  virtual void  v21(); // _ZN7S4264C33v21Ev
  virtual void  v22(); // _ZN7S4264C33v22Ev
  virtual void  v23(); // _ZN7S4264C33v23Ev
  virtual void  v24(); // _ZN7S4264C33v24Ev
  virtual void  v25(); // _ZN7S4264C33v25Ev
  virtual void  v26(); // _ZN7S4264C33v26Ev
  virtual void  v27(); // _ZN7S4264C33v27Ev
  virtual void  v28(); // _ZN7S4264C33v28Ev
  virtual void  v29(); // _ZN7S4264C33v29Ev
  virtual void  v30(); // _ZN7S4264C33v30Ev
  virtual void  v31(); // _ZN7S4264C33v31Ev
  virtual void  v32(); // _ZN7S4264C33v32Ev
  virtual void  v33(); // _ZN7S4264C33v33Ev
  virtual void  v34(); // _ZN7S4264C33v34Ev
  virtual void  v35(); // _ZN7S4264C33v35Ev
  virtual void  v36(); // _ZN7S4264C33v36Ev
  virtual void  v37(); // _ZN7S4264C33v37Ev
  virtual void  v38(); // _ZN7S4264C33v38Ev
  virtual void  v39(); // _ZN7S4264C33v39Ev
  S4264C3(); // tgen
};
//SIG(-1 S4264C3) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26}


 S4264C3 ::~S4264C3(){ note_dtor("S4264C3", this);}
void  S4264C3 ::v14(){vfunc_called(this, "_ZN7S4264C33v14Ev");}
void  S4264C3 ::v15(){vfunc_called(this, "_ZN7S4264C33v15Ev");}
void  S4264C3 ::v16(){vfunc_called(this, "_ZN7S4264C33v16Ev");}
void  S4264C3 ::v17(){vfunc_called(this, "_ZN7S4264C33v17Ev");}
void  S4264C3 ::v18(){vfunc_called(this, "_ZN7S4264C33v18Ev");}
void  S4264C3 ::v19(){vfunc_called(this, "_ZN7S4264C33v19Ev");}
void  S4264C3 ::v20(){vfunc_called(this, "_ZN7S4264C33v20Ev");}
void  S4264C3 ::v21(){vfunc_called(this, "_ZN7S4264C33v21Ev");}
void  S4264C3 ::v22(){vfunc_called(this, "_ZN7S4264C33v22Ev");}
void  S4264C3 ::v23(){vfunc_called(this, "_ZN7S4264C33v23Ev");}
void  S4264C3 ::v24(){vfunc_called(this, "_ZN7S4264C33v24Ev");}
void  S4264C3 ::v25(){vfunc_called(this, "_ZN7S4264C33v25Ev");}
void  S4264C3 ::v26(){vfunc_called(this, "_ZN7S4264C33v26Ev");}
void  S4264C3 ::v27(){vfunc_called(this, "_ZN7S4264C33v27Ev");}
void  S4264C3 ::v28(){vfunc_called(this, "_ZN7S4264C33v28Ev");}
void  S4264C3 ::v29(){vfunc_called(this, "_ZN7S4264C33v29Ev");}
void  S4264C3 ::v30(){vfunc_called(this, "_ZN7S4264C33v30Ev");}
void  S4264C3 ::v31(){vfunc_called(this, "_ZN7S4264C33v31Ev");}
void  S4264C3 ::v32(){vfunc_called(this, "_ZN7S4264C33v32Ev");}
void  S4264C3 ::v33(){vfunc_called(this, "_ZN7S4264C33v33Ev");}
void  S4264C3 ::v34(){vfunc_called(this, "_ZN7S4264C33v34Ev");}
void  S4264C3 ::v35(){vfunc_called(this, "_ZN7S4264C33v35Ev");}
void  S4264C3 ::v36(){vfunc_called(this, "_ZN7S4264C33v36Ev");}
void  S4264C3 ::v37(){vfunc_called(this, "_ZN7S4264C33v37Ev");}
void  S4264C3 ::v38(){vfunc_called(this, "_ZN7S4264C33v38Ev");}
void  S4264C3 ::v39(){vfunc_called(this, "_ZN7S4264C33v39Ev");}
S4264C3 ::S4264C3(){ note_ctor("S4264C3", this);} // tgen

static void Test_S4264C3()
{
  extern Class_Descriptor cd_S4264C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S4264C3, buf);
    S4264C3 *dp, &lv = *(dp=new (buf) S4264C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S4264C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4264C3)");
    test_class_info(&lv, &cd_S4264C3);
    dp->~S4264C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4264C3(Test_S4264C3, "S4264C3", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S4264C3C1Ev();
extern void _ZN7S4264C3D1Ev();
Name_Map name_map_S4264C3[] = {
  NSPAIR(_ZN7S4264C3C1Ev),
  NSPAIR(_ZN7S4264C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4264C3[];
extern void _ZN7S4264C3D1Ev();
extern void _ZN7S4264C3D0Ev();
extern void _ZN7S4264C33v14Ev();
extern void _ZN7S4264C33v15Ev();
extern void _ZN7S4264C33v16Ev();
extern void _ZN7S4264C33v17Ev();
extern void _ZN7S4264C33v18Ev();
extern void _ZN7S4264C33v19Ev();
extern void _ZN7S4264C33v20Ev();
extern void _ZN7S4264C33v21Ev();
extern void _ZN7S4264C33v22Ev();
extern void _ZN7S4264C33v23Ev();
extern void _ZN7S4264C33v24Ev();
extern void _ZN7S4264C33v25Ev();
extern void _ZN7S4264C33v26Ev();
extern void _ZN7S4264C33v27Ev();
extern void _ZN7S4264C33v28Ev();
extern void _ZN7S4264C33v29Ev();
extern void _ZN7S4264C33v30Ev();
extern void _ZN7S4264C33v31Ev();
extern void _ZN7S4264C33v32Ev();
extern void _ZN7S4264C33v33Ev();
extern void _ZN7S4264C33v34Ev();
extern void _ZN7S4264C33v35Ev();
extern void _ZN7S4264C33v36Ev();
extern void _ZN7S4264C33v37Ev();
extern void _ZN7S4264C33v38Ev();
extern void _ZN7S4264C33v39Ev();
static  VTBL_ENTRY vtc_S4264C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4264C3[0]),
  (VTBL_ENTRY)&_ZN7S4264C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4264C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4264C33v14Ev,
  (VTBL_ENTRY)&_ZN7S4264C33v15Ev,
  (VTBL_ENTRY)&_ZN7S4264C33v16Ev,
  (VTBL_ENTRY)&_ZN7S4264C33v17Ev,
  (VTBL_ENTRY)&_ZN7S4264C33v18Ev,
  (VTBL_ENTRY)&_ZN7S4264C33v19Ev,
  (VTBL_ENTRY)&_ZN7S4264C33v20Ev,
  (VTBL_ENTRY)&_ZN7S4264C33v21Ev,
  (VTBL_ENTRY)&_ZN7S4264C33v22Ev,
  (VTBL_ENTRY)&_ZN7S4264C33v23Ev,
  (VTBL_ENTRY)&_ZN7S4264C33v24Ev,
  (VTBL_ENTRY)&_ZN7S4264C33v25Ev,
  (VTBL_ENTRY)&_ZN7S4264C33v26Ev,
  (VTBL_ENTRY)&_ZN7S4264C33v27Ev,
  (VTBL_ENTRY)&_ZN7S4264C33v28Ev,
  (VTBL_ENTRY)&_ZN7S4264C33v29Ev,
  (VTBL_ENTRY)&_ZN7S4264C33v30Ev,
  (VTBL_ENTRY)&_ZN7S4264C33v31Ev,
  (VTBL_ENTRY)&_ZN7S4264C33v32Ev,
  (VTBL_ENTRY)&_ZN7S4264C33v33Ev,
  (VTBL_ENTRY)&_ZN7S4264C33v34Ev,
  (VTBL_ENTRY)&_ZN7S4264C33v35Ev,
  (VTBL_ENTRY)&_ZN7S4264C33v36Ev,
  (VTBL_ENTRY)&_ZN7S4264C33v37Ev,
  (VTBL_ENTRY)&_ZN7S4264C33v38Ev,
  (VTBL_ENTRY)&_ZN7S4264C33v39Ev,
};
extern VTBL_ENTRY _ZTI7S4264C3[];
extern  VTBL_ENTRY _ZTV7S4264C3[];
Class_Descriptor cd_S4264C3 = {  "S4264C3", // class name
  0,0,//no base classes
  &(vtc_S4264C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S4264C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4264C3),30, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4264C2  : S4264C3 {
  void *s4264c2f0[2];
  int s4264c2f1[4];
  ::S2423C5_nt s4264c2f2;
  void *s4264c2f3;
  char s4264c2f4;
  void *s4264c2f5;
  virtual  ~S4264C2(); // _ZN7S4264C2D1Ev
  virtual void  v40(); // _ZN7S4264C23v40Ev
  virtual void  v41(); // _ZN7S4264C23v41Ev
  virtual void  v42(); // _ZN7S4264C23v42Ev
  virtual void  v43(); // _ZN7S4264C23v43Ev
  virtual void  v44(); // _ZN7S4264C23v44Ev
  virtual void  v45(); // _ZN7S4264C23v45Ev
  virtual void  v46(); // _ZN7S4264C23v46Ev
  virtual void  v47(); // _ZN7S4264C23v47Ev
  virtual void  v48(); // _ZN7S4264C23v48Ev
  virtual void  v49(); // _ZN7S4264C23v49Ev
  virtual void  v50(); // _ZN7S4264C23v50Ev
  virtual void  v51(); // _ZN7S4264C23v51Ev
  virtual void  v52(); // _ZN7S4264C23v52Ev
  virtual void  v53(); // _ZN7S4264C23v53Ev
  S4264C2(); // tgen
};
//SIG(-1 S4264C2) C1{ BC2{ vd v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 Fp[2] Fi[4] FC3{ Fi[2]} Fp Fc Fp}


 S4264C2 ::~S4264C2(){ note_dtor("S4264C2", this);}
void  S4264C2 ::v40(){vfunc_called(this, "_ZN7S4264C23v40Ev");}
void  S4264C2 ::v41(){vfunc_called(this, "_ZN7S4264C23v41Ev");}
void  S4264C2 ::v42(){vfunc_called(this, "_ZN7S4264C23v42Ev");}
void  S4264C2 ::v43(){vfunc_called(this, "_ZN7S4264C23v43Ev");}
void  S4264C2 ::v44(){vfunc_called(this, "_ZN7S4264C23v44Ev");}
void  S4264C2 ::v45(){vfunc_called(this, "_ZN7S4264C23v45Ev");}
void  S4264C2 ::v46(){vfunc_called(this, "_ZN7S4264C23v46Ev");}
void  S4264C2 ::v47(){vfunc_called(this, "_ZN7S4264C23v47Ev");}
void  S4264C2 ::v48(){vfunc_called(this, "_ZN7S4264C23v48Ev");}
void  S4264C2 ::v49(){vfunc_called(this, "_ZN7S4264C23v49Ev");}
void  S4264C2 ::v50(){vfunc_called(this, "_ZN7S4264C23v50Ev");}
void  S4264C2 ::v51(){vfunc_called(this, "_ZN7S4264C23v51Ev");}
void  S4264C2 ::v52(){vfunc_called(this, "_ZN7S4264C23v52Ev");}
void  S4264C2 ::v53(){vfunc_called(this, "_ZN7S4264C23v53Ev");}
S4264C2 ::S4264C2(){ note_ctor("S4264C2", this);} // tgen

static void Test_S4264C2()
{
  extern Class_Descriptor cd_S4264C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,13)];
    init_test(&cd_S4264C2, buf);
    S4264C2 *dp, &lv = *(dp=new (buf) S4264C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,48), "sizeof(S4264C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4264C2)");
    check_base_class_offset(lv, (S4264C3*), 0, "S4264C2");
    check_field_offset(lv, s4264c2f0, ABISELECT(8,4), "S4264C2.s4264c2f0");
    check_field_offset(lv, s4264c2f1, ABISELECT(24,12), "S4264C2.s4264c2f1");
    check_field_offset(lv, s4264c2f2, ABISELECT(40,28), "S4264C2.s4264c2f2");
    check_field_offset(lv, s4264c2f3, ABISELECT(48,36), "S4264C2.s4264c2f3");
    check_field_offset(lv, s4264c2f4, ABISELECT(56,40), "S4264C2.s4264c2f4");
    check_field_offset(lv, s4264c2f5, ABISELECT(64,44), "S4264C2.s4264c2f5");
    test_class_info(&lv, &cd_S4264C2);
    dp->~S4264C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4264C2(Test_S4264C2, "S4264C2", ABISELECT(72,48));

#else // __cplusplus

extern void _ZN7S4264C2C1Ev();
extern void _ZN7S4264C2D1Ev();
Name_Map name_map_S4264C2[] = {
  NSPAIR(_ZN7S4264C2C1Ev),
  NSPAIR(_ZN7S4264C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4264C3;
extern VTBL_ENTRY _ZTI7S4264C3[];
extern  VTBL_ENTRY _ZTV7S4264C3[];
static Base_Class bases_S4264C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4264C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4264C2[];
extern void _ZN7S4264C2D1Ev();
extern void _ZN7S4264C2D0Ev();
extern void _ZN7S4264C33v14Ev();
extern void _ZN7S4264C33v15Ev();
extern void _ZN7S4264C33v16Ev();
extern void _ZN7S4264C33v17Ev();
extern void _ZN7S4264C33v18Ev();
extern void _ZN7S4264C33v19Ev();
extern void _ZN7S4264C33v20Ev();
extern void _ZN7S4264C33v21Ev();
extern void _ZN7S4264C33v22Ev();
extern void _ZN7S4264C33v23Ev();
extern void _ZN7S4264C33v24Ev();
extern void _ZN7S4264C33v25Ev();
extern void _ZN7S4264C33v26Ev();
extern void _ZN7S4264C33v27Ev();
extern void _ZN7S4264C33v28Ev();
extern void _ZN7S4264C33v29Ev();
extern void _ZN7S4264C33v30Ev();
extern void _ZN7S4264C33v31Ev();
extern void _ZN7S4264C33v32Ev();
extern void _ZN7S4264C33v33Ev();
extern void _ZN7S4264C33v34Ev();
extern void _ZN7S4264C33v35Ev();
extern void _ZN7S4264C33v36Ev();
extern void _ZN7S4264C33v37Ev();
extern void _ZN7S4264C33v38Ev();
extern void _ZN7S4264C33v39Ev();
extern void _ZN7S4264C23v40Ev();
extern void _ZN7S4264C23v41Ev();
extern void _ZN7S4264C23v42Ev();
extern void _ZN7S4264C23v43Ev();
extern void _ZN7S4264C23v44Ev();
extern void _ZN7S4264C23v45Ev();
extern void _ZN7S4264C23v46Ev();
extern void _ZN7S4264C23v47Ev();
extern void _ZN7S4264C23v48Ev();
extern void _ZN7S4264C23v49Ev();
extern void _ZN7S4264C23v50Ev();
extern void _ZN7S4264C23v51Ev();
extern void _ZN7S4264C23v52Ev();
extern void _ZN7S4264C23v53Ev();
static  VTBL_ENTRY vtc_S4264C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4264C2[0]),
  (VTBL_ENTRY)&_ZN7S4264C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4264C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4264C33v14Ev,
  (VTBL_ENTRY)&_ZN7S4264C33v15Ev,
  (VTBL_ENTRY)&_ZN7S4264C33v16Ev,
  (VTBL_ENTRY)&_ZN7S4264C33v17Ev,
  (VTBL_ENTRY)&_ZN7S4264C33v18Ev,
  (VTBL_ENTRY)&_ZN7S4264C33v19Ev,
  (VTBL_ENTRY)&_ZN7S4264C33v20Ev,
  (VTBL_ENTRY)&_ZN7S4264C33v21Ev,
  (VTBL_ENTRY)&_ZN7S4264C33v22Ev,
  (VTBL_ENTRY)&_ZN7S4264C33v23Ev,
  (VTBL_ENTRY)&_ZN7S4264C33v24Ev,
  (VTBL_ENTRY)&_ZN7S4264C33v25Ev,
  (VTBL_ENTRY)&_ZN7S4264C33v26Ev,
  (VTBL_ENTRY)&_ZN7S4264C33v27Ev,
  (VTBL_ENTRY)&_ZN7S4264C33v28Ev,
  (VTBL_ENTRY)&_ZN7S4264C33v29Ev,
  (VTBL_ENTRY)&_ZN7S4264C33v30Ev,
  (VTBL_ENTRY)&_ZN7S4264C33v31Ev,
  (VTBL_ENTRY)&_ZN7S4264C33v32Ev,
  (VTBL_ENTRY)&_ZN7S4264C33v33Ev,
  (VTBL_ENTRY)&_ZN7S4264C33v34Ev,
  (VTBL_ENTRY)&_ZN7S4264C33v35Ev,
  (VTBL_ENTRY)&_ZN7S4264C33v36Ev,
  (VTBL_ENTRY)&_ZN7S4264C33v37Ev,
  (VTBL_ENTRY)&_ZN7S4264C33v38Ev,
  (VTBL_ENTRY)&_ZN7S4264C33v39Ev,
  (VTBL_ENTRY)&_ZN7S4264C23v40Ev,
  (VTBL_ENTRY)&_ZN7S4264C23v41Ev,
  (VTBL_ENTRY)&_ZN7S4264C23v42Ev,
  (VTBL_ENTRY)&_ZN7S4264C23v43Ev,
  (VTBL_ENTRY)&_ZN7S4264C23v44Ev,
  (VTBL_ENTRY)&_ZN7S4264C23v45Ev,
  (VTBL_ENTRY)&_ZN7S4264C23v46Ev,
  (VTBL_ENTRY)&_ZN7S4264C23v47Ev,
  (VTBL_ENTRY)&_ZN7S4264C23v48Ev,
  (VTBL_ENTRY)&_ZN7S4264C23v49Ev,
  (VTBL_ENTRY)&_ZN7S4264C23v50Ev,
  (VTBL_ENTRY)&_ZN7S4264C23v51Ev,
  (VTBL_ENTRY)&_ZN7S4264C23v52Ev,
  (VTBL_ENTRY)&_ZN7S4264C23v53Ev,
};
extern VTBL_ENTRY _ZTI7S4264C2[];
extern  VTBL_ENTRY _ZTV7S4264C2[];
Class_Descriptor cd_S4264C2 = {  "S4264C2", // class name
  bases_S4264C2, 1,
  &(vtc_S4264C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,48), // object size
  NSPAIRA(_ZTI7S4264C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4264C2),44, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4264C5  {
  void *s4264c5f0;
  char s4264c5f1[32];
  int s4264c5f2[6];
  char s4264c5f3;
  int s4264c5f4[2];
  virtual  ~S4264C5(); // _ZN7S4264C5D1Ev
  virtual void  v54(); // _ZN7S4264C53v54Ev
  virtual void  v55(); // _ZN7S4264C53v55Ev
  S4264C5(); // tgen
};
//SIG(-1 S4264C5) C1{ vd v1 v2 Fp Fc[32] Fi[6] Fc Fi[2]}


 S4264C5 ::~S4264C5(){ note_dtor("S4264C5", this);}
void  S4264C5 ::v54(){vfunc_called(this, "_ZN7S4264C53v54Ev");}
void  S4264C5 ::v55(){vfunc_called(this, "_ZN7S4264C53v55Ev");}
S4264C5 ::S4264C5(){ note_ctor("S4264C5", this);} // tgen

static void Test_S4264C5()
{
  extern Class_Descriptor cd_S4264C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(12,20)];
    init_test(&cd_S4264C5, buf);
    S4264C5 *dp, &lv = *(dp=new (buf) S4264C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(88,76), "sizeof(S4264C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4264C5)");
    check_field_offset(lv, s4264c5f0, ABISELECT(8,4), "S4264C5.s4264c5f0");
    check_field_offset(lv, s4264c5f1, ABISELECT(16,8), "S4264C5.s4264c5f1");
    check_field_offset(lv, s4264c5f2, ABISELECT(48,40), "S4264C5.s4264c5f2");
    check_field_offset(lv, s4264c5f3, ABISELECT(72,64), "S4264C5.s4264c5f3");
    check_field_offset(lv, s4264c5f4, ABISELECT(76,68), "S4264C5.s4264c5f4");
    test_class_info(&lv, &cd_S4264C5);
    dp->~S4264C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4264C5(Test_S4264C5, "S4264C5", ABISELECT(88,76));

#else // __cplusplus

extern void _ZN7S4264C5C1Ev();
extern void _ZN7S4264C5D1Ev();
Name_Map name_map_S4264C5[] = {
  NSPAIR(_ZN7S4264C5C1Ev),
  NSPAIR(_ZN7S4264C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4264C5[];
extern void _ZN7S4264C5D1Ev();
extern void _ZN7S4264C5D0Ev();
extern void _ZN7S4264C53v54Ev();
extern void _ZN7S4264C53v55Ev();
static  VTBL_ENTRY vtc_S4264C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4264C5[0]),
  (VTBL_ENTRY)&_ZN7S4264C5D1Ev,
  (VTBL_ENTRY)&_ZN7S4264C5D0Ev,
  (VTBL_ENTRY)&_ZN7S4264C53v54Ev,
  (VTBL_ENTRY)&_ZN7S4264C53v55Ev,
};
extern VTBL_ENTRY _ZTI7S4264C5[];
extern  VTBL_ENTRY _ZTV7S4264C5[];
Class_Descriptor cd_S4264C5 = {  "S4264C5", // class name
  0,0,//no base classes
  &(vtc_S4264C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(88,76), // object size
  NSPAIRA(_ZTI7S4264C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4264C5),6, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4264C1  : S4264C2 , S4264C5 {
  void *s4264c1f0[2];
  long s4264c1f1[2];
  __tsi64 s4264c1f2[2];
  long s4264c1f3;
  int s4264c1f4[2];
  void *s4264c1f5[6];
  long s4264c1f6[2];
  virtual  ~S4264C1(); // _ZN7S4264C1D1Ev
  virtual void  v1(); // _ZN7S4264C12v1Ev
  virtual void  v2(); // _ZN7S4264C12v2Ev
  virtual void  v3(); // _ZN7S4264C12v3Ev
  virtual void  v4(); // _ZN7S4264C12v4Ev
  virtual void  v5(); // _ZN7S4264C12v5Ev
  virtual void  v6(); // _ZN7S4264C12v6Ev
  virtual void  v7(); // _ZN7S4264C12v7Ev
  virtual void  v8(); // _ZN7S4264C12v8Ev
  virtual void  v9(); // _ZN7S4264C12v9Ev
  virtual void  v10(); // _ZN7S4264C13v10Ev
  virtual void  v11(); // _ZN7S4264C13v11Ev
  virtual void  v12(); // _ZN7S4264C13v12Ev
  virtual void  v13(); // _ZN7S4264C13v13Ev
  S4264C1(); // tgen
};
//SIG(1 S4264C1) C1{ BC2{ BC3{ vd v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39} vd v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 Fp[2] Fi[4] FC4{ Fi[2]} Fp Fc Fp} BC5{ vd v54 v55 Fp Fc[32] Fi[6] Fc Fi[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 Fp[2] Fl[2] FL[2] Fl Fi[2] Fp[6] Fl[2]}


 S4264C1 ::~S4264C1(){ note_dtor("S4264C1", this);}
void  S4264C1 ::v1(){vfunc_called(this, "_ZN7S4264C12v1Ev");}
void  S4264C1 ::v2(){vfunc_called(this, "_ZN7S4264C12v2Ev");}
void  S4264C1 ::v3(){vfunc_called(this, "_ZN7S4264C12v3Ev");}
void  S4264C1 ::v4(){vfunc_called(this, "_ZN7S4264C12v4Ev");}
void  S4264C1 ::v5(){vfunc_called(this, "_ZN7S4264C12v5Ev");}
void  S4264C1 ::v6(){vfunc_called(this, "_ZN7S4264C12v6Ev");}
void  S4264C1 ::v7(){vfunc_called(this, "_ZN7S4264C12v7Ev");}
void  S4264C1 ::v8(){vfunc_called(this, "_ZN7S4264C12v8Ev");}
void  S4264C1 ::v9(){vfunc_called(this, "_ZN7S4264C12v9Ev");}
void  S4264C1 ::v10(){vfunc_called(this, "_ZN7S4264C13v10Ev");}
void  S4264C1 ::v11(){vfunc_called(this, "_ZN7S4264C13v11Ev");}
void  S4264C1 ::v12(){vfunc_called(this, "_ZN7S4264C13v12Ev");}
void  S4264C1 ::v13(){vfunc_called(this, "_ZN7S4264C13v13Ev");}
S4264C1 ::S4264C1(){ note_ctor("S4264C1", this);} // tgen

static void Test_S4264C1()
{
  extern Class_Descriptor cd_S4264C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(37,51)];
    init_test(&cd_S4264C1, buf);
    S4264C1 *dp, &lv = *(dp=new (buf) S4264C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(288,200), "sizeof(S4264C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4264C1)");
    check_base_class_offset(lv, (S4264C3*)(S4264C2*), 0, "S4264C1");
    check_base_class_offset(lv, (S4264C2*), 0, "S4264C1");
    check_base_class_offset(lv, (S4264C5*), ABISELECT(72,48), "S4264C1");
    check_field_offset(lv, s4264c1f0, ABISELECT(160,124), "S4264C1.s4264c1f0");
    check_field_offset(lv, s4264c1f1, ABISELECT(176,132), "S4264C1.s4264c1f1");
    check_field_offset(lv, s4264c1f2, ABISELECT(192,140), "S4264C1.s4264c1f2");
    check_field_offset(lv, s4264c1f3, ABISELECT(208,156), "S4264C1.s4264c1f3");
    check_field_offset(lv, s4264c1f4, ABISELECT(216,160), "S4264C1.s4264c1f4");
    check_field_offset(lv, s4264c1f5, ABISELECT(224,168), "S4264C1.s4264c1f5");
    check_field_offset(lv, s4264c1f6, ABISELECT(272,192), "S4264C1.s4264c1f6");
    test_class_info(&lv, &cd_S4264C1);
    dp->~S4264C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4264C1(Test_S4264C1, "S4264C1", ABISELECT(288,200));

#else // __cplusplus

extern void _ZN7S4264C1C1Ev();
extern void _ZN7S4264C1D1Ev();
Name_Map name_map_S4264C1[] = {
  NSPAIR(_ZN7S4264C1C1Ev),
  NSPAIR(_ZN7S4264C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4264C3;
extern VTBL_ENTRY _ZTI7S4264C3[];
extern  VTBL_ENTRY _ZTV7S4264C3[];
extern Class_Descriptor cd_S4264C2;
extern VTBL_ENTRY _ZTI7S4264C2[];
extern  VTBL_ENTRY _ZTV7S4264C2[];
extern Class_Descriptor cd_S4264C5;
extern VTBL_ENTRY _ZTI7S4264C5[];
extern  VTBL_ENTRY _ZTV7S4264C5[];
static Base_Class bases_S4264C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4264C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S4264C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S4264C5,    ABISELECT(72,48), //bcp->offset
    57, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4264C1[];
extern void _ZN7S4264C1D1Ev();
extern void _ZN7S4264C1D0Ev();
extern void _ZN7S4264C33v14Ev();
extern void _ZN7S4264C33v15Ev();
extern void _ZN7S4264C33v16Ev();
extern void _ZN7S4264C33v17Ev();
extern void _ZN7S4264C33v18Ev();
extern void _ZN7S4264C33v19Ev();
extern void _ZN7S4264C33v20Ev();
extern void _ZN7S4264C33v21Ev();
extern void _ZN7S4264C33v22Ev();
extern void _ZN7S4264C33v23Ev();
extern void _ZN7S4264C33v24Ev();
extern void _ZN7S4264C33v25Ev();
extern void _ZN7S4264C33v26Ev();
extern void _ZN7S4264C33v27Ev();
extern void _ZN7S4264C33v28Ev();
extern void _ZN7S4264C33v29Ev();
extern void _ZN7S4264C33v30Ev();
extern void _ZN7S4264C33v31Ev();
extern void _ZN7S4264C33v32Ev();
extern void _ZN7S4264C33v33Ev();
extern void _ZN7S4264C33v34Ev();
extern void _ZN7S4264C33v35Ev();
extern void _ZN7S4264C33v36Ev();
extern void _ZN7S4264C33v37Ev();
extern void _ZN7S4264C33v38Ev();
extern void _ZN7S4264C33v39Ev();
extern void _ZN7S4264C23v40Ev();
extern void _ZN7S4264C23v41Ev();
extern void _ZN7S4264C23v42Ev();
extern void _ZN7S4264C23v43Ev();
extern void _ZN7S4264C23v44Ev();
extern void _ZN7S4264C23v45Ev();
extern void _ZN7S4264C23v46Ev();
extern void _ZN7S4264C23v47Ev();
extern void _ZN7S4264C23v48Ev();
extern void _ZN7S4264C23v49Ev();
extern void _ZN7S4264C23v50Ev();
extern void _ZN7S4264C23v51Ev();
extern void _ZN7S4264C23v52Ev();
extern void _ZN7S4264C23v53Ev();
extern void _ZN7S4264C12v1Ev();
extern void _ZN7S4264C12v2Ev();
extern void _ZN7S4264C12v3Ev();
extern void _ZN7S4264C12v4Ev();
extern void _ZN7S4264C12v5Ev();
extern void _ZN7S4264C12v6Ev();
extern void _ZN7S4264C12v7Ev();
extern void _ZN7S4264C12v8Ev();
extern void _ZN7S4264C12v9Ev();
extern void _ZN7S4264C13v10Ev();
extern void _ZN7S4264C13v11Ev();
extern void _ZN7S4264C13v12Ev();
extern void _ZN7S4264C13v13Ev();
extern void ABISELECT(_ZThn72_N7S4264C1D1Ev,_ZThn48_N7S4264C1D1Ev)();
extern void ABISELECT(_ZThn72_N7S4264C1D0Ev,_ZThn48_N7S4264C1D0Ev)();
extern void _ZN7S4264C53v54Ev();
extern void _ZN7S4264C53v55Ev();
static  VTBL_ENTRY vtc_S4264C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4264C1[0]),
  (VTBL_ENTRY)&_ZN7S4264C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4264C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4264C33v14Ev,
  (VTBL_ENTRY)&_ZN7S4264C33v15Ev,
  (VTBL_ENTRY)&_ZN7S4264C33v16Ev,
  (VTBL_ENTRY)&_ZN7S4264C33v17Ev,
  (VTBL_ENTRY)&_ZN7S4264C33v18Ev,
  (VTBL_ENTRY)&_ZN7S4264C33v19Ev,
  (VTBL_ENTRY)&_ZN7S4264C33v20Ev,
  (VTBL_ENTRY)&_ZN7S4264C33v21Ev,
  (VTBL_ENTRY)&_ZN7S4264C33v22Ev,
  (VTBL_ENTRY)&_ZN7S4264C33v23Ev,
  (VTBL_ENTRY)&_ZN7S4264C33v24Ev,
  (VTBL_ENTRY)&_ZN7S4264C33v25Ev,
  (VTBL_ENTRY)&_ZN7S4264C33v26Ev,
  (VTBL_ENTRY)&_ZN7S4264C33v27Ev,
  (VTBL_ENTRY)&_ZN7S4264C33v28Ev,
  (VTBL_ENTRY)&_ZN7S4264C33v29Ev,
  (VTBL_ENTRY)&_ZN7S4264C33v30Ev,
  (VTBL_ENTRY)&_ZN7S4264C33v31Ev,
  (VTBL_ENTRY)&_ZN7S4264C33v32Ev,
  (VTBL_ENTRY)&_ZN7S4264C33v33Ev,
  (VTBL_ENTRY)&_ZN7S4264C33v34Ev,
  (VTBL_ENTRY)&_ZN7S4264C33v35Ev,
  (VTBL_ENTRY)&_ZN7S4264C33v36Ev,
  (VTBL_ENTRY)&_ZN7S4264C33v37Ev,
  (VTBL_ENTRY)&_ZN7S4264C33v38Ev,
  (VTBL_ENTRY)&_ZN7S4264C33v39Ev,
  (VTBL_ENTRY)&_ZN7S4264C23v40Ev,
  (VTBL_ENTRY)&_ZN7S4264C23v41Ev,
  (VTBL_ENTRY)&_ZN7S4264C23v42Ev,
  (VTBL_ENTRY)&_ZN7S4264C23v43Ev,
  (VTBL_ENTRY)&_ZN7S4264C23v44Ev,
  (VTBL_ENTRY)&_ZN7S4264C23v45Ev,
  (VTBL_ENTRY)&_ZN7S4264C23v46Ev,
  (VTBL_ENTRY)&_ZN7S4264C23v47Ev,
  (VTBL_ENTRY)&_ZN7S4264C23v48Ev,
  (VTBL_ENTRY)&_ZN7S4264C23v49Ev,
  (VTBL_ENTRY)&_ZN7S4264C23v50Ev,
  (VTBL_ENTRY)&_ZN7S4264C23v51Ev,
  (VTBL_ENTRY)&_ZN7S4264C23v52Ev,
  (VTBL_ENTRY)&_ZN7S4264C23v53Ev,
  (VTBL_ENTRY)&_ZN7S4264C12v1Ev,
  (VTBL_ENTRY)&_ZN7S4264C12v2Ev,
  (VTBL_ENTRY)&_ZN7S4264C12v3Ev,
  (VTBL_ENTRY)&_ZN7S4264C12v4Ev,
  (VTBL_ENTRY)&_ZN7S4264C12v5Ev,
  (VTBL_ENTRY)&_ZN7S4264C12v6Ev,
  (VTBL_ENTRY)&_ZN7S4264C12v7Ev,
  (VTBL_ENTRY)&_ZN7S4264C12v8Ev,
  (VTBL_ENTRY)&_ZN7S4264C12v9Ev,
  (VTBL_ENTRY)&_ZN7S4264C13v10Ev,
  (VTBL_ENTRY)&_ZN7S4264C13v11Ev,
  (VTBL_ENTRY)&_ZN7S4264C13v12Ev,
  (VTBL_ENTRY)&_ZN7S4264C13v13Ev,
  ABISELECT(-72,-48),
  (VTBL_ENTRY)&(_ZTI7S4264C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn72_N7S4264C1D1Ev,_ZThn48_N7S4264C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn72_N7S4264C1D0Ev,_ZThn48_N7S4264C1D0Ev),
  (VTBL_ENTRY)&_ZN7S4264C53v54Ev,
  (VTBL_ENTRY)&_ZN7S4264C53v55Ev,
};
extern VTBL_ENTRY _ZTI7S4264C1[];
extern  VTBL_ENTRY _ZTV7S4264C1[];
Class_Descriptor cd_S4264C1 = {  "S4264C1", // class name
  bases_S4264C1, 3,
  &(vtc_S4264C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(288,200), // object size
  NSPAIRA(_ZTI7S4264C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S4264C1),63, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4300C3  {
  virtual  ~S4300C3(); // _ZN7S4300C3D1Ev
  virtual void  v18(); // _ZN7S4300C33v18Ev
  virtual void  v19(); // _ZN7S4300C33v19Ev
  virtual void  v20(); // _ZN7S4300C33v20Ev
  virtual void  v21(); // _ZN7S4300C33v21Ev
  virtual void  v22(); // _ZN7S4300C33v22Ev
  virtual void  v23(); // _ZN7S4300C33v23Ev
  virtual void  v24(); // _ZN7S4300C33v24Ev
  virtual void  v25(); // _ZN7S4300C33v25Ev
  virtual void  v26(); // _ZN7S4300C33v26Ev
  virtual void  v27(); // _ZN7S4300C33v27Ev
  virtual void  v28(); // _ZN7S4300C33v28Ev
  virtual void  v29(); // _ZN7S4300C33v29Ev
  virtual void  v30(); // _ZN7S4300C33v30Ev
  virtual void  v31(); // _ZN7S4300C33v31Ev
  virtual void  v32(); // _ZN7S4300C33v32Ev
  virtual void  v33(); // _ZN7S4300C33v33Ev
  virtual void  v34(); // _ZN7S4300C33v34Ev
  virtual void  v35(); // _ZN7S4300C33v35Ev
  virtual void  v36(); // _ZN7S4300C33v36Ev
  virtual void  v37(); // _ZN7S4300C33v37Ev
  virtual void  v38(); // _ZN7S4300C33v38Ev
  virtual void  v39(); // _ZN7S4300C33v39Ev
  virtual void  v40(); // _ZN7S4300C33v40Ev
  virtual void  v41(); // _ZN7S4300C33v41Ev
  virtual void  v42(); // _ZN7S4300C33v42Ev
  virtual void  v43(); // _ZN7S4300C33v43Ev
  S4300C3(); // tgen
};
//SIG(-1 S4300C3) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26}


 S4300C3 ::~S4300C3(){ note_dtor("S4300C3", this);}
void  S4300C3 ::v18(){vfunc_called(this, "_ZN7S4300C33v18Ev");}
void  S4300C3 ::v19(){vfunc_called(this, "_ZN7S4300C33v19Ev");}
void  S4300C3 ::v20(){vfunc_called(this, "_ZN7S4300C33v20Ev");}
void  S4300C3 ::v21(){vfunc_called(this, "_ZN7S4300C33v21Ev");}
void  S4300C3 ::v22(){vfunc_called(this, "_ZN7S4300C33v22Ev");}
void  S4300C3 ::v23(){vfunc_called(this, "_ZN7S4300C33v23Ev");}
void  S4300C3 ::v24(){vfunc_called(this, "_ZN7S4300C33v24Ev");}
void  S4300C3 ::v25(){vfunc_called(this, "_ZN7S4300C33v25Ev");}
void  S4300C3 ::v26(){vfunc_called(this, "_ZN7S4300C33v26Ev");}
void  S4300C3 ::v27(){vfunc_called(this, "_ZN7S4300C33v27Ev");}
void  S4300C3 ::v28(){vfunc_called(this, "_ZN7S4300C33v28Ev");}
void  S4300C3 ::v29(){vfunc_called(this, "_ZN7S4300C33v29Ev");}
void  S4300C3 ::v30(){vfunc_called(this, "_ZN7S4300C33v30Ev");}
void  S4300C3 ::v31(){vfunc_called(this, "_ZN7S4300C33v31Ev");}
void  S4300C3 ::v32(){vfunc_called(this, "_ZN7S4300C33v32Ev");}
void  S4300C3 ::v33(){vfunc_called(this, "_ZN7S4300C33v33Ev");}
void  S4300C3 ::v34(){vfunc_called(this, "_ZN7S4300C33v34Ev");}
void  S4300C3 ::v35(){vfunc_called(this, "_ZN7S4300C33v35Ev");}
void  S4300C3 ::v36(){vfunc_called(this, "_ZN7S4300C33v36Ev");}
void  S4300C3 ::v37(){vfunc_called(this, "_ZN7S4300C33v37Ev");}
void  S4300C3 ::v38(){vfunc_called(this, "_ZN7S4300C33v38Ev");}
void  S4300C3 ::v39(){vfunc_called(this, "_ZN7S4300C33v39Ev");}
void  S4300C3 ::v40(){vfunc_called(this, "_ZN7S4300C33v40Ev");}
void  S4300C3 ::v41(){vfunc_called(this, "_ZN7S4300C33v41Ev");}
void  S4300C3 ::v42(){vfunc_called(this, "_ZN7S4300C33v42Ev");}
void  S4300C3 ::v43(){vfunc_called(this, "_ZN7S4300C33v43Ev");}
S4300C3 ::S4300C3(){ note_ctor("S4300C3", this);} // tgen

static void Test_S4300C3()
{
  extern Class_Descriptor cd_S4300C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S4300C3, buf);
    S4300C3 *dp, &lv = *(dp=new (buf) S4300C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S4300C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4300C3)");
    test_class_info(&lv, &cd_S4300C3);
    dp->~S4300C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4300C3(Test_S4300C3, "S4300C3", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S4300C3C1Ev();
extern void _ZN7S4300C3D1Ev();
Name_Map name_map_S4300C3[] = {
  NSPAIR(_ZN7S4300C3C1Ev),
  NSPAIR(_ZN7S4300C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4300C3[];
extern void _ZN7S4300C3D1Ev();
extern void _ZN7S4300C3D0Ev();
extern void _ZN7S4300C33v18Ev();
extern void _ZN7S4300C33v19Ev();
extern void _ZN7S4300C33v20Ev();
extern void _ZN7S4300C33v21Ev();
extern void _ZN7S4300C33v22Ev();
extern void _ZN7S4300C33v23Ev();
extern void _ZN7S4300C33v24Ev();
extern void _ZN7S4300C33v25Ev();
extern void _ZN7S4300C33v26Ev();
extern void _ZN7S4300C33v27Ev();
extern void _ZN7S4300C33v28Ev();
extern void _ZN7S4300C33v29Ev();
extern void _ZN7S4300C33v30Ev();
extern void _ZN7S4300C33v31Ev();
extern void _ZN7S4300C33v32Ev();
extern void _ZN7S4300C33v33Ev();
extern void _ZN7S4300C33v34Ev();
extern void _ZN7S4300C33v35Ev();
extern void _ZN7S4300C33v36Ev();
extern void _ZN7S4300C33v37Ev();
extern void _ZN7S4300C33v38Ev();
extern void _ZN7S4300C33v39Ev();
extern void _ZN7S4300C33v40Ev();
extern void _ZN7S4300C33v41Ev();
extern void _ZN7S4300C33v42Ev();
extern void _ZN7S4300C33v43Ev();
static  VTBL_ENTRY vtc_S4300C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4300C3[0]),
  (VTBL_ENTRY)&_ZN7S4300C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4300C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4300C33v18Ev,
  (VTBL_ENTRY)&_ZN7S4300C33v19Ev,
  (VTBL_ENTRY)&_ZN7S4300C33v20Ev,
  (VTBL_ENTRY)&_ZN7S4300C33v21Ev,
  (VTBL_ENTRY)&_ZN7S4300C33v22Ev,
  (VTBL_ENTRY)&_ZN7S4300C33v23Ev,
  (VTBL_ENTRY)&_ZN7S4300C33v24Ev,
  (VTBL_ENTRY)&_ZN7S4300C33v25Ev,
  (VTBL_ENTRY)&_ZN7S4300C33v26Ev,
  (VTBL_ENTRY)&_ZN7S4300C33v27Ev,
  (VTBL_ENTRY)&_ZN7S4300C33v28Ev,
  (VTBL_ENTRY)&_ZN7S4300C33v29Ev,
  (VTBL_ENTRY)&_ZN7S4300C33v30Ev,
  (VTBL_ENTRY)&_ZN7S4300C33v31Ev,
  (VTBL_ENTRY)&_ZN7S4300C33v32Ev,
  (VTBL_ENTRY)&_ZN7S4300C33v33Ev,
  (VTBL_ENTRY)&_ZN7S4300C33v34Ev,
  (VTBL_ENTRY)&_ZN7S4300C33v35Ev,
  (VTBL_ENTRY)&_ZN7S4300C33v36Ev,
  (VTBL_ENTRY)&_ZN7S4300C33v37Ev,
  (VTBL_ENTRY)&_ZN7S4300C33v38Ev,
  (VTBL_ENTRY)&_ZN7S4300C33v39Ev,
  (VTBL_ENTRY)&_ZN7S4300C33v40Ev,
  (VTBL_ENTRY)&_ZN7S4300C33v41Ev,
  (VTBL_ENTRY)&_ZN7S4300C33v42Ev,
  (VTBL_ENTRY)&_ZN7S4300C33v43Ev,
};
extern VTBL_ENTRY _ZTI7S4300C3[];
extern  VTBL_ENTRY _ZTV7S4300C3[];
Class_Descriptor cd_S4300C3 = {  "S4300C3", // class name
  0,0,//no base classes
  &(vtc_S4300C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S4300C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4300C3),30, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4300C2  : S4300C3 {
  void *s4300c2f0[2];
  int s4300c2f1[4];
  ::S2423C5_nt s4300c2f2;
  void *s4300c2f3;
  char s4300c2f4;
  void *s4300c2f5;
  virtual  ~S4300C2(); // _ZN7S4300C2D1Ev
  virtual void  v44(); // _ZN7S4300C23v44Ev
  virtual void  v45(); // _ZN7S4300C23v45Ev
  virtual void  v46(); // _ZN7S4300C23v46Ev
  virtual void  v47(); // _ZN7S4300C23v47Ev
  virtual void  v48(); // _ZN7S4300C23v48Ev
  virtual void  v49(); // _ZN7S4300C23v49Ev
  virtual void  v50(); // _ZN7S4300C23v50Ev
  virtual void  v51(); // _ZN7S4300C23v51Ev
  virtual void  v52(); // _ZN7S4300C23v52Ev
  virtual void  v53(); // _ZN7S4300C23v53Ev
  virtual void  v54(); // _ZN7S4300C23v54Ev
  virtual void  v55(); // _ZN7S4300C23v55Ev
  virtual void  v56(); // _ZN7S4300C23v56Ev
  virtual void  v57(); // _ZN7S4300C23v57Ev
  S4300C2(); // tgen
};
//SIG(-1 S4300C2) C1{ BC2{ vd v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 Fp[2] Fi[4] FC3{ Fi[2]} Fp Fc Fp}


 S4300C2 ::~S4300C2(){ note_dtor("S4300C2", this);}
void  S4300C2 ::v44(){vfunc_called(this, "_ZN7S4300C23v44Ev");}
void  S4300C2 ::v45(){vfunc_called(this, "_ZN7S4300C23v45Ev");}
void  S4300C2 ::v46(){vfunc_called(this, "_ZN7S4300C23v46Ev");}
void  S4300C2 ::v47(){vfunc_called(this, "_ZN7S4300C23v47Ev");}
void  S4300C2 ::v48(){vfunc_called(this, "_ZN7S4300C23v48Ev");}
void  S4300C2 ::v49(){vfunc_called(this, "_ZN7S4300C23v49Ev");}
void  S4300C2 ::v50(){vfunc_called(this, "_ZN7S4300C23v50Ev");}
void  S4300C2 ::v51(){vfunc_called(this, "_ZN7S4300C23v51Ev");}
void  S4300C2 ::v52(){vfunc_called(this, "_ZN7S4300C23v52Ev");}
void  S4300C2 ::v53(){vfunc_called(this, "_ZN7S4300C23v53Ev");}
void  S4300C2 ::v54(){vfunc_called(this, "_ZN7S4300C23v54Ev");}
void  S4300C2 ::v55(){vfunc_called(this, "_ZN7S4300C23v55Ev");}
void  S4300C2 ::v56(){vfunc_called(this, "_ZN7S4300C23v56Ev");}
void  S4300C2 ::v57(){vfunc_called(this, "_ZN7S4300C23v57Ev");}
S4300C2 ::S4300C2(){ note_ctor("S4300C2", this);} // tgen

static void Test_S4300C2()
{
  extern Class_Descriptor cd_S4300C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,13)];
    init_test(&cd_S4300C2, buf);
    S4300C2 *dp, &lv = *(dp=new (buf) S4300C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,48), "sizeof(S4300C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4300C2)");
    check_base_class_offset(lv, (S4300C3*), 0, "S4300C2");
    check_field_offset(lv, s4300c2f0, ABISELECT(8,4), "S4300C2.s4300c2f0");
    check_field_offset(lv, s4300c2f1, ABISELECT(24,12), "S4300C2.s4300c2f1");
    check_field_offset(lv, s4300c2f2, ABISELECT(40,28), "S4300C2.s4300c2f2");
    check_field_offset(lv, s4300c2f3, ABISELECT(48,36), "S4300C2.s4300c2f3");
    check_field_offset(lv, s4300c2f4, ABISELECT(56,40), "S4300C2.s4300c2f4");
    check_field_offset(lv, s4300c2f5, ABISELECT(64,44), "S4300C2.s4300c2f5");
    test_class_info(&lv, &cd_S4300C2);
    dp->~S4300C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4300C2(Test_S4300C2, "S4300C2", ABISELECT(72,48));

#else // __cplusplus

extern void _ZN7S4300C2C1Ev();
extern void _ZN7S4300C2D1Ev();
Name_Map name_map_S4300C2[] = {
  NSPAIR(_ZN7S4300C2C1Ev),
  NSPAIR(_ZN7S4300C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4300C3;
extern VTBL_ENTRY _ZTI7S4300C3[];
extern  VTBL_ENTRY _ZTV7S4300C3[];
static Base_Class bases_S4300C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4300C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4300C2[];
extern void _ZN7S4300C2D1Ev();
extern void _ZN7S4300C2D0Ev();
extern void _ZN7S4300C33v18Ev();
extern void _ZN7S4300C33v19Ev();
extern void _ZN7S4300C33v20Ev();
extern void _ZN7S4300C33v21Ev();
extern void _ZN7S4300C33v22Ev();
extern void _ZN7S4300C33v23Ev();
extern void _ZN7S4300C33v24Ev();
extern void _ZN7S4300C33v25Ev();
extern void _ZN7S4300C33v26Ev();
extern void _ZN7S4300C33v27Ev();
extern void _ZN7S4300C33v28Ev();
extern void _ZN7S4300C33v29Ev();
extern void _ZN7S4300C33v30Ev();
extern void _ZN7S4300C33v31Ev();
extern void _ZN7S4300C33v32Ev();
extern void _ZN7S4300C33v33Ev();
extern void _ZN7S4300C33v34Ev();
extern void _ZN7S4300C33v35Ev();
extern void _ZN7S4300C33v36Ev();
extern void _ZN7S4300C33v37Ev();
extern void _ZN7S4300C33v38Ev();
extern void _ZN7S4300C33v39Ev();
extern void _ZN7S4300C33v40Ev();
extern void _ZN7S4300C33v41Ev();
extern void _ZN7S4300C33v42Ev();
extern void _ZN7S4300C33v43Ev();
extern void _ZN7S4300C23v44Ev();
extern void _ZN7S4300C23v45Ev();
extern void _ZN7S4300C23v46Ev();
extern void _ZN7S4300C23v47Ev();
extern void _ZN7S4300C23v48Ev();
extern void _ZN7S4300C23v49Ev();
extern void _ZN7S4300C23v50Ev();
extern void _ZN7S4300C23v51Ev();
extern void _ZN7S4300C23v52Ev();
extern void _ZN7S4300C23v53Ev();
extern void _ZN7S4300C23v54Ev();
extern void _ZN7S4300C23v55Ev();
extern void _ZN7S4300C23v56Ev();
extern void _ZN7S4300C23v57Ev();
static  VTBL_ENTRY vtc_S4300C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4300C2[0]),
  (VTBL_ENTRY)&_ZN7S4300C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4300C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4300C33v18Ev,
  (VTBL_ENTRY)&_ZN7S4300C33v19Ev,
  (VTBL_ENTRY)&_ZN7S4300C33v20Ev,
  (VTBL_ENTRY)&_ZN7S4300C33v21Ev,
  (VTBL_ENTRY)&_ZN7S4300C33v22Ev,
  (VTBL_ENTRY)&_ZN7S4300C33v23Ev,
  (VTBL_ENTRY)&_ZN7S4300C33v24Ev,
  (VTBL_ENTRY)&_ZN7S4300C33v25Ev,
  (VTBL_ENTRY)&_ZN7S4300C33v26Ev,
  (VTBL_ENTRY)&_ZN7S4300C33v27Ev,
  (VTBL_ENTRY)&_ZN7S4300C33v28Ev,
  (VTBL_ENTRY)&_ZN7S4300C33v29Ev,
  (VTBL_ENTRY)&_ZN7S4300C33v30Ev,
  (VTBL_ENTRY)&_ZN7S4300C33v31Ev,
  (VTBL_ENTRY)&_ZN7S4300C33v32Ev,
  (VTBL_ENTRY)&_ZN7S4300C33v33Ev,
  (VTBL_ENTRY)&_ZN7S4300C33v34Ev,
  (VTBL_ENTRY)&_ZN7S4300C33v35Ev,
  (VTBL_ENTRY)&_ZN7S4300C33v36Ev,
  (VTBL_ENTRY)&_ZN7S4300C33v37Ev,
  (VTBL_ENTRY)&_ZN7S4300C33v38Ev,
  (VTBL_ENTRY)&_ZN7S4300C33v39Ev,
  (VTBL_ENTRY)&_ZN7S4300C33v40Ev,
  (VTBL_ENTRY)&_ZN7S4300C33v41Ev,
  (VTBL_ENTRY)&_ZN7S4300C33v42Ev,
  (VTBL_ENTRY)&_ZN7S4300C33v43Ev,
  (VTBL_ENTRY)&_ZN7S4300C23v44Ev,
  (VTBL_ENTRY)&_ZN7S4300C23v45Ev,
  (VTBL_ENTRY)&_ZN7S4300C23v46Ev,
  (VTBL_ENTRY)&_ZN7S4300C23v47Ev,
  (VTBL_ENTRY)&_ZN7S4300C23v48Ev,
  (VTBL_ENTRY)&_ZN7S4300C23v49Ev,
  (VTBL_ENTRY)&_ZN7S4300C23v50Ev,
  (VTBL_ENTRY)&_ZN7S4300C23v51Ev,
  (VTBL_ENTRY)&_ZN7S4300C23v52Ev,
  (VTBL_ENTRY)&_ZN7S4300C23v53Ev,
  (VTBL_ENTRY)&_ZN7S4300C23v54Ev,
  (VTBL_ENTRY)&_ZN7S4300C23v55Ev,
  (VTBL_ENTRY)&_ZN7S4300C23v56Ev,
  (VTBL_ENTRY)&_ZN7S4300C23v57Ev,
};
extern VTBL_ENTRY _ZTI7S4300C2[];
extern  VTBL_ENTRY _ZTV7S4300C2[];
Class_Descriptor cd_S4300C2 = {  "S4300C2", // class name
  bases_S4300C2, 1,
  &(vtc_S4300C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,48), // object size
  NSPAIRA(_ZTI7S4300C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4300C2),44, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4300C5  {
  int s4300c5f0;
  virtual  ~S4300C5(); // _ZN7S4300C5D1Ev
  virtual void  v58(); // _ZN7S4300C53v58Ev
  virtual void  v59(); // _ZN7S4300C53v59Ev
  virtual void  v60(); // _ZN7S4300C53v60Ev
  virtual void  v61(); // _ZN7S4300C53v61Ev
  S4300C5(); // tgen
};
//SIG(-1 S4300C5) C1{ vd v1 v2 v3 v4 Fi}


 S4300C5 ::~S4300C5(){ note_dtor("S4300C5", this);}
void  S4300C5 ::v58(){vfunc_called(this, "_ZN7S4300C53v58Ev");}
void  S4300C5 ::v59(){vfunc_called(this, "_ZN7S4300C53v59Ev");}
void  S4300C5 ::v60(){vfunc_called(this, "_ZN7S4300C53v60Ev");}
void  S4300C5 ::v61(){vfunc_called(this, "_ZN7S4300C53v61Ev");}
S4300C5 ::S4300C5(){ note_ctor("S4300C5", this);} // tgen

static void Test_S4300C5()
{
  extern Class_Descriptor cd_S4300C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S4300C5, buf);
    S4300C5 *dp, &lv = *(dp=new (buf) S4300C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S4300C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4300C5)");
    check_field_offset(lv, s4300c5f0, ABISELECT(8,4), "S4300C5.s4300c5f0");
    test_class_info(&lv, &cd_S4300C5);
    dp->~S4300C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4300C5(Test_S4300C5, "S4300C5", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S4300C5C1Ev();
extern void _ZN7S4300C5D1Ev();
Name_Map name_map_S4300C5[] = {
  NSPAIR(_ZN7S4300C5C1Ev),
  NSPAIR(_ZN7S4300C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4300C5[];
extern void _ZN7S4300C5D1Ev();
extern void _ZN7S4300C5D0Ev();
extern void _ZN7S4300C53v58Ev();
extern void _ZN7S4300C53v59Ev();
extern void _ZN7S4300C53v60Ev();
extern void _ZN7S4300C53v61Ev();
static  VTBL_ENTRY vtc_S4300C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4300C5[0]),
  (VTBL_ENTRY)&_ZN7S4300C5D1Ev,
  (VTBL_ENTRY)&_ZN7S4300C5D0Ev,
  (VTBL_ENTRY)&_ZN7S4300C53v58Ev,
  (VTBL_ENTRY)&_ZN7S4300C53v59Ev,
  (VTBL_ENTRY)&_ZN7S4300C53v60Ev,
  (VTBL_ENTRY)&_ZN7S4300C53v61Ev,
};
extern VTBL_ENTRY _ZTI7S4300C5[];
extern  VTBL_ENTRY _ZTV7S4300C5[];
Class_Descriptor cd_S4300C5 = {  "S4300C5", // class name
  0,0,//no base classes
  &(vtc_S4300C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S4300C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4300C5),8, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4300C1  : S4300C2 , S4300C5 {
  void *s4300c1f0[3];
  char s4300c1f1[2];
  ::S836C39 s4300c1f2;
  void *s4300c1f3[23];
  int s4300c1f4[2];
  virtual  ~S4300C1(); // _ZN7S4300C1D1Ev
  virtual void  v1(); // _ZN7S4300C12v1Ev
  virtual void  v2(); // _ZN7S4300C12v2Ev
  virtual void  v3(); // _ZN7S4300C12v3Ev
  virtual void  v4(); // _ZN7S4300C12v4Ev
  virtual void  v5(); // _ZN7S4300C12v5Ev
  virtual void  v6(); // _ZN7S4300C12v6Ev
  virtual void  v7(); // _ZN7S4300C12v7Ev
  virtual void  v8(); // _ZN7S4300C12v8Ev
  virtual void  v9(); // _ZN7S4300C12v9Ev
  virtual void  v10(); // _ZN7S4300C13v10Ev
  virtual void  v11(); // _ZN7S4300C13v11Ev
  virtual void  v12(); // _ZN7S4300C13v12Ev
  virtual void  v13(); // _ZN7S4300C13v13Ev
  virtual void  v14(); // _ZN7S4300C13v14Ev
  virtual void  v15(); // _ZN7S4300C13v15Ev
  virtual void  v16(); // _ZN7S4300C13v16Ev
  virtual void  v17(); // _ZN7S4300C13v17Ev
  S4300C1(); // tgen
};
//SIG(1 S4300C1) C1{ BC2{ BC3{ vd v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43} vd v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 Fp[2] Fi[4] FC4{ Fi[2]} Fp Fc Fp} BC5{ vd v58 v59 v60 v61 Fi} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 Fp[3] Fc[2] FC6{ m} Fp[23] Fi[2]}


 S4300C1 ::~S4300C1(){ note_dtor("S4300C1", this);}
void  S4300C1 ::v1(){vfunc_called(this, "_ZN7S4300C12v1Ev");}
void  S4300C1 ::v2(){vfunc_called(this, "_ZN7S4300C12v2Ev");}
void  S4300C1 ::v3(){vfunc_called(this, "_ZN7S4300C12v3Ev");}
void  S4300C1 ::v4(){vfunc_called(this, "_ZN7S4300C12v4Ev");}
void  S4300C1 ::v5(){vfunc_called(this, "_ZN7S4300C12v5Ev");}
void  S4300C1 ::v6(){vfunc_called(this, "_ZN7S4300C12v6Ev");}
void  S4300C1 ::v7(){vfunc_called(this, "_ZN7S4300C12v7Ev");}
void  S4300C1 ::v8(){vfunc_called(this, "_ZN7S4300C12v8Ev");}
void  S4300C1 ::v9(){vfunc_called(this, "_ZN7S4300C12v9Ev");}
void  S4300C1 ::v10(){vfunc_called(this, "_ZN7S4300C13v10Ev");}
void  S4300C1 ::v11(){vfunc_called(this, "_ZN7S4300C13v11Ev");}
void  S4300C1 ::v12(){vfunc_called(this, "_ZN7S4300C13v12Ev");}
void  S4300C1 ::v13(){vfunc_called(this, "_ZN7S4300C13v13Ev");}
void  S4300C1 ::v14(){vfunc_called(this, "_ZN7S4300C13v14Ev");}
void  S4300C1 ::v15(){vfunc_called(this, "_ZN7S4300C13v15Ev");}
void  S4300C1 ::v16(){vfunc_called(this, "_ZN7S4300C13v16Ev");}
void  S4300C1 ::v17(){vfunc_called(this, "_ZN7S4300C13v17Ev");}
S4300C1 ::S4300C1(){ note_ctor("S4300C1", this);} // tgen

static void Test_S4300C1()
{
  extern Class_Descriptor cd_S4300C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(40,44)];
    init_test(&cd_S4300C1, buf);
    S4300C1 *dp, &lv = *(dp=new (buf) S4300C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(312,172), "sizeof(S4300C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4300C1)");
    check_base_class_offset(lv, (S4300C3*)(S4300C2*), 0, "S4300C1");
    check_base_class_offset(lv, (S4300C2*), 0, "S4300C1");
    check_base_class_offset(lv, (S4300C5*), ABISELECT(72,48), "S4300C1");
    check_field_offset(lv, s4300c1f0, ABISELECT(88,56), "S4300C1.s4300c1f0");
    check_field_offset(lv, s4300c1f1, ABISELECT(112,68), "S4300C1.s4300c1f1");
    check_field_offset(lv, s4300c1f2, ABISELECT(114,70), "S4300C1.s4300c1f2");
    check_field_offset(lv, s4300c1f3, ABISELECT(120,72), "S4300C1.s4300c1f3");
    check_field_offset(lv, s4300c1f4, ABISELECT(304,164), "S4300C1.s4300c1f4");
    test_class_info(&lv, &cd_S4300C1);
    dp->~S4300C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4300C1(Test_S4300C1, "S4300C1", ABISELECT(312,172));

#else // __cplusplus

extern void _ZN7S4300C1C1Ev();
extern void _ZN7S4300C1D1Ev();
Name_Map name_map_S4300C1[] = {
  NSPAIR(_ZN7S4300C1C1Ev),
  NSPAIR(_ZN7S4300C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4300C3;
extern VTBL_ENTRY _ZTI7S4300C3[];
extern  VTBL_ENTRY _ZTV7S4300C3[];
extern Class_Descriptor cd_S4300C2;
extern VTBL_ENTRY _ZTI7S4300C2[];
extern  VTBL_ENTRY _ZTV7S4300C2[];
extern Class_Descriptor cd_S4300C5;
extern VTBL_ENTRY _ZTI7S4300C5[];
extern  VTBL_ENTRY _ZTV7S4300C5[];
static Base_Class bases_S4300C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4300C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S4300C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S4300C5,    ABISELECT(72,48), //bcp->offset
    61, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4300C1[];
extern void _ZN7S4300C1D1Ev();
extern void _ZN7S4300C1D0Ev();
extern void _ZN7S4300C33v18Ev();
extern void _ZN7S4300C33v19Ev();
extern void _ZN7S4300C33v20Ev();
extern void _ZN7S4300C33v21Ev();
extern void _ZN7S4300C33v22Ev();
extern void _ZN7S4300C33v23Ev();
extern void _ZN7S4300C33v24Ev();
extern void _ZN7S4300C33v25Ev();
extern void _ZN7S4300C33v26Ev();
extern void _ZN7S4300C33v27Ev();
extern void _ZN7S4300C33v28Ev();
extern void _ZN7S4300C33v29Ev();
extern void _ZN7S4300C33v30Ev();
extern void _ZN7S4300C33v31Ev();
extern void _ZN7S4300C33v32Ev();
extern void _ZN7S4300C33v33Ev();
extern void _ZN7S4300C33v34Ev();
extern void _ZN7S4300C33v35Ev();
extern void _ZN7S4300C33v36Ev();
extern void _ZN7S4300C33v37Ev();
extern void _ZN7S4300C33v38Ev();
extern void _ZN7S4300C33v39Ev();
extern void _ZN7S4300C33v40Ev();
extern void _ZN7S4300C33v41Ev();
extern void _ZN7S4300C33v42Ev();
extern void _ZN7S4300C33v43Ev();
extern void _ZN7S4300C23v44Ev();
extern void _ZN7S4300C23v45Ev();
extern void _ZN7S4300C23v46Ev();
extern void _ZN7S4300C23v47Ev();
extern void _ZN7S4300C23v48Ev();
extern void _ZN7S4300C23v49Ev();
extern void _ZN7S4300C23v50Ev();
extern void _ZN7S4300C23v51Ev();
extern void _ZN7S4300C23v52Ev();
extern void _ZN7S4300C23v53Ev();
extern void _ZN7S4300C23v54Ev();
extern void _ZN7S4300C23v55Ev();
extern void _ZN7S4300C23v56Ev();
extern void _ZN7S4300C23v57Ev();
extern void _ZN7S4300C12v1Ev();
extern void _ZN7S4300C12v2Ev();
extern void _ZN7S4300C12v3Ev();
extern void _ZN7S4300C12v4Ev();
extern void _ZN7S4300C12v5Ev();
extern void _ZN7S4300C12v6Ev();
extern void _ZN7S4300C12v7Ev();
extern void _ZN7S4300C12v8Ev();
extern void _ZN7S4300C12v9Ev();
extern void _ZN7S4300C13v10Ev();
extern void _ZN7S4300C13v11Ev();
extern void _ZN7S4300C13v12Ev();
extern void _ZN7S4300C13v13Ev();
extern void _ZN7S4300C13v14Ev();
extern void _ZN7S4300C13v15Ev();
extern void _ZN7S4300C13v16Ev();
extern void _ZN7S4300C13v17Ev();
extern void ABISELECT(_ZThn72_N7S4300C1D1Ev,_ZThn48_N7S4300C1D1Ev)();
extern void ABISELECT(_ZThn72_N7S4300C1D0Ev,_ZThn48_N7S4300C1D0Ev)();
extern void _ZN7S4300C53v58Ev();
extern void _ZN7S4300C53v59Ev();
extern void _ZN7S4300C53v60Ev();
extern void _ZN7S4300C53v61Ev();
static  VTBL_ENTRY vtc_S4300C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4300C1[0]),
  (VTBL_ENTRY)&_ZN7S4300C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4300C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4300C33v18Ev,
  (VTBL_ENTRY)&_ZN7S4300C33v19Ev,
  (VTBL_ENTRY)&_ZN7S4300C33v20Ev,
  (VTBL_ENTRY)&_ZN7S4300C33v21Ev,
  (VTBL_ENTRY)&_ZN7S4300C33v22Ev,
  (VTBL_ENTRY)&_ZN7S4300C33v23Ev,
  (VTBL_ENTRY)&_ZN7S4300C33v24Ev,
  (VTBL_ENTRY)&_ZN7S4300C33v25Ev,
  (VTBL_ENTRY)&_ZN7S4300C33v26Ev,
  (VTBL_ENTRY)&_ZN7S4300C33v27Ev,
  (VTBL_ENTRY)&_ZN7S4300C33v28Ev,
  (VTBL_ENTRY)&_ZN7S4300C33v29Ev,
  (VTBL_ENTRY)&_ZN7S4300C33v30Ev,
  (VTBL_ENTRY)&_ZN7S4300C33v31Ev,
  (VTBL_ENTRY)&_ZN7S4300C33v32Ev,
  (VTBL_ENTRY)&_ZN7S4300C33v33Ev,
  (VTBL_ENTRY)&_ZN7S4300C33v34Ev,
  (VTBL_ENTRY)&_ZN7S4300C33v35Ev,
  (VTBL_ENTRY)&_ZN7S4300C33v36Ev,
  (VTBL_ENTRY)&_ZN7S4300C33v37Ev,
  (VTBL_ENTRY)&_ZN7S4300C33v38Ev,
  (VTBL_ENTRY)&_ZN7S4300C33v39Ev,
  (VTBL_ENTRY)&_ZN7S4300C33v40Ev,
  (VTBL_ENTRY)&_ZN7S4300C33v41Ev,
  (VTBL_ENTRY)&_ZN7S4300C33v42Ev,
  (VTBL_ENTRY)&_ZN7S4300C33v43Ev,
  (VTBL_ENTRY)&_ZN7S4300C23v44Ev,
  (VTBL_ENTRY)&_ZN7S4300C23v45Ev,
  (VTBL_ENTRY)&_ZN7S4300C23v46Ev,
  (VTBL_ENTRY)&_ZN7S4300C23v47Ev,
  (VTBL_ENTRY)&_ZN7S4300C23v48Ev,
  (VTBL_ENTRY)&_ZN7S4300C23v49Ev,
  (VTBL_ENTRY)&_ZN7S4300C23v50Ev,
  (VTBL_ENTRY)&_ZN7S4300C23v51Ev,
  (VTBL_ENTRY)&_ZN7S4300C23v52Ev,
  (VTBL_ENTRY)&_ZN7S4300C23v53Ev,
  (VTBL_ENTRY)&_ZN7S4300C23v54Ev,
  (VTBL_ENTRY)&_ZN7S4300C23v55Ev,
  (VTBL_ENTRY)&_ZN7S4300C23v56Ev,
  (VTBL_ENTRY)&_ZN7S4300C23v57Ev,
  (VTBL_ENTRY)&_ZN7S4300C12v1Ev,
  (VTBL_ENTRY)&_ZN7S4300C12v2Ev,
  (VTBL_ENTRY)&_ZN7S4300C12v3Ev,
  (VTBL_ENTRY)&_ZN7S4300C12v4Ev,
  (VTBL_ENTRY)&_ZN7S4300C12v5Ev,
  (VTBL_ENTRY)&_ZN7S4300C12v6Ev,
  (VTBL_ENTRY)&_ZN7S4300C12v7Ev,
  (VTBL_ENTRY)&_ZN7S4300C12v8Ev,
  (VTBL_ENTRY)&_ZN7S4300C12v9Ev,
  (VTBL_ENTRY)&_ZN7S4300C13v10Ev,
  (VTBL_ENTRY)&_ZN7S4300C13v11Ev,
  (VTBL_ENTRY)&_ZN7S4300C13v12Ev,
  (VTBL_ENTRY)&_ZN7S4300C13v13Ev,
  (VTBL_ENTRY)&_ZN7S4300C13v14Ev,
  (VTBL_ENTRY)&_ZN7S4300C13v15Ev,
  (VTBL_ENTRY)&_ZN7S4300C13v16Ev,
  (VTBL_ENTRY)&_ZN7S4300C13v17Ev,
  ABISELECT(-72,-48),
  (VTBL_ENTRY)&(_ZTI7S4300C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn72_N7S4300C1D1Ev,_ZThn48_N7S4300C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn72_N7S4300C1D0Ev,_ZThn48_N7S4300C1D0Ev),
  (VTBL_ENTRY)&_ZN7S4300C53v58Ev,
  (VTBL_ENTRY)&_ZN7S4300C53v59Ev,
  (VTBL_ENTRY)&_ZN7S4300C53v60Ev,
  (VTBL_ENTRY)&_ZN7S4300C53v61Ev,
};
extern VTBL_ENTRY _ZTI7S4300C1[];
extern  VTBL_ENTRY _ZTV7S4300C1[];
Class_Descriptor cd_S4300C1 = {  "S4300C1", // class name
  bases_S4300C1, 3,
  &(vtc_S4300C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(312,172), // object size
  NSPAIRA(_ZTI7S4300C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S4300C1),69, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4301C3  {
  virtual  ~S4301C3(); // _ZN7S4301C3D1Ev
  virtual void  v18(); // _ZN7S4301C33v18Ev
  virtual void  v19(); // _ZN7S4301C33v19Ev
  virtual void  v20(); // _ZN7S4301C33v20Ev
  virtual void  v21(); // _ZN7S4301C33v21Ev
  virtual void  v22(); // _ZN7S4301C33v22Ev
  virtual void  v23(); // _ZN7S4301C33v23Ev
  virtual void  v24(); // _ZN7S4301C33v24Ev
  virtual void  v25(); // _ZN7S4301C33v25Ev
  virtual void  v26(); // _ZN7S4301C33v26Ev
  virtual void  v27(); // _ZN7S4301C33v27Ev
  virtual void  v28(); // _ZN7S4301C33v28Ev
  virtual void  v29(); // _ZN7S4301C33v29Ev
  virtual void  v30(); // _ZN7S4301C33v30Ev
  virtual void  v31(); // _ZN7S4301C33v31Ev
  virtual void  v32(); // _ZN7S4301C33v32Ev
  virtual void  v33(); // _ZN7S4301C33v33Ev
  virtual void  v34(); // _ZN7S4301C33v34Ev
  virtual void  v35(); // _ZN7S4301C33v35Ev
  virtual void  v36(); // _ZN7S4301C33v36Ev
  virtual void  v37(); // _ZN7S4301C33v37Ev
  virtual void  v38(); // _ZN7S4301C33v38Ev
  virtual void  v39(); // _ZN7S4301C33v39Ev
  virtual void  v40(); // _ZN7S4301C33v40Ev
  virtual void  v41(); // _ZN7S4301C33v41Ev
  virtual void  v42(); // _ZN7S4301C33v42Ev
  virtual void  v43(); // _ZN7S4301C33v43Ev
  S4301C3(); // tgen
};
//SIG(-1 S4301C3) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26}


 S4301C3 ::~S4301C3(){ note_dtor("S4301C3", this);}
void  S4301C3 ::v18(){vfunc_called(this, "_ZN7S4301C33v18Ev");}
void  S4301C3 ::v19(){vfunc_called(this, "_ZN7S4301C33v19Ev");}
void  S4301C3 ::v20(){vfunc_called(this, "_ZN7S4301C33v20Ev");}
void  S4301C3 ::v21(){vfunc_called(this, "_ZN7S4301C33v21Ev");}
void  S4301C3 ::v22(){vfunc_called(this, "_ZN7S4301C33v22Ev");}
void  S4301C3 ::v23(){vfunc_called(this, "_ZN7S4301C33v23Ev");}
void  S4301C3 ::v24(){vfunc_called(this, "_ZN7S4301C33v24Ev");}
void  S4301C3 ::v25(){vfunc_called(this, "_ZN7S4301C33v25Ev");}
void  S4301C3 ::v26(){vfunc_called(this, "_ZN7S4301C33v26Ev");}
void  S4301C3 ::v27(){vfunc_called(this, "_ZN7S4301C33v27Ev");}
void  S4301C3 ::v28(){vfunc_called(this, "_ZN7S4301C33v28Ev");}
void  S4301C3 ::v29(){vfunc_called(this, "_ZN7S4301C33v29Ev");}
void  S4301C3 ::v30(){vfunc_called(this, "_ZN7S4301C33v30Ev");}
void  S4301C3 ::v31(){vfunc_called(this, "_ZN7S4301C33v31Ev");}
void  S4301C3 ::v32(){vfunc_called(this, "_ZN7S4301C33v32Ev");}
void  S4301C3 ::v33(){vfunc_called(this, "_ZN7S4301C33v33Ev");}
void  S4301C3 ::v34(){vfunc_called(this, "_ZN7S4301C33v34Ev");}
void  S4301C3 ::v35(){vfunc_called(this, "_ZN7S4301C33v35Ev");}
void  S4301C3 ::v36(){vfunc_called(this, "_ZN7S4301C33v36Ev");}
void  S4301C3 ::v37(){vfunc_called(this, "_ZN7S4301C33v37Ev");}
void  S4301C3 ::v38(){vfunc_called(this, "_ZN7S4301C33v38Ev");}
void  S4301C3 ::v39(){vfunc_called(this, "_ZN7S4301C33v39Ev");}
void  S4301C3 ::v40(){vfunc_called(this, "_ZN7S4301C33v40Ev");}
void  S4301C3 ::v41(){vfunc_called(this, "_ZN7S4301C33v41Ev");}
void  S4301C3 ::v42(){vfunc_called(this, "_ZN7S4301C33v42Ev");}
void  S4301C3 ::v43(){vfunc_called(this, "_ZN7S4301C33v43Ev");}
S4301C3 ::S4301C3(){ note_ctor("S4301C3", this);} // tgen

static void Test_S4301C3()
{
  extern Class_Descriptor cd_S4301C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S4301C3, buf);
    S4301C3 *dp, &lv = *(dp=new (buf) S4301C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S4301C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4301C3)");
    test_class_info(&lv, &cd_S4301C3);
    dp->~S4301C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4301C3(Test_S4301C3, "S4301C3", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S4301C3C1Ev();
extern void _ZN7S4301C3D1Ev();
Name_Map name_map_S4301C3[] = {
  NSPAIR(_ZN7S4301C3C1Ev),
  NSPAIR(_ZN7S4301C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4301C3[];
extern void _ZN7S4301C3D1Ev();
extern void _ZN7S4301C3D0Ev();
extern void _ZN7S4301C33v18Ev();
extern void _ZN7S4301C33v19Ev();
extern void _ZN7S4301C33v20Ev();
extern void _ZN7S4301C33v21Ev();
extern void _ZN7S4301C33v22Ev();
extern void _ZN7S4301C33v23Ev();
extern void _ZN7S4301C33v24Ev();
extern void _ZN7S4301C33v25Ev();
extern void _ZN7S4301C33v26Ev();
extern void _ZN7S4301C33v27Ev();
extern void _ZN7S4301C33v28Ev();
extern void _ZN7S4301C33v29Ev();
extern void _ZN7S4301C33v30Ev();
extern void _ZN7S4301C33v31Ev();
extern void _ZN7S4301C33v32Ev();
extern void _ZN7S4301C33v33Ev();
extern void _ZN7S4301C33v34Ev();
extern void _ZN7S4301C33v35Ev();
extern void _ZN7S4301C33v36Ev();
extern void _ZN7S4301C33v37Ev();
extern void _ZN7S4301C33v38Ev();
extern void _ZN7S4301C33v39Ev();
extern void _ZN7S4301C33v40Ev();
extern void _ZN7S4301C33v41Ev();
extern void _ZN7S4301C33v42Ev();
extern void _ZN7S4301C33v43Ev();
static  VTBL_ENTRY vtc_S4301C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4301C3[0]),
  (VTBL_ENTRY)&_ZN7S4301C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4301C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4301C33v18Ev,
  (VTBL_ENTRY)&_ZN7S4301C33v19Ev,
  (VTBL_ENTRY)&_ZN7S4301C33v20Ev,
  (VTBL_ENTRY)&_ZN7S4301C33v21Ev,
  (VTBL_ENTRY)&_ZN7S4301C33v22Ev,
  (VTBL_ENTRY)&_ZN7S4301C33v23Ev,
  (VTBL_ENTRY)&_ZN7S4301C33v24Ev,
  (VTBL_ENTRY)&_ZN7S4301C33v25Ev,
  (VTBL_ENTRY)&_ZN7S4301C33v26Ev,
  (VTBL_ENTRY)&_ZN7S4301C33v27Ev,
  (VTBL_ENTRY)&_ZN7S4301C33v28Ev,
  (VTBL_ENTRY)&_ZN7S4301C33v29Ev,
  (VTBL_ENTRY)&_ZN7S4301C33v30Ev,
  (VTBL_ENTRY)&_ZN7S4301C33v31Ev,
  (VTBL_ENTRY)&_ZN7S4301C33v32Ev,
  (VTBL_ENTRY)&_ZN7S4301C33v33Ev,
  (VTBL_ENTRY)&_ZN7S4301C33v34Ev,
  (VTBL_ENTRY)&_ZN7S4301C33v35Ev,
  (VTBL_ENTRY)&_ZN7S4301C33v36Ev,
  (VTBL_ENTRY)&_ZN7S4301C33v37Ev,
  (VTBL_ENTRY)&_ZN7S4301C33v38Ev,
  (VTBL_ENTRY)&_ZN7S4301C33v39Ev,
  (VTBL_ENTRY)&_ZN7S4301C33v40Ev,
  (VTBL_ENTRY)&_ZN7S4301C33v41Ev,
  (VTBL_ENTRY)&_ZN7S4301C33v42Ev,
  (VTBL_ENTRY)&_ZN7S4301C33v43Ev,
};
extern VTBL_ENTRY _ZTI7S4301C3[];
extern  VTBL_ENTRY _ZTV7S4301C3[];
Class_Descriptor cd_S4301C3 = {  "S4301C3", // class name
  0,0,//no base classes
  &(vtc_S4301C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S4301C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4301C3),30, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4301C2  : S4301C3 {
  void *s4301c2f0[2];
  int s4301c2f1[4];
  ::S2423C5_nt s4301c2f2;
  void *s4301c2f3;
  char s4301c2f4;
  void *s4301c2f5;
  virtual  ~S4301C2(); // _ZN7S4301C2D1Ev
  virtual void  v44(); // _ZN7S4301C23v44Ev
  virtual void  v45(); // _ZN7S4301C23v45Ev
  virtual void  v46(); // _ZN7S4301C23v46Ev
  virtual void  v47(); // _ZN7S4301C23v47Ev
  virtual void  v48(); // _ZN7S4301C23v48Ev
  virtual void  v49(); // _ZN7S4301C23v49Ev
  virtual void  v50(); // _ZN7S4301C23v50Ev
  virtual void  v51(); // _ZN7S4301C23v51Ev
  virtual void  v52(); // _ZN7S4301C23v52Ev
  virtual void  v53(); // _ZN7S4301C23v53Ev
  virtual void  v54(); // _ZN7S4301C23v54Ev
  virtual void  v55(); // _ZN7S4301C23v55Ev
  virtual void  v56(); // _ZN7S4301C23v56Ev
  virtual void  v57(); // _ZN7S4301C23v57Ev
  S4301C2(); // tgen
};
//SIG(-1 S4301C2) C1{ BC2{ vd v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 Fp[2] Fi[4] FC3{ Fi[2]} Fp Fc Fp}


 S4301C2 ::~S4301C2(){ note_dtor("S4301C2", this);}
void  S4301C2 ::v44(){vfunc_called(this, "_ZN7S4301C23v44Ev");}
void  S4301C2 ::v45(){vfunc_called(this, "_ZN7S4301C23v45Ev");}
void  S4301C2 ::v46(){vfunc_called(this, "_ZN7S4301C23v46Ev");}
void  S4301C2 ::v47(){vfunc_called(this, "_ZN7S4301C23v47Ev");}
void  S4301C2 ::v48(){vfunc_called(this, "_ZN7S4301C23v48Ev");}
void  S4301C2 ::v49(){vfunc_called(this, "_ZN7S4301C23v49Ev");}
void  S4301C2 ::v50(){vfunc_called(this, "_ZN7S4301C23v50Ev");}
void  S4301C2 ::v51(){vfunc_called(this, "_ZN7S4301C23v51Ev");}
void  S4301C2 ::v52(){vfunc_called(this, "_ZN7S4301C23v52Ev");}
void  S4301C2 ::v53(){vfunc_called(this, "_ZN7S4301C23v53Ev");}
void  S4301C2 ::v54(){vfunc_called(this, "_ZN7S4301C23v54Ev");}
void  S4301C2 ::v55(){vfunc_called(this, "_ZN7S4301C23v55Ev");}
void  S4301C2 ::v56(){vfunc_called(this, "_ZN7S4301C23v56Ev");}
void  S4301C2 ::v57(){vfunc_called(this, "_ZN7S4301C23v57Ev");}
S4301C2 ::S4301C2(){ note_ctor("S4301C2", this);} // tgen

static void Test_S4301C2()
{
  extern Class_Descriptor cd_S4301C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,13)];
    init_test(&cd_S4301C2, buf);
    S4301C2 *dp, &lv = *(dp=new (buf) S4301C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,48), "sizeof(S4301C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4301C2)");
    check_base_class_offset(lv, (S4301C3*), 0, "S4301C2");
    check_field_offset(lv, s4301c2f0, ABISELECT(8,4), "S4301C2.s4301c2f0");
    check_field_offset(lv, s4301c2f1, ABISELECT(24,12), "S4301C2.s4301c2f1");
    check_field_offset(lv, s4301c2f2, ABISELECT(40,28), "S4301C2.s4301c2f2");
    check_field_offset(lv, s4301c2f3, ABISELECT(48,36), "S4301C2.s4301c2f3");
    check_field_offset(lv, s4301c2f4, ABISELECT(56,40), "S4301C2.s4301c2f4");
    check_field_offset(lv, s4301c2f5, ABISELECT(64,44), "S4301C2.s4301c2f5");
    test_class_info(&lv, &cd_S4301C2);
    dp->~S4301C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4301C2(Test_S4301C2, "S4301C2", ABISELECT(72,48));

#else // __cplusplus

extern void _ZN7S4301C2C1Ev();
extern void _ZN7S4301C2D1Ev();
Name_Map name_map_S4301C2[] = {
  NSPAIR(_ZN7S4301C2C1Ev),
  NSPAIR(_ZN7S4301C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4301C3;
extern VTBL_ENTRY _ZTI7S4301C3[];
extern  VTBL_ENTRY _ZTV7S4301C3[];
static Base_Class bases_S4301C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4301C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4301C2[];
extern void _ZN7S4301C2D1Ev();
extern void _ZN7S4301C2D0Ev();
extern void _ZN7S4301C33v18Ev();
extern void _ZN7S4301C33v19Ev();
extern void _ZN7S4301C33v20Ev();
extern void _ZN7S4301C33v21Ev();
extern void _ZN7S4301C33v22Ev();
extern void _ZN7S4301C33v23Ev();
extern void _ZN7S4301C33v24Ev();
extern void _ZN7S4301C33v25Ev();
extern void _ZN7S4301C33v26Ev();
extern void _ZN7S4301C33v27Ev();
extern void _ZN7S4301C33v28Ev();
extern void _ZN7S4301C33v29Ev();
extern void _ZN7S4301C33v30Ev();
extern void _ZN7S4301C33v31Ev();
extern void _ZN7S4301C33v32Ev();
extern void _ZN7S4301C33v33Ev();
extern void _ZN7S4301C33v34Ev();
extern void _ZN7S4301C33v35Ev();
extern void _ZN7S4301C33v36Ev();
extern void _ZN7S4301C33v37Ev();
extern void _ZN7S4301C33v38Ev();
extern void _ZN7S4301C33v39Ev();
extern void _ZN7S4301C33v40Ev();
extern void _ZN7S4301C33v41Ev();
extern void _ZN7S4301C33v42Ev();
extern void _ZN7S4301C33v43Ev();
extern void _ZN7S4301C23v44Ev();
extern void _ZN7S4301C23v45Ev();
extern void _ZN7S4301C23v46Ev();
extern void _ZN7S4301C23v47Ev();
extern void _ZN7S4301C23v48Ev();
extern void _ZN7S4301C23v49Ev();
extern void _ZN7S4301C23v50Ev();
extern void _ZN7S4301C23v51Ev();
extern void _ZN7S4301C23v52Ev();
extern void _ZN7S4301C23v53Ev();
extern void _ZN7S4301C23v54Ev();
extern void _ZN7S4301C23v55Ev();
extern void _ZN7S4301C23v56Ev();
extern void _ZN7S4301C23v57Ev();
static  VTBL_ENTRY vtc_S4301C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4301C2[0]),
  (VTBL_ENTRY)&_ZN7S4301C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4301C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4301C33v18Ev,
  (VTBL_ENTRY)&_ZN7S4301C33v19Ev,
  (VTBL_ENTRY)&_ZN7S4301C33v20Ev,
  (VTBL_ENTRY)&_ZN7S4301C33v21Ev,
  (VTBL_ENTRY)&_ZN7S4301C33v22Ev,
  (VTBL_ENTRY)&_ZN7S4301C33v23Ev,
  (VTBL_ENTRY)&_ZN7S4301C33v24Ev,
  (VTBL_ENTRY)&_ZN7S4301C33v25Ev,
  (VTBL_ENTRY)&_ZN7S4301C33v26Ev,
  (VTBL_ENTRY)&_ZN7S4301C33v27Ev,
  (VTBL_ENTRY)&_ZN7S4301C33v28Ev,
  (VTBL_ENTRY)&_ZN7S4301C33v29Ev,
  (VTBL_ENTRY)&_ZN7S4301C33v30Ev,
  (VTBL_ENTRY)&_ZN7S4301C33v31Ev,
  (VTBL_ENTRY)&_ZN7S4301C33v32Ev,
  (VTBL_ENTRY)&_ZN7S4301C33v33Ev,
  (VTBL_ENTRY)&_ZN7S4301C33v34Ev,
  (VTBL_ENTRY)&_ZN7S4301C33v35Ev,
  (VTBL_ENTRY)&_ZN7S4301C33v36Ev,
  (VTBL_ENTRY)&_ZN7S4301C33v37Ev,
  (VTBL_ENTRY)&_ZN7S4301C33v38Ev,
  (VTBL_ENTRY)&_ZN7S4301C33v39Ev,
  (VTBL_ENTRY)&_ZN7S4301C33v40Ev,
  (VTBL_ENTRY)&_ZN7S4301C33v41Ev,
  (VTBL_ENTRY)&_ZN7S4301C33v42Ev,
  (VTBL_ENTRY)&_ZN7S4301C33v43Ev,
  (VTBL_ENTRY)&_ZN7S4301C23v44Ev,
  (VTBL_ENTRY)&_ZN7S4301C23v45Ev,
  (VTBL_ENTRY)&_ZN7S4301C23v46Ev,
  (VTBL_ENTRY)&_ZN7S4301C23v47Ev,
  (VTBL_ENTRY)&_ZN7S4301C23v48Ev,
  (VTBL_ENTRY)&_ZN7S4301C23v49Ev,
  (VTBL_ENTRY)&_ZN7S4301C23v50Ev,
  (VTBL_ENTRY)&_ZN7S4301C23v51Ev,
  (VTBL_ENTRY)&_ZN7S4301C23v52Ev,
  (VTBL_ENTRY)&_ZN7S4301C23v53Ev,
  (VTBL_ENTRY)&_ZN7S4301C23v54Ev,
  (VTBL_ENTRY)&_ZN7S4301C23v55Ev,
  (VTBL_ENTRY)&_ZN7S4301C23v56Ev,
  (VTBL_ENTRY)&_ZN7S4301C23v57Ev,
};
extern VTBL_ENTRY _ZTI7S4301C2[];
extern  VTBL_ENTRY _ZTV7S4301C2[];
Class_Descriptor cd_S4301C2 = {  "S4301C2", // class name
  bases_S4301C2, 1,
  &(vtc_S4301C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,48), // object size
  NSPAIRA(_ZTI7S4301C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4301C2),44, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4301C5  {
  virtual  ~S4301C5(); // _ZN7S4301C5D1Ev
  virtual void  v58(); // _ZN7S4301C53v58Ev
  virtual void  v59(); // _ZN7S4301C53v59Ev
  virtual void  v60(); // _ZN7S4301C53v60Ev
  virtual void  v61(); // _ZN7S4301C53v61Ev
  virtual void  v62(); // _ZN7S4301C53v62Ev
  virtual void  v63(); // _ZN7S4301C53v63Ev
  virtual void  v64(); // _ZN7S4301C53v64Ev
  S4301C5(); // tgen
};
//SIG(-1 S4301C5) C1{ vd v1 v2 v3 v4 v5 v6 v7}


 S4301C5 ::~S4301C5(){ note_dtor("S4301C5", this);}
void  S4301C5 ::v58(){vfunc_called(this, "_ZN7S4301C53v58Ev");}
void  S4301C5 ::v59(){vfunc_called(this, "_ZN7S4301C53v59Ev");}
void  S4301C5 ::v60(){vfunc_called(this, "_ZN7S4301C53v60Ev");}
void  S4301C5 ::v61(){vfunc_called(this, "_ZN7S4301C53v61Ev");}
void  S4301C5 ::v62(){vfunc_called(this, "_ZN7S4301C53v62Ev");}
void  S4301C5 ::v63(){vfunc_called(this, "_ZN7S4301C53v63Ev");}
void  S4301C5 ::v64(){vfunc_called(this, "_ZN7S4301C53v64Ev");}
S4301C5 ::S4301C5(){ note_ctor("S4301C5", this);} // tgen

static void Test_S4301C5()
{
  extern Class_Descriptor cd_S4301C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S4301C5, buf);
    S4301C5 *dp, &lv = *(dp=new (buf) S4301C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S4301C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4301C5)");
    test_class_info(&lv, &cd_S4301C5);
    dp->~S4301C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4301C5(Test_S4301C5, "S4301C5", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S4301C5C1Ev();
extern void _ZN7S4301C5D1Ev();
Name_Map name_map_S4301C5[] = {
  NSPAIR(_ZN7S4301C5C1Ev),
  NSPAIR(_ZN7S4301C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4301C5[];
extern void _ZN7S4301C5D1Ev();
extern void _ZN7S4301C5D0Ev();
extern void _ZN7S4301C53v58Ev();
extern void _ZN7S4301C53v59Ev();
extern void _ZN7S4301C53v60Ev();
extern void _ZN7S4301C53v61Ev();
extern void _ZN7S4301C53v62Ev();
extern void _ZN7S4301C53v63Ev();
extern void _ZN7S4301C53v64Ev();
static  VTBL_ENTRY vtc_S4301C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4301C5[0]),
  (VTBL_ENTRY)&_ZN7S4301C5D1Ev,
  (VTBL_ENTRY)&_ZN7S4301C5D0Ev,
  (VTBL_ENTRY)&_ZN7S4301C53v58Ev,
  (VTBL_ENTRY)&_ZN7S4301C53v59Ev,
  (VTBL_ENTRY)&_ZN7S4301C53v60Ev,
  (VTBL_ENTRY)&_ZN7S4301C53v61Ev,
  (VTBL_ENTRY)&_ZN7S4301C53v62Ev,
  (VTBL_ENTRY)&_ZN7S4301C53v63Ev,
  (VTBL_ENTRY)&_ZN7S4301C53v64Ev,
};
extern VTBL_ENTRY _ZTI7S4301C5[];
extern  VTBL_ENTRY _ZTV7S4301C5[];
Class_Descriptor cd_S4301C5 = {  "S4301C5", // class name
  0,0,//no base classes
  &(vtc_S4301C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S4301C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4301C5),11, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4301C1  : S4301C2 , S4301C5 {
  void *s4301c1f0[2];
  int s4301c1f1;
  void *s4301c1f2[2];
  virtual  ~S4301C1(); // _ZN7S4301C1D1Ev
  virtual void  v1(); // _ZN7S4301C12v1Ev
  virtual void  v2(); // _ZN7S4301C12v2Ev
  virtual void  v3(); // _ZN7S4301C12v3Ev
  virtual void  v4(); // _ZN7S4301C12v4Ev
  virtual void  v5(); // _ZN7S4301C12v5Ev
  virtual void  v6(); // _ZN7S4301C12v6Ev
  virtual void  v7(); // _ZN7S4301C12v7Ev
  virtual void  v8(); // _ZN7S4301C12v8Ev
  virtual void  v9(); // _ZN7S4301C12v9Ev
  virtual void  v10(); // _ZN7S4301C13v10Ev
  virtual void  v11(); // _ZN7S4301C13v11Ev
  virtual void  v12(); // _ZN7S4301C13v12Ev
  virtual void  v13(); // _ZN7S4301C13v13Ev
  virtual void  v14(); // _ZN7S4301C13v14Ev
  virtual void  v15(); // _ZN7S4301C13v15Ev
  virtual void  v16(); // _ZN7S4301C13v16Ev
  virtual void  v17(); // _ZN7S4301C13v17Ev
  S4301C1(); // tgen
};
//SIG(1 S4301C1) C1{ BC2{ BC3{ vd v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43} vd v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 Fp[2] Fi[4] FC4{ Fi[2]} Fp Fc Fp} BC5{ vd v58 v59 v60 v61 v62 v63 v64} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 Fp[2] Fi Fp[2]}


 S4301C1 ::~S4301C1(){ note_dtor("S4301C1", this);}
void  S4301C1 ::v1(){vfunc_called(this, "_ZN7S4301C12v1Ev");}
void  S4301C1 ::v2(){vfunc_called(this, "_ZN7S4301C12v2Ev");}
void  S4301C1 ::v3(){vfunc_called(this, "_ZN7S4301C12v3Ev");}
void  S4301C1 ::v4(){vfunc_called(this, "_ZN7S4301C12v4Ev");}
void  S4301C1 ::v5(){vfunc_called(this, "_ZN7S4301C12v5Ev");}
void  S4301C1 ::v6(){vfunc_called(this, "_ZN7S4301C12v6Ev");}
void  S4301C1 ::v7(){vfunc_called(this, "_ZN7S4301C12v7Ev");}
void  S4301C1 ::v8(){vfunc_called(this, "_ZN7S4301C12v8Ev");}
void  S4301C1 ::v9(){vfunc_called(this, "_ZN7S4301C12v9Ev");}
void  S4301C1 ::v10(){vfunc_called(this, "_ZN7S4301C13v10Ev");}
void  S4301C1 ::v11(){vfunc_called(this, "_ZN7S4301C13v11Ev");}
void  S4301C1 ::v12(){vfunc_called(this, "_ZN7S4301C13v12Ev");}
void  S4301C1 ::v13(){vfunc_called(this, "_ZN7S4301C13v13Ev");}
void  S4301C1 ::v14(){vfunc_called(this, "_ZN7S4301C13v14Ev");}
void  S4301C1 ::v15(){vfunc_called(this, "_ZN7S4301C13v15Ev");}
void  S4301C1 ::v16(){vfunc_called(this, "_ZN7S4301C13v16Ev");}
void  S4301C1 ::v17(){vfunc_called(this, "_ZN7S4301C13v17Ev");}
S4301C1 ::S4301C1(){ note_ctor("S4301C1", this);} // tgen

static void Test_S4301C1()
{
  extern Class_Descriptor cd_S4301C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(16,19)];
    init_test(&cd_S4301C1, buf);
    S4301C1 *dp, &lv = *(dp=new (buf) S4301C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(120,72), "sizeof(S4301C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4301C1)");
    check_base_class_offset(lv, (S4301C3*)(S4301C2*), 0, "S4301C1");
    check_base_class_offset(lv, (S4301C2*), 0, "S4301C1");
    check_base_class_offset(lv, (S4301C5*), ABISELECT(72,48), "S4301C1");
    check_field_offset(lv, s4301c1f0, ABISELECT(80,52), "S4301C1.s4301c1f0");
    check_field_offset(lv, s4301c1f1, ABISELECT(96,60), "S4301C1.s4301c1f1");
    check_field_offset(lv, s4301c1f2, ABISELECT(104,64), "S4301C1.s4301c1f2");
    test_class_info(&lv, &cd_S4301C1);
    dp->~S4301C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4301C1(Test_S4301C1, "S4301C1", ABISELECT(120,72));

#else // __cplusplus

extern void _ZN7S4301C1C1Ev();
extern void _ZN7S4301C1D1Ev();
Name_Map name_map_S4301C1[] = {
  NSPAIR(_ZN7S4301C1C1Ev),
  NSPAIR(_ZN7S4301C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4301C3;
extern VTBL_ENTRY _ZTI7S4301C3[];
extern  VTBL_ENTRY _ZTV7S4301C3[];
extern Class_Descriptor cd_S4301C2;
extern VTBL_ENTRY _ZTI7S4301C2[];
extern  VTBL_ENTRY _ZTV7S4301C2[];
extern Class_Descriptor cd_S4301C5;
extern VTBL_ENTRY _ZTI7S4301C5[];
extern  VTBL_ENTRY _ZTV7S4301C5[];
static Base_Class bases_S4301C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4301C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S4301C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S4301C5,    ABISELECT(72,48), //bcp->offset
    61, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4301C1[];
extern void _ZN7S4301C1D1Ev();
extern void _ZN7S4301C1D0Ev();
extern void _ZN7S4301C33v18Ev();
extern void _ZN7S4301C33v19Ev();
extern void _ZN7S4301C33v20Ev();
extern void _ZN7S4301C33v21Ev();
extern void _ZN7S4301C33v22Ev();
extern void _ZN7S4301C33v23Ev();
extern void _ZN7S4301C33v24Ev();
extern void _ZN7S4301C33v25Ev();
extern void _ZN7S4301C33v26Ev();
extern void _ZN7S4301C33v27Ev();
extern void _ZN7S4301C33v28Ev();
extern void _ZN7S4301C33v29Ev();
extern void _ZN7S4301C33v30Ev();
extern void _ZN7S4301C33v31Ev();
extern void _ZN7S4301C33v32Ev();
extern void _ZN7S4301C33v33Ev();
extern void _ZN7S4301C33v34Ev();
extern void _ZN7S4301C33v35Ev();
extern void _ZN7S4301C33v36Ev();
extern void _ZN7S4301C33v37Ev();
extern void _ZN7S4301C33v38Ev();
extern void _ZN7S4301C33v39Ev();
extern void _ZN7S4301C33v40Ev();
extern void _ZN7S4301C33v41Ev();
extern void _ZN7S4301C33v42Ev();
extern void _ZN7S4301C33v43Ev();
extern void _ZN7S4301C23v44Ev();
extern void _ZN7S4301C23v45Ev();
extern void _ZN7S4301C23v46Ev();
extern void _ZN7S4301C23v47Ev();
extern void _ZN7S4301C23v48Ev();
extern void _ZN7S4301C23v49Ev();
extern void _ZN7S4301C23v50Ev();
extern void _ZN7S4301C23v51Ev();
extern void _ZN7S4301C23v52Ev();
extern void _ZN7S4301C23v53Ev();
extern void _ZN7S4301C23v54Ev();
extern void _ZN7S4301C23v55Ev();
extern void _ZN7S4301C23v56Ev();
extern void _ZN7S4301C23v57Ev();
extern void _ZN7S4301C12v1Ev();
extern void _ZN7S4301C12v2Ev();
extern void _ZN7S4301C12v3Ev();
extern void _ZN7S4301C12v4Ev();
extern void _ZN7S4301C12v5Ev();
extern void _ZN7S4301C12v6Ev();
extern void _ZN7S4301C12v7Ev();
extern void _ZN7S4301C12v8Ev();
extern void _ZN7S4301C12v9Ev();
extern void _ZN7S4301C13v10Ev();
extern void _ZN7S4301C13v11Ev();
extern void _ZN7S4301C13v12Ev();
extern void _ZN7S4301C13v13Ev();
extern void _ZN7S4301C13v14Ev();
extern void _ZN7S4301C13v15Ev();
extern void _ZN7S4301C13v16Ev();
extern void _ZN7S4301C13v17Ev();
extern void ABISELECT(_ZThn72_N7S4301C1D1Ev,_ZThn48_N7S4301C1D1Ev)();
extern void ABISELECT(_ZThn72_N7S4301C1D0Ev,_ZThn48_N7S4301C1D0Ev)();
extern void _ZN7S4301C53v58Ev();
extern void _ZN7S4301C53v59Ev();
extern void _ZN7S4301C53v60Ev();
extern void _ZN7S4301C53v61Ev();
extern void _ZN7S4301C53v62Ev();
extern void _ZN7S4301C53v63Ev();
extern void _ZN7S4301C53v64Ev();
static  VTBL_ENTRY vtc_S4301C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4301C1[0]),
  (VTBL_ENTRY)&_ZN7S4301C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4301C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4301C33v18Ev,
  (VTBL_ENTRY)&_ZN7S4301C33v19Ev,
  (VTBL_ENTRY)&_ZN7S4301C33v20Ev,
  (VTBL_ENTRY)&_ZN7S4301C33v21Ev,
  (VTBL_ENTRY)&_ZN7S4301C33v22Ev,
  (VTBL_ENTRY)&_ZN7S4301C33v23Ev,
  (VTBL_ENTRY)&_ZN7S4301C33v24Ev,
  (VTBL_ENTRY)&_ZN7S4301C33v25Ev,
  (VTBL_ENTRY)&_ZN7S4301C33v26Ev,
  (VTBL_ENTRY)&_ZN7S4301C33v27Ev,
  (VTBL_ENTRY)&_ZN7S4301C33v28Ev,
  (VTBL_ENTRY)&_ZN7S4301C33v29Ev,
  (VTBL_ENTRY)&_ZN7S4301C33v30Ev,
  (VTBL_ENTRY)&_ZN7S4301C33v31Ev,
  (VTBL_ENTRY)&_ZN7S4301C33v32Ev,
  (VTBL_ENTRY)&_ZN7S4301C33v33Ev,
  (VTBL_ENTRY)&_ZN7S4301C33v34Ev,
  (VTBL_ENTRY)&_ZN7S4301C33v35Ev,
  (VTBL_ENTRY)&_ZN7S4301C33v36Ev,
  (VTBL_ENTRY)&_ZN7S4301C33v37Ev,
  (VTBL_ENTRY)&_ZN7S4301C33v38Ev,
  (VTBL_ENTRY)&_ZN7S4301C33v39Ev,
  (VTBL_ENTRY)&_ZN7S4301C33v40Ev,
  (VTBL_ENTRY)&_ZN7S4301C33v41Ev,
  (VTBL_ENTRY)&_ZN7S4301C33v42Ev,
  (VTBL_ENTRY)&_ZN7S4301C33v43Ev,
  (VTBL_ENTRY)&_ZN7S4301C23v44Ev,
  (VTBL_ENTRY)&_ZN7S4301C23v45Ev,
  (VTBL_ENTRY)&_ZN7S4301C23v46Ev,
  (VTBL_ENTRY)&_ZN7S4301C23v47Ev,
  (VTBL_ENTRY)&_ZN7S4301C23v48Ev,
  (VTBL_ENTRY)&_ZN7S4301C23v49Ev,
  (VTBL_ENTRY)&_ZN7S4301C23v50Ev,
  (VTBL_ENTRY)&_ZN7S4301C23v51Ev,
  (VTBL_ENTRY)&_ZN7S4301C23v52Ev,
  (VTBL_ENTRY)&_ZN7S4301C23v53Ev,
  (VTBL_ENTRY)&_ZN7S4301C23v54Ev,
  (VTBL_ENTRY)&_ZN7S4301C23v55Ev,
  (VTBL_ENTRY)&_ZN7S4301C23v56Ev,
  (VTBL_ENTRY)&_ZN7S4301C23v57Ev,
  (VTBL_ENTRY)&_ZN7S4301C12v1Ev,
  (VTBL_ENTRY)&_ZN7S4301C12v2Ev,
  (VTBL_ENTRY)&_ZN7S4301C12v3Ev,
  (VTBL_ENTRY)&_ZN7S4301C12v4Ev,
  (VTBL_ENTRY)&_ZN7S4301C12v5Ev,
  (VTBL_ENTRY)&_ZN7S4301C12v6Ev,
  (VTBL_ENTRY)&_ZN7S4301C12v7Ev,
  (VTBL_ENTRY)&_ZN7S4301C12v8Ev,
  (VTBL_ENTRY)&_ZN7S4301C12v9Ev,
  (VTBL_ENTRY)&_ZN7S4301C13v10Ev,
  (VTBL_ENTRY)&_ZN7S4301C13v11Ev,
  (VTBL_ENTRY)&_ZN7S4301C13v12Ev,
  (VTBL_ENTRY)&_ZN7S4301C13v13Ev,
  (VTBL_ENTRY)&_ZN7S4301C13v14Ev,
  (VTBL_ENTRY)&_ZN7S4301C13v15Ev,
  (VTBL_ENTRY)&_ZN7S4301C13v16Ev,
  (VTBL_ENTRY)&_ZN7S4301C13v17Ev,
  ABISELECT(-72,-48),
  (VTBL_ENTRY)&(_ZTI7S4301C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn72_N7S4301C1D1Ev,_ZThn48_N7S4301C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn72_N7S4301C1D0Ev,_ZThn48_N7S4301C1D0Ev),
  (VTBL_ENTRY)&_ZN7S4301C53v58Ev,
  (VTBL_ENTRY)&_ZN7S4301C53v59Ev,
  (VTBL_ENTRY)&_ZN7S4301C53v60Ev,
  (VTBL_ENTRY)&_ZN7S4301C53v61Ev,
  (VTBL_ENTRY)&_ZN7S4301C53v62Ev,
  (VTBL_ENTRY)&_ZN7S4301C53v63Ev,
  (VTBL_ENTRY)&_ZN7S4301C53v64Ev,
};
extern VTBL_ENTRY _ZTI7S4301C1[];
extern  VTBL_ENTRY _ZTV7S4301C1[];
Class_Descriptor cd_S4301C1 = {  "S4301C1", // class name
  bases_S4301C1, 3,
  &(vtc_S4301C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(120,72), // object size
  NSPAIRA(_ZTI7S4301C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S4301C1),72, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4278C3  {
  virtual  ~S4278C3(); // _ZN7S4278C3D1Ev
  virtual void  v15(); // _ZN7S4278C33v15Ev
  virtual void  v16(); // _ZN7S4278C33v16Ev
  virtual void  v17(); // _ZN7S4278C33v17Ev
  virtual void  v18(); // _ZN7S4278C33v18Ev
  virtual void  v19(); // _ZN7S4278C33v19Ev
  virtual void  v20(); // _ZN7S4278C33v20Ev
  virtual void  v21(); // _ZN7S4278C33v21Ev
  virtual void  v22(); // _ZN7S4278C33v22Ev
  virtual void  v23(); // _ZN7S4278C33v23Ev
  virtual void  v24(); // _ZN7S4278C33v24Ev
  virtual void  v25(); // _ZN7S4278C33v25Ev
  virtual void  v26(); // _ZN7S4278C33v26Ev
  virtual void  v27(); // _ZN7S4278C33v27Ev
  virtual void  v28(); // _ZN7S4278C33v28Ev
  virtual void  v29(); // _ZN7S4278C33v29Ev
  virtual void  v30(); // _ZN7S4278C33v30Ev
  virtual void  v31(); // _ZN7S4278C33v31Ev
  virtual void  v32(); // _ZN7S4278C33v32Ev
  virtual void  v33(); // _ZN7S4278C33v33Ev
  virtual void  v34(); // _ZN7S4278C33v34Ev
  virtual void  v35(); // _ZN7S4278C33v35Ev
  virtual void  v36(); // _ZN7S4278C33v36Ev
  virtual void  v37(); // _ZN7S4278C33v37Ev
  virtual void  v38(); // _ZN7S4278C33v38Ev
  virtual void  v39(); // _ZN7S4278C33v39Ev
  virtual void  v40(); // _ZN7S4278C33v40Ev
  S4278C3(); // tgen
};
//SIG(-1 S4278C3) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26}


 S4278C3 ::~S4278C3(){ note_dtor("S4278C3", this);}
void  S4278C3 ::v15(){vfunc_called(this, "_ZN7S4278C33v15Ev");}
void  S4278C3 ::v16(){vfunc_called(this, "_ZN7S4278C33v16Ev");}
void  S4278C3 ::v17(){vfunc_called(this, "_ZN7S4278C33v17Ev");}
void  S4278C3 ::v18(){vfunc_called(this, "_ZN7S4278C33v18Ev");}
void  S4278C3 ::v19(){vfunc_called(this, "_ZN7S4278C33v19Ev");}
void  S4278C3 ::v20(){vfunc_called(this, "_ZN7S4278C33v20Ev");}
void  S4278C3 ::v21(){vfunc_called(this, "_ZN7S4278C33v21Ev");}
void  S4278C3 ::v22(){vfunc_called(this, "_ZN7S4278C33v22Ev");}
void  S4278C3 ::v23(){vfunc_called(this, "_ZN7S4278C33v23Ev");}
void  S4278C3 ::v24(){vfunc_called(this, "_ZN7S4278C33v24Ev");}
void  S4278C3 ::v25(){vfunc_called(this, "_ZN7S4278C33v25Ev");}
void  S4278C3 ::v26(){vfunc_called(this, "_ZN7S4278C33v26Ev");}
void  S4278C3 ::v27(){vfunc_called(this, "_ZN7S4278C33v27Ev");}
void  S4278C3 ::v28(){vfunc_called(this, "_ZN7S4278C33v28Ev");}
void  S4278C3 ::v29(){vfunc_called(this, "_ZN7S4278C33v29Ev");}
void  S4278C3 ::v30(){vfunc_called(this, "_ZN7S4278C33v30Ev");}
void  S4278C3 ::v31(){vfunc_called(this, "_ZN7S4278C33v31Ev");}
void  S4278C3 ::v32(){vfunc_called(this, "_ZN7S4278C33v32Ev");}
void  S4278C3 ::v33(){vfunc_called(this, "_ZN7S4278C33v33Ev");}
void  S4278C3 ::v34(){vfunc_called(this, "_ZN7S4278C33v34Ev");}
void  S4278C3 ::v35(){vfunc_called(this, "_ZN7S4278C33v35Ev");}
void  S4278C3 ::v36(){vfunc_called(this, "_ZN7S4278C33v36Ev");}
void  S4278C3 ::v37(){vfunc_called(this, "_ZN7S4278C33v37Ev");}
void  S4278C3 ::v38(){vfunc_called(this, "_ZN7S4278C33v38Ev");}
void  S4278C3 ::v39(){vfunc_called(this, "_ZN7S4278C33v39Ev");}
void  S4278C3 ::v40(){vfunc_called(this, "_ZN7S4278C33v40Ev");}
S4278C3 ::S4278C3(){ note_ctor("S4278C3", this);} // tgen

static void Test_S4278C3()
{
  extern Class_Descriptor cd_S4278C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S4278C3, buf);
    S4278C3 *dp, &lv = *(dp=new (buf) S4278C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S4278C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4278C3)");
    test_class_info(&lv, &cd_S4278C3);
    dp->~S4278C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4278C3(Test_S4278C3, "S4278C3", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S4278C3C1Ev();
extern void _ZN7S4278C3D1Ev();
Name_Map name_map_S4278C3[] = {
  NSPAIR(_ZN7S4278C3C1Ev),
  NSPAIR(_ZN7S4278C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4278C3[];
extern void _ZN7S4278C3D1Ev();
extern void _ZN7S4278C3D0Ev();
extern void _ZN7S4278C33v15Ev();
extern void _ZN7S4278C33v16Ev();
extern void _ZN7S4278C33v17Ev();
extern void _ZN7S4278C33v18Ev();
extern void _ZN7S4278C33v19Ev();
extern void _ZN7S4278C33v20Ev();
extern void _ZN7S4278C33v21Ev();
extern void _ZN7S4278C33v22Ev();
extern void _ZN7S4278C33v23Ev();
extern void _ZN7S4278C33v24Ev();
extern void _ZN7S4278C33v25Ev();
extern void _ZN7S4278C33v26Ev();
extern void _ZN7S4278C33v27Ev();
extern void _ZN7S4278C33v28Ev();
extern void _ZN7S4278C33v29Ev();
extern void _ZN7S4278C33v30Ev();
extern void _ZN7S4278C33v31Ev();
extern void _ZN7S4278C33v32Ev();
extern void _ZN7S4278C33v33Ev();
extern void _ZN7S4278C33v34Ev();
extern void _ZN7S4278C33v35Ev();
extern void _ZN7S4278C33v36Ev();
extern void _ZN7S4278C33v37Ev();
extern void _ZN7S4278C33v38Ev();
extern void _ZN7S4278C33v39Ev();
extern void _ZN7S4278C33v40Ev();
static  VTBL_ENTRY vtc_S4278C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4278C3[0]),
  (VTBL_ENTRY)&_ZN7S4278C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4278C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4278C33v15Ev,
  (VTBL_ENTRY)&_ZN7S4278C33v16Ev,
  (VTBL_ENTRY)&_ZN7S4278C33v17Ev,
  (VTBL_ENTRY)&_ZN7S4278C33v18Ev,
  (VTBL_ENTRY)&_ZN7S4278C33v19Ev,
  (VTBL_ENTRY)&_ZN7S4278C33v20Ev,
  (VTBL_ENTRY)&_ZN7S4278C33v21Ev,
  (VTBL_ENTRY)&_ZN7S4278C33v22Ev,
  (VTBL_ENTRY)&_ZN7S4278C33v23Ev,
  (VTBL_ENTRY)&_ZN7S4278C33v24Ev,
  (VTBL_ENTRY)&_ZN7S4278C33v25Ev,
  (VTBL_ENTRY)&_ZN7S4278C33v26Ev,
  (VTBL_ENTRY)&_ZN7S4278C33v27Ev,
  (VTBL_ENTRY)&_ZN7S4278C33v28Ev,
  (VTBL_ENTRY)&_ZN7S4278C33v29Ev,
  (VTBL_ENTRY)&_ZN7S4278C33v30Ev,
  (VTBL_ENTRY)&_ZN7S4278C33v31Ev,
  (VTBL_ENTRY)&_ZN7S4278C33v32Ev,
  (VTBL_ENTRY)&_ZN7S4278C33v33Ev,
  (VTBL_ENTRY)&_ZN7S4278C33v34Ev,
  (VTBL_ENTRY)&_ZN7S4278C33v35Ev,
  (VTBL_ENTRY)&_ZN7S4278C33v36Ev,
  (VTBL_ENTRY)&_ZN7S4278C33v37Ev,
  (VTBL_ENTRY)&_ZN7S4278C33v38Ev,
  (VTBL_ENTRY)&_ZN7S4278C33v39Ev,
  (VTBL_ENTRY)&_ZN7S4278C33v40Ev,
};
extern VTBL_ENTRY _ZTI7S4278C3[];
extern  VTBL_ENTRY _ZTV7S4278C3[];
Class_Descriptor cd_S4278C3 = {  "S4278C3", // class name
  0,0,//no base classes
  &(vtc_S4278C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S4278C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4278C3),30, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4278C2  : S4278C3 {
  void *s4278c2f0[2];
  int s4278c2f1[4];
  ::S2423C5_nt s4278c2f2;
  void *s4278c2f3;
  char s4278c2f4;
  void *s4278c2f5;
  virtual  ~S4278C2(); // _ZN7S4278C2D1Ev
  virtual void  v41(); // _ZN7S4278C23v41Ev
  virtual void  v42(); // _ZN7S4278C23v42Ev
  virtual void  v43(); // _ZN7S4278C23v43Ev
  virtual void  v44(); // _ZN7S4278C23v44Ev
  virtual void  v45(); // _ZN7S4278C23v45Ev
  virtual void  v46(); // _ZN7S4278C23v46Ev
  virtual void  v47(); // _ZN7S4278C23v47Ev
  virtual void  v48(); // _ZN7S4278C23v48Ev
  virtual void  v49(); // _ZN7S4278C23v49Ev
  virtual void  v50(); // _ZN7S4278C23v50Ev
  virtual void  v51(); // _ZN7S4278C23v51Ev
  virtual void  v52(); // _ZN7S4278C23v52Ev
  virtual void  v53(); // _ZN7S4278C23v53Ev
  virtual void  v54(); // _ZN7S4278C23v54Ev
  S4278C2(); // tgen
};
//SIG(-1 S4278C2) C1{ BC2{ vd v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 Fp[2] Fi[4] FC3{ Fi[2]} Fp Fc Fp}


 S4278C2 ::~S4278C2(){ note_dtor("S4278C2", this);}
void  S4278C2 ::v41(){vfunc_called(this, "_ZN7S4278C23v41Ev");}
void  S4278C2 ::v42(){vfunc_called(this, "_ZN7S4278C23v42Ev");}
void  S4278C2 ::v43(){vfunc_called(this, "_ZN7S4278C23v43Ev");}
void  S4278C2 ::v44(){vfunc_called(this, "_ZN7S4278C23v44Ev");}
void  S4278C2 ::v45(){vfunc_called(this, "_ZN7S4278C23v45Ev");}
void  S4278C2 ::v46(){vfunc_called(this, "_ZN7S4278C23v46Ev");}
void  S4278C2 ::v47(){vfunc_called(this, "_ZN7S4278C23v47Ev");}
void  S4278C2 ::v48(){vfunc_called(this, "_ZN7S4278C23v48Ev");}
void  S4278C2 ::v49(){vfunc_called(this, "_ZN7S4278C23v49Ev");}
void  S4278C2 ::v50(){vfunc_called(this, "_ZN7S4278C23v50Ev");}
void  S4278C2 ::v51(){vfunc_called(this, "_ZN7S4278C23v51Ev");}
void  S4278C2 ::v52(){vfunc_called(this, "_ZN7S4278C23v52Ev");}
void  S4278C2 ::v53(){vfunc_called(this, "_ZN7S4278C23v53Ev");}
void  S4278C2 ::v54(){vfunc_called(this, "_ZN7S4278C23v54Ev");}
S4278C2 ::S4278C2(){ note_ctor("S4278C2", this);} // tgen

static void Test_S4278C2()
{
  extern Class_Descriptor cd_S4278C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,13)];
    init_test(&cd_S4278C2, buf);
    S4278C2 *dp, &lv = *(dp=new (buf) S4278C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,48), "sizeof(S4278C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4278C2)");
    check_base_class_offset(lv, (S4278C3*), 0, "S4278C2");
    check_field_offset(lv, s4278c2f0, ABISELECT(8,4), "S4278C2.s4278c2f0");
    check_field_offset(lv, s4278c2f1, ABISELECT(24,12), "S4278C2.s4278c2f1");
    check_field_offset(lv, s4278c2f2, ABISELECT(40,28), "S4278C2.s4278c2f2");
    check_field_offset(lv, s4278c2f3, ABISELECT(48,36), "S4278C2.s4278c2f3");
    check_field_offset(lv, s4278c2f4, ABISELECT(56,40), "S4278C2.s4278c2f4");
    check_field_offset(lv, s4278c2f5, ABISELECT(64,44), "S4278C2.s4278c2f5");
    test_class_info(&lv, &cd_S4278C2);
    dp->~S4278C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4278C2(Test_S4278C2, "S4278C2", ABISELECT(72,48));

#else // __cplusplus

extern void _ZN7S4278C2C1Ev();
extern void _ZN7S4278C2D1Ev();
Name_Map name_map_S4278C2[] = {
  NSPAIR(_ZN7S4278C2C1Ev),
  NSPAIR(_ZN7S4278C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4278C3;
extern VTBL_ENTRY _ZTI7S4278C3[];
extern  VTBL_ENTRY _ZTV7S4278C3[];
static Base_Class bases_S4278C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4278C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4278C2[];
extern void _ZN7S4278C2D1Ev();
extern void _ZN7S4278C2D0Ev();
extern void _ZN7S4278C33v15Ev();
extern void _ZN7S4278C33v16Ev();
extern void _ZN7S4278C33v17Ev();
extern void _ZN7S4278C33v18Ev();
extern void _ZN7S4278C33v19Ev();
extern void _ZN7S4278C33v20Ev();
extern void _ZN7S4278C33v21Ev();
extern void _ZN7S4278C33v22Ev();
extern void _ZN7S4278C33v23Ev();
extern void _ZN7S4278C33v24Ev();
extern void _ZN7S4278C33v25Ev();
extern void _ZN7S4278C33v26Ev();
extern void _ZN7S4278C33v27Ev();
extern void _ZN7S4278C33v28Ev();
extern void _ZN7S4278C33v29Ev();
extern void _ZN7S4278C33v30Ev();
extern void _ZN7S4278C33v31Ev();
extern void _ZN7S4278C33v32Ev();
extern void _ZN7S4278C33v33Ev();
extern void _ZN7S4278C33v34Ev();
extern void _ZN7S4278C33v35Ev();
extern void _ZN7S4278C33v36Ev();
extern void _ZN7S4278C33v37Ev();
extern void _ZN7S4278C33v38Ev();
extern void _ZN7S4278C33v39Ev();
extern void _ZN7S4278C33v40Ev();
extern void _ZN7S4278C23v41Ev();
extern void _ZN7S4278C23v42Ev();
extern void _ZN7S4278C23v43Ev();
extern void _ZN7S4278C23v44Ev();
extern void _ZN7S4278C23v45Ev();
extern void _ZN7S4278C23v46Ev();
extern void _ZN7S4278C23v47Ev();
extern void _ZN7S4278C23v48Ev();
extern void _ZN7S4278C23v49Ev();
extern void _ZN7S4278C23v50Ev();
extern void _ZN7S4278C23v51Ev();
extern void _ZN7S4278C23v52Ev();
extern void _ZN7S4278C23v53Ev();
extern void _ZN7S4278C23v54Ev();
static  VTBL_ENTRY vtc_S4278C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4278C2[0]),
  (VTBL_ENTRY)&_ZN7S4278C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4278C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4278C33v15Ev,
  (VTBL_ENTRY)&_ZN7S4278C33v16Ev,
  (VTBL_ENTRY)&_ZN7S4278C33v17Ev,
  (VTBL_ENTRY)&_ZN7S4278C33v18Ev,
  (VTBL_ENTRY)&_ZN7S4278C33v19Ev,
  (VTBL_ENTRY)&_ZN7S4278C33v20Ev,
  (VTBL_ENTRY)&_ZN7S4278C33v21Ev,
  (VTBL_ENTRY)&_ZN7S4278C33v22Ev,
  (VTBL_ENTRY)&_ZN7S4278C33v23Ev,
  (VTBL_ENTRY)&_ZN7S4278C33v24Ev,
  (VTBL_ENTRY)&_ZN7S4278C33v25Ev,
  (VTBL_ENTRY)&_ZN7S4278C33v26Ev,
  (VTBL_ENTRY)&_ZN7S4278C33v27Ev,
  (VTBL_ENTRY)&_ZN7S4278C33v28Ev,
  (VTBL_ENTRY)&_ZN7S4278C33v29Ev,
  (VTBL_ENTRY)&_ZN7S4278C33v30Ev,
  (VTBL_ENTRY)&_ZN7S4278C33v31Ev,
  (VTBL_ENTRY)&_ZN7S4278C33v32Ev,
  (VTBL_ENTRY)&_ZN7S4278C33v33Ev,
  (VTBL_ENTRY)&_ZN7S4278C33v34Ev,
  (VTBL_ENTRY)&_ZN7S4278C33v35Ev,
  (VTBL_ENTRY)&_ZN7S4278C33v36Ev,
  (VTBL_ENTRY)&_ZN7S4278C33v37Ev,
  (VTBL_ENTRY)&_ZN7S4278C33v38Ev,
  (VTBL_ENTRY)&_ZN7S4278C33v39Ev,
  (VTBL_ENTRY)&_ZN7S4278C33v40Ev,
  (VTBL_ENTRY)&_ZN7S4278C23v41Ev,
  (VTBL_ENTRY)&_ZN7S4278C23v42Ev,
  (VTBL_ENTRY)&_ZN7S4278C23v43Ev,
  (VTBL_ENTRY)&_ZN7S4278C23v44Ev,
  (VTBL_ENTRY)&_ZN7S4278C23v45Ev,
  (VTBL_ENTRY)&_ZN7S4278C23v46Ev,
  (VTBL_ENTRY)&_ZN7S4278C23v47Ev,
  (VTBL_ENTRY)&_ZN7S4278C23v48Ev,
  (VTBL_ENTRY)&_ZN7S4278C23v49Ev,
  (VTBL_ENTRY)&_ZN7S4278C23v50Ev,
  (VTBL_ENTRY)&_ZN7S4278C23v51Ev,
  (VTBL_ENTRY)&_ZN7S4278C23v52Ev,
  (VTBL_ENTRY)&_ZN7S4278C23v53Ev,
  (VTBL_ENTRY)&_ZN7S4278C23v54Ev,
};
extern VTBL_ENTRY _ZTI7S4278C2[];
extern  VTBL_ENTRY _ZTV7S4278C2[];
Class_Descriptor cd_S4278C2 = {  "S4278C2", // class name
  bases_S4278C2, 1,
  &(vtc_S4278C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,48), // object size
  NSPAIRA(_ZTI7S4278C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4278C2),44, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4278C5  {
  void *s4278c5f0;
  char s4278c5f1[32];
  int s4278c5f2[6];
  char s4278c5f3;
  int s4278c5f4[2];
  virtual  ~S4278C5(); // _ZN7S4278C5D1Ev
  virtual void  v55(); // _ZN7S4278C53v55Ev
  virtual void  v56(); // _ZN7S4278C53v56Ev
  S4278C5(); // tgen
};
//SIG(-1 S4278C5) C1{ vd v1 v2 Fp Fc[32] Fi[6] Fc Fi[2]}


 S4278C5 ::~S4278C5(){ note_dtor("S4278C5", this);}
void  S4278C5 ::v55(){vfunc_called(this, "_ZN7S4278C53v55Ev");}
void  S4278C5 ::v56(){vfunc_called(this, "_ZN7S4278C53v56Ev");}
S4278C5 ::S4278C5(){ note_ctor("S4278C5", this);} // tgen

static void Test_S4278C5()
{
  extern Class_Descriptor cd_S4278C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(12,20)];
    init_test(&cd_S4278C5, buf);
    S4278C5 *dp, &lv = *(dp=new (buf) S4278C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(88,76), "sizeof(S4278C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4278C5)");
    check_field_offset(lv, s4278c5f0, ABISELECT(8,4), "S4278C5.s4278c5f0");
    check_field_offset(lv, s4278c5f1, ABISELECT(16,8), "S4278C5.s4278c5f1");
    check_field_offset(lv, s4278c5f2, ABISELECT(48,40), "S4278C5.s4278c5f2");
    check_field_offset(lv, s4278c5f3, ABISELECT(72,64), "S4278C5.s4278c5f3");
    check_field_offset(lv, s4278c5f4, ABISELECT(76,68), "S4278C5.s4278c5f4");
    test_class_info(&lv, &cd_S4278C5);
    dp->~S4278C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4278C5(Test_S4278C5, "S4278C5", ABISELECT(88,76));

#else // __cplusplus

extern void _ZN7S4278C5C1Ev();
extern void _ZN7S4278C5D1Ev();
Name_Map name_map_S4278C5[] = {
  NSPAIR(_ZN7S4278C5C1Ev),
  NSPAIR(_ZN7S4278C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4278C5[];
extern void _ZN7S4278C5D1Ev();
extern void _ZN7S4278C5D0Ev();
extern void _ZN7S4278C53v55Ev();
extern void _ZN7S4278C53v56Ev();
static  VTBL_ENTRY vtc_S4278C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4278C5[0]),
  (VTBL_ENTRY)&_ZN7S4278C5D1Ev,
  (VTBL_ENTRY)&_ZN7S4278C5D0Ev,
  (VTBL_ENTRY)&_ZN7S4278C53v55Ev,
  (VTBL_ENTRY)&_ZN7S4278C53v56Ev,
};
extern VTBL_ENTRY _ZTI7S4278C5[];
extern  VTBL_ENTRY _ZTV7S4278C5[];
Class_Descriptor cd_S4278C5 = {  "S4278C5", // class name
  0,0,//no base classes
  &(vtc_S4278C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(88,76), // object size
  NSPAIRA(_ZTI7S4278C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4278C5),6, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4278C6_nt  {
  virtual  ~S4278C6_nt(); // _ZN10S4278C6_ntD1Ev
  virtual void  v57(); // _ZN10S4278C6_nt3v57Ev
  S4278C6_nt(); // tgen
};
//SIG(-1 S4278C6_nt) C1{ vd v1}


 S4278C6_nt ::~S4278C6_nt(){ note_dtor("S4278C6_nt", this);}
void  S4278C6_nt ::v57(){vfunc_called(this, "_ZN10S4278C6_nt3v57Ev");}
S4278C6_nt ::S4278C6_nt(){ note_ctor("S4278C6_nt", this);} // tgen

//skip512 S4278C6_nt

#else // __cplusplus

extern void _ZN10S4278C6_ntC1Ev();
extern void _ZN10S4278C6_ntD1Ev();
Name_Map name_map_S4278C6_nt[] = {
  NSPAIR(_ZN10S4278C6_ntC1Ev),
  NSPAIR(_ZN10S4278C6_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S4278C6_nt[];
extern void _ZN10S4278C6_ntD1Ev();
extern void _ZN10S4278C6_ntD0Ev();
extern void _ZN10S4278C6_nt3v57Ev();
static  VTBL_ENTRY vtc_S4278C6_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S4278C6_nt[0]),
  (VTBL_ENTRY)&_ZN10S4278C6_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S4278C6_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S4278C6_nt3v57Ev,
};
extern VTBL_ENTRY _ZTI10S4278C6_nt[];
VTBL_ENTRY *P__ZTI10S4278C6_nt = _ZTI10S4278C6_nt; 
extern  VTBL_ENTRY _ZTV10S4278C6_nt[];
Class_Descriptor cd_S4278C6_nt = {  "S4278C6_nt", // class name
  0,0,//no base classes
  &(vtc_S4278C6_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI10S4278C6_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S4278C6_nt),5, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4278C1  : S4278C2 , S4278C5 , S4278C6_nt {
  void *s4278c1f0[6];
  virtual  ~S4278C1(); // _ZN7S4278C1D1Ev
  virtual void  v1(); // _ZN7S4278C12v1Ev
  virtual void  v2(); // _ZN7S4278C12v2Ev
  virtual void  v3(); // _ZN7S4278C12v3Ev
  virtual void  v4(); // _ZN7S4278C12v4Ev
  virtual void  v5(); // _ZN7S4278C12v5Ev
  virtual void  v6(); // _ZN7S4278C12v6Ev
  virtual void  v7(); // _ZN7S4278C12v7Ev
  virtual void  v8(); // _ZN7S4278C12v8Ev
  virtual void  v9(); // _ZN7S4278C12v9Ev
  virtual void  v10(); // _ZN7S4278C13v10Ev
  virtual void  v11(); // _ZN7S4278C13v11Ev
  virtual void  v12(); // _ZN7S4278C13v12Ev
  virtual void  v13(); // _ZN7S4278C13v13Ev
  virtual void  v14(); // _ZN7S4278C13v14Ev
  S4278C1(); // tgen
};
//SIG(1 S4278C1) C1{ BC2{ BC3{ vd v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40} vd v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 Fp[2] Fi[4] FC4{ Fi[2]} Fp Fc Fp} BC5{ vd v55 v56 Fp Fc[32] Fi[6] Fc Fi[2]} BC6{ vd v57} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 Fp[6]}


 S4278C1 ::~S4278C1(){ note_dtor("S4278C1", this);}
void  S4278C1 ::v1(){vfunc_called(this, "_ZN7S4278C12v1Ev");}
void  S4278C1 ::v2(){vfunc_called(this, "_ZN7S4278C12v2Ev");}
void  S4278C1 ::v3(){vfunc_called(this, "_ZN7S4278C12v3Ev");}
void  S4278C1 ::v4(){vfunc_called(this, "_ZN7S4278C12v4Ev");}
void  S4278C1 ::v5(){vfunc_called(this, "_ZN7S4278C12v5Ev");}
void  S4278C1 ::v6(){vfunc_called(this, "_ZN7S4278C12v6Ev");}
void  S4278C1 ::v7(){vfunc_called(this, "_ZN7S4278C12v7Ev");}
void  S4278C1 ::v8(){vfunc_called(this, "_ZN7S4278C12v8Ev");}
void  S4278C1 ::v9(){vfunc_called(this, "_ZN7S4278C12v9Ev");}
void  S4278C1 ::v10(){vfunc_called(this, "_ZN7S4278C13v10Ev");}
void  S4278C1 ::v11(){vfunc_called(this, "_ZN7S4278C13v11Ev");}
void  S4278C1 ::v12(){vfunc_called(this, "_ZN7S4278C13v12Ev");}
void  S4278C1 ::v13(){vfunc_called(this, "_ZN7S4278C13v13Ev");}
void  S4278C1 ::v14(){vfunc_called(this, "_ZN7S4278C13v14Ev");}
S4278C1 ::S4278C1(){ note_ctor("S4278C1", this);} // tgen

static void Test_S4278C1()
{
  extern Class_Descriptor cd_S4278C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(28,39)];
    init_test(&cd_S4278C1, buf);
    S4278C1 *dp, &lv = *(dp=new (buf) S4278C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(216,152), "sizeof(S4278C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4278C1)");
    check_base_class_offset(lv, (S4278C3*)(S4278C2*), 0, "S4278C1");
    check_base_class_offset(lv, (S4278C2*), 0, "S4278C1");
    check_base_class_offset(lv, (S4278C5*), ABISELECT(72,48), "S4278C1");
    check_base_class_offset(lv, (S4278C6_nt*), ABISELECT(160,124), "S4278C1");
    check_field_offset(lv, s4278c1f0, ABISELECT(168,128), "S4278C1.s4278c1f0");
    test_class_info(&lv, &cd_S4278C1);
    dp->~S4278C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4278C1(Test_S4278C1, "S4278C1", ABISELECT(216,152));

#else // __cplusplus

extern void _ZN7S4278C1C1Ev();
extern void _ZN7S4278C1D1Ev();
Name_Map name_map_S4278C1[] = {
  NSPAIR(_ZN7S4278C1C1Ev),
  NSPAIR(_ZN7S4278C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4278C3;
extern VTBL_ENTRY _ZTI7S4278C3[];
extern  VTBL_ENTRY _ZTV7S4278C3[];
extern Class_Descriptor cd_S4278C2;
extern VTBL_ENTRY _ZTI7S4278C2[];
extern  VTBL_ENTRY _ZTV7S4278C2[];
extern Class_Descriptor cd_S4278C5;
extern VTBL_ENTRY _ZTI7S4278C5[];
extern  VTBL_ENTRY _ZTV7S4278C5[];
extern Class_Descriptor cd_S4278C6_nt;
extern VTBL_ENTRY _ZTI10S4278C6_nt[];
extern  VTBL_ENTRY _ZTV10S4278C6_nt[];
static Base_Class bases_S4278C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4278C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S4278C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S4278C5,    ABISELECT(72,48), //bcp->offset
    58, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S4278C6_nt,    ABISELECT(160,124), //bcp->offset
    64, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4278C1[];
extern void _ZN7S4278C1D1Ev();
extern void _ZN7S4278C1D0Ev();
extern void _ZN7S4278C33v15Ev();
extern void _ZN7S4278C33v16Ev();
extern void _ZN7S4278C33v17Ev();
extern void _ZN7S4278C33v18Ev();
extern void _ZN7S4278C33v19Ev();
extern void _ZN7S4278C33v20Ev();
extern void _ZN7S4278C33v21Ev();
extern void _ZN7S4278C33v22Ev();
extern void _ZN7S4278C33v23Ev();
extern void _ZN7S4278C33v24Ev();
extern void _ZN7S4278C33v25Ev();
extern void _ZN7S4278C33v26Ev();
extern void _ZN7S4278C33v27Ev();
extern void _ZN7S4278C33v28Ev();
extern void _ZN7S4278C33v29Ev();
extern void _ZN7S4278C33v30Ev();
extern void _ZN7S4278C33v31Ev();
extern void _ZN7S4278C33v32Ev();
extern void _ZN7S4278C33v33Ev();
extern void _ZN7S4278C33v34Ev();
extern void _ZN7S4278C33v35Ev();
extern void _ZN7S4278C33v36Ev();
extern void _ZN7S4278C33v37Ev();
extern void _ZN7S4278C33v38Ev();
extern void _ZN7S4278C33v39Ev();
extern void _ZN7S4278C33v40Ev();
extern void _ZN7S4278C23v41Ev();
extern void _ZN7S4278C23v42Ev();
extern void _ZN7S4278C23v43Ev();
extern void _ZN7S4278C23v44Ev();
extern void _ZN7S4278C23v45Ev();
extern void _ZN7S4278C23v46Ev();
extern void _ZN7S4278C23v47Ev();
extern void _ZN7S4278C23v48Ev();
extern void _ZN7S4278C23v49Ev();
extern void _ZN7S4278C23v50Ev();
extern void _ZN7S4278C23v51Ev();
extern void _ZN7S4278C23v52Ev();
extern void _ZN7S4278C23v53Ev();
extern void _ZN7S4278C23v54Ev();
extern void _ZN7S4278C12v1Ev();
extern void _ZN7S4278C12v2Ev();
extern void _ZN7S4278C12v3Ev();
extern void _ZN7S4278C12v4Ev();
extern void _ZN7S4278C12v5Ev();
extern void _ZN7S4278C12v6Ev();
extern void _ZN7S4278C12v7Ev();
extern void _ZN7S4278C12v8Ev();
extern void _ZN7S4278C12v9Ev();
extern void _ZN7S4278C13v10Ev();
extern void _ZN7S4278C13v11Ev();
extern void _ZN7S4278C13v12Ev();
extern void _ZN7S4278C13v13Ev();
extern void _ZN7S4278C13v14Ev();
extern void ABISELECT(_ZThn72_N7S4278C1D1Ev,_ZThn48_N7S4278C1D1Ev)();
extern void ABISELECT(_ZThn72_N7S4278C1D0Ev,_ZThn48_N7S4278C1D0Ev)();
extern void _ZN7S4278C53v55Ev();
extern void _ZN7S4278C53v56Ev();
extern void ABISELECT(_ZThn160_N7S4278C1D1Ev,_ZThn124_N7S4278C1D1Ev)();
extern void ABISELECT(_ZThn160_N7S4278C1D0Ev,_ZThn124_N7S4278C1D0Ev)();
extern void _ZN10S4278C6_nt3v57Ev();
static  VTBL_ENTRY vtc_S4278C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4278C1[0]),
  (VTBL_ENTRY)&_ZN7S4278C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4278C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4278C33v15Ev,
  (VTBL_ENTRY)&_ZN7S4278C33v16Ev,
  (VTBL_ENTRY)&_ZN7S4278C33v17Ev,
  (VTBL_ENTRY)&_ZN7S4278C33v18Ev,
  (VTBL_ENTRY)&_ZN7S4278C33v19Ev,
  (VTBL_ENTRY)&_ZN7S4278C33v20Ev,
  (VTBL_ENTRY)&_ZN7S4278C33v21Ev,
  (VTBL_ENTRY)&_ZN7S4278C33v22Ev,
  (VTBL_ENTRY)&_ZN7S4278C33v23Ev,
  (VTBL_ENTRY)&_ZN7S4278C33v24Ev,
  (VTBL_ENTRY)&_ZN7S4278C33v25Ev,
  (VTBL_ENTRY)&_ZN7S4278C33v26Ev,
  (VTBL_ENTRY)&_ZN7S4278C33v27Ev,
  (VTBL_ENTRY)&_ZN7S4278C33v28Ev,
  (VTBL_ENTRY)&_ZN7S4278C33v29Ev,
  (VTBL_ENTRY)&_ZN7S4278C33v30Ev,
  (VTBL_ENTRY)&_ZN7S4278C33v31Ev,
  (VTBL_ENTRY)&_ZN7S4278C33v32Ev,
  (VTBL_ENTRY)&_ZN7S4278C33v33Ev,
  (VTBL_ENTRY)&_ZN7S4278C33v34Ev,
  (VTBL_ENTRY)&_ZN7S4278C33v35Ev,
  (VTBL_ENTRY)&_ZN7S4278C33v36Ev,
  (VTBL_ENTRY)&_ZN7S4278C33v37Ev,
  (VTBL_ENTRY)&_ZN7S4278C33v38Ev,
  (VTBL_ENTRY)&_ZN7S4278C33v39Ev,
  (VTBL_ENTRY)&_ZN7S4278C33v40Ev,
  (VTBL_ENTRY)&_ZN7S4278C23v41Ev,
  (VTBL_ENTRY)&_ZN7S4278C23v42Ev,
  (VTBL_ENTRY)&_ZN7S4278C23v43Ev,
  (VTBL_ENTRY)&_ZN7S4278C23v44Ev,
  (VTBL_ENTRY)&_ZN7S4278C23v45Ev,
  (VTBL_ENTRY)&_ZN7S4278C23v46Ev,
  (VTBL_ENTRY)&_ZN7S4278C23v47Ev,
  (VTBL_ENTRY)&_ZN7S4278C23v48Ev,
  (VTBL_ENTRY)&_ZN7S4278C23v49Ev,
  (VTBL_ENTRY)&_ZN7S4278C23v50Ev,
  (VTBL_ENTRY)&_ZN7S4278C23v51Ev,
  (VTBL_ENTRY)&_ZN7S4278C23v52Ev,
  (VTBL_ENTRY)&_ZN7S4278C23v53Ev,
  (VTBL_ENTRY)&_ZN7S4278C23v54Ev,
  (VTBL_ENTRY)&_ZN7S4278C12v1Ev,
  (VTBL_ENTRY)&_ZN7S4278C12v2Ev,
  (VTBL_ENTRY)&_ZN7S4278C12v3Ev,
  (VTBL_ENTRY)&_ZN7S4278C12v4Ev,
  (VTBL_ENTRY)&_ZN7S4278C12v5Ev,
  (VTBL_ENTRY)&_ZN7S4278C12v6Ev,
  (VTBL_ENTRY)&_ZN7S4278C12v7Ev,
  (VTBL_ENTRY)&_ZN7S4278C12v8Ev,
  (VTBL_ENTRY)&_ZN7S4278C12v9Ev,
  (VTBL_ENTRY)&_ZN7S4278C13v10Ev,
  (VTBL_ENTRY)&_ZN7S4278C13v11Ev,
  (VTBL_ENTRY)&_ZN7S4278C13v12Ev,
  (VTBL_ENTRY)&_ZN7S4278C13v13Ev,
  (VTBL_ENTRY)&_ZN7S4278C13v14Ev,
  ABISELECT(-72,-48),
  (VTBL_ENTRY)&(_ZTI7S4278C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn72_N7S4278C1D1Ev,_ZThn48_N7S4278C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn72_N7S4278C1D0Ev,_ZThn48_N7S4278C1D0Ev),
  (VTBL_ENTRY)&_ZN7S4278C53v55Ev,
  (VTBL_ENTRY)&_ZN7S4278C53v56Ev,
  ABISELECT(-160,-124),
  (VTBL_ENTRY)&(_ZTI7S4278C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn160_N7S4278C1D1Ev,_ZThn124_N7S4278C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn160_N7S4278C1D0Ev,_ZThn124_N7S4278C1D0Ev),
  (VTBL_ENTRY)&_ZN10S4278C6_nt3v57Ev,
};
extern VTBL_ENTRY _ZTI7S4278C1[];
extern  VTBL_ENTRY _ZTV7S4278C1[];
Class_Descriptor cd_S4278C1 = {  "S4278C1", // class name
  bases_S4278C1, 4,
  &(vtc_S4278C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(216,152), // object size
  NSPAIRA(_ZTI7S4278C1),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S4278C1),69, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  4, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4265C3  {
  virtual  ~S4265C3(); // _ZN7S4265C3D1Ev
  virtual void  v14(); // _ZN7S4265C33v14Ev
  virtual void  v15(); // _ZN7S4265C33v15Ev
  virtual void  v16(); // _ZN7S4265C33v16Ev
  virtual void  v17(); // _ZN7S4265C33v17Ev
  virtual void  v18(); // _ZN7S4265C33v18Ev
  virtual void  v19(); // _ZN7S4265C33v19Ev
  virtual void  v20(); // _ZN7S4265C33v20Ev
  virtual void  v21(); // _ZN7S4265C33v21Ev
  virtual void  v22(); // _ZN7S4265C33v22Ev
  virtual void  v23(); // _ZN7S4265C33v23Ev
  virtual void  v24(); // _ZN7S4265C33v24Ev
  virtual void  v25(); // _ZN7S4265C33v25Ev
  virtual void  v26(); // _ZN7S4265C33v26Ev
  virtual void  v27(); // _ZN7S4265C33v27Ev
  virtual void  v28(); // _ZN7S4265C33v28Ev
  virtual void  v29(); // _ZN7S4265C33v29Ev
  virtual void  v30(); // _ZN7S4265C33v30Ev
  virtual void  v31(); // _ZN7S4265C33v31Ev
  virtual void  v32(); // _ZN7S4265C33v32Ev
  virtual void  v33(); // _ZN7S4265C33v33Ev
  virtual void  v34(); // _ZN7S4265C33v34Ev
  virtual void  v35(); // _ZN7S4265C33v35Ev
  virtual void  v36(); // _ZN7S4265C33v36Ev
  virtual void  v37(); // _ZN7S4265C33v37Ev
  virtual void  v38(); // _ZN7S4265C33v38Ev
  virtual void  v39(); // _ZN7S4265C33v39Ev
  S4265C3(); // tgen
};
//SIG(-1 S4265C3) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26}


 S4265C3 ::~S4265C3(){ note_dtor("S4265C3", this);}
void  S4265C3 ::v14(){vfunc_called(this, "_ZN7S4265C33v14Ev");}
void  S4265C3 ::v15(){vfunc_called(this, "_ZN7S4265C33v15Ev");}
void  S4265C3 ::v16(){vfunc_called(this, "_ZN7S4265C33v16Ev");}
void  S4265C3 ::v17(){vfunc_called(this, "_ZN7S4265C33v17Ev");}
void  S4265C3 ::v18(){vfunc_called(this, "_ZN7S4265C33v18Ev");}
void  S4265C3 ::v19(){vfunc_called(this, "_ZN7S4265C33v19Ev");}
void  S4265C3 ::v20(){vfunc_called(this, "_ZN7S4265C33v20Ev");}
void  S4265C3 ::v21(){vfunc_called(this, "_ZN7S4265C33v21Ev");}
void  S4265C3 ::v22(){vfunc_called(this, "_ZN7S4265C33v22Ev");}
void  S4265C3 ::v23(){vfunc_called(this, "_ZN7S4265C33v23Ev");}
void  S4265C3 ::v24(){vfunc_called(this, "_ZN7S4265C33v24Ev");}
void  S4265C3 ::v25(){vfunc_called(this, "_ZN7S4265C33v25Ev");}
void  S4265C3 ::v26(){vfunc_called(this, "_ZN7S4265C33v26Ev");}
void  S4265C3 ::v27(){vfunc_called(this, "_ZN7S4265C33v27Ev");}
void  S4265C3 ::v28(){vfunc_called(this, "_ZN7S4265C33v28Ev");}
void  S4265C3 ::v29(){vfunc_called(this, "_ZN7S4265C33v29Ev");}
void  S4265C3 ::v30(){vfunc_called(this, "_ZN7S4265C33v30Ev");}
void  S4265C3 ::v31(){vfunc_called(this, "_ZN7S4265C33v31Ev");}
void  S4265C3 ::v32(){vfunc_called(this, "_ZN7S4265C33v32Ev");}
void  S4265C3 ::v33(){vfunc_called(this, "_ZN7S4265C33v33Ev");}
void  S4265C3 ::v34(){vfunc_called(this, "_ZN7S4265C33v34Ev");}
void  S4265C3 ::v35(){vfunc_called(this, "_ZN7S4265C33v35Ev");}
void  S4265C3 ::v36(){vfunc_called(this, "_ZN7S4265C33v36Ev");}
void  S4265C3 ::v37(){vfunc_called(this, "_ZN7S4265C33v37Ev");}
void  S4265C3 ::v38(){vfunc_called(this, "_ZN7S4265C33v38Ev");}
void  S4265C3 ::v39(){vfunc_called(this, "_ZN7S4265C33v39Ev");}
S4265C3 ::S4265C3(){ note_ctor("S4265C3", this);} // tgen

static void Test_S4265C3()
{
  extern Class_Descriptor cd_S4265C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S4265C3, buf);
    S4265C3 *dp, &lv = *(dp=new (buf) S4265C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S4265C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4265C3)");
    test_class_info(&lv, &cd_S4265C3);
    dp->~S4265C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4265C3(Test_S4265C3, "S4265C3", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S4265C3C1Ev();
extern void _ZN7S4265C3D1Ev();
Name_Map name_map_S4265C3[] = {
  NSPAIR(_ZN7S4265C3C1Ev),
  NSPAIR(_ZN7S4265C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4265C3[];
extern void _ZN7S4265C3D1Ev();
extern void _ZN7S4265C3D0Ev();
extern void _ZN7S4265C33v14Ev();
extern void _ZN7S4265C33v15Ev();
extern void _ZN7S4265C33v16Ev();
extern void _ZN7S4265C33v17Ev();
extern void _ZN7S4265C33v18Ev();
extern void _ZN7S4265C33v19Ev();
extern void _ZN7S4265C33v20Ev();
extern void _ZN7S4265C33v21Ev();
extern void _ZN7S4265C33v22Ev();
extern void _ZN7S4265C33v23Ev();
extern void _ZN7S4265C33v24Ev();
extern void _ZN7S4265C33v25Ev();
extern void _ZN7S4265C33v26Ev();
extern void _ZN7S4265C33v27Ev();
extern void _ZN7S4265C33v28Ev();
extern void _ZN7S4265C33v29Ev();
extern void _ZN7S4265C33v30Ev();
extern void _ZN7S4265C33v31Ev();
extern void _ZN7S4265C33v32Ev();
extern void _ZN7S4265C33v33Ev();
extern void _ZN7S4265C33v34Ev();
extern void _ZN7S4265C33v35Ev();
extern void _ZN7S4265C33v36Ev();
extern void _ZN7S4265C33v37Ev();
extern void _ZN7S4265C33v38Ev();
extern void _ZN7S4265C33v39Ev();
static  VTBL_ENTRY vtc_S4265C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4265C3[0]),
  (VTBL_ENTRY)&_ZN7S4265C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4265C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4265C33v14Ev,
  (VTBL_ENTRY)&_ZN7S4265C33v15Ev,
  (VTBL_ENTRY)&_ZN7S4265C33v16Ev,
  (VTBL_ENTRY)&_ZN7S4265C33v17Ev,
  (VTBL_ENTRY)&_ZN7S4265C33v18Ev,
  (VTBL_ENTRY)&_ZN7S4265C33v19Ev,
  (VTBL_ENTRY)&_ZN7S4265C33v20Ev,
  (VTBL_ENTRY)&_ZN7S4265C33v21Ev,
  (VTBL_ENTRY)&_ZN7S4265C33v22Ev,
  (VTBL_ENTRY)&_ZN7S4265C33v23Ev,
  (VTBL_ENTRY)&_ZN7S4265C33v24Ev,
  (VTBL_ENTRY)&_ZN7S4265C33v25Ev,
  (VTBL_ENTRY)&_ZN7S4265C33v26Ev,
  (VTBL_ENTRY)&_ZN7S4265C33v27Ev,
  (VTBL_ENTRY)&_ZN7S4265C33v28Ev,
  (VTBL_ENTRY)&_ZN7S4265C33v29Ev,
  (VTBL_ENTRY)&_ZN7S4265C33v30Ev,
  (VTBL_ENTRY)&_ZN7S4265C33v31Ev,
  (VTBL_ENTRY)&_ZN7S4265C33v32Ev,
  (VTBL_ENTRY)&_ZN7S4265C33v33Ev,
  (VTBL_ENTRY)&_ZN7S4265C33v34Ev,
  (VTBL_ENTRY)&_ZN7S4265C33v35Ev,
  (VTBL_ENTRY)&_ZN7S4265C33v36Ev,
  (VTBL_ENTRY)&_ZN7S4265C33v37Ev,
  (VTBL_ENTRY)&_ZN7S4265C33v38Ev,
  (VTBL_ENTRY)&_ZN7S4265C33v39Ev,
};
extern VTBL_ENTRY _ZTI7S4265C3[];
extern  VTBL_ENTRY _ZTV7S4265C3[];
Class_Descriptor cd_S4265C3 = {  "S4265C3", // class name
  0,0,//no base classes
  &(vtc_S4265C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S4265C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4265C3),30, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4265C2  : S4265C3 {
  void *s4265c2f0[2];
  int s4265c2f1[4];
  ::S2423C5_nt s4265c2f2;
  void *s4265c2f3;
  char s4265c2f4;
  void *s4265c2f5;
  virtual  ~S4265C2(); // _ZN7S4265C2D1Ev
  virtual void  v40(); // _ZN7S4265C23v40Ev
  virtual void  v41(); // _ZN7S4265C23v41Ev
  virtual void  v42(); // _ZN7S4265C23v42Ev
  virtual void  v43(); // _ZN7S4265C23v43Ev
  virtual void  v44(); // _ZN7S4265C23v44Ev
  virtual void  v45(); // _ZN7S4265C23v45Ev
  virtual void  v46(); // _ZN7S4265C23v46Ev
  virtual void  v47(); // _ZN7S4265C23v47Ev
  virtual void  v48(); // _ZN7S4265C23v48Ev
  virtual void  v49(); // _ZN7S4265C23v49Ev
  virtual void  v50(); // _ZN7S4265C23v50Ev
  virtual void  v51(); // _ZN7S4265C23v51Ev
  virtual void  v52(); // _ZN7S4265C23v52Ev
  virtual void  v53(); // _ZN7S4265C23v53Ev
  S4265C2(); // tgen
};
//SIG(-1 S4265C2) C1{ BC2{ vd v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 Fp[2] Fi[4] FC3{ Fi[2]} Fp Fc Fp}


 S4265C2 ::~S4265C2(){ note_dtor("S4265C2", this);}
void  S4265C2 ::v40(){vfunc_called(this, "_ZN7S4265C23v40Ev");}
void  S4265C2 ::v41(){vfunc_called(this, "_ZN7S4265C23v41Ev");}
void  S4265C2 ::v42(){vfunc_called(this, "_ZN7S4265C23v42Ev");}
void  S4265C2 ::v43(){vfunc_called(this, "_ZN7S4265C23v43Ev");}
void  S4265C2 ::v44(){vfunc_called(this, "_ZN7S4265C23v44Ev");}
void  S4265C2 ::v45(){vfunc_called(this, "_ZN7S4265C23v45Ev");}
void  S4265C2 ::v46(){vfunc_called(this, "_ZN7S4265C23v46Ev");}
void  S4265C2 ::v47(){vfunc_called(this, "_ZN7S4265C23v47Ev");}
void  S4265C2 ::v48(){vfunc_called(this, "_ZN7S4265C23v48Ev");}
void  S4265C2 ::v49(){vfunc_called(this, "_ZN7S4265C23v49Ev");}
void  S4265C2 ::v50(){vfunc_called(this, "_ZN7S4265C23v50Ev");}
void  S4265C2 ::v51(){vfunc_called(this, "_ZN7S4265C23v51Ev");}
void  S4265C2 ::v52(){vfunc_called(this, "_ZN7S4265C23v52Ev");}
void  S4265C2 ::v53(){vfunc_called(this, "_ZN7S4265C23v53Ev");}
S4265C2 ::S4265C2(){ note_ctor("S4265C2", this);} // tgen

static void Test_S4265C2()
{
  extern Class_Descriptor cd_S4265C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,13)];
    init_test(&cd_S4265C2, buf);
    S4265C2 *dp, &lv = *(dp=new (buf) S4265C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,48), "sizeof(S4265C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4265C2)");
    check_base_class_offset(lv, (S4265C3*), 0, "S4265C2");
    check_field_offset(lv, s4265c2f0, ABISELECT(8,4), "S4265C2.s4265c2f0");
    check_field_offset(lv, s4265c2f1, ABISELECT(24,12), "S4265C2.s4265c2f1");
    check_field_offset(lv, s4265c2f2, ABISELECT(40,28), "S4265C2.s4265c2f2");
    check_field_offset(lv, s4265c2f3, ABISELECT(48,36), "S4265C2.s4265c2f3");
    check_field_offset(lv, s4265c2f4, ABISELECT(56,40), "S4265C2.s4265c2f4");
    check_field_offset(lv, s4265c2f5, ABISELECT(64,44), "S4265C2.s4265c2f5");
    test_class_info(&lv, &cd_S4265C2);
    dp->~S4265C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4265C2(Test_S4265C2, "S4265C2", ABISELECT(72,48));

#else // __cplusplus

extern void _ZN7S4265C2C1Ev();
extern void _ZN7S4265C2D1Ev();
Name_Map name_map_S4265C2[] = {
  NSPAIR(_ZN7S4265C2C1Ev),
  NSPAIR(_ZN7S4265C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4265C3;
extern VTBL_ENTRY _ZTI7S4265C3[];
extern  VTBL_ENTRY _ZTV7S4265C3[];
static Base_Class bases_S4265C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4265C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4265C2[];
extern void _ZN7S4265C2D1Ev();
extern void _ZN7S4265C2D0Ev();
extern void _ZN7S4265C33v14Ev();
extern void _ZN7S4265C33v15Ev();
extern void _ZN7S4265C33v16Ev();
extern void _ZN7S4265C33v17Ev();
extern void _ZN7S4265C33v18Ev();
extern void _ZN7S4265C33v19Ev();
extern void _ZN7S4265C33v20Ev();
extern void _ZN7S4265C33v21Ev();
extern void _ZN7S4265C33v22Ev();
extern void _ZN7S4265C33v23Ev();
extern void _ZN7S4265C33v24Ev();
extern void _ZN7S4265C33v25Ev();
extern void _ZN7S4265C33v26Ev();
extern void _ZN7S4265C33v27Ev();
extern void _ZN7S4265C33v28Ev();
extern void _ZN7S4265C33v29Ev();
extern void _ZN7S4265C33v30Ev();
extern void _ZN7S4265C33v31Ev();
extern void _ZN7S4265C33v32Ev();
extern void _ZN7S4265C33v33Ev();
extern void _ZN7S4265C33v34Ev();
extern void _ZN7S4265C33v35Ev();
extern void _ZN7S4265C33v36Ev();
extern void _ZN7S4265C33v37Ev();
extern void _ZN7S4265C33v38Ev();
extern void _ZN7S4265C33v39Ev();
extern void _ZN7S4265C23v40Ev();
extern void _ZN7S4265C23v41Ev();
extern void _ZN7S4265C23v42Ev();
extern void _ZN7S4265C23v43Ev();
extern void _ZN7S4265C23v44Ev();
extern void _ZN7S4265C23v45Ev();
extern void _ZN7S4265C23v46Ev();
extern void _ZN7S4265C23v47Ev();
extern void _ZN7S4265C23v48Ev();
extern void _ZN7S4265C23v49Ev();
extern void _ZN7S4265C23v50Ev();
extern void _ZN7S4265C23v51Ev();
extern void _ZN7S4265C23v52Ev();
extern void _ZN7S4265C23v53Ev();
static  VTBL_ENTRY vtc_S4265C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4265C2[0]),
  (VTBL_ENTRY)&_ZN7S4265C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4265C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4265C33v14Ev,
  (VTBL_ENTRY)&_ZN7S4265C33v15Ev,
  (VTBL_ENTRY)&_ZN7S4265C33v16Ev,
  (VTBL_ENTRY)&_ZN7S4265C33v17Ev,
  (VTBL_ENTRY)&_ZN7S4265C33v18Ev,
  (VTBL_ENTRY)&_ZN7S4265C33v19Ev,
  (VTBL_ENTRY)&_ZN7S4265C33v20Ev,
  (VTBL_ENTRY)&_ZN7S4265C33v21Ev,
  (VTBL_ENTRY)&_ZN7S4265C33v22Ev,
  (VTBL_ENTRY)&_ZN7S4265C33v23Ev,
  (VTBL_ENTRY)&_ZN7S4265C33v24Ev,
  (VTBL_ENTRY)&_ZN7S4265C33v25Ev,
  (VTBL_ENTRY)&_ZN7S4265C33v26Ev,
  (VTBL_ENTRY)&_ZN7S4265C33v27Ev,
  (VTBL_ENTRY)&_ZN7S4265C33v28Ev,
  (VTBL_ENTRY)&_ZN7S4265C33v29Ev,
  (VTBL_ENTRY)&_ZN7S4265C33v30Ev,
  (VTBL_ENTRY)&_ZN7S4265C33v31Ev,
  (VTBL_ENTRY)&_ZN7S4265C33v32Ev,
  (VTBL_ENTRY)&_ZN7S4265C33v33Ev,
  (VTBL_ENTRY)&_ZN7S4265C33v34Ev,
  (VTBL_ENTRY)&_ZN7S4265C33v35Ev,
  (VTBL_ENTRY)&_ZN7S4265C33v36Ev,
  (VTBL_ENTRY)&_ZN7S4265C33v37Ev,
  (VTBL_ENTRY)&_ZN7S4265C33v38Ev,
  (VTBL_ENTRY)&_ZN7S4265C33v39Ev,
  (VTBL_ENTRY)&_ZN7S4265C23v40Ev,
  (VTBL_ENTRY)&_ZN7S4265C23v41Ev,
  (VTBL_ENTRY)&_ZN7S4265C23v42Ev,
  (VTBL_ENTRY)&_ZN7S4265C23v43Ev,
  (VTBL_ENTRY)&_ZN7S4265C23v44Ev,
  (VTBL_ENTRY)&_ZN7S4265C23v45Ev,
  (VTBL_ENTRY)&_ZN7S4265C23v46Ev,
  (VTBL_ENTRY)&_ZN7S4265C23v47Ev,
  (VTBL_ENTRY)&_ZN7S4265C23v48Ev,
  (VTBL_ENTRY)&_ZN7S4265C23v49Ev,
  (VTBL_ENTRY)&_ZN7S4265C23v50Ev,
  (VTBL_ENTRY)&_ZN7S4265C23v51Ev,
  (VTBL_ENTRY)&_ZN7S4265C23v52Ev,
  (VTBL_ENTRY)&_ZN7S4265C23v53Ev,
};
extern VTBL_ENTRY _ZTI7S4265C2[];
extern  VTBL_ENTRY _ZTV7S4265C2[];
Class_Descriptor cd_S4265C2 = {  "S4265C2", // class name
  bases_S4265C2, 1,
  &(vtc_S4265C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,48), // object size
  NSPAIRA(_ZTI7S4265C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4265C2),44, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4265C5  {
  void *s4265c5f0;
  char s4265c5f1[32];
  int s4265c5f2[6];
  char s4265c5f3;
  int s4265c5f4[2];
  virtual  ~S4265C5(); // _ZN7S4265C5D1Ev
  virtual void  v54(); // _ZN7S4265C53v54Ev
  virtual void  v55(); // _ZN7S4265C53v55Ev
  S4265C5(); // tgen
};
//SIG(-1 S4265C5) C1{ vd v1 v2 Fp Fc[32] Fi[6] Fc Fi[2]}


 S4265C5 ::~S4265C5(){ note_dtor("S4265C5", this);}
void  S4265C5 ::v54(){vfunc_called(this, "_ZN7S4265C53v54Ev");}
void  S4265C5 ::v55(){vfunc_called(this, "_ZN7S4265C53v55Ev");}
S4265C5 ::S4265C5(){ note_ctor("S4265C5", this);} // tgen

static void Test_S4265C5()
{
  extern Class_Descriptor cd_S4265C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(12,20)];
    init_test(&cd_S4265C5, buf);
    S4265C5 *dp, &lv = *(dp=new (buf) S4265C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(88,76), "sizeof(S4265C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4265C5)");
    check_field_offset(lv, s4265c5f0, ABISELECT(8,4), "S4265C5.s4265c5f0");
    check_field_offset(lv, s4265c5f1, ABISELECT(16,8), "S4265C5.s4265c5f1");
    check_field_offset(lv, s4265c5f2, ABISELECT(48,40), "S4265C5.s4265c5f2");
    check_field_offset(lv, s4265c5f3, ABISELECT(72,64), "S4265C5.s4265c5f3");
    check_field_offset(lv, s4265c5f4, ABISELECT(76,68), "S4265C5.s4265c5f4");
    test_class_info(&lv, &cd_S4265C5);
    dp->~S4265C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4265C5(Test_S4265C5, "S4265C5", ABISELECT(88,76));

#else // __cplusplus

extern void _ZN7S4265C5C1Ev();
extern void _ZN7S4265C5D1Ev();
Name_Map name_map_S4265C5[] = {
  NSPAIR(_ZN7S4265C5C1Ev),
  NSPAIR(_ZN7S4265C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4265C5[];
extern void _ZN7S4265C5D1Ev();
extern void _ZN7S4265C5D0Ev();
extern void _ZN7S4265C53v54Ev();
extern void _ZN7S4265C53v55Ev();
static  VTBL_ENTRY vtc_S4265C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4265C5[0]),
  (VTBL_ENTRY)&_ZN7S4265C5D1Ev,
  (VTBL_ENTRY)&_ZN7S4265C5D0Ev,
  (VTBL_ENTRY)&_ZN7S4265C53v54Ev,
  (VTBL_ENTRY)&_ZN7S4265C53v55Ev,
};
extern VTBL_ENTRY _ZTI7S4265C5[];
extern  VTBL_ENTRY _ZTV7S4265C5[];
Class_Descriptor cd_S4265C5 = {  "S4265C5", // class name
  0,0,//no base classes
  &(vtc_S4265C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(88,76), // object size
  NSPAIRA(_ZTI7S4265C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4265C5),6, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4265C1  : S4265C2 , S4265C5 {
  void *s4265c1f0[5];
  long s4265c1f1[4];
  virtual  ~S4265C1(); // _ZN7S4265C1D1Ev
  virtual void  v1(); // _ZN7S4265C12v1Ev
  virtual void  v2(); // _ZN7S4265C12v2Ev
  virtual void  v3(); // _ZN7S4265C12v3Ev
  virtual void  v4(); // _ZN7S4265C12v4Ev
  virtual void  v5(); // _ZN7S4265C12v5Ev
  virtual void  v6(); // _ZN7S4265C12v6Ev
  virtual void  v7(); // _ZN7S4265C12v7Ev
  virtual void  v8(); // _ZN7S4265C12v8Ev
  virtual void  v9(); // _ZN7S4265C12v9Ev
  virtual void  v10(); // _ZN7S4265C13v10Ev
  virtual void  v11(); // _ZN7S4265C13v11Ev
  virtual void  v12(); // _ZN7S4265C13v12Ev
  virtual void  v13(); // _ZN7S4265C13v13Ev
  S4265C1(); // tgen
};
//SIG(1 S4265C1) C1{ BC2{ BC3{ vd v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39} vd v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 Fp[2] Fi[4] FC4{ Fi[2]} Fp Fc Fp} BC5{ vd v54 v55 Fp Fc[32] Fi[6] Fc Fi[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 Fp[5] Fl[4]}


 S4265C1 ::~S4265C1(){ note_dtor("S4265C1", this);}
void  S4265C1 ::v1(){vfunc_called(this, "_ZN7S4265C12v1Ev");}
void  S4265C1 ::v2(){vfunc_called(this, "_ZN7S4265C12v2Ev");}
void  S4265C1 ::v3(){vfunc_called(this, "_ZN7S4265C12v3Ev");}
void  S4265C1 ::v4(){vfunc_called(this, "_ZN7S4265C12v4Ev");}
void  S4265C1 ::v5(){vfunc_called(this, "_ZN7S4265C12v5Ev");}
void  S4265C1 ::v6(){vfunc_called(this, "_ZN7S4265C12v6Ev");}
void  S4265C1 ::v7(){vfunc_called(this, "_ZN7S4265C12v7Ev");}
void  S4265C1 ::v8(){vfunc_called(this, "_ZN7S4265C12v8Ev");}
void  S4265C1 ::v9(){vfunc_called(this, "_ZN7S4265C12v9Ev");}
void  S4265C1 ::v10(){vfunc_called(this, "_ZN7S4265C13v10Ev");}
void  S4265C1 ::v11(){vfunc_called(this, "_ZN7S4265C13v11Ev");}
void  S4265C1 ::v12(){vfunc_called(this, "_ZN7S4265C13v12Ev");}
void  S4265C1 ::v13(){vfunc_called(this, "_ZN7S4265C13v13Ev");}
S4265C1 ::S4265C1(){ note_ctor("S4265C1", this);} // tgen

static void Test_S4265C1()
{
  extern Class_Descriptor cd_S4265C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(30,41)];
    init_test(&cd_S4265C1, buf);
    S4265C1 *dp, &lv = *(dp=new (buf) S4265C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(232,160), "sizeof(S4265C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4265C1)");
    check_base_class_offset(lv, (S4265C3*)(S4265C2*), 0, "S4265C1");
    check_base_class_offset(lv, (S4265C2*), 0, "S4265C1");
    check_base_class_offset(lv, (S4265C5*), ABISELECT(72,48), "S4265C1");
    check_field_offset(lv, s4265c1f0, ABISELECT(160,124), "S4265C1.s4265c1f0");
    check_field_offset(lv, s4265c1f1, ABISELECT(200,144), "S4265C1.s4265c1f1");
    test_class_info(&lv, &cd_S4265C1);
    dp->~S4265C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4265C1(Test_S4265C1, "S4265C1", ABISELECT(232,160));

#else // __cplusplus

extern void _ZN7S4265C1C1Ev();
extern void _ZN7S4265C1D1Ev();
Name_Map name_map_S4265C1[] = {
  NSPAIR(_ZN7S4265C1C1Ev),
  NSPAIR(_ZN7S4265C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4265C3;
extern VTBL_ENTRY _ZTI7S4265C3[];
extern  VTBL_ENTRY _ZTV7S4265C3[];
extern Class_Descriptor cd_S4265C2;
extern VTBL_ENTRY _ZTI7S4265C2[];
extern  VTBL_ENTRY _ZTV7S4265C2[];
extern Class_Descriptor cd_S4265C5;
extern VTBL_ENTRY _ZTI7S4265C5[];
extern  VTBL_ENTRY _ZTV7S4265C5[];
static Base_Class bases_S4265C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4265C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S4265C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S4265C5,    ABISELECT(72,48), //bcp->offset
    57, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4265C1[];
extern void _ZN7S4265C1D1Ev();
extern void _ZN7S4265C1D0Ev();
extern void _ZN7S4265C33v14Ev();
extern void _ZN7S4265C33v15Ev();
extern void _ZN7S4265C33v16Ev();
extern void _ZN7S4265C33v17Ev();
extern void _ZN7S4265C33v18Ev();
extern void _ZN7S4265C33v19Ev();
extern void _ZN7S4265C33v20Ev();
extern void _ZN7S4265C33v21Ev();
extern void _ZN7S4265C33v22Ev();
extern void _ZN7S4265C33v23Ev();
extern void _ZN7S4265C33v24Ev();
extern void _ZN7S4265C33v25Ev();
extern void _ZN7S4265C33v26Ev();
extern void _ZN7S4265C33v27Ev();
extern void _ZN7S4265C33v28Ev();
extern void _ZN7S4265C33v29Ev();
extern void _ZN7S4265C33v30Ev();
extern void _ZN7S4265C33v31Ev();
extern void _ZN7S4265C33v32Ev();
extern void _ZN7S4265C33v33Ev();
extern void _ZN7S4265C33v34Ev();
extern void _ZN7S4265C33v35Ev();
extern void _ZN7S4265C33v36Ev();
extern void _ZN7S4265C33v37Ev();
extern void _ZN7S4265C33v38Ev();
extern void _ZN7S4265C33v39Ev();
extern void _ZN7S4265C23v40Ev();
extern void _ZN7S4265C23v41Ev();
extern void _ZN7S4265C23v42Ev();
extern void _ZN7S4265C23v43Ev();
extern void _ZN7S4265C23v44Ev();
extern void _ZN7S4265C23v45Ev();
extern void _ZN7S4265C23v46Ev();
extern void _ZN7S4265C23v47Ev();
extern void _ZN7S4265C23v48Ev();
extern void _ZN7S4265C23v49Ev();
extern void _ZN7S4265C23v50Ev();
extern void _ZN7S4265C23v51Ev();
extern void _ZN7S4265C23v52Ev();
extern void _ZN7S4265C23v53Ev();
extern void _ZN7S4265C12v1Ev();
extern void _ZN7S4265C12v2Ev();
extern void _ZN7S4265C12v3Ev();
extern void _ZN7S4265C12v4Ev();
extern void _ZN7S4265C12v5Ev();
extern void _ZN7S4265C12v6Ev();
extern void _ZN7S4265C12v7Ev();
extern void _ZN7S4265C12v8Ev();
extern void _ZN7S4265C12v9Ev();
extern void _ZN7S4265C13v10Ev();
extern void _ZN7S4265C13v11Ev();
extern void _ZN7S4265C13v12Ev();
extern void _ZN7S4265C13v13Ev();
extern void ABISELECT(_ZThn72_N7S4265C1D1Ev,_ZThn48_N7S4265C1D1Ev)();
extern void ABISELECT(_ZThn72_N7S4265C1D0Ev,_ZThn48_N7S4265C1D0Ev)();
extern void _ZN7S4265C53v54Ev();
extern void _ZN7S4265C53v55Ev();
static  VTBL_ENTRY vtc_S4265C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4265C1[0]),
  (VTBL_ENTRY)&_ZN7S4265C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4265C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4265C33v14Ev,
  (VTBL_ENTRY)&_ZN7S4265C33v15Ev,
  (VTBL_ENTRY)&_ZN7S4265C33v16Ev,
  (VTBL_ENTRY)&_ZN7S4265C33v17Ev,
  (VTBL_ENTRY)&_ZN7S4265C33v18Ev,
  (VTBL_ENTRY)&_ZN7S4265C33v19Ev,
  (VTBL_ENTRY)&_ZN7S4265C33v20Ev,
  (VTBL_ENTRY)&_ZN7S4265C33v21Ev,
  (VTBL_ENTRY)&_ZN7S4265C33v22Ev,
  (VTBL_ENTRY)&_ZN7S4265C33v23Ev,
  (VTBL_ENTRY)&_ZN7S4265C33v24Ev,
  (VTBL_ENTRY)&_ZN7S4265C33v25Ev,
  (VTBL_ENTRY)&_ZN7S4265C33v26Ev,
  (VTBL_ENTRY)&_ZN7S4265C33v27Ev,
  (VTBL_ENTRY)&_ZN7S4265C33v28Ev,
  (VTBL_ENTRY)&_ZN7S4265C33v29Ev,
  (VTBL_ENTRY)&_ZN7S4265C33v30Ev,
  (VTBL_ENTRY)&_ZN7S4265C33v31Ev,
  (VTBL_ENTRY)&_ZN7S4265C33v32Ev,
  (VTBL_ENTRY)&_ZN7S4265C33v33Ev,
  (VTBL_ENTRY)&_ZN7S4265C33v34Ev,
  (VTBL_ENTRY)&_ZN7S4265C33v35Ev,
  (VTBL_ENTRY)&_ZN7S4265C33v36Ev,
  (VTBL_ENTRY)&_ZN7S4265C33v37Ev,
  (VTBL_ENTRY)&_ZN7S4265C33v38Ev,
  (VTBL_ENTRY)&_ZN7S4265C33v39Ev,
  (VTBL_ENTRY)&_ZN7S4265C23v40Ev,
  (VTBL_ENTRY)&_ZN7S4265C23v41Ev,
  (VTBL_ENTRY)&_ZN7S4265C23v42Ev,
  (VTBL_ENTRY)&_ZN7S4265C23v43Ev,
  (VTBL_ENTRY)&_ZN7S4265C23v44Ev,
  (VTBL_ENTRY)&_ZN7S4265C23v45Ev,
  (VTBL_ENTRY)&_ZN7S4265C23v46Ev,
  (VTBL_ENTRY)&_ZN7S4265C23v47Ev,
  (VTBL_ENTRY)&_ZN7S4265C23v48Ev,
  (VTBL_ENTRY)&_ZN7S4265C23v49Ev,
  (VTBL_ENTRY)&_ZN7S4265C23v50Ev,
  (VTBL_ENTRY)&_ZN7S4265C23v51Ev,
  (VTBL_ENTRY)&_ZN7S4265C23v52Ev,
  (VTBL_ENTRY)&_ZN7S4265C23v53Ev,
  (VTBL_ENTRY)&_ZN7S4265C12v1Ev,
  (VTBL_ENTRY)&_ZN7S4265C12v2Ev,
  (VTBL_ENTRY)&_ZN7S4265C12v3Ev,
  (VTBL_ENTRY)&_ZN7S4265C12v4Ev,
  (VTBL_ENTRY)&_ZN7S4265C12v5Ev,
  (VTBL_ENTRY)&_ZN7S4265C12v6Ev,
  (VTBL_ENTRY)&_ZN7S4265C12v7Ev,
  (VTBL_ENTRY)&_ZN7S4265C12v8Ev,
  (VTBL_ENTRY)&_ZN7S4265C12v9Ev,
  (VTBL_ENTRY)&_ZN7S4265C13v10Ev,
  (VTBL_ENTRY)&_ZN7S4265C13v11Ev,
  (VTBL_ENTRY)&_ZN7S4265C13v12Ev,
  (VTBL_ENTRY)&_ZN7S4265C13v13Ev,
  ABISELECT(-72,-48),
  (VTBL_ENTRY)&(_ZTI7S4265C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn72_N7S4265C1D1Ev,_ZThn48_N7S4265C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn72_N7S4265C1D0Ev,_ZThn48_N7S4265C1D0Ev),
  (VTBL_ENTRY)&_ZN7S4265C53v54Ev,
  (VTBL_ENTRY)&_ZN7S4265C53v55Ev,
};
extern VTBL_ENTRY _ZTI7S4265C1[];
extern  VTBL_ENTRY _ZTV7S4265C1[];
Class_Descriptor cd_S4265C1 = {  "S4265C1", // class name
  bases_S4265C1, 3,
  &(vtc_S4265C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(232,160), // object size
  NSPAIRA(_ZTI7S4265C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S4265C1),63, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4268C3  {
  virtual  ~S4268C3(); // _ZN7S4268C3D1Ev
  virtual void  v14(); // _ZN7S4268C33v14Ev
  virtual void  v15(); // _ZN7S4268C33v15Ev
  virtual void  v16(); // _ZN7S4268C33v16Ev
  virtual void  v17(); // _ZN7S4268C33v17Ev
  virtual void  v18(); // _ZN7S4268C33v18Ev
  virtual void  v19(); // _ZN7S4268C33v19Ev
  virtual void  v20(); // _ZN7S4268C33v20Ev
  virtual void  v21(); // _ZN7S4268C33v21Ev
  virtual void  v22(); // _ZN7S4268C33v22Ev
  virtual void  v23(); // _ZN7S4268C33v23Ev
  virtual void  v24(); // _ZN7S4268C33v24Ev
  virtual void  v25(); // _ZN7S4268C33v25Ev
  virtual void  v26(); // _ZN7S4268C33v26Ev
  virtual void  v27(); // _ZN7S4268C33v27Ev
  virtual void  v28(); // _ZN7S4268C33v28Ev
  virtual void  v29(); // _ZN7S4268C33v29Ev
  virtual void  v30(); // _ZN7S4268C33v30Ev
  virtual void  v31(); // _ZN7S4268C33v31Ev
  virtual void  v32(); // _ZN7S4268C33v32Ev
  virtual void  v33(); // _ZN7S4268C33v33Ev
  virtual void  v34(); // _ZN7S4268C33v34Ev
  virtual void  v35(); // _ZN7S4268C33v35Ev
  virtual void  v36(); // _ZN7S4268C33v36Ev
  virtual void  v37(); // _ZN7S4268C33v37Ev
  virtual void  v38(); // _ZN7S4268C33v38Ev
  virtual void  v39(); // _ZN7S4268C33v39Ev
  S4268C3(); // tgen
};
//SIG(-1 S4268C3) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26}


 S4268C3 ::~S4268C3(){ note_dtor("S4268C3", this);}
void  S4268C3 ::v14(){vfunc_called(this, "_ZN7S4268C33v14Ev");}
void  S4268C3 ::v15(){vfunc_called(this, "_ZN7S4268C33v15Ev");}
void  S4268C3 ::v16(){vfunc_called(this, "_ZN7S4268C33v16Ev");}
void  S4268C3 ::v17(){vfunc_called(this, "_ZN7S4268C33v17Ev");}
void  S4268C3 ::v18(){vfunc_called(this, "_ZN7S4268C33v18Ev");}
void  S4268C3 ::v19(){vfunc_called(this, "_ZN7S4268C33v19Ev");}
void  S4268C3 ::v20(){vfunc_called(this, "_ZN7S4268C33v20Ev");}
void  S4268C3 ::v21(){vfunc_called(this, "_ZN7S4268C33v21Ev");}
void  S4268C3 ::v22(){vfunc_called(this, "_ZN7S4268C33v22Ev");}
void  S4268C3 ::v23(){vfunc_called(this, "_ZN7S4268C33v23Ev");}
void  S4268C3 ::v24(){vfunc_called(this, "_ZN7S4268C33v24Ev");}
void  S4268C3 ::v25(){vfunc_called(this, "_ZN7S4268C33v25Ev");}
void  S4268C3 ::v26(){vfunc_called(this, "_ZN7S4268C33v26Ev");}
void  S4268C3 ::v27(){vfunc_called(this, "_ZN7S4268C33v27Ev");}
void  S4268C3 ::v28(){vfunc_called(this, "_ZN7S4268C33v28Ev");}
void  S4268C3 ::v29(){vfunc_called(this, "_ZN7S4268C33v29Ev");}
void  S4268C3 ::v30(){vfunc_called(this, "_ZN7S4268C33v30Ev");}
void  S4268C3 ::v31(){vfunc_called(this, "_ZN7S4268C33v31Ev");}
void  S4268C3 ::v32(){vfunc_called(this, "_ZN7S4268C33v32Ev");}
void  S4268C3 ::v33(){vfunc_called(this, "_ZN7S4268C33v33Ev");}
void  S4268C3 ::v34(){vfunc_called(this, "_ZN7S4268C33v34Ev");}
void  S4268C3 ::v35(){vfunc_called(this, "_ZN7S4268C33v35Ev");}
void  S4268C3 ::v36(){vfunc_called(this, "_ZN7S4268C33v36Ev");}
void  S4268C3 ::v37(){vfunc_called(this, "_ZN7S4268C33v37Ev");}
void  S4268C3 ::v38(){vfunc_called(this, "_ZN7S4268C33v38Ev");}
void  S4268C3 ::v39(){vfunc_called(this, "_ZN7S4268C33v39Ev");}
S4268C3 ::S4268C3(){ note_ctor("S4268C3", this);} // tgen

static void Test_S4268C3()
{
  extern Class_Descriptor cd_S4268C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S4268C3, buf);
    S4268C3 *dp, &lv = *(dp=new (buf) S4268C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S4268C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4268C3)");
    test_class_info(&lv, &cd_S4268C3);
    dp->~S4268C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4268C3(Test_S4268C3, "S4268C3", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S4268C3C1Ev();
extern void _ZN7S4268C3D1Ev();
Name_Map name_map_S4268C3[] = {
  NSPAIR(_ZN7S4268C3C1Ev),
  NSPAIR(_ZN7S4268C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4268C3[];
extern void _ZN7S4268C3D1Ev();
extern void _ZN7S4268C3D0Ev();
extern void _ZN7S4268C33v14Ev();
extern void _ZN7S4268C33v15Ev();
extern void _ZN7S4268C33v16Ev();
extern void _ZN7S4268C33v17Ev();
extern void _ZN7S4268C33v18Ev();
extern void _ZN7S4268C33v19Ev();
extern void _ZN7S4268C33v20Ev();
extern void _ZN7S4268C33v21Ev();
extern void _ZN7S4268C33v22Ev();
extern void _ZN7S4268C33v23Ev();
extern void _ZN7S4268C33v24Ev();
extern void _ZN7S4268C33v25Ev();
extern void _ZN7S4268C33v26Ev();
extern void _ZN7S4268C33v27Ev();
extern void _ZN7S4268C33v28Ev();
extern void _ZN7S4268C33v29Ev();
extern void _ZN7S4268C33v30Ev();
extern void _ZN7S4268C33v31Ev();
extern void _ZN7S4268C33v32Ev();
extern void _ZN7S4268C33v33Ev();
extern void _ZN7S4268C33v34Ev();
extern void _ZN7S4268C33v35Ev();
extern void _ZN7S4268C33v36Ev();
extern void _ZN7S4268C33v37Ev();
extern void _ZN7S4268C33v38Ev();
extern void _ZN7S4268C33v39Ev();
static  VTBL_ENTRY vtc_S4268C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4268C3[0]),
  (VTBL_ENTRY)&_ZN7S4268C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4268C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4268C33v14Ev,
  (VTBL_ENTRY)&_ZN7S4268C33v15Ev,
  (VTBL_ENTRY)&_ZN7S4268C33v16Ev,
  (VTBL_ENTRY)&_ZN7S4268C33v17Ev,
  (VTBL_ENTRY)&_ZN7S4268C33v18Ev,
  (VTBL_ENTRY)&_ZN7S4268C33v19Ev,
  (VTBL_ENTRY)&_ZN7S4268C33v20Ev,
  (VTBL_ENTRY)&_ZN7S4268C33v21Ev,
  (VTBL_ENTRY)&_ZN7S4268C33v22Ev,
  (VTBL_ENTRY)&_ZN7S4268C33v23Ev,
  (VTBL_ENTRY)&_ZN7S4268C33v24Ev,
  (VTBL_ENTRY)&_ZN7S4268C33v25Ev,
  (VTBL_ENTRY)&_ZN7S4268C33v26Ev,
  (VTBL_ENTRY)&_ZN7S4268C33v27Ev,
  (VTBL_ENTRY)&_ZN7S4268C33v28Ev,
  (VTBL_ENTRY)&_ZN7S4268C33v29Ev,
  (VTBL_ENTRY)&_ZN7S4268C33v30Ev,
  (VTBL_ENTRY)&_ZN7S4268C33v31Ev,
  (VTBL_ENTRY)&_ZN7S4268C33v32Ev,
  (VTBL_ENTRY)&_ZN7S4268C33v33Ev,
  (VTBL_ENTRY)&_ZN7S4268C33v34Ev,
  (VTBL_ENTRY)&_ZN7S4268C33v35Ev,
  (VTBL_ENTRY)&_ZN7S4268C33v36Ev,
  (VTBL_ENTRY)&_ZN7S4268C33v37Ev,
  (VTBL_ENTRY)&_ZN7S4268C33v38Ev,
  (VTBL_ENTRY)&_ZN7S4268C33v39Ev,
};
extern VTBL_ENTRY _ZTI7S4268C3[];
extern  VTBL_ENTRY _ZTV7S4268C3[];
Class_Descriptor cd_S4268C3 = {  "S4268C3", // class name
  0,0,//no base classes
  &(vtc_S4268C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S4268C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4268C3),30, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4268C2  : S4268C3 {
  void *s4268c2f0[2];
  int s4268c2f1[4];
  ::S2423C5_nt s4268c2f2;
  void *s4268c2f3;
  char s4268c2f4;
  void *s4268c2f5;
  virtual  ~S4268C2(); // _ZN7S4268C2D1Ev
  virtual void  v40(); // _ZN7S4268C23v40Ev
  virtual void  v41(); // _ZN7S4268C23v41Ev
  virtual void  v42(); // _ZN7S4268C23v42Ev
  virtual void  v43(); // _ZN7S4268C23v43Ev
  virtual void  v44(); // _ZN7S4268C23v44Ev
  virtual void  v45(); // _ZN7S4268C23v45Ev
  virtual void  v46(); // _ZN7S4268C23v46Ev
  virtual void  v47(); // _ZN7S4268C23v47Ev
  virtual void  v48(); // _ZN7S4268C23v48Ev
  virtual void  v49(); // _ZN7S4268C23v49Ev
  virtual void  v50(); // _ZN7S4268C23v50Ev
  virtual void  v51(); // _ZN7S4268C23v51Ev
  virtual void  v52(); // _ZN7S4268C23v52Ev
  virtual void  v53(); // _ZN7S4268C23v53Ev
  S4268C2(); // tgen
};
//SIG(-1 S4268C2) C1{ BC2{ vd v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 Fp[2] Fi[4] FC3{ Fi[2]} Fp Fc Fp}


 S4268C2 ::~S4268C2(){ note_dtor("S4268C2", this);}
void  S4268C2 ::v40(){vfunc_called(this, "_ZN7S4268C23v40Ev");}
void  S4268C2 ::v41(){vfunc_called(this, "_ZN7S4268C23v41Ev");}
void  S4268C2 ::v42(){vfunc_called(this, "_ZN7S4268C23v42Ev");}
void  S4268C2 ::v43(){vfunc_called(this, "_ZN7S4268C23v43Ev");}
void  S4268C2 ::v44(){vfunc_called(this, "_ZN7S4268C23v44Ev");}
void  S4268C2 ::v45(){vfunc_called(this, "_ZN7S4268C23v45Ev");}
void  S4268C2 ::v46(){vfunc_called(this, "_ZN7S4268C23v46Ev");}
void  S4268C2 ::v47(){vfunc_called(this, "_ZN7S4268C23v47Ev");}
void  S4268C2 ::v48(){vfunc_called(this, "_ZN7S4268C23v48Ev");}
void  S4268C2 ::v49(){vfunc_called(this, "_ZN7S4268C23v49Ev");}
void  S4268C2 ::v50(){vfunc_called(this, "_ZN7S4268C23v50Ev");}
void  S4268C2 ::v51(){vfunc_called(this, "_ZN7S4268C23v51Ev");}
void  S4268C2 ::v52(){vfunc_called(this, "_ZN7S4268C23v52Ev");}
void  S4268C2 ::v53(){vfunc_called(this, "_ZN7S4268C23v53Ev");}
S4268C2 ::S4268C2(){ note_ctor("S4268C2", this);} // tgen

static void Test_S4268C2()
{
  extern Class_Descriptor cd_S4268C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,13)];
    init_test(&cd_S4268C2, buf);
    S4268C2 *dp, &lv = *(dp=new (buf) S4268C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,48), "sizeof(S4268C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4268C2)");
    check_base_class_offset(lv, (S4268C3*), 0, "S4268C2");
    check_field_offset(lv, s4268c2f0, ABISELECT(8,4), "S4268C2.s4268c2f0");
    check_field_offset(lv, s4268c2f1, ABISELECT(24,12), "S4268C2.s4268c2f1");
    check_field_offset(lv, s4268c2f2, ABISELECT(40,28), "S4268C2.s4268c2f2");
    check_field_offset(lv, s4268c2f3, ABISELECT(48,36), "S4268C2.s4268c2f3");
    check_field_offset(lv, s4268c2f4, ABISELECT(56,40), "S4268C2.s4268c2f4");
    check_field_offset(lv, s4268c2f5, ABISELECT(64,44), "S4268C2.s4268c2f5");
    test_class_info(&lv, &cd_S4268C2);
    dp->~S4268C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4268C2(Test_S4268C2, "S4268C2", ABISELECT(72,48));

#else // __cplusplus

extern void _ZN7S4268C2C1Ev();
extern void _ZN7S4268C2D1Ev();
Name_Map name_map_S4268C2[] = {
  NSPAIR(_ZN7S4268C2C1Ev),
  NSPAIR(_ZN7S4268C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4268C3;
extern VTBL_ENTRY _ZTI7S4268C3[];
extern  VTBL_ENTRY _ZTV7S4268C3[];
static Base_Class bases_S4268C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4268C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4268C2[];
extern void _ZN7S4268C2D1Ev();
extern void _ZN7S4268C2D0Ev();
extern void _ZN7S4268C33v14Ev();
extern void _ZN7S4268C33v15Ev();
extern void _ZN7S4268C33v16Ev();
extern void _ZN7S4268C33v17Ev();
extern void _ZN7S4268C33v18Ev();
extern void _ZN7S4268C33v19Ev();
extern void _ZN7S4268C33v20Ev();
extern void _ZN7S4268C33v21Ev();
extern void _ZN7S4268C33v22Ev();
extern void _ZN7S4268C33v23Ev();
extern void _ZN7S4268C33v24Ev();
extern void _ZN7S4268C33v25Ev();
extern void _ZN7S4268C33v26Ev();
extern void _ZN7S4268C33v27Ev();
extern void _ZN7S4268C33v28Ev();
extern void _ZN7S4268C33v29Ev();
extern void _ZN7S4268C33v30Ev();
extern void _ZN7S4268C33v31Ev();
extern void _ZN7S4268C33v32Ev();
extern void _ZN7S4268C33v33Ev();
extern void _ZN7S4268C33v34Ev();
extern void _ZN7S4268C33v35Ev();
extern void _ZN7S4268C33v36Ev();
extern void _ZN7S4268C33v37Ev();
extern void _ZN7S4268C33v38Ev();
extern void _ZN7S4268C33v39Ev();
extern void _ZN7S4268C23v40Ev();
extern void _ZN7S4268C23v41Ev();
extern void _ZN7S4268C23v42Ev();
extern void _ZN7S4268C23v43Ev();
extern void _ZN7S4268C23v44Ev();
extern void _ZN7S4268C23v45Ev();
extern void _ZN7S4268C23v46Ev();
extern void _ZN7S4268C23v47Ev();
extern void _ZN7S4268C23v48Ev();
extern void _ZN7S4268C23v49Ev();
extern void _ZN7S4268C23v50Ev();
extern void _ZN7S4268C23v51Ev();
extern void _ZN7S4268C23v52Ev();
extern void _ZN7S4268C23v53Ev();
static  VTBL_ENTRY vtc_S4268C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4268C2[0]),
  (VTBL_ENTRY)&_ZN7S4268C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4268C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4268C33v14Ev,
  (VTBL_ENTRY)&_ZN7S4268C33v15Ev,
  (VTBL_ENTRY)&_ZN7S4268C33v16Ev,
  (VTBL_ENTRY)&_ZN7S4268C33v17Ev,
  (VTBL_ENTRY)&_ZN7S4268C33v18Ev,
  (VTBL_ENTRY)&_ZN7S4268C33v19Ev,
  (VTBL_ENTRY)&_ZN7S4268C33v20Ev,
  (VTBL_ENTRY)&_ZN7S4268C33v21Ev,
  (VTBL_ENTRY)&_ZN7S4268C33v22Ev,
  (VTBL_ENTRY)&_ZN7S4268C33v23Ev,
  (VTBL_ENTRY)&_ZN7S4268C33v24Ev,
  (VTBL_ENTRY)&_ZN7S4268C33v25Ev,
  (VTBL_ENTRY)&_ZN7S4268C33v26Ev,
  (VTBL_ENTRY)&_ZN7S4268C33v27Ev,
  (VTBL_ENTRY)&_ZN7S4268C33v28Ev,
  (VTBL_ENTRY)&_ZN7S4268C33v29Ev,
  (VTBL_ENTRY)&_ZN7S4268C33v30Ev,
  (VTBL_ENTRY)&_ZN7S4268C33v31Ev,
  (VTBL_ENTRY)&_ZN7S4268C33v32Ev,
  (VTBL_ENTRY)&_ZN7S4268C33v33Ev,
  (VTBL_ENTRY)&_ZN7S4268C33v34Ev,
  (VTBL_ENTRY)&_ZN7S4268C33v35Ev,
  (VTBL_ENTRY)&_ZN7S4268C33v36Ev,
  (VTBL_ENTRY)&_ZN7S4268C33v37Ev,
  (VTBL_ENTRY)&_ZN7S4268C33v38Ev,
  (VTBL_ENTRY)&_ZN7S4268C33v39Ev,
  (VTBL_ENTRY)&_ZN7S4268C23v40Ev,
  (VTBL_ENTRY)&_ZN7S4268C23v41Ev,
  (VTBL_ENTRY)&_ZN7S4268C23v42Ev,
  (VTBL_ENTRY)&_ZN7S4268C23v43Ev,
  (VTBL_ENTRY)&_ZN7S4268C23v44Ev,
  (VTBL_ENTRY)&_ZN7S4268C23v45Ev,
  (VTBL_ENTRY)&_ZN7S4268C23v46Ev,
  (VTBL_ENTRY)&_ZN7S4268C23v47Ev,
  (VTBL_ENTRY)&_ZN7S4268C23v48Ev,
  (VTBL_ENTRY)&_ZN7S4268C23v49Ev,
  (VTBL_ENTRY)&_ZN7S4268C23v50Ev,
  (VTBL_ENTRY)&_ZN7S4268C23v51Ev,
  (VTBL_ENTRY)&_ZN7S4268C23v52Ev,
  (VTBL_ENTRY)&_ZN7S4268C23v53Ev,
};
extern VTBL_ENTRY _ZTI7S4268C2[];
extern  VTBL_ENTRY _ZTV7S4268C2[];
Class_Descriptor cd_S4268C2 = {  "S4268C2", // class name
  bases_S4268C2, 1,
  &(vtc_S4268C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,48), // object size
  NSPAIRA(_ZTI7S4268C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4268C2),44, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4268C5  {
  virtual  ~S4268C5(); // _ZN7S4268C5D1Ev
  virtual void  v54(); // _ZN7S4268C53v54Ev
  S4268C5(); // tgen
};
//SIG(-1 S4268C5) C1{ vd v1}


 S4268C5 ::~S4268C5(){ note_dtor("S4268C5", this);}
void  S4268C5 ::v54(){vfunc_called(this, "_ZN7S4268C53v54Ev");}
S4268C5 ::S4268C5(){ note_ctor("S4268C5", this);} // tgen

static void Test_S4268C5()
{
  extern Class_Descriptor cd_S4268C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S4268C5, buf);
    S4268C5 *dp, &lv = *(dp=new (buf) S4268C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S4268C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4268C5)");
    test_class_info(&lv, &cd_S4268C5);
    dp->~S4268C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4268C5(Test_S4268C5, "S4268C5", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S4268C5C1Ev();
extern void _ZN7S4268C5D1Ev();
Name_Map name_map_S4268C5[] = {
  NSPAIR(_ZN7S4268C5C1Ev),
  NSPAIR(_ZN7S4268C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4268C5[];
extern void _ZN7S4268C5D1Ev();
extern void _ZN7S4268C5D0Ev();
extern void _ZN7S4268C53v54Ev();
static  VTBL_ENTRY vtc_S4268C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4268C5[0]),
  (VTBL_ENTRY)&_ZN7S4268C5D1Ev,
  (VTBL_ENTRY)&_ZN7S4268C5D0Ev,
  (VTBL_ENTRY)&_ZN7S4268C53v54Ev,
};
extern VTBL_ENTRY _ZTI7S4268C5[];
extern  VTBL_ENTRY _ZTV7S4268C5[];
Class_Descriptor cd_S4268C5 = {  "S4268C5", // class name
  0,0,//no base classes
  &(vtc_S4268C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S4268C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4268C5),5, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4268C1  : S4268C2 , S4268C5 {
  void *s4268c1f0[4];
  char s4268c1f1;
  void *s4268c1f2[2];
  virtual  ~S4268C1(); // _ZN7S4268C1D1Ev
  virtual void  v1(); // _ZN7S4268C12v1Ev
  virtual void  v2(); // _ZN7S4268C12v2Ev
  virtual void  v3(); // _ZN7S4268C12v3Ev
  virtual void  v4(); // _ZN7S4268C12v4Ev
  virtual void  v5(); // _ZN7S4268C12v5Ev
  virtual void  v6(); // _ZN7S4268C12v6Ev
  virtual void  v7(); // _ZN7S4268C12v7Ev
  virtual void  v8(); // _ZN7S4268C12v8Ev
  virtual void  v9(); // _ZN7S4268C12v9Ev
  virtual void  v10(); // _ZN7S4268C13v10Ev
  virtual void  v11(); // _ZN7S4268C13v11Ev
  virtual void  v12(); // _ZN7S4268C13v12Ev
  virtual void  v13(); // _ZN7S4268C13v13Ev
  S4268C1(); // tgen
};
//SIG(1 S4268C1) C1{ BC2{ BC3{ vd v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39} vd v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 Fp[2] Fi[4] FC4{ Fi[2]} Fp Fc Fp} BC5{ vd v54} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 Fp[4] Fc Fp[2]}


 S4268C1 ::~S4268C1(){ note_dtor("S4268C1", this);}
void  S4268C1 ::v1(){vfunc_called(this, "_ZN7S4268C12v1Ev");}
void  S4268C1 ::v2(){vfunc_called(this, "_ZN7S4268C12v2Ev");}
void  S4268C1 ::v3(){vfunc_called(this, "_ZN7S4268C12v3Ev");}
void  S4268C1 ::v4(){vfunc_called(this, "_ZN7S4268C12v4Ev");}
void  S4268C1 ::v5(){vfunc_called(this, "_ZN7S4268C12v5Ev");}
void  S4268C1 ::v6(){vfunc_called(this, "_ZN7S4268C12v6Ev");}
void  S4268C1 ::v7(){vfunc_called(this, "_ZN7S4268C12v7Ev");}
void  S4268C1 ::v8(){vfunc_called(this, "_ZN7S4268C12v8Ev");}
void  S4268C1 ::v9(){vfunc_called(this, "_ZN7S4268C12v9Ev");}
void  S4268C1 ::v10(){vfunc_called(this, "_ZN7S4268C13v10Ev");}
void  S4268C1 ::v11(){vfunc_called(this, "_ZN7S4268C13v11Ev");}
void  S4268C1 ::v12(){vfunc_called(this, "_ZN7S4268C13v12Ev");}
void  S4268C1 ::v13(){vfunc_called(this, "_ZN7S4268C13v13Ev");}
S4268C1 ::S4268C1(){ note_ctor("S4268C1", this);} // tgen

static void Test_S4268C1()
{
  extern Class_Descriptor cd_S4268C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(18,21)];
    init_test(&cd_S4268C1, buf);
    S4268C1 *dp, &lv = *(dp=new (buf) S4268C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(136,80), "sizeof(S4268C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4268C1)");
    check_base_class_offset(lv, (S4268C3*)(S4268C2*), 0, "S4268C1");
    check_base_class_offset(lv, (S4268C2*), 0, "S4268C1");
    check_base_class_offset(lv, (S4268C5*), ABISELECT(72,48), "S4268C1");
    check_field_offset(lv, s4268c1f0, ABISELECT(80,52), "S4268C1.s4268c1f0");
    check_field_offset(lv, s4268c1f1, ABISELECT(112,68), "S4268C1.s4268c1f1");
    check_field_offset(lv, s4268c1f2, ABISELECT(120,72), "S4268C1.s4268c1f2");
    test_class_info(&lv, &cd_S4268C1);
    dp->~S4268C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4268C1(Test_S4268C1, "S4268C1", ABISELECT(136,80));

#else // __cplusplus

extern void _ZN7S4268C1C1Ev();
extern void _ZN7S4268C1D1Ev();
Name_Map name_map_S4268C1[] = {
  NSPAIR(_ZN7S4268C1C1Ev),
  NSPAIR(_ZN7S4268C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4268C3;
extern VTBL_ENTRY _ZTI7S4268C3[];
extern  VTBL_ENTRY _ZTV7S4268C3[];
extern Class_Descriptor cd_S4268C2;
extern VTBL_ENTRY _ZTI7S4268C2[];
extern  VTBL_ENTRY _ZTV7S4268C2[];
extern Class_Descriptor cd_S4268C5;
extern VTBL_ENTRY _ZTI7S4268C5[];
extern  VTBL_ENTRY _ZTV7S4268C5[];
static Base_Class bases_S4268C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4268C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S4268C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S4268C5,    ABISELECT(72,48), //bcp->offset
    57, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4268C1[];
extern void _ZN7S4268C1D1Ev();
extern void _ZN7S4268C1D0Ev();
extern void _ZN7S4268C33v14Ev();
extern void _ZN7S4268C33v15Ev();
extern void _ZN7S4268C33v16Ev();
extern void _ZN7S4268C33v17Ev();
extern void _ZN7S4268C33v18Ev();
extern void _ZN7S4268C33v19Ev();
extern void _ZN7S4268C33v20Ev();
extern void _ZN7S4268C33v21Ev();
extern void _ZN7S4268C33v22Ev();
extern void _ZN7S4268C33v23Ev();
extern void _ZN7S4268C33v24Ev();
extern void _ZN7S4268C33v25Ev();
extern void _ZN7S4268C33v26Ev();
extern void _ZN7S4268C33v27Ev();
extern void _ZN7S4268C33v28Ev();
extern void _ZN7S4268C33v29Ev();
extern void _ZN7S4268C33v30Ev();
extern void _ZN7S4268C33v31Ev();
extern void _ZN7S4268C33v32Ev();
extern void _ZN7S4268C33v33Ev();
extern void _ZN7S4268C33v34Ev();
extern void _ZN7S4268C33v35Ev();
extern void _ZN7S4268C33v36Ev();
extern void _ZN7S4268C33v37Ev();
extern void _ZN7S4268C33v38Ev();
extern void _ZN7S4268C33v39Ev();
extern void _ZN7S4268C23v40Ev();
extern void _ZN7S4268C23v41Ev();
extern void _ZN7S4268C23v42Ev();
extern void _ZN7S4268C23v43Ev();
extern void _ZN7S4268C23v44Ev();
extern void _ZN7S4268C23v45Ev();
extern void _ZN7S4268C23v46Ev();
extern void _ZN7S4268C23v47Ev();
extern void _ZN7S4268C23v48Ev();
extern void _ZN7S4268C23v49Ev();
extern void _ZN7S4268C23v50Ev();
extern void _ZN7S4268C23v51Ev();
extern void _ZN7S4268C23v52Ev();
extern void _ZN7S4268C23v53Ev();
extern void _ZN7S4268C12v1Ev();
extern void _ZN7S4268C12v2Ev();
extern void _ZN7S4268C12v3Ev();
extern void _ZN7S4268C12v4Ev();
extern void _ZN7S4268C12v5Ev();
extern void _ZN7S4268C12v6Ev();
extern void _ZN7S4268C12v7Ev();
extern void _ZN7S4268C12v8Ev();
extern void _ZN7S4268C12v9Ev();
extern void _ZN7S4268C13v10Ev();
extern void _ZN7S4268C13v11Ev();
extern void _ZN7S4268C13v12Ev();
extern void _ZN7S4268C13v13Ev();
extern void ABISELECT(_ZThn72_N7S4268C1D1Ev,_ZThn48_N7S4268C1D1Ev)();
extern void ABISELECT(_ZThn72_N7S4268C1D0Ev,_ZThn48_N7S4268C1D0Ev)();
extern void _ZN7S4268C53v54Ev();
static  VTBL_ENTRY vtc_S4268C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4268C1[0]),
  (VTBL_ENTRY)&_ZN7S4268C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4268C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4268C33v14Ev,
  (VTBL_ENTRY)&_ZN7S4268C33v15Ev,
  (VTBL_ENTRY)&_ZN7S4268C33v16Ev,
  (VTBL_ENTRY)&_ZN7S4268C33v17Ev,
  (VTBL_ENTRY)&_ZN7S4268C33v18Ev,
  (VTBL_ENTRY)&_ZN7S4268C33v19Ev,
  (VTBL_ENTRY)&_ZN7S4268C33v20Ev,
  (VTBL_ENTRY)&_ZN7S4268C33v21Ev,
  (VTBL_ENTRY)&_ZN7S4268C33v22Ev,
  (VTBL_ENTRY)&_ZN7S4268C33v23Ev,
  (VTBL_ENTRY)&_ZN7S4268C33v24Ev,
  (VTBL_ENTRY)&_ZN7S4268C33v25Ev,
  (VTBL_ENTRY)&_ZN7S4268C33v26Ev,
  (VTBL_ENTRY)&_ZN7S4268C33v27Ev,
  (VTBL_ENTRY)&_ZN7S4268C33v28Ev,
  (VTBL_ENTRY)&_ZN7S4268C33v29Ev,
  (VTBL_ENTRY)&_ZN7S4268C33v30Ev,
  (VTBL_ENTRY)&_ZN7S4268C33v31Ev,
  (VTBL_ENTRY)&_ZN7S4268C33v32Ev,
  (VTBL_ENTRY)&_ZN7S4268C33v33Ev,
  (VTBL_ENTRY)&_ZN7S4268C33v34Ev,
  (VTBL_ENTRY)&_ZN7S4268C33v35Ev,
  (VTBL_ENTRY)&_ZN7S4268C33v36Ev,
  (VTBL_ENTRY)&_ZN7S4268C33v37Ev,
  (VTBL_ENTRY)&_ZN7S4268C33v38Ev,
  (VTBL_ENTRY)&_ZN7S4268C33v39Ev,
  (VTBL_ENTRY)&_ZN7S4268C23v40Ev,
  (VTBL_ENTRY)&_ZN7S4268C23v41Ev,
  (VTBL_ENTRY)&_ZN7S4268C23v42Ev,
  (VTBL_ENTRY)&_ZN7S4268C23v43Ev,
  (VTBL_ENTRY)&_ZN7S4268C23v44Ev,
  (VTBL_ENTRY)&_ZN7S4268C23v45Ev,
  (VTBL_ENTRY)&_ZN7S4268C23v46Ev,
  (VTBL_ENTRY)&_ZN7S4268C23v47Ev,
  (VTBL_ENTRY)&_ZN7S4268C23v48Ev,
  (VTBL_ENTRY)&_ZN7S4268C23v49Ev,
  (VTBL_ENTRY)&_ZN7S4268C23v50Ev,
  (VTBL_ENTRY)&_ZN7S4268C23v51Ev,
  (VTBL_ENTRY)&_ZN7S4268C23v52Ev,
  (VTBL_ENTRY)&_ZN7S4268C23v53Ev,
  (VTBL_ENTRY)&_ZN7S4268C12v1Ev,
  (VTBL_ENTRY)&_ZN7S4268C12v2Ev,
  (VTBL_ENTRY)&_ZN7S4268C12v3Ev,
  (VTBL_ENTRY)&_ZN7S4268C12v4Ev,
  (VTBL_ENTRY)&_ZN7S4268C12v5Ev,
  (VTBL_ENTRY)&_ZN7S4268C12v6Ev,
  (VTBL_ENTRY)&_ZN7S4268C12v7Ev,
  (VTBL_ENTRY)&_ZN7S4268C12v8Ev,
  (VTBL_ENTRY)&_ZN7S4268C12v9Ev,
  (VTBL_ENTRY)&_ZN7S4268C13v10Ev,
  (VTBL_ENTRY)&_ZN7S4268C13v11Ev,
  (VTBL_ENTRY)&_ZN7S4268C13v12Ev,
  (VTBL_ENTRY)&_ZN7S4268C13v13Ev,
  ABISELECT(-72,-48),
  (VTBL_ENTRY)&(_ZTI7S4268C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn72_N7S4268C1D1Ev,_ZThn48_N7S4268C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn72_N7S4268C1D0Ev,_ZThn48_N7S4268C1D0Ev),
  (VTBL_ENTRY)&_ZN7S4268C53v54Ev,
};
extern VTBL_ENTRY _ZTI7S4268C1[];
extern  VTBL_ENTRY _ZTV7S4268C1[];
Class_Descriptor cd_S4268C1 = {  "S4268C1", // class name
  bases_S4268C1, 3,
  &(vtc_S4268C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(136,80), // object size
  NSPAIRA(_ZTI7S4268C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S4268C1),62, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4269C3  {
  virtual  ~S4269C3(); // _ZN7S4269C3D1Ev
  virtual void  v14(); // _ZN7S4269C33v14Ev
  virtual void  v15(); // _ZN7S4269C33v15Ev
  virtual void  v16(); // _ZN7S4269C33v16Ev
  virtual void  v17(); // _ZN7S4269C33v17Ev
  virtual void  v18(); // _ZN7S4269C33v18Ev
  virtual void  v19(); // _ZN7S4269C33v19Ev
  virtual void  v20(); // _ZN7S4269C33v20Ev
  virtual void  v21(); // _ZN7S4269C33v21Ev
  virtual void  v22(); // _ZN7S4269C33v22Ev
  virtual void  v23(); // _ZN7S4269C33v23Ev
  virtual void  v24(); // _ZN7S4269C33v24Ev
  virtual void  v25(); // _ZN7S4269C33v25Ev
  virtual void  v26(); // _ZN7S4269C33v26Ev
  virtual void  v27(); // _ZN7S4269C33v27Ev
  virtual void  v28(); // _ZN7S4269C33v28Ev
  virtual void  v29(); // _ZN7S4269C33v29Ev
  virtual void  v30(); // _ZN7S4269C33v30Ev
  virtual void  v31(); // _ZN7S4269C33v31Ev
  virtual void  v32(); // _ZN7S4269C33v32Ev
  virtual void  v33(); // _ZN7S4269C33v33Ev
  virtual void  v34(); // _ZN7S4269C33v34Ev
  virtual void  v35(); // _ZN7S4269C33v35Ev
  virtual void  v36(); // _ZN7S4269C33v36Ev
  virtual void  v37(); // _ZN7S4269C33v37Ev
  virtual void  v38(); // _ZN7S4269C33v38Ev
  virtual void  v39(); // _ZN7S4269C33v39Ev
  S4269C3(); // tgen
};
//SIG(-1 S4269C3) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26}


 S4269C3 ::~S4269C3(){ note_dtor("S4269C3", this);}
void  S4269C3 ::v14(){vfunc_called(this, "_ZN7S4269C33v14Ev");}
void  S4269C3 ::v15(){vfunc_called(this, "_ZN7S4269C33v15Ev");}
void  S4269C3 ::v16(){vfunc_called(this, "_ZN7S4269C33v16Ev");}
void  S4269C3 ::v17(){vfunc_called(this, "_ZN7S4269C33v17Ev");}
void  S4269C3 ::v18(){vfunc_called(this, "_ZN7S4269C33v18Ev");}
void  S4269C3 ::v19(){vfunc_called(this, "_ZN7S4269C33v19Ev");}
void  S4269C3 ::v20(){vfunc_called(this, "_ZN7S4269C33v20Ev");}
void  S4269C3 ::v21(){vfunc_called(this, "_ZN7S4269C33v21Ev");}
void  S4269C3 ::v22(){vfunc_called(this, "_ZN7S4269C33v22Ev");}
void  S4269C3 ::v23(){vfunc_called(this, "_ZN7S4269C33v23Ev");}
void  S4269C3 ::v24(){vfunc_called(this, "_ZN7S4269C33v24Ev");}
void  S4269C3 ::v25(){vfunc_called(this, "_ZN7S4269C33v25Ev");}
void  S4269C3 ::v26(){vfunc_called(this, "_ZN7S4269C33v26Ev");}
void  S4269C3 ::v27(){vfunc_called(this, "_ZN7S4269C33v27Ev");}
void  S4269C3 ::v28(){vfunc_called(this, "_ZN7S4269C33v28Ev");}
void  S4269C3 ::v29(){vfunc_called(this, "_ZN7S4269C33v29Ev");}
void  S4269C3 ::v30(){vfunc_called(this, "_ZN7S4269C33v30Ev");}
void  S4269C3 ::v31(){vfunc_called(this, "_ZN7S4269C33v31Ev");}
void  S4269C3 ::v32(){vfunc_called(this, "_ZN7S4269C33v32Ev");}
void  S4269C3 ::v33(){vfunc_called(this, "_ZN7S4269C33v33Ev");}
void  S4269C3 ::v34(){vfunc_called(this, "_ZN7S4269C33v34Ev");}
void  S4269C3 ::v35(){vfunc_called(this, "_ZN7S4269C33v35Ev");}
void  S4269C3 ::v36(){vfunc_called(this, "_ZN7S4269C33v36Ev");}
void  S4269C3 ::v37(){vfunc_called(this, "_ZN7S4269C33v37Ev");}
void  S4269C3 ::v38(){vfunc_called(this, "_ZN7S4269C33v38Ev");}
void  S4269C3 ::v39(){vfunc_called(this, "_ZN7S4269C33v39Ev");}
S4269C3 ::S4269C3(){ note_ctor("S4269C3", this);} // tgen

static void Test_S4269C3()
{
  extern Class_Descriptor cd_S4269C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S4269C3, buf);
    S4269C3 *dp, &lv = *(dp=new (buf) S4269C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S4269C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4269C3)");
    test_class_info(&lv, &cd_S4269C3);
    dp->~S4269C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4269C3(Test_S4269C3, "S4269C3", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S4269C3C1Ev();
extern void _ZN7S4269C3D1Ev();
Name_Map name_map_S4269C3[] = {
  NSPAIR(_ZN7S4269C3C1Ev),
  NSPAIR(_ZN7S4269C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4269C3[];
extern void _ZN7S4269C3D1Ev();
extern void _ZN7S4269C3D0Ev();
extern void _ZN7S4269C33v14Ev();
extern void _ZN7S4269C33v15Ev();
extern void _ZN7S4269C33v16Ev();
extern void _ZN7S4269C33v17Ev();
extern void _ZN7S4269C33v18Ev();
extern void _ZN7S4269C33v19Ev();
extern void _ZN7S4269C33v20Ev();
extern void _ZN7S4269C33v21Ev();
extern void _ZN7S4269C33v22Ev();
extern void _ZN7S4269C33v23Ev();
extern void _ZN7S4269C33v24Ev();
extern void _ZN7S4269C33v25Ev();
extern void _ZN7S4269C33v26Ev();
extern void _ZN7S4269C33v27Ev();
extern void _ZN7S4269C33v28Ev();
extern void _ZN7S4269C33v29Ev();
extern void _ZN7S4269C33v30Ev();
extern void _ZN7S4269C33v31Ev();
extern void _ZN7S4269C33v32Ev();
extern void _ZN7S4269C33v33Ev();
extern void _ZN7S4269C33v34Ev();
extern void _ZN7S4269C33v35Ev();
extern void _ZN7S4269C33v36Ev();
extern void _ZN7S4269C33v37Ev();
extern void _ZN7S4269C33v38Ev();
extern void _ZN7S4269C33v39Ev();
static  VTBL_ENTRY vtc_S4269C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4269C3[0]),
  (VTBL_ENTRY)&_ZN7S4269C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4269C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4269C33v14Ev,
  (VTBL_ENTRY)&_ZN7S4269C33v15Ev,
  (VTBL_ENTRY)&_ZN7S4269C33v16Ev,
  (VTBL_ENTRY)&_ZN7S4269C33v17Ev,
  (VTBL_ENTRY)&_ZN7S4269C33v18Ev,
  (VTBL_ENTRY)&_ZN7S4269C33v19Ev,
  (VTBL_ENTRY)&_ZN7S4269C33v20Ev,
  (VTBL_ENTRY)&_ZN7S4269C33v21Ev,
  (VTBL_ENTRY)&_ZN7S4269C33v22Ev,
  (VTBL_ENTRY)&_ZN7S4269C33v23Ev,
  (VTBL_ENTRY)&_ZN7S4269C33v24Ev,
  (VTBL_ENTRY)&_ZN7S4269C33v25Ev,
  (VTBL_ENTRY)&_ZN7S4269C33v26Ev,
  (VTBL_ENTRY)&_ZN7S4269C33v27Ev,
  (VTBL_ENTRY)&_ZN7S4269C33v28Ev,
  (VTBL_ENTRY)&_ZN7S4269C33v29Ev,
  (VTBL_ENTRY)&_ZN7S4269C33v30Ev,
  (VTBL_ENTRY)&_ZN7S4269C33v31Ev,
  (VTBL_ENTRY)&_ZN7S4269C33v32Ev,
  (VTBL_ENTRY)&_ZN7S4269C33v33Ev,
  (VTBL_ENTRY)&_ZN7S4269C33v34Ev,
  (VTBL_ENTRY)&_ZN7S4269C33v35Ev,
  (VTBL_ENTRY)&_ZN7S4269C33v36Ev,
  (VTBL_ENTRY)&_ZN7S4269C33v37Ev,
  (VTBL_ENTRY)&_ZN7S4269C33v38Ev,
  (VTBL_ENTRY)&_ZN7S4269C33v39Ev,
};
extern VTBL_ENTRY _ZTI7S4269C3[];
extern  VTBL_ENTRY _ZTV7S4269C3[];
Class_Descriptor cd_S4269C3 = {  "S4269C3", // class name
  0,0,//no base classes
  &(vtc_S4269C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S4269C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4269C3),30, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4269C2  : S4269C3 {
  void *s4269c2f0[2];
  int s4269c2f1[4];
  ::S2423C5_nt s4269c2f2;
  void *s4269c2f3;
  char s4269c2f4;
  void *s4269c2f5;
  virtual  ~S4269C2(); // _ZN7S4269C2D1Ev
  virtual void  v40(); // _ZN7S4269C23v40Ev
  virtual void  v41(); // _ZN7S4269C23v41Ev
  virtual void  v42(); // _ZN7S4269C23v42Ev
  virtual void  v43(); // _ZN7S4269C23v43Ev
  virtual void  v44(); // _ZN7S4269C23v44Ev
  virtual void  v45(); // _ZN7S4269C23v45Ev
  virtual void  v46(); // _ZN7S4269C23v46Ev
  virtual void  v47(); // _ZN7S4269C23v47Ev
  virtual void  v48(); // _ZN7S4269C23v48Ev
  virtual void  v49(); // _ZN7S4269C23v49Ev
  virtual void  v50(); // _ZN7S4269C23v50Ev
  virtual void  v51(); // _ZN7S4269C23v51Ev
  virtual void  v52(); // _ZN7S4269C23v52Ev
  virtual void  v53(); // _ZN7S4269C23v53Ev
  S4269C2(); // tgen
};
//SIG(-1 S4269C2) C1{ BC2{ vd v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 Fp[2] Fi[4] FC3{ Fi[2]} Fp Fc Fp}


 S4269C2 ::~S4269C2(){ note_dtor("S4269C2", this);}
void  S4269C2 ::v40(){vfunc_called(this, "_ZN7S4269C23v40Ev");}
void  S4269C2 ::v41(){vfunc_called(this, "_ZN7S4269C23v41Ev");}
void  S4269C2 ::v42(){vfunc_called(this, "_ZN7S4269C23v42Ev");}
void  S4269C2 ::v43(){vfunc_called(this, "_ZN7S4269C23v43Ev");}
void  S4269C2 ::v44(){vfunc_called(this, "_ZN7S4269C23v44Ev");}
void  S4269C2 ::v45(){vfunc_called(this, "_ZN7S4269C23v45Ev");}
void  S4269C2 ::v46(){vfunc_called(this, "_ZN7S4269C23v46Ev");}
void  S4269C2 ::v47(){vfunc_called(this, "_ZN7S4269C23v47Ev");}
void  S4269C2 ::v48(){vfunc_called(this, "_ZN7S4269C23v48Ev");}
void  S4269C2 ::v49(){vfunc_called(this, "_ZN7S4269C23v49Ev");}
void  S4269C2 ::v50(){vfunc_called(this, "_ZN7S4269C23v50Ev");}
void  S4269C2 ::v51(){vfunc_called(this, "_ZN7S4269C23v51Ev");}
void  S4269C2 ::v52(){vfunc_called(this, "_ZN7S4269C23v52Ev");}
void  S4269C2 ::v53(){vfunc_called(this, "_ZN7S4269C23v53Ev");}
S4269C2 ::S4269C2(){ note_ctor("S4269C2", this);} // tgen

static void Test_S4269C2()
{
  extern Class_Descriptor cd_S4269C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,13)];
    init_test(&cd_S4269C2, buf);
    S4269C2 *dp, &lv = *(dp=new (buf) S4269C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,48), "sizeof(S4269C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4269C2)");
    check_base_class_offset(lv, (S4269C3*), 0, "S4269C2");
    check_field_offset(lv, s4269c2f0, ABISELECT(8,4), "S4269C2.s4269c2f0");
    check_field_offset(lv, s4269c2f1, ABISELECT(24,12), "S4269C2.s4269c2f1");
    check_field_offset(lv, s4269c2f2, ABISELECT(40,28), "S4269C2.s4269c2f2");
    check_field_offset(lv, s4269c2f3, ABISELECT(48,36), "S4269C2.s4269c2f3");
    check_field_offset(lv, s4269c2f4, ABISELECT(56,40), "S4269C2.s4269c2f4");
    check_field_offset(lv, s4269c2f5, ABISELECT(64,44), "S4269C2.s4269c2f5");
    test_class_info(&lv, &cd_S4269C2);
    dp->~S4269C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4269C2(Test_S4269C2, "S4269C2", ABISELECT(72,48));

#else // __cplusplus

extern void _ZN7S4269C2C1Ev();
extern void _ZN7S4269C2D1Ev();
Name_Map name_map_S4269C2[] = {
  NSPAIR(_ZN7S4269C2C1Ev),
  NSPAIR(_ZN7S4269C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4269C3;
extern VTBL_ENTRY _ZTI7S4269C3[];
extern  VTBL_ENTRY _ZTV7S4269C3[];
static Base_Class bases_S4269C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4269C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4269C2[];
extern void _ZN7S4269C2D1Ev();
extern void _ZN7S4269C2D0Ev();
extern void _ZN7S4269C33v14Ev();
extern void _ZN7S4269C33v15Ev();
extern void _ZN7S4269C33v16Ev();
extern void _ZN7S4269C33v17Ev();
extern void _ZN7S4269C33v18Ev();
extern void _ZN7S4269C33v19Ev();
extern void _ZN7S4269C33v20Ev();
extern void _ZN7S4269C33v21Ev();
extern void _ZN7S4269C33v22Ev();
extern void _ZN7S4269C33v23Ev();
extern void _ZN7S4269C33v24Ev();
extern void _ZN7S4269C33v25Ev();
extern void _ZN7S4269C33v26Ev();
extern void _ZN7S4269C33v27Ev();
extern void _ZN7S4269C33v28Ev();
extern void _ZN7S4269C33v29Ev();
extern void _ZN7S4269C33v30Ev();
extern void _ZN7S4269C33v31Ev();
extern void _ZN7S4269C33v32Ev();
extern void _ZN7S4269C33v33Ev();
extern void _ZN7S4269C33v34Ev();
extern void _ZN7S4269C33v35Ev();
extern void _ZN7S4269C33v36Ev();
extern void _ZN7S4269C33v37Ev();
extern void _ZN7S4269C33v38Ev();
extern void _ZN7S4269C33v39Ev();
extern void _ZN7S4269C23v40Ev();
extern void _ZN7S4269C23v41Ev();
extern void _ZN7S4269C23v42Ev();
extern void _ZN7S4269C23v43Ev();
extern void _ZN7S4269C23v44Ev();
extern void _ZN7S4269C23v45Ev();
extern void _ZN7S4269C23v46Ev();
extern void _ZN7S4269C23v47Ev();
extern void _ZN7S4269C23v48Ev();
extern void _ZN7S4269C23v49Ev();
extern void _ZN7S4269C23v50Ev();
extern void _ZN7S4269C23v51Ev();
extern void _ZN7S4269C23v52Ev();
extern void _ZN7S4269C23v53Ev();
static  VTBL_ENTRY vtc_S4269C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4269C2[0]),
  (VTBL_ENTRY)&_ZN7S4269C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4269C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4269C33v14Ev,
  (VTBL_ENTRY)&_ZN7S4269C33v15Ev,
  (VTBL_ENTRY)&_ZN7S4269C33v16Ev,
  (VTBL_ENTRY)&_ZN7S4269C33v17Ev,
  (VTBL_ENTRY)&_ZN7S4269C33v18Ev,
  (VTBL_ENTRY)&_ZN7S4269C33v19Ev,
  (VTBL_ENTRY)&_ZN7S4269C33v20Ev,
  (VTBL_ENTRY)&_ZN7S4269C33v21Ev,
  (VTBL_ENTRY)&_ZN7S4269C33v22Ev,
  (VTBL_ENTRY)&_ZN7S4269C33v23Ev,
  (VTBL_ENTRY)&_ZN7S4269C33v24Ev,
  (VTBL_ENTRY)&_ZN7S4269C33v25Ev,
  (VTBL_ENTRY)&_ZN7S4269C33v26Ev,
  (VTBL_ENTRY)&_ZN7S4269C33v27Ev,
  (VTBL_ENTRY)&_ZN7S4269C33v28Ev,
  (VTBL_ENTRY)&_ZN7S4269C33v29Ev,
  (VTBL_ENTRY)&_ZN7S4269C33v30Ev,
  (VTBL_ENTRY)&_ZN7S4269C33v31Ev,
  (VTBL_ENTRY)&_ZN7S4269C33v32Ev,
  (VTBL_ENTRY)&_ZN7S4269C33v33Ev,
  (VTBL_ENTRY)&_ZN7S4269C33v34Ev,
  (VTBL_ENTRY)&_ZN7S4269C33v35Ev,
  (VTBL_ENTRY)&_ZN7S4269C33v36Ev,
  (VTBL_ENTRY)&_ZN7S4269C33v37Ev,
  (VTBL_ENTRY)&_ZN7S4269C33v38Ev,
  (VTBL_ENTRY)&_ZN7S4269C33v39Ev,
  (VTBL_ENTRY)&_ZN7S4269C23v40Ev,
  (VTBL_ENTRY)&_ZN7S4269C23v41Ev,
  (VTBL_ENTRY)&_ZN7S4269C23v42Ev,
  (VTBL_ENTRY)&_ZN7S4269C23v43Ev,
  (VTBL_ENTRY)&_ZN7S4269C23v44Ev,
  (VTBL_ENTRY)&_ZN7S4269C23v45Ev,
  (VTBL_ENTRY)&_ZN7S4269C23v46Ev,
  (VTBL_ENTRY)&_ZN7S4269C23v47Ev,
  (VTBL_ENTRY)&_ZN7S4269C23v48Ev,
  (VTBL_ENTRY)&_ZN7S4269C23v49Ev,
  (VTBL_ENTRY)&_ZN7S4269C23v50Ev,
  (VTBL_ENTRY)&_ZN7S4269C23v51Ev,
  (VTBL_ENTRY)&_ZN7S4269C23v52Ev,
  (VTBL_ENTRY)&_ZN7S4269C23v53Ev,
};
extern VTBL_ENTRY _ZTI7S4269C2[];
extern  VTBL_ENTRY _ZTV7S4269C2[];
Class_Descriptor cd_S4269C2 = {  "S4269C2", // class name
  bases_S4269C2, 1,
  &(vtc_S4269C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,48), // object size
  NSPAIRA(_ZTI7S4269C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4269C2),44, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4269C1  : S4269C2 {
  void *s4269c1f0[4];
  virtual  ~S4269C1(); // _ZN7S4269C1D1Ev
  virtual void  v1(); // _ZN7S4269C12v1Ev
  virtual void  v2(); // _ZN7S4269C12v2Ev
  virtual void  v3(); // _ZN7S4269C12v3Ev
  virtual void  v4(); // _ZN7S4269C12v4Ev
  virtual void  v5(); // _ZN7S4269C12v5Ev
  virtual void  v6(); // _ZN7S4269C12v6Ev
  virtual void  v7(); // _ZN7S4269C12v7Ev
  virtual void  v8(); // _ZN7S4269C12v8Ev
  virtual void  v9(); // _ZN7S4269C12v9Ev
  virtual void  v10(); // _ZN7S4269C13v10Ev
  virtual void  v11(); // _ZN7S4269C13v11Ev
  virtual void  v12(); // _ZN7S4269C13v12Ev
  virtual void  v13(); // _ZN7S4269C13v13Ev
  S4269C1(); // tgen
};
//SIG(1 S4269C1) C1{ BC2{ BC3{ vd v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39} vd v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 Fp[2] Fi[4] FC4{ Fi[2]} Fp Fc Fp} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 Fp[4]}


 S4269C1 ::~S4269C1(){ note_dtor("S4269C1", this);}
void  S4269C1 ::v1(){vfunc_called(this, "_ZN7S4269C12v1Ev");}
void  S4269C1 ::v2(){vfunc_called(this, "_ZN7S4269C12v2Ev");}
void  S4269C1 ::v3(){vfunc_called(this, "_ZN7S4269C12v3Ev");}
void  S4269C1 ::v4(){vfunc_called(this, "_ZN7S4269C12v4Ev");}
void  S4269C1 ::v5(){vfunc_called(this, "_ZN7S4269C12v5Ev");}
void  S4269C1 ::v6(){vfunc_called(this, "_ZN7S4269C12v6Ev");}
void  S4269C1 ::v7(){vfunc_called(this, "_ZN7S4269C12v7Ev");}
void  S4269C1 ::v8(){vfunc_called(this, "_ZN7S4269C12v8Ev");}
void  S4269C1 ::v9(){vfunc_called(this, "_ZN7S4269C12v9Ev");}
void  S4269C1 ::v10(){vfunc_called(this, "_ZN7S4269C13v10Ev");}
void  S4269C1 ::v11(){vfunc_called(this, "_ZN7S4269C13v11Ev");}
void  S4269C1 ::v12(){vfunc_called(this, "_ZN7S4269C13v12Ev");}
void  S4269C1 ::v13(){vfunc_called(this, "_ZN7S4269C13v13Ev");}
S4269C1 ::S4269C1(){ note_ctor("S4269C1", this);} // tgen

static void Test_S4269C1()
{
  extern Class_Descriptor cd_S4269C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(14,17)];
    init_test(&cd_S4269C1, buf);
    S4269C1 *dp, &lv = *(dp=new (buf) S4269C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(104,64), "sizeof(S4269C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4269C1)");
    check_base_class_offset(lv, (S4269C3*)(S4269C2*), 0, "S4269C1");
    check_base_class_offset(lv, (S4269C2*), 0, "S4269C1");
    check_field_offset(lv, s4269c1f0, ABISELECT(72,48), "S4269C1.s4269c1f0");
    test_class_info(&lv, &cd_S4269C1);
    dp->~S4269C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4269C1(Test_S4269C1, "S4269C1", ABISELECT(104,64));

#else // __cplusplus

extern void _ZN7S4269C1C1Ev();
extern void _ZN7S4269C1D1Ev();
Name_Map name_map_S4269C1[] = {
  NSPAIR(_ZN7S4269C1C1Ev),
  NSPAIR(_ZN7S4269C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4269C3;
extern VTBL_ENTRY _ZTI7S4269C3[];
extern  VTBL_ENTRY _ZTV7S4269C3[];
extern Class_Descriptor cd_S4269C2;
extern VTBL_ENTRY _ZTI7S4269C2[];
extern  VTBL_ENTRY _ZTV7S4269C2[];
static Base_Class bases_S4269C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4269C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S4269C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4269C1[];
extern void _ZN7S4269C1D1Ev();
extern void _ZN7S4269C1D0Ev();
extern void _ZN7S4269C33v14Ev();
extern void _ZN7S4269C33v15Ev();
extern void _ZN7S4269C33v16Ev();
extern void _ZN7S4269C33v17Ev();
extern void _ZN7S4269C33v18Ev();
extern void _ZN7S4269C33v19Ev();
extern void _ZN7S4269C33v20Ev();
extern void _ZN7S4269C33v21Ev();
extern void _ZN7S4269C33v22Ev();
extern void _ZN7S4269C33v23Ev();
extern void _ZN7S4269C33v24Ev();
extern void _ZN7S4269C33v25Ev();
extern void _ZN7S4269C33v26Ev();
extern void _ZN7S4269C33v27Ev();
extern void _ZN7S4269C33v28Ev();
extern void _ZN7S4269C33v29Ev();
extern void _ZN7S4269C33v30Ev();
extern void _ZN7S4269C33v31Ev();
extern void _ZN7S4269C33v32Ev();
extern void _ZN7S4269C33v33Ev();
extern void _ZN7S4269C33v34Ev();
extern void _ZN7S4269C33v35Ev();
extern void _ZN7S4269C33v36Ev();
extern void _ZN7S4269C33v37Ev();
extern void _ZN7S4269C33v38Ev();
extern void _ZN7S4269C33v39Ev();
extern void _ZN7S4269C23v40Ev();
extern void _ZN7S4269C23v41Ev();
extern void _ZN7S4269C23v42Ev();
extern void _ZN7S4269C23v43Ev();
extern void _ZN7S4269C23v44Ev();
extern void _ZN7S4269C23v45Ev();
extern void _ZN7S4269C23v46Ev();
extern void _ZN7S4269C23v47Ev();
extern void _ZN7S4269C23v48Ev();
extern void _ZN7S4269C23v49Ev();
extern void _ZN7S4269C23v50Ev();
extern void _ZN7S4269C23v51Ev();
extern void _ZN7S4269C23v52Ev();
extern void _ZN7S4269C23v53Ev();
extern void _ZN7S4269C12v1Ev();
extern void _ZN7S4269C12v2Ev();
extern void _ZN7S4269C12v3Ev();
extern void _ZN7S4269C12v4Ev();
extern void _ZN7S4269C12v5Ev();
extern void _ZN7S4269C12v6Ev();
extern void _ZN7S4269C12v7Ev();
extern void _ZN7S4269C12v8Ev();
extern void _ZN7S4269C12v9Ev();
extern void _ZN7S4269C13v10Ev();
extern void _ZN7S4269C13v11Ev();
extern void _ZN7S4269C13v12Ev();
extern void _ZN7S4269C13v13Ev();
static  VTBL_ENTRY vtc_S4269C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4269C1[0]),
  (VTBL_ENTRY)&_ZN7S4269C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4269C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4269C33v14Ev,
  (VTBL_ENTRY)&_ZN7S4269C33v15Ev,
  (VTBL_ENTRY)&_ZN7S4269C33v16Ev,
  (VTBL_ENTRY)&_ZN7S4269C33v17Ev,
  (VTBL_ENTRY)&_ZN7S4269C33v18Ev,
  (VTBL_ENTRY)&_ZN7S4269C33v19Ev,
  (VTBL_ENTRY)&_ZN7S4269C33v20Ev,
  (VTBL_ENTRY)&_ZN7S4269C33v21Ev,
  (VTBL_ENTRY)&_ZN7S4269C33v22Ev,
  (VTBL_ENTRY)&_ZN7S4269C33v23Ev,
  (VTBL_ENTRY)&_ZN7S4269C33v24Ev,
  (VTBL_ENTRY)&_ZN7S4269C33v25Ev,
  (VTBL_ENTRY)&_ZN7S4269C33v26Ev,
  (VTBL_ENTRY)&_ZN7S4269C33v27Ev,
  (VTBL_ENTRY)&_ZN7S4269C33v28Ev,
  (VTBL_ENTRY)&_ZN7S4269C33v29Ev,
  (VTBL_ENTRY)&_ZN7S4269C33v30Ev,
  (VTBL_ENTRY)&_ZN7S4269C33v31Ev,
  (VTBL_ENTRY)&_ZN7S4269C33v32Ev,
  (VTBL_ENTRY)&_ZN7S4269C33v33Ev,
  (VTBL_ENTRY)&_ZN7S4269C33v34Ev,
  (VTBL_ENTRY)&_ZN7S4269C33v35Ev,
  (VTBL_ENTRY)&_ZN7S4269C33v36Ev,
  (VTBL_ENTRY)&_ZN7S4269C33v37Ev,
  (VTBL_ENTRY)&_ZN7S4269C33v38Ev,
  (VTBL_ENTRY)&_ZN7S4269C33v39Ev,
  (VTBL_ENTRY)&_ZN7S4269C23v40Ev,
  (VTBL_ENTRY)&_ZN7S4269C23v41Ev,
  (VTBL_ENTRY)&_ZN7S4269C23v42Ev,
  (VTBL_ENTRY)&_ZN7S4269C23v43Ev,
  (VTBL_ENTRY)&_ZN7S4269C23v44Ev,
  (VTBL_ENTRY)&_ZN7S4269C23v45Ev,
  (VTBL_ENTRY)&_ZN7S4269C23v46Ev,
  (VTBL_ENTRY)&_ZN7S4269C23v47Ev,
  (VTBL_ENTRY)&_ZN7S4269C23v48Ev,
  (VTBL_ENTRY)&_ZN7S4269C23v49Ev,
  (VTBL_ENTRY)&_ZN7S4269C23v50Ev,
  (VTBL_ENTRY)&_ZN7S4269C23v51Ev,
  (VTBL_ENTRY)&_ZN7S4269C23v52Ev,
  (VTBL_ENTRY)&_ZN7S4269C23v53Ev,
  (VTBL_ENTRY)&_ZN7S4269C12v1Ev,
  (VTBL_ENTRY)&_ZN7S4269C12v2Ev,
  (VTBL_ENTRY)&_ZN7S4269C12v3Ev,
  (VTBL_ENTRY)&_ZN7S4269C12v4Ev,
  (VTBL_ENTRY)&_ZN7S4269C12v5Ev,
  (VTBL_ENTRY)&_ZN7S4269C12v6Ev,
  (VTBL_ENTRY)&_ZN7S4269C12v7Ev,
  (VTBL_ENTRY)&_ZN7S4269C12v8Ev,
  (VTBL_ENTRY)&_ZN7S4269C12v9Ev,
  (VTBL_ENTRY)&_ZN7S4269C13v10Ev,
  (VTBL_ENTRY)&_ZN7S4269C13v11Ev,
  (VTBL_ENTRY)&_ZN7S4269C13v12Ev,
  (VTBL_ENTRY)&_ZN7S4269C13v13Ev,
};
extern VTBL_ENTRY _ZTI7S4269C1[];
extern  VTBL_ENTRY _ZTV7S4269C1[];
Class_Descriptor cd_S4269C1 = {  "S4269C1", // class name
  bases_S4269C1, 2,
  &(vtc_S4269C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(104,64), // object size
  NSPAIRA(_ZTI7S4269C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4269C1),57, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4220C3  {
  char s4220c3f0[1024];
  int s4220c3f1[2];
  virtual  ~S4220C3(); // _ZN7S4220C3D1Ev
  virtual void  v11(); // _ZN7S4220C33v11Ev
  virtual void  v12(); // _ZN7S4220C33v12Ev
  virtual void  v13(); // _ZN7S4220C33v13Ev
  virtual void  v14(); // _ZN7S4220C33v14Ev
  virtual void  v15(); // _ZN7S4220C33v15Ev
  virtual void  v16(); // _ZN7S4220C33v16Ev
  virtual void  v17(); // _ZN7S4220C33v17Ev
  virtual void  v18(); // _ZN7S4220C33v18Ev
  virtual void  v19(); // _ZN7S4220C33v19Ev
  virtual void  v20(); // _ZN7S4220C33v20Ev
  virtual void  v21(); // _ZN7S4220C33v21Ev
  virtual void  v22(); // _ZN7S4220C33v22Ev
  virtual void  v23(); // _ZN7S4220C33v23Ev
  S4220C3(); // tgen
};
//SIG(-1 S4220C3) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 Fc[1024] Fi[2]}


 S4220C3 ::~S4220C3(){ note_dtor("S4220C3", this);}
void  S4220C3 ::v11(){vfunc_called(this, "_ZN7S4220C33v11Ev");}
void  S4220C3 ::v12(){vfunc_called(this, "_ZN7S4220C33v12Ev");}
void  S4220C3 ::v13(){vfunc_called(this, "_ZN7S4220C33v13Ev");}
void  S4220C3 ::v14(){vfunc_called(this, "_ZN7S4220C33v14Ev");}
void  S4220C3 ::v15(){vfunc_called(this, "_ZN7S4220C33v15Ev");}
void  S4220C3 ::v16(){vfunc_called(this, "_ZN7S4220C33v16Ev");}
void  S4220C3 ::v17(){vfunc_called(this, "_ZN7S4220C33v17Ev");}
void  S4220C3 ::v18(){vfunc_called(this, "_ZN7S4220C33v18Ev");}
void  S4220C3 ::v19(){vfunc_called(this, "_ZN7S4220C33v19Ev");}
void  S4220C3 ::v20(){vfunc_called(this, "_ZN7S4220C33v20Ev");}
void  S4220C3 ::v21(){vfunc_called(this, "_ZN7S4220C33v21Ev");}
void  S4220C3 ::v22(){vfunc_called(this, "_ZN7S4220C33v22Ev");}
void  S4220C3 ::v23(){vfunc_called(this, "_ZN7S4220C33v23Ev");}
S4220C3 ::S4220C3(){ note_ctor("S4220C3", this);} // tgen

static void Test_S4220C3()
{
  extern Class_Descriptor cd_S4220C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(131,260)];
    init_test(&cd_S4220C3, buf);
    S4220C3 *dp, &lv = *(dp=new (buf) S4220C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1040,1036), "sizeof(S4220C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4220C3)");
    check_field_offset(lv, s4220c3f0, ABISELECT(8,4), "S4220C3.s4220c3f0");
    check_field_offset(lv, s4220c3f1, ABISELECT(1032,1028), "S4220C3.s4220c3f1");
    test_class_info(&lv, &cd_S4220C3);
    dp->~S4220C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4220C3(Test_S4220C3, "S4220C3", ABISELECT(1040,1036));

#else // __cplusplus

extern void _ZN7S4220C3C1Ev();
extern void _ZN7S4220C3D1Ev();
Name_Map name_map_S4220C3[] = {
  NSPAIR(_ZN7S4220C3C1Ev),
  NSPAIR(_ZN7S4220C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4220C3[];
extern void _ZN7S4220C3D1Ev();
extern void _ZN7S4220C3D0Ev();
extern void _ZN7S4220C33v11Ev();
extern void _ZN7S4220C33v12Ev();
extern void _ZN7S4220C33v13Ev();
extern void _ZN7S4220C33v14Ev();
extern void _ZN7S4220C33v15Ev();
extern void _ZN7S4220C33v16Ev();
extern void _ZN7S4220C33v17Ev();
extern void _ZN7S4220C33v18Ev();
extern void _ZN7S4220C33v19Ev();
extern void _ZN7S4220C33v20Ev();
extern void _ZN7S4220C33v21Ev();
extern void _ZN7S4220C33v22Ev();
extern void _ZN7S4220C33v23Ev();
static  VTBL_ENTRY vtc_S4220C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4220C3[0]),
  (VTBL_ENTRY)&_ZN7S4220C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4220C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4220C33v11Ev,
  (VTBL_ENTRY)&_ZN7S4220C33v12Ev,
  (VTBL_ENTRY)&_ZN7S4220C33v13Ev,
  (VTBL_ENTRY)&_ZN7S4220C33v14Ev,
  (VTBL_ENTRY)&_ZN7S4220C33v15Ev,
  (VTBL_ENTRY)&_ZN7S4220C33v16Ev,
  (VTBL_ENTRY)&_ZN7S4220C33v17Ev,
  (VTBL_ENTRY)&_ZN7S4220C33v18Ev,
  (VTBL_ENTRY)&_ZN7S4220C33v19Ev,
  (VTBL_ENTRY)&_ZN7S4220C33v20Ev,
  (VTBL_ENTRY)&_ZN7S4220C33v21Ev,
  (VTBL_ENTRY)&_ZN7S4220C33v22Ev,
  (VTBL_ENTRY)&_ZN7S4220C33v23Ev,
};
extern VTBL_ENTRY _ZTI7S4220C3[];
extern  VTBL_ENTRY _ZTV7S4220C3[];
Class_Descriptor cd_S4220C3 = {  "S4220C3", // class name
  0,0,//no base classes
  &(vtc_S4220C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(1040,1036), // object size
  NSPAIRA(_ZTI7S4220C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4220C3),17, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4220C2  : S4220C3 {
  virtual  ~S4220C2(); // _ZN7S4220C2D1Ev
  virtual void  v24(); // _ZN7S4220C23v24Ev
  virtual void  v25(); // _ZN7S4220C23v25Ev
  virtual void  v26(); // _ZN7S4220C23v26Ev
  virtual void  v27(); // _ZN7S4220C23v27Ev
  S4220C2(); // tgen
};
//SIG(-1 S4220C2) C1{ BC2{ vd v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 Fc[1024] Fi[2]} vd v1 v2 v3 v4}


 S4220C2 ::~S4220C2(){ note_dtor("S4220C2", this);}
void  S4220C2 ::v24(){vfunc_called(this, "_ZN7S4220C23v24Ev");}
void  S4220C2 ::v25(){vfunc_called(this, "_ZN7S4220C23v25Ev");}
void  S4220C2 ::v26(){vfunc_called(this, "_ZN7S4220C23v26Ev");}
void  S4220C2 ::v27(){vfunc_called(this, "_ZN7S4220C23v27Ev");}
S4220C2 ::S4220C2(){ note_ctor("S4220C2", this);} // tgen

static void Test_S4220C2()
{
  extern Class_Descriptor cd_S4220C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(131,260)];
    init_test(&cd_S4220C2, buf);
    S4220C2 *dp, &lv = *(dp=new (buf) S4220C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1040,1036), "sizeof(S4220C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4220C2)");
    check_base_class_offset(lv, (S4220C3*), 0, "S4220C2");
    test_class_info(&lv, &cd_S4220C2);
    dp->~S4220C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4220C2(Test_S4220C2, "S4220C2", ABISELECT(1040,1036));

#else // __cplusplus

extern void _ZN7S4220C2C1Ev();
extern void _ZN7S4220C2D1Ev();
Name_Map name_map_S4220C2[] = {
  NSPAIR(_ZN7S4220C2C1Ev),
  NSPAIR(_ZN7S4220C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4220C3;
extern VTBL_ENTRY _ZTI7S4220C3[];
extern  VTBL_ENTRY _ZTV7S4220C3[];
static Base_Class bases_S4220C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4220C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4220C2[];
extern void _ZN7S4220C2D1Ev();
extern void _ZN7S4220C2D0Ev();
extern void _ZN7S4220C33v11Ev();
extern void _ZN7S4220C33v12Ev();
extern void _ZN7S4220C33v13Ev();
extern void _ZN7S4220C33v14Ev();
extern void _ZN7S4220C33v15Ev();
extern void _ZN7S4220C33v16Ev();
extern void _ZN7S4220C33v17Ev();
extern void _ZN7S4220C33v18Ev();
extern void _ZN7S4220C33v19Ev();
extern void _ZN7S4220C33v20Ev();
extern void _ZN7S4220C33v21Ev();
extern void _ZN7S4220C33v22Ev();
extern void _ZN7S4220C33v23Ev();
extern void _ZN7S4220C23v24Ev();
extern void _ZN7S4220C23v25Ev();
extern void _ZN7S4220C23v26Ev();
extern void _ZN7S4220C23v27Ev();
static  VTBL_ENTRY vtc_S4220C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4220C2[0]),
  (VTBL_ENTRY)&_ZN7S4220C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4220C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4220C33v11Ev,
  (VTBL_ENTRY)&_ZN7S4220C33v12Ev,
  (VTBL_ENTRY)&_ZN7S4220C33v13Ev,
  (VTBL_ENTRY)&_ZN7S4220C33v14Ev,
  (VTBL_ENTRY)&_ZN7S4220C33v15Ev,
  (VTBL_ENTRY)&_ZN7S4220C33v16Ev,
  (VTBL_ENTRY)&_ZN7S4220C33v17Ev,
  (VTBL_ENTRY)&_ZN7S4220C33v18Ev,
  (VTBL_ENTRY)&_ZN7S4220C33v19Ev,
  (VTBL_ENTRY)&_ZN7S4220C33v20Ev,
  (VTBL_ENTRY)&_ZN7S4220C33v21Ev,
  (VTBL_ENTRY)&_ZN7S4220C33v22Ev,
  (VTBL_ENTRY)&_ZN7S4220C33v23Ev,
  (VTBL_ENTRY)&_ZN7S4220C23v24Ev,
  (VTBL_ENTRY)&_ZN7S4220C23v25Ev,
  (VTBL_ENTRY)&_ZN7S4220C23v26Ev,
  (VTBL_ENTRY)&_ZN7S4220C23v27Ev,
};
extern VTBL_ENTRY _ZTI7S4220C2[];
extern  VTBL_ENTRY _ZTV7S4220C2[];
Class_Descriptor cd_S4220C2 = {  "S4220C2", // class name
  bases_S4220C2, 1,
  &(vtc_S4220C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(1040,1036), // object size
  NSPAIRA(_ZTI7S4220C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4220C2),21, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4220C4  {
  void *s4220c4f0;
  int s4220c4f1;
  void *s4220c4f2;
  int s4220c4f3;
  void *s4220c4f4;
  int s4220c4f5;
  char s4220c4f6[1025];
  int s4220c4f7[2];
  void *s4220c4f8;
  void  mf4220c4(); // _ZN7S4220C48mf4220c4Ev
};
//SIG(-1 S4220C4) C1{ m Fp Fi Fp Fi Fp Fi Fc[1025] Fi[2] Fp}


void  S4220C4 ::mf4220c4(){}

static void Test_S4220C4()
{
  {
    init_simple_test("S4220C4");
    S4220C4 lv;
    check2(sizeof(lv), ABISELECT(1088,1064), "sizeof(S4220C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4220C4)");
    check_field_offset(lv, s4220c4f0, 0, "S4220C4.s4220c4f0");
    check_field_offset(lv, s4220c4f1, ABISELECT(8,4), "S4220C4.s4220c4f1");
    check_field_offset(lv, s4220c4f2, ABISELECT(16,8), "S4220C4.s4220c4f2");
    check_field_offset(lv, s4220c4f3, ABISELECT(24,12), "S4220C4.s4220c4f3");
    check_field_offset(lv, s4220c4f4, ABISELECT(32,16), "S4220C4.s4220c4f4");
    check_field_offset(lv, s4220c4f5, ABISELECT(40,20), "S4220C4.s4220c4f5");
    check_field_offset(lv, s4220c4f6, ABISELECT(44,24), "S4220C4.s4220c4f6");
    check_field_offset(lv, s4220c4f7, ABISELECT(1072,1052), "S4220C4.s4220c4f7");
    check_field_offset(lv, s4220c4f8, ABISELECT(1080,1060), "S4220C4.s4220c4f8");
  }
}
static Arrange_To_Call_Me vS4220C4(Test_S4220C4, "S4220C4", ABISELECT(1088,1064));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4220C1  : S4220C2 {
  char s4220c1f0;
  __tsi64 s4220c1f1[2];
  void *s4220c1f2[3];
  int s4220c1f3[2];
  ::S4220C4 s4220c1f4;
  void *s4220c1f5[3];
  int s4220c1f6;
  virtual  ~S4220C1(); // _ZN7S4220C1D1Ev
  virtual void  v1(); // _ZN7S4220C12v1Ev
  virtual void  v2(); // _ZN7S4220C12v2Ev
  virtual void  v3(); // _ZN7S4220C12v3Ev
  virtual void  v4(); // _ZN7S4220C12v4Ev
  virtual void  v5(); // _ZN7S4220C12v5Ev
  virtual void  v6(); // _ZN7S4220C12v6Ev
  virtual void  v7(); // _ZN7S4220C12v7Ev
  virtual void  v8(); // _ZN7S4220C12v8Ev
  virtual void  v9(); // _ZN7S4220C12v9Ev
  virtual void  v10(); // _ZN7S4220C13v10Ev
  S4220C1(); // tgen
};
//SIG(1 S4220C1) C1{ BC2{ BC3{ vd v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 Fc[1024] Fi[2]} vd v24 v25 v26 v27} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 Fc FL[2] Fp[3] Fi[2] FC4{ m Fp Fi Fp Fi Fp Fi Fc[1025] Fi[2] Fp} Fp[3] Fi}


 S4220C1 ::~S4220C1(){ note_dtor("S4220C1", this);}
void  S4220C1 ::v1(){vfunc_called(this, "_ZN7S4220C12v1Ev");}
void  S4220C1 ::v2(){vfunc_called(this, "_ZN7S4220C12v2Ev");}
void  S4220C1 ::v3(){vfunc_called(this, "_ZN7S4220C12v3Ev");}
void  S4220C1 ::v4(){vfunc_called(this, "_ZN7S4220C12v4Ev");}
void  S4220C1 ::v5(){vfunc_called(this, "_ZN7S4220C12v5Ev");}
void  S4220C1 ::v6(){vfunc_called(this, "_ZN7S4220C12v6Ev");}
void  S4220C1 ::v7(){vfunc_called(this, "_ZN7S4220C12v7Ev");}
void  S4220C1 ::v8(){vfunc_called(this, "_ZN7S4220C12v8Ev");}
void  S4220C1 ::v9(){vfunc_called(this, "_ZN7S4220C12v9Ev");}
void  S4220C1 ::v10(){vfunc_called(this, "_ZN7S4220C13v10Ev");}
S4220C1 ::S4220C1(){ note_ctor("S4220C1", this);} // tgen

static void Test_S4220C1()
{
  extern Class_Descriptor cd_S4220C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(278,540)];
    init_test(&cd_S4220C1, buf);
    S4220C1 *dp, &lv = *(dp=new (buf) S4220C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(2216,2156), "sizeof(S4220C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4220C1)");
    check_base_class_offset(lv, (S4220C3*)(S4220C2*), 0, "S4220C1");
    check_base_class_offset(lv, (S4220C2*), 0, "S4220C1");
    check_field_offset(lv, s4220c1f0, ABISELECT(1040,1036), "S4220C1.s4220c1f0");
    check_field_offset(lv, s4220c1f1, ABISELECT(1048,1040), "S4220C1.s4220c1f1");
    check_field_offset(lv, s4220c1f2, ABISELECT(1064,1056), "S4220C1.s4220c1f2");
    check_field_offset(lv, s4220c1f3, ABISELECT(1088,1068), "S4220C1.s4220c1f3");
    check_field_offset(lv, s4220c1f4, ABISELECT(1096,1076), "S4220C1.s4220c1f4");
    check_field_offset(lv, s4220c1f5, ABISELECT(2184,2140), "S4220C1.s4220c1f5");
    check_field_offset(lv, s4220c1f6, ABISELECT(2208,2152), "S4220C1.s4220c1f6");
    test_class_info(&lv, &cd_S4220C1);
    dp->~S4220C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4220C1(Test_S4220C1, "S4220C1", ABISELECT(2216,2156));

#else // __cplusplus

extern void _ZN7S4220C1C1Ev();
extern void _ZN7S4220C1D1Ev();
Name_Map name_map_S4220C1[] = {
  NSPAIR(_ZN7S4220C1C1Ev),
  NSPAIR(_ZN7S4220C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4220C3;
extern VTBL_ENTRY _ZTI7S4220C3[];
extern  VTBL_ENTRY _ZTV7S4220C3[];
extern Class_Descriptor cd_S4220C2;
extern VTBL_ENTRY _ZTI7S4220C2[];
extern  VTBL_ENTRY _ZTV7S4220C2[];
static Base_Class bases_S4220C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4220C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S4220C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4220C1[];
extern void _ZN7S4220C1D1Ev();
extern void _ZN7S4220C1D0Ev();
extern void _ZN7S4220C33v11Ev();
extern void _ZN7S4220C33v12Ev();
extern void _ZN7S4220C33v13Ev();
extern void _ZN7S4220C33v14Ev();
extern void _ZN7S4220C33v15Ev();
extern void _ZN7S4220C33v16Ev();
extern void _ZN7S4220C33v17Ev();
extern void _ZN7S4220C33v18Ev();
extern void _ZN7S4220C33v19Ev();
extern void _ZN7S4220C33v20Ev();
extern void _ZN7S4220C33v21Ev();
extern void _ZN7S4220C33v22Ev();
extern void _ZN7S4220C33v23Ev();
extern void _ZN7S4220C23v24Ev();
extern void _ZN7S4220C23v25Ev();
extern void _ZN7S4220C23v26Ev();
extern void _ZN7S4220C23v27Ev();
extern void _ZN7S4220C12v1Ev();
extern void _ZN7S4220C12v2Ev();
extern void _ZN7S4220C12v3Ev();
extern void _ZN7S4220C12v4Ev();
extern void _ZN7S4220C12v5Ev();
extern void _ZN7S4220C12v6Ev();
extern void _ZN7S4220C12v7Ev();
extern void _ZN7S4220C12v8Ev();
extern void _ZN7S4220C12v9Ev();
extern void _ZN7S4220C13v10Ev();
static  VTBL_ENTRY vtc_S4220C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4220C1[0]),
  (VTBL_ENTRY)&_ZN7S4220C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4220C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4220C33v11Ev,
  (VTBL_ENTRY)&_ZN7S4220C33v12Ev,
  (VTBL_ENTRY)&_ZN7S4220C33v13Ev,
  (VTBL_ENTRY)&_ZN7S4220C33v14Ev,
  (VTBL_ENTRY)&_ZN7S4220C33v15Ev,
  (VTBL_ENTRY)&_ZN7S4220C33v16Ev,
  (VTBL_ENTRY)&_ZN7S4220C33v17Ev,
  (VTBL_ENTRY)&_ZN7S4220C33v18Ev,
  (VTBL_ENTRY)&_ZN7S4220C33v19Ev,
  (VTBL_ENTRY)&_ZN7S4220C33v20Ev,
  (VTBL_ENTRY)&_ZN7S4220C33v21Ev,
  (VTBL_ENTRY)&_ZN7S4220C33v22Ev,
  (VTBL_ENTRY)&_ZN7S4220C33v23Ev,
  (VTBL_ENTRY)&_ZN7S4220C23v24Ev,
  (VTBL_ENTRY)&_ZN7S4220C23v25Ev,
  (VTBL_ENTRY)&_ZN7S4220C23v26Ev,
  (VTBL_ENTRY)&_ZN7S4220C23v27Ev,
  (VTBL_ENTRY)&_ZN7S4220C12v1Ev,
  (VTBL_ENTRY)&_ZN7S4220C12v2Ev,
  (VTBL_ENTRY)&_ZN7S4220C12v3Ev,
  (VTBL_ENTRY)&_ZN7S4220C12v4Ev,
  (VTBL_ENTRY)&_ZN7S4220C12v5Ev,
  (VTBL_ENTRY)&_ZN7S4220C12v6Ev,
  (VTBL_ENTRY)&_ZN7S4220C12v7Ev,
  (VTBL_ENTRY)&_ZN7S4220C12v8Ev,
  (VTBL_ENTRY)&_ZN7S4220C12v9Ev,
  (VTBL_ENTRY)&_ZN7S4220C13v10Ev,
};
extern VTBL_ENTRY _ZTI7S4220C1[];
extern  VTBL_ENTRY _ZTV7S4220C1[];
Class_Descriptor cd_S4220C1 = {  "S4220C1", // class name
  bases_S4220C1, 2,
  &(vtc_S4220C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(2216,2156), // object size
  NSPAIRA(_ZTI7S4220C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4220C1),31, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1179C6_nt  {
  virtual void  v1(); // _ZN10S1179C6_nt2v1Ev
  ~S1179C6_nt(); // tgen
  S1179C6_nt(); // tgen
};
//SIG(-1 S1179C6_nt) C1{ v1}


void  S1179C6_nt ::v1(){vfunc_called(this, "_ZN10S1179C6_nt2v1Ev");}
S1179C6_nt ::~S1179C6_nt(){ note_dtor("S1179C6_nt", this);} // tgen
S1179C6_nt ::S1179C6_nt(){ note_ctor("S1179C6_nt", this);} // tgen

//skip512 S1179C6_nt

#else // __cplusplus

extern void _ZN10S1179C6_ntC1Ev();
extern void _ZN10S1179C6_ntD1Ev();
Name_Map name_map_S1179C6_nt[] = {
  NSPAIR(_ZN10S1179C6_ntC1Ev),
  NSPAIR(_ZN10S1179C6_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S1179C6_nt[];
extern void _ZN10S1179C6_nt2v1Ev();
static  VTBL_ENTRY vtc_S1179C6_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S1179C6_nt[0]),
  (VTBL_ENTRY)&_ZN10S1179C6_nt2v1Ev,
};
extern VTBL_ENTRY _ZTI10S1179C6_nt[];
VTBL_ENTRY *P__ZTI10S1179C6_nt = _ZTI10S1179C6_nt; 
extern  VTBL_ENTRY _ZTV10S1179C6_nt[];
Class_Descriptor cd_S1179C6_nt = {  "S1179C6_nt", // class name
  0,0,//no base classes
  &(vtc_S1179C6_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI10S1179C6_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S1179C6_nt),3, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1179C5_nt  : S1179C6_nt {
  ~S1179C5_nt(); // tgen
  S1179C5_nt(); // tgen
};
//SIG(-1 S1179C5_nt) C1{ BC2{ v1}}


S1179C5_nt ::~S1179C5_nt(){ note_dtor("S1179C5_nt", this);} // tgen
S1179C5_nt ::S1179C5_nt(){ note_ctor("S1179C5_nt", this);} // tgen

//skip512 S1179C5_nt

#else // __cplusplus

extern void _ZN10S1179C5_ntC1Ev();
extern void _ZN10S1179C5_ntD1Ev();
Name_Map name_map_S1179C5_nt[] = {
  NSPAIR(_ZN10S1179C5_ntC1Ev),
  NSPAIR(_ZN10S1179C5_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1179C6_nt;
extern VTBL_ENTRY _ZTI10S1179C6_nt[];
extern  VTBL_ENTRY _ZTV10S1179C6_nt[];
static Base_Class bases_S1179C5_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1179C6_nt,    0, //bcp->offset
    0, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI10S1179C5_nt[];
extern void _ZN10S1179C6_nt2v1Ev();
static  VTBL_ENTRY vtc_S1179C5_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S1179C5_nt[0]),
  (VTBL_ENTRY)&_ZN10S1179C6_nt2v1Ev,
};
extern VTBL_ENTRY _ZTI10S1179C5_nt[];
VTBL_ENTRY *P__ZTI10S1179C5_nt = _ZTI10S1179C5_nt; 
extern  VTBL_ENTRY _ZTV10S1179C5_nt[];
Class_Descriptor cd_S1179C5_nt = {  "S1179C5_nt", // class name
  bases_S1179C5_nt, 1,
  &(vtc_S1179C5_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI10S1179C5_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV10S1179C5_nt),3, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1179C3_nt  : S836C39 , virtual S1179C5_nt {
  int s1179c3f0;
  ~S1179C3_nt(); // tgen
  S1179C3_nt(); // tgen
};
//SIG(-1 S1179C3_nt) C1{ BC2{ m} VBC3{ BC4{ v1}} Fi}


S1179C3_nt ::~S1179C3_nt(){ note_dtor("S1179C3_nt", this);} // tgen
S1179C3_nt ::S1179C3_nt(){ note_ctor("S1179C3_nt", this);} // tgen

//skip512 S1179C3_nt

#else // __cplusplus

extern void _ZN10S1179C3_ntC1Ev();
extern void _ZN10S1179C3_ntD1Ev();
Name_Map name_map_S1179C3_nt[] = {
  NSPAIR(_ZN10S1179C3_ntC1Ev),
  NSPAIR(_ZN10S1179C3_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S836C39;
extern VTBL_ENTRY _ZTI7S836C39[];
extern Class_Descriptor cd_S1179C6_nt;
extern VTBL_ENTRY _ZTI10S1179C6_nt[];
extern  VTBL_ENTRY _ZTV10S1179C6_nt[];
extern Class_Descriptor cd_S1179C5_nt;
extern VTBL_ENTRY _ZTI10S1179C5_nt[];
extern  VTBL_ENTRY _ZTV10S1179C5_nt[];
static Base_Class bases_S1179C3_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S836C39,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S1179C6_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S1179C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI10S1179C3_nt[];
extern void _ZN10S1179C6_nt2v1Ev();
static  VTBL_ENTRY vtc_S1179C3_nt[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI10S1179C3_nt[0]),
  (VTBL_ENTRY)&_ZN10S1179C6_nt2v1Ev,
};
extern VTBL_ENTRY _ZTV10S1179C3_nt[];
static  VTT_ENTRY vtt_S1179C3_nt[] = {
  {&(_ZTV10S1179C3_nt[4]),  4,5},
  {&(_ZTV10S1179C3_nt[4]),  4,5},
};
extern VTBL_ENTRY _ZTI10S1179C3_nt[];
VTBL_ENTRY *P__ZTI10S1179C3_nt = _ZTI10S1179C3_nt; 
extern  VTBL_ENTRY _ZTV10S1179C3_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT10S1179C3_nt[];
Class_Descriptor cd_S1179C3_nt = {  "S1179C3_nt", // class name
  bases_S1179C3_nt, 3,
  &(vtc_S1179C3_nt[0]), // expected_vtbl_contents
  &(vtt_S1179C3_nt[0]), // expected_vtt_contents
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI10S1179C3_nt),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV10S1179C3_nt),5, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT10S1179C3_nt),2, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1179C2  : S1179C3_nt {
  ~S1179C2(); // tgen
  S1179C2(); // tgen
};
//SIG(-1 S1179C2) C1{ BC2{ BC3{ m} VBC4{ BC5{ v1}} Fi}}


S1179C2 ::~S1179C2(){ note_dtor("S1179C2", this);} // tgen
S1179C2 ::S1179C2(){ note_ctor("S1179C2", this);} // tgen

static void Test_S1179C2()
{
  extern Class_Descriptor cd_S1179C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S1179C2, buf);
    S1179C2 *dp, &lv = *(dp=new (buf) S1179C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S1179C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1179C2)");
    check_base_class_offset(lv, (S836C39*)(S1179C3_nt*), 0, "S1179C2");
    check_base_class_offset(lv, (S1179C6_nt*)(S1179C5_nt*), 0, "S1179C2");
    check_base_class_offset(lv, (S1179C5_nt*)(S1179C3_nt*), 0, "S1179C2");
    check_base_class_offset(lv, (S1179C3_nt*), 0, "S1179C2");
    test_class_info(&lv, &cd_S1179C2);
    dp->~S1179C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1179C2(Test_S1179C2, "S1179C2", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S1179C2C1Ev();
extern void _ZN7S1179C2D1Ev();
Name_Map name_map_S1179C2[] = {
  NSPAIR(_ZN7S1179C2C1Ev),
  NSPAIR(_ZN7S1179C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S836C39;
extern VTBL_ENTRY _ZTI7S836C39[];
extern Class_Descriptor cd_S1179C6_nt;
extern VTBL_ENTRY _ZTI10S1179C6_nt[];
extern  VTBL_ENTRY _ZTV10S1179C6_nt[];
extern Class_Descriptor cd_S1179C5_nt;
extern VTBL_ENTRY _ZTI10S1179C5_nt[];
extern  VTBL_ENTRY _ZTV10S1179C5_nt[];
extern Class_Descriptor cd_S1179C3_nt;
extern VTBL_ENTRY _ZTI10S1179C3_nt[];
extern  VTBL_ENTRY _ZTV10S1179C3_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT10S1179C3_nt[];
static Base_Class bases_S1179C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S836C39,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S1179C6_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S1179C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S1179C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1179C2[];
extern void _ZN10S1179C6_nt2v1Ev();
static  VTBL_ENTRY vtc_S1179C2[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S1179C2[0]),
  (VTBL_ENTRY)&_ZN10S1179C6_nt2v1Ev,
};
extern VTBL_ENTRY _ZTV7S1179C2[];
extern void _ZN10S1179C6_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV10S1179C3_nt__7S1179C2[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI10S1179C3_nt[0]),
  (VTBL_ENTRY)&_ZN10S1179C6_nt2v1Ev,
};
static  VTT_ENTRY vtt_S1179C2[] = {
  {&(_ZTV7S1179C2[4]),  4,5},
  {&(_tg__ZTV10S1179C3_nt__7S1179C2[4]),  4,5},
  {&(_tg__ZTV10S1179C3_nt__7S1179C2[4]),  4,5},
  {&(_ZTV7S1179C2[4]),  4,5},
};
extern VTBL_ENTRY _ZTI7S1179C2[];
extern  VTBL_ENTRY _ZTV7S1179C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1179C2[];
Class_Descriptor cd_S1179C2 = {  "S1179C2", // class name
  bases_S1179C2, 4,
  &(vtc_S1179C2[0]), // expected_vtbl_contents
  &(vtt_S1179C2[0]), // expected_vtt_contents
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S1179C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1179C2),5, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S1179C2),4, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1179C7_nt  : virtual S836C29 {
  ~S1179C7_nt(); // tgen
  S1179C7_nt(); // tgen
};
//SIG(-1 S1179C7_nt) C1{ VBC2{ m}}


S1179C7_nt ::~S1179C7_nt(){ note_dtor("S1179C7_nt", this);} // tgen
S1179C7_nt ::S1179C7_nt(){ note_ctor("S1179C7_nt", this);} // tgen

//skip512 S1179C7_nt

#else // __cplusplus

extern void _ZN10S1179C7_ntC1Ev();
extern void _ZN10S1179C7_ntD1Ev();
Name_Map name_map_S1179C7_nt[] = {
  NSPAIR(_ZN10S1179C7_ntC1Ev),
  NSPAIR(_ZN10S1179C7_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S836C29;
extern VTBL_ENTRY _ZTI7S836C29[];
static Base_Class bases_S1179C7_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S836C29,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI10S1179C7_nt[];
static  VTBL_ENTRY vtc_S1179C7_nt[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI10S1179C7_nt[0]),
};
extern VTBL_ENTRY _ZTV10S1179C7_nt[];
static  VTT_ENTRY vtt_S1179C7_nt[] = {
  {&(_ZTV10S1179C7_nt[3]),  3,3},
};
extern VTBL_ENTRY _ZTI10S1179C7_nt[];
VTBL_ENTRY *P__ZTI10S1179C7_nt = _ZTI10S1179C7_nt; 
extern  VTBL_ENTRY _ZTV10S1179C7_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT10S1179C7_nt[];
Class_Descriptor cd_S1179C7_nt = {  "S1179C7_nt", // class name
  bases_S1179C7_nt, 1,
  &(vtc_S1179C7_nt[0]), // expected_vtbl_contents
  &(vtt_S1179C7_nt[0]), // expected_vtt_contents
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI10S1179C7_nt),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV10S1179C7_nt),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT10S1179C7_nt),1, //virtual table table var
  0, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1179C10_nt  {
  char s1179c10f0:7;
  void  mf1179c10(); // _ZN11S1179C10_nt9mf1179c10Ev
  virtual  ~S1179C10_nt(); // _ZN11S1179C10_ntD1Ev
  S1179C10_nt(); // tgen
};
//SIG(-1 S1179C10_nt) C1{ vd m Fc:7}


void  S1179C10_nt ::mf1179c10(){}
 S1179C10_nt ::~S1179C10_nt(){ note_dtor("S1179C10_nt", this);}
S1179C10_nt ::S1179C10_nt(){ note_ctor("S1179C10_nt", this);} // tgen

//skip512 S1179C10_nt

#else // __cplusplus

extern void _ZN11S1179C10_ntC1Ev();
extern void _ZN11S1179C10_ntD1Ev();
Name_Map name_map_S1179C10_nt[] = {
  NSPAIR(_ZN11S1179C10_ntC1Ev),
  NSPAIR(_ZN11S1179C10_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI11S1179C10_nt[];
extern void _ZN11S1179C10_ntD1Ev();
extern void _ZN11S1179C10_ntD0Ev();
static  VTBL_ENTRY vtc_S1179C10_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI11S1179C10_nt[0]),
  (VTBL_ENTRY)&_ZN11S1179C10_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S1179C10_ntD0Ev,
};
extern VTBL_ENTRY _ZTI11S1179C10_nt[];
VTBL_ENTRY *P__ZTI11S1179C10_nt = _ZTI11S1179C10_nt; 
extern  VTBL_ENTRY _ZTV11S1179C10_nt[];
Class_Descriptor cd_S1179C10_nt = {  "S1179C10_nt", // class name
  0,0,//no base classes
  &(vtc_S1179C10_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI11S1179C10_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV11S1179C10_nt),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1179C11_nt  : S1179C6_nt , S1179C5_nt {
  virtual  ~S1179C11_nt(); // _ZN11S1179C11_ntD1Ev
  S1179C11_nt(); // tgen
};
//SIG(-1 S1179C11_nt) C1{ BC2{ v1} BC3{ BC2} vd}


 S1179C11_nt ::~S1179C11_nt(){ note_dtor("S1179C11_nt", this);}
S1179C11_nt ::S1179C11_nt(){ note_ctor("S1179C11_nt", this);} // tgen

//skip512 S1179C11_nt

#else // __cplusplus

extern void _ZN11S1179C11_ntC1Ev();
extern void _ZN11S1179C11_ntD1Ev();
Name_Map name_map_S1179C11_nt[] = {
  NSPAIR(_ZN11S1179C11_ntC1Ev),
  NSPAIR(_ZN11S1179C11_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1179C6_nt;
extern VTBL_ENTRY _ZTI10S1179C6_nt[];
extern  VTBL_ENTRY _ZTV10S1179C6_nt[];
extern Class_Descriptor cd_S1179C6_nt;
extern VTBL_ENTRY _ZTI10S1179C6_nt[];
extern  VTBL_ENTRY _ZTV10S1179C6_nt[];
extern Class_Descriptor cd_S1179C5_nt;
extern VTBL_ENTRY _ZTI10S1179C5_nt[];
extern  VTBL_ENTRY _ZTV10S1179C5_nt[];
static Base_Class bases_S1179C11_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1179C6_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S1179C6_nt,    ABISELECT(8,4), //bcp->offset
    5, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S1179C5_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI11S1179C11_nt[];
extern void _ZN10S1179C6_nt2v1Ev();
extern void _ZN11S1179C11_ntD1Ev();
extern void _ZN11S1179C11_ntD0Ev();
extern void _ZN10S1179C6_nt2v1Ev();
static  VTBL_ENTRY vtc_S1179C11_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI11S1179C11_nt[0]),
  (VTBL_ENTRY)&_ZN10S1179C6_nt2v1Ev,
  (VTBL_ENTRY)&_ZN11S1179C11_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S1179C11_ntD0Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI11S1179C11_nt[0]),
  (VTBL_ENTRY)&_ZN10S1179C6_nt2v1Ev,
};
extern VTBL_ENTRY _ZTI11S1179C11_nt[];
VTBL_ENTRY *P__ZTI11S1179C11_nt = _ZTI11S1179C11_nt; 
extern  VTBL_ENTRY _ZTV11S1179C11_nt[];
Class_Descriptor cd_S1179C11_nt = {  "S1179C11_nt", // class name
  bases_S1179C11_nt, 3,
  &(vtc_S1179C11_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI11S1179C11_nt),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV11S1179C11_nt),8, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1179C13_nt  : S1179C6_nt , virtual S836C39 , S1179C5_nt {
  ~S1179C13_nt(); // tgen
  S1179C13_nt(); // tgen
};
//SIG(-1 S1179C13_nt) C1{ BC2{ v1} VBC3{ m} BC4{ BC2}}


S1179C13_nt ::~S1179C13_nt(){ note_dtor("S1179C13_nt", this);} // tgen
S1179C13_nt ::S1179C13_nt(){ note_ctor("S1179C13_nt", this);} // tgen

//skip512 S1179C13_nt

#else // __cplusplus

extern void _ZN11S1179C13_ntC1Ev();
extern void _ZN11S1179C13_ntD1Ev();
Name_Map name_map_S1179C13_nt[] = {
  NSPAIR(_ZN11S1179C13_ntC1Ev),
  NSPAIR(_ZN11S1179C13_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1179C6_nt;
extern VTBL_ENTRY _ZTI10S1179C6_nt[];
extern  VTBL_ENTRY _ZTV10S1179C6_nt[];
extern Class_Descriptor cd_S836C39;
extern VTBL_ENTRY _ZTI7S836C39[];
extern Class_Descriptor cd_S1179C6_nt;
extern VTBL_ENTRY _ZTI10S1179C6_nt[];
extern  VTBL_ENTRY _ZTV10S1179C6_nt[];
extern Class_Descriptor cd_S1179C5_nt;
extern VTBL_ENTRY _ZTI10S1179C5_nt[];
extern  VTBL_ENTRY _ZTV10S1179C5_nt[];
static Base_Class bases_S1179C13_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1179C6_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S836C39,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S1179C6_nt,    ABISELECT(8,4), //bcp->offset
    4, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S1179C5_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI11S1179C13_nt[];
extern void _ZN10S1179C6_nt2v1Ev();
extern void _ZN10S1179C6_nt2v1Ev();
static  VTBL_ENTRY vtc_S1179C13_nt[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI11S1179C13_nt[0]),
  (VTBL_ENTRY)&_ZN10S1179C6_nt2v1Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI11S1179C13_nt[0]),
  (VTBL_ENTRY)&_ZN10S1179C6_nt2v1Ev,
};
extern VTBL_ENTRY _ZTV11S1179C13_nt[];
static  VTT_ENTRY vtt_S1179C13_nt[] = {
  {&(_ZTV11S1179C13_nt[3]),  3,7},
};
extern VTBL_ENTRY _ZTI11S1179C13_nt[];
VTBL_ENTRY *P__ZTI11S1179C13_nt = _ZTI11S1179C13_nt; 
extern  VTBL_ENTRY _ZTV11S1179C13_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S1179C13_nt[];
Class_Descriptor cd_S1179C13_nt = {  "S1179C13_nt", // class name
  bases_S1179C13_nt, 4,
  &(vtc_S1179C13_nt[0]), // expected_vtbl_contents
  &(vtt_S1179C13_nt[0]), // expected_vtt_contents
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI11S1179C13_nt),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV11S1179C13_nt),7, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT11S1179C13_nt),1, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1179C12_nt  : virtual S1179C5_nt , S1179C6_nt , S1179C13_nt {
  ~S1179C12_nt(); // tgen
  S1179C12_nt(); // tgen
};
//SIG(-1 S1179C12_nt) C1{ VBC2{ BC3{ v1}} BC3 BC4{ BC3 VBC5{ m} BC2}}


S1179C12_nt ::~S1179C12_nt(){ note_dtor("S1179C12_nt", this);} // tgen
S1179C12_nt ::S1179C12_nt(){ note_ctor("S1179C12_nt", this);} // tgen

//skip512 S1179C12_nt

#else // __cplusplus

extern void _ZN11S1179C12_ntC1Ev();
extern void _ZN11S1179C12_ntD1Ev();
Name_Map name_map_S1179C12_nt[] = {
  NSPAIR(_ZN11S1179C12_ntC1Ev),
  NSPAIR(_ZN11S1179C12_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1179C6_nt;
extern VTBL_ENTRY _ZTI10S1179C6_nt[];
extern  VTBL_ENTRY _ZTV10S1179C6_nt[];
extern Class_Descriptor cd_S1179C5_nt;
extern VTBL_ENTRY _ZTI10S1179C5_nt[];
extern  VTBL_ENTRY _ZTV10S1179C5_nt[];
extern Class_Descriptor cd_S1179C6_nt;
extern VTBL_ENTRY _ZTI10S1179C6_nt[];
extern  VTBL_ENTRY _ZTV10S1179C6_nt[];
extern Class_Descriptor cd_S1179C6_nt;
extern VTBL_ENTRY _ZTI10S1179C6_nt[];
extern  VTBL_ENTRY _ZTV10S1179C6_nt[];
extern Class_Descriptor cd_S836C39;
extern VTBL_ENTRY _ZTI7S836C39[];
extern Class_Descriptor cd_S1179C6_nt;
extern VTBL_ENTRY _ZTI10S1179C6_nt[];
extern  VTBL_ENTRY _ZTV10S1179C6_nt[];
extern Class_Descriptor cd_S1179C5_nt;
extern VTBL_ENTRY _ZTI10S1179C5_nt[];
extern  VTBL_ENTRY _ZTV10S1179C5_nt[];
extern Class_Descriptor cd_S1179C13_nt;
extern VTBL_ENTRY _ZTI11S1179C13_nt[];
extern  VTBL_ENTRY _ZTV11S1179C13_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S1179C13_nt[];
static Base_Class bases_S1179C12_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1179C6_nt,    ABISELECT(24,12), //bcp->offset
    12, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1179C5_nt,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S1179C6_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S1179C6_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S836C39,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S1179C6_nt,    ABISELECT(16,8), //bcp->offset
    9, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S1179C5_nt,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S1179C13_nt,    ABISELECT(8,4), //bcp->offset
    5, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI11S1179C12_nt[];
extern void _ZN10S1179C6_nt2v1Ev();
extern void _ZN10S1179C6_nt2v1Ev();
extern void _ZN10S1179C6_nt2v1Ev();
extern void _ZN10S1179C6_nt2v1Ev();
static  VTBL_ENTRY vtc_S1179C12_nt[] = {
  0,
  ABISELECT(24,12),
  0,
  (VTBL_ENTRY)&(_ZTI11S1179C12_nt[0]),
  (VTBL_ENTRY)&_ZN10S1179C6_nt2v1Ev,
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI11S1179C12_nt[0]),
  (VTBL_ENTRY)&_ZN10S1179C6_nt2v1Ev,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI11S1179C12_nt[0]),
  (VTBL_ENTRY)&_ZN10S1179C6_nt2v1Ev,
  0,
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI11S1179C12_nt[0]),
  (VTBL_ENTRY)&_ZN10S1179C6_nt2v1Ev,
};
extern VTBL_ENTRY _ZTV11S1179C12_nt[];
extern void _ZN10S1179C6_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV11S1179C13_nt__11S1179C12_nt[] = {
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI11S1179C13_nt[0]),
  (VTBL_ENTRY)&_ZN10S1179C6_nt2v1Ev,
};
static  VTT_ENTRY vtt_S1179C12_nt[] = {
  {&(_ZTV11S1179C12_nt[4]),  4,16},
  {&(_tg__ZTV11S1179C13_nt__11S1179C12_nt[3]),  3,4},
  {&(_ZTV11S1179C12_nt[15]),  15,16},
  {&(_ZTV11S1179C12_nt[8]),  8,16},
};
extern VTBL_ENTRY _ZTI11S1179C12_nt[];
VTBL_ENTRY *P__ZTI11S1179C12_nt = _ZTI11S1179C12_nt; 
extern  VTBL_ENTRY _ZTV11S1179C12_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S1179C12_nt[];
Class_Descriptor cd_S1179C12_nt = {  "S1179C12_nt", // class name
  bases_S1179C12_nt, 8,
  &(vtc_S1179C12_nt[0]), // expected_vtbl_contents
  &(vtt_S1179C12_nt[0]), // expected_vtt_contents
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI11S1179C12_nt),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV11S1179C12_nt),16, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT11S1179C12_nt),4, //virtual table table var
  7, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1179C9_nt  : virtual S1179C10_nt , S1179C11_nt , S1179C12_nt , S1179C7_nt {
  void *s1179c9f0;
  ~S1179C9_nt(); // tgen
  S1179C9_nt(); // tgen
};
//SIG(-1 S1179C9_nt) C1{ VBC2{ vd m Fc:7} BC3{ BC4{ v1} BC5{ BC4} vd} BC6{ VBC5 BC4 BC7{ BC4 VBC8{ m} BC5}} BC9{ VBC10{ m}} Fp}


S1179C9_nt ::~S1179C9_nt(){ note_dtor("S1179C9_nt", this);} // tgen
S1179C9_nt ::S1179C9_nt(){ note_ctor("S1179C9_nt", this);} // tgen

//skip512 S1179C9_nt

#else // __cplusplus

extern void _ZN10S1179C9_ntC1Ev();
extern void _ZN10S1179C9_ntD1Ev();
Name_Map name_map_S1179C9_nt[] = {
  NSPAIR(_ZN10S1179C9_ntC1Ev),
  NSPAIR(_ZN10S1179C9_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1179C10_nt;
extern VTBL_ENTRY _ZTI11S1179C10_nt[];
extern  VTBL_ENTRY _ZTV11S1179C10_nt[];
extern Class_Descriptor cd_S1179C6_nt;
extern VTBL_ENTRY _ZTI10S1179C6_nt[];
extern  VTBL_ENTRY _ZTV10S1179C6_nt[];
extern Class_Descriptor cd_S1179C6_nt;
extern VTBL_ENTRY _ZTI10S1179C6_nt[];
extern  VTBL_ENTRY _ZTV10S1179C6_nt[];
extern Class_Descriptor cd_S1179C5_nt;
extern VTBL_ENTRY _ZTI10S1179C5_nt[];
extern  VTBL_ENTRY _ZTV10S1179C5_nt[];
extern Class_Descriptor cd_S1179C11_nt;
extern VTBL_ENTRY _ZTI11S1179C11_nt[];
extern  VTBL_ENTRY _ZTV11S1179C11_nt[];
extern Class_Descriptor cd_S1179C6_nt;
extern VTBL_ENTRY _ZTI10S1179C6_nt[];
extern  VTBL_ENTRY _ZTV10S1179C6_nt[];
extern Class_Descriptor cd_S1179C5_nt;
extern VTBL_ENTRY _ZTI10S1179C5_nt[];
extern  VTBL_ENTRY _ZTV10S1179C5_nt[];
extern Class_Descriptor cd_S1179C6_nt;
extern VTBL_ENTRY _ZTI10S1179C6_nt[];
extern  VTBL_ENTRY _ZTV10S1179C6_nt[];
extern Class_Descriptor cd_S1179C6_nt;
extern VTBL_ENTRY _ZTI10S1179C6_nt[];
extern  VTBL_ENTRY _ZTV10S1179C6_nt[];
extern Class_Descriptor cd_S836C39;
extern VTBL_ENTRY _ZTI7S836C39[];
extern Class_Descriptor cd_S1179C6_nt;
extern VTBL_ENTRY _ZTI10S1179C6_nt[];
extern  VTBL_ENTRY _ZTV10S1179C6_nt[];
extern Class_Descriptor cd_S1179C5_nt;
extern VTBL_ENTRY _ZTI10S1179C5_nt[];
extern  VTBL_ENTRY _ZTV10S1179C5_nt[];
extern Class_Descriptor cd_S1179C13_nt;
extern VTBL_ENTRY _ZTI11S1179C13_nt[];
extern  VTBL_ENTRY _ZTV11S1179C13_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S1179C13_nt[];
extern Class_Descriptor cd_S1179C12_nt;
extern VTBL_ENTRY _ZTI11S1179C12_nt[];
extern  VTBL_ENTRY _ZTV11S1179C12_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S1179C12_nt[];
extern Class_Descriptor cd_S836C29;
extern VTBL_ENTRY _ZTI7S836C29[];
extern Class_Descriptor cd_S1179C7_nt;
extern VTBL_ENTRY _ZTI10S1179C7_nt[];
extern  VTBL_ENTRY _ZTV10S1179C7_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT10S1179C7_nt[];
static Base_Class bases_S1179C9_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1179C10_nt,    ABISELECT(56,28), //bcp->offset
    27, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S1179C6_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S1179C6_nt,    ABISELECT(8,4), //bcp->offset
    9, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S1179C5_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S1179C11_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S1179C6_nt,    ABISELECT(72,36), //bcp->offset
    32, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S1179C5_nt,    ABISELECT(72,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    13, //immediately_derived
  0, 1},
  {&cd_S1179C6_nt,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S1179C6_nt,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S836C39,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S1179C6_nt,    ABISELECT(32,16), //bcp->offset
    21, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S1179C5_nt,    ABISELECT(32,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S1179C13_nt,    ABISELECT(24,12), //bcp->offset
    17, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S1179C12_nt,    ABISELECT(16,8), //bcp->offset
    12, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S836C29,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    15, //immediately_derived
  0, 1},
  {&cd_S1179C7_nt,    ABISELECT(40,20), //bcp->offset
    24, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI10S1179C9_nt[];
extern void _ZN10S1179C6_nt2v1Ev();
extern void _ZN10S1179C9_ntD1Ev();
extern void _ZN10S1179C9_ntD0Ev();
extern void _ZN10S1179C6_nt2v1Ev();
extern void _ZN10S1179C6_nt2v1Ev();
extern void _ZN10S1179C6_nt2v1Ev();
extern void _ZN10S1179C6_nt2v1Ev();
extern void ABISELECT(_ZTv0_n24_N10S1179C9_ntD1Ev,_ZTv0_n12_N10S1179C9_ntD1Ev)();
extern void ABISELECT(_ZThn56_N10S1179C9_ntD1Ev,_ZThn28_N10S1179C9_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N10S1179C9_ntD0Ev,_ZTv0_n12_N10S1179C9_ntD0Ev)();
extern void ABISELECT(_ZThn56_N10S1179C9_ntD0Ev,_ZThn28_N10S1179C9_ntD0Ev)() __attribute__((weak));
extern void _ZN10S1179C6_nt2v1Ev();
static  VTBL_ENTRY vtc_S1179C9_nt[] = {
  0,
  0,
  ABISELECT(72,36),
  ABISELECT(56,28),
  0,
  (VTBL_ENTRY)&(_ZTI10S1179C9_nt[0]),
  (VTBL_ENTRY)&_ZN10S1179C6_nt2v1Ev,
  (VTBL_ENTRY)&_ZN10S1179C9_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S1179C9_ntD0Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI10S1179C9_nt[0]),
  (VTBL_ENTRY)&_ZN10S1179C6_nt2v1Ev,
  ABISELECT(-16,-8),
  ABISELECT(56,28),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI10S1179C9_nt[0]),
  (VTBL_ENTRY)&_ZN10S1179C6_nt2v1Ev,
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI10S1179C9_nt[0]),
  (VTBL_ENTRY)&_ZN10S1179C6_nt2v1Ev,
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI10S1179C9_nt[0]),
  (VTBL_ENTRY)&_ZN10S1179C6_nt2v1Ev,
  ABISELECT(-40,-20),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI10S1179C9_nt[0]),
  ABISELECT(-56,-28),
  ABISELECT(-56,-28),
  (VTBL_ENTRY)&(_ZTI10S1179C9_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N10S1179C9_ntD1Ev,_ZTv0_n12_N10S1179C9_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N10S1179C9_ntD0Ev,_ZTv0_n12_N10S1179C9_ntD0Ev),
  0,
  ABISELECT(-72,-36),
  (VTBL_ENTRY)&(_ZTI10S1179C9_nt[0]),
  (VTBL_ENTRY)&_ZN10S1179C6_nt2v1Ev,
};
extern VTBL_ENTRY _ZTV10S1179C9_nt[];
extern void _ZN10S1179C6_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV11S1179C12_nt__10S1179C9_nt[] = {
  ABISELECT(-16,-8),
  ABISELECT(56,28),
  0,
  (VTBL_ENTRY)&(_ZTI11S1179C12_nt[0]),
  (VTBL_ENTRY)&_ZN10S1179C6_nt2v1Ev,
};
extern void _ZN10S1179C6_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV11S1179C13_nt11S1179C12_nt__10S1179C9_nt[] = {
  ABISELECT(-24,-12),
  0,
  (VTBL_ENTRY)&(_ZTI11S1179C13_nt[0]),
  (VTBL_ENTRY)&_ZN10S1179C6_nt2v1Ev,
};
extern void _ZN10S1179C6_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV10S1179C6_nt10S1179C5_nt__11S1179C12_nt__10S1179C9_nt[] = {
  0,
  ABISELECT(-56,-28),
  (VTBL_ENTRY)&(_ZTI11S1179C12_nt[0]),
  (VTBL_ENTRY)&_ZN10S1179C6_nt2v1Ev,
};
extern void _ZN10S1179C6_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV11S1179C13_nt__11S1179C12_nt__10S1179C9_nt[] = {
  ABISELECT(-24,-12),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI11S1179C12_nt[0]),
  (VTBL_ENTRY)&_ZN10S1179C6_nt2v1Ev,
};
static  VTBL_ENTRY _tg__ZTV10S1179C7_nt__10S1179C9_nt[] = {
  ABISELECT(-40,-20),
  0,
  (VTBL_ENTRY)&(_ZTI10S1179C7_nt[0]),
};
static  VTT_ENTRY vtt_S1179C9_nt[] = {
  {&(_ZTV10S1179C9_nt[6]),  6,36},
  {&(_tg__ZTV11S1179C12_nt__10S1179C9_nt[4]),  4,5},
  {&(_tg__ZTV11S1179C13_nt11S1179C12_nt__10S1179C9_nt[3]),  3,4},
  {&(_tg__ZTV10S1179C6_nt10S1179C5_nt__11S1179C12_nt__10S1179C9_nt[3]),  3,4},
  {&(_tg__ZTV11S1179C13_nt__11S1179C12_nt__10S1179C9_nt[3]),  3,4},
  {&(_tg__ZTV10S1179C7_nt__10S1179C9_nt[3]),  3,3},
  {&(_ZTV10S1179C9_nt[30]),  30,36},
  {&(_ZTV10S1179C9_nt[16]),  16,36},
  {&(_ZTV10S1179C9_nt[35]),  35,36},
  {&(_ZTV10S1179C9_nt[20]),  20,36},
  {&(_ZTV10S1179C9_nt[27]),  27,36},
};
extern VTBL_ENTRY _ZTI10S1179C9_nt[];
VTBL_ENTRY *P__ZTI10S1179C9_nt = _ZTI10S1179C9_nt; 
extern  VTBL_ENTRY _ZTV10S1179C9_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT10S1179C9_nt[];
static VTBL_ENTRY alt_thunk_names31[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N10S1179C9_ntD0Ev,_ZTv0_n12_N10S1179C9_ntD0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N10S1179C9_ntD0Ev,_ZThn28_N10S1179C9_ntD0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N10S1179C9_ntD1Ev,_ZTv0_n12_N10S1179C9_ntD1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N10S1179C9_ntD1Ev,_ZThn28_N10S1179C9_ntD1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S1179C9_nt = {  "S1179C9_nt", // class name
  bases_S1179C9_nt, 16,
  &(vtc_S1179C9_nt[0]), // expected_vtbl_contents
  &(vtt_S1179C9_nt[0]), // expected_vtt_contents
  ABISELECT(80,40), // object size
  NSPAIRA(_ZTI10S1179C9_nt),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV10S1179C9_nt),36, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT10S1179C9_nt),11, //virtual table table var
  14, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names31,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1179C15_nt  : S836C39 {
};
//SIG(-1 S1179C15_nt) C1{ BC2{ m}}



//skip512 S1179C15_nt

#else // __cplusplus

extern Class_Descriptor cd_S836C39;
extern VTBL_ENTRY _ZTI7S836C39[];
static Base_Class bases_S1179C15_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S836C39,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI11S1179C15_nt[];
VTBL_ENTRY *P__ZTI11S1179C15_nt = _ZTI11S1179C15_nt; 
Class_Descriptor cd_S1179C15_nt = {  "S1179C15_nt", // class name
  bases_S1179C15_nt, 1,
  0, // no vftv
  0, //no vtt
  1, // object size
  NSPAIRA(_ZTI11S1179C15_nt),ABISELECT(24,12), //typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1179C16_nt  : S836C29 , virtual S1179C3_nt {
  virtual  ~S1179C16_nt(); // _ZN11S1179C16_ntD2Ev
  S1179C16_nt(); // tgen
};
//SIG(-1 S1179C16_nt) C1{ BC2{ m} VBC3{ BC4{ m} VBC5{ BC6{ v1}} Fi} vd}


 S1179C16_nt ::~S1179C16_nt(){ note_dtor("S1179C16_nt", this);}
S1179C16_nt ::S1179C16_nt(){ note_ctor("S1179C16_nt", this);} // tgen

//skip512 S1179C16_nt

#else // __cplusplus

extern void _ZN11S1179C16_ntC1Ev();
extern void _ZN11S1179C16_ntD2Ev();
Name_Map name_map_S1179C16_nt[] = {
  NSPAIR(_ZN11S1179C16_ntC1Ev),
  NSPAIR(_ZN11S1179C16_ntD2Ev),
  {0,0}
};
extern Class_Descriptor cd_S836C29;
extern VTBL_ENTRY _ZTI7S836C29[];
extern Class_Descriptor cd_S836C39;
extern VTBL_ENTRY _ZTI7S836C39[];
extern Class_Descriptor cd_S1179C6_nt;
extern VTBL_ENTRY _ZTI10S1179C6_nt[];
extern  VTBL_ENTRY _ZTV10S1179C6_nt[];
extern Class_Descriptor cd_S1179C5_nt;
extern VTBL_ENTRY _ZTI10S1179C5_nt[];
extern  VTBL_ENTRY _ZTV10S1179C5_nt[];
extern Class_Descriptor cd_S1179C3_nt;
extern VTBL_ENTRY _ZTI10S1179C3_nt[];
extern  VTBL_ENTRY _ZTV10S1179C3_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT10S1179C3_nt[];
static Base_Class bases_S1179C16_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S836C29,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S836C39,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S1179C6_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S1179C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S1179C3_nt,    ABISELECT(8,4), //bcp->offset
    8, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI11S1179C16_nt[];
extern void _ZN10S1179C6_nt2v1Ev();
extern void _ZN11S1179C16_ntD1Ev();
extern void _ZN11S1179C16_ntD0Ev();
extern void _ZN10S1179C6_nt2v1Ev();
static  VTBL_ENTRY vtc_S1179C16_nt[] = {
  0,
  ABISELECT(8,4),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI11S1179C16_nt[0]),
  (VTBL_ENTRY)&_ZN10S1179C6_nt2v1Ev,
  (VTBL_ENTRY)&_ZN11S1179C16_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S1179C16_ntD0Ev,
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI11S1179C16_nt[0]),
  (VTBL_ENTRY)&_ZN10S1179C6_nt2v1Ev,
};
extern VTBL_ENTRY _ZTV11S1179C16_nt[];
extern void _ZN10S1179C6_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV10S1179C3_nt__11S1179C16_nt[] = {
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI10S1179C3_nt[0]),
  (VTBL_ENTRY)&_ZN10S1179C6_nt2v1Ev,
};
extern void _ZN10S1179C6_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV10S1179C6_nt10S1179C5_nt__10S1179C3_nt__11S1179C16_nt[] = {
  ABISELECT(8,4),
  (VTBL_ENTRY)&(_ZTI10S1179C3_nt[0]),
  (VTBL_ENTRY)&_ZN10S1179C6_nt2v1Ev,
};
static  VTT_ENTRY vtt_S1179C16_nt[] = {
  {&(_ZTV11S1179C16_nt[5]),  5,13},
  {&(_ZTV11S1179C16_nt[12]),  12,13},
  {&(_ZTV11S1179C16_nt[5]),  5,13},
  {&(_tg__ZTV10S1179C3_nt__11S1179C16_nt[4]),  4,5},
  {&(_tg__ZTV10S1179C6_nt10S1179C5_nt__10S1179C3_nt__11S1179C16_nt[2]),  2,3},
};
extern VTBL_ENTRY _ZTI11S1179C16_nt[];
VTBL_ENTRY *P__ZTI11S1179C16_nt = _ZTI11S1179C16_nt; 
extern  VTBL_ENTRY _ZTV11S1179C16_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S1179C16_nt[];
Class_Descriptor cd_S1179C16_nt = {  "S1179C16_nt", // class name
  bases_S1179C16_nt, 5,
  &(vtc_S1179C16_nt[0]), // expected_vtbl_contents
  &(vtt_S1179C16_nt[0]), // expected_vtt_contents
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI11S1179C16_nt),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV11S1179C16_nt),13, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT11S1179C16_nt),5, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1179C17_nt  : S1179C16_nt {
  void *s1179c17f0[7];
  int s1179c17f1;
  virtual  ~S1179C17_nt(); // _ZN11S1179C17_ntD2Ev
  S1179C17_nt(); // tgen
};
//SIG(-1 S1179C17_nt) C1{ BC2{ BC3{ m} VBC4{ BC5{ m} VBC6{ BC7{ v1}} Fi} vd} vd Fp[7] Fi}


 S1179C17_nt ::~S1179C17_nt(){ note_dtor("S1179C17_nt", this);}
S1179C17_nt ::S1179C17_nt(){ note_ctor("S1179C17_nt", this);} // tgen

//skip512 S1179C17_nt

#else // __cplusplus

extern void _ZN11S1179C17_ntC1Ev();
extern void _ZN11S1179C17_ntD2Ev();
Name_Map name_map_S1179C17_nt[] = {
  NSPAIR(_ZN11S1179C17_ntC1Ev),
  NSPAIR(_ZN11S1179C17_ntD2Ev),
  {0,0}
};
extern Class_Descriptor cd_S836C29;
extern VTBL_ENTRY _ZTI7S836C29[];
extern Class_Descriptor cd_S836C39;
extern VTBL_ENTRY _ZTI7S836C39[];
extern Class_Descriptor cd_S1179C6_nt;
extern VTBL_ENTRY _ZTI10S1179C6_nt[];
extern  VTBL_ENTRY _ZTV10S1179C6_nt[];
extern Class_Descriptor cd_S1179C5_nt;
extern VTBL_ENTRY _ZTI10S1179C5_nt[];
extern  VTBL_ENTRY _ZTV10S1179C5_nt[];
extern Class_Descriptor cd_S1179C3_nt;
extern VTBL_ENTRY _ZTI10S1179C3_nt[];
extern  VTBL_ENTRY _ZTV10S1179C3_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT10S1179C3_nt[];
extern Class_Descriptor cd_S1179C16_nt;
extern VTBL_ENTRY _ZTI11S1179C16_nt[];
extern  VTBL_ENTRY _ZTV11S1179C16_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S1179C16_nt[];
static Base_Class bases_S1179C17_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S836C29,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S836C39,    ABISELECT(72,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S1179C6_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S1179C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S1179C3_nt,    ABISELECT(72,36), //bcp->offset
    8, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S1179C16_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI11S1179C17_nt[];
extern void _ZN10S1179C6_nt2v1Ev();
extern void _ZN11S1179C17_ntD1Ev();
extern void _ZN11S1179C17_ntD0Ev();
extern void _ZN10S1179C6_nt2v1Ev();
static  VTBL_ENTRY vtc_S1179C17_nt[] = {
  0,
  ABISELECT(72,36),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI11S1179C17_nt[0]),
  (VTBL_ENTRY)&_ZN10S1179C6_nt2v1Ev,
  (VTBL_ENTRY)&_ZN11S1179C17_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S1179C17_ntD0Ev,
  ABISELECT(-72,-36),
  ABISELECT(-72,-36),
  ABISELECT(-72,-36),
  (VTBL_ENTRY)&(_ZTI11S1179C17_nt[0]),
  (VTBL_ENTRY)&_ZN10S1179C6_nt2v1Ev,
};
extern VTBL_ENTRY _ZTV11S1179C17_nt[];
extern void _ZN10S1179C6_nt2v1Ev();
extern void _ZN11S1179C16_ntD1Ev();
extern void _ZN11S1179C16_ntD0Ev();
static  VTBL_ENTRY _tg__ZTV11S1179C16_nt__11S1179C17_nt[] = {
  0,
  ABISELECT(72,36),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI11S1179C16_nt[0]),
  (VTBL_ENTRY)&_ZN10S1179C6_nt2v1Ev,
  (VTBL_ENTRY)&_ZN11S1179C16_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S1179C16_ntD0Ev,
};
extern void _ZN10S1179C6_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV10S1179C3_nt__11S1179C16_nt__11S1179C17_nt[] = {
  ABISELECT(-72,-36),
  ABISELECT(-72,-36),
  ABISELECT(-72,-36),
  (VTBL_ENTRY)&(_ZTI11S1179C16_nt[0]),
  (VTBL_ENTRY)&_ZN10S1179C6_nt2v1Ev,
};
extern void _ZN10S1179C6_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV10S1179C3_nt__11S1179C17_nt[] = {
  ABISELECT(-72,-36),
  ABISELECT(-72,-36),
  0,
  (VTBL_ENTRY)&(_ZTI10S1179C3_nt[0]),
  (VTBL_ENTRY)&_ZN10S1179C6_nt2v1Ev,
};
extern void _ZN10S1179C6_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV10S1179C6_nt10S1179C5_nt__10S1179C3_nt__11S1179C17_nt[] = {
  ABISELECT(72,36),
  (VTBL_ENTRY)&(_ZTI10S1179C3_nt[0]),
  (VTBL_ENTRY)&_ZN10S1179C6_nt2v1Ev,
};
static  VTT_ENTRY vtt_S1179C17_nt[] = {
  {&(_ZTV11S1179C17_nt[5]),  5,13},
  {&(_tg__ZTV11S1179C16_nt__11S1179C17_nt[5]),  5,8},
  {&(_tg__ZTV10S1179C3_nt__11S1179C16_nt__11S1179C17_nt[4]),  4,5},
  {&(_tg__ZTV11S1179C16_nt__11S1179C17_nt[5]),  5,8},
  {&(_ZTV11S1179C17_nt[12]),  12,13},
  {&(_ZTV11S1179C17_nt[5]),  5,13},
  {&(_tg__ZTV10S1179C3_nt__11S1179C17_nt[4]),  4,5},
  {&(_tg__ZTV10S1179C6_nt10S1179C5_nt__10S1179C3_nt__11S1179C17_nt[2]),  2,3},
};
extern VTBL_ENTRY _ZTI11S1179C17_nt[];
VTBL_ENTRY *P__ZTI11S1179C17_nt = _ZTI11S1179C17_nt; 
extern  VTBL_ENTRY _ZTV11S1179C17_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S1179C17_nt[];
Class_Descriptor cd_S1179C17_nt = {  "S1179C17_nt", // class name
  bases_S1179C17_nt, 6,
  &(vtc_S1179C17_nt[0]), // expected_vtbl_contents
  &(vtt_S1179C17_nt[0]), // expected_vtt_contents
  ABISELECT(88,44), // object size
  NSPAIRA(_ZTI11S1179C17_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV11S1179C17_nt),13, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT11S1179C17_nt),8, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1179C14  : S1179C15_nt , S1179C16_nt , virtual S1179C17_nt {
  ~S1179C14(); // tgen
  S1179C14(); // tgen
};
//SIG(-1 S1179C14) C1{ BC2{ BC3{ m}} BC4{ BC5{ m} VBC6{ BC3 VBC7{ BC8{ v1}} Fi} vd} VBC9{ BC4 vd Fp[7] Fi}}


S1179C14 ::~S1179C14(){ note_dtor("S1179C14", this);} // tgen
S1179C14 ::S1179C14(){ note_ctor("S1179C14", this);} // tgen

static void Test_S1179C14()
{
  extern Class_Descriptor cd_S1179C14;
  void *lvp;
  {
    ABISELECT(double,int) buf[13];
    init_test(&cd_S1179C14, buf);
    S1179C14 *dp, &lv = *(dp=new (buf) S1179C14());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,48), "sizeof(S1179C14)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1179C14)");
    check_base_class_offset(lv, (S836C39*)(S1179C15_nt*), 0, "S1179C14");
    check_base_class_offset(lv, (S1179C15_nt*), 0, "S1179C14");
    /*is_ambiguous_... S1179C14::S1179C16_nt */ AMB_check_base_class_offset(lv, (S836C29*)(S1179C16_nt*), 0, "S1179C14");
    check_base_class_offset(lv, (S836C39*)(S1179C3_nt*), ABISELECT(8,4), "S1179C14");
    check_base_class_offset(lv, (S1179C6_nt*)(S1179C5_nt*), 0, "S1179C14");
    check_base_class_offset(lv, (S1179C5_nt*)(S1179C3_nt*), 0, "S1179C14");
    /*is_ambiguous_... S1179C14::S1179C16_nt */ AMB_check_base_class_offset(lv, (S1179C3_nt*)(S1179C16_nt*), ABISELECT(8,4), "S1179C14");
    check_base_class_offset(lv, (S1179C3_nt*)(S1179C16_nt*)(S1179C17_nt*), ABISELECT(8,4), "S1179C14");
    /*is_ambiguous_... S1179C14::S1179C16_nt */ AMB_check_base_class_offset(lv, (S1179C16_nt*), 0, "S1179C14");
    check_base_class_offset(lv, (S836C29*)(S1179C16_nt*)(S1179C17_nt*), ABISELECT(24,12), "S1179C14");
    check_base_class_offset(lv, (S1179C16_nt*)(S1179C17_nt*), ABISELECT(24,12), "S1179C14");
    check_base_class_offset(lv, (S1179C17_nt*), ABISELECT(24,12), "S1179C14");
    test_class_info(&lv, &cd_S1179C14);
    dp->~S1179C14();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1179C14(Test_S1179C14, "S1179C14", ABISELECT(96,48));

#else // __cplusplus

extern void _ZN8S1179C14C1Ev();
extern void _ZN8S1179C14D1Ev();
Name_Map name_map_S1179C14[] = {
  NSPAIR(_ZN8S1179C14C1Ev),
  NSPAIR(_ZN8S1179C14D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S836C39;
extern VTBL_ENTRY _ZTI7S836C39[];
extern Class_Descriptor cd_S1179C15_nt;
extern VTBL_ENTRY _ZTI11S1179C15_nt[];
extern Class_Descriptor cd_S836C29;
extern VTBL_ENTRY _ZTI7S836C29[];
extern Class_Descriptor cd_S836C39;
extern VTBL_ENTRY _ZTI7S836C39[];
extern Class_Descriptor cd_S1179C6_nt;
extern VTBL_ENTRY _ZTI10S1179C6_nt[];
extern  VTBL_ENTRY _ZTV10S1179C6_nt[];
extern Class_Descriptor cd_S1179C5_nt;
extern VTBL_ENTRY _ZTI10S1179C5_nt[];
extern  VTBL_ENTRY _ZTV10S1179C5_nt[];
extern Class_Descriptor cd_S1179C3_nt;
extern VTBL_ENTRY _ZTI10S1179C3_nt[];
extern  VTBL_ENTRY _ZTV10S1179C3_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT10S1179C3_nt[];
extern Class_Descriptor cd_S1179C16_nt;
extern VTBL_ENTRY _ZTI11S1179C16_nt[];
extern  VTBL_ENTRY _ZTV11S1179C16_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S1179C16_nt[];
extern Class_Descriptor cd_S836C29;
extern VTBL_ENTRY _ZTI7S836C29[];
extern Class_Descriptor cd_S1179C16_nt;
extern VTBL_ENTRY _ZTI11S1179C16_nt[];
extern  VTBL_ENTRY _ZTV11S1179C16_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S1179C16_nt[];
extern Class_Descriptor cd_S1179C17_nt;
extern VTBL_ENTRY _ZTI11S1179C17_nt[];
extern  VTBL_ENTRY _ZTV11S1179C17_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S1179C17_nt[];
static Base_Class bases_S1179C14[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S836C39,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1179C15_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S836C29,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S836C39,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S1179C6_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S1179C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S1179C3_nt,    ABISELECT(8,4), //bcp->offset
    9, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S1179C16_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S836C29,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S1179C16_nt,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S1179C17_nt,    ABISELECT(24,12), //bcp->offset
    14, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S1179C14[];
extern void _ZN10S1179C6_nt2v1Ev();
extern void _ZN8S1179C14D1Ev();
extern void _ZN8S1179C14D0Ev();
extern void _ZN10S1179C6_nt2v1Ev();
extern void _ZN10S1179C6_nt2v1Ev();
extern void ABISELECT(_ZTv0_n48_N8S1179C14D1Ev,_ZTv0_n24_N8S1179C14D1Ev)();
extern void ABISELECT(_ZThn24_N8S1179C14D1Ev,_ZThn12_N8S1179C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S1179C14D0Ev,_ZTv0_n24_N8S1179C14D0Ev)();
extern void ABISELECT(_ZThn24_N8S1179C14D0Ev,_ZThn12_N8S1179C14D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S1179C14[] = {
  ABISELECT(24,12),
  0,
  ABISELECT(8,4),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S1179C14[0]),
  (VTBL_ENTRY)&_ZN10S1179C6_nt2v1Ev,
  (VTBL_ENTRY)&_ZN8S1179C14D1Ev,
  (VTBL_ENTRY)&_ZN8S1179C14D0Ev,
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S1179C14[0]),
  (VTBL_ENTRY)&_ZN10S1179C6_nt2v1Ev,
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  ABISELECT(-16,-8),
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S1179C14[0]),
  (VTBL_ENTRY)&_ZN10S1179C6_nt2v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S1179C14D1Ev,_ZTv0_n24_N8S1179C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S1179C14D0Ev,_ZTv0_n24_N8S1179C14D0Ev),
};
extern VTBL_ENTRY _ZTV8S1179C14[];
extern void _ZN10S1179C6_nt2v1Ev();
extern void _ZN11S1179C16_ntD1Ev();
extern void _ZN11S1179C16_ntD0Ev();
static  VTBL_ENTRY _tg__ZTV11S1179C16_nt__8S1179C14[] = {
  0,
  ABISELECT(8,4),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI11S1179C16_nt[0]),
  (VTBL_ENTRY)&_ZN10S1179C6_nt2v1Ev,
  (VTBL_ENTRY)&_ZN11S1179C16_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S1179C16_ntD0Ev,
};
extern void _ZN10S1179C6_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV10S1179C3_nt__11S1179C16_nt__8S1179C14[] = {
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI11S1179C16_nt[0]),
  (VTBL_ENTRY)&_ZN10S1179C6_nt2v1Ev,
};
extern void _ZN10S1179C6_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV10S1179C3_nt__8S1179C14[] = {
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI10S1179C3_nt[0]),
  (VTBL_ENTRY)&_ZN10S1179C6_nt2v1Ev,
};
extern void _ZN10S1179C6_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV10S1179C6_nt10S1179C5_nt__10S1179C3_nt__8S1179C14[] = {
  ABISELECT(8,4),
  (VTBL_ENTRY)&(_ZTI10S1179C3_nt[0]),
  (VTBL_ENTRY)&_ZN10S1179C6_nt2v1Ev,
};
extern void _ZN10S1179C6_nt2v1Ev();
extern void _ZN11S1179C17_ntD1Ev();
extern void _ZN11S1179C17_ntD0Ev();
static  VTBL_ENTRY _tg__ZTV11S1179C17_nt__8S1179C14[] = {
  ABISELECT(-24,-12),
  ABISELECT(-16,-8),
  ABISELECT(-24,-12),
  0,
  (VTBL_ENTRY)&(_ZTI11S1179C17_nt[0]),
  (VTBL_ENTRY)&_ZN10S1179C6_nt2v1Ev,
  (VTBL_ENTRY)&_ZN11S1179C17_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S1179C17_ntD0Ev,
};
extern void _ZN10S1179C6_nt2v1Ev();
extern void _ZN11S1179C16_ntD1Ev();
extern void _ZN11S1179C16_ntD0Ev();
static  VTBL_ENTRY _tg__ZTV11S1179C16_nt11S1179C17_nt__A1__8S1179C14[] = {
  ABISELECT(-24,-12),
  ABISELECT(-16,-8),
  ABISELECT(-24,-12),
  0,
  (VTBL_ENTRY)&(_ZTI11S1179C16_nt[0]),
  (VTBL_ENTRY)&_ZN10S1179C6_nt2v1Ev,
  (VTBL_ENTRY)&_ZN11S1179C16_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S1179C16_ntD0Ev,
};
extern void _ZN10S1179C6_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV10S1179C3_nt__11S1179C16_nt11S1179C17_nt__A1__8S1179C14[] = {
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI11S1179C16_nt[0]),
  (VTBL_ENTRY)&_ZN10S1179C6_nt2v1Ev,
};
extern void _ZN10S1179C6_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV10S1179C6_nt10S1179C5_nt__11S1179C16_nt11S1179C17_nt__A1__8S1179C14[] = {
  ABISELECT(24,12),
  (VTBL_ENTRY)&(_ZTI11S1179C16_nt[0]),
  (VTBL_ENTRY)&_ZN10S1179C6_nt2v1Ev,
};
extern void _ZN10S1179C6_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV10S1179C3_nt__11S1179C17_nt__8S1179C14[] = {
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI11S1179C17_nt[0]),
  (VTBL_ENTRY)&_ZN10S1179C6_nt2v1Ev,
};
extern void _ZN10S1179C6_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV10S1179C6_nt10S1179C5_nt__11S1179C17_nt__8S1179C14[] = {
  ABISELECT(24,12),
  (VTBL_ENTRY)&(_ZTI11S1179C17_nt[0]),
  (VTBL_ENTRY)&_ZN10S1179C6_nt2v1Ev,
};
static  VTT_ENTRY vtt_S1179C14[] = {
  {&(_ZTV8S1179C14[6]),  6,23},
  {&(_tg__ZTV11S1179C16_nt__8S1179C14[5]),  5,8},
  {&(_tg__ZTV10S1179C3_nt__11S1179C16_nt__8S1179C14[4]),  4,5},
  {&(_tg__ZTV11S1179C16_nt__8S1179C14[5]),  5,8},
  {&(_ZTV8S1179C14[13]),  13,23},
  {&(_ZTV8S1179C14[6]),  6,23},
  {&(_ZTV8S1179C14[20]),  20,23},
  {&(_tg__ZTV10S1179C3_nt__8S1179C14[4]),  4,5},
  {&(_tg__ZTV10S1179C6_nt10S1179C5_nt__10S1179C3_nt__8S1179C14[2]),  2,3},
  {&(_tg__ZTV11S1179C17_nt__8S1179C14[5]),  5,8},
  {&(_tg__ZTV11S1179C16_nt11S1179C17_nt__A1__8S1179C14[5]),  5,8},
  {&(_tg__ZTV10S1179C3_nt__11S1179C16_nt11S1179C17_nt__A1__8S1179C14[4]),  4,5},
  {&(_tg__ZTV10S1179C6_nt10S1179C5_nt__11S1179C16_nt11S1179C17_nt__A1__8S1179C14[2]),  2,3},
  {&(_tg__ZTV10S1179C3_nt__11S1179C17_nt__8S1179C14[4]),  4,5},
  {&(_tg__ZTV10S1179C6_nt10S1179C5_nt__11S1179C17_nt__8S1179C14[2]),  2,3},
};
extern VTBL_ENTRY _ZTI8S1179C14[];
extern  VTBL_ENTRY _ZTV8S1179C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1179C14[];
static VTBL_ENTRY alt_thunk_names32[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S1179C14D0Ev,_ZTv0_n24_N8S1179C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S1179C14D0Ev,_ZThn12_N8S1179C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S1179C14D1Ev,_ZTv0_n24_N8S1179C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S1179C14D1Ev,_ZThn12_N8S1179C14D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S1179C14 = {  "S1179C14", // class name
  bases_S1179C14, 11,
  &(vtc_S1179C14[0]), // expected_vtbl_contents
  &(vtt_S1179C14[0]), // expected_vtt_contents
  ABISELECT(96,48), // object size
  NSPAIRA(_ZTI8S1179C14),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S1179C14),23, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S1179C14),15, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names32,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

union  S1179C18_nt  {
  __tsi64 s1179c18f0;
  void  mf1179c18(); // _ZN11S1179C18_nt9mf1179c18Ev
};
//SIG(1 S1179C18_nt) U1{ m FL}

#endif // __cplusplus
#ifdef __cplusplus

struct  S1179C1  : S1179C2 , S1179C7_nt , S836C39 , S1179C9_nt , S1179C14 {
  ::S1179C18_nt s1179c1f0;
  short s1179c1f1;
  virtual  ~S1179C1(); // _ZN7S1179C1D2Ev
  S1179C1(); // tgen
};
//SIG(1 S1179C1) C1{ BC2{ BC3{ BC4{ m} VBC5{ BC6{ v1}} Fi}} BC7{ VBC8{ m}} BC4 BC9{ VBC10{ vd m Fc:7} BC11{ BC6 BC5 vd} BC12{ VBC5 BC6 BC13{ BC6 VBC4 BC5}} BC7 Fp} BC14{ BC15{ BC4} BC16{ BC8 VBC3 vd} VBC17{ BC16 vd Fp[7] Fi}} vd FU18{ m FL} Fs}


 S1179C1 ::~S1179C1(){ note_dtor("S1179C1", this);}
S1179C1 ::S1179C1(){ note_ctor("S1179C1", this);} // tgen

static void Test_S1179C1()
{
  extern Class_Descriptor cd_S1179C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(27,28)];
    init_test(&cd_S1179C1, buf);
    S1179C1 *dp, &lv = *(dp=new (buf) S1179C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(208,108), "sizeof(S1179C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1179C1)");
    check_base_class_offset(lv, (S836C39*)(S1179C3_nt*)(S1179C2*), 0, "S1179C1");
    /*is_ambiguous_... S1179C1::S1179C5_nt */ AMB_check_base_class_offset(lv, (S1179C6_nt*)(S1179C5_nt*), 0, "S1179C1");
    check_base_class_offset(lv, (S1179C5_nt*)(S1179C3_nt*)(S1179C2*), 0, "S1179C1");
    /*is_ambiguous_... S1179C12_nt::S1179C5_nt */ AMB_check_base_class_offset(lv, (S1179C5_nt*)(S1179C12_nt*)(S1179C9_nt*), 0, "S1179C1");
    /*is_ambiguous_... S1179C1::S1179C3_nt */ AMB_check_base_class_offset(lv, (S1179C5_nt*)(S1179C3_nt*), 0, "S1179C1");
    check_base_class_offset(lv, (S1179C3_nt*)(S1179C2*), 0, "S1179C1");
    check_base_class_offset(lv, (S1179C2*), 0, "S1179C1");
    /*is_ambiguous_... S1179C1::S1179C7_nt */ AMB_check_base_class_offset(lv, (S836C29*)(S1179C7_nt*), 0, "S1179C1");
    check_base_class_offset(lv, (S836C29*)(S1179C7_nt*)(S1179C9_nt*), 0, "S1179C1");
    /*is_ambiguous_... S1179C1::S1179C7_nt */ AMB_check_base_class_offset(lv, (S1179C7_nt*), ABISELECT(16,8), "S1179C1");
    /*is_ambiguous_... S1179C1::S836C39 */ AMB_check_base_class_offset(lv, (S836C39*), ABISELECT(24,12), "S1179C1");
    check_base_class_offset(lv, (S1179C10_nt*)(S1179C9_nt*), ABISELECT(104,56), "S1179C1");
    /*is_ambiguous_... S1179C11_nt::S1179C6_nt */ AMB_check_base_class_offset(lv, (S1179C6_nt*)(S1179C11_nt*)(S1179C9_nt*), ABISELECT(24,12), "S1179C1");
    check_base_class_offset(lv, (S1179C6_nt*)(S1179C5_nt*)(S1179C11_nt*)(S1179C9_nt*), ABISELECT(32,16), "S1179C1");
    check_base_class_offset(lv, (S1179C5_nt*)(S1179C11_nt*)(S1179C9_nt*), ABISELECT(32,16), "S1179C1");
    check_base_class_offset(lv, (S1179C11_nt*)(S1179C9_nt*), ABISELECT(24,12), "S1179C1");
    /*is_ambiguous_... S1179C12_nt::S1179C6_nt */ AMB_check_base_class_offset(lv, (S1179C6_nt*)(S1179C12_nt*)(S1179C9_nt*), ABISELECT(40,20), "S1179C1");
    /*is_ambiguous_... S1179C13_nt::S1179C6_nt */ AMB_check_base_class_offset(lv, (S1179C6_nt*)(S1179C13_nt*)(S1179C12_nt*)(S1179C9_nt*), ABISELECT(48,24), "S1179C1");
    check_base_class_offset(lv, (S836C39*)(S1179C13_nt*)(S1179C12_nt*)(S1179C9_nt*), ABISELECT(113,61), "S1179C1");
    check_base_class_offset(lv, (S1179C6_nt*)(S1179C5_nt*)(S1179C13_nt*)(S1179C12_nt*)(S1179C9_nt*), ABISELECT(56,28), "S1179C1");
    check_base_class_offset(lv, (S1179C5_nt*)(S1179C13_nt*)(S1179C12_nt*)(S1179C9_nt*), ABISELECT(56,28), "S1179C1");
    check_base_class_offset(lv, (S1179C13_nt*)(S1179C12_nt*)(S1179C9_nt*), ABISELECT(48,24), "S1179C1");
    check_base_class_offset(lv, (S1179C12_nt*)(S1179C9_nt*), ABISELECT(40,20), "S1179C1");
    check_base_class_offset(lv, (S1179C7_nt*)(S1179C9_nt*), ABISELECT(64,32), "S1179C1");
    check_base_class_offset(lv, (S1179C9_nt*), ABISELECT(24,12), "S1179C1");
    check_base_class_offset(lv, (S836C39*)(S1179C15_nt*)(S1179C14*), ABISELECT(80,40), "S1179C1");
    check_base_class_offset(lv, (S1179C15_nt*)(S1179C14*), ABISELECT(80,40), "S1179C1");
    /*is_ambiguous_... S1179C14::S1179C16_nt */ AMB_check_base_class_offset(lv, (S836C29*)(S1179C16_nt*)(S1179C14*), ABISELECT(80,40), "S1179C1");
    /*is_ambiguous_... S1179C1::S1179C3_nt */ AMB_check_base_class_offset(lv, (S836C39*)(S1179C3_nt*), ABISELECT(120,64), "S1179C1");
    /*is_ambiguous_... S1179C14::S1179C16_nt */ AMB_check_base_class_offset(lv, (S1179C3_nt*)(S1179C16_nt*)(S1179C14*), ABISELECT(120,64), "S1179C1");
    check_base_class_offset(lv, (S1179C3_nt*)(S1179C16_nt*)(S1179C17_nt*), ABISELECT(120,64), "S1179C1");
    /*is_ambiguous_... S1179C14::S1179C16_nt */ AMB_check_base_class_offset(lv, (S1179C16_nt*)(S1179C14*), ABISELECT(80,40), "S1179C1");
    check_base_class_offset(lv, (S836C29*)(S1179C16_nt*)(S1179C17_nt*), ABISELECT(136,72), "S1179C1");
    check_base_class_offset(lv, (S1179C16_nt*)(S1179C17_nt*), ABISELECT(136,72), "S1179C1");
    check_base_class_offset(lv, (S1179C17_nt*)(S1179C14*), ABISELECT(136,72), "S1179C1");
    check_base_class_offset(lv, (S1179C14*), ABISELECT(80,40), "S1179C1");
    check_field_offset(lv, s1179c1f0, ABISELECT(88,44), "S1179C1.s1179c1f0");
    check_field_offset(lv, s1179c1f1, ABISELECT(96,52), "S1179C1.s1179c1f1");
    test_class_info(&lv, &cd_S1179C1);
    dp->~S1179C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1179C1(Test_S1179C1, "S1179C1", ABISELECT(208,108));

#else // __cplusplus

extern void _ZN7S1179C1C1Ev();
extern void _ZN7S1179C1D2Ev();
Name_Map name_map_S1179C1[] = {
  NSPAIR(_ZN7S1179C1C1Ev),
  NSPAIR(_ZN7S1179C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S836C39;
extern VTBL_ENTRY _ZTI7S836C39[];
extern Class_Descriptor cd_S1179C6_nt;
extern VTBL_ENTRY _ZTI10S1179C6_nt[];
extern  VTBL_ENTRY _ZTV10S1179C6_nt[];
extern Class_Descriptor cd_S1179C5_nt;
extern VTBL_ENTRY _ZTI10S1179C5_nt[];
extern  VTBL_ENTRY _ZTV10S1179C5_nt[];
extern Class_Descriptor cd_S1179C3_nt;
extern VTBL_ENTRY _ZTI10S1179C3_nt[];
extern  VTBL_ENTRY _ZTV10S1179C3_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT10S1179C3_nt[];
extern Class_Descriptor cd_S1179C2;
extern VTBL_ENTRY _ZTI7S1179C2[];
extern  VTBL_ENTRY _ZTV7S1179C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1179C2[];
extern Class_Descriptor cd_S836C29;
extern VTBL_ENTRY _ZTI7S836C29[];
extern Class_Descriptor cd_S1179C7_nt;
extern VTBL_ENTRY _ZTI10S1179C7_nt[];
extern  VTBL_ENTRY _ZTV10S1179C7_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT10S1179C7_nt[];
extern Class_Descriptor cd_S836C39;
extern VTBL_ENTRY _ZTI7S836C39[];
extern Class_Descriptor cd_S1179C10_nt;
extern VTBL_ENTRY _ZTI11S1179C10_nt[];
extern  VTBL_ENTRY _ZTV11S1179C10_nt[];
extern Class_Descriptor cd_S1179C6_nt;
extern VTBL_ENTRY _ZTI10S1179C6_nt[];
extern  VTBL_ENTRY _ZTV10S1179C6_nt[];
extern Class_Descriptor cd_S1179C6_nt;
extern VTBL_ENTRY _ZTI10S1179C6_nt[];
extern  VTBL_ENTRY _ZTV10S1179C6_nt[];
extern Class_Descriptor cd_S1179C5_nt;
extern VTBL_ENTRY _ZTI10S1179C5_nt[];
extern  VTBL_ENTRY _ZTV10S1179C5_nt[];
extern Class_Descriptor cd_S1179C11_nt;
extern VTBL_ENTRY _ZTI11S1179C11_nt[];
extern  VTBL_ENTRY _ZTV11S1179C11_nt[];
extern Class_Descriptor cd_S1179C6_nt;
extern VTBL_ENTRY _ZTI10S1179C6_nt[];
extern  VTBL_ENTRY _ZTV10S1179C6_nt[];
extern Class_Descriptor cd_S1179C6_nt;
extern VTBL_ENTRY _ZTI10S1179C6_nt[];
extern  VTBL_ENTRY _ZTV10S1179C6_nt[];
extern Class_Descriptor cd_S836C39;
extern VTBL_ENTRY _ZTI7S836C39[];
extern Class_Descriptor cd_S1179C6_nt;
extern VTBL_ENTRY _ZTI10S1179C6_nt[];
extern  VTBL_ENTRY _ZTV10S1179C6_nt[];
extern Class_Descriptor cd_S1179C5_nt;
extern VTBL_ENTRY _ZTI10S1179C5_nt[];
extern  VTBL_ENTRY _ZTV10S1179C5_nt[];
extern Class_Descriptor cd_S1179C13_nt;
extern VTBL_ENTRY _ZTI11S1179C13_nt[];
extern  VTBL_ENTRY _ZTV11S1179C13_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S1179C13_nt[];
extern Class_Descriptor cd_S1179C12_nt;
extern VTBL_ENTRY _ZTI11S1179C12_nt[];
extern  VTBL_ENTRY _ZTV11S1179C12_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S1179C12_nt[];
extern Class_Descriptor cd_S1179C7_nt;
extern VTBL_ENTRY _ZTI10S1179C7_nt[];
extern  VTBL_ENTRY _ZTV10S1179C7_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT10S1179C7_nt[];
extern Class_Descriptor cd_S1179C9_nt;
extern VTBL_ENTRY _ZTI10S1179C9_nt[];
extern  VTBL_ENTRY _ZTV10S1179C9_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT10S1179C9_nt[];
extern Class_Descriptor cd_S836C39;
extern VTBL_ENTRY _ZTI7S836C39[];
extern Class_Descriptor cd_S1179C15_nt;
extern VTBL_ENTRY _ZTI11S1179C15_nt[];
extern Class_Descriptor cd_S836C29;
extern VTBL_ENTRY _ZTI7S836C29[];
extern Class_Descriptor cd_S836C39;
extern VTBL_ENTRY _ZTI7S836C39[];
extern Class_Descriptor cd_S1179C3_nt;
extern VTBL_ENTRY _ZTI10S1179C3_nt[];
extern  VTBL_ENTRY _ZTV10S1179C3_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT10S1179C3_nt[];
extern Class_Descriptor cd_S1179C16_nt;
extern VTBL_ENTRY _ZTI11S1179C16_nt[];
extern  VTBL_ENTRY _ZTV11S1179C16_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S1179C16_nt[];
extern Class_Descriptor cd_S836C29;
extern VTBL_ENTRY _ZTI7S836C29[];
extern Class_Descriptor cd_S1179C16_nt;
extern VTBL_ENTRY _ZTI11S1179C16_nt[];
extern  VTBL_ENTRY _ZTV11S1179C16_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S1179C16_nt[];
extern Class_Descriptor cd_S1179C17_nt;
extern VTBL_ENTRY _ZTI11S1179C17_nt[];
extern  VTBL_ENTRY _ZTV11S1179C17_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S1179C17_nt[];
extern Class_Descriptor cd_S1179C14;
extern VTBL_ENTRY _ZTI8S1179C14[];
extern  VTBL_ENTRY _ZTV8S1179C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1179C14[];
static Base_Class bases_S1179C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S836C39,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S1179C6_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S1179C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    25, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S1179C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S1179C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S836C29,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S1179C7_nt,    ABISELECT(16,8), //bcp->offset
    12, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    26, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S836C39,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S1179C10_nt,    ABISELECT(104,56), //bcp->offset
    51, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    28, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    21, //immediately_derived
  0, 1},
  {&cd_S1179C6_nt,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S1179C6_nt,    ABISELECT(32,16), //bcp->offset
    24, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S1179C5_nt,    ABISELECT(32,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S1179C11_nt,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S1179C6_nt,    ABISELECT(40,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S1179C6_nt,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S836C39,    ABISELECT(113,61), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    18, //immediately_derived
  0, 1},
  {&cd_S1179C6_nt,    ABISELECT(56,28), //bcp->offset
    36, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S1179C5_nt,    ABISELECT(56,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S1179C13_nt,    ABISELECT(48,24), //bcp->offset
    32, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    30, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S1179C12_nt,    ABISELECT(40,20), //bcp->offset
    27, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    29, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S1179C7_nt,    ABISELECT(64,32), //bcp->offset
    39, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    31, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    20, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S1179C9_nt,    ABISELECT(24,12), //bcp->offset
    15, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    27, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    21, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S836C39,    ABISELECT(80,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S1179C15_nt,    ABISELECT(80,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    31, //immediately_derived
  0, 0},
  {&cd_S836C29,    ABISELECT(80,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    27, //immediately_derived
  0, 0},
  {&cd_S836C39,    ABISELECT(120,64), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S1179C3_nt,    ABISELECT(120,64), //bcp->offset
    56, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    33, //bcp->index_in_construction_vtbl_array
    35, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    27, //immediately_derived
  0, 1},
  {&cd_S1179C16_nt,    ABISELECT(80,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    22, //init_seq
    31, //immediately_derived
  0, 0},
  {&cd_S836C29,    ABISELECT(136,72), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    29, //immediately_derived
  0, 0},
  {&cd_S1179C16_nt,    ABISELECT(136,72), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    38, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    30, //immediately_derived
  0, 0},
  {&cd_S1179C17_nt,    ABISELECT(136,72), //bcp->offset
    61, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    34, //bcp->index_in_construction_vtbl_array
    37, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    31, //immediately_derived
  0, 1},
  {&cd_S1179C14,    ABISELECT(80,40), //bcp->offset
    42, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    32, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    23, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1179C1[];
extern void _ZN10S1179C6_nt2v1Ev();
extern void _ZN7S1179C1D1Ev();
extern void _ZN7S1179C1D0Ev();
extern void _ZN10S1179C6_nt2v1Ev();
extern void ABISELECT(_ZThn24_N7S1179C1D1Ev,_ZThn12_N7S1179C1D1Ev)();
extern void ABISELECT(_ZThn24_N7S1179C1D0Ev,_ZThn12_N7S1179C1D0Ev)();
extern void _ZN10S1179C6_nt2v1Ev();
extern void _ZN10S1179C6_nt2v1Ev();
extern void _ZN10S1179C6_nt2v1Ev();
extern void _ZN10S1179C6_nt2v1Ev();
extern void _ZN10S1179C6_nt2v1Ev();
extern void ABISELECT(_ZThn80_N7S1179C1D1Ev,_ZThn40_N7S1179C1D1Ev)();
extern void ABISELECT(_ZThn80_N7S1179C1D0Ev,_ZThn40_N7S1179C1D0Ev)();
extern void ABISELECT(_ZTv0_n24_N7S1179C1D1Ev,_ZTv0_n12_N7S1179C1D1Ev)();
extern void ABISELECT(_ZThn104_N7S1179C1D1Ev,_ZThn56_N7S1179C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S1179C1D0Ev,_ZTv0_n12_N7S1179C1D0Ev)();
extern void ABISELECT(_ZThn104_N7S1179C1D0Ev,_ZThn56_N7S1179C1D0Ev)() __attribute__((weak));
extern void _ZN10S1179C6_nt2v1Ev();
extern void _ZN10S1179C6_nt2v1Ev();
extern void ABISELECT(_ZTv0_n48_N7S1179C1D1Ev,_ZTv0_n24_N7S1179C1D1Ev)();
extern void ABISELECT(_ZThn136_N7S1179C1D1Ev,_ZThn72_N7S1179C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S1179C1D0Ev,_ZTv0_n24_N7S1179C1D0Ev)();
extern void ABISELECT(_ZThn136_N7S1179C1D0Ev,_ZThn72_N7S1179C1D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S1179C1[] = {
  ABISELECT(136,72),
  ABISELECT(120,64),
  ABISELECT(113,61),
  ABISELECT(104,56),
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S1179C1[0]),
  (VTBL_ENTRY)&_ZN10S1179C6_nt2v1Ev,
  (VTBL_ENTRY)&_ZN7S1179C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1179C1D0Ev,
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S1179C1[0]),
  ABISELECT(-24,-12),
  ABISELECT(89,49),
  ABISELECT(-24,-12),
  ABISELECT(80,44),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI7S1179C1[0]),
  (VTBL_ENTRY)&_ZN10S1179C6_nt2v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn24_N7S1179C1D1Ev,_ZThn12_N7S1179C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn24_N7S1179C1D0Ev,_ZThn12_N7S1179C1D0Ev),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI7S1179C1[0]),
  (VTBL_ENTRY)&_ZN10S1179C6_nt2v1Ev,
  ABISELECT(73,41),
  ABISELECT(-40,-20),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI7S1179C1[0]),
  (VTBL_ENTRY)&_ZN10S1179C6_nt2v1Ev,
  ABISELECT(65,37),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI7S1179C1[0]),
  (VTBL_ENTRY)&_ZN10S1179C6_nt2v1Ev,
  ABISELECT(-56,-28),
  (VTBL_ENTRY)&(_ZTI7S1179C1[0]),
  (VTBL_ENTRY)&_ZN10S1179C6_nt2v1Ev,
  ABISELECT(-64,-32),
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI7S1179C1[0]),
  ABISELECT(56,32),
  ABISELECT(-80,-40),
  ABISELECT(40,24),
  ABISELECT(-80,-40),
  ABISELECT(-80,-40),
  (VTBL_ENTRY)&(_ZTI7S1179C1[0]),
  (VTBL_ENTRY)&_ZN10S1179C6_nt2v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn80_N7S1179C1D1Ev,_ZThn40_N7S1179C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn80_N7S1179C1D0Ev,_ZThn40_N7S1179C1D0Ev),
  ABISELECT(-104,-56),
  ABISELECT(-104,-56),
  (VTBL_ENTRY)&(_ZTI7S1179C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1179C1D1Ev,_ZTv0_n12_N7S1179C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1179C1D0Ev,_ZTv0_n12_N7S1179C1D0Ev),
  ABISELECT(-120,-64),
  ABISELECT(-120,-64),
  ABISELECT(-120,-64),
  (VTBL_ENTRY)&(_ZTI7S1179C1[0]),
  (VTBL_ENTRY)&_ZN10S1179C6_nt2v1Ev,
  ABISELECT(-136,-72),
  ABISELECT(-136,-72),
  ABISELECT(-16,-8),
  ABISELECT(-136,-72),
  ABISELECT(-136,-72),
  (VTBL_ENTRY)&(_ZTI7S1179C1[0]),
  (VTBL_ENTRY)&_ZN10S1179C6_nt2v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S1179C1D1Ev,_ZTv0_n24_N7S1179C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S1179C1D0Ev,_ZTv0_n24_N7S1179C1D0Ev),
};
extern VTBL_ENTRY _ZTV7S1179C1[];
extern void _ZN10S1179C6_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV7S1179C2__7S1179C1[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S1179C2[0]),
  (VTBL_ENTRY)&_ZN10S1179C6_nt2v1Ev,
};
extern void _ZN10S1179C6_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV10S1179C3_nt7S1179C2__7S1179C1[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI10S1179C3_nt[0]),
  (VTBL_ENTRY)&_ZN10S1179C6_nt2v1Ev,
};
static  VTBL_ENTRY _tg__ZTV10S1179C7_nt__7S1179C1[] = {
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI10S1179C7_nt[0]),
};
extern void _ZN10S1179C6_nt2v1Ev();
extern void _ZN10S1179C9_ntD1Ev();
extern void _ZN10S1179C9_ntD0Ev();
static  VTBL_ENTRY _tg__ZTV10S1179C9_nt__7S1179C1[] = {
  ABISELECT(-24,-12),
  ABISELECT(89,49),
  ABISELECT(-24,-12),
  ABISELECT(80,44),
  0,
  (VTBL_ENTRY)&(_ZTI10S1179C9_nt[0]),
  (VTBL_ENTRY)&_ZN10S1179C6_nt2v1Ev,
  (VTBL_ENTRY)&_ZN10S1179C9_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S1179C9_ntD0Ev,
};
extern void _ZN10S1179C6_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV11S1179C12_nt10S1179C9_nt__7S1179C1[] = {
  ABISELECT(73,41),
  ABISELECT(-40,-20),
  0,
  (VTBL_ENTRY)&(_ZTI11S1179C12_nt[0]),
  (VTBL_ENTRY)&_ZN10S1179C6_nt2v1Ev,
};
extern void _ZN10S1179C6_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV11S1179C13_nt11S1179C12_nt10S1179C9_nt__7S1179C1[] = {
  ABISELECT(65,37),
  0,
  (VTBL_ENTRY)&(_ZTI11S1179C13_nt[0]),
  (VTBL_ENTRY)&_ZN10S1179C6_nt2v1Ev,
};
extern void _ZN10S1179C6_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV10S1179C6_nt10S1179C5_nt__11S1179C12_nt10S1179C9_nt__7S1179C1[] = {
  0,
  ABISELECT(40,20),
  (VTBL_ENTRY)&(_ZTI11S1179C12_nt[0]),
  (VTBL_ENTRY)&_ZN10S1179C6_nt2v1Ev,
};
extern void _ZN10S1179C6_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV11S1179C13_nt__11S1179C12_nt10S1179C9_nt__7S1179C1[] = {
  ABISELECT(65,37),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI11S1179C12_nt[0]),
  (VTBL_ENTRY)&_ZN10S1179C6_nt2v1Ev,
};
static  VTBL_ENTRY _tg__ZTV10S1179C7_nt10S1179C9_nt__A1__7S1179C1[] = {
  ABISELECT(-64,-32),
  0,
  (VTBL_ENTRY)&(_ZTI10S1179C7_nt[0]),
};
extern void ABISELECT(_ZTv0_n24_N10S1179C9_ntD1Ev,_ZTv0_n12_N10S1179C9_ntD1Ev)();
extern void ABISELECT(_ZThn80_N10S1179C9_ntD1Ev,_ZThn44_N10S1179C9_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N10S1179C9_ntD0Ev,_ZTv0_n12_N10S1179C9_ntD0Ev)();
extern void ABISELECT(_ZThn80_N10S1179C9_ntD0Ev,_ZThn44_N10S1179C9_ntD0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV11S1179C10_nt__10S1179C9_nt__7S1179C1[] = {
  ABISELECT(-80,-44),
  ABISELECT(-80,-44),
  (VTBL_ENTRY)&(_ZTI10S1179C9_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N10S1179C9_ntD1Ev,_ZTv0_n12_N10S1179C9_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N10S1179C9_ntD0Ev,_ZTv0_n12_N10S1179C9_ntD0Ev),
};
extern void _ZN10S1179C6_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV11S1179C12_nt__10S1179C9_nt__7S1179C1[] = {
  ABISELECT(73,41),
  ABISELECT(-40,-20),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI10S1179C9_nt[0]),
  (VTBL_ENTRY)&_ZN10S1179C6_nt2v1Ev,
};
extern void _ZN10S1179C6_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV10S1179C6_nt10S1179C5_nt__A2__10S1179C9_nt__7S1179C1[] = {
  0,
  ABISELECT(24,12),
  (VTBL_ENTRY)&(_ZTI10S1179C9_nt[0]),
  (VTBL_ENTRY)&_ZN10S1179C6_nt2v1Ev,
};
extern void _ZN10S1179C6_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV11S1179C13_nt11S1179C12_nt__10S1179C9_nt__7S1179C1[] = {
  ABISELECT(65,37),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI10S1179C9_nt[0]),
  (VTBL_ENTRY)&_ZN10S1179C6_nt2v1Ev,
};
static  VTBL_ENTRY _tg__ZTV10S1179C7_nt__10S1179C9_nt__7S1179C1[] = {
  ABISELECT(-64,-32),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI10S1179C9_nt[0]),
};
extern void _ZN10S1179C6_nt2v1Ev();
extern void _ZN8S1179C14D1Ev();
extern void _ZN8S1179C14D0Ev();
static  VTBL_ENTRY _tg__ZTV8S1179C14__7S1179C1[] = {
  ABISELECT(56,32),
  ABISELECT(-80,-40),
  ABISELECT(40,24),
  ABISELECT(-80,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S1179C14[0]),
  (VTBL_ENTRY)&_ZN10S1179C6_nt2v1Ev,
  (VTBL_ENTRY)&_ZN8S1179C14D1Ev,
  (VTBL_ENTRY)&_ZN8S1179C14D0Ev,
};
extern void _ZN10S1179C6_nt2v1Ev();
extern void _ZN11S1179C16_ntD1Ev();
extern void _ZN11S1179C16_ntD0Ev();
static  VTBL_ENTRY _tg__ZTV11S1179C16_nt8S1179C14__7S1179C1[] = {
  ABISELECT(-80,-40),
  ABISELECT(40,24),
  ABISELECT(-80,-40),
  0,
  (VTBL_ENTRY)&(_ZTI11S1179C16_nt[0]),
  (VTBL_ENTRY)&_ZN10S1179C6_nt2v1Ev,
  (VTBL_ENTRY)&_ZN11S1179C16_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S1179C16_ntD0Ev,
};
extern void _ZN10S1179C6_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV10S1179C3_nt__11S1179C16_nt8S1179C14__7S1179C1[] = {
  ABISELECT(-120,-64),
  ABISELECT(-120,-64),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI11S1179C16_nt[0]),
  (VTBL_ENTRY)&_ZN10S1179C6_nt2v1Ev,
};
extern void _ZN10S1179C6_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV10S1179C6_nt10S1179C5_nt__11S1179C16_nt8S1179C14__7S1179C1[] = {
  ABISELECT(80,40),
  (VTBL_ENTRY)&(_ZTI11S1179C16_nt[0]),
  (VTBL_ENTRY)&_ZN10S1179C6_nt2v1Ev,
};
extern void _ZN10S1179C6_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV10S1179C3_nt__8S1179C14__7S1179C1[] = {
  ABISELECT(-120,-64),
  ABISELECT(-120,-64),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI8S1179C14[0]),
  (VTBL_ENTRY)&_ZN10S1179C6_nt2v1Ev,
};
extern void _ZN10S1179C6_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV10S1179C6_nt10S1179C5_nt__8S1179C14__7S1179C1[] = {
  ABISELECT(80,40),
  (VTBL_ENTRY)&(_ZTI8S1179C14[0]),
  (VTBL_ENTRY)&_ZN10S1179C6_nt2v1Ev,
};
extern void _ZN10S1179C6_nt2v1Ev();
extern void ABISELECT(_ZTv0_n48_N8S1179C14D1Ev,_ZTv0_n24_N8S1179C14D1Ev)();
extern void ABISELECT(_ZThn56_N8S1179C14D1Ev,_ZThn32_N8S1179C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S1179C14D0Ev,_ZTv0_n24_N8S1179C14D0Ev)();
extern void ABISELECT(_ZThn56_N8S1179C14D0Ev,_ZThn32_N8S1179C14D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV11S1179C17_nt__8S1179C14__7S1179C1[] = {
  ABISELECT(-56,-32),
  ABISELECT(-136,-72),
  ABISELECT(-16,-8),
  ABISELECT(-136,-72),
  ABISELECT(-56,-32),
  (VTBL_ENTRY)&(_ZTI8S1179C14[0]),
  (VTBL_ENTRY)&_ZN10S1179C6_nt2v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S1179C14D1Ev,_ZTv0_n24_N8S1179C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S1179C14D0Ev,_ZTv0_n24_N8S1179C14D0Ev),
};
extern void _ZN10S1179C6_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV10S1179C3_nt__A1__7S1179C1[] = {
  ABISELECT(-120,-64),
  ABISELECT(-120,-64),
  0,
  (VTBL_ENTRY)&(_ZTI10S1179C3_nt[0]),
  (VTBL_ENTRY)&_ZN10S1179C6_nt2v1Ev,
};
extern void _ZN10S1179C6_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV10S1179C6_nt10S1179C5_nt__10S1179C3_nt__A1__7S1179C1[] = {
  ABISELECT(120,64),
  (VTBL_ENTRY)&(_ZTI10S1179C3_nt[0]),
  (VTBL_ENTRY)&_ZN10S1179C6_nt2v1Ev,
};
extern void _ZN10S1179C6_nt2v1Ev();
extern void _ZN11S1179C17_ntD1Ev();
extern void _ZN11S1179C17_ntD0Ev();
static  VTBL_ENTRY _tg__ZTV11S1179C17_nt__7S1179C1[] = {
  ABISELECT(-136,-72),
  ABISELECT(-16,-8),
  ABISELECT(-136,-72),
  0,
  (VTBL_ENTRY)&(_ZTI11S1179C17_nt[0]),
  (VTBL_ENTRY)&_ZN10S1179C6_nt2v1Ev,
  (VTBL_ENTRY)&_ZN11S1179C17_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S1179C17_ntD0Ev,
};
extern void _ZN10S1179C6_nt2v1Ev();
extern void _ZN11S1179C16_ntD1Ev();
extern void _ZN11S1179C16_ntD0Ev();
static  VTBL_ENTRY _tg__ZTV11S1179C16_nt11S1179C17_nt__A1__7S1179C1[] = {
  ABISELECT(-136,-72),
  ABISELECT(-16,-8),
  ABISELECT(-136,-72),
  0,
  (VTBL_ENTRY)&(_ZTI11S1179C16_nt[0]),
  (VTBL_ENTRY)&_ZN10S1179C6_nt2v1Ev,
  (VTBL_ENTRY)&_ZN11S1179C16_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S1179C16_ntD0Ev,
};
extern void _ZN10S1179C6_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV10S1179C3_nt__11S1179C16_nt11S1179C17_nt__A1__7S1179C1[] = {
  ABISELECT(-120,-64),
  ABISELECT(-120,-64),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI11S1179C16_nt[0]),
  (VTBL_ENTRY)&_ZN10S1179C6_nt2v1Ev,
};
extern void _ZN10S1179C6_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV10S1179C6_nt10S1179C5_nt__11S1179C16_nt11S1179C17_nt__A1__7S1179C1[] = {
  ABISELECT(136,72),
  (VTBL_ENTRY)&(_ZTI11S1179C16_nt[0]),
  (VTBL_ENTRY)&_ZN10S1179C6_nt2v1Ev,
};
extern void _ZN10S1179C6_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV10S1179C3_nt__11S1179C17_nt__7S1179C1[] = {
  ABISELECT(-120,-64),
  ABISELECT(-120,-64),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI11S1179C17_nt[0]),
  (VTBL_ENTRY)&_ZN10S1179C6_nt2v1Ev,
};
extern void _ZN10S1179C6_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV10S1179C6_nt10S1179C5_nt__11S1179C17_nt__7S1179C1[] = {
  ABISELECT(136,72),
  (VTBL_ENTRY)&(_ZTI11S1179C17_nt[0]),
  (VTBL_ENTRY)&_ZN10S1179C6_nt2v1Ev,
};
static  VTT_ENTRY vtt_S1179C1[] = {
  {&(_ZTV7S1179C1[9]),  9,70},
  {&(_tg__ZTV7S1179C2__7S1179C1[4]),  4,5},
  {&(_tg__ZTV10S1179C3_nt7S1179C2__7S1179C1[4]),  4,5},
  {&(_tg__ZTV10S1179C3_nt7S1179C2__7S1179C1[4]),  4,5},
  {&(_tg__ZTV7S1179C2__7S1179C1[4]),  4,5},
  {&(_tg__ZTV10S1179C7_nt__7S1179C1[3]),  3,3},
  {&(_tg__ZTV10S1179C9_nt__7S1179C1[6]),  6,9},
  {&(_tg__ZTV11S1179C12_nt10S1179C9_nt__7S1179C1[4]),  4,5},
  {&(_tg__ZTV11S1179C13_nt11S1179C12_nt10S1179C9_nt__7S1179C1[3]),  3,4},
  {&(_tg__ZTV10S1179C6_nt10S1179C5_nt__11S1179C12_nt10S1179C9_nt__7S1179C1[3]),  3,4},
  {&(_tg__ZTV11S1179C13_nt__11S1179C12_nt10S1179C9_nt__7S1179C1[3]),  3,4},
  {&(_tg__ZTV10S1179C7_nt10S1179C9_nt__A1__7S1179C1[3]),  3,3},
  {&(_tg__ZTV11S1179C10_nt__10S1179C9_nt__7S1179C1[3]),  3,5},
  {&(_tg__ZTV11S1179C12_nt__10S1179C9_nt__7S1179C1[4]),  4,5},
  {&(_tg__ZTV10S1179C6_nt10S1179C5_nt__A2__10S1179C9_nt__7S1179C1[3]),  3,4},
  {&(_tg__ZTV11S1179C13_nt11S1179C12_nt__10S1179C9_nt__7S1179C1[3]),  3,4},
  {&(_tg__ZTV10S1179C7_nt__10S1179C9_nt__7S1179C1[3]),  3,3},
  {&(_tg__ZTV8S1179C14__7S1179C1[6]),  6,9},
  {&(_tg__ZTV11S1179C16_nt8S1179C14__7S1179C1[5]),  5,8},
  {&(_tg__ZTV10S1179C3_nt__11S1179C16_nt8S1179C14__7S1179C1[4]),  4,5},
  {&(_tg__ZTV10S1179C6_nt10S1179C5_nt__11S1179C16_nt8S1179C14__7S1179C1[2]),  2,3},
  {&(_tg__ZTV10S1179C3_nt__8S1179C14__7S1179C1[4]),  4,5},
  {&(_tg__ZTV10S1179C6_nt10S1179C5_nt__8S1179C14__7S1179C1[2]),  2,3},
  {&(_tg__ZTV11S1179C17_nt__8S1179C14__7S1179C1[6]),  6,9},
  {&(_ZTV7S1179C1[9]),  9,70},
  {&(_ZTV7S1179C1[15]),  15,70},
  {&(_ZTV7S1179C1[21]),  21,70},
  {&(_ZTV7S1179C1[54]),  54,70},
  {&(_ZTV7S1179C1[31]),  31,70},
  {&(_ZTV7S1179C1[35]),  35,70},
  {&(_ZTV7S1179C1[42]),  42,70},
  {&(_ZTV7S1179C1[48]),  48,70},
  {&(_ZTV7S1179C1[60]),  60,70},
  {&(_ZTV7S1179C1[67]),  67,70},
  {&(_tg__ZTV10S1179C3_nt__A1__7S1179C1[4]),  4,5},
  {&(_tg__ZTV10S1179C6_nt10S1179C5_nt__10S1179C3_nt__A1__7S1179C1[2]),  2,3},
  {&(_tg__ZTV11S1179C17_nt__7S1179C1[5]),  5,8},
  {&(_tg__ZTV11S1179C16_nt11S1179C17_nt__A1__7S1179C1[5]),  5,8},
  {&(_tg__ZTV10S1179C3_nt__11S1179C16_nt11S1179C17_nt__A1__7S1179C1[4]),  4,5},
  {&(_tg__ZTV10S1179C6_nt10S1179C5_nt__11S1179C16_nt11S1179C17_nt__A1__7S1179C1[2]),  2,3},
  {&(_tg__ZTV10S1179C3_nt__11S1179C17_nt__7S1179C1[4]),  4,5},
  {&(_tg__ZTV10S1179C6_nt10S1179C5_nt__11S1179C17_nt__7S1179C1[2]),  2,3},
};
extern VTBL_ENTRY _ZTI7S1179C1[];
extern  VTBL_ENTRY _ZTV7S1179C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1179C1[];
static VTBL_ENTRY alt_thunk_names33[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S1179C14D0Ev,_ZTv0_n24_N8S1179C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S1179C14D0Ev,_ZThn32_N8S1179C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S1179C14D1Ev,_ZTv0_n24_N8S1179C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S1179C14D1Ev,_ZThn32_N8S1179C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N10S1179C9_ntD0Ev,_ZTv0_n12_N10S1179C9_ntD0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N10S1179C9_ntD0Ev,_ZThn44_N10S1179C9_ntD0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N10S1179C9_ntD1Ev,_ZTv0_n12_N10S1179C9_ntD1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N10S1179C9_ntD1Ev,_ZThn44_N10S1179C9_ntD1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S1179C1D0Ev,_ZTv0_n24_N7S1179C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn136_N7S1179C1D0Ev,_ZThn72_N7S1179C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S1179C1D1Ev,_ZTv0_n24_N7S1179C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn136_N7S1179C1D1Ev,_ZThn72_N7S1179C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S1179C1D0Ev,_ZTv0_n12_N7S1179C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N7S1179C1D0Ev,_ZThn56_N7S1179C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S1179C1D1Ev,_ZTv0_n12_N7S1179C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N7S1179C1D1Ev,_ZThn56_N7S1179C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S1179C1 = {  "S1179C1", // class name
  bases_S1179C1, 32,
  &(vtc_S1179C1[0]), // expected_vtbl_contents
  &(vtt_S1179C1[0]), // expected_vtt_contents
  ABISELECT(208,108), // object size
  NSPAIRA(_ZTI7S1179C1),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV7S1179C1),70, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S1179C1),42, //virtual table table var
  23, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names33,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4162C3_nt  {
  virtual  ~S4162C3_nt(); // _ZN10S4162C3_ntD1Ev
  virtual void  v1(); // _ZN10S4162C3_nt2v1Ev
  virtual void  v2(); // _ZN10S4162C3_nt2v2Ev
  virtual void  v3(); // _ZN10S4162C3_nt2v3Ev
  virtual void  v4(); // _ZN10S4162C3_nt2v4Ev
  virtual void  v5(); // _ZN10S4162C3_nt2v5Ev
  virtual void  v6(); // _ZN10S4162C3_nt2v6Ev
  virtual void  v7(); // _ZN10S4162C3_nt2v7Ev
  virtual void  v8(); // _ZN10S4162C3_nt2v8Ev
  virtual void  v9(); // _ZN10S4162C3_nt2v9Ev
  virtual void  v10(); // _ZN10S4162C3_nt3v10Ev
  virtual void  v11(); // _ZN10S4162C3_nt3v11Ev
  virtual void  v12(); // _ZN10S4162C3_nt3v12Ev
  virtual void  v13(); // _ZN10S4162C3_nt3v13Ev
  virtual void  v14(); // _ZN10S4162C3_nt3v14Ev
  S4162C3_nt(); // tgen
};
//SIG(-1 S4162C3_nt) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14}


 S4162C3_nt ::~S4162C3_nt(){ note_dtor("S4162C3_nt", this);}
void  S4162C3_nt ::v1(){vfunc_called(this, "_ZN10S4162C3_nt2v1Ev");}
void  S4162C3_nt ::v2(){vfunc_called(this, "_ZN10S4162C3_nt2v2Ev");}
void  S4162C3_nt ::v3(){vfunc_called(this, "_ZN10S4162C3_nt2v3Ev");}
void  S4162C3_nt ::v4(){vfunc_called(this, "_ZN10S4162C3_nt2v4Ev");}
void  S4162C3_nt ::v5(){vfunc_called(this, "_ZN10S4162C3_nt2v5Ev");}
void  S4162C3_nt ::v6(){vfunc_called(this, "_ZN10S4162C3_nt2v6Ev");}
void  S4162C3_nt ::v7(){vfunc_called(this, "_ZN10S4162C3_nt2v7Ev");}
void  S4162C3_nt ::v8(){vfunc_called(this, "_ZN10S4162C3_nt2v8Ev");}
void  S4162C3_nt ::v9(){vfunc_called(this, "_ZN10S4162C3_nt2v9Ev");}
void  S4162C3_nt ::v10(){vfunc_called(this, "_ZN10S4162C3_nt3v10Ev");}
void  S4162C3_nt ::v11(){vfunc_called(this, "_ZN10S4162C3_nt3v11Ev");}
void  S4162C3_nt ::v12(){vfunc_called(this, "_ZN10S4162C3_nt3v12Ev");}
void  S4162C3_nt ::v13(){vfunc_called(this, "_ZN10S4162C3_nt3v13Ev");}
void  S4162C3_nt ::v14(){vfunc_called(this, "_ZN10S4162C3_nt3v14Ev");}
S4162C3_nt ::S4162C3_nt(){ note_ctor("S4162C3_nt", this);} // tgen

//skip512 S4162C3_nt

#else // __cplusplus

extern void _ZN10S4162C3_ntC1Ev();
extern void _ZN10S4162C3_ntD1Ev();
Name_Map name_map_S4162C3_nt[] = {
  NSPAIR(_ZN10S4162C3_ntC1Ev),
  NSPAIR(_ZN10S4162C3_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S4162C3_nt[];
extern void _ZN10S4162C3_ntD1Ev();
extern void _ZN10S4162C3_ntD0Ev();
extern void _ZN10S4162C3_nt2v1Ev();
extern void _ZN10S4162C3_nt2v2Ev();
extern void _ZN10S4162C3_nt2v3Ev();
extern void _ZN10S4162C3_nt2v4Ev();
extern void _ZN10S4162C3_nt2v5Ev();
extern void _ZN10S4162C3_nt2v6Ev();
extern void _ZN10S4162C3_nt2v7Ev();
extern void _ZN10S4162C3_nt2v8Ev();
extern void _ZN10S4162C3_nt2v9Ev();
extern void _ZN10S4162C3_nt3v10Ev();
extern void _ZN10S4162C3_nt3v11Ev();
extern void _ZN10S4162C3_nt3v12Ev();
extern void _ZN10S4162C3_nt3v13Ev();
extern void _ZN10S4162C3_nt3v14Ev();
static  VTBL_ENTRY vtc_S4162C3_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S4162C3_nt[0]),
  (VTBL_ENTRY)&_ZN10S4162C3_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S4162C3_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S4162C3_nt2v1Ev,
  (VTBL_ENTRY)&_ZN10S4162C3_nt2v2Ev,
  (VTBL_ENTRY)&_ZN10S4162C3_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S4162C3_nt2v4Ev,
  (VTBL_ENTRY)&_ZN10S4162C3_nt2v5Ev,
  (VTBL_ENTRY)&_ZN10S4162C3_nt2v6Ev,
  (VTBL_ENTRY)&_ZN10S4162C3_nt2v7Ev,
  (VTBL_ENTRY)&_ZN10S4162C3_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S4162C3_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S4162C3_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S4162C3_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S4162C3_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S4162C3_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S4162C3_nt3v14Ev,
};
extern VTBL_ENTRY _ZTI10S4162C3_nt[];
VTBL_ENTRY *P__ZTI10S4162C3_nt = _ZTI10S4162C3_nt; 
extern  VTBL_ENTRY _ZTV10S4162C3_nt[];
Class_Descriptor cd_S4162C3_nt = {  "S4162C3_nt", // class name
  0,0,//no base classes
  &(vtc_S4162C3_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI10S4162C3_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S4162C3_nt),18, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4162C5_nt  {
  void *s4162c5f0;
  void  mf4162c5(); // _ZN10S4162C5_nt8mf4162c5Ev
};
//SIG(-1 S4162C5_nt) C1{ m Fp}


void  S4162C5_nt ::mf4162c5(){}

//skip512 S4162C5_nt

#else // __cplusplus

Class_Descriptor cd_S4162C5_nt = {  "S4162C5_nt", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  ABISELECT(8,4), // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4162C7_nt  {
  void *s4162c7f0[2];
  void  mf4162c7(); // _ZN10S4162C7_nt8mf4162c7Ev
};
//SIG(-1 S4162C7_nt) C1{ m Fp[2]}


void  S4162C7_nt ::mf4162c7(){}

//skip512 S4162C7_nt

#else // __cplusplus

extern VTBL_ENTRY _ZTI10S4162C7_nt[];
VTBL_ENTRY *P__ZTI10S4162C7_nt = _ZTI10S4162C7_nt; 
Class_Descriptor cd_S4162C7_nt = {  "S4162C7_nt", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI10S4162C7_nt),ABISELECT(16,8), //typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4162C6  : S4162C7_nt {
  void *s4162c6f0[2];
  virtual  ~S4162C6(); // _ZN7S4162C6D1Ev
  S4162C6(); // tgen
};
//SIG(-1 S4162C6) C1{ BC2{ m Fp[2]} vd Fp[2]}


 S4162C6 ::~S4162C6(){ note_dtor("S4162C6", this);}
S4162C6 ::S4162C6(){ note_ctor("S4162C6", this);} // tgen

static void Test_S4162C6()
{
  extern Class_Descriptor cd_S4162C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[6];
    init_test(&cd_S4162C6, buf);
    S4162C6 *dp, &lv = *(dp=new (buf) S4162C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S4162C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4162C6)");
    check_base_class_offset(lv, (S4162C7_nt*), ABISELECT(8,4), "S4162C6");
    check_field_offset(lv, s4162c6f0, ABISELECT(24,12), "S4162C6.s4162c6f0");
    test_class_info(&lv, &cd_S4162C6);
    dp->~S4162C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4162C6(Test_S4162C6, "S4162C6", ABISELECT(40,20));

#else // __cplusplus

extern void _ZN7S4162C6C1Ev();
extern void _ZN7S4162C6D1Ev();
Name_Map name_map_S4162C6[] = {
  NSPAIR(_ZN7S4162C6C1Ev),
  NSPAIR(_ZN7S4162C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4162C7_nt;
extern VTBL_ENTRY _ZTI10S4162C7_nt[];
static Base_Class bases_S4162C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4162C7_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4162C6[];
extern void _ZN7S4162C6D1Ev();
extern void _ZN7S4162C6D0Ev();
static  VTBL_ENTRY vtc_S4162C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4162C6[0]),
  (VTBL_ENTRY)&_ZN7S4162C6D1Ev,
  (VTBL_ENTRY)&_ZN7S4162C6D0Ev,
};
extern VTBL_ENTRY _ZTI7S4162C6[];
extern  VTBL_ENTRY _ZTV7S4162C6[];
Class_Descriptor cd_S4162C6 = {  "S4162C6", // class name
  bases_S4162C6, 1,
  &(vtc_S4162C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,20), // object size
  NSPAIRA(_ZTI7S4162C6),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S4162C6),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4162C2  : S4162C3_nt {
  void *s4162c2f0;
  ::S2214C39_nt s4162c2f1;
  ::S4162C5_nt s4162c2f2;
  int s4162c2f3;
  char s4162c2f4;
  ::S4162C6 s4162c2f5;
  ::S4162C6 s4162c2f6;
  char s4162c2f7[2];
  void *s4162c2f8;
  int s4162c2f9;
  virtual  ~S4162C2(); // _ZN7S4162C2D1Ev
  virtual void  v15(); // _ZN7S4162C23v15Ev
  virtual void  v16(); // _ZN7S4162C23v16Ev
  virtual void  v17(); // _ZN7S4162C23v17Ev
  virtual void  v18(); // _ZN7S4162C23v18Ev
  virtual void  v19(); // _ZN7S4162C23v19Ev
  virtual void  v20(); // _ZN7S4162C23v20Ev
  virtual void  v21(); // _ZN7S4162C23v21Ev
  virtual void  v22(); // _ZN7S4162C23v22Ev
  virtual void  v23(); // _ZN7S4162C23v23Ev
  virtual void  v24(); // _ZN7S4162C23v24Ev
  virtual void  v25(); // _ZN7S4162C23v25Ev
  virtual void  v26(); // _ZN7S4162C23v26Ev
  virtual void  v27(); // _ZN7S4162C23v27Ev
  virtual void  v28(); // _ZN7S4162C23v28Ev
  S4162C2(); // tgen
};
//SIG(-1 S4162C2) C1{ BC2{ vd v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 Fp FC3{ m Fp} FC4{ m Fp} Fi Fc FC5{ BC6{ m Fp[2]} vd Fp[2]} FC5 Fc[2] Fp Fi}


 S4162C2 ::~S4162C2(){ note_dtor("S4162C2", this);}
void  S4162C2 ::v15(){vfunc_called(this, "_ZN7S4162C23v15Ev");}
void  S4162C2 ::v16(){vfunc_called(this, "_ZN7S4162C23v16Ev");}
void  S4162C2 ::v17(){vfunc_called(this, "_ZN7S4162C23v17Ev");}
void  S4162C2 ::v18(){vfunc_called(this, "_ZN7S4162C23v18Ev");}
void  S4162C2 ::v19(){vfunc_called(this, "_ZN7S4162C23v19Ev");}
void  S4162C2 ::v20(){vfunc_called(this, "_ZN7S4162C23v20Ev");}
void  S4162C2 ::v21(){vfunc_called(this, "_ZN7S4162C23v21Ev");}
void  S4162C2 ::v22(){vfunc_called(this, "_ZN7S4162C23v22Ev");}
void  S4162C2 ::v23(){vfunc_called(this, "_ZN7S4162C23v23Ev");}
void  S4162C2 ::v24(){vfunc_called(this, "_ZN7S4162C23v24Ev");}
void  S4162C2 ::v25(){vfunc_called(this, "_ZN7S4162C23v25Ev");}
void  S4162C2 ::v26(){vfunc_called(this, "_ZN7S4162C23v26Ev");}
void  S4162C2 ::v27(){vfunc_called(this, "_ZN7S4162C23v27Ev");}
void  S4162C2 ::v28(){vfunc_called(this, "_ZN7S4162C23v28Ev");}
S4162C2 ::S4162C2(){ note_ctor("S4162C2", this);} // tgen

static void Test_S4162C2()
{
  extern Class_Descriptor cd_S4162C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(19,20)];
    init_test(&cd_S4162C2, buf);
    S4162C2 *dp, &lv = *(dp=new (buf) S4162C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(144,76), "sizeof(S4162C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4162C2)");
    check_base_class_offset(lv, (S4162C3_nt*), 0, "S4162C2");
    check_field_offset(lv, s4162c2f0, ABISELECT(8,4), "S4162C2.s4162c2f0");
    check_field_offset(lv, s4162c2f1, ABISELECT(16,8), "S4162C2.s4162c2f1");
    check_field_offset(lv, s4162c2f2, ABISELECT(24,12), "S4162C2.s4162c2f2");
    check_field_offset(lv, s4162c2f3, ABISELECT(32,16), "S4162C2.s4162c2f3");
    check_field_offset(lv, s4162c2f4, ABISELECT(36,20), "S4162C2.s4162c2f4");
    check_field_offset(lv, s4162c2f5, ABISELECT(40,24), "S4162C2.s4162c2f5");
    check_field_offset(lv, s4162c2f6, ABISELECT(80,44), "S4162C2.s4162c2f6");
    check_field_offset(lv, s4162c2f7, ABISELECT(120,64), "S4162C2.s4162c2f7");
    check_field_offset(lv, s4162c2f8, ABISELECT(128,68), "S4162C2.s4162c2f8");
    check_field_offset(lv, s4162c2f9, ABISELECT(136,72), "S4162C2.s4162c2f9");
    test_class_info(&lv, &cd_S4162C2);
    dp->~S4162C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4162C2(Test_S4162C2, "S4162C2", ABISELECT(144,76));

#else // __cplusplus

extern void _ZN7S4162C2C1Ev();
extern void _ZN7S4162C2D1Ev();
Name_Map name_map_S4162C2[] = {
  NSPAIR(_ZN7S4162C2C1Ev),
  NSPAIR(_ZN7S4162C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4162C3_nt;
extern VTBL_ENTRY _ZTI10S4162C3_nt[];
extern  VTBL_ENTRY _ZTV10S4162C3_nt[];
static Base_Class bases_S4162C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4162C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4162C2[];
extern void _ZN7S4162C2D1Ev();
extern void _ZN7S4162C2D0Ev();
extern void _ZN10S4162C3_nt2v1Ev();
extern void _ZN10S4162C3_nt2v2Ev();
extern void _ZN10S4162C3_nt2v3Ev();
extern void _ZN10S4162C3_nt2v4Ev();
extern void _ZN10S4162C3_nt2v5Ev();
extern void _ZN10S4162C3_nt2v6Ev();
extern void _ZN10S4162C3_nt2v7Ev();
extern void _ZN10S4162C3_nt2v8Ev();
extern void _ZN10S4162C3_nt2v9Ev();
extern void _ZN10S4162C3_nt3v10Ev();
extern void _ZN10S4162C3_nt3v11Ev();
extern void _ZN10S4162C3_nt3v12Ev();
extern void _ZN10S4162C3_nt3v13Ev();
extern void _ZN10S4162C3_nt3v14Ev();
extern void _ZN7S4162C23v15Ev();
extern void _ZN7S4162C23v16Ev();
extern void _ZN7S4162C23v17Ev();
extern void _ZN7S4162C23v18Ev();
extern void _ZN7S4162C23v19Ev();
extern void _ZN7S4162C23v20Ev();
extern void _ZN7S4162C23v21Ev();
extern void _ZN7S4162C23v22Ev();
extern void _ZN7S4162C23v23Ev();
extern void _ZN7S4162C23v24Ev();
extern void _ZN7S4162C23v25Ev();
extern void _ZN7S4162C23v26Ev();
extern void _ZN7S4162C23v27Ev();
extern void _ZN7S4162C23v28Ev();
static  VTBL_ENTRY vtc_S4162C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4162C2[0]),
  (VTBL_ENTRY)&_ZN7S4162C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4162C2D0Ev,
  (VTBL_ENTRY)&_ZN10S4162C3_nt2v1Ev,
  (VTBL_ENTRY)&_ZN10S4162C3_nt2v2Ev,
  (VTBL_ENTRY)&_ZN10S4162C3_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S4162C3_nt2v4Ev,
  (VTBL_ENTRY)&_ZN10S4162C3_nt2v5Ev,
  (VTBL_ENTRY)&_ZN10S4162C3_nt2v6Ev,
  (VTBL_ENTRY)&_ZN10S4162C3_nt2v7Ev,
  (VTBL_ENTRY)&_ZN10S4162C3_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S4162C3_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S4162C3_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S4162C3_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S4162C3_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S4162C3_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S4162C3_nt3v14Ev,
  (VTBL_ENTRY)&_ZN7S4162C23v15Ev,
  (VTBL_ENTRY)&_ZN7S4162C23v16Ev,
  (VTBL_ENTRY)&_ZN7S4162C23v17Ev,
  (VTBL_ENTRY)&_ZN7S4162C23v18Ev,
  (VTBL_ENTRY)&_ZN7S4162C23v19Ev,
  (VTBL_ENTRY)&_ZN7S4162C23v20Ev,
  (VTBL_ENTRY)&_ZN7S4162C23v21Ev,
  (VTBL_ENTRY)&_ZN7S4162C23v22Ev,
  (VTBL_ENTRY)&_ZN7S4162C23v23Ev,
  (VTBL_ENTRY)&_ZN7S4162C23v24Ev,
  (VTBL_ENTRY)&_ZN7S4162C23v25Ev,
  (VTBL_ENTRY)&_ZN7S4162C23v26Ev,
  (VTBL_ENTRY)&_ZN7S4162C23v27Ev,
  (VTBL_ENTRY)&_ZN7S4162C23v28Ev,
};
extern VTBL_ENTRY _ZTI7S4162C2[];
extern  VTBL_ENTRY _ZTV7S4162C2[];
Class_Descriptor cd_S4162C2 = {  "S4162C2", // class name
  bases_S4162C2, 1,
  &(vtc_S4162C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(144,76), // object size
  NSPAIRA(_ZTI7S4162C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4162C2),32, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4162C1  : S4162C2 {
  void *s4162c1f0[4];
  ~S4162C1(); // tgen
  S4162C1(); // tgen
};
//SIG(1 S4162C1) C1{ BC2{ BC3{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14} vd v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 Fp FC4{ m Fp} FC5{ m Fp} Fi Fc FC6{ BC7{ m Fp[2]} vd Fp[2]} FC6 Fc[2] Fp Fi} Fp[4]}


S4162C1 ::~S4162C1(){ note_dtor("S4162C1", this);} // tgen
S4162C1 ::S4162C1(){ note_ctor("S4162C1", this);} // tgen

static void Test_S4162C1()
{
  extern Class_Descriptor cd_S4162C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(23,24)];
    init_test(&cd_S4162C1, buf);
    S4162C1 *dp, &lv = *(dp=new (buf) S4162C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(176,92), "sizeof(S4162C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4162C1)");
    check_base_class_offset(lv, (S4162C3_nt*)(S4162C2*), 0, "S4162C1");
    check_base_class_offset(lv, (S4162C2*), 0, "S4162C1");
    check_field_offset(lv, s4162c1f0, ABISELECT(144,76), "S4162C1.s4162c1f0");
    test_class_info(&lv, &cd_S4162C1);
    dp->~S4162C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4162C1(Test_S4162C1, "S4162C1", ABISELECT(176,92));

#else // __cplusplus

extern void _ZN7S4162C1C1Ev();
extern void _ZN7S4162C1D1Ev();
Name_Map name_map_S4162C1[] = {
  NSPAIR(_ZN7S4162C1C1Ev),
  NSPAIR(_ZN7S4162C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4162C3_nt;
extern VTBL_ENTRY _ZTI10S4162C3_nt[];
extern  VTBL_ENTRY _ZTV10S4162C3_nt[];
extern Class_Descriptor cd_S4162C2;
extern VTBL_ENTRY _ZTI7S4162C2[];
extern  VTBL_ENTRY _ZTV7S4162C2[];
static Base_Class bases_S4162C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4162C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S4162C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4162C1[];
extern void _ZN7S4162C1D1Ev();
extern void _ZN7S4162C1D0Ev();
extern void _ZN10S4162C3_nt2v1Ev();
extern void _ZN10S4162C3_nt2v2Ev();
extern void _ZN10S4162C3_nt2v3Ev();
extern void _ZN10S4162C3_nt2v4Ev();
extern void _ZN10S4162C3_nt2v5Ev();
extern void _ZN10S4162C3_nt2v6Ev();
extern void _ZN10S4162C3_nt2v7Ev();
extern void _ZN10S4162C3_nt2v8Ev();
extern void _ZN10S4162C3_nt2v9Ev();
extern void _ZN10S4162C3_nt3v10Ev();
extern void _ZN10S4162C3_nt3v11Ev();
extern void _ZN10S4162C3_nt3v12Ev();
extern void _ZN10S4162C3_nt3v13Ev();
extern void _ZN10S4162C3_nt3v14Ev();
extern void _ZN7S4162C23v15Ev();
extern void _ZN7S4162C23v16Ev();
extern void _ZN7S4162C23v17Ev();
extern void _ZN7S4162C23v18Ev();
extern void _ZN7S4162C23v19Ev();
extern void _ZN7S4162C23v20Ev();
extern void _ZN7S4162C23v21Ev();
extern void _ZN7S4162C23v22Ev();
extern void _ZN7S4162C23v23Ev();
extern void _ZN7S4162C23v24Ev();
extern void _ZN7S4162C23v25Ev();
extern void _ZN7S4162C23v26Ev();
extern void _ZN7S4162C23v27Ev();
extern void _ZN7S4162C23v28Ev();
static  VTBL_ENTRY vtc_S4162C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4162C1[0]),
  (VTBL_ENTRY)&_ZN7S4162C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4162C1D0Ev,
  (VTBL_ENTRY)&_ZN10S4162C3_nt2v1Ev,
  (VTBL_ENTRY)&_ZN10S4162C3_nt2v2Ev,
  (VTBL_ENTRY)&_ZN10S4162C3_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S4162C3_nt2v4Ev,
  (VTBL_ENTRY)&_ZN10S4162C3_nt2v5Ev,
  (VTBL_ENTRY)&_ZN10S4162C3_nt2v6Ev,
  (VTBL_ENTRY)&_ZN10S4162C3_nt2v7Ev,
  (VTBL_ENTRY)&_ZN10S4162C3_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S4162C3_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S4162C3_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S4162C3_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S4162C3_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S4162C3_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S4162C3_nt3v14Ev,
  (VTBL_ENTRY)&_ZN7S4162C23v15Ev,
  (VTBL_ENTRY)&_ZN7S4162C23v16Ev,
  (VTBL_ENTRY)&_ZN7S4162C23v17Ev,
  (VTBL_ENTRY)&_ZN7S4162C23v18Ev,
  (VTBL_ENTRY)&_ZN7S4162C23v19Ev,
  (VTBL_ENTRY)&_ZN7S4162C23v20Ev,
  (VTBL_ENTRY)&_ZN7S4162C23v21Ev,
  (VTBL_ENTRY)&_ZN7S4162C23v22Ev,
  (VTBL_ENTRY)&_ZN7S4162C23v23Ev,
  (VTBL_ENTRY)&_ZN7S4162C23v24Ev,
  (VTBL_ENTRY)&_ZN7S4162C23v25Ev,
  (VTBL_ENTRY)&_ZN7S4162C23v26Ev,
  (VTBL_ENTRY)&_ZN7S4162C23v27Ev,
  (VTBL_ENTRY)&_ZN7S4162C23v28Ev,
};
extern VTBL_ENTRY _ZTI7S4162C1[];
extern  VTBL_ENTRY _ZTV7S4162C1[];
Class_Descriptor cd_S4162C1 = {  "S4162C1", // class name
  bases_S4162C1, 2,
  &(vtc_S4162C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(176,92), // object size
  NSPAIRA(_ZTI7S4162C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4162C1),32, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7846C5  {
  short s7846c5f0:13;
  void *s7846c5f1;
  long double s7846c5f2[8];
  virtual void  v5(); // _ZN7S7846C52v5Ev
  virtual void  v6(); // _ZN7S7846C52v6Ev
  virtual void  v7(); // _ZN7S7846C52v7Ev
  virtual void  v8(); // _ZN7S7846C52v8Ev
  ~S7846C5(); // tgen
  S7846C5(); // tgen
};
//SIG(-1 S7846C5) C1{ v1 v2 v3 v4 Fs:13 Fp FD[8]}


void  S7846C5 ::v5(){vfunc_called(this, "_ZN7S7846C52v5Ev");}
void  S7846C5 ::v6(){vfunc_called(this, "_ZN7S7846C52v6Ev");}
void  S7846C5 ::v7(){vfunc_called(this, "_ZN7S7846C52v7Ev");}
void  S7846C5 ::v8(){vfunc_called(this, "_ZN7S7846C52v8Ev");}
S7846C5 ::~S7846C5(){ note_dtor("S7846C5", this);} // tgen
S7846C5 ::S7846C5(){ note_ctor("S7846C5", this);} // tgen

static void Test_S7846C5()
{
  extern Class_Descriptor cd_S7846C5;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(11,28)];
    init_test(&cd_S7846C5, buf);
    S7846C5 *dp, &lv = *(dp=new (buf) S7846C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(160,108), "sizeof(S7846C5)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7846C5)");
    set_bf_and_test(lv, s7846c5f0, ABISELECT(8,4), 0, 13, 1, "S7846C5");
    set_bf_and_test(lv, s7846c5f0, ABISELECT(8,4), 0, 13, hide_sll(1LL<<12), "S7846C5");
    check_field_offset(lv, s7846c5f1, ABISELECT(16,8), "S7846C5.s7846c5f1");
    check_field_offset(lv, s7846c5f2, ABISELECT(32,12), "S7846C5.s7846c5f2");
    test_class_info(&lv, &cd_S7846C5);
    dp->~S7846C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7846C5(Test_S7846C5, "S7846C5", ABISELECT(160,108));

#else // __cplusplus

extern void _ZN7S7846C5C1Ev();
extern void _ZN7S7846C5D1Ev();
Name_Map name_map_S7846C5[] = {
  NSPAIR(_ZN7S7846C5C1Ev),
  NSPAIR(_ZN7S7846C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S7846C5[];
extern void _ZN7S7846C52v5Ev();
extern void _ZN7S7846C52v6Ev();
extern void _ZN7S7846C52v7Ev();
extern void _ZN7S7846C52v8Ev();
static  VTBL_ENTRY vtc_S7846C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7846C5[0]),
  (VTBL_ENTRY)&_ZN7S7846C52v5Ev,
  (VTBL_ENTRY)&_ZN7S7846C52v6Ev,
  (VTBL_ENTRY)&_ZN7S7846C52v7Ev,
  (VTBL_ENTRY)&_ZN7S7846C52v8Ev,
};
extern VTBL_ENTRY _ZTI7S7846C5[];
extern  VTBL_ENTRY _ZTV7S7846C5[];
Class_Descriptor cd_S7846C5 = {  "S7846C5", // class name
  0,0,//no base classes
  &(vtc_S7846C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(160,108), // object size
  NSPAIRA(_ZTI7S7846C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S7846C5),6, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7846C6  : S7846C5 {
  void *s7846c6f0[6];
  virtual void  v9(); // _ZN7S7846C62v9Ev
  virtual void  v10(); // _ZN7S7846C63v10Ev
  virtual void  v11(); // _ZN7S7846C63v11Ev
  ~S7846C6(); // tgen
  S7846C6(); // tgen
};
//SIG(-1 S7846C6) C1{ BC2{ v4 v5 v6 v7 Fs:13 Fp FD[8]} v1 v2 v3 Fp[6]}


void  S7846C6 ::v9(){vfunc_called(this, "_ZN7S7846C62v9Ev");}
void  S7846C6 ::v10(){vfunc_called(this, "_ZN7S7846C63v10Ev");}
void  S7846C6 ::v11(){vfunc_called(this, "_ZN7S7846C63v11Ev");}
S7846C6 ::~S7846C6(){ note_dtor("S7846C6", this);} // tgen
S7846C6 ::S7846C6(){ note_ctor("S7846C6", this);} // tgen

static void Test_S7846C6()
{
  extern Class_Descriptor cd_S7846C6;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(14,34)];
    init_test(&cd_S7846C6, buf);
    S7846C6 *dp, &lv = *(dp=new (buf) S7846C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(208,132), "sizeof(S7846C6)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7846C6)");
    check_base_class_offset(lv, (S7846C5*), 0, "S7846C6");
    check_field_offset(lv, s7846c6f0, ABISELECT(160,108), "S7846C6.s7846c6f0");
    test_class_info(&lv, &cd_S7846C6);
    dp->~S7846C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7846C6(Test_S7846C6, "S7846C6", ABISELECT(208,132));

#else // __cplusplus

extern void _ZN7S7846C6C1Ev();
extern void _ZN7S7846C6D1Ev();
Name_Map name_map_S7846C6[] = {
  NSPAIR(_ZN7S7846C6C1Ev),
  NSPAIR(_ZN7S7846C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7846C5;
extern VTBL_ENTRY _ZTI7S7846C5[];
extern  VTBL_ENTRY _ZTV7S7846C5[];
static Base_Class bases_S7846C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7846C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7846C6[];
extern void _ZN7S7846C52v5Ev();
extern void _ZN7S7846C52v6Ev();
extern void _ZN7S7846C52v7Ev();
extern void _ZN7S7846C52v8Ev();
extern void _ZN7S7846C62v9Ev();
extern void _ZN7S7846C63v10Ev();
extern void _ZN7S7846C63v11Ev();
static  VTBL_ENTRY vtc_S7846C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7846C6[0]),
  (VTBL_ENTRY)&_ZN7S7846C52v5Ev,
  (VTBL_ENTRY)&_ZN7S7846C52v6Ev,
  (VTBL_ENTRY)&_ZN7S7846C52v7Ev,
  (VTBL_ENTRY)&_ZN7S7846C52v8Ev,
  (VTBL_ENTRY)&_ZN7S7846C62v9Ev,
  (VTBL_ENTRY)&_ZN7S7846C63v10Ev,
  (VTBL_ENTRY)&_ZN7S7846C63v11Ev,
};
extern VTBL_ENTRY _ZTI7S7846C6[];
extern  VTBL_ENTRY _ZTV7S7846C6[];
Class_Descriptor cd_S7846C6 = {  "S7846C6", // class name
  bases_S7846C6, 1,
  &(vtc_S7846C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(208,132), // object size
  NSPAIRA(_ZTI7S7846C6),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S7846C6),9, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7846C4  : virtual S7846C5 , virtual S7846C6 {
  void *s7846c4f0[2];
  virtual void  v12(); // _ZN7S7846C43v12Ev
  virtual void  v13(); // _ZN7S7846C43v13Ev
  virtual void  v14(); // _ZN7S7846C43v14Ev
  virtual void  v15(); // _ZN7S7846C43v15Ev
  virtual void  v16(); // _ZN7S7846C43v16Ev
  ~S7846C4(); // tgen
  S7846C4(); // tgen
};
//SIG(-1 S7846C4) C1{ VBC2{ v6 v7 v8 v9 Fs:13 Fp FD[8]} VBC3{ BC2 v10 v11 v12 Fp[6]} v1 v2 v3 v4 v5 Fp[2]}


void  S7846C4 ::v12(){vfunc_called(this, "_ZN7S7846C43v12Ev");}
void  S7846C4 ::v13(){vfunc_called(this, "_ZN7S7846C43v13Ev");}
void  S7846C4 ::v14(){vfunc_called(this, "_ZN7S7846C43v14Ev");}
void  S7846C4 ::v15(){vfunc_called(this, "_ZN7S7846C43v15Ev");}
void  S7846C4 ::v16(){vfunc_called(this, "_ZN7S7846C43v16Ev");}
S7846C4 ::~S7846C4(){ note_dtor("S7846C4", this);} // tgen
S7846C4 ::S7846C4(){ note_ctor("S7846C4", this);} // tgen

static void Test_S7846C4()
{
  extern Class_Descriptor cd_S7846C4;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(26,64)];
    init_test(&cd_S7846C4, buf);
    S7846C4 *dp, &lv = *(dp=new (buf) S7846C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(400,252), "sizeof(S7846C4)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7846C4)");
    /*is_ambiguous_... S7846C4::S7846C5 */ AMB_check_base_class_offset(lv, (S7846C5*), ABISELECT(32,12), "S7846C4");
    check_base_class_offset(lv, (S7846C5*)(S7846C6*), ABISELECT(192,120), "S7846C4");
    check_base_class_offset(lv, (S7846C6*), ABISELECT(192,120), "S7846C4");
    check_field_offset(lv, s7846c4f0, ABISELECT(8,4), "S7846C4.s7846c4f0");
    test_class_info(&lv, &cd_S7846C4);
    dp->~S7846C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7846C4(Test_S7846C4, "S7846C4", ABISELECT(400,252));

#else // __cplusplus

extern void _ZN7S7846C4C1Ev();
extern void _ZN7S7846C4D1Ev();
Name_Map name_map_S7846C4[] = {
  NSPAIR(_ZN7S7846C4C1Ev),
  NSPAIR(_ZN7S7846C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7846C5;
extern VTBL_ENTRY _ZTI7S7846C5[];
extern  VTBL_ENTRY _ZTV7S7846C5[];
extern Class_Descriptor cd_S7846C5;
extern VTBL_ENTRY _ZTI7S7846C5[];
extern  VTBL_ENTRY _ZTV7S7846C5[];
extern Class_Descriptor cd_S7846C6;
extern VTBL_ENTRY _ZTI7S7846C6[];
extern  VTBL_ENTRY _ZTV7S7846C6[];
static Base_Class bases_S7846C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7846C5,    ABISELECT(32,12), //bcp->offset
    9, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7846C5,    ABISELECT(192,120), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S7846C6,    ABISELECT(192,120), //bcp->offset
    19, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7846C4[];
extern void _ZN7S7846C43v12Ev();
extern void _ZN7S7846C43v13Ev();
extern void _ZN7S7846C43v14Ev();
extern void _ZN7S7846C43v15Ev();
extern void _ZN7S7846C43v16Ev();
extern void _ZN7S7846C52v5Ev();
extern void _ZN7S7846C52v6Ev();
extern void _ZN7S7846C52v7Ev();
extern void _ZN7S7846C52v8Ev();
extern void _ZN7S7846C52v5Ev();
extern void _ZN7S7846C52v6Ev();
extern void _ZN7S7846C52v7Ev();
extern void _ZN7S7846C52v8Ev();
extern void _ZN7S7846C62v9Ev();
extern void _ZN7S7846C63v10Ev();
extern void _ZN7S7846C63v11Ev();
static  VTBL_ENTRY vtc_S7846C4[] = {
  ABISELECT(192,120),
  ABISELECT(32,12),
  0,
  (VTBL_ENTRY)&(_ZTI7S7846C4[0]),
  (VTBL_ENTRY)&_ZN7S7846C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7846C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7846C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7846C43v15Ev,
  (VTBL_ENTRY)&_ZN7S7846C43v16Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-32,-12),
  (VTBL_ENTRY)&(_ZTI7S7846C4[0]),
  (VTBL_ENTRY)&_ZN7S7846C52v5Ev,
  (VTBL_ENTRY)&_ZN7S7846C52v6Ev,
  (VTBL_ENTRY)&_ZN7S7846C52v7Ev,
  (VTBL_ENTRY)&_ZN7S7846C52v8Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-192,-120),
  (VTBL_ENTRY)&(_ZTI7S7846C4[0]),
  (VTBL_ENTRY)&_ZN7S7846C52v5Ev,
  (VTBL_ENTRY)&_ZN7S7846C52v6Ev,
  (VTBL_ENTRY)&_ZN7S7846C52v7Ev,
  (VTBL_ENTRY)&_ZN7S7846C52v8Ev,
  (VTBL_ENTRY)&_ZN7S7846C62v9Ev,
  (VTBL_ENTRY)&_ZN7S7846C63v10Ev,
  (VTBL_ENTRY)&_ZN7S7846C63v11Ev,
};
extern VTBL_ENTRY _ZTV7S7846C4[];
static  VTT_ENTRY vtt_S7846C4[] = {
  {&(_ZTV7S7846C4[4]),  4,35},
  {&(_ZTV7S7846C4[15]),  15,35},
  {&(_ZTV7S7846C4[28]),  28,35},
};
extern VTBL_ENTRY _ZTI7S7846C4[];
extern  VTBL_ENTRY _ZTV7S7846C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7846C4[];
Class_Descriptor cd_S7846C4 = {  "S7846C4", // class name
  bases_S7846C4, 3,
  &(vtc_S7846C4[0]), // expected_vtbl_contents
  &(vtt_S7846C4[0]), // expected_vtt_contents
  ABISELECT(400,252), // object size
  NSPAIRA(_ZTI7S7846C4),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7846C4),35, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7846C4),3, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7846C7  : virtual S7846C5 , S7846C6 {
  void *s7846c7f0;
  virtual void  v17(); // _ZN7S7846C73v17Ev
  virtual void  v18(); // _ZN7S7846C73v18Ev
  virtual void  v19(); // _ZN7S7846C73v19Ev
  virtual void  v20(); // _ZN7S7846C73v20Ev
  ~S7846C7(); // tgen
  S7846C7(); // tgen
};
//SIG(-1 S7846C7) C1{ VBC2{ v5 v6 v7 v8 Fs:13 Fp FD[8]} BC3{ BC2 v9 v10 v11 Fp[6]} v1 v2 v3 v4 Fp}


void  S7846C7 ::v17(){vfunc_called(this, "_ZN7S7846C73v17Ev");}
void  S7846C7 ::v18(){vfunc_called(this, "_ZN7S7846C73v18Ev");}
void  S7846C7 ::v19(){vfunc_called(this, "_ZN7S7846C73v19Ev");}
void  S7846C7 ::v20(){vfunc_called(this, "_ZN7S7846C73v20Ev");}
S7846C7 ::~S7846C7(){ note_dtor("S7846C7", this);} // tgen
S7846C7 ::S7846C7(){ note_ctor("S7846C7", this);} // tgen

static void Test_S7846C7()
{
  extern Class_Descriptor cd_S7846C7;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(25,62)];
    init_test(&cd_S7846C7, buf);
    S7846C7 *dp, &lv = *(dp=new (buf) S7846C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(384,244), "sizeof(S7846C7)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7846C7)");
    /*is_ambiguous_... S7846C7::S7846C5 */ AMB_check_base_class_offset(lv, (S7846C5*), ABISELECT(224,136), "S7846C7");
    check_base_class_offset(lv, (S7846C5*)(S7846C6*), 0, "S7846C7");
    check_base_class_offset(lv, (S7846C6*), 0, "S7846C7");
    check_field_offset(lv, s7846c7f0, ABISELECT(208,132), "S7846C7.s7846c7f0");
    test_class_info(&lv, &cd_S7846C7);
    dp->~S7846C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7846C7(Test_S7846C7, "S7846C7", ABISELECT(384,244));

#else // __cplusplus

extern void _ZN7S7846C7C1Ev();
extern void _ZN7S7846C7D1Ev();
Name_Map name_map_S7846C7[] = {
  NSPAIR(_ZN7S7846C7C1Ev),
  NSPAIR(_ZN7S7846C7D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7846C5;
extern VTBL_ENTRY _ZTI7S7846C5[];
extern  VTBL_ENTRY _ZTV7S7846C5[];
extern Class_Descriptor cd_S7846C5;
extern VTBL_ENTRY _ZTI7S7846C5[];
extern  VTBL_ENTRY _ZTV7S7846C5[];
extern Class_Descriptor cd_S7846C6;
extern VTBL_ENTRY _ZTI7S7846C6[];
extern  VTBL_ENTRY _ZTV7S7846C6[];
static Base_Class bases_S7846C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7846C5,    ABISELECT(224,136), //bcp->offset
    14, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7846C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S7846C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7846C7[];
extern void _ZN7S7846C52v5Ev();
extern void _ZN7S7846C52v6Ev();
extern void _ZN7S7846C52v7Ev();
extern void _ZN7S7846C52v8Ev();
extern void _ZN7S7846C62v9Ev();
extern void _ZN7S7846C63v10Ev();
extern void _ZN7S7846C63v11Ev();
extern void _ZN7S7846C73v17Ev();
extern void _ZN7S7846C73v18Ev();
extern void _ZN7S7846C73v19Ev();
extern void _ZN7S7846C73v20Ev();
extern void _ZN7S7846C52v5Ev();
extern void _ZN7S7846C52v6Ev();
extern void _ZN7S7846C52v7Ev();
extern void _ZN7S7846C52v8Ev();
static  VTBL_ENTRY vtc_S7846C7[] = {
  ABISELECT(224,136),
  0,
  (VTBL_ENTRY)&(_ZTI7S7846C7[0]),
  (VTBL_ENTRY)&_ZN7S7846C52v5Ev,
  (VTBL_ENTRY)&_ZN7S7846C52v6Ev,
  (VTBL_ENTRY)&_ZN7S7846C52v7Ev,
  (VTBL_ENTRY)&_ZN7S7846C52v8Ev,
  (VTBL_ENTRY)&_ZN7S7846C62v9Ev,
  (VTBL_ENTRY)&_ZN7S7846C63v10Ev,
  (VTBL_ENTRY)&_ZN7S7846C63v11Ev,
  (VTBL_ENTRY)&_ZN7S7846C73v17Ev,
  (VTBL_ENTRY)&_ZN7S7846C73v18Ev,
  (VTBL_ENTRY)&_ZN7S7846C73v19Ev,
  (VTBL_ENTRY)&_ZN7S7846C73v20Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-224,-136),
  (VTBL_ENTRY)&(_ZTI7S7846C7[0]),
  (VTBL_ENTRY)&_ZN7S7846C52v5Ev,
  (VTBL_ENTRY)&_ZN7S7846C52v6Ev,
  (VTBL_ENTRY)&_ZN7S7846C52v7Ev,
  (VTBL_ENTRY)&_ZN7S7846C52v8Ev,
};
extern VTBL_ENTRY _ZTV7S7846C7[];
static  VTT_ENTRY vtt_S7846C7[] = {
  {&(_ZTV7S7846C7[3]),  3,24},
  {&(_ZTV7S7846C7[20]),  20,24},
};
extern VTBL_ENTRY _ZTI7S7846C7[];
extern  VTBL_ENTRY _ZTV7S7846C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7846C7[];
Class_Descriptor cd_S7846C7 = {  "S7846C7", // class name
  bases_S7846C7, 3,
  &(vtc_S7846C7[0]), // expected_vtbl_contents
  &(vtt_S7846C7[0]), // expected_vtt_contents
  ABISELECT(384,244), // object size
  NSPAIRA(_ZTI7S7846C7),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7846C7),24, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7846C7),2, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7846C3  : virtual S7846C4 , S7846C7 {
  __tsi64 s7846c3f0[5];
  ::S20956C14_nt s7846c3f1;
  long double s7846c3f2;
  virtual void  v21(); // _ZN7S7846C33v21Ev
  virtual void  v22(); // _ZN7S7846C33v22Ev
  virtual void  v23(); // _ZN7S7846C33v23Ev
  virtual void  v24(); // _ZN7S7846C33v24Ev
  ~S7846C3(); // tgen
  S7846C3(); // tgen
};
//SIG(-1 S7846C3) C1{ VBC2{ VBC3{ v5 v6 v7 v8 Fs:13 Fp FD[8]} VBC4{ BC3 v9 v10 v11 Fp[6]} v12 v13 v14 v15 v16 Fp[2]} BC5{ VBC3 BC4 v17 v18 v19 v20 Fp} v1 v2 v3 v4 FL[5] FC6{} FD}


void  S7846C3 ::v21(){vfunc_called(this, "_ZN7S7846C33v21Ev");}
void  S7846C3 ::v22(){vfunc_called(this, "_ZN7S7846C33v22Ev");}
void  S7846C3 ::v23(){vfunc_called(this, "_ZN7S7846C33v23Ev");}
void  S7846C3 ::v24(){vfunc_called(this, "_ZN7S7846C33v24Ev");}
S7846C3 ::~S7846C3(){ note_dtor("S7846C3", this);} // tgen
S7846C3 ::S7846C3(){ note_ctor("S7846C3", this);} // tgen

static void Test_S7846C3()
{
  extern Class_Descriptor cd_S7846C3;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(44,112)];
    init_test(&cd_S7846C3, buf);
    S7846C3 *dp, &lv = *(dp=new (buf) S7846C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(688,444), "sizeof(S7846C3)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7846C3)");
    /*is_ambiguous_... S7846C4::S7846C5 */ AMB_check_base_class_offset(lv, (S7846C5*)(S7846C4*), ABISELECT(320,204), "S7846C3");
    /*is_ambiguous_... S7846C7::S7846C5 */ AMB_check_base_class_offset(lv, (S7846C5*)(S7846C7*), ABISELECT(320,204), "S7846C3");
    /*is_ambiguous_... S7846C3::S7846C6 */ AMB_check_base_class_offset(lv, (S7846C5*)(S7846C6*), ABISELECT(480,312), "S7846C3");
    check_base_class_offset(lv, (S7846C6*)(S7846C4*), ABISELECT(480,312), "S7846C3");
    check_base_class_offset(lv, (S7846C4*), ABISELECT(288,192), "S7846C3");
    check_base_class_offset(lv, (S7846C5*)(S7846C6*)(S7846C7*), 0, "S7846C3");
    check_base_class_offset(lv, (S7846C6*)(S7846C7*), 0, "S7846C3");
    check_base_class_offset(lv, (S7846C7*), 0, "S7846C3");
    check_field_offset(lv, s7846c3f0, ABISELECT(216,136), "S7846C3.s7846c3f0");
    check_field_offset(lv, s7846c3f1, ABISELECT(256,176), "S7846C3.s7846c3f1");
    check_field_offset(lv, s7846c3f2, ABISELECT(272,180), "S7846C3.s7846c3f2");
    test_class_info(&lv, &cd_S7846C3);
    dp->~S7846C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7846C3(Test_S7846C3, "S7846C3", ABISELECT(688,444));

#else // __cplusplus

extern void _ZN7S7846C3C1Ev();
extern void _ZN7S7846C3D1Ev();
Name_Map name_map_S7846C3[] = {
  NSPAIR(_ZN7S7846C3C1Ev),
  NSPAIR(_ZN7S7846C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7846C5;
extern VTBL_ENTRY _ZTI7S7846C5[];
extern  VTBL_ENTRY _ZTV7S7846C5[];
extern Class_Descriptor cd_S7846C5;
extern VTBL_ENTRY _ZTI7S7846C5[];
extern  VTBL_ENTRY _ZTV7S7846C5[];
extern Class_Descriptor cd_S7846C6;
extern VTBL_ENTRY _ZTI7S7846C6[];
extern  VTBL_ENTRY _ZTV7S7846C6[];
extern Class_Descriptor cd_S7846C4;
extern VTBL_ENTRY _ZTI7S7846C4[];
extern  VTBL_ENTRY _ZTV7S7846C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7846C4[];
extern Class_Descriptor cd_S7846C5;
extern VTBL_ENTRY _ZTI7S7846C5[];
extern  VTBL_ENTRY _ZTV7S7846C5[];
extern Class_Descriptor cd_S7846C6;
extern VTBL_ENTRY _ZTI7S7846C6[];
extern  VTBL_ENTRY _ZTV7S7846C6[];
extern Class_Descriptor cd_S7846C7;
extern VTBL_ENTRY _ZTI7S7846C7[];
extern  VTBL_ENTRY _ZTV7S7846C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7846C7[];
static Base_Class bases_S7846C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7846C5,    ABISELECT(320,204), //bcp->offset
    34, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S7846C5,    ABISELECT(480,312), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S7846C6,    ABISELECT(480,312), //bcp->offset
    44, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S7846C4,    ABISELECT(288,192), //bcp->offset
    20, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7846C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S7846C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S7846C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7846C3[];
extern void _ZN7S7846C52v5Ev();
extern void _ZN7S7846C52v6Ev();
extern void _ZN7S7846C52v7Ev();
extern void _ZN7S7846C52v8Ev();
extern void _ZN7S7846C62v9Ev();
extern void _ZN7S7846C63v10Ev();
extern void _ZN7S7846C63v11Ev();
extern void _ZN7S7846C73v17Ev();
extern void _ZN7S7846C73v18Ev();
extern void _ZN7S7846C73v19Ev();
extern void _ZN7S7846C73v20Ev();
extern void _ZN7S7846C33v21Ev();
extern void _ZN7S7846C33v22Ev();
extern void _ZN7S7846C33v23Ev();
extern void _ZN7S7846C33v24Ev();
extern void _ZN7S7846C43v12Ev();
extern void _ZN7S7846C43v13Ev();
extern void _ZN7S7846C43v14Ev();
extern void _ZN7S7846C43v15Ev();
extern void _ZN7S7846C43v16Ev();
extern void _ZN7S7846C52v5Ev();
extern void _ZN7S7846C52v6Ev();
extern void _ZN7S7846C52v7Ev();
extern void _ZN7S7846C52v8Ev();
extern void _ZN7S7846C52v5Ev();
extern void _ZN7S7846C52v6Ev();
extern void _ZN7S7846C52v7Ev();
extern void _ZN7S7846C52v8Ev();
extern void _ZN7S7846C62v9Ev();
extern void _ZN7S7846C63v10Ev();
extern void _ZN7S7846C63v11Ev();
static  VTBL_ENTRY vtc_S7846C3[] = {
  ABISELECT(480,312),
  ABISELECT(288,192),
  ABISELECT(320,204),
  0,
  (VTBL_ENTRY)&(_ZTI7S7846C3[0]),
  (VTBL_ENTRY)&_ZN7S7846C52v5Ev,
  (VTBL_ENTRY)&_ZN7S7846C52v6Ev,
  (VTBL_ENTRY)&_ZN7S7846C52v7Ev,
  (VTBL_ENTRY)&_ZN7S7846C52v8Ev,
  (VTBL_ENTRY)&_ZN7S7846C62v9Ev,
  (VTBL_ENTRY)&_ZN7S7846C63v10Ev,
  (VTBL_ENTRY)&_ZN7S7846C63v11Ev,
  (VTBL_ENTRY)&_ZN7S7846C73v17Ev,
  (VTBL_ENTRY)&_ZN7S7846C73v18Ev,
  (VTBL_ENTRY)&_ZN7S7846C73v19Ev,
  (VTBL_ENTRY)&_ZN7S7846C73v20Ev,
  (VTBL_ENTRY)&_ZN7S7846C33v21Ev,
  (VTBL_ENTRY)&_ZN7S7846C33v22Ev,
  (VTBL_ENTRY)&_ZN7S7846C33v23Ev,
  (VTBL_ENTRY)&_ZN7S7846C33v24Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(192,120),
  ABISELECT(32,12),
  ABISELECT(-288,-192),
  (VTBL_ENTRY)&(_ZTI7S7846C3[0]),
  (VTBL_ENTRY)&_ZN7S7846C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7846C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7846C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7846C43v15Ev,
  (VTBL_ENTRY)&_ZN7S7846C43v16Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-320,-204),
  (VTBL_ENTRY)&(_ZTI7S7846C3[0]),
  (VTBL_ENTRY)&_ZN7S7846C52v5Ev,
  (VTBL_ENTRY)&_ZN7S7846C52v6Ev,
  (VTBL_ENTRY)&_ZN7S7846C52v7Ev,
  (VTBL_ENTRY)&_ZN7S7846C52v8Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-480,-312),
  (VTBL_ENTRY)&(_ZTI7S7846C3[0]),
  (VTBL_ENTRY)&_ZN7S7846C52v5Ev,
  (VTBL_ENTRY)&_ZN7S7846C52v6Ev,
  (VTBL_ENTRY)&_ZN7S7846C52v7Ev,
  (VTBL_ENTRY)&_ZN7S7846C52v8Ev,
  (VTBL_ENTRY)&_ZN7S7846C62v9Ev,
  (VTBL_ENTRY)&_ZN7S7846C63v10Ev,
  (VTBL_ENTRY)&_ZN7S7846C63v11Ev,
};
extern VTBL_ENTRY _ZTV7S7846C3[];
extern void _ZN7S7846C52v5Ev();
extern void _ZN7S7846C52v6Ev();
extern void _ZN7S7846C52v7Ev();
extern void _ZN7S7846C52v8Ev();
extern void _ZN7S7846C62v9Ev();
extern void _ZN7S7846C63v10Ev();
extern void _ZN7S7846C63v11Ev();
extern void _ZN7S7846C73v17Ev();
extern void _ZN7S7846C73v18Ev();
extern void _ZN7S7846C73v19Ev();
extern void _ZN7S7846C73v20Ev();
static  VTBL_ENTRY _tg__ZTV7S7846C7__7S7846C3[] = {
  ABISELECT(320,204),
  0,
  (VTBL_ENTRY)&(_ZTI7S7846C7[0]),
  (VTBL_ENTRY)&_ZN7S7846C52v5Ev,
  (VTBL_ENTRY)&_ZN7S7846C52v6Ev,
  (VTBL_ENTRY)&_ZN7S7846C52v7Ev,
  (VTBL_ENTRY)&_ZN7S7846C52v8Ev,
  (VTBL_ENTRY)&_ZN7S7846C62v9Ev,
  (VTBL_ENTRY)&_ZN7S7846C63v10Ev,
  (VTBL_ENTRY)&_ZN7S7846C63v11Ev,
  (VTBL_ENTRY)&_ZN7S7846C73v17Ev,
  (VTBL_ENTRY)&_ZN7S7846C73v18Ev,
  (VTBL_ENTRY)&_ZN7S7846C73v19Ev,
  (VTBL_ENTRY)&_ZN7S7846C73v20Ev,
};
extern void _ZN7S7846C52v5Ev();
extern void _ZN7S7846C52v6Ev();
extern void _ZN7S7846C52v7Ev();
extern void _ZN7S7846C52v8Ev();
static  VTBL_ENTRY _tg__ZTV7S7846C5__7S7846C7__7S7846C3[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-320,-204),
  (VTBL_ENTRY)&(_ZTI7S7846C7[0]),
  (VTBL_ENTRY)&_ZN7S7846C52v5Ev,
  (VTBL_ENTRY)&_ZN7S7846C52v6Ev,
  (VTBL_ENTRY)&_ZN7S7846C52v7Ev,
  (VTBL_ENTRY)&_ZN7S7846C52v8Ev,
};
extern void _ZN7S7846C43v12Ev();
extern void _ZN7S7846C43v13Ev();
extern void _ZN7S7846C43v14Ev();
extern void _ZN7S7846C43v15Ev();
extern void _ZN7S7846C43v16Ev();
static  VTBL_ENTRY _tg__ZTV7S7846C4__7S7846C3[] = {
  ABISELECT(192,120),
  ABISELECT(32,12),
  0,
  (VTBL_ENTRY)&(_ZTI7S7846C4[0]),
  (VTBL_ENTRY)&_ZN7S7846C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7846C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7846C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7846C43v15Ev,
  (VTBL_ENTRY)&_ZN7S7846C43v16Ev,
};
extern void _ZN7S7846C52v5Ev();
extern void _ZN7S7846C52v6Ev();
extern void _ZN7S7846C52v7Ev();
extern void _ZN7S7846C52v8Ev();
static  VTBL_ENTRY _tg__ZTV7S7846C5__7S7846C4__7S7846C3[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-32,-12),
  (VTBL_ENTRY)&(_ZTI7S7846C4[0]),
  (VTBL_ENTRY)&_ZN7S7846C52v5Ev,
  (VTBL_ENTRY)&_ZN7S7846C52v6Ev,
  (VTBL_ENTRY)&_ZN7S7846C52v7Ev,
  (VTBL_ENTRY)&_ZN7S7846C52v8Ev,
};
extern void _ZN7S7846C52v5Ev();
extern void _ZN7S7846C52v6Ev();
extern void _ZN7S7846C52v7Ev();
extern void _ZN7S7846C52v8Ev();
extern void _ZN7S7846C62v9Ev();
extern void _ZN7S7846C63v10Ev();
extern void _ZN7S7846C63v11Ev();
static  VTBL_ENTRY _tg__ZTV7S7846C6__7S7846C4__7S7846C3[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-192,-120),
  (VTBL_ENTRY)&(_ZTI7S7846C4[0]),
  (VTBL_ENTRY)&_ZN7S7846C52v5Ev,
  (VTBL_ENTRY)&_ZN7S7846C52v6Ev,
  (VTBL_ENTRY)&_ZN7S7846C52v7Ev,
  (VTBL_ENTRY)&_ZN7S7846C52v8Ev,
  (VTBL_ENTRY)&_ZN7S7846C62v9Ev,
  (VTBL_ENTRY)&_ZN7S7846C63v10Ev,
  (VTBL_ENTRY)&_ZN7S7846C63v11Ev,
};
static  VTT_ENTRY vtt_S7846C3[] = {
  {&(_ZTV7S7846C3[5]),  5,60},
  {&(_tg__ZTV7S7846C7__7S7846C3[3]),  3,14},
  {&(_tg__ZTV7S7846C5__7S7846C7__7S7846C3[6]),  6,10},
  {&(_ZTV7S7846C3[29]),  29,60},
  {&(_ZTV7S7846C3[40]),  40,60},
  {&(_ZTV7S7846C3[53]),  53,60},
  {&(_tg__ZTV7S7846C4__7S7846C3[4]),  4,9},
  {&(_tg__ZTV7S7846C5__7S7846C4__7S7846C3[6]),  6,10},
  {&(_tg__ZTV7S7846C6__7S7846C4__7S7846C3[9]),  9,16},
};
extern VTBL_ENTRY _ZTI7S7846C3[];
extern  VTBL_ENTRY _ZTV7S7846C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7846C3[];
Class_Descriptor cd_S7846C3 = {  "S7846C3", // class name
  bases_S7846C3, 7,
  &(vtc_S7846C3[0]), // expected_vtbl_contents
  &(vtt_S7846C3[0]), // expected_vtt_contents
  ABISELECT(688,444), // object size
  NSPAIRA(_ZTI7S7846C3),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7846C3),60, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7846C3),9, //virtual table table var
  7, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7846C2  : virtual S7846C3 {
  virtual  ~S7846C2(); // _ZN7S7846C2D2Ev
  virtual void  v25(); // _ZN7S7846C23v25Ev
  virtual void  v26(); // _ZN7S7846C23v26Ev
  S7846C2(); // tgen
};
//SIG(-1 S7846C2) C1{ VBC2{ VBC3{ VBC4{ v3 v4 v5 v6 Fs:13 Fp FD[8]} VBC5{ BC4 v7 v8 v9 Fp[6]} v10 v11 v12 v13 v14 Fp[2]} BC6{ VBC4 BC5 v15 v16 v17 v18 Fp} v19 v20 v21 v22 FL[5] FC7{} FD} vd v1 v2}


 S7846C2 ::~S7846C2(){ note_dtor("S7846C2", this);}
void  S7846C2 ::v25(){vfunc_called(this, "_ZN7S7846C23v25Ev");}
void  S7846C2 ::v26(){vfunc_called(this, "_ZN7S7846C23v26Ev");}
S7846C2 ::S7846C2(){ note_ctor("S7846C2", this);} // tgen

static void Test_S7846C2()
{
  extern Class_Descriptor cd_S7846C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(45,113)];
    init_test(&cd_S7846C2, buf);
    S7846C2 *dp, &lv = *(dp=new (buf) S7846C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(704,448), "sizeof(S7846C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7846C2)");
    /*is_ambiguous_... S7846C4::S7846C5 */ AMB_check_base_class_offset(lv, (S7846C5*)(S7846C4*), ABISELECT(336,208), "S7846C2");
    /*is_ambiguous_... S7846C7::S7846C5 */ AMB_check_base_class_offset(lv, (S7846C5*)(S7846C7*)(S7846C3*), ABISELECT(336,208), "S7846C2");
    /*is_ambiguous_... S7846C2::S7846C6 */ AMB_check_base_class_offset(lv, (S7846C5*)(S7846C6*), ABISELECT(496,316), "S7846C2");
    check_base_class_offset(lv, (S7846C6*)(S7846C4*), ABISELECT(496,316), "S7846C2");
    check_base_class_offset(lv, (S7846C4*)(S7846C3*), ABISELECT(304,196), "S7846C2");
    check_base_class_offset(lv, (S7846C5*)(S7846C6*)(S7846C7*)(S7846C3*), ABISELECT(16,4), "S7846C2");
    check_base_class_offset(lv, (S7846C6*)(S7846C7*)(S7846C3*), ABISELECT(16,4), "S7846C2");
    check_base_class_offset(lv, (S7846C7*)(S7846C3*), ABISELECT(16,4), "S7846C2");
    check_base_class_offset(lv, (S7846C3*), ABISELECT(16,4), "S7846C2");
    test_class_info(&lv, &cd_S7846C2);
    dp->~S7846C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7846C2(Test_S7846C2, "S7846C2", ABISELECT(704,448));

#else // __cplusplus

extern void _ZN7S7846C2C1Ev();
extern void _ZN7S7846C2D2Ev();
Name_Map name_map_S7846C2[] = {
  NSPAIR(_ZN7S7846C2C1Ev),
  NSPAIR(_ZN7S7846C2D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7846C5;
extern VTBL_ENTRY _ZTI7S7846C5[];
extern  VTBL_ENTRY _ZTV7S7846C5[];
extern Class_Descriptor cd_S7846C5;
extern VTBL_ENTRY _ZTI7S7846C5[];
extern  VTBL_ENTRY _ZTV7S7846C5[];
extern Class_Descriptor cd_S7846C6;
extern VTBL_ENTRY _ZTI7S7846C6[];
extern  VTBL_ENTRY _ZTV7S7846C6[];
extern Class_Descriptor cd_S7846C4;
extern VTBL_ENTRY _ZTI7S7846C4[];
extern  VTBL_ENTRY _ZTV7S7846C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7846C4[];
extern Class_Descriptor cd_S7846C5;
extern VTBL_ENTRY _ZTI7S7846C5[];
extern  VTBL_ENTRY _ZTV7S7846C5[];
extern Class_Descriptor cd_S7846C6;
extern VTBL_ENTRY _ZTI7S7846C6[];
extern  VTBL_ENTRY _ZTV7S7846C6[];
extern Class_Descriptor cd_S7846C7;
extern VTBL_ENTRY _ZTI7S7846C7[];
extern  VTBL_ENTRY _ZTV7S7846C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7846C7[];
extern Class_Descriptor cd_S7846C3;
extern VTBL_ENTRY _ZTI7S7846C3[];
extern  VTBL_ENTRY _ZTV7S7846C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7846C3[];
static Base_Class bases_S7846C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7846C5,    ABISELECT(336,208), //bcp->offset
    59, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S7846C5,    ABISELECT(496,316), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S7846C6,    ABISELECT(496,316), //bcp->offset
    69, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S7846C4,    ABISELECT(304,196), //bcp->offset
    45, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S7846C5,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S7846C6,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S7846C7,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S7846C3,    ABISELECT(16,4), //bcp->offset
    10, //bcp->virtual_function_table_offset
    20, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7846C2[];
extern void _ZN7S7846C2D1Ev();
extern void _ZN7S7846C2D0Ev();
extern void _ZN7S7846C23v25Ev();
extern void _ZN7S7846C23v26Ev();
extern void _ZN7S7846C52v5Ev();
extern void _ZN7S7846C52v6Ev();
extern void _ZN7S7846C52v7Ev();
extern void _ZN7S7846C52v8Ev();
extern void _ZN7S7846C62v9Ev();
extern void _ZN7S7846C63v10Ev();
extern void _ZN7S7846C63v11Ev();
extern void _ZN7S7846C73v17Ev();
extern void _ZN7S7846C73v18Ev();
extern void _ZN7S7846C73v19Ev();
extern void _ZN7S7846C73v20Ev();
extern void _ZN7S7846C33v21Ev();
extern void _ZN7S7846C33v22Ev();
extern void _ZN7S7846C33v23Ev();
extern void _ZN7S7846C33v24Ev();
extern void _ZN7S7846C43v12Ev();
extern void _ZN7S7846C43v13Ev();
extern void _ZN7S7846C43v14Ev();
extern void _ZN7S7846C43v15Ev();
extern void _ZN7S7846C43v16Ev();
extern void _ZN7S7846C52v5Ev();
extern void _ZN7S7846C52v6Ev();
extern void _ZN7S7846C52v7Ev();
extern void _ZN7S7846C52v8Ev();
extern void _ZN7S7846C52v5Ev();
extern void _ZN7S7846C52v6Ev();
extern void _ZN7S7846C52v7Ev();
extern void _ZN7S7846C52v8Ev();
extern void _ZN7S7846C62v9Ev();
extern void _ZN7S7846C63v10Ev();
extern void _ZN7S7846C63v11Ev();
static  VTBL_ENTRY vtc_S7846C2[] = {
  ABISELECT(496,316),
  ABISELECT(336,208),
  ABISELECT(304,196),
  ABISELECT(16,4),
  0,
  (VTBL_ENTRY)&(_ZTI7S7846C2[0]),
  (VTBL_ENTRY)&_ZN7S7846C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7846C2D0Ev,
  (VTBL_ENTRY)&_ZN7S7846C23v25Ev,
  (VTBL_ENTRY)&_ZN7S7846C23v26Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(480,312),
  ABISELECT(288,192),
  ABISELECT(320,204),
  ABISELECT(-16,-4),
  (VTBL_ENTRY)&(_ZTI7S7846C2[0]),
  (VTBL_ENTRY)&_ZN7S7846C52v5Ev,
  (VTBL_ENTRY)&_ZN7S7846C52v6Ev,
  (VTBL_ENTRY)&_ZN7S7846C52v7Ev,
  (VTBL_ENTRY)&_ZN7S7846C52v8Ev,
  (VTBL_ENTRY)&_ZN7S7846C62v9Ev,
  (VTBL_ENTRY)&_ZN7S7846C63v10Ev,
  (VTBL_ENTRY)&_ZN7S7846C63v11Ev,
  (VTBL_ENTRY)&_ZN7S7846C73v17Ev,
  (VTBL_ENTRY)&_ZN7S7846C73v18Ev,
  (VTBL_ENTRY)&_ZN7S7846C73v19Ev,
  (VTBL_ENTRY)&_ZN7S7846C73v20Ev,
  (VTBL_ENTRY)&_ZN7S7846C33v21Ev,
  (VTBL_ENTRY)&_ZN7S7846C33v22Ev,
  (VTBL_ENTRY)&_ZN7S7846C33v23Ev,
  (VTBL_ENTRY)&_ZN7S7846C33v24Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(192,120),
  ABISELECT(32,12),
  ABISELECT(-304,-196),
  (VTBL_ENTRY)&(_ZTI7S7846C2[0]),
  (VTBL_ENTRY)&_ZN7S7846C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7846C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7846C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7846C43v15Ev,
  (VTBL_ENTRY)&_ZN7S7846C43v16Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-336,-208),
  (VTBL_ENTRY)&(_ZTI7S7846C2[0]),
  (VTBL_ENTRY)&_ZN7S7846C52v5Ev,
  (VTBL_ENTRY)&_ZN7S7846C52v6Ev,
  (VTBL_ENTRY)&_ZN7S7846C52v7Ev,
  (VTBL_ENTRY)&_ZN7S7846C52v8Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-496,-316),
  (VTBL_ENTRY)&(_ZTI7S7846C2[0]),
  (VTBL_ENTRY)&_ZN7S7846C52v5Ev,
  (VTBL_ENTRY)&_ZN7S7846C52v6Ev,
  (VTBL_ENTRY)&_ZN7S7846C52v7Ev,
  (VTBL_ENTRY)&_ZN7S7846C52v8Ev,
  (VTBL_ENTRY)&_ZN7S7846C62v9Ev,
  (VTBL_ENTRY)&_ZN7S7846C63v10Ev,
  (VTBL_ENTRY)&_ZN7S7846C63v11Ev,
};
extern VTBL_ENTRY _ZTV7S7846C2[];
extern void _ZN7S7846C52v5Ev();
extern void _ZN7S7846C52v6Ev();
extern void _ZN7S7846C52v7Ev();
extern void _ZN7S7846C52v8Ev();
extern void _ZN7S7846C62v9Ev();
extern void _ZN7S7846C63v10Ev();
extern void _ZN7S7846C63v11Ev();
extern void _ZN7S7846C73v17Ev();
extern void _ZN7S7846C73v18Ev();
extern void _ZN7S7846C73v19Ev();
extern void _ZN7S7846C73v20Ev();
extern void _ZN7S7846C33v21Ev();
extern void _ZN7S7846C33v22Ev();
extern void _ZN7S7846C33v23Ev();
extern void _ZN7S7846C33v24Ev();
static  VTBL_ENTRY _tg__ZTV7S7846C3__7S7846C2[] = {
  ABISELECT(480,312),
  ABISELECT(288,192),
  ABISELECT(320,204),
  0,
  (VTBL_ENTRY)&(_ZTI7S7846C3[0]),
  (VTBL_ENTRY)&_ZN7S7846C52v5Ev,
  (VTBL_ENTRY)&_ZN7S7846C52v6Ev,
  (VTBL_ENTRY)&_ZN7S7846C52v7Ev,
  (VTBL_ENTRY)&_ZN7S7846C52v8Ev,
  (VTBL_ENTRY)&_ZN7S7846C62v9Ev,
  (VTBL_ENTRY)&_ZN7S7846C63v10Ev,
  (VTBL_ENTRY)&_ZN7S7846C63v11Ev,
  (VTBL_ENTRY)&_ZN7S7846C73v17Ev,
  (VTBL_ENTRY)&_ZN7S7846C73v18Ev,
  (VTBL_ENTRY)&_ZN7S7846C73v19Ev,
  (VTBL_ENTRY)&_ZN7S7846C73v20Ev,
  (VTBL_ENTRY)&_ZN7S7846C33v21Ev,
  (VTBL_ENTRY)&_ZN7S7846C33v22Ev,
  (VTBL_ENTRY)&_ZN7S7846C33v23Ev,
  (VTBL_ENTRY)&_ZN7S7846C33v24Ev,
};
extern void _ZN7S7846C52v5Ev();
extern void _ZN7S7846C52v6Ev();
extern void _ZN7S7846C52v7Ev();
extern void _ZN7S7846C52v8Ev();
extern void _ZN7S7846C62v9Ev();
extern void _ZN7S7846C63v10Ev();
extern void _ZN7S7846C63v11Ev();
extern void _ZN7S7846C73v17Ev();
extern void _ZN7S7846C73v18Ev();
extern void _ZN7S7846C73v19Ev();
extern void _ZN7S7846C73v20Ev();
static  VTBL_ENTRY _tg__ZTV7S7846C77S7846C3__7S7846C2[] = {
  ABISELECT(320,204),
  0,
  (VTBL_ENTRY)&(_ZTI7S7846C7[0]),
  (VTBL_ENTRY)&_ZN7S7846C52v5Ev,
  (VTBL_ENTRY)&_ZN7S7846C52v6Ev,
  (VTBL_ENTRY)&_ZN7S7846C52v7Ev,
  (VTBL_ENTRY)&_ZN7S7846C52v8Ev,
  (VTBL_ENTRY)&_ZN7S7846C62v9Ev,
  (VTBL_ENTRY)&_ZN7S7846C63v10Ev,
  (VTBL_ENTRY)&_ZN7S7846C63v11Ev,
  (VTBL_ENTRY)&_ZN7S7846C73v17Ev,
  (VTBL_ENTRY)&_ZN7S7846C73v18Ev,
  (VTBL_ENTRY)&_ZN7S7846C73v19Ev,
  (VTBL_ENTRY)&_ZN7S7846C73v20Ev,
};
extern void _ZN7S7846C52v5Ev();
extern void _ZN7S7846C52v6Ev();
extern void _ZN7S7846C52v7Ev();
extern void _ZN7S7846C52v8Ev();
static  VTBL_ENTRY _tg__ZTV7S7846C5__7S7846C77S7846C3__7S7846C2[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-320,-204),
  (VTBL_ENTRY)&(_ZTI7S7846C7[0]),
  (VTBL_ENTRY)&_ZN7S7846C52v5Ev,
  (VTBL_ENTRY)&_ZN7S7846C52v6Ev,
  (VTBL_ENTRY)&_ZN7S7846C52v7Ev,
  (VTBL_ENTRY)&_ZN7S7846C52v8Ev,
};
extern void _ZN7S7846C43v12Ev();
extern void _ZN7S7846C43v13Ev();
extern void _ZN7S7846C43v14Ev();
extern void _ZN7S7846C43v15Ev();
extern void _ZN7S7846C43v16Ev();
static  VTBL_ENTRY _tg__ZTV7S7846C4__7S7846C3__7S7846C2[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(192,120),
  ABISELECT(32,12),
  ABISELECT(-288,-192),
  (VTBL_ENTRY)&(_ZTI7S7846C3[0]),
  (VTBL_ENTRY)&_ZN7S7846C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7846C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7846C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7846C43v15Ev,
  (VTBL_ENTRY)&_ZN7S7846C43v16Ev,
};
extern void _ZN7S7846C52v5Ev();
extern void _ZN7S7846C52v6Ev();
extern void _ZN7S7846C52v7Ev();
extern void _ZN7S7846C52v8Ev();
static  VTBL_ENTRY _tg__ZTV7S7846C5__7S7846C3__7S7846C2[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-320,-204),
  (VTBL_ENTRY)&(_ZTI7S7846C3[0]),
  (VTBL_ENTRY)&_ZN7S7846C52v5Ev,
  (VTBL_ENTRY)&_ZN7S7846C52v6Ev,
  (VTBL_ENTRY)&_ZN7S7846C52v7Ev,
  (VTBL_ENTRY)&_ZN7S7846C52v8Ev,
};
extern void _ZN7S7846C52v5Ev();
extern void _ZN7S7846C52v6Ev();
extern void _ZN7S7846C52v7Ev();
extern void _ZN7S7846C52v8Ev();
extern void _ZN7S7846C62v9Ev();
extern void _ZN7S7846C63v10Ev();
extern void _ZN7S7846C63v11Ev();
static  VTBL_ENTRY _tg__ZTV7S7846C6__7S7846C3__7S7846C2[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-480,-312),
  (VTBL_ENTRY)&(_ZTI7S7846C3[0]),
  (VTBL_ENTRY)&_ZN7S7846C52v5Ev,
  (VTBL_ENTRY)&_ZN7S7846C52v6Ev,
  (VTBL_ENTRY)&_ZN7S7846C52v7Ev,
  (VTBL_ENTRY)&_ZN7S7846C52v8Ev,
  (VTBL_ENTRY)&_ZN7S7846C62v9Ev,
  (VTBL_ENTRY)&_ZN7S7846C63v10Ev,
  (VTBL_ENTRY)&_ZN7S7846C63v11Ev,
};
extern void _ZN7S7846C43v12Ev();
extern void _ZN7S7846C43v13Ev();
extern void _ZN7S7846C43v14Ev();
extern void _ZN7S7846C43v15Ev();
extern void _ZN7S7846C43v16Ev();
static  VTBL_ENTRY _tg__ZTV7S7846C4__7S7846C2[] = {
  ABISELECT(192,120),
  ABISELECT(32,12),
  0,
  (VTBL_ENTRY)&(_ZTI7S7846C4[0]),
  (VTBL_ENTRY)&_ZN7S7846C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7846C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7846C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7846C43v15Ev,
  (VTBL_ENTRY)&_ZN7S7846C43v16Ev,
};
extern void _ZN7S7846C52v5Ev();
extern void _ZN7S7846C52v6Ev();
extern void _ZN7S7846C52v7Ev();
extern void _ZN7S7846C52v8Ev();
static  VTBL_ENTRY _tg__ZTV7S7846C5__7S7846C4__7S7846C2[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-32,-12),
  (VTBL_ENTRY)&(_ZTI7S7846C4[0]),
  (VTBL_ENTRY)&_ZN7S7846C52v5Ev,
  (VTBL_ENTRY)&_ZN7S7846C52v6Ev,
  (VTBL_ENTRY)&_ZN7S7846C52v7Ev,
  (VTBL_ENTRY)&_ZN7S7846C52v8Ev,
};
extern void _ZN7S7846C52v5Ev();
extern void _ZN7S7846C52v6Ev();
extern void _ZN7S7846C52v7Ev();
extern void _ZN7S7846C52v8Ev();
extern void _ZN7S7846C62v9Ev();
extern void _ZN7S7846C63v10Ev();
extern void _ZN7S7846C63v11Ev();
static  VTBL_ENTRY _tg__ZTV7S7846C6__7S7846C4__7S7846C2[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-192,-120),
  (VTBL_ENTRY)&(_ZTI7S7846C4[0]),
  (VTBL_ENTRY)&_ZN7S7846C52v5Ev,
  (VTBL_ENTRY)&_ZN7S7846C52v6Ev,
  (VTBL_ENTRY)&_ZN7S7846C52v7Ev,
  (VTBL_ENTRY)&_ZN7S7846C52v8Ev,
  (VTBL_ENTRY)&_ZN7S7846C62v9Ev,
  (VTBL_ENTRY)&_ZN7S7846C63v10Ev,
  (VTBL_ENTRY)&_ZN7S7846C63v11Ev,
};
static  VTT_ENTRY vtt_S7846C2[] = {
  {&(_ZTV7S7846C2[6]),  6,85},
  {&(_ZTV7S7846C2[30]),  30,85},
  {&(_ZTV7S7846C2[54]),  54,85},
  {&(_ZTV7S7846C2[65]),  65,85},
  {&(_ZTV7S7846C2[78]),  78,85},
  {&(_tg__ZTV7S7846C3__7S7846C2[5]),  5,20},
  {&(_tg__ZTV7S7846C77S7846C3__7S7846C2[3]),  3,14},
  {&(_tg__ZTV7S7846C5__7S7846C77S7846C3__7S7846C2[6]),  6,10},
  {&(_tg__ZTV7S7846C4__7S7846C3__7S7846C2[9]),  9,14},
  {&(_tg__ZTV7S7846C5__7S7846C3__7S7846C2[6]),  6,10},
  {&(_tg__ZTV7S7846C6__7S7846C3__7S7846C2[9]),  9,16},
  {&(_tg__ZTV7S7846C4__7S7846C2[4]),  4,9},
  {&(_tg__ZTV7S7846C5__7S7846C4__7S7846C2[6]),  6,10},
  {&(_tg__ZTV7S7846C6__7S7846C4__7S7846C2[9]),  9,16},
};
extern VTBL_ENTRY _ZTI7S7846C2[];
extern  VTBL_ENTRY _ZTV7S7846C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7846C2[];
Class_Descriptor cd_S7846C2 = {  "S7846C2", // class name
  bases_S7846C2, 8,
  &(vtc_S7846C2[0]), // expected_vtbl_contents
  &(vtt_S7846C2[0]), // expected_vtt_contents
  ABISELECT(704,448), // object size
  NSPAIRA(_ZTI7S7846C2),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S7846C2),85, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7846C2),14, //virtual table table var
  8, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7846C1  : S7846C2 {
  void *s7846c1f0;
  virtual  ~S7846C1(); // _ZN7S7846C1D2Ev
  virtual void  v1(); // _ZN7S7846C12v1Ev
  virtual void  v2(); // _ZN7S7846C12v2Ev
  virtual void  v3(); // _ZN7S7846C12v3Ev
  virtual void  v4(); // _ZN7S7846C12v4Ev
  S7846C1(); // tgen
};
//SIG(1 S7846C1) C1{ BC2{ VBC3{ VBC4{ VBC5{ v5 v6 v7 v8 Fs:13 Fp FD[8]} VBC6{ BC5 v9 v10 v11 Fp[6]} v12 v13 v14 v15 v16 Fp[2]} BC7{ VBC5 BC6 v17 v18 v19 v20 Fp} v21 v22 v23 v24 FL[5] FC8{} FD} vd v25 v26} vd v1 v2 v3 v4 Fp}


 S7846C1 ::~S7846C1(){ note_dtor("S7846C1", this);}
void  S7846C1 ::v1(){vfunc_called(this, "_ZN7S7846C12v1Ev");}
void  S7846C1 ::v2(){vfunc_called(this, "_ZN7S7846C12v2Ev");}
void  S7846C1 ::v3(){vfunc_called(this, "_ZN7S7846C12v3Ev");}
void  S7846C1 ::v4(){vfunc_called(this, "_ZN7S7846C12v4Ev");}
S7846C1 ::S7846C1(){ note_ctor("S7846C1", this);} // tgen

static void Test_S7846C1()
{
  extern Class_Descriptor cd_S7846C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(45,114)];
    init_test(&cd_S7846C1, buf);
    S7846C1 *dp, &lv = *(dp=new (buf) S7846C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(704,452), "sizeof(S7846C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7846C1)");
    /*is_ambiguous_... S7846C4::S7846C5 */ AMB_check_base_class_offset(lv, (S7846C5*)(S7846C4*), ABISELECT(336,212), "S7846C1");
    /*is_ambiguous_... S7846C7::S7846C5 */ AMB_check_base_class_offset(lv, (S7846C5*)(S7846C7*)(S7846C3*), ABISELECT(336,212), "S7846C1");
    /*is_ambiguous_... S7846C1::S7846C6 */ AMB_check_base_class_offset(lv, (S7846C5*)(S7846C6*), ABISELECT(496,320), "S7846C1");
    check_base_class_offset(lv, (S7846C6*)(S7846C4*), ABISELECT(496,320), "S7846C1");
    check_base_class_offset(lv, (S7846C4*)(S7846C3*), ABISELECT(304,200), "S7846C1");
    check_base_class_offset(lv, (S7846C5*)(S7846C6*)(S7846C7*)(S7846C3*), ABISELECT(16,8), "S7846C1");
    check_base_class_offset(lv, (S7846C6*)(S7846C7*)(S7846C3*), ABISELECT(16,8), "S7846C1");
    check_base_class_offset(lv, (S7846C7*)(S7846C3*), ABISELECT(16,8), "S7846C1");
    check_base_class_offset(lv, (S7846C3*)(S7846C2*), ABISELECT(16,8), "S7846C1");
    check_base_class_offset(lv, (S7846C2*), 0, "S7846C1");
    check_field_offset(lv, s7846c1f0, ABISELECT(8,4), "S7846C1.s7846c1f0");
    test_class_info(&lv, &cd_S7846C1);
    dp->~S7846C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7846C1(Test_S7846C1, "S7846C1", ABISELECT(704,452));

#else // __cplusplus

extern void _ZN7S7846C1C1Ev();
extern void _ZN7S7846C1D2Ev();
Name_Map name_map_S7846C1[] = {
  NSPAIR(_ZN7S7846C1C1Ev),
  NSPAIR(_ZN7S7846C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7846C5;
extern VTBL_ENTRY _ZTI7S7846C5[];
extern  VTBL_ENTRY _ZTV7S7846C5[];
extern Class_Descriptor cd_S7846C5;
extern VTBL_ENTRY _ZTI7S7846C5[];
extern  VTBL_ENTRY _ZTV7S7846C5[];
extern Class_Descriptor cd_S7846C6;
extern VTBL_ENTRY _ZTI7S7846C6[];
extern  VTBL_ENTRY _ZTV7S7846C6[];
extern Class_Descriptor cd_S7846C4;
extern VTBL_ENTRY _ZTI7S7846C4[];
extern  VTBL_ENTRY _ZTV7S7846C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7846C4[];
extern Class_Descriptor cd_S7846C5;
extern VTBL_ENTRY _ZTI7S7846C5[];
extern  VTBL_ENTRY _ZTV7S7846C5[];
extern Class_Descriptor cd_S7846C6;
extern VTBL_ENTRY _ZTI7S7846C6[];
extern  VTBL_ENTRY _ZTV7S7846C6[];
extern Class_Descriptor cd_S7846C7;
extern VTBL_ENTRY _ZTI7S7846C7[];
extern  VTBL_ENTRY _ZTV7S7846C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7846C7[];
extern Class_Descriptor cd_S7846C3;
extern VTBL_ENTRY _ZTI7S7846C3[];
extern  VTBL_ENTRY _ZTV7S7846C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7846C3[];
extern Class_Descriptor cd_S7846C2;
extern VTBL_ENTRY _ZTI7S7846C2[];
extern  VTBL_ENTRY _ZTV7S7846C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7846C2[];
static Base_Class bases_S7846C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7846C5,    ABISELECT(336,212), //bcp->offset
    63, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S7846C5,    ABISELECT(496,320), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S7846C6,    ABISELECT(496,320), //bcp->offset
    73, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S7846C4,    ABISELECT(304,200), //bcp->offset
    49, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S7846C5,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S7846C6,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S7846C7,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S7846C3,    ABISELECT(16,8), //bcp->offset
    14, //bcp->virtual_function_table_offset
    20, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S7846C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7846C1[];
extern void _ZN7S7846C1D1Ev();
extern void _ZN7S7846C1D0Ev();
extern void _ZN7S7846C23v25Ev();
extern void _ZN7S7846C23v26Ev();
extern void _ZN7S7846C12v1Ev();
extern void _ZN7S7846C12v2Ev();
extern void _ZN7S7846C12v3Ev();
extern void _ZN7S7846C12v4Ev();
extern void _ZN7S7846C52v5Ev();
extern void _ZN7S7846C52v6Ev();
extern void _ZN7S7846C52v7Ev();
extern void _ZN7S7846C52v8Ev();
extern void _ZN7S7846C62v9Ev();
extern void _ZN7S7846C63v10Ev();
extern void _ZN7S7846C63v11Ev();
extern void _ZN7S7846C73v17Ev();
extern void _ZN7S7846C73v18Ev();
extern void _ZN7S7846C73v19Ev();
extern void _ZN7S7846C73v20Ev();
extern void _ZN7S7846C33v21Ev();
extern void _ZN7S7846C33v22Ev();
extern void _ZN7S7846C33v23Ev();
extern void _ZN7S7846C33v24Ev();
extern void _ZN7S7846C43v12Ev();
extern void _ZN7S7846C43v13Ev();
extern void _ZN7S7846C43v14Ev();
extern void _ZN7S7846C43v15Ev();
extern void _ZN7S7846C43v16Ev();
extern void _ZN7S7846C52v5Ev();
extern void _ZN7S7846C52v6Ev();
extern void _ZN7S7846C52v7Ev();
extern void _ZN7S7846C52v8Ev();
extern void _ZN7S7846C52v5Ev();
extern void _ZN7S7846C52v6Ev();
extern void _ZN7S7846C52v7Ev();
extern void _ZN7S7846C52v8Ev();
extern void _ZN7S7846C62v9Ev();
extern void _ZN7S7846C63v10Ev();
extern void _ZN7S7846C63v11Ev();
static  VTBL_ENTRY vtc_S7846C1[] = {
  ABISELECT(496,320),
  ABISELECT(336,212),
  ABISELECT(304,200),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI7S7846C1[0]),
  (VTBL_ENTRY)&_ZN7S7846C1D1Ev,
  (VTBL_ENTRY)&_ZN7S7846C1D0Ev,
  (VTBL_ENTRY)&_ZN7S7846C23v25Ev,
  (VTBL_ENTRY)&_ZN7S7846C23v26Ev,
  (VTBL_ENTRY)&_ZN7S7846C12v1Ev,
  (VTBL_ENTRY)&_ZN7S7846C12v2Ev,
  (VTBL_ENTRY)&_ZN7S7846C12v3Ev,
  (VTBL_ENTRY)&_ZN7S7846C12v4Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(480,312),
  ABISELECT(288,192),
  ABISELECT(320,204),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S7846C1[0]),
  (VTBL_ENTRY)&_ZN7S7846C52v5Ev,
  (VTBL_ENTRY)&_ZN7S7846C52v6Ev,
  (VTBL_ENTRY)&_ZN7S7846C52v7Ev,
  (VTBL_ENTRY)&_ZN7S7846C52v8Ev,
  (VTBL_ENTRY)&_ZN7S7846C62v9Ev,
  (VTBL_ENTRY)&_ZN7S7846C63v10Ev,
  (VTBL_ENTRY)&_ZN7S7846C63v11Ev,
  (VTBL_ENTRY)&_ZN7S7846C73v17Ev,
  (VTBL_ENTRY)&_ZN7S7846C73v18Ev,
  (VTBL_ENTRY)&_ZN7S7846C73v19Ev,
  (VTBL_ENTRY)&_ZN7S7846C73v20Ev,
  (VTBL_ENTRY)&_ZN7S7846C33v21Ev,
  (VTBL_ENTRY)&_ZN7S7846C33v22Ev,
  (VTBL_ENTRY)&_ZN7S7846C33v23Ev,
  (VTBL_ENTRY)&_ZN7S7846C33v24Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(192,120),
  ABISELECT(32,12),
  ABISELECT(-304,-200),
  (VTBL_ENTRY)&(_ZTI7S7846C1[0]),
  (VTBL_ENTRY)&_ZN7S7846C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7846C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7846C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7846C43v15Ev,
  (VTBL_ENTRY)&_ZN7S7846C43v16Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-336,-212),
  (VTBL_ENTRY)&(_ZTI7S7846C1[0]),
  (VTBL_ENTRY)&_ZN7S7846C52v5Ev,
  (VTBL_ENTRY)&_ZN7S7846C52v6Ev,
  (VTBL_ENTRY)&_ZN7S7846C52v7Ev,
  (VTBL_ENTRY)&_ZN7S7846C52v8Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-496,-320),
  (VTBL_ENTRY)&(_ZTI7S7846C1[0]),
  (VTBL_ENTRY)&_ZN7S7846C52v5Ev,
  (VTBL_ENTRY)&_ZN7S7846C52v6Ev,
  (VTBL_ENTRY)&_ZN7S7846C52v7Ev,
  (VTBL_ENTRY)&_ZN7S7846C52v8Ev,
  (VTBL_ENTRY)&_ZN7S7846C62v9Ev,
  (VTBL_ENTRY)&_ZN7S7846C63v10Ev,
  (VTBL_ENTRY)&_ZN7S7846C63v11Ev,
};
extern VTBL_ENTRY _ZTV7S7846C1[];
extern void _ZN7S7846C2D1Ev();
extern void _ZN7S7846C2D0Ev();
extern void _ZN7S7846C23v25Ev();
extern void _ZN7S7846C23v26Ev();
static  VTBL_ENTRY _tg__ZTV7S7846C2__7S7846C1[] = {
  ABISELECT(496,320),
  ABISELECT(336,212),
  ABISELECT(304,200),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI7S7846C2[0]),
  (VTBL_ENTRY)&_ZN7S7846C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7846C2D0Ev,
  (VTBL_ENTRY)&_ZN7S7846C23v25Ev,
  (VTBL_ENTRY)&_ZN7S7846C23v26Ev,
};
extern void _ZN7S7846C52v5Ev();
extern void _ZN7S7846C52v6Ev();
extern void _ZN7S7846C52v7Ev();
extern void _ZN7S7846C52v8Ev();
extern void _ZN7S7846C62v9Ev();
extern void _ZN7S7846C63v10Ev();
extern void _ZN7S7846C63v11Ev();
extern void _ZN7S7846C73v17Ev();
extern void _ZN7S7846C73v18Ev();
extern void _ZN7S7846C73v19Ev();
extern void _ZN7S7846C73v20Ev();
extern void _ZN7S7846C33v21Ev();
extern void _ZN7S7846C33v22Ev();
extern void _ZN7S7846C33v23Ev();
extern void _ZN7S7846C33v24Ev();
static  VTBL_ENTRY _tg__ZTV7S7846C3__7S7846C2__7S7846C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(480,312),
  ABISELECT(288,192),
  ABISELECT(320,204),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S7846C2[0]),
  (VTBL_ENTRY)&_ZN7S7846C52v5Ev,
  (VTBL_ENTRY)&_ZN7S7846C52v6Ev,
  (VTBL_ENTRY)&_ZN7S7846C52v7Ev,
  (VTBL_ENTRY)&_ZN7S7846C52v8Ev,
  (VTBL_ENTRY)&_ZN7S7846C62v9Ev,
  (VTBL_ENTRY)&_ZN7S7846C63v10Ev,
  (VTBL_ENTRY)&_ZN7S7846C63v11Ev,
  (VTBL_ENTRY)&_ZN7S7846C73v17Ev,
  (VTBL_ENTRY)&_ZN7S7846C73v18Ev,
  (VTBL_ENTRY)&_ZN7S7846C73v19Ev,
  (VTBL_ENTRY)&_ZN7S7846C73v20Ev,
  (VTBL_ENTRY)&_ZN7S7846C33v21Ev,
  (VTBL_ENTRY)&_ZN7S7846C33v22Ev,
  (VTBL_ENTRY)&_ZN7S7846C33v23Ev,
  (VTBL_ENTRY)&_ZN7S7846C33v24Ev,
};
extern void _ZN7S7846C43v12Ev();
extern void _ZN7S7846C43v13Ev();
extern void _ZN7S7846C43v14Ev();
extern void _ZN7S7846C43v15Ev();
extern void _ZN7S7846C43v16Ev();
static  VTBL_ENTRY _tg__ZTV7S7846C4__7S7846C2__7S7846C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(192,120),
  ABISELECT(32,12),
  ABISELECT(-304,-200),
  (VTBL_ENTRY)&(_ZTI7S7846C2[0]),
  (VTBL_ENTRY)&_ZN7S7846C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7846C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7846C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7846C43v15Ev,
  (VTBL_ENTRY)&_ZN7S7846C43v16Ev,
};
extern void _ZN7S7846C52v5Ev();
extern void _ZN7S7846C52v6Ev();
extern void _ZN7S7846C52v7Ev();
extern void _ZN7S7846C52v8Ev();
static  VTBL_ENTRY _tg__ZTV7S7846C5__7S7846C2__7S7846C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-336,-212),
  (VTBL_ENTRY)&(_ZTI7S7846C2[0]),
  (VTBL_ENTRY)&_ZN7S7846C52v5Ev,
  (VTBL_ENTRY)&_ZN7S7846C52v6Ev,
  (VTBL_ENTRY)&_ZN7S7846C52v7Ev,
  (VTBL_ENTRY)&_ZN7S7846C52v8Ev,
};
extern void _ZN7S7846C52v5Ev();
extern void _ZN7S7846C52v6Ev();
extern void _ZN7S7846C52v7Ev();
extern void _ZN7S7846C52v8Ev();
extern void _ZN7S7846C62v9Ev();
extern void _ZN7S7846C63v10Ev();
extern void _ZN7S7846C63v11Ev();
static  VTBL_ENTRY _tg__ZTV7S7846C6__7S7846C2__7S7846C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-496,-320),
  (VTBL_ENTRY)&(_ZTI7S7846C2[0]),
  (VTBL_ENTRY)&_ZN7S7846C52v5Ev,
  (VTBL_ENTRY)&_ZN7S7846C52v6Ev,
  (VTBL_ENTRY)&_ZN7S7846C52v7Ev,
  (VTBL_ENTRY)&_ZN7S7846C52v8Ev,
  (VTBL_ENTRY)&_ZN7S7846C62v9Ev,
  (VTBL_ENTRY)&_ZN7S7846C63v10Ev,
  (VTBL_ENTRY)&_ZN7S7846C63v11Ev,
};
extern void _ZN7S7846C52v5Ev();
extern void _ZN7S7846C52v6Ev();
extern void _ZN7S7846C52v7Ev();
extern void _ZN7S7846C52v8Ev();
extern void _ZN7S7846C62v9Ev();
extern void _ZN7S7846C63v10Ev();
extern void _ZN7S7846C63v11Ev();
extern void _ZN7S7846C73v17Ev();
extern void _ZN7S7846C73v18Ev();
extern void _ZN7S7846C73v19Ev();
extern void _ZN7S7846C73v20Ev();
extern void _ZN7S7846C33v21Ev();
extern void _ZN7S7846C33v22Ev();
extern void _ZN7S7846C33v23Ev();
extern void _ZN7S7846C33v24Ev();
static  VTBL_ENTRY _tg__ZTV7S7846C3__7S7846C1[] = {
  ABISELECT(480,312),
  ABISELECT(288,192),
  ABISELECT(320,204),
  0,
  (VTBL_ENTRY)&(_ZTI7S7846C3[0]),
  (VTBL_ENTRY)&_ZN7S7846C52v5Ev,
  (VTBL_ENTRY)&_ZN7S7846C52v6Ev,
  (VTBL_ENTRY)&_ZN7S7846C52v7Ev,
  (VTBL_ENTRY)&_ZN7S7846C52v8Ev,
  (VTBL_ENTRY)&_ZN7S7846C62v9Ev,
  (VTBL_ENTRY)&_ZN7S7846C63v10Ev,
  (VTBL_ENTRY)&_ZN7S7846C63v11Ev,
  (VTBL_ENTRY)&_ZN7S7846C73v17Ev,
  (VTBL_ENTRY)&_ZN7S7846C73v18Ev,
  (VTBL_ENTRY)&_ZN7S7846C73v19Ev,
  (VTBL_ENTRY)&_ZN7S7846C73v20Ev,
  (VTBL_ENTRY)&_ZN7S7846C33v21Ev,
  (VTBL_ENTRY)&_ZN7S7846C33v22Ev,
  (VTBL_ENTRY)&_ZN7S7846C33v23Ev,
  (VTBL_ENTRY)&_ZN7S7846C33v24Ev,
};
extern void _ZN7S7846C52v5Ev();
extern void _ZN7S7846C52v6Ev();
extern void _ZN7S7846C52v7Ev();
extern void _ZN7S7846C52v8Ev();
extern void _ZN7S7846C62v9Ev();
extern void _ZN7S7846C63v10Ev();
extern void _ZN7S7846C63v11Ev();
extern void _ZN7S7846C73v17Ev();
extern void _ZN7S7846C73v18Ev();
extern void _ZN7S7846C73v19Ev();
extern void _ZN7S7846C73v20Ev();
static  VTBL_ENTRY _tg__ZTV7S7846C77S7846C3__7S7846C1[] = {
  ABISELECT(320,204),
  0,
  (VTBL_ENTRY)&(_ZTI7S7846C7[0]),
  (VTBL_ENTRY)&_ZN7S7846C52v5Ev,
  (VTBL_ENTRY)&_ZN7S7846C52v6Ev,
  (VTBL_ENTRY)&_ZN7S7846C52v7Ev,
  (VTBL_ENTRY)&_ZN7S7846C52v8Ev,
  (VTBL_ENTRY)&_ZN7S7846C62v9Ev,
  (VTBL_ENTRY)&_ZN7S7846C63v10Ev,
  (VTBL_ENTRY)&_ZN7S7846C63v11Ev,
  (VTBL_ENTRY)&_ZN7S7846C73v17Ev,
  (VTBL_ENTRY)&_ZN7S7846C73v18Ev,
  (VTBL_ENTRY)&_ZN7S7846C73v19Ev,
  (VTBL_ENTRY)&_ZN7S7846C73v20Ev,
};
extern void _ZN7S7846C52v5Ev();
extern void _ZN7S7846C52v6Ev();
extern void _ZN7S7846C52v7Ev();
extern void _ZN7S7846C52v8Ev();
static  VTBL_ENTRY _tg__ZTV7S7846C5__7S7846C77S7846C3__7S7846C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-320,-204),
  (VTBL_ENTRY)&(_ZTI7S7846C7[0]),
  (VTBL_ENTRY)&_ZN7S7846C52v5Ev,
  (VTBL_ENTRY)&_ZN7S7846C52v6Ev,
  (VTBL_ENTRY)&_ZN7S7846C52v7Ev,
  (VTBL_ENTRY)&_ZN7S7846C52v8Ev,
};
extern void _ZN7S7846C43v12Ev();
extern void _ZN7S7846C43v13Ev();
extern void _ZN7S7846C43v14Ev();
extern void _ZN7S7846C43v15Ev();
extern void _ZN7S7846C43v16Ev();
static  VTBL_ENTRY _tg__ZTV7S7846C4__7S7846C3__7S7846C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(192,120),
  ABISELECT(32,12),
  ABISELECT(-288,-192),
  (VTBL_ENTRY)&(_ZTI7S7846C3[0]),
  (VTBL_ENTRY)&_ZN7S7846C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7846C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7846C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7846C43v15Ev,
  (VTBL_ENTRY)&_ZN7S7846C43v16Ev,
};
extern void _ZN7S7846C52v5Ev();
extern void _ZN7S7846C52v6Ev();
extern void _ZN7S7846C52v7Ev();
extern void _ZN7S7846C52v8Ev();
static  VTBL_ENTRY _tg__ZTV7S7846C5__7S7846C3__7S7846C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-320,-204),
  (VTBL_ENTRY)&(_ZTI7S7846C3[0]),
  (VTBL_ENTRY)&_ZN7S7846C52v5Ev,
  (VTBL_ENTRY)&_ZN7S7846C52v6Ev,
  (VTBL_ENTRY)&_ZN7S7846C52v7Ev,
  (VTBL_ENTRY)&_ZN7S7846C52v8Ev,
};
extern void _ZN7S7846C52v5Ev();
extern void _ZN7S7846C52v6Ev();
extern void _ZN7S7846C52v7Ev();
extern void _ZN7S7846C52v8Ev();
extern void _ZN7S7846C62v9Ev();
extern void _ZN7S7846C63v10Ev();
extern void _ZN7S7846C63v11Ev();
static  VTBL_ENTRY _tg__ZTV7S7846C6__7S7846C3__7S7846C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-480,-312),
  (VTBL_ENTRY)&(_ZTI7S7846C3[0]),
  (VTBL_ENTRY)&_ZN7S7846C52v5Ev,
  (VTBL_ENTRY)&_ZN7S7846C52v6Ev,
  (VTBL_ENTRY)&_ZN7S7846C52v7Ev,
  (VTBL_ENTRY)&_ZN7S7846C52v8Ev,
  (VTBL_ENTRY)&_ZN7S7846C62v9Ev,
  (VTBL_ENTRY)&_ZN7S7846C63v10Ev,
  (VTBL_ENTRY)&_ZN7S7846C63v11Ev,
};
extern void _ZN7S7846C43v12Ev();
extern void _ZN7S7846C43v13Ev();
extern void _ZN7S7846C43v14Ev();
extern void _ZN7S7846C43v15Ev();
extern void _ZN7S7846C43v16Ev();
static  VTBL_ENTRY _tg__ZTV7S7846C4__7S7846C1[] = {
  ABISELECT(192,120),
  ABISELECT(32,12),
  0,
  (VTBL_ENTRY)&(_ZTI7S7846C4[0]),
  (VTBL_ENTRY)&_ZN7S7846C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7846C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7846C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7846C43v15Ev,
  (VTBL_ENTRY)&_ZN7S7846C43v16Ev,
};
extern void _ZN7S7846C52v5Ev();
extern void _ZN7S7846C52v6Ev();
extern void _ZN7S7846C52v7Ev();
extern void _ZN7S7846C52v8Ev();
static  VTBL_ENTRY _tg__ZTV7S7846C5__7S7846C4__7S7846C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-32,-12),
  (VTBL_ENTRY)&(_ZTI7S7846C4[0]),
  (VTBL_ENTRY)&_ZN7S7846C52v5Ev,
  (VTBL_ENTRY)&_ZN7S7846C52v6Ev,
  (VTBL_ENTRY)&_ZN7S7846C52v7Ev,
  (VTBL_ENTRY)&_ZN7S7846C52v8Ev,
};
extern void _ZN7S7846C52v5Ev();
extern void _ZN7S7846C52v6Ev();
extern void _ZN7S7846C52v7Ev();
extern void _ZN7S7846C52v8Ev();
extern void _ZN7S7846C62v9Ev();
extern void _ZN7S7846C63v10Ev();
extern void _ZN7S7846C63v11Ev();
static  VTBL_ENTRY _tg__ZTV7S7846C6__7S7846C4__7S7846C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-192,-120),
  (VTBL_ENTRY)&(_ZTI7S7846C4[0]),
  (VTBL_ENTRY)&_ZN7S7846C52v5Ev,
  (VTBL_ENTRY)&_ZN7S7846C52v6Ev,
  (VTBL_ENTRY)&_ZN7S7846C52v7Ev,
  (VTBL_ENTRY)&_ZN7S7846C52v8Ev,
  (VTBL_ENTRY)&_ZN7S7846C62v9Ev,
  (VTBL_ENTRY)&_ZN7S7846C63v10Ev,
  (VTBL_ENTRY)&_ZN7S7846C63v11Ev,
};
static  VTT_ENTRY vtt_S7846C1[] = {
  {&(_ZTV7S7846C1[6]),  6,89},
  {&(_tg__ZTV7S7846C2__7S7846C1[6]),  6,10},
  {&(_tg__ZTV7S7846C3__7S7846C2__7S7846C1[20]),  20,35},
  {&(_tg__ZTV7S7846C4__7S7846C2__7S7846C1[9]),  9,14},
  {&(_tg__ZTV7S7846C5__7S7846C2__7S7846C1[6]),  6,10},
  {&(_tg__ZTV7S7846C6__7S7846C2__7S7846C1[9]),  9,16},
  {&(_ZTV7S7846C1[34]),  34,89},
  {&(_ZTV7S7846C1[58]),  58,89},
  {&(_ZTV7S7846C1[69]),  69,89},
  {&(_ZTV7S7846C1[82]),  82,89},
  {&(_tg__ZTV7S7846C3__7S7846C1[5]),  5,20},
  {&(_tg__ZTV7S7846C77S7846C3__7S7846C1[3]),  3,14},
  {&(_tg__ZTV7S7846C5__7S7846C77S7846C3__7S7846C1[6]),  6,10},
  {&(_tg__ZTV7S7846C4__7S7846C3__7S7846C1[9]),  9,14},
  {&(_tg__ZTV7S7846C5__7S7846C3__7S7846C1[6]),  6,10},
  {&(_tg__ZTV7S7846C6__7S7846C3__7S7846C1[9]),  9,16},
  {&(_tg__ZTV7S7846C4__7S7846C1[4]),  4,9},
  {&(_tg__ZTV7S7846C5__7S7846C4__7S7846C1[6]),  6,10},
  {&(_tg__ZTV7S7846C6__7S7846C4__7S7846C1[9]),  9,16},
};
extern VTBL_ENTRY _ZTI7S7846C1[];
extern  VTBL_ENTRY _ZTV7S7846C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7846C1[];
Class_Descriptor cd_S7846C1 = {  "S7846C1", // class name
  bases_S7846C1, 9,
  &(vtc_S7846C1[0]), // expected_vtbl_contents
  &(vtt_S7846C1[0]), // expected_vtt_contents
  ABISELECT(704,452), // object size
  NSPAIRA(_ZTI7S7846C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S7846C1),89, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7846C1),19, //virtual table table var
  9, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19669C3  {
  virtual void  v1(); // _ZN8S19669C32v1Ev
  ~S19669C3(); // tgen
  S19669C3(); // tgen
};
//SIG(-1 S19669C3) C1{ v1}


void  S19669C3 ::v1(){vfunc_called(this, "_ZN8S19669C32v1Ev");}
S19669C3 ::~S19669C3(){ note_dtor("S19669C3", this);} // tgen
S19669C3 ::S19669C3(){ note_ctor("S19669C3", this);} // tgen

static void Test_S19669C3()
{
  extern Class_Descriptor cd_S19669C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S19669C3, buf);
    S19669C3 *dp, &lv = *(dp=new (buf) S19669C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S19669C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19669C3)");
    test_class_info(&lv, &cd_S19669C3);
    dp->~S19669C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19669C3(Test_S19669C3, "S19669C3", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S19669C3C1Ev();
extern void _ZN8S19669C3D1Ev();
Name_Map name_map_S19669C3[] = {
  NSPAIR(_ZN8S19669C3C1Ev),
  NSPAIR(_ZN8S19669C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S19669C3[];
extern void _ZN8S19669C32v1Ev();
static  VTBL_ENTRY vtc_S19669C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19669C3[0]),
  (VTBL_ENTRY)&_ZN8S19669C32v1Ev,
};
extern VTBL_ENTRY _ZTI8S19669C3[];
extern  VTBL_ENTRY _ZTV8S19669C3[];
Class_Descriptor cd_S19669C3 = {  "S19669C3", // class name
  0,0,//no base classes
  &(vtc_S19669C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S19669C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S19669C3),3, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19669C2_nt  {
  ::S19669C3 s19669c2f0;
  void  mf19669c2(); // _ZN11S19669C2_nt9mf19669c2Ev
};
//SIG(-1 S19669C2_nt) C1{ m FC2{ v1}}


void  S19669C2_nt ::mf19669c2(){}

//skip512 S19669C2_nt

#else // __cplusplus

extern VTBL_ENTRY _ZTI11S19669C2_nt[];
VTBL_ENTRY *P__ZTI11S19669C2_nt = _ZTI11S19669C2_nt; 
Class_Descriptor cd_S19669C2_nt = {  "S19669C2_nt", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI11S19669C2_nt),ABISELECT(16,8), //typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19669C6_nt  {
  ::S1179C10_nt s19669c6f0[6];
  void  mf19669c6(); // _ZN11S19669C6_nt9mf19669c6Ev
};
//SIG(-1 S19669C6_nt) C1{ m FC2{ vd m Fc:7}[6]}


void  S19669C6_nt ::mf19669c6(){}

//skip512 S19669C6_nt

#else // __cplusplus

extern VTBL_ENTRY _ZTI11S19669C6_nt[];
VTBL_ENTRY *P__ZTI11S19669C6_nt = _ZTI11S19669C6_nt; 
Class_Descriptor cd_S19669C6_nt = {  "S19669C6_nt", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  ABISELECT(96,48), // object size
  NSPAIRA(_ZTI11S19669C6_nt),ABISELECT(16,8), //typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19669C4_nt  : virtual S1179C10_nt , S19669C6_nt , virtual S19669C3 {
  ~S19669C4_nt(); // tgen
  S19669C4_nt(); // tgen
};
//SIG(-1 S19669C4_nt) C1{ VBC2{ vd m Fc:7} BC3{ m FC2[6]} VBC4{ v1}}


S19669C4_nt ::~S19669C4_nt(){ note_dtor("S19669C4_nt", this);} // tgen
S19669C4_nt ::S19669C4_nt(){ note_ctor("S19669C4_nt", this);} // tgen

//skip512 S19669C4_nt

#else // __cplusplus

extern void _ZN11S19669C4_ntC1Ev();
extern void _ZN11S19669C4_ntD1Ev();
Name_Map name_map_S19669C4_nt[] = {
  NSPAIR(_ZN11S19669C4_ntC1Ev),
  NSPAIR(_ZN11S19669C4_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1179C10_nt;
extern VTBL_ENTRY _ZTI11S1179C10_nt[];
extern  VTBL_ENTRY _ZTV11S1179C10_nt[];
extern Class_Descriptor cd_S19669C6_nt;
extern VTBL_ENTRY _ZTI11S19669C6_nt[];
extern Class_Descriptor cd_S19669C3;
extern VTBL_ENTRY _ZTI8S19669C3[];
extern  VTBL_ENTRY _ZTV8S19669C3[];
static Base_Class bases_S19669C4_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1179C10_nt,    ABISELECT(104,52), //bcp->offset
    8, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19669C6_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19669C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI11S19669C4_nt[];
extern void _ZN8S19669C32v1Ev();
extern void _ZN11S19669C4_ntD1Ev();
extern void _ZN11S19669C4_ntD0Ev();
extern void ABISELECT(_ZTv0_n24_N11S19669C4_ntD1Ev,_ZTv0_n12_N11S19669C4_ntD1Ev)();
extern void ABISELECT(_ZThn104_N11S19669C4_ntD1Ev,_ZThn52_N11S19669C4_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N11S19669C4_ntD0Ev,_ZTv0_n12_N11S19669C4_ntD0Ev)();
extern void ABISELECT(_ZThn104_N11S19669C4_ntD0Ev,_ZThn52_N11S19669C4_ntD0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19669C4_nt[] = {
  0,
  ABISELECT(104,52),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI11S19669C4_nt[0]),
  (VTBL_ENTRY)&_ZN8S19669C32v1Ev,
  (VTBL_ENTRY)&_ZN11S19669C4_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S19669C4_ntD0Ev,
  ABISELECT(-104,-52),
  ABISELECT(-104,-52),
  (VTBL_ENTRY)&(_ZTI11S19669C4_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N11S19669C4_ntD1Ev,_ZTv0_n12_N11S19669C4_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N11S19669C4_ntD0Ev,_ZTv0_n12_N11S19669C4_ntD0Ev),
};
extern VTBL_ENTRY _ZTV11S19669C4_nt[];
static  VTT_ENTRY vtt_S19669C4_nt[] = {
  {&(_ZTV11S19669C4_nt[5]),  5,13},
  {&(_ZTV11S19669C4_nt[11]),  11,13},
  {&(_ZTV11S19669C4_nt[5]),  5,13},
};
extern VTBL_ENTRY _ZTI11S19669C4_nt[];
VTBL_ENTRY *P__ZTI11S19669C4_nt = _ZTI11S19669C4_nt; 
extern  VTBL_ENTRY _ZTV11S19669C4_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S19669C4_nt[];
static VTBL_ENTRY alt_thunk_names34[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N11S19669C4_ntD0Ev,_ZTv0_n12_N11S19669C4_ntD0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N11S19669C4_ntD0Ev,_ZThn52_N11S19669C4_ntD0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N11S19669C4_ntD1Ev,_ZTv0_n12_N11S19669C4_ntD1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N11S19669C4_ntD1Ev,_ZThn52_N11S19669C4_ntD1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19669C4_nt = {  "S19669C4_nt", // class name
  bases_S19669C4_nt, 3,
  &(vtc_S19669C4_nt[0]), // expected_vtbl_contents
  &(vtt_S19669C4_nt[0]), // expected_vtt_contents
  ABISELECT(120,60), // object size
  NSPAIRA(_ZTI11S19669C4_nt),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV11S19669C4_nt),13, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT11S19669C4_nt),3, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names34,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19669C7  : virtual S836C39 {
  ~S19669C7(); // tgen
  S19669C7(); // tgen
};
//SIG(-1 S19669C7) C1{ VBC2{ m}}


S19669C7 ::~S19669C7(){ note_dtor("S19669C7", this);} // tgen
S19669C7 ::S19669C7(){ note_ctor("S19669C7", this);} // tgen

static void Test_S19669C7()
{
  extern Class_Descriptor cd_S19669C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S19669C7, buf);
    S19669C7 *dp, &lv = *(dp=new (buf) S19669C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S19669C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19669C7)");
    check_base_class_offset(lv, (S836C39*), 0, "S19669C7");
    test_class_info(&lv, &cd_S19669C7);
    dp->~S19669C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19669C7(Test_S19669C7, "S19669C7", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S19669C7C1Ev();
extern void _ZN8S19669C7D1Ev();
Name_Map name_map_S19669C7[] = {
  NSPAIR(_ZN8S19669C7C1Ev),
  NSPAIR(_ZN8S19669C7D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S836C39;
extern VTBL_ENTRY _ZTI7S836C39[];
static Base_Class bases_S19669C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S836C39,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19669C7[];
static  VTBL_ENTRY vtc_S19669C7[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19669C7[0]),
};
extern VTBL_ENTRY _ZTV8S19669C7[];
static  VTT_ENTRY vtt_S19669C7[] = {
  {&(_ZTV8S19669C7[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S19669C7[];
extern  VTBL_ENTRY _ZTV8S19669C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19669C7[];
Class_Descriptor cd_S19669C7 = {  "S19669C7", // class name
  bases_S19669C7, 1,
  &(vtc_S19669C7[0]), // expected_vtbl_contents
  &(vtt_S19669C7[0]), // expected_vtt_contents
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S19669C7),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S19669C7),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19669C7),1, //virtual table table var
  0, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19669C11  : S19669C3 {
  ~S19669C11(); // tgen
  S19669C11(); // tgen
};
//SIG(-1 S19669C11) C1{ BC2{ v1}}


S19669C11 ::~S19669C11(){ note_dtor("S19669C11", this);} // tgen
S19669C11 ::S19669C11(){ note_ctor("S19669C11", this);} // tgen

static void Test_S19669C11()
{
  extern Class_Descriptor cd_S19669C11;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S19669C11, buf);
    S19669C11 *dp, &lv = *(dp=new (buf) S19669C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S19669C11)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19669C11)");
    check_base_class_offset(lv, (S19669C3*), 0, "S19669C11");
    test_class_info(&lv, &cd_S19669C11);
    dp->~S19669C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19669C11(Test_S19669C11, "S19669C11", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN9S19669C11C1Ev();
extern void _ZN9S19669C11D1Ev();
Name_Map name_map_S19669C11[] = {
  NSPAIR(_ZN9S19669C11C1Ev),
  NSPAIR(_ZN9S19669C11D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19669C3;
extern VTBL_ENTRY _ZTI8S19669C3[];
extern  VTBL_ENTRY _ZTV8S19669C3[];
static Base_Class bases_S19669C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19669C3,    0, //bcp->offset
    0, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S19669C11[];
extern void _ZN8S19669C32v1Ev();
static  VTBL_ENTRY vtc_S19669C11[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S19669C11[0]),
  (VTBL_ENTRY)&_ZN8S19669C32v1Ev,
};
extern VTBL_ENTRY _ZTI9S19669C11[];
extern  VTBL_ENTRY _ZTV9S19669C11[];
Class_Descriptor cd_S19669C11 = {  "S19669C11", // class name
  bases_S19669C11, 1,
  &(vtc_S19669C11[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI9S19669C11),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV9S19669C11),3, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19669C10  : S19669C3 , S19669C11 {
  virtual  ~S19669C10(); // _ZN9S19669C10D1Ev
  S19669C10(); // tgen
};
//SIG(-1 S19669C10) C1{ BC2{ v1} BC3{ BC2} vd}


 S19669C10 ::~S19669C10(){ note_dtor("S19669C10", this);}
S19669C10 ::S19669C10(){ note_ctor("S19669C10", this);} // tgen

static void Test_S19669C10()
{
  extern Class_Descriptor cd_S19669C10;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S19669C10, buf);
    S19669C10 *dp, &lv = *(dp=new (buf) S19669C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S19669C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19669C10)");
    /*is_ambiguous_... S19669C10::S19669C3 */ AMB_check_base_class_offset(lv, (S19669C3*), 0, "S19669C10");
    check_base_class_offset(lv, (S19669C3*)(S19669C11*), ABISELECT(8,4), "S19669C10");
    check_base_class_offset(lv, (S19669C11*), ABISELECT(8,4), "S19669C10");
    test_class_info(&lv, &cd_S19669C10);
    dp->~S19669C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19669C10(Test_S19669C10, "S19669C10", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN9S19669C10C1Ev();
extern void _ZN9S19669C10D1Ev();
Name_Map name_map_S19669C10[] = {
  NSPAIR(_ZN9S19669C10C1Ev),
  NSPAIR(_ZN9S19669C10D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19669C3;
extern VTBL_ENTRY _ZTI8S19669C3[];
extern  VTBL_ENTRY _ZTV8S19669C3[];
extern Class_Descriptor cd_S19669C3;
extern VTBL_ENTRY _ZTI8S19669C3[];
extern  VTBL_ENTRY _ZTV8S19669C3[];
extern Class_Descriptor cd_S19669C11;
extern VTBL_ENTRY _ZTI9S19669C11[];
extern  VTBL_ENTRY _ZTV9S19669C11[];
static Base_Class bases_S19669C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19669C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19669C3,    ABISELECT(8,4), //bcp->offset
    5, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S19669C11,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S19669C10[];
extern void _ZN8S19669C32v1Ev();
extern void _ZN9S19669C10D1Ev();
extern void _ZN9S19669C10D0Ev();
extern void _ZN8S19669C32v1Ev();
static  VTBL_ENTRY vtc_S19669C10[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S19669C10[0]),
  (VTBL_ENTRY)&_ZN8S19669C32v1Ev,
  (VTBL_ENTRY)&_ZN9S19669C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19669C10D0Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI9S19669C10[0]),
  (VTBL_ENTRY)&_ZN8S19669C32v1Ev,
};
extern VTBL_ENTRY _ZTI9S19669C10[];
extern  VTBL_ENTRY _ZTV9S19669C10[];
Class_Descriptor cd_S19669C10 = {  "S19669C10", // class name
  bases_S19669C10, 3,
  &(vtc_S19669C10[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI9S19669C10),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV9S19669C10),8, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19669C13  : S19669C3 , virtual S836C39 , S19669C11 {
  ~S19669C13(); // tgen
  S19669C13(); // tgen
};
//SIG(-1 S19669C13) C1{ BC2{ v1} VBC3{ m} BC4{ BC2}}


S19669C13 ::~S19669C13(){ note_dtor("S19669C13", this);} // tgen
S19669C13 ::S19669C13(){ note_ctor("S19669C13", this);} // tgen

static void Test_S19669C13()
{
  extern Class_Descriptor cd_S19669C13;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S19669C13, buf);
    S19669C13 *dp, &lv = *(dp=new (buf) S19669C13());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S19669C13)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19669C13)");
    /*is_ambiguous_... S19669C13::S19669C3 */ AMB_check_base_class_offset(lv, (S19669C3*), 0, "S19669C13");
    check_base_class_offset(lv, (S836C39*), 0, "S19669C13");
    check_base_class_offset(lv, (S19669C3*)(S19669C11*), ABISELECT(8,4), "S19669C13");
    check_base_class_offset(lv, (S19669C11*), ABISELECT(8,4), "S19669C13");
    test_class_info(&lv, &cd_S19669C13);
    dp->~S19669C13();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19669C13(Test_S19669C13, "S19669C13", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN9S19669C13C1Ev();
extern void _ZN9S19669C13D1Ev();
Name_Map name_map_S19669C13[] = {
  NSPAIR(_ZN9S19669C13C1Ev),
  NSPAIR(_ZN9S19669C13D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19669C3;
extern VTBL_ENTRY _ZTI8S19669C3[];
extern  VTBL_ENTRY _ZTV8S19669C3[];
extern Class_Descriptor cd_S836C39;
extern VTBL_ENTRY _ZTI7S836C39[];
extern Class_Descriptor cd_S19669C3;
extern VTBL_ENTRY _ZTI8S19669C3[];
extern  VTBL_ENTRY _ZTV8S19669C3[];
extern Class_Descriptor cd_S19669C11;
extern VTBL_ENTRY _ZTI9S19669C11[];
extern  VTBL_ENTRY _ZTV9S19669C11[];
static Base_Class bases_S19669C13[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19669C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S836C39,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19669C3,    ABISELECT(8,4), //bcp->offset
    4, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S19669C11,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S19669C13[];
extern void _ZN8S19669C32v1Ev();
extern void _ZN8S19669C32v1Ev();
static  VTBL_ENTRY vtc_S19669C13[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19669C13[0]),
  (VTBL_ENTRY)&_ZN8S19669C32v1Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI9S19669C13[0]),
  (VTBL_ENTRY)&_ZN8S19669C32v1Ev,
};
extern VTBL_ENTRY _ZTV9S19669C13[];
static  VTT_ENTRY vtt_S19669C13[] = {
  {&(_ZTV9S19669C13[3]),  3,7},
};
extern VTBL_ENTRY _ZTI9S19669C13[];
extern  VTBL_ENTRY _ZTV9S19669C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19669C13[];
Class_Descriptor cd_S19669C13 = {  "S19669C13", // class name
  bases_S19669C13, 4,
  &(vtc_S19669C13[0]), // expected_vtbl_contents
  &(vtt_S19669C13[0]), // expected_vtt_contents
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI9S19669C13),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV9S19669C13),7, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19669C13),1, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19669C12  : virtual S19669C11 , S19669C3 , S19669C13 {
  ~S19669C12(); // tgen
  S19669C12(); // tgen
};
//SIG(-1 S19669C12) C1{ VBC2{ BC3{ v1}} BC3 BC4{ BC3 VBC5{ m} BC2}}


S19669C12 ::~S19669C12(){ note_dtor("S19669C12", this);} // tgen
S19669C12 ::S19669C12(){ note_ctor("S19669C12", this);} // tgen

static void Test_S19669C12()
{
  extern Class_Descriptor cd_S19669C12;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S19669C12, buf);
    S19669C12 *dp, &lv = *(dp=new (buf) S19669C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S19669C12)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19669C12)");
    /*is_ambiguous_... S19669C12::S19669C11 */ AMB_check_base_class_offset(lv, (S19669C3*)(S19669C11*), ABISELECT(24,12), "S19669C12");
    /*is_ambiguous_... S19669C12::S19669C11 */ AMB_check_base_class_offset(lv, (S19669C11*), ABISELECT(24,12), "S19669C12");
    /*is_ambiguous_... S19669C12::S19669C3 */ AMB_check_base_class_offset(lv, (S19669C3*), 0, "S19669C12");
    /*is_ambiguous_... S19669C13::S19669C3 */ AMB_check_base_class_offset(lv, (S19669C3*)(S19669C13*), ABISELECT(8,4), "S19669C12");
    check_base_class_offset(lv, (S836C39*)(S19669C13*), 0, "S19669C12");
    check_base_class_offset(lv, (S19669C3*)(S19669C11*)(S19669C13*), ABISELECT(16,8), "S19669C12");
    check_base_class_offset(lv, (S19669C11*)(S19669C13*), ABISELECT(16,8), "S19669C12");
    check_base_class_offset(lv, (S19669C13*), ABISELECT(8,4), "S19669C12");
    test_class_info(&lv, &cd_S19669C12);
    dp->~S19669C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19669C12(Test_S19669C12, "S19669C12", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN9S19669C12C1Ev();
extern void _ZN9S19669C12D1Ev();
Name_Map name_map_S19669C12[] = {
  NSPAIR(_ZN9S19669C12C1Ev),
  NSPAIR(_ZN9S19669C12D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19669C3;
extern VTBL_ENTRY _ZTI8S19669C3[];
extern  VTBL_ENTRY _ZTV8S19669C3[];
extern Class_Descriptor cd_S19669C11;
extern VTBL_ENTRY _ZTI9S19669C11[];
extern  VTBL_ENTRY _ZTV9S19669C11[];
extern Class_Descriptor cd_S19669C3;
extern VTBL_ENTRY _ZTI8S19669C3[];
extern  VTBL_ENTRY _ZTV8S19669C3[];
extern Class_Descriptor cd_S19669C3;
extern VTBL_ENTRY _ZTI8S19669C3[];
extern  VTBL_ENTRY _ZTV8S19669C3[];
extern Class_Descriptor cd_S836C39;
extern VTBL_ENTRY _ZTI7S836C39[];
extern Class_Descriptor cd_S19669C3;
extern VTBL_ENTRY _ZTI8S19669C3[];
extern  VTBL_ENTRY _ZTV8S19669C3[];
extern Class_Descriptor cd_S19669C11;
extern VTBL_ENTRY _ZTI9S19669C11[];
extern  VTBL_ENTRY _ZTV9S19669C11[];
extern Class_Descriptor cd_S19669C13;
extern VTBL_ENTRY _ZTI9S19669C13[];
extern  VTBL_ENTRY _ZTV9S19669C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19669C13[];
static Base_Class bases_S19669C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19669C3,    ABISELECT(24,12), //bcp->offset
    12, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S19669C11,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19669C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19669C3,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S836C39,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S19669C3,    ABISELECT(16,8), //bcp->offset
    9, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S19669C11,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S19669C13,    ABISELECT(8,4), //bcp->offset
    5, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S19669C12[];
extern void _ZN8S19669C32v1Ev();
extern void _ZN8S19669C32v1Ev();
extern void _ZN8S19669C32v1Ev();
extern void _ZN8S19669C32v1Ev();
static  VTBL_ENTRY vtc_S19669C12[] = {
  0,
  ABISELECT(24,12),
  0,
  (VTBL_ENTRY)&(_ZTI9S19669C12[0]),
  (VTBL_ENTRY)&_ZN8S19669C32v1Ev,
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI9S19669C12[0]),
  (VTBL_ENTRY)&_ZN8S19669C32v1Ev,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S19669C12[0]),
  (VTBL_ENTRY)&_ZN8S19669C32v1Ev,
  0,
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI9S19669C12[0]),
  (VTBL_ENTRY)&_ZN8S19669C32v1Ev,
};
extern VTBL_ENTRY _ZTV9S19669C12[];
extern void _ZN8S19669C32v1Ev();
static  VTBL_ENTRY _tg__ZTV9S19669C13__9S19669C12[] = {
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI9S19669C13[0]),
  (VTBL_ENTRY)&_ZN8S19669C32v1Ev,
};
static  VTT_ENTRY vtt_S19669C12[] = {
  {&(_ZTV9S19669C12[4]),  4,16},
  {&(_tg__ZTV9S19669C13__9S19669C12[3]),  3,4},
  {&(_ZTV9S19669C12[15]),  15,16},
  {&(_ZTV9S19669C12[8]),  8,16},
};
extern VTBL_ENTRY _ZTI9S19669C12[];
extern  VTBL_ENTRY _ZTV9S19669C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19669C12[];
Class_Descriptor cd_S19669C12 = {  "S19669C12", // class name
  bases_S19669C12, 8,
  &(vtc_S19669C12[0]), // expected_vtbl_contents
  &(vtt_S19669C12[0]), // expected_vtt_contents
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI9S19669C12),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV9S19669C12),16, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19669C12),4, //virtual table table var
  7, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19669C14  : virtual S836C29 {
  ~S19669C14(); // tgen
  S19669C14(); // tgen
};
//SIG(-1 S19669C14) C1{ VBC2{ m}}


S19669C14 ::~S19669C14(){ note_dtor("S19669C14", this);} // tgen
S19669C14 ::S19669C14(){ note_ctor("S19669C14", this);} // tgen

static void Test_S19669C14()
{
  extern Class_Descriptor cd_S19669C14;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S19669C14, buf);
    S19669C14 *dp, &lv = *(dp=new (buf) S19669C14());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S19669C14)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19669C14)");
    check_base_class_offset(lv, (S836C29*), 0, "S19669C14");
    test_class_info(&lv, &cd_S19669C14);
    dp->~S19669C14();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19669C14(Test_S19669C14, "S19669C14", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN9S19669C14C1Ev();
extern void _ZN9S19669C14D1Ev();
Name_Map name_map_S19669C14[] = {
  NSPAIR(_ZN9S19669C14C1Ev),
  NSPAIR(_ZN9S19669C14D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S836C29;
extern VTBL_ENTRY _ZTI7S836C29[];
static Base_Class bases_S19669C14[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S836C29,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S19669C14[];
static  VTBL_ENTRY vtc_S19669C14[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19669C14[0]),
};
extern VTBL_ENTRY _ZTV9S19669C14[];
static  VTT_ENTRY vtt_S19669C14[] = {
  {&(_ZTV9S19669C14[3]),  3,3},
};
extern VTBL_ENTRY _ZTI9S19669C14[];
extern  VTBL_ENTRY _ZTV9S19669C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19669C14[];
Class_Descriptor cd_S19669C14 = {  "S19669C14", // class name
  bases_S19669C14, 1,
  &(vtc_S19669C14[0]), // expected_vtbl_contents
  &(vtt_S19669C14[0]), // expected_vtt_contents
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI9S19669C14),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV9S19669C14),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19669C14),1, //virtual table table var
  0, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19669C9  : virtual S1179C10_nt , S19669C10 , S19669C12 , S19669C14 {
  void *s19669c9f0;
  ~S19669C9(); // tgen
  S19669C9(); // tgen
};
//SIG(-1 S19669C9) C1{ VBC2{ vd m Fc:7} BC3{ BC4{ v1} BC5{ BC4} vd} BC6{ VBC5 BC4 BC7{ BC4 VBC8{ m} BC5}} BC9{ VBC10{ m}} Fp}


S19669C9 ::~S19669C9(){ note_dtor("S19669C9", this);} // tgen
S19669C9 ::S19669C9(){ note_ctor("S19669C9", this);} // tgen

static void Test_S19669C9()
{
  extern Class_Descriptor cd_S19669C9;
  void *lvp;
  {
    ABISELECT(double,int) buf[11];
    init_test(&cd_S19669C9, buf);
    S19669C9 *dp, &lv = *(dp=new (buf) S19669C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,40), "sizeof(S19669C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19669C9)");
    check_base_class_offset(lv, (S1179C10_nt*), ABISELECT(56,28), "S19669C9");
    /*is_ambiguous_... S19669C10::S19669C3 */ AMB_check_base_class_offset(lv, (S19669C3*)(S19669C10*), 0, "S19669C9");
    check_base_class_offset(lv, (S19669C3*)(S19669C11*)(S19669C10*), ABISELECT(8,4), "S19669C9");
    check_base_class_offset(lv, (S19669C11*)(S19669C10*), ABISELECT(8,4), "S19669C9");
    check_base_class_offset(lv, (S19669C10*), 0, "S19669C9");
    /*is_ambiguous_... S19669C9::S19669C11 */ AMB_check_base_class_offset(lv, (S19669C3*)(S19669C11*), ABISELECT(72,36), "S19669C9");
    /*is_ambiguous_... S19669C12::S19669C11 */ AMB_check_base_class_offset(lv, (S19669C11*)(S19669C12*), ABISELECT(72,36), "S19669C9");
    /*is_ambiguous_... S19669C12::S19669C3 */ AMB_check_base_class_offset(lv, (S19669C3*)(S19669C12*), ABISELECT(16,8), "S19669C9");
    /*is_ambiguous_... S19669C13::S19669C3 */ AMB_check_base_class_offset(lv, (S19669C3*)(S19669C13*)(S19669C12*), ABISELECT(24,12), "S19669C9");
    check_base_class_offset(lv, (S836C39*)(S19669C13*)(S19669C12*), 0, "S19669C9");
    check_base_class_offset(lv, (S19669C3*)(S19669C11*)(S19669C13*)(S19669C12*), ABISELECT(32,16), "S19669C9");
    check_base_class_offset(lv, (S19669C11*)(S19669C13*)(S19669C12*), ABISELECT(32,16), "S19669C9");
    check_base_class_offset(lv, (S19669C13*)(S19669C12*), ABISELECT(24,12), "S19669C9");
    check_base_class_offset(lv, (S19669C12*), ABISELECT(16,8), "S19669C9");
    check_base_class_offset(lv, (S836C29*)(S19669C14*), 0, "S19669C9");
    check_base_class_offset(lv, (S19669C14*), ABISELECT(40,20), "S19669C9");
    check_field_offset(lv, s19669c9f0, ABISELECT(48,24), "S19669C9.s19669c9f0");
    test_class_info(&lv, &cd_S19669C9);
    dp->~S19669C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19669C9(Test_S19669C9, "S19669C9", ABISELECT(80,40));

#else // __cplusplus

extern void _ZN8S19669C9C1Ev();
extern void _ZN8S19669C9D1Ev();
Name_Map name_map_S19669C9[] = {
  NSPAIR(_ZN8S19669C9C1Ev),
  NSPAIR(_ZN8S19669C9D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1179C10_nt;
extern VTBL_ENTRY _ZTI11S1179C10_nt[];
extern  VTBL_ENTRY _ZTV11S1179C10_nt[];
extern Class_Descriptor cd_S19669C3;
extern VTBL_ENTRY _ZTI8S19669C3[];
extern  VTBL_ENTRY _ZTV8S19669C3[];
extern Class_Descriptor cd_S19669C3;
extern VTBL_ENTRY _ZTI8S19669C3[];
extern  VTBL_ENTRY _ZTV8S19669C3[];
extern Class_Descriptor cd_S19669C11;
extern VTBL_ENTRY _ZTI9S19669C11[];
extern  VTBL_ENTRY _ZTV9S19669C11[];
extern Class_Descriptor cd_S19669C10;
extern VTBL_ENTRY _ZTI9S19669C10[];
extern  VTBL_ENTRY _ZTV9S19669C10[];
extern Class_Descriptor cd_S19669C3;
extern VTBL_ENTRY _ZTI8S19669C3[];
extern  VTBL_ENTRY _ZTV8S19669C3[];
extern Class_Descriptor cd_S19669C11;
extern VTBL_ENTRY _ZTI9S19669C11[];
extern  VTBL_ENTRY _ZTV9S19669C11[];
extern Class_Descriptor cd_S19669C3;
extern VTBL_ENTRY _ZTI8S19669C3[];
extern  VTBL_ENTRY _ZTV8S19669C3[];
extern Class_Descriptor cd_S19669C3;
extern VTBL_ENTRY _ZTI8S19669C3[];
extern  VTBL_ENTRY _ZTV8S19669C3[];
extern Class_Descriptor cd_S836C39;
extern VTBL_ENTRY _ZTI7S836C39[];
extern Class_Descriptor cd_S19669C3;
extern VTBL_ENTRY _ZTI8S19669C3[];
extern  VTBL_ENTRY _ZTV8S19669C3[];
extern Class_Descriptor cd_S19669C11;
extern VTBL_ENTRY _ZTI9S19669C11[];
extern  VTBL_ENTRY _ZTV9S19669C11[];
extern Class_Descriptor cd_S19669C13;
extern VTBL_ENTRY _ZTI9S19669C13[];
extern  VTBL_ENTRY _ZTV9S19669C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19669C13[];
extern Class_Descriptor cd_S19669C12;
extern VTBL_ENTRY _ZTI9S19669C12[];
extern  VTBL_ENTRY _ZTV9S19669C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19669C12[];
extern Class_Descriptor cd_S836C29;
extern VTBL_ENTRY _ZTI7S836C29[];
extern Class_Descriptor cd_S19669C14;
extern VTBL_ENTRY _ZTI9S19669C14[];
extern  VTBL_ENTRY _ZTV9S19669C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19669C14[];
static Base_Class bases_S19669C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1179C10_nt,    ABISELECT(56,28), //bcp->offset
    27, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19669C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19669C3,    ABISELECT(8,4), //bcp->offset
    9, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S19669C11,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19669C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19669C3,    ABISELECT(72,36), //bcp->offset
    32, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S19669C11,    ABISELECT(72,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    13, //immediately_derived
  0, 1},
  {&cd_S19669C3,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S19669C3,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S836C39,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S19669C3,    ABISELECT(32,16), //bcp->offset
    21, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S19669C11,    ABISELECT(32,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S19669C13,    ABISELECT(24,12), //bcp->offset
    17, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S19669C12,    ABISELECT(16,8), //bcp->offset
    12, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S836C29,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    15, //immediately_derived
  0, 1},
  {&cd_S19669C14,    ABISELECT(40,20), //bcp->offset
    24, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19669C9[];
extern void _ZN8S19669C32v1Ev();
extern void _ZN8S19669C9D1Ev();
extern void _ZN8S19669C9D0Ev();
extern void _ZN8S19669C32v1Ev();
extern void _ZN8S19669C32v1Ev();
extern void _ZN8S19669C32v1Ev();
extern void _ZN8S19669C32v1Ev();
extern void ABISELECT(_ZTv0_n24_N8S19669C9D1Ev,_ZTv0_n12_N8S19669C9D1Ev)();
extern void ABISELECT(_ZThn56_N8S19669C9D1Ev,_ZThn28_N8S19669C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19669C9D0Ev,_ZTv0_n12_N8S19669C9D0Ev)();
extern void ABISELECT(_ZThn56_N8S19669C9D0Ev,_ZThn28_N8S19669C9D0Ev)() __attribute__((weak));
extern void _ZN8S19669C32v1Ev();
static  VTBL_ENTRY vtc_S19669C9[] = {
  0,
  0,
  ABISELECT(72,36),
  ABISELECT(56,28),
  0,
  (VTBL_ENTRY)&(_ZTI8S19669C9[0]),
  (VTBL_ENTRY)&_ZN8S19669C32v1Ev,
  (VTBL_ENTRY)&_ZN8S19669C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19669C9D0Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S19669C9[0]),
  (VTBL_ENTRY)&_ZN8S19669C32v1Ev,
  ABISELECT(-16,-8),
  ABISELECT(56,28),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19669C9[0]),
  (VTBL_ENTRY)&_ZN8S19669C32v1Ev,
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S19669C9[0]),
  (VTBL_ENTRY)&_ZN8S19669C32v1Ev,
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S19669C9[0]),
  (VTBL_ENTRY)&_ZN8S19669C32v1Ev,
  ABISELECT(-40,-20),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI8S19669C9[0]),
  ABISELECT(-56,-28),
  ABISELECT(-56,-28),
  (VTBL_ENTRY)&(_ZTI8S19669C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19669C9D1Ev,_ZTv0_n12_N8S19669C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19669C9D0Ev,_ZTv0_n12_N8S19669C9D0Ev),
  0,
  ABISELECT(-72,-36),
  (VTBL_ENTRY)&(_ZTI8S19669C9[0]),
  (VTBL_ENTRY)&_ZN8S19669C32v1Ev,
};
extern VTBL_ENTRY _ZTV8S19669C9[];
extern void _ZN8S19669C32v1Ev();
static  VTBL_ENTRY _tg__ZTV9S19669C12__8S19669C9[] = {
  ABISELECT(-16,-8),
  ABISELECT(56,28),
  0,
  (VTBL_ENTRY)&(_ZTI9S19669C12[0]),
  (VTBL_ENTRY)&_ZN8S19669C32v1Ev,
};
extern void _ZN8S19669C32v1Ev();
static  VTBL_ENTRY _tg__ZTV9S19669C139S19669C12__8S19669C9[] = {
  ABISELECT(-24,-12),
  0,
  (VTBL_ENTRY)&(_ZTI9S19669C13[0]),
  (VTBL_ENTRY)&_ZN8S19669C32v1Ev,
};
extern void _ZN8S19669C32v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19669C39S19669C11__9S19669C12__8S19669C9[] = {
  0,
  ABISELECT(-56,-28),
  (VTBL_ENTRY)&(_ZTI9S19669C12[0]),
  (VTBL_ENTRY)&_ZN8S19669C32v1Ev,
};
extern void _ZN8S19669C32v1Ev();
static  VTBL_ENTRY _tg__ZTV9S19669C13__9S19669C12__8S19669C9[] = {
  ABISELECT(-24,-12),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI9S19669C12[0]),
  (VTBL_ENTRY)&_ZN8S19669C32v1Ev,
};
static  VTBL_ENTRY _tg__ZTV9S19669C14__8S19669C9[] = {
  ABISELECT(-40,-20),
  0,
  (VTBL_ENTRY)&(_ZTI9S19669C14[0]),
};
static  VTT_ENTRY vtt_S19669C9[] = {
  {&(_ZTV8S19669C9[6]),  6,36},
  {&(_tg__ZTV9S19669C12__8S19669C9[4]),  4,5},
  {&(_tg__ZTV9S19669C139S19669C12__8S19669C9[3]),  3,4},
  {&(_tg__ZTV8S19669C39S19669C11__9S19669C12__8S19669C9[3]),  3,4},
  {&(_tg__ZTV9S19669C13__9S19669C12__8S19669C9[3]),  3,4},
  {&(_tg__ZTV9S19669C14__8S19669C9[3]),  3,3},
  {&(_ZTV8S19669C9[30]),  30,36},
  {&(_ZTV8S19669C9[16]),  16,36},
  {&(_ZTV8S19669C9[35]),  35,36},
  {&(_ZTV8S19669C9[20]),  20,36},
  {&(_ZTV8S19669C9[27]),  27,36},
};
extern VTBL_ENTRY _ZTI8S19669C9[];
extern  VTBL_ENTRY _ZTV8S19669C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19669C9[];
static VTBL_ENTRY alt_thunk_names35[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19669C9D0Ev,_ZTv0_n12_N8S19669C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S19669C9D0Ev,_ZThn28_N8S19669C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19669C9D1Ev,_ZTv0_n12_N8S19669C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S19669C9D1Ev,_ZThn28_N8S19669C9D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19669C9 = {  "S19669C9", // class name
  bases_S19669C9, 16,
  &(vtc_S19669C9[0]), // expected_vtbl_contents
  &(vtt_S19669C9[0]), // expected_vtt_contents
  ABISELECT(80,40), // object size
  NSPAIRA(_ZTI8S19669C9),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S19669C9),36, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19669C9),11, //virtual table table var
  14, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names35,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19669C17  : S836C39 , virtual S19669C11 {
  int s19669c17f0;
  ~S19669C17(); // tgen
  S19669C17(); // tgen
};
//SIG(-1 S19669C17) C1{ BC2{ m} VBC3{ BC4{ v1}} Fi}


S19669C17 ::~S19669C17(){ note_dtor("S19669C17", this);} // tgen
S19669C17 ::S19669C17(){ note_ctor("S19669C17", this);} // tgen

static void Test_S19669C17()
{
  extern Class_Descriptor cd_S19669C17;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S19669C17, buf);
    S19669C17 *dp, &lv = *(dp=new (buf) S19669C17());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S19669C17)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19669C17)");
    check_base_class_offset(lv, (S836C39*), 0, "S19669C17");
    check_base_class_offset(lv, (S19669C3*)(S19669C11*), 0, "S19669C17");
    check_base_class_offset(lv, (S19669C11*), 0, "S19669C17");
    check_field_offset(lv, s19669c17f0, ABISELECT(8,4), "S19669C17.s19669c17f0");
    test_class_info(&lv, &cd_S19669C17);
    dp->~S19669C17();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19669C17(Test_S19669C17, "S19669C17", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN9S19669C17C1Ev();
extern void _ZN9S19669C17D1Ev();
Name_Map name_map_S19669C17[] = {
  NSPAIR(_ZN9S19669C17C1Ev),
  NSPAIR(_ZN9S19669C17D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S836C39;
extern VTBL_ENTRY _ZTI7S836C39[];
extern Class_Descriptor cd_S19669C3;
extern VTBL_ENTRY _ZTI8S19669C3[];
extern  VTBL_ENTRY _ZTV8S19669C3[];
extern Class_Descriptor cd_S19669C11;
extern VTBL_ENTRY _ZTI9S19669C11[];
extern  VTBL_ENTRY _ZTV9S19669C11[];
static Base_Class bases_S19669C17[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S836C39,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19669C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S19669C11,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S19669C17[];
extern void _ZN8S19669C32v1Ev();
static  VTBL_ENTRY vtc_S19669C17[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19669C17[0]),
  (VTBL_ENTRY)&_ZN8S19669C32v1Ev,
};
extern VTBL_ENTRY _ZTV9S19669C17[];
static  VTT_ENTRY vtt_S19669C17[] = {
  {&(_ZTV9S19669C17[4]),  4,5},
  {&(_ZTV9S19669C17[4]),  4,5},
};
extern VTBL_ENTRY _ZTI9S19669C17[];
extern  VTBL_ENTRY _ZTV9S19669C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19669C17[];
Class_Descriptor cd_S19669C17 = {  "S19669C17", // class name
  bases_S19669C17, 3,
  &(vtc_S19669C17[0]), // expected_vtbl_contents
  &(vtt_S19669C17[0]), // expected_vtt_contents
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI9S19669C17),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV9S19669C17),5, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19669C17),2, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19669C16  : S836C29 , virtual S19669C17 {
  virtual  ~S19669C16(); // _ZN9S19669C16D2Ev
  S19669C16(); // tgen
};
//SIG(-1 S19669C16) C1{ BC2{ m} VBC3{ BC4{ m} VBC5{ BC6{ v1}} Fi} vd}


 S19669C16 ::~S19669C16(){ note_dtor("S19669C16", this);}
S19669C16 ::S19669C16(){ note_ctor("S19669C16", this);} // tgen

static void Test_S19669C16()
{
  extern Class_Descriptor cd_S19669C16;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S19669C16, buf);
    S19669C16 *dp, &lv = *(dp=new (buf) S19669C16());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S19669C16)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19669C16)");
    check_base_class_offset(lv, (S836C29*), 0, "S19669C16");
    check_base_class_offset(lv, (S836C39*)(S19669C17*), ABISELECT(8,4), "S19669C16");
    check_base_class_offset(lv, (S19669C3*)(S19669C11*), 0, "S19669C16");
    check_base_class_offset(lv, (S19669C11*)(S19669C17*), 0, "S19669C16");
    check_base_class_offset(lv, (S19669C17*), ABISELECT(8,4), "S19669C16");
    test_class_info(&lv, &cd_S19669C16);
    dp->~S19669C16();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19669C16(Test_S19669C16, "S19669C16", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN9S19669C16C1Ev();
extern void _ZN9S19669C16D2Ev();
Name_Map name_map_S19669C16[] = {
  NSPAIR(_ZN9S19669C16C1Ev),
  NSPAIR(_ZN9S19669C16D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S836C29;
extern VTBL_ENTRY _ZTI7S836C29[];
extern Class_Descriptor cd_S836C39;
extern VTBL_ENTRY _ZTI7S836C39[];
extern Class_Descriptor cd_S19669C3;
extern VTBL_ENTRY _ZTI8S19669C3[];
extern  VTBL_ENTRY _ZTV8S19669C3[];
extern Class_Descriptor cd_S19669C11;
extern VTBL_ENTRY _ZTI9S19669C11[];
extern  VTBL_ENTRY _ZTV9S19669C11[];
extern Class_Descriptor cd_S19669C17;
extern VTBL_ENTRY _ZTI9S19669C17[];
extern  VTBL_ENTRY _ZTV9S19669C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19669C17[];
static Base_Class bases_S19669C16[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S836C29,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S836C39,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19669C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S19669C11,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S19669C17,    ABISELECT(8,4), //bcp->offset
    8, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S19669C16[];
extern void _ZN8S19669C32v1Ev();
extern void _ZN9S19669C16D1Ev();
extern void _ZN9S19669C16D0Ev();
extern void _ZN8S19669C32v1Ev();
static  VTBL_ENTRY vtc_S19669C16[] = {
  0,
  ABISELECT(8,4),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19669C16[0]),
  (VTBL_ENTRY)&_ZN8S19669C32v1Ev,
  (VTBL_ENTRY)&_ZN9S19669C16D1Ev,
  (VTBL_ENTRY)&_ZN9S19669C16D0Ev,
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI9S19669C16[0]),
  (VTBL_ENTRY)&_ZN8S19669C32v1Ev,
};
extern VTBL_ENTRY _ZTV9S19669C16[];
extern void _ZN8S19669C32v1Ev();
static  VTBL_ENTRY _tg__ZTV9S19669C17__9S19669C16[] = {
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI9S19669C17[0]),
  (VTBL_ENTRY)&_ZN8S19669C32v1Ev,
};
extern void _ZN8S19669C32v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19669C39S19669C11__9S19669C17__9S19669C16[] = {
  ABISELECT(8,4),
  (VTBL_ENTRY)&(_ZTI9S19669C17[0]),
  (VTBL_ENTRY)&_ZN8S19669C32v1Ev,
};
static  VTT_ENTRY vtt_S19669C16[] = {
  {&(_ZTV9S19669C16[5]),  5,13},
  {&(_ZTV9S19669C16[12]),  12,13},
  {&(_ZTV9S19669C16[5]),  5,13},
  {&(_tg__ZTV9S19669C17__9S19669C16[4]),  4,5},
  {&(_tg__ZTV8S19669C39S19669C11__9S19669C17__9S19669C16[2]),  2,3},
};
extern VTBL_ENTRY _ZTI9S19669C16[];
extern  VTBL_ENTRY _ZTV9S19669C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19669C16[];
Class_Descriptor cd_S19669C16 = {  "S19669C16", // class name
  bases_S19669C16, 5,
  &(vtc_S19669C16[0]), // expected_vtbl_contents
  &(vtt_S19669C16[0]), // expected_vtt_contents
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI9S19669C16),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV9S19669C16),13, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19669C16),5, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19669C1  : virtual S19669C2_nt , S19669C4_nt , S19669C7 , virtual S19669C9 , virtual S19669C16 {
  void *s19669c1f0;
  virtual  ~S19669C1(); // _ZN8S19669C1D2Ev
  S19669C1(); // tgen
};
//SIG(1 S19669C1) C1{ VBC2{ m FC3{ v1}} BC4{ VBC5{ vd m Fc:7} BC6{ m FC5[6]} VBC3} BC7{ VBC8{ m}} VBC9{ VBC5 BC10{ BC3 BC11{ BC3} vd} BC12{ VBC11 BC3 BC13{ BC3 VBC8 BC11}} BC14{ VBC15{ m}} Fp} VBC16{ BC15 VBC17{ BC8 VBC11 Fi} vd} vd Fp}


 S19669C1 ::~S19669C1(){ note_dtor("S19669C1", this);}
S19669C1 ::S19669C1(){ note_ctor("S19669C1", this);} // tgen

static void Test_S19669C1()
{
  extern Class_Descriptor cd_S19669C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[29];
    init_test(&cd_S19669C1, buf);
    S19669C1 *dp, &lv = *(dp=new (buf) S19669C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(224,112), "sizeof(S19669C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19669C1)");
    check_base_class_offset(lv, (S19669C2_nt*), ABISELECT(120,60), "S19669C1");
    check_base_class_offset(lv, (S1179C10_nt*)(S19669C4_nt*), ABISELECT(128,64), "S19669C1");
    check_base_class_offset(lv, (S1179C10_nt*)(S19669C9*), ABISELECT(128,64), "S19669C1");
    check_base_class_offset(lv, (S19669C6_nt*)(S19669C4_nt*), ABISELECT(8,4), "S19669C1");
    check_base_class_offset(lv, (S19669C3*)(S19669C4_nt*), 0, "S19669C1");
    check_base_class_offset(lv, (S19669C4_nt*), 0, "S19669C1");
    check_base_class_offset(lv, (S836C39*)(S19669C7*), 0, "S19669C1");
    check_base_class_offset(lv, (S836C39*)(S19669C13*)(S19669C12*)(S19669C9*), 0, "S19669C1");
    check_base_class_offset(lv, (S19669C7*), ABISELECT(104,52), "S19669C1");
    /*is_ambiguous_... S19669C10::S19669C3 */ AMB_check_base_class_offset(lv, (S19669C3*)(S19669C10*)(S19669C9*), ABISELECT(144,72), "S19669C1");
    check_base_class_offset(lv, (S19669C3*)(S19669C11*)(S19669C10*)(S19669C9*), ABISELECT(152,76), "S19669C1");
    check_base_class_offset(lv, (S19669C11*)(S19669C10*)(S19669C9*), ABISELECT(152,76), "S19669C1");
    check_base_class_offset(lv, (S19669C10*)(S19669C9*), ABISELECT(144,72), "S19669C1");
    /*is_ambiguous_... S19669C1::S19669C11 */ AMB_check_base_class_offset(lv, (S19669C3*)(S19669C11*), ABISELECT(200,100), "S19669C1");
    /*is_ambiguous_... S19669C12::S19669C11 */ AMB_check_base_class_offset(lv, (S19669C11*)(S19669C12*)(S19669C9*), ABISELECT(200,100), "S19669C1");
    check_base_class_offset(lv, (S19669C11*)(S19669C17*), ABISELECT(200,100), "S19669C1");
    /*is_ambiguous_... S19669C12::S19669C3 */ AMB_check_base_class_offset(lv, (S19669C3*)(S19669C12*)(S19669C9*), ABISELECT(160,80), "S19669C1");
    /*is_ambiguous_... S19669C13::S19669C3 */ AMB_check_base_class_offset(lv, (S19669C3*)(S19669C13*)(S19669C12*)(S19669C9*), ABISELECT(168,84), "S19669C1");
    check_base_class_offset(lv, (S19669C3*)(S19669C11*)(S19669C13*)(S19669C12*)(S19669C9*), ABISELECT(176,88), "S19669C1");
    check_base_class_offset(lv, (S19669C11*)(S19669C13*)(S19669C12*)(S19669C9*), ABISELECT(176,88), "S19669C1");
    check_base_class_offset(lv, (S19669C13*)(S19669C12*)(S19669C9*), ABISELECT(168,84), "S19669C1");
    check_base_class_offset(lv, (S19669C12*)(S19669C9*), ABISELECT(160,80), "S19669C1");
    check_base_class_offset(lv, (S836C29*)(S19669C14*)(S19669C9*), 0, "S19669C1");
    check_base_class_offset(lv, (S19669C14*)(S19669C9*), ABISELECT(184,92), "S19669C1");
    check_base_class_offset(lv, (S19669C9*), ABISELECT(144,72), "S19669C1");
    check_base_class_offset(lv, (S836C29*)(S19669C16*), ABISELECT(200,100), "S19669C1");
    check_base_class_offset(lv, (S836C39*)(S19669C17*), ABISELECT(208,104), "S19669C1");
    check_base_class_offset(lv, (S19669C17*)(S19669C16*), ABISELECT(208,104), "S19669C1");
    check_base_class_offset(lv, (S19669C16*), ABISELECT(200,100), "S19669C1");
    check_field_offset(lv, s19669c1f0, ABISELECT(112,56), "S19669C1.s19669c1f0");
    test_class_info(&lv, &cd_S19669C1);
    dp->~S19669C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19669C1(Test_S19669C1, "S19669C1", ABISELECT(224,112));

#else // __cplusplus

extern void _ZN8S19669C1C1Ev();
extern void _ZN8S19669C1D2Ev();
Name_Map name_map_S19669C1[] = {
  NSPAIR(_ZN8S19669C1C1Ev),
  NSPAIR(_ZN8S19669C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19669C2_nt;
extern VTBL_ENTRY _ZTI11S19669C2_nt[];
extern Class_Descriptor cd_S1179C10_nt;
extern VTBL_ENTRY _ZTI11S1179C10_nt[];
extern  VTBL_ENTRY _ZTV11S1179C10_nt[];
extern Class_Descriptor cd_S19669C6_nt;
extern VTBL_ENTRY _ZTI11S19669C6_nt[];
extern Class_Descriptor cd_S19669C3;
extern VTBL_ENTRY _ZTI8S19669C3[];
extern  VTBL_ENTRY _ZTV8S19669C3[];
extern Class_Descriptor cd_S19669C4_nt;
extern VTBL_ENTRY _ZTI11S19669C4_nt[];
extern  VTBL_ENTRY _ZTV11S19669C4_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S19669C4_nt[];
extern Class_Descriptor cd_S836C39;
extern VTBL_ENTRY _ZTI7S836C39[];
extern Class_Descriptor cd_S19669C7;
extern VTBL_ENTRY _ZTI8S19669C7[];
extern  VTBL_ENTRY _ZTV8S19669C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19669C7[];
extern Class_Descriptor cd_S19669C3;
extern VTBL_ENTRY _ZTI8S19669C3[];
extern  VTBL_ENTRY _ZTV8S19669C3[];
extern Class_Descriptor cd_S19669C3;
extern VTBL_ENTRY _ZTI8S19669C3[];
extern  VTBL_ENTRY _ZTV8S19669C3[];
extern Class_Descriptor cd_S19669C11;
extern VTBL_ENTRY _ZTI9S19669C11[];
extern  VTBL_ENTRY _ZTV9S19669C11[];
extern Class_Descriptor cd_S19669C10;
extern VTBL_ENTRY _ZTI9S19669C10[];
extern  VTBL_ENTRY _ZTV9S19669C10[];
extern Class_Descriptor cd_S19669C3;
extern VTBL_ENTRY _ZTI8S19669C3[];
extern  VTBL_ENTRY _ZTV8S19669C3[];
extern Class_Descriptor cd_S19669C11;
extern VTBL_ENTRY _ZTI9S19669C11[];
extern  VTBL_ENTRY _ZTV9S19669C11[];
extern Class_Descriptor cd_S19669C3;
extern VTBL_ENTRY _ZTI8S19669C3[];
extern  VTBL_ENTRY _ZTV8S19669C3[];
extern Class_Descriptor cd_S19669C3;
extern VTBL_ENTRY _ZTI8S19669C3[];
extern  VTBL_ENTRY _ZTV8S19669C3[];
extern Class_Descriptor cd_S19669C3;
extern VTBL_ENTRY _ZTI8S19669C3[];
extern  VTBL_ENTRY _ZTV8S19669C3[];
extern Class_Descriptor cd_S19669C11;
extern VTBL_ENTRY _ZTI9S19669C11[];
extern  VTBL_ENTRY _ZTV9S19669C11[];
extern Class_Descriptor cd_S19669C13;
extern VTBL_ENTRY _ZTI9S19669C13[];
extern  VTBL_ENTRY _ZTV9S19669C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19669C13[];
extern Class_Descriptor cd_S19669C12;
extern VTBL_ENTRY _ZTI9S19669C12[];
extern  VTBL_ENTRY _ZTV9S19669C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19669C12[];
extern Class_Descriptor cd_S836C29;
extern VTBL_ENTRY _ZTI7S836C29[];
extern Class_Descriptor cd_S19669C14;
extern VTBL_ENTRY _ZTI9S19669C14[];
extern  VTBL_ENTRY _ZTV9S19669C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19669C14[];
extern Class_Descriptor cd_S19669C9;
extern VTBL_ENTRY _ZTI8S19669C9[];
extern  VTBL_ENTRY _ZTV8S19669C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19669C9[];
extern Class_Descriptor cd_S836C29;
extern VTBL_ENTRY _ZTI7S836C29[];
extern Class_Descriptor cd_S836C39;
extern VTBL_ENTRY _ZTI7S836C39[];
extern Class_Descriptor cd_S19669C17;
extern VTBL_ENTRY _ZTI9S19669C17[];
extern  VTBL_ENTRY _ZTV9S19669C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19669C17[];
extern Class_Descriptor cd_S19669C16;
extern VTBL_ENTRY _ZTI9S19669C16[];
extern  VTBL_ENTRY _ZTV9S19669C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19669C16[];
static Base_Class bases_S19669C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19669C2_nt,    ABISELECT(120,60), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S1179C10_nt,    ABISELECT(128,64), //bcp->offset
    18, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S19669C6_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19669C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S19669C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S836C39,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S19669C7,    ABISELECT(104,52), //bcp->offset
    15, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    20, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19669C3,    ABISELECT(144,72), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S19669C3,    ABISELECT(152,76), //bcp->offset
    34, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S19669C11,    ABISELECT(152,76), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S19669C10,    ABISELECT(144,72), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S19669C3,    ABISELECT(200,100), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S19669C11,    ABISELECT(200,100), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    18, //immediately_derived
  0, 1},
  {&cd_S19669C3,    ABISELECT(160,80), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S19669C3,    ABISELECT(168,84), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S19669C3,    ABISELECT(176,88), //bcp->offset
    46, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S19669C11,    ABISELECT(176,88), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S19669C13,    ABISELECT(168,84), //bcp->offset
    42, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S19669C12,    ABISELECT(160,80), //bcp->offset
    37, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S836C29,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    20, //immediately_derived
  0, 1},
  {&cd_S19669C14,    ABISELECT(184,92), //bcp->offset
    49, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S19669C9,    ABISELECT(144,72), //bcp->offset
    23, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S836C29,    ABISELECT(200,100), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    25, //immediately_derived
  0, 0},
  {&cd_S836C39,    ABISELECT(208,104), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S19669C17,    ABISELECT(208,104), //bcp->offset
    61, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    32, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    25, //immediately_derived
  0, 1},
  {&cd_S19669C16,    ABISELECT(200,100), //bcp->offset
    52, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    29, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19669C1[];
extern void _ZN8S19669C32v1Ev();
extern void _ZN8S19669C1D1Ev();
extern void _ZN8S19669C1D0Ev();
extern void ABISELECT(_ZTv0_n24_N8S19669C1D1Ev,_ZTv0_n12_N8S19669C1D1Ev)();
extern void ABISELECT(_ZThn128_N8S19669C1D1Ev,_ZThn64_N8S19669C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19669C1D0Ev,_ZTv0_n12_N8S19669C1D0Ev)();
extern void ABISELECT(_ZThn128_N8S19669C1D0Ev,_ZThn64_N8S19669C1D0Ev)() __attribute__((weak));
extern void _ZN8S19669C32v1Ev();
extern void ABISELECT(_ZTv0_n64_N8S19669C1D1Ev,_ZTv0_n32_N8S19669C1D1Ev)();
extern void ABISELECT(_ZThn144_N8S19669C1D1Ev,_ZThn72_N8S19669C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S19669C1D0Ev,_ZTv0_n32_N8S19669C1D0Ev)();
extern void ABISELECT(_ZThn144_N8S19669C1D0Ev,_ZThn72_N8S19669C1D0Ev)() __attribute__((weak));
extern void _ZN8S19669C32v1Ev();
extern void _ZN8S19669C32v1Ev();
extern void _ZN8S19669C32v1Ev();
extern void _ZN8S19669C32v1Ev();
extern void _ZN8S19669C32v1Ev();
extern void ABISELECT(_ZTv0_n48_N8S19669C1D1Ev,_ZTv0_n24_N8S19669C1D1Ev)();
extern void ABISELECT(_ZThn200_N8S19669C1D1Ev,_ZThn100_N8S19669C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19669C1D0Ev,_ZTv0_n24_N8S19669C1D0Ev)();
extern void ABISELECT(_ZThn200_N8S19669C1D0Ev,_ZThn100_N8S19669C1D0Ev)() __attribute__((weak));
extern void _ZN8S19669C32v1Ev();
static  VTBL_ENTRY vtc_S19669C1[] = {
  ABISELECT(208,104),
  ABISELECT(200,100),
  0,
  ABISELECT(200,100),
  ABISELECT(144,72),
  0,
  ABISELECT(120,60),
  0,
  ABISELECT(128,64),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19669C1[0]),
  (VTBL_ENTRY)&_ZN8S19669C32v1Ev,
  (VTBL_ENTRY)&_ZN8S19669C1D1Ev,
  (VTBL_ENTRY)&_ZN8S19669C1D0Ev,
  ABISELECT(-104,-52),
  ABISELECT(-104,-52),
  (VTBL_ENTRY)&(_ZTI8S19669C1[0]),
  ABISELECT(-128,-64),
  ABISELECT(-128,-64),
  (VTBL_ENTRY)&(_ZTI8S19669C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19669C1D1Ev,_ZTv0_n12_N8S19669C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19669C1D0Ev,_ZTv0_n12_N8S19669C1D0Ev),
  ABISELECT(-144,-72),
  0,
  ABISELECT(-144,-72),
  ABISELECT(-144,-72),
  ABISELECT(56,28),
  ABISELECT(-16,-8),
  ABISELECT(-144,-72),
  (VTBL_ENTRY)&(_ZTI8S19669C1[0]),
  (VTBL_ENTRY)&_ZN8S19669C32v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S19669C1D1Ev,_ZTv0_n32_N8S19669C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S19669C1D0Ev,_ZTv0_n32_N8S19669C1D0Ev),
  ABISELECT(-152,-76),
  (VTBL_ENTRY)&(_ZTI8S19669C1[0]),
  (VTBL_ENTRY)&_ZN8S19669C32v1Ev,
  ABISELECT(-160,-80),
  ABISELECT(40,20),
  ABISELECT(-160,-80),
  (VTBL_ENTRY)&(_ZTI8S19669C1[0]),
  (VTBL_ENTRY)&_ZN8S19669C32v1Ev,
  ABISELECT(-168,-84),
  ABISELECT(-168,-84),
  (VTBL_ENTRY)&(_ZTI8S19669C1[0]),
  (VTBL_ENTRY)&_ZN8S19669C32v1Ev,
  ABISELECT(-176,-88),
  (VTBL_ENTRY)&(_ZTI8S19669C1[0]),
  (VTBL_ENTRY)&_ZN8S19669C32v1Ev,
  ABISELECT(-184,-92),
  ABISELECT(-184,-92),
  (VTBL_ENTRY)&(_ZTI8S19669C1[0]),
  ABISELECT(-200,-100),
  0,
  ABISELECT(8,4),
  0,
  ABISELECT(-200,-100),
  (VTBL_ENTRY)&(_ZTI8S19669C1[0]),
  (VTBL_ENTRY)&_ZN8S19669C32v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19669C1D1Ev,_ZTv0_n24_N8S19669C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19669C1D0Ev,_ZTv0_n24_N8S19669C1D0Ev),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-208,-104),
  (VTBL_ENTRY)&(_ZTI8S19669C1[0]),
  (VTBL_ENTRY)&_ZN8S19669C32v1Ev,
};
extern VTBL_ENTRY _ZTV8S19669C1[];
extern void _ZN8S19669C32v1Ev();
extern void _ZN11S19669C4_ntD1Ev();
extern void _ZN11S19669C4_ntD0Ev();
static  VTBL_ENTRY _tg__ZTV11S19669C4_nt__8S19669C1[] = {
  0,
  ABISELECT(128,64),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI11S19669C4_nt[0]),
  (VTBL_ENTRY)&_ZN8S19669C32v1Ev,
  (VTBL_ENTRY)&_ZN11S19669C4_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S19669C4_ntD0Ev,
};
extern void ABISELECT(_ZTv0_n24_N11S19669C4_ntD1Ev,_ZTv0_n12_N11S19669C4_ntD1Ev)();
extern void ABISELECT(_ZThn128_N11S19669C4_ntD1Ev,_ZThn64_N11S19669C4_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N11S19669C4_ntD0Ev,_ZTv0_n12_N11S19669C4_ntD0Ev)();
extern void ABISELECT(_ZThn128_N11S19669C4_ntD0Ev,_ZThn64_N11S19669C4_ntD0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV11S1179C10_nt__11S19669C4_nt__8S19669C1[] = {
  ABISELECT(-128,-64),
  ABISELECT(-128,-64),
  (VTBL_ENTRY)&(_ZTI11S19669C4_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N11S19669C4_ntD1Ev,_ZTv0_n12_N11S19669C4_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N11S19669C4_ntD0Ev,_ZTv0_n12_N11S19669C4_ntD0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19669C7__8S19669C1[] = {
  ABISELECT(-104,-52),
  0,
  (VTBL_ENTRY)&(_ZTI8S19669C7[0]),
};
extern void _ZN8S19669C32v1Ev();
extern void _ZN8S19669C9D1Ev();
extern void _ZN8S19669C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19669C9__8S19669C1[] = {
  ABISELECT(-144,-72),
  ABISELECT(-144,-72),
  ABISELECT(56,28),
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI8S19669C9[0]),
  (VTBL_ENTRY)&_ZN8S19669C32v1Ev,
  (VTBL_ENTRY)&_ZN8S19669C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19669C9D0Ev,
};
extern void _ZN8S19669C32v1Ev();
static  VTBL_ENTRY _tg__ZTV9S19669C128S19669C9__8S19669C1[] = {
  ABISELECT(-160,-80),
  ABISELECT(40,20),
  0,
  (VTBL_ENTRY)&(_ZTI9S19669C12[0]),
  (VTBL_ENTRY)&_ZN8S19669C32v1Ev,
};
extern void _ZN8S19669C32v1Ev();
static  VTBL_ENTRY _tg__ZTV9S19669C139S19669C128S19669C9__8S19669C1[] = {
  ABISELECT(-168,-84),
  0,
  (VTBL_ENTRY)&(_ZTI9S19669C13[0]),
  (VTBL_ENTRY)&_ZN8S19669C32v1Ev,
};
extern void _ZN8S19669C32v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19669C39S19669C11__9S19669C128S19669C9__8S19669C1[] = {
  0,
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI9S19669C12[0]),
  (VTBL_ENTRY)&_ZN8S19669C32v1Ev,
};
extern void _ZN8S19669C32v1Ev();
static  VTBL_ENTRY _tg__ZTV9S19669C13__9S19669C128S19669C9__8S19669C1[] = {
  ABISELECT(-168,-84),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI9S19669C12[0]),
  (VTBL_ENTRY)&_ZN8S19669C32v1Ev,
};
static  VTBL_ENTRY _tg__ZTV9S19669C148S19669C9__8S19669C1[] = {
  ABISELECT(-184,-92),
  0,
  (VTBL_ENTRY)&(_ZTI9S19669C14[0]),
};
extern void ABISELECT(_ZTv0_n24_N8S19669C9D1Ev,_ZTv0_n12_N8S19669C9D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19669C9D0Ev,_ZTv0_n12_N8S19669C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV11S1179C10_nt__8S19669C9__8S19669C1[] = {
  ABISELECT(16,8),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI8S19669C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19669C9D1Ev,_ZTv0_n12_N8S19669C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19669C9D0Ev,_ZTv0_n12_N8S19669C9D0Ev),
};
extern void _ZN8S19669C32v1Ev();
static  VTBL_ENTRY _tg__ZTV9S19669C12__8S19669C9__8S19669C1[] = {
  ABISELECT(-160,-80),
  ABISELECT(40,20),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19669C9[0]),
  (VTBL_ENTRY)&_ZN8S19669C32v1Ev,
};
extern void _ZN8S19669C32v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19669C39S19669C11__A2__8S19669C9__8S19669C1[] = {
  0,
  ABISELECT(-56,-28),
  (VTBL_ENTRY)&(_ZTI8S19669C9[0]),
  (VTBL_ENTRY)&_ZN8S19669C32v1Ev,
};
extern void _ZN8S19669C32v1Ev();
static  VTBL_ENTRY _tg__ZTV9S19669C139S19669C12__8S19669C9__8S19669C1[] = {
  ABISELECT(-168,-84),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S19669C9[0]),
  (VTBL_ENTRY)&_ZN8S19669C32v1Ev,
};
static  VTBL_ENTRY _tg__ZTV9S19669C14__8S19669C9__8S19669C1[] = {
  ABISELECT(-184,-92),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI8S19669C9[0]),
};
extern void _ZN8S19669C32v1Ev();
extern void _ZN9S19669C16D1Ev();
extern void _ZN9S19669C16D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19669C16__8S19669C1[] = {
  0,
  ABISELECT(8,4),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19669C16[0]),
  (VTBL_ENTRY)&_ZN8S19669C32v1Ev,
  (VTBL_ENTRY)&_ZN9S19669C16D1Ev,
  (VTBL_ENTRY)&_ZN9S19669C16D0Ev,
};
extern void _ZN8S19669C32v1Ev();
static  VTBL_ENTRY _tg__ZTV9S19669C17__9S19669C16__8S19669C1[] = {
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI9S19669C16[0]),
  (VTBL_ENTRY)&_ZN8S19669C32v1Ev,
};
extern void _ZN8S19669C32v1Ev();
static  VTBL_ENTRY _tg__ZTV9S19669C17__8S19669C1[] = {
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI9S19669C17[0]),
  (VTBL_ENTRY)&_ZN8S19669C32v1Ev,
};
extern void _ZN8S19669C32v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19669C39S19669C11__9S19669C17__8S19669C1[] = {
  ABISELECT(8,4),
  (VTBL_ENTRY)&(_ZTI9S19669C17[0]),
  (VTBL_ENTRY)&_ZN8S19669C32v1Ev,
};
static  VTT_ENTRY vtt_S19669C1[] = {
  {&(_ZTV8S19669C1[12]),  12,66},
  {&(_tg__ZTV11S19669C4_nt__8S19669C1[5]),  5,8},
  {&(_tg__ZTV11S1179C10_nt__11S19669C4_nt__8S19669C1[3]),  3,5},
  {&(_tg__ZTV11S19669C4_nt__8S19669C1[5]),  5,8},
  {&(_tg__ZTV8S19669C7__8S19669C1[3]),  3,3},
  {&(_ZTV8S19669C1[21]),  21,66},
  {&(_ZTV8S19669C1[12]),  12,66},
  {&(_ZTV8S19669C1[18]),  18,66},
  {&(_ZTV8S19669C1[31]),  31,66},
  {&(_ZTV8S19669C1[36]),  36,66},
  {&(_ZTV8S19669C1[41]),  41,66},
  {&(_ZTV8S19669C1[58]),  58,66},
  {&(_ZTV8S19669C1[45]),  45,66},
  {&(_ZTV8S19669C1[48]),  48,66},
  {&(_ZTV8S19669C1[52]),  52,66},
  {&(_ZTV8S19669C1[58]),  58,66},
  {&(_ZTV8S19669C1[65]),  65,66},
  {&(_tg__ZTV8S19669C9__8S19669C1[6]),  6,9},
  {&(_tg__ZTV9S19669C128S19669C9__8S19669C1[4]),  4,5},
  {&(_tg__ZTV9S19669C139S19669C128S19669C9__8S19669C1[3]),  3,4},
  {&(_tg__ZTV8S19669C39S19669C11__9S19669C128S19669C9__8S19669C1[3]),  3,4},
  {&(_tg__ZTV9S19669C13__9S19669C128S19669C9__8S19669C1[3]),  3,4},
  {&(_tg__ZTV9S19669C148S19669C9__8S19669C1[3]),  3,3},
  {&(_tg__ZTV11S1179C10_nt__8S19669C9__8S19669C1[3]),  3,5},
  {&(_tg__ZTV9S19669C12__8S19669C9__8S19669C1[4]),  4,5},
  {&(_tg__ZTV8S19669C39S19669C11__A2__8S19669C9__8S19669C1[3]),  3,4},
  {&(_tg__ZTV9S19669C139S19669C12__8S19669C9__8S19669C1[3]),  3,4},
  {&(_tg__ZTV9S19669C14__8S19669C9__8S19669C1[3]),  3,3},
  {&(_tg__ZTV9S19669C16__8S19669C1[5]),  5,8},
  {&(_tg__ZTV9S19669C17__9S19669C16__8S19669C1[4]),  4,5},
  {&(_tg__ZTV9S19669C16__8S19669C1[5]),  5,8},
  {&(_tg__ZTV9S19669C17__8S19669C1[4]),  4,5},
  {&(_tg__ZTV8S19669C39S19669C11__9S19669C17__8S19669C1[2]),  2,3},
};
extern VTBL_ENTRY _ZTI8S19669C1[];
extern  VTBL_ENTRY _ZTV8S19669C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19669C1[];
static VTBL_ENTRY alt_thunk_names36[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N11S19669C4_ntD0Ev,_ZTv0_n12_N11S19669C4_ntD0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn128_N11S19669C4_ntD0Ev,_ZThn64_N11S19669C4_ntD0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N11S19669C4_ntD1Ev,_ZTv0_n12_N11S19669C4_ntD1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn128_N11S19669C4_ntD1Ev,_ZThn64_N11S19669C4_ntD1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19669C1D0Ev,_ZTv0_n24_N8S19669C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn200_N8S19669C1D0Ev,_ZThn100_N8S19669C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19669C1D1Ev,_ZTv0_n24_N8S19669C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn200_N8S19669C1D1Ev,_ZThn100_N8S19669C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S19669C1D0Ev,_ZTv0_n32_N8S19669C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn144_N8S19669C1D0Ev,_ZThn72_N8S19669C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S19669C1D1Ev,_ZTv0_n32_N8S19669C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn144_N8S19669C1D1Ev,_ZThn72_N8S19669C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19669C1D0Ev,_ZTv0_n12_N8S19669C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn128_N8S19669C1D0Ev,_ZThn64_N8S19669C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19669C1D1Ev,_ZTv0_n12_N8S19669C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn128_N8S19669C1D1Ev,_ZThn64_N8S19669C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19669C1 = {  "S19669C1", // class name
  bases_S19669C1, 26,
  &(vtc_S19669C1[0]), // expected_vtbl_contents
  &(vtt_S19669C1[0]), // expected_vtt_contents
  ABISELECT(224,112), // object size
  NSPAIRA(_ZTI8S19669C1),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S19669C1),66, //virtual function table var
  12, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19669C1),33, //virtual table table var
  20, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names36,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S12992C3_nt  {
  int s12992c3f0;
};
//SIG(1 S12992C3_nt) C1{ Fi}



//skip512 S12992C3_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S12992C5_nt  {
  char s12992c5f0[36];
};
//SIG(1 S12992C5_nt) C1{ Fc[36]}



//skip512 S12992C5_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S12992C7  {
  int s12992c7f0;
  int s12992c7f1[58];
  int s12992c7f2;
};
//SIG(1 S12992C7) C1{ Fi[60]}



static void Test_S12992C7()
{
  {
    init_simple_test("S12992C7");
    S12992C7 lv;
    check2(sizeof(lv), 240, "sizeof(S12992C7)");
    check2(__alignof__(lv), 4, "__alignof__(S12992C7)");
    check_field_offset(lv, s12992c7f0, 0, "S12992C7.s12992c7f0");
    check_field_offset(lv, s12992c7f1, 4, "S12992C7.s12992c7f1");
    check_field_offset(lv, s12992c7f2, 236, "S12992C7.s12992c7f2");
  }
}
static Arrange_To_Call_Me vS12992C7(Test_S12992C7, "S12992C7", 240);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S12992C9_nt  {
  short s12992c9f0;
  char s12992c9f1;
  char s12992c9f2;
};
//SIG(1 S12992C9_nt) C1{ Fs Fc[2]}



//skip512 S12992C9_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S12992C8  {
  ::S12992C9_nt s12992c8f0[256];
  int s12992c8f1;
};
//SIG(1 S12992C8) C1{ FC2{ Fs Fc[2]}[256] Fi}



static void Test_S12992C8()
{
  {
    init_simple_test("S12992C8");
    S12992C8 lv;
    check2(sizeof(lv), 1028, "sizeof(S12992C8)");
    check2(__alignof__(lv), 4, "__alignof__(S12992C8)");
    check_field_offset(lv, s12992c8f0, 0, "S12992C8.s12992c8f0");
    check_field_offset(lv, s12992c8f1, 1024, "S12992C8.s12992c8f1");
  }
}
static Arrange_To_Call_Me vS12992C8(Test_S12992C8, "S12992C8", 1028);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S12992C10  {
  ::S12992C9_nt s12992c10f0[251];
  int s12992c10f1;
};
//SIG(1 S12992C10) C1{ FC2{ Fs Fc[2]}[251] Fi}



static void Test_S12992C10()
{
  {
    init_simple_test("S12992C10");
    S12992C10 lv;
    check2(sizeof(lv), 1008, "sizeof(S12992C10)");
    check2(__alignof__(lv), 4, "__alignof__(S12992C10)");
    check_field_offset(lv, s12992c10f0, 0, "S12992C10.s12992c10f0");
    check_field_offset(lv, s12992c10f1, 1004, "S12992C10.s12992c10f1");
  }
}
static Arrange_To_Call_Me vS12992C10(Test_S12992C10, "S12992C10", 1008);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S12992C12  {
  int s12992c12f0;
  short s12992c12f1;
};
//SIG(1 S12992C12) C1{ Fi Fs}



static void Test_S12992C12()
{
  {
    init_simple_test("S12992C12");
    S12992C12 lv;
    check2(sizeof(lv), 8, "sizeof(S12992C12)");
    check2(__alignof__(lv), 4, "__alignof__(S12992C12)");
    check_field_offset(lv, s12992c12f0, 0, "S12992C12.s12992c12f0");
    check_field_offset(lv, s12992c12f1, 4, "S12992C12.s12992c12f1");
  }
}
static Arrange_To_Call_Me vS12992C12(Test_S12992C12, "S12992C12", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S12992C13  {
  int s12992c13f0;
  int s12992c13f1;
  int s12992c13f2;
  int s12992c13f3;
  int s12992c13f4;
  int s12992c13f5;
  int s12992c13f6;
};
//SIG(1 S12992C13) C1{ Fi[7]}



static void Test_S12992C13()
{
  {
    init_simple_test("S12992C13");
    S12992C13 lv;
    check2(sizeof(lv), 28, "sizeof(S12992C13)");
    check2(__alignof__(lv), 4, "__alignof__(S12992C13)");
    check_field_offset(lv, s12992c13f0, 0, "S12992C13.s12992c13f0");
    check_field_offset(lv, s12992c13f1, 4, "S12992C13.s12992c13f1");
    check_field_offset(lv, s12992c13f2, 8, "S12992C13.s12992c13f2");
    check_field_offset(lv, s12992c13f3, 12, "S12992C13.s12992c13f3");
    check_field_offset(lv, s12992c13f4, 16, "S12992C13.s12992c13f4");
    check_field_offset(lv, s12992c13f5, 20, "S12992C13.s12992c13f5");
    check_field_offset(lv, s12992c13f6, 24, "S12992C13.s12992c13f6");
  }
}
static Arrange_To_Call_Me vS12992C13(Test_S12992C13, "S12992C13", 28);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S12992C14  {
  int s12992c14f0;
};
//SIG(-1 S12992C14) C1{ Fi}



static void Test_S12992C14()
{
  {
    init_simple_test("S12992C14");
    S12992C14 lv;
    check2(sizeof(lv), 4, "sizeof(S12992C14)");
    check2(__alignof__(lv), 4, "__alignof__(S12992C14)");
    check_field_offset(lv, s12992c14f0, 0, "S12992C14.s12992c14f0");
  }
}
static Arrange_To_Call_Me vS12992C14(Test_S12992C14, "S12992C14", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

union  S12992C2  {
  ::S12992C3_nt s12992c2f0;
  ::S4299C9_nt s12992c2f1;
  ::S12992C5_nt s12992c2f2;
  ::S12992C3_nt s12992c2f3;
  ::S12992C7 s12992c2f4;
  ::S12992C8 s12992c2f5;
  ::S12992C10 s12992c2f6;
  ::S12992C12 s12992c2f7;
  ::S12992C13 s12992c2f8;
  ::S12992C14 s12992c2f9;
};
//SIG(1 S12992C2) U1{ FC2{ Fi} FC3{ Fi Fi} FC4{ Fc[36]} FC2 FC5{ Fi Fi[58] Fi} FC6{ FC7{ Fs Fc Fc}[256] Fi} FC8{ FC7[251] Fi} FC9{ Fi Fs} FC10{ Fi Fi Fi Fi Fi Fi Fi} FC11{ Fi}}

#endif // __cplusplus
#ifdef __cplusplus

struct  S12992C1  {
  int s12992c1f0[2];
  char s12992c1f1[12];
  short s12992c1f2[2];
  int s12992c1f3;
  ::S12992C2 s12992c1f4;
};
//SIG(1 S12992C1) C1{ Fi[2] Fc[12] Fs[2] Fi FU2{ FC3{ Fi} FC4{ Fi Fi} FC5{ Fc[36]} FC3 FC6{ Fi Fi[58] Fi} FC7{ FC8{ Fs Fc Fc}[256] Fi} FC9{ FC8[251] Fi} FC10{ Fi Fs} FC11{ Fi Fi Fi Fi Fi Fi Fi} FC12{ Fi}}}



static void Test_S12992C1()
{
  {
    init_simple_test("S12992C1");
    S12992C1 lv;
    check2(sizeof(lv), 1056, "sizeof(S12992C1)");
    check2(__alignof__(lv), 4, "__alignof__(S12992C1)");
    check_field_offset(lv, s12992c1f0, 0, "S12992C1.s12992c1f0");
    check_field_offset(lv, s12992c1f1, 8, "S12992C1.s12992c1f1");
    check_field_offset(lv, s12992c1f2, 20, "S12992C1.s12992c1f2");
    check_field_offset(lv, s12992c1f3, 24, "S12992C1.s12992c1f3");
    check_field_offset(lv, s12992c1f4, 28, "S12992C1.s12992c1f4");
  }
}
static Arrange_To_Call_Me vS12992C1(Test_S12992C1, "S12992C1", 1056);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S8709C2_nt  {
  int s8709c2f0;
  char s8709c2f1[3];
  virtual  ~S8709C2_nt(); // _ZN10S8709C2_ntD1Ev
  virtual void  v2(); // _ZN10S8709C2_nt2v2Ev
  S8709C2_nt(); // tgen
};
//SIG(-1 S8709C2_nt) C1{ vd v1 Fi Fc[3]}


 S8709C2_nt ::~S8709C2_nt(){ note_dtor("S8709C2_nt", this);}
void  S8709C2_nt ::v2(){vfunc_called(this, "_ZN10S8709C2_nt2v2Ev");}
S8709C2_nt ::S8709C2_nt(){ note_ctor("S8709C2_nt", this);} // tgen

//skip512 S8709C2_nt

#else // __cplusplus

extern void _ZN10S8709C2_ntC1Ev();
extern void _ZN10S8709C2_ntD1Ev();
Name_Map name_map_S8709C2_nt[] = {
  NSPAIR(_ZN10S8709C2_ntC1Ev),
  NSPAIR(_ZN10S8709C2_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S8709C2_nt[];
extern void _ZN10S8709C2_ntD1Ev();
extern void _ZN10S8709C2_ntD0Ev();
extern void _ZN10S8709C2_nt2v2Ev();
static  VTBL_ENTRY vtc_S8709C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S8709C2_nt[0]),
  (VTBL_ENTRY)&_ZN10S8709C2_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S8709C2_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S8709C2_nt2v2Ev,
};
extern VTBL_ENTRY _ZTI10S8709C2_nt[];
VTBL_ENTRY *P__ZTI10S8709C2_nt = _ZTI10S8709C2_nt; 
extern  VTBL_ENTRY _ZTV10S8709C2_nt[];
Class_Descriptor cd_S8709C2_nt = {  "S8709C2_nt", // class name
  0,0,//no base classes
  &(vtc_S8709C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI10S8709C2_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S8709C2_nt),5, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S8709C3_nt  {
  ::S836C27 s8709c3f0;
  void  mf8709c3(); // _ZN10S8709C3_nt8mf8709c3Ev
};
//SIG(-1 S8709C3_nt) C1{ m FC2{ m Fp Fi FC3{ m} FC4{ m}}}


void  S8709C3_nt ::mf8709c3(){}

//skip512 S8709C3_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S8709C7_nt  {
  int s8709c7f0[14];
  char s8709c7f1;
};
//SIG(-1 S8709C7_nt) C1{ Fi[14] Fc}



//skip512 S8709C7_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S8709C9_nt  {
  long s8709c9f0[4];
};
//SIG(-1 S8709C9_nt) C1{ Fl[4]}



//skip512 S8709C9_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S8709C8_nt  {
  ::S8709C9_nt s8709c8f0;
  void  mf8709c8(); // _ZN10S8709C8_nt8mf8709c8Ev
};
//SIG(-1 S8709C8_nt) C1{ m FC2{ Fl[4]}}


void  S8709C8_nt ::mf8709c8(){}

//skip512 S8709C8_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S8709C12_nt  {
  int s8709c12f0[4];
};
//SIG(-1 S8709C12_nt) C1{ Fi[4]}



//skip512 S8709C12_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S8709C11_nt  {
  void *s8709c11f0;
  ::S8709C12_nt s8709c11f1;
  void  mf8709c11(); // _ZN11S8709C11_nt9mf8709c11Ev
};
//SIG(-1 S8709C11_nt) C1{ m Fp FC2{ Fi[4]}}


void  S8709C11_nt ::mf8709c11(){}

//skip512 S8709C11_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S8709C14_nt  {
  int s8709c14f0;
  void *s8709c14f1;
  int s8709c14f2;
};
//SIG(-1 S8709C14_nt) C1{ Fi Fp Fi}



//skip512 S8709C14_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S8709C13  {
  ::S8709C8_nt s8709c13f0;
  ::S8709C11_nt s8709c13f1;
  void *s8709c13f2;
  ::S8709C14_nt s8709c13f3;
  void  mf8709c13(); // _ZN8S8709C139mf8709c13Ev
};
//SIG(-1 S8709C13) C1{ m FC2{ m FC3{ Fl[4]}} FC4{ m Fp FC5{ Fi[4]}} Fp FC6{ Fi Fp Fi}}


void  S8709C13 ::mf8709c13(){}

static void Test_S8709C13()
{
  {
    init_simple_test("S8709C13");
    S8709C13 lv;
    check2(sizeof(lv), ABISELECT(88,52), "sizeof(S8709C13)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8709C13)");
    check_field_offset(lv, s8709c13f0, 0, "S8709C13.s8709c13f0");
    check_field_offset(lv, s8709c13f1, ABISELECT(32,16), "S8709C13.s8709c13f1");
    check_field_offset(lv, s8709c13f2, ABISELECT(56,36), "S8709C13.s8709c13f2");
    check_field_offset(lv, s8709c13f3, ABISELECT(64,40), "S8709C13.s8709c13f3");
  }
}
static Arrange_To_Call_Me vS8709C13(Test_S8709C13, "S8709C13", ABISELECT(88,52));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S8709C1  : S8709C2_nt {
  char s8709c1f0;
  void *s8709c1f1;
  ::S8709C3_nt s8709c1f2;
  int s8709c1f3[4];
  ::S8709C7_nt s8709c1f4;
  void *s8709c1f5;
  ::S8709C8_nt s8709c1f6;
  ::S8709C8_nt s8709c1f7;
  ::S8709C11_nt s8709c1f8;
  char s8709c1f9;
  ::S8709C13 s8709c1f10;
  void *s8709c1f11;
  virtual  ~S8709C1(); // _ZN7S8709C1D1Ev
  virtual void  v1(); // _ZN7S8709C12v1Ev
  S8709C1(); // tgen
};
//SIG(1 S8709C1) C1{ BC2{ vd v2 Fi Fc[3]} vd v1 Fc Fp FC3{ m FC4{ m Fp Fi FC5{ m} FC6{ m}}} Fi[4] FC7{ Fi[14] Fc} Fp FC8{ m FC9{ Fl[4]}} FC8 FC10{ m Fp FC11{ Fi[4]}} Fc FC12{ m FC8 FC10 Fp FC13{ Fi Fp Fi}} Fp}


 S8709C1 ::~S8709C1(){ note_dtor("S8709C1", this);}
void  S8709C1 ::v1(){vfunc_called(this, "_ZN7S8709C12v1Ev");}
S8709C1 ::S8709C1(){ note_ctor("S8709C1", this);} // tgen

static void Test_S8709C1()
{
  extern Class_Descriptor cd_S8709C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(41,56)];
    init_test(&cd_S8709C1, buf);
    S8709C1 *dp, &lv = *(dp=new (buf) S8709C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(320,220), "sizeof(S8709C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8709C1)");
    check_base_class_offset(lv, (S8709C2_nt*), 0, "S8709C1");
    check_field_offset(lv, s8709c1f0, ABISELECT(15,11), "S8709C1.s8709c1f0");
    check_field_offset(lv, s8709c1f1, ABISELECT(16,12), "S8709C1.s8709c1f1");
    check_field_offset(lv, s8709c1f2, ABISELECT(24,16), "S8709C1.s8709c1f2");
    check_field_offset(lv, s8709c1f3, ABISELECT(40,28), "S8709C1.s8709c1f3");
    check_field_offset(lv, s8709c1f4, ABISELECT(56,44), "S8709C1.s8709c1f4");
    check_field_offset(lv, s8709c1f5, ABISELECT(120,104), "S8709C1.s8709c1f5");
    check_field_offset(lv, s8709c1f6, ABISELECT(128,108), "S8709C1.s8709c1f6");
    check_field_offset(lv, s8709c1f7, ABISELECT(160,124), "S8709C1.s8709c1f7");
    check_field_offset(lv, s8709c1f8, ABISELECT(192,140), "S8709C1.s8709c1f8");
    check_field_offset(lv, s8709c1f9, ABISELECT(216,160), "S8709C1.s8709c1f9");
    check_field_offset(lv, s8709c1f10, ABISELECT(224,164), "S8709C1.s8709c1f10");
    check_field_offset(lv, s8709c1f11, ABISELECT(312,216), "S8709C1.s8709c1f11");
    test_class_info(&lv, &cd_S8709C1);
    dp->~S8709C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8709C1(Test_S8709C1, "S8709C1", ABISELECT(320,220));

#else // __cplusplus

extern void _ZN7S8709C1C1Ev();
extern void _ZN7S8709C1D1Ev();
Name_Map name_map_S8709C1[] = {
  NSPAIR(_ZN7S8709C1C1Ev),
  NSPAIR(_ZN7S8709C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S8709C2_nt;
extern VTBL_ENTRY _ZTI10S8709C2_nt[];
extern  VTBL_ENTRY _ZTV10S8709C2_nt[];
static Base_Class bases_S8709C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S8709C2_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S8709C1[];
extern void _ZN7S8709C1D1Ev();
extern void _ZN7S8709C1D0Ev();
extern void _ZN10S8709C2_nt2v2Ev();
extern void _ZN7S8709C12v1Ev();
static  VTBL_ENTRY vtc_S8709C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8709C1[0]),
  (VTBL_ENTRY)&_ZN7S8709C1D1Ev,
  (VTBL_ENTRY)&_ZN7S8709C1D0Ev,
  (VTBL_ENTRY)&_ZN10S8709C2_nt2v2Ev,
  (VTBL_ENTRY)&_ZN7S8709C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S8709C1[];
extern  VTBL_ENTRY _ZTV7S8709C1[];
Class_Descriptor cd_S8709C1 = {  "S8709C1", // class name
  bases_S8709C1, 1,
  &(vtc_S8709C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(320,220), // object size
  NSPAIRA(_ZTI7S8709C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S8709C1),6, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4236C3  {
  virtual  ~S4236C3(); // _ZN7S4236C3D1Ev
  virtual void  v11(); // _ZN7S4236C33v11Ev
  virtual void  v12(); // _ZN7S4236C33v12Ev
  virtual void  v13(); // _ZN7S4236C33v13Ev
  virtual void  v14(); // _ZN7S4236C33v14Ev
  S4236C3(); // tgen
};
//SIG(-1 S4236C3) C1{ vd v1 v2 v3 v4}


 S4236C3 ::~S4236C3(){ note_dtor("S4236C3", this);}
void  S4236C3 ::v11(){vfunc_called(this, "_ZN7S4236C33v11Ev");}
void  S4236C3 ::v12(){vfunc_called(this, "_ZN7S4236C33v12Ev");}
void  S4236C3 ::v13(){vfunc_called(this, "_ZN7S4236C33v13Ev");}
void  S4236C3 ::v14(){vfunc_called(this, "_ZN7S4236C33v14Ev");}
S4236C3 ::S4236C3(){ note_ctor("S4236C3", this);} // tgen

static void Test_S4236C3()
{
  extern Class_Descriptor cd_S4236C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S4236C3, buf);
    S4236C3 *dp, &lv = *(dp=new (buf) S4236C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S4236C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4236C3)");
    test_class_info(&lv, &cd_S4236C3);
    dp->~S4236C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4236C3(Test_S4236C3, "S4236C3", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S4236C3C1Ev();
extern void _ZN7S4236C3D1Ev();
Name_Map name_map_S4236C3[] = {
  NSPAIR(_ZN7S4236C3C1Ev),
  NSPAIR(_ZN7S4236C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4236C3[];
extern void _ZN7S4236C3D1Ev();
extern void _ZN7S4236C3D0Ev();
extern void _ZN7S4236C33v11Ev();
extern void _ZN7S4236C33v12Ev();
extern void _ZN7S4236C33v13Ev();
extern void _ZN7S4236C33v14Ev();
static  VTBL_ENTRY vtc_S4236C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4236C3[0]),
  (VTBL_ENTRY)&_ZN7S4236C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4236C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4236C33v11Ev,
  (VTBL_ENTRY)&_ZN7S4236C33v12Ev,
  (VTBL_ENTRY)&_ZN7S4236C33v13Ev,
  (VTBL_ENTRY)&_ZN7S4236C33v14Ev,
};
extern VTBL_ENTRY _ZTI7S4236C3[];
extern  VTBL_ENTRY _ZTV7S4236C3[];
Class_Descriptor cd_S4236C3 = {  "S4236C3", // class name
  0,0,//no base classes
  &(vtc_S4236C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S4236C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4236C3),8, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4236C2  : S4236C3 {
  virtual  ~S4236C2(); // _ZN7S4236C2D1Ev
  virtual void  v15(); // _ZN7S4236C23v15Ev
  virtual void  v16(); // _ZN7S4236C23v16Ev
  virtual void  v17(); // _ZN7S4236C23v17Ev
  virtual void  v18(); // _ZN7S4236C23v18Ev
  virtual void  v19(); // _ZN7S4236C23v19Ev
  S4236C2(); // tgen
};
//SIG(-1 S4236C2) C1{ BC2{ vd v6 v7 v8 v9} vd v1 v2 v3 v4 v5}


 S4236C2 ::~S4236C2(){ note_dtor("S4236C2", this);}
void  S4236C2 ::v15(){vfunc_called(this, "_ZN7S4236C23v15Ev");}
void  S4236C2 ::v16(){vfunc_called(this, "_ZN7S4236C23v16Ev");}
void  S4236C2 ::v17(){vfunc_called(this, "_ZN7S4236C23v17Ev");}
void  S4236C2 ::v18(){vfunc_called(this, "_ZN7S4236C23v18Ev");}
void  S4236C2 ::v19(){vfunc_called(this, "_ZN7S4236C23v19Ev");}
S4236C2 ::S4236C2(){ note_ctor("S4236C2", this);} // tgen

static void Test_S4236C2()
{
  extern Class_Descriptor cd_S4236C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S4236C2, buf);
    S4236C2 *dp, &lv = *(dp=new (buf) S4236C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S4236C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4236C2)");
    check_base_class_offset(lv, (S4236C3*), 0, "S4236C2");
    test_class_info(&lv, &cd_S4236C2);
    dp->~S4236C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4236C2(Test_S4236C2, "S4236C2", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S4236C2C1Ev();
extern void _ZN7S4236C2D1Ev();
Name_Map name_map_S4236C2[] = {
  NSPAIR(_ZN7S4236C2C1Ev),
  NSPAIR(_ZN7S4236C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4236C3;
extern VTBL_ENTRY _ZTI7S4236C3[];
extern  VTBL_ENTRY _ZTV7S4236C3[];
static Base_Class bases_S4236C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4236C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4236C2[];
extern void _ZN7S4236C2D1Ev();
extern void _ZN7S4236C2D0Ev();
extern void _ZN7S4236C33v11Ev();
extern void _ZN7S4236C33v12Ev();
extern void _ZN7S4236C33v13Ev();
extern void _ZN7S4236C33v14Ev();
extern void _ZN7S4236C23v15Ev();
extern void _ZN7S4236C23v16Ev();
extern void _ZN7S4236C23v17Ev();
extern void _ZN7S4236C23v18Ev();
extern void _ZN7S4236C23v19Ev();
static  VTBL_ENTRY vtc_S4236C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4236C2[0]),
  (VTBL_ENTRY)&_ZN7S4236C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4236C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4236C33v11Ev,
  (VTBL_ENTRY)&_ZN7S4236C33v12Ev,
  (VTBL_ENTRY)&_ZN7S4236C33v13Ev,
  (VTBL_ENTRY)&_ZN7S4236C33v14Ev,
  (VTBL_ENTRY)&_ZN7S4236C23v15Ev,
  (VTBL_ENTRY)&_ZN7S4236C23v16Ev,
  (VTBL_ENTRY)&_ZN7S4236C23v17Ev,
  (VTBL_ENTRY)&_ZN7S4236C23v18Ev,
  (VTBL_ENTRY)&_ZN7S4236C23v19Ev,
};
extern VTBL_ENTRY _ZTI7S4236C2[];
extern  VTBL_ENTRY _ZTV7S4236C2[];
Class_Descriptor cd_S4236C2 = {  "S4236C2", // class name
  bases_S4236C2, 1,
  &(vtc_S4236C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S4236C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4236C2),13, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4236C5  {
  char s4236c5f0[1024];
  int s4236c5f1[2];
  virtual  ~S4236C5(); // _ZN7S4236C5D1Ev
  virtual void  v20(); // _ZN7S4236C53v20Ev
  virtual void  v21(); // _ZN7S4236C53v21Ev
  virtual void  v22(); // _ZN7S4236C53v22Ev
  virtual void  v23(); // _ZN7S4236C53v23Ev
  virtual void  v24(); // _ZN7S4236C53v24Ev
  virtual void  v25(); // _ZN7S4236C53v25Ev
  virtual void  v26(); // _ZN7S4236C53v26Ev
  virtual void  v27(); // _ZN7S4236C53v27Ev
  virtual void  v28(); // _ZN7S4236C53v28Ev
  virtual void  v29(); // _ZN7S4236C53v29Ev
  virtual void  v30(); // _ZN7S4236C53v30Ev
  virtual void  v31(); // _ZN7S4236C53v31Ev
  S4236C5(); // tgen
};
//SIG(-1 S4236C5) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 Fc[1024] Fi[2]}


 S4236C5 ::~S4236C5(){ note_dtor("S4236C5", this);}
void  S4236C5 ::v20(){vfunc_called(this, "_ZN7S4236C53v20Ev");}
void  S4236C5 ::v21(){vfunc_called(this, "_ZN7S4236C53v21Ev");}
void  S4236C5 ::v22(){vfunc_called(this, "_ZN7S4236C53v22Ev");}
void  S4236C5 ::v23(){vfunc_called(this, "_ZN7S4236C53v23Ev");}
void  S4236C5 ::v24(){vfunc_called(this, "_ZN7S4236C53v24Ev");}
void  S4236C5 ::v25(){vfunc_called(this, "_ZN7S4236C53v25Ev");}
void  S4236C5 ::v26(){vfunc_called(this, "_ZN7S4236C53v26Ev");}
void  S4236C5 ::v27(){vfunc_called(this, "_ZN7S4236C53v27Ev");}
void  S4236C5 ::v28(){vfunc_called(this, "_ZN7S4236C53v28Ev");}
void  S4236C5 ::v29(){vfunc_called(this, "_ZN7S4236C53v29Ev");}
void  S4236C5 ::v30(){vfunc_called(this, "_ZN7S4236C53v30Ev");}
void  S4236C5 ::v31(){vfunc_called(this, "_ZN7S4236C53v31Ev");}
S4236C5 ::S4236C5(){ note_ctor("S4236C5", this);} // tgen

static void Test_S4236C5()
{
  extern Class_Descriptor cd_S4236C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(131,260)];
    init_test(&cd_S4236C5, buf);
    S4236C5 *dp, &lv = *(dp=new (buf) S4236C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1040,1036), "sizeof(S4236C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4236C5)");
    check_field_offset(lv, s4236c5f0, ABISELECT(8,4), "S4236C5.s4236c5f0");
    check_field_offset(lv, s4236c5f1, ABISELECT(1032,1028), "S4236C5.s4236c5f1");
    test_class_info(&lv, &cd_S4236C5);
    dp->~S4236C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4236C5(Test_S4236C5, "S4236C5", ABISELECT(1040,1036));

#else // __cplusplus

extern void _ZN7S4236C5C1Ev();
extern void _ZN7S4236C5D1Ev();
Name_Map name_map_S4236C5[] = {
  NSPAIR(_ZN7S4236C5C1Ev),
  NSPAIR(_ZN7S4236C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4236C5[];
extern void _ZN7S4236C5D1Ev();
extern void _ZN7S4236C5D0Ev();
extern void _ZN7S4236C53v20Ev();
extern void _ZN7S4236C53v21Ev();
extern void _ZN7S4236C53v22Ev();
extern void _ZN7S4236C53v23Ev();
extern void _ZN7S4236C53v24Ev();
extern void _ZN7S4236C53v25Ev();
extern void _ZN7S4236C53v26Ev();
extern void _ZN7S4236C53v27Ev();
extern void _ZN7S4236C53v28Ev();
extern void _ZN7S4236C53v29Ev();
extern void _ZN7S4236C53v30Ev();
extern void _ZN7S4236C53v31Ev();
static  VTBL_ENTRY vtc_S4236C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4236C5[0]),
  (VTBL_ENTRY)&_ZN7S4236C5D1Ev,
  (VTBL_ENTRY)&_ZN7S4236C5D0Ev,
  (VTBL_ENTRY)&_ZN7S4236C53v20Ev,
  (VTBL_ENTRY)&_ZN7S4236C53v21Ev,
  (VTBL_ENTRY)&_ZN7S4236C53v22Ev,
  (VTBL_ENTRY)&_ZN7S4236C53v23Ev,
  (VTBL_ENTRY)&_ZN7S4236C53v24Ev,
  (VTBL_ENTRY)&_ZN7S4236C53v25Ev,
  (VTBL_ENTRY)&_ZN7S4236C53v26Ev,
  (VTBL_ENTRY)&_ZN7S4236C53v27Ev,
  (VTBL_ENTRY)&_ZN7S4236C53v28Ev,
  (VTBL_ENTRY)&_ZN7S4236C53v29Ev,
  (VTBL_ENTRY)&_ZN7S4236C53v30Ev,
  (VTBL_ENTRY)&_ZN7S4236C53v31Ev,
};
extern VTBL_ENTRY _ZTI7S4236C5[];
extern  VTBL_ENTRY _ZTV7S4236C5[];
Class_Descriptor cd_S4236C5 = {  "S4236C5", // class name
  0,0,//no base classes
  &(vtc_S4236C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(1040,1036), // object size
  NSPAIRA(_ZTI7S4236C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4236C5),16, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4236C4  : S4236C5 {
  virtual  ~S4236C4(); // _ZN7S4236C4D1Ev
  virtual void  v32(); // _ZN7S4236C43v32Ev
  virtual void  v33(); // _ZN7S4236C43v33Ev
  virtual void  v34(); // _ZN7S4236C43v34Ev
  virtual void  v35(); // _ZN7S4236C43v35Ev
  S4236C4(); // tgen
};
//SIG(-1 S4236C4) C1{ BC2{ vd v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 Fc[1024] Fi[2]} vd v1 v2 v3 v4}


 S4236C4 ::~S4236C4(){ note_dtor("S4236C4", this);}
void  S4236C4 ::v32(){vfunc_called(this, "_ZN7S4236C43v32Ev");}
void  S4236C4 ::v33(){vfunc_called(this, "_ZN7S4236C43v33Ev");}
void  S4236C4 ::v34(){vfunc_called(this, "_ZN7S4236C43v34Ev");}
void  S4236C4 ::v35(){vfunc_called(this, "_ZN7S4236C43v35Ev");}
S4236C4 ::S4236C4(){ note_ctor("S4236C4", this);} // tgen

static void Test_S4236C4()
{
  extern Class_Descriptor cd_S4236C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(131,260)];
    init_test(&cd_S4236C4, buf);
    S4236C4 *dp, &lv = *(dp=new (buf) S4236C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1040,1036), "sizeof(S4236C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4236C4)");
    check_base_class_offset(lv, (S4236C5*), 0, "S4236C4");
    test_class_info(&lv, &cd_S4236C4);
    dp->~S4236C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4236C4(Test_S4236C4, "S4236C4", ABISELECT(1040,1036));

#else // __cplusplus

extern void _ZN7S4236C4C1Ev();
extern void _ZN7S4236C4D1Ev();
Name_Map name_map_S4236C4[] = {
  NSPAIR(_ZN7S4236C4C1Ev),
  NSPAIR(_ZN7S4236C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4236C5;
extern VTBL_ENTRY _ZTI7S4236C5[];
extern  VTBL_ENTRY _ZTV7S4236C5[];
static Base_Class bases_S4236C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4236C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4236C4[];
extern void _ZN7S4236C4D1Ev();
extern void _ZN7S4236C4D0Ev();
extern void _ZN7S4236C53v20Ev();
extern void _ZN7S4236C53v21Ev();
extern void _ZN7S4236C53v22Ev();
extern void _ZN7S4236C53v23Ev();
extern void _ZN7S4236C53v24Ev();
extern void _ZN7S4236C53v25Ev();
extern void _ZN7S4236C53v26Ev();
extern void _ZN7S4236C53v27Ev();
extern void _ZN7S4236C53v28Ev();
extern void _ZN7S4236C53v29Ev();
extern void _ZN7S4236C53v30Ev();
extern void _ZN7S4236C53v31Ev();
extern void _ZN7S4236C43v32Ev();
extern void _ZN7S4236C43v33Ev();
extern void _ZN7S4236C43v34Ev();
extern void _ZN7S4236C43v35Ev();
static  VTBL_ENTRY vtc_S4236C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4236C4[0]),
  (VTBL_ENTRY)&_ZN7S4236C4D1Ev,
  (VTBL_ENTRY)&_ZN7S4236C4D0Ev,
  (VTBL_ENTRY)&_ZN7S4236C53v20Ev,
  (VTBL_ENTRY)&_ZN7S4236C53v21Ev,
  (VTBL_ENTRY)&_ZN7S4236C53v22Ev,
  (VTBL_ENTRY)&_ZN7S4236C53v23Ev,
  (VTBL_ENTRY)&_ZN7S4236C53v24Ev,
  (VTBL_ENTRY)&_ZN7S4236C53v25Ev,
  (VTBL_ENTRY)&_ZN7S4236C53v26Ev,
  (VTBL_ENTRY)&_ZN7S4236C53v27Ev,
  (VTBL_ENTRY)&_ZN7S4236C53v28Ev,
  (VTBL_ENTRY)&_ZN7S4236C53v29Ev,
  (VTBL_ENTRY)&_ZN7S4236C53v30Ev,
  (VTBL_ENTRY)&_ZN7S4236C53v31Ev,
  (VTBL_ENTRY)&_ZN7S4236C43v32Ev,
  (VTBL_ENTRY)&_ZN7S4236C43v33Ev,
  (VTBL_ENTRY)&_ZN7S4236C43v34Ev,
  (VTBL_ENTRY)&_ZN7S4236C43v35Ev,
};
extern VTBL_ENTRY _ZTI7S4236C4[];
extern  VTBL_ENTRY _ZTV7S4236C4[];
Class_Descriptor cd_S4236C4 = {  "S4236C4", // class name
  bases_S4236C4, 1,
  &(vtc_S4236C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(1040,1036), // object size
  NSPAIRA(_ZTI7S4236C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4236C4),20, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4236C1  : S4236C2 , S4236C4 {
  virtual  ~S4236C1(); // _ZN7S4236C1D1Ev
  virtual void  v1(); // _ZN7S4236C12v1Ev
  virtual void  v2(); // _ZN7S4236C12v2Ev
  virtual void  v3(); // _ZN7S4236C12v3Ev
  virtual void  v4(); // _ZN7S4236C12v4Ev
  virtual void  v5(); // _ZN7S4236C12v5Ev
  virtual void  v6(); // _ZN7S4236C12v6Ev
  virtual void  v7(); // _ZN7S4236C12v7Ev
  virtual void  v8(); // _ZN7S4236C12v8Ev
  virtual void  v9(); // _ZN7S4236C12v9Ev
  virtual void  v10(); // _ZN7S4236C13v10Ev
  S4236C1(); // tgen
};
//SIG(1 S4236C1) C1{ BC2{ BC3{ vd v11 v12 v13 v14} vd v15 v16 v17 v18 v19} BC4{ BC5{ vd v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 Fc[1024] Fi[2]} vd v32 v33 v34 v35} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10}


 S4236C1 ::~S4236C1(){ note_dtor("S4236C1", this);}
void  S4236C1 ::v1(){vfunc_called(this, "_ZN7S4236C12v1Ev");}
void  S4236C1 ::v2(){vfunc_called(this, "_ZN7S4236C12v2Ev");}
void  S4236C1 ::v3(){vfunc_called(this, "_ZN7S4236C12v3Ev");}
void  S4236C1 ::v4(){vfunc_called(this, "_ZN7S4236C12v4Ev");}
void  S4236C1 ::v5(){vfunc_called(this, "_ZN7S4236C12v5Ev");}
void  S4236C1 ::v6(){vfunc_called(this, "_ZN7S4236C12v6Ev");}
void  S4236C1 ::v7(){vfunc_called(this, "_ZN7S4236C12v7Ev");}
void  S4236C1 ::v8(){vfunc_called(this, "_ZN7S4236C12v8Ev");}
void  S4236C1 ::v9(){vfunc_called(this, "_ZN7S4236C12v9Ev");}
void  S4236C1 ::v10(){vfunc_called(this, "_ZN7S4236C13v10Ev");}
S4236C1 ::S4236C1(){ note_ctor("S4236C1", this);} // tgen

static void Test_S4236C1()
{
  extern Class_Descriptor cd_S4236C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(132,261)];
    init_test(&cd_S4236C1, buf);
    S4236C1 *dp, &lv = *(dp=new (buf) S4236C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1048,1040), "sizeof(S4236C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4236C1)");
    check_base_class_offset(lv, (S4236C3*)(S4236C2*), 0, "S4236C1");
    check_base_class_offset(lv, (S4236C2*), 0, "S4236C1");
    check_base_class_offset(lv, (S4236C5*)(S4236C4*), ABISELECT(8,4), "S4236C1");
    check_base_class_offset(lv, (S4236C4*), ABISELECT(8,4), "S4236C1");
    test_class_info(&lv, &cd_S4236C1);
    dp->~S4236C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4236C1(Test_S4236C1, "S4236C1", ABISELECT(1048,1040));

#else // __cplusplus

extern void _ZN7S4236C1C1Ev();
extern void _ZN7S4236C1D1Ev();
Name_Map name_map_S4236C1[] = {
  NSPAIR(_ZN7S4236C1C1Ev),
  NSPAIR(_ZN7S4236C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4236C3;
extern VTBL_ENTRY _ZTI7S4236C3[];
extern  VTBL_ENTRY _ZTV7S4236C3[];
extern Class_Descriptor cd_S4236C2;
extern VTBL_ENTRY _ZTI7S4236C2[];
extern  VTBL_ENTRY _ZTV7S4236C2[];
extern Class_Descriptor cd_S4236C5;
extern VTBL_ENTRY _ZTI7S4236C5[];
extern  VTBL_ENTRY _ZTV7S4236C5[];
extern Class_Descriptor cd_S4236C4;
extern VTBL_ENTRY _ZTI7S4236C4[];
extern  VTBL_ENTRY _ZTV7S4236C4[];
static Base_Class bases_S4236C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4236C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S4236C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S4236C5,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S4236C4,    ABISELECT(8,4), //bcp->offset
    23, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4236C1[];
extern void _ZN7S4236C1D1Ev();
extern void _ZN7S4236C1D0Ev();
extern void _ZN7S4236C33v11Ev();
extern void _ZN7S4236C33v12Ev();
extern void _ZN7S4236C33v13Ev();
extern void _ZN7S4236C33v14Ev();
extern void _ZN7S4236C23v15Ev();
extern void _ZN7S4236C23v16Ev();
extern void _ZN7S4236C23v17Ev();
extern void _ZN7S4236C23v18Ev();
extern void _ZN7S4236C23v19Ev();
extern void _ZN7S4236C12v1Ev();
extern void _ZN7S4236C12v2Ev();
extern void _ZN7S4236C12v3Ev();
extern void _ZN7S4236C12v4Ev();
extern void _ZN7S4236C12v5Ev();
extern void _ZN7S4236C12v6Ev();
extern void _ZN7S4236C12v7Ev();
extern void _ZN7S4236C12v8Ev();
extern void _ZN7S4236C12v9Ev();
extern void _ZN7S4236C13v10Ev();
extern void ABISELECT(_ZThn8_N7S4236C1D1Ev,_ZThn4_N7S4236C1D1Ev)();
extern void ABISELECT(_ZThn8_N7S4236C1D0Ev,_ZThn4_N7S4236C1D0Ev)();
extern void _ZN7S4236C53v20Ev();
extern void _ZN7S4236C53v21Ev();
extern void _ZN7S4236C53v22Ev();
extern void _ZN7S4236C53v23Ev();
extern void _ZN7S4236C53v24Ev();
extern void _ZN7S4236C53v25Ev();
extern void _ZN7S4236C53v26Ev();
extern void _ZN7S4236C53v27Ev();
extern void _ZN7S4236C53v28Ev();
extern void _ZN7S4236C53v29Ev();
extern void _ZN7S4236C53v30Ev();
extern void _ZN7S4236C53v31Ev();
extern void _ZN7S4236C43v32Ev();
extern void _ZN7S4236C43v33Ev();
extern void _ZN7S4236C43v34Ev();
extern void _ZN7S4236C43v35Ev();
static  VTBL_ENTRY vtc_S4236C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4236C1[0]),
  (VTBL_ENTRY)&_ZN7S4236C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4236C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4236C33v11Ev,
  (VTBL_ENTRY)&_ZN7S4236C33v12Ev,
  (VTBL_ENTRY)&_ZN7S4236C33v13Ev,
  (VTBL_ENTRY)&_ZN7S4236C33v14Ev,
  (VTBL_ENTRY)&_ZN7S4236C23v15Ev,
  (VTBL_ENTRY)&_ZN7S4236C23v16Ev,
  (VTBL_ENTRY)&_ZN7S4236C23v17Ev,
  (VTBL_ENTRY)&_ZN7S4236C23v18Ev,
  (VTBL_ENTRY)&_ZN7S4236C23v19Ev,
  (VTBL_ENTRY)&_ZN7S4236C12v1Ev,
  (VTBL_ENTRY)&_ZN7S4236C12v2Ev,
  (VTBL_ENTRY)&_ZN7S4236C12v3Ev,
  (VTBL_ENTRY)&_ZN7S4236C12v4Ev,
  (VTBL_ENTRY)&_ZN7S4236C12v5Ev,
  (VTBL_ENTRY)&_ZN7S4236C12v6Ev,
  (VTBL_ENTRY)&_ZN7S4236C12v7Ev,
  (VTBL_ENTRY)&_ZN7S4236C12v8Ev,
  (VTBL_ENTRY)&_ZN7S4236C12v9Ev,
  (VTBL_ENTRY)&_ZN7S4236C13v10Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S4236C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S4236C1D1Ev,_ZThn4_N7S4236C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S4236C1D0Ev,_ZThn4_N7S4236C1D0Ev),
  (VTBL_ENTRY)&_ZN7S4236C53v20Ev,
  (VTBL_ENTRY)&_ZN7S4236C53v21Ev,
  (VTBL_ENTRY)&_ZN7S4236C53v22Ev,
  (VTBL_ENTRY)&_ZN7S4236C53v23Ev,
  (VTBL_ENTRY)&_ZN7S4236C53v24Ev,
  (VTBL_ENTRY)&_ZN7S4236C53v25Ev,
  (VTBL_ENTRY)&_ZN7S4236C53v26Ev,
  (VTBL_ENTRY)&_ZN7S4236C53v27Ev,
  (VTBL_ENTRY)&_ZN7S4236C53v28Ev,
  (VTBL_ENTRY)&_ZN7S4236C53v29Ev,
  (VTBL_ENTRY)&_ZN7S4236C53v30Ev,
  (VTBL_ENTRY)&_ZN7S4236C53v31Ev,
  (VTBL_ENTRY)&_ZN7S4236C43v32Ev,
  (VTBL_ENTRY)&_ZN7S4236C43v33Ev,
  (VTBL_ENTRY)&_ZN7S4236C43v34Ev,
  (VTBL_ENTRY)&_ZN7S4236C43v35Ev,
};
extern VTBL_ENTRY _ZTI7S4236C1[];
extern  VTBL_ENTRY _ZTV7S4236C1[];
Class_Descriptor cd_S4236C1 = {  "S4236C1", // class name
  bases_S4236C1, 4,
  &(vtc_S4236C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(1048,1040), // object size
  NSPAIRA(_ZTI7S4236C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S4236C1),43, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  4, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S5170C3_nt  {
  virtual  ~S5170C3_nt(); // _ZN10S5170C3_ntD1Ev
  virtual void  v4(); // _ZN10S5170C3_nt2v4Ev
  virtual void  v5(); // _ZN10S5170C3_nt2v5Ev
  virtual void  v6(); // _ZN10S5170C3_nt2v6Ev
  virtual void  v7(); // _ZN10S5170C3_nt2v7Ev
  virtual void  v8(); // _ZN10S5170C3_nt2v8Ev
  virtual void  v9(); // _ZN10S5170C3_nt2v9Ev
  virtual void  v10(); // _ZN10S5170C3_nt3v10Ev
  virtual void  v11(); // _ZN10S5170C3_nt3v11Ev
  virtual void  v12(); // _ZN10S5170C3_nt3v12Ev
  virtual void  v13(); // _ZN10S5170C3_nt3v13Ev
  virtual void  v14(); // _ZN10S5170C3_nt3v14Ev
  virtual void  v15(); // _ZN10S5170C3_nt3v15Ev
  virtual void  v16(); // _ZN10S5170C3_nt3v16Ev
  S5170C3_nt(); // tgen
};
//SIG(-1 S5170C3_nt) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13}


 S5170C3_nt ::~S5170C3_nt(){ note_dtor("S5170C3_nt", this);}
void  S5170C3_nt ::v4(){vfunc_called(this, "_ZN10S5170C3_nt2v4Ev");}
void  S5170C3_nt ::v5(){vfunc_called(this, "_ZN10S5170C3_nt2v5Ev");}
void  S5170C3_nt ::v6(){vfunc_called(this, "_ZN10S5170C3_nt2v6Ev");}
void  S5170C3_nt ::v7(){vfunc_called(this, "_ZN10S5170C3_nt2v7Ev");}
void  S5170C3_nt ::v8(){vfunc_called(this, "_ZN10S5170C3_nt2v8Ev");}
void  S5170C3_nt ::v9(){vfunc_called(this, "_ZN10S5170C3_nt2v9Ev");}
void  S5170C3_nt ::v10(){vfunc_called(this, "_ZN10S5170C3_nt3v10Ev");}
void  S5170C3_nt ::v11(){vfunc_called(this, "_ZN10S5170C3_nt3v11Ev");}
void  S5170C3_nt ::v12(){vfunc_called(this, "_ZN10S5170C3_nt3v12Ev");}
void  S5170C3_nt ::v13(){vfunc_called(this, "_ZN10S5170C3_nt3v13Ev");}
void  S5170C3_nt ::v14(){vfunc_called(this, "_ZN10S5170C3_nt3v14Ev");}
void  S5170C3_nt ::v15(){vfunc_called(this, "_ZN10S5170C3_nt3v15Ev");}
void  S5170C3_nt ::v16(){vfunc_called(this, "_ZN10S5170C3_nt3v16Ev");}
S5170C3_nt ::S5170C3_nt(){ note_ctor("S5170C3_nt", this);} // tgen

//skip512 S5170C3_nt

#else // __cplusplus

extern void _ZN10S5170C3_ntC1Ev();
extern void _ZN10S5170C3_ntD1Ev();
Name_Map name_map_S5170C3_nt[] = {
  NSPAIR(_ZN10S5170C3_ntC1Ev),
  NSPAIR(_ZN10S5170C3_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S5170C3_nt[];
extern void _ZN10S5170C3_ntD1Ev();
extern void _ZN10S5170C3_ntD0Ev();
extern void _ZN10S5170C3_nt2v4Ev();
extern void _ZN10S5170C3_nt2v5Ev();
extern void _ZN10S5170C3_nt2v6Ev();
extern void _ZN10S5170C3_nt2v7Ev();
extern void _ZN10S5170C3_nt2v8Ev();
extern void _ZN10S5170C3_nt2v9Ev();
extern void _ZN10S5170C3_nt3v10Ev();
extern void _ZN10S5170C3_nt3v11Ev();
extern void _ZN10S5170C3_nt3v12Ev();
extern void _ZN10S5170C3_nt3v13Ev();
extern void _ZN10S5170C3_nt3v14Ev();
extern void _ZN10S5170C3_nt3v15Ev();
extern void _ZN10S5170C3_nt3v16Ev();
static  VTBL_ENTRY vtc_S5170C3_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S5170C3_nt[0]),
  (VTBL_ENTRY)&_ZN10S5170C3_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S5170C3_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S5170C3_nt2v4Ev,
  (VTBL_ENTRY)&_ZN10S5170C3_nt2v5Ev,
  (VTBL_ENTRY)&_ZN10S5170C3_nt2v6Ev,
  (VTBL_ENTRY)&_ZN10S5170C3_nt2v7Ev,
  (VTBL_ENTRY)&_ZN10S5170C3_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S5170C3_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S5170C3_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S5170C3_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S5170C3_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S5170C3_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S5170C3_nt3v14Ev,
  (VTBL_ENTRY)&_ZN10S5170C3_nt3v15Ev,
  (VTBL_ENTRY)&_ZN10S5170C3_nt3v16Ev,
};
extern VTBL_ENTRY _ZTI10S5170C3_nt[];
VTBL_ENTRY *P__ZTI10S5170C3_nt = _ZTI10S5170C3_nt; 
extern  VTBL_ENTRY _ZTV10S5170C3_nt[];
Class_Descriptor cd_S5170C3_nt = {  "S5170C3_nt", // class name
  0,0,//no base classes
  &(vtc_S5170C3_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI10S5170C3_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S5170C3_nt),17, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S5170C2  : S5170C3_nt {
  void *s5170c2f0[8];
  char s5170c2f1[3];
  int s5170c2f2[3];
  virtual  ~S5170C2(); // _ZN7S5170C2D1Ev
  virtual void  v17(); // _ZN7S5170C23v17Ev
  virtual void  v18(); // _ZN7S5170C23v18Ev
  virtual void  v19(); // _ZN7S5170C23v19Ev
  virtual void  v20(); // _ZN7S5170C23v20Ev
  virtual void  v21(); // _ZN7S5170C23v21Ev
  virtual void  v22(); // _ZN7S5170C23v22Ev
  virtual void  v23(); // _ZN7S5170C23v23Ev
  virtual void  v24(); // _ZN7S5170C23v24Ev
  virtual void  v25(); // _ZN7S5170C23v25Ev
  virtual void  v26(); // _ZN7S5170C23v26Ev
  virtual void  v27(); // _ZN7S5170C23v27Ev
  virtual void  v28(); // _ZN7S5170C23v28Ev
  virtual void  v29(); // _ZN7S5170C23v29Ev
  S5170C2(); // tgen
};
//SIG(-1 S5170C2) C1{ BC2{ vd v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 Fp[8] Fc[3] Fi[3]}


 S5170C2 ::~S5170C2(){ note_dtor("S5170C2", this);}
void  S5170C2 ::v17(){vfunc_called(this, "_ZN7S5170C23v17Ev");}
void  S5170C2 ::v18(){vfunc_called(this, "_ZN7S5170C23v18Ev");}
void  S5170C2 ::v19(){vfunc_called(this, "_ZN7S5170C23v19Ev");}
void  S5170C2 ::v20(){vfunc_called(this, "_ZN7S5170C23v20Ev");}
void  S5170C2 ::v21(){vfunc_called(this, "_ZN7S5170C23v21Ev");}
void  S5170C2 ::v22(){vfunc_called(this, "_ZN7S5170C23v22Ev");}
void  S5170C2 ::v23(){vfunc_called(this, "_ZN7S5170C23v23Ev");}
void  S5170C2 ::v24(){vfunc_called(this, "_ZN7S5170C23v24Ev");}
void  S5170C2 ::v25(){vfunc_called(this, "_ZN7S5170C23v25Ev");}
void  S5170C2 ::v26(){vfunc_called(this, "_ZN7S5170C23v26Ev");}
void  S5170C2 ::v27(){vfunc_called(this, "_ZN7S5170C23v27Ev");}
void  S5170C2 ::v28(){vfunc_called(this, "_ZN7S5170C23v28Ev");}
void  S5170C2 ::v29(){vfunc_called(this, "_ZN7S5170C23v29Ev");}
S5170C2 ::S5170C2(){ note_ctor("S5170C2", this);} // tgen

static void Test_S5170C2()
{
  extern Class_Descriptor cd_S5170C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(12,14)];
    init_test(&cd_S5170C2, buf);
    S5170C2 *dp, &lv = *(dp=new (buf) S5170C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(88,52), "sizeof(S5170C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5170C2)");
    check_base_class_offset(lv, (S5170C3_nt*), 0, "S5170C2");
    check_field_offset(lv, s5170c2f0, ABISELECT(8,4), "S5170C2.s5170c2f0");
    check_field_offset(lv, s5170c2f1, ABISELECT(72,36), "S5170C2.s5170c2f1");
    check_field_offset(lv, s5170c2f2, ABISELECT(76,40), "S5170C2.s5170c2f2");
    test_class_info(&lv, &cd_S5170C2);
    dp->~S5170C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5170C2(Test_S5170C2, "S5170C2", ABISELECT(88,52));

#else // __cplusplus

extern void _ZN7S5170C2C1Ev();
extern void _ZN7S5170C2D1Ev();
Name_Map name_map_S5170C2[] = {
  NSPAIR(_ZN7S5170C2C1Ev),
  NSPAIR(_ZN7S5170C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5170C3_nt;
extern VTBL_ENTRY _ZTI10S5170C3_nt[];
extern  VTBL_ENTRY _ZTV10S5170C3_nt[];
static Base_Class bases_S5170C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5170C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S5170C2[];
extern void _ZN7S5170C2D1Ev();
extern void _ZN7S5170C2D0Ev();
extern void _ZN10S5170C3_nt2v4Ev();
extern void _ZN10S5170C3_nt2v5Ev();
extern void _ZN10S5170C3_nt2v6Ev();
extern void _ZN10S5170C3_nt2v7Ev();
extern void _ZN10S5170C3_nt2v8Ev();
extern void _ZN10S5170C3_nt2v9Ev();
extern void _ZN10S5170C3_nt3v10Ev();
extern void _ZN10S5170C3_nt3v11Ev();
extern void _ZN10S5170C3_nt3v12Ev();
extern void _ZN10S5170C3_nt3v13Ev();
extern void _ZN10S5170C3_nt3v14Ev();
extern void _ZN10S5170C3_nt3v15Ev();
extern void _ZN10S5170C3_nt3v16Ev();
extern void _ZN7S5170C23v17Ev();
extern void _ZN7S5170C23v18Ev();
extern void _ZN7S5170C23v19Ev();
extern void _ZN7S5170C23v20Ev();
extern void _ZN7S5170C23v21Ev();
extern void _ZN7S5170C23v22Ev();
extern void _ZN7S5170C23v23Ev();
extern void _ZN7S5170C23v24Ev();
extern void _ZN7S5170C23v25Ev();
extern void _ZN7S5170C23v26Ev();
extern void _ZN7S5170C23v27Ev();
extern void _ZN7S5170C23v28Ev();
extern void _ZN7S5170C23v29Ev();
static  VTBL_ENTRY vtc_S5170C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5170C2[0]),
  (VTBL_ENTRY)&_ZN7S5170C2D1Ev,
  (VTBL_ENTRY)&_ZN7S5170C2D0Ev,
  (VTBL_ENTRY)&_ZN10S5170C3_nt2v4Ev,
  (VTBL_ENTRY)&_ZN10S5170C3_nt2v5Ev,
  (VTBL_ENTRY)&_ZN10S5170C3_nt2v6Ev,
  (VTBL_ENTRY)&_ZN10S5170C3_nt2v7Ev,
  (VTBL_ENTRY)&_ZN10S5170C3_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S5170C3_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S5170C3_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S5170C3_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S5170C3_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S5170C3_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S5170C3_nt3v14Ev,
  (VTBL_ENTRY)&_ZN10S5170C3_nt3v15Ev,
  (VTBL_ENTRY)&_ZN10S5170C3_nt3v16Ev,
  (VTBL_ENTRY)&_ZN7S5170C23v17Ev,
  (VTBL_ENTRY)&_ZN7S5170C23v18Ev,
  (VTBL_ENTRY)&_ZN7S5170C23v19Ev,
  (VTBL_ENTRY)&_ZN7S5170C23v20Ev,
  (VTBL_ENTRY)&_ZN7S5170C23v21Ev,
  (VTBL_ENTRY)&_ZN7S5170C23v22Ev,
  (VTBL_ENTRY)&_ZN7S5170C23v23Ev,
  (VTBL_ENTRY)&_ZN7S5170C23v24Ev,
  (VTBL_ENTRY)&_ZN7S5170C23v25Ev,
  (VTBL_ENTRY)&_ZN7S5170C23v26Ev,
  (VTBL_ENTRY)&_ZN7S5170C23v27Ev,
  (VTBL_ENTRY)&_ZN7S5170C23v28Ev,
  (VTBL_ENTRY)&_ZN7S5170C23v29Ev,
};
extern VTBL_ENTRY _ZTI7S5170C2[];
extern  VTBL_ENTRY _ZTV7S5170C2[];
Class_Descriptor cd_S5170C2 = {  "S5170C2", // class name
  bases_S5170C2, 1,
  &(vtc_S5170C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(88,52), // object size
  NSPAIRA(_ZTI7S5170C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S5170C2),30, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S5170C1  : S5170C2 {
  int s5170c1f0[2];
  char s5170c1f1[12];
  void *s5170c1f2;
  char s5170c1f3[2];
  int s5170c1f4[2];
  virtual  ~S5170C1(); // _ZN7S5170C1D1Ev
  virtual void  v1(); // _ZN7S5170C12v1Ev
  virtual void  v2(); // _ZN7S5170C12v2Ev
  virtual void  v3(); // _ZN7S5170C12v3Ev
  S5170C1(); // tgen
};
//SIG(1 S5170C1) C1{ BC2{ BC3{ vd v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16} vd v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 Fp[8] Fc[3] Fi[3]} vd v1 v2 v3 Fi[2] Fc[12] Fp Fc[2] Fi[2]}


 S5170C1 ::~S5170C1(){ note_dtor("S5170C1", this);}
void  S5170C1 ::v1(){vfunc_called(this, "_ZN7S5170C12v1Ev");}
void  S5170C1 ::v2(){vfunc_called(this, "_ZN7S5170C12v2Ev");}
void  S5170C1 ::v3(){vfunc_called(this, "_ZN7S5170C12v3Ev");}
S5170C1 ::S5170C1(){ note_ctor("S5170C1", this);} // tgen

static void Test_S5170C1()
{
  extern Class_Descriptor cd_S5170C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(18,23)];
    init_test(&cd_S5170C1, buf);
    S5170C1 *dp, &lv = *(dp=new (buf) S5170C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(136,88), "sizeof(S5170C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5170C1)");
    check_base_class_offset(lv, (S5170C3_nt*)(S5170C2*), 0, "S5170C1");
    check_base_class_offset(lv, (S5170C2*), 0, "S5170C1");
    check_field_offset(lv, s5170c1f0, ABISELECT(88,52), "S5170C1.s5170c1f0");
    check_field_offset(lv, s5170c1f1, ABISELECT(96,60), "S5170C1.s5170c1f1");
    check_field_offset(lv, s5170c1f2, ABISELECT(112,72), "S5170C1.s5170c1f2");
    check_field_offset(lv, s5170c1f3, ABISELECT(120,76), "S5170C1.s5170c1f3");
    check_field_offset(lv, s5170c1f4, ABISELECT(124,80), "S5170C1.s5170c1f4");
    test_class_info(&lv, &cd_S5170C1);
    dp->~S5170C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5170C1(Test_S5170C1, "S5170C1", ABISELECT(136,88));

#else // __cplusplus

extern void _ZN7S5170C1C1Ev();
extern void _ZN7S5170C1D1Ev();
Name_Map name_map_S5170C1[] = {
  NSPAIR(_ZN7S5170C1C1Ev),
  NSPAIR(_ZN7S5170C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5170C3_nt;
extern VTBL_ENTRY _ZTI10S5170C3_nt[];
extern  VTBL_ENTRY _ZTV10S5170C3_nt[];
extern Class_Descriptor cd_S5170C2;
extern VTBL_ENTRY _ZTI7S5170C2[];
extern  VTBL_ENTRY _ZTV7S5170C2[];
static Base_Class bases_S5170C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5170C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S5170C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S5170C1[];
extern void _ZN7S5170C1D1Ev();
extern void _ZN7S5170C1D0Ev();
extern void _ZN10S5170C3_nt2v4Ev();
extern void _ZN10S5170C3_nt2v5Ev();
extern void _ZN10S5170C3_nt2v6Ev();
extern void _ZN10S5170C3_nt2v7Ev();
extern void _ZN10S5170C3_nt2v8Ev();
extern void _ZN10S5170C3_nt2v9Ev();
extern void _ZN10S5170C3_nt3v10Ev();
extern void _ZN10S5170C3_nt3v11Ev();
extern void _ZN10S5170C3_nt3v12Ev();
extern void _ZN10S5170C3_nt3v13Ev();
extern void _ZN10S5170C3_nt3v14Ev();
extern void _ZN10S5170C3_nt3v15Ev();
extern void _ZN10S5170C3_nt3v16Ev();
extern void _ZN7S5170C23v17Ev();
extern void _ZN7S5170C23v18Ev();
extern void _ZN7S5170C23v19Ev();
extern void _ZN7S5170C23v20Ev();
extern void _ZN7S5170C23v21Ev();
extern void _ZN7S5170C23v22Ev();
extern void _ZN7S5170C23v23Ev();
extern void _ZN7S5170C23v24Ev();
extern void _ZN7S5170C23v25Ev();
extern void _ZN7S5170C23v26Ev();
extern void _ZN7S5170C23v27Ev();
extern void _ZN7S5170C23v28Ev();
extern void _ZN7S5170C23v29Ev();
extern void _ZN7S5170C12v1Ev();
extern void _ZN7S5170C12v2Ev();
extern void _ZN7S5170C12v3Ev();
static  VTBL_ENTRY vtc_S5170C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5170C1[0]),
  (VTBL_ENTRY)&_ZN7S5170C1D1Ev,
  (VTBL_ENTRY)&_ZN7S5170C1D0Ev,
  (VTBL_ENTRY)&_ZN10S5170C3_nt2v4Ev,
  (VTBL_ENTRY)&_ZN10S5170C3_nt2v5Ev,
  (VTBL_ENTRY)&_ZN10S5170C3_nt2v6Ev,
  (VTBL_ENTRY)&_ZN10S5170C3_nt2v7Ev,
  (VTBL_ENTRY)&_ZN10S5170C3_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S5170C3_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S5170C3_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S5170C3_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S5170C3_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S5170C3_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S5170C3_nt3v14Ev,
  (VTBL_ENTRY)&_ZN10S5170C3_nt3v15Ev,
  (VTBL_ENTRY)&_ZN10S5170C3_nt3v16Ev,
  (VTBL_ENTRY)&_ZN7S5170C23v17Ev,
  (VTBL_ENTRY)&_ZN7S5170C23v18Ev,
  (VTBL_ENTRY)&_ZN7S5170C23v19Ev,
  (VTBL_ENTRY)&_ZN7S5170C23v20Ev,
  (VTBL_ENTRY)&_ZN7S5170C23v21Ev,
  (VTBL_ENTRY)&_ZN7S5170C23v22Ev,
  (VTBL_ENTRY)&_ZN7S5170C23v23Ev,
  (VTBL_ENTRY)&_ZN7S5170C23v24Ev,
  (VTBL_ENTRY)&_ZN7S5170C23v25Ev,
  (VTBL_ENTRY)&_ZN7S5170C23v26Ev,
  (VTBL_ENTRY)&_ZN7S5170C23v27Ev,
  (VTBL_ENTRY)&_ZN7S5170C23v28Ev,
  (VTBL_ENTRY)&_ZN7S5170C23v29Ev,
  (VTBL_ENTRY)&_ZN7S5170C12v1Ev,
  (VTBL_ENTRY)&_ZN7S5170C12v2Ev,
  (VTBL_ENTRY)&_ZN7S5170C12v3Ev,
};
extern VTBL_ENTRY _ZTI7S5170C1[];
extern  VTBL_ENTRY _ZTV7S5170C1[];
Class_Descriptor cd_S5170C1 = {  "S5170C1", // class name
  bases_S5170C1, 2,
  &(vtc_S5170C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(136,88), // object size
  NSPAIRA(_ZTI7S5170C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S5170C1),33, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1340C4_nt  {
  void *s1340c4f0[2];
  ::S836C20_nt s1340c4f1;
  void *s1340c4f2;
  virtual  ~S1340C4_nt(); // _ZN10S1340C4_ntD1Ev
  virtual void  v2(); // _ZN10S1340C4_nt2v2Ev
  virtual void  v3(); // _ZN10S1340C4_nt2v3Ev
  virtual void  v4(); // _ZN10S1340C4_nt2v4Ev
  virtual void  v5(); // _ZN10S1340C4_nt2v5Ev
  virtual void  v6(); // _ZN10S1340C4_nt2v6Ev
  virtual void  v7(); // _ZN10S1340C4_nt2v7Ev
  virtual void  v8(); // _ZN10S1340C4_nt2v8Ev
  virtual void  v9(); // _ZN10S1340C4_nt2v9Ev
  virtual void  v10(); // _ZN10S1340C4_nt3v10Ev
  virtual void  v11(); // _ZN10S1340C4_nt3v11Ev
  S1340C4_nt(); // tgen
};
//SIG(-1 S1340C4_nt) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 Fp[2] FC2{ m FC3{ m Fp Fi FC4{ m}} Fi} Fp}


 S1340C4_nt ::~S1340C4_nt(){ note_dtor("S1340C4_nt", this);}
void  S1340C4_nt ::v2(){vfunc_called(this, "_ZN10S1340C4_nt2v2Ev");}
void  S1340C4_nt ::v3(){vfunc_called(this, "_ZN10S1340C4_nt2v3Ev");}
void  S1340C4_nt ::v4(){vfunc_called(this, "_ZN10S1340C4_nt2v4Ev");}
void  S1340C4_nt ::v5(){vfunc_called(this, "_ZN10S1340C4_nt2v5Ev");}
void  S1340C4_nt ::v6(){vfunc_called(this, "_ZN10S1340C4_nt2v6Ev");}
void  S1340C4_nt ::v7(){vfunc_called(this, "_ZN10S1340C4_nt2v7Ev");}
void  S1340C4_nt ::v8(){vfunc_called(this, "_ZN10S1340C4_nt2v8Ev");}
void  S1340C4_nt ::v9(){vfunc_called(this, "_ZN10S1340C4_nt2v9Ev");}
void  S1340C4_nt ::v10(){vfunc_called(this, "_ZN10S1340C4_nt3v10Ev");}
void  S1340C4_nt ::v11(){vfunc_called(this, "_ZN10S1340C4_nt3v11Ev");}
S1340C4_nt ::S1340C4_nt(){ note_ctor("S1340C4_nt", this);} // tgen

//skip512 S1340C4_nt

#else // __cplusplus

extern void _ZN10S1340C4_ntC1Ev();
extern void _ZN10S1340C4_ntD1Ev();
Name_Map name_map_S1340C4_nt[] = {
  NSPAIR(_ZN10S1340C4_ntC1Ev),
  NSPAIR(_ZN10S1340C4_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S1340C4_nt[];
extern void _ZN10S1340C4_ntD1Ev();
extern void _ZN10S1340C4_ntD0Ev();
extern void _ZN10S1340C4_nt2v2Ev();
extern void _ZN10S1340C4_nt2v3Ev();
extern void _ZN10S1340C4_nt2v4Ev();
extern void _ZN10S1340C4_nt2v5Ev();
extern void _ZN10S1340C4_nt2v6Ev();
extern void _ZN10S1340C4_nt2v7Ev();
extern void _ZN10S1340C4_nt2v8Ev();
extern void _ZN10S1340C4_nt2v9Ev();
extern void _ZN10S1340C4_nt3v10Ev();
extern void _ZN10S1340C4_nt3v11Ev();
static  VTBL_ENTRY vtc_S1340C4_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S1340C4_nt[0]),
  (VTBL_ENTRY)&_ZN10S1340C4_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S1340C4_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S1340C4_nt2v2Ev,
  (VTBL_ENTRY)&_ZN10S1340C4_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S1340C4_nt2v4Ev,
  (VTBL_ENTRY)&_ZN10S1340C4_nt2v5Ev,
  (VTBL_ENTRY)&_ZN10S1340C4_nt2v6Ev,
  (VTBL_ENTRY)&_ZN10S1340C4_nt2v7Ev,
  (VTBL_ENTRY)&_ZN10S1340C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S1340C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S1340C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S1340C4_nt3v11Ev,
};
extern VTBL_ENTRY _ZTI10S1340C4_nt[];
VTBL_ENTRY *P__ZTI10S1340C4_nt = _ZTI10S1340C4_nt; 
extern  VTBL_ENTRY _ZTV10S1340C4_nt[];
Class_Descriptor cd_S1340C4_nt = {  "S1340C4_nt", // class name
  0,0,//no base classes
  &(vtc_S1340C4_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(56,32), // object size
  NSPAIRA(_ZTI10S1340C4_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S1340C4_nt),14, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1340C3  : S1340C4_nt {
  ::S836C27 s1340c3f0;
  ::S2214C37_nt s1340c3f1;
  virtual  ~S1340C3(); // _ZN7S1340C3D1Ev
  virtual void  v12(); // _ZN7S1340C33v12Ev
  virtual void  v13(); // _ZN7S1340C33v13Ev
  virtual void  v14(); // _ZN7S1340C33v14Ev
  virtual void  v15(); // _ZN7S1340C33v15Ev
  S1340C3(); // tgen
};
//SIG(-1 S1340C3) C1{ BC2{ vd v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 Fp[2] FC3{ m FC4{ m Fp Fi FC5{ m}} Fi} Fp} vd v1 v2 v3 v4 FC6{ m Fp Fi FC7{ m} FC8{ m}} FC9{ m Fp Fi[2] FC10{ m}}}


 S1340C3 ::~S1340C3(){ note_dtor("S1340C3", this);}
void  S1340C3 ::v12(){vfunc_called(this, "_ZN7S1340C33v12Ev");}
void  S1340C3 ::v13(){vfunc_called(this, "_ZN7S1340C33v13Ev");}
void  S1340C3 ::v14(){vfunc_called(this, "_ZN7S1340C33v14Ev");}
void  S1340C3 ::v15(){vfunc_called(this, "_ZN7S1340C33v15Ev");}
S1340C3 ::S1340C3(){ note_ctor("S1340C3", this);} // tgen

static void Test_S1340C3()
{
  extern Class_Descriptor cd_S1340C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S1340C3, buf);
    S1340C3 *dp, &lv = *(dp=new (buf) S1340C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S1340C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1340C3)");
    check_base_class_offset(lv, (S1340C4_nt*), 0, "S1340C3");
    check_field_offset(lv, s1340c3f0, ABISELECT(56,32), "S1340C3.s1340c3f0");
    check_field_offset(lv, s1340c3f1, ABISELECT(72,44), "S1340C3.s1340c3f1");
    test_class_info(&lv, &cd_S1340C3);
    dp->~S1340C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1340C3(Test_S1340C3, "S1340C3", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN7S1340C3C1Ev();
extern void _ZN7S1340C3D1Ev();
Name_Map name_map_S1340C3[] = {
  NSPAIR(_ZN7S1340C3C1Ev),
  NSPAIR(_ZN7S1340C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1340C4_nt;
extern VTBL_ENTRY _ZTI10S1340C4_nt[];
extern  VTBL_ENTRY _ZTV10S1340C4_nt[];
static Base_Class bases_S1340C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1340C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1340C3[];
extern void _ZN7S1340C3D1Ev();
extern void _ZN7S1340C3D0Ev();
extern void _ZN10S1340C4_nt2v2Ev();
extern void _ZN10S1340C4_nt2v3Ev();
extern void _ZN10S1340C4_nt2v4Ev();
extern void _ZN10S1340C4_nt2v5Ev();
extern void _ZN10S1340C4_nt2v6Ev();
extern void _ZN10S1340C4_nt2v7Ev();
extern void _ZN10S1340C4_nt2v8Ev();
extern void _ZN10S1340C4_nt2v9Ev();
extern void _ZN10S1340C4_nt3v10Ev();
extern void _ZN10S1340C4_nt3v11Ev();
extern void _ZN7S1340C33v12Ev();
extern void _ZN7S1340C33v13Ev();
extern void _ZN7S1340C33v14Ev();
extern void _ZN7S1340C33v15Ev();
static  VTBL_ENTRY vtc_S1340C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1340C3[0]),
  (VTBL_ENTRY)&_ZN7S1340C3D1Ev,
  (VTBL_ENTRY)&_ZN7S1340C3D0Ev,
  (VTBL_ENTRY)&_ZN10S1340C4_nt2v2Ev,
  (VTBL_ENTRY)&_ZN10S1340C4_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S1340C4_nt2v4Ev,
  (VTBL_ENTRY)&_ZN10S1340C4_nt2v5Ev,
  (VTBL_ENTRY)&_ZN10S1340C4_nt2v6Ev,
  (VTBL_ENTRY)&_ZN10S1340C4_nt2v7Ev,
  (VTBL_ENTRY)&_ZN10S1340C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S1340C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S1340C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S1340C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN7S1340C33v12Ev,
  (VTBL_ENTRY)&_ZN7S1340C33v13Ev,
  (VTBL_ENTRY)&_ZN7S1340C33v14Ev,
  (VTBL_ENTRY)&_ZN7S1340C33v15Ev,
};
extern VTBL_ENTRY _ZTI7S1340C3[];
extern  VTBL_ENTRY _ZTV7S1340C3[];
Class_Descriptor cd_S1340C3 = {  "S1340C3", // class name
  bases_S1340C3, 1,
  &(vtc_S1340C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI7S1340C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1340C3),18, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1340C2  : S1340C3 {
  virtual  ~S1340C2(); // _ZN7S1340C2D1Ev
  virtual void  v16(); // _ZN7S1340C23v16Ev
  S1340C2(); // tgen
};
//SIG(-1 S1340C2) C1{ BC2{ BC3{ vd v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 Fp[2] FC4{ m FC5{ m Fp Fi FC6{ m}} Fi} Fp} vd v12 v13 v14 v15 FC7{ m Fp Fi FC8{ m} FC9{ m}} FC10{ m Fp Fi[2] FC11{ m}}} vd v1}


 S1340C2 ::~S1340C2(){ note_dtor("S1340C2", this);}
void  S1340C2 ::v16(){vfunc_called(this, "_ZN7S1340C23v16Ev");}
S1340C2 ::S1340C2(){ note_ctor("S1340C2", this);} // tgen

static void Test_S1340C2()
{
  extern Class_Descriptor cd_S1340C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S1340C2, buf);
    S1340C2 *dp, &lv = *(dp=new (buf) S1340C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S1340C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1340C2)");
    check_base_class_offset(lv, (S1340C4_nt*)(S1340C3*), 0, "S1340C2");
    check_base_class_offset(lv, (S1340C3*), 0, "S1340C2");
    test_class_info(&lv, &cd_S1340C2);
    dp->~S1340C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1340C2(Test_S1340C2, "S1340C2", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN7S1340C2C1Ev();
extern void _ZN7S1340C2D1Ev();
Name_Map name_map_S1340C2[] = {
  NSPAIR(_ZN7S1340C2C1Ev),
  NSPAIR(_ZN7S1340C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1340C4_nt;
extern VTBL_ENTRY _ZTI10S1340C4_nt[];
extern  VTBL_ENTRY _ZTV10S1340C4_nt[];
extern Class_Descriptor cd_S1340C3;
extern VTBL_ENTRY _ZTI7S1340C3[];
extern  VTBL_ENTRY _ZTV7S1340C3[];
static Base_Class bases_S1340C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1340C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1340C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1340C2[];
extern void _ZN7S1340C2D1Ev();
extern void _ZN7S1340C2D0Ev();
extern void _ZN10S1340C4_nt2v2Ev();
extern void _ZN10S1340C4_nt2v3Ev();
extern void _ZN10S1340C4_nt2v4Ev();
extern void _ZN10S1340C4_nt2v5Ev();
extern void _ZN10S1340C4_nt2v6Ev();
extern void _ZN10S1340C4_nt2v7Ev();
extern void _ZN10S1340C4_nt2v8Ev();
extern void _ZN10S1340C4_nt2v9Ev();
extern void _ZN10S1340C4_nt3v10Ev();
extern void _ZN10S1340C4_nt3v11Ev();
extern void _ZN7S1340C33v12Ev();
extern void _ZN7S1340C33v13Ev();
extern void _ZN7S1340C33v14Ev();
extern void _ZN7S1340C33v15Ev();
extern void _ZN7S1340C23v16Ev();
static  VTBL_ENTRY vtc_S1340C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1340C2[0]),
  (VTBL_ENTRY)&_ZN7S1340C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1340C2D0Ev,
  (VTBL_ENTRY)&_ZN10S1340C4_nt2v2Ev,
  (VTBL_ENTRY)&_ZN10S1340C4_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S1340C4_nt2v4Ev,
  (VTBL_ENTRY)&_ZN10S1340C4_nt2v5Ev,
  (VTBL_ENTRY)&_ZN10S1340C4_nt2v6Ev,
  (VTBL_ENTRY)&_ZN10S1340C4_nt2v7Ev,
  (VTBL_ENTRY)&_ZN10S1340C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S1340C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S1340C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S1340C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN7S1340C33v12Ev,
  (VTBL_ENTRY)&_ZN7S1340C33v13Ev,
  (VTBL_ENTRY)&_ZN7S1340C33v14Ev,
  (VTBL_ENTRY)&_ZN7S1340C33v15Ev,
  (VTBL_ENTRY)&_ZN7S1340C23v16Ev,
};
extern VTBL_ENTRY _ZTI7S1340C2[];
extern  VTBL_ENTRY _ZTV7S1340C2[];
Class_Descriptor cd_S1340C2 = {  "S1340C2", // class name
  bases_S1340C2, 2,
  &(vtc_S1340C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI7S1340C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1340C2),19, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1340C1  : S1340C2 {
  virtual  ~S1340C1(); // _ZN7S1340C1D1Ev
  virtual void  v1(); // _ZN7S1340C12v1Ev
  S1340C1(); // tgen
};
//SIG(1 S1340C1) C1{ BC2{ BC3{ BC4{ vd v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 Fp[2] FC5{ m FC6{ m Fp Fi FC7{ m}} Fi} Fp} vd v12 v13 v14 v15 FC8{ m Fp Fi FC9{ m} FC10{ m}} FC11{ m Fp Fi[2] FC12{ m}}} vd v16} vd v1}


 S1340C1 ::~S1340C1(){ note_dtor("S1340C1", this);}
void  S1340C1 ::v1(){vfunc_called(this, "_ZN7S1340C12v1Ev");}
S1340C1 ::S1340C1(){ note_ctor("S1340C1", this);} // tgen

static void Test_S1340C1()
{
  extern Class_Descriptor cd_S1340C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S1340C1, buf);
    S1340C1 *dp, &lv = *(dp=new (buf) S1340C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S1340C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1340C1)");
    check_base_class_offset(lv, (S1340C4_nt*)(S1340C3*)(S1340C2*), 0, "S1340C1");
    check_base_class_offset(lv, (S1340C3*)(S1340C2*), 0, "S1340C1");
    check_base_class_offset(lv, (S1340C2*), 0, "S1340C1");
    test_class_info(&lv, &cd_S1340C1);
    dp->~S1340C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1340C1(Test_S1340C1, "S1340C1", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN7S1340C1C1Ev();
extern void _ZN7S1340C1D1Ev();
Name_Map name_map_S1340C1[] = {
  NSPAIR(_ZN7S1340C1C1Ev),
  NSPAIR(_ZN7S1340C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1340C4_nt;
extern VTBL_ENTRY _ZTI10S1340C4_nt[];
extern  VTBL_ENTRY _ZTV10S1340C4_nt[];
extern Class_Descriptor cd_S1340C3;
extern VTBL_ENTRY _ZTI7S1340C3[];
extern  VTBL_ENTRY _ZTV7S1340C3[];
extern Class_Descriptor cd_S1340C2;
extern VTBL_ENTRY _ZTI7S1340C2[];
extern  VTBL_ENTRY _ZTV7S1340C2[];
static Base_Class bases_S1340C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1340C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1340C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S1340C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1340C1[];
extern void _ZN7S1340C1D1Ev();
extern void _ZN7S1340C1D0Ev();
extern void _ZN10S1340C4_nt2v2Ev();
extern void _ZN10S1340C4_nt2v3Ev();
extern void _ZN10S1340C4_nt2v4Ev();
extern void _ZN10S1340C4_nt2v5Ev();
extern void _ZN10S1340C4_nt2v6Ev();
extern void _ZN10S1340C4_nt2v7Ev();
extern void _ZN10S1340C4_nt2v8Ev();
extern void _ZN10S1340C4_nt2v9Ev();
extern void _ZN10S1340C4_nt3v10Ev();
extern void _ZN10S1340C4_nt3v11Ev();
extern void _ZN7S1340C33v12Ev();
extern void _ZN7S1340C33v13Ev();
extern void _ZN7S1340C33v14Ev();
extern void _ZN7S1340C33v15Ev();
extern void _ZN7S1340C23v16Ev();
extern void _ZN7S1340C12v1Ev();
static  VTBL_ENTRY vtc_S1340C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1340C1[0]),
  (VTBL_ENTRY)&_ZN7S1340C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1340C1D0Ev,
  (VTBL_ENTRY)&_ZN10S1340C4_nt2v2Ev,
  (VTBL_ENTRY)&_ZN10S1340C4_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S1340C4_nt2v4Ev,
  (VTBL_ENTRY)&_ZN10S1340C4_nt2v5Ev,
  (VTBL_ENTRY)&_ZN10S1340C4_nt2v6Ev,
  (VTBL_ENTRY)&_ZN10S1340C4_nt2v7Ev,
  (VTBL_ENTRY)&_ZN10S1340C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S1340C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S1340C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S1340C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN7S1340C33v12Ev,
  (VTBL_ENTRY)&_ZN7S1340C33v13Ev,
  (VTBL_ENTRY)&_ZN7S1340C33v14Ev,
  (VTBL_ENTRY)&_ZN7S1340C33v15Ev,
  (VTBL_ENTRY)&_ZN7S1340C23v16Ev,
  (VTBL_ENTRY)&_ZN7S1340C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S1340C1[];
extern  VTBL_ENTRY _ZTV7S1340C1[];
Class_Descriptor cd_S1340C1 = {  "S1340C1", // class name
  bases_S1340C1, 3,
  &(vtc_S1340C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI7S1340C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1340C1),20, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S8713C2  {
  int s8713c2f0;
  char s8713c2f1[3];
  virtual  ~S8713C2(); // _ZN7S8713C2D1Ev
  virtual void  v2(); // _ZN7S8713C22v2Ev
  S8713C2(); // tgen
};
//SIG(-1 S8713C2) C1{ vd v1 Fi Fc[3]}


 S8713C2 ::~S8713C2(){ note_dtor("S8713C2", this);}
void  S8713C2 ::v2(){vfunc_called(this, "_ZN7S8713C22v2Ev");}
S8713C2 ::S8713C2(){ note_ctor("S8713C2", this);} // tgen

static void Test_S8713C2()
{
  extern Class_Descriptor cd_S8713C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S8713C2, buf);
    S8713C2 *dp, &lv = *(dp=new (buf) S8713C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S8713C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8713C2)");
    check_field_offset(lv, s8713c2f0, ABISELECT(8,4), "S8713C2.s8713c2f0");
    check_field_offset(lv, s8713c2f1, ABISELECT(12,8), "S8713C2.s8713c2f1");
    test_class_info(&lv, &cd_S8713C2);
    dp->~S8713C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8713C2(Test_S8713C2, "S8713C2", ABISELECT(16,12));

#else // __cplusplus

extern void _ZN7S8713C2C1Ev();
extern void _ZN7S8713C2D1Ev();
Name_Map name_map_S8713C2[] = {
  NSPAIR(_ZN7S8713C2C1Ev),
  NSPAIR(_ZN7S8713C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S8713C2[];
extern void _ZN7S8713C2D1Ev();
extern void _ZN7S8713C2D0Ev();
extern void _ZN7S8713C22v2Ev();
static  VTBL_ENTRY vtc_S8713C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8713C2[0]),
  (VTBL_ENTRY)&_ZN7S8713C2D1Ev,
  (VTBL_ENTRY)&_ZN7S8713C2D0Ev,
  (VTBL_ENTRY)&_ZN7S8713C22v2Ev,
};
extern VTBL_ENTRY _ZTI7S8713C2[];
extern  VTBL_ENTRY _ZTV7S8713C2[];
Class_Descriptor cd_S8713C2 = {  "S8713C2", // class name
  0,0,//no base classes
  &(vtc_S8713C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI7S8713C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S8713C2),5, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S8713C3  {
  void *s8713c3f0;
  __tsi64 s8713c3f1;
  int s8713c3f2[2];
  char s8713c3f3;
  int s8713c3f4;
  void *s8713c3f5;
  int s8713c3f6[2];
};
//SIG(1 S8713C3) C1{ Fp FL Fi[2] Fc Fi Fp Fi[2]}



static void Test_S8713C3()
{
  {
    init_simple_test("S8713C3");
    S8713C3 lv;
    check2(sizeof(lv), ABISELECT(48,40), "sizeof(S8713C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8713C3)");
    check_field_offset(lv, s8713c3f0, 0, "S8713C3.s8713c3f0");
    check_field_offset(lv, s8713c3f1, ABISELECT(8,4), "S8713C3.s8713c3f1");
    check_field_offset(lv, s8713c3f2, ABISELECT(16,12), "S8713C3.s8713c3f2");
    check_field_offset(lv, s8713c3f3, ABISELECT(24,20), "S8713C3.s8713c3f3");
    check_field_offset(lv, s8713c3f4, ABISELECT(28,24), "S8713C3.s8713c3f4");
    check_field_offset(lv, s8713c3f5, ABISELECT(32,28), "S8713C3.s8713c3f5");
    check_field_offset(lv, s8713c3f6, ABISELECT(40,32), "S8713C3.s8713c3f6");
  }
}
static Arrange_To_Call_Me vS8713C3(Test_S8713C3, "S8713C3", ABISELECT(48,40));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S8713C5_nt  {
  short s8713c5f0[6];
  int s8713c5f1[2];
  char s8713c5f2;
  short s8713c5f3;
  void  mf8713c5(); // _ZN10S8713C5_nt8mf8713c5Ev
};
//SIG(-1 S8713C5_nt) C1{ m Fs[6] Fi[2] Fc Fs}


void  S8713C5_nt ::mf8713c5(){}

//skip512 S8713C5_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S8713C4  {
  int s8713c4f0[2];
  __tsi64 s8713c4f1;
  ::S8713C5_nt s8713c4f2;
  ::S8713C5_nt s8713c4f3;
  ::S8713C5_nt s8713c4f4;
};
//SIG(-1 S8713C4) C1{ Fi[2] FL FC2{ m Fs[6] Fi[2] Fc Fs} FC2 FC2}



static void Test_S8713C4()
{
  {
    init_simple_test("S8713C4");
    S8713C4 lv;
    check2(sizeof(lv), 88, "sizeof(S8713C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8713C4)");
    check_field_offset(lv, s8713c4f0, 0, "S8713C4.s8713c4f0");
    check_field_offset(lv, s8713c4f1, 8, "S8713C4.s8713c4f1");
    check_field_offset(lv, s8713c4f2, 16, "S8713C4.s8713c4f2");
    check_field_offset(lv, s8713c4f3, 40, "S8713C4.s8713c4f3");
    check_field_offset(lv, s8713c4f4, 64, "S8713C4.s8713c4f4");
  }
}
static Arrange_To_Call_Me vS8713C4(Test_S8713C4, "S8713C4", 88);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S8713C7_nt  {
  __tsi64 s8713c7f0[4];
};
//SIG(-1 S8713C7_nt) C1{ FL[4]}



//skip512 S8713C7_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S8713C6_nt  {
  ::S8713C7_nt s8713c6f0;
  void  mf8713c6(); // _ZN10S8713C6_nt8mf8713c6Ev
};
//SIG(-1 S8713C6_nt) C1{ m FC2{ FL[4]}}


void  S8713C6_nt ::mf8713c6(){}

//skip512 S8713C6_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S8713C1  : S8713C2 {
  ::S8713C3 s8713c1f0[8];
  void *s8713c1f1;
  ::S8713C4 s8713c1f2;
  void *s8713c1f3;
  char s8713c1f4;
  int s8713c1f5[3];
  ::S8713C6_nt s8713c1f6;
  ::S8709C11_nt s8713c1f7;
  char s8713c1f8;
  ::S8713C6_nt s8713c1f9;
  virtual  ~S8713C1(); // _ZN7S8713C1D1Ev
  virtual void  v1(); // _ZN7S8713C12v1Ev
  S8713C1(); // tgen
};
//SIG(1 S8713C1) C1{ BC2{ vd v2 Fi Fc[3]} vd v1 FC3{ Fp FL Fi[2] Fc Fi Fp Fi[2]}[8] Fp FC4{ Fi[2] FL FC5{ m Fs[6] Fi[2] Fc Fs} FC5 FC5} Fp Fc Fi[3] FC6{ m FC7{ FL[4]}} FC8{ m Fp FC9{ Fi[4]}} Fc FC6}


 S8713C1 ::~S8713C1(){ note_dtor("S8713C1", this);}
void  S8713C1 ::v1(){vfunc_called(this, "_ZN7S8713C12v1Ev");}
S8713C1 ::S8713C1(){ note_ctor("S8713C1", this);} // tgen

static void Test_S8713C1()
{
  extern Class_Descriptor cd_S8713C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(78,134)];
    init_test(&cd_S8713C1, buf);
    S8713C1 *dp, &lv = *(dp=new (buf) S8713C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(616,532), "sizeof(S8713C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8713C1)");
    check_base_class_offset(lv, (S8713C2*), 0, "S8713C1");
    check_field_offset(lv, s8713c1f0, ABISELECT(16,12), "S8713C1.s8713c1f0");
    check_field_offset(lv, s8713c1f1, ABISELECT(400,332), "S8713C1.s8713c1f1");
    check_field_offset(lv, s8713c1f2, ABISELECT(408,336), "S8713C1.s8713c1f2");
    check_field_offset(lv, s8713c1f3, ABISELECT(496,424), "S8713C1.s8713c1f3");
    check_field_offset(lv, s8713c1f4, ABISELECT(504,428), "S8713C1.s8713c1f4");
    check_field_offset(lv, s8713c1f5, ABISELECT(508,432), "S8713C1.s8713c1f5");
    check_field_offset(lv, s8713c1f6, ABISELECT(520,444), "S8713C1.s8713c1f6");
    check_field_offset(lv, s8713c1f7, ABISELECT(552,476), "S8713C1.s8713c1f7");
    check_field_offset(lv, s8713c1f8, ABISELECT(576,496), "S8713C1.s8713c1f8");
    check_field_offset(lv, s8713c1f9, ABISELECT(584,500), "S8713C1.s8713c1f9");
    test_class_info(&lv, &cd_S8713C1);
    dp->~S8713C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8713C1(Test_S8713C1, "S8713C1", ABISELECT(616,532));

#else // __cplusplus

extern void _ZN7S8713C1C1Ev();
extern void _ZN7S8713C1D1Ev();
Name_Map name_map_S8713C1[] = {
  NSPAIR(_ZN7S8713C1C1Ev),
  NSPAIR(_ZN7S8713C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S8713C2;
extern VTBL_ENTRY _ZTI7S8713C2[];
extern  VTBL_ENTRY _ZTV7S8713C2[];
static Base_Class bases_S8713C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S8713C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S8713C1[];
extern void _ZN7S8713C1D1Ev();
extern void _ZN7S8713C1D0Ev();
extern void _ZN7S8713C22v2Ev();
extern void _ZN7S8713C12v1Ev();
static  VTBL_ENTRY vtc_S8713C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8713C1[0]),
  (VTBL_ENTRY)&_ZN7S8713C1D1Ev,
  (VTBL_ENTRY)&_ZN7S8713C1D0Ev,
  (VTBL_ENTRY)&_ZN7S8713C22v2Ev,
  (VTBL_ENTRY)&_ZN7S8713C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S8713C1[];
extern  VTBL_ENTRY _ZTV7S8713C1[];
Class_Descriptor cd_S8713C1 = {  "S8713C1", // class name
  bases_S8713C1, 1,
  &(vtc_S8713C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(616,532), // object size
  NSPAIRA(_ZTI7S8713C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S8713C1),6, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1341C4  {
  void *s1341c4f0[2];
  ::S836C20_nt s1341c4f1;
  void *s1341c4f2;
  virtual  ~S1341C4(); // _ZN7S1341C4D1Ev
  virtual void  v2(); // _ZN7S1341C42v2Ev
  virtual void  v3(); // _ZN7S1341C42v3Ev
  virtual void  v4(); // _ZN7S1341C42v4Ev
  virtual void  v5(); // _ZN7S1341C42v5Ev
  virtual void  v6(); // _ZN7S1341C42v6Ev
  virtual void  v7(); // _ZN7S1341C42v7Ev
  virtual void  v8(); // _ZN7S1341C42v8Ev
  virtual void  v9(); // _ZN7S1341C42v9Ev
  virtual void  v10(); // _ZN7S1341C43v10Ev
  virtual void  v11(); // _ZN7S1341C43v11Ev
  S1341C4(); // tgen
};
//SIG(-1 S1341C4) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 Fp[2] FC2{ m FC3{ m Fp Fi FC4{ m}} Fi} Fp}


 S1341C4 ::~S1341C4(){ note_dtor("S1341C4", this);}
void  S1341C4 ::v2(){vfunc_called(this, "_ZN7S1341C42v2Ev");}
void  S1341C4 ::v3(){vfunc_called(this, "_ZN7S1341C42v3Ev");}
void  S1341C4 ::v4(){vfunc_called(this, "_ZN7S1341C42v4Ev");}
void  S1341C4 ::v5(){vfunc_called(this, "_ZN7S1341C42v5Ev");}
void  S1341C4 ::v6(){vfunc_called(this, "_ZN7S1341C42v6Ev");}
void  S1341C4 ::v7(){vfunc_called(this, "_ZN7S1341C42v7Ev");}
void  S1341C4 ::v8(){vfunc_called(this, "_ZN7S1341C42v8Ev");}
void  S1341C4 ::v9(){vfunc_called(this, "_ZN7S1341C42v9Ev");}
void  S1341C4 ::v10(){vfunc_called(this, "_ZN7S1341C43v10Ev");}
void  S1341C4 ::v11(){vfunc_called(this, "_ZN7S1341C43v11Ev");}
S1341C4 ::S1341C4(){ note_ctor("S1341C4", this);} // tgen

static void Test_S1341C4()
{
  extern Class_Descriptor cd_S1341C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(8,9)];
    init_test(&cd_S1341C4, buf);
    S1341C4 *dp, &lv = *(dp=new (buf) S1341C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,32), "sizeof(S1341C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1341C4)");
    check_field_offset(lv, s1341c4f0, ABISELECT(8,4), "S1341C4.s1341c4f0");
    check_field_offset(lv, s1341c4f1, ABISELECT(24,12), "S1341C4.s1341c4f1");
    check_field_offset(lv, s1341c4f2, ABISELECT(48,28), "S1341C4.s1341c4f2");
    test_class_info(&lv, &cd_S1341C4);
    dp->~S1341C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1341C4(Test_S1341C4, "S1341C4", ABISELECT(56,32));

#else // __cplusplus

extern void _ZN7S1341C4C1Ev();
extern void _ZN7S1341C4D1Ev();
Name_Map name_map_S1341C4[] = {
  NSPAIR(_ZN7S1341C4C1Ev),
  NSPAIR(_ZN7S1341C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S1341C4[];
extern void _ZN7S1341C4D1Ev();
extern void _ZN7S1341C4D0Ev();
extern void _ZN7S1341C42v2Ev();
extern void _ZN7S1341C42v3Ev();
extern void _ZN7S1341C42v4Ev();
extern void _ZN7S1341C42v5Ev();
extern void _ZN7S1341C42v6Ev();
extern void _ZN7S1341C42v7Ev();
extern void _ZN7S1341C42v8Ev();
extern void _ZN7S1341C42v9Ev();
extern void _ZN7S1341C43v10Ev();
extern void _ZN7S1341C43v11Ev();
static  VTBL_ENTRY vtc_S1341C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1341C4[0]),
  (VTBL_ENTRY)&_ZN7S1341C4D1Ev,
  (VTBL_ENTRY)&_ZN7S1341C4D0Ev,
  (VTBL_ENTRY)&_ZN7S1341C42v2Ev,
  (VTBL_ENTRY)&_ZN7S1341C42v3Ev,
  (VTBL_ENTRY)&_ZN7S1341C42v4Ev,
  (VTBL_ENTRY)&_ZN7S1341C42v5Ev,
  (VTBL_ENTRY)&_ZN7S1341C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1341C42v7Ev,
  (VTBL_ENTRY)&_ZN7S1341C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1341C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1341C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1341C43v11Ev,
};
extern VTBL_ENTRY _ZTI7S1341C4[];
extern  VTBL_ENTRY _ZTV7S1341C4[];
Class_Descriptor cd_S1341C4 = {  "S1341C4", // class name
  0,0,//no base classes
  &(vtc_S1341C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(56,32), // object size
  NSPAIRA(_ZTI7S1341C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S1341C4),14, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1341C3  : S1341C4 {
  ::S836C27 s1341c3f0;
  ::S2214C37_nt s1341c3f1;
  virtual  ~S1341C3(); // _ZN7S1341C3D1Ev
  virtual void  v12(); // _ZN7S1341C33v12Ev
  virtual void  v13(); // _ZN7S1341C33v13Ev
  virtual void  v14(); // _ZN7S1341C33v14Ev
  virtual void  v15(); // _ZN7S1341C33v15Ev
  S1341C3(); // tgen
};
//SIG(-1 S1341C3) C1{ BC2{ vd v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 Fp[2] FC3{ m FC4{ m Fp Fi FC5{ m}} Fi} Fp} vd v1 v2 v3 v4 FC6{ m Fp Fi FC7{ m} FC8{ m}} FC9{ m Fp Fi[2] FC10{ m}}}


 S1341C3 ::~S1341C3(){ note_dtor("S1341C3", this);}
void  S1341C3 ::v12(){vfunc_called(this, "_ZN7S1341C33v12Ev");}
void  S1341C3 ::v13(){vfunc_called(this, "_ZN7S1341C33v13Ev");}
void  S1341C3 ::v14(){vfunc_called(this, "_ZN7S1341C33v14Ev");}
void  S1341C3 ::v15(){vfunc_called(this, "_ZN7S1341C33v15Ev");}
S1341C3 ::S1341C3(){ note_ctor("S1341C3", this);} // tgen

static void Test_S1341C3()
{
  extern Class_Descriptor cd_S1341C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S1341C3, buf);
    S1341C3 *dp, &lv = *(dp=new (buf) S1341C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S1341C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1341C3)");
    check_base_class_offset(lv, (S1341C4*), 0, "S1341C3");
    check_field_offset(lv, s1341c3f0, ABISELECT(56,32), "S1341C3.s1341c3f0");
    check_field_offset(lv, s1341c3f1, ABISELECT(72,44), "S1341C3.s1341c3f1");
    test_class_info(&lv, &cd_S1341C3);
    dp->~S1341C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1341C3(Test_S1341C3, "S1341C3", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN7S1341C3C1Ev();
extern void _ZN7S1341C3D1Ev();
Name_Map name_map_S1341C3[] = {
  NSPAIR(_ZN7S1341C3C1Ev),
  NSPAIR(_ZN7S1341C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1341C4;
extern VTBL_ENTRY _ZTI7S1341C4[];
extern  VTBL_ENTRY _ZTV7S1341C4[];
static Base_Class bases_S1341C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1341C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1341C3[];
extern void _ZN7S1341C3D1Ev();
extern void _ZN7S1341C3D0Ev();
extern void _ZN7S1341C42v2Ev();
extern void _ZN7S1341C42v3Ev();
extern void _ZN7S1341C42v4Ev();
extern void _ZN7S1341C42v5Ev();
extern void _ZN7S1341C42v6Ev();
extern void _ZN7S1341C42v7Ev();
extern void _ZN7S1341C42v8Ev();
extern void _ZN7S1341C42v9Ev();
extern void _ZN7S1341C43v10Ev();
extern void _ZN7S1341C43v11Ev();
extern void _ZN7S1341C33v12Ev();
extern void _ZN7S1341C33v13Ev();
extern void _ZN7S1341C33v14Ev();
extern void _ZN7S1341C33v15Ev();
static  VTBL_ENTRY vtc_S1341C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1341C3[0]),
  (VTBL_ENTRY)&_ZN7S1341C3D1Ev,
  (VTBL_ENTRY)&_ZN7S1341C3D0Ev,
  (VTBL_ENTRY)&_ZN7S1341C42v2Ev,
  (VTBL_ENTRY)&_ZN7S1341C42v3Ev,
  (VTBL_ENTRY)&_ZN7S1341C42v4Ev,
  (VTBL_ENTRY)&_ZN7S1341C42v5Ev,
  (VTBL_ENTRY)&_ZN7S1341C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1341C42v7Ev,
  (VTBL_ENTRY)&_ZN7S1341C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1341C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1341C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1341C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1341C33v12Ev,
  (VTBL_ENTRY)&_ZN7S1341C33v13Ev,
  (VTBL_ENTRY)&_ZN7S1341C33v14Ev,
  (VTBL_ENTRY)&_ZN7S1341C33v15Ev,
};
extern VTBL_ENTRY _ZTI7S1341C3[];
extern  VTBL_ENTRY _ZTV7S1341C3[];
Class_Descriptor cd_S1341C3 = {  "S1341C3", // class name
  bases_S1341C3, 1,
  &(vtc_S1341C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI7S1341C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1341C3),18, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1341C2  : S1341C3 {
  virtual  ~S1341C2(); // _ZN7S1341C2D1Ev
  virtual void  v16(); // _ZN7S1341C23v16Ev
  S1341C2(); // tgen
};
//SIG(-1 S1341C2) C1{ BC2{ BC3{ vd v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 Fp[2] FC4{ m FC5{ m Fp Fi FC6{ m}} Fi} Fp} vd v12 v13 v14 v15 FC7{ m Fp Fi FC8{ m} FC9{ m}} FC10{ m Fp Fi[2] FC11{ m}}} vd v1}


 S1341C2 ::~S1341C2(){ note_dtor("S1341C2", this);}
void  S1341C2 ::v16(){vfunc_called(this, "_ZN7S1341C23v16Ev");}
S1341C2 ::S1341C2(){ note_ctor("S1341C2", this);} // tgen

static void Test_S1341C2()
{
  extern Class_Descriptor cd_S1341C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S1341C2, buf);
    S1341C2 *dp, &lv = *(dp=new (buf) S1341C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S1341C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1341C2)");
    check_base_class_offset(lv, (S1341C4*)(S1341C3*), 0, "S1341C2");
    check_base_class_offset(lv, (S1341C3*), 0, "S1341C2");
    test_class_info(&lv, &cd_S1341C2);
    dp->~S1341C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1341C2(Test_S1341C2, "S1341C2", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN7S1341C2C1Ev();
extern void _ZN7S1341C2D1Ev();
Name_Map name_map_S1341C2[] = {
  NSPAIR(_ZN7S1341C2C1Ev),
  NSPAIR(_ZN7S1341C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1341C4;
extern VTBL_ENTRY _ZTI7S1341C4[];
extern  VTBL_ENTRY _ZTV7S1341C4[];
extern Class_Descriptor cd_S1341C3;
extern VTBL_ENTRY _ZTI7S1341C3[];
extern  VTBL_ENTRY _ZTV7S1341C3[];
static Base_Class bases_S1341C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1341C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1341C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1341C2[];
extern void _ZN7S1341C2D1Ev();
extern void _ZN7S1341C2D0Ev();
extern void _ZN7S1341C42v2Ev();
extern void _ZN7S1341C42v3Ev();
extern void _ZN7S1341C42v4Ev();
extern void _ZN7S1341C42v5Ev();
extern void _ZN7S1341C42v6Ev();
extern void _ZN7S1341C42v7Ev();
extern void _ZN7S1341C42v8Ev();
extern void _ZN7S1341C42v9Ev();
extern void _ZN7S1341C43v10Ev();
extern void _ZN7S1341C43v11Ev();
extern void _ZN7S1341C33v12Ev();
extern void _ZN7S1341C33v13Ev();
extern void _ZN7S1341C33v14Ev();
extern void _ZN7S1341C33v15Ev();
extern void _ZN7S1341C23v16Ev();
static  VTBL_ENTRY vtc_S1341C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1341C2[0]),
  (VTBL_ENTRY)&_ZN7S1341C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1341C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1341C42v2Ev,
  (VTBL_ENTRY)&_ZN7S1341C42v3Ev,
  (VTBL_ENTRY)&_ZN7S1341C42v4Ev,
  (VTBL_ENTRY)&_ZN7S1341C42v5Ev,
  (VTBL_ENTRY)&_ZN7S1341C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1341C42v7Ev,
  (VTBL_ENTRY)&_ZN7S1341C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1341C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1341C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1341C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1341C33v12Ev,
  (VTBL_ENTRY)&_ZN7S1341C33v13Ev,
  (VTBL_ENTRY)&_ZN7S1341C33v14Ev,
  (VTBL_ENTRY)&_ZN7S1341C33v15Ev,
  (VTBL_ENTRY)&_ZN7S1341C23v16Ev,
};
extern VTBL_ENTRY _ZTI7S1341C2[];
extern  VTBL_ENTRY _ZTV7S1341C2[];
Class_Descriptor cd_S1341C2 = {  "S1341C2", // class name
  bases_S1341C2, 2,
  &(vtc_S1341C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI7S1341C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1341C2),19, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1341C1  : S1341C2 {
  virtual void  v1(); // _ZN7S1341C12v1Ev
  ~S1341C1(); // tgen
  S1341C1(); // tgen
};
//SIG(1 S1341C1) C1{ BC2{ BC3{ BC4{ vd v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 Fp[2] FC5{ m FC6{ m Fp Fi FC7{ m}} Fi} Fp} vd v12 v13 v14 v15 FC8{ m Fp Fi FC9{ m} FC10{ m}} FC11{ m Fp Fi[2] FC12{ m}}} vd v16} v1}


void  S1341C1 ::v1(){vfunc_called(this, "_ZN7S1341C12v1Ev");}
S1341C1 ::~S1341C1(){ note_dtor("S1341C1", this);} // tgen
S1341C1 ::S1341C1(){ note_ctor("S1341C1", this);} // tgen

static void Test_S1341C1()
{
  extern Class_Descriptor cd_S1341C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S1341C1, buf);
    S1341C1 *dp, &lv = *(dp=new (buf) S1341C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S1341C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1341C1)");
    check_base_class_offset(lv, (S1341C4*)(S1341C3*)(S1341C2*), 0, "S1341C1");
    check_base_class_offset(lv, (S1341C3*)(S1341C2*), 0, "S1341C1");
    check_base_class_offset(lv, (S1341C2*), 0, "S1341C1");
    test_class_info(&lv, &cd_S1341C1);
    dp->~S1341C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1341C1(Test_S1341C1, "S1341C1", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN7S1341C1C1Ev();
extern void _ZN7S1341C1D1Ev();
Name_Map name_map_S1341C1[] = {
  NSPAIR(_ZN7S1341C1C1Ev),
  NSPAIR(_ZN7S1341C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1341C4;
extern VTBL_ENTRY _ZTI7S1341C4[];
extern  VTBL_ENTRY _ZTV7S1341C4[];
extern Class_Descriptor cd_S1341C3;
extern VTBL_ENTRY _ZTI7S1341C3[];
extern  VTBL_ENTRY _ZTV7S1341C3[];
extern Class_Descriptor cd_S1341C2;
extern VTBL_ENTRY _ZTI7S1341C2[];
extern  VTBL_ENTRY _ZTV7S1341C2[];
static Base_Class bases_S1341C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1341C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1341C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S1341C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1341C1[];
extern void _ZN7S1341C1D1Ev();
extern void _ZN7S1341C1D0Ev();
extern void _ZN7S1341C42v2Ev();
extern void _ZN7S1341C42v3Ev();
extern void _ZN7S1341C42v4Ev();
extern void _ZN7S1341C42v5Ev();
extern void _ZN7S1341C42v6Ev();
extern void _ZN7S1341C42v7Ev();
extern void _ZN7S1341C42v8Ev();
extern void _ZN7S1341C42v9Ev();
extern void _ZN7S1341C43v10Ev();
extern void _ZN7S1341C43v11Ev();
extern void _ZN7S1341C33v12Ev();
extern void _ZN7S1341C33v13Ev();
extern void _ZN7S1341C33v14Ev();
extern void _ZN7S1341C33v15Ev();
extern void _ZN7S1341C23v16Ev();
extern void _ZN7S1341C12v1Ev();
static  VTBL_ENTRY vtc_S1341C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1341C1[0]),
  (VTBL_ENTRY)&_ZN7S1341C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1341C1D0Ev,
  (VTBL_ENTRY)&_ZN7S1341C42v2Ev,
  (VTBL_ENTRY)&_ZN7S1341C42v3Ev,
  (VTBL_ENTRY)&_ZN7S1341C42v4Ev,
  (VTBL_ENTRY)&_ZN7S1341C42v5Ev,
  (VTBL_ENTRY)&_ZN7S1341C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1341C42v7Ev,
  (VTBL_ENTRY)&_ZN7S1341C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1341C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1341C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1341C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1341C33v12Ev,
  (VTBL_ENTRY)&_ZN7S1341C33v13Ev,
  (VTBL_ENTRY)&_ZN7S1341C33v14Ev,
  (VTBL_ENTRY)&_ZN7S1341C33v15Ev,
  (VTBL_ENTRY)&_ZN7S1341C23v16Ev,
  (VTBL_ENTRY)&_ZN7S1341C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S1341C1[];
extern  VTBL_ENTRY _ZTV7S1341C1[];
Class_Descriptor cd_S1341C1 = {  "S1341C1", // class name
  bases_S1341C1, 3,
  &(vtc_S1341C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI7S1341C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1341C1),20, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S8712C2  {
  int s8712c2f0;
  char s8712c2f1[3];
  virtual  ~S8712C2(); // _ZN7S8712C2D1Ev
  virtual void  v2(); // _ZN7S8712C22v2Ev
  S8712C2(); // tgen
};
//SIG(-1 S8712C2) C1{ vd v1 Fi Fc[3]}


 S8712C2 ::~S8712C2(){ note_dtor("S8712C2", this);}
void  S8712C2 ::v2(){vfunc_called(this, "_ZN7S8712C22v2Ev");}
S8712C2 ::S8712C2(){ note_ctor("S8712C2", this);} // tgen

static void Test_S8712C2()
{
  extern Class_Descriptor cd_S8712C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S8712C2, buf);
    S8712C2 *dp, &lv = *(dp=new (buf) S8712C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S8712C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8712C2)");
    check_field_offset(lv, s8712c2f0, ABISELECT(8,4), "S8712C2.s8712c2f0");
    check_field_offset(lv, s8712c2f1, ABISELECT(12,8), "S8712C2.s8712c2f1");
    test_class_info(&lv, &cd_S8712C2);
    dp->~S8712C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8712C2(Test_S8712C2, "S8712C2", ABISELECT(16,12));

#else // __cplusplus

extern void _ZN7S8712C2C1Ev();
extern void _ZN7S8712C2D1Ev();
Name_Map name_map_S8712C2[] = {
  NSPAIR(_ZN7S8712C2C1Ev),
  NSPAIR(_ZN7S8712C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S8712C2[];
extern void _ZN7S8712C2D1Ev();
extern void _ZN7S8712C2D0Ev();
extern void _ZN7S8712C22v2Ev();
static  VTBL_ENTRY vtc_S8712C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8712C2[0]),
  (VTBL_ENTRY)&_ZN7S8712C2D1Ev,
  (VTBL_ENTRY)&_ZN7S8712C2D0Ev,
  (VTBL_ENTRY)&_ZN7S8712C22v2Ev,
};
extern VTBL_ENTRY _ZTI7S8712C2[];
extern  VTBL_ENTRY _ZTV7S8712C2[];
Class_Descriptor cd_S8712C2 = {  "S8712C2", // class name
  0,0,//no base classes
  &(vtc_S8712C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI7S8712C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S8712C2),5, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S8712C1  : S8712C2 {
  ::S8713C3 s8712c1f0[8];
  void *s8712c1f1;
  ::S8713C4 s8712c1f2;
  void *s8712c1f3;
  char s8712c1f4;
  int s8712c1f5[3];
  ::S8709C8_nt s8712c1f6;
  ::S8709C11_nt s8712c1f7;
  char s8712c1f8;
  ::S8709C8_nt s8712c1f9;
  virtual  ~S8712C1(); // _ZN7S8712C1D1Ev
  virtual void  v1(); // _ZN7S8712C12v1Ev
  S8712C1(); // tgen
};
//SIG(1 S8712C1) C1{ BC2{ vd v2 Fi Fc[3]} vd v1 FC3{ Fp FL Fi[2] Fc Fi Fp Fi[2]}[8] Fp FC4{ Fi[2] FL FC5{ m Fs[6] Fi[2] Fc Fs} FC5 FC5} Fp Fc Fi[3] FC6{ m FC7{ Fl[4]}} FC8{ m Fp FC9{ Fi[4]}} Fc FC6}


 S8712C1 ::~S8712C1(){ note_dtor("S8712C1", this);}
void  S8712C1 ::v1(){vfunc_called(this, "_ZN7S8712C12v1Ev");}
S8712C1 ::S8712C1(){ note_ctor("S8712C1", this);} // tgen

static void Test_S8712C1()
{
  extern Class_Descriptor cd_S8712C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(78,126)];
    init_test(&cd_S8712C1, buf);
    S8712C1 *dp, &lv = *(dp=new (buf) S8712C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(616,500), "sizeof(S8712C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8712C1)");
    check_base_class_offset(lv, (S8712C2*), 0, "S8712C1");
    check_field_offset(lv, s8712c1f0, ABISELECT(16,12), "S8712C1.s8712c1f0");
    check_field_offset(lv, s8712c1f1, ABISELECT(400,332), "S8712C1.s8712c1f1");
    check_field_offset(lv, s8712c1f2, ABISELECT(408,336), "S8712C1.s8712c1f2");
    check_field_offset(lv, s8712c1f3, ABISELECT(496,424), "S8712C1.s8712c1f3");
    check_field_offset(lv, s8712c1f4, ABISELECT(504,428), "S8712C1.s8712c1f4");
    check_field_offset(lv, s8712c1f5, ABISELECT(508,432), "S8712C1.s8712c1f5");
    check_field_offset(lv, s8712c1f6, ABISELECT(520,444), "S8712C1.s8712c1f6");
    check_field_offset(lv, s8712c1f7, ABISELECT(552,460), "S8712C1.s8712c1f7");
    check_field_offset(lv, s8712c1f8, ABISELECT(576,480), "S8712C1.s8712c1f8");
    check_field_offset(lv, s8712c1f9, ABISELECT(584,484), "S8712C1.s8712c1f9");
    test_class_info(&lv, &cd_S8712C1);
    dp->~S8712C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8712C1(Test_S8712C1, "S8712C1", ABISELECT(616,500));

#else // __cplusplus

extern void _ZN7S8712C1C1Ev();
extern void _ZN7S8712C1D1Ev();
Name_Map name_map_S8712C1[] = {
  NSPAIR(_ZN7S8712C1C1Ev),
  NSPAIR(_ZN7S8712C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S8712C2;
extern VTBL_ENTRY _ZTI7S8712C2[];
extern  VTBL_ENTRY _ZTV7S8712C2[];
static Base_Class bases_S8712C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S8712C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S8712C1[];
extern void _ZN7S8712C1D1Ev();
extern void _ZN7S8712C1D0Ev();
extern void _ZN7S8712C22v2Ev();
extern void _ZN7S8712C12v1Ev();
static  VTBL_ENTRY vtc_S8712C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8712C1[0]),
  (VTBL_ENTRY)&_ZN7S8712C1D1Ev,
  (VTBL_ENTRY)&_ZN7S8712C1D0Ev,
  (VTBL_ENTRY)&_ZN7S8712C22v2Ev,
  (VTBL_ENTRY)&_ZN7S8712C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S8712C1[];
extern  VTBL_ENTRY _ZTV7S8712C1[];
Class_Descriptor cd_S8712C1 = {  "S8712C1", // class name
  bases_S8712C1, 1,
  &(vtc_S8712C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(616,500), // object size
  NSPAIRA(_ZTI7S8712C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S8712C1),6, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S8714C2  {
  int s8714c2f0;
  char s8714c2f1[3];
  virtual  ~S8714C2(); // _ZN7S8714C2D1Ev
  virtual void  v2(); // _ZN7S8714C22v2Ev
  S8714C2(); // tgen
};
//SIG(-1 S8714C2) C1{ vd v1 Fi Fc[3]}


 S8714C2 ::~S8714C2(){ note_dtor("S8714C2", this);}
void  S8714C2 ::v2(){vfunc_called(this, "_ZN7S8714C22v2Ev");}
S8714C2 ::S8714C2(){ note_ctor("S8714C2", this);} // tgen

static void Test_S8714C2()
{
  extern Class_Descriptor cd_S8714C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S8714C2, buf);
    S8714C2 *dp, &lv = *(dp=new (buf) S8714C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S8714C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8714C2)");
    check_field_offset(lv, s8714c2f0, ABISELECT(8,4), "S8714C2.s8714c2f0");
    check_field_offset(lv, s8714c2f1, ABISELECT(12,8), "S8714C2.s8714c2f1");
    test_class_info(&lv, &cd_S8714C2);
    dp->~S8714C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8714C2(Test_S8714C2, "S8714C2", ABISELECT(16,12));

#else // __cplusplus

extern void _ZN7S8714C2C1Ev();
extern void _ZN7S8714C2D1Ev();
Name_Map name_map_S8714C2[] = {
  NSPAIR(_ZN7S8714C2C1Ev),
  NSPAIR(_ZN7S8714C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S8714C2[];
extern void _ZN7S8714C2D1Ev();
extern void _ZN7S8714C2D0Ev();
extern void _ZN7S8714C22v2Ev();
static  VTBL_ENTRY vtc_S8714C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8714C2[0]),
  (VTBL_ENTRY)&_ZN7S8714C2D1Ev,
  (VTBL_ENTRY)&_ZN7S8714C2D0Ev,
  (VTBL_ENTRY)&_ZN7S8714C22v2Ev,
};
extern VTBL_ENTRY _ZTI7S8714C2[];
extern  VTBL_ENTRY _ZTV7S8714C2[];
Class_Descriptor cd_S8714C2 = {  "S8714C2", // class name
  0,0,//no base classes
  &(vtc_S8714C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI7S8714C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S8714C2),5, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S8714C6_nt  {
  __tsi64 s8714c6f0[4];
  void  mf8714c6(); // _ZN10S8714C6_nt8mf8714c6Ev
};
//SIG(-1 S8714C6_nt) C1{ m FL[4]}


void  S8714C6_nt ::mf8714c6(){}

//skip512 S8714C6_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S8714C1  : S8714C2 {
  ::S8713C3 s8714c1f0[8];
  void *s8714c1f1;
  ::S8713C4 s8714c1f2;
  void *s8714c1f3;
  char s8714c1f4;
  int s8714c1f5[3];
  ::S8714C6_nt s8714c1f6;
  ::S8709C11_nt s8714c1f7;
  char s8714c1f8;
  ::S8714C6_nt s8714c1f9;
  virtual  ~S8714C1(); // _ZN7S8714C1D1Ev
  virtual void  v1(); // _ZN7S8714C12v1Ev
  S8714C1(); // tgen
};
//SIG(1 S8714C1) C1{ BC2{ vd v2 Fi Fc[3]} vd v1 FC3{ Fp FL Fi[2] Fc Fi Fp Fi[2]}[8] Fp FC4{ Fi[2] FL FC5{ m Fs[6] Fi[2] Fc Fs} FC5 FC5} Fp Fc Fi[3] FC6{ m FL[4]} FC7{ m Fp FC8{ Fi[4]}} Fc FC6}


 S8714C1 ::~S8714C1(){ note_dtor("S8714C1", this);}
void  S8714C1 ::v1(){vfunc_called(this, "_ZN7S8714C12v1Ev");}
S8714C1 ::S8714C1(){ note_ctor("S8714C1", this);} // tgen

static void Test_S8714C1()
{
  extern Class_Descriptor cd_S8714C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(78,134)];
    init_test(&cd_S8714C1, buf);
    S8714C1 *dp, &lv = *(dp=new (buf) S8714C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(616,532), "sizeof(S8714C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8714C1)");
    check_base_class_offset(lv, (S8714C2*), 0, "S8714C1");
    check_field_offset(lv, s8714c1f0, ABISELECT(16,12), "S8714C1.s8714c1f0");
    check_field_offset(lv, s8714c1f1, ABISELECT(400,332), "S8714C1.s8714c1f1");
    check_field_offset(lv, s8714c1f2, ABISELECT(408,336), "S8714C1.s8714c1f2");
    check_field_offset(lv, s8714c1f3, ABISELECT(496,424), "S8714C1.s8714c1f3");
    check_field_offset(lv, s8714c1f4, ABISELECT(504,428), "S8714C1.s8714c1f4");
    check_field_offset(lv, s8714c1f5, ABISELECT(508,432), "S8714C1.s8714c1f5");
    check_field_offset(lv, s8714c1f6, ABISELECT(520,444), "S8714C1.s8714c1f6");
    check_field_offset(lv, s8714c1f7, ABISELECT(552,476), "S8714C1.s8714c1f7");
    check_field_offset(lv, s8714c1f8, ABISELECT(576,496), "S8714C1.s8714c1f8");
    check_field_offset(lv, s8714c1f9, ABISELECT(584,500), "S8714C1.s8714c1f9");
    test_class_info(&lv, &cd_S8714C1);
    dp->~S8714C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8714C1(Test_S8714C1, "S8714C1", ABISELECT(616,532));

#else // __cplusplus

extern void _ZN7S8714C1C1Ev();
extern void _ZN7S8714C1D1Ev();
Name_Map name_map_S8714C1[] = {
  NSPAIR(_ZN7S8714C1C1Ev),
  NSPAIR(_ZN7S8714C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S8714C2;
extern VTBL_ENTRY _ZTI7S8714C2[];
extern  VTBL_ENTRY _ZTV7S8714C2[];
static Base_Class bases_S8714C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S8714C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S8714C1[];
extern void _ZN7S8714C1D1Ev();
extern void _ZN7S8714C1D0Ev();
extern void _ZN7S8714C22v2Ev();
extern void _ZN7S8714C12v1Ev();
static  VTBL_ENTRY vtc_S8714C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8714C1[0]),
  (VTBL_ENTRY)&_ZN7S8714C1D1Ev,
  (VTBL_ENTRY)&_ZN7S8714C1D0Ev,
  (VTBL_ENTRY)&_ZN7S8714C22v2Ev,
  (VTBL_ENTRY)&_ZN7S8714C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S8714C1[];
extern  VTBL_ENTRY _ZTV7S8714C1[];
Class_Descriptor cd_S8714C1 = {  "S8714C1", // class name
  bases_S8714C1, 1,
  &(vtc_S8714C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(616,532), // object size
  NSPAIRA(_ZTI7S8714C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S8714C1),6, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4277C3  {
  char s4277c3f0[1024];
  int s4277c3f1[2];
  virtual  ~S4277C3(); // _ZN7S4277C3D1Ev
  virtual void  v15(); // _ZN7S4277C33v15Ev
  virtual void  v16(); // _ZN7S4277C33v16Ev
  virtual void  v17(); // _ZN7S4277C33v17Ev
  virtual void  v18(); // _ZN7S4277C33v18Ev
  virtual void  v19(); // _ZN7S4277C33v19Ev
  virtual void  v20(); // _ZN7S4277C33v20Ev
  virtual void  v21(); // _ZN7S4277C33v21Ev
  virtual void  v22(); // _ZN7S4277C33v22Ev
  virtual void  v23(); // _ZN7S4277C33v23Ev
  virtual void  v24(); // _ZN7S4277C33v24Ev
  virtual void  v25(); // _ZN7S4277C33v25Ev
  virtual void  v26(); // _ZN7S4277C33v26Ev
  virtual void  v27(); // _ZN7S4277C33v27Ev
  S4277C3(); // tgen
};
//SIG(-1 S4277C3) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 Fc[1024] Fi[2]}


 S4277C3 ::~S4277C3(){ note_dtor("S4277C3", this);}
void  S4277C3 ::v15(){vfunc_called(this, "_ZN7S4277C33v15Ev");}
void  S4277C3 ::v16(){vfunc_called(this, "_ZN7S4277C33v16Ev");}
void  S4277C3 ::v17(){vfunc_called(this, "_ZN7S4277C33v17Ev");}
void  S4277C3 ::v18(){vfunc_called(this, "_ZN7S4277C33v18Ev");}
void  S4277C3 ::v19(){vfunc_called(this, "_ZN7S4277C33v19Ev");}
void  S4277C3 ::v20(){vfunc_called(this, "_ZN7S4277C33v20Ev");}
void  S4277C3 ::v21(){vfunc_called(this, "_ZN7S4277C33v21Ev");}
void  S4277C3 ::v22(){vfunc_called(this, "_ZN7S4277C33v22Ev");}
void  S4277C3 ::v23(){vfunc_called(this, "_ZN7S4277C33v23Ev");}
void  S4277C3 ::v24(){vfunc_called(this, "_ZN7S4277C33v24Ev");}
void  S4277C3 ::v25(){vfunc_called(this, "_ZN7S4277C33v25Ev");}
void  S4277C3 ::v26(){vfunc_called(this, "_ZN7S4277C33v26Ev");}
void  S4277C3 ::v27(){vfunc_called(this, "_ZN7S4277C33v27Ev");}
S4277C3 ::S4277C3(){ note_ctor("S4277C3", this);} // tgen

static void Test_S4277C3()
{
  extern Class_Descriptor cd_S4277C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(131,260)];
    init_test(&cd_S4277C3, buf);
    S4277C3 *dp, &lv = *(dp=new (buf) S4277C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1040,1036), "sizeof(S4277C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4277C3)");
    check_field_offset(lv, s4277c3f0, ABISELECT(8,4), "S4277C3.s4277c3f0");
    check_field_offset(lv, s4277c3f1, ABISELECT(1032,1028), "S4277C3.s4277c3f1");
    test_class_info(&lv, &cd_S4277C3);
    dp->~S4277C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4277C3(Test_S4277C3, "S4277C3", ABISELECT(1040,1036));

#else // __cplusplus

extern void _ZN7S4277C3C1Ev();
extern void _ZN7S4277C3D1Ev();
Name_Map name_map_S4277C3[] = {
  NSPAIR(_ZN7S4277C3C1Ev),
  NSPAIR(_ZN7S4277C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4277C3[];
extern void _ZN7S4277C3D1Ev();
extern void _ZN7S4277C3D0Ev();
extern void _ZN7S4277C33v15Ev();
extern void _ZN7S4277C33v16Ev();
extern void _ZN7S4277C33v17Ev();
extern void _ZN7S4277C33v18Ev();
extern void _ZN7S4277C33v19Ev();
extern void _ZN7S4277C33v20Ev();
extern void _ZN7S4277C33v21Ev();
extern void _ZN7S4277C33v22Ev();
extern void _ZN7S4277C33v23Ev();
extern void _ZN7S4277C33v24Ev();
extern void _ZN7S4277C33v25Ev();
extern void _ZN7S4277C33v26Ev();
extern void _ZN7S4277C33v27Ev();
static  VTBL_ENTRY vtc_S4277C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4277C3[0]),
  (VTBL_ENTRY)&_ZN7S4277C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4277C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4277C33v15Ev,
  (VTBL_ENTRY)&_ZN7S4277C33v16Ev,
  (VTBL_ENTRY)&_ZN7S4277C33v17Ev,
  (VTBL_ENTRY)&_ZN7S4277C33v18Ev,
  (VTBL_ENTRY)&_ZN7S4277C33v19Ev,
  (VTBL_ENTRY)&_ZN7S4277C33v20Ev,
  (VTBL_ENTRY)&_ZN7S4277C33v21Ev,
  (VTBL_ENTRY)&_ZN7S4277C33v22Ev,
  (VTBL_ENTRY)&_ZN7S4277C33v23Ev,
  (VTBL_ENTRY)&_ZN7S4277C33v24Ev,
  (VTBL_ENTRY)&_ZN7S4277C33v25Ev,
  (VTBL_ENTRY)&_ZN7S4277C33v26Ev,
  (VTBL_ENTRY)&_ZN7S4277C33v27Ev,
};
extern VTBL_ENTRY _ZTI7S4277C3[];
extern  VTBL_ENTRY _ZTV7S4277C3[];
Class_Descriptor cd_S4277C3 = {  "S4277C3", // class name
  0,0,//no base classes
  &(vtc_S4277C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(1040,1036), // object size
  NSPAIRA(_ZTI7S4277C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4277C3),17, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4277C2  : S4277C3 {
  virtual  ~S4277C2(); // _ZN7S4277C2D1Ev
  virtual void  v28(); // _ZN7S4277C23v28Ev
  virtual void  v29(); // _ZN7S4277C23v29Ev
  virtual void  v30(); // _ZN7S4277C23v30Ev
  virtual void  v31(); // _ZN7S4277C23v31Ev
  S4277C2(); // tgen
};
//SIG(-1 S4277C2) C1{ BC2{ vd v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 Fc[1024] Fi[2]} vd v1 v2 v3 v4}


 S4277C2 ::~S4277C2(){ note_dtor("S4277C2", this);}
void  S4277C2 ::v28(){vfunc_called(this, "_ZN7S4277C23v28Ev");}
void  S4277C2 ::v29(){vfunc_called(this, "_ZN7S4277C23v29Ev");}
void  S4277C2 ::v30(){vfunc_called(this, "_ZN7S4277C23v30Ev");}
void  S4277C2 ::v31(){vfunc_called(this, "_ZN7S4277C23v31Ev");}
S4277C2 ::S4277C2(){ note_ctor("S4277C2", this);} // tgen

static void Test_S4277C2()
{
  extern Class_Descriptor cd_S4277C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(131,260)];
    init_test(&cd_S4277C2, buf);
    S4277C2 *dp, &lv = *(dp=new (buf) S4277C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1040,1036), "sizeof(S4277C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4277C2)");
    check_base_class_offset(lv, (S4277C3*), 0, "S4277C2");
    test_class_info(&lv, &cd_S4277C2);
    dp->~S4277C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4277C2(Test_S4277C2, "S4277C2", ABISELECT(1040,1036));

#else // __cplusplus

extern void _ZN7S4277C2C1Ev();
extern void _ZN7S4277C2D1Ev();
Name_Map name_map_S4277C2[] = {
  NSPAIR(_ZN7S4277C2C1Ev),
  NSPAIR(_ZN7S4277C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4277C3;
extern VTBL_ENTRY _ZTI7S4277C3[];
extern  VTBL_ENTRY _ZTV7S4277C3[];
static Base_Class bases_S4277C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4277C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4277C2[];
extern void _ZN7S4277C2D1Ev();
extern void _ZN7S4277C2D0Ev();
extern void _ZN7S4277C33v15Ev();
extern void _ZN7S4277C33v16Ev();
extern void _ZN7S4277C33v17Ev();
extern void _ZN7S4277C33v18Ev();
extern void _ZN7S4277C33v19Ev();
extern void _ZN7S4277C33v20Ev();
extern void _ZN7S4277C33v21Ev();
extern void _ZN7S4277C33v22Ev();
extern void _ZN7S4277C33v23Ev();
extern void _ZN7S4277C33v24Ev();
extern void _ZN7S4277C33v25Ev();
extern void _ZN7S4277C33v26Ev();
extern void _ZN7S4277C33v27Ev();
extern void _ZN7S4277C23v28Ev();
extern void _ZN7S4277C23v29Ev();
extern void _ZN7S4277C23v30Ev();
extern void _ZN7S4277C23v31Ev();
static  VTBL_ENTRY vtc_S4277C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4277C2[0]),
  (VTBL_ENTRY)&_ZN7S4277C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4277C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4277C33v15Ev,
  (VTBL_ENTRY)&_ZN7S4277C33v16Ev,
  (VTBL_ENTRY)&_ZN7S4277C33v17Ev,
  (VTBL_ENTRY)&_ZN7S4277C33v18Ev,
  (VTBL_ENTRY)&_ZN7S4277C33v19Ev,
  (VTBL_ENTRY)&_ZN7S4277C33v20Ev,
  (VTBL_ENTRY)&_ZN7S4277C33v21Ev,
  (VTBL_ENTRY)&_ZN7S4277C33v22Ev,
  (VTBL_ENTRY)&_ZN7S4277C33v23Ev,
  (VTBL_ENTRY)&_ZN7S4277C33v24Ev,
  (VTBL_ENTRY)&_ZN7S4277C33v25Ev,
  (VTBL_ENTRY)&_ZN7S4277C33v26Ev,
  (VTBL_ENTRY)&_ZN7S4277C33v27Ev,
  (VTBL_ENTRY)&_ZN7S4277C23v28Ev,
  (VTBL_ENTRY)&_ZN7S4277C23v29Ev,
  (VTBL_ENTRY)&_ZN7S4277C23v30Ev,
  (VTBL_ENTRY)&_ZN7S4277C23v31Ev,
};
extern VTBL_ENTRY _ZTI7S4277C2[];
extern  VTBL_ENTRY _ZTV7S4277C2[];
Class_Descriptor cd_S4277C2 = {  "S4277C2", // class name
  bases_S4277C2, 1,
  &(vtc_S4277C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(1040,1036), // object size
  NSPAIRA(_ZTI7S4277C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4277C2),21, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4277C1  : S4277C2 {
  char s4277c1f0;
  __tsi64 s4277c1f1;
  void *s4277c1f2;
  virtual  ~S4277C1(); // _ZN7S4277C1D1Ev
  virtual void  v1(); // _ZN7S4277C12v1Ev
  virtual void  v2(); // _ZN7S4277C12v2Ev
  virtual void  v3(); // _ZN7S4277C12v3Ev
  virtual void  v4(); // _ZN7S4277C12v4Ev
  virtual void  v5(); // _ZN7S4277C12v5Ev
  virtual void  v6(); // _ZN7S4277C12v6Ev
  virtual void  v7(); // _ZN7S4277C12v7Ev
  virtual void  v8(); // _ZN7S4277C12v8Ev
  virtual void  v9(); // _ZN7S4277C12v9Ev
  virtual void  v10(); // _ZN7S4277C13v10Ev
  virtual void  v11(); // _ZN7S4277C13v11Ev
  virtual void  v12(); // _ZN7S4277C13v12Ev
  virtual void  v13(); // _ZN7S4277C13v13Ev
  virtual void  v14(); // _ZN7S4277C13v14Ev
  S4277C1(); // tgen
};
//SIG(1 S4277C1) C1{ BC2{ BC3{ vd v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 Fc[1024] Fi[2]} vd v28 v29 v30 v31} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 Fc FL Fp}


 S4277C1 ::~S4277C1(){ note_dtor("S4277C1", this);}
void  S4277C1 ::v1(){vfunc_called(this, "_ZN7S4277C12v1Ev");}
void  S4277C1 ::v2(){vfunc_called(this, "_ZN7S4277C12v2Ev");}
void  S4277C1 ::v3(){vfunc_called(this, "_ZN7S4277C12v3Ev");}
void  S4277C1 ::v4(){vfunc_called(this, "_ZN7S4277C12v4Ev");}
void  S4277C1 ::v5(){vfunc_called(this, "_ZN7S4277C12v5Ev");}
void  S4277C1 ::v6(){vfunc_called(this, "_ZN7S4277C12v6Ev");}
void  S4277C1 ::v7(){vfunc_called(this, "_ZN7S4277C12v7Ev");}
void  S4277C1 ::v8(){vfunc_called(this, "_ZN7S4277C12v8Ev");}
void  S4277C1 ::v9(){vfunc_called(this, "_ZN7S4277C12v9Ev");}
void  S4277C1 ::v10(){vfunc_called(this, "_ZN7S4277C13v10Ev");}
void  S4277C1 ::v11(){vfunc_called(this, "_ZN7S4277C13v11Ev");}
void  S4277C1 ::v12(){vfunc_called(this, "_ZN7S4277C13v12Ev");}
void  S4277C1 ::v13(){vfunc_called(this, "_ZN7S4277C13v13Ev");}
void  S4277C1 ::v14(){vfunc_called(this, "_ZN7S4277C13v14Ev");}
S4277C1 ::S4277C1(){ note_ctor("S4277C1", this);} // tgen

static void Test_S4277C1()
{
  extern Class_Descriptor cd_S4277C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(134,264)];
    init_test(&cd_S4277C1, buf);
    S4277C1 *dp, &lv = *(dp=new (buf) S4277C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1064,1052), "sizeof(S4277C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4277C1)");
    check_base_class_offset(lv, (S4277C3*)(S4277C2*), 0, "S4277C1");
    check_base_class_offset(lv, (S4277C2*), 0, "S4277C1");
    check_field_offset(lv, s4277c1f0, ABISELECT(1040,1036), "S4277C1.s4277c1f0");
    check_field_offset(lv, s4277c1f1, ABISELECT(1048,1040), "S4277C1.s4277c1f1");
    check_field_offset(lv, s4277c1f2, ABISELECT(1056,1048), "S4277C1.s4277c1f2");
    test_class_info(&lv, &cd_S4277C1);
    dp->~S4277C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4277C1(Test_S4277C1, "S4277C1", ABISELECT(1064,1052));

#else // __cplusplus

extern void _ZN7S4277C1C1Ev();
extern void _ZN7S4277C1D1Ev();
Name_Map name_map_S4277C1[] = {
  NSPAIR(_ZN7S4277C1C1Ev),
  NSPAIR(_ZN7S4277C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4277C3;
extern VTBL_ENTRY _ZTI7S4277C3[];
extern  VTBL_ENTRY _ZTV7S4277C3[];
extern Class_Descriptor cd_S4277C2;
extern VTBL_ENTRY _ZTI7S4277C2[];
extern  VTBL_ENTRY _ZTV7S4277C2[];
static Base_Class bases_S4277C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4277C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S4277C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4277C1[];
extern void _ZN7S4277C1D1Ev();
extern void _ZN7S4277C1D0Ev();
extern void _ZN7S4277C33v15Ev();
extern void _ZN7S4277C33v16Ev();
extern void _ZN7S4277C33v17Ev();
extern void _ZN7S4277C33v18Ev();
extern void _ZN7S4277C33v19Ev();
extern void _ZN7S4277C33v20Ev();
extern void _ZN7S4277C33v21Ev();
extern void _ZN7S4277C33v22Ev();
extern void _ZN7S4277C33v23Ev();
extern void _ZN7S4277C33v24Ev();
extern void _ZN7S4277C33v25Ev();
extern void _ZN7S4277C33v26Ev();
extern void _ZN7S4277C33v27Ev();
extern void _ZN7S4277C23v28Ev();
extern void _ZN7S4277C23v29Ev();
extern void _ZN7S4277C23v30Ev();
extern void _ZN7S4277C23v31Ev();
extern void _ZN7S4277C12v1Ev();
extern void _ZN7S4277C12v2Ev();
extern void _ZN7S4277C12v3Ev();
extern void _ZN7S4277C12v4Ev();
extern void _ZN7S4277C12v5Ev();
extern void _ZN7S4277C12v6Ev();
extern void _ZN7S4277C12v7Ev();
extern void _ZN7S4277C12v8Ev();
extern void _ZN7S4277C12v9Ev();
extern void _ZN7S4277C13v10Ev();
extern void _ZN7S4277C13v11Ev();
extern void _ZN7S4277C13v12Ev();
extern void _ZN7S4277C13v13Ev();
extern void _ZN7S4277C13v14Ev();
static  VTBL_ENTRY vtc_S4277C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4277C1[0]),
  (VTBL_ENTRY)&_ZN7S4277C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4277C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4277C33v15Ev,
  (VTBL_ENTRY)&_ZN7S4277C33v16Ev,
  (VTBL_ENTRY)&_ZN7S4277C33v17Ev,
  (VTBL_ENTRY)&_ZN7S4277C33v18Ev,
  (VTBL_ENTRY)&_ZN7S4277C33v19Ev,
  (VTBL_ENTRY)&_ZN7S4277C33v20Ev,
  (VTBL_ENTRY)&_ZN7S4277C33v21Ev,
  (VTBL_ENTRY)&_ZN7S4277C33v22Ev,
  (VTBL_ENTRY)&_ZN7S4277C33v23Ev,
  (VTBL_ENTRY)&_ZN7S4277C33v24Ev,
  (VTBL_ENTRY)&_ZN7S4277C33v25Ev,
  (VTBL_ENTRY)&_ZN7S4277C33v26Ev,
  (VTBL_ENTRY)&_ZN7S4277C33v27Ev,
  (VTBL_ENTRY)&_ZN7S4277C23v28Ev,
  (VTBL_ENTRY)&_ZN7S4277C23v29Ev,
  (VTBL_ENTRY)&_ZN7S4277C23v30Ev,
  (VTBL_ENTRY)&_ZN7S4277C23v31Ev,
  (VTBL_ENTRY)&_ZN7S4277C12v1Ev,
  (VTBL_ENTRY)&_ZN7S4277C12v2Ev,
  (VTBL_ENTRY)&_ZN7S4277C12v3Ev,
  (VTBL_ENTRY)&_ZN7S4277C12v4Ev,
  (VTBL_ENTRY)&_ZN7S4277C12v5Ev,
  (VTBL_ENTRY)&_ZN7S4277C12v6Ev,
  (VTBL_ENTRY)&_ZN7S4277C12v7Ev,
  (VTBL_ENTRY)&_ZN7S4277C12v8Ev,
  (VTBL_ENTRY)&_ZN7S4277C12v9Ev,
  (VTBL_ENTRY)&_ZN7S4277C13v10Ev,
  (VTBL_ENTRY)&_ZN7S4277C13v11Ev,
  (VTBL_ENTRY)&_ZN7S4277C13v12Ev,
  (VTBL_ENTRY)&_ZN7S4277C13v13Ev,
  (VTBL_ENTRY)&_ZN7S4277C13v14Ev,
};
extern VTBL_ENTRY _ZTI7S4277C1[];
extern  VTBL_ENTRY _ZTV7S4277C1[];
Class_Descriptor cd_S4277C1 = {  "S4277C1", // class name
  bases_S4277C1, 2,
  &(vtc_S4277C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(1064,1052), // object size
  NSPAIRA(_ZTI7S4277C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4277C1),35, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4258C3  {
  char s4258c3f0[1024];
  int s4258c3f1[2];
  virtual  ~S4258C3(); // _ZN7S4258C3D1Ev
  virtual void  v14(); // _ZN7S4258C33v14Ev
  virtual void  v15(); // _ZN7S4258C33v15Ev
  virtual void  v16(); // _ZN7S4258C33v16Ev
  virtual void  v17(); // _ZN7S4258C33v17Ev
  virtual void  v18(); // _ZN7S4258C33v18Ev
  virtual void  v19(); // _ZN7S4258C33v19Ev
  virtual void  v20(); // _ZN7S4258C33v20Ev
  virtual void  v21(); // _ZN7S4258C33v21Ev
  virtual void  v22(); // _ZN7S4258C33v22Ev
  virtual void  v23(); // _ZN7S4258C33v23Ev
  virtual void  v24(); // _ZN7S4258C33v24Ev
  virtual void  v25(); // _ZN7S4258C33v25Ev
  virtual void  v26(); // _ZN7S4258C33v26Ev
  S4258C3(); // tgen
};
//SIG(-1 S4258C3) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 Fc[1024] Fi[2]}


 S4258C3 ::~S4258C3(){ note_dtor("S4258C3", this);}
void  S4258C3 ::v14(){vfunc_called(this, "_ZN7S4258C33v14Ev");}
void  S4258C3 ::v15(){vfunc_called(this, "_ZN7S4258C33v15Ev");}
void  S4258C3 ::v16(){vfunc_called(this, "_ZN7S4258C33v16Ev");}
void  S4258C3 ::v17(){vfunc_called(this, "_ZN7S4258C33v17Ev");}
void  S4258C3 ::v18(){vfunc_called(this, "_ZN7S4258C33v18Ev");}
void  S4258C3 ::v19(){vfunc_called(this, "_ZN7S4258C33v19Ev");}
void  S4258C3 ::v20(){vfunc_called(this, "_ZN7S4258C33v20Ev");}
void  S4258C3 ::v21(){vfunc_called(this, "_ZN7S4258C33v21Ev");}
void  S4258C3 ::v22(){vfunc_called(this, "_ZN7S4258C33v22Ev");}
void  S4258C3 ::v23(){vfunc_called(this, "_ZN7S4258C33v23Ev");}
void  S4258C3 ::v24(){vfunc_called(this, "_ZN7S4258C33v24Ev");}
void  S4258C3 ::v25(){vfunc_called(this, "_ZN7S4258C33v25Ev");}
void  S4258C3 ::v26(){vfunc_called(this, "_ZN7S4258C33v26Ev");}
S4258C3 ::S4258C3(){ note_ctor("S4258C3", this);} // tgen

static void Test_S4258C3()
{
  extern Class_Descriptor cd_S4258C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(131,260)];
    init_test(&cd_S4258C3, buf);
    S4258C3 *dp, &lv = *(dp=new (buf) S4258C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1040,1036), "sizeof(S4258C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4258C3)");
    check_field_offset(lv, s4258c3f0, ABISELECT(8,4), "S4258C3.s4258c3f0");
    check_field_offset(lv, s4258c3f1, ABISELECT(1032,1028), "S4258C3.s4258c3f1");
    test_class_info(&lv, &cd_S4258C3);
    dp->~S4258C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4258C3(Test_S4258C3, "S4258C3", ABISELECT(1040,1036));

#else // __cplusplus

extern void _ZN7S4258C3C1Ev();
extern void _ZN7S4258C3D1Ev();
Name_Map name_map_S4258C3[] = {
  NSPAIR(_ZN7S4258C3C1Ev),
  NSPAIR(_ZN7S4258C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4258C3[];
extern void _ZN7S4258C3D1Ev();
extern void _ZN7S4258C3D0Ev();
extern void _ZN7S4258C33v14Ev();
extern void _ZN7S4258C33v15Ev();
extern void _ZN7S4258C33v16Ev();
extern void _ZN7S4258C33v17Ev();
extern void _ZN7S4258C33v18Ev();
extern void _ZN7S4258C33v19Ev();
extern void _ZN7S4258C33v20Ev();
extern void _ZN7S4258C33v21Ev();
extern void _ZN7S4258C33v22Ev();
extern void _ZN7S4258C33v23Ev();
extern void _ZN7S4258C33v24Ev();
extern void _ZN7S4258C33v25Ev();
extern void _ZN7S4258C33v26Ev();
static  VTBL_ENTRY vtc_S4258C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4258C3[0]),
  (VTBL_ENTRY)&_ZN7S4258C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4258C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4258C33v14Ev,
  (VTBL_ENTRY)&_ZN7S4258C33v15Ev,
  (VTBL_ENTRY)&_ZN7S4258C33v16Ev,
  (VTBL_ENTRY)&_ZN7S4258C33v17Ev,
  (VTBL_ENTRY)&_ZN7S4258C33v18Ev,
  (VTBL_ENTRY)&_ZN7S4258C33v19Ev,
  (VTBL_ENTRY)&_ZN7S4258C33v20Ev,
  (VTBL_ENTRY)&_ZN7S4258C33v21Ev,
  (VTBL_ENTRY)&_ZN7S4258C33v22Ev,
  (VTBL_ENTRY)&_ZN7S4258C33v23Ev,
  (VTBL_ENTRY)&_ZN7S4258C33v24Ev,
  (VTBL_ENTRY)&_ZN7S4258C33v25Ev,
  (VTBL_ENTRY)&_ZN7S4258C33v26Ev,
};
extern VTBL_ENTRY _ZTI7S4258C3[];
extern  VTBL_ENTRY _ZTV7S4258C3[];
Class_Descriptor cd_S4258C3 = {  "S4258C3", // class name
  0,0,//no base classes
  &(vtc_S4258C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(1040,1036), // object size
  NSPAIRA(_ZTI7S4258C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4258C3),17, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4258C2  : S4258C3 {
  virtual  ~S4258C2(); // _ZN7S4258C2D1Ev
  virtual void  v27(); // _ZN7S4258C23v27Ev
  virtual void  v28(); // _ZN7S4258C23v28Ev
  virtual void  v29(); // _ZN7S4258C23v29Ev
  virtual void  v30(); // _ZN7S4258C23v30Ev
  S4258C2(); // tgen
};
//SIG(-1 S4258C2) C1{ BC2{ vd v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 Fc[1024] Fi[2]} vd v1 v2 v3 v4}


 S4258C2 ::~S4258C2(){ note_dtor("S4258C2", this);}
void  S4258C2 ::v27(){vfunc_called(this, "_ZN7S4258C23v27Ev");}
void  S4258C2 ::v28(){vfunc_called(this, "_ZN7S4258C23v28Ev");}
void  S4258C2 ::v29(){vfunc_called(this, "_ZN7S4258C23v29Ev");}
void  S4258C2 ::v30(){vfunc_called(this, "_ZN7S4258C23v30Ev");}
S4258C2 ::S4258C2(){ note_ctor("S4258C2", this);} // tgen

static void Test_S4258C2()
{
  extern Class_Descriptor cd_S4258C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(131,260)];
    init_test(&cd_S4258C2, buf);
    S4258C2 *dp, &lv = *(dp=new (buf) S4258C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1040,1036), "sizeof(S4258C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4258C2)");
    check_base_class_offset(lv, (S4258C3*), 0, "S4258C2");
    test_class_info(&lv, &cd_S4258C2);
    dp->~S4258C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4258C2(Test_S4258C2, "S4258C2", ABISELECT(1040,1036));

#else // __cplusplus

extern void _ZN7S4258C2C1Ev();
extern void _ZN7S4258C2D1Ev();
Name_Map name_map_S4258C2[] = {
  NSPAIR(_ZN7S4258C2C1Ev),
  NSPAIR(_ZN7S4258C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4258C3;
extern VTBL_ENTRY _ZTI7S4258C3[];
extern  VTBL_ENTRY _ZTV7S4258C3[];
static Base_Class bases_S4258C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4258C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4258C2[];
extern void _ZN7S4258C2D1Ev();
extern void _ZN7S4258C2D0Ev();
extern void _ZN7S4258C33v14Ev();
extern void _ZN7S4258C33v15Ev();
extern void _ZN7S4258C33v16Ev();
extern void _ZN7S4258C33v17Ev();
extern void _ZN7S4258C33v18Ev();
extern void _ZN7S4258C33v19Ev();
extern void _ZN7S4258C33v20Ev();
extern void _ZN7S4258C33v21Ev();
extern void _ZN7S4258C33v22Ev();
extern void _ZN7S4258C33v23Ev();
extern void _ZN7S4258C33v24Ev();
extern void _ZN7S4258C33v25Ev();
extern void _ZN7S4258C33v26Ev();
extern void _ZN7S4258C23v27Ev();
extern void _ZN7S4258C23v28Ev();
extern void _ZN7S4258C23v29Ev();
extern void _ZN7S4258C23v30Ev();
static  VTBL_ENTRY vtc_S4258C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4258C2[0]),
  (VTBL_ENTRY)&_ZN7S4258C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4258C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4258C33v14Ev,
  (VTBL_ENTRY)&_ZN7S4258C33v15Ev,
  (VTBL_ENTRY)&_ZN7S4258C33v16Ev,
  (VTBL_ENTRY)&_ZN7S4258C33v17Ev,
  (VTBL_ENTRY)&_ZN7S4258C33v18Ev,
  (VTBL_ENTRY)&_ZN7S4258C33v19Ev,
  (VTBL_ENTRY)&_ZN7S4258C33v20Ev,
  (VTBL_ENTRY)&_ZN7S4258C33v21Ev,
  (VTBL_ENTRY)&_ZN7S4258C33v22Ev,
  (VTBL_ENTRY)&_ZN7S4258C33v23Ev,
  (VTBL_ENTRY)&_ZN7S4258C33v24Ev,
  (VTBL_ENTRY)&_ZN7S4258C33v25Ev,
  (VTBL_ENTRY)&_ZN7S4258C33v26Ev,
  (VTBL_ENTRY)&_ZN7S4258C23v27Ev,
  (VTBL_ENTRY)&_ZN7S4258C23v28Ev,
  (VTBL_ENTRY)&_ZN7S4258C23v29Ev,
  (VTBL_ENTRY)&_ZN7S4258C23v30Ev,
};
extern VTBL_ENTRY _ZTI7S4258C2[];
extern  VTBL_ENTRY _ZTV7S4258C2[];
Class_Descriptor cd_S4258C2 = {  "S4258C2", // class name
  bases_S4258C2, 1,
  &(vtc_S4258C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(1040,1036), // object size
  NSPAIRA(_ZTI7S4258C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4258C2),21, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4258C1  : S4258C2 {
  int s4258c1f0;
  __tsi64 s4258c1f1[2];
  int s4258c1f2;
  virtual  ~S4258C1(); // _ZN7S4258C1D1Ev
  virtual void  v1(); // _ZN7S4258C12v1Ev
  virtual void  v2(); // _ZN7S4258C12v2Ev
  virtual void  v3(); // _ZN7S4258C12v3Ev
  virtual void  v4(); // _ZN7S4258C12v4Ev
  virtual void  v5(); // _ZN7S4258C12v5Ev
  virtual void  v6(); // _ZN7S4258C12v6Ev
  virtual void  v7(); // _ZN7S4258C12v7Ev
  virtual void  v8(); // _ZN7S4258C12v8Ev
  virtual void  v9(); // _ZN7S4258C12v9Ev
  virtual void  v10(); // _ZN7S4258C13v10Ev
  virtual void  v11(); // _ZN7S4258C13v11Ev
  virtual void  v12(); // _ZN7S4258C13v12Ev
  virtual void  v13(); // _ZN7S4258C13v13Ev
  S4258C1(); // tgen
};
//SIG(1 S4258C1) C1{ BC2{ BC3{ vd v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 Fc[1024] Fi[2]} vd v27 v28 v29 v30} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 Fi FL[2] Fi}


 S4258C1 ::~S4258C1(){ note_dtor("S4258C1", this);}
void  S4258C1 ::v1(){vfunc_called(this, "_ZN7S4258C12v1Ev");}
void  S4258C1 ::v2(){vfunc_called(this, "_ZN7S4258C12v2Ev");}
void  S4258C1 ::v3(){vfunc_called(this, "_ZN7S4258C12v3Ev");}
void  S4258C1 ::v4(){vfunc_called(this, "_ZN7S4258C12v4Ev");}
void  S4258C1 ::v5(){vfunc_called(this, "_ZN7S4258C12v5Ev");}
void  S4258C1 ::v6(){vfunc_called(this, "_ZN7S4258C12v6Ev");}
void  S4258C1 ::v7(){vfunc_called(this, "_ZN7S4258C12v7Ev");}
void  S4258C1 ::v8(){vfunc_called(this, "_ZN7S4258C12v8Ev");}
void  S4258C1 ::v9(){vfunc_called(this, "_ZN7S4258C12v9Ev");}
void  S4258C1 ::v10(){vfunc_called(this, "_ZN7S4258C13v10Ev");}
void  S4258C1 ::v11(){vfunc_called(this, "_ZN7S4258C13v11Ev");}
void  S4258C1 ::v12(){vfunc_called(this, "_ZN7S4258C13v12Ev");}
void  S4258C1 ::v13(){vfunc_called(this, "_ZN7S4258C13v13Ev");}
S4258C1 ::S4258C1(){ note_ctor("S4258C1", this);} // tgen

static void Test_S4258C1()
{
  extern Class_Descriptor cd_S4258C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(135,266)];
    init_test(&cd_S4258C1, buf);
    S4258C1 *dp, &lv = *(dp=new (buf) S4258C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1072,1060), "sizeof(S4258C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4258C1)");
    check_base_class_offset(lv, (S4258C3*)(S4258C2*), 0, "S4258C1");
    check_base_class_offset(lv, (S4258C2*), 0, "S4258C1");
    check_field_offset(lv, s4258c1f0, ABISELECT(1040,1036), "S4258C1.s4258c1f0");
    check_field_offset(lv, s4258c1f1, ABISELECT(1048,1040), "S4258C1.s4258c1f1");
    check_field_offset(lv, s4258c1f2, ABISELECT(1064,1056), "S4258C1.s4258c1f2");
    test_class_info(&lv, &cd_S4258C1);
    dp->~S4258C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4258C1(Test_S4258C1, "S4258C1", ABISELECT(1072,1060));

#else // __cplusplus

extern void _ZN7S4258C1C1Ev();
extern void _ZN7S4258C1D1Ev();
Name_Map name_map_S4258C1[] = {
  NSPAIR(_ZN7S4258C1C1Ev),
  NSPAIR(_ZN7S4258C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4258C3;
extern VTBL_ENTRY _ZTI7S4258C3[];
extern  VTBL_ENTRY _ZTV7S4258C3[];
extern Class_Descriptor cd_S4258C2;
extern VTBL_ENTRY _ZTI7S4258C2[];
extern  VTBL_ENTRY _ZTV7S4258C2[];
static Base_Class bases_S4258C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4258C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S4258C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4258C1[];
extern void _ZN7S4258C1D1Ev();
extern void _ZN7S4258C1D0Ev();
extern void _ZN7S4258C33v14Ev();
extern void _ZN7S4258C33v15Ev();
extern void _ZN7S4258C33v16Ev();
extern void _ZN7S4258C33v17Ev();
extern void _ZN7S4258C33v18Ev();
extern void _ZN7S4258C33v19Ev();
extern void _ZN7S4258C33v20Ev();
extern void _ZN7S4258C33v21Ev();
extern void _ZN7S4258C33v22Ev();
extern void _ZN7S4258C33v23Ev();
extern void _ZN7S4258C33v24Ev();
extern void _ZN7S4258C33v25Ev();
extern void _ZN7S4258C33v26Ev();
extern void _ZN7S4258C23v27Ev();
extern void _ZN7S4258C23v28Ev();
extern void _ZN7S4258C23v29Ev();
extern void _ZN7S4258C23v30Ev();
extern void _ZN7S4258C12v1Ev();
extern void _ZN7S4258C12v2Ev();
extern void _ZN7S4258C12v3Ev();
extern void _ZN7S4258C12v4Ev();
extern void _ZN7S4258C12v5Ev();
extern void _ZN7S4258C12v6Ev();
extern void _ZN7S4258C12v7Ev();
extern void _ZN7S4258C12v8Ev();
extern void _ZN7S4258C12v9Ev();
extern void _ZN7S4258C13v10Ev();
extern void _ZN7S4258C13v11Ev();
extern void _ZN7S4258C13v12Ev();
extern void _ZN7S4258C13v13Ev();
static  VTBL_ENTRY vtc_S4258C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4258C1[0]),
  (VTBL_ENTRY)&_ZN7S4258C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4258C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4258C33v14Ev,
  (VTBL_ENTRY)&_ZN7S4258C33v15Ev,
  (VTBL_ENTRY)&_ZN7S4258C33v16Ev,
  (VTBL_ENTRY)&_ZN7S4258C33v17Ev,
  (VTBL_ENTRY)&_ZN7S4258C33v18Ev,
  (VTBL_ENTRY)&_ZN7S4258C33v19Ev,
  (VTBL_ENTRY)&_ZN7S4258C33v20Ev,
  (VTBL_ENTRY)&_ZN7S4258C33v21Ev,
  (VTBL_ENTRY)&_ZN7S4258C33v22Ev,
  (VTBL_ENTRY)&_ZN7S4258C33v23Ev,
  (VTBL_ENTRY)&_ZN7S4258C33v24Ev,
  (VTBL_ENTRY)&_ZN7S4258C33v25Ev,
  (VTBL_ENTRY)&_ZN7S4258C33v26Ev,
  (VTBL_ENTRY)&_ZN7S4258C23v27Ev,
  (VTBL_ENTRY)&_ZN7S4258C23v28Ev,
  (VTBL_ENTRY)&_ZN7S4258C23v29Ev,
  (VTBL_ENTRY)&_ZN7S4258C23v30Ev,
  (VTBL_ENTRY)&_ZN7S4258C12v1Ev,
  (VTBL_ENTRY)&_ZN7S4258C12v2Ev,
  (VTBL_ENTRY)&_ZN7S4258C12v3Ev,
  (VTBL_ENTRY)&_ZN7S4258C12v4Ev,
  (VTBL_ENTRY)&_ZN7S4258C12v5Ev,
  (VTBL_ENTRY)&_ZN7S4258C12v6Ev,
  (VTBL_ENTRY)&_ZN7S4258C12v7Ev,
  (VTBL_ENTRY)&_ZN7S4258C12v8Ev,
  (VTBL_ENTRY)&_ZN7S4258C12v9Ev,
  (VTBL_ENTRY)&_ZN7S4258C13v10Ev,
  (VTBL_ENTRY)&_ZN7S4258C13v11Ev,
  (VTBL_ENTRY)&_ZN7S4258C13v12Ev,
  (VTBL_ENTRY)&_ZN7S4258C13v13Ev,
};
extern VTBL_ENTRY _ZTI7S4258C1[];
extern  VTBL_ENTRY _ZTV7S4258C1[];
Class_Descriptor cd_S4258C1 = {  "S4258C1", // class name
  bases_S4258C1, 2,
  &(vtc_S4258C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(1072,1060), // object size
  NSPAIRA(_ZTI7S4258C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4258C1),34, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S5171C3  {
  virtual  ~S5171C3(); // _ZN7S5171C3D1Ev
  virtual void  v4(); // _ZN7S5171C32v4Ev
  virtual void  v5(); // _ZN7S5171C32v5Ev
  virtual void  v6(); // _ZN7S5171C32v6Ev
  virtual void  v7(); // _ZN7S5171C32v7Ev
  virtual void  v8(); // _ZN7S5171C32v8Ev
  virtual void  v9(); // _ZN7S5171C32v9Ev
  virtual void  v10(); // _ZN7S5171C33v10Ev
  virtual void  v11(); // _ZN7S5171C33v11Ev
  virtual void  v12(); // _ZN7S5171C33v12Ev
  virtual void  v13(); // _ZN7S5171C33v13Ev
  virtual void  v14(); // _ZN7S5171C33v14Ev
  virtual void  v15(); // _ZN7S5171C33v15Ev
  virtual void  v16(); // _ZN7S5171C33v16Ev
  S5171C3(); // tgen
};
//SIG(-1 S5171C3) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13}


 S5171C3 ::~S5171C3(){ note_dtor("S5171C3", this);}
void  S5171C3 ::v4(){vfunc_called(this, "_ZN7S5171C32v4Ev");}
void  S5171C3 ::v5(){vfunc_called(this, "_ZN7S5171C32v5Ev");}
void  S5171C3 ::v6(){vfunc_called(this, "_ZN7S5171C32v6Ev");}
void  S5171C3 ::v7(){vfunc_called(this, "_ZN7S5171C32v7Ev");}
void  S5171C3 ::v8(){vfunc_called(this, "_ZN7S5171C32v8Ev");}
void  S5171C3 ::v9(){vfunc_called(this, "_ZN7S5171C32v9Ev");}
void  S5171C3 ::v10(){vfunc_called(this, "_ZN7S5171C33v10Ev");}
void  S5171C3 ::v11(){vfunc_called(this, "_ZN7S5171C33v11Ev");}
void  S5171C3 ::v12(){vfunc_called(this, "_ZN7S5171C33v12Ev");}
void  S5171C3 ::v13(){vfunc_called(this, "_ZN7S5171C33v13Ev");}
void  S5171C3 ::v14(){vfunc_called(this, "_ZN7S5171C33v14Ev");}
void  S5171C3 ::v15(){vfunc_called(this, "_ZN7S5171C33v15Ev");}
void  S5171C3 ::v16(){vfunc_called(this, "_ZN7S5171C33v16Ev");}
S5171C3 ::S5171C3(){ note_ctor("S5171C3", this);} // tgen

static void Test_S5171C3()
{
  extern Class_Descriptor cd_S5171C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S5171C3, buf);
    S5171C3 *dp, &lv = *(dp=new (buf) S5171C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S5171C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5171C3)");
    test_class_info(&lv, &cd_S5171C3);
    dp->~S5171C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5171C3(Test_S5171C3, "S5171C3", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S5171C3C1Ev();
extern void _ZN7S5171C3D1Ev();
Name_Map name_map_S5171C3[] = {
  NSPAIR(_ZN7S5171C3C1Ev),
  NSPAIR(_ZN7S5171C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S5171C3[];
extern void _ZN7S5171C3D1Ev();
extern void _ZN7S5171C3D0Ev();
extern void _ZN7S5171C32v4Ev();
extern void _ZN7S5171C32v5Ev();
extern void _ZN7S5171C32v6Ev();
extern void _ZN7S5171C32v7Ev();
extern void _ZN7S5171C32v8Ev();
extern void _ZN7S5171C32v9Ev();
extern void _ZN7S5171C33v10Ev();
extern void _ZN7S5171C33v11Ev();
extern void _ZN7S5171C33v12Ev();
extern void _ZN7S5171C33v13Ev();
extern void _ZN7S5171C33v14Ev();
extern void _ZN7S5171C33v15Ev();
extern void _ZN7S5171C33v16Ev();
static  VTBL_ENTRY vtc_S5171C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5171C3[0]),
  (VTBL_ENTRY)&_ZN7S5171C3D1Ev,
  (VTBL_ENTRY)&_ZN7S5171C3D0Ev,
  (VTBL_ENTRY)&_ZN7S5171C32v4Ev,
  (VTBL_ENTRY)&_ZN7S5171C32v5Ev,
  (VTBL_ENTRY)&_ZN7S5171C32v6Ev,
  (VTBL_ENTRY)&_ZN7S5171C32v7Ev,
  (VTBL_ENTRY)&_ZN7S5171C32v8Ev,
  (VTBL_ENTRY)&_ZN7S5171C32v9Ev,
  (VTBL_ENTRY)&_ZN7S5171C33v10Ev,
  (VTBL_ENTRY)&_ZN7S5171C33v11Ev,
  (VTBL_ENTRY)&_ZN7S5171C33v12Ev,
  (VTBL_ENTRY)&_ZN7S5171C33v13Ev,
  (VTBL_ENTRY)&_ZN7S5171C33v14Ev,
  (VTBL_ENTRY)&_ZN7S5171C33v15Ev,
  (VTBL_ENTRY)&_ZN7S5171C33v16Ev,
};
extern VTBL_ENTRY _ZTI7S5171C3[];
extern  VTBL_ENTRY _ZTV7S5171C3[];
Class_Descriptor cd_S5171C3 = {  "S5171C3", // class name
  0,0,//no base classes
  &(vtc_S5171C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S5171C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S5171C3),17, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S5171C2  : S5171C3 {
  void *s5171c2f0[8];
  char s5171c2f1[3];
  int s5171c2f2[3];
  virtual  ~S5171C2(); // _ZN7S5171C2D1Ev
  virtual void  v17(); // _ZN7S5171C23v17Ev
  virtual void  v18(); // _ZN7S5171C23v18Ev
  virtual void  v19(); // _ZN7S5171C23v19Ev
  virtual void  v20(); // _ZN7S5171C23v20Ev
  virtual void  v21(); // _ZN7S5171C23v21Ev
  virtual void  v22(); // _ZN7S5171C23v22Ev
  virtual void  v23(); // _ZN7S5171C23v23Ev
  virtual void  v24(); // _ZN7S5171C23v24Ev
  virtual void  v25(); // _ZN7S5171C23v25Ev
  virtual void  v26(); // _ZN7S5171C23v26Ev
  virtual void  v27(); // _ZN7S5171C23v27Ev
  virtual void  v28(); // _ZN7S5171C23v28Ev
  virtual void  v29(); // _ZN7S5171C23v29Ev
  S5171C2(); // tgen
};
//SIG(-1 S5171C2) C1{ BC2{ vd v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 Fp[8] Fc[3] Fi[3]}


 S5171C2 ::~S5171C2(){ note_dtor("S5171C2", this);}
void  S5171C2 ::v17(){vfunc_called(this, "_ZN7S5171C23v17Ev");}
void  S5171C2 ::v18(){vfunc_called(this, "_ZN7S5171C23v18Ev");}
void  S5171C2 ::v19(){vfunc_called(this, "_ZN7S5171C23v19Ev");}
void  S5171C2 ::v20(){vfunc_called(this, "_ZN7S5171C23v20Ev");}
void  S5171C2 ::v21(){vfunc_called(this, "_ZN7S5171C23v21Ev");}
void  S5171C2 ::v22(){vfunc_called(this, "_ZN7S5171C23v22Ev");}
void  S5171C2 ::v23(){vfunc_called(this, "_ZN7S5171C23v23Ev");}
void  S5171C2 ::v24(){vfunc_called(this, "_ZN7S5171C23v24Ev");}
void  S5171C2 ::v25(){vfunc_called(this, "_ZN7S5171C23v25Ev");}
void  S5171C2 ::v26(){vfunc_called(this, "_ZN7S5171C23v26Ev");}
void  S5171C2 ::v27(){vfunc_called(this, "_ZN7S5171C23v27Ev");}
void  S5171C2 ::v28(){vfunc_called(this, "_ZN7S5171C23v28Ev");}
void  S5171C2 ::v29(){vfunc_called(this, "_ZN7S5171C23v29Ev");}
S5171C2 ::S5171C2(){ note_ctor("S5171C2", this);} // tgen

static void Test_S5171C2()
{
  extern Class_Descriptor cd_S5171C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(12,14)];
    init_test(&cd_S5171C2, buf);
    S5171C2 *dp, &lv = *(dp=new (buf) S5171C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(88,52), "sizeof(S5171C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5171C2)");
    check_base_class_offset(lv, (S5171C3*), 0, "S5171C2");
    check_field_offset(lv, s5171c2f0, ABISELECT(8,4), "S5171C2.s5171c2f0");
    check_field_offset(lv, s5171c2f1, ABISELECT(72,36), "S5171C2.s5171c2f1");
    check_field_offset(lv, s5171c2f2, ABISELECT(76,40), "S5171C2.s5171c2f2");
    test_class_info(&lv, &cd_S5171C2);
    dp->~S5171C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5171C2(Test_S5171C2, "S5171C2", ABISELECT(88,52));

#else // __cplusplus

extern void _ZN7S5171C2C1Ev();
extern void _ZN7S5171C2D1Ev();
Name_Map name_map_S5171C2[] = {
  NSPAIR(_ZN7S5171C2C1Ev),
  NSPAIR(_ZN7S5171C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5171C3;
extern VTBL_ENTRY _ZTI7S5171C3[];
extern  VTBL_ENTRY _ZTV7S5171C3[];
static Base_Class bases_S5171C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5171C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S5171C2[];
extern void _ZN7S5171C2D1Ev();
extern void _ZN7S5171C2D0Ev();
extern void _ZN7S5171C32v4Ev();
extern void _ZN7S5171C32v5Ev();
extern void _ZN7S5171C32v6Ev();
extern void _ZN7S5171C32v7Ev();
extern void _ZN7S5171C32v8Ev();
extern void _ZN7S5171C32v9Ev();
extern void _ZN7S5171C33v10Ev();
extern void _ZN7S5171C33v11Ev();
extern void _ZN7S5171C33v12Ev();
extern void _ZN7S5171C33v13Ev();
extern void _ZN7S5171C33v14Ev();
extern void _ZN7S5171C33v15Ev();
extern void _ZN7S5171C33v16Ev();
extern void _ZN7S5171C23v17Ev();
extern void _ZN7S5171C23v18Ev();
extern void _ZN7S5171C23v19Ev();
extern void _ZN7S5171C23v20Ev();
extern void _ZN7S5171C23v21Ev();
extern void _ZN7S5171C23v22Ev();
extern void _ZN7S5171C23v23Ev();
extern void _ZN7S5171C23v24Ev();
extern void _ZN7S5171C23v25Ev();
extern void _ZN7S5171C23v26Ev();
extern void _ZN7S5171C23v27Ev();
extern void _ZN7S5171C23v28Ev();
extern void _ZN7S5171C23v29Ev();
static  VTBL_ENTRY vtc_S5171C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5171C2[0]),
  (VTBL_ENTRY)&_ZN7S5171C2D1Ev,
  (VTBL_ENTRY)&_ZN7S5171C2D0Ev,
  (VTBL_ENTRY)&_ZN7S5171C32v4Ev,
  (VTBL_ENTRY)&_ZN7S5171C32v5Ev,
  (VTBL_ENTRY)&_ZN7S5171C32v6Ev,
  (VTBL_ENTRY)&_ZN7S5171C32v7Ev,
  (VTBL_ENTRY)&_ZN7S5171C32v8Ev,
  (VTBL_ENTRY)&_ZN7S5171C32v9Ev,
  (VTBL_ENTRY)&_ZN7S5171C33v10Ev,
  (VTBL_ENTRY)&_ZN7S5171C33v11Ev,
  (VTBL_ENTRY)&_ZN7S5171C33v12Ev,
  (VTBL_ENTRY)&_ZN7S5171C33v13Ev,
  (VTBL_ENTRY)&_ZN7S5171C33v14Ev,
  (VTBL_ENTRY)&_ZN7S5171C33v15Ev,
  (VTBL_ENTRY)&_ZN7S5171C33v16Ev,
  (VTBL_ENTRY)&_ZN7S5171C23v17Ev,
  (VTBL_ENTRY)&_ZN7S5171C23v18Ev,
  (VTBL_ENTRY)&_ZN7S5171C23v19Ev,
  (VTBL_ENTRY)&_ZN7S5171C23v20Ev,
  (VTBL_ENTRY)&_ZN7S5171C23v21Ev,
  (VTBL_ENTRY)&_ZN7S5171C23v22Ev,
  (VTBL_ENTRY)&_ZN7S5171C23v23Ev,
  (VTBL_ENTRY)&_ZN7S5171C23v24Ev,
  (VTBL_ENTRY)&_ZN7S5171C23v25Ev,
  (VTBL_ENTRY)&_ZN7S5171C23v26Ev,
  (VTBL_ENTRY)&_ZN7S5171C23v27Ev,
  (VTBL_ENTRY)&_ZN7S5171C23v28Ev,
  (VTBL_ENTRY)&_ZN7S5171C23v29Ev,
};
extern VTBL_ENTRY _ZTI7S5171C2[];
extern  VTBL_ENTRY _ZTV7S5171C2[];
Class_Descriptor cd_S5171C2 = {  "S5171C2", // class name
  bases_S5171C2, 1,
  &(vtc_S5171C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(88,52), // object size
  NSPAIRA(_ZTI7S5171C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S5171C2),30, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S5171C1  : S5171C2 {
  int s5171c1f0[2];
  char s5171c1f1[12];
  virtual  ~S5171C1(); // _ZN7S5171C1D1Ev
  virtual void  v1(); // _ZN7S5171C12v1Ev
  virtual void  v2(); // _ZN7S5171C12v2Ev
  virtual void  v3(); // _ZN7S5171C12v3Ev
  S5171C1(); // tgen
};
//SIG(1 S5171C1) C1{ BC2{ BC3{ vd v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16} vd v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 Fp[8] Fc[3] Fi[3]} vd v1 v2 v3 Fi[2] Fc[12]}


 S5171C1 ::~S5171C1(){ note_dtor("S5171C1", this);}
void  S5171C1 ::v1(){vfunc_called(this, "_ZN7S5171C12v1Ev");}
void  S5171C1 ::v2(){vfunc_called(this, "_ZN7S5171C12v2Ev");}
void  S5171C1 ::v3(){vfunc_called(this, "_ZN7S5171C12v3Ev");}
S5171C1 ::S5171C1(){ note_ctor("S5171C1", this);} // tgen

static void Test_S5171C1()
{
  extern Class_Descriptor cd_S5171C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(15,19)];
    init_test(&cd_S5171C1, buf);
    S5171C1 *dp, &lv = *(dp=new (buf) S5171C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(112,72), "sizeof(S5171C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5171C1)");
    check_base_class_offset(lv, (S5171C3*)(S5171C2*), 0, "S5171C1");
    check_base_class_offset(lv, (S5171C2*), 0, "S5171C1");
    check_field_offset(lv, s5171c1f0, ABISELECT(88,52), "S5171C1.s5171c1f0");
    check_field_offset(lv, s5171c1f1, ABISELECT(96,60), "S5171C1.s5171c1f1");
    test_class_info(&lv, &cd_S5171C1);
    dp->~S5171C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5171C1(Test_S5171C1, "S5171C1", ABISELECT(112,72));

#else // __cplusplus

extern void _ZN7S5171C1C1Ev();
extern void _ZN7S5171C1D1Ev();
Name_Map name_map_S5171C1[] = {
  NSPAIR(_ZN7S5171C1C1Ev),
  NSPAIR(_ZN7S5171C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5171C3;
extern VTBL_ENTRY _ZTI7S5171C3[];
extern  VTBL_ENTRY _ZTV7S5171C3[];
extern Class_Descriptor cd_S5171C2;
extern VTBL_ENTRY _ZTI7S5171C2[];
extern  VTBL_ENTRY _ZTV7S5171C2[];
static Base_Class bases_S5171C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5171C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S5171C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S5171C1[];
extern void _ZN7S5171C1D1Ev();
extern void _ZN7S5171C1D0Ev();
extern void _ZN7S5171C32v4Ev();
extern void _ZN7S5171C32v5Ev();
extern void _ZN7S5171C32v6Ev();
extern void _ZN7S5171C32v7Ev();
extern void _ZN7S5171C32v8Ev();
extern void _ZN7S5171C32v9Ev();
extern void _ZN7S5171C33v10Ev();
extern void _ZN7S5171C33v11Ev();
extern void _ZN7S5171C33v12Ev();
extern void _ZN7S5171C33v13Ev();
extern void _ZN7S5171C33v14Ev();
extern void _ZN7S5171C33v15Ev();
extern void _ZN7S5171C33v16Ev();
extern void _ZN7S5171C23v17Ev();
extern void _ZN7S5171C23v18Ev();
extern void _ZN7S5171C23v19Ev();
extern void _ZN7S5171C23v20Ev();
extern void _ZN7S5171C23v21Ev();
extern void _ZN7S5171C23v22Ev();
extern void _ZN7S5171C23v23Ev();
extern void _ZN7S5171C23v24Ev();
extern void _ZN7S5171C23v25Ev();
extern void _ZN7S5171C23v26Ev();
extern void _ZN7S5171C23v27Ev();
extern void _ZN7S5171C23v28Ev();
extern void _ZN7S5171C23v29Ev();
extern void _ZN7S5171C12v1Ev();
extern void _ZN7S5171C12v2Ev();
extern void _ZN7S5171C12v3Ev();
static  VTBL_ENTRY vtc_S5171C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5171C1[0]),
  (VTBL_ENTRY)&_ZN7S5171C1D1Ev,
  (VTBL_ENTRY)&_ZN7S5171C1D0Ev,
  (VTBL_ENTRY)&_ZN7S5171C32v4Ev,
  (VTBL_ENTRY)&_ZN7S5171C32v5Ev,
  (VTBL_ENTRY)&_ZN7S5171C32v6Ev,
  (VTBL_ENTRY)&_ZN7S5171C32v7Ev,
  (VTBL_ENTRY)&_ZN7S5171C32v8Ev,
  (VTBL_ENTRY)&_ZN7S5171C32v9Ev,
  (VTBL_ENTRY)&_ZN7S5171C33v10Ev,
  (VTBL_ENTRY)&_ZN7S5171C33v11Ev,
  (VTBL_ENTRY)&_ZN7S5171C33v12Ev,
  (VTBL_ENTRY)&_ZN7S5171C33v13Ev,
  (VTBL_ENTRY)&_ZN7S5171C33v14Ev,
  (VTBL_ENTRY)&_ZN7S5171C33v15Ev,
  (VTBL_ENTRY)&_ZN7S5171C33v16Ev,
  (VTBL_ENTRY)&_ZN7S5171C23v17Ev,
  (VTBL_ENTRY)&_ZN7S5171C23v18Ev,
  (VTBL_ENTRY)&_ZN7S5171C23v19Ev,
  (VTBL_ENTRY)&_ZN7S5171C23v20Ev,
  (VTBL_ENTRY)&_ZN7S5171C23v21Ev,
  (VTBL_ENTRY)&_ZN7S5171C23v22Ev,
  (VTBL_ENTRY)&_ZN7S5171C23v23Ev,
  (VTBL_ENTRY)&_ZN7S5171C23v24Ev,
  (VTBL_ENTRY)&_ZN7S5171C23v25Ev,
  (VTBL_ENTRY)&_ZN7S5171C23v26Ev,
  (VTBL_ENTRY)&_ZN7S5171C23v27Ev,
  (VTBL_ENTRY)&_ZN7S5171C23v28Ev,
  (VTBL_ENTRY)&_ZN7S5171C23v29Ev,
  (VTBL_ENTRY)&_ZN7S5171C12v1Ev,
  (VTBL_ENTRY)&_ZN7S5171C12v2Ev,
  (VTBL_ENTRY)&_ZN7S5171C12v3Ev,
};
extern VTBL_ENTRY _ZTI7S5171C1[];
extern  VTBL_ENTRY _ZTV7S5171C1[];
Class_Descriptor cd_S5171C1 = {  "S5171C1", // class name
  bases_S5171C1, 2,
  &(vtc_S5171C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(112,72), // object size
  NSPAIRA(_ZTI7S5171C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S5171C1),33, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4240C3  {
  char s4240c3f0[1024];
  int s4240c3f1[2];
  virtual  ~S4240C3(); // _ZN7S4240C3D1Ev
  virtual void  v12(); // _ZN7S4240C33v12Ev
  virtual void  v13(); // _ZN7S4240C33v13Ev
  virtual void  v14(); // _ZN7S4240C33v14Ev
  virtual void  v15(); // _ZN7S4240C33v15Ev
  virtual void  v16(); // _ZN7S4240C33v16Ev
  virtual void  v17(); // _ZN7S4240C33v17Ev
  virtual void  v18(); // _ZN7S4240C33v18Ev
  virtual void  v19(); // _ZN7S4240C33v19Ev
  virtual void  v20(); // _ZN7S4240C33v20Ev
  virtual void  v21(); // _ZN7S4240C33v21Ev
  virtual void  v22(); // _ZN7S4240C33v22Ev
  virtual void  v23(); // _ZN7S4240C33v23Ev
  virtual void  v24(); // _ZN7S4240C33v24Ev
  S4240C3(); // tgen
};
//SIG(-1 S4240C3) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 Fc[1024] Fi[2]}


 S4240C3 ::~S4240C3(){ note_dtor("S4240C3", this);}
void  S4240C3 ::v12(){vfunc_called(this, "_ZN7S4240C33v12Ev");}
void  S4240C3 ::v13(){vfunc_called(this, "_ZN7S4240C33v13Ev");}
void  S4240C3 ::v14(){vfunc_called(this, "_ZN7S4240C33v14Ev");}
void  S4240C3 ::v15(){vfunc_called(this, "_ZN7S4240C33v15Ev");}
void  S4240C3 ::v16(){vfunc_called(this, "_ZN7S4240C33v16Ev");}
void  S4240C3 ::v17(){vfunc_called(this, "_ZN7S4240C33v17Ev");}
void  S4240C3 ::v18(){vfunc_called(this, "_ZN7S4240C33v18Ev");}
void  S4240C3 ::v19(){vfunc_called(this, "_ZN7S4240C33v19Ev");}
void  S4240C3 ::v20(){vfunc_called(this, "_ZN7S4240C33v20Ev");}
void  S4240C3 ::v21(){vfunc_called(this, "_ZN7S4240C33v21Ev");}
void  S4240C3 ::v22(){vfunc_called(this, "_ZN7S4240C33v22Ev");}
void  S4240C3 ::v23(){vfunc_called(this, "_ZN7S4240C33v23Ev");}
void  S4240C3 ::v24(){vfunc_called(this, "_ZN7S4240C33v24Ev");}
S4240C3 ::S4240C3(){ note_ctor("S4240C3", this);} // tgen

static void Test_S4240C3()
{
  extern Class_Descriptor cd_S4240C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(131,260)];
    init_test(&cd_S4240C3, buf);
    S4240C3 *dp, &lv = *(dp=new (buf) S4240C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1040,1036), "sizeof(S4240C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4240C3)");
    check_field_offset(lv, s4240c3f0, ABISELECT(8,4), "S4240C3.s4240c3f0");
    check_field_offset(lv, s4240c3f1, ABISELECT(1032,1028), "S4240C3.s4240c3f1");
    test_class_info(&lv, &cd_S4240C3);
    dp->~S4240C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4240C3(Test_S4240C3, "S4240C3", ABISELECT(1040,1036));

#else // __cplusplus

extern void _ZN7S4240C3C1Ev();
extern void _ZN7S4240C3D1Ev();
Name_Map name_map_S4240C3[] = {
  NSPAIR(_ZN7S4240C3C1Ev),
  NSPAIR(_ZN7S4240C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4240C3[];
extern void _ZN7S4240C3D1Ev();
extern void _ZN7S4240C3D0Ev();
extern void _ZN7S4240C33v12Ev();
extern void _ZN7S4240C33v13Ev();
extern void _ZN7S4240C33v14Ev();
extern void _ZN7S4240C33v15Ev();
extern void _ZN7S4240C33v16Ev();
extern void _ZN7S4240C33v17Ev();
extern void _ZN7S4240C33v18Ev();
extern void _ZN7S4240C33v19Ev();
extern void _ZN7S4240C33v20Ev();
extern void _ZN7S4240C33v21Ev();
extern void _ZN7S4240C33v22Ev();
extern void _ZN7S4240C33v23Ev();
extern void _ZN7S4240C33v24Ev();
static  VTBL_ENTRY vtc_S4240C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4240C3[0]),
  (VTBL_ENTRY)&_ZN7S4240C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4240C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4240C33v12Ev,
  (VTBL_ENTRY)&_ZN7S4240C33v13Ev,
  (VTBL_ENTRY)&_ZN7S4240C33v14Ev,
  (VTBL_ENTRY)&_ZN7S4240C33v15Ev,
  (VTBL_ENTRY)&_ZN7S4240C33v16Ev,
  (VTBL_ENTRY)&_ZN7S4240C33v17Ev,
  (VTBL_ENTRY)&_ZN7S4240C33v18Ev,
  (VTBL_ENTRY)&_ZN7S4240C33v19Ev,
  (VTBL_ENTRY)&_ZN7S4240C33v20Ev,
  (VTBL_ENTRY)&_ZN7S4240C33v21Ev,
  (VTBL_ENTRY)&_ZN7S4240C33v22Ev,
  (VTBL_ENTRY)&_ZN7S4240C33v23Ev,
  (VTBL_ENTRY)&_ZN7S4240C33v24Ev,
};
extern VTBL_ENTRY _ZTI7S4240C3[];
extern  VTBL_ENTRY _ZTV7S4240C3[];
Class_Descriptor cd_S4240C3 = {  "S4240C3", // class name
  0,0,//no base classes
  &(vtc_S4240C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(1040,1036), // object size
  NSPAIRA(_ZTI7S4240C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4240C3),17, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4240C2  : S4240C3 {
  virtual  ~S4240C2(); // _ZN7S4240C2D1Ev
  virtual void  v25(); // _ZN7S4240C23v25Ev
  virtual void  v26(); // _ZN7S4240C23v26Ev
  virtual void  v27(); // _ZN7S4240C23v27Ev
  virtual void  v28(); // _ZN7S4240C23v28Ev
  S4240C2(); // tgen
};
//SIG(-1 S4240C2) C1{ BC2{ vd v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 Fc[1024] Fi[2]} vd v1 v2 v3 v4}


 S4240C2 ::~S4240C2(){ note_dtor("S4240C2", this);}
void  S4240C2 ::v25(){vfunc_called(this, "_ZN7S4240C23v25Ev");}
void  S4240C2 ::v26(){vfunc_called(this, "_ZN7S4240C23v26Ev");}
void  S4240C2 ::v27(){vfunc_called(this, "_ZN7S4240C23v27Ev");}
void  S4240C2 ::v28(){vfunc_called(this, "_ZN7S4240C23v28Ev");}
S4240C2 ::S4240C2(){ note_ctor("S4240C2", this);} // tgen

static void Test_S4240C2()
{
  extern Class_Descriptor cd_S4240C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(131,260)];
    init_test(&cd_S4240C2, buf);
    S4240C2 *dp, &lv = *(dp=new (buf) S4240C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1040,1036), "sizeof(S4240C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4240C2)");
    check_base_class_offset(lv, (S4240C3*), 0, "S4240C2");
    test_class_info(&lv, &cd_S4240C2);
    dp->~S4240C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4240C2(Test_S4240C2, "S4240C2", ABISELECT(1040,1036));

#else // __cplusplus

extern void _ZN7S4240C2C1Ev();
extern void _ZN7S4240C2D1Ev();
Name_Map name_map_S4240C2[] = {
  NSPAIR(_ZN7S4240C2C1Ev),
  NSPAIR(_ZN7S4240C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4240C3;
extern VTBL_ENTRY _ZTI7S4240C3[];
extern  VTBL_ENTRY _ZTV7S4240C3[];
static Base_Class bases_S4240C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4240C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4240C2[];
extern void _ZN7S4240C2D1Ev();
extern void _ZN7S4240C2D0Ev();
extern void _ZN7S4240C33v12Ev();
extern void _ZN7S4240C33v13Ev();
extern void _ZN7S4240C33v14Ev();
extern void _ZN7S4240C33v15Ev();
extern void _ZN7S4240C33v16Ev();
extern void _ZN7S4240C33v17Ev();
extern void _ZN7S4240C33v18Ev();
extern void _ZN7S4240C33v19Ev();
extern void _ZN7S4240C33v20Ev();
extern void _ZN7S4240C33v21Ev();
extern void _ZN7S4240C33v22Ev();
extern void _ZN7S4240C33v23Ev();
extern void _ZN7S4240C33v24Ev();
extern void _ZN7S4240C23v25Ev();
extern void _ZN7S4240C23v26Ev();
extern void _ZN7S4240C23v27Ev();
extern void _ZN7S4240C23v28Ev();
static  VTBL_ENTRY vtc_S4240C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4240C2[0]),
  (VTBL_ENTRY)&_ZN7S4240C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4240C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4240C33v12Ev,
  (VTBL_ENTRY)&_ZN7S4240C33v13Ev,
  (VTBL_ENTRY)&_ZN7S4240C33v14Ev,
  (VTBL_ENTRY)&_ZN7S4240C33v15Ev,
  (VTBL_ENTRY)&_ZN7S4240C33v16Ev,
  (VTBL_ENTRY)&_ZN7S4240C33v17Ev,
  (VTBL_ENTRY)&_ZN7S4240C33v18Ev,
  (VTBL_ENTRY)&_ZN7S4240C33v19Ev,
  (VTBL_ENTRY)&_ZN7S4240C33v20Ev,
  (VTBL_ENTRY)&_ZN7S4240C33v21Ev,
  (VTBL_ENTRY)&_ZN7S4240C33v22Ev,
  (VTBL_ENTRY)&_ZN7S4240C33v23Ev,
  (VTBL_ENTRY)&_ZN7S4240C33v24Ev,
  (VTBL_ENTRY)&_ZN7S4240C23v25Ev,
  (VTBL_ENTRY)&_ZN7S4240C23v26Ev,
  (VTBL_ENTRY)&_ZN7S4240C23v27Ev,
  (VTBL_ENTRY)&_ZN7S4240C23v28Ev,
};
extern VTBL_ENTRY _ZTI7S4240C2[];
extern  VTBL_ENTRY _ZTV7S4240C2[];
Class_Descriptor cd_S4240C2 = {  "S4240C2", // class name
  bases_S4240C2, 1,
  &(vtc_S4240C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(1040,1036), // object size
  NSPAIRA(_ZTI7S4240C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4240C2),21, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4240C4_nt  {
  void *s4240c4f0[3];
  void  mf4240c4(); // _ZN10S4240C4_nt8mf4240c4Ev
};
//SIG(-1 S4240C4_nt) C1{ m Fp[3]}


void  S4240C4_nt ::mf4240c4(){}

//skip512 S4240C4_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4240C1  : S4240C2 {
  ::S4240C4_nt s4240c1f0;
  char s4240c1f1;
  void *s4240c1f2;
  virtual  ~S4240C1(); // _ZN7S4240C1D1Ev
  virtual void  v1(); // _ZN7S4240C12v1Ev
  virtual void  v2(); // _ZN7S4240C12v2Ev
  virtual void  v3(); // _ZN7S4240C12v3Ev
  virtual void  v4(); // _ZN7S4240C12v4Ev
  virtual void  v5(); // _ZN7S4240C12v5Ev
  virtual void  v6(); // _ZN7S4240C12v6Ev
  virtual void  v7(); // _ZN7S4240C12v7Ev
  virtual void  v8(); // _ZN7S4240C12v8Ev
  virtual void  v9(); // _ZN7S4240C12v9Ev
  virtual void  v10(); // _ZN7S4240C13v10Ev
  virtual void  v11(); // _ZN7S4240C13v11Ev
  S4240C1(); // tgen
};
//SIG(1 S4240C1) C1{ BC2{ BC3{ vd v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 Fc[1024] Fi[2]} vd v25 v26 v27 v28} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 FC4{ m Fp[3]} Fc Fp}


 S4240C1 ::~S4240C1(){ note_dtor("S4240C1", this);}
void  S4240C1 ::v1(){vfunc_called(this, "_ZN7S4240C12v1Ev");}
void  S4240C1 ::v2(){vfunc_called(this, "_ZN7S4240C12v2Ev");}
void  S4240C1 ::v3(){vfunc_called(this, "_ZN7S4240C12v3Ev");}
void  S4240C1 ::v4(){vfunc_called(this, "_ZN7S4240C12v4Ev");}
void  S4240C1 ::v5(){vfunc_called(this, "_ZN7S4240C12v5Ev");}
void  S4240C1 ::v6(){vfunc_called(this, "_ZN7S4240C12v6Ev");}
void  S4240C1 ::v7(){vfunc_called(this, "_ZN7S4240C12v7Ev");}
void  S4240C1 ::v8(){vfunc_called(this, "_ZN7S4240C12v8Ev");}
void  S4240C1 ::v9(){vfunc_called(this, "_ZN7S4240C12v9Ev");}
void  S4240C1 ::v10(){vfunc_called(this, "_ZN7S4240C13v10Ev");}
void  S4240C1 ::v11(){vfunc_called(this, "_ZN7S4240C13v11Ev");}
S4240C1 ::S4240C1(){ note_ctor("S4240C1", this);} // tgen

static void Test_S4240C1()
{
  extern Class_Descriptor cd_S4240C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(136,265)];
    init_test(&cd_S4240C1, buf);
    S4240C1 *dp, &lv = *(dp=new (buf) S4240C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1080,1056), "sizeof(S4240C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4240C1)");
    check_base_class_offset(lv, (S4240C3*)(S4240C2*), 0, "S4240C1");
    check_base_class_offset(lv, (S4240C2*), 0, "S4240C1");
    check_field_offset(lv, s4240c1f0, ABISELECT(1040,1036), "S4240C1.s4240c1f0");
    check_field_offset(lv, s4240c1f1, ABISELECT(1064,1048), "S4240C1.s4240c1f1");
    check_field_offset(lv, s4240c1f2, ABISELECT(1072,1052), "S4240C1.s4240c1f2");
    test_class_info(&lv, &cd_S4240C1);
    dp->~S4240C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4240C1(Test_S4240C1, "S4240C1", ABISELECT(1080,1056));

#else // __cplusplus

extern void _ZN7S4240C1C1Ev();
extern void _ZN7S4240C1D1Ev();
Name_Map name_map_S4240C1[] = {
  NSPAIR(_ZN7S4240C1C1Ev),
  NSPAIR(_ZN7S4240C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4240C3;
extern VTBL_ENTRY _ZTI7S4240C3[];
extern  VTBL_ENTRY _ZTV7S4240C3[];
extern Class_Descriptor cd_S4240C2;
extern VTBL_ENTRY _ZTI7S4240C2[];
extern  VTBL_ENTRY _ZTV7S4240C2[];
static Base_Class bases_S4240C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4240C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S4240C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4240C1[];
extern void _ZN7S4240C1D1Ev();
extern void _ZN7S4240C1D0Ev();
extern void _ZN7S4240C33v12Ev();
extern void _ZN7S4240C33v13Ev();
extern void _ZN7S4240C33v14Ev();
extern void _ZN7S4240C33v15Ev();
extern void _ZN7S4240C33v16Ev();
extern void _ZN7S4240C33v17Ev();
extern void _ZN7S4240C33v18Ev();
extern void _ZN7S4240C33v19Ev();
extern void _ZN7S4240C33v20Ev();
extern void _ZN7S4240C33v21Ev();
extern void _ZN7S4240C33v22Ev();
extern void _ZN7S4240C33v23Ev();
extern void _ZN7S4240C33v24Ev();
extern void _ZN7S4240C23v25Ev();
extern void _ZN7S4240C23v26Ev();
extern void _ZN7S4240C23v27Ev();
extern void _ZN7S4240C23v28Ev();
extern void _ZN7S4240C12v1Ev();
extern void _ZN7S4240C12v2Ev();
extern void _ZN7S4240C12v3Ev();
extern void _ZN7S4240C12v4Ev();
extern void _ZN7S4240C12v5Ev();
extern void _ZN7S4240C12v6Ev();
extern void _ZN7S4240C12v7Ev();
extern void _ZN7S4240C12v8Ev();
extern void _ZN7S4240C12v9Ev();
extern void _ZN7S4240C13v10Ev();
extern void _ZN7S4240C13v11Ev();
static  VTBL_ENTRY vtc_S4240C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4240C1[0]),
  (VTBL_ENTRY)&_ZN7S4240C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4240C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4240C33v12Ev,
  (VTBL_ENTRY)&_ZN7S4240C33v13Ev,
  (VTBL_ENTRY)&_ZN7S4240C33v14Ev,
  (VTBL_ENTRY)&_ZN7S4240C33v15Ev,
  (VTBL_ENTRY)&_ZN7S4240C33v16Ev,
  (VTBL_ENTRY)&_ZN7S4240C33v17Ev,
  (VTBL_ENTRY)&_ZN7S4240C33v18Ev,
  (VTBL_ENTRY)&_ZN7S4240C33v19Ev,
  (VTBL_ENTRY)&_ZN7S4240C33v20Ev,
  (VTBL_ENTRY)&_ZN7S4240C33v21Ev,
  (VTBL_ENTRY)&_ZN7S4240C33v22Ev,
  (VTBL_ENTRY)&_ZN7S4240C33v23Ev,
  (VTBL_ENTRY)&_ZN7S4240C33v24Ev,
  (VTBL_ENTRY)&_ZN7S4240C23v25Ev,
  (VTBL_ENTRY)&_ZN7S4240C23v26Ev,
  (VTBL_ENTRY)&_ZN7S4240C23v27Ev,
  (VTBL_ENTRY)&_ZN7S4240C23v28Ev,
  (VTBL_ENTRY)&_ZN7S4240C12v1Ev,
  (VTBL_ENTRY)&_ZN7S4240C12v2Ev,
  (VTBL_ENTRY)&_ZN7S4240C12v3Ev,
  (VTBL_ENTRY)&_ZN7S4240C12v4Ev,
  (VTBL_ENTRY)&_ZN7S4240C12v5Ev,
  (VTBL_ENTRY)&_ZN7S4240C12v6Ev,
  (VTBL_ENTRY)&_ZN7S4240C12v7Ev,
  (VTBL_ENTRY)&_ZN7S4240C12v8Ev,
  (VTBL_ENTRY)&_ZN7S4240C12v9Ev,
  (VTBL_ENTRY)&_ZN7S4240C13v10Ev,
  (VTBL_ENTRY)&_ZN7S4240C13v11Ev,
};
extern VTBL_ENTRY _ZTI7S4240C1[];
extern  VTBL_ENTRY _ZTV7S4240C1[];
Class_Descriptor cd_S4240C1 = {  "S4240C1", // class name
  bases_S4240C1, 2,
  &(vtc_S4240C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(1080,1056), // object size
  NSPAIRA(_ZTI7S4240C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4240C1),32, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4276C3  {
  char s4276c3f0[1024];
  int s4276c3f1[2];
  virtual  ~S4276C3(); // _ZN7S4276C3D1Ev
  virtual void  v15(); // _ZN7S4276C33v15Ev
  virtual void  v16(); // _ZN7S4276C33v16Ev
  virtual void  v17(); // _ZN7S4276C33v17Ev
  virtual void  v18(); // _ZN7S4276C33v18Ev
  virtual void  v19(); // _ZN7S4276C33v19Ev
  virtual void  v20(); // _ZN7S4276C33v20Ev
  virtual void  v21(); // _ZN7S4276C33v21Ev
  virtual void  v22(); // _ZN7S4276C33v22Ev
  virtual void  v23(); // _ZN7S4276C33v23Ev
  virtual void  v24(); // _ZN7S4276C33v24Ev
  virtual void  v25(); // _ZN7S4276C33v25Ev
  virtual void  v26(); // _ZN7S4276C33v26Ev
  S4276C3(); // tgen
};
//SIG(-1 S4276C3) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 Fc[1024] Fi[2]}


 S4276C3 ::~S4276C3(){ note_dtor("S4276C3", this);}
void  S4276C3 ::v15(){vfunc_called(this, "_ZN7S4276C33v15Ev");}
void  S4276C3 ::v16(){vfunc_called(this, "_ZN7S4276C33v16Ev");}
void  S4276C3 ::v17(){vfunc_called(this, "_ZN7S4276C33v17Ev");}
void  S4276C3 ::v18(){vfunc_called(this, "_ZN7S4276C33v18Ev");}
void  S4276C3 ::v19(){vfunc_called(this, "_ZN7S4276C33v19Ev");}
void  S4276C3 ::v20(){vfunc_called(this, "_ZN7S4276C33v20Ev");}
void  S4276C3 ::v21(){vfunc_called(this, "_ZN7S4276C33v21Ev");}
void  S4276C3 ::v22(){vfunc_called(this, "_ZN7S4276C33v22Ev");}
void  S4276C3 ::v23(){vfunc_called(this, "_ZN7S4276C33v23Ev");}
void  S4276C3 ::v24(){vfunc_called(this, "_ZN7S4276C33v24Ev");}
void  S4276C3 ::v25(){vfunc_called(this, "_ZN7S4276C33v25Ev");}
void  S4276C3 ::v26(){vfunc_called(this, "_ZN7S4276C33v26Ev");}
S4276C3 ::S4276C3(){ note_ctor("S4276C3", this);} // tgen

static void Test_S4276C3()
{
  extern Class_Descriptor cd_S4276C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(131,260)];
    init_test(&cd_S4276C3, buf);
    S4276C3 *dp, &lv = *(dp=new (buf) S4276C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1040,1036), "sizeof(S4276C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4276C3)");
    check_field_offset(lv, s4276c3f0, ABISELECT(8,4), "S4276C3.s4276c3f0");
    check_field_offset(lv, s4276c3f1, ABISELECT(1032,1028), "S4276C3.s4276c3f1");
    test_class_info(&lv, &cd_S4276C3);
    dp->~S4276C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4276C3(Test_S4276C3, "S4276C3", ABISELECT(1040,1036));

#else // __cplusplus

extern void _ZN7S4276C3C1Ev();
extern void _ZN7S4276C3D1Ev();
Name_Map name_map_S4276C3[] = {
  NSPAIR(_ZN7S4276C3C1Ev),
  NSPAIR(_ZN7S4276C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4276C3[];
extern void _ZN7S4276C3D1Ev();
extern void _ZN7S4276C3D0Ev();
extern void _ZN7S4276C33v15Ev();
extern void _ZN7S4276C33v16Ev();
extern void _ZN7S4276C33v17Ev();
extern void _ZN7S4276C33v18Ev();
extern void _ZN7S4276C33v19Ev();
extern void _ZN7S4276C33v20Ev();
extern void _ZN7S4276C33v21Ev();
extern void _ZN7S4276C33v22Ev();
extern void _ZN7S4276C33v23Ev();
extern void _ZN7S4276C33v24Ev();
extern void _ZN7S4276C33v25Ev();
extern void _ZN7S4276C33v26Ev();
static  VTBL_ENTRY vtc_S4276C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4276C3[0]),
  (VTBL_ENTRY)&_ZN7S4276C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4276C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4276C33v15Ev,
  (VTBL_ENTRY)&_ZN7S4276C33v16Ev,
  (VTBL_ENTRY)&_ZN7S4276C33v17Ev,
  (VTBL_ENTRY)&_ZN7S4276C33v18Ev,
  (VTBL_ENTRY)&_ZN7S4276C33v19Ev,
  (VTBL_ENTRY)&_ZN7S4276C33v20Ev,
  (VTBL_ENTRY)&_ZN7S4276C33v21Ev,
  (VTBL_ENTRY)&_ZN7S4276C33v22Ev,
  (VTBL_ENTRY)&_ZN7S4276C33v23Ev,
  (VTBL_ENTRY)&_ZN7S4276C33v24Ev,
  (VTBL_ENTRY)&_ZN7S4276C33v25Ev,
  (VTBL_ENTRY)&_ZN7S4276C33v26Ev,
};
extern VTBL_ENTRY _ZTI7S4276C3[];
extern  VTBL_ENTRY _ZTV7S4276C3[];
Class_Descriptor cd_S4276C3 = {  "S4276C3", // class name
  0,0,//no base classes
  &(vtc_S4276C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(1040,1036), // object size
  NSPAIRA(_ZTI7S4276C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4276C3),16, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4276C2  : S4276C3 {
  virtual  ~S4276C2(); // _ZN7S4276C2D1Ev
  virtual void  v27(); // _ZN7S4276C23v27Ev
  virtual void  v28(); // _ZN7S4276C23v28Ev
  virtual void  v29(); // _ZN7S4276C23v29Ev
  virtual void  v30(); // _ZN7S4276C23v30Ev
  S4276C2(); // tgen
};
//SIG(-1 S4276C2) C1{ BC2{ vd v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 Fc[1024] Fi[2]} vd v1 v2 v3 v4}


 S4276C2 ::~S4276C2(){ note_dtor("S4276C2", this);}
void  S4276C2 ::v27(){vfunc_called(this, "_ZN7S4276C23v27Ev");}
void  S4276C2 ::v28(){vfunc_called(this, "_ZN7S4276C23v28Ev");}
void  S4276C2 ::v29(){vfunc_called(this, "_ZN7S4276C23v29Ev");}
void  S4276C2 ::v30(){vfunc_called(this, "_ZN7S4276C23v30Ev");}
S4276C2 ::S4276C2(){ note_ctor("S4276C2", this);} // tgen

static void Test_S4276C2()
{
  extern Class_Descriptor cd_S4276C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(131,260)];
    init_test(&cd_S4276C2, buf);
    S4276C2 *dp, &lv = *(dp=new (buf) S4276C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1040,1036), "sizeof(S4276C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4276C2)");
    check_base_class_offset(lv, (S4276C3*), 0, "S4276C2");
    test_class_info(&lv, &cd_S4276C2);
    dp->~S4276C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4276C2(Test_S4276C2, "S4276C2", ABISELECT(1040,1036));

#else // __cplusplus

extern void _ZN7S4276C2C1Ev();
extern void _ZN7S4276C2D1Ev();
Name_Map name_map_S4276C2[] = {
  NSPAIR(_ZN7S4276C2C1Ev),
  NSPAIR(_ZN7S4276C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4276C3;
extern VTBL_ENTRY _ZTI7S4276C3[];
extern  VTBL_ENTRY _ZTV7S4276C3[];
static Base_Class bases_S4276C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4276C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4276C2[];
extern void _ZN7S4276C2D1Ev();
extern void _ZN7S4276C2D0Ev();
extern void _ZN7S4276C33v15Ev();
extern void _ZN7S4276C33v16Ev();
extern void _ZN7S4276C33v17Ev();
extern void _ZN7S4276C33v18Ev();
extern void _ZN7S4276C33v19Ev();
extern void _ZN7S4276C33v20Ev();
extern void _ZN7S4276C33v21Ev();
extern void _ZN7S4276C33v22Ev();
extern void _ZN7S4276C33v23Ev();
extern void _ZN7S4276C33v24Ev();
extern void _ZN7S4276C33v25Ev();
extern void _ZN7S4276C33v26Ev();
extern void _ZN7S4276C23v27Ev();
extern void _ZN7S4276C23v28Ev();
extern void _ZN7S4276C23v29Ev();
extern void _ZN7S4276C23v30Ev();
static  VTBL_ENTRY vtc_S4276C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4276C2[0]),
  (VTBL_ENTRY)&_ZN7S4276C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4276C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4276C33v15Ev,
  (VTBL_ENTRY)&_ZN7S4276C33v16Ev,
  (VTBL_ENTRY)&_ZN7S4276C33v17Ev,
  (VTBL_ENTRY)&_ZN7S4276C33v18Ev,
  (VTBL_ENTRY)&_ZN7S4276C33v19Ev,
  (VTBL_ENTRY)&_ZN7S4276C33v20Ev,
  (VTBL_ENTRY)&_ZN7S4276C33v21Ev,
  (VTBL_ENTRY)&_ZN7S4276C33v22Ev,
  (VTBL_ENTRY)&_ZN7S4276C33v23Ev,
  (VTBL_ENTRY)&_ZN7S4276C33v24Ev,
  (VTBL_ENTRY)&_ZN7S4276C33v25Ev,
  (VTBL_ENTRY)&_ZN7S4276C33v26Ev,
  (VTBL_ENTRY)&_ZN7S4276C23v27Ev,
  (VTBL_ENTRY)&_ZN7S4276C23v28Ev,
  (VTBL_ENTRY)&_ZN7S4276C23v29Ev,
  (VTBL_ENTRY)&_ZN7S4276C23v30Ev,
};
extern VTBL_ENTRY _ZTI7S4276C2[];
extern  VTBL_ENTRY _ZTV7S4276C2[];
Class_Descriptor cd_S4276C2 = {  "S4276C2", // class name
  bases_S4276C2, 1,
  &(vtc_S4276C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(1040,1036), // object size
  NSPAIRA(_ZTI7S4276C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4276C2),20, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4276C1  : S4276C2 {
  char s4276c1f0;
  __tsi64 s4276c1f1;
  void *s4276c1f2;
  virtual  ~S4276C1(); // _ZN7S4276C1D1Ev
  virtual void  v1(); // _ZN7S4276C12v1Ev
  virtual void  v2(); // _ZN7S4276C12v2Ev
  virtual void  v3(); // _ZN7S4276C12v3Ev
  virtual void  v4(); // _ZN7S4276C12v4Ev
  virtual void  v5(); // _ZN7S4276C12v5Ev
  virtual void  v6(); // _ZN7S4276C12v6Ev
  virtual void  v7(); // _ZN7S4276C12v7Ev
  virtual void  v8(); // _ZN7S4276C12v8Ev
  virtual void  v9(); // _ZN7S4276C12v9Ev
  virtual void  v10(); // _ZN7S4276C13v10Ev
  virtual void  v11(); // _ZN7S4276C13v11Ev
  virtual void  v12(); // _ZN7S4276C13v12Ev
  virtual void  v13(); // _ZN7S4276C13v13Ev
  virtual void  v14(); // _ZN7S4276C13v14Ev
  S4276C1(); // tgen
};
//SIG(1 S4276C1) C1{ BC2{ BC3{ vd v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 Fc[1024] Fi[2]} vd v27 v28 v29 v30} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 Fc FL Fp}


 S4276C1 ::~S4276C1(){ note_dtor("S4276C1", this);}
void  S4276C1 ::v1(){vfunc_called(this, "_ZN7S4276C12v1Ev");}
void  S4276C1 ::v2(){vfunc_called(this, "_ZN7S4276C12v2Ev");}
void  S4276C1 ::v3(){vfunc_called(this, "_ZN7S4276C12v3Ev");}
void  S4276C1 ::v4(){vfunc_called(this, "_ZN7S4276C12v4Ev");}
void  S4276C1 ::v5(){vfunc_called(this, "_ZN7S4276C12v5Ev");}
void  S4276C1 ::v6(){vfunc_called(this, "_ZN7S4276C12v6Ev");}
void  S4276C1 ::v7(){vfunc_called(this, "_ZN7S4276C12v7Ev");}
void  S4276C1 ::v8(){vfunc_called(this, "_ZN7S4276C12v8Ev");}
void  S4276C1 ::v9(){vfunc_called(this, "_ZN7S4276C12v9Ev");}
void  S4276C1 ::v10(){vfunc_called(this, "_ZN7S4276C13v10Ev");}
void  S4276C1 ::v11(){vfunc_called(this, "_ZN7S4276C13v11Ev");}
void  S4276C1 ::v12(){vfunc_called(this, "_ZN7S4276C13v12Ev");}
void  S4276C1 ::v13(){vfunc_called(this, "_ZN7S4276C13v13Ev");}
void  S4276C1 ::v14(){vfunc_called(this, "_ZN7S4276C13v14Ev");}
S4276C1 ::S4276C1(){ note_ctor("S4276C1", this);} // tgen

static void Test_S4276C1()
{
  extern Class_Descriptor cd_S4276C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(134,264)];
    init_test(&cd_S4276C1, buf);
    S4276C1 *dp, &lv = *(dp=new (buf) S4276C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1064,1052), "sizeof(S4276C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4276C1)");
    check_base_class_offset(lv, (S4276C3*)(S4276C2*), 0, "S4276C1");
    check_base_class_offset(lv, (S4276C2*), 0, "S4276C1");
    check_field_offset(lv, s4276c1f0, ABISELECT(1040,1036), "S4276C1.s4276c1f0");
    check_field_offset(lv, s4276c1f1, ABISELECT(1048,1040), "S4276C1.s4276c1f1");
    check_field_offset(lv, s4276c1f2, ABISELECT(1056,1048), "S4276C1.s4276c1f2");
    test_class_info(&lv, &cd_S4276C1);
    dp->~S4276C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4276C1(Test_S4276C1, "S4276C1", ABISELECT(1064,1052));

#else // __cplusplus

extern void _ZN7S4276C1C1Ev();
extern void _ZN7S4276C1D1Ev();
Name_Map name_map_S4276C1[] = {
  NSPAIR(_ZN7S4276C1C1Ev),
  NSPAIR(_ZN7S4276C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4276C3;
extern VTBL_ENTRY _ZTI7S4276C3[];
extern  VTBL_ENTRY _ZTV7S4276C3[];
extern Class_Descriptor cd_S4276C2;
extern VTBL_ENTRY _ZTI7S4276C2[];
extern  VTBL_ENTRY _ZTV7S4276C2[];
static Base_Class bases_S4276C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4276C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S4276C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4276C1[];
extern void _ZN7S4276C1D1Ev();
extern void _ZN7S4276C1D0Ev();
extern void _ZN7S4276C33v15Ev();
extern void _ZN7S4276C33v16Ev();
extern void _ZN7S4276C33v17Ev();
extern void _ZN7S4276C33v18Ev();
extern void _ZN7S4276C33v19Ev();
extern void _ZN7S4276C33v20Ev();
extern void _ZN7S4276C33v21Ev();
extern void _ZN7S4276C33v22Ev();
extern void _ZN7S4276C33v23Ev();
extern void _ZN7S4276C33v24Ev();
extern void _ZN7S4276C33v25Ev();
extern void _ZN7S4276C33v26Ev();
extern void _ZN7S4276C23v27Ev();
extern void _ZN7S4276C23v28Ev();
extern void _ZN7S4276C23v29Ev();
extern void _ZN7S4276C23v30Ev();
extern void _ZN7S4276C12v1Ev();
extern void _ZN7S4276C12v2Ev();
extern void _ZN7S4276C12v3Ev();
extern void _ZN7S4276C12v4Ev();
extern void _ZN7S4276C12v5Ev();
extern void _ZN7S4276C12v6Ev();
extern void _ZN7S4276C12v7Ev();
extern void _ZN7S4276C12v8Ev();
extern void _ZN7S4276C12v9Ev();
extern void _ZN7S4276C13v10Ev();
extern void _ZN7S4276C13v11Ev();
extern void _ZN7S4276C13v12Ev();
extern void _ZN7S4276C13v13Ev();
extern void _ZN7S4276C13v14Ev();
static  VTBL_ENTRY vtc_S4276C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4276C1[0]),
  (VTBL_ENTRY)&_ZN7S4276C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4276C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4276C33v15Ev,
  (VTBL_ENTRY)&_ZN7S4276C33v16Ev,
  (VTBL_ENTRY)&_ZN7S4276C33v17Ev,
  (VTBL_ENTRY)&_ZN7S4276C33v18Ev,
  (VTBL_ENTRY)&_ZN7S4276C33v19Ev,
  (VTBL_ENTRY)&_ZN7S4276C33v20Ev,
  (VTBL_ENTRY)&_ZN7S4276C33v21Ev,
  (VTBL_ENTRY)&_ZN7S4276C33v22Ev,
  (VTBL_ENTRY)&_ZN7S4276C33v23Ev,
  (VTBL_ENTRY)&_ZN7S4276C33v24Ev,
  (VTBL_ENTRY)&_ZN7S4276C33v25Ev,
  (VTBL_ENTRY)&_ZN7S4276C33v26Ev,
  (VTBL_ENTRY)&_ZN7S4276C23v27Ev,
  (VTBL_ENTRY)&_ZN7S4276C23v28Ev,
  (VTBL_ENTRY)&_ZN7S4276C23v29Ev,
  (VTBL_ENTRY)&_ZN7S4276C23v30Ev,
  (VTBL_ENTRY)&_ZN7S4276C12v1Ev,
  (VTBL_ENTRY)&_ZN7S4276C12v2Ev,
  (VTBL_ENTRY)&_ZN7S4276C12v3Ev,
  (VTBL_ENTRY)&_ZN7S4276C12v4Ev,
  (VTBL_ENTRY)&_ZN7S4276C12v5Ev,
  (VTBL_ENTRY)&_ZN7S4276C12v6Ev,
  (VTBL_ENTRY)&_ZN7S4276C12v7Ev,
  (VTBL_ENTRY)&_ZN7S4276C12v8Ev,
  (VTBL_ENTRY)&_ZN7S4276C12v9Ev,
  (VTBL_ENTRY)&_ZN7S4276C13v10Ev,
  (VTBL_ENTRY)&_ZN7S4276C13v11Ev,
  (VTBL_ENTRY)&_ZN7S4276C13v12Ev,
  (VTBL_ENTRY)&_ZN7S4276C13v13Ev,
  (VTBL_ENTRY)&_ZN7S4276C13v14Ev,
};
extern VTBL_ENTRY _ZTI7S4276C1[];
extern  VTBL_ENTRY _ZTV7S4276C1[];
Class_Descriptor cd_S4276C1 = {  "S4276C1", // class name
  bases_S4276C1, 2,
  &(vtc_S4276C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(1064,1052), // object size
  NSPAIRA(_ZTI7S4276C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4276C1),34, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4254C3  {
  char s4254c3f0[1024];
  int s4254c3f1[2];
  virtual  ~S4254C3(); // _ZN7S4254C3D1Ev
  virtual void  v14(); // _ZN7S4254C33v14Ev
  virtual void  v15(); // _ZN7S4254C33v15Ev
  virtual void  v16(); // _ZN7S4254C33v16Ev
  virtual void  v17(); // _ZN7S4254C33v17Ev
  virtual void  v18(); // _ZN7S4254C33v18Ev
  virtual void  v19(); // _ZN7S4254C33v19Ev
  virtual void  v20(); // _ZN7S4254C33v20Ev
  virtual void  v21(); // _ZN7S4254C33v21Ev
  virtual void  v22(); // _ZN7S4254C33v22Ev
  virtual void  v23(); // _ZN7S4254C33v23Ev
  virtual void  v24(); // _ZN7S4254C33v24Ev
  virtual void  v25(); // _ZN7S4254C33v25Ev
  S4254C3(); // tgen
};
//SIG(-1 S4254C3) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 Fc[1024] Fi[2]}


 S4254C3 ::~S4254C3(){ note_dtor("S4254C3", this);}
void  S4254C3 ::v14(){vfunc_called(this, "_ZN7S4254C33v14Ev");}
void  S4254C3 ::v15(){vfunc_called(this, "_ZN7S4254C33v15Ev");}
void  S4254C3 ::v16(){vfunc_called(this, "_ZN7S4254C33v16Ev");}
void  S4254C3 ::v17(){vfunc_called(this, "_ZN7S4254C33v17Ev");}
void  S4254C3 ::v18(){vfunc_called(this, "_ZN7S4254C33v18Ev");}
void  S4254C3 ::v19(){vfunc_called(this, "_ZN7S4254C33v19Ev");}
void  S4254C3 ::v20(){vfunc_called(this, "_ZN7S4254C33v20Ev");}
void  S4254C3 ::v21(){vfunc_called(this, "_ZN7S4254C33v21Ev");}
void  S4254C3 ::v22(){vfunc_called(this, "_ZN7S4254C33v22Ev");}
void  S4254C3 ::v23(){vfunc_called(this, "_ZN7S4254C33v23Ev");}
void  S4254C3 ::v24(){vfunc_called(this, "_ZN7S4254C33v24Ev");}
void  S4254C3 ::v25(){vfunc_called(this, "_ZN7S4254C33v25Ev");}
S4254C3 ::S4254C3(){ note_ctor("S4254C3", this);} // tgen

static void Test_S4254C3()
{
  extern Class_Descriptor cd_S4254C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(131,260)];
    init_test(&cd_S4254C3, buf);
    S4254C3 *dp, &lv = *(dp=new (buf) S4254C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1040,1036), "sizeof(S4254C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4254C3)");
    check_field_offset(lv, s4254c3f0, ABISELECT(8,4), "S4254C3.s4254c3f0");
    check_field_offset(lv, s4254c3f1, ABISELECT(1032,1028), "S4254C3.s4254c3f1");
    test_class_info(&lv, &cd_S4254C3);
    dp->~S4254C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4254C3(Test_S4254C3, "S4254C3", ABISELECT(1040,1036));

#else // __cplusplus

extern void _ZN7S4254C3C1Ev();
extern void _ZN7S4254C3D1Ev();
Name_Map name_map_S4254C3[] = {
  NSPAIR(_ZN7S4254C3C1Ev),
  NSPAIR(_ZN7S4254C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4254C3[];
extern void _ZN7S4254C3D1Ev();
extern void _ZN7S4254C3D0Ev();
extern void _ZN7S4254C33v14Ev();
extern void _ZN7S4254C33v15Ev();
extern void _ZN7S4254C33v16Ev();
extern void _ZN7S4254C33v17Ev();
extern void _ZN7S4254C33v18Ev();
extern void _ZN7S4254C33v19Ev();
extern void _ZN7S4254C33v20Ev();
extern void _ZN7S4254C33v21Ev();
extern void _ZN7S4254C33v22Ev();
extern void _ZN7S4254C33v23Ev();
extern void _ZN7S4254C33v24Ev();
extern void _ZN7S4254C33v25Ev();
static  VTBL_ENTRY vtc_S4254C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4254C3[0]),
  (VTBL_ENTRY)&_ZN7S4254C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4254C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4254C33v14Ev,
  (VTBL_ENTRY)&_ZN7S4254C33v15Ev,
  (VTBL_ENTRY)&_ZN7S4254C33v16Ev,
  (VTBL_ENTRY)&_ZN7S4254C33v17Ev,
  (VTBL_ENTRY)&_ZN7S4254C33v18Ev,
  (VTBL_ENTRY)&_ZN7S4254C33v19Ev,
  (VTBL_ENTRY)&_ZN7S4254C33v20Ev,
  (VTBL_ENTRY)&_ZN7S4254C33v21Ev,
  (VTBL_ENTRY)&_ZN7S4254C33v22Ev,
  (VTBL_ENTRY)&_ZN7S4254C33v23Ev,
  (VTBL_ENTRY)&_ZN7S4254C33v24Ev,
  (VTBL_ENTRY)&_ZN7S4254C33v25Ev,
};
extern VTBL_ENTRY _ZTI7S4254C3[];
extern  VTBL_ENTRY _ZTV7S4254C3[];
Class_Descriptor cd_S4254C3 = {  "S4254C3", // class name
  0,0,//no base classes
  &(vtc_S4254C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(1040,1036), // object size
  NSPAIRA(_ZTI7S4254C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4254C3),16, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4254C2  : S4254C3 {
  virtual  ~S4254C2(); // _ZN7S4254C2D1Ev
  virtual void  v26(); // _ZN7S4254C23v26Ev
  virtual void  v27(); // _ZN7S4254C23v27Ev
  virtual void  v28(); // _ZN7S4254C23v28Ev
  virtual void  v29(); // _ZN7S4254C23v29Ev
  S4254C2(); // tgen
};
//SIG(-1 S4254C2) C1{ BC2{ vd v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 Fc[1024] Fi[2]} vd v1 v2 v3 v4}


 S4254C2 ::~S4254C2(){ note_dtor("S4254C2", this);}
void  S4254C2 ::v26(){vfunc_called(this, "_ZN7S4254C23v26Ev");}
void  S4254C2 ::v27(){vfunc_called(this, "_ZN7S4254C23v27Ev");}
void  S4254C2 ::v28(){vfunc_called(this, "_ZN7S4254C23v28Ev");}
void  S4254C2 ::v29(){vfunc_called(this, "_ZN7S4254C23v29Ev");}
S4254C2 ::S4254C2(){ note_ctor("S4254C2", this);} // tgen

static void Test_S4254C2()
{
  extern Class_Descriptor cd_S4254C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(131,260)];
    init_test(&cd_S4254C2, buf);
    S4254C2 *dp, &lv = *(dp=new (buf) S4254C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1040,1036), "sizeof(S4254C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4254C2)");
    check_base_class_offset(lv, (S4254C3*), 0, "S4254C2");
    test_class_info(&lv, &cd_S4254C2);
    dp->~S4254C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4254C2(Test_S4254C2, "S4254C2", ABISELECT(1040,1036));

#else // __cplusplus

extern void _ZN7S4254C2C1Ev();
extern void _ZN7S4254C2D1Ev();
Name_Map name_map_S4254C2[] = {
  NSPAIR(_ZN7S4254C2C1Ev),
  NSPAIR(_ZN7S4254C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4254C3;
extern VTBL_ENTRY _ZTI7S4254C3[];
extern  VTBL_ENTRY _ZTV7S4254C3[];
static Base_Class bases_S4254C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4254C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4254C2[];
extern void _ZN7S4254C2D1Ev();
extern void _ZN7S4254C2D0Ev();
extern void _ZN7S4254C33v14Ev();
extern void _ZN7S4254C33v15Ev();
extern void _ZN7S4254C33v16Ev();
extern void _ZN7S4254C33v17Ev();
extern void _ZN7S4254C33v18Ev();
extern void _ZN7S4254C33v19Ev();
extern void _ZN7S4254C33v20Ev();
extern void _ZN7S4254C33v21Ev();
extern void _ZN7S4254C33v22Ev();
extern void _ZN7S4254C33v23Ev();
extern void _ZN7S4254C33v24Ev();
extern void _ZN7S4254C33v25Ev();
extern void _ZN7S4254C23v26Ev();
extern void _ZN7S4254C23v27Ev();
extern void _ZN7S4254C23v28Ev();
extern void _ZN7S4254C23v29Ev();
static  VTBL_ENTRY vtc_S4254C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4254C2[0]),
  (VTBL_ENTRY)&_ZN7S4254C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4254C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4254C33v14Ev,
  (VTBL_ENTRY)&_ZN7S4254C33v15Ev,
  (VTBL_ENTRY)&_ZN7S4254C33v16Ev,
  (VTBL_ENTRY)&_ZN7S4254C33v17Ev,
  (VTBL_ENTRY)&_ZN7S4254C33v18Ev,
  (VTBL_ENTRY)&_ZN7S4254C33v19Ev,
  (VTBL_ENTRY)&_ZN7S4254C33v20Ev,
  (VTBL_ENTRY)&_ZN7S4254C33v21Ev,
  (VTBL_ENTRY)&_ZN7S4254C33v22Ev,
  (VTBL_ENTRY)&_ZN7S4254C33v23Ev,
  (VTBL_ENTRY)&_ZN7S4254C33v24Ev,
  (VTBL_ENTRY)&_ZN7S4254C33v25Ev,
  (VTBL_ENTRY)&_ZN7S4254C23v26Ev,
  (VTBL_ENTRY)&_ZN7S4254C23v27Ev,
  (VTBL_ENTRY)&_ZN7S4254C23v28Ev,
  (VTBL_ENTRY)&_ZN7S4254C23v29Ev,
};
extern VTBL_ENTRY _ZTI7S4254C2[];
extern  VTBL_ENTRY _ZTV7S4254C2[];
Class_Descriptor cd_S4254C2 = {  "S4254C2", // class name
  bases_S4254C2, 1,
  &(vtc_S4254C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(1040,1036), // object size
  NSPAIRA(_ZTI7S4254C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4254C2),20, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4254C1  : S4254C2 {
  int s4254c1f0;
  __tsi64 s4254c1f1[2];
  int s4254c1f2;
  virtual  ~S4254C1(); // _ZN7S4254C1D1Ev
  virtual void  v1(); // _ZN7S4254C12v1Ev
  virtual void  v2(); // _ZN7S4254C12v2Ev
  virtual void  v3(); // _ZN7S4254C12v3Ev
  virtual void  v4(); // _ZN7S4254C12v4Ev
  virtual void  v5(); // _ZN7S4254C12v5Ev
  virtual void  v6(); // _ZN7S4254C12v6Ev
  virtual void  v7(); // _ZN7S4254C12v7Ev
  virtual void  v8(); // _ZN7S4254C12v8Ev
  virtual void  v9(); // _ZN7S4254C12v9Ev
  virtual void  v10(); // _ZN7S4254C13v10Ev
  virtual void  v11(); // _ZN7S4254C13v11Ev
  virtual void  v12(); // _ZN7S4254C13v12Ev
  virtual void  v13(); // _ZN7S4254C13v13Ev
  S4254C1(); // tgen
};
//SIG(1 S4254C1) C1{ BC2{ BC3{ vd v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 Fc[1024] Fi[2]} vd v26 v27 v28 v29} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 Fi FL[2] Fi}


 S4254C1 ::~S4254C1(){ note_dtor("S4254C1", this);}
void  S4254C1 ::v1(){vfunc_called(this, "_ZN7S4254C12v1Ev");}
void  S4254C1 ::v2(){vfunc_called(this, "_ZN7S4254C12v2Ev");}
void  S4254C1 ::v3(){vfunc_called(this, "_ZN7S4254C12v3Ev");}
void  S4254C1 ::v4(){vfunc_called(this, "_ZN7S4254C12v4Ev");}
void  S4254C1 ::v5(){vfunc_called(this, "_ZN7S4254C12v5Ev");}
void  S4254C1 ::v6(){vfunc_called(this, "_ZN7S4254C12v6Ev");}
void  S4254C1 ::v7(){vfunc_called(this, "_ZN7S4254C12v7Ev");}
void  S4254C1 ::v8(){vfunc_called(this, "_ZN7S4254C12v8Ev");}
void  S4254C1 ::v9(){vfunc_called(this, "_ZN7S4254C12v9Ev");}
void  S4254C1 ::v10(){vfunc_called(this, "_ZN7S4254C13v10Ev");}
void  S4254C1 ::v11(){vfunc_called(this, "_ZN7S4254C13v11Ev");}
void  S4254C1 ::v12(){vfunc_called(this, "_ZN7S4254C13v12Ev");}
void  S4254C1 ::v13(){vfunc_called(this, "_ZN7S4254C13v13Ev");}
S4254C1 ::S4254C1(){ note_ctor("S4254C1", this);} // tgen

static void Test_S4254C1()
{
  extern Class_Descriptor cd_S4254C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(135,266)];
    init_test(&cd_S4254C1, buf);
    S4254C1 *dp, &lv = *(dp=new (buf) S4254C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1072,1060), "sizeof(S4254C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4254C1)");
    check_base_class_offset(lv, (S4254C3*)(S4254C2*), 0, "S4254C1");
    check_base_class_offset(lv, (S4254C2*), 0, "S4254C1");
    check_field_offset(lv, s4254c1f0, ABISELECT(1040,1036), "S4254C1.s4254c1f0");
    check_field_offset(lv, s4254c1f1, ABISELECT(1048,1040), "S4254C1.s4254c1f1");
    check_field_offset(lv, s4254c1f2, ABISELECT(1064,1056), "S4254C1.s4254c1f2");
    test_class_info(&lv, &cd_S4254C1);
    dp->~S4254C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4254C1(Test_S4254C1, "S4254C1", ABISELECT(1072,1060));

#else // __cplusplus

extern void _ZN7S4254C1C1Ev();
extern void _ZN7S4254C1D1Ev();
Name_Map name_map_S4254C1[] = {
  NSPAIR(_ZN7S4254C1C1Ev),
  NSPAIR(_ZN7S4254C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4254C3;
extern VTBL_ENTRY _ZTI7S4254C3[];
extern  VTBL_ENTRY _ZTV7S4254C3[];
extern Class_Descriptor cd_S4254C2;
extern VTBL_ENTRY _ZTI7S4254C2[];
extern  VTBL_ENTRY _ZTV7S4254C2[];
static Base_Class bases_S4254C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4254C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S4254C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4254C1[];
extern void _ZN7S4254C1D1Ev();
extern void _ZN7S4254C1D0Ev();
extern void _ZN7S4254C33v14Ev();
extern void _ZN7S4254C33v15Ev();
extern void _ZN7S4254C33v16Ev();
extern void _ZN7S4254C33v17Ev();
extern void _ZN7S4254C33v18Ev();
extern void _ZN7S4254C33v19Ev();
extern void _ZN7S4254C33v20Ev();
extern void _ZN7S4254C33v21Ev();
extern void _ZN7S4254C33v22Ev();
extern void _ZN7S4254C33v23Ev();
extern void _ZN7S4254C33v24Ev();
extern void _ZN7S4254C33v25Ev();
extern void _ZN7S4254C23v26Ev();
extern void _ZN7S4254C23v27Ev();
extern void _ZN7S4254C23v28Ev();
extern void _ZN7S4254C23v29Ev();
extern void _ZN7S4254C12v1Ev();
extern void _ZN7S4254C12v2Ev();
extern void _ZN7S4254C12v3Ev();
extern void _ZN7S4254C12v4Ev();
extern void _ZN7S4254C12v5Ev();
extern void _ZN7S4254C12v6Ev();
extern void _ZN7S4254C12v7Ev();
extern void _ZN7S4254C12v8Ev();
extern void _ZN7S4254C12v9Ev();
extern void _ZN7S4254C13v10Ev();
extern void _ZN7S4254C13v11Ev();
extern void _ZN7S4254C13v12Ev();
extern void _ZN7S4254C13v13Ev();
static  VTBL_ENTRY vtc_S4254C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4254C1[0]),
  (VTBL_ENTRY)&_ZN7S4254C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4254C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4254C33v14Ev,
  (VTBL_ENTRY)&_ZN7S4254C33v15Ev,
  (VTBL_ENTRY)&_ZN7S4254C33v16Ev,
  (VTBL_ENTRY)&_ZN7S4254C33v17Ev,
  (VTBL_ENTRY)&_ZN7S4254C33v18Ev,
  (VTBL_ENTRY)&_ZN7S4254C33v19Ev,
  (VTBL_ENTRY)&_ZN7S4254C33v20Ev,
  (VTBL_ENTRY)&_ZN7S4254C33v21Ev,
  (VTBL_ENTRY)&_ZN7S4254C33v22Ev,
  (VTBL_ENTRY)&_ZN7S4254C33v23Ev,
  (VTBL_ENTRY)&_ZN7S4254C33v24Ev,
  (VTBL_ENTRY)&_ZN7S4254C33v25Ev,
  (VTBL_ENTRY)&_ZN7S4254C23v26Ev,
  (VTBL_ENTRY)&_ZN7S4254C23v27Ev,
  (VTBL_ENTRY)&_ZN7S4254C23v28Ev,
  (VTBL_ENTRY)&_ZN7S4254C23v29Ev,
  (VTBL_ENTRY)&_ZN7S4254C12v1Ev,
  (VTBL_ENTRY)&_ZN7S4254C12v2Ev,
  (VTBL_ENTRY)&_ZN7S4254C12v3Ev,
  (VTBL_ENTRY)&_ZN7S4254C12v4Ev,
  (VTBL_ENTRY)&_ZN7S4254C12v5Ev,
  (VTBL_ENTRY)&_ZN7S4254C12v6Ev,
  (VTBL_ENTRY)&_ZN7S4254C12v7Ev,
  (VTBL_ENTRY)&_ZN7S4254C12v8Ev,
  (VTBL_ENTRY)&_ZN7S4254C12v9Ev,
  (VTBL_ENTRY)&_ZN7S4254C13v10Ev,
  (VTBL_ENTRY)&_ZN7S4254C13v11Ev,
  (VTBL_ENTRY)&_ZN7S4254C13v12Ev,
  (VTBL_ENTRY)&_ZN7S4254C13v13Ev,
};
extern VTBL_ENTRY _ZTI7S4254C1[];
extern  VTBL_ENTRY _ZTV7S4254C1[];
Class_Descriptor cd_S4254C1 = {  "S4254C1", // class name
  bases_S4254C1, 2,
  &(vtc_S4254C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(1072,1060), // object size
  NSPAIRA(_ZTI7S4254C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4254C1),33, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3564C5  {
  short s3564c5f0:13;
  void *s3564c5f1;
  long double s3564c5f2[8];
  virtual void  v5(); // _ZN7S3564C52v5Ev
  virtual void  v6(); // _ZN7S3564C52v6Ev
  virtual void  v7(); // _ZN7S3564C52v7Ev
  virtual void  v8(); // _ZN7S3564C52v8Ev
  ~S3564C5(); // tgen
  S3564C5(); // tgen
};
//SIG(-1 S3564C5) C1{ v1 v2 v3 v4 Fs:13 Fp FD[8]}


void  S3564C5 ::v5(){vfunc_called(this, "_ZN7S3564C52v5Ev");}
void  S3564C5 ::v6(){vfunc_called(this, "_ZN7S3564C52v6Ev");}
void  S3564C5 ::v7(){vfunc_called(this, "_ZN7S3564C52v7Ev");}
void  S3564C5 ::v8(){vfunc_called(this, "_ZN7S3564C52v8Ev");}
S3564C5 ::~S3564C5(){ note_dtor("S3564C5", this);} // tgen
S3564C5 ::S3564C5(){ note_ctor("S3564C5", this);} // tgen

static void Test_S3564C5()
{
  extern Class_Descriptor cd_S3564C5;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(11,28)];
    init_test(&cd_S3564C5, buf);
    S3564C5 *dp, &lv = *(dp=new (buf) S3564C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(160,108), "sizeof(S3564C5)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3564C5)");
    set_bf_and_test(lv, s3564c5f0, ABISELECT(8,4), 0, 13, 1, "S3564C5");
    set_bf_and_test(lv, s3564c5f0, ABISELECT(8,4), 0, 13, hide_sll(1LL<<12), "S3564C5");
    check_field_offset(lv, s3564c5f1, ABISELECT(16,8), "S3564C5.s3564c5f1");
    check_field_offset(lv, s3564c5f2, ABISELECT(32,12), "S3564C5.s3564c5f2");
    test_class_info(&lv, &cd_S3564C5);
    dp->~S3564C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3564C5(Test_S3564C5, "S3564C5", ABISELECT(160,108));

#else // __cplusplus

extern void _ZN7S3564C5C1Ev();
extern void _ZN7S3564C5D1Ev();
Name_Map name_map_S3564C5[] = {
  NSPAIR(_ZN7S3564C5C1Ev),
  NSPAIR(_ZN7S3564C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S3564C5[];
extern void _ZN7S3564C52v5Ev();
extern void _ZN7S3564C52v6Ev();
extern void _ZN7S3564C52v7Ev();
extern void _ZN7S3564C52v8Ev();
static  VTBL_ENTRY vtc_S3564C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3564C5[0]),
  (VTBL_ENTRY)&_ZN7S3564C52v5Ev,
  (VTBL_ENTRY)&_ZN7S3564C52v6Ev,
  (VTBL_ENTRY)&_ZN7S3564C52v7Ev,
  (VTBL_ENTRY)&_ZN7S3564C52v8Ev,
};
extern VTBL_ENTRY _ZTI7S3564C5[];
extern  VTBL_ENTRY _ZTV7S3564C5[];
Class_Descriptor cd_S3564C5 = {  "S3564C5", // class name
  0,0,//no base classes
  &(vtc_S3564C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(160,108), // object size
  NSPAIRA(_ZTI7S3564C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S3564C5),6, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3564C6  : S3564C5 {
  void *s3564c6f0[6];
  virtual void  v9(); // _ZN7S3564C62v9Ev
  virtual void  v10(); // _ZN7S3564C63v10Ev
  virtual void  v11(); // _ZN7S3564C63v11Ev
  ~S3564C6(); // tgen
  S3564C6(); // tgen
};
//SIG(-1 S3564C6) C1{ BC2{ v4 v5 v6 v7 Fs:13 Fp FD[8]} v1 v2 v3 Fp[6]}


void  S3564C6 ::v9(){vfunc_called(this, "_ZN7S3564C62v9Ev");}
void  S3564C6 ::v10(){vfunc_called(this, "_ZN7S3564C63v10Ev");}
void  S3564C6 ::v11(){vfunc_called(this, "_ZN7S3564C63v11Ev");}
S3564C6 ::~S3564C6(){ note_dtor("S3564C6", this);} // tgen
S3564C6 ::S3564C6(){ note_ctor("S3564C6", this);} // tgen

static void Test_S3564C6()
{
  extern Class_Descriptor cd_S3564C6;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(14,34)];
    init_test(&cd_S3564C6, buf);
    S3564C6 *dp, &lv = *(dp=new (buf) S3564C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(208,132), "sizeof(S3564C6)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3564C6)");
    check_base_class_offset(lv, (S3564C5*), 0, "S3564C6");
    check_field_offset(lv, s3564c6f0, ABISELECT(160,108), "S3564C6.s3564c6f0");
    test_class_info(&lv, &cd_S3564C6);
    dp->~S3564C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3564C6(Test_S3564C6, "S3564C6", ABISELECT(208,132));

#else // __cplusplus

extern void _ZN7S3564C6C1Ev();
extern void _ZN7S3564C6D1Ev();
Name_Map name_map_S3564C6[] = {
  NSPAIR(_ZN7S3564C6C1Ev),
  NSPAIR(_ZN7S3564C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3564C5;
extern VTBL_ENTRY _ZTI7S3564C5[];
extern  VTBL_ENTRY _ZTV7S3564C5[];
static Base_Class bases_S3564C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3564C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3564C6[];
extern void _ZN7S3564C52v5Ev();
extern void _ZN7S3564C52v6Ev();
extern void _ZN7S3564C52v7Ev();
extern void _ZN7S3564C52v8Ev();
extern void _ZN7S3564C62v9Ev();
extern void _ZN7S3564C63v10Ev();
extern void _ZN7S3564C63v11Ev();
static  VTBL_ENTRY vtc_S3564C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3564C6[0]),
  (VTBL_ENTRY)&_ZN7S3564C52v5Ev,
  (VTBL_ENTRY)&_ZN7S3564C52v6Ev,
  (VTBL_ENTRY)&_ZN7S3564C52v7Ev,
  (VTBL_ENTRY)&_ZN7S3564C52v8Ev,
  (VTBL_ENTRY)&_ZN7S3564C62v9Ev,
  (VTBL_ENTRY)&_ZN7S3564C63v10Ev,
  (VTBL_ENTRY)&_ZN7S3564C63v11Ev,
};
extern VTBL_ENTRY _ZTI7S3564C6[];
extern  VTBL_ENTRY _ZTV7S3564C6[];
Class_Descriptor cd_S3564C6 = {  "S3564C6", // class name
  bases_S3564C6, 1,
  &(vtc_S3564C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(208,132), // object size
  NSPAIRA(_ZTI7S3564C6),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3564C6),9, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3564C4  : virtual S3564C5 , S3564C6 {
  void *s3564c4f0;
  virtual void  v12(); // _ZN7S3564C43v12Ev
  virtual void  v13(); // _ZN7S3564C43v13Ev
  virtual void  v14(); // _ZN7S3564C43v14Ev
  virtual void  v15(); // _ZN7S3564C43v15Ev
  ~S3564C4(); // tgen
  S3564C4(); // tgen
};
//SIG(-1 S3564C4) C1{ VBC2{ v5 v6 v7 v8 Fs:13 Fp FD[8]} BC3{ BC2 v9 v10 v11 Fp[6]} v1 v2 v3 v4 Fp}


void  S3564C4 ::v12(){vfunc_called(this, "_ZN7S3564C43v12Ev");}
void  S3564C4 ::v13(){vfunc_called(this, "_ZN7S3564C43v13Ev");}
void  S3564C4 ::v14(){vfunc_called(this, "_ZN7S3564C43v14Ev");}
void  S3564C4 ::v15(){vfunc_called(this, "_ZN7S3564C43v15Ev");}
S3564C4 ::~S3564C4(){ note_dtor("S3564C4", this);} // tgen
S3564C4 ::S3564C4(){ note_ctor("S3564C4", this);} // tgen

static void Test_S3564C4()
{
  extern Class_Descriptor cd_S3564C4;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(25,62)];
    init_test(&cd_S3564C4, buf);
    S3564C4 *dp, &lv = *(dp=new (buf) S3564C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(384,244), "sizeof(S3564C4)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3564C4)");
    /*is_ambiguous_... S3564C4::S3564C5 */ AMB_check_base_class_offset(lv, (S3564C5*), ABISELECT(224,136), "S3564C4");
    check_base_class_offset(lv, (S3564C5*)(S3564C6*), 0, "S3564C4");
    check_base_class_offset(lv, (S3564C6*), 0, "S3564C4");
    check_field_offset(lv, s3564c4f0, ABISELECT(208,132), "S3564C4.s3564c4f0");
    test_class_info(&lv, &cd_S3564C4);
    dp->~S3564C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3564C4(Test_S3564C4, "S3564C4", ABISELECT(384,244));

#else // __cplusplus

extern void _ZN7S3564C4C1Ev();
extern void _ZN7S3564C4D1Ev();
Name_Map name_map_S3564C4[] = {
  NSPAIR(_ZN7S3564C4C1Ev),
  NSPAIR(_ZN7S3564C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3564C5;
extern VTBL_ENTRY _ZTI7S3564C5[];
extern  VTBL_ENTRY _ZTV7S3564C5[];
extern Class_Descriptor cd_S3564C5;
extern VTBL_ENTRY _ZTI7S3564C5[];
extern  VTBL_ENTRY _ZTV7S3564C5[];
extern Class_Descriptor cd_S3564C6;
extern VTBL_ENTRY _ZTI7S3564C6[];
extern  VTBL_ENTRY _ZTV7S3564C6[];
static Base_Class bases_S3564C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3564C5,    ABISELECT(224,136), //bcp->offset
    14, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3564C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S3564C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3564C4[];
extern void _ZN7S3564C52v5Ev();
extern void _ZN7S3564C52v6Ev();
extern void _ZN7S3564C52v7Ev();
extern void _ZN7S3564C52v8Ev();
extern void _ZN7S3564C62v9Ev();
extern void _ZN7S3564C63v10Ev();
extern void _ZN7S3564C63v11Ev();
extern void _ZN7S3564C43v12Ev();
extern void _ZN7S3564C43v13Ev();
extern void _ZN7S3564C43v14Ev();
extern void _ZN7S3564C43v15Ev();
extern void _ZN7S3564C52v5Ev();
extern void _ZN7S3564C52v6Ev();
extern void _ZN7S3564C52v7Ev();
extern void _ZN7S3564C52v8Ev();
static  VTBL_ENTRY vtc_S3564C4[] = {
  ABISELECT(224,136),
  0,
  (VTBL_ENTRY)&(_ZTI7S3564C4[0]),
  (VTBL_ENTRY)&_ZN7S3564C52v5Ev,
  (VTBL_ENTRY)&_ZN7S3564C52v6Ev,
  (VTBL_ENTRY)&_ZN7S3564C52v7Ev,
  (VTBL_ENTRY)&_ZN7S3564C52v8Ev,
  (VTBL_ENTRY)&_ZN7S3564C62v9Ev,
  (VTBL_ENTRY)&_ZN7S3564C63v10Ev,
  (VTBL_ENTRY)&_ZN7S3564C63v11Ev,
  (VTBL_ENTRY)&_ZN7S3564C43v12Ev,
  (VTBL_ENTRY)&_ZN7S3564C43v13Ev,
  (VTBL_ENTRY)&_ZN7S3564C43v14Ev,
  (VTBL_ENTRY)&_ZN7S3564C43v15Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-224,-136),
  (VTBL_ENTRY)&(_ZTI7S3564C4[0]),
  (VTBL_ENTRY)&_ZN7S3564C52v5Ev,
  (VTBL_ENTRY)&_ZN7S3564C52v6Ev,
  (VTBL_ENTRY)&_ZN7S3564C52v7Ev,
  (VTBL_ENTRY)&_ZN7S3564C52v8Ev,
};
extern VTBL_ENTRY _ZTV7S3564C4[];
static  VTT_ENTRY vtt_S3564C4[] = {
  {&(_ZTV7S3564C4[3]),  3,24},
  {&(_ZTV7S3564C4[20]),  20,24},
};
extern VTBL_ENTRY _ZTI7S3564C4[];
extern  VTBL_ENTRY _ZTV7S3564C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3564C4[];
Class_Descriptor cd_S3564C4 = {  "S3564C4", // class name
  bases_S3564C4, 3,
  &(vtc_S3564C4[0]), // expected_vtbl_contents
  &(vtt_S3564C4[0]), // expected_vtt_contents
  ABISELECT(384,244), // object size
  NSPAIRA(_ZTI7S3564C4),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S3564C4),24, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3564C4),2, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3564C3  : virtual S3564C4 {
  virtual  ~S3564C3(); // _ZN7S3564C3D2Ev
  virtual void  v16(); // _ZN7S3564C33v16Ev
  virtual void  v17(); // _ZN7S3564C33v17Ev
  virtual void  v18(); // _ZN7S3564C33v18Ev
  virtual void  v19(); // _ZN7S3564C33v19Ev
  S3564C3(); // tgen
};
//SIG(-1 S3564C3) C1{ VBC2{ VBC3{ v5 v6 v7 v8 Fs:13 Fp FD[8]} BC4{ BC3 v9 v10 v11 Fp[6]} v12 v13 v14 v15 Fp} vd v1 v2 v3 v4}


 S3564C3 ::~S3564C3(){ note_dtor("S3564C3", this);}
void  S3564C3 ::v16(){vfunc_called(this, "_ZN7S3564C33v16Ev");}
void  S3564C3 ::v17(){vfunc_called(this, "_ZN7S3564C33v17Ev");}
void  S3564C3 ::v18(){vfunc_called(this, "_ZN7S3564C33v18Ev");}
void  S3564C3 ::v19(){vfunc_called(this, "_ZN7S3564C33v19Ev");}
S3564C3 ::S3564C3(){ note_ctor("S3564C3", this);} // tgen

static void Test_S3564C3()
{
  extern Class_Descriptor cd_S3564C3;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(26,63)];
    init_test(&cd_S3564C3, buf);
    S3564C3 *dp, &lv = *(dp=new (buf) S3564C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(400,248), "sizeof(S3564C3)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3564C3)");
    /*is_ambiguous_... S3564C4::S3564C5 */ AMB_check_base_class_offset(lv, (S3564C5*)(S3564C4*), ABISELECT(240,140), "S3564C3");
    check_base_class_offset(lv, (S3564C5*)(S3564C6*)(S3564C4*), ABISELECT(16,4), "S3564C3");
    check_base_class_offset(lv, (S3564C6*)(S3564C4*), ABISELECT(16,4), "S3564C3");
    check_base_class_offset(lv, (S3564C4*), ABISELECT(16,4), "S3564C3");
    test_class_info(&lv, &cd_S3564C3);
    dp->~S3564C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3564C3(Test_S3564C3, "S3564C3", ABISELECT(400,248));

#else // __cplusplus

extern void _ZN7S3564C3C1Ev();
extern void _ZN7S3564C3D2Ev();
Name_Map name_map_S3564C3[] = {
  NSPAIR(_ZN7S3564C3C1Ev),
  NSPAIR(_ZN7S3564C3D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S3564C5;
extern VTBL_ENTRY _ZTI7S3564C5[];
extern  VTBL_ENTRY _ZTV7S3564C5[];
extern Class_Descriptor cd_S3564C5;
extern VTBL_ENTRY _ZTI7S3564C5[];
extern  VTBL_ENTRY _ZTV7S3564C5[];
extern Class_Descriptor cd_S3564C6;
extern VTBL_ENTRY _ZTI7S3564C6[];
extern  VTBL_ENTRY _ZTV7S3564C6[];
extern Class_Descriptor cd_S3564C4;
extern VTBL_ENTRY _ZTI7S3564C4[];
extern  VTBL_ENTRY _ZTV7S3564C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3564C4[];
static Base_Class bases_S3564C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3564C5,    ABISELECT(240,140), //bcp->offset
    35, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S3564C5,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S3564C6,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S3564C4,    ABISELECT(16,4), //bcp->offset
    10, //bcp->virtual_function_table_offset
    14, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S3564C3[];
extern void _ZN7S3564C3D1Ev();
extern void _ZN7S3564C3D0Ev();
extern void _ZN7S3564C33v16Ev();
extern void _ZN7S3564C33v17Ev();
extern void _ZN7S3564C33v18Ev();
extern void _ZN7S3564C33v19Ev();
extern void _ZN7S3564C52v5Ev();
extern void _ZN7S3564C52v6Ev();
extern void _ZN7S3564C52v7Ev();
extern void _ZN7S3564C52v8Ev();
extern void _ZN7S3564C62v9Ev();
extern void _ZN7S3564C63v10Ev();
extern void _ZN7S3564C63v11Ev();
extern void _ZN7S3564C43v12Ev();
extern void _ZN7S3564C43v13Ev();
extern void _ZN7S3564C43v14Ev();
extern void _ZN7S3564C43v15Ev();
extern void _ZN7S3564C52v5Ev();
extern void _ZN7S3564C52v6Ev();
extern void _ZN7S3564C52v7Ev();
extern void _ZN7S3564C52v8Ev();
static  VTBL_ENTRY vtc_S3564C3[] = {
  ABISELECT(240,140),
  ABISELECT(16,4),
  0,
  (VTBL_ENTRY)&(_ZTI7S3564C3[0]),
  (VTBL_ENTRY)&_ZN7S3564C3D1Ev,
  (VTBL_ENTRY)&_ZN7S3564C3D0Ev,
  (VTBL_ENTRY)&_ZN7S3564C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3564C33v17Ev,
  (VTBL_ENTRY)&_ZN7S3564C33v18Ev,
  (VTBL_ENTRY)&_ZN7S3564C33v19Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(224,136),
  ABISELECT(-16,-4),
  (VTBL_ENTRY)&(_ZTI7S3564C3[0]),
  (VTBL_ENTRY)&_ZN7S3564C52v5Ev,
  (VTBL_ENTRY)&_ZN7S3564C52v6Ev,
  (VTBL_ENTRY)&_ZN7S3564C52v7Ev,
  (VTBL_ENTRY)&_ZN7S3564C52v8Ev,
  (VTBL_ENTRY)&_ZN7S3564C62v9Ev,
  (VTBL_ENTRY)&_ZN7S3564C63v10Ev,
  (VTBL_ENTRY)&_ZN7S3564C63v11Ev,
  (VTBL_ENTRY)&_ZN7S3564C43v12Ev,
  (VTBL_ENTRY)&_ZN7S3564C43v13Ev,
  (VTBL_ENTRY)&_ZN7S3564C43v14Ev,
  (VTBL_ENTRY)&_ZN7S3564C43v15Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-240,-140),
  (VTBL_ENTRY)&(_ZTI7S3564C3[0]),
  (VTBL_ENTRY)&_ZN7S3564C52v5Ev,
  (VTBL_ENTRY)&_ZN7S3564C52v6Ev,
  (VTBL_ENTRY)&_ZN7S3564C52v7Ev,
  (VTBL_ENTRY)&_ZN7S3564C52v8Ev,
};
extern VTBL_ENTRY _ZTV7S3564C3[];
extern void _ZN7S3564C52v5Ev();
extern void _ZN7S3564C52v6Ev();
extern void _ZN7S3564C52v7Ev();
extern void _ZN7S3564C52v8Ev();
extern void _ZN7S3564C62v9Ev();
extern void _ZN7S3564C63v10Ev();
extern void _ZN7S3564C63v11Ev();
extern void _ZN7S3564C43v12Ev();
extern void _ZN7S3564C43v13Ev();
extern void _ZN7S3564C43v14Ev();
extern void _ZN7S3564C43v15Ev();
static  VTBL_ENTRY _tg__ZTV7S3564C4__7S3564C3[] = {
  ABISELECT(224,136),
  0,
  (VTBL_ENTRY)&(_ZTI7S3564C4[0]),
  (VTBL_ENTRY)&_ZN7S3564C52v5Ev,
  (VTBL_ENTRY)&_ZN7S3564C52v6Ev,
  (VTBL_ENTRY)&_ZN7S3564C52v7Ev,
  (VTBL_ENTRY)&_ZN7S3564C52v8Ev,
  (VTBL_ENTRY)&_ZN7S3564C62v9Ev,
  (VTBL_ENTRY)&_ZN7S3564C63v10Ev,
  (VTBL_ENTRY)&_ZN7S3564C63v11Ev,
  (VTBL_ENTRY)&_ZN7S3564C43v12Ev,
  (VTBL_ENTRY)&_ZN7S3564C43v13Ev,
  (VTBL_ENTRY)&_ZN7S3564C43v14Ev,
  (VTBL_ENTRY)&_ZN7S3564C43v15Ev,
};
extern void _ZN7S3564C52v5Ev();
extern void _ZN7S3564C52v6Ev();
extern void _ZN7S3564C52v7Ev();
extern void _ZN7S3564C52v8Ev();
static  VTBL_ENTRY _tg__ZTV7S3564C5__7S3564C4__7S3564C3[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-224,-136),
  (VTBL_ENTRY)&(_ZTI7S3564C4[0]),
  (VTBL_ENTRY)&_ZN7S3564C52v5Ev,
  (VTBL_ENTRY)&_ZN7S3564C52v6Ev,
  (VTBL_ENTRY)&_ZN7S3564C52v7Ev,
  (VTBL_ENTRY)&_ZN7S3564C52v8Ev,
};
static  VTT_ENTRY vtt_S3564C3[] = {
  {&(_ZTV7S3564C3[4]),  4,45},
  {&(_ZTV7S3564C3[24]),  24,45},
  {&(_ZTV7S3564C3[41]),  41,45},
  {&(_tg__ZTV7S3564C4__7S3564C3[3]),  3,14},
  {&(_tg__ZTV7S3564C5__7S3564C4__7S3564C3[6]),  6,10},
};
extern VTBL_ENTRY _ZTI7S3564C3[];
extern  VTBL_ENTRY _ZTV7S3564C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3564C3[];
Class_Descriptor cd_S3564C3 = {  "S3564C3", // class name
  bases_S3564C3, 4,
  &(vtc_S3564C3[0]), // expected_vtbl_contents
  &(vtt_S3564C3[0]), // expected_vtt_contents
  ABISELECT(400,248), // object size
  NSPAIRA(_ZTI7S3564C3),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S3564C3),45, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3564C3),5, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3564C2  : S3564C3 {
  long double s3564c2f0;
  virtual void  v20(); // _ZN7S3564C23v20Ev
  virtual void  v21(); // _ZN7S3564C23v21Ev
  virtual void  v22(); // _ZN7S3564C23v22Ev
  virtual void  v23(); // _ZN7S3564C23v23Ev
  virtual void  v24(); // _ZN7S3564C23v24Ev
  virtual void  v25(); // _ZN7S3564C23v25Ev
  ~S3564C2(); // tgen
  S3564C2(); // tgen
};
//SIG(-1 S3564C2) C1{ BC2{ VBC3{ VBC4{ v7 v8 v9 v10 Fs:13 Fp FD[8]} BC5{ BC4 v11 v12 v13 Fp[6]} v14 v15 v16 v17 Fp} vd v18 v19 v20 v21} v1 v2 v3 v4 v5 v6 FD}


void  S3564C2 ::v20(){vfunc_called(this, "_ZN7S3564C23v20Ev");}
void  S3564C2 ::v21(){vfunc_called(this, "_ZN7S3564C23v21Ev");}
void  S3564C2 ::v22(){vfunc_called(this, "_ZN7S3564C23v22Ev");}
void  S3564C2 ::v23(){vfunc_called(this, "_ZN7S3564C23v23Ev");}
void  S3564C2 ::v24(){vfunc_called(this, "_ZN7S3564C23v24Ev");}
void  S3564C2 ::v25(){vfunc_called(this, "_ZN7S3564C23v25Ev");}
S3564C2 ::~S3564C2(){ note_dtor("S3564C2", this);} // tgen
S3564C2 ::S3564C2(){ note_ctor("S3564C2", this);} // tgen

static void Test_S3564C2()
{
  extern Class_Descriptor cd_S3564C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(27,66)];
    init_test(&cd_S3564C2, buf);
    S3564C2 *dp, &lv = *(dp=new (buf) S3564C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(416,260), "sizeof(S3564C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3564C2)");
    /*is_ambiguous_... S3564C4::S3564C5 */ AMB_check_base_class_offset(lv, (S3564C5*)(S3564C4*), ABISELECT(256,152), "S3564C2");
    check_base_class_offset(lv, (S3564C5*)(S3564C6*)(S3564C4*), ABISELECT(32,16), "S3564C2");
    check_base_class_offset(lv, (S3564C6*)(S3564C4*), ABISELECT(32,16), "S3564C2");
    check_base_class_offset(lv, (S3564C4*)(S3564C3*), ABISELECT(32,16), "S3564C2");
    check_base_class_offset(lv, (S3564C3*), 0, "S3564C2");
    check_field_offset(lv, s3564c2f0, ABISELECT(16,4), "S3564C2.s3564c2f0");
    test_class_info(&lv, &cd_S3564C2);
    dp->~S3564C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3564C2(Test_S3564C2, "S3564C2", ABISELECT(416,260));

#else // __cplusplus

extern void _ZN7S3564C2C1Ev();
extern void _ZN7S3564C2D1Ev();
Name_Map name_map_S3564C2[] = {
  NSPAIR(_ZN7S3564C2C1Ev),
  NSPAIR(_ZN7S3564C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3564C5;
extern VTBL_ENTRY _ZTI7S3564C5[];
extern  VTBL_ENTRY _ZTV7S3564C5[];
extern Class_Descriptor cd_S3564C5;
extern VTBL_ENTRY _ZTI7S3564C5[];
extern  VTBL_ENTRY _ZTV7S3564C5[];
extern Class_Descriptor cd_S3564C6;
extern VTBL_ENTRY _ZTI7S3564C6[];
extern  VTBL_ENTRY _ZTV7S3564C6[];
extern Class_Descriptor cd_S3564C4;
extern VTBL_ENTRY _ZTI7S3564C4[];
extern  VTBL_ENTRY _ZTV7S3564C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3564C4[];
extern Class_Descriptor cd_S3564C3;
extern VTBL_ENTRY _ZTI7S3564C3[];
extern  VTBL_ENTRY _ZTV7S3564C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3564C3[];
static Base_Class bases_S3564C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3564C5,    ABISELECT(256,152), //bcp->offset
    41, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S3564C5,    ABISELECT(32,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S3564C6,    ABISELECT(32,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S3564C4,    ABISELECT(32,16), //bcp->offset
    16, //bcp->virtual_function_table_offset
    14, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S3564C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3564C2[];
extern void _ZN7S3564C2D1Ev();
extern void _ZN7S3564C2D0Ev();
extern void _ZN7S3564C33v16Ev();
extern void _ZN7S3564C33v17Ev();
extern void _ZN7S3564C33v18Ev();
extern void _ZN7S3564C33v19Ev();
extern void _ZN7S3564C23v20Ev();
extern void _ZN7S3564C23v21Ev();
extern void _ZN7S3564C23v22Ev();
extern void _ZN7S3564C23v23Ev();
extern void _ZN7S3564C23v24Ev();
extern void _ZN7S3564C23v25Ev();
extern void _ZN7S3564C52v5Ev();
extern void _ZN7S3564C52v6Ev();
extern void _ZN7S3564C52v7Ev();
extern void _ZN7S3564C52v8Ev();
extern void _ZN7S3564C62v9Ev();
extern void _ZN7S3564C63v10Ev();
extern void _ZN7S3564C63v11Ev();
extern void _ZN7S3564C43v12Ev();
extern void _ZN7S3564C43v13Ev();
extern void _ZN7S3564C43v14Ev();
extern void _ZN7S3564C43v15Ev();
extern void _ZN7S3564C52v5Ev();
extern void _ZN7S3564C52v6Ev();
extern void _ZN7S3564C52v7Ev();
extern void _ZN7S3564C52v8Ev();
static  VTBL_ENTRY vtc_S3564C2[] = {
  ABISELECT(256,152),
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI7S3564C2[0]),
  (VTBL_ENTRY)&_ZN7S3564C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3564C2D0Ev,
  (VTBL_ENTRY)&_ZN7S3564C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3564C33v17Ev,
  (VTBL_ENTRY)&_ZN7S3564C33v18Ev,
  (VTBL_ENTRY)&_ZN7S3564C33v19Ev,
  (VTBL_ENTRY)&_ZN7S3564C23v20Ev,
  (VTBL_ENTRY)&_ZN7S3564C23v21Ev,
  (VTBL_ENTRY)&_ZN7S3564C23v22Ev,
  (VTBL_ENTRY)&_ZN7S3564C23v23Ev,
  (VTBL_ENTRY)&_ZN7S3564C23v24Ev,
  (VTBL_ENTRY)&_ZN7S3564C23v25Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(224,136),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI7S3564C2[0]),
  (VTBL_ENTRY)&_ZN7S3564C52v5Ev,
  (VTBL_ENTRY)&_ZN7S3564C52v6Ev,
  (VTBL_ENTRY)&_ZN7S3564C52v7Ev,
  (VTBL_ENTRY)&_ZN7S3564C52v8Ev,
  (VTBL_ENTRY)&_ZN7S3564C62v9Ev,
  (VTBL_ENTRY)&_ZN7S3564C63v10Ev,
  (VTBL_ENTRY)&_ZN7S3564C63v11Ev,
  (VTBL_ENTRY)&_ZN7S3564C43v12Ev,
  (VTBL_ENTRY)&_ZN7S3564C43v13Ev,
  (VTBL_ENTRY)&_ZN7S3564C43v14Ev,
  (VTBL_ENTRY)&_ZN7S3564C43v15Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-256,-152),
  (VTBL_ENTRY)&(_ZTI7S3564C2[0]),
  (VTBL_ENTRY)&_ZN7S3564C52v5Ev,
  (VTBL_ENTRY)&_ZN7S3564C52v6Ev,
  (VTBL_ENTRY)&_ZN7S3564C52v7Ev,
  (VTBL_ENTRY)&_ZN7S3564C52v8Ev,
};
extern VTBL_ENTRY _ZTV7S3564C2[];
extern void _ZN7S3564C3D1Ev();
extern void _ZN7S3564C3D0Ev();
extern void _ZN7S3564C33v16Ev();
extern void _ZN7S3564C33v17Ev();
extern void _ZN7S3564C33v18Ev();
extern void _ZN7S3564C33v19Ev();
static  VTBL_ENTRY _tg__ZTV7S3564C3__7S3564C2[] = {
  ABISELECT(256,152),
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI7S3564C3[0]),
  (VTBL_ENTRY)&_ZN7S3564C3D1Ev,
  (VTBL_ENTRY)&_ZN7S3564C3D0Ev,
  (VTBL_ENTRY)&_ZN7S3564C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3564C33v17Ev,
  (VTBL_ENTRY)&_ZN7S3564C33v18Ev,
  (VTBL_ENTRY)&_ZN7S3564C33v19Ev,
};
extern void _ZN7S3564C52v5Ev();
extern void _ZN7S3564C52v6Ev();
extern void _ZN7S3564C52v7Ev();
extern void _ZN7S3564C52v8Ev();
extern void _ZN7S3564C62v9Ev();
extern void _ZN7S3564C63v10Ev();
extern void _ZN7S3564C63v11Ev();
extern void _ZN7S3564C43v12Ev();
extern void _ZN7S3564C43v13Ev();
extern void _ZN7S3564C43v14Ev();
extern void _ZN7S3564C43v15Ev();
static  VTBL_ENTRY _tg__ZTV7S3564C4__7S3564C3__7S3564C2[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(224,136),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI7S3564C3[0]),
  (VTBL_ENTRY)&_ZN7S3564C52v5Ev,
  (VTBL_ENTRY)&_ZN7S3564C52v6Ev,
  (VTBL_ENTRY)&_ZN7S3564C52v7Ev,
  (VTBL_ENTRY)&_ZN7S3564C52v8Ev,
  (VTBL_ENTRY)&_ZN7S3564C62v9Ev,
  (VTBL_ENTRY)&_ZN7S3564C63v10Ev,
  (VTBL_ENTRY)&_ZN7S3564C63v11Ev,
  (VTBL_ENTRY)&_ZN7S3564C43v12Ev,
  (VTBL_ENTRY)&_ZN7S3564C43v13Ev,
  (VTBL_ENTRY)&_ZN7S3564C43v14Ev,
  (VTBL_ENTRY)&_ZN7S3564C43v15Ev,
};
extern void _ZN7S3564C52v5Ev();
extern void _ZN7S3564C52v6Ev();
extern void _ZN7S3564C52v7Ev();
extern void _ZN7S3564C52v8Ev();
static  VTBL_ENTRY _tg__ZTV7S3564C5__7S3564C3__7S3564C2[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-256,-152),
  (VTBL_ENTRY)&(_ZTI7S3564C3[0]),
  (VTBL_ENTRY)&_ZN7S3564C52v5Ev,
  (VTBL_ENTRY)&_ZN7S3564C52v6Ev,
  (VTBL_ENTRY)&_ZN7S3564C52v7Ev,
  (VTBL_ENTRY)&_ZN7S3564C52v8Ev,
};
extern void _ZN7S3564C52v5Ev();
extern void _ZN7S3564C52v6Ev();
extern void _ZN7S3564C52v7Ev();
extern void _ZN7S3564C52v8Ev();
extern void _ZN7S3564C62v9Ev();
extern void _ZN7S3564C63v10Ev();
extern void _ZN7S3564C63v11Ev();
extern void _ZN7S3564C43v12Ev();
extern void _ZN7S3564C43v13Ev();
extern void _ZN7S3564C43v14Ev();
extern void _ZN7S3564C43v15Ev();
static  VTBL_ENTRY _tg__ZTV7S3564C4__7S3564C2[] = {
  ABISELECT(224,136),
  0,
  (VTBL_ENTRY)&(_ZTI7S3564C4[0]),
  (VTBL_ENTRY)&_ZN7S3564C52v5Ev,
  (VTBL_ENTRY)&_ZN7S3564C52v6Ev,
  (VTBL_ENTRY)&_ZN7S3564C52v7Ev,
  (VTBL_ENTRY)&_ZN7S3564C52v8Ev,
  (VTBL_ENTRY)&_ZN7S3564C62v9Ev,
  (VTBL_ENTRY)&_ZN7S3564C63v10Ev,
  (VTBL_ENTRY)&_ZN7S3564C63v11Ev,
  (VTBL_ENTRY)&_ZN7S3564C43v12Ev,
  (VTBL_ENTRY)&_ZN7S3564C43v13Ev,
  (VTBL_ENTRY)&_ZN7S3564C43v14Ev,
  (VTBL_ENTRY)&_ZN7S3564C43v15Ev,
};
extern void _ZN7S3564C52v5Ev();
extern void _ZN7S3564C52v6Ev();
extern void _ZN7S3564C52v7Ev();
extern void _ZN7S3564C52v8Ev();
static  VTBL_ENTRY _tg__ZTV7S3564C5__7S3564C4__7S3564C2[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-224,-136),
  (VTBL_ENTRY)&(_ZTI7S3564C4[0]),
  (VTBL_ENTRY)&_ZN7S3564C52v5Ev,
  (VTBL_ENTRY)&_ZN7S3564C52v6Ev,
  (VTBL_ENTRY)&_ZN7S3564C52v7Ev,
  (VTBL_ENTRY)&_ZN7S3564C52v8Ev,
};
static  VTT_ENTRY vtt_S3564C2[] = {
  {&(_ZTV7S3564C2[4]),  4,51},
  {&(_tg__ZTV7S3564C3__7S3564C2[4]),  4,10},
  {&(_tg__ZTV7S3564C4__7S3564C3__7S3564C2[14]),  14,25},
  {&(_tg__ZTV7S3564C5__7S3564C3__7S3564C2[6]),  6,10},
  {&(_ZTV7S3564C2[30]),  30,51},
  {&(_ZTV7S3564C2[47]),  47,51},
  {&(_tg__ZTV7S3564C4__7S3564C2[3]),  3,14},
  {&(_tg__ZTV7S3564C5__7S3564C4__7S3564C2[6]),  6,10},
};
extern VTBL_ENTRY _ZTI7S3564C2[];
extern  VTBL_ENTRY _ZTV7S3564C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3564C2[];
Class_Descriptor cd_S3564C2 = {  "S3564C2", // class name
  bases_S3564C2, 5,
  &(vtc_S3564C2[0]), // expected_vtbl_contents
  &(vtt_S3564C2[0]), // expected_vtt_contents
  ABISELECT(416,260), // object size
  NSPAIRA(_ZTI7S3564C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3564C2),51, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3564C2),8, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3564C1  : S3564C2 {
  virtual void  v1(); // _ZN7S3564C12v1Ev
  virtual void  v2(); // _ZN7S3564C12v2Ev
  virtual void  v3(); // _ZN7S3564C12v3Ev
  virtual void  v4(); // _ZN7S3564C12v4Ev
  ~S3564C1(); // tgen
  S3564C1(); // tgen
};
//SIG(1 S3564C1) C1{ BC2{ BC3{ VBC4{ VBC5{ v5 v6 v7 v8 Fs:13 Fp FD[8]} BC6{ BC5 v9 v10 v11 Fp[6]} v12 v13 v14 v15 Fp} vd v16 v17 v18 v19} v20 v21 v22 v23 v24 v25 FD} v1 v2 v3 v4}


void  S3564C1 ::v1(){vfunc_called(this, "_ZN7S3564C12v1Ev");}
void  S3564C1 ::v2(){vfunc_called(this, "_ZN7S3564C12v2Ev");}
void  S3564C1 ::v3(){vfunc_called(this, "_ZN7S3564C12v3Ev");}
void  S3564C1 ::v4(){vfunc_called(this, "_ZN7S3564C12v4Ev");}
S3564C1 ::~S3564C1(){ note_dtor("S3564C1", this);} // tgen
S3564C1 ::S3564C1(){ note_ctor("S3564C1", this);} // tgen

static void Test_S3564C1()
{
  extern Class_Descriptor cd_S3564C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(27,66)];
    init_test(&cd_S3564C1, buf);
    S3564C1 *dp, &lv = *(dp=new (buf) S3564C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(416,260), "sizeof(S3564C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3564C1)");
    /*is_ambiguous_... S3564C4::S3564C5 */ AMB_check_base_class_offset(lv, (S3564C5*)(S3564C4*), ABISELECT(256,152), "S3564C1");
    check_base_class_offset(lv, (S3564C5*)(S3564C6*)(S3564C4*), ABISELECT(32,16), "S3564C1");
    check_base_class_offset(lv, (S3564C6*)(S3564C4*), ABISELECT(32,16), "S3564C1");
    check_base_class_offset(lv, (S3564C4*)(S3564C3*)(S3564C2*), ABISELECT(32,16), "S3564C1");
    check_base_class_offset(lv, (S3564C3*)(S3564C2*), 0, "S3564C1");
    check_base_class_offset(lv, (S3564C2*), 0, "S3564C1");
    test_class_info(&lv, &cd_S3564C1);
    dp->~S3564C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3564C1(Test_S3564C1, "S3564C1", ABISELECT(416,260));

#else // __cplusplus

extern void _ZN7S3564C1C1Ev();
extern void _ZN7S3564C1D1Ev();
Name_Map name_map_S3564C1[] = {
  NSPAIR(_ZN7S3564C1C1Ev),
  NSPAIR(_ZN7S3564C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3564C5;
extern VTBL_ENTRY _ZTI7S3564C5[];
extern  VTBL_ENTRY _ZTV7S3564C5[];
extern Class_Descriptor cd_S3564C5;
extern VTBL_ENTRY _ZTI7S3564C5[];
extern  VTBL_ENTRY _ZTV7S3564C5[];
extern Class_Descriptor cd_S3564C6;
extern VTBL_ENTRY _ZTI7S3564C6[];
extern  VTBL_ENTRY _ZTV7S3564C6[];
extern Class_Descriptor cd_S3564C4;
extern VTBL_ENTRY _ZTI7S3564C4[];
extern  VTBL_ENTRY _ZTV7S3564C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3564C4[];
extern Class_Descriptor cd_S3564C3;
extern VTBL_ENTRY _ZTI7S3564C3[];
extern  VTBL_ENTRY _ZTV7S3564C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3564C3[];
extern Class_Descriptor cd_S3564C2;
extern VTBL_ENTRY _ZTI7S3564C2[];
extern  VTBL_ENTRY _ZTV7S3564C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3564C2[];
static Base_Class bases_S3564C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3564C5,    ABISELECT(256,152), //bcp->offset
    45, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S3564C5,    ABISELECT(32,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S3564C6,    ABISELECT(32,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S3564C4,    ABISELECT(32,16), //bcp->offset
    20, //bcp->virtual_function_table_offset
    14, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S3564C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S3564C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3564C1[];
extern void _ZN7S3564C1D1Ev();
extern void _ZN7S3564C1D0Ev();
extern void _ZN7S3564C33v16Ev();
extern void _ZN7S3564C33v17Ev();
extern void _ZN7S3564C33v18Ev();
extern void _ZN7S3564C33v19Ev();
extern void _ZN7S3564C23v20Ev();
extern void _ZN7S3564C23v21Ev();
extern void _ZN7S3564C23v22Ev();
extern void _ZN7S3564C23v23Ev();
extern void _ZN7S3564C23v24Ev();
extern void _ZN7S3564C23v25Ev();
extern void _ZN7S3564C12v1Ev();
extern void _ZN7S3564C12v2Ev();
extern void _ZN7S3564C12v3Ev();
extern void _ZN7S3564C12v4Ev();
extern void _ZN7S3564C52v5Ev();
extern void _ZN7S3564C52v6Ev();
extern void _ZN7S3564C52v7Ev();
extern void _ZN7S3564C52v8Ev();
extern void _ZN7S3564C62v9Ev();
extern void _ZN7S3564C63v10Ev();
extern void _ZN7S3564C63v11Ev();
extern void _ZN7S3564C43v12Ev();
extern void _ZN7S3564C43v13Ev();
extern void _ZN7S3564C43v14Ev();
extern void _ZN7S3564C43v15Ev();
extern void _ZN7S3564C52v5Ev();
extern void _ZN7S3564C52v6Ev();
extern void _ZN7S3564C52v7Ev();
extern void _ZN7S3564C52v8Ev();
static  VTBL_ENTRY vtc_S3564C1[] = {
  ABISELECT(256,152),
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI7S3564C1[0]),
  (VTBL_ENTRY)&_ZN7S3564C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3564C1D0Ev,
  (VTBL_ENTRY)&_ZN7S3564C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3564C33v17Ev,
  (VTBL_ENTRY)&_ZN7S3564C33v18Ev,
  (VTBL_ENTRY)&_ZN7S3564C33v19Ev,
  (VTBL_ENTRY)&_ZN7S3564C23v20Ev,
  (VTBL_ENTRY)&_ZN7S3564C23v21Ev,
  (VTBL_ENTRY)&_ZN7S3564C23v22Ev,
  (VTBL_ENTRY)&_ZN7S3564C23v23Ev,
  (VTBL_ENTRY)&_ZN7S3564C23v24Ev,
  (VTBL_ENTRY)&_ZN7S3564C23v25Ev,
  (VTBL_ENTRY)&_ZN7S3564C12v1Ev,
  (VTBL_ENTRY)&_ZN7S3564C12v2Ev,
  (VTBL_ENTRY)&_ZN7S3564C12v3Ev,
  (VTBL_ENTRY)&_ZN7S3564C12v4Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(224,136),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI7S3564C1[0]),
  (VTBL_ENTRY)&_ZN7S3564C52v5Ev,
  (VTBL_ENTRY)&_ZN7S3564C52v6Ev,
  (VTBL_ENTRY)&_ZN7S3564C52v7Ev,
  (VTBL_ENTRY)&_ZN7S3564C52v8Ev,
  (VTBL_ENTRY)&_ZN7S3564C62v9Ev,
  (VTBL_ENTRY)&_ZN7S3564C63v10Ev,
  (VTBL_ENTRY)&_ZN7S3564C63v11Ev,
  (VTBL_ENTRY)&_ZN7S3564C43v12Ev,
  (VTBL_ENTRY)&_ZN7S3564C43v13Ev,
  (VTBL_ENTRY)&_ZN7S3564C43v14Ev,
  (VTBL_ENTRY)&_ZN7S3564C43v15Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-256,-152),
  (VTBL_ENTRY)&(_ZTI7S3564C1[0]),
  (VTBL_ENTRY)&_ZN7S3564C52v5Ev,
  (VTBL_ENTRY)&_ZN7S3564C52v6Ev,
  (VTBL_ENTRY)&_ZN7S3564C52v7Ev,
  (VTBL_ENTRY)&_ZN7S3564C52v8Ev,
};
extern VTBL_ENTRY _ZTV7S3564C1[];
extern void _ZN7S3564C2D1Ev();
extern void _ZN7S3564C2D0Ev();
extern void _ZN7S3564C33v16Ev();
extern void _ZN7S3564C33v17Ev();
extern void _ZN7S3564C33v18Ev();
extern void _ZN7S3564C33v19Ev();
extern void _ZN7S3564C23v20Ev();
extern void _ZN7S3564C23v21Ev();
extern void _ZN7S3564C23v22Ev();
extern void _ZN7S3564C23v23Ev();
extern void _ZN7S3564C23v24Ev();
extern void _ZN7S3564C23v25Ev();
static  VTBL_ENTRY _tg__ZTV7S3564C2__7S3564C1[] = {
  ABISELECT(256,152),
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI7S3564C2[0]),
  (VTBL_ENTRY)&_ZN7S3564C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3564C2D0Ev,
  (VTBL_ENTRY)&_ZN7S3564C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3564C33v17Ev,
  (VTBL_ENTRY)&_ZN7S3564C33v18Ev,
  (VTBL_ENTRY)&_ZN7S3564C33v19Ev,
  (VTBL_ENTRY)&_ZN7S3564C23v20Ev,
  (VTBL_ENTRY)&_ZN7S3564C23v21Ev,
  (VTBL_ENTRY)&_ZN7S3564C23v22Ev,
  (VTBL_ENTRY)&_ZN7S3564C23v23Ev,
  (VTBL_ENTRY)&_ZN7S3564C23v24Ev,
  (VTBL_ENTRY)&_ZN7S3564C23v25Ev,
};
extern void _ZN7S3564C3D1Ev();
extern void _ZN7S3564C3D0Ev();
extern void _ZN7S3564C33v16Ev();
extern void _ZN7S3564C33v17Ev();
extern void _ZN7S3564C33v18Ev();
extern void _ZN7S3564C33v19Ev();
static  VTBL_ENTRY _tg__ZTV7S3564C37S3564C2__7S3564C1[] = {
  ABISELECT(256,152),
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI7S3564C3[0]),
  (VTBL_ENTRY)&_ZN7S3564C3D1Ev,
  (VTBL_ENTRY)&_ZN7S3564C3D0Ev,
  (VTBL_ENTRY)&_ZN7S3564C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3564C33v17Ev,
  (VTBL_ENTRY)&_ZN7S3564C33v18Ev,
  (VTBL_ENTRY)&_ZN7S3564C33v19Ev,
};
extern void _ZN7S3564C52v5Ev();
extern void _ZN7S3564C52v6Ev();
extern void _ZN7S3564C52v7Ev();
extern void _ZN7S3564C52v8Ev();
extern void _ZN7S3564C62v9Ev();
extern void _ZN7S3564C63v10Ev();
extern void _ZN7S3564C63v11Ev();
extern void _ZN7S3564C43v12Ev();
extern void _ZN7S3564C43v13Ev();
extern void _ZN7S3564C43v14Ev();
extern void _ZN7S3564C43v15Ev();
static  VTBL_ENTRY _tg__ZTV7S3564C4__7S3564C37S3564C2__7S3564C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(224,136),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI7S3564C3[0]),
  (VTBL_ENTRY)&_ZN7S3564C52v5Ev,
  (VTBL_ENTRY)&_ZN7S3564C52v6Ev,
  (VTBL_ENTRY)&_ZN7S3564C52v7Ev,
  (VTBL_ENTRY)&_ZN7S3564C52v8Ev,
  (VTBL_ENTRY)&_ZN7S3564C62v9Ev,
  (VTBL_ENTRY)&_ZN7S3564C63v10Ev,
  (VTBL_ENTRY)&_ZN7S3564C63v11Ev,
  (VTBL_ENTRY)&_ZN7S3564C43v12Ev,
  (VTBL_ENTRY)&_ZN7S3564C43v13Ev,
  (VTBL_ENTRY)&_ZN7S3564C43v14Ev,
  (VTBL_ENTRY)&_ZN7S3564C43v15Ev,
};
extern void _ZN7S3564C52v5Ev();
extern void _ZN7S3564C52v6Ev();
extern void _ZN7S3564C52v7Ev();
extern void _ZN7S3564C52v8Ev();
static  VTBL_ENTRY _tg__ZTV7S3564C5__7S3564C37S3564C2__7S3564C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-256,-152),
  (VTBL_ENTRY)&(_ZTI7S3564C3[0]),
  (VTBL_ENTRY)&_ZN7S3564C52v5Ev,
  (VTBL_ENTRY)&_ZN7S3564C52v6Ev,
  (VTBL_ENTRY)&_ZN7S3564C52v7Ev,
  (VTBL_ENTRY)&_ZN7S3564C52v8Ev,
};
extern void _ZN7S3564C52v5Ev();
extern void _ZN7S3564C52v6Ev();
extern void _ZN7S3564C52v7Ev();
extern void _ZN7S3564C52v8Ev();
extern void _ZN7S3564C62v9Ev();
extern void _ZN7S3564C63v10Ev();
extern void _ZN7S3564C63v11Ev();
extern void _ZN7S3564C43v12Ev();
extern void _ZN7S3564C43v13Ev();
extern void _ZN7S3564C43v14Ev();
extern void _ZN7S3564C43v15Ev();
static  VTBL_ENTRY _tg__ZTV7S3564C4__7S3564C2__7S3564C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(224,136),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI7S3564C2[0]),
  (VTBL_ENTRY)&_ZN7S3564C52v5Ev,
  (VTBL_ENTRY)&_ZN7S3564C52v6Ev,
  (VTBL_ENTRY)&_ZN7S3564C52v7Ev,
  (VTBL_ENTRY)&_ZN7S3564C52v8Ev,
  (VTBL_ENTRY)&_ZN7S3564C62v9Ev,
  (VTBL_ENTRY)&_ZN7S3564C63v10Ev,
  (VTBL_ENTRY)&_ZN7S3564C63v11Ev,
  (VTBL_ENTRY)&_ZN7S3564C43v12Ev,
  (VTBL_ENTRY)&_ZN7S3564C43v13Ev,
  (VTBL_ENTRY)&_ZN7S3564C43v14Ev,
  (VTBL_ENTRY)&_ZN7S3564C43v15Ev,
};
extern void _ZN7S3564C52v5Ev();
extern void _ZN7S3564C52v6Ev();
extern void _ZN7S3564C52v7Ev();
extern void _ZN7S3564C52v8Ev();
static  VTBL_ENTRY _tg__ZTV7S3564C5__7S3564C2__7S3564C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-256,-152),
  (VTBL_ENTRY)&(_ZTI7S3564C2[0]),
  (VTBL_ENTRY)&_ZN7S3564C52v5Ev,
  (VTBL_ENTRY)&_ZN7S3564C52v6Ev,
  (VTBL_ENTRY)&_ZN7S3564C52v7Ev,
  (VTBL_ENTRY)&_ZN7S3564C52v8Ev,
};
extern void _ZN7S3564C52v5Ev();
extern void _ZN7S3564C52v6Ev();
extern void _ZN7S3564C52v7Ev();
extern void _ZN7S3564C52v8Ev();
extern void _ZN7S3564C62v9Ev();
extern void _ZN7S3564C63v10Ev();
extern void _ZN7S3564C63v11Ev();
extern void _ZN7S3564C43v12Ev();
extern void _ZN7S3564C43v13Ev();
extern void _ZN7S3564C43v14Ev();
extern void _ZN7S3564C43v15Ev();
static  VTBL_ENTRY _tg__ZTV7S3564C4__7S3564C1[] = {
  ABISELECT(224,136),
  0,
  (VTBL_ENTRY)&(_ZTI7S3564C4[0]),
  (VTBL_ENTRY)&_ZN7S3564C52v5Ev,
  (VTBL_ENTRY)&_ZN7S3564C52v6Ev,
  (VTBL_ENTRY)&_ZN7S3564C52v7Ev,
  (VTBL_ENTRY)&_ZN7S3564C52v8Ev,
  (VTBL_ENTRY)&_ZN7S3564C62v9Ev,
  (VTBL_ENTRY)&_ZN7S3564C63v10Ev,
  (VTBL_ENTRY)&_ZN7S3564C63v11Ev,
  (VTBL_ENTRY)&_ZN7S3564C43v12Ev,
  (VTBL_ENTRY)&_ZN7S3564C43v13Ev,
  (VTBL_ENTRY)&_ZN7S3564C43v14Ev,
  (VTBL_ENTRY)&_ZN7S3564C43v15Ev,
};
extern void _ZN7S3564C52v5Ev();
extern void _ZN7S3564C52v6Ev();
extern void _ZN7S3564C52v7Ev();
extern void _ZN7S3564C52v8Ev();
static  VTBL_ENTRY _tg__ZTV7S3564C5__7S3564C4__7S3564C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-224,-136),
  (VTBL_ENTRY)&(_ZTI7S3564C4[0]),
  (VTBL_ENTRY)&_ZN7S3564C52v5Ev,
  (VTBL_ENTRY)&_ZN7S3564C52v6Ev,
  (VTBL_ENTRY)&_ZN7S3564C52v7Ev,
  (VTBL_ENTRY)&_ZN7S3564C52v8Ev,
};
static  VTT_ENTRY vtt_S3564C1[] = {
  {&(_ZTV7S3564C1[4]),  4,55},
  {&(_tg__ZTV7S3564C2__7S3564C1[4]),  4,16},
  {&(_tg__ZTV7S3564C37S3564C2__7S3564C1[4]),  4,10},
  {&(_tg__ZTV7S3564C4__7S3564C37S3564C2__7S3564C1[14]),  14,25},
  {&(_tg__ZTV7S3564C5__7S3564C37S3564C2__7S3564C1[6]),  6,10},
  {&(_tg__ZTV7S3564C4__7S3564C2__7S3564C1[14]),  14,25},
  {&(_tg__ZTV7S3564C5__7S3564C2__7S3564C1[6]),  6,10},
  {&(_ZTV7S3564C1[34]),  34,55},
  {&(_ZTV7S3564C1[51]),  51,55},
  {&(_tg__ZTV7S3564C4__7S3564C1[3]),  3,14},
  {&(_tg__ZTV7S3564C5__7S3564C4__7S3564C1[6]),  6,10},
};
extern VTBL_ENTRY _ZTI7S3564C1[];
extern  VTBL_ENTRY _ZTV7S3564C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3564C1[];
Class_Descriptor cd_S3564C1 = {  "S3564C1", // class name
  bases_S3564C1, 6,
  &(vtc_S3564C1[0]), // expected_vtbl_contents
  &(vtt_S3564C1[0]), // expected_vtt_contents
  ABISELECT(416,260), // object size
  NSPAIRA(_ZTI7S3564C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3564C1),55, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3564C1),11, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4239C3  {
  char s4239c3f0[1024];
  int s4239c3f1[2];
  virtual  ~S4239C3(); // _ZN7S4239C3D1Ev
  virtual void  v12(); // _ZN7S4239C33v12Ev
  virtual void  v13(); // _ZN7S4239C33v13Ev
  virtual void  v14(); // _ZN7S4239C33v14Ev
  virtual void  v15(); // _ZN7S4239C33v15Ev
  virtual void  v16(); // _ZN7S4239C33v16Ev
  virtual void  v17(); // _ZN7S4239C33v17Ev
  virtual void  v18(); // _ZN7S4239C33v18Ev
  virtual void  v19(); // _ZN7S4239C33v19Ev
  virtual void  v20(); // _ZN7S4239C33v20Ev
  virtual void  v21(); // _ZN7S4239C33v21Ev
  virtual void  v22(); // _ZN7S4239C33v22Ev
  virtual void  v23(); // _ZN7S4239C33v23Ev
  virtual void  v24(); // _ZN7S4239C33v24Ev
  S4239C3(); // tgen
};
//SIG(-1 S4239C3) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 Fc[1024] Fi[2]}


 S4239C3 ::~S4239C3(){ note_dtor("S4239C3", this);}
void  S4239C3 ::v12(){vfunc_called(this, "_ZN7S4239C33v12Ev");}
void  S4239C3 ::v13(){vfunc_called(this, "_ZN7S4239C33v13Ev");}
void  S4239C3 ::v14(){vfunc_called(this, "_ZN7S4239C33v14Ev");}
void  S4239C3 ::v15(){vfunc_called(this, "_ZN7S4239C33v15Ev");}
void  S4239C3 ::v16(){vfunc_called(this, "_ZN7S4239C33v16Ev");}
void  S4239C3 ::v17(){vfunc_called(this, "_ZN7S4239C33v17Ev");}
void  S4239C3 ::v18(){vfunc_called(this, "_ZN7S4239C33v18Ev");}
void  S4239C3 ::v19(){vfunc_called(this, "_ZN7S4239C33v19Ev");}
void  S4239C3 ::v20(){vfunc_called(this, "_ZN7S4239C33v20Ev");}
void  S4239C3 ::v21(){vfunc_called(this, "_ZN7S4239C33v21Ev");}
void  S4239C3 ::v22(){vfunc_called(this, "_ZN7S4239C33v22Ev");}
void  S4239C3 ::v23(){vfunc_called(this, "_ZN7S4239C33v23Ev");}
void  S4239C3 ::v24(){vfunc_called(this, "_ZN7S4239C33v24Ev");}
S4239C3 ::S4239C3(){ note_ctor("S4239C3", this);} // tgen

static void Test_S4239C3()
{
  extern Class_Descriptor cd_S4239C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(131,260)];
    init_test(&cd_S4239C3, buf);
    S4239C3 *dp, &lv = *(dp=new (buf) S4239C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1040,1036), "sizeof(S4239C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4239C3)");
    check_field_offset(lv, s4239c3f0, ABISELECT(8,4), "S4239C3.s4239c3f0");
    check_field_offset(lv, s4239c3f1, ABISELECT(1032,1028), "S4239C3.s4239c3f1");
    test_class_info(&lv, &cd_S4239C3);
    dp->~S4239C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4239C3(Test_S4239C3, "S4239C3", ABISELECT(1040,1036));

#else // __cplusplus

extern void _ZN7S4239C3C1Ev();
extern void _ZN7S4239C3D1Ev();
Name_Map name_map_S4239C3[] = {
  NSPAIR(_ZN7S4239C3C1Ev),
  NSPAIR(_ZN7S4239C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4239C3[];
extern void _ZN7S4239C3D1Ev();
extern void _ZN7S4239C3D0Ev();
extern void _ZN7S4239C33v12Ev();
extern void _ZN7S4239C33v13Ev();
extern void _ZN7S4239C33v14Ev();
extern void _ZN7S4239C33v15Ev();
extern void _ZN7S4239C33v16Ev();
extern void _ZN7S4239C33v17Ev();
extern void _ZN7S4239C33v18Ev();
extern void _ZN7S4239C33v19Ev();
extern void _ZN7S4239C33v20Ev();
extern void _ZN7S4239C33v21Ev();
extern void _ZN7S4239C33v22Ev();
extern void _ZN7S4239C33v23Ev();
extern void _ZN7S4239C33v24Ev();
static  VTBL_ENTRY vtc_S4239C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4239C3[0]),
  (VTBL_ENTRY)&_ZN7S4239C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4239C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4239C33v12Ev,
  (VTBL_ENTRY)&_ZN7S4239C33v13Ev,
  (VTBL_ENTRY)&_ZN7S4239C33v14Ev,
  (VTBL_ENTRY)&_ZN7S4239C33v15Ev,
  (VTBL_ENTRY)&_ZN7S4239C33v16Ev,
  (VTBL_ENTRY)&_ZN7S4239C33v17Ev,
  (VTBL_ENTRY)&_ZN7S4239C33v18Ev,
  (VTBL_ENTRY)&_ZN7S4239C33v19Ev,
  (VTBL_ENTRY)&_ZN7S4239C33v20Ev,
  (VTBL_ENTRY)&_ZN7S4239C33v21Ev,
  (VTBL_ENTRY)&_ZN7S4239C33v22Ev,
  (VTBL_ENTRY)&_ZN7S4239C33v23Ev,
  (VTBL_ENTRY)&_ZN7S4239C33v24Ev,
};
extern VTBL_ENTRY _ZTI7S4239C3[];
extern  VTBL_ENTRY _ZTV7S4239C3[];
Class_Descriptor cd_S4239C3 = {  "S4239C3", // class name
  0,0,//no base classes
  &(vtc_S4239C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(1040,1036), // object size
  NSPAIRA(_ZTI7S4239C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4239C3),17, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4239C2  : S4239C3 {
  virtual  ~S4239C2(); // _ZN7S4239C2D1Ev
  virtual void  v25(); // _ZN7S4239C23v25Ev
  virtual void  v26(); // _ZN7S4239C23v26Ev
  virtual void  v27(); // _ZN7S4239C23v27Ev
  virtual void  v28(); // _ZN7S4239C23v28Ev
  S4239C2(); // tgen
};
//SIG(-1 S4239C2) C1{ BC2{ vd v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 Fc[1024] Fi[2]} vd v1 v2 v3 v4}


 S4239C2 ::~S4239C2(){ note_dtor("S4239C2", this);}
void  S4239C2 ::v25(){vfunc_called(this, "_ZN7S4239C23v25Ev");}
void  S4239C2 ::v26(){vfunc_called(this, "_ZN7S4239C23v26Ev");}
void  S4239C2 ::v27(){vfunc_called(this, "_ZN7S4239C23v27Ev");}
void  S4239C2 ::v28(){vfunc_called(this, "_ZN7S4239C23v28Ev");}
S4239C2 ::S4239C2(){ note_ctor("S4239C2", this);} // tgen

static void Test_S4239C2()
{
  extern Class_Descriptor cd_S4239C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(131,260)];
    init_test(&cd_S4239C2, buf);
    S4239C2 *dp, &lv = *(dp=new (buf) S4239C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1040,1036), "sizeof(S4239C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4239C2)");
    check_base_class_offset(lv, (S4239C3*), 0, "S4239C2");
    test_class_info(&lv, &cd_S4239C2);
    dp->~S4239C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4239C2(Test_S4239C2, "S4239C2", ABISELECT(1040,1036));

#else // __cplusplus

extern void _ZN7S4239C2C1Ev();
extern void _ZN7S4239C2D1Ev();
Name_Map name_map_S4239C2[] = {
  NSPAIR(_ZN7S4239C2C1Ev),
  NSPAIR(_ZN7S4239C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4239C3;
extern VTBL_ENTRY _ZTI7S4239C3[];
extern  VTBL_ENTRY _ZTV7S4239C3[];
static Base_Class bases_S4239C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4239C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4239C2[];
extern void _ZN7S4239C2D1Ev();
extern void _ZN7S4239C2D0Ev();
extern void _ZN7S4239C33v12Ev();
extern void _ZN7S4239C33v13Ev();
extern void _ZN7S4239C33v14Ev();
extern void _ZN7S4239C33v15Ev();
extern void _ZN7S4239C33v16Ev();
extern void _ZN7S4239C33v17Ev();
extern void _ZN7S4239C33v18Ev();
extern void _ZN7S4239C33v19Ev();
extern void _ZN7S4239C33v20Ev();
extern void _ZN7S4239C33v21Ev();
extern void _ZN7S4239C33v22Ev();
extern void _ZN7S4239C33v23Ev();
extern void _ZN7S4239C33v24Ev();
extern void _ZN7S4239C23v25Ev();
extern void _ZN7S4239C23v26Ev();
extern void _ZN7S4239C23v27Ev();
extern void _ZN7S4239C23v28Ev();
static  VTBL_ENTRY vtc_S4239C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4239C2[0]),
  (VTBL_ENTRY)&_ZN7S4239C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4239C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4239C33v12Ev,
  (VTBL_ENTRY)&_ZN7S4239C33v13Ev,
  (VTBL_ENTRY)&_ZN7S4239C33v14Ev,
  (VTBL_ENTRY)&_ZN7S4239C33v15Ev,
  (VTBL_ENTRY)&_ZN7S4239C33v16Ev,
  (VTBL_ENTRY)&_ZN7S4239C33v17Ev,
  (VTBL_ENTRY)&_ZN7S4239C33v18Ev,
  (VTBL_ENTRY)&_ZN7S4239C33v19Ev,
  (VTBL_ENTRY)&_ZN7S4239C33v20Ev,
  (VTBL_ENTRY)&_ZN7S4239C33v21Ev,
  (VTBL_ENTRY)&_ZN7S4239C33v22Ev,
  (VTBL_ENTRY)&_ZN7S4239C33v23Ev,
  (VTBL_ENTRY)&_ZN7S4239C33v24Ev,
  (VTBL_ENTRY)&_ZN7S4239C23v25Ev,
  (VTBL_ENTRY)&_ZN7S4239C23v26Ev,
  (VTBL_ENTRY)&_ZN7S4239C23v27Ev,
  (VTBL_ENTRY)&_ZN7S4239C23v28Ev,
};
extern VTBL_ENTRY _ZTI7S4239C2[];
extern  VTBL_ENTRY _ZTV7S4239C2[];
Class_Descriptor cd_S4239C2 = {  "S4239C2", // class name
  bases_S4239C2, 1,
  &(vtc_S4239C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(1040,1036), // object size
  NSPAIRA(_ZTI7S4239C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4239C2),21, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4239C1  : S4239C2 {
  char s4239c1f0;
  void *s4239c1f1;
  virtual  ~S4239C1(); // _ZN7S4239C1D1Ev
  virtual void  v1(); // _ZN7S4239C12v1Ev
  virtual void  v2(); // _ZN7S4239C12v2Ev
  virtual void  v3(); // _ZN7S4239C12v3Ev
  virtual void  v4(); // _ZN7S4239C12v4Ev
  virtual void  v5(); // _ZN7S4239C12v5Ev
  virtual void  v6(); // _ZN7S4239C12v6Ev
  virtual void  v7(); // _ZN7S4239C12v7Ev
  virtual void  v8(); // _ZN7S4239C12v8Ev
  virtual void  v9(); // _ZN7S4239C12v9Ev
  virtual void  v10(); // _ZN7S4239C13v10Ev
  virtual void  v11(); // _ZN7S4239C13v11Ev
  S4239C1(); // tgen
};
//SIG(1 S4239C1) C1{ BC2{ BC3{ vd v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 Fc[1024] Fi[2]} vd v25 v26 v27 v28} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 Fc Fp}


 S4239C1 ::~S4239C1(){ note_dtor("S4239C1", this);}
void  S4239C1 ::v1(){vfunc_called(this, "_ZN7S4239C12v1Ev");}
void  S4239C1 ::v2(){vfunc_called(this, "_ZN7S4239C12v2Ev");}
void  S4239C1 ::v3(){vfunc_called(this, "_ZN7S4239C12v3Ev");}
void  S4239C1 ::v4(){vfunc_called(this, "_ZN7S4239C12v4Ev");}
void  S4239C1 ::v5(){vfunc_called(this, "_ZN7S4239C12v5Ev");}
void  S4239C1 ::v6(){vfunc_called(this, "_ZN7S4239C12v6Ev");}
void  S4239C1 ::v7(){vfunc_called(this, "_ZN7S4239C12v7Ev");}
void  S4239C1 ::v8(){vfunc_called(this, "_ZN7S4239C12v8Ev");}
void  S4239C1 ::v9(){vfunc_called(this, "_ZN7S4239C12v9Ev");}
void  S4239C1 ::v10(){vfunc_called(this, "_ZN7S4239C13v10Ev");}
void  S4239C1 ::v11(){vfunc_called(this, "_ZN7S4239C13v11Ev");}
S4239C1 ::S4239C1(){ note_ctor("S4239C1", this);} // tgen

static void Test_S4239C1()
{
  extern Class_Descriptor cd_S4239C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(133,262)];
    init_test(&cd_S4239C1, buf);
    S4239C1 *dp, &lv = *(dp=new (buf) S4239C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1056,1044), "sizeof(S4239C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4239C1)");
    check_base_class_offset(lv, (S4239C3*)(S4239C2*), 0, "S4239C1");
    check_base_class_offset(lv, (S4239C2*), 0, "S4239C1");
    check_field_offset(lv, s4239c1f0, ABISELECT(1040,1036), "S4239C1.s4239c1f0");
    check_field_offset(lv, s4239c1f1, ABISELECT(1048,1040), "S4239C1.s4239c1f1");
    test_class_info(&lv, &cd_S4239C1);
    dp->~S4239C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4239C1(Test_S4239C1, "S4239C1", ABISELECT(1056,1044));

#else // __cplusplus

extern void _ZN7S4239C1C1Ev();
extern void _ZN7S4239C1D1Ev();
Name_Map name_map_S4239C1[] = {
  NSPAIR(_ZN7S4239C1C1Ev),
  NSPAIR(_ZN7S4239C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4239C3;
extern VTBL_ENTRY _ZTI7S4239C3[];
extern  VTBL_ENTRY _ZTV7S4239C3[];
extern Class_Descriptor cd_S4239C2;
extern VTBL_ENTRY _ZTI7S4239C2[];
extern  VTBL_ENTRY _ZTV7S4239C2[];
static Base_Class bases_S4239C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4239C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S4239C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4239C1[];
extern void _ZN7S4239C1D1Ev();
extern void _ZN7S4239C1D0Ev();
extern void _ZN7S4239C33v12Ev();
extern void _ZN7S4239C33v13Ev();
extern void _ZN7S4239C33v14Ev();
extern void _ZN7S4239C33v15Ev();
extern void _ZN7S4239C33v16Ev();
extern void _ZN7S4239C33v17Ev();
extern void _ZN7S4239C33v18Ev();
extern void _ZN7S4239C33v19Ev();
extern void _ZN7S4239C33v20Ev();
extern void _ZN7S4239C33v21Ev();
extern void _ZN7S4239C33v22Ev();
extern void _ZN7S4239C33v23Ev();
extern void _ZN7S4239C33v24Ev();
extern void _ZN7S4239C23v25Ev();
extern void _ZN7S4239C23v26Ev();
extern void _ZN7S4239C23v27Ev();
extern void _ZN7S4239C23v28Ev();
extern void _ZN7S4239C12v1Ev();
extern void _ZN7S4239C12v2Ev();
extern void _ZN7S4239C12v3Ev();
extern void _ZN7S4239C12v4Ev();
extern void _ZN7S4239C12v5Ev();
extern void _ZN7S4239C12v6Ev();
extern void _ZN7S4239C12v7Ev();
extern void _ZN7S4239C12v8Ev();
extern void _ZN7S4239C12v9Ev();
extern void _ZN7S4239C13v10Ev();
extern void _ZN7S4239C13v11Ev();
static  VTBL_ENTRY vtc_S4239C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4239C1[0]),
  (VTBL_ENTRY)&_ZN7S4239C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4239C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4239C33v12Ev,
  (VTBL_ENTRY)&_ZN7S4239C33v13Ev,
  (VTBL_ENTRY)&_ZN7S4239C33v14Ev,
  (VTBL_ENTRY)&_ZN7S4239C33v15Ev,
  (VTBL_ENTRY)&_ZN7S4239C33v16Ev,
  (VTBL_ENTRY)&_ZN7S4239C33v17Ev,
  (VTBL_ENTRY)&_ZN7S4239C33v18Ev,
  (VTBL_ENTRY)&_ZN7S4239C33v19Ev,
  (VTBL_ENTRY)&_ZN7S4239C33v20Ev,
  (VTBL_ENTRY)&_ZN7S4239C33v21Ev,
  (VTBL_ENTRY)&_ZN7S4239C33v22Ev,
  (VTBL_ENTRY)&_ZN7S4239C33v23Ev,
  (VTBL_ENTRY)&_ZN7S4239C33v24Ev,
  (VTBL_ENTRY)&_ZN7S4239C23v25Ev,
  (VTBL_ENTRY)&_ZN7S4239C23v26Ev,
  (VTBL_ENTRY)&_ZN7S4239C23v27Ev,
  (VTBL_ENTRY)&_ZN7S4239C23v28Ev,
  (VTBL_ENTRY)&_ZN7S4239C12v1Ev,
  (VTBL_ENTRY)&_ZN7S4239C12v2Ev,
  (VTBL_ENTRY)&_ZN7S4239C12v3Ev,
  (VTBL_ENTRY)&_ZN7S4239C12v4Ev,
  (VTBL_ENTRY)&_ZN7S4239C12v5Ev,
  (VTBL_ENTRY)&_ZN7S4239C12v6Ev,
  (VTBL_ENTRY)&_ZN7S4239C12v7Ev,
  (VTBL_ENTRY)&_ZN7S4239C12v8Ev,
  (VTBL_ENTRY)&_ZN7S4239C12v9Ev,
  (VTBL_ENTRY)&_ZN7S4239C13v10Ev,
  (VTBL_ENTRY)&_ZN7S4239C13v11Ev,
};
extern VTBL_ENTRY _ZTI7S4239C1[];
extern  VTBL_ENTRY _ZTV7S4239C1[];
Class_Descriptor cd_S4239C1 = {  "S4239C1", // class name
  bases_S4239C1, 2,
  &(vtc_S4239C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(1056,1044), // object size
  NSPAIRA(_ZTI7S4239C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4239C1),32, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4238C3  {
  char s4238c3f0[1024];
  int s4238c3f1[2];
  virtual  ~S4238C3(); // _ZN7S4238C3D1Ev
  virtual void  v12(); // _ZN7S4238C33v12Ev
  virtual void  v13(); // _ZN7S4238C33v13Ev
  virtual void  v14(); // _ZN7S4238C33v14Ev
  virtual void  v15(); // _ZN7S4238C33v15Ev
  virtual void  v16(); // _ZN7S4238C33v16Ev
  virtual void  v17(); // _ZN7S4238C33v17Ev
  virtual void  v18(); // _ZN7S4238C33v18Ev
  virtual void  v19(); // _ZN7S4238C33v19Ev
  virtual void  v20(); // _ZN7S4238C33v20Ev
  virtual void  v21(); // _ZN7S4238C33v21Ev
  virtual void  v22(); // _ZN7S4238C33v22Ev
  virtual void  v23(); // _ZN7S4238C33v23Ev
  S4238C3(); // tgen
};
//SIG(-1 S4238C3) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 Fc[1024] Fi[2]}


 S4238C3 ::~S4238C3(){ note_dtor("S4238C3", this);}
void  S4238C3 ::v12(){vfunc_called(this, "_ZN7S4238C33v12Ev");}
void  S4238C3 ::v13(){vfunc_called(this, "_ZN7S4238C33v13Ev");}
void  S4238C3 ::v14(){vfunc_called(this, "_ZN7S4238C33v14Ev");}
void  S4238C3 ::v15(){vfunc_called(this, "_ZN7S4238C33v15Ev");}
void  S4238C3 ::v16(){vfunc_called(this, "_ZN7S4238C33v16Ev");}
void  S4238C3 ::v17(){vfunc_called(this, "_ZN7S4238C33v17Ev");}
void  S4238C3 ::v18(){vfunc_called(this, "_ZN7S4238C33v18Ev");}
void  S4238C3 ::v19(){vfunc_called(this, "_ZN7S4238C33v19Ev");}
void  S4238C3 ::v20(){vfunc_called(this, "_ZN7S4238C33v20Ev");}
void  S4238C3 ::v21(){vfunc_called(this, "_ZN7S4238C33v21Ev");}
void  S4238C3 ::v22(){vfunc_called(this, "_ZN7S4238C33v22Ev");}
void  S4238C3 ::v23(){vfunc_called(this, "_ZN7S4238C33v23Ev");}
S4238C3 ::S4238C3(){ note_ctor("S4238C3", this);} // tgen

static void Test_S4238C3()
{
  extern Class_Descriptor cd_S4238C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(131,260)];
    init_test(&cd_S4238C3, buf);
    S4238C3 *dp, &lv = *(dp=new (buf) S4238C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1040,1036), "sizeof(S4238C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4238C3)");
    check_field_offset(lv, s4238c3f0, ABISELECT(8,4), "S4238C3.s4238c3f0");
    check_field_offset(lv, s4238c3f1, ABISELECT(1032,1028), "S4238C3.s4238c3f1");
    test_class_info(&lv, &cd_S4238C3);
    dp->~S4238C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4238C3(Test_S4238C3, "S4238C3", ABISELECT(1040,1036));

#else // __cplusplus

extern void _ZN7S4238C3C1Ev();
extern void _ZN7S4238C3D1Ev();
Name_Map name_map_S4238C3[] = {
  NSPAIR(_ZN7S4238C3C1Ev),
  NSPAIR(_ZN7S4238C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4238C3[];
extern void _ZN7S4238C3D1Ev();
extern void _ZN7S4238C3D0Ev();
extern void _ZN7S4238C33v12Ev();
extern void _ZN7S4238C33v13Ev();
extern void _ZN7S4238C33v14Ev();
extern void _ZN7S4238C33v15Ev();
extern void _ZN7S4238C33v16Ev();
extern void _ZN7S4238C33v17Ev();
extern void _ZN7S4238C33v18Ev();
extern void _ZN7S4238C33v19Ev();
extern void _ZN7S4238C33v20Ev();
extern void _ZN7S4238C33v21Ev();
extern void _ZN7S4238C33v22Ev();
extern void _ZN7S4238C33v23Ev();
static  VTBL_ENTRY vtc_S4238C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4238C3[0]),
  (VTBL_ENTRY)&_ZN7S4238C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4238C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4238C33v12Ev,
  (VTBL_ENTRY)&_ZN7S4238C33v13Ev,
  (VTBL_ENTRY)&_ZN7S4238C33v14Ev,
  (VTBL_ENTRY)&_ZN7S4238C33v15Ev,
  (VTBL_ENTRY)&_ZN7S4238C33v16Ev,
  (VTBL_ENTRY)&_ZN7S4238C33v17Ev,
  (VTBL_ENTRY)&_ZN7S4238C33v18Ev,
  (VTBL_ENTRY)&_ZN7S4238C33v19Ev,
  (VTBL_ENTRY)&_ZN7S4238C33v20Ev,
  (VTBL_ENTRY)&_ZN7S4238C33v21Ev,
  (VTBL_ENTRY)&_ZN7S4238C33v22Ev,
  (VTBL_ENTRY)&_ZN7S4238C33v23Ev,
};
extern VTBL_ENTRY _ZTI7S4238C3[];
extern  VTBL_ENTRY _ZTV7S4238C3[];
Class_Descriptor cd_S4238C3 = {  "S4238C3", // class name
  0,0,//no base classes
  &(vtc_S4238C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(1040,1036), // object size
  NSPAIRA(_ZTI7S4238C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4238C3),16, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4238C2  : S4238C3 {
  virtual  ~S4238C2(); // _ZN7S4238C2D1Ev
  virtual void  v24(); // _ZN7S4238C23v24Ev
  virtual void  v25(); // _ZN7S4238C23v25Ev
  virtual void  v26(); // _ZN7S4238C23v26Ev
  virtual void  v27(); // _ZN7S4238C23v27Ev
  S4238C2(); // tgen
};
//SIG(-1 S4238C2) C1{ BC2{ vd v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 Fc[1024] Fi[2]} vd v1 v2 v3 v4}


 S4238C2 ::~S4238C2(){ note_dtor("S4238C2", this);}
void  S4238C2 ::v24(){vfunc_called(this, "_ZN7S4238C23v24Ev");}
void  S4238C2 ::v25(){vfunc_called(this, "_ZN7S4238C23v25Ev");}
void  S4238C2 ::v26(){vfunc_called(this, "_ZN7S4238C23v26Ev");}
void  S4238C2 ::v27(){vfunc_called(this, "_ZN7S4238C23v27Ev");}
S4238C2 ::S4238C2(){ note_ctor("S4238C2", this);} // tgen

static void Test_S4238C2()
{
  extern Class_Descriptor cd_S4238C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(131,260)];
    init_test(&cd_S4238C2, buf);
    S4238C2 *dp, &lv = *(dp=new (buf) S4238C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1040,1036), "sizeof(S4238C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4238C2)");
    check_base_class_offset(lv, (S4238C3*), 0, "S4238C2");
    test_class_info(&lv, &cd_S4238C2);
    dp->~S4238C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4238C2(Test_S4238C2, "S4238C2", ABISELECT(1040,1036));

#else // __cplusplus

extern void _ZN7S4238C2C1Ev();
extern void _ZN7S4238C2D1Ev();
Name_Map name_map_S4238C2[] = {
  NSPAIR(_ZN7S4238C2C1Ev),
  NSPAIR(_ZN7S4238C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4238C3;
extern VTBL_ENTRY _ZTI7S4238C3[];
extern  VTBL_ENTRY _ZTV7S4238C3[];
static Base_Class bases_S4238C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4238C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4238C2[];
extern void _ZN7S4238C2D1Ev();
extern void _ZN7S4238C2D0Ev();
extern void _ZN7S4238C33v12Ev();
extern void _ZN7S4238C33v13Ev();
extern void _ZN7S4238C33v14Ev();
extern void _ZN7S4238C33v15Ev();
extern void _ZN7S4238C33v16Ev();
extern void _ZN7S4238C33v17Ev();
extern void _ZN7S4238C33v18Ev();
extern void _ZN7S4238C33v19Ev();
extern void _ZN7S4238C33v20Ev();
extern void _ZN7S4238C33v21Ev();
extern void _ZN7S4238C33v22Ev();
extern void _ZN7S4238C33v23Ev();
extern void _ZN7S4238C23v24Ev();
extern void _ZN7S4238C23v25Ev();
extern void _ZN7S4238C23v26Ev();
extern void _ZN7S4238C23v27Ev();
static  VTBL_ENTRY vtc_S4238C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4238C2[0]),
  (VTBL_ENTRY)&_ZN7S4238C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4238C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4238C33v12Ev,
  (VTBL_ENTRY)&_ZN7S4238C33v13Ev,
  (VTBL_ENTRY)&_ZN7S4238C33v14Ev,
  (VTBL_ENTRY)&_ZN7S4238C33v15Ev,
  (VTBL_ENTRY)&_ZN7S4238C33v16Ev,
  (VTBL_ENTRY)&_ZN7S4238C33v17Ev,
  (VTBL_ENTRY)&_ZN7S4238C33v18Ev,
  (VTBL_ENTRY)&_ZN7S4238C33v19Ev,
  (VTBL_ENTRY)&_ZN7S4238C33v20Ev,
  (VTBL_ENTRY)&_ZN7S4238C33v21Ev,
  (VTBL_ENTRY)&_ZN7S4238C33v22Ev,
  (VTBL_ENTRY)&_ZN7S4238C33v23Ev,
  (VTBL_ENTRY)&_ZN7S4238C23v24Ev,
  (VTBL_ENTRY)&_ZN7S4238C23v25Ev,
  (VTBL_ENTRY)&_ZN7S4238C23v26Ev,
  (VTBL_ENTRY)&_ZN7S4238C23v27Ev,
};
extern VTBL_ENTRY _ZTI7S4238C2[];
extern  VTBL_ENTRY _ZTV7S4238C2[];
Class_Descriptor cd_S4238C2 = {  "S4238C2", // class name
  bases_S4238C2, 1,
  &(vtc_S4238C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(1040,1036), // object size
  NSPAIRA(_ZTI7S4238C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4238C2),20, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4238C1  : S4238C2 {
  char s4238c1f0;
  void *s4238c1f1;
  virtual  ~S4238C1(); // _ZN7S4238C1D1Ev
  virtual void  v1(); // _ZN7S4238C12v1Ev
  virtual void  v2(); // _ZN7S4238C12v2Ev
  virtual void  v3(); // _ZN7S4238C12v3Ev
  virtual void  v4(); // _ZN7S4238C12v4Ev
  virtual void  v5(); // _ZN7S4238C12v5Ev
  virtual void  v6(); // _ZN7S4238C12v6Ev
  virtual void  v7(); // _ZN7S4238C12v7Ev
  virtual void  v8(); // _ZN7S4238C12v8Ev
  virtual void  v9(); // _ZN7S4238C12v9Ev
  virtual void  v10(); // _ZN7S4238C13v10Ev
  virtual void  v11(); // _ZN7S4238C13v11Ev
  S4238C1(); // tgen
};
//SIG(1 S4238C1) C1{ BC2{ BC3{ vd v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 Fc[1024] Fi[2]} vd v24 v25 v26 v27} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 Fc Fp}


 S4238C1 ::~S4238C1(){ note_dtor("S4238C1", this);}
void  S4238C1 ::v1(){vfunc_called(this, "_ZN7S4238C12v1Ev");}
void  S4238C1 ::v2(){vfunc_called(this, "_ZN7S4238C12v2Ev");}
void  S4238C1 ::v3(){vfunc_called(this, "_ZN7S4238C12v3Ev");}
void  S4238C1 ::v4(){vfunc_called(this, "_ZN7S4238C12v4Ev");}
void  S4238C1 ::v5(){vfunc_called(this, "_ZN7S4238C12v5Ev");}
void  S4238C1 ::v6(){vfunc_called(this, "_ZN7S4238C12v6Ev");}
void  S4238C1 ::v7(){vfunc_called(this, "_ZN7S4238C12v7Ev");}
void  S4238C1 ::v8(){vfunc_called(this, "_ZN7S4238C12v8Ev");}
void  S4238C1 ::v9(){vfunc_called(this, "_ZN7S4238C12v9Ev");}
void  S4238C1 ::v10(){vfunc_called(this, "_ZN7S4238C13v10Ev");}
void  S4238C1 ::v11(){vfunc_called(this, "_ZN7S4238C13v11Ev");}
S4238C1 ::S4238C1(){ note_ctor("S4238C1", this);} // tgen

static void Test_S4238C1()
{
  extern Class_Descriptor cd_S4238C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(133,262)];
    init_test(&cd_S4238C1, buf);
    S4238C1 *dp, &lv = *(dp=new (buf) S4238C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1056,1044), "sizeof(S4238C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4238C1)");
    check_base_class_offset(lv, (S4238C3*)(S4238C2*), 0, "S4238C1");
    check_base_class_offset(lv, (S4238C2*), 0, "S4238C1");
    check_field_offset(lv, s4238c1f0, ABISELECT(1040,1036), "S4238C1.s4238c1f0");
    check_field_offset(lv, s4238c1f1, ABISELECT(1048,1040), "S4238C1.s4238c1f1");
    test_class_info(&lv, &cd_S4238C1);
    dp->~S4238C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4238C1(Test_S4238C1, "S4238C1", ABISELECT(1056,1044));

#else // __cplusplus

extern void _ZN7S4238C1C1Ev();
extern void _ZN7S4238C1D1Ev();
Name_Map name_map_S4238C1[] = {
  NSPAIR(_ZN7S4238C1C1Ev),
  NSPAIR(_ZN7S4238C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4238C3;
extern VTBL_ENTRY _ZTI7S4238C3[];
extern  VTBL_ENTRY _ZTV7S4238C3[];
extern Class_Descriptor cd_S4238C2;
extern VTBL_ENTRY _ZTI7S4238C2[];
extern  VTBL_ENTRY _ZTV7S4238C2[];
static Base_Class bases_S4238C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4238C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S4238C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4238C1[];
extern void _ZN7S4238C1D1Ev();
extern void _ZN7S4238C1D0Ev();
extern void _ZN7S4238C33v12Ev();
extern void _ZN7S4238C33v13Ev();
extern void _ZN7S4238C33v14Ev();
extern void _ZN7S4238C33v15Ev();
extern void _ZN7S4238C33v16Ev();
extern void _ZN7S4238C33v17Ev();
extern void _ZN7S4238C33v18Ev();
extern void _ZN7S4238C33v19Ev();
extern void _ZN7S4238C33v20Ev();
extern void _ZN7S4238C33v21Ev();
extern void _ZN7S4238C33v22Ev();
extern void _ZN7S4238C33v23Ev();
extern void _ZN7S4238C23v24Ev();
extern void _ZN7S4238C23v25Ev();
extern void _ZN7S4238C23v26Ev();
extern void _ZN7S4238C23v27Ev();
extern void _ZN7S4238C12v1Ev();
extern void _ZN7S4238C12v2Ev();
extern void _ZN7S4238C12v3Ev();
extern void _ZN7S4238C12v4Ev();
extern void _ZN7S4238C12v5Ev();
extern void _ZN7S4238C12v6Ev();
extern void _ZN7S4238C12v7Ev();
extern void _ZN7S4238C12v8Ev();
extern void _ZN7S4238C12v9Ev();
extern void _ZN7S4238C13v10Ev();
extern void _ZN7S4238C13v11Ev();
static  VTBL_ENTRY vtc_S4238C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4238C1[0]),
  (VTBL_ENTRY)&_ZN7S4238C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4238C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4238C33v12Ev,
  (VTBL_ENTRY)&_ZN7S4238C33v13Ev,
  (VTBL_ENTRY)&_ZN7S4238C33v14Ev,
  (VTBL_ENTRY)&_ZN7S4238C33v15Ev,
  (VTBL_ENTRY)&_ZN7S4238C33v16Ev,
  (VTBL_ENTRY)&_ZN7S4238C33v17Ev,
  (VTBL_ENTRY)&_ZN7S4238C33v18Ev,
  (VTBL_ENTRY)&_ZN7S4238C33v19Ev,
  (VTBL_ENTRY)&_ZN7S4238C33v20Ev,
  (VTBL_ENTRY)&_ZN7S4238C33v21Ev,
  (VTBL_ENTRY)&_ZN7S4238C33v22Ev,
  (VTBL_ENTRY)&_ZN7S4238C33v23Ev,
  (VTBL_ENTRY)&_ZN7S4238C23v24Ev,
  (VTBL_ENTRY)&_ZN7S4238C23v25Ev,
  (VTBL_ENTRY)&_ZN7S4238C23v26Ev,
  (VTBL_ENTRY)&_ZN7S4238C23v27Ev,
  (VTBL_ENTRY)&_ZN7S4238C12v1Ev,
  (VTBL_ENTRY)&_ZN7S4238C12v2Ev,
  (VTBL_ENTRY)&_ZN7S4238C12v3Ev,
  (VTBL_ENTRY)&_ZN7S4238C12v4Ev,
  (VTBL_ENTRY)&_ZN7S4238C12v5Ev,
  (VTBL_ENTRY)&_ZN7S4238C12v6Ev,
  (VTBL_ENTRY)&_ZN7S4238C12v7Ev,
  (VTBL_ENTRY)&_ZN7S4238C12v8Ev,
  (VTBL_ENTRY)&_ZN7S4238C12v9Ev,
  (VTBL_ENTRY)&_ZN7S4238C13v10Ev,
  (VTBL_ENTRY)&_ZN7S4238C13v11Ev,
};
extern VTBL_ENTRY _ZTI7S4238C1[];
extern  VTBL_ENTRY _ZTV7S4238C1[];
Class_Descriptor cd_S4238C1 = {  "S4238C1", // class name
  bases_S4238C1, 2,
  &(vtc_S4238C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(1056,1044), // object size
  NSPAIRA(_ZTI7S4238C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4238C1),31, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3438C3  {
  short s3438c3f0:13;
  void *s3438c3f1;
  long double s3438c3f2[8];
  virtual void  v9(); // _ZN7S3438C32v9Ev
  virtual void  v10(); // _ZN7S3438C33v10Ev
  virtual void  v11(); // _ZN7S3438C33v11Ev
  virtual void  v12(); // _ZN7S3438C33v12Ev
  ~S3438C3(); // tgen
  S3438C3(); // tgen
};
//SIG(-1 S3438C3) C1{ v1 v2 v3 v4 Fs:13 Fp FD[8]}


void  S3438C3 ::v9(){vfunc_called(this, "_ZN7S3438C32v9Ev");}
void  S3438C3 ::v10(){vfunc_called(this, "_ZN7S3438C33v10Ev");}
void  S3438C3 ::v11(){vfunc_called(this, "_ZN7S3438C33v11Ev");}
void  S3438C3 ::v12(){vfunc_called(this, "_ZN7S3438C33v12Ev");}
S3438C3 ::~S3438C3(){ note_dtor("S3438C3", this);} // tgen
S3438C3 ::S3438C3(){ note_ctor("S3438C3", this);} // tgen

static void Test_S3438C3()
{
  extern Class_Descriptor cd_S3438C3;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(11,28)];
    init_test(&cd_S3438C3, buf);
    S3438C3 *dp, &lv = *(dp=new (buf) S3438C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(160,108), "sizeof(S3438C3)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3438C3)");
    set_bf_and_test(lv, s3438c3f0, ABISELECT(8,4), 0, 13, 1, "S3438C3");
    set_bf_and_test(lv, s3438c3f0, ABISELECT(8,4), 0, 13, hide_sll(1LL<<12), "S3438C3");
    check_field_offset(lv, s3438c3f1, ABISELECT(16,8), "S3438C3.s3438c3f1");
    check_field_offset(lv, s3438c3f2, ABISELECT(32,12), "S3438C3.s3438c3f2");
    test_class_info(&lv, &cd_S3438C3);
    dp->~S3438C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3438C3(Test_S3438C3, "S3438C3", ABISELECT(160,108));

#else // __cplusplus

extern void _ZN7S3438C3C1Ev();
extern void _ZN7S3438C3D1Ev();
Name_Map name_map_S3438C3[] = {
  NSPAIR(_ZN7S3438C3C1Ev),
  NSPAIR(_ZN7S3438C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S3438C3[];
extern void _ZN7S3438C32v9Ev();
extern void _ZN7S3438C33v10Ev();
extern void _ZN7S3438C33v11Ev();
extern void _ZN7S3438C33v12Ev();
static  VTBL_ENTRY vtc_S3438C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3438C3[0]),
  (VTBL_ENTRY)&_ZN7S3438C32v9Ev,
  (VTBL_ENTRY)&_ZN7S3438C33v10Ev,
  (VTBL_ENTRY)&_ZN7S3438C33v11Ev,
  (VTBL_ENTRY)&_ZN7S3438C33v12Ev,
};
extern VTBL_ENTRY _ZTI7S3438C3[];
extern  VTBL_ENTRY _ZTV7S3438C3[];
Class_Descriptor cd_S3438C3 = {  "S3438C3", // class name
  0,0,//no base classes
  &(vtc_S3438C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(160,108), // object size
  NSPAIRA(_ZTI7S3438C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S3438C3),6, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3438C2  : S3438C3 {
  void *s3438c2f0[6];
  virtual void  v13(); // _ZN7S3438C23v13Ev
  virtual void  v14(); // _ZN7S3438C23v14Ev
  virtual void  v15(); // _ZN7S3438C23v15Ev
  ~S3438C2(); // tgen
  S3438C2(); // tgen
};
//SIG(-1 S3438C2) C1{ BC2{ v4 v5 v6 v7 Fs:13 Fp FD[8]} v1 v2 v3 Fp[6]}


void  S3438C2 ::v13(){vfunc_called(this, "_ZN7S3438C23v13Ev");}
void  S3438C2 ::v14(){vfunc_called(this, "_ZN7S3438C23v14Ev");}
void  S3438C2 ::v15(){vfunc_called(this, "_ZN7S3438C23v15Ev");}
S3438C2 ::~S3438C2(){ note_dtor("S3438C2", this);} // tgen
S3438C2 ::S3438C2(){ note_ctor("S3438C2", this);} // tgen

static void Test_S3438C2()
{
  extern Class_Descriptor cd_S3438C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(14,34)];
    init_test(&cd_S3438C2, buf);
    S3438C2 *dp, &lv = *(dp=new (buf) S3438C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(208,132), "sizeof(S3438C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3438C2)");
    check_base_class_offset(lv, (S3438C3*), 0, "S3438C2");
    check_field_offset(lv, s3438c2f0, ABISELECT(160,108), "S3438C2.s3438c2f0");
    test_class_info(&lv, &cd_S3438C2);
    dp->~S3438C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3438C2(Test_S3438C2, "S3438C2", ABISELECT(208,132));

#else // __cplusplus

extern void _ZN7S3438C2C1Ev();
extern void _ZN7S3438C2D1Ev();
Name_Map name_map_S3438C2[] = {
  NSPAIR(_ZN7S3438C2C1Ev),
  NSPAIR(_ZN7S3438C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3438C3;
extern VTBL_ENTRY _ZTI7S3438C3[];
extern  VTBL_ENTRY _ZTV7S3438C3[];
static Base_Class bases_S3438C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3438C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3438C2[];
extern void _ZN7S3438C32v9Ev();
extern void _ZN7S3438C33v10Ev();
extern void _ZN7S3438C33v11Ev();
extern void _ZN7S3438C33v12Ev();
extern void _ZN7S3438C23v13Ev();
extern void _ZN7S3438C23v14Ev();
extern void _ZN7S3438C23v15Ev();
static  VTBL_ENTRY vtc_S3438C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3438C2[0]),
  (VTBL_ENTRY)&_ZN7S3438C32v9Ev,
  (VTBL_ENTRY)&_ZN7S3438C33v10Ev,
  (VTBL_ENTRY)&_ZN7S3438C33v11Ev,
  (VTBL_ENTRY)&_ZN7S3438C33v12Ev,
  (VTBL_ENTRY)&_ZN7S3438C23v13Ev,
  (VTBL_ENTRY)&_ZN7S3438C23v14Ev,
  (VTBL_ENTRY)&_ZN7S3438C23v15Ev,
};
extern VTBL_ENTRY _ZTI7S3438C2[];
extern  VTBL_ENTRY _ZTV7S3438C2[];
Class_Descriptor cd_S3438C2 = {  "S3438C2", // class name
  bases_S3438C2, 1,
  &(vtc_S3438C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(208,132), // object size
  NSPAIRA(_ZTI7S3438C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3438C2),9, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3438C4  {
  ::S3438C2 s3438c4f0[7];
  virtual void  v16(); // _ZN7S3438C43v16Ev
  virtual void  v17(); // _ZN7S3438C43v17Ev
  virtual void  v18(); // _ZN7S3438C43v18Ev
  virtual void  v19(); // _ZN7S3438C43v19Ev
  virtual void  v20(); // _ZN7S3438C43v20Ev
  virtual void  v21(); // _ZN7S3438C43v21Ev
  virtual void  v22(); // _ZN7S3438C43v22Ev
  virtual void  v23(); // _ZN7S3438C43v23Ev
  virtual void  v24(); // _ZN7S3438C43v24Ev
  ~S3438C4(); // tgen
  S3438C4(); // tgen
};
//SIG(-1 S3438C4) C1{ v1 v2 v3 v4 v5 v6 v7 v8 v9 FC2{ BC3{ v13 v14 v15 v16 Fs:13 Fp FD[8]} v10 v11 v12 Fp[6]}[7]}


void  S3438C4 ::v16(){vfunc_called(this, "_ZN7S3438C43v16Ev");}
void  S3438C4 ::v17(){vfunc_called(this, "_ZN7S3438C43v17Ev");}
void  S3438C4 ::v18(){vfunc_called(this, "_ZN7S3438C43v18Ev");}
void  S3438C4 ::v19(){vfunc_called(this, "_ZN7S3438C43v19Ev");}
void  S3438C4 ::v20(){vfunc_called(this, "_ZN7S3438C43v20Ev");}
void  S3438C4 ::v21(){vfunc_called(this, "_ZN7S3438C43v21Ev");}
void  S3438C4 ::v22(){vfunc_called(this, "_ZN7S3438C43v22Ev");}
void  S3438C4 ::v23(){vfunc_called(this, "_ZN7S3438C43v23Ev");}
void  S3438C4 ::v24(){vfunc_called(this, "_ZN7S3438C43v24Ev");}
S3438C4 ::~S3438C4(){ note_dtor("S3438C4", this);} // tgen
S3438C4 ::S3438C4(){ note_ctor("S3438C4", this);} // tgen

static void Test_S3438C4()
{
  extern Class_Descriptor cd_S3438C4;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(93,233)];
    init_test(&cd_S3438C4, buf);
    S3438C4 *dp, &lv = *(dp=new (buf) S3438C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1472,928), "sizeof(S3438C4)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3438C4)");
    check_field_offset(lv, s3438c4f0, ABISELECT(16,4), "S3438C4.s3438c4f0");
    test_class_info(&lv, &cd_S3438C4);
    dp->~S3438C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3438C4(Test_S3438C4, "S3438C4", ABISELECT(1472,928));

#else // __cplusplus

extern void _ZN7S3438C4C1Ev();
extern void _ZN7S3438C4D1Ev();
Name_Map name_map_S3438C4[] = {
  NSPAIR(_ZN7S3438C4C1Ev),
  NSPAIR(_ZN7S3438C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S3438C4[];
extern void _ZN7S3438C43v16Ev();
extern void _ZN7S3438C43v17Ev();
extern void _ZN7S3438C43v18Ev();
extern void _ZN7S3438C43v19Ev();
extern void _ZN7S3438C43v20Ev();
extern void _ZN7S3438C43v21Ev();
extern void _ZN7S3438C43v22Ev();
extern void _ZN7S3438C43v23Ev();
extern void _ZN7S3438C43v24Ev();
static  VTBL_ENTRY vtc_S3438C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3438C4[0]),
  (VTBL_ENTRY)&_ZN7S3438C43v16Ev,
  (VTBL_ENTRY)&_ZN7S3438C43v17Ev,
  (VTBL_ENTRY)&_ZN7S3438C43v18Ev,
  (VTBL_ENTRY)&_ZN7S3438C43v19Ev,
  (VTBL_ENTRY)&_ZN7S3438C43v20Ev,
  (VTBL_ENTRY)&_ZN7S3438C43v21Ev,
  (VTBL_ENTRY)&_ZN7S3438C43v22Ev,
  (VTBL_ENTRY)&_ZN7S3438C43v23Ev,
  (VTBL_ENTRY)&_ZN7S3438C43v24Ev,
};
extern VTBL_ENTRY _ZTI7S3438C4[];
extern  VTBL_ENTRY _ZTV7S3438C4[];
Class_Descriptor cd_S3438C4 = {  "S3438C4", // class name
  0,0,//no base classes
  &(vtc_S3438C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(1472,928), // object size
  NSPAIRA(_ZTI7S3438C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S3438C4),11, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3438C1  : S3438C2 , virtual S3438C4 {
  int s3438c1f0;
  virtual void  v1(); // _ZN7S3438C12v1Ev
  virtual void  v2(); // _ZN7S3438C12v2Ev
  virtual void  v3(); // _ZN7S3438C12v3Ev
  virtual void  v4(); // _ZN7S3438C12v4Ev
  virtual void  v5(); // _ZN7S3438C12v5Ev
  virtual void  v6(); // _ZN7S3438C12v6Ev
  virtual void  v7(); // _ZN7S3438C12v7Ev
  virtual void  v8(); // _ZN7S3438C12v8Ev
  ~S3438C1(); // tgen
  S3438C1(); // tgen
};
//SIG(1 S3438C1) C1{ BC2{ BC3{ v9 v10 v11 v12 Fs:13 Fp FD[8]} v13 v14 v15 Fp[6]} VBC4{ v16 v17 v18 v19 v20 v21 v22 v23 v24 FC2[7]} v1 v2 v3 v4 v5 v6 v7 v8 Fi}


void  S3438C1 ::v1(){vfunc_called(this, "_ZN7S3438C12v1Ev");}
void  S3438C1 ::v2(){vfunc_called(this, "_ZN7S3438C12v2Ev");}
void  S3438C1 ::v3(){vfunc_called(this, "_ZN7S3438C12v3Ev");}
void  S3438C1 ::v4(){vfunc_called(this, "_ZN7S3438C12v4Ev");}
void  S3438C1 ::v5(){vfunc_called(this, "_ZN7S3438C12v5Ev");}
void  S3438C1 ::v6(){vfunc_called(this, "_ZN7S3438C12v6Ev");}
void  S3438C1 ::v7(){vfunc_called(this, "_ZN7S3438C12v7Ev");}
void  S3438C1 ::v8(){vfunc_called(this, "_ZN7S3438C12v8Ev");}
S3438C1 ::~S3438C1(){ note_dtor("S3438C1", this);} // tgen
S3438C1 ::S3438C1(){ note_ctor("S3438C1", this);} // tgen

static void Test_S3438C1()
{
  extern Class_Descriptor cd_S3438C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(107,267)];
    init_test(&cd_S3438C1, buf);
    S3438C1 *dp, &lv = *(dp=new (buf) S3438C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1696,1064), "sizeof(S3438C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3438C1)");
    check_base_class_offset(lv, (S3438C3*)(S3438C2*), 0, "S3438C1");
    check_base_class_offset(lv, (S3438C2*), 0, "S3438C1");
    check_base_class_offset(lv, (S3438C4*), ABISELECT(224,136), "S3438C1");
    check_field_offset(lv, s3438c1f0, ABISELECT(208,132), "S3438C1.s3438c1f0");
    test_class_info(&lv, &cd_S3438C1);
    dp->~S3438C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3438C1(Test_S3438C1, "S3438C1", ABISELECT(1696,1064));

#else // __cplusplus

extern void _ZN7S3438C1C1Ev();
extern void _ZN7S3438C1D1Ev();
Name_Map name_map_S3438C1[] = {
  NSPAIR(_ZN7S3438C1C1Ev),
  NSPAIR(_ZN7S3438C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3438C3;
extern VTBL_ENTRY _ZTI7S3438C3[];
extern  VTBL_ENTRY _ZTV7S3438C3[];
extern Class_Descriptor cd_S3438C2;
extern VTBL_ENTRY _ZTI7S3438C2[];
extern  VTBL_ENTRY _ZTV7S3438C2[];
extern Class_Descriptor cd_S3438C4;
extern VTBL_ENTRY _ZTI7S3438C4[];
extern  VTBL_ENTRY _ZTV7S3438C4[];
static Base_Class bases_S3438C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3438C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S3438C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3438C4,    ABISELECT(224,136), //bcp->offset
    18, //bcp->virtual_function_table_offset
    11, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S3438C1[];
extern void _ZN7S3438C32v9Ev();
extern void _ZN7S3438C33v10Ev();
extern void _ZN7S3438C33v11Ev();
extern void _ZN7S3438C33v12Ev();
extern void _ZN7S3438C23v13Ev();
extern void _ZN7S3438C23v14Ev();
extern void _ZN7S3438C23v15Ev();
extern void _ZN7S3438C12v1Ev();
extern void _ZN7S3438C12v2Ev();
extern void _ZN7S3438C12v3Ev();
extern void _ZN7S3438C12v4Ev();
extern void _ZN7S3438C12v5Ev();
extern void _ZN7S3438C12v6Ev();
extern void _ZN7S3438C12v7Ev();
extern void _ZN7S3438C12v8Ev();
extern void _ZN7S3438C43v16Ev();
extern void _ZN7S3438C43v17Ev();
extern void _ZN7S3438C43v18Ev();
extern void _ZN7S3438C43v19Ev();
extern void _ZN7S3438C43v20Ev();
extern void _ZN7S3438C43v21Ev();
extern void _ZN7S3438C43v22Ev();
extern void _ZN7S3438C43v23Ev();
extern void _ZN7S3438C43v24Ev();
static  VTBL_ENTRY vtc_S3438C1[] = {
  ABISELECT(224,136),
  0,
  (VTBL_ENTRY)&(_ZTI7S3438C1[0]),
  (VTBL_ENTRY)&_ZN7S3438C32v9Ev,
  (VTBL_ENTRY)&_ZN7S3438C33v10Ev,
  (VTBL_ENTRY)&_ZN7S3438C33v11Ev,
  (VTBL_ENTRY)&_ZN7S3438C33v12Ev,
  (VTBL_ENTRY)&_ZN7S3438C23v13Ev,
  (VTBL_ENTRY)&_ZN7S3438C23v14Ev,
  (VTBL_ENTRY)&_ZN7S3438C23v15Ev,
  (VTBL_ENTRY)&_ZN7S3438C12v1Ev,
  (VTBL_ENTRY)&_ZN7S3438C12v2Ev,
  (VTBL_ENTRY)&_ZN7S3438C12v3Ev,
  (VTBL_ENTRY)&_ZN7S3438C12v4Ev,
  (VTBL_ENTRY)&_ZN7S3438C12v5Ev,
  (VTBL_ENTRY)&_ZN7S3438C12v6Ev,
  (VTBL_ENTRY)&_ZN7S3438C12v7Ev,
  (VTBL_ENTRY)&_ZN7S3438C12v8Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-224,-136),
  (VTBL_ENTRY)&(_ZTI7S3438C1[0]),
  (VTBL_ENTRY)&_ZN7S3438C43v16Ev,
  (VTBL_ENTRY)&_ZN7S3438C43v17Ev,
  (VTBL_ENTRY)&_ZN7S3438C43v18Ev,
  (VTBL_ENTRY)&_ZN7S3438C43v19Ev,
  (VTBL_ENTRY)&_ZN7S3438C43v20Ev,
  (VTBL_ENTRY)&_ZN7S3438C43v21Ev,
  (VTBL_ENTRY)&_ZN7S3438C43v22Ev,
  (VTBL_ENTRY)&_ZN7S3438C43v23Ev,
  (VTBL_ENTRY)&_ZN7S3438C43v24Ev,
};
extern VTBL_ENTRY _ZTV7S3438C1[];
static  VTT_ENTRY vtt_S3438C1[] = {
  {&(_ZTV7S3438C1[3]),  3,38},
  {&(_ZTV7S3438C1[29]),  29,38},
};
extern VTBL_ENTRY _ZTI7S3438C1[];
extern  VTBL_ENTRY _ZTV7S3438C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3438C1[];
Class_Descriptor cd_S3438C1 = {  "S3438C1", // class name
  bases_S3438C1, 3,
  &(vtc_S3438C1[0]), // expected_vtbl_contents
  &(vtt_S3438C1[0]), // expected_vtt_contents
  ABISELECT(1696,1064), // object size
  NSPAIRA(_ZTI7S3438C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S3438C1),38, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3438C1),2, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4555C3  {
  virtual  ~S4555C3(); // _ZN7S4555C3D1Ev
  virtual void  v2(); // _ZN7S4555C32v2Ev
  virtual void  v3(); // _ZN7S4555C32v3Ev
  virtual void  v4(); // _ZN7S4555C32v4Ev
  virtual void  v5(); // _ZN7S4555C32v5Ev
  virtual void  v6(); // _ZN7S4555C32v6Ev
  virtual void  v7(); // _ZN7S4555C32v7Ev
  virtual void  v8(); // _ZN7S4555C32v8Ev
  virtual void  v9(); // _ZN7S4555C32v9Ev
  virtual void  v10(); // _ZN7S4555C33v10Ev
  virtual void  v11(); // _ZN7S4555C33v11Ev
  virtual void  v12(); // _ZN7S4555C33v12Ev
  virtual void  v13(); // _ZN7S4555C33v13Ev
  virtual void  v14(); // _ZN7S4555C33v14Ev
  S4555C3(); // tgen
};
//SIG(-1 S4555C3) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13}


 S4555C3 ::~S4555C3(){ note_dtor("S4555C3", this);}
void  S4555C3 ::v2(){vfunc_called(this, "_ZN7S4555C32v2Ev");}
void  S4555C3 ::v3(){vfunc_called(this, "_ZN7S4555C32v3Ev");}
void  S4555C3 ::v4(){vfunc_called(this, "_ZN7S4555C32v4Ev");}
void  S4555C3 ::v5(){vfunc_called(this, "_ZN7S4555C32v5Ev");}
void  S4555C3 ::v6(){vfunc_called(this, "_ZN7S4555C32v6Ev");}
void  S4555C3 ::v7(){vfunc_called(this, "_ZN7S4555C32v7Ev");}
void  S4555C3 ::v8(){vfunc_called(this, "_ZN7S4555C32v8Ev");}
void  S4555C3 ::v9(){vfunc_called(this, "_ZN7S4555C32v9Ev");}
void  S4555C3 ::v10(){vfunc_called(this, "_ZN7S4555C33v10Ev");}
void  S4555C3 ::v11(){vfunc_called(this, "_ZN7S4555C33v11Ev");}
void  S4555C3 ::v12(){vfunc_called(this, "_ZN7S4555C33v12Ev");}
void  S4555C3 ::v13(){vfunc_called(this, "_ZN7S4555C33v13Ev");}
void  S4555C3 ::v14(){vfunc_called(this, "_ZN7S4555C33v14Ev");}
S4555C3 ::S4555C3(){ note_ctor("S4555C3", this);} // tgen

static void Test_S4555C3()
{
  extern Class_Descriptor cd_S4555C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S4555C3, buf);
    S4555C3 *dp, &lv = *(dp=new (buf) S4555C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S4555C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4555C3)");
    test_class_info(&lv, &cd_S4555C3);
    dp->~S4555C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4555C3(Test_S4555C3, "S4555C3", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S4555C3C1Ev();
extern void _ZN7S4555C3D1Ev();
Name_Map name_map_S4555C3[] = {
  NSPAIR(_ZN7S4555C3C1Ev),
  NSPAIR(_ZN7S4555C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4555C3[];
extern void _ZN7S4555C3D1Ev();
extern void _ZN7S4555C3D0Ev();
extern void _ZN7S4555C32v2Ev();
extern void _ZN7S4555C32v3Ev();
extern void _ZN7S4555C32v4Ev();
extern void _ZN7S4555C32v5Ev();
extern void _ZN7S4555C32v6Ev();
extern void _ZN7S4555C32v7Ev();
extern void _ZN7S4555C32v8Ev();
extern void _ZN7S4555C32v9Ev();
extern void _ZN7S4555C33v10Ev();
extern void _ZN7S4555C33v11Ev();
extern void _ZN7S4555C33v12Ev();
extern void _ZN7S4555C33v13Ev();
extern void _ZN7S4555C33v14Ev();
static  VTBL_ENTRY vtc_S4555C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4555C3[0]),
  (VTBL_ENTRY)&_ZN7S4555C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4555C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4555C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4555C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4555C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4555C32v5Ev,
  (VTBL_ENTRY)&_ZN7S4555C32v6Ev,
  (VTBL_ENTRY)&_ZN7S4555C32v7Ev,
  (VTBL_ENTRY)&_ZN7S4555C32v8Ev,
  (VTBL_ENTRY)&_ZN7S4555C32v9Ev,
  (VTBL_ENTRY)&_ZN7S4555C33v10Ev,
  (VTBL_ENTRY)&_ZN7S4555C33v11Ev,
  (VTBL_ENTRY)&_ZN7S4555C33v12Ev,
  (VTBL_ENTRY)&_ZN7S4555C33v13Ev,
  (VTBL_ENTRY)&_ZN7S4555C33v14Ev,
};
extern VTBL_ENTRY _ZTI7S4555C3[];
extern  VTBL_ENTRY _ZTV7S4555C3[];
Class_Descriptor cd_S4555C3 = {  "S4555C3", // class name
  0,0,//no base classes
  &(vtc_S4555C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S4555C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4555C3),17, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4555C2  : S4555C3 {
  void *s4555c2f0[8];
  char s4555c2f1[3];
  int s4555c2f2[3];
  virtual  ~S4555C2(); // _ZN7S4555C2D1Ev
  virtual void  v15(); // _ZN7S4555C23v15Ev
  virtual void  v16(); // _ZN7S4555C23v16Ev
  virtual void  v17(); // _ZN7S4555C23v17Ev
  virtual void  v18(); // _ZN7S4555C23v18Ev
  virtual void  v19(); // _ZN7S4555C23v19Ev
  virtual void  v20(); // _ZN7S4555C23v20Ev
  virtual void  v21(); // _ZN7S4555C23v21Ev
  virtual void  v22(); // _ZN7S4555C23v22Ev
  virtual void  v23(); // _ZN7S4555C23v23Ev
  virtual void  v24(); // _ZN7S4555C23v24Ev
  virtual void  v25(); // _ZN7S4555C23v25Ev
  virtual void  v26(); // _ZN7S4555C23v26Ev
  virtual void  v27(); // _ZN7S4555C23v27Ev
  S4555C2(); // tgen
};
//SIG(-1 S4555C2) C1{ BC2{ vd v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 Fp[8] Fc[3] Fi[3]}


 S4555C2 ::~S4555C2(){ note_dtor("S4555C2", this);}
void  S4555C2 ::v15(){vfunc_called(this, "_ZN7S4555C23v15Ev");}
void  S4555C2 ::v16(){vfunc_called(this, "_ZN7S4555C23v16Ev");}
void  S4555C2 ::v17(){vfunc_called(this, "_ZN7S4555C23v17Ev");}
void  S4555C2 ::v18(){vfunc_called(this, "_ZN7S4555C23v18Ev");}
void  S4555C2 ::v19(){vfunc_called(this, "_ZN7S4555C23v19Ev");}
void  S4555C2 ::v20(){vfunc_called(this, "_ZN7S4555C23v20Ev");}
void  S4555C2 ::v21(){vfunc_called(this, "_ZN7S4555C23v21Ev");}
void  S4555C2 ::v22(){vfunc_called(this, "_ZN7S4555C23v22Ev");}
void  S4555C2 ::v23(){vfunc_called(this, "_ZN7S4555C23v23Ev");}
void  S4555C2 ::v24(){vfunc_called(this, "_ZN7S4555C23v24Ev");}
void  S4555C2 ::v25(){vfunc_called(this, "_ZN7S4555C23v25Ev");}
void  S4555C2 ::v26(){vfunc_called(this, "_ZN7S4555C23v26Ev");}
void  S4555C2 ::v27(){vfunc_called(this, "_ZN7S4555C23v27Ev");}
S4555C2 ::S4555C2(){ note_ctor("S4555C2", this);} // tgen

static void Test_S4555C2()
{
  extern Class_Descriptor cd_S4555C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(12,14)];
    init_test(&cd_S4555C2, buf);
    S4555C2 *dp, &lv = *(dp=new (buf) S4555C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(88,52), "sizeof(S4555C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4555C2)");
    check_base_class_offset(lv, (S4555C3*), 0, "S4555C2");
    check_field_offset(lv, s4555c2f0, ABISELECT(8,4), "S4555C2.s4555c2f0");
    check_field_offset(lv, s4555c2f1, ABISELECT(72,36), "S4555C2.s4555c2f1");
    check_field_offset(lv, s4555c2f2, ABISELECT(76,40), "S4555C2.s4555c2f2");
    test_class_info(&lv, &cd_S4555C2);
    dp->~S4555C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4555C2(Test_S4555C2, "S4555C2", ABISELECT(88,52));

#else // __cplusplus

extern void _ZN7S4555C2C1Ev();
extern void _ZN7S4555C2D1Ev();
Name_Map name_map_S4555C2[] = {
  NSPAIR(_ZN7S4555C2C1Ev),
  NSPAIR(_ZN7S4555C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4555C3;
extern VTBL_ENTRY _ZTI7S4555C3[];
extern  VTBL_ENTRY _ZTV7S4555C3[];
static Base_Class bases_S4555C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4555C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4555C2[];
extern void _ZN7S4555C2D1Ev();
extern void _ZN7S4555C2D0Ev();
extern void _ZN7S4555C32v2Ev();
extern void _ZN7S4555C32v3Ev();
extern void _ZN7S4555C32v4Ev();
extern void _ZN7S4555C32v5Ev();
extern void _ZN7S4555C32v6Ev();
extern void _ZN7S4555C32v7Ev();
extern void _ZN7S4555C32v8Ev();
extern void _ZN7S4555C32v9Ev();
extern void _ZN7S4555C33v10Ev();
extern void _ZN7S4555C33v11Ev();
extern void _ZN7S4555C33v12Ev();
extern void _ZN7S4555C33v13Ev();
extern void _ZN7S4555C33v14Ev();
extern void _ZN7S4555C23v15Ev();
extern void _ZN7S4555C23v16Ev();
extern void _ZN7S4555C23v17Ev();
extern void _ZN7S4555C23v18Ev();
extern void _ZN7S4555C23v19Ev();
extern void _ZN7S4555C23v20Ev();
extern void _ZN7S4555C23v21Ev();
extern void _ZN7S4555C23v22Ev();
extern void _ZN7S4555C23v23Ev();
extern void _ZN7S4555C23v24Ev();
extern void _ZN7S4555C23v25Ev();
extern void _ZN7S4555C23v26Ev();
extern void _ZN7S4555C23v27Ev();
static  VTBL_ENTRY vtc_S4555C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4555C2[0]),
  (VTBL_ENTRY)&_ZN7S4555C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4555C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4555C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4555C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4555C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4555C32v5Ev,
  (VTBL_ENTRY)&_ZN7S4555C32v6Ev,
  (VTBL_ENTRY)&_ZN7S4555C32v7Ev,
  (VTBL_ENTRY)&_ZN7S4555C32v8Ev,
  (VTBL_ENTRY)&_ZN7S4555C32v9Ev,
  (VTBL_ENTRY)&_ZN7S4555C33v10Ev,
  (VTBL_ENTRY)&_ZN7S4555C33v11Ev,
  (VTBL_ENTRY)&_ZN7S4555C33v12Ev,
  (VTBL_ENTRY)&_ZN7S4555C33v13Ev,
  (VTBL_ENTRY)&_ZN7S4555C33v14Ev,
  (VTBL_ENTRY)&_ZN7S4555C23v15Ev,
  (VTBL_ENTRY)&_ZN7S4555C23v16Ev,
  (VTBL_ENTRY)&_ZN7S4555C23v17Ev,
  (VTBL_ENTRY)&_ZN7S4555C23v18Ev,
  (VTBL_ENTRY)&_ZN7S4555C23v19Ev,
  (VTBL_ENTRY)&_ZN7S4555C23v20Ev,
  (VTBL_ENTRY)&_ZN7S4555C23v21Ev,
  (VTBL_ENTRY)&_ZN7S4555C23v22Ev,
  (VTBL_ENTRY)&_ZN7S4555C23v23Ev,
  (VTBL_ENTRY)&_ZN7S4555C23v24Ev,
  (VTBL_ENTRY)&_ZN7S4555C23v25Ev,
  (VTBL_ENTRY)&_ZN7S4555C23v26Ev,
  (VTBL_ENTRY)&_ZN7S4555C23v27Ev,
};
extern VTBL_ENTRY _ZTI7S4555C2[];
extern  VTBL_ENTRY _ZTV7S4555C2[];
Class_Descriptor cd_S4555C2 = {  "S4555C2", // class name
  bases_S4555C2, 1,
  &(vtc_S4555C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(88,52), // object size
  NSPAIRA(_ZTI7S4555C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4555C2),30, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4555C1  : S4555C2 {
  virtual void  v1(); // _ZN7S4555C12v1Ev
  ~S4555C1(); // tgen
  S4555C1(); // tgen
};
//SIG(1 S4555C1) C1{ BC2{ BC3{ vd v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14} vd v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 Fp[8] Fc[3] Fi[3]} v1}


void  S4555C1 ::v1(){vfunc_called(this, "_ZN7S4555C12v1Ev");}
S4555C1 ::~S4555C1(){ note_dtor("S4555C1", this);} // tgen
S4555C1 ::S4555C1(){ note_ctor("S4555C1", this);} // tgen

static void Test_S4555C1()
{
  extern Class_Descriptor cd_S4555C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(12,14)];
    init_test(&cd_S4555C1, buf);
    S4555C1 *dp, &lv = *(dp=new (buf) S4555C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(88,52), "sizeof(S4555C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4555C1)");
    check_base_class_offset(lv, (S4555C3*)(S4555C2*), 0, "S4555C1");
    check_base_class_offset(lv, (S4555C2*), 0, "S4555C1");
    test_class_info(&lv, &cd_S4555C1);
    dp->~S4555C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4555C1(Test_S4555C1, "S4555C1", ABISELECT(88,52));

#else // __cplusplus

extern void _ZN7S4555C1C1Ev();
extern void _ZN7S4555C1D1Ev();
Name_Map name_map_S4555C1[] = {
  NSPAIR(_ZN7S4555C1C1Ev),
  NSPAIR(_ZN7S4555C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4555C3;
extern VTBL_ENTRY _ZTI7S4555C3[];
extern  VTBL_ENTRY _ZTV7S4555C3[];
extern Class_Descriptor cd_S4555C2;
extern VTBL_ENTRY _ZTI7S4555C2[];
extern  VTBL_ENTRY _ZTV7S4555C2[];
static Base_Class bases_S4555C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4555C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S4555C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4555C1[];
extern void _ZN7S4555C1D1Ev();
extern void _ZN7S4555C1D0Ev();
extern void _ZN7S4555C32v2Ev();
extern void _ZN7S4555C32v3Ev();
extern void _ZN7S4555C32v4Ev();
extern void _ZN7S4555C32v5Ev();
extern void _ZN7S4555C32v6Ev();
extern void _ZN7S4555C32v7Ev();
extern void _ZN7S4555C32v8Ev();
extern void _ZN7S4555C32v9Ev();
extern void _ZN7S4555C33v10Ev();
extern void _ZN7S4555C33v11Ev();
extern void _ZN7S4555C33v12Ev();
extern void _ZN7S4555C33v13Ev();
extern void _ZN7S4555C33v14Ev();
extern void _ZN7S4555C23v15Ev();
extern void _ZN7S4555C23v16Ev();
extern void _ZN7S4555C23v17Ev();
extern void _ZN7S4555C23v18Ev();
extern void _ZN7S4555C23v19Ev();
extern void _ZN7S4555C23v20Ev();
extern void _ZN7S4555C23v21Ev();
extern void _ZN7S4555C23v22Ev();
extern void _ZN7S4555C23v23Ev();
extern void _ZN7S4555C23v24Ev();
extern void _ZN7S4555C23v25Ev();
extern void _ZN7S4555C23v26Ev();
extern void _ZN7S4555C23v27Ev();
extern void _ZN7S4555C12v1Ev();
static  VTBL_ENTRY vtc_S4555C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4555C1[0]),
  (VTBL_ENTRY)&_ZN7S4555C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4555C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4555C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4555C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4555C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4555C32v5Ev,
  (VTBL_ENTRY)&_ZN7S4555C32v6Ev,
  (VTBL_ENTRY)&_ZN7S4555C32v7Ev,
  (VTBL_ENTRY)&_ZN7S4555C32v8Ev,
  (VTBL_ENTRY)&_ZN7S4555C32v9Ev,
  (VTBL_ENTRY)&_ZN7S4555C33v10Ev,
  (VTBL_ENTRY)&_ZN7S4555C33v11Ev,
  (VTBL_ENTRY)&_ZN7S4555C33v12Ev,
  (VTBL_ENTRY)&_ZN7S4555C33v13Ev,
  (VTBL_ENTRY)&_ZN7S4555C33v14Ev,
  (VTBL_ENTRY)&_ZN7S4555C23v15Ev,
  (VTBL_ENTRY)&_ZN7S4555C23v16Ev,
  (VTBL_ENTRY)&_ZN7S4555C23v17Ev,
  (VTBL_ENTRY)&_ZN7S4555C23v18Ev,
  (VTBL_ENTRY)&_ZN7S4555C23v19Ev,
  (VTBL_ENTRY)&_ZN7S4555C23v20Ev,
  (VTBL_ENTRY)&_ZN7S4555C23v21Ev,
  (VTBL_ENTRY)&_ZN7S4555C23v22Ev,
  (VTBL_ENTRY)&_ZN7S4555C23v23Ev,
  (VTBL_ENTRY)&_ZN7S4555C23v24Ev,
  (VTBL_ENTRY)&_ZN7S4555C23v25Ev,
  (VTBL_ENTRY)&_ZN7S4555C23v26Ev,
  (VTBL_ENTRY)&_ZN7S4555C23v27Ev,
  (VTBL_ENTRY)&_ZN7S4555C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S4555C1[];
extern  VTBL_ENTRY _ZTV7S4555C1[];
Class_Descriptor cd_S4555C1 = {  "S4555C1", // class name
  bases_S4555C1, 2,
  &(vtc_S4555C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(88,52), // object size
  NSPAIRA(_ZTI7S4555C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4555C1),31, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S10305C2_nt  {
  virtual  ~S10305C2_nt(); // _ZN11S10305C2_ntD1Ev
  virtual void  v9(); // _ZN11S10305C2_nt2v9Ev
  virtual void  v10(); // _ZN11S10305C2_nt3v10Ev
  virtual void  v11(); // _ZN11S10305C2_nt3v11Ev
  virtual void  v12(); // _ZN11S10305C2_nt3v12Ev
  virtual void  v13(); // _ZN11S10305C2_nt3v13Ev
  virtual void  v14(); // _ZN11S10305C2_nt3v14Ev
  virtual void  v15(); // _ZN11S10305C2_nt3v15Ev
  virtual void  v16(); // _ZN11S10305C2_nt3v16Ev
  virtual void  v17(); // _ZN11S10305C2_nt3v17Ev
  virtual void  v18(); // _ZN11S10305C2_nt3v18Ev
  S10305C2_nt(); // tgen
};
//SIG(-1 S10305C2_nt) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10}


 S10305C2_nt ::~S10305C2_nt(){ note_dtor("S10305C2_nt", this);}
void  S10305C2_nt ::v9(){vfunc_called(this, "_ZN11S10305C2_nt2v9Ev");}
void  S10305C2_nt ::v10(){vfunc_called(this, "_ZN11S10305C2_nt3v10Ev");}
void  S10305C2_nt ::v11(){vfunc_called(this, "_ZN11S10305C2_nt3v11Ev");}
void  S10305C2_nt ::v12(){vfunc_called(this, "_ZN11S10305C2_nt3v12Ev");}
void  S10305C2_nt ::v13(){vfunc_called(this, "_ZN11S10305C2_nt3v13Ev");}
void  S10305C2_nt ::v14(){vfunc_called(this, "_ZN11S10305C2_nt3v14Ev");}
void  S10305C2_nt ::v15(){vfunc_called(this, "_ZN11S10305C2_nt3v15Ev");}
void  S10305C2_nt ::v16(){vfunc_called(this, "_ZN11S10305C2_nt3v16Ev");}
void  S10305C2_nt ::v17(){vfunc_called(this, "_ZN11S10305C2_nt3v17Ev");}
void  S10305C2_nt ::v18(){vfunc_called(this, "_ZN11S10305C2_nt3v18Ev");}
S10305C2_nt ::S10305C2_nt(){ note_ctor("S10305C2_nt", this);} // tgen

//skip512 S10305C2_nt

#else // __cplusplus

extern void _ZN11S10305C2_ntC1Ev();
extern void _ZN11S10305C2_ntD1Ev();
Name_Map name_map_S10305C2_nt[] = {
  NSPAIR(_ZN11S10305C2_ntC1Ev),
  NSPAIR(_ZN11S10305C2_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI11S10305C2_nt[];
extern void _ZN11S10305C2_ntD1Ev();
extern void _ZN11S10305C2_ntD0Ev();
extern void _ZN11S10305C2_nt2v9Ev();
extern void _ZN11S10305C2_nt3v10Ev();
extern void _ZN11S10305C2_nt3v11Ev();
extern void _ZN11S10305C2_nt3v12Ev();
extern void _ZN11S10305C2_nt3v13Ev();
extern void _ZN11S10305C2_nt3v14Ev();
extern void _ZN11S10305C2_nt3v15Ev();
extern void _ZN11S10305C2_nt3v16Ev();
extern void _ZN11S10305C2_nt3v17Ev();
extern void _ZN11S10305C2_nt3v18Ev();
static  VTBL_ENTRY vtc_S10305C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI11S10305C2_nt[0]),
  (VTBL_ENTRY)&_ZN11S10305C2_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S10305C2_ntD0Ev,
  (VTBL_ENTRY)&_ZN11S10305C2_nt2v9Ev,
  (VTBL_ENTRY)&_ZN11S10305C2_nt3v10Ev,
  (VTBL_ENTRY)&_ZN11S10305C2_nt3v11Ev,
  (VTBL_ENTRY)&_ZN11S10305C2_nt3v12Ev,
  (VTBL_ENTRY)&_ZN11S10305C2_nt3v13Ev,
  (VTBL_ENTRY)&_ZN11S10305C2_nt3v14Ev,
  (VTBL_ENTRY)&_ZN11S10305C2_nt3v15Ev,
  (VTBL_ENTRY)&_ZN11S10305C2_nt3v16Ev,
  (VTBL_ENTRY)&_ZN11S10305C2_nt3v17Ev,
  (VTBL_ENTRY)&_ZN11S10305C2_nt3v18Ev,
};
extern VTBL_ENTRY _ZTI11S10305C2_nt[];
VTBL_ENTRY *P__ZTI11S10305C2_nt = _ZTI11S10305C2_nt; 
extern  VTBL_ENTRY _ZTV11S10305C2_nt[];
Class_Descriptor cd_S10305C2_nt = {  "S10305C2_nt", // class name
  0,0,//no base classes
  &(vtc_S10305C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI11S10305C2_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV11S10305C2_nt),14, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S10305C5  {
  int s10305c5f0[3];
  ::S836C21_nt s10305c5f1;
  ::S836C21_nt s10305c5f2;
  ::S836C21_nt s10305c5f3;
  __tsi64 s10305c5f4;
};
//SIG(-1 S10305C5) C1{ Fi[3] FC2{ m Fp Fi FC3{ m}} FC2 FC2 FL}



static void Test_S10305C5()
{
  {
    init_simple_test("S10305C5");
    S10305C5 lv;
    check2(sizeof(lv), ABISELECT(72,56), "sizeof(S10305C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10305C5)");
    check_field_offset(lv, s10305c5f0, 0, "S10305C5.s10305c5f0");
    check_field_offset(lv, s10305c5f1, ABISELECT(16,12), "S10305C5.s10305c5f1");
    check_field_offset(lv, s10305c5f2, ABISELECT(32,24), "S10305C5.s10305c5f2");
    check_field_offset(lv, s10305c5f3, ABISELECT(48,36), "S10305C5.s10305c5f3");
    check_field_offset(lv, s10305c5f4, ABISELECT(64,48), "S10305C5.s10305c5f4");
  }
}
static Arrange_To_Call_Me vS10305C5(Test_S10305C5, "S10305C5", ABISELECT(72,56));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S10305C1  : S10305C2_nt {
  ::S836C21_nt s10305c1f0;
  ::S10305C5 s10305c1f1;
  void *s10305c1f2[2];
  virtual  ~S10305C1(); // _ZN8S10305C1D1Ev
  virtual void  v1(); // _ZN8S10305C12v1Ev
  virtual void  v2(); // _ZN8S10305C12v2Ev
  virtual void  v3(); // _ZN8S10305C12v3Ev
  virtual void  v4(); // _ZN8S10305C12v4Ev
  virtual void  v5(); // _ZN8S10305C12v5Ev
  virtual void  v6(); // _ZN8S10305C12v6Ev
  virtual void  v7(); // _ZN8S10305C12v7Ev
  virtual void  v8(); // _ZN8S10305C12v8Ev
  S10305C1(); // tgen
};
//SIG(1 S10305C1) C1{ BC2{ vd v9 v10 v11 v12 v13 v14 v15 v16 v17 v18} vd v1 v2 v3 v4 v5 v6 v7 v8 FC3{ m Fp Fi FC4{ m}} FC5{ Fi[3] FC3 FC3 FC3 FL} Fp[2]}


 S10305C1 ::~S10305C1(){ note_dtor("S10305C1", this);}
void  S10305C1 ::v1(){vfunc_called(this, "_ZN8S10305C12v1Ev");}
void  S10305C1 ::v2(){vfunc_called(this, "_ZN8S10305C12v2Ev");}
void  S10305C1 ::v3(){vfunc_called(this, "_ZN8S10305C12v3Ev");}
void  S10305C1 ::v4(){vfunc_called(this, "_ZN8S10305C12v4Ev");}
void  S10305C1 ::v5(){vfunc_called(this, "_ZN8S10305C12v5Ev");}
void  S10305C1 ::v6(){vfunc_called(this, "_ZN8S10305C12v6Ev");}
void  S10305C1 ::v7(){vfunc_called(this, "_ZN8S10305C12v7Ev");}
void  S10305C1 ::v8(){vfunc_called(this, "_ZN8S10305C12v8Ev");}
S10305C1 ::S10305C1(){ note_ctor("S10305C1", this);} // tgen

static void Test_S10305C1()
{
  extern Class_Descriptor cd_S10305C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(15,21)];
    init_test(&cd_S10305C1, buf);
    S10305C1 *dp, &lv = *(dp=new (buf) S10305C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(112,80), "sizeof(S10305C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10305C1)");
    check_base_class_offset(lv, (S10305C2_nt*), 0, "S10305C1");
    check_field_offset(lv, s10305c1f0, ABISELECT(8,4), "S10305C1.s10305c1f0");
    check_field_offset(lv, s10305c1f1, ABISELECT(24,16), "S10305C1.s10305c1f1");
    check_field_offset(lv, s10305c1f2, ABISELECT(96,72), "S10305C1.s10305c1f2");
    test_class_info(&lv, &cd_S10305C1);
    dp->~S10305C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10305C1(Test_S10305C1, "S10305C1", ABISELECT(112,80));

#else // __cplusplus

extern void _ZN8S10305C1C1Ev();
extern void _ZN8S10305C1D1Ev();
Name_Map name_map_S10305C1[] = {
  NSPAIR(_ZN8S10305C1C1Ev),
  NSPAIR(_ZN8S10305C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10305C2_nt;
extern VTBL_ENTRY _ZTI11S10305C2_nt[];
extern  VTBL_ENTRY _ZTV11S10305C2_nt[];
static Base_Class bases_S10305C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10305C2_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S10305C1[];
extern void _ZN8S10305C1D1Ev();
extern void _ZN8S10305C1D0Ev();
extern void _ZN11S10305C2_nt2v9Ev();
extern void _ZN11S10305C2_nt3v10Ev();
extern void _ZN11S10305C2_nt3v11Ev();
extern void _ZN11S10305C2_nt3v12Ev();
extern void _ZN11S10305C2_nt3v13Ev();
extern void _ZN11S10305C2_nt3v14Ev();
extern void _ZN11S10305C2_nt3v15Ev();
extern void _ZN11S10305C2_nt3v16Ev();
extern void _ZN11S10305C2_nt3v17Ev();
extern void _ZN11S10305C2_nt3v18Ev();
extern void _ZN8S10305C12v1Ev();
extern void _ZN8S10305C12v2Ev();
extern void _ZN8S10305C12v3Ev();
extern void _ZN8S10305C12v4Ev();
extern void _ZN8S10305C12v5Ev();
extern void _ZN8S10305C12v6Ev();
extern void _ZN8S10305C12v7Ev();
extern void _ZN8S10305C12v8Ev();
static  VTBL_ENTRY vtc_S10305C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S10305C1[0]),
  (VTBL_ENTRY)&_ZN8S10305C1D1Ev,
  (VTBL_ENTRY)&_ZN8S10305C1D0Ev,
  (VTBL_ENTRY)&_ZN11S10305C2_nt2v9Ev,
  (VTBL_ENTRY)&_ZN11S10305C2_nt3v10Ev,
  (VTBL_ENTRY)&_ZN11S10305C2_nt3v11Ev,
  (VTBL_ENTRY)&_ZN11S10305C2_nt3v12Ev,
  (VTBL_ENTRY)&_ZN11S10305C2_nt3v13Ev,
  (VTBL_ENTRY)&_ZN11S10305C2_nt3v14Ev,
  (VTBL_ENTRY)&_ZN11S10305C2_nt3v15Ev,
  (VTBL_ENTRY)&_ZN11S10305C2_nt3v16Ev,
  (VTBL_ENTRY)&_ZN11S10305C2_nt3v17Ev,
  (VTBL_ENTRY)&_ZN11S10305C2_nt3v18Ev,
  (VTBL_ENTRY)&_ZN8S10305C12v1Ev,
  (VTBL_ENTRY)&_ZN8S10305C12v2Ev,
  (VTBL_ENTRY)&_ZN8S10305C12v3Ev,
  (VTBL_ENTRY)&_ZN8S10305C12v4Ev,
  (VTBL_ENTRY)&_ZN8S10305C12v5Ev,
  (VTBL_ENTRY)&_ZN8S10305C12v6Ev,
  (VTBL_ENTRY)&_ZN8S10305C12v7Ev,
  (VTBL_ENTRY)&_ZN8S10305C12v8Ev,
};
extern VTBL_ENTRY _ZTI8S10305C1[];
extern  VTBL_ENTRY _ZTV8S10305C1[];
Class_Descriptor cd_S10305C1 = {  "S10305C1", // class name
  bases_S10305C1, 1,
  &(vtc_S10305C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(112,80), // object size
  NSPAIRA(_ZTI8S10305C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S10305C1),22, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19592C4_nt  {
  void  mf19592c4(); // _ZN11S19592C4_nt9mf19592c4Ev
  virtual  ~S19592C4_nt(); // _ZN11S19592C4_ntD1Ev
  S19592C4_nt(); // tgen
};
//SIG(-1 S19592C4_nt) C1{ vd m}


void  S19592C4_nt ::mf19592c4(){}
 S19592C4_nt ::~S19592C4_nt(){ note_dtor("S19592C4_nt", this);}
S19592C4_nt ::S19592C4_nt(){ note_ctor("S19592C4_nt", this);} // tgen

//skip512 S19592C4_nt

#else // __cplusplus

extern void _ZN11S19592C4_ntC1Ev();
extern void _ZN11S19592C4_ntD1Ev();
Name_Map name_map_S19592C4_nt[] = {
  NSPAIR(_ZN11S19592C4_ntC1Ev),
  NSPAIR(_ZN11S19592C4_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI11S19592C4_nt[];
extern void _ZN11S19592C4_ntD1Ev();
extern void _ZN11S19592C4_ntD0Ev();
static  VTBL_ENTRY vtc_S19592C4_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI11S19592C4_nt[0]),
  (VTBL_ENTRY)&_ZN11S19592C4_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S19592C4_ntD0Ev,
};
extern VTBL_ENTRY _ZTI11S19592C4_nt[];
VTBL_ENTRY *P__ZTI11S19592C4_nt = _ZTI11S19592C4_nt; 
extern  VTBL_ENTRY _ZTV11S19592C4_nt[];
Class_Descriptor cd_S19592C4_nt = {  "S19592C4_nt", // class name
  0,0,//no base classes
  &(vtc_S19592C4_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI11S19592C4_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV11S19592C4_nt),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19592C5_nt  : S836C39 , virtual S19592C4_nt {
  __tsi64 s19592c5f0;
  virtual  ~S19592C5_nt(); // _ZN11S19592C5_ntD2Ev
  S19592C5_nt(); // tgen
};
//SIG(-1 S19592C5_nt) C1{ BC2{ m} VBC3{ vd m} vd FL}


 S19592C5_nt ::~S19592C5_nt(){ note_dtor("S19592C5_nt", this);}
S19592C5_nt ::S19592C5_nt(){ note_ctor("S19592C5_nt", this);} // tgen

//skip512 S19592C5_nt

#else // __cplusplus

extern void _ZN11S19592C5_ntC1Ev();
extern void _ZN11S19592C5_ntD2Ev();
Name_Map name_map_S19592C5_nt[] = {
  NSPAIR(_ZN11S19592C5_ntC1Ev),
  NSPAIR(_ZN11S19592C5_ntD2Ev),
  {0,0}
};
extern Class_Descriptor cd_S836C39;
extern VTBL_ENTRY _ZTI7S836C39[];
extern Class_Descriptor cd_S19592C4_nt;
extern VTBL_ENTRY _ZTI11S19592C4_nt[];
extern  VTBL_ENTRY _ZTV11S19592C4_nt[];
static Base_Class bases_S19592C5_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S836C39,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19592C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI11S19592C5_nt[];
extern void _ZN11S19592C5_ntD1Ev();
extern void _ZN11S19592C5_ntD0Ev();
static  VTBL_ENTRY vtc_S19592C5_nt[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI11S19592C5_nt[0]),
  (VTBL_ENTRY)&_ZN11S19592C5_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S19592C5_ntD0Ev,
};
extern VTBL_ENTRY _ZTV11S19592C5_nt[];
static  VTT_ENTRY vtt_S19592C5_nt[] = {
  {&(_ZTV11S19592C5_nt[4]),  4,6},
  {&(_ZTV11S19592C5_nt[4]),  4,6},
};
extern VTBL_ENTRY _ZTI11S19592C5_nt[];
VTBL_ENTRY *P__ZTI11S19592C5_nt = _ZTI11S19592C5_nt; 
extern  VTBL_ENTRY _ZTV11S19592C5_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S19592C5_nt[];
Class_Descriptor cd_S19592C5_nt = {  "S19592C5_nt", // class name
  bases_S19592C5_nt, 2,
  &(vtc_S19592C5_nt[0]), // expected_vtbl_contents
  &(vtt_S19592C5_nt[0]), // expected_vtt_contents
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI11S19592C5_nt),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV11S19592C5_nt),6, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT11S19592C5_nt),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19592C7_nt  : virtual S19592C5_nt , S836C39 , S19592C4_nt {
  void *s19592c7f0;
  virtual  ~S19592C7_nt(); // _ZN11S19592C7_ntD2Ev
  S19592C7_nt(); // tgen
};
//SIG(-1 S19592C7_nt) C1{ VBC2{ BC3{ m} VBC4{ vd m} vd FL} BC3 BC4 vd Fp}


 S19592C7_nt ::~S19592C7_nt(){ note_dtor("S19592C7_nt", this);}
S19592C7_nt ::S19592C7_nt(){ note_ctor("S19592C7_nt", this);} // tgen

//skip512 S19592C7_nt

#else // __cplusplus

extern void _ZN11S19592C7_ntC1Ev();
extern void _ZN11S19592C7_ntD2Ev();
Name_Map name_map_S19592C7_nt[] = {
  NSPAIR(_ZN11S19592C7_ntC1Ev),
  NSPAIR(_ZN11S19592C7_ntD2Ev),
  {0,0}
};
extern Class_Descriptor cd_S836C39;
extern VTBL_ENTRY _ZTI7S836C39[];
extern Class_Descriptor cd_S19592C4_nt;
extern VTBL_ENTRY _ZTI11S19592C4_nt[];
extern  VTBL_ENTRY _ZTV11S19592C4_nt[];
extern Class_Descriptor cd_S19592C5_nt;
extern VTBL_ENTRY _ZTI11S19592C5_nt[];
extern  VTBL_ENTRY _ZTV11S19592C5_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S19592C5_nt[];
extern Class_Descriptor cd_S836C39;
extern VTBL_ENTRY _ZTI7S836C39[];
extern Class_Descriptor cd_S19592C4_nt;
extern VTBL_ENTRY _ZTI11S19592C4_nt[];
extern  VTBL_ENTRY _ZTV11S19592C4_nt[];
static Base_Class bases_S19592C7_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S836C39,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S19592C4_nt,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S19592C5_nt,    ABISELECT(16,8), //bcp->offset
    6, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S836C39,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19592C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI11S19592C7_nt[];
extern void _ZN11S19592C7_ntD1Ev();
extern void _ZN11S19592C7_ntD0Ev();
extern void ABISELECT(_ZTv0_n24_N11S19592C7_ntD1Ev,_ZTv0_n12_N11S19592C7_ntD1Ev)();
extern void ABISELECT(_ZThn16_N11S19592C7_ntD1Ev,_ZThn8_N11S19592C7_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N11S19592C7_ntD0Ev,_ZTv0_n12_N11S19592C7_ntD0Ev)();
extern void ABISELECT(_ZThn16_N11S19592C7_ntD0Ev,_ZThn8_N11S19592C7_ntD0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19592C7_nt[] = {
  ABISELECT(16,8),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI11S19592C7_nt[0]),
  (VTBL_ENTRY)&_ZN11S19592C7_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S19592C7_ntD0Ev,
  0,
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI11S19592C7_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N11S19592C7_ntD1Ev,_ZTv0_n12_N11S19592C7_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N11S19592C7_ntD0Ev,_ZTv0_n12_N11S19592C7_ntD0Ev),
};
extern VTBL_ENTRY _ZTV11S19592C7_nt[];
extern void ABISELECT(_ZTv0_n24_N11S19592C5_ntD1Ev,_ZTv0_n12_N11S19592C5_ntD1Ev)();
extern void _ZN11S19592C5_ntD1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N11S19592C5_ntD0Ev,_ZTv0_n12_N11S19592C5_ntD0Ev)();
extern void _ZN11S19592C5_ntD0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV11S19592C5_nt__11S19592C7_nt[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI11S19592C5_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N11S19592C5_ntD1Ev,_ZTv0_n12_N11S19592C5_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N11S19592C5_ntD0Ev,_ZTv0_n12_N11S19592C5_ntD0Ev),
};
static  VTT_ENTRY vtt_S19592C7_nt[] = {
  {&(_ZTV11S19592C7_nt[4]),  4,12},
  {&(_ZTV11S19592C7_nt[10]),  10,12},
  {&(_ZTV11S19592C7_nt[10]),  10,12},
  {&(_tg__ZTV11S19592C5_nt__11S19592C7_nt[4]),  4,6},
  {&(_tg__ZTV11S19592C5_nt__11S19592C7_nt[4]),  4,6},
};
extern VTBL_ENTRY _ZTI11S19592C7_nt[];
VTBL_ENTRY *P__ZTI11S19592C7_nt = _ZTI11S19592C7_nt; 
extern  VTBL_ENTRY _ZTV11S19592C7_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S19592C7_nt[];
static VTBL_ENTRY alt_thunk_names37[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N11S19592C5_ntD0Ev,_ZTv0_n12_N11S19592C5_ntD0Ev), // 
  (VTBL_ENTRY)_ZN11S19592C5_ntD0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N11S19592C5_ntD1Ev,_ZTv0_n12_N11S19592C5_ntD1Ev), // 
  (VTBL_ENTRY)_ZN11S19592C5_ntD1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N11S19592C7_ntD0Ev,_ZTv0_n12_N11S19592C7_ntD0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N11S19592C7_ntD0Ev,_ZThn8_N11S19592C7_ntD0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N11S19592C7_ntD1Ev,_ZTv0_n12_N11S19592C7_ntD1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N11S19592C7_ntD1Ev,_ZThn8_N11S19592C7_ntD1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19592C7_nt = {  "S19592C7_nt", // class name
  bases_S19592C7_nt, 5,
  &(vtc_S19592C7_nt[0]), // expected_vtbl_contents
  &(vtt_S19592C7_nt[0]), // expected_vtt_contents
  ABISELECT(32,20), // object size
  NSPAIRA(_ZTI11S19592C7_nt),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV11S19592C7_nt),12, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT11S19592C7_nt),5, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names37,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19592C3_nt  : virtual S19592C4_nt , S19592C5_nt {
  int s19592c3f0;
  ::S19592C7_nt s19592c3f1;
  virtual  ~S19592C3_nt(); // _ZN11S19592C3_ntD2Ev
  S19592C3_nt(); // tgen
};
//SIG(-1 S19592C3_nt) C1{ VBC2{ vd m} BC3{ BC4{ m} VBC2 vd FL} vd Fi FC5{ VBC3 BC4 BC2 vd Fp}}


 S19592C3_nt ::~S19592C3_nt(){ note_dtor("S19592C3_nt", this);}
S19592C3_nt ::S19592C3_nt(){ note_ctor("S19592C3_nt", this);} // tgen

//skip512 S19592C3_nt

#else // __cplusplus

extern void _ZN11S19592C3_ntC1Ev();
extern void _ZN11S19592C3_ntD2Ev();
Name_Map name_map_S19592C3_nt[] = {
  NSPAIR(_ZN11S19592C3_ntC1Ev),
  NSPAIR(_ZN11S19592C3_ntD2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19592C4_nt;
extern VTBL_ENTRY _ZTI11S19592C4_nt[];
extern  VTBL_ENTRY _ZTV11S19592C4_nt[];
extern Class_Descriptor cd_S836C39;
extern VTBL_ENTRY _ZTI7S836C39[];
extern Class_Descriptor cd_S19592C5_nt;
extern VTBL_ENTRY _ZTI11S19592C5_nt[];
extern  VTBL_ENTRY _ZTV11S19592C5_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S19592C5_nt[];
static Base_Class bases_S19592C3_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19592C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S836C39,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S19592C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI11S19592C3_nt[];
extern void _ZN11S19592C3_ntD1Ev();
extern void _ZN11S19592C3_ntD0Ev();
static  VTBL_ENTRY vtc_S19592C3_nt[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI11S19592C3_nt[0]),
  (VTBL_ENTRY)&_ZN11S19592C3_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S19592C3_ntD0Ev,
};
extern VTBL_ENTRY _ZTV11S19592C3_nt[];
extern void ABISELECT(_ZTv0_n24_N11S19592C5_ntD1Ev,_ZTv0_n12_N11S19592C5_ntD1Ev)();
extern void _ZN11S19592C5_ntD1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N11S19592C5_ntD0Ev,_ZTv0_n12_N11S19592C5_ntD0Ev)();
extern void _ZN11S19592C5_ntD0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV11S19592C5_nt__11S19592C3_nt[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI11S19592C5_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N11S19592C5_ntD1Ev,_ZTv0_n12_N11S19592C5_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N11S19592C5_ntD0Ev,_ZTv0_n12_N11S19592C5_ntD0Ev),
};
static  VTT_ENTRY vtt_S19592C3_nt[] = {
  {&(_ZTV11S19592C3_nt[4]),  4,6},
  {&(_tg__ZTV11S19592C5_nt__11S19592C3_nt[4]),  4,6},
  {&(_tg__ZTV11S19592C5_nt__11S19592C3_nt[4]),  4,6},
  {&(_ZTV11S19592C3_nt[4]),  4,6},
};
extern VTBL_ENTRY _ZTI11S19592C3_nt[];
VTBL_ENTRY *P__ZTI11S19592C3_nt = _ZTI11S19592C3_nt; 
extern  VTBL_ENTRY _ZTV11S19592C3_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S19592C3_nt[];
static VTBL_ENTRY alt_thunk_names38[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N11S19592C5_ntD0Ev,_ZTv0_n12_N11S19592C5_ntD0Ev), // 
  (VTBL_ENTRY)_ZN11S19592C5_ntD0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N11S19592C5_ntD1Ev,_ZTv0_n12_N11S19592C5_ntD1Ev), // 
  (VTBL_ENTRY)_ZN11S19592C5_ntD1Ev,
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19592C3_nt = {  "S19592C3_nt", // class name
  bases_S19592C3_nt, 3,
  &(vtc_S19592C3_nt[0]), // expected_vtbl_contents
  &(vtt_S19592C3_nt[0]), // expected_vtt_contents
  ABISELECT(56,36), // object size
  NSPAIRA(_ZTI11S19592C3_nt),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV11S19592C3_nt),6, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT11S19592C3_nt),4, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names38,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19592C2_nt  : S19592C3_nt {
  virtual void  v1(); // _ZN11S19592C2_nt2v1Ev
  ~S19592C2_nt(); // tgen
  S19592C2_nt(); // tgen
};
//SIG(-1 S19592C2_nt) C1{ BC2{ VBC3{ vd m} BC4{ BC5{ m} VBC3 vd FL} vd Fi FC6{ VBC4 BC5 BC3 vd Fp}} v1}


void  S19592C2_nt ::v1(){vfunc_called(this, "_ZN11S19592C2_nt2v1Ev");}
S19592C2_nt ::~S19592C2_nt(){ note_dtor("S19592C2_nt", this);} // tgen
S19592C2_nt ::S19592C2_nt(){ note_ctor("S19592C2_nt", this);} // tgen

//skip512 S19592C2_nt

#else // __cplusplus

extern void _ZN11S19592C2_ntC1Ev();
extern void _ZN11S19592C2_ntD1Ev();
Name_Map name_map_S19592C2_nt[] = {
  NSPAIR(_ZN11S19592C2_ntC1Ev),
  NSPAIR(_ZN11S19592C2_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19592C4_nt;
extern VTBL_ENTRY _ZTI11S19592C4_nt[];
extern  VTBL_ENTRY _ZTV11S19592C4_nt[];
extern Class_Descriptor cd_S836C39;
extern VTBL_ENTRY _ZTI7S836C39[];
extern Class_Descriptor cd_S19592C5_nt;
extern VTBL_ENTRY _ZTI11S19592C5_nt[];
extern  VTBL_ENTRY _ZTV11S19592C5_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S19592C5_nt[];
extern Class_Descriptor cd_S19592C3_nt;
extern VTBL_ENTRY _ZTI11S19592C3_nt[];
extern  VTBL_ENTRY _ZTV11S19592C3_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S19592C3_nt[];
static Base_Class bases_S19592C2_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19592C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S836C39,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S19592C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S19592C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI11S19592C2_nt[];
extern void _ZN11S19592C2_ntD1Ev();
extern void _ZN11S19592C2_ntD0Ev();
extern void _ZN11S19592C2_nt2v1Ev();
static  VTBL_ENTRY vtc_S19592C2_nt[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI11S19592C2_nt[0]),
  (VTBL_ENTRY)&_ZN11S19592C2_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S19592C2_ntD0Ev,
  (VTBL_ENTRY)&_ZN11S19592C2_nt2v1Ev,
};
extern VTBL_ENTRY _ZTV11S19592C2_nt[];
extern void _ZN11S19592C3_ntD1Ev();
extern void _ZN11S19592C3_ntD0Ev();
static  VTBL_ENTRY _tg__ZTV11S19592C3_nt__11S19592C2_nt[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI11S19592C3_nt[0]),
  (VTBL_ENTRY)&_ZN11S19592C3_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S19592C3_ntD0Ev,
};
extern void ABISELECT(_ZTv0_n24_N11S19592C5_ntD1Ev,_ZTv0_n12_N11S19592C5_ntD1Ev)();
extern void _ZN11S19592C5_ntD1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N11S19592C5_ntD0Ev,_ZTv0_n12_N11S19592C5_ntD0Ev)();
extern void _ZN11S19592C5_ntD0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV11S19592C5_nt11S19592C3_nt__11S19592C2_nt[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI11S19592C5_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N11S19592C5_ntD1Ev,_ZTv0_n12_N11S19592C5_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N11S19592C5_ntD0Ev,_ZTv0_n12_N11S19592C5_ntD0Ev),
};
static  VTT_ENTRY vtt_S19592C2_nt[] = {
  {&(_ZTV11S19592C2_nt[4]),  4,7},
  {&(_tg__ZTV11S19592C3_nt__11S19592C2_nt[4]),  4,6},
  {&(_tg__ZTV11S19592C5_nt11S19592C3_nt__11S19592C2_nt[4]),  4,6},
  {&(_tg__ZTV11S19592C5_nt11S19592C3_nt__11S19592C2_nt[4]),  4,6},
  {&(_tg__ZTV11S19592C3_nt__11S19592C2_nt[4]),  4,6},
  {&(_ZTV11S19592C2_nt[4]),  4,7},
};
extern VTBL_ENTRY _ZTI11S19592C2_nt[];
VTBL_ENTRY *P__ZTI11S19592C2_nt = _ZTI11S19592C2_nt; 
extern  VTBL_ENTRY _ZTV11S19592C2_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S19592C2_nt[];
static VTBL_ENTRY alt_thunk_names39[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N11S19592C5_ntD0Ev,_ZTv0_n12_N11S19592C5_ntD0Ev), // 
  (VTBL_ENTRY)_ZN11S19592C5_ntD0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N11S19592C5_ntD1Ev,_ZTv0_n12_N11S19592C5_ntD1Ev), // 
  (VTBL_ENTRY)_ZN11S19592C5_ntD1Ev,
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19592C2_nt = {  "S19592C2_nt", // class name
  bases_S19592C2_nt, 4,
  &(vtc_S19592C2_nt[0]), // expected_vtbl_contents
  &(vtt_S19592C2_nt[0]), // expected_vtt_contents
  ABISELECT(56,36), // object size
  NSPAIRA(_ZTI11S19592C2_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV11S19592C2_nt),7, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT11S19592C2_nt),6, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names39,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19592C9_nt  : S19592C4_nt , virtual S19592C5_nt , virtual S19592C7_nt {
  ~S19592C9_nt(); // tgen
  S19592C9_nt(); // tgen
};
//SIG(-1 S19592C9_nt) C1{ BC2{ vd m} VBC3{ BC4{ m} VBC2 vd FL} VBC5{ VBC3 BC4 BC2 vd Fp}}


S19592C9_nt ::~S19592C9_nt(){ note_dtor("S19592C9_nt", this);} // tgen
S19592C9_nt ::S19592C9_nt(){ note_ctor("S19592C9_nt", this);} // tgen

//skip512 S19592C9_nt

#else // __cplusplus

extern void _ZN11S19592C9_ntC1Ev();
extern void _ZN11S19592C9_ntD1Ev();
Name_Map name_map_S19592C9_nt[] = {
  NSPAIR(_ZN11S19592C9_ntC1Ev),
  NSPAIR(_ZN11S19592C9_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19592C4_nt;
extern VTBL_ENTRY _ZTI11S19592C4_nt[];
extern  VTBL_ENTRY _ZTV11S19592C4_nt[];
extern Class_Descriptor cd_S836C39;
extern VTBL_ENTRY _ZTI7S836C39[];
extern Class_Descriptor cd_S19592C4_nt;
extern VTBL_ENTRY _ZTI11S19592C4_nt[];
extern  VTBL_ENTRY _ZTV11S19592C4_nt[];
extern Class_Descriptor cd_S19592C5_nt;
extern VTBL_ENTRY _ZTI11S19592C5_nt[];
extern  VTBL_ENTRY _ZTV11S19592C5_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S19592C5_nt[];
extern Class_Descriptor cd_S836C39;
extern VTBL_ENTRY _ZTI7S836C39[];
extern Class_Descriptor cd_S19592C4_nt;
extern VTBL_ENTRY _ZTI11S19592C4_nt[];
extern  VTBL_ENTRY _ZTV11S19592C4_nt[];
extern Class_Descriptor cd_S19592C7_nt;
extern VTBL_ENTRY _ZTI11S19592C7_nt[];
extern  VTBL_ENTRY _ZTV11S19592C7_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S19592C7_nt[];
static Base_Class bases_S19592C9_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19592C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S836C39,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S19592C4_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S19592C5_nt,    ABISELECT(8,4), //bcp->offset
    7, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S836C39,    ABISELECT(24,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S19592C4_nt,    ABISELECT(24,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S19592C7_nt,    ABISELECT(24,16), //bcp->offset
    13, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI11S19592C9_nt[];
extern void _ZN11S19592C9_ntD1Ev();
extern void _ZN11S19592C9_ntD0Ev();
extern void ABISELECT(_ZTv0_n24_N11S19592C9_ntD1Ev,_ZTv0_n12_N11S19592C9_ntD1Ev)();
extern void ABISELECT(_ZThn8_N11S19592C9_ntD1Ev,_ZThn4_N11S19592C9_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N11S19592C9_ntD0Ev,_ZTv0_n12_N11S19592C9_ntD0Ev)();
extern void ABISELECT(_ZThn8_N11S19592C9_ntD0Ev,_ZThn4_N11S19592C9_ntD0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N11S19592C9_ntD1Ev,_ZTv0_n20_N11S19592C9_ntD1Ev)();
extern void ABISELECT(_ZThn24_N11S19592C9_ntD1Ev,_ZThn16_N11S19592C9_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N11S19592C9_ntD0Ev,_ZTv0_n20_N11S19592C9_ntD0Ev)();
extern void ABISELECT(_ZThn24_N11S19592C9_ntD0Ev,_ZThn16_N11S19592C9_ntD0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19592C9_nt[] = {
  ABISELECT(24,16),
  ABISELECT(8,4),
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI11S19592C9_nt[0]),
  (VTBL_ENTRY)&_ZN11S19592C9_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S19592C9_ntD0Ev,
  0,
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI11S19592C9_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N11S19592C9_ntD1Ev,_ZTv0_n12_N11S19592C9_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N11S19592C9_ntD0Ev,_ZTv0_n12_N11S19592C9_ntD0Ev),
  ABISELECT(-24,-16),
  ABISELECT(-16,-12),
  ABISELECT(-16,-12),
  ABISELECT(-24,-16),
  (VTBL_ENTRY)&(_ZTI11S19592C9_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N11S19592C9_ntD1Ev,_ZTv0_n20_N11S19592C9_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N11S19592C9_ntD0Ev,_ZTv0_n20_N11S19592C9_ntD0Ev),
};
extern VTBL_ENTRY _ZTV11S19592C9_nt[];
extern void ABISELECT(_ZTv0_n24_N11S19592C5_ntD1Ev,_ZTv0_n12_N11S19592C5_ntD1Ev)();
extern void _ZN11S19592C5_ntD1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N11S19592C5_ntD0Ev,_ZTv0_n12_N11S19592C5_ntD0Ev)();
extern void _ZN11S19592C5_ntD0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV11S19592C5_nt__11S19592C9_nt[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI11S19592C5_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N11S19592C5_ntD1Ev,_ZTv0_n12_N11S19592C5_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N11S19592C5_ntD0Ev,_ZTv0_n12_N11S19592C5_ntD0Ev),
};
extern void _ZN11S19592C7_ntD1Ev();
extern void _ZN11S19592C7_ntD0Ev();
static  VTBL_ENTRY _tg__ZTV11S19592C7_nt__11S19592C9_nt[] = {
  ABISELECT(-16,-12),
  ABISELECT(-16,-12),
  0,
  (VTBL_ENTRY)&(_ZTI11S19592C7_nt[0]),
  (VTBL_ENTRY)&_ZN11S19592C7_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S19592C7_ntD0Ev,
};
extern void ABISELECT(_ZTv0_n24_N11S19592C7_ntD1Ev,_ZTv0_n12_N11S19592C7_ntD1Ev)();
extern void ABISELECT(_ZTv0_n24_N11S19592C7_ntD0Ev,_ZTv0_n12_N11S19592C7_ntD0Ev)();
static  VTBL_ENTRY _tg__ZTV11S19592C5_nt__11S19592C7_nt__11S19592C9_nt[] = {
  0,
  ABISELECT(16,12),
  ABISELECT(16,12),
  (VTBL_ENTRY)&(_ZTI11S19592C7_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N11S19592C7_ntD1Ev,_ZTv0_n12_N11S19592C7_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N11S19592C7_ntD0Ev,_ZTv0_n12_N11S19592C7_ntD0Ev),
};
static  VTT_ENTRY vtt_S19592C9_nt[] = {
  {&(_ZTV11S19592C9_nt[5]),  5,20},
  {&(_ZTV11S19592C9_nt[11]),  11,20},
  {&(_ZTV11S19592C9_nt[11]),  11,20},
  {&(_ZTV11S19592C9_nt[18]),  18,20},
  {&(_tg__ZTV11S19592C5_nt__11S19592C9_nt[4]),  4,6},
  {&(_tg__ZTV11S19592C5_nt__11S19592C9_nt[4]),  4,6},
  {&(_tg__ZTV11S19592C7_nt__11S19592C9_nt[4]),  4,6},
  {&(_tg__ZTV11S19592C5_nt__11S19592C7_nt__11S19592C9_nt[4]),  4,6},
  {&(_tg__ZTV11S19592C5_nt__11S19592C7_nt__11S19592C9_nt[4]),  4,6},
};
extern VTBL_ENTRY _ZTI11S19592C9_nt[];
VTBL_ENTRY *P__ZTI11S19592C9_nt = _ZTI11S19592C9_nt; 
extern  VTBL_ENTRY _ZTV11S19592C9_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S19592C9_nt[];
static VTBL_ENTRY alt_thunk_names40[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N11S19592C5_ntD0Ev,_ZTv0_n12_N11S19592C5_ntD0Ev), // 
  (VTBL_ENTRY)_ZN11S19592C5_ntD0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N11S19592C5_ntD1Ev,_ZTv0_n12_N11S19592C5_ntD1Ev), // 
  (VTBL_ENTRY)_ZN11S19592C5_ntD1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N11S19592C9_ntD0Ev,_ZTv0_n20_N11S19592C9_ntD0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N11S19592C9_ntD0Ev,_ZThn16_N11S19592C9_ntD0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N11S19592C9_ntD1Ev,_ZTv0_n20_N11S19592C9_ntD1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N11S19592C9_ntD1Ev,_ZThn16_N11S19592C9_ntD1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N11S19592C9_ntD0Ev,_ZTv0_n12_N11S19592C9_ntD0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N11S19592C9_ntD0Ev,_ZThn4_N11S19592C9_ntD0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N11S19592C9_ntD1Ev,_ZTv0_n12_N11S19592C9_ntD1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N11S19592C9_ntD1Ev,_ZThn4_N11S19592C9_ntD1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19592C9_nt = {  "S19592C9_nt", // class name
  bases_S19592C9_nt, 7,
  &(vtc_S19592C9_nt[0]), // expected_vtbl_contents
  &(vtt_S19592C9_nt[0]), // expected_vtt_contents
  ABISELECT(40,24), // object size
  NSPAIRA(_ZTI11S19592C9_nt),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV11S19592C9_nt),20, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT11S19592C9_nt),9, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names40,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19592C8  : virtual S19592C2_nt , virtual S19592C9_nt , S836C29 , S836C39 {
  ::S19592C9_nt s19592c8f0;
  virtual  ~S19592C8(); // _ZN8S19592C8D2Ev
  S19592C8(); // tgen
};
//SIG(-1 S19592C8) C1{ VBC2{ BC3{ VBC4{ vd m} BC5{ BC6{ m} VBC4 vd FL} vd Fi FC7{ VBC5 BC6 BC4 vd Fp}} v1} VBC8{ BC4 VBC5 VBC7} BC9{ m} BC6 vd FC8}


 S19592C8 ::~S19592C8(){ note_dtor("S19592C8", this);}
S19592C8 ::S19592C8(){ note_ctor("S19592C8", this);} // tgen

static void Test_S19592C8()
{
  extern Class_Descriptor cd_S19592C8;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(18,22)];
    init_test(&cd_S19592C8, buf);
    S19592C8 *dp, &lv = *(dp=new (buf) S19592C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(136,84), "sizeof(S19592C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19592C8)");
    check_base_class_offset(lv, (S19592C4_nt*)(S19592C3_nt*)(S19592C2_nt*), ABISELECT(48,28), "S19592C8");
    check_base_class_offset(lv, (S19592C4_nt*)(S19592C5_nt*)(S19592C3_nt*)(S19592C2_nt*), ABISELECT(48,28), "S19592C8");
    /*is_ambiguous_... S19592C8::S19592C5_nt */ AMB_check_base_class_offset(lv, (S19592C4_nt*)(S19592C5_nt*), ABISELECT(48,28), "S19592C8");
    check_base_class_offset(lv, (S836C39*)(S19592C5_nt*)(S19592C3_nt*)(S19592C2_nt*), ABISELECT(48,28), "S19592C8");
    check_base_class_offset(lv, (S19592C5_nt*)(S19592C3_nt*)(S19592C2_nt*), ABISELECT(48,28), "S19592C8");
    check_base_class_offset(lv, (S19592C3_nt*)(S19592C2_nt*), ABISELECT(48,28), "S19592C8");
    check_base_class_offset(lv, (S19592C2_nt*), ABISELECT(48,28), "S19592C8");
    /*is_ambiguous_... S19592C9_nt::S19592C4_nt */ AMB_check_base_class_offset(lv, (S19592C4_nt*)(S19592C9_nt*), 0, "S19592C8");
    /*is_ambiguous_... S19592C8::S19592C5_nt */ AMB_check_base_class_offset(lv, (S836C39*)(S19592C5_nt*), ABISELECT(104,64), "S19592C8");
    check_base_class_offset(lv, (S19592C5_nt*)(S19592C9_nt*), ABISELECT(104,64), "S19592C8");
    check_base_class_offset(lv, (S19592C5_nt*)(S19592C7_nt*), ABISELECT(104,64), "S19592C8");
    /*is_ambiguous_... S19592C7_nt::S836C39 */ AMB_check_base_class_offset(lv, (S836C39*)(S19592C7_nt*), ABISELECT(120,76), "S19592C8");
    /*is_ambiguous_... S19592C7_nt::S19592C4_nt */ AMB_check_base_class_offset(lv, (S19592C4_nt*)(S19592C7_nt*), ABISELECT(120,76), "S19592C8");
    check_base_class_offset(lv, (S19592C7_nt*)(S19592C9_nt*), ABISELECT(120,76), "S19592C8");
    check_base_class_offset(lv, (S19592C9_nt*), 0, "S19592C8");
    check_base_class_offset(lv, (S836C29*), 0, "S19592C8");
    /*is_ambiguous_... S19592C8::S836C39 */ AMB_check_base_class_offset(lv, (S836C39*), 0, "S19592C8");
    check_field_offset(lv, s19592c8f0, ABISELECT(8,4), "S19592C8.s19592c8f0");
    test_class_info(&lv, &cd_S19592C8);
    dp->~S19592C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19592C8(Test_S19592C8, "S19592C8", ABISELECT(136,84));

#else // __cplusplus

extern void _ZN8S19592C8C1Ev();
extern void _ZN8S19592C8D2Ev();
Name_Map name_map_S19592C8[] = {
  NSPAIR(_ZN8S19592C8C1Ev),
  NSPAIR(_ZN8S19592C8D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19592C4_nt;
extern VTBL_ENTRY _ZTI11S19592C4_nt[];
extern  VTBL_ENTRY _ZTV11S19592C4_nt[];
extern Class_Descriptor cd_S836C39;
extern VTBL_ENTRY _ZTI7S836C39[];
extern Class_Descriptor cd_S19592C5_nt;
extern VTBL_ENTRY _ZTI11S19592C5_nt[];
extern  VTBL_ENTRY _ZTV11S19592C5_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S19592C5_nt[];
extern Class_Descriptor cd_S19592C3_nt;
extern VTBL_ENTRY _ZTI11S19592C3_nt[];
extern  VTBL_ENTRY _ZTV11S19592C3_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S19592C3_nt[];
extern Class_Descriptor cd_S19592C2_nt;
extern VTBL_ENTRY _ZTI11S19592C2_nt[];
extern  VTBL_ENTRY _ZTV11S19592C2_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S19592C2_nt[];
extern Class_Descriptor cd_S19592C4_nt;
extern VTBL_ENTRY _ZTI11S19592C4_nt[];
extern  VTBL_ENTRY _ZTV11S19592C4_nt[];
extern Class_Descriptor cd_S836C39;
extern VTBL_ENTRY _ZTI7S836C39[];
extern Class_Descriptor cd_S19592C5_nt;
extern VTBL_ENTRY _ZTI11S19592C5_nt[];
extern  VTBL_ENTRY _ZTV11S19592C5_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S19592C5_nt[];
extern Class_Descriptor cd_S836C39;
extern VTBL_ENTRY _ZTI7S836C39[];
extern Class_Descriptor cd_S19592C4_nt;
extern VTBL_ENTRY _ZTI11S19592C4_nt[];
extern  VTBL_ENTRY _ZTV11S19592C4_nt[];
extern Class_Descriptor cd_S19592C7_nt;
extern VTBL_ENTRY _ZTI11S19592C7_nt[];
extern  VTBL_ENTRY _ZTV11S19592C7_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S19592C7_nt[];
extern Class_Descriptor cd_S19592C9_nt;
extern VTBL_ENTRY _ZTI11S19592C9_nt[];
extern  VTBL_ENTRY _ZTV11S19592C9_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S19592C9_nt[];
extern Class_Descriptor cd_S836C29;
extern VTBL_ENTRY _ZTI7S836C29[];
extern Class_Descriptor cd_S836C39;
extern VTBL_ENTRY _ZTI7S836C39[];
static Base_Class bases_S19592C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19592C4_nt,    ABISELECT(48,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S836C39,    ABISELECT(48,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S19592C5_nt,    ABISELECT(48,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S19592C3_nt,    ABISELECT(48,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19592C2_nt,    ABISELECT(48,28), //bcp->offset
    10, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19592C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S836C39,    ABISELECT(104,64), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S19592C5_nt,    ABISELECT(104,64), //bcp->offset
    18, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S836C39,    ABISELECT(120,76), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S19592C4_nt,    ABISELECT(120,76), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S19592C7_nt,    ABISELECT(120,76), //bcp->offset
    24, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    11, //immediately_derived
  0, 1},
  {&cd_S19592C9_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S836C29,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S836C39,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19592C8[];
extern void _ZN8S19592C8D1Ev();
extern void _ZN8S19592C8D0Ev();
extern void ABISELECT(_ZTv0_n24_N8S19592C8D1Ev,_ZTv0_n12_N8S19592C8D1Ev)();
extern void ABISELECT(_ZThn48_N8S19592C8D1Ev,_ZThn28_N8S19592C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19592C8D0Ev,_ZTv0_n12_N8S19592C8D0Ev)();
extern void ABISELECT(_ZThn48_N8S19592C8D0Ev,_ZThn28_N8S19592C8D0Ev)() __attribute__((weak));
extern void _ZN11S19592C2_nt2v1Ev();
extern void ABISELECT(_ZTv0_n24_N8S19592C8D1Ev,_ZTv0_n12_N8S19592C8D1Ev)();
extern void ABISELECT(_ZThn104_N8S19592C8D1Ev,_ZThn64_N8S19592C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19592C8D0Ev,_ZTv0_n12_N8S19592C8D0Ev)();
extern void ABISELECT(_ZThn104_N8S19592C8D0Ev,_ZThn64_N8S19592C8D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19592C8D1Ev,_ZTv0_n20_N8S19592C8D1Ev)();
extern void ABISELECT(_ZThn120_N8S19592C8D1Ev,_ZThn76_N8S19592C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19592C8D0Ev,_ZTv0_n20_N8S19592C8D0Ev)();
extern void ABISELECT(_ZThn120_N8S19592C8D0Ev,_ZThn76_N8S19592C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19592C8[] = {
  0,
  ABISELECT(48,28),
  0,
  ABISELECT(120,76),
  ABISELECT(48,28),
  ABISELECT(104,64),
  0,
  (VTBL_ENTRY)&(_ZTI8S19592C8[0]),
  (VTBL_ENTRY)&_ZN8S19592C8D1Ev,
  (VTBL_ENTRY)&_ZN8S19592C8D0Ev,
  0,
  0,
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI8S19592C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19592C8D1Ev,_ZTv0_n12_N8S19592C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19592C8D0Ev,_ZTv0_n12_N8S19592C8D0Ev),
  (VTBL_ENTRY)&_ZN11S19592C2_nt2v1Ev,
  ABISELECT(-56,-36),
  ABISELECT(-104,-64),
  ABISELECT(-104,-64),
  (VTBL_ENTRY)&(_ZTI8S19592C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19592C8D1Ev,_ZTv0_n12_N8S19592C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19592C8D0Ev,_ZTv0_n12_N8S19592C8D0Ev),
  ABISELECT(-120,-76),
  ABISELECT(-72,-48),
  ABISELECT(-16,-12),
  ABISELECT(-120,-76),
  (VTBL_ENTRY)&(_ZTI8S19592C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19592C8D1Ev,_ZTv0_n20_N8S19592C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19592C8D0Ev,_ZTv0_n20_N8S19592C8D0Ev),
};
extern VTBL_ENTRY _ZTV8S19592C8[];
extern void ABISELECT(_ZTv0_n24_N11S19592C2_ntD1Ev,_ZTv0_n12_N11S19592C2_ntD1Ev)();
extern void _ZN11S19592C2_ntD1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N11S19592C2_ntD0Ev,_ZTv0_n12_N11S19592C2_ntD0Ev)();
extern void _ZN11S19592C2_ntD0Ev() __attribute__((weak));
extern void _ZN11S19592C2_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV11S19592C2_nt__8S19592C8[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI11S19592C2_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N11S19592C2_ntD1Ev,_ZTv0_n12_N11S19592C2_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N11S19592C2_ntD0Ev,_ZTv0_n12_N11S19592C2_ntD0Ev),
  (VTBL_ENTRY)&_ZN11S19592C2_nt2v1Ev,
};
extern void ABISELECT(_ZTv0_n24_N11S19592C3_ntD1Ev,_ZTv0_n12_N11S19592C3_ntD1Ev)();
extern void _ZN11S19592C3_ntD1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N11S19592C3_ntD0Ev,_ZTv0_n12_N11S19592C3_ntD0Ev)();
extern void _ZN11S19592C3_ntD0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV11S19592C3_nt11S19592C2_nt__8S19592C8[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI11S19592C3_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N11S19592C3_ntD1Ev,_ZTv0_n12_N11S19592C3_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N11S19592C3_ntD0Ev,_ZTv0_n12_N11S19592C3_ntD0Ev),
};
extern void ABISELECT(_ZTv0_n24_N11S19592C5_ntD1Ev,_ZTv0_n12_N11S19592C5_ntD1Ev)();
extern void _ZN11S19592C5_ntD1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N11S19592C5_ntD0Ev,_ZTv0_n12_N11S19592C5_ntD0Ev)();
extern void _ZN11S19592C5_ntD0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV11S19592C5_nt11S19592C3_nt11S19592C2_nt__8S19592C8[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI11S19592C5_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N11S19592C5_ntD1Ev,_ZTv0_n12_N11S19592C5_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N11S19592C5_ntD0Ev,_ZTv0_n12_N11S19592C5_ntD0Ev),
};
extern void _ZN11S19592C9_ntD1Ev();
extern void _ZN11S19592C9_ntD0Ev();
static  VTBL_ENTRY _tg__ZTV11S19592C9_nt__8S19592C8[] = {
  ABISELECT(120,76),
  ABISELECT(48,28),
  ABISELECT(104,64),
  0,
  (VTBL_ENTRY)&(_ZTI11S19592C9_nt[0]),
  (VTBL_ENTRY)&_ZN11S19592C9_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S19592C9_ntD0Ev,
};
extern void ABISELECT(_ZTv0_n24_N11S19592C9_ntD1Ev,_ZTv0_n12_N11S19592C9_ntD1Ev)();
extern void ABISELECT(_ZThn104_N11S19592C9_ntD1Ev,_ZThn64_N11S19592C9_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N11S19592C9_ntD0Ev,_ZTv0_n12_N11S19592C9_ntD0Ev)();
extern void ABISELECT(_ZThn104_N11S19592C9_ntD0Ev,_ZThn64_N11S19592C9_ntD0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV11S19592C5_nt__11S19592C9_nt__8S19592C8[] = {
  ABISELECT(-56,-36),
  ABISELECT(-104,-64),
  ABISELECT(-104,-64),
  (VTBL_ENTRY)&(_ZTI11S19592C9_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N11S19592C9_ntD1Ev,_ZTv0_n12_N11S19592C9_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N11S19592C9_ntD0Ev,_ZTv0_n12_N11S19592C9_ntD0Ev),
};
extern void ABISELECT(_ZTv0_n24_N11S19592C9_ntD1Ev,_ZTv0_n12_N11S19592C9_ntD1Ev)();
extern void ABISELECT(_ZThn48_N11S19592C9_ntD1Ev,_ZThn28_N11S19592C9_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N11S19592C9_ntD0Ev,_ZTv0_n12_N11S19592C9_ntD0Ev)();
extern void ABISELECT(_ZThn48_N11S19592C9_ntD0Ev,_ZThn28_N11S19592C9_ntD0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV11S19592C4_nt__A1__11S19592C9_nt__8S19592C8[] = {
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI11S19592C9_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N11S19592C9_ntD1Ev,_ZTv0_n12_N11S19592C9_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N11S19592C9_ntD0Ev,_ZTv0_n12_N11S19592C9_ntD0Ev),
};
extern void ABISELECT(_ZTv0_n40_N11S19592C9_ntD1Ev,_ZTv0_n20_N11S19592C9_ntD1Ev)();
extern void ABISELECT(_ZThn120_N11S19592C9_ntD1Ev,_ZThn76_N11S19592C9_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N11S19592C9_ntD0Ev,_ZTv0_n20_N11S19592C9_ntD0Ev)();
extern void ABISELECT(_ZThn120_N11S19592C9_ntD0Ev,_ZThn76_N11S19592C9_ntD0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV11S19592C7_nt__11S19592C9_nt__8S19592C8[] = {
  ABISELECT(-120,-76),
  ABISELECT(-72,-48),
  ABISELECT(-16,-12),
  ABISELECT(-120,-76),
  (VTBL_ENTRY)&(_ZTI11S19592C9_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N11S19592C9_ntD1Ev,_ZTv0_n20_N11S19592C9_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N11S19592C9_ntD0Ev,_ZTv0_n20_N11S19592C9_ntD0Ev),
};
extern void ABISELECT(_ZTv0_n24_N11S19592C5_ntD1Ev,_ZTv0_n12_N11S19592C5_ntD1Ev)();
extern void _ZN11S19592C5_ntD1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N11S19592C5_ntD0Ev,_ZTv0_n12_N11S19592C5_ntD0Ev)();
extern void _ZN11S19592C5_ntD0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV11S19592C5_nt__A1__8S19592C8[] = {
  ABISELECT(-56,-36),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI11S19592C5_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N11S19592C5_ntD1Ev,_ZTv0_n12_N11S19592C5_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N11S19592C5_ntD0Ev,_ZTv0_n12_N11S19592C5_ntD0Ev),
};
extern void ABISELECT(_ZTv0_n24_N11S19592C5_ntD1Ev,_ZTv0_n12_N11S19592C5_ntD1Ev)();
extern void ABISELECT(_ZTv0_n24_N11S19592C5_ntD0Ev,_ZTv0_n12_N11S19592C5_ntD0Ev)();
static  VTBL_ENTRY _tg__ZTV11S19592C4_nt__11S19592C5_nt__A1__8S19592C8[] = {
  ABISELECT(56,36),
  ABISELECT(56,36),
  (VTBL_ENTRY)&(_ZTI11S19592C5_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N11S19592C5_ntD1Ev,_ZTv0_n12_N11S19592C5_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N11S19592C5_ntD0Ev,_ZTv0_n12_N11S19592C5_ntD0Ev),
};
extern void _ZN11S19592C7_ntD1Ev();
extern void _ZN11S19592C7_ntD0Ev();
static  VTBL_ENTRY _tg__ZTV11S19592C7_nt__8S19592C8[] = {
  ABISELECT(-72,-48),
  ABISELECT(-16,-12),
  0,
  (VTBL_ENTRY)&(_ZTI11S19592C7_nt[0]),
  (VTBL_ENTRY)&_ZN11S19592C7_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S19592C7_ntD0Ev,
};
extern void ABISELECT(_ZTv0_n24_N11S19592C7_ntD1Ev,_ZTv0_n12_N11S19592C7_ntD1Ev)();
extern void ABISELECT(_ZTv0_n24_N11S19592C7_ntD0Ev,_ZTv0_n12_N11S19592C7_ntD0Ev)();
static  VTBL_ENTRY _tg__ZTV11S19592C5_nt__11S19592C7_nt__8S19592C8[] = {
  ABISELECT(-56,-36),
  ABISELECT(16,12),
  ABISELECT(16,12),
  (VTBL_ENTRY)&(_ZTI11S19592C7_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N11S19592C7_ntD1Ev,_ZTv0_n12_N11S19592C7_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N11S19592C7_ntD0Ev,_ZTv0_n12_N11S19592C7_ntD0Ev),
};
extern void ABISELECT(_ZTv0_n24_N11S19592C7_ntD1Ev,_ZTv0_n12_N11S19592C7_ntD1Ev)();
extern void ABISELECT(_ZTv0_n24_N11S19592C7_ntD0Ev,_ZTv0_n12_N11S19592C7_ntD0Ev)();
static  VTBL_ENTRY _tg__ZTV11S19592C4_nt__11S19592C7_nt__8S19592C8[] = {
  ABISELECT(72,48),
  ABISELECT(72,48),
  (VTBL_ENTRY)&(_ZTI11S19592C7_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N11S19592C7_ntD1Ev,_ZTv0_n12_N11S19592C7_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N11S19592C7_ntD0Ev,_ZTv0_n12_N11S19592C7_ntD0Ev),
};
static  VTT_ENTRY vtt_S19592C8[] = {
  {&(_ZTV8S19592C8[8]),  8,31},
  {&(_ZTV8S19592C8[15]),  15,31},
  {&(_ZTV8S19592C8[15]),  15,31},
  {&(_ZTV8S19592C8[8]),  8,31},
  {&(_ZTV8S19592C8[22]),  22,31},
  {&(_ZTV8S19592C8[29]),  29,31},
  {&(_tg__ZTV11S19592C2_nt__8S19592C8[4]),  4,7},
  {&(_tg__ZTV11S19592C3_nt11S19592C2_nt__8S19592C8[4]),  4,6},
  {&(_tg__ZTV11S19592C5_nt11S19592C3_nt11S19592C2_nt__8S19592C8[4]),  4,6},
  {&(_tg__ZTV11S19592C5_nt11S19592C3_nt11S19592C2_nt__8S19592C8[4]),  4,6},
  {&(_tg__ZTV11S19592C3_nt11S19592C2_nt__8S19592C8[4]),  4,6},
  {&(_tg__ZTV11S19592C2_nt__8S19592C8[4]),  4,7},
  {&(_tg__ZTV11S19592C9_nt__8S19592C8[5]),  5,7},
  {&(_tg__ZTV11S19592C5_nt__11S19592C9_nt__8S19592C8[4]),  4,6},
  {&(_tg__ZTV11S19592C4_nt__A1__11S19592C9_nt__8S19592C8[3]),  3,5},
  {&(_tg__ZTV11S19592C7_nt__11S19592C9_nt__8S19592C8[5]),  5,7},
  {&(_tg__ZTV11S19592C5_nt__A1__8S19592C8[4]),  4,6},
  {&(_tg__ZTV11S19592C4_nt__11S19592C5_nt__A1__8S19592C8[3]),  3,5},
  {&(_tg__ZTV11S19592C7_nt__8S19592C8[4]),  4,6},
  {&(_tg__ZTV11S19592C5_nt__11S19592C7_nt__8S19592C8[4]),  4,6},
  {&(_tg__ZTV11S19592C4_nt__11S19592C7_nt__8S19592C8[3]),  3,5},
};
extern VTBL_ENTRY _ZTI8S19592C8[];
extern  VTBL_ENTRY _ZTV8S19592C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19592C8[];
static VTBL_ENTRY alt_thunk_names41[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N11S19592C9_ntD0Ev,_ZTv0_n20_N11S19592C9_ntD0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn120_N11S19592C9_ntD0Ev,_ZThn76_N11S19592C9_ntD0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N11S19592C9_ntD1Ev,_ZTv0_n20_N11S19592C9_ntD1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn120_N11S19592C9_ntD1Ev,_ZThn76_N11S19592C9_ntD1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N11S19592C9_ntD0Ev,_ZTv0_n12_N11S19592C9_ntD0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N11S19592C9_ntD0Ev,_ZThn28_N11S19592C9_ntD0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn104_N11S19592C9_ntD0Ev,_ZThn64_N11S19592C9_ntD0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N11S19592C9_ntD1Ev,_ZTv0_n12_N11S19592C9_ntD1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N11S19592C9_ntD1Ev,_ZThn28_N11S19592C9_ntD1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn104_N11S19592C9_ntD1Ev,_ZThn64_N11S19592C9_ntD1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N11S19592C5_ntD0Ev,_ZTv0_n12_N11S19592C5_ntD0Ev), // 
  (VTBL_ENTRY)_ZN11S19592C5_ntD0Ev,
  (VTBL_ENTRY)_ZN11S19592C5_ntD0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N11S19592C5_ntD1Ev,_ZTv0_n12_N11S19592C5_ntD1Ev), // 
  (VTBL_ENTRY)_ZN11S19592C5_ntD1Ev,
  (VTBL_ENTRY)_ZN11S19592C5_ntD1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N11S19592C3_ntD0Ev,_ZTv0_n12_N11S19592C3_ntD0Ev), // 
  (VTBL_ENTRY)_ZN11S19592C3_ntD0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N11S19592C3_ntD1Ev,_ZTv0_n12_N11S19592C3_ntD1Ev), // 
  (VTBL_ENTRY)_ZN11S19592C3_ntD1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N11S19592C2_ntD0Ev,_ZTv0_n12_N11S19592C2_ntD0Ev), // 
  (VTBL_ENTRY)_ZN11S19592C2_ntD0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N11S19592C2_ntD1Ev,_ZTv0_n12_N11S19592C2_ntD1Ev), // 
  (VTBL_ENTRY)_ZN11S19592C2_ntD1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19592C8D0Ev,_ZTv0_n20_N8S19592C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn120_N8S19592C8D0Ev,_ZThn76_N8S19592C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19592C8D1Ev,_ZTv0_n20_N8S19592C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn120_N8S19592C8D1Ev,_ZThn76_N8S19592C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19592C8D0Ev,_ZTv0_n12_N8S19592C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N8S19592C8D0Ev,_ZThn64_N8S19592C8D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S19592C8D0Ev,_ZThn28_N8S19592C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19592C8D1Ev,_ZTv0_n12_N8S19592C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N8S19592C8D1Ev,_ZThn64_N8S19592C8D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S19592C8D1Ev,_ZThn28_N8S19592C8D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19592C8 = {  "S19592C8", // class name
  bases_S19592C8, 14,
  &(vtc_S19592C8[0]), // expected_vtbl_contents
  &(vtt_S19592C8[0]), // expected_vtt_contents
  ABISELECT(136,84), // object size
  NSPAIRA(_ZTI8S19592C8),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S19592C8),31, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19592C8),21, //virtual table table var
  9, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names41,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19592C1  : virtual S19592C2_nt , S19592C8 {
  virtual  ~S19592C1(); // _ZN8S19592C1D2Ev
  S19592C1(); // tgen
};
//SIG(1 S19592C1) C1{ VBC2{ BC3{ VBC4{ vd m} BC5{ BC6{ m} VBC4 vd FL} vd Fi FC7{ VBC5 BC6 BC4 vd Fp}} v1} BC8{ VBC2 VBC9{ BC4 VBC5 VBC7} BC10{ m} BC6 vd FC9} vd}


 S19592C1 ::~S19592C1(){ note_dtor("S19592C1", this);}
S19592C1 ::S19592C1(){ note_ctor("S19592C1", this);} // tgen

static void Test_S19592C1()
{
  extern Class_Descriptor cd_S19592C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(18,22)];
    init_test(&cd_S19592C1, buf);
    S19592C1 *dp, &lv = *(dp=new (buf) S19592C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(136,84), "sizeof(S19592C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19592C1)");
    check_base_class_offset(lv, (S19592C4_nt*)(S19592C3_nt*)(S19592C2_nt*), ABISELECT(48,28), "S19592C1");
    check_base_class_offset(lv, (S19592C4_nt*)(S19592C5_nt*)(S19592C3_nt*)(S19592C2_nt*), ABISELECT(48,28), "S19592C1");
    /*is_ambiguous_... S19592C1::S19592C5_nt */ AMB_check_base_class_offset(lv, (S19592C4_nt*)(S19592C5_nt*), ABISELECT(48,28), "S19592C1");
    check_base_class_offset(lv, (S836C39*)(S19592C5_nt*)(S19592C3_nt*)(S19592C2_nt*), ABISELECT(48,28), "S19592C1");
    check_base_class_offset(lv, (S19592C5_nt*)(S19592C3_nt*)(S19592C2_nt*), ABISELECT(48,28), "S19592C1");
    check_base_class_offset(lv, (S19592C3_nt*)(S19592C2_nt*), ABISELECT(48,28), "S19592C1");
    check_base_class_offset(lv, (S19592C2_nt*), ABISELECT(48,28), "S19592C1");
    check_base_class_offset(lv, (S19592C2_nt*)(S19592C8*), ABISELECT(48,28), "S19592C1");
    /*is_ambiguous_... S19592C9_nt::S19592C4_nt */ AMB_check_base_class_offset(lv, (S19592C4_nt*)(S19592C9_nt*), 0, "S19592C1");
    /*is_ambiguous_... S19592C1::S19592C5_nt */ AMB_check_base_class_offset(lv, (S836C39*)(S19592C5_nt*), ABISELECT(104,64), "S19592C1");
    check_base_class_offset(lv, (S19592C5_nt*)(S19592C9_nt*), ABISELECT(104,64), "S19592C1");
    check_base_class_offset(lv, (S19592C5_nt*)(S19592C7_nt*), ABISELECT(104,64), "S19592C1");
    /*is_ambiguous_... S19592C7_nt::S836C39 */ AMB_check_base_class_offset(lv, (S836C39*)(S19592C7_nt*), ABISELECT(120,76), "S19592C1");
    /*is_ambiguous_... S19592C7_nt::S19592C4_nt */ AMB_check_base_class_offset(lv, (S19592C4_nt*)(S19592C7_nt*), ABISELECT(120,76), "S19592C1");
    check_base_class_offset(lv, (S19592C7_nt*)(S19592C9_nt*), ABISELECT(120,76), "S19592C1");
    check_base_class_offset(lv, (S19592C9_nt*)(S19592C8*), 0, "S19592C1");
    check_base_class_offset(lv, (S836C29*)(S19592C8*), 0, "S19592C1");
    /*is_ambiguous_... S19592C8::S836C39 */ AMB_check_base_class_offset(lv, (S836C39*)(S19592C8*), 0, "S19592C1");
    check_base_class_offset(lv, (S19592C8*), 0, "S19592C1");
    test_class_info(&lv, &cd_S19592C1);
    dp->~S19592C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19592C1(Test_S19592C1, "S19592C1", ABISELECT(136,84));

#else // __cplusplus

extern void _ZN8S19592C1C1Ev();
extern void _ZN8S19592C1D2Ev();
Name_Map name_map_S19592C1[] = {
  NSPAIR(_ZN8S19592C1C1Ev),
  NSPAIR(_ZN8S19592C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19592C4_nt;
extern VTBL_ENTRY _ZTI11S19592C4_nt[];
extern  VTBL_ENTRY _ZTV11S19592C4_nt[];
extern Class_Descriptor cd_S836C39;
extern VTBL_ENTRY _ZTI7S836C39[];
extern Class_Descriptor cd_S19592C5_nt;
extern VTBL_ENTRY _ZTI11S19592C5_nt[];
extern  VTBL_ENTRY _ZTV11S19592C5_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S19592C5_nt[];
extern Class_Descriptor cd_S19592C3_nt;
extern VTBL_ENTRY _ZTI11S19592C3_nt[];
extern  VTBL_ENTRY _ZTV11S19592C3_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S19592C3_nt[];
extern Class_Descriptor cd_S19592C2_nt;
extern VTBL_ENTRY _ZTI11S19592C2_nt[];
extern  VTBL_ENTRY _ZTV11S19592C2_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S19592C2_nt[];
extern Class_Descriptor cd_S19592C4_nt;
extern VTBL_ENTRY _ZTI11S19592C4_nt[];
extern  VTBL_ENTRY _ZTV11S19592C4_nt[];
extern Class_Descriptor cd_S836C39;
extern VTBL_ENTRY _ZTI7S836C39[];
extern Class_Descriptor cd_S19592C5_nt;
extern VTBL_ENTRY _ZTI11S19592C5_nt[];
extern  VTBL_ENTRY _ZTV11S19592C5_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S19592C5_nt[];
extern Class_Descriptor cd_S836C39;
extern VTBL_ENTRY _ZTI7S836C39[];
extern Class_Descriptor cd_S19592C4_nt;
extern VTBL_ENTRY _ZTI11S19592C4_nt[];
extern  VTBL_ENTRY _ZTV11S19592C4_nt[];
extern Class_Descriptor cd_S19592C7_nt;
extern VTBL_ENTRY _ZTI11S19592C7_nt[];
extern  VTBL_ENTRY _ZTV11S19592C7_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S19592C7_nt[];
extern Class_Descriptor cd_S19592C9_nt;
extern VTBL_ENTRY _ZTI11S19592C9_nt[];
extern  VTBL_ENTRY _ZTV11S19592C9_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S19592C9_nt[];
extern Class_Descriptor cd_S836C29;
extern VTBL_ENTRY _ZTI7S836C29[];
extern Class_Descriptor cd_S836C39;
extern VTBL_ENTRY _ZTI7S836C39[];
extern Class_Descriptor cd_S19592C8;
extern VTBL_ENTRY _ZTI8S19592C8[];
extern  VTBL_ENTRY _ZTV8S19592C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19592C8[];
static Base_Class bases_S19592C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19592C4_nt,    ABISELECT(48,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S836C39,    ABISELECT(48,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S19592C5_nt,    ABISELECT(48,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S19592C3_nt,    ABISELECT(48,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19592C2_nt,    ABISELECT(48,28), //bcp->offset
    10, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19592C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S836C39,    ABISELECT(104,64), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S19592C5_nt,    ABISELECT(104,64), //bcp->offset
    18, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S836C39,    ABISELECT(120,76), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S19592C4_nt,    ABISELECT(120,76), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S19592C7_nt,    ABISELECT(120,76), //bcp->offset
    24, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    25, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    11, //immediately_derived
  0, 1},
  {&cd_S19592C9_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S836C29,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S836C39,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S19592C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19592C1[];
extern void _ZN8S19592C1D1Ev();
extern void _ZN8S19592C1D0Ev();
extern void ABISELECT(_ZTv0_n24_N8S19592C1D1Ev,_ZTv0_n12_N8S19592C1D1Ev)();
extern void ABISELECT(_ZThn48_N8S19592C1D1Ev,_ZThn28_N8S19592C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19592C1D0Ev,_ZTv0_n12_N8S19592C1D0Ev)();
extern void ABISELECT(_ZThn48_N8S19592C1D0Ev,_ZThn28_N8S19592C1D0Ev)() __attribute__((weak));
extern void _ZN11S19592C2_nt2v1Ev();
extern void ABISELECT(_ZTv0_n24_N8S19592C1D1Ev,_ZTv0_n12_N8S19592C1D1Ev)();
extern void ABISELECT(_ZThn104_N8S19592C1D1Ev,_ZThn64_N8S19592C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19592C1D0Ev,_ZTv0_n12_N8S19592C1D0Ev)();
extern void ABISELECT(_ZThn104_N8S19592C1D0Ev,_ZThn64_N8S19592C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19592C1D1Ev,_ZTv0_n20_N8S19592C1D1Ev)();
extern void ABISELECT(_ZThn120_N8S19592C1D1Ev,_ZThn76_N8S19592C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19592C1D0Ev,_ZTv0_n20_N8S19592C1D0Ev)();
extern void ABISELECT(_ZThn120_N8S19592C1D0Ev,_ZThn76_N8S19592C1D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19592C1[] = {
  0,
  ABISELECT(48,28),
  0,
  ABISELECT(120,76),
  ABISELECT(48,28),
  ABISELECT(104,64),
  0,
  (VTBL_ENTRY)&(_ZTI8S19592C1[0]),
  (VTBL_ENTRY)&_ZN8S19592C1D1Ev,
  (VTBL_ENTRY)&_ZN8S19592C1D0Ev,
  0,
  0,
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI8S19592C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19592C1D1Ev,_ZTv0_n12_N8S19592C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19592C1D0Ev,_ZTv0_n12_N8S19592C1D0Ev),
  (VTBL_ENTRY)&_ZN11S19592C2_nt2v1Ev,
  ABISELECT(-56,-36),
  ABISELECT(-104,-64),
  ABISELECT(-104,-64),
  (VTBL_ENTRY)&(_ZTI8S19592C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19592C1D1Ev,_ZTv0_n12_N8S19592C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19592C1D0Ev,_ZTv0_n12_N8S19592C1D0Ev),
  ABISELECT(-120,-76),
  ABISELECT(-72,-48),
  ABISELECT(-16,-12),
  ABISELECT(-120,-76),
  (VTBL_ENTRY)&(_ZTI8S19592C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19592C1D1Ev,_ZTv0_n20_N8S19592C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19592C1D0Ev,_ZTv0_n20_N8S19592C1D0Ev),
};
extern VTBL_ENTRY _ZTV8S19592C1[];
extern void _ZN8S19592C8D1Ev();
extern void _ZN8S19592C8D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19592C8__8S19592C1[] = {
  0,
  ABISELECT(48,28),
  0,
  ABISELECT(120,76),
  ABISELECT(48,28),
  ABISELECT(104,64),
  0,
  (VTBL_ENTRY)&(_ZTI8S19592C8[0]),
  (VTBL_ENTRY)&_ZN8S19592C8D1Ev,
  (VTBL_ENTRY)&_ZN8S19592C8D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19592C8D1Ev,_ZTv0_n12_N8S19592C8D1Ev)();
extern void ABISELECT(_ZThn48_N8S19592C8D1Ev,_ZThn28_N8S19592C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19592C8D0Ev,_ZTv0_n12_N8S19592C8D0Ev)();
extern void ABISELECT(_ZThn48_N8S19592C8D0Ev,_ZThn28_N8S19592C8D0Ev)() __attribute__((weak));
extern void _ZN11S19592C2_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV11S19592C2_nt__8S19592C8__8S19592C1[] = {
  0,
  0,
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI8S19592C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19592C8D1Ev,_ZTv0_n12_N8S19592C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19592C8D0Ev,_ZTv0_n12_N8S19592C8D0Ev),
  (VTBL_ENTRY)&_ZN11S19592C2_nt2v1Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19592C8D1Ev,_ZTv0_n12_N8S19592C8D1Ev)();
extern void ABISELECT(_ZThn104_N8S19592C8D1Ev,_ZThn64_N8S19592C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19592C8D0Ev,_ZTv0_n12_N8S19592C8D0Ev)();
extern void ABISELECT(_ZThn104_N8S19592C8D0Ev,_ZThn64_N8S19592C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV11S19592C5_nt__A1__8S19592C8__8S19592C1[] = {
  ABISELECT(-56,-36),
  ABISELECT(-104,-64),
  ABISELECT(-104,-64),
  (VTBL_ENTRY)&(_ZTI8S19592C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19592C8D1Ev,_ZTv0_n12_N8S19592C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19592C8D0Ev,_ZTv0_n12_N8S19592C8D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S19592C8D1Ev,_ZTv0_n20_N8S19592C8D1Ev)();
extern void ABISELECT(_ZThn120_N8S19592C8D1Ev,_ZThn76_N8S19592C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19592C8D0Ev,_ZTv0_n20_N8S19592C8D0Ev)();
extern void ABISELECT(_ZThn120_N8S19592C8D0Ev,_ZThn76_N8S19592C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV11S19592C7_nt__8S19592C8__8S19592C1[] = {
  ABISELECT(-120,-76),
  ABISELECT(-72,-48),
  ABISELECT(-16,-12),
  ABISELECT(-120,-76),
  (VTBL_ENTRY)&(_ZTI8S19592C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19592C8D1Ev,_ZTv0_n20_N8S19592C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19592C8D0Ev,_ZTv0_n20_N8S19592C8D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N11S19592C2_ntD1Ev,_ZTv0_n12_N11S19592C2_ntD1Ev)();
extern void _ZN11S19592C2_ntD1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N11S19592C2_ntD0Ev,_ZTv0_n12_N11S19592C2_ntD0Ev)();
extern void _ZN11S19592C2_ntD0Ev() __attribute__((weak));
extern void _ZN11S19592C2_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV11S19592C2_nt__8S19592C1[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI11S19592C2_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N11S19592C2_ntD1Ev,_ZTv0_n12_N11S19592C2_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N11S19592C2_ntD0Ev,_ZTv0_n12_N11S19592C2_ntD0Ev),
  (VTBL_ENTRY)&_ZN11S19592C2_nt2v1Ev,
};
extern void ABISELECT(_ZTv0_n24_N11S19592C3_ntD1Ev,_ZTv0_n12_N11S19592C3_ntD1Ev)();
extern void _ZN11S19592C3_ntD1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N11S19592C3_ntD0Ev,_ZTv0_n12_N11S19592C3_ntD0Ev)();
extern void _ZN11S19592C3_ntD0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV11S19592C3_nt11S19592C2_nt__8S19592C1[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI11S19592C3_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N11S19592C3_ntD1Ev,_ZTv0_n12_N11S19592C3_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N11S19592C3_ntD0Ev,_ZTv0_n12_N11S19592C3_ntD0Ev),
};
extern void ABISELECT(_ZTv0_n24_N11S19592C5_ntD1Ev,_ZTv0_n12_N11S19592C5_ntD1Ev)();
extern void _ZN11S19592C5_ntD1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N11S19592C5_ntD0Ev,_ZTv0_n12_N11S19592C5_ntD0Ev)();
extern void _ZN11S19592C5_ntD0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV11S19592C5_nt11S19592C3_nt11S19592C2_nt__8S19592C1[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI11S19592C5_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N11S19592C5_ntD1Ev,_ZTv0_n12_N11S19592C5_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N11S19592C5_ntD0Ev,_ZTv0_n12_N11S19592C5_ntD0Ev),
};
extern void _ZN11S19592C9_ntD1Ev();
extern void _ZN11S19592C9_ntD0Ev();
static  VTBL_ENTRY _tg__ZTV11S19592C9_nt__8S19592C1[] = {
  ABISELECT(120,76),
  ABISELECT(48,28),
  ABISELECT(104,64),
  0,
  (VTBL_ENTRY)&(_ZTI11S19592C9_nt[0]),
  (VTBL_ENTRY)&_ZN11S19592C9_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S19592C9_ntD0Ev,
};
extern void ABISELECT(_ZTv0_n24_N11S19592C9_ntD1Ev,_ZTv0_n12_N11S19592C9_ntD1Ev)();
extern void ABISELECT(_ZThn104_N11S19592C9_ntD1Ev,_ZThn64_N11S19592C9_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N11S19592C9_ntD0Ev,_ZTv0_n12_N11S19592C9_ntD0Ev)();
extern void ABISELECT(_ZThn104_N11S19592C9_ntD0Ev,_ZThn64_N11S19592C9_ntD0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV11S19592C5_nt__11S19592C9_nt__8S19592C1[] = {
  ABISELECT(-56,-36),
  ABISELECT(-104,-64),
  ABISELECT(-104,-64),
  (VTBL_ENTRY)&(_ZTI11S19592C9_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N11S19592C9_ntD1Ev,_ZTv0_n12_N11S19592C9_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N11S19592C9_ntD0Ev,_ZTv0_n12_N11S19592C9_ntD0Ev),
};
extern void ABISELECT(_ZTv0_n24_N11S19592C9_ntD1Ev,_ZTv0_n12_N11S19592C9_ntD1Ev)();
extern void ABISELECT(_ZThn48_N11S19592C9_ntD1Ev,_ZThn28_N11S19592C9_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N11S19592C9_ntD0Ev,_ZTv0_n12_N11S19592C9_ntD0Ev)();
extern void ABISELECT(_ZThn48_N11S19592C9_ntD0Ev,_ZThn28_N11S19592C9_ntD0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV11S19592C4_nt__A1__11S19592C9_nt__8S19592C1[] = {
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI11S19592C9_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N11S19592C9_ntD1Ev,_ZTv0_n12_N11S19592C9_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N11S19592C9_ntD0Ev,_ZTv0_n12_N11S19592C9_ntD0Ev),
};
extern void ABISELECT(_ZTv0_n40_N11S19592C9_ntD1Ev,_ZTv0_n20_N11S19592C9_ntD1Ev)();
extern void ABISELECT(_ZThn120_N11S19592C9_ntD1Ev,_ZThn76_N11S19592C9_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N11S19592C9_ntD0Ev,_ZTv0_n20_N11S19592C9_ntD0Ev)();
extern void ABISELECT(_ZThn120_N11S19592C9_ntD0Ev,_ZThn76_N11S19592C9_ntD0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV11S19592C7_nt__11S19592C9_nt__8S19592C1[] = {
  ABISELECT(-120,-76),
  ABISELECT(-72,-48),
  ABISELECT(-16,-12),
  ABISELECT(-120,-76),
  (VTBL_ENTRY)&(_ZTI11S19592C9_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N11S19592C9_ntD1Ev,_ZTv0_n20_N11S19592C9_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N11S19592C9_ntD0Ev,_ZTv0_n20_N11S19592C9_ntD0Ev),
};
extern void ABISELECT(_ZTv0_n24_N11S19592C5_ntD1Ev,_ZTv0_n12_N11S19592C5_ntD1Ev)();
extern void _ZN11S19592C5_ntD1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N11S19592C5_ntD0Ev,_ZTv0_n12_N11S19592C5_ntD0Ev)();
extern void _ZN11S19592C5_ntD0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV11S19592C5_nt__A1__8S19592C1[] = {
  ABISELECT(-56,-36),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI11S19592C5_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N11S19592C5_ntD1Ev,_ZTv0_n12_N11S19592C5_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N11S19592C5_ntD0Ev,_ZTv0_n12_N11S19592C5_ntD0Ev),
};
extern void ABISELECT(_ZTv0_n24_N11S19592C5_ntD1Ev,_ZTv0_n12_N11S19592C5_ntD1Ev)();
extern void ABISELECT(_ZTv0_n24_N11S19592C5_ntD0Ev,_ZTv0_n12_N11S19592C5_ntD0Ev)();
static  VTBL_ENTRY _tg__ZTV11S19592C4_nt__11S19592C5_nt__A1__8S19592C1[] = {
  ABISELECT(56,36),
  ABISELECT(56,36),
  (VTBL_ENTRY)&(_ZTI11S19592C5_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N11S19592C5_ntD1Ev,_ZTv0_n12_N11S19592C5_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N11S19592C5_ntD0Ev,_ZTv0_n12_N11S19592C5_ntD0Ev),
};
extern void _ZN11S19592C7_ntD1Ev();
extern void _ZN11S19592C7_ntD0Ev();
static  VTBL_ENTRY _tg__ZTV11S19592C7_nt__8S19592C1[] = {
  ABISELECT(-72,-48),
  ABISELECT(-16,-12),
  0,
  (VTBL_ENTRY)&(_ZTI11S19592C7_nt[0]),
  (VTBL_ENTRY)&_ZN11S19592C7_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S19592C7_ntD0Ev,
};
extern void ABISELECT(_ZTv0_n24_N11S19592C7_ntD1Ev,_ZTv0_n12_N11S19592C7_ntD1Ev)();
extern void ABISELECT(_ZTv0_n24_N11S19592C7_ntD0Ev,_ZTv0_n12_N11S19592C7_ntD0Ev)();
static  VTBL_ENTRY _tg__ZTV11S19592C5_nt__11S19592C7_nt__8S19592C1[] = {
  ABISELECT(-56,-36),
  ABISELECT(16,12),
  ABISELECT(16,12),
  (VTBL_ENTRY)&(_ZTI11S19592C7_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N11S19592C7_ntD1Ev,_ZTv0_n12_N11S19592C7_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N11S19592C7_ntD0Ev,_ZTv0_n12_N11S19592C7_ntD0Ev),
};
extern void ABISELECT(_ZTv0_n24_N11S19592C7_ntD1Ev,_ZTv0_n12_N11S19592C7_ntD1Ev)();
extern void ABISELECT(_ZTv0_n24_N11S19592C7_ntD0Ev,_ZTv0_n12_N11S19592C7_ntD0Ev)();
static  VTBL_ENTRY _tg__ZTV11S19592C4_nt__11S19592C7_nt__8S19592C1[] = {
  ABISELECT(72,48),
  ABISELECT(72,48),
  (VTBL_ENTRY)&(_ZTI11S19592C7_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N11S19592C7_ntD1Ev,_ZTv0_n12_N11S19592C7_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N11S19592C7_ntD0Ev,_ZTv0_n12_N11S19592C7_ntD0Ev),
};
static  VTT_ENTRY vtt_S19592C1[] = {
  {&(_ZTV8S19592C1[8]),  8,31},
  {&(_tg__ZTV8S19592C8__8S19592C1[8]),  8,10},
  {&(_tg__ZTV11S19592C2_nt__8S19592C8__8S19592C1[5]),  5,8},
  {&(_tg__ZTV11S19592C2_nt__8S19592C8__8S19592C1[5]),  5,8},
  {&(_tg__ZTV8S19592C8__8S19592C1[8]),  8,10},
  {&(_tg__ZTV11S19592C5_nt__A1__8S19592C8__8S19592C1[4]),  4,6},
  {&(_tg__ZTV11S19592C7_nt__8S19592C8__8S19592C1[5]),  5,7},
  {&(_ZTV8S19592C1[15]),  15,31},
  {&(_ZTV8S19592C1[15]),  15,31},
  {&(_ZTV8S19592C1[8]),  8,31},
  {&(_ZTV8S19592C1[22]),  22,31},
  {&(_ZTV8S19592C1[29]),  29,31},
  {&(_tg__ZTV11S19592C2_nt__8S19592C1[4]),  4,7},
  {&(_tg__ZTV11S19592C3_nt11S19592C2_nt__8S19592C1[4]),  4,6},
  {&(_tg__ZTV11S19592C5_nt11S19592C3_nt11S19592C2_nt__8S19592C1[4]),  4,6},
  {&(_tg__ZTV11S19592C5_nt11S19592C3_nt11S19592C2_nt__8S19592C1[4]),  4,6},
  {&(_tg__ZTV11S19592C3_nt11S19592C2_nt__8S19592C1[4]),  4,6},
  {&(_tg__ZTV11S19592C2_nt__8S19592C1[4]),  4,7},
  {&(_tg__ZTV11S19592C9_nt__8S19592C1[5]),  5,7},
  {&(_tg__ZTV11S19592C5_nt__11S19592C9_nt__8S19592C1[4]),  4,6},
  {&(_tg__ZTV11S19592C4_nt__A1__11S19592C9_nt__8S19592C1[3]),  3,5},
  {&(_tg__ZTV11S19592C7_nt__11S19592C9_nt__8S19592C1[5]),  5,7},
  {&(_tg__ZTV11S19592C5_nt__A1__8S19592C1[4]),  4,6},
  {&(_tg__ZTV11S19592C4_nt__11S19592C5_nt__A1__8S19592C1[3]),  3,5},
  {&(_tg__ZTV11S19592C7_nt__8S19592C1[4]),  4,6},
  {&(_tg__ZTV11S19592C5_nt__11S19592C7_nt__8S19592C1[4]),  4,6},
  {&(_tg__ZTV11S19592C4_nt__11S19592C7_nt__8S19592C1[3]),  3,5},
};
extern VTBL_ENTRY _ZTI8S19592C1[];
extern  VTBL_ENTRY _ZTV8S19592C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19592C1[];
static VTBL_ENTRY alt_thunk_names42[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N11S19592C9_ntD0Ev,_ZTv0_n20_N11S19592C9_ntD0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn120_N11S19592C9_ntD0Ev,_ZThn76_N11S19592C9_ntD0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N11S19592C9_ntD1Ev,_ZTv0_n20_N11S19592C9_ntD1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn120_N11S19592C9_ntD1Ev,_ZThn76_N11S19592C9_ntD1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N11S19592C9_ntD0Ev,_ZTv0_n12_N11S19592C9_ntD0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N11S19592C9_ntD0Ev,_ZThn28_N11S19592C9_ntD0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn104_N11S19592C9_ntD0Ev,_ZThn64_N11S19592C9_ntD0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N11S19592C9_ntD1Ev,_ZTv0_n12_N11S19592C9_ntD1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N11S19592C9_ntD1Ev,_ZThn28_N11S19592C9_ntD1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn104_N11S19592C9_ntD1Ev,_ZThn64_N11S19592C9_ntD1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N11S19592C5_ntD0Ev,_ZTv0_n12_N11S19592C5_ntD0Ev), // 
  (VTBL_ENTRY)_ZN11S19592C5_ntD0Ev,
  (VTBL_ENTRY)_ZN11S19592C5_ntD0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N11S19592C5_ntD1Ev,_ZTv0_n12_N11S19592C5_ntD1Ev), // 
  (VTBL_ENTRY)_ZN11S19592C5_ntD1Ev,
  (VTBL_ENTRY)_ZN11S19592C5_ntD1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N11S19592C3_ntD0Ev,_ZTv0_n12_N11S19592C3_ntD0Ev), // 
  (VTBL_ENTRY)_ZN11S19592C3_ntD0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N11S19592C3_ntD1Ev,_ZTv0_n12_N11S19592C3_ntD1Ev), // 
  (VTBL_ENTRY)_ZN11S19592C3_ntD1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N11S19592C2_ntD0Ev,_ZTv0_n12_N11S19592C2_ntD0Ev), // 
  (VTBL_ENTRY)_ZN11S19592C2_ntD0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N11S19592C2_ntD1Ev,_ZTv0_n12_N11S19592C2_ntD1Ev), // 
  (VTBL_ENTRY)_ZN11S19592C2_ntD1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19592C8D0Ev,_ZTv0_n20_N8S19592C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn120_N8S19592C8D0Ev,_ZThn76_N8S19592C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19592C8D1Ev,_ZTv0_n20_N8S19592C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn120_N8S19592C8D1Ev,_ZThn76_N8S19592C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19592C8D0Ev,_ZTv0_n12_N8S19592C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N8S19592C8D0Ev,_ZThn64_N8S19592C8D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S19592C8D0Ev,_ZThn28_N8S19592C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19592C8D1Ev,_ZTv0_n12_N8S19592C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N8S19592C8D1Ev,_ZThn64_N8S19592C8D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S19592C8D1Ev,_ZThn28_N8S19592C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19592C1D0Ev,_ZTv0_n20_N8S19592C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn120_N8S19592C1D0Ev,_ZThn76_N8S19592C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19592C1D1Ev,_ZTv0_n20_N8S19592C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn120_N8S19592C1D1Ev,_ZThn76_N8S19592C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19592C1D0Ev,_ZTv0_n12_N8S19592C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N8S19592C1D0Ev,_ZThn64_N8S19592C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S19592C1D0Ev,_ZThn28_N8S19592C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19592C1D1Ev,_ZTv0_n12_N8S19592C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N8S19592C1D1Ev,_ZThn64_N8S19592C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S19592C1D1Ev,_ZThn28_N8S19592C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19592C1 = {  "S19592C1", // class name
  bases_S19592C1, 15,
  &(vtc_S19592C1[0]), // expected_vtbl_contents
  &(vtt_S19592C1[0]), // expected_vtt_contents
  ABISELECT(136,84), // object size
  NSPAIRA(_ZTI8S19592C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19592C1),31, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19592C1),27, //virtual table table var
  10, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names42,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S12430C5_nt  {
  void *s12430c5f0[3];
};
//SIG(-1 S12430C5_nt) C1{ Fp[3]}



//skip512 S12430C5_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S12430C2  {
  int s12430c2f0[10];
  ::S2423C14 s12430c2f1;
  void *s12430c2f2[2];
  ::S12430C5_nt s12430c2f3[2];
};
//SIG(-1 S12430C2) C1{ Fi[10] FU2{ Fc[16] FC3{ Fc Fc Fc[14]}} Fp[2] FC4{ Fp[3]}[2]}



static void Test_S12430C2()
{
  {
    init_simple_test("S12430C2");
    S12430C2 lv;
    check2(sizeof(lv), ABISELECT(120,88), "sizeof(S12430C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S12430C2)");
    check_field_offset(lv, s12430c2f0, 0, "S12430C2.s12430c2f0");
    check_field_offset(lv, s12430c2f1, 40, "S12430C2.s12430c2f1");
    check_field_offset(lv, s12430c2f2, 56, "S12430C2.s12430c2f2");
    check_field_offset(lv, s12430c2f3, ABISELECT(72,64), "S12430C2.s12430c2f3");
  }
}
static Arrange_To_Call_Me vS12430C2(Test_S12430C2, "S12430C2", ABISELECT(120,88));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S12430C6  {
  int s12430c6f0;
  int s12430c6f1;
  char s12430c6f2;
  char s12430c6f3;
  short s12430c6f4;
  short s12430c6f5;
  char s12430c6f6;
  char s12430c6f7;
  char s12430c6f8;
  char s12430c6f9;
  char s12430c6f10[3];
  char s12430c6f11[3];
  ::S4299C9_nt s12430c6f12;
};
//SIG(-1 S12430C6) C1{ Fi[2] Fc[2] Fs[2] Fc[10] FC2{ Fi[2]}}



static void Test_S12430C6()
{
  {
    init_simple_test("S12430C6");
    S12430C6 lv;
    check2(sizeof(lv), 32, "sizeof(S12430C6)");
    check2(__alignof__(lv), 4, "__alignof__(S12430C6)");
    check_field_offset(lv, s12430c6f0, 0, "S12430C6.s12430c6f0");
    check_field_offset(lv, s12430c6f1, 4, "S12430C6.s12430c6f1");
    check_field_offset(lv, s12430c6f2, 8, "S12430C6.s12430c6f2");
    check_field_offset(lv, s12430c6f3, 9, "S12430C6.s12430c6f3");
    check_field_offset(lv, s12430c6f4, 10, "S12430C6.s12430c6f4");
    check_field_offset(lv, s12430c6f5, 12, "S12430C6.s12430c6f5");
    check_field_offset(lv, s12430c6f6, 14, "S12430C6.s12430c6f6");
    check_field_offset(lv, s12430c6f7, 15, "S12430C6.s12430c6f7");
    check_field_offset(lv, s12430c6f8, 16, "S12430C6.s12430c6f8");
    check_field_offset(lv, s12430c6f9, 17, "S12430C6.s12430c6f9");
    check_field_offset(lv, s12430c6f10, 18, "S12430C6.s12430c6f10");
    check_field_offset(lv, s12430c6f11, 21, "S12430C6.s12430c6f11");
    check_field_offset(lv, s12430c6f12, 24, "S12430C6.s12430c6f12");
  }
}
static Arrange_To_Call_Me vS12430C6(Test_S12430C6, "S12430C6", 32);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S12430C1  {
  int s12430c1f0;
  ::S12430C2 s12430c1f1;
  ::S12430C6 s12430c1f2;
};
//SIG(1 S12430C1) C1{ Fi FC2{ Fi[10] FU3{ Fc[16] FC4{ Fc Fc Fc[14]}} Fp[2] FC5{ Fp[3]}[2]} FC6{ Fi Fi Fc Fc Fs Fs Fc Fc Fc Fc Fc[3] Fc[3] FC7{ Fi Fi}}}



static void Test_S12430C1()
{
  {
    init_simple_test("S12430C1");
    S12430C1 lv;
    check2(sizeof(lv), ABISELECT(160,124), "sizeof(S12430C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S12430C1)");
    check_field_offset(lv, s12430c1f0, 0, "S12430C1.s12430c1f0");
    check_field_offset(lv, s12430c1f1, ABISELECT(8,4), "S12430C1.s12430c1f1");
    check_field_offset(lv, s12430c1f2, ABISELECT(128,92), "S12430C1.s12430c1f2");
  }
}
static Arrange_To_Call_Me vS12430C1(Test_S12430C1, "S12430C1", ABISELECT(160,124));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S21670C1  {
  int s21670c1f0[3];
  ::S836C21_nt s21670c1f1;
  ::S836C21_nt s21670c1f2;
  ::S836C21_nt s21670c1f3;
  ::S836C21_nt s21670c1f4;
  ::S836C21_nt s21670c1f5;
  ::S836C21_nt s21670c1f6;
  ::S836C21_nt s21670c1f7;
  ::S836C21_nt s21670c1f8;
  ::S836C21_nt s21670c1f9;
  ::S836C21_nt s21670c1f10;
  ::S836C21_nt s21670c1f11;
  ::S836C21_nt s21670c1f12;
  ::S836C21_nt s21670c1f13;
  ::S836C21_nt s21670c1f14;
  ::S836C21_nt s21670c1f15;
  ::S836C21_nt s21670c1f16;
  ::S836C21_nt s21670c1f17;
  ::S836C21_nt s21670c1f18;
  int s21670c1f19;
  ::S836C21_nt s21670c1f20;
  int s21670c1f21[3];
  ::S836C21_nt s21670c1f22;
  int s21670c1f23;
  void  mf21670c1(); // _ZN8S21670C19mf21670c1Ev
  virtual  ~S21670C1(); // _ZN8S21670C1D1Ev
  S21670C1(); // tgen
};
//SIG(1 S21670C1) C1{ vd m Fi[3] FC2{ m Fp Fi FC3{ m}} FC2 FC2 FC2 FC2 FC2 FC2 FC2 FC2 FC2 FC2 FC2 FC2 FC2 FC2 FC2 FC2 FC2 Fi FC2 Fi[3] FC2 Fi}


void  S21670C1 ::mf21670c1(){}
 S21670C1 ::~S21670C1(){ note_dtor("S21670C1", this);}
S21670C1 ::S21670C1(){ note_ctor("S21670C1", this);} // tgen

static void Test_S21670C1()
{
  extern Class_Descriptor cd_S21670C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(48,70)];
    init_test(&cd_S21670C1, buf);
    S21670C1 *dp, &lv = *(dp=new (buf) S21670C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(376,276), "sizeof(S21670C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21670C1)");
    check_field_offset(lv, s21670c1f0, ABISELECT(8,4), "S21670C1.s21670c1f0");
    check_field_offset(lv, s21670c1f1, ABISELECT(24,16), "S21670C1.s21670c1f1");
    check_field_offset(lv, s21670c1f2, ABISELECT(40,28), "S21670C1.s21670c1f2");
    check_field_offset(lv, s21670c1f3, ABISELECT(56,40), "S21670C1.s21670c1f3");
    check_field_offset(lv, s21670c1f4, ABISELECT(72,52), "S21670C1.s21670c1f4");
    check_field_offset(lv, s21670c1f5, ABISELECT(88,64), "S21670C1.s21670c1f5");
    check_field_offset(lv, s21670c1f6, ABISELECT(104,76), "S21670C1.s21670c1f6");
    check_field_offset(lv, s21670c1f7, ABISELECT(120,88), "S21670C1.s21670c1f7");
    check_field_offset(lv, s21670c1f8, ABISELECT(136,100), "S21670C1.s21670c1f8");
    check_field_offset(lv, s21670c1f9, ABISELECT(152,112), "S21670C1.s21670c1f9");
    check_field_offset(lv, s21670c1f10, ABISELECT(168,124), "S21670C1.s21670c1f10");
    check_field_offset(lv, s21670c1f11, ABISELECT(184,136), "S21670C1.s21670c1f11");
    check_field_offset(lv, s21670c1f12, ABISELECT(200,148), "S21670C1.s21670c1f12");
    check_field_offset(lv, s21670c1f13, ABISELECT(216,160), "S21670C1.s21670c1f13");
    check_field_offset(lv, s21670c1f14, ABISELECT(232,172), "S21670C1.s21670c1f14");
    check_field_offset(lv, s21670c1f15, ABISELECT(248,184), "S21670C1.s21670c1f15");
    check_field_offset(lv, s21670c1f16, ABISELECT(264,196), "S21670C1.s21670c1f16");
    check_field_offset(lv, s21670c1f17, ABISELECT(280,208), "S21670C1.s21670c1f17");
    check_field_offset(lv, s21670c1f18, ABISELECT(296,220), "S21670C1.s21670c1f18");
    check_field_offset(lv, s21670c1f19, ABISELECT(312,232), "S21670C1.s21670c1f19");
    check_field_offset(lv, s21670c1f20, ABISELECT(320,236), "S21670C1.s21670c1f20");
    check_field_offset(lv, s21670c1f21, ABISELECT(336,248), "S21670C1.s21670c1f21");
    check_field_offset(lv, s21670c1f22, ABISELECT(352,260), "S21670C1.s21670c1f22");
    check_field_offset(lv, s21670c1f23, ABISELECT(368,272), "S21670C1.s21670c1f23");
    test_class_info(&lv, &cd_S21670C1);
    dp->~S21670C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21670C1(Test_S21670C1, "S21670C1", ABISELECT(376,276));

#else // __cplusplus

extern void _ZN8S21670C1C1Ev();
extern void _ZN8S21670C1D1Ev();
Name_Map name_map_S21670C1[] = {
  NSPAIR(_ZN8S21670C1C1Ev),
  NSPAIR(_ZN8S21670C1D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S21670C1[];
extern void _ZN8S21670C1D1Ev();
extern void _ZN8S21670C1D0Ev();
static  VTBL_ENTRY vtc_S21670C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S21670C1[0]),
  (VTBL_ENTRY)&_ZN8S21670C1D1Ev,
  (VTBL_ENTRY)&_ZN8S21670C1D0Ev,
};
extern VTBL_ENTRY _ZTI8S21670C1[];
extern  VTBL_ENTRY _ZTV8S21670C1[];
Class_Descriptor cd_S21670C1 = {  "S21670C1", // class name
  0,0,//no base classes
  &(vtc_S21670C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(376,276), // object size
  NSPAIRA(_ZTI8S21670C1),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S21670C1),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2168C4_nt  {
  ::S836C21_nt s2168c4f0;
  int s2168c4f1[2];
  char s2168c4f2;
  virtual  ~S2168C4_nt(); // _ZN10S2168C4_ntD1Ev
  virtual void  v3(); // _ZN10S2168C4_nt2v3Ev
  virtual void  v4(); // _ZN10S2168C4_nt2v4Ev
  virtual void  v5(); // _ZN10S2168C4_nt2v5Ev
  S2168C4_nt(); // tgen
};
//SIG(-1 S2168C4_nt) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S2168C4_nt ::~S2168C4_nt(){ note_dtor("S2168C4_nt", this);}
void  S2168C4_nt ::v3(){vfunc_called(this, "_ZN10S2168C4_nt2v3Ev");}
void  S2168C4_nt ::v4(){vfunc_called(this, "_ZN10S2168C4_nt2v4Ev");}
void  S2168C4_nt ::v5(){vfunc_called(this, "_ZN10S2168C4_nt2v5Ev");}
S2168C4_nt ::S2168C4_nt(){ note_ctor("S2168C4_nt", this);} // tgen

//skip512 S2168C4_nt

#else // __cplusplus

extern void _ZN10S2168C4_ntC1Ev();
extern void _ZN10S2168C4_ntD1Ev();
Name_Map name_map_S2168C4_nt[] = {
  NSPAIR(_ZN10S2168C4_ntC1Ev),
  NSPAIR(_ZN10S2168C4_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S2168C4_nt[];
extern void _ZN10S2168C4_ntD1Ev();
extern void _ZN10S2168C4_ntD0Ev();
extern void _ZN10S2168C4_nt2v3Ev();
extern void _ZN10S2168C4_nt2v4Ev();
extern void _ZN10S2168C4_nt2v5Ev();
static  VTBL_ENTRY vtc_S2168C4_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S2168C4_nt[0]),
  (VTBL_ENTRY)&_ZN10S2168C4_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S2168C4_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S2168C4_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S2168C4_nt2v4Ev,
  (VTBL_ENTRY)&_ZN10S2168C4_nt2v5Ev,
};
extern VTBL_ENTRY _ZTI10S2168C4_nt[];
VTBL_ENTRY *P__ZTI10S2168C4_nt = _ZTI10S2168C4_nt; 
extern  VTBL_ENTRY _ZTV10S2168C4_nt[];
Class_Descriptor cd_S2168C4_nt = {  "S2168C4_nt", // class name
  0,0,//no base classes
  &(vtc_S2168C4_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI10S2168C4_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S2168C4_nt),7, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2168C3_nt  : S2168C4_nt {
  void *s2168c3f0;
  virtual void  v6(); // _ZN10S2168C3_nt2v6Ev
  virtual void  v7(); // _ZN10S2168C3_nt2v7Ev
  ~S2168C3_nt(); // tgen
  S2168C3_nt(); // tgen
};
//SIG(-1 S2168C3_nt) C1{ BC2{ vd v3 v4 v5 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} v1 v2 Fp}


void  S2168C3_nt ::v6(){vfunc_called(this, "_ZN10S2168C3_nt2v6Ev");}
void  S2168C3_nt ::v7(){vfunc_called(this, "_ZN10S2168C3_nt2v7Ev");}
S2168C3_nt ::~S2168C3_nt(){ note_dtor("S2168C3_nt", this);} // tgen
S2168C3_nt ::S2168C3_nt(){ note_ctor("S2168C3_nt", this);} // tgen

//skip512 S2168C3_nt

#else // __cplusplus

extern void _ZN10S2168C3_ntC1Ev();
extern void _ZN10S2168C3_ntD1Ev();
Name_Map name_map_S2168C3_nt[] = {
  NSPAIR(_ZN10S2168C3_ntC1Ev),
  NSPAIR(_ZN10S2168C3_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2168C4_nt;
extern VTBL_ENTRY _ZTI10S2168C4_nt[];
extern  VTBL_ENTRY _ZTV10S2168C4_nt[];
static Base_Class bases_S2168C3_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2168C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI10S2168C3_nt[];
extern void _ZN10S2168C3_ntD1Ev();
extern void _ZN10S2168C3_ntD0Ev();
extern void _ZN10S2168C4_nt2v3Ev();
extern void _ZN10S2168C4_nt2v4Ev();
extern void _ZN10S2168C4_nt2v5Ev();
extern void _ZN10S2168C3_nt2v6Ev();
extern void _ZN10S2168C3_nt2v7Ev();
static  VTBL_ENTRY vtc_S2168C3_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S2168C3_nt[0]),
  (VTBL_ENTRY)&_ZN10S2168C3_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S2168C3_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S2168C4_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S2168C4_nt2v4Ev,
  (VTBL_ENTRY)&_ZN10S2168C4_nt2v5Ev,
  (VTBL_ENTRY)&_ZN10S2168C3_nt2v6Ev,
  (VTBL_ENTRY)&_ZN10S2168C3_nt2v7Ev,
};
extern VTBL_ENTRY _ZTI10S2168C3_nt[];
VTBL_ENTRY *P__ZTI10S2168C3_nt = _ZTI10S2168C3_nt; 
extern  VTBL_ENTRY _ZTV10S2168C3_nt[];
Class_Descriptor cd_S2168C3_nt = {  "S2168C3_nt", // class name
  bases_S2168C3_nt, 1,
  &(vtc_S2168C3_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI10S2168C3_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV10S2168C3_nt),9, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2168C2  : S2168C3_nt {
  ::S4162C7_nt s2168c2f0;
  int s2168c2f1[2];
  void *s2168c2f2[2];
  int s2168c2f3;
  void *s2168c2f4[2];
  int s2168c2f5;
  virtual  ~S2168C2(); // _ZN7S2168C2D1Ev
  virtual void  v8(); // _ZN7S2168C22v8Ev
  virtual void  v9(); // _ZN7S2168C22v9Ev
  S2168C2(); // tgen
};
//SIG(-1 S2168C2) C1{ BC2{ BC3{ vd v3 v4 v5 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} v6 v7 Fp} vd v1 v2 FC6{ m Fp[2]} Fi[2] Fp[2] Fi Fp[2] Fi}


 S2168C2 ::~S2168C2(){ note_dtor("S2168C2", this);}
void  S2168C2 ::v8(){vfunc_called(this, "_ZN7S2168C22v8Ev");}
void  S2168C2 ::v9(){vfunc_called(this, "_ZN7S2168C22v9Ev");}
S2168C2 ::S2168C2(){ note_ctor("S2168C2", this);} // tgen

static void Test_S2168C2()
{
  extern Class_Descriptor cd_S2168C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(16,19)];
    init_test(&cd_S2168C2, buf);
    S2168C2 *dp, &lv = *(dp=new (buf) S2168C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(120,72), "sizeof(S2168C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2168C2)");
    check_base_class_offset(lv, (S2168C4_nt*)(S2168C3_nt*), 0, "S2168C2");
    check_base_class_offset(lv, (S2168C3_nt*), 0, "S2168C2");
    check_field_offset(lv, s2168c2f0, ABISELECT(48,32), "S2168C2.s2168c2f0");
    check_field_offset(lv, s2168c2f1, ABISELECT(64,40), "S2168C2.s2168c2f1");
    check_field_offset(lv, s2168c2f2, ABISELECT(72,48), "S2168C2.s2168c2f2");
    check_field_offset(lv, s2168c2f3, ABISELECT(88,56), "S2168C2.s2168c2f3");
    check_field_offset(lv, s2168c2f4, ABISELECT(96,60), "S2168C2.s2168c2f4");
    check_field_offset(lv, s2168c2f5, ABISELECT(112,68), "S2168C2.s2168c2f5");
    test_class_info(&lv, &cd_S2168C2);
    dp->~S2168C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2168C2(Test_S2168C2, "S2168C2", ABISELECT(120,72));

#else // __cplusplus

extern void _ZN7S2168C2C1Ev();
extern void _ZN7S2168C2D1Ev();
Name_Map name_map_S2168C2[] = {
  NSPAIR(_ZN7S2168C2C1Ev),
  NSPAIR(_ZN7S2168C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2168C4_nt;
extern VTBL_ENTRY _ZTI10S2168C4_nt[];
extern  VTBL_ENTRY _ZTV10S2168C4_nt[];
extern Class_Descriptor cd_S2168C3_nt;
extern VTBL_ENTRY _ZTI10S2168C3_nt[];
extern  VTBL_ENTRY _ZTV10S2168C3_nt[];
static Base_Class bases_S2168C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2168C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S2168C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S2168C2[];
extern void _ZN7S2168C2D1Ev();
extern void _ZN7S2168C2D0Ev();
extern void _ZN10S2168C4_nt2v3Ev();
extern void _ZN10S2168C4_nt2v4Ev();
extern void _ZN10S2168C4_nt2v5Ev();
extern void _ZN10S2168C3_nt2v6Ev();
extern void _ZN10S2168C3_nt2v7Ev();
extern void _ZN7S2168C22v8Ev();
extern void _ZN7S2168C22v9Ev();
static  VTBL_ENTRY vtc_S2168C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2168C2[0]),
  (VTBL_ENTRY)&_ZN7S2168C2D1Ev,
  (VTBL_ENTRY)&_ZN7S2168C2D0Ev,
  (VTBL_ENTRY)&_ZN10S2168C4_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S2168C4_nt2v4Ev,
  (VTBL_ENTRY)&_ZN10S2168C4_nt2v5Ev,
  (VTBL_ENTRY)&_ZN10S2168C3_nt2v6Ev,
  (VTBL_ENTRY)&_ZN10S2168C3_nt2v7Ev,
  (VTBL_ENTRY)&_ZN7S2168C22v8Ev,
  (VTBL_ENTRY)&_ZN7S2168C22v9Ev,
};
extern VTBL_ENTRY _ZTI7S2168C2[];
extern  VTBL_ENTRY _ZTV7S2168C2[];
Class_Descriptor cd_S2168C2 = {  "S2168C2", // class name
  bases_S2168C2, 2,
  &(vtc_S2168C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(120,72), // object size
  NSPAIRA(_ZTI7S2168C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2168C2),11, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2168C1  : S2168C2 {
  virtual  ~S2168C1(); // _ZN7S2168C1D1Ev
  virtual void  v1(); // _ZN7S2168C12v1Ev
  virtual void  v2(); // _ZN7S2168C12v2Ev
  S2168C1(); // tgen
};
//SIG(1 S2168C1) C1{ BC2{ BC3{ BC4{ vd v3 v4 v5 FC5{ m Fp Fi FC6{ m}} Fi[2] Fc} v6 v7 Fp} vd v8 v9 FC7{ m Fp[2]} Fi[2] Fp[2] Fi Fp[2] Fi} vd v1 v2}


 S2168C1 ::~S2168C1(){ note_dtor("S2168C1", this);}
void  S2168C1 ::v1(){vfunc_called(this, "_ZN7S2168C12v1Ev");}
void  S2168C1 ::v2(){vfunc_called(this, "_ZN7S2168C12v2Ev");}
S2168C1 ::S2168C1(){ note_ctor("S2168C1", this);} // tgen

static void Test_S2168C1()
{
  extern Class_Descriptor cd_S2168C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(16,19)];
    init_test(&cd_S2168C1, buf);
    S2168C1 *dp, &lv = *(dp=new (buf) S2168C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(120,72), "sizeof(S2168C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2168C1)");
    check_base_class_offset(lv, (S2168C4_nt*)(S2168C3_nt*)(S2168C2*), 0, "S2168C1");
    check_base_class_offset(lv, (S2168C3_nt*)(S2168C2*), 0, "S2168C1");
    check_base_class_offset(lv, (S2168C2*), 0, "S2168C1");
    test_class_info(&lv, &cd_S2168C1);
    dp->~S2168C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2168C1(Test_S2168C1, "S2168C1", ABISELECT(120,72));

#else // __cplusplus

extern void _ZN7S2168C1C1Ev();
extern void _ZN7S2168C1D1Ev();
Name_Map name_map_S2168C1[] = {
  NSPAIR(_ZN7S2168C1C1Ev),
  NSPAIR(_ZN7S2168C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2168C4_nt;
extern VTBL_ENTRY _ZTI10S2168C4_nt[];
extern  VTBL_ENTRY _ZTV10S2168C4_nt[];
extern Class_Descriptor cd_S2168C3_nt;
extern VTBL_ENTRY _ZTI10S2168C3_nt[];
extern  VTBL_ENTRY _ZTV10S2168C3_nt[];
extern Class_Descriptor cd_S2168C2;
extern VTBL_ENTRY _ZTI7S2168C2[];
extern  VTBL_ENTRY _ZTV7S2168C2[];
static Base_Class bases_S2168C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2168C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S2168C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S2168C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S2168C1[];
extern void _ZN7S2168C1D1Ev();
extern void _ZN7S2168C1D0Ev();
extern void _ZN10S2168C4_nt2v3Ev();
extern void _ZN10S2168C4_nt2v4Ev();
extern void _ZN10S2168C4_nt2v5Ev();
extern void _ZN10S2168C3_nt2v6Ev();
extern void _ZN10S2168C3_nt2v7Ev();
extern void _ZN7S2168C22v8Ev();
extern void _ZN7S2168C22v9Ev();
extern void _ZN7S2168C12v1Ev();
extern void _ZN7S2168C12v2Ev();
static  VTBL_ENTRY vtc_S2168C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2168C1[0]),
  (VTBL_ENTRY)&_ZN7S2168C1D1Ev,
  (VTBL_ENTRY)&_ZN7S2168C1D0Ev,
  (VTBL_ENTRY)&_ZN10S2168C4_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S2168C4_nt2v4Ev,
  (VTBL_ENTRY)&_ZN10S2168C4_nt2v5Ev,
  (VTBL_ENTRY)&_ZN10S2168C3_nt2v6Ev,
  (VTBL_ENTRY)&_ZN10S2168C3_nt2v7Ev,
  (VTBL_ENTRY)&_ZN7S2168C22v8Ev,
  (VTBL_ENTRY)&_ZN7S2168C22v9Ev,
  (VTBL_ENTRY)&_ZN7S2168C12v1Ev,
  (VTBL_ENTRY)&_ZN7S2168C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S2168C1[];
extern  VTBL_ENTRY _ZTV7S2168C1[];
Class_Descriptor cd_S2168C1 = {  "S2168C1", // class name
  bases_S2168C1, 3,
  &(vtc_S2168C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(120,72), // object size
  NSPAIRA(_ZTI7S2168C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2168C1),13, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S5323C3  {
  void *s5323c3f0[3];
  virtual  ~S5323C3(); // _ZN7S5323C3D1Ev
  virtual void  v6(); // _ZN7S5323C32v6Ev
  virtual void  v7(); // _ZN7S5323C32v7Ev
  virtual void  v8(); // _ZN7S5323C32v8Ev
  virtual void  v9(); // _ZN7S5323C32v9Ev
  virtual void  v10(); // _ZN7S5323C33v10Ev
  S5323C3(); // tgen
};
//SIG(-1 S5323C3) C1{ vd v1 v2 v3 v4 v5 Fp[3]}


 S5323C3 ::~S5323C3(){ note_dtor("S5323C3", this);}
void  S5323C3 ::v6(){vfunc_called(this, "_ZN7S5323C32v6Ev");}
void  S5323C3 ::v7(){vfunc_called(this, "_ZN7S5323C32v7Ev");}
void  S5323C3 ::v8(){vfunc_called(this, "_ZN7S5323C32v8Ev");}
void  S5323C3 ::v9(){vfunc_called(this, "_ZN7S5323C32v9Ev");}
void  S5323C3 ::v10(){vfunc_called(this, "_ZN7S5323C33v10Ev");}
S5323C3 ::S5323C3(){ note_ctor("S5323C3", this);} // tgen

static void Test_S5323C3()
{
  extern Class_Descriptor cd_S5323C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S5323C3, buf);
    S5323C3 *dp, &lv = *(dp=new (buf) S5323C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S5323C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5323C3)");
    check_field_offset(lv, s5323c3f0, ABISELECT(8,4), "S5323C3.s5323c3f0");
    test_class_info(&lv, &cd_S5323C3);
    dp->~S5323C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5323C3(Test_S5323C3, "S5323C3", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN7S5323C3C1Ev();
extern void _ZN7S5323C3D1Ev();
Name_Map name_map_S5323C3[] = {
  NSPAIR(_ZN7S5323C3C1Ev),
  NSPAIR(_ZN7S5323C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S5323C3[];
extern void _ZN7S5323C3D1Ev();
extern void _ZN7S5323C3D0Ev();
extern void _ZN7S5323C32v6Ev();
extern void _ZN7S5323C32v7Ev();
extern void _ZN7S5323C32v8Ev();
extern void _ZN7S5323C32v9Ev();
extern void _ZN7S5323C33v10Ev();
static  VTBL_ENTRY vtc_S5323C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5323C3[0]),
  (VTBL_ENTRY)&_ZN7S5323C3D1Ev,
  (VTBL_ENTRY)&_ZN7S5323C3D0Ev,
  (VTBL_ENTRY)&_ZN7S5323C32v6Ev,
  (VTBL_ENTRY)&_ZN7S5323C32v7Ev,
  (VTBL_ENTRY)&_ZN7S5323C32v8Ev,
  (VTBL_ENTRY)&_ZN7S5323C32v9Ev,
  (VTBL_ENTRY)&_ZN7S5323C33v10Ev,
};
extern VTBL_ENTRY _ZTI7S5323C3[];
extern  VTBL_ENTRY _ZTV7S5323C3[];
Class_Descriptor cd_S5323C3 = {  "S5323C3", // class name
  0,0,//no base classes
  &(vtc_S5323C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI7S5323C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S5323C3),9, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S5323C2  : S5323C3 {
  virtual  ~S5323C2(); // _ZN7S5323C2D1Ev
  virtual void  v11(); // _ZN7S5323C23v11Ev
  virtual void  v12(); // _ZN7S5323C23v12Ev
  virtual void  v13(); // _ZN7S5323C23v13Ev
  virtual void  v14(); // _ZN7S5323C23v14Ev
  virtual void  v15(); // _ZN7S5323C23v15Ev
  S5323C2(); // tgen
};
//SIG(-1 S5323C2) C1{ BC2{ vd v6 v7 v8 v9 v10 Fp[3]} vd v1 v2 v3 v4 v5}


 S5323C2 ::~S5323C2(){ note_dtor("S5323C2", this);}
void  S5323C2 ::v11(){vfunc_called(this, "_ZN7S5323C23v11Ev");}
void  S5323C2 ::v12(){vfunc_called(this, "_ZN7S5323C23v12Ev");}
void  S5323C2 ::v13(){vfunc_called(this, "_ZN7S5323C23v13Ev");}
void  S5323C2 ::v14(){vfunc_called(this, "_ZN7S5323C23v14Ev");}
void  S5323C2 ::v15(){vfunc_called(this, "_ZN7S5323C23v15Ev");}
S5323C2 ::S5323C2(){ note_ctor("S5323C2", this);} // tgen

static void Test_S5323C2()
{
  extern Class_Descriptor cd_S5323C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S5323C2, buf);
    S5323C2 *dp, &lv = *(dp=new (buf) S5323C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S5323C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5323C2)");
    check_base_class_offset(lv, (S5323C3*), 0, "S5323C2");
    test_class_info(&lv, &cd_S5323C2);
    dp->~S5323C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5323C2(Test_S5323C2, "S5323C2", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN7S5323C2C1Ev();
extern void _ZN7S5323C2D1Ev();
Name_Map name_map_S5323C2[] = {
  NSPAIR(_ZN7S5323C2C1Ev),
  NSPAIR(_ZN7S5323C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5323C3;
extern VTBL_ENTRY _ZTI7S5323C3[];
extern  VTBL_ENTRY _ZTV7S5323C3[];
static Base_Class bases_S5323C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5323C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S5323C2[];
extern void _ZN7S5323C2D1Ev();
extern void _ZN7S5323C2D0Ev();
extern void _ZN7S5323C32v6Ev();
extern void _ZN7S5323C32v7Ev();
extern void _ZN7S5323C32v8Ev();
extern void _ZN7S5323C32v9Ev();
extern void _ZN7S5323C33v10Ev();
extern void _ZN7S5323C23v11Ev();
extern void _ZN7S5323C23v12Ev();
extern void _ZN7S5323C23v13Ev();
extern void _ZN7S5323C23v14Ev();
extern void _ZN7S5323C23v15Ev();
static  VTBL_ENTRY vtc_S5323C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5323C2[0]),
  (VTBL_ENTRY)&_ZN7S5323C2D1Ev,
  (VTBL_ENTRY)&_ZN7S5323C2D0Ev,
  (VTBL_ENTRY)&_ZN7S5323C32v6Ev,
  (VTBL_ENTRY)&_ZN7S5323C32v7Ev,
  (VTBL_ENTRY)&_ZN7S5323C32v8Ev,
  (VTBL_ENTRY)&_ZN7S5323C32v9Ev,
  (VTBL_ENTRY)&_ZN7S5323C33v10Ev,
  (VTBL_ENTRY)&_ZN7S5323C23v11Ev,
  (VTBL_ENTRY)&_ZN7S5323C23v12Ev,
  (VTBL_ENTRY)&_ZN7S5323C23v13Ev,
  (VTBL_ENTRY)&_ZN7S5323C23v14Ev,
  (VTBL_ENTRY)&_ZN7S5323C23v15Ev,
};
extern VTBL_ENTRY _ZTI7S5323C2[];
extern  VTBL_ENTRY _ZTV7S5323C2[];
Class_Descriptor cd_S5323C2 = {  "S5323C2", // class name
  bases_S5323C2, 1,
  &(vtc_S5323C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI7S5323C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S5323C2),14, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S5323C1  : S5323C2 {
  ::S4162C7_nt s5323c1f0;
  ::S836C27 s5323c1f1;
  virtual  ~S5323C1(); // _ZN7S5323C1D1Ev
  virtual void  v1(); // _ZN7S5323C12v1Ev
  virtual void  v2(); // _ZN7S5323C12v2Ev
  virtual void  v3(); // _ZN7S5323C12v3Ev
  virtual void  v4(); // _ZN7S5323C12v4Ev
  virtual void  v5(); // _ZN7S5323C12v5Ev
  S5323C1(); // tgen
};
//SIG(1 S5323C1) C1{ BC2{ BC3{ vd v6 v7 v8 v9 v10 Fp[3]} vd v11 v12 v13 v14 v15} vd v1 v2 v3 v4 v5 FC4{ m Fp[2]} FC5{ m Fp Fi FC6{ m} FC7{ m}}}


 S5323C1 ::~S5323C1(){ note_dtor("S5323C1", this);}
void  S5323C1 ::v1(){vfunc_called(this, "_ZN7S5323C12v1Ev");}
void  S5323C1 ::v2(){vfunc_called(this, "_ZN7S5323C12v2Ev");}
void  S5323C1 ::v3(){vfunc_called(this, "_ZN7S5323C12v3Ev");}
void  S5323C1 ::v4(){vfunc_called(this, "_ZN7S5323C12v4Ev");}
void  S5323C1 ::v5(){vfunc_called(this, "_ZN7S5323C12v5Ev");}
S5323C1 ::S5323C1(){ note_ctor("S5323C1", this);} // tgen

static void Test_S5323C1()
{
  extern Class_Descriptor cd_S5323C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(9,10)];
    init_test(&cd_S5323C1, buf);
    S5323C1 *dp, &lv = *(dp=new (buf) S5323C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,36), "sizeof(S5323C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5323C1)");
    check_base_class_offset(lv, (S5323C3*)(S5323C2*), 0, "S5323C1");
    check_base_class_offset(lv, (S5323C2*), 0, "S5323C1");
    check_field_offset(lv, s5323c1f0, ABISELECT(32,16), "S5323C1.s5323c1f0");
    check_field_offset(lv, s5323c1f1, ABISELECT(48,24), "S5323C1.s5323c1f1");
    test_class_info(&lv, &cd_S5323C1);
    dp->~S5323C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5323C1(Test_S5323C1, "S5323C1", ABISELECT(64,36));

#else // __cplusplus

extern void _ZN7S5323C1C1Ev();
extern void _ZN7S5323C1D1Ev();
Name_Map name_map_S5323C1[] = {
  NSPAIR(_ZN7S5323C1C1Ev),
  NSPAIR(_ZN7S5323C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5323C3;
extern VTBL_ENTRY _ZTI7S5323C3[];
extern  VTBL_ENTRY _ZTV7S5323C3[];
extern Class_Descriptor cd_S5323C2;
extern VTBL_ENTRY _ZTI7S5323C2[];
extern  VTBL_ENTRY _ZTV7S5323C2[];
static Base_Class bases_S5323C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5323C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S5323C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S5323C1[];
extern void _ZN7S5323C1D1Ev();
extern void _ZN7S5323C1D0Ev();
extern void _ZN7S5323C32v6Ev();
extern void _ZN7S5323C32v7Ev();
extern void _ZN7S5323C32v8Ev();
extern void _ZN7S5323C32v9Ev();
extern void _ZN7S5323C33v10Ev();
extern void _ZN7S5323C23v11Ev();
extern void _ZN7S5323C23v12Ev();
extern void _ZN7S5323C23v13Ev();
extern void _ZN7S5323C23v14Ev();
extern void _ZN7S5323C23v15Ev();
extern void _ZN7S5323C12v1Ev();
extern void _ZN7S5323C12v2Ev();
extern void _ZN7S5323C12v3Ev();
extern void _ZN7S5323C12v4Ev();
extern void _ZN7S5323C12v5Ev();
static  VTBL_ENTRY vtc_S5323C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5323C1[0]),
  (VTBL_ENTRY)&_ZN7S5323C1D1Ev,
  (VTBL_ENTRY)&_ZN7S5323C1D0Ev,
  (VTBL_ENTRY)&_ZN7S5323C32v6Ev,
  (VTBL_ENTRY)&_ZN7S5323C32v7Ev,
  (VTBL_ENTRY)&_ZN7S5323C32v8Ev,
  (VTBL_ENTRY)&_ZN7S5323C32v9Ev,
  (VTBL_ENTRY)&_ZN7S5323C33v10Ev,
  (VTBL_ENTRY)&_ZN7S5323C23v11Ev,
  (VTBL_ENTRY)&_ZN7S5323C23v12Ev,
  (VTBL_ENTRY)&_ZN7S5323C23v13Ev,
  (VTBL_ENTRY)&_ZN7S5323C23v14Ev,
  (VTBL_ENTRY)&_ZN7S5323C23v15Ev,
  (VTBL_ENTRY)&_ZN7S5323C12v1Ev,
  (VTBL_ENTRY)&_ZN7S5323C12v2Ev,
  (VTBL_ENTRY)&_ZN7S5323C12v3Ev,
  (VTBL_ENTRY)&_ZN7S5323C12v4Ev,
  (VTBL_ENTRY)&_ZN7S5323C12v5Ev,
};
extern VTBL_ENTRY _ZTI7S5323C1[];
extern  VTBL_ENTRY _ZTV7S5323C1[];
Class_Descriptor cd_S5323C1 = {  "S5323C1", // class name
  bases_S5323C1, 2,
  &(vtc_S5323C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(64,36), // object size
  NSPAIRA(_ZTI7S5323C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S5323C1),19, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S12432C5  {
  int s12432c5f0;
  int s12432c5f1;
  char s12432c5f2;
  char s12432c5f3;
  short s12432c5f4;
  short s12432c5f5;
  char s12432c5f6;
  char s12432c5f7;
  char s12432c5f8;
  char s12432c5f9;
  char s12432c5f10[2];
  char s12432c5f11;
  char s12432c5f12[3];
  ::S4299C9_nt s12432c5f13;
};
//SIG(-1 S12432C5) C1{ Fi[2] Fc[2] Fs[2] Fc[10] FC2{ Fi[2]}}



static void Test_S12432C5()
{
  {
    init_simple_test("S12432C5");
    S12432C5 lv;
    check2(sizeof(lv), 32, "sizeof(S12432C5)");
    check2(__alignof__(lv), 4, "__alignof__(S12432C5)");
    check_field_offset(lv, s12432c5f0, 0, "S12432C5.s12432c5f0");
    check_field_offset(lv, s12432c5f1, 4, "S12432C5.s12432c5f1");
    check_field_offset(lv, s12432c5f2, 8, "S12432C5.s12432c5f2");
    check_field_offset(lv, s12432c5f3, 9, "S12432C5.s12432c5f3");
    check_field_offset(lv, s12432c5f4, 10, "S12432C5.s12432c5f4");
    check_field_offset(lv, s12432c5f5, 12, "S12432C5.s12432c5f5");
    check_field_offset(lv, s12432c5f6, 14, "S12432C5.s12432c5f6");
    check_field_offset(lv, s12432c5f7, 15, "S12432C5.s12432c5f7");
    check_field_offset(lv, s12432c5f8, 16, "S12432C5.s12432c5f8");
    check_field_offset(lv, s12432c5f9, 17, "S12432C5.s12432c5f9");
    check_field_offset(lv, s12432c5f10, 18, "S12432C5.s12432c5f10");
    check_field_offset(lv, s12432c5f11, 20, "S12432C5.s12432c5f11");
    check_field_offset(lv, s12432c5f12, 21, "S12432C5.s12432c5f12");
    check_field_offset(lv, s12432c5f13, 24, "S12432C5.s12432c5f13");
  }
}
static Arrange_To_Call_Me vS12432C5(Test_S12432C5, "S12432C5", 32);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S12432C1  {
  int s12432c1f0;
  ::S2423C13 s12432c1f1;
  ::S12432C5 s12432c1f2;
};
//SIG(1 S12432C1) C1{ Fi FC2{ Fi[10] FU3{ Fc[16] FC4{ Fc Fc Fc[14]}} Fp[2]} FC5{ Fi Fi Fc Fc Fs Fs Fc Fc Fc Fc Fc[2] Fc Fc[3] FC6{ Fi Fi}}}



static void Test_S12432C1()
{
  {
    init_simple_test("S12432C1");
    S12432C1 lv;
    check2(sizeof(lv), ABISELECT(112,100), "sizeof(S12432C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S12432C1)");
    check_field_offset(lv, s12432c1f0, 0, "S12432C1.s12432c1f0");
    check_field_offset(lv, s12432c1f1, ABISELECT(8,4), "S12432C1.s12432c1f1");
    check_field_offset(lv, s12432c1f2, ABISELECT(80,68), "S12432C1.s12432c1f2");
  }
}
static Arrange_To_Call_Me vS12432C1(Test_S12432C1, "S12432C1", ABISELECT(112,100));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S17502C1  {
  void *s17502c1f0;
  ::S2214C25_nt s17502c1f1;
  ::S836C26 s17502c1f2;
  void *s17502c1f3;
  ::S836C6_nt s17502c1f4;
  int s17502c1f5;
  char s17502c1f6;
  void  mf17502c1(); // _ZN8S17502C19mf17502c1Ev
};
//SIG(1 S17502C1) C1{ m Fp FC2{ BC3{ m Fp Fi FC4{ m} FC5{ m}}} FC6{ BC7{ m Fp Fi FC5 FC8{ m}}} Fp FC9{ BC10{ m Fp Fi FC11{ m} FC11}} Fi Fc}


void  S17502C1 ::mf17502c1(){}

static void Test_S17502C1()
{
  {
    init_simple_test("S17502C1");
    S17502C1 lv;
    check2(sizeof(lv), ABISELECT(72,52), "sizeof(S17502C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S17502C1)");
    check_field_offset(lv, s17502c1f0, 0, "S17502C1.s17502c1f0");
    check_field_offset(lv, s17502c1f1, ABISELECT(8,4), "S17502C1.s17502c1f1");
    check_field_offset(lv, s17502c1f2, ABISELECT(24,16), "S17502C1.s17502c1f2");
    check_field_offset(lv, s17502c1f3, ABISELECT(40,28), "S17502C1.s17502c1f3");
    check_field_offset(lv, s17502c1f4, ABISELECT(48,32), "S17502C1.s17502c1f4");
    check_field_offset(lv, s17502c1f5, ABISELECT(64,44), "S17502C1.s17502c1f5");
    check_field_offset(lv, s17502c1f6, ABISELECT(68,48), "S17502C1.s17502c1f6");
  }
}
static Arrange_To_Call_Me vS17502C1(Test_S17502C1, "S17502C1", ABISELECT(72,52));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S12433C1  {
  int s12433c1f0;
  ::S2423C13 s12433c1f1;
  ::S12430C6 s12433c1f2;
};
//SIG(1 S12433C1) C1{ Fi FC2{ Fi[10] FU3{ Fc[16] FC4{ Fc Fc Fc[14]}} Fp[2]} FC5{ Fi Fi Fc Fc Fs Fs Fc Fc Fc Fc Fc[3] Fc[3] FC6{ Fi Fi}}}



static void Test_S12433C1()
{
  {
    init_simple_test("S12433C1");
    S12433C1 lv;
    check2(sizeof(lv), ABISELECT(112,100), "sizeof(S12433C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S12433C1)");
    check_field_offset(lv, s12433c1f0, 0, "S12433C1.s12433c1f0");
    check_field_offset(lv, s12433c1f1, ABISELECT(8,4), "S12433C1.s12433c1f1");
    check_field_offset(lv, s12433c1f2, ABISELECT(80,68), "S12433C1.s12433c1f2");
  }
}
static Arrange_To_Call_Me vS12433C1(Test_S12433C1, "S12433C1", ABISELECT(112,100));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S9693C2  {
  ::S836C21_nt s9693c2f0;
  int s9693c2f1[2];
  char s9693c2f2;
  virtual  ~S9693C2(); // _ZN7S9693C2D1Ev
  virtual void  v4(); // _ZN7S9693C22v4Ev
  virtual void  v5(); // _ZN7S9693C22v5Ev
  virtual void  v6(); // _ZN7S9693C22v6Ev
  S9693C2(); // tgen
};
//SIG(-1 S9693C2) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S9693C2 ::~S9693C2(){ note_dtor("S9693C2", this);}
void  S9693C2 ::v4(){vfunc_called(this, "_ZN7S9693C22v4Ev");}
void  S9693C2 ::v5(){vfunc_called(this, "_ZN7S9693C22v5Ev");}
void  S9693C2 ::v6(){vfunc_called(this, "_ZN7S9693C22v6Ev");}
S9693C2 ::S9693C2(){ note_ctor("S9693C2", this);} // tgen

static void Test_S9693C2()
{
  extern Class_Descriptor cd_S9693C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S9693C2, buf);
    S9693C2 *dp, &lv = *(dp=new (buf) S9693C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S9693C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9693C2)");
    check_field_offset(lv, s9693c2f0, ABISELECT(8,4), "S9693C2.s9693c2f0");
    check_field_offset(lv, s9693c2f1, ABISELECT(24,16), "S9693C2.s9693c2f1");
    check_field_offset(lv, s9693c2f2, ABISELECT(32,24), "S9693C2.s9693c2f2");
    test_class_info(&lv, &cd_S9693C2);
    dp->~S9693C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9693C2(Test_S9693C2, "S9693C2", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S9693C2C1Ev();
extern void _ZN7S9693C2D1Ev();
Name_Map name_map_S9693C2[] = {
  NSPAIR(_ZN7S9693C2C1Ev),
  NSPAIR(_ZN7S9693C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S9693C2[];
extern void _ZN7S9693C2D1Ev();
extern void _ZN7S9693C2D0Ev();
extern void _ZN7S9693C22v4Ev();
extern void _ZN7S9693C22v5Ev();
extern void _ZN7S9693C22v6Ev();
static  VTBL_ENTRY vtc_S9693C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9693C2[0]),
  (VTBL_ENTRY)&_ZN7S9693C2D1Ev,
  (VTBL_ENTRY)&_ZN7S9693C2D0Ev,
  (VTBL_ENTRY)&_ZN7S9693C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9693C22v5Ev,
  (VTBL_ENTRY)&_ZN7S9693C22v6Ev,
};
extern VTBL_ENTRY _ZTI7S9693C2[];
extern  VTBL_ENTRY _ZTV7S9693C2[];
Class_Descriptor cd_S9693C2 = {  "S9693C2", // class name
  0,0,//no base classes
  &(vtc_S9693C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S9693C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S9693C2),7, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S9693C6_nt  {
  char s9693c6f0[20];
};
//SIG(-1 S9693C6_nt) C1{ Fc[20]}



//skip512 S9693C6_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S9693C5_nt  {
  ::S9693C6_nt s9693c5f0;
  char s9693c5f1[16];
};
//SIG(-1 S9693C5_nt) C1{ FC2{ Fc[20]} Fc[16]}



//skip512 S9693C5_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S9693C1  : S9693C2 {
  void *s9693c1f0;
  ::S9693C5_nt s9693c1f1;
  ::S9693C5_nt s9693c1f2;
  int s9693c1f3[2];
  ::S8714C6_nt s9693c1f4;
  virtual  ~S9693C1(); // _ZN7S9693C1D1Ev
  virtual void  v1(); // _ZN7S9693C12v1Ev
  virtual void  v2(); // _ZN7S9693C12v2Ev
  virtual void  v3(); // _ZN7S9693C12v3Ev
  S9693C1(); // tgen
};
//SIG(1 S9693C1) C1{ BC2{ vd v4 v5 v6 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} vd v1 v2 v3 Fp FC5{ FC6{ Fc[20]} Fc[16]} FC5 Fi[2] FC7{ m FL[4]}}


 S9693C1 ::~S9693C1(){ note_dtor("S9693C1", this);}
void  S9693C1 ::v1(){vfunc_called(this, "_ZN7S9693C12v1Ev");}
void  S9693C1 ::v2(){vfunc_called(this, "_ZN7S9693C12v2Ev");}
void  S9693C1 ::v3(){vfunc_called(this, "_ZN7S9693C12v3Ev");}
S9693C1 ::S9693C1(){ note_ctor("S9693C1", this);} // tgen

static void Test_S9693C1()
{
  extern Class_Descriptor cd_S9693C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(21,37)];
    init_test(&cd_S9693C1, buf);
    S9693C1 *dp, &lv = *(dp=new (buf) S9693C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(160,144), "sizeof(S9693C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9693C1)");
    check_base_class_offset(lv, (S9693C2*), 0, "S9693C1");
    check_field_offset(lv, s9693c1f0, ABISELECT(40,28), "S9693C1.s9693c1f0");
    check_field_offset(lv, s9693c1f1, ABISELECT(48,32), "S9693C1.s9693c1f1");
    check_field_offset(lv, s9693c1f2, ABISELECT(84,68), "S9693C1.s9693c1f2");
    check_field_offset(lv, s9693c1f3, ABISELECT(120,104), "S9693C1.s9693c1f3");
    check_field_offset(lv, s9693c1f4, ABISELECT(128,112), "S9693C1.s9693c1f4");
    test_class_info(&lv, &cd_S9693C1);
    dp->~S9693C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9693C1(Test_S9693C1, "S9693C1", ABISELECT(160,144));

#else // __cplusplus

extern void _ZN7S9693C1C1Ev();
extern void _ZN7S9693C1D1Ev();
Name_Map name_map_S9693C1[] = {
  NSPAIR(_ZN7S9693C1C1Ev),
  NSPAIR(_ZN7S9693C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S9693C2;
extern VTBL_ENTRY _ZTI7S9693C2[];
extern  VTBL_ENTRY _ZTV7S9693C2[];
static Base_Class bases_S9693C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S9693C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S9693C1[];
extern void _ZN7S9693C1D1Ev();
extern void _ZN7S9693C1D0Ev();
extern void _ZN7S9693C22v4Ev();
extern void _ZN7S9693C22v5Ev();
extern void _ZN7S9693C22v6Ev();
extern void _ZN7S9693C12v1Ev();
extern void _ZN7S9693C12v2Ev();
extern void _ZN7S9693C12v3Ev();
static  VTBL_ENTRY vtc_S9693C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9693C1[0]),
  (VTBL_ENTRY)&_ZN7S9693C1D1Ev,
  (VTBL_ENTRY)&_ZN7S9693C1D0Ev,
  (VTBL_ENTRY)&_ZN7S9693C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9693C22v5Ev,
  (VTBL_ENTRY)&_ZN7S9693C22v6Ev,
  (VTBL_ENTRY)&_ZN7S9693C12v1Ev,
  (VTBL_ENTRY)&_ZN7S9693C12v2Ev,
  (VTBL_ENTRY)&_ZN7S9693C12v3Ev,
};
extern VTBL_ENTRY _ZTI7S9693C1[];
extern  VTBL_ENTRY _ZTV7S9693C1[];
Class_Descriptor cd_S9693C1 = {  "S9693C1", // class name
  bases_S9693C1, 1,
  &(vtc_S9693C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(160,144), // object size
  NSPAIRA(_ZTI7S9693C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S9693C1),10, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S9674C2  {
  ::S836C21_nt s9674c2f0;
  int s9674c2f1[2];
  char s9674c2f2;
  virtual  ~S9674C2(); // _ZN7S9674C2D1Ev
  virtual void  v4(); // _ZN7S9674C22v4Ev
  virtual void  v5(); // _ZN7S9674C22v5Ev
  virtual void  v6(); // _ZN7S9674C22v6Ev
  S9674C2(); // tgen
};
//SIG(-1 S9674C2) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S9674C2 ::~S9674C2(){ note_dtor("S9674C2", this);}
void  S9674C2 ::v4(){vfunc_called(this, "_ZN7S9674C22v4Ev");}
void  S9674C2 ::v5(){vfunc_called(this, "_ZN7S9674C22v5Ev");}
void  S9674C2 ::v6(){vfunc_called(this, "_ZN7S9674C22v6Ev");}
S9674C2 ::S9674C2(){ note_ctor("S9674C2", this);} // tgen

static void Test_S9674C2()
{
  extern Class_Descriptor cd_S9674C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S9674C2, buf);
    S9674C2 *dp, &lv = *(dp=new (buf) S9674C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S9674C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9674C2)");
    check_field_offset(lv, s9674c2f0, ABISELECT(8,4), "S9674C2.s9674c2f0");
    check_field_offset(lv, s9674c2f1, ABISELECT(24,16), "S9674C2.s9674c2f1");
    check_field_offset(lv, s9674c2f2, ABISELECT(32,24), "S9674C2.s9674c2f2");
    test_class_info(&lv, &cd_S9674C2);
    dp->~S9674C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9674C2(Test_S9674C2, "S9674C2", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S9674C2C1Ev();
extern void _ZN7S9674C2D1Ev();
Name_Map name_map_S9674C2[] = {
  NSPAIR(_ZN7S9674C2C1Ev),
  NSPAIR(_ZN7S9674C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S9674C2[];
extern void _ZN7S9674C2D1Ev();
extern void _ZN7S9674C2D0Ev();
extern void _ZN7S9674C22v4Ev();
extern void _ZN7S9674C22v5Ev();
extern void _ZN7S9674C22v6Ev();
static  VTBL_ENTRY vtc_S9674C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9674C2[0]),
  (VTBL_ENTRY)&_ZN7S9674C2D1Ev,
  (VTBL_ENTRY)&_ZN7S9674C2D0Ev,
  (VTBL_ENTRY)&_ZN7S9674C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9674C22v5Ev,
  (VTBL_ENTRY)&_ZN7S9674C22v6Ev,
};
extern VTBL_ENTRY _ZTI7S9674C2[];
extern  VTBL_ENTRY _ZTV7S9674C2[];
Class_Descriptor cd_S9674C2 = {  "S9674C2", // class name
  0,0,//no base classes
  &(vtc_S9674C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S9674C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S9674C2),7, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S9674C1  : S9674C2 {
  int s9674c1f0;
  void *s9674c1f1[3];
  char s9674c1f2[14];
  ::S2214C37_nt s9674c1f3;
  __tsi64 s9674c1f4[2];
  int s9674c1f5;
  virtual  ~S9674C1(); // _ZN7S9674C1D1Ev
  virtual void  v1(); // _ZN7S9674C12v1Ev
  virtual void  v2(); // _ZN7S9674C12v2Ev
  virtual void  v3(); // _ZN7S9674C12v3Ev
  S9674C1(); // tgen
};
//SIG(1 S9674C1) C1{ BC2{ vd v4 v5 v6 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} vd v1 v2 v3 Fi Fp[3] Fc[14] FC5{ m Fp Fi[2] FC6{ m}} FL[2] Fi}


 S9674C1 ::~S9674C1(){ note_dtor("S9674C1", this);}
void  S9674C1 ::v1(){vfunc_called(this, "_ZN7S9674C12v1Ev");}
void  S9674C1 ::v2(){vfunc_called(this, "_ZN7S9674C12v2Ev");}
void  S9674C1 ::v3(){vfunc_called(this, "_ZN7S9674C12v3Ev");}
S9674C1 ::S9674C1(){ note_ctor("S9674C1", this);} // tgen

static void Test_S9674C1()
{
  extern Class_Descriptor cd_S9674C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(17,25)];
    init_test(&cd_S9674C1, buf);
    S9674C1 *dp, &lv = *(dp=new (buf) S9674C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(128,96), "sizeof(S9674C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9674C1)");
    check_base_class_offset(lv, (S9674C2*), 0, "S9674C1");
    check_field_offset(lv, s9674c1f0, ABISELECT(36,28), "S9674C1.s9674c1f0");
    check_field_offset(lv, s9674c1f1, ABISELECT(40,32), "S9674C1.s9674c1f1");
    check_field_offset(lv, s9674c1f2, ABISELECT(64,44), "S9674C1.s9674c1f2");
    check_field_offset(lv, s9674c1f3, ABISELECT(80,60), "S9674C1.s9674c1f3");
    check_field_offset(lv, s9674c1f4, ABISELECT(104,76), "S9674C1.s9674c1f4");
    check_field_offset(lv, s9674c1f5, ABISELECT(120,92), "S9674C1.s9674c1f5");
    test_class_info(&lv, &cd_S9674C1);
    dp->~S9674C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9674C1(Test_S9674C1, "S9674C1", ABISELECT(128,96));

#else // __cplusplus

extern void _ZN7S9674C1C1Ev();
extern void _ZN7S9674C1D1Ev();
Name_Map name_map_S9674C1[] = {
  NSPAIR(_ZN7S9674C1C1Ev),
  NSPAIR(_ZN7S9674C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S9674C2;
extern VTBL_ENTRY _ZTI7S9674C2[];
extern  VTBL_ENTRY _ZTV7S9674C2[];
static Base_Class bases_S9674C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S9674C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S9674C1[];
extern void _ZN7S9674C1D1Ev();
extern void _ZN7S9674C1D0Ev();
extern void _ZN7S9674C22v4Ev();
extern void _ZN7S9674C22v5Ev();
extern void _ZN7S9674C22v6Ev();
extern void _ZN7S9674C12v1Ev();
extern void _ZN7S9674C12v2Ev();
extern void _ZN7S9674C12v3Ev();
static  VTBL_ENTRY vtc_S9674C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9674C1[0]),
  (VTBL_ENTRY)&_ZN7S9674C1D1Ev,
  (VTBL_ENTRY)&_ZN7S9674C1D0Ev,
  (VTBL_ENTRY)&_ZN7S9674C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9674C22v5Ev,
  (VTBL_ENTRY)&_ZN7S9674C22v6Ev,
  (VTBL_ENTRY)&_ZN7S9674C12v1Ev,
  (VTBL_ENTRY)&_ZN7S9674C12v2Ev,
  (VTBL_ENTRY)&_ZN7S9674C12v3Ev,
};
extern VTBL_ENTRY _ZTI7S9674C1[];
extern  VTBL_ENTRY _ZTV7S9674C1[];
Class_Descriptor cd_S9674C1 = {  "S9674C1", // class name
  bases_S9674C1, 1,
  &(vtc_S9674C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(128,96), // object size
  NSPAIRA(_ZTI7S9674C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S9674C1),10, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S9062C2  {
  virtual  ~S9062C2(); // _ZN7S9062C2D1Ev
  virtual void  v2(); // _ZN7S9062C22v2Ev
  S9062C2(); // tgen
};
//SIG(-1 S9062C2) C1{ vd v1}


 S9062C2 ::~S9062C2(){ note_dtor("S9062C2", this);}
void  S9062C2 ::v2(){vfunc_called(this, "_ZN7S9062C22v2Ev");}
S9062C2 ::S9062C2(){ note_ctor("S9062C2", this);} // tgen

static void Test_S9062C2()
{
  extern Class_Descriptor cd_S9062C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S9062C2, buf);
    S9062C2 *dp, &lv = *(dp=new (buf) S9062C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S9062C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9062C2)");
    test_class_info(&lv, &cd_S9062C2);
    dp->~S9062C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9062C2(Test_S9062C2, "S9062C2", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S9062C2C1Ev();
extern void _ZN7S9062C2D1Ev();
Name_Map name_map_S9062C2[] = {
  NSPAIR(_ZN7S9062C2C1Ev),
  NSPAIR(_ZN7S9062C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S9062C2[];
extern void _ZN7S9062C2D1Ev();
extern void _ZN7S9062C2D0Ev();
extern void _ZN7S9062C22v2Ev();
static  VTBL_ENTRY vtc_S9062C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9062C2[0]),
  (VTBL_ENTRY)&_ZN7S9062C2D1Ev,
  (VTBL_ENTRY)&_ZN7S9062C2D0Ev,
  (VTBL_ENTRY)&_ZN7S9062C22v2Ev,
};
extern VTBL_ENTRY _ZTI7S9062C2[];
extern  VTBL_ENTRY _ZTV7S9062C2[];
Class_Descriptor cd_S9062C2 = {  "S9062C2", // class name
  0,0,//no base classes
  &(vtc_S9062C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S9062C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S9062C2),5, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S9062C1  : S9062C2 {
  ::S2214C37_nt s9062c1f0;
  ::S836C38 s9062c1f1;
  void *s9062c1f2[2];
  ::S4162C7_nt s9062c1f3;
  void *s9062c1f4;
  char s9062c1f5[4];
  void *s9062c1f6[2];
  int s9062c1f7[2];
  char s9062c1f8;
  virtual  ~S9062C1(); // _ZN7S9062C1D1Ev
  virtual void  v1(); // _ZN7S9062C12v1Ev
  S9062C1(); // tgen
};
//SIG(1 S9062C1) C1{ BC2{ vd v2} vd v1 FC3{ m Fp Fi[2] FC4{ m}} FC5{ m Fp Fi[2] FC4} Fp[2] FC6{ m Fp[2]} Fp Fc[4] Fp[2] Fi[2] Fc}


 S9062C1 ::~S9062C1(){ note_dtor("S9062C1", this);}
void  S9062C1 ::v1(){vfunc_called(this, "_ZN7S9062C12v1Ev");}
S9062C1 ::S9062C1(){ note_ctor("S9062C1", this);} // tgen

static void Test_S9062C1()
{
  extern Class_Descriptor cd_S9062C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(18,21)];
    init_test(&cd_S9062C1, buf);
    S9062C1 *dp, &lv = *(dp=new (buf) S9062C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(136,80), "sizeof(S9062C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9062C1)");
    check_base_class_offset(lv, (S9062C2*), 0, "S9062C1");
    check_field_offset(lv, s9062c1f0, ABISELECT(8,4), "S9062C1.s9062c1f0");
    check_field_offset(lv, s9062c1f1, ABISELECT(32,20), "S9062C1.s9062c1f1");
    check_field_offset(lv, s9062c1f2, ABISELECT(56,36), "S9062C1.s9062c1f2");
    check_field_offset(lv, s9062c1f3, ABISELECT(72,44), "S9062C1.s9062c1f3");
    check_field_offset(lv, s9062c1f4, ABISELECT(88,52), "S9062C1.s9062c1f4");
    check_field_offset(lv, s9062c1f5, ABISELECT(96,56), "S9062C1.s9062c1f5");
    check_field_offset(lv, s9062c1f6, ABISELECT(104,60), "S9062C1.s9062c1f6");
    check_field_offset(lv, s9062c1f7, ABISELECT(120,68), "S9062C1.s9062c1f7");
    check_field_offset(lv, s9062c1f8, ABISELECT(128,76), "S9062C1.s9062c1f8");
    test_class_info(&lv, &cd_S9062C1);
    dp->~S9062C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9062C1(Test_S9062C1, "S9062C1", ABISELECT(136,80));

#else // __cplusplus

extern void _ZN7S9062C1C1Ev();
extern void _ZN7S9062C1D1Ev();
Name_Map name_map_S9062C1[] = {
  NSPAIR(_ZN7S9062C1C1Ev),
  NSPAIR(_ZN7S9062C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S9062C2;
extern VTBL_ENTRY _ZTI7S9062C2[];
extern  VTBL_ENTRY _ZTV7S9062C2[];
static Base_Class bases_S9062C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S9062C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S9062C1[];
extern void _ZN7S9062C1D1Ev();
extern void _ZN7S9062C1D0Ev();
extern void _ZN7S9062C22v2Ev();
extern void _ZN7S9062C12v1Ev();
static  VTBL_ENTRY vtc_S9062C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9062C1[0]),
  (VTBL_ENTRY)&_ZN7S9062C1D1Ev,
  (VTBL_ENTRY)&_ZN7S9062C1D0Ev,
  (VTBL_ENTRY)&_ZN7S9062C22v2Ev,
  (VTBL_ENTRY)&_ZN7S9062C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S9062C1[];
extern  VTBL_ENTRY _ZTV7S9062C1[];
Class_Descriptor cd_S9062C1 = {  "S9062C1", // class name
  bases_S9062C1, 1,
  &(vtc_S9062C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(136,80), // object size
  NSPAIRA(_ZTI7S9062C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S9062C1),6, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3409C4_nt  {
  long s3409c4f0;
};
//SIG(-1 S3409C4_nt) C1{ Fl}



//skip512 S3409C4_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3409C3  {
  void *s3409c3f0[3];
  int s3409c3f1;
  ::S3409C4_nt s3409c3f2;
  virtual  ~S3409C3(); // _ZN7S3409C3D1Ev
  virtual void  v7(); // _ZN7S3409C32v7Ev
  virtual void  v8(); // _ZN7S3409C32v8Ev
  virtual void  v9(); // _ZN7S3409C32v9Ev
  virtual void  v10(); // _ZN7S3409C33v10Ev
  virtual void  v11(); // _ZN7S3409C33v11Ev
  virtual void  v12(); // _ZN7S3409C33v12Ev
  virtual void  v13(); // _ZN7S3409C33v13Ev
  virtual void  v14(); // _ZN7S3409C33v14Ev
  S3409C3(); // tgen
};
//SIG(-1 S3409C3) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 Fp[3] Fi FC2{ Fl}}


 S3409C3 ::~S3409C3(){ note_dtor("S3409C3", this);}
void  S3409C3 ::v7(){vfunc_called(this, "_ZN7S3409C32v7Ev");}
void  S3409C3 ::v8(){vfunc_called(this, "_ZN7S3409C32v8Ev");}
void  S3409C3 ::v9(){vfunc_called(this, "_ZN7S3409C32v9Ev");}
void  S3409C3 ::v10(){vfunc_called(this, "_ZN7S3409C33v10Ev");}
void  S3409C3 ::v11(){vfunc_called(this, "_ZN7S3409C33v11Ev");}
void  S3409C3 ::v12(){vfunc_called(this, "_ZN7S3409C33v12Ev");}
void  S3409C3 ::v13(){vfunc_called(this, "_ZN7S3409C33v13Ev");}
void  S3409C3 ::v14(){vfunc_called(this, "_ZN7S3409C33v14Ev");}
S3409C3 ::S3409C3(){ note_ctor("S3409C3", this);} // tgen

static void Test_S3409C3()
{
  extern Class_Descriptor cd_S3409C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[7];
    init_test(&cd_S3409C3, buf);
    S3409C3 *dp, &lv = *(dp=new (buf) S3409C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,24), "sizeof(S3409C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3409C3)");
    check_field_offset(lv, s3409c3f0, ABISELECT(8,4), "S3409C3.s3409c3f0");
    check_field_offset(lv, s3409c3f1, ABISELECT(32,16), "S3409C3.s3409c3f1");
    check_field_offset(lv, s3409c3f2, ABISELECT(40,20), "S3409C3.s3409c3f2");
    test_class_info(&lv, &cd_S3409C3);
    dp->~S3409C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3409C3(Test_S3409C3, "S3409C3", ABISELECT(48,24));

#else // __cplusplus

extern void _ZN7S3409C3C1Ev();
extern void _ZN7S3409C3D1Ev();
Name_Map name_map_S3409C3[] = {
  NSPAIR(_ZN7S3409C3C1Ev),
  NSPAIR(_ZN7S3409C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S3409C3[];
extern void _ZN7S3409C3D1Ev();
extern void _ZN7S3409C3D0Ev();
extern void _ZN7S3409C32v7Ev();
extern void _ZN7S3409C32v8Ev();
extern void _ZN7S3409C32v9Ev();
extern void _ZN7S3409C33v10Ev();
extern void _ZN7S3409C33v11Ev();
extern void _ZN7S3409C33v12Ev();
extern void _ZN7S3409C33v13Ev();
extern void _ZN7S3409C33v14Ev();
static  VTBL_ENTRY vtc_S3409C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3409C3[0]),
  (VTBL_ENTRY)&_ZN7S3409C3D1Ev,
  (VTBL_ENTRY)&_ZN7S3409C3D0Ev,
  (VTBL_ENTRY)&_ZN7S3409C32v7Ev,
  (VTBL_ENTRY)&_ZN7S3409C32v8Ev,
  (VTBL_ENTRY)&_ZN7S3409C32v9Ev,
  (VTBL_ENTRY)&_ZN7S3409C33v10Ev,
  (VTBL_ENTRY)&_ZN7S3409C33v11Ev,
  (VTBL_ENTRY)&_ZN7S3409C33v12Ev,
  (VTBL_ENTRY)&_ZN7S3409C33v13Ev,
  (VTBL_ENTRY)&_ZN7S3409C33v14Ev,
};
extern VTBL_ENTRY _ZTI7S3409C3[];
extern  VTBL_ENTRY _ZTV7S3409C3[];
Class_Descriptor cd_S3409C3 = {  "S3409C3", // class name
  0,0,//no base classes
  &(vtc_S3409C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,24), // object size
  NSPAIRA(_ZTI7S3409C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S3409C3),12, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3409C2  : S3409C3 {
  virtual  ~S3409C2(); // _ZN7S3409C2D1Ev
  virtual void  v15(); // _ZN7S3409C23v15Ev
  virtual void  v16(); // _ZN7S3409C23v16Ev
  virtual void  v17(); // _ZN7S3409C23v17Ev
  virtual void  v18(); // _ZN7S3409C23v18Ev
  S3409C2(); // tgen
};
//SIG(-1 S3409C2) C1{ BC2{ vd v5 v6 v7 v8 v9 v10 v11 v12 Fp[3] Fi FC3{ Fl}} vd v1 v2 v3 v4}


 S3409C2 ::~S3409C2(){ note_dtor("S3409C2", this);}
void  S3409C2 ::v15(){vfunc_called(this, "_ZN7S3409C23v15Ev");}
void  S3409C2 ::v16(){vfunc_called(this, "_ZN7S3409C23v16Ev");}
void  S3409C2 ::v17(){vfunc_called(this, "_ZN7S3409C23v17Ev");}
void  S3409C2 ::v18(){vfunc_called(this, "_ZN7S3409C23v18Ev");}
S3409C2 ::S3409C2(){ note_ctor("S3409C2", this);} // tgen

static void Test_S3409C2()
{
  extern Class_Descriptor cd_S3409C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[7];
    init_test(&cd_S3409C2, buf);
    S3409C2 *dp, &lv = *(dp=new (buf) S3409C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,24), "sizeof(S3409C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3409C2)");
    check_base_class_offset(lv, (S3409C3*), 0, "S3409C2");
    test_class_info(&lv, &cd_S3409C2);
    dp->~S3409C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3409C2(Test_S3409C2, "S3409C2", ABISELECT(48,24));

#else // __cplusplus

extern void _ZN7S3409C2C1Ev();
extern void _ZN7S3409C2D1Ev();
Name_Map name_map_S3409C2[] = {
  NSPAIR(_ZN7S3409C2C1Ev),
  NSPAIR(_ZN7S3409C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3409C3;
extern VTBL_ENTRY _ZTI7S3409C3[];
extern  VTBL_ENTRY _ZTV7S3409C3[];
static Base_Class bases_S3409C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3409C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3409C2[];
extern void _ZN7S3409C2D1Ev();
extern void _ZN7S3409C2D0Ev();
extern void _ZN7S3409C32v7Ev();
extern void _ZN7S3409C32v8Ev();
extern void _ZN7S3409C32v9Ev();
extern void _ZN7S3409C33v10Ev();
extern void _ZN7S3409C33v11Ev();
extern void _ZN7S3409C33v12Ev();
extern void _ZN7S3409C33v13Ev();
extern void _ZN7S3409C33v14Ev();
extern void _ZN7S3409C23v15Ev();
extern void _ZN7S3409C23v16Ev();
extern void _ZN7S3409C23v17Ev();
extern void _ZN7S3409C23v18Ev();
static  VTBL_ENTRY vtc_S3409C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3409C2[0]),
  (VTBL_ENTRY)&_ZN7S3409C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3409C2D0Ev,
  (VTBL_ENTRY)&_ZN7S3409C32v7Ev,
  (VTBL_ENTRY)&_ZN7S3409C32v8Ev,
  (VTBL_ENTRY)&_ZN7S3409C32v9Ev,
  (VTBL_ENTRY)&_ZN7S3409C33v10Ev,
  (VTBL_ENTRY)&_ZN7S3409C33v11Ev,
  (VTBL_ENTRY)&_ZN7S3409C33v12Ev,
  (VTBL_ENTRY)&_ZN7S3409C33v13Ev,
  (VTBL_ENTRY)&_ZN7S3409C33v14Ev,
  (VTBL_ENTRY)&_ZN7S3409C23v15Ev,
  (VTBL_ENTRY)&_ZN7S3409C23v16Ev,
  (VTBL_ENTRY)&_ZN7S3409C23v17Ev,
  (VTBL_ENTRY)&_ZN7S3409C23v18Ev,
};
extern VTBL_ENTRY _ZTI7S3409C2[];
extern  VTBL_ENTRY _ZTV7S3409C2[];
Class_Descriptor cd_S3409C2 = {  "S3409C2", // class name
  bases_S3409C2, 1,
  &(vtc_S3409C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,24), // object size
  NSPAIRA(_ZTI7S3409C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3409C2),16, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3409C1  : S3409C2 {
  int s3409c1f0;
  virtual  ~S3409C1(); // _ZN7S3409C1D1Ev
  virtual void  v1(); // _ZN7S3409C12v1Ev
  virtual void  v2(); // _ZN7S3409C12v2Ev
  virtual void  v3(); // _ZN7S3409C12v3Ev
  virtual void  v4(); // _ZN7S3409C12v4Ev
  virtual void  v5(); // _ZN7S3409C12v5Ev
  virtual void  v6(); // _ZN7S3409C12v6Ev
  S3409C1(); // tgen
};
//SIG(1 S3409C1) C1{ BC2{ BC3{ vd v7 v8 v9 v10 v11 v12 v13 v14 Fp[3] Fi FC4{ Fl}} vd v15 v16 v17 v18} vd v1 v2 v3 v4 v5 v6 Fi}


 S3409C1 ::~S3409C1(){ note_dtor("S3409C1", this);}
void  S3409C1 ::v1(){vfunc_called(this, "_ZN7S3409C12v1Ev");}
void  S3409C1 ::v2(){vfunc_called(this, "_ZN7S3409C12v2Ev");}
void  S3409C1 ::v3(){vfunc_called(this, "_ZN7S3409C12v3Ev");}
void  S3409C1 ::v4(){vfunc_called(this, "_ZN7S3409C12v4Ev");}
void  S3409C1 ::v5(){vfunc_called(this, "_ZN7S3409C12v5Ev");}
void  S3409C1 ::v6(){vfunc_called(this, "_ZN7S3409C12v6Ev");}
S3409C1 ::S3409C1(){ note_ctor("S3409C1", this);} // tgen

static void Test_S3409C1()
{
  extern Class_Descriptor cd_S3409C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[8];
    init_test(&cd_S3409C1, buf);
    S3409C1 *dp, &lv = *(dp=new (buf) S3409C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,28), "sizeof(S3409C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3409C1)");
    check_base_class_offset(lv, (S3409C3*)(S3409C2*), 0, "S3409C1");
    check_base_class_offset(lv, (S3409C2*), 0, "S3409C1");
    check_field_offset(lv, s3409c1f0, ABISELECT(48,24), "S3409C1.s3409c1f0");
    test_class_info(&lv, &cd_S3409C1);
    dp->~S3409C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3409C1(Test_S3409C1, "S3409C1", ABISELECT(56,28));

#else // __cplusplus

extern void _ZN7S3409C1C1Ev();
extern void _ZN7S3409C1D1Ev();
Name_Map name_map_S3409C1[] = {
  NSPAIR(_ZN7S3409C1C1Ev),
  NSPAIR(_ZN7S3409C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3409C3;
extern VTBL_ENTRY _ZTI7S3409C3[];
extern  VTBL_ENTRY _ZTV7S3409C3[];
extern Class_Descriptor cd_S3409C2;
extern VTBL_ENTRY _ZTI7S3409C2[];
extern  VTBL_ENTRY _ZTV7S3409C2[];
static Base_Class bases_S3409C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3409C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S3409C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3409C1[];
extern void _ZN7S3409C1D1Ev();
extern void _ZN7S3409C1D0Ev();
extern void _ZN7S3409C32v7Ev();
extern void _ZN7S3409C32v8Ev();
extern void _ZN7S3409C32v9Ev();
extern void _ZN7S3409C33v10Ev();
extern void _ZN7S3409C33v11Ev();
extern void _ZN7S3409C33v12Ev();
extern void _ZN7S3409C33v13Ev();
extern void _ZN7S3409C33v14Ev();
extern void _ZN7S3409C23v15Ev();
extern void _ZN7S3409C23v16Ev();
extern void _ZN7S3409C23v17Ev();
extern void _ZN7S3409C23v18Ev();
extern void _ZN7S3409C12v1Ev();
extern void _ZN7S3409C12v2Ev();
extern void _ZN7S3409C12v3Ev();
extern void _ZN7S3409C12v4Ev();
extern void _ZN7S3409C12v5Ev();
extern void _ZN7S3409C12v6Ev();
static  VTBL_ENTRY vtc_S3409C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3409C1[0]),
  (VTBL_ENTRY)&_ZN7S3409C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3409C1D0Ev,
  (VTBL_ENTRY)&_ZN7S3409C32v7Ev,
  (VTBL_ENTRY)&_ZN7S3409C32v8Ev,
  (VTBL_ENTRY)&_ZN7S3409C32v9Ev,
  (VTBL_ENTRY)&_ZN7S3409C33v10Ev,
  (VTBL_ENTRY)&_ZN7S3409C33v11Ev,
  (VTBL_ENTRY)&_ZN7S3409C33v12Ev,
  (VTBL_ENTRY)&_ZN7S3409C33v13Ev,
  (VTBL_ENTRY)&_ZN7S3409C33v14Ev,
  (VTBL_ENTRY)&_ZN7S3409C23v15Ev,
  (VTBL_ENTRY)&_ZN7S3409C23v16Ev,
  (VTBL_ENTRY)&_ZN7S3409C23v17Ev,
  (VTBL_ENTRY)&_ZN7S3409C23v18Ev,
  (VTBL_ENTRY)&_ZN7S3409C12v1Ev,
  (VTBL_ENTRY)&_ZN7S3409C12v2Ev,
  (VTBL_ENTRY)&_ZN7S3409C12v3Ev,
  (VTBL_ENTRY)&_ZN7S3409C12v4Ev,
  (VTBL_ENTRY)&_ZN7S3409C12v5Ev,
  (VTBL_ENTRY)&_ZN7S3409C12v6Ev,
};
extern VTBL_ENTRY _ZTI7S3409C1[];
extern  VTBL_ENTRY _ZTV7S3409C1[];
Class_Descriptor cd_S3409C1 = {  "S3409C1", // class name
  bases_S3409C1, 2,
  &(vtc_S3409C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(56,28), // object size
  NSPAIRA(_ZTI7S3409C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3409C1),22, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S9191C2  {
  void *s9191c2f0[2];
  ::S4162C7_nt s9191c2f1;
  void *s9191c2f2;
  ::S2214C37_nt s9191c2f3;
  virtual  ~S9191C2(); // _ZN7S9191C2D1Ev
  virtual void  v3(); // _ZN7S9191C22v3Ev
  virtual void  v4(); // _ZN7S9191C22v4Ev
  S9191C2(); // tgen
};
//SIG(-1 S9191C2) C1{ vd v1 v2 Fp[2] FC2{ m Fp[2]} Fp FC3{ m Fp Fi[2] FC4{ m}}}


 S9191C2 ::~S9191C2(){ note_dtor("S9191C2", this);}
void  S9191C2 ::v3(){vfunc_called(this, "_ZN7S9191C22v3Ev");}
void  S9191C2 ::v4(){vfunc_called(this, "_ZN7S9191C22v4Ev");}
S9191C2 ::S9191C2(){ note_ctor("S9191C2", this);} // tgen

static void Test_S9191C2()
{
  extern Class_Descriptor cd_S9191C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,11)];
    init_test(&cd_S9191C2, buf);
    S9191C2 *dp, &lv = *(dp=new (buf) S9191C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,40), "sizeof(S9191C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9191C2)");
    check_field_offset(lv, s9191c2f0, ABISELECT(8,4), "S9191C2.s9191c2f0");
    check_field_offset(lv, s9191c2f1, ABISELECT(24,12), "S9191C2.s9191c2f1");
    check_field_offset(lv, s9191c2f2, ABISELECT(40,20), "S9191C2.s9191c2f2");
    check_field_offset(lv, s9191c2f3, ABISELECT(48,24), "S9191C2.s9191c2f3");
    test_class_info(&lv, &cd_S9191C2);
    dp->~S9191C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9191C2(Test_S9191C2, "S9191C2", ABISELECT(72,40));

#else // __cplusplus

extern void _ZN7S9191C2C1Ev();
extern void _ZN7S9191C2D1Ev();
Name_Map name_map_S9191C2[] = {
  NSPAIR(_ZN7S9191C2C1Ev),
  NSPAIR(_ZN7S9191C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S9191C2[];
extern void _ZN7S9191C2D1Ev();
extern void _ZN7S9191C2D0Ev();
extern void _ZN7S9191C22v3Ev();
extern void _ZN7S9191C22v4Ev();
static  VTBL_ENTRY vtc_S9191C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9191C2[0]),
  (VTBL_ENTRY)&_ZN7S9191C2D1Ev,
  (VTBL_ENTRY)&_ZN7S9191C2D0Ev,
  (VTBL_ENTRY)&_ZN7S9191C22v3Ev,
  (VTBL_ENTRY)&_ZN7S9191C22v4Ev,
};
extern VTBL_ENTRY _ZTI7S9191C2[];
extern  VTBL_ENTRY _ZTV7S9191C2[];
Class_Descriptor cd_S9191C2 = {  "S9191C2", // class name
  0,0,//no base classes
  &(vtc_S9191C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,40), // object size
  NSPAIRA(_ZTI7S9191C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S9191C2),6, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S9191C6_nt  {
  void *s9191c6f0[2];
  void  mf9191c6(); // _ZN10S9191C6_nt8mf9191c6Ev
};
//SIG(-1 S9191C6_nt) C1{ m Fp[2]}


void  S9191C6_nt ::mf9191c6(){}

//skip512 S9191C6_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S9191C1  : S9191C2 {
  ::S9191C6_nt s9191c1f0;
  ::S4666C9_nt s9191c1f1;
  ::S4666C9_nt s9191c1f2;
  ::S2214C37_nt s9191c1f3;
  virtual  ~S9191C1(); // _ZN7S9191C1D1Ev
  virtual void  v1(); // _ZN7S9191C12v1Ev
  virtual void  v2(); // _ZN7S9191C12v2Ev
  S9191C1(); // tgen
};
//SIG(1 S9191C1) C1{ BC2{ vd v3 v4 Fp[2] FC3{ m Fp[2]} Fp FC4{ m Fp Fi[2] FC5{ m}}} vd v1 v2 FC6{ m Fp[2]} FC7{ m Fp Fi} FC7 FC4}


 S9191C1 ::~S9191C1(){ note_dtor("S9191C1", this);}
void  S9191C1 ::v1(){vfunc_called(this, "_ZN7S9191C12v1Ev");}
void  S9191C1 ::v2(){vfunc_called(this, "_ZN7S9191C12v2Ev");}
S9191C1 ::S9191C1(){ note_ctor("S9191C1", this);} // tgen

static void Test_S9191C1()
{
  extern Class_Descriptor cd_S9191C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(19,21)];
    init_test(&cd_S9191C1, buf);
    S9191C1 *dp, &lv = *(dp=new (buf) S9191C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(144,80), "sizeof(S9191C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9191C1)");
    check_base_class_offset(lv, (S9191C2*), 0, "S9191C1");
    check_field_offset(lv, s9191c1f0, ABISELECT(72,40), "S9191C1.s9191c1f0");
    check_field_offset(lv, s9191c1f1, ABISELECT(88,48), "S9191C1.s9191c1f1");
    check_field_offset(lv, s9191c1f2, ABISELECT(104,56), "S9191C1.s9191c1f2");
    check_field_offset(lv, s9191c1f3, ABISELECT(120,64), "S9191C1.s9191c1f3");
    test_class_info(&lv, &cd_S9191C1);
    dp->~S9191C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9191C1(Test_S9191C1, "S9191C1", ABISELECT(144,80));

#else // __cplusplus

extern void _ZN7S9191C1C1Ev();
extern void _ZN7S9191C1D1Ev();
Name_Map name_map_S9191C1[] = {
  NSPAIR(_ZN7S9191C1C1Ev),
  NSPAIR(_ZN7S9191C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S9191C2;
extern VTBL_ENTRY _ZTI7S9191C2[];
extern  VTBL_ENTRY _ZTV7S9191C2[];
static Base_Class bases_S9191C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S9191C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S9191C1[];
extern void _ZN7S9191C1D1Ev();
extern void _ZN7S9191C1D0Ev();
extern void _ZN7S9191C22v3Ev();
extern void _ZN7S9191C22v4Ev();
extern void _ZN7S9191C12v1Ev();
extern void _ZN7S9191C12v2Ev();
static  VTBL_ENTRY vtc_S9191C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9191C1[0]),
  (VTBL_ENTRY)&_ZN7S9191C1D1Ev,
  (VTBL_ENTRY)&_ZN7S9191C1D0Ev,
  (VTBL_ENTRY)&_ZN7S9191C22v3Ev,
  (VTBL_ENTRY)&_ZN7S9191C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9191C12v1Ev,
  (VTBL_ENTRY)&_ZN7S9191C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S9191C1[];
extern  VTBL_ENTRY _ZTV7S9191C1[];
Class_Descriptor cd_S9191C1 = {  "S9191C1", // class name
  bases_S9191C1, 1,
  &(vtc_S9191C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(144,80), // object size
  NSPAIRA(_ZTI7S9191C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S9191C1),8, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S9839C2  {
  virtual  ~S9839C2(); // _ZN7S9839C2D1Ev
  virtual void  v4(); // _ZN7S9839C22v4Ev
  virtual void  v5(); // _ZN7S9839C22v5Ev
  S9839C2(); // tgen
};
//SIG(-1 S9839C2) C1{ vd v1 v2}


 S9839C2 ::~S9839C2(){ note_dtor("S9839C2", this);}
void  S9839C2 ::v4(){vfunc_called(this, "_ZN7S9839C22v4Ev");}
void  S9839C2 ::v5(){vfunc_called(this, "_ZN7S9839C22v5Ev");}
S9839C2 ::S9839C2(){ note_ctor("S9839C2", this);} // tgen

static void Test_S9839C2()
{
  extern Class_Descriptor cd_S9839C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S9839C2, buf);
    S9839C2 *dp, &lv = *(dp=new (buf) S9839C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S9839C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9839C2)");
    test_class_info(&lv, &cd_S9839C2);
    dp->~S9839C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9839C2(Test_S9839C2, "S9839C2", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S9839C2C1Ev();
extern void _ZN7S9839C2D1Ev();
Name_Map name_map_S9839C2[] = {
  NSPAIR(_ZN7S9839C2C1Ev),
  NSPAIR(_ZN7S9839C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S9839C2[];
extern void _ZN7S9839C2D1Ev();
extern void _ZN7S9839C2D0Ev();
extern void _ZN7S9839C22v4Ev();
extern void _ZN7S9839C22v5Ev();
static  VTBL_ENTRY vtc_S9839C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9839C2[0]),
  (VTBL_ENTRY)&_ZN7S9839C2D1Ev,
  (VTBL_ENTRY)&_ZN7S9839C2D0Ev,
  (VTBL_ENTRY)&_ZN7S9839C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9839C22v5Ev,
};
extern VTBL_ENTRY _ZTI7S9839C2[];
extern  VTBL_ENTRY _ZTV7S9839C2[];
Class_Descriptor cd_S9839C2 = {  "S9839C2", // class name
  0,0,//no base classes
  &(vtc_S9839C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S9839C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S9839C2),6, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S9839C3  {
  virtual  ~S9839C3(); // _ZN7S9839C3D1Ev
  virtual void  v6(); // _ZN7S9839C32v6Ev
  virtual void  v7(); // _ZN7S9839C32v7Ev
  S9839C3(); // tgen
};
//SIG(-1 S9839C3) C1{ vd v1 v2}


 S9839C3 ::~S9839C3(){ note_dtor("S9839C3", this);}
void  S9839C3 ::v6(){vfunc_called(this, "_ZN7S9839C32v6Ev");}
void  S9839C3 ::v7(){vfunc_called(this, "_ZN7S9839C32v7Ev");}
S9839C3 ::S9839C3(){ note_ctor("S9839C3", this);} // tgen

static void Test_S9839C3()
{
  extern Class_Descriptor cd_S9839C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S9839C3, buf);
    S9839C3 *dp, &lv = *(dp=new (buf) S9839C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S9839C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9839C3)");
    test_class_info(&lv, &cd_S9839C3);
    dp->~S9839C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9839C3(Test_S9839C3, "S9839C3", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S9839C3C1Ev();
extern void _ZN7S9839C3D1Ev();
Name_Map name_map_S9839C3[] = {
  NSPAIR(_ZN7S9839C3C1Ev),
  NSPAIR(_ZN7S9839C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S9839C3[];
extern void _ZN7S9839C3D1Ev();
extern void _ZN7S9839C3D0Ev();
extern void _ZN7S9839C32v6Ev();
extern void _ZN7S9839C32v7Ev();
static  VTBL_ENTRY vtc_S9839C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9839C3[0]),
  (VTBL_ENTRY)&_ZN7S9839C3D1Ev,
  (VTBL_ENTRY)&_ZN7S9839C3D0Ev,
  (VTBL_ENTRY)&_ZN7S9839C32v6Ev,
  (VTBL_ENTRY)&_ZN7S9839C32v7Ev,
};
extern VTBL_ENTRY _ZTI7S9839C3[];
extern  VTBL_ENTRY _ZTV7S9839C3[];
Class_Descriptor cd_S9839C3 = {  "S9839C3", // class name
  0,0,//no base classes
  &(vtc_S9839C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S9839C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S9839C3),6, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S9839C4  {
  void *s9839c4f0;
  int s9839c4f1[2];
  char s9839c4f2;
  void  mf9839c4(); // _ZN7S9839C48mf9839c4Ev
};
//SIG(-1 S9839C4) C1{ m Fp Fi[2] Fc}


void  S9839C4 ::mf9839c4(){}

static void Test_S9839C4()
{
  {
    init_simple_test("S9839C4");
    S9839C4 lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S9839C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9839C4)");
    check_field_offset(lv, s9839c4f0, 0, "S9839C4.s9839c4f0");
    check_field_offset(lv, s9839c4f1, ABISELECT(8,4), "S9839C4.s9839c4f1");
    check_field_offset(lv, s9839c4f2, ABISELECT(16,12), "S9839C4.s9839c4f2");
  }
}
static Arrange_To_Call_Me vS9839C4(Test_S9839C4, "S9839C4", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S9839C1  : S9839C2 , S9839C3 {
  void *s9839c1f0;
  int s9839c1f1;
  void *s9839c1f2;
  ::S9839C4 s9839c1f3;
  int s9839c1f4;
  __tsi64 s9839c1f5;
  int s9839c1f6;
  ::S2226C10 s9839c1f7;
  virtual  ~S9839C1(); // _ZN7S9839C1D1Ev
  virtual void  v1(); // _ZN7S9839C12v1Ev
  virtual void  v2(); // _ZN7S9839C12v2Ev
  virtual void  v3(); // _ZN7S9839C12v3Ev
  S9839C1(); // tgen
};
//SIG(1 S9839C1) C1{ BC2{ vd v4 v5} BC3{ vd v6 v7} vd v1 v2 v3 Fp Fi Fp FC4{ m Fp Fi[2] Fc} Fi FL Fi FC5{ m FL[2] Fi[2]}}


 S9839C1 ::~S9839C1(){ note_dtor("S9839C1", this);}
void  S9839C1 ::v1(){vfunc_called(this, "_ZN7S9839C12v1Ev");}
void  S9839C1 ::v2(){vfunc_called(this, "_ZN7S9839C12v2Ev");}
void  S9839C1 ::v3(){vfunc_called(this, "_ZN7S9839C12v3Ev");}
S9839C1 ::S9839C1(){ note_ctor("S9839C1", this);} // tgen

static void Test_S9839C1()
{
  extern Class_Descriptor cd_S9839C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(15,20)];
    init_test(&cd_S9839C1, buf);
    S9839C1 *dp, &lv = *(dp=new (buf) S9839C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(112,76), "sizeof(S9839C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9839C1)");
    check_base_class_offset(lv, (S9839C2*), 0, "S9839C1");
    check_base_class_offset(lv, (S9839C3*), ABISELECT(8,4), "S9839C1");
    check_field_offset(lv, s9839c1f0, ABISELECT(16,8), "S9839C1.s9839c1f0");
    check_field_offset(lv, s9839c1f1, ABISELECT(24,12), "S9839C1.s9839c1f1");
    check_field_offset(lv, s9839c1f2, ABISELECT(32,16), "S9839C1.s9839c1f2");
    check_field_offset(lv, s9839c1f3, ABISELECT(40,20), "S9839C1.s9839c1f3");
    check_field_offset(lv, s9839c1f4, ABISELECT(64,36), "S9839C1.s9839c1f4");
    check_field_offset(lv, s9839c1f5, ABISELECT(72,40), "S9839C1.s9839c1f5");
    check_field_offset(lv, s9839c1f6, ABISELECT(80,48), "S9839C1.s9839c1f6");
    check_field_offset(lv, s9839c1f7, ABISELECT(88,52), "S9839C1.s9839c1f7");
    test_class_info(&lv, &cd_S9839C1);
    dp->~S9839C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9839C1(Test_S9839C1, "S9839C1", ABISELECT(112,76));

#else // __cplusplus

extern void _ZN7S9839C1C1Ev();
extern void _ZN7S9839C1D1Ev();
Name_Map name_map_S9839C1[] = {
  NSPAIR(_ZN7S9839C1C1Ev),
  NSPAIR(_ZN7S9839C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S9839C2;
extern VTBL_ENTRY _ZTI7S9839C2[];
extern  VTBL_ENTRY _ZTV7S9839C2[];
extern Class_Descriptor cd_S9839C3;
extern VTBL_ENTRY _ZTI7S9839C3[];
extern  VTBL_ENTRY _ZTV7S9839C3[];
static Base_Class bases_S9839C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S9839C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S9839C3,    ABISELECT(8,4), //bcp->offset
    9, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S9839C1[];
extern void _ZN7S9839C1D1Ev();
extern void _ZN7S9839C1D0Ev();
extern void _ZN7S9839C22v4Ev();
extern void _ZN7S9839C22v5Ev();
extern void _ZN7S9839C12v1Ev();
extern void _ZN7S9839C12v2Ev();
extern void _ZN7S9839C12v3Ev();
extern void ABISELECT(_ZThn8_N7S9839C1D1Ev,_ZThn4_N7S9839C1D1Ev)();
extern void ABISELECT(_ZThn8_N7S9839C1D0Ev,_ZThn4_N7S9839C1D0Ev)();
extern void _ZN7S9839C32v6Ev();
extern void _ZN7S9839C32v7Ev();
static  VTBL_ENTRY vtc_S9839C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9839C1[0]),
  (VTBL_ENTRY)&_ZN7S9839C1D1Ev,
  (VTBL_ENTRY)&_ZN7S9839C1D0Ev,
  (VTBL_ENTRY)&_ZN7S9839C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9839C22v5Ev,
  (VTBL_ENTRY)&_ZN7S9839C12v1Ev,
  (VTBL_ENTRY)&_ZN7S9839C12v2Ev,
  (VTBL_ENTRY)&_ZN7S9839C12v3Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S9839C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S9839C1D1Ev,_ZThn4_N7S9839C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S9839C1D0Ev,_ZThn4_N7S9839C1D0Ev),
  (VTBL_ENTRY)&_ZN7S9839C32v6Ev,
  (VTBL_ENTRY)&_ZN7S9839C32v7Ev,
};
extern VTBL_ENTRY _ZTI7S9839C1[];
extern  VTBL_ENTRY _ZTV7S9839C1[];
Class_Descriptor cd_S9839C1 = {  "S9839C1", // class name
  bases_S9839C1, 2,
  &(vtc_S9839C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(112,76), // object size
  NSPAIRA(_ZTI7S9839C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S9839C1),15, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S8035C3  {
  void *s8035c3f0;
  short s8035c3f1;
  char s8035c3f2;
  void  mf8035c3(); // _ZN7S8035C38mf8035c3Ev
};
//SIG(-1 S8035C3) C1{ m Fp Fs Fc}


void  S8035C3 ::mf8035c3(){}

static void Test_S8035C3()
{
  {
    init_simple_test("S8035C3");
    S8035C3 lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S8035C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8035C3)");
    check_field_offset(lv, s8035c3f0, 0, "S8035C3.s8035c3f0");
    check_field_offset(lv, s8035c3f1, ABISELECT(8,4), "S8035C3.s8035c3f1");
    check_field_offset(lv, s8035c3f2, ABISELECT(10,6), "S8035C3.s8035c3f2");
  }
}
static Arrange_To_Call_Me vS8035C3(Test_S8035C3, "S8035C3", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S8035C2  {
  int s8035c2f0;
  void *s8035c2f1;
  int s8035c2f2;
  char s8035c2f3;
  short s8035c2f4;
  ::S8035C3 s8035c2f5;
  void  mf8035c2(); // _ZN7S8035C28mf8035c2Ev
  virtual  ~S8035C2(); // _ZN7S8035C2D1Ev
  S8035C2(); // tgen
};
//SIG(-1 S8035C2) C1{ vd m Fi Fp Fi Fc Fs FC2{ m Fp Fs Fc}}


void  S8035C2 ::mf8035c2(){}
 S8035C2 ::~S8035C2(){ note_dtor("S8035C2", this);}
S8035C2 ::S8035C2(){ note_ctor("S8035C2", this);} // tgen

static void Test_S8035C2()
{
  extern Class_Descriptor cd_S8035C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,8)];
    init_test(&cd_S8035C2, buf);
    S8035C2 *dp, &lv = *(dp=new (buf) S8035C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,28), "sizeof(S8035C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8035C2)");
    check_field_offset(lv, s8035c2f0, ABISELECT(8,4), "S8035C2.s8035c2f0");
    check_field_offset(lv, s8035c2f1, ABISELECT(16,8), "S8035C2.s8035c2f1");
    check_field_offset(lv, s8035c2f2, ABISELECT(24,12), "S8035C2.s8035c2f2");
    check_field_offset(lv, s8035c2f3, ABISELECT(28,16), "S8035C2.s8035c2f3");
    check_field_offset(lv, s8035c2f4, ABISELECT(30,18), "S8035C2.s8035c2f4");
    check_field_offset(lv, s8035c2f5, ABISELECT(32,20), "S8035C2.s8035c2f5");
    test_class_info(&lv, &cd_S8035C2);
    dp->~S8035C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8035C2(Test_S8035C2, "S8035C2", ABISELECT(48,28));

#else // __cplusplus

extern void _ZN7S8035C2C1Ev();
extern void _ZN7S8035C2D1Ev();
Name_Map name_map_S8035C2[] = {
  NSPAIR(_ZN7S8035C2C1Ev),
  NSPAIR(_ZN7S8035C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S8035C2[];
extern void _ZN7S8035C2D1Ev();
extern void _ZN7S8035C2D0Ev();
static  VTBL_ENTRY vtc_S8035C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8035C2[0]),
  (VTBL_ENTRY)&_ZN7S8035C2D1Ev,
  (VTBL_ENTRY)&_ZN7S8035C2D0Ev,
};
extern VTBL_ENTRY _ZTI7S8035C2[];
extern  VTBL_ENTRY _ZTV7S8035C2[];
Class_Descriptor cd_S8035C2 = {  "S8035C2", // class name
  0,0,//no base classes
  &(vtc_S8035C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,28), // object size
  NSPAIRA(_ZTI7S8035C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S8035C2),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S8035C7  {
  short s8035c7f0[32];
};
//SIG(-1 S8035C7) C1{ Fs[32]}



static void Test_S8035C7()
{
  {
    init_simple_test("S8035C7");
    S8035C7 lv;
    check2(sizeof(lv), 64, "sizeof(S8035C7)");
    check2(__alignof__(lv), 2, "__alignof__(S8035C7)");
    check_field_offset(lv, s8035c7f0, 0, "S8035C7.s8035c7f0");
  }
}
static Arrange_To_Call_Me vS8035C7(Test_S8035C7, "S8035C7", 64);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S8035C5  : S4666C9_nt {
  ::S8035C7 s8035c5f0;
};
//SIG(-1 S8035C5) C1{ BC2{ m Fp Fi} FC3{ Fs[32]}}



static void Test_S8035C5()
{
  extern Class_Descriptor cd_S8035C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(11,19)];
    init_test(&cd_S8035C5, buf);
    S8035C5 &lv = *(new (buf) S8035C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,72), "sizeof(S8035C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8035C5)");
    check_base_class_offset(lv, (S4666C9_nt*), 0, "S8035C5");
    check_field_offset(lv, s8035c5f0, ABISELECT(16,8), "S8035C5.s8035c5f0");
    test_class_info(&lv, &cd_S8035C5);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8035C5(Test_S8035C5, "S8035C5", ABISELECT(80,72));

#else // __cplusplus

extern Class_Descriptor cd_S4666C9_nt;
extern VTBL_ENTRY _ZTI10S4666C9_nt[];
static Base_Class bases_S8035C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4666C9_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
Class_Descriptor cd_S8035C5 = {  "S8035C5", // class name
  bases_S8035C5, 1,
  0, // no vftv
  0, //no vtt
  ABISELECT(80,72), // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S8035C4  {
  int s8035c4f0;
  ::S8035C5 s8035c4f1;
  void  mf8035c4(); // _ZN7S8035C48mf8035c4Ev
};
//SIG(-1 S8035C4) C1{ m Fi FC2{ BC3{ m Fp Fi} FC4{ Fs[32]}}}


void  S8035C4 ::mf8035c4(){}

static void Test_S8035C4()
{
  {
    init_simple_test("S8035C4");
    S8035C4 lv;
    check2(sizeof(lv), ABISELECT(88,76), "sizeof(S8035C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8035C4)");
    check_field_offset(lv, s8035c4f0, 0, "S8035C4.s8035c4f0");
    check_field_offset(lv, s8035c4f1, ABISELECT(8,4), "S8035C4.s8035c4f1");
  }
}
static Arrange_To_Call_Me vS8035C4(Test_S8035C4, "S8035C4", ABISELECT(88,76));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S8035C1  : S8035C2 {
  ::S8035C4 s8035c1f0;
  char s8035c1f1;
  ::S8035C4 s8035c1f2;
  ::S8035C4 s8035c1f3;
  char s8035c1f4;
  virtual  ~S8035C1(); // _ZN7S8035C1D1Ev
  S8035C1(); // tgen
};
//SIG(1 S8035C1) C1{ BC2{ vd m Fi Fp Fi Fc Fs FC3{ m Fp Fs Fc}} vd FC4{ m Fi FC5{ BC6{ m Fp Fi} FC7{ Fs[32]}}} Fc FC4 FC4 Fc}


 S8035C1 ::~S8035C1(){ note_dtor("S8035C1", this);}
S8035C1 ::S8035C1(){ note_ctor("S8035C1", this);} // tgen

static void Test_S8035C1()
{
  extern Class_Descriptor cd_S8035C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(42,67)];
    init_test(&cd_S8035C1, buf);
    S8035C1 *dp, &lv = *(dp=new (buf) S8035C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(328,264), "sizeof(S8035C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8035C1)");
    check_base_class_offset(lv, (S8035C2*), 0, "S8035C1");
    check_field_offset(lv, s8035c1f0, ABISELECT(48,28), "S8035C1.s8035c1f0");
    check_field_offset(lv, s8035c1f1, ABISELECT(136,104), "S8035C1.s8035c1f1");
    check_field_offset(lv, s8035c1f2, ABISELECT(144,108), "S8035C1.s8035c1f2");
    check_field_offset(lv, s8035c1f3, ABISELECT(232,184), "S8035C1.s8035c1f3");
    check_field_offset(lv, s8035c1f4, ABISELECT(320,260), "S8035C1.s8035c1f4");
    test_class_info(&lv, &cd_S8035C1);
    dp->~S8035C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8035C1(Test_S8035C1, "S8035C1", ABISELECT(328,264));

#else // __cplusplus

extern void _ZN7S8035C1C1Ev();
extern void _ZN7S8035C1D1Ev();
Name_Map name_map_S8035C1[] = {
  NSPAIR(_ZN7S8035C1C1Ev),
  NSPAIR(_ZN7S8035C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S8035C2;
extern VTBL_ENTRY _ZTI7S8035C2[];
extern  VTBL_ENTRY _ZTV7S8035C2[];
static Base_Class bases_S8035C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S8035C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S8035C1[];
extern void _ZN7S8035C1D1Ev();
extern void _ZN7S8035C1D0Ev();
static  VTBL_ENTRY vtc_S8035C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8035C1[0]),
  (VTBL_ENTRY)&_ZN7S8035C1D1Ev,
  (VTBL_ENTRY)&_ZN7S8035C1D0Ev,
};
extern VTBL_ENTRY _ZTI7S8035C1[];
extern  VTBL_ENTRY _ZTV7S8035C1[];
Class_Descriptor cd_S8035C1 = {  "S8035C1", // class name
  bases_S8035C1, 1,
  &(vtc_S8035C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(328,264), // object size
  NSPAIRA(_ZTI7S8035C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S8035C1),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S15729C7  {
  short s15729c7f0[192];
};
//SIG(-1 S15729C7) C1{ Fs[192]}



static void Test_S15729C7()
{
  {
    init_simple_test("S15729C7");
    S15729C7 lv;
    check2(sizeof(lv), 384, "sizeof(S15729C7)");
    check2(__alignof__(lv), 2, "__alignof__(S15729C7)");
    check_field_offset(lv, s15729c7f0, 0, "S15729C7.s15729c7f0");
  }
}
static Arrange_To_Call_Me vS15729C7(Test_S15729C7, "S15729C7", 384);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S15729C6  {
  int s15729c6f0;
  char s15729c6f1[144];
  int s15729c6f2;
  char s15729c6f3[65];
  ::S15729C7 s15729c6f4;
};
//SIG(-1 S15729C6) C1{ Fi Fc[144] Fi Fc[65] FC2{ Fs[192]}}



static void Test_S15729C6()
{
  {
    init_simple_test("S15729C6");
    S15729C6 lv;
    check2(sizeof(lv), 604, "sizeof(S15729C6)");
    check2(__alignof__(lv), 4, "__alignof__(S15729C6)");
    check_field_offset(lv, s15729c6f0, 0, "S15729C6.s15729c6f0");
    check_field_offset(lv, s15729c6f1, 4, "S15729C6.s15729c6f1");
    check_field_offset(lv, s15729c6f2, 148, "S15729C6.s15729c6f2");
    check_field_offset(lv, s15729c6f3, 152, "S15729C6.s15729c6f3");
    check_field_offset(lv, s15729c6f4, 218, "S15729C6.s15729c6f4");
  }
}
static Arrange_To_Call_Me vS15729C6(Test_S15729C6, "S15729C6", 604);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S15729C5  {
  ::S15729C6 s15729c5f0;
  char s15729c5f1;
  int s15729c5f2;
  __tsi64 s15729c5f3;
};
//SIG(-1 S15729C5) C1{ FC2{ Fi Fc[144] Fi Fc[65] FC3{ Fs[192]}} Fc Fi FL}



static void Test_S15729C5()
{
  {
    init_simple_test("S15729C5");
    S15729C5 lv;
    check2(sizeof(lv), ABISELECT(624,620), "sizeof(S15729C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S15729C5)");
    check_field_offset(lv, s15729c5f0, 0, "S15729C5.s15729c5f0");
    check_field_offset(lv, s15729c5f1, 604, "S15729C5.s15729c5f1");
    check_field_offset(lv, s15729c5f2, 608, "S15729C5.s15729c5f2");
    check_field_offset(lv, s15729c5f3, ABISELECT(616,612), "S15729C5.s15729c5f3");
  }
}
static Arrange_To_Call_Me vS15729C5(Test_S15729C5, "S15729C5", ABISELECT(624,620));

#else // __cplusplus

Class_Descriptor cd_S15729C5 = {  "S15729C5", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  ABISELECT(624,620), // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S15729C4  : S15729C5 {
  int s15729c4f0[2];
  char s15729c4f1[2];
};
//SIG(1 S15729C4) C1{ BC2{ FC3{ Fi Fc[144] Fi Fc[65] FC4{ Fs[192]}} Fc Fi FL} Fi[2] Fc[2]}



static void Test_S15729C4()
{
  extern Class_Descriptor cd_S15729C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(81,159)];
    init_test(&cd_S15729C4, buf);
    S15729C4 &lv = *(new (buf) S15729C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(640,632), "sizeof(S15729C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S15729C4)");
    check_base_class_offset(lv, (S15729C5*), 0, "S15729C4");
    check_field_offset(lv, s15729c4f0, ABISELECT(624,620), "S15729C4.s15729c4f0");
    check_field_offset(lv, s15729c4f1, ABISELECT(632,628), "S15729C4.s15729c4f1");
    test_class_info(&lv, &cd_S15729C4);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS15729C4(Test_S15729C4, "S15729C4", ABISELECT(640,632));

#else // __cplusplus

extern Class_Descriptor cd_S15729C5;
static Base_Class bases_S15729C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S15729C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
Class_Descriptor cd_S15729C4 = {  "S15729C4", // class name
  bases_S15729C4, 1,
  0, // no vftv
  0, //no vtt
  ABISELECT(640,632), // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S15729C1  {
  ::S8713C6_nt s15729c1f0;
  int s15729c1f1;
  ::S15729C4 s15729c1f2[8];
  void  mf15729c1(); // _ZN8S15729C19mf15729c1Ev
};
//SIG(1 S15729C1) C1{ m FC2{ m FC3{ FL[4]}} Fi FC4{ BC5{ FC6{ Fi Fc[144] Fi Fc[65] FC7{ Fs[192]}} Fc Fi FL} Fi[2] Fc[2]}[8]}


void  S15729C1 ::mf15729c1(){}

static void Test_S15729C1()
{
  {
    init_simple_test("S15729C1");
    S15729C1 lv;
    check2(sizeof(lv), ABISELECT(5160,5092), "sizeof(S15729C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S15729C1)");
    check_field_offset(lv, s15729c1f0, 0, "S15729C1.s15729c1f0");
    check_field_offset(lv, s15729c1f1, 32, "S15729C1.s15729c1f1");
    check_field_offset(lv, s15729c1f2, ABISELECT(40,36), "S15729C1.s15729c1f2");
  }
}
static Arrange_To_Call_Me vS15729C1(Test_S15729C1, "S15729C1", ABISELECT(5160,5092));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S15728C1  {
  ::S8709C8_nt s15728c1f0;
  int s15728c1f1;
  ::S15729C4 s15728c1f2[8];
  void  mf15728c1(); // _ZN8S15728C19mf15728c1Ev
};
//SIG(1 S15728C1) C1{ m FC2{ m FC3{ Fl[4]}} Fi FC4{ BC5{ FC6{ Fi Fc[144] Fi Fc[65] FC7{ Fs[192]}} Fc Fi FL} Fi[2] Fc[2]}[8]}


void  S15728C1 ::mf15728c1(){}

static void Test_S15728C1()
{
  {
    init_simple_test("S15728C1");
    S15728C1 lv;
    check2(sizeof(lv), ABISELECT(5160,5076), "sizeof(S15728C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S15728C1)");
    check_field_offset(lv, s15728c1f0, 0, "S15728C1.s15728c1f0");
    check_field_offset(lv, s15728c1f1, ABISELECT(32,16), "S15728C1.s15728c1f1");
    check_field_offset(lv, s15728c1f2, ABISELECT(40,20), "S15728C1.s15728c1f2");
  }
}
static Arrange_To_Call_Me vS15728C1(Test_S15728C1, "S15728C1", ABISELECT(5160,5076));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3256C3  {
  void *s3256c3f0[3];
  int s3256c3f1;
  ::S3409C4_nt s3256c3f2;
  virtual  ~S3256C3(); // _ZN7S3256C3D1Ev
  virtual void  v4(); // _ZN7S3256C32v4Ev
  virtual void  v5(); // _ZN7S3256C32v5Ev
  virtual void  v6(); // _ZN7S3256C32v6Ev
  virtual void  v7(); // _ZN7S3256C32v7Ev
  virtual void  v8(); // _ZN7S3256C32v8Ev
  virtual void  v9(); // _ZN7S3256C32v9Ev
  virtual void  v10(); // _ZN7S3256C33v10Ev
  virtual void  v11(); // _ZN7S3256C33v11Ev
  S3256C3(); // tgen
};
//SIG(-1 S3256C3) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 Fp[3] Fi FC2{ Fl}}


 S3256C3 ::~S3256C3(){ note_dtor("S3256C3", this);}
void  S3256C3 ::v4(){vfunc_called(this, "_ZN7S3256C32v4Ev");}
void  S3256C3 ::v5(){vfunc_called(this, "_ZN7S3256C32v5Ev");}
void  S3256C3 ::v6(){vfunc_called(this, "_ZN7S3256C32v6Ev");}
void  S3256C3 ::v7(){vfunc_called(this, "_ZN7S3256C32v7Ev");}
void  S3256C3 ::v8(){vfunc_called(this, "_ZN7S3256C32v8Ev");}
void  S3256C3 ::v9(){vfunc_called(this, "_ZN7S3256C32v9Ev");}
void  S3256C3 ::v10(){vfunc_called(this, "_ZN7S3256C33v10Ev");}
void  S3256C3 ::v11(){vfunc_called(this, "_ZN7S3256C33v11Ev");}
S3256C3 ::S3256C3(){ note_ctor("S3256C3", this);} // tgen

static void Test_S3256C3()
{
  extern Class_Descriptor cd_S3256C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[7];
    init_test(&cd_S3256C3, buf);
    S3256C3 *dp, &lv = *(dp=new (buf) S3256C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,24), "sizeof(S3256C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3256C3)");
    check_field_offset(lv, s3256c3f0, ABISELECT(8,4), "S3256C3.s3256c3f0");
    check_field_offset(lv, s3256c3f1, ABISELECT(32,16), "S3256C3.s3256c3f1");
    check_field_offset(lv, s3256c3f2, ABISELECT(40,20), "S3256C3.s3256c3f2");
    test_class_info(&lv, &cd_S3256C3);
    dp->~S3256C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3256C3(Test_S3256C3, "S3256C3", ABISELECT(48,24));

#else // __cplusplus

extern void _ZN7S3256C3C1Ev();
extern void _ZN7S3256C3D1Ev();
Name_Map name_map_S3256C3[] = {
  NSPAIR(_ZN7S3256C3C1Ev),
  NSPAIR(_ZN7S3256C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S3256C3[];
extern void _ZN7S3256C3D1Ev();
extern void _ZN7S3256C3D0Ev();
extern void _ZN7S3256C32v4Ev();
extern void _ZN7S3256C32v5Ev();
extern void _ZN7S3256C32v6Ev();
extern void _ZN7S3256C32v7Ev();
extern void _ZN7S3256C32v8Ev();
extern void _ZN7S3256C32v9Ev();
extern void _ZN7S3256C33v10Ev();
extern void _ZN7S3256C33v11Ev();
static  VTBL_ENTRY vtc_S3256C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3256C3[0]),
  (VTBL_ENTRY)&_ZN7S3256C3D1Ev,
  (VTBL_ENTRY)&_ZN7S3256C3D0Ev,
  (VTBL_ENTRY)&_ZN7S3256C32v4Ev,
  (VTBL_ENTRY)&_ZN7S3256C32v5Ev,
  (VTBL_ENTRY)&_ZN7S3256C32v6Ev,
  (VTBL_ENTRY)&_ZN7S3256C32v7Ev,
  (VTBL_ENTRY)&_ZN7S3256C32v8Ev,
  (VTBL_ENTRY)&_ZN7S3256C32v9Ev,
  (VTBL_ENTRY)&_ZN7S3256C33v10Ev,
  (VTBL_ENTRY)&_ZN7S3256C33v11Ev,
};
extern VTBL_ENTRY _ZTI7S3256C3[];
extern  VTBL_ENTRY _ZTV7S3256C3[];
Class_Descriptor cd_S3256C3 = {  "S3256C3", // class name
  0,0,//no base classes
  &(vtc_S3256C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,24), // object size
  NSPAIRA(_ZTI7S3256C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S3256C3),12, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3256C2  : S3256C3 {
  virtual  ~S3256C2(); // _ZN7S3256C2D1Ev
  virtual void  v12(); // _ZN7S3256C23v12Ev
  virtual void  v13(); // _ZN7S3256C23v13Ev
  virtual void  v14(); // _ZN7S3256C23v14Ev
  S3256C2(); // tgen
};
//SIG(-1 S3256C2) C1{ BC2{ vd v4 v5 v6 v7 v8 v9 v10 v11 Fp[3] Fi FC3{ Fl}} vd v1 v2 v3}


 S3256C2 ::~S3256C2(){ note_dtor("S3256C2", this);}
void  S3256C2 ::v12(){vfunc_called(this, "_ZN7S3256C23v12Ev");}
void  S3256C2 ::v13(){vfunc_called(this, "_ZN7S3256C23v13Ev");}
void  S3256C2 ::v14(){vfunc_called(this, "_ZN7S3256C23v14Ev");}
S3256C2 ::S3256C2(){ note_ctor("S3256C2", this);} // tgen

static void Test_S3256C2()
{
  extern Class_Descriptor cd_S3256C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[7];
    init_test(&cd_S3256C2, buf);
    S3256C2 *dp, &lv = *(dp=new (buf) S3256C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,24), "sizeof(S3256C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3256C2)");
    check_base_class_offset(lv, (S3256C3*), 0, "S3256C2");
    test_class_info(&lv, &cd_S3256C2);
    dp->~S3256C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3256C2(Test_S3256C2, "S3256C2", ABISELECT(48,24));

#else // __cplusplus

extern void _ZN7S3256C2C1Ev();
extern void _ZN7S3256C2D1Ev();
Name_Map name_map_S3256C2[] = {
  NSPAIR(_ZN7S3256C2C1Ev),
  NSPAIR(_ZN7S3256C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3256C3;
extern VTBL_ENTRY _ZTI7S3256C3[];
extern  VTBL_ENTRY _ZTV7S3256C3[];
static Base_Class bases_S3256C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3256C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3256C2[];
extern void _ZN7S3256C2D1Ev();
extern void _ZN7S3256C2D0Ev();
extern void _ZN7S3256C32v4Ev();
extern void _ZN7S3256C32v5Ev();
extern void _ZN7S3256C32v6Ev();
extern void _ZN7S3256C32v7Ev();
extern void _ZN7S3256C32v8Ev();
extern void _ZN7S3256C32v9Ev();
extern void _ZN7S3256C33v10Ev();
extern void _ZN7S3256C33v11Ev();
extern void _ZN7S3256C23v12Ev();
extern void _ZN7S3256C23v13Ev();
extern void _ZN7S3256C23v14Ev();
static  VTBL_ENTRY vtc_S3256C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3256C2[0]),
  (VTBL_ENTRY)&_ZN7S3256C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3256C2D0Ev,
  (VTBL_ENTRY)&_ZN7S3256C32v4Ev,
  (VTBL_ENTRY)&_ZN7S3256C32v5Ev,
  (VTBL_ENTRY)&_ZN7S3256C32v6Ev,
  (VTBL_ENTRY)&_ZN7S3256C32v7Ev,
  (VTBL_ENTRY)&_ZN7S3256C32v8Ev,
  (VTBL_ENTRY)&_ZN7S3256C32v9Ev,
  (VTBL_ENTRY)&_ZN7S3256C33v10Ev,
  (VTBL_ENTRY)&_ZN7S3256C33v11Ev,
  (VTBL_ENTRY)&_ZN7S3256C23v12Ev,
  (VTBL_ENTRY)&_ZN7S3256C23v13Ev,
  (VTBL_ENTRY)&_ZN7S3256C23v14Ev,
};
extern VTBL_ENTRY _ZTI7S3256C2[];
extern  VTBL_ENTRY _ZTV7S3256C2[];
Class_Descriptor cd_S3256C2 = {  "S3256C2", // class name
  bases_S3256C2, 1,
  &(vtc_S3256C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,24), // object size
  NSPAIRA(_ZTI7S3256C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3256C2),15, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3256C1  : S3256C2 {
  void *s3256c1f0;
  char s3256c1f1[2050];
  virtual  ~S3256C1(); // _ZN7S3256C1D1Ev
  virtual void  v1(); // _ZN7S3256C12v1Ev
  virtual void  v2(); // _ZN7S3256C12v2Ev
  virtual void  v3(); // _ZN7S3256C12v3Ev
  S3256C1(); // tgen
};
//SIG(1 S3256C1) C1{ BC2{ BC3{ vd v4 v5 v6 v7 v8 v9 v10 v11 Fp[3] Fi FC4{ Fl}} vd v12 v13 v14} vd v1 v2 v3 Fp Fc[2050]}


 S3256C1 ::~S3256C1(){ note_dtor("S3256C1", this);}
void  S3256C1 ::v1(){vfunc_called(this, "_ZN7S3256C12v1Ev");}
void  S3256C1 ::v2(){vfunc_called(this, "_ZN7S3256C12v2Ev");}
void  S3256C1 ::v3(){vfunc_called(this, "_ZN7S3256C12v3Ev");}
S3256C1 ::S3256C1(){ note_ctor("S3256C1", this);} // tgen

static void Test_S3256C1()
{
  extern Class_Descriptor cd_S3256C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(265,521)];
    init_test(&cd_S3256C1, buf);
    S3256C1 *dp, &lv = *(dp=new (buf) S3256C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(2112,2080), "sizeof(S3256C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3256C1)");
    check_base_class_offset(lv, (S3256C3*)(S3256C2*), 0, "S3256C1");
    check_base_class_offset(lv, (S3256C2*), 0, "S3256C1");
    check_field_offset(lv, s3256c1f0, ABISELECT(48,24), "S3256C1.s3256c1f0");
    check_field_offset(lv, s3256c1f1, ABISELECT(56,28), "S3256C1.s3256c1f1");
    test_class_info(&lv, &cd_S3256C1);
    dp->~S3256C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3256C1(Test_S3256C1, "S3256C1", ABISELECT(2112,2080));

#else // __cplusplus

extern void _ZN7S3256C1C1Ev();
extern void _ZN7S3256C1D1Ev();
Name_Map name_map_S3256C1[] = {
  NSPAIR(_ZN7S3256C1C1Ev),
  NSPAIR(_ZN7S3256C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3256C3;
extern VTBL_ENTRY _ZTI7S3256C3[];
extern  VTBL_ENTRY _ZTV7S3256C3[];
extern Class_Descriptor cd_S3256C2;
extern VTBL_ENTRY _ZTI7S3256C2[];
extern  VTBL_ENTRY _ZTV7S3256C2[];
static Base_Class bases_S3256C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3256C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S3256C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3256C1[];
extern void _ZN7S3256C1D1Ev();
extern void _ZN7S3256C1D0Ev();
extern void _ZN7S3256C32v4Ev();
extern void _ZN7S3256C32v5Ev();
extern void _ZN7S3256C32v6Ev();
extern void _ZN7S3256C32v7Ev();
extern void _ZN7S3256C32v8Ev();
extern void _ZN7S3256C32v9Ev();
extern void _ZN7S3256C33v10Ev();
extern void _ZN7S3256C33v11Ev();
extern void _ZN7S3256C23v12Ev();
extern void _ZN7S3256C23v13Ev();
extern void _ZN7S3256C23v14Ev();
extern void _ZN7S3256C12v1Ev();
extern void _ZN7S3256C12v2Ev();
extern void _ZN7S3256C12v3Ev();
static  VTBL_ENTRY vtc_S3256C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3256C1[0]),
  (VTBL_ENTRY)&_ZN7S3256C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3256C1D0Ev,
  (VTBL_ENTRY)&_ZN7S3256C32v4Ev,
  (VTBL_ENTRY)&_ZN7S3256C32v5Ev,
  (VTBL_ENTRY)&_ZN7S3256C32v6Ev,
  (VTBL_ENTRY)&_ZN7S3256C32v7Ev,
  (VTBL_ENTRY)&_ZN7S3256C32v8Ev,
  (VTBL_ENTRY)&_ZN7S3256C32v9Ev,
  (VTBL_ENTRY)&_ZN7S3256C33v10Ev,
  (VTBL_ENTRY)&_ZN7S3256C33v11Ev,
  (VTBL_ENTRY)&_ZN7S3256C23v12Ev,
  (VTBL_ENTRY)&_ZN7S3256C23v13Ev,
  (VTBL_ENTRY)&_ZN7S3256C23v14Ev,
  (VTBL_ENTRY)&_ZN7S3256C12v1Ev,
  (VTBL_ENTRY)&_ZN7S3256C12v2Ev,
  (VTBL_ENTRY)&_ZN7S3256C12v3Ev,
};
extern VTBL_ENTRY _ZTI7S3256C1[];
extern  VTBL_ENTRY _ZTV7S3256C1[];
Class_Descriptor cd_S3256C1 = {  "S3256C1", // class name
  bases_S3256C1, 2,
  &(vtc_S3256C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(2112,2080), // object size
  NSPAIRA(_ZTI7S3256C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3256C1),18, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3303C3  {
  void *s3303c3f0[3];
  int s3303c3f1;
  ::S3409C4_nt s3303c3f2;
  virtual  ~S3303C3(); // _ZN7S3303C3D1Ev
  virtual void  v5(); // _ZN7S3303C32v5Ev
  virtual void  v6(); // _ZN7S3303C32v6Ev
  virtual void  v7(); // _ZN7S3303C32v7Ev
  virtual void  v8(); // _ZN7S3303C32v8Ev
  virtual void  v9(); // _ZN7S3303C32v9Ev
  virtual void  v10(); // _ZN7S3303C33v10Ev
  virtual void  v11(); // _ZN7S3303C33v11Ev
  virtual void  v12(); // _ZN7S3303C33v12Ev
  S3303C3(); // tgen
};
//SIG(-1 S3303C3) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 Fp[3] Fi FC2{ Fl}}


 S3303C3 ::~S3303C3(){ note_dtor("S3303C3", this);}
void  S3303C3 ::v5(){vfunc_called(this, "_ZN7S3303C32v5Ev");}
void  S3303C3 ::v6(){vfunc_called(this, "_ZN7S3303C32v6Ev");}
void  S3303C3 ::v7(){vfunc_called(this, "_ZN7S3303C32v7Ev");}
void  S3303C3 ::v8(){vfunc_called(this, "_ZN7S3303C32v8Ev");}
void  S3303C3 ::v9(){vfunc_called(this, "_ZN7S3303C32v9Ev");}
void  S3303C3 ::v10(){vfunc_called(this, "_ZN7S3303C33v10Ev");}
void  S3303C3 ::v11(){vfunc_called(this, "_ZN7S3303C33v11Ev");}
void  S3303C3 ::v12(){vfunc_called(this, "_ZN7S3303C33v12Ev");}
S3303C3 ::S3303C3(){ note_ctor("S3303C3", this);} // tgen

static void Test_S3303C3()
{
  extern Class_Descriptor cd_S3303C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[7];
    init_test(&cd_S3303C3, buf);
    S3303C3 *dp, &lv = *(dp=new (buf) S3303C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,24), "sizeof(S3303C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3303C3)");
    check_field_offset(lv, s3303c3f0, ABISELECT(8,4), "S3303C3.s3303c3f0");
    check_field_offset(lv, s3303c3f1, ABISELECT(32,16), "S3303C3.s3303c3f1");
    check_field_offset(lv, s3303c3f2, ABISELECT(40,20), "S3303C3.s3303c3f2");
    test_class_info(&lv, &cd_S3303C3);
    dp->~S3303C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3303C3(Test_S3303C3, "S3303C3", ABISELECT(48,24));

#else // __cplusplus

extern void _ZN7S3303C3C1Ev();
extern void _ZN7S3303C3D1Ev();
Name_Map name_map_S3303C3[] = {
  NSPAIR(_ZN7S3303C3C1Ev),
  NSPAIR(_ZN7S3303C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S3303C3[];
extern void _ZN7S3303C3D1Ev();
extern void _ZN7S3303C3D0Ev();
extern void _ZN7S3303C32v5Ev();
extern void _ZN7S3303C32v6Ev();
extern void _ZN7S3303C32v7Ev();
extern void _ZN7S3303C32v8Ev();
extern void _ZN7S3303C32v9Ev();
extern void _ZN7S3303C33v10Ev();
extern void _ZN7S3303C33v11Ev();
extern void _ZN7S3303C33v12Ev();
static  VTBL_ENTRY vtc_S3303C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3303C3[0]),
  (VTBL_ENTRY)&_ZN7S3303C3D1Ev,
  (VTBL_ENTRY)&_ZN7S3303C3D0Ev,
  (VTBL_ENTRY)&_ZN7S3303C32v5Ev,
  (VTBL_ENTRY)&_ZN7S3303C32v6Ev,
  (VTBL_ENTRY)&_ZN7S3303C32v7Ev,
  (VTBL_ENTRY)&_ZN7S3303C32v8Ev,
  (VTBL_ENTRY)&_ZN7S3303C32v9Ev,
  (VTBL_ENTRY)&_ZN7S3303C33v10Ev,
  (VTBL_ENTRY)&_ZN7S3303C33v11Ev,
  (VTBL_ENTRY)&_ZN7S3303C33v12Ev,
};
extern VTBL_ENTRY _ZTI7S3303C3[];
extern  VTBL_ENTRY _ZTV7S3303C3[];
Class_Descriptor cd_S3303C3 = {  "S3303C3", // class name
  0,0,//no base classes
  &(vtc_S3303C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,24), // object size
  NSPAIRA(_ZTI7S3303C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S3303C3),12, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3303C2  : S3303C3 {
  virtual  ~S3303C2(); // _ZN7S3303C2D1Ev
  virtual void  v13(); // _ZN7S3303C23v13Ev
  virtual void  v14(); // _ZN7S3303C23v14Ev
  virtual void  v15(); // _ZN7S3303C23v15Ev
  virtual void  v16(); // _ZN7S3303C23v16Ev
  S3303C2(); // tgen
};
//SIG(-1 S3303C2) C1{ BC2{ vd v5 v6 v7 v8 v9 v10 v11 v12 Fp[3] Fi FC3{ Fl}} vd v1 v2 v3 v4}


 S3303C2 ::~S3303C2(){ note_dtor("S3303C2", this);}
void  S3303C2 ::v13(){vfunc_called(this, "_ZN7S3303C23v13Ev");}
void  S3303C2 ::v14(){vfunc_called(this, "_ZN7S3303C23v14Ev");}
void  S3303C2 ::v15(){vfunc_called(this, "_ZN7S3303C23v15Ev");}
void  S3303C2 ::v16(){vfunc_called(this, "_ZN7S3303C23v16Ev");}
S3303C2 ::S3303C2(){ note_ctor("S3303C2", this);} // tgen

static void Test_S3303C2()
{
  extern Class_Descriptor cd_S3303C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[7];
    init_test(&cd_S3303C2, buf);
    S3303C2 *dp, &lv = *(dp=new (buf) S3303C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,24), "sizeof(S3303C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3303C2)");
    check_base_class_offset(lv, (S3303C3*), 0, "S3303C2");
    test_class_info(&lv, &cd_S3303C2);
    dp->~S3303C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3303C2(Test_S3303C2, "S3303C2", ABISELECT(48,24));

#else // __cplusplus

extern void _ZN7S3303C2C1Ev();
extern void _ZN7S3303C2D1Ev();
Name_Map name_map_S3303C2[] = {
  NSPAIR(_ZN7S3303C2C1Ev),
  NSPAIR(_ZN7S3303C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3303C3;
extern VTBL_ENTRY _ZTI7S3303C3[];
extern  VTBL_ENTRY _ZTV7S3303C3[];
static Base_Class bases_S3303C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3303C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3303C2[];
extern void _ZN7S3303C2D1Ev();
extern void _ZN7S3303C2D0Ev();
extern void _ZN7S3303C32v5Ev();
extern void _ZN7S3303C32v6Ev();
extern void _ZN7S3303C32v7Ev();
extern void _ZN7S3303C32v8Ev();
extern void _ZN7S3303C32v9Ev();
extern void _ZN7S3303C33v10Ev();
extern void _ZN7S3303C33v11Ev();
extern void _ZN7S3303C33v12Ev();
extern void _ZN7S3303C23v13Ev();
extern void _ZN7S3303C23v14Ev();
extern void _ZN7S3303C23v15Ev();
extern void _ZN7S3303C23v16Ev();
static  VTBL_ENTRY vtc_S3303C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3303C2[0]),
  (VTBL_ENTRY)&_ZN7S3303C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3303C2D0Ev,
  (VTBL_ENTRY)&_ZN7S3303C32v5Ev,
  (VTBL_ENTRY)&_ZN7S3303C32v6Ev,
  (VTBL_ENTRY)&_ZN7S3303C32v7Ev,
  (VTBL_ENTRY)&_ZN7S3303C32v8Ev,
  (VTBL_ENTRY)&_ZN7S3303C32v9Ev,
  (VTBL_ENTRY)&_ZN7S3303C33v10Ev,
  (VTBL_ENTRY)&_ZN7S3303C33v11Ev,
  (VTBL_ENTRY)&_ZN7S3303C33v12Ev,
  (VTBL_ENTRY)&_ZN7S3303C23v13Ev,
  (VTBL_ENTRY)&_ZN7S3303C23v14Ev,
  (VTBL_ENTRY)&_ZN7S3303C23v15Ev,
  (VTBL_ENTRY)&_ZN7S3303C23v16Ev,
};
extern VTBL_ENTRY _ZTI7S3303C2[];
extern  VTBL_ENTRY _ZTV7S3303C2[];
Class_Descriptor cd_S3303C2 = {  "S3303C2", // class name
  bases_S3303C2, 1,
  &(vtc_S3303C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,24), // object size
  NSPAIRA(_ZTI7S3303C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3303C2),16, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3303C1  : S3303C2 {
  virtual  ~S3303C1(); // _ZN7S3303C1D1Ev
  virtual void  v1(); // _ZN7S3303C12v1Ev
  virtual void  v2(); // _ZN7S3303C12v2Ev
  virtual void  v3(); // _ZN7S3303C12v3Ev
  virtual void  v4(); // _ZN7S3303C12v4Ev
  S3303C1(); // tgen
};
//SIG(1 S3303C1) C1{ BC2{ BC3{ vd v5 v6 v7 v8 v9 v10 v11 v12 Fp[3] Fi FC4{ Fl}} vd v13 v14 v15 v16} vd v1 v2 v3 v4}


 S3303C1 ::~S3303C1(){ note_dtor("S3303C1", this);}
void  S3303C1 ::v1(){vfunc_called(this, "_ZN7S3303C12v1Ev");}
void  S3303C1 ::v2(){vfunc_called(this, "_ZN7S3303C12v2Ev");}
void  S3303C1 ::v3(){vfunc_called(this, "_ZN7S3303C12v3Ev");}
void  S3303C1 ::v4(){vfunc_called(this, "_ZN7S3303C12v4Ev");}
S3303C1 ::S3303C1(){ note_ctor("S3303C1", this);} // tgen

static void Test_S3303C1()
{
  extern Class_Descriptor cd_S3303C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[7];
    init_test(&cd_S3303C1, buf);
    S3303C1 *dp, &lv = *(dp=new (buf) S3303C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,24), "sizeof(S3303C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3303C1)");
    check_base_class_offset(lv, (S3303C3*)(S3303C2*), 0, "S3303C1");
    check_base_class_offset(lv, (S3303C2*), 0, "S3303C1");
    test_class_info(&lv, &cd_S3303C1);
    dp->~S3303C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3303C1(Test_S3303C1, "S3303C1", ABISELECT(48,24));

#else // __cplusplus

extern void _ZN7S3303C1C1Ev();
extern void _ZN7S3303C1D1Ev();
Name_Map name_map_S3303C1[] = {
  NSPAIR(_ZN7S3303C1C1Ev),
  NSPAIR(_ZN7S3303C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3303C3;
extern VTBL_ENTRY _ZTI7S3303C3[];
extern  VTBL_ENTRY _ZTV7S3303C3[];
extern Class_Descriptor cd_S3303C2;
extern VTBL_ENTRY _ZTI7S3303C2[];
extern  VTBL_ENTRY _ZTV7S3303C2[];
static Base_Class bases_S3303C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3303C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S3303C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3303C1[];
extern void _ZN7S3303C1D1Ev();
extern void _ZN7S3303C1D0Ev();
extern void _ZN7S3303C32v5Ev();
extern void _ZN7S3303C32v6Ev();
extern void _ZN7S3303C32v7Ev();
extern void _ZN7S3303C32v8Ev();
extern void _ZN7S3303C32v9Ev();
extern void _ZN7S3303C33v10Ev();
extern void _ZN7S3303C33v11Ev();
extern void _ZN7S3303C33v12Ev();
extern void _ZN7S3303C23v13Ev();
extern void _ZN7S3303C23v14Ev();
extern void _ZN7S3303C23v15Ev();
extern void _ZN7S3303C23v16Ev();
extern void _ZN7S3303C12v1Ev();
extern void _ZN7S3303C12v2Ev();
extern void _ZN7S3303C12v3Ev();
extern void _ZN7S3303C12v4Ev();
static  VTBL_ENTRY vtc_S3303C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3303C1[0]),
  (VTBL_ENTRY)&_ZN7S3303C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3303C1D0Ev,
  (VTBL_ENTRY)&_ZN7S3303C32v5Ev,
  (VTBL_ENTRY)&_ZN7S3303C32v6Ev,
  (VTBL_ENTRY)&_ZN7S3303C32v7Ev,
  (VTBL_ENTRY)&_ZN7S3303C32v8Ev,
  (VTBL_ENTRY)&_ZN7S3303C32v9Ev,
  (VTBL_ENTRY)&_ZN7S3303C33v10Ev,
  (VTBL_ENTRY)&_ZN7S3303C33v11Ev,
  (VTBL_ENTRY)&_ZN7S3303C33v12Ev,
  (VTBL_ENTRY)&_ZN7S3303C23v13Ev,
  (VTBL_ENTRY)&_ZN7S3303C23v14Ev,
  (VTBL_ENTRY)&_ZN7S3303C23v15Ev,
  (VTBL_ENTRY)&_ZN7S3303C23v16Ev,
  (VTBL_ENTRY)&_ZN7S3303C12v1Ev,
  (VTBL_ENTRY)&_ZN7S3303C12v2Ev,
  (VTBL_ENTRY)&_ZN7S3303C12v3Ev,
  (VTBL_ENTRY)&_ZN7S3303C12v4Ev,
};
extern VTBL_ENTRY _ZTI7S3303C1[];
extern  VTBL_ENTRY _ZTV7S3303C1[];
Class_Descriptor cd_S3303C1 = {  "S3303C1", // class name
  bases_S3303C1, 2,
  &(vtc_S3303C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,24), // object size
  NSPAIRA(_ZTI7S3303C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3303C1),20, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S16145C1  {
  ::S8714C6_nt s16145c1f0;
  int s16145c1f1;
  ::S15729C4 s16145c1f2[8];
  void  mf16145c1(); // _ZN8S16145C19mf16145c1Ev
};
//SIG(1 S16145C1) C1{ m FC2{ m FL[4]} Fi FC3{ BC4{ FC5{ Fi Fc[144] Fi Fc[65] FC6{ Fs[192]}} Fc Fi FL} Fi[2] Fc[2]}[8]}


void  S16145C1 ::mf16145c1(){}

static void Test_S16145C1()
{
  {
    init_simple_test("S16145C1");
    S16145C1 lv;
    check2(sizeof(lv), ABISELECT(5160,5092), "sizeof(S16145C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S16145C1)");
    check_field_offset(lv, s16145c1f0, 0, "S16145C1.s16145c1f0");
    check_field_offset(lv, s16145c1f1, 32, "S16145C1.s16145c1f1");
    check_field_offset(lv, s16145c1f2, ABISELECT(40,36), "S16145C1.s16145c1f2");
  }
}
static Arrange_To_Call_Me vS16145C1(Test_S16145C1, "S16145C1", ABISELECT(5160,5092));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19052C4  {
  virtual void  v2(); // _ZN8S19052C42v2Ev
  ~S19052C4(); // tgen
  S19052C4(); // tgen
};
//SIG(-1 S19052C4) C1{ v1}


void  S19052C4 ::v2(){vfunc_called(this, "_ZN8S19052C42v2Ev");}
S19052C4 ::~S19052C4(){ note_dtor("S19052C4", this);} // tgen
S19052C4 ::S19052C4(){ note_ctor("S19052C4", this);} // tgen

static void Test_S19052C4()
{
  extern Class_Descriptor cd_S19052C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S19052C4, buf);
    S19052C4 *dp, &lv = *(dp=new (buf) S19052C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S19052C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19052C4)");
    test_class_info(&lv, &cd_S19052C4);
    dp->~S19052C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19052C4(Test_S19052C4, "S19052C4", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S19052C4C1Ev();
extern void _ZN8S19052C4D1Ev();
Name_Map name_map_S19052C4[] = {
  NSPAIR(_ZN8S19052C4C1Ev),
  NSPAIR(_ZN8S19052C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S19052C4[];
extern void _ZN8S19052C42v2Ev();
static  VTBL_ENTRY vtc_S19052C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19052C4[0]),
  (VTBL_ENTRY)&_ZN8S19052C42v2Ev,
};
extern VTBL_ENTRY _ZTI8S19052C4[];
extern  VTBL_ENTRY _ZTV8S19052C4[];
Class_Descriptor cd_S19052C4 = {  "S19052C4", // class name
  0,0,//no base classes
  &(vtc_S19052C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S19052C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S19052C4),3, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19052C5  : S19052C4 {
  ~S19052C5(); // tgen
  S19052C5(); // tgen
};
//SIG(-1 S19052C5) C1{ BC2{ v1}}


S19052C5 ::~S19052C5(){ note_dtor("S19052C5", this);} // tgen
S19052C5 ::S19052C5(){ note_ctor("S19052C5", this);} // tgen

static void Test_S19052C5()
{
  extern Class_Descriptor cd_S19052C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S19052C5, buf);
    S19052C5 *dp, &lv = *(dp=new (buf) S19052C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S19052C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19052C5)");
    check_base_class_offset(lv, (S19052C4*), 0, "S19052C5");
    test_class_info(&lv, &cd_S19052C5);
    dp->~S19052C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19052C5(Test_S19052C5, "S19052C5", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S19052C5C1Ev();
extern void _ZN8S19052C5D1Ev();
Name_Map name_map_S19052C5[] = {
  NSPAIR(_ZN8S19052C5C1Ev),
  NSPAIR(_ZN8S19052C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19052C4;
extern VTBL_ENTRY _ZTI8S19052C4[];
extern  VTBL_ENTRY _ZTV8S19052C4[];
static Base_Class bases_S19052C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19052C4,    0, //bcp->offset
    0, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19052C5[];
extern void _ZN8S19052C42v2Ev();
static  VTBL_ENTRY vtc_S19052C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19052C5[0]),
  (VTBL_ENTRY)&_ZN8S19052C42v2Ev,
};
extern VTBL_ENTRY _ZTI8S19052C5[];
extern  VTBL_ENTRY _ZTV8S19052C5[];
Class_Descriptor cd_S19052C5 = {  "S19052C5", // class name
  bases_S19052C5, 1,
  &(vtc_S19052C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S19052C5),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S19052C5),3, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19052C3  : S19052C4 , S19052C5 {
  virtual  ~S19052C3(); // _ZN8S19052C3D1Ev
  S19052C3(); // tgen
};
//SIG(-1 S19052C3) C1{ BC2{ v1} BC3{ BC2} vd}


 S19052C3 ::~S19052C3(){ note_dtor("S19052C3", this);}
S19052C3 ::S19052C3(){ note_ctor("S19052C3", this);} // tgen

static void Test_S19052C3()
{
  extern Class_Descriptor cd_S19052C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S19052C3, buf);
    S19052C3 *dp, &lv = *(dp=new (buf) S19052C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S19052C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19052C3)");
    /*is_ambiguous_... S19052C3::S19052C4 */ AMB_check_base_class_offset(lv, (S19052C4*), 0, "S19052C3");
    check_base_class_offset(lv, (S19052C4*)(S19052C5*), ABISELECT(8,4), "S19052C3");
    check_base_class_offset(lv, (S19052C5*), ABISELECT(8,4), "S19052C3");
    test_class_info(&lv, &cd_S19052C3);
    dp->~S19052C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19052C3(Test_S19052C3, "S19052C3", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN8S19052C3C1Ev();
extern void _ZN8S19052C3D1Ev();
Name_Map name_map_S19052C3[] = {
  NSPAIR(_ZN8S19052C3C1Ev),
  NSPAIR(_ZN8S19052C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19052C4;
extern VTBL_ENTRY _ZTI8S19052C4[];
extern  VTBL_ENTRY _ZTV8S19052C4[];
extern Class_Descriptor cd_S19052C4;
extern VTBL_ENTRY _ZTI8S19052C4[];
extern  VTBL_ENTRY _ZTV8S19052C4[];
extern Class_Descriptor cd_S19052C5;
extern VTBL_ENTRY _ZTI8S19052C5[];
extern  VTBL_ENTRY _ZTV8S19052C5[];
static Base_Class bases_S19052C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19052C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19052C4,    ABISELECT(8,4), //bcp->offset
    5, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S19052C5,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19052C3[];
extern void _ZN8S19052C42v2Ev();
extern void _ZN8S19052C3D1Ev();
extern void _ZN8S19052C3D0Ev();
extern void _ZN8S19052C42v2Ev();
static  VTBL_ENTRY vtc_S19052C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19052C3[0]),
  (VTBL_ENTRY)&_ZN8S19052C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19052C3D1Ev,
  (VTBL_ENTRY)&_ZN8S19052C3D0Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S19052C3[0]),
  (VTBL_ENTRY)&_ZN8S19052C42v2Ev,
};
extern VTBL_ENTRY _ZTI8S19052C3[];
extern  VTBL_ENTRY _ZTV8S19052C3[];
Class_Descriptor cd_S19052C3 = {  "S19052C3", // class name
  bases_S19052C3, 3,
  &(vtc_S19052C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S19052C3),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19052C3),8, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19052C6  : virtual S836C39 {
  ~S19052C6(); // tgen
  S19052C6(); // tgen
};
//SIG(-1 S19052C6) C1{ VBC2{ m}}


S19052C6 ::~S19052C6(){ note_dtor("S19052C6", this);} // tgen
S19052C6 ::S19052C6(){ note_ctor("S19052C6", this);} // tgen

static void Test_S19052C6()
{
  extern Class_Descriptor cd_S19052C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S19052C6, buf);
    S19052C6 *dp, &lv = *(dp=new (buf) S19052C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S19052C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19052C6)");
    check_base_class_offset(lv, (S836C39*), 0, "S19052C6");
    test_class_info(&lv, &cd_S19052C6);
    dp->~S19052C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19052C6(Test_S19052C6, "S19052C6", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S19052C6C1Ev();
extern void _ZN8S19052C6D1Ev();
Name_Map name_map_S19052C6[] = {
  NSPAIR(_ZN8S19052C6C1Ev),
  NSPAIR(_ZN8S19052C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S836C39;
extern VTBL_ENTRY _ZTI7S836C39[];
static Base_Class bases_S19052C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S836C39,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19052C6[];
static  VTBL_ENTRY vtc_S19052C6[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19052C6[0]),
};
extern VTBL_ENTRY _ZTV8S19052C6[];
static  VTT_ENTRY vtt_S19052C6[] = {
  {&(_ZTV8S19052C6[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S19052C6[];
extern  VTBL_ENTRY _ZTV8S19052C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19052C6[];
Class_Descriptor cd_S19052C6 = {  "S19052C6", // class name
  bases_S19052C6, 1,
  &(vtc_S19052C6[0]), // expected_vtbl_contents
  &(vtt_S19052C6[0]), // expected_vtt_contents
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S19052C6),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S19052C6),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19052C6),1, //virtual table table var
  0, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19052C8  : S836C29 {
};
//SIG(-1 S19052C8) C1{ BC2{ m}}



static void Test_S19052C8()
{
  extern Class_Descriptor cd_S19052C8;
  void *lvp;
  {
    char buf[1];
    init_test(&cd_S19052C8, buf);
    S19052C8 &lv = *(new (buf) S19052C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), 1, "sizeof(S19052C8)");
    check2(__alignof__(lv), 1, "__alignof__(S19052C8)");
    check_base_class_offset(lv, (S836C29*), 0, "S19052C8");
    test_class_info(&lv, &cd_S19052C8);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19052C8(Test_S19052C8, "S19052C8", 1);

#else // __cplusplus

extern Class_Descriptor cd_S836C29;
extern VTBL_ENTRY _ZTI7S836C29[];
static Base_Class bases_S19052C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S836C29,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19052C8[];
Class_Descriptor cd_S19052C8 = {  "S19052C8", // class name
  bases_S19052C8, 1,
  0, // no vftv
  0, //no vtt
  1, // object size
  NSPAIRA(_ZTI8S19052C8),ABISELECT(24,12), //typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19052C2_nt  : S19052C3 , S19052C6 , S19052C8 {
  virtual  ~S19052C2_nt(); // _ZN11S19052C2_ntD2Ev
  S19052C2_nt(); // tgen
};
//SIG(-1 S19052C2_nt) C1{ BC2{ BC3{ v1} BC4{ BC3} vd} BC5{ VBC6{ m}} BC7{ BC8{ m}} vd}


 S19052C2_nt ::~S19052C2_nt(){ note_dtor("S19052C2_nt", this);}
S19052C2_nt ::S19052C2_nt(){ note_ctor("S19052C2_nt", this);} // tgen

//skip512 S19052C2_nt

#else // __cplusplus

extern void _ZN11S19052C2_ntC1Ev();
extern void _ZN11S19052C2_ntD2Ev();
Name_Map name_map_S19052C2_nt[] = {
  NSPAIR(_ZN11S19052C2_ntC1Ev),
  NSPAIR(_ZN11S19052C2_ntD2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19052C4;
extern VTBL_ENTRY _ZTI8S19052C4[];
extern  VTBL_ENTRY _ZTV8S19052C4[];
extern Class_Descriptor cd_S19052C4;
extern VTBL_ENTRY _ZTI8S19052C4[];
extern  VTBL_ENTRY _ZTV8S19052C4[];
extern Class_Descriptor cd_S19052C5;
extern VTBL_ENTRY _ZTI8S19052C5[];
extern  VTBL_ENTRY _ZTV8S19052C5[];
extern Class_Descriptor cd_S19052C3;
extern VTBL_ENTRY _ZTI8S19052C3[];
extern  VTBL_ENTRY _ZTV8S19052C3[];
extern Class_Descriptor cd_S836C39;
extern VTBL_ENTRY _ZTI7S836C39[];
extern Class_Descriptor cd_S19052C6;
extern VTBL_ENTRY _ZTI8S19052C6[];
extern  VTBL_ENTRY _ZTV8S19052C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19052C6[];
extern Class_Descriptor cd_S836C29;
extern VTBL_ENTRY _ZTI7S836C29[];
extern Class_Descriptor cd_S19052C8;
extern VTBL_ENTRY _ZTI8S19052C8[];
static Base_Class bases_S19052C2_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19052C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S19052C4,    ABISELECT(8,4), //bcp->offset
    6, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S19052C5,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S19052C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S836C39,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S19052C6,    ABISELECT(16,8), //bcp->offset
    9, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S836C29,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S19052C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI11S19052C2_nt[];
extern void _ZN8S19052C42v2Ev();
extern void _ZN11S19052C2_ntD1Ev();
extern void _ZN11S19052C2_ntD0Ev();
extern void _ZN8S19052C42v2Ev();
static  VTBL_ENTRY vtc_S19052C2_nt[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI11S19052C2_nt[0]),
  (VTBL_ENTRY)&_ZN8S19052C42v2Ev,
  (VTBL_ENTRY)&_ZN11S19052C2_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S19052C2_ntD0Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI11S19052C2_nt[0]),
  (VTBL_ENTRY)&_ZN8S19052C42v2Ev,
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI11S19052C2_nt[0]),
};
extern VTBL_ENTRY _ZTV11S19052C2_nt[];
static  VTBL_ENTRY _tg__ZTV8S19052C6__11S19052C2_nt[] = {
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI8S19052C6[0]),
};
static  VTT_ENTRY vtt_S19052C2_nt[] = {
  {&(_ZTV11S19052C2_nt[3]),  3,12},
  {&(_tg__ZTV8S19052C6__11S19052C2_nt[3]),  3,3},
  {&(_ZTV11S19052C2_nt[12]),  12,12},
};
extern VTBL_ENTRY _ZTI11S19052C2_nt[];
VTBL_ENTRY *P__ZTI11S19052C2_nt = _ZTI11S19052C2_nt; 
extern  VTBL_ENTRY _ZTV11S19052C2_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S19052C2_nt[];
Class_Descriptor cd_S19052C2_nt = {  "S19052C2_nt", // class name
  bases_S19052C2_nt, 8,
  &(vtc_S19052C2_nt[0]), // expected_vtbl_contents
  &(vtt_S19052C2_nt[0]), // expected_vtt_contents
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI11S19052C2_nt),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV11S19052C2_nt),12, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT11S19052C2_nt),3, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19052C1  : virtual S19052C2_nt , S19669C6_nt , virtual S19052C6 {
  virtual void  v1(); // _ZN8S19052C12v1Ev
  ~S19052C1(); // tgen
  S19052C1(); // tgen
};
//SIG(1 S19052C1) C1{ VBC2{ BC3{ BC4{ v2} BC5{ BC4} vd} BC6{ VBC7{ m}} BC8{ BC9{ m}} vd} BC10{ m FC11{ vd m Fc:7}[6]} VBC6 v1}


void  S19052C1 ::v1(){vfunc_called(this, "_ZN8S19052C12v1Ev");}
S19052C1 ::~S19052C1(){ note_dtor("S19052C1", this);} // tgen
S19052C1 ::S19052C1(){ note_ctor("S19052C1", this);} // tgen

static void Test_S19052C1()
{
  extern Class_Descriptor cd_S19052C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[17];
    init_test(&cd_S19052C1, buf);
    S19052C1 *dp, &lv = *(dp=new (buf) S19052C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(128,64), "sizeof(S19052C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19052C1)");
    /*is_ambiguous_... S19052C3::S19052C4 */ AMB_check_base_class_offset(lv, (S19052C4*)(S19052C3*)(S19052C2_nt*), ABISELECT(104,52), "S19052C1");
    check_base_class_offset(lv, (S19052C4*)(S19052C5*)(S19052C3*)(S19052C2_nt*), ABISELECT(112,56), "S19052C1");
    check_base_class_offset(lv, (S19052C5*)(S19052C3*)(S19052C2_nt*), ABISELECT(112,56), "S19052C1");
    check_base_class_offset(lv, (S19052C3*)(S19052C2_nt*), ABISELECT(104,52), "S19052C1");
    check_base_class_offset(lv, (S836C39*)(S19052C6*)(S19052C2_nt*), 0, "S19052C1");
    /*is_ambiguous_... S19052C1::S19052C6 */ AMB_check_base_class_offset(lv, (S836C39*)(S19052C6*), 0, "S19052C1");
    check_base_class_offset(lv, (S19052C6*)(S19052C2_nt*), ABISELECT(120,60), "S19052C1");
    check_base_class_offset(lv, (S836C29*)(S19052C8*)(S19052C2_nt*), ABISELECT(104,52), "S19052C1");
    check_base_class_offset(lv, (S19052C8*)(S19052C2_nt*), ABISELECT(104,52), "S19052C1");
    check_base_class_offset(lv, (S19052C2_nt*), ABISELECT(104,52), "S19052C1");
    check_base_class_offset(lv, (S19669C6_nt*), ABISELECT(8,4), "S19052C1");
    /*is_ambiguous_... S19052C1::S19052C6 */ AMB_check_base_class_offset(lv, (S19052C6*), 0, "S19052C1");
    test_class_info(&lv, &cd_S19052C1);
    dp->~S19052C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19052C1(Test_S19052C1, "S19052C1", ABISELECT(128,64));

#else // __cplusplus

extern void _ZN8S19052C1C1Ev();
extern void _ZN8S19052C1D1Ev();
Name_Map name_map_S19052C1[] = {
  NSPAIR(_ZN8S19052C1C1Ev),
  NSPAIR(_ZN8S19052C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19052C4;
extern VTBL_ENTRY _ZTI8S19052C4[];
extern  VTBL_ENTRY _ZTV8S19052C4[];
extern Class_Descriptor cd_S19052C4;
extern VTBL_ENTRY _ZTI8S19052C4[];
extern  VTBL_ENTRY _ZTV8S19052C4[];
extern Class_Descriptor cd_S19052C5;
extern VTBL_ENTRY _ZTI8S19052C5[];
extern  VTBL_ENTRY _ZTV8S19052C5[];
extern Class_Descriptor cd_S19052C3;
extern VTBL_ENTRY _ZTI8S19052C3[];
extern  VTBL_ENTRY _ZTV8S19052C3[];
extern Class_Descriptor cd_S836C39;
extern VTBL_ENTRY _ZTI7S836C39[];
extern Class_Descriptor cd_S19052C6;
extern VTBL_ENTRY _ZTI8S19052C6[];
extern  VTBL_ENTRY _ZTV8S19052C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19052C6[];
extern Class_Descriptor cd_S836C29;
extern VTBL_ENTRY _ZTI7S836C29[];
extern Class_Descriptor cd_S19052C8;
extern VTBL_ENTRY _ZTI8S19052C8[];
extern Class_Descriptor cd_S19052C2_nt;
extern VTBL_ENTRY _ZTI11S19052C2_nt[];
extern  VTBL_ENTRY _ZTV11S19052C2_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S19052C2_nt[];
extern Class_Descriptor cd_S19669C6_nt;
extern VTBL_ENTRY _ZTI11S19669C6_nt[];
extern Class_Descriptor cd_S19052C6;
extern VTBL_ENTRY _ZTI8S19052C6[];
extern  VTBL_ENTRY _ZTV8S19052C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19052C6[];
static Base_Class bases_S19052C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19052C4,    ABISELECT(104,52), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S19052C4,    ABISELECT(112,56), //bcp->offset
    16, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S19052C5,    ABISELECT(112,56), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S19052C3,    ABISELECT(104,52), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S836C39,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S19052C6,    ABISELECT(120,60), //bcp->offset
    19, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S836C29,    ABISELECT(104,52), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S19052C8,    ABISELECT(104,52), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S19052C2_nt,    ABISELECT(104,52), //bcp->offset
    8, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19669C6_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19052C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19052C1[];
extern void _ZN8S19052C12v1Ev();
extern void _ZN8S19052C1D1Ev();
extern void _ZN8S19052C1D0Ev();
extern void _ZN8S19052C42v2Ev();
extern void ABISELECT(_ZTv0_n40_N8S19052C1D1Ev,_ZTv0_n20_N8S19052C1D1Ev)();
extern void ABISELECT(_ZThn104_N8S19052C1D1Ev,_ZThn52_N8S19052C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19052C1D0Ev,_ZTv0_n20_N8S19052C1D0Ev)();
extern void ABISELECT(_ZThn104_N8S19052C1D0Ev,_ZThn52_N8S19052C1D0Ev)() __attribute__((weak));
extern void _ZN8S19052C42v2Ev();
static  VTBL_ENTRY vtc_S19052C1[] = {
  0,
  ABISELECT(104,52),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19052C1[0]),
  (VTBL_ENTRY)&_ZN8S19052C12v1Ev,
  (VTBL_ENTRY)&_ZN8S19052C1D1Ev,
  (VTBL_ENTRY)&_ZN8S19052C1D0Ev,
  ABISELECT(-104,-52),
  0,
  ABISELECT(-104,-52),
  ABISELECT(-104,-52),
  (VTBL_ENTRY)&(_ZTI8S19052C1[0]),
  (VTBL_ENTRY)&_ZN8S19052C42v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19052C1D1Ev,_ZTv0_n20_N8S19052C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19052C1D0Ev,_ZTv0_n20_N8S19052C1D0Ev),
  ABISELECT(-112,-56),
  (VTBL_ENTRY)&(_ZTI8S19052C1[0]),
  (VTBL_ENTRY)&_ZN8S19052C42v2Ev,
  ABISELECT(-120,-60),
  ABISELECT(-120,-60),
  (VTBL_ENTRY)&(_ZTI8S19052C1[0]),
};
extern VTBL_ENTRY _ZTV8S19052C1[];
extern void _ZN8S19052C42v2Ev();
extern void _ZN11S19052C2_ntD1Ev();
extern void _ZN11S19052C2_ntD0Ev();
static  VTBL_ENTRY _tg__ZTV11S19052C2_nt__8S19052C1[] = {
  ABISELECT(-104,-52),
  0,
  (VTBL_ENTRY)&(_ZTI11S19052C2_nt[0]),
  (VTBL_ENTRY)&_ZN8S19052C42v2Ev,
  (VTBL_ENTRY)&_ZN11S19052C2_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S19052C2_ntD0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19052C611S19052C2_nt__8S19052C1[] = {
  ABISELECT(-120,-60),
  0,
  (VTBL_ENTRY)&(_ZTI8S19052C6[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19052C6__11S19052C2_nt__8S19052C1[] = {
  ABISELECT(-120,-60),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI11S19052C2_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19052C6__A1__8S19052C1[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19052C6[0]),
};
static  VTT_ENTRY vtt_S19052C1[] = {
  {&(_ZTV8S19052C1[5]),  5,22},
  {&(_ZTV8S19052C1[13]),  13,22},
  {&(_ZTV8S19052C1[18]),  18,22},
  {&(_ZTV8S19052C1[22]),  22,22},
  {&(_ZTV8S19052C1[5]),  5,22},
  {&(_tg__ZTV11S19052C2_nt__8S19052C1[3]),  3,6},
  {&(_tg__ZTV8S19052C611S19052C2_nt__8S19052C1[3]),  3,3},
  {&(_tg__ZTV8S19052C6__11S19052C2_nt__8S19052C1[3]),  3,3},
  {&(_tg__ZTV8S19052C6__A1__8S19052C1[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S19052C1[];
extern  VTBL_ENTRY _ZTV8S19052C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19052C1[];
static VTBL_ENTRY alt_thunk_names43[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19052C1D0Ev,_ZTv0_n20_N8S19052C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N8S19052C1D0Ev,_ZThn52_N8S19052C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19052C1D1Ev,_ZTv0_n20_N8S19052C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N8S19052C1D1Ev,_ZThn52_N8S19052C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19052C1 = {  "S19052C1", // class name
  bases_S19052C1, 11,
  &(vtc_S19052C1[0]), // expected_vtbl_contents
  &(vtt_S19052C1[0]), // expected_vtt_contents
  ABISELECT(128,64), // object size
  NSPAIRA(_ZTI8S19052C1),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S19052C1),22, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19052C1),9, //virtual table table var
  7, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names43,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S10068C2  {
  virtual  ~S10068C2(); // _ZN8S10068C2D1Ev
  virtual void  v6(); // _ZN8S10068C22v6Ev
  virtual void  v7(); // _ZN8S10068C22v7Ev
  virtual void  v8(); // _ZN8S10068C22v8Ev
  virtual void  v9(); // _ZN8S10068C22v9Ev
  virtual void  v10(); // _ZN8S10068C23v10Ev
  virtual void  v11(); // _ZN8S10068C23v11Ev
  virtual void  v12(); // _ZN8S10068C23v12Ev
  S10068C2(); // tgen
};
//SIG(-1 S10068C2) C1{ vd v1 v2 v3 v4 v5 v6 v7}


 S10068C2 ::~S10068C2(){ note_dtor("S10068C2", this);}
void  S10068C2 ::v6(){vfunc_called(this, "_ZN8S10068C22v6Ev");}
void  S10068C2 ::v7(){vfunc_called(this, "_ZN8S10068C22v7Ev");}
void  S10068C2 ::v8(){vfunc_called(this, "_ZN8S10068C22v8Ev");}
void  S10068C2 ::v9(){vfunc_called(this, "_ZN8S10068C22v9Ev");}
void  S10068C2 ::v10(){vfunc_called(this, "_ZN8S10068C23v10Ev");}
void  S10068C2 ::v11(){vfunc_called(this, "_ZN8S10068C23v11Ev");}
void  S10068C2 ::v12(){vfunc_called(this, "_ZN8S10068C23v12Ev");}
S10068C2 ::S10068C2(){ note_ctor("S10068C2", this);} // tgen

static void Test_S10068C2()
{
  extern Class_Descriptor cd_S10068C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S10068C2, buf);
    S10068C2 *dp, &lv = *(dp=new (buf) S10068C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S10068C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10068C2)");
    test_class_info(&lv, &cd_S10068C2);
    dp->~S10068C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10068C2(Test_S10068C2, "S10068C2", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S10068C2C1Ev();
extern void _ZN8S10068C2D1Ev();
Name_Map name_map_S10068C2[] = {
  NSPAIR(_ZN8S10068C2C1Ev),
  NSPAIR(_ZN8S10068C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S10068C2[];
extern void _ZN8S10068C2D1Ev();
extern void _ZN8S10068C2D0Ev();
extern void _ZN8S10068C22v6Ev();
extern void _ZN8S10068C22v7Ev();
extern void _ZN8S10068C22v8Ev();
extern void _ZN8S10068C22v9Ev();
extern void _ZN8S10068C23v10Ev();
extern void _ZN8S10068C23v11Ev();
extern void _ZN8S10068C23v12Ev();
static  VTBL_ENTRY vtc_S10068C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S10068C2[0]),
  (VTBL_ENTRY)&_ZN8S10068C2D1Ev,
  (VTBL_ENTRY)&_ZN8S10068C2D0Ev,
  (VTBL_ENTRY)&_ZN8S10068C22v6Ev,
  (VTBL_ENTRY)&_ZN8S10068C22v7Ev,
  (VTBL_ENTRY)&_ZN8S10068C22v8Ev,
  (VTBL_ENTRY)&_ZN8S10068C22v9Ev,
  (VTBL_ENTRY)&_ZN8S10068C23v10Ev,
  (VTBL_ENTRY)&_ZN8S10068C23v11Ev,
  (VTBL_ENTRY)&_ZN8S10068C23v12Ev,
};
extern VTBL_ENTRY _ZTI8S10068C2[];
extern  VTBL_ENTRY _ZTV8S10068C2[];
Class_Descriptor cd_S10068C2 = {  "S10068C2", // class name
  0,0,//no base classes
  &(vtc_S10068C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S10068C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S10068C2),11, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S10068C3_nt  {
  void *s10068c3f0;
};
//SIG(-1 S10068C3_nt) C1{ Fp}



//skip512 S10068C3_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S10068C1  : S10068C2 {
  void *s10068c1f0[2];
  ::S10068C3_nt s10068c1f1[8];
  int s10068c1f2;
  char s10068c1f3;
  void *s10068c1f4;
  int s10068c1f5;
  void *s10068c1f6[8];
  virtual  ~S10068C1(); // _ZN8S10068C1D1Ev
  virtual void  v1(); // _ZN8S10068C12v1Ev
  virtual void  v2(); // _ZN8S10068C12v2Ev
  virtual void  v3(); // _ZN8S10068C12v3Ev
  virtual void  v4(); // _ZN8S10068C12v4Ev
  virtual void  v5(); // _ZN8S10068C12v5Ev
  S10068C1(); // tgen
};
//SIG(1 S10068C1) C1{ BC2{ vd v6 v7 v8 v9 v10 v11 v12} vd v1 v2 v3 v4 v5 Fp[2] FC3{ Fp}[8] Fi Fc Fp Fi Fp[8]}


 S10068C1 ::~S10068C1(){ note_dtor("S10068C1", this);}
void  S10068C1 ::v1(){vfunc_called(this, "_ZN8S10068C12v1Ev");}
void  S10068C1 ::v2(){vfunc_called(this, "_ZN8S10068C12v2Ev");}
void  S10068C1 ::v3(){vfunc_called(this, "_ZN8S10068C12v3Ev");}
void  S10068C1 ::v4(){vfunc_called(this, "_ZN8S10068C12v4Ev");}
void  S10068C1 ::v5(){vfunc_called(this, "_ZN8S10068C12v5Ev");}
S10068C1 ::S10068C1(){ note_ctor("S10068C1", this);} // tgen

static void Test_S10068C1()
{
  extern Class_Descriptor cd_S10068C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(23,24)];
    init_test(&cd_S10068C1, buf);
    S10068C1 *dp, &lv = *(dp=new (buf) S10068C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(176,92), "sizeof(S10068C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10068C1)");
    check_base_class_offset(lv, (S10068C2*), 0, "S10068C1");
    check_field_offset(lv, s10068c1f0, ABISELECT(8,4), "S10068C1.s10068c1f0");
    check_field_offset(lv, s10068c1f1, ABISELECT(24,12), "S10068C1.s10068c1f1");
    check_field_offset(lv, s10068c1f2, ABISELECT(88,44), "S10068C1.s10068c1f2");
    check_field_offset(lv, s10068c1f3, ABISELECT(92,48), "S10068C1.s10068c1f3");
    check_field_offset(lv, s10068c1f4, ABISELECT(96,52), "S10068C1.s10068c1f4");
    check_field_offset(lv, s10068c1f5, ABISELECT(104,56), "S10068C1.s10068c1f5");
    check_field_offset(lv, s10068c1f6, ABISELECT(112,60), "S10068C1.s10068c1f6");
    test_class_info(&lv, &cd_S10068C1);
    dp->~S10068C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10068C1(Test_S10068C1, "S10068C1", ABISELECT(176,92));

#else // __cplusplus

extern void _ZN8S10068C1C1Ev();
extern void _ZN8S10068C1D1Ev();
Name_Map name_map_S10068C1[] = {
  NSPAIR(_ZN8S10068C1C1Ev),
  NSPAIR(_ZN8S10068C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10068C2;
extern VTBL_ENTRY _ZTI8S10068C2[];
extern  VTBL_ENTRY _ZTV8S10068C2[];
static Base_Class bases_S10068C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10068C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S10068C1[];
extern void _ZN8S10068C1D1Ev();
extern void _ZN8S10068C1D0Ev();
extern void _ZN8S10068C22v6Ev();
extern void _ZN8S10068C22v7Ev();
extern void _ZN8S10068C22v8Ev();
extern void _ZN8S10068C22v9Ev();
extern void _ZN8S10068C23v10Ev();
extern void _ZN8S10068C23v11Ev();
extern void _ZN8S10068C23v12Ev();
extern void _ZN8S10068C12v1Ev();
extern void _ZN8S10068C12v2Ev();
extern void _ZN8S10068C12v3Ev();
extern void _ZN8S10068C12v4Ev();
extern void _ZN8S10068C12v5Ev();
static  VTBL_ENTRY vtc_S10068C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S10068C1[0]),
  (VTBL_ENTRY)&_ZN8S10068C1D1Ev,
  (VTBL_ENTRY)&_ZN8S10068C1D0Ev,
  (VTBL_ENTRY)&_ZN8S10068C22v6Ev,
  (VTBL_ENTRY)&_ZN8S10068C22v7Ev,
  (VTBL_ENTRY)&_ZN8S10068C22v8Ev,
  (VTBL_ENTRY)&_ZN8S10068C22v9Ev,
  (VTBL_ENTRY)&_ZN8S10068C23v10Ev,
  (VTBL_ENTRY)&_ZN8S10068C23v11Ev,
  (VTBL_ENTRY)&_ZN8S10068C23v12Ev,
  (VTBL_ENTRY)&_ZN8S10068C12v1Ev,
  (VTBL_ENTRY)&_ZN8S10068C12v2Ev,
  (VTBL_ENTRY)&_ZN8S10068C12v3Ev,
  (VTBL_ENTRY)&_ZN8S10068C12v4Ev,
  (VTBL_ENTRY)&_ZN8S10068C12v5Ev,
};
extern VTBL_ENTRY _ZTI8S10068C1[];
extern  VTBL_ENTRY _ZTV8S10068C1[];
Class_Descriptor cd_S10068C1 = {  "S10068C1", // class name
  bases_S10068C1, 1,
  &(vtc_S10068C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(176,92), // object size
  NSPAIRA(_ZTI8S10068C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S10068C1),16, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S15907C6_nt  {
  void *s15907c6f0;
  int s15907c6f1[2];
  ::S4162C5_nt s15907c6f2;
  void  mf15907c6(); // _ZN11S15907C6_nt9mf15907c6Ev
};
//SIG(-1 S15907C6_nt) C1{ m Fp Fi[2] FC2{ m Fp}}


void  S15907C6_nt ::mf15907c6(){}

//skip512 S15907C6_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S15907C2  {
  ::S8713C5_nt s15907c2f0;
  ::S836C21_nt s15907c2f1;
  ::S15907C6_nt s15907c2f2;
  int s15907c2f3[2];
  void  mf15907c2(); // _ZN8S15907C29mf15907c2Ev
};
//SIG(-1 S15907C2) C1{ m FC2{ m Fs[6] Fi[2] Fc Fs} FC3{ m Fp Fi FC4{ m}} FC5{ m Fp Fi[2] FC6{ m Fp}} Fi[2]}


void  S15907C2 ::mf15907c2(){}

static void Test_S15907C2()
{
  {
    init_simple_test("S15907C2");
    S15907C2 lv;
    check2(sizeof(lv), ABISELECT(72,60), "sizeof(S15907C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S15907C2)");
    check_field_offset(lv, s15907c2f0, 0, "S15907C2.s15907c2f0");
    check_field_offset(lv, s15907c2f1, 24, "S15907C2.s15907c2f1");
    check_field_offset(lv, s15907c2f2, ABISELECT(40,36), "S15907C2.s15907c2f2");
    check_field_offset(lv, s15907c2f3, ABISELECT(64,52), "S15907C2.s15907c2f3");
  }
}
static Arrange_To_Call_Me vS15907C2(Test_S15907C2, "S15907C2", ABISELECT(72,60));

#else // __cplusplus

Class_Descriptor cd_S15907C2 = {  "S15907C2", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  ABISELECT(72,60), // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S15907C1  {
  ::S15907C2 s15907c1f0;
  void  mf15907c1(); // _ZN8S15907C19mf15907c1Ev
};
//SIG(1 S15907C1) C1{ m FC2{ m FC3{ m Fs[6] Fi[2] Fc Fs} FC4{ m Fp Fi FC5{ m}} FC6{ m Fp Fi[2] FC7{ m Fp}} Fi[2]}}


void  S15907C1 ::mf15907c1(){}

static void Test_S15907C1()
{
  {
    init_simple_test("S15907C1");
    S15907C1 lv;
    check2(sizeof(lv), ABISELECT(72,60), "sizeof(S15907C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S15907C1)");
    check_field_offset(lv, s15907c1f0, 0, "S15907C1.s15907c1f0");
  }
}
static Arrange_To_Call_Me vS15907C1(Test_S15907C1, "S15907C1", ABISELECT(72,60));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S12022C1  {
  ::S15907C2 s12022c1f0;
};
//SIG(1 S12022C1) C1{ FC2{ m FC3{ m Fs[6] Fi[2] Fc Fs} FC4{ m Fp Fi FC5{ m}} FC6{ m Fp Fi[2] FC7{ m Fp}} Fi[2]}}



static void Test_S12022C1()
{
  {
    init_simple_test("S12022C1");
    S12022C1 lv;
    check2(sizeof(lv), ABISELECT(72,60), "sizeof(S12022C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S12022C1)");
    check_field_offset(lv, s12022c1f0, 0, "S12022C1.s12022c1f0");
  }
}
static Arrange_To_Call_Me vS12022C1(Test_S12022C1, "S12022C1", ABISELECT(72,60));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S5687C1  : S15907C2 {
};
//SIG(1 S5687C1) C1{ BC2{ m FC3{ m Fs[6] Fi[2] Fc Fs} FC4{ m Fp Fi FC5{ m}} FC6{ m Fp Fi[2] FC7{ m Fp}} Fi[2]}}



static void Test_S5687C1()
{
  extern Class_Descriptor cd_S5687C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,16)];
    init_test(&cd_S5687C1, buf);
    S5687C1 &lv = *(new (buf) S5687C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,60), "sizeof(S5687C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5687C1)");
    check_base_class_offset(lv, (S15907C2*), 0, "S5687C1");
    test_class_info(&lv, &cd_S5687C1);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5687C1(Test_S5687C1, "S5687C1", ABISELECT(72,60));

#else // __cplusplus

extern Class_Descriptor cd_S15907C2;
static Base_Class bases_S5687C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S15907C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
Class_Descriptor cd_S5687C1 = {  "S5687C1", // class name
  bases_S5687C1, 1,
  0, // no vftv
  0, //no vtt
  ABISELECT(72,60), // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S8034C1  : S8035C2 {
  ::S8035C4 s8034c1f0;
  ~S8034C1(); // tgen
  S8034C1(); // tgen
};
//SIG(1 S8034C1) C1{ BC2{ vd m Fi Fp Fi Fc Fs FC3{ m Fp Fs Fc}} FC4{ m Fi FC5{ BC6{ m Fp Fi} FC7{ Fs[32]}}}}


S8034C1 ::~S8034C1(){ note_dtor("S8034C1", this);} // tgen
S8034C1 ::S8034C1(){ note_ctor("S8034C1", this);} // tgen

static void Test_S8034C1()
{
  extern Class_Descriptor cd_S8034C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(18,27)];
    init_test(&cd_S8034C1, buf);
    S8034C1 *dp, &lv = *(dp=new (buf) S8034C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(136,104), "sizeof(S8034C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8034C1)");
    check_base_class_offset(lv, (S8035C2*), 0, "S8034C1");
    check_field_offset(lv, s8034c1f0, ABISELECT(48,28), "S8034C1.s8034c1f0");
    test_class_info(&lv, &cd_S8034C1);
    dp->~S8034C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8034C1(Test_S8034C1, "S8034C1", ABISELECT(136,104));

#else // __cplusplus

extern void _ZN7S8034C1C1Ev();
extern void _ZN7S8034C1D1Ev();
Name_Map name_map_S8034C1[] = {
  NSPAIR(_ZN7S8034C1C1Ev),
  NSPAIR(_ZN7S8034C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S8035C2;
extern VTBL_ENTRY _ZTI7S8035C2[];
extern  VTBL_ENTRY _ZTV7S8035C2[];
static Base_Class bases_S8034C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S8035C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S8034C1[];
extern void _ZN7S8034C1D1Ev();
extern void _ZN7S8034C1D0Ev();
static  VTBL_ENTRY vtc_S8034C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8034C1[0]),
  (VTBL_ENTRY)&_ZN7S8034C1D1Ev,
  (VTBL_ENTRY)&_ZN7S8034C1D0Ev,
};
extern VTBL_ENTRY _ZTI7S8034C1[];
extern  VTBL_ENTRY _ZTV7S8034C1[];
Class_Descriptor cd_S8034C1 = {  "S8034C1", // class name
  bases_S8034C1, 1,
  &(vtc_S8034C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(136,104), // object size
  NSPAIRA(_ZTI7S8034C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S8034C1),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S947C4  : S20956C14_nt {
  virtual  ~S947C4(); // _ZN6S947C4D1Ev
  virtual void  v4(); // _ZN6S947C42v4Ev
  virtual void  v5(); // _ZN6S947C42v5Ev
  virtual void  v6(); // _ZN6S947C42v6Ev
  S947C4(); // tgen
};
//SIG(-1 S947C4) C1{ BC2{} vd v1 v2 v3}


 S947C4 ::~S947C4(){ note_dtor("S947C4", this);}
void  S947C4 ::v4(){vfunc_called(this, "_ZN6S947C42v4Ev");}
void  S947C4 ::v5(){vfunc_called(this, "_ZN6S947C42v5Ev");}
void  S947C4 ::v6(){vfunc_called(this, "_ZN6S947C42v6Ev");}
S947C4 ::S947C4(){ note_ctor("S947C4", this);} // tgen

static void Test_S947C4()
{
  extern Class_Descriptor cd_S947C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S947C4, buf);
    S947C4 *dp, &lv = *(dp=new (buf) S947C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S947C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S947C4)");
    check_base_class_offset(lv, (S20956C14_nt*), 0, "S947C4");
    test_class_info(&lv, &cd_S947C4);
    dp->~S947C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS947C4(Test_S947C4, "S947C4", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN6S947C4C1Ev();
extern void _ZN6S947C4D1Ev();
Name_Map name_map_S947C4[] = {
  NSPAIR(_ZN6S947C4C1Ev),
  NSPAIR(_ZN6S947C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20956C14_nt;
extern VTBL_ENTRY _ZTI12S20956C14_nt[];
static Base_Class bases_S947C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20956C14_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S947C4[];
extern void _ZN6S947C4D1Ev();
extern void _ZN6S947C4D0Ev();
extern void _ZN6S947C42v4Ev();
extern void _ZN6S947C42v5Ev();
extern void _ZN6S947C42v6Ev();
static  VTBL_ENTRY vtc_S947C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S947C4[0]),
  (VTBL_ENTRY)&_ZN6S947C4D1Ev,
  (VTBL_ENTRY)&_ZN6S947C4D0Ev,
  (VTBL_ENTRY)&_ZN6S947C42v4Ev,
  (VTBL_ENTRY)&_ZN6S947C42v5Ev,
  (VTBL_ENTRY)&_ZN6S947C42v6Ev,
};
extern VTBL_ENTRY _ZTI6S947C4[];
extern  VTBL_ENTRY _ZTV6S947C4[];
Class_Descriptor cd_S947C4 = {  "S947C4", // class name
  bases_S947C4, 1,
  &(vtc_S947C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI6S947C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S947C4),7, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S947C3  : S947C4 {
  virtual  ~S947C3(); // _ZN6S947C3D1Ev
  virtual void  v7(); // _ZN6S947C32v7Ev
  virtual void  v8(); // _ZN6S947C32v8Ev
  virtual void  v9(); // _ZN6S947C32v9Ev
  virtual void  v10(); // _ZN6S947C33v10Ev
  S947C3(); // tgen
};
//SIG(-1 S947C3) C1{ BC2{ BC3{} vd v5 v6 v7} vd v1 v2 v3 v4}


 S947C3 ::~S947C3(){ note_dtor("S947C3", this);}
void  S947C3 ::v7(){vfunc_called(this, "_ZN6S947C32v7Ev");}
void  S947C3 ::v8(){vfunc_called(this, "_ZN6S947C32v8Ev");}
void  S947C3 ::v9(){vfunc_called(this, "_ZN6S947C32v9Ev");}
void  S947C3 ::v10(){vfunc_called(this, "_ZN6S947C33v10Ev");}
S947C3 ::S947C3(){ note_ctor("S947C3", this);} // tgen

static void Test_S947C3()
{
  extern Class_Descriptor cd_S947C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S947C3, buf);
    S947C3 *dp, &lv = *(dp=new (buf) S947C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S947C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S947C3)");
    check_base_class_offset(lv, (S20956C14_nt*)(S947C4*), 0, "S947C3");
    check_base_class_offset(lv, (S947C4*), 0, "S947C3");
    test_class_info(&lv, &cd_S947C3);
    dp->~S947C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS947C3(Test_S947C3, "S947C3", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN6S947C3C1Ev();
extern void _ZN6S947C3D1Ev();
Name_Map name_map_S947C3[] = {
  NSPAIR(_ZN6S947C3C1Ev),
  NSPAIR(_ZN6S947C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20956C14_nt;
extern VTBL_ENTRY _ZTI12S20956C14_nt[];
extern Class_Descriptor cd_S947C4;
extern VTBL_ENTRY _ZTI6S947C4[];
extern  VTBL_ENTRY _ZTV6S947C4[];
static Base_Class bases_S947C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20956C14_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S947C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S947C3[];
extern void _ZN6S947C3D1Ev();
extern void _ZN6S947C3D0Ev();
extern void _ZN6S947C42v4Ev();
extern void _ZN6S947C42v5Ev();
extern void _ZN6S947C42v6Ev();
extern void _ZN6S947C32v7Ev();
extern void _ZN6S947C32v8Ev();
extern void _ZN6S947C32v9Ev();
extern void _ZN6S947C33v10Ev();
static  VTBL_ENTRY vtc_S947C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S947C3[0]),
  (VTBL_ENTRY)&_ZN6S947C3D1Ev,
  (VTBL_ENTRY)&_ZN6S947C3D0Ev,
  (VTBL_ENTRY)&_ZN6S947C42v4Ev,
  (VTBL_ENTRY)&_ZN6S947C42v5Ev,
  (VTBL_ENTRY)&_ZN6S947C42v6Ev,
  (VTBL_ENTRY)&_ZN6S947C32v7Ev,
  (VTBL_ENTRY)&_ZN6S947C32v8Ev,
  (VTBL_ENTRY)&_ZN6S947C32v9Ev,
  (VTBL_ENTRY)&_ZN6S947C33v10Ev,
};
extern VTBL_ENTRY _ZTI6S947C3[];
extern  VTBL_ENTRY _ZTV6S947C3[];
Class_Descriptor cd_S947C3 = {  "S947C3", // class name
  bases_S947C3, 2,
  &(vtc_S947C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI6S947C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S947C3),11, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S947C2  : S947C3 {
  virtual  ~S947C2(); // _ZN6S947C2D1Ev
  virtual void  v11(); // _ZN6S947C23v11Ev
  virtual void  v12(); // _ZN6S947C23v12Ev
  virtual void  v13(); // _ZN6S947C23v13Ev
  virtual void  v14(); // _ZN6S947C23v14Ev
  S947C2(); // tgen
};
//SIG(-1 S947C2) C1{ BC2{ BC3{ BC4{} vd v5 v6 v7} vd v8 v9 v10 v11} vd v1 v2 v3 v4}


 S947C2 ::~S947C2(){ note_dtor("S947C2", this);}
void  S947C2 ::v11(){vfunc_called(this, "_ZN6S947C23v11Ev");}
void  S947C2 ::v12(){vfunc_called(this, "_ZN6S947C23v12Ev");}
void  S947C2 ::v13(){vfunc_called(this, "_ZN6S947C23v13Ev");}
void  S947C2 ::v14(){vfunc_called(this, "_ZN6S947C23v14Ev");}
S947C2 ::S947C2(){ note_ctor("S947C2", this);} // tgen

static void Test_S947C2()
{
  extern Class_Descriptor cd_S947C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S947C2, buf);
    S947C2 *dp, &lv = *(dp=new (buf) S947C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S947C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S947C2)");
    check_base_class_offset(lv, (S20956C14_nt*)(S947C4*)(S947C3*), 0, "S947C2");
    check_base_class_offset(lv, (S947C4*)(S947C3*), 0, "S947C2");
    check_base_class_offset(lv, (S947C3*), 0, "S947C2");
    test_class_info(&lv, &cd_S947C2);
    dp->~S947C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS947C2(Test_S947C2, "S947C2", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN6S947C2C1Ev();
extern void _ZN6S947C2D1Ev();
Name_Map name_map_S947C2[] = {
  NSPAIR(_ZN6S947C2C1Ev),
  NSPAIR(_ZN6S947C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20956C14_nt;
extern VTBL_ENTRY _ZTI12S20956C14_nt[];
extern Class_Descriptor cd_S947C4;
extern VTBL_ENTRY _ZTI6S947C4[];
extern  VTBL_ENTRY _ZTV6S947C4[];
extern Class_Descriptor cd_S947C3;
extern VTBL_ENTRY _ZTI6S947C3[];
extern  VTBL_ENTRY _ZTV6S947C3[];
static Base_Class bases_S947C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20956C14_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S947C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S947C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S947C2[];
extern void _ZN6S947C2D1Ev();
extern void _ZN6S947C2D0Ev();
extern void _ZN6S947C42v4Ev();
extern void _ZN6S947C42v5Ev();
extern void _ZN6S947C42v6Ev();
extern void _ZN6S947C32v7Ev();
extern void _ZN6S947C32v8Ev();
extern void _ZN6S947C32v9Ev();
extern void _ZN6S947C33v10Ev();
extern void _ZN6S947C23v11Ev();
extern void _ZN6S947C23v12Ev();
extern void _ZN6S947C23v13Ev();
extern void _ZN6S947C23v14Ev();
static  VTBL_ENTRY vtc_S947C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S947C2[0]),
  (VTBL_ENTRY)&_ZN6S947C2D1Ev,
  (VTBL_ENTRY)&_ZN6S947C2D0Ev,
  (VTBL_ENTRY)&_ZN6S947C42v4Ev,
  (VTBL_ENTRY)&_ZN6S947C42v5Ev,
  (VTBL_ENTRY)&_ZN6S947C42v6Ev,
  (VTBL_ENTRY)&_ZN6S947C32v7Ev,
  (VTBL_ENTRY)&_ZN6S947C32v8Ev,
  (VTBL_ENTRY)&_ZN6S947C32v9Ev,
  (VTBL_ENTRY)&_ZN6S947C33v10Ev,
  (VTBL_ENTRY)&_ZN6S947C23v11Ev,
  (VTBL_ENTRY)&_ZN6S947C23v12Ev,
  (VTBL_ENTRY)&_ZN6S947C23v13Ev,
  (VTBL_ENTRY)&_ZN6S947C23v14Ev,
};
extern VTBL_ENTRY _ZTI6S947C2[];
extern  VTBL_ENTRY _ZTV6S947C2[];
Class_Descriptor cd_S947C2 = {  "S947C2", // class name
  bases_S947C2, 3,
  &(vtc_S947C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI6S947C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S947C2),15, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S947C1  : S947C2 {
  virtual  ~S947C1(); // _ZN6S947C1D1Ev
  virtual void  v1(); // _ZN6S947C12v1Ev
  virtual void  v2(); // _ZN6S947C12v2Ev
  virtual void  v3(); // _ZN6S947C12v3Ev
  S947C1(); // tgen
};
//SIG(1 S947C1) C1{ BC2{ BC3{ BC4{ BC5{} vd v4 v5 v6} vd v7 v8 v9 v10} vd v11 v12 v13 v14} vd v1 v2 v3}


 S947C1 ::~S947C1(){ note_dtor("S947C1", this);}
void  S947C1 ::v1(){vfunc_called(this, "_ZN6S947C12v1Ev");}
void  S947C1 ::v2(){vfunc_called(this, "_ZN6S947C12v2Ev");}
void  S947C1 ::v3(){vfunc_called(this, "_ZN6S947C12v3Ev");}
S947C1 ::S947C1(){ note_ctor("S947C1", this);} // tgen

static void Test_S947C1()
{
  extern Class_Descriptor cd_S947C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S947C1, buf);
    S947C1 *dp, &lv = *(dp=new (buf) S947C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S947C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S947C1)");
    check_base_class_offset(lv, (S20956C14_nt*)(S947C4*)(S947C3*)(S947C2*), 0, "S947C1");
    check_base_class_offset(lv, (S947C4*)(S947C3*)(S947C2*), 0, "S947C1");
    check_base_class_offset(lv, (S947C3*)(S947C2*), 0, "S947C1");
    check_base_class_offset(lv, (S947C2*), 0, "S947C1");
    test_class_info(&lv, &cd_S947C1);
    dp->~S947C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS947C1(Test_S947C1, "S947C1", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN6S947C1C1Ev();
extern void _ZN6S947C1D1Ev();
Name_Map name_map_S947C1[] = {
  NSPAIR(_ZN6S947C1C1Ev),
  NSPAIR(_ZN6S947C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20956C14_nt;
extern VTBL_ENTRY _ZTI12S20956C14_nt[];
extern Class_Descriptor cd_S947C4;
extern VTBL_ENTRY _ZTI6S947C4[];
extern  VTBL_ENTRY _ZTV6S947C4[];
extern Class_Descriptor cd_S947C3;
extern VTBL_ENTRY _ZTI6S947C3[];
extern  VTBL_ENTRY _ZTV6S947C3[];
extern Class_Descriptor cd_S947C2;
extern VTBL_ENTRY _ZTI6S947C2[];
extern  VTBL_ENTRY _ZTV6S947C2[];
static Base_Class bases_S947C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20956C14_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S947C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S947C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S947C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S947C1[];
extern void _ZN6S947C1D1Ev();
extern void _ZN6S947C1D0Ev();
extern void _ZN6S947C42v4Ev();
extern void _ZN6S947C42v5Ev();
extern void _ZN6S947C42v6Ev();
extern void _ZN6S947C32v7Ev();
extern void _ZN6S947C32v8Ev();
extern void _ZN6S947C32v9Ev();
extern void _ZN6S947C33v10Ev();
extern void _ZN6S947C23v11Ev();
extern void _ZN6S947C23v12Ev();
extern void _ZN6S947C23v13Ev();
extern void _ZN6S947C23v14Ev();
extern void _ZN6S947C12v1Ev();
extern void _ZN6S947C12v2Ev();
extern void _ZN6S947C12v3Ev();
static  VTBL_ENTRY vtc_S947C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S947C1[0]),
  (VTBL_ENTRY)&_ZN6S947C1D1Ev,
  (VTBL_ENTRY)&_ZN6S947C1D0Ev,
  (VTBL_ENTRY)&_ZN6S947C42v4Ev,
  (VTBL_ENTRY)&_ZN6S947C42v5Ev,
  (VTBL_ENTRY)&_ZN6S947C42v6Ev,
  (VTBL_ENTRY)&_ZN6S947C32v7Ev,
  (VTBL_ENTRY)&_ZN6S947C32v8Ev,
  (VTBL_ENTRY)&_ZN6S947C32v9Ev,
  (VTBL_ENTRY)&_ZN6S947C33v10Ev,
  (VTBL_ENTRY)&_ZN6S947C23v11Ev,
  (VTBL_ENTRY)&_ZN6S947C23v12Ev,
  (VTBL_ENTRY)&_ZN6S947C23v13Ev,
  (VTBL_ENTRY)&_ZN6S947C23v14Ev,
  (VTBL_ENTRY)&_ZN6S947C12v1Ev,
  (VTBL_ENTRY)&_ZN6S947C12v2Ev,
  (VTBL_ENTRY)&_ZN6S947C12v3Ev,
};
extern VTBL_ENTRY _ZTI6S947C1[];
extern  VTBL_ENTRY _ZTV6S947C1[];
Class_Descriptor cd_S947C1 = {  "S947C1", // class name
  bases_S947C1, 4,
  &(vtc_S947C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI6S947C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S947C1),18, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19797C2  {
  short s19797c2f0;
  long double s19797c2f1;
  int s19797c2f2;
  void  mf19797c2(); // _ZN8S19797C29mf19797c2Ev
};
//SIG(-1 S19797C2) C1{ m Fs FD Fi}


void  S19797C2 ::mf19797c2(){}

static void Test_S19797C2()
{
  {
    init_simple_test("S19797C2");
    S19797C2 lv;
    check2(sizeof(lv), ABISELECT(48,20), "sizeof(S19797C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19797C2)");
    check_field_offset(lv, s19797c2f0, 0, "S19797C2.s19797c2f0");
    check_field_offset(lv, s19797c2f1, ABISELECT(16,4), "S19797C2.s19797c2f1");
    check_field_offset(lv, s19797c2f2, ABISELECT(32,16), "S19797C2.s19797c2f2");
  }
}
static Arrange_To_Call_Me vS19797C2(Test_S19797C2, "S19797C2", ABISELECT(48,20));

#else // __cplusplus

extern VTBL_ENTRY _ZTI8S19797C2[];
VTBL_ENTRY *P__ZTI8S19797C2 = _ZTI8S19797C2; 
Class_Descriptor cd_S19797C2 = {  "S19797C2", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  ABISELECT(48,20), // object size
  NSPAIRA(_ZTI8S19797C2),ABISELECT(16,8), //typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19797C3  : virtual S19797C2 {
  void *s19797c3f0[3];
  int s19797c3f1;
  ~S19797C3(); // tgen
  S19797C3(); // tgen
};
//SIG(-1 S19797C3) C1{ VBC2{ m Fs FD Fi} Fp[3] Fi}


S19797C3 ::~S19797C3(){ note_dtor("S19797C3", this);} // tgen
S19797C3 ::S19797C3(){ note_ctor("S19797C3", this);} // tgen

static void Test_S19797C3()
{
  extern Class_Descriptor cd_S19797C3;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(7,11)];
    init_test(&cd_S19797C3, buf);
    S19797C3 *dp, &lv = *(dp=new (buf) S19797C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,40), "sizeof(S19797C3)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19797C3)");
    check_base_class_offset(lv, (S19797C2*), ABISELECT(48,20), "S19797C3");
    check_field_offset(lv, s19797c3f0, ABISELECT(8,4), "S19797C3.s19797c3f0");
    check_field_offset(lv, s19797c3f1, ABISELECT(32,16), "S19797C3.s19797c3f1");
    test_class_info(&lv, &cd_S19797C3);
    dp->~S19797C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19797C3(Test_S19797C3, "S19797C3", ABISELECT(96,40));

#else // __cplusplus

extern void _ZN8S19797C3C1Ev();
extern void _ZN8S19797C3D1Ev();
Name_Map name_map_S19797C3[] = {
  NSPAIR(_ZN8S19797C3C1Ev),
  NSPAIR(_ZN8S19797C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19797C2;
extern VTBL_ENTRY _ZTI8S19797C2[];
static Base_Class bases_S19797C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19797C2,    ABISELECT(48,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19797C3[];
static  VTBL_ENTRY vtc_S19797C3[] = {
  ABISELECT(48,20),
  0,
  (VTBL_ENTRY)&(_ZTI8S19797C3[0]),
};
extern VTBL_ENTRY _ZTV8S19797C3[];
static  VTT_ENTRY vtt_S19797C3[] = {
  {&(_ZTV8S19797C3[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S19797C3[];
extern  VTBL_ENTRY _ZTV8S19797C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19797C3[];
Class_Descriptor cd_S19797C3 = {  "S19797C3", // class name
  bases_S19797C3, 1,
  &(vtc_S19797C3[0]), // expected_vtbl_contents
  &(vtt_S19797C3[0]), // expected_vtt_contents
  ABISELECT(96,40), // object size
  NSPAIRA(_ZTI8S19797C3),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S19797C3),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19797C3),1, //virtual table table var
  0, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19797C1  : virtual S19797C2 , S19797C3 {
  char s19797c1f0;
  long double s19797c1f1;
  __tsi64 s19797c1f2[3];
  void *s19797c1f3;
  long double s19797c1f4;
  __tsi64 s19797c1f5[7];
  int s19797c1f6;
  void *s19797c1f7;
  short  :0;
  virtual  ~S19797C1(); // _ZN8S19797C1D2Ev
  virtual void  v1(); // _ZN8S19797C12v1Ev
  S19797C1(); // tgen
};
//SIG(1 S19797C1) C1{ VBC2{ m Fs FD Fi} BC3{ VBC2 Fp[3] Fi} vd v1 Fc FD FL[3] Fp FD FL[7] Fi Fp Fs:0}


 S19797C1 ::~S19797C1(){ note_dtor("S19797C1", this);}
void  S19797C1 ::v1(){vfunc_called(this, "_ZN8S19797C12v1Ev");}
S19797C1 ::S19797C1(){ note_ctor("S19797C1", this);} // tgen

static void Test_S19797C1()
{
  extern Class_Descriptor cd_S19797C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(16,41)];
    init_test(&cd_S19797C1, buf);
    S19797C1 *dp, &lv = *(dp=new (buf) S19797C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(240,160), "sizeof(S19797C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19797C1)");
    check_base_class_offset(lv, (S19797C2*), ABISELECT(192,140), "S19797C1");
    check_base_class_offset(lv, (S19797C2*)(S19797C3*), ABISELECT(192,140), "S19797C1");
    check_base_class_offset(lv, (S19797C3*), 0, "S19797C1");
    check_field_offset(lv, s19797c1f0, ABISELECT(36,20), "S19797C1.s19797c1f0");
    check_field_offset(lv, s19797c1f1, ABISELECT(48,24), "S19797C1.s19797c1f1");
    check_field_offset(lv, s19797c1f2, ABISELECT(64,36), "S19797C1.s19797c1f2");
    check_field_offset(lv, s19797c1f3, ABISELECT(88,60), "S19797C1.s19797c1f3");
    check_field_offset(lv, s19797c1f4, ABISELECT(96,64), "S19797C1.s19797c1f4");
    check_field_offset(lv, s19797c1f5, ABISELECT(112,76), "S19797C1.s19797c1f5");
    check_field_offset(lv, s19797c1f6, ABISELECT(168,132), "S19797C1.s19797c1f6");
    check_field_offset(lv, s19797c1f7, ABISELECT(176,136), "S19797C1.s19797c1f7");
    test_class_info(&lv, &cd_S19797C1);
    dp->~S19797C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19797C1(Test_S19797C1, "S19797C1", ABISELECT(240,160));

#else // __cplusplus

extern void _ZN8S19797C1C1Ev();
extern void _ZN8S19797C1D2Ev();
Name_Map name_map_S19797C1[] = {
  NSPAIR(_ZN8S19797C1C1Ev),
  NSPAIR(_ZN8S19797C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19797C2;
extern VTBL_ENTRY _ZTI8S19797C2[];
extern Class_Descriptor cd_S19797C3;
extern VTBL_ENTRY _ZTI8S19797C3[];
extern  VTBL_ENTRY _ZTV8S19797C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19797C3[];
static Base_Class bases_S19797C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19797C2,    ABISELECT(192,140), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19797C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19797C1[];
extern void _ZN8S19797C1D1Ev();
extern void _ZN8S19797C1D0Ev();
extern void _ZN8S19797C12v1Ev();
static  VTBL_ENTRY vtc_S19797C1[] = {
  ABISELECT(192,140),
  0,
  (VTBL_ENTRY)&(_ZTI8S19797C1[0]),
  (VTBL_ENTRY)&_ZN8S19797C1D1Ev,
  (VTBL_ENTRY)&_ZN8S19797C1D0Ev,
  (VTBL_ENTRY)&_ZN8S19797C12v1Ev,
};
extern VTBL_ENTRY _ZTV8S19797C1[];
static  VTBL_ENTRY _tg__ZTV8S19797C3__8S19797C1[] = {
  ABISELECT(192,140),
  0,
  (VTBL_ENTRY)&(_ZTI8S19797C3[0]),
};
static  VTT_ENTRY vtt_S19797C1[] = {
  {&(_ZTV8S19797C1[3]),  3,6},
  {&(_tg__ZTV8S19797C3__8S19797C1[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S19797C1[];
extern  VTBL_ENTRY _ZTV8S19797C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19797C1[];
Class_Descriptor cd_S19797C1 = {  "S19797C1", // class name
  bases_S19797C1, 2,
  &(vtc_S19797C1[0]), // expected_vtbl_contents
  &(vtt_S19797C1[0]), // expected_vtt_contents
  ABISELECT(240,160), // object size
  NSPAIRA(_ZTI8S19797C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19797C1),6, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19797C1),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7139C2  {
  void *s7139c2f0[2];
  virtual void  v8(); // _ZN7S7139C22v8Ev
  virtual void  v9(); // _ZN7S7139C22v9Ev
  virtual void  v10(); // _ZN7S7139C23v10Ev
  virtual void  v11(); // _ZN7S7139C23v11Ev
  virtual void  v12(); // _ZN7S7139C23v12Ev
  virtual void  v13(); // _ZN7S7139C23v13Ev
  virtual void  v14(); // _ZN7S7139C23v14Ev
  ~S7139C2(); // tgen
  S7139C2(); // tgen
};
//SIG(-1 S7139C2) C1{ v1 v2 v3 v4 v5 v6 v7 Fp[2]}


void  S7139C2 ::v8(){vfunc_called(this, "_ZN7S7139C22v8Ev");}
void  S7139C2 ::v9(){vfunc_called(this, "_ZN7S7139C22v9Ev");}
void  S7139C2 ::v10(){vfunc_called(this, "_ZN7S7139C23v10Ev");}
void  S7139C2 ::v11(){vfunc_called(this, "_ZN7S7139C23v11Ev");}
void  S7139C2 ::v12(){vfunc_called(this, "_ZN7S7139C23v12Ev");}
void  S7139C2 ::v13(){vfunc_called(this, "_ZN7S7139C23v13Ev");}
void  S7139C2 ::v14(){vfunc_called(this, "_ZN7S7139C23v14Ev");}
S7139C2 ::~S7139C2(){ note_dtor("S7139C2", this);} // tgen
S7139C2 ::S7139C2(){ note_ctor("S7139C2", this);} // tgen

static void Test_S7139C2()
{
  extern Class_Descriptor cd_S7139C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S7139C2, buf);
    S7139C2 *dp, &lv = *(dp=new (buf) S7139C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S7139C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7139C2)");
    check_field_offset(lv, s7139c2f0, ABISELECT(8,4), "S7139C2.s7139c2f0");
    test_class_info(&lv, &cd_S7139C2);
    dp->~S7139C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7139C2(Test_S7139C2, "S7139C2", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S7139C2C1Ev();
extern void _ZN7S7139C2D1Ev();
Name_Map name_map_S7139C2[] = {
  NSPAIR(_ZN7S7139C2C1Ev),
  NSPAIR(_ZN7S7139C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S7139C2[];
extern void _ZN7S7139C22v8Ev();
extern void _ZN7S7139C22v9Ev();
extern void _ZN7S7139C23v10Ev();
extern void _ZN7S7139C23v11Ev();
extern void _ZN7S7139C23v12Ev();
extern void _ZN7S7139C23v13Ev();
extern void _ZN7S7139C23v14Ev();
static  VTBL_ENTRY vtc_S7139C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7139C2[0]),
  (VTBL_ENTRY)&_ZN7S7139C22v8Ev,
  (VTBL_ENTRY)&_ZN7S7139C22v9Ev,
  (VTBL_ENTRY)&_ZN7S7139C23v10Ev,
  (VTBL_ENTRY)&_ZN7S7139C23v11Ev,
  (VTBL_ENTRY)&_ZN7S7139C23v12Ev,
  (VTBL_ENTRY)&_ZN7S7139C23v13Ev,
  (VTBL_ENTRY)&_ZN7S7139C23v14Ev,
};
extern VTBL_ENTRY _ZTI7S7139C2[];
extern  VTBL_ENTRY _ZTV7S7139C2[];
Class_Descriptor cd_S7139C2 = {  "S7139C2", // class name
  0,0,//no base classes
  &(vtc_S7139C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S7139C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S7139C2),9, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7139C3_nt  {
  virtual void  v15(); // _ZN10S7139C3_nt3v15Ev
  virtual void  v16(); // _ZN10S7139C3_nt3v16Ev
  virtual void  v17(); // _ZN10S7139C3_nt3v17Ev
  ~S7139C3_nt(); // tgen
  S7139C3_nt(); // tgen
};
//SIG(-1 S7139C3_nt) C1{ v1 v2 v3}


void  S7139C3_nt ::v15(){vfunc_called(this, "_ZN10S7139C3_nt3v15Ev");}
void  S7139C3_nt ::v16(){vfunc_called(this, "_ZN10S7139C3_nt3v16Ev");}
void  S7139C3_nt ::v17(){vfunc_called(this, "_ZN10S7139C3_nt3v17Ev");}
S7139C3_nt ::~S7139C3_nt(){ note_dtor("S7139C3_nt", this);} // tgen
S7139C3_nt ::S7139C3_nt(){ note_ctor("S7139C3_nt", this);} // tgen

//skip512 S7139C3_nt

#else // __cplusplus

extern void _ZN10S7139C3_ntC1Ev();
extern void _ZN10S7139C3_ntD1Ev();
Name_Map name_map_S7139C3_nt[] = {
  NSPAIR(_ZN10S7139C3_ntC1Ev),
  NSPAIR(_ZN10S7139C3_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S7139C3_nt[];
extern void _ZN10S7139C3_nt3v15Ev();
extern void _ZN10S7139C3_nt3v16Ev();
extern void _ZN10S7139C3_nt3v17Ev();
static  VTBL_ENTRY vtc_S7139C3_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S7139C3_nt[0]),
  (VTBL_ENTRY)&_ZN10S7139C3_nt3v15Ev,
  (VTBL_ENTRY)&_ZN10S7139C3_nt3v16Ev,
  (VTBL_ENTRY)&_ZN10S7139C3_nt3v17Ev,
};
extern VTBL_ENTRY _ZTI10S7139C3_nt[];
VTBL_ENTRY *P__ZTI10S7139C3_nt = _ZTI10S7139C3_nt; 
extern  VTBL_ENTRY _ZTV10S7139C3_nt[];
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7139C1  : S7139C2 {
  ::S7139C3_nt s7139c1f0;
  virtual void  v1(); // _ZN7S7139C12v1Ev
  virtual void  v2(); // _ZN7S7139C12v2Ev
  virtual void  v3(); // _ZN7S7139C12v3Ev
  virtual void  v4(); // _ZN7S7139C12v4Ev
  virtual void  v5(); // _ZN7S7139C12v5Ev
  virtual void  v6(); // _ZN7S7139C12v6Ev
  virtual void  v7(); // _ZN7S7139C12v7Ev
  ~S7139C1(); // tgen
  S7139C1(); // tgen
};
//SIG(1 S7139C1) C1{ BC2{ v8 v9 v10 v11 v12 v13 v14 Fp[2]} v1 v2 v3 v4 v5 v6 v7 FC3{ v15 v16 v17}}


void  S7139C1 ::v1(){vfunc_called(this, "_ZN7S7139C12v1Ev");}
void  S7139C1 ::v2(){vfunc_called(this, "_ZN7S7139C12v2Ev");}
void  S7139C1 ::v3(){vfunc_called(this, "_ZN7S7139C12v3Ev");}
void  S7139C1 ::v4(){vfunc_called(this, "_ZN7S7139C12v4Ev");}
void  S7139C1 ::v5(){vfunc_called(this, "_ZN7S7139C12v5Ev");}
void  S7139C1 ::v6(){vfunc_called(this, "_ZN7S7139C12v6Ev");}
void  S7139C1 ::v7(){vfunc_called(this, "_ZN7S7139C12v7Ev");}
S7139C1 ::~S7139C1(){ note_dtor("S7139C1", this);} // tgen
S7139C1 ::S7139C1(){ note_ctor("S7139C1", this);} // tgen

static void Test_S7139C1()
{
  extern Class_Descriptor cd_S7139C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S7139C1, buf);
    S7139C1 *dp, &lv = *(dp=new (buf) S7139C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S7139C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7139C1)");
    check_base_class_offset(lv, (S7139C2*), 0, "S7139C1");
    check_field_offset(lv, s7139c1f0, ABISELECT(24,12), "S7139C1.s7139c1f0");
    test_class_info(&lv, &cd_S7139C1);
    dp->~S7139C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7139C1(Test_S7139C1, "S7139C1", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN7S7139C1C1Ev();
extern void _ZN7S7139C1D1Ev();
Name_Map name_map_S7139C1[] = {
  NSPAIR(_ZN7S7139C1C1Ev),
  NSPAIR(_ZN7S7139C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7139C2;
extern VTBL_ENTRY _ZTI7S7139C2[];
extern  VTBL_ENTRY _ZTV7S7139C2[];
static Base_Class bases_S7139C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7139C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7139C1[];
extern void _ZN7S7139C22v8Ev();
extern void _ZN7S7139C22v9Ev();
extern void _ZN7S7139C23v10Ev();
extern void _ZN7S7139C23v11Ev();
extern void _ZN7S7139C23v12Ev();
extern void _ZN7S7139C23v13Ev();
extern void _ZN7S7139C23v14Ev();
extern void _ZN7S7139C12v1Ev();
extern void _ZN7S7139C12v2Ev();
extern void _ZN7S7139C12v3Ev();
extern void _ZN7S7139C12v4Ev();
extern void _ZN7S7139C12v5Ev();
extern void _ZN7S7139C12v6Ev();
extern void _ZN7S7139C12v7Ev();
static  VTBL_ENTRY vtc_S7139C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7139C1[0]),
  (VTBL_ENTRY)&_ZN7S7139C22v8Ev,
  (VTBL_ENTRY)&_ZN7S7139C22v9Ev,
  (VTBL_ENTRY)&_ZN7S7139C23v10Ev,
  (VTBL_ENTRY)&_ZN7S7139C23v11Ev,
  (VTBL_ENTRY)&_ZN7S7139C23v12Ev,
  (VTBL_ENTRY)&_ZN7S7139C23v13Ev,
  (VTBL_ENTRY)&_ZN7S7139C23v14Ev,
  (VTBL_ENTRY)&_ZN7S7139C12v1Ev,
  (VTBL_ENTRY)&_ZN7S7139C12v2Ev,
  (VTBL_ENTRY)&_ZN7S7139C12v3Ev,
  (VTBL_ENTRY)&_ZN7S7139C12v4Ev,
  (VTBL_ENTRY)&_ZN7S7139C12v5Ev,
  (VTBL_ENTRY)&_ZN7S7139C12v6Ev,
  (VTBL_ENTRY)&_ZN7S7139C12v7Ev,
};
extern VTBL_ENTRY _ZTI7S7139C1[];
extern  VTBL_ENTRY _ZTV7S7139C1[];
Class_Descriptor cd_S7139C1 = {  "S7139C1", // class name
  bases_S7139C1, 1,
  &(vtc_S7139C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI7S7139C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S7139C1),16, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S14869C1  {
  short s14869c1f0[2];
  char s14869c1f1[9];
  short s14869c1f2[2];
  char s14869c1f3[7];
  int s14869c1f4;
  char s14869c1f5[2];
  short s14869c1f6[4];
  char s14869c1f7[2];
  short s14869c1f8[12];
  int s14869c1f9[2];
  char s14869c1f10[259];
  __tsi64 s14869c1f11[2];
};
//SIG(1 S14869C1) C1{ Fs[2] Fc[9] Fs[2] Fc[7] Fi Fc[2] Fs[4] Fc[2] Fs[12] Fi[2] Fc[259] FL[2]}



static void Test_S14869C1()
{
  {
    init_simple_test("S14869C1");
    S14869C1 lv;
    check2(sizeof(lv), 352, "sizeof(S14869C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S14869C1)");
    check_field_offset(lv, s14869c1f0, 0, "S14869C1.s14869c1f0");
    check_field_offset(lv, s14869c1f1, 4, "S14869C1.s14869c1f1");
    check_field_offset(lv, s14869c1f2, 14, "S14869C1.s14869c1f2");
    check_field_offset(lv, s14869c1f3, 18, "S14869C1.s14869c1f3");
    check_field_offset(lv, s14869c1f4, 28, "S14869C1.s14869c1f4");
    check_field_offset(lv, s14869c1f5, 32, "S14869C1.s14869c1f5");
    check_field_offset(lv, s14869c1f6, 34, "S14869C1.s14869c1f6");
    check_field_offset(lv, s14869c1f7, 42, "S14869C1.s14869c1f7");
    check_field_offset(lv, s14869c1f8, 44, "S14869C1.s14869c1f8");
    check_field_offset(lv, s14869c1f9, 68, "S14869C1.s14869c1f9");
    check_field_offset(lv, s14869c1f10, 76, "S14869C1.s14869c1f10");
    check_field_offset(lv, s14869c1f11, 336, "S14869C1.s14869c1f11");
  }
}
static Arrange_To_Call_Me vS14869C1(Test_S14869C1, "S14869C1", 352);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S9369C2  {
  ::S836C21_nt s9369c2f0;
  int s9369c2f1[2];
  char s9369c2f2;
  virtual  ~S9369C2(); // _ZN7S9369C2D1Ev
  virtual void  v3(); // _ZN7S9369C22v3Ev
  virtual void  v4(); // _ZN7S9369C22v4Ev
  virtual void  v5(); // _ZN7S9369C22v5Ev
  S9369C2(); // tgen
};
//SIG(-1 S9369C2) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S9369C2 ::~S9369C2(){ note_dtor("S9369C2", this);}
void  S9369C2 ::v3(){vfunc_called(this, "_ZN7S9369C22v3Ev");}
void  S9369C2 ::v4(){vfunc_called(this, "_ZN7S9369C22v4Ev");}
void  S9369C2 ::v5(){vfunc_called(this, "_ZN7S9369C22v5Ev");}
S9369C2 ::S9369C2(){ note_ctor("S9369C2", this);} // tgen

static void Test_S9369C2()
{
  extern Class_Descriptor cd_S9369C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S9369C2, buf);
    S9369C2 *dp, &lv = *(dp=new (buf) S9369C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S9369C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9369C2)");
    check_field_offset(lv, s9369c2f0, ABISELECT(8,4), "S9369C2.s9369c2f0");
    check_field_offset(lv, s9369c2f1, ABISELECT(24,16), "S9369C2.s9369c2f1");
    check_field_offset(lv, s9369c2f2, ABISELECT(32,24), "S9369C2.s9369c2f2");
    test_class_info(&lv, &cd_S9369C2);
    dp->~S9369C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9369C2(Test_S9369C2, "S9369C2", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S9369C2C1Ev();
extern void _ZN7S9369C2D1Ev();
Name_Map name_map_S9369C2[] = {
  NSPAIR(_ZN7S9369C2C1Ev),
  NSPAIR(_ZN7S9369C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S9369C2[];
extern void _ZN7S9369C2D1Ev();
extern void _ZN7S9369C2D0Ev();
extern void _ZN7S9369C22v3Ev();
extern void _ZN7S9369C22v4Ev();
extern void _ZN7S9369C22v5Ev();
static  VTBL_ENTRY vtc_S9369C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9369C2[0]),
  (VTBL_ENTRY)&_ZN7S9369C2D1Ev,
  (VTBL_ENTRY)&_ZN7S9369C2D0Ev,
  (VTBL_ENTRY)&_ZN7S9369C22v3Ev,
  (VTBL_ENTRY)&_ZN7S9369C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9369C22v5Ev,
};
extern VTBL_ENTRY _ZTI7S9369C2[];
extern  VTBL_ENTRY _ZTV7S9369C2[];
Class_Descriptor cd_S9369C2 = {  "S9369C2", // class name
  0,0,//no base classes
  &(vtc_S9369C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S9369C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S9369C2),7, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S9369C1  : S9369C2 {
  void *s9369c1f0;
  int s9369c1f1;
  char s9369c1f2[10];
  int s9369c1f3;
  char s9369c1f4;
  virtual  ~S9369C1(); // _ZN7S9369C1D1Ev
  virtual void  v1(); // _ZN7S9369C12v1Ev
  virtual void  v2(); // _ZN7S9369C12v2Ev
  S9369C1(); // tgen
};
//SIG(1 S9369C1) C1{ BC2{ vd v3 v4 v5 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} vd v1 v2 Fp Fi Fc[10] Fi Fc}


 S9369C1 ::~S9369C1(){ note_dtor("S9369C1", this);}
void  S9369C1 ::v1(){vfunc_called(this, "_ZN7S9369C12v1Ev");}
void  S9369C1 ::v2(){vfunc_called(this, "_ZN7S9369C12v2Ev");}
S9369C1 ::S9369C1(){ note_ctor("S9369C1", this);} // tgen

static void Test_S9369C1()
{
  extern Class_Descriptor cd_S9369C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,15)];
    init_test(&cd_S9369C1, buf);
    S9369C1 *dp, &lv = *(dp=new (buf) S9369C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,56), "sizeof(S9369C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9369C1)");
    check_base_class_offset(lv, (S9369C2*), 0, "S9369C1");
    check_field_offset(lv, s9369c1f0, ABISELECT(40,28), "S9369C1.s9369c1f0");
    check_field_offset(lv, s9369c1f1, ABISELECT(48,32), "S9369C1.s9369c1f1");
    check_field_offset(lv, s9369c1f2, ABISELECT(52,36), "S9369C1.s9369c1f2");
    check_field_offset(lv, s9369c1f3, ABISELECT(64,48), "S9369C1.s9369c1f3");
    check_field_offset(lv, s9369c1f4, ABISELECT(68,52), "S9369C1.s9369c1f4");
    test_class_info(&lv, &cd_S9369C1);
    dp->~S9369C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9369C1(Test_S9369C1, "S9369C1", ABISELECT(72,56));

#else // __cplusplus

extern void _ZN7S9369C1C1Ev();
extern void _ZN7S9369C1D1Ev();
Name_Map name_map_S9369C1[] = {
  NSPAIR(_ZN7S9369C1C1Ev),
  NSPAIR(_ZN7S9369C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S9369C2;
extern VTBL_ENTRY _ZTI7S9369C2[];
extern  VTBL_ENTRY _ZTV7S9369C2[];
static Base_Class bases_S9369C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S9369C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S9369C1[];
extern void _ZN7S9369C1D1Ev();
extern void _ZN7S9369C1D0Ev();
extern void _ZN7S9369C22v3Ev();
extern void _ZN7S9369C22v4Ev();
extern void _ZN7S9369C22v5Ev();
extern void _ZN7S9369C12v1Ev();
extern void _ZN7S9369C12v2Ev();
static  VTBL_ENTRY vtc_S9369C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9369C1[0]),
  (VTBL_ENTRY)&_ZN7S9369C1D1Ev,
  (VTBL_ENTRY)&_ZN7S9369C1D0Ev,
  (VTBL_ENTRY)&_ZN7S9369C22v3Ev,
  (VTBL_ENTRY)&_ZN7S9369C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9369C22v5Ev,
  (VTBL_ENTRY)&_ZN7S9369C12v1Ev,
  (VTBL_ENTRY)&_ZN7S9369C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S9369C1[];
extern  VTBL_ENTRY _ZTV7S9369C1[];
Class_Descriptor cd_S9369C1 = {  "S9369C1", // class name
  bases_S9369C1, 1,
  &(vtc_S9369C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,56), // object size
  NSPAIRA(_ZTI7S9369C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S9369C1),9, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19035C8  {
  virtual void  v1(); // _ZN8S19035C82v1Ev
  ~S19035C8(); // tgen
  S19035C8(); // tgen
};
//SIG(-1 S19035C8) C1{ v1}


void  S19035C8 ::v1(){vfunc_called(this, "_ZN8S19035C82v1Ev");}
S19035C8 ::~S19035C8(){ note_dtor("S19035C8", this);} // tgen
S19035C8 ::S19035C8(){ note_ctor("S19035C8", this);} // tgen

static void Test_S19035C8()
{
  extern Class_Descriptor cd_S19035C8;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S19035C8, buf);
    S19035C8 *dp, &lv = *(dp=new (buf) S19035C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S19035C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19035C8)");
    test_class_info(&lv, &cd_S19035C8);
    dp->~S19035C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19035C8(Test_S19035C8, "S19035C8", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S19035C8C1Ev();
extern void _ZN8S19035C8D1Ev();
Name_Map name_map_S19035C8[] = {
  NSPAIR(_ZN8S19035C8C1Ev),
  NSPAIR(_ZN8S19035C8D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S19035C8[];
extern void _ZN8S19035C82v1Ev();
static  VTBL_ENTRY vtc_S19035C8[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19035C8[0]),
  (VTBL_ENTRY)&_ZN8S19035C82v1Ev,
};
extern VTBL_ENTRY _ZTI8S19035C8[];
extern  VTBL_ENTRY _ZTV8S19035C8[];
Class_Descriptor cd_S19035C8 = {  "S19035C8", // class name
  0,0,//no base classes
  &(vtc_S19035C8[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S19035C8),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S19035C8),3, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19035C7  : S19035C8 {
  ~S19035C7(); // tgen
  S19035C7(); // tgen
};
//SIG(-1 S19035C7) C1{ BC2{ v1}}


S19035C7 ::~S19035C7(){ note_dtor("S19035C7", this);} // tgen
S19035C7 ::S19035C7(){ note_ctor("S19035C7", this);} // tgen

static void Test_S19035C7()
{
  extern Class_Descriptor cd_S19035C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S19035C7, buf);
    S19035C7 *dp, &lv = *(dp=new (buf) S19035C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S19035C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19035C7)");
    check_base_class_offset(lv, (S19035C8*), 0, "S19035C7");
    test_class_info(&lv, &cd_S19035C7);
    dp->~S19035C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19035C7(Test_S19035C7, "S19035C7", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S19035C7C1Ev();
extern void _ZN8S19035C7D1Ev();
Name_Map name_map_S19035C7[] = {
  NSPAIR(_ZN8S19035C7C1Ev),
  NSPAIR(_ZN8S19035C7D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19035C8;
extern VTBL_ENTRY _ZTI8S19035C8[];
extern  VTBL_ENTRY _ZTV8S19035C8[];
static Base_Class bases_S19035C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19035C8,    0, //bcp->offset
    0, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19035C7[];
extern void _ZN8S19035C82v1Ev();
static  VTBL_ENTRY vtc_S19035C7[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19035C7[0]),
  (VTBL_ENTRY)&_ZN8S19035C82v1Ev,
};
extern VTBL_ENTRY _ZTI8S19035C7[];
extern  VTBL_ENTRY _ZTV8S19035C7[];
Class_Descriptor cd_S19035C7 = {  "S19035C7", // class name
  bases_S19035C7, 1,
  &(vtc_S19035C7[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S19035C7),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S19035C7),3, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19035C5  : S836C29 , virtual S19035C7 {
  int s19035c5f0;
  ~S19035C5(); // tgen
  S19035C5(); // tgen
};
//SIG(-1 S19035C5) C1{ BC2{ m} VBC3{ BC4{ v1}} Fi}


S19035C5 ::~S19035C5(){ note_dtor("S19035C5", this);} // tgen
S19035C5 ::S19035C5(){ note_ctor("S19035C5", this);} // tgen

static void Test_S19035C5()
{
  extern Class_Descriptor cd_S19035C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S19035C5, buf);
    S19035C5 *dp, &lv = *(dp=new (buf) S19035C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S19035C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19035C5)");
    check_base_class_offset(lv, (S836C29*), 0, "S19035C5");
    check_base_class_offset(lv, (S19035C8*)(S19035C7*), 0, "S19035C5");
    check_base_class_offset(lv, (S19035C7*), 0, "S19035C5");
    check_field_offset(lv, s19035c5f0, ABISELECT(8,4), "S19035C5.s19035c5f0");
    test_class_info(&lv, &cd_S19035C5);
    dp->~S19035C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19035C5(Test_S19035C5, "S19035C5", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN8S19035C5C1Ev();
extern void _ZN8S19035C5D1Ev();
Name_Map name_map_S19035C5[] = {
  NSPAIR(_ZN8S19035C5C1Ev),
  NSPAIR(_ZN8S19035C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S836C29;
extern VTBL_ENTRY _ZTI7S836C29[];
extern Class_Descriptor cd_S19035C8;
extern VTBL_ENTRY _ZTI8S19035C8[];
extern  VTBL_ENTRY _ZTV8S19035C8[];
extern Class_Descriptor cd_S19035C7;
extern VTBL_ENTRY _ZTI8S19035C7[];
extern  VTBL_ENTRY _ZTV8S19035C7[];
static Base_Class bases_S19035C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S836C29,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19035C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S19035C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19035C5[];
extern void _ZN8S19035C82v1Ev();
static  VTBL_ENTRY vtc_S19035C5[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19035C5[0]),
  (VTBL_ENTRY)&_ZN8S19035C82v1Ev,
};
extern VTBL_ENTRY _ZTV8S19035C5[];
static  VTT_ENTRY vtt_S19035C5[] = {
  {&(_ZTV8S19035C5[4]),  4,5},
  {&(_ZTV8S19035C5[4]),  4,5},
};
extern VTBL_ENTRY _ZTI8S19035C5[];
extern  VTBL_ENTRY _ZTV8S19035C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19035C5[];
Class_Descriptor cd_S19035C5 = {  "S19035C5", // class name
  bases_S19035C5, 3,
  &(vtc_S19035C5[0]), // expected_vtbl_contents
  &(vtt_S19035C5[0]), // expected_vtt_contents
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S19035C5),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19035C5),5, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19035C5),2, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19035C3  : S836C39 , virtual S19035C5 {
  virtual  ~S19035C3(); // _ZN8S19035C3D2Ev
  S19035C3(); // tgen
};
//SIG(-1 S19035C3) C1{ BC2{ m} VBC3{ BC4{ m} VBC5{ BC6{ v1}} Fi} vd}


 S19035C3 ::~S19035C3(){ note_dtor("S19035C3", this);}
S19035C3 ::S19035C3(){ note_ctor("S19035C3", this);} // tgen

static void Test_S19035C3()
{
  extern Class_Descriptor cd_S19035C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S19035C3, buf);
    S19035C3 *dp, &lv = *(dp=new (buf) S19035C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S19035C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19035C3)");
    check_base_class_offset(lv, (S836C39*), 0, "S19035C3");
    check_base_class_offset(lv, (S836C29*)(S19035C5*), ABISELECT(8,4), "S19035C3");
    check_base_class_offset(lv, (S19035C8*)(S19035C7*), 0, "S19035C3");
    check_base_class_offset(lv, (S19035C7*)(S19035C5*), 0, "S19035C3");
    check_base_class_offset(lv, (S19035C5*), ABISELECT(8,4), "S19035C3");
    test_class_info(&lv, &cd_S19035C3);
    dp->~S19035C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19035C3(Test_S19035C3, "S19035C3", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN8S19035C3C1Ev();
extern void _ZN8S19035C3D2Ev();
Name_Map name_map_S19035C3[] = {
  NSPAIR(_ZN8S19035C3C1Ev),
  NSPAIR(_ZN8S19035C3D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S836C39;
extern VTBL_ENTRY _ZTI7S836C39[];
extern Class_Descriptor cd_S836C29;
extern VTBL_ENTRY _ZTI7S836C29[];
extern Class_Descriptor cd_S19035C8;
extern VTBL_ENTRY _ZTI8S19035C8[];
extern  VTBL_ENTRY _ZTV8S19035C8[];
extern Class_Descriptor cd_S19035C7;
extern VTBL_ENTRY _ZTI8S19035C7[];
extern  VTBL_ENTRY _ZTV8S19035C7[];
extern Class_Descriptor cd_S19035C5;
extern VTBL_ENTRY _ZTI8S19035C5[];
extern  VTBL_ENTRY _ZTV8S19035C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19035C5[];
static Base_Class bases_S19035C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S836C39,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S836C29,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19035C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S19035C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S19035C5,    ABISELECT(8,4), //bcp->offset
    8, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19035C3[];
extern void _ZN8S19035C82v1Ev();
extern void _ZN8S19035C3D1Ev();
extern void _ZN8S19035C3D0Ev();
extern void _ZN8S19035C82v1Ev();
static  VTBL_ENTRY vtc_S19035C3[] = {
  0,
  ABISELECT(8,4),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19035C3[0]),
  (VTBL_ENTRY)&_ZN8S19035C82v1Ev,
  (VTBL_ENTRY)&_ZN8S19035C3D1Ev,
  (VTBL_ENTRY)&_ZN8S19035C3D0Ev,
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S19035C3[0]),
  (VTBL_ENTRY)&_ZN8S19035C82v1Ev,
};
extern VTBL_ENTRY _ZTV8S19035C3[];
extern void _ZN8S19035C82v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19035C5__8S19035C3[] = {
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI8S19035C5[0]),
  (VTBL_ENTRY)&_ZN8S19035C82v1Ev,
};
extern void _ZN8S19035C82v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19035C88S19035C7__8S19035C5__8S19035C3[] = {
  ABISELECT(8,4),
  (VTBL_ENTRY)&(_ZTI8S19035C5[0]),
  (VTBL_ENTRY)&_ZN8S19035C82v1Ev,
};
static  VTT_ENTRY vtt_S19035C3[] = {
  {&(_ZTV8S19035C3[5]),  5,13},
  {&(_ZTV8S19035C3[12]),  12,13},
  {&(_ZTV8S19035C3[5]),  5,13},
  {&(_tg__ZTV8S19035C5__8S19035C3[4]),  4,5},
  {&(_tg__ZTV8S19035C88S19035C7__8S19035C5__8S19035C3[2]),  2,3},
};
extern VTBL_ENTRY _ZTI8S19035C3[];
extern  VTBL_ENTRY _ZTV8S19035C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19035C3[];
Class_Descriptor cd_S19035C3 = {  "S19035C3", // class name
  bases_S19035C3, 5,
  &(vtc_S19035C3[0]), // expected_vtbl_contents
  &(vtt_S19035C3[0]), // expected_vtt_contents
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI8S19035C3),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19035C3),13, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19035C3),5, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19035C2  : S19035C3 {
  void *s19035c2f0[7];
  int s19035c2f1;
  virtual  ~S19035C2(); // _ZN8S19035C2D2Ev
  S19035C2(); // tgen
};
//SIG(-1 S19035C2) C1{ BC2{ BC3{ m} VBC4{ BC5{ m} VBC6{ BC7{ v1}} Fi} vd} vd Fp[7] Fi}


 S19035C2 ::~S19035C2(){ note_dtor("S19035C2", this);}
S19035C2 ::S19035C2(){ note_ctor("S19035C2", this);} // tgen

static void Test_S19035C2()
{
  extern Class_Descriptor cd_S19035C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[12];
    init_test(&cd_S19035C2, buf);
    S19035C2 *dp, &lv = *(dp=new (buf) S19035C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(88,44), "sizeof(S19035C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19035C2)");
    check_base_class_offset(lv, (S836C39*)(S19035C3*), 0, "S19035C2");
    check_base_class_offset(lv, (S836C29*)(S19035C5*), ABISELECT(72,36), "S19035C2");
    check_base_class_offset(lv, (S19035C8*)(S19035C7*), 0, "S19035C2");
    check_base_class_offset(lv, (S19035C7*)(S19035C5*), 0, "S19035C2");
    check_base_class_offset(lv, (S19035C5*)(S19035C3*), ABISELECT(72,36), "S19035C2");
    check_base_class_offset(lv, (S19035C3*), 0, "S19035C2");
    check_field_offset(lv, s19035c2f0, ABISELECT(8,4), "S19035C2.s19035c2f0");
    check_field_offset(lv, s19035c2f1, ABISELECT(64,32), "S19035C2.s19035c2f1");
    test_class_info(&lv, &cd_S19035C2);
    dp->~S19035C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19035C2(Test_S19035C2, "S19035C2", ABISELECT(88,44));

#else // __cplusplus

extern void _ZN8S19035C2C1Ev();
extern void _ZN8S19035C2D2Ev();
Name_Map name_map_S19035C2[] = {
  NSPAIR(_ZN8S19035C2C1Ev),
  NSPAIR(_ZN8S19035C2D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S836C39;
extern VTBL_ENTRY _ZTI7S836C39[];
extern Class_Descriptor cd_S836C29;
extern VTBL_ENTRY _ZTI7S836C29[];
extern Class_Descriptor cd_S19035C8;
extern VTBL_ENTRY _ZTI8S19035C8[];
extern  VTBL_ENTRY _ZTV8S19035C8[];
extern Class_Descriptor cd_S19035C7;
extern VTBL_ENTRY _ZTI8S19035C7[];
extern  VTBL_ENTRY _ZTV8S19035C7[];
extern Class_Descriptor cd_S19035C5;
extern VTBL_ENTRY _ZTI8S19035C5[];
extern  VTBL_ENTRY _ZTV8S19035C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19035C5[];
extern Class_Descriptor cd_S19035C3;
extern VTBL_ENTRY _ZTI8S19035C3[];
extern  VTBL_ENTRY _ZTV8S19035C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19035C3[];
static Base_Class bases_S19035C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S836C39,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S836C29,    ABISELECT(72,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19035C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S19035C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S19035C5,    ABISELECT(72,36), //bcp->offset
    8, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S19035C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19035C2[];
extern void _ZN8S19035C82v1Ev();
extern void _ZN8S19035C2D1Ev();
extern void _ZN8S19035C2D0Ev();
extern void _ZN8S19035C82v1Ev();
static  VTBL_ENTRY vtc_S19035C2[] = {
  0,
  ABISELECT(72,36),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19035C2[0]),
  (VTBL_ENTRY)&_ZN8S19035C82v1Ev,
  (VTBL_ENTRY)&_ZN8S19035C2D1Ev,
  (VTBL_ENTRY)&_ZN8S19035C2D0Ev,
  ABISELECT(-72,-36),
  ABISELECT(-72,-36),
  ABISELECT(-72,-36),
  (VTBL_ENTRY)&(_ZTI8S19035C2[0]),
  (VTBL_ENTRY)&_ZN8S19035C82v1Ev,
};
extern VTBL_ENTRY _ZTV8S19035C2[];
extern void _ZN8S19035C82v1Ev();
extern void _ZN8S19035C3D1Ev();
extern void _ZN8S19035C3D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19035C3__8S19035C2[] = {
  0,
  ABISELECT(72,36),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19035C3[0]),
  (VTBL_ENTRY)&_ZN8S19035C82v1Ev,
  (VTBL_ENTRY)&_ZN8S19035C3D1Ev,
  (VTBL_ENTRY)&_ZN8S19035C3D0Ev,
};
extern void _ZN8S19035C82v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19035C5__8S19035C3__8S19035C2[] = {
  ABISELECT(-72,-36),
  ABISELECT(-72,-36),
  ABISELECT(-72,-36),
  (VTBL_ENTRY)&(_ZTI8S19035C3[0]),
  (VTBL_ENTRY)&_ZN8S19035C82v1Ev,
};
extern void _ZN8S19035C82v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19035C5__8S19035C2[] = {
  ABISELECT(-72,-36),
  ABISELECT(-72,-36),
  0,
  (VTBL_ENTRY)&(_ZTI8S19035C5[0]),
  (VTBL_ENTRY)&_ZN8S19035C82v1Ev,
};
extern void _ZN8S19035C82v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19035C88S19035C7__8S19035C5__8S19035C2[] = {
  ABISELECT(72,36),
  (VTBL_ENTRY)&(_ZTI8S19035C5[0]),
  (VTBL_ENTRY)&_ZN8S19035C82v1Ev,
};
static  VTT_ENTRY vtt_S19035C2[] = {
  {&(_ZTV8S19035C2[5]),  5,13},
  {&(_tg__ZTV8S19035C3__8S19035C2[5]),  5,8},
  {&(_tg__ZTV8S19035C5__8S19035C3__8S19035C2[4]),  4,5},
  {&(_tg__ZTV8S19035C3__8S19035C2[5]),  5,8},
  {&(_ZTV8S19035C2[12]),  12,13},
  {&(_ZTV8S19035C2[5]),  5,13},
  {&(_tg__ZTV8S19035C5__8S19035C2[4]),  4,5},
  {&(_tg__ZTV8S19035C88S19035C7__8S19035C5__8S19035C2[2]),  2,3},
};
extern VTBL_ENTRY _ZTI8S19035C2[];
extern  VTBL_ENTRY _ZTV8S19035C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19035C2[];
Class_Descriptor cd_S19035C2 = {  "S19035C2", // class name
  bases_S19035C2, 6,
  &(vtc_S19035C2[0]), // expected_vtbl_contents
  &(vtt_S19035C2[0]), // expected_vtt_contents
  ABISELECT(88,44), // object size
  NSPAIRA(_ZTI8S19035C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S19035C2),13, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19035C2),8, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19035C1  : virtual S19035C2 , virtual S836C39 , virtual S19035C3 {
  virtual  ~S19035C1(); // _ZN8S19035C1D2Ev
  S19035C1(); // tgen
};
//SIG(1 S19035C1) C1{ VBC2{ BC3{ BC4{ m} VBC5{ BC6{ m} VBC7{ BC8{ v1}} Fi} vd} vd Fp[7] Fi} VBC4 VBC3 vd}


 S19035C1 ::~S19035C1(){ note_dtor("S19035C1", this);}
S19035C1 ::S19035C1(){ note_ctor("S19035C1", this);} // tgen

static void Test_S19035C1()
{
  extern Class_Descriptor cd_S19035C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,14)];
    init_test(&cd_S19035C1, buf);
    S19035C1 *dp, &lv = *(dp=new (buf) S19035C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,52), "sizeof(S19035C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19035C1)");
    check_base_class_offset(lv, (S836C39*)(S19035C3*)(S19035C2*), ABISELECT(8,4), "S19035C1");
    check_base_class_offset(lv, (S836C29*)(S19035C5*), ABISELECT(80,40), "S19035C1");
    check_base_class_offset(lv, (S19035C8*)(S19035C7*), ABISELECT(8,4), "S19035C1");
    check_base_class_offset(lv, (S19035C7*)(S19035C5*), ABISELECT(8,4), "S19035C1");
    check_base_class_offset(lv, (S19035C5*)(S19035C3*)(S19035C2*), ABISELECT(80,40), "S19035C1");
    /*is_ambiguous_... S19035C1::S19035C3 */ AMB_check_base_class_offset(lv, (S19035C5*)(S19035C3*), ABISELECT(80,40), "S19035C1");
    check_base_class_offset(lv, (S19035C3*)(S19035C2*), ABISELECT(8,4), "S19035C1");
    check_base_class_offset(lv, (S19035C2*), ABISELECT(8,4), "S19035C1");
    /*is_ambiguous_... S19035C1::S836C39 */ AMB_check_base_class_offset(lv, (S836C39*), ABISELECT(92,48), "S19035C1");
    /*is_ambiguous_... S19035C1::S19035C3 */ AMB_check_base_class_offset(lv, (S836C39*)(S19035C3*), 0, "S19035C1");
    /*is_ambiguous_... S19035C1::S19035C3 */ AMB_check_base_class_offset(lv, (S19035C3*), 0, "S19035C1");
    test_class_info(&lv, &cd_S19035C1);
    dp->~S19035C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19035C1(Test_S19035C1, "S19035C1", ABISELECT(96,52));

#else // __cplusplus

extern void _ZN8S19035C1C1Ev();
extern void _ZN8S19035C1D2Ev();
Name_Map name_map_S19035C1[] = {
  NSPAIR(_ZN8S19035C1C1Ev),
  NSPAIR(_ZN8S19035C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S836C39;
extern VTBL_ENTRY _ZTI7S836C39[];
extern Class_Descriptor cd_S836C29;
extern VTBL_ENTRY _ZTI7S836C29[];
extern Class_Descriptor cd_S19035C8;
extern VTBL_ENTRY _ZTI8S19035C8[];
extern  VTBL_ENTRY _ZTV8S19035C8[];
extern Class_Descriptor cd_S19035C7;
extern VTBL_ENTRY _ZTI8S19035C7[];
extern  VTBL_ENTRY _ZTV8S19035C7[];
extern Class_Descriptor cd_S19035C5;
extern VTBL_ENTRY _ZTI8S19035C5[];
extern  VTBL_ENTRY _ZTV8S19035C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19035C5[];
extern Class_Descriptor cd_S19035C3;
extern VTBL_ENTRY _ZTI8S19035C3[];
extern  VTBL_ENTRY _ZTV8S19035C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19035C3[];
extern Class_Descriptor cd_S19035C2;
extern VTBL_ENTRY _ZTI8S19035C2[];
extern  VTBL_ENTRY _ZTV8S19035C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19035C2[];
extern Class_Descriptor cd_S836C39;
extern VTBL_ENTRY _ZTI7S836C39[];
extern Class_Descriptor cd_S836C39;
extern VTBL_ENTRY _ZTI7S836C39[];
extern Class_Descriptor cd_S19035C3;
extern VTBL_ENTRY _ZTI8S19035C3[];
extern  VTBL_ENTRY _ZTV8S19035C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19035C3[];
static Base_Class bases_S19035C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S836C39,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S836C29,    ABISELECT(80,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19035C8,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S19035C7,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S19035C5,    ABISELECT(80,40), //bcp->offset
    21, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S19035C3,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S19035C2,    ABISELECT(8,4), //bcp->offset
    12, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S836C39,    ABISELECT(92,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S836C39,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S19035C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19035C1[];
extern void _ZN8S19035C82v1Ev();
extern void ABISELECT(_ZTv0_n48_N8S19035C1D1Ev,_ZTv0_n24_N8S19035C1D1Ev)();
extern void _ZN8S19035C1D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19035C1D0Ev,_ZTv0_n24_N8S19035C1D0Ev)();
extern void _ZN8S19035C1D0Ev() __attribute__((weak));
extern void _ZN8S19035C82v1Ev();
extern void ABISELECT(_ZTv0_n48_N8S19035C1D1Ev,_ZTv0_n24_N8S19035C1D1Ev)();
extern void ABISELECT(_ZThn8_N8S19035C1D1Ev,_ZThn4_N8S19035C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19035C1D0Ev,_ZTv0_n24_N8S19035C1D0Ev)();
extern void ABISELECT(_ZThn8_N8S19035C1D0Ev,_ZThn4_N8S19035C1D0Ev)() __attribute__((weak));
extern void _ZN8S19035C82v1Ev();
static  VTBL_ENTRY vtc_S19035C1[] = {
  0,
  ABISELECT(92,48),
  ABISELECT(8,4),
  0,
  ABISELECT(8,4),
  ABISELECT(80,40),
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S19035C1[0]),
  (VTBL_ENTRY)&_ZN8S19035C82v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19035C1D1Ev,_ZTv0_n24_N8S19035C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19035C1D0Ev,_ZTv0_n24_N8S19035C1D0Ev),
  ABISELECT(-8,-4),
  0,
  ABISELECT(72,36),
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S19035C1[0]),
  (VTBL_ENTRY)&_ZN8S19035C82v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19035C1D1Ev,_ZTv0_n24_N8S19035C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19035C1D0Ev,_ZTv0_n24_N8S19035C1D0Ev),
  ABISELECT(-72,-36),
  ABISELECT(-72,-36),
  ABISELECT(-80,-40),
  (VTBL_ENTRY)&(_ZTI8S19035C1[0]),
  (VTBL_ENTRY)&_ZN8S19035C82v1Ev,
};
extern VTBL_ENTRY _ZTV8S19035C1[];
extern void _ZN8S19035C82v1Ev();
extern void _ZN8S19035C2D1Ev();
extern void _ZN8S19035C2D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19035C2__8S19035C1[] = {
  0,
  ABISELECT(72,36),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19035C2[0]),
  (VTBL_ENTRY)&_ZN8S19035C82v1Ev,
  (VTBL_ENTRY)&_ZN8S19035C2D1Ev,
  (VTBL_ENTRY)&_ZN8S19035C2D0Ev,
};
extern void _ZN8S19035C82v1Ev();
extern void _ZN8S19035C3D1Ev();
extern void _ZN8S19035C3D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19035C38S19035C2__8S19035C1[] = {
  0,
  ABISELECT(72,36),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19035C3[0]),
  (VTBL_ENTRY)&_ZN8S19035C82v1Ev,
  (VTBL_ENTRY)&_ZN8S19035C3D1Ev,
  (VTBL_ENTRY)&_ZN8S19035C3D0Ev,
};
extern void _ZN8S19035C82v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19035C5__8S19035C38S19035C2__8S19035C1[] = {
  ABISELECT(-72,-36),
  ABISELECT(-72,-36),
  ABISELECT(-72,-36),
  (VTBL_ENTRY)&(_ZTI8S19035C3[0]),
  (VTBL_ENTRY)&_ZN8S19035C82v1Ev,
};
extern void _ZN8S19035C82v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19035C5__8S19035C2__8S19035C1[] = {
  ABISELECT(-72,-36),
  ABISELECT(-72,-36),
  ABISELECT(-72,-36),
  (VTBL_ENTRY)&(_ZTI8S19035C2[0]),
  (VTBL_ENTRY)&_ZN8S19035C82v1Ev,
};
extern void _ZN8S19035C82v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19035C5__8S19035C1[] = {
  ABISELECT(-72,-36),
  ABISELECT(-72,-36),
  0,
  (VTBL_ENTRY)&(_ZTI8S19035C5[0]),
  (VTBL_ENTRY)&_ZN8S19035C82v1Ev,
};
extern void _ZN8S19035C82v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19035C88S19035C7__8S19035C5__8S19035C1[] = {
  ABISELECT(72,36),
  (VTBL_ENTRY)&(_ZTI8S19035C5[0]),
  (VTBL_ENTRY)&_ZN8S19035C82v1Ev,
};
extern void _ZN8S19035C82v1Ev();
extern void _ZN8S19035C3D1Ev();
extern void _ZN8S19035C3D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19035C3__A1__8S19035C1[] = {
  ABISELECT(8,4),
  ABISELECT(80,40),
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S19035C3[0]),
  (VTBL_ENTRY)&_ZN8S19035C82v1Ev,
  (VTBL_ENTRY)&_ZN8S19035C3D1Ev,
  (VTBL_ENTRY)&_ZN8S19035C3D0Ev,
};
extern void _ZN8S19035C82v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19035C5__8S19035C3__A1__8S19035C1[] = {
  ABISELECT(-72,-36),
  ABISELECT(-72,-36),
  ABISELECT(-80,-40),
  (VTBL_ENTRY)&(_ZTI8S19035C3[0]),
  (VTBL_ENTRY)&_ZN8S19035C82v1Ev,
};
extern void _ZN8S19035C82v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19035C88S19035C7__8S19035C3__A1__8S19035C1[] = {
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S19035C3[0]),
  (VTBL_ENTRY)&_ZN8S19035C82v1Ev,
};
static  VTT_ENTRY vtt_S19035C1[] = {
  {&(_ZTV8S19035C1[9]),  9,26},
  {&(_ZTV8S19035C1[18]),  18,26},
  {&(_ZTV8S19035C1[25]),  25,26},
  {&(_ZTV8S19035C1[18]),  18,26},
  {&(_ZTV8S19035C1[9]),  9,26},
  {&(_tg__ZTV8S19035C2__8S19035C1[5]),  5,8},
  {&(_tg__ZTV8S19035C38S19035C2__8S19035C1[5]),  5,8},
  {&(_tg__ZTV8S19035C5__8S19035C38S19035C2__8S19035C1[4]),  4,5},
  {&(_tg__ZTV8S19035C38S19035C2__8S19035C1[5]),  5,8},
  {&(_tg__ZTV8S19035C5__8S19035C2__8S19035C1[4]),  4,5},
  {&(_tg__ZTV8S19035C2__8S19035C1[5]),  5,8},
  {&(_tg__ZTV8S19035C5__8S19035C1[4]),  4,5},
  {&(_tg__ZTV8S19035C88S19035C7__8S19035C5__8S19035C1[2]),  2,3},
  {&(_tg__ZTV8S19035C3__A1__8S19035C1[5]),  5,8},
  {&(_tg__ZTV8S19035C5__8S19035C3__A1__8S19035C1[4]),  4,5},
  {&(_tg__ZTV8S19035C88S19035C7__8S19035C3__A1__8S19035C1[2]),  2,3},
};
extern VTBL_ENTRY _ZTI8S19035C1[];
extern  VTBL_ENTRY _ZTV8S19035C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19035C1[];
static VTBL_ENTRY alt_thunk_names44[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19035C1D0Ev,_ZTv0_n24_N8S19035C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S19035C1D0Ev,_ZThn4_N8S19035C1D0Ev),
  (VTBL_ENTRY)_ZN8S19035C1D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19035C1D1Ev,_ZTv0_n24_N8S19035C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S19035C1D1Ev,_ZThn4_N8S19035C1D1Ev),
  (VTBL_ENTRY)_ZN8S19035C1D1Ev,
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19035C1 = {  "S19035C1", // class name
  bases_S19035C1, 10,
  &(vtc_S19035C1[0]), // expected_vtbl_contents
  &(vtt_S19035C1[0]), // expected_vtt_contents
  ABISELECT(96,52), // object size
  NSPAIRA(_ZTI8S19035C1),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S19035C1),26, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19035C1),16, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names44,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7066C2  {
  void *s7066c2f0[3];
  int s7066c2f1;
  ::S3409C4_nt s7066c2f2;
  virtual  ~S7066C2(); // _ZN7S7066C2D1Ev
  virtual void  v6(); // _ZN7S7066C22v6Ev
  virtual void  v7(); // _ZN7S7066C22v7Ev
  virtual void  v8(); // _ZN7S7066C22v8Ev
  virtual void  v9(); // _ZN7S7066C22v9Ev
  virtual void  v10(); // _ZN7S7066C23v10Ev
  virtual void  v11(); // _ZN7S7066C23v11Ev
  virtual void  v12(); // _ZN7S7066C23v12Ev
  virtual void  v13(); // _ZN7S7066C23v13Ev
  S7066C2(); // tgen
};
//SIG(-1 S7066C2) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 Fp[3] Fi FC2{ Fl}}


 S7066C2 ::~S7066C2(){ note_dtor("S7066C2", this);}
void  S7066C2 ::v6(){vfunc_called(this, "_ZN7S7066C22v6Ev");}
void  S7066C2 ::v7(){vfunc_called(this, "_ZN7S7066C22v7Ev");}
void  S7066C2 ::v8(){vfunc_called(this, "_ZN7S7066C22v8Ev");}
void  S7066C2 ::v9(){vfunc_called(this, "_ZN7S7066C22v9Ev");}
void  S7066C2 ::v10(){vfunc_called(this, "_ZN7S7066C23v10Ev");}
void  S7066C2 ::v11(){vfunc_called(this, "_ZN7S7066C23v11Ev");}
void  S7066C2 ::v12(){vfunc_called(this, "_ZN7S7066C23v12Ev");}
void  S7066C2 ::v13(){vfunc_called(this, "_ZN7S7066C23v13Ev");}
S7066C2 ::S7066C2(){ note_ctor("S7066C2", this);} // tgen

static void Test_S7066C2()
{
  extern Class_Descriptor cd_S7066C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[7];
    init_test(&cd_S7066C2, buf);
    S7066C2 *dp, &lv = *(dp=new (buf) S7066C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,24), "sizeof(S7066C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7066C2)");
    check_field_offset(lv, s7066c2f0, ABISELECT(8,4), "S7066C2.s7066c2f0");
    check_field_offset(lv, s7066c2f1, ABISELECT(32,16), "S7066C2.s7066c2f1");
    check_field_offset(lv, s7066c2f2, ABISELECT(40,20), "S7066C2.s7066c2f2");
    test_class_info(&lv, &cd_S7066C2);
    dp->~S7066C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7066C2(Test_S7066C2, "S7066C2", ABISELECT(48,24));

#else // __cplusplus

extern void _ZN7S7066C2C1Ev();
extern void _ZN7S7066C2D1Ev();
Name_Map name_map_S7066C2[] = {
  NSPAIR(_ZN7S7066C2C1Ev),
  NSPAIR(_ZN7S7066C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S7066C2[];
extern void _ZN7S7066C2D1Ev();
extern void _ZN7S7066C2D0Ev();
extern void _ZN7S7066C22v6Ev();
extern void _ZN7S7066C22v7Ev();
extern void _ZN7S7066C22v8Ev();
extern void _ZN7S7066C22v9Ev();
extern void _ZN7S7066C23v10Ev();
extern void _ZN7S7066C23v11Ev();
extern void _ZN7S7066C23v12Ev();
extern void _ZN7S7066C23v13Ev();
static  VTBL_ENTRY vtc_S7066C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7066C2[0]),
  (VTBL_ENTRY)&_ZN7S7066C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7066C2D0Ev,
  (VTBL_ENTRY)&_ZN7S7066C22v6Ev,
  (VTBL_ENTRY)&_ZN7S7066C22v7Ev,
  (VTBL_ENTRY)&_ZN7S7066C22v8Ev,
  (VTBL_ENTRY)&_ZN7S7066C22v9Ev,
  (VTBL_ENTRY)&_ZN7S7066C23v10Ev,
  (VTBL_ENTRY)&_ZN7S7066C23v11Ev,
  (VTBL_ENTRY)&_ZN7S7066C23v12Ev,
  (VTBL_ENTRY)&_ZN7S7066C23v13Ev,
};
extern VTBL_ENTRY _ZTI7S7066C2[];
extern  VTBL_ENTRY _ZTV7S7066C2[];
Class_Descriptor cd_S7066C2 = {  "S7066C2", // class name
  0,0,//no base classes
  &(vtc_S7066C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,24), // object size
  NSPAIRA(_ZTI7S7066C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S7066C2),12, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7066C1  : S7066C2 {
  virtual  ~S7066C1(); // _ZN7S7066C1D1Ev
  virtual void  v1(); // _ZN7S7066C12v1Ev
  virtual void  v2(); // _ZN7S7066C12v2Ev
  virtual void  v3(); // _ZN7S7066C12v3Ev
  virtual void  v4(); // _ZN7S7066C12v4Ev
  virtual void  v5(); // _ZN7S7066C12v5Ev
  S7066C1(); // tgen
};
//SIG(1 S7066C1) C1{ BC2{ vd v6 v7 v8 v9 v10 v11 v12 v13 Fp[3] Fi FC3{ Fl}} vd v1 v2 v3 v4 v5}


 S7066C1 ::~S7066C1(){ note_dtor("S7066C1", this);}
void  S7066C1 ::v1(){vfunc_called(this, "_ZN7S7066C12v1Ev");}
void  S7066C1 ::v2(){vfunc_called(this, "_ZN7S7066C12v2Ev");}
void  S7066C1 ::v3(){vfunc_called(this, "_ZN7S7066C12v3Ev");}
void  S7066C1 ::v4(){vfunc_called(this, "_ZN7S7066C12v4Ev");}
void  S7066C1 ::v5(){vfunc_called(this, "_ZN7S7066C12v5Ev");}
S7066C1 ::S7066C1(){ note_ctor("S7066C1", this);} // tgen

static void Test_S7066C1()
{
  extern Class_Descriptor cd_S7066C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[7];
    init_test(&cd_S7066C1, buf);
    S7066C1 *dp, &lv = *(dp=new (buf) S7066C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,24), "sizeof(S7066C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7066C1)");
    check_base_class_offset(lv, (S7066C2*), 0, "S7066C1");
    test_class_info(&lv, &cd_S7066C1);
    dp->~S7066C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7066C1(Test_S7066C1, "S7066C1", ABISELECT(48,24));

#else // __cplusplus

extern void _ZN7S7066C1C1Ev();
extern void _ZN7S7066C1D1Ev();
Name_Map name_map_S7066C1[] = {
  NSPAIR(_ZN7S7066C1C1Ev),
  NSPAIR(_ZN7S7066C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7066C2;
extern VTBL_ENTRY _ZTI7S7066C2[];
extern  VTBL_ENTRY _ZTV7S7066C2[];
static Base_Class bases_S7066C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7066C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7066C1[];
extern void _ZN7S7066C1D1Ev();
extern void _ZN7S7066C1D0Ev();
extern void _ZN7S7066C22v6Ev();
extern void _ZN7S7066C22v7Ev();
extern void _ZN7S7066C22v8Ev();
extern void _ZN7S7066C22v9Ev();
extern void _ZN7S7066C23v10Ev();
extern void _ZN7S7066C23v11Ev();
extern void _ZN7S7066C23v12Ev();
extern void _ZN7S7066C23v13Ev();
extern void _ZN7S7066C12v1Ev();
extern void _ZN7S7066C12v2Ev();
extern void _ZN7S7066C12v3Ev();
extern void _ZN7S7066C12v4Ev();
extern void _ZN7S7066C12v5Ev();
static  VTBL_ENTRY vtc_S7066C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7066C1[0]),
  (VTBL_ENTRY)&_ZN7S7066C1D1Ev,
  (VTBL_ENTRY)&_ZN7S7066C1D0Ev,
  (VTBL_ENTRY)&_ZN7S7066C22v6Ev,
  (VTBL_ENTRY)&_ZN7S7066C22v7Ev,
  (VTBL_ENTRY)&_ZN7S7066C22v8Ev,
  (VTBL_ENTRY)&_ZN7S7066C22v9Ev,
  (VTBL_ENTRY)&_ZN7S7066C23v10Ev,
  (VTBL_ENTRY)&_ZN7S7066C23v11Ev,
  (VTBL_ENTRY)&_ZN7S7066C23v12Ev,
  (VTBL_ENTRY)&_ZN7S7066C23v13Ev,
  (VTBL_ENTRY)&_ZN7S7066C12v1Ev,
  (VTBL_ENTRY)&_ZN7S7066C12v2Ev,
  (VTBL_ENTRY)&_ZN7S7066C12v3Ev,
  (VTBL_ENTRY)&_ZN7S7066C12v4Ev,
  (VTBL_ENTRY)&_ZN7S7066C12v5Ev,
};
extern VTBL_ENTRY _ZTI7S7066C1[];
extern  VTBL_ENTRY _ZTV7S7066C1[];
Class_Descriptor cd_S7066C1 = {  "S7066C1", // class name
  bases_S7066C1, 1,
  &(vtc_S7066C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,24), // object size
  NSPAIRA(_ZTI7S7066C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S7066C1),17, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S12418C5_nt  {
  int s12418c5f0[3];
  void  mf12418c5(); // _ZN11S12418C5_nt9mf12418c5Ev
};
//SIG(-1 S12418C5_nt) C1{ m Fi[3]}


void  S12418C5_nt ::mf12418c5(){}

//skip512 S12418C5_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S12418C6  {
  char s12418c6f0;
  ::S235C7_nt s12418c6f1;
};
//SIG(-1 S12418C6) C1{ Fc FC2{ m Fi[2]}}



static void Test_S12418C6()
{
  {
    init_simple_test("S12418C6");
    S12418C6 lv;
    check2(sizeof(lv), 12, "sizeof(S12418C6)");
    check2(__alignof__(lv), 4, "__alignof__(S12418C6)");
    check_field_offset(lv, s12418c6f0, 0, "S12418C6.s12418c6f0");
    check_field_offset(lv, s12418c6f1, 4, "S12418C6.s12418c6f1");
  }
}
static Arrange_To_Call_Me vS12418C6(Test_S12418C6, "S12418C6", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S12418C2  {
  int s12418c2f0;
  ::S285C19 s12418c2f1;
  ::S235C20_nt s12418c2f2;
  ::S12418C5_nt s12418c2f3;
  ::S12418C6 s12418c2f4;
};
//SIG(-1 S12418C2) C1{ Fi FC2{ m Fi[4]} FC3{ m Fi[3]} FC4{ m Fi[3]} FC5{ Fc FC6{ m Fi[2]}}}



static void Test_S12418C2()
{
  {
    init_simple_test("S12418C2");
    S12418C2 lv;
    check2(sizeof(lv), 56, "sizeof(S12418C2)");
    check2(__alignof__(lv), 4, "__alignof__(S12418C2)");
    check_field_offset(lv, s12418c2f0, 0, "S12418C2.s12418c2f0");
    check_field_offset(lv, s12418c2f1, 4, "S12418C2.s12418c2f1");
    check_field_offset(lv, s12418c2f2, 20, "S12418C2.s12418c2f2");
    check_field_offset(lv, s12418c2f3, 32, "S12418C2.s12418c2f3");
    check_field_offset(lv, s12418c2f4, 44, "S12418C2.s12418c2f4");
  }
}
static Arrange_To_Call_Me vS12418C2(Test_S12418C2, "S12418C2", 56);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S12418C1  {
  int s12418c1f0;
  ::S12418C2 s12418c1f1;
};
//SIG(1 S12418C1) C1{ Fi FC2{ Fi FC3{ m Fi[4]} FC4{ m Fi[3]} FC5{ m Fi[3]} FC6{ Fc FC7{ m Fi[2]}}}}



static void Test_S12418C1()
{
  {
    init_simple_test("S12418C1");
    S12418C1 lv;
    check2(sizeof(lv), 60, "sizeof(S12418C1)");
    check2(__alignof__(lv), 4, "__alignof__(S12418C1)");
    check_field_offset(lv, s12418c1f0, 0, "S12418C1.s12418c1f0");
    check_field_offset(lv, s12418c1f1, 4, "S12418C1.s12418c1f1");
  }
}
static Arrange_To_Call_Me vS12418C1(Test_S12418C1, "S12418C1", 60);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S16493C1  {
  ::S2226C13 s16493c1f0;
  void *s16493c1f1;
  short s16493c1f2;
  int s16493c1f3;
  void  mf16493c1(); // _ZN8S16493C19mf16493c1Ev
};
//SIG(1 S16493C1) C1{ m FC2{ vd m Fp Fi[3] FC3{ m FC4{ m FL[2] Fi[2]} Fi[2]} FC3} Fp Fs Fi}


void  S16493C1 ::mf16493c1(){}

static void Test_S16493C1()
{
  {
    init_simple_test("S16493C1");
    S16493C1 lv;
    check2(sizeof(lv), ABISELECT(112,96), "sizeof(S16493C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S16493C1)");
    check_field_offset(lv, s16493c1f0, 0, "S16493C1.s16493c1f0");
    check_field_offset(lv, s16493c1f1, ABISELECT(96,84), "S16493C1.s16493c1f1");
    check_field_offset(lv, s16493c1f2, ABISELECT(104,88), "S16493C1.s16493c1f2");
    check_field_offset(lv, s16493c1f3, ABISELECT(108,92), "S16493C1.s16493c1f3");
  }
}
static Arrange_To_Call_Me vS16493C1(Test_S16493C1, "S16493C1", ABISELECT(112,96));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4997C3  {
  virtual  ~S4997C3(); // _ZN7S4997C3D1Ev
  virtual void  v3(); // _ZN7S4997C32v3Ev
  virtual void  v4(); // _ZN7S4997C32v4Ev
  virtual void  v5(); // _ZN7S4997C32v5Ev
  virtual void  v6(); // _ZN7S4997C32v6Ev
  S4997C3(); // tgen
};
//SIG(-1 S4997C3) C1{ vd v1 v2 v3 v4}


 S4997C3 ::~S4997C3(){ note_dtor("S4997C3", this);}
void  S4997C3 ::v3(){vfunc_called(this, "_ZN7S4997C32v3Ev");}
void  S4997C3 ::v4(){vfunc_called(this, "_ZN7S4997C32v4Ev");}
void  S4997C3 ::v5(){vfunc_called(this, "_ZN7S4997C32v5Ev");}
void  S4997C3 ::v6(){vfunc_called(this, "_ZN7S4997C32v6Ev");}
S4997C3 ::S4997C3(){ note_ctor("S4997C3", this);} // tgen

static void Test_S4997C3()
{
  extern Class_Descriptor cd_S4997C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S4997C3, buf);
    S4997C3 *dp, &lv = *(dp=new (buf) S4997C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S4997C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4997C3)");
    test_class_info(&lv, &cd_S4997C3);
    dp->~S4997C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4997C3(Test_S4997C3, "S4997C3", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S4997C3C1Ev();
extern void _ZN7S4997C3D1Ev();
Name_Map name_map_S4997C3[] = {
  NSPAIR(_ZN7S4997C3C1Ev),
  NSPAIR(_ZN7S4997C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4997C3[];
extern void _ZN7S4997C3D1Ev();
extern void _ZN7S4997C3D0Ev();
extern void _ZN7S4997C32v3Ev();
extern void _ZN7S4997C32v4Ev();
extern void _ZN7S4997C32v5Ev();
extern void _ZN7S4997C32v6Ev();
static  VTBL_ENTRY vtc_S4997C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4997C3[0]),
  (VTBL_ENTRY)&_ZN7S4997C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4997C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4997C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4997C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4997C32v5Ev,
  (VTBL_ENTRY)&_ZN7S4997C32v6Ev,
};
extern VTBL_ENTRY _ZTI7S4997C3[];
extern  VTBL_ENTRY _ZTV7S4997C3[];
Class_Descriptor cd_S4997C3 = {  "S4997C3", // class name
  0,0,//no base classes
  &(vtc_S4997C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S4997C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4997C3),8, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4997C2  : S4997C3 {
  virtual  ~S4997C2(); // _ZN7S4997C2D1Ev
  virtual void  v7(); // _ZN7S4997C22v7Ev
  virtual void  v8(); // _ZN7S4997C22v8Ev
  virtual void  v9(); // _ZN7S4997C22v9Ev
  virtual void  v10(); // _ZN7S4997C23v10Ev
  virtual void  v11(); // _ZN7S4997C23v11Ev
  S4997C2(); // tgen
};
//SIG(-1 S4997C2) C1{ BC2{ vd v6 v7 v8 v9} vd v1 v2 v3 v4 v5}


 S4997C2 ::~S4997C2(){ note_dtor("S4997C2", this);}
void  S4997C2 ::v7(){vfunc_called(this, "_ZN7S4997C22v7Ev");}
void  S4997C2 ::v8(){vfunc_called(this, "_ZN7S4997C22v8Ev");}
void  S4997C2 ::v9(){vfunc_called(this, "_ZN7S4997C22v9Ev");}
void  S4997C2 ::v10(){vfunc_called(this, "_ZN7S4997C23v10Ev");}
void  S4997C2 ::v11(){vfunc_called(this, "_ZN7S4997C23v11Ev");}
S4997C2 ::S4997C2(){ note_ctor("S4997C2", this);} // tgen

static void Test_S4997C2()
{
  extern Class_Descriptor cd_S4997C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S4997C2, buf);
    S4997C2 *dp, &lv = *(dp=new (buf) S4997C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S4997C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4997C2)");
    check_base_class_offset(lv, (S4997C3*), 0, "S4997C2");
    test_class_info(&lv, &cd_S4997C2);
    dp->~S4997C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4997C2(Test_S4997C2, "S4997C2", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S4997C2C1Ev();
extern void _ZN7S4997C2D1Ev();
Name_Map name_map_S4997C2[] = {
  NSPAIR(_ZN7S4997C2C1Ev),
  NSPAIR(_ZN7S4997C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4997C3;
extern VTBL_ENTRY _ZTI7S4997C3[];
extern  VTBL_ENTRY _ZTV7S4997C3[];
static Base_Class bases_S4997C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4997C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4997C2[];
extern void _ZN7S4997C2D1Ev();
extern void _ZN7S4997C2D0Ev();
extern void _ZN7S4997C32v3Ev();
extern void _ZN7S4997C32v4Ev();
extern void _ZN7S4997C32v5Ev();
extern void _ZN7S4997C32v6Ev();
extern void _ZN7S4997C22v7Ev();
extern void _ZN7S4997C22v8Ev();
extern void _ZN7S4997C22v9Ev();
extern void _ZN7S4997C23v10Ev();
extern void _ZN7S4997C23v11Ev();
static  VTBL_ENTRY vtc_S4997C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4997C2[0]),
  (VTBL_ENTRY)&_ZN7S4997C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4997C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4997C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4997C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4997C32v5Ev,
  (VTBL_ENTRY)&_ZN7S4997C32v6Ev,
  (VTBL_ENTRY)&_ZN7S4997C22v7Ev,
  (VTBL_ENTRY)&_ZN7S4997C22v8Ev,
  (VTBL_ENTRY)&_ZN7S4997C22v9Ev,
  (VTBL_ENTRY)&_ZN7S4997C23v10Ev,
  (VTBL_ENTRY)&_ZN7S4997C23v11Ev,
};
extern VTBL_ENTRY _ZTI7S4997C2[];
extern  VTBL_ENTRY _ZTV7S4997C2[];
Class_Descriptor cd_S4997C2 = {  "S4997C2", // class name
  bases_S4997C2, 1,
  &(vtc_S4997C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S4997C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4997C2),13, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4997C1  : S4997C2 {
  char s4997c1f0;
  short s4997c1f1[2];
  void *s4997c1f2[3];
  virtual  ~S4997C1(); // _ZN7S4997C1D1Ev
  virtual void  v1(); // _ZN7S4997C12v1Ev
  virtual void  v2(); // _ZN7S4997C12v2Ev
  S4997C1(); // tgen
};
//SIG(1 S4997C1) C1{ BC2{ BC3{ vd v3 v4 v5 v6} vd v7 v8 v9 v10 v11} vd v1 v2 Fc Fs[2] Fp[3]}


 S4997C1 ::~S4997C1(){ note_dtor("S4997C1", this);}
void  S4997C1 ::v1(){vfunc_called(this, "_ZN7S4997C12v1Ev");}
void  S4997C1 ::v2(){vfunc_called(this, "_ZN7S4997C12v2Ev");}
S4997C1 ::S4997C1(){ note_ctor("S4997C1", this);} // tgen

static void Test_S4997C1()
{
  extern Class_Descriptor cd_S4997C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,7)];
    init_test(&cd_S4997C1, buf);
    S4997C1 *dp, &lv = *(dp=new (buf) S4997C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,24), "sizeof(S4997C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4997C1)");
    check_base_class_offset(lv, (S4997C3*)(S4997C2*), 0, "S4997C1");
    check_base_class_offset(lv, (S4997C2*), 0, "S4997C1");
    check_field_offset(lv, s4997c1f0, ABISELECT(8,4), "S4997C1.s4997c1f0");
    check_field_offset(lv, s4997c1f1, ABISELECT(10,6), "S4997C1.s4997c1f1");
    check_field_offset(lv, s4997c1f2, ABISELECT(16,12), "S4997C1.s4997c1f2");
    test_class_info(&lv, &cd_S4997C1);
    dp->~S4997C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4997C1(Test_S4997C1, "S4997C1", ABISELECT(40,24));

#else // __cplusplus

extern void _ZN7S4997C1C1Ev();
extern void _ZN7S4997C1D1Ev();
Name_Map name_map_S4997C1[] = {
  NSPAIR(_ZN7S4997C1C1Ev),
  NSPAIR(_ZN7S4997C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4997C3;
extern VTBL_ENTRY _ZTI7S4997C3[];
extern  VTBL_ENTRY _ZTV7S4997C3[];
extern Class_Descriptor cd_S4997C2;
extern VTBL_ENTRY _ZTI7S4997C2[];
extern  VTBL_ENTRY _ZTV7S4997C2[];
static Base_Class bases_S4997C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4997C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S4997C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4997C1[];
extern void _ZN7S4997C1D1Ev();
extern void _ZN7S4997C1D0Ev();
extern void _ZN7S4997C32v3Ev();
extern void _ZN7S4997C32v4Ev();
extern void _ZN7S4997C32v5Ev();
extern void _ZN7S4997C32v6Ev();
extern void _ZN7S4997C22v7Ev();
extern void _ZN7S4997C22v8Ev();
extern void _ZN7S4997C22v9Ev();
extern void _ZN7S4997C23v10Ev();
extern void _ZN7S4997C23v11Ev();
extern void _ZN7S4997C12v1Ev();
extern void _ZN7S4997C12v2Ev();
static  VTBL_ENTRY vtc_S4997C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4997C1[0]),
  (VTBL_ENTRY)&_ZN7S4997C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4997C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4997C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4997C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4997C32v5Ev,
  (VTBL_ENTRY)&_ZN7S4997C32v6Ev,
  (VTBL_ENTRY)&_ZN7S4997C22v7Ev,
  (VTBL_ENTRY)&_ZN7S4997C22v8Ev,
  (VTBL_ENTRY)&_ZN7S4997C22v9Ev,
  (VTBL_ENTRY)&_ZN7S4997C23v10Ev,
  (VTBL_ENTRY)&_ZN7S4997C23v11Ev,
  (VTBL_ENTRY)&_ZN7S4997C12v1Ev,
  (VTBL_ENTRY)&_ZN7S4997C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S4997C1[];
extern  VTBL_ENTRY _ZTV7S4997C1[];
Class_Descriptor cd_S4997C1 = {  "S4997C1", // class name
  bases_S4997C1, 2,
  &(vtc_S4997C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,24), // object size
  NSPAIRA(_ZTI7S4997C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4997C1),15, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S943C4  : S20956C14_nt {
  virtual  ~S943C4(); // _ZN6S943C4D1Ev
  virtual void  v3(); // _ZN6S943C42v3Ev
  virtual void  v4(); // _ZN6S943C42v4Ev
  virtual void  v5(); // _ZN6S943C42v5Ev
  S943C4(); // tgen
};
//SIG(-1 S943C4) C1{ BC2{} vd v1 v2 v3}


 S943C4 ::~S943C4(){ note_dtor("S943C4", this);}
void  S943C4 ::v3(){vfunc_called(this, "_ZN6S943C42v3Ev");}
void  S943C4 ::v4(){vfunc_called(this, "_ZN6S943C42v4Ev");}
void  S943C4 ::v5(){vfunc_called(this, "_ZN6S943C42v5Ev");}
S943C4 ::S943C4(){ note_ctor("S943C4", this);} // tgen

static void Test_S943C4()
{
  extern Class_Descriptor cd_S943C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S943C4, buf);
    S943C4 *dp, &lv = *(dp=new (buf) S943C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S943C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S943C4)");
    check_base_class_offset(lv, (S20956C14_nt*), 0, "S943C4");
    test_class_info(&lv, &cd_S943C4);
    dp->~S943C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS943C4(Test_S943C4, "S943C4", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN6S943C4C1Ev();
extern void _ZN6S943C4D1Ev();
Name_Map name_map_S943C4[] = {
  NSPAIR(_ZN6S943C4C1Ev),
  NSPAIR(_ZN6S943C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20956C14_nt;
extern VTBL_ENTRY _ZTI12S20956C14_nt[];
static Base_Class bases_S943C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20956C14_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S943C4[];
extern void _ZN6S943C4D1Ev();
extern void _ZN6S943C4D0Ev();
extern void _ZN6S943C42v3Ev();
extern void _ZN6S943C42v4Ev();
extern void _ZN6S943C42v5Ev();
static  VTBL_ENTRY vtc_S943C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S943C4[0]),
  (VTBL_ENTRY)&_ZN6S943C4D1Ev,
  (VTBL_ENTRY)&_ZN6S943C4D0Ev,
  (VTBL_ENTRY)&_ZN6S943C42v3Ev,
  (VTBL_ENTRY)&_ZN6S943C42v4Ev,
  (VTBL_ENTRY)&_ZN6S943C42v5Ev,
};
extern VTBL_ENTRY _ZTI6S943C4[];
extern  VTBL_ENTRY _ZTV6S943C4[];
Class_Descriptor cd_S943C4 = {  "S943C4", // class name
  bases_S943C4, 1,
  &(vtc_S943C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI6S943C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S943C4),7, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S943C3  : S943C4 {
  char s943c3f0;
  virtual  ~S943C3(); // _ZN6S943C3D1Ev
  virtual void  v6(); // _ZN6S943C32v6Ev
  virtual void  v7(); // _ZN6S943C32v7Ev
  S943C3(); // tgen
};
//SIG(-1 S943C3) C1{ BC2{ BC3{} vd v3 v4 v5} vd v1 v2 Fc}


 S943C3 ::~S943C3(){ note_dtor("S943C3", this);}
void  S943C3 ::v6(){vfunc_called(this, "_ZN6S943C32v6Ev");}
void  S943C3 ::v7(){vfunc_called(this, "_ZN6S943C32v7Ev");}
S943C3 ::S943C3(){ note_ctor("S943C3", this);} // tgen

static void Test_S943C3()
{
  extern Class_Descriptor cd_S943C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S943C3, buf);
    S943C3 *dp, &lv = *(dp=new (buf) S943C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S943C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S943C3)");
    check_base_class_offset(lv, (S20956C14_nt*)(S943C4*), 0, "S943C3");
    check_base_class_offset(lv, (S943C4*), 0, "S943C3");
    check_field_offset(lv, s943c3f0, ABISELECT(8,4), "S943C3.s943c3f0");
    test_class_info(&lv, &cd_S943C3);
    dp->~S943C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS943C3(Test_S943C3, "S943C3", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN6S943C3C1Ev();
extern void _ZN6S943C3D1Ev();
Name_Map name_map_S943C3[] = {
  NSPAIR(_ZN6S943C3C1Ev),
  NSPAIR(_ZN6S943C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20956C14_nt;
extern VTBL_ENTRY _ZTI12S20956C14_nt[];
extern Class_Descriptor cd_S943C4;
extern VTBL_ENTRY _ZTI6S943C4[];
extern  VTBL_ENTRY _ZTV6S943C4[];
static Base_Class bases_S943C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20956C14_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S943C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S943C3[];
extern void _ZN6S943C3D1Ev();
extern void _ZN6S943C3D0Ev();
extern void _ZN6S943C42v3Ev();
extern void _ZN6S943C42v4Ev();
extern void _ZN6S943C42v5Ev();
extern void _ZN6S943C32v6Ev();
extern void _ZN6S943C32v7Ev();
static  VTBL_ENTRY vtc_S943C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S943C3[0]),
  (VTBL_ENTRY)&_ZN6S943C3D1Ev,
  (VTBL_ENTRY)&_ZN6S943C3D0Ev,
  (VTBL_ENTRY)&_ZN6S943C42v3Ev,
  (VTBL_ENTRY)&_ZN6S943C42v4Ev,
  (VTBL_ENTRY)&_ZN6S943C42v5Ev,
  (VTBL_ENTRY)&_ZN6S943C32v6Ev,
  (VTBL_ENTRY)&_ZN6S943C32v7Ev,
};
extern VTBL_ENTRY _ZTI6S943C3[];
extern  VTBL_ENTRY _ZTV6S943C3[];
Class_Descriptor cd_S943C3 = {  "S943C3", // class name
  bases_S943C3, 2,
  &(vtc_S943C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI6S943C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S943C3),9, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S943C2  : S943C3 {
  void *s943c2f0;
  int s943c2f1;
  char s943c2f2;
  virtual  ~S943C2(); // _ZN6S943C2D1Ev
  virtual void  v8(); // _ZN6S943C22v8Ev
  S943C2(); // tgen
};
//SIG(-1 S943C2) C1{ BC2{ BC3{ BC4{} vd v2 v3 v4} vd v5 v6 Fc} vd v1 Fp Fi Fc}


 S943C2 ::~S943C2(){ note_dtor("S943C2", this);}
void  S943C2 ::v8(){vfunc_called(this, "_ZN6S943C22v8Ev");}
S943C2 ::S943C2(){ note_ctor("S943C2", this);} // tgen

static void Test_S943C2()
{
  extern Class_Descriptor cd_S943C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,6)];
    init_test(&cd_S943C2, buf);
    S943C2 *dp, &lv = *(dp=new (buf) S943C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S943C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S943C2)");
    check_base_class_offset(lv, (S20956C14_nt*)(S943C4*)(S943C3*), 0, "S943C2");
    check_base_class_offset(lv, (S943C4*)(S943C3*), 0, "S943C2");
    check_base_class_offset(lv, (S943C3*), 0, "S943C2");
    check_field_offset(lv, s943c2f0, ABISELECT(16,8), "S943C2.s943c2f0");
    check_field_offset(lv, s943c2f1, ABISELECT(24,12), "S943C2.s943c2f1");
    check_field_offset(lv, s943c2f2, ABISELECT(28,16), "S943C2.s943c2f2");
    test_class_info(&lv, &cd_S943C2);
    dp->~S943C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS943C2(Test_S943C2, "S943C2", ABISELECT(32,20));

#else // __cplusplus

extern void _ZN6S943C2C1Ev();
extern void _ZN6S943C2D1Ev();
Name_Map name_map_S943C2[] = {
  NSPAIR(_ZN6S943C2C1Ev),
  NSPAIR(_ZN6S943C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20956C14_nt;
extern VTBL_ENTRY _ZTI12S20956C14_nt[];
extern Class_Descriptor cd_S943C4;
extern VTBL_ENTRY _ZTI6S943C4[];
extern  VTBL_ENTRY _ZTV6S943C4[];
extern Class_Descriptor cd_S943C3;
extern VTBL_ENTRY _ZTI6S943C3[];
extern  VTBL_ENTRY _ZTV6S943C3[];
static Base_Class bases_S943C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20956C14_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S943C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S943C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S943C2[];
extern void _ZN6S943C2D1Ev();
extern void _ZN6S943C2D0Ev();
extern void _ZN6S943C42v3Ev();
extern void _ZN6S943C42v4Ev();
extern void _ZN6S943C42v5Ev();
extern void _ZN6S943C32v6Ev();
extern void _ZN6S943C32v7Ev();
extern void _ZN6S943C22v8Ev();
static  VTBL_ENTRY vtc_S943C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S943C2[0]),
  (VTBL_ENTRY)&_ZN6S943C2D1Ev,
  (VTBL_ENTRY)&_ZN6S943C2D0Ev,
  (VTBL_ENTRY)&_ZN6S943C42v3Ev,
  (VTBL_ENTRY)&_ZN6S943C42v4Ev,
  (VTBL_ENTRY)&_ZN6S943C42v5Ev,
  (VTBL_ENTRY)&_ZN6S943C32v6Ev,
  (VTBL_ENTRY)&_ZN6S943C32v7Ev,
  (VTBL_ENTRY)&_ZN6S943C22v8Ev,
};
extern VTBL_ENTRY _ZTI6S943C2[];
extern  VTBL_ENTRY _ZTV6S943C2[];
Class_Descriptor cd_S943C2 = {  "S943C2", // class name
  bases_S943C2, 3,
  &(vtc_S943C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,20), // object size
  NSPAIRA(_ZTI6S943C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S943C2),10, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S943C1  : S943C2 {
  virtual  ~S943C1(); // _ZN6S943C1D1Ev
  virtual void  v1(); // _ZN6S943C12v1Ev
  virtual void  v2(); // _ZN6S943C12v2Ev
  S943C1(); // tgen
};
//SIG(1 S943C1) C1{ BC2{ BC3{ BC4{ BC5{} vd v3 v4 v5} vd v6 v7 Fc} vd v8 Fp Fi Fc} vd v1 v2}


 S943C1 ::~S943C1(){ note_dtor("S943C1", this);}
void  S943C1 ::v1(){vfunc_called(this, "_ZN6S943C12v1Ev");}
void  S943C1 ::v2(){vfunc_called(this, "_ZN6S943C12v2Ev");}
S943C1 ::S943C1(){ note_ctor("S943C1", this);} // tgen

static void Test_S943C1()
{
  extern Class_Descriptor cd_S943C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,6)];
    init_test(&cd_S943C1, buf);
    S943C1 *dp, &lv = *(dp=new (buf) S943C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S943C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S943C1)");
    check_base_class_offset(lv, (S20956C14_nt*)(S943C4*)(S943C3*)(S943C2*), 0, "S943C1");
    check_base_class_offset(lv, (S943C4*)(S943C3*)(S943C2*), 0, "S943C1");
    check_base_class_offset(lv, (S943C3*)(S943C2*), 0, "S943C1");
    check_base_class_offset(lv, (S943C2*), 0, "S943C1");
    test_class_info(&lv, &cd_S943C1);
    dp->~S943C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS943C1(Test_S943C1, "S943C1", ABISELECT(32,20));

#else // __cplusplus

extern void _ZN6S943C1C1Ev();
extern void _ZN6S943C1D1Ev();
Name_Map name_map_S943C1[] = {
  NSPAIR(_ZN6S943C1C1Ev),
  NSPAIR(_ZN6S943C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20956C14_nt;
extern VTBL_ENTRY _ZTI12S20956C14_nt[];
extern Class_Descriptor cd_S943C4;
extern VTBL_ENTRY _ZTI6S943C4[];
extern  VTBL_ENTRY _ZTV6S943C4[];
extern Class_Descriptor cd_S943C3;
extern VTBL_ENTRY _ZTI6S943C3[];
extern  VTBL_ENTRY _ZTV6S943C3[];
extern Class_Descriptor cd_S943C2;
extern VTBL_ENTRY _ZTI6S943C2[];
extern  VTBL_ENTRY _ZTV6S943C2[];
static Base_Class bases_S943C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20956C14_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S943C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S943C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S943C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S943C1[];
extern void _ZN6S943C1D1Ev();
extern void _ZN6S943C1D0Ev();
extern void _ZN6S943C42v3Ev();
extern void _ZN6S943C42v4Ev();
extern void _ZN6S943C42v5Ev();
extern void _ZN6S943C32v6Ev();
extern void _ZN6S943C32v7Ev();
extern void _ZN6S943C22v8Ev();
extern void _ZN6S943C12v1Ev();
extern void _ZN6S943C12v2Ev();
static  VTBL_ENTRY vtc_S943C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S943C1[0]),
  (VTBL_ENTRY)&_ZN6S943C1D1Ev,
  (VTBL_ENTRY)&_ZN6S943C1D0Ev,
  (VTBL_ENTRY)&_ZN6S943C42v3Ev,
  (VTBL_ENTRY)&_ZN6S943C42v4Ev,
  (VTBL_ENTRY)&_ZN6S943C42v5Ev,
  (VTBL_ENTRY)&_ZN6S943C32v6Ev,
  (VTBL_ENTRY)&_ZN6S943C32v7Ev,
  (VTBL_ENTRY)&_ZN6S943C22v8Ev,
  (VTBL_ENTRY)&_ZN6S943C12v1Ev,
  (VTBL_ENTRY)&_ZN6S943C12v2Ev,
};
extern VTBL_ENTRY _ZTI6S943C1[];
extern  VTBL_ENTRY _ZTV6S943C1[];
Class_Descriptor cd_S943C1 = {  "S943C1", // class name
  bases_S943C1, 4,
  &(vtc_S943C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,20), // object size
  NSPAIRA(_ZTI6S943C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S943C1),12, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S6867C2  {
  void *s6867c2f0[3];
  int s6867c2f1;
  ::S3409C4_nt s6867c2f2;
  virtual  ~S6867C2(); // _ZN7S6867C2D1Ev
  virtual void  v4(); // _ZN7S6867C22v4Ev
  virtual void  v5(); // _ZN7S6867C22v5Ev
  virtual void  v6(); // _ZN7S6867C22v6Ev
  virtual void  v7(); // _ZN7S6867C22v7Ev
  virtual void  v8(); // _ZN7S6867C22v8Ev
  virtual void  v9(); // _ZN7S6867C22v9Ev
  virtual void  v10(); // _ZN7S6867C23v10Ev
  virtual void  v11(); // _ZN7S6867C23v11Ev
  S6867C2(); // tgen
};
//SIG(-1 S6867C2) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 Fp[3] Fi FC2{ Fl}}


 S6867C2 ::~S6867C2(){ note_dtor("S6867C2", this);}
void  S6867C2 ::v4(){vfunc_called(this, "_ZN7S6867C22v4Ev");}
void  S6867C2 ::v5(){vfunc_called(this, "_ZN7S6867C22v5Ev");}
void  S6867C2 ::v6(){vfunc_called(this, "_ZN7S6867C22v6Ev");}
void  S6867C2 ::v7(){vfunc_called(this, "_ZN7S6867C22v7Ev");}
void  S6867C2 ::v8(){vfunc_called(this, "_ZN7S6867C22v8Ev");}
void  S6867C2 ::v9(){vfunc_called(this, "_ZN7S6867C22v9Ev");}
void  S6867C2 ::v10(){vfunc_called(this, "_ZN7S6867C23v10Ev");}
void  S6867C2 ::v11(){vfunc_called(this, "_ZN7S6867C23v11Ev");}
S6867C2 ::S6867C2(){ note_ctor("S6867C2", this);} // tgen

static void Test_S6867C2()
{
  extern Class_Descriptor cd_S6867C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[7];
    init_test(&cd_S6867C2, buf);
    S6867C2 *dp, &lv = *(dp=new (buf) S6867C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,24), "sizeof(S6867C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6867C2)");
    check_field_offset(lv, s6867c2f0, ABISELECT(8,4), "S6867C2.s6867c2f0");
    check_field_offset(lv, s6867c2f1, ABISELECT(32,16), "S6867C2.s6867c2f1");
    check_field_offset(lv, s6867c2f2, ABISELECT(40,20), "S6867C2.s6867c2f2");
    test_class_info(&lv, &cd_S6867C2);
    dp->~S6867C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6867C2(Test_S6867C2, "S6867C2", ABISELECT(48,24));

#else // __cplusplus

extern void _ZN7S6867C2C1Ev();
extern void _ZN7S6867C2D1Ev();
Name_Map name_map_S6867C2[] = {
  NSPAIR(_ZN7S6867C2C1Ev),
  NSPAIR(_ZN7S6867C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S6867C2[];
extern void _ZN7S6867C2D1Ev();
extern void _ZN7S6867C2D0Ev();
extern void _ZN7S6867C22v4Ev();
extern void _ZN7S6867C22v5Ev();
extern void _ZN7S6867C22v6Ev();
extern void _ZN7S6867C22v7Ev();
extern void _ZN7S6867C22v8Ev();
extern void _ZN7S6867C22v9Ev();
extern void _ZN7S6867C23v10Ev();
extern void _ZN7S6867C23v11Ev();
static  VTBL_ENTRY vtc_S6867C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6867C2[0]),
  (VTBL_ENTRY)&_ZN7S6867C2D1Ev,
  (VTBL_ENTRY)&_ZN7S6867C2D0Ev,
  (VTBL_ENTRY)&_ZN7S6867C22v4Ev,
  (VTBL_ENTRY)&_ZN7S6867C22v5Ev,
  (VTBL_ENTRY)&_ZN7S6867C22v6Ev,
  (VTBL_ENTRY)&_ZN7S6867C22v7Ev,
  (VTBL_ENTRY)&_ZN7S6867C22v8Ev,
  (VTBL_ENTRY)&_ZN7S6867C22v9Ev,
  (VTBL_ENTRY)&_ZN7S6867C23v10Ev,
  (VTBL_ENTRY)&_ZN7S6867C23v11Ev,
};
extern VTBL_ENTRY _ZTI7S6867C2[];
extern  VTBL_ENTRY _ZTV7S6867C2[];
Class_Descriptor cd_S6867C2 = {  "S6867C2", // class name
  0,0,//no base classes
  &(vtc_S6867C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,24), // object size
  NSPAIRA(_ZTI7S6867C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S6867C2),12, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S6867C1  : S6867C2 {
  void *s6867c1f0;
  virtual  ~S6867C1(); // _ZN7S6867C1D1Ev
  virtual void  v1(); // _ZN7S6867C12v1Ev
  virtual void  v2(); // _ZN7S6867C12v2Ev
  virtual void  v3(); // _ZN7S6867C12v3Ev
  S6867C1(); // tgen
};
//SIG(1 S6867C1) C1{ BC2{ vd v4 v5 v6 v7 v8 v9 v10 v11 Fp[3] Fi FC3{ Fl}} vd v1 v2 v3 Fp}


 S6867C1 ::~S6867C1(){ note_dtor("S6867C1", this);}
void  S6867C1 ::v1(){vfunc_called(this, "_ZN7S6867C12v1Ev");}
void  S6867C1 ::v2(){vfunc_called(this, "_ZN7S6867C12v2Ev");}
void  S6867C1 ::v3(){vfunc_called(this, "_ZN7S6867C12v3Ev");}
S6867C1 ::S6867C1(){ note_ctor("S6867C1", this);} // tgen

static void Test_S6867C1()
{
  extern Class_Descriptor cd_S6867C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[8];
    init_test(&cd_S6867C1, buf);
    S6867C1 *dp, &lv = *(dp=new (buf) S6867C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,28), "sizeof(S6867C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6867C1)");
    check_base_class_offset(lv, (S6867C2*), 0, "S6867C1");
    check_field_offset(lv, s6867c1f0, ABISELECT(48,24), "S6867C1.s6867c1f0");
    test_class_info(&lv, &cd_S6867C1);
    dp->~S6867C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6867C1(Test_S6867C1, "S6867C1", ABISELECT(56,28));

#else // __cplusplus

extern void _ZN7S6867C1C1Ev();
extern void _ZN7S6867C1D1Ev();
Name_Map name_map_S6867C1[] = {
  NSPAIR(_ZN7S6867C1C1Ev),
  NSPAIR(_ZN7S6867C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6867C2;
extern VTBL_ENTRY _ZTI7S6867C2[];
extern  VTBL_ENTRY _ZTV7S6867C2[];
static Base_Class bases_S6867C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6867C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S6867C1[];
extern void _ZN7S6867C1D1Ev();
extern void _ZN7S6867C1D0Ev();
extern void _ZN7S6867C22v4Ev();
extern void _ZN7S6867C22v5Ev();
extern void _ZN7S6867C22v6Ev();
extern void _ZN7S6867C22v7Ev();
extern void _ZN7S6867C22v8Ev();
extern void _ZN7S6867C22v9Ev();
extern void _ZN7S6867C23v10Ev();
extern void _ZN7S6867C23v11Ev();
extern void _ZN7S6867C12v1Ev();
extern void _ZN7S6867C12v2Ev();
extern void _ZN7S6867C12v3Ev();
static  VTBL_ENTRY vtc_S6867C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6867C1[0]),
  (VTBL_ENTRY)&_ZN7S6867C1D1Ev,
  (VTBL_ENTRY)&_ZN7S6867C1D0Ev,
  (VTBL_ENTRY)&_ZN7S6867C22v4Ev,
  (VTBL_ENTRY)&_ZN7S6867C22v5Ev,
  (VTBL_ENTRY)&_ZN7S6867C22v6Ev,
  (VTBL_ENTRY)&_ZN7S6867C22v7Ev,
  (VTBL_ENTRY)&_ZN7S6867C22v8Ev,
  (VTBL_ENTRY)&_ZN7S6867C22v9Ev,
  (VTBL_ENTRY)&_ZN7S6867C23v10Ev,
  (VTBL_ENTRY)&_ZN7S6867C23v11Ev,
  (VTBL_ENTRY)&_ZN7S6867C12v1Ev,
  (VTBL_ENTRY)&_ZN7S6867C12v2Ev,
  (VTBL_ENTRY)&_ZN7S6867C12v3Ev,
};
extern VTBL_ENTRY _ZTI7S6867C1[];
extern  VTBL_ENTRY _ZTV7S6867C1[];
Class_Descriptor cd_S6867C1 = {  "S6867C1", // class name
  bases_S6867C1, 1,
  &(vtc_S6867C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(56,28), // object size
  NSPAIRA(_ZTI7S6867C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S6867C1),15, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S9190C2  {
  void *s9190c2f0[2];
  ::S9191C6_nt s9190c2f1;
  void *s9190c2f2;
  ::S2214C37_nt s9190c2f3;
  virtual  ~S9190C2(); // _ZN7S9190C2D1Ev
  virtual void  v3(); // _ZN7S9190C22v3Ev
  virtual void  v4(); // _ZN7S9190C22v4Ev
  S9190C2(); // tgen
};
//SIG(-1 S9190C2) C1{ vd v1 v2 Fp[2] FC2{ m Fp[2]} Fp FC3{ m Fp Fi[2] FC4{ m}}}


 S9190C2 ::~S9190C2(){ note_dtor("S9190C2", this);}
void  S9190C2 ::v3(){vfunc_called(this, "_ZN7S9190C22v3Ev");}
void  S9190C2 ::v4(){vfunc_called(this, "_ZN7S9190C22v4Ev");}
S9190C2 ::S9190C2(){ note_ctor("S9190C2", this);} // tgen

static void Test_S9190C2()
{
  extern Class_Descriptor cd_S9190C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,11)];
    init_test(&cd_S9190C2, buf);
    S9190C2 *dp, &lv = *(dp=new (buf) S9190C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,40), "sizeof(S9190C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9190C2)");
    check_field_offset(lv, s9190c2f0, ABISELECT(8,4), "S9190C2.s9190c2f0");
    check_field_offset(lv, s9190c2f1, ABISELECT(24,12), "S9190C2.s9190c2f1");
    check_field_offset(lv, s9190c2f2, ABISELECT(40,20), "S9190C2.s9190c2f2");
    check_field_offset(lv, s9190c2f3, ABISELECT(48,24), "S9190C2.s9190c2f3");
    test_class_info(&lv, &cd_S9190C2);
    dp->~S9190C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9190C2(Test_S9190C2, "S9190C2", ABISELECT(72,40));

#else // __cplusplus

extern void _ZN7S9190C2C1Ev();
extern void _ZN7S9190C2D1Ev();
Name_Map name_map_S9190C2[] = {
  NSPAIR(_ZN7S9190C2C1Ev),
  NSPAIR(_ZN7S9190C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S9190C2[];
extern void _ZN7S9190C2D1Ev();
extern void _ZN7S9190C2D0Ev();
extern void _ZN7S9190C22v3Ev();
extern void _ZN7S9190C22v4Ev();
static  VTBL_ENTRY vtc_S9190C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9190C2[0]),
  (VTBL_ENTRY)&_ZN7S9190C2D1Ev,
  (VTBL_ENTRY)&_ZN7S9190C2D0Ev,
  (VTBL_ENTRY)&_ZN7S9190C22v3Ev,
  (VTBL_ENTRY)&_ZN7S9190C22v4Ev,
};
extern VTBL_ENTRY _ZTI7S9190C2[];
extern  VTBL_ENTRY _ZTV7S9190C2[];
Class_Descriptor cd_S9190C2 = {  "S9190C2", // class name
  0,0,//no base classes
  &(vtc_S9190C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,40), // object size
  NSPAIRA(_ZTI7S9190C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S9190C2),6, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S9190C1  : S9190C2 {
  virtual void  v1(); // _ZN7S9190C12v1Ev
  virtual void  v2(); // _ZN7S9190C12v2Ev
  ~S9190C1(); // tgen
  S9190C1(); // tgen
};
//SIG(1 S9190C1) C1{ BC2{ vd v3 v4 Fp[2] FC3{ m Fp[2]} Fp FC4{ m Fp Fi[2] FC5{ m}}} v1 v2}


void  S9190C1 ::v1(){vfunc_called(this, "_ZN7S9190C12v1Ev");}
void  S9190C1 ::v2(){vfunc_called(this, "_ZN7S9190C12v2Ev");}
S9190C1 ::~S9190C1(){ note_dtor("S9190C1", this);} // tgen
S9190C1 ::S9190C1(){ note_ctor("S9190C1", this);} // tgen

static void Test_S9190C1()
{
  extern Class_Descriptor cd_S9190C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,11)];
    init_test(&cd_S9190C1, buf);
    S9190C1 *dp, &lv = *(dp=new (buf) S9190C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,40), "sizeof(S9190C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9190C1)");
    check_base_class_offset(lv, (S9190C2*), 0, "S9190C1");
    test_class_info(&lv, &cd_S9190C1);
    dp->~S9190C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9190C1(Test_S9190C1, "S9190C1", ABISELECT(72,40));

#else // __cplusplus

extern void _ZN7S9190C1C1Ev();
extern void _ZN7S9190C1D1Ev();
Name_Map name_map_S9190C1[] = {
  NSPAIR(_ZN7S9190C1C1Ev),
  NSPAIR(_ZN7S9190C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S9190C2;
extern VTBL_ENTRY _ZTI7S9190C2[];
extern  VTBL_ENTRY _ZTV7S9190C2[];
static Base_Class bases_S9190C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S9190C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S9190C1[];
extern void _ZN7S9190C1D1Ev();
extern void _ZN7S9190C1D0Ev();
extern void _ZN7S9190C22v3Ev();
extern void _ZN7S9190C22v4Ev();
extern void _ZN7S9190C12v1Ev();
extern void _ZN7S9190C12v2Ev();
static  VTBL_ENTRY vtc_S9190C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9190C1[0]),
  (VTBL_ENTRY)&_ZN7S9190C1D1Ev,
  (VTBL_ENTRY)&_ZN7S9190C1D0Ev,
  (VTBL_ENTRY)&_ZN7S9190C22v3Ev,
  (VTBL_ENTRY)&_ZN7S9190C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9190C12v1Ev,
  (VTBL_ENTRY)&_ZN7S9190C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S9190C1[];
extern  VTBL_ENTRY _ZTV7S9190C1[];
Class_Descriptor cd_S9190C1 = {  "S9190C1", // class name
  bases_S9190C1, 1,
  &(vtc_S9190C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,40), // object size
  NSPAIRA(_ZTI7S9190C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S9190C1),8, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S18287C1  {
  void *s18287c1f0[3];
  ::S836C21_nt s18287c1f1;
  ::S4162C5_nt s18287c1f2;
  ::S2214C37_nt s18287c1f3;
  int s18287c1f4;
  void  mf18287c1(); // _ZN8S18287C19mf18287c1Ev
};
//SIG(1 S18287C1) C1{ m Fp[3] FC2{ m Fp Fi FC3{ m}} FC4{ m Fp} FC5{ m Fp Fi[2] FC6{ m}} Fi}


void  S18287C1 ::mf18287c1(){}

static void Test_S18287C1()
{
  {
    init_simple_test("S18287C1");
    S18287C1 lv;
    check2(sizeof(lv), ABISELECT(80,48), "sizeof(S18287C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18287C1)");
    check_field_offset(lv, s18287c1f0, 0, "S18287C1.s18287c1f0");
    check_field_offset(lv, s18287c1f1, ABISELECT(24,12), "S18287C1.s18287c1f1");
    check_field_offset(lv, s18287c1f2, ABISELECT(40,24), "S18287C1.s18287c1f2");
    check_field_offset(lv, s18287c1f3, ABISELECT(48,28), "S18287C1.s18287c1f3");
    check_field_offset(lv, s18287c1f4, ABISELECT(72,44), "S18287C1.s18287c1f4");
  }
}
static Arrange_To_Call_Me vS18287C1(Test_S18287C1, "S18287C1", ABISELECT(80,48));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4998C3  {
  virtual  ~S4998C3(); // _ZN7S4998C3D1Ev
  virtual void  v3(); // _ZN7S4998C32v3Ev
  virtual void  v4(); // _ZN7S4998C32v4Ev
  virtual void  v5(); // _ZN7S4998C32v5Ev
  virtual void  v6(); // _ZN7S4998C32v6Ev
  S4998C3(); // tgen
};
//SIG(-1 S4998C3) C1{ vd v1 v2 v3 v4}


 S4998C3 ::~S4998C3(){ note_dtor("S4998C3", this);}
void  S4998C3 ::v3(){vfunc_called(this, "_ZN7S4998C32v3Ev");}
void  S4998C3 ::v4(){vfunc_called(this, "_ZN7S4998C32v4Ev");}
void  S4998C3 ::v5(){vfunc_called(this, "_ZN7S4998C32v5Ev");}
void  S4998C3 ::v6(){vfunc_called(this, "_ZN7S4998C32v6Ev");}
S4998C3 ::S4998C3(){ note_ctor("S4998C3", this);} // tgen

static void Test_S4998C3()
{
  extern Class_Descriptor cd_S4998C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S4998C3, buf);
    S4998C3 *dp, &lv = *(dp=new (buf) S4998C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S4998C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4998C3)");
    test_class_info(&lv, &cd_S4998C3);
    dp->~S4998C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4998C3(Test_S4998C3, "S4998C3", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S4998C3C1Ev();
extern void _ZN7S4998C3D1Ev();
Name_Map name_map_S4998C3[] = {
  NSPAIR(_ZN7S4998C3C1Ev),
  NSPAIR(_ZN7S4998C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4998C3[];
extern void _ZN7S4998C3D1Ev();
extern void _ZN7S4998C3D0Ev();
extern void _ZN7S4998C32v3Ev();
extern void _ZN7S4998C32v4Ev();
extern void _ZN7S4998C32v5Ev();
extern void _ZN7S4998C32v6Ev();
static  VTBL_ENTRY vtc_S4998C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4998C3[0]),
  (VTBL_ENTRY)&_ZN7S4998C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4998C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4998C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4998C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4998C32v5Ev,
  (VTBL_ENTRY)&_ZN7S4998C32v6Ev,
};
extern VTBL_ENTRY _ZTI7S4998C3[];
extern  VTBL_ENTRY _ZTV7S4998C3[];
Class_Descriptor cd_S4998C3 = {  "S4998C3", // class name
  0,0,//no base classes
  &(vtc_S4998C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S4998C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4998C3),8, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4998C2  : S4998C3 {
  virtual  ~S4998C2(); // _ZN7S4998C2D1Ev
  virtual void  v7(); // _ZN7S4998C22v7Ev
  virtual void  v8(); // _ZN7S4998C22v8Ev
  virtual void  v9(); // _ZN7S4998C22v9Ev
  virtual void  v10(); // _ZN7S4998C23v10Ev
  virtual void  v11(); // _ZN7S4998C23v11Ev
  S4998C2(); // tgen
};
//SIG(-1 S4998C2) C1{ BC2{ vd v6 v7 v8 v9} vd v1 v2 v3 v4 v5}


 S4998C2 ::~S4998C2(){ note_dtor("S4998C2", this);}
void  S4998C2 ::v7(){vfunc_called(this, "_ZN7S4998C22v7Ev");}
void  S4998C2 ::v8(){vfunc_called(this, "_ZN7S4998C22v8Ev");}
void  S4998C2 ::v9(){vfunc_called(this, "_ZN7S4998C22v9Ev");}
void  S4998C2 ::v10(){vfunc_called(this, "_ZN7S4998C23v10Ev");}
void  S4998C2 ::v11(){vfunc_called(this, "_ZN7S4998C23v11Ev");}
S4998C2 ::S4998C2(){ note_ctor("S4998C2", this);} // tgen

static void Test_S4998C2()
{
  extern Class_Descriptor cd_S4998C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S4998C2, buf);
    S4998C2 *dp, &lv = *(dp=new (buf) S4998C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S4998C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4998C2)");
    check_base_class_offset(lv, (S4998C3*), 0, "S4998C2");
    test_class_info(&lv, &cd_S4998C2);
    dp->~S4998C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4998C2(Test_S4998C2, "S4998C2", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S4998C2C1Ev();
extern void _ZN7S4998C2D1Ev();
Name_Map name_map_S4998C2[] = {
  NSPAIR(_ZN7S4998C2C1Ev),
  NSPAIR(_ZN7S4998C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4998C3;
extern VTBL_ENTRY _ZTI7S4998C3[];
extern  VTBL_ENTRY _ZTV7S4998C3[];
static Base_Class bases_S4998C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4998C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4998C2[];
extern void _ZN7S4998C2D1Ev();
extern void _ZN7S4998C2D0Ev();
extern void _ZN7S4998C32v3Ev();
extern void _ZN7S4998C32v4Ev();
extern void _ZN7S4998C32v5Ev();
extern void _ZN7S4998C32v6Ev();
extern void _ZN7S4998C22v7Ev();
extern void _ZN7S4998C22v8Ev();
extern void _ZN7S4998C22v9Ev();
extern void _ZN7S4998C23v10Ev();
extern void _ZN7S4998C23v11Ev();
static  VTBL_ENTRY vtc_S4998C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4998C2[0]),
  (VTBL_ENTRY)&_ZN7S4998C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4998C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4998C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4998C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4998C32v5Ev,
  (VTBL_ENTRY)&_ZN7S4998C32v6Ev,
  (VTBL_ENTRY)&_ZN7S4998C22v7Ev,
  (VTBL_ENTRY)&_ZN7S4998C22v8Ev,
  (VTBL_ENTRY)&_ZN7S4998C22v9Ev,
  (VTBL_ENTRY)&_ZN7S4998C23v10Ev,
  (VTBL_ENTRY)&_ZN7S4998C23v11Ev,
};
extern VTBL_ENTRY _ZTI7S4998C2[];
extern  VTBL_ENTRY _ZTV7S4998C2[];
Class_Descriptor cd_S4998C2 = {  "S4998C2", // class name
  bases_S4998C2, 1,
  &(vtc_S4998C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S4998C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4998C2),13, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4998C1  : S4998C2 {
  short s4998c1f0;
  void *s4998c1f1[3];
  virtual  ~S4998C1(); // _ZN7S4998C1D1Ev
  virtual void  v1(); // _ZN7S4998C12v1Ev
  virtual void  v2(); // _ZN7S4998C12v2Ev
  S4998C1(); // tgen
};
//SIG(1 S4998C1) C1{ BC2{ BC3{ vd v3 v4 v5 v6} vd v7 v8 v9 v10 v11} vd v1 v2 Fs Fp[3]}


 S4998C1 ::~S4998C1(){ note_dtor("S4998C1", this);}
void  S4998C1 ::v1(){vfunc_called(this, "_ZN7S4998C12v1Ev");}
void  S4998C1 ::v2(){vfunc_called(this, "_ZN7S4998C12v2Ev");}
S4998C1 ::S4998C1(){ note_ctor("S4998C1", this);} // tgen

static void Test_S4998C1()
{
  extern Class_Descriptor cd_S4998C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[6];
    init_test(&cd_S4998C1, buf);
    S4998C1 *dp, &lv = *(dp=new (buf) S4998C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S4998C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4998C1)");
    check_base_class_offset(lv, (S4998C3*)(S4998C2*), 0, "S4998C1");
    check_base_class_offset(lv, (S4998C2*), 0, "S4998C1");
    check_field_offset(lv, s4998c1f0, ABISELECT(8,4), "S4998C1.s4998c1f0");
    check_field_offset(lv, s4998c1f1, ABISELECT(16,8), "S4998C1.s4998c1f1");
    test_class_info(&lv, &cd_S4998C1);
    dp->~S4998C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4998C1(Test_S4998C1, "S4998C1", ABISELECT(40,20));

#else // __cplusplus

extern void _ZN7S4998C1C1Ev();
extern void _ZN7S4998C1D1Ev();
Name_Map name_map_S4998C1[] = {
  NSPAIR(_ZN7S4998C1C1Ev),
  NSPAIR(_ZN7S4998C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4998C3;
extern VTBL_ENTRY _ZTI7S4998C3[];
extern  VTBL_ENTRY _ZTV7S4998C3[];
extern Class_Descriptor cd_S4998C2;
extern VTBL_ENTRY _ZTI7S4998C2[];
extern  VTBL_ENTRY _ZTV7S4998C2[];
static Base_Class bases_S4998C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4998C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S4998C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4998C1[];
extern void _ZN7S4998C1D1Ev();
extern void _ZN7S4998C1D0Ev();
extern void _ZN7S4998C32v3Ev();
extern void _ZN7S4998C32v4Ev();
extern void _ZN7S4998C32v5Ev();
extern void _ZN7S4998C32v6Ev();
extern void _ZN7S4998C22v7Ev();
extern void _ZN7S4998C22v8Ev();
extern void _ZN7S4998C22v9Ev();
extern void _ZN7S4998C23v10Ev();
extern void _ZN7S4998C23v11Ev();
extern void _ZN7S4998C12v1Ev();
extern void _ZN7S4998C12v2Ev();
static  VTBL_ENTRY vtc_S4998C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4998C1[0]),
  (VTBL_ENTRY)&_ZN7S4998C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4998C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4998C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4998C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4998C32v5Ev,
  (VTBL_ENTRY)&_ZN7S4998C32v6Ev,
  (VTBL_ENTRY)&_ZN7S4998C22v7Ev,
  (VTBL_ENTRY)&_ZN7S4998C22v8Ev,
  (VTBL_ENTRY)&_ZN7S4998C22v9Ev,
  (VTBL_ENTRY)&_ZN7S4998C23v10Ev,
  (VTBL_ENTRY)&_ZN7S4998C23v11Ev,
  (VTBL_ENTRY)&_ZN7S4998C12v1Ev,
  (VTBL_ENTRY)&_ZN7S4998C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S4998C1[];
extern  VTBL_ENTRY _ZTV7S4998C1[];
Class_Descriptor cd_S4998C1 = {  "S4998C1", // class name
  bases_S4998C1, 2,
  &(vtc_S4998C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,20), // object size
  NSPAIRA(_ZTI7S4998C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4998C1),15, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S945C4  : S20956C14_nt {
  virtual  ~S945C4(); // _ZN6S945C4D1Ev
  virtual void  v3(); // _ZN6S945C42v3Ev
  virtual void  v4(); // _ZN6S945C42v4Ev
  virtual void  v5(); // _ZN6S945C42v5Ev
  S945C4(); // tgen
};
//SIG(-1 S945C4) C1{ BC2{} vd v1 v2 v3}


 S945C4 ::~S945C4(){ note_dtor("S945C4", this);}
void  S945C4 ::v3(){vfunc_called(this, "_ZN6S945C42v3Ev");}
void  S945C4 ::v4(){vfunc_called(this, "_ZN6S945C42v4Ev");}
void  S945C4 ::v5(){vfunc_called(this, "_ZN6S945C42v5Ev");}
S945C4 ::S945C4(){ note_ctor("S945C4", this);} // tgen

static void Test_S945C4()
{
  extern Class_Descriptor cd_S945C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S945C4, buf);
    S945C4 *dp, &lv = *(dp=new (buf) S945C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S945C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S945C4)");
    check_base_class_offset(lv, (S20956C14_nt*), 0, "S945C4");
    test_class_info(&lv, &cd_S945C4);
    dp->~S945C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS945C4(Test_S945C4, "S945C4", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN6S945C4C1Ev();
extern void _ZN6S945C4D1Ev();
Name_Map name_map_S945C4[] = {
  NSPAIR(_ZN6S945C4C1Ev),
  NSPAIR(_ZN6S945C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20956C14_nt;
extern VTBL_ENTRY _ZTI12S20956C14_nt[];
static Base_Class bases_S945C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20956C14_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S945C4[];
extern void _ZN6S945C4D1Ev();
extern void _ZN6S945C4D0Ev();
extern void _ZN6S945C42v3Ev();
extern void _ZN6S945C42v4Ev();
extern void _ZN6S945C42v5Ev();
static  VTBL_ENTRY vtc_S945C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S945C4[0]),
  (VTBL_ENTRY)&_ZN6S945C4D1Ev,
  (VTBL_ENTRY)&_ZN6S945C4D0Ev,
  (VTBL_ENTRY)&_ZN6S945C42v3Ev,
  (VTBL_ENTRY)&_ZN6S945C42v4Ev,
  (VTBL_ENTRY)&_ZN6S945C42v5Ev,
};
extern VTBL_ENTRY _ZTI6S945C4[];
extern  VTBL_ENTRY _ZTV6S945C4[];
Class_Descriptor cd_S945C4 = {  "S945C4", // class name
  bases_S945C4, 1,
  &(vtc_S945C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI6S945C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S945C4),7, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S945C3  : S945C4 {
  virtual  ~S945C3(); // _ZN6S945C3D1Ev
  virtual void  v6(); // _ZN6S945C32v6Ev
  virtual void  v7(); // _ZN6S945C32v7Ev
  S945C3(); // tgen
};
//SIG(-1 S945C3) C1{ BC2{ BC3{} vd v3 v4 v5} vd v1 v2}


 S945C3 ::~S945C3(){ note_dtor("S945C3", this);}
void  S945C3 ::v6(){vfunc_called(this, "_ZN6S945C32v6Ev");}
void  S945C3 ::v7(){vfunc_called(this, "_ZN6S945C32v7Ev");}
S945C3 ::S945C3(){ note_ctor("S945C3", this);} // tgen

static void Test_S945C3()
{
  extern Class_Descriptor cd_S945C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S945C3, buf);
    S945C3 *dp, &lv = *(dp=new (buf) S945C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S945C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S945C3)");
    check_base_class_offset(lv, (S20956C14_nt*)(S945C4*), 0, "S945C3");
    check_base_class_offset(lv, (S945C4*), 0, "S945C3");
    test_class_info(&lv, &cd_S945C3);
    dp->~S945C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS945C3(Test_S945C3, "S945C3", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN6S945C3C1Ev();
extern void _ZN6S945C3D1Ev();
Name_Map name_map_S945C3[] = {
  NSPAIR(_ZN6S945C3C1Ev),
  NSPAIR(_ZN6S945C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20956C14_nt;
extern VTBL_ENTRY _ZTI12S20956C14_nt[];
extern Class_Descriptor cd_S945C4;
extern VTBL_ENTRY _ZTI6S945C4[];
extern  VTBL_ENTRY _ZTV6S945C4[];
static Base_Class bases_S945C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20956C14_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S945C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S945C3[];
extern void _ZN6S945C3D1Ev();
extern void _ZN6S945C3D0Ev();
extern void _ZN6S945C42v3Ev();
extern void _ZN6S945C42v4Ev();
extern void _ZN6S945C42v5Ev();
extern void _ZN6S945C32v6Ev();
extern void _ZN6S945C32v7Ev();
static  VTBL_ENTRY vtc_S945C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S945C3[0]),
  (VTBL_ENTRY)&_ZN6S945C3D1Ev,
  (VTBL_ENTRY)&_ZN6S945C3D0Ev,
  (VTBL_ENTRY)&_ZN6S945C42v3Ev,
  (VTBL_ENTRY)&_ZN6S945C42v4Ev,
  (VTBL_ENTRY)&_ZN6S945C42v5Ev,
  (VTBL_ENTRY)&_ZN6S945C32v6Ev,
  (VTBL_ENTRY)&_ZN6S945C32v7Ev,
};
extern VTBL_ENTRY _ZTI6S945C3[];
extern  VTBL_ENTRY _ZTV6S945C3[];
Class_Descriptor cd_S945C3 = {  "S945C3", // class name
  bases_S945C3, 2,
  &(vtc_S945C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI6S945C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S945C3),9, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S945C2  : S945C3 {
  virtual  ~S945C2(); // _ZN6S945C2D1Ev
  virtual void  v8(); // _ZN6S945C22v8Ev
  virtual void  v9(); // _ZN6S945C22v9Ev
  virtual void  v10(); // _ZN6S945C23v10Ev
  S945C2(); // tgen
};
//SIG(-1 S945C2) C1{ BC2{ BC3{ BC4{} vd v4 v5 v6} vd v7 v8} vd v1 v2 v3}


 S945C2 ::~S945C2(){ note_dtor("S945C2", this);}
void  S945C2 ::v8(){vfunc_called(this, "_ZN6S945C22v8Ev");}
void  S945C2 ::v9(){vfunc_called(this, "_ZN6S945C22v9Ev");}
void  S945C2 ::v10(){vfunc_called(this, "_ZN6S945C23v10Ev");}
S945C2 ::S945C2(){ note_ctor("S945C2", this);} // tgen

static void Test_S945C2()
{
  extern Class_Descriptor cd_S945C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S945C2, buf);
    S945C2 *dp, &lv = *(dp=new (buf) S945C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S945C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S945C2)");
    check_base_class_offset(lv, (S20956C14_nt*)(S945C4*)(S945C3*), 0, "S945C2");
    check_base_class_offset(lv, (S945C4*)(S945C3*), 0, "S945C2");
    check_base_class_offset(lv, (S945C3*), 0, "S945C2");
    test_class_info(&lv, &cd_S945C2);
    dp->~S945C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS945C2(Test_S945C2, "S945C2", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN6S945C2C1Ev();
extern void _ZN6S945C2D1Ev();
Name_Map name_map_S945C2[] = {
  NSPAIR(_ZN6S945C2C1Ev),
  NSPAIR(_ZN6S945C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20956C14_nt;
extern VTBL_ENTRY _ZTI12S20956C14_nt[];
extern Class_Descriptor cd_S945C4;
extern VTBL_ENTRY _ZTI6S945C4[];
extern  VTBL_ENTRY _ZTV6S945C4[];
extern Class_Descriptor cd_S945C3;
extern VTBL_ENTRY _ZTI6S945C3[];
extern  VTBL_ENTRY _ZTV6S945C3[];
static Base_Class bases_S945C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20956C14_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S945C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S945C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S945C2[];
extern void _ZN6S945C2D1Ev();
extern void _ZN6S945C2D0Ev();
extern void _ZN6S945C42v3Ev();
extern void _ZN6S945C42v4Ev();
extern void _ZN6S945C42v5Ev();
extern void _ZN6S945C32v6Ev();
extern void _ZN6S945C32v7Ev();
extern void _ZN6S945C22v8Ev();
extern void _ZN6S945C22v9Ev();
extern void _ZN6S945C23v10Ev();
static  VTBL_ENTRY vtc_S945C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S945C2[0]),
  (VTBL_ENTRY)&_ZN6S945C2D1Ev,
  (VTBL_ENTRY)&_ZN6S945C2D0Ev,
  (VTBL_ENTRY)&_ZN6S945C42v3Ev,
  (VTBL_ENTRY)&_ZN6S945C42v4Ev,
  (VTBL_ENTRY)&_ZN6S945C42v5Ev,
  (VTBL_ENTRY)&_ZN6S945C32v6Ev,
  (VTBL_ENTRY)&_ZN6S945C32v7Ev,
  (VTBL_ENTRY)&_ZN6S945C22v8Ev,
  (VTBL_ENTRY)&_ZN6S945C22v9Ev,
  (VTBL_ENTRY)&_ZN6S945C23v10Ev,
};
extern VTBL_ENTRY _ZTI6S945C2[];
extern  VTBL_ENTRY _ZTV6S945C2[];
Class_Descriptor cd_S945C2 = {  "S945C2", // class name
  bases_S945C2, 3,
  &(vtc_S945C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI6S945C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S945C2),12, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S945C1  : S945C2 {
  virtual  ~S945C1(); // _ZN6S945C1D1Ev
  virtual void  v1(); // _ZN6S945C12v1Ev
  virtual void  v2(); // _ZN6S945C12v2Ev
  S945C1(); // tgen
};
//SIG(1 S945C1) C1{ BC2{ BC3{ BC4{ BC5{} vd v3 v4 v5} vd v6 v7} vd v8 v9 v10} vd v1 v2}


 S945C1 ::~S945C1(){ note_dtor("S945C1", this);}
void  S945C1 ::v1(){vfunc_called(this, "_ZN6S945C12v1Ev");}
void  S945C1 ::v2(){vfunc_called(this, "_ZN6S945C12v2Ev");}
S945C1 ::S945C1(){ note_ctor("S945C1", this);} // tgen

static void Test_S945C1()
{
  extern Class_Descriptor cd_S945C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S945C1, buf);
    S945C1 *dp, &lv = *(dp=new (buf) S945C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S945C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S945C1)");
    check_base_class_offset(lv, (S20956C14_nt*)(S945C4*)(S945C3*)(S945C2*), 0, "S945C1");
    check_base_class_offset(lv, (S945C4*)(S945C3*)(S945C2*), 0, "S945C1");
    check_base_class_offset(lv, (S945C3*)(S945C2*), 0, "S945C1");
    check_base_class_offset(lv, (S945C2*), 0, "S945C1");
    test_class_info(&lv, &cd_S945C1);
    dp->~S945C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS945C1(Test_S945C1, "S945C1", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN6S945C1C1Ev();
extern void _ZN6S945C1D1Ev();
Name_Map name_map_S945C1[] = {
  NSPAIR(_ZN6S945C1C1Ev),
  NSPAIR(_ZN6S945C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20956C14_nt;
extern VTBL_ENTRY _ZTI12S20956C14_nt[];
extern Class_Descriptor cd_S945C4;
extern VTBL_ENTRY _ZTI6S945C4[];
extern  VTBL_ENTRY _ZTV6S945C4[];
extern Class_Descriptor cd_S945C3;
extern VTBL_ENTRY _ZTI6S945C3[];
extern  VTBL_ENTRY _ZTV6S945C3[];
extern Class_Descriptor cd_S945C2;
extern VTBL_ENTRY _ZTI6S945C2[];
extern  VTBL_ENTRY _ZTV6S945C2[];
static Base_Class bases_S945C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20956C14_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S945C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S945C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S945C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S945C1[];
extern void _ZN6S945C1D1Ev();
extern void _ZN6S945C1D0Ev();
extern void _ZN6S945C42v3Ev();
extern void _ZN6S945C42v4Ev();
extern void _ZN6S945C42v5Ev();
extern void _ZN6S945C32v6Ev();
extern void _ZN6S945C32v7Ev();
extern void _ZN6S945C22v8Ev();
extern void _ZN6S945C22v9Ev();
extern void _ZN6S945C23v10Ev();
extern void _ZN6S945C12v1Ev();
extern void _ZN6S945C12v2Ev();
static  VTBL_ENTRY vtc_S945C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S945C1[0]),
  (VTBL_ENTRY)&_ZN6S945C1D1Ev,
  (VTBL_ENTRY)&_ZN6S945C1D0Ev,
  (VTBL_ENTRY)&_ZN6S945C42v3Ev,
  (VTBL_ENTRY)&_ZN6S945C42v4Ev,
  (VTBL_ENTRY)&_ZN6S945C42v5Ev,
  (VTBL_ENTRY)&_ZN6S945C32v6Ev,
  (VTBL_ENTRY)&_ZN6S945C32v7Ev,
  (VTBL_ENTRY)&_ZN6S945C22v8Ev,
  (VTBL_ENTRY)&_ZN6S945C22v9Ev,
  (VTBL_ENTRY)&_ZN6S945C23v10Ev,
  (VTBL_ENTRY)&_ZN6S945C12v1Ev,
  (VTBL_ENTRY)&_ZN6S945C12v2Ev,
};
extern VTBL_ENTRY _ZTI6S945C1[];
extern  VTBL_ENTRY _ZTV6S945C1[];
Class_Descriptor cd_S945C1 = {  "S945C1", // class name
  bases_S945C1, 4,
  &(vtc_S945C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI6S945C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S945C1),14, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S946C4  : S20956C14_nt {
  virtual  ~S946C4(); // _ZN6S946C4D1Ev
  virtual void  v4(); // _ZN6S946C42v4Ev
  virtual void  v5(); // _ZN6S946C42v5Ev
  virtual void  v6(); // _ZN6S946C42v6Ev
  S946C4(); // tgen
};
//SIG(-1 S946C4) C1{ BC2{} vd v1 v2 v3}


 S946C4 ::~S946C4(){ note_dtor("S946C4", this);}
void  S946C4 ::v4(){vfunc_called(this, "_ZN6S946C42v4Ev");}
void  S946C4 ::v5(){vfunc_called(this, "_ZN6S946C42v5Ev");}
void  S946C4 ::v6(){vfunc_called(this, "_ZN6S946C42v6Ev");}
S946C4 ::S946C4(){ note_ctor("S946C4", this);} // tgen

static void Test_S946C4()
{
  extern Class_Descriptor cd_S946C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S946C4, buf);
    S946C4 *dp, &lv = *(dp=new (buf) S946C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S946C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S946C4)");
    check_base_class_offset(lv, (S20956C14_nt*), 0, "S946C4");
    test_class_info(&lv, &cd_S946C4);
    dp->~S946C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS946C4(Test_S946C4, "S946C4", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN6S946C4C1Ev();
extern void _ZN6S946C4D1Ev();
Name_Map name_map_S946C4[] = {
  NSPAIR(_ZN6S946C4C1Ev),
  NSPAIR(_ZN6S946C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20956C14_nt;
extern VTBL_ENTRY _ZTI12S20956C14_nt[];
static Base_Class bases_S946C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20956C14_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S946C4[];
extern void _ZN6S946C4D1Ev();
extern void _ZN6S946C4D0Ev();
extern void _ZN6S946C42v4Ev();
extern void _ZN6S946C42v5Ev();
extern void _ZN6S946C42v6Ev();
static  VTBL_ENTRY vtc_S946C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S946C4[0]),
  (VTBL_ENTRY)&_ZN6S946C4D1Ev,
  (VTBL_ENTRY)&_ZN6S946C4D0Ev,
  (VTBL_ENTRY)&_ZN6S946C42v4Ev,
  (VTBL_ENTRY)&_ZN6S946C42v5Ev,
  (VTBL_ENTRY)&_ZN6S946C42v6Ev,
};
extern VTBL_ENTRY _ZTI6S946C4[];
extern  VTBL_ENTRY _ZTV6S946C4[];
Class_Descriptor cd_S946C4 = {  "S946C4", // class name
  bases_S946C4, 1,
  &(vtc_S946C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI6S946C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S946C4),7, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S946C3  : S946C4 {
  char s946c3f0;
  virtual  ~S946C3(); // _ZN6S946C3D1Ev
  virtual void  v7(); // _ZN6S946C32v7Ev
  virtual void  v8(); // _ZN6S946C32v8Ev
  S946C3(); // tgen
};
//SIG(-1 S946C3) C1{ BC2{ BC3{} vd v3 v4 v5} vd v1 v2 Fc}


 S946C3 ::~S946C3(){ note_dtor("S946C3", this);}
void  S946C3 ::v7(){vfunc_called(this, "_ZN6S946C32v7Ev");}
void  S946C3 ::v8(){vfunc_called(this, "_ZN6S946C32v8Ev");}
S946C3 ::S946C3(){ note_ctor("S946C3", this);} // tgen

static void Test_S946C3()
{
  extern Class_Descriptor cd_S946C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S946C3, buf);
    S946C3 *dp, &lv = *(dp=new (buf) S946C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S946C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S946C3)");
    check_base_class_offset(lv, (S20956C14_nt*)(S946C4*), 0, "S946C3");
    check_base_class_offset(lv, (S946C4*), 0, "S946C3");
    check_field_offset(lv, s946c3f0, ABISELECT(8,4), "S946C3.s946c3f0");
    test_class_info(&lv, &cd_S946C3);
    dp->~S946C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS946C3(Test_S946C3, "S946C3", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN6S946C3C1Ev();
extern void _ZN6S946C3D1Ev();
Name_Map name_map_S946C3[] = {
  NSPAIR(_ZN6S946C3C1Ev),
  NSPAIR(_ZN6S946C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20956C14_nt;
extern VTBL_ENTRY _ZTI12S20956C14_nt[];
extern Class_Descriptor cd_S946C4;
extern VTBL_ENTRY _ZTI6S946C4[];
extern  VTBL_ENTRY _ZTV6S946C4[];
static Base_Class bases_S946C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20956C14_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S946C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S946C3[];
extern void _ZN6S946C3D1Ev();
extern void _ZN6S946C3D0Ev();
extern void _ZN6S946C42v4Ev();
extern void _ZN6S946C42v5Ev();
extern void _ZN6S946C42v6Ev();
extern void _ZN6S946C32v7Ev();
extern void _ZN6S946C32v8Ev();
static  VTBL_ENTRY vtc_S946C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S946C3[0]),
  (VTBL_ENTRY)&_ZN6S946C3D1Ev,
  (VTBL_ENTRY)&_ZN6S946C3D0Ev,
  (VTBL_ENTRY)&_ZN6S946C42v4Ev,
  (VTBL_ENTRY)&_ZN6S946C42v5Ev,
  (VTBL_ENTRY)&_ZN6S946C42v6Ev,
  (VTBL_ENTRY)&_ZN6S946C32v7Ev,
  (VTBL_ENTRY)&_ZN6S946C32v8Ev,
};
extern VTBL_ENTRY _ZTI6S946C3[];
extern  VTBL_ENTRY _ZTV6S946C3[];
Class_Descriptor cd_S946C3 = {  "S946C3", // class name
  bases_S946C3, 2,
  &(vtc_S946C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI6S946C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S946C3),9, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S946C2  : S946C3 {
  virtual  ~S946C2(); // _ZN6S946C2D1Ev
  virtual void  v9(); // _ZN6S946C22v9Ev
  S946C2(); // tgen
};
//SIG(-1 S946C2) C1{ BC2{ BC3{ BC4{} vd v2 v3 v4} vd v5 v6 Fc} vd v1}


 S946C2 ::~S946C2(){ note_dtor("S946C2", this);}
void  S946C2 ::v9(){vfunc_called(this, "_ZN6S946C22v9Ev");}
S946C2 ::S946C2(){ note_ctor("S946C2", this);} // tgen

static void Test_S946C2()
{
  extern Class_Descriptor cd_S946C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S946C2, buf);
    S946C2 *dp, &lv = *(dp=new (buf) S946C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S946C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S946C2)");
    check_base_class_offset(lv, (S20956C14_nt*)(S946C4*)(S946C3*), 0, "S946C2");
    check_base_class_offset(lv, (S946C4*)(S946C3*), 0, "S946C2");
    check_base_class_offset(lv, (S946C3*), 0, "S946C2");
    test_class_info(&lv, &cd_S946C2);
    dp->~S946C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS946C2(Test_S946C2, "S946C2", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN6S946C2C1Ev();
extern void _ZN6S946C2D1Ev();
Name_Map name_map_S946C2[] = {
  NSPAIR(_ZN6S946C2C1Ev),
  NSPAIR(_ZN6S946C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20956C14_nt;
extern VTBL_ENTRY _ZTI12S20956C14_nt[];
extern Class_Descriptor cd_S946C4;
extern VTBL_ENTRY _ZTI6S946C4[];
extern  VTBL_ENTRY _ZTV6S946C4[];
extern Class_Descriptor cd_S946C3;
extern VTBL_ENTRY _ZTI6S946C3[];
extern  VTBL_ENTRY _ZTV6S946C3[];
static Base_Class bases_S946C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20956C14_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S946C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S946C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S946C2[];
extern void _ZN6S946C2D1Ev();
extern void _ZN6S946C2D0Ev();
extern void _ZN6S946C42v4Ev();
extern void _ZN6S946C42v5Ev();
extern void _ZN6S946C42v6Ev();
extern void _ZN6S946C32v7Ev();
extern void _ZN6S946C32v8Ev();
extern void _ZN6S946C22v9Ev();
static  VTBL_ENTRY vtc_S946C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S946C2[0]),
  (VTBL_ENTRY)&_ZN6S946C2D1Ev,
  (VTBL_ENTRY)&_ZN6S946C2D0Ev,
  (VTBL_ENTRY)&_ZN6S946C42v4Ev,
  (VTBL_ENTRY)&_ZN6S946C42v5Ev,
  (VTBL_ENTRY)&_ZN6S946C42v6Ev,
  (VTBL_ENTRY)&_ZN6S946C32v7Ev,
  (VTBL_ENTRY)&_ZN6S946C32v8Ev,
  (VTBL_ENTRY)&_ZN6S946C22v9Ev,
};
extern VTBL_ENTRY _ZTI6S946C2[];
extern  VTBL_ENTRY _ZTV6S946C2[];
Class_Descriptor cd_S946C2 = {  "S946C2", // class name
  bases_S946C2, 3,
  &(vtc_S946C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI6S946C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S946C2),10, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S946C1  : S946C2 {
  virtual  ~S946C1(); // _ZN6S946C1D1Ev
  virtual void  v1(); // _ZN6S946C12v1Ev
  virtual void  v2(); // _ZN6S946C12v2Ev
  virtual void  v3(); // _ZN6S946C12v3Ev
  S946C1(); // tgen
};
//SIG(1 S946C1) C1{ BC2{ BC3{ BC4{ BC5{} vd v4 v5 v6} vd v7 v8 Fc} vd v9} vd v1 v2 v3}


 S946C1 ::~S946C1(){ note_dtor("S946C1", this);}
void  S946C1 ::v1(){vfunc_called(this, "_ZN6S946C12v1Ev");}
void  S946C1 ::v2(){vfunc_called(this, "_ZN6S946C12v2Ev");}
void  S946C1 ::v3(){vfunc_called(this, "_ZN6S946C12v3Ev");}
S946C1 ::S946C1(){ note_ctor("S946C1", this);} // tgen

static void Test_S946C1()
{
  extern Class_Descriptor cd_S946C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S946C1, buf);
    S946C1 *dp, &lv = *(dp=new (buf) S946C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S946C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S946C1)");
    check_base_class_offset(lv, (S20956C14_nt*)(S946C4*)(S946C3*)(S946C2*), 0, "S946C1");
    check_base_class_offset(lv, (S946C4*)(S946C3*)(S946C2*), 0, "S946C1");
    check_base_class_offset(lv, (S946C3*)(S946C2*), 0, "S946C1");
    check_base_class_offset(lv, (S946C2*), 0, "S946C1");
    test_class_info(&lv, &cd_S946C1);
    dp->~S946C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS946C1(Test_S946C1, "S946C1", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN6S946C1C1Ev();
extern void _ZN6S946C1D1Ev();
Name_Map name_map_S946C1[] = {
  NSPAIR(_ZN6S946C1C1Ev),
  NSPAIR(_ZN6S946C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20956C14_nt;
extern VTBL_ENTRY _ZTI12S20956C14_nt[];
extern Class_Descriptor cd_S946C4;
extern VTBL_ENTRY _ZTI6S946C4[];
extern  VTBL_ENTRY _ZTV6S946C4[];
extern Class_Descriptor cd_S946C3;
extern VTBL_ENTRY _ZTI6S946C3[];
extern  VTBL_ENTRY _ZTV6S946C3[];
extern Class_Descriptor cd_S946C2;
extern VTBL_ENTRY _ZTI6S946C2[];
extern  VTBL_ENTRY _ZTV6S946C2[];
static Base_Class bases_S946C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20956C14_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S946C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S946C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S946C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S946C1[];
extern void _ZN6S946C1D1Ev();
extern void _ZN6S946C1D0Ev();
extern void _ZN6S946C42v4Ev();
extern void _ZN6S946C42v5Ev();
extern void _ZN6S946C42v6Ev();
extern void _ZN6S946C32v7Ev();
extern void _ZN6S946C32v8Ev();
extern void _ZN6S946C22v9Ev();
extern void _ZN6S946C12v1Ev();
extern void _ZN6S946C12v2Ev();
extern void _ZN6S946C12v3Ev();
static  VTBL_ENTRY vtc_S946C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S946C1[0]),
  (VTBL_ENTRY)&_ZN6S946C1D1Ev,
  (VTBL_ENTRY)&_ZN6S946C1D0Ev,
  (VTBL_ENTRY)&_ZN6S946C42v4Ev,
  (VTBL_ENTRY)&_ZN6S946C42v5Ev,
  (VTBL_ENTRY)&_ZN6S946C42v6Ev,
  (VTBL_ENTRY)&_ZN6S946C32v7Ev,
  (VTBL_ENTRY)&_ZN6S946C32v8Ev,
  (VTBL_ENTRY)&_ZN6S946C22v9Ev,
  (VTBL_ENTRY)&_ZN6S946C12v1Ev,
  (VTBL_ENTRY)&_ZN6S946C12v2Ev,
  (VTBL_ENTRY)&_ZN6S946C12v3Ev,
};
extern VTBL_ENTRY _ZTI6S946C1[];
extern  VTBL_ENTRY _ZTV6S946C1[];
Class_Descriptor cd_S946C1 = {  "S946C1", // class name
  bases_S946C1, 4,
  &(vtc_S946C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI6S946C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S946C1),13, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S21423C2  {
  int s21423c2f0[2];
  char s21423c2f1[3];
  void *s21423c2f2;
  int s21423c2f3[5];
  ::S9839C4 s21423c2f4;
  ::S9839C4 s21423c2f5;
  int s21423c2f6;
  void  mf21423c2(); // _ZN8S21423C29mf21423c2Ev
};
//SIG(-1 S21423C2) C1{ m Fi[2] Fc[3] Fp Fi[5] FC2{ m Fp Fi[2] Fc} FC2 Fi}


void  S21423C2 ::mf21423c2(){}

static void Test_S21423C2()
{
  {
    init_simple_test("S21423C2");
    S21423C2 lv;
    check2(sizeof(lv), ABISELECT(104,72), "sizeof(S21423C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21423C2)");
    check_field_offset(lv, s21423c2f0, 0, "S21423C2.s21423c2f0");
    check_field_offset(lv, s21423c2f1, 8, "S21423C2.s21423c2f1");
    check_field_offset(lv, s21423c2f2, ABISELECT(16,12), "S21423C2.s21423c2f2");
    check_field_offset(lv, s21423c2f3, ABISELECT(24,16), "S21423C2.s21423c2f3");
    check_field_offset(lv, s21423c2f4, ABISELECT(48,36), "S21423C2.s21423c2f4");
    check_field_offset(lv, s21423c2f5, ABISELECT(72,52), "S21423C2.s21423c2f5");
    check_field_offset(lv, s21423c2f6, ABISELECT(96,68), "S21423C2.s21423c2f6");
  }
}
static Arrange_To_Call_Me vS21423C2(Test_S21423C2, "S21423C2", ABISELECT(104,72));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S21423C1  {
  ::S21423C2 s21423c1f0;
  void  mf21423c1(); // _ZN8S21423C19mf21423c1Ev
  virtual  ~S21423C1(); // _ZN8S21423C1D1Ev
  S21423C1(); // tgen
};
//SIG(1 S21423C1) C1{ vd m FC2{ m Fi[2] Fc[3] Fp Fi[5] FC3{ m Fp Fi[2] Fc} FC3 Fi}}


void  S21423C1 ::mf21423c1(){}
 S21423C1 ::~S21423C1(){ note_dtor("S21423C1", this);}
S21423C1 ::S21423C1(){ note_ctor("S21423C1", this);} // tgen

static void Test_S21423C1()
{
  extern Class_Descriptor cd_S21423C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(15,20)];
    init_test(&cd_S21423C1, buf);
    S21423C1 *dp, &lv = *(dp=new (buf) S21423C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(112,76), "sizeof(S21423C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21423C1)");
    check_field_offset(lv, s21423c1f0, ABISELECT(8,4), "S21423C1.s21423c1f0");
    test_class_info(&lv, &cd_S21423C1);
    dp->~S21423C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21423C1(Test_S21423C1, "S21423C1", ABISELECT(112,76));

#else // __cplusplus

extern void _ZN8S21423C1C1Ev();
extern void _ZN8S21423C1D1Ev();
Name_Map name_map_S21423C1[] = {
  NSPAIR(_ZN8S21423C1C1Ev),
  NSPAIR(_ZN8S21423C1D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S21423C1[];
extern void _ZN8S21423C1D1Ev();
extern void _ZN8S21423C1D0Ev();
static  VTBL_ENTRY vtc_S21423C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S21423C1[0]),
  (VTBL_ENTRY)&_ZN8S21423C1D1Ev,
  (VTBL_ENTRY)&_ZN8S21423C1D0Ev,
};
extern VTBL_ENTRY _ZTI8S21423C1[];
extern  VTBL_ENTRY _ZTV8S21423C1[];
Class_Descriptor cd_S21423C1 = {  "S21423C1", // class name
  0,0,//no base classes
  &(vtc_S21423C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(112,76), // object size
  NSPAIRA(_ZTI8S21423C1),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S21423C1),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S12471C2  {
  int s12471c2f0[4];
  ::S2423C14 s12471c2f1;
  void *s12471c2f2[2];
};
//SIG(-1 S12471C2) C1{ Fi[4] FU2{ Fc[16] FC3{ Fc Fc Fc[14]}} Fp[2]}



static void Test_S12471C2()
{
  {
    init_simple_test("S12471C2");
    S12471C2 lv;
    check2(sizeof(lv), ABISELECT(48,40), "sizeof(S12471C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S12471C2)");
    check_field_offset(lv, s12471c2f0, 0, "S12471C2.s12471c2f0");
    check_field_offset(lv, s12471c2f1, 16, "S12471C2.s12471c2f1");
    check_field_offset(lv, s12471c2f2, 32, "S12471C2.s12471c2f2");
  }
}
static Arrange_To_Call_Me vS12471C2(Test_S12471C2, "S12471C2", ABISELECT(48,40));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S12471C1  {
  int s12471c1f0;
  ::S12471C2 s12471c1f1;
  ::S12992C14 s12471c1f2;
};
//SIG(1 S12471C1) C1{ Fi FC2{ Fi[4] FU3{ Fc[16] FC4{ Fc Fc Fc[14]}} Fp[2]} FC5{ Fi}}



static void Test_S12471C1()
{
  {
    init_simple_test("S12471C1");
    S12471C1 lv;
    check2(sizeof(lv), ABISELECT(64,48), "sizeof(S12471C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S12471C1)");
    check_field_offset(lv, s12471c1f0, 0, "S12471C1.s12471c1f0");
    check_field_offset(lv, s12471c1f1, ABISELECT(8,4), "S12471C1.s12471c1f1");
    check_field_offset(lv, s12471c1f2, ABISELECT(56,44), "S12471C1.s12471c1f2");
  }
}
static Arrange_To_Call_Me vS12471C1(Test_S12471C1, "S12471C1", ABISELECT(64,48));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S11567C1  {
  ::S2423C5_nt s11567c1f0;
  ::S2423C5_nt s11567c1f1;
  ::S8035C4 s11567c1f2;
  ::S8035C4 s11567c1f3;
};
//SIG(1 S11567C1) C1{ FC2{ Fi[2]} FC2 FC3{ m Fi FC4{ BC5{ m Fp Fi} FC6{ Fs[32]}}} FC3}



static void Test_S11567C1()
{
  {
    init_simple_test("S11567C1");
    S11567C1 lv;
    check2(sizeof(lv), ABISELECT(192,168), "sizeof(S11567C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S11567C1)");
    check_field_offset(lv, s11567c1f0, 0, "S11567C1.s11567c1f0");
    check_field_offset(lv, s11567c1f1, 8, "S11567C1.s11567c1f1");
    check_field_offset(lv, s11567c1f2, 16, "S11567C1.s11567c1f2");
    check_field_offset(lv, s11567c1f3, ABISELECT(104,92), "S11567C1.s11567c1f3");
  }
}
static Arrange_To_Call_Me vS11567C1(Test_S11567C1, "S11567C1", ABISELECT(192,168));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7095C2  {
  void *s7095c2f0[2];
  virtual void  v7(); // _ZN7S7095C22v7Ev
  virtual void  v8(); // _ZN7S7095C22v8Ev
  virtual void  v9(); // _ZN7S7095C22v9Ev
  virtual void  v10(); // _ZN7S7095C23v10Ev
  virtual void  v11(); // _ZN7S7095C23v11Ev
  virtual void  v12(); // _ZN7S7095C23v12Ev
  virtual void  v13(); // _ZN7S7095C23v13Ev
  ~S7095C2(); // tgen
  S7095C2(); // tgen
};
//SIG(-1 S7095C2) C1{ v1 v2 v3 v4 v5 v6 v7 Fp[2]}


void  S7095C2 ::v7(){vfunc_called(this, "_ZN7S7095C22v7Ev");}
void  S7095C2 ::v8(){vfunc_called(this, "_ZN7S7095C22v8Ev");}
void  S7095C2 ::v9(){vfunc_called(this, "_ZN7S7095C22v9Ev");}
void  S7095C2 ::v10(){vfunc_called(this, "_ZN7S7095C23v10Ev");}
void  S7095C2 ::v11(){vfunc_called(this, "_ZN7S7095C23v11Ev");}
void  S7095C2 ::v12(){vfunc_called(this, "_ZN7S7095C23v12Ev");}
void  S7095C2 ::v13(){vfunc_called(this, "_ZN7S7095C23v13Ev");}
S7095C2 ::~S7095C2(){ note_dtor("S7095C2", this);} // tgen
S7095C2 ::S7095C2(){ note_ctor("S7095C2", this);} // tgen

static void Test_S7095C2()
{
  extern Class_Descriptor cd_S7095C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S7095C2, buf);
    S7095C2 *dp, &lv = *(dp=new (buf) S7095C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S7095C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7095C2)");
    check_field_offset(lv, s7095c2f0, ABISELECT(8,4), "S7095C2.s7095c2f0");
    test_class_info(&lv, &cd_S7095C2);
    dp->~S7095C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7095C2(Test_S7095C2, "S7095C2", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S7095C2C1Ev();
extern void _ZN7S7095C2D1Ev();
Name_Map name_map_S7095C2[] = {
  NSPAIR(_ZN7S7095C2C1Ev),
  NSPAIR(_ZN7S7095C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S7095C2[];
extern void _ZN7S7095C22v7Ev();
extern void _ZN7S7095C22v8Ev();
extern void _ZN7S7095C22v9Ev();
extern void _ZN7S7095C23v10Ev();
extern void _ZN7S7095C23v11Ev();
extern void _ZN7S7095C23v12Ev();
extern void _ZN7S7095C23v13Ev();
static  VTBL_ENTRY vtc_S7095C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7095C2[0]),
  (VTBL_ENTRY)&_ZN7S7095C22v7Ev,
  (VTBL_ENTRY)&_ZN7S7095C22v8Ev,
  (VTBL_ENTRY)&_ZN7S7095C22v9Ev,
  (VTBL_ENTRY)&_ZN7S7095C23v10Ev,
  (VTBL_ENTRY)&_ZN7S7095C23v11Ev,
  (VTBL_ENTRY)&_ZN7S7095C23v12Ev,
  (VTBL_ENTRY)&_ZN7S7095C23v13Ev,
};
extern VTBL_ENTRY _ZTI7S7095C2[];
extern  VTBL_ENTRY _ZTV7S7095C2[];
Class_Descriptor cd_S7095C2 = {  "S7095C2", // class name
  0,0,//no base classes
  &(vtc_S7095C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S7095C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S7095C2),9, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7095C1  : S7095C2 {
  int s7095c1f0;
  virtual void  v1(); // _ZN7S7095C12v1Ev
  virtual void  v2(); // _ZN7S7095C12v2Ev
  virtual void  v3(); // _ZN7S7095C12v3Ev
  virtual void  v4(); // _ZN7S7095C12v4Ev
  virtual void  v5(); // _ZN7S7095C12v5Ev
  virtual void  v6(); // _ZN7S7095C12v6Ev
  ~S7095C1(); // tgen
  S7095C1(); // tgen
};
//SIG(1 S7095C1) C1{ BC2{ v7 v8 v9 v10 v11 v12 v13 Fp[2]} v1 v2 v3 v4 v5 v6 Fi}


void  S7095C1 ::v1(){vfunc_called(this, "_ZN7S7095C12v1Ev");}
void  S7095C1 ::v2(){vfunc_called(this, "_ZN7S7095C12v2Ev");}
void  S7095C1 ::v3(){vfunc_called(this, "_ZN7S7095C12v3Ev");}
void  S7095C1 ::v4(){vfunc_called(this, "_ZN7S7095C12v4Ev");}
void  S7095C1 ::v5(){vfunc_called(this, "_ZN7S7095C12v5Ev");}
void  S7095C1 ::v6(){vfunc_called(this, "_ZN7S7095C12v6Ev");}
S7095C1 ::~S7095C1(){ note_dtor("S7095C1", this);} // tgen
S7095C1 ::S7095C1(){ note_ctor("S7095C1", this);} // tgen

static void Test_S7095C1()
{
  extern Class_Descriptor cd_S7095C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S7095C1, buf);
    S7095C1 *dp, &lv = *(dp=new (buf) S7095C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S7095C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7095C1)");
    check_base_class_offset(lv, (S7095C2*), 0, "S7095C1");
    check_field_offset(lv, s7095c1f0, ABISELECT(24,12), "S7095C1.s7095c1f0");
    test_class_info(&lv, &cd_S7095C1);
    dp->~S7095C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7095C1(Test_S7095C1, "S7095C1", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN7S7095C1C1Ev();
extern void _ZN7S7095C1D1Ev();
Name_Map name_map_S7095C1[] = {
  NSPAIR(_ZN7S7095C1C1Ev),
  NSPAIR(_ZN7S7095C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7095C2;
extern VTBL_ENTRY _ZTI7S7095C2[];
extern  VTBL_ENTRY _ZTV7S7095C2[];
static Base_Class bases_S7095C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7095C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7095C1[];
extern void _ZN7S7095C22v7Ev();
extern void _ZN7S7095C22v8Ev();
extern void _ZN7S7095C22v9Ev();
extern void _ZN7S7095C23v10Ev();
extern void _ZN7S7095C23v11Ev();
extern void _ZN7S7095C23v12Ev();
extern void _ZN7S7095C23v13Ev();
extern void _ZN7S7095C12v1Ev();
extern void _ZN7S7095C12v2Ev();
extern void _ZN7S7095C12v3Ev();
extern void _ZN7S7095C12v4Ev();
extern void _ZN7S7095C12v5Ev();
extern void _ZN7S7095C12v6Ev();
static  VTBL_ENTRY vtc_S7095C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7095C1[0]),
  (VTBL_ENTRY)&_ZN7S7095C22v7Ev,
  (VTBL_ENTRY)&_ZN7S7095C22v8Ev,
  (VTBL_ENTRY)&_ZN7S7095C22v9Ev,
  (VTBL_ENTRY)&_ZN7S7095C23v10Ev,
  (VTBL_ENTRY)&_ZN7S7095C23v11Ev,
  (VTBL_ENTRY)&_ZN7S7095C23v12Ev,
  (VTBL_ENTRY)&_ZN7S7095C23v13Ev,
  (VTBL_ENTRY)&_ZN7S7095C12v1Ev,
  (VTBL_ENTRY)&_ZN7S7095C12v2Ev,
  (VTBL_ENTRY)&_ZN7S7095C12v3Ev,
  (VTBL_ENTRY)&_ZN7S7095C12v4Ev,
  (VTBL_ENTRY)&_ZN7S7095C12v5Ev,
  (VTBL_ENTRY)&_ZN7S7095C12v6Ev,
};
extern VTBL_ENTRY _ZTI7S7095C1[];
extern  VTBL_ENTRY _ZTV7S7095C1[];
Class_Descriptor cd_S7095C1 = {  "S7095C1", // class name
  bases_S7095C1, 1,
  &(vtc_S7095C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI7S7095C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S7095C1),15, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S944C4  : S20956C14_nt {
  virtual  ~S944C4(); // _ZN6S944C4D1Ev
  virtual void  v3(); // _ZN6S944C42v3Ev
  virtual void  v4(); // _ZN6S944C42v4Ev
  virtual void  v5(); // _ZN6S944C42v5Ev
  S944C4(); // tgen
};
//SIG(-1 S944C4) C1{ BC2{} vd v1 v2 v3}


 S944C4 ::~S944C4(){ note_dtor("S944C4", this);}
void  S944C4 ::v3(){vfunc_called(this, "_ZN6S944C42v3Ev");}
void  S944C4 ::v4(){vfunc_called(this, "_ZN6S944C42v4Ev");}
void  S944C4 ::v5(){vfunc_called(this, "_ZN6S944C42v5Ev");}
S944C4 ::S944C4(){ note_ctor("S944C4", this);} // tgen

static void Test_S944C4()
{
  extern Class_Descriptor cd_S944C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S944C4, buf);
    S944C4 *dp, &lv = *(dp=new (buf) S944C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S944C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S944C4)");
    check_base_class_offset(lv, (S20956C14_nt*), 0, "S944C4");
    test_class_info(&lv, &cd_S944C4);
    dp->~S944C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS944C4(Test_S944C4, "S944C4", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN6S944C4C1Ev();
extern void _ZN6S944C4D1Ev();
Name_Map name_map_S944C4[] = {
  NSPAIR(_ZN6S944C4C1Ev),
  NSPAIR(_ZN6S944C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20956C14_nt;
extern VTBL_ENTRY _ZTI12S20956C14_nt[];
static Base_Class bases_S944C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20956C14_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S944C4[];
extern void _ZN6S944C4D1Ev();
extern void _ZN6S944C4D0Ev();
extern void _ZN6S944C42v3Ev();
extern void _ZN6S944C42v4Ev();
extern void _ZN6S944C42v5Ev();
static  VTBL_ENTRY vtc_S944C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S944C4[0]),
  (VTBL_ENTRY)&_ZN6S944C4D1Ev,
  (VTBL_ENTRY)&_ZN6S944C4D0Ev,
  (VTBL_ENTRY)&_ZN6S944C42v3Ev,
  (VTBL_ENTRY)&_ZN6S944C42v4Ev,
  (VTBL_ENTRY)&_ZN6S944C42v5Ev,
};
extern VTBL_ENTRY _ZTI6S944C4[];
extern  VTBL_ENTRY _ZTV6S944C4[];
Class_Descriptor cd_S944C4 = {  "S944C4", // class name
  bases_S944C4, 1,
  &(vtc_S944C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI6S944C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S944C4),7, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S944C3  : S944C4 {
  char s944c3f0;
  virtual  ~S944C3(); // _ZN6S944C3D1Ev
  virtual void  v6(); // _ZN6S944C32v6Ev
  virtual void  v7(); // _ZN6S944C32v7Ev
  S944C3(); // tgen
};
//SIG(-1 S944C3) C1{ BC2{ BC3{} vd v3 v4 v5} vd v1 v2 Fc}


 S944C3 ::~S944C3(){ note_dtor("S944C3", this);}
void  S944C3 ::v6(){vfunc_called(this, "_ZN6S944C32v6Ev");}
void  S944C3 ::v7(){vfunc_called(this, "_ZN6S944C32v7Ev");}
S944C3 ::S944C3(){ note_ctor("S944C3", this);} // tgen

static void Test_S944C3()
{
  extern Class_Descriptor cd_S944C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S944C3, buf);
    S944C3 *dp, &lv = *(dp=new (buf) S944C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S944C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S944C3)");
    check_base_class_offset(lv, (S20956C14_nt*)(S944C4*), 0, "S944C3");
    check_base_class_offset(lv, (S944C4*), 0, "S944C3");
    check_field_offset(lv, s944c3f0, ABISELECT(8,4), "S944C3.s944c3f0");
    test_class_info(&lv, &cd_S944C3);
    dp->~S944C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS944C3(Test_S944C3, "S944C3", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN6S944C3C1Ev();
extern void _ZN6S944C3D1Ev();
Name_Map name_map_S944C3[] = {
  NSPAIR(_ZN6S944C3C1Ev),
  NSPAIR(_ZN6S944C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20956C14_nt;
extern VTBL_ENTRY _ZTI12S20956C14_nt[];
extern Class_Descriptor cd_S944C4;
extern VTBL_ENTRY _ZTI6S944C4[];
extern  VTBL_ENTRY _ZTV6S944C4[];
static Base_Class bases_S944C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20956C14_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S944C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S944C3[];
extern void _ZN6S944C3D1Ev();
extern void _ZN6S944C3D0Ev();
extern void _ZN6S944C42v3Ev();
extern void _ZN6S944C42v4Ev();
extern void _ZN6S944C42v5Ev();
extern void _ZN6S944C32v6Ev();
extern void _ZN6S944C32v7Ev();
static  VTBL_ENTRY vtc_S944C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S944C3[0]),
  (VTBL_ENTRY)&_ZN6S944C3D1Ev,
  (VTBL_ENTRY)&_ZN6S944C3D0Ev,
  (VTBL_ENTRY)&_ZN6S944C42v3Ev,
  (VTBL_ENTRY)&_ZN6S944C42v4Ev,
  (VTBL_ENTRY)&_ZN6S944C42v5Ev,
  (VTBL_ENTRY)&_ZN6S944C32v6Ev,
  (VTBL_ENTRY)&_ZN6S944C32v7Ev,
};
extern VTBL_ENTRY _ZTI6S944C3[];
extern  VTBL_ENTRY _ZTV6S944C3[];
Class_Descriptor cd_S944C3 = {  "S944C3", // class name
  bases_S944C3, 2,
  &(vtc_S944C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI6S944C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S944C3),9, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S944C2  : S944C3 {
  virtual  ~S944C2(); // _ZN6S944C2D1Ev
  virtual void  v8(); // _ZN6S944C22v8Ev
  S944C2(); // tgen
};
//SIG(-1 S944C2) C1{ BC2{ BC3{ BC4{} vd v2 v3 v4} vd v5 v6 Fc} vd v1}


 S944C2 ::~S944C2(){ note_dtor("S944C2", this);}
void  S944C2 ::v8(){vfunc_called(this, "_ZN6S944C22v8Ev");}
S944C2 ::S944C2(){ note_ctor("S944C2", this);} // tgen

static void Test_S944C2()
{
  extern Class_Descriptor cd_S944C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S944C2, buf);
    S944C2 *dp, &lv = *(dp=new (buf) S944C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S944C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S944C2)");
    check_base_class_offset(lv, (S20956C14_nt*)(S944C4*)(S944C3*), 0, "S944C2");
    check_base_class_offset(lv, (S944C4*)(S944C3*), 0, "S944C2");
    check_base_class_offset(lv, (S944C3*), 0, "S944C2");
    test_class_info(&lv, &cd_S944C2);
    dp->~S944C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS944C2(Test_S944C2, "S944C2", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN6S944C2C1Ev();
extern void _ZN6S944C2D1Ev();
Name_Map name_map_S944C2[] = {
  NSPAIR(_ZN6S944C2C1Ev),
  NSPAIR(_ZN6S944C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20956C14_nt;
extern VTBL_ENTRY _ZTI12S20956C14_nt[];
extern Class_Descriptor cd_S944C4;
extern VTBL_ENTRY _ZTI6S944C4[];
extern  VTBL_ENTRY _ZTV6S944C4[];
extern Class_Descriptor cd_S944C3;
extern VTBL_ENTRY _ZTI6S944C3[];
extern  VTBL_ENTRY _ZTV6S944C3[];
static Base_Class bases_S944C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20956C14_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S944C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S944C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S944C2[];
extern void _ZN6S944C2D1Ev();
extern void _ZN6S944C2D0Ev();
extern void _ZN6S944C42v3Ev();
extern void _ZN6S944C42v4Ev();
extern void _ZN6S944C42v5Ev();
extern void _ZN6S944C32v6Ev();
extern void _ZN6S944C32v7Ev();
extern void _ZN6S944C22v8Ev();
static  VTBL_ENTRY vtc_S944C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S944C2[0]),
  (VTBL_ENTRY)&_ZN6S944C2D1Ev,
  (VTBL_ENTRY)&_ZN6S944C2D0Ev,
  (VTBL_ENTRY)&_ZN6S944C42v3Ev,
  (VTBL_ENTRY)&_ZN6S944C42v4Ev,
  (VTBL_ENTRY)&_ZN6S944C42v5Ev,
  (VTBL_ENTRY)&_ZN6S944C32v6Ev,
  (VTBL_ENTRY)&_ZN6S944C32v7Ev,
  (VTBL_ENTRY)&_ZN6S944C22v8Ev,
};
extern VTBL_ENTRY _ZTI6S944C2[];
extern  VTBL_ENTRY _ZTV6S944C2[];
Class_Descriptor cd_S944C2 = {  "S944C2", // class name
  bases_S944C2, 3,
  &(vtc_S944C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI6S944C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S944C2),10, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S944C1  : S944C2 {
  virtual  ~S944C1(); // _ZN6S944C1D1Ev
  virtual void  v1(); // _ZN6S944C12v1Ev
  virtual void  v2(); // _ZN6S944C12v2Ev
  S944C1(); // tgen
};
//SIG(1 S944C1) C1{ BC2{ BC3{ BC4{ BC5{} vd v3 v4 v5} vd v6 v7 Fc} vd v8} vd v1 v2}


 S944C1 ::~S944C1(){ note_dtor("S944C1", this);}
void  S944C1 ::v1(){vfunc_called(this, "_ZN6S944C12v1Ev");}
void  S944C1 ::v2(){vfunc_called(this, "_ZN6S944C12v2Ev");}
S944C1 ::S944C1(){ note_ctor("S944C1", this);} // tgen

static void Test_S944C1()
{
  extern Class_Descriptor cd_S944C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S944C1, buf);
    S944C1 *dp, &lv = *(dp=new (buf) S944C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S944C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S944C1)");
    check_base_class_offset(lv, (S20956C14_nt*)(S944C4*)(S944C3*)(S944C2*), 0, "S944C1");
    check_base_class_offset(lv, (S944C4*)(S944C3*)(S944C2*), 0, "S944C1");
    check_base_class_offset(lv, (S944C3*)(S944C2*), 0, "S944C1");
    check_base_class_offset(lv, (S944C2*), 0, "S944C1");
    test_class_info(&lv, &cd_S944C1);
    dp->~S944C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS944C1(Test_S944C1, "S944C1", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN6S944C1C1Ev();
extern void _ZN6S944C1D1Ev();
Name_Map name_map_S944C1[] = {
  NSPAIR(_ZN6S944C1C1Ev),
  NSPAIR(_ZN6S944C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20956C14_nt;
extern VTBL_ENTRY _ZTI12S20956C14_nt[];
extern Class_Descriptor cd_S944C4;
extern VTBL_ENTRY _ZTI6S944C4[];
extern  VTBL_ENTRY _ZTV6S944C4[];
extern Class_Descriptor cd_S944C3;
extern VTBL_ENTRY _ZTI6S944C3[];
extern  VTBL_ENTRY _ZTV6S944C3[];
extern Class_Descriptor cd_S944C2;
extern VTBL_ENTRY _ZTI6S944C2[];
extern  VTBL_ENTRY _ZTV6S944C2[];
static Base_Class bases_S944C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20956C14_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S944C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S944C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S944C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S944C1[];
extern void _ZN6S944C1D1Ev();
extern void _ZN6S944C1D0Ev();
extern void _ZN6S944C42v3Ev();
extern void _ZN6S944C42v4Ev();
extern void _ZN6S944C42v5Ev();
extern void _ZN6S944C32v6Ev();
extern void _ZN6S944C32v7Ev();
extern void _ZN6S944C22v8Ev();
extern void _ZN6S944C12v1Ev();
extern void _ZN6S944C12v2Ev();
static  VTBL_ENTRY vtc_S944C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S944C1[0]),
  (VTBL_ENTRY)&_ZN6S944C1D1Ev,
  (VTBL_ENTRY)&_ZN6S944C1D0Ev,
  (VTBL_ENTRY)&_ZN6S944C42v3Ev,
  (VTBL_ENTRY)&_ZN6S944C42v4Ev,
  (VTBL_ENTRY)&_ZN6S944C42v5Ev,
  (VTBL_ENTRY)&_ZN6S944C32v6Ev,
  (VTBL_ENTRY)&_ZN6S944C32v7Ev,
  (VTBL_ENTRY)&_ZN6S944C22v8Ev,
  (VTBL_ENTRY)&_ZN6S944C12v1Ev,
  (VTBL_ENTRY)&_ZN6S944C12v2Ev,
};
extern VTBL_ENTRY _ZTI6S944C1[];
extern  VTBL_ENTRY _ZTV6S944C1[];
Class_Descriptor cd_S944C1 = {  "S944C1", // class name
  bases_S944C1, 4,
  &(vtc_S944C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI6S944C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S944C1),12, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S8758C2  {
  int s8758c2f0;
  void *s8758c2f1[2];
  virtual  ~S8758C2(); // _ZN7S8758C2D1Ev
  virtual void  v2(); // _ZN7S8758C22v2Ev
  S8758C2(); // tgen
};
//SIG(-1 S8758C2) C1{ vd v1 Fi Fp[2]}


 S8758C2 ::~S8758C2(){ note_dtor("S8758C2", this);}
void  S8758C2 ::v2(){vfunc_called(this, "_ZN7S8758C22v2Ev");}
S8758C2 ::S8758C2(){ note_ctor("S8758C2", this);} // tgen

static void Test_S8758C2()
{
  extern Class_Descriptor cd_S8758C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S8758C2, buf);
    S8758C2 *dp, &lv = *(dp=new (buf) S8758C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S8758C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8758C2)");
    check_field_offset(lv, s8758c2f0, ABISELECT(8,4), "S8758C2.s8758c2f0");
    check_field_offset(lv, s8758c2f1, ABISELECT(16,8), "S8758C2.s8758c2f1");
    test_class_info(&lv, &cd_S8758C2);
    dp->~S8758C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8758C2(Test_S8758C2, "S8758C2", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN7S8758C2C1Ev();
extern void _ZN7S8758C2D1Ev();
Name_Map name_map_S8758C2[] = {
  NSPAIR(_ZN7S8758C2C1Ev),
  NSPAIR(_ZN7S8758C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S8758C2[];
extern void _ZN7S8758C2D1Ev();
extern void _ZN7S8758C2D0Ev();
extern void _ZN7S8758C22v2Ev();
static  VTBL_ENTRY vtc_S8758C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8758C2[0]),
  (VTBL_ENTRY)&_ZN7S8758C2D1Ev,
  (VTBL_ENTRY)&_ZN7S8758C2D0Ev,
  (VTBL_ENTRY)&_ZN7S8758C22v2Ev,
};
extern VTBL_ENTRY _ZTI7S8758C2[];
extern  VTBL_ENTRY _ZTV7S8758C2[];
Class_Descriptor cd_S8758C2 = {  "S8758C2", // class name
  0,0,//no base classes
  &(vtc_S8758C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI7S8758C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S8758C2),5, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S8758C1  : S8758C2 {
  int s8758c1f0[2];
  void *s8758c1f1;
  __tsi64 s8758c1f2;
  int s8758c1f3[6];
  char s8758c1f4;
  int s8758c1f5[3];
  virtual  ~S8758C1(); // _ZN7S8758C1D1Ev
  virtual void  v1(); // _ZN7S8758C12v1Ev
  S8758C1(); // tgen
};
//SIG(1 S8758C1) C1{ BC2{ vd v2 Fi Fp[2]} vd v1 Fi[2] Fp FL Fi[6] Fc Fi[3]}


 S8758C1 ::~S8758C1(){ note_dtor("S8758C1", this);}
void  S8758C1 ::v1(){vfunc_called(this, "_ZN7S8758C12v1Ev");}
S8758C1 ::S8758C1(){ note_ctor("S8758C1", this);} // tgen

static void Test_S8758C1()
{
  extern Class_Descriptor cd_S8758C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,20)];
    init_test(&cd_S8758C1, buf);
    S8758C1 *dp, &lv = *(dp=new (buf) S8758C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,76), "sizeof(S8758C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8758C1)");
    check_base_class_offset(lv, (S8758C2*), 0, "S8758C1");
    check_field_offset(lv, s8758c1f0, ABISELECT(32,16), "S8758C1.s8758c1f0");
    check_field_offset(lv, s8758c1f1, ABISELECT(40,24), "S8758C1.s8758c1f1");
    check_field_offset(lv, s8758c1f2, ABISELECT(48,28), "S8758C1.s8758c1f2");
    check_field_offset(lv, s8758c1f3, ABISELECT(56,36), "S8758C1.s8758c1f3");
    check_field_offset(lv, s8758c1f4, ABISELECT(80,60), "S8758C1.s8758c1f4");
    check_field_offset(lv, s8758c1f5, ABISELECT(84,64), "S8758C1.s8758c1f5");
    test_class_info(&lv, &cd_S8758C1);
    dp->~S8758C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8758C1(Test_S8758C1, "S8758C1", ABISELECT(96,76));

#else // __cplusplus

extern void _ZN7S8758C1C1Ev();
extern void _ZN7S8758C1D1Ev();
Name_Map name_map_S8758C1[] = {
  NSPAIR(_ZN7S8758C1C1Ev),
  NSPAIR(_ZN7S8758C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S8758C2;
extern VTBL_ENTRY _ZTI7S8758C2[];
extern  VTBL_ENTRY _ZTV7S8758C2[];
static Base_Class bases_S8758C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S8758C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S8758C1[];
extern void _ZN7S8758C1D1Ev();
extern void _ZN7S8758C1D0Ev();
extern void _ZN7S8758C22v2Ev();
extern void _ZN7S8758C12v1Ev();
static  VTBL_ENTRY vtc_S8758C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8758C1[0]),
  (VTBL_ENTRY)&_ZN7S8758C1D1Ev,
  (VTBL_ENTRY)&_ZN7S8758C1D0Ev,
  (VTBL_ENTRY)&_ZN7S8758C22v2Ev,
  (VTBL_ENTRY)&_ZN7S8758C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S8758C1[];
extern  VTBL_ENTRY _ZTV7S8758C1[];
Class_Descriptor cd_S8758C1 = {  "S8758C1", // class name
  bases_S8758C1, 1,
  &(vtc_S8758C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,76), // object size
  NSPAIRA(_ZTI7S8758C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S8758C1),6, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

union  S10631C2  {
  ::S2423C15 s10631c2f0;
  ::S2423C15 s10631c2f1;
  ::S2423C15 s10631c2f2;
  short s10631c2f3;
  int s10631c2f4;
  int s10631c2f5;
  int s10631c2f6;
  void *s10631c2f7;
};
//SIG(1 S10631C2) U1{ FC2{ Fc Fc Fc[14]} FC2 FC2 Fs Fi Fi Fi Fp}

#endif // __cplusplus
#ifdef __cplusplus

struct  S10631C1  {
  char s10631c1f0[16];
  ::S10631C2 s10631c1f1;
};
//SIG(1 S10631C1) C1{ Fc[16] FU2{ FC3{ Fc Fc Fc[14]} FC3 FC3 Fs Fi Fi Fi Fp}}



static void Test_S10631C1()
{
  {
    init_simple_test("S10631C1");
    S10631C1 lv;
    check2(sizeof(lv), 32, "sizeof(S10631C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10631C1)");
    check_field_offset(lv, s10631c1f0, 0, "S10631C1.s10631c1f0");
    check_field_offset(lv, s10631c1f1, 16, "S10631C1.s10631c1f1");
  }
}
static Arrange_To_Call_Me vS10631C1(Test_S10631C1, "S10631C1", 32);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1178C6  {
  virtual void  v1(); // _ZN7S1178C62v1Ev
  ~S1178C6(); // tgen
  S1178C6(); // tgen
};
//SIG(-1 S1178C6) C1{ v1}


void  S1178C6 ::v1(){vfunc_called(this, "_ZN7S1178C62v1Ev");}
S1178C6 ::~S1178C6(){ note_dtor("S1178C6", this);} // tgen
S1178C6 ::S1178C6(){ note_ctor("S1178C6", this);} // tgen

static void Test_S1178C6()
{
  extern Class_Descriptor cd_S1178C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S1178C6, buf);
    S1178C6 *dp, &lv = *(dp=new (buf) S1178C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S1178C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1178C6)");
    test_class_info(&lv, &cd_S1178C6);
    dp->~S1178C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1178C6(Test_S1178C6, "S1178C6", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S1178C6C1Ev();
extern void _ZN7S1178C6D1Ev();
Name_Map name_map_S1178C6[] = {
  NSPAIR(_ZN7S1178C6C1Ev),
  NSPAIR(_ZN7S1178C6D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S1178C6[];
extern void _ZN7S1178C62v1Ev();
static  VTBL_ENTRY vtc_S1178C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1178C6[0]),
  (VTBL_ENTRY)&_ZN7S1178C62v1Ev,
};
extern VTBL_ENTRY _ZTI7S1178C6[];
extern  VTBL_ENTRY _ZTV7S1178C6[];
Class_Descriptor cd_S1178C6 = {  "S1178C6", // class name
  0,0,//no base classes
  &(vtc_S1178C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S1178C6),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S1178C6),3, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1178C5  : S1178C6 {
  ~S1178C5(); // tgen
  S1178C5(); // tgen
};
//SIG(-1 S1178C5) C1{ BC2{ v1}}


S1178C5 ::~S1178C5(){ note_dtor("S1178C5", this);} // tgen
S1178C5 ::S1178C5(){ note_ctor("S1178C5", this);} // tgen

static void Test_S1178C5()
{
  extern Class_Descriptor cd_S1178C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S1178C5, buf);
    S1178C5 *dp, &lv = *(dp=new (buf) S1178C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S1178C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1178C5)");
    check_base_class_offset(lv, (S1178C6*), 0, "S1178C5");
    test_class_info(&lv, &cd_S1178C5);
    dp->~S1178C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1178C5(Test_S1178C5, "S1178C5", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S1178C5C1Ev();
extern void _ZN7S1178C5D1Ev();
Name_Map name_map_S1178C5[] = {
  NSPAIR(_ZN7S1178C5C1Ev),
  NSPAIR(_ZN7S1178C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1178C6;
extern VTBL_ENTRY _ZTI7S1178C6[];
extern  VTBL_ENTRY _ZTV7S1178C6[];
static Base_Class bases_S1178C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1178C6,    0, //bcp->offset
    0, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1178C5[];
extern void _ZN7S1178C62v1Ev();
static  VTBL_ENTRY vtc_S1178C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1178C5[0]),
  (VTBL_ENTRY)&_ZN7S1178C62v1Ev,
};
extern VTBL_ENTRY _ZTI7S1178C5[];
extern  VTBL_ENTRY _ZTV7S1178C5[];
Class_Descriptor cd_S1178C5 = {  "S1178C5", // class name
  bases_S1178C5, 1,
  &(vtc_S1178C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S1178C5),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1178C5),3, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1178C3  : S836C39 , virtual S1178C5 {
  int s1178c3f0;
  ~S1178C3(); // tgen
  S1178C3(); // tgen
};
//SIG(-1 S1178C3) C1{ BC2{ m} VBC3{ BC4{ v1}} Fi}


S1178C3 ::~S1178C3(){ note_dtor("S1178C3", this);} // tgen
S1178C3 ::S1178C3(){ note_ctor("S1178C3", this);} // tgen

static void Test_S1178C3()
{
  extern Class_Descriptor cd_S1178C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S1178C3, buf);
    S1178C3 *dp, &lv = *(dp=new (buf) S1178C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S1178C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1178C3)");
    check_base_class_offset(lv, (S836C39*), 0, "S1178C3");
    check_base_class_offset(lv, (S1178C6*)(S1178C5*), 0, "S1178C3");
    check_base_class_offset(lv, (S1178C5*), 0, "S1178C3");
    check_field_offset(lv, s1178c3f0, ABISELECT(8,4), "S1178C3.s1178c3f0");
    test_class_info(&lv, &cd_S1178C3);
    dp->~S1178C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1178C3(Test_S1178C3, "S1178C3", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S1178C3C1Ev();
extern void _ZN7S1178C3D1Ev();
Name_Map name_map_S1178C3[] = {
  NSPAIR(_ZN7S1178C3C1Ev),
  NSPAIR(_ZN7S1178C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S836C39;
extern VTBL_ENTRY _ZTI7S836C39[];
extern Class_Descriptor cd_S1178C6;
extern VTBL_ENTRY _ZTI7S1178C6[];
extern  VTBL_ENTRY _ZTV7S1178C6[];
extern Class_Descriptor cd_S1178C5;
extern VTBL_ENTRY _ZTI7S1178C5[];
extern  VTBL_ENTRY _ZTV7S1178C5[];
static Base_Class bases_S1178C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S836C39,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S1178C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S1178C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S1178C3[];
extern void _ZN7S1178C62v1Ev();
static  VTBL_ENTRY vtc_S1178C3[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S1178C3[0]),
  (VTBL_ENTRY)&_ZN7S1178C62v1Ev,
};
extern VTBL_ENTRY _ZTV7S1178C3[];
static  VTT_ENTRY vtt_S1178C3[] = {
  {&(_ZTV7S1178C3[4]),  4,5},
  {&(_ZTV7S1178C3[4]),  4,5},
};
extern VTBL_ENTRY _ZTI7S1178C3[];
extern  VTBL_ENTRY _ZTV7S1178C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1178C3[];
Class_Descriptor cd_S1178C3 = {  "S1178C3", // class name
  bases_S1178C3, 3,
  &(vtc_S1178C3[0]), // expected_vtbl_contents
  &(vtt_S1178C3[0]), // expected_vtt_contents
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S1178C3),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S1178C3),5, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S1178C3),2, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1178C2  : S1178C3 {
  ~S1178C2(); // tgen
  S1178C2(); // tgen
};
//SIG(-1 S1178C2) C1{ BC2{ BC3{ m} VBC4{ BC5{ v1}} Fi}}


S1178C2 ::~S1178C2(){ note_dtor("S1178C2", this);} // tgen
S1178C2 ::S1178C2(){ note_ctor("S1178C2", this);} // tgen

static void Test_S1178C2()
{
  extern Class_Descriptor cd_S1178C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S1178C2, buf);
    S1178C2 *dp, &lv = *(dp=new (buf) S1178C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S1178C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1178C2)");
    check_base_class_offset(lv, (S836C39*)(S1178C3*), 0, "S1178C2");
    check_base_class_offset(lv, (S1178C6*)(S1178C5*), 0, "S1178C2");
    check_base_class_offset(lv, (S1178C5*)(S1178C3*), 0, "S1178C2");
    check_base_class_offset(lv, (S1178C3*), 0, "S1178C2");
    test_class_info(&lv, &cd_S1178C2);
    dp->~S1178C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1178C2(Test_S1178C2, "S1178C2", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S1178C2C1Ev();
extern void _ZN7S1178C2D1Ev();
Name_Map name_map_S1178C2[] = {
  NSPAIR(_ZN7S1178C2C1Ev),
  NSPAIR(_ZN7S1178C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S836C39;
extern VTBL_ENTRY _ZTI7S836C39[];
extern Class_Descriptor cd_S1178C6;
extern VTBL_ENTRY _ZTI7S1178C6[];
extern  VTBL_ENTRY _ZTV7S1178C6[];
extern Class_Descriptor cd_S1178C5;
extern VTBL_ENTRY _ZTI7S1178C5[];
extern  VTBL_ENTRY _ZTV7S1178C5[];
extern Class_Descriptor cd_S1178C3;
extern VTBL_ENTRY _ZTI7S1178C3[];
extern  VTBL_ENTRY _ZTV7S1178C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1178C3[];
static Base_Class bases_S1178C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S836C39,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S1178C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S1178C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S1178C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1178C2[];
extern void _ZN7S1178C62v1Ev();
static  VTBL_ENTRY vtc_S1178C2[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S1178C2[0]),
  (VTBL_ENTRY)&_ZN7S1178C62v1Ev,
};
extern VTBL_ENTRY _ZTV7S1178C2[];
extern void _ZN7S1178C62v1Ev();
static  VTBL_ENTRY _tg__ZTV7S1178C3__7S1178C2[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S1178C3[0]),
  (VTBL_ENTRY)&_ZN7S1178C62v1Ev,
};
static  VTT_ENTRY vtt_S1178C2[] = {
  {&(_ZTV7S1178C2[4]),  4,5},
  {&(_tg__ZTV7S1178C3__7S1178C2[4]),  4,5},
  {&(_tg__ZTV7S1178C3__7S1178C2[4]),  4,5},
  {&(_ZTV7S1178C2[4]),  4,5},
};
extern VTBL_ENTRY _ZTI7S1178C2[];
extern  VTBL_ENTRY _ZTV7S1178C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1178C2[];
Class_Descriptor cd_S1178C2 = {  "S1178C2", // class name
  bases_S1178C2, 4,
  &(vtc_S1178C2[0]), // expected_vtbl_contents
  &(vtt_S1178C2[0]), // expected_vtt_contents
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S1178C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1178C2),5, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S1178C2),4, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1178C7  : S1178C6 , S1178C5 {
  virtual  ~S1178C7(); // _ZN7S1178C7D1Ev
  S1178C7(); // tgen
};
//SIG(-1 S1178C7) C1{ BC2{ v1} BC3{ BC2} vd}


 S1178C7 ::~S1178C7(){ note_dtor("S1178C7", this);}
S1178C7 ::S1178C7(){ note_ctor("S1178C7", this);} // tgen

static void Test_S1178C7()
{
  extern Class_Descriptor cd_S1178C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S1178C7, buf);
    S1178C7 *dp, &lv = *(dp=new (buf) S1178C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S1178C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1178C7)");
    /*is_ambiguous_... S1178C7::S1178C6 */ AMB_check_base_class_offset(lv, (S1178C6*), 0, "S1178C7");
    check_base_class_offset(lv, (S1178C6*)(S1178C5*), ABISELECT(8,4), "S1178C7");
    check_base_class_offset(lv, (S1178C5*), ABISELECT(8,4), "S1178C7");
    test_class_info(&lv, &cd_S1178C7);
    dp->~S1178C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1178C7(Test_S1178C7, "S1178C7", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S1178C7C1Ev();
extern void _ZN7S1178C7D1Ev();
Name_Map name_map_S1178C7[] = {
  NSPAIR(_ZN7S1178C7C1Ev),
  NSPAIR(_ZN7S1178C7D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1178C6;
extern VTBL_ENTRY _ZTI7S1178C6[];
extern  VTBL_ENTRY _ZTV7S1178C6[];
extern Class_Descriptor cd_S1178C6;
extern VTBL_ENTRY _ZTI7S1178C6[];
extern  VTBL_ENTRY _ZTV7S1178C6[];
extern Class_Descriptor cd_S1178C5;
extern VTBL_ENTRY _ZTI7S1178C5[];
extern  VTBL_ENTRY _ZTV7S1178C5[];
static Base_Class bases_S1178C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1178C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S1178C6,    ABISELECT(8,4), //bcp->offset
    5, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S1178C5,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1178C7[];
extern void _ZN7S1178C62v1Ev();
extern void _ZN7S1178C7D1Ev();
extern void _ZN7S1178C7D0Ev();
extern void _ZN7S1178C62v1Ev();
static  VTBL_ENTRY vtc_S1178C7[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1178C7[0]),
  (VTBL_ENTRY)&_ZN7S1178C62v1Ev,
  (VTBL_ENTRY)&_ZN7S1178C7D1Ev,
  (VTBL_ENTRY)&_ZN7S1178C7D0Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S1178C7[0]),
  (VTBL_ENTRY)&_ZN7S1178C62v1Ev,
};
extern VTBL_ENTRY _ZTI7S1178C7[];
extern  VTBL_ENTRY _ZTV7S1178C7[];
Class_Descriptor cd_S1178C7 = {  "S1178C7", // class name
  bases_S1178C7, 3,
  &(vtc_S1178C7[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S1178C7),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S1178C7),8, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1178C1  : S1178C2 , S1178C5 , S1178C7 {
  ~S1178C1(); // tgen
  S1178C1(); // tgen
};
//SIG(1 S1178C1) C1{ BC2{ BC3{ BC4{ m} VBC5{ BC6{ v1}} Fi}} BC5 BC7{ BC6 BC5 vd}}


S1178C1 ::~S1178C1(){ note_dtor("S1178C1", this);} // tgen
S1178C1 ::S1178C1(){ note_ctor("S1178C1", this);} // tgen

static void Test_S1178C1()
{
  extern Class_Descriptor cd_S1178C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[6];
    init_test(&cd_S1178C1, buf);
    S1178C1 *dp, &lv = *(dp=new (buf) S1178C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S1178C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1178C1)");
    check_base_class_offset(lv, (S836C39*)(S1178C3*)(S1178C2*), 0, "S1178C1");
    /*is_ambiguous_... S1178C1::S1178C5 */ AMB_check_base_class_offset(lv, (S1178C6*)(S1178C5*), 0, "S1178C1");
    check_base_class_offset(lv, (S1178C5*)(S1178C3*)(S1178C2*), 0, "S1178C1");
    check_base_class_offset(lv, (S1178C3*)(S1178C2*), 0, "S1178C1");
    check_base_class_offset(lv, (S1178C2*), 0, "S1178C1");
    /*is_ambiguous_... S1178C1::S1178C5 */ AMB_check_base_class_offset(lv, (S1178C6*)(S1178C5*), ABISELECT(16,8), "S1178C1");
    /*is_ambiguous_... S1178C1::S1178C5 */ AMB_check_base_class_offset(lv, (S1178C5*), ABISELECT(16,8), "S1178C1");
    /*is_ambiguous_... S1178C7::S1178C6 */ AMB_check_base_class_offset(lv, (S1178C6*)(S1178C7*), ABISELECT(24,12), "S1178C1");
    check_base_class_offset(lv, (S1178C6*)(S1178C5*)(S1178C7*), ABISELECT(32,16), "S1178C1");
    check_base_class_offset(lv, (S1178C5*)(S1178C7*), ABISELECT(32,16), "S1178C1");
    check_base_class_offset(lv, (S1178C7*), ABISELECT(24,12), "S1178C1");
    test_class_info(&lv, &cd_S1178C1);
    dp->~S1178C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1178C1(Test_S1178C1, "S1178C1", ABISELECT(40,20));

#else // __cplusplus

extern void _ZN7S1178C1C1Ev();
extern void _ZN7S1178C1D1Ev();
Name_Map name_map_S1178C1[] = {
  NSPAIR(_ZN7S1178C1C1Ev),
  NSPAIR(_ZN7S1178C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S836C39;
extern VTBL_ENTRY _ZTI7S836C39[];
extern Class_Descriptor cd_S1178C6;
extern VTBL_ENTRY _ZTI7S1178C6[];
extern  VTBL_ENTRY _ZTV7S1178C6[];
extern Class_Descriptor cd_S1178C5;
extern VTBL_ENTRY _ZTI7S1178C5[];
extern  VTBL_ENTRY _ZTV7S1178C5[];
extern Class_Descriptor cd_S1178C3;
extern VTBL_ENTRY _ZTI7S1178C3[];
extern  VTBL_ENTRY _ZTV7S1178C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1178C3[];
extern Class_Descriptor cd_S1178C2;
extern VTBL_ENTRY _ZTI7S1178C2[];
extern  VTBL_ENTRY _ZTV7S1178C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1178C2[];
extern Class_Descriptor cd_S1178C6;
extern VTBL_ENTRY _ZTI7S1178C6[];
extern  VTBL_ENTRY _ZTV7S1178C6[];
extern Class_Descriptor cd_S1178C5;
extern VTBL_ENTRY _ZTI7S1178C5[];
extern  VTBL_ENTRY _ZTV7S1178C5[];
extern Class_Descriptor cd_S1178C6;
extern VTBL_ENTRY _ZTI7S1178C6[];
extern  VTBL_ENTRY _ZTV7S1178C6[];
extern Class_Descriptor cd_S1178C6;
extern VTBL_ENTRY _ZTI7S1178C6[];
extern  VTBL_ENTRY _ZTV7S1178C6[];
extern Class_Descriptor cd_S1178C5;
extern VTBL_ENTRY _ZTI7S1178C5[];
extern  VTBL_ENTRY _ZTV7S1178C5[];
extern Class_Descriptor cd_S1178C7;
extern VTBL_ENTRY _ZTI7S1178C7[];
extern  VTBL_ENTRY _ZTV7S1178C7[];
static Base_Class bases_S1178C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S836C39,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S1178C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S1178C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S1178C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S1178C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S1178C6,    ABISELECT(16,8), //bcp->offset
    7, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S1178C5,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S1178C6,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S1178C6,    ABISELECT(32,16), //bcp->offset
    15, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S1178C5,    ABISELECT(32,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S1178C7,    ABISELECT(24,12), //bcp->offset
    10, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1178C1[];
extern void _ZN7S1178C62v1Ev();
extern void _ZN7S1178C1D1Ev();
extern void _ZN7S1178C1D0Ev();
extern void _ZN7S1178C62v1Ev();
extern void _ZN7S1178C62v1Ev();
extern void ABISELECT(_ZThn24_N7S1178C1D1Ev,_ZThn12_N7S1178C1D1Ev)();
extern void ABISELECT(_ZThn24_N7S1178C1D0Ev,_ZThn12_N7S1178C1D0Ev)();
extern void _ZN7S1178C62v1Ev();
static  VTBL_ENTRY vtc_S1178C1[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S1178C1[0]),
  (VTBL_ENTRY)&_ZN7S1178C62v1Ev,
  (VTBL_ENTRY)&_ZN7S1178C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1178C1D0Ev,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S1178C1[0]),
  (VTBL_ENTRY)&_ZN7S1178C62v1Ev,
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI7S1178C1[0]),
  (VTBL_ENTRY)&_ZN7S1178C62v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn24_N7S1178C1D1Ev,_ZThn12_N7S1178C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn24_N7S1178C1D0Ev,_ZThn12_N7S1178C1D0Ev),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI7S1178C1[0]),
  (VTBL_ENTRY)&_ZN7S1178C62v1Ev,
};
extern VTBL_ENTRY _ZTV7S1178C1[];
extern void _ZN7S1178C62v1Ev();
static  VTBL_ENTRY _tg__ZTV7S1178C2__7S1178C1[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S1178C2[0]),
  (VTBL_ENTRY)&_ZN7S1178C62v1Ev,
};
extern void _ZN7S1178C62v1Ev();
static  VTBL_ENTRY _tg__ZTV7S1178C37S1178C2__7S1178C1[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S1178C3[0]),
  (VTBL_ENTRY)&_ZN7S1178C62v1Ev,
};
static  VTT_ENTRY vtt_S1178C1[] = {
  {&(_ZTV7S1178C1[4]),  4,18},
  {&(_tg__ZTV7S1178C2__7S1178C1[4]),  4,5},
  {&(_tg__ZTV7S1178C37S1178C2__7S1178C1[4]),  4,5},
  {&(_tg__ZTV7S1178C37S1178C2__7S1178C1[4]),  4,5},
  {&(_tg__ZTV7S1178C2__7S1178C1[4]),  4,5},
  {&(_ZTV7S1178C1[4]),  4,18},
};
extern VTBL_ENTRY _ZTI7S1178C1[];
extern  VTBL_ENTRY _ZTV7S1178C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1178C1[];
Class_Descriptor cd_S1178C1 = {  "S1178C1", // class name
  bases_S1178C1, 11,
  &(vtc_S1178C1[0]), // expected_vtbl_contents
  &(vtt_S1178C1[0]), // expected_vtt_contents
  ABISELECT(40,20), // object size
  NSPAIRA(_ZTI7S1178C1),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S1178C1),18, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S1178C1),6, //virtual table table var
  10, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S18018C2  {
  void *s18018c2f0;
  ::S836C21_nt s18018c2f1;
  ::S836C21_nt s18018c2f2;
  int s18018c2f3[3];
  __tsi64 s18018c2f4;
  void  mf18018c2(); // _ZN8S18018C29mf18018c2Ev
};
//SIG(-1 S18018C2) C1{ m Fp FC2{ m Fp Fi FC3{ m}} FC2 Fi[3] FL}


void  S18018C2 ::mf18018c2(){}

static void Test_S18018C2()
{
  {
    init_simple_test("S18018C2");
    S18018C2 lv;
    check2(sizeof(lv), ABISELECT(64,48), "sizeof(S18018C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18018C2)");
    check_field_offset(lv, s18018c2f0, 0, "S18018C2.s18018c2f0");
    check_field_offset(lv, s18018c2f1, ABISELECT(8,4), "S18018C2.s18018c2f1");
    check_field_offset(lv, s18018c2f2, ABISELECT(24,16), "S18018C2.s18018c2f2");
    check_field_offset(lv, s18018c2f3, ABISELECT(40,28), "S18018C2.s18018c2f3");
    check_field_offset(lv, s18018c2f4, ABISELECT(56,40), "S18018C2.s18018c2f4");
  }
}
static Arrange_To_Call_Me vS18018C2(Test_S18018C2, "S18018C2", ABISELECT(64,48));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S18018C1  {
  void *s18018c1f0[2];
  ::S18018C2 s18018c1f1;
  void  mf18018c1(); // _ZN8S18018C19mf18018c1Ev
};
//SIG(1 S18018C1) C1{ m Fp[2] FC2{ m Fp FC3{ m Fp Fi FC4{ m}} FC3 Fi[3] FL}}


void  S18018C1 ::mf18018c1(){}

static void Test_S18018C1()
{
  {
    init_simple_test("S18018C1");
    S18018C1 lv;
    check2(sizeof(lv), ABISELECT(80,56), "sizeof(S18018C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18018C1)");
    check_field_offset(lv, s18018c1f0, 0, "S18018C1.s18018c1f0");
    check_field_offset(lv, s18018c1f1, ABISELECT(16,8), "S18018C1.s18018c1f1");
  }
}
static Arrange_To_Call_Me vS18018C1(Test_S18018C1, "S18018C1", ABISELECT(80,56));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S8757C2  {
  int s8757c2f0;
  void *s8757c2f1[2];
  virtual  ~S8757C2(); // _ZN7S8757C2D1Ev
  virtual void  v2(); // _ZN7S8757C22v2Ev
  S8757C2(); // tgen
};
//SIG(-1 S8757C2) C1{ vd v1 Fi Fp[2]}


 S8757C2 ::~S8757C2(){ note_dtor("S8757C2", this);}
void  S8757C2 ::v2(){vfunc_called(this, "_ZN7S8757C22v2Ev");}
S8757C2 ::S8757C2(){ note_ctor("S8757C2", this);} // tgen

static void Test_S8757C2()
{
  extern Class_Descriptor cd_S8757C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S8757C2, buf);
    S8757C2 *dp, &lv = *(dp=new (buf) S8757C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S8757C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8757C2)");
    check_field_offset(lv, s8757c2f0, ABISELECT(8,4), "S8757C2.s8757c2f0");
    check_field_offset(lv, s8757c2f1, ABISELECT(16,8), "S8757C2.s8757c2f1");
    test_class_info(&lv, &cd_S8757C2);
    dp->~S8757C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8757C2(Test_S8757C2, "S8757C2", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN7S8757C2C1Ev();
extern void _ZN7S8757C2D1Ev();
Name_Map name_map_S8757C2[] = {
  NSPAIR(_ZN7S8757C2C1Ev),
  NSPAIR(_ZN7S8757C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S8757C2[];
extern void _ZN7S8757C2D1Ev();
extern void _ZN7S8757C2D0Ev();
extern void _ZN7S8757C22v2Ev();
static  VTBL_ENTRY vtc_S8757C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8757C2[0]),
  (VTBL_ENTRY)&_ZN7S8757C2D1Ev,
  (VTBL_ENTRY)&_ZN7S8757C2D0Ev,
  (VTBL_ENTRY)&_ZN7S8757C22v2Ev,
};
extern VTBL_ENTRY _ZTI7S8757C2[];
extern  VTBL_ENTRY _ZTV7S8757C2[];
Class_Descriptor cd_S8757C2 = {  "S8757C2", // class name
  0,0,//no base classes
  &(vtc_S8757C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI7S8757C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S8757C2),5, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S8757C1  : S8757C2 {
  char s8757c1f0[2049];
  int s8757c1f1[2];
  __tsi64 s8757c1f2;
  int s8757c1f3[2];
  virtual  ~S8757C1(); // _ZN7S8757C1D1Ev
  virtual void  v1(); // _ZN7S8757C12v1Ev
  S8757C1(); // tgen
};
//SIG(1 S8757C1) C1{ BC2{ vd v2 Fi Fp[2]} vd v1 Fc[2049] Fi[2] FL Fi[2]}


 S8757C1 ::~S8757C1(){ note_dtor("S8757C1", this);}
void  S8757C1 ::v1(){vfunc_called(this, "_ZN7S8757C12v1Ev");}
S8757C1 ::S8757C1(){ note_ctor("S8757C1", this);} // tgen

static void Test_S8757C1()
{
  extern Class_Descriptor cd_S8757C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(265,524)];
    init_test(&cd_S8757C1, buf);
    S8757C1 *dp, &lv = *(dp=new (buf) S8757C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(2112,2092), "sizeof(S8757C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8757C1)");
    check_base_class_offset(lv, (S8757C2*), 0, "S8757C1");
    check_field_offset(lv, s8757c1f0, ABISELECT(32,16), "S8757C1.s8757c1f0");
    check_field_offset(lv, s8757c1f1, ABISELECT(2084,2068), "S8757C1.s8757c1f1");
    check_field_offset(lv, s8757c1f2, ABISELECT(2096,2076), "S8757C1.s8757c1f2");
    check_field_offset(lv, s8757c1f3, ABISELECT(2104,2084), "S8757C1.s8757c1f3");
    test_class_info(&lv, &cd_S8757C1);
    dp->~S8757C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8757C1(Test_S8757C1, "S8757C1", ABISELECT(2112,2092));

#else // __cplusplus

extern void _ZN7S8757C1C1Ev();
extern void _ZN7S8757C1D1Ev();
Name_Map name_map_S8757C1[] = {
  NSPAIR(_ZN7S8757C1C1Ev),
  NSPAIR(_ZN7S8757C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S8757C2;
extern VTBL_ENTRY _ZTI7S8757C2[];
extern  VTBL_ENTRY _ZTV7S8757C2[];
static Base_Class bases_S8757C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S8757C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S8757C1[];
extern void _ZN7S8757C1D1Ev();
extern void _ZN7S8757C1D0Ev();
extern void _ZN7S8757C22v2Ev();
extern void _ZN7S8757C12v1Ev();
static  VTBL_ENTRY vtc_S8757C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8757C1[0]),
  (VTBL_ENTRY)&_ZN7S8757C1D1Ev,
  (VTBL_ENTRY)&_ZN7S8757C1D0Ev,
  (VTBL_ENTRY)&_ZN7S8757C22v2Ev,
  (VTBL_ENTRY)&_ZN7S8757C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S8757C1[];
extern  VTBL_ENTRY _ZTV7S8757C1[];
Class_Descriptor cd_S8757C1 = {  "S8757C1", // class name
  bases_S8757C1, 1,
  &(vtc_S8757C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(2112,2092), // object size
  NSPAIRA(_ZTI7S8757C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S8757C1),6, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2458C3  : S20956C14_nt {
  virtual  ~S2458C3(); // _ZN7S2458C3D1Ev
  virtual void  v4(); // _ZN7S2458C32v4Ev
  virtual void  v5(); // _ZN7S2458C32v5Ev
  virtual void  v6(); // _ZN7S2458C32v6Ev
  S2458C3(); // tgen
};
//SIG(-1 S2458C3) C1{ BC2{} vd v1 v2 v3}


 S2458C3 ::~S2458C3(){ note_dtor("S2458C3", this);}
void  S2458C3 ::v4(){vfunc_called(this, "_ZN7S2458C32v4Ev");}
void  S2458C3 ::v5(){vfunc_called(this, "_ZN7S2458C32v5Ev");}
void  S2458C3 ::v6(){vfunc_called(this, "_ZN7S2458C32v6Ev");}
S2458C3 ::S2458C3(){ note_ctor("S2458C3", this);} // tgen

static void Test_S2458C3()
{
  extern Class_Descriptor cd_S2458C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S2458C3, buf);
    S2458C3 *dp, &lv = *(dp=new (buf) S2458C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S2458C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2458C3)");
    check_base_class_offset(lv, (S20956C14_nt*), 0, "S2458C3");
    test_class_info(&lv, &cd_S2458C3);
    dp->~S2458C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2458C3(Test_S2458C3, "S2458C3", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S2458C3C1Ev();
extern void _ZN7S2458C3D1Ev();
Name_Map name_map_S2458C3[] = {
  NSPAIR(_ZN7S2458C3C1Ev),
  NSPAIR(_ZN7S2458C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20956C14_nt;
extern VTBL_ENTRY _ZTI12S20956C14_nt[];
static Base_Class bases_S2458C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20956C14_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S2458C3[];
extern void _ZN7S2458C3D1Ev();
extern void _ZN7S2458C3D0Ev();
extern void _ZN7S2458C32v4Ev();
extern void _ZN7S2458C32v5Ev();
extern void _ZN7S2458C32v6Ev();
static  VTBL_ENTRY vtc_S2458C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2458C3[0]),
  (VTBL_ENTRY)&_ZN7S2458C3D1Ev,
  (VTBL_ENTRY)&_ZN7S2458C3D0Ev,
  (VTBL_ENTRY)&_ZN7S2458C32v4Ev,
  (VTBL_ENTRY)&_ZN7S2458C32v5Ev,
  (VTBL_ENTRY)&_ZN7S2458C32v6Ev,
};
extern VTBL_ENTRY _ZTI7S2458C3[];
extern  VTBL_ENTRY _ZTV7S2458C3[];
Class_Descriptor cd_S2458C3 = {  "S2458C3", // class name
  bases_S2458C3, 1,
  &(vtc_S2458C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S2458C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2458C3),7, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2458C2  : S2458C3 {
  char s2458c2f0;
  virtual  ~S2458C2(); // _ZN7S2458C2D1Ev
  virtual void  v7(); // _ZN7S2458C22v7Ev
  virtual void  v8(); // _ZN7S2458C22v8Ev
  S2458C2(); // tgen
};
//SIG(-1 S2458C2) C1{ BC2{ BC3{} vd v3 v4 v5} vd v1 v2 Fc}


 S2458C2 ::~S2458C2(){ note_dtor("S2458C2", this);}
void  S2458C2 ::v7(){vfunc_called(this, "_ZN7S2458C22v7Ev");}
void  S2458C2 ::v8(){vfunc_called(this, "_ZN7S2458C22v8Ev");}
S2458C2 ::S2458C2(){ note_ctor("S2458C2", this);} // tgen

static void Test_S2458C2()
{
  extern Class_Descriptor cd_S2458C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S2458C2, buf);
    S2458C2 *dp, &lv = *(dp=new (buf) S2458C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S2458C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2458C2)");
    check_base_class_offset(lv, (S20956C14_nt*)(S2458C3*), 0, "S2458C2");
    check_base_class_offset(lv, (S2458C3*), 0, "S2458C2");
    check_field_offset(lv, s2458c2f0, ABISELECT(8,4), "S2458C2.s2458c2f0");
    test_class_info(&lv, &cd_S2458C2);
    dp->~S2458C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2458C2(Test_S2458C2, "S2458C2", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S2458C2C1Ev();
extern void _ZN7S2458C2D1Ev();
Name_Map name_map_S2458C2[] = {
  NSPAIR(_ZN7S2458C2C1Ev),
  NSPAIR(_ZN7S2458C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20956C14_nt;
extern VTBL_ENTRY _ZTI12S20956C14_nt[];
extern Class_Descriptor cd_S2458C3;
extern VTBL_ENTRY _ZTI7S2458C3[];
extern  VTBL_ENTRY _ZTV7S2458C3[];
static Base_Class bases_S2458C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20956C14_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S2458C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S2458C2[];
extern void _ZN7S2458C2D1Ev();
extern void _ZN7S2458C2D0Ev();
extern void _ZN7S2458C32v4Ev();
extern void _ZN7S2458C32v5Ev();
extern void _ZN7S2458C32v6Ev();
extern void _ZN7S2458C22v7Ev();
extern void _ZN7S2458C22v8Ev();
static  VTBL_ENTRY vtc_S2458C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2458C2[0]),
  (VTBL_ENTRY)&_ZN7S2458C2D1Ev,
  (VTBL_ENTRY)&_ZN7S2458C2D0Ev,
  (VTBL_ENTRY)&_ZN7S2458C32v4Ev,
  (VTBL_ENTRY)&_ZN7S2458C32v5Ev,
  (VTBL_ENTRY)&_ZN7S2458C32v6Ev,
  (VTBL_ENTRY)&_ZN7S2458C22v7Ev,
  (VTBL_ENTRY)&_ZN7S2458C22v8Ev,
};
extern VTBL_ENTRY _ZTI7S2458C2[];
extern  VTBL_ENTRY _ZTV7S2458C2[];
Class_Descriptor cd_S2458C2 = {  "S2458C2", // class name
  bases_S2458C2, 2,
  &(vtc_S2458C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S2458C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2458C2),9, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2458C1  : S2458C2 {
  virtual  ~S2458C1(); // _ZN7S2458C1D1Ev
  virtual void  v1(); // _ZN7S2458C12v1Ev
  virtual void  v2(); // _ZN7S2458C12v2Ev
  virtual void  v3(); // _ZN7S2458C12v3Ev
  S2458C1(); // tgen
};
//SIG(1 S2458C1) C1{ BC2{ BC3{ BC4{} vd v4 v5 v6} vd v7 v8 Fc} vd v1 v2 v3}


 S2458C1 ::~S2458C1(){ note_dtor("S2458C1", this);}
void  S2458C1 ::v1(){vfunc_called(this, "_ZN7S2458C12v1Ev");}
void  S2458C1 ::v2(){vfunc_called(this, "_ZN7S2458C12v2Ev");}
void  S2458C1 ::v3(){vfunc_called(this, "_ZN7S2458C12v3Ev");}
S2458C1 ::S2458C1(){ note_ctor("S2458C1", this);} // tgen

static void Test_S2458C1()
{
  extern Class_Descriptor cd_S2458C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S2458C1, buf);
    S2458C1 *dp, &lv = *(dp=new (buf) S2458C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S2458C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2458C1)");
    check_base_class_offset(lv, (S20956C14_nt*)(S2458C3*)(S2458C2*), 0, "S2458C1");
    check_base_class_offset(lv, (S2458C3*)(S2458C2*), 0, "S2458C1");
    check_base_class_offset(lv, (S2458C2*), 0, "S2458C1");
    test_class_info(&lv, &cd_S2458C1);
    dp->~S2458C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2458C1(Test_S2458C1, "S2458C1", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S2458C1C1Ev();
extern void _ZN7S2458C1D1Ev();
Name_Map name_map_S2458C1[] = {
  NSPAIR(_ZN7S2458C1C1Ev),
  NSPAIR(_ZN7S2458C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20956C14_nt;
extern VTBL_ENTRY _ZTI12S20956C14_nt[];
extern Class_Descriptor cd_S2458C3;
extern VTBL_ENTRY _ZTI7S2458C3[];
extern  VTBL_ENTRY _ZTV7S2458C3[];
extern Class_Descriptor cd_S2458C2;
extern VTBL_ENTRY _ZTI7S2458C2[];
extern  VTBL_ENTRY _ZTV7S2458C2[];
static Base_Class bases_S2458C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20956C14_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S2458C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S2458C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S2458C1[];
extern void _ZN7S2458C1D1Ev();
extern void _ZN7S2458C1D0Ev();
extern void _ZN7S2458C32v4Ev();
extern void _ZN7S2458C32v5Ev();
extern void _ZN7S2458C32v6Ev();
extern void _ZN7S2458C22v7Ev();
extern void _ZN7S2458C22v8Ev();
extern void _ZN7S2458C12v1Ev();
extern void _ZN7S2458C12v2Ev();
extern void _ZN7S2458C12v3Ev();
static  VTBL_ENTRY vtc_S2458C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2458C1[0]),
  (VTBL_ENTRY)&_ZN7S2458C1D1Ev,
  (VTBL_ENTRY)&_ZN7S2458C1D0Ev,
  (VTBL_ENTRY)&_ZN7S2458C32v4Ev,
  (VTBL_ENTRY)&_ZN7S2458C32v5Ev,
  (VTBL_ENTRY)&_ZN7S2458C32v6Ev,
  (VTBL_ENTRY)&_ZN7S2458C22v7Ev,
  (VTBL_ENTRY)&_ZN7S2458C22v8Ev,
  (VTBL_ENTRY)&_ZN7S2458C12v1Ev,
  (VTBL_ENTRY)&_ZN7S2458C12v2Ev,
  (VTBL_ENTRY)&_ZN7S2458C12v3Ev,
};
extern VTBL_ENTRY _ZTI7S2458C1[];
extern  VTBL_ENTRY _ZTV7S2458C1[];
Class_Descriptor cd_S2458C1 = {  "S2458C1", // class name
  bases_S2458C1, 3,
  &(vtc_S2458C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S2458C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2458C1),12, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S12472C1  {
  int s12472c1f0;
  ::S12471C2 s12472c1f1;
};
//SIG(1 S12472C1) C1{ Fi FC2{ Fi[4] FU3{ Fc[16] FC4{ Fc Fc Fc[14]}} Fp[2]}}



static void Test_S12472C1()
{
  {
    init_simple_test("S12472C1");
    S12472C1 lv;
    check2(sizeof(lv), ABISELECT(56,44), "sizeof(S12472C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S12472C1)");
    check_field_offset(lv, s12472c1f0, 0, "S12472C1.s12472c1f0");
    check_field_offset(lv, s12472c1f1, ABISELECT(8,4), "S12472C1.s12472c1f1");
  }
}
static Arrange_To_Call_Me vS12472C1(Test_S12472C1, "S12472C1", ABISELECT(56,44));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S12779C1  {
  int s12779c1f0;
  void *s12779c1f1[3];
  int s12779c1f2[3];
  void *s12779c1f3[8];
  int s12779c1f4[8];
  void *s12779c1f5[8];
  int s12779c1f6[16];
  char s12779c1f7[8];
};
//SIG(1 S12779C1) C1{ Fi Fp[3] Fi[3] Fp[8] Fi[8] Fp[8] Fi[16] Fc[8]}



static void Test_S12779C1()
{
  {
    init_simple_test("S12779C1");
    S12779C1 lv;
    check2(sizeof(lv), ABISELECT(280,196), "sizeof(S12779C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S12779C1)");
    check_field_offset(lv, s12779c1f0, 0, "S12779C1.s12779c1f0");
    check_field_offset(lv, s12779c1f1, ABISELECT(8,4), "S12779C1.s12779c1f1");
    check_field_offset(lv, s12779c1f2, ABISELECT(32,16), "S12779C1.s12779c1f2");
    check_field_offset(lv, s12779c1f3, ABISELECT(48,28), "S12779C1.s12779c1f3");
    check_field_offset(lv, s12779c1f4, ABISELECT(112,60), "S12779C1.s12779c1f4");
    check_field_offset(lv, s12779c1f5, ABISELECT(144,92), "S12779C1.s12779c1f5");
    check_field_offset(lv, s12779c1f6, ABISELECT(208,124), "S12779C1.s12779c1f6");
    check_field_offset(lv, s12779c1f7, ABISELECT(272,188), "S12779C1.s12779c1f7");
  }
}
static Arrange_To_Call_Me vS12779C1(Test_S12779C1, "S12779C1", ABISELECT(280,196));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S11019C1  {
  char s11019c1f0[8];
  long s11019c1f1;
  int s11019c1f2[2];
  long s11019c1f3[3];
  int s11019c1f4[2];
  char s11019c1f5[4];
  int s11019c1f6[6];
  char s11019c1f7[44];
};
//SIG(1 S11019C1) C1{ Fc[8] Fl Fi[2] Fl[3] Fi[2] Fc[4] Fi[6] Fc[44]}



static void Test_S11019C1()
{
  {
    init_simple_test("S11019C1");
    S11019C1 lv;
    check2(sizeof(lv), ABISELECT(128,112), "sizeof(S11019C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S11019C1)");
    check_field_offset(lv, s11019c1f0, 0, "S11019C1.s11019c1f0");
    check_field_offset(lv, s11019c1f1, 8, "S11019C1.s11019c1f1");
    check_field_offset(lv, s11019c1f2, ABISELECT(16,12), "S11019C1.s11019c1f2");
    check_field_offset(lv, s11019c1f3, ABISELECT(24,20), "S11019C1.s11019c1f3");
    check_field_offset(lv, s11019c1f4, ABISELECT(48,32), "S11019C1.s11019c1f4");
    check_field_offset(lv, s11019c1f5, ABISELECT(56,40), "S11019C1.s11019c1f5");
    check_field_offset(lv, s11019c1f6, ABISELECT(60,44), "S11019C1.s11019c1f6");
    check_field_offset(lv, s11019c1f7, ABISELECT(84,68), "S11019C1.s11019c1f7");
  }
}
static Arrange_To_Call_Me vS11019C1(Test_S11019C1, "S11019C1", ABISELECT(128,112));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S11907C2_nt  {
  void *s11907c2f0[5];
};
//SIG(-1 S11907C2_nt) C1{ Fp[5]}



//skip512 S11907C2_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S11907C4_nt  {
  void *s11907c4f0[2];
};
//SIG(-1 S11907C4_nt) C1{ Fp[2]}



//skip512 S11907C4_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S11907C1  {
  ::S11907C2_nt s11907c1f0;
  ::S11907C2_nt s11907c1f1;
  ::S11907C4_nt s11907c1f2;
  int s11907c1f3[3];
  char s11907c1f4[4];
  void *s11907c1f5;
};
//SIG(1 S11907C1) C1{ FC2{ Fp[5]} FC2 FC3{ Fp[2]} Fi[3] Fc[4] Fp}



static void Test_S11907C1()
{
  {
    init_simple_test("S11907C1");
    S11907C1 lv;
    check2(sizeof(lv), ABISELECT(120,68), "sizeof(S11907C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S11907C1)");
    check_field_offset(lv, s11907c1f0, 0, "S11907C1.s11907c1f0");
    check_field_offset(lv, s11907c1f1, ABISELECT(40,20), "S11907C1.s11907c1f1");
    check_field_offset(lv, s11907c1f2, ABISELECT(80,40), "S11907C1.s11907c1f2");
    check_field_offset(lv, s11907c1f3, ABISELECT(96,48), "S11907C1.s11907c1f3");
    check_field_offset(lv, s11907c1f4, ABISELECT(108,60), "S11907C1.s11907c1f4");
    check_field_offset(lv, s11907c1f5, ABISELECT(112,64), "S11907C1.s11907c1f5");
  }
}
static Arrange_To_Call_Me vS11907C1(Test_S11907C1, "S11907C1", ABISELECT(120,68));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S16562C1  {
  int s16562c1f0;
  char s16562c1f1;
  long s16562c1f2;
  __tsi64 s16562c1f3;
  int s16562c1f4;
  long s16562c1f5[7];
  long double s16562c1f6[7];
  int s16562c1f7[7];
  void *s16562c1f8;
  int s16562c1f9[2];
  void  mf16562c1(); // _ZN8S16562C19mf16562c1Ev
};
//SIG(1 S16562C1) C1{ m Fi Fc Fl FL Fi Fl[7] FD[7] Fi[7] Fp Fi[2]}


void  S16562C1 ::mf16562c1(){}

static void Test_S16562C1()
{
  {
    init_simple_test("S16562C1");
    S16562C1 lv;
    check2(sizeof(lv), ABISELECT(256,176), "sizeof(S16562C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S16562C1)");
    check_field_offset(lv, s16562c1f0, 0, "S16562C1.s16562c1f0");
    check_field_offset(lv, s16562c1f1, 4, "S16562C1.s16562c1f1");
    check_field_offset(lv, s16562c1f2, 8, "S16562C1.s16562c1f2");
    check_field_offset(lv, s16562c1f3, ABISELECT(16,12), "S16562C1.s16562c1f3");
    check_field_offset(lv, s16562c1f4, ABISELECT(24,20), "S16562C1.s16562c1f4");
    check_field_offset(lv, s16562c1f5, ABISELECT(32,24), "S16562C1.s16562c1f5");
    check_field_offset(lv, s16562c1f6, ABISELECT(96,52), "S16562C1.s16562c1f6");
    check_field_offset(lv, s16562c1f7, ABISELECT(208,136), "S16562C1.s16562c1f7");
    check_field_offset(lv, s16562c1f8, ABISELECT(240,164), "S16562C1.s16562c1f8");
    check_field_offset(lv, s16562c1f9, ABISELECT(248,168), "S16562C1.s16562c1f9");
  }
}
static Arrange_To_Call_Me vS16562C1(Test_S16562C1, "S16562C1", ABISELECT(256,176));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S21839C1  {
  void *s21839c1f0[3];
  int s21839c1f1:8;
  void *s21839c1f2[2];
  int s21839c1f3;
  void *s21839c1f4[2];
  ::S9191C6_nt s21839c1f5;
  void  mf21839c1(); // _ZN8S21839C19mf21839c1Ev
  virtual  ~S21839C1(); // _ZN8S21839C1D1Ev
  S21839C1(); // tgen
};
//SIG(1 S21839C1) C1{ vd m Fp[3] Fi:8 Fp[2] Fi Fp[2] FC2{ m Fp[2]}}


void  S21839C1 ::mf21839c1(){}
 S21839C1 ::~S21839C1(){ note_dtor("S21839C1", this);}
S21839C1 ::S21839C1(){ note_ctor("S21839C1", this);} // tgen

static void Test_S21839C1()
{
  extern Class_Descriptor cd_S21839C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[13];
    init_test(&cd_S21839C1, buf);
    S21839C1 *dp, &lv = *(dp=new (buf) S21839C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,48), "sizeof(S21839C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21839C1)");
    check_field_offset(lv, s21839c1f0, ABISELECT(8,4), "S21839C1.s21839c1f0");
    set_bf_and_test(lv, s21839c1f1, ABISELECT(32,16), 0, 8, 1, "S21839C1");
    set_bf_and_test(lv, s21839c1f1, ABISELECT(32,16), 0, 8, hide_sll(1LL<<7), "S21839C1");
    check_field_offset(lv, s21839c1f2, ABISELECT(40,20), "S21839C1.s21839c1f2");
    check_field_offset(lv, s21839c1f3, ABISELECT(56,28), "S21839C1.s21839c1f3");
    check_field_offset(lv, s21839c1f4, ABISELECT(64,32), "S21839C1.s21839c1f4");
    check_field_offset(lv, s21839c1f5, ABISELECT(80,40), "S21839C1.s21839c1f5");
    test_class_info(&lv, &cd_S21839C1);
    dp->~S21839C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21839C1(Test_S21839C1, "S21839C1", ABISELECT(96,48));

#else // __cplusplus

extern void _ZN8S21839C1C1Ev();
extern void _ZN8S21839C1D1Ev();
Name_Map name_map_S21839C1[] = {
  NSPAIR(_ZN8S21839C1C1Ev),
  NSPAIR(_ZN8S21839C1D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S21839C1[];
extern void _ZN8S21839C1D1Ev();
extern void _ZN8S21839C1D0Ev();
static  VTBL_ENTRY vtc_S21839C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S21839C1[0]),
  (VTBL_ENTRY)&_ZN8S21839C1D1Ev,
  (VTBL_ENTRY)&_ZN8S21839C1D0Ev,
};
extern VTBL_ENTRY _ZTI8S21839C1[];
extern  VTBL_ENTRY _ZTV8S21839C1[];
Class_Descriptor cd_S21839C1 = {  "S21839C1", // class name
  0,0,//no base classes
  &(vtc_S21839C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,48), // object size
  NSPAIRA(_ZTI8S21839C1),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S21839C1),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S21516C2  {
  void *s21516c2f0;
  int s21516c2f1[4];
  char s21516c2f2;
  ::S9839C4 s21516c2f3;
  void  mf21516c2(); // _ZN8S21516C29mf21516c2Ev
};
//SIG(-1 S21516C2) C1{ m Fp Fi[4] Fc FC2{ m Fp Fi[2] Fc}}


void  S21516C2 ::mf21516c2(){}

static void Test_S21516C2()
{
  {
    init_simple_test("S21516C2");
    S21516C2 lv;
    check2(sizeof(lv), ABISELECT(56,40), "sizeof(S21516C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21516C2)");
    check_field_offset(lv, s21516c2f0, 0, "S21516C2.s21516c2f0");
    check_field_offset(lv, s21516c2f1, ABISELECT(8,4), "S21516C2.s21516c2f1");
    check_field_offset(lv, s21516c2f2, ABISELECT(24,20), "S21516C2.s21516c2f2");
    check_field_offset(lv, s21516c2f3, ABISELECT(32,24), "S21516C2.s21516c2f3");
  }
}
static Arrange_To_Call_Me vS21516C2(Test_S21516C2, "S21516C2", ABISELECT(56,40));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S21516C1  {
  ::S21516C2 s21516c1f0;
  void  mf21516c1(); // _ZN8S21516C19mf21516c1Ev
  virtual  ~S21516C1(); // _ZN8S21516C1D1Ev
  S21516C1(); // tgen
};
//SIG(1 S21516C1) C1{ vd m FC2{ m Fp Fi[4] Fc FC3{ m Fp Fi[2] Fc}}}


void  S21516C1 ::mf21516c1(){}
 S21516C1 ::~S21516C1(){ note_dtor("S21516C1", this);}
S21516C1 ::S21516C1(){ note_ctor("S21516C1", this);} // tgen

static void Test_S21516C1()
{
  extern Class_Descriptor cd_S21516C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(9,12)];
    init_test(&cd_S21516C1, buf);
    S21516C1 *dp, &lv = *(dp=new (buf) S21516C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,44), "sizeof(S21516C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21516C1)");
    check_field_offset(lv, s21516c1f0, ABISELECT(8,4), "S21516C1.s21516c1f0");
    test_class_info(&lv, &cd_S21516C1);
    dp->~S21516C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21516C1(Test_S21516C1, "S21516C1", ABISELECT(64,44));

#else // __cplusplus

extern void _ZN8S21516C1C1Ev();
extern void _ZN8S21516C1D1Ev();
Name_Map name_map_S21516C1[] = {
  NSPAIR(_ZN8S21516C1C1Ev),
  NSPAIR(_ZN8S21516C1D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S21516C1[];
extern void _ZN8S21516C1D1Ev();
extern void _ZN8S21516C1D0Ev();
static  VTBL_ENTRY vtc_S21516C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S21516C1[0]),
  (VTBL_ENTRY)&_ZN8S21516C1D1Ev,
  (VTBL_ENTRY)&_ZN8S21516C1D0Ev,
};
extern VTBL_ENTRY _ZTI8S21516C1[];
extern  VTBL_ENTRY _ZTV8S21516C1[];
Class_Descriptor cd_S21516C1 = {  "S21516C1", // class name
  0,0,//no base classes
  &(vtc_S21516C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(64,44), // object size
  NSPAIRA(_ZTI8S21516C1),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S21516C1),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2456C3  : S20956C14_nt {
  virtual  ~S2456C3(); // _ZN7S2456C3D1Ev
  virtual void  v3(); // _ZN7S2456C32v3Ev
  virtual void  v4(); // _ZN7S2456C32v4Ev
  virtual void  v5(); // _ZN7S2456C32v5Ev
  S2456C3(); // tgen
};
//SIG(-1 S2456C3) C1{ BC2{} vd v1 v2 v3}


 S2456C3 ::~S2456C3(){ note_dtor("S2456C3", this);}
void  S2456C3 ::v3(){vfunc_called(this, "_ZN7S2456C32v3Ev");}
void  S2456C3 ::v4(){vfunc_called(this, "_ZN7S2456C32v4Ev");}
void  S2456C3 ::v5(){vfunc_called(this, "_ZN7S2456C32v5Ev");}
S2456C3 ::S2456C3(){ note_ctor("S2456C3", this);} // tgen

static void Test_S2456C3()
{
  extern Class_Descriptor cd_S2456C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S2456C3, buf);
    S2456C3 *dp, &lv = *(dp=new (buf) S2456C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S2456C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2456C3)");
    check_base_class_offset(lv, (S20956C14_nt*), 0, "S2456C3");
    test_class_info(&lv, &cd_S2456C3);
    dp->~S2456C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2456C3(Test_S2456C3, "S2456C3", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S2456C3C1Ev();
extern void _ZN7S2456C3D1Ev();
Name_Map name_map_S2456C3[] = {
  NSPAIR(_ZN7S2456C3C1Ev),
  NSPAIR(_ZN7S2456C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20956C14_nt;
extern VTBL_ENTRY _ZTI12S20956C14_nt[];
static Base_Class bases_S2456C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20956C14_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S2456C3[];
extern void _ZN7S2456C3D1Ev();
extern void _ZN7S2456C3D0Ev();
extern void _ZN7S2456C32v3Ev();
extern void _ZN7S2456C32v4Ev();
extern void _ZN7S2456C32v5Ev();
static  VTBL_ENTRY vtc_S2456C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2456C3[0]),
  (VTBL_ENTRY)&_ZN7S2456C3D1Ev,
  (VTBL_ENTRY)&_ZN7S2456C3D0Ev,
  (VTBL_ENTRY)&_ZN7S2456C32v3Ev,
  (VTBL_ENTRY)&_ZN7S2456C32v4Ev,
  (VTBL_ENTRY)&_ZN7S2456C32v5Ev,
};
extern VTBL_ENTRY _ZTI7S2456C3[];
extern  VTBL_ENTRY _ZTV7S2456C3[];
Class_Descriptor cd_S2456C3 = {  "S2456C3", // class name
  bases_S2456C3, 1,
  &(vtc_S2456C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S2456C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2456C3),7, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2456C2  : S2456C3 {
  virtual  ~S2456C2(); // _ZN7S2456C2D1Ev
  virtual void  v6(); // _ZN7S2456C22v6Ev
  virtual void  v7(); // _ZN7S2456C22v7Ev
  S2456C2(); // tgen
};
//SIG(-1 S2456C2) C1{ BC2{ BC3{} vd v3 v4 v5} vd v1 v2}


 S2456C2 ::~S2456C2(){ note_dtor("S2456C2", this);}
void  S2456C2 ::v6(){vfunc_called(this, "_ZN7S2456C22v6Ev");}
void  S2456C2 ::v7(){vfunc_called(this, "_ZN7S2456C22v7Ev");}
S2456C2 ::S2456C2(){ note_ctor("S2456C2", this);} // tgen

static void Test_S2456C2()
{
  extern Class_Descriptor cd_S2456C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S2456C2, buf);
    S2456C2 *dp, &lv = *(dp=new (buf) S2456C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S2456C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2456C2)");
    check_base_class_offset(lv, (S20956C14_nt*)(S2456C3*), 0, "S2456C2");
    check_base_class_offset(lv, (S2456C3*), 0, "S2456C2");
    test_class_info(&lv, &cd_S2456C2);
    dp->~S2456C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2456C2(Test_S2456C2, "S2456C2", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S2456C2C1Ev();
extern void _ZN7S2456C2D1Ev();
Name_Map name_map_S2456C2[] = {
  NSPAIR(_ZN7S2456C2C1Ev),
  NSPAIR(_ZN7S2456C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20956C14_nt;
extern VTBL_ENTRY _ZTI12S20956C14_nt[];
extern Class_Descriptor cd_S2456C3;
extern VTBL_ENTRY _ZTI7S2456C3[];
extern  VTBL_ENTRY _ZTV7S2456C3[];
static Base_Class bases_S2456C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20956C14_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S2456C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S2456C2[];
extern void _ZN7S2456C2D1Ev();
extern void _ZN7S2456C2D0Ev();
extern void _ZN7S2456C32v3Ev();
extern void _ZN7S2456C32v4Ev();
extern void _ZN7S2456C32v5Ev();
extern void _ZN7S2456C22v6Ev();
extern void _ZN7S2456C22v7Ev();
static  VTBL_ENTRY vtc_S2456C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2456C2[0]),
  (VTBL_ENTRY)&_ZN7S2456C2D1Ev,
  (VTBL_ENTRY)&_ZN7S2456C2D0Ev,
  (VTBL_ENTRY)&_ZN7S2456C32v3Ev,
  (VTBL_ENTRY)&_ZN7S2456C32v4Ev,
  (VTBL_ENTRY)&_ZN7S2456C32v5Ev,
  (VTBL_ENTRY)&_ZN7S2456C22v6Ev,
  (VTBL_ENTRY)&_ZN7S2456C22v7Ev,
};
extern VTBL_ENTRY _ZTI7S2456C2[];
extern  VTBL_ENTRY _ZTV7S2456C2[];
Class_Descriptor cd_S2456C2 = {  "S2456C2", // class name
  bases_S2456C2, 2,
  &(vtc_S2456C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S2456C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2456C2),9, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2456C1  : S2456C2 {
  virtual  ~S2456C1(); // _ZN7S2456C1D1Ev
  virtual void  v1(); // _ZN7S2456C12v1Ev
  virtual void  v2(); // _ZN7S2456C12v2Ev
  S2456C1(); // tgen
};
//SIG(1 S2456C1) C1{ BC2{ BC3{ BC4{} vd v3 v4 v5} vd v6 v7} vd v1 v2}


 S2456C1 ::~S2456C1(){ note_dtor("S2456C1", this);}
void  S2456C1 ::v1(){vfunc_called(this, "_ZN7S2456C12v1Ev");}
void  S2456C1 ::v2(){vfunc_called(this, "_ZN7S2456C12v2Ev");}
S2456C1 ::S2456C1(){ note_ctor("S2456C1", this);} // tgen

static void Test_S2456C1()
{
  extern Class_Descriptor cd_S2456C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S2456C1, buf);
    S2456C1 *dp, &lv = *(dp=new (buf) S2456C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S2456C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2456C1)");
    check_base_class_offset(lv, (S20956C14_nt*)(S2456C3*)(S2456C2*), 0, "S2456C1");
    check_base_class_offset(lv, (S2456C3*)(S2456C2*), 0, "S2456C1");
    check_base_class_offset(lv, (S2456C2*), 0, "S2456C1");
    test_class_info(&lv, &cd_S2456C1);
    dp->~S2456C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2456C1(Test_S2456C1, "S2456C1", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S2456C1C1Ev();
extern void _ZN7S2456C1D1Ev();
Name_Map name_map_S2456C1[] = {
  NSPAIR(_ZN7S2456C1C1Ev),
  NSPAIR(_ZN7S2456C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20956C14_nt;
extern VTBL_ENTRY _ZTI12S20956C14_nt[];
extern Class_Descriptor cd_S2456C3;
extern VTBL_ENTRY _ZTI7S2456C3[];
extern  VTBL_ENTRY _ZTV7S2456C3[];
extern Class_Descriptor cd_S2456C2;
extern VTBL_ENTRY _ZTI7S2456C2[];
extern  VTBL_ENTRY _ZTV7S2456C2[];
static Base_Class bases_S2456C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20956C14_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S2456C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S2456C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S2456C1[];
extern void _ZN7S2456C1D1Ev();
extern void _ZN7S2456C1D0Ev();
extern void _ZN7S2456C32v3Ev();
extern void _ZN7S2456C32v4Ev();
extern void _ZN7S2456C32v5Ev();
extern void _ZN7S2456C22v6Ev();
extern void _ZN7S2456C22v7Ev();
extern void _ZN7S2456C12v1Ev();
extern void _ZN7S2456C12v2Ev();
static  VTBL_ENTRY vtc_S2456C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2456C1[0]),
  (VTBL_ENTRY)&_ZN7S2456C1D1Ev,
  (VTBL_ENTRY)&_ZN7S2456C1D0Ev,
  (VTBL_ENTRY)&_ZN7S2456C32v3Ev,
  (VTBL_ENTRY)&_ZN7S2456C32v4Ev,
  (VTBL_ENTRY)&_ZN7S2456C32v5Ev,
  (VTBL_ENTRY)&_ZN7S2456C22v6Ev,
  (VTBL_ENTRY)&_ZN7S2456C22v7Ev,
  (VTBL_ENTRY)&_ZN7S2456C12v1Ev,
  (VTBL_ENTRY)&_ZN7S2456C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S2456C1[];
extern  VTBL_ENTRY _ZTV7S2456C1[];
Class_Descriptor cd_S2456C1 = {  "S2456C1", // class name
  bases_S2456C1, 3,
  &(vtc_S2456C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S2456C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2456C1),11, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S15965C2  {
  int s15965c2f0[2];
  ::S235C7_nt s15965c2f1[16];
  void  mf15965c2(); // _ZN8S15965C29mf15965c2Ev
};
//SIG(-1 S15965C2) C1{ m Fi[2] FC2{ m Fi[2]}[16]}


void  S15965C2 ::mf15965c2(){}

static void Test_S15965C2()
{
  {
    init_simple_test("S15965C2");
    S15965C2 lv;
    check2(sizeof(lv), 136, "sizeof(S15965C2)");
    check2(__alignof__(lv), 4, "__alignof__(S15965C2)");
    check_field_offset(lv, s15965c2f0, 0, "S15965C2.s15965c2f0");
    check_field_offset(lv, s15965c2f1, 8, "S15965C2.s15965c2f1");
  }
}
static Arrange_To_Call_Me vS15965C2(Test_S15965C2, "S15965C2", 136);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S15965C1  {
  ::S15965C2 s15965c1f0;
  ::S15965C2 s15965c1f1;
  int s15965c1f2[5];
  void  mf15965c1(); // _ZN8S15965C19mf15965c1Ev
};
//SIG(1 S15965C1) C1{ m FC2{ m Fi[2] FC3{ m Fi[2]}[16]} FC2 Fi[5]}


void  S15965C1 ::mf15965c1(){}

static void Test_S15965C1()
{
  {
    init_simple_test("S15965C1");
    S15965C1 lv;
    check2(sizeof(lv), 292, "sizeof(S15965C1)");
    check2(__alignof__(lv), 4, "__alignof__(S15965C1)");
    check_field_offset(lv, s15965c1f0, 0, "S15965C1.s15965c1f0");
    check_field_offset(lv, s15965c1f1, 136, "S15965C1.s15965c1f1");
    check_field_offset(lv, s15965c1f2, 272, "S15965C1.s15965c1f2");
  }
}
static Arrange_To_Call_Me vS15965C1(Test_S15965C1, "S15965C1", 292);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S8072C1  : S4287C5_nt {
  ::S836C21_nt s8072c1f0;
  ::S4162C5_nt s8072c1f1;
  ~S8072C1(); // tgen
  S8072C1(); // tgen
};
//SIG(1 S8072C1) C1{ BC2{ vd m Fi} FC3{ m Fp Fi FC4{ m}} FC5{ m Fp}}


S8072C1 ::~S8072C1(){ note_dtor("S8072C1", this);} // tgen
S8072C1 ::S8072C1(){ note_ctor("S8072C1", this);} // tgen

static void Test_S8072C1()
{
  extern Class_Descriptor cd_S8072C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,7)];
    init_test(&cd_S8072C1, buf);
    S8072C1 *dp, &lv = *(dp=new (buf) S8072C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,24), "sizeof(S8072C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8072C1)");
    check_base_class_offset(lv, (S4287C5_nt*), 0, "S8072C1");
    check_field_offset(lv, s8072c1f0, ABISELECT(16,8), "S8072C1.s8072c1f0");
    check_field_offset(lv, s8072c1f1, ABISELECT(32,20), "S8072C1.s8072c1f1");
    test_class_info(&lv, &cd_S8072C1);
    dp->~S8072C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8072C1(Test_S8072C1, "S8072C1", ABISELECT(40,24));

#else // __cplusplus

extern void _ZN7S8072C1C1Ev();
extern void _ZN7S8072C1D1Ev();
Name_Map name_map_S8072C1[] = {
  NSPAIR(_ZN7S8072C1C1Ev),
  NSPAIR(_ZN7S8072C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4287C5_nt;
extern VTBL_ENTRY _ZTI10S4287C5_nt[];
extern  VTBL_ENTRY _ZTV10S4287C5_nt[];
static Base_Class bases_S8072C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4287C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S8072C1[];
extern void _ZN7S8072C1D1Ev();
extern void _ZN7S8072C1D0Ev();
static  VTBL_ENTRY vtc_S8072C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8072C1[0]),
  (VTBL_ENTRY)&_ZN7S8072C1D1Ev,
  (VTBL_ENTRY)&_ZN7S8072C1D0Ev,
};
extern VTBL_ENTRY _ZTI7S8072C1[];
extern  VTBL_ENTRY _ZTV7S8072C1[];
Class_Descriptor cd_S8072C1 = {  "S8072C1", // class name
  bases_S8072C1, 1,
  &(vtc_S8072C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,24), // object size
  NSPAIRA(_ZTI7S8072C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S8072C1),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S22066C1  {
  void *s22066c1f0[2];
  virtual  ~S22066C1(); // _ZN8S22066C1D1Ev
  virtual void  v1(); // _ZN8S22066C12v1Ev
  virtual void  v2(); // _ZN8S22066C12v2Ev
  virtual void  v3(); // _ZN8S22066C12v3Ev
  virtual void  v4(); // _ZN8S22066C12v4Ev
  virtual void  v5(); // _ZN8S22066C12v5Ev
  virtual void  v6(); // _ZN8S22066C12v6Ev
  virtual void  v7(); // _ZN8S22066C12v7Ev
  virtual void  v8(); // _ZN8S22066C12v8Ev
  virtual void  v9(); // _ZN8S22066C12v9Ev
  virtual void  v10(); // _ZN8S22066C13v10Ev
  S22066C1(); // tgen
};
//SIG(1 S22066C1) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 Fp[2]}


 S22066C1 ::~S22066C1(){ note_dtor("S22066C1", this);}
void  S22066C1 ::v1(){vfunc_called(this, "_ZN8S22066C12v1Ev");}
void  S22066C1 ::v2(){vfunc_called(this, "_ZN8S22066C12v2Ev");}
void  S22066C1 ::v3(){vfunc_called(this, "_ZN8S22066C12v3Ev");}
void  S22066C1 ::v4(){vfunc_called(this, "_ZN8S22066C12v4Ev");}
void  S22066C1 ::v5(){vfunc_called(this, "_ZN8S22066C12v5Ev");}
void  S22066C1 ::v6(){vfunc_called(this, "_ZN8S22066C12v6Ev");}
void  S22066C1 ::v7(){vfunc_called(this, "_ZN8S22066C12v7Ev");}
void  S22066C1 ::v8(){vfunc_called(this, "_ZN8S22066C12v8Ev");}
void  S22066C1 ::v9(){vfunc_called(this, "_ZN8S22066C12v9Ev");}
void  S22066C1 ::v10(){vfunc_called(this, "_ZN8S22066C13v10Ev");}
S22066C1 ::S22066C1(){ note_ctor("S22066C1", this);} // tgen

static void Test_S22066C1()
{
  extern Class_Descriptor cd_S22066C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S22066C1, buf);
    S22066C1 *dp, &lv = *(dp=new (buf) S22066C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S22066C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S22066C1)");
    check_field_offset(lv, s22066c1f0, ABISELECT(8,4), "S22066C1.s22066c1f0");
    test_class_info(&lv, &cd_S22066C1);
    dp->~S22066C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS22066C1(Test_S22066C1, "S22066C1", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN8S22066C1C1Ev();
extern void _ZN8S22066C1D1Ev();
Name_Map name_map_S22066C1[] = {
  NSPAIR(_ZN8S22066C1C1Ev),
  NSPAIR(_ZN8S22066C1D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S22066C1[];
extern void _ZN8S22066C1D1Ev();
extern void _ZN8S22066C1D0Ev();
extern void _ZN8S22066C12v1Ev();
extern void _ZN8S22066C12v2Ev();
extern void _ZN8S22066C12v3Ev();
extern void _ZN8S22066C12v4Ev();
extern void _ZN8S22066C12v5Ev();
extern void _ZN8S22066C12v6Ev();
extern void _ZN8S22066C12v7Ev();
extern void _ZN8S22066C12v8Ev();
extern void _ZN8S22066C12v9Ev();
extern void _ZN8S22066C13v10Ev();
static  VTBL_ENTRY vtc_S22066C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S22066C1[0]),
  (VTBL_ENTRY)&_ZN8S22066C1D1Ev,
  (VTBL_ENTRY)&_ZN8S22066C1D0Ev,
  (VTBL_ENTRY)&_ZN8S22066C12v1Ev,
  (VTBL_ENTRY)&_ZN8S22066C12v2Ev,
  (VTBL_ENTRY)&_ZN8S22066C12v3Ev,
  (VTBL_ENTRY)&_ZN8S22066C12v4Ev,
  (VTBL_ENTRY)&_ZN8S22066C12v5Ev,
  (VTBL_ENTRY)&_ZN8S22066C12v6Ev,
  (VTBL_ENTRY)&_ZN8S22066C12v7Ev,
  (VTBL_ENTRY)&_ZN8S22066C12v8Ev,
  (VTBL_ENTRY)&_ZN8S22066C12v9Ev,
  (VTBL_ENTRY)&_ZN8S22066C13v10Ev,
};
extern VTBL_ENTRY _ZTI8S22066C1[];
extern  VTBL_ENTRY _ZTV8S22066C1[];
Class_Descriptor cd_S22066C1 = {  "S22066C1", // class name
  0,0,//no base classes
  &(vtc_S22066C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI8S22066C1),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S22066C1),14, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S5449C2  : S20956C14_nt {
  ::S836C21_nt s5449c2f0;
  int s5449c2f1;
};
//SIG(-1 S5449C2) C1{ BC2{} FC3{ m Fp Fi FC4{ m}} Fi}



static void Test_S5449C2()
{
  extern Class_Descriptor cd_S5449C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,5)];
    init_test(&cd_S5449C2, buf);
    S5449C2 &lv = *(new (buf) S5449C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S5449C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5449C2)");
    check_base_class_offset(lv, (S20956C14_nt*), 0, "S5449C2");
    check_field_offset(lv, s5449c2f0, 0, "S5449C2.s5449c2f0");
    check_field_offset(lv, s5449c2f1, ABISELECT(16,12), "S5449C2.s5449c2f1");
    test_class_info(&lv, &cd_S5449C2);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5449C2(Test_S5449C2, "S5449C2", ABISELECT(24,16));

#else // __cplusplus

extern Class_Descriptor cd_S20956C14_nt;
extern VTBL_ENTRY _ZTI12S20956C14_nt[];
static Base_Class bases_S5449C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20956C14_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
Class_Descriptor cd_S5449C2 = {  "S5449C2", // class name
  bases_S5449C2, 1,
  0, // no vftv
  0, //no vtt
  ABISELECT(24,16), // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S5449C1  : S5449C2 {
  ::S836C21_nt s5449c1f0;
  ::S836C21_nt s5449c1f1;
};
//SIG(1 S5449C1) C1{ BC2{ BC3{} FC4{ m Fp Fi FC5{ m}} Fi} FC4 FC4}



static void Test_S5449C1()
{
  extern Class_Descriptor cd_S5449C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(8,11)];
    init_test(&cd_S5449C1, buf);
    S5449C1 &lv = *(new (buf) S5449C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,40), "sizeof(S5449C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5449C1)");
    check_base_class_offset(lv, (S20956C14_nt*)(S5449C2*), 0, "S5449C1");
    check_base_class_offset(lv, (S5449C2*), 0, "S5449C1");
    check_field_offset(lv, s5449c1f0, ABISELECT(24,16), "S5449C1.s5449c1f0");
    check_field_offset(lv, s5449c1f1, ABISELECT(40,28), "S5449C1.s5449c1f1");
    test_class_info(&lv, &cd_S5449C1);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5449C1(Test_S5449C1, "S5449C1", ABISELECT(56,40));

#else // __cplusplus

extern Class_Descriptor cd_S20956C14_nt;
extern VTBL_ENTRY _ZTI12S20956C14_nt[];
extern Class_Descriptor cd_S5449C2;
static Base_Class bases_S5449C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20956C14_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S5449C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
Class_Descriptor cd_S5449C1 = {  "S5449C1", // class name
  bases_S5449C1, 2,
  0, // no vftv
  0, //no vtt
  ABISELECT(56,40), // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S14255C1  {
  void *s14255c1f0;
  int s14255c1f1;
  void *s14255c1f2[7];
  int s14255c1f3[2];
  void *s14255c1f4[8];
  int s14255c1f5;
  void *s14255c1f6[2];
  int s14255c1f7[2];
};
//SIG(1 S14255C1) C1{ Fp Fi Fp[7] Fi[2] Fp[8] Fi Fp[2] Fi[2]}



static void Test_S14255C1()
{
  {
    init_simple_test("S14255C1");
    S14255C1 lv;
    check2(sizeof(lv), ABISELECT(176,96), "sizeof(S14255C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S14255C1)");
    check_field_offset(lv, s14255c1f0, 0, "S14255C1.s14255c1f0");
    check_field_offset(lv, s14255c1f1, ABISELECT(8,4), "S14255C1.s14255c1f1");
    check_field_offset(lv, s14255c1f2, ABISELECT(16,8), "S14255C1.s14255c1f2");
    check_field_offset(lv, s14255c1f3, ABISELECT(72,36), "S14255C1.s14255c1f3");
    check_field_offset(lv, s14255c1f4, ABISELECT(80,44), "S14255C1.s14255c1f4");
    check_field_offset(lv, s14255c1f5, ABISELECT(144,76), "S14255C1.s14255c1f5");
    check_field_offset(lv, s14255c1f6, ABISELECT(152,80), "S14255C1.s14255c1f6");
    check_field_offset(lv, s14255c1f7, ABISELECT(168,88), "S14255C1.s14255c1f7");
  }
}
static Arrange_To_Call_Me vS14255C1(Test_S14255C1, "S14255C1", ABISELECT(176,96));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S8115C1  : S4287C5_nt {
  ::S836C21_nt s8115c1f0;
  ::S836C21_nt s8115c1f1;
  virtual  ~S8115C1(); // _ZN7S8115C1D1Ev
  S8115C1(); // tgen
};
//SIG(1 S8115C1) C1{ BC2{ vd m Fi} vd FC3{ m Fp Fi FC4{ m}} FC3}


 S8115C1 ::~S8115C1(){ note_dtor("S8115C1", this);}
S8115C1 ::S8115C1(){ note_ctor("S8115C1", this);} // tgen

static void Test_S8115C1()
{
  extern Class_Descriptor cd_S8115C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,9)];
    init_test(&cd_S8115C1, buf);
    S8115C1 *dp, &lv = *(dp=new (buf) S8115C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S8115C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8115C1)");
    check_base_class_offset(lv, (S4287C5_nt*), 0, "S8115C1");
    check_field_offset(lv, s8115c1f0, ABISELECT(16,8), "S8115C1.s8115c1f0");
    check_field_offset(lv, s8115c1f1, ABISELECT(32,20), "S8115C1.s8115c1f1");
    test_class_info(&lv, &cd_S8115C1);
    dp->~S8115C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8115C1(Test_S8115C1, "S8115C1", ABISELECT(48,32));

#else // __cplusplus

extern void _ZN7S8115C1C1Ev();
extern void _ZN7S8115C1D1Ev();
Name_Map name_map_S8115C1[] = {
  NSPAIR(_ZN7S8115C1C1Ev),
  NSPAIR(_ZN7S8115C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4287C5_nt;
extern VTBL_ENTRY _ZTI10S4287C5_nt[];
extern  VTBL_ENTRY _ZTV10S4287C5_nt[];
static Base_Class bases_S8115C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4287C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S8115C1[];
extern void _ZN7S8115C1D1Ev();
extern void _ZN7S8115C1D0Ev();
static  VTBL_ENTRY vtc_S8115C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8115C1[0]),
  (VTBL_ENTRY)&_ZN7S8115C1D1Ev,
  (VTBL_ENTRY)&_ZN7S8115C1D0Ev,
};
extern VTBL_ENTRY _ZTI7S8115C1[];
extern  VTBL_ENTRY _ZTV7S8115C1[];
Class_Descriptor cd_S8115C1 = {  "S8115C1", // class name
  bases_S8115C1, 1,
  &(vtc_S8115C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI7S8115C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S8115C1),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S10761C1  {
  char s10761c1f0[21];
  int s10761c1f1[3];
  char s10761c1f2[32];
  int s10761c1f3;
  char s10761c1f4[288];
  int s10761c1f5;
  char s10761c1f6;
};
//SIG(1 S10761C1) C1{ Fc[21] Fi[3] Fc[32] Fi Fc[288] Fi Fc}



static void Test_S10761C1()
{
  {
    init_simple_test("S10761C1");
    S10761C1 lv;
    check2(sizeof(lv), 368, "sizeof(S10761C1)");
    check2(__alignof__(lv), 4, "__alignof__(S10761C1)");
    check_field_offset(lv, s10761c1f0, 0, "S10761C1.s10761c1f0");
    check_field_offset(lv, s10761c1f1, 24, "S10761C1.s10761c1f1");
    check_field_offset(lv, s10761c1f2, 36, "S10761C1.s10761c1f2");
    check_field_offset(lv, s10761c1f3, 68, "S10761C1.s10761c1f3");
    check_field_offset(lv, s10761c1f4, 72, "S10761C1.s10761c1f4");
    check_field_offset(lv, s10761c1f5, 360, "S10761C1.s10761c1f5");
    check_field_offset(lv, s10761c1f6, 364, "S10761C1.s10761c1f6");
  }
}
static Arrange_To_Call_Me vS10761C1(Test_S10761C1, "S10761C1", 368);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2457C3  : S20956C14_nt {
  virtual  ~S2457C3(); // _ZN7S2457C3D1Ev
  virtual void  v3(); // _ZN7S2457C32v3Ev
  virtual void  v4(); // _ZN7S2457C32v4Ev
  virtual void  v5(); // _ZN7S2457C32v5Ev
  S2457C3(); // tgen
};
//SIG(-1 S2457C3) C1{ BC2{} vd v1 v2 v3}


 S2457C3 ::~S2457C3(){ note_dtor("S2457C3", this);}
void  S2457C3 ::v3(){vfunc_called(this, "_ZN7S2457C32v3Ev");}
void  S2457C3 ::v4(){vfunc_called(this, "_ZN7S2457C32v4Ev");}
void  S2457C3 ::v5(){vfunc_called(this, "_ZN7S2457C32v5Ev");}
S2457C3 ::S2457C3(){ note_ctor("S2457C3", this);} // tgen

static void Test_S2457C3()
{
  extern Class_Descriptor cd_S2457C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S2457C3, buf);
    S2457C3 *dp, &lv = *(dp=new (buf) S2457C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S2457C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2457C3)");
    check_base_class_offset(lv, (S20956C14_nt*), 0, "S2457C3");
    test_class_info(&lv, &cd_S2457C3);
    dp->~S2457C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2457C3(Test_S2457C3, "S2457C3", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S2457C3C1Ev();
extern void _ZN7S2457C3D1Ev();
Name_Map name_map_S2457C3[] = {
  NSPAIR(_ZN7S2457C3C1Ev),
  NSPAIR(_ZN7S2457C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20956C14_nt;
extern VTBL_ENTRY _ZTI12S20956C14_nt[];
static Base_Class bases_S2457C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20956C14_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S2457C3[];
extern void _ZN7S2457C3D1Ev();
extern void _ZN7S2457C3D0Ev();
extern void _ZN7S2457C32v3Ev();
extern void _ZN7S2457C32v4Ev();
extern void _ZN7S2457C32v5Ev();
static  VTBL_ENTRY vtc_S2457C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2457C3[0]),
  (VTBL_ENTRY)&_ZN7S2457C3D1Ev,
  (VTBL_ENTRY)&_ZN7S2457C3D0Ev,
  (VTBL_ENTRY)&_ZN7S2457C32v3Ev,
  (VTBL_ENTRY)&_ZN7S2457C32v4Ev,
  (VTBL_ENTRY)&_ZN7S2457C32v5Ev,
};
extern VTBL_ENTRY _ZTI7S2457C3[];
extern  VTBL_ENTRY _ZTV7S2457C3[];
Class_Descriptor cd_S2457C3 = {  "S2457C3", // class name
  bases_S2457C3, 1,
  &(vtc_S2457C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S2457C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2457C3),7, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2457C2  : S2457C3 {
  virtual  ~S2457C2(); // _ZN7S2457C2D1Ev
  S2457C2(); // tgen
};
//SIG(-1 S2457C2) C1{ BC2{ BC3{} vd v1 v2 v3} vd}


 S2457C2 ::~S2457C2(){ note_dtor("S2457C2", this);}
S2457C2 ::S2457C2(){ note_ctor("S2457C2", this);} // tgen

static void Test_S2457C2()
{
  extern Class_Descriptor cd_S2457C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S2457C2, buf);
    S2457C2 *dp, &lv = *(dp=new (buf) S2457C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S2457C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2457C2)");
    check_base_class_offset(lv, (S20956C14_nt*)(S2457C3*), 0, "S2457C2");
    check_base_class_offset(lv, (S2457C3*), 0, "S2457C2");
    test_class_info(&lv, &cd_S2457C2);
    dp->~S2457C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2457C2(Test_S2457C2, "S2457C2", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S2457C2C1Ev();
extern void _ZN7S2457C2D1Ev();
Name_Map name_map_S2457C2[] = {
  NSPAIR(_ZN7S2457C2C1Ev),
  NSPAIR(_ZN7S2457C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20956C14_nt;
extern VTBL_ENTRY _ZTI12S20956C14_nt[];
extern Class_Descriptor cd_S2457C3;
extern VTBL_ENTRY _ZTI7S2457C3[];
extern  VTBL_ENTRY _ZTV7S2457C3[];
static Base_Class bases_S2457C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20956C14_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S2457C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S2457C2[];
extern void _ZN7S2457C2D1Ev();
extern void _ZN7S2457C2D0Ev();
extern void _ZN7S2457C32v3Ev();
extern void _ZN7S2457C32v4Ev();
extern void _ZN7S2457C32v5Ev();
static  VTBL_ENTRY vtc_S2457C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2457C2[0]),
  (VTBL_ENTRY)&_ZN7S2457C2D1Ev,
  (VTBL_ENTRY)&_ZN7S2457C2D0Ev,
  (VTBL_ENTRY)&_ZN7S2457C32v3Ev,
  (VTBL_ENTRY)&_ZN7S2457C32v4Ev,
  (VTBL_ENTRY)&_ZN7S2457C32v5Ev,
};
extern VTBL_ENTRY _ZTI7S2457C2[];
extern  VTBL_ENTRY _ZTV7S2457C2[];
Class_Descriptor cd_S2457C2 = {  "S2457C2", // class name
  bases_S2457C2, 2,
  &(vtc_S2457C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S2457C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2457C2),7, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2457C1  : S2457C2 {
  virtual  ~S2457C1(); // _ZN7S2457C1D1Ev
  virtual void  v1(); // _ZN7S2457C12v1Ev
  virtual void  v2(); // _ZN7S2457C12v2Ev
  S2457C1(); // tgen
};
//SIG(1 S2457C1) C1{ BC2{ BC3{ BC4{} vd v3 v4 v5} vd} vd v1 v2}


 S2457C1 ::~S2457C1(){ note_dtor("S2457C1", this);}
void  S2457C1 ::v1(){vfunc_called(this, "_ZN7S2457C12v1Ev");}
void  S2457C1 ::v2(){vfunc_called(this, "_ZN7S2457C12v2Ev");}
S2457C1 ::S2457C1(){ note_ctor("S2457C1", this);} // tgen

static void Test_S2457C1()
{
  extern Class_Descriptor cd_S2457C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S2457C1, buf);
    S2457C1 *dp, &lv = *(dp=new (buf) S2457C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S2457C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2457C1)");
    check_base_class_offset(lv, (S20956C14_nt*)(S2457C3*)(S2457C2*), 0, "S2457C1");
    check_base_class_offset(lv, (S2457C3*)(S2457C2*), 0, "S2457C1");
    check_base_class_offset(lv, (S2457C2*), 0, "S2457C1");
    test_class_info(&lv, &cd_S2457C1);
    dp->~S2457C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2457C1(Test_S2457C1, "S2457C1", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S2457C1C1Ev();
extern void _ZN7S2457C1D1Ev();
Name_Map name_map_S2457C1[] = {
  NSPAIR(_ZN7S2457C1C1Ev),
  NSPAIR(_ZN7S2457C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20956C14_nt;
extern VTBL_ENTRY _ZTI12S20956C14_nt[];
extern Class_Descriptor cd_S2457C3;
extern VTBL_ENTRY _ZTI7S2457C3[];
extern  VTBL_ENTRY _ZTV7S2457C3[];
extern Class_Descriptor cd_S2457C2;
extern VTBL_ENTRY _ZTI7S2457C2[];
extern  VTBL_ENTRY _ZTV7S2457C2[];
static Base_Class bases_S2457C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20956C14_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S2457C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S2457C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S2457C1[];
extern void _ZN7S2457C1D1Ev();
extern void _ZN7S2457C1D0Ev();
extern void _ZN7S2457C32v3Ev();
extern void _ZN7S2457C32v4Ev();
extern void _ZN7S2457C32v5Ev();
extern void _ZN7S2457C12v1Ev();
extern void _ZN7S2457C12v2Ev();
static  VTBL_ENTRY vtc_S2457C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2457C1[0]),
  (VTBL_ENTRY)&_ZN7S2457C1D1Ev,
  (VTBL_ENTRY)&_ZN7S2457C1D0Ev,
  (VTBL_ENTRY)&_ZN7S2457C32v3Ev,
  (VTBL_ENTRY)&_ZN7S2457C32v4Ev,
  (VTBL_ENTRY)&_ZN7S2457C32v5Ev,
  (VTBL_ENTRY)&_ZN7S2457C12v1Ev,
  (VTBL_ENTRY)&_ZN7S2457C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S2457C1[];
extern  VTBL_ENTRY _ZTV7S2457C1[];
Class_Descriptor cd_S2457C1 = {  "S2457C1", // class name
  bases_S2457C1, 3,
  &(vtc_S2457C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S2457C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2457C1),9, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S16672C2_nt  {
  int s16672c2f0[6];
};
//SIG(-1 S16672C2_nt) C1{ Fi[6]}



//skip512 S16672C2_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S16672C1  {
  int s16672c1f0;
  ::S16672C2_nt s16672c1f1;
  ::S285C18 s16672c1f2;
  void  mf16672c1(); // _ZN8S16672C19mf16672c1Ev
};
//SIG(1 S16672C1) C1{ m Fi FC2{ Fi[6]} FC3{ BC4{ m Fp Fi[2]}}}


void  S16672C1 ::mf16672c1(){}

static void Test_S16672C1()
{
  {
    init_simple_test("S16672C1");
    S16672C1 lv;
    check2(sizeof(lv), ABISELECT(48,40), "sizeof(S16672C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S16672C1)");
    check_field_offset(lv, s16672c1f0, 0, "S16672C1.s16672c1f0");
    check_field_offset(lv, s16672c1f1, 4, "S16672C1.s16672c1f1");
    check_field_offset(lv, s16672c1f2, ABISELECT(32,28), "S16672C1.s16672c1f2");
  }
}
static Arrange_To_Call_Me vS16672C1(Test_S16672C1, "S16672C1", ABISELECT(48,40));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S14827C1  {
  short s14827c1f0;
  long s14827c1f1[2];
  char s14827c1f2[2];
  long s14827c1f3;
  void *s14827c1f4[3];
  short s14827c1f5;
  int s14827c1f6;
  void *s14827c1f7[2];
};
//SIG(1 S14827C1) C1{ Fs Fl[2] Fc[2] Fl Fp[3] Fs Fi Fp[2]}



static void Test_S14827C1()
{
  {
    init_simple_test("S14827C1");
    S14827C1 lv;
    check2(sizeof(lv), ABISELECT(88,48), "sizeof(S14827C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S14827C1)");
    check_field_offset(lv, s14827c1f0, 0, "S14827C1.s14827c1f0");
    check_field_offset(lv, s14827c1f1, ABISELECT(8,4), "S14827C1.s14827c1f1");
    check_field_offset(lv, s14827c1f2, ABISELECT(24,12), "S14827C1.s14827c1f2");
    check_field_offset(lv, s14827c1f3, ABISELECT(32,16), "S14827C1.s14827c1f3");
    check_field_offset(lv, s14827c1f4, ABISELECT(40,20), "S14827C1.s14827c1f4");
    check_field_offset(lv, s14827c1f5, ABISELECT(64,32), "S14827C1.s14827c1f5");
    check_field_offset(lv, s14827c1f6, ABISELECT(68,36), "S14827C1.s14827c1f6");
    check_field_offset(lv, s14827c1f7, ABISELECT(72,40), "S14827C1.s14827c1f7");
  }
}
static Arrange_To_Call_Me vS14827C1(Test_S14827C1, "S14827C1", ABISELECT(88,48));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S5780C2  {
  int s5780c2f0[2];
  ::S235C7_nt s5780c2f1;
  ::S235C7_nt s5780c2f2;
  int s5780c2f3[4];
  void  mf5780c2(); // _ZN7S5780C28mf5780c2Ev
};
//SIG(-1 S5780C2) C1{ m Fi[2] FC2{ m Fi[2]} FC2 Fi[4]}


void  S5780C2 ::mf5780c2(){}

static void Test_S5780C2()
{
  {
    init_simple_test("S5780C2");
    S5780C2 lv;
    check2(sizeof(lv), 40, "sizeof(S5780C2)");
    check2(__alignof__(lv), 4, "__alignof__(S5780C2)");
    check_field_offset(lv, s5780c2f0, 0, "S5780C2.s5780c2f0");
    check_field_offset(lv, s5780c2f1, 8, "S5780C2.s5780c2f1");
    check_field_offset(lv, s5780c2f2, 16, "S5780C2.s5780c2f2");
    check_field_offset(lv, s5780c2f3, 24, "S5780C2.s5780c2f3");
  }
}
static Arrange_To_Call_Me vS5780C2(Test_S5780C2, "S5780C2", 40);

#else // __cplusplus

Class_Descriptor cd_S5780C2 = {  "S5780C2", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  40, // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S5780C1  : S5780C2 {
};
//SIG(1 S5780C1) C1{ BC2{ m Fi[2] FC3{ m Fi[2]} FC3 Fi[4]}}



static void Test_S5780C1()
{
  extern Class_Descriptor cd_S5780C1;
  void *lvp;
  {
    int buf[11];
    init_test(&cd_S5780C1, buf);
    S5780C1 &lv = *(new (buf) S5780C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), 40, "sizeof(S5780C1)");
    check2(__alignof__(lv), 4, "__alignof__(S5780C1)");
    check_base_class_offset(lv, (S5780C2*), 0, "S5780C1");
    test_class_info(&lv, &cd_S5780C1);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5780C1(Test_S5780C1, "S5780C1", 40);

#else // __cplusplus

extern Class_Descriptor cd_S5780C2;
static Base_Class bases_S5780C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5780C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
Class_Descriptor cd_S5780C1 = {  "S5780C1", // class name
  bases_S5780C1, 1,
  0, // no vftv
  0, //no vtt
  40, // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S21621C1  {
  int s21621c1f0;
  __tsi64 s21621c1f1[2];
  ::S836C21_nt s21621c1f2;
  void  mf21621c1(); // _ZN8S21621C19mf21621c1Ev
  virtual  ~S21621C1(); // _ZN8S21621C1D1Ev
  S21621C1(); // tgen
};
//SIG(1 S21621C1) C1{ vd m Fi FL[2] FC2{ m Fp Fi FC3{ m}}}


void  S21621C1 ::mf21621c1(){}
 S21621C1 ::~S21621C1(){ note_dtor("S21621C1", this);}
S21621C1 ::S21621C1(){ note_ctor("S21621C1", this);} // tgen

static void Test_S21621C1()
{
  extern Class_Descriptor cd_S21621C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,10)];
    init_test(&cd_S21621C1, buf);
    S21621C1 *dp, &lv = *(dp=new (buf) S21621C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,36), "sizeof(S21621C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21621C1)");
    check_field_offset(lv, s21621c1f0, ABISELECT(8,4), "S21621C1.s21621c1f0");
    check_field_offset(lv, s21621c1f1, ABISELECT(16,8), "S21621C1.s21621c1f1");
    check_field_offset(lv, s21621c1f2, ABISELECT(32,24), "S21621C1.s21621c1f2");
    test_class_info(&lv, &cd_S21621C1);
    dp->~S21621C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21621C1(Test_S21621C1, "S21621C1", ABISELECT(48,36));

#else // __cplusplus

extern void _ZN8S21621C1C1Ev();
extern void _ZN8S21621C1D1Ev();
Name_Map name_map_S21621C1[] = {
  NSPAIR(_ZN8S21621C1C1Ev),
  NSPAIR(_ZN8S21621C1D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S21621C1[];
extern void _ZN8S21621C1D1Ev();
extern void _ZN8S21621C1D0Ev();
static  VTBL_ENTRY vtc_S21621C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S21621C1[0]),
  (VTBL_ENTRY)&_ZN8S21621C1D1Ev,
  (VTBL_ENTRY)&_ZN8S21621C1D0Ev,
};
extern VTBL_ENTRY _ZTI8S21621C1[];
extern  VTBL_ENTRY _ZTV8S21621C1[];
Class_Descriptor cd_S21621C1 = {  "S21621C1", // class name
  0,0,//no base classes
  &(vtc_S21621C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,36), // object size
  NSPAIRA(_ZTI8S21621C1),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S21621C1),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S17698C1  {
  void *s17698c1f0;
  int s17698c1f1;
  ::S285C17 s17698c1f2;
  void  mf17698c1(); // _ZN8S17698C19mf17698c1Ev
};
//SIG(1 S17698C1) C1{ m Fp Fi FC2{ BC3{ BC4{ m Fp Fi[2]}}}}


void  S17698C1 ::mf17698c1(){}

static void Test_S17698C1()
{
  {
    init_simple_test("S17698C1");
    S17698C1 lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S17698C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S17698C1)");
    check_field_offset(lv, s17698c1f0, 0, "S17698C1.s17698c1f0");
    check_field_offset(lv, s17698c1f1, ABISELECT(8,4), "S17698C1.s17698c1f1");
    check_field_offset(lv, s17698c1f2, ABISELECT(16,8), "S17698C1.s17698c1f2");
  }
}
static Arrange_To_Call_Me vS17698C1(Test_S17698C1, "S17698C1", ABISELECT(32,20));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S11875C1  {
  ::S11907C4_nt s11875c1f0;
  int s11875c1f1[2];
  char s11875c1f2;
  void *s11875c1f3[4];
  ::S10068C3_nt s11875c1f4;
};
//SIG(1 S11875C1) C1{ FC2{ Fp[2]} Fi[2] Fc Fp[4] FC3{ Fp}}



static void Test_S11875C1()
{
  {
    init_simple_test("S11875C1");
    S11875C1 lv;
    check2(sizeof(lv), ABISELECT(72,40), "sizeof(S11875C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S11875C1)");
    check_field_offset(lv, s11875c1f0, 0, "S11875C1.s11875c1f0");
    check_field_offset(lv, s11875c1f1, ABISELECT(16,8), "S11875C1.s11875c1f1");
    check_field_offset(lv, s11875c1f2, ABISELECT(24,16), "S11875C1.s11875c1f2");
    check_field_offset(lv, s11875c1f3, ABISELECT(32,20), "S11875C1.s11875c1f3");
    check_field_offset(lv, s11875c1f4, ABISELECT(64,36), "S11875C1.s11875c1f4");
  }
}
static Arrange_To_Call_Me vS11875C1(Test_S11875C1, "S11875C1", ABISELECT(72,40));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19928C2_nt  {
  void *s19928c2f0[12];
  __tsi64 s19928c2f1:64;
  virtual void  v1(); // _ZN11S19928C2_nt2v1Ev
  ~S19928C2_nt(); // tgen
  S19928C2_nt(); // tgen
};
//SIG(-1 S19928C2_nt) C1{ v1 Fp[12] FL:64}


void  S19928C2_nt ::v1(){vfunc_called(this, "_ZN11S19928C2_nt2v1Ev");}
S19928C2_nt ::~S19928C2_nt(){ note_dtor("S19928C2_nt", this);} // tgen
S19928C2_nt ::S19928C2_nt(){ note_ctor("S19928C2_nt", this);} // tgen

//skip512 S19928C2_nt

#else // __cplusplus

extern void _ZN11S19928C2_ntC1Ev();
extern void _ZN11S19928C2_ntD1Ev();
Name_Map name_map_S19928C2_nt[] = {
  NSPAIR(_ZN11S19928C2_ntC1Ev),
  NSPAIR(_ZN11S19928C2_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI11S19928C2_nt[];
extern void _ZN11S19928C2_nt2v1Ev();
static  VTBL_ENTRY vtc_S19928C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI11S19928C2_nt[0]),
  (VTBL_ENTRY)&_ZN11S19928C2_nt2v1Ev,
};
extern VTBL_ENTRY _ZTI11S19928C2_nt[];
VTBL_ENTRY *P__ZTI11S19928C2_nt = _ZTI11S19928C2_nt; 
extern  VTBL_ENTRY _ZTV11S19928C2_nt[];
Class_Descriptor cd_S19928C2_nt = {  "S19928C2_nt", // class name
  0,0,//no base classes
  &(vtc_S19928C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(112,60), // object size
  NSPAIRA(_ZTI11S19928C2_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV11S19928C2_nt),3, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19928C1  : virtual S19928C2_nt {
  ::S1179C18_nt s19928c1f0;
  int s19928c1f1;
  ~S19928C1(); // tgen
  S19928C1(); // tgen
};
//SIG(1 S19928C1) C1{ VBC2{ v1 Fp[12] FL:64} FU3{ m FL} Fi}


S19928C1 ::~S19928C1(){ note_dtor("S19928C1", this);} // tgen
S19928C1 ::S19928C1(){ note_ctor("S19928C1", this);} // tgen

static void Test_S19928C1()
{
  extern Class_Descriptor cd_S19928C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(18,20)];
    init_test(&cd_S19928C1, buf);
    S19928C1 *dp, &lv = *(dp=new (buf) S19928C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(136,76), "sizeof(S19928C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19928C1)");
    check_base_class_offset(lv, (S19928C2_nt*), ABISELECT(24,16), "S19928C1");
    check_field_offset(lv, s19928c1f0, ABISELECT(8,4), "S19928C1.s19928c1f0");
    check_field_offset(lv, s19928c1f1, ABISELECT(16,12), "S19928C1.s19928c1f1");
    test_class_info(&lv, &cd_S19928C1);
    dp->~S19928C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19928C1(Test_S19928C1, "S19928C1", ABISELECT(136,76));

#else // __cplusplus

extern void _ZN8S19928C1C1Ev();
extern void _ZN8S19928C1D1Ev();
Name_Map name_map_S19928C1[] = {
  NSPAIR(_ZN8S19928C1C1Ev),
  NSPAIR(_ZN8S19928C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19928C2_nt;
extern VTBL_ENTRY _ZTI11S19928C2_nt[];
extern  VTBL_ENTRY _ZTV11S19928C2_nt[];
static Base_Class bases_S19928C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19928C2_nt,    ABISELECT(24,16), //bcp->offset
    3, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19928C1[];
extern void _ZN11S19928C2_nt2v1Ev();
static  VTBL_ENTRY vtc_S19928C1[] = {
  ABISELECT(24,16),
  0,
  (VTBL_ENTRY)&(_ZTI8S19928C1[0]),
  0,
  ABISELECT(-24,-16),
  (VTBL_ENTRY)&(_ZTI8S19928C1[0]),
  (VTBL_ENTRY)&_ZN11S19928C2_nt2v1Ev,
};
extern VTBL_ENTRY _ZTV8S19928C1[];
static  VTT_ENTRY vtt_S19928C1[] = {
  {&(_ZTV8S19928C1[3]),  3,7},
  {&(_ZTV8S19928C1[6]),  6,7},
};
extern VTBL_ENTRY _ZTI8S19928C1[];
extern  VTBL_ENTRY _ZTV8S19928C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19928C1[];
Class_Descriptor cd_S19928C1 = {  "S19928C1", // class name
  bases_S19928C1, 1,
  &(vtc_S19928C1[0]), // expected_vtbl_contents
  &(vtt_S19928C1[0]), // expected_vtt_contents
  ABISELECT(136,76), // object size
  NSPAIRA(_ZTI8S19928C1),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S19928C1),7, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19928C1),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S18037C1  {
  void *s18037c1f0[2];
  ::S9191C6_nt s18037c1f1;
  void *s18037c1f2;
  char s18037c1f3[3];
  int s18037c1f4;
  void  mf18037c1(); // _ZN8S18037C19mf18037c1Ev
};
//SIG(1 S18037C1) C1{ m Fp[2] FC2{ m Fp[2]} Fp Fc[3] Fi}


void  S18037C1 ::mf18037c1(){}

static void Test_S18037C1()
{
  {
    init_simple_test("S18037C1");
    S18037C1 lv;
    check2(sizeof(lv), ABISELECT(48,28), "sizeof(S18037C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18037C1)");
    check_field_offset(lv, s18037c1f0, 0, "S18037C1.s18037c1f0");
    check_field_offset(lv, s18037c1f1, ABISELECT(16,8), "S18037C1.s18037c1f1");
    check_field_offset(lv, s18037c1f2, ABISELECT(32,16), "S18037C1.s18037c1f2");
    check_field_offset(lv, s18037c1f3, ABISELECT(40,20), "S18037C1.s18037c1f3");
    check_field_offset(lv, s18037c1f4, ABISELECT(44,24), "S18037C1.s18037c1f4");
  }
}
static Arrange_To_Call_Me vS18037C1(Test_S18037C1, "S18037C1", ABISELECT(48,28));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S5473C2  {
  char s5473c2f0[4];
  long s5473c2f1;
};
//SIG(-1 S5473C2) C1{ Fc[4] Fl}



static void Test_S5473C2()
{
  {
    init_simple_test("S5473C2");
    S5473C2 lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S5473C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5473C2)");
    check_field_offset(lv, s5473c2f0, 0, "S5473C2.s5473c2f0");
    check_field_offset(lv, s5473c2f1, ABISELECT(8,4), "S5473C2.s5473c2f1");
  }
}
static Arrange_To_Call_Me vS5473C2(Test_S5473C2, "S5473C2", ABISELECT(16,8));

#else // __cplusplus

Class_Descriptor cd_S5473C2 = {  "S5473C2", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  ABISELECT(16,8), // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S5473C1  : S5473C2 {
  char s5473c1f0[4];
  short s5473c1f1[2];
  void *s5473c1f2[3];
};
//SIG(1 S5473C1) C1{ BC2{ Fc[4] Fl} Fc[4] Fs[2] Fp[3]}



static void Test_S5473C1()
{
  extern Class_Descriptor cd_S5473C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,8)];
    init_test(&cd_S5473C1, buf);
    S5473C1 &lv = *(new (buf) S5473C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,28), "sizeof(S5473C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5473C1)");
    check_base_class_offset(lv, (S5473C2*), 0, "S5473C1");
    check_field_offset(lv, s5473c1f0, ABISELECT(16,8), "S5473C1.s5473c1f0");
    check_field_offset(lv, s5473c1f1, ABISELECT(20,12), "S5473C1.s5473c1f1");
    check_field_offset(lv, s5473c1f2, ABISELECT(24,16), "S5473C1.s5473c1f2");
    test_class_info(&lv, &cd_S5473C1);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5473C1(Test_S5473C1, "S5473C1", ABISELECT(48,28));

#else // __cplusplus

extern Class_Descriptor cd_S5473C2;
static Base_Class bases_S5473C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5473C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
Class_Descriptor cd_S5473C1 = {  "S5473C1", // class name
  bases_S5473C1, 1,
  0, // no vftv
  0, //no vtt
  ABISELECT(48,28), // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S17295C1  {
  int s17295c1f0[8];
  char s17295c1f1[84];
  int s17295c1f2[3];
  char s17295c1f3[64];
  void *s17295c1f4;
  void  mf17295c1(); // _ZN8S17295C19mf17295c1Ev
};
//SIG(1 S17295C1) C1{ m Fi[8] Fc[84] Fi[3] Fc[64] Fp}


void  S17295C1 ::mf17295c1(){}

static void Test_S17295C1()
{
  {
    init_simple_test("S17295C1");
    S17295C1 lv;
    check2(sizeof(lv), ABISELECT(200,196), "sizeof(S17295C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S17295C1)");
    check_field_offset(lv, s17295c1f0, 0, "S17295C1.s17295c1f0");
    check_field_offset(lv, s17295c1f1, 32, "S17295C1.s17295c1f1");
    check_field_offset(lv, s17295c1f2, 116, "S17295C1.s17295c1f2");
    check_field_offset(lv, s17295c1f3, 128, "S17295C1.s17295c1f3");
    check_field_offset(lv, s17295c1f4, 192, "S17295C1.s17295c1f4");
  }
}
static Arrange_To_Call_Me vS17295C1(Test_S17295C1, "S17295C1", ABISELECT(200,196));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S12748C1  {
  int s12748c1f0;
  void *s12748c1f1[2];
  int s12748c1f2;
  char s12748c1f3;
  void *s12748c1f4;
  int s12748c1f5;
  void *s12748c1f6;
  int s12748c1f7;
  void *s12748c1f8;
};
//SIG(1 S12748C1) C1{ Fi Fp[2] Fi Fc Fp Fi Fp Fi Fp}



static void Test_S12748C1()
{
  {
    init_simple_test("S12748C1");
    S12748C1 lv;
    check2(sizeof(lv), ABISELECT(72,40), "sizeof(S12748C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S12748C1)");
    check_field_offset(lv, s12748c1f0, 0, "S12748C1.s12748c1f0");
    check_field_offset(lv, s12748c1f1, ABISELECT(8,4), "S12748C1.s12748c1f1");
    check_field_offset(lv, s12748c1f2, ABISELECT(24,12), "S12748C1.s12748c1f2");
    check_field_offset(lv, s12748c1f3, ABISELECT(28,16), "S12748C1.s12748c1f3");
    check_field_offset(lv, s12748c1f4, ABISELECT(32,20), "S12748C1.s12748c1f4");
    check_field_offset(lv, s12748c1f5, ABISELECT(40,24), "S12748C1.s12748c1f5");
    check_field_offset(lv, s12748c1f6, ABISELECT(48,28), "S12748C1.s12748c1f6");
    check_field_offset(lv, s12748c1f7, ABISELECT(56,32), "S12748C1.s12748c1f7");
    check_field_offset(lv, s12748c1f8, ABISELECT(64,36), "S12748C1.s12748c1f8");
  }
}
static Arrange_To_Call_Me vS12748C1(Test_S12748C1, "S12748C1", ABISELECT(72,40));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S8078C1  : S4287C5_nt {
  int s8078c1f0[2];
  short s8078c1f1[8];
  int s8078c1f2[3];
  ~S8078C1(); // tgen
  S8078C1(); // tgen
};
//SIG(1 S8078C1) C1{ BC2{ vd m Fi} Fi[2] Fs[8] Fi[3]}


S8078C1 ::~S8078C1(){ note_dtor("S8078C1", this);} // tgen
S8078C1 ::S8078C1(){ note_ctor("S8078C1", this);} // tgen

static void Test_S8078C1()
{
  extern Class_Descriptor cd_S8078C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,12)];
    init_test(&cd_S8078C1, buf);
    S8078C1 *dp, &lv = *(dp=new (buf) S8078C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,44), "sizeof(S8078C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8078C1)");
    check_base_class_offset(lv, (S4287C5_nt*), 0, "S8078C1");
    check_field_offset(lv, s8078c1f0, ABISELECT(12,8), "S8078C1.s8078c1f0");
    check_field_offset(lv, s8078c1f1, ABISELECT(20,16), "S8078C1.s8078c1f1");
    check_field_offset(lv, s8078c1f2, ABISELECT(36,32), "S8078C1.s8078c1f2");
    test_class_info(&lv, &cd_S8078C1);
    dp->~S8078C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8078C1(Test_S8078C1, "S8078C1", ABISELECT(48,44));

#else // __cplusplus

extern void _ZN7S8078C1C1Ev();
extern void _ZN7S8078C1D1Ev();
Name_Map name_map_S8078C1[] = {
  NSPAIR(_ZN7S8078C1C1Ev),
  NSPAIR(_ZN7S8078C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4287C5_nt;
extern VTBL_ENTRY _ZTI10S4287C5_nt[];
extern  VTBL_ENTRY _ZTV10S4287C5_nt[];
static Base_Class bases_S8078C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4287C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S8078C1[];
extern void _ZN7S8078C1D1Ev();
extern void _ZN7S8078C1D0Ev();
static  VTBL_ENTRY vtc_S8078C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8078C1[0]),
  (VTBL_ENTRY)&_ZN7S8078C1D1Ev,
  (VTBL_ENTRY)&_ZN7S8078C1D0Ev,
};
extern VTBL_ENTRY _ZTI7S8078C1[];
extern  VTBL_ENTRY _ZTV7S8078C1[];
Class_Descriptor cd_S8078C1 = {  "S8078C1", // class name
  bases_S8078C1, 1,
  &(vtc_S8078C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,44), // object size
  NSPAIRA(_ZTI7S8078C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S8078C1),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S18792C1  {
  ::S1179C18_nt s18792c1f0;
  __tsi64 s18792c1f1;
  virtual void  v1(); // _ZN8S18792C12v1Ev
  virtual void  v2(); // _ZN8S18792C12v2Ev
  virtual void  v3(); // _ZN8S18792C12v3Ev
  virtual void  v4(); // _ZN8S18792C12v4Ev
  virtual void  v5(); // _ZN8S18792C12v5Ev
  virtual void  v6(); // _ZN8S18792C12v6Ev
  ~S18792C1(); // tgen
  S18792C1(); // tgen
};
//SIG(1 S18792C1) C1{ v1 v2 v3 v4 v5 v6 FU2{ m FL} FL}


void  S18792C1 ::v1(){vfunc_called(this, "_ZN8S18792C12v1Ev");}
void  S18792C1 ::v2(){vfunc_called(this, "_ZN8S18792C12v2Ev");}
void  S18792C1 ::v3(){vfunc_called(this, "_ZN8S18792C12v3Ev");}
void  S18792C1 ::v4(){vfunc_called(this, "_ZN8S18792C12v4Ev");}
void  S18792C1 ::v5(){vfunc_called(this, "_ZN8S18792C12v5Ev");}
void  S18792C1 ::v6(){vfunc_called(this, "_ZN8S18792C12v6Ev");}
S18792C1 ::~S18792C1(){ note_dtor("S18792C1", this);} // tgen
S18792C1 ::S18792C1(){ note_ctor("S18792C1", this);} // tgen

static void Test_S18792C1()
{
  extern Class_Descriptor cd_S18792C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,6)];
    init_test(&cd_S18792C1, buf);
    S18792C1 *dp, &lv = *(dp=new (buf) S18792C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(S18792C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18792C1)");
    check_field_offset(lv, s18792c1f0, ABISELECT(8,4), "S18792C1.s18792c1f0");
    check_field_offset(lv, s18792c1f1, ABISELECT(16,12), "S18792C1.s18792c1f1");
    test_class_info(&lv, &cd_S18792C1);
    dp->~S18792C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS18792C1(Test_S18792C1, "S18792C1", ABISELECT(24,20));

#else // __cplusplus

extern void _ZN8S18792C1C1Ev();
extern void _ZN8S18792C1D1Ev();
Name_Map name_map_S18792C1[] = {
  NSPAIR(_ZN8S18792C1C1Ev),
  NSPAIR(_ZN8S18792C1D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S18792C1[];
extern void _ZN8S18792C12v1Ev();
extern void _ZN8S18792C12v2Ev();
extern void _ZN8S18792C12v3Ev();
extern void _ZN8S18792C12v4Ev();
extern void _ZN8S18792C12v5Ev();
extern void _ZN8S18792C12v6Ev();
static  VTBL_ENTRY vtc_S18792C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S18792C1[0]),
  (VTBL_ENTRY)&_ZN8S18792C12v1Ev,
  (VTBL_ENTRY)&_ZN8S18792C12v2Ev,
  (VTBL_ENTRY)&_ZN8S18792C12v3Ev,
  (VTBL_ENTRY)&_ZN8S18792C12v4Ev,
  (VTBL_ENTRY)&_ZN8S18792C12v5Ev,
  (VTBL_ENTRY)&_ZN8S18792C12v6Ev,
};
extern VTBL_ENTRY _ZTI8S18792C1[];
extern  VTBL_ENTRY _ZTV8S18792C1[];
Class_Descriptor cd_S18792C1 = {  "S18792C1", // class name
  0,0,//no base classes
  &(vtc_S18792C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,20), // object size
  NSPAIRA(_ZTI8S18792C1),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S18792C1),8, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20220C2  {
  virtual  ~S20220C2(); // _ZN8S20220C2D1Ev
  virtual void  v4(); // _ZN8S20220C22v4Ev
  virtual void  v5(); // _ZN8S20220C22v5Ev
  S20220C2(); // tgen
};
//SIG(-1 S20220C2) C1{ vd v1 v2}


 S20220C2 ::~S20220C2(){ note_dtor("S20220C2", this);}
void  S20220C2 ::v4(){vfunc_called(this, "_ZN8S20220C22v4Ev");}
void  S20220C2 ::v5(){vfunc_called(this, "_ZN8S20220C22v5Ev");}
S20220C2 ::S20220C2(){ note_ctor("S20220C2", this);} // tgen

static void Test_S20220C2()
{
  extern Class_Descriptor cd_S20220C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S20220C2, buf);
    S20220C2 *dp, &lv = *(dp=new (buf) S20220C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S20220C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20220C2)");
    test_class_info(&lv, &cd_S20220C2);
    dp->~S20220C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20220C2(Test_S20220C2, "S20220C2", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S20220C2C1Ev();
extern void _ZN8S20220C2D1Ev();
Name_Map name_map_S20220C2[] = {
  NSPAIR(_ZN8S20220C2C1Ev),
  NSPAIR(_ZN8S20220C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20220C2[];
extern void _ZN8S20220C2D1Ev();
extern void _ZN8S20220C2D0Ev();
extern void _ZN8S20220C22v4Ev();
extern void _ZN8S20220C22v5Ev();
static  VTBL_ENTRY vtc_S20220C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20220C2[0]),
  (VTBL_ENTRY)&_ZN8S20220C2D1Ev,
  (VTBL_ENTRY)&_ZN8S20220C2D0Ev,
  (VTBL_ENTRY)&_ZN8S20220C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20220C22v5Ev,
};
extern VTBL_ENTRY _ZTI8S20220C2[];
extern  VTBL_ENTRY _ZTV8S20220C2[];
Class_Descriptor cd_S20220C2 = {  "S20220C2", // class name
  0,0,//no base classes
  &(vtc_S20220C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S20220C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20220C2),6, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20220C1  : virtual S20220C2 {
  __tsi64 s20220c1f0;
  virtual  ~S20220C1(); // _ZN8S20220C1D2Ev
  virtual void  v1(); // _ZN8S20220C12v1Ev
  virtual void  v2(); // _ZN8S20220C12v2Ev
  virtual void  v3(); // _ZN8S20220C12v3Ev
  S20220C1(); // tgen
};
//SIG(1 S20220C1) C1{ VBC2{ vd v4 v5} vd v1 v2 v3 FL}


 S20220C1 ::~S20220C1(){ note_dtor("S20220C1", this);}
void  S20220C1 ::v1(){vfunc_called(this, "_ZN8S20220C12v1Ev");}
void  S20220C1 ::v2(){vfunc_called(this, "_ZN8S20220C12v2Ev");}
void  S20220C1 ::v3(){vfunc_called(this, "_ZN8S20220C12v3Ev");}
S20220C1 ::S20220C1(){ note_ctor("S20220C1", this);} // tgen

static void Test_S20220C1()
{
  extern Class_Descriptor cd_S20220C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S20220C1, buf);
    S20220C1 *dp, &lv = *(dp=new (buf) S20220C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S20220C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20220C1)");
    check_base_class_offset(lv, (S20220C2*), 0, "S20220C1");
    check_field_offset(lv, s20220c1f0, ABISELECT(8,4), "S20220C1.s20220c1f0");
    test_class_info(&lv, &cd_S20220C1);
    dp->~S20220C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20220C1(Test_S20220C1, "S20220C1", ABISELECT(16,12));

#else // __cplusplus

extern void _ZN8S20220C1C1Ev();
extern void _ZN8S20220C1D2Ev();
Name_Map name_map_S20220C1[] = {
  NSPAIR(_ZN8S20220C1C1Ev),
  NSPAIR(_ZN8S20220C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20220C2;
extern VTBL_ENTRY _ZTI8S20220C2[];
extern  VTBL_ENTRY _ZTV8S20220C2[];
static Base_Class bases_S20220C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20220C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20220C1[];
extern void _ZN8S20220C1D1Ev();
extern void _ZN8S20220C1D0Ev();
extern void _ZN8S20220C22v4Ev();
extern void _ZN8S20220C22v5Ev();
extern void _ZN8S20220C12v1Ev();
extern void _ZN8S20220C12v2Ev();
extern void _ZN8S20220C12v3Ev();
static  VTBL_ENTRY vtc_S20220C1[] = {
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20220C1[0]),
  (VTBL_ENTRY)&_ZN8S20220C1D1Ev,
  (VTBL_ENTRY)&_ZN8S20220C1D0Ev,
  (VTBL_ENTRY)&_ZN8S20220C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20220C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20220C12v1Ev,
  (VTBL_ENTRY)&_ZN8S20220C12v2Ev,
  (VTBL_ENTRY)&_ZN8S20220C12v3Ev,
};
extern VTBL_ENTRY _ZTV8S20220C1[];
static  VTT_ENTRY vtt_S20220C1[] = {
  {&(_ZTV8S20220C1[6]),  6,13},
  {&(_ZTV8S20220C1[6]),  6,13},
};
extern VTBL_ENTRY _ZTI8S20220C1[];
extern  VTBL_ENTRY _ZTV8S20220C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20220C1[];
Class_Descriptor cd_S20220C1 = {  "S20220C1", // class name
  bases_S20220C1, 1,
  &(vtc_S20220C1[0]), // expected_vtbl_contents
  &(vtt_S20220C1[0]), // expected_vtt_contents
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI8S20220C1),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S20220C1),13, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20220C1),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20046C2  {
  void *s20046c2f0;
  __tsi64  :0;
  virtual void  v2(); // _ZN8S20046C22v2Ev
  virtual void  v3(); // _ZN8S20046C22v3Ev
  virtual void  v4(); // _ZN8S20046C22v4Ev
  virtual void  v5(); // _ZN8S20046C22v5Ev
  ~S20046C2(); // tgen
  S20046C2(); // tgen
};
//SIG(-1 S20046C2) C1{ v1 v2 v3 v4 Fp FL:0}


void  S20046C2 ::v2(){vfunc_called(this, "_ZN8S20046C22v2Ev");}
void  S20046C2 ::v3(){vfunc_called(this, "_ZN8S20046C22v3Ev");}
void  S20046C2 ::v4(){vfunc_called(this, "_ZN8S20046C22v4Ev");}
void  S20046C2 ::v5(){vfunc_called(this, "_ZN8S20046C22v5Ev");}
S20046C2 ::~S20046C2(){ note_dtor("S20046C2", this);} // tgen
S20046C2 ::S20046C2(){ note_ctor("S20046C2", this);} // tgen

static void Test_S20046C2()
{
  extern Class_Descriptor cd_S20046C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,3)];
    init_test(&cd_S20046C2, buf);
    S20046C2 *dp, &lv = *(dp=new (buf) S20046C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S20046C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20046C2)");
    check_field_offset(lv, s20046c2f0, ABISELECT(8,4), "S20046C2.s20046c2f0");
    test_class_info(&lv, &cd_S20046C2);
    dp->~S20046C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20046C2(Test_S20046C2, "S20046C2", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN8S20046C2C1Ev();
extern void _ZN8S20046C2D1Ev();
Name_Map name_map_S20046C2[] = {
  NSPAIR(_ZN8S20046C2C1Ev),
  NSPAIR(_ZN8S20046C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20046C2[];
extern void _ZN8S20046C22v2Ev();
extern void _ZN8S20046C22v3Ev();
extern void _ZN8S20046C22v4Ev();
extern void _ZN8S20046C22v5Ev();
static  VTBL_ENTRY vtc_S20046C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20046C2[0]),
  (VTBL_ENTRY)&_ZN8S20046C22v2Ev,
  (VTBL_ENTRY)&_ZN8S20046C22v3Ev,
  (VTBL_ENTRY)&_ZN8S20046C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20046C22v5Ev,
};
extern VTBL_ENTRY _ZTI8S20046C2[];
extern  VTBL_ENTRY _ZTV8S20046C2[];
Class_Descriptor cd_S20046C2 = {  "S20046C2", // class name
  0,0,//no base classes
  &(vtc_S20046C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S20046C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20046C2),6, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20046C1  : virtual S20046C2 {
  virtual void  v1(); // _ZN8S20046C12v1Ev
  ~S20046C1(); // tgen
  S20046C1(); // tgen
};
//SIG(1 S20046C1) C1{ VBC2{ v2 v3 v4 v5 Fp FL:0} v1}


void  S20046C1 ::v1(){vfunc_called(this, "_ZN8S20046C12v1Ev");}
S20046C1 ::~S20046C1(){ note_dtor("S20046C1", this);} // tgen
S20046C1 ::S20046C1(){ note_ctor("S20046C1", this);} // tgen

static void Test_S20046C1()
{
  extern Class_Descriptor cd_S20046C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,4)];
    init_test(&cd_S20046C1, buf);
    S20046C1 *dp, &lv = *(dp=new (buf) S20046C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S20046C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20046C1)");
    check_base_class_offset(lv, (S20046C2*), ABISELECT(8,4), "S20046C1");
    test_class_info(&lv, &cd_S20046C1);
    dp->~S20046C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20046C1(Test_S20046C1, "S20046C1", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN8S20046C1C1Ev();
extern void _ZN8S20046C1D1Ev();
Name_Map name_map_S20046C1[] = {
  NSPAIR(_ZN8S20046C1C1Ev),
  NSPAIR(_ZN8S20046C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20046C2;
extern VTBL_ENTRY _ZTI8S20046C2[];
extern  VTBL_ENTRY _ZTV8S20046C2[];
static Base_Class bases_S20046C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20046C2,    ABISELECT(8,4), //bcp->offset
    4, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20046C1[];
extern void _ZN8S20046C12v1Ev();
extern void _ZN8S20046C22v2Ev();
extern void _ZN8S20046C22v3Ev();
extern void _ZN8S20046C22v4Ev();
extern void _ZN8S20046C22v5Ev();
static  VTBL_ENTRY vtc_S20046C1[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S20046C1[0]),
  (VTBL_ENTRY)&_ZN8S20046C12v1Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S20046C1[0]),
  (VTBL_ENTRY)&_ZN8S20046C22v2Ev,
  (VTBL_ENTRY)&_ZN8S20046C22v3Ev,
  (VTBL_ENTRY)&_ZN8S20046C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20046C22v5Ev,
};
extern VTBL_ENTRY _ZTV8S20046C1[];
static  VTT_ENTRY vtt_S20046C1[] = {
  {&(_ZTV8S20046C1[3]),  3,14},
  {&(_ZTV8S20046C1[10]),  10,14},
};
extern VTBL_ENTRY _ZTI8S20046C1[];
extern  VTBL_ENTRY _ZTV8S20046C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20046C1[];
Class_Descriptor cd_S20046C1 = {  "S20046C1", // class name
  bases_S20046C1, 1,
  &(vtc_S20046C1[0]), // expected_vtbl_contents
  &(vtt_S20046C1[0]), // expected_vtt_contents
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI8S20046C1),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S20046C1),14, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20046C1),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S6768C2  {
  virtual  ~S6768C2(); // _ZN7S6768C2D1Ev
  virtual void  v3(); // _ZN7S6768C22v3Ev
  virtual void  v4(); // _ZN7S6768C22v4Ev
  S6768C2(); // tgen
};
//SIG(-1 S6768C2) C1{ vd v1 v2}


 S6768C2 ::~S6768C2(){ note_dtor("S6768C2", this);}
void  S6768C2 ::v3(){vfunc_called(this, "_ZN7S6768C22v3Ev");}
void  S6768C2 ::v4(){vfunc_called(this, "_ZN7S6768C22v4Ev");}
S6768C2 ::S6768C2(){ note_ctor("S6768C2", this);} // tgen

static void Test_S6768C2()
{
  extern Class_Descriptor cd_S6768C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S6768C2, buf);
    S6768C2 *dp, &lv = *(dp=new (buf) S6768C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S6768C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6768C2)");
    test_class_info(&lv, &cd_S6768C2);
    dp->~S6768C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6768C2(Test_S6768C2, "S6768C2", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S6768C2C1Ev();
extern void _ZN7S6768C2D1Ev();
Name_Map name_map_S6768C2[] = {
  NSPAIR(_ZN7S6768C2C1Ev),
  NSPAIR(_ZN7S6768C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S6768C2[];
extern void _ZN7S6768C2D1Ev();
extern void _ZN7S6768C2D0Ev();
extern void _ZN7S6768C22v3Ev();
extern void _ZN7S6768C22v4Ev();
static  VTBL_ENTRY vtc_S6768C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6768C2[0]),
  (VTBL_ENTRY)&_ZN7S6768C2D1Ev,
  (VTBL_ENTRY)&_ZN7S6768C2D0Ev,
  (VTBL_ENTRY)&_ZN7S6768C22v3Ev,
  (VTBL_ENTRY)&_ZN7S6768C22v4Ev,
};
extern VTBL_ENTRY _ZTI7S6768C2[];
extern  VTBL_ENTRY _ZTV7S6768C2[];
Class_Descriptor cd_S6768C2 = {  "S6768C2", // class name
  0,0,//no base classes
  &(vtc_S6768C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S6768C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S6768C2),6, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S6768C1  : S6768C2 {
  void *s6768c1f0[2];
  virtual  ~S6768C1(); // _ZN7S6768C1D1Ev
  virtual void  v1(); // _ZN7S6768C12v1Ev
  virtual void  v2(); // _ZN7S6768C12v2Ev
  S6768C1(); // tgen
};
//SIG(1 S6768C1) C1{ BC2{ vd v3 v4} vd v1 v2 Fp[2]}


 S6768C1 ::~S6768C1(){ note_dtor("S6768C1", this);}
void  S6768C1 ::v1(){vfunc_called(this, "_ZN7S6768C12v1Ev");}
void  S6768C1 ::v2(){vfunc_called(this, "_ZN7S6768C12v2Ev");}
S6768C1 ::S6768C1(){ note_ctor("S6768C1", this);} // tgen

static void Test_S6768C1()
{
  extern Class_Descriptor cd_S6768C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S6768C1, buf);
    S6768C1 *dp, &lv = *(dp=new (buf) S6768C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S6768C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6768C1)");
    check_base_class_offset(lv, (S6768C2*), 0, "S6768C1");
    check_field_offset(lv, s6768c1f0, ABISELECT(8,4), "S6768C1.s6768c1f0");
    test_class_info(&lv, &cd_S6768C1);
    dp->~S6768C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6768C1(Test_S6768C1, "S6768C1", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S6768C1C1Ev();
extern void _ZN7S6768C1D1Ev();
Name_Map name_map_S6768C1[] = {
  NSPAIR(_ZN7S6768C1C1Ev),
  NSPAIR(_ZN7S6768C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6768C2;
extern VTBL_ENTRY _ZTI7S6768C2[];
extern  VTBL_ENTRY _ZTV7S6768C2[];
static Base_Class bases_S6768C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6768C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S6768C1[];
extern void _ZN7S6768C1D1Ev();
extern void _ZN7S6768C1D0Ev();
extern void _ZN7S6768C22v3Ev();
extern void _ZN7S6768C22v4Ev();
extern void _ZN7S6768C12v1Ev();
extern void _ZN7S6768C12v2Ev();
static  VTBL_ENTRY vtc_S6768C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6768C1[0]),
  (VTBL_ENTRY)&_ZN7S6768C1D1Ev,
  (VTBL_ENTRY)&_ZN7S6768C1D0Ev,
  (VTBL_ENTRY)&_ZN7S6768C22v3Ev,
  (VTBL_ENTRY)&_ZN7S6768C22v4Ev,
  (VTBL_ENTRY)&_ZN7S6768C12v1Ev,
  (VTBL_ENTRY)&_ZN7S6768C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S6768C1[];
extern  VTBL_ENTRY _ZTV7S6768C1[];
Class_Descriptor cd_S6768C1 = {  "S6768C1", // class name
  bases_S6768C1, 1,
  &(vtc_S6768C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S6768C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S6768C1),8, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S18853C1  {
  virtual  ~S18853C1(); // _ZN8S18853C1D1Ev
  virtual void  v1(); // _ZN8S18853C12v1Ev
  virtual void  v2(); // _ZN8S18853C12v2Ev
  virtual void  v3(); // _ZN8S18853C12v3Ev
  virtual void  v4(); // _ZN8S18853C12v4Ev
  virtual void  v5(); // _ZN8S18853C12v5Ev
  virtual void  v6(); // _ZN8S18853C12v6Ev
  virtual void  v7(); // _ZN8S18853C12v7Ev
  virtual void  v8(); // _ZN8S18853C12v8Ev
  S18853C1(); // tgen
};
//SIG(1 S18853C1) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8}


 S18853C1 ::~S18853C1(){ note_dtor("S18853C1", this);}
void  S18853C1 ::v1(){vfunc_called(this, "_ZN8S18853C12v1Ev");}
void  S18853C1 ::v2(){vfunc_called(this, "_ZN8S18853C12v2Ev");}
void  S18853C1 ::v3(){vfunc_called(this, "_ZN8S18853C12v3Ev");}
void  S18853C1 ::v4(){vfunc_called(this, "_ZN8S18853C12v4Ev");}
void  S18853C1 ::v5(){vfunc_called(this, "_ZN8S18853C12v5Ev");}
void  S18853C1 ::v6(){vfunc_called(this, "_ZN8S18853C12v6Ev");}
void  S18853C1 ::v7(){vfunc_called(this, "_ZN8S18853C12v7Ev");}
void  S18853C1 ::v8(){vfunc_called(this, "_ZN8S18853C12v8Ev");}
S18853C1 ::S18853C1(){ note_ctor("S18853C1", this);} // tgen

static void Test_S18853C1()
{
  extern Class_Descriptor cd_S18853C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S18853C1, buf);
    S18853C1 *dp, &lv = *(dp=new (buf) S18853C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S18853C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18853C1)");
    test_class_info(&lv, &cd_S18853C1);
    dp->~S18853C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS18853C1(Test_S18853C1, "S18853C1", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S18853C1C1Ev();
extern void _ZN8S18853C1D1Ev();
Name_Map name_map_S18853C1[] = {
  NSPAIR(_ZN8S18853C1C1Ev),
  NSPAIR(_ZN8S18853C1D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S18853C1[];
extern void _ZN8S18853C1D1Ev();
extern void _ZN8S18853C1D0Ev();
extern void _ZN8S18853C12v1Ev();
extern void _ZN8S18853C12v2Ev();
extern void _ZN8S18853C12v3Ev();
extern void _ZN8S18853C12v4Ev();
extern void _ZN8S18853C12v5Ev();
extern void _ZN8S18853C12v6Ev();
extern void _ZN8S18853C12v7Ev();
extern void _ZN8S18853C12v8Ev();
static  VTBL_ENTRY vtc_S18853C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S18853C1[0]),
  (VTBL_ENTRY)&_ZN8S18853C1D1Ev,
  (VTBL_ENTRY)&_ZN8S18853C1D0Ev,
  (VTBL_ENTRY)&_ZN8S18853C12v1Ev,
  (VTBL_ENTRY)&_ZN8S18853C12v2Ev,
  (VTBL_ENTRY)&_ZN8S18853C12v3Ev,
  (VTBL_ENTRY)&_ZN8S18853C12v4Ev,
  (VTBL_ENTRY)&_ZN8S18853C12v5Ev,
  (VTBL_ENTRY)&_ZN8S18853C12v6Ev,
  (VTBL_ENTRY)&_ZN8S18853C12v7Ev,
  (VTBL_ENTRY)&_ZN8S18853C12v8Ev,
};
extern VTBL_ENTRY _ZTI8S18853C1[];
extern  VTBL_ENTRY _ZTV8S18853C1[];
Class_Descriptor cd_S18853C1 = {  "S18853C1", // class name
  0,0,//no base classes
  &(vtc_S18853C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S18853C1),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S18853C1),12, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S14595C1  {
  void *s14595c1f0[3];
  ::S12430C5_nt s14595c1f1;
  ::S11907C2_nt s14595c1f2;
};
//SIG(1 S14595C1) C1{ Fp[3] FC2{ Fp[3]} FC3{ Fp[5]}}



static void Test_S14595C1()
{
  {
    init_simple_test("S14595C1");
    S14595C1 lv;
    check2(sizeof(lv), ABISELECT(88,44), "sizeof(S14595C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S14595C1)");
    check_field_offset(lv, s14595c1f0, 0, "S14595C1.s14595c1f0");
    check_field_offset(lv, s14595c1f1, ABISELECT(24,12), "S14595C1.s14595c1f1");
    check_field_offset(lv, s14595c1f2, ABISELECT(48,24), "S14595C1.s14595c1f2");
  }
}
static Arrange_To_Call_Me vS14595C1(Test_S14595C1, "S14595C1", ABISELECT(88,44));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S5718C2  {
  long double s5718c2f0;
  char s5718c2f1;
  void *s5718c2f2[2];
  void  mf5718c2(); // _ZN7S5718C28mf5718c2Ev
};
//SIG(-1 S5718C2) C1{ m FD Fc Fp[2]}


void  S5718C2 ::mf5718c2(){}

static void Test_S5718C2()
{
  {
    init_simple_test("S5718C2");
    S5718C2 lv;
    check2(sizeof(lv), ABISELECT(48,24), "sizeof(S5718C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S5718C2)");
    check_field_offset(lv, s5718c2f0, 0, "S5718C2.s5718c2f0");
    check_field_offset(lv, s5718c2f1, ABISELECT(16,12), "S5718C2.s5718c2f1");
    check_field_offset(lv, s5718c2f2, ABISELECT(24,16), "S5718C2.s5718c2f2");
  }
}
static Arrange_To_Call_Me vS5718C2(Test_S5718C2, "S5718C2", ABISELECT(48,24));

#else // __cplusplus

Class_Descriptor cd_S5718C2 = {  "S5718C2", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  ABISELECT(48,24), // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S5718C1  : S5718C2 {
  long s5718c1f0;
  char s5718c1f1;
  void *s5718c1f2;
};
//SIG(1 S5718C1) C1{ BC2{ m FD Fc Fp[2]} Fl Fc Fp}



static void Test_S5718C1()
{
  extern Class_Descriptor cd_S5718C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(6,10)];
    init_test(&cd_S5718C1, buf);
    S5718C1 &lv = *(new (buf) S5718C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,36), "sizeof(S5718C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S5718C1)");
    check_base_class_offset(lv, (S5718C2*), 0, "S5718C1");
    check_field_offset(lv, s5718c1f0, ABISELECT(48,24), "S5718C1.s5718c1f0");
    check_field_offset(lv, s5718c1f1, ABISELECT(56,28), "S5718C1.s5718c1f1");
    check_field_offset(lv, s5718c1f2, ABISELECT(64,32), "S5718C1.s5718c1f2");
    test_class_info(&lv, &cd_S5718C1);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5718C1(Test_S5718C1, "S5718C1", ABISELECT(80,36));

#else // __cplusplus

extern Class_Descriptor cd_S5718C2;
static Base_Class bases_S5718C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5718C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
Class_Descriptor cd_S5718C1 = {  "S5718C1", // class name
  bases_S5718C1, 1,
  0, // no vftv
  0, //no vtt
  ABISELECT(80,36), // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S16877C1  {
  int s16877c1f0;
  void *s16877c1f1;
  char s16877c1f2[2];
  int s16877c1f3[2];
  void *s16877c1f4;
  int s16877c1f5;
  void  mf16877c1(); // _ZN8S16877C19mf16877c1Ev
};
//SIG(1 S16877C1) C1{ m Fi Fp Fc[2] Fi[2] Fp Fi}


void  S16877C1 ::mf16877c1(){}

static void Test_S16877C1()
{
  {
    init_simple_test("S16877C1");
    S16877C1 lv;
    check2(sizeof(lv), ABISELECT(48,28), "sizeof(S16877C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S16877C1)");
    check_field_offset(lv, s16877c1f0, 0, "S16877C1.s16877c1f0");
    check_field_offset(lv, s16877c1f1, ABISELECT(8,4), "S16877C1.s16877c1f1");
    check_field_offset(lv, s16877c1f2, ABISELECT(16,8), "S16877C1.s16877c1f2");
    check_field_offset(lv, s16877c1f3, ABISELECT(20,12), "S16877C1.s16877c1f3");
    check_field_offset(lv, s16877c1f4, ABISELECT(32,20), "S16877C1.s16877c1f4");
    check_field_offset(lv, s16877c1f5, ABISELECT(40,24), "S16877C1.s16877c1f5");
  }
}
static Arrange_To_Call_Me vS16877C1(Test_S16877C1, "S16877C1", ABISELECT(48,28));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S18641C1  {
  void *s18641c1f0;
  char s18641c1f1:5;
  int s18641c1f2:13;
  long double s18641c1f3;
  virtual void  v1(); // _ZN8S18641C12v1Ev
  virtual void  v2(); // _ZN8S18641C12v2Ev
  virtual void  v3(); // _ZN8S18641C12v3Ev
  ~S18641C1(); // tgen
  S18641C1(); // tgen
};
//SIG(1 S18641C1) C1{ v1 v2 v3 Fp Fc:5 Fi:13 FD}


void  S18641C1 ::v1(){vfunc_called(this, "_ZN8S18641C12v1Ev");}
void  S18641C1 ::v2(){vfunc_called(this, "_ZN8S18641C12v2Ev");}
void  S18641C1 ::v3(){vfunc_called(this, "_ZN8S18641C12v3Ev");}
S18641C1 ::~S18641C1(){ note_dtor("S18641C1", this);} // tgen
S18641C1 ::S18641C1(){ note_ctor("S18641C1", this);} // tgen

static void Test_S18641C1()
{
  extern Class_Descriptor cd_S18641C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(4,7)];
    init_test(&cd_S18641C1, buf);
    S18641C1 *dp, &lv = *(dp=new (buf) S18641C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,24), "sizeof(S18641C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S18641C1)");
    check_field_offset(lv, s18641c1f0, ABISELECT(8,4), "S18641C1.s18641c1f0");
    set_bf_and_test(lv, s18641c1f1, ABISELECT(16,8), 0, 5, 1, "S18641C1");
    set_bf_and_test(lv, s18641c1f1, ABISELECT(16,8), 0, 5, hide_sll(1LL<<4), "S18641C1");
    set_bf_and_test(lv, s18641c1f2, ABISELECT(16,8), 5, 13, 1, "S18641C1");
    set_bf_and_test(lv, s18641c1f2, ABISELECT(16,8), 5, 13, hide_sll(1LL<<12), "S18641C1");
    check_field_offset(lv, s18641c1f3, ABISELECT(32,12), "S18641C1.s18641c1f3");
    test_class_info(&lv, &cd_S18641C1);
    dp->~S18641C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS18641C1(Test_S18641C1, "S18641C1", ABISELECT(48,24));

#else // __cplusplus

extern void _ZN8S18641C1C1Ev();
extern void _ZN8S18641C1D1Ev();
Name_Map name_map_S18641C1[] = {
  NSPAIR(_ZN8S18641C1C1Ev),
  NSPAIR(_ZN8S18641C1D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S18641C1[];
extern void _ZN8S18641C12v1Ev();
extern void _ZN8S18641C12v2Ev();
extern void _ZN8S18641C12v3Ev();
static  VTBL_ENTRY vtc_S18641C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S18641C1[0]),
  (VTBL_ENTRY)&_ZN8S18641C12v1Ev,
  (VTBL_ENTRY)&_ZN8S18641C12v2Ev,
  (VTBL_ENTRY)&_ZN8S18641C12v3Ev,
};
extern VTBL_ENTRY _ZTI8S18641C1[];
extern  VTBL_ENTRY _ZTV8S18641C1[];
Class_Descriptor cd_S18641C1 = {  "S18641C1", // class name
  0,0,//no base classes
  &(vtc_S18641C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,24), // object size
  NSPAIRA(_ZTI8S18641C1),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S18641C1),5, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S15820C3_nt  {
  __tsi64 s15820c3f0;
  void  mf15820c3(); // _ZN11S15820C3_nt9mf15820c3Ev
};
//SIG(-1 S15820C3_nt) C1{ m FL}


void  S15820C3_nt ::mf15820c3(){}

//skip512 S15820C3_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S15820C2_nt  {
  ::S15820C3_nt s15820c2f0;
  void  mf15820c2(); // _ZN11S15820C2_nt9mf15820c2Ev
};
//SIG(-1 S15820C2_nt) C1{ m FC2{ m FL}}


void  S15820C2_nt ::mf15820c2(){}

//skip512 S15820C2_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S15820C1  {
  ::S15820C2_nt s15820c1f0;
  ::S15820C2_nt s15820c1f1;
  int s15820c1f2;
  void  mf15820c1(); // _ZN8S15820C19mf15820c1Ev
};
//SIG(1 S15820C1) C1{ m FC2{ m FC3{ m FL}} FC2 Fi}


void  S15820C1 ::mf15820c1(){}

static void Test_S15820C1()
{
  {
    init_simple_test("S15820C1");
    S15820C1 lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(S15820C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S15820C1)");
    check_field_offset(lv, s15820c1f0, 0, "S15820C1.s15820c1f0");
    check_field_offset(lv, s15820c1f1, 8, "S15820C1.s15820c1f1");
    check_field_offset(lv, s15820c1f2, 16, "S15820C1.s15820c1f2");
  }
}
static Arrange_To_Call_Me vS15820C1(Test_S15820C1, "S15820C1", ABISELECT(24,20));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S5715C1  : S19669C6_nt {
};
//SIG(1 S5715C1) C1{ BC2{ m FC3{ vd m Fc:7}[6]}}



static void Test_S5715C1()
{
  extern Class_Descriptor cd_S5715C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[13];
    init_test(&cd_S5715C1, buf);
    S5715C1 &lv = *(new (buf) S5715C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,48), "sizeof(S5715C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5715C1)");
    check_base_class_offset(lv, (S19669C6_nt*), 0, "S5715C1");
    test_class_info(&lv, &cd_S5715C1);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5715C1(Test_S5715C1, "S5715C1", ABISELECT(96,48));

#else // __cplusplus

extern Class_Descriptor cd_S19669C6_nt;
extern VTBL_ENTRY _ZTI11S19669C6_nt[];
static Base_Class bases_S5715C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19669C6_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
Class_Descriptor cd_S5715C1 = {  "S5715C1", // class name
  bases_S5715C1, 1,
  0, // no vftv
  0, //no vtt
  ABISELECT(96,48), // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S6267C3_nt  {
  long double s6267c3f0;
  void  mf6267c3(); // _ZN10S6267C3_nt8mf6267c3Ev
};
//SIG(-1 S6267C3_nt) C1{ m FD}


void  S6267C3_nt ::mf6267c3(){}

//skip512 S6267C3_nt

#else // __cplusplus

extern VTBL_ENTRY _ZTI10S6267C3_nt[];
VTBL_ENTRY *P__ZTI10S6267C3_nt = _ZTI10S6267C3_nt; 
Class_Descriptor cd_S6267C3_nt = {  "S6267C3_nt", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI10S6267C3_nt),ABISELECT(16,8), //typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S6267C1  : S836C39 , virtual S6267C3_nt , virtual S836C29 {
  ~S6267C1(); // tgen
  S6267C1(); // tgen
};
//SIG(1 S6267C1) C1{ BC2{ m} VBC3{ m FD} VBC4{ m}}


S6267C1 ::~S6267C1(){ note_dtor("S6267C1", this);} // tgen
S6267C1 ::S6267C1(){ note_ctor("S6267C1", this);} // tgen

static void Test_S6267C1()
{
  extern Class_Descriptor cd_S6267C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(3,5)];
    init_test(&cd_S6267C1, buf);
    S6267C1 *dp, &lv = *(dp=new (buf) S6267C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S6267C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S6267C1)");
    check_base_class_offset(lv, (S836C39*), 0, "S6267C1");
    check_base_class_offset(lv, (S6267C3_nt*), ABISELECT(16,4), "S6267C1");
    check_base_class_offset(lv, (S836C29*), 0, "S6267C1");
    test_class_info(&lv, &cd_S6267C1);
    dp->~S6267C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6267C1(Test_S6267C1, "S6267C1", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN7S6267C1C1Ev();
extern void _ZN7S6267C1D1Ev();
Name_Map name_map_S6267C1[] = {
  NSPAIR(_ZN7S6267C1C1Ev),
  NSPAIR(_ZN7S6267C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S836C39;
extern VTBL_ENTRY _ZTI7S836C39[];
extern Class_Descriptor cd_S6267C3_nt;
extern VTBL_ENTRY _ZTI10S6267C3_nt[];
extern Class_Descriptor cd_S836C29;
extern VTBL_ENTRY _ZTI7S836C29[];
static Base_Class bases_S6267C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S836C39,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S6267C3_nt,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S836C29,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S6267C1[];
static  VTBL_ENTRY vtc_S6267C1[] = {
  0,
  ABISELECT(16,4),
  0,
  (VTBL_ENTRY)&(_ZTI7S6267C1[0]),
};
extern VTBL_ENTRY _ZTV7S6267C1[];
static  VTT_ENTRY vtt_S6267C1[] = {
  {&(_ZTV7S6267C1[4]),  4,4},
};
extern VTBL_ENTRY _ZTI7S6267C1[];
extern  VTBL_ENTRY _ZTV7S6267C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6267C1[];
Class_Descriptor cd_S6267C1 = {  "S6267C1", // class name
  bases_S6267C1, 3,
  &(vtc_S6267C1[0]), // expected_vtbl_contents
  &(vtt_S6267C1[0]), // expected_vtt_contents
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI7S6267C1),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S6267C1),4, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S6267C1),1, //virtual table table var
  0, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S8101C1  : S4287C5_nt {
  char s8101c1f0;
  int s8101c1f1;
  char s8101c1f2;
  virtual  ~S8101C1(); // _ZN7S8101C1D1Ev
  S8101C1(); // tgen
};
//SIG(1 S8101C1) C1{ BC2{ vd m Fi} vd Fc Fi Fc}


 S8101C1 ::~S8101C1(){ note_dtor("S8101C1", this);}
S8101C1 ::S8101C1(){ note_ctor("S8101C1", this);} // tgen

static void Test_S8101C1()
{
  extern Class_Descriptor cd_S8101C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,6)];
    init_test(&cd_S8101C1, buf);
    S8101C1 *dp, &lv = *(dp=new (buf) S8101C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(S8101C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8101C1)");
    check_base_class_offset(lv, (S4287C5_nt*), 0, "S8101C1");
    check_field_offset(lv, s8101c1f0, ABISELECT(12,8), "S8101C1.s8101c1f0");
    check_field_offset(lv, s8101c1f1, ABISELECT(16,12), "S8101C1.s8101c1f1");
    check_field_offset(lv, s8101c1f2, ABISELECT(20,16), "S8101C1.s8101c1f2");
    test_class_info(&lv, &cd_S8101C1);
    dp->~S8101C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8101C1(Test_S8101C1, "S8101C1", ABISELECT(24,20));

#else // __cplusplus

extern void _ZN7S8101C1C1Ev();
extern void _ZN7S8101C1D1Ev();
Name_Map name_map_S8101C1[] = {
  NSPAIR(_ZN7S8101C1C1Ev),
  NSPAIR(_ZN7S8101C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4287C5_nt;
extern VTBL_ENTRY _ZTI10S4287C5_nt[];
extern  VTBL_ENTRY _ZTV10S4287C5_nt[];
static Base_Class bases_S8101C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4287C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S8101C1[];
extern void _ZN7S8101C1D1Ev();
extern void _ZN7S8101C1D0Ev();
static  VTBL_ENTRY vtc_S8101C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8101C1[0]),
  (VTBL_ENTRY)&_ZN7S8101C1D1Ev,
  (VTBL_ENTRY)&_ZN7S8101C1D0Ev,
};
extern VTBL_ENTRY _ZTI7S8101C1[];
extern  VTBL_ENTRY _ZTV7S8101C1[];
Class_Descriptor cd_S8101C1 = {  "S8101C1", // class name
  bases_S8101C1, 1,
  &(vtc_S8101C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,20), // object size
  NSPAIRA(_ZTI7S8101C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S8101C1),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S15605C3_nt  {
  void *s15605c3f0[2];
};
//SIG(-1 S15605C3_nt) C1{ Fp[2]}



//skip512 S15605C3_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S15605C1  {
  ::S11907C4_nt s15605c1f0;
  ::S15605C3_nt s15605c1f1;
  void  mf15605c1(); // _ZN8S15605C19mf15605c1Ev
};
//SIG(1 S15605C1) C1{ m FC2{ Fp[2]} FC3{ Fp[2]}}


void  S15605C1 ::mf15605c1(){}

static void Test_S15605C1()
{
  {
    init_simple_test("S15605C1");
    S15605C1 lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S15605C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S15605C1)");
    check_field_offset(lv, s15605c1f0, 0, "S15605C1.s15605c1f0");
    check_field_offset(lv, s15605c1f1, ABISELECT(16,8), "S15605C1.s15605c1f1");
  }
}
static Arrange_To_Call_Me vS15605C1(Test_S15605C1, "S15605C1", ABISELECT(32,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S17138C1  {
  int s17138c1f0[2];
  void *s17138c1f1;
  int s17138c1f2;
  short s17138c1f3;
  int s17138c1f4;
  char s17138c1f5;
  void  mf17138c1(); // _ZN8S17138C19mf17138c1Ev
};
//SIG(1 S17138C1) C1{ m Fi[2] Fp Fi Fs Fi Fc}


void  S17138C1 ::mf17138c1(){}

static void Test_S17138C1()
{
  {
    init_simple_test("S17138C1");
    S17138C1 lv;
    check2(sizeof(lv), ABISELECT(32,28), "sizeof(S17138C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S17138C1)");
    check_field_offset(lv, s17138c1f0, 0, "S17138C1.s17138c1f0");
    check_field_offset(lv, s17138c1f1, 8, "S17138C1.s17138c1f1");
    check_field_offset(lv, s17138c1f2, ABISELECT(16,12), "S17138C1.s17138c1f2");
    check_field_offset(lv, s17138c1f3, ABISELECT(20,16), "S17138C1.s17138c1f3");
    check_field_offset(lv, s17138c1f4, ABISELECT(24,20), "S17138C1.s17138c1f4");
    check_field_offset(lv, s17138c1f5, ABISELECT(28,24), "S17138C1.s17138c1f5");
  }
}
static Arrange_To_Call_Me vS17138C1(Test_S17138C1, "S17138C1", ABISELECT(32,28));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S18470C1  {
  char s18470c1f0;
  long s18470c1f1;
  char s18470c1f2;
  ::S15820C3_nt s18470c1f3;
  virtual void  v1(); // _ZN8S18470C12v1Ev
  ~S18470C1(); // tgen
  S18470C1(); // tgen
};
//SIG(1 S18470C1) C1{ v1 Fc Fl Fc FC2{ m FL}}


void  S18470C1 ::v1(){vfunc_called(this, "_ZN8S18470C12v1Ev");}
S18470C1 ::~S18470C1(){ note_dtor("S18470C1", this);} // tgen
S18470C1 ::S18470C1(){ note_ctor("S18470C1", this);} // tgen

static void Test_S18470C1()
{
  extern Class_Descriptor cd_S18470C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,7)];
    init_test(&cd_S18470C1, buf);
    S18470C1 *dp, &lv = *(dp=new (buf) S18470C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,24), "sizeof(S18470C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18470C1)");
    check_field_offset(lv, s18470c1f0, ABISELECT(8,4), "S18470C1.s18470c1f0");
    check_field_offset(lv, s18470c1f1, ABISELECT(16,8), "S18470C1.s18470c1f1");
    check_field_offset(lv, s18470c1f2, ABISELECT(24,12), "S18470C1.s18470c1f2");
    check_field_offset(lv, s18470c1f3, ABISELECT(32,16), "S18470C1.s18470c1f3");
    test_class_info(&lv, &cd_S18470C1);
    dp->~S18470C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS18470C1(Test_S18470C1, "S18470C1", ABISELECT(40,24));

#else // __cplusplus

extern void _ZN8S18470C1C1Ev();
extern void _ZN8S18470C1D1Ev();
Name_Map name_map_S18470C1[] = {
  NSPAIR(_ZN8S18470C1C1Ev),
  NSPAIR(_ZN8S18470C1D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S18470C1[];
extern void _ZN8S18470C12v1Ev();
static  VTBL_ENTRY vtc_S18470C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S18470C1[0]),
  (VTBL_ENTRY)&_ZN8S18470C12v1Ev,
};
extern VTBL_ENTRY _ZTI8S18470C1[];
extern  VTBL_ENTRY _ZTV8S18470C1[];
Class_Descriptor cd_S18470C1 = {  "S18470C1", // class name
  0,0,//no base classes
  &(vtc_S18470C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,24), // object size
  NSPAIRA(_ZTI8S18470C1),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S18470C1),3, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S12645C1  {
  int s12645c1f0;
  __tsi64 s12645c1f1[4];
  short s12645c1f2[2];
  int s12645c1f3[2];
};
//SIG(1 S12645C1) C1{ Fi FL[4] Fs[2] Fi[2]}



static void Test_S12645C1()
{
  {
    init_simple_test("S12645C1");
    S12645C1 lv;
    check2(sizeof(lv), ABISELECT(56,48), "sizeof(S12645C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S12645C1)");
    check_field_offset(lv, s12645c1f0, 0, "S12645C1.s12645c1f0");
    check_field_offset(lv, s12645c1f1, ABISELECT(8,4), "S12645C1.s12645c1f1");
    check_field_offset(lv, s12645c1f2, ABISELECT(40,36), "S12645C1.s12645c1f2");
    check_field_offset(lv, s12645c1f3, ABISELECT(44,40), "S12645C1.s12645c1f3");
  }
}
static Arrange_To_Call_Me vS12645C1(Test_S12645C1, "S12645C1", ABISELECT(56,48));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S17596C1  {
  void *s17596c1f0;
  ::S12418C5_nt s17596c1f1;
  ::S12418C5_nt s17596c1f2;
  void  mf17596c1(); // _ZN8S17596C19mf17596c1Ev
};
//SIG(1 S17596C1) C1{ m Fp FC2{ m Fi[3]} FC2}


void  S17596C1 ::mf17596c1(){}

static void Test_S17596C1()
{
  {
    init_simple_test("S17596C1");
    S17596C1 lv;
    check2(sizeof(lv), ABISELECT(32,28), "sizeof(S17596C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S17596C1)");
    check_field_offset(lv, s17596c1f0, 0, "S17596C1.s17596c1f0");
    check_field_offset(lv, s17596c1f1, ABISELECT(8,4), "S17596C1.s17596c1f1");
    check_field_offset(lv, s17596c1f2, ABISELECT(20,16), "S17596C1.s17596c1f2");
  }
}
static Arrange_To_Call_Me vS17596C1(Test_S17596C1, "S17596C1", ABISELECT(32,28));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S18878C1  {
  int s18878c1f0;
  virtual  ~S18878C1(); // _ZN8S18878C1D1Ev
  virtual void  v1(); // _ZN8S18878C12v1Ev
  virtual void  v2(); // _ZN8S18878C12v2Ev
  virtual void  v3(); // _ZN8S18878C12v3Ev
  virtual void  v4(); // _ZN8S18878C12v4Ev
  virtual void  v5(); // _ZN8S18878C12v5Ev
  S18878C1(); // tgen
};
//SIG(1 S18878C1) C1{ vd v1 v2 v3 v4 v5 Fi}


 S18878C1 ::~S18878C1(){ note_dtor("S18878C1", this);}
void  S18878C1 ::v1(){vfunc_called(this, "_ZN8S18878C12v1Ev");}
void  S18878C1 ::v2(){vfunc_called(this, "_ZN8S18878C12v2Ev");}
void  S18878C1 ::v3(){vfunc_called(this, "_ZN8S18878C12v3Ev");}
void  S18878C1 ::v4(){vfunc_called(this, "_ZN8S18878C12v4Ev");}
void  S18878C1 ::v5(){vfunc_called(this, "_ZN8S18878C12v5Ev");}
S18878C1 ::S18878C1(){ note_ctor("S18878C1", this);} // tgen

static void Test_S18878C1()
{
  extern Class_Descriptor cd_S18878C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S18878C1, buf);
    S18878C1 *dp, &lv = *(dp=new (buf) S18878C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S18878C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18878C1)");
    check_field_offset(lv, s18878c1f0, ABISELECT(8,4), "S18878C1.s18878c1f0");
    test_class_info(&lv, &cd_S18878C1);
    dp->~S18878C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS18878C1(Test_S18878C1, "S18878C1", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN8S18878C1C1Ev();
extern void _ZN8S18878C1D1Ev();
Name_Map name_map_S18878C1[] = {
  NSPAIR(_ZN8S18878C1C1Ev),
  NSPAIR(_ZN8S18878C1D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S18878C1[];
extern void _ZN8S18878C1D1Ev();
extern void _ZN8S18878C1D0Ev();
extern void _ZN8S18878C12v1Ev();
extern void _ZN8S18878C12v2Ev();
extern void _ZN8S18878C12v3Ev();
extern void _ZN8S18878C12v4Ev();
extern void _ZN8S18878C12v5Ev();
static  VTBL_ENTRY vtc_S18878C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S18878C1[0]),
  (VTBL_ENTRY)&_ZN8S18878C1D1Ev,
  (VTBL_ENTRY)&_ZN8S18878C1D0Ev,
  (VTBL_ENTRY)&_ZN8S18878C12v1Ev,
  (VTBL_ENTRY)&_ZN8S18878C12v2Ev,
  (VTBL_ENTRY)&_ZN8S18878C12v3Ev,
  (VTBL_ENTRY)&_ZN8S18878C12v4Ev,
  (VTBL_ENTRY)&_ZN8S18878C12v5Ev,
};
extern VTBL_ENTRY _ZTI8S18878C1[];
extern  VTBL_ENTRY _ZTV8S18878C1[];
Class_Descriptor cd_S18878C1 = {  "S18878C1", // class name
  0,0,//no base classes
  &(vtc_S18878C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S18878C1),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S18878C1),9, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S12658C1  {
  int s12658c1f0;
  void *s12658c1f1;
  char s12658c1f2[4];
  int s12658c1f3;
  void *s12658c1f4[2];
};
//SIG(1 S12658C1) C1{ Fi Fp Fc[4] Fi Fp[2]}



static void Test_S12658C1()
{
  {
    init_simple_test("S12658C1");
    S12658C1 lv;
    check2(sizeof(lv), ABISELECT(40,24), "sizeof(S12658C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S12658C1)");
    check_field_offset(lv, s12658c1f0, 0, "S12658C1.s12658c1f0");
    check_field_offset(lv, s12658c1f1, ABISELECT(8,4), "S12658C1.s12658c1f1");
    check_field_offset(lv, s12658c1f2, ABISELECT(16,8), "S12658C1.s12658c1f2");
    check_field_offset(lv, s12658c1f3, ABISELECT(20,12), "S12658C1.s12658c1f3");
    check_field_offset(lv, s12658c1f4, ABISELECT(24,16), "S12658C1.s12658c1f4");
  }
}
static Arrange_To_Call_Me vS12658C1(Test_S12658C1, "S12658C1", ABISELECT(40,24));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S17800C1  {
  void *s17800c1f0;
  int s17800c1f1[2];
  void *s17800c1f2;
  int s17800c1f3[4];
  void  mf17800c1(); // _ZN8S17800C19mf17800c1Ev
};
//SIG(1 S17800C1) C1{ m Fp Fi[2] Fp Fi[4]}


void  S17800C1 ::mf17800c1(){}

static void Test_S17800C1()
{
  {
    init_simple_test("S17800C1");
    S17800C1 lv;
    check2(sizeof(lv), ABISELECT(40,32), "sizeof(S17800C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S17800C1)");
    check_field_offset(lv, s17800c1f0, 0, "S17800C1.s17800c1f0");
    check_field_offset(lv, s17800c1f1, ABISELECT(8,4), "S17800C1.s17800c1f1");
    check_field_offset(lv, s17800c1f2, ABISELECT(16,12), "S17800C1.s17800c1f2");
    check_field_offset(lv, s17800c1f3, ABISELECT(24,16), "S17800C1.s17800c1f3");
  }
}
static Arrange_To_Call_Me vS17800C1(Test_S17800C1, "S17800C1", ABISELECT(40,32));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S8438C2  {
  int s8438c2f0;
  void *s8438c2f1[2];
  virtual  ~S8438C2(); // _ZN7S8438C2D1Ev
  virtual void  v1(); // _ZN7S8438C22v1Ev
  S8438C2(); // tgen
};
//SIG(-1 S8438C2) C1{ vd v1 Fi Fp[2]}


 S8438C2 ::~S8438C2(){ note_dtor("S8438C2", this);}
void  S8438C2 ::v1(){vfunc_called(this, "_ZN7S8438C22v1Ev");}
S8438C2 ::S8438C2(){ note_ctor("S8438C2", this);} // tgen

static void Test_S8438C2()
{
  extern Class_Descriptor cd_S8438C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S8438C2, buf);
    S8438C2 *dp, &lv = *(dp=new (buf) S8438C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S8438C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8438C2)");
    check_field_offset(lv, s8438c2f0, ABISELECT(8,4), "S8438C2.s8438c2f0");
    check_field_offset(lv, s8438c2f1, ABISELECT(16,8), "S8438C2.s8438c2f1");
    test_class_info(&lv, &cd_S8438C2);
    dp->~S8438C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8438C2(Test_S8438C2, "S8438C2", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN7S8438C2C1Ev();
extern void _ZN7S8438C2D1Ev();
Name_Map name_map_S8438C2[] = {
  NSPAIR(_ZN7S8438C2C1Ev),
  NSPAIR(_ZN7S8438C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S8438C2[];
extern void _ZN7S8438C2D1Ev();
extern void _ZN7S8438C2D0Ev();
extern void _ZN7S8438C22v1Ev();
static  VTBL_ENTRY vtc_S8438C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8438C2[0]),
  (VTBL_ENTRY)&_ZN7S8438C2D1Ev,
  (VTBL_ENTRY)&_ZN7S8438C2D0Ev,
  (VTBL_ENTRY)&_ZN7S8438C22v1Ev,
};
extern VTBL_ENTRY _ZTI7S8438C2[];
extern  VTBL_ENTRY _ZTV7S8438C2[];
Class_Descriptor cd_S8438C2 = {  "S8438C2", // class name
  0,0,//no base classes
  &(vtc_S8438C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI7S8438C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S8438C2),5, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S8438C1  : S8438C2 {
  ~S8438C1(); // tgen
  S8438C1(); // tgen
};
//SIG(1 S8438C1) C1{ BC2{ vd v1 Fi Fp[2]}}


S8438C1 ::~S8438C1(){ note_dtor("S8438C1", this);} // tgen
S8438C1 ::S8438C1(){ note_ctor("S8438C1", this);} // tgen

static void Test_S8438C1()
{
  extern Class_Descriptor cd_S8438C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S8438C1, buf);
    S8438C1 *dp, &lv = *(dp=new (buf) S8438C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S8438C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8438C1)");
    check_base_class_offset(lv, (S8438C2*), 0, "S8438C1");
    test_class_info(&lv, &cd_S8438C1);
    dp->~S8438C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8438C1(Test_S8438C1, "S8438C1", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN7S8438C1C1Ev();
extern void _ZN7S8438C1D1Ev();
Name_Map name_map_S8438C1[] = {
  NSPAIR(_ZN7S8438C1C1Ev),
  NSPAIR(_ZN7S8438C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S8438C2;
extern VTBL_ENTRY _ZTI7S8438C2[];
extern  VTBL_ENTRY _ZTV7S8438C2[];
static Base_Class bases_S8438C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S8438C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S8438C1[];
extern void _ZN7S8438C1D1Ev();
extern void _ZN7S8438C1D0Ev();
extern void _ZN7S8438C22v1Ev();
static  VTBL_ENTRY vtc_S8438C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8438C1[0]),
  (VTBL_ENTRY)&_ZN7S8438C1D1Ev,
  (VTBL_ENTRY)&_ZN7S8438C1D0Ev,
  (VTBL_ENTRY)&_ZN7S8438C22v1Ev,
};
extern VTBL_ENTRY _ZTI7S8438C1[];
extern  VTBL_ENTRY _ZTV7S8438C1[];
Class_Descriptor cd_S8438C1 = {  "S8438C1", // class name
  bases_S8438C1, 1,
  &(vtc_S8438C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI7S8438C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S8438C1),5, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S6069C1  : S4162C5_nt , S2214C39_nt {
};
//SIG(1 S6069C1) C1{ BC2{ m Fp} BC3{ m Fp}}



static void Test_S6069C1()
{
  extern Class_Descriptor cd_S6069C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S6069C1, buf);
    S6069C1 &lv = *(new (buf) S6069C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S6069C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6069C1)");
    check_base_class_offset(lv, (S4162C5_nt*), 0, "S6069C1");
    check_base_class_offset(lv, (S2214C39_nt*), ABISELECT(8,4), "S6069C1");
    test_class_info(&lv, &cd_S6069C1);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6069C1(Test_S6069C1, "S6069C1", ABISELECT(16,8));

#else // __cplusplus

extern Class_Descriptor cd_S4162C5_nt;
extern Class_Descriptor cd_S2214C39_nt;
static Base_Class bases_S6069C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4162C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2214C39_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
Class_Descriptor cd_S6069C1 = {  "S6069C1", // class name
  bases_S6069C1, 2,
  0, // no vftv
  0, //no vtt
  ABISELECT(16,8), // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S10511C1  {
  char s10511c1f0;
  short s10511c1f1[2];
  char s10511c1f2[8];
  short s10511c1f3;
};
//SIG(1 S10511C1) C1{ Fc Fs[2] Fc[8] Fs}



static void Test_S10511C1()
{
  {
    init_simple_test("S10511C1");
    S10511C1 lv;
    check2(sizeof(lv), 16, "sizeof(S10511C1)");
    check2(__alignof__(lv), 2, "__alignof__(S10511C1)");
    check_field_offset(lv, s10511c1f0, 0, "S10511C1.s10511c1f0");
    check_field_offset(lv, s10511c1f1, 2, "S10511C1.s10511c1f1");
    check_field_offset(lv, s10511c1f2, 6, "S10511C1.s10511c1f2");
    check_field_offset(lv, s10511c1f3, 14, "S10511C1.s10511c1f3");
  }
}
static Arrange_To_Call_Me vS10511C1(Test_S10511C1, "S10511C1", 16);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S13291C1  {
  int s13291c1f0[3];
  char s13291c1f1;
  void *s13291c1f2;
  int s13291c1f3[2];
};
//SIG(1 S13291C1) C1{ Fi[3] Fc Fp Fi[2]}



static void Test_S13291C1()
{
  {
    init_simple_test("S13291C1");
    S13291C1 lv;
    check2(sizeof(lv), ABISELECT(32,28), "sizeof(S13291C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S13291C1)");
    check_field_offset(lv, s13291c1f0, 0, "S13291C1.s13291c1f0");
    check_field_offset(lv, s13291c1f1, 12, "S13291C1.s13291c1f1");
    check_field_offset(lv, s13291c1f2, 16, "S13291C1.s13291c1f2");
    check_field_offset(lv, s13291c1f3, ABISELECT(24,20), "S13291C1.s13291c1f3");
  }
}
static Arrange_To_Call_Me vS13291C1(Test_S13291C1, "S13291C1", ABISELECT(32,28));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S13194C1  {
  int s13194c1f0[2];
  void *s13194c1f1;
  int s13194c1f2;
  void *s13194c1f3[3];
};
//SIG(1 S13194C1) C1{ Fi[2] Fp Fi Fp[3]}



static void Test_S13194C1()
{
  {
    init_simple_test("S13194C1");
    S13194C1 lv;
    check2(sizeof(lv), ABISELECT(48,28), "sizeof(S13194C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S13194C1)");
    check_field_offset(lv, s13194c1f0, 0, "S13194C1.s13194c1f0");
    check_field_offset(lv, s13194c1f1, 8, "S13194C1.s13194c1f1");
    check_field_offset(lv, s13194c1f2, ABISELECT(16,12), "S13194C1.s13194c1f2");
    check_field_offset(lv, s13194c1f3, ABISELECT(24,16), "S13194C1.s13194c1f3");
  }
}
static Arrange_To_Call_Me vS13194C1(Test_S13194C1, "S13194C1", ABISELECT(48,28));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S16842C1  {
  int s16842c1f0;
  ::S20956C14_nt s16842c1f1;
  ::S20956C14_nt s16842c1f2;
  ::S20956C14_nt s16842c1f3;
  void  mf16842c1(); // _ZN8S16842C19mf16842c1Ev
};
//SIG(1 S16842C1) C1{ m Fi FC2{} FC2 FC2}


void  S16842C1 ::mf16842c1(){}

static void Test_S16842C1()
{
  {
    init_simple_test("S16842C1");
    S16842C1 lv;
    check2(sizeof(lv), 8, "sizeof(S16842C1)");
    check2(__alignof__(lv), 4, "__alignof__(S16842C1)");
    check_field_offset(lv, s16842c1f0, 0, "S16842C1.s16842c1f0");
    check_field_offset(lv, s16842c1f1, 4, "S16842C1.s16842c1f1");
    check_field_offset(lv, s16842c1f2, 5, "S16842C1.s16842c1f2");
    check_field_offset(lv, s16842c1f3, 6, "S16842C1.s16842c1f3");
  }
}
static Arrange_To_Call_Me vS16842C1(Test_S16842C1, "S16842C1", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S15158C1  {
  char s15158c1f0[1024];
  int s15158c1f1;
  void *s15158c1f2;
  void  mf15158c1(); // _ZN8S15158C19mf15158c1Ev
};
//SIG(1 S15158C1) C1{ m Fc[1024] Fi Fp}


void  S15158C1 ::mf15158c1(){}

static void Test_S15158C1()
{
  {
    init_simple_test("S15158C1");
    S15158C1 lv;
    check2(sizeof(lv), ABISELECT(1040,1032), "sizeof(S15158C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S15158C1)");
    check_field_offset(lv, s15158c1f0, 0, "S15158C1.s15158c1f0");
    check_field_offset(lv, s15158c1f1, 1024, "S15158C1.s15158c1f1");
    check_field_offset(lv, s15158c1f2, ABISELECT(1032,1028), "S15158C1.s15158c1f2");
  }
}
static Arrange_To_Call_Me vS15158C1(Test_S15158C1, "S15158C1", ABISELECT(1040,1032));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S17863C1  {
  void *s17863c1f0[2];
  char s17863c1f1;
  void *s17863c1f2;
  __tsi64 s17863c1f3;
  void  mf17863c1(); // _ZN8S17863C19mf17863c1Ev
};
//SIG(1 S17863C1) C1{ m Fp[2] Fc Fp FL}


void  S17863C1 ::mf17863c1(){}

static void Test_S17863C1()
{
  {
    init_simple_test("S17863C1");
    S17863C1 lv;
    check2(sizeof(lv), ABISELECT(40,24), "sizeof(S17863C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S17863C1)");
    check_field_offset(lv, s17863c1f0, 0, "S17863C1.s17863c1f0");
    check_field_offset(lv, s17863c1f1, ABISELECT(16,8), "S17863C1.s17863c1f1");
    check_field_offset(lv, s17863c1f2, ABISELECT(24,12), "S17863C1.s17863c1f2");
    check_field_offset(lv, s17863c1f3, ABISELECT(32,16), "S17863C1.s17863c1f3");
  }
}
static Arrange_To_Call_Me vS17863C1(Test_S17863C1, "S17863C1", ABISELECT(40,24));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S12275C1  {
  int s12275c1f0;
  char s12275c1f1[33];
  int s12275c1f2[4];
};
//SIG(1 S12275C1) C1{ Fi Fc[33] Fi[4]}



static void Test_S12275C1()
{
  {
    init_simple_test("S12275C1");
    S12275C1 lv;
    check2(sizeof(lv), 56, "sizeof(S12275C1)");
    check2(__alignof__(lv), 4, "__alignof__(S12275C1)");
    check_field_offset(lv, s12275c1f0, 0, "S12275C1.s12275c1f0");
    check_field_offset(lv, s12275c1f1, 4, "S12275C1.s12275c1f1");
    check_field_offset(lv, s12275c1f2, 40, "S12275C1.s12275c1f2");
  }
}
static Arrange_To_Call_Me vS12275C1(Test_S12275C1, "S12275C1", 56);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S17221C1  {
  int s17221c1f0[4];
  char s17221c1f1[496];
  void  mf17221c1(); // _ZN8S17221C19mf17221c1Ev
};
//SIG(1 S17221C1) C1{ m Fi[4] Fc[496]}


void  S17221C1 ::mf17221c1(){}

static void Test_S17221C1()
{
  {
    init_simple_test("S17221C1");
    S17221C1 lv;
    check2(sizeof(lv), 512, "sizeof(S17221C1)");
    check2(__alignof__(lv), 4, "__alignof__(S17221C1)");
    check_field_offset(lv, s17221c1f0, 0, "S17221C1.s17221c1f0");
    check_field_offset(lv, s17221c1f1, 16, "S17221C1.s17221c1f1");
  }
}
static Arrange_To_Call_Me vS17221C1(Test_S17221C1, "S17221C1", 512);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3110C3  {
  virtual void  v2(); // _ZN7S3110C32v2Ev
  ~S3110C3(); // tgen
  S3110C3(); // tgen
};
//SIG(-1 S3110C3) C1{ v1}


void  S3110C3 ::v2(){vfunc_called(this, "_ZN7S3110C32v2Ev");}
S3110C3 ::~S3110C3(){ note_dtor("S3110C3", this);} // tgen
S3110C3 ::S3110C3(){ note_ctor("S3110C3", this);} // tgen

static void Test_S3110C3()
{
  extern Class_Descriptor cd_S3110C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S3110C3, buf);
    S3110C3 *dp, &lv = *(dp=new (buf) S3110C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S3110C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3110C3)");
    test_class_info(&lv, &cd_S3110C3);
    dp->~S3110C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3110C3(Test_S3110C3, "S3110C3", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S3110C3C1Ev();
extern void _ZN7S3110C3D1Ev();
Name_Map name_map_S3110C3[] = {
  NSPAIR(_ZN7S3110C3C1Ev),
  NSPAIR(_ZN7S3110C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S3110C3[];
extern void _ZN7S3110C32v2Ev();
static  VTBL_ENTRY vtc_S3110C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3110C3[0]),
  (VTBL_ENTRY)&_ZN7S3110C32v2Ev,
};
extern VTBL_ENTRY _ZTI7S3110C3[];
extern  VTBL_ENTRY _ZTV7S3110C3[];
Class_Descriptor cd_S3110C3 = {  "S3110C3", // class name
  0,0,//no base classes
  &(vtc_S3110C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S3110C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S3110C3),3, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3110C2  : S3110C3 {
  ~S3110C2(); // tgen
  S3110C2(); // tgen
};
//SIG(-1 S3110C2) C1{ BC2{ v1}}


S3110C2 ::~S3110C2(){ note_dtor("S3110C2", this);} // tgen
S3110C2 ::S3110C2(){ note_ctor("S3110C2", this);} // tgen

static void Test_S3110C2()
{
  extern Class_Descriptor cd_S3110C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S3110C2, buf);
    S3110C2 *dp, &lv = *(dp=new (buf) S3110C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S3110C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3110C2)");
    check_base_class_offset(lv, (S3110C3*), 0, "S3110C2");
    test_class_info(&lv, &cd_S3110C2);
    dp->~S3110C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3110C2(Test_S3110C2, "S3110C2", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S3110C2C1Ev();
extern void _ZN7S3110C2D1Ev();
Name_Map name_map_S3110C2[] = {
  NSPAIR(_ZN7S3110C2C1Ev),
  NSPAIR(_ZN7S3110C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3110C3;
extern VTBL_ENTRY _ZTI7S3110C3[];
extern  VTBL_ENTRY _ZTV7S3110C3[];
static Base_Class bases_S3110C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3110C3,    0, //bcp->offset
    0, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3110C2[];
extern void _ZN7S3110C32v2Ev();
static  VTBL_ENTRY vtc_S3110C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3110C2[0]),
  (VTBL_ENTRY)&_ZN7S3110C32v2Ev,
};
extern VTBL_ENTRY _ZTI7S3110C2[];
extern  VTBL_ENTRY _ZTV7S3110C2[];
Class_Descriptor cd_S3110C2 = {  "S3110C2", // class name
  bases_S3110C2, 1,
  &(vtc_S3110C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S3110C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3110C2),3, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3110C1  : S3110C2 {
  virtual void  v1(); // _ZN7S3110C12v1Ev
  ~S3110C1(); // tgen
  S3110C1(); // tgen
};
//SIG(1 S3110C1) C1{ BC2{ BC3{ v2}} v1}


void  S3110C1 ::v1(){vfunc_called(this, "_ZN7S3110C12v1Ev");}
S3110C1 ::~S3110C1(){ note_dtor("S3110C1", this);} // tgen
S3110C1 ::S3110C1(){ note_ctor("S3110C1", this);} // tgen

static void Test_S3110C1()
{
  extern Class_Descriptor cd_S3110C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S3110C1, buf);
    S3110C1 *dp, &lv = *(dp=new (buf) S3110C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S3110C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3110C1)");
    check_base_class_offset(lv, (S3110C3*)(S3110C2*), 0, "S3110C1");
    check_base_class_offset(lv, (S3110C2*), 0, "S3110C1");
    test_class_info(&lv, &cd_S3110C1);
    dp->~S3110C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3110C1(Test_S3110C1, "S3110C1", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S3110C1C1Ev();
extern void _ZN7S3110C1D1Ev();
Name_Map name_map_S3110C1[] = {
  NSPAIR(_ZN7S3110C1C1Ev),
  NSPAIR(_ZN7S3110C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3110C3;
extern VTBL_ENTRY _ZTI7S3110C3[];
extern  VTBL_ENTRY _ZTV7S3110C3[];
extern Class_Descriptor cd_S3110C2;
extern VTBL_ENTRY _ZTI7S3110C2[];
extern  VTBL_ENTRY _ZTV7S3110C2[];
static Base_Class bases_S3110C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3110C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S3110C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3110C1[];
extern void _ZN7S3110C32v2Ev();
extern void _ZN7S3110C12v1Ev();
static  VTBL_ENTRY vtc_S3110C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3110C1[0]),
  (VTBL_ENTRY)&_ZN7S3110C32v2Ev,
  (VTBL_ENTRY)&_ZN7S3110C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S3110C1[];
extern  VTBL_ENTRY _ZTV7S3110C1[];
Class_Descriptor cd_S3110C1 = {  "S3110C1", // class name
  bases_S3110C1, 2,
  &(vtc_S3110C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S3110C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3110C1),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S14716C1  {
  void *s14716c1f0[6];
  int s14716c1f1;
  void *s14716c1f2[2];
};
//SIG(1 S14716C1) C1{ Fp[6] Fi Fp[2]}



static void Test_S14716C1()
{
  {
    init_simple_test("S14716C1");
    S14716C1 lv;
    check2(sizeof(lv), ABISELECT(72,36), "sizeof(S14716C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S14716C1)");
    check_field_offset(lv, s14716c1f0, 0, "S14716C1.s14716c1f0");
    check_field_offset(lv, s14716c1f1, ABISELECT(48,24), "S14716C1.s14716c1f1");
    check_field_offset(lv, s14716c1f2, ABISELECT(56,28), "S14716C1.s14716c1f2");
  }
}
static Arrange_To_Call_Me vS14716C1(Test_S14716C1, "S14716C1", ABISELECT(72,36));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S13289C1  {
  int s13289c1f0[3];
  char s13289c1f1;
  int s13289c1f2[2];
};
//SIG(1 S13289C1) C1{ Fi[3] Fc Fi[2]}



static void Test_S13289C1()
{
  {
    init_simple_test("S13289C1");
    S13289C1 lv;
    check2(sizeof(lv), 24, "sizeof(S13289C1)");
    check2(__alignof__(lv), 4, "__alignof__(S13289C1)");
    check_field_offset(lv, s13289c1f0, 0, "S13289C1.s13289c1f0");
    check_field_offset(lv, s13289c1f1, 12, "S13289C1.s13289c1f1");
    check_field_offset(lv, s13289c1f2, 16, "S13289C1.s13289c1f2");
  }
}
static Arrange_To_Call_Me vS13289C1(Test_S13289C1, "S13289C1", 24);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S17402C1  {
  __tsi64 s17402c1f0[2];
  int s17402c1f1[2];
  void  mf17402c1(); // _ZN8S17402C19mf17402c1Ev
};
//SIG(1 S17402C1) C1{ m FL[2] Fi[2]}


void  S17402C1 ::mf17402c1(){}

static void Test_S17402C1()
{
  {
    init_simple_test("S17402C1");
    S17402C1 lv;
    check2(sizeof(lv), 24, "sizeof(S17402C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S17402C1)");
    check_field_offset(lv, s17402c1f0, 0, "S17402C1.s17402c1f0");
    check_field_offset(lv, s17402c1f1, 16, "S17402C1.s17402c1f1");
  }
}
static Arrange_To_Call_Me vS17402C1(Test_S17402C1, "S17402C1", 24);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S13297C1  {
  int s13297c1f0[3];
  char s13297c1f1[127];
};
//SIG(1 S13297C1) C1{ Fi[3] Fc[127]}



static void Test_S13297C1()
{
  {
    init_simple_test("S13297C1");
    S13297C1 lv;
    check2(sizeof(lv), 140, "sizeof(S13297C1)");
    check2(__alignof__(lv), 4, "__alignof__(S13297C1)");
    check_field_offset(lv, s13297c1f0, 0, "S13297C1.s13297c1f0");
    check_field_offset(lv, s13297c1f1, 12, "S13297C1.s13297c1f1");
  }
}
static Arrange_To_Call_Me vS13297C1(Test_S13297C1, "S13297C1", 140);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S16523C1  {
  long double s16523c1f0[2];
  char s16523c1f1:2;
  void  mf16523c1(); // _ZN8S16523C19mf16523c1Ev
};
//SIG(1 S16523C1) C1{ m FD[2] Fc:2}


void  S16523C1 ::mf16523c1(){}

static void Test_S16523C1()
{
  {
    init_simple_test("S16523C1");
    static S16523C1 lv;
    check2(sizeof(lv), ABISELECT(48,28), "sizeof(S16523C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S16523C1)");
    check_field_offset(lv, s16523c1f0, 0, "S16523C1.s16523c1f0");
    set_bf_and_test(lv, s16523c1f1, ABISELECT(32,24), 0, 2, 1, "S16523C1");
    set_bf_and_test(lv, s16523c1f1, ABISELECT(32,24), 0, 2, hide_sll(1LL<<1), "S16523C1");
  }
}
static Arrange_To_Call_Me vS16523C1(Test_S16523C1, "S16523C1", ABISELECT(48,28));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S13326C1  {
  int s13326c1f0[3];
  char s13326c1f1[96];
};
//SIG(1 S13326C1) C1{ Fi[3] Fc[96]}



static void Test_S13326C1()
{
  {
    init_simple_test("S13326C1");
    S13326C1 lv;
    check2(sizeof(lv), 108, "sizeof(S13326C1)");
    check2(__alignof__(lv), 4, "__alignof__(S13326C1)");
    check_field_offset(lv, s13326c1f0, 0, "S13326C1.s13326c1f0");
    check_field_offset(lv, s13326c1f1, 12, "S13326C1.s13326c1f1");
  }
}
static Arrange_To_Call_Me vS13326C1(Test_S13326C1, "S13326C1", 108);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S13511C1  {
  int s13511c1f0[4];
  void *s13511c1f1[8];
};
//SIG(1 S13511C1) C1{ Fi[4] Fp[8]}



static void Test_S13511C1()
{
  {
    init_simple_test("S13511C1");
    S13511C1 lv;
    check2(sizeof(lv), ABISELECT(80,48), "sizeof(S13511C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S13511C1)");
    check_field_offset(lv, s13511c1f0, 0, "S13511C1.s13511c1f0");
    check_field_offset(lv, s13511c1f1, 16, "S13511C1.s13511c1f1");
  }
}
static Arrange_To_Call_Me vS13511C1(Test_S13511C1, "S13511C1", ABISELECT(80,48));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S13935C1  {
  __tsi64 s13935c1f0[2];
  int s13935c1f1[3];
};
//SIG(1 S13935C1) C1{ FL[2] Fi[3]}



static void Test_S13935C1()
{
  {
    init_simple_test("S13935C1");
    S13935C1 lv;
    check2(sizeof(lv), ABISELECT(32,28), "sizeof(S13935C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S13935C1)");
    check_field_offset(lv, s13935c1f0, 0, "S13935C1.s13935c1f0");
    check_field_offset(lv, s13935c1f1, 16, "S13935C1.s13935c1f1");
  }
}
static Arrange_To_Call_Me vS13935C1(Test_S13935C1, "S13935C1", ABISELECT(32,28));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S14662C1  {
  void *s14662c1f0[4];
  char s14662c1f1[2];
};
//SIG(1 S14662C1) C1{ Fp[4] Fc[2]}



static void Test_S14662C1()
{
  {
    init_simple_test("S14662C1");
    S14662C1 lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S14662C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S14662C1)");
    check_field_offset(lv, s14662c1f0, 0, "S14662C1.s14662c1f0");
    check_field_offset(lv, s14662c1f1, ABISELECT(32,16), "S14662C1.s14662c1f1");
  }
}
static Arrange_To_Call_Me vS14662C1(Test_S14662C1, "S14662C1", ABISELECT(40,20));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S17378C1  {
  __tsi64 s17378c1f0;
  void *s17378c1f1[3];
  void  mf17378c1(); // _ZN8S17378C19mf17378c1Ev
};
//SIG(1 S17378C1) C1{ m FL Fp[3]}


void  S17378C1 ::mf17378c1(){}

static void Test_S17378C1()
{
  {
    init_simple_test("S17378C1");
    S17378C1 lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S17378C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S17378C1)");
    check_field_offset(lv, s17378c1f0, 0, "S17378C1.s17378c1f0");
    check_field_offset(lv, s17378c1f1, 8, "S17378C1.s17378c1f1");
  }
}
static Arrange_To_Call_Me vS17378C1(Test_S17378C1, "S17378C1", ABISELECT(32,20));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S14822C1  {
  short s14822c1f0;
  int s14822c1f1[2];
};
//SIG(1 S14822C1) C1{ Fs Fi[2]}



static void Test_S14822C1()
{
  {
    init_simple_test("S14822C1");
    S14822C1 lv;
    check2(sizeof(lv), 12, "sizeof(S14822C1)");
    check2(__alignof__(lv), 4, "__alignof__(S14822C1)");
    check_field_offset(lv, s14822c1f0, 0, "S14822C1.s14822c1f0");
    check_field_offset(lv, s14822c1f1, 4, "S14822C1.s14822c1f1");
  }
}
static Arrange_To_Call_Me vS14822C1(Test_S14822C1, "S14822C1", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S10959C1  {
  char s10959c1f0[5120];
};
//SIG(1 S10959C1) C1{ Fc[5120]}



static void Test_S10959C1()
{
  {
    init_simple_test("S10959C1");
    S10959C1 lv;
    check2(sizeof(lv), 5120, "sizeof(S10959C1)");
    check2(__alignof__(lv), 1, "__alignof__(S10959C1)");
    check_field_offset(lv, s10959c1f0, 0, "S10959C1.s10959c1f0");
  }
}
static Arrange_To_Call_Me vS10959C1(Test_S10959C1, "S10959C1", 5120);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S10613C1  {
  char s10613c1f0[156];
};
//SIG(1 S10613C1) C1{ Fc[156]}



static void Test_S10613C1()
{
  {
    init_simple_test("S10613C1");
    S10613C1 lv;
    check2(sizeof(lv), 156, "sizeof(S10613C1)");
    check2(__alignof__(lv), 1, "__alignof__(S10613C1)");
    check_field_offset(lv, s10613c1f0, 0, "S10613C1.s10613c1f0");
  }
}
static Arrange_To_Call_Me vS10613C1(Test_S10613C1, "S10613C1", 156);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S12200C1  {
  long double s12200c1f0[3];
};
//SIG(1 S12200C1) C1{ FD[3]}



static void Test_S12200C1()
{
  {
    init_simple_test("S12200C1");
    S12200C1 lv;
    check2(sizeof(lv), ABISELECT(48,36), "sizeof(S12200C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S12200C1)");
    check_field_offset(lv, s12200c1f0, 0, "S12200C1.s12200c1f0");
  }
}
static Arrange_To_Call_Me vS12200C1(Test_S12200C1, "S12200C1", ABISELECT(48,36));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

