// 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  S674C6_nt  {
  int s674c6f0[2];
  void  mf674c6(); // _ZN9S674C6_nt7mf674c6Ev
};
//SIG(-1 S674C6_nt) C1{ m Fi[2]}


void  S674C6_nt ::mf674c6(){}

//skip512 S674C6_nt

#else // __cplusplus

Class_Descriptor cd_S674C6_nt = {  "S674C6_nt", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  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  S674C5_nt  {
  int s674c5f0;
  __tsi64 s674c5f1;
  void *s674c5f2[4];
  int s674c5f3[2];
  void *s674c5f4;
  ::S674C6_nt s674c5f5;
  void *s674c5f6[2];
  virtual  ~S674C5_nt(); // _ZN9S674C5_ntD1Ev
  virtual void  v6(); // _ZN9S674C5_nt2v6Ev
  virtual void  v7(); // _ZN9S674C5_nt2v7Ev
  virtual void  v8(); // _ZN9S674C5_nt2v8Ev
  virtual void  v9(); // _ZN9S674C5_nt2v9Ev
  virtual void  v10(); // _ZN9S674C5_nt3v10Ev
  virtual void  v11(); // _ZN9S674C5_nt3v11Ev
  virtual void  v12(); // _ZN9S674C5_nt3v12Ev
  virtual void  v13(); // _ZN9S674C5_nt3v13Ev
  virtual void  v14(); // _ZN9S674C5_nt3v14Ev
  virtual void  v15(); // _ZN9S674C5_nt3v15Ev
  virtual void  v16(); // _ZN9S674C5_nt3v16Ev
  virtual void  v17(); // _ZN9S674C5_nt3v17Ev
  virtual void  v18(); // _ZN9S674C5_nt3v18Ev
  virtual void  v19(); // _ZN9S674C5_nt3v19Ev
  virtual void  v20(); // _ZN9S674C5_nt3v20Ev
  virtual void  v21(); // _ZN9S674C5_nt3v21Ev
  virtual void  v22(); // _ZN9S674C5_nt3v22Ev
  virtual void  v23(); // _ZN9S674C5_nt3v23Ev
  virtual void  v24(); // _ZN9S674C5_nt3v24Ev
  virtual void  v25(); // _ZN9S674C5_nt3v25Ev
  virtual void  v26(); // _ZN9S674C5_nt3v26Ev
  virtual void  v27(); // _ZN9S674C5_nt3v27Ev
  virtual void  v28(); // _ZN9S674C5_nt3v28Ev
  virtual void  v29(); // _ZN9S674C5_nt3v29Ev
  virtual void  v30(); // _ZN9S674C5_nt3v30Ev
  virtual void  v31(); // _ZN9S674C5_nt3v31Ev
  virtual void  v32(); // _ZN9S674C5_nt3v32Ev
  virtual void  v33(); // _ZN9S674C5_nt3v33Ev
  virtual void  v34(); // _ZN9S674C5_nt3v34Ev
  virtual void  v35(); // _ZN9S674C5_nt3v35Ev
  virtual void  v36(); // _ZN9S674C5_nt3v36Ev
  virtual void  v37(); // _ZN9S674C5_nt3v37Ev
  virtual void  v38(); // _ZN9S674C5_nt3v38Ev
  virtual void  v39(); // _ZN9S674C5_nt3v39Ev
  virtual void  v40(); // _ZN9S674C5_nt3v40Ev
  virtual void  v41(); // _ZN9S674C5_nt3v41Ev
  virtual void  v42(); // _ZN9S674C5_nt3v42Ev
  virtual void  v43(); // _ZN9S674C5_nt3v43Ev
  virtual void  v44(); // _ZN9S674C5_nt3v44Ev
  virtual void  v45(); // _ZN9S674C5_nt3v45Ev
  virtual void  v46(); // _ZN9S674C5_nt3v46Ev
  virtual void  v47(); // _ZN9S674C5_nt3v47Ev
  virtual void  v48(); // _ZN9S674C5_nt3v48Ev
  virtual void  v49(); // _ZN9S674C5_nt3v49Ev
  virtual void  v50(); // _ZN9S674C5_nt3v50Ev
  virtual void  v51(); // _ZN9S674C5_nt3v51Ev
  virtual void  v52(); // _ZN9S674C5_nt3v52Ev
  virtual void  v53(); // _ZN9S674C5_nt3v53Ev
  virtual void  v54(); // _ZN9S674C5_nt3v54Ev
  virtual void  v55(); // _ZN9S674C5_nt3v55Ev
  virtual void  v56(); // _ZN9S674C5_nt3v56Ev
  virtual void  v57(); // _ZN9S674C5_nt3v57Ev
  virtual void  v58(); // _ZN9S674C5_nt3v58Ev
  virtual void  v59(); // _ZN9S674C5_nt3v59Ev
  virtual void  v60(); // _ZN9S674C5_nt3v60Ev
  virtual void  v61(); // _ZN9S674C5_nt3v61Ev
  virtual void  v62(); // _ZN9S674C5_nt3v62Ev
  virtual void  v63(); // _ZN9S674C5_nt3v63Ev
  virtual void  v64(); // _ZN9S674C5_nt3v64Ev
  virtual void  v65(); // _ZN9S674C5_nt3v65Ev
  virtual void  v66(); // _ZN9S674C5_nt3v66Ev
  virtual void  v67(); // _ZN9S674C5_nt3v67Ev
  virtual void  v68(); // _ZN9S674C5_nt3v68Ev
  virtual void  v69(); // _ZN9S674C5_nt3v69Ev
  S674C5_nt(); // tgen
};
//SIG(-1 S674C5_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]}


 S674C5_nt ::~S674C5_nt(){ note_dtor("S674C5_nt", this);}
void  S674C5_nt ::v6(){vfunc_called(this, "_ZN9S674C5_nt2v6Ev");}
void  S674C5_nt ::v7(){vfunc_called(this, "_ZN9S674C5_nt2v7Ev");}
void  S674C5_nt ::v8(){vfunc_called(this, "_ZN9S674C5_nt2v8Ev");}
void  S674C5_nt ::v9(){vfunc_called(this, "_ZN9S674C5_nt2v9Ev");}
void  S674C5_nt ::v10(){vfunc_called(this, "_ZN9S674C5_nt3v10Ev");}
void  S674C5_nt ::v11(){vfunc_called(this, "_ZN9S674C5_nt3v11Ev");}
void  S674C5_nt ::v12(){vfunc_called(this, "_ZN9S674C5_nt3v12Ev");}
void  S674C5_nt ::v13(){vfunc_called(this, "_ZN9S674C5_nt3v13Ev");}
void  S674C5_nt ::v14(){vfunc_called(this, "_ZN9S674C5_nt3v14Ev");}
void  S674C5_nt ::v15(){vfunc_called(this, "_ZN9S674C5_nt3v15Ev");}
void  S674C5_nt ::v16(){vfunc_called(this, "_ZN9S674C5_nt3v16Ev");}
void  S674C5_nt ::v17(){vfunc_called(this, "_ZN9S674C5_nt3v17Ev");}
void  S674C5_nt ::v18(){vfunc_called(this, "_ZN9S674C5_nt3v18Ev");}
void  S674C5_nt ::v19(){vfunc_called(this, "_ZN9S674C5_nt3v19Ev");}
void  S674C5_nt ::v20(){vfunc_called(this, "_ZN9S674C5_nt3v20Ev");}
void  S674C5_nt ::v21(){vfunc_called(this, "_ZN9S674C5_nt3v21Ev");}
void  S674C5_nt ::v22(){vfunc_called(this, "_ZN9S674C5_nt3v22Ev");}
void  S674C5_nt ::v23(){vfunc_called(this, "_ZN9S674C5_nt3v23Ev");}
void  S674C5_nt ::v24(){vfunc_called(this, "_ZN9S674C5_nt3v24Ev");}
void  S674C5_nt ::v25(){vfunc_called(this, "_ZN9S674C5_nt3v25Ev");}
void  S674C5_nt ::v26(){vfunc_called(this, "_ZN9S674C5_nt3v26Ev");}
void  S674C5_nt ::v27(){vfunc_called(this, "_ZN9S674C5_nt3v27Ev");}
void  S674C5_nt ::v28(){vfunc_called(this, "_ZN9S674C5_nt3v28Ev");}
void  S674C5_nt ::v29(){vfunc_called(this, "_ZN9S674C5_nt3v29Ev");}
void  S674C5_nt ::v30(){vfunc_called(this, "_ZN9S674C5_nt3v30Ev");}
void  S674C5_nt ::v31(){vfunc_called(this, "_ZN9S674C5_nt3v31Ev");}
void  S674C5_nt ::v32(){vfunc_called(this, "_ZN9S674C5_nt3v32Ev");}
void  S674C5_nt ::v33(){vfunc_called(this, "_ZN9S674C5_nt3v33Ev");}
void  S674C5_nt ::v34(){vfunc_called(this, "_ZN9S674C5_nt3v34Ev");}
void  S674C5_nt ::v35(){vfunc_called(this, "_ZN9S674C5_nt3v35Ev");}
void  S674C5_nt ::v36(){vfunc_called(this, "_ZN9S674C5_nt3v36Ev");}
void  S674C5_nt ::v37(){vfunc_called(this, "_ZN9S674C5_nt3v37Ev");}
void  S674C5_nt ::v38(){vfunc_called(this, "_ZN9S674C5_nt3v38Ev");}
void  S674C5_nt ::v39(){vfunc_called(this, "_ZN9S674C5_nt3v39Ev");}
void  S674C5_nt ::v40(){vfunc_called(this, "_ZN9S674C5_nt3v40Ev");}
void  S674C5_nt ::v41(){vfunc_called(this, "_ZN9S674C5_nt3v41Ev");}
void  S674C5_nt ::v42(){vfunc_called(this, "_ZN9S674C5_nt3v42Ev");}
void  S674C5_nt ::v43(){vfunc_called(this, "_ZN9S674C5_nt3v43Ev");}
void  S674C5_nt ::v44(){vfunc_called(this, "_ZN9S674C5_nt3v44Ev");}
void  S674C5_nt ::v45(){vfunc_called(this, "_ZN9S674C5_nt3v45Ev");}
void  S674C5_nt ::v46(){vfunc_called(this, "_ZN9S674C5_nt3v46Ev");}
void  S674C5_nt ::v47(){vfunc_called(this, "_ZN9S674C5_nt3v47Ev");}
void  S674C5_nt ::v48(){vfunc_called(this, "_ZN9S674C5_nt3v48Ev");}
void  S674C5_nt ::v49(){vfunc_called(this, "_ZN9S674C5_nt3v49Ev");}
void  S674C5_nt ::v50(){vfunc_called(this, "_ZN9S674C5_nt3v50Ev");}
void  S674C5_nt ::v51(){vfunc_called(this, "_ZN9S674C5_nt3v51Ev");}
void  S674C5_nt ::v52(){vfunc_called(this, "_ZN9S674C5_nt3v52Ev");}
void  S674C5_nt ::v53(){vfunc_called(this, "_ZN9S674C5_nt3v53Ev");}
void  S674C5_nt ::v54(){vfunc_called(this, "_ZN9S674C5_nt3v54Ev");}
void  S674C5_nt ::v55(){vfunc_called(this, "_ZN9S674C5_nt3v55Ev");}
void  S674C5_nt ::v56(){vfunc_called(this, "_ZN9S674C5_nt3v56Ev");}
void  S674C5_nt ::v57(){vfunc_called(this, "_ZN9S674C5_nt3v57Ev");}
void  S674C5_nt ::v58(){vfunc_called(this, "_ZN9S674C5_nt3v58Ev");}
void  S674C5_nt ::v59(){vfunc_called(this, "_ZN9S674C5_nt3v59Ev");}
void  S674C5_nt ::v60(){vfunc_called(this, "_ZN9S674C5_nt3v60Ev");}
void  S674C5_nt ::v61(){vfunc_called(this, "_ZN9S674C5_nt3v61Ev");}
void  S674C5_nt ::v62(){vfunc_called(this, "_ZN9S674C5_nt3v62Ev");}
void  S674C5_nt ::v63(){vfunc_called(this, "_ZN9S674C5_nt3v63Ev");}
void  S674C5_nt ::v64(){vfunc_called(this, "_ZN9S674C5_nt3v64Ev");}
void  S674C5_nt ::v65(){vfunc_called(this, "_ZN9S674C5_nt3v65Ev");}
void  S674C5_nt ::v66(){vfunc_called(this, "_ZN9S674C5_nt3v66Ev");}
void  S674C5_nt ::v67(){vfunc_called(this, "_ZN9S674C5_nt3v67Ev");}
void  S674C5_nt ::v68(){vfunc_called(this, "_ZN9S674C5_nt3v68Ev");}
void  S674C5_nt ::v69(){vfunc_called(this, "_ZN9S674C5_nt3v69Ev");}
S674C5_nt ::S674C5_nt(){ note_ctor("S674C5_nt", this);} // tgen

//skip512 S674C5_nt

#else // __cplusplus

extern void _ZN9S674C5_ntC1Ev();
extern void _ZN9S674C5_ntD1Ev();
Name_Map name_map_S674C5_nt[] = {
  NSPAIR(_ZN9S674C5_ntC1Ev),
  NSPAIR(_ZN9S674C5_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI9S674C5_nt[];
extern void _ZN9S674C5_ntD1Ev();
extern void _ZN9S674C5_ntD0Ev();
extern void _ZN9S674C5_nt2v6Ev();
extern void _ZN9S674C5_nt2v7Ev();
extern void _ZN9S674C5_nt2v8Ev();
extern void _ZN9S674C5_nt2v9Ev();
extern void _ZN9S674C5_nt3v10Ev();
extern void _ZN9S674C5_nt3v11Ev();
extern void _ZN9S674C5_nt3v12Ev();
extern void _ZN9S674C5_nt3v13Ev();
extern void _ZN9S674C5_nt3v14Ev();
extern void _ZN9S674C5_nt3v15Ev();
extern void _ZN9S674C5_nt3v16Ev();
extern void _ZN9S674C5_nt3v17Ev();
extern void _ZN9S674C5_nt3v18Ev();
extern void _ZN9S674C5_nt3v19Ev();
extern void _ZN9S674C5_nt3v20Ev();
extern void _ZN9S674C5_nt3v21Ev();
extern void _ZN9S674C5_nt3v22Ev();
extern void _ZN9S674C5_nt3v23Ev();
extern void _ZN9S674C5_nt3v24Ev();
extern void _ZN9S674C5_nt3v25Ev();
extern void _ZN9S674C5_nt3v26Ev();
extern void _ZN9S674C5_nt3v27Ev();
extern void _ZN9S674C5_nt3v28Ev();
extern void _ZN9S674C5_nt3v29Ev();
extern void _ZN9S674C5_nt3v30Ev();
extern void _ZN9S674C5_nt3v31Ev();
extern void _ZN9S674C5_nt3v32Ev();
extern void _ZN9S674C5_nt3v33Ev();
extern void _ZN9S674C5_nt3v34Ev();
extern void _ZN9S674C5_nt3v35Ev();
extern void _ZN9S674C5_nt3v36Ev();
extern void _ZN9S674C5_nt3v37Ev();
extern void _ZN9S674C5_nt3v38Ev();
extern void _ZN9S674C5_nt3v39Ev();
extern void _ZN9S674C5_nt3v40Ev();
extern void _ZN9S674C5_nt3v41Ev();
extern void _ZN9S674C5_nt3v42Ev();
extern void _ZN9S674C5_nt3v43Ev();
extern void _ZN9S674C5_nt3v44Ev();
extern void _ZN9S674C5_nt3v45Ev();
extern void _ZN9S674C5_nt3v46Ev();
extern void _ZN9S674C5_nt3v47Ev();
extern void _ZN9S674C5_nt3v48Ev();
extern void _ZN9S674C5_nt3v49Ev();
extern void _ZN9S674C5_nt3v50Ev();
extern void _ZN9S674C5_nt3v51Ev();
extern void _ZN9S674C5_nt3v52Ev();
extern void _ZN9S674C5_nt3v53Ev();
extern void _ZN9S674C5_nt3v54Ev();
extern void _ZN9S674C5_nt3v55Ev();
extern void _ZN9S674C5_nt3v56Ev();
extern void _ZN9S674C5_nt3v57Ev();
extern void _ZN9S674C5_nt3v58Ev();
extern void _ZN9S674C5_nt3v59Ev();
extern void _ZN9S674C5_nt3v60Ev();
extern void _ZN9S674C5_nt3v61Ev();
extern void _ZN9S674C5_nt3v62Ev();
extern void _ZN9S674C5_nt3v63Ev();
extern void _ZN9S674C5_nt3v64Ev();
extern void _ZN9S674C5_nt3v65Ev();
extern void _ZN9S674C5_nt3v66Ev();
extern void _ZN9S674C5_nt3v67Ev();
extern void _ZN9S674C5_nt3v68Ev();
extern void _ZN9S674C5_nt3v69Ev();
static  VTBL_ENTRY vtc_S674C5_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S674C5_nt[0]),
  (VTBL_ENTRY)&_ZN9S674C5_ntD1Ev,
  (VTBL_ENTRY)&_ZN9S674C5_ntD0Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt2v6Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt2v7Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt2v9Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v10Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v11Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v12Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v13Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v14Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v15Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v16Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v17Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v18Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v19Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v20Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v21Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v22Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v23Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v24Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v25Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v26Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v27Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v28Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v29Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v30Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v31Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v32Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v33Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v34Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v35Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v36Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v37Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v38Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v39Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v40Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v41Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v42Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v43Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v44Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v45Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v46Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v47Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v48Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v49Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v50Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v51Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v52Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v53Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v54Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v55Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v56Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v57Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v58Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v59Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v60Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v61Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v62Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v63Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v64Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v65Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v66Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v67Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v68Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v69Ev,
};
extern VTBL_ENTRY _ZTI9S674C5_nt[];
VTBL_ENTRY *P__ZTI9S674C5_nt = _ZTI9S674C5_nt; 
extern  VTBL_ENTRY _ZTV9S674C5_nt[];
Class_Descriptor cd_S674C5_nt = {  "S674C5_nt", // class name
  0,0,//no base classes
  &(vtc_S674C5_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI9S674C5_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV9S674C5_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  S674C4_nt  : S674C5_nt {
  virtual  ~S674C4_nt(); // _ZN9S674C4_ntD1Ev
  virtual void  v70(); // _ZN9S674C4_nt3v70Ev
  virtual void  v71(); // _ZN9S674C4_nt3v71Ev
  S674C4_nt(); // tgen
};
//SIG(-1 S674C4_nt) C1{ BC2{ vd 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 Fi FL Fp[4] Fi[2] Fp FC3{ m Fi[2]} Fp[2]} vd v1 v2}


 S674C4_nt ::~S674C4_nt(){ note_dtor("S674C4_nt", this);}
void  S674C4_nt ::v70(){vfunc_called(this, "_ZN9S674C4_nt3v70Ev");}
void  S674C4_nt ::v71(){vfunc_called(this, "_ZN9S674C4_nt3v71Ev");}
S674C4_nt ::S674C4_nt(){ note_ctor("S674C4_nt", this);} // tgen

//skip512 S674C4_nt

#else // __cplusplus

extern void _ZN9S674C4_ntC1Ev();
extern void _ZN9S674C4_ntD1Ev();
Name_Map name_map_S674C4_nt[] = {
  NSPAIR(_ZN9S674C4_ntC1Ev),
  NSPAIR(_ZN9S674C4_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S674C5_nt;
extern VTBL_ENTRY _ZTI9S674C5_nt[];
extern  VTBL_ENTRY _ZTV9S674C5_nt[];
static Base_Class bases_S674C4_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S674C5_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 _ZTI9S674C4_nt[];
extern void _ZN9S674C4_ntD1Ev();
extern void _ZN9S674C4_ntD0Ev();
extern void _ZN9S674C5_nt2v6Ev();
extern void _ZN9S674C5_nt2v7Ev();
extern void _ZN9S674C5_nt2v8Ev();
extern void _ZN9S674C5_nt2v9Ev();
extern void _ZN9S674C5_nt3v10Ev();
extern void _ZN9S674C5_nt3v11Ev();
extern void _ZN9S674C5_nt3v12Ev();
extern void _ZN9S674C5_nt3v13Ev();
extern void _ZN9S674C5_nt3v14Ev();
extern void _ZN9S674C5_nt3v15Ev();
extern void _ZN9S674C5_nt3v16Ev();
extern void _ZN9S674C5_nt3v17Ev();
extern void _ZN9S674C5_nt3v18Ev();
extern void _ZN9S674C5_nt3v19Ev();
extern void _ZN9S674C5_nt3v20Ev();
extern void _ZN9S674C5_nt3v21Ev();
extern void _ZN9S674C5_nt3v22Ev();
extern void _ZN9S674C5_nt3v23Ev();
extern void _ZN9S674C5_nt3v24Ev();
extern void _ZN9S674C5_nt3v25Ev();
extern void _ZN9S674C5_nt3v26Ev();
extern void _ZN9S674C5_nt3v27Ev();
extern void _ZN9S674C5_nt3v28Ev();
extern void _ZN9S674C5_nt3v29Ev();
extern void _ZN9S674C5_nt3v30Ev();
extern void _ZN9S674C5_nt3v31Ev();
extern void _ZN9S674C5_nt3v32Ev();
extern void _ZN9S674C5_nt3v33Ev();
extern void _ZN9S674C5_nt3v34Ev();
extern void _ZN9S674C5_nt3v35Ev();
extern void _ZN9S674C5_nt3v36Ev();
extern void _ZN9S674C5_nt3v37Ev();
extern void _ZN9S674C5_nt3v38Ev();
extern void _ZN9S674C5_nt3v39Ev();
extern void _ZN9S674C5_nt3v40Ev();
extern void _ZN9S674C5_nt3v41Ev();
extern void _ZN9S674C5_nt3v42Ev();
extern void _ZN9S674C5_nt3v43Ev();
extern void _ZN9S674C5_nt3v44Ev();
extern void _ZN9S674C5_nt3v45Ev();
extern void _ZN9S674C5_nt3v46Ev();
extern void _ZN9S674C5_nt3v47Ev();
extern void _ZN9S674C5_nt3v48Ev();
extern void _ZN9S674C5_nt3v49Ev();
extern void _ZN9S674C5_nt3v50Ev();
extern void _ZN9S674C5_nt3v51Ev();
extern void _ZN9S674C5_nt3v52Ev();
extern void _ZN9S674C5_nt3v53Ev();
extern void _ZN9S674C5_nt3v54Ev();
extern void _ZN9S674C5_nt3v55Ev();
extern void _ZN9S674C5_nt3v56Ev();
extern void _ZN9S674C5_nt3v57Ev();
extern void _ZN9S674C5_nt3v58Ev();
extern void _ZN9S674C5_nt3v59Ev();
extern void _ZN9S674C5_nt3v60Ev();
extern void _ZN9S674C5_nt3v61Ev();
extern void _ZN9S674C5_nt3v62Ev();
extern void _ZN9S674C5_nt3v63Ev();
extern void _ZN9S674C5_nt3v64Ev();
extern void _ZN9S674C5_nt3v65Ev();
extern void _ZN9S674C5_nt3v66Ev();
extern void _ZN9S674C5_nt3v67Ev();
extern void _ZN9S674C5_nt3v68Ev();
extern void _ZN9S674C5_nt3v69Ev();
extern void _ZN9S674C4_nt3v70Ev();
extern void _ZN9S674C4_nt3v71Ev();
static  VTBL_ENTRY vtc_S674C4_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S674C4_nt[0]),
  (VTBL_ENTRY)&_ZN9S674C4_ntD1Ev,
  (VTBL_ENTRY)&_ZN9S674C4_ntD0Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt2v6Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt2v7Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt2v9Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v10Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v11Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v12Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v13Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v14Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v15Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v16Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v17Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v18Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v19Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v20Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v21Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v22Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v23Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v24Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v25Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v26Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v27Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v28Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v29Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v30Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v31Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v32Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v33Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v34Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v35Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v36Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v37Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v38Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v39Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v40Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v41Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v42Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v43Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v44Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v45Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v46Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v47Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v48Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v49Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v50Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v51Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v52Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v53Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v54Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v55Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v56Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v57Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v58Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v59Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v60Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v61Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v62Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v63Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v64Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v65Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v66Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v67Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v68Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v69Ev,
  (VTBL_ENTRY)&_ZN9S674C4_nt3v70Ev,
  (VTBL_ENTRY)&_ZN9S674C4_nt3v71Ev,
};
extern VTBL_ENTRY _ZTI9S674C4_nt[];
VTBL_ENTRY *P__ZTI9S674C4_nt = _ZTI9S674C4_nt; 
extern  VTBL_ENTRY _ZTV9S674C4_nt[];
Class_Descriptor cd_S674C4_nt = {  "S674C4_nt", // class name
  bases_S674C4_nt, 1,
  &(vtc_S674C4_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI9S674C4_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV9S674C4_nt),70, //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  S674C7_nt  {
  int s674c7f0[4];
  char s674c7f1[9];
  void  mf674c7(); // _ZN9S674C7_nt7mf674c7Ev
};
//SIG(-1 S674C7_nt) C1{ m Fi[4] Fc[9]}


void  S674C7_nt ::mf674c7(){}

//skip512 S674C7_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S674C10_nt  {
  void *s674c10f0;
  int s674c10f1[2];
  void  mf674c10(); // _ZN10S674C10_nt8mf674c10Ev
};
//SIG(-1 S674C10_nt) C1{ m Fp Fi[2]}


void  S674C10_nt ::mf674c10(){}

//skip512 S674C10_nt

#else // __cplusplus

Class_Descriptor cd_S674C10_nt = {  "S674C10_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  S674C9_nt  : S674C10_nt {
};
//SIG(-1 S674C9_nt) C1{ BC2{ m Fp Fi[2]}}



//skip512 S674C9_nt

#else // __cplusplus

extern Class_Descriptor cd_S674C10_nt;
static Base_Class bases_S674C9_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S674C10_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_S674C9_nt = {  "S674C9_nt", // class name
  bases_S674C9_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  S674C8_nt  : S674C9_nt {
};
//SIG(-1 S674C8_nt) C1{ BC2{ BC3{ m Fp Fi[2]}}}



//skip512 S674C8_nt

#else // __cplusplus

extern Class_Descriptor cd_S674C10_nt;
extern Class_Descriptor cd_S674C9_nt;
static Base_Class bases_S674C8_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S674C10_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_S674C9_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  S674C14  : S674C10_nt {
};
//SIG(-1 S674C14) C1{ BC2{ m Fp Fi[2]}}



static void Test_S674C14()
{
  extern Class_Descriptor cd_S674C14;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S674C14, buf);
    S674C14 &lv = *(new (buf) S674C14());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S674C14)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S674C14)");
    check_base_class_offset(lv, (S674C10_nt*), 0, "S674C14");
    test_class_info(&lv, &cd_S674C14);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS674C14(Test_S674C14, "S674C14", ABISELECT(16,12));

#else // __cplusplus

extern Class_Descriptor cd_S674C10_nt;
static Base_Class bases_S674C14[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S674C10_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_S674C14 = {  "S674C14", // class name
  bases_S674C14, 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  S674C13  : S674C14 {
};
//SIG(-1 S674C13) C1{ BC2{ BC3{ m Fp Fi[2]}}}



static void Test_S674C13()
{
  extern Class_Descriptor cd_S674C13;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S674C13, buf);
    S674C13 &lv = *(new (buf) S674C13());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S674C13)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S674C13)");
    check_base_class_offset(lv, (S674C10_nt*)(S674C14*), 0, "S674C13");
    check_base_class_offset(lv, (S674C14*), 0, "S674C13");
    test_class_info(&lv, &cd_S674C13);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS674C13(Test_S674C13, "S674C13", ABISELECT(16,12));

#else // __cplusplus

extern Class_Descriptor cd_S674C10_nt;
extern Class_Descriptor cd_S674C14;
static Base_Class bases_S674C13[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S674C10_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_S674C14,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S674C13 = {  "S674C13", // class name
  bases_S674C13, 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  S674C18  : S674C10_nt {
};
//SIG(-1 S674C18) C1{ BC2{ m Fp Fi[2]}}



static void Test_S674C18()
{
  extern Class_Descriptor cd_S674C18;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S674C18, buf);
    S674C18 &lv = *(new (buf) S674C18());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S674C18)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S674C18)");
    check_base_class_offset(lv, (S674C10_nt*), 0, "S674C18");
    test_class_info(&lv, &cd_S674C18);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS674C18(Test_S674C18, "S674C18", ABISELECT(16,12));

#else // __cplusplus

extern Class_Descriptor cd_S674C10_nt;
static Base_Class bases_S674C18[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S674C10_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_S674C18 = {  "S674C18", // class name
  bases_S674C18, 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  S674C17  : S674C18 {
};
//SIG(-1 S674C17) C1{ BC2{ BC3{ m Fp Fi[2]}}}



static void Test_S674C17()
{
  extern Class_Descriptor cd_S674C17;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S674C17, buf);
    S674C17 &lv = *(new (buf) S674C17());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S674C17)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S674C17)");
    check_base_class_offset(lv, (S674C10_nt*)(S674C18*), 0, "S674C17");
    check_base_class_offset(lv, (S674C18*), 0, "S674C17");
    test_class_info(&lv, &cd_S674C17);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS674C17(Test_S674C17, "S674C17", ABISELECT(16,12));

#else // __cplusplus

extern Class_Descriptor cd_S674C10_nt;
extern Class_Descriptor cd_S674C18;
static Base_Class bases_S674C17[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S674C10_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_S674C18,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S674C17 = {  "S674C17", // class name
  bases_S674C17, 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  S674C19_nt  {
  void *s674c19f0;
  ::S674C6_nt s674c19f1;
  void  mf674c19(); // _ZN10S674C19_nt8mf674c19Ev
};
//SIG(-1 S674C19_nt) C1{ m Fp FC2{ m Fi[2]}}


void  S674C19_nt ::mf674c19(){}

//skip512 S674C19_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S674C3_nt  : S674C4_nt {
  ::S674C7_nt s674c3f0;
  int s674c3f1;
  unsigned int s674c3f2:1;
  unsigned int s674c3f3:1;
  unsigned int s674c3f4:1;
  unsigned int s674c3f5:1;
  ::S674C8_nt s674c3f6;
  ::S674C8_nt s674c3f7;
  void *s674c3f8;
  ::S674C13 s674c3f9;
  ::S674C13 s674c3f10;
  ::S674C13 s674c3f11;
  ::S674C17 s674c3f12;
  char s674c3f13;
  int s674c3f14;
  void *s674c3f15;
  ::S674C6_nt s674c3f16;
  ::S674C6_nt s674c3f17;
  ::S674C6_nt s674c3f18;
  ::S674C6_nt s674c3f19;
  ::S674C6_nt s674c3f20;
  ::S674C6_nt s674c3f21;
  ::S674C19_nt s674c3f22;
  ::S674C19_nt s674c3f23;
  ::S674C19_nt s674c3f24;
  ::S674C19_nt s674c3f25;
  ::S674C19_nt s674c3f26;
  ::S674C19_nt s674c3f27;
  ::S674C19_nt s674c3f28;
  ::S674C19_nt s674c3f29;
  ::S674C19_nt s674c3f30;
  ::S674C19_nt s674c3f31;
  virtual  ~S674C3_nt(); // _ZN9S674C3_ntD1Ev
  virtual void  v72(); // _ZN9S674C3_nt3v72Ev
  virtual void  v73(); // _ZN9S674C3_nt3v73Ev
  virtual void  v74(); // _ZN9S674C3_nt3v74Ev
  virtual void  v75(); // _ZN9S674C3_nt3v75Ev
  virtual void  v76(); // _ZN9S674C3_nt3v76Ev
  virtual void  v77(); // _ZN9S674C3_nt3v77Ev
  virtual void  v78(); // _ZN9S674C3_nt3v78Ev
  virtual void  v79(); // _ZN9S674C3_nt3v79Ev
  virtual void  v80(); // _ZN9S674C3_nt3v80Ev
  virtual void  v81(); // _ZN9S674C3_nt3v81Ev
  virtual void  v82(); // _ZN9S674C3_nt3v82Ev
  virtual void  v83(); // _ZN9S674C3_nt3v83Ev
  virtual void  v84(); // _ZN9S674C3_nt3v84Ev
  virtual void  v85(); // _ZN9S674C3_nt3v85Ev
  virtual void  v86(); // _ZN9S674C3_nt3v86Ev
  virtual void  v87(); // _ZN9S674C3_nt3v87Ev
  virtual void  v88(); // _ZN9S674C3_nt3v88Ev
  virtual void  v89(); // _ZN9S674C3_nt3v89Ev
  virtual void  v90(); // _ZN9S674C3_nt3v90Ev
  virtual void  v91(); // _ZN9S674C3_nt3v91Ev
  virtual void  v92(); // _ZN9S674C3_nt3v92Ev
  virtual void  v93(); // _ZN9S674C3_nt3v93Ev
  virtual void  v94(); // _ZN9S674C3_nt3v94Ev
  virtual void  v95(); // _ZN9S674C3_nt3v95Ev
  virtual void  v96(); // _ZN9S674C3_nt3v96Ev
  virtual void  v97(); // _ZN9S674C3_nt3v97Ev
  virtual void  v98(); // _ZN9S674C3_nt3v98Ev
  virtual void  v99(); // _ZN9S674C3_nt3v99Ev
  virtual void  v100(); // _ZN9S674C3_nt4v100Ev
  virtual void  v101(); // _ZN9S674C3_nt4v101Ev
  virtual void  v102(); // _ZN9S674C3_nt4v102Ev
  virtual void  v103(); // _ZN9S674C3_nt4v103Ev
  virtual void  v104(); // _ZN9S674C3_nt4v104Ev
  virtual void  v105(); // _ZN9S674C3_nt4v105Ev
  virtual void  v106(); // _ZN9S674C3_nt4v106Ev
  virtual void  v107(); // _ZN9S674C3_nt4v107Ev
  virtual void  v108(); // _ZN9S674C3_nt4v108Ev
  virtual void  v109(); // _ZN9S674C3_nt4v109Ev
  virtual void  v110(); // _ZN9S674C3_nt4v110Ev
  virtual void  v111(); // _ZN9S674C3_nt4v111Ev
  virtual void  v112(); // _ZN9S674C3_nt4v112Ev
  virtual void  v113(); // _ZN9S674C3_nt4v113Ev
  virtual void  v114(); // _ZN9S674C3_nt4v114Ev
  virtual void  v115(); // _ZN9S674C3_nt4v115Ev
  virtual void  v116(); // _ZN9S674C3_nt4v116Ev
  virtual void  v117(); // _ZN9S674C3_nt4v117Ev
  virtual void  v118(); // _ZN9S674C3_nt4v118Ev
  virtual void  v119(); // _ZN9S674C3_nt4v119Ev
  virtual void  v120(); // _ZN9S674C3_nt4v120Ev
  virtual void  v121(); // _ZN9S674C3_nt4v121Ev
  virtual void  v122(); // _ZN9S674C3_nt4v122Ev
  virtual void  v123(); // _ZN9S674C3_nt4v123Ev
  virtual void  v124(); // _ZN9S674C3_nt4v124Ev
  virtual void  v125(); // _ZN9S674C3_nt4v125Ev
  virtual void  v126(); // _ZN9S674C3_nt4v126Ev
  virtual void  v127(); // _ZN9S674C3_nt4v127Ev
  virtual void  v128(); // _ZN9S674C3_nt4v128Ev
  virtual void  v129(); // _ZN9S674C3_nt4v129Ev
  virtual void  v130(); // _ZN9S674C3_nt4v130Ev
  virtual void  v131(); // _ZN9S674C3_nt4v131Ev
  virtual void  v132(); // _ZN9S674C3_nt4v132Ev
  virtual void  v133(); // _ZN9S674C3_nt4v133Ev
  virtual void  v134(); // _ZN9S674C3_nt4v134Ev
  virtual void  v135(); // _ZN9S674C3_nt4v135Ev
  virtual void  v136(); // _ZN9S674C3_nt4v136Ev
  virtual void  v137(); // _ZN9S674C3_nt4v137Ev
  virtual void  v138(); // _ZN9S674C3_nt4v138Ev
  virtual void  v139(); // _ZN9S674C3_nt4v139Ev
  virtual void  v140(); // _ZN9S674C3_nt4v140Ev
  virtual void  v141(); // _ZN9S674C3_nt4v141Ev
  virtual void  v142(); // _ZN9S674C3_nt4v142Ev
  virtual void  v143(); // _ZN9S674C3_nt4v143Ev
  virtual void  v144(); // _ZN9S674C3_nt4v144Ev
  virtual void  v145(); // _ZN9S674C3_nt4v145Ev
  virtual void  v146(); // _ZN9S674C3_nt4v146Ev
  virtual void  v147(); // _ZN9S674C3_nt4v147Ev
  S674C3_nt(); // tgen
};
//SIG(-1 S674C3_nt) C1{ BC2{ BC3{ vd 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 Fi FL Fp[4] Fi[2] Fp FC4{ m Fi[2]} Fp[2]} vd v141 v142} 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 FC5{ m Fi[4] Fc[9]} Fi Fi:1 Fi:1 Fi:1 Fi:1 FC6{ BC7{ BC8{ m Fp Fi[2]}}} FC6 Fp FC9{ BC10{ BC8}} FC9 FC9 FC11{ BC12{ BC8}} Fc Fi Fp FC4 FC4 FC4 FC4 FC4 FC4 FC13{ m Fp FC4} FC13 FC13 FC13 FC13 FC13 FC13 FC13 FC13 FC13}


 S674C3_nt ::~S674C3_nt(){ note_dtor("S674C3_nt", this);}
void  S674C3_nt ::v72(){vfunc_called(this, "_ZN9S674C3_nt3v72Ev");}
void  S674C3_nt ::v73(){vfunc_called(this, "_ZN9S674C3_nt3v73Ev");}
void  S674C3_nt ::v74(){vfunc_called(this, "_ZN9S674C3_nt3v74Ev");}
void  S674C3_nt ::v75(){vfunc_called(this, "_ZN9S674C3_nt3v75Ev");}
void  S674C3_nt ::v76(){vfunc_called(this, "_ZN9S674C3_nt3v76Ev");}
void  S674C3_nt ::v77(){vfunc_called(this, "_ZN9S674C3_nt3v77Ev");}
void  S674C3_nt ::v78(){vfunc_called(this, "_ZN9S674C3_nt3v78Ev");}
void  S674C3_nt ::v79(){vfunc_called(this, "_ZN9S674C3_nt3v79Ev");}
void  S674C3_nt ::v80(){vfunc_called(this, "_ZN9S674C3_nt3v80Ev");}
void  S674C3_nt ::v81(){vfunc_called(this, "_ZN9S674C3_nt3v81Ev");}
void  S674C3_nt ::v82(){vfunc_called(this, "_ZN9S674C3_nt3v82Ev");}
void  S674C3_nt ::v83(){vfunc_called(this, "_ZN9S674C3_nt3v83Ev");}
void  S674C3_nt ::v84(){vfunc_called(this, "_ZN9S674C3_nt3v84Ev");}
void  S674C3_nt ::v85(){vfunc_called(this, "_ZN9S674C3_nt3v85Ev");}
void  S674C3_nt ::v86(){vfunc_called(this, "_ZN9S674C3_nt3v86Ev");}
void  S674C3_nt ::v87(){vfunc_called(this, "_ZN9S674C3_nt3v87Ev");}
void  S674C3_nt ::v88(){vfunc_called(this, "_ZN9S674C3_nt3v88Ev");}
void  S674C3_nt ::v89(){vfunc_called(this, "_ZN9S674C3_nt3v89Ev");}
void  S674C3_nt ::v90(){vfunc_called(this, "_ZN9S674C3_nt3v90Ev");}
void  S674C3_nt ::v91(){vfunc_called(this, "_ZN9S674C3_nt3v91Ev");}
void  S674C3_nt ::v92(){vfunc_called(this, "_ZN9S674C3_nt3v92Ev");}
void  S674C3_nt ::v93(){vfunc_called(this, "_ZN9S674C3_nt3v93Ev");}
void  S674C3_nt ::v94(){vfunc_called(this, "_ZN9S674C3_nt3v94Ev");}
void  S674C3_nt ::v95(){vfunc_called(this, "_ZN9S674C3_nt3v95Ev");}
void  S674C3_nt ::v96(){vfunc_called(this, "_ZN9S674C3_nt3v96Ev");}
void  S674C3_nt ::v97(){vfunc_called(this, "_ZN9S674C3_nt3v97Ev");}
void  S674C3_nt ::v98(){vfunc_called(this, "_ZN9S674C3_nt3v98Ev");}
void  S674C3_nt ::v99(){vfunc_called(this, "_ZN9S674C3_nt3v99Ev");}
void  S674C3_nt ::v100(){vfunc_called(this, "_ZN9S674C3_nt4v100Ev");}
void  S674C3_nt ::v101(){vfunc_called(this, "_ZN9S674C3_nt4v101Ev");}
void  S674C3_nt ::v102(){vfunc_called(this, "_ZN9S674C3_nt4v102Ev");}
void  S674C3_nt ::v103(){vfunc_called(this, "_ZN9S674C3_nt4v103Ev");}
void  S674C3_nt ::v104(){vfunc_called(this, "_ZN9S674C3_nt4v104Ev");}
void  S674C3_nt ::v105(){vfunc_called(this, "_ZN9S674C3_nt4v105Ev");}
void  S674C3_nt ::v106(){vfunc_called(this, "_ZN9S674C3_nt4v106Ev");}
void  S674C3_nt ::v107(){vfunc_called(this, "_ZN9S674C3_nt4v107Ev");}
void  S674C3_nt ::v108(){vfunc_called(this, "_ZN9S674C3_nt4v108Ev");}
void  S674C3_nt ::v109(){vfunc_called(this, "_ZN9S674C3_nt4v109Ev");}
void  S674C3_nt ::v110(){vfunc_called(this, "_ZN9S674C3_nt4v110Ev");}
void  S674C3_nt ::v111(){vfunc_called(this, "_ZN9S674C3_nt4v111Ev");}
void  S674C3_nt ::v112(){vfunc_called(this, "_ZN9S674C3_nt4v112Ev");}
void  S674C3_nt ::v113(){vfunc_called(this, "_ZN9S674C3_nt4v113Ev");}
void  S674C3_nt ::v114(){vfunc_called(this, "_ZN9S674C3_nt4v114Ev");}
void  S674C3_nt ::v115(){vfunc_called(this, "_ZN9S674C3_nt4v115Ev");}
void  S674C3_nt ::v116(){vfunc_called(this, "_ZN9S674C3_nt4v116Ev");}
void  S674C3_nt ::v117(){vfunc_called(this, "_ZN9S674C3_nt4v117Ev");}
void  S674C3_nt ::v118(){vfunc_called(this, "_ZN9S674C3_nt4v118Ev");}
void  S674C3_nt ::v119(){vfunc_called(this, "_ZN9S674C3_nt4v119Ev");}
void  S674C3_nt ::v120(){vfunc_called(this, "_ZN9S674C3_nt4v120Ev");}
void  S674C3_nt ::v121(){vfunc_called(this, "_ZN9S674C3_nt4v121Ev");}
void  S674C3_nt ::v122(){vfunc_called(this, "_ZN9S674C3_nt4v122Ev");}
void  S674C3_nt ::v123(){vfunc_called(this, "_ZN9S674C3_nt4v123Ev");}
void  S674C3_nt ::v124(){vfunc_called(this, "_ZN9S674C3_nt4v124Ev");}
void  S674C3_nt ::v125(){vfunc_called(this, "_ZN9S674C3_nt4v125Ev");}
void  S674C3_nt ::v126(){vfunc_called(this, "_ZN9S674C3_nt4v126Ev");}
void  S674C3_nt ::v127(){vfunc_called(this, "_ZN9S674C3_nt4v127Ev");}
void  S674C3_nt ::v128(){vfunc_called(this, "_ZN9S674C3_nt4v128Ev");}
void  S674C3_nt ::v129(){vfunc_called(this, "_ZN9S674C3_nt4v129Ev");}
void  S674C3_nt ::v130(){vfunc_called(this, "_ZN9S674C3_nt4v130Ev");}
void  S674C3_nt ::v131(){vfunc_called(this, "_ZN9S674C3_nt4v131Ev");}
void  S674C3_nt ::v132(){vfunc_called(this, "_ZN9S674C3_nt4v132Ev");}
void  S674C3_nt ::v133(){vfunc_called(this, "_ZN9S674C3_nt4v133Ev");}
void  S674C3_nt ::v134(){vfunc_called(this, "_ZN9S674C3_nt4v134Ev");}
void  S674C3_nt ::v135(){vfunc_called(this, "_ZN9S674C3_nt4v135Ev");}
void  S674C3_nt ::v136(){vfunc_called(this, "_ZN9S674C3_nt4v136Ev");}
void  S674C3_nt ::v137(){vfunc_called(this, "_ZN9S674C3_nt4v137Ev");}
void  S674C3_nt ::v138(){vfunc_called(this, "_ZN9S674C3_nt4v138Ev");}
void  S674C3_nt ::v139(){vfunc_called(this, "_ZN9S674C3_nt4v139Ev");}
void  S674C3_nt ::v140(){vfunc_called(this, "_ZN9S674C3_nt4v140Ev");}
void  S674C3_nt ::v141(){vfunc_called(this, "_ZN9S674C3_nt4v141Ev");}
void  S674C3_nt ::v142(){vfunc_called(this, "_ZN9S674C3_nt4v142Ev");}
void  S674C3_nt ::v143(){vfunc_called(this, "_ZN9S674C3_nt4v143Ev");}
void  S674C3_nt ::v144(){vfunc_called(this, "_ZN9S674C3_nt4v144Ev");}
void  S674C3_nt ::v145(){vfunc_called(this, "_ZN9S674C3_nt4v145Ev");}
void  S674C3_nt ::v146(){vfunc_called(this, "_ZN9S674C3_nt4v146Ev");}
void  S674C3_nt ::v147(){vfunc_called(this, "_ZN9S674C3_nt4v147Ev");}
S674C3_nt ::S674C3_nt(){ note_ctor("S674C3_nt", this);} // tgen

//skip512 S674C3_nt

#else // __cplusplus

extern void _ZN9S674C3_ntC1Ev();
extern void _ZN9S674C3_ntD1Ev();
Name_Map name_map_S674C3_nt[] = {
  NSPAIR(_ZN9S674C3_ntC1Ev),
  NSPAIR(_ZN9S674C3_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S674C5_nt;
extern VTBL_ENTRY _ZTI9S674C5_nt[];
extern  VTBL_ENTRY _ZTV9S674C5_nt[];
extern Class_Descriptor cd_S674C4_nt;
extern VTBL_ENTRY _ZTI9S674C4_nt[];
extern  VTBL_ENTRY _ZTV9S674C4_nt[];
static Base_Class bases_S674C3_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S674C5_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_S674C4_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 _ZTI9S674C3_nt[];
extern void _ZN9S674C3_ntD1Ev();
extern void _ZN9S674C3_ntD0Ev();
extern void _ZN9S674C5_nt2v6Ev();
extern void _ZN9S674C5_nt2v7Ev();
extern void _ZN9S674C5_nt2v8Ev();
extern void _ZN9S674C5_nt2v9Ev();
extern void _ZN9S674C5_nt3v10Ev();
extern void _ZN9S674C5_nt3v11Ev();
extern void _ZN9S674C5_nt3v12Ev();
extern void _ZN9S674C5_nt3v13Ev();
extern void _ZN9S674C5_nt3v14Ev();
extern void _ZN9S674C5_nt3v15Ev();
extern void _ZN9S674C5_nt3v16Ev();
extern void _ZN9S674C5_nt3v17Ev();
extern void _ZN9S674C5_nt3v18Ev();
extern void _ZN9S674C5_nt3v19Ev();
extern void _ZN9S674C5_nt3v20Ev();
extern void _ZN9S674C5_nt3v21Ev();
extern void _ZN9S674C5_nt3v22Ev();
extern void _ZN9S674C5_nt3v23Ev();
extern void _ZN9S674C5_nt3v24Ev();
extern void _ZN9S674C5_nt3v25Ev();
extern void _ZN9S674C5_nt3v26Ev();
extern void _ZN9S674C5_nt3v27Ev();
extern void _ZN9S674C5_nt3v28Ev();
extern void _ZN9S674C5_nt3v29Ev();
extern void _ZN9S674C5_nt3v30Ev();
extern void _ZN9S674C5_nt3v31Ev();
extern void _ZN9S674C5_nt3v32Ev();
extern void _ZN9S674C5_nt3v33Ev();
extern void _ZN9S674C5_nt3v34Ev();
extern void _ZN9S674C5_nt3v35Ev();
extern void _ZN9S674C5_nt3v36Ev();
extern void _ZN9S674C5_nt3v37Ev();
extern void _ZN9S674C5_nt3v38Ev();
extern void _ZN9S674C5_nt3v39Ev();
extern void _ZN9S674C5_nt3v40Ev();
extern void _ZN9S674C5_nt3v41Ev();
extern void _ZN9S674C5_nt3v42Ev();
extern void _ZN9S674C5_nt3v43Ev();
extern void _ZN9S674C5_nt3v44Ev();
extern void _ZN9S674C5_nt3v45Ev();
extern void _ZN9S674C5_nt3v46Ev();
extern void _ZN9S674C5_nt3v47Ev();
extern void _ZN9S674C5_nt3v48Ev();
extern void _ZN9S674C5_nt3v49Ev();
extern void _ZN9S674C5_nt3v50Ev();
extern void _ZN9S674C5_nt3v51Ev();
extern void _ZN9S674C5_nt3v52Ev();
extern void _ZN9S674C5_nt3v53Ev();
extern void _ZN9S674C5_nt3v54Ev();
extern void _ZN9S674C5_nt3v55Ev();
extern void _ZN9S674C5_nt3v56Ev();
extern void _ZN9S674C5_nt3v57Ev();
extern void _ZN9S674C5_nt3v58Ev();
extern void _ZN9S674C5_nt3v59Ev();
extern void _ZN9S674C5_nt3v60Ev();
extern void _ZN9S674C5_nt3v61Ev();
extern void _ZN9S674C5_nt3v62Ev();
extern void _ZN9S674C5_nt3v63Ev();
extern void _ZN9S674C5_nt3v64Ev();
extern void _ZN9S674C5_nt3v65Ev();
extern void _ZN9S674C5_nt3v66Ev();
extern void _ZN9S674C5_nt3v67Ev();
extern void _ZN9S674C5_nt3v68Ev();
extern void _ZN9S674C5_nt3v69Ev();
extern void _ZN9S674C4_nt3v70Ev();
extern void _ZN9S674C4_nt3v71Ev();
extern void _ZN9S674C3_nt3v72Ev();
extern void _ZN9S674C3_nt3v73Ev();
extern void _ZN9S674C3_nt3v74Ev();
extern void _ZN9S674C3_nt3v75Ev();
extern void _ZN9S674C3_nt3v76Ev();
extern void _ZN9S674C3_nt3v77Ev();
extern void _ZN9S674C3_nt3v78Ev();
extern void _ZN9S674C3_nt3v79Ev();
extern void _ZN9S674C3_nt3v80Ev();
extern void _ZN9S674C3_nt3v81Ev();
extern void _ZN9S674C3_nt3v82Ev();
extern void _ZN9S674C3_nt3v83Ev();
extern void _ZN9S674C3_nt3v84Ev();
extern void _ZN9S674C3_nt3v85Ev();
extern void _ZN9S674C3_nt3v86Ev();
extern void _ZN9S674C3_nt3v87Ev();
extern void _ZN9S674C3_nt3v88Ev();
extern void _ZN9S674C3_nt3v89Ev();
extern void _ZN9S674C3_nt3v90Ev();
extern void _ZN9S674C3_nt3v91Ev();
extern void _ZN9S674C3_nt3v92Ev();
extern void _ZN9S674C3_nt3v93Ev();
extern void _ZN9S674C3_nt3v94Ev();
extern void _ZN9S674C3_nt3v95Ev();
extern void _ZN9S674C3_nt3v96Ev();
extern void _ZN9S674C3_nt3v97Ev();
extern void _ZN9S674C3_nt3v98Ev();
extern void _ZN9S674C3_nt3v99Ev();
extern void _ZN9S674C3_nt4v100Ev();
extern void _ZN9S674C3_nt4v101Ev();
extern void _ZN9S674C3_nt4v102Ev();
extern void _ZN9S674C3_nt4v103Ev();
extern void _ZN9S674C3_nt4v104Ev();
extern void _ZN9S674C3_nt4v105Ev();
extern void _ZN9S674C3_nt4v106Ev();
extern void _ZN9S674C3_nt4v107Ev();
extern void _ZN9S674C3_nt4v108Ev();
extern void _ZN9S674C3_nt4v109Ev();
extern void _ZN9S674C3_nt4v110Ev();
extern void _ZN9S674C3_nt4v111Ev();
extern void _ZN9S674C3_nt4v112Ev();
extern void _ZN9S674C3_nt4v113Ev();
extern void _ZN9S674C3_nt4v114Ev();
extern void _ZN9S674C3_nt4v115Ev();
extern void _ZN9S674C3_nt4v116Ev();
extern void _ZN9S674C3_nt4v117Ev();
extern void _ZN9S674C3_nt4v118Ev();
extern void _ZN9S674C3_nt4v119Ev();
extern void _ZN9S674C3_nt4v120Ev();
extern void _ZN9S674C3_nt4v121Ev();
extern void _ZN9S674C3_nt4v122Ev();
extern void _ZN9S674C3_nt4v123Ev();
extern void _ZN9S674C3_nt4v124Ev();
extern void _ZN9S674C3_nt4v125Ev();
extern void _ZN9S674C3_nt4v126Ev();
extern void _ZN9S674C3_nt4v127Ev();
extern void _ZN9S674C3_nt4v128Ev();
extern void _ZN9S674C3_nt4v129Ev();
extern void _ZN9S674C3_nt4v130Ev();
extern void _ZN9S674C3_nt4v131Ev();
extern void _ZN9S674C3_nt4v132Ev();
extern void _ZN9S674C3_nt4v133Ev();
extern void _ZN9S674C3_nt4v134Ev();
extern void _ZN9S674C3_nt4v135Ev();
extern void _ZN9S674C3_nt4v136Ev();
extern void _ZN9S674C3_nt4v137Ev();
extern void _ZN9S674C3_nt4v138Ev();
extern void _ZN9S674C3_nt4v139Ev();
extern void _ZN9S674C3_nt4v140Ev();
extern void _ZN9S674C3_nt4v141Ev();
extern void _ZN9S674C3_nt4v142Ev();
extern void _ZN9S674C3_nt4v143Ev();
extern void _ZN9S674C3_nt4v144Ev();
extern void _ZN9S674C3_nt4v145Ev();
extern void _ZN9S674C3_nt4v146Ev();
extern void _ZN9S674C3_nt4v147Ev();
static  VTBL_ENTRY vtc_S674C3_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S674C3_nt[0]),
  (VTBL_ENTRY)&_ZN9S674C3_ntD1Ev,
  (VTBL_ENTRY)&_ZN9S674C3_ntD0Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt2v6Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt2v7Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt2v9Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v10Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v11Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v12Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v13Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v14Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v15Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v16Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v17Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v18Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v19Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v20Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v21Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v22Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v23Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v24Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v25Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v26Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v27Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v28Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v29Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v30Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v31Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v32Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v33Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v34Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v35Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v36Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v37Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v38Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v39Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v40Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v41Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v42Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v43Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v44Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v45Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v46Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v47Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v48Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v49Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v50Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v51Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v52Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v53Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v54Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v55Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v56Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v57Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v58Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v59Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v60Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v61Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v62Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v63Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v64Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v65Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v66Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v67Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v68Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v69Ev,
  (VTBL_ENTRY)&_ZN9S674C4_nt3v70Ev,
  (VTBL_ENTRY)&_ZN9S674C4_nt3v71Ev,
  (VTBL_ENTRY)&_ZN9S674C3_nt3v72Ev,
  (VTBL_ENTRY)&_ZN9S674C3_nt3v73Ev,
  (VTBL_ENTRY)&_ZN9S674C3_nt3v74Ev,
  (VTBL_ENTRY)&_ZN9S674C3_nt3v75Ev,
  (VTBL_ENTRY)&_ZN9S674C3_nt3v76Ev,
  (VTBL_ENTRY)&_ZN9S674C3_nt3v77Ev,
  (VTBL_ENTRY)&_ZN9S674C3_nt3v78Ev,
  (VTBL_ENTRY)&_ZN9S674C3_nt3v79Ev,
  (VTBL_ENTRY)&_ZN9S674C3_nt3v80Ev,
  (VTBL_ENTRY)&_ZN9S674C3_nt3v81Ev,
  (VTBL_ENTRY)&_ZN9S674C3_nt3v82Ev,
  (VTBL_ENTRY)&_ZN9S674C3_nt3v83Ev,
  (VTBL_ENTRY)&_ZN9S674C3_nt3v84Ev,
  (VTBL_ENTRY)&_ZN9S674C3_nt3v85Ev,
  (VTBL_ENTRY)&_ZN9S674C3_nt3v86Ev,
  (VTBL_ENTRY)&_ZN9S674C3_nt3v87Ev,
  (VTBL_ENTRY)&_ZN9S674C3_nt3v88Ev,
  (VTBL_ENTRY)&_ZN9S674C3_nt3v89Ev,
  (VTBL_ENTRY)&_ZN9S674C3_nt3v90Ev,
  (VTBL_ENTRY)&_ZN9S674C3_nt3v91Ev,
  (VTBL_ENTRY)&_ZN9S674C3_nt3v92Ev,
  (VTBL_ENTRY)&_ZN9S674C3_nt3v93Ev,
  (VTBL_ENTRY)&_ZN9S674C3_nt3v94Ev,
  (VTBL_ENTRY)&_ZN9S674C3_nt3v95Ev,
  (VTBL_ENTRY)&_ZN9S674C3_nt3v96Ev,
  (VTBL_ENTRY)&_ZN9S674C3_nt3v97Ev,
  (VTBL_ENTRY)&_ZN9S674C3_nt3v98Ev,
  (VTBL_ENTRY)&_ZN9S674C3_nt3v99Ev,
  (VTBL_ENTRY)&_ZN9S674C3_nt4v100Ev,
  (VTBL_ENTRY)&_ZN9S674C3_nt4v101Ev,
  (VTBL_ENTRY)&_ZN9S674C3_nt4v102Ev,
  (VTBL_ENTRY)&_ZN9S674C3_nt4v103Ev,
  (VTBL_ENTRY)&_ZN9S674C3_nt4v104Ev,
  (VTBL_ENTRY)&_ZN9S674C3_nt4v105Ev,
  (VTBL_ENTRY)&_ZN9S674C3_nt4v106Ev,
  (VTBL_ENTRY)&_ZN9S674C3_nt4v107Ev,
  (VTBL_ENTRY)&_ZN9S674C3_nt4v108Ev,
  (VTBL_ENTRY)&_ZN9S674C3_nt4v109Ev,
  (VTBL_ENTRY)&_ZN9S674C3_nt4v110Ev,
  (VTBL_ENTRY)&_ZN9S674C3_nt4v111Ev,
  (VTBL_ENTRY)&_ZN9S674C3_nt4v112Ev,
  (VTBL_ENTRY)&_ZN9S674C3_nt4v113Ev,
  (VTBL_ENTRY)&_ZN9S674C3_nt4v114Ev,
  (VTBL_ENTRY)&_ZN9S674C3_nt4v115Ev,
  (VTBL_ENTRY)&_ZN9S674C3_nt4v116Ev,
  (VTBL_ENTRY)&_ZN9S674C3_nt4v117Ev,
  (VTBL_ENTRY)&_ZN9S674C3_nt4v118Ev,
  (VTBL_ENTRY)&_ZN9S674C3_nt4v119Ev,
  (VTBL_ENTRY)&_ZN9S674C3_nt4v120Ev,
  (VTBL_ENTRY)&_ZN9S674C3_nt4v121Ev,
  (VTBL_ENTRY)&_ZN9S674C3_nt4v122Ev,
  (VTBL_ENTRY)&_ZN9S674C3_nt4v123Ev,
  (VTBL_ENTRY)&_ZN9S674C3_nt4v124Ev,
  (VTBL_ENTRY)&_ZN9S674C3_nt4v125Ev,
  (VTBL_ENTRY)&_ZN9S674C3_nt4v126Ev,
  (VTBL_ENTRY)&_ZN9S674C3_nt4v127Ev,
  (VTBL_ENTRY)&_ZN9S674C3_nt4v128Ev,
  (VTBL_ENTRY)&_ZN9S674C3_nt4v129Ev,
  (VTBL_ENTRY)&_ZN9S674C3_nt4v130Ev,
  (VTBL_ENTRY)&_ZN9S674C3_nt4v131Ev,
  (VTBL_ENTRY)&_ZN9S674C3_nt4v132Ev,
  (VTBL_ENTRY)&_ZN9S674C3_nt4v133Ev,
  (VTBL_ENTRY)&_ZN9S674C3_nt4v134Ev,
  (VTBL_ENTRY)&_ZN9S674C3_nt4v135Ev,
  (VTBL_ENTRY)&_ZN9S674C3_nt4v136Ev,
  (VTBL_ENTRY)&_ZN9S674C3_nt4v137Ev,
  (VTBL_ENTRY)&_ZN9S674C3_nt4v138Ev,
  (VTBL_ENTRY)&_ZN9S674C3_nt4v139Ev,
  (VTBL_ENTRY)&_ZN9S674C3_nt4v140Ev,
  (VTBL_ENTRY)&_ZN9S674C3_nt4v141Ev,
  (VTBL_ENTRY)&_ZN9S674C3_nt4v142Ev,
  (VTBL_ENTRY)&_ZN9S674C3_nt4v143Ev,
  (VTBL_ENTRY)&_ZN9S674C3_nt4v144Ev,
  (VTBL_ENTRY)&_ZN9S674C3_nt4v145Ev,
  (VTBL_ENTRY)&_ZN9S674C3_nt4v146Ev,
  (VTBL_ENTRY)&_ZN9S674C3_nt4v147Ev,
};
extern VTBL_ENTRY _ZTI9S674C3_nt[];
VTBL_ENTRY *P__ZTI9S674C3_nt = _ZTI9S674C3_nt; 
extern  VTBL_ENTRY _ZTV9S674C3_nt[];
Class_Descriptor cd_S674C3_nt = {  "S674C3_nt", // class name
  bases_S674C3_nt, 2,
  &(vtc_S674C3_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(464,352), // object size
  NSPAIRA(_ZTI9S674C3_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV9S674C3_nt),146, //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  S674C21_nt  {
  int s674c21f0[4];
  void  mf674c21(); // _ZN10S674C21_nt8mf674c21Ev
};
//SIG(-1 S674C21_nt) C1{ m Fi[4]}


void  S674C21_nt ::mf674c21(){}

//skip512 S674C21_nt

#else // __cplusplus

Class_Descriptor cd_S674C21_nt = {  "S674C21_nt", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  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
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S674C20_nt  : S674C21_nt {
};
//SIG(-1 S674C20_nt) C1{ BC2{ m Fi[4]}}



//skip512 S674C20_nt

#else // __cplusplus

extern Class_Descriptor cd_S674C21_nt;
static Base_Class bases_S674C20_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S674C21_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  S674C22_nt  {
  ::S674C6_nt s674c22f0;
  void *s674c22f1;
  ::S674C20_nt s674c22f2;
  void *s674c22f3;
  void  mf674c22(); // _ZN10S674C22_nt8mf674c22Ev
};
//SIG(-1 S674C22_nt) C1{ m FC2{ m Fi[2]} Fp FC3{ BC4{ m Fi[4]}} Fp}


void  S674C22_nt ::mf674c22(){}

//skip512 S674C22_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S674C24_nt  {
  void *s674c24f0[8];
  char s674c24f1[4];
  void  mf674c24(); // _ZN10S674C24_nt8mf674c24Ev
};
//SIG(-1 S674C24_nt) C1{ m Fp[8] Fc[4]}


void  S674C24_nt ::mf674c24(){}

//skip512 S674C24_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S674C26_nt  {
  int s674c26f0[4];
  char s674c26f1[4];
  void  mf674c26(); // _ZN10S674C26_nt8mf674c26Ev
};
//SIG(-1 S674C26_nt) C1{ m Fi[4] Fc[4]}


void  S674C26_nt ::mf674c26(){}

//skip512 S674C26_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S674C25_nt  {
  void *s674c25f0[5];
  ::S674C26_nt s674c25f1;
  unsigned int s674c25f2:1;
  unsigned int s674c25f3:1;
  int s674c25f4;
  char s674c25f5[8];
  void  mf674c25(); // _ZN10S674C25_nt8mf674c25Ev
};
//SIG(-1 S674C25_nt) C1{ m Fp[5] FC2{ m Fi[4] Fc[4]} Fi:1 Fi:1 Fi Fc[8]}


void  S674C25_nt ::mf674c25(){}

//skip512 S674C25_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S674C29_nt  {
  int s674c29f0[3];
  void  mf674c29(); // _ZN10S674C29_nt8mf674c29Ev
};
//SIG(-1 S674C29_nt) C1{ m Fi[3]}


void  S674C29_nt ::mf674c29(){}

//skip512 S674C29_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S674C30_nt  {
  void  mf674c30(); // _ZN10S674C30_nt8mf674c30Ev
};
//SIG(-1 S674C30_nt) C1{ m}


void  S674C30_nt ::mf674c30(){}

//skip512 S674C30_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S674C32_nt  {
  int s674c32f0[2];
  char s674c32f1[2];
  void  mf674c32(); // _ZN10S674C32_nt8mf674c32Ev
};
//SIG(-1 S674C32_nt) C1{ m Fi[2] Fc[2]}


void  S674C32_nt ::mf674c32(){}

//skip512 S674C32_nt

#else // __cplusplus

Class_Descriptor cd_S674C32_nt = {  "S674C32_nt", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  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  S674C31_nt  : S674C32_nt {
  int s674c31f0;
};
//SIG(-1 S674C31_nt) C1{ BC2{ m Fi[2] Fc[2]} Fi}



//skip512 S674C31_nt

#else // __cplusplus

extern Class_Descriptor cd_S674C32_nt;
static Base_Class bases_S674C31_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S674C32_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  S674C28_nt  {
  ::S674C29_nt s674c28f0;
  ::S674C30_nt s674c28f1;
  ::S674C31_nt s674c28f2;
  char s674c28f3;
  void  mf674c28(); // _ZN10S674C28_nt8mf674c28Ev
};
//SIG(-1 S674C28_nt) C1{ m FC2{ m Fi[3]} FC3{ m} FC4{ BC5{ m Fi[2] Fc[2]} Fi} Fc}


void  S674C28_nt ::mf674c28(){}

//skip512 S674C28_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S674C36_nt  {
  void *s674c36f0[2];
  void  mf674c36(); // _ZN10S674C36_nt8mf674c36Ev
};
//SIG(-1 S674C36_nt) C1{ m Fp[2]}


void  S674C36_nt ::mf674c36(){}

//skip512 S674C36_nt

#else // __cplusplus

Class_Descriptor cd_S674C36_nt = {  "S674C36_nt", // 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  S674C35_nt  : S674C36_nt {
};
//SIG(-1 S674C35_nt) C1{ BC2{ m Fp[2]}}



//skip512 S674C35_nt

#else // __cplusplus

extern Class_Descriptor cd_S674C36_nt;
static Base_Class bases_S674C35_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S674C36_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  S674C39  : S674C10_nt {
};
//SIG(-1 S674C39) C1{ BC2{ m Fp Fi[2]}}



static void Test_S674C39()
{
  extern Class_Descriptor cd_S674C39;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S674C39, buf);
    S674C39 &lv = *(new (buf) S674C39());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S674C39)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S674C39)");
    check_base_class_offset(lv, (S674C10_nt*), 0, "S674C39");
    test_class_info(&lv, &cd_S674C39);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS674C39(Test_S674C39, "S674C39", ABISELECT(16,12));

#else // __cplusplus

extern Class_Descriptor cd_S674C10_nt;
static Base_Class bases_S674C39[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S674C10_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_S674C39 = {  "S674C39", // class name
  bases_S674C39, 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  S674C38  : S674C39 {
};
//SIG(-1 S674C38) C1{ BC2{ BC3{ m Fp Fi[2]}}}



static void Test_S674C38()
{
  extern Class_Descriptor cd_S674C38;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S674C38, buf);
    S674C38 &lv = *(new (buf) S674C38());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S674C38)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S674C38)");
    check_base_class_offset(lv, (S674C10_nt*)(S674C39*), 0, "S674C38");
    check_base_class_offset(lv, (S674C39*), 0, "S674C38");
    test_class_info(&lv, &cd_S674C38);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS674C38(Test_S674C38, "S674C38", ABISELECT(16,12));

#else // __cplusplus

extern Class_Descriptor cd_S674C10_nt;
extern Class_Descriptor cd_S674C39;
static Base_Class bases_S674C38[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S674C10_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_S674C39,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S674C38 = {  "S674C38", // class name
  bases_S674C38, 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  S674C37_nt  : S674C38 {
};
//SIG(-1 S674C37_nt) C1{ BC2{ BC3{ BC4{ m Fp Fi[2]}}}}



//skip512 S674C37_nt

#else // __cplusplus

extern Class_Descriptor cd_S674C10_nt;
extern Class_Descriptor cd_S674C39;
extern Class_Descriptor cd_S674C38;
static Base_Class bases_S674C37_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S674C10_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_S674C39,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S674C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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  S674C34_nt  {
  ::S674C35_nt s674c34f0;
  char s674c34f1;
  ::S674C37_nt s674c34f2;
  int s674c34f3;
  ::S674C6_nt s674c34f4;
  ::S674C6_nt s674c34f5;
  void *s674c34f6;
  void  mf674c34(); // _ZN10S674C34_nt8mf674c34Ev
};
//SIG(-1 S674C34_nt) C1{ m FC2{ BC3{ m Fp[2]}} Fc FC4{ BC5{ BC6{ BC7{ m Fp Fi[2]}}}} Fi FC8{ m Fi[2]} FC8 Fp}


void  S674C34_nt ::mf674c34(){}

//skip512 S674C34_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

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



static void Test_S674C43()
{
  extern Class_Descriptor cd_S674C43;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S674C43, buf);
    S674C43 &lv = *(new (buf) S674C43());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S674C43)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S674C43)");
    check_base_class_offset(lv, (S674C10_nt*), 0, "S674C43");
    test_class_info(&lv, &cd_S674C43);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS674C43(Test_S674C43, "S674C43", ABISELECT(16,12));

#else // __cplusplus

extern Class_Descriptor cd_S674C10_nt;
static Base_Class bases_S674C43[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S674C10_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_S674C43 = {  "S674C43", // class name
  bases_S674C43, 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  S674C42  : S674C43 {
};
//SIG(-1 S674C42) C1{ BC2{ BC3{ m Fp Fi[2]}}}



static void Test_S674C42()
{
  extern Class_Descriptor cd_S674C42;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S674C42, buf);
    S674C42 &lv = *(new (buf) S674C42());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S674C42)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S674C42)");
    check_base_class_offset(lv, (S674C10_nt*)(S674C43*), 0, "S674C42");
    check_base_class_offset(lv, (S674C43*), 0, "S674C42");
    test_class_info(&lv, &cd_S674C42);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS674C42(Test_S674C42, "S674C42", ABISELECT(16,12));

#else // __cplusplus

extern Class_Descriptor cd_S674C10_nt;
extern Class_Descriptor cd_S674C43;
static Base_Class bases_S674C42[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S674C10_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_S674C43,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S674C42 = {  "S674C42", // class name
  bases_S674C42, 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  S674C2_nt  : S674C3_nt {
  ::S674C20_nt s674c2f0;
  ::S674C6_nt s674c2f1;
  void *s674c2f2[2];
  ::S674C22_nt s674c2f3;
  ::S674C24_nt s674c2f4;
  int s674c2f5;
  ::S674C25_nt s674c2f6;
  int s674c2f7[4];
  ::S674C6_nt s674c2f8[4];
  ::S674C28_nt s674c2f9;
  ::S674C29_nt s674c2f10;
  int s674c2f11;
  ::S674C34_nt s674c2f12;
  ::S674C34_nt s674c2f13;
  void *s674c2f14;
  ::S674C29_nt s674c2f15;
  ::S674C17 s674c2f16;
  ::S674C42 s674c2f17;
  unsigned int s674c2f18:1;
  unsigned int s674c2f19:1;
  unsigned int s674c2f20:1;
  ::S674C30_nt s674c2f21;
  ::S674C19_nt s674c2f22;
  ::S674C19_nt s674c2f23;
  ::S674C19_nt s674c2f24;
  ::S674C19_nt s674c2f25;
  ::S674C19_nt s674c2f26;
  ::S674C19_nt s674c2f27;
  ::S674C19_nt s674c2f28;
  ::S674C19_nt s674c2f29;
  ::S674C19_nt s674c2f30;
  ::S674C19_nt s674c2f31;
  ::S674C19_nt s674c2f32;
  ::S674C19_nt s674c2f33;
  ::S674C19_nt s674c2f34;
  virtual  ~S674C2_nt(); // _ZN9S674C2_ntD1Ev
  virtual void  v148(); // _ZN9S674C2_nt4v148Ev
  virtual void  v149(); // _ZN9S674C2_nt4v149Ev
  virtual void  v150(); // _ZN9S674C2_nt4v150Ev
  virtual void  v151(); // _ZN9S674C2_nt4v151Ev
  virtual void  v152(); // _ZN9S674C2_nt4v152Ev
  virtual void  v153(); // _ZN9S674C2_nt4v153Ev
  virtual void  v154(); // _ZN9S674C2_nt4v154Ev
  virtual void  v155(); // _ZN9S674C2_nt4v155Ev
  virtual void  v156(); // _ZN9S674C2_nt4v156Ev
  virtual void  v157(); // _ZN9S674C2_nt4v157Ev
  virtual void  v158(); // _ZN9S674C2_nt4v158Ev
  virtual void  v159(); // _ZN9S674C2_nt4v159Ev
  virtual void  v160(); // _ZN9S674C2_nt4v160Ev
  virtual void  v161(); // _ZN9S674C2_nt4v161Ev
  virtual void  v162(); // _ZN9S674C2_nt4v162Ev
  virtual void  v163(); // _ZN9S674C2_nt4v163Ev
  virtual void  v164(); // _ZN9S674C2_nt4v164Ev
  virtual void  v165(); // _ZN9S674C2_nt4v165Ev
  virtual void  v166(); // _ZN9S674C2_nt4v166Ev
  virtual void  v167(); // _ZN9S674C2_nt4v167Ev
  virtual void  v168(); // _ZN9S674C2_nt4v168Ev
  virtual void  v169(); // _ZN9S674C2_nt4v169Ev
  virtual void  v170(); // _ZN9S674C2_nt4v170Ev
  virtual void  v171(); // _ZN9S674C2_nt4v171Ev
  virtual void  v172(); // _ZN9S674C2_nt4v172Ev
  virtual void  v173(); // _ZN9S674C2_nt4v173Ev
  virtual void  v174(); // _ZN9S674C2_nt4v174Ev
  virtual void  v175(); // _ZN9S674C2_nt4v175Ev
  virtual void  v176(); // _ZN9S674C2_nt4v176Ev
  virtual void  v177(); // _ZN9S674C2_nt4v177Ev
  virtual void  v178(); // _ZN9S674C2_nt4v178Ev
  virtual void  v179(); // _ZN9S674C2_nt4v179Ev
  virtual void  v180(); // _ZN9S674C2_nt4v180Ev
  virtual void  v181(); // _ZN9S674C2_nt4v181Ev
  virtual void  v182(); // _ZN9S674C2_nt4v182Ev
  virtual void  v183(); // _ZN9S674C2_nt4v183Ev
  virtual void  v184(); // _ZN9S674C2_nt4v184Ev
  virtual void  v185(); // _ZN9S674C2_nt4v185Ev
  virtual void  v186(); // _ZN9S674C2_nt4v186Ev
  virtual void  v187(); // _ZN9S674C2_nt4v187Ev
  virtual void  v188(); // _ZN9S674C2_nt4v188Ev
  virtual void  v189(); // _ZN9S674C2_nt4v189Ev
  virtual void  v190(); // _ZN9S674C2_nt4v190Ev
  virtual void  v191(); // _ZN9S674C2_nt4v191Ev
  virtual void  v192(); // _ZN9S674C2_nt4v192Ev
  virtual void  v193(); // _ZN9S674C2_nt4v193Ev
  virtual void  v194(); // _ZN9S674C2_nt4v194Ev
  virtual void  v195(); // _ZN9S674C2_nt4v195Ev
  virtual void  v196(); // _ZN9S674C2_nt4v196Ev
  virtual void  v197(); // _ZN9S674C2_nt4v197Ev
  virtual void  v198(); // _ZN9S674C2_nt4v198Ev
  virtual void  v199(); // _ZN9S674C2_nt4v199Ev
  virtual void  v200(); // _ZN9S674C2_nt4v200Ev
  virtual void  v201(); // _ZN9S674C2_nt4v201Ev
  virtual void  v202(); // _ZN9S674C2_nt4v202Ev
  virtual void  v203(); // _ZN9S674C2_nt4v203Ev
  virtual void  v204(); // _ZN9S674C2_nt4v204Ev
  virtual void  v205(); // _ZN9S674C2_nt4v205Ev
  virtual void  v206(); // _ZN9S674C2_nt4v206Ev
  virtual void  v207(); // _ZN9S674C2_nt4v207Ev
  virtual void  v208(); // _ZN9S674C2_nt4v208Ev
  virtual void  v209(); // _ZN9S674C2_nt4v209Ev
  virtual void  v210(); // _ZN9S674C2_nt4v210Ev
  virtual void  v211(); // _ZN9S674C2_nt4v211Ev
  virtual void  v212(); // _ZN9S674C2_nt4v212Ev
  virtual void  v213(); // _ZN9S674C2_nt4v213Ev
  virtual void  v214(); // _ZN9S674C2_nt4v214Ev
  virtual void  v215(); // _ZN9S674C2_nt4v215Ev
  virtual void  v216(); // _ZN9S674C2_nt4v216Ev
  S674C2_nt(); // tgen
};
//SIG(-1 S674C2_nt) C1{ BC2{ BC3{ BC4{ vd 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 Fi FL Fp[4] Fi[2] Fp FC5{ m Fi[2]} Fp[2]} vd v134 v135} vd v136 v137 v138 v139 v140 v141 v142 v143 v144 v145 v146 v147 v148 v149 v150 v151 v152 v153 v154 v155 v156 v157 v158 v159 v160 v161 v162 v163 v164 v165 v166 v167 v168 v169 v170 v171 v172 v173 v174 v175 v176 v177 v178 v179 v180 v181 v182 v183 v184 v185 v186 v187 v188 v189 v190 v191 v192 v193 v194 v195 v196 v197 v198 v199 v200 v201 v202 v203 v204 v205 v206 v207 v208 v209 v210 v211 FC6{ m Fi[4] Fc[9]} Fi Fi:1 Fi:1 Fi:1 Fi:1 FC7{ BC8{ BC9{ m Fp Fi[2]}}} FC7 Fp FC10{ BC11{ BC9}} FC10 FC10 FC12{ BC13{ BC9}} Fc Fi Fp FC5 FC5 FC5 FC5 FC5 FC5 FC14{ m Fp FC5} FC14 FC14 FC14 FC14 FC14 FC14 FC14 FC14 FC14} 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 FC15{ BC16{ m Fi[4]}} FC5 Fp[2] FC17{ m FC5 Fp FC15 Fp} FC18{ m Fp[8] Fc[4]} Fi FC19{ m Fp[5] FC20{ m Fi[4] Fc[4]} Fi:1 Fi:1 Fi Fc[8]} Fi[4] FC5[4] FC21{ m FC22{ m Fi[3]} FC23{ m} FC24{ BC25{ m Fi[2] Fc[2]} Fi} Fc} FC22 Fi FC26{ m FC27{ BC28{ m Fp[2]}} Fc FC29{ BC30{ BC31{ BC9}}} Fi FC5 FC5 Fp} FC26 Fp FC22 FC12 FC32{ BC33{ BC9}} Fi:1 Fi:1 Fi:1 FC23 FC14 FC14 FC14 FC14 FC14 FC14 FC14 FC14 FC14 FC14 FC14 FC14 FC14}


 S674C2_nt ::~S674C2_nt(){ note_dtor("S674C2_nt", this);}
void  S674C2_nt ::v148(){vfunc_called(this, "_ZN9S674C2_nt4v148Ev");}
void  S674C2_nt ::v149(){vfunc_called(this, "_ZN9S674C2_nt4v149Ev");}
void  S674C2_nt ::v150(){vfunc_called(this, "_ZN9S674C2_nt4v150Ev");}
void  S674C2_nt ::v151(){vfunc_called(this, "_ZN9S674C2_nt4v151Ev");}
void  S674C2_nt ::v152(){vfunc_called(this, "_ZN9S674C2_nt4v152Ev");}
void  S674C2_nt ::v153(){vfunc_called(this, "_ZN9S674C2_nt4v153Ev");}
void  S674C2_nt ::v154(){vfunc_called(this, "_ZN9S674C2_nt4v154Ev");}
void  S674C2_nt ::v155(){vfunc_called(this, "_ZN9S674C2_nt4v155Ev");}
void  S674C2_nt ::v156(){vfunc_called(this, "_ZN9S674C2_nt4v156Ev");}
void  S674C2_nt ::v157(){vfunc_called(this, "_ZN9S674C2_nt4v157Ev");}
void  S674C2_nt ::v158(){vfunc_called(this, "_ZN9S674C2_nt4v158Ev");}
void  S674C2_nt ::v159(){vfunc_called(this, "_ZN9S674C2_nt4v159Ev");}
void  S674C2_nt ::v160(){vfunc_called(this, "_ZN9S674C2_nt4v160Ev");}
void  S674C2_nt ::v161(){vfunc_called(this, "_ZN9S674C2_nt4v161Ev");}
void  S674C2_nt ::v162(){vfunc_called(this, "_ZN9S674C2_nt4v162Ev");}
void  S674C2_nt ::v163(){vfunc_called(this, "_ZN9S674C2_nt4v163Ev");}
void  S674C2_nt ::v164(){vfunc_called(this, "_ZN9S674C2_nt4v164Ev");}
void  S674C2_nt ::v165(){vfunc_called(this, "_ZN9S674C2_nt4v165Ev");}
void  S674C2_nt ::v166(){vfunc_called(this, "_ZN9S674C2_nt4v166Ev");}
void  S674C2_nt ::v167(){vfunc_called(this, "_ZN9S674C2_nt4v167Ev");}
void  S674C2_nt ::v168(){vfunc_called(this, "_ZN9S674C2_nt4v168Ev");}
void  S674C2_nt ::v169(){vfunc_called(this, "_ZN9S674C2_nt4v169Ev");}
void  S674C2_nt ::v170(){vfunc_called(this, "_ZN9S674C2_nt4v170Ev");}
void  S674C2_nt ::v171(){vfunc_called(this, "_ZN9S674C2_nt4v171Ev");}
void  S674C2_nt ::v172(){vfunc_called(this, "_ZN9S674C2_nt4v172Ev");}
void  S674C2_nt ::v173(){vfunc_called(this, "_ZN9S674C2_nt4v173Ev");}
void  S674C2_nt ::v174(){vfunc_called(this, "_ZN9S674C2_nt4v174Ev");}
void  S674C2_nt ::v175(){vfunc_called(this, "_ZN9S674C2_nt4v175Ev");}
void  S674C2_nt ::v176(){vfunc_called(this, "_ZN9S674C2_nt4v176Ev");}
void  S674C2_nt ::v177(){vfunc_called(this, "_ZN9S674C2_nt4v177Ev");}
void  S674C2_nt ::v178(){vfunc_called(this, "_ZN9S674C2_nt4v178Ev");}
void  S674C2_nt ::v179(){vfunc_called(this, "_ZN9S674C2_nt4v179Ev");}
void  S674C2_nt ::v180(){vfunc_called(this, "_ZN9S674C2_nt4v180Ev");}
void  S674C2_nt ::v181(){vfunc_called(this, "_ZN9S674C2_nt4v181Ev");}
void  S674C2_nt ::v182(){vfunc_called(this, "_ZN9S674C2_nt4v182Ev");}
void  S674C2_nt ::v183(){vfunc_called(this, "_ZN9S674C2_nt4v183Ev");}
void  S674C2_nt ::v184(){vfunc_called(this, "_ZN9S674C2_nt4v184Ev");}
void  S674C2_nt ::v185(){vfunc_called(this, "_ZN9S674C2_nt4v185Ev");}
void  S674C2_nt ::v186(){vfunc_called(this, "_ZN9S674C2_nt4v186Ev");}
void  S674C2_nt ::v187(){vfunc_called(this, "_ZN9S674C2_nt4v187Ev");}
void  S674C2_nt ::v188(){vfunc_called(this, "_ZN9S674C2_nt4v188Ev");}
void  S674C2_nt ::v189(){vfunc_called(this, "_ZN9S674C2_nt4v189Ev");}
void  S674C2_nt ::v190(){vfunc_called(this, "_ZN9S674C2_nt4v190Ev");}
void  S674C2_nt ::v191(){vfunc_called(this, "_ZN9S674C2_nt4v191Ev");}
void  S674C2_nt ::v192(){vfunc_called(this, "_ZN9S674C2_nt4v192Ev");}
void  S674C2_nt ::v193(){vfunc_called(this, "_ZN9S674C2_nt4v193Ev");}
void  S674C2_nt ::v194(){vfunc_called(this, "_ZN9S674C2_nt4v194Ev");}
void  S674C2_nt ::v195(){vfunc_called(this, "_ZN9S674C2_nt4v195Ev");}
void  S674C2_nt ::v196(){vfunc_called(this, "_ZN9S674C2_nt4v196Ev");}
void  S674C2_nt ::v197(){vfunc_called(this, "_ZN9S674C2_nt4v197Ev");}
void  S674C2_nt ::v198(){vfunc_called(this, "_ZN9S674C2_nt4v198Ev");}
void  S674C2_nt ::v199(){vfunc_called(this, "_ZN9S674C2_nt4v199Ev");}
void  S674C2_nt ::v200(){vfunc_called(this, "_ZN9S674C2_nt4v200Ev");}
void  S674C2_nt ::v201(){vfunc_called(this, "_ZN9S674C2_nt4v201Ev");}
void  S674C2_nt ::v202(){vfunc_called(this, "_ZN9S674C2_nt4v202Ev");}
void  S674C2_nt ::v203(){vfunc_called(this, "_ZN9S674C2_nt4v203Ev");}
void  S674C2_nt ::v204(){vfunc_called(this, "_ZN9S674C2_nt4v204Ev");}
void  S674C2_nt ::v205(){vfunc_called(this, "_ZN9S674C2_nt4v205Ev");}
void  S674C2_nt ::v206(){vfunc_called(this, "_ZN9S674C2_nt4v206Ev");}
void  S674C2_nt ::v207(){vfunc_called(this, "_ZN9S674C2_nt4v207Ev");}
void  S674C2_nt ::v208(){vfunc_called(this, "_ZN9S674C2_nt4v208Ev");}
void  S674C2_nt ::v209(){vfunc_called(this, "_ZN9S674C2_nt4v209Ev");}
void  S674C2_nt ::v210(){vfunc_called(this, "_ZN9S674C2_nt4v210Ev");}
void  S674C2_nt ::v211(){vfunc_called(this, "_ZN9S674C2_nt4v211Ev");}
void  S674C2_nt ::v212(){vfunc_called(this, "_ZN9S674C2_nt4v212Ev");}
void  S674C2_nt ::v213(){vfunc_called(this, "_ZN9S674C2_nt4v213Ev");}
void  S674C2_nt ::v214(){vfunc_called(this, "_ZN9S674C2_nt4v214Ev");}
void  S674C2_nt ::v215(){vfunc_called(this, "_ZN9S674C2_nt4v215Ev");}
void  S674C2_nt ::v216(){vfunc_called(this, "_ZN9S674C2_nt4v216Ev");}
S674C2_nt ::S674C2_nt(){ note_ctor("S674C2_nt", this);} // tgen

//skip512 S674C2_nt

#else // __cplusplus

extern void _ZN9S674C2_ntC1Ev();
extern void _ZN9S674C2_ntD1Ev();
Name_Map name_map_S674C2_nt[] = {
  NSPAIR(_ZN9S674C2_ntC1Ev),
  NSPAIR(_ZN9S674C2_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S674C5_nt;
extern VTBL_ENTRY _ZTI9S674C5_nt[];
extern  VTBL_ENTRY _ZTV9S674C5_nt[];
extern Class_Descriptor cd_S674C4_nt;
extern VTBL_ENTRY _ZTI9S674C4_nt[];
extern  VTBL_ENTRY _ZTV9S674C4_nt[];
extern Class_Descriptor cd_S674C3_nt;
extern VTBL_ENTRY _ZTI9S674C3_nt[];
extern  VTBL_ENTRY _ZTV9S674C3_nt[];
static Base_Class bases_S674C2_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S674C5_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_S674C4_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_S674C3_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 _ZTI9S674C2_nt[];
extern void _ZN9S674C2_ntD1Ev();
extern void _ZN9S674C2_ntD0Ev();
extern void _ZN9S674C5_nt2v6Ev();
extern void _ZN9S674C5_nt2v7Ev();
extern void _ZN9S674C5_nt2v8Ev();
extern void _ZN9S674C5_nt2v9Ev();
extern void _ZN9S674C5_nt3v10Ev();
extern void _ZN9S674C5_nt3v11Ev();
extern void _ZN9S674C5_nt3v12Ev();
extern void _ZN9S674C5_nt3v13Ev();
extern void _ZN9S674C5_nt3v14Ev();
extern void _ZN9S674C5_nt3v15Ev();
extern void _ZN9S674C5_nt3v16Ev();
extern void _ZN9S674C5_nt3v17Ev();
extern void _ZN9S674C5_nt3v18Ev();
extern void _ZN9S674C5_nt3v19Ev();
extern void _ZN9S674C5_nt3v20Ev();
extern void _ZN9S674C5_nt3v21Ev();
extern void _ZN9S674C5_nt3v22Ev();
extern void _ZN9S674C5_nt3v23Ev();
extern void _ZN9S674C5_nt3v24Ev();
extern void _ZN9S674C5_nt3v25Ev();
extern void _ZN9S674C5_nt3v26Ev();
extern void _ZN9S674C5_nt3v27Ev();
extern void _ZN9S674C5_nt3v28Ev();
extern void _ZN9S674C5_nt3v29Ev();
extern void _ZN9S674C5_nt3v30Ev();
extern void _ZN9S674C5_nt3v31Ev();
extern void _ZN9S674C5_nt3v32Ev();
extern void _ZN9S674C5_nt3v33Ev();
extern void _ZN9S674C5_nt3v34Ev();
extern void _ZN9S674C5_nt3v35Ev();
extern void _ZN9S674C5_nt3v36Ev();
extern void _ZN9S674C5_nt3v37Ev();
extern void _ZN9S674C5_nt3v38Ev();
extern void _ZN9S674C5_nt3v39Ev();
extern void _ZN9S674C5_nt3v40Ev();
extern void _ZN9S674C5_nt3v41Ev();
extern void _ZN9S674C5_nt3v42Ev();
extern void _ZN9S674C5_nt3v43Ev();
extern void _ZN9S674C5_nt3v44Ev();
extern void _ZN9S674C5_nt3v45Ev();
extern void _ZN9S674C5_nt3v46Ev();
extern void _ZN9S674C5_nt3v47Ev();
extern void _ZN9S674C5_nt3v48Ev();
extern void _ZN9S674C5_nt3v49Ev();
extern void _ZN9S674C5_nt3v50Ev();
extern void _ZN9S674C5_nt3v51Ev();
extern void _ZN9S674C5_nt3v52Ev();
extern void _ZN9S674C5_nt3v53Ev();
extern void _ZN9S674C5_nt3v54Ev();
extern void _ZN9S674C5_nt3v55Ev();
extern void _ZN9S674C5_nt3v56Ev();
extern void _ZN9S674C5_nt3v57Ev();
extern void _ZN9S674C5_nt3v58Ev();
extern void _ZN9S674C5_nt3v59Ev();
extern void _ZN9S674C5_nt3v60Ev();
extern void _ZN9S674C5_nt3v61Ev();
extern void _ZN9S674C5_nt3v62Ev();
extern void _ZN9S674C5_nt3v63Ev();
extern void _ZN9S674C5_nt3v64Ev();
extern void _ZN9S674C5_nt3v65Ev();
extern void _ZN9S674C5_nt3v66Ev();
extern void _ZN9S674C5_nt3v67Ev();
extern void _ZN9S674C5_nt3v68Ev();
extern void _ZN9S674C5_nt3v69Ev();
extern void _ZN9S674C4_nt3v70Ev();
extern void _ZN9S674C4_nt3v71Ev();
extern void _ZN9S674C3_nt3v72Ev();
extern void _ZN9S674C3_nt3v73Ev();
extern void _ZN9S674C3_nt3v74Ev();
extern void _ZN9S674C3_nt3v75Ev();
extern void _ZN9S674C3_nt3v76Ev();
extern void _ZN9S674C3_nt3v77Ev();
extern void _ZN9S674C3_nt3v78Ev();
extern void _ZN9S674C3_nt3v79Ev();
extern void _ZN9S674C3_nt3v80Ev();
extern void _ZN9S674C3_nt3v81Ev();
extern void _ZN9S674C3_nt3v82Ev();
extern void _ZN9S674C3_nt3v83Ev();
extern void _ZN9S674C3_nt3v84Ev();
extern void _ZN9S674C3_nt3v85Ev();
extern void _ZN9S674C3_nt3v86Ev();
extern void _ZN9S674C3_nt3v87Ev();
extern void _ZN9S674C3_nt3v88Ev();
extern void _ZN9S674C3_nt3v89Ev();
extern void _ZN9S674C3_nt3v90Ev();
extern void _ZN9S674C3_nt3v91Ev();
extern void _ZN9S674C3_nt3v92Ev();
extern void _ZN9S674C3_nt3v93Ev();
extern void _ZN9S674C3_nt3v94Ev();
extern void _ZN9S674C3_nt3v95Ev();
extern void _ZN9S674C3_nt3v96Ev();
extern void _ZN9S674C3_nt3v97Ev();
extern void _ZN9S674C3_nt3v98Ev();
extern void _ZN9S674C3_nt3v99Ev();
extern void _ZN9S674C3_nt4v100Ev();
extern void _ZN9S674C3_nt4v101Ev();
extern void _ZN9S674C3_nt4v102Ev();
extern void _ZN9S674C3_nt4v103Ev();
extern void _ZN9S674C3_nt4v104Ev();
extern void _ZN9S674C3_nt4v105Ev();
extern void _ZN9S674C3_nt4v106Ev();
extern void _ZN9S674C3_nt4v107Ev();
extern void _ZN9S674C3_nt4v108Ev();
extern void _ZN9S674C3_nt4v109Ev();
extern void _ZN9S674C3_nt4v110Ev();
extern void _ZN9S674C3_nt4v111Ev();
extern void _ZN9S674C3_nt4v112Ev();
extern void _ZN9S674C3_nt4v113Ev();
extern void _ZN9S674C3_nt4v114Ev();
extern void _ZN9S674C3_nt4v115Ev();
extern void _ZN9S674C3_nt4v116Ev();
extern void _ZN9S674C3_nt4v117Ev();
extern void _ZN9S674C3_nt4v118Ev();
extern void _ZN9S674C3_nt4v119Ev();
extern void _ZN9S674C3_nt4v120Ev();
extern void _ZN9S674C3_nt4v121Ev();
extern void _ZN9S674C3_nt4v122Ev();
extern void _ZN9S674C3_nt4v123Ev();
extern void _ZN9S674C3_nt4v124Ev();
extern void _ZN9S674C3_nt4v125Ev();
extern void _ZN9S674C3_nt4v126Ev();
extern void _ZN9S674C3_nt4v127Ev();
extern void _ZN9S674C3_nt4v128Ev();
extern void _ZN9S674C3_nt4v129Ev();
extern void _ZN9S674C3_nt4v130Ev();
extern void _ZN9S674C3_nt4v131Ev();
extern void _ZN9S674C3_nt4v132Ev();
extern void _ZN9S674C3_nt4v133Ev();
extern void _ZN9S674C3_nt4v134Ev();
extern void _ZN9S674C3_nt4v135Ev();
extern void _ZN9S674C3_nt4v136Ev();
extern void _ZN9S674C3_nt4v137Ev();
extern void _ZN9S674C3_nt4v138Ev();
extern void _ZN9S674C3_nt4v139Ev();
extern void _ZN9S674C3_nt4v140Ev();
extern void _ZN9S674C3_nt4v141Ev();
extern void _ZN9S674C3_nt4v142Ev();
extern void _ZN9S674C3_nt4v143Ev();
extern void _ZN9S674C3_nt4v144Ev();
extern void _ZN9S674C3_nt4v145Ev();
extern void _ZN9S674C3_nt4v146Ev();
extern void _ZN9S674C3_nt4v147Ev();
extern void _ZN9S674C2_nt4v148Ev();
extern void _ZN9S674C2_nt4v149Ev();
extern void _ZN9S674C2_nt4v150Ev();
extern void _ZN9S674C2_nt4v151Ev();
extern void _ZN9S674C2_nt4v152Ev();
extern void _ZN9S674C2_nt4v153Ev();
extern void _ZN9S674C2_nt4v154Ev();
extern void _ZN9S674C2_nt4v155Ev();
extern void _ZN9S674C2_nt4v156Ev();
extern void _ZN9S674C2_nt4v157Ev();
extern void _ZN9S674C2_nt4v158Ev();
extern void _ZN9S674C2_nt4v159Ev();
extern void _ZN9S674C2_nt4v160Ev();
extern void _ZN9S674C2_nt4v161Ev();
extern void _ZN9S674C2_nt4v162Ev();
extern void _ZN9S674C2_nt4v163Ev();
extern void _ZN9S674C2_nt4v164Ev();
extern void _ZN9S674C2_nt4v165Ev();
extern void _ZN9S674C2_nt4v166Ev();
extern void _ZN9S674C2_nt4v167Ev();
extern void _ZN9S674C2_nt4v168Ev();
extern void _ZN9S674C2_nt4v169Ev();
extern void _ZN9S674C2_nt4v170Ev();
extern void _ZN9S674C2_nt4v171Ev();
extern void _ZN9S674C2_nt4v172Ev();
extern void _ZN9S674C2_nt4v173Ev();
extern void _ZN9S674C2_nt4v174Ev();
extern void _ZN9S674C2_nt4v175Ev();
extern void _ZN9S674C2_nt4v176Ev();
extern void _ZN9S674C2_nt4v177Ev();
extern void _ZN9S674C2_nt4v178Ev();
extern void _ZN9S674C2_nt4v179Ev();
extern void _ZN9S674C2_nt4v180Ev();
extern void _ZN9S674C2_nt4v181Ev();
extern void _ZN9S674C2_nt4v182Ev();
extern void _ZN9S674C2_nt4v183Ev();
extern void _ZN9S674C2_nt4v184Ev();
extern void _ZN9S674C2_nt4v185Ev();
extern void _ZN9S674C2_nt4v186Ev();
extern void _ZN9S674C2_nt4v187Ev();
extern void _ZN9S674C2_nt4v188Ev();
extern void _ZN9S674C2_nt4v189Ev();
extern void _ZN9S674C2_nt4v190Ev();
extern void _ZN9S674C2_nt4v191Ev();
extern void _ZN9S674C2_nt4v192Ev();
extern void _ZN9S674C2_nt4v193Ev();
extern void _ZN9S674C2_nt4v194Ev();
extern void _ZN9S674C2_nt4v195Ev();
extern void _ZN9S674C2_nt4v196Ev();
extern void _ZN9S674C2_nt4v197Ev();
extern void _ZN9S674C2_nt4v198Ev();
extern void _ZN9S674C2_nt4v199Ev();
extern void _ZN9S674C2_nt4v200Ev();
extern void _ZN9S674C2_nt4v201Ev();
extern void _ZN9S674C2_nt4v202Ev();
extern void _ZN9S674C2_nt4v203Ev();
extern void _ZN9S674C2_nt4v204Ev();
extern void _ZN9S674C2_nt4v205Ev();
extern void _ZN9S674C2_nt4v206Ev();
extern void _ZN9S674C2_nt4v207Ev();
extern void _ZN9S674C2_nt4v208Ev();
extern void _ZN9S674C2_nt4v209Ev();
extern void _ZN9S674C2_nt4v210Ev();
extern void _ZN9S674C2_nt4v211Ev();
extern void _ZN9S674C2_nt4v212Ev();
extern void _ZN9S674C2_nt4v213Ev();
extern void _ZN9S674C2_nt4v214Ev();
extern void _ZN9S674C2_nt4v215Ev();
extern void _ZN9S674C2_nt4v216Ev();
static  VTBL_ENTRY vtc_S674C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S674C2_nt[0]),
  (VTBL_ENTRY)&_ZN9S674C2_ntD1Ev,
  (VTBL_ENTRY)&_ZN9S674C2_ntD0Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt2v6Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt2v7Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt2v9Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v10Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v11Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v12Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v13Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v14Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v15Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v16Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v17Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v18Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v19Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v20Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v21Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v22Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v23Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v24Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v25Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v26Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v27Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v28Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v29Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v30Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v31Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v32Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v33Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v34Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v35Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v36Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v37Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v38Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v39Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v40Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v41Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v42Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v43Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v44Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v45Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v46Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v47Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v48Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v49Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v50Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v51Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v52Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v53Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v54Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v55Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v56Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v57Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v58Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v59Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v60Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v61Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v62Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v63Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v64Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v65Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v66Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v67Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v68Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v69Ev,
  (VTBL_ENTRY)&_ZN9S674C4_nt3v70Ev,
  (VTBL_ENTRY)&_ZN9S674C4_nt3v71Ev,
  (VTBL_ENTRY)&_ZN9S674C3_nt3v72Ev,
  (VTBL_ENTRY)&_ZN9S674C3_nt3v73Ev,
  (VTBL_ENTRY)&_ZN9S674C3_nt3v74Ev,
  (VTBL_ENTRY)&_ZN9S674C3_nt3v75Ev,
  (VTBL_ENTRY)&_ZN9S674C3_nt3v76Ev,
  (VTBL_ENTRY)&_ZN9S674C3_nt3v77Ev,
  (VTBL_ENTRY)&_ZN9S674C3_nt3v78Ev,
  (VTBL_ENTRY)&_ZN9S674C3_nt3v79Ev,
  (VTBL_ENTRY)&_ZN9S674C3_nt3v80Ev,
  (VTBL_ENTRY)&_ZN9S674C3_nt3v81Ev,
  (VTBL_ENTRY)&_ZN9S674C3_nt3v82Ev,
  (VTBL_ENTRY)&_ZN9S674C3_nt3v83Ev,
  (VTBL_ENTRY)&_ZN9S674C3_nt3v84Ev,
  (VTBL_ENTRY)&_ZN9S674C3_nt3v85Ev,
  (VTBL_ENTRY)&_ZN9S674C3_nt3v86Ev,
  (VTBL_ENTRY)&_ZN9S674C3_nt3v87Ev,
  (VTBL_ENTRY)&_ZN9S674C3_nt3v88Ev,
  (VTBL_ENTRY)&_ZN9S674C3_nt3v89Ev,
  (VTBL_ENTRY)&_ZN9S674C3_nt3v90Ev,
  (VTBL_ENTRY)&_ZN9S674C3_nt3v91Ev,
  (VTBL_ENTRY)&_ZN9S674C3_nt3v92Ev,
  (VTBL_ENTRY)&_ZN9S674C3_nt3v93Ev,
  (VTBL_ENTRY)&_ZN9S674C3_nt3v94Ev,
  (VTBL_ENTRY)&_ZN9S674C3_nt3v95Ev,
  (VTBL_ENTRY)&_ZN9S674C3_nt3v96Ev,
  (VTBL_ENTRY)&_ZN9S674C3_nt3v97Ev,
  (VTBL_ENTRY)&_ZN9S674C3_nt3v98Ev,
  (VTBL_ENTRY)&_ZN9S674C3_nt3v99Ev,
  (VTBL_ENTRY)&_ZN9S674C3_nt4v100Ev,
  (VTBL_ENTRY)&_ZN9S674C3_nt4v101Ev,
  (VTBL_ENTRY)&_ZN9S674C3_nt4v102Ev,
  (VTBL_ENTRY)&_ZN9S674C3_nt4v103Ev,
  (VTBL_ENTRY)&_ZN9S674C3_nt4v104Ev,
  (VTBL_ENTRY)&_ZN9S674C3_nt4v105Ev,
  (VTBL_ENTRY)&_ZN9S674C3_nt4v106Ev,
  (VTBL_ENTRY)&_ZN9S674C3_nt4v107Ev,
  (VTBL_ENTRY)&_ZN9S674C3_nt4v108Ev,
  (VTBL_ENTRY)&_ZN9S674C3_nt4v109Ev,
  (VTBL_ENTRY)&_ZN9S674C3_nt4v110Ev,
  (VTBL_ENTRY)&_ZN9S674C3_nt4v111Ev,
  (VTBL_ENTRY)&_ZN9S674C3_nt4v112Ev,
  (VTBL_ENTRY)&_ZN9S674C3_nt4v113Ev,
  (VTBL_ENTRY)&_ZN9S674C3_nt4v114Ev,
  (VTBL_ENTRY)&_ZN9S674C3_nt4v115Ev,
  (VTBL_ENTRY)&_ZN9S674C3_nt4v116Ev,
  (VTBL_ENTRY)&_ZN9S674C3_nt4v117Ev,
  (VTBL_ENTRY)&_ZN9S674C3_nt4v118Ev,
  (VTBL_ENTRY)&_ZN9S674C3_nt4v119Ev,
  (VTBL_ENTRY)&_ZN9S674C3_nt4v120Ev,
  (VTBL_ENTRY)&_ZN9S674C3_nt4v121Ev,
  (VTBL_ENTRY)&_ZN9S674C3_nt4v122Ev,
  (VTBL_ENTRY)&_ZN9S674C3_nt4v123Ev,
  (VTBL_ENTRY)&_ZN9S674C3_nt4v124Ev,
  (VTBL_ENTRY)&_ZN9S674C3_nt4v125Ev,
  (VTBL_ENTRY)&_ZN9S674C3_nt4v126Ev,
  (VTBL_ENTRY)&_ZN9S674C3_nt4v127Ev,
  (VTBL_ENTRY)&_ZN9S674C3_nt4v128Ev,
  (VTBL_ENTRY)&_ZN9S674C3_nt4v129Ev,
  (VTBL_ENTRY)&_ZN9S674C3_nt4v130Ev,
  (VTBL_ENTRY)&_ZN9S674C3_nt4v131Ev,
  (VTBL_ENTRY)&_ZN9S674C3_nt4v132Ev,
  (VTBL_ENTRY)&_ZN9S674C3_nt4v133Ev,
  (VTBL_ENTRY)&_ZN9S674C3_nt4v134Ev,
  (VTBL_ENTRY)&_ZN9S674C3_nt4v135Ev,
  (VTBL_ENTRY)&_ZN9S674C3_nt4v136Ev,
  (VTBL_ENTRY)&_ZN9S674C3_nt4v137Ev,
  (VTBL_ENTRY)&_ZN9S674C3_nt4v138Ev,
  (VTBL_ENTRY)&_ZN9S674C3_nt4v139Ev,
  (VTBL_ENTRY)&_ZN9S674C3_nt4v140Ev,
  (VTBL_ENTRY)&_ZN9S674C3_nt4v141Ev,
  (VTBL_ENTRY)&_ZN9S674C3_nt4v142Ev,
  (VTBL_ENTRY)&_ZN9S674C3_nt4v143Ev,
  (VTBL_ENTRY)&_ZN9S674C3_nt4v144Ev,
  (VTBL_ENTRY)&_ZN9S674C3_nt4v145Ev,
  (VTBL_ENTRY)&_ZN9S674C3_nt4v146Ev,
  (VTBL_ENTRY)&_ZN9S674C3_nt4v147Ev,
  (VTBL_ENTRY)&_ZN9S674C2_nt4v148Ev,
  (VTBL_ENTRY)&_ZN9S674C2_nt4v149Ev,
  (VTBL_ENTRY)&_ZN9S674C2_nt4v150Ev,
  (VTBL_ENTRY)&_ZN9S674C2_nt4v151Ev,
  (VTBL_ENTRY)&_ZN9S674C2_nt4v152Ev,
  (VTBL_ENTRY)&_ZN9S674C2_nt4v153Ev,
  (VTBL_ENTRY)&_ZN9S674C2_nt4v154Ev,
  (VTBL_ENTRY)&_ZN9S674C2_nt4v155Ev,
  (VTBL_ENTRY)&_ZN9S674C2_nt4v156Ev,
  (VTBL_ENTRY)&_ZN9S674C2_nt4v157Ev,
  (VTBL_ENTRY)&_ZN9S674C2_nt4v158Ev,
  (VTBL_ENTRY)&_ZN9S674C2_nt4v159Ev,
  (VTBL_ENTRY)&_ZN9S674C2_nt4v160Ev,
  (VTBL_ENTRY)&_ZN9S674C2_nt4v161Ev,
  (VTBL_ENTRY)&_ZN9S674C2_nt4v162Ev,
  (VTBL_ENTRY)&_ZN9S674C2_nt4v163Ev,
  (VTBL_ENTRY)&_ZN9S674C2_nt4v164Ev,
  (VTBL_ENTRY)&_ZN9S674C2_nt4v165Ev,
  (VTBL_ENTRY)&_ZN9S674C2_nt4v166Ev,
  (VTBL_ENTRY)&_ZN9S674C2_nt4v167Ev,
  (VTBL_ENTRY)&_ZN9S674C2_nt4v168Ev,
  (VTBL_ENTRY)&_ZN9S674C2_nt4v169Ev,
  (VTBL_ENTRY)&_ZN9S674C2_nt4v170Ev,
  (VTBL_ENTRY)&_ZN9S674C2_nt4v171Ev,
  (VTBL_ENTRY)&_ZN9S674C2_nt4v172Ev,
  (VTBL_ENTRY)&_ZN9S674C2_nt4v173Ev,
  (VTBL_ENTRY)&_ZN9S674C2_nt4v174Ev,
  (VTBL_ENTRY)&_ZN9S674C2_nt4v175Ev,
  (VTBL_ENTRY)&_ZN9S674C2_nt4v176Ev,
  (VTBL_ENTRY)&_ZN9S674C2_nt4v177Ev,
  (VTBL_ENTRY)&_ZN9S674C2_nt4v178Ev,
  (VTBL_ENTRY)&_ZN9S674C2_nt4v179Ev,
  (VTBL_ENTRY)&_ZN9S674C2_nt4v180Ev,
  (VTBL_ENTRY)&_ZN9S674C2_nt4v181Ev,
  (VTBL_ENTRY)&_ZN9S674C2_nt4v182Ev,
  (VTBL_ENTRY)&_ZN9S674C2_nt4v183Ev,
  (VTBL_ENTRY)&_ZN9S674C2_nt4v184Ev,
  (VTBL_ENTRY)&_ZN9S674C2_nt4v185Ev,
  (VTBL_ENTRY)&_ZN9S674C2_nt4v186Ev,
  (VTBL_ENTRY)&_ZN9S674C2_nt4v187Ev,
  (VTBL_ENTRY)&_ZN9S674C2_nt4v188Ev,
  (VTBL_ENTRY)&_ZN9S674C2_nt4v189Ev,
  (VTBL_ENTRY)&_ZN9S674C2_nt4v190Ev,
  (VTBL_ENTRY)&_ZN9S674C2_nt4v191Ev,
  (VTBL_ENTRY)&_ZN9S674C2_nt4v192Ev,
  (VTBL_ENTRY)&_ZN9S674C2_nt4v193Ev,
  (VTBL_ENTRY)&_ZN9S674C2_nt4v194Ev,
  (VTBL_ENTRY)&_ZN9S674C2_nt4v195Ev,
  (VTBL_ENTRY)&_ZN9S674C2_nt4v196Ev,
  (VTBL_ENTRY)&_ZN9S674C2_nt4v197Ev,
  (VTBL_ENTRY)&_ZN9S674C2_nt4v198Ev,
  (VTBL_ENTRY)&_ZN9S674C2_nt4v199Ev,
  (VTBL_ENTRY)&_ZN9S674C2_nt4v200Ev,
  (VTBL_ENTRY)&_ZN9S674C2_nt4v201Ev,
  (VTBL_ENTRY)&_ZN9S674C2_nt4v202Ev,
  (VTBL_ENTRY)&_ZN9S674C2_nt4v203Ev,
  (VTBL_ENTRY)&_ZN9S674C2_nt4v204Ev,
  (VTBL_ENTRY)&_ZN9S674C2_nt4v205Ev,
  (VTBL_ENTRY)&_ZN9S674C2_nt4v206Ev,
  (VTBL_ENTRY)&_ZN9S674C2_nt4v207Ev,
  (VTBL_ENTRY)&_ZN9S674C2_nt4v208Ev,
  (VTBL_ENTRY)&_ZN9S674C2_nt4v209Ev,
  (VTBL_ENTRY)&_ZN9S674C2_nt4v210Ev,
  (VTBL_ENTRY)&_ZN9S674C2_nt4v211Ev,
  (VTBL_ENTRY)&_ZN9S674C2_nt4v212Ev,
  (VTBL_ENTRY)&_ZN9S674C2_nt4v213Ev,
  (VTBL_ENTRY)&_ZN9S674C2_nt4v214Ev,
  (VTBL_ENTRY)&_ZN9S674C2_nt4v215Ev,
  (VTBL_ENTRY)&_ZN9S674C2_nt4v216Ev,
};
extern VTBL_ENTRY _ZTI9S674C2_nt[];
VTBL_ENTRY *P__ZTI9S674C2_nt = _ZTI9S674C2_nt; 
extern  VTBL_ENTRY _ZTV9S674C2_nt[];
Class_Descriptor cd_S674C2_nt = {  "S674C2_nt", // class name
  bases_S674C2_nt, 3,
  &(vtc_S674C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(1224,908), // object size
  NSPAIRA(_ZTI9S674C2_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV9S674C2_nt),215, //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  S674C1  : S674C2_nt {
  void *s674c1f0[5];
  int s674c1f1;
  unsigned int s674c1f2:1;
  virtual  ~S674C1(); // _ZN6S674C1D1Ev
  virtual void  v1(); // _ZN6S674C12v1Ev
  virtual void  v2(); // _ZN6S674C12v2Ev
  virtual void  v3(); // _ZN6S674C12v3Ev
  virtual void  v4(); // _ZN6S674C12v4Ev
  virtual void  v5(); // _ZN6S674C12v5Ev
  S674C1(); // tgen
};
//SIG(1 S674C1) 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} vd 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 v141 v142 v143 v144 v145 v146 v147 FC7{ m Fi[4] Fc[9]} Fi Fi:1 Fi:1 Fi:1 Fi:1 FC8{ BC9{ BC10{ m Fp Fi[2]}}} FC8 Fp FC11{ BC12{ BC10}} FC11 FC11 FC13{ BC14{ BC10}} Fc Fi Fp FC6 FC6 FC6 FC6 FC6 FC6 FC15{ m Fp FC6} FC15 FC15 FC15 FC15 FC15 FC15 FC15 FC15 FC15} vd v148 v149 v150 v151 v152 v153 v154 v155 v156 v157 v158 v159 v160 v161 v162 v163 v164 v165 v166 v167 v168 v169 v170 v171 v172 v173 v174 v175 v176 v177 v178 v179 v180 v181 v182 v183 v184 v185 v186 v187 v188 v189 v190 v191 v192 v193 v194 v195 v196 v197 v198 v199 v200 v201 v202 v203 v204 v205 v206 v207 v208 v209 v210 v211 v212 v213 v214 v215 v216 FC16{ BC17{ m Fi[4]}} FC6 Fp[2] FC18{ m FC6 Fp FC16 Fp} FC19{ m Fp[8] Fc[4]} Fi FC20{ m Fp[5] FC21{ m Fi[4] Fc[4]} Fi:1 Fi:1 Fi Fc[8]} Fi[4] FC6[4] FC22{ m FC23{ m Fi[3]} FC24{ m} FC25{ BC26{ m Fi[2] Fc[2]} Fi} Fc} FC23 Fi FC27{ m FC28{ BC29{ m Fp[2]}} Fc FC30{ BC31{ BC32{ BC10}}} Fi FC6 FC6 Fp} FC27 Fp FC23 FC13 FC33{ BC34{ BC10}} Fi:1 Fi:1 Fi:1 FC24 FC15 FC15 FC15 FC15 FC15 FC15 FC15 FC15 FC15 FC15 FC15 FC15 FC15} vd v1 v2 v3 v4 v5 Fp[5] Fi Fi:1}


 S674C1 ::~S674C1(){ note_dtor("S674C1", this);}
void  S674C1 ::v1(){vfunc_called(this, "_ZN6S674C12v1Ev");}
void  S674C1 ::v2(){vfunc_called(this, "_ZN6S674C12v2Ev");}
void  S674C1 ::v3(){vfunc_called(this, "_ZN6S674C12v3Ev");}
void  S674C1 ::v4(){vfunc_called(this, "_ZN6S674C12v4Ev");}
void  S674C1 ::v5(){vfunc_called(this, "_ZN6S674C12v5Ev");}
S674C1 ::S674C1(){ note_ctor("S674C1", this);} // tgen

static void Test_S674C1()
{
  extern Class_Descriptor cd_S674C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(160,235)];
    init_test(&cd_S674C1, buf);
    S674C1 *dp, &lv = *(dp=new (buf) S674C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1272,936), "sizeof(S674C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S674C1)");
    check_base_class_offset(lv, (S674C5_nt*)(S674C4_nt*)(S674C3_nt*)(S674C2_nt*), 0, "S674C1");
    check_base_class_offset(lv, (S674C4_nt*)(S674C3_nt*)(S674C2_nt*), 0, "S674C1");
    check_base_class_offset(lv, (S674C3_nt*)(S674C2_nt*), 0, "S674C1");
    check_base_class_offset(lv, (S674C2_nt*), 0, "S674C1");
    check_field_offset(lv, s674c1f0, ABISELECT(1224,908), "S674C1.s674c1f0");
    check_field_offset(lv, s674c1f1, ABISELECT(1264,928), "S674C1.s674c1f1");
    set_bf_and_test(lv, s674c1f2, ABISELECT(1268,932), 0, 1, 1, "S674C1");
    test_class_info(&lv, &cd_S674C1);
    dp->~S674C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS674C1(Test_S674C1, "S674C1", ABISELECT(1272,936));

#else // __cplusplus

extern void _ZN6S674C1C1Ev();
extern void _ZN6S674C1D1Ev();
Name_Map name_map_S674C1[] = {
  NSPAIR(_ZN6S674C1C1Ev),
  NSPAIR(_ZN6S674C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S674C5_nt;
extern VTBL_ENTRY _ZTI9S674C5_nt[];
extern  VTBL_ENTRY _ZTV9S674C5_nt[];
extern Class_Descriptor cd_S674C4_nt;
extern VTBL_ENTRY _ZTI9S674C4_nt[];
extern  VTBL_ENTRY _ZTV9S674C4_nt[];
extern Class_Descriptor cd_S674C3_nt;
extern VTBL_ENTRY _ZTI9S674C3_nt[];
extern  VTBL_ENTRY _ZTV9S674C3_nt[];
extern Class_Descriptor cd_S674C2_nt;
extern VTBL_ENTRY _ZTI9S674C2_nt[];
extern  VTBL_ENTRY _ZTV9S674C2_nt[];
static Base_Class bases_S674C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S674C5_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_S674C4_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_S674C3_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_S674C2_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 _ZTI6S674C1[];
extern void _ZN6S674C1D1Ev();
extern void _ZN6S674C1D0Ev();
extern void _ZN9S674C5_nt2v6Ev();
extern void _ZN9S674C5_nt2v7Ev();
extern void _ZN9S674C5_nt2v8Ev();
extern void _ZN9S674C5_nt2v9Ev();
extern void _ZN9S674C5_nt3v10Ev();
extern void _ZN9S674C5_nt3v11Ev();
extern void _ZN9S674C5_nt3v12Ev();
extern void _ZN9S674C5_nt3v13Ev();
extern void _ZN9S674C5_nt3v14Ev();
extern void _ZN9S674C5_nt3v15Ev();
extern void _ZN9S674C5_nt3v16Ev();
extern void _ZN9S674C5_nt3v17Ev();
extern void _ZN9S674C5_nt3v18Ev();
extern void _ZN9S674C5_nt3v19Ev();
extern void _ZN9S674C5_nt3v20Ev();
extern void _ZN9S674C5_nt3v21Ev();
extern void _ZN9S674C5_nt3v22Ev();
extern void _ZN9S674C5_nt3v23Ev();
extern void _ZN9S674C5_nt3v24Ev();
extern void _ZN9S674C5_nt3v25Ev();
extern void _ZN9S674C5_nt3v26Ev();
extern void _ZN9S674C5_nt3v27Ev();
extern void _ZN9S674C5_nt3v28Ev();
extern void _ZN9S674C5_nt3v29Ev();
extern void _ZN9S674C5_nt3v30Ev();
extern void _ZN9S674C5_nt3v31Ev();
extern void _ZN9S674C5_nt3v32Ev();
extern void _ZN9S674C5_nt3v33Ev();
extern void _ZN9S674C5_nt3v34Ev();
extern void _ZN9S674C5_nt3v35Ev();
extern void _ZN9S674C5_nt3v36Ev();
extern void _ZN9S674C5_nt3v37Ev();
extern void _ZN9S674C5_nt3v38Ev();
extern void _ZN9S674C5_nt3v39Ev();
extern void _ZN9S674C5_nt3v40Ev();
extern void _ZN9S674C5_nt3v41Ev();
extern void _ZN9S674C5_nt3v42Ev();
extern void _ZN9S674C5_nt3v43Ev();
extern void _ZN9S674C5_nt3v44Ev();
extern void _ZN9S674C5_nt3v45Ev();
extern void _ZN9S674C5_nt3v46Ev();
extern void _ZN9S674C5_nt3v47Ev();
extern void _ZN9S674C5_nt3v48Ev();
extern void _ZN9S674C5_nt3v49Ev();
extern void _ZN9S674C5_nt3v50Ev();
extern void _ZN9S674C5_nt3v51Ev();
extern void _ZN9S674C5_nt3v52Ev();
extern void _ZN9S674C5_nt3v53Ev();
extern void _ZN9S674C5_nt3v54Ev();
extern void _ZN9S674C5_nt3v55Ev();
extern void _ZN9S674C5_nt3v56Ev();
extern void _ZN9S674C5_nt3v57Ev();
extern void _ZN9S674C5_nt3v58Ev();
extern void _ZN9S674C5_nt3v59Ev();
extern void _ZN9S674C5_nt3v60Ev();
extern void _ZN9S674C5_nt3v61Ev();
extern void _ZN9S674C5_nt3v62Ev();
extern void _ZN9S674C5_nt3v63Ev();
extern void _ZN9S674C5_nt3v64Ev();
extern void _ZN9S674C5_nt3v65Ev();
extern void _ZN9S674C5_nt3v66Ev();
extern void _ZN9S674C5_nt3v67Ev();
extern void _ZN9S674C5_nt3v68Ev();
extern void _ZN9S674C5_nt3v69Ev();
extern void _ZN9S674C4_nt3v70Ev();
extern void _ZN9S674C4_nt3v71Ev();
extern void _ZN9S674C3_nt3v72Ev();
extern void _ZN9S674C3_nt3v73Ev();
extern void _ZN9S674C3_nt3v74Ev();
extern void _ZN9S674C3_nt3v75Ev();
extern void _ZN9S674C3_nt3v76Ev();
extern void _ZN9S674C3_nt3v77Ev();
extern void _ZN9S674C3_nt3v78Ev();
extern void _ZN9S674C3_nt3v79Ev();
extern void _ZN9S674C3_nt3v80Ev();
extern void _ZN9S674C3_nt3v81Ev();
extern void _ZN9S674C3_nt3v82Ev();
extern void _ZN9S674C3_nt3v83Ev();
extern void _ZN9S674C3_nt3v84Ev();
extern void _ZN9S674C3_nt3v85Ev();
extern void _ZN9S674C3_nt3v86Ev();
extern void _ZN9S674C3_nt3v87Ev();
extern void _ZN9S674C3_nt3v88Ev();
extern void _ZN9S674C3_nt3v89Ev();
extern void _ZN9S674C3_nt3v90Ev();
extern void _ZN9S674C3_nt3v91Ev();
extern void _ZN9S674C3_nt3v92Ev();
extern void _ZN9S674C3_nt3v93Ev();
extern void _ZN9S674C3_nt3v94Ev();
extern void _ZN9S674C3_nt3v95Ev();
extern void _ZN9S674C3_nt3v96Ev();
extern void _ZN9S674C3_nt3v97Ev();
extern void _ZN9S674C3_nt3v98Ev();
extern void _ZN9S674C3_nt3v99Ev();
extern void _ZN9S674C3_nt4v100Ev();
extern void _ZN9S674C3_nt4v101Ev();
extern void _ZN9S674C3_nt4v102Ev();
extern void _ZN9S674C3_nt4v103Ev();
extern void _ZN9S674C3_nt4v104Ev();
extern void _ZN9S674C3_nt4v105Ev();
extern void _ZN9S674C3_nt4v106Ev();
extern void _ZN9S674C3_nt4v107Ev();
extern void _ZN9S674C3_nt4v108Ev();
extern void _ZN9S674C3_nt4v109Ev();
extern void _ZN9S674C3_nt4v110Ev();
extern void _ZN9S674C3_nt4v111Ev();
extern void _ZN9S674C3_nt4v112Ev();
extern void _ZN9S674C3_nt4v113Ev();
extern void _ZN9S674C3_nt4v114Ev();
extern void _ZN9S674C3_nt4v115Ev();
extern void _ZN9S674C3_nt4v116Ev();
extern void _ZN9S674C3_nt4v117Ev();
extern void _ZN9S674C3_nt4v118Ev();
extern void _ZN9S674C3_nt4v119Ev();
extern void _ZN9S674C3_nt4v120Ev();
extern void _ZN9S674C3_nt4v121Ev();
extern void _ZN9S674C3_nt4v122Ev();
extern void _ZN9S674C3_nt4v123Ev();
extern void _ZN9S674C3_nt4v124Ev();
extern void _ZN9S674C3_nt4v125Ev();
extern void _ZN9S674C3_nt4v126Ev();
extern void _ZN9S674C3_nt4v127Ev();
extern void _ZN9S674C3_nt4v128Ev();
extern void _ZN9S674C3_nt4v129Ev();
extern void _ZN9S674C3_nt4v130Ev();
extern void _ZN9S674C3_nt4v131Ev();
extern void _ZN9S674C3_nt4v132Ev();
extern void _ZN9S674C3_nt4v133Ev();
extern void _ZN9S674C3_nt4v134Ev();
extern void _ZN9S674C3_nt4v135Ev();
extern void _ZN9S674C3_nt4v136Ev();
extern void _ZN9S674C3_nt4v137Ev();
extern void _ZN9S674C3_nt4v138Ev();
extern void _ZN9S674C3_nt4v139Ev();
extern void _ZN9S674C3_nt4v140Ev();
extern void _ZN9S674C3_nt4v141Ev();
extern void _ZN9S674C3_nt4v142Ev();
extern void _ZN9S674C3_nt4v143Ev();
extern void _ZN9S674C3_nt4v144Ev();
extern void _ZN9S674C3_nt4v145Ev();
extern void _ZN9S674C3_nt4v146Ev();
extern void _ZN9S674C3_nt4v147Ev();
extern void _ZN9S674C2_nt4v148Ev();
extern void _ZN9S674C2_nt4v149Ev();
extern void _ZN9S674C2_nt4v150Ev();
extern void _ZN9S674C2_nt4v151Ev();
extern void _ZN9S674C2_nt4v152Ev();
extern void _ZN9S674C2_nt4v153Ev();
extern void _ZN9S674C2_nt4v154Ev();
extern void _ZN9S674C2_nt4v155Ev();
extern void _ZN9S674C2_nt4v156Ev();
extern void _ZN9S674C2_nt4v157Ev();
extern void _ZN9S674C2_nt4v158Ev();
extern void _ZN9S674C2_nt4v159Ev();
extern void _ZN9S674C2_nt4v160Ev();
extern void _ZN9S674C2_nt4v161Ev();
extern void _ZN9S674C2_nt4v162Ev();
extern void _ZN9S674C2_nt4v163Ev();
extern void _ZN9S674C2_nt4v164Ev();
extern void _ZN9S674C2_nt4v165Ev();
extern void _ZN9S674C2_nt4v166Ev();
extern void _ZN9S674C2_nt4v167Ev();
extern void _ZN9S674C2_nt4v168Ev();
extern void _ZN9S674C2_nt4v169Ev();
extern void _ZN9S674C2_nt4v170Ev();
extern void _ZN9S674C2_nt4v171Ev();
extern void _ZN9S674C2_nt4v172Ev();
extern void _ZN9S674C2_nt4v173Ev();
extern void _ZN9S674C2_nt4v174Ev();
extern void _ZN9S674C2_nt4v175Ev();
extern void _ZN9S674C2_nt4v176Ev();
extern void _ZN9S674C2_nt4v177Ev();
extern void _ZN9S674C2_nt4v178Ev();
extern void _ZN9S674C2_nt4v179Ev();
extern void _ZN9S674C2_nt4v180Ev();
extern void _ZN9S674C2_nt4v181Ev();
extern void _ZN9S674C2_nt4v182Ev();
extern void _ZN9S674C2_nt4v183Ev();
extern void _ZN9S674C2_nt4v184Ev();
extern void _ZN9S674C2_nt4v185Ev();
extern void _ZN9S674C2_nt4v186Ev();
extern void _ZN9S674C2_nt4v187Ev();
extern void _ZN9S674C2_nt4v188Ev();
extern void _ZN9S674C2_nt4v189Ev();
extern void _ZN9S674C2_nt4v190Ev();
extern void _ZN9S674C2_nt4v191Ev();
extern void _ZN9S674C2_nt4v192Ev();
extern void _ZN9S674C2_nt4v193Ev();
extern void _ZN9S674C2_nt4v194Ev();
extern void _ZN9S674C2_nt4v195Ev();
extern void _ZN9S674C2_nt4v196Ev();
extern void _ZN9S674C2_nt4v197Ev();
extern void _ZN9S674C2_nt4v198Ev();
extern void _ZN9S674C2_nt4v199Ev();
extern void _ZN9S674C2_nt4v200Ev();
extern void _ZN9S674C2_nt4v201Ev();
extern void _ZN9S674C2_nt4v202Ev();
extern void _ZN9S674C2_nt4v203Ev();
extern void _ZN9S674C2_nt4v204Ev();
extern void _ZN9S674C2_nt4v205Ev();
extern void _ZN9S674C2_nt4v206Ev();
extern void _ZN9S674C2_nt4v207Ev();
extern void _ZN9S674C2_nt4v208Ev();
extern void _ZN9S674C2_nt4v209Ev();
extern void _ZN9S674C2_nt4v210Ev();
extern void _ZN9S674C2_nt4v211Ev();
extern void _ZN9S674C2_nt4v212Ev();
extern void _ZN9S674C2_nt4v213Ev();
extern void _ZN9S674C2_nt4v214Ev();
extern void _ZN9S674C2_nt4v215Ev();
extern void _ZN9S674C2_nt4v216Ev();
extern void _ZN6S674C12v1Ev();
extern void _ZN6S674C12v2Ev();
extern void _ZN6S674C12v3Ev();
extern void _ZN6S674C12v4Ev();
extern void _ZN6S674C12v5Ev();
static  VTBL_ENTRY vtc_S674C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S674C1[0]),
  (VTBL_ENTRY)&_ZN6S674C1D1Ev,
  (VTBL_ENTRY)&_ZN6S674C1D0Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt2v6Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt2v7Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt2v9Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v10Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v11Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v12Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v13Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v14Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v15Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v16Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v17Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v18Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v19Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v20Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v21Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v22Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v23Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v24Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v25Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v26Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v27Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v28Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v29Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v30Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v31Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v32Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v33Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v34Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v35Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v36Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v37Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v38Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v39Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v40Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v41Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v42Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v43Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v44Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v45Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v46Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v47Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v48Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v49Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v50Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v51Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v52Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v53Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v54Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v55Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v56Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v57Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v58Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v59Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v60Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v61Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v62Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v63Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v64Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v65Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v66Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v67Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v68Ev,
  (VTBL_ENTRY)&_ZN9S674C5_nt3v69Ev,
  (VTBL_ENTRY)&_ZN9S674C4_nt3v70Ev,
  (VTBL_ENTRY)&_ZN9S674C4_nt3v71Ev,
  (VTBL_ENTRY)&_ZN9S674C3_nt3v72Ev,
  (VTBL_ENTRY)&_ZN9S674C3_nt3v73Ev,
  (VTBL_ENTRY)&_ZN9S674C3_nt3v74Ev,
  (VTBL_ENTRY)&_ZN9S674C3_nt3v75Ev,
  (VTBL_ENTRY)&_ZN9S674C3_nt3v76Ev,
  (VTBL_ENTRY)&_ZN9S674C3_nt3v77Ev,
  (VTBL_ENTRY)&_ZN9S674C3_nt3v78Ev,
  (VTBL_ENTRY)&_ZN9S674C3_nt3v79Ev,
  (VTBL_ENTRY)&_ZN9S674C3_nt3v80Ev,
  (VTBL_ENTRY)&_ZN9S674C3_nt3v81Ev,
  (VTBL_ENTRY)&_ZN9S674C3_nt3v82Ev,
  (VTBL_ENTRY)&_ZN9S674C3_nt3v83Ev,
  (VTBL_ENTRY)&_ZN9S674C3_nt3v84Ev,
  (VTBL_ENTRY)&_ZN9S674C3_nt3v85Ev,
  (VTBL_ENTRY)&_ZN9S674C3_nt3v86Ev,
  (VTBL_ENTRY)&_ZN9S674C3_nt3v87Ev,
  (VTBL_ENTRY)&_ZN9S674C3_nt3v88Ev,
  (VTBL_ENTRY)&_ZN9S674C3_nt3v89Ev,
  (VTBL_ENTRY)&_ZN9S674C3_nt3v90Ev,
  (VTBL_ENTRY)&_ZN9S674C3_nt3v91Ev,
  (VTBL_ENTRY)&_ZN9S674C3_nt3v92Ev,
  (VTBL_ENTRY)&_ZN9S674C3_nt3v93Ev,
  (VTBL_ENTRY)&_ZN9S674C3_nt3v94Ev,
  (VTBL_ENTRY)&_ZN9S674C3_nt3v95Ev,
  (VTBL_ENTRY)&_ZN9S674C3_nt3v96Ev,
  (VTBL_ENTRY)&_ZN9S674C3_nt3v97Ev,
  (VTBL_ENTRY)&_ZN9S674C3_nt3v98Ev,
  (VTBL_ENTRY)&_ZN9S674C3_nt3v99Ev,
  (VTBL_ENTRY)&_ZN9S674C3_nt4v100Ev,
  (VTBL_ENTRY)&_ZN9S674C3_nt4v101Ev,
  (VTBL_ENTRY)&_ZN9S674C3_nt4v102Ev,
  (VTBL_ENTRY)&_ZN9S674C3_nt4v103Ev,
  (VTBL_ENTRY)&_ZN9S674C3_nt4v104Ev,
  (VTBL_ENTRY)&_ZN9S674C3_nt4v105Ev,
  (VTBL_ENTRY)&_ZN9S674C3_nt4v106Ev,
  (VTBL_ENTRY)&_ZN9S674C3_nt4v107Ev,
  (VTBL_ENTRY)&_ZN9S674C3_nt4v108Ev,
  (VTBL_ENTRY)&_ZN9S674C3_nt4v109Ev,
  (VTBL_ENTRY)&_ZN9S674C3_nt4v110Ev,
  (VTBL_ENTRY)&_ZN9S674C3_nt4v111Ev,
  (VTBL_ENTRY)&_ZN9S674C3_nt4v112Ev,
  (VTBL_ENTRY)&_ZN9S674C3_nt4v113Ev,
  (VTBL_ENTRY)&_ZN9S674C3_nt4v114Ev,
  (VTBL_ENTRY)&_ZN9S674C3_nt4v115Ev,
  (VTBL_ENTRY)&_ZN9S674C3_nt4v116Ev,
  (VTBL_ENTRY)&_ZN9S674C3_nt4v117Ev,
  (VTBL_ENTRY)&_ZN9S674C3_nt4v118Ev,
  (VTBL_ENTRY)&_ZN9S674C3_nt4v119Ev,
  (VTBL_ENTRY)&_ZN9S674C3_nt4v120Ev,
  (VTBL_ENTRY)&_ZN9S674C3_nt4v121Ev,
  (VTBL_ENTRY)&_ZN9S674C3_nt4v122Ev,
  (VTBL_ENTRY)&_ZN9S674C3_nt4v123Ev,
  (VTBL_ENTRY)&_ZN9S674C3_nt4v124Ev,
  (VTBL_ENTRY)&_ZN9S674C3_nt4v125Ev,
  (VTBL_ENTRY)&_ZN9S674C3_nt4v126Ev,
  (VTBL_ENTRY)&_ZN9S674C3_nt4v127Ev,
  (VTBL_ENTRY)&_ZN9S674C3_nt4v128Ev,
  (VTBL_ENTRY)&_ZN9S674C3_nt4v129Ev,
  (VTBL_ENTRY)&_ZN9S674C3_nt4v130Ev,
  (VTBL_ENTRY)&_ZN9S674C3_nt4v131Ev,
  (VTBL_ENTRY)&_ZN9S674C3_nt4v132Ev,
  (VTBL_ENTRY)&_ZN9S674C3_nt4v133Ev,
  (VTBL_ENTRY)&_ZN9S674C3_nt4v134Ev,
  (VTBL_ENTRY)&_ZN9S674C3_nt4v135Ev,
  (VTBL_ENTRY)&_ZN9S674C3_nt4v136Ev,
  (VTBL_ENTRY)&_ZN9S674C3_nt4v137Ev,
  (VTBL_ENTRY)&_ZN9S674C3_nt4v138Ev,
  (VTBL_ENTRY)&_ZN9S674C3_nt4v139Ev,
  (VTBL_ENTRY)&_ZN9S674C3_nt4v140Ev,
  (VTBL_ENTRY)&_ZN9S674C3_nt4v141Ev,
  (VTBL_ENTRY)&_ZN9S674C3_nt4v142Ev,
  (VTBL_ENTRY)&_ZN9S674C3_nt4v143Ev,
  (VTBL_ENTRY)&_ZN9S674C3_nt4v144Ev,
  (VTBL_ENTRY)&_ZN9S674C3_nt4v145Ev,
  (VTBL_ENTRY)&_ZN9S674C3_nt4v146Ev,
  (VTBL_ENTRY)&_ZN9S674C3_nt4v147Ev,
  (VTBL_ENTRY)&_ZN9S674C2_nt4v148Ev,
  (VTBL_ENTRY)&_ZN9S674C2_nt4v149Ev,
  (VTBL_ENTRY)&_ZN9S674C2_nt4v150Ev,
  (VTBL_ENTRY)&_ZN9S674C2_nt4v151Ev,
  (VTBL_ENTRY)&_ZN9S674C2_nt4v152Ev,
  (VTBL_ENTRY)&_ZN9S674C2_nt4v153Ev,
  (VTBL_ENTRY)&_ZN9S674C2_nt4v154Ev,
  (VTBL_ENTRY)&_ZN9S674C2_nt4v155Ev,
  (VTBL_ENTRY)&_ZN9S674C2_nt4v156Ev,
  (VTBL_ENTRY)&_ZN9S674C2_nt4v157Ev,
  (VTBL_ENTRY)&_ZN9S674C2_nt4v158Ev,
  (VTBL_ENTRY)&_ZN9S674C2_nt4v159Ev,
  (VTBL_ENTRY)&_ZN9S674C2_nt4v160Ev,
  (VTBL_ENTRY)&_ZN9S674C2_nt4v161Ev,
  (VTBL_ENTRY)&_ZN9S674C2_nt4v162Ev,
  (VTBL_ENTRY)&_ZN9S674C2_nt4v163Ev,
  (VTBL_ENTRY)&_ZN9S674C2_nt4v164Ev,
  (VTBL_ENTRY)&_ZN9S674C2_nt4v165Ev,
  (VTBL_ENTRY)&_ZN9S674C2_nt4v166Ev,
  (VTBL_ENTRY)&_ZN9S674C2_nt4v167Ev,
  (VTBL_ENTRY)&_ZN9S674C2_nt4v168Ev,
  (VTBL_ENTRY)&_ZN9S674C2_nt4v169Ev,
  (VTBL_ENTRY)&_ZN9S674C2_nt4v170Ev,
  (VTBL_ENTRY)&_ZN9S674C2_nt4v171Ev,
  (VTBL_ENTRY)&_ZN9S674C2_nt4v172Ev,
  (VTBL_ENTRY)&_ZN9S674C2_nt4v173Ev,
  (VTBL_ENTRY)&_ZN9S674C2_nt4v174Ev,
  (VTBL_ENTRY)&_ZN9S674C2_nt4v175Ev,
  (VTBL_ENTRY)&_ZN9S674C2_nt4v176Ev,
  (VTBL_ENTRY)&_ZN9S674C2_nt4v177Ev,
  (VTBL_ENTRY)&_ZN9S674C2_nt4v178Ev,
  (VTBL_ENTRY)&_ZN9S674C2_nt4v179Ev,
  (VTBL_ENTRY)&_ZN9S674C2_nt4v180Ev,
  (VTBL_ENTRY)&_ZN9S674C2_nt4v181Ev,
  (VTBL_ENTRY)&_ZN9S674C2_nt4v182Ev,
  (VTBL_ENTRY)&_ZN9S674C2_nt4v183Ev,
  (VTBL_ENTRY)&_ZN9S674C2_nt4v184Ev,
  (VTBL_ENTRY)&_ZN9S674C2_nt4v185Ev,
  (VTBL_ENTRY)&_ZN9S674C2_nt4v186Ev,
  (VTBL_ENTRY)&_ZN9S674C2_nt4v187Ev,
  (VTBL_ENTRY)&_ZN9S674C2_nt4v188Ev,
  (VTBL_ENTRY)&_ZN9S674C2_nt4v189Ev,
  (VTBL_ENTRY)&_ZN9S674C2_nt4v190Ev,
  (VTBL_ENTRY)&_ZN9S674C2_nt4v191Ev,
  (VTBL_ENTRY)&_ZN9S674C2_nt4v192Ev,
  (VTBL_ENTRY)&_ZN9S674C2_nt4v193Ev,
  (VTBL_ENTRY)&_ZN9S674C2_nt4v194Ev,
  (VTBL_ENTRY)&_ZN9S674C2_nt4v195Ev,
  (VTBL_ENTRY)&_ZN9S674C2_nt4v196Ev,
  (VTBL_ENTRY)&_ZN9S674C2_nt4v197Ev,
  (VTBL_ENTRY)&_ZN9S674C2_nt4v198Ev,
  (VTBL_ENTRY)&_ZN9S674C2_nt4v199Ev,
  (VTBL_ENTRY)&_ZN9S674C2_nt4v200Ev,
  (VTBL_ENTRY)&_ZN9S674C2_nt4v201Ev,
  (VTBL_ENTRY)&_ZN9S674C2_nt4v202Ev,
  (VTBL_ENTRY)&_ZN9S674C2_nt4v203Ev,
  (VTBL_ENTRY)&_ZN9S674C2_nt4v204Ev,
  (VTBL_ENTRY)&_ZN9S674C2_nt4v205Ev,
  (VTBL_ENTRY)&_ZN9S674C2_nt4v206Ev,
  (VTBL_ENTRY)&_ZN9S674C2_nt4v207Ev,
  (VTBL_ENTRY)&_ZN9S674C2_nt4v208Ev,
  (VTBL_ENTRY)&_ZN9S674C2_nt4v209Ev,
  (VTBL_ENTRY)&_ZN9S674C2_nt4v210Ev,
  (VTBL_ENTRY)&_ZN9S674C2_nt4v211Ev,
  (VTBL_ENTRY)&_ZN9S674C2_nt4v212Ev,
  (VTBL_ENTRY)&_ZN9S674C2_nt4v213Ev,
  (VTBL_ENTRY)&_ZN9S674C2_nt4v214Ev,
  (VTBL_ENTRY)&_ZN9S674C2_nt4v215Ev,
  (VTBL_ENTRY)&_ZN9S674C2_nt4v216Ev,
  (VTBL_ENTRY)&_ZN6S674C12v1Ev,
  (VTBL_ENTRY)&_ZN6S674C12v2Ev,
  (VTBL_ENTRY)&_ZN6S674C12v3Ev,
  (VTBL_ENTRY)&_ZN6S674C12v4Ev,
  (VTBL_ENTRY)&_ZN6S674C12v5Ev,
};
extern VTBL_ENTRY _ZTI6S674C1[];
extern  VTBL_ENTRY _ZTV6S674C1[];
Class_Descriptor cd_S674C1 = {  "S674C1", // class name
  bases_S674C1, 4,
  &(vtc_S674C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(1272,936), // object size
  NSPAIRA(_ZTI6S674C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S674C1),220, //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  S3625C6_nt  {
  void  mf3625c6(); // _ZN10S3625C6_nt8mf3625c6Ev
};
//SIG(-1 S3625C6_nt) C1{ m}


void  S3625C6_nt ::mf3625c6(){}

//skip512 S3625C6_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3625C4_nt  {
  void *s3625c4f0;
  int s3625c4f1;
  ::S674C30_nt s3625c4f2;
  ::S3625C6_nt s3625c4f3;
  void  mf3625c4(); // _ZN10S3625C4_nt8mf3625c4Ev
};
//SIG(-1 S3625C4_nt) C1{ m Fp Fi FC2{ m} FC3{ m}}


void  S3625C4_nt ::mf3625c4(){}

//skip512 S3625C4_nt

#else // __cplusplus

Class_Descriptor cd_S3625C4_nt = {  "S3625C4_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  S3625C3_nt  {
  ::S3625C4_nt s3625c3f0;
  ::S3625C4_nt s3625c3f1;
  char s3625c3f2;
  void  mf3625c3(); // _ZN10S3625C3_nt8mf3625c3Ev
  virtual  ~S3625C3_nt(); // _ZN10S3625C3_ntD1Ev
  S3625C3_nt(); // tgen
};
//SIG(-1 S3625C3_nt) C1{ vd m FC2{ m Fp Fi FC3{ m} FC4{ m}} FC2 Fc}


void  S3625C3_nt ::mf3625c3(){}
 S3625C3_nt ::~S3625C3_nt(){ note_dtor("S3625C3_nt", this);}
S3625C3_nt ::S3625C3_nt(){ note_ctor("S3625C3_nt", this);} // tgen

//skip512 S3625C3_nt

#else // __cplusplus

extern void _ZN10S3625C3_ntC1Ev();
extern void _ZN10S3625C3_ntD1Ev();
Name_Map name_map_S3625C3_nt[] = {
  NSPAIR(_ZN10S3625C3_ntC1Ev),
  NSPAIR(_ZN10S3625C3_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S3625C3_nt[];
extern void _ZN10S3625C3_ntD1Ev();
extern void _ZN10S3625C3_ntD0Ev();
static  VTBL_ENTRY vtc_S3625C3_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S3625C3_nt[0]),
  (VTBL_ENTRY)&_ZN10S3625C3_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S3625C3_ntD0Ev,
};
extern VTBL_ENTRY _ZTI10S3625C3_nt[];
VTBL_ENTRY *P__ZTI10S3625C3_nt = _ZTI10S3625C3_nt; 
extern  VTBL_ENTRY _ZTV10S3625C3_nt[];
Class_Descriptor cd_S3625C3_nt = {  "S3625C3_nt", // class name
  0,0,//no base classes
  &(vtc_S3625C3_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI10S3625C3_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S3625C3_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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3625C10_nt  {
  char s3625c10f0;
  long s3625c10f1[2];
  short s3625c10f2[12];
  char s3625c10f3[5];
  void  mf3625c10(); // _ZN11S3625C10_nt9mf3625c10Ev
};
//SIG(-1 S3625C10_nt) C1{ m Fc Fl[2] Fs[12] Fc[5]}


void  S3625C10_nt ::mf3625c10(){}

//skip512 S3625C10_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3625C11_nt  {
  char s3625c11f0;
  long s3625c11f1[4];
  int s3625c11f2[4];
  void  mf3625c11(); // _ZN11S3625C11_nt9mf3625c11Ev
};
//SIG(-1 S3625C11_nt) C1{ m Fc Fl[4] Fi[4]}


void  S3625C11_nt ::mf3625c11(){}

//skip512 S3625C11_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3625C14_nt  {
  __tsi64 s3625c14f0[4];
};
//SIG(-1 S3625C14_nt) C1{ FL[4]}



//skip512 S3625C14_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3625C13_nt  {
  ::S3625C14_nt s3625c13f0;
  void  mf3625c13(); // _ZN11S3625C13_nt9mf3625c13Ev
};
//SIG(-1 S3625C13_nt) C1{ m FC2{ FL[4]}}


void  S3625C13_nt ::mf3625c13(){}

//skip512 S3625C13_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3625C12_nt  {
  ::S3625C13_nt s3625c12f0;
  char s3625c12f1;
  void *s3625c12f2;
  int s3625c12f3[3];
  void  mf3625c12(); // _ZN11S3625C12_nt9mf3625c12Ev
};
//SIG(-1 S3625C12_nt) C1{ m FC2{ m FC3{ FL[4]}} Fc Fp Fi[3]}


void  S3625C12_nt ::mf3625c12(){}

//skip512 S3625C12_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3625C15_nt  {
  void *s3625c15f0;
  int s3625c15f1[2];
  ::S3625C6_nt s3625c15f2;
  void  mf3625c15(); // _ZN11S3625C15_nt9mf3625c15Ev
};
//SIG(-1 S3625C15_nt) C1{ m Fp Fi[2] FC2{ m}}


void  S3625C15_nt ::mf3625c15(){}

//skip512 S3625C15_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3625C19  {
  void  mf3625c19(); // _ZN8S3625C199mf3625c19Ev
};
//SIG(-1 S3625C19) C1{ m}


void  S3625C19 ::mf3625c19(){}

static void Test_S3625C19()
{
  {
    init_simple_test("S3625C19");
    S3625C19 lv;
    check2(sizeof(lv), 1, "sizeof(S3625C19)");
    check2(__alignof__(lv), 1, "__alignof__(S3625C19)");
  }
}
static Arrange_To_Call_Me vS3625C19(Test_S3625C19, "S3625C19", 1);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3625C18_nt  {
  void *s3625c18f0;
  int s3625c18f1;
  ::S3625C19 s3625c18f2;
  void  mf3625c18(); // _ZN11S3625C18_nt9mf3625c18Ev
};
//SIG(-1 S3625C18_nt) C1{ m Fp Fi FC2{ m}}


void  S3625C18_nt ::mf3625c18(){}

//skip512 S3625C18_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3625C24_nt  {
  char s3625c24f0[11];
  void  mf3625c24(); // _ZN11S3625C24_nt9mf3625c24Ev
};
//SIG(-1 S3625C24_nt) C1{ m Fc[11]}


void  S3625C24_nt ::mf3625c24(){}

//skip512 S3625C24_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3625C23_nt  {
  ::S3625C24_nt s3625c23f0;
  int s3625c23f1[7];
  __tsi64 s3625c23f2;
  void  mf3625c23(); // _ZN11S3625C23_nt9mf3625c23Ev
};
//SIG(-1 S3625C23_nt) C1{ m FC2{ m Fc[11]} Fi[7] FL}


void  S3625C23_nt ::mf3625c23(){}

//skip512 S3625C23_nt

#else // __cplusplus

Class_Descriptor cd_S3625C23_nt = {  "S3625C23_nt", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  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  S3625C25  {
  void *s3625c25f0;
  int s3625c25f1[2];
  ::S3625C19 s3625c25f2;
  void  mf3625c25(); // _ZN8S3625C259mf3625c25Ev
};
//SIG(-1 S3625C25) C1{ m Fp Fi[2] FC2{ m}}


void  S3625C25 ::mf3625c25(){}

static void Test_S3625C25()
{
  {
    init_simple_test("S3625C25");
    S3625C25 lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S3625C25)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3625C25)");
    check_field_offset(lv, s3625c25f0, 0, "S3625C25.s3625c25f0");
    check_field_offset(lv, s3625c25f1, ABISELECT(8,4), "S3625C25.s3625c25f1");
    check_field_offset(lv, s3625c25f2, ABISELECT(16,12), "S3625C25.s3625c25f2");
  }
}
static Arrange_To_Call_Me vS3625C25(Test_S3625C25, "S3625C25", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3625C22  : S3625C23_nt {
  int s3625c22f0;
  ::S3625C25 s3625c22f1;
  ::S3625C24_nt s3625c22f2;
  int s3625c22f3;
};
//SIG(-1 S3625C22) C1{ BC2{ m FC3{ m Fc[11]} Fi[7] FL} Fi FC4{ m Fp Fi[2] FC5{ m}} FC3 Fi}



static void Test_S3625C22()
{
  extern Class_Descriptor cd_S3625C22;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,22)];
    init_test(&cd_S3625C22, buf);
    S3625C22 &lv = *(new (buf) S3625C22());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,84), "sizeof(S3625C22)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3625C22)");
    check_base_class_offset(lv, (S3625C23_nt*), 0, "S3625C22");
    check_field_offset(lv, s3625c22f0, 48, "S3625C22.s3625c22f0");
    check_field_offset(lv, s3625c22f1, ABISELECT(56,52), "S3625C22.s3625c22f1");
    check_field_offset(lv, s3625c22f2, ABISELECT(80,68), "S3625C22.s3625c22f2");
    check_field_offset(lv, s3625c22f3, ABISELECT(92,80), "S3625C22.s3625c22f3");
    test_class_info(&lv, &cd_S3625C22);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3625C22(Test_S3625C22, "S3625C22", ABISELECT(96,84));

#else // __cplusplus

extern Class_Descriptor cd_S3625C23_nt;
static Base_Class bases_S3625C22[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3625C23_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_S3625C22 = {  "S3625C22", // class name
  bases_S3625C22, 1,
  0, // no vftv
  0, //no vtt
  ABISELECT(96,84), // 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  S3625C32  {
  void  mf3625c32(); // _ZN8S3625C329mf3625c32Ev
};
//SIG(-1 S3625C32) C1{ m}


void  S3625C32 ::mf3625c32(){}

static void Test_S3625C32()
{
  {
    init_simple_test("S3625C32");
    S3625C32 lv;
    check2(sizeof(lv), 1, "sizeof(S3625C32)");
    check2(__alignof__(lv), 1, "__alignof__(S3625C32)");
  }
}
static Arrange_To_Call_Me vS3625C32(Test_S3625C32, "S3625C32", 1);

#else // __cplusplus

extern VTBL_ENTRY _ZTI8S3625C32[];
VTBL_ENTRY *P__ZTI8S3625C32 = _ZTI8S3625C32; 
Class_Descriptor cd_S3625C32 = {  "S3625C32", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  1, // object size
  NSPAIRA(_ZTI8S3625C32),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  S3625C31  {
  void *s3625c31f0;
  int s3625c31f1[2];
  ::S3625C32 s3625c31f2;
  void  mf3625c31(); // _ZN8S3625C319mf3625c31Ev
};
//SIG(-1 S3625C31) C1{ m Fp Fi[2] FC2{ m}}


void  S3625C31 ::mf3625c31(){}

static void Test_S3625C31()
{
  {
    init_simple_test("S3625C31");
    S3625C31 lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S3625C31)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3625C31)");
    check_field_offset(lv, s3625c31f0, 0, "S3625C31.s3625c31f0");
    check_field_offset(lv, s3625c31f1, ABISELECT(8,4), "S3625C31.s3625c31f1");
    check_field_offset(lv, s3625c31f2, ABISELECT(16,12), "S3625C31.s3625c31f2");
  }
}
static Arrange_To_Call_Me vS3625C31(Test_S3625C31, "S3625C31", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3625C28_nt  {
  void *s3625c28f0;
  ::S3625C13_nt s3625c28f1;
  __tsi64 s3625c28f2[2];
  int s3625c28f3;
  __tsi64 s3625c28f4;
  int s3625c28f5[2];
  char s3625c28f6;
  ::S3625C18_nt s3625c28f7;
  ::S3625C18_nt s3625c28f8;
  __tsi64 s3625c28f9[5];
  char s3625c28f10;
  int s3625c28f11;
  ::S3625C25 s3625c28f12;
  ::S3625C25 s3625c28f13;
  ::S3625C25 s3625c28f14;
  ::S3625C25 s3625c28f15;
  ::S3625C31 s3625c28f16;
  int s3625c28f17[2];
  void  mf3625c28(); // _ZN11S3625C28_nt9mf3625c28Ev
};
//SIG(-1 S3625C28_nt) C1{ m Fp FC2{ m FC3{ FL[4]}} FL[2] Fi FL Fi[2] Fc FC4{ m Fp Fi FC5{ m}} FC4 FL[5] Fc Fi FC6{ m Fp Fi[2] FC5} FC6 FC6 FC6 FC7{ m Fp Fi[2] FC8{ m}} Fi[2]}


void  S3625C28_nt ::mf3625c28(){}

//skip512 S3625C28_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3625C2  : S3625C3_nt {
  int s3625c2f0[3];
  ::S3625C10_nt s3625c2f1;
  ::S3625C11_nt s3625c2f2;
  int s3625c2f3[3];
  void *s3625c2f4;
  char s3625c2f5[3];
  ::S3625C12_nt s3625c2f6;
  int s3625c2f7;
  ::S3625C15_nt s3625c2f8;
  void *s3625c2f9;
  int s3625c2f10[2];
  ::S3625C13_nt s3625c2f11;
  ::S3625C13_nt s3625c2f12;
  int s3625c2f13[3];
  char s3625c2f14[6144];
  ::S3625C18_nt s3625c2f15;
  ::S3625C15_nt s3625c2f16;
  char s3625c2f17;
  int s3625c2f18;
  char s3625c2f19;
  int s3625c2f20[5];
  __tsi64 s3625c2f21[7];
  char s3625c2f22;
  __tsi64 s3625c2f23[9];
  int s3625c2f24[2];
  ::S3625C22 s3625c2f25;
  ::S3625C28_nt s3625c2f26;
  void *s3625c2f27[3];
  __tsi64 s3625c2f28[2];
  ::S3625C18_nt s3625c2f29;
  int s3625c2f30;
  char s3625c2f31;
  __tsi64 s3625c2f32;
  char s3625c2f33;
  __tsi64 s3625c2f34;
  virtual  ~S3625C2(); // _ZN7S3625C2D1Ev
  virtual void  v93(); // _ZN7S3625C23v93Ev
  virtual void  v94(); // _ZN7S3625C23v94Ev
  virtual void  v95(); // _ZN7S3625C23v95Ev
  virtual void  v96(); // _ZN7S3625C23v96Ev
  virtual void  v97(); // _ZN7S3625C23v97Ev
  virtual void  v98(); // _ZN7S3625C23v98Ev
  virtual void  v99(); // _ZN7S3625C23v99Ev
  virtual void  v100(); // _ZN7S3625C24v100Ev
  virtual void  v101(); // _ZN7S3625C24v101Ev
  virtual void  v102(); // _ZN7S3625C24v102Ev
  virtual void  v103(); // _ZN7S3625C24v103Ev
  virtual void  v104(); // _ZN7S3625C24v104Ev
  virtual void  v105(); // _ZN7S3625C24v105Ev
  virtual void  v106(); // _ZN7S3625C24v106Ev
  virtual void  v107(); // _ZN7S3625C24v107Ev
  virtual void  v108(); // _ZN7S3625C24v108Ev
  virtual void  v109(); // _ZN7S3625C24v109Ev
  virtual void  v110(); // _ZN7S3625C24v110Ev
  virtual void  v111(); // _ZN7S3625C24v111Ev
  virtual void  v112(); // _ZN7S3625C24v112Ev
  virtual void  v113(); // _ZN7S3625C24v113Ev
  virtual void  v114(); // _ZN7S3625C24v114Ev
  virtual void  v115(); // _ZN7S3625C24v115Ev
  virtual void  v116(); // _ZN7S3625C24v116Ev
  virtual void  v117(); // _ZN7S3625C24v117Ev
  virtual void  v118(); // _ZN7S3625C24v118Ev
  virtual void  v119(); // _ZN7S3625C24v119Ev
  virtual void  v120(); // _ZN7S3625C24v120Ev
  virtual void  v121(); // _ZN7S3625C24v121Ev
  virtual void  v122(); // _ZN7S3625C24v122Ev
  virtual void  v123(); // _ZN7S3625C24v123Ev
  virtual void  v124(); // _ZN7S3625C24v124Ev
  virtual void  v125(); // _ZN7S3625C24v125Ev
  virtual void  v126(); // _ZN7S3625C24v126Ev
  virtual void  v127(); // _ZN7S3625C24v127Ev
  virtual void  v128(); // _ZN7S3625C24v128Ev
  virtual void  v129(); // _ZN7S3625C24v129Ev
  virtual void  v130(); // _ZN7S3625C24v130Ev
  virtual void  v131(); // _ZN7S3625C24v131Ev
  virtual void  v132(); // _ZN7S3625C24v132Ev
  virtual void  v133(); // _ZN7S3625C24v133Ev
  virtual void  v134(); // _ZN7S3625C24v134Ev
  virtual void  v135(); // _ZN7S3625C24v135Ev
  virtual void  v136(); // _ZN7S3625C24v136Ev
  virtual void  v137(); // _ZN7S3625C24v137Ev
  virtual void  v138(); // _ZN7S3625C24v138Ev
  virtual void  v139(); // _ZN7S3625C24v139Ev
  virtual void  v140(); // _ZN7S3625C24v140Ev
  virtual void  v141(); // _ZN7S3625C24v141Ev
  virtual void  v142(); // _ZN7S3625C24v142Ev
  virtual void  v143(); // _ZN7S3625C24v143Ev
  virtual void  v144(); // _ZN7S3625C24v144Ev
  virtual void  v145(); // _ZN7S3625C24v145Ev
  virtual void  v146(); // _ZN7S3625C24v146Ev
  virtual void  v147(); // _ZN7S3625C24v147Ev
  virtual void  v148(); // _ZN7S3625C24v148Ev
  virtual void  v149(); // _ZN7S3625C24v149Ev
  virtual void  v150(); // _ZN7S3625C24v150Ev
  virtual void  v151(); // _ZN7S3625C24v151Ev
  virtual void  v152(); // _ZN7S3625C24v152Ev
  virtual void  v153(); // _ZN7S3625C24v153Ev
  virtual void  v154(); // _ZN7S3625C24v154Ev
  virtual void  v155(); // _ZN7S3625C24v155Ev
  virtual void  v156(); // _ZN7S3625C24v156Ev
  virtual void  v157(); // _ZN7S3625C24v157Ev
  virtual void  v158(); // _ZN7S3625C24v158Ev
  virtual void  v159(); // _ZN7S3625C24v159Ev
  virtual void  v160(); // _ZN7S3625C24v160Ev
  virtual void  v161(); // _ZN7S3625C24v161Ev
  virtual void  v162(); // _ZN7S3625C24v162Ev
  virtual void  v163(); // _ZN7S3625C24v163Ev
  virtual void  v164(); // _ZN7S3625C24v164Ev
  virtual void  v165(); // _ZN7S3625C24v165Ev
  virtual void  v166(); // _ZN7S3625C24v166Ev
  virtual void  v167(); // _ZN7S3625C24v167Ev
  virtual void  v168(); // _ZN7S3625C24v168Ev
  virtual void  v169(); // _ZN7S3625C24v169Ev
  virtual void  v170(); // _ZN7S3625C24v170Ev
  virtual void  v171(); // _ZN7S3625C24v171Ev
  virtual void  v172(); // _ZN7S3625C24v172Ev
  virtual void  v173(); // _ZN7S3625C24v173Ev
  virtual void  v174(); // _ZN7S3625C24v174Ev
  virtual void  v175(); // _ZN7S3625C24v175Ev
  virtual void  v176(); // _ZN7S3625C24v176Ev
  virtual void  v177(); // _ZN7S3625C24v177Ev
  virtual void  v178(); // _ZN7S3625C24v178Ev
  virtual void  v179(); // _ZN7S3625C24v179Ev
  virtual void  v180(); // _ZN7S3625C24v180Ev
  virtual void  v181(); // _ZN7S3625C24v181Ev
  virtual void  v182(); // _ZN7S3625C24v182Ev
  virtual void  v183(); // _ZN7S3625C24v183Ev
  virtual void  v184(); // _ZN7S3625C24v184Ev
  virtual void  v185(); // _ZN7S3625C24v185Ev
  virtual void  v186(); // _ZN7S3625C24v186Ev
  virtual void  v187(); // _ZN7S3625C24v187Ev
  virtual void  v188(); // _ZN7S3625C24v188Ev
  virtual void  v189(); // _ZN7S3625C24v189Ev
  S3625C2(); // tgen
};
//SIG(-1 S3625C2) C1{ BC2{ vd m FC3{ m Fp Fi FC4{ m} FC5{ m}} FC3 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 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 Fi[3] FC6{ m Fc Fl[2] Fs[12] Fc[5]} FC7{ m Fc Fl[4] Fi[4]} Fi[3] Fp Fc[3] FC8{ m FC9{ m FC10{ FL[4]}} Fc Fp Fi[3]} Fi FC11{ m Fp Fi[2] FC5} Fp Fi[2] FC9 FC9 Fi[3] Fc[6144] FC12{ m Fp Fi FC13{ m}} FC11 Fc Fi Fc Fi[5] FL[7] Fc FL[9] Fi[2] FC14{ BC15{ m FC16{ m Fc[11]} Fi[7] FL} Fi FC17{ m Fp Fi[2] FC13} FC16 Fi} FC18{ m Fp FC9 FL[2] Fi FL Fi[2] Fc FC12 FC12 FL[5] Fc Fi FC17 FC17 FC17 FC17 FC19{ m Fp Fi[2] FC20{ m}} Fi[2]} Fp[3] FL[2] FC12 Fi Fc FL Fc FL}


 S3625C2 ::~S3625C2(){ note_dtor("S3625C2", this);}
void  S3625C2 ::v93(){vfunc_called(this, "_ZN7S3625C23v93Ev");}
void  S3625C2 ::v94(){vfunc_called(this, "_ZN7S3625C23v94Ev");}
void  S3625C2 ::v95(){vfunc_called(this, "_ZN7S3625C23v95Ev");}
void  S3625C2 ::v96(){vfunc_called(this, "_ZN7S3625C23v96Ev");}
void  S3625C2 ::v97(){vfunc_called(this, "_ZN7S3625C23v97Ev");}
void  S3625C2 ::v98(){vfunc_called(this, "_ZN7S3625C23v98Ev");}
void  S3625C2 ::v99(){vfunc_called(this, "_ZN7S3625C23v99Ev");}
void  S3625C2 ::v100(){vfunc_called(this, "_ZN7S3625C24v100Ev");}
void  S3625C2 ::v101(){vfunc_called(this, "_ZN7S3625C24v101Ev");}
void  S3625C2 ::v102(){vfunc_called(this, "_ZN7S3625C24v102Ev");}
void  S3625C2 ::v103(){vfunc_called(this, "_ZN7S3625C24v103Ev");}
void  S3625C2 ::v104(){vfunc_called(this, "_ZN7S3625C24v104Ev");}
void  S3625C2 ::v105(){vfunc_called(this, "_ZN7S3625C24v105Ev");}
void  S3625C2 ::v106(){vfunc_called(this, "_ZN7S3625C24v106Ev");}
void  S3625C2 ::v107(){vfunc_called(this, "_ZN7S3625C24v107Ev");}
void  S3625C2 ::v108(){vfunc_called(this, "_ZN7S3625C24v108Ev");}
void  S3625C2 ::v109(){vfunc_called(this, "_ZN7S3625C24v109Ev");}
void  S3625C2 ::v110(){vfunc_called(this, "_ZN7S3625C24v110Ev");}
void  S3625C2 ::v111(){vfunc_called(this, "_ZN7S3625C24v111Ev");}
void  S3625C2 ::v112(){vfunc_called(this, "_ZN7S3625C24v112Ev");}
void  S3625C2 ::v113(){vfunc_called(this, "_ZN7S3625C24v113Ev");}
void  S3625C2 ::v114(){vfunc_called(this, "_ZN7S3625C24v114Ev");}
void  S3625C2 ::v115(){vfunc_called(this, "_ZN7S3625C24v115Ev");}
void  S3625C2 ::v116(){vfunc_called(this, "_ZN7S3625C24v116Ev");}
void  S3625C2 ::v117(){vfunc_called(this, "_ZN7S3625C24v117Ev");}
void  S3625C2 ::v118(){vfunc_called(this, "_ZN7S3625C24v118Ev");}
void  S3625C2 ::v119(){vfunc_called(this, "_ZN7S3625C24v119Ev");}
void  S3625C2 ::v120(){vfunc_called(this, "_ZN7S3625C24v120Ev");}
void  S3625C2 ::v121(){vfunc_called(this, "_ZN7S3625C24v121Ev");}
void  S3625C2 ::v122(){vfunc_called(this, "_ZN7S3625C24v122Ev");}
void  S3625C2 ::v123(){vfunc_called(this, "_ZN7S3625C24v123Ev");}
void  S3625C2 ::v124(){vfunc_called(this, "_ZN7S3625C24v124Ev");}
void  S3625C2 ::v125(){vfunc_called(this, "_ZN7S3625C24v125Ev");}
void  S3625C2 ::v126(){vfunc_called(this, "_ZN7S3625C24v126Ev");}
void  S3625C2 ::v127(){vfunc_called(this, "_ZN7S3625C24v127Ev");}
void  S3625C2 ::v128(){vfunc_called(this, "_ZN7S3625C24v128Ev");}
void  S3625C2 ::v129(){vfunc_called(this, "_ZN7S3625C24v129Ev");}
void  S3625C2 ::v130(){vfunc_called(this, "_ZN7S3625C24v130Ev");}
void  S3625C2 ::v131(){vfunc_called(this, "_ZN7S3625C24v131Ev");}
void  S3625C2 ::v132(){vfunc_called(this, "_ZN7S3625C24v132Ev");}
void  S3625C2 ::v133(){vfunc_called(this, "_ZN7S3625C24v133Ev");}
void  S3625C2 ::v134(){vfunc_called(this, "_ZN7S3625C24v134Ev");}
void  S3625C2 ::v135(){vfunc_called(this, "_ZN7S3625C24v135Ev");}
void  S3625C2 ::v136(){vfunc_called(this, "_ZN7S3625C24v136Ev");}
void  S3625C2 ::v137(){vfunc_called(this, "_ZN7S3625C24v137Ev");}
void  S3625C2 ::v138(){vfunc_called(this, "_ZN7S3625C24v138Ev");}
void  S3625C2 ::v139(){vfunc_called(this, "_ZN7S3625C24v139Ev");}
void  S3625C2 ::v140(){vfunc_called(this, "_ZN7S3625C24v140Ev");}
void  S3625C2 ::v141(){vfunc_called(this, "_ZN7S3625C24v141Ev");}
void  S3625C2 ::v142(){vfunc_called(this, "_ZN7S3625C24v142Ev");}
void  S3625C2 ::v143(){vfunc_called(this, "_ZN7S3625C24v143Ev");}
void  S3625C2 ::v144(){vfunc_called(this, "_ZN7S3625C24v144Ev");}
void  S3625C2 ::v145(){vfunc_called(this, "_ZN7S3625C24v145Ev");}
void  S3625C2 ::v146(){vfunc_called(this, "_ZN7S3625C24v146Ev");}
void  S3625C2 ::v147(){vfunc_called(this, "_ZN7S3625C24v147Ev");}
void  S3625C2 ::v148(){vfunc_called(this, "_ZN7S3625C24v148Ev");}
void  S3625C2 ::v149(){vfunc_called(this, "_ZN7S3625C24v149Ev");}
void  S3625C2 ::v150(){vfunc_called(this, "_ZN7S3625C24v150Ev");}
void  S3625C2 ::v151(){vfunc_called(this, "_ZN7S3625C24v151Ev");}
void  S3625C2 ::v152(){vfunc_called(this, "_ZN7S3625C24v152Ev");}
void  S3625C2 ::v153(){vfunc_called(this, "_ZN7S3625C24v153Ev");}
void  S3625C2 ::v154(){vfunc_called(this, "_ZN7S3625C24v154Ev");}
void  S3625C2 ::v155(){vfunc_called(this, "_ZN7S3625C24v155Ev");}
void  S3625C2 ::v156(){vfunc_called(this, "_ZN7S3625C24v156Ev");}
void  S3625C2 ::v157(){vfunc_called(this, "_ZN7S3625C24v157Ev");}
void  S3625C2 ::v158(){vfunc_called(this, "_ZN7S3625C24v158Ev");}
void  S3625C2 ::v159(){vfunc_called(this, "_ZN7S3625C24v159Ev");}
void  S3625C2 ::v160(){vfunc_called(this, "_ZN7S3625C24v160Ev");}
void  S3625C2 ::v161(){vfunc_called(this, "_ZN7S3625C24v161Ev");}
void  S3625C2 ::v162(){vfunc_called(this, "_ZN7S3625C24v162Ev");}
void  S3625C2 ::v163(){vfunc_called(this, "_ZN7S3625C24v163Ev");}
void  S3625C2 ::v164(){vfunc_called(this, "_ZN7S3625C24v164Ev");}
void  S3625C2 ::v165(){vfunc_called(this, "_ZN7S3625C24v165Ev");}
void  S3625C2 ::v166(){vfunc_called(this, "_ZN7S3625C24v166Ev");}
void  S3625C2 ::v167(){vfunc_called(this, "_ZN7S3625C24v167Ev");}
void  S3625C2 ::v168(){vfunc_called(this, "_ZN7S3625C24v168Ev");}
void  S3625C2 ::v169(){vfunc_called(this, "_ZN7S3625C24v169Ev");}
void  S3625C2 ::v170(){vfunc_called(this, "_ZN7S3625C24v170Ev");}
void  S3625C2 ::v171(){vfunc_called(this, "_ZN7S3625C24v171Ev");}
void  S3625C2 ::v172(){vfunc_called(this, "_ZN7S3625C24v172Ev");}
void  S3625C2 ::v173(){vfunc_called(this, "_ZN7S3625C24v173Ev");}
void  S3625C2 ::v174(){vfunc_called(this, "_ZN7S3625C24v174Ev");}
void  S3625C2 ::v175(){vfunc_called(this, "_ZN7S3625C24v175Ev");}
void  S3625C2 ::v176(){vfunc_called(this, "_ZN7S3625C24v176Ev");}
void  S3625C2 ::v177(){vfunc_called(this, "_ZN7S3625C24v177Ev");}
void  S3625C2 ::v178(){vfunc_called(this, "_ZN7S3625C24v178Ev");}
void  S3625C2 ::v179(){vfunc_called(this, "_ZN7S3625C24v179Ev");}
void  S3625C2 ::v180(){vfunc_called(this, "_ZN7S3625C24v180Ev");}
void  S3625C2 ::v181(){vfunc_called(this, "_ZN7S3625C24v181Ev");}
void  S3625C2 ::v182(){vfunc_called(this, "_ZN7S3625C24v182Ev");}
void  S3625C2 ::v183(){vfunc_called(this, "_ZN7S3625C24v183Ev");}
void  S3625C2 ::v184(){vfunc_called(this, "_ZN7S3625C24v184Ev");}
void  S3625C2 ::v185(){vfunc_called(this, "_ZN7S3625C24v185Ev");}
void  S3625C2 ::v186(){vfunc_called(this, "_ZN7S3625C24v186Ev");}
void  S3625C2 ::v187(){vfunc_called(this, "_ZN7S3625C24v187Ev");}
void  S3625C2 ::v188(){vfunc_called(this, "_ZN7S3625C24v188Ev");}
void  S3625C2 ::v189(){vfunc_called(this, "_ZN7S3625C24v189Ev");}
S3625C2 ::S3625C2(){ note_ctor("S3625C2", this);} // tgen

static void Test_S3625C2()
{
  extern Class_Descriptor cd_S3625C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(905,1760)];
    init_test(&cd_S3625C2, buf);
    S3625C2 *dp, &lv = *(dp=new (buf) S3625C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(7232,7036), "sizeof(S3625C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3625C2)");
    check_base_class_offset(lv, (S3625C3_nt*), 0, "S3625C2");
    check_field_offset(lv, s3625c2f0, ABISELECT(44,32), "S3625C2.s3625c2f0");
    check_field_offset(lv, s3625c2f1, ABISELECT(56,44), "S3625C2.s3625c2f1");
    check_field_offset(lv, s3625c2f2, ABISELECT(112,88), "S3625C2.s3625c2f2");
    check_field_offset(lv, s3625c2f3, ABISELECT(168,124), "S3625C2.s3625c2f3");
    check_field_offset(lv, s3625c2f4, ABISELECT(184,136), "S3625C2.s3625c2f4");
    check_field_offset(lv, s3625c2f5, ABISELECT(192,140), "S3625C2.s3625c2f5");
    check_field_offset(lv, s3625c2f6, ABISELECT(200,144), "S3625C2.s3625c2f6");
    check_field_offset(lv, s3625c2f7, ABISELECT(264,196), "S3625C2.s3625c2f7");
    check_field_offset(lv, s3625c2f8, ABISELECT(272,200), "S3625C2.s3625c2f8");
    check_field_offset(lv, s3625c2f9, ABISELECT(296,216), "S3625C2.s3625c2f9");
    check_field_offset(lv, s3625c2f10, ABISELECT(304,220), "S3625C2.s3625c2f10");
    check_field_offset(lv, s3625c2f11, ABISELECT(312,228), "S3625C2.s3625c2f11");
    check_field_offset(lv, s3625c2f12, ABISELECT(344,260), "S3625C2.s3625c2f12");
    check_field_offset(lv, s3625c2f13, ABISELECT(376,292), "S3625C2.s3625c2f13");
    check_field_offset(lv, s3625c2f14, ABISELECT(388,304), "S3625C2.s3625c2f14");
    check_field_offset(lv, s3625c2f15, ABISELECT(6536,6448), "S3625C2.s3625c2f15");
    check_field_offset(lv, s3625c2f16, ABISELECT(6552,6460), "S3625C2.s3625c2f16");
    check_field_offset(lv, s3625c2f17, ABISELECT(6576,6476), "S3625C2.s3625c2f17");
    check_field_offset(lv, s3625c2f18, ABISELECT(6580,6480), "S3625C2.s3625c2f18");
    check_field_offset(lv, s3625c2f19, ABISELECT(6584,6484), "S3625C2.s3625c2f19");
    check_field_offset(lv, s3625c2f20, ABISELECT(6588,6488), "S3625C2.s3625c2f20");
    check_field_offset(lv, s3625c2f21, ABISELECT(6608,6508), "S3625C2.s3625c2f21");
    check_field_offset(lv, s3625c2f22, ABISELECT(6664,6564), "S3625C2.s3625c2f22");
    check_field_offset(lv, s3625c2f23, ABISELECT(6672,6568), "S3625C2.s3625c2f23");
    check_field_offset(lv, s3625c2f24, ABISELECT(6744,6640), "S3625C2.s3625c2f24");
    check_field_offset(lv, s3625c2f25, ABISELECT(6752,6648), "S3625C2.s3625c2f25");
    check_field_offset(lv, s3625c2f26, ABISELECT(6848,6732), "S3625C2.s3625c2f26");
    check_field_offset(lv, s3625c2f27, ABISELECT(7144,6968), "S3625C2.s3625c2f27");
    check_field_offset(lv, s3625c2f28, ABISELECT(7168,6980), "S3625C2.s3625c2f28");
    check_field_offset(lv, s3625c2f29, ABISELECT(7184,6996), "S3625C2.s3625c2f29");
    check_field_offset(lv, s3625c2f30, ABISELECT(7200,7008), "S3625C2.s3625c2f30");
    check_field_offset(lv, s3625c2f31, ABISELECT(7204,7012), "S3625C2.s3625c2f31");
    check_field_offset(lv, s3625c2f32, ABISELECT(7208,7016), "S3625C2.s3625c2f32");
    check_field_offset(lv, s3625c2f33, ABISELECT(7216,7024), "S3625C2.s3625c2f33");
    check_field_offset(lv, s3625c2f34, ABISELECT(7224,7028), "S3625C2.s3625c2f34");
    test_class_info(&lv, &cd_S3625C2);
    dp->~S3625C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3625C2(Test_S3625C2, "S3625C2", ABISELECT(7232,7036));

#else // __cplusplus

extern void _ZN7S3625C2C1Ev();
extern void _ZN7S3625C2D1Ev();
Name_Map name_map_S3625C2[] = {
  NSPAIR(_ZN7S3625C2C1Ev),
  NSPAIR(_ZN7S3625C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3625C3_nt;
extern VTBL_ENTRY _ZTI10S3625C3_nt[];
extern  VTBL_ENTRY _ZTV10S3625C3_nt[];
static Base_Class bases_S3625C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3625C3_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 _ZTI7S3625C2[];
extern void _ZN7S3625C2D1Ev();
extern void _ZN7S3625C2D0Ev();
extern void _ZN7S3625C23v93Ev();
extern void _ZN7S3625C23v94Ev();
extern void _ZN7S3625C23v95Ev();
extern void _ZN7S3625C23v96Ev();
extern void _ZN7S3625C23v97Ev();
extern void _ZN7S3625C23v98Ev();
extern void _ZN7S3625C23v99Ev();
extern void _ZN7S3625C24v100Ev();
extern void _ZN7S3625C24v101Ev();
extern void _ZN7S3625C24v102Ev();
extern void _ZN7S3625C24v103Ev();
extern void _ZN7S3625C24v104Ev();
extern void _ZN7S3625C24v105Ev();
extern void _ZN7S3625C24v106Ev();
extern void _ZN7S3625C24v107Ev();
extern void _ZN7S3625C24v108Ev();
extern void _ZN7S3625C24v109Ev();
extern void _ZN7S3625C24v110Ev();
extern void _ZN7S3625C24v111Ev();
extern void _ZN7S3625C24v112Ev();
extern void _ZN7S3625C24v113Ev();
extern void _ZN7S3625C24v114Ev();
extern void _ZN7S3625C24v115Ev();
extern void _ZN7S3625C24v116Ev();
extern void _ZN7S3625C24v117Ev();
extern void _ZN7S3625C24v118Ev();
extern void _ZN7S3625C24v119Ev();
extern void _ZN7S3625C24v120Ev();
extern void _ZN7S3625C24v121Ev();
extern void _ZN7S3625C24v122Ev();
extern void _ZN7S3625C24v123Ev();
extern void _ZN7S3625C24v124Ev();
extern void _ZN7S3625C24v125Ev();
extern void _ZN7S3625C24v126Ev();
extern void _ZN7S3625C24v127Ev();
extern void _ZN7S3625C24v128Ev();
extern void _ZN7S3625C24v129Ev();
extern void _ZN7S3625C24v130Ev();
extern void _ZN7S3625C24v131Ev();
extern void _ZN7S3625C24v132Ev();
extern void _ZN7S3625C24v133Ev();
extern void _ZN7S3625C24v134Ev();
extern void _ZN7S3625C24v135Ev();
extern void _ZN7S3625C24v136Ev();
extern void _ZN7S3625C24v137Ev();
extern void _ZN7S3625C24v138Ev();
extern void _ZN7S3625C24v139Ev();
extern void _ZN7S3625C24v140Ev();
extern void _ZN7S3625C24v141Ev();
extern void _ZN7S3625C24v142Ev();
extern void _ZN7S3625C24v143Ev();
extern void _ZN7S3625C24v144Ev();
extern void _ZN7S3625C24v145Ev();
extern void _ZN7S3625C24v146Ev();
extern void _ZN7S3625C24v147Ev();
extern void _ZN7S3625C24v148Ev();
extern void _ZN7S3625C24v149Ev();
extern void _ZN7S3625C24v150Ev();
extern void _ZN7S3625C24v151Ev();
extern void _ZN7S3625C24v152Ev();
extern void _ZN7S3625C24v153Ev();
extern void _ZN7S3625C24v154Ev();
extern void _ZN7S3625C24v155Ev();
extern void _ZN7S3625C24v156Ev();
extern void _ZN7S3625C24v157Ev();
extern void _ZN7S3625C24v158Ev();
extern void _ZN7S3625C24v159Ev();
extern void _ZN7S3625C24v160Ev();
extern void _ZN7S3625C24v161Ev();
extern void _ZN7S3625C24v162Ev();
extern void _ZN7S3625C24v163Ev();
extern void _ZN7S3625C24v164Ev();
extern void _ZN7S3625C24v165Ev();
extern void _ZN7S3625C24v166Ev();
extern void _ZN7S3625C24v167Ev();
extern void _ZN7S3625C24v168Ev();
extern void _ZN7S3625C24v169Ev();
extern void _ZN7S3625C24v170Ev();
extern void _ZN7S3625C24v171Ev();
extern void _ZN7S3625C24v172Ev();
extern void _ZN7S3625C24v173Ev();
extern void _ZN7S3625C24v174Ev();
extern void _ZN7S3625C24v175Ev();
extern void _ZN7S3625C24v176Ev();
extern void _ZN7S3625C24v177Ev();
extern void _ZN7S3625C24v178Ev();
extern void _ZN7S3625C24v179Ev();
extern void _ZN7S3625C24v180Ev();
extern void _ZN7S3625C24v181Ev();
extern void _ZN7S3625C24v182Ev();
extern void _ZN7S3625C24v183Ev();
extern void _ZN7S3625C24v184Ev();
extern void _ZN7S3625C24v185Ev();
extern void _ZN7S3625C24v186Ev();
extern void _ZN7S3625C24v187Ev();
extern void _ZN7S3625C24v188Ev();
extern void _ZN7S3625C24v189Ev();
static  VTBL_ENTRY vtc_S3625C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3625C2[0]),
  (VTBL_ENTRY)&_ZN7S3625C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3625C2D0Ev,
  (VTBL_ENTRY)&_ZN7S3625C23v93Ev,
  (VTBL_ENTRY)&_ZN7S3625C23v94Ev,
  (VTBL_ENTRY)&_ZN7S3625C23v95Ev,
  (VTBL_ENTRY)&_ZN7S3625C23v96Ev,
  (VTBL_ENTRY)&_ZN7S3625C23v97Ev,
  (VTBL_ENTRY)&_ZN7S3625C23v98Ev,
  (VTBL_ENTRY)&_ZN7S3625C23v99Ev,
  (VTBL_ENTRY)&_ZN7S3625C24v100Ev,
  (VTBL_ENTRY)&_ZN7S3625C24v101Ev,
  (VTBL_ENTRY)&_ZN7S3625C24v102Ev,
  (VTBL_ENTRY)&_ZN7S3625C24v103Ev,
  (VTBL_ENTRY)&_ZN7S3625C24v104Ev,
  (VTBL_ENTRY)&_ZN7S3625C24v105Ev,
  (VTBL_ENTRY)&_ZN7S3625C24v106Ev,
  (VTBL_ENTRY)&_ZN7S3625C24v107Ev,
  (VTBL_ENTRY)&_ZN7S3625C24v108Ev,
  (VTBL_ENTRY)&_ZN7S3625C24v109Ev,
  (VTBL_ENTRY)&_ZN7S3625C24v110Ev,
  (VTBL_ENTRY)&_ZN7S3625C24v111Ev,
  (VTBL_ENTRY)&_ZN7S3625C24v112Ev,
  (VTBL_ENTRY)&_ZN7S3625C24v113Ev,
  (VTBL_ENTRY)&_ZN7S3625C24v114Ev,
  (VTBL_ENTRY)&_ZN7S3625C24v115Ev,
  (VTBL_ENTRY)&_ZN7S3625C24v116Ev,
  (VTBL_ENTRY)&_ZN7S3625C24v117Ev,
  (VTBL_ENTRY)&_ZN7S3625C24v118Ev,
  (VTBL_ENTRY)&_ZN7S3625C24v119Ev,
  (VTBL_ENTRY)&_ZN7S3625C24v120Ev,
  (VTBL_ENTRY)&_ZN7S3625C24v121Ev,
  (VTBL_ENTRY)&_ZN7S3625C24v122Ev,
  (VTBL_ENTRY)&_ZN7S3625C24v123Ev,
  (VTBL_ENTRY)&_ZN7S3625C24v124Ev,
  (VTBL_ENTRY)&_ZN7S3625C24v125Ev,
  (VTBL_ENTRY)&_ZN7S3625C24v126Ev,
  (VTBL_ENTRY)&_ZN7S3625C24v127Ev,
  (VTBL_ENTRY)&_ZN7S3625C24v128Ev,
  (VTBL_ENTRY)&_ZN7S3625C24v129Ev,
  (VTBL_ENTRY)&_ZN7S3625C24v130Ev,
  (VTBL_ENTRY)&_ZN7S3625C24v131Ev,
  (VTBL_ENTRY)&_ZN7S3625C24v132Ev,
  (VTBL_ENTRY)&_ZN7S3625C24v133Ev,
  (VTBL_ENTRY)&_ZN7S3625C24v134Ev,
  (VTBL_ENTRY)&_ZN7S3625C24v135Ev,
  (VTBL_ENTRY)&_ZN7S3625C24v136Ev,
  (VTBL_ENTRY)&_ZN7S3625C24v137Ev,
  (VTBL_ENTRY)&_ZN7S3625C24v138Ev,
  (VTBL_ENTRY)&_ZN7S3625C24v139Ev,
  (VTBL_ENTRY)&_ZN7S3625C24v140Ev,
  (VTBL_ENTRY)&_ZN7S3625C24v141Ev,
  (VTBL_ENTRY)&_ZN7S3625C24v142Ev,
  (VTBL_ENTRY)&_ZN7S3625C24v143Ev,
  (VTBL_ENTRY)&_ZN7S3625C24v144Ev,
  (VTBL_ENTRY)&_ZN7S3625C24v145Ev,
  (VTBL_ENTRY)&_ZN7S3625C24v146Ev,
  (VTBL_ENTRY)&_ZN7S3625C24v147Ev,
  (VTBL_ENTRY)&_ZN7S3625C24v148Ev,
  (VTBL_ENTRY)&_ZN7S3625C24v149Ev,
  (VTBL_ENTRY)&_ZN7S3625C24v150Ev,
  (VTBL_ENTRY)&_ZN7S3625C24v151Ev,
  (VTBL_ENTRY)&_ZN7S3625C24v152Ev,
  (VTBL_ENTRY)&_ZN7S3625C24v153Ev,
  (VTBL_ENTRY)&_ZN7S3625C24v154Ev,
  (VTBL_ENTRY)&_ZN7S3625C24v155Ev,
  (VTBL_ENTRY)&_ZN7S3625C24v156Ev,
  (VTBL_ENTRY)&_ZN7S3625C24v157Ev,
  (VTBL_ENTRY)&_ZN7S3625C24v158Ev,
  (VTBL_ENTRY)&_ZN7S3625C24v159Ev,
  (VTBL_ENTRY)&_ZN7S3625C24v160Ev,
  (VTBL_ENTRY)&_ZN7S3625C24v161Ev,
  (VTBL_ENTRY)&_ZN7S3625C24v162Ev,
  (VTBL_ENTRY)&_ZN7S3625C24v163Ev,
  (VTBL_ENTRY)&_ZN7S3625C24v164Ev,
  (VTBL_ENTRY)&_ZN7S3625C24v165Ev,
  (VTBL_ENTRY)&_ZN7S3625C24v166Ev,
  (VTBL_ENTRY)&_ZN7S3625C24v167Ev,
  (VTBL_ENTRY)&_ZN7S3625C24v168Ev,
  (VTBL_ENTRY)&_ZN7S3625C24v169Ev,
  (VTBL_ENTRY)&_ZN7S3625C24v170Ev,
  (VTBL_ENTRY)&_ZN7S3625C24v171Ev,
  (VTBL_ENTRY)&_ZN7S3625C24v172Ev,
  (VTBL_ENTRY)&_ZN7S3625C24v173Ev,
  (VTBL_ENTRY)&_ZN7S3625C24v174Ev,
  (VTBL_ENTRY)&_ZN7S3625C24v175Ev,
  (VTBL_ENTRY)&_ZN7S3625C24v176Ev,
  (VTBL_ENTRY)&_ZN7S3625C24v177Ev,
  (VTBL_ENTRY)&_ZN7S3625C24v178Ev,
  (VTBL_ENTRY)&_ZN7S3625C24v179Ev,
  (VTBL_ENTRY)&_ZN7S3625C24v180Ev,
  (VTBL_ENTRY)&_ZN7S3625C24v181Ev,
  (VTBL_ENTRY)&_ZN7S3625C24v182Ev,
  (VTBL_ENTRY)&_ZN7S3625C24v183Ev,
  (VTBL_ENTRY)&_ZN7S3625C24v184Ev,
  (VTBL_ENTRY)&_ZN7S3625C24v185Ev,
  (VTBL_ENTRY)&_ZN7S3625C24v186Ev,
  (VTBL_ENTRY)&_ZN7S3625C24v187Ev,
  (VTBL_ENTRY)&_ZN7S3625C24v188Ev,
  (VTBL_ENTRY)&_ZN7S3625C24v189Ev,
};
extern VTBL_ENTRY _ZTI7S3625C2[];
extern  VTBL_ENTRY _ZTV7S3625C2[];
Class_Descriptor cd_S3625C2 = {  "S3625C2", // class name
  bases_S3625C2, 1,
  &(vtc_S3625C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(7232,7036), // object size
  NSPAIRA(_ZTI7S3625C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3625C2),101, //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  S3625C33_nt  {
  void *s3625c33f0;
  void  mf3625c33(); // _ZN11S3625C33_nt9mf3625c33Ev
};
//SIG(-1 S3625C33_nt) C1{ m Fp}


void  S3625C33_nt ::mf3625c33(){}

//skip512 S3625C33_nt

#else // __cplusplus

extern VTBL_ENTRY _ZTI11S3625C33_nt[];
VTBL_ENTRY *P__ZTI11S3625C33_nt = _ZTI11S3625C33_nt; 
Class_Descriptor cd_S3625C33_nt = {  "S3625C33_nt", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI11S3625C33_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  S3625C1  : S3625C2 {
  void *s3625c1f0;
  ::S3625C33_nt s3625c1f1;
  __tsi64 s3625c1f2;
  ::S3625C18_nt s3625c1f3;
  int s3625c1f4;
  virtual  ~S3625C1(); // _ZN7S3625C1D1Ev
  virtual void  v1(); // _ZN7S3625C12v1Ev
  virtual void  v2(); // _ZN7S3625C12v2Ev
  virtual void  v3(); // _ZN7S3625C12v3Ev
  virtual void  v4(); // _ZN7S3625C12v4Ev
  virtual void  v5(); // _ZN7S3625C12v5Ev
  virtual void  v6(); // _ZN7S3625C12v6Ev
  virtual void  v7(); // _ZN7S3625C12v7Ev
  virtual void  v8(); // _ZN7S3625C12v8Ev
  virtual void  v9(); // _ZN7S3625C12v9Ev
  virtual void  v10(); // _ZN7S3625C13v10Ev
  virtual void  v11(); // _ZN7S3625C13v11Ev
  virtual void  v12(); // _ZN7S3625C13v12Ev
  virtual void  v13(); // _ZN7S3625C13v13Ev
  virtual void  v14(); // _ZN7S3625C13v14Ev
  virtual void  v15(); // _ZN7S3625C13v15Ev
  virtual void  v16(); // _ZN7S3625C13v16Ev
  virtual void  v17(); // _ZN7S3625C13v17Ev
  virtual void  v18(); // _ZN7S3625C13v18Ev
  virtual void  v19(); // _ZN7S3625C13v19Ev
  virtual void  v20(); // _ZN7S3625C13v20Ev
  virtual void  v21(); // _ZN7S3625C13v21Ev
  virtual void  v22(); // _ZN7S3625C13v22Ev
  virtual void  v23(); // _ZN7S3625C13v23Ev
  virtual void  v24(); // _ZN7S3625C13v24Ev
  virtual void  v25(); // _ZN7S3625C13v25Ev
  virtual void  v26(); // _ZN7S3625C13v26Ev
  virtual void  v27(); // _ZN7S3625C13v27Ev
  virtual void  v28(); // _ZN7S3625C13v28Ev
  virtual void  v29(); // _ZN7S3625C13v29Ev
  virtual void  v30(); // _ZN7S3625C13v30Ev
  virtual void  v31(); // _ZN7S3625C13v31Ev
  virtual void  v32(); // _ZN7S3625C13v32Ev
  virtual void  v33(); // _ZN7S3625C13v33Ev
  virtual void  v34(); // _ZN7S3625C13v34Ev
  virtual void  v35(); // _ZN7S3625C13v35Ev
  virtual void  v36(); // _ZN7S3625C13v36Ev
  virtual void  v37(); // _ZN7S3625C13v37Ev
  virtual void  v38(); // _ZN7S3625C13v38Ev
  virtual void  v39(); // _ZN7S3625C13v39Ev
  virtual void  v40(); // _ZN7S3625C13v40Ev
  virtual void  v41(); // _ZN7S3625C13v41Ev
  virtual void  v42(); // _ZN7S3625C13v42Ev
  virtual void  v43(); // _ZN7S3625C13v43Ev
  virtual void  v44(); // _ZN7S3625C13v44Ev
  virtual void  v45(); // _ZN7S3625C13v45Ev
  virtual void  v46(); // _ZN7S3625C13v46Ev
  virtual void  v47(); // _ZN7S3625C13v47Ev
  virtual void  v48(); // _ZN7S3625C13v48Ev
  virtual void  v49(); // _ZN7S3625C13v49Ev
  virtual void  v50(); // _ZN7S3625C13v50Ev
  virtual void  v51(); // _ZN7S3625C13v51Ev
  virtual void  v52(); // _ZN7S3625C13v52Ev
  virtual void  v53(); // _ZN7S3625C13v53Ev
  virtual void  v54(); // _ZN7S3625C13v54Ev
  virtual void  v55(); // _ZN7S3625C13v55Ev
  virtual void  v56(); // _ZN7S3625C13v56Ev
  virtual void  v57(); // _ZN7S3625C13v57Ev
  virtual void  v58(); // _ZN7S3625C13v58Ev
  virtual void  v59(); // _ZN7S3625C13v59Ev
  virtual void  v60(); // _ZN7S3625C13v60Ev
  virtual void  v61(); // _ZN7S3625C13v61Ev
  virtual void  v62(); // _ZN7S3625C13v62Ev
  virtual void  v63(); // _ZN7S3625C13v63Ev
  virtual void  v64(); // _ZN7S3625C13v64Ev
  virtual void  v65(); // _ZN7S3625C13v65Ev
  virtual void  v66(); // _ZN7S3625C13v66Ev
  virtual void  v67(); // _ZN7S3625C13v67Ev
  virtual void  v68(); // _ZN7S3625C13v68Ev
  virtual void  v69(); // _ZN7S3625C13v69Ev
  virtual void  v70(); // _ZN7S3625C13v70Ev
  virtual void  v71(); // _ZN7S3625C13v71Ev
  virtual void  v72(); // _ZN7S3625C13v72Ev
  virtual void  v73(); // _ZN7S3625C13v73Ev
  virtual void  v74(); // _ZN7S3625C13v74Ev
  virtual void  v75(); // _ZN7S3625C13v75Ev
  virtual void  v76(); // _ZN7S3625C13v76Ev
  virtual void  v77(); // _ZN7S3625C13v77Ev
  virtual void  v78(); // _ZN7S3625C13v78Ev
  virtual void  v79(); // _ZN7S3625C13v79Ev
  virtual void  v80(); // _ZN7S3625C13v80Ev
  virtual void  v81(); // _ZN7S3625C13v81Ev
  virtual void  v82(); // _ZN7S3625C13v82Ev
  virtual void  v83(); // _ZN7S3625C13v83Ev
  virtual void  v84(); // _ZN7S3625C13v84Ev
  virtual void  v85(); // _ZN7S3625C13v85Ev
  virtual void  v86(); // _ZN7S3625C13v86Ev
  virtual void  v87(); // _ZN7S3625C13v87Ev
  virtual void  v88(); // _ZN7S3625C13v88Ev
  virtual void  v89(); // _ZN7S3625C13v89Ev
  virtual void  v90(); // _ZN7S3625C13v90Ev
  virtual void  v91(); // _ZN7S3625C13v91Ev
  virtual void  v92(); // _ZN7S3625C13v92Ev
  S3625C1(); // tgen
};
//SIG(1 S3625C1) C1{ BC2{ BC3{ vd m FC4{ m Fp Fi FC5{ m} FC6{ m}} FC4 Fc} vd 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 v141 v142 v143 v144 v145 v146 v147 v148 v149 v150 v151 v152 v153 v154 v155 v156 v157 v158 v159 v160 v161 v162 v163 v164 v165 v166 v167 v168 v169 v170 v171 v172 v173 v174 v175 v176 v177 v178 v179 v180 v181 v182 v183 v184 v185 v186 v187 v188 v189 Fi[3] FC7{ m Fc Fl[2] Fs[12] Fc[5]} FC8{ m Fc Fl[4] Fi[4]} Fi[3] Fp Fc[3] FC9{ m FC10{ m FC11{ FL[4]}} Fc Fp Fi[3]} Fi FC12{ m Fp Fi[2] FC6} Fp Fi[2] FC10 FC10 Fi[3] Fc[6144] FC13{ m Fp Fi FC14{ m}} FC12 Fc Fi Fc Fi[5] FL[7] Fc FL[9] Fi[2] FC15{ BC16{ m FC17{ m Fc[11]} Fi[7] FL} Fi FC18{ m Fp Fi[2] FC14} FC17 Fi} FC19{ m Fp FC10 FL[2] Fi FL Fi[2] Fc FC13 FC13 FL[5] Fc Fi FC18 FC18 FC18 FC18 FC20{ m Fp Fi[2] FC21{ m}} Fi[2]} Fp[3] FL[2] FC13 Fi Fc FL Fc FL} 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 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 v91 v92 Fp FC22{ m Fp} FL FC13 Fi}


 S3625C1 ::~S3625C1(){ note_dtor("S3625C1", this);}
void  S3625C1 ::v1(){vfunc_called(this, "_ZN7S3625C12v1Ev");}
void  S3625C1 ::v2(){vfunc_called(this, "_ZN7S3625C12v2Ev");}
void  S3625C1 ::v3(){vfunc_called(this, "_ZN7S3625C12v3Ev");}
void  S3625C1 ::v4(){vfunc_called(this, "_ZN7S3625C12v4Ev");}
void  S3625C1 ::v5(){vfunc_called(this, "_ZN7S3625C12v5Ev");}
void  S3625C1 ::v6(){vfunc_called(this, "_ZN7S3625C12v6Ev");}
void  S3625C1 ::v7(){vfunc_called(this, "_ZN7S3625C12v7Ev");}
void  S3625C1 ::v8(){vfunc_called(this, "_ZN7S3625C12v8Ev");}
void  S3625C1 ::v9(){vfunc_called(this, "_ZN7S3625C12v9Ev");}
void  S3625C1 ::v10(){vfunc_called(this, "_ZN7S3625C13v10Ev");}
void  S3625C1 ::v11(){vfunc_called(this, "_ZN7S3625C13v11Ev");}
void  S3625C1 ::v12(){vfunc_called(this, "_ZN7S3625C13v12Ev");}
void  S3625C1 ::v13(){vfunc_called(this, "_ZN7S3625C13v13Ev");}
void  S3625C1 ::v14(){vfunc_called(this, "_ZN7S3625C13v14Ev");}
void  S3625C1 ::v15(){vfunc_called(this, "_ZN7S3625C13v15Ev");}
void  S3625C1 ::v16(){vfunc_called(this, "_ZN7S3625C13v16Ev");}
void  S3625C1 ::v17(){vfunc_called(this, "_ZN7S3625C13v17Ev");}
void  S3625C1 ::v18(){vfunc_called(this, "_ZN7S3625C13v18Ev");}
void  S3625C1 ::v19(){vfunc_called(this, "_ZN7S3625C13v19Ev");}
void  S3625C1 ::v20(){vfunc_called(this, "_ZN7S3625C13v20Ev");}
void  S3625C1 ::v21(){vfunc_called(this, "_ZN7S3625C13v21Ev");}
void  S3625C1 ::v22(){vfunc_called(this, "_ZN7S3625C13v22Ev");}
void  S3625C1 ::v23(){vfunc_called(this, "_ZN7S3625C13v23Ev");}
void  S3625C1 ::v24(){vfunc_called(this, "_ZN7S3625C13v24Ev");}
void  S3625C1 ::v25(){vfunc_called(this, "_ZN7S3625C13v25Ev");}
void  S3625C1 ::v26(){vfunc_called(this, "_ZN7S3625C13v26Ev");}
void  S3625C1 ::v27(){vfunc_called(this, "_ZN7S3625C13v27Ev");}
void  S3625C1 ::v28(){vfunc_called(this, "_ZN7S3625C13v28Ev");}
void  S3625C1 ::v29(){vfunc_called(this, "_ZN7S3625C13v29Ev");}
void  S3625C1 ::v30(){vfunc_called(this, "_ZN7S3625C13v30Ev");}
void  S3625C1 ::v31(){vfunc_called(this, "_ZN7S3625C13v31Ev");}
void  S3625C1 ::v32(){vfunc_called(this, "_ZN7S3625C13v32Ev");}
void  S3625C1 ::v33(){vfunc_called(this, "_ZN7S3625C13v33Ev");}
void  S3625C1 ::v34(){vfunc_called(this, "_ZN7S3625C13v34Ev");}
void  S3625C1 ::v35(){vfunc_called(this, "_ZN7S3625C13v35Ev");}
void  S3625C1 ::v36(){vfunc_called(this, "_ZN7S3625C13v36Ev");}
void  S3625C1 ::v37(){vfunc_called(this, "_ZN7S3625C13v37Ev");}
void  S3625C1 ::v38(){vfunc_called(this, "_ZN7S3625C13v38Ev");}
void  S3625C1 ::v39(){vfunc_called(this, "_ZN7S3625C13v39Ev");}
void  S3625C1 ::v40(){vfunc_called(this, "_ZN7S3625C13v40Ev");}
void  S3625C1 ::v41(){vfunc_called(this, "_ZN7S3625C13v41Ev");}
void  S3625C1 ::v42(){vfunc_called(this, "_ZN7S3625C13v42Ev");}
void  S3625C1 ::v43(){vfunc_called(this, "_ZN7S3625C13v43Ev");}
void  S3625C1 ::v44(){vfunc_called(this, "_ZN7S3625C13v44Ev");}
void  S3625C1 ::v45(){vfunc_called(this, "_ZN7S3625C13v45Ev");}
void  S3625C1 ::v46(){vfunc_called(this, "_ZN7S3625C13v46Ev");}
void  S3625C1 ::v47(){vfunc_called(this, "_ZN7S3625C13v47Ev");}
void  S3625C1 ::v48(){vfunc_called(this, "_ZN7S3625C13v48Ev");}
void  S3625C1 ::v49(){vfunc_called(this, "_ZN7S3625C13v49Ev");}
void  S3625C1 ::v50(){vfunc_called(this, "_ZN7S3625C13v50Ev");}
void  S3625C1 ::v51(){vfunc_called(this, "_ZN7S3625C13v51Ev");}
void  S3625C1 ::v52(){vfunc_called(this, "_ZN7S3625C13v52Ev");}
void  S3625C1 ::v53(){vfunc_called(this, "_ZN7S3625C13v53Ev");}
void  S3625C1 ::v54(){vfunc_called(this, "_ZN7S3625C13v54Ev");}
void  S3625C1 ::v55(){vfunc_called(this, "_ZN7S3625C13v55Ev");}
void  S3625C1 ::v56(){vfunc_called(this, "_ZN7S3625C13v56Ev");}
void  S3625C1 ::v57(){vfunc_called(this, "_ZN7S3625C13v57Ev");}
void  S3625C1 ::v58(){vfunc_called(this, "_ZN7S3625C13v58Ev");}
void  S3625C1 ::v59(){vfunc_called(this, "_ZN7S3625C13v59Ev");}
void  S3625C1 ::v60(){vfunc_called(this, "_ZN7S3625C13v60Ev");}
void  S3625C1 ::v61(){vfunc_called(this, "_ZN7S3625C13v61Ev");}
void  S3625C1 ::v62(){vfunc_called(this, "_ZN7S3625C13v62Ev");}
void  S3625C1 ::v63(){vfunc_called(this, "_ZN7S3625C13v63Ev");}
void  S3625C1 ::v64(){vfunc_called(this, "_ZN7S3625C13v64Ev");}
void  S3625C1 ::v65(){vfunc_called(this, "_ZN7S3625C13v65Ev");}
void  S3625C1 ::v66(){vfunc_called(this, "_ZN7S3625C13v66Ev");}
void  S3625C1 ::v67(){vfunc_called(this, "_ZN7S3625C13v67Ev");}
void  S3625C1 ::v68(){vfunc_called(this, "_ZN7S3625C13v68Ev");}
void  S3625C1 ::v69(){vfunc_called(this, "_ZN7S3625C13v69Ev");}
void  S3625C1 ::v70(){vfunc_called(this, "_ZN7S3625C13v70Ev");}
void  S3625C1 ::v71(){vfunc_called(this, "_ZN7S3625C13v71Ev");}
void  S3625C1 ::v72(){vfunc_called(this, "_ZN7S3625C13v72Ev");}
void  S3625C1 ::v73(){vfunc_called(this, "_ZN7S3625C13v73Ev");}
void  S3625C1 ::v74(){vfunc_called(this, "_ZN7S3625C13v74Ev");}
void  S3625C1 ::v75(){vfunc_called(this, "_ZN7S3625C13v75Ev");}
void  S3625C1 ::v76(){vfunc_called(this, "_ZN7S3625C13v76Ev");}
void  S3625C1 ::v77(){vfunc_called(this, "_ZN7S3625C13v77Ev");}
void  S3625C1 ::v78(){vfunc_called(this, "_ZN7S3625C13v78Ev");}
void  S3625C1 ::v79(){vfunc_called(this, "_ZN7S3625C13v79Ev");}
void  S3625C1 ::v80(){vfunc_called(this, "_ZN7S3625C13v80Ev");}
void  S3625C1 ::v81(){vfunc_called(this, "_ZN7S3625C13v81Ev");}
void  S3625C1 ::v82(){vfunc_called(this, "_ZN7S3625C13v82Ev");}
void  S3625C1 ::v83(){vfunc_called(this, "_ZN7S3625C13v83Ev");}
void  S3625C1 ::v84(){vfunc_called(this, "_ZN7S3625C13v84Ev");}
void  S3625C1 ::v85(){vfunc_called(this, "_ZN7S3625C13v85Ev");}
void  S3625C1 ::v86(){vfunc_called(this, "_ZN7S3625C13v86Ev");}
void  S3625C1 ::v87(){vfunc_called(this, "_ZN7S3625C13v87Ev");}
void  S3625C1 ::v88(){vfunc_called(this, "_ZN7S3625C13v88Ev");}
void  S3625C1 ::v89(){vfunc_called(this, "_ZN7S3625C13v89Ev");}
void  S3625C1 ::v90(){vfunc_called(this, "_ZN7S3625C13v90Ev");}
void  S3625C1 ::v91(){vfunc_called(this, "_ZN7S3625C13v91Ev");}
void  S3625C1 ::v92(){vfunc_called(this, "_ZN7S3625C13v92Ev");}
S3625C1 ::S3625C1(){ note_ctor("S3625C1", this);} // tgen

static void Test_S3625C1()
{
  extern Class_Descriptor cd_S3625C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(911,1768)];
    init_test(&cd_S3625C1, buf);
    S3625C1 *dp, &lv = *(dp=new (buf) S3625C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(7280,7068), "sizeof(S3625C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3625C1)");
    check_base_class_offset(lv, (S3625C3_nt*)(S3625C2*), 0, "S3625C1");
    check_base_class_offset(lv, (S3625C2*), 0, "S3625C1");
    check_field_offset(lv, s3625c1f0, ABISELECT(7232,7036), "S3625C1.s3625c1f0");
    check_field_offset(lv, s3625c1f1, ABISELECT(7240,7040), "S3625C1.s3625c1f1");
    check_field_offset(lv, s3625c1f2, ABISELECT(7248,7044), "S3625C1.s3625c1f2");
    check_field_offset(lv, s3625c1f3, ABISELECT(7256,7052), "S3625C1.s3625c1f3");
    check_field_offset(lv, s3625c1f4, ABISELECT(7272,7064), "S3625C1.s3625c1f4");
    test_class_info(&lv, &cd_S3625C1);
    dp->~S3625C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3625C1(Test_S3625C1, "S3625C1", ABISELECT(7280,7068));

#else // __cplusplus

extern void _ZN7S3625C1C1Ev();
extern void _ZN7S3625C1D1Ev();
Name_Map name_map_S3625C1[] = {
  NSPAIR(_ZN7S3625C1C1Ev),
  NSPAIR(_ZN7S3625C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3625C3_nt;
extern VTBL_ENTRY _ZTI10S3625C3_nt[];
extern  VTBL_ENTRY _ZTV10S3625C3_nt[];
extern Class_Descriptor cd_S3625C2;
extern VTBL_ENTRY _ZTI7S3625C2[];
extern  VTBL_ENTRY _ZTV7S3625C2[];
static Base_Class bases_S3625C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3625C3_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_S3625C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S3625C1[];
extern void _ZN7S3625C1D1Ev();
extern void _ZN7S3625C1D0Ev();
extern void _ZN7S3625C23v93Ev();
extern void _ZN7S3625C23v94Ev();
extern void _ZN7S3625C23v95Ev();
extern void _ZN7S3625C23v96Ev();
extern void _ZN7S3625C23v97Ev();
extern void _ZN7S3625C23v98Ev();
extern void _ZN7S3625C23v99Ev();
extern void _ZN7S3625C24v100Ev();
extern void _ZN7S3625C24v101Ev();
extern void _ZN7S3625C24v102Ev();
extern void _ZN7S3625C24v103Ev();
extern void _ZN7S3625C24v104Ev();
extern void _ZN7S3625C24v105Ev();
extern void _ZN7S3625C24v106Ev();
extern void _ZN7S3625C24v107Ev();
extern void _ZN7S3625C24v108Ev();
extern void _ZN7S3625C24v109Ev();
extern void _ZN7S3625C24v110Ev();
extern void _ZN7S3625C24v111Ev();
extern void _ZN7S3625C24v112Ev();
extern void _ZN7S3625C24v113Ev();
extern void _ZN7S3625C24v114Ev();
extern void _ZN7S3625C24v115Ev();
extern void _ZN7S3625C24v116Ev();
extern void _ZN7S3625C24v117Ev();
extern void _ZN7S3625C24v118Ev();
extern void _ZN7S3625C24v119Ev();
extern void _ZN7S3625C24v120Ev();
extern void _ZN7S3625C24v121Ev();
extern void _ZN7S3625C24v122Ev();
extern void _ZN7S3625C24v123Ev();
extern void _ZN7S3625C24v124Ev();
extern void _ZN7S3625C24v125Ev();
extern void _ZN7S3625C24v126Ev();
extern void _ZN7S3625C24v127Ev();
extern void _ZN7S3625C24v128Ev();
extern void _ZN7S3625C24v129Ev();
extern void _ZN7S3625C24v130Ev();
extern void _ZN7S3625C24v131Ev();
extern void _ZN7S3625C24v132Ev();
extern void _ZN7S3625C24v133Ev();
extern void _ZN7S3625C24v134Ev();
extern void _ZN7S3625C24v135Ev();
extern void _ZN7S3625C24v136Ev();
extern void _ZN7S3625C24v137Ev();
extern void _ZN7S3625C24v138Ev();
extern void _ZN7S3625C24v139Ev();
extern void _ZN7S3625C24v140Ev();
extern void _ZN7S3625C24v141Ev();
extern void _ZN7S3625C24v142Ev();
extern void _ZN7S3625C24v143Ev();
extern void _ZN7S3625C24v144Ev();
extern void _ZN7S3625C24v145Ev();
extern void _ZN7S3625C24v146Ev();
extern void _ZN7S3625C24v147Ev();
extern void _ZN7S3625C24v148Ev();
extern void _ZN7S3625C24v149Ev();
extern void _ZN7S3625C24v150Ev();
extern void _ZN7S3625C24v151Ev();
extern void _ZN7S3625C24v152Ev();
extern void _ZN7S3625C24v153Ev();
extern void _ZN7S3625C24v154Ev();
extern void _ZN7S3625C24v155Ev();
extern void _ZN7S3625C24v156Ev();
extern void _ZN7S3625C24v157Ev();
extern void _ZN7S3625C24v158Ev();
extern void _ZN7S3625C24v159Ev();
extern void _ZN7S3625C24v160Ev();
extern void _ZN7S3625C24v161Ev();
extern void _ZN7S3625C24v162Ev();
extern void _ZN7S3625C24v163Ev();
extern void _ZN7S3625C24v164Ev();
extern void _ZN7S3625C24v165Ev();
extern void _ZN7S3625C24v166Ev();
extern void _ZN7S3625C24v167Ev();
extern void _ZN7S3625C24v168Ev();
extern void _ZN7S3625C24v169Ev();
extern void _ZN7S3625C24v170Ev();
extern void _ZN7S3625C24v171Ev();
extern void _ZN7S3625C24v172Ev();
extern void _ZN7S3625C24v173Ev();
extern void _ZN7S3625C24v174Ev();
extern void _ZN7S3625C24v175Ev();
extern void _ZN7S3625C24v176Ev();
extern void _ZN7S3625C24v177Ev();
extern void _ZN7S3625C24v178Ev();
extern void _ZN7S3625C24v179Ev();
extern void _ZN7S3625C24v180Ev();
extern void _ZN7S3625C24v181Ev();
extern void _ZN7S3625C24v182Ev();
extern void _ZN7S3625C24v183Ev();
extern void _ZN7S3625C24v184Ev();
extern void _ZN7S3625C24v185Ev();
extern void _ZN7S3625C24v186Ev();
extern void _ZN7S3625C24v187Ev();
extern void _ZN7S3625C24v188Ev();
extern void _ZN7S3625C24v189Ev();
extern void _ZN7S3625C12v1Ev();
extern void _ZN7S3625C12v2Ev();
extern void _ZN7S3625C12v3Ev();
extern void _ZN7S3625C12v4Ev();
extern void _ZN7S3625C12v5Ev();
extern void _ZN7S3625C12v6Ev();
extern void _ZN7S3625C12v7Ev();
extern void _ZN7S3625C12v8Ev();
extern void _ZN7S3625C12v9Ev();
extern void _ZN7S3625C13v10Ev();
extern void _ZN7S3625C13v11Ev();
extern void _ZN7S3625C13v12Ev();
extern void _ZN7S3625C13v13Ev();
extern void _ZN7S3625C13v14Ev();
extern void _ZN7S3625C13v15Ev();
extern void _ZN7S3625C13v16Ev();
extern void _ZN7S3625C13v17Ev();
extern void _ZN7S3625C13v18Ev();
extern void _ZN7S3625C13v19Ev();
extern void _ZN7S3625C13v20Ev();
extern void _ZN7S3625C13v21Ev();
extern void _ZN7S3625C13v22Ev();
extern void _ZN7S3625C13v23Ev();
extern void _ZN7S3625C13v24Ev();
extern void _ZN7S3625C13v25Ev();
extern void _ZN7S3625C13v26Ev();
extern void _ZN7S3625C13v27Ev();
extern void _ZN7S3625C13v28Ev();
extern void _ZN7S3625C13v29Ev();
extern void _ZN7S3625C13v30Ev();
extern void _ZN7S3625C13v31Ev();
extern void _ZN7S3625C13v32Ev();
extern void _ZN7S3625C13v33Ev();
extern void _ZN7S3625C13v34Ev();
extern void _ZN7S3625C13v35Ev();
extern void _ZN7S3625C13v36Ev();
extern void _ZN7S3625C13v37Ev();
extern void _ZN7S3625C13v38Ev();
extern void _ZN7S3625C13v39Ev();
extern void _ZN7S3625C13v40Ev();
extern void _ZN7S3625C13v41Ev();
extern void _ZN7S3625C13v42Ev();
extern void _ZN7S3625C13v43Ev();
extern void _ZN7S3625C13v44Ev();
extern void _ZN7S3625C13v45Ev();
extern void _ZN7S3625C13v46Ev();
extern void _ZN7S3625C13v47Ev();
extern void _ZN7S3625C13v48Ev();
extern void _ZN7S3625C13v49Ev();
extern void _ZN7S3625C13v50Ev();
extern void _ZN7S3625C13v51Ev();
extern void _ZN7S3625C13v52Ev();
extern void _ZN7S3625C13v53Ev();
extern void _ZN7S3625C13v54Ev();
extern void _ZN7S3625C13v55Ev();
extern void _ZN7S3625C13v56Ev();
extern void _ZN7S3625C13v57Ev();
extern void _ZN7S3625C13v58Ev();
extern void _ZN7S3625C13v59Ev();
extern void _ZN7S3625C13v60Ev();
extern void _ZN7S3625C13v61Ev();
extern void _ZN7S3625C13v62Ev();
extern void _ZN7S3625C13v63Ev();
extern void _ZN7S3625C13v64Ev();
extern void _ZN7S3625C13v65Ev();
extern void _ZN7S3625C13v66Ev();
extern void _ZN7S3625C13v67Ev();
extern void _ZN7S3625C13v68Ev();
extern void _ZN7S3625C13v69Ev();
extern void _ZN7S3625C13v70Ev();
extern void _ZN7S3625C13v71Ev();
extern void _ZN7S3625C13v72Ev();
extern void _ZN7S3625C13v73Ev();
extern void _ZN7S3625C13v74Ev();
extern void _ZN7S3625C13v75Ev();
extern void _ZN7S3625C13v76Ev();
extern void _ZN7S3625C13v77Ev();
extern void _ZN7S3625C13v78Ev();
extern void _ZN7S3625C13v79Ev();
extern void _ZN7S3625C13v80Ev();
extern void _ZN7S3625C13v81Ev();
extern void _ZN7S3625C13v82Ev();
extern void _ZN7S3625C13v83Ev();
extern void _ZN7S3625C13v84Ev();
extern void _ZN7S3625C13v85Ev();
extern void _ZN7S3625C13v86Ev();
extern void _ZN7S3625C13v87Ev();
extern void _ZN7S3625C13v88Ev();
extern void _ZN7S3625C13v89Ev();
extern void _ZN7S3625C13v90Ev();
extern void _ZN7S3625C13v91Ev();
extern void _ZN7S3625C13v92Ev();
static  VTBL_ENTRY vtc_S3625C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3625C1[0]),
  (VTBL_ENTRY)&_ZN7S3625C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3625C1D0Ev,
  (VTBL_ENTRY)&_ZN7S3625C23v93Ev,
  (VTBL_ENTRY)&_ZN7S3625C23v94Ev,
  (VTBL_ENTRY)&_ZN7S3625C23v95Ev,
  (VTBL_ENTRY)&_ZN7S3625C23v96Ev,
  (VTBL_ENTRY)&_ZN7S3625C23v97Ev,
  (VTBL_ENTRY)&_ZN7S3625C23v98Ev,
  (VTBL_ENTRY)&_ZN7S3625C23v99Ev,
  (VTBL_ENTRY)&_ZN7S3625C24v100Ev,
  (VTBL_ENTRY)&_ZN7S3625C24v101Ev,
  (VTBL_ENTRY)&_ZN7S3625C24v102Ev,
  (VTBL_ENTRY)&_ZN7S3625C24v103Ev,
  (VTBL_ENTRY)&_ZN7S3625C24v104Ev,
  (VTBL_ENTRY)&_ZN7S3625C24v105Ev,
  (VTBL_ENTRY)&_ZN7S3625C24v106Ev,
  (VTBL_ENTRY)&_ZN7S3625C24v107Ev,
  (VTBL_ENTRY)&_ZN7S3625C24v108Ev,
  (VTBL_ENTRY)&_ZN7S3625C24v109Ev,
  (VTBL_ENTRY)&_ZN7S3625C24v110Ev,
  (VTBL_ENTRY)&_ZN7S3625C24v111Ev,
  (VTBL_ENTRY)&_ZN7S3625C24v112Ev,
  (VTBL_ENTRY)&_ZN7S3625C24v113Ev,
  (VTBL_ENTRY)&_ZN7S3625C24v114Ev,
  (VTBL_ENTRY)&_ZN7S3625C24v115Ev,
  (VTBL_ENTRY)&_ZN7S3625C24v116Ev,
  (VTBL_ENTRY)&_ZN7S3625C24v117Ev,
  (VTBL_ENTRY)&_ZN7S3625C24v118Ev,
  (VTBL_ENTRY)&_ZN7S3625C24v119Ev,
  (VTBL_ENTRY)&_ZN7S3625C24v120Ev,
  (VTBL_ENTRY)&_ZN7S3625C24v121Ev,
  (VTBL_ENTRY)&_ZN7S3625C24v122Ev,
  (VTBL_ENTRY)&_ZN7S3625C24v123Ev,
  (VTBL_ENTRY)&_ZN7S3625C24v124Ev,
  (VTBL_ENTRY)&_ZN7S3625C24v125Ev,
  (VTBL_ENTRY)&_ZN7S3625C24v126Ev,
  (VTBL_ENTRY)&_ZN7S3625C24v127Ev,
  (VTBL_ENTRY)&_ZN7S3625C24v128Ev,
  (VTBL_ENTRY)&_ZN7S3625C24v129Ev,
  (VTBL_ENTRY)&_ZN7S3625C24v130Ev,
  (VTBL_ENTRY)&_ZN7S3625C24v131Ev,
  (VTBL_ENTRY)&_ZN7S3625C24v132Ev,
  (VTBL_ENTRY)&_ZN7S3625C24v133Ev,
  (VTBL_ENTRY)&_ZN7S3625C24v134Ev,
  (VTBL_ENTRY)&_ZN7S3625C24v135Ev,
  (VTBL_ENTRY)&_ZN7S3625C24v136Ev,
  (VTBL_ENTRY)&_ZN7S3625C24v137Ev,
  (VTBL_ENTRY)&_ZN7S3625C24v138Ev,
  (VTBL_ENTRY)&_ZN7S3625C24v139Ev,
  (VTBL_ENTRY)&_ZN7S3625C24v140Ev,
  (VTBL_ENTRY)&_ZN7S3625C24v141Ev,
  (VTBL_ENTRY)&_ZN7S3625C24v142Ev,
  (VTBL_ENTRY)&_ZN7S3625C24v143Ev,
  (VTBL_ENTRY)&_ZN7S3625C24v144Ev,
  (VTBL_ENTRY)&_ZN7S3625C24v145Ev,
  (VTBL_ENTRY)&_ZN7S3625C24v146Ev,
  (VTBL_ENTRY)&_ZN7S3625C24v147Ev,
  (VTBL_ENTRY)&_ZN7S3625C24v148Ev,
  (VTBL_ENTRY)&_ZN7S3625C24v149Ev,
  (VTBL_ENTRY)&_ZN7S3625C24v150Ev,
  (VTBL_ENTRY)&_ZN7S3625C24v151Ev,
  (VTBL_ENTRY)&_ZN7S3625C24v152Ev,
  (VTBL_ENTRY)&_ZN7S3625C24v153Ev,
  (VTBL_ENTRY)&_ZN7S3625C24v154Ev,
  (VTBL_ENTRY)&_ZN7S3625C24v155Ev,
  (VTBL_ENTRY)&_ZN7S3625C24v156Ev,
  (VTBL_ENTRY)&_ZN7S3625C24v157Ev,
  (VTBL_ENTRY)&_ZN7S3625C24v158Ev,
  (VTBL_ENTRY)&_ZN7S3625C24v159Ev,
  (VTBL_ENTRY)&_ZN7S3625C24v160Ev,
  (VTBL_ENTRY)&_ZN7S3625C24v161Ev,
  (VTBL_ENTRY)&_ZN7S3625C24v162Ev,
  (VTBL_ENTRY)&_ZN7S3625C24v163Ev,
  (VTBL_ENTRY)&_ZN7S3625C24v164Ev,
  (VTBL_ENTRY)&_ZN7S3625C24v165Ev,
  (VTBL_ENTRY)&_ZN7S3625C24v166Ev,
  (VTBL_ENTRY)&_ZN7S3625C24v167Ev,
  (VTBL_ENTRY)&_ZN7S3625C24v168Ev,
  (VTBL_ENTRY)&_ZN7S3625C24v169Ev,
  (VTBL_ENTRY)&_ZN7S3625C24v170Ev,
  (VTBL_ENTRY)&_ZN7S3625C24v171Ev,
  (VTBL_ENTRY)&_ZN7S3625C24v172Ev,
  (VTBL_ENTRY)&_ZN7S3625C24v173Ev,
  (VTBL_ENTRY)&_ZN7S3625C24v174Ev,
  (VTBL_ENTRY)&_ZN7S3625C24v175Ev,
  (VTBL_ENTRY)&_ZN7S3625C24v176Ev,
  (VTBL_ENTRY)&_ZN7S3625C24v177Ev,
  (VTBL_ENTRY)&_ZN7S3625C24v178Ev,
  (VTBL_ENTRY)&_ZN7S3625C24v179Ev,
  (VTBL_ENTRY)&_ZN7S3625C24v180Ev,
  (VTBL_ENTRY)&_ZN7S3625C24v181Ev,
  (VTBL_ENTRY)&_ZN7S3625C24v182Ev,
  (VTBL_ENTRY)&_ZN7S3625C24v183Ev,
  (VTBL_ENTRY)&_ZN7S3625C24v184Ev,
  (VTBL_ENTRY)&_ZN7S3625C24v185Ev,
  (VTBL_ENTRY)&_ZN7S3625C24v186Ev,
  (VTBL_ENTRY)&_ZN7S3625C24v187Ev,
  (VTBL_ENTRY)&_ZN7S3625C24v188Ev,
  (VTBL_ENTRY)&_ZN7S3625C24v189Ev,
  (VTBL_ENTRY)&_ZN7S3625C12v1Ev,
  (VTBL_ENTRY)&_ZN7S3625C12v2Ev,
  (VTBL_ENTRY)&_ZN7S3625C12v3Ev,
  (VTBL_ENTRY)&_ZN7S3625C12v4Ev,
  (VTBL_ENTRY)&_ZN7S3625C12v5Ev,
  (VTBL_ENTRY)&_ZN7S3625C12v6Ev,
  (VTBL_ENTRY)&_ZN7S3625C12v7Ev,
  (VTBL_ENTRY)&_ZN7S3625C12v8Ev,
  (VTBL_ENTRY)&_ZN7S3625C12v9Ev,
  (VTBL_ENTRY)&_ZN7S3625C13v10Ev,
  (VTBL_ENTRY)&_ZN7S3625C13v11Ev,
  (VTBL_ENTRY)&_ZN7S3625C13v12Ev,
  (VTBL_ENTRY)&_ZN7S3625C13v13Ev,
  (VTBL_ENTRY)&_ZN7S3625C13v14Ev,
  (VTBL_ENTRY)&_ZN7S3625C13v15Ev,
  (VTBL_ENTRY)&_ZN7S3625C13v16Ev,
  (VTBL_ENTRY)&_ZN7S3625C13v17Ev,
  (VTBL_ENTRY)&_ZN7S3625C13v18Ev,
  (VTBL_ENTRY)&_ZN7S3625C13v19Ev,
  (VTBL_ENTRY)&_ZN7S3625C13v20Ev,
  (VTBL_ENTRY)&_ZN7S3625C13v21Ev,
  (VTBL_ENTRY)&_ZN7S3625C13v22Ev,
  (VTBL_ENTRY)&_ZN7S3625C13v23Ev,
  (VTBL_ENTRY)&_ZN7S3625C13v24Ev,
  (VTBL_ENTRY)&_ZN7S3625C13v25Ev,
  (VTBL_ENTRY)&_ZN7S3625C13v26Ev,
  (VTBL_ENTRY)&_ZN7S3625C13v27Ev,
  (VTBL_ENTRY)&_ZN7S3625C13v28Ev,
  (VTBL_ENTRY)&_ZN7S3625C13v29Ev,
  (VTBL_ENTRY)&_ZN7S3625C13v30Ev,
  (VTBL_ENTRY)&_ZN7S3625C13v31Ev,
  (VTBL_ENTRY)&_ZN7S3625C13v32Ev,
  (VTBL_ENTRY)&_ZN7S3625C13v33Ev,
  (VTBL_ENTRY)&_ZN7S3625C13v34Ev,
  (VTBL_ENTRY)&_ZN7S3625C13v35Ev,
  (VTBL_ENTRY)&_ZN7S3625C13v36Ev,
  (VTBL_ENTRY)&_ZN7S3625C13v37Ev,
  (VTBL_ENTRY)&_ZN7S3625C13v38Ev,
  (VTBL_ENTRY)&_ZN7S3625C13v39Ev,
  (VTBL_ENTRY)&_ZN7S3625C13v40Ev,
  (VTBL_ENTRY)&_ZN7S3625C13v41Ev,
  (VTBL_ENTRY)&_ZN7S3625C13v42Ev,
  (VTBL_ENTRY)&_ZN7S3625C13v43Ev,
  (VTBL_ENTRY)&_ZN7S3625C13v44Ev,
  (VTBL_ENTRY)&_ZN7S3625C13v45Ev,
  (VTBL_ENTRY)&_ZN7S3625C13v46Ev,
  (VTBL_ENTRY)&_ZN7S3625C13v47Ev,
  (VTBL_ENTRY)&_ZN7S3625C13v48Ev,
  (VTBL_ENTRY)&_ZN7S3625C13v49Ev,
  (VTBL_ENTRY)&_ZN7S3625C13v50Ev,
  (VTBL_ENTRY)&_ZN7S3625C13v51Ev,
  (VTBL_ENTRY)&_ZN7S3625C13v52Ev,
  (VTBL_ENTRY)&_ZN7S3625C13v53Ev,
  (VTBL_ENTRY)&_ZN7S3625C13v54Ev,
  (VTBL_ENTRY)&_ZN7S3625C13v55Ev,
  (VTBL_ENTRY)&_ZN7S3625C13v56Ev,
  (VTBL_ENTRY)&_ZN7S3625C13v57Ev,
  (VTBL_ENTRY)&_ZN7S3625C13v58Ev,
  (VTBL_ENTRY)&_ZN7S3625C13v59Ev,
  (VTBL_ENTRY)&_ZN7S3625C13v60Ev,
  (VTBL_ENTRY)&_ZN7S3625C13v61Ev,
  (VTBL_ENTRY)&_ZN7S3625C13v62Ev,
  (VTBL_ENTRY)&_ZN7S3625C13v63Ev,
  (VTBL_ENTRY)&_ZN7S3625C13v64Ev,
  (VTBL_ENTRY)&_ZN7S3625C13v65Ev,
  (VTBL_ENTRY)&_ZN7S3625C13v66Ev,
  (VTBL_ENTRY)&_ZN7S3625C13v67Ev,
  (VTBL_ENTRY)&_ZN7S3625C13v68Ev,
  (VTBL_ENTRY)&_ZN7S3625C13v69Ev,
  (VTBL_ENTRY)&_ZN7S3625C13v70Ev,
  (VTBL_ENTRY)&_ZN7S3625C13v71Ev,
  (VTBL_ENTRY)&_ZN7S3625C13v72Ev,
  (VTBL_ENTRY)&_ZN7S3625C13v73Ev,
  (VTBL_ENTRY)&_ZN7S3625C13v74Ev,
  (VTBL_ENTRY)&_ZN7S3625C13v75Ev,
  (VTBL_ENTRY)&_ZN7S3625C13v76Ev,
  (VTBL_ENTRY)&_ZN7S3625C13v77Ev,
  (VTBL_ENTRY)&_ZN7S3625C13v78Ev,
  (VTBL_ENTRY)&_ZN7S3625C13v79Ev,
  (VTBL_ENTRY)&_ZN7S3625C13v80Ev,
  (VTBL_ENTRY)&_ZN7S3625C13v81Ev,
  (VTBL_ENTRY)&_ZN7S3625C13v82Ev,
  (VTBL_ENTRY)&_ZN7S3625C13v83Ev,
  (VTBL_ENTRY)&_ZN7S3625C13v84Ev,
  (VTBL_ENTRY)&_ZN7S3625C13v85Ev,
  (VTBL_ENTRY)&_ZN7S3625C13v86Ev,
  (VTBL_ENTRY)&_ZN7S3625C13v87Ev,
  (VTBL_ENTRY)&_ZN7S3625C13v88Ev,
  (VTBL_ENTRY)&_ZN7S3625C13v89Ev,
  (VTBL_ENTRY)&_ZN7S3625C13v90Ev,
  (VTBL_ENTRY)&_ZN7S3625C13v91Ev,
  (VTBL_ENTRY)&_ZN7S3625C13v92Ev,
};
extern VTBL_ENTRY _ZTI7S3625C1[];
extern  VTBL_ENTRY _ZTV7S3625C1[];
Class_Descriptor cd_S3625C1 = {  "S3625C1", // class name
  bases_S3625C1, 2,
  &(vtc_S3625C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(7280,7068), // object size
  NSPAIRA(_ZTI7S3625C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3625C1),193, //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  S3622C2  : S3625C3_nt {
  int s3622c2f0[3];
  ::S3625C10_nt s3622c2f1;
  ::S3625C11_nt s3622c2f2;
  int s3622c2f3[3];
  void *s3622c2f4;
  char s3622c2f5[3];
  ::S3625C12_nt s3622c2f6;
  int s3622c2f7;
  ::S3625C31 s3622c2f8;
  void *s3622c2f9;
  int s3622c2f10[2];
  ::S3625C13_nt s3622c2f11;
  ::S3625C13_nt s3622c2f12;
  int s3622c2f13[3];
  char s3622c2f14[6144];
  ::S3625C18_nt s3622c2f15;
  ::S3625C25 s3622c2f16;
  char s3622c2f17;
  int s3622c2f18;
  char s3622c2f19;
  int s3622c2f20[5];
  __tsi64 s3622c2f21[7];
  char s3622c2f22;
  __tsi64 s3622c2f23[9];
  int s3622c2f24[2];
  ::S3625C22 s3622c2f25;
  ::S3625C28_nt s3622c2f26;
  void *s3622c2f27[3];
  __tsi64 s3622c2f28[2];
  ::S3625C18_nt s3622c2f29;
  int s3622c2f30;
  char s3622c2f31;
  __tsi64 s3622c2f32;
  char s3622c2f33;
  __tsi64 s3622c2f34;
  virtual  ~S3622C2(); // _ZN7S3622C2D1Ev
  virtual void  v49(); // _ZN7S3622C23v49Ev
  virtual void  v50(); // _ZN7S3622C23v50Ev
  virtual void  v51(); // _ZN7S3622C23v51Ev
  virtual void  v52(); // _ZN7S3622C23v52Ev
  virtual void  v53(); // _ZN7S3622C23v53Ev
  virtual void  v54(); // _ZN7S3622C23v54Ev
  virtual void  v55(); // _ZN7S3622C23v55Ev
  virtual void  v56(); // _ZN7S3622C23v56Ev
  virtual void  v57(); // _ZN7S3622C23v57Ev
  virtual void  v58(); // _ZN7S3622C23v58Ev
  virtual void  v59(); // _ZN7S3622C23v59Ev
  virtual void  v60(); // _ZN7S3622C23v60Ev
  virtual void  v61(); // _ZN7S3622C23v61Ev
  virtual void  v62(); // _ZN7S3622C23v62Ev
  virtual void  v63(); // _ZN7S3622C23v63Ev
  virtual void  v64(); // _ZN7S3622C23v64Ev
  virtual void  v65(); // _ZN7S3622C23v65Ev
  virtual void  v66(); // _ZN7S3622C23v66Ev
  virtual void  v67(); // _ZN7S3622C23v67Ev
  virtual void  v68(); // _ZN7S3622C23v68Ev
  virtual void  v69(); // _ZN7S3622C23v69Ev
  virtual void  v70(); // _ZN7S3622C23v70Ev
  virtual void  v71(); // _ZN7S3622C23v71Ev
  virtual void  v72(); // _ZN7S3622C23v72Ev
  virtual void  v73(); // _ZN7S3622C23v73Ev
  virtual void  v74(); // _ZN7S3622C23v74Ev
  virtual void  v75(); // _ZN7S3622C23v75Ev
  virtual void  v76(); // _ZN7S3622C23v76Ev
  virtual void  v77(); // _ZN7S3622C23v77Ev
  virtual void  v78(); // _ZN7S3622C23v78Ev
  virtual void  v79(); // _ZN7S3622C23v79Ev
  virtual void  v80(); // _ZN7S3622C23v80Ev
  virtual void  v81(); // _ZN7S3622C23v81Ev
  virtual void  v82(); // _ZN7S3622C23v82Ev
  virtual void  v83(); // _ZN7S3622C23v83Ev
  virtual void  v84(); // _ZN7S3622C23v84Ev
  virtual void  v85(); // _ZN7S3622C23v85Ev
  virtual void  v86(); // _ZN7S3622C23v86Ev
  virtual void  v87(); // _ZN7S3622C23v87Ev
  virtual void  v88(); // _ZN7S3622C23v88Ev
  virtual void  v89(); // _ZN7S3622C23v89Ev
  virtual void  v90(); // _ZN7S3622C23v90Ev
  virtual void  v91(); // _ZN7S3622C23v91Ev
  virtual void  v92(); // _ZN7S3622C23v92Ev
  virtual void  v93(); // _ZN7S3622C23v93Ev
  virtual void  v94(); // _ZN7S3622C23v94Ev
  virtual void  v95(); // _ZN7S3622C23v95Ev
  virtual void  v96(); // _ZN7S3622C23v96Ev
  virtual void  v97(); // _ZN7S3622C23v97Ev
  virtual void  v98(); // _ZN7S3622C23v98Ev
  virtual void  v99(); // _ZN7S3622C23v99Ev
  virtual void  v100(); // _ZN7S3622C24v100Ev
  virtual void  v101(); // _ZN7S3622C24v101Ev
  virtual void  v102(); // _ZN7S3622C24v102Ev
  virtual void  v103(); // _ZN7S3622C24v103Ev
  virtual void  v104(); // _ZN7S3622C24v104Ev
  virtual void  v105(); // _ZN7S3622C24v105Ev
  virtual void  v106(); // _ZN7S3622C24v106Ev
  virtual void  v107(); // _ZN7S3622C24v107Ev
  virtual void  v108(); // _ZN7S3622C24v108Ev
  virtual void  v109(); // _ZN7S3622C24v109Ev
  virtual void  v110(); // _ZN7S3622C24v110Ev
  virtual void  v111(); // _ZN7S3622C24v111Ev
  virtual void  v112(); // _ZN7S3622C24v112Ev
  virtual void  v113(); // _ZN7S3622C24v113Ev
  virtual void  v114(); // _ZN7S3622C24v114Ev
  virtual void  v115(); // _ZN7S3622C24v115Ev
  virtual void  v116(); // _ZN7S3622C24v116Ev
  virtual void  v117(); // _ZN7S3622C24v117Ev
  virtual void  v118(); // _ZN7S3622C24v118Ev
  virtual void  v119(); // _ZN7S3622C24v119Ev
  virtual void  v120(); // _ZN7S3622C24v120Ev
  virtual void  v121(); // _ZN7S3622C24v121Ev
  virtual void  v122(); // _ZN7S3622C24v122Ev
  virtual void  v123(); // _ZN7S3622C24v123Ev
  virtual void  v124(); // _ZN7S3622C24v124Ev
  virtual void  v125(); // _ZN7S3622C24v125Ev
  virtual void  v126(); // _ZN7S3622C24v126Ev
  virtual void  v127(); // _ZN7S3622C24v127Ev
  virtual void  v128(); // _ZN7S3622C24v128Ev
  virtual void  v129(); // _ZN7S3622C24v129Ev
  virtual void  v130(); // _ZN7S3622C24v130Ev
  virtual void  v131(); // _ZN7S3622C24v131Ev
  virtual void  v132(); // _ZN7S3622C24v132Ev
  virtual void  v133(); // _ZN7S3622C24v133Ev
  virtual void  v134(); // _ZN7S3622C24v134Ev
  virtual void  v135(); // _ZN7S3622C24v135Ev
  virtual void  v136(); // _ZN7S3622C24v136Ev
  virtual void  v137(); // _ZN7S3622C24v137Ev
  virtual void  v138(); // _ZN7S3622C24v138Ev
  virtual void  v139(); // _ZN7S3622C24v139Ev
  virtual void  v140(); // _ZN7S3622C24v140Ev
  virtual void  v141(); // _ZN7S3622C24v141Ev
  virtual void  v142(); // _ZN7S3622C24v142Ev
  virtual void  v143(); // _ZN7S3622C24v143Ev
  virtual void  v144(); // _ZN7S3622C24v144Ev
  virtual void  v145(); // _ZN7S3622C24v145Ev
  S3622C2(); // tgen
};
//SIG(-1 S3622C2) C1{ BC2{ vd m FC3{ m Fp Fi FC4{ m} FC5{ m}} FC3 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 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 Fi[3] FC6{ m Fc Fl[2] Fs[12] Fc[5]} FC7{ m Fc Fl[4] Fi[4]} Fi[3] Fp Fc[3] FC8{ m FC9{ m FC10{ FL[4]}} Fc Fp Fi[3]} Fi FC11{ m Fp Fi[2] FC12{ m}} Fp Fi[2] FC9 FC9 Fi[3] Fc[6144] FC13{ m Fp Fi FC14{ m}} FC15{ m Fp Fi[2] FC14} Fc Fi Fc Fi[5] FL[7] Fc FL[9] Fi[2] FC16{ BC17{ m FC18{ m Fc[11]} Fi[7] FL} Fi FC15 FC18 Fi} FC19{ m Fp FC9 FL[2] Fi FL Fi[2] Fc FC13 FC13 FL[5] Fc Fi FC15 FC15 FC15 FC15 FC11 Fi[2]} Fp[3] FL[2] FC13 Fi Fc FL Fc FL}


 S3622C2 ::~S3622C2(){ note_dtor("S3622C2", this);}
void  S3622C2 ::v49(){vfunc_called(this, "_ZN7S3622C23v49Ev");}
void  S3622C2 ::v50(){vfunc_called(this, "_ZN7S3622C23v50Ev");}
void  S3622C2 ::v51(){vfunc_called(this, "_ZN7S3622C23v51Ev");}
void  S3622C2 ::v52(){vfunc_called(this, "_ZN7S3622C23v52Ev");}
void  S3622C2 ::v53(){vfunc_called(this, "_ZN7S3622C23v53Ev");}
void  S3622C2 ::v54(){vfunc_called(this, "_ZN7S3622C23v54Ev");}
void  S3622C2 ::v55(){vfunc_called(this, "_ZN7S3622C23v55Ev");}
void  S3622C2 ::v56(){vfunc_called(this, "_ZN7S3622C23v56Ev");}
void  S3622C2 ::v57(){vfunc_called(this, "_ZN7S3622C23v57Ev");}
void  S3622C2 ::v58(){vfunc_called(this, "_ZN7S3622C23v58Ev");}
void  S3622C2 ::v59(){vfunc_called(this, "_ZN7S3622C23v59Ev");}
void  S3622C2 ::v60(){vfunc_called(this, "_ZN7S3622C23v60Ev");}
void  S3622C2 ::v61(){vfunc_called(this, "_ZN7S3622C23v61Ev");}
void  S3622C2 ::v62(){vfunc_called(this, "_ZN7S3622C23v62Ev");}
void  S3622C2 ::v63(){vfunc_called(this, "_ZN7S3622C23v63Ev");}
void  S3622C2 ::v64(){vfunc_called(this, "_ZN7S3622C23v64Ev");}
void  S3622C2 ::v65(){vfunc_called(this, "_ZN7S3622C23v65Ev");}
void  S3622C2 ::v66(){vfunc_called(this, "_ZN7S3622C23v66Ev");}
void  S3622C2 ::v67(){vfunc_called(this, "_ZN7S3622C23v67Ev");}
void  S3622C2 ::v68(){vfunc_called(this, "_ZN7S3622C23v68Ev");}
void  S3622C2 ::v69(){vfunc_called(this, "_ZN7S3622C23v69Ev");}
void  S3622C2 ::v70(){vfunc_called(this, "_ZN7S3622C23v70Ev");}
void  S3622C2 ::v71(){vfunc_called(this, "_ZN7S3622C23v71Ev");}
void  S3622C2 ::v72(){vfunc_called(this, "_ZN7S3622C23v72Ev");}
void  S3622C2 ::v73(){vfunc_called(this, "_ZN7S3622C23v73Ev");}
void  S3622C2 ::v74(){vfunc_called(this, "_ZN7S3622C23v74Ev");}
void  S3622C2 ::v75(){vfunc_called(this, "_ZN7S3622C23v75Ev");}
void  S3622C2 ::v76(){vfunc_called(this, "_ZN7S3622C23v76Ev");}
void  S3622C2 ::v77(){vfunc_called(this, "_ZN7S3622C23v77Ev");}
void  S3622C2 ::v78(){vfunc_called(this, "_ZN7S3622C23v78Ev");}
void  S3622C2 ::v79(){vfunc_called(this, "_ZN7S3622C23v79Ev");}
void  S3622C2 ::v80(){vfunc_called(this, "_ZN7S3622C23v80Ev");}
void  S3622C2 ::v81(){vfunc_called(this, "_ZN7S3622C23v81Ev");}
void  S3622C2 ::v82(){vfunc_called(this, "_ZN7S3622C23v82Ev");}
void  S3622C2 ::v83(){vfunc_called(this, "_ZN7S3622C23v83Ev");}
void  S3622C2 ::v84(){vfunc_called(this, "_ZN7S3622C23v84Ev");}
void  S3622C2 ::v85(){vfunc_called(this, "_ZN7S3622C23v85Ev");}
void  S3622C2 ::v86(){vfunc_called(this, "_ZN7S3622C23v86Ev");}
void  S3622C2 ::v87(){vfunc_called(this, "_ZN7S3622C23v87Ev");}
void  S3622C2 ::v88(){vfunc_called(this, "_ZN7S3622C23v88Ev");}
void  S3622C2 ::v89(){vfunc_called(this, "_ZN7S3622C23v89Ev");}
void  S3622C2 ::v90(){vfunc_called(this, "_ZN7S3622C23v90Ev");}
void  S3622C2 ::v91(){vfunc_called(this, "_ZN7S3622C23v91Ev");}
void  S3622C2 ::v92(){vfunc_called(this, "_ZN7S3622C23v92Ev");}
void  S3622C2 ::v93(){vfunc_called(this, "_ZN7S3622C23v93Ev");}
void  S3622C2 ::v94(){vfunc_called(this, "_ZN7S3622C23v94Ev");}
void  S3622C2 ::v95(){vfunc_called(this, "_ZN7S3622C23v95Ev");}
void  S3622C2 ::v96(){vfunc_called(this, "_ZN7S3622C23v96Ev");}
void  S3622C2 ::v97(){vfunc_called(this, "_ZN7S3622C23v97Ev");}
void  S3622C2 ::v98(){vfunc_called(this, "_ZN7S3622C23v98Ev");}
void  S3622C2 ::v99(){vfunc_called(this, "_ZN7S3622C23v99Ev");}
void  S3622C2 ::v100(){vfunc_called(this, "_ZN7S3622C24v100Ev");}
void  S3622C2 ::v101(){vfunc_called(this, "_ZN7S3622C24v101Ev");}
void  S3622C2 ::v102(){vfunc_called(this, "_ZN7S3622C24v102Ev");}
void  S3622C2 ::v103(){vfunc_called(this, "_ZN7S3622C24v103Ev");}
void  S3622C2 ::v104(){vfunc_called(this, "_ZN7S3622C24v104Ev");}
void  S3622C2 ::v105(){vfunc_called(this, "_ZN7S3622C24v105Ev");}
void  S3622C2 ::v106(){vfunc_called(this, "_ZN7S3622C24v106Ev");}
void  S3622C2 ::v107(){vfunc_called(this, "_ZN7S3622C24v107Ev");}
void  S3622C2 ::v108(){vfunc_called(this, "_ZN7S3622C24v108Ev");}
void  S3622C2 ::v109(){vfunc_called(this, "_ZN7S3622C24v109Ev");}
void  S3622C2 ::v110(){vfunc_called(this, "_ZN7S3622C24v110Ev");}
void  S3622C2 ::v111(){vfunc_called(this, "_ZN7S3622C24v111Ev");}
void  S3622C2 ::v112(){vfunc_called(this, "_ZN7S3622C24v112Ev");}
void  S3622C2 ::v113(){vfunc_called(this, "_ZN7S3622C24v113Ev");}
void  S3622C2 ::v114(){vfunc_called(this, "_ZN7S3622C24v114Ev");}
void  S3622C2 ::v115(){vfunc_called(this, "_ZN7S3622C24v115Ev");}
void  S3622C2 ::v116(){vfunc_called(this, "_ZN7S3622C24v116Ev");}
void  S3622C2 ::v117(){vfunc_called(this, "_ZN7S3622C24v117Ev");}
void  S3622C2 ::v118(){vfunc_called(this, "_ZN7S3622C24v118Ev");}
void  S3622C2 ::v119(){vfunc_called(this, "_ZN7S3622C24v119Ev");}
void  S3622C2 ::v120(){vfunc_called(this, "_ZN7S3622C24v120Ev");}
void  S3622C2 ::v121(){vfunc_called(this, "_ZN7S3622C24v121Ev");}
void  S3622C2 ::v122(){vfunc_called(this, "_ZN7S3622C24v122Ev");}
void  S3622C2 ::v123(){vfunc_called(this, "_ZN7S3622C24v123Ev");}
void  S3622C2 ::v124(){vfunc_called(this, "_ZN7S3622C24v124Ev");}
void  S3622C2 ::v125(){vfunc_called(this, "_ZN7S3622C24v125Ev");}
void  S3622C2 ::v126(){vfunc_called(this, "_ZN7S3622C24v126Ev");}
void  S3622C2 ::v127(){vfunc_called(this, "_ZN7S3622C24v127Ev");}
void  S3622C2 ::v128(){vfunc_called(this, "_ZN7S3622C24v128Ev");}
void  S3622C2 ::v129(){vfunc_called(this, "_ZN7S3622C24v129Ev");}
void  S3622C2 ::v130(){vfunc_called(this, "_ZN7S3622C24v130Ev");}
void  S3622C2 ::v131(){vfunc_called(this, "_ZN7S3622C24v131Ev");}
void  S3622C2 ::v132(){vfunc_called(this, "_ZN7S3622C24v132Ev");}
void  S3622C2 ::v133(){vfunc_called(this, "_ZN7S3622C24v133Ev");}
void  S3622C2 ::v134(){vfunc_called(this, "_ZN7S3622C24v134Ev");}
void  S3622C2 ::v135(){vfunc_called(this, "_ZN7S3622C24v135Ev");}
void  S3622C2 ::v136(){vfunc_called(this, "_ZN7S3622C24v136Ev");}
void  S3622C2 ::v137(){vfunc_called(this, "_ZN7S3622C24v137Ev");}
void  S3622C2 ::v138(){vfunc_called(this, "_ZN7S3622C24v138Ev");}
void  S3622C2 ::v139(){vfunc_called(this, "_ZN7S3622C24v139Ev");}
void  S3622C2 ::v140(){vfunc_called(this, "_ZN7S3622C24v140Ev");}
void  S3622C2 ::v141(){vfunc_called(this, "_ZN7S3622C24v141Ev");}
void  S3622C2 ::v142(){vfunc_called(this, "_ZN7S3622C24v142Ev");}
void  S3622C2 ::v143(){vfunc_called(this, "_ZN7S3622C24v143Ev");}
void  S3622C2 ::v144(){vfunc_called(this, "_ZN7S3622C24v144Ev");}
void  S3622C2 ::v145(){vfunc_called(this, "_ZN7S3622C24v145Ev");}
S3622C2 ::S3622C2(){ note_ctor("S3622C2", this);} // tgen

static void Test_S3622C2()
{
  extern Class_Descriptor cd_S3622C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(905,1760)];
    init_test(&cd_S3622C2, buf);
    S3622C2 *dp, &lv = *(dp=new (buf) S3622C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(7232,7036), "sizeof(S3622C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3622C2)");
    check_base_class_offset(lv, (S3625C3_nt*), 0, "S3622C2");
    check_field_offset(lv, s3622c2f0, ABISELECT(44,32), "S3622C2.s3622c2f0");
    check_field_offset(lv, s3622c2f1, ABISELECT(56,44), "S3622C2.s3622c2f1");
    check_field_offset(lv, s3622c2f2, ABISELECT(112,88), "S3622C2.s3622c2f2");
    check_field_offset(lv, s3622c2f3, ABISELECT(168,124), "S3622C2.s3622c2f3");
    check_field_offset(lv, s3622c2f4, ABISELECT(184,136), "S3622C2.s3622c2f4");
    check_field_offset(lv, s3622c2f5, ABISELECT(192,140), "S3622C2.s3622c2f5");
    check_field_offset(lv, s3622c2f6, ABISELECT(200,144), "S3622C2.s3622c2f6");
    check_field_offset(lv, s3622c2f7, ABISELECT(264,196), "S3622C2.s3622c2f7");
    check_field_offset(lv, s3622c2f8, ABISELECT(272,200), "S3622C2.s3622c2f8");
    check_field_offset(lv, s3622c2f9, ABISELECT(296,216), "S3622C2.s3622c2f9");
    check_field_offset(lv, s3622c2f10, ABISELECT(304,220), "S3622C2.s3622c2f10");
    check_field_offset(lv, s3622c2f11, ABISELECT(312,228), "S3622C2.s3622c2f11");
    check_field_offset(lv, s3622c2f12, ABISELECT(344,260), "S3622C2.s3622c2f12");
    check_field_offset(lv, s3622c2f13, ABISELECT(376,292), "S3622C2.s3622c2f13");
    check_field_offset(lv, s3622c2f14, ABISELECT(388,304), "S3622C2.s3622c2f14");
    check_field_offset(lv, s3622c2f15, ABISELECT(6536,6448), "S3622C2.s3622c2f15");
    check_field_offset(lv, s3622c2f16, ABISELECT(6552,6460), "S3622C2.s3622c2f16");
    check_field_offset(lv, s3622c2f17, ABISELECT(6576,6476), "S3622C2.s3622c2f17");
    check_field_offset(lv, s3622c2f18, ABISELECT(6580,6480), "S3622C2.s3622c2f18");
    check_field_offset(lv, s3622c2f19, ABISELECT(6584,6484), "S3622C2.s3622c2f19");
    check_field_offset(lv, s3622c2f20, ABISELECT(6588,6488), "S3622C2.s3622c2f20");
    check_field_offset(lv, s3622c2f21, ABISELECT(6608,6508), "S3622C2.s3622c2f21");
    check_field_offset(lv, s3622c2f22, ABISELECT(6664,6564), "S3622C2.s3622c2f22");
    check_field_offset(lv, s3622c2f23, ABISELECT(6672,6568), "S3622C2.s3622c2f23");
    check_field_offset(lv, s3622c2f24, ABISELECT(6744,6640), "S3622C2.s3622c2f24");
    check_field_offset(lv, s3622c2f25, ABISELECT(6752,6648), "S3622C2.s3622c2f25");
    check_field_offset(lv, s3622c2f26, ABISELECT(6848,6732), "S3622C2.s3622c2f26");
    check_field_offset(lv, s3622c2f27, ABISELECT(7144,6968), "S3622C2.s3622c2f27");
    check_field_offset(lv, s3622c2f28, ABISELECT(7168,6980), "S3622C2.s3622c2f28");
    check_field_offset(lv, s3622c2f29, ABISELECT(7184,6996), "S3622C2.s3622c2f29");
    check_field_offset(lv, s3622c2f30, ABISELECT(7200,7008), "S3622C2.s3622c2f30");
    check_field_offset(lv, s3622c2f31, ABISELECT(7204,7012), "S3622C2.s3622c2f31");
    check_field_offset(lv, s3622c2f32, ABISELECT(7208,7016), "S3622C2.s3622c2f32");
    check_field_offset(lv, s3622c2f33, ABISELECT(7216,7024), "S3622C2.s3622c2f33");
    check_field_offset(lv, s3622c2f34, ABISELECT(7224,7028), "S3622C2.s3622c2f34");
    test_class_info(&lv, &cd_S3622C2);
    dp->~S3622C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3622C2(Test_S3622C2, "S3622C2", ABISELECT(7232,7036));

#else // __cplusplus

extern void _ZN7S3622C2C1Ev();
extern void _ZN7S3622C2D1Ev();
Name_Map name_map_S3622C2[] = {
  NSPAIR(_ZN7S3622C2C1Ev),
  NSPAIR(_ZN7S3622C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3625C3_nt;
extern VTBL_ENTRY _ZTI10S3625C3_nt[];
extern  VTBL_ENTRY _ZTV10S3625C3_nt[];
static Base_Class bases_S3622C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3625C3_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 _ZTI7S3622C2[];
extern void _ZN7S3622C2D1Ev();
extern void _ZN7S3622C2D0Ev();
extern void _ZN7S3622C23v49Ev();
extern void _ZN7S3622C23v50Ev();
extern void _ZN7S3622C23v51Ev();
extern void _ZN7S3622C23v52Ev();
extern void _ZN7S3622C23v53Ev();
extern void _ZN7S3622C23v54Ev();
extern void _ZN7S3622C23v55Ev();
extern void _ZN7S3622C23v56Ev();
extern void _ZN7S3622C23v57Ev();
extern void _ZN7S3622C23v58Ev();
extern void _ZN7S3622C23v59Ev();
extern void _ZN7S3622C23v60Ev();
extern void _ZN7S3622C23v61Ev();
extern void _ZN7S3622C23v62Ev();
extern void _ZN7S3622C23v63Ev();
extern void _ZN7S3622C23v64Ev();
extern void _ZN7S3622C23v65Ev();
extern void _ZN7S3622C23v66Ev();
extern void _ZN7S3622C23v67Ev();
extern void _ZN7S3622C23v68Ev();
extern void _ZN7S3622C23v69Ev();
extern void _ZN7S3622C23v70Ev();
extern void _ZN7S3622C23v71Ev();
extern void _ZN7S3622C23v72Ev();
extern void _ZN7S3622C23v73Ev();
extern void _ZN7S3622C23v74Ev();
extern void _ZN7S3622C23v75Ev();
extern void _ZN7S3622C23v76Ev();
extern void _ZN7S3622C23v77Ev();
extern void _ZN7S3622C23v78Ev();
extern void _ZN7S3622C23v79Ev();
extern void _ZN7S3622C23v80Ev();
extern void _ZN7S3622C23v81Ev();
extern void _ZN7S3622C23v82Ev();
extern void _ZN7S3622C23v83Ev();
extern void _ZN7S3622C23v84Ev();
extern void _ZN7S3622C23v85Ev();
extern void _ZN7S3622C23v86Ev();
extern void _ZN7S3622C23v87Ev();
extern void _ZN7S3622C23v88Ev();
extern void _ZN7S3622C23v89Ev();
extern void _ZN7S3622C23v90Ev();
extern void _ZN7S3622C23v91Ev();
extern void _ZN7S3622C23v92Ev();
extern void _ZN7S3622C23v93Ev();
extern void _ZN7S3622C23v94Ev();
extern void _ZN7S3622C23v95Ev();
extern void _ZN7S3622C23v96Ev();
extern void _ZN7S3622C23v97Ev();
extern void _ZN7S3622C23v98Ev();
extern void _ZN7S3622C23v99Ev();
extern void _ZN7S3622C24v100Ev();
extern void _ZN7S3622C24v101Ev();
extern void _ZN7S3622C24v102Ev();
extern void _ZN7S3622C24v103Ev();
extern void _ZN7S3622C24v104Ev();
extern void _ZN7S3622C24v105Ev();
extern void _ZN7S3622C24v106Ev();
extern void _ZN7S3622C24v107Ev();
extern void _ZN7S3622C24v108Ev();
extern void _ZN7S3622C24v109Ev();
extern void _ZN7S3622C24v110Ev();
extern void _ZN7S3622C24v111Ev();
extern void _ZN7S3622C24v112Ev();
extern void _ZN7S3622C24v113Ev();
extern void _ZN7S3622C24v114Ev();
extern void _ZN7S3622C24v115Ev();
extern void _ZN7S3622C24v116Ev();
extern void _ZN7S3622C24v117Ev();
extern void _ZN7S3622C24v118Ev();
extern void _ZN7S3622C24v119Ev();
extern void _ZN7S3622C24v120Ev();
extern void _ZN7S3622C24v121Ev();
extern void _ZN7S3622C24v122Ev();
extern void _ZN7S3622C24v123Ev();
extern void _ZN7S3622C24v124Ev();
extern void _ZN7S3622C24v125Ev();
extern void _ZN7S3622C24v126Ev();
extern void _ZN7S3622C24v127Ev();
extern void _ZN7S3622C24v128Ev();
extern void _ZN7S3622C24v129Ev();
extern void _ZN7S3622C24v130Ev();
extern void _ZN7S3622C24v131Ev();
extern void _ZN7S3622C24v132Ev();
extern void _ZN7S3622C24v133Ev();
extern void _ZN7S3622C24v134Ev();
extern void _ZN7S3622C24v135Ev();
extern void _ZN7S3622C24v136Ev();
extern void _ZN7S3622C24v137Ev();
extern void _ZN7S3622C24v138Ev();
extern void _ZN7S3622C24v139Ev();
extern void _ZN7S3622C24v140Ev();
extern void _ZN7S3622C24v141Ev();
extern void _ZN7S3622C24v142Ev();
extern void _ZN7S3622C24v143Ev();
extern void _ZN7S3622C24v144Ev();
extern void _ZN7S3622C24v145Ev();
static  VTBL_ENTRY vtc_S3622C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3622C2[0]),
  (VTBL_ENTRY)&_ZN7S3622C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3622C2D0Ev,
  (VTBL_ENTRY)&_ZN7S3622C23v49Ev,
  (VTBL_ENTRY)&_ZN7S3622C23v50Ev,
  (VTBL_ENTRY)&_ZN7S3622C23v51Ev,
  (VTBL_ENTRY)&_ZN7S3622C23v52Ev,
  (VTBL_ENTRY)&_ZN7S3622C23v53Ev,
  (VTBL_ENTRY)&_ZN7S3622C23v54Ev,
  (VTBL_ENTRY)&_ZN7S3622C23v55Ev,
  (VTBL_ENTRY)&_ZN7S3622C23v56Ev,
  (VTBL_ENTRY)&_ZN7S3622C23v57Ev,
  (VTBL_ENTRY)&_ZN7S3622C23v58Ev,
  (VTBL_ENTRY)&_ZN7S3622C23v59Ev,
  (VTBL_ENTRY)&_ZN7S3622C23v60Ev,
  (VTBL_ENTRY)&_ZN7S3622C23v61Ev,
  (VTBL_ENTRY)&_ZN7S3622C23v62Ev,
  (VTBL_ENTRY)&_ZN7S3622C23v63Ev,
  (VTBL_ENTRY)&_ZN7S3622C23v64Ev,
  (VTBL_ENTRY)&_ZN7S3622C23v65Ev,
  (VTBL_ENTRY)&_ZN7S3622C23v66Ev,
  (VTBL_ENTRY)&_ZN7S3622C23v67Ev,
  (VTBL_ENTRY)&_ZN7S3622C23v68Ev,
  (VTBL_ENTRY)&_ZN7S3622C23v69Ev,
  (VTBL_ENTRY)&_ZN7S3622C23v70Ev,
  (VTBL_ENTRY)&_ZN7S3622C23v71Ev,
  (VTBL_ENTRY)&_ZN7S3622C23v72Ev,
  (VTBL_ENTRY)&_ZN7S3622C23v73Ev,
  (VTBL_ENTRY)&_ZN7S3622C23v74Ev,
  (VTBL_ENTRY)&_ZN7S3622C23v75Ev,
  (VTBL_ENTRY)&_ZN7S3622C23v76Ev,
  (VTBL_ENTRY)&_ZN7S3622C23v77Ev,
  (VTBL_ENTRY)&_ZN7S3622C23v78Ev,
  (VTBL_ENTRY)&_ZN7S3622C23v79Ev,
  (VTBL_ENTRY)&_ZN7S3622C23v80Ev,
  (VTBL_ENTRY)&_ZN7S3622C23v81Ev,
  (VTBL_ENTRY)&_ZN7S3622C23v82Ev,
  (VTBL_ENTRY)&_ZN7S3622C23v83Ev,
  (VTBL_ENTRY)&_ZN7S3622C23v84Ev,
  (VTBL_ENTRY)&_ZN7S3622C23v85Ev,
  (VTBL_ENTRY)&_ZN7S3622C23v86Ev,
  (VTBL_ENTRY)&_ZN7S3622C23v87Ev,
  (VTBL_ENTRY)&_ZN7S3622C23v88Ev,
  (VTBL_ENTRY)&_ZN7S3622C23v89Ev,
  (VTBL_ENTRY)&_ZN7S3622C23v90Ev,
  (VTBL_ENTRY)&_ZN7S3622C23v91Ev,
  (VTBL_ENTRY)&_ZN7S3622C23v92Ev,
  (VTBL_ENTRY)&_ZN7S3622C23v93Ev,
  (VTBL_ENTRY)&_ZN7S3622C23v94Ev,
  (VTBL_ENTRY)&_ZN7S3622C23v95Ev,
  (VTBL_ENTRY)&_ZN7S3622C23v96Ev,
  (VTBL_ENTRY)&_ZN7S3622C23v97Ev,
  (VTBL_ENTRY)&_ZN7S3622C23v98Ev,
  (VTBL_ENTRY)&_ZN7S3622C23v99Ev,
  (VTBL_ENTRY)&_ZN7S3622C24v100Ev,
  (VTBL_ENTRY)&_ZN7S3622C24v101Ev,
  (VTBL_ENTRY)&_ZN7S3622C24v102Ev,
  (VTBL_ENTRY)&_ZN7S3622C24v103Ev,
  (VTBL_ENTRY)&_ZN7S3622C24v104Ev,
  (VTBL_ENTRY)&_ZN7S3622C24v105Ev,
  (VTBL_ENTRY)&_ZN7S3622C24v106Ev,
  (VTBL_ENTRY)&_ZN7S3622C24v107Ev,
  (VTBL_ENTRY)&_ZN7S3622C24v108Ev,
  (VTBL_ENTRY)&_ZN7S3622C24v109Ev,
  (VTBL_ENTRY)&_ZN7S3622C24v110Ev,
  (VTBL_ENTRY)&_ZN7S3622C24v111Ev,
  (VTBL_ENTRY)&_ZN7S3622C24v112Ev,
  (VTBL_ENTRY)&_ZN7S3622C24v113Ev,
  (VTBL_ENTRY)&_ZN7S3622C24v114Ev,
  (VTBL_ENTRY)&_ZN7S3622C24v115Ev,
  (VTBL_ENTRY)&_ZN7S3622C24v116Ev,
  (VTBL_ENTRY)&_ZN7S3622C24v117Ev,
  (VTBL_ENTRY)&_ZN7S3622C24v118Ev,
  (VTBL_ENTRY)&_ZN7S3622C24v119Ev,
  (VTBL_ENTRY)&_ZN7S3622C24v120Ev,
  (VTBL_ENTRY)&_ZN7S3622C24v121Ev,
  (VTBL_ENTRY)&_ZN7S3622C24v122Ev,
  (VTBL_ENTRY)&_ZN7S3622C24v123Ev,
  (VTBL_ENTRY)&_ZN7S3622C24v124Ev,
  (VTBL_ENTRY)&_ZN7S3622C24v125Ev,
  (VTBL_ENTRY)&_ZN7S3622C24v126Ev,
  (VTBL_ENTRY)&_ZN7S3622C24v127Ev,
  (VTBL_ENTRY)&_ZN7S3622C24v128Ev,
  (VTBL_ENTRY)&_ZN7S3622C24v129Ev,
  (VTBL_ENTRY)&_ZN7S3622C24v130Ev,
  (VTBL_ENTRY)&_ZN7S3622C24v131Ev,
  (VTBL_ENTRY)&_ZN7S3622C24v132Ev,
  (VTBL_ENTRY)&_ZN7S3622C24v133Ev,
  (VTBL_ENTRY)&_ZN7S3622C24v134Ev,
  (VTBL_ENTRY)&_ZN7S3622C24v135Ev,
  (VTBL_ENTRY)&_ZN7S3622C24v136Ev,
  (VTBL_ENTRY)&_ZN7S3622C24v137Ev,
  (VTBL_ENTRY)&_ZN7S3622C24v138Ev,
  (VTBL_ENTRY)&_ZN7S3622C24v139Ev,
  (VTBL_ENTRY)&_ZN7S3622C24v140Ev,
  (VTBL_ENTRY)&_ZN7S3622C24v141Ev,
  (VTBL_ENTRY)&_ZN7S3622C24v142Ev,
  (VTBL_ENTRY)&_ZN7S3622C24v143Ev,
  (VTBL_ENTRY)&_ZN7S3622C24v144Ev,
  (VTBL_ENTRY)&_ZN7S3622C24v145Ev,
};
extern VTBL_ENTRY _ZTI7S3622C2[];
extern  VTBL_ENTRY _ZTV7S3622C2[];
Class_Descriptor cd_S3622C2 = {  "S3622C2", // class name
  bases_S3622C2, 1,
  &(vtc_S3622C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(7232,7036), // object size
  NSPAIRA(_ZTI7S3622C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3622C2),101, //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  S3622C35_nt  {
  __tsi64 s3622c35f0[2];
  void  mf3622c35(); // _ZN11S3622C35_nt9mf3622c35Ev
};
//SIG(-1 S3622C35_nt) C1{ m FL[2]}


void  S3622C35_nt ::mf3622c35(){}

//skip512 S3622C35_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3622C34_nt  {
  ::S3622C35_nt s3622c34f0;
  void  mf3622c34(); // _ZN11S3622C34_nt9mf3622c34Ev
};
//SIG(-1 S3622C34_nt) C1{ m FC2{ m FL[2]}}


void  S3622C34_nt ::mf3622c34(){}

//skip512 S3622C34_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3622C33  {
  char s3622c33f0;
  ::S3622C34_nt s3622c33f1;
  ::S3622C34_nt s3622c33f2;
  ::S3622C34_nt s3622c33f3;
  int s3622c33f4[3];
  char s3622c33f5;
  int s3622c33f6;
};
//SIG(1 S3622C33) C1{ Fc FC2{ m FC3{ m FL[2]}} FC2 FC2 Fi[3] Fc Fi}



static void Test_S3622C33()
{
  {
    init_simple_test("S3622C33");
    S3622C33 lv;
    check2(sizeof(lv), ABISELECT(80,72), "sizeof(S3622C33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3622C33)");
    check_field_offset(lv, s3622c33f0, 0, "S3622C33.s3622c33f0");
    check_field_offset(lv, s3622c33f1, ABISELECT(8,4), "S3622C33.s3622c33f1");
    check_field_offset(lv, s3622c33f2, ABISELECT(24,20), "S3622C33.s3622c33f2");
    check_field_offset(lv, s3622c33f3, ABISELECT(40,36), "S3622C33.s3622c33f3");
    check_field_offset(lv, s3622c33f4, ABISELECT(56,52), "S3622C33.s3622c33f4");
    check_field_offset(lv, s3622c33f5, ABISELECT(68,64), "S3622C33.s3622c33f5");
    check_field_offset(lv, s3622c33f6, ABISELECT(72,68), "S3622C33.s3622c33f6");
  }
}
static Arrange_To_Call_Me vS3622C33(Test_S3622C33, "S3622C33", ABISELECT(80,72));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3622C1  : S3622C2 {
  void *s3622c1f0[6];
  int s3622c1f1;
  ::S3625C13_nt s3622c1f2;
  char s3622c1f3[4];
  ::S3625C18_nt s3622c1f4[4];
  __tsi64 s3622c1f5[4];
  ::S3622C33 s3622c1f6[4];
  ::S3625C4_nt s3622c1f7[4];
  char s3622c1f8;
  void *s3622c1f9[2];
  int s3622c1f10;
  char s3622c1f11;
  int s3622c1f12;
  void *s3622c1f13[2];
  int s3622c1f14;
  __tsi64 s3622c1f15[4];
  char s3622c1f16;
  virtual  ~S3622C1(); // _ZN7S3622C1D1Ev
  virtual void  v1(); // _ZN7S3622C12v1Ev
  virtual void  v2(); // _ZN7S3622C12v2Ev
  virtual void  v3(); // _ZN7S3622C12v3Ev
  virtual void  v4(); // _ZN7S3622C12v4Ev
  virtual void  v5(); // _ZN7S3622C12v5Ev
  virtual void  v6(); // _ZN7S3622C12v6Ev
  virtual void  v7(); // _ZN7S3622C12v7Ev
  virtual void  v8(); // _ZN7S3622C12v8Ev
  virtual void  v9(); // _ZN7S3622C12v9Ev
  virtual void  v10(); // _ZN7S3622C13v10Ev
  virtual void  v11(); // _ZN7S3622C13v11Ev
  virtual void  v12(); // _ZN7S3622C13v12Ev
  virtual void  v13(); // _ZN7S3622C13v13Ev
  virtual void  v14(); // _ZN7S3622C13v14Ev
  virtual void  v15(); // _ZN7S3622C13v15Ev
  virtual void  v16(); // _ZN7S3622C13v16Ev
  virtual void  v17(); // _ZN7S3622C13v17Ev
  virtual void  v18(); // _ZN7S3622C13v18Ev
  virtual void  v19(); // _ZN7S3622C13v19Ev
  virtual void  v20(); // _ZN7S3622C13v20Ev
  virtual void  v21(); // _ZN7S3622C13v21Ev
  virtual void  v22(); // _ZN7S3622C13v22Ev
  virtual void  v23(); // _ZN7S3622C13v23Ev
  virtual void  v24(); // _ZN7S3622C13v24Ev
  virtual void  v25(); // _ZN7S3622C13v25Ev
  virtual void  v26(); // _ZN7S3622C13v26Ev
  virtual void  v27(); // _ZN7S3622C13v27Ev
  virtual void  v28(); // _ZN7S3622C13v28Ev
  virtual void  v29(); // _ZN7S3622C13v29Ev
  virtual void  v30(); // _ZN7S3622C13v30Ev
  virtual void  v31(); // _ZN7S3622C13v31Ev
  virtual void  v32(); // _ZN7S3622C13v32Ev
  virtual void  v33(); // _ZN7S3622C13v33Ev
  virtual void  v34(); // _ZN7S3622C13v34Ev
  virtual void  v35(); // _ZN7S3622C13v35Ev
  virtual void  v36(); // _ZN7S3622C13v36Ev
  virtual void  v37(); // _ZN7S3622C13v37Ev
  virtual void  v38(); // _ZN7S3622C13v38Ev
  virtual void  v39(); // _ZN7S3622C13v39Ev
  virtual void  v40(); // _ZN7S3622C13v40Ev
  virtual void  v41(); // _ZN7S3622C13v41Ev
  virtual void  v42(); // _ZN7S3622C13v42Ev
  virtual void  v43(); // _ZN7S3622C13v43Ev
  virtual void  v44(); // _ZN7S3622C13v44Ev
  virtual void  v45(); // _ZN7S3622C13v45Ev
  virtual void  v46(); // _ZN7S3622C13v46Ev
  virtual void  v47(); // _ZN7S3622C13v47Ev
  virtual void  v48(); // _ZN7S3622C13v48Ev
  S3622C1(); // tgen
};
//SIG(1 S3622C1) C1{ BC2{ BC3{ vd m FC4{ m Fp Fi FC5{ m} FC6{ m}} FC4 Fc} vd 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 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 Fi[3] FC7{ m Fc Fl[2] Fs[12] Fc[5]} FC8{ m Fc Fl[4] Fi[4]} Fi[3] Fp Fc[3] FC9{ m FC10{ m FC11{ FL[4]}} Fc Fp Fi[3]} Fi FC12{ m Fp Fi[2] FC13{ m}} Fp Fi[2] FC10 FC10 Fi[3] Fc[6144] FC14{ m Fp Fi FC15{ m}} FC16{ m Fp Fi[2] FC15} Fc Fi Fc Fi[5] FL[7] Fc FL[9] Fi[2] FC17{ BC18{ m FC19{ m Fc[11]} Fi[7] FL} Fi FC16 FC19 Fi} FC20{ m Fp FC10 FL[2] Fi FL Fi[2] Fc FC14 FC14 FL[5] Fc Fi FC16 FC16 FC16 FC16 FC12 Fi[2]} Fp[3] FL[2] FC14 Fi Fc FL Fc FL} 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 Fp[6] Fi FC10 Fc[4] FC14[4] FL[4] FC21{ Fc FC22{ m FC23{ m FL[2]}} FC22 FC22 Fi[3] Fc Fi}[4] FC4[4] Fc Fp[2] Fi Fc Fi Fp[2] Fi FL[4] Fc}


 S3622C1 ::~S3622C1(){ note_dtor("S3622C1", this);}
void  S3622C1 ::v1(){vfunc_called(this, "_ZN7S3622C12v1Ev");}
void  S3622C1 ::v2(){vfunc_called(this, "_ZN7S3622C12v2Ev");}
void  S3622C1 ::v3(){vfunc_called(this, "_ZN7S3622C12v3Ev");}
void  S3622C1 ::v4(){vfunc_called(this, "_ZN7S3622C12v4Ev");}
void  S3622C1 ::v5(){vfunc_called(this, "_ZN7S3622C12v5Ev");}
void  S3622C1 ::v6(){vfunc_called(this, "_ZN7S3622C12v6Ev");}
void  S3622C1 ::v7(){vfunc_called(this, "_ZN7S3622C12v7Ev");}
void  S3622C1 ::v8(){vfunc_called(this, "_ZN7S3622C12v8Ev");}
void  S3622C1 ::v9(){vfunc_called(this, "_ZN7S3622C12v9Ev");}
void  S3622C1 ::v10(){vfunc_called(this, "_ZN7S3622C13v10Ev");}
void  S3622C1 ::v11(){vfunc_called(this, "_ZN7S3622C13v11Ev");}
void  S3622C1 ::v12(){vfunc_called(this, "_ZN7S3622C13v12Ev");}
void  S3622C1 ::v13(){vfunc_called(this, "_ZN7S3622C13v13Ev");}
void  S3622C1 ::v14(){vfunc_called(this, "_ZN7S3622C13v14Ev");}
void  S3622C1 ::v15(){vfunc_called(this, "_ZN7S3622C13v15Ev");}
void  S3622C1 ::v16(){vfunc_called(this, "_ZN7S3622C13v16Ev");}
void  S3622C1 ::v17(){vfunc_called(this, "_ZN7S3622C13v17Ev");}
void  S3622C1 ::v18(){vfunc_called(this, "_ZN7S3622C13v18Ev");}
void  S3622C1 ::v19(){vfunc_called(this, "_ZN7S3622C13v19Ev");}
void  S3622C1 ::v20(){vfunc_called(this, "_ZN7S3622C13v20Ev");}
void  S3622C1 ::v21(){vfunc_called(this, "_ZN7S3622C13v21Ev");}
void  S3622C1 ::v22(){vfunc_called(this, "_ZN7S3622C13v22Ev");}
void  S3622C1 ::v23(){vfunc_called(this, "_ZN7S3622C13v23Ev");}
void  S3622C1 ::v24(){vfunc_called(this, "_ZN7S3622C13v24Ev");}
void  S3622C1 ::v25(){vfunc_called(this, "_ZN7S3622C13v25Ev");}
void  S3622C1 ::v26(){vfunc_called(this, "_ZN7S3622C13v26Ev");}
void  S3622C1 ::v27(){vfunc_called(this, "_ZN7S3622C13v27Ev");}
void  S3622C1 ::v28(){vfunc_called(this, "_ZN7S3622C13v28Ev");}
void  S3622C1 ::v29(){vfunc_called(this, "_ZN7S3622C13v29Ev");}
void  S3622C1 ::v30(){vfunc_called(this, "_ZN7S3622C13v30Ev");}
void  S3622C1 ::v31(){vfunc_called(this, "_ZN7S3622C13v31Ev");}
void  S3622C1 ::v32(){vfunc_called(this, "_ZN7S3622C13v32Ev");}
void  S3622C1 ::v33(){vfunc_called(this, "_ZN7S3622C13v33Ev");}
void  S3622C1 ::v34(){vfunc_called(this, "_ZN7S3622C13v34Ev");}
void  S3622C1 ::v35(){vfunc_called(this, "_ZN7S3622C13v35Ev");}
void  S3622C1 ::v36(){vfunc_called(this, "_ZN7S3622C13v36Ev");}
void  S3622C1 ::v37(){vfunc_called(this, "_ZN7S3622C13v37Ev");}
void  S3622C1 ::v38(){vfunc_called(this, "_ZN7S3622C13v38Ev");}
void  S3622C1 ::v39(){vfunc_called(this, "_ZN7S3622C13v39Ev");}
void  S3622C1 ::v40(){vfunc_called(this, "_ZN7S3622C13v40Ev");}
void  S3622C1 ::v41(){vfunc_called(this, "_ZN7S3622C13v41Ev");}
void  S3622C1 ::v42(){vfunc_called(this, "_ZN7S3622C13v42Ev");}
void  S3622C1 ::v43(){vfunc_called(this, "_ZN7S3622C13v43Ev");}
void  S3622C1 ::v44(){vfunc_called(this, "_ZN7S3622C13v44Ev");}
void  S3622C1 ::v45(){vfunc_called(this, "_ZN7S3622C13v45Ev");}
void  S3622C1 ::v46(){vfunc_called(this, "_ZN7S3622C13v46Ev");}
void  S3622C1 ::v47(){vfunc_called(this, "_ZN7S3622C13v47Ev");}
void  S3622C1 ::v48(){vfunc_called(this, "_ZN7S3622C13v48Ev");}
S3622C1 ::S3622C1(){ note_ctor("S3622C1", this);} // tgen

static void Test_S3622C1()
{
  extern Class_Descriptor cd_S3622C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(990,1898)];
    init_test(&cd_S3622C1, buf);
    S3622C1 *dp, &lv = *(dp=new (buf) S3622C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(7912,7588), "sizeof(S3622C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3622C1)");
    check_base_class_offset(lv, (S3625C3_nt*)(S3622C2*), 0, "S3622C1");
    check_base_class_offset(lv, (S3622C2*), 0, "S3622C1");
    check_field_offset(lv, s3622c1f0, ABISELECT(7232,7036), "S3622C1.s3622c1f0");
    check_field_offset(lv, s3622c1f1, ABISELECT(7280,7060), "S3622C1.s3622c1f1");
    check_field_offset(lv, s3622c1f2, ABISELECT(7288,7064), "S3622C1.s3622c1f2");
    check_field_offset(lv, s3622c1f3, ABISELECT(7320,7096), "S3622C1.s3622c1f3");
    check_field_offset(lv, s3622c1f4, ABISELECT(7328,7100), "S3622C1.s3622c1f4");
    check_field_offset(lv, s3622c1f5, ABISELECT(7392,7148), "S3622C1.s3622c1f5");
    check_field_offset(lv, s3622c1f6, ABISELECT(7424,7180), "S3622C1.s3622c1f6");
    check_field_offset(lv, s3622c1f7, ABISELECT(7744,7468), "S3622C1.s3622c1f7");
    check_field_offset(lv, s3622c1f8, ABISELECT(7808,7516), "S3622C1.s3622c1f8");
    check_field_offset(lv, s3622c1f9, ABISELECT(7816,7520), "S3622C1.s3622c1f9");
    check_field_offset(lv, s3622c1f10, ABISELECT(7832,7528), "S3622C1.s3622c1f10");
    check_field_offset(lv, s3622c1f11, ABISELECT(7836,7532), "S3622C1.s3622c1f11");
    check_field_offset(lv, s3622c1f12, ABISELECT(7840,7536), "S3622C1.s3622c1f12");
    check_field_offset(lv, s3622c1f13, ABISELECT(7848,7540), "S3622C1.s3622c1f13");
    check_field_offset(lv, s3622c1f14, ABISELECT(7864,7548), "S3622C1.s3622c1f14");
    check_field_offset(lv, s3622c1f15, ABISELECT(7872,7552), "S3622C1.s3622c1f15");
    check_field_offset(lv, s3622c1f16, ABISELECT(7904,7584), "S3622C1.s3622c1f16");
    test_class_info(&lv, &cd_S3622C1);
    dp->~S3622C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3622C1(Test_S3622C1, "S3622C1", ABISELECT(7912,7588));

#else // __cplusplus

extern void _ZN7S3622C1C1Ev();
extern void _ZN7S3622C1D1Ev();
Name_Map name_map_S3622C1[] = {
  NSPAIR(_ZN7S3622C1C1Ev),
  NSPAIR(_ZN7S3622C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3625C3_nt;
extern VTBL_ENTRY _ZTI10S3625C3_nt[];
extern  VTBL_ENTRY _ZTV10S3625C3_nt[];
extern Class_Descriptor cd_S3622C2;
extern VTBL_ENTRY _ZTI7S3622C2[];
extern  VTBL_ENTRY _ZTV7S3622C2[];
static Base_Class bases_S3622C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3625C3_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_S3622C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S3622C1[];
extern void _ZN7S3622C1D1Ev();
extern void _ZN7S3622C1D0Ev();
extern void _ZN7S3622C23v49Ev();
extern void _ZN7S3622C23v50Ev();
extern void _ZN7S3622C23v51Ev();
extern void _ZN7S3622C23v52Ev();
extern void _ZN7S3622C23v53Ev();
extern void _ZN7S3622C23v54Ev();
extern void _ZN7S3622C23v55Ev();
extern void _ZN7S3622C23v56Ev();
extern void _ZN7S3622C23v57Ev();
extern void _ZN7S3622C23v58Ev();
extern void _ZN7S3622C23v59Ev();
extern void _ZN7S3622C23v60Ev();
extern void _ZN7S3622C23v61Ev();
extern void _ZN7S3622C23v62Ev();
extern void _ZN7S3622C23v63Ev();
extern void _ZN7S3622C23v64Ev();
extern void _ZN7S3622C23v65Ev();
extern void _ZN7S3622C23v66Ev();
extern void _ZN7S3622C23v67Ev();
extern void _ZN7S3622C23v68Ev();
extern void _ZN7S3622C23v69Ev();
extern void _ZN7S3622C23v70Ev();
extern void _ZN7S3622C23v71Ev();
extern void _ZN7S3622C23v72Ev();
extern void _ZN7S3622C23v73Ev();
extern void _ZN7S3622C23v74Ev();
extern void _ZN7S3622C23v75Ev();
extern void _ZN7S3622C23v76Ev();
extern void _ZN7S3622C23v77Ev();
extern void _ZN7S3622C23v78Ev();
extern void _ZN7S3622C23v79Ev();
extern void _ZN7S3622C23v80Ev();
extern void _ZN7S3622C23v81Ev();
extern void _ZN7S3622C23v82Ev();
extern void _ZN7S3622C23v83Ev();
extern void _ZN7S3622C23v84Ev();
extern void _ZN7S3622C23v85Ev();
extern void _ZN7S3622C23v86Ev();
extern void _ZN7S3622C23v87Ev();
extern void _ZN7S3622C23v88Ev();
extern void _ZN7S3622C23v89Ev();
extern void _ZN7S3622C23v90Ev();
extern void _ZN7S3622C23v91Ev();
extern void _ZN7S3622C23v92Ev();
extern void _ZN7S3622C23v93Ev();
extern void _ZN7S3622C23v94Ev();
extern void _ZN7S3622C23v95Ev();
extern void _ZN7S3622C23v96Ev();
extern void _ZN7S3622C23v97Ev();
extern void _ZN7S3622C23v98Ev();
extern void _ZN7S3622C23v99Ev();
extern void _ZN7S3622C24v100Ev();
extern void _ZN7S3622C24v101Ev();
extern void _ZN7S3622C24v102Ev();
extern void _ZN7S3622C24v103Ev();
extern void _ZN7S3622C24v104Ev();
extern void _ZN7S3622C24v105Ev();
extern void _ZN7S3622C24v106Ev();
extern void _ZN7S3622C24v107Ev();
extern void _ZN7S3622C24v108Ev();
extern void _ZN7S3622C24v109Ev();
extern void _ZN7S3622C24v110Ev();
extern void _ZN7S3622C24v111Ev();
extern void _ZN7S3622C24v112Ev();
extern void _ZN7S3622C24v113Ev();
extern void _ZN7S3622C24v114Ev();
extern void _ZN7S3622C24v115Ev();
extern void _ZN7S3622C24v116Ev();
extern void _ZN7S3622C24v117Ev();
extern void _ZN7S3622C24v118Ev();
extern void _ZN7S3622C24v119Ev();
extern void _ZN7S3622C24v120Ev();
extern void _ZN7S3622C24v121Ev();
extern void _ZN7S3622C24v122Ev();
extern void _ZN7S3622C24v123Ev();
extern void _ZN7S3622C24v124Ev();
extern void _ZN7S3622C24v125Ev();
extern void _ZN7S3622C24v126Ev();
extern void _ZN7S3622C24v127Ev();
extern void _ZN7S3622C24v128Ev();
extern void _ZN7S3622C24v129Ev();
extern void _ZN7S3622C24v130Ev();
extern void _ZN7S3622C24v131Ev();
extern void _ZN7S3622C24v132Ev();
extern void _ZN7S3622C24v133Ev();
extern void _ZN7S3622C24v134Ev();
extern void _ZN7S3622C24v135Ev();
extern void _ZN7S3622C24v136Ev();
extern void _ZN7S3622C24v137Ev();
extern void _ZN7S3622C24v138Ev();
extern void _ZN7S3622C24v139Ev();
extern void _ZN7S3622C24v140Ev();
extern void _ZN7S3622C24v141Ev();
extern void _ZN7S3622C24v142Ev();
extern void _ZN7S3622C24v143Ev();
extern void _ZN7S3622C24v144Ev();
extern void _ZN7S3622C24v145Ev();
extern void _ZN7S3622C12v1Ev();
extern void _ZN7S3622C12v2Ev();
extern void _ZN7S3622C12v3Ev();
extern void _ZN7S3622C12v4Ev();
extern void _ZN7S3622C12v5Ev();
extern void _ZN7S3622C12v6Ev();
extern void _ZN7S3622C12v7Ev();
extern void _ZN7S3622C12v8Ev();
extern void _ZN7S3622C12v9Ev();
extern void _ZN7S3622C13v10Ev();
extern void _ZN7S3622C13v11Ev();
extern void _ZN7S3622C13v12Ev();
extern void _ZN7S3622C13v13Ev();
extern void _ZN7S3622C13v14Ev();
extern void _ZN7S3622C13v15Ev();
extern void _ZN7S3622C13v16Ev();
extern void _ZN7S3622C13v17Ev();
extern void _ZN7S3622C13v18Ev();
extern void _ZN7S3622C13v19Ev();
extern void _ZN7S3622C13v20Ev();
extern void _ZN7S3622C13v21Ev();
extern void _ZN7S3622C13v22Ev();
extern void _ZN7S3622C13v23Ev();
extern void _ZN7S3622C13v24Ev();
extern void _ZN7S3622C13v25Ev();
extern void _ZN7S3622C13v26Ev();
extern void _ZN7S3622C13v27Ev();
extern void _ZN7S3622C13v28Ev();
extern void _ZN7S3622C13v29Ev();
extern void _ZN7S3622C13v30Ev();
extern void _ZN7S3622C13v31Ev();
extern void _ZN7S3622C13v32Ev();
extern void _ZN7S3622C13v33Ev();
extern void _ZN7S3622C13v34Ev();
extern void _ZN7S3622C13v35Ev();
extern void _ZN7S3622C13v36Ev();
extern void _ZN7S3622C13v37Ev();
extern void _ZN7S3622C13v38Ev();
extern void _ZN7S3622C13v39Ev();
extern void _ZN7S3622C13v40Ev();
extern void _ZN7S3622C13v41Ev();
extern void _ZN7S3622C13v42Ev();
extern void _ZN7S3622C13v43Ev();
extern void _ZN7S3622C13v44Ev();
extern void _ZN7S3622C13v45Ev();
extern void _ZN7S3622C13v46Ev();
extern void _ZN7S3622C13v47Ev();
extern void _ZN7S3622C13v48Ev();
static  VTBL_ENTRY vtc_S3622C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3622C1[0]),
  (VTBL_ENTRY)&_ZN7S3622C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3622C1D0Ev,
  (VTBL_ENTRY)&_ZN7S3622C23v49Ev,
  (VTBL_ENTRY)&_ZN7S3622C23v50Ev,
  (VTBL_ENTRY)&_ZN7S3622C23v51Ev,
  (VTBL_ENTRY)&_ZN7S3622C23v52Ev,
  (VTBL_ENTRY)&_ZN7S3622C23v53Ev,
  (VTBL_ENTRY)&_ZN7S3622C23v54Ev,
  (VTBL_ENTRY)&_ZN7S3622C23v55Ev,
  (VTBL_ENTRY)&_ZN7S3622C23v56Ev,
  (VTBL_ENTRY)&_ZN7S3622C23v57Ev,
  (VTBL_ENTRY)&_ZN7S3622C23v58Ev,
  (VTBL_ENTRY)&_ZN7S3622C23v59Ev,
  (VTBL_ENTRY)&_ZN7S3622C23v60Ev,
  (VTBL_ENTRY)&_ZN7S3622C23v61Ev,
  (VTBL_ENTRY)&_ZN7S3622C23v62Ev,
  (VTBL_ENTRY)&_ZN7S3622C23v63Ev,
  (VTBL_ENTRY)&_ZN7S3622C23v64Ev,
  (VTBL_ENTRY)&_ZN7S3622C23v65Ev,
  (VTBL_ENTRY)&_ZN7S3622C23v66Ev,
  (VTBL_ENTRY)&_ZN7S3622C23v67Ev,
  (VTBL_ENTRY)&_ZN7S3622C23v68Ev,
  (VTBL_ENTRY)&_ZN7S3622C23v69Ev,
  (VTBL_ENTRY)&_ZN7S3622C23v70Ev,
  (VTBL_ENTRY)&_ZN7S3622C23v71Ev,
  (VTBL_ENTRY)&_ZN7S3622C23v72Ev,
  (VTBL_ENTRY)&_ZN7S3622C23v73Ev,
  (VTBL_ENTRY)&_ZN7S3622C23v74Ev,
  (VTBL_ENTRY)&_ZN7S3622C23v75Ev,
  (VTBL_ENTRY)&_ZN7S3622C23v76Ev,
  (VTBL_ENTRY)&_ZN7S3622C23v77Ev,
  (VTBL_ENTRY)&_ZN7S3622C23v78Ev,
  (VTBL_ENTRY)&_ZN7S3622C23v79Ev,
  (VTBL_ENTRY)&_ZN7S3622C23v80Ev,
  (VTBL_ENTRY)&_ZN7S3622C23v81Ev,
  (VTBL_ENTRY)&_ZN7S3622C23v82Ev,
  (VTBL_ENTRY)&_ZN7S3622C23v83Ev,
  (VTBL_ENTRY)&_ZN7S3622C23v84Ev,
  (VTBL_ENTRY)&_ZN7S3622C23v85Ev,
  (VTBL_ENTRY)&_ZN7S3622C23v86Ev,
  (VTBL_ENTRY)&_ZN7S3622C23v87Ev,
  (VTBL_ENTRY)&_ZN7S3622C23v88Ev,
  (VTBL_ENTRY)&_ZN7S3622C23v89Ev,
  (VTBL_ENTRY)&_ZN7S3622C23v90Ev,
  (VTBL_ENTRY)&_ZN7S3622C23v91Ev,
  (VTBL_ENTRY)&_ZN7S3622C23v92Ev,
  (VTBL_ENTRY)&_ZN7S3622C23v93Ev,
  (VTBL_ENTRY)&_ZN7S3622C23v94Ev,
  (VTBL_ENTRY)&_ZN7S3622C23v95Ev,
  (VTBL_ENTRY)&_ZN7S3622C23v96Ev,
  (VTBL_ENTRY)&_ZN7S3622C23v97Ev,
  (VTBL_ENTRY)&_ZN7S3622C23v98Ev,
  (VTBL_ENTRY)&_ZN7S3622C23v99Ev,
  (VTBL_ENTRY)&_ZN7S3622C24v100Ev,
  (VTBL_ENTRY)&_ZN7S3622C24v101Ev,
  (VTBL_ENTRY)&_ZN7S3622C24v102Ev,
  (VTBL_ENTRY)&_ZN7S3622C24v103Ev,
  (VTBL_ENTRY)&_ZN7S3622C24v104Ev,
  (VTBL_ENTRY)&_ZN7S3622C24v105Ev,
  (VTBL_ENTRY)&_ZN7S3622C24v106Ev,
  (VTBL_ENTRY)&_ZN7S3622C24v107Ev,
  (VTBL_ENTRY)&_ZN7S3622C24v108Ev,
  (VTBL_ENTRY)&_ZN7S3622C24v109Ev,
  (VTBL_ENTRY)&_ZN7S3622C24v110Ev,
  (VTBL_ENTRY)&_ZN7S3622C24v111Ev,
  (VTBL_ENTRY)&_ZN7S3622C24v112Ev,
  (VTBL_ENTRY)&_ZN7S3622C24v113Ev,
  (VTBL_ENTRY)&_ZN7S3622C24v114Ev,
  (VTBL_ENTRY)&_ZN7S3622C24v115Ev,
  (VTBL_ENTRY)&_ZN7S3622C24v116Ev,
  (VTBL_ENTRY)&_ZN7S3622C24v117Ev,
  (VTBL_ENTRY)&_ZN7S3622C24v118Ev,
  (VTBL_ENTRY)&_ZN7S3622C24v119Ev,
  (VTBL_ENTRY)&_ZN7S3622C24v120Ev,
  (VTBL_ENTRY)&_ZN7S3622C24v121Ev,
  (VTBL_ENTRY)&_ZN7S3622C24v122Ev,
  (VTBL_ENTRY)&_ZN7S3622C24v123Ev,
  (VTBL_ENTRY)&_ZN7S3622C24v124Ev,
  (VTBL_ENTRY)&_ZN7S3622C24v125Ev,
  (VTBL_ENTRY)&_ZN7S3622C24v126Ev,
  (VTBL_ENTRY)&_ZN7S3622C24v127Ev,
  (VTBL_ENTRY)&_ZN7S3622C24v128Ev,
  (VTBL_ENTRY)&_ZN7S3622C24v129Ev,
  (VTBL_ENTRY)&_ZN7S3622C24v130Ev,
  (VTBL_ENTRY)&_ZN7S3622C24v131Ev,
  (VTBL_ENTRY)&_ZN7S3622C24v132Ev,
  (VTBL_ENTRY)&_ZN7S3622C24v133Ev,
  (VTBL_ENTRY)&_ZN7S3622C24v134Ev,
  (VTBL_ENTRY)&_ZN7S3622C24v135Ev,
  (VTBL_ENTRY)&_ZN7S3622C24v136Ev,
  (VTBL_ENTRY)&_ZN7S3622C24v137Ev,
  (VTBL_ENTRY)&_ZN7S3622C24v138Ev,
  (VTBL_ENTRY)&_ZN7S3622C24v139Ev,
  (VTBL_ENTRY)&_ZN7S3622C24v140Ev,
  (VTBL_ENTRY)&_ZN7S3622C24v141Ev,
  (VTBL_ENTRY)&_ZN7S3622C24v142Ev,
  (VTBL_ENTRY)&_ZN7S3622C24v143Ev,
  (VTBL_ENTRY)&_ZN7S3622C24v144Ev,
  (VTBL_ENTRY)&_ZN7S3622C24v145Ev,
  (VTBL_ENTRY)&_ZN7S3622C12v1Ev,
  (VTBL_ENTRY)&_ZN7S3622C12v2Ev,
  (VTBL_ENTRY)&_ZN7S3622C12v3Ev,
  (VTBL_ENTRY)&_ZN7S3622C12v4Ev,
  (VTBL_ENTRY)&_ZN7S3622C12v5Ev,
  (VTBL_ENTRY)&_ZN7S3622C12v6Ev,
  (VTBL_ENTRY)&_ZN7S3622C12v7Ev,
  (VTBL_ENTRY)&_ZN7S3622C12v8Ev,
  (VTBL_ENTRY)&_ZN7S3622C12v9Ev,
  (VTBL_ENTRY)&_ZN7S3622C13v10Ev,
  (VTBL_ENTRY)&_ZN7S3622C13v11Ev,
  (VTBL_ENTRY)&_ZN7S3622C13v12Ev,
  (VTBL_ENTRY)&_ZN7S3622C13v13Ev,
  (VTBL_ENTRY)&_ZN7S3622C13v14Ev,
  (VTBL_ENTRY)&_ZN7S3622C13v15Ev,
  (VTBL_ENTRY)&_ZN7S3622C13v16Ev,
  (VTBL_ENTRY)&_ZN7S3622C13v17Ev,
  (VTBL_ENTRY)&_ZN7S3622C13v18Ev,
  (VTBL_ENTRY)&_ZN7S3622C13v19Ev,
  (VTBL_ENTRY)&_ZN7S3622C13v20Ev,
  (VTBL_ENTRY)&_ZN7S3622C13v21Ev,
  (VTBL_ENTRY)&_ZN7S3622C13v22Ev,
  (VTBL_ENTRY)&_ZN7S3622C13v23Ev,
  (VTBL_ENTRY)&_ZN7S3622C13v24Ev,
  (VTBL_ENTRY)&_ZN7S3622C13v25Ev,
  (VTBL_ENTRY)&_ZN7S3622C13v26Ev,
  (VTBL_ENTRY)&_ZN7S3622C13v27Ev,
  (VTBL_ENTRY)&_ZN7S3622C13v28Ev,
  (VTBL_ENTRY)&_ZN7S3622C13v29Ev,
  (VTBL_ENTRY)&_ZN7S3622C13v30Ev,
  (VTBL_ENTRY)&_ZN7S3622C13v31Ev,
  (VTBL_ENTRY)&_ZN7S3622C13v32Ev,
  (VTBL_ENTRY)&_ZN7S3622C13v33Ev,
  (VTBL_ENTRY)&_ZN7S3622C13v34Ev,
  (VTBL_ENTRY)&_ZN7S3622C13v35Ev,
  (VTBL_ENTRY)&_ZN7S3622C13v36Ev,
  (VTBL_ENTRY)&_ZN7S3622C13v37Ev,
  (VTBL_ENTRY)&_ZN7S3622C13v38Ev,
  (VTBL_ENTRY)&_ZN7S3622C13v39Ev,
  (VTBL_ENTRY)&_ZN7S3622C13v40Ev,
  (VTBL_ENTRY)&_ZN7S3622C13v41Ev,
  (VTBL_ENTRY)&_ZN7S3622C13v42Ev,
  (VTBL_ENTRY)&_ZN7S3622C13v43Ev,
  (VTBL_ENTRY)&_ZN7S3622C13v44Ev,
  (VTBL_ENTRY)&_ZN7S3622C13v45Ev,
  (VTBL_ENTRY)&_ZN7S3622C13v46Ev,
  (VTBL_ENTRY)&_ZN7S3622C13v47Ev,
  (VTBL_ENTRY)&_ZN7S3622C13v48Ev,
};
extern VTBL_ENTRY _ZTI7S3622C1[];
extern  VTBL_ENTRY _ZTV7S3622C1[];
Class_Descriptor cd_S3622C1 = {  "S3622C1", // class name
  bases_S3622C1, 2,
  &(vtc_S3622C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(7912,7588), // object size
  NSPAIRA(_ZTI7S3622C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3622C1),149, //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  S534C5  {
  int s534c5f0;
  __tsi64 s534c5f1;
  void *s534c5f2[4];
  int s534c5f3[2];
  void *s534c5f4;
  ::S674C6_nt s534c5f5;
  void *s534c5f6[2];
  virtual  ~S534C5(); // _ZN6S534C5D1Ev
  virtual void  v3(); // _ZN6S534C52v3Ev
  virtual void  v4(); // _ZN6S534C52v4Ev
  virtual void  v5(); // _ZN6S534C52v5Ev
  virtual void  v6(); // _ZN6S534C52v6Ev
  virtual void  v7(); // _ZN6S534C52v7Ev
  virtual void  v8(); // _ZN6S534C52v8Ev
  virtual void  v9(); // _ZN6S534C52v9Ev
  virtual void  v10(); // _ZN6S534C53v10Ev
  virtual void  v11(); // _ZN6S534C53v11Ev
  virtual void  v12(); // _ZN6S534C53v12Ev
  virtual void  v13(); // _ZN6S534C53v13Ev
  virtual void  v14(); // _ZN6S534C53v14Ev
  virtual void  v15(); // _ZN6S534C53v15Ev
  virtual void  v16(); // _ZN6S534C53v16Ev
  virtual void  v17(); // _ZN6S534C53v17Ev
  virtual void  v18(); // _ZN6S534C53v18Ev
  virtual void  v19(); // _ZN6S534C53v19Ev
  virtual void  v20(); // _ZN6S534C53v20Ev
  virtual void  v21(); // _ZN6S534C53v21Ev
  virtual void  v22(); // _ZN6S534C53v22Ev
  virtual void  v23(); // _ZN6S534C53v23Ev
  virtual void  v24(); // _ZN6S534C53v24Ev
  virtual void  v25(); // _ZN6S534C53v25Ev
  virtual void  v26(); // _ZN6S534C53v26Ev
  virtual void  v27(); // _ZN6S534C53v27Ev
  virtual void  v28(); // _ZN6S534C53v28Ev
  virtual void  v29(); // _ZN6S534C53v29Ev
  virtual void  v30(); // _ZN6S534C53v30Ev
  virtual void  v31(); // _ZN6S534C53v31Ev
  virtual void  v32(); // _ZN6S534C53v32Ev
  virtual void  v33(); // _ZN6S534C53v33Ev
  virtual void  v34(); // _ZN6S534C53v34Ev
  virtual void  v35(); // _ZN6S534C53v35Ev
  virtual void  v36(); // _ZN6S534C53v36Ev
  virtual void  v37(); // _ZN6S534C53v37Ev
  virtual void  v38(); // _ZN6S534C53v38Ev
  virtual void  v39(); // _ZN6S534C53v39Ev
  virtual void  v40(); // _ZN6S534C53v40Ev
  virtual void  v41(); // _ZN6S534C53v41Ev
  virtual void  v42(); // _ZN6S534C53v42Ev
  virtual void  v43(); // _ZN6S534C53v43Ev
  virtual void  v44(); // _ZN6S534C53v44Ev
  virtual void  v45(); // _ZN6S534C53v45Ev
  virtual void  v46(); // _ZN6S534C53v46Ev
  virtual void  v47(); // _ZN6S534C53v47Ev
  virtual void  v48(); // _ZN6S534C53v48Ev
  virtual void  v49(); // _ZN6S534C53v49Ev
  virtual void  v50(); // _ZN6S534C53v50Ev
  virtual void  v51(); // _ZN6S534C53v51Ev
  virtual void  v52(); // _ZN6S534C53v52Ev
  virtual void  v53(); // _ZN6S534C53v53Ev
  virtual void  v54(); // _ZN6S534C53v54Ev
  virtual void  v55(); // _ZN6S534C53v55Ev
  virtual void  v56(); // _ZN6S534C53v56Ev
  virtual void  v57(); // _ZN6S534C53v57Ev
  virtual void  v58(); // _ZN6S534C53v58Ev
  virtual void  v59(); // _ZN6S534C53v59Ev
  virtual void  v60(); // _ZN6S534C53v60Ev
  virtual void  v61(); // _ZN6S534C53v61Ev
  virtual void  v62(); // _ZN6S534C53v62Ev
  virtual void  v63(); // _ZN6S534C53v63Ev
  virtual void  v64(); // _ZN6S534C53v64Ev
  virtual void  v65(); // _ZN6S534C53v65Ev
  virtual void  v66(); // _ZN6S534C53v66Ev
  S534C5(); // tgen
};
//SIG(-1 S534C5) 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]}


 S534C5 ::~S534C5(){ note_dtor("S534C5", this);}
void  S534C5 ::v3(){vfunc_called(this, "_ZN6S534C52v3Ev");}
void  S534C5 ::v4(){vfunc_called(this, "_ZN6S534C52v4Ev");}
void  S534C5 ::v5(){vfunc_called(this, "_ZN6S534C52v5Ev");}
void  S534C5 ::v6(){vfunc_called(this, "_ZN6S534C52v6Ev");}
void  S534C5 ::v7(){vfunc_called(this, "_ZN6S534C52v7Ev");}
void  S534C5 ::v8(){vfunc_called(this, "_ZN6S534C52v8Ev");}
void  S534C5 ::v9(){vfunc_called(this, "_ZN6S534C52v9Ev");}
void  S534C5 ::v10(){vfunc_called(this, "_ZN6S534C53v10Ev");}
void  S534C5 ::v11(){vfunc_called(this, "_ZN6S534C53v11Ev");}
void  S534C5 ::v12(){vfunc_called(this, "_ZN6S534C53v12Ev");}
void  S534C5 ::v13(){vfunc_called(this, "_ZN6S534C53v13Ev");}
void  S534C5 ::v14(){vfunc_called(this, "_ZN6S534C53v14Ev");}
void  S534C5 ::v15(){vfunc_called(this, "_ZN6S534C53v15Ev");}
void  S534C5 ::v16(){vfunc_called(this, "_ZN6S534C53v16Ev");}
void  S534C5 ::v17(){vfunc_called(this, "_ZN6S534C53v17Ev");}
void  S534C5 ::v18(){vfunc_called(this, "_ZN6S534C53v18Ev");}
void  S534C5 ::v19(){vfunc_called(this, "_ZN6S534C53v19Ev");}
void  S534C5 ::v20(){vfunc_called(this, "_ZN6S534C53v20Ev");}
void  S534C5 ::v21(){vfunc_called(this, "_ZN6S534C53v21Ev");}
void  S534C5 ::v22(){vfunc_called(this, "_ZN6S534C53v22Ev");}
void  S534C5 ::v23(){vfunc_called(this, "_ZN6S534C53v23Ev");}
void  S534C5 ::v24(){vfunc_called(this, "_ZN6S534C53v24Ev");}
void  S534C5 ::v25(){vfunc_called(this, "_ZN6S534C53v25Ev");}
void  S534C5 ::v26(){vfunc_called(this, "_ZN6S534C53v26Ev");}
void  S534C5 ::v27(){vfunc_called(this, "_ZN6S534C53v27Ev");}
void  S534C5 ::v28(){vfunc_called(this, "_ZN6S534C53v28Ev");}
void  S534C5 ::v29(){vfunc_called(this, "_ZN6S534C53v29Ev");}
void  S534C5 ::v30(){vfunc_called(this, "_ZN6S534C53v30Ev");}
void  S534C5 ::v31(){vfunc_called(this, "_ZN6S534C53v31Ev");}
void  S534C5 ::v32(){vfunc_called(this, "_ZN6S534C53v32Ev");}
void  S534C5 ::v33(){vfunc_called(this, "_ZN6S534C53v33Ev");}
void  S534C5 ::v34(){vfunc_called(this, "_ZN6S534C53v34Ev");}
void  S534C5 ::v35(){vfunc_called(this, "_ZN6S534C53v35Ev");}
void  S534C5 ::v36(){vfunc_called(this, "_ZN6S534C53v36Ev");}
void  S534C5 ::v37(){vfunc_called(this, "_ZN6S534C53v37Ev");}
void  S534C5 ::v38(){vfunc_called(this, "_ZN6S534C53v38Ev");}
void  S534C5 ::v39(){vfunc_called(this, "_ZN6S534C53v39Ev");}
void  S534C5 ::v40(){vfunc_called(this, "_ZN6S534C53v40Ev");}
void  S534C5 ::v41(){vfunc_called(this, "_ZN6S534C53v41Ev");}
void  S534C5 ::v42(){vfunc_called(this, "_ZN6S534C53v42Ev");}
void  S534C5 ::v43(){vfunc_called(this, "_ZN6S534C53v43Ev");}
void  S534C5 ::v44(){vfunc_called(this, "_ZN6S534C53v44Ev");}
void  S534C5 ::v45(){vfunc_called(this, "_ZN6S534C53v45Ev");}
void  S534C5 ::v46(){vfunc_called(this, "_ZN6S534C53v46Ev");}
void  S534C5 ::v47(){vfunc_called(this, "_ZN6S534C53v47Ev");}
void  S534C5 ::v48(){vfunc_called(this, "_ZN6S534C53v48Ev");}
void  S534C5 ::v49(){vfunc_called(this, "_ZN6S534C53v49Ev");}
void  S534C5 ::v50(){vfunc_called(this, "_ZN6S534C53v50Ev");}
void  S534C5 ::v51(){vfunc_called(this, "_ZN6S534C53v51Ev");}
void  S534C5 ::v52(){vfunc_called(this, "_ZN6S534C53v52Ev");}
void  S534C5 ::v53(){vfunc_called(this, "_ZN6S534C53v53Ev");}
void  S534C5 ::v54(){vfunc_called(this, "_ZN6S534C53v54Ev");}
void  S534C5 ::v55(){vfunc_called(this, "_ZN6S534C53v55Ev");}
void  S534C5 ::v56(){vfunc_called(this, "_ZN6S534C53v56Ev");}
void  S534C5 ::v57(){vfunc_called(this, "_ZN6S534C53v57Ev");}
void  S534C5 ::v58(){vfunc_called(this, "_ZN6S534C53v58Ev");}
void  S534C5 ::v59(){vfunc_called(this, "_ZN6S534C53v59Ev");}
void  S534C5 ::v60(){vfunc_called(this, "_ZN6S534C53v60Ev");}
void  S534C5 ::v61(){vfunc_called(this, "_ZN6S534C53v61Ev");}
void  S534C5 ::v62(){vfunc_called(this, "_ZN6S534C53v62Ev");}
void  S534C5 ::v63(){vfunc_called(this, "_ZN6S534C53v63Ev");}
void  S534C5 ::v64(){vfunc_called(this, "_ZN6S534C53v64Ev");}
void  S534C5 ::v65(){vfunc_called(this, "_ZN6S534C53v65Ev");}
void  S534C5 ::v66(){vfunc_called(this, "_ZN6S534C53v66Ev");}
S534C5 ::S534C5(){ note_ctor("S534C5", this);} // tgen

static void Test_S534C5()
{
  extern Class_Descriptor cd_S534C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S534C5, buf);
    S534C5 *dp, &lv = *(dp=new (buf) S534C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S534C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S534C5)");
    check_field_offset(lv, s534c5f0, ABISELECT(8,4), "S534C5.s534c5f0");
    check_field_offset(lv, s534c5f1, ABISELECT(16,8), "S534C5.s534c5f1");
    check_field_offset(lv, s534c5f2, ABISELECT(24,16), "S534C5.s534c5f2");
    check_field_offset(lv, s534c5f3, ABISELECT(56,32), "S534C5.s534c5f3");
    check_field_offset(lv, s534c5f4, ABISELECT(64,40), "S534C5.s534c5f4");
    check_field_offset(lv, s534c5f5, ABISELECT(72,44), "S534C5.s534c5f5");
    check_field_offset(lv, s534c5f6, ABISELECT(80,52), "S534C5.s534c5f6");
    test_class_info(&lv, &cd_S534C5);
    dp->~S534C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS534C5(Test_S534C5, "S534C5", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN6S534C5C1Ev();
extern void _ZN6S534C5D1Ev();
Name_Map name_map_S534C5[] = {
  NSPAIR(_ZN6S534C5C1Ev),
  NSPAIR(_ZN6S534C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI6S534C5[];
extern void _ZN6S534C5D1Ev();
extern void _ZN6S534C5D0Ev();
extern void _ZN6S534C52v3Ev();
extern void _ZN6S534C52v4Ev();
extern void _ZN6S534C52v5Ev();
extern void _ZN6S534C52v6Ev();
extern void _ZN6S534C52v7Ev();
extern void _ZN6S534C52v8Ev();
extern void _ZN6S534C52v9Ev();
extern void _ZN6S534C53v10Ev();
extern void _ZN6S534C53v11Ev();
extern void _ZN6S534C53v12Ev();
extern void _ZN6S534C53v13Ev();
extern void _ZN6S534C53v14Ev();
extern void _ZN6S534C53v15Ev();
extern void _ZN6S534C53v16Ev();
extern void _ZN6S534C53v17Ev();
extern void _ZN6S534C53v18Ev();
extern void _ZN6S534C53v19Ev();
extern void _ZN6S534C53v20Ev();
extern void _ZN6S534C53v21Ev();
extern void _ZN6S534C53v22Ev();
extern void _ZN6S534C53v23Ev();
extern void _ZN6S534C53v24Ev();
extern void _ZN6S534C53v25Ev();
extern void _ZN6S534C53v26Ev();
extern void _ZN6S534C53v27Ev();
extern void _ZN6S534C53v28Ev();
extern void _ZN6S534C53v29Ev();
extern void _ZN6S534C53v30Ev();
extern void _ZN6S534C53v31Ev();
extern void _ZN6S534C53v32Ev();
extern void _ZN6S534C53v33Ev();
extern void _ZN6S534C53v34Ev();
extern void _ZN6S534C53v35Ev();
extern void _ZN6S534C53v36Ev();
extern void _ZN6S534C53v37Ev();
extern void _ZN6S534C53v38Ev();
extern void _ZN6S534C53v39Ev();
extern void _ZN6S534C53v40Ev();
extern void _ZN6S534C53v41Ev();
extern void _ZN6S534C53v42Ev();
extern void _ZN6S534C53v43Ev();
extern void _ZN6S534C53v44Ev();
extern void _ZN6S534C53v45Ev();
extern void _ZN6S534C53v46Ev();
extern void _ZN6S534C53v47Ev();
extern void _ZN6S534C53v48Ev();
extern void _ZN6S534C53v49Ev();
extern void _ZN6S534C53v50Ev();
extern void _ZN6S534C53v51Ev();
extern void _ZN6S534C53v52Ev();
extern void _ZN6S534C53v53Ev();
extern void _ZN6S534C53v54Ev();
extern void _ZN6S534C53v55Ev();
extern void _ZN6S534C53v56Ev();
extern void _ZN6S534C53v57Ev();
extern void _ZN6S534C53v58Ev();
extern void _ZN6S534C53v59Ev();
extern void _ZN6S534C53v60Ev();
extern void _ZN6S534C53v61Ev();
extern void _ZN6S534C53v62Ev();
extern void _ZN6S534C53v63Ev();
extern void _ZN6S534C53v64Ev();
extern void _ZN6S534C53v65Ev();
extern void _ZN6S534C53v66Ev();
static  VTBL_ENTRY vtc_S534C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S534C5[0]),
  (VTBL_ENTRY)&_ZN6S534C5D1Ev,
  (VTBL_ENTRY)&_ZN6S534C5D0Ev,
  (VTBL_ENTRY)&_ZN6S534C52v3Ev,
  (VTBL_ENTRY)&_ZN6S534C52v4Ev,
  (VTBL_ENTRY)&_ZN6S534C52v5Ev,
  (VTBL_ENTRY)&_ZN6S534C52v6Ev,
  (VTBL_ENTRY)&_ZN6S534C52v7Ev,
  (VTBL_ENTRY)&_ZN6S534C52v8Ev,
  (VTBL_ENTRY)&_ZN6S534C52v9Ev,
  (VTBL_ENTRY)&_ZN6S534C53v10Ev,
  (VTBL_ENTRY)&_ZN6S534C53v11Ev,
  (VTBL_ENTRY)&_ZN6S534C53v12Ev,
  (VTBL_ENTRY)&_ZN6S534C53v13Ev,
  (VTBL_ENTRY)&_ZN6S534C53v14Ev,
  (VTBL_ENTRY)&_ZN6S534C53v15Ev,
  (VTBL_ENTRY)&_ZN6S534C53v16Ev,
  (VTBL_ENTRY)&_ZN6S534C53v17Ev,
  (VTBL_ENTRY)&_ZN6S534C53v18Ev,
  (VTBL_ENTRY)&_ZN6S534C53v19Ev,
  (VTBL_ENTRY)&_ZN6S534C53v20Ev,
  (VTBL_ENTRY)&_ZN6S534C53v21Ev,
  (VTBL_ENTRY)&_ZN6S534C53v22Ev,
  (VTBL_ENTRY)&_ZN6S534C53v23Ev,
  (VTBL_ENTRY)&_ZN6S534C53v24Ev,
  (VTBL_ENTRY)&_ZN6S534C53v25Ev,
  (VTBL_ENTRY)&_ZN6S534C53v26Ev,
  (VTBL_ENTRY)&_ZN6S534C53v27Ev,
  (VTBL_ENTRY)&_ZN6S534C53v28Ev,
  (VTBL_ENTRY)&_ZN6S534C53v29Ev,
  (VTBL_ENTRY)&_ZN6S534C53v30Ev,
  (VTBL_ENTRY)&_ZN6S534C53v31Ev,
  (VTBL_ENTRY)&_ZN6S534C53v32Ev,
  (VTBL_ENTRY)&_ZN6S534C53v33Ev,
  (VTBL_ENTRY)&_ZN6S534C53v34Ev,
  (VTBL_ENTRY)&_ZN6S534C53v35Ev,
  (VTBL_ENTRY)&_ZN6S534C53v36Ev,
  (VTBL_ENTRY)&_ZN6S534C53v37Ev,
  (VTBL_ENTRY)&_ZN6S534C53v38Ev,
  (VTBL_ENTRY)&_ZN6S534C53v39Ev,
  (VTBL_ENTRY)&_ZN6S534C53v40Ev,
  (VTBL_ENTRY)&_ZN6S534C53v41Ev,
  (VTBL_ENTRY)&_ZN6S534C53v42Ev,
  (VTBL_ENTRY)&_ZN6S534C53v43Ev,
  (VTBL_ENTRY)&_ZN6S534C53v44Ev,
  (VTBL_ENTRY)&_ZN6S534C53v45Ev,
  (VTBL_ENTRY)&_ZN6S534C53v46Ev,
  (VTBL_ENTRY)&_ZN6S534C53v47Ev,
  (VTBL_ENTRY)&_ZN6S534C53v48Ev,
  (VTBL_ENTRY)&_ZN6S534C53v49Ev,
  (VTBL_ENTRY)&_ZN6S534C53v50Ev,
  (VTBL_ENTRY)&_ZN6S534C53v51Ev,
  (VTBL_ENTRY)&_ZN6S534C53v52Ev,
  (VTBL_ENTRY)&_ZN6S534C53v53Ev,
  (VTBL_ENTRY)&_ZN6S534C53v54Ev,
  (VTBL_ENTRY)&_ZN6S534C53v55Ev,
  (VTBL_ENTRY)&_ZN6S534C53v56Ev,
  (VTBL_ENTRY)&_ZN6S534C53v57Ev,
  (VTBL_ENTRY)&_ZN6S534C53v58Ev,
  (VTBL_ENTRY)&_ZN6S534C53v59Ev,
  (VTBL_ENTRY)&_ZN6S534C53v60Ev,
  (VTBL_ENTRY)&_ZN6S534C53v61Ev,
  (VTBL_ENTRY)&_ZN6S534C53v62Ev,
  (VTBL_ENTRY)&_ZN6S534C53v63Ev,
  (VTBL_ENTRY)&_ZN6S534C53v64Ev,
  (VTBL_ENTRY)&_ZN6S534C53v65Ev,
  (VTBL_ENTRY)&_ZN6S534C53v66Ev,
};
extern VTBL_ENTRY _ZTI6S534C5[];
extern  VTBL_ENTRY _ZTV6S534C5[];
Class_Descriptor cd_S534C5 = {  "S534C5", // class name
  0,0,//no base classes
  &(vtc_S534C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI6S534C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV6S534C5),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  S534C4_nt  : S534C5 {
  int s534c4f0[2];
  void *s534c4f1;
  int s534c4f2[2];
  ::S674C37_nt s534c4f3;
  ::S674C37_nt s534c4f4;
  ::S3625C32 s534c4f5;
  ::S674C37_nt s534c4f6;
  unsigned int s534c4f7:1;
  unsigned int s534c4f8:1;
  unsigned int s534c4f9:1;
  unsigned int s534c4f10:1;
  unsigned int s534c4f11:1;
  int s534c4f12[2];
  virtual  ~S534C4_nt(); // _ZN9S534C4_ntD1Ev
  virtual void  v67(); // _ZN9S534C4_nt3v67Ev
  virtual void  v68(); // _ZN9S534C4_nt3v68Ev
  virtual void  v69(); // _ZN9S534C4_nt3v69Ev
  virtual void  v70(); // _ZN9S534C4_nt3v70Ev
  virtual void  v71(); // _ZN9S534C4_nt3v71Ev
  virtual void  v72(); // _ZN9S534C4_nt3v72Ev
  virtual void  v73(); // _ZN9S534C4_nt3v73Ev
  virtual void  v74(); // _ZN9S534C4_nt3v74Ev
  virtual void  v75(); // _ZN9S534C4_nt3v75Ev
  virtual void  v76(); // _ZN9S534C4_nt3v76Ev
  virtual void  v77(); // _ZN9S534C4_nt3v77Ev
  virtual void  v78(); // _ZN9S534C4_nt3v78Ev
  virtual void  v79(); // _ZN9S534C4_nt3v79Ev
  virtual void  v80(); // _ZN9S534C4_nt3v80Ev
  virtual void  v81(); // _ZN9S534C4_nt3v81Ev
  virtual void  v82(); // _ZN9S534C4_nt3v82Ev
  virtual void  v83(); // _ZN9S534C4_nt3v83Ev
  virtual void  v84(); // _ZN9S534C4_nt3v84Ev
  virtual void  v85(); // _ZN9S534C4_nt3v85Ev
  virtual void  v86(); // _ZN9S534C4_nt3v86Ev
  virtual void  v87(); // _ZN9S534C4_nt3v87Ev
  virtual void  v88(); // _ZN9S534C4_nt3v88Ev
  S534C4_nt(); // tgen
};
//SIG(-1 S534C4_nt) C1{ BC2{ 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 FC3{ m Fi[2]} Fp[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 Fi[2] Fp Fi[2] FC4{ BC5{ BC6{ BC7{ m Fp Fi[2]}}}} FC4 FC8{ m} FC4 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]}


 S534C4_nt ::~S534C4_nt(){ note_dtor("S534C4_nt", this);}
void  S534C4_nt ::v67(){vfunc_called(this, "_ZN9S534C4_nt3v67Ev");}
void  S534C4_nt ::v68(){vfunc_called(this, "_ZN9S534C4_nt3v68Ev");}
void  S534C4_nt ::v69(){vfunc_called(this, "_ZN9S534C4_nt3v69Ev");}
void  S534C4_nt ::v70(){vfunc_called(this, "_ZN9S534C4_nt3v70Ev");}
void  S534C4_nt ::v71(){vfunc_called(this, "_ZN9S534C4_nt3v71Ev");}
void  S534C4_nt ::v72(){vfunc_called(this, "_ZN9S534C4_nt3v72Ev");}
void  S534C4_nt ::v73(){vfunc_called(this, "_ZN9S534C4_nt3v73Ev");}
void  S534C4_nt ::v74(){vfunc_called(this, "_ZN9S534C4_nt3v74Ev");}
void  S534C4_nt ::v75(){vfunc_called(this, "_ZN9S534C4_nt3v75Ev");}
void  S534C4_nt ::v76(){vfunc_called(this, "_ZN9S534C4_nt3v76Ev");}
void  S534C4_nt ::v77(){vfunc_called(this, "_ZN9S534C4_nt3v77Ev");}
void  S534C4_nt ::v78(){vfunc_called(this, "_ZN9S534C4_nt3v78Ev");}
void  S534C4_nt ::v79(){vfunc_called(this, "_ZN9S534C4_nt3v79Ev");}
void  S534C4_nt ::v80(){vfunc_called(this, "_ZN9S534C4_nt3v80Ev");}
void  S534C4_nt ::v81(){vfunc_called(this, "_ZN9S534C4_nt3v81Ev");}
void  S534C4_nt ::v82(){vfunc_called(this, "_ZN9S534C4_nt3v82Ev");}
void  S534C4_nt ::v83(){vfunc_called(this, "_ZN9S534C4_nt3v83Ev");}
void  S534C4_nt ::v84(){vfunc_called(this, "_ZN9S534C4_nt3v84Ev");}
void  S534C4_nt ::v85(){vfunc_called(this, "_ZN9S534C4_nt3v85Ev");}
void  S534C4_nt ::v86(){vfunc_called(this, "_ZN9S534C4_nt3v86Ev");}
void  S534C4_nt ::v87(){vfunc_called(this, "_ZN9S534C4_nt3v87Ev");}
void  S534C4_nt ::v88(){vfunc_called(this, "_ZN9S534C4_nt3v88Ev");}
S534C4_nt ::S534C4_nt(){ note_ctor("S534C4_nt", this);} // tgen

//skip512 S534C4_nt

#else // __cplusplus

extern void _ZN9S534C4_ntC1Ev();
extern void _ZN9S534C4_ntD1Ev();
Name_Map name_map_S534C4_nt[] = {
  NSPAIR(_ZN9S534C4_ntC1Ev),
  NSPAIR(_ZN9S534C4_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S534C5;
extern VTBL_ENTRY _ZTI6S534C5[];
extern  VTBL_ENTRY _ZTV6S534C5[];
static Base_Class bases_S534C4_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S534C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI9S534C4_nt[];
extern void _ZN9S534C4_ntD1Ev();
extern void _ZN9S534C4_ntD0Ev();
extern void _ZN6S534C52v3Ev();
extern void _ZN6S534C52v4Ev();
extern void _ZN6S534C52v5Ev();
extern void _ZN6S534C52v6Ev();
extern void _ZN6S534C52v7Ev();
extern void _ZN6S534C52v8Ev();
extern void _ZN6S534C52v9Ev();
extern void _ZN6S534C53v10Ev();
extern void _ZN6S534C53v11Ev();
extern void _ZN6S534C53v12Ev();
extern void _ZN6S534C53v13Ev();
extern void _ZN6S534C53v14Ev();
extern void _ZN6S534C53v15Ev();
extern void _ZN6S534C53v16Ev();
extern void _ZN6S534C53v17Ev();
extern void _ZN6S534C53v18Ev();
extern void _ZN6S534C53v19Ev();
extern void _ZN6S534C53v20Ev();
extern void _ZN6S534C53v21Ev();
extern void _ZN6S534C53v22Ev();
extern void _ZN6S534C53v23Ev();
extern void _ZN6S534C53v24Ev();
extern void _ZN6S534C53v25Ev();
extern void _ZN6S534C53v26Ev();
extern void _ZN6S534C53v27Ev();
extern void _ZN6S534C53v28Ev();
extern void _ZN6S534C53v29Ev();
extern void _ZN6S534C53v30Ev();
extern void _ZN6S534C53v31Ev();
extern void _ZN6S534C53v32Ev();
extern void _ZN6S534C53v33Ev();
extern void _ZN6S534C53v34Ev();
extern void _ZN6S534C53v35Ev();
extern void _ZN6S534C53v36Ev();
extern void _ZN6S534C53v37Ev();
extern void _ZN6S534C53v38Ev();
extern void _ZN6S534C53v39Ev();
extern void _ZN6S534C53v40Ev();
extern void _ZN6S534C53v41Ev();
extern void _ZN6S534C53v42Ev();
extern void _ZN6S534C53v43Ev();
extern void _ZN6S534C53v44Ev();
extern void _ZN6S534C53v45Ev();
extern void _ZN6S534C53v46Ev();
extern void _ZN6S534C53v47Ev();
extern void _ZN6S534C53v48Ev();
extern void _ZN6S534C53v49Ev();
extern void _ZN6S534C53v50Ev();
extern void _ZN6S534C53v51Ev();
extern void _ZN6S534C53v52Ev();
extern void _ZN6S534C53v53Ev();
extern void _ZN6S534C53v54Ev();
extern void _ZN6S534C53v55Ev();
extern void _ZN6S534C53v56Ev();
extern void _ZN6S534C53v57Ev();
extern void _ZN6S534C53v58Ev();
extern void _ZN6S534C53v59Ev();
extern void _ZN6S534C53v60Ev();
extern void _ZN6S534C53v61Ev();
extern void _ZN6S534C53v62Ev();
extern void _ZN6S534C53v63Ev();
extern void _ZN6S534C53v64Ev();
extern void _ZN6S534C53v65Ev();
extern void _ZN6S534C53v66Ev();
extern void _ZN9S534C4_nt3v67Ev();
extern void _ZN9S534C4_nt3v68Ev();
extern void _ZN9S534C4_nt3v69Ev();
extern void _ZN9S534C4_nt3v70Ev();
extern void _ZN9S534C4_nt3v71Ev();
extern void _ZN9S534C4_nt3v72Ev();
extern void _ZN9S534C4_nt3v73Ev();
extern void _ZN9S534C4_nt3v74Ev();
extern void _ZN9S534C4_nt3v75Ev();
extern void _ZN9S534C4_nt3v76Ev();
extern void _ZN9S534C4_nt3v77Ev();
extern void _ZN9S534C4_nt3v78Ev();
extern void _ZN9S534C4_nt3v79Ev();
extern void _ZN9S534C4_nt3v80Ev();
extern void _ZN9S534C4_nt3v81Ev();
extern void _ZN9S534C4_nt3v82Ev();
extern void _ZN9S534C4_nt3v83Ev();
extern void _ZN9S534C4_nt3v84Ev();
extern void _ZN9S534C4_nt3v85Ev();
extern void _ZN9S534C4_nt3v86Ev();
extern void _ZN9S534C4_nt3v87Ev();
extern void _ZN9S534C4_nt3v88Ev();
static  VTBL_ENTRY vtc_S534C4_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S534C4_nt[0]),
  (VTBL_ENTRY)&_ZN9S534C4_ntD1Ev,
  (VTBL_ENTRY)&_ZN9S534C4_ntD0Ev,
  (VTBL_ENTRY)&_ZN6S534C52v3Ev,
  (VTBL_ENTRY)&_ZN6S534C52v4Ev,
  (VTBL_ENTRY)&_ZN6S534C52v5Ev,
  (VTBL_ENTRY)&_ZN6S534C52v6Ev,
  (VTBL_ENTRY)&_ZN6S534C52v7Ev,
  (VTBL_ENTRY)&_ZN6S534C52v8Ev,
  (VTBL_ENTRY)&_ZN6S534C52v9Ev,
  (VTBL_ENTRY)&_ZN6S534C53v10Ev,
  (VTBL_ENTRY)&_ZN6S534C53v11Ev,
  (VTBL_ENTRY)&_ZN6S534C53v12Ev,
  (VTBL_ENTRY)&_ZN6S534C53v13Ev,
  (VTBL_ENTRY)&_ZN6S534C53v14Ev,
  (VTBL_ENTRY)&_ZN6S534C53v15Ev,
  (VTBL_ENTRY)&_ZN6S534C53v16Ev,
  (VTBL_ENTRY)&_ZN6S534C53v17Ev,
  (VTBL_ENTRY)&_ZN6S534C53v18Ev,
  (VTBL_ENTRY)&_ZN6S534C53v19Ev,
  (VTBL_ENTRY)&_ZN6S534C53v20Ev,
  (VTBL_ENTRY)&_ZN6S534C53v21Ev,
  (VTBL_ENTRY)&_ZN6S534C53v22Ev,
  (VTBL_ENTRY)&_ZN6S534C53v23Ev,
  (VTBL_ENTRY)&_ZN6S534C53v24Ev,
  (VTBL_ENTRY)&_ZN6S534C53v25Ev,
  (VTBL_ENTRY)&_ZN6S534C53v26Ev,
  (VTBL_ENTRY)&_ZN6S534C53v27Ev,
  (VTBL_ENTRY)&_ZN6S534C53v28Ev,
  (VTBL_ENTRY)&_ZN6S534C53v29Ev,
  (VTBL_ENTRY)&_ZN6S534C53v30Ev,
  (VTBL_ENTRY)&_ZN6S534C53v31Ev,
  (VTBL_ENTRY)&_ZN6S534C53v32Ev,
  (VTBL_ENTRY)&_ZN6S534C53v33Ev,
  (VTBL_ENTRY)&_ZN6S534C53v34Ev,
  (VTBL_ENTRY)&_ZN6S534C53v35Ev,
  (VTBL_ENTRY)&_ZN6S534C53v36Ev,
  (VTBL_ENTRY)&_ZN6S534C53v37Ev,
  (VTBL_ENTRY)&_ZN6S534C53v38Ev,
  (VTBL_ENTRY)&_ZN6S534C53v39Ev,
  (VTBL_ENTRY)&_ZN6S534C53v40Ev,
  (VTBL_ENTRY)&_ZN6S534C53v41Ev,
  (VTBL_ENTRY)&_ZN6S534C53v42Ev,
  (VTBL_ENTRY)&_ZN6S534C53v43Ev,
  (VTBL_ENTRY)&_ZN6S534C53v44Ev,
  (VTBL_ENTRY)&_ZN6S534C53v45Ev,
  (VTBL_ENTRY)&_ZN6S534C53v46Ev,
  (VTBL_ENTRY)&_ZN6S534C53v47Ev,
  (VTBL_ENTRY)&_ZN6S534C53v48Ev,
  (VTBL_ENTRY)&_ZN6S534C53v49Ev,
  (VTBL_ENTRY)&_ZN6S534C53v50Ev,
  (VTBL_ENTRY)&_ZN6S534C53v51Ev,
  (VTBL_ENTRY)&_ZN6S534C53v52Ev,
  (VTBL_ENTRY)&_ZN6S534C53v53Ev,
  (VTBL_ENTRY)&_ZN6S534C53v54Ev,
  (VTBL_ENTRY)&_ZN6S534C53v55Ev,
  (VTBL_ENTRY)&_ZN6S534C53v56Ev,
  (VTBL_ENTRY)&_ZN6S534C53v57Ev,
  (VTBL_ENTRY)&_ZN6S534C53v58Ev,
  (VTBL_ENTRY)&_ZN6S534C53v59Ev,
  (VTBL_ENTRY)&_ZN6S534C53v60Ev,
  (VTBL_ENTRY)&_ZN6S534C53v61Ev,
  (VTBL_ENTRY)&_ZN6S534C53v62Ev,
  (VTBL_ENTRY)&_ZN6S534C53v63Ev,
  (VTBL_ENTRY)&_ZN6S534C53v64Ev,
  (VTBL_ENTRY)&_ZN6S534C53v65Ev,
  (VTBL_ENTRY)&_ZN6S534C53v66Ev,
  (VTBL_ENTRY)&_ZN9S534C4_nt3v67Ev,
  (VTBL_ENTRY)&_ZN9S534C4_nt3v68Ev,
  (VTBL_ENTRY)&_ZN9S534C4_nt3v69Ev,
  (VTBL_ENTRY)&_ZN9S534C4_nt3v70Ev,
  (VTBL_ENTRY)&_ZN9S534C4_nt3v71Ev,
  (VTBL_ENTRY)&_ZN9S534C4_nt3v72Ev,
  (VTBL_ENTRY)&_ZN9S534C4_nt3v73Ev,
  (VTBL_ENTRY)&_ZN9S534C4_nt3v74Ev,
  (VTBL_ENTRY)&_ZN9S534C4_nt3v75Ev,
  (VTBL_ENTRY)&_ZN9S534C4_nt3v76Ev,
  (VTBL_ENTRY)&_ZN9S534C4_nt3v77Ev,
  (VTBL_ENTRY)&_ZN9S534C4_nt3v78Ev,
  (VTBL_ENTRY)&_ZN9S534C4_nt3v79Ev,
  (VTBL_ENTRY)&_ZN9S534C4_nt3v80Ev,
  (VTBL_ENTRY)&_ZN9S534C4_nt3v81Ev,
  (VTBL_ENTRY)&_ZN9S534C4_nt3v82Ev,
  (VTBL_ENTRY)&_ZN9S534C4_nt3v83Ev,
  (VTBL_ENTRY)&_ZN9S534C4_nt3v84Ev,
  (VTBL_ENTRY)&_ZN9S534C4_nt3v85Ev,
  (VTBL_ENTRY)&_ZN9S534C4_nt3v86Ev,
  (VTBL_ENTRY)&_ZN9S534C4_nt3v87Ev,
  (VTBL_ENTRY)&_ZN9S534C4_nt3v88Ev,
};
extern VTBL_ENTRY _ZTI9S534C4_nt[];
VTBL_ENTRY *P__ZTI9S534C4_nt = _ZTI9S534C4_nt; 
extern  VTBL_ENTRY _ZTV9S534C4_nt[];
Class_Descriptor cd_S534C4_nt = {  "S534C4_nt", // class name
  bases_S534C4_nt, 1,
  &(vtc_S534C4_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(192,132), // object size
  NSPAIRA(_ZTI9S534C4_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV9S534C4_nt),90, //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  S534C3_nt  : S534C4_nt {
  unsigned int s534c3f0:1;
  unsigned int s534c3f1:1;
  unsigned int s534c3f2:1;
  ::S674C42 s534c3f3;
  ::S674C38 s534c3f4;
  ::S674C17 s534c3f5;
  ::S674C13 s534c3f6;
  int s534c3f7[3];
  virtual  ~S534C3_nt(); // _ZN9S534C3_ntD1Ev
  virtual void  v89(); // _ZN9S534C3_nt3v89Ev
  virtual void  v90(); // _ZN9S534C3_nt3v90Ev
  virtual void  v91(); // _ZN9S534C3_nt3v91Ev
  virtual void  v92(); // _ZN9S534C3_nt3v92Ev
  virtual void  v93(); // _ZN9S534C3_nt3v93Ev
  virtual void  v94(); // _ZN9S534C3_nt3v94Ev
  virtual void  v95(); // _ZN9S534C3_nt3v95Ev
  virtual void  v96(); // _ZN9S534C3_nt3v96Ev
  virtual void  v97(); // _ZN9S534C3_nt3v97Ev
  virtual void  v98(); // _ZN9S534C3_nt3v98Ev
  virtual void  v99(); // _ZN9S534C3_nt3v99Ev
  virtual void  v100(); // _ZN9S534C3_nt4v100Ev
  virtual void  v101(); // _ZN9S534C3_nt4v101Ev
  virtual void  v102(); // _ZN9S534C3_nt4v102Ev
  virtual void  v103(); // _ZN9S534C3_nt4v103Ev
  virtual void  v104(); // _ZN9S534C3_nt4v104Ev
  virtual void  v105(); // _ZN9S534C3_nt4v105Ev
  virtual void  v106(); // _ZN9S534C3_nt4v106Ev
  virtual void  v107(); // _ZN9S534C3_nt4v107Ev
  virtual void  v108(); // _ZN9S534C3_nt4v108Ev
  S534C3_nt(); // tgen
};
//SIG(-1 S534C3_nt) 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 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 Fi FL Fp[4] Fi[2] Fp FC4{ m Fi[2]} Fp[2]} vd v85 v86 v87 v88 v89 v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 Fi[2] Fp Fi[2] FC5{ BC6{ BC7{ BC8{ m Fp Fi[2]}}}} FC5 FC9{ m} FC5 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 Fi:1 Fi:1 Fi:1 FC10{ BC11{ BC8}} FC6 FC12{ BC13{ BC8}} FC14{ BC15{ BC8}} Fi[3]}


 S534C3_nt ::~S534C3_nt(){ note_dtor("S534C3_nt", this);}
void  S534C3_nt ::v89(){vfunc_called(this, "_ZN9S534C3_nt3v89Ev");}
void  S534C3_nt ::v90(){vfunc_called(this, "_ZN9S534C3_nt3v90Ev");}
void  S534C3_nt ::v91(){vfunc_called(this, "_ZN9S534C3_nt3v91Ev");}
void  S534C3_nt ::v92(){vfunc_called(this, "_ZN9S534C3_nt3v92Ev");}
void  S534C3_nt ::v93(){vfunc_called(this, "_ZN9S534C3_nt3v93Ev");}
void  S534C3_nt ::v94(){vfunc_called(this, "_ZN9S534C3_nt3v94Ev");}
void  S534C3_nt ::v95(){vfunc_called(this, "_ZN9S534C3_nt3v95Ev");}
void  S534C3_nt ::v96(){vfunc_called(this, "_ZN9S534C3_nt3v96Ev");}
void  S534C3_nt ::v97(){vfunc_called(this, "_ZN9S534C3_nt3v97Ev");}
void  S534C3_nt ::v98(){vfunc_called(this, "_ZN9S534C3_nt3v98Ev");}
void  S534C3_nt ::v99(){vfunc_called(this, "_ZN9S534C3_nt3v99Ev");}
void  S534C3_nt ::v100(){vfunc_called(this, "_ZN9S534C3_nt4v100Ev");}
void  S534C3_nt ::v101(){vfunc_called(this, "_ZN9S534C3_nt4v101Ev");}
void  S534C3_nt ::v102(){vfunc_called(this, "_ZN9S534C3_nt4v102Ev");}
void  S534C3_nt ::v103(){vfunc_called(this, "_ZN9S534C3_nt4v103Ev");}
void  S534C3_nt ::v104(){vfunc_called(this, "_ZN9S534C3_nt4v104Ev");}
void  S534C3_nt ::v105(){vfunc_called(this, "_ZN9S534C3_nt4v105Ev");}
void  S534C3_nt ::v106(){vfunc_called(this, "_ZN9S534C3_nt4v106Ev");}
void  S534C3_nt ::v107(){vfunc_called(this, "_ZN9S534C3_nt4v107Ev");}
void  S534C3_nt ::v108(){vfunc_called(this, "_ZN9S534C3_nt4v108Ev");}
S534C3_nt ::S534C3_nt(){ note_ctor("S534C3_nt", this);} // tgen

//skip512 S534C3_nt

#else // __cplusplus

extern void _ZN9S534C3_ntC1Ev();
extern void _ZN9S534C3_ntD1Ev();
Name_Map name_map_S534C3_nt[] = {
  NSPAIR(_ZN9S534C3_ntC1Ev),
  NSPAIR(_ZN9S534C3_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S534C5;
extern VTBL_ENTRY _ZTI6S534C5[];
extern  VTBL_ENTRY _ZTV6S534C5[];
extern Class_Descriptor cd_S534C4_nt;
extern VTBL_ENTRY _ZTI9S534C4_nt[];
extern  VTBL_ENTRY _ZTV9S534C4_nt[];
static Base_Class bases_S534C3_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S534C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S534C4_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 _ZTI9S534C3_nt[];
extern void _ZN9S534C3_ntD1Ev();
extern void _ZN9S534C3_ntD0Ev();
extern void _ZN6S534C52v3Ev();
extern void _ZN6S534C52v4Ev();
extern void _ZN6S534C52v5Ev();
extern void _ZN6S534C52v6Ev();
extern void _ZN6S534C52v7Ev();
extern void _ZN6S534C52v8Ev();
extern void _ZN6S534C52v9Ev();
extern void _ZN6S534C53v10Ev();
extern void _ZN6S534C53v11Ev();
extern void _ZN6S534C53v12Ev();
extern void _ZN6S534C53v13Ev();
extern void _ZN6S534C53v14Ev();
extern void _ZN6S534C53v15Ev();
extern void _ZN6S534C53v16Ev();
extern void _ZN6S534C53v17Ev();
extern void _ZN6S534C53v18Ev();
extern void _ZN6S534C53v19Ev();
extern void _ZN6S534C53v20Ev();
extern void _ZN6S534C53v21Ev();
extern void _ZN6S534C53v22Ev();
extern void _ZN6S534C53v23Ev();
extern void _ZN6S534C53v24Ev();
extern void _ZN6S534C53v25Ev();
extern void _ZN6S534C53v26Ev();
extern void _ZN6S534C53v27Ev();
extern void _ZN6S534C53v28Ev();
extern void _ZN6S534C53v29Ev();
extern void _ZN6S534C53v30Ev();
extern void _ZN6S534C53v31Ev();
extern void _ZN6S534C53v32Ev();
extern void _ZN6S534C53v33Ev();
extern void _ZN6S534C53v34Ev();
extern void _ZN6S534C53v35Ev();
extern void _ZN6S534C53v36Ev();
extern void _ZN6S534C53v37Ev();
extern void _ZN6S534C53v38Ev();
extern void _ZN6S534C53v39Ev();
extern void _ZN6S534C53v40Ev();
extern void _ZN6S534C53v41Ev();
extern void _ZN6S534C53v42Ev();
extern void _ZN6S534C53v43Ev();
extern void _ZN6S534C53v44Ev();
extern void _ZN6S534C53v45Ev();
extern void _ZN6S534C53v46Ev();
extern void _ZN6S534C53v47Ev();
extern void _ZN6S534C53v48Ev();
extern void _ZN6S534C53v49Ev();
extern void _ZN6S534C53v50Ev();
extern void _ZN6S534C53v51Ev();
extern void _ZN6S534C53v52Ev();
extern void _ZN6S534C53v53Ev();
extern void _ZN6S534C53v54Ev();
extern void _ZN6S534C53v55Ev();
extern void _ZN6S534C53v56Ev();
extern void _ZN6S534C53v57Ev();
extern void _ZN6S534C53v58Ev();
extern void _ZN6S534C53v59Ev();
extern void _ZN6S534C53v60Ev();
extern void _ZN6S534C53v61Ev();
extern void _ZN6S534C53v62Ev();
extern void _ZN6S534C53v63Ev();
extern void _ZN6S534C53v64Ev();
extern void _ZN6S534C53v65Ev();
extern void _ZN6S534C53v66Ev();
extern void _ZN9S534C4_nt3v67Ev();
extern void _ZN9S534C4_nt3v68Ev();
extern void _ZN9S534C4_nt3v69Ev();
extern void _ZN9S534C4_nt3v70Ev();
extern void _ZN9S534C4_nt3v71Ev();
extern void _ZN9S534C4_nt3v72Ev();
extern void _ZN9S534C4_nt3v73Ev();
extern void _ZN9S534C4_nt3v74Ev();
extern void _ZN9S534C4_nt3v75Ev();
extern void _ZN9S534C4_nt3v76Ev();
extern void _ZN9S534C4_nt3v77Ev();
extern void _ZN9S534C4_nt3v78Ev();
extern void _ZN9S534C4_nt3v79Ev();
extern void _ZN9S534C4_nt3v80Ev();
extern void _ZN9S534C4_nt3v81Ev();
extern void _ZN9S534C4_nt3v82Ev();
extern void _ZN9S534C4_nt3v83Ev();
extern void _ZN9S534C4_nt3v84Ev();
extern void _ZN9S534C4_nt3v85Ev();
extern void _ZN9S534C4_nt3v86Ev();
extern void _ZN9S534C4_nt3v87Ev();
extern void _ZN9S534C4_nt3v88Ev();
extern void _ZN9S534C3_nt3v89Ev();
extern void _ZN9S534C3_nt3v90Ev();
extern void _ZN9S534C3_nt3v91Ev();
extern void _ZN9S534C3_nt3v92Ev();
extern void _ZN9S534C3_nt3v93Ev();
extern void _ZN9S534C3_nt3v94Ev();
extern void _ZN9S534C3_nt3v95Ev();
extern void _ZN9S534C3_nt3v96Ev();
extern void _ZN9S534C3_nt3v97Ev();
extern void _ZN9S534C3_nt3v98Ev();
extern void _ZN9S534C3_nt3v99Ev();
extern void _ZN9S534C3_nt4v100Ev();
extern void _ZN9S534C3_nt4v101Ev();
extern void _ZN9S534C3_nt4v102Ev();
extern void _ZN9S534C3_nt4v103Ev();
extern void _ZN9S534C3_nt4v104Ev();
extern void _ZN9S534C3_nt4v105Ev();
extern void _ZN9S534C3_nt4v106Ev();
extern void _ZN9S534C3_nt4v107Ev();
extern void _ZN9S534C3_nt4v108Ev();
static  VTBL_ENTRY vtc_S534C3_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S534C3_nt[0]),
  (VTBL_ENTRY)&_ZN9S534C3_ntD1Ev,
  (VTBL_ENTRY)&_ZN9S534C3_ntD0Ev,
  (VTBL_ENTRY)&_ZN6S534C52v3Ev,
  (VTBL_ENTRY)&_ZN6S534C52v4Ev,
  (VTBL_ENTRY)&_ZN6S534C52v5Ev,
  (VTBL_ENTRY)&_ZN6S534C52v6Ev,
  (VTBL_ENTRY)&_ZN6S534C52v7Ev,
  (VTBL_ENTRY)&_ZN6S534C52v8Ev,
  (VTBL_ENTRY)&_ZN6S534C52v9Ev,
  (VTBL_ENTRY)&_ZN6S534C53v10Ev,
  (VTBL_ENTRY)&_ZN6S534C53v11Ev,
  (VTBL_ENTRY)&_ZN6S534C53v12Ev,
  (VTBL_ENTRY)&_ZN6S534C53v13Ev,
  (VTBL_ENTRY)&_ZN6S534C53v14Ev,
  (VTBL_ENTRY)&_ZN6S534C53v15Ev,
  (VTBL_ENTRY)&_ZN6S534C53v16Ev,
  (VTBL_ENTRY)&_ZN6S534C53v17Ev,
  (VTBL_ENTRY)&_ZN6S534C53v18Ev,
  (VTBL_ENTRY)&_ZN6S534C53v19Ev,
  (VTBL_ENTRY)&_ZN6S534C53v20Ev,
  (VTBL_ENTRY)&_ZN6S534C53v21Ev,
  (VTBL_ENTRY)&_ZN6S534C53v22Ev,
  (VTBL_ENTRY)&_ZN6S534C53v23Ev,
  (VTBL_ENTRY)&_ZN6S534C53v24Ev,
  (VTBL_ENTRY)&_ZN6S534C53v25Ev,
  (VTBL_ENTRY)&_ZN6S534C53v26Ev,
  (VTBL_ENTRY)&_ZN6S534C53v27Ev,
  (VTBL_ENTRY)&_ZN6S534C53v28Ev,
  (VTBL_ENTRY)&_ZN6S534C53v29Ev,
  (VTBL_ENTRY)&_ZN6S534C53v30Ev,
  (VTBL_ENTRY)&_ZN6S534C53v31Ev,
  (VTBL_ENTRY)&_ZN6S534C53v32Ev,
  (VTBL_ENTRY)&_ZN6S534C53v33Ev,
  (VTBL_ENTRY)&_ZN6S534C53v34Ev,
  (VTBL_ENTRY)&_ZN6S534C53v35Ev,
  (VTBL_ENTRY)&_ZN6S534C53v36Ev,
  (VTBL_ENTRY)&_ZN6S534C53v37Ev,
  (VTBL_ENTRY)&_ZN6S534C53v38Ev,
  (VTBL_ENTRY)&_ZN6S534C53v39Ev,
  (VTBL_ENTRY)&_ZN6S534C53v40Ev,
  (VTBL_ENTRY)&_ZN6S534C53v41Ev,
  (VTBL_ENTRY)&_ZN6S534C53v42Ev,
  (VTBL_ENTRY)&_ZN6S534C53v43Ev,
  (VTBL_ENTRY)&_ZN6S534C53v44Ev,
  (VTBL_ENTRY)&_ZN6S534C53v45Ev,
  (VTBL_ENTRY)&_ZN6S534C53v46Ev,
  (VTBL_ENTRY)&_ZN6S534C53v47Ev,
  (VTBL_ENTRY)&_ZN6S534C53v48Ev,
  (VTBL_ENTRY)&_ZN6S534C53v49Ev,
  (VTBL_ENTRY)&_ZN6S534C53v50Ev,
  (VTBL_ENTRY)&_ZN6S534C53v51Ev,
  (VTBL_ENTRY)&_ZN6S534C53v52Ev,
  (VTBL_ENTRY)&_ZN6S534C53v53Ev,
  (VTBL_ENTRY)&_ZN6S534C53v54Ev,
  (VTBL_ENTRY)&_ZN6S534C53v55Ev,
  (VTBL_ENTRY)&_ZN6S534C53v56Ev,
  (VTBL_ENTRY)&_ZN6S534C53v57Ev,
  (VTBL_ENTRY)&_ZN6S534C53v58Ev,
  (VTBL_ENTRY)&_ZN6S534C53v59Ev,
  (VTBL_ENTRY)&_ZN6S534C53v60Ev,
  (VTBL_ENTRY)&_ZN6S534C53v61Ev,
  (VTBL_ENTRY)&_ZN6S534C53v62Ev,
  (VTBL_ENTRY)&_ZN6S534C53v63Ev,
  (VTBL_ENTRY)&_ZN6S534C53v64Ev,
  (VTBL_ENTRY)&_ZN6S534C53v65Ev,
  (VTBL_ENTRY)&_ZN6S534C53v66Ev,
  (VTBL_ENTRY)&_ZN9S534C4_nt3v67Ev,
  (VTBL_ENTRY)&_ZN9S534C4_nt3v68Ev,
  (VTBL_ENTRY)&_ZN9S534C4_nt3v69Ev,
  (VTBL_ENTRY)&_ZN9S534C4_nt3v70Ev,
  (VTBL_ENTRY)&_ZN9S534C4_nt3v71Ev,
  (VTBL_ENTRY)&_ZN9S534C4_nt3v72Ev,
  (VTBL_ENTRY)&_ZN9S534C4_nt3v73Ev,
  (VTBL_ENTRY)&_ZN9S534C4_nt3v74Ev,
  (VTBL_ENTRY)&_ZN9S534C4_nt3v75Ev,
  (VTBL_ENTRY)&_ZN9S534C4_nt3v76Ev,
  (VTBL_ENTRY)&_ZN9S534C4_nt3v77Ev,
  (VTBL_ENTRY)&_ZN9S534C4_nt3v78Ev,
  (VTBL_ENTRY)&_ZN9S534C4_nt3v79Ev,
  (VTBL_ENTRY)&_ZN9S534C4_nt3v80Ev,
  (VTBL_ENTRY)&_ZN9S534C4_nt3v81Ev,
  (VTBL_ENTRY)&_ZN9S534C4_nt3v82Ev,
  (VTBL_ENTRY)&_ZN9S534C4_nt3v83Ev,
  (VTBL_ENTRY)&_ZN9S534C4_nt3v84Ev,
  (VTBL_ENTRY)&_ZN9S534C4_nt3v85Ev,
  (VTBL_ENTRY)&_ZN9S534C4_nt3v86Ev,
  (VTBL_ENTRY)&_ZN9S534C4_nt3v87Ev,
  (VTBL_ENTRY)&_ZN9S534C4_nt3v88Ev,
  (VTBL_ENTRY)&_ZN9S534C3_nt3v89Ev,
  (VTBL_ENTRY)&_ZN9S534C3_nt3v90Ev,
  (VTBL_ENTRY)&_ZN9S534C3_nt3v91Ev,
  (VTBL_ENTRY)&_ZN9S534C3_nt3v92Ev,
  (VTBL_ENTRY)&_ZN9S534C3_nt3v93Ev,
  (VTBL_ENTRY)&_ZN9S534C3_nt3v94Ev,
  (VTBL_ENTRY)&_ZN9S534C3_nt3v95Ev,
  (VTBL_ENTRY)&_ZN9S534C3_nt3v96Ev,
  (VTBL_ENTRY)&_ZN9S534C3_nt3v97Ev,
  (VTBL_ENTRY)&_ZN9S534C3_nt3v98Ev,
  (VTBL_ENTRY)&_ZN9S534C3_nt3v99Ev,
  (VTBL_ENTRY)&_ZN9S534C3_nt4v100Ev,
  (VTBL_ENTRY)&_ZN9S534C3_nt4v101Ev,
  (VTBL_ENTRY)&_ZN9S534C3_nt4v102Ev,
  (VTBL_ENTRY)&_ZN9S534C3_nt4v103Ev,
  (VTBL_ENTRY)&_ZN9S534C3_nt4v104Ev,
  (VTBL_ENTRY)&_ZN9S534C3_nt4v105Ev,
  (VTBL_ENTRY)&_ZN9S534C3_nt4v106Ev,
  (VTBL_ENTRY)&_ZN9S534C3_nt4v107Ev,
  (VTBL_ENTRY)&_ZN9S534C3_nt4v108Ev,
};
extern VTBL_ENTRY _ZTI9S534C3_nt[];
VTBL_ENTRY *P__ZTI9S534C3_nt = _ZTI9S534C3_nt; 
extern  VTBL_ENTRY _ZTV9S534C3_nt[];
Class_Descriptor cd_S534C3_nt = {  "S534C3_nt", // class name
  bases_S534C3_nt, 2,
  &(vtc_S534C3_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(272,196), // object size
  NSPAIRA(_ZTI9S534C3_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV9S534C3_nt),110, //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  S534C2_nt  : S534C3_nt {
  void *s534c2f0[2];
  int s534c2f1[4];
  unsigned int s534c2f2:1;
  unsigned int s534c2f3:1;
  unsigned int s534c2f4:1;
  char s534c2f5;
  int s534c2f6;
  unsigned int s534c2f7:1;
  ::S674C8_nt s534c2f8;
  virtual  ~S534C2_nt(); // _ZN9S534C2_ntD1Ev
  virtual void  v109(); // _ZN9S534C2_nt4v109Ev
  virtual void  v110(); // _ZN9S534C2_nt4v110Ev
  virtual void  v111(); // _ZN9S534C2_nt4v111Ev
  virtual void  v112(); // _ZN9S534C2_nt4v112Ev
  virtual void  v113(); // _ZN9S534C2_nt4v113Ev
  virtual void  v114(); // _ZN9S534C2_nt4v114Ev
  virtual void  v115(); // _ZN9S534C2_nt4v115Ev
  virtual void  v116(); // _ZN9S534C2_nt4v116Ev
  virtual void  v117(); // _ZN9S534C2_nt4v117Ev
  virtual void  v118(); // _ZN9S534C2_nt4v118Ev
  virtual void  v119(); // _ZN9S534C2_nt4v119Ev
  virtual void  v120(); // _ZN9S534C2_nt4v120Ev
  virtual void  v121(); // _ZN9S534C2_nt4v121Ev
  virtual void  v122(); // _ZN9S534C2_nt4v122Ev
  S534C2_nt(); // tgen
};
//SIG(-1 S534C2_nt) C1{ BC2{ BC3{ BC4{ 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 FC5{ m Fi[2]} Fp[2]} vd v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 Fi[2] Fp Fi[2] FC6{ BC7{ BC8{ BC9{ m Fp Fi[2]}}}} FC6 FC10{ m} FC6 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v101 v102 v103 v104 v105 v106 v107 v108 v109 v110 v111 v112 v113 v114 v115 v116 v117 v118 v119 v120 Fi:1 Fi:1 Fi:1 FC11{ BC12{ BC9}} FC7 FC13{ BC14{ BC9}} FC15{ BC16{ BC9}} Fi[3]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 Fp[2] Fi[4] Fi:1 Fi:1 Fi:1 Fc Fi Fi:1 FC17{ BC18{ BC9}}}


 S534C2_nt ::~S534C2_nt(){ note_dtor("S534C2_nt", this);}
void  S534C2_nt ::v109(){vfunc_called(this, "_ZN9S534C2_nt4v109Ev");}
void  S534C2_nt ::v110(){vfunc_called(this, "_ZN9S534C2_nt4v110Ev");}
void  S534C2_nt ::v111(){vfunc_called(this, "_ZN9S534C2_nt4v111Ev");}
void  S534C2_nt ::v112(){vfunc_called(this, "_ZN9S534C2_nt4v112Ev");}
void  S534C2_nt ::v113(){vfunc_called(this, "_ZN9S534C2_nt4v113Ev");}
void  S534C2_nt ::v114(){vfunc_called(this, "_ZN9S534C2_nt4v114Ev");}
void  S534C2_nt ::v115(){vfunc_called(this, "_ZN9S534C2_nt4v115Ev");}
void  S534C2_nt ::v116(){vfunc_called(this, "_ZN9S534C2_nt4v116Ev");}
void  S534C2_nt ::v117(){vfunc_called(this, "_ZN9S534C2_nt4v117Ev");}
void  S534C2_nt ::v118(){vfunc_called(this, "_ZN9S534C2_nt4v118Ev");}
void  S534C2_nt ::v119(){vfunc_called(this, "_ZN9S534C2_nt4v119Ev");}
void  S534C2_nt ::v120(){vfunc_called(this, "_ZN9S534C2_nt4v120Ev");}
void  S534C2_nt ::v121(){vfunc_called(this, "_ZN9S534C2_nt4v121Ev");}
void  S534C2_nt ::v122(){vfunc_called(this, "_ZN9S534C2_nt4v122Ev");}
S534C2_nt ::S534C2_nt(){ note_ctor("S534C2_nt", this);} // tgen

//skip512 S534C2_nt

#else // __cplusplus

extern void _ZN9S534C2_ntC1Ev();
extern void _ZN9S534C2_ntD1Ev();
Name_Map name_map_S534C2_nt[] = {
  NSPAIR(_ZN9S534C2_ntC1Ev),
  NSPAIR(_ZN9S534C2_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S534C5;
extern VTBL_ENTRY _ZTI6S534C5[];
extern  VTBL_ENTRY _ZTV6S534C5[];
extern Class_Descriptor cd_S534C4_nt;
extern VTBL_ENTRY _ZTI9S534C4_nt[];
extern  VTBL_ENTRY _ZTV9S534C4_nt[];
extern Class_Descriptor cd_S534C3_nt;
extern VTBL_ENTRY _ZTI9S534C3_nt[];
extern  VTBL_ENTRY _ZTV9S534C3_nt[];
static Base_Class bases_S534C2_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S534C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S534C4_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_S534C3_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 _ZTI9S534C2_nt[];
extern void _ZN9S534C2_ntD1Ev();
extern void _ZN9S534C2_ntD0Ev();
extern void _ZN6S534C52v3Ev();
extern void _ZN6S534C52v4Ev();
extern void _ZN6S534C52v5Ev();
extern void _ZN6S534C52v6Ev();
extern void _ZN6S534C52v7Ev();
extern void _ZN6S534C52v8Ev();
extern void _ZN6S534C52v9Ev();
extern void _ZN6S534C53v10Ev();
extern void _ZN6S534C53v11Ev();
extern void _ZN6S534C53v12Ev();
extern void _ZN6S534C53v13Ev();
extern void _ZN6S534C53v14Ev();
extern void _ZN6S534C53v15Ev();
extern void _ZN6S534C53v16Ev();
extern void _ZN6S534C53v17Ev();
extern void _ZN6S534C53v18Ev();
extern void _ZN6S534C53v19Ev();
extern void _ZN6S534C53v20Ev();
extern void _ZN6S534C53v21Ev();
extern void _ZN6S534C53v22Ev();
extern void _ZN6S534C53v23Ev();
extern void _ZN6S534C53v24Ev();
extern void _ZN6S534C53v25Ev();
extern void _ZN6S534C53v26Ev();
extern void _ZN6S534C53v27Ev();
extern void _ZN6S534C53v28Ev();
extern void _ZN6S534C53v29Ev();
extern void _ZN6S534C53v30Ev();
extern void _ZN6S534C53v31Ev();
extern void _ZN6S534C53v32Ev();
extern void _ZN6S534C53v33Ev();
extern void _ZN6S534C53v34Ev();
extern void _ZN6S534C53v35Ev();
extern void _ZN6S534C53v36Ev();
extern void _ZN6S534C53v37Ev();
extern void _ZN6S534C53v38Ev();
extern void _ZN6S534C53v39Ev();
extern void _ZN6S534C53v40Ev();
extern void _ZN6S534C53v41Ev();
extern void _ZN6S534C53v42Ev();
extern void _ZN6S534C53v43Ev();
extern void _ZN6S534C53v44Ev();
extern void _ZN6S534C53v45Ev();
extern void _ZN6S534C53v46Ev();
extern void _ZN6S534C53v47Ev();
extern void _ZN6S534C53v48Ev();
extern void _ZN6S534C53v49Ev();
extern void _ZN6S534C53v50Ev();
extern void _ZN6S534C53v51Ev();
extern void _ZN6S534C53v52Ev();
extern void _ZN6S534C53v53Ev();
extern void _ZN6S534C53v54Ev();
extern void _ZN6S534C53v55Ev();
extern void _ZN6S534C53v56Ev();
extern void _ZN6S534C53v57Ev();
extern void _ZN6S534C53v58Ev();
extern void _ZN6S534C53v59Ev();
extern void _ZN6S534C53v60Ev();
extern void _ZN6S534C53v61Ev();
extern void _ZN6S534C53v62Ev();
extern void _ZN6S534C53v63Ev();
extern void _ZN6S534C53v64Ev();
extern void _ZN6S534C53v65Ev();
extern void _ZN6S534C53v66Ev();
extern void _ZN9S534C4_nt3v67Ev();
extern void _ZN9S534C4_nt3v68Ev();
extern void _ZN9S534C4_nt3v69Ev();
extern void _ZN9S534C4_nt3v70Ev();
extern void _ZN9S534C4_nt3v71Ev();
extern void _ZN9S534C4_nt3v72Ev();
extern void _ZN9S534C4_nt3v73Ev();
extern void _ZN9S534C4_nt3v74Ev();
extern void _ZN9S534C4_nt3v75Ev();
extern void _ZN9S534C4_nt3v76Ev();
extern void _ZN9S534C4_nt3v77Ev();
extern void _ZN9S534C4_nt3v78Ev();
extern void _ZN9S534C4_nt3v79Ev();
extern void _ZN9S534C4_nt3v80Ev();
extern void _ZN9S534C4_nt3v81Ev();
extern void _ZN9S534C4_nt3v82Ev();
extern void _ZN9S534C4_nt3v83Ev();
extern void _ZN9S534C4_nt3v84Ev();
extern void _ZN9S534C4_nt3v85Ev();
extern void _ZN9S534C4_nt3v86Ev();
extern void _ZN9S534C4_nt3v87Ev();
extern void _ZN9S534C4_nt3v88Ev();
extern void _ZN9S534C3_nt3v89Ev();
extern void _ZN9S534C3_nt3v90Ev();
extern void _ZN9S534C3_nt3v91Ev();
extern void _ZN9S534C3_nt3v92Ev();
extern void _ZN9S534C3_nt3v93Ev();
extern void _ZN9S534C3_nt3v94Ev();
extern void _ZN9S534C3_nt3v95Ev();
extern void _ZN9S534C3_nt3v96Ev();
extern void _ZN9S534C3_nt3v97Ev();
extern void _ZN9S534C3_nt3v98Ev();
extern void _ZN9S534C3_nt3v99Ev();
extern void _ZN9S534C3_nt4v100Ev();
extern void _ZN9S534C3_nt4v101Ev();
extern void _ZN9S534C3_nt4v102Ev();
extern void _ZN9S534C3_nt4v103Ev();
extern void _ZN9S534C3_nt4v104Ev();
extern void _ZN9S534C3_nt4v105Ev();
extern void _ZN9S534C3_nt4v106Ev();
extern void _ZN9S534C3_nt4v107Ev();
extern void _ZN9S534C3_nt4v108Ev();
extern void _ZN9S534C2_nt4v109Ev();
extern void _ZN9S534C2_nt4v110Ev();
extern void _ZN9S534C2_nt4v111Ev();
extern void _ZN9S534C2_nt4v112Ev();
extern void _ZN9S534C2_nt4v113Ev();
extern void _ZN9S534C2_nt4v114Ev();
extern void _ZN9S534C2_nt4v115Ev();
extern void _ZN9S534C2_nt4v116Ev();
extern void _ZN9S534C2_nt4v117Ev();
extern void _ZN9S534C2_nt4v118Ev();
extern void _ZN9S534C2_nt4v119Ev();
extern void _ZN9S534C2_nt4v120Ev();
extern void _ZN9S534C2_nt4v121Ev();
extern void _ZN9S534C2_nt4v122Ev();
static  VTBL_ENTRY vtc_S534C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S534C2_nt[0]),
  (VTBL_ENTRY)&_ZN9S534C2_ntD1Ev,
  (VTBL_ENTRY)&_ZN9S534C2_ntD0Ev,
  (VTBL_ENTRY)&_ZN6S534C52v3Ev,
  (VTBL_ENTRY)&_ZN6S534C52v4Ev,
  (VTBL_ENTRY)&_ZN6S534C52v5Ev,
  (VTBL_ENTRY)&_ZN6S534C52v6Ev,
  (VTBL_ENTRY)&_ZN6S534C52v7Ev,
  (VTBL_ENTRY)&_ZN6S534C52v8Ev,
  (VTBL_ENTRY)&_ZN6S534C52v9Ev,
  (VTBL_ENTRY)&_ZN6S534C53v10Ev,
  (VTBL_ENTRY)&_ZN6S534C53v11Ev,
  (VTBL_ENTRY)&_ZN6S534C53v12Ev,
  (VTBL_ENTRY)&_ZN6S534C53v13Ev,
  (VTBL_ENTRY)&_ZN6S534C53v14Ev,
  (VTBL_ENTRY)&_ZN6S534C53v15Ev,
  (VTBL_ENTRY)&_ZN6S534C53v16Ev,
  (VTBL_ENTRY)&_ZN6S534C53v17Ev,
  (VTBL_ENTRY)&_ZN6S534C53v18Ev,
  (VTBL_ENTRY)&_ZN6S534C53v19Ev,
  (VTBL_ENTRY)&_ZN6S534C53v20Ev,
  (VTBL_ENTRY)&_ZN6S534C53v21Ev,
  (VTBL_ENTRY)&_ZN6S534C53v22Ev,
  (VTBL_ENTRY)&_ZN6S534C53v23Ev,
  (VTBL_ENTRY)&_ZN6S534C53v24Ev,
  (VTBL_ENTRY)&_ZN6S534C53v25Ev,
  (VTBL_ENTRY)&_ZN6S534C53v26Ev,
  (VTBL_ENTRY)&_ZN6S534C53v27Ev,
  (VTBL_ENTRY)&_ZN6S534C53v28Ev,
  (VTBL_ENTRY)&_ZN6S534C53v29Ev,
  (VTBL_ENTRY)&_ZN6S534C53v30Ev,
  (VTBL_ENTRY)&_ZN6S534C53v31Ev,
  (VTBL_ENTRY)&_ZN6S534C53v32Ev,
  (VTBL_ENTRY)&_ZN6S534C53v33Ev,
  (VTBL_ENTRY)&_ZN6S534C53v34Ev,
  (VTBL_ENTRY)&_ZN6S534C53v35Ev,
  (VTBL_ENTRY)&_ZN6S534C53v36Ev,
  (VTBL_ENTRY)&_ZN6S534C53v37Ev,
  (VTBL_ENTRY)&_ZN6S534C53v38Ev,
  (VTBL_ENTRY)&_ZN6S534C53v39Ev,
  (VTBL_ENTRY)&_ZN6S534C53v40Ev,
  (VTBL_ENTRY)&_ZN6S534C53v41Ev,
  (VTBL_ENTRY)&_ZN6S534C53v42Ev,
  (VTBL_ENTRY)&_ZN6S534C53v43Ev,
  (VTBL_ENTRY)&_ZN6S534C53v44Ev,
  (VTBL_ENTRY)&_ZN6S534C53v45Ev,
  (VTBL_ENTRY)&_ZN6S534C53v46Ev,
  (VTBL_ENTRY)&_ZN6S534C53v47Ev,
  (VTBL_ENTRY)&_ZN6S534C53v48Ev,
  (VTBL_ENTRY)&_ZN6S534C53v49Ev,
  (VTBL_ENTRY)&_ZN6S534C53v50Ev,
  (VTBL_ENTRY)&_ZN6S534C53v51Ev,
  (VTBL_ENTRY)&_ZN6S534C53v52Ev,
  (VTBL_ENTRY)&_ZN6S534C53v53Ev,
  (VTBL_ENTRY)&_ZN6S534C53v54Ev,
  (VTBL_ENTRY)&_ZN6S534C53v55Ev,
  (VTBL_ENTRY)&_ZN6S534C53v56Ev,
  (VTBL_ENTRY)&_ZN6S534C53v57Ev,
  (VTBL_ENTRY)&_ZN6S534C53v58Ev,
  (VTBL_ENTRY)&_ZN6S534C53v59Ev,
  (VTBL_ENTRY)&_ZN6S534C53v60Ev,
  (VTBL_ENTRY)&_ZN6S534C53v61Ev,
  (VTBL_ENTRY)&_ZN6S534C53v62Ev,
  (VTBL_ENTRY)&_ZN6S534C53v63Ev,
  (VTBL_ENTRY)&_ZN6S534C53v64Ev,
  (VTBL_ENTRY)&_ZN6S534C53v65Ev,
  (VTBL_ENTRY)&_ZN6S534C53v66Ev,
  (VTBL_ENTRY)&_ZN9S534C4_nt3v67Ev,
  (VTBL_ENTRY)&_ZN9S534C4_nt3v68Ev,
  (VTBL_ENTRY)&_ZN9S534C4_nt3v69Ev,
  (VTBL_ENTRY)&_ZN9S534C4_nt3v70Ev,
  (VTBL_ENTRY)&_ZN9S534C4_nt3v71Ev,
  (VTBL_ENTRY)&_ZN9S534C4_nt3v72Ev,
  (VTBL_ENTRY)&_ZN9S534C4_nt3v73Ev,
  (VTBL_ENTRY)&_ZN9S534C4_nt3v74Ev,
  (VTBL_ENTRY)&_ZN9S534C4_nt3v75Ev,
  (VTBL_ENTRY)&_ZN9S534C4_nt3v76Ev,
  (VTBL_ENTRY)&_ZN9S534C4_nt3v77Ev,
  (VTBL_ENTRY)&_ZN9S534C4_nt3v78Ev,
  (VTBL_ENTRY)&_ZN9S534C4_nt3v79Ev,
  (VTBL_ENTRY)&_ZN9S534C4_nt3v80Ev,
  (VTBL_ENTRY)&_ZN9S534C4_nt3v81Ev,
  (VTBL_ENTRY)&_ZN9S534C4_nt3v82Ev,
  (VTBL_ENTRY)&_ZN9S534C4_nt3v83Ev,
  (VTBL_ENTRY)&_ZN9S534C4_nt3v84Ev,
  (VTBL_ENTRY)&_ZN9S534C4_nt3v85Ev,
  (VTBL_ENTRY)&_ZN9S534C4_nt3v86Ev,
  (VTBL_ENTRY)&_ZN9S534C4_nt3v87Ev,
  (VTBL_ENTRY)&_ZN9S534C4_nt3v88Ev,
  (VTBL_ENTRY)&_ZN9S534C3_nt3v89Ev,
  (VTBL_ENTRY)&_ZN9S534C3_nt3v90Ev,
  (VTBL_ENTRY)&_ZN9S534C3_nt3v91Ev,
  (VTBL_ENTRY)&_ZN9S534C3_nt3v92Ev,
  (VTBL_ENTRY)&_ZN9S534C3_nt3v93Ev,
  (VTBL_ENTRY)&_ZN9S534C3_nt3v94Ev,
  (VTBL_ENTRY)&_ZN9S534C3_nt3v95Ev,
  (VTBL_ENTRY)&_ZN9S534C3_nt3v96Ev,
  (VTBL_ENTRY)&_ZN9S534C3_nt3v97Ev,
  (VTBL_ENTRY)&_ZN9S534C3_nt3v98Ev,
  (VTBL_ENTRY)&_ZN9S534C3_nt3v99Ev,
  (VTBL_ENTRY)&_ZN9S534C3_nt4v100Ev,
  (VTBL_ENTRY)&_ZN9S534C3_nt4v101Ev,
  (VTBL_ENTRY)&_ZN9S534C3_nt4v102Ev,
  (VTBL_ENTRY)&_ZN9S534C3_nt4v103Ev,
  (VTBL_ENTRY)&_ZN9S534C3_nt4v104Ev,
  (VTBL_ENTRY)&_ZN9S534C3_nt4v105Ev,
  (VTBL_ENTRY)&_ZN9S534C3_nt4v106Ev,
  (VTBL_ENTRY)&_ZN9S534C3_nt4v107Ev,
  (VTBL_ENTRY)&_ZN9S534C3_nt4v108Ev,
  (VTBL_ENTRY)&_ZN9S534C2_nt4v109Ev,
  (VTBL_ENTRY)&_ZN9S534C2_nt4v110Ev,
  (VTBL_ENTRY)&_ZN9S534C2_nt4v111Ev,
  (VTBL_ENTRY)&_ZN9S534C2_nt4v112Ev,
  (VTBL_ENTRY)&_ZN9S534C2_nt4v113Ev,
  (VTBL_ENTRY)&_ZN9S534C2_nt4v114Ev,
  (VTBL_ENTRY)&_ZN9S534C2_nt4v115Ev,
  (VTBL_ENTRY)&_ZN9S534C2_nt4v116Ev,
  (VTBL_ENTRY)&_ZN9S534C2_nt4v117Ev,
  (VTBL_ENTRY)&_ZN9S534C2_nt4v118Ev,
  (VTBL_ENTRY)&_ZN9S534C2_nt4v119Ev,
  (VTBL_ENTRY)&_ZN9S534C2_nt4v120Ev,
  (VTBL_ENTRY)&_ZN9S534C2_nt4v121Ev,
  (VTBL_ENTRY)&_ZN9S534C2_nt4v122Ev,
};
extern VTBL_ENTRY _ZTI9S534C2_nt[];
VTBL_ENTRY *P__ZTI9S534C2_nt = _ZTI9S534C2_nt; 
extern  VTBL_ENTRY _ZTV9S534C2_nt[];
Class_Descriptor cd_S534C2_nt = {  "S534C2_nt", // class name
  bases_S534C2_nt, 3,
  &(vtc_S534C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(336,244), // object size
  NSPAIRA(_ZTI9S534C2_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV9S534C2_nt),124, //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  S534C1  : S534C2_nt {
  int s534c1f0;
  virtual  ~S534C1(); // _ZN6S534C1D1Ev
  virtual void  v1(); // _ZN6S534C12v1Ev
  virtual void  v2(); // _ZN6S534C12v2Ev
  S534C1(); // tgen
};
//SIG(1 S534C1) C1{ BC2{ BC3{ BC4{ BC5{ vd 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 Fi FL Fp[4] Fi[2] Fp FC6{ m Fi[2]} Fp[2]} vd v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 Fi[2] Fp Fi[2] FC7{ BC8{ BC9{ BC10{ m Fp Fi[2]}}}} FC7 FC11{ m} FC7 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v89 v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 Fi:1 Fi:1 Fi:1 FC12{ BC13{ BC10}} FC8 FC14{ BC15{ BC10}} FC16{ BC17{ BC10}} Fi[3]} vd v109 v110 v111 v112 v113 v114 v115 v116 v117 v118 v119 v120 v121 v122 Fp[2] Fi[4] Fi:1 Fi:1 Fi:1 Fc Fi Fi:1 FC18{ BC19{ BC10}}} vd v1 v2 Fi}


 S534C1 ::~S534C1(){ note_dtor("S534C1", this);}
void  S534C1 ::v1(){vfunc_called(this, "_ZN6S534C12v1Ev");}
void  S534C1 ::v2(){vfunc_called(this, "_ZN6S534C12v2Ev");}
S534C1 ::S534C1(){ note_ctor("S534C1", this);} // tgen

static void Test_S534C1()
{
  extern Class_Descriptor cd_S534C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(44,63)];
    init_test(&cd_S534C1, buf);
    S534C1 *dp, &lv = *(dp=new (buf) S534C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(344,248), "sizeof(S534C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S534C1)");
    check_base_class_offset(lv, (S534C5*)(S534C4_nt*)(S534C3_nt*)(S534C2_nt*), 0, "S534C1");
    check_base_class_offset(lv, (S534C4_nt*)(S534C3_nt*)(S534C2_nt*), 0, "S534C1");
    check_base_class_offset(lv, (S534C3_nt*)(S534C2_nt*), 0, "S534C1");
    check_base_class_offset(lv, (S534C2_nt*), 0, "S534C1");
    check_field_offset(lv, s534c1f0, ABISELECT(336,244), "S534C1.s534c1f0");
    test_class_info(&lv, &cd_S534C1);
    dp->~S534C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS534C1(Test_S534C1, "S534C1", ABISELECT(344,248));

#else // __cplusplus

extern void _ZN6S534C1C1Ev();
extern void _ZN6S534C1D1Ev();
Name_Map name_map_S534C1[] = {
  NSPAIR(_ZN6S534C1C1Ev),
  NSPAIR(_ZN6S534C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S534C5;
extern VTBL_ENTRY _ZTI6S534C5[];
extern  VTBL_ENTRY _ZTV6S534C5[];
extern Class_Descriptor cd_S534C4_nt;
extern VTBL_ENTRY _ZTI9S534C4_nt[];
extern  VTBL_ENTRY _ZTV9S534C4_nt[];
extern Class_Descriptor cd_S534C3_nt;
extern VTBL_ENTRY _ZTI9S534C3_nt[];
extern  VTBL_ENTRY _ZTV9S534C3_nt[];
extern Class_Descriptor cd_S534C2_nt;
extern VTBL_ENTRY _ZTI9S534C2_nt[];
extern  VTBL_ENTRY _ZTV9S534C2_nt[];
static Base_Class bases_S534C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S534C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S534C4_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_S534C3_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_S534C2_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 _ZTI6S534C1[];
extern void _ZN6S534C1D1Ev();
extern void _ZN6S534C1D0Ev();
extern void _ZN6S534C52v3Ev();
extern void _ZN6S534C52v4Ev();
extern void _ZN6S534C52v5Ev();
extern void _ZN6S534C52v6Ev();
extern void _ZN6S534C52v7Ev();
extern void _ZN6S534C52v8Ev();
extern void _ZN6S534C52v9Ev();
extern void _ZN6S534C53v10Ev();
extern void _ZN6S534C53v11Ev();
extern void _ZN6S534C53v12Ev();
extern void _ZN6S534C53v13Ev();
extern void _ZN6S534C53v14Ev();
extern void _ZN6S534C53v15Ev();
extern void _ZN6S534C53v16Ev();
extern void _ZN6S534C53v17Ev();
extern void _ZN6S534C53v18Ev();
extern void _ZN6S534C53v19Ev();
extern void _ZN6S534C53v20Ev();
extern void _ZN6S534C53v21Ev();
extern void _ZN6S534C53v22Ev();
extern void _ZN6S534C53v23Ev();
extern void _ZN6S534C53v24Ev();
extern void _ZN6S534C53v25Ev();
extern void _ZN6S534C53v26Ev();
extern void _ZN6S534C53v27Ev();
extern void _ZN6S534C53v28Ev();
extern void _ZN6S534C53v29Ev();
extern void _ZN6S534C53v30Ev();
extern void _ZN6S534C53v31Ev();
extern void _ZN6S534C53v32Ev();
extern void _ZN6S534C53v33Ev();
extern void _ZN6S534C53v34Ev();
extern void _ZN6S534C53v35Ev();
extern void _ZN6S534C53v36Ev();
extern void _ZN6S534C53v37Ev();
extern void _ZN6S534C53v38Ev();
extern void _ZN6S534C53v39Ev();
extern void _ZN6S534C53v40Ev();
extern void _ZN6S534C53v41Ev();
extern void _ZN6S534C53v42Ev();
extern void _ZN6S534C53v43Ev();
extern void _ZN6S534C53v44Ev();
extern void _ZN6S534C53v45Ev();
extern void _ZN6S534C53v46Ev();
extern void _ZN6S534C53v47Ev();
extern void _ZN6S534C53v48Ev();
extern void _ZN6S534C53v49Ev();
extern void _ZN6S534C53v50Ev();
extern void _ZN6S534C53v51Ev();
extern void _ZN6S534C53v52Ev();
extern void _ZN6S534C53v53Ev();
extern void _ZN6S534C53v54Ev();
extern void _ZN6S534C53v55Ev();
extern void _ZN6S534C53v56Ev();
extern void _ZN6S534C53v57Ev();
extern void _ZN6S534C53v58Ev();
extern void _ZN6S534C53v59Ev();
extern void _ZN6S534C53v60Ev();
extern void _ZN6S534C53v61Ev();
extern void _ZN6S534C53v62Ev();
extern void _ZN6S534C53v63Ev();
extern void _ZN6S534C53v64Ev();
extern void _ZN6S534C53v65Ev();
extern void _ZN6S534C53v66Ev();
extern void _ZN9S534C4_nt3v67Ev();
extern void _ZN9S534C4_nt3v68Ev();
extern void _ZN9S534C4_nt3v69Ev();
extern void _ZN9S534C4_nt3v70Ev();
extern void _ZN9S534C4_nt3v71Ev();
extern void _ZN9S534C4_nt3v72Ev();
extern void _ZN9S534C4_nt3v73Ev();
extern void _ZN9S534C4_nt3v74Ev();
extern void _ZN9S534C4_nt3v75Ev();
extern void _ZN9S534C4_nt3v76Ev();
extern void _ZN9S534C4_nt3v77Ev();
extern void _ZN9S534C4_nt3v78Ev();
extern void _ZN9S534C4_nt3v79Ev();
extern void _ZN9S534C4_nt3v80Ev();
extern void _ZN9S534C4_nt3v81Ev();
extern void _ZN9S534C4_nt3v82Ev();
extern void _ZN9S534C4_nt3v83Ev();
extern void _ZN9S534C4_nt3v84Ev();
extern void _ZN9S534C4_nt3v85Ev();
extern void _ZN9S534C4_nt3v86Ev();
extern void _ZN9S534C4_nt3v87Ev();
extern void _ZN9S534C4_nt3v88Ev();
extern void _ZN9S534C3_nt3v89Ev();
extern void _ZN9S534C3_nt3v90Ev();
extern void _ZN9S534C3_nt3v91Ev();
extern void _ZN9S534C3_nt3v92Ev();
extern void _ZN9S534C3_nt3v93Ev();
extern void _ZN9S534C3_nt3v94Ev();
extern void _ZN9S534C3_nt3v95Ev();
extern void _ZN9S534C3_nt3v96Ev();
extern void _ZN9S534C3_nt3v97Ev();
extern void _ZN9S534C3_nt3v98Ev();
extern void _ZN9S534C3_nt3v99Ev();
extern void _ZN9S534C3_nt4v100Ev();
extern void _ZN9S534C3_nt4v101Ev();
extern void _ZN9S534C3_nt4v102Ev();
extern void _ZN9S534C3_nt4v103Ev();
extern void _ZN9S534C3_nt4v104Ev();
extern void _ZN9S534C3_nt4v105Ev();
extern void _ZN9S534C3_nt4v106Ev();
extern void _ZN9S534C3_nt4v107Ev();
extern void _ZN9S534C3_nt4v108Ev();
extern void _ZN9S534C2_nt4v109Ev();
extern void _ZN9S534C2_nt4v110Ev();
extern void _ZN9S534C2_nt4v111Ev();
extern void _ZN9S534C2_nt4v112Ev();
extern void _ZN9S534C2_nt4v113Ev();
extern void _ZN9S534C2_nt4v114Ev();
extern void _ZN9S534C2_nt4v115Ev();
extern void _ZN9S534C2_nt4v116Ev();
extern void _ZN9S534C2_nt4v117Ev();
extern void _ZN9S534C2_nt4v118Ev();
extern void _ZN9S534C2_nt4v119Ev();
extern void _ZN9S534C2_nt4v120Ev();
extern void _ZN9S534C2_nt4v121Ev();
extern void _ZN9S534C2_nt4v122Ev();
extern void _ZN6S534C12v1Ev();
extern void _ZN6S534C12v2Ev();
static  VTBL_ENTRY vtc_S534C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S534C1[0]),
  (VTBL_ENTRY)&_ZN6S534C1D1Ev,
  (VTBL_ENTRY)&_ZN6S534C1D0Ev,
  (VTBL_ENTRY)&_ZN6S534C52v3Ev,
  (VTBL_ENTRY)&_ZN6S534C52v4Ev,
  (VTBL_ENTRY)&_ZN6S534C52v5Ev,
  (VTBL_ENTRY)&_ZN6S534C52v6Ev,
  (VTBL_ENTRY)&_ZN6S534C52v7Ev,
  (VTBL_ENTRY)&_ZN6S534C52v8Ev,
  (VTBL_ENTRY)&_ZN6S534C52v9Ev,
  (VTBL_ENTRY)&_ZN6S534C53v10Ev,
  (VTBL_ENTRY)&_ZN6S534C53v11Ev,
  (VTBL_ENTRY)&_ZN6S534C53v12Ev,
  (VTBL_ENTRY)&_ZN6S534C53v13Ev,
  (VTBL_ENTRY)&_ZN6S534C53v14Ev,
  (VTBL_ENTRY)&_ZN6S534C53v15Ev,
  (VTBL_ENTRY)&_ZN6S534C53v16Ev,
  (VTBL_ENTRY)&_ZN6S534C53v17Ev,
  (VTBL_ENTRY)&_ZN6S534C53v18Ev,
  (VTBL_ENTRY)&_ZN6S534C53v19Ev,
  (VTBL_ENTRY)&_ZN6S534C53v20Ev,
  (VTBL_ENTRY)&_ZN6S534C53v21Ev,
  (VTBL_ENTRY)&_ZN6S534C53v22Ev,
  (VTBL_ENTRY)&_ZN6S534C53v23Ev,
  (VTBL_ENTRY)&_ZN6S534C53v24Ev,
  (VTBL_ENTRY)&_ZN6S534C53v25Ev,
  (VTBL_ENTRY)&_ZN6S534C53v26Ev,
  (VTBL_ENTRY)&_ZN6S534C53v27Ev,
  (VTBL_ENTRY)&_ZN6S534C53v28Ev,
  (VTBL_ENTRY)&_ZN6S534C53v29Ev,
  (VTBL_ENTRY)&_ZN6S534C53v30Ev,
  (VTBL_ENTRY)&_ZN6S534C53v31Ev,
  (VTBL_ENTRY)&_ZN6S534C53v32Ev,
  (VTBL_ENTRY)&_ZN6S534C53v33Ev,
  (VTBL_ENTRY)&_ZN6S534C53v34Ev,
  (VTBL_ENTRY)&_ZN6S534C53v35Ev,
  (VTBL_ENTRY)&_ZN6S534C53v36Ev,
  (VTBL_ENTRY)&_ZN6S534C53v37Ev,
  (VTBL_ENTRY)&_ZN6S534C53v38Ev,
  (VTBL_ENTRY)&_ZN6S534C53v39Ev,
  (VTBL_ENTRY)&_ZN6S534C53v40Ev,
  (VTBL_ENTRY)&_ZN6S534C53v41Ev,
  (VTBL_ENTRY)&_ZN6S534C53v42Ev,
  (VTBL_ENTRY)&_ZN6S534C53v43Ev,
  (VTBL_ENTRY)&_ZN6S534C53v44Ev,
  (VTBL_ENTRY)&_ZN6S534C53v45Ev,
  (VTBL_ENTRY)&_ZN6S534C53v46Ev,
  (VTBL_ENTRY)&_ZN6S534C53v47Ev,
  (VTBL_ENTRY)&_ZN6S534C53v48Ev,
  (VTBL_ENTRY)&_ZN6S534C53v49Ev,
  (VTBL_ENTRY)&_ZN6S534C53v50Ev,
  (VTBL_ENTRY)&_ZN6S534C53v51Ev,
  (VTBL_ENTRY)&_ZN6S534C53v52Ev,
  (VTBL_ENTRY)&_ZN6S534C53v53Ev,
  (VTBL_ENTRY)&_ZN6S534C53v54Ev,
  (VTBL_ENTRY)&_ZN6S534C53v55Ev,
  (VTBL_ENTRY)&_ZN6S534C53v56Ev,
  (VTBL_ENTRY)&_ZN6S534C53v57Ev,
  (VTBL_ENTRY)&_ZN6S534C53v58Ev,
  (VTBL_ENTRY)&_ZN6S534C53v59Ev,
  (VTBL_ENTRY)&_ZN6S534C53v60Ev,
  (VTBL_ENTRY)&_ZN6S534C53v61Ev,
  (VTBL_ENTRY)&_ZN6S534C53v62Ev,
  (VTBL_ENTRY)&_ZN6S534C53v63Ev,
  (VTBL_ENTRY)&_ZN6S534C53v64Ev,
  (VTBL_ENTRY)&_ZN6S534C53v65Ev,
  (VTBL_ENTRY)&_ZN6S534C53v66Ev,
  (VTBL_ENTRY)&_ZN9S534C4_nt3v67Ev,
  (VTBL_ENTRY)&_ZN9S534C4_nt3v68Ev,
  (VTBL_ENTRY)&_ZN9S534C4_nt3v69Ev,
  (VTBL_ENTRY)&_ZN9S534C4_nt3v70Ev,
  (VTBL_ENTRY)&_ZN9S534C4_nt3v71Ev,
  (VTBL_ENTRY)&_ZN9S534C4_nt3v72Ev,
  (VTBL_ENTRY)&_ZN9S534C4_nt3v73Ev,
  (VTBL_ENTRY)&_ZN9S534C4_nt3v74Ev,
  (VTBL_ENTRY)&_ZN9S534C4_nt3v75Ev,
  (VTBL_ENTRY)&_ZN9S534C4_nt3v76Ev,
  (VTBL_ENTRY)&_ZN9S534C4_nt3v77Ev,
  (VTBL_ENTRY)&_ZN9S534C4_nt3v78Ev,
  (VTBL_ENTRY)&_ZN9S534C4_nt3v79Ev,
  (VTBL_ENTRY)&_ZN9S534C4_nt3v80Ev,
  (VTBL_ENTRY)&_ZN9S534C4_nt3v81Ev,
  (VTBL_ENTRY)&_ZN9S534C4_nt3v82Ev,
  (VTBL_ENTRY)&_ZN9S534C4_nt3v83Ev,
  (VTBL_ENTRY)&_ZN9S534C4_nt3v84Ev,
  (VTBL_ENTRY)&_ZN9S534C4_nt3v85Ev,
  (VTBL_ENTRY)&_ZN9S534C4_nt3v86Ev,
  (VTBL_ENTRY)&_ZN9S534C4_nt3v87Ev,
  (VTBL_ENTRY)&_ZN9S534C4_nt3v88Ev,
  (VTBL_ENTRY)&_ZN9S534C3_nt3v89Ev,
  (VTBL_ENTRY)&_ZN9S534C3_nt3v90Ev,
  (VTBL_ENTRY)&_ZN9S534C3_nt3v91Ev,
  (VTBL_ENTRY)&_ZN9S534C3_nt3v92Ev,
  (VTBL_ENTRY)&_ZN9S534C3_nt3v93Ev,
  (VTBL_ENTRY)&_ZN9S534C3_nt3v94Ev,
  (VTBL_ENTRY)&_ZN9S534C3_nt3v95Ev,
  (VTBL_ENTRY)&_ZN9S534C3_nt3v96Ev,
  (VTBL_ENTRY)&_ZN9S534C3_nt3v97Ev,
  (VTBL_ENTRY)&_ZN9S534C3_nt3v98Ev,
  (VTBL_ENTRY)&_ZN9S534C3_nt3v99Ev,
  (VTBL_ENTRY)&_ZN9S534C3_nt4v100Ev,
  (VTBL_ENTRY)&_ZN9S534C3_nt4v101Ev,
  (VTBL_ENTRY)&_ZN9S534C3_nt4v102Ev,
  (VTBL_ENTRY)&_ZN9S534C3_nt4v103Ev,
  (VTBL_ENTRY)&_ZN9S534C3_nt4v104Ev,
  (VTBL_ENTRY)&_ZN9S534C3_nt4v105Ev,
  (VTBL_ENTRY)&_ZN9S534C3_nt4v106Ev,
  (VTBL_ENTRY)&_ZN9S534C3_nt4v107Ev,
  (VTBL_ENTRY)&_ZN9S534C3_nt4v108Ev,
  (VTBL_ENTRY)&_ZN9S534C2_nt4v109Ev,
  (VTBL_ENTRY)&_ZN9S534C2_nt4v110Ev,
  (VTBL_ENTRY)&_ZN9S534C2_nt4v111Ev,
  (VTBL_ENTRY)&_ZN9S534C2_nt4v112Ev,
  (VTBL_ENTRY)&_ZN9S534C2_nt4v113Ev,
  (VTBL_ENTRY)&_ZN9S534C2_nt4v114Ev,
  (VTBL_ENTRY)&_ZN9S534C2_nt4v115Ev,
  (VTBL_ENTRY)&_ZN9S534C2_nt4v116Ev,
  (VTBL_ENTRY)&_ZN9S534C2_nt4v117Ev,
  (VTBL_ENTRY)&_ZN9S534C2_nt4v118Ev,
  (VTBL_ENTRY)&_ZN9S534C2_nt4v119Ev,
  (VTBL_ENTRY)&_ZN9S534C2_nt4v120Ev,
  (VTBL_ENTRY)&_ZN9S534C2_nt4v121Ev,
  (VTBL_ENTRY)&_ZN9S534C2_nt4v122Ev,
  (VTBL_ENTRY)&_ZN6S534C12v1Ev,
  (VTBL_ENTRY)&_ZN6S534C12v2Ev,
};
extern VTBL_ENTRY _ZTI6S534C1[];
extern  VTBL_ENTRY _ZTV6S534C1[];
Class_Descriptor cd_S534C1 = {  "S534C1", // class name
  bases_S534C1, 4,
  &(vtc_S534C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(344,248), // object size
  NSPAIRA(_ZTI6S534C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S534C1),126, //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  S573C5  {
  int s573c5f0;
  __tsi64 s573c5f1;
  void *s573c5f2[4];
  int s573c5f3[2];
  void *s573c5f4;
  ::S674C6_nt s573c5f5;
  void *s573c5f6[2];
  virtual  ~S573C5(); // _ZN6S573C5D1Ev
  virtual void  v4(); // _ZN6S573C52v4Ev
  virtual void  v5(); // _ZN6S573C52v5Ev
  virtual void  v6(); // _ZN6S573C52v6Ev
  virtual void  v7(); // _ZN6S573C52v7Ev
  virtual void  v8(); // _ZN6S573C52v8Ev
  virtual void  v9(); // _ZN6S573C52v9Ev
  virtual void  v10(); // _ZN6S573C53v10Ev
  virtual void  v11(); // _ZN6S573C53v11Ev
  virtual void  v12(); // _ZN6S573C53v12Ev
  virtual void  v13(); // _ZN6S573C53v13Ev
  virtual void  v14(); // _ZN6S573C53v14Ev
  virtual void  v15(); // _ZN6S573C53v15Ev
  virtual void  v16(); // _ZN6S573C53v16Ev
  virtual void  v17(); // _ZN6S573C53v17Ev
  virtual void  v18(); // _ZN6S573C53v18Ev
  virtual void  v19(); // _ZN6S573C53v19Ev
  virtual void  v20(); // _ZN6S573C53v20Ev
  virtual void  v21(); // _ZN6S573C53v21Ev
  virtual void  v22(); // _ZN6S573C53v22Ev
  virtual void  v23(); // _ZN6S573C53v23Ev
  virtual void  v24(); // _ZN6S573C53v24Ev
  virtual void  v25(); // _ZN6S573C53v25Ev
  virtual void  v26(); // _ZN6S573C53v26Ev
  virtual void  v27(); // _ZN6S573C53v27Ev
  virtual void  v28(); // _ZN6S573C53v28Ev
  virtual void  v29(); // _ZN6S573C53v29Ev
  virtual void  v30(); // _ZN6S573C53v30Ev
  virtual void  v31(); // _ZN6S573C53v31Ev
  virtual void  v32(); // _ZN6S573C53v32Ev
  virtual void  v33(); // _ZN6S573C53v33Ev
  virtual void  v34(); // _ZN6S573C53v34Ev
  virtual void  v35(); // _ZN6S573C53v35Ev
  virtual void  v36(); // _ZN6S573C53v36Ev
  virtual void  v37(); // _ZN6S573C53v37Ev
  virtual void  v38(); // _ZN6S573C53v38Ev
  virtual void  v39(); // _ZN6S573C53v39Ev
  virtual void  v40(); // _ZN6S573C53v40Ev
  virtual void  v41(); // _ZN6S573C53v41Ev
  virtual void  v42(); // _ZN6S573C53v42Ev
  virtual void  v43(); // _ZN6S573C53v43Ev
  virtual void  v44(); // _ZN6S573C53v44Ev
  virtual void  v45(); // _ZN6S573C53v45Ev
  virtual void  v46(); // _ZN6S573C53v46Ev
  virtual void  v47(); // _ZN6S573C53v47Ev
  virtual void  v48(); // _ZN6S573C53v48Ev
  virtual void  v49(); // _ZN6S573C53v49Ev
  virtual void  v50(); // _ZN6S573C53v50Ev
  virtual void  v51(); // _ZN6S573C53v51Ev
  virtual void  v52(); // _ZN6S573C53v52Ev
  virtual void  v53(); // _ZN6S573C53v53Ev
  virtual void  v54(); // _ZN6S573C53v54Ev
  virtual void  v55(); // _ZN6S573C53v55Ev
  virtual void  v56(); // _ZN6S573C53v56Ev
  virtual void  v57(); // _ZN6S573C53v57Ev
  virtual void  v58(); // _ZN6S573C53v58Ev
  virtual void  v59(); // _ZN6S573C53v59Ev
  virtual void  v60(); // _ZN6S573C53v60Ev
  virtual void  v61(); // _ZN6S573C53v61Ev
  virtual void  v62(); // _ZN6S573C53v62Ev
  virtual void  v63(); // _ZN6S573C53v63Ev
  virtual void  v64(); // _ZN6S573C53v64Ev
  virtual void  v65(); // _ZN6S573C53v65Ev
  virtual void  v66(); // _ZN6S573C53v66Ev
  virtual void  v67(); // _ZN6S573C53v67Ev
  S573C5(); // tgen
};
//SIG(-1 S573C5) 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]}


 S573C5 ::~S573C5(){ note_dtor("S573C5", this);}
void  S573C5 ::v4(){vfunc_called(this, "_ZN6S573C52v4Ev");}
void  S573C5 ::v5(){vfunc_called(this, "_ZN6S573C52v5Ev");}
void  S573C5 ::v6(){vfunc_called(this, "_ZN6S573C52v6Ev");}
void  S573C5 ::v7(){vfunc_called(this, "_ZN6S573C52v7Ev");}
void  S573C5 ::v8(){vfunc_called(this, "_ZN6S573C52v8Ev");}
void  S573C5 ::v9(){vfunc_called(this, "_ZN6S573C52v9Ev");}
void  S573C5 ::v10(){vfunc_called(this, "_ZN6S573C53v10Ev");}
void  S573C5 ::v11(){vfunc_called(this, "_ZN6S573C53v11Ev");}
void  S573C5 ::v12(){vfunc_called(this, "_ZN6S573C53v12Ev");}
void  S573C5 ::v13(){vfunc_called(this, "_ZN6S573C53v13Ev");}
void  S573C5 ::v14(){vfunc_called(this, "_ZN6S573C53v14Ev");}
void  S573C5 ::v15(){vfunc_called(this, "_ZN6S573C53v15Ev");}
void  S573C5 ::v16(){vfunc_called(this, "_ZN6S573C53v16Ev");}
void  S573C5 ::v17(){vfunc_called(this, "_ZN6S573C53v17Ev");}
void  S573C5 ::v18(){vfunc_called(this, "_ZN6S573C53v18Ev");}
void  S573C5 ::v19(){vfunc_called(this, "_ZN6S573C53v19Ev");}
void  S573C5 ::v20(){vfunc_called(this, "_ZN6S573C53v20Ev");}
void  S573C5 ::v21(){vfunc_called(this, "_ZN6S573C53v21Ev");}
void  S573C5 ::v22(){vfunc_called(this, "_ZN6S573C53v22Ev");}
void  S573C5 ::v23(){vfunc_called(this, "_ZN6S573C53v23Ev");}
void  S573C5 ::v24(){vfunc_called(this, "_ZN6S573C53v24Ev");}
void  S573C5 ::v25(){vfunc_called(this, "_ZN6S573C53v25Ev");}
void  S573C5 ::v26(){vfunc_called(this, "_ZN6S573C53v26Ev");}
void  S573C5 ::v27(){vfunc_called(this, "_ZN6S573C53v27Ev");}
void  S573C5 ::v28(){vfunc_called(this, "_ZN6S573C53v28Ev");}
void  S573C5 ::v29(){vfunc_called(this, "_ZN6S573C53v29Ev");}
void  S573C5 ::v30(){vfunc_called(this, "_ZN6S573C53v30Ev");}
void  S573C5 ::v31(){vfunc_called(this, "_ZN6S573C53v31Ev");}
void  S573C5 ::v32(){vfunc_called(this, "_ZN6S573C53v32Ev");}
void  S573C5 ::v33(){vfunc_called(this, "_ZN6S573C53v33Ev");}
void  S573C5 ::v34(){vfunc_called(this, "_ZN6S573C53v34Ev");}
void  S573C5 ::v35(){vfunc_called(this, "_ZN6S573C53v35Ev");}
void  S573C5 ::v36(){vfunc_called(this, "_ZN6S573C53v36Ev");}
void  S573C5 ::v37(){vfunc_called(this, "_ZN6S573C53v37Ev");}
void  S573C5 ::v38(){vfunc_called(this, "_ZN6S573C53v38Ev");}
void  S573C5 ::v39(){vfunc_called(this, "_ZN6S573C53v39Ev");}
void  S573C5 ::v40(){vfunc_called(this, "_ZN6S573C53v40Ev");}
void  S573C5 ::v41(){vfunc_called(this, "_ZN6S573C53v41Ev");}
void  S573C5 ::v42(){vfunc_called(this, "_ZN6S573C53v42Ev");}
void  S573C5 ::v43(){vfunc_called(this, "_ZN6S573C53v43Ev");}
void  S573C5 ::v44(){vfunc_called(this, "_ZN6S573C53v44Ev");}
void  S573C5 ::v45(){vfunc_called(this, "_ZN6S573C53v45Ev");}
void  S573C5 ::v46(){vfunc_called(this, "_ZN6S573C53v46Ev");}
void  S573C5 ::v47(){vfunc_called(this, "_ZN6S573C53v47Ev");}
void  S573C5 ::v48(){vfunc_called(this, "_ZN6S573C53v48Ev");}
void  S573C5 ::v49(){vfunc_called(this, "_ZN6S573C53v49Ev");}
void  S573C5 ::v50(){vfunc_called(this, "_ZN6S573C53v50Ev");}
void  S573C5 ::v51(){vfunc_called(this, "_ZN6S573C53v51Ev");}
void  S573C5 ::v52(){vfunc_called(this, "_ZN6S573C53v52Ev");}
void  S573C5 ::v53(){vfunc_called(this, "_ZN6S573C53v53Ev");}
void  S573C5 ::v54(){vfunc_called(this, "_ZN6S573C53v54Ev");}
void  S573C5 ::v55(){vfunc_called(this, "_ZN6S573C53v55Ev");}
void  S573C5 ::v56(){vfunc_called(this, "_ZN6S573C53v56Ev");}
void  S573C5 ::v57(){vfunc_called(this, "_ZN6S573C53v57Ev");}
void  S573C5 ::v58(){vfunc_called(this, "_ZN6S573C53v58Ev");}
void  S573C5 ::v59(){vfunc_called(this, "_ZN6S573C53v59Ev");}
void  S573C5 ::v60(){vfunc_called(this, "_ZN6S573C53v60Ev");}
void  S573C5 ::v61(){vfunc_called(this, "_ZN6S573C53v61Ev");}
void  S573C5 ::v62(){vfunc_called(this, "_ZN6S573C53v62Ev");}
void  S573C5 ::v63(){vfunc_called(this, "_ZN6S573C53v63Ev");}
void  S573C5 ::v64(){vfunc_called(this, "_ZN6S573C53v64Ev");}
void  S573C5 ::v65(){vfunc_called(this, "_ZN6S573C53v65Ev");}
void  S573C5 ::v66(){vfunc_called(this, "_ZN6S573C53v66Ev");}
void  S573C5 ::v67(){vfunc_called(this, "_ZN6S573C53v67Ev");}
S573C5 ::S573C5(){ note_ctor("S573C5", this);} // tgen

static void Test_S573C5()
{
  extern Class_Descriptor cd_S573C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S573C5, buf);
    S573C5 *dp, &lv = *(dp=new (buf) S573C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S573C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S573C5)");
    check_field_offset(lv, s573c5f0, ABISELECT(8,4), "S573C5.s573c5f0");
    check_field_offset(lv, s573c5f1, ABISELECT(16,8), "S573C5.s573c5f1");
    check_field_offset(lv, s573c5f2, ABISELECT(24,16), "S573C5.s573c5f2");
    check_field_offset(lv, s573c5f3, ABISELECT(56,32), "S573C5.s573c5f3");
    check_field_offset(lv, s573c5f4, ABISELECT(64,40), "S573C5.s573c5f4");
    check_field_offset(lv, s573c5f5, ABISELECT(72,44), "S573C5.s573c5f5");
    check_field_offset(lv, s573c5f6, ABISELECT(80,52), "S573C5.s573c5f6");
    test_class_info(&lv, &cd_S573C5);
    dp->~S573C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS573C5(Test_S573C5, "S573C5", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN6S573C5C1Ev();
extern void _ZN6S573C5D1Ev();
Name_Map name_map_S573C5[] = {
  NSPAIR(_ZN6S573C5C1Ev),
  NSPAIR(_ZN6S573C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI6S573C5[];
extern void _ZN6S573C5D1Ev();
extern void _ZN6S573C5D0Ev();
extern void _ZN6S573C52v4Ev();
extern void _ZN6S573C52v5Ev();
extern void _ZN6S573C52v6Ev();
extern void _ZN6S573C52v7Ev();
extern void _ZN6S573C52v8Ev();
extern void _ZN6S573C52v9Ev();
extern void _ZN6S573C53v10Ev();
extern void _ZN6S573C53v11Ev();
extern void _ZN6S573C53v12Ev();
extern void _ZN6S573C53v13Ev();
extern void _ZN6S573C53v14Ev();
extern void _ZN6S573C53v15Ev();
extern void _ZN6S573C53v16Ev();
extern void _ZN6S573C53v17Ev();
extern void _ZN6S573C53v18Ev();
extern void _ZN6S573C53v19Ev();
extern void _ZN6S573C53v20Ev();
extern void _ZN6S573C53v21Ev();
extern void _ZN6S573C53v22Ev();
extern void _ZN6S573C53v23Ev();
extern void _ZN6S573C53v24Ev();
extern void _ZN6S573C53v25Ev();
extern void _ZN6S573C53v26Ev();
extern void _ZN6S573C53v27Ev();
extern void _ZN6S573C53v28Ev();
extern void _ZN6S573C53v29Ev();
extern void _ZN6S573C53v30Ev();
extern void _ZN6S573C53v31Ev();
extern void _ZN6S573C53v32Ev();
extern void _ZN6S573C53v33Ev();
extern void _ZN6S573C53v34Ev();
extern void _ZN6S573C53v35Ev();
extern void _ZN6S573C53v36Ev();
extern void _ZN6S573C53v37Ev();
extern void _ZN6S573C53v38Ev();
extern void _ZN6S573C53v39Ev();
extern void _ZN6S573C53v40Ev();
extern void _ZN6S573C53v41Ev();
extern void _ZN6S573C53v42Ev();
extern void _ZN6S573C53v43Ev();
extern void _ZN6S573C53v44Ev();
extern void _ZN6S573C53v45Ev();
extern void _ZN6S573C53v46Ev();
extern void _ZN6S573C53v47Ev();
extern void _ZN6S573C53v48Ev();
extern void _ZN6S573C53v49Ev();
extern void _ZN6S573C53v50Ev();
extern void _ZN6S573C53v51Ev();
extern void _ZN6S573C53v52Ev();
extern void _ZN6S573C53v53Ev();
extern void _ZN6S573C53v54Ev();
extern void _ZN6S573C53v55Ev();
extern void _ZN6S573C53v56Ev();
extern void _ZN6S573C53v57Ev();
extern void _ZN6S573C53v58Ev();
extern void _ZN6S573C53v59Ev();
extern void _ZN6S573C53v60Ev();
extern void _ZN6S573C53v61Ev();
extern void _ZN6S573C53v62Ev();
extern void _ZN6S573C53v63Ev();
extern void _ZN6S573C53v64Ev();
extern void _ZN6S573C53v65Ev();
extern void _ZN6S573C53v66Ev();
extern void _ZN6S573C53v67Ev();
static  VTBL_ENTRY vtc_S573C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S573C5[0]),
  (VTBL_ENTRY)&_ZN6S573C5D1Ev,
  (VTBL_ENTRY)&_ZN6S573C5D0Ev,
  (VTBL_ENTRY)&_ZN6S573C52v4Ev,
  (VTBL_ENTRY)&_ZN6S573C52v5Ev,
  (VTBL_ENTRY)&_ZN6S573C52v6Ev,
  (VTBL_ENTRY)&_ZN6S573C52v7Ev,
  (VTBL_ENTRY)&_ZN6S573C52v8Ev,
  (VTBL_ENTRY)&_ZN6S573C52v9Ev,
  (VTBL_ENTRY)&_ZN6S573C53v10Ev,
  (VTBL_ENTRY)&_ZN6S573C53v11Ev,
  (VTBL_ENTRY)&_ZN6S573C53v12Ev,
  (VTBL_ENTRY)&_ZN6S573C53v13Ev,
  (VTBL_ENTRY)&_ZN6S573C53v14Ev,
  (VTBL_ENTRY)&_ZN6S573C53v15Ev,
  (VTBL_ENTRY)&_ZN6S573C53v16Ev,
  (VTBL_ENTRY)&_ZN6S573C53v17Ev,
  (VTBL_ENTRY)&_ZN6S573C53v18Ev,
  (VTBL_ENTRY)&_ZN6S573C53v19Ev,
  (VTBL_ENTRY)&_ZN6S573C53v20Ev,
  (VTBL_ENTRY)&_ZN6S573C53v21Ev,
  (VTBL_ENTRY)&_ZN6S573C53v22Ev,
  (VTBL_ENTRY)&_ZN6S573C53v23Ev,
  (VTBL_ENTRY)&_ZN6S573C53v24Ev,
  (VTBL_ENTRY)&_ZN6S573C53v25Ev,
  (VTBL_ENTRY)&_ZN6S573C53v26Ev,
  (VTBL_ENTRY)&_ZN6S573C53v27Ev,
  (VTBL_ENTRY)&_ZN6S573C53v28Ev,
  (VTBL_ENTRY)&_ZN6S573C53v29Ev,
  (VTBL_ENTRY)&_ZN6S573C53v30Ev,
  (VTBL_ENTRY)&_ZN6S573C53v31Ev,
  (VTBL_ENTRY)&_ZN6S573C53v32Ev,
  (VTBL_ENTRY)&_ZN6S573C53v33Ev,
  (VTBL_ENTRY)&_ZN6S573C53v34Ev,
  (VTBL_ENTRY)&_ZN6S573C53v35Ev,
  (VTBL_ENTRY)&_ZN6S573C53v36Ev,
  (VTBL_ENTRY)&_ZN6S573C53v37Ev,
  (VTBL_ENTRY)&_ZN6S573C53v38Ev,
  (VTBL_ENTRY)&_ZN6S573C53v39Ev,
  (VTBL_ENTRY)&_ZN6S573C53v40Ev,
  (VTBL_ENTRY)&_ZN6S573C53v41Ev,
  (VTBL_ENTRY)&_ZN6S573C53v42Ev,
  (VTBL_ENTRY)&_ZN6S573C53v43Ev,
  (VTBL_ENTRY)&_ZN6S573C53v44Ev,
  (VTBL_ENTRY)&_ZN6S573C53v45Ev,
  (VTBL_ENTRY)&_ZN6S573C53v46Ev,
  (VTBL_ENTRY)&_ZN6S573C53v47Ev,
  (VTBL_ENTRY)&_ZN6S573C53v48Ev,
  (VTBL_ENTRY)&_ZN6S573C53v49Ev,
  (VTBL_ENTRY)&_ZN6S573C53v50Ev,
  (VTBL_ENTRY)&_ZN6S573C53v51Ev,
  (VTBL_ENTRY)&_ZN6S573C53v52Ev,
  (VTBL_ENTRY)&_ZN6S573C53v53Ev,
  (VTBL_ENTRY)&_ZN6S573C53v54Ev,
  (VTBL_ENTRY)&_ZN6S573C53v55Ev,
  (VTBL_ENTRY)&_ZN6S573C53v56Ev,
  (VTBL_ENTRY)&_ZN6S573C53v57Ev,
  (VTBL_ENTRY)&_ZN6S573C53v58Ev,
  (VTBL_ENTRY)&_ZN6S573C53v59Ev,
  (VTBL_ENTRY)&_ZN6S573C53v60Ev,
  (VTBL_ENTRY)&_ZN6S573C53v61Ev,
  (VTBL_ENTRY)&_ZN6S573C53v62Ev,
  (VTBL_ENTRY)&_ZN6S573C53v63Ev,
  (VTBL_ENTRY)&_ZN6S573C53v64Ev,
  (VTBL_ENTRY)&_ZN6S573C53v65Ev,
  (VTBL_ENTRY)&_ZN6S573C53v66Ev,
  (VTBL_ENTRY)&_ZN6S573C53v67Ev,
};
extern VTBL_ENTRY _ZTI6S573C5[];
extern  VTBL_ENTRY _ZTV6S573C5[];
Class_Descriptor cd_S573C5 = {  "S573C5", // class name
  0,0,//no base classes
  &(vtc_S573C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI6S573C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV6S573C5),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  S573C4  : S573C5 {
  int s573c4f0[2];
  void *s573c4f1;
  int s573c4f2[2];
  ::S674C37_nt s573c4f3;
  ::S674C37_nt s573c4f4;
  ::S3625C32 s573c4f5;
  ::S674C37_nt s573c4f6;
  unsigned int s573c4f7:1;
  unsigned int s573c4f8:1;
  unsigned int s573c4f9:1;
  unsigned int s573c4f10:1;
  unsigned int s573c4f11:1;
  int s573c4f12[2];
  virtual  ~S573C4(); // _ZN6S573C4D1Ev
  virtual void  v68(); // _ZN6S573C43v68Ev
  virtual void  v69(); // _ZN6S573C43v69Ev
  virtual void  v70(); // _ZN6S573C43v70Ev
  virtual void  v71(); // _ZN6S573C43v71Ev
  virtual void  v72(); // _ZN6S573C43v72Ev
  virtual void  v73(); // _ZN6S573C43v73Ev
  virtual void  v74(); // _ZN6S573C43v74Ev
  virtual void  v75(); // _ZN6S573C43v75Ev
  virtual void  v76(); // _ZN6S573C43v76Ev
  virtual void  v77(); // _ZN6S573C43v77Ev
  virtual void  v78(); // _ZN6S573C43v78Ev
  virtual void  v79(); // _ZN6S573C43v79Ev
  virtual void  v80(); // _ZN6S573C43v80Ev
  virtual void  v81(); // _ZN6S573C43v81Ev
  virtual void  v82(); // _ZN6S573C43v82Ev
  virtual void  v83(); // _ZN6S573C43v83Ev
  virtual void  v84(); // _ZN6S573C43v84Ev
  virtual void  v85(); // _ZN6S573C43v85Ev
  virtual void  v86(); // _ZN6S573C43v86Ev
  virtual void  v87(); // _ZN6S573C43v87Ev
  virtual void  v88(); // _ZN6S573C43v88Ev
  virtual void  v89(); // _ZN6S573C43v89Ev
  S573C4(); // tgen
};
//SIG(-1 S573C4) C1{ BC2{ 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 FC3{ m Fi[2]} Fp[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 Fi[2] Fp Fi[2] FC4{ BC5{ BC6{ BC7{ m Fp Fi[2]}}}} FC4 FC8{ m} FC4 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]}


 S573C4 ::~S573C4(){ note_dtor("S573C4", this);}
void  S573C4 ::v68(){vfunc_called(this, "_ZN6S573C43v68Ev");}
void  S573C4 ::v69(){vfunc_called(this, "_ZN6S573C43v69Ev");}
void  S573C4 ::v70(){vfunc_called(this, "_ZN6S573C43v70Ev");}
void  S573C4 ::v71(){vfunc_called(this, "_ZN6S573C43v71Ev");}
void  S573C4 ::v72(){vfunc_called(this, "_ZN6S573C43v72Ev");}
void  S573C4 ::v73(){vfunc_called(this, "_ZN6S573C43v73Ev");}
void  S573C4 ::v74(){vfunc_called(this, "_ZN6S573C43v74Ev");}
void  S573C4 ::v75(){vfunc_called(this, "_ZN6S573C43v75Ev");}
void  S573C4 ::v76(){vfunc_called(this, "_ZN6S573C43v76Ev");}
void  S573C4 ::v77(){vfunc_called(this, "_ZN6S573C43v77Ev");}
void  S573C4 ::v78(){vfunc_called(this, "_ZN6S573C43v78Ev");}
void  S573C4 ::v79(){vfunc_called(this, "_ZN6S573C43v79Ev");}
void  S573C4 ::v80(){vfunc_called(this, "_ZN6S573C43v80Ev");}
void  S573C4 ::v81(){vfunc_called(this, "_ZN6S573C43v81Ev");}
void  S573C4 ::v82(){vfunc_called(this, "_ZN6S573C43v82Ev");}
void  S573C4 ::v83(){vfunc_called(this, "_ZN6S573C43v83Ev");}
void  S573C4 ::v84(){vfunc_called(this, "_ZN6S573C43v84Ev");}
void  S573C4 ::v85(){vfunc_called(this, "_ZN6S573C43v85Ev");}
void  S573C4 ::v86(){vfunc_called(this, "_ZN6S573C43v86Ev");}
void  S573C4 ::v87(){vfunc_called(this, "_ZN6S573C43v87Ev");}
void  S573C4 ::v88(){vfunc_called(this, "_ZN6S573C43v88Ev");}
void  S573C4 ::v89(){vfunc_called(this, "_ZN6S573C43v89Ev");}
S573C4 ::S573C4(){ note_ctor("S573C4", this);} // tgen

static void Test_S573C4()
{
  extern Class_Descriptor cd_S573C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(25,34)];
    init_test(&cd_S573C4, buf);
    S573C4 *dp, &lv = *(dp=new (buf) S573C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(192,132), "sizeof(S573C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S573C4)");
    check_base_class_offset(lv, (S573C5*), 0, "S573C4");
    check_field_offset(lv, s573c4f0, ABISELECT(96,60), "S573C4.s573c4f0");
    check_field_offset(lv, s573c4f1, ABISELECT(104,68), "S573C4.s573c4f1");
    check_field_offset(lv, s573c4f2, ABISELECT(112,72), "S573C4.s573c4f2");
    check_field_offset(lv, s573c4f3, ABISELECT(120,80), "S573C4.s573c4f3");
    check_field_offset(lv, s573c4f4, ABISELECT(136,92), "S573C4.s573c4f4");
    check_field_offset(lv, s573c4f5, ABISELECT(152,104), "S573C4.s573c4f5");
    check_field_offset(lv, s573c4f6, ABISELECT(160,108), "S573C4.s573c4f6");
    set_bf_and_test(lv, s573c4f7, ABISELECT(176,120), 0, 1, 1, "S573C4");
    set_bf_and_test(lv, s573c4f8, ABISELECT(176,120), 1, 1, 1, "S573C4");
    set_bf_and_test(lv, s573c4f9, ABISELECT(176,120), 2, 1, 1, "S573C4");
    set_bf_and_test(lv, s573c4f10, ABISELECT(176,120), 3, 1, 1, "S573C4");
    set_bf_and_test(lv, s573c4f11, ABISELECT(176,120), 4, 1, 1, "S573C4");
    check_field_offset(lv, s573c4f12, ABISELECT(180,124), "S573C4.s573c4f12");
    test_class_info(&lv, &cd_S573C4);
    dp->~S573C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS573C4(Test_S573C4, "S573C4", ABISELECT(192,132));

#else // __cplusplus

extern void _ZN6S573C4C1Ev();
extern void _ZN6S573C4D1Ev();
Name_Map name_map_S573C4[] = {
  NSPAIR(_ZN6S573C4C1Ev),
  NSPAIR(_ZN6S573C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S573C5;
extern VTBL_ENTRY _ZTI6S573C5[];
extern  VTBL_ENTRY _ZTV6S573C5[];
static Base_Class bases_S573C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S573C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI6S573C4[];
extern void _ZN6S573C4D1Ev();
extern void _ZN6S573C4D0Ev();
extern void _ZN6S573C52v4Ev();
extern void _ZN6S573C52v5Ev();
extern void _ZN6S573C52v6Ev();
extern void _ZN6S573C52v7Ev();
extern void _ZN6S573C52v8Ev();
extern void _ZN6S573C52v9Ev();
extern void _ZN6S573C53v10Ev();
extern void _ZN6S573C53v11Ev();
extern void _ZN6S573C53v12Ev();
extern void _ZN6S573C53v13Ev();
extern void _ZN6S573C53v14Ev();
extern void _ZN6S573C53v15Ev();
extern void _ZN6S573C53v16Ev();
extern void _ZN6S573C53v17Ev();
extern void _ZN6S573C53v18Ev();
extern void _ZN6S573C53v19Ev();
extern void _ZN6S573C53v20Ev();
extern void _ZN6S573C53v21Ev();
extern void _ZN6S573C53v22Ev();
extern void _ZN6S573C53v23Ev();
extern void _ZN6S573C53v24Ev();
extern void _ZN6S573C53v25Ev();
extern void _ZN6S573C53v26Ev();
extern void _ZN6S573C53v27Ev();
extern void _ZN6S573C53v28Ev();
extern void _ZN6S573C53v29Ev();
extern void _ZN6S573C53v30Ev();
extern void _ZN6S573C53v31Ev();
extern void _ZN6S573C53v32Ev();
extern void _ZN6S573C53v33Ev();
extern void _ZN6S573C53v34Ev();
extern void _ZN6S573C53v35Ev();
extern void _ZN6S573C53v36Ev();
extern void _ZN6S573C53v37Ev();
extern void _ZN6S573C53v38Ev();
extern void _ZN6S573C53v39Ev();
extern void _ZN6S573C53v40Ev();
extern void _ZN6S573C53v41Ev();
extern void _ZN6S573C53v42Ev();
extern void _ZN6S573C53v43Ev();
extern void _ZN6S573C53v44Ev();
extern void _ZN6S573C53v45Ev();
extern void _ZN6S573C53v46Ev();
extern void _ZN6S573C53v47Ev();
extern void _ZN6S573C53v48Ev();
extern void _ZN6S573C53v49Ev();
extern void _ZN6S573C53v50Ev();
extern void _ZN6S573C53v51Ev();
extern void _ZN6S573C53v52Ev();
extern void _ZN6S573C53v53Ev();
extern void _ZN6S573C53v54Ev();
extern void _ZN6S573C53v55Ev();
extern void _ZN6S573C53v56Ev();
extern void _ZN6S573C53v57Ev();
extern void _ZN6S573C53v58Ev();
extern void _ZN6S573C53v59Ev();
extern void _ZN6S573C53v60Ev();
extern void _ZN6S573C53v61Ev();
extern void _ZN6S573C53v62Ev();
extern void _ZN6S573C53v63Ev();
extern void _ZN6S573C53v64Ev();
extern void _ZN6S573C53v65Ev();
extern void _ZN6S573C53v66Ev();
extern void _ZN6S573C53v67Ev();
extern void _ZN6S573C43v68Ev();
extern void _ZN6S573C43v69Ev();
extern void _ZN6S573C43v70Ev();
extern void _ZN6S573C43v71Ev();
extern void _ZN6S573C43v72Ev();
extern void _ZN6S573C43v73Ev();
extern void _ZN6S573C43v74Ev();
extern void _ZN6S573C43v75Ev();
extern void _ZN6S573C43v76Ev();
extern void _ZN6S573C43v77Ev();
extern void _ZN6S573C43v78Ev();
extern void _ZN6S573C43v79Ev();
extern void _ZN6S573C43v80Ev();
extern void _ZN6S573C43v81Ev();
extern void _ZN6S573C43v82Ev();
extern void _ZN6S573C43v83Ev();
extern void _ZN6S573C43v84Ev();
extern void _ZN6S573C43v85Ev();
extern void _ZN6S573C43v86Ev();
extern void _ZN6S573C43v87Ev();
extern void _ZN6S573C43v88Ev();
extern void _ZN6S573C43v89Ev();
static  VTBL_ENTRY vtc_S573C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S573C4[0]),
  (VTBL_ENTRY)&_ZN6S573C4D1Ev,
  (VTBL_ENTRY)&_ZN6S573C4D0Ev,
  (VTBL_ENTRY)&_ZN6S573C52v4Ev,
  (VTBL_ENTRY)&_ZN6S573C52v5Ev,
  (VTBL_ENTRY)&_ZN6S573C52v6Ev,
  (VTBL_ENTRY)&_ZN6S573C52v7Ev,
  (VTBL_ENTRY)&_ZN6S573C52v8Ev,
  (VTBL_ENTRY)&_ZN6S573C52v9Ev,
  (VTBL_ENTRY)&_ZN6S573C53v10Ev,
  (VTBL_ENTRY)&_ZN6S573C53v11Ev,
  (VTBL_ENTRY)&_ZN6S573C53v12Ev,
  (VTBL_ENTRY)&_ZN6S573C53v13Ev,
  (VTBL_ENTRY)&_ZN6S573C53v14Ev,
  (VTBL_ENTRY)&_ZN6S573C53v15Ev,
  (VTBL_ENTRY)&_ZN6S573C53v16Ev,
  (VTBL_ENTRY)&_ZN6S573C53v17Ev,
  (VTBL_ENTRY)&_ZN6S573C53v18Ev,
  (VTBL_ENTRY)&_ZN6S573C53v19Ev,
  (VTBL_ENTRY)&_ZN6S573C53v20Ev,
  (VTBL_ENTRY)&_ZN6S573C53v21Ev,
  (VTBL_ENTRY)&_ZN6S573C53v22Ev,
  (VTBL_ENTRY)&_ZN6S573C53v23Ev,
  (VTBL_ENTRY)&_ZN6S573C53v24Ev,
  (VTBL_ENTRY)&_ZN6S573C53v25Ev,
  (VTBL_ENTRY)&_ZN6S573C53v26Ev,
  (VTBL_ENTRY)&_ZN6S573C53v27Ev,
  (VTBL_ENTRY)&_ZN6S573C53v28Ev,
  (VTBL_ENTRY)&_ZN6S573C53v29Ev,
  (VTBL_ENTRY)&_ZN6S573C53v30Ev,
  (VTBL_ENTRY)&_ZN6S573C53v31Ev,
  (VTBL_ENTRY)&_ZN6S573C53v32Ev,
  (VTBL_ENTRY)&_ZN6S573C53v33Ev,
  (VTBL_ENTRY)&_ZN6S573C53v34Ev,
  (VTBL_ENTRY)&_ZN6S573C53v35Ev,
  (VTBL_ENTRY)&_ZN6S573C53v36Ev,
  (VTBL_ENTRY)&_ZN6S573C53v37Ev,
  (VTBL_ENTRY)&_ZN6S573C53v38Ev,
  (VTBL_ENTRY)&_ZN6S573C53v39Ev,
  (VTBL_ENTRY)&_ZN6S573C53v40Ev,
  (VTBL_ENTRY)&_ZN6S573C53v41Ev,
  (VTBL_ENTRY)&_ZN6S573C53v42Ev,
  (VTBL_ENTRY)&_ZN6S573C53v43Ev,
  (VTBL_ENTRY)&_ZN6S573C53v44Ev,
  (VTBL_ENTRY)&_ZN6S573C53v45Ev,
  (VTBL_ENTRY)&_ZN6S573C53v46Ev,
  (VTBL_ENTRY)&_ZN6S573C53v47Ev,
  (VTBL_ENTRY)&_ZN6S573C53v48Ev,
  (VTBL_ENTRY)&_ZN6S573C53v49Ev,
  (VTBL_ENTRY)&_ZN6S573C53v50Ev,
  (VTBL_ENTRY)&_ZN6S573C53v51Ev,
  (VTBL_ENTRY)&_ZN6S573C53v52Ev,
  (VTBL_ENTRY)&_ZN6S573C53v53Ev,
  (VTBL_ENTRY)&_ZN6S573C53v54Ev,
  (VTBL_ENTRY)&_ZN6S573C53v55Ev,
  (VTBL_ENTRY)&_ZN6S573C53v56Ev,
  (VTBL_ENTRY)&_ZN6S573C53v57Ev,
  (VTBL_ENTRY)&_ZN6S573C53v58Ev,
  (VTBL_ENTRY)&_ZN6S573C53v59Ev,
  (VTBL_ENTRY)&_ZN6S573C53v60Ev,
  (VTBL_ENTRY)&_ZN6S573C53v61Ev,
  (VTBL_ENTRY)&_ZN6S573C53v62Ev,
  (VTBL_ENTRY)&_ZN6S573C53v63Ev,
  (VTBL_ENTRY)&_ZN6S573C53v64Ev,
  (VTBL_ENTRY)&_ZN6S573C53v65Ev,
  (VTBL_ENTRY)&_ZN6S573C53v66Ev,
  (VTBL_ENTRY)&_ZN6S573C53v67Ev,
  (VTBL_ENTRY)&_ZN6S573C43v68Ev,
  (VTBL_ENTRY)&_ZN6S573C43v69Ev,
  (VTBL_ENTRY)&_ZN6S573C43v70Ev,
  (VTBL_ENTRY)&_ZN6S573C43v71Ev,
  (VTBL_ENTRY)&_ZN6S573C43v72Ev,
  (VTBL_ENTRY)&_ZN6S573C43v73Ev,
  (VTBL_ENTRY)&_ZN6S573C43v74Ev,
  (VTBL_ENTRY)&_ZN6S573C43v75Ev,
  (VTBL_ENTRY)&_ZN6S573C43v76Ev,
  (VTBL_ENTRY)&_ZN6S573C43v77Ev,
  (VTBL_ENTRY)&_ZN6S573C43v78Ev,
  (VTBL_ENTRY)&_ZN6S573C43v79Ev,
  (VTBL_ENTRY)&_ZN6S573C43v80Ev,
  (VTBL_ENTRY)&_ZN6S573C43v81Ev,
  (VTBL_ENTRY)&_ZN6S573C43v82Ev,
  (VTBL_ENTRY)&_ZN6S573C43v83Ev,
  (VTBL_ENTRY)&_ZN6S573C43v84Ev,
  (VTBL_ENTRY)&_ZN6S573C43v85Ev,
  (VTBL_ENTRY)&_ZN6S573C43v86Ev,
  (VTBL_ENTRY)&_ZN6S573C43v87Ev,
  (VTBL_ENTRY)&_ZN6S573C43v88Ev,
  (VTBL_ENTRY)&_ZN6S573C43v89Ev,
};
extern VTBL_ENTRY _ZTI6S573C4[];
extern  VTBL_ENTRY _ZTV6S573C4[];
Class_Descriptor cd_S573C4 = {  "S573C4", // class name
  bases_S573C4, 1,
  &(vtc_S573C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(192,132), // object size
  NSPAIRA(_ZTI6S573C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S573C4),90, //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  S573C3  : S573C4 {
  unsigned int s573c3f0:1;
  unsigned int s573c3f1:1;
  unsigned int s573c3f2:1;
  ::S674C42 s573c3f3;
  ::S674C38 s573c3f4;
  ::S674C17 s573c3f5;
  ::S674C13 s573c3f6;
  int s573c3f7[3];
  virtual  ~S573C3(); // _ZN6S573C3D1Ev
  virtual void  v90(); // _ZN6S573C33v90Ev
  virtual void  v91(); // _ZN6S573C33v91Ev
  virtual void  v92(); // _ZN6S573C33v92Ev
  virtual void  v93(); // _ZN6S573C33v93Ev
  virtual void  v94(); // _ZN6S573C33v94Ev
  virtual void  v95(); // _ZN6S573C33v95Ev
  virtual void  v96(); // _ZN6S573C33v96Ev
  virtual void  v97(); // _ZN6S573C33v97Ev
  virtual void  v98(); // _ZN6S573C33v98Ev
  virtual void  v99(); // _ZN6S573C33v99Ev
  virtual void  v100(); // _ZN6S573C34v100Ev
  virtual void  v101(); // _ZN6S573C34v101Ev
  virtual void  v102(); // _ZN6S573C34v102Ev
  virtual void  v103(); // _ZN6S573C34v103Ev
  virtual void  v104(); // _ZN6S573C34v104Ev
  virtual void  v105(); // _ZN6S573C34v105Ev
  virtual void  v106(); // _ZN6S573C34v106Ev
  virtual void  v107(); // _ZN6S573C34v107Ev
  virtual void  v108(); // _ZN6S573C34v108Ev
  virtual void  v109(); // _ZN6S573C34v109Ev
  S573C3(); // tgen
};
//SIG(-1 S573C3) 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 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 Fi FL Fp[4] Fi[2] Fp FC4{ m Fi[2]} Fp[2]} vd v85 v86 v87 v88 v89 v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 Fi[2] Fp Fi[2] FC5{ BC6{ BC7{ BC8{ m Fp Fi[2]}}}} FC5 FC9{ m} FC5 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 Fi:1 Fi:1 Fi:1 FC10{ BC11{ BC8}} FC6 FC12{ BC13{ BC8}} FC14{ BC15{ BC8}} Fi[3]}


 S573C3 ::~S573C3(){ note_dtor("S573C3", this);}
void  S573C3 ::v90(){vfunc_called(this, "_ZN6S573C33v90Ev");}
void  S573C3 ::v91(){vfunc_called(this, "_ZN6S573C33v91Ev");}
void  S573C3 ::v92(){vfunc_called(this, "_ZN6S573C33v92Ev");}
void  S573C3 ::v93(){vfunc_called(this, "_ZN6S573C33v93Ev");}
void  S573C3 ::v94(){vfunc_called(this, "_ZN6S573C33v94Ev");}
void  S573C3 ::v95(){vfunc_called(this, "_ZN6S573C33v95Ev");}
void  S573C3 ::v96(){vfunc_called(this, "_ZN6S573C33v96Ev");}
void  S573C3 ::v97(){vfunc_called(this, "_ZN6S573C33v97Ev");}
void  S573C3 ::v98(){vfunc_called(this, "_ZN6S573C33v98Ev");}
void  S573C3 ::v99(){vfunc_called(this, "_ZN6S573C33v99Ev");}
void  S573C3 ::v100(){vfunc_called(this, "_ZN6S573C34v100Ev");}
void  S573C3 ::v101(){vfunc_called(this, "_ZN6S573C34v101Ev");}
void  S573C3 ::v102(){vfunc_called(this, "_ZN6S573C34v102Ev");}
void  S573C3 ::v103(){vfunc_called(this, "_ZN6S573C34v103Ev");}
void  S573C3 ::v104(){vfunc_called(this, "_ZN6S573C34v104Ev");}
void  S573C3 ::v105(){vfunc_called(this, "_ZN6S573C34v105Ev");}
void  S573C3 ::v106(){vfunc_called(this, "_ZN6S573C34v106Ev");}
void  S573C3 ::v107(){vfunc_called(this, "_ZN6S573C34v107Ev");}
void  S573C3 ::v108(){vfunc_called(this, "_ZN6S573C34v108Ev");}
void  S573C3 ::v109(){vfunc_called(this, "_ZN6S573C34v109Ev");}
S573C3 ::S573C3(){ note_ctor("S573C3", this);} // tgen

static void Test_S573C3()
{
  extern Class_Descriptor cd_S573C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(35,50)];
    init_test(&cd_S573C3, buf);
    S573C3 *dp, &lv = *(dp=new (buf) S573C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(272,196), "sizeof(S573C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S573C3)");
    check_base_class_offset(lv, (S573C5*)(S573C4*), 0, "S573C3");
    check_base_class_offset(lv, (S573C4*), 0, "S573C3");
    set_bf_and_test(lv, s573c3f0, ABISELECT(188,132), 0, 1, 1, "S573C3");
    set_bf_and_test(lv, s573c3f1, ABISELECT(188,132), 1, 1, 1, "S573C3");
    set_bf_and_test(lv, s573c3f2, ABISELECT(188,132), 2, 1, 1, "S573C3");
    check_field_offset(lv, s573c3f3, ABISELECT(192,136), "S573C3.s573c3f3");
    check_field_offset(lv, s573c3f4, ABISELECT(208,148), "S573C3.s573c3f4");
    check_field_offset(lv, s573c3f5, ABISELECT(224,160), "S573C3.s573c3f5");
    check_field_offset(lv, s573c3f6, ABISELECT(240,172), "S573C3.s573c3f6");
    check_field_offset(lv, s573c3f7, ABISELECT(256,184), "S573C3.s573c3f7");
    test_class_info(&lv, &cd_S573C3);
    dp->~S573C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS573C3(Test_S573C3, "S573C3", ABISELECT(272,196));

#else // __cplusplus

extern void _ZN6S573C3C1Ev();
extern void _ZN6S573C3D1Ev();
Name_Map name_map_S573C3[] = {
  NSPAIR(_ZN6S573C3C1Ev),
  NSPAIR(_ZN6S573C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S573C5;
extern VTBL_ENTRY _ZTI6S573C5[];
extern  VTBL_ENTRY _ZTV6S573C5[];
extern Class_Descriptor cd_S573C4;
extern VTBL_ENTRY _ZTI6S573C4[];
extern  VTBL_ENTRY _ZTV6S573C4[];
static Base_Class bases_S573C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S573C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S573C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S573C3[];
extern void _ZN6S573C3D1Ev();
extern void _ZN6S573C3D0Ev();
extern void _ZN6S573C52v4Ev();
extern void _ZN6S573C52v5Ev();
extern void _ZN6S573C52v6Ev();
extern void _ZN6S573C52v7Ev();
extern void _ZN6S573C52v8Ev();
extern void _ZN6S573C52v9Ev();
extern void _ZN6S573C53v10Ev();
extern void _ZN6S573C53v11Ev();
extern void _ZN6S573C53v12Ev();
extern void _ZN6S573C53v13Ev();
extern void _ZN6S573C53v14Ev();
extern void _ZN6S573C53v15Ev();
extern void _ZN6S573C53v16Ev();
extern void _ZN6S573C53v17Ev();
extern void _ZN6S573C53v18Ev();
extern void _ZN6S573C53v19Ev();
extern void _ZN6S573C53v20Ev();
extern void _ZN6S573C53v21Ev();
extern void _ZN6S573C53v22Ev();
extern void _ZN6S573C53v23Ev();
extern void _ZN6S573C53v24Ev();
extern void _ZN6S573C53v25Ev();
extern void _ZN6S573C53v26Ev();
extern void _ZN6S573C53v27Ev();
extern void _ZN6S573C53v28Ev();
extern void _ZN6S573C53v29Ev();
extern void _ZN6S573C53v30Ev();
extern void _ZN6S573C53v31Ev();
extern void _ZN6S573C53v32Ev();
extern void _ZN6S573C53v33Ev();
extern void _ZN6S573C53v34Ev();
extern void _ZN6S573C53v35Ev();
extern void _ZN6S573C53v36Ev();
extern void _ZN6S573C53v37Ev();
extern void _ZN6S573C53v38Ev();
extern void _ZN6S573C53v39Ev();
extern void _ZN6S573C53v40Ev();
extern void _ZN6S573C53v41Ev();
extern void _ZN6S573C53v42Ev();
extern void _ZN6S573C53v43Ev();
extern void _ZN6S573C53v44Ev();
extern void _ZN6S573C53v45Ev();
extern void _ZN6S573C53v46Ev();
extern void _ZN6S573C53v47Ev();
extern void _ZN6S573C53v48Ev();
extern void _ZN6S573C53v49Ev();
extern void _ZN6S573C53v50Ev();
extern void _ZN6S573C53v51Ev();
extern void _ZN6S573C53v52Ev();
extern void _ZN6S573C53v53Ev();
extern void _ZN6S573C53v54Ev();
extern void _ZN6S573C53v55Ev();
extern void _ZN6S573C53v56Ev();
extern void _ZN6S573C53v57Ev();
extern void _ZN6S573C53v58Ev();
extern void _ZN6S573C53v59Ev();
extern void _ZN6S573C53v60Ev();
extern void _ZN6S573C53v61Ev();
extern void _ZN6S573C53v62Ev();
extern void _ZN6S573C53v63Ev();
extern void _ZN6S573C53v64Ev();
extern void _ZN6S573C53v65Ev();
extern void _ZN6S573C53v66Ev();
extern void _ZN6S573C53v67Ev();
extern void _ZN6S573C43v68Ev();
extern void _ZN6S573C43v69Ev();
extern void _ZN6S573C43v70Ev();
extern void _ZN6S573C43v71Ev();
extern void _ZN6S573C43v72Ev();
extern void _ZN6S573C43v73Ev();
extern void _ZN6S573C43v74Ev();
extern void _ZN6S573C43v75Ev();
extern void _ZN6S573C43v76Ev();
extern void _ZN6S573C43v77Ev();
extern void _ZN6S573C43v78Ev();
extern void _ZN6S573C43v79Ev();
extern void _ZN6S573C43v80Ev();
extern void _ZN6S573C43v81Ev();
extern void _ZN6S573C43v82Ev();
extern void _ZN6S573C43v83Ev();
extern void _ZN6S573C43v84Ev();
extern void _ZN6S573C43v85Ev();
extern void _ZN6S573C43v86Ev();
extern void _ZN6S573C43v87Ev();
extern void _ZN6S573C43v88Ev();
extern void _ZN6S573C43v89Ev();
extern void _ZN6S573C33v90Ev();
extern void _ZN6S573C33v91Ev();
extern void _ZN6S573C33v92Ev();
extern void _ZN6S573C33v93Ev();
extern void _ZN6S573C33v94Ev();
extern void _ZN6S573C33v95Ev();
extern void _ZN6S573C33v96Ev();
extern void _ZN6S573C33v97Ev();
extern void _ZN6S573C33v98Ev();
extern void _ZN6S573C33v99Ev();
extern void _ZN6S573C34v100Ev();
extern void _ZN6S573C34v101Ev();
extern void _ZN6S573C34v102Ev();
extern void _ZN6S573C34v103Ev();
extern void _ZN6S573C34v104Ev();
extern void _ZN6S573C34v105Ev();
extern void _ZN6S573C34v106Ev();
extern void _ZN6S573C34v107Ev();
extern void _ZN6S573C34v108Ev();
extern void _ZN6S573C34v109Ev();
static  VTBL_ENTRY vtc_S573C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S573C3[0]),
  (VTBL_ENTRY)&_ZN6S573C3D1Ev,
  (VTBL_ENTRY)&_ZN6S573C3D0Ev,
  (VTBL_ENTRY)&_ZN6S573C52v4Ev,
  (VTBL_ENTRY)&_ZN6S573C52v5Ev,
  (VTBL_ENTRY)&_ZN6S573C52v6Ev,
  (VTBL_ENTRY)&_ZN6S573C52v7Ev,
  (VTBL_ENTRY)&_ZN6S573C52v8Ev,
  (VTBL_ENTRY)&_ZN6S573C52v9Ev,
  (VTBL_ENTRY)&_ZN6S573C53v10Ev,
  (VTBL_ENTRY)&_ZN6S573C53v11Ev,
  (VTBL_ENTRY)&_ZN6S573C53v12Ev,
  (VTBL_ENTRY)&_ZN6S573C53v13Ev,
  (VTBL_ENTRY)&_ZN6S573C53v14Ev,
  (VTBL_ENTRY)&_ZN6S573C53v15Ev,
  (VTBL_ENTRY)&_ZN6S573C53v16Ev,
  (VTBL_ENTRY)&_ZN6S573C53v17Ev,
  (VTBL_ENTRY)&_ZN6S573C53v18Ev,
  (VTBL_ENTRY)&_ZN6S573C53v19Ev,
  (VTBL_ENTRY)&_ZN6S573C53v20Ev,
  (VTBL_ENTRY)&_ZN6S573C53v21Ev,
  (VTBL_ENTRY)&_ZN6S573C53v22Ev,
  (VTBL_ENTRY)&_ZN6S573C53v23Ev,
  (VTBL_ENTRY)&_ZN6S573C53v24Ev,
  (VTBL_ENTRY)&_ZN6S573C53v25Ev,
  (VTBL_ENTRY)&_ZN6S573C53v26Ev,
  (VTBL_ENTRY)&_ZN6S573C53v27Ev,
  (VTBL_ENTRY)&_ZN6S573C53v28Ev,
  (VTBL_ENTRY)&_ZN6S573C53v29Ev,
  (VTBL_ENTRY)&_ZN6S573C53v30Ev,
  (VTBL_ENTRY)&_ZN6S573C53v31Ev,
  (VTBL_ENTRY)&_ZN6S573C53v32Ev,
  (VTBL_ENTRY)&_ZN6S573C53v33Ev,
  (VTBL_ENTRY)&_ZN6S573C53v34Ev,
  (VTBL_ENTRY)&_ZN6S573C53v35Ev,
  (VTBL_ENTRY)&_ZN6S573C53v36Ev,
  (VTBL_ENTRY)&_ZN6S573C53v37Ev,
  (VTBL_ENTRY)&_ZN6S573C53v38Ev,
  (VTBL_ENTRY)&_ZN6S573C53v39Ev,
  (VTBL_ENTRY)&_ZN6S573C53v40Ev,
  (VTBL_ENTRY)&_ZN6S573C53v41Ev,
  (VTBL_ENTRY)&_ZN6S573C53v42Ev,
  (VTBL_ENTRY)&_ZN6S573C53v43Ev,
  (VTBL_ENTRY)&_ZN6S573C53v44Ev,
  (VTBL_ENTRY)&_ZN6S573C53v45Ev,
  (VTBL_ENTRY)&_ZN6S573C53v46Ev,
  (VTBL_ENTRY)&_ZN6S573C53v47Ev,
  (VTBL_ENTRY)&_ZN6S573C53v48Ev,
  (VTBL_ENTRY)&_ZN6S573C53v49Ev,
  (VTBL_ENTRY)&_ZN6S573C53v50Ev,
  (VTBL_ENTRY)&_ZN6S573C53v51Ev,
  (VTBL_ENTRY)&_ZN6S573C53v52Ev,
  (VTBL_ENTRY)&_ZN6S573C53v53Ev,
  (VTBL_ENTRY)&_ZN6S573C53v54Ev,
  (VTBL_ENTRY)&_ZN6S573C53v55Ev,
  (VTBL_ENTRY)&_ZN6S573C53v56Ev,
  (VTBL_ENTRY)&_ZN6S573C53v57Ev,
  (VTBL_ENTRY)&_ZN6S573C53v58Ev,
  (VTBL_ENTRY)&_ZN6S573C53v59Ev,
  (VTBL_ENTRY)&_ZN6S573C53v60Ev,
  (VTBL_ENTRY)&_ZN6S573C53v61Ev,
  (VTBL_ENTRY)&_ZN6S573C53v62Ev,
  (VTBL_ENTRY)&_ZN6S573C53v63Ev,
  (VTBL_ENTRY)&_ZN6S573C53v64Ev,
  (VTBL_ENTRY)&_ZN6S573C53v65Ev,
  (VTBL_ENTRY)&_ZN6S573C53v66Ev,
  (VTBL_ENTRY)&_ZN6S573C53v67Ev,
  (VTBL_ENTRY)&_ZN6S573C43v68Ev,
  (VTBL_ENTRY)&_ZN6S573C43v69Ev,
  (VTBL_ENTRY)&_ZN6S573C43v70Ev,
  (VTBL_ENTRY)&_ZN6S573C43v71Ev,
  (VTBL_ENTRY)&_ZN6S573C43v72Ev,
  (VTBL_ENTRY)&_ZN6S573C43v73Ev,
  (VTBL_ENTRY)&_ZN6S573C43v74Ev,
  (VTBL_ENTRY)&_ZN6S573C43v75Ev,
  (VTBL_ENTRY)&_ZN6S573C43v76Ev,
  (VTBL_ENTRY)&_ZN6S573C43v77Ev,
  (VTBL_ENTRY)&_ZN6S573C43v78Ev,
  (VTBL_ENTRY)&_ZN6S573C43v79Ev,
  (VTBL_ENTRY)&_ZN6S573C43v80Ev,
  (VTBL_ENTRY)&_ZN6S573C43v81Ev,
  (VTBL_ENTRY)&_ZN6S573C43v82Ev,
  (VTBL_ENTRY)&_ZN6S573C43v83Ev,
  (VTBL_ENTRY)&_ZN6S573C43v84Ev,
  (VTBL_ENTRY)&_ZN6S573C43v85Ev,
  (VTBL_ENTRY)&_ZN6S573C43v86Ev,
  (VTBL_ENTRY)&_ZN6S573C43v87Ev,
  (VTBL_ENTRY)&_ZN6S573C43v88Ev,
  (VTBL_ENTRY)&_ZN6S573C43v89Ev,
  (VTBL_ENTRY)&_ZN6S573C33v90Ev,
  (VTBL_ENTRY)&_ZN6S573C33v91Ev,
  (VTBL_ENTRY)&_ZN6S573C33v92Ev,
  (VTBL_ENTRY)&_ZN6S573C33v93Ev,
  (VTBL_ENTRY)&_ZN6S573C33v94Ev,
  (VTBL_ENTRY)&_ZN6S573C33v95Ev,
  (VTBL_ENTRY)&_ZN6S573C33v96Ev,
  (VTBL_ENTRY)&_ZN6S573C33v97Ev,
  (VTBL_ENTRY)&_ZN6S573C33v98Ev,
  (VTBL_ENTRY)&_ZN6S573C33v99Ev,
  (VTBL_ENTRY)&_ZN6S573C34v100Ev,
  (VTBL_ENTRY)&_ZN6S573C34v101Ev,
  (VTBL_ENTRY)&_ZN6S573C34v102Ev,
  (VTBL_ENTRY)&_ZN6S573C34v103Ev,
  (VTBL_ENTRY)&_ZN6S573C34v104Ev,
  (VTBL_ENTRY)&_ZN6S573C34v105Ev,
  (VTBL_ENTRY)&_ZN6S573C34v106Ev,
  (VTBL_ENTRY)&_ZN6S573C34v107Ev,
  (VTBL_ENTRY)&_ZN6S573C34v108Ev,
  (VTBL_ENTRY)&_ZN6S573C34v109Ev,
};
extern VTBL_ENTRY _ZTI6S573C3[];
extern  VTBL_ENTRY _ZTV6S573C3[];
Class_Descriptor cd_S573C3 = {  "S573C3", // class name
  bases_S573C3, 2,
  &(vtc_S573C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(272,196), // object size
  NSPAIRA(_ZTI6S573C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S573C3),110, //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  S573C2_nt  : S573C3 {
  ::S674C6_nt s573c2f0;
  unsigned int s573c2f1:1;
  ::S674C8_nt s573c2f2;
  virtual  ~S573C2_nt(); // _ZN9S573C2_ntD1Ev
  virtual void  v110(); // _ZN9S573C2_nt4v110Ev
  virtual void  v111(); // _ZN9S573C2_nt4v111Ev
  virtual void  v112(); // _ZN9S573C2_nt4v112Ev
  virtual void  v113(); // _ZN9S573C2_nt4v113Ev
  S573C2_nt(); // tgen
};
//SIG(-1 S573C2_nt) C1{ BC2{ BC3{ BC4{ 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 FC5{ m Fi[2]} Fp[2]} vd v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 Fi[2] Fp Fi[2] FC6{ BC7{ BC8{ BC9{ m Fp Fi[2]}}}} FC6 FC10{ m} FC6 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 v110 Fi:1 Fi:1 Fi:1 FC11{ BC12{ BC9}} FC7 FC13{ BC14{ BC9}} FC15{ BC16{ BC9}} Fi[3]} vd v1 v2 v3 v4 FC5 Fi:1 FC17{ BC18{ BC9}}}


 S573C2_nt ::~S573C2_nt(){ note_dtor("S573C2_nt", this);}
void  S573C2_nt ::v110(){vfunc_called(this, "_ZN9S573C2_nt4v110Ev");}
void  S573C2_nt ::v111(){vfunc_called(this, "_ZN9S573C2_nt4v111Ev");}
void  S573C2_nt ::v112(){vfunc_called(this, "_ZN9S573C2_nt4v112Ev");}
void  S573C2_nt ::v113(){vfunc_called(this, "_ZN9S573C2_nt4v113Ev");}
S573C2_nt ::S573C2_nt(){ note_ctor("S573C2_nt", this);} // tgen

//skip512 S573C2_nt

#else // __cplusplus

extern void _ZN9S573C2_ntC1Ev();
extern void _ZN9S573C2_ntD1Ev();
Name_Map name_map_S573C2_nt[] = {
  NSPAIR(_ZN9S573C2_ntC1Ev),
  NSPAIR(_ZN9S573C2_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S573C5;
extern VTBL_ENTRY _ZTI6S573C5[];
extern  VTBL_ENTRY _ZTV6S573C5[];
extern Class_Descriptor cd_S573C4;
extern VTBL_ENTRY _ZTI6S573C4[];
extern  VTBL_ENTRY _ZTV6S573C4[];
extern Class_Descriptor cd_S573C3;
extern VTBL_ENTRY _ZTI6S573C3[];
extern  VTBL_ENTRY _ZTV6S573C3[];
static Base_Class bases_S573C2_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S573C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S573C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S573C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI9S573C2_nt[];
extern void _ZN9S573C2_ntD1Ev();
extern void _ZN9S573C2_ntD0Ev();
extern void _ZN6S573C52v4Ev();
extern void _ZN6S573C52v5Ev();
extern void _ZN6S573C52v6Ev();
extern void _ZN6S573C52v7Ev();
extern void _ZN6S573C52v8Ev();
extern void _ZN6S573C52v9Ev();
extern void _ZN6S573C53v10Ev();
extern void _ZN6S573C53v11Ev();
extern void _ZN6S573C53v12Ev();
extern void _ZN6S573C53v13Ev();
extern void _ZN6S573C53v14Ev();
extern void _ZN6S573C53v15Ev();
extern void _ZN6S573C53v16Ev();
extern void _ZN6S573C53v17Ev();
extern void _ZN6S573C53v18Ev();
extern void _ZN6S573C53v19Ev();
extern void _ZN6S573C53v20Ev();
extern void _ZN6S573C53v21Ev();
extern void _ZN6S573C53v22Ev();
extern void _ZN6S573C53v23Ev();
extern void _ZN6S573C53v24Ev();
extern void _ZN6S573C53v25Ev();
extern void _ZN6S573C53v26Ev();
extern void _ZN6S573C53v27Ev();
extern void _ZN6S573C53v28Ev();
extern void _ZN6S573C53v29Ev();
extern void _ZN6S573C53v30Ev();
extern void _ZN6S573C53v31Ev();
extern void _ZN6S573C53v32Ev();
extern void _ZN6S573C53v33Ev();
extern void _ZN6S573C53v34Ev();
extern void _ZN6S573C53v35Ev();
extern void _ZN6S573C53v36Ev();
extern void _ZN6S573C53v37Ev();
extern void _ZN6S573C53v38Ev();
extern void _ZN6S573C53v39Ev();
extern void _ZN6S573C53v40Ev();
extern void _ZN6S573C53v41Ev();
extern void _ZN6S573C53v42Ev();
extern void _ZN6S573C53v43Ev();
extern void _ZN6S573C53v44Ev();
extern void _ZN6S573C53v45Ev();
extern void _ZN6S573C53v46Ev();
extern void _ZN6S573C53v47Ev();
extern void _ZN6S573C53v48Ev();
extern void _ZN6S573C53v49Ev();
extern void _ZN6S573C53v50Ev();
extern void _ZN6S573C53v51Ev();
extern void _ZN6S573C53v52Ev();
extern void _ZN6S573C53v53Ev();
extern void _ZN6S573C53v54Ev();
extern void _ZN6S573C53v55Ev();
extern void _ZN6S573C53v56Ev();
extern void _ZN6S573C53v57Ev();
extern void _ZN6S573C53v58Ev();
extern void _ZN6S573C53v59Ev();
extern void _ZN6S573C53v60Ev();
extern void _ZN6S573C53v61Ev();
extern void _ZN6S573C53v62Ev();
extern void _ZN6S573C53v63Ev();
extern void _ZN6S573C53v64Ev();
extern void _ZN6S573C53v65Ev();
extern void _ZN6S573C53v66Ev();
extern void _ZN6S573C53v67Ev();
extern void _ZN6S573C43v68Ev();
extern void _ZN6S573C43v69Ev();
extern void _ZN6S573C43v70Ev();
extern void _ZN6S573C43v71Ev();
extern void _ZN6S573C43v72Ev();
extern void _ZN6S573C43v73Ev();
extern void _ZN6S573C43v74Ev();
extern void _ZN6S573C43v75Ev();
extern void _ZN6S573C43v76Ev();
extern void _ZN6S573C43v77Ev();
extern void _ZN6S573C43v78Ev();
extern void _ZN6S573C43v79Ev();
extern void _ZN6S573C43v80Ev();
extern void _ZN6S573C43v81Ev();
extern void _ZN6S573C43v82Ev();
extern void _ZN6S573C43v83Ev();
extern void _ZN6S573C43v84Ev();
extern void _ZN6S573C43v85Ev();
extern void _ZN6S573C43v86Ev();
extern void _ZN6S573C43v87Ev();
extern void _ZN6S573C43v88Ev();
extern void _ZN6S573C43v89Ev();
extern void _ZN6S573C33v90Ev();
extern void _ZN6S573C33v91Ev();
extern void _ZN6S573C33v92Ev();
extern void _ZN6S573C33v93Ev();
extern void _ZN6S573C33v94Ev();
extern void _ZN6S573C33v95Ev();
extern void _ZN6S573C33v96Ev();
extern void _ZN6S573C33v97Ev();
extern void _ZN6S573C33v98Ev();
extern void _ZN6S573C33v99Ev();
extern void _ZN6S573C34v100Ev();
extern void _ZN6S573C34v101Ev();
extern void _ZN6S573C34v102Ev();
extern void _ZN6S573C34v103Ev();
extern void _ZN6S573C34v104Ev();
extern void _ZN6S573C34v105Ev();
extern void _ZN6S573C34v106Ev();
extern void _ZN6S573C34v107Ev();
extern void _ZN6S573C34v108Ev();
extern void _ZN6S573C34v109Ev();
extern void _ZN9S573C2_nt4v110Ev();
extern void _ZN9S573C2_nt4v111Ev();
extern void _ZN9S573C2_nt4v112Ev();
extern void _ZN9S573C2_nt4v113Ev();
static  VTBL_ENTRY vtc_S573C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S573C2_nt[0]),
  (VTBL_ENTRY)&_ZN9S573C2_ntD1Ev,
  (VTBL_ENTRY)&_ZN9S573C2_ntD0Ev,
  (VTBL_ENTRY)&_ZN6S573C52v4Ev,
  (VTBL_ENTRY)&_ZN6S573C52v5Ev,
  (VTBL_ENTRY)&_ZN6S573C52v6Ev,
  (VTBL_ENTRY)&_ZN6S573C52v7Ev,
  (VTBL_ENTRY)&_ZN6S573C52v8Ev,
  (VTBL_ENTRY)&_ZN6S573C52v9Ev,
  (VTBL_ENTRY)&_ZN6S573C53v10Ev,
  (VTBL_ENTRY)&_ZN6S573C53v11Ev,
  (VTBL_ENTRY)&_ZN6S573C53v12Ev,
  (VTBL_ENTRY)&_ZN6S573C53v13Ev,
  (VTBL_ENTRY)&_ZN6S573C53v14Ev,
  (VTBL_ENTRY)&_ZN6S573C53v15Ev,
  (VTBL_ENTRY)&_ZN6S573C53v16Ev,
  (VTBL_ENTRY)&_ZN6S573C53v17Ev,
  (VTBL_ENTRY)&_ZN6S573C53v18Ev,
  (VTBL_ENTRY)&_ZN6S573C53v19Ev,
  (VTBL_ENTRY)&_ZN6S573C53v20Ev,
  (VTBL_ENTRY)&_ZN6S573C53v21Ev,
  (VTBL_ENTRY)&_ZN6S573C53v22Ev,
  (VTBL_ENTRY)&_ZN6S573C53v23Ev,
  (VTBL_ENTRY)&_ZN6S573C53v24Ev,
  (VTBL_ENTRY)&_ZN6S573C53v25Ev,
  (VTBL_ENTRY)&_ZN6S573C53v26Ev,
  (VTBL_ENTRY)&_ZN6S573C53v27Ev,
  (VTBL_ENTRY)&_ZN6S573C53v28Ev,
  (VTBL_ENTRY)&_ZN6S573C53v29Ev,
  (VTBL_ENTRY)&_ZN6S573C53v30Ev,
  (VTBL_ENTRY)&_ZN6S573C53v31Ev,
  (VTBL_ENTRY)&_ZN6S573C53v32Ev,
  (VTBL_ENTRY)&_ZN6S573C53v33Ev,
  (VTBL_ENTRY)&_ZN6S573C53v34Ev,
  (VTBL_ENTRY)&_ZN6S573C53v35Ev,
  (VTBL_ENTRY)&_ZN6S573C53v36Ev,
  (VTBL_ENTRY)&_ZN6S573C53v37Ev,
  (VTBL_ENTRY)&_ZN6S573C53v38Ev,
  (VTBL_ENTRY)&_ZN6S573C53v39Ev,
  (VTBL_ENTRY)&_ZN6S573C53v40Ev,
  (VTBL_ENTRY)&_ZN6S573C53v41Ev,
  (VTBL_ENTRY)&_ZN6S573C53v42Ev,
  (VTBL_ENTRY)&_ZN6S573C53v43Ev,
  (VTBL_ENTRY)&_ZN6S573C53v44Ev,
  (VTBL_ENTRY)&_ZN6S573C53v45Ev,
  (VTBL_ENTRY)&_ZN6S573C53v46Ev,
  (VTBL_ENTRY)&_ZN6S573C53v47Ev,
  (VTBL_ENTRY)&_ZN6S573C53v48Ev,
  (VTBL_ENTRY)&_ZN6S573C53v49Ev,
  (VTBL_ENTRY)&_ZN6S573C53v50Ev,
  (VTBL_ENTRY)&_ZN6S573C53v51Ev,
  (VTBL_ENTRY)&_ZN6S573C53v52Ev,
  (VTBL_ENTRY)&_ZN6S573C53v53Ev,
  (VTBL_ENTRY)&_ZN6S573C53v54Ev,
  (VTBL_ENTRY)&_ZN6S573C53v55Ev,
  (VTBL_ENTRY)&_ZN6S573C53v56Ev,
  (VTBL_ENTRY)&_ZN6S573C53v57Ev,
  (VTBL_ENTRY)&_ZN6S573C53v58Ev,
  (VTBL_ENTRY)&_ZN6S573C53v59Ev,
  (VTBL_ENTRY)&_ZN6S573C53v60Ev,
  (VTBL_ENTRY)&_ZN6S573C53v61Ev,
  (VTBL_ENTRY)&_ZN6S573C53v62Ev,
  (VTBL_ENTRY)&_ZN6S573C53v63Ev,
  (VTBL_ENTRY)&_ZN6S573C53v64Ev,
  (VTBL_ENTRY)&_ZN6S573C53v65Ev,
  (VTBL_ENTRY)&_ZN6S573C53v66Ev,
  (VTBL_ENTRY)&_ZN6S573C53v67Ev,
  (VTBL_ENTRY)&_ZN6S573C43v68Ev,
  (VTBL_ENTRY)&_ZN6S573C43v69Ev,
  (VTBL_ENTRY)&_ZN6S573C43v70Ev,
  (VTBL_ENTRY)&_ZN6S573C43v71Ev,
  (VTBL_ENTRY)&_ZN6S573C43v72Ev,
  (VTBL_ENTRY)&_ZN6S573C43v73Ev,
  (VTBL_ENTRY)&_ZN6S573C43v74Ev,
  (VTBL_ENTRY)&_ZN6S573C43v75Ev,
  (VTBL_ENTRY)&_ZN6S573C43v76Ev,
  (VTBL_ENTRY)&_ZN6S573C43v77Ev,
  (VTBL_ENTRY)&_ZN6S573C43v78Ev,
  (VTBL_ENTRY)&_ZN6S573C43v79Ev,
  (VTBL_ENTRY)&_ZN6S573C43v80Ev,
  (VTBL_ENTRY)&_ZN6S573C43v81Ev,
  (VTBL_ENTRY)&_ZN6S573C43v82Ev,
  (VTBL_ENTRY)&_ZN6S573C43v83Ev,
  (VTBL_ENTRY)&_ZN6S573C43v84Ev,
  (VTBL_ENTRY)&_ZN6S573C43v85Ev,
  (VTBL_ENTRY)&_ZN6S573C43v86Ev,
  (VTBL_ENTRY)&_ZN6S573C43v87Ev,
  (VTBL_ENTRY)&_ZN6S573C43v88Ev,
  (VTBL_ENTRY)&_ZN6S573C43v89Ev,
  (VTBL_ENTRY)&_ZN6S573C33v90Ev,
  (VTBL_ENTRY)&_ZN6S573C33v91Ev,
  (VTBL_ENTRY)&_ZN6S573C33v92Ev,
  (VTBL_ENTRY)&_ZN6S573C33v93Ev,
  (VTBL_ENTRY)&_ZN6S573C33v94Ev,
  (VTBL_ENTRY)&_ZN6S573C33v95Ev,
  (VTBL_ENTRY)&_ZN6S573C33v96Ev,
  (VTBL_ENTRY)&_ZN6S573C33v97Ev,
  (VTBL_ENTRY)&_ZN6S573C33v98Ev,
  (VTBL_ENTRY)&_ZN6S573C33v99Ev,
  (VTBL_ENTRY)&_ZN6S573C34v100Ev,
  (VTBL_ENTRY)&_ZN6S573C34v101Ev,
  (VTBL_ENTRY)&_ZN6S573C34v102Ev,
  (VTBL_ENTRY)&_ZN6S573C34v103Ev,
  (VTBL_ENTRY)&_ZN6S573C34v104Ev,
  (VTBL_ENTRY)&_ZN6S573C34v105Ev,
  (VTBL_ENTRY)&_ZN6S573C34v106Ev,
  (VTBL_ENTRY)&_ZN6S573C34v107Ev,
  (VTBL_ENTRY)&_ZN6S573C34v108Ev,
  (VTBL_ENTRY)&_ZN6S573C34v109Ev,
  (VTBL_ENTRY)&_ZN9S573C2_nt4v110Ev,
  (VTBL_ENTRY)&_ZN9S573C2_nt4v111Ev,
  (VTBL_ENTRY)&_ZN9S573C2_nt4v112Ev,
  (VTBL_ENTRY)&_ZN9S573C2_nt4v113Ev,
};
extern VTBL_ENTRY _ZTI9S573C2_nt[];
VTBL_ENTRY *P__ZTI9S573C2_nt = _ZTI9S573C2_nt; 
extern  VTBL_ENTRY _ZTV9S573C2_nt[];
Class_Descriptor cd_S573C2_nt = {  "S573C2_nt", // class name
  bases_S573C2_nt, 3,
  &(vtc_S573C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(296,220), // object size
  NSPAIRA(_ZTI9S573C2_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV9S573C2_nt),114, //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  S573C1  : S573C2_nt {
  ::S674C37_nt s573c1f0;
  int s573c1f1;
  unsigned int s573c1f2:1;
  void *s573c1f3;
  unsigned int s573c1f4:1;
  int s573c1f5;
  virtual  ~S573C1(); // _ZN6S573C1D1Ev
  virtual void  v1(); // _ZN6S573C12v1Ev
  virtual void  v2(); // _ZN6S573C12v2Ev
  virtual void  v3(); // _ZN6S573C12v3Ev
  S573C1(); // tgen
};
//SIG(1 S573C1) C1{ BC2{ BC3{ BC4{ BC5{ vd 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 Fi FL Fp[4] Fi[2] Fp FC6{ m Fi[2]} Fp[2]} vd v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 Fi[2] Fp Fi[2] FC7{ BC8{ BC9{ BC10{ m Fp Fi[2]}}}} FC7 FC11{ m} FC7 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 Fi:1 Fi:1 Fi:1 FC12{ BC13{ BC10}} FC8 FC14{ BC15{ BC10}} FC16{ BC17{ BC10}} Fi[3]} vd v110 v111 v112 v113 FC6 Fi:1 FC18{ BC19{ BC10}}} vd v1 v2 v3 FC7 Fi Fi:1 Fp Fi:1 Fi}


 S573C1 ::~S573C1(){ note_dtor("S573C1", this);}
void  S573C1 ::v1(){vfunc_called(this, "_ZN6S573C12v1Ev");}
void  S573C1 ::v2(){vfunc_called(this, "_ZN6S573C12v2Ev");}
void  S573C1 ::v3(){vfunc_called(this, "_ZN6S573C12v3Ev");}
S573C1 ::S573C1(){ note_ctor("S573C1", this);} // tgen

static void Test_S573C1()
{
  extern Class_Descriptor cd_S573C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(43,64)];
    init_test(&cd_S573C1, buf);
    S573C1 *dp, &lv = *(dp=new (buf) S573C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(336,252), "sizeof(S573C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S573C1)");
    check_base_class_offset(lv, (S573C5*)(S573C4*)(S573C3*)(S573C2_nt*), 0, "S573C1");
    check_base_class_offset(lv, (S573C4*)(S573C3*)(S573C2_nt*), 0, "S573C1");
    check_base_class_offset(lv, (S573C3*)(S573C2_nt*), 0, "S573C1");
    check_base_class_offset(lv, (S573C2_nt*), 0, "S573C1");
    check_field_offset(lv, s573c1f0, ABISELECT(296,220), "S573C1.s573c1f0");
    check_field_offset(lv, s573c1f1, ABISELECT(312,232), "S573C1.s573c1f1");
    set_bf_and_test(lv, s573c1f2, ABISELECT(316,236), 0, 1, 1, "S573C1");
    check_field_offset(lv, s573c1f3, ABISELECT(320,240), "S573C1.s573c1f3");
    set_bf_and_test(lv, s573c1f4, ABISELECT(328,244), 0, 1, 1, "S573C1");
    check_field_offset(lv, s573c1f5, ABISELECT(332,248), "S573C1.s573c1f5");
    test_class_info(&lv, &cd_S573C1);
    dp->~S573C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS573C1(Test_S573C1, "S573C1", ABISELECT(336,252));

#else // __cplusplus

extern void _ZN6S573C1C1Ev();
extern void _ZN6S573C1D1Ev();
Name_Map name_map_S573C1[] = {
  NSPAIR(_ZN6S573C1C1Ev),
  NSPAIR(_ZN6S573C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S573C5;
extern VTBL_ENTRY _ZTI6S573C5[];
extern  VTBL_ENTRY _ZTV6S573C5[];
extern Class_Descriptor cd_S573C4;
extern VTBL_ENTRY _ZTI6S573C4[];
extern  VTBL_ENTRY _ZTV6S573C4[];
extern Class_Descriptor cd_S573C3;
extern VTBL_ENTRY _ZTI6S573C3[];
extern  VTBL_ENTRY _ZTV6S573C3[];
extern Class_Descriptor cd_S573C2_nt;
extern VTBL_ENTRY _ZTI9S573C2_nt[];
extern  VTBL_ENTRY _ZTV9S573C2_nt[];
static Base_Class bases_S573C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S573C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S573C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S573C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S573C2_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 _ZTI6S573C1[];
extern void _ZN6S573C1D1Ev();
extern void _ZN6S573C1D0Ev();
extern void _ZN6S573C52v4Ev();
extern void _ZN6S573C52v5Ev();
extern void _ZN6S573C52v6Ev();
extern void _ZN6S573C52v7Ev();
extern void _ZN6S573C52v8Ev();
extern void _ZN6S573C52v9Ev();
extern void _ZN6S573C53v10Ev();
extern void _ZN6S573C53v11Ev();
extern void _ZN6S573C53v12Ev();
extern void _ZN6S573C53v13Ev();
extern void _ZN6S573C53v14Ev();
extern void _ZN6S573C53v15Ev();
extern void _ZN6S573C53v16Ev();
extern void _ZN6S573C53v17Ev();
extern void _ZN6S573C53v18Ev();
extern void _ZN6S573C53v19Ev();
extern void _ZN6S573C53v20Ev();
extern void _ZN6S573C53v21Ev();
extern void _ZN6S573C53v22Ev();
extern void _ZN6S573C53v23Ev();
extern void _ZN6S573C53v24Ev();
extern void _ZN6S573C53v25Ev();
extern void _ZN6S573C53v26Ev();
extern void _ZN6S573C53v27Ev();
extern void _ZN6S573C53v28Ev();
extern void _ZN6S573C53v29Ev();
extern void _ZN6S573C53v30Ev();
extern void _ZN6S573C53v31Ev();
extern void _ZN6S573C53v32Ev();
extern void _ZN6S573C53v33Ev();
extern void _ZN6S573C53v34Ev();
extern void _ZN6S573C53v35Ev();
extern void _ZN6S573C53v36Ev();
extern void _ZN6S573C53v37Ev();
extern void _ZN6S573C53v38Ev();
extern void _ZN6S573C53v39Ev();
extern void _ZN6S573C53v40Ev();
extern void _ZN6S573C53v41Ev();
extern void _ZN6S573C53v42Ev();
extern void _ZN6S573C53v43Ev();
extern void _ZN6S573C53v44Ev();
extern void _ZN6S573C53v45Ev();
extern void _ZN6S573C53v46Ev();
extern void _ZN6S573C53v47Ev();
extern void _ZN6S573C53v48Ev();
extern void _ZN6S573C53v49Ev();
extern void _ZN6S573C53v50Ev();
extern void _ZN6S573C53v51Ev();
extern void _ZN6S573C53v52Ev();
extern void _ZN6S573C53v53Ev();
extern void _ZN6S573C53v54Ev();
extern void _ZN6S573C53v55Ev();
extern void _ZN6S573C53v56Ev();
extern void _ZN6S573C53v57Ev();
extern void _ZN6S573C53v58Ev();
extern void _ZN6S573C53v59Ev();
extern void _ZN6S573C53v60Ev();
extern void _ZN6S573C53v61Ev();
extern void _ZN6S573C53v62Ev();
extern void _ZN6S573C53v63Ev();
extern void _ZN6S573C53v64Ev();
extern void _ZN6S573C53v65Ev();
extern void _ZN6S573C53v66Ev();
extern void _ZN6S573C53v67Ev();
extern void _ZN6S573C43v68Ev();
extern void _ZN6S573C43v69Ev();
extern void _ZN6S573C43v70Ev();
extern void _ZN6S573C43v71Ev();
extern void _ZN6S573C43v72Ev();
extern void _ZN6S573C43v73Ev();
extern void _ZN6S573C43v74Ev();
extern void _ZN6S573C43v75Ev();
extern void _ZN6S573C43v76Ev();
extern void _ZN6S573C43v77Ev();
extern void _ZN6S573C43v78Ev();
extern void _ZN6S573C43v79Ev();
extern void _ZN6S573C43v80Ev();
extern void _ZN6S573C43v81Ev();
extern void _ZN6S573C43v82Ev();
extern void _ZN6S573C43v83Ev();
extern void _ZN6S573C43v84Ev();
extern void _ZN6S573C43v85Ev();
extern void _ZN6S573C43v86Ev();
extern void _ZN6S573C43v87Ev();
extern void _ZN6S573C43v88Ev();
extern void _ZN6S573C43v89Ev();
extern void _ZN6S573C33v90Ev();
extern void _ZN6S573C33v91Ev();
extern void _ZN6S573C33v92Ev();
extern void _ZN6S573C33v93Ev();
extern void _ZN6S573C33v94Ev();
extern void _ZN6S573C33v95Ev();
extern void _ZN6S573C33v96Ev();
extern void _ZN6S573C33v97Ev();
extern void _ZN6S573C33v98Ev();
extern void _ZN6S573C33v99Ev();
extern void _ZN6S573C34v100Ev();
extern void _ZN6S573C34v101Ev();
extern void _ZN6S573C34v102Ev();
extern void _ZN6S573C34v103Ev();
extern void _ZN6S573C34v104Ev();
extern void _ZN6S573C34v105Ev();
extern void _ZN6S573C34v106Ev();
extern void _ZN6S573C34v107Ev();
extern void _ZN6S573C34v108Ev();
extern void _ZN6S573C34v109Ev();
extern void _ZN9S573C2_nt4v110Ev();
extern void _ZN9S573C2_nt4v111Ev();
extern void _ZN9S573C2_nt4v112Ev();
extern void _ZN9S573C2_nt4v113Ev();
extern void _ZN6S573C12v1Ev();
extern void _ZN6S573C12v2Ev();
extern void _ZN6S573C12v3Ev();
static  VTBL_ENTRY vtc_S573C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S573C1[0]),
  (VTBL_ENTRY)&_ZN6S573C1D1Ev,
  (VTBL_ENTRY)&_ZN6S573C1D0Ev,
  (VTBL_ENTRY)&_ZN6S573C52v4Ev,
  (VTBL_ENTRY)&_ZN6S573C52v5Ev,
  (VTBL_ENTRY)&_ZN6S573C52v6Ev,
  (VTBL_ENTRY)&_ZN6S573C52v7Ev,
  (VTBL_ENTRY)&_ZN6S573C52v8Ev,
  (VTBL_ENTRY)&_ZN6S573C52v9Ev,
  (VTBL_ENTRY)&_ZN6S573C53v10Ev,
  (VTBL_ENTRY)&_ZN6S573C53v11Ev,
  (VTBL_ENTRY)&_ZN6S573C53v12Ev,
  (VTBL_ENTRY)&_ZN6S573C53v13Ev,
  (VTBL_ENTRY)&_ZN6S573C53v14Ev,
  (VTBL_ENTRY)&_ZN6S573C53v15Ev,
  (VTBL_ENTRY)&_ZN6S573C53v16Ev,
  (VTBL_ENTRY)&_ZN6S573C53v17Ev,
  (VTBL_ENTRY)&_ZN6S573C53v18Ev,
  (VTBL_ENTRY)&_ZN6S573C53v19Ev,
  (VTBL_ENTRY)&_ZN6S573C53v20Ev,
  (VTBL_ENTRY)&_ZN6S573C53v21Ev,
  (VTBL_ENTRY)&_ZN6S573C53v22Ev,
  (VTBL_ENTRY)&_ZN6S573C53v23Ev,
  (VTBL_ENTRY)&_ZN6S573C53v24Ev,
  (VTBL_ENTRY)&_ZN6S573C53v25Ev,
  (VTBL_ENTRY)&_ZN6S573C53v26Ev,
  (VTBL_ENTRY)&_ZN6S573C53v27Ev,
  (VTBL_ENTRY)&_ZN6S573C53v28Ev,
  (VTBL_ENTRY)&_ZN6S573C53v29Ev,
  (VTBL_ENTRY)&_ZN6S573C53v30Ev,
  (VTBL_ENTRY)&_ZN6S573C53v31Ev,
  (VTBL_ENTRY)&_ZN6S573C53v32Ev,
  (VTBL_ENTRY)&_ZN6S573C53v33Ev,
  (VTBL_ENTRY)&_ZN6S573C53v34Ev,
  (VTBL_ENTRY)&_ZN6S573C53v35Ev,
  (VTBL_ENTRY)&_ZN6S573C53v36Ev,
  (VTBL_ENTRY)&_ZN6S573C53v37Ev,
  (VTBL_ENTRY)&_ZN6S573C53v38Ev,
  (VTBL_ENTRY)&_ZN6S573C53v39Ev,
  (VTBL_ENTRY)&_ZN6S573C53v40Ev,
  (VTBL_ENTRY)&_ZN6S573C53v41Ev,
  (VTBL_ENTRY)&_ZN6S573C53v42Ev,
  (VTBL_ENTRY)&_ZN6S573C53v43Ev,
  (VTBL_ENTRY)&_ZN6S573C53v44Ev,
  (VTBL_ENTRY)&_ZN6S573C53v45Ev,
  (VTBL_ENTRY)&_ZN6S573C53v46Ev,
  (VTBL_ENTRY)&_ZN6S573C53v47Ev,
  (VTBL_ENTRY)&_ZN6S573C53v48Ev,
  (VTBL_ENTRY)&_ZN6S573C53v49Ev,
  (VTBL_ENTRY)&_ZN6S573C53v50Ev,
  (VTBL_ENTRY)&_ZN6S573C53v51Ev,
  (VTBL_ENTRY)&_ZN6S573C53v52Ev,
  (VTBL_ENTRY)&_ZN6S573C53v53Ev,
  (VTBL_ENTRY)&_ZN6S573C53v54Ev,
  (VTBL_ENTRY)&_ZN6S573C53v55Ev,
  (VTBL_ENTRY)&_ZN6S573C53v56Ev,
  (VTBL_ENTRY)&_ZN6S573C53v57Ev,
  (VTBL_ENTRY)&_ZN6S573C53v58Ev,
  (VTBL_ENTRY)&_ZN6S573C53v59Ev,
  (VTBL_ENTRY)&_ZN6S573C53v60Ev,
  (VTBL_ENTRY)&_ZN6S573C53v61Ev,
  (VTBL_ENTRY)&_ZN6S573C53v62Ev,
  (VTBL_ENTRY)&_ZN6S573C53v63Ev,
  (VTBL_ENTRY)&_ZN6S573C53v64Ev,
  (VTBL_ENTRY)&_ZN6S573C53v65Ev,
  (VTBL_ENTRY)&_ZN6S573C53v66Ev,
  (VTBL_ENTRY)&_ZN6S573C53v67Ev,
  (VTBL_ENTRY)&_ZN6S573C43v68Ev,
  (VTBL_ENTRY)&_ZN6S573C43v69Ev,
  (VTBL_ENTRY)&_ZN6S573C43v70Ev,
  (VTBL_ENTRY)&_ZN6S573C43v71Ev,
  (VTBL_ENTRY)&_ZN6S573C43v72Ev,
  (VTBL_ENTRY)&_ZN6S573C43v73Ev,
  (VTBL_ENTRY)&_ZN6S573C43v74Ev,
  (VTBL_ENTRY)&_ZN6S573C43v75Ev,
  (VTBL_ENTRY)&_ZN6S573C43v76Ev,
  (VTBL_ENTRY)&_ZN6S573C43v77Ev,
  (VTBL_ENTRY)&_ZN6S573C43v78Ev,
  (VTBL_ENTRY)&_ZN6S573C43v79Ev,
  (VTBL_ENTRY)&_ZN6S573C43v80Ev,
  (VTBL_ENTRY)&_ZN6S573C43v81Ev,
  (VTBL_ENTRY)&_ZN6S573C43v82Ev,
  (VTBL_ENTRY)&_ZN6S573C43v83Ev,
  (VTBL_ENTRY)&_ZN6S573C43v84Ev,
  (VTBL_ENTRY)&_ZN6S573C43v85Ev,
  (VTBL_ENTRY)&_ZN6S573C43v86Ev,
  (VTBL_ENTRY)&_ZN6S573C43v87Ev,
  (VTBL_ENTRY)&_ZN6S573C43v88Ev,
  (VTBL_ENTRY)&_ZN6S573C43v89Ev,
  (VTBL_ENTRY)&_ZN6S573C33v90Ev,
  (VTBL_ENTRY)&_ZN6S573C33v91Ev,
  (VTBL_ENTRY)&_ZN6S573C33v92Ev,
  (VTBL_ENTRY)&_ZN6S573C33v93Ev,
  (VTBL_ENTRY)&_ZN6S573C33v94Ev,
  (VTBL_ENTRY)&_ZN6S573C33v95Ev,
  (VTBL_ENTRY)&_ZN6S573C33v96Ev,
  (VTBL_ENTRY)&_ZN6S573C33v97Ev,
  (VTBL_ENTRY)&_ZN6S573C33v98Ev,
  (VTBL_ENTRY)&_ZN6S573C33v99Ev,
  (VTBL_ENTRY)&_ZN6S573C34v100Ev,
  (VTBL_ENTRY)&_ZN6S573C34v101Ev,
  (VTBL_ENTRY)&_ZN6S573C34v102Ev,
  (VTBL_ENTRY)&_ZN6S573C34v103Ev,
  (VTBL_ENTRY)&_ZN6S573C34v104Ev,
  (VTBL_ENTRY)&_ZN6S573C34v105Ev,
  (VTBL_ENTRY)&_ZN6S573C34v106Ev,
  (VTBL_ENTRY)&_ZN6S573C34v107Ev,
  (VTBL_ENTRY)&_ZN6S573C34v108Ev,
  (VTBL_ENTRY)&_ZN6S573C34v109Ev,
  (VTBL_ENTRY)&_ZN9S573C2_nt4v110Ev,
  (VTBL_ENTRY)&_ZN9S573C2_nt4v111Ev,
  (VTBL_ENTRY)&_ZN9S573C2_nt4v112Ev,
  (VTBL_ENTRY)&_ZN9S573C2_nt4v113Ev,
  (VTBL_ENTRY)&_ZN6S573C12v1Ev,
  (VTBL_ENTRY)&_ZN6S573C12v2Ev,
  (VTBL_ENTRY)&_ZN6S573C12v3Ev,
};
extern VTBL_ENTRY _ZTI6S573C1[];
extern  VTBL_ENTRY _ZTV6S573C1[];
Class_Descriptor cd_S573C1 = {  "S573C1", // class name
  bases_S573C1, 4,
  &(vtc_S573C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(336,252), // object size
  NSPAIRA(_ZTI6S573C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S573C1),117, //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  S693C5  {
  int s693c5f0;
  __tsi64 s693c5f1;
  void *s693c5f2[4];
  int s693c5f3[2];
  void *s693c5f4;
  ::S674C6_nt s693c5f5;
  void *s693c5f6[2];
  virtual  ~S693C5(); // _ZN6S693C5D1Ev
  virtual void  v7(); // _ZN6S693C52v7Ev
  virtual void  v8(); // _ZN6S693C52v8Ev
  virtual void  v9(); // _ZN6S693C52v9Ev
  virtual void  v10(); // _ZN6S693C53v10Ev
  virtual void  v11(); // _ZN6S693C53v11Ev
  virtual void  v12(); // _ZN6S693C53v12Ev
  virtual void  v13(); // _ZN6S693C53v13Ev
  virtual void  v14(); // _ZN6S693C53v14Ev
  virtual void  v15(); // _ZN6S693C53v15Ev
  virtual void  v16(); // _ZN6S693C53v16Ev
  virtual void  v17(); // _ZN6S693C53v17Ev
  virtual void  v18(); // _ZN6S693C53v18Ev
  virtual void  v19(); // _ZN6S693C53v19Ev
  virtual void  v20(); // _ZN6S693C53v20Ev
  virtual void  v21(); // _ZN6S693C53v21Ev
  virtual void  v22(); // _ZN6S693C53v22Ev
  virtual void  v23(); // _ZN6S693C53v23Ev
  virtual void  v24(); // _ZN6S693C53v24Ev
  virtual void  v25(); // _ZN6S693C53v25Ev
  virtual void  v26(); // _ZN6S693C53v26Ev
  virtual void  v27(); // _ZN6S693C53v27Ev
  virtual void  v28(); // _ZN6S693C53v28Ev
  virtual void  v29(); // _ZN6S693C53v29Ev
  virtual void  v30(); // _ZN6S693C53v30Ev
  virtual void  v31(); // _ZN6S693C53v31Ev
  virtual void  v32(); // _ZN6S693C53v32Ev
  virtual void  v33(); // _ZN6S693C53v33Ev
  virtual void  v34(); // _ZN6S693C53v34Ev
  virtual void  v35(); // _ZN6S693C53v35Ev
  virtual void  v36(); // _ZN6S693C53v36Ev
  virtual void  v37(); // _ZN6S693C53v37Ev
  virtual void  v38(); // _ZN6S693C53v38Ev
  virtual void  v39(); // _ZN6S693C53v39Ev
  virtual void  v40(); // _ZN6S693C53v40Ev
  virtual void  v41(); // _ZN6S693C53v41Ev
  virtual void  v42(); // _ZN6S693C53v42Ev
  virtual void  v43(); // _ZN6S693C53v43Ev
  virtual void  v44(); // _ZN6S693C53v44Ev
  virtual void  v45(); // _ZN6S693C53v45Ev
  virtual void  v46(); // _ZN6S693C53v46Ev
  virtual void  v47(); // _ZN6S693C53v47Ev
  virtual void  v48(); // _ZN6S693C53v48Ev
  virtual void  v49(); // _ZN6S693C53v49Ev
  virtual void  v50(); // _ZN6S693C53v50Ev
  virtual void  v51(); // _ZN6S693C53v51Ev
  virtual void  v52(); // _ZN6S693C53v52Ev
  virtual void  v53(); // _ZN6S693C53v53Ev
  virtual void  v54(); // _ZN6S693C53v54Ev
  virtual void  v55(); // _ZN6S693C53v55Ev
  virtual void  v56(); // _ZN6S693C53v56Ev
  virtual void  v57(); // _ZN6S693C53v57Ev
  virtual void  v58(); // _ZN6S693C53v58Ev
  virtual void  v59(); // _ZN6S693C53v59Ev
  virtual void  v60(); // _ZN6S693C53v60Ev
  virtual void  v61(); // _ZN6S693C53v61Ev
  virtual void  v62(); // _ZN6S693C53v62Ev
  virtual void  v63(); // _ZN6S693C53v63Ev
  virtual void  v64(); // _ZN6S693C53v64Ev
  virtual void  v65(); // _ZN6S693C53v65Ev
  virtual void  v66(); // _ZN6S693C53v66Ev
  virtual void  v67(); // _ZN6S693C53v67Ev
  virtual void  v68(); // _ZN6S693C53v68Ev
  virtual void  v69(); // _ZN6S693C53v69Ev
  virtual void  v70(); // _ZN6S693C53v70Ev
  S693C5(); // tgen
};
//SIG(-1 S693C5) 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]}


 S693C5 ::~S693C5(){ note_dtor("S693C5", this);}
void  S693C5 ::v7(){vfunc_called(this, "_ZN6S693C52v7Ev");}
void  S693C5 ::v8(){vfunc_called(this, "_ZN6S693C52v8Ev");}
void  S693C5 ::v9(){vfunc_called(this, "_ZN6S693C52v9Ev");}
void  S693C5 ::v10(){vfunc_called(this, "_ZN6S693C53v10Ev");}
void  S693C5 ::v11(){vfunc_called(this, "_ZN6S693C53v11Ev");}
void  S693C5 ::v12(){vfunc_called(this, "_ZN6S693C53v12Ev");}
void  S693C5 ::v13(){vfunc_called(this, "_ZN6S693C53v13Ev");}
void  S693C5 ::v14(){vfunc_called(this, "_ZN6S693C53v14Ev");}
void  S693C5 ::v15(){vfunc_called(this, "_ZN6S693C53v15Ev");}
void  S693C5 ::v16(){vfunc_called(this, "_ZN6S693C53v16Ev");}
void  S693C5 ::v17(){vfunc_called(this, "_ZN6S693C53v17Ev");}
void  S693C5 ::v18(){vfunc_called(this, "_ZN6S693C53v18Ev");}
void  S693C5 ::v19(){vfunc_called(this, "_ZN6S693C53v19Ev");}
void  S693C5 ::v20(){vfunc_called(this, "_ZN6S693C53v20Ev");}
void  S693C5 ::v21(){vfunc_called(this, "_ZN6S693C53v21Ev");}
void  S693C5 ::v22(){vfunc_called(this, "_ZN6S693C53v22Ev");}
void  S693C5 ::v23(){vfunc_called(this, "_ZN6S693C53v23Ev");}
void  S693C5 ::v24(){vfunc_called(this, "_ZN6S693C53v24Ev");}
void  S693C5 ::v25(){vfunc_called(this, "_ZN6S693C53v25Ev");}
void  S693C5 ::v26(){vfunc_called(this, "_ZN6S693C53v26Ev");}
void  S693C5 ::v27(){vfunc_called(this, "_ZN6S693C53v27Ev");}
void  S693C5 ::v28(){vfunc_called(this, "_ZN6S693C53v28Ev");}
void  S693C5 ::v29(){vfunc_called(this, "_ZN6S693C53v29Ev");}
void  S693C5 ::v30(){vfunc_called(this, "_ZN6S693C53v30Ev");}
void  S693C5 ::v31(){vfunc_called(this, "_ZN6S693C53v31Ev");}
void  S693C5 ::v32(){vfunc_called(this, "_ZN6S693C53v32Ev");}
void  S693C5 ::v33(){vfunc_called(this, "_ZN6S693C53v33Ev");}
void  S693C5 ::v34(){vfunc_called(this, "_ZN6S693C53v34Ev");}
void  S693C5 ::v35(){vfunc_called(this, "_ZN6S693C53v35Ev");}
void  S693C5 ::v36(){vfunc_called(this, "_ZN6S693C53v36Ev");}
void  S693C5 ::v37(){vfunc_called(this, "_ZN6S693C53v37Ev");}
void  S693C5 ::v38(){vfunc_called(this, "_ZN6S693C53v38Ev");}
void  S693C5 ::v39(){vfunc_called(this, "_ZN6S693C53v39Ev");}
void  S693C5 ::v40(){vfunc_called(this, "_ZN6S693C53v40Ev");}
void  S693C5 ::v41(){vfunc_called(this, "_ZN6S693C53v41Ev");}
void  S693C5 ::v42(){vfunc_called(this, "_ZN6S693C53v42Ev");}
void  S693C5 ::v43(){vfunc_called(this, "_ZN6S693C53v43Ev");}
void  S693C5 ::v44(){vfunc_called(this, "_ZN6S693C53v44Ev");}
void  S693C5 ::v45(){vfunc_called(this, "_ZN6S693C53v45Ev");}
void  S693C5 ::v46(){vfunc_called(this, "_ZN6S693C53v46Ev");}
void  S693C5 ::v47(){vfunc_called(this, "_ZN6S693C53v47Ev");}
void  S693C5 ::v48(){vfunc_called(this, "_ZN6S693C53v48Ev");}
void  S693C5 ::v49(){vfunc_called(this, "_ZN6S693C53v49Ev");}
void  S693C5 ::v50(){vfunc_called(this, "_ZN6S693C53v50Ev");}
void  S693C5 ::v51(){vfunc_called(this, "_ZN6S693C53v51Ev");}
void  S693C5 ::v52(){vfunc_called(this, "_ZN6S693C53v52Ev");}
void  S693C5 ::v53(){vfunc_called(this, "_ZN6S693C53v53Ev");}
void  S693C5 ::v54(){vfunc_called(this, "_ZN6S693C53v54Ev");}
void  S693C5 ::v55(){vfunc_called(this, "_ZN6S693C53v55Ev");}
void  S693C5 ::v56(){vfunc_called(this, "_ZN6S693C53v56Ev");}
void  S693C5 ::v57(){vfunc_called(this, "_ZN6S693C53v57Ev");}
void  S693C5 ::v58(){vfunc_called(this, "_ZN6S693C53v58Ev");}
void  S693C5 ::v59(){vfunc_called(this, "_ZN6S693C53v59Ev");}
void  S693C5 ::v60(){vfunc_called(this, "_ZN6S693C53v60Ev");}
void  S693C5 ::v61(){vfunc_called(this, "_ZN6S693C53v61Ev");}
void  S693C5 ::v62(){vfunc_called(this, "_ZN6S693C53v62Ev");}
void  S693C5 ::v63(){vfunc_called(this, "_ZN6S693C53v63Ev");}
void  S693C5 ::v64(){vfunc_called(this, "_ZN6S693C53v64Ev");}
void  S693C5 ::v65(){vfunc_called(this, "_ZN6S693C53v65Ev");}
void  S693C5 ::v66(){vfunc_called(this, "_ZN6S693C53v66Ev");}
void  S693C5 ::v67(){vfunc_called(this, "_ZN6S693C53v67Ev");}
void  S693C5 ::v68(){vfunc_called(this, "_ZN6S693C53v68Ev");}
void  S693C5 ::v69(){vfunc_called(this, "_ZN6S693C53v69Ev");}
void  S693C5 ::v70(){vfunc_called(this, "_ZN6S693C53v70Ev");}
S693C5 ::S693C5(){ note_ctor("S693C5", this);} // tgen

static void Test_S693C5()
{
  extern Class_Descriptor cd_S693C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S693C5, buf);
    S693C5 *dp, &lv = *(dp=new (buf) S693C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S693C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S693C5)");
    check_field_offset(lv, s693c5f0, ABISELECT(8,4), "S693C5.s693c5f0");
    check_field_offset(lv, s693c5f1, ABISELECT(16,8), "S693C5.s693c5f1");
    check_field_offset(lv, s693c5f2, ABISELECT(24,16), "S693C5.s693c5f2");
    check_field_offset(lv, s693c5f3, ABISELECT(56,32), "S693C5.s693c5f3");
    check_field_offset(lv, s693c5f4, ABISELECT(64,40), "S693C5.s693c5f4");
    check_field_offset(lv, s693c5f5, ABISELECT(72,44), "S693C5.s693c5f5");
    check_field_offset(lv, s693c5f6, ABISELECT(80,52), "S693C5.s693c5f6");
    test_class_info(&lv, &cd_S693C5);
    dp->~S693C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS693C5(Test_S693C5, "S693C5", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN6S693C5C1Ev();
extern void _ZN6S693C5D1Ev();
Name_Map name_map_S693C5[] = {
  NSPAIR(_ZN6S693C5C1Ev),
  NSPAIR(_ZN6S693C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI6S693C5[];
extern void _ZN6S693C5D1Ev();
extern void _ZN6S693C5D0Ev();
extern void _ZN6S693C52v7Ev();
extern void _ZN6S693C52v8Ev();
extern void _ZN6S693C52v9Ev();
extern void _ZN6S693C53v10Ev();
extern void _ZN6S693C53v11Ev();
extern void _ZN6S693C53v12Ev();
extern void _ZN6S693C53v13Ev();
extern void _ZN6S693C53v14Ev();
extern void _ZN6S693C53v15Ev();
extern void _ZN6S693C53v16Ev();
extern void _ZN6S693C53v17Ev();
extern void _ZN6S693C53v18Ev();
extern void _ZN6S693C53v19Ev();
extern void _ZN6S693C53v20Ev();
extern void _ZN6S693C53v21Ev();
extern void _ZN6S693C53v22Ev();
extern void _ZN6S693C53v23Ev();
extern void _ZN6S693C53v24Ev();
extern void _ZN6S693C53v25Ev();
extern void _ZN6S693C53v26Ev();
extern void _ZN6S693C53v27Ev();
extern void _ZN6S693C53v28Ev();
extern void _ZN6S693C53v29Ev();
extern void _ZN6S693C53v30Ev();
extern void _ZN6S693C53v31Ev();
extern void _ZN6S693C53v32Ev();
extern void _ZN6S693C53v33Ev();
extern void _ZN6S693C53v34Ev();
extern void _ZN6S693C53v35Ev();
extern void _ZN6S693C53v36Ev();
extern void _ZN6S693C53v37Ev();
extern void _ZN6S693C53v38Ev();
extern void _ZN6S693C53v39Ev();
extern void _ZN6S693C53v40Ev();
extern void _ZN6S693C53v41Ev();
extern void _ZN6S693C53v42Ev();
extern void _ZN6S693C53v43Ev();
extern void _ZN6S693C53v44Ev();
extern void _ZN6S693C53v45Ev();
extern void _ZN6S693C53v46Ev();
extern void _ZN6S693C53v47Ev();
extern void _ZN6S693C53v48Ev();
extern void _ZN6S693C53v49Ev();
extern void _ZN6S693C53v50Ev();
extern void _ZN6S693C53v51Ev();
extern void _ZN6S693C53v52Ev();
extern void _ZN6S693C53v53Ev();
extern void _ZN6S693C53v54Ev();
extern void _ZN6S693C53v55Ev();
extern void _ZN6S693C53v56Ev();
extern void _ZN6S693C53v57Ev();
extern void _ZN6S693C53v58Ev();
extern void _ZN6S693C53v59Ev();
extern void _ZN6S693C53v60Ev();
extern void _ZN6S693C53v61Ev();
extern void _ZN6S693C53v62Ev();
extern void _ZN6S693C53v63Ev();
extern void _ZN6S693C53v64Ev();
extern void _ZN6S693C53v65Ev();
extern void _ZN6S693C53v66Ev();
extern void _ZN6S693C53v67Ev();
extern void _ZN6S693C53v68Ev();
extern void _ZN6S693C53v69Ev();
extern void _ZN6S693C53v70Ev();
static  VTBL_ENTRY vtc_S693C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S693C5[0]),
  (VTBL_ENTRY)&_ZN6S693C5D1Ev,
  (VTBL_ENTRY)&_ZN6S693C5D0Ev,
  (VTBL_ENTRY)&_ZN6S693C52v7Ev,
  (VTBL_ENTRY)&_ZN6S693C52v8Ev,
  (VTBL_ENTRY)&_ZN6S693C52v9Ev,
  (VTBL_ENTRY)&_ZN6S693C53v10Ev,
  (VTBL_ENTRY)&_ZN6S693C53v11Ev,
  (VTBL_ENTRY)&_ZN6S693C53v12Ev,
  (VTBL_ENTRY)&_ZN6S693C53v13Ev,
  (VTBL_ENTRY)&_ZN6S693C53v14Ev,
  (VTBL_ENTRY)&_ZN6S693C53v15Ev,
  (VTBL_ENTRY)&_ZN6S693C53v16Ev,
  (VTBL_ENTRY)&_ZN6S693C53v17Ev,
  (VTBL_ENTRY)&_ZN6S693C53v18Ev,
  (VTBL_ENTRY)&_ZN6S693C53v19Ev,
  (VTBL_ENTRY)&_ZN6S693C53v20Ev,
  (VTBL_ENTRY)&_ZN6S693C53v21Ev,
  (VTBL_ENTRY)&_ZN6S693C53v22Ev,
  (VTBL_ENTRY)&_ZN6S693C53v23Ev,
  (VTBL_ENTRY)&_ZN6S693C53v24Ev,
  (VTBL_ENTRY)&_ZN6S693C53v25Ev,
  (VTBL_ENTRY)&_ZN6S693C53v26Ev,
  (VTBL_ENTRY)&_ZN6S693C53v27Ev,
  (VTBL_ENTRY)&_ZN6S693C53v28Ev,
  (VTBL_ENTRY)&_ZN6S693C53v29Ev,
  (VTBL_ENTRY)&_ZN6S693C53v30Ev,
  (VTBL_ENTRY)&_ZN6S693C53v31Ev,
  (VTBL_ENTRY)&_ZN6S693C53v32Ev,
  (VTBL_ENTRY)&_ZN6S693C53v33Ev,
  (VTBL_ENTRY)&_ZN6S693C53v34Ev,
  (VTBL_ENTRY)&_ZN6S693C53v35Ev,
  (VTBL_ENTRY)&_ZN6S693C53v36Ev,
  (VTBL_ENTRY)&_ZN6S693C53v37Ev,
  (VTBL_ENTRY)&_ZN6S693C53v38Ev,
  (VTBL_ENTRY)&_ZN6S693C53v39Ev,
  (VTBL_ENTRY)&_ZN6S693C53v40Ev,
  (VTBL_ENTRY)&_ZN6S693C53v41Ev,
  (VTBL_ENTRY)&_ZN6S693C53v42Ev,
  (VTBL_ENTRY)&_ZN6S693C53v43Ev,
  (VTBL_ENTRY)&_ZN6S693C53v44Ev,
  (VTBL_ENTRY)&_ZN6S693C53v45Ev,
  (VTBL_ENTRY)&_ZN6S693C53v46Ev,
  (VTBL_ENTRY)&_ZN6S693C53v47Ev,
  (VTBL_ENTRY)&_ZN6S693C53v48Ev,
  (VTBL_ENTRY)&_ZN6S693C53v49Ev,
  (VTBL_ENTRY)&_ZN6S693C53v50Ev,
  (VTBL_ENTRY)&_ZN6S693C53v51Ev,
  (VTBL_ENTRY)&_ZN6S693C53v52Ev,
  (VTBL_ENTRY)&_ZN6S693C53v53Ev,
  (VTBL_ENTRY)&_ZN6S693C53v54Ev,
  (VTBL_ENTRY)&_ZN6S693C53v55Ev,
  (VTBL_ENTRY)&_ZN6S693C53v56Ev,
  (VTBL_ENTRY)&_ZN6S693C53v57Ev,
  (VTBL_ENTRY)&_ZN6S693C53v58Ev,
  (VTBL_ENTRY)&_ZN6S693C53v59Ev,
  (VTBL_ENTRY)&_ZN6S693C53v60Ev,
  (VTBL_ENTRY)&_ZN6S693C53v61Ev,
  (VTBL_ENTRY)&_ZN6S693C53v62Ev,
  (VTBL_ENTRY)&_ZN6S693C53v63Ev,
  (VTBL_ENTRY)&_ZN6S693C53v64Ev,
  (VTBL_ENTRY)&_ZN6S693C53v65Ev,
  (VTBL_ENTRY)&_ZN6S693C53v66Ev,
  (VTBL_ENTRY)&_ZN6S693C53v67Ev,
  (VTBL_ENTRY)&_ZN6S693C53v68Ev,
  (VTBL_ENTRY)&_ZN6S693C53v69Ev,
  (VTBL_ENTRY)&_ZN6S693C53v70Ev,
};
extern VTBL_ENTRY _ZTI6S693C5[];
extern  VTBL_ENTRY _ZTV6S693C5[];
Class_Descriptor cd_S693C5 = {  "S693C5", // class name
  0,0,//no base classes
  &(vtc_S693C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI6S693C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV6S693C5),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  S693C4  : S693C5 {
  unsigned int s693c4f0:1;
  unsigned int s693c4f1:1;
  unsigned int s693c4f2:1;
  unsigned int s693c4f3:1;
  unsigned int s693c4f4:1;
  unsigned int s693c4f5:1;
  unsigned int s693c4f6:1;
  ::S3625C32 s693c4f7;
  virtual  ~S693C4(); // _ZN6S693C4D1Ev
  virtual void  v71(); // _ZN6S693C43v71Ev
  virtual void  v72(); // _ZN6S693C43v72Ev
  virtual void  v73(); // _ZN6S693C43v73Ev
  virtual void  v74(); // _ZN6S693C43v74Ev
  virtual void  v75(); // _ZN6S693C43v75Ev
  virtual void  v76(); // _ZN6S693C43v76Ev
  virtual void  v77(); // _ZN6S693C43v77Ev
  virtual void  v78(); // _ZN6S693C43v78Ev
  virtual void  v79(); // _ZN6S693C43v79Ev
  virtual void  v80(); // _ZN6S693C43v80Ev
  virtual void  v81(); // _ZN6S693C43v81Ev
  virtual void  v82(); // _ZN6S693C43v82Ev
  virtual void  v83(); // _ZN6S693C43v83Ev
  virtual void  v84(); // _ZN6S693C43v84Ev
  virtual void  v85(); // _ZN6S693C43v85Ev
  virtual void  v86(); // _ZN6S693C43v86Ev
  virtual void  v87(); // _ZN6S693C43v87Ev
  virtual void  v88(); // _ZN6S693C43v88Ev
  virtual void  v89(); // _ZN6S693C43v89Ev
  virtual void  v90(); // _ZN6S693C43v90Ev
  S693C4(); // tgen
};
//SIG(-1 S693C4) C1{ BC2{ 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 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 Fi FL Fp[4] Fi[2] Fp FC3{ m Fi[2]} Fp[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 FC4{ m}}


 S693C4 ::~S693C4(){ note_dtor("S693C4", this);}
void  S693C4 ::v71(){vfunc_called(this, "_ZN6S693C43v71Ev");}
void  S693C4 ::v72(){vfunc_called(this, "_ZN6S693C43v72Ev");}
void  S693C4 ::v73(){vfunc_called(this, "_ZN6S693C43v73Ev");}
void  S693C4 ::v74(){vfunc_called(this, "_ZN6S693C43v74Ev");}
void  S693C4 ::v75(){vfunc_called(this, "_ZN6S693C43v75Ev");}
void  S693C4 ::v76(){vfunc_called(this, "_ZN6S693C43v76Ev");}
void  S693C4 ::v77(){vfunc_called(this, "_ZN6S693C43v77Ev");}
void  S693C4 ::v78(){vfunc_called(this, "_ZN6S693C43v78Ev");}
void  S693C4 ::v79(){vfunc_called(this, "_ZN6S693C43v79Ev");}
void  S693C4 ::v80(){vfunc_called(this, "_ZN6S693C43v80Ev");}
void  S693C4 ::v81(){vfunc_called(this, "_ZN6S693C43v81Ev");}
void  S693C4 ::v82(){vfunc_called(this, "_ZN6S693C43v82Ev");}
void  S693C4 ::v83(){vfunc_called(this, "_ZN6S693C43v83Ev");}
void  S693C4 ::v84(){vfunc_called(this, "_ZN6S693C43v84Ev");}
void  S693C4 ::v85(){vfunc_called(this, "_ZN6S693C43v85Ev");}
void  S693C4 ::v86(){vfunc_called(this, "_ZN6S693C43v86Ev");}
void  S693C4 ::v87(){vfunc_called(this, "_ZN6S693C43v87Ev");}
void  S693C4 ::v88(){vfunc_called(this, "_ZN6S693C43v88Ev");}
void  S693C4 ::v89(){vfunc_called(this, "_ZN6S693C43v89Ev");}
void  S693C4 ::v90(){vfunc_called(this, "_ZN6S693C43v90Ev");}
S693C4 ::S693C4(){ note_ctor("S693C4", this);} // tgen

static void Test_S693C4()
{
  extern Class_Descriptor cd_S693C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(14,17)];
    init_test(&cd_S693C4, buf);
    S693C4 *dp, &lv = *(dp=new (buf) S693C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(104,64), "sizeof(S693C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S693C4)");
    check_base_class_offset(lv, (S693C5*), 0, "S693C4");
    set_bf_and_test(lv, s693c4f0, ABISELECT(96,60), 0, 1, 1, "S693C4");
    set_bf_and_test(lv, s693c4f1, ABISELECT(96,60), 1, 1, 1, "S693C4");
    set_bf_and_test(lv, s693c4f2, ABISELECT(96,60), 2, 1, 1, "S693C4");
    set_bf_and_test(lv, s693c4f3, ABISELECT(96,60), 3, 1, 1, "S693C4");
    set_bf_and_test(lv, s693c4f4, ABISELECT(96,60), 4, 1, 1, "S693C4");
    set_bf_and_test(lv, s693c4f5, ABISELECT(96,60), 5, 1, 1, "S693C4");
    set_bf_and_test(lv, s693c4f6, ABISELECT(96,60), 6, 1, 1, "S693C4");
    check_field_offset(lv, s693c4f7, ABISELECT(97,61), "S693C4.s693c4f7");
    test_class_info(&lv, &cd_S693C4);
    dp->~S693C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS693C4(Test_S693C4, "S693C4", ABISELECT(104,64));

#else // __cplusplus

extern void _ZN6S693C4C1Ev();
extern void _ZN6S693C4D1Ev();
Name_Map name_map_S693C4[] = {
  NSPAIR(_ZN6S693C4C1Ev),
  NSPAIR(_ZN6S693C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S693C5;
extern VTBL_ENTRY _ZTI6S693C5[];
extern  VTBL_ENTRY _ZTV6S693C5[];
static Base_Class bases_S693C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S693C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI6S693C4[];
extern void _ZN6S693C4D1Ev();
extern void _ZN6S693C4D0Ev();
extern void _ZN6S693C52v7Ev();
extern void _ZN6S693C52v8Ev();
extern void _ZN6S693C52v9Ev();
extern void _ZN6S693C53v10Ev();
extern void _ZN6S693C53v11Ev();
extern void _ZN6S693C53v12Ev();
extern void _ZN6S693C53v13Ev();
extern void _ZN6S693C53v14Ev();
extern void _ZN6S693C53v15Ev();
extern void _ZN6S693C53v16Ev();
extern void _ZN6S693C53v17Ev();
extern void _ZN6S693C53v18Ev();
extern void _ZN6S693C53v19Ev();
extern void _ZN6S693C53v20Ev();
extern void _ZN6S693C53v21Ev();
extern void _ZN6S693C53v22Ev();
extern void _ZN6S693C53v23Ev();
extern void _ZN6S693C53v24Ev();
extern void _ZN6S693C53v25Ev();
extern void _ZN6S693C53v26Ev();
extern void _ZN6S693C53v27Ev();
extern void _ZN6S693C53v28Ev();
extern void _ZN6S693C53v29Ev();
extern void _ZN6S693C53v30Ev();
extern void _ZN6S693C53v31Ev();
extern void _ZN6S693C53v32Ev();
extern void _ZN6S693C53v33Ev();
extern void _ZN6S693C53v34Ev();
extern void _ZN6S693C53v35Ev();
extern void _ZN6S693C53v36Ev();
extern void _ZN6S693C53v37Ev();
extern void _ZN6S693C53v38Ev();
extern void _ZN6S693C53v39Ev();
extern void _ZN6S693C53v40Ev();
extern void _ZN6S693C53v41Ev();
extern void _ZN6S693C53v42Ev();
extern void _ZN6S693C53v43Ev();
extern void _ZN6S693C53v44Ev();
extern void _ZN6S693C53v45Ev();
extern void _ZN6S693C53v46Ev();
extern void _ZN6S693C53v47Ev();
extern void _ZN6S693C53v48Ev();
extern void _ZN6S693C53v49Ev();
extern void _ZN6S693C53v50Ev();
extern void _ZN6S693C53v51Ev();
extern void _ZN6S693C53v52Ev();
extern void _ZN6S693C53v53Ev();
extern void _ZN6S693C53v54Ev();
extern void _ZN6S693C53v55Ev();
extern void _ZN6S693C53v56Ev();
extern void _ZN6S693C53v57Ev();
extern void _ZN6S693C53v58Ev();
extern void _ZN6S693C53v59Ev();
extern void _ZN6S693C53v60Ev();
extern void _ZN6S693C53v61Ev();
extern void _ZN6S693C53v62Ev();
extern void _ZN6S693C53v63Ev();
extern void _ZN6S693C53v64Ev();
extern void _ZN6S693C53v65Ev();
extern void _ZN6S693C53v66Ev();
extern void _ZN6S693C53v67Ev();
extern void _ZN6S693C53v68Ev();
extern void _ZN6S693C53v69Ev();
extern void _ZN6S693C53v70Ev();
extern void _ZN6S693C43v71Ev();
extern void _ZN6S693C43v72Ev();
extern void _ZN6S693C43v73Ev();
extern void _ZN6S693C43v74Ev();
extern void _ZN6S693C43v75Ev();
extern void _ZN6S693C43v76Ev();
extern void _ZN6S693C43v77Ev();
extern void _ZN6S693C43v78Ev();
extern void _ZN6S693C43v79Ev();
extern void _ZN6S693C43v80Ev();
extern void _ZN6S693C43v81Ev();
extern void _ZN6S693C43v82Ev();
extern void _ZN6S693C43v83Ev();
extern void _ZN6S693C43v84Ev();
extern void _ZN6S693C43v85Ev();
extern void _ZN6S693C43v86Ev();
extern void _ZN6S693C43v87Ev();
extern void _ZN6S693C43v88Ev();
extern void _ZN6S693C43v89Ev();
extern void _ZN6S693C43v90Ev();
static  VTBL_ENTRY vtc_S693C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S693C4[0]),
  (VTBL_ENTRY)&_ZN6S693C4D1Ev,
  (VTBL_ENTRY)&_ZN6S693C4D0Ev,
  (VTBL_ENTRY)&_ZN6S693C52v7Ev,
  (VTBL_ENTRY)&_ZN6S693C52v8Ev,
  (VTBL_ENTRY)&_ZN6S693C52v9Ev,
  (VTBL_ENTRY)&_ZN6S693C53v10Ev,
  (VTBL_ENTRY)&_ZN6S693C53v11Ev,
  (VTBL_ENTRY)&_ZN6S693C53v12Ev,
  (VTBL_ENTRY)&_ZN6S693C53v13Ev,
  (VTBL_ENTRY)&_ZN6S693C53v14Ev,
  (VTBL_ENTRY)&_ZN6S693C53v15Ev,
  (VTBL_ENTRY)&_ZN6S693C53v16Ev,
  (VTBL_ENTRY)&_ZN6S693C53v17Ev,
  (VTBL_ENTRY)&_ZN6S693C53v18Ev,
  (VTBL_ENTRY)&_ZN6S693C53v19Ev,
  (VTBL_ENTRY)&_ZN6S693C53v20Ev,
  (VTBL_ENTRY)&_ZN6S693C53v21Ev,
  (VTBL_ENTRY)&_ZN6S693C53v22Ev,
  (VTBL_ENTRY)&_ZN6S693C53v23Ev,
  (VTBL_ENTRY)&_ZN6S693C53v24Ev,
  (VTBL_ENTRY)&_ZN6S693C53v25Ev,
  (VTBL_ENTRY)&_ZN6S693C53v26Ev,
  (VTBL_ENTRY)&_ZN6S693C53v27Ev,
  (VTBL_ENTRY)&_ZN6S693C53v28Ev,
  (VTBL_ENTRY)&_ZN6S693C53v29Ev,
  (VTBL_ENTRY)&_ZN6S693C53v30Ev,
  (VTBL_ENTRY)&_ZN6S693C53v31Ev,
  (VTBL_ENTRY)&_ZN6S693C53v32Ev,
  (VTBL_ENTRY)&_ZN6S693C53v33Ev,
  (VTBL_ENTRY)&_ZN6S693C53v34Ev,
  (VTBL_ENTRY)&_ZN6S693C53v35Ev,
  (VTBL_ENTRY)&_ZN6S693C53v36Ev,
  (VTBL_ENTRY)&_ZN6S693C53v37Ev,
  (VTBL_ENTRY)&_ZN6S693C53v38Ev,
  (VTBL_ENTRY)&_ZN6S693C53v39Ev,
  (VTBL_ENTRY)&_ZN6S693C53v40Ev,
  (VTBL_ENTRY)&_ZN6S693C53v41Ev,
  (VTBL_ENTRY)&_ZN6S693C53v42Ev,
  (VTBL_ENTRY)&_ZN6S693C53v43Ev,
  (VTBL_ENTRY)&_ZN6S693C53v44Ev,
  (VTBL_ENTRY)&_ZN6S693C53v45Ev,
  (VTBL_ENTRY)&_ZN6S693C53v46Ev,
  (VTBL_ENTRY)&_ZN6S693C53v47Ev,
  (VTBL_ENTRY)&_ZN6S693C53v48Ev,
  (VTBL_ENTRY)&_ZN6S693C53v49Ev,
  (VTBL_ENTRY)&_ZN6S693C53v50Ev,
  (VTBL_ENTRY)&_ZN6S693C53v51Ev,
  (VTBL_ENTRY)&_ZN6S693C53v52Ev,
  (VTBL_ENTRY)&_ZN6S693C53v53Ev,
  (VTBL_ENTRY)&_ZN6S693C53v54Ev,
  (VTBL_ENTRY)&_ZN6S693C53v55Ev,
  (VTBL_ENTRY)&_ZN6S693C53v56Ev,
  (VTBL_ENTRY)&_ZN6S693C53v57Ev,
  (VTBL_ENTRY)&_ZN6S693C53v58Ev,
  (VTBL_ENTRY)&_ZN6S693C53v59Ev,
  (VTBL_ENTRY)&_ZN6S693C53v60Ev,
  (VTBL_ENTRY)&_ZN6S693C53v61Ev,
  (VTBL_ENTRY)&_ZN6S693C53v62Ev,
  (VTBL_ENTRY)&_ZN6S693C53v63Ev,
  (VTBL_ENTRY)&_ZN6S693C53v64Ev,
  (VTBL_ENTRY)&_ZN6S693C53v65Ev,
  (VTBL_ENTRY)&_ZN6S693C53v66Ev,
  (VTBL_ENTRY)&_ZN6S693C53v67Ev,
  (VTBL_ENTRY)&_ZN6S693C53v68Ev,
  (VTBL_ENTRY)&_ZN6S693C53v69Ev,
  (VTBL_ENTRY)&_ZN6S693C53v70Ev,
  (VTBL_ENTRY)&_ZN6S693C43v71Ev,
  (VTBL_ENTRY)&_ZN6S693C43v72Ev,
  (VTBL_ENTRY)&_ZN6S693C43v73Ev,
  (VTBL_ENTRY)&_ZN6S693C43v74Ev,
  (VTBL_ENTRY)&_ZN6S693C43v75Ev,
  (VTBL_ENTRY)&_ZN6S693C43v76Ev,
  (VTBL_ENTRY)&_ZN6S693C43v77Ev,
  (VTBL_ENTRY)&_ZN6S693C43v78Ev,
  (VTBL_ENTRY)&_ZN6S693C43v79Ev,
  (VTBL_ENTRY)&_ZN6S693C43v80Ev,
  (VTBL_ENTRY)&_ZN6S693C43v81Ev,
  (VTBL_ENTRY)&_ZN6S693C43v82Ev,
  (VTBL_ENTRY)&_ZN6S693C43v83Ev,
  (VTBL_ENTRY)&_ZN6S693C43v84Ev,
  (VTBL_ENTRY)&_ZN6S693C43v85Ev,
  (VTBL_ENTRY)&_ZN6S693C43v86Ev,
  (VTBL_ENTRY)&_ZN6S693C43v87Ev,
  (VTBL_ENTRY)&_ZN6S693C43v88Ev,
  (VTBL_ENTRY)&_ZN6S693C43v89Ev,
  (VTBL_ENTRY)&_ZN6S693C43v90Ev,
};
extern VTBL_ENTRY _ZTI6S693C4[];
extern  VTBL_ENTRY _ZTV6S693C4[];
Class_Descriptor cd_S693C4 = {  "S693C4", // class name
  bases_S693C4, 1,
  &(vtc_S693C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(104,64), // object size
  NSPAIRA(_ZTI6S693C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S693C4),88, //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  S693C3  : S693C4 {
  virtual  ~S693C3(); // _ZN6S693C3D1Ev
  virtual void  v91(); // _ZN6S693C33v91Ev
  virtual void  v92(); // _ZN6S693C33v92Ev
  virtual void  v93(); // _ZN6S693C33v93Ev
  virtual void  v94(); // _ZN6S693C33v94Ev
  virtual void  v95(); // _ZN6S693C33v95Ev
  virtual void  v96(); // _ZN6S693C33v96Ev
  virtual void  v97(); // _ZN6S693C33v97Ev
  virtual void  v98(); // _ZN6S693C33v98Ev
  virtual void  v99(); // _ZN6S693C33v99Ev
  S693C3(); // tgen
};
//SIG(-1 S693C3) C1{ BC2{ BC3{ vd 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 Fi FL Fp[4] Fi[2] Fp FC4{ m Fi[2]} Fp[2]} vd v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 v91 v92 v93 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 FC5{ m}} vd v1 v2 v3 v4 v5 v6 v7 v8 v9}


 S693C3 ::~S693C3(){ note_dtor("S693C3", this);}
void  S693C3 ::v91(){vfunc_called(this, "_ZN6S693C33v91Ev");}
void  S693C3 ::v92(){vfunc_called(this, "_ZN6S693C33v92Ev");}
void  S693C3 ::v93(){vfunc_called(this, "_ZN6S693C33v93Ev");}
void  S693C3 ::v94(){vfunc_called(this, "_ZN6S693C33v94Ev");}
void  S693C3 ::v95(){vfunc_called(this, "_ZN6S693C33v95Ev");}
void  S693C3 ::v96(){vfunc_called(this, "_ZN6S693C33v96Ev");}
void  S693C3 ::v97(){vfunc_called(this, "_ZN6S693C33v97Ev");}
void  S693C3 ::v98(){vfunc_called(this, "_ZN6S693C33v98Ev");}
void  S693C3 ::v99(){vfunc_called(this, "_ZN6S693C33v99Ev");}
S693C3 ::S693C3(){ note_ctor("S693C3", this);} // tgen

static void Test_S693C3()
{
  extern Class_Descriptor cd_S693C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(14,17)];
    init_test(&cd_S693C3, buf);
    S693C3 *dp, &lv = *(dp=new (buf) S693C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(104,64), "sizeof(S693C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S693C3)");
    check_base_class_offset(lv, (S693C5*)(S693C4*), 0, "S693C3");
    check_base_class_offset(lv, (S693C4*), 0, "S693C3");
    test_class_info(&lv, &cd_S693C3);
    dp->~S693C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS693C3(Test_S693C3, "S693C3", ABISELECT(104,64));

#else // __cplusplus

extern void _ZN6S693C3C1Ev();
extern void _ZN6S693C3D1Ev();
Name_Map name_map_S693C3[] = {
  NSPAIR(_ZN6S693C3C1Ev),
  NSPAIR(_ZN6S693C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S693C5;
extern VTBL_ENTRY _ZTI6S693C5[];
extern  VTBL_ENTRY _ZTV6S693C5[];
extern Class_Descriptor cd_S693C4;
extern VTBL_ENTRY _ZTI6S693C4[];
extern  VTBL_ENTRY _ZTV6S693C4[];
static Base_Class bases_S693C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S693C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S693C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S693C3[];
extern void _ZN6S693C3D1Ev();
extern void _ZN6S693C3D0Ev();
extern void _ZN6S693C52v7Ev();
extern void _ZN6S693C52v8Ev();
extern void _ZN6S693C52v9Ev();
extern void _ZN6S693C53v10Ev();
extern void _ZN6S693C53v11Ev();
extern void _ZN6S693C53v12Ev();
extern void _ZN6S693C53v13Ev();
extern void _ZN6S693C53v14Ev();
extern void _ZN6S693C53v15Ev();
extern void _ZN6S693C53v16Ev();
extern void _ZN6S693C53v17Ev();
extern void _ZN6S693C53v18Ev();
extern void _ZN6S693C53v19Ev();
extern void _ZN6S693C53v20Ev();
extern void _ZN6S693C53v21Ev();
extern void _ZN6S693C53v22Ev();
extern void _ZN6S693C53v23Ev();
extern void _ZN6S693C53v24Ev();
extern void _ZN6S693C53v25Ev();
extern void _ZN6S693C53v26Ev();
extern void _ZN6S693C53v27Ev();
extern void _ZN6S693C53v28Ev();
extern void _ZN6S693C53v29Ev();
extern void _ZN6S693C53v30Ev();
extern void _ZN6S693C53v31Ev();
extern void _ZN6S693C53v32Ev();
extern void _ZN6S693C53v33Ev();
extern void _ZN6S693C53v34Ev();
extern void _ZN6S693C53v35Ev();
extern void _ZN6S693C53v36Ev();
extern void _ZN6S693C53v37Ev();
extern void _ZN6S693C53v38Ev();
extern void _ZN6S693C53v39Ev();
extern void _ZN6S693C53v40Ev();
extern void _ZN6S693C53v41Ev();
extern void _ZN6S693C53v42Ev();
extern void _ZN6S693C53v43Ev();
extern void _ZN6S693C53v44Ev();
extern void _ZN6S693C53v45Ev();
extern void _ZN6S693C53v46Ev();
extern void _ZN6S693C53v47Ev();
extern void _ZN6S693C53v48Ev();
extern void _ZN6S693C53v49Ev();
extern void _ZN6S693C53v50Ev();
extern void _ZN6S693C53v51Ev();
extern void _ZN6S693C53v52Ev();
extern void _ZN6S693C53v53Ev();
extern void _ZN6S693C53v54Ev();
extern void _ZN6S693C53v55Ev();
extern void _ZN6S693C53v56Ev();
extern void _ZN6S693C53v57Ev();
extern void _ZN6S693C53v58Ev();
extern void _ZN6S693C53v59Ev();
extern void _ZN6S693C53v60Ev();
extern void _ZN6S693C53v61Ev();
extern void _ZN6S693C53v62Ev();
extern void _ZN6S693C53v63Ev();
extern void _ZN6S693C53v64Ev();
extern void _ZN6S693C53v65Ev();
extern void _ZN6S693C53v66Ev();
extern void _ZN6S693C53v67Ev();
extern void _ZN6S693C53v68Ev();
extern void _ZN6S693C53v69Ev();
extern void _ZN6S693C53v70Ev();
extern void _ZN6S693C43v71Ev();
extern void _ZN6S693C43v72Ev();
extern void _ZN6S693C43v73Ev();
extern void _ZN6S693C43v74Ev();
extern void _ZN6S693C43v75Ev();
extern void _ZN6S693C43v76Ev();
extern void _ZN6S693C43v77Ev();
extern void _ZN6S693C43v78Ev();
extern void _ZN6S693C43v79Ev();
extern void _ZN6S693C43v80Ev();
extern void _ZN6S693C43v81Ev();
extern void _ZN6S693C43v82Ev();
extern void _ZN6S693C43v83Ev();
extern void _ZN6S693C43v84Ev();
extern void _ZN6S693C43v85Ev();
extern void _ZN6S693C43v86Ev();
extern void _ZN6S693C43v87Ev();
extern void _ZN6S693C43v88Ev();
extern void _ZN6S693C43v89Ev();
extern void _ZN6S693C43v90Ev();
extern void _ZN6S693C33v91Ev();
extern void _ZN6S693C33v92Ev();
extern void _ZN6S693C33v93Ev();
extern void _ZN6S693C33v94Ev();
extern void _ZN6S693C33v95Ev();
extern void _ZN6S693C33v96Ev();
extern void _ZN6S693C33v97Ev();
extern void _ZN6S693C33v98Ev();
extern void _ZN6S693C33v99Ev();
static  VTBL_ENTRY vtc_S693C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S693C3[0]),
  (VTBL_ENTRY)&_ZN6S693C3D1Ev,
  (VTBL_ENTRY)&_ZN6S693C3D0Ev,
  (VTBL_ENTRY)&_ZN6S693C52v7Ev,
  (VTBL_ENTRY)&_ZN6S693C52v8Ev,
  (VTBL_ENTRY)&_ZN6S693C52v9Ev,
  (VTBL_ENTRY)&_ZN6S693C53v10Ev,
  (VTBL_ENTRY)&_ZN6S693C53v11Ev,
  (VTBL_ENTRY)&_ZN6S693C53v12Ev,
  (VTBL_ENTRY)&_ZN6S693C53v13Ev,
  (VTBL_ENTRY)&_ZN6S693C53v14Ev,
  (VTBL_ENTRY)&_ZN6S693C53v15Ev,
  (VTBL_ENTRY)&_ZN6S693C53v16Ev,
  (VTBL_ENTRY)&_ZN6S693C53v17Ev,
  (VTBL_ENTRY)&_ZN6S693C53v18Ev,
  (VTBL_ENTRY)&_ZN6S693C53v19Ev,
  (VTBL_ENTRY)&_ZN6S693C53v20Ev,
  (VTBL_ENTRY)&_ZN6S693C53v21Ev,
  (VTBL_ENTRY)&_ZN6S693C53v22Ev,
  (VTBL_ENTRY)&_ZN6S693C53v23Ev,
  (VTBL_ENTRY)&_ZN6S693C53v24Ev,
  (VTBL_ENTRY)&_ZN6S693C53v25Ev,
  (VTBL_ENTRY)&_ZN6S693C53v26Ev,
  (VTBL_ENTRY)&_ZN6S693C53v27Ev,
  (VTBL_ENTRY)&_ZN6S693C53v28Ev,
  (VTBL_ENTRY)&_ZN6S693C53v29Ev,
  (VTBL_ENTRY)&_ZN6S693C53v30Ev,
  (VTBL_ENTRY)&_ZN6S693C53v31Ev,
  (VTBL_ENTRY)&_ZN6S693C53v32Ev,
  (VTBL_ENTRY)&_ZN6S693C53v33Ev,
  (VTBL_ENTRY)&_ZN6S693C53v34Ev,
  (VTBL_ENTRY)&_ZN6S693C53v35Ev,
  (VTBL_ENTRY)&_ZN6S693C53v36Ev,
  (VTBL_ENTRY)&_ZN6S693C53v37Ev,
  (VTBL_ENTRY)&_ZN6S693C53v38Ev,
  (VTBL_ENTRY)&_ZN6S693C53v39Ev,
  (VTBL_ENTRY)&_ZN6S693C53v40Ev,
  (VTBL_ENTRY)&_ZN6S693C53v41Ev,
  (VTBL_ENTRY)&_ZN6S693C53v42Ev,
  (VTBL_ENTRY)&_ZN6S693C53v43Ev,
  (VTBL_ENTRY)&_ZN6S693C53v44Ev,
  (VTBL_ENTRY)&_ZN6S693C53v45Ev,
  (VTBL_ENTRY)&_ZN6S693C53v46Ev,
  (VTBL_ENTRY)&_ZN6S693C53v47Ev,
  (VTBL_ENTRY)&_ZN6S693C53v48Ev,
  (VTBL_ENTRY)&_ZN6S693C53v49Ev,
  (VTBL_ENTRY)&_ZN6S693C53v50Ev,
  (VTBL_ENTRY)&_ZN6S693C53v51Ev,
  (VTBL_ENTRY)&_ZN6S693C53v52Ev,
  (VTBL_ENTRY)&_ZN6S693C53v53Ev,
  (VTBL_ENTRY)&_ZN6S693C53v54Ev,
  (VTBL_ENTRY)&_ZN6S693C53v55Ev,
  (VTBL_ENTRY)&_ZN6S693C53v56Ev,
  (VTBL_ENTRY)&_ZN6S693C53v57Ev,
  (VTBL_ENTRY)&_ZN6S693C53v58Ev,
  (VTBL_ENTRY)&_ZN6S693C53v59Ev,
  (VTBL_ENTRY)&_ZN6S693C53v60Ev,
  (VTBL_ENTRY)&_ZN6S693C53v61Ev,
  (VTBL_ENTRY)&_ZN6S693C53v62Ev,
  (VTBL_ENTRY)&_ZN6S693C53v63Ev,
  (VTBL_ENTRY)&_ZN6S693C53v64Ev,
  (VTBL_ENTRY)&_ZN6S693C53v65Ev,
  (VTBL_ENTRY)&_ZN6S693C53v66Ev,
  (VTBL_ENTRY)&_ZN6S693C53v67Ev,
  (VTBL_ENTRY)&_ZN6S693C53v68Ev,
  (VTBL_ENTRY)&_ZN6S693C53v69Ev,
  (VTBL_ENTRY)&_ZN6S693C53v70Ev,
  (VTBL_ENTRY)&_ZN6S693C43v71Ev,
  (VTBL_ENTRY)&_ZN6S693C43v72Ev,
  (VTBL_ENTRY)&_ZN6S693C43v73Ev,
  (VTBL_ENTRY)&_ZN6S693C43v74Ev,
  (VTBL_ENTRY)&_ZN6S693C43v75Ev,
  (VTBL_ENTRY)&_ZN6S693C43v76Ev,
  (VTBL_ENTRY)&_ZN6S693C43v77Ev,
  (VTBL_ENTRY)&_ZN6S693C43v78Ev,
  (VTBL_ENTRY)&_ZN6S693C43v79Ev,
  (VTBL_ENTRY)&_ZN6S693C43v80Ev,
  (VTBL_ENTRY)&_ZN6S693C43v81Ev,
  (VTBL_ENTRY)&_ZN6S693C43v82Ev,
  (VTBL_ENTRY)&_ZN6S693C43v83Ev,
  (VTBL_ENTRY)&_ZN6S693C43v84Ev,
  (VTBL_ENTRY)&_ZN6S693C43v85Ev,
  (VTBL_ENTRY)&_ZN6S693C43v86Ev,
  (VTBL_ENTRY)&_ZN6S693C43v87Ev,
  (VTBL_ENTRY)&_ZN6S693C43v88Ev,
  (VTBL_ENTRY)&_ZN6S693C43v89Ev,
  (VTBL_ENTRY)&_ZN6S693C43v90Ev,
  (VTBL_ENTRY)&_ZN6S693C33v91Ev,
  (VTBL_ENTRY)&_ZN6S693C33v92Ev,
  (VTBL_ENTRY)&_ZN6S693C33v93Ev,
  (VTBL_ENTRY)&_ZN6S693C33v94Ev,
  (VTBL_ENTRY)&_ZN6S693C33v95Ev,
  (VTBL_ENTRY)&_ZN6S693C33v96Ev,
  (VTBL_ENTRY)&_ZN6S693C33v97Ev,
  (VTBL_ENTRY)&_ZN6S693C33v98Ev,
  (VTBL_ENTRY)&_ZN6S693C33v99Ev,
};
extern VTBL_ENTRY _ZTI6S693C3[];
extern  VTBL_ENTRY _ZTV6S693C3[];
Class_Descriptor cd_S693C3 = {  "S693C3", // class name
  bases_S693C3, 2,
  &(vtc_S693C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(104,64), // object size
  NSPAIRA(_ZTI6S693C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S693C3),97, //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  S693C2  : S693C3 {
  void *s693c2f0;
  unsigned int s693c2f1:1;
  unsigned int s693c2f2:1;
  unsigned int s693c2f3:1;
  char s693c2f4;
  virtual  ~S693C2(); // _ZN6S693C2D1Ev
  virtual void  v100(); // _ZN6S693C24v100Ev
  virtual void  v101(); // _ZN6S693C24v101Ev
  virtual void  v102(); // _ZN6S693C24v102Ev
  virtual void  v103(); // _ZN6S693C24v103Ev
  virtual void  v104(); // _ZN6S693C24v104Ev
  virtual void  v105(); // _ZN6S693C24v105Ev
  S693C2(); // tgen
};
//SIG(-1 S693C2) 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 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 Fi FL Fp[4] Fi[2] Fp FC5{ m Fi[2]} Fp[2]} vd v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 FC6{ m}} vd v91 v92 v93 v94 v95 v96 v97 v98 v99} vd v1 v2 v3 v4 v5 v6 Fp Fi:1 Fi:1 Fi:1 Fc}


 S693C2 ::~S693C2(){ note_dtor("S693C2", this);}
void  S693C2 ::v100(){vfunc_called(this, "_ZN6S693C24v100Ev");}
void  S693C2 ::v101(){vfunc_called(this, "_ZN6S693C24v101Ev");}
void  S693C2 ::v102(){vfunc_called(this, "_ZN6S693C24v102Ev");}
void  S693C2 ::v103(){vfunc_called(this, "_ZN6S693C24v103Ev");}
void  S693C2 ::v104(){vfunc_called(this, "_ZN6S693C24v104Ev");}
void  S693C2 ::v105(){vfunc_called(this, "_ZN6S693C24v105Ev");}
S693C2 ::S693C2(){ note_ctor("S693C2", this);} // tgen

static void Test_S693C2()
{
  extern Class_Descriptor cd_S693C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(16,19)];
    init_test(&cd_S693C2, buf);
    S693C2 *dp, &lv = *(dp=new (buf) S693C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(120,72), "sizeof(S693C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S693C2)");
    check_base_class_offset(lv, (S693C5*)(S693C4*)(S693C3*), 0, "S693C2");
    check_base_class_offset(lv, (S693C4*)(S693C3*), 0, "S693C2");
    check_base_class_offset(lv, (S693C3*), 0, "S693C2");
    check_field_offset(lv, s693c2f0, ABISELECT(104,64), "S693C2.s693c2f0");
    set_bf_and_test(lv, s693c2f1, ABISELECT(112,68), 0, 1, 1, "S693C2");
    set_bf_and_test(lv, s693c2f2, ABISELECT(112,68), 1, 1, 1, "S693C2");
    set_bf_and_test(lv, s693c2f3, ABISELECT(112,68), 2, 1, 1, "S693C2");
    check_field_offset(lv, s693c2f4, ABISELECT(113,69), "S693C2.s693c2f4");
    test_class_info(&lv, &cd_S693C2);
    dp->~S693C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS693C2(Test_S693C2, "S693C2", ABISELECT(120,72));

#else // __cplusplus

extern void _ZN6S693C2C1Ev();
extern void _ZN6S693C2D1Ev();
Name_Map name_map_S693C2[] = {
  NSPAIR(_ZN6S693C2C1Ev),
  NSPAIR(_ZN6S693C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S693C5;
extern VTBL_ENTRY _ZTI6S693C5[];
extern  VTBL_ENTRY _ZTV6S693C5[];
extern Class_Descriptor cd_S693C4;
extern VTBL_ENTRY _ZTI6S693C4[];
extern  VTBL_ENTRY _ZTV6S693C4[];
extern Class_Descriptor cd_S693C3;
extern VTBL_ENTRY _ZTI6S693C3[];
extern  VTBL_ENTRY _ZTV6S693C3[];
static Base_Class bases_S693C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S693C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S693C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S693C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S693C2[];
extern void _ZN6S693C2D1Ev();
extern void _ZN6S693C2D0Ev();
extern void _ZN6S693C52v7Ev();
extern void _ZN6S693C52v8Ev();
extern void _ZN6S693C52v9Ev();
extern void _ZN6S693C53v10Ev();
extern void _ZN6S693C53v11Ev();
extern void _ZN6S693C53v12Ev();
extern void _ZN6S693C53v13Ev();
extern void _ZN6S693C53v14Ev();
extern void _ZN6S693C53v15Ev();
extern void _ZN6S693C53v16Ev();
extern void _ZN6S693C53v17Ev();
extern void _ZN6S693C53v18Ev();
extern void _ZN6S693C53v19Ev();
extern void _ZN6S693C53v20Ev();
extern void _ZN6S693C53v21Ev();
extern void _ZN6S693C53v22Ev();
extern void _ZN6S693C53v23Ev();
extern void _ZN6S693C53v24Ev();
extern void _ZN6S693C53v25Ev();
extern void _ZN6S693C53v26Ev();
extern void _ZN6S693C53v27Ev();
extern void _ZN6S693C53v28Ev();
extern void _ZN6S693C53v29Ev();
extern void _ZN6S693C53v30Ev();
extern void _ZN6S693C53v31Ev();
extern void _ZN6S693C53v32Ev();
extern void _ZN6S693C53v33Ev();
extern void _ZN6S693C53v34Ev();
extern void _ZN6S693C53v35Ev();
extern void _ZN6S693C53v36Ev();
extern void _ZN6S693C53v37Ev();
extern void _ZN6S693C53v38Ev();
extern void _ZN6S693C53v39Ev();
extern void _ZN6S693C53v40Ev();
extern void _ZN6S693C53v41Ev();
extern void _ZN6S693C53v42Ev();
extern void _ZN6S693C53v43Ev();
extern void _ZN6S693C53v44Ev();
extern void _ZN6S693C53v45Ev();
extern void _ZN6S693C53v46Ev();
extern void _ZN6S693C53v47Ev();
extern void _ZN6S693C53v48Ev();
extern void _ZN6S693C53v49Ev();
extern void _ZN6S693C53v50Ev();
extern void _ZN6S693C53v51Ev();
extern void _ZN6S693C53v52Ev();
extern void _ZN6S693C53v53Ev();
extern void _ZN6S693C53v54Ev();
extern void _ZN6S693C53v55Ev();
extern void _ZN6S693C53v56Ev();
extern void _ZN6S693C53v57Ev();
extern void _ZN6S693C53v58Ev();
extern void _ZN6S693C53v59Ev();
extern void _ZN6S693C53v60Ev();
extern void _ZN6S693C53v61Ev();
extern void _ZN6S693C53v62Ev();
extern void _ZN6S693C53v63Ev();
extern void _ZN6S693C53v64Ev();
extern void _ZN6S693C53v65Ev();
extern void _ZN6S693C53v66Ev();
extern void _ZN6S693C53v67Ev();
extern void _ZN6S693C53v68Ev();
extern void _ZN6S693C53v69Ev();
extern void _ZN6S693C53v70Ev();
extern void _ZN6S693C43v71Ev();
extern void _ZN6S693C43v72Ev();
extern void _ZN6S693C43v73Ev();
extern void _ZN6S693C43v74Ev();
extern void _ZN6S693C43v75Ev();
extern void _ZN6S693C43v76Ev();
extern void _ZN6S693C43v77Ev();
extern void _ZN6S693C43v78Ev();
extern void _ZN6S693C43v79Ev();
extern void _ZN6S693C43v80Ev();
extern void _ZN6S693C43v81Ev();
extern void _ZN6S693C43v82Ev();
extern void _ZN6S693C43v83Ev();
extern void _ZN6S693C43v84Ev();
extern void _ZN6S693C43v85Ev();
extern void _ZN6S693C43v86Ev();
extern void _ZN6S693C43v87Ev();
extern void _ZN6S693C43v88Ev();
extern void _ZN6S693C43v89Ev();
extern void _ZN6S693C43v90Ev();
extern void _ZN6S693C33v91Ev();
extern void _ZN6S693C33v92Ev();
extern void _ZN6S693C33v93Ev();
extern void _ZN6S693C33v94Ev();
extern void _ZN6S693C33v95Ev();
extern void _ZN6S693C33v96Ev();
extern void _ZN6S693C33v97Ev();
extern void _ZN6S693C33v98Ev();
extern void _ZN6S693C33v99Ev();
extern void _ZN6S693C24v100Ev();
extern void _ZN6S693C24v101Ev();
extern void _ZN6S693C24v102Ev();
extern void _ZN6S693C24v103Ev();
extern void _ZN6S693C24v104Ev();
extern void _ZN6S693C24v105Ev();
static  VTBL_ENTRY vtc_S693C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S693C2[0]),
  (VTBL_ENTRY)&_ZN6S693C2D1Ev,
  (VTBL_ENTRY)&_ZN6S693C2D0Ev,
  (VTBL_ENTRY)&_ZN6S693C52v7Ev,
  (VTBL_ENTRY)&_ZN6S693C52v8Ev,
  (VTBL_ENTRY)&_ZN6S693C52v9Ev,
  (VTBL_ENTRY)&_ZN6S693C53v10Ev,
  (VTBL_ENTRY)&_ZN6S693C53v11Ev,
  (VTBL_ENTRY)&_ZN6S693C53v12Ev,
  (VTBL_ENTRY)&_ZN6S693C53v13Ev,
  (VTBL_ENTRY)&_ZN6S693C53v14Ev,
  (VTBL_ENTRY)&_ZN6S693C53v15Ev,
  (VTBL_ENTRY)&_ZN6S693C53v16Ev,
  (VTBL_ENTRY)&_ZN6S693C53v17Ev,
  (VTBL_ENTRY)&_ZN6S693C53v18Ev,
  (VTBL_ENTRY)&_ZN6S693C53v19Ev,
  (VTBL_ENTRY)&_ZN6S693C53v20Ev,
  (VTBL_ENTRY)&_ZN6S693C53v21Ev,
  (VTBL_ENTRY)&_ZN6S693C53v22Ev,
  (VTBL_ENTRY)&_ZN6S693C53v23Ev,
  (VTBL_ENTRY)&_ZN6S693C53v24Ev,
  (VTBL_ENTRY)&_ZN6S693C53v25Ev,
  (VTBL_ENTRY)&_ZN6S693C53v26Ev,
  (VTBL_ENTRY)&_ZN6S693C53v27Ev,
  (VTBL_ENTRY)&_ZN6S693C53v28Ev,
  (VTBL_ENTRY)&_ZN6S693C53v29Ev,
  (VTBL_ENTRY)&_ZN6S693C53v30Ev,
  (VTBL_ENTRY)&_ZN6S693C53v31Ev,
  (VTBL_ENTRY)&_ZN6S693C53v32Ev,
  (VTBL_ENTRY)&_ZN6S693C53v33Ev,
  (VTBL_ENTRY)&_ZN6S693C53v34Ev,
  (VTBL_ENTRY)&_ZN6S693C53v35Ev,
  (VTBL_ENTRY)&_ZN6S693C53v36Ev,
  (VTBL_ENTRY)&_ZN6S693C53v37Ev,
  (VTBL_ENTRY)&_ZN6S693C53v38Ev,
  (VTBL_ENTRY)&_ZN6S693C53v39Ev,
  (VTBL_ENTRY)&_ZN6S693C53v40Ev,
  (VTBL_ENTRY)&_ZN6S693C53v41Ev,
  (VTBL_ENTRY)&_ZN6S693C53v42Ev,
  (VTBL_ENTRY)&_ZN6S693C53v43Ev,
  (VTBL_ENTRY)&_ZN6S693C53v44Ev,
  (VTBL_ENTRY)&_ZN6S693C53v45Ev,
  (VTBL_ENTRY)&_ZN6S693C53v46Ev,
  (VTBL_ENTRY)&_ZN6S693C53v47Ev,
  (VTBL_ENTRY)&_ZN6S693C53v48Ev,
  (VTBL_ENTRY)&_ZN6S693C53v49Ev,
  (VTBL_ENTRY)&_ZN6S693C53v50Ev,
  (VTBL_ENTRY)&_ZN6S693C53v51Ev,
  (VTBL_ENTRY)&_ZN6S693C53v52Ev,
  (VTBL_ENTRY)&_ZN6S693C53v53Ev,
  (VTBL_ENTRY)&_ZN6S693C53v54Ev,
  (VTBL_ENTRY)&_ZN6S693C53v55Ev,
  (VTBL_ENTRY)&_ZN6S693C53v56Ev,
  (VTBL_ENTRY)&_ZN6S693C53v57Ev,
  (VTBL_ENTRY)&_ZN6S693C53v58Ev,
  (VTBL_ENTRY)&_ZN6S693C53v59Ev,
  (VTBL_ENTRY)&_ZN6S693C53v60Ev,
  (VTBL_ENTRY)&_ZN6S693C53v61Ev,
  (VTBL_ENTRY)&_ZN6S693C53v62Ev,
  (VTBL_ENTRY)&_ZN6S693C53v63Ev,
  (VTBL_ENTRY)&_ZN6S693C53v64Ev,
  (VTBL_ENTRY)&_ZN6S693C53v65Ev,
  (VTBL_ENTRY)&_ZN6S693C53v66Ev,
  (VTBL_ENTRY)&_ZN6S693C53v67Ev,
  (VTBL_ENTRY)&_ZN6S693C53v68Ev,
  (VTBL_ENTRY)&_ZN6S693C53v69Ev,
  (VTBL_ENTRY)&_ZN6S693C53v70Ev,
  (VTBL_ENTRY)&_ZN6S693C43v71Ev,
  (VTBL_ENTRY)&_ZN6S693C43v72Ev,
  (VTBL_ENTRY)&_ZN6S693C43v73Ev,
  (VTBL_ENTRY)&_ZN6S693C43v74Ev,
  (VTBL_ENTRY)&_ZN6S693C43v75Ev,
  (VTBL_ENTRY)&_ZN6S693C43v76Ev,
  (VTBL_ENTRY)&_ZN6S693C43v77Ev,
  (VTBL_ENTRY)&_ZN6S693C43v78Ev,
  (VTBL_ENTRY)&_ZN6S693C43v79Ev,
  (VTBL_ENTRY)&_ZN6S693C43v80Ev,
  (VTBL_ENTRY)&_ZN6S693C43v81Ev,
  (VTBL_ENTRY)&_ZN6S693C43v82Ev,
  (VTBL_ENTRY)&_ZN6S693C43v83Ev,
  (VTBL_ENTRY)&_ZN6S693C43v84Ev,
  (VTBL_ENTRY)&_ZN6S693C43v85Ev,
  (VTBL_ENTRY)&_ZN6S693C43v86Ev,
  (VTBL_ENTRY)&_ZN6S693C43v87Ev,
  (VTBL_ENTRY)&_ZN6S693C43v88Ev,
  (VTBL_ENTRY)&_ZN6S693C43v89Ev,
  (VTBL_ENTRY)&_ZN6S693C43v90Ev,
  (VTBL_ENTRY)&_ZN6S693C33v91Ev,
  (VTBL_ENTRY)&_ZN6S693C33v92Ev,
  (VTBL_ENTRY)&_ZN6S693C33v93Ev,
  (VTBL_ENTRY)&_ZN6S693C33v94Ev,
  (VTBL_ENTRY)&_ZN6S693C33v95Ev,
  (VTBL_ENTRY)&_ZN6S693C33v96Ev,
  (VTBL_ENTRY)&_ZN6S693C33v97Ev,
  (VTBL_ENTRY)&_ZN6S693C33v98Ev,
  (VTBL_ENTRY)&_ZN6S693C33v99Ev,
  (VTBL_ENTRY)&_ZN6S693C24v100Ev,
  (VTBL_ENTRY)&_ZN6S693C24v101Ev,
  (VTBL_ENTRY)&_ZN6S693C24v102Ev,
  (VTBL_ENTRY)&_ZN6S693C24v103Ev,
  (VTBL_ENTRY)&_ZN6S693C24v104Ev,
  (VTBL_ENTRY)&_ZN6S693C24v105Ev,
};
extern VTBL_ENTRY _ZTI6S693C2[];
extern  VTBL_ENTRY _ZTV6S693C2[];
Class_Descriptor cd_S693C2 = {  "S693C2", // class name
  bases_S693C2, 3,
  &(vtc_S693C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(120,72), // object size
  NSPAIRA(_ZTI6S693C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S693C2),103, //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  S693C8  {
  int s693c8f0[7];
  char s693c8f1;
  int s693c8f2[4];
  ::S674C29_nt s693c8f3;
  int s693c8f4[7];
  char s693c8f5;
  unsigned int s693c8f6:1;
  unsigned int s693c8f7:1;
  unsigned int s693c8f8:1;
  unsigned int s693c8f9:1;
  int s693c8f10[3];
  char s693c8f11;
  int s693c8f12;
  char s693c8f13;
  int s693c8f14[2];
  ::S674C29_nt s693c8f15;
  int s693c8f16[5];
  void *s693c8f17[3];
  int s693c8f18[3];
  void *s693c8f19[9];
  int s693c8f20;
  void *s693c8f21;
  int s693c8f22;
  void *s693c8f23;
  unsigned int s693c8f24:1;
  unsigned int s693c8f25:1;
  unsigned int s693c8f26:1;
  unsigned int s693c8f27:1;
  void *s693c8f28[3];
  int s693c8f29[2];
  void  mf693c8(); // _ZN6S693C87mf693c8Ev
};
//SIG(-1 S693C8) C1{ m Fi[7] Fc Fi[4] FC2{ m Fi[3]} Fi[7] Fc Fi:1 Fi:1 Fi:1 Fi:1 Fi[3] Fc Fi Fc Fi[2] FC2 Fi[5] Fp[3] Fi[3] Fp[9] Fi Fp Fi Fp Fi:1 Fi:1 Fi:1 Fi:1 Fp[3] Fi[2]}


void  S693C8 ::mf693c8(){}

static void Test_S693C8()
{
  {
    init_simple_test("S693C8");
    static S693C8 lv;
    check2(sizeof(lv), ABISELECT(344,256), "sizeof(S693C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S693C8)");
    check_field_offset(lv, s693c8f0, 0, "S693C8.s693c8f0");
    check_field_offset(lv, s693c8f1, 28, "S693C8.s693c8f1");
    check_field_offset(lv, s693c8f2, 32, "S693C8.s693c8f2");
    check_field_offset(lv, s693c8f3, 48, "S693C8.s693c8f3");
    check_field_offset(lv, s693c8f4, 60, "S693C8.s693c8f4");
    check_field_offset(lv, s693c8f5, 88, "S693C8.s693c8f5");
    set_bf_and_test(lv, s693c8f6, 89, 0, 1, 1, "S693C8");
    set_bf_and_test(lv, s693c8f7, 89, 1, 1, 1, "S693C8");
    set_bf_and_test(lv, s693c8f8, 89, 2, 1, 1, "S693C8");
    set_bf_and_test(lv, s693c8f9, 89, 3, 1, 1, "S693C8");
    check_field_offset(lv, s693c8f10, 92, "S693C8.s693c8f10");
    check_field_offset(lv, s693c8f11, 104, "S693C8.s693c8f11");
    check_field_offset(lv, s693c8f12, 108, "S693C8.s693c8f12");
    check_field_offset(lv, s693c8f13, 112, "S693C8.s693c8f13");
    check_field_offset(lv, s693c8f14, 116, "S693C8.s693c8f14");
    check_field_offset(lv, s693c8f15, 124, "S693C8.s693c8f15");
    check_field_offset(lv, s693c8f16, 136, "S693C8.s693c8f16");
    check_field_offset(lv, s693c8f17, ABISELECT(160,156), "S693C8.s693c8f17");
    check_field_offset(lv, s693c8f18, ABISELECT(184,168), "S693C8.s693c8f18");
    check_field_offset(lv, s693c8f19, ABISELECT(200,180), "S693C8.s693c8f19");
    check_field_offset(lv, s693c8f20, ABISELECT(272,216), "S693C8.s693c8f20");
    check_field_offset(lv, s693c8f21, ABISELECT(280,220), "S693C8.s693c8f21");
    check_field_offset(lv, s693c8f22, ABISELECT(288,224), "S693C8.s693c8f22");
    check_field_offset(lv, s693c8f23, ABISELECT(296,228), "S693C8.s693c8f23");
    set_bf_and_test(lv, s693c8f24, ABISELECT(304,232), 0, 1, 1, "S693C8");
    set_bf_and_test(lv, s693c8f25, ABISELECT(304,232), 1, 1, 1, "S693C8");
    set_bf_and_test(lv, s693c8f26, ABISELECT(304,232), 2, 1, 1, "S693C8");
    set_bf_and_test(lv, s693c8f27, ABISELECT(304,232), 3, 1, 1, "S693C8");
    check_field_offset(lv, s693c8f28, ABISELECT(312,236), "S693C8.s693c8f28");
    check_field_offset(lv, s693c8f29, ABISELECT(336,248), "S693C8.s693c8f29");
  }
}
static Arrange_To_Call_Me vS693C8(Test_S693C8, "S693C8", ABISELECT(344,256));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S693C1  : S693C2 {
  ::S693C8 s693c1f0;
  char s693c1f1;
  int s693c1f2;
  virtual  ~S693C1(); // _ZN6S693C1D1Ev
  virtual void  v1(); // _ZN6S693C12v1Ev
  virtual void  v2(); // _ZN6S693C12v2Ev
  virtual void  v3(); // _ZN6S693C12v3Ev
  virtual void  v4(); // _ZN6S693C12v4Ev
  virtual void  v5(); // _ZN6S693C12v5Ev
  virtual void  v6(); // _ZN6S693C12v6Ev
  S693C1(); // tgen
};
//SIG(1 S693C1) C1{ BC2{ BC3{ BC4{ BC5{ 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 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 Fi FL Fp[4] Fi[2] Fp FC6{ m Fi[2]} Fp[2]} vd v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 FC7{ m}} vd v91 v92 v93 v94 v95 v96 v97 v98 v99} vd v100 v101 v102 v103 v104 v105 Fp Fi:1 Fi:1 Fi:1 Fc} vd v1 v2 v3 v4 v5 v6 FC8{ m Fi[7] Fc Fi[4] FC9{ m Fi[3]} Fi[7] Fc Fi:1 Fi:1 Fi:1 Fi:1 Fi[3] Fc Fi Fc Fi[2] FC9 Fi[5] Fp[3] Fi[3] Fp[9] Fi Fp Fi Fp Fi:1 Fi:1 Fi:1 Fi:1 Fp[3] Fi[2]} Fc Fi}


 S693C1 ::~S693C1(){ note_dtor("S693C1", this);}
void  S693C1 ::v1(){vfunc_called(this, "_ZN6S693C12v1Ev");}
void  S693C1 ::v2(){vfunc_called(this, "_ZN6S693C12v2Ev");}
void  S693C1 ::v3(){vfunc_called(this, "_ZN6S693C12v3Ev");}
void  S693C1 ::v4(){vfunc_called(this, "_ZN6S693C12v4Ev");}
void  S693C1 ::v5(){vfunc_called(this, "_ZN6S693C12v5Ev");}
void  S693C1 ::v6(){vfunc_called(this, "_ZN6S693C12v6Ev");}
S693C1 ::S693C1(){ note_ctor("S693C1", this);} // tgen

static void Test_S693C1()
{
  extern Class_Descriptor cd_S693C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(60,85)];
    init_test(&cd_S693C1, buf);
    S693C1 *dp, &lv = *(dp=new (buf) S693C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(472,336), "sizeof(S693C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S693C1)");
    check_base_class_offset(lv, (S693C5*)(S693C4*)(S693C3*)(S693C2*), 0, "S693C1");
    check_base_class_offset(lv, (S693C4*)(S693C3*)(S693C2*), 0, "S693C1");
    check_base_class_offset(lv, (S693C3*)(S693C2*), 0, "S693C1");
    check_base_class_offset(lv, (S693C2*), 0, "S693C1");
    check_field_offset(lv, s693c1f0, ABISELECT(120,72), "S693C1.s693c1f0");
    check_field_offset(lv, s693c1f1, ABISELECT(464,328), "S693C1.s693c1f1");
    check_field_offset(lv, s693c1f2, ABISELECT(468,332), "S693C1.s693c1f2");
    test_class_info(&lv, &cd_S693C1);
    dp->~S693C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS693C1(Test_S693C1, "S693C1", ABISELECT(472,336));

#else // __cplusplus

extern void _ZN6S693C1C1Ev();
extern void _ZN6S693C1D1Ev();
Name_Map name_map_S693C1[] = {
  NSPAIR(_ZN6S693C1C1Ev),
  NSPAIR(_ZN6S693C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S693C5;
extern VTBL_ENTRY _ZTI6S693C5[];
extern  VTBL_ENTRY _ZTV6S693C5[];
extern Class_Descriptor cd_S693C4;
extern VTBL_ENTRY _ZTI6S693C4[];
extern  VTBL_ENTRY _ZTV6S693C4[];
extern Class_Descriptor cd_S693C3;
extern VTBL_ENTRY _ZTI6S693C3[];
extern  VTBL_ENTRY _ZTV6S693C3[];
extern Class_Descriptor cd_S693C2;
extern VTBL_ENTRY _ZTI6S693C2[];
extern  VTBL_ENTRY _ZTV6S693C2[];
static Base_Class bases_S693C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S693C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S693C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S693C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S693C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S693C1[];
extern void _ZN6S693C1D1Ev();
extern void _ZN6S693C1D0Ev();
extern void _ZN6S693C52v7Ev();
extern void _ZN6S693C52v8Ev();
extern void _ZN6S693C52v9Ev();
extern void _ZN6S693C53v10Ev();
extern void _ZN6S693C53v11Ev();
extern void _ZN6S693C53v12Ev();
extern void _ZN6S693C53v13Ev();
extern void _ZN6S693C53v14Ev();
extern void _ZN6S693C53v15Ev();
extern void _ZN6S693C53v16Ev();
extern void _ZN6S693C53v17Ev();
extern void _ZN6S693C53v18Ev();
extern void _ZN6S693C53v19Ev();
extern void _ZN6S693C53v20Ev();
extern void _ZN6S693C53v21Ev();
extern void _ZN6S693C53v22Ev();
extern void _ZN6S693C53v23Ev();
extern void _ZN6S693C53v24Ev();
extern void _ZN6S693C53v25Ev();
extern void _ZN6S693C53v26Ev();
extern void _ZN6S693C53v27Ev();
extern void _ZN6S693C53v28Ev();
extern void _ZN6S693C53v29Ev();
extern void _ZN6S693C53v30Ev();
extern void _ZN6S693C53v31Ev();
extern void _ZN6S693C53v32Ev();
extern void _ZN6S693C53v33Ev();
extern void _ZN6S693C53v34Ev();
extern void _ZN6S693C53v35Ev();
extern void _ZN6S693C53v36Ev();
extern void _ZN6S693C53v37Ev();
extern void _ZN6S693C53v38Ev();
extern void _ZN6S693C53v39Ev();
extern void _ZN6S693C53v40Ev();
extern void _ZN6S693C53v41Ev();
extern void _ZN6S693C53v42Ev();
extern void _ZN6S693C53v43Ev();
extern void _ZN6S693C53v44Ev();
extern void _ZN6S693C53v45Ev();
extern void _ZN6S693C53v46Ev();
extern void _ZN6S693C53v47Ev();
extern void _ZN6S693C53v48Ev();
extern void _ZN6S693C53v49Ev();
extern void _ZN6S693C53v50Ev();
extern void _ZN6S693C53v51Ev();
extern void _ZN6S693C53v52Ev();
extern void _ZN6S693C53v53Ev();
extern void _ZN6S693C53v54Ev();
extern void _ZN6S693C53v55Ev();
extern void _ZN6S693C53v56Ev();
extern void _ZN6S693C53v57Ev();
extern void _ZN6S693C53v58Ev();
extern void _ZN6S693C53v59Ev();
extern void _ZN6S693C53v60Ev();
extern void _ZN6S693C53v61Ev();
extern void _ZN6S693C53v62Ev();
extern void _ZN6S693C53v63Ev();
extern void _ZN6S693C53v64Ev();
extern void _ZN6S693C53v65Ev();
extern void _ZN6S693C53v66Ev();
extern void _ZN6S693C53v67Ev();
extern void _ZN6S693C53v68Ev();
extern void _ZN6S693C53v69Ev();
extern void _ZN6S693C53v70Ev();
extern void _ZN6S693C43v71Ev();
extern void _ZN6S693C43v72Ev();
extern void _ZN6S693C43v73Ev();
extern void _ZN6S693C43v74Ev();
extern void _ZN6S693C43v75Ev();
extern void _ZN6S693C43v76Ev();
extern void _ZN6S693C43v77Ev();
extern void _ZN6S693C43v78Ev();
extern void _ZN6S693C43v79Ev();
extern void _ZN6S693C43v80Ev();
extern void _ZN6S693C43v81Ev();
extern void _ZN6S693C43v82Ev();
extern void _ZN6S693C43v83Ev();
extern void _ZN6S693C43v84Ev();
extern void _ZN6S693C43v85Ev();
extern void _ZN6S693C43v86Ev();
extern void _ZN6S693C43v87Ev();
extern void _ZN6S693C43v88Ev();
extern void _ZN6S693C43v89Ev();
extern void _ZN6S693C43v90Ev();
extern void _ZN6S693C33v91Ev();
extern void _ZN6S693C33v92Ev();
extern void _ZN6S693C33v93Ev();
extern void _ZN6S693C33v94Ev();
extern void _ZN6S693C33v95Ev();
extern void _ZN6S693C33v96Ev();
extern void _ZN6S693C33v97Ev();
extern void _ZN6S693C33v98Ev();
extern void _ZN6S693C33v99Ev();
extern void _ZN6S693C24v100Ev();
extern void _ZN6S693C24v101Ev();
extern void _ZN6S693C24v102Ev();
extern void _ZN6S693C24v103Ev();
extern void _ZN6S693C24v104Ev();
extern void _ZN6S693C24v105Ev();
extern void _ZN6S693C12v1Ev();
extern void _ZN6S693C12v2Ev();
extern void _ZN6S693C12v3Ev();
extern void _ZN6S693C12v4Ev();
extern void _ZN6S693C12v5Ev();
extern void _ZN6S693C12v6Ev();
static  VTBL_ENTRY vtc_S693C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S693C1[0]),
  (VTBL_ENTRY)&_ZN6S693C1D1Ev,
  (VTBL_ENTRY)&_ZN6S693C1D0Ev,
  (VTBL_ENTRY)&_ZN6S693C52v7Ev,
  (VTBL_ENTRY)&_ZN6S693C52v8Ev,
  (VTBL_ENTRY)&_ZN6S693C52v9Ev,
  (VTBL_ENTRY)&_ZN6S693C53v10Ev,
  (VTBL_ENTRY)&_ZN6S693C53v11Ev,
  (VTBL_ENTRY)&_ZN6S693C53v12Ev,
  (VTBL_ENTRY)&_ZN6S693C53v13Ev,
  (VTBL_ENTRY)&_ZN6S693C53v14Ev,
  (VTBL_ENTRY)&_ZN6S693C53v15Ev,
  (VTBL_ENTRY)&_ZN6S693C53v16Ev,
  (VTBL_ENTRY)&_ZN6S693C53v17Ev,
  (VTBL_ENTRY)&_ZN6S693C53v18Ev,
  (VTBL_ENTRY)&_ZN6S693C53v19Ev,
  (VTBL_ENTRY)&_ZN6S693C53v20Ev,
  (VTBL_ENTRY)&_ZN6S693C53v21Ev,
  (VTBL_ENTRY)&_ZN6S693C53v22Ev,
  (VTBL_ENTRY)&_ZN6S693C53v23Ev,
  (VTBL_ENTRY)&_ZN6S693C53v24Ev,
  (VTBL_ENTRY)&_ZN6S693C53v25Ev,
  (VTBL_ENTRY)&_ZN6S693C53v26Ev,
  (VTBL_ENTRY)&_ZN6S693C53v27Ev,
  (VTBL_ENTRY)&_ZN6S693C53v28Ev,
  (VTBL_ENTRY)&_ZN6S693C53v29Ev,
  (VTBL_ENTRY)&_ZN6S693C53v30Ev,
  (VTBL_ENTRY)&_ZN6S693C53v31Ev,
  (VTBL_ENTRY)&_ZN6S693C53v32Ev,
  (VTBL_ENTRY)&_ZN6S693C53v33Ev,
  (VTBL_ENTRY)&_ZN6S693C53v34Ev,
  (VTBL_ENTRY)&_ZN6S693C53v35Ev,
  (VTBL_ENTRY)&_ZN6S693C53v36Ev,
  (VTBL_ENTRY)&_ZN6S693C53v37Ev,
  (VTBL_ENTRY)&_ZN6S693C53v38Ev,
  (VTBL_ENTRY)&_ZN6S693C53v39Ev,
  (VTBL_ENTRY)&_ZN6S693C53v40Ev,
  (VTBL_ENTRY)&_ZN6S693C53v41Ev,
  (VTBL_ENTRY)&_ZN6S693C53v42Ev,
  (VTBL_ENTRY)&_ZN6S693C53v43Ev,
  (VTBL_ENTRY)&_ZN6S693C53v44Ev,
  (VTBL_ENTRY)&_ZN6S693C53v45Ev,
  (VTBL_ENTRY)&_ZN6S693C53v46Ev,
  (VTBL_ENTRY)&_ZN6S693C53v47Ev,
  (VTBL_ENTRY)&_ZN6S693C53v48Ev,
  (VTBL_ENTRY)&_ZN6S693C53v49Ev,
  (VTBL_ENTRY)&_ZN6S693C53v50Ev,
  (VTBL_ENTRY)&_ZN6S693C53v51Ev,
  (VTBL_ENTRY)&_ZN6S693C53v52Ev,
  (VTBL_ENTRY)&_ZN6S693C53v53Ev,
  (VTBL_ENTRY)&_ZN6S693C53v54Ev,
  (VTBL_ENTRY)&_ZN6S693C53v55Ev,
  (VTBL_ENTRY)&_ZN6S693C53v56Ev,
  (VTBL_ENTRY)&_ZN6S693C53v57Ev,
  (VTBL_ENTRY)&_ZN6S693C53v58Ev,
  (VTBL_ENTRY)&_ZN6S693C53v59Ev,
  (VTBL_ENTRY)&_ZN6S693C53v60Ev,
  (VTBL_ENTRY)&_ZN6S693C53v61Ev,
  (VTBL_ENTRY)&_ZN6S693C53v62Ev,
  (VTBL_ENTRY)&_ZN6S693C53v63Ev,
  (VTBL_ENTRY)&_ZN6S693C53v64Ev,
  (VTBL_ENTRY)&_ZN6S693C53v65Ev,
  (VTBL_ENTRY)&_ZN6S693C53v66Ev,
  (VTBL_ENTRY)&_ZN6S693C53v67Ev,
  (VTBL_ENTRY)&_ZN6S693C53v68Ev,
  (VTBL_ENTRY)&_ZN6S693C53v69Ev,
  (VTBL_ENTRY)&_ZN6S693C53v70Ev,
  (VTBL_ENTRY)&_ZN6S693C43v71Ev,
  (VTBL_ENTRY)&_ZN6S693C43v72Ev,
  (VTBL_ENTRY)&_ZN6S693C43v73Ev,
  (VTBL_ENTRY)&_ZN6S693C43v74Ev,
  (VTBL_ENTRY)&_ZN6S693C43v75Ev,
  (VTBL_ENTRY)&_ZN6S693C43v76Ev,
  (VTBL_ENTRY)&_ZN6S693C43v77Ev,
  (VTBL_ENTRY)&_ZN6S693C43v78Ev,
  (VTBL_ENTRY)&_ZN6S693C43v79Ev,
  (VTBL_ENTRY)&_ZN6S693C43v80Ev,
  (VTBL_ENTRY)&_ZN6S693C43v81Ev,
  (VTBL_ENTRY)&_ZN6S693C43v82Ev,
  (VTBL_ENTRY)&_ZN6S693C43v83Ev,
  (VTBL_ENTRY)&_ZN6S693C43v84Ev,
  (VTBL_ENTRY)&_ZN6S693C43v85Ev,
  (VTBL_ENTRY)&_ZN6S693C43v86Ev,
  (VTBL_ENTRY)&_ZN6S693C43v87Ev,
  (VTBL_ENTRY)&_ZN6S693C43v88Ev,
  (VTBL_ENTRY)&_ZN6S693C43v89Ev,
  (VTBL_ENTRY)&_ZN6S693C43v90Ev,
  (VTBL_ENTRY)&_ZN6S693C33v91Ev,
  (VTBL_ENTRY)&_ZN6S693C33v92Ev,
  (VTBL_ENTRY)&_ZN6S693C33v93Ev,
  (VTBL_ENTRY)&_ZN6S693C33v94Ev,
  (VTBL_ENTRY)&_ZN6S693C33v95Ev,
  (VTBL_ENTRY)&_ZN6S693C33v96Ev,
  (VTBL_ENTRY)&_ZN6S693C33v97Ev,
  (VTBL_ENTRY)&_ZN6S693C33v98Ev,
  (VTBL_ENTRY)&_ZN6S693C33v99Ev,
  (VTBL_ENTRY)&_ZN6S693C24v100Ev,
  (VTBL_ENTRY)&_ZN6S693C24v101Ev,
  (VTBL_ENTRY)&_ZN6S693C24v102Ev,
  (VTBL_ENTRY)&_ZN6S693C24v103Ev,
  (VTBL_ENTRY)&_ZN6S693C24v104Ev,
  (VTBL_ENTRY)&_ZN6S693C24v105Ev,
  (VTBL_ENTRY)&_ZN6S693C12v1Ev,
  (VTBL_ENTRY)&_ZN6S693C12v2Ev,
  (VTBL_ENTRY)&_ZN6S693C12v3Ev,
  (VTBL_ENTRY)&_ZN6S693C12v4Ev,
  (VTBL_ENTRY)&_ZN6S693C12v5Ev,
  (VTBL_ENTRY)&_ZN6S693C12v6Ev,
};
extern VTBL_ENTRY _ZTI6S693C1[];
extern  VTBL_ENTRY _ZTV6S693C1[];
Class_Descriptor cd_S693C1 = {  "S693C1", // class name
  bases_S693C1, 4,
  &(vtc_S693C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(472,336), // object size
  NSPAIRA(_ZTI6S693C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S693C1),109, //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  S1289C4  {
  int s1289c4f0;
  __tsi64 s1289c4f1;
  void *s1289c4f2[4];
  int s1289c4f3[2];
  void *s1289c4f4;
  ::S674C6_nt s1289c4f5;
  void *s1289c4f6[2];
  virtual  ~S1289C4(); // _ZN7S1289C4D1Ev
  virtual void  v10(); // _ZN7S1289C43v10Ev
  virtual void  v11(); // _ZN7S1289C43v11Ev
  virtual void  v12(); // _ZN7S1289C43v12Ev
  virtual void  v13(); // _ZN7S1289C43v13Ev
  virtual void  v14(); // _ZN7S1289C43v14Ev
  virtual void  v15(); // _ZN7S1289C43v15Ev
  virtual void  v16(); // _ZN7S1289C43v16Ev
  virtual void  v17(); // _ZN7S1289C43v17Ev
  virtual void  v18(); // _ZN7S1289C43v18Ev
  virtual void  v19(); // _ZN7S1289C43v19Ev
  virtual void  v20(); // _ZN7S1289C43v20Ev
  virtual void  v21(); // _ZN7S1289C43v21Ev
  virtual void  v22(); // _ZN7S1289C43v22Ev
  virtual void  v23(); // _ZN7S1289C43v23Ev
  virtual void  v24(); // _ZN7S1289C43v24Ev
  virtual void  v25(); // _ZN7S1289C43v25Ev
  virtual void  v26(); // _ZN7S1289C43v26Ev
  virtual void  v27(); // _ZN7S1289C43v27Ev
  virtual void  v28(); // _ZN7S1289C43v28Ev
  virtual void  v29(); // _ZN7S1289C43v29Ev
  virtual void  v30(); // _ZN7S1289C43v30Ev
  virtual void  v31(); // _ZN7S1289C43v31Ev
  virtual void  v32(); // _ZN7S1289C43v32Ev
  virtual void  v33(); // _ZN7S1289C43v33Ev
  virtual void  v34(); // _ZN7S1289C43v34Ev
  virtual void  v35(); // _ZN7S1289C43v35Ev
  virtual void  v36(); // _ZN7S1289C43v36Ev
  virtual void  v37(); // _ZN7S1289C43v37Ev
  virtual void  v38(); // _ZN7S1289C43v38Ev
  virtual void  v39(); // _ZN7S1289C43v39Ev
  virtual void  v40(); // _ZN7S1289C43v40Ev
  virtual void  v41(); // _ZN7S1289C43v41Ev
  virtual void  v42(); // _ZN7S1289C43v42Ev
  virtual void  v43(); // _ZN7S1289C43v43Ev
  virtual void  v44(); // _ZN7S1289C43v44Ev
  virtual void  v45(); // _ZN7S1289C43v45Ev
  virtual void  v46(); // _ZN7S1289C43v46Ev
  virtual void  v47(); // _ZN7S1289C43v47Ev
  virtual void  v48(); // _ZN7S1289C43v48Ev
  virtual void  v49(); // _ZN7S1289C43v49Ev
  virtual void  v50(); // _ZN7S1289C43v50Ev
  virtual void  v51(); // _ZN7S1289C43v51Ev
  virtual void  v52(); // _ZN7S1289C43v52Ev
  virtual void  v53(); // _ZN7S1289C43v53Ev
  virtual void  v54(); // _ZN7S1289C43v54Ev
  virtual void  v55(); // _ZN7S1289C43v55Ev
  virtual void  v56(); // _ZN7S1289C43v56Ev
  virtual void  v57(); // _ZN7S1289C43v57Ev
  virtual void  v58(); // _ZN7S1289C43v58Ev
  virtual void  v59(); // _ZN7S1289C43v59Ev
  virtual void  v60(); // _ZN7S1289C43v60Ev
  virtual void  v61(); // _ZN7S1289C43v61Ev
  virtual void  v62(); // _ZN7S1289C43v62Ev
  virtual void  v63(); // _ZN7S1289C43v63Ev
  virtual void  v64(); // _ZN7S1289C43v64Ev
  virtual void  v65(); // _ZN7S1289C43v65Ev
  virtual void  v66(); // _ZN7S1289C43v66Ev
  virtual void  v67(); // _ZN7S1289C43v67Ev
  virtual void  v68(); // _ZN7S1289C43v68Ev
  virtual void  v69(); // _ZN7S1289C43v69Ev
  virtual void  v70(); // _ZN7S1289C43v70Ev
  virtual void  v71(); // _ZN7S1289C43v71Ev
  virtual void  v72(); // _ZN7S1289C43v72Ev
  virtual void  v73(); // _ZN7S1289C43v73Ev
  S1289C4(); // tgen
};
//SIG(-1 S1289C4) 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]}


 S1289C4 ::~S1289C4(){ note_dtor("S1289C4", this);}
void  S1289C4 ::v10(){vfunc_called(this, "_ZN7S1289C43v10Ev");}
void  S1289C4 ::v11(){vfunc_called(this, "_ZN7S1289C43v11Ev");}
void  S1289C4 ::v12(){vfunc_called(this, "_ZN7S1289C43v12Ev");}
void  S1289C4 ::v13(){vfunc_called(this, "_ZN7S1289C43v13Ev");}
void  S1289C4 ::v14(){vfunc_called(this, "_ZN7S1289C43v14Ev");}
void  S1289C4 ::v15(){vfunc_called(this, "_ZN7S1289C43v15Ev");}
void  S1289C4 ::v16(){vfunc_called(this, "_ZN7S1289C43v16Ev");}
void  S1289C4 ::v17(){vfunc_called(this, "_ZN7S1289C43v17Ev");}
void  S1289C4 ::v18(){vfunc_called(this, "_ZN7S1289C43v18Ev");}
void  S1289C4 ::v19(){vfunc_called(this, "_ZN7S1289C43v19Ev");}
void  S1289C4 ::v20(){vfunc_called(this, "_ZN7S1289C43v20Ev");}
void  S1289C4 ::v21(){vfunc_called(this, "_ZN7S1289C43v21Ev");}
void  S1289C4 ::v22(){vfunc_called(this, "_ZN7S1289C43v22Ev");}
void  S1289C4 ::v23(){vfunc_called(this, "_ZN7S1289C43v23Ev");}
void  S1289C4 ::v24(){vfunc_called(this, "_ZN7S1289C43v24Ev");}
void  S1289C4 ::v25(){vfunc_called(this, "_ZN7S1289C43v25Ev");}
void  S1289C4 ::v26(){vfunc_called(this, "_ZN7S1289C43v26Ev");}
void  S1289C4 ::v27(){vfunc_called(this, "_ZN7S1289C43v27Ev");}
void  S1289C4 ::v28(){vfunc_called(this, "_ZN7S1289C43v28Ev");}
void  S1289C4 ::v29(){vfunc_called(this, "_ZN7S1289C43v29Ev");}
void  S1289C4 ::v30(){vfunc_called(this, "_ZN7S1289C43v30Ev");}
void  S1289C4 ::v31(){vfunc_called(this, "_ZN7S1289C43v31Ev");}
void  S1289C4 ::v32(){vfunc_called(this, "_ZN7S1289C43v32Ev");}
void  S1289C4 ::v33(){vfunc_called(this, "_ZN7S1289C43v33Ev");}
void  S1289C4 ::v34(){vfunc_called(this, "_ZN7S1289C43v34Ev");}
void  S1289C4 ::v35(){vfunc_called(this, "_ZN7S1289C43v35Ev");}
void  S1289C4 ::v36(){vfunc_called(this, "_ZN7S1289C43v36Ev");}
void  S1289C4 ::v37(){vfunc_called(this, "_ZN7S1289C43v37Ev");}
void  S1289C4 ::v38(){vfunc_called(this, "_ZN7S1289C43v38Ev");}
void  S1289C4 ::v39(){vfunc_called(this, "_ZN7S1289C43v39Ev");}
void  S1289C4 ::v40(){vfunc_called(this, "_ZN7S1289C43v40Ev");}
void  S1289C4 ::v41(){vfunc_called(this, "_ZN7S1289C43v41Ev");}
void  S1289C4 ::v42(){vfunc_called(this, "_ZN7S1289C43v42Ev");}
void  S1289C4 ::v43(){vfunc_called(this, "_ZN7S1289C43v43Ev");}
void  S1289C4 ::v44(){vfunc_called(this, "_ZN7S1289C43v44Ev");}
void  S1289C4 ::v45(){vfunc_called(this, "_ZN7S1289C43v45Ev");}
void  S1289C4 ::v46(){vfunc_called(this, "_ZN7S1289C43v46Ev");}
void  S1289C4 ::v47(){vfunc_called(this, "_ZN7S1289C43v47Ev");}
void  S1289C4 ::v48(){vfunc_called(this, "_ZN7S1289C43v48Ev");}
void  S1289C4 ::v49(){vfunc_called(this, "_ZN7S1289C43v49Ev");}
void  S1289C4 ::v50(){vfunc_called(this, "_ZN7S1289C43v50Ev");}
void  S1289C4 ::v51(){vfunc_called(this, "_ZN7S1289C43v51Ev");}
void  S1289C4 ::v52(){vfunc_called(this, "_ZN7S1289C43v52Ev");}
void  S1289C4 ::v53(){vfunc_called(this, "_ZN7S1289C43v53Ev");}
void  S1289C4 ::v54(){vfunc_called(this, "_ZN7S1289C43v54Ev");}
void  S1289C4 ::v55(){vfunc_called(this, "_ZN7S1289C43v55Ev");}
void  S1289C4 ::v56(){vfunc_called(this, "_ZN7S1289C43v56Ev");}
void  S1289C4 ::v57(){vfunc_called(this, "_ZN7S1289C43v57Ev");}
void  S1289C4 ::v58(){vfunc_called(this, "_ZN7S1289C43v58Ev");}
void  S1289C4 ::v59(){vfunc_called(this, "_ZN7S1289C43v59Ev");}
void  S1289C4 ::v60(){vfunc_called(this, "_ZN7S1289C43v60Ev");}
void  S1289C4 ::v61(){vfunc_called(this, "_ZN7S1289C43v61Ev");}
void  S1289C4 ::v62(){vfunc_called(this, "_ZN7S1289C43v62Ev");}
void  S1289C4 ::v63(){vfunc_called(this, "_ZN7S1289C43v63Ev");}
void  S1289C4 ::v64(){vfunc_called(this, "_ZN7S1289C43v64Ev");}
void  S1289C4 ::v65(){vfunc_called(this, "_ZN7S1289C43v65Ev");}
void  S1289C4 ::v66(){vfunc_called(this, "_ZN7S1289C43v66Ev");}
void  S1289C4 ::v67(){vfunc_called(this, "_ZN7S1289C43v67Ev");}
void  S1289C4 ::v68(){vfunc_called(this, "_ZN7S1289C43v68Ev");}
void  S1289C4 ::v69(){vfunc_called(this, "_ZN7S1289C43v69Ev");}
void  S1289C4 ::v70(){vfunc_called(this, "_ZN7S1289C43v70Ev");}
void  S1289C4 ::v71(){vfunc_called(this, "_ZN7S1289C43v71Ev");}
void  S1289C4 ::v72(){vfunc_called(this, "_ZN7S1289C43v72Ev");}
void  S1289C4 ::v73(){vfunc_called(this, "_ZN7S1289C43v73Ev");}
S1289C4 ::S1289C4(){ note_ctor("S1289C4", this);} // tgen

static void Test_S1289C4()
{
  extern Class_Descriptor cd_S1289C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S1289C4, buf);
    S1289C4 *dp, &lv = *(dp=new (buf) S1289C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S1289C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1289C4)");
    check_field_offset(lv, s1289c4f0, ABISELECT(8,4), "S1289C4.s1289c4f0");
    check_field_offset(lv, s1289c4f1, ABISELECT(16,8), "S1289C4.s1289c4f1");
    check_field_offset(lv, s1289c4f2, ABISELECT(24,16), "S1289C4.s1289c4f2");
    check_field_offset(lv, s1289c4f3, ABISELECT(56,32), "S1289C4.s1289c4f3");
    check_field_offset(lv, s1289c4f4, ABISELECT(64,40), "S1289C4.s1289c4f4");
    check_field_offset(lv, s1289c4f5, ABISELECT(72,44), "S1289C4.s1289c4f5");
    check_field_offset(lv, s1289c4f6, ABISELECT(80,52), "S1289C4.s1289c4f6");
    test_class_info(&lv, &cd_S1289C4);
    dp->~S1289C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1289C4(Test_S1289C4, "S1289C4", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN7S1289C4C1Ev();
extern void _ZN7S1289C4D1Ev();
Name_Map name_map_S1289C4[] = {
  NSPAIR(_ZN7S1289C4C1Ev),
  NSPAIR(_ZN7S1289C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S1289C4[];
extern void _ZN7S1289C4D1Ev();
extern void _ZN7S1289C4D0Ev();
extern void _ZN7S1289C43v10Ev();
extern void _ZN7S1289C43v11Ev();
extern void _ZN7S1289C43v12Ev();
extern void _ZN7S1289C43v13Ev();
extern void _ZN7S1289C43v14Ev();
extern void _ZN7S1289C43v15Ev();
extern void _ZN7S1289C43v16Ev();
extern void _ZN7S1289C43v17Ev();
extern void _ZN7S1289C43v18Ev();
extern void _ZN7S1289C43v19Ev();
extern void _ZN7S1289C43v20Ev();
extern void _ZN7S1289C43v21Ev();
extern void _ZN7S1289C43v22Ev();
extern void _ZN7S1289C43v23Ev();
extern void _ZN7S1289C43v24Ev();
extern void _ZN7S1289C43v25Ev();
extern void _ZN7S1289C43v26Ev();
extern void _ZN7S1289C43v27Ev();
extern void _ZN7S1289C43v28Ev();
extern void _ZN7S1289C43v29Ev();
extern void _ZN7S1289C43v30Ev();
extern void _ZN7S1289C43v31Ev();
extern void _ZN7S1289C43v32Ev();
extern void _ZN7S1289C43v33Ev();
extern void _ZN7S1289C43v34Ev();
extern void _ZN7S1289C43v35Ev();
extern void _ZN7S1289C43v36Ev();
extern void _ZN7S1289C43v37Ev();
extern void _ZN7S1289C43v38Ev();
extern void _ZN7S1289C43v39Ev();
extern void _ZN7S1289C43v40Ev();
extern void _ZN7S1289C43v41Ev();
extern void _ZN7S1289C43v42Ev();
extern void _ZN7S1289C43v43Ev();
extern void _ZN7S1289C43v44Ev();
extern void _ZN7S1289C43v45Ev();
extern void _ZN7S1289C43v46Ev();
extern void _ZN7S1289C43v47Ev();
extern void _ZN7S1289C43v48Ev();
extern void _ZN7S1289C43v49Ev();
extern void _ZN7S1289C43v50Ev();
extern void _ZN7S1289C43v51Ev();
extern void _ZN7S1289C43v52Ev();
extern void _ZN7S1289C43v53Ev();
extern void _ZN7S1289C43v54Ev();
extern void _ZN7S1289C43v55Ev();
extern void _ZN7S1289C43v56Ev();
extern void _ZN7S1289C43v57Ev();
extern void _ZN7S1289C43v58Ev();
extern void _ZN7S1289C43v59Ev();
extern void _ZN7S1289C43v60Ev();
extern void _ZN7S1289C43v61Ev();
extern void _ZN7S1289C43v62Ev();
extern void _ZN7S1289C43v63Ev();
extern void _ZN7S1289C43v64Ev();
extern void _ZN7S1289C43v65Ev();
extern void _ZN7S1289C43v66Ev();
extern void _ZN7S1289C43v67Ev();
extern void _ZN7S1289C43v68Ev();
extern void _ZN7S1289C43v69Ev();
extern void _ZN7S1289C43v70Ev();
extern void _ZN7S1289C43v71Ev();
extern void _ZN7S1289C43v72Ev();
extern void _ZN7S1289C43v73Ev();
static  VTBL_ENTRY vtc_S1289C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1289C4[0]),
  (VTBL_ENTRY)&_ZN7S1289C4D1Ev,
  (VTBL_ENTRY)&_ZN7S1289C4D0Ev,
  (VTBL_ENTRY)&_ZN7S1289C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1289C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1289C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1289C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1289C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1289C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1289C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1289C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1289C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1289C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1289C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1289C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1289C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1289C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1289C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1289C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1289C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1289C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1289C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1289C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1289C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1289C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1289C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1289C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1289C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1289C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1289C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1289C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1289C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1289C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1289C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1289C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1289C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1289C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1289C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1289C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1289C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1289C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1289C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1289C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1289C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1289C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1289C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1289C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1289C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1289C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1289C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1289C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1289C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1289C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1289C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1289C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1289C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1289C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1289C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1289C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1289C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1289C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1289C43v68Ev,
  (VTBL_ENTRY)&_ZN7S1289C43v69Ev,
  (VTBL_ENTRY)&_ZN7S1289C43v70Ev,
  (VTBL_ENTRY)&_ZN7S1289C43v71Ev,
  (VTBL_ENTRY)&_ZN7S1289C43v72Ev,
  (VTBL_ENTRY)&_ZN7S1289C43v73Ev,
};
extern VTBL_ENTRY _ZTI7S1289C4[];
extern  VTBL_ENTRY _ZTV7S1289C4[];
Class_Descriptor cd_S1289C4 = {  "S1289C4", // class name
  0,0,//no base classes
  &(vtc_S1289C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI7S1289C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S1289C4),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  S1289C3  : S1289C4 {
  unsigned int s1289c3f0:1;
  unsigned int s1289c3f1:1;
  unsigned int s1289c3f2:1;
  unsigned int s1289c3f3:1;
  unsigned int s1289c3f4:1;
  unsigned int s1289c3f5:1;
  unsigned int s1289c3f6:1;
  ::S3625C32 s1289c3f7;
  virtual  ~S1289C3(); // _ZN7S1289C3D1Ev
  virtual void  v74(); // _ZN7S1289C33v74Ev
  virtual void  v75(); // _ZN7S1289C33v75Ev
  virtual void  v76(); // _ZN7S1289C33v76Ev
  virtual void  v77(); // _ZN7S1289C33v77Ev
  virtual void  v78(); // _ZN7S1289C33v78Ev
  virtual void  v79(); // _ZN7S1289C33v79Ev
  virtual void  v80(); // _ZN7S1289C33v80Ev
  virtual void  v81(); // _ZN7S1289C33v81Ev
  virtual void  v82(); // _ZN7S1289C33v82Ev
  virtual void  v83(); // _ZN7S1289C33v83Ev
  virtual void  v84(); // _ZN7S1289C33v84Ev
  virtual void  v85(); // _ZN7S1289C33v85Ev
  virtual void  v86(); // _ZN7S1289C33v86Ev
  virtual void  v87(); // _ZN7S1289C33v87Ev
  virtual void  v88(); // _ZN7S1289C33v88Ev
  virtual void  v89(); // _ZN7S1289C33v89Ev
  virtual void  v90(); // _ZN7S1289C33v90Ev
  virtual void  v91(); // _ZN7S1289C33v91Ev
  virtual void  v92(); // _ZN7S1289C33v92Ev
  virtual void  v93(); // _ZN7S1289C33v93Ev
  S1289C3(); // tgen
};
//SIG(-1 S1289C3) C1{ BC2{ 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 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 Fi FL Fp[4] Fi[2] Fp FC3{ m Fi[2]} Fp[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 FC4{ m}}


 S1289C3 ::~S1289C3(){ note_dtor("S1289C3", this);}
void  S1289C3 ::v74(){vfunc_called(this, "_ZN7S1289C33v74Ev");}
void  S1289C3 ::v75(){vfunc_called(this, "_ZN7S1289C33v75Ev");}
void  S1289C3 ::v76(){vfunc_called(this, "_ZN7S1289C33v76Ev");}
void  S1289C3 ::v77(){vfunc_called(this, "_ZN7S1289C33v77Ev");}
void  S1289C3 ::v78(){vfunc_called(this, "_ZN7S1289C33v78Ev");}
void  S1289C3 ::v79(){vfunc_called(this, "_ZN7S1289C33v79Ev");}
void  S1289C3 ::v80(){vfunc_called(this, "_ZN7S1289C33v80Ev");}
void  S1289C3 ::v81(){vfunc_called(this, "_ZN7S1289C33v81Ev");}
void  S1289C3 ::v82(){vfunc_called(this, "_ZN7S1289C33v82Ev");}
void  S1289C3 ::v83(){vfunc_called(this, "_ZN7S1289C33v83Ev");}
void  S1289C3 ::v84(){vfunc_called(this, "_ZN7S1289C33v84Ev");}
void  S1289C3 ::v85(){vfunc_called(this, "_ZN7S1289C33v85Ev");}
void  S1289C3 ::v86(){vfunc_called(this, "_ZN7S1289C33v86Ev");}
void  S1289C3 ::v87(){vfunc_called(this, "_ZN7S1289C33v87Ev");}
void  S1289C3 ::v88(){vfunc_called(this, "_ZN7S1289C33v88Ev");}
void  S1289C3 ::v89(){vfunc_called(this, "_ZN7S1289C33v89Ev");}
void  S1289C3 ::v90(){vfunc_called(this, "_ZN7S1289C33v90Ev");}
void  S1289C3 ::v91(){vfunc_called(this, "_ZN7S1289C33v91Ev");}
void  S1289C3 ::v92(){vfunc_called(this, "_ZN7S1289C33v92Ev");}
void  S1289C3 ::v93(){vfunc_called(this, "_ZN7S1289C33v93Ev");}
S1289C3 ::S1289C3(){ note_ctor("S1289C3", this);} // tgen

static void Test_S1289C3()
{
  extern Class_Descriptor cd_S1289C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(14,17)];
    init_test(&cd_S1289C3, buf);
    S1289C3 *dp, &lv = *(dp=new (buf) S1289C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(104,64), "sizeof(S1289C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1289C3)");
    check_base_class_offset(lv, (S1289C4*), 0, "S1289C3");
    set_bf_and_test(lv, s1289c3f0, ABISELECT(96,60), 0, 1, 1, "S1289C3");
    set_bf_and_test(lv, s1289c3f1, ABISELECT(96,60), 1, 1, 1, "S1289C3");
    set_bf_and_test(lv, s1289c3f2, ABISELECT(96,60), 2, 1, 1, "S1289C3");
    set_bf_and_test(lv, s1289c3f3, ABISELECT(96,60), 3, 1, 1, "S1289C3");
    set_bf_and_test(lv, s1289c3f4, ABISELECT(96,60), 4, 1, 1, "S1289C3");
    set_bf_and_test(lv, s1289c3f5, ABISELECT(96,60), 5, 1, 1, "S1289C3");
    set_bf_and_test(lv, s1289c3f6, ABISELECT(96,60), 6, 1, 1, "S1289C3");
    check_field_offset(lv, s1289c3f7, ABISELECT(97,61), "S1289C3.s1289c3f7");
    test_class_info(&lv, &cd_S1289C3);
    dp->~S1289C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1289C3(Test_S1289C3, "S1289C3", ABISELECT(104,64));

#else // __cplusplus

extern void _ZN7S1289C3C1Ev();
extern void _ZN7S1289C3D1Ev();
Name_Map name_map_S1289C3[] = {
  NSPAIR(_ZN7S1289C3C1Ev),
  NSPAIR(_ZN7S1289C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1289C4;
extern VTBL_ENTRY _ZTI7S1289C4[];
extern  VTBL_ENTRY _ZTV7S1289C4[];
static Base_Class bases_S1289C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1289C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI7S1289C3[];
extern void _ZN7S1289C3D1Ev();
extern void _ZN7S1289C3D0Ev();
extern void _ZN7S1289C43v10Ev();
extern void _ZN7S1289C43v11Ev();
extern void _ZN7S1289C43v12Ev();
extern void _ZN7S1289C43v13Ev();
extern void _ZN7S1289C43v14Ev();
extern void _ZN7S1289C43v15Ev();
extern void _ZN7S1289C43v16Ev();
extern void _ZN7S1289C43v17Ev();
extern void _ZN7S1289C43v18Ev();
extern void _ZN7S1289C43v19Ev();
extern void _ZN7S1289C43v20Ev();
extern void _ZN7S1289C43v21Ev();
extern void _ZN7S1289C43v22Ev();
extern void _ZN7S1289C43v23Ev();
extern void _ZN7S1289C43v24Ev();
extern void _ZN7S1289C43v25Ev();
extern void _ZN7S1289C43v26Ev();
extern void _ZN7S1289C43v27Ev();
extern void _ZN7S1289C43v28Ev();
extern void _ZN7S1289C43v29Ev();
extern void _ZN7S1289C43v30Ev();
extern void _ZN7S1289C43v31Ev();
extern void _ZN7S1289C43v32Ev();
extern void _ZN7S1289C43v33Ev();
extern void _ZN7S1289C43v34Ev();
extern void _ZN7S1289C43v35Ev();
extern void _ZN7S1289C43v36Ev();
extern void _ZN7S1289C43v37Ev();
extern void _ZN7S1289C43v38Ev();
extern void _ZN7S1289C43v39Ev();
extern void _ZN7S1289C43v40Ev();
extern void _ZN7S1289C43v41Ev();
extern void _ZN7S1289C43v42Ev();
extern void _ZN7S1289C43v43Ev();
extern void _ZN7S1289C43v44Ev();
extern void _ZN7S1289C43v45Ev();
extern void _ZN7S1289C43v46Ev();
extern void _ZN7S1289C43v47Ev();
extern void _ZN7S1289C43v48Ev();
extern void _ZN7S1289C43v49Ev();
extern void _ZN7S1289C43v50Ev();
extern void _ZN7S1289C43v51Ev();
extern void _ZN7S1289C43v52Ev();
extern void _ZN7S1289C43v53Ev();
extern void _ZN7S1289C43v54Ev();
extern void _ZN7S1289C43v55Ev();
extern void _ZN7S1289C43v56Ev();
extern void _ZN7S1289C43v57Ev();
extern void _ZN7S1289C43v58Ev();
extern void _ZN7S1289C43v59Ev();
extern void _ZN7S1289C43v60Ev();
extern void _ZN7S1289C43v61Ev();
extern void _ZN7S1289C43v62Ev();
extern void _ZN7S1289C43v63Ev();
extern void _ZN7S1289C43v64Ev();
extern void _ZN7S1289C43v65Ev();
extern void _ZN7S1289C43v66Ev();
extern void _ZN7S1289C43v67Ev();
extern void _ZN7S1289C43v68Ev();
extern void _ZN7S1289C43v69Ev();
extern void _ZN7S1289C43v70Ev();
extern void _ZN7S1289C43v71Ev();
extern void _ZN7S1289C43v72Ev();
extern void _ZN7S1289C43v73Ev();
extern void _ZN7S1289C33v74Ev();
extern void _ZN7S1289C33v75Ev();
extern void _ZN7S1289C33v76Ev();
extern void _ZN7S1289C33v77Ev();
extern void _ZN7S1289C33v78Ev();
extern void _ZN7S1289C33v79Ev();
extern void _ZN7S1289C33v80Ev();
extern void _ZN7S1289C33v81Ev();
extern void _ZN7S1289C33v82Ev();
extern void _ZN7S1289C33v83Ev();
extern void _ZN7S1289C33v84Ev();
extern void _ZN7S1289C33v85Ev();
extern void _ZN7S1289C33v86Ev();
extern void _ZN7S1289C33v87Ev();
extern void _ZN7S1289C33v88Ev();
extern void _ZN7S1289C33v89Ev();
extern void _ZN7S1289C33v90Ev();
extern void _ZN7S1289C33v91Ev();
extern void _ZN7S1289C33v92Ev();
extern void _ZN7S1289C33v93Ev();
static  VTBL_ENTRY vtc_S1289C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1289C3[0]),
  (VTBL_ENTRY)&_ZN7S1289C3D1Ev,
  (VTBL_ENTRY)&_ZN7S1289C3D0Ev,
  (VTBL_ENTRY)&_ZN7S1289C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1289C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1289C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1289C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1289C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1289C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1289C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1289C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1289C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1289C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1289C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1289C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1289C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1289C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1289C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1289C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1289C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1289C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1289C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1289C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1289C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1289C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1289C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1289C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1289C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1289C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1289C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1289C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1289C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1289C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1289C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1289C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1289C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1289C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1289C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1289C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1289C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1289C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1289C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1289C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1289C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1289C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1289C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1289C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1289C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1289C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1289C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1289C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1289C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1289C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1289C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1289C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1289C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1289C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1289C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1289C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1289C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1289C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1289C43v68Ev,
  (VTBL_ENTRY)&_ZN7S1289C43v69Ev,
  (VTBL_ENTRY)&_ZN7S1289C43v70Ev,
  (VTBL_ENTRY)&_ZN7S1289C43v71Ev,
  (VTBL_ENTRY)&_ZN7S1289C43v72Ev,
  (VTBL_ENTRY)&_ZN7S1289C43v73Ev,
  (VTBL_ENTRY)&_ZN7S1289C33v74Ev,
  (VTBL_ENTRY)&_ZN7S1289C33v75Ev,
  (VTBL_ENTRY)&_ZN7S1289C33v76Ev,
  (VTBL_ENTRY)&_ZN7S1289C33v77Ev,
  (VTBL_ENTRY)&_ZN7S1289C33v78Ev,
  (VTBL_ENTRY)&_ZN7S1289C33v79Ev,
  (VTBL_ENTRY)&_ZN7S1289C33v80Ev,
  (VTBL_ENTRY)&_ZN7S1289C33v81Ev,
  (VTBL_ENTRY)&_ZN7S1289C33v82Ev,
  (VTBL_ENTRY)&_ZN7S1289C33v83Ev,
  (VTBL_ENTRY)&_ZN7S1289C33v84Ev,
  (VTBL_ENTRY)&_ZN7S1289C33v85Ev,
  (VTBL_ENTRY)&_ZN7S1289C33v86Ev,
  (VTBL_ENTRY)&_ZN7S1289C33v87Ev,
  (VTBL_ENTRY)&_ZN7S1289C33v88Ev,
  (VTBL_ENTRY)&_ZN7S1289C33v89Ev,
  (VTBL_ENTRY)&_ZN7S1289C33v90Ev,
  (VTBL_ENTRY)&_ZN7S1289C33v91Ev,
  (VTBL_ENTRY)&_ZN7S1289C33v92Ev,
  (VTBL_ENTRY)&_ZN7S1289C33v93Ev,
};
extern VTBL_ENTRY _ZTI7S1289C3[];
extern  VTBL_ENTRY _ZTV7S1289C3[];
Class_Descriptor cd_S1289C3 = {  "S1289C3", // class name
  bases_S1289C3, 1,
  &(vtc_S1289C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(104,64), // object size
  NSPAIRA(_ZTI7S1289C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1289C3),88, //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  S1289C2  : S1289C3 {
  ::S674C42 s1289c2f0;
  virtual  ~S1289C2(); // _ZN7S1289C2D1Ev
  virtual void  v94(); // _ZN7S1289C23v94Ev
  virtual void  v95(); // _ZN7S1289C23v95Ev
  virtual void  v96(); // _ZN7S1289C23v96Ev
  virtual void  v97(); // _ZN7S1289C23v97Ev
  S1289C2(); // tgen
};
//SIG(-1 S1289C2) C1{ BC2{ BC3{ 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 FC4{ m Fi[2]} Fp[2]} vd v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 FC5{ m}} vd v1 v2 v3 v4 FC6{ BC7{ BC8{ m Fp Fi[2]}}}}


 S1289C2 ::~S1289C2(){ note_dtor("S1289C2", this);}
void  S1289C2 ::v94(){vfunc_called(this, "_ZN7S1289C23v94Ev");}
void  S1289C2 ::v95(){vfunc_called(this, "_ZN7S1289C23v95Ev");}
void  S1289C2 ::v96(){vfunc_called(this, "_ZN7S1289C23v96Ev");}
void  S1289C2 ::v97(){vfunc_called(this, "_ZN7S1289C23v97Ev");}
S1289C2 ::S1289C2(){ note_ctor("S1289C2", this);} // tgen

static void Test_S1289C2()
{
  extern Class_Descriptor cd_S1289C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(16,20)];
    init_test(&cd_S1289C2, buf);
    S1289C2 *dp, &lv = *(dp=new (buf) S1289C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(120,76), "sizeof(S1289C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1289C2)");
    check_base_class_offset(lv, (S1289C4*)(S1289C3*), 0, "S1289C2");
    check_base_class_offset(lv, (S1289C3*), 0, "S1289C2");
    check_field_offset(lv, s1289c2f0, ABISELECT(104,64), "S1289C2.s1289c2f0");
    test_class_info(&lv, &cd_S1289C2);
    dp->~S1289C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1289C2(Test_S1289C2, "S1289C2", ABISELECT(120,76));

#else // __cplusplus

extern void _ZN7S1289C2C1Ev();
extern void _ZN7S1289C2D1Ev();
Name_Map name_map_S1289C2[] = {
  NSPAIR(_ZN7S1289C2C1Ev),
  NSPAIR(_ZN7S1289C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1289C4;
extern VTBL_ENTRY _ZTI7S1289C4[];
extern  VTBL_ENTRY _ZTV7S1289C4[];
extern Class_Descriptor cd_S1289C3;
extern VTBL_ENTRY _ZTI7S1289C3[];
extern  VTBL_ENTRY _ZTV7S1289C3[];
static Base_Class bases_S1289C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1289C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S1289C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S1289C2[];
extern void _ZN7S1289C2D1Ev();
extern void _ZN7S1289C2D0Ev();
extern void _ZN7S1289C43v10Ev();
extern void _ZN7S1289C43v11Ev();
extern void _ZN7S1289C43v12Ev();
extern void _ZN7S1289C43v13Ev();
extern void _ZN7S1289C43v14Ev();
extern void _ZN7S1289C43v15Ev();
extern void _ZN7S1289C43v16Ev();
extern void _ZN7S1289C43v17Ev();
extern void _ZN7S1289C43v18Ev();
extern void _ZN7S1289C43v19Ev();
extern void _ZN7S1289C43v20Ev();
extern void _ZN7S1289C43v21Ev();
extern void _ZN7S1289C43v22Ev();
extern void _ZN7S1289C43v23Ev();
extern void _ZN7S1289C43v24Ev();
extern void _ZN7S1289C43v25Ev();
extern void _ZN7S1289C43v26Ev();
extern void _ZN7S1289C43v27Ev();
extern void _ZN7S1289C43v28Ev();
extern void _ZN7S1289C43v29Ev();
extern void _ZN7S1289C43v30Ev();
extern void _ZN7S1289C43v31Ev();
extern void _ZN7S1289C43v32Ev();
extern void _ZN7S1289C43v33Ev();
extern void _ZN7S1289C43v34Ev();
extern void _ZN7S1289C43v35Ev();
extern void _ZN7S1289C43v36Ev();
extern void _ZN7S1289C43v37Ev();
extern void _ZN7S1289C43v38Ev();
extern void _ZN7S1289C43v39Ev();
extern void _ZN7S1289C43v40Ev();
extern void _ZN7S1289C43v41Ev();
extern void _ZN7S1289C43v42Ev();
extern void _ZN7S1289C43v43Ev();
extern void _ZN7S1289C43v44Ev();
extern void _ZN7S1289C43v45Ev();
extern void _ZN7S1289C43v46Ev();
extern void _ZN7S1289C43v47Ev();
extern void _ZN7S1289C43v48Ev();
extern void _ZN7S1289C43v49Ev();
extern void _ZN7S1289C43v50Ev();
extern void _ZN7S1289C43v51Ev();
extern void _ZN7S1289C43v52Ev();
extern void _ZN7S1289C43v53Ev();
extern void _ZN7S1289C43v54Ev();
extern void _ZN7S1289C43v55Ev();
extern void _ZN7S1289C43v56Ev();
extern void _ZN7S1289C43v57Ev();
extern void _ZN7S1289C43v58Ev();
extern void _ZN7S1289C43v59Ev();
extern void _ZN7S1289C43v60Ev();
extern void _ZN7S1289C43v61Ev();
extern void _ZN7S1289C43v62Ev();
extern void _ZN7S1289C43v63Ev();
extern void _ZN7S1289C43v64Ev();
extern void _ZN7S1289C43v65Ev();
extern void _ZN7S1289C43v66Ev();
extern void _ZN7S1289C43v67Ev();
extern void _ZN7S1289C43v68Ev();
extern void _ZN7S1289C43v69Ev();
extern void _ZN7S1289C43v70Ev();
extern void _ZN7S1289C43v71Ev();
extern void _ZN7S1289C43v72Ev();
extern void _ZN7S1289C43v73Ev();
extern void _ZN7S1289C33v74Ev();
extern void _ZN7S1289C33v75Ev();
extern void _ZN7S1289C33v76Ev();
extern void _ZN7S1289C33v77Ev();
extern void _ZN7S1289C33v78Ev();
extern void _ZN7S1289C33v79Ev();
extern void _ZN7S1289C33v80Ev();
extern void _ZN7S1289C33v81Ev();
extern void _ZN7S1289C33v82Ev();
extern void _ZN7S1289C33v83Ev();
extern void _ZN7S1289C33v84Ev();
extern void _ZN7S1289C33v85Ev();
extern void _ZN7S1289C33v86Ev();
extern void _ZN7S1289C33v87Ev();
extern void _ZN7S1289C33v88Ev();
extern void _ZN7S1289C33v89Ev();
extern void _ZN7S1289C33v90Ev();
extern void _ZN7S1289C33v91Ev();
extern void _ZN7S1289C33v92Ev();
extern void _ZN7S1289C33v93Ev();
extern void _ZN7S1289C23v94Ev();
extern void _ZN7S1289C23v95Ev();
extern void _ZN7S1289C23v96Ev();
extern void _ZN7S1289C23v97Ev();
static  VTBL_ENTRY vtc_S1289C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1289C2[0]),
  (VTBL_ENTRY)&_ZN7S1289C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1289C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1289C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1289C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1289C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1289C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1289C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1289C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1289C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1289C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1289C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1289C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1289C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1289C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1289C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1289C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1289C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1289C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1289C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1289C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1289C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1289C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1289C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1289C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1289C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1289C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1289C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1289C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1289C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1289C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1289C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1289C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1289C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1289C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1289C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1289C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1289C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1289C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1289C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1289C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1289C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1289C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1289C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1289C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1289C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1289C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1289C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1289C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1289C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1289C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1289C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1289C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1289C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1289C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1289C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1289C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1289C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1289C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1289C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1289C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1289C43v68Ev,
  (VTBL_ENTRY)&_ZN7S1289C43v69Ev,
  (VTBL_ENTRY)&_ZN7S1289C43v70Ev,
  (VTBL_ENTRY)&_ZN7S1289C43v71Ev,
  (VTBL_ENTRY)&_ZN7S1289C43v72Ev,
  (VTBL_ENTRY)&_ZN7S1289C43v73Ev,
  (VTBL_ENTRY)&_ZN7S1289C33v74Ev,
  (VTBL_ENTRY)&_ZN7S1289C33v75Ev,
  (VTBL_ENTRY)&_ZN7S1289C33v76Ev,
  (VTBL_ENTRY)&_ZN7S1289C33v77Ev,
  (VTBL_ENTRY)&_ZN7S1289C33v78Ev,
  (VTBL_ENTRY)&_ZN7S1289C33v79Ev,
  (VTBL_ENTRY)&_ZN7S1289C33v80Ev,
  (VTBL_ENTRY)&_ZN7S1289C33v81Ev,
  (VTBL_ENTRY)&_ZN7S1289C33v82Ev,
  (VTBL_ENTRY)&_ZN7S1289C33v83Ev,
  (VTBL_ENTRY)&_ZN7S1289C33v84Ev,
  (VTBL_ENTRY)&_ZN7S1289C33v85Ev,
  (VTBL_ENTRY)&_ZN7S1289C33v86Ev,
  (VTBL_ENTRY)&_ZN7S1289C33v87Ev,
  (VTBL_ENTRY)&_ZN7S1289C33v88Ev,
  (VTBL_ENTRY)&_ZN7S1289C33v89Ev,
  (VTBL_ENTRY)&_ZN7S1289C33v90Ev,
  (VTBL_ENTRY)&_ZN7S1289C33v91Ev,
  (VTBL_ENTRY)&_ZN7S1289C33v92Ev,
  (VTBL_ENTRY)&_ZN7S1289C33v93Ev,
  (VTBL_ENTRY)&_ZN7S1289C23v94Ev,
  (VTBL_ENTRY)&_ZN7S1289C23v95Ev,
  (VTBL_ENTRY)&_ZN7S1289C23v96Ev,
  (VTBL_ENTRY)&_ZN7S1289C23v97Ev,
};
extern VTBL_ENTRY _ZTI7S1289C2[];
extern  VTBL_ENTRY _ZTV7S1289C2[];
Class_Descriptor cd_S1289C2 = {  "S1289C2", // class name
  bases_S1289C2, 2,
  &(vtc_S1289C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(120,76), // object size
  NSPAIRA(_ZTI7S1289C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1289C2),92, //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  S1289C11_nt  {
  char s1289c11f0[4];
  ::S674C38 s1289c11f1;
  int s1289c11f2[2];
  void  mf1289c11(); // _ZN11S1289C11_nt9mf1289c11Ev
};
//SIG(-1 S1289C11_nt) C1{ m Fc[4] FC2{ BC3{ BC4{ m Fp Fi[2]}}} Fi[2]}


void  S1289C11_nt ::mf1289c11(){}

//skip512 S1289C11_nt

#else // __cplusplus

Class_Descriptor cd_S1289C11_nt = {  "S1289C11_nt", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  ABISELECT(32,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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1289C10_nt  : S1289C11_nt {
  void *s1289c10f0;
};
//SIG(-1 S1289C10_nt) C1{ BC2{ m Fc[4] FC3{ BC4{ BC5{ m Fp Fi[2]}}} Fi[2]} Fp}



//skip512 S1289C10_nt

#else // __cplusplus

extern Class_Descriptor cd_S1289C11_nt;
static Base_Class bases_S1289C10_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1289C11_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  S1289C1  : S1289C2 {
  ::S1289C10_nt s1289c1f0;
  ::S1289C10_nt s1289c1f1;
  ::S1289C10_nt s1289c1f2;
  unsigned int s1289c1f3:1;
  unsigned int s1289c1f4:1;
  unsigned int s1289c1f5:1;
  unsigned int s1289c1f6:1;
  unsigned int s1289c1f7:1;
  unsigned int s1289c1f8:1;
  unsigned int s1289c1f9:1;
  unsigned int s1289c1f10:1;
  unsigned int s1289c1f11:1;
  unsigned int s1289c1f12:1;
  unsigned int s1289c1f13:1;
  unsigned int s1289c1f14:1;
  unsigned int s1289c1f15:1;
  unsigned int s1289c1f16:1;
  ::S1289C10_nt s1289c1f17;
  ::S1289C10_nt s1289c1f18;
  ::S1289C10_nt s1289c1f19;
  ::S1289C10_nt s1289c1f20;
  ::S1289C10_nt s1289c1f21;
  char s1289c1f22;
  ::S1289C10_nt s1289c1f23;
  ::S1289C10_nt s1289c1f24;
  virtual  ~S1289C1(); // _ZN7S1289C1D1Ev
  virtual void  v1(); // _ZN7S1289C12v1Ev
  virtual void  v2(); // _ZN7S1289C12v2Ev
  virtual void  v3(); // _ZN7S1289C12v3Ev
  virtual void  v4(); // _ZN7S1289C12v4Ev
  virtual void  v5(); // _ZN7S1289C12v5Ev
  virtual void  v6(); // _ZN7S1289C12v6Ev
  virtual void  v7(); // _ZN7S1289C12v7Ev
  virtual void  v8(); // _ZN7S1289C12v8Ev
  virtual void  v9(); // _ZN7S1289C12v9Ev
  S1289C1(); // tgen
};
//SIG(1 S1289C1) C1{ BC2{ BC3{ BC4{ vd 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 Fi FL Fp[4] Fi[2] Fp FC5{ m Fi[2]} Fp[2]} vd v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 v91 v92 v93 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 FC6{ m}} vd v94 v95 v96 v97 FC7{ BC8{ BC9{ m Fp Fi[2]}}}} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 FC10{ BC11{ m Fc[4] FC12{ BC13{ BC9}} Fi[2]} Fp} FC10 FC10 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 FC10 FC10 FC10 FC10 FC10 Fc FC10 FC10}


 S1289C1 ::~S1289C1(){ note_dtor("S1289C1", this);}
void  S1289C1 ::v1(){vfunc_called(this, "_ZN7S1289C12v1Ev");}
void  S1289C1 ::v2(){vfunc_called(this, "_ZN7S1289C12v2Ev");}
void  S1289C1 ::v3(){vfunc_called(this, "_ZN7S1289C12v3Ev");}
void  S1289C1 ::v4(){vfunc_called(this, "_ZN7S1289C12v4Ev");}
void  S1289C1 ::v5(){vfunc_called(this, "_ZN7S1289C12v5Ev");}
void  S1289C1 ::v6(){vfunc_called(this, "_ZN7S1289C12v6Ev");}
void  S1289C1 ::v7(){vfunc_called(this, "_ZN7S1289C12v7Ev");}
void  S1289C1 ::v8(){vfunc_called(this, "_ZN7S1289C12v8Ev");}
void  S1289C1 ::v9(){vfunc_called(this, "_ZN7S1289C12v9Ev");}
S1289C1 ::S1289C1(){ note_ctor("S1289C1", this);} // tgen

static void Test_S1289C1()
{
  extern Class_Descriptor cd_S1289C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(68,92)];
    init_test(&cd_S1289C1, buf);
    S1289C1 *dp, &lv = *(dp=new (buf) S1289C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(536,364), "sizeof(S1289C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1289C1)");
    check_base_class_offset(lv, (S1289C4*)(S1289C3*)(S1289C2*), 0, "S1289C1");
    check_base_class_offset(lv, (S1289C3*)(S1289C2*), 0, "S1289C1");
    check_base_class_offset(lv, (S1289C2*), 0, "S1289C1");
    check_field_offset(lv, s1289c1f0, ABISELECT(120,76), "S1289C1.s1289c1f0");
    check_field_offset(lv, s1289c1f1, ABISELECT(160,104), "S1289C1.s1289c1f1");
    check_field_offset(lv, s1289c1f2, ABISELECT(200,132), "S1289C1.s1289c1f2");
    set_bf_and_test(lv, s1289c1f3, ABISELECT(240,160), 0, 1, 1, "S1289C1");
    set_bf_and_test(lv, s1289c1f4, ABISELECT(240,160), 1, 1, 1, "S1289C1");
    set_bf_and_test(lv, s1289c1f5, ABISELECT(240,160), 2, 1, 1, "S1289C1");
    set_bf_and_test(lv, s1289c1f6, ABISELECT(240,160), 3, 1, 1, "S1289C1");
    set_bf_and_test(lv, s1289c1f7, ABISELECT(240,160), 4, 1, 1, "S1289C1");
    set_bf_and_test(lv, s1289c1f8, ABISELECT(240,160), 5, 1, 1, "S1289C1");
    set_bf_and_test(lv, s1289c1f9, ABISELECT(240,160), 6, 1, 1, "S1289C1");
    set_bf_and_test(lv, s1289c1f10, ABISELECT(240,160), 7, 1, 1, "S1289C1");
    set_bf_and_test(lv, s1289c1f11, ABISELECT(241,161), 0, 1, 1, "S1289C1");
    set_bf_and_test(lv, s1289c1f12, ABISELECT(241,161), 1, 1, 1, "S1289C1");
    set_bf_and_test(lv, s1289c1f13, ABISELECT(241,161), 2, 1, 1, "S1289C1");
    set_bf_and_test(lv, s1289c1f14, ABISELECT(241,161), 3, 1, 1, "S1289C1");
    set_bf_and_test(lv, s1289c1f15, ABISELECT(241,161), 4, 1, 1, "S1289C1");
    set_bf_and_test(lv, s1289c1f16, ABISELECT(241,161), 5, 1, 1, "S1289C1");
    check_field_offset(lv, s1289c1f17, ABISELECT(248,164), "S1289C1.s1289c1f17");
    check_field_offset(lv, s1289c1f18, ABISELECT(288,192), "S1289C1.s1289c1f18");
    check_field_offset(lv, s1289c1f19, ABISELECT(328,220), "S1289C1.s1289c1f19");
    check_field_offset(lv, s1289c1f20, ABISELECT(368,248), "S1289C1.s1289c1f20");
    check_field_offset(lv, s1289c1f21, ABISELECT(408,276), "S1289C1.s1289c1f21");
    check_field_offset(lv, s1289c1f22, ABISELECT(448,304), "S1289C1.s1289c1f22");
    check_field_offset(lv, s1289c1f23, ABISELECT(456,308), "S1289C1.s1289c1f23");
    check_field_offset(lv, s1289c1f24, ABISELECT(496,336), "S1289C1.s1289c1f24");
    test_class_info(&lv, &cd_S1289C1);
    dp->~S1289C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1289C1(Test_S1289C1, "S1289C1", ABISELECT(536,364));

#else // __cplusplus

extern void _ZN7S1289C1C1Ev();
extern void _ZN7S1289C1D1Ev();
Name_Map name_map_S1289C1[] = {
  NSPAIR(_ZN7S1289C1C1Ev),
  NSPAIR(_ZN7S1289C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1289C4;
extern VTBL_ENTRY _ZTI7S1289C4[];
extern  VTBL_ENTRY _ZTV7S1289C4[];
extern Class_Descriptor cd_S1289C3;
extern VTBL_ENTRY _ZTI7S1289C3[];
extern  VTBL_ENTRY _ZTV7S1289C3[];
extern Class_Descriptor cd_S1289C2;
extern VTBL_ENTRY _ZTI7S1289C2[];
extern  VTBL_ENTRY _ZTV7S1289C2[];
static Base_Class bases_S1289C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1289C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S1289C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S1289C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S1289C1[];
extern void _ZN7S1289C1D1Ev();
extern void _ZN7S1289C1D0Ev();
extern void _ZN7S1289C43v10Ev();
extern void _ZN7S1289C43v11Ev();
extern void _ZN7S1289C43v12Ev();
extern void _ZN7S1289C43v13Ev();
extern void _ZN7S1289C43v14Ev();
extern void _ZN7S1289C43v15Ev();
extern void _ZN7S1289C43v16Ev();
extern void _ZN7S1289C43v17Ev();
extern void _ZN7S1289C43v18Ev();
extern void _ZN7S1289C43v19Ev();
extern void _ZN7S1289C43v20Ev();
extern void _ZN7S1289C43v21Ev();
extern void _ZN7S1289C43v22Ev();
extern void _ZN7S1289C43v23Ev();
extern void _ZN7S1289C43v24Ev();
extern void _ZN7S1289C43v25Ev();
extern void _ZN7S1289C43v26Ev();
extern void _ZN7S1289C43v27Ev();
extern void _ZN7S1289C43v28Ev();
extern void _ZN7S1289C43v29Ev();
extern void _ZN7S1289C43v30Ev();
extern void _ZN7S1289C43v31Ev();
extern void _ZN7S1289C43v32Ev();
extern void _ZN7S1289C43v33Ev();
extern void _ZN7S1289C43v34Ev();
extern void _ZN7S1289C43v35Ev();
extern void _ZN7S1289C43v36Ev();
extern void _ZN7S1289C43v37Ev();
extern void _ZN7S1289C43v38Ev();
extern void _ZN7S1289C43v39Ev();
extern void _ZN7S1289C43v40Ev();
extern void _ZN7S1289C43v41Ev();
extern void _ZN7S1289C43v42Ev();
extern void _ZN7S1289C43v43Ev();
extern void _ZN7S1289C43v44Ev();
extern void _ZN7S1289C43v45Ev();
extern void _ZN7S1289C43v46Ev();
extern void _ZN7S1289C43v47Ev();
extern void _ZN7S1289C43v48Ev();
extern void _ZN7S1289C43v49Ev();
extern void _ZN7S1289C43v50Ev();
extern void _ZN7S1289C43v51Ev();
extern void _ZN7S1289C43v52Ev();
extern void _ZN7S1289C43v53Ev();
extern void _ZN7S1289C43v54Ev();
extern void _ZN7S1289C43v55Ev();
extern void _ZN7S1289C43v56Ev();
extern void _ZN7S1289C43v57Ev();
extern void _ZN7S1289C43v58Ev();
extern void _ZN7S1289C43v59Ev();
extern void _ZN7S1289C43v60Ev();
extern void _ZN7S1289C43v61Ev();
extern void _ZN7S1289C43v62Ev();
extern void _ZN7S1289C43v63Ev();
extern void _ZN7S1289C43v64Ev();
extern void _ZN7S1289C43v65Ev();
extern void _ZN7S1289C43v66Ev();
extern void _ZN7S1289C43v67Ev();
extern void _ZN7S1289C43v68Ev();
extern void _ZN7S1289C43v69Ev();
extern void _ZN7S1289C43v70Ev();
extern void _ZN7S1289C43v71Ev();
extern void _ZN7S1289C43v72Ev();
extern void _ZN7S1289C43v73Ev();
extern void _ZN7S1289C33v74Ev();
extern void _ZN7S1289C33v75Ev();
extern void _ZN7S1289C33v76Ev();
extern void _ZN7S1289C33v77Ev();
extern void _ZN7S1289C33v78Ev();
extern void _ZN7S1289C33v79Ev();
extern void _ZN7S1289C33v80Ev();
extern void _ZN7S1289C33v81Ev();
extern void _ZN7S1289C33v82Ev();
extern void _ZN7S1289C33v83Ev();
extern void _ZN7S1289C33v84Ev();
extern void _ZN7S1289C33v85Ev();
extern void _ZN7S1289C33v86Ev();
extern void _ZN7S1289C33v87Ev();
extern void _ZN7S1289C33v88Ev();
extern void _ZN7S1289C33v89Ev();
extern void _ZN7S1289C33v90Ev();
extern void _ZN7S1289C33v91Ev();
extern void _ZN7S1289C33v92Ev();
extern void _ZN7S1289C33v93Ev();
extern void _ZN7S1289C23v94Ev();
extern void _ZN7S1289C23v95Ev();
extern void _ZN7S1289C23v96Ev();
extern void _ZN7S1289C23v97Ev();
extern void _ZN7S1289C12v1Ev();
extern void _ZN7S1289C12v2Ev();
extern void _ZN7S1289C12v3Ev();
extern void _ZN7S1289C12v4Ev();
extern void _ZN7S1289C12v5Ev();
extern void _ZN7S1289C12v6Ev();
extern void _ZN7S1289C12v7Ev();
extern void _ZN7S1289C12v8Ev();
extern void _ZN7S1289C12v9Ev();
static  VTBL_ENTRY vtc_S1289C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1289C1[0]),
  (VTBL_ENTRY)&_ZN7S1289C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1289C1D0Ev,
  (VTBL_ENTRY)&_ZN7S1289C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1289C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1289C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1289C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1289C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1289C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1289C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1289C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1289C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1289C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1289C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1289C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1289C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1289C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1289C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1289C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1289C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1289C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1289C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1289C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1289C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1289C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1289C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1289C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1289C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1289C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1289C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1289C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1289C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1289C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1289C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1289C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1289C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1289C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1289C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1289C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1289C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1289C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1289C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1289C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1289C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1289C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1289C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1289C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1289C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1289C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1289C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1289C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1289C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1289C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1289C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1289C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1289C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1289C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1289C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1289C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1289C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1289C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1289C43v68Ev,
  (VTBL_ENTRY)&_ZN7S1289C43v69Ev,
  (VTBL_ENTRY)&_ZN7S1289C43v70Ev,
  (VTBL_ENTRY)&_ZN7S1289C43v71Ev,
  (VTBL_ENTRY)&_ZN7S1289C43v72Ev,
  (VTBL_ENTRY)&_ZN7S1289C43v73Ev,
  (VTBL_ENTRY)&_ZN7S1289C33v74Ev,
  (VTBL_ENTRY)&_ZN7S1289C33v75Ev,
  (VTBL_ENTRY)&_ZN7S1289C33v76Ev,
  (VTBL_ENTRY)&_ZN7S1289C33v77Ev,
  (VTBL_ENTRY)&_ZN7S1289C33v78Ev,
  (VTBL_ENTRY)&_ZN7S1289C33v79Ev,
  (VTBL_ENTRY)&_ZN7S1289C33v80Ev,
  (VTBL_ENTRY)&_ZN7S1289C33v81Ev,
  (VTBL_ENTRY)&_ZN7S1289C33v82Ev,
  (VTBL_ENTRY)&_ZN7S1289C33v83Ev,
  (VTBL_ENTRY)&_ZN7S1289C33v84Ev,
  (VTBL_ENTRY)&_ZN7S1289C33v85Ev,
  (VTBL_ENTRY)&_ZN7S1289C33v86Ev,
  (VTBL_ENTRY)&_ZN7S1289C33v87Ev,
  (VTBL_ENTRY)&_ZN7S1289C33v88Ev,
  (VTBL_ENTRY)&_ZN7S1289C33v89Ev,
  (VTBL_ENTRY)&_ZN7S1289C33v90Ev,
  (VTBL_ENTRY)&_ZN7S1289C33v91Ev,
  (VTBL_ENTRY)&_ZN7S1289C33v92Ev,
  (VTBL_ENTRY)&_ZN7S1289C33v93Ev,
  (VTBL_ENTRY)&_ZN7S1289C23v94Ev,
  (VTBL_ENTRY)&_ZN7S1289C23v95Ev,
  (VTBL_ENTRY)&_ZN7S1289C23v96Ev,
  (VTBL_ENTRY)&_ZN7S1289C23v97Ev,
  (VTBL_ENTRY)&_ZN7S1289C12v1Ev,
  (VTBL_ENTRY)&_ZN7S1289C12v2Ev,
  (VTBL_ENTRY)&_ZN7S1289C12v3Ev,
  (VTBL_ENTRY)&_ZN7S1289C12v4Ev,
  (VTBL_ENTRY)&_ZN7S1289C12v5Ev,
  (VTBL_ENTRY)&_ZN7S1289C12v6Ev,
  (VTBL_ENTRY)&_ZN7S1289C12v7Ev,
  (VTBL_ENTRY)&_ZN7S1289C12v8Ev,
  (VTBL_ENTRY)&_ZN7S1289C12v9Ev,
};
extern VTBL_ENTRY _ZTI7S1289C1[];
extern  VTBL_ENTRY _ZTV7S1289C1[];
Class_Descriptor cd_S1289C1 = {  "S1289C1", // class name
  bases_S1289C1, 3,
  &(vtc_S1289C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(536,364), // object size
  NSPAIRA(_ZTI7S1289C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1289C1),101, //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  S1516C4  {
  int s1516c4f0;
  __tsi64 s1516c4f1;
  void *s1516c4f2[4];
  int s1516c4f3[2];
  void *s1516c4f4;
  ::S674C6_nt s1516c4f5;
  void *s1516c4f6[2];
  virtual  ~S1516C4(); // _ZN7S1516C4D1Ev
  virtual void  v6(); // _ZN7S1516C42v6Ev
  virtual void  v7(); // _ZN7S1516C42v7Ev
  virtual void  v8(); // _ZN7S1516C42v8Ev
  virtual void  v9(); // _ZN7S1516C42v9Ev
  virtual void  v10(); // _ZN7S1516C43v10Ev
  virtual void  v11(); // _ZN7S1516C43v11Ev
  virtual void  v12(); // _ZN7S1516C43v12Ev
  virtual void  v13(); // _ZN7S1516C43v13Ev
  virtual void  v14(); // _ZN7S1516C43v14Ev
  virtual void  v15(); // _ZN7S1516C43v15Ev
  virtual void  v16(); // _ZN7S1516C43v16Ev
  virtual void  v17(); // _ZN7S1516C43v17Ev
  virtual void  v18(); // _ZN7S1516C43v18Ev
  virtual void  v19(); // _ZN7S1516C43v19Ev
  virtual void  v20(); // _ZN7S1516C43v20Ev
  virtual void  v21(); // _ZN7S1516C43v21Ev
  virtual void  v22(); // _ZN7S1516C43v22Ev
  virtual void  v23(); // _ZN7S1516C43v23Ev
  virtual void  v24(); // _ZN7S1516C43v24Ev
  virtual void  v25(); // _ZN7S1516C43v25Ev
  virtual void  v26(); // _ZN7S1516C43v26Ev
  virtual void  v27(); // _ZN7S1516C43v27Ev
  virtual void  v28(); // _ZN7S1516C43v28Ev
  virtual void  v29(); // _ZN7S1516C43v29Ev
  virtual void  v30(); // _ZN7S1516C43v30Ev
  virtual void  v31(); // _ZN7S1516C43v31Ev
  virtual void  v32(); // _ZN7S1516C43v32Ev
  virtual void  v33(); // _ZN7S1516C43v33Ev
  virtual void  v34(); // _ZN7S1516C43v34Ev
  virtual void  v35(); // _ZN7S1516C43v35Ev
  virtual void  v36(); // _ZN7S1516C43v36Ev
  virtual void  v37(); // _ZN7S1516C43v37Ev
  virtual void  v38(); // _ZN7S1516C43v38Ev
  virtual void  v39(); // _ZN7S1516C43v39Ev
  virtual void  v40(); // _ZN7S1516C43v40Ev
  virtual void  v41(); // _ZN7S1516C43v41Ev
  virtual void  v42(); // _ZN7S1516C43v42Ev
  virtual void  v43(); // _ZN7S1516C43v43Ev
  virtual void  v44(); // _ZN7S1516C43v44Ev
  virtual void  v45(); // _ZN7S1516C43v45Ev
  virtual void  v46(); // _ZN7S1516C43v46Ev
  virtual void  v47(); // _ZN7S1516C43v47Ev
  virtual void  v48(); // _ZN7S1516C43v48Ev
  virtual void  v49(); // _ZN7S1516C43v49Ev
  virtual void  v50(); // _ZN7S1516C43v50Ev
  virtual void  v51(); // _ZN7S1516C43v51Ev
  virtual void  v52(); // _ZN7S1516C43v52Ev
  virtual void  v53(); // _ZN7S1516C43v53Ev
  virtual void  v54(); // _ZN7S1516C43v54Ev
  virtual void  v55(); // _ZN7S1516C43v55Ev
  virtual void  v56(); // _ZN7S1516C43v56Ev
  virtual void  v57(); // _ZN7S1516C43v57Ev
  virtual void  v58(); // _ZN7S1516C43v58Ev
  virtual void  v59(); // _ZN7S1516C43v59Ev
  virtual void  v60(); // _ZN7S1516C43v60Ev
  virtual void  v61(); // _ZN7S1516C43v61Ev
  virtual void  v62(); // _ZN7S1516C43v62Ev
  virtual void  v63(); // _ZN7S1516C43v63Ev
  virtual void  v64(); // _ZN7S1516C43v64Ev
  virtual void  v65(); // _ZN7S1516C43v65Ev
  virtual void  v66(); // _ZN7S1516C43v66Ev
  virtual void  v67(); // _ZN7S1516C43v67Ev
  virtual void  v68(); // _ZN7S1516C43v68Ev
  virtual void  v69(); // _ZN7S1516C43v69Ev
  S1516C4(); // tgen
};
//SIG(-1 S1516C4) 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]}


 S1516C4 ::~S1516C4(){ note_dtor("S1516C4", this);}
void  S1516C4 ::v6(){vfunc_called(this, "_ZN7S1516C42v6Ev");}
void  S1516C4 ::v7(){vfunc_called(this, "_ZN7S1516C42v7Ev");}
void  S1516C4 ::v8(){vfunc_called(this, "_ZN7S1516C42v8Ev");}
void  S1516C4 ::v9(){vfunc_called(this, "_ZN7S1516C42v9Ev");}
void  S1516C4 ::v10(){vfunc_called(this, "_ZN7S1516C43v10Ev");}
void  S1516C4 ::v11(){vfunc_called(this, "_ZN7S1516C43v11Ev");}
void  S1516C4 ::v12(){vfunc_called(this, "_ZN7S1516C43v12Ev");}
void  S1516C4 ::v13(){vfunc_called(this, "_ZN7S1516C43v13Ev");}
void  S1516C4 ::v14(){vfunc_called(this, "_ZN7S1516C43v14Ev");}
void  S1516C4 ::v15(){vfunc_called(this, "_ZN7S1516C43v15Ev");}
void  S1516C4 ::v16(){vfunc_called(this, "_ZN7S1516C43v16Ev");}
void  S1516C4 ::v17(){vfunc_called(this, "_ZN7S1516C43v17Ev");}
void  S1516C4 ::v18(){vfunc_called(this, "_ZN7S1516C43v18Ev");}
void  S1516C4 ::v19(){vfunc_called(this, "_ZN7S1516C43v19Ev");}
void  S1516C4 ::v20(){vfunc_called(this, "_ZN7S1516C43v20Ev");}
void  S1516C4 ::v21(){vfunc_called(this, "_ZN7S1516C43v21Ev");}
void  S1516C4 ::v22(){vfunc_called(this, "_ZN7S1516C43v22Ev");}
void  S1516C4 ::v23(){vfunc_called(this, "_ZN7S1516C43v23Ev");}
void  S1516C4 ::v24(){vfunc_called(this, "_ZN7S1516C43v24Ev");}
void  S1516C4 ::v25(){vfunc_called(this, "_ZN7S1516C43v25Ev");}
void  S1516C4 ::v26(){vfunc_called(this, "_ZN7S1516C43v26Ev");}
void  S1516C4 ::v27(){vfunc_called(this, "_ZN7S1516C43v27Ev");}
void  S1516C4 ::v28(){vfunc_called(this, "_ZN7S1516C43v28Ev");}
void  S1516C4 ::v29(){vfunc_called(this, "_ZN7S1516C43v29Ev");}
void  S1516C4 ::v30(){vfunc_called(this, "_ZN7S1516C43v30Ev");}
void  S1516C4 ::v31(){vfunc_called(this, "_ZN7S1516C43v31Ev");}
void  S1516C4 ::v32(){vfunc_called(this, "_ZN7S1516C43v32Ev");}
void  S1516C4 ::v33(){vfunc_called(this, "_ZN7S1516C43v33Ev");}
void  S1516C4 ::v34(){vfunc_called(this, "_ZN7S1516C43v34Ev");}
void  S1516C4 ::v35(){vfunc_called(this, "_ZN7S1516C43v35Ev");}
void  S1516C4 ::v36(){vfunc_called(this, "_ZN7S1516C43v36Ev");}
void  S1516C4 ::v37(){vfunc_called(this, "_ZN7S1516C43v37Ev");}
void  S1516C4 ::v38(){vfunc_called(this, "_ZN7S1516C43v38Ev");}
void  S1516C4 ::v39(){vfunc_called(this, "_ZN7S1516C43v39Ev");}
void  S1516C4 ::v40(){vfunc_called(this, "_ZN7S1516C43v40Ev");}
void  S1516C4 ::v41(){vfunc_called(this, "_ZN7S1516C43v41Ev");}
void  S1516C4 ::v42(){vfunc_called(this, "_ZN7S1516C43v42Ev");}
void  S1516C4 ::v43(){vfunc_called(this, "_ZN7S1516C43v43Ev");}
void  S1516C4 ::v44(){vfunc_called(this, "_ZN7S1516C43v44Ev");}
void  S1516C4 ::v45(){vfunc_called(this, "_ZN7S1516C43v45Ev");}
void  S1516C4 ::v46(){vfunc_called(this, "_ZN7S1516C43v46Ev");}
void  S1516C4 ::v47(){vfunc_called(this, "_ZN7S1516C43v47Ev");}
void  S1516C4 ::v48(){vfunc_called(this, "_ZN7S1516C43v48Ev");}
void  S1516C4 ::v49(){vfunc_called(this, "_ZN7S1516C43v49Ev");}
void  S1516C4 ::v50(){vfunc_called(this, "_ZN7S1516C43v50Ev");}
void  S1516C4 ::v51(){vfunc_called(this, "_ZN7S1516C43v51Ev");}
void  S1516C4 ::v52(){vfunc_called(this, "_ZN7S1516C43v52Ev");}
void  S1516C4 ::v53(){vfunc_called(this, "_ZN7S1516C43v53Ev");}
void  S1516C4 ::v54(){vfunc_called(this, "_ZN7S1516C43v54Ev");}
void  S1516C4 ::v55(){vfunc_called(this, "_ZN7S1516C43v55Ev");}
void  S1516C4 ::v56(){vfunc_called(this, "_ZN7S1516C43v56Ev");}
void  S1516C4 ::v57(){vfunc_called(this, "_ZN7S1516C43v57Ev");}
void  S1516C4 ::v58(){vfunc_called(this, "_ZN7S1516C43v58Ev");}
void  S1516C4 ::v59(){vfunc_called(this, "_ZN7S1516C43v59Ev");}
void  S1516C4 ::v60(){vfunc_called(this, "_ZN7S1516C43v60Ev");}
void  S1516C4 ::v61(){vfunc_called(this, "_ZN7S1516C43v61Ev");}
void  S1516C4 ::v62(){vfunc_called(this, "_ZN7S1516C43v62Ev");}
void  S1516C4 ::v63(){vfunc_called(this, "_ZN7S1516C43v63Ev");}
void  S1516C4 ::v64(){vfunc_called(this, "_ZN7S1516C43v64Ev");}
void  S1516C4 ::v65(){vfunc_called(this, "_ZN7S1516C43v65Ev");}
void  S1516C4 ::v66(){vfunc_called(this, "_ZN7S1516C43v66Ev");}
void  S1516C4 ::v67(){vfunc_called(this, "_ZN7S1516C43v67Ev");}
void  S1516C4 ::v68(){vfunc_called(this, "_ZN7S1516C43v68Ev");}
void  S1516C4 ::v69(){vfunc_called(this, "_ZN7S1516C43v69Ev");}
S1516C4 ::S1516C4(){ note_ctor("S1516C4", this);} // tgen

static void Test_S1516C4()
{
  extern Class_Descriptor cd_S1516C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S1516C4, buf);
    S1516C4 *dp, &lv = *(dp=new (buf) S1516C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S1516C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1516C4)");
    check_field_offset(lv, s1516c4f0, ABISELECT(8,4), "S1516C4.s1516c4f0");
    check_field_offset(lv, s1516c4f1, ABISELECT(16,8), "S1516C4.s1516c4f1");
    check_field_offset(lv, s1516c4f2, ABISELECT(24,16), "S1516C4.s1516c4f2");
    check_field_offset(lv, s1516c4f3, ABISELECT(56,32), "S1516C4.s1516c4f3");
    check_field_offset(lv, s1516c4f4, ABISELECT(64,40), "S1516C4.s1516c4f4");
    check_field_offset(lv, s1516c4f5, ABISELECT(72,44), "S1516C4.s1516c4f5");
    check_field_offset(lv, s1516c4f6, ABISELECT(80,52), "S1516C4.s1516c4f6");
    test_class_info(&lv, &cd_S1516C4);
    dp->~S1516C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1516C4(Test_S1516C4, "S1516C4", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN7S1516C4C1Ev();
extern void _ZN7S1516C4D1Ev();
Name_Map name_map_S1516C4[] = {
  NSPAIR(_ZN7S1516C4C1Ev),
  NSPAIR(_ZN7S1516C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S1516C4[];
extern void _ZN7S1516C4D1Ev();
extern void _ZN7S1516C4D0Ev();
extern void _ZN7S1516C42v6Ev();
extern void _ZN7S1516C42v7Ev();
extern void _ZN7S1516C42v8Ev();
extern void _ZN7S1516C42v9Ev();
extern void _ZN7S1516C43v10Ev();
extern void _ZN7S1516C43v11Ev();
extern void _ZN7S1516C43v12Ev();
extern void _ZN7S1516C43v13Ev();
extern void _ZN7S1516C43v14Ev();
extern void _ZN7S1516C43v15Ev();
extern void _ZN7S1516C43v16Ev();
extern void _ZN7S1516C43v17Ev();
extern void _ZN7S1516C43v18Ev();
extern void _ZN7S1516C43v19Ev();
extern void _ZN7S1516C43v20Ev();
extern void _ZN7S1516C43v21Ev();
extern void _ZN7S1516C43v22Ev();
extern void _ZN7S1516C43v23Ev();
extern void _ZN7S1516C43v24Ev();
extern void _ZN7S1516C43v25Ev();
extern void _ZN7S1516C43v26Ev();
extern void _ZN7S1516C43v27Ev();
extern void _ZN7S1516C43v28Ev();
extern void _ZN7S1516C43v29Ev();
extern void _ZN7S1516C43v30Ev();
extern void _ZN7S1516C43v31Ev();
extern void _ZN7S1516C43v32Ev();
extern void _ZN7S1516C43v33Ev();
extern void _ZN7S1516C43v34Ev();
extern void _ZN7S1516C43v35Ev();
extern void _ZN7S1516C43v36Ev();
extern void _ZN7S1516C43v37Ev();
extern void _ZN7S1516C43v38Ev();
extern void _ZN7S1516C43v39Ev();
extern void _ZN7S1516C43v40Ev();
extern void _ZN7S1516C43v41Ev();
extern void _ZN7S1516C43v42Ev();
extern void _ZN7S1516C43v43Ev();
extern void _ZN7S1516C43v44Ev();
extern void _ZN7S1516C43v45Ev();
extern void _ZN7S1516C43v46Ev();
extern void _ZN7S1516C43v47Ev();
extern void _ZN7S1516C43v48Ev();
extern void _ZN7S1516C43v49Ev();
extern void _ZN7S1516C43v50Ev();
extern void _ZN7S1516C43v51Ev();
extern void _ZN7S1516C43v52Ev();
extern void _ZN7S1516C43v53Ev();
extern void _ZN7S1516C43v54Ev();
extern void _ZN7S1516C43v55Ev();
extern void _ZN7S1516C43v56Ev();
extern void _ZN7S1516C43v57Ev();
extern void _ZN7S1516C43v58Ev();
extern void _ZN7S1516C43v59Ev();
extern void _ZN7S1516C43v60Ev();
extern void _ZN7S1516C43v61Ev();
extern void _ZN7S1516C43v62Ev();
extern void _ZN7S1516C43v63Ev();
extern void _ZN7S1516C43v64Ev();
extern void _ZN7S1516C43v65Ev();
extern void _ZN7S1516C43v66Ev();
extern void _ZN7S1516C43v67Ev();
extern void _ZN7S1516C43v68Ev();
extern void _ZN7S1516C43v69Ev();
static  VTBL_ENTRY vtc_S1516C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1516C4[0]),
  (VTBL_ENTRY)&_ZN7S1516C4D1Ev,
  (VTBL_ENTRY)&_ZN7S1516C4D0Ev,
  (VTBL_ENTRY)&_ZN7S1516C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1516C42v7Ev,
  (VTBL_ENTRY)&_ZN7S1516C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1516C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1516C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1516C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1516C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1516C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1516C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1516C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1516C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1516C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1516C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1516C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1516C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1516C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1516C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1516C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1516C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1516C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1516C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1516C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1516C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1516C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1516C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1516C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1516C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1516C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1516C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1516C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1516C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1516C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1516C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1516C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1516C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1516C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1516C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1516C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1516C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1516C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1516C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1516C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1516C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1516C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1516C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1516C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1516C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1516C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1516C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1516C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1516C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1516C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1516C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1516C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1516C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1516C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1516C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1516C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1516C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1516C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1516C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1516C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1516C43v68Ev,
  (VTBL_ENTRY)&_ZN7S1516C43v69Ev,
};
extern VTBL_ENTRY _ZTI7S1516C4[];
extern  VTBL_ENTRY _ZTV7S1516C4[];
Class_Descriptor cd_S1516C4 = {  "S1516C4", // class name
  0,0,//no base classes
  &(vtc_S1516C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI7S1516C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S1516C4),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  S1516C3  : S1516C4 {
  unsigned int s1516c3f0:1;
  unsigned int s1516c3f1:1;
  unsigned int s1516c3f2:1;
  unsigned int s1516c3f3:1;
  unsigned int s1516c3f4:1;
  unsigned int s1516c3f5:1;
  unsigned int s1516c3f6:1;
  ::S3625C32 s1516c3f7;
  virtual  ~S1516C3(); // _ZN7S1516C3D1Ev
  virtual void  v70(); // _ZN7S1516C33v70Ev
  virtual void  v71(); // _ZN7S1516C33v71Ev
  virtual void  v72(); // _ZN7S1516C33v72Ev
  virtual void  v73(); // _ZN7S1516C33v73Ev
  virtual void  v74(); // _ZN7S1516C33v74Ev
  virtual void  v75(); // _ZN7S1516C33v75Ev
  virtual void  v76(); // _ZN7S1516C33v76Ev
  virtual void  v77(); // _ZN7S1516C33v77Ev
  virtual void  v78(); // _ZN7S1516C33v78Ev
  virtual void  v79(); // _ZN7S1516C33v79Ev
  virtual void  v80(); // _ZN7S1516C33v80Ev
  virtual void  v81(); // _ZN7S1516C33v81Ev
  virtual void  v82(); // _ZN7S1516C33v82Ev
  virtual void  v83(); // _ZN7S1516C33v83Ev
  virtual void  v84(); // _ZN7S1516C33v84Ev
  virtual void  v85(); // _ZN7S1516C33v85Ev
  virtual void  v86(); // _ZN7S1516C33v86Ev
  virtual void  v87(); // _ZN7S1516C33v87Ev
  virtual void  v88(); // _ZN7S1516C33v88Ev
  virtual void  v89(); // _ZN7S1516C33v89Ev
  S1516C3(); // tgen
};
//SIG(-1 S1516C3) C1{ BC2{ 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 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 Fi FL Fp[4] Fi[2] Fp FC3{ m Fi[2]} Fp[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 FC4{ m}}


 S1516C3 ::~S1516C3(){ note_dtor("S1516C3", this);}
void  S1516C3 ::v70(){vfunc_called(this, "_ZN7S1516C33v70Ev");}
void  S1516C3 ::v71(){vfunc_called(this, "_ZN7S1516C33v71Ev");}
void  S1516C3 ::v72(){vfunc_called(this, "_ZN7S1516C33v72Ev");}
void  S1516C3 ::v73(){vfunc_called(this, "_ZN7S1516C33v73Ev");}
void  S1516C3 ::v74(){vfunc_called(this, "_ZN7S1516C33v74Ev");}
void  S1516C3 ::v75(){vfunc_called(this, "_ZN7S1516C33v75Ev");}
void  S1516C3 ::v76(){vfunc_called(this, "_ZN7S1516C33v76Ev");}
void  S1516C3 ::v77(){vfunc_called(this, "_ZN7S1516C33v77Ev");}
void  S1516C3 ::v78(){vfunc_called(this, "_ZN7S1516C33v78Ev");}
void  S1516C3 ::v79(){vfunc_called(this, "_ZN7S1516C33v79Ev");}
void  S1516C3 ::v80(){vfunc_called(this, "_ZN7S1516C33v80Ev");}
void  S1516C3 ::v81(){vfunc_called(this, "_ZN7S1516C33v81Ev");}
void  S1516C3 ::v82(){vfunc_called(this, "_ZN7S1516C33v82Ev");}
void  S1516C3 ::v83(){vfunc_called(this, "_ZN7S1516C33v83Ev");}
void  S1516C3 ::v84(){vfunc_called(this, "_ZN7S1516C33v84Ev");}
void  S1516C3 ::v85(){vfunc_called(this, "_ZN7S1516C33v85Ev");}
void  S1516C3 ::v86(){vfunc_called(this, "_ZN7S1516C33v86Ev");}
void  S1516C3 ::v87(){vfunc_called(this, "_ZN7S1516C33v87Ev");}
void  S1516C3 ::v88(){vfunc_called(this, "_ZN7S1516C33v88Ev");}
void  S1516C3 ::v89(){vfunc_called(this, "_ZN7S1516C33v89Ev");}
S1516C3 ::S1516C3(){ note_ctor("S1516C3", this);} // tgen

static void Test_S1516C3()
{
  extern Class_Descriptor cd_S1516C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(14,17)];
    init_test(&cd_S1516C3, buf);
    S1516C3 *dp, &lv = *(dp=new (buf) S1516C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(104,64), "sizeof(S1516C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1516C3)");
    check_base_class_offset(lv, (S1516C4*), 0, "S1516C3");
    set_bf_and_test(lv, s1516c3f0, ABISELECT(96,60), 0, 1, 1, "S1516C3");
    set_bf_and_test(lv, s1516c3f1, ABISELECT(96,60), 1, 1, 1, "S1516C3");
    set_bf_and_test(lv, s1516c3f2, ABISELECT(96,60), 2, 1, 1, "S1516C3");
    set_bf_and_test(lv, s1516c3f3, ABISELECT(96,60), 3, 1, 1, "S1516C3");
    set_bf_and_test(lv, s1516c3f4, ABISELECT(96,60), 4, 1, 1, "S1516C3");
    set_bf_and_test(lv, s1516c3f5, ABISELECT(96,60), 5, 1, 1, "S1516C3");
    set_bf_and_test(lv, s1516c3f6, ABISELECT(96,60), 6, 1, 1, "S1516C3");
    check_field_offset(lv, s1516c3f7, ABISELECT(97,61), "S1516C3.s1516c3f7");
    test_class_info(&lv, &cd_S1516C3);
    dp->~S1516C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1516C3(Test_S1516C3, "S1516C3", ABISELECT(104,64));

#else // __cplusplus

extern void _ZN7S1516C3C1Ev();
extern void _ZN7S1516C3D1Ev();
Name_Map name_map_S1516C3[] = {
  NSPAIR(_ZN7S1516C3C1Ev),
  NSPAIR(_ZN7S1516C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1516C4;
extern VTBL_ENTRY _ZTI7S1516C4[];
extern  VTBL_ENTRY _ZTV7S1516C4[];
static Base_Class bases_S1516C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1516C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI7S1516C3[];
extern void _ZN7S1516C3D1Ev();
extern void _ZN7S1516C3D0Ev();
extern void _ZN7S1516C42v6Ev();
extern void _ZN7S1516C42v7Ev();
extern void _ZN7S1516C42v8Ev();
extern void _ZN7S1516C42v9Ev();
extern void _ZN7S1516C43v10Ev();
extern void _ZN7S1516C43v11Ev();
extern void _ZN7S1516C43v12Ev();
extern void _ZN7S1516C43v13Ev();
extern void _ZN7S1516C43v14Ev();
extern void _ZN7S1516C43v15Ev();
extern void _ZN7S1516C43v16Ev();
extern void _ZN7S1516C43v17Ev();
extern void _ZN7S1516C43v18Ev();
extern void _ZN7S1516C43v19Ev();
extern void _ZN7S1516C43v20Ev();
extern void _ZN7S1516C43v21Ev();
extern void _ZN7S1516C43v22Ev();
extern void _ZN7S1516C43v23Ev();
extern void _ZN7S1516C43v24Ev();
extern void _ZN7S1516C43v25Ev();
extern void _ZN7S1516C43v26Ev();
extern void _ZN7S1516C43v27Ev();
extern void _ZN7S1516C43v28Ev();
extern void _ZN7S1516C43v29Ev();
extern void _ZN7S1516C43v30Ev();
extern void _ZN7S1516C43v31Ev();
extern void _ZN7S1516C43v32Ev();
extern void _ZN7S1516C43v33Ev();
extern void _ZN7S1516C43v34Ev();
extern void _ZN7S1516C43v35Ev();
extern void _ZN7S1516C43v36Ev();
extern void _ZN7S1516C43v37Ev();
extern void _ZN7S1516C43v38Ev();
extern void _ZN7S1516C43v39Ev();
extern void _ZN7S1516C43v40Ev();
extern void _ZN7S1516C43v41Ev();
extern void _ZN7S1516C43v42Ev();
extern void _ZN7S1516C43v43Ev();
extern void _ZN7S1516C43v44Ev();
extern void _ZN7S1516C43v45Ev();
extern void _ZN7S1516C43v46Ev();
extern void _ZN7S1516C43v47Ev();
extern void _ZN7S1516C43v48Ev();
extern void _ZN7S1516C43v49Ev();
extern void _ZN7S1516C43v50Ev();
extern void _ZN7S1516C43v51Ev();
extern void _ZN7S1516C43v52Ev();
extern void _ZN7S1516C43v53Ev();
extern void _ZN7S1516C43v54Ev();
extern void _ZN7S1516C43v55Ev();
extern void _ZN7S1516C43v56Ev();
extern void _ZN7S1516C43v57Ev();
extern void _ZN7S1516C43v58Ev();
extern void _ZN7S1516C43v59Ev();
extern void _ZN7S1516C43v60Ev();
extern void _ZN7S1516C43v61Ev();
extern void _ZN7S1516C43v62Ev();
extern void _ZN7S1516C43v63Ev();
extern void _ZN7S1516C43v64Ev();
extern void _ZN7S1516C43v65Ev();
extern void _ZN7S1516C43v66Ev();
extern void _ZN7S1516C43v67Ev();
extern void _ZN7S1516C43v68Ev();
extern void _ZN7S1516C43v69Ev();
extern void _ZN7S1516C33v70Ev();
extern void _ZN7S1516C33v71Ev();
extern void _ZN7S1516C33v72Ev();
extern void _ZN7S1516C33v73Ev();
extern void _ZN7S1516C33v74Ev();
extern void _ZN7S1516C33v75Ev();
extern void _ZN7S1516C33v76Ev();
extern void _ZN7S1516C33v77Ev();
extern void _ZN7S1516C33v78Ev();
extern void _ZN7S1516C33v79Ev();
extern void _ZN7S1516C33v80Ev();
extern void _ZN7S1516C33v81Ev();
extern void _ZN7S1516C33v82Ev();
extern void _ZN7S1516C33v83Ev();
extern void _ZN7S1516C33v84Ev();
extern void _ZN7S1516C33v85Ev();
extern void _ZN7S1516C33v86Ev();
extern void _ZN7S1516C33v87Ev();
extern void _ZN7S1516C33v88Ev();
extern void _ZN7S1516C33v89Ev();
static  VTBL_ENTRY vtc_S1516C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1516C3[0]),
  (VTBL_ENTRY)&_ZN7S1516C3D1Ev,
  (VTBL_ENTRY)&_ZN7S1516C3D0Ev,
  (VTBL_ENTRY)&_ZN7S1516C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1516C42v7Ev,
  (VTBL_ENTRY)&_ZN7S1516C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1516C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1516C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1516C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1516C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1516C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1516C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1516C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1516C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1516C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1516C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1516C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1516C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1516C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1516C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1516C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1516C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1516C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1516C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1516C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1516C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1516C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1516C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1516C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1516C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1516C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1516C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1516C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1516C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1516C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1516C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1516C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1516C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1516C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1516C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1516C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1516C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1516C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1516C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1516C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1516C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1516C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1516C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1516C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1516C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1516C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1516C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1516C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1516C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1516C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1516C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1516C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1516C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1516C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1516C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1516C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1516C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1516C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1516C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1516C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1516C43v68Ev,
  (VTBL_ENTRY)&_ZN7S1516C43v69Ev,
  (VTBL_ENTRY)&_ZN7S1516C33v70Ev,
  (VTBL_ENTRY)&_ZN7S1516C33v71Ev,
  (VTBL_ENTRY)&_ZN7S1516C33v72Ev,
  (VTBL_ENTRY)&_ZN7S1516C33v73Ev,
  (VTBL_ENTRY)&_ZN7S1516C33v74Ev,
  (VTBL_ENTRY)&_ZN7S1516C33v75Ev,
  (VTBL_ENTRY)&_ZN7S1516C33v76Ev,
  (VTBL_ENTRY)&_ZN7S1516C33v77Ev,
  (VTBL_ENTRY)&_ZN7S1516C33v78Ev,
  (VTBL_ENTRY)&_ZN7S1516C33v79Ev,
  (VTBL_ENTRY)&_ZN7S1516C33v80Ev,
  (VTBL_ENTRY)&_ZN7S1516C33v81Ev,
  (VTBL_ENTRY)&_ZN7S1516C33v82Ev,
  (VTBL_ENTRY)&_ZN7S1516C33v83Ev,
  (VTBL_ENTRY)&_ZN7S1516C33v84Ev,
  (VTBL_ENTRY)&_ZN7S1516C33v85Ev,
  (VTBL_ENTRY)&_ZN7S1516C33v86Ev,
  (VTBL_ENTRY)&_ZN7S1516C33v87Ev,
  (VTBL_ENTRY)&_ZN7S1516C33v88Ev,
  (VTBL_ENTRY)&_ZN7S1516C33v89Ev,
};
extern VTBL_ENTRY _ZTI7S1516C3[];
extern  VTBL_ENTRY _ZTV7S1516C3[];
Class_Descriptor cd_S1516C3 = {  "S1516C3", // class name
  bases_S1516C3, 1,
  &(vtc_S1516C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(104,64), // object size
  NSPAIRA(_ZTI7S1516C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1516C3),88, //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  S1516C2  : S1516C3 {
  virtual  ~S1516C2(); // _ZN7S1516C2D1Ev
  virtual void  v90(); // _ZN7S1516C23v90Ev
  virtual void  v91(); // _ZN7S1516C23v91Ev
  virtual void  v92(); // _ZN7S1516C23v92Ev
  virtual void  v93(); // _ZN7S1516C23v93Ev
  virtual void  v94(); // _ZN7S1516C23v94Ev
  virtual void  v95(); // _ZN7S1516C23v95Ev
  virtual void  v96(); // _ZN7S1516C23v96Ev
  virtual void  v97(); // _ZN7S1516C23v97Ev
  virtual void  v98(); // _ZN7S1516C23v98Ev
  S1516C2(); // tgen
};
//SIG(-1 S1516C2) C1{ BC2{ BC3{ vd 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 Fi FL Fp[4] Fi[2] Fp FC4{ m Fi[2]} Fp[2]} vd v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 v91 v92 v93 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 FC5{ m}} vd v1 v2 v3 v4 v5 v6 v7 v8 v9}


 S1516C2 ::~S1516C2(){ note_dtor("S1516C2", this);}
void  S1516C2 ::v90(){vfunc_called(this, "_ZN7S1516C23v90Ev");}
void  S1516C2 ::v91(){vfunc_called(this, "_ZN7S1516C23v91Ev");}
void  S1516C2 ::v92(){vfunc_called(this, "_ZN7S1516C23v92Ev");}
void  S1516C2 ::v93(){vfunc_called(this, "_ZN7S1516C23v93Ev");}
void  S1516C2 ::v94(){vfunc_called(this, "_ZN7S1516C23v94Ev");}
void  S1516C2 ::v95(){vfunc_called(this, "_ZN7S1516C23v95Ev");}
void  S1516C2 ::v96(){vfunc_called(this, "_ZN7S1516C23v96Ev");}
void  S1516C2 ::v97(){vfunc_called(this, "_ZN7S1516C23v97Ev");}
void  S1516C2 ::v98(){vfunc_called(this, "_ZN7S1516C23v98Ev");}
S1516C2 ::S1516C2(){ note_ctor("S1516C2", this);} // tgen

static void Test_S1516C2()
{
  extern Class_Descriptor cd_S1516C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(14,17)];
    init_test(&cd_S1516C2, buf);
    S1516C2 *dp, &lv = *(dp=new (buf) S1516C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(104,64), "sizeof(S1516C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1516C2)");
    check_base_class_offset(lv, (S1516C4*)(S1516C3*), 0, "S1516C2");
    check_base_class_offset(lv, (S1516C3*), 0, "S1516C2");
    test_class_info(&lv, &cd_S1516C2);
    dp->~S1516C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1516C2(Test_S1516C2, "S1516C2", ABISELECT(104,64));

#else // __cplusplus

extern void _ZN7S1516C2C1Ev();
extern void _ZN7S1516C2D1Ev();
Name_Map name_map_S1516C2[] = {
  NSPAIR(_ZN7S1516C2C1Ev),
  NSPAIR(_ZN7S1516C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1516C4;
extern VTBL_ENTRY _ZTI7S1516C4[];
extern  VTBL_ENTRY _ZTV7S1516C4[];
extern Class_Descriptor cd_S1516C3;
extern VTBL_ENTRY _ZTI7S1516C3[];
extern  VTBL_ENTRY _ZTV7S1516C3[];
static Base_Class bases_S1516C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1516C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S1516C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S1516C2[];
extern void _ZN7S1516C2D1Ev();
extern void _ZN7S1516C2D0Ev();
extern void _ZN7S1516C42v6Ev();
extern void _ZN7S1516C42v7Ev();
extern void _ZN7S1516C42v8Ev();
extern void _ZN7S1516C42v9Ev();
extern void _ZN7S1516C43v10Ev();
extern void _ZN7S1516C43v11Ev();
extern void _ZN7S1516C43v12Ev();
extern void _ZN7S1516C43v13Ev();
extern void _ZN7S1516C43v14Ev();
extern void _ZN7S1516C43v15Ev();
extern void _ZN7S1516C43v16Ev();
extern void _ZN7S1516C43v17Ev();
extern void _ZN7S1516C43v18Ev();
extern void _ZN7S1516C43v19Ev();
extern void _ZN7S1516C43v20Ev();
extern void _ZN7S1516C43v21Ev();
extern void _ZN7S1516C43v22Ev();
extern void _ZN7S1516C43v23Ev();
extern void _ZN7S1516C43v24Ev();
extern void _ZN7S1516C43v25Ev();
extern void _ZN7S1516C43v26Ev();
extern void _ZN7S1516C43v27Ev();
extern void _ZN7S1516C43v28Ev();
extern void _ZN7S1516C43v29Ev();
extern void _ZN7S1516C43v30Ev();
extern void _ZN7S1516C43v31Ev();
extern void _ZN7S1516C43v32Ev();
extern void _ZN7S1516C43v33Ev();
extern void _ZN7S1516C43v34Ev();
extern void _ZN7S1516C43v35Ev();
extern void _ZN7S1516C43v36Ev();
extern void _ZN7S1516C43v37Ev();
extern void _ZN7S1516C43v38Ev();
extern void _ZN7S1516C43v39Ev();
extern void _ZN7S1516C43v40Ev();
extern void _ZN7S1516C43v41Ev();
extern void _ZN7S1516C43v42Ev();
extern void _ZN7S1516C43v43Ev();
extern void _ZN7S1516C43v44Ev();
extern void _ZN7S1516C43v45Ev();
extern void _ZN7S1516C43v46Ev();
extern void _ZN7S1516C43v47Ev();
extern void _ZN7S1516C43v48Ev();
extern void _ZN7S1516C43v49Ev();
extern void _ZN7S1516C43v50Ev();
extern void _ZN7S1516C43v51Ev();
extern void _ZN7S1516C43v52Ev();
extern void _ZN7S1516C43v53Ev();
extern void _ZN7S1516C43v54Ev();
extern void _ZN7S1516C43v55Ev();
extern void _ZN7S1516C43v56Ev();
extern void _ZN7S1516C43v57Ev();
extern void _ZN7S1516C43v58Ev();
extern void _ZN7S1516C43v59Ev();
extern void _ZN7S1516C43v60Ev();
extern void _ZN7S1516C43v61Ev();
extern void _ZN7S1516C43v62Ev();
extern void _ZN7S1516C43v63Ev();
extern void _ZN7S1516C43v64Ev();
extern void _ZN7S1516C43v65Ev();
extern void _ZN7S1516C43v66Ev();
extern void _ZN7S1516C43v67Ev();
extern void _ZN7S1516C43v68Ev();
extern void _ZN7S1516C43v69Ev();
extern void _ZN7S1516C33v70Ev();
extern void _ZN7S1516C33v71Ev();
extern void _ZN7S1516C33v72Ev();
extern void _ZN7S1516C33v73Ev();
extern void _ZN7S1516C33v74Ev();
extern void _ZN7S1516C33v75Ev();
extern void _ZN7S1516C33v76Ev();
extern void _ZN7S1516C33v77Ev();
extern void _ZN7S1516C33v78Ev();
extern void _ZN7S1516C33v79Ev();
extern void _ZN7S1516C33v80Ev();
extern void _ZN7S1516C33v81Ev();
extern void _ZN7S1516C33v82Ev();
extern void _ZN7S1516C33v83Ev();
extern void _ZN7S1516C33v84Ev();
extern void _ZN7S1516C33v85Ev();
extern void _ZN7S1516C33v86Ev();
extern void _ZN7S1516C33v87Ev();
extern void _ZN7S1516C33v88Ev();
extern void _ZN7S1516C33v89Ev();
extern void _ZN7S1516C23v90Ev();
extern void _ZN7S1516C23v91Ev();
extern void _ZN7S1516C23v92Ev();
extern void _ZN7S1516C23v93Ev();
extern void _ZN7S1516C23v94Ev();
extern void _ZN7S1516C23v95Ev();
extern void _ZN7S1516C23v96Ev();
extern void _ZN7S1516C23v97Ev();
extern void _ZN7S1516C23v98Ev();
static  VTBL_ENTRY vtc_S1516C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1516C2[0]),
  (VTBL_ENTRY)&_ZN7S1516C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1516C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1516C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1516C42v7Ev,
  (VTBL_ENTRY)&_ZN7S1516C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1516C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1516C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1516C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1516C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1516C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1516C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1516C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1516C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1516C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1516C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1516C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1516C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1516C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1516C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1516C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1516C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1516C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1516C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1516C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1516C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1516C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1516C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1516C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1516C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1516C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1516C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1516C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1516C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1516C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1516C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1516C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1516C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1516C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1516C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1516C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1516C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1516C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1516C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1516C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1516C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1516C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1516C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1516C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1516C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1516C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1516C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1516C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1516C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1516C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1516C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1516C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1516C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1516C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1516C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1516C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1516C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1516C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1516C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1516C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1516C43v68Ev,
  (VTBL_ENTRY)&_ZN7S1516C43v69Ev,
  (VTBL_ENTRY)&_ZN7S1516C33v70Ev,
  (VTBL_ENTRY)&_ZN7S1516C33v71Ev,
  (VTBL_ENTRY)&_ZN7S1516C33v72Ev,
  (VTBL_ENTRY)&_ZN7S1516C33v73Ev,
  (VTBL_ENTRY)&_ZN7S1516C33v74Ev,
  (VTBL_ENTRY)&_ZN7S1516C33v75Ev,
  (VTBL_ENTRY)&_ZN7S1516C33v76Ev,
  (VTBL_ENTRY)&_ZN7S1516C33v77Ev,
  (VTBL_ENTRY)&_ZN7S1516C33v78Ev,
  (VTBL_ENTRY)&_ZN7S1516C33v79Ev,
  (VTBL_ENTRY)&_ZN7S1516C33v80Ev,
  (VTBL_ENTRY)&_ZN7S1516C33v81Ev,
  (VTBL_ENTRY)&_ZN7S1516C33v82Ev,
  (VTBL_ENTRY)&_ZN7S1516C33v83Ev,
  (VTBL_ENTRY)&_ZN7S1516C33v84Ev,
  (VTBL_ENTRY)&_ZN7S1516C33v85Ev,
  (VTBL_ENTRY)&_ZN7S1516C33v86Ev,
  (VTBL_ENTRY)&_ZN7S1516C33v87Ev,
  (VTBL_ENTRY)&_ZN7S1516C33v88Ev,
  (VTBL_ENTRY)&_ZN7S1516C33v89Ev,
  (VTBL_ENTRY)&_ZN7S1516C23v90Ev,
  (VTBL_ENTRY)&_ZN7S1516C23v91Ev,
  (VTBL_ENTRY)&_ZN7S1516C23v92Ev,
  (VTBL_ENTRY)&_ZN7S1516C23v93Ev,
  (VTBL_ENTRY)&_ZN7S1516C23v94Ev,
  (VTBL_ENTRY)&_ZN7S1516C23v95Ev,
  (VTBL_ENTRY)&_ZN7S1516C23v96Ev,
  (VTBL_ENTRY)&_ZN7S1516C23v97Ev,
  (VTBL_ENTRY)&_ZN7S1516C23v98Ev,
};
extern VTBL_ENTRY _ZTI7S1516C2[];
extern  VTBL_ENTRY _ZTV7S1516C2[];
Class_Descriptor cd_S1516C2 = {  "S1516C2", // class name
  bases_S1516C2, 2,
  &(vtc_S1516C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(104,64), // object size
  NSPAIRA(_ZTI7S1516C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1516C2),97, //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  S1516C1  : S1516C2 {
  ::S693C8 s1516c1f0;
  virtual  ~S1516C1(); // _ZN7S1516C1D1Ev
  virtual void  v1(); // _ZN7S1516C12v1Ev
  virtual void  v2(); // _ZN7S1516C12v2Ev
  virtual void  v3(); // _ZN7S1516C12v3Ev
  virtual void  v4(); // _ZN7S1516C12v4Ev
  virtual void  v5(); // _ZN7S1516C12v5Ev
  S1516C1(); // tgen
};
//SIG(1 S1516C1) C1{ BC2{ BC3{ BC4{ 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 FC5{ m Fi[2]} Fp[2]} vd v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 FC6{ m}} vd v90 v91 v92 v93 v94 v95 v96 v97 v98} vd v1 v2 v3 v4 v5 FC7{ m Fi[7] Fc Fi[4] FC8{ m Fi[3]} Fi[7] Fc Fi:1 Fi:1 Fi:1 Fi:1 Fi[3] Fc Fi Fc Fi[2] FC8 Fi[5] Fp[3] Fi[3] Fp[9] Fi Fp Fi Fp Fi:1 Fi:1 Fi:1 Fi:1 Fp[3] Fi[2]}}


 S1516C1 ::~S1516C1(){ note_dtor("S1516C1", this);}
void  S1516C1 ::v1(){vfunc_called(this, "_ZN7S1516C12v1Ev");}
void  S1516C1 ::v2(){vfunc_called(this, "_ZN7S1516C12v2Ev");}
void  S1516C1 ::v3(){vfunc_called(this, "_ZN7S1516C12v3Ev");}
void  S1516C1 ::v4(){vfunc_called(this, "_ZN7S1516C12v4Ev");}
void  S1516C1 ::v5(){vfunc_called(this, "_ZN7S1516C12v5Ev");}
S1516C1 ::S1516C1(){ note_ctor("S1516C1", this);} // tgen

static void Test_S1516C1()
{
  extern Class_Descriptor cd_S1516C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(57,81)];
    init_test(&cd_S1516C1, buf);
    S1516C1 *dp, &lv = *(dp=new (buf) S1516C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(448,320), "sizeof(S1516C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1516C1)");
    check_base_class_offset(lv, (S1516C4*)(S1516C3*)(S1516C2*), 0, "S1516C1");
    check_base_class_offset(lv, (S1516C3*)(S1516C2*), 0, "S1516C1");
    check_base_class_offset(lv, (S1516C2*), 0, "S1516C1");
    check_field_offset(lv, s1516c1f0, ABISELECT(104,64), "S1516C1.s1516c1f0");
    test_class_info(&lv, &cd_S1516C1);
    dp->~S1516C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1516C1(Test_S1516C1, "S1516C1", ABISELECT(448,320));

#else // __cplusplus

extern void _ZN7S1516C1C1Ev();
extern void _ZN7S1516C1D1Ev();
Name_Map name_map_S1516C1[] = {
  NSPAIR(_ZN7S1516C1C1Ev),
  NSPAIR(_ZN7S1516C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1516C4;
extern VTBL_ENTRY _ZTI7S1516C4[];
extern  VTBL_ENTRY _ZTV7S1516C4[];
extern Class_Descriptor cd_S1516C3;
extern VTBL_ENTRY _ZTI7S1516C3[];
extern  VTBL_ENTRY _ZTV7S1516C3[];
extern Class_Descriptor cd_S1516C2;
extern VTBL_ENTRY _ZTI7S1516C2[];
extern  VTBL_ENTRY _ZTV7S1516C2[];
static Base_Class bases_S1516C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1516C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S1516C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S1516C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S1516C1[];
extern void _ZN7S1516C1D1Ev();
extern void _ZN7S1516C1D0Ev();
extern void _ZN7S1516C42v6Ev();
extern void _ZN7S1516C42v7Ev();
extern void _ZN7S1516C42v8Ev();
extern void _ZN7S1516C42v9Ev();
extern void _ZN7S1516C43v10Ev();
extern void _ZN7S1516C43v11Ev();
extern void _ZN7S1516C43v12Ev();
extern void _ZN7S1516C43v13Ev();
extern void _ZN7S1516C43v14Ev();
extern void _ZN7S1516C43v15Ev();
extern void _ZN7S1516C43v16Ev();
extern void _ZN7S1516C43v17Ev();
extern void _ZN7S1516C43v18Ev();
extern void _ZN7S1516C43v19Ev();
extern void _ZN7S1516C43v20Ev();
extern void _ZN7S1516C43v21Ev();
extern void _ZN7S1516C43v22Ev();
extern void _ZN7S1516C43v23Ev();
extern void _ZN7S1516C43v24Ev();
extern void _ZN7S1516C43v25Ev();
extern void _ZN7S1516C43v26Ev();
extern void _ZN7S1516C43v27Ev();
extern void _ZN7S1516C43v28Ev();
extern void _ZN7S1516C43v29Ev();
extern void _ZN7S1516C43v30Ev();
extern void _ZN7S1516C43v31Ev();
extern void _ZN7S1516C43v32Ev();
extern void _ZN7S1516C43v33Ev();
extern void _ZN7S1516C43v34Ev();
extern void _ZN7S1516C43v35Ev();
extern void _ZN7S1516C43v36Ev();
extern void _ZN7S1516C43v37Ev();
extern void _ZN7S1516C43v38Ev();
extern void _ZN7S1516C43v39Ev();
extern void _ZN7S1516C43v40Ev();
extern void _ZN7S1516C43v41Ev();
extern void _ZN7S1516C43v42Ev();
extern void _ZN7S1516C43v43Ev();
extern void _ZN7S1516C43v44Ev();
extern void _ZN7S1516C43v45Ev();
extern void _ZN7S1516C43v46Ev();
extern void _ZN7S1516C43v47Ev();
extern void _ZN7S1516C43v48Ev();
extern void _ZN7S1516C43v49Ev();
extern void _ZN7S1516C43v50Ev();
extern void _ZN7S1516C43v51Ev();
extern void _ZN7S1516C43v52Ev();
extern void _ZN7S1516C43v53Ev();
extern void _ZN7S1516C43v54Ev();
extern void _ZN7S1516C43v55Ev();
extern void _ZN7S1516C43v56Ev();
extern void _ZN7S1516C43v57Ev();
extern void _ZN7S1516C43v58Ev();
extern void _ZN7S1516C43v59Ev();
extern void _ZN7S1516C43v60Ev();
extern void _ZN7S1516C43v61Ev();
extern void _ZN7S1516C43v62Ev();
extern void _ZN7S1516C43v63Ev();
extern void _ZN7S1516C43v64Ev();
extern void _ZN7S1516C43v65Ev();
extern void _ZN7S1516C43v66Ev();
extern void _ZN7S1516C43v67Ev();
extern void _ZN7S1516C43v68Ev();
extern void _ZN7S1516C43v69Ev();
extern void _ZN7S1516C33v70Ev();
extern void _ZN7S1516C33v71Ev();
extern void _ZN7S1516C33v72Ev();
extern void _ZN7S1516C33v73Ev();
extern void _ZN7S1516C33v74Ev();
extern void _ZN7S1516C33v75Ev();
extern void _ZN7S1516C33v76Ev();
extern void _ZN7S1516C33v77Ev();
extern void _ZN7S1516C33v78Ev();
extern void _ZN7S1516C33v79Ev();
extern void _ZN7S1516C33v80Ev();
extern void _ZN7S1516C33v81Ev();
extern void _ZN7S1516C33v82Ev();
extern void _ZN7S1516C33v83Ev();
extern void _ZN7S1516C33v84Ev();
extern void _ZN7S1516C33v85Ev();
extern void _ZN7S1516C33v86Ev();
extern void _ZN7S1516C33v87Ev();
extern void _ZN7S1516C33v88Ev();
extern void _ZN7S1516C33v89Ev();
extern void _ZN7S1516C23v90Ev();
extern void _ZN7S1516C23v91Ev();
extern void _ZN7S1516C23v92Ev();
extern void _ZN7S1516C23v93Ev();
extern void _ZN7S1516C23v94Ev();
extern void _ZN7S1516C23v95Ev();
extern void _ZN7S1516C23v96Ev();
extern void _ZN7S1516C23v97Ev();
extern void _ZN7S1516C23v98Ev();
extern void _ZN7S1516C12v1Ev();
extern void _ZN7S1516C12v2Ev();
extern void _ZN7S1516C12v3Ev();
extern void _ZN7S1516C12v4Ev();
extern void _ZN7S1516C12v5Ev();
static  VTBL_ENTRY vtc_S1516C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1516C1[0]),
  (VTBL_ENTRY)&_ZN7S1516C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1516C1D0Ev,
  (VTBL_ENTRY)&_ZN7S1516C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1516C42v7Ev,
  (VTBL_ENTRY)&_ZN7S1516C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1516C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1516C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1516C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1516C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1516C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1516C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1516C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1516C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1516C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1516C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1516C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1516C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1516C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1516C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1516C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1516C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1516C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1516C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1516C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1516C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1516C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1516C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1516C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1516C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1516C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1516C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1516C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1516C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1516C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1516C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1516C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1516C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1516C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1516C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1516C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1516C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1516C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1516C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1516C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1516C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1516C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1516C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1516C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1516C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1516C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1516C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1516C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1516C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1516C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1516C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1516C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1516C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1516C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1516C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1516C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1516C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1516C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1516C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1516C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1516C43v68Ev,
  (VTBL_ENTRY)&_ZN7S1516C43v69Ev,
  (VTBL_ENTRY)&_ZN7S1516C33v70Ev,
  (VTBL_ENTRY)&_ZN7S1516C33v71Ev,
  (VTBL_ENTRY)&_ZN7S1516C33v72Ev,
  (VTBL_ENTRY)&_ZN7S1516C33v73Ev,
  (VTBL_ENTRY)&_ZN7S1516C33v74Ev,
  (VTBL_ENTRY)&_ZN7S1516C33v75Ev,
  (VTBL_ENTRY)&_ZN7S1516C33v76Ev,
  (VTBL_ENTRY)&_ZN7S1516C33v77Ev,
  (VTBL_ENTRY)&_ZN7S1516C33v78Ev,
  (VTBL_ENTRY)&_ZN7S1516C33v79Ev,
  (VTBL_ENTRY)&_ZN7S1516C33v80Ev,
  (VTBL_ENTRY)&_ZN7S1516C33v81Ev,
  (VTBL_ENTRY)&_ZN7S1516C33v82Ev,
  (VTBL_ENTRY)&_ZN7S1516C33v83Ev,
  (VTBL_ENTRY)&_ZN7S1516C33v84Ev,
  (VTBL_ENTRY)&_ZN7S1516C33v85Ev,
  (VTBL_ENTRY)&_ZN7S1516C33v86Ev,
  (VTBL_ENTRY)&_ZN7S1516C33v87Ev,
  (VTBL_ENTRY)&_ZN7S1516C33v88Ev,
  (VTBL_ENTRY)&_ZN7S1516C33v89Ev,
  (VTBL_ENTRY)&_ZN7S1516C23v90Ev,
  (VTBL_ENTRY)&_ZN7S1516C23v91Ev,
  (VTBL_ENTRY)&_ZN7S1516C23v92Ev,
  (VTBL_ENTRY)&_ZN7S1516C23v93Ev,
  (VTBL_ENTRY)&_ZN7S1516C23v94Ev,
  (VTBL_ENTRY)&_ZN7S1516C23v95Ev,
  (VTBL_ENTRY)&_ZN7S1516C23v96Ev,
  (VTBL_ENTRY)&_ZN7S1516C23v97Ev,
  (VTBL_ENTRY)&_ZN7S1516C23v98Ev,
  (VTBL_ENTRY)&_ZN7S1516C12v1Ev,
  (VTBL_ENTRY)&_ZN7S1516C12v2Ev,
  (VTBL_ENTRY)&_ZN7S1516C12v3Ev,
  (VTBL_ENTRY)&_ZN7S1516C12v4Ev,
  (VTBL_ENTRY)&_ZN7S1516C12v5Ev,
};
extern VTBL_ENTRY _ZTI7S1516C1[];
extern  VTBL_ENTRY _ZTV7S1516C1[];
Class_Descriptor cd_S1516C1 = {  "S1516C1", // class name
  bases_S1516C1, 3,
  &(vtc_S1516C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(448,320), // object size
  NSPAIRA(_ZTI7S1516C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1516C1),102, //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  S1300C4  {
  int s1300c4f0;
  __tsi64 s1300c4f1;
  void *s1300c4f2[4];
  int s1300c4f3[2];
  void *s1300c4f4;
  ::S674C6_nt s1300c4f5;
  void *s1300c4f6[2];
  virtual  ~S1300C4(); // _ZN7S1300C4D1Ev
  virtual void  v11(); // _ZN7S1300C43v11Ev
  virtual void  v12(); // _ZN7S1300C43v12Ev
  virtual void  v13(); // _ZN7S1300C43v13Ev
  virtual void  v14(); // _ZN7S1300C43v14Ev
  virtual void  v15(); // _ZN7S1300C43v15Ev
  virtual void  v16(); // _ZN7S1300C43v16Ev
  virtual void  v17(); // _ZN7S1300C43v17Ev
  virtual void  v18(); // _ZN7S1300C43v18Ev
  virtual void  v19(); // _ZN7S1300C43v19Ev
  virtual void  v20(); // _ZN7S1300C43v20Ev
  virtual void  v21(); // _ZN7S1300C43v21Ev
  virtual void  v22(); // _ZN7S1300C43v22Ev
  virtual void  v23(); // _ZN7S1300C43v23Ev
  virtual void  v24(); // _ZN7S1300C43v24Ev
  virtual void  v25(); // _ZN7S1300C43v25Ev
  virtual void  v26(); // _ZN7S1300C43v26Ev
  virtual void  v27(); // _ZN7S1300C43v27Ev
  virtual void  v28(); // _ZN7S1300C43v28Ev
  virtual void  v29(); // _ZN7S1300C43v29Ev
  virtual void  v30(); // _ZN7S1300C43v30Ev
  virtual void  v31(); // _ZN7S1300C43v31Ev
  virtual void  v32(); // _ZN7S1300C43v32Ev
  virtual void  v33(); // _ZN7S1300C43v33Ev
  virtual void  v34(); // _ZN7S1300C43v34Ev
  virtual void  v35(); // _ZN7S1300C43v35Ev
  virtual void  v36(); // _ZN7S1300C43v36Ev
  virtual void  v37(); // _ZN7S1300C43v37Ev
  virtual void  v38(); // _ZN7S1300C43v38Ev
  virtual void  v39(); // _ZN7S1300C43v39Ev
  virtual void  v40(); // _ZN7S1300C43v40Ev
  virtual void  v41(); // _ZN7S1300C43v41Ev
  virtual void  v42(); // _ZN7S1300C43v42Ev
  virtual void  v43(); // _ZN7S1300C43v43Ev
  virtual void  v44(); // _ZN7S1300C43v44Ev
  virtual void  v45(); // _ZN7S1300C43v45Ev
  virtual void  v46(); // _ZN7S1300C43v46Ev
  virtual void  v47(); // _ZN7S1300C43v47Ev
  virtual void  v48(); // _ZN7S1300C43v48Ev
  virtual void  v49(); // _ZN7S1300C43v49Ev
  virtual void  v50(); // _ZN7S1300C43v50Ev
  virtual void  v51(); // _ZN7S1300C43v51Ev
  virtual void  v52(); // _ZN7S1300C43v52Ev
  virtual void  v53(); // _ZN7S1300C43v53Ev
  virtual void  v54(); // _ZN7S1300C43v54Ev
  virtual void  v55(); // _ZN7S1300C43v55Ev
  virtual void  v56(); // _ZN7S1300C43v56Ev
  virtual void  v57(); // _ZN7S1300C43v57Ev
  virtual void  v58(); // _ZN7S1300C43v58Ev
  virtual void  v59(); // _ZN7S1300C43v59Ev
  virtual void  v60(); // _ZN7S1300C43v60Ev
  virtual void  v61(); // _ZN7S1300C43v61Ev
  virtual void  v62(); // _ZN7S1300C43v62Ev
  virtual void  v63(); // _ZN7S1300C43v63Ev
  virtual void  v64(); // _ZN7S1300C43v64Ev
  virtual void  v65(); // _ZN7S1300C43v65Ev
  virtual void  v66(); // _ZN7S1300C43v66Ev
  virtual void  v67(); // _ZN7S1300C43v67Ev
  virtual void  v68(); // _ZN7S1300C43v68Ev
  virtual void  v69(); // _ZN7S1300C43v69Ev
  virtual void  v70(); // _ZN7S1300C43v70Ev
  virtual void  v71(); // _ZN7S1300C43v71Ev
  virtual void  v72(); // _ZN7S1300C43v72Ev
  virtual void  v73(); // _ZN7S1300C43v73Ev
  virtual void  v74(); // _ZN7S1300C43v74Ev
  S1300C4(); // tgen
};
//SIG(-1 S1300C4) 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]}


 S1300C4 ::~S1300C4(){ note_dtor("S1300C4", this);}
void  S1300C4 ::v11(){vfunc_called(this, "_ZN7S1300C43v11Ev");}
void  S1300C4 ::v12(){vfunc_called(this, "_ZN7S1300C43v12Ev");}
void  S1300C4 ::v13(){vfunc_called(this, "_ZN7S1300C43v13Ev");}
void  S1300C4 ::v14(){vfunc_called(this, "_ZN7S1300C43v14Ev");}
void  S1300C4 ::v15(){vfunc_called(this, "_ZN7S1300C43v15Ev");}
void  S1300C4 ::v16(){vfunc_called(this, "_ZN7S1300C43v16Ev");}
void  S1300C4 ::v17(){vfunc_called(this, "_ZN7S1300C43v17Ev");}
void  S1300C4 ::v18(){vfunc_called(this, "_ZN7S1300C43v18Ev");}
void  S1300C4 ::v19(){vfunc_called(this, "_ZN7S1300C43v19Ev");}
void  S1300C4 ::v20(){vfunc_called(this, "_ZN7S1300C43v20Ev");}
void  S1300C4 ::v21(){vfunc_called(this, "_ZN7S1300C43v21Ev");}
void  S1300C4 ::v22(){vfunc_called(this, "_ZN7S1300C43v22Ev");}
void  S1300C4 ::v23(){vfunc_called(this, "_ZN7S1300C43v23Ev");}
void  S1300C4 ::v24(){vfunc_called(this, "_ZN7S1300C43v24Ev");}
void  S1300C4 ::v25(){vfunc_called(this, "_ZN7S1300C43v25Ev");}
void  S1300C4 ::v26(){vfunc_called(this, "_ZN7S1300C43v26Ev");}
void  S1300C4 ::v27(){vfunc_called(this, "_ZN7S1300C43v27Ev");}
void  S1300C4 ::v28(){vfunc_called(this, "_ZN7S1300C43v28Ev");}
void  S1300C4 ::v29(){vfunc_called(this, "_ZN7S1300C43v29Ev");}
void  S1300C4 ::v30(){vfunc_called(this, "_ZN7S1300C43v30Ev");}
void  S1300C4 ::v31(){vfunc_called(this, "_ZN7S1300C43v31Ev");}
void  S1300C4 ::v32(){vfunc_called(this, "_ZN7S1300C43v32Ev");}
void  S1300C4 ::v33(){vfunc_called(this, "_ZN7S1300C43v33Ev");}
void  S1300C4 ::v34(){vfunc_called(this, "_ZN7S1300C43v34Ev");}
void  S1300C4 ::v35(){vfunc_called(this, "_ZN7S1300C43v35Ev");}
void  S1300C4 ::v36(){vfunc_called(this, "_ZN7S1300C43v36Ev");}
void  S1300C4 ::v37(){vfunc_called(this, "_ZN7S1300C43v37Ev");}
void  S1300C4 ::v38(){vfunc_called(this, "_ZN7S1300C43v38Ev");}
void  S1300C4 ::v39(){vfunc_called(this, "_ZN7S1300C43v39Ev");}
void  S1300C4 ::v40(){vfunc_called(this, "_ZN7S1300C43v40Ev");}
void  S1300C4 ::v41(){vfunc_called(this, "_ZN7S1300C43v41Ev");}
void  S1300C4 ::v42(){vfunc_called(this, "_ZN7S1300C43v42Ev");}
void  S1300C4 ::v43(){vfunc_called(this, "_ZN7S1300C43v43Ev");}
void  S1300C4 ::v44(){vfunc_called(this, "_ZN7S1300C43v44Ev");}
void  S1300C4 ::v45(){vfunc_called(this, "_ZN7S1300C43v45Ev");}
void  S1300C4 ::v46(){vfunc_called(this, "_ZN7S1300C43v46Ev");}
void  S1300C4 ::v47(){vfunc_called(this, "_ZN7S1300C43v47Ev");}
void  S1300C4 ::v48(){vfunc_called(this, "_ZN7S1300C43v48Ev");}
void  S1300C4 ::v49(){vfunc_called(this, "_ZN7S1300C43v49Ev");}
void  S1300C4 ::v50(){vfunc_called(this, "_ZN7S1300C43v50Ev");}
void  S1300C4 ::v51(){vfunc_called(this, "_ZN7S1300C43v51Ev");}
void  S1300C4 ::v52(){vfunc_called(this, "_ZN7S1300C43v52Ev");}
void  S1300C4 ::v53(){vfunc_called(this, "_ZN7S1300C43v53Ev");}
void  S1300C4 ::v54(){vfunc_called(this, "_ZN7S1300C43v54Ev");}
void  S1300C4 ::v55(){vfunc_called(this, "_ZN7S1300C43v55Ev");}
void  S1300C4 ::v56(){vfunc_called(this, "_ZN7S1300C43v56Ev");}
void  S1300C4 ::v57(){vfunc_called(this, "_ZN7S1300C43v57Ev");}
void  S1300C4 ::v58(){vfunc_called(this, "_ZN7S1300C43v58Ev");}
void  S1300C4 ::v59(){vfunc_called(this, "_ZN7S1300C43v59Ev");}
void  S1300C4 ::v60(){vfunc_called(this, "_ZN7S1300C43v60Ev");}
void  S1300C4 ::v61(){vfunc_called(this, "_ZN7S1300C43v61Ev");}
void  S1300C4 ::v62(){vfunc_called(this, "_ZN7S1300C43v62Ev");}
void  S1300C4 ::v63(){vfunc_called(this, "_ZN7S1300C43v63Ev");}
void  S1300C4 ::v64(){vfunc_called(this, "_ZN7S1300C43v64Ev");}
void  S1300C4 ::v65(){vfunc_called(this, "_ZN7S1300C43v65Ev");}
void  S1300C4 ::v66(){vfunc_called(this, "_ZN7S1300C43v66Ev");}
void  S1300C4 ::v67(){vfunc_called(this, "_ZN7S1300C43v67Ev");}
void  S1300C4 ::v68(){vfunc_called(this, "_ZN7S1300C43v68Ev");}
void  S1300C4 ::v69(){vfunc_called(this, "_ZN7S1300C43v69Ev");}
void  S1300C4 ::v70(){vfunc_called(this, "_ZN7S1300C43v70Ev");}
void  S1300C4 ::v71(){vfunc_called(this, "_ZN7S1300C43v71Ev");}
void  S1300C4 ::v72(){vfunc_called(this, "_ZN7S1300C43v72Ev");}
void  S1300C4 ::v73(){vfunc_called(this, "_ZN7S1300C43v73Ev");}
void  S1300C4 ::v74(){vfunc_called(this, "_ZN7S1300C43v74Ev");}
S1300C4 ::S1300C4(){ note_ctor("S1300C4", this);} // tgen

static void Test_S1300C4()
{
  extern Class_Descriptor cd_S1300C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S1300C4, buf);
    S1300C4 *dp, &lv = *(dp=new (buf) S1300C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S1300C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1300C4)");
    check_field_offset(lv, s1300c4f0, ABISELECT(8,4), "S1300C4.s1300c4f0");
    check_field_offset(lv, s1300c4f1, ABISELECT(16,8), "S1300C4.s1300c4f1");
    check_field_offset(lv, s1300c4f2, ABISELECT(24,16), "S1300C4.s1300c4f2");
    check_field_offset(lv, s1300c4f3, ABISELECT(56,32), "S1300C4.s1300c4f3");
    check_field_offset(lv, s1300c4f4, ABISELECT(64,40), "S1300C4.s1300c4f4");
    check_field_offset(lv, s1300c4f5, ABISELECT(72,44), "S1300C4.s1300c4f5");
    check_field_offset(lv, s1300c4f6, ABISELECT(80,52), "S1300C4.s1300c4f6");
    test_class_info(&lv, &cd_S1300C4);
    dp->~S1300C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1300C4(Test_S1300C4, "S1300C4", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN7S1300C4C1Ev();
extern void _ZN7S1300C4D1Ev();
Name_Map name_map_S1300C4[] = {
  NSPAIR(_ZN7S1300C4C1Ev),
  NSPAIR(_ZN7S1300C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S1300C4[];
extern void _ZN7S1300C4D1Ev();
extern void _ZN7S1300C4D0Ev();
extern void _ZN7S1300C43v11Ev();
extern void _ZN7S1300C43v12Ev();
extern void _ZN7S1300C43v13Ev();
extern void _ZN7S1300C43v14Ev();
extern void _ZN7S1300C43v15Ev();
extern void _ZN7S1300C43v16Ev();
extern void _ZN7S1300C43v17Ev();
extern void _ZN7S1300C43v18Ev();
extern void _ZN7S1300C43v19Ev();
extern void _ZN7S1300C43v20Ev();
extern void _ZN7S1300C43v21Ev();
extern void _ZN7S1300C43v22Ev();
extern void _ZN7S1300C43v23Ev();
extern void _ZN7S1300C43v24Ev();
extern void _ZN7S1300C43v25Ev();
extern void _ZN7S1300C43v26Ev();
extern void _ZN7S1300C43v27Ev();
extern void _ZN7S1300C43v28Ev();
extern void _ZN7S1300C43v29Ev();
extern void _ZN7S1300C43v30Ev();
extern void _ZN7S1300C43v31Ev();
extern void _ZN7S1300C43v32Ev();
extern void _ZN7S1300C43v33Ev();
extern void _ZN7S1300C43v34Ev();
extern void _ZN7S1300C43v35Ev();
extern void _ZN7S1300C43v36Ev();
extern void _ZN7S1300C43v37Ev();
extern void _ZN7S1300C43v38Ev();
extern void _ZN7S1300C43v39Ev();
extern void _ZN7S1300C43v40Ev();
extern void _ZN7S1300C43v41Ev();
extern void _ZN7S1300C43v42Ev();
extern void _ZN7S1300C43v43Ev();
extern void _ZN7S1300C43v44Ev();
extern void _ZN7S1300C43v45Ev();
extern void _ZN7S1300C43v46Ev();
extern void _ZN7S1300C43v47Ev();
extern void _ZN7S1300C43v48Ev();
extern void _ZN7S1300C43v49Ev();
extern void _ZN7S1300C43v50Ev();
extern void _ZN7S1300C43v51Ev();
extern void _ZN7S1300C43v52Ev();
extern void _ZN7S1300C43v53Ev();
extern void _ZN7S1300C43v54Ev();
extern void _ZN7S1300C43v55Ev();
extern void _ZN7S1300C43v56Ev();
extern void _ZN7S1300C43v57Ev();
extern void _ZN7S1300C43v58Ev();
extern void _ZN7S1300C43v59Ev();
extern void _ZN7S1300C43v60Ev();
extern void _ZN7S1300C43v61Ev();
extern void _ZN7S1300C43v62Ev();
extern void _ZN7S1300C43v63Ev();
extern void _ZN7S1300C43v64Ev();
extern void _ZN7S1300C43v65Ev();
extern void _ZN7S1300C43v66Ev();
extern void _ZN7S1300C43v67Ev();
extern void _ZN7S1300C43v68Ev();
extern void _ZN7S1300C43v69Ev();
extern void _ZN7S1300C43v70Ev();
extern void _ZN7S1300C43v71Ev();
extern void _ZN7S1300C43v72Ev();
extern void _ZN7S1300C43v73Ev();
extern void _ZN7S1300C43v74Ev();
static  VTBL_ENTRY vtc_S1300C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1300C4[0]),
  (VTBL_ENTRY)&_ZN7S1300C4D1Ev,
  (VTBL_ENTRY)&_ZN7S1300C4D0Ev,
  (VTBL_ENTRY)&_ZN7S1300C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1300C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1300C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1300C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1300C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1300C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1300C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1300C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1300C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1300C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1300C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1300C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1300C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1300C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1300C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1300C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1300C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1300C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1300C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1300C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1300C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1300C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1300C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1300C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1300C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1300C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1300C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1300C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1300C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1300C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1300C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1300C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1300C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1300C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1300C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1300C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1300C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1300C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1300C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1300C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1300C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1300C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1300C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1300C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1300C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1300C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1300C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1300C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1300C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1300C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1300C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1300C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1300C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1300C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1300C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1300C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1300C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1300C43v68Ev,
  (VTBL_ENTRY)&_ZN7S1300C43v69Ev,
  (VTBL_ENTRY)&_ZN7S1300C43v70Ev,
  (VTBL_ENTRY)&_ZN7S1300C43v71Ev,
  (VTBL_ENTRY)&_ZN7S1300C43v72Ev,
  (VTBL_ENTRY)&_ZN7S1300C43v73Ev,
  (VTBL_ENTRY)&_ZN7S1300C43v74Ev,
};
extern VTBL_ENTRY _ZTI7S1300C4[];
extern  VTBL_ENTRY _ZTV7S1300C4[];
Class_Descriptor cd_S1300C4 = {  "S1300C4", // class name
  0,0,//no base classes
  &(vtc_S1300C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI7S1300C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S1300C4),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  S1300C3  : S1300C4 {
  unsigned int s1300c3f0:1;
  unsigned int s1300c3f1:1;
  unsigned int s1300c3f2:1;
  unsigned int s1300c3f3:1;
  unsigned int s1300c3f4:1;
  unsigned int s1300c3f5:1;
  unsigned int s1300c3f6:1;
  ::S3625C32 s1300c3f7;
  virtual  ~S1300C3(); // _ZN7S1300C3D1Ev
  virtual void  v75(); // _ZN7S1300C33v75Ev
  virtual void  v76(); // _ZN7S1300C33v76Ev
  virtual void  v77(); // _ZN7S1300C33v77Ev
  virtual void  v78(); // _ZN7S1300C33v78Ev
  virtual void  v79(); // _ZN7S1300C33v79Ev
  virtual void  v80(); // _ZN7S1300C33v80Ev
  virtual void  v81(); // _ZN7S1300C33v81Ev
  virtual void  v82(); // _ZN7S1300C33v82Ev
  virtual void  v83(); // _ZN7S1300C33v83Ev
  virtual void  v84(); // _ZN7S1300C33v84Ev
  virtual void  v85(); // _ZN7S1300C33v85Ev
  virtual void  v86(); // _ZN7S1300C33v86Ev
  virtual void  v87(); // _ZN7S1300C33v87Ev
  virtual void  v88(); // _ZN7S1300C33v88Ev
  virtual void  v89(); // _ZN7S1300C33v89Ev
  virtual void  v90(); // _ZN7S1300C33v90Ev
  virtual void  v91(); // _ZN7S1300C33v91Ev
  virtual void  v92(); // _ZN7S1300C33v92Ev
  virtual void  v93(); // _ZN7S1300C33v93Ev
  virtual void  v94(); // _ZN7S1300C33v94Ev
  S1300C3(); // tgen
};
//SIG(-1 S1300C3) C1{ BC2{ 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 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 Fi FL Fp[4] Fi[2] Fp FC3{ m Fi[2]} Fp[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 FC4{ m}}


 S1300C3 ::~S1300C3(){ note_dtor("S1300C3", this);}
void  S1300C3 ::v75(){vfunc_called(this, "_ZN7S1300C33v75Ev");}
void  S1300C3 ::v76(){vfunc_called(this, "_ZN7S1300C33v76Ev");}
void  S1300C3 ::v77(){vfunc_called(this, "_ZN7S1300C33v77Ev");}
void  S1300C3 ::v78(){vfunc_called(this, "_ZN7S1300C33v78Ev");}
void  S1300C3 ::v79(){vfunc_called(this, "_ZN7S1300C33v79Ev");}
void  S1300C3 ::v80(){vfunc_called(this, "_ZN7S1300C33v80Ev");}
void  S1300C3 ::v81(){vfunc_called(this, "_ZN7S1300C33v81Ev");}
void  S1300C3 ::v82(){vfunc_called(this, "_ZN7S1300C33v82Ev");}
void  S1300C3 ::v83(){vfunc_called(this, "_ZN7S1300C33v83Ev");}
void  S1300C3 ::v84(){vfunc_called(this, "_ZN7S1300C33v84Ev");}
void  S1300C3 ::v85(){vfunc_called(this, "_ZN7S1300C33v85Ev");}
void  S1300C3 ::v86(){vfunc_called(this, "_ZN7S1300C33v86Ev");}
void  S1300C3 ::v87(){vfunc_called(this, "_ZN7S1300C33v87Ev");}
void  S1300C3 ::v88(){vfunc_called(this, "_ZN7S1300C33v88Ev");}
void  S1300C3 ::v89(){vfunc_called(this, "_ZN7S1300C33v89Ev");}
void  S1300C3 ::v90(){vfunc_called(this, "_ZN7S1300C33v90Ev");}
void  S1300C3 ::v91(){vfunc_called(this, "_ZN7S1300C33v91Ev");}
void  S1300C3 ::v92(){vfunc_called(this, "_ZN7S1300C33v92Ev");}
void  S1300C3 ::v93(){vfunc_called(this, "_ZN7S1300C33v93Ev");}
void  S1300C3 ::v94(){vfunc_called(this, "_ZN7S1300C33v94Ev");}
S1300C3 ::S1300C3(){ note_ctor("S1300C3", this);} // tgen

static void Test_S1300C3()
{
  extern Class_Descriptor cd_S1300C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(14,17)];
    init_test(&cd_S1300C3, buf);
    S1300C3 *dp, &lv = *(dp=new (buf) S1300C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(104,64), "sizeof(S1300C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1300C3)");
    check_base_class_offset(lv, (S1300C4*), 0, "S1300C3");
    set_bf_and_test(lv, s1300c3f0, ABISELECT(96,60), 0, 1, 1, "S1300C3");
    set_bf_and_test(lv, s1300c3f1, ABISELECT(96,60), 1, 1, 1, "S1300C3");
    set_bf_and_test(lv, s1300c3f2, ABISELECT(96,60), 2, 1, 1, "S1300C3");
    set_bf_and_test(lv, s1300c3f3, ABISELECT(96,60), 3, 1, 1, "S1300C3");
    set_bf_and_test(lv, s1300c3f4, ABISELECT(96,60), 4, 1, 1, "S1300C3");
    set_bf_and_test(lv, s1300c3f5, ABISELECT(96,60), 5, 1, 1, "S1300C3");
    set_bf_and_test(lv, s1300c3f6, ABISELECT(96,60), 6, 1, 1, "S1300C3");
    check_field_offset(lv, s1300c3f7, ABISELECT(97,61), "S1300C3.s1300c3f7");
    test_class_info(&lv, &cd_S1300C3);
    dp->~S1300C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1300C3(Test_S1300C3, "S1300C3", ABISELECT(104,64));

#else // __cplusplus

extern void _ZN7S1300C3C1Ev();
extern void _ZN7S1300C3D1Ev();
Name_Map name_map_S1300C3[] = {
  NSPAIR(_ZN7S1300C3C1Ev),
  NSPAIR(_ZN7S1300C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1300C4;
extern VTBL_ENTRY _ZTI7S1300C4[];
extern  VTBL_ENTRY _ZTV7S1300C4[];
static Base_Class bases_S1300C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1300C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI7S1300C3[];
extern void _ZN7S1300C3D1Ev();
extern void _ZN7S1300C3D0Ev();
extern void _ZN7S1300C43v11Ev();
extern void _ZN7S1300C43v12Ev();
extern void _ZN7S1300C43v13Ev();
extern void _ZN7S1300C43v14Ev();
extern void _ZN7S1300C43v15Ev();
extern void _ZN7S1300C43v16Ev();
extern void _ZN7S1300C43v17Ev();
extern void _ZN7S1300C43v18Ev();
extern void _ZN7S1300C43v19Ev();
extern void _ZN7S1300C43v20Ev();
extern void _ZN7S1300C43v21Ev();
extern void _ZN7S1300C43v22Ev();
extern void _ZN7S1300C43v23Ev();
extern void _ZN7S1300C43v24Ev();
extern void _ZN7S1300C43v25Ev();
extern void _ZN7S1300C43v26Ev();
extern void _ZN7S1300C43v27Ev();
extern void _ZN7S1300C43v28Ev();
extern void _ZN7S1300C43v29Ev();
extern void _ZN7S1300C43v30Ev();
extern void _ZN7S1300C43v31Ev();
extern void _ZN7S1300C43v32Ev();
extern void _ZN7S1300C43v33Ev();
extern void _ZN7S1300C43v34Ev();
extern void _ZN7S1300C43v35Ev();
extern void _ZN7S1300C43v36Ev();
extern void _ZN7S1300C43v37Ev();
extern void _ZN7S1300C43v38Ev();
extern void _ZN7S1300C43v39Ev();
extern void _ZN7S1300C43v40Ev();
extern void _ZN7S1300C43v41Ev();
extern void _ZN7S1300C43v42Ev();
extern void _ZN7S1300C43v43Ev();
extern void _ZN7S1300C43v44Ev();
extern void _ZN7S1300C43v45Ev();
extern void _ZN7S1300C43v46Ev();
extern void _ZN7S1300C43v47Ev();
extern void _ZN7S1300C43v48Ev();
extern void _ZN7S1300C43v49Ev();
extern void _ZN7S1300C43v50Ev();
extern void _ZN7S1300C43v51Ev();
extern void _ZN7S1300C43v52Ev();
extern void _ZN7S1300C43v53Ev();
extern void _ZN7S1300C43v54Ev();
extern void _ZN7S1300C43v55Ev();
extern void _ZN7S1300C43v56Ev();
extern void _ZN7S1300C43v57Ev();
extern void _ZN7S1300C43v58Ev();
extern void _ZN7S1300C43v59Ev();
extern void _ZN7S1300C43v60Ev();
extern void _ZN7S1300C43v61Ev();
extern void _ZN7S1300C43v62Ev();
extern void _ZN7S1300C43v63Ev();
extern void _ZN7S1300C43v64Ev();
extern void _ZN7S1300C43v65Ev();
extern void _ZN7S1300C43v66Ev();
extern void _ZN7S1300C43v67Ev();
extern void _ZN7S1300C43v68Ev();
extern void _ZN7S1300C43v69Ev();
extern void _ZN7S1300C43v70Ev();
extern void _ZN7S1300C43v71Ev();
extern void _ZN7S1300C43v72Ev();
extern void _ZN7S1300C43v73Ev();
extern void _ZN7S1300C43v74Ev();
extern void _ZN7S1300C33v75Ev();
extern void _ZN7S1300C33v76Ev();
extern void _ZN7S1300C33v77Ev();
extern void _ZN7S1300C33v78Ev();
extern void _ZN7S1300C33v79Ev();
extern void _ZN7S1300C33v80Ev();
extern void _ZN7S1300C33v81Ev();
extern void _ZN7S1300C33v82Ev();
extern void _ZN7S1300C33v83Ev();
extern void _ZN7S1300C33v84Ev();
extern void _ZN7S1300C33v85Ev();
extern void _ZN7S1300C33v86Ev();
extern void _ZN7S1300C33v87Ev();
extern void _ZN7S1300C33v88Ev();
extern void _ZN7S1300C33v89Ev();
extern void _ZN7S1300C33v90Ev();
extern void _ZN7S1300C33v91Ev();
extern void _ZN7S1300C33v92Ev();
extern void _ZN7S1300C33v93Ev();
extern void _ZN7S1300C33v94Ev();
static  VTBL_ENTRY vtc_S1300C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1300C3[0]),
  (VTBL_ENTRY)&_ZN7S1300C3D1Ev,
  (VTBL_ENTRY)&_ZN7S1300C3D0Ev,
  (VTBL_ENTRY)&_ZN7S1300C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1300C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1300C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1300C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1300C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1300C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1300C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1300C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1300C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1300C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1300C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1300C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1300C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1300C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1300C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1300C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1300C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1300C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1300C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1300C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1300C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1300C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1300C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1300C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1300C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1300C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1300C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1300C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1300C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1300C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1300C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1300C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1300C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1300C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1300C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1300C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1300C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1300C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1300C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1300C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1300C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1300C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1300C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1300C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1300C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1300C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1300C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1300C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1300C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1300C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1300C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1300C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1300C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1300C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1300C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1300C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1300C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1300C43v68Ev,
  (VTBL_ENTRY)&_ZN7S1300C43v69Ev,
  (VTBL_ENTRY)&_ZN7S1300C43v70Ev,
  (VTBL_ENTRY)&_ZN7S1300C43v71Ev,
  (VTBL_ENTRY)&_ZN7S1300C43v72Ev,
  (VTBL_ENTRY)&_ZN7S1300C43v73Ev,
  (VTBL_ENTRY)&_ZN7S1300C43v74Ev,
  (VTBL_ENTRY)&_ZN7S1300C33v75Ev,
  (VTBL_ENTRY)&_ZN7S1300C33v76Ev,
  (VTBL_ENTRY)&_ZN7S1300C33v77Ev,
  (VTBL_ENTRY)&_ZN7S1300C33v78Ev,
  (VTBL_ENTRY)&_ZN7S1300C33v79Ev,
  (VTBL_ENTRY)&_ZN7S1300C33v80Ev,
  (VTBL_ENTRY)&_ZN7S1300C33v81Ev,
  (VTBL_ENTRY)&_ZN7S1300C33v82Ev,
  (VTBL_ENTRY)&_ZN7S1300C33v83Ev,
  (VTBL_ENTRY)&_ZN7S1300C33v84Ev,
  (VTBL_ENTRY)&_ZN7S1300C33v85Ev,
  (VTBL_ENTRY)&_ZN7S1300C33v86Ev,
  (VTBL_ENTRY)&_ZN7S1300C33v87Ev,
  (VTBL_ENTRY)&_ZN7S1300C33v88Ev,
  (VTBL_ENTRY)&_ZN7S1300C33v89Ev,
  (VTBL_ENTRY)&_ZN7S1300C33v90Ev,
  (VTBL_ENTRY)&_ZN7S1300C33v91Ev,
  (VTBL_ENTRY)&_ZN7S1300C33v92Ev,
  (VTBL_ENTRY)&_ZN7S1300C33v93Ev,
  (VTBL_ENTRY)&_ZN7S1300C33v94Ev,
};
extern VTBL_ENTRY _ZTI7S1300C3[];
extern  VTBL_ENTRY _ZTV7S1300C3[];
Class_Descriptor cd_S1300C3 = {  "S1300C3", // class name
  bases_S1300C3, 1,
  &(vtc_S1300C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(104,64), // object size
  NSPAIRA(_ZTI7S1300C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1300C3),88, //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  S1300C2  : S1300C3 {
  ::S674C42 s1300c2f0;
  virtual  ~S1300C2(); // _ZN7S1300C2D1Ev
  virtual void  v95(); // _ZN7S1300C23v95Ev
  virtual void  v96(); // _ZN7S1300C23v96Ev
  virtual void  v97(); // _ZN7S1300C23v97Ev
  virtual void  v98(); // _ZN7S1300C23v98Ev
  S1300C2(); // tgen
};
//SIG(-1 S1300C2) C1{ BC2{ BC3{ 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 FC4{ m Fi[2]} Fp[2]} vd v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 FC5{ m}} vd v1 v2 v3 v4 FC6{ BC7{ BC8{ m Fp Fi[2]}}}}


 S1300C2 ::~S1300C2(){ note_dtor("S1300C2", this);}
void  S1300C2 ::v95(){vfunc_called(this, "_ZN7S1300C23v95Ev");}
void  S1300C2 ::v96(){vfunc_called(this, "_ZN7S1300C23v96Ev");}
void  S1300C2 ::v97(){vfunc_called(this, "_ZN7S1300C23v97Ev");}
void  S1300C2 ::v98(){vfunc_called(this, "_ZN7S1300C23v98Ev");}
S1300C2 ::S1300C2(){ note_ctor("S1300C2", this);} // tgen

static void Test_S1300C2()
{
  extern Class_Descriptor cd_S1300C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(16,20)];
    init_test(&cd_S1300C2, buf);
    S1300C2 *dp, &lv = *(dp=new (buf) S1300C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(120,76), "sizeof(S1300C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1300C2)");
    check_base_class_offset(lv, (S1300C4*)(S1300C3*), 0, "S1300C2");
    check_base_class_offset(lv, (S1300C3*), 0, "S1300C2");
    check_field_offset(lv, s1300c2f0, ABISELECT(104,64), "S1300C2.s1300c2f0");
    test_class_info(&lv, &cd_S1300C2);
    dp->~S1300C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1300C2(Test_S1300C2, "S1300C2", ABISELECT(120,76));

#else // __cplusplus

extern void _ZN7S1300C2C1Ev();
extern void _ZN7S1300C2D1Ev();
Name_Map name_map_S1300C2[] = {
  NSPAIR(_ZN7S1300C2C1Ev),
  NSPAIR(_ZN7S1300C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1300C4;
extern VTBL_ENTRY _ZTI7S1300C4[];
extern  VTBL_ENTRY _ZTV7S1300C4[];
extern Class_Descriptor cd_S1300C3;
extern VTBL_ENTRY _ZTI7S1300C3[];
extern  VTBL_ENTRY _ZTV7S1300C3[];
static Base_Class bases_S1300C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1300C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S1300C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S1300C2[];
extern void _ZN7S1300C2D1Ev();
extern void _ZN7S1300C2D0Ev();
extern void _ZN7S1300C43v11Ev();
extern void _ZN7S1300C43v12Ev();
extern void _ZN7S1300C43v13Ev();
extern void _ZN7S1300C43v14Ev();
extern void _ZN7S1300C43v15Ev();
extern void _ZN7S1300C43v16Ev();
extern void _ZN7S1300C43v17Ev();
extern void _ZN7S1300C43v18Ev();
extern void _ZN7S1300C43v19Ev();
extern void _ZN7S1300C43v20Ev();
extern void _ZN7S1300C43v21Ev();
extern void _ZN7S1300C43v22Ev();
extern void _ZN7S1300C43v23Ev();
extern void _ZN7S1300C43v24Ev();
extern void _ZN7S1300C43v25Ev();
extern void _ZN7S1300C43v26Ev();
extern void _ZN7S1300C43v27Ev();
extern void _ZN7S1300C43v28Ev();
extern void _ZN7S1300C43v29Ev();
extern void _ZN7S1300C43v30Ev();
extern void _ZN7S1300C43v31Ev();
extern void _ZN7S1300C43v32Ev();
extern void _ZN7S1300C43v33Ev();
extern void _ZN7S1300C43v34Ev();
extern void _ZN7S1300C43v35Ev();
extern void _ZN7S1300C43v36Ev();
extern void _ZN7S1300C43v37Ev();
extern void _ZN7S1300C43v38Ev();
extern void _ZN7S1300C43v39Ev();
extern void _ZN7S1300C43v40Ev();
extern void _ZN7S1300C43v41Ev();
extern void _ZN7S1300C43v42Ev();
extern void _ZN7S1300C43v43Ev();
extern void _ZN7S1300C43v44Ev();
extern void _ZN7S1300C43v45Ev();
extern void _ZN7S1300C43v46Ev();
extern void _ZN7S1300C43v47Ev();
extern void _ZN7S1300C43v48Ev();
extern void _ZN7S1300C43v49Ev();
extern void _ZN7S1300C43v50Ev();
extern void _ZN7S1300C43v51Ev();
extern void _ZN7S1300C43v52Ev();
extern void _ZN7S1300C43v53Ev();
extern void _ZN7S1300C43v54Ev();
extern void _ZN7S1300C43v55Ev();
extern void _ZN7S1300C43v56Ev();
extern void _ZN7S1300C43v57Ev();
extern void _ZN7S1300C43v58Ev();
extern void _ZN7S1300C43v59Ev();
extern void _ZN7S1300C43v60Ev();
extern void _ZN7S1300C43v61Ev();
extern void _ZN7S1300C43v62Ev();
extern void _ZN7S1300C43v63Ev();
extern void _ZN7S1300C43v64Ev();
extern void _ZN7S1300C43v65Ev();
extern void _ZN7S1300C43v66Ev();
extern void _ZN7S1300C43v67Ev();
extern void _ZN7S1300C43v68Ev();
extern void _ZN7S1300C43v69Ev();
extern void _ZN7S1300C43v70Ev();
extern void _ZN7S1300C43v71Ev();
extern void _ZN7S1300C43v72Ev();
extern void _ZN7S1300C43v73Ev();
extern void _ZN7S1300C43v74Ev();
extern void _ZN7S1300C33v75Ev();
extern void _ZN7S1300C33v76Ev();
extern void _ZN7S1300C33v77Ev();
extern void _ZN7S1300C33v78Ev();
extern void _ZN7S1300C33v79Ev();
extern void _ZN7S1300C33v80Ev();
extern void _ZN7S1300C33v81Ev();
extern void _ZN7S1300C33v82Ev();
extern void _ZN7S1300C33v83Ev();
extern void _ZN7S1300C33v84Ev();
extern void _ZN7S1300C33v85Ev();
extern void _ZN7S1300C33v86Ev();
extern void _ZN7S1300C33v87Ev();
extern void _ZN7S1300C33v88Ev();
extern void _ZN7S1300C33v89Ev();
extern void _ZN7S1300C33v90Ev();
extern void _ZN7S1300C33v91Ev();
extern void _ZN7S1300C33v92Ev();
extern void _ZN7S1300C33v93Ev();
extern void _ZN7S1300C33v94Ev();
extern void _ZN7S1300C23v95Ev();
extern void _ZN7S1300C23v96Ev();
extern void _ZN7S1300C23v97Ev();
extern void _ZN7S1300C23v98Ev();
static  VTBL_ENTRY vtc_S1300C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1300C2[0]),
  (VTBL_ENTRY)&_ZN7S1300C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1300C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1300C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1300C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1300C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1300C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1300C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1300C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1300C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1300C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1300C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1300C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1300C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1300C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1300C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1300C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1300C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1300C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1300C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1300C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1300C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1300C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1300C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1300C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1300C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1300C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1300C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1300C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1300C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1300C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1300C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1300C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1300C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1300C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1300C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1300C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1300C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1300C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1300C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1300C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1300C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1300C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1300C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1300C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1300C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1300C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1300C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1300C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1300C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1300C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1300C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1300C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1300C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1300C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1300C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1300C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1300C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1300C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1300C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1300C43v68Ev,
  (VTBL_ENTRY)&_ZN7S1300C43v69Ev,
  (VTBL_ENTRY)&_ZN7S1300C43v70Ev,
  (VTBL_ENTRY)&_ZN7S1300C43v71Ev,
  (VTBL_ENTRY)&_ZN7S1300C43v72Ev,
  (VTBL_ENTRY)&_ZN7S1300C43v73Ev,
  (VTBL_ENTRY)&_ZN7S1300C43v74Ev,
  (VTBL_ENTRY)&_ZN7S1300C33v75Ev,
  (VTBL_ENTRY)&_ZN7S1300C33v76Ev,
  (VTBL_ENTRY)&_ZN7S1300C33v77Ev,
  (VTBL_ENTRY)&_ZN7S1300C33v78Ev,
  (VTBL_ENTRY)&_ZN7S1300C33v79Ev,
  (VTBL_ENTRY)&_ZN7S1300C33v80Ev,
  (VTBL_ENTRY)&_ZN7S1300C33v81Ev,
  (VTBL_ENTRY)&_ZN7S1300C33v82Ev,
  (VTBL_ENTRY)&_ZN7S1300C33v83Ev,
  (VTBL_ENTRY)&_ZN7S1300C33v84Ev,
  (VTBL_ENTRY)&_ZN7S1300C33v85Ev,
  (VTBL_ENTRY)&_ZN7S1300C33v86Ev,
  (VTBL_ENTRY)&_ZN7S1300C33v87Ev,
  (VTBL_ENTRY)&_ZN7S1300C33v88Ev,
  (VTBL_ENTRY)&_ZN7S1300C33v89Ev,
  (VTBL_ENTRY)&_ZN7S1300C33v90Ev,
  (VTBL_ENTRY)&_ZN7S1300C33v91Ev,
  (VTBL_ENTRY)&_ZN7S1300C33v92Ev,
  (VTBL_ENTRY)&_ZN7S1300C33v93Ev,
  (VTBL_ENTRY)&_ZN7S1300C33v94Ev,
  (VTBL_ENTRY)&_ZN7S1300C23v95Ev,
  (VTBL_ENTRY)&_ZN7S1300C23v96Ev,
  (VTBL_ENTRY)&_ZN7S1300C23v97Ev,
  (VTBL_ENTRY)&_ZN7S1300C23v98Ev,
};
extern VTBL_ENTRY _ZTI7S1300C2[];
extern  VTBL_ENTRY _ZTV7S1300C2[];
Class_Descriptor cd_S1300C2 = {  "S1300C2", // class name
  bases_S1300C2, 2,
  &(vtc_S1300C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(120,76), // object size
  NSPAIRA(_ZTI7S1300C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1300C2),92, //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  S1300C1  : S1300C2 {
  int s1300c1f0[2];
  ::S674C29_nt s1300c1f1;
  ::S674C29_nt s1300c1f2;
  ::S674C29_nt s1300c1f3;
  ::S674C29_nt s1300c1f4;
  int s1300c1f5[2];
  ::S674C29_nt s1300c1f6;
  int s1300c1f7;
  unsigned int s1300c1f8:1;
  unsigned int s1300c1f9:1;
  unsigned int s1300c1f10:1;
  unsigned int s1300c1f11:1;
  unsigned int s1300c1f12:1;
  unsigned int s1300c1f13:1;
  unsigned int s1300c1f14:1;
  unsigned int s1300c1f15:1;
  unsigned int s1300c1f16:1;
  unsigned int s1300c1f17:1;
  int s1300c1f18;
  ::S674C29_nt s1300c1f19;
  int s1300c1f20[2];
  char s1300c1f21;
  ::S674C29_nt s1300c1f22;
  ::S674C29_nt s1300c1f23;
  virtual  ~S1300C1(); // _ZN7S1300C1D1Ev
  virtual void  v1(); // _ZN7S1300C12v1Ev
  virtual void  v2(); // _ZN7S1300C12v2Ev
  virtual void  v3(); // _ZN7S1300C12v3Ev
  virtual void  v4(); // _ZN7S1300C12v4Ev
  virtual void  v5(); // _ZN7S1300C12v5Ev
  virtual void  v6(); // _ZN7S1300C12v6Ev
  virtual void  v7(); // _ZN7S1300C12v7Ev
  virtual void  v8(); // _ZN7S1300C12v8Ev
  virtual void  v9(); // _ZN7S1300C12v9Ev
  virtual void  v10(); // _ZN7S1300C13v10Ev
  S1300C1(); // tgen
};
//SIG(1 S1300C1) C1{ BC2{ BC3{ BC4{ vd 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 Fi FL Fp[4] Fi[2] Fp FC5{ m Fi[2]} Fp[2]} vd v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 v91 v92 v93 v94 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 FC6{ m}} vd v95 v96 v97 v98 FC7{ BC8{ BC9{ m Fp Fi[2]}}}} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 Fi[2] FC10{ m Fi[3]} FC10 FC10 FC10 Fi[2] FC10 Fi Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi FC10 Fi[2] Fc FC10 FC10}


 S1300C1 ::~S1300C1(){ note_dtor("S1300C1", this);}
void  S1300C1 ::v1(){vfunc_called(this, "_ZN7S1300C12v1Ev");}
void  S1300C1 ::v2(){vfunc_called(this, "_ZN7S1300C12v2Ev");}
void  S1300C1 ::v3(){vfunc_called(this, "_ZN7S1300C12v3Ev");}
void  S1300C1 ::v4(){vfunc_called(this, "_ZN7S1300C12v4Ev");}
void  S1300C1 ::v5(){vfunc_called(this, "_ZN7S1300C12v5Ev");}
void  S1300C1 ::v6(){vfunc_called(this, "_ZN7S1300C12v6Ev");}
void  S1300C1 ::v7(){vfunc_called(this, "_ZN7S1300C12v7Ev");}
void  S1300C1 ::v8(){vfunc_called(this, "_ZN7S1300C12v8Ev");}
void  S1300C1 ::v9(){vfunc_called(this, "_ZN7S1300C12v9Ev");}
void  S1300C1 ::v10(){vfunc_called(this, "_ZN7S1300C13v10Ev");}
S1300C1 ::S1300C1(){ note_ctor("S1300C1", this);} // tgen

static void Test_S1300C1()
{
  extern Class_Descriptor cd_S1300C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(33,54)];
    init_test(&cd_S1300C1, buf);
    S1300C1 *dp, &lv = *(dp=new (buf) S1300C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(256,212), "sizeof(S1300C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1300C1)");
    check_base_class_offset(lv, (S1300C4*)(S1300C3*)(S1300C2*), 0, "S1300C1");
    check_base_class_offset(lv, (S1300C3*)(S1300C2*), 0, "S1300C1");
    check_base_class_offset(lv, (S1300C2*), 0, "S1300C1");
    check_field_offset(lv, s1300c1f0, ABISELECT(120,76), "S1300C1.s1300c1f0");
    check_field_offset(lv, s1300c1f1, ABISELECT(128,84), "S1300C1.s1300c1f1");
    check_field_offset(lv, s1300c1f2, ABISELECT(140,96), "S1300C1.s1300c1f2");
    check_field_offset(lv, s1300c1f3, ABISELECT(152,108), "S1300C1.s1300c1f3");
    check_field_offset(lv, s1300c1f4, ABISELECT(164,120), "S1300C1.s1300c1f4");
    check_field_offset(lv, s1300c1f5, ABISELECT(176,132), "S1300C1.s1300c1f5");
    check_field_offset(lv, s1300c1f6, ABISELECT(184,140), "S1300C1.s1300c1f6");
    check_field_offset(lv, s1300c1f7, ABISELECT(196,152), "S1300C1.s1300c1f7");
    set_bf_and_test(lv, s1300c1f8, ABISELECT(200,156), 0, 1, 1, "S1300C1");
    set_bf_and_test(lv, s1300c1f9, ABISELECT(200,156), 1, 1, 1, "S1300C1");
    set_bf_and_test(lv, s1300c1f10, ABISELECT(200,156), 2, 1, 1, "S1300C1");
    set_bf_and_test(lv, s1300c1f11, ABISELECT(200,156), 3, 1, 1, "S1300C1");
    set_bf_and_test(lv, s1300c1f12, ABISELECT(200,156), 4, 1, 1, "S1300C1");
    set_bf_and_test(lv, s1300c1f13, ABISELECT(200,156), 5, 1, 1, "S1300C1");
    set_bf_and_test(lv, s1300c1f14, ABISELECT(200,156), 6, 1, 1, "S1300C1");
    set_bf_and_test(lv, s1300c1f15, ABISELECT(200,156), 7, 1, 1, "S1300C1");
    set_bf_and_test(lv, s1300c1f16, ABISELECT(201,157), 0, 1, 1, "S1300C1");
    set_bf_and_test(lv, s1300c1f17, ABISELECT(201,157), 1, 1, 1, "S1300C1");
    check_field_offset(lv, s1300c1f18, ABISELECT(204,160), "S1300C1.s1300c1f18");
    check_field_offset(lv, s1300c1f19, ABISELECT(208,164), "S1300C1.s1300c1f19");
    check_field_offset(lv, s1300c1f20, ABISELECT(220,176), "S1300C1.s1300c1f20");
    check_field_offset(lv, s1300c1f21, ABISELECT(228,184), "S1300C1.s1300c1f21");
    check_field_offset(lv, s1300c1f22, ABISELECT(232,188), "S1300C1.s1300c1f22");
    check_field_offset(lv, s1300c1f23, ABISELECT(244,200), "S1300C1.s1300c1f23");
    test_class_info(&lv, &cd_S1300C1);
    dp->~S1300C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1300C1(Test_S1300C1, "S1300C1", ABISELECT(256,212));

#else // __cplusplus

extern void _ZN7S1300C1C1Ev();
extern void _ZN7S1300C1D1Ev();
Name_Map name_map_S1300C1[] = {
  NSPAIR(_ZN7S1300C1C1Ev),
  NSPAIR(_ZN7S1300C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1300C4;
extern VTBL_ENTRY _ZTI7S1300C4[];
extern  VTBL_ENTRY _ZTV7S1300C4[];
extern Class_Descriptor cd_S1300C3;
extern VTBL_ENTRY _ZTI7S1300C3[];
extern  VTBL_ENTRY _ZTV7S1300C3[];
extern Class_Descriptor cd_S1300C2;
extern VTBL_ENTRY _ZTI7S1300C2[];
extern  VTBL_ENTRY _ZTV7S1300C2[];
static Base_Class bases_S1300C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1300C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S1300C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S1300C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S1300C1[];
extern void _ZN7S1300C1D1Ev();
extern void _ZN7S1300C1D0Ev();
extern void _ZN7S1300C43v11Ev();
extern void _ZN7S1300C43v12Ev();
extern void _ZN7S1300C43v13Ev();
extern void _ZN7S1300C43v14Ev();
extern void _ZN7S1300C43v15Ev();
extern void _ZN7S1300C43v16Ev();
extern void _ZN7S1300C43v17Ev();
extern void _ZN7S1300C43v18Ev();
extern void _ZN7S1300C43v19Ev();
extern void _ZN7S1300C43v20Ev();
extern void _ZN7S1300C43v21Ev();
extern void _ZN7S1300C43v22Ev();
extern void _ZN7S1300C43v23Ev();
extern void _ZN7S1300C43v24Ev();
extern void _ZN7S1300C43v25Ev();
extern void _ZN7S1300C43v26Ev();
extern void _ZN7S1300C43v27Ev();
extern void _ZN7S1300C43v28Ev();
extern void _ZN7S1300C43v29Ev();
extern void _ZN7S1300C43v30Ev();
extern void _ZN7S1300C43v31Ev();
extern void _ZN7S1300C43v32Ev();
extern void _ZN7S1300C43v33Ev();
extern void _ZN7S1300C43v34Ev();
extern void _ZN7S1300C43v35Ev();
extern void _ZN7S1300C43v36Ev();
extern void _ZN7S1300C43v37Ev();
extern void _ZN7S1300C43v38Ev();
extern void _ZN7S1300C43v39Ev();
extern void _ZN7S1300C43v40Ev();
extern void _ZN7S1300C43v41Ev();
extern void _ZN7S1300C43v42Ev();
extern void _ZN7S1300C43v43Ev();
extern void _ZN7S1300C43v44Ev();
extern void _ZN7S1300C43v45Ev();
extern void _ZN7S1300C43v46Ev();
extern void _ZN7S1300C43v47Ev();
extern void _ZN7S1300C43v48Ev();
extern void _ZN7S1300C43v49Ev();
extern void _ZN7S1300C43v50Ev();
extern void _ZN7S1300C43v51Ev();
extern void _ZN7S1300C43v52Ev();
extern void _ZN7S1300C43v53Ev();
extern void _ZN7S1300C43v54Ev();
extern void _ZN7S1300C43v55Ev();
extern void _ZN7S1300C43v56Ev();
extern void _ZN7S1300C43v57Ev();
extern void _ZN7S1300C43v58Ev();
extern void _ZN7S1300C43v59Ev();
extern void _ZN7S1300C43v60Ev();
extern void _ZN7S1300C43v61Ev();
extern void _ZN7S1300C43v62Ev();
extern void _ZN7S1300C43v63Ev();
extern void _ZN7S1300C43v64Ev();
extern void _ZN7S1300C43v65Ev();
extern void _ZN7S1300C43v66Ev();
extern void _ZN7S1300C43v67Ev();
extern void _ZN7S1300C43v68Ev();
extern void _ZN7S1300C43v69Ev();
extern void _ZN7S1300C43v70Ev();
extern void _ZN7S1300C43v71Ev();
extern void _ZN7S1300C43v72Ev();
extern void _ZN7S1300C43v73Ev();
extern void _ZN7S1300C43v74Ev();
extern void _ZN7S1300C33v75Ev();
extern void _ZN7S1300C33v76Ev();
extern void _ZN7S1300C33v77Ev();
extern void _ZN7S1300C33v78Ev();
extern void _ZN7S1300C33v79Ev();
extern void _ZN7S1300C33v80Ev();
extern void _ZN7S1300C33v81Ev();
extern void _ZN7S1300C33v82Ev();
extern void _ZN7S1300C33v83Ev();
extern void _ZN7S1300C33v84Ev();
extern void _ZN7S1300C33v85Ev();
extern void _ZN7S1300C33v86Ev();
extern void _ZN7S1300C33v87Ev();
extern void _ZN7S1300C33v88Ev();
extern void _ZN7S1300C33v89Ev();
extern void _ZN7S1300C33v90Ev();
extern void _ZN7S1300C33v91Ev();
extern void _ZN7S1300C33v92Ev();
extern void _ZN7S1300C33v93Ev();
extern void _ZN7S1300C33v94Ev();
extern void _ZN7S1300C23v95Ev();
extern void _ZN7S1300C23v96Ev();
extern void _ZN7S1300C23v97Ev();
extern void _ZN7S1300C23v98Ev();
extern void _ZN7S1300C12v1Ev();
extern void _ZN7S1300C12v2Ev();
extern void _ZN7S1300C12v3Ev();
extern void _ZN7S1300C12v4Ev();
extern void _ZN7S1300C12v5Ev();
extern void _ZN7S1300C12v6Ev();
extern void _ZN7S1300C12v7Ev();
extern void _ZN7S1300C12v8Ev();
extern void _ZN7S1300C12v9Ev();
extern void _ZN7S1300C13v10Ev();
static  VTBL_ENTRY vtc_S1300C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1300C1[0]),
  (VTBL_ENTRY)&_ZN7S1300C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1300C1D0Ev,
  (VTBL_ENTRY)&_ZN7S1300C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1300C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1300C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1300C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1300C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1300C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1300C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1300C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1300C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1300C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1300C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1300C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1300C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1300C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1300C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1300C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1300C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1300C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1300C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1300C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1300C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1300C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1300C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1300C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1300C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1300C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1300C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1300C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1300C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1300C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1300C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1300C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1300C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1300C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1300C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1300C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1300C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1300C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1300C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1300C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1300C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1300C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1300C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1300C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1300C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1300C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1300C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1300C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1300C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1300C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1300C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1300C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1300C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1300C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1300C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1300C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1300C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1300C43v68Ev,
  (VTBL_ENTRY)&_ZN7S1300C43v69Ev,
  (VTBL_ENTRY)&_ZN7S1300C43v70Ev,
  (VTBL_ENTRY)&_ZN7S1300C43v71Ev,
  (VTBL_ENTRY)&_ZN7S1300C43v72Ev,
  (VTBL_ENTRY)&_ZN7S1300C43v73Ev,
  (VTBL_ENTRY)&_ZN7S1300C43v74Ev,
  (VTBL_ENTRY)&_ZN7S1300C33v75Ev,
  (VTBL_ENTRY)&_ZN7S1300C33v76Ev,
  (VTBL_ENTRY)&_ZN7S1300C33v77Ev,
  (VTBL_ENTRY)&_ZN7S1300C33v78Ev,
  (VTBL_ENTRY)&_ZN7S1300C33v79Ev,
  (VTBL_ENTRY)&_ZN7S1300C33v80Ev,
  (VTBL_ENTRY)&_ZN7S1300C33v81Ev,
  (VTBL_ENTRY)&_ZN7S1300C33v82Ev,
  (VTBL_ENTRY)&_ZN7S1300C33v83Ev,
  (VTBL_ENTRY)&_ZN7S1300C33v84Ev,
  (VTBL_ENTRY)&_ZN7S1300C33v85Ev,
  (VTBL_ENTRY)&_ZN7S1300C33v86Ev,
  (VTBL_ENTRY)&_ZN7S1300C33v87Ev,
  (VTBL_ENTRY)&_ZN7S1300C33v88Ev,
  (VTBL_ENTRY)&_ZN7S1300C33v89Ev,
  (VTBL_ENTRY)&_ZN7S1300C33v90Ev,
  (VTBL_ENTRY)&_ZN7S1300C33v91Ev,
  (VTBL_ENTRY)&_ZN7S1300C33v92Ev,
  (VTBL_ENTRY)&_ZN7S1300C33v93Ev,
  (VTBL_ENTRY)&_ZN7S1300C33v94Ev,
  (VTBL_ENTRY)&_ZN7S1300C23v95Ev,
  (VTBL_ENTRY)&_ZN7S1300C23v96Ev,
  (VTBL_ENTRY)&_ZN7S1300C23v97Ev,
  (VTBL_ENTRY)&_ZN7S1300C23v98Ev,
  (VTBL_ENTRY)&_ZN7S1300C12v1Ev,
  (VTBL_ENTRY)&_ZN7S1300C12v2Ev,
  (VTBL_ENTRY)&_ZN7S1300C12v3Ev,
  (VTBL_ENTRY)&_ZN7S1300C12v4Ev,
  (VTBL_ENTRY)&_ZN7S1300C12v5Ev,
  (VTBL_ENTRY)&_ZN7S1300C12v6Ev,
  (VTBL_ENTRY)&_ZN7S1300C12v7Ev,
  (VTBL_ENTRY)&_ZN7S1300C12v8Ev,
  (VTBL_ENTRY)&_ZN7S1300C12v9Ev,
  (VTBL_ENTRY)&_ZN7S1300C13v10Ev,
};
extern VTBL_ENTRY _ZTI7S1300C1[];
extern  VTBL_ENTRY _ZTV7S1300C1[];
Class_Descriptor cd_S1300C1 = {  "S1300C1", // class name
  bases_S1300C1, 3,
  &(vtc_S1300C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(256,212), // object size
  NSPAIRA(_ZTI7S1300C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1300C1),102, //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  S1317C4  {
  int s1317c4f0;
  __tsi64 s1317c4f1;
  void *s1317c4f2[4];
  int s1317c4f3[2];
  void *s1317c4f4;
  ::S674C6_nt s1317c4f5;
  void *s1317c4f6[2];
  virtual  ~S1317C4(); // _ZN7S1317C4D1Ev
  virtual void  v15(); // _ZN7S1317C43v15Ev
  virtual void  v16(); // _ZN7S1317C43v16Ev
  virtual void  v17(); // _ZN7S1317C43v17Ev
  virtual void  v18(); // _ZN7S1317C43v18Ev
  virtual void  v19(); // _ZN7S1317C43v19Ev
  virtual void  v20(); // _ZN7S1317C43v20Ev
  virtual void  v21(); // _ZN7S1317C43v21Ev
  virtual void  v22(); // _ZN7S1317C43v22Ev
  virtual void  v23(); // _ZN7S1317C43v23Ev
  virtual void  v24(); // _ZN7S1317C43v24Ev
  virtual void  v25(); // _ZN7S1317C43v25Ev
  virtual void  v26(); // _ZN7S1317C43v26Ev
  virtual void  v27(); // _ZN7S1317C43v27Ev
  virtual void  v28(); // _ZN7S1317C43v28Ev
  virtual void  v29(); // _ZN7S1317C43v29Ev
  virtual void  v30(); // _ZN7S1317C43v30Ev
  virtual void  v31(); // _ZN7S1317C43v31Ev
  virtual void  v32(); // _ZN7S1317C43v32Ev
  virtual void  v33(); // _ZN7S1317C43v33Ev
  virtual void  v34(); // _ZN7S1317C43v34Ev
  virtual void  v35(); // _ZN7S1317C43v35Ev
  virtual void  v36(); // _ZN7S1317C43v36Ev
  virtual void  v37(); // _ZN7S1317C43v37Ev
  virtual void  v38(); // _ZN7S1317C43v38Ev
  virtual void  v39(); // _ZN7S1317C43v39Ev
  virtual void  v40(); // _ZN7S1317C43v40Ev
  virtual void  v41(); // _ZN7S1317C43v41Ev
  virtual void  v42(); // _ZN7S1317C43v42Ev
  virtual void  v43(); // _ZN7S1317C43v43Ev
  virtual void  v44(); // _ZN7S1317C43v44Ev
  virtual void  v45(); // _ZN7S1317C43v45Ev
  virtual void  v46(); // _ZN7S1317C43v46Ev
  virtual void  v47(); // _ZN7S1317C43v47Ev
  virtual void  v48(); // _ZN7S1317C43v48Ev
  virtual void  v49(); // _ZN7S1317C43v49Ev
  virtual void  v50(); // _ZN7S1317C43v50Ev
  virtual void  v51(); // _ZN7S1317C43v51Ev
  virtual void  v52(); // _ZN7S1317C43v52Ev
  virtual void  v53(); // _ZN7S1317C43v53Ev
  virtual void  v54(); // _ZN7S1317C43v54Ev
  virtual void  v55(); // _ZN7S1317C43v55Ev
  virtual void  v56(); // _ZN7S1317C43v56Ev
  virtual void  v57(); // _ZN7S1317C43v57Ev
  virtual void  v58(); // _ZN7S1317C43v58Ev
  virtual void  v59(); // _ZN7S1317C43v59Ev
  virtual void  v60(); // _ZN7S1317C43v60Ev
  virtual void  v61(); // _ZN7S1317C43v61Ev
  virtual void  v62(); // _ZN7S1317C43v62Ev
  virtual void  v63(); // _ZN7S1317C43v63Ev
  virtual void  v64(); // _ZN7S1317C43v64Ev
  virtual void  v65(); // _ZN7S1317C43v65Ev
  virtual void  v66(); // _ZN7S1317C43v66Ev
  virtual void  v67(); // _ZN7S1317C43v67Ev
  virtual void  v68(); // _ZN7S1317C43v68Ev
  virtual void  v69(); // _ZN7S1317C43v69Ev
  virtual void  v70(); // _ZN7S1317C43v70Ev
  virtual void  v71(); // _ZN7S1317C43v71Ev
  virtual void  v72(); // _ZN7S1317C43v72Ev
  virtual void  v73(); // _ZN7S1317C43v73Ev
  virtual void  v74(); // _ZN7S1317C43v74Ev
  virtual void  v75(); // _ZN7S1317C43v75Ev
  virtual void  v76(); // _ZN7S1317C43v76Ev
  virtual void  v77(); // _ZN7S1317C43v77Ev
  virtual void  v78(); // _ZN7S1317C43v78Ev
  S1317C4(); // tgen
};
//SIG(-1 S1317C4) 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]}


 S1317C4 ::~S1317C4(){ note_dtor("S1317C4", this);}
void  S1317C4 ::v15(){vfunc_called(this, "_ZN7S1317C43v15Ev");}
void  S1317C4 ::v16(){vfunc_called(this, "_ZN7S1317C43v16Ev");}
void  S1317C4 ::v17(){vfunc_called(this, "_ZN7S1317C43v17Ev");}
void  S1317C4 ::v18(){vfunc_called(this, "_ZN7S1317C43v18Ev");}
void  S1317C4 ::v19(){vfunc_called(this, "_ZN7S1317C43v19Ev");}
void  S1317C4 ::v20(){vfunc_called(this, "_ZN7S1317C43v20Ev");}
void  S1317C4 ::v21(){vfunc_called(this, "_ZN7S1317C43v21Ev");}
void  S1317C4 ::v22(){vfunc_called(this, "_ZN7S1317C43v22Ev");}
void  S1317C4 ::v23(){vfunc_called(this, "_ZN7S1317C43v23Ev");}
void  S1317C4 ::v24(){vfunc_called(this, "_ZN7S1317C43v24Ev");}
void  S1317C4 ::v25(){vfunc_called(this, "_ZN7S1317C43v25Ev");}
void  S1317C4 ::v26(){vfunc_called(this, "_ZN7S1317C43v26Ev");}
void  S1317C4 ::v27(){vfunc_called(this, "_ZN7S1317C43v27Ev");}
void  S1317C4 ::v28(){vfunc_called(this, "_ZN7S1317C43v28Ev");}
void  S1317C4 ::v29(){vfunc_called(this, "_ZN7S1317C43v29Ev");}
void  S1317C4 ::v30(){vfunc_called(this, "_ZN7S1317C43v30Ev");}
void  S1317C4 ::v31(){vfunc_called(this, "_ZN7S1317C43v31Ev");}
void  S1317C4 ::v32(){vfunc_called(this, "_ZN7S1317C43v32Ev");}
void  S1317C4 ::v33(){vfunc_called(this, "_ZN7S1317C43v33Ev");}
void  S1317C4 ::v34(){vfunc_called(this, "_ZN7S1317C43v34Ev");}
void  S1317C4 ::v35(){vfunc_called(this, "_ZN7S1317C43v35Ev");}
void  S1317C4 ::v36(){vfunc_called(this, "_ZN7S1317C43v36Ev");}
void  S1317C4 ::v37(){vfunc_called(this, "_ZN7S1317C43v37Ev");}
void  S1317C4 ::v38(){vfunc_called(this, "_ZN7S1317C43v38Ev");}
void  S1317C4 ::v39(){vfunc_called(this, "_ZN7S1317C43v39Ev");}
void  S1317C4 ::v40(){vfunc_called(this, "_ZN7S1317C43v40Ev");}
void  S1317C4 ::v41(){vfunc_called(this, "_ZN7S1317C43v41Ev");}
void  S1317C4 ::v42(){vfunc_called(this, "_ZN7S1317C43v42Ev");}
void  S1317C4 ::v43(){vfunc_called(this, "_ZN7S1317C43v43Ev");}
void  S1317C4 ::v44(){vfunc_called(this, "_ZN7S1317C43v44Ev");}
void  S1317C4 ::v45(){vfunc_called(this, "_ZN7S1317C43v45Ev");}
void  S1317C4 ::v46(){vfunc_called(this, "_ZN7S1317C43v46Ev");}
void  S1317C4 ::v47(){vfunc_called(this, "_ZN7S1317C43v47Ev");}
void  S1317C4 ::v48(){vfunc_called(this, "_ZN7S1317C43v48Ev");}
void  S1317C4 ::v49(){vfunc_called(this, "_ZN7S1317C43v49Ev");}
void  S1317C4 ::v50(){vfunc_called(this, "_ZN7S1317C43v50Ev");}
void  S1317C4 ::v51(){vfunc_called(this, "_ZN7S1317C43v51Ev");}
void  S1317C4 ::v52(){vfunc_called(this, "_ZN7S1317C43v52Ev");}
void  S1317C4 ::v53(){vfunc_called(this, "_ZN7S1317C43v53Ev");}
void  S1317C4 ::v54(){vfunc_called(this, "_ZN7S1317C43v54Ev");}
void  S1317C4 ::v55(){vfunc_called(this, "_ZN7S1317C43v55Ev");}
void  S1317C4 ::v56(){vfunc_called(this, "_ZN7S1317C43v56Ev");}
void  S1317C4 ::v57(){vfunc_called(this, "_ZN7S1317C43v57Ev");}
void  S1317C4 ::v58(){vfunc_called(this, "_ZN7S1317C43v58Ev");}
void  S1317C4 ::v59(){vfunc_called(this, "_ZN7S1317C43v59Ev");}
void  S1317C4 ::v60(){vfunc_called(this, "_ZN7S1317C43v60Ev");}
void  S1317C4 ::v61(){vfunc_called(this, "_ZN7S1317C43v61Ev");}
void  S1317C4 ::v62(){vfunc_called(this, "_ZN7S1317C43v62Ev");}
void  S1317C4 ::v63(){vfunc_called(this, "_ZN7S1317C43v63Ev");}
void  S1317C4 ::v64(){vfunc_called(this, "_ZN7S1317C43v64Ev");}
void  S1317C4 ::v65(){vfunc_called(this, "_ZN7S1317C43v65Ev");}
void  S1317C4 ::v66(){vfunc_called(this, "_ZN7S1317C43v66Ev");}
void  S1317C4 ::v67(){vfunc_called(this, "_ZN7S1317C43v67Ev");}
void  S1317C4 ::v68(){vfunc_called(this, "_ZN7S1317C43v68Ev");}
void  S1317C4 ::v69(){vfunc_called(this, "_ZN7S1317C43v69Ev");}
void  S1317C4 ::v70(){vfunc_called(this, "_ZN7S1317C43v70Ev");}
void  S1317C4 ::v71(){vfunc_called(this, "_ZN7S1317C43v71Ev");}
void  S1317C4 ::v72(){vfunc_called(this, "_ZN7S1317C43v72Ev");}
void  S1317C4 ::v73(){vfunc_called(this, "_ZN7S1317C43v73Ev");}
void  S1317C4 ::v74(){vfunc_called(this, "_ZN7S1317C43v74Ev");}
void  S1317C4 ::v75(){vfunc_called(this, "_ZN7S1317C43v75Ev");}
void  S1317C4 ::v76(){vfunc_called(this, "_ZN7S1317C43v76Ev");}
void  S1317C4 ::v77(){vfunc_called(this, "_ZN7S1317C43v77Ev");}
void  S1317C4 ::v78(){vfunc_called(this, "_ZN7S1317C43v78Ev");}
S1317C4 ::S1317C4(){ note_ctor("S1317C4", this);} // tgen

static void Test_S1317C4()
{
  extern Class_Descriptor cd_S1317C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S1317C4, buf);
    S1317C4 *dp, &lv = *(dp=new (buf) S1317C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S1317C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1317C4)");
    check_field_offset(lv, s1317c4f0, ABISELECT(8,4), "S1317C4.s1317c4f0");
    check_field_offset(lv, s1317c4f1, ABISELECT(16,8), "S1317C4.s1317c4f1");
    check_field_offset(lv, s1317c4f2, ABISELECT(24,16), "S1317C4.s1317c4f2");
    check_field_offset(lv, s1317c4f3, ABISELECT(56,32), "S1317C4.s1317c4f3");
    check_field_offset(lv, s1317c4f4, ABISELECT(64,40), "S1317C4.s1317c4f4");
    check_field_offset(lv, s1317c4f5, ABISELECT(72,44), "S1317C4.s1317c4f5");
    check_field_offset(lv, s1317c4f6, ABISELECT(80,52), "S1317C4.s1317c4f6");
    test_class_info(&lv, &cd_S1317C4);
    dp->~S1317C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1317C4(Test_S1317C4, "S1317C4", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN7S1317C4C1Ev();
extern void _ZN7S1317C4D1Ev();
Name_Map name_map_S1317C4[] = {
  NSPAIR(_ZN7S1317C4C1Ev),
  NSPAIR(_ZN7S1317C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S1317C4[];
extern void _ZN7S1317C4D1Ev();
extern void _ZN7S1317C4D0Ev();
extern void _ZN7S1317C43v15Ev();
extern void _ZN7S1317C43v16Ev();
extern void _ZN7S1317C43v17Ev();
extern void _ZN7S1317C43v18Ev();
extern void _ZN7S1317C43v19Ev();
extern void _ZN7S1317C43v20Ev();
extern void _ZN7S1317C43v21Ev();
extern void _ZN7S1317C43v22Ev();
extern void _ZN7S1317C43v23Ev();
extern void _ZN7S1317C43v24Ev();
extern void _ZN7S1317C43v25Ev();
extern void _ZN7S1317C43v26Ev();
extern void _ZN7S1317C43v27Ev();
extern void _ZN7S1317C43v28Ev();
extern void _ZN7S1317C43v29Ev();
extern void _ZN7S1317C43v30Ev();
extern void _ZN7S1317C43v31Ev();
extern void _ZN7S1317C43v32Ev();
extern void _ZN7S1317C43v33Ev();
extern void _ZN7S1317C43v34Ev();
extern void _ZN7S1317C43v35Ev();
extern void _ZN7S1317C43v36Ev();
extern void _ZN7S1317C43v37Ev();
extern void _ZN7S1317C43v38Ev();
extern void _ZN7S1317C43v39Ev();
extern void _ZN7S1317C43v40Ev();
extern void _ZN7S1317C43v41Ev();
extern void _ZN7S1317C43v42Ev();
extern void _ZN7S1317C43v43Ev();
extern void _ZN7S1317C43v44Ev();
extern void _ZN7S1317C43v45Ev();
extern void _ZN7S1317C43v46Ev();
extern void _ZN7S1317C43v47Ev();
extern void _ZN7S1317C43v48Ev();
extern void _ZN7S1317C43v49Ev();
extern void _ZN7S1317C43v50Ev();
extern void _ZN7S1317C43v51Ev();
extern void _ZN7S1317C43v52Ev();
extern void _ZN7S1317C43v53Ev();
extern void _ZN7S1317C43v54Ev();
extern void _ZN7S1317C43v55Ev();
extern void _ZN7S1317C43v56Ev();
extern void _ZN7S1317C43v57Ev();
extern void _ZN7S1317C43v58Ev();
extern void _ZN7S1317C43v59Ev();
extern void _ZN7S1317C43v60Ev();
extern void _ZN7S1317C43v61Ev();
extern void _ZN7S1317C43v62Ev();
extern void _ZN7S1317C43v63Ev();
extern void _ZN7S1317C43v64Ev();
extern void _ZN7S1317C43v65Ev();
extern void _ZN7S1317C43v66Ev();
extern void _ZN7S1317C43v67Ev();
extern void _ZN7S1317C43v68Ev();
extern void _ZN7S1317C43v69Ev();
extern void _ZN7S1317C43v70Ev();
extern void _ZN7S1317C43v71Ev();
extern void _ZN7S1317C43v72Ev();
extern void _ZN7S1317C43v73Ev();
extern void _ZN7S1317C43v74Ev();
extern void _ZN7S1317C43v75Ev();
extern void _ZN7S1317C43v76Ev();
extern void _ZN7S1317C43v77Ev();
extern void _ZN7S1317C43v78Ev();
static  VTBL_ENTRY vtc_S1317C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1317C4[0]),
  (VTBL_ENTRY)&_ZN7S1317C4D1Ev,
  (VTBL_ENTRY)&_ZN7S1317C4D0Ev,
  (VTBL_ENTRY)&_ZN7S1317C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1317C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1317C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1317C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1317C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1317C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1317C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1317C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1317C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1317C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1317C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1317C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1317C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1317C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1317C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1317C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1317C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1317C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1317C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1317C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1317C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1317C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1317C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1317C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1317C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1317C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1317C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1317C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1317C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1317C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1317C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1317C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1317C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1317C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1317C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1317C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1317C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1317C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1317C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1317C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1317C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1317C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1317C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1317C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1317C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1317C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1317C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1317C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1317C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1317C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1317C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1317C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1317C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1317C43v68Ev,
  (VTBL_ENTRY)&_ZN7S1317C43v69Ev,
  (VTBL_ENTRY)&_ZN7S1317C43v70Ev,
  (VTBL_ENTRY)&_ZN7S1317C43v71Ev,
  (VTBL_ENTRY)&_ZN7S1317C43v72Ev,
  (VTBL_ENTRY)&_ZN7S1317C43v73Ev,
  (VTBL_ENTRY)&_ZN7S1317C43v74Ev,
  (VTBL_ENTRY)&_ZN7S1317C43v75Ev,
  (VTBL_ENTRY)&_ZN7S1317C43v76Ev,
  (VTBL_ENTRY)&_ZN7S1317C43v77Ev,
  (VTBL_ENTRY)&_ZN7S1317C43v78Ev,
};
extern VTBL_ENTRY _ZTI7S1317C4[];
extern  VTBL_ENTRY _ZTV7S1317C4[];
Class_Descriptor cd_S1317C4 = {  "S1317C4", // class name
  0,0,//no base classes
  &(vtc_S1317C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI7S1317C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S1317C4),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  S1317C3  : S1317C4 {
  unsigned int s1317c3f0:1;
  unsigned int s1317c3f1:1;
  unsigned int s1317c3f2:1;
  unsigned int s1317c3f3:1;
  unsigned int s1317c3f4:1;
  unsigned int s1317c3f5:1;
  unsigned int s1317c3f6:1;
  ::S3625C32 s1317c3f7;
  virtual  ~S1317C3(); // _ZN7S1317C3D1Ev
  virtual void  v79(); // _ZN7S1317C33v79Ev
  virtual void  v80(); // _ZN7S1317C33v80Ev
  virtual void  v81(); // _ZN7S1317C33v81Ev
  virtual void  v82(); // _ZN7S1317C33v82Ev
  virtual void  v83(); // _ZN7S1317C33v83Ev
  virtual void  v84(); // _ZN7S1317C33v84Ev
  virtual void  v85(); // _ZN7S1317C33v85Ev
  virtual void  v86(); // _ZN7S1317C33v86Ev
  virtual void  v87(); // _ZN7S1317C33v87Ev
  virtual void  v88(); // _ZN7S1317C33v88Ev
  virtual void  v89(); // _ZN7S1317C33v89Ev
  virtual void  v90(); // _ZN7S1317C33v90Ev
  virtual void  v91(); // _ZN7S1317C33v91Ev
  virtual void  v92(); // _ZN7S1317C33v92Ev
  virtual void  v93(); // _ZN7S1317C33v93Ev
  virtual void  v94(); // _ZN7S1317C33v94Ev
  virtual void  v95(); // _ZN7S1317C33v95Ev
  virtual void  v96(); // _ZN7S1317C33v96Ev
  virtual void  v97(); // _ZN7S1317C33v97Ev
  virtual void  v98(); // _ZN7S1317C33v98Ev
  S1317C3(); // tgen
};
//SIG(-1 S1317C3) C1{ BC2{ 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 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 Fi FL Fp[4] Fi[2] Fp FC3{ m Fi[2]} Fp[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 FC4{ m}}


 S1317C3 ::~S1317C3(){ note_dtor("S1317C3", this);}
void  S1317C3 ::v79(){vfunc_called(this, "_ZN7S1317C33v79Ev");}
void  S1317C3 ::v80(){vfunc_called(this, "_ZN7S1317C33v80Ev");}
void  S1317C3 ::v81(){vfunc_called(this, "_ZN7S1317C33v81Ev");}
void  S1317C3 ::v82(){vfunc_called(this, "_ZN7S1317C33v82Ev");}
void  S1317C3 ::v83(){vfunc_called(this, "_ZN7S1317C33v83Ev");}
void  S1317C3 ::v84(){vfunc_called(this, "_ZN7S1317C33v84Ev");}
void  S1317C3 ::v85(){vfunc_called(this, "_ZN7S1317C33v85Ev");}
void  S1317C3 ::v86(){vfunc_called(this, "_ZN7S1317C33v86Ev");}
void  S1317C3 ::v87(){vfunc_called(this, "_ZN7S1317C33v87Ev");}
void  S1317C3 ::v88(){vfunc_called(this, "_ZN7S1317C33v88Ev");}
void  S1317C3 ::v89(){vfunc_called(this, "_ZN7S1317C33v89Ev");}
void  S1317C3 ::v90(){vfunc_called(this, "_ZN7S1317C33v90Ev");}
void  S1317C3 ::v91(){vfunc_called(this, "_ZN7S1317C33v91Ev");}
void  S1317C3 ::v92(){vfunc_called(this, "_ZN7S1317C33v92Ev");}
void  S1317C3 ::v93(){vfunc_called(this, "_ZN7S1317C33v93Ev");}
void  S1317C3 ::v94(){vfunc_called(this, "_ZN7S1317C33v94Ev");}
void  S1317C3 ::v95(){vfunc_called(this, "_ZN7S1317C33v95Ev");}
void  S1317C3 ::v96(){vfunc_called(this, "_ZN7S1317C33v96Ev");}
void  S1317C3 ::v97(){vfunc_called(this, "_ZN7S1317C33v97Ev");}
void  S1317C3 ::v98(){vfunc_called(this, "_ZN7S1317C33v98Ev");}
S1317C3 ::S1317C3(){ note_ctor("S1317C3", this);} // tgen

static void Test_S1317C3()
{
  extern Class_Descriptor cd_S1317C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(14,17)];
    init_test(&cd_S1317C3, buf);
    S1317C3 *dp, &lv = *(dp=new (buf) S1317C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(104,64), "sizeof(S1317C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1317C3)");
    check_base_class_offset(lv, (S1317C4*), 0, "S1317C3");
    set_bf_and_test(lv, s1317c3f0, ABISELECT(96,60), 0, 1, 1, "S1317C3");
    set_bf_and_test(lv, s1317c3f1, ABISELECT(96,60), 1, 1, 1, "S1317C3");
    set_bf_and_test(lv, s1317c3f2, ABISELECT(96,60), 2, 1, 1, "S1317C3");
    set_bf_and_test(lv, s1317c3f3, ABISELECT(96,60), 3, 1, 1, "S1317C3");
    set_bf_and_test(lv, s1317c3f4, ABISELECT(96,60), 4, 1, 1, "S1317C3");
    set_bf_and_test(lv, s1317c3f5, ABISELECT(96,60), 5, 1, 1, "S1317C3");
    set_bf_and_test(lv, s1317c3f6, ABISELECT(96,60), 6, 1, 1, "S1317C3");
    check_field_offset(lv, s1317c3f7, ABISELECT(97,61), "S1317C3.s1317c3f7");
    test_class_info(&lv, &cd_S1317C3);
    dp->~S1317C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1317C3(Test_S1317C3, "S1317C3", ABISELECT(104,64));

#else // __cplusplus

extern void _ZN7S1317C3C1Ev();
extern void _ZN7S1317C3D1Ev();
Name_Map name_map_S1317C3[] = {
  NSPAIR(_ZN7S1317C3C1Ev),
  NSPAIR(_ZN7S1317C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1317C4;
extern VTBL_ENTRY _ZTI7S1317C4[];
extern  VTBL_ENTRY _ZTV7S1317C4[];
static Base_Class bases_S1317C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1317C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI7S1317C3[];
extern void _ZN7S1317C3D1Ev();
extern void _ZN7S1317C3D0Ev();
extern void _ZN7S1317C43v15Ev();
extern void _ZN7S1317C43v16Ev();
extern void _ZN7S1317C43v17Ev();
extern void _ZN7S1317C43v18Ev();
extern void _ZN7S1317C43v19Ev();
extern void _ZN7S1317C43v20Ev();
extern void _ZN7S1317C43v21Ev();
extern void _ZN7S1317C43v22Ev();
extern void _ZN7S1317C43v23Ev();
extern void _ZN7S1317C43v24Ev();
extern void _ZN7S1317C43v25Ev();
extern void _ZN7S1317C43v26Ev();
extern void _ZN7S1317C43v27Ev();
extern void _ZN7S1317C43v28Ev();
extern void _ZN7S1317C43v29Ev();
extern void _ZN7S1317C43v30Ev();
extern void _ZN7S1317C43v31Ev();
extern void _ZN7S1317C43v32Ev();
extern void _ZN7S1317C43v33Ev();
extern void _ZN7S1317C43v34Ev();
extern void _ZN7S1317C43v35Ev();
extern void _ZN7S1317C43v36Ev();
extern void _ZN7S1317C43v37Ev();
extern void _ZN7S1317C43v38Ev();
extern void _ZN7S1317C43v39Ev();
extern void _ZN7S1317C43v40Ev();
extern void _ZN7S1317C43v41Ev();
extern void _ZN7S1317C43v42Ev();
extern void _ZN7S1317C43v43Ev();
extern void _ZN7S1317C43v44Ev();
extern void _ZN7S1317C43v45Ev();
extern void _ZN7S1317C43v46Ev();
extern void _ZN7S1317C43v47Ev();
extern void _ZN7S1317C43v48Ev();
extern void _ZN7S1317C43v49Ev();
extern void _ZN7S1317C43v50Ev();
extern void _ZN7S1317C43v51Ev();
extern void _ZN7S1317C43v52Ev();
extern void _ZN7S1317C43v53Ev();
extern void _ZN7S1317C43v54Ev();
extern void _ZN7S1317C43v55Ev();
extern void _ZN7S1317C43v56Ev();
extern void _ZN7S1317C43v57Ev();
extern void _ZN7S1317C43v58Ev();
extern void _ZN7S1317C43v59Ev();
extern void _ZN7S1317C43v60Ev();
extern void _ZN7S1317C43v61Ev();
extern void _ZN7S1317C43v62Ev();
extern void _ZN7S1317C43v63Ev();
extern void _ZN7S1317C43v64Ev();
extern void _ZN7S1317C43v65Ev();
extern void _ZN7S1317C43v66Ev();
extern void _ZN7S1317C43v67Ev();
extern void _ZN7S1317C43v68Ev();
extern void _ZN7S1317C43v69Ev();
extern void _ZN7S1317C43v70Ev();
extern void _ZN7S1317C43v71Ev();
extern void _ZN7S1317C43v72Ev();
extern void _ZN7S1317C43v73Ev();
extern void _ZN7S1317C43v74Ev();
extern void _ZN7S1317C43v75Ev();
extern void _ZN7S1317C43v76Ev();
extern void _ZN7S1317C43v77Ev();
extern void _ZN7S1317C43v78Ev();
extern void _ZN7S1317C33v79Ev();
extern void _ZN7S1317C33v80Ev();
extern void _ZN7S1317C33v81Ev();
extern void _ZN7S1317C33v82Ev();
extern void _ZN7S1317C33v83Ev();
extern void _ZN7S1317C33v84Ev();
extern void _ZN7S1317C33v85Ev();
extern void _ZN7S1317C33v86Ev();
extern void _ZN7S1317C33v87Ev();
extern void _ZN7S1317C33v88Ev();
extern void _ZN7S1317C33v89Ev();
extern void _ZN7S1317C33v90Ev();
extern void _ZN7S1317C33v91Ev();
extern void _ZN7S1317C33v92Ev();
extern void _ZN7S1317C33v93Ev();
extern void _ZN7S1317C33v94Ev();
extern void _ZN7S1317C33v95Ev();
extern void _ZN7S1317C33v96Ev();
extern void _ZN7S1317C33v97Ev();
extern void _ZN7S1317C33v98Ev();
static  VTBL_ENTRY vtc_S1317C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1317C3[0]),
  (VTBL_ENTRY)&_ZN7S1317C3D1Ev,
  (VTBL_ENTRY)&_ZN7S1317C3D0Ev,
  (VTBL_ENTRY)&_ZN7S1317C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1317C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1317C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1317C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1317C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1317C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1317C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1317C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1317C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1317C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1317C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1317C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1317C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1317C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1317C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1317C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1317C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1317C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1317C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1317C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1317C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1317C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1317C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1317C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1317C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1317C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1317C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1317C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1317C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1317C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1317C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1317C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1317C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1317C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1317C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1317C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1317C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1317C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1317C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1317C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1317C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1317C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1317C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1317C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1317C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1317C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1317C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1317C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1317C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1317C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1317C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1317C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1317C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1317C43v68Ev,
  (VTBL_ENTRY)&_ZN7S1317C43v69Ev,
  (VTBL_ENTRY)&_ZN7S1317C43v70Ev,
  (VTBL_ENTRY)&_ZN7S1317C43v71Ev,
  (VTBL_ENTRY)&_ZN7S1317C43v72Ev,
  (VTBL_ENTRY)&_ZN7S1317C43v73Ev,
  (VTBL_ENTRY)&_ZN7S1317C43v74Ev,
  (VTBL_ENTRY)&_ZN7S1317C43v75Ev,
  (VTBL_ENTRY)&_ZN7S1317C43v76Ev,
  (VTBL_ENTRY)&_ZN7S1317C43v77Ev,
  (VTBL_ENTRY)&_ZN7S1317C43v78Ev,
  (VTBL_ENTRY)&_ZN7S1317C33v79Ev,
  (VTBL_ENTRY)&_ZN7S1317C33v80Ev,
  (VTBL_ENTRY)&_ZN7S1317C33v81Ev,
  (VTBL_ENTRY)&_ZN7S1317C33v82Ev,
  (VTBL_ENTRY)&_ZN7S1317C33v83Ev,
  (VTBL_ENTRY)&_ZN7S1317C33v84Ev,
  (VTBL_ENTRY)&_ZN7S1317C33v85Ev,
  (VTBL_ENTRY)&_ZN7S1317C33v86Ev,
  (VTBL_ENTRY)&_ZN7S1317C33v87Ev,
  (VTBL_ENTRY)&_ZN7S1317C33v88Ev,
  (VTBL_ENTRY)&_ZN7S1317C33v89Ev,
  (VTBL_ENTRY)&_ZN7S1317C33v90Ev,
  (VTBL_ENTRY)&_ZN7S1317C33v91Ev,
  (VTBL_ENTRY)&_ZN7S1317C33v92Ev,
  (VTBL_ENTRY)&_ZN7S1317C33v93Ev,
  (VTBL_ENTRY)&_ZN7S1317C33v94Ev,
  (VTBL_ENTRY)&_ZN7S1317C33v95Ev,
  (VTBL_ENTRY)&_ZN7S1317C33v96Ev,
  (VTBL_ENTRY)&_ZN7S1317C33v97Ev,
  (VTBL_ENTRY)&_ZN7S1317C33v98Ev,
};
extern VTBL_ENTRY _ZTI7S1317C3[];
extern  VTBL_ENTRY _ZTV7S1317C3[];
Class_Descriptor cd_S1317C3 = {  "S1317C3", // class name
  bases_S1317C3, 1,
  &(vtc_S1317C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(104,64), // object size
  NSPAIRA(_ZTI7S1317C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1317C3),88, //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  S1317C2  : S1317C3 {
  virtual  ~S1317C2(); // _ZN7S1317C2D1Ev
  virtual void  v99(); // _ZN7S1317C23v99Ev
  virtual void  v100(); // _ZN7S1317C24v100Ev
  virtual void  v101(); // _ZN7S1317C24v101Ev
  virtual void  v102(); // _ZN7S1317C24v102Ev
  virtual void  v103(); // _ZN7S1317C24v103Ev
  virtual void  v104(); // _ZN7S1317C24v104Ev
  virtual void  v105(); // _ZN7S1317C24v105Ev
  virtual void  v106(); // _ZN7S1317C24v106Ev
  virtual void  v107(); // _ZN7S1317C24v107Ev
  S1317C2(); // tgen
};
//SIG(-1 S1317C2) C1{ BC2{ BC3{ vd 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 Fi FL Fp[4] Fi[2] Fp FC4{ m Fi[2]} Fp[2]} vd v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 v91 v92 v93 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 FC5{ m}} vd v1 v2 v3 v4 v5 v6 v7 v8 v9}


 S1317C2 ::~S1317C2(){ note_dtor("S1317C2", this);}
void  S1317C2 ::v99(){vfunc_called(this, "_ZN7S1317C23v99Ev");}
void  S1317C2 ::v100(){vfunc_called(this, "_ZN7S1317C24v100Ev");}
void  S1317C2 ::v101(){vfunc_called(this, "_ZN7S1317C24v101Ev");}
void  S1317C2 ::v102(){vfunc_called(this, "_ZN7S1317C24v102Ev");}
void  S1317C2 ::v103(){vfunc_called(this, "_ZN7S1317C24v103Ev");}
void  S1317C2 ::v104(){vfunc_called(this, "_ZN7S1317C24v104Ev");}
void  S1317C2 ::v105(){vfunc_called(this, "_ZN7S1317C24v105Ev");}
void  S1317C2 ::v106(){vfunc_called(this, "_ZN7S1317C24v106Ev");}
void  S1317C2 ::v107(){vfunc_called(this, "_ZN7S1317C24v107Ev");}
S1317C2 ::S1317C2(){ note_ctor("S1317C2", this);} // tgen

static void Test_S1317C2()
{
  extern Class_Descriptor cd_S1317C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(14,17)];
    init_test(&cd_S1317C2, buf);
    S1317C2 *dp, &lv = *(dp=new (buf) S1317C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(104,64), "sizeof(S1317C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1317C2)");
    check_base_class_offset(lv, (S1317C4*)(S1317C3*), 0, "S1317C2");
    check_base_class_offset(lv, (S1317C3*), 0, "S1317C2");
    test_class_info(&lv, &cd_S1317C2);
    dp->~S1317C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1317C2(Test_S1317C2, "S1317C2", ABISELECT(104,64));

#else // __cplusplus

extern void _ZN7S1317C2C1Ev();
extern void _ZN7S1317C2D1Ev();
Name_Map name_map_S1317C2[] = {
  NSPAIR(_ZN7S1317C2C1Ev),
  NSPAIR(_ZN7S1317C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1317C4;
extern VTBL_ENTRY _ZTI7S1317C4[];
extern  VTBL_ENTRY _ZTV7S1317C4[];
extern Class_Descriptor cd_S1317C3;
extern VTBL_ENTRY _ZTI7S1317C3[];
extern  VTBL_ENTRY _ZTV7S1317C3[];
static Base_Class bases_S1317C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1317C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S1317C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S1317C2[];
extern void _ZN7S1317C2D1Ev();
extern void _ZN7S1317C2D0Ev();
extern void _ZN7S1317C43v15Ev();
extern void _ZN7S1317C43v16Ev();
extern void _ZN7S1317C43v17Ev();
extern void _ZN7S1317C43v18Ev();
extern void _ZN7S1317C43v19Ev();
extern void _ZN7S1317C43v20Ev();
extern void _ZN7S1317C43v21Ev();
extern void _ZN7S1317C43v22Ev();
extern void _ZN7S1317C43v23Ev();
extern void _ZN7S1317C43v24Ev();
extern void _ZN7S1317C43v25Ev();
extern void _ZN7S1317C43v26Ev();
extern void _ZN7S1317C43v27Ev();
extern void _ZN7S1317C43v28Ev();
extern void _ZN7S1317C43v29Ev();
extern void _ZN7S1317C43v30Ev();
extern void _ZN7S1317C43v31Ev();
extern void _ZN7S1317C43v32Ev();
extern void _ZN7S1317C43v33Ev();
extern void _ZN7S1317C43v34Ev();
extern void _ZN7S1317C43v35Ev();
extern void _ZN7S1317C43v36Ev();
extern void _ZN7S1317C43v37Ev();
extern void _ZN7S1317C43v38Ev();
extern void _ZN7S1317C43v39Ev();
extern void _ZN7S1317C43v40Ev();
extern void _ZN7S1317C43v41Ev();
extern void _ZN7S1317C43v42Ev();
extern void _ZN7S1317C43v43Ev();
extern void _ZN7S1317C43v44Ev();
extern void _ZN7S1317C43v45Ev();
extern void _ZN7S1317C43v46Ev();
extern void _ZN7S1317C43v47Ev();
extern void _ZN7S1317C43v48Ev();
extern void _ZN7S1317C43v49Ev();
extern void _ZN7S1317C43v50Ev();
extern void _ZN7S1317C43v51Ev();
extern void _ZN7S1317C43v52Ev();
extern void _ZN7S1317C43v53Ev();
extern void _ZN7S1317C43v54Ev();
extern void _ZN7S1317C43v55Ev();
extern void _ZN7S1317C43v56Ev();
extern void _ZN7S1317C43v57Ev();
extern void _ZN7S1317C43v58Ev();
extern void _ZN7S1317C43v59Ev();
extern void _ZN7S1317C43v60Ev();
extern void _ZN7S1317C43v61Ev();
extern void _ZN7S1317C43v62Ev();
extern void _ZN7S1317C43v63Ev();
extern void _ZN7S1317C43v64Ev();
extern void _ZN7S1317C43v65Ev();
extern void _ZN7S1317C43v66Ev();
extern void _ZN7S1317C43v67Ev();
extern void _ZN7S1317C43v68Ev();
extern void _ZN7S1317C43v69Ev();
extern void _ZN7S1317C43v70Ev();
extern void _ZN7S1317C43v71Ev();
extern void _ZN7S1317C43v72Ev();
extern void _ZN7S1317C43v73Ev();
extern void _ZN7S1317C43v74Ev();
extern void _ZN7S1317C43v75Ev();
extern void _ZN7S1317C43v76Ev();
extern void _ZN7S1317C43v77Ev();
extern void _ZN7S1317C43v78Ev();
extern void _ZN7S1317C33v79Ev();
extern void _ZN7S1317C33v80Ev();
extern void _ZN7S1317C33v81Ev();
extern void _ZN7S1317C33v82Ev();
extern void _ZN7S1317C33v83Ev();
extern void _ZN7S1317C33v84Ev();
extern void _ZN7S1317C33v85Ev();
extern void _ZN7S1317C33v86Ev();
extern void _ZN7S1317C33v87Ev();
extern void _ZN7S1317C33v88Ev();
extern void _ZN7S1317C33v89Ev();
extern void _ZN7S1317C33v90Ev();
extern void _ZN7S1317C33v91Ev();
extern void _ZN7S1317C33v92Ev();
extern void _ZN7S1317C33v93Ev();
extern void _ZN7S1317C33v94Ev();
extern void _ZN7S1317C33v95Ev();
extern void _ZN7S1317C33v96Ev();
extern void _ZN7S1317C33v97Ev();
extern void _ZN7S1317C33v98Ev();
extern void _ZN7S1317C23v99Ev();
extern void _ZN7S1317C24v100Ev();
extern void _ZN7S1317C24v101Ev();
extern void _ZN7S1317C24v102Ev();
extern void _ZN7S1317C24v103Ev();
extern void _ZN7S1317C24v104Ev();
extern void _ZN7S1317C24v105Ev();
extern void _ZN7S1317C24v106Ev();
extern void _ZN7S1317C24v107Ev();
static  VTBL_ENTRY vtc_S1317C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1317C2[0]),
  (VTBL_ENTRY)&_ZN7S1317C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1317C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1317C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1317C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1317C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1317C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1317C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1317C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1317C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1317C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1317C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1317C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1317C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1317C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1317C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1317C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1317C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1317C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1317C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1317C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1317C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1317C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1317C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1317C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1317C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1317C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1317C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1317C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1317C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1317C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1317C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1317C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1317C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1317C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1317C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1317C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1317C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1317C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1317C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1317C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1317C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1317C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1317C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1317C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1317C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1317C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1317C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1317C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1317C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1317C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1317C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1317C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1317C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1317C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1317C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1317C43v68Ev,
  (VTBL_ENTRY)&_ZN7S1317C43v69Ev,
  (VTBL_ENTRY)&_ZN7S1317C43v70Ev,
  (VTBL_ENTRY)&_ZN7S1317C43v71Ev,
  (VTBL_ENTRY)&_ZN7S1317C43v72Ev,
  (VTBL_ENTRY)&_ZN7S1317C43v73Ev,
  (VTBL_ENTRY)&_ZN7S1317C43v74Ev,
  (VTBL_ENTRY)&_ZN7S1317C43v75Ev,
  (VTBL_ENTRY)&_ZN7S1317C43v76Ev,
  (VTBL_ENTRY)&_ZN7S1317C43v77Ev,
  (VTBL_ENTRY)&_ZN7S1317C43v78Ev,
  (VTBL_ENTRY)&_ZN7S1317C33v79Ev,
  (VTBL_ENTRY)&_ZN7S1317C33v80Ev,
  (VTBL_ENTRY)&_ZN7S1317C33v81Ev,
  (VTBL_ENTRY)&_ZN7S1317C33v82Ev,
  (VTBL_ENTRY)&_ZN7S1317C33v83Ev,
  (VTBL_ENTRY)&_ZN7S1317C33v84Ev,
  (VTBL_ENTRY)&_ZN7S1317C33v85Ev,
  (VTBL_ENTRY)&_ZN7S1317C33v86Ev,
  (VTBL_ENTRY)&_ZN7S1317C33v87Ev,
  (VTBL_ENTRY)&_ZN7S1317C33v88Ev,
  (VTBL_ENTRY)&_ZN7S1317C33v89Ev,
  (VTBL_ENTRY)&_ZN7S1317C33v90Ev,
  (VTBL_ENTRY)&_ZN7S1317C33v91Ev,
  (VTBL_ENTRY)&_ZN7S1317C33v92Ev,
  (VTBL_ENTRY)&_ZN7S1317C33v93Ev,
  (VTBL_ENTRY)&_ZN7S1317C33v94Ev,
  (VTBL_ENTRY)&_ZN7S1317C33v95Ev,
  (VTBL_ENTRY)&_ZN7S1317C33v96Ev,
  (VTBL_ENTRY)&_ZN7S1317C33v97Ev,
  (VTBL_ENTRY)&_ZN7S1317C33v98Ev,
  (VTBL_ENTRY)&_ZN7S1317C23v99Ev,
  (VTBL_ENTRY)&_ZN7S1317C24v100Ev,
  (VTBL_ENTRY)&_ZN7S1317C24v101Ev,
  (VTBL_ENTRY)&_ZN7S1317C24v102Ev,
  (VTBL_ENTRY)&_ZN7S1317C24v103Ev,
  (VTBL_ENTRY)&_ZN7S1317C24v104Ev,
  (VTBL_ENTRY)&_ZN7S1317C24v105Ev,
  (VTBL_ENTRY)&_ZN7S1317C24v106Ev,
  (VTBL_ENTRY)&_ZN7S1317C24v107Ev,
};
extern VTBL_ENTRY _ZTI7S1317C2[];
extern  VTBL_ENTRY _ZTV7S1317C2[];
Class_Descriptor cd_S1317C2 = {  "S1317C2", // class name
  bases_S1317C2, 2,
  &(vtc_S1317C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(104,64), // object size
  NSPAIRA(_ZTI7S1317C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1317C2),97, //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  S1317C1  : S1317C2 {
  char s1317c1f0[2];
  int s1317c1f1[6];
  unsigned int s1317c1f2:1;
  unsigned int s1317c1f3:1;
  unsigned int s1317c1f4:1;
  unsigned int s1317c1f5:1;
  unsigned int s1317c1f6:1;
  ::S674C6_nt s1317c1f7;
  ::S1289C10_nt s1317c1f8;
  ::S1289C10_nt s1317c1f9;
  ::S1289C10_nt s1317c1f10;
  virtual  ~S1317C1(); // _ZN7S1317C1D1Ev
  virtual void  v1(); // _ZN7S1317C12v1Ev
  virtual void  v2(); // _ZN7S1317C12v2Ev
  virtual void  v3(); // _ZN7S1317C12v3Ev
  virtual void  v4(); // _ZN7S1317C12v4Ev
  virtual void  v5(); // _ZN7S1317C12v5Ev
  virtual void  v6(); // _ZN7S1317C12v6Ev
  virtual void  v7(); // _ZN7S1317C12v7Ev
  virtual void  v8(); // _ZN7S1317C12v8Ev
  virtual void  v9(); // _ZN7S1317C12v9Ev
  virtual void  v10(); // _ZN7S1317C13v10Ev
  virtual void  v11(); // _ZN7S1317C13v11Ev
  virtual void  v12(); // _ZN7S1317C13v12Ev
  virtual void  v13(); // _ZN7S1317C13v13Ev
  virtual void  v14(); // _ZN7S1317C13v14Ev
  S1317C1(); // tgen
};
//SIG(1 S1317C1) C1{ BC2{ BC3{ BC4{ 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 FC5{ m Fi[2]} Fp[2]} vd v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 v91 v92 v93 v94 v95 v96 v97 v98 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 FC6{ m}} vd v99 v100 v101 v102 v103 v104 v105 v106 v107} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 Fc[2] Fi[6] Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 FC5 FC7{ BC8{ m Fc[4] FC9{ BC10{ BC11{ m Fp Fi[2]}}} Fi[2]} Fp} FC7 FC7}


 S1317C1 ::~S1317C1(){ note_dtor("S1317C1", this);}
void  S1317C1 ::v1(){vfunc_called(this, "_ZN7S1317C12v1Ev");}
void  S1317C1 ::v2(){vfunc_called(this, "_ZN7S1317C12v2Ev");}
void  S1317C1 ::v3(){vfunc_called(this, "_ZN7S1317C12v3Ev");}
void  S1317C1 ::v4(){vfunc_called(this, "_ZN7S1317C12v4Ev");}
void  S1317C1 ::v5(){vfunc_called(this, "_ZN7S1317C12v5Ev");}
void  S1317C1 ::v6(){vfunc_called(this, "_ZN7S1317C12v6Ev");}
void  S1317C1 ::v7(){vfunc_called(this, "_ZN7S1317C12v7Ev");}
void  S1317C1 ::v8(){vfunc_called(this, "_ZN7S1317C12v8Ev");}
void  S1317C1 ::v9(){vfunc_called(this, "_ZN7S1317C12v9Ev");}
void  S1317C1 ::v10(){vfunc_called(this, "_ZN7S1317C13v10Ev");}
void  S1317C1 ::v11(){vfunc_called(this, "_ZN7S1317C13v11Ev");}
void  S1317C1 ::v12(){vfunc_called(this, "_ZN7S1317C13v12Ev");}
void  S1317C1 ::v13(){vfunc_called(this, "_ZN7S1317C13v13Ev");}
void  S1317C1 ::v14(){vfunc_called(this, "_ZN7S1317C13v14Ev");}
S1317C1 ::S1317C1(){ note_ctor("S1317C1", this);} // tgen

static void Test_S1317C1()
{
  extern Class_Descriptor cd_S1317C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(33,47)];
    init_test(&cd_S1317C1, buf);
    S1317C1 *dp, &lv = *(dp=new (buf) S1317C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(256,184), "sizeof(S1317C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1317C1)");
    check_base_class_offset(lv, (S1317C4*)(S1317C3*)(S1317C2*), 0, "S1317C1");
    check_base_class_offset(lv, (S1317C3*)(S1317C2*), 0, "S1317C1");
    check_base_class_offset(lv, (S1317C2*), 0, "S1317C1");
    check_field_offset(lv, s1317c1f0, ABISELECT(98,62), "S1317C1.s1317c1f0");
    check_field_offset(lv, s1317c1f1, ABISELECT(100,64), "S1317C1.s1317c1f1");
    set_bf_and_test(lv, s1317c1f2, ABISELECT(124,88), 0, 1, 1, "S1317C1");
    set_bf_and_test(lv, s1317c1f3, ABISELECT(124,88), 1, 1, 1, "S1317C1");
    set_bf_and_test(lv, s1317c1f4, ABISELECT(124,88), 2, 1, 1, "S1317C1");
    set_bf_and_test(lv, s1317c1f5, ABISELECT(124,88), 3, 1, 1, "S1317C1");
    set_bf_and_test(lv, s1317c1f6, ABISELECT(124,88), 4, 1, 1, "S1317C1");
    check_field_offset(lv, s1317c1f7, ABISELECT(128,92), "S1317C1.s1317c1f7");
    check_field_offset(lv, s1317c1f8, ABISELECT(136,100), "S1317C1.s1317c1f8");
    check_field_offset(lv, s1317c1f9, ABISELECT(176,128), "S1317C1.s1317c1f9");
    check_field_offset(lv, s1317c1f10, ABISELECT(216,156), "S1317C1.s1317c1f10");
    test_class_info(&lv, &cd_S1317C1);
    dp->~S1317C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1317C1(Test_S1317C1, "S1317C1", ABISELECT(256,184));

#else // __cplusplus

extern void _ZN7S1317C1C1Ev();
extern void _ZN7S1317C1D1Ev();
Name_Map name_map_S1317C1[] = {
  NSPAIR(_ZN7S1317C1C1Ev),
  NSPAIR(_ZN7S1317C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1317C4;
extern VTBL_ENTRY _ZTI7S1317C4[];
extern  VTBL_ENTRY _ZTV7S1317C4[];
extern Class_Descriptor cd_S1317C3;
extern VTBL_ENTRY _ZTI7S1317C3[];
extern  VTBL_ENTRY _ZTV7S1317C3[];
extern Class_Descriptor cd_S1317C2;
extern VTBL_ENTRY _ZTI7S1317C2[];
extern  VTBL_ENTRY _ZTV7S1317C2[];
static Base_Class bases_S1317C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1317C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S1317C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S1317C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S1317C1[];
extern void _ZN7S1317C1D1Ev();
extern void _ZN7S1317C1D0Ev();
extern void _ZN7S1317C43v15Ev();
extern void _ZN7S1317C43v16Ev();
extern void _ZN7S1317C43v17Ev();
extern void _ZN7S1317C43v18Ev();
extern void _ZN7S1317C43v19Ev();
extern void _ZN7S1317C43v20Ev();
extern void _ZN7S1317C43v21Ev();
extern void _ZN7S1317C43v22Ev();
extern void _ZN7S1317C43v23Ev();
extern void _ZN7S1317C43v24Ev();
extern void _ZN7S1317C43v25Ev();
extern void _ZN7S1317C43v26Ev();
extern void _ZN7S1317C43v27Ev();
extern void _ZN7S1317C43v28Ev();
extern void _ZN7S1317C43v29Ev();
extern void _ZN7S1317C43v30Ev();
extern void _ZN7S1317C43v31Ev();
extern void _ZN7S1317C43v32Ev();
extern void _ZN7S1317C43v33Ev();
extern void _ZN7S1317C43v34Ev();
extern void _ZN7S1317C43v35Ev();
extern void _ZN7S1317C43v36Ev();
extern void _ZN7S1317C43v37Ev();
extern void _ZN7S1317C43v38Ev();
extern void _ZN7S1317C43v39Ev();
extern void _ZN7S1317C43v40Ev();
extern void _ZN7S1317C43v41Ev();
extern void _ZN7S1317C43v42Ev();
extern void _ZN7S1317C43v43Ev();
extern void _ZN7S1317C43v44Ev();
extern void _ZN7S1317C43v45Ev();
extern void _ZN7S1317C43v46Ev();
extern void _ZN7S1317C43v47Ev();
extern void _ZN7S1317C43v48Ev();
extern void _ZN7S1317C43v49Ev();
extern void _ZN7S1317C43v50Ev();
extern void _ZN7S1317C43v51Ev();
extern void _ZN7S1317C43v52Ev();
extern void _ZN7S1317C43v53Ev();
extern void _ZN7S1317C43v54Ev();
extern void _ZN7S1317C43v55Ev();
extern void _ZN7S1317C43v56Ev();
extern void _ZN7S1317C43v57Ev();
extern void _ZN7S1317C43v58Ev();
extern void _ZN7S1317C43v59Ev();
extern void _ZN7S1317C43v60Ev();
extern void _ZN7S1317C43v61Ev();
extern void _ZN7S1317C43v62Ev();
extern void _ZN7S1317C43v63Ev();
extern void _ZN7S1317C43v64Ev();
extern void _ZN7S1317C43v65Ev();
extern void _ZN7S1317C43v66Ev();
extern void _ZN7S1317C43v67Ev();
extern void _ZN7S1317C43v68Ev();
extern void _ZN7S1317C43v69Ev();
extern void _ZN7S1317C43v70Ev();
extern void _ZN7S1317C43v71Ev();
extern void _ZN7S1317C43v72Ev();
extern void _ZN7S1317C43v73Ev();
extern void _ZN7S1317C43v74Ev();
extern void _ZN7S1317C43v75Ev();
extern void _ZN7S1317C43v76Ev();
extern void _ZN7S1317C43v77Ev();
extern void _ZN7S1317C43v78Ev();
extern void _ZN7S1317C33v79Ev();
extern void _ZN7S1317C33v80Ev();
extern void _ZN7S1317C33v81Ev();
extern void _ZN7S1317C33v82Ev();
extern void _ZN7S1317C33v83Ev();
extern void _ZN7S1317C33v84Ev();
extern void _ZN7S1317C33v85Ev();
extern void _ZN7S1317C33v86Ev();
extern void _ZN7S1317C33v87Ev();
extern void _ZN7S1317C33v88Ev();
extern void _ZN7S1317C33v89Ev();
extern void _ZN7S1317C33v90Ev();
extern void _ZN7S1317C33v91Ev();
extern void _ZN7S1317C33v92Ev();
extern void _ZN7S1317C33v93Ev();
extern void _ZN7S1317C33v94Ev();
extern void _ZN7S1317C33v95Ev();
extern void _ZN7S1317C33v96Ev();
extern void _ZN7S1317C33v97Ev();
extern void _ZN7S1317C33v98Ev();
extern void _ZN7S1317C23v99Ev();
extern void _ZN7S1317C24v100Ev();
extern void _ZN7S1317C24v101Ev();
extern void _ZN7S1317C24v102Ev();
extern void _ZN7S1317C24v103Ev();
extern void _ZN7S1317C24v104Ev();
extern void _ZN7S1317C24v105Ev();
extern void _ZN7S1317C24v106Ev();
extern void _ZN7S1317C24v107Ev();
extern void _ZN7S1317C12v1Ev();
extern void _ZN7S1317C12v2Ev();
extern void _ZN7S1317C12v3Ev();
extern void _ZN7S1317C12v4Ev();
extern void _ZN7S1317C12v5Ev();
extern void _ZN7S1317C12v6Ev();
extern void _ZN7S1317C12v7Ev();
extern void _ZN7S1317C12v8Ev();
extern void _ZN7S1317C12v9Ev();
extern void _ZN7S1317C13v10Ev();
extern void _ZN7S1317C13v11Ev();
extern void _ZN7S1317C13v12Ev();
extern void _ZN7S1317C13v13Ev();
extern void _ZN7S1317C13v14Ev();
static  VTBL_ENTRY vtc_S1317C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1317C1[0]),
  (VTBL_ENTRY)&_ZN7S1317C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1317C1D0Ev,
  (VTBL_ENTRY)&_ZN7S1317C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1317C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1317C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1317C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1317C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1317C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1317C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1317C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1317C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1317C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1317C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1317C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1317C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1317C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1317C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1317C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1317C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1317C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1317C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1317C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1317C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1317C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1317C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1317C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1317C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1317C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1317C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1317C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1317C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1317C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1317C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1317C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1317C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1317C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1317C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1317C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1317C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1317C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1317C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1317C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1317C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1317C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1317C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1317C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1317C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1317C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1317C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1317C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1317C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1317C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1317C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1317C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1317C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1317C43v68Ev,
  (VTBL_ENTRY)&_ZN7S1317C43v69Ev,
  (VTBL_ENTRY)&_ZN7S1317C43v70Ev,
  (VTBL_ENTRY)&_ZN7S1317C43v71Ev,
  (VTBL_ENTRY)&_ZN7S1317C43v72Ev,
  (VTBL_ENTRY)&_ZN7S1317C43v73Ev,
  (VTBL_ENTRY)&_ZN7S1317C43v74Ev,
  (VTBL_ENTRY)&_ZN7S1317C43v75Ev,
  (VTBL_ENTRY)&_ZN7S1317C43v76Ev,
  (VTBL_ENTRY)&_ZN7S1317C43v77Ev,
  (VTBL_ENTRY)&_ZN7S1317C43v78Ev,
  (VTBL_ENTRY)&_ZN7S1317C33v79Ev,
  (VTBL_ENTRY)&_ZN7S1317C33v80Ev,
  (VTBL_ENTRY)&_ZN7S1317C33v81Ev,
  (VTBL_ENTRY)&_ZN7S1317C33v82Ev,
  (VTBL_ENTRY)&_ZN7S1317C33v83Ev,
  (VTBL_ENTRY)&_ZN7S1317C33v84Ev,
  (VTBL_ENTRY)&_ZN7S1317C33v85Ev,
  (VTBL_ENTRY)&_ZN7S1317C33v86Ev,
  (VTBL_ENTRY)&_ZN7S1317C33v87Ev,
  (VTBL_ENTRY)&_ZN7S1317C33v88Ev,
  (VTBL_ENTRY)&_ZN7S1317C33v89Ev,
  (VTBL_ENTRY)&_ZN7S1317C33v90Ev,
  (VTBL_ENTRY)&_ZN7S1317C33v91Ev,
  (VTBL_ENTRY)&_ZN7S1317C33v92Ev,
  (VTBL_ENTRY)&_ZN7S1317C33v93Ev,
  (VTBL_ENTRY)&_ZN7S1317C33v94Ev,
  (VTBL_ENTRY)&_ZN7S1317C33v95Ev,
  (VTBL_ENTRY)&_ZN7S1317C33v96Ev,
  (VTBL_ENTRY)&_ZN7S1317C33v97Ev,
  (VTBL_ENTRY)&_ZN7S1317C33v98Ev,
  (VTBL_ENTRY)&_ZN7S1317C23v99Ev,
  (VTBL_ENTRY)&_ZN7S1317C24v100Ev,
  (VTBL_ENTRY)&_ZN7S1317C24v101Ev,
  (VTBL_ENTRY)&_ZN7S1317C24v102Ev,
  (VTBL_ENTRY)&_ZN7S1317C24v103Ev,
  (VTBL_ENTRY)&_ZN7S1317C24v104Ev,
  (VTBL_ENTRY)&_ZN7S1317C24v105Ev,
  (VTBL_ENTRY)&_ZN7S1317C24v106Ev,
  (VTBL_ENTRY)&_ZN7S1317C24v107Ev,
  (VTBL_ENTRY)&_ZN7S1317C12v1Ev,
  (VTBL_ENTRY)&_ZN7S1317C12v2Ev,
  (VTBL_ENTRY)&_ZN7S1317C12v3Ev,
  (VTBL_ENTRY)&_ZN7S1317C12v4Ev,
  (VTBL_ENTRY)&_ZN7S1317C12v5Ev,
  (VTBL_ENTRY)&_ZN7S1317C12v6Ev,
  (VTBL_ENTRY)&_ZN7S1317C12v7Ev,
  (VTBL_ENTRY)&_ZN7S1317C12v8Ev,
  (VTBL_ENTRY)&_ZN7S1317C12v9Ev,
  (VTBL_ENTRY)&_ZN7S1317C13v10Ev,
  (VTBL_ENTRY)&_ZN7S1317C13v11Ev,
  (VTBL_ENTRY)&_ZN7S1317C13v12Ev,
  (VTBL_ENTRY)&_ZN7S1317C13v13Ev,
  (VTBL_ENTRY)&_ZN7S1317C13v14Ev,
};
extern VTBL_ENTRY _ZTI7S1317C1[];
extern  VTBL_ENTRY _ZTV7S1317C1[];
Class_Descriptor cd_S1317C1 = {  "S1317C1", // class name
  bases_S1317C1, 3,
  &(vtc_S1317C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(256,184), // object size
  NSPAIRA(_ZTI7S1317C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1317C1),111, //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  S1292C4  {
  int s1292c4f0;
  __tsi64 s1292c4f1;
  void *s1292c4f2[4];
  int s1292c4f3[2];
  void *s1292c4f4;
  ::S674C6_nt s1292c4f5;
  void *s1292c4f6[2];
  virtual  ~S1292C4(); // _ZN7S1292C4D1Ev
  virtual void  v10(); // _ZN7S1292C43v10Ev
  virtual void  v11(); // _ZN7S1292C43v11Ev
  virtual void  v12(); // _ZN7S1292C43v12Ev
  virtual void  v13(); // _ZN7S1292C43v13Ev
  virtual void  v14(); // _ZN7S1292C43v14Ev
  virtual void  v15(); // _ZN7S1292C43v15Ev
  virtual void  v16(); // _ZN7S1292C43v16Ev
  virtual void  v17(); // _ZN7S1292C43v17Ev
  virtual void  v18(); // _ZN7S1292C43v18Ev
  virtual void  v19(); // _ZN7S1292C43v19Ev
  virtual void  v20(); // _ZN7S1292C43v20Ev
  virtual void  v21(); // _ZN7S1292C43v21Ev
  virtual void  v22(); // _ZN7S1292C43v22Ev
  virtual void  v23(); // _ZN7S1292C43v23Ev
  virtual void  v24(); // _ZN7S1292C43v24Ev
  virtual void  v25(); // _ZN7S1292C43v25Ev
  virtual void  v26(); // _ZN7S1292C43v26Ev
  virtual void  v27(); // _ZN7S1292C43v27Ev
  virtual void  v28(); // _ZN7S1292C43v28Ev
  virtual void  v29(); // _ZN7S1292C43v29Ev
  virtual void  v30(); // _ZN7S1292C43v30Ev
  virtual void  v31(); // _ZN7S1292C43v31Ev
  virtual void  v32(); // _ZN7S1292C43v32Ev
  virtual void  v33(); // _ZN7S1292C43v33Ev
  virtual void  v34(); // _ZN7S1292C43v34Ev
  virtual void  v35(); // _ZN7S1292C43v35Ev
  virtual void  v36(); // _ZN7S1292C43v36Ev
  virtual void  v37(); // _ZN7S1292C43v37Ev
  virtual void  v38(); // _ZN7S1292C43v38Ev
  virtual void  v39(); // _ZN7S1292C43v39Ev
  virtual void  v40(); // _ZN7S1292C43v40Ev
  virtual void  v41(); // _ZN7S1292C43v41Ev
  virtual void  v42(); // _ZN7S1292C43v42Ev
  virtual void  v43(); // _ZN7S1292C43v43Ev
  virtual void  v44(); // _ZN7S1292C43v44Ev
  virtual void  v45(); // _ZN7S1292C43v45Ev
  virtual void  v46(); // _ZN7S1292C43v46Ev
  virtual void  v47(); // _ZN7S1292C43v47Ev
  virtual void  v48(); // _ZN7S1292C43v48Ev
  virtual void  v49(); // _ZN7S1292C43v49Ev
  virtual void  v50(); // _ZN7S1292C43v50Ev
  virtual void  v51(); // _ZN7S1292C43v51Ev
  virtual void  v52(); // _ZN7S1292C43v52Ev
  virtual void  v53(); // _ZN7S1292C43v53Ev
  virtual void  v54(); // _ZN7S1292C43v54Ev
  virtual void  v55(); // _ZN7S1292C43v55Ev
  virtual void  v56(); // _ZN7S1292C43v56Ev
  virtual void  v57(); // _ZN7S1292C43v57Ev
  virtual void  v58(); // _ZN7S1292C43v58Ev
  virtual void  v59(); // _ZN7S1292C43v59Ev
  virtual void  v60(); // _ZN7S1292C43v60Ev
  virtual void  v61(); // _ZN7S1292C43v61Ev
  virtual void  v62(); // _ZN7S1292C43v62Ev
  virtual void  v63(); // _ZN7S1292C43v63Ev
  virtual void  v64(); // _ZN7S1292C43v64Ev
  virtual void  v65(); // _ZN7S1292C43v65Ev
  virtual void  v66(); // _ZN7S1292C43v66Ev
  virtual void  v67(); // _ZN7S1292C43v67Ev
  virtual void  v68(); // _ZN7S1292C43v68Ev
  virtual void  v69(); // _ZN7S1292C43v69Ev
  virtual void  v70(); // _ZN7S1292C43v70Ev
  virtual void  v71(); // _ZN7S1292C43v71Ev
  virtual void  v72(); // _ZN7S1292C43v72Ev
  virtual void  v73(); // _ZN7S1292C43v73Ev
  S1292C4(); // tgen
};
//SIG(-1 S1292C4) 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]}


 S1292C4 ::~S1292C4(){ note_dtor("S1292C4", this);}
void  S1292C4 ::v10(){vfunc_called(this, "_ZN7S1292C43v10Ev");}
void  S1292C4 ::v11(){vfunc_called(this, "_ZN7S1292C43v11Ev");}
void  S1292C4 ::v12(){vfunc_called(this, "_ZN7S1292C43v12Ev");}
void  S1292C4 ::v13(){vfunc_called(this, "_ZN7S1292C43v13Ev");}
void  S1292C4 ::v14(){vfunc_called(this, "_ZN7S1292C43v14Ev");}
void  S1292C4 ::v15(){vfunc_called(this, "_ZN7S1292C43v15Ev");}
void  S1292C4 ::v16(){vfunc_called(this, "_ZN7S1292C43v16Ev");}
void  S1292C4 ::v17(){vfunc_called(this, "_ZN7S1292C43v17Ev");}
void  S1292C4 ::v18(){vfunc_called(this, "_ZN7S1292C43v18Ev");}
void  S1292C4 ::v19(){vfunc_called(this, "_ZN7S1292C43v19Ev");}
void  S1292C4 ::v20(){vfunc_called(this, "_ZN7S1292C43v20Ev");}
void  S1292C4 ::v21(){vfunc_called(this, "_ZN7S1292C43v21Ev");}
void  S1292C4 ::v22(){vfunc_called(this, "_ZN7S1292C43v22Ev");}
void  S1292C4 ::v23(){vfunc_called(this, "_ZN7S1292C43v23Ev");}
void  S1292C4 ::v24(){vfunc_called(this, "_ZN7S1292C43v24Ev");}
void  S1292C4 ::v25(){vfunc_called(this, "_ZN7S1292C43v25Ev");}
void  S1292C4 ::v26(){vfunc_called(this, "_ZN7S1292C43v26Ev");}
void  S1292C4 ::v27(){vfunc_called(this, "_ZN7S1292C43v27Ev");}
void  S1292C4 ::v28(){vfunc_called(this, "_ZN7S1292C43v28Ev");}
void  S1292C4 ::v29(){vfunc_called(this, "_ZN7S1292C43v29Ev");}
void  S1292C4 ::v30(){vfunc_called(this, "_ZN7S1292C43v30Ev");}
void  S1292C4 ::v31(){vfunc_called(this, "_ZN7S1292C43v31Ev");}
void  S1292C4 ::v32(){vfunc_called(this, "_ZN7S1292C43v32Ev");}
void  S1292C4 ::v33(){vfunc_called(this, "_ZN7S1292C43v33Ev");}
void  S1292C4 ::v34(){vfunc_called(this, "_ZN7S1292C43v34Ev");}
void  S1292C4 ::v35(){vfunc_called(this, "_ZN7S1292C43v35Ev");}
void  S1292C4 ::v36(){vfunc_called(this, "_ZN7S1292C43v36Ev");}
void  S1292C4 ::v37(){vfunc_called(this, "_ZN7S1292C43v37Ev");}
void  S1292C4 ::v38(){vfunc_called(this, "_ZN7S1292C43v38Ev");}
void  S1292C4 ::v39(){vfunc_called(this, "_ZN7S1292C43v39Ev");}
void  S1292C4 ::v40(){vfunc_called(this, "_ZN7S1292C43v40Ev");}
void  S1292C4 ::v41(){vfunc_called(this, "_ZN7S1292C43v41Ev");}
void  S1292C4 ::v42(){vfunc_called(this, "_ZN7S1292C43v42Ev");}
void  S1292C4 ::v43(){vfunc_called(this, "_ZN7S1292C43v43Ev");}
void  S1292C4 ::v44(){vfunc_called(this, "_ZN7S1292C43v44Ev");}
void  S1292C4 ::v45(){vfunc_called(this, "_ZN7S1292C43v45Ev");}
void  S1292C4 ::v46(){vfunc_called(this, "_ZN7S1292C43v46Ev");}
void  S1292C4 ::v47(){vfunc_called(this, "_ZN7S1292C43v47Ev");}
void  S1292C4 ::v48(){vfunc_called(this, "_ZN7S1292C43v48Ev");}
void  S1292C4 ::v49(){vfunc_called(this, "_ZN7S1292C43v49Ev");}
void  S1292C4 ::v50(){vfunc_called(this, "_ZN7S1292C43v50Ev");}
void  S1292C4 ::v51(){vfunc_called(this, "_ZN7S1292C43v51Ev");}
void  S1292C4 ::v52(){vfunc_called(this, "_ZN7S1292C43v52Ev");}
void  S1292C4 ::v53(){vfunc_called(this, "_ZN7S1292C43v53Ev");}
void  S1292C4 ::v54(){vfunc_called(this, "_ZN7S1292C43v54Ev");}
void  S1292C4 ::v55(){vfunc_called(this, "_ZN7S1292C43v55Ev");}
void  S1292C4 ::v56(){vfunc_called(this, "_ZN7S1292C43v56Ev");}
void  S1292C4 ::v57(){vfunc_called(this, "_ZN7S1292C43v57Ev");}
void  S1292C4 ::v58(){vfunc_called(this, "_ZN7S1292C43v58Ev");}
void  S1292C4 ::v59(){vfunc_called(this, "_ZN7S1292C43v59Ev");}
void  S1292C4 ::v60(){vfunc_called(this, "_ZN7S1292C43v60Ev");}
void  S1292C4 ::v61(){vfunc_called(this, "_ZN7S1292C43v61Ev");}
void  S1292C4 ::v62(){vfunc_called(this, "_ZN7S1292C43v62Ev");}
void  S1292C4 ::v63(){vfunc_called(this, "_ZN7S1292C43v63Ev");}
void  S1292C4 ::v64(){vfunc_called(this, "_ZN7S1292C43v64Ev");}
void  S1292C4 ::v65(){vfunc_called(this, "_ZN7S1292C43v65Ev");}
void  S1292C4 ::v66(){vfunc_called(this, "_ZN7S1292C43v66Ev");}
void  S1292C4 ::v67(){vfunc_called(this, "_ZN7S1292C43v67Ev");}
void  S1292C4 ::v68(){vfunc_called(this, "_ZN7S1292C43v68Ev");}
void  S1292C4 ::v69(){vfunc_called(this, "_ZN7S1292C43v69Ev");}
void  S1292C4 ::v70(){vfunc_called(this, "_ZN7S1292C43v70Ev");}
void  S1292C4 ::v71(){vfunc_called(this, "_ZN7S1292C43v71Ev");}
void  S1292C4 ::v72(){vfunc_called(this, "_ZN7S1292C43v72Ev");}
void  S1292C4 ::v73(){vfunc_called(this, "_ZN7S1292C43v73Ev");}
S1292C4 ::S1292C4(){ note_ctor("S1292C4", this);} // tgen

static void Test_S1292C4()
{
  extern Class_Descriptor cd_S1292C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S1292C4, buf);
    S1292C4 *dp, &lv = *(dp=new (buf) S1292C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S1292C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1292C4)");
    check_field_offset(lv, s1292c4f0, ABISELECT(8,4), "S1292C4.s1292c4f0");
    check_field_offset(lv, s1292c4f1, ABISELECT(16,8), "S1292C4.s1292c4f1");
    check_field_offset(lv, s1292c4f2, ABISELECT(24,16), "S1292C4.s1292c4f2");
    check_field_offset(lv, s1292c4f3, ABISELECT(56,32), "S1292C4.s1292c4f3");
    check_field_offset(lv, s1292c4f4, ABISELECT(64,40), "S1292C4.s1292c4f4");
    check_field_offset(lv, s1292c4f5, ABISELECT(72,44), "S1292C4.s1292c4f5");
    check_field_offset(lv, s1292c4f6, ABISELECT(80,52), "S1292C4.s1292c4f6");
    test_class_info(&lv, &cd_S1292C4);
    dp->~S1292C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1292C4(Test_S1292C4, "S1292C4", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN7S1292C4C1Ev();
extern void _ZN7S1292C4D1Ev();
Name_Map name_map_S1292C4[] = {
  NSPAIR(_ZN7S1292C4C1Ev),
  NSPAIR(_ZN7S1292C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S1292C4[];
extern void _ZN7S1292C4D1Ev();
extern void _ZN7S1292C4D0Ev();
extern void _ZN7S1292C43v10Ev();
extern void _ZN7S1292C43v11Ev();
extern void _ZN7S1292C43v12Ev();
extern void _ZN7S1292C43v13Ev();
extern void _ZN7S1292C43v14Ev();
extern void _ZN7S1292C43v15Ev();
extern void _ZN7S1292C43v16Ev();
extern void _ZN7S1292C43v17Ev();
extern void _ZN7S1292C43v18Ev();
extern void _ZN7S1292C43v19Ev();
extern void _ZN7S1292C43v20Ev();
extern void _ZN7S1292C43v21Ev();
extern void _ZN7S1292C43v22Ev();
extern void _ZN7S1292C43v23Ev();
extern void _ZN7S1292C43v24Ev();
extern void _ZN7S1292C43v25Ev();
extern void _ZN7S1292C43v26Ev();
extern void _ZN7S1292C43v27Ev();
extern void _ZN7S1292C43v28Ev();
extern void _ZN7S1292C43v29Ev();
extern void _ZN7S1292C43v30Ev();
extern void _ZN7S1292C43v31Ev();
extern void _ZN7S1292C43v32Ev();
extern void _ZN7S1292C43v33Ev();
extern void _ZN7S1292C43v34Ev();
extern void _ZN7S1292C43v35Ev();
extern void _ZN7S1292C43v36Ev();
extern void _ZN7S1292C43v37Ev();
extern void _ZN7S1292C43v38Ev();
extern void _ZN7S1292C43v39Ev();
extern void _ZN7S1292C43v40Ev();
extern void _ZN7S1292C43v41Ev();
extern void _ZN7S1292C43v42Ev();
extern void _ZN7S1292C43v43Ev();
extern void _ZN7S1292C43v44Ev();
extern void _ZN7S1292C43v45Ev();
extern void _ZN7S1292C43v46Ev();
extern void _ZN7S1292C43v47Ev();
extern void _ZN7S1292C43v48Ev();
extern void _ZN7S1292C43v49Ev();
extern void _ZN7S1292C43v50Ev();
extern void _ZN7S1292C43v51Ev();
extern void _ZN7S1292C43v52Ev();
extern void _ZN7S1292C43v53Ev();
extern void _ZN7S1292C43v54Ev();
extern void _ZN7S1292C43v55Ev();
extern void _ZN7S1292C43v56Ev();
extern void _ZN7S1292C43v57Ev();
extern void _ZN7S1292C43v58Ev();
extern void _ZN7S1292C43v59Ev();
extern void _ZN7S1292C43v60Ev();
extern void _ZN7S1292C43v61Ev();
extern void _ZN7S1292C43v62Ev();
extern void _ZN7S1292C43v63Ev();
extern void _ZN7S1292C43v64Ev();
extern void _ZN7S1292C43v65Ev();
extern void _ZN7S1292C43v66Ev();
extern void _ZN7S1292C43v67Ev();
extern void _ZN7S1292C43v68Ev();
extern void _ZN7S1292C43v69Ev();
extern void _ZN7S1292C43v70Ev();
extern void _ZN7S1292C43v71Ev();
extern void _ZN7S1292C43v72Ev();
extern void _ZN7S1292C43v73Ev();
static  VTBL_ENTRY vtc_S1292C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1292C4[0]),
  (VTBL_ENTRY)&_ZN7S1292C4D1Ev,
  (VTBL_ENTRY)&_ZN7S1292C4D0Ev,
  (VTBL_ENTRY)&_ZN7S1292C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1292C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1292C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1292C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1292C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1292C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1292C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1292C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1292C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1292C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1292C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1292C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1292C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1292C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1292C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1292C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1292C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1292C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1292C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1292C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1292C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1292C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1292C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1292C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1292C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1292C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1292C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1292C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1292C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1292C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1292C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1292C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1292C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1292C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1292C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1292C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1292C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1292C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1292C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1292C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1292C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1292C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1292C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1292C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1292C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1292C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1292C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1292C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1292C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1292C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1292C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1292C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1292C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1292C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1292C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1292C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1292C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1292C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1292C43v68Ev,
  (VTBL_ENTRY)&_ZN7S1292C43v69Ev,
  (VTBL_ENTRY)&_ZN7S1292C43v70Ev,
  (VTBL_ENTRY)&_ZN7S1292C43v71Ev,
  (VTBL_ENTRY)&_ZN7S1292C43v72Ev,
  (VTBL_ENTRY)&_ZN7S1292C43v73Ev,
};
extern VTBL_ENTRY _ZTI7S1292C4[];
extern  VTBL_ENTRY _ZTV7S1292C4[];
Class_Descriptor cd_S1292C4 = {  "S1292C4", // class name
  0,0,//no base classes
  &(vtc_S1292C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI7S1292C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S1292C4),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  S1292C3  : S1292C4 {
  unsigned int s1292c3f0:1;
  unsigned int s1292c3f1:1;
  unsigned int s1292c3f2:1;
  unsigned int s1292c3f3:1;
  unsigned int s1292c3f4:1;
  unsigned int s1292c3f5:1;
  unsigned int s1292c3f6:1;
  ::S3625C32 s1292c3f7;
  virtual  ~S1292C3(); // _ZN7S1292C3D1Ev
  virtual void  v74(); // _ZN7S1292C33v74Ev
  virtual void  v75(); // _ZN7S1292C33v75Ev
  virtual void  v76(); // _ZN7S1292C33v76Ev
  virtual void  v77(); // _ZN7S1292C33v77Ev
  virtual void  v78(); // _ZN7S1292C33v78Ev
  virtual void  v79(); // _ZN7S1292C33v79Ev
  virtual void  v80(); // _ZN7S1292C33v80Ev
  virtual void  v81(); // _ZN7S1292C33v81Ev
  virtual void  v82(); // _ZN7S1292C33v82Ev
  virtual void  v83(); // _ZN7S1292C33v83Ev
  virtual void  v84(); // _ZN7S1292C33v84Ev
  virtual void  v85(); // _ZN7S1292C33v85Ev
  virtual void  v86(); // _ZN7S1292C33v86Ev
  virtual void  v87(); // _ZN7S1292C33v87Ev
  virtual void  v88(); // _ZN7S1292C33v88Ev
  virtual void  v89(); // _ZN7S1292C33v89Ev
  virtual void  v90(); // _ZN7S1292C33v90Ev
  virtual void  v91(); // _ZN7S1292C33v91Ev
  virtual void  v92(); // _ZN7S1292C33v92Ev
  virtual void  v93(); // _ZN7S1292C33v93Ev
  S1292C3(); // tgen
};
//SIG(-1 S1292C3) C1{ BC2{ 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 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 Fi FL Fp[4] Fi[2] Fp FC3{ m Fi[2]} Fp[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 FC4{ m}}


 S1292C3 ::~S1292C3(){ note_dtor("S1292C3", this);}
void  S1292C3 ::v74(){vfunc_called(this, "_ZN7S1292C33v74Ev");}
void  S1292C3 ::v75(){vfunc_called(this, "_ZN7S1292C33v75Ev");}
void  S1292C3 ::v76(){vfunc_called(this, "_ZN7S1292C33v76Ev");}
void  S1292C3 ::v77(){vfunc_called(this, "_ZN7S1292C33v77Ev");}
void  S1292C3 ::v78(){vfunc_called(this, "_ZN7S1292C33v78Ev");}
void  S1292C3 ::v79(){vfunc_called(this, "_ZN7S1292C33v79Ev");}
void  S1292C3 ::v80(){vfunc_called(this, "_ZN7S1292C33v80Ev");}
void  S1292C3 ::v81(){vfunc_called(this, "_ZN7S1292C33v81Ev");}
void  S1292C3 ::v82(){vfunc_called(this, "_ZN7S1292C33v82Ev");}
void  S1292C3 ::v83(){vfunc_called(this, "_ZN7S1292C33v83Ev");}
void  S1292C3 ::v84(){vfunc_called(this, "_ZN7S1292C33v84Ev");}
void  S1292C3 ::v85(){vfunc_called(this, "_ZN7S1292C33v85Ev");}
void  S1292C3 ::v86(){vfunc_called(this, "_ZN7S1292C33v86Ev");}
void  S1292C3 ::v87(){vfunc_called(this, "_ZN7S1292C33v87Ev");}
void  S1292C3 ::v88(){vfunc_called(this, "_ZN7S1292C33v88Ev");}
void  S1292C3 ::v89(){vfunc_called(this, "_ZN7S1292C33v89Ev");}
void  S1292C3 ::v90(){vfunc_called(this, "_ZN7S1292C33v90Ev");}
void  S1292C3 ::v91(){vfunc_called(this, "_ZN7S1292C33v91Ev");}
void  S1292C3 ::v92(){vfunc_called(this, "_ZN7S1292C33v92Ev");}
void  S1292C3 ::v93(){vfunc_called(this, "_ZN7S1292C33v93Ev");}
S1292C3 ::S1292C3(){ note_ctor("S1292C3", this);} // tgen

static void Test_S1292C3()
{
  extern Class_Descriptor cd_S1292C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(14,17)];
    init_test(&cd_S1292C3, buf);
    S1292C3 *dp, &lv = *(dp=new (buf) S1292C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(104,64), "sizeof(S1292C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1292C3)");
    check_base_class_offset(lv, (S1292C4*), 0, "S1292C3");
    set_bf_and_test(lv, s1292c3f0, ABISELECT(96,60), 0, 1, 1, "S1292C3");
    set_bf_and_test(lv, s1292c3f1, ABISELECT(96,60), 1, 1, 1, "S1292C3");
    set_bf_and_test(lv, s1292c3f2, ABISELECT(96,60), 2, 1, 1, "S1292C3");
    set_bf_and_test(lv, s1292c3f3, ABISELECT(96,60), 3, 1, 1, "S1292C3");
    set_bf_and_test(lv, s1292c3f4, ABISELECT(96,60), 4, 1, 1, "S1292C3");
    set_bf_and_test(lv, s1292c3f5, ABISELECT(96,60), 5, 1, 1, "S1292C3");
    set_bf_and_test(lv, s1292c3f6, ABISELECT(96,60), 6, 1, 1, "S1292C3");
    check_field_offset(lv, s1292c3f7, ABISELECT(97,61), "S1292C3.s1292c3f7");
    test_class_info(&lv, &cd_S1292C3);
    dp->~S1292C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1292C3(Test_S1292C3, "S1292C3", ABISELECT(104,64));

#else // __cplusplus

extern void _ZN7S1292C3C1Ev();
extern void _ZN7S1292C3D1Ev();
Name_Map name_map_S1292C3[] = {
  NSPAIR(_ZN7S1292C3C1Ev),
  NSPAIR(_ZN7S1292C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1292C4;
extern VTBL_ENTRY _ZTI7S1292C4[];
extern  VTBL_ENTRY _ZTV7S1292C4[];
static Base_Class bases_S1292C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1292C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI7S1292C3[];
extern void _ZN7S1292C3D1Ev();
extern void _ZN7S1292C3D0Ev();
extern void _ZN7S1292C43v10Ev();
extern void _ZN7S1292C43v11Ev();
extern void _ZN7S1292C43v12Ev();
extern void _ZN7S1292C43v13Ev();
extern void _ZN7S1292C43v14Ev();
extern void _ZN7S1292C43v15Ev();
extern void _ZN7S1292C43v16Ev();
extern void _ZN7S1292C43v17Ev();
extern void _ZN7S1292C43v18Ev();
extern void _ZN7S1292C43v19Ev();
extern void _ZN7S1292C43v20Ev();
extern void _ZN7S1292C43v21Ev();
extern void _ZN7S1292C43v22Ev();
extern void _ZN7S1292C43v23Ev();
extern void _ZN7S1292C43v24Ev();
extern void _ZN7S1292C43v25Ev();
extern void _ZN7S1292C43v26Ev();
extern void _ZN7S1292C43v27Ev();
extern void _ZN7S1292C43v28Ev();
extern void _ZN7S1292C43v29Ev();
extern void _ZN7S1292C43v30Ev();
extern void _ZN7S1292C43v31Ev();
extern void _ZN7S1292C43v32Ev();
extern void _ZN7S1292C43v33Ev();
extern void _ZN7S1292C43v34Ev();
extern void _ZN7S1292C43v35Ev();
extern void _ZN7S1292C43v36Ev();
extern void _ZN7S1292C43v37Ev();
extern void _ZN7S1292C43v38Ev();
extern void _ZN7S1292C43v39Ev();
extern void _ZN7S1292C43v40Ev();
extern void _ZN7S1292C43v41Ev();
extern void _ZN7S1292C43v42Ev();
extern void _ZN7S1292C43v43Ev();
extern void _ZN7S1292C43v44Ev();
extern void _ZN7S1292C43v45Ev();
extern void _ZN7S1292C43v46Ev();
extern void _ZN7S1292C43v47Ev();
extern void _ZN7S1292C43v48Ev();
extern void _ZN7S1292C43v49Ev();
extern void _ZN7S1292C43v50Ev();
extern void _ZN7S1292C43v51Ev();
extern void _ZN7S1292C43v52Ev();
extern void _ZN7S1292C43v53Ev();
extern void _ZN7S1292C43v54Ev();
extern void _ZN7S1292C43v55Ev();
extern void _ZN7S1292C43v56Ev();
extern void _ZN7S1292C43v57Ev();
extern void _ZN7S1292C43v58Ev();
extern void _ZN7S1292C43v59Ev();
extern void _ZN7S1292C43v60Ev();
extern void _ZN7S1292C43v61Ev();
extern void _ZN7S1292C43v62Ev();
extern void _ZN7S1292C43v63Ev();
extern void _ZN7S1292C43v64Ev();
extern void _ZN7S1292C43v65Ev();
extern void _ZN7S1292C43v66Ev();
extern void _ZN7S1292C43v67Ev();
extern void _ZN7S1292C43v68Ev();
extern void _ZN7S1292C43v69Ev();
extern void _ZN7S1292C43v70Ev();
extern void _ZN7S1292C43v71Ev();
extern void _ZN7S1292C43v72Ev();
extern void _ZN7S1292C43v73Ev();
extern void _ZN7S1292C33v74Ev();
extern void _ZN7S1292C33v75Ev();
extern void _ZN7S1292C33v76Ev();
extern void _ZN7S1292C33v77Ev();
extern void _ZN7S1292C33v78Ev();
extern void _ZN7S1292C33v79Ev();
extern void _ZN7S1292C33v80Ev();
extern void _ZN7S1292C33v81Ev();
extern void _ZN7S1292C33v82Ev();
extern void _ZN7S1292C33v83Ev();
extern void _ZN7S1292C33v84Ev();
extern void _ZN7S1292C33v85Ev();
extern void _ZN7S1292C33v86Ev();
extern void _ZN7S1292C33v87Ev();
extern void _ZN7S1292C33v88Ev();
extern void _ZN7S1292C33v89Ev();
extern void _ZN7S1292C33v90Ev();
extern void _ZN7S1292C33v91Ev();
extern void _ZN7S1292C33v92Ev();
extern void _ZN7S1292C33v93Ev();
static  VTBL_ENTRY vtc_S1292C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1292C3[0]),
  (VTBL_ENTRY)&_ZN7S1292C3D1Ev,
  (VTBL_ENTRY)&_ZN7S1292C3D0Ev,
  (VTBL_ENTRY)&_ZN7S1292C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1292C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1292C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1292C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1292C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1292C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1292C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1292C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1292C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1292C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1292C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1292C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1292C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1292C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1292C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1292C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1292C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1292C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1292C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1292C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1292C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1292C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1292C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1292C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1292C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1292C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1292C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1292C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1292C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1292C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1292C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1292C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1292C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1292C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1292C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1292C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1292C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1292C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1292C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1292C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1292C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1292C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1292C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1292C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1292C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1292C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1292C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1292C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1292C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1292C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1292C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1292C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1292C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1292C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1292C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1292C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1292C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1292C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1292C43v68Ev,
  (VTBL_ENTRY)&_ZN7S1292C43v69Ev,
  (VTBL_ENTRY)&_ZN7S1292C43v70Ev,
  (VTBL_ENTRY)&_ZN7S1292C43v71Ev,
  (VTBL_ENTRY)&_ZN7S1292C43v72Ev,
  (VTBL_ENTRY)&_ZN7S1292C43v73Ev,
  (VTBL_ENTRY)&_ZN7S1292C33v74Ev,
  (VTBL_ENTRY)&_ZN7S1292C33v75Ev,
  (VTBL_ENTRY)&_ZN7S1292C33v76Ev,
  (VTBL_ENTRY)&_ZN7S1292C33v77Ev,
  (VTBL_ENTRY)&_ZN7S1292C33v78Ev,
  (VTBL_ENTRY)&_ZN7S1292C33v79Ev,
  (VTBL_ENTRY)&_ZN7S1292C33v80Ev,
  (VTBL_ENTRY)&_ZN7S1292C33v81Ev,
  (VTBL_ENTRY)&_ZN7S1292C33v82Ev,
  (VTBL_ENTRY)&_ZN7S1292C33v83Ev,
  (VTBL_ENTRY)&_ZN7S1292C33v84Ev,
  (VTBL_ENTRY)&_ZN7S1292C33v85Ev,
  (VTBL_ENTRY)&_ZN7S1292C33v86Ev,
  (VTBL_ENTRY)&_ZN7S1292C33v87Ev,
  (VTBL_ENTRY)&_ZN7S1292C33v88Ev,
  (VTBL_ENTRY)&_ZN7S1292C33v89Ev,
  (VTBL_ENTRY)&_ZN7S1292C33v90Ev,
  (VTBL_ENTRY)&_ZN7S1292C33v91Ev,
  (VTBL_ENTRY)&_ZN7S1292C33v92Ev,
  (VTBL_ENTRY)&_ZN7S1292C33v93Ev,
};
extern VTBL_ENTRY _ZTI7S1292C3[];
extern  VTBL_ENTRY _ZTV7S1292C3[];
Class_Descriptor cd_S1292C3 = {  "S1292C3", // class name
  bases_S1292C3, 1,
  &(vtc_S1292C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(104,64), // object size
  NSPAIRA(_ZTI7S1292C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1292C3),88, //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  S1292C2  : S1292C3 {
  virtual  ~S1292C2(); // _ZN7S1292C2D1Ev
  virtual void  v94(); // _ZN7S1292C23v94Ev
  virtual void  v95(); // _ZN7S1292C23v95Ev
  virtual void  v96(); // _ZN7S1292C23v96Ev
  S1292C2(); // tgen
};
//SIG(-1 S1292C2) C1{ BC2{ BC3{ vd 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 Fi FL Fp[4] Fi[2] Fp FC4{ m Fi[2]} Fp[2]} vd v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 FC5{ m}} vd v1 v2 v3}


 S1292C2 ::~S1292C2(){ note_dtor("S1292C2", this);}
void  S1292C2 ::v94(){vfunc_called(this, "_ZN7S1292C23v94Ev");}
void  S1292C2 ::v95(){vfunc_called(this, "_ZN7S1292C23v95Ev");}
void  S1292C2 ::v96(){vfunc_called(this, "_ZN7S1292C23v96Ev");}
S1292C2 ::S1292C2(){ note_ctor("S1292C2", this);} // tgen

static void Test_S1292C2()
{
  extern Class_Descriptor cd_S1292C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(14,17)];
    init_test(&cd_S1292C2, buf);
    S1292C2 *dp, &lv = *(dp=new (buf) S1292C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(104,64), "sizeof(S1292C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1292C2)");
    check_base_class_offset(lv, (S1292C4*)(S1292C3*), 0, "S1292C2");
    check_base_class_offset(lv, (S1292C3*), 0, "S1292C2");
    test_class_info(&lv, &cd_S1292C2);
    dp->~S1292C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1292C2(Test_S1292C2, "S1292C2", ABISELECT(104,64));

#else // __cplusplus

extern void _ZN7S1292C2C1Ev();
extern void _ZN7S1292C2D1Ev();
Name_Map name_map_S1292C2[] = {
  NSPAIR(_ZN7S1292C2C1Ev),
  NSPAIR(_ZN7S1292C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1292C4;
extern VTBL_ENTRY _ZTI7S1292C4[];
extern  VTBL_ENTRY _ZTV7S1292C4[];
extern Class_Descriptor cd_S1292C3;
extern VTBL_ENTRY _ZTI7S1292C3[];
extern  VTBL_ENTRY _ZTV7S1292C3[];
static Base_Class bases_S1292C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1292C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S1292C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S1292C2[];
extern void _ZN7S1292C2D1Ev();
extern void _ZN7S1292C2D0Ev();
extern void _ZN7S1292C43v10Ev();
extern void _ZN7S1292C43v11Ev();
extern void _ZN7S1292C43v12Ev();
extern void _ZN7S1292C43v13Ev();
extern void _ZN7S1292C43v14Ev();
extern void _ZN7S1292C43v15Ev();
extern void _ZN7S1292C43v16Ev();
extern void _ZN7S1292C43v17Ev();
extern void _ZN7S1292C43v18Ev();
extern void _ZN7S1292C43v19Ev();
extern void _ZN7S1292C43v20Ev();
extern void _ZN7S1292C43v21Ev();
extern void _ZN7S1292C43v22Ev();
extern void _ZN7S1292C43v23Ev();
extern void _ZN7S1292C43v24Ev();
extern void _ZN7S1292C43v25Ev();
extern void _ZN7S1292C43v26Ev();
extern void _ZN7S1292C43v27Ev();
extern void _ZN7S1292C43v28Ev();
extern void _ZN7S1292C43v29Ev();
extern void _ZN7S1292C43v30Ev();
extern void _ZN7S1292C43v31Ev();
extern void _ZN7S1292C43v32Ev();
extern void _ZN7S1292C43v33Ev();
extern void _ZN7S1292C43v34Ev();
extern void _ZN7S1292C43v35Ev();
extern void _ZN7S1292C43v36Ev();
extern void _ZN7S1292C43v37Ev();
extern void _ZN7S1292C43v38Ev();
extern void _ZN7S1292C43v39Ev();
extern void _ZN7S1292C43v40Ev();
extern void _ZN7S1292C43v41Ev();
extern void _ZN7S1292C43v42Ev();
extern void _ZN7S1292C43v43Ev();
extern void _ZN7S1292C43v44Ev();
extern void _ZN7S1292C43v45Ev();
extern void _ZN7S1292C43v46Ev();
extern void _ZN7S1292C43v47Ev();
extern void _ZN7S1292C43v48Ev();
extern void _ZN7S1292C43v49Ev();
extern void _ZN7S1292C43v50Ev();
extern void _ZN7S1292C43v51Ev();
extern void _ZN7S1292C43v52Ev();
extern void _ZN7S1292C43v53Ev();
extern void _ZN7S1292C43v54Ev();
extern void _ZN7S1292C43v55Ev();
extern void _ZN7S1292C43v56Ev();
extern void _ZN7S1292C43v57Ev();
extern void _ZN7S1292C43v58Ev();
extern void _ZN7S1292C43v59Ev();
extern void _ZN7S1292C43v60Ev();
extern void _ZN7S1292C43v61Ev();
extern void _ZN7S1292C43v62Ev();
extern void _ZN7S1292C43v63Ev();
extern void _ZN7S1292C43v64Ev();
extern void _ZN7S1292C43v65Ev();
extern void _ZN7S1292C43v66Ev();
extern void _ZN7S1292C43v67Ev();
extern void _ZN7S1292C43v68Ev();
extern void _ZN7S1292C43v69Ev();
extern void _ZN7S1292C43v70Ev();
extern void _ZN7S1292C43v71Ev();
extern void _ZN7S1292C43v72Ev();
extern void _ZN7S1292C43v73Ev();
extern void _ZN7S1292C33v74Ev();
extern void _ZN7S1292C33v75Ev();
extern void _ZN7S1292C33v76Ev();
extern void _ZN7S1292C33v77Ev();
extern void _ZN7S1292C33v78Ev();
extern void _ZN7S1292C33v79Ev();
extern void _ZN7S1292C33v80Ev();
extern void _ZN7S1292C33v81Ev();
extern void _ZN7S1292C33v82Ev();
extern void _ZN7S1292C33v83Ev();
extern void _ZN7S1292C33v84Ev();
extern void _ZN7S1292C33v85Ev();
extern void _ZN7S1292C33v86Ev();
extern void _ZN7S1292C33v87Ev();
extern void _ZN7S1292C33v88Ev();
extern void _ZN7S1292C33v89Ev();
extern void _ZN7S1292C33v90Ev();
extern void _ZN7S1292C33v91Ev();
extern void _ZN7S1292C33v92Ev();
extern void _ZN7S1292C33v93Ev();
extern void _ZN7S1292C23v94Ev();
extern void _ZN7S1292C23v95Ev();
extern void _ZN7S1292C23v96Ev();
static  VTBL_ENTRY vtc_S1292C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1292C2[0]),
  (VTBL_ENTRY)&_ZN7S1292C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1292C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1292C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1292C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1292C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1292C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1292C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1292C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1292C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1292C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1292C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1292C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1292C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1292C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1292C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1292C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1292C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1292C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1292C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1292C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1292C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1292C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1292C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1292C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1292C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1292C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1292C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1292C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1292C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1292C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1292C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1292C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1292C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1292C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1292C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1292C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1292C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1292C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1292C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1292C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1292C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1292C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1292C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1292C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1292C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1292C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1292C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1292C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1292C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1292C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1292C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1292C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1292C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1292C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1292C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1292C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1292C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1292C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1292C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1292C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1292C43v68Ev,
  (VTBL_ENTRY)&_ZN7S1292C43v69Ev,
  (VTBL_ENTRY)&_ZN7S1292C43v70Ev,
  (VTBL_ENTRY)&_ZN7S1292C43v71Ev,
  (VTBL_ENTRY)&_ZN7S1292C43v72Ev,
  (VTBL_ENTRY)&_ZN7S1292C43v73Ev,
  (VTBL_ENTRY)&_ZN7S1292C33v74Ev,
  (VTBL_ENTRY)&_ZN7S1292C33v75Ev,
  (VTBL_ENTRY)&_ZN7S1292C33v76Ev,
  (VTBL_ENTRY)&_ZN7S1292C33v77Ev,
  (VTBL_ENTRY)&_ZN7S1292C33v78Ev,
  (VTBL_ENTRY)&_ZN7S1292C33v79Ev,
  (VTBL_ENTRY)&_ZN7S1292C33v80Ev,
  (VTBL_ENTRY)&_ZN7S1292C33v81Ev,
  (VTBL_ENTRY)&_ZN7S1292C33v82Ev,
  (VTBL_ENTRY)&_ZN7S1292C33v83Ev,
  (VTBL_ENTRY)&_ZN7S1292C33v84Ev,
  (VTBL_ENTRY)&_ZN7S1292C33v85Ev,
  (VTBL_ENTRY)&_ZN7S1292C33v86Ev,
  (VTBL_ENTRY)&_ZN7S1292C33v87Ev,
  (VTBL_ENTRY)&_ZN7S1292C33v88Ev,
  (VTBL_ENTRY)&_ZN7S1292C33v89Ev,
  (VTBL_ENTRY)&_ZN7S1292C33v90Ev,
  (VTBL_ENTRY)&_ZN7S1292C33v91Ev,
  (VTBL_ENTRY)&_ZN7S1292C33v92Ev,
  (VTBL_ENTRY)&_ZN7S1292C33v93Ev,
  (VTBL_ENTRY)&_ZN7S1292C23v94Ev,
  (VTBL_ENTRY)&_ZN7S1292C23v95Ev,
  (VTBL_ENTRY)&_ZN7S1292C23v96Ev,
};
extern VTBL_ENTRY _ZTI7S1292C2[];
extern  VTBL_ENTRY _ZTV7S1292C2[];
Class_Descriptor cd_S1292C2 = {  "S1292C2", // class name
  bases_S1292C2, 2,
  &(vtc_S1292C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(104,64), // object size
  NSPAIRA(_ZTI7S1292C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1292C2),91, //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  S1292C12  : S1289C11_nt {
  void *s1292c12f0;
};
//SIG(-1 S1292C12) C1{ BC2{ m Fc[4] FC3{ BC4{ BC5{ m Fp Fi[2]}}} Fi[2]} Fp}



static void Test_S1292C12()
{
  extern Class_Descriptor cd_S1292C12;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S1292C12, buf);
    S1292C12 &lv = *(new (buf) S1292C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S1292C12)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1292C12)");
    check_base_class_offset(lv, (S1289C11_nt*), 0, "S1292C12");
    check_field_offset(lv, s1292c12f0, ABISELECT(32,24), "S1292C12.s1292c12f0");
    test_class_info(&lv, &cd_S1292C12);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1292C12(Test_S1292C12, "S1292C12", ABISELECT(40,28));

#else // __cplusplus

extern Class_Descriptor cd_S1289C11_nt;
static Base_Class bases_S1292C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1289C11_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_S1292C12 = {  "S1292C12", // class name
  bases_S1292C12, 1,
  0, // no vftv
  0, //no vtt
  ABISELECT(40,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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1292C1  : S1292C2 {
  unsigned int s1292c1f0:1;
  unsigned int s1292c1f1:1;
  unsigned int s1292c1f2:1;
  unsigned int s1292c1f3:1;
  unsigned int s1292c1f4:1;
  unsigned int s1292c1f5:1;
  unsigned int s1292c1f6:1;
  unsigned int s1292c1f7:1;
  int s1292c1f8[2];
  ::S1289C10_nt s1292c1f9;
  ::S1292C12 s1292c1f10;
  ::S1289C10_nt s1292c1f11;
  int s1292c1f12[3];
  ::S1292C12 s1292c1f13;
  int s1292c1f14[2];
  ::S1292C12 s1292c1f15;
  virtual  ~S1292C1(); // _ZN7S1292C1D1Ev
  virtual void  v1(); // _ZN7S1292C12v1Ev
  virtual void  v2(); // _ZN7S1292C12v2Ev
  virtual void  v3(); // _ZN7S1292C12v3Ev
  virtual void  v4(); // _ZN7S1292C12v4Ev
  virtual void  v5(); // _ZN7S1292C12v5Ev
  virtual void  v6(); // _ZN7S1292C12v6Ev
  virtual void  v7(); // _ZN7S1292C12v7Ev
  virtual void  v8(); // _ZN7S1292C12v8Ev
  virtual void  v9(); // _ZN7S1292C12v9Ev
  S1292C1(); // tgen
};
//SIG(1 S1292C1) C1{ BC2{ BC3{ BC4{ vd 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 Fi FL Fp[4] Fi[2] Fp FC5{ m Fi[2]} Fp[2]} vd v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 v91 v92 v93 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 FC6{ m}} vd v94 v95 v96} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2] FC7{ BC8{ m Fc[4] FC9{ BC10{ BC11{ m Fp Fi[2]}}} Fi[2]} Fp} FC12{ BC8 Fp} FC7 Fi[3] FC12 Fi[2] FC12}


 S1292C1 ::~S1292C1(){ note_dtor("S1292C1", this);}
void  S1292C1 ::v1(){vfunc_called(this, "_ZN7S1292C12v1Ev");}
void  S1292C1 ::v2(){vfunc_called(this, "_ZN7S1292C12v2Ev");}
void  S1292C1 ::v3(){vfunc_called(this, "_ZN7S1292C12v3Ev");}
void  S1292C1 ::v4(){vfunc_called(this, "_ZN7S1292C12v4Ev");}
void  S1292C1 ::v5(){vfunc_called(this, "_ZN7S1292C12v5Ev");}
void  S1292C1 ::v6(){vfunc_called(this, "_ZN7S1292C12v6Ev");}
void  S1292C1 ::v7(){vfunc_called(this, "_ZN7S1292C12v7Ev");}
void  S1292C1 ::v8(){vfunc_called(this, "_ZN7S1292C12v8Ev");}
void  S1292C1 ::v9(){vfunc_called(this, "_ZN7S1292C12v9Ev");}
S1292C1 ::S1292C1(){ note_ctor("S1292C1", this);} // tgen

static void Test_S1292C1()
{
  extern Class_Descriptor cd_S1292C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(43,59)];
    init_test(&cd_S1292C1, buf);
    S1292C1 *dp, &lv = *(dp=new (buf) S1292C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(336,232), "sizeof(S1292C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1292C1)");
    check_base_class_offset(lv, (S1292C4*)(S1292C3*)(S1292C2*), 0, "S1292C1");
    check_base_class_offset(lv, (S1292C3*)(S1292C2*), 0, "S1292C1");
    check_base_class_offset(lv, (S1292C2*), 0, "S1292C1");
    set_bf_and_test(lv, s1292c1f0, ABISELECT(98,62), 0, 1, 1, "S1292C1");
    set_bf_and_test(lv, s1292c1f1, ABISELECT(98,62), 1, 1, 1, "S1292C1");
    set_bf_and_test(lv, s1292c1f2, ABISELECT(98,62), 2, 1, 1, "S1292C1");
    set_bf_and_test(lv, s1292c1f3, ABISELECT(98,62), 3, 1, 1, "S1292C1");
    set_bf_and_test(lv, s1292c1f4, ABISELECT(98,62), 4, 1, 1, "S1292C1");
    set_bf_and_test(lv, s1292c1f5, ABISELECT(98,62), 5, 1, 1, "S1292C1");
    set_bf_and_test(lv, s1292c1f6, ABISELECT(98,62), 6, 1, 1, "S1292C1");
    set_bf_and_test(lv, s1292c1f7, ABISELECT(98,62), 7, 1, 1, "S1292C1");
    check_field_offset(lv, s1292c1f8, ABISELECT(100,64), "S1292C1.s1292c1f8");
    check_field_offset(lv, s1292c1f9, ABISELECT(112,72), "S1292C1.s1292c1f9");
    check_field_offset(lv, s1292c1f10, ABISELECT(152,100), "S1292C1.s1292c1f10");
    check_field_offset(lv, s1292c1f11, ABISELECT(192,128), "S1292C1.s1292c1f11");
    check_field_offset(lv, s1292c1f12, ABISELECT(232,156), "S1292C1.s1292c1f12");
    check_field_offset(lv, s1292c1f13, ABISELECT(248,168), "S1292C1.s1292c1f13");
    check_field_offset(lv, s1292c1f14, ABISELECT(288,196), "S1292C1.s1292c1f14");
    check_field_offset(lv, s1292c1f15, ABISELECT(296,204), "S1292C1.s1292c1f15");
    test_class_info(&lv, &cd_S1292C1);
    dp->~S1292C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1292C1(Test_S1292C1, "S1292C1", ABISELECT(336,232));

#else // __cplusplus

extern void _ZN7S1292C1C1Ev();
extern void _ZN7S1292C1D1Ev();
Name_Map name_map_S1292C1[] = {
  NSPAIR(_ZN7S1292C1C1Ev),
  NSPAIR(_ZN7S1292C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1292C4;
extern VTBL_ENTRY _ZTI7S1292C4[];
extern  VTBL_ENTRY _ZTV7S1292C4[];
extern Class_Descriptor cd_S1292C3;
extern VTBL_ENTRY _ZTI7S1292C3[];
extern  VTBL_ENTRY _ZTV7S1292C3[];
extern Class_Descriptor cd_S1292C2;
extern VTBL_ENTRY _ZTI7S1292C2[];
extern  VTBL_ENTRY _ZTV7S1292C2[];
static Base_Class bases_S1292C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1292C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S1292C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S1292C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S1292C1[];
extern void _ZN7S1292C1D1Ev();
extern void _ZN7S1292C1D0Ev();
extern void _ZN7S1292C43v10Ev();
extern void _ZN7S1292C43v11Ev();
extern void _ZN7S1292C43v12Ev();
extern void _ZN7S1292C43v13Ev();
extern void _ZN7S1292C43v14Ev();
extern void _ZN7S1292C43v15Ev();
extern void _ZN7S1292C43v16Ev();
extern void _ZN7S1292C43v17Ev();
extern void _ZN7S1292C43v18Ev();
extern void _ZN7S1292C43v19Ev();
extern void _ZN7S1292C43v20Ev();
extern void _ZN7S1292C43v21Ev();
extern void _ZN7S1292C43v22Ev();
extern void _ZN7S1292C43v23Ev();
extern void _ZN7S1292C43v24Ev();
extern void _ZN7S1292C43v25Ev();
extern void _ZN7S1292C43v26Ev();
extern void _ZN7S1292C43v27Ev();
extern void _ZN7S1292C43v28Ev();
extern void _ZN7S1292C43v29Ev();
extern void _ZN7S1292C43v30Ev();
extern void _ZN7S1292C43v31Ev();
extern void _ZN7S1292C43v32Ev();
extern void _ZN7S1292C43v33Ev();
extern void _ZN7S1292C43v34Ev();
extern void _ZN7S1292C43v35Ev();
extern void _ZN7S1292C43v36Ev();
extern void _ZN7S1292C43v37Ev();
extern void _ZN7S1292C43v38Ev();
extern void _ZN7S1292C43v39Ev();
extern void _ZN7S1292C43v40Ev();
extern void _ZN7S1292C43v41Ev();
extern void _ZN7S1292C43v42Ev();
extern void _ZN7S1292C43v43Ev();
extern void _ZN7S1292C43v44Ev();
extern void _ZN7S1292C43v45Ev();
extern void _ZN7S1292C43v46Ev();
extern void _ZN7S1292C43v47Ev();
extern void _ZN7S1292C43v48Ev();
extern void _ZN7S1292C43v49Ev();
extern void _ZN7S1292C43v50Ev();
extern void _ZN7S1292C43v51Ev();
extern void _ZN7S1292C43v52Ev();
extern void _ZN7S1292C43v53Ev();
extern void _ZN7S1292C43v54Ev();
extern void _ZN7S1292C43v55Ev();
extern void _ZN7S1292C43v56Ev();
extern void _ZN7S1292C43v57Ev();
extern void _ZN7S1292C43v58Ev();
extern void _ZN7S1292C43v59Ev();
extern void _ZN7S1292C43v60Ev();
extern void _ZN7S1292C43v61Ev();
extern void _ZN7S1292C43v62Ev();
extern void _ZN7S1292C43v63Ev();
extern void _ZN7S1292C43v64Ev();
extern void _ZN7S1292C43v65Ev();
extern void _ZN7S1292C43v66Ev();
extern void _ZN7S1292C43v67Ev();
extern void _ZN7S1292C43v68Ev();
extern void _ZN7S1292C43v69Ev();
extern void _ZN7S1292C43v70Ev();
extern void _ZN7S1292C43v71Ev();
extern void _ZN7S1292C43v72Ev();
extern void _ZN7S1292C43v73Ev();
extern void _ZN7S1292C33v74Ev();
extern void _ZN7S1292C33v75Ev();
extern void _ZN7S1292C33v76Ev();
extern void _ZN7S1292C33v77Ev();
extern void _ZN7S1292C33v78Ev();
extern void _ZN7S1292C33v79Ev();
extern void _ZN7S1292C33v80Ev();
extern void _ZN7S1292C33v81Ev();
extern void _ZN7S1292C33v82Ev();
extern void _ZN7S1292C33v83Ev();
extern void _ZN7S1292C33v84Ev();
extern void _ZN7S1292C33v85Ev();
extern void _ZN7S1292C33v86Ev();
extern void _ZN7S1292C33v87Ev();
extern void _ZN7S1292C33v88Ev();
extern void _ZN7S1292C33v89Ev();
extern void _ZN7S1292C33v90Ev();
extern void _ZN7S1292C33v91Ev();
extern void _ZN7S1292C33v92Ev();
extern void _ZN7S1292C33v93Ev();
extern void _ZN7S1292C23v94Ev();
extern void _ZN7S1292C23v95Ev();
extern void _ZN7S1292C23v96Ev();
extern void _ZN7S1292C12v1Ev();
extern void _ZN7S1292C12v2Ev();
extern void _ZN7S1292C12v3Ev();
extern void _ZN7S1292C12v4Ev();
extern void _ZN7S1292C12v5Ev();
extern void _ZN7S1292C12v6Ev();
extern void _ZN7S1292C12v7Ev();
extern void _ZN7S1292C12v8Ev();
extern void _ZN7S1292C12v9Ev();
static  VTBL_ENTRY vtc_S1292C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1292C1[0]),
  (VTBL_ENTRY)&_ZN7S1292C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1292C1D0Ev,
  (VTBL_ENTRY)&_ZN7S1292C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1292C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1292C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1292C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1292C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1292C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1292C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1292C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1292C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1292C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1292C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1292C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1292C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1292C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1292C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1292C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1292C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1292C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1292C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1292C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1292C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1292C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1292C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1292C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1292C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1292C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1292C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1292C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1292C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1292C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1292C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1292C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1292C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1292C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1292C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1292C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1292C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1292C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1292C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1292C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1292C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1292C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1292C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1292C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1292C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1292C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1292C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1292C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1292C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1292C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1292C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1292C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1292C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1292C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1292C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1292C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1292C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1292C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1292C43v68Ev,
  (VTBL_ENTRY)&_ZN7S1292C43v69Ev,
  (VTBL_ENTRY)&_ZN7S1292C43v70Ev,
  (VTBL_ENTRY)&_ZN7S1292C43v71Ev,
  (VTBL_ENTRY)&_ZN7S1292C43v72Ev,
  (VTBL_ENTRY)&_ZN7S1292C43v73Ev,
  (VTBL_ENTRY)&_ZN7S1292C33v74Ev,
  (VTBL_ENTRY)&_ZN7S1292C33v75Ev,
  (VTBL_ENTRY)&_ZN7S1292C33v76Ev,
  (VTBL_ENTRY)&_ZN7S1292C33v77Ev,
  (VTBL_ENTRY)&_ZN7S1292C33v78Ev,
  (VTBL_ENTRY)&_ZN7S1292C33v79Ev,
  (VTBL_ENTRY)&_ZN7S1292C33v80Ev,
  (VTBL_ENTRY)&_ZN7S1292C33v81Ev,
  (VTBL_ENTRY)&_ZN7S1292C33v82Ev,
  (VTBL_ENTRY)&_ZN7S1292C33v83Ev,
  (VTBL_ENTRY)&_ZN7S1292C33v84Ev,
  (VTBL_ENTRY)&_ZN7S1292C33v85Ev,
  (VTBL_ENTRY)&_ZN7S1292C33v86Ev,
  (VTBL_ENTRY)&_ZN7S1292C33v87Ev,
  (VTBL_ENTRY)&_ZN7S1292C33v88Ev,
  (VTBL_ENTRY)&_ZN7S1292C33v89Ev,
  (VTBL_ENTRY)&_ZN7S1292C33v90Ev,
  (VTBL_ENTRY)&_ZN7S1292C33v91Ev,
  (VTBL_ENTRY)&_ZN7S1292C33v92Ev,
  (VTBL_ENTRY)&_ZN7S1292C33v93Ev,
  (VTBL_ENTRY)&_ZN7S1292C23v94Ev,
  (VTBL_ENTRY)&_ZN7S1292C23v95Ev,
  (VTBL_ENTRY)&_ZN7S1292C23v96Ev,
  (VTBL_ENTRY)&_ZN7S1292C12v1Ev,
  (VTBL_ENTRY)&_ZN7S1292C12v2Ev,
  (VTBL_ENTRY)&_ZN7S1292C12v3Ev,
  (VTBL_ENTRY)&_ZN7S1292C12v4Ev,
  (VTBL_ENTRY)&_ZN7S1292C12v5Ev,
  (VTBL_ENTRY)&_ZN7S1292C12v6Ev,
  (VTBL_ENTRY)&_ZN7S1292C12v7Ev,
  (VTBL_ENTRY)&_ZN7S1292C12v8Ev,
  (VTBL_ENTRY)&_ZN7S1292C12v9Ev,
};
extern VTBL_ENTRY _ZTI7S1292C1[];
extern  VTBL_ENTRY _ZTV7S1292C1[];
Class_Descriptor cd_S1292C1 = {  "S1292C1", // class name
  bases_S1292C1, 3,
  &(vtc_S1292C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(336,232), // object size
  NSPAIRA(_ZTI7S1292C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1292C1),100, //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  S1290C4  {
  int s1290c4f0;
  __tsi64 s1290c4f1;
  void *s1290c4f2[4];
  int s1290c4f3[2];
  void *s1290c4f4;
  ::S674C6_nt s1290c4f5;
  void *s1290c4f6[2];
  virtual  ~S1290C4(); // _ZN7S1290C4D1Ev
  virtual void  v10(); // _ZN7S1290C43v10Ev
  virtual void  v11(); // _ZN7S1290C43v11Ev
  virtual void  v12(); // _ZN7S1290C43v12Ev
  virtual void  v13(); // _ZN7S1290C43v13Ev
  virtual void  v14(); // _ZN7S1290C43v14Ev
  virtual void  v15(); // _ZN7S1290C43v15Ev
  virtual void  v16(); // _ZN7S1290C43v16Ev
  virtual void  v17(); // _ZN7S1290C43v17Ev
  virtual void  v18(); // _ZN7S1290C43v18Ev
  virtual void  v19(); // _ZN7S1290C43v19Ev
  virtual void  v20(); // _ZN7S1290C43v20Ev
  virtual void  v21(); // _ZN7S1290C43v21Ev
  virtual void  v22(); // _ZN7S1290C43v22Ev
  virtual void  v23(); // _ZN7S1290C43v23Ev
  virtual void  v24(); // _ZN7S1290C43v24Ev
  virtual void  v25(); // _ZN7S1290C43v25Ev
  virtual void  v26(); // _ZN7S1290C43v26Ev
  virtual void  v27(); // _ZN7S1290C43v27Ev
  virtual void  v28(); // _ZN7S1290C43v28Ev
  virtual void  v29(); // _ZN7S1290C43v29Ev
  virtual void  v30(); // _ZN7S1290C43v30Ev
  virtual void  v31(); // _ZN7S1290C43v31Ev
  virtual void  v32(); // _ZN7S1290C43v32Ev
  virtual void  v33(); // _ZN7S1290C43v33Ev
  virtual void  v34(); // _ZN7S1290C43v34Ev
  virtual void  v35(); // _ZN7S1290C43v35Ev
  virtual void  v36(); // _ZN7S1290C43v36Ev
  virtual void  v37(); // _ZN7S1290C43v37Ev
  virtual void  v38(); // _ZN7S1290C43v38Ev
  virtual void  v39(); // _ZN7S1290C43v39Ev
  virtual void  v40(); // _ZN7S1290C43v40Ev
  virtual void  v41(); // _ZN7S1290C43v41Ev
  virtual void  v42(); // _ZN7S1290C43v42Ev
  virtual void  v43(); // _ZN7S1290C43v43Ev
  virtual void  v44(); // _ZN7S1290C43v44Ev
  virtual void  v45(); // _ZN7S1290C43v45Ev
  virtual void  v46(); // _ZN7S1290C43v46Ev
  virtual void  v47(); // _ZN7S1290C43v47Ev
  virtual void  v48(); // _ZN7S1290C43v48Ev
  virtual void  v49(); // _ZN7S1290C43v49Ev
  virtual void  v50(); // _ZN7S1290C43v50Ev
  virtual void  v51(); // _ZN7S1290C43v51Ev
  virtual void  v52(); // _ZN7S1290C43v52Ev
  virtual void  v53(); // _ZN7S1290C43v53Ev
  virtual void  v54(); // _ZN7S1290C43v54Ev
  virtual void  v55(); // _ZN7S1290C43v55Ev
  virtual void  v56(); // _ZN7S1290C43v56Ev
  virtual void  v57(); // _ZN7S1290C43v57Ev
  virtual void  v58(); // _ZN7S1290C43v58Ev
  virtual void  v59(); // _ZN7S1290C43v59Ev
  virtual void  v60(); // _ZN7S1290C43v60Ev
  virtual void  v61(); // _ZN7S1290C43v61Ev
  virtual void  v62(); // _ZN7S1290C43v62Ev
  virtual void  v63(); // _ZN7S1290C43v63Ev
  virtual void  v64(); // _ZN7S1290C43v64Ev
  virtual void  v65(); // _ZN7S1290C43v65Ev
  virtual void  v66(); // _ZN7S1290C43v66Ev
  virtual void  v67(); // _ZN7S1290C43v67Ev
  virtual void  v68(); // _ZN7S1290C43v68Ev
  virtual void  v69(); // _ZN7S1290C43v69Ev
  virtual void  v70(); // _ZN7S1290C43v70Ev
  virtual void  v71(); // _ZN7S1290C43v71Ev
  virtual void  v72(); // _ZN7S1290C43v72Ev
  virtual void  v73(); // _ZN7S1290C43v73Ev
  S1290C4(); // tgen
};
//SIG(-1 S1290C4) 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]}


 S1290C4 ::~S1290C4(){ note_dtor("S1290C4", this);}
void  S1290C4 ::v10(){vfunc_called(this, "_ZN7S1290C43v10Ev");}
void  S1290C4 ::v11(){vfunc_called(this, "_ZN7S1290C43v11Ev");}
void  S1290C4 ::v12(){vfunc_called(this, "_ZN7S1290C43v12Ev");}
void  S1290C4 ::v13(){vfunc_called(this, "_ZN7S1290C43v13Ev");}
void  S1290C4 ::v14(){vfunc_called(this, "_ZN7S1290C43v14Ev");}
void  S1290C4 ::v15(){vfunc_called(this, "_ZN7S1290C43v15Ev");}
void  S1290C4 ::v16(){vfunc_called(this, "_ZN7S1290C43v16Ev");}
void  S1290C4 ::v17(){vfunc_called(this, "_ZN7S1290C43v17Ev");}
void  S1290C4 ::v18(){vfunc_called(this, "_ZN7S1290C43v18Ev");}
void  S1290C4 ::v19(){vfunc_called(this, "_ZN7S1290C43v19Ev");}
void  S1290C4 ::v20(){vfunc_called(this, "_ZN7S1290C43v20Ev");}
void  S1290C4 ::v21(){vfunc_called(this, "_ZN7S1290C43v21Ev");}
void  S1290C4 ::v22(){vfunc_called(this, "_ZN7S1290C43v22Ev");}
void  S1290C4 ::v23(){vfunc_called(this, "_ZN7S1290C43v23Ev");}
void  S1290C4 ::v24(){vfunc_called(this, "_ZN7S1290C43v24Ev");}
void  S1290C4 ::v25(){vfunc_called(this, "_ZN7S1290C43v25Ev");}
void  S1290C4 ::v26(){vfunc_called(this, "_ZN7S1290C43v26Ev");}
void  S1290C4 ::v27(){vfunc_called(this, "_ZN7S1290C43v27Ev");}
void  S1290C4 ::v28(){vfunc_called(this, "_ZN7S1290C43v28Ev");}
void  S1290C4 ::v29(){vfunc_called(this, "_ZN7S1290C43v29Ev");}
void  S1290C4 ::v30(){vfunc_called(this, "_ZN7S1290C43v30Ev");}
void  S1290C4 ::v31(){vfunc_called(this, "_ZN7S1290C43v31Ev");}
void  S1290C4 ::v32(){vfunc_called(this, "_ZN7S1290C43v32Ev");}
void  S1290C4 ::v33(){vfunc_called(this, "_ZN7S1290C43v33Ev");}
void  S1290C4 ::v34(){vfunc_called(this, "_ZN7S1290C43v34Ev");}
void  S1290C4 ::v35(){vfunc_called(this, "_ZN7S1290C43v35Ev");}
void  S1290C4 ::v36(){vfunc_called(this, "_ZN7S1290C43v36Ev");}
void  S1290C4 ::v37(){vfunc_called(this, "_ZN7S1290C43v37Ev");}
void  S1290C4 ::v38(){vfunc_called(this, "_ZN7S1290C43v38Ev");}
void  S1290C4 ::v39(){vfunc_called(this, "_ZN7S1290C43v39Ev");}
void  S1290C4 ::v40(){vfunc_called(this, "_ZN7S1290C43v40Ev");}
void  S1290C4 ::v41(){vfunc_called(this, "_ZN7S1290C43v41Ev");}
void  S1290C4 ::v42(){vfunc_called(this, "_ZN7S1290C43v42Ev");}
void  S1290C4 ::v43(){vfunc_called(this, "_ZN7S1290C43v43Ev");}
void  S1290C4 ::v44(){vfunc_called(this, "_ZN7S1290C43v44Ev");}
void  S1290C4 ::v45(){vfunc_called(this, "_ZN7S1290C43v45Ev");}
void  S1290C4 ::v46(){vfunc_called(this, "_ZN7S1290C43v46Ev");}
void  S1290C4 ::v47(){vfunc_called(this, "_ZN7S1290C43v47Ev");}
void  S1290C4 ::v48(){vfunc_called(this, "_ZN7S1290C43v48Ev");}
void  S1290C4 ::v49(){vfunc_called(this, "_ZN7S1290C43v49Ev");}
void  S1290C4 ::v50(){vfunc_called(this, "_ZN7S1290C43v50Ev");}
void  S1290C4 ::v51(){vfunc_called(this, "_ZN7S1290C43v51Ev");}
void  S1290C4 ::v52(){vfunc_called(this, "_ZN7S1290C43v52Ev");}
void  S1290C4 ::v53(){vfunc_called(this, "_ZN7S1290C43v53Ev");}
void  S1290C4 ::v54(){vfunc_called(this, "_ZN7S1290C43v54Ev");}
void  S1290C4 ::v55(){vfunc_called(this, "_ZN7S1290C43v55Ev");}
void  S1290C4 ::v56(){vfunc_called(this, "_ZN7S1290C43v56Ev");}
void  S1290C4 ::v57(){vfunc_called(this, "_ZN7S1290C43v57Ev");}
void  S1290C4 ::v58(){vfunc_called(this, "_ZN7S1290C43v58Ev");}
void  S1290C4 ::v59(){vfunc_called(this, "_ZN7S1290C43v59Ev");}
void  S1290C4 ::v60(){vfunc_called(this, "_ZN7S1290C43v60Ev");}
void  S1290C4 ::v61(){vfunc_called(this, "_ZN7S1290C43v61Ev");}
void  S1290C4 ::v62(){vfunc_called(this, "_ZN7S1290C43v62Ev");}
void  S1290C4 ::v63(){vfunc_called(this, "_ZN7S1290C43v63Ev");}
void  S1290C4 ::v64(){vfunc_called(this, "_ZN7S1290C43v64Ev");}
void  S1290C4 ::v65(){vfunc_called(this, "_ZN7S1290C43v65Ev");}
void  S1290C4 ::v66(){vfunc_called(this, "_ZN7S1290C43v66Ev");}
void  S1290C4 ::v67(){vfunc_called(this, "_ZN7S1290C43v67Ev");}
void  S1290C4 ::v68(){vfunc_called(this, "_ZN7S1290C43v68Ev");}
void  S1290C4 ::v69(){vfunc_called(this, "_ZN7S1290C43v69Ev");}
void  S1290C4 ::v70(){vfunc_called(this, "_ZN7S1290C43v70Ev");}
void  S1290C4 ::v71(){vfunc_called(this, "_ZN7S1290C43v71Ev");}
void  S1290C4 ::v72(){vfunc_called(this, "_ZN7S1290C43v72Ev");}
void  S1290C4 ::v73(){vfunc_called(this, "_ZN7S1290C43v73Ev");}
S1290C4 ::S1290C4(){ note_ctor("S1290C4", this);} // tgen

static void Test_S1290C4()
{
  extern Class_Descriptor cd_S1290C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S1290C4, buf);
    S1290C4 *dp, &lv = *(dp=new (buf) S1290C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S1290C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1290C4)");
    check_field_offset(lv, s1290c4f0, ABISELECT(8,4), "S1290C4.s1290c4f0");
    check_field_offset(lv, s1290c4f1, ABISELECT(16,8), "S1290C4.s1290c4f1");
    check_field_offset(lv, s1290c4f2, ABISELECT(24,16), "S1290C4.s1290c4f2");
    check_field_offset(lv, s1290c4f3, ABISELECT(56,32), "S1290C4.s1290c4f3");
    check_field_offset(lv, s1290c4f4, ABISELECT(64,40), "S1290C4.s1290c4f4");
    check_field_offset(lv, s1290c4f5, ABISELECT(72,44), "S1290C4.s1290c4f5");
    check_field_offset(lv, s1290c4f6, ABISELECT(80,52), "S1290C4.s1290c4f6");
    test_class_info(&lv, &cd_S1290C4);
    dp->~S1290C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1290C4(Test_S1290C4, "S1290C4", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN7S1290C4C1Ev();
extern void _ZN7S1290C4D1Ev();
Name_Map name_map_S1290C4[] = {
  NSPAIR(_ZN7S1290C4C1Ev),
  NSPAIR(_ZN7S1290C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S1290C4[];
extern void _ZN7S1290C4D1Ev();
extern void _ZN7S1290C4D0Ev();
extern void _ZN7S1290C43v10Ev();
extern void _ZN7S1290C43v11Ev();
extern void _ZN7S1290C43v12Ev();
extern void _ZN7S1290C43v13Ev();
extern void _ZN7S1290C43v14Ev();
extern void _ZN7S1290C43v15Ev();
extern void _ZN7S1290C43v16Ev();
extern void _ZN7S1290C43v17Ev();
extern void _ZN7S1290C43v18Ev();
extern void _ZN7S1290C43v19Ev();
extern void _ZN7S1290C43v20Ev();
extern void _ZN7S1290C43v21Ev();
extern void _ZN7S1290C43v22Ev();
extern void _ZN7S1290C43v23Ev();
extern void _ZN7S1290C43v24Ev();
extern void _ZN7S1290C43v25Ev();
extern void _ZN7S1290C43v26Ev();
extern void _ZN7S1290C43v27Ev();
extern void _ZN7S1290C43v28Ev();
extern void _ZN7S1290C43v29Ev();
extern void _ZN7S1290C43v30Ev();
extern void _ZN7S1290C43v31Ev();
extern void _ZN7S1290C43v32Ev();
extern void _ZN7S1290C43v33Ev();
extern void _ZN7S1290C43v34Ev();
extern void _ZN7S1290C43v35Ev();
extern void _ZN7S1290C43v36Ev();
extern void _ZN7S1290C43v37Ev();
extern void _ZN7S1290C43v38Ev();
extern void _ZN7S1290C43v39Ev();
extern void _ZN7S1290C43v40Ev();
extern void _ZN7S1290C43v41Ev();
extern void _ZN7S1290C43v42Ev();
extern void _ZN7S1290C43v43Ev();
extern void _ZN7S1290C43v44Ev();
extern void _ZN7S1290C43v45Ev();
extern void _ZN7S1290C43v46Ev();
extern void _ZN7S1290C43v47Ev();
extern void _ZN7S1290C43v48Ev();
extern void _ZN7S1290C43v49Ev();
extern void _ZN7S1290C43v50Ev();
extern void _ZN7S1290C43v51Ev();
extern void _ZN7S1290C43v52Ev();
extern void _ZN7S1290C43v53Ev();
extern void _ZN7S1290C43v54Ev();
extern void _ZN7S1290C43v55Ev();
extern void _ZN7S1290C43v56Ev();
extern void _ZN7S1290C43v57Ev();
extern void _ZN7S1290C43v58Ev();
extern void _ZN7S1290C43v59Ev();
extern void _ZN7S1290C43v60Ev();
extern void _ZN7S1290C43v61Ev();
extern void _ZN7S1290C43v62Ev();
extern void _ZN7S1290C43v63Ev();
extern void _ZN7S1290C43v64Ev();
extern void _ZN7S1290C43v65Ev();
extern void _ZN7S1290C43v66Ev();
extern void _ZN7S1290C43v67Ev();
extern void _ZN7S1290C43v68Ev();
extern void _ZN7S1290C43v69Ev();
extern void _ZN7S1290C43v70Ev();
extern void _ZN7S1290C43v71Ev();
extern void _ZN7S1290C43v72Ev();
extern void _ZN7S1290C43v73Ev();
static  VTBL_ENTRY vtc_S1290C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1290C4[0]),
  (VTBL_ENTRY)&_ZN7S1290C4D1Ev,
  (VTBL_ENTRY)&_ZN7S1290C4D0Ev,
  (VTBL_ENTRY)&_ZN7S1290C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1290C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1290C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1290C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1290C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1290C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1290C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1290C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1290C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1290C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1290C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1290C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1290C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1290C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1290C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1290C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1290C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1290C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1290C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1290C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1290C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1290C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1290C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1290C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1290C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1290C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1290C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1290C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1290C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1290C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1290C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1290C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1290C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1290C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1290C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1290C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1290C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1290C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1290C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1290C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1290C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1290C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1290C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1290C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1290C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1290C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1290C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1290C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1290C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1290C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1290C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1290C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1290C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1290C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1290C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1290C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1290C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1290C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1290C43v68Ev,
  (VTBL_ENTRY)&_ZN7S1290C43v69Ev,
  (VTBL_ENTRY)&_ZN7S1290C43v70Ev,
  (VTBL_ENTRY)&_ZN7S1290C43v71Ev,
  (VTBL_ENTRY)&_ZN7S1290C43v72Ev,
  (VTBL_ENTRY)&_ZN7S1290C43v73Ev,
};
extern VTBL_ENTRY _ZTI7S1290C4[];
extern  VTBL_ENTRY _ZTV7S1290C4[];
Class_Descriptor cd_S1290C4 = {  "S1290C4", // class name
  0,0,//no base classes
  &(vtc_S1290C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI7S1290C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S1290C4),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  S1290C3  : S1290C4 {
  unsigned int s1290c3f0:1;
  unsigned int s1290c3f1:1;
  unsigned int s1290c3f2:1;
  unsigned int s1290c3f3:1;
  unsigned int s1290c3f4:1;
  unsigned int s1290c3f5:1;
  unsigned int s1290c3f6:1;
  ::S3625C32 s1290c3f7;
  virtual  ~S1290C3(); // _ZN7S1290C3D1Ev
  virtual void  v74(); // _ZN7S1290C33v74Ev
  virtual void  v75(); // _ZN7S1290C33v75Ev
  virtual void  v76(); // _ZN7S1290C33v76Ev
  virtual void  v77(); // _ZN7S1290C33v77Ev
  virtual void  v78(); // _ZN7S1290C33v78Ev
  virtual void  v79(); // _ZN7S1290C33v79Ev
  virtual void  v80(); // _ZN7S1290C33v80Ev
  virtual void  v81(); // _ZN7S1290C33v81Ev
  virtual void  v82(); // _ZN7S1290C33v82Ev
  virtual void  v83(); // _ZN7S1290C33v83Ev
  virtual void  v84(); // _ZN7S1290C33v84Ev
  virtual void  v85(); // _ZN7S1290C33v85Ev
  virtual void  v86(); // _ZN7S1290C33v86Ev
  virtual void  v87(); // _ZN7S1290C33v87Ev
  virtual void  v88(); // _ZN7S1290C33v88Ev
  virtual void  v89(); // _ZN7S1290C33v89Ev
  virtual void  v90(); // _ZN7S1290C33v90Ev
  virtual void  v91(); // _ZN7S1290C33v91Ev
  virtual void  v92(); // _ZN7S1290C33v92Ev
  virtual void  v93(); // _ZN7S1290C33v93Ev
  S1290C3(); // tgen
};
//SIG(-1 S1290C3) C1{ BC2{ 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 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 Fi FL Fp[4] Fi[2] Fp FC3{ m Fi[2]} Fp[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 FC4{ m}}


 S1290C3 ::~S1290C3(){ note_dtor("S1290C3", this);}
void  S1290C3 ::v74(){vfunc_called(this, "_ZN7S1290C33v74Ev");}
void  S1290C3 ::v75(){vfunc_called(this, "_ZN7S1290C33v75Ev");}
void  S1290C3 ::v76(){vfunc_called(this, "_ZN7S1290C33v76Ev");}
void  S1290C3 ::v77(){vfunc_called(this, "_ZN7S1290C33v77Ev");}
void  S1290C3 ::v78(){vfunc_called(this, "_ZN7S1290C33v78Ev");}
void  S1290C3 ::v79(){vfunc_called(this, "_ZN7S1290C33v79Ev");}
void  S1290C3 ::v80(){vfunc_called(this, "_ZN7S1290C33v80Ev");}
void  S1290C3 ::v81(){vfunc_called(this, "_ZN7S1290C33v81Ev");}
void  S1290C3 ::v82(){vfunc_called(this, "_ZN7S1290C33v82Ev");}
void  S1290C3 ::v83(){vfunc_called(this, "_ZN7S1290C33v83Ev");}
void  S1290C3 ::v84(){vfunc_called(this, "_ZN7S1290C33v84Ev");}
void  S1290C3 ::v85(){vfunc_called(this, "_ZN7S1290C33v85Ev");}
void  S1290C3 ::v86(){vfunc_called(this, "_ZN7S1290C33v86Ev");}
void  S1290C3 ::v87(){vfunc_called(this, "_ZN7S1290C33v87Ev");}
void  S1290C3 ::v88(){vfunc_called(this, "_ZN7S1290C33v88Ev");}
void  S1290C3 ::v89(){vfunc_called(this, "_ZN7S1290C33v89Ev");}
void  S1290C3 ::v90(){vfunc_called(this, "_ZN7S1290C33v90Ev");}
void  S1290C3 ::v91(){vfunc_called(this, "_ZN7S1290C33v91Ev");}
void  S1290C3 ::v92(){vfunc_called(this, "_ZN7S1290C33v92Ev");}
void  S1290C3 ::v93(){vfunc_called(this, "_ZN7S1290C33v93Ev");}
S1290C3 ::S1290C3(){ note_ctor("S1290C3", this);} // tgen

static void Test_S1290C3()
{
  extern Class_Descriptor cd_S1290C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(14,17)];
    init_test(&cd_S1290C3, buf);
    S1290C3 *dp, &lv = *(dp=new (buf) S1290C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(104,64), "sizeof(S1290C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1290C3)");
    check_base_class_offset(lv, (S1290C4*), 0, "S1290C3");
    set_bf_and_test(lv, s1290c3f0, ABISELECT(96,60), 0, 1, 1, "S1290C3");
    set_bf_and_test(lv, s1290c3f1, ABISELECT(96,60), 1, 1, 1, "S1290C3");
    set_bf_and_test(lv, s1290c3f2, ABISELECT(96,60), 2, 1, 1, "S1290C3");
    set_bf_and_test(lv, s1290c3f3, ABISELECT(96,60), 3, 1, 1, "S1290C3");
    set_bf_and_test(lv, s1290c3f4, ABISELECT(96,60), 4, 1, 1, "S1290C3");
    set_bf_and_test(lv, s1290c3f5, ABISELECT(96,60), 5, 1, 1, "S1290C3");
    set_bf_and_test(lv, s1290c3f6, ABISELECT(96,60), 6, 1, 1, "S1290C3");
    check_field_offset(lv, s1290c3f7, ABISELECT(97,61), "S1290C3.s1290c3f7");
    test_class_info(&lv, &cd_S1290C3);
    dp->~S1290C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1290C3(Test_S1290C3, "S1290C3", ABISELECT(104,64));

#else // __cplusplus

extern void _ZN7S1290C3C1Ev();
extern void _ZN7S1290C3D1Ev();
Name_Map name_map_S1290C3[] = {
  NSPAIR(_ZN7S1290C3C1Ev),
  NSPAIR(_ZN7S1290C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1290C4;
extern VTBL_ENTRY _ZTI7S1290C4[];
extern  VTBL_ENTRY _ZTV7S1290C4[];
static Base_Class bases_S1290C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1290C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI7S1290C3[];
extern void _ZN7S1290C3D1Ev();
extern void _ZN7S1290C3D0Ev();
extern void _ZN7S1290C43v10Ev();
extern void _ZN7S1290C43v11Ev();
extern void _ZN7S1290C43v12Ev();
extern void _ZN7S1290C43v13Ev();
extern void _ZN7S1290C43v14Ev();
extern void _ZN7S1290C43v15Ev();
extern void _ZN7S1290C43v16Ev();
extern void _ZN7S1290C43v17Ev();
extern void _ZN7S1290C43v18Ev();
extern void _ZN7S1290C43v19Ev();
extern void _ZN7S1290C43v20Ev();
extern void _ZN7S1290C43v21Ev();
extern void _ZN7S1290C43v22Ev();
extern void _ZN7S1290C43v23Ev();
extern void _ZN7S1290C43v24Ev();
extern void _ZN7S1290C43v25Ev();
extern void _ZN7S1290C43v26Ev();
extern void _ZN7S1290C43v27Ev();
extern void _ZN7S1290C43v28Ev();
extern void _ZN7S1290C43v29Ev();
extern void _ZN7S1290C43v30Ev();
extern void _ZN7S1290C43v31Ev();
extern void _ZN7S1290C43v32Ev();
extern void _ZN7S1290C43v33Ev();
extern void _ZN7S1290C43v34Ev();
extern void _ZN7S1290C43v35Ev();
extern void _ZN7S1290C43v36Ev();
extern void _ZN7S1290C43v37Ev();
extern void _ZN7S1290C43v38Ev();
extern void _ZN7S1290C43v39Ev();
extern void _ZN7S1290C43v40Ev();
extern void _ZN7S1290C43v41Ev();
extern void _ZN7S1290C43v42Ev();
extern void _ZN7S1290C43v43Ev();
extern void _ZN7S1290C43v44Ev();
extern void _ZN7S1290C43v45Ev();
extern void _ZN7S1290C43v46Ev();
extern void _ZN7S1290C43v47Ev();
extern void _ZN7S1290C43v48Ev();
extern void _ZN7S1290C43v49Ev();
extern void _ZN7S1290C43v50Ev();
extern void _ZN7S1290C43v51Ev();
extern void _ZN7S1290C43v52Ev();
extern void _ZN7S1290C43v53Ev();
extern void _ZN7S1290C43v54Ev();
extern void _ZN7S1290C43v55Ev();
extern void _ZN7S1290C43v56Ev();
extern void _ZN7S1290C43v57Ev();
extern void _ZN7S1290C43v58Ev();
extern void _ZN7S1290C43v59Ev();
extern void _ZN7S1290C43v60Ev();
extern void _ZN7S1290C43v61Ev();
extern void _ZN7S1290C43v62Ev();
extern void _ZN7S1290C43v63Ev();
extern void _ZN7S1290C43v64Ev();
extern void _ZN7S1290C43v65Ev();
extern void _ZN7S1290C43v66Ev();
extern void _ZN7S1290C43v67Ev();
extern void _ZN7S1290C43v68Ev();
extern void _ZN7S1290C43v69Ev();
extern void _ZN7S1290C43v70Ev();
extern void _ZN7S1290C43v71Ev();
extern void _ZN7S1290C43v72Ev();
extern void _ZN7S1290C43v73Ev();
extern void _ZN7S1290C33v74Ev();
extern void _ZN7S1290C33v75Ev();
extern void _ZN7S1290C33v76Ev();
extern void _ZN7S1290C33v77Ev();
extern void _ZN7S1290C33v78Ev();
extern void _ZN7S1290C33v79Ev();
extern void _ZN7S1290C33v80Ev();
extern void _ZN7S1290C33v81Ev();
extern void _ZN7S1290C33v82Ev();
extern void _ZN7S1290C33v83Ev();
extern void _ZN7S1290C33v84Ev();
extern void _ZN7S1290C33v85Ev();
extern void _ZN7S1290C33v86Ev();
extern void _ZN7S1290C33v87Ev();
extern void _ZN7S1290C33v88Ev();
extern void _ZN7S1290C33v89Ev();
extern void _ZN7S1290C33v90Ev();
extern void _ZN7S1290C33v91Ev();
extern void _ZN7S1290C33v92Ev();
extern void _ZN7S1290C33v93Ev();
static  VTBL_ENTRY vtc_S1290C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1290C3[0]),
  (VTBL_ENTRY)&_ZN7S1290C3D1Ev,
  (VTBL_ENTRY)&_ZN7S1290C3D0Ev,
  (VTBL_ENTRY)&_ZN7S1290C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1290C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1290C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1290C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1290C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1290C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1290C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1290C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1290C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1290C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1290C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1290C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1290C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1290C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1290C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1290C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1290C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1290C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1290C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1290C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1290C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1290C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1290C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1290C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1290C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1290C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1290C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1290C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1290C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1290C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1290C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1290C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1290C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1290C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1290C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1290C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1290C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1290C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1290C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1290C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1290C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1290C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1290C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1290C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1290C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1290C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1290C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1290C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1290C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1290C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1290C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1290C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1290C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1290C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1290C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1290C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1290C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1290C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1290C43v68Ev,
  (VTBL_ENTRY)&_ZN7S1290C43v69Ev,
  (VTBL_ENTRY)&_ZN7S1290C43v70Ev,
  (VTBL_ENTRY)&_ZN7S1290C43v71Ev,
  (VTBL_ENTRY)&_ZN7S1290C43v72Ev,
  (VTBL_ENTRY)&_ZN7S1290C43v73Ev,
  (VTBL_ENTRY)&_ZN7S1290C33v74Ev,
  (VTBL_ENTRY)&_ZN7S1290C33v75Ev,
  (VTBL_ENTRY)&_ZN7S1290C33v76Ev,
  (VTBL_ENTRY)&_ZN7S1290C33v77Ev,
  (VTBL_ENTRY)&_ZN7S1290C33v78Ev,
  (VTBL_ENTRY)&_ZN7S1290C33v79Ev,
  (VTBL_ENTRY)&_ZN7S1290C33v80Ev,
  (VTBL_ENTRY)&_ZN7S1290C33v81Ev,
  (VTBL_ENTRY)&_ZN7S1290C33v82Ev,
  (VTBL_ENTRY)&_ZN7S1290C33v83Ev,
  (VTBL_ENTRY)&_ZN7S1290C33v84Ev,
  (VTBL_ENTRY)&_ZN7S1290C33v85Ev,
  (VTBL_ENTRY)&_ZN7S1290C33v86Ev,
  (VTBL_ENTRY)&_ZN7S1290C33v87Ev,
  (VTBL_ENTRY)&_ZN7S1290C33v88Ev,
  (VTBL_ENTRY)&_ZN7S1290C33v89Ev,
  (VTBL_ENTRY)&_ZN7S1290C33v90Ev,
  (VTBL_ENTRY)&_ZN7S1290C33v91Ev,
  (VTBL_ENTRY)&_ZN7S1290C33v92Ev,
  (VTBL_ENTRY)&_ZN7S1290C33v93Ev,
};
extern VTBL_ENTRY _ZTI7S1290C3[];
extern  VTBL_ENTRY _ZTV7S1290C3[];
Class_Descriptor cd_S1290C3 = {  "S1290C3", // class name
  bases_S1290C3, 1,
  &(vtc_S1290C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(104,64), // object size
  NSPAIRA(_ZTI7S1290C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1290C3),88, //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  S1290C2  : S1290C3 {
  virtual  ~S1290C2(); // _ZN7S1290C2D1Ev
  virtual void  v94(); // _ZN7S1290C23v94Ev
  virtual void  v95(); // _ZN7S1290C23v95Ev
  virtual void  v96(); // _ZN7S1290C23v96Ev
  virtual void  v97(); // _ZN7S1290C23v97Ev
  virtual void  v98(); // _ZN7S1290C23v98Ev
  virtual void  v99(); // _ZN7S1290C23v99Ev
  virtual void  v100(); // _ZN7S1290C24v100Ev
  virtual void  v101(); // _ZN7S1290C24v101Ev
  virtual void  v102(); // _ZN7S1290C24v102Ev
  S1290C2(); // tgen
};
//SIG(-1 S1290C2) C1{ BC2{ BC3{ vd 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 Fi FL Fp[4] Fi[2] Fp FC4{ m Fi[2]} Fp[2]} vd v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 v91 v92 v93 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 FC5{ m}} vd v1 v2 v3 v4 v5 v6 v7 v8 v9}


 S1290C2 ::~S1290C2(){ note_dtor("S1290C2", this);}
void  S1290C2 ::v94(){vfunc_called(this, "_ZN7S1290C23v94Ev");}
void  S1290C2 ::v95(){vfunc_called(this, "_ZN7S1290C23v95Ev");}
void  S1290C2 ::v96(){vfunc_called(this, "_ZN7S1290C23v96Ev");}
void  S1290C2 ::v97(){vfunc_called(this, "_ZN7S1290C23v97Ev");}
void  S1290C2 ::v98(){vfunc_called(this, "_ZN7S1290C23v98Ev");}
void  S1290C2 ::v99(){vfunc_called(this, "_ZN7S1290C23v99Ev");}
void  S1290C2 ::v100(){vfunc_called(this, "_ZN7S1290C24v100Ev");}
void  S1290C2 ::v101(){vfunc_called(this, "_ZN7S1290C24v101Ev");}
void  S1290C2 ::v102(){vfunc_called(this, "_ZN7S1290C24v102Ev");}
S1290C2 ::S1290C2(){ note_ctor("S1290C2", this);} // tgen

static void Test_S1290C2()
{
  extern Class_Descriptor cd_S1290C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(14,17)];
    init_test(&cd_S1290C2, buf);
    S1290C2 *dp, &lv = *(dp=new (buf) S1290C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(104,64), "sizeof(S1290C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1290C2)");
    check_base_class_offset(lv, (S1290C4*)(S1290C3*), 0, "S1290C2");
    check_base_class_offset(lv, (S1290C3*), 0, "S1290C2");
    test_class_info(&lv, &cd_S1290C2);
    dp->~S1290C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1290C2(Test_S1290C2, "S1290C2", ABISELECT(104,64));

#else // __cplusplus

extern void _ZN7S1290C2C1Ev();
extern void _ZN7S1290C2D1Ev();
Name_Map name_map_S1290C2[] = {
  NSPAIR(_ZN7S1290C2C1Ev),
  NSPAIR(_ZN7S1290C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1290C4;
extern VTBL_ENTRY _ZTI7S1290C4[];
extern  VTBL_ENTRY _ZTV7S1290C4[];
extern Class_Descriptor cd_S1290C3;
extern VTBL_ENTRY _ZTI7S1290C3[];
extern  VTBL_ENTRY _ZTV7S1290C3[];
static Base_Class bases_S1290C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1290C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S1290C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S1290C2[];
extern void _ZN7S1290C2D1Ev();
extern void _ZN7S1290C2D0Ev();
extern void _ZN7S1290C43v10Ev();
extern void _ZN7S1290C43v11Ev();
extern void _ZN7S1290C43v12Ev();
extern void _ZN7S1290C43v13Ev();
extern void _ZN7S1290C43v14Ev();
extern void _ZN7S1290C43v15Ev();
extern void _ZN7S1290C43v16Ev();
extern void _ZN7S1290C43v17Ev();
extern void _ZN7S1290C43v18Ev();
extern void _ZN7S1290C43v19Ev();
extern void _ZN7S1290C43v20Ev();
extern void _ZN7S1290C43v21Ev();
extern void _ZN7S1290C43v22Ev();
extern void _ZN7S1290C43v23Ev();
extern void _ZN7S1290C43v24Ev();
extern void _ZN7S1290C43v25Ev();
extern void _ZN7S1290C43v26Ev();
extern void _ZN7S1290C43v27Ev();
extern void _ZN7S1290C43v28Ev();
extern void _ZN7S1290C43v29Ev();
extern void _ZN7S1290C43v30Ev();
extern void _ZN7S1290C43v31Ev();
extern void _ZN7S1290C43v32Ev();
extern void _ZN7S1290C43v33Ev();
extern void _ZN7S1290C43v34Ev();
extern void _ZN7S1290C43v35Ev();
extern void _ZN7S1290C43v36Ev();
extern void _ZN7S1290C43v37Ev();
extern void _ZN7S1290C43v38Ev();
extern void _ZN7S1290C43v39Ev();
extern void _ZN7S1290C43v40Ev();
extern void _ZN7S1290C43v41Ev();
extern void _ZN7S1290C43v42Ev();
extern void _ZN7S1290C43v43Ev();
extern void _ZN7S1290C43v44Ev();
extern void _ZN7S1290C43v45Ev();
extern void _ZN7S1290C43v46Ev();
extern void _ZN7S1290C43v47Ev();
extern void _ZN7S1290C43v48Ev();
extern void _ZN7S1290C43v49Ev();
extern void _ZN7S1290C43v50Ev();
extern void _ZN7S1290C43v51Ev();
extern void _ZN7S1290C43v52Ev();
extern void _ZN7S1290C43v53Ev();
extern void _ZN7S1290C43v54Ev();
extern void _ZN7S1290C43v55Ev();
extern void _ZN7S1290C43v56Ev();
extern void _ZN7S1290C43v57Ev();
extern void _ZN7S1290C43v58Ev();
extern void _ZN7S1290C43v59Ev();
extern void _ZN7S1290C43v60Ev();
extern void _ZN7S1290C43v61Ev();
extern void _ZN7S1290C43v62Ev();
extern void _ZN7S1290C43v63Ev();
extern void _ZN7S1290C43v64Ev();
extern void _ZN7S1290C43v65Ev();
extern void _ZN7S1290C43v66Ev();
extern void _ZN7S1290C43v67Ev();
extern void _ZN7S1290C43v68Ev();
extern void _ZN7S1290C43v69Ev();
extern void _ZN7S1290C43v70Ev();
extern void _ZN7S1290C43v71Ev();
extern void _ZN7S1290C43v72Ev();
extern void _ZN7S1290C43v73Ev();
extern void _ZN7S1290C33v74Ev();
extern void _ZN7S1290C33v75Ev();
extern void _ZN7S1290C33v76Ev();
extern void _ZN7S1290C33v77Ev();
extern void _ZN7S1290C33v78Ev();
extern void _ZN7S1290C33v79Ev();
extern void _ZN7S1290C33v80Ev();
extern void _ZN7S1290C33v81Ev();
extern void _ZN7S1290C33v82Ev();
extern void _ZN7S1290C33v83Ev();
extern void _ZN7S1290C33v84Ev();
extern void _ZN7S1290C33v85Ev();
extern void _ZN7S1290C33v86Ev();
extern void _ZN7S1290C33v87Ev();
extern void _ZN7S1290C33v88Ev();
extern void _ZN7S1290C33v89Ev();
extern void _ZN7S1290C33v90Ev();
extern void _ZN7S1290C33v91Ev();
extern void _ZN7S1290C33v92Ev();
extern void _ZN7S1290C33v93Ev();
extern void _ZN7S1290C23v94Ev();
extern void _ZN7S1290C23v95Ev();
extern void _ZN7S1290C23v96Ev();
extern void _ZN7S1290C23v97Ev();
extern void _ZN7S1290C23v98Ev();
extern void _ZN7S1290C23v99Ev();
extern void _ZN7S1290C24v100Ev();
extern void _ZN7S1290C24v101Ev();
extern void _ZN7S1290C24v102Ev();
static  VTBL_ENTRY vtc_S1290C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1290C2[0]),
  (VTBL_ENTRY)&_ZN7S1290C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1290C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1290C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1290C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1290C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1290C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1290C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1290C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1290C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1290C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1290C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1290C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1290C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1290C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1290C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1290C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1290C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1290C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1290C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1290C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1290C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1290C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1290C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1290C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1290C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1290C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1290C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1290C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1290C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1290C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1290C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1290C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1290C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1290C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1290C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1290C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1290C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1290C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1290C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1290C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1290C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1290C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1290C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1290C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1290C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1290C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1290C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1290C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1290C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1290C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1290C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1290C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1290C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1290C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1290C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1290C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1290C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1290C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1290C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1290C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1290C43v68Ev,
  (VTBL_ENTRY)&_ZN7S1290C43v69Ev,
  (VTBL_ENTRY)&_ZN7S1290C43v70Ev,
  (VTBL_ENTRY)&_ZN7S1290C43v71Ev,
  (VTBL_ENTRY)&_ZN7S1290C43v72Ev,
  (VTBL_ENTRY)&_ZN7S1290C43v73Ev,
  (VTBL_ENTRY)&_ZN7S1290C33v74Ev,
  (VTBL_ENTRY)&_ZN7S1290C33v75Ev,
  (VTBL_ENTRY)&_ZN7S1290C33v76Ev,
  (VTBL_ENTRY)&_ZN7S1290C33v77Ev,
  (VTBL_ENTRY)&_ZN7S1290C33v78Ev,
  (VTBL_ENTRY)&_ZN7S1290C33v79Ev,
  (VTBL_ENTRY)&_ZN7S1290C33v80Ev,
  (VTBL_ENTRY)&_ZN7S1290C33v81Ev,
  (VTBL_ENTRY)&_ZN7S1290C33v82Ev,
  (VTBL_ENTRY)&_ZN7S1290C33v83Ev,
  (VTBL_ENTRY)&_ZN7S1290C33v84Ev,
  (VTBL_ENTRY)&_ZN7S1290C33v85Ev,
  (VTBL_ENTRY)&_ZN7S1290C33v86Ev,
  (VTBL_ENTRY)&_ZN7S1290C33v87Ev,
  (VTBL_ENTRY)&_ZN7S1290C33v88Ev,
  (VTBL_ENTRY)&_ZN7S1290C33v89Ev,
  (VTBL_ENTRY)&_ZN7S1290C33v90Ev,
  (VTBL_ENTRY)&_ZN7S1290C33v91Ev,
  (VTBL_ENTRY)&_ZN7S1290C33v92Ev,
  (VTBL_ENTRY)&_ZN7S1290C33v93Ev,
  (VTBL_ENTRY)&_ZN7S1290C23v94Ev,
  (VTBL_ENTRY)&_ZN7S1290C23v95Ev,
  (VTBL_ENTRY)&_ZN7S1290C23v96Ev,
  (VTBL_ENTRY)&_ZN7S1290C23v97Ev,
  (VTBL_ENTRY)&_ZN7S1290C23v98Ev,
  (VTBL_ENTRY)&_ZN7S1290C23v99Ev,
  (VTBL_ENTRY)&_ZN7S1290C24v100Ev,
  (VTBL_ENTRY)&_ZN7S1290C24v101Ev,
  (VTBL_ENTRY)&_ZN7S1290C24v102Ev,
};
extern VTBL_ENTRY _ZTI7S1290C2[];
extern  VTBL_ENTRY _ZTV7S1290C2[];
Class_Descriptor cd_S1290C2 = {  "S1290C2", // class name
  bases_S1290C2, 2,
  &(vtc_S1290C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(104,64), // object size
  NSPAIRA(_ZTI7S1290C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1290C2),97, //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  S1290C1  : S1290C2 {
  char s1290c1f0[2];
  ::S1292C12 s1290c1f1;
  ::S1289C10_nt s1290c1f2;
  int s1290c1f3;
  ::S1292C12 s1290c1f4;
  ::S1292C12 s1290c1f5;
  ::S1289C10_nt s1290c1f6;
  int s1290c1f7;
  unsigned int s1290c1f8:1;
  unsigned int s1290c1f9:1;
  unsigned int s1290c1f10:1;
  unsigned int s1290c1f11:1;
  virtual  ~S1290C1(); // _ZN7S1290C1D1Ev
  virtual void  v1(); // _ZN7S1290C12v1Ev
  virtual void  v2(); // _ZN7S1290C12v2Ev
  virtual void  v3(); // _ZN7S1290C12v3Ev
  virtual void  v4(); // _ZN7S1290C12v4Ev
  virtual void  v5(); // _ZN7S1290C12v5Ev
  virtual void  v6(); // _ZN7S1290C12v6Ev
  virtual void  v7(); // _ZN7S1290C12v7Ev
  virtual void  v8(); // _ZN7S1290C12v8Ev
  virtual void  v9(); // _ZN7S1290C12v9Ev
  S1290C1(); // tgen
};
//SIG(1 S1290C1) C1{ BC2{ BC3{ BC4{ vd 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 Fi FL Fp[4] Fi[2] Fp FC5{ m Fi[2]} Fp[2]} vd v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 v91 v92 v93 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 FC6{ m}} vd v94 v95 v96 v97 v98 v99 v100 v101 v102} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 Fc[2] FC7{ BC8{ m Fc[4] FC9{ BC10{ BC11{ m Fp Fi[2]}}} Fi[2]} Fp} FC12{ BC8 Fp} Fi FC7 FC7 FC12 Fi Fi:1 Fi:1 Fi:1 Fi:1}


 S1290C1 ::~S1290C1(){ note_dtor("S1290C1", this);}
void  S1290C1 ::v1(){vfunc_called(this, "_ZN7S1290C12v1Ev");}
void  S1290C1 ::v2(){vfunc_called(this, "_ZN7S1290C12v2Ev");}
void  S1290C1 ::v3(){vfunc_called(this, "_ZN7S1290C12v3Ev");}
void  S1290C1 ::v4(){vfunc_called(this, "_ZN7S1290C12v4Ev");}
void  S1290C1 ::v5(){vfunc_called(this, "_ZN7S1290C12v5Ev");}
void  S1290C1 ::v6(){vfunc_called(this, "_ZN7S1290C12v6Ev");}
void  S1290C1 ::v7(){vfunc_called(this, "_ZN7S1290C12v7Ev");}
void  S1290C1 ::v8(){vfunc_called(this, "_ZN7S1290C12v8Ev");}
void  S1290C1 ::v9(){vfunc_called(this, "_ZN7S1290C12v9Ev");}
S1290C1 ::S1290C1(){ note_ctor("S1290C1", this);} // tgen

static void Test_S1290C1()
{
  extern Class_Descriptor cd_S1290C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(41,55)];
    init_test(&cd_S1290C1, buf);
    S1290C1 *dp, &lv = *(dp=new (buf) S1290C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(320,216), "sizeof(S1290C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1290C1)");
    check_base_class_offset(lv, (S1290C4*)(S1290C3*)(S1290C2*), 0, "S1290C1");
    check_base_class_offset(lv, (S1290C3*)(S1290C2*), 0, "S1290C1");
    check_base_class_offset(lv, (S1290C2*), 0, "S1290C1");
    check_field_offset(lv, s1290c1f0, ABISELECT(98,62), "S1290C1.s1290c1f0");
    check_field_offset(lv, s1290c1f1, ABISELECT(104,64), "S1290C1.s1290c1f1");
    check_field_offset(lv, s1290c1f2, ABISELECT(144,92), "S1290C1.s1290c1f2");
    check_field_offset(lv, s1290c1f3, ABISELECT(184,120), "S1290C1.s1290c1f3");
    check_field_offset(lv, s1290c1f4, ABISELECT(192,124), "S1290C1.s1290c1f4");
    check_field_offset(lv, s1290c1f5, ABISELECT(232,152), "S1290C1.s1290c1f5");
    check_field_offset(lv, s1290c1f6, ABISELECT(272,180), "S1290C1.s1290c1f6");
    check_field_offset(lv, s1290c1f7, ABISELECT(312,208), "S1290C1.s1290c1f7");
    set_bf_and_test(lv, s1290c1f8, ABISELECT(316,212), 0, 1, 1, "S1290C1");
    set_bf_and_test(lv, s1290c1f9, ABISELECT(316,212), 1, 1, 1, "S1290C1");
    set_bf_and_test(lv, s1290c1f10, ABISELECT(316,212), 2, 1, 1, "S1290C1");
    set_bf_and_test(lv, s1290c1f11, ABISELECT(316,212), 3, 1, 1, "S1290C1");
    test_class_info(&lv, &cd_S1290C1);
    dp->~S1290C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1290C1(Test_S1290C1, "S1290C1", ABISELECT(320,216));

#else // __cplusplus

extern void _ZN7S1290C1C1Ev();
extern void _ZN7S1290C1D1Ev();
Name_Map name_map_S1290C1[] = {
  NSPAIR(_ZN7S1290C1C1Ev),
  NSPAIR(_ZN7S1290C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1290C4;
extern VTBL_ENTRY _ZTI7S1290C4[];
extern  VTBL_ENTRY _ZTV7S1290C4[];
extern Class_Descriptor cd_S1290C3;
extern VTBL_ENTRY _ZTI7S1290C3[];
extern  VTBL_ENTRY _ZTV7S1290C3[];
extern Class_Descriptor cd_S1290C2;
extern VTBL_ENTRY _ZTI7S1290C2[];
extern  VTBL_ENTRY _ZTV7S1290C2[];
static Base_Class bases_S1290C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1290C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S1290C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S1290C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S1290C1[];
extern void _ZN7S1290C1D1Ev();
extern void _ZN7S1290C1D0Ev();
extern void _ZN7S1290C43v10Ev();
extern void _ZN7S1290C43v11Ev();
extern void _ZN7S1290C43v12Ev();
extern void _ZN7S1290C43v13Ev();
extern void _ZN7S1290C43v14Ev();
extern void _ZN7S1290C43v15Ev();
extern void _ZN7S1290C43v16Ev();
extern void _ZN7S1290C43v17Ev();
extern void _ZN7S1290C43v18Ev();
extern void _ZN7S1290C43v19Ev();
extern void _ZN7S1290C43v20Ev();
extern void _ZN7S1290C43v21Ev();
extern void _ZN7S1290C43v22Ev();
extern void _ZN7S1290C43v23Ev();
extern void _ZN7S1290C43v24Ev();
extern void _ZN7S1290C43v25Ev();
extern void _ZN7S1290C43v26Ev();
extern void _ZN7S1290C43v27Ev();
extern void _ZN7S1290C43v28Ev();
extern void _ZN7S1290C43v29Ev();
extern void _ZN7S1290C43v30Ev();
extern void _ZN7S1290C43v31Ev();
extern void _ZN7S1290C43v32Ev();
extern void _ZN7S1290C43v33Ev();
extern void _ZN7S1290C43v34Ev();
extern void _ZN7S1290C43v35Ev();
extern void _ZN7S1290C43v36Ev();
extern void _ZN7S1290C43v37Ev();
extern void _ZN7S1290C43v38Ev();
extern void _ZN7S1290C43v39Ev();
extern void _ZN7S1290C43v40Ev();
extern void _ZN7S1290C43v41Ev();
extern void _ZN7S1290C43v42Ev();
extern void _ZN7S1290C43v43Ev();
extern void _ZN7S1290C43v44Ev();
extern void _ZN7S1290C43v45Ev();
extern void _ZN7S1290C43v46Ev();
extern void _ZN7S1290C43v47Ev();
extern void _ZN7S1290C43v48Ev();
extern void _ZN7S1290C43v49Ev();
extern void _ZN7S1290C43v50Ev();
extern void _ZN7S1290C43v51Ev();
extern void _ZN7S1290C43v52Ev();
extern void _ZN7S1290C43v53Ev();
extern void _ZN7S1290C43v54Ev();
extern void _ZN7S1290C43v55Ev();
extern void _ZN7S1290C43v56Ev();
extern void _ZN7S1290C43v57Ev();
extern void _ZN7S1290C43v58Ev();
extern void _ZN7S1290C43v59Ev();
extern void _ZN7S1290C43v60Ev();
extern void _ZN7S1290C43v61Ev();
extern void _ZN7S1290C43v62Ev();
extern void _ZN7S1290C43v63Ev();
extern void _ZN7S1290C43v64Ev();
extern void _ZN7S1290C43v65Ev();
extern void _ZN7S1290C43v66Ev();
extern void _ZN7S1290C43v67Ev();
extern void _ZN7S1290C43v68Ev();
extern void _ZN7S1290C43v69Ev();
extern void _ZN7S1290C43v70Ev();
extern void _ZN7S1290C43v71Ev();
extern void _ZN7S1290C43v72Ev();
extern void _ZN7S1290C43v73Ev();
extern void _ZN7S1290C33v74Ev();
extern void _ZN7S1290C33v75Ev();
extern void _ZN7S1290C33v76Ev();
extern void _ZN7S1290C33v77Ev();
extern void _ZN7S1290C33v78Ev();
extern void _ZN7S1290C33v79Ev();
extern void _ZN7S1290C33v80Ev();
extern void _ZN7S1290C33v81Ev();
extern void _ZN7S1290C33v82Ev();
extern void _ZN7S1290C33v83Ev();
extern void _ZN7S1290C33v84Ev();
extern void _ZN7S1290C33v85Ev();
extern void _ZN7S1290C33v86Ev();
extern void _ZN7S1290C33v87Ev();
extern void _ZN7S1290C33v88Ev();
extern void _ZN7S1290C33v89Ev();
extern void _ZN7S1290C33v90Ev();
extern void _ZN7S1290C33v91Ev();
extern void _ZN7S1290C33v92Ev();
extern void _ZN7S1290C33v93Ev();
extern void _ZN7S1290C23v94Ev();
extern void _ZN7S1290C23v95Ev();
extern void _ZN7S1290C23v96Ev();
extern void _ZN7S1290C23v97Ev();
extern void _ZN7S1290C23v98Ev();
extern void _ZN7S1290C23v99Ev();
extern void _ZN7S1290C24v100Ev();
extern void _ZN7S1290C24v101Ev();
extern void _ZN7S1290C24v102Ev();
extern void _ZN7S1290C12v1Ev();
extern void _ZN7S1290C12v2Ev();
extern void _ZN7S1290C12v3Ev();
extern void _ZN7S1290C12v4Ev();
extern void _ZN7S1290C12v5Ev();
extern void _ZN7S1290C12v6Ev();
extern void _ZN7S1290C12v7Ev();
extern void _ZN7S1290C12v8Ev();
extern void _ZN7S1290C12v9Ev();
static  VTBL_ENTRY vtc_S1290C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1290C1[0]),
  (VTBL_ENTRY)&_ZN7S1290C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1290C1D0Ev,
  (VTBL_ENTRY)&_ZN7S1290C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1290C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1290C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1290C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1290C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1290C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1290C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1290C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1290C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1290C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1290C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1290C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1290C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1290C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1290C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1290C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1290C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1290C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1290C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1290C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1290C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1290C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1290C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1290C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1290C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1290C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1290C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1290C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1290C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1290C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1290C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1290C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1290C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1290C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1290C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1290C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1290C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1290C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1290C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1290C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1290C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1290C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1290C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1290C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1290C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1290C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1290C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1290C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1290C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1290C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1290C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1290C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1290C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1290C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1290C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1290C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1290C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1290C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1290C43v68Ev,
  (VTBL_ENTRY)&_ZN7S1290C43v69Ev,
  (VTBL_ENTRY)&_ZN7S1290C43v70Ev,
  (VTBL_ENTRY)&_ZN7S1290C43v71Ev,
  (VTBL_ENTRY)&_ZN7S1290C43v72Ev,
  (VTBL_ENTRY)&_ZN7S1290C43v73Ev,
  (VTBL_ENTRY)&_ZN7S1290C33v74Ev,
  (VTBL_ENTRY)&_ZN7S1290C33v75Ev,
  (VTBL_ENTRY)&_ZN7S1290C33v76Ev,
  (VTBL_ENTRY)&_ZN7S1290C33v77Ev,
  (VTBL_ENTRY)&_ZN7S1290C33v78Ev,
  (VTBL_ENTRY)&_ZN7S1290C33v79Ev,
  (VTBL_ENTRY)&_ZN7S1290C33v80Ev,
  (VTBL_ENTRY)&_ZN7S1290C33v81Ev,
  (VTBL_ENTRY)&_ZN7S1290C33v82Ev,
  (VTBL_ENTRY)&_ZN7S1290C33v83Ev,
  (VTBL_ENTRY)&_ZN7S1290C33v84Ev,
  (VTBL_ENTRY)&_ZN7S1290C33v85Ev,
  (VTBL_ENTRY)&_ZN7S1290C33v86Ev,
  (VTBL_ENTRY)&_ZN7S1290C33v87Ev,
  (VTBL_ENTRY)&_ZN7S1290C33v88Ev,
  (VTBL_ENTRY)&_ZN7S1290C33v89Ev,
  (VTBL_ENTRY)&_ZN7S1290C33v90Ev,
  (VTBL_ENTRY)&_ZN7S1290C33v91Ev,
  (VTBL_ENTRY)&_ZN7S1290C33v92Ev,
  (VTBL_ENTRY)&_ZN7S1290C33v93Ev,
  (VTBL_ENTRY)&_ZN7S1290C23v94Ev,
  (VTBL_ENTRY)&_ZN7S1290C23v95Ev,
  (VTBL_ENTRY)&_ZN7S1290C23v96Ev,
  (VTBL_ENTRY)&_ZN7S1290C23v97Ev,
  (VTBL_ENTRY)&_ZN7S1290C23v98Ev,
  (VTBL_ENTRY)&_ZN7S1290C23v99Ev,
  (VTBL_ENTRY)&_ZN7S1290C24v100Ev,
  (VTBL_ENTRY)&_ZN7S1290C24v101Ev,
  (VTBL_ENTRY)&_ZN7S1290C24v102Ev,
  (VTBL_ENTRY)&_ZN7S1290C12v1Ev,
  (VTBL_ENTRY)&_ZN7S1290C12v2Ev,
  (VTBL_ENTRY)&_ZN7S1290C12v3Ev,
  (VTBL_ENTRY)&_ZN7S1290C12v4Ev,
  (VTBL_ENTRY)&_ZN7S1290C12v5Ev,
  (VTBL_ENTRY)&_ZN7S1290C12v6Ev,
  (VTBL_ENTRY)&_ZN7S1290C12v7Ev,
  (VTBL_ENTRY)&_ZN7S1290C12v8Ev,
  (VTBL_ENTRY)&_ZN7S1290C12v9Ev,
};
extern VTBL_ENTRY _ZTI7S1290C1[];
extern  VTBL_ENTRY _ZTV7S1290C1[];
Class_Descriptor cd_S1290C1 = {  "S1290C1", // class name
  bases_S1290C1, 3,
  &(vtc_S1290C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(320,216), // object size
  NSPAIRA(_ZTI7S1290C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1290C1),106, //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  S1513C4  {
  int s1513c4f0;
  __tsi64 s1513c4f1;
  void *s1513c4f2[4];
  int s1513c4f3[2];
  void *s1513c4f4;
  ::S674C6_nt s1513c4f5;
  void *s1513c4f6[2];
  virtual  ~S1513C4(); // _ZN7S1513C4D1Ev
  virtual void  v6(); // _ZN7S1513C42v6Ev
  virtual void  v7(); // _ZN7S1513C42v7Ev
  virtual void  v8(); // _ZN7S1513C42v8Ev
  virtual void  v9(); // _ZN7S1513C42v9Ev
  virtual void  v10(); // _ZN7S1513C43v10Ev
  virtual void  v11(); // _ZN7S1513C43v11Ev
  virtual void  v12(); // _ZN7S1513C43v12Ev
  virtual void  v13(); // _ZN7S1513C43v13Ev
  virtual void  v14(); // _ZN7S1513C43v14Ev
  virtual void  v15(); // _ZN7S1513C43v15Ev
  virtual void  v16(); // _ZN7S1513C43v16Ev
  virtual void  v17(); // _ZN7S1513C43v17Ev
  virtual void  v18(); // _ZN7S1513C43v18Ev
  virtual void  v19(); // _ZN7S1513C43v19Ev
  virtual void  v20(); // _ZN7S1513C43v20Ev
  virtual void  v21(); // _ZN7S1513C43v21Ev
  virtual void  v22(); // _ZN7S1513C43v22Ev
  virtual void  v23(); // _ZN7S1513C43v23Ev
  virtual void  v24(); // _ZN7S1513C43v24Ev
  virtual void  v25(); // _ZN7S1513C43v25Ev
  virtual void  v26(); // _ZN7S1513C43v26Ev
  virtual void  v27(); // _ZN7S1513C43v27Ev
  virtual void  v28(); // _ZN7S1513C43v28Ev
  virtual void  v29(); // _ZN7S1513C43v29Ev
  virtual void  v30(); // _ZN7S1513C43v30Ev
  virtual void  v31(); // _ZN7S1513C43v31Ev
  virtual void  v32(); // _ZN7S1513C43v32Ev
  virtual void  v33(); // _ZN7S1513C43v33Ev
  virtual void  v34(); // _ZN7S1513C43v34Ev
  virtual void  v35(); // _ZN7S1513C43v35Ev
  virtual void  v36(); // _ZN7S1513C43v36Ev
  virtual void  v37(); // _ZN7S1513C43v37Ev
  virtual void  v38(); // _ZN7S1513C43v38Ev
  virtual void  v39(); // _ZN7S1513C43v39Ev
  virtual void  v40(); // _ZN7S1513C43v40Ev
  virtual void  v41(); // _ZN7S1513C43v41Ev
  virtual void  v42(); // _ZN7S1513C43v42Ev
  virtual void  v43(); // _ZN7S1513C43v43Ev
  virtual void  v44(); // _ZN7S1513C43v44Ev
  virtual void  v45(); // _ZN7S1513C43v45Ev
  virtual void  v46(); // _ZN7S1513C43v46Ev
  virtual void  v47(); // _ZN7S1513C43v47Ev
  virtual void  v48(); // _ZN7S1513C43v48Ev
  virtual void  v49(); // _ZN7S1513C43v49Ev
  virtual void  v50(); // _ZN7S1513C43v50Ev
  virtual void  v51(); // _ZN7S1513C43v51Ev
  virtual void  v52(); // _ZN7S1513C43v52Ev
  virtual void  v53(); // _ZN7S1513C43v53Ev
  virtual void  v54(); // _ZN7S1513C43v54Ev
  virtual void  v55(); // _ZN7S1513C43v55Ev
  virtual void  v56(); // _ZN7S1513C43v56Ev
  virtual void  v57(); // _ZN7S1513C43v57Ev
  virtual void  v58(); // _ZN7S1513C43v58Ev
  virtual void  v59(); // _ZN7S1513C43v59Ev
  virtual void  v60(); // _ZN7S1513C43v60Ev
  virtual void  v61(); // _ZN7S1513C43v61Ev
  virtual void  v62(); // _ZN7S1513C43v62Ev
  virtual void  v63(); // _ZN7S1513C43v63Ev
  virtual void  v64(); // _ZN7S1513C43v64Ev
  virtual void  v65(); // _ZN7S1513C43v65Ev
  virtual void  v66(); // _ZN7S1513C43v66Ev
  virtual void  v67(); // _ZN7S1513C43v67Ev
  virtual void  v68(); // _ZN7S1513C43v68Ev
  virtual void  v69(); // _ZN7S1513C43v69Ev
  S1513C4(); // tgen
};
//SIG(-1 S1513C4) 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]}


 S1513C4 ::~S1513C4(){ note_dtor("S1513C4", this);}
void  S1513C4 ::v6(){vfunc_called(this, "_ZN7S1513C42v6Ev");}
void  S1513C4 ::v7(){vfunc_called(this, "_ZN7S1513C42v7Ev");}
void  S1513C4 ::v8(){vfunc_called(this, "_ZN7S1513C42v8Ev");}
void  S1513C4 ::v9(){vfunc_called(this, "_ZN7S1513C42v9Ev");}
void  S1513C4 ::v10(){vfunc_called(this, "_ZN7S1513C43v10Ev");}
void  S1513C4 ::v11(){vfunc_called(this, "_ZN7S1513C43v11Ev");}
void  S1513C4 ::v12(){vfunc_called(this, "_ZN7S1513C43v12Ev");}
void  S1513C4 ::v13(){vfunc_called(this, "_ZN7S1513C43v13Ev");}
void  S1513C4 ::v14(){vfunc_called(this, "_ZN7S1513C43v14Ev");}
void  S1513C4 ::v15(){vfunc_called(this, "_ZN7S1513C43v15Ev");}
void  S1513C4 ::v16(){vfunc_called(this, "_ZN7S1513C43v16Ev");}
void  S1513C4 ::v17(){vfunc_called(this, "_ZN7S1513C43v17Ev");}
void  S1513C4 ::v18(){vfunc_called(this, "_ZN7S1513C43v18Ev");}
void  S1513C4 ::v19(){vfunc_called(this, "_ZN7S1513C43v19Ev");}
void  S1513C4 ::v20(){vfunc_called(this, "_ZN7S1513C43v20Ev");}
void  S1513C4 ::v21(){vfunc_called(this, "_ZN7S1513C43v21Ev");}
void  S1513C4 ::v22(){vfunc_called(this, "_ZN7S1513C43v22Ev");}
void  S1513C4 ::v23(){vfunc_called(this, "_ZN7S1513C43v23Ev");}
void  S1513C4 ::v24(){vfunc_called(this, "_ZN7S1513C43v24Ev");}
void  S1513C4 ::v25(){vfunc_called(this, "_ZN7S1513C43v25Ev");}
void  S1513C4 ::v26(){vfunc_called(this, "_ZN7S1513C43v26Ev");}
void  S1513C4 ::v27(){vfunc_called(this, "_ZN7S1513C43v27Ev");}
void  S1513C4 ::v28(){vfunc_called(this, "_ZN7S1513C43v28Ev");}
void  S1513C4 ::v29(){vfunc_called(this, "_ZN7S1513C43v29Ev");}
void  S1513C4 ::v30(){vfunc_called(this, "_ZN7S1513C43v30Ev");}
void  S1513C4 ::v31(){vfunc_called(this, "_ZN7S1513C43v31Ev");}
void  S1513C4 ::v32(){vfunc_called(this, "_ZN7S1513C43v32Ev");}
void  S1513C4 ::v33(){vfunc_called(this, "_ZN7S1513C43v33Ev");}
void  S1513C4 ::v34(){vfunc_called(this, "_ZN7S1513C43v34Ev");}
void  S1513C4 ::v35(){vfunc_called(this, "_ZN7S1513C43v35Ev");}
void  S1513C4 ::v36(){vfunc_called(this, "_ZN7S1513C43v36Ev");}
void  S1513C4 ::v37(){vfunc_called(this, "_ZN7S1513C43v37Ev");}
void  S1513C4 ::v38(){vfunc_called(this, "_ZN7S1513C43v38Ev");}
void  S1513C4 ::v39(){vfunc_called(this, "_ZN7S1513C43v39Ev");}
void  S1513C4 ::v40(){vfunc_called(this, "_ZN7S1513C43v40Ev");}
void  S1513C4 ::v41(){vfunc_called(this, "_ZN7S1513C43v41Ev");}
void  S1513C4 ::v42(){vfunc_called(this, "_ZN7S1513C43v42Ev");}
void  S1513C4 ::v43(){vfunc_called(this, "_ZN7S1513C43v43Ev");}
void  S1513C4 ::v44(){vfunc_called(this, "_ZN7S1513C43v44Ev");}
void  S1513C4 ::v45(){vfunc_called(this, "_ZN7S1513C43v45Ev");}
void  S1513C4 ::v46(){vfunc_called(this, "_ZN7S1513C43v46Ev");}
void  S1513C4 ::v47(){vfunc_called(this, "_ZN7S1513C43v47Ev");}
void  S1513C4 ::v48(){vfunc_called(this, "_ZN7S1513C43v48Ev");}
void  S1513C4 ::v49(){vfunc_called(this, "_ZN7S1513C43v49Ev");}
void  S1513C4 ::v50(){vfunc_called(this, "_ZN7S1513C43v50Ev");}
void  S1513C4 ::v51(){vfunc_called(this, "_ZN7S1513C43v51Ev");}
void  S1513C4 ::v52(){vfunc_called(this, "_ZN7S1513C43v52Ev");}
void  S1513C4 ::v53(){vfunc_called(this, "_ZN7S1513C43v53Ev");}
void  S1513C4 ::v54(){vfunc_called(this, "_ZN7S1513C43v54Ev");}
void  S1513C4 ::v55(){vfunc_called(this, "_ZN7S1513C43v55Ev");}
void  S1513C4 ::v56(){vfunc_called(this, "_ZN7S1513C43v56Ev");}
void  S1513C4 ::v57(){vfunc_called(this, "_ZN7S1513C43v57Ev");}
void  S1513C4 ::v58(){vfunc_called(this, "_ZN7S1513C43v58Ev");}
void  S1513C4 ::v59(){vfunc_called(this, "_ZN7S1513C43v59Ev");}
void  S1513C4 ::v60(){vfunc_called(this, "_ZN7S1513C43v60Ev");}
void  S1513C4 ::v61(){vfunc_called(this, "_ZN7S1513C43v61Ev");}
void  S1513C4 ::v62(){vfunc_called(this, "_ZN7S1513C43v62Ev");}
void  S1513C4 ::v63(){vfunc_called(this, "_ZN7S1513C43v63Ev");}
void  S1513C4 ::v64(){vfunc_called(this, "_ZN7S1513C43v64Ev");}
void  S1513C4 ::v65(){vfunc_called(this, "_ZN7S1513C43v65Ev");}
void  S1513C4 ::v66(){vfunc_called(this, "_ZN7S1513C43v66Ev");}
void  S1513C4 ::v67(){vfunc_called(this, "_ZN7S1513C43v67Ev");}
void  S1513C4 ::v68(){vfunc_called(this, "_ZN7S1513C43v68Ev");}
void  S1513C4 ::v69(){vfunc_called(this, "_ZN7S1513C43v69Ev");}
S1513C4 ::S1513C4(){ note_ctor("S1513C4", this);} // tgen

static void Test_S1513C4()
{
  extern Class_Descriptor cd_S1513C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S1513C4, buf);
    S1513C4 *dp, &lv = *(dp=new (buf) S1513C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S1513C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1513C4)");
    check_field_offset(lv, s1513c4f0, ABISELECT(8,4), "S1513C4.s1513c4f0");
    check_field_offset(lv, s1513c4f1, ABISELECT(16,8), "S1513C4.s1513c4f1");
    check_field_offset(lv, s1513c4f2, ABISELECT(24,16), "S1513C4.s1513c4f2");
    check_field_offset(lv, s1513c4f3, ABISELECT(56,32), "S1513C4.s1513c4f3");
    check_field_offset(lv, s1513c4f4, ABISELECT(64,40), "S1513C4.s1513c4f4");
    check_field_offset(lv, s1513c4f5, ABISELECT(72,44), "S1513C4.s1513c4f5");
    check_field_offset(lv, s1513c4f6, ABISELECT(80,52), "S1513C4.s1513c4f6");
    test_class_info(&lv, &cd_S1513C4);
    dp->~S1513C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1513C4(Test_S1513C4, "S1513C4", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN7S1513C4C1Ev();
extern void _ZN7S1513C4D1Ev();
Name_Map name_map_S1513C4[] = {
  NSPAIR(_ZN7S1513C4C1Ev),
  NSPAIR(_ZN7S1513C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S1513C4[];
extern void _ZN7S1513C4D1Ev();
extern void _ZN7S1513C4D0Ev();
extern void _ZN7S1513C42v6Ev();
extern void _ZN7S1513C42v7Ev();
extern void _ZN7S1513C42v8Ev();
extern void _ZN7S1513C42v9Ev();
extern void _ZN7S1513C43v10Ev();
extern void _ZN7S1513C43v11Ev();
extern void _ZN7S1513C43v12Ev();
extern void _ZN7S1513C43v13Ev();
extern void _ZN7S1513C43v14Ev();
extern void _ZN7S1513C43v15Ev();
extern void _ZN7S1513C43v16Ev();
extern void _ZN7S1513C43v17Ev();
extern void _ZN7S1513C43v18Ev();
extern void _ZN7S1513C43v19Ev();
extern void _ZN7S1513C43v20Ev();
extern void _ZN7S1513C43v21Ev();
extern void _ZN7S1513C43v22Ev();
extern void _ZN7S1513C43v23Ev();
extern void _ZN7S1513C43v24Ev();
extern void _ZN7S1513C43v25Ev();
extern void _ZN7S1513C43v26Ev();
extern void _ZN7S1513C43v27Ev();
extern void _ZN7S1513C43v28Ev();
extern void _ZN7S1513C43v29Ev();
extern void _ZN7S1513C43v30Ev();
extern void _ZN7S1513C43v31Ev();
extern void _ZN7S1513C43v32Ev();
extern void _ZN7S1513C43v33Ev();
extern void _ZN7S1513C43v34Ev();
extern void _ZN7S1513C43v35Ev();
extern void _ZN7S1513C43v36Ev();
extern void _ZN7S1513C43v37Ev();
extern void _ZN7S1513C43v38Ev();
extern void _ZN7S1513C43v39Ev();
extern void _ZN7S1513C43v40Ev();
extern void _ZN7S1513C43v41Ev();
extern void _ZN7S1513C43v42Ev();
extern void _ZN7S1513C43v43Ev();
extern void _ZN7S1513C43v44Ev();
extern void _ZN7S1513C43v45Ev();
extern void _ZN7S1513C43v46Ev();
extern void _ZN7S1513C43v47Ev();
extern void _ZN7S1513C43v48Ev();
extern void _ZN7S1513C43v49Ev();
extern void _ZN7S1513C43v50Ev();
extern void _ZN7S1513C43v51Ev();
extern void _ZN7S1513C43v52Ev();
extern void _ZN7S1513C43v53Ev();
extern void _ZN7S1513C43v54Ev();
extern void _ZN7S1513C43v55Ev();
extern void _ZN7S1513C43v56Ev();
extern void _ZN7S1513C43v57Ev();
extern void _ZN7S1513C43v58Ev();
extern void _ZN7S1513C43v59Ev();
extern void _ZN7S1513C43v60Ev();
extern void _ZN7S1513C43v61Ev();
extern void _ZN7S1513C43v62Ev();
extern void _ZN7S1513C43v63Ev();
extern void _ZN7S1513C43v64Ev();
extern void _ZN7S1513C43v65Ev();
extern void _ZN7S1513C43v66Ev();
extern void _ZN7S1513C43v67Ev();
extern void _ZN7S1513C43v68Ev();
extern void _ZN7S1513C43v69Ev();
static  VTBL_ENTRY vtc_S1513C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1513C4[0]),
  (VTBL_ENTRY)&_ZN7S1513C4D1Ev,
  (VTBL_ENTRY)&_ZN7S1513C4D0Ev,
  (VTBL_ENTRY)&_ZN7S1513C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1513C42v7Ev,
  (VTBL_ENTRY)&_ZN7S1513C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1513C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1513C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1513C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1513C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1513C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1513C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1513C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1513C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1513C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1513C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1513C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1513C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1513C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1513C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1513C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1513C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1513C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1513C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1513C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1513C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1513C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1513C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1513C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1513C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1513C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1513C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1513C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1513C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1513C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1513C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1513C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1513C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1513C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1513C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1513C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1513C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1513C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1513C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1513C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1513C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1513C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1513C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1513C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1513C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1513C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1513C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1513C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1513C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1513C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1513C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1513C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1513C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1513C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1513C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1513C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1513C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1513C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1513C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1513C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1513C43v68Ev,
  (VTBL_ENTRY)&_ZN7S1513C43v69Ev,
};
extern VTBL_ENTRY _ZTI7S1513C4[];
extern  VTBL_ENTRY _ZTV7S1513C4[];
Class_Descriptor cd_S1513C4 = {  "S1513C4", // class name
  0,0,//no base classes
  &(vtc_S1513C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI7S1513C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S1513C4),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  S1513C3  : S1513C4 {
  unsigned int s1513c3f0:1;
  unsigned int s1513c3f1:1;
  unsigned int s1513c3f2:1;
  unsigned int s1513c3f3:1;
  unsigned int s1513c3f4:1;
  unsigned int s1513c3f5:1;
  unsigned int s1513c3f6:1;
  ::S3625C32 s1513c3f7;
  virtual  ~S1513C3(); // _ZN7S1513C3D1Ev
  virtual void  v70(); // _ZN7S1513C33v70Ev
  virtual void  v71(); // _ZN7S1513C33v71Ev
  virtual void  v72(); // _ZN7S1513C33v72Ev
  virtual void  v73(); // _ZN7S1513C33v73Ev
  virtual void  v74(); // _ZN7S1513C33v74Ev
  virtual void  v75(); // _ZN7S1513C33v75Ev
  virtual void  v76(); // _ZN7S1513C33v76Ev
  virtual void  v77(); // _ZN7S1513C33v77Ev
  virtual void  v78(); // _ZN7S1513C33v78Ev
  virtual void  v79(); // _ZN7S1513C33v79Ev
  virtual void  v80(); // _ZN7S1513C33v80Ev
  virtual void  v81(); // _ZN7S1513C33v81Ev
  virtual void  v82(); // _ZN7S1513C33v82Ev
  virtual void  v83(); // _ZN7S1513C33v83Ev
  virtual void  v84(); // _ZN7S1513C33v84Ev
  virtual void  v85(); // _ZN7S1513C33v85Ev
  virtual void  v86(); // _ZN7S1513C33v86Ev
  virtual void  v87(); // _ZN7S1513C33v87Ev
  virtual void  v88(); // _ZN7S1513C33v88Ev
  virtual void  v89(); // _ZN7S1513C33v89Ev
  S1513C3(); // tgen
};
//SIG(-1 S1513C3) C1{ BC2{ 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 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 Fi FL Fp[4] Fi[2] Fp FC3{ m Fi[2]} Fp[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 FC4{ m}}


 S1513C3 ::~S1513C3(){ note_dtor("S1513C3", this);}
void  S1513C3 ::v70(){vfunc_called(this, "_ZN7S1513C33v70Ev");}
void  S1513C3 ::v71(){vfunc_called(this, "_ZN7S1513C33v71Ev");}
void  S1513C3 ::v72(){vfunc_called(this, "_ZN7S1513C33v72Ev");}
void  S1513C3 ::v73(){vfunc_called(this, "_ZN7S1513C33v73Ev");}
void  S1513C3 ::v74(){vfunc_called(this, "_ZN7S1513C33v74Ev");}
void  S1513C3 ::v75(){vfunc_called(this, "_ZN7S1513C33v75Ev");}
void  S1513C3 ::v76(){vfunc_called(this, "_ZN7S1513C33v76Ev");}
void  S1513C3 ::v77(){vfunc_called(this, "_ZN7S1513C33v77Ev");}
void  S1513C3 ::v78(){vfunc_called(this, "_ZN7S1513C33v78Ev");}
void  S1513C3 ::v79(){vfunc_called(this, "_ZN7S1513C33v79Ev");}
void  S1513C3 ::v80(){vfunc_called(this, "_ZN7S1513C33v80Ev");}
void  S1513C3 ::v81(){vfunc_called(this, "_ZN7S1513C33v81Ev");}
void  S1513C3 ::v82(){vfunc_called(this, "_ZN7S1513C33v82Ev");}
void  S1513C3 ::v83(){vfunc_called(this, "_ZN7S1513C33v83Ev");}
void  S1513C3 ::v84(){vfunc_called(this, "_ZN7S1513C33v84Ev");}
void  S1513C3 ::v85(){vfunc_called(this, "_ZN7S1513C33v85Ev");}
void  S1513C3 ::v86(){vfunc_called(this, "_ZN7S1513C33v86Ev");}
void  S1513C3 ::v87(){vfunc_called(this, "_ZN7S1513C33v87Ev");}
void  S1513C3 ::v88(){vfunc_called(this, "_ZN7S1513C33v88Ev");}
void  S1513C3 ::v89(){vfunc_called(this, "_ZN7S1513C33v89Ev");}
S1513C3 ::S1513C3(){ note_ctor("S1513C3", this);} // tgen

static void Test_S1513C3()
{
  extern Class_Descriptor cd_S1513C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(14,17)];
    init_test(&cd_S1513C3, buf);
    S1513C3 *dp, &lv = *(dp=new (buf) S1513C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(104,64), "sizeof(S1513C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1513C3)");
    check_base_class_offset(lv, (S1513C4*), 0, "S1513C3");
    set_bf_and_test(lv, s1513c3f0, ABISELECT(96,60), 0, 1, 1, "S1513C3");
    set_bf_and_test(lv, s1513c3f1, ABISELECT(96,60), 1, 1, 1, "S1513C3");
    set_bf_and_test(lv, s1513c3f2, ABISELECT(96,60), 2, 1, 1, "S1513C3");
    set_bf_and_test(lv, s1513c3f3, ABISELECT(96,60), 3, 1, 1, "S1513C3");
    set_bf_and_test(lv, s1513c3f4, ABISELECT(96,60), 4, 1, 1, "S1513C3");
    set_bf_and_test(lv, s1513c3f5, ABISELECT(96,60), 5, 1, 1, "S1513C3");
    set_bf_and_test(lv, s1513c3f6, ABISELECT(96,60), 6, 1, 1, "S1513C3");
    check_field_offset(lv, s1513c3f7, ABISELECT(97,61), "S1513C3.s1513c3f7");
    test_class_info(&lv, &cd_S1513C3);
    dp->~S1513C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1513C3(Test_S1513C3, "S1513C3", ABISELECT(104,64));

#else // __cplusplus

extern void _ZN7S1513C3C1Ev();
extern void _ZN7S1513C3D1Ev();
Name_Map name_map_S1513C3[] = {
  NSPAIR(_ZN7S1513C3C1Ev),
  NSPAIR(_ZN7S1513C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1513C4;
extern VTBL_ENTRY _ZTI7S1513C4[];
extern  VTBL_ENTRY _ZTV7S1513C4[];
static Base_Class bases_S1513C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1513C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI7S1513C3[];
extern void _ZN7S1513C3D1Ev();
extern void _ZN7S1513C3D0Ev();
extern void _ZN7S1513C42v6Ev();
extern void _ZN7S1513C42v7Ev();
extern void _ZN7S1513C42v8Ev();
extern void _ZN7S1513C42v9Ev();
extern void _ZN7S1513C43v10Ev();
extern void _ZN7S1513C43v11Ev();
extern void _ZN7S1513C43v12Ev();
extern void _ZN7S1513C43v13Ev();
extern void _ZN7S1513C43v14Ev();
extern void _ZN7S1513C43v15Ev();
extern void _ZN7S1513C43v16Ev();
extern void _ZN7S1513C43v17Ev();
extern void _ZN7S1513C43v18Ev();
extern void _ZN7S1513C43v19Ev();
extern void _ZN7S1513C43v20Ev();
extern void _ZN7S1513C43v21Ev();
extern void _ZN7S1513C43v22Ev();
extern void _ZN7S1513C43v23Ev();
extern void _ZN7S1513C43v24Ev();
extern void _ZN7S1513C43v25Ev();
extern void _ZN7S1513C43v26Ev();
extern void _ZN7S1513C43v27Ev();
extern void _ZN7S1513C43v28Ev();
extern void _ZN7S1513C43v29Ev();
extern void _ZN7S1513C43v30Ev();
extern void _ZN7S1513C43v31Ev();
extern void _ZN7S1513C43v32Ev();
extern void _ZN7S1513C43v33Ev();
extern void _ZN7S1513C43v34Ev();
extern void _ZN7S1513C43v35Ev();
extern void _ZN7S1513C43v36Ev();
extern void _ZN7S1513C43v37Ev();
extern void _ZN7S1513C43v38Ev();
extern void _ZN7S1513C43v39Ev();
extern void _ZN7S1513C43v40Ev();
extern void _ZN7S1513C43v41Ev();
extern void _ZN7S1513C43v42Ev();
extern void _ZN7S1513C43v43Ev();
extern void _ZN7S1513C43v44Ev();
extern void _ZN7S1513C43v45Ev();
extern void _ZN7S1513C43v46Ev();
extern void _ZN7S1513C43v47Ev();
extern void _ZN7S1513C43v48Ev();
extern void _ZN7S1513C43v49Ev();
extern void _ZN7S1513C43v50Ev();
extern void _ZN7S1513C43v51Ev();
extern void _ZN7S1513C43v52Ev();
extern void _ZN7S1513C43v53Ev();
extern void _ZN7S1513C43v54Ev();
extern void _ZN7S1513C43v55Ev();
extern void _ZN7S1513C43v56Ev();
extern void _ZN7S1513C43v57Ev();
extern void _ZN7S1513C43v58Ev();
extern void _ZN7S1513C43v59Ev();
extern void _ZN7S1513C43v60Ev();
extern void _ZN7S1513C43v61Ev();
extern void _ZN7S1513C43v62Ev();
extern void _ZN7S1513C43v63Ev();
extern void _ZN7S1513C43v64Ev();
extern void _ZN7S1513C43v65Ev();
extern void _ZN7S1513C43v66Ev();
extern void _ZN7S1513C43v67Ev();
extern void _ZN7S1513C43v68Ev();
extern void _ZN7S1513C43v69Ev();
extern void _ZN7S1513C33v70Ev();
extern void _ZN7S1513C33v71Ev();
extern void _ZN7S1513C33v72Ev();
extern void _ZN7S1513C33v73Ev();
extern void _ZN7S1513C33v74Ev();
extern void _ZN7S1513C33v75Ev();
extern void _ZN7S1513C33v76Ev();
extern void _ZN7S1513C33v77Ev();
extern void _ZN7S1513C33v78Ev();
extern void _ZN7S1513C33v79Ev();
extern void _ZN7S1513C33v80Ev();
extern void _ZN7S1513C33v81Ev();
extern void _ZN7S1513C33v82Ev();
extern void _ZN7S1513C33v83Ev();
extern void _ZN7S1513C33v84Ev();
extern void _ZN7S1513C33v85Ev();
extern void _ZN7S1513C33v86Ev();
extern void _ZN7S1513C33v87Ev();
extern void _ZN7S1513C33v88Ev();
extern void _ZN7S1513C33v89Ev();
static  VTBL_ENTRY vtc_S1513C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1513C3[0]),
  (VTBL_ENTRY)&_ZN7S1513C3D1Ev,
  (VTBL_ENTRY)&_ZN7S1513C3D0Ev,
  (VTBL_ENTRY)&_ZN7S1513C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1513C42v7Ev,
  (VTBL_ENTRY)&_ZN7S1513C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1513C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1513C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1513C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1513C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1513C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1513C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1513C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1513C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1513C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1513C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1513C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1513C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1513C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1513C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1513C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1513C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1513C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1513C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1513C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1513C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1513C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1513C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1513C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1513C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1513C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1513C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1513C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1513C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1513C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1513C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1513C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1513C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1513C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1513C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1513C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1513C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1513C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1513C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1513C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1513C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1513C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1513C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1513C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1513C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1513C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1513C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1513C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1513C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1513C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1513C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1513C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1513C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1513C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1513C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1513C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1513C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1513C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1513C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1513C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1513C43v68Ev,
  (VTBL_ENTRY)&_ZN7S1513C43v69Ev,
  (VTBL_ENTRY)&_ZN7S1513C33v70Ev,
  (VTBL_ENTRY)&_ZN7S1513C33v71Ev,
  (VTBL_ENTRY)&_ZN7S1513C33v72Ev,
  (VTBL_ENTRY)&_ZN7S1513C33v73Ev,
  (VTBL_ENTRY)&_ZN7S1513C33v74Ev,
  (VTBL_ENTRY)&_ZN7S1513C33v75Ev,
  (VTBL_ENTRY)&_ZN7S1513C33v76Ev,
  (VTBL_ENTRY)&_ZN7S1513C33v77Ev,
  (VTBL_ENTRY)&_ZN7S1513C33v78Ev,
  (VTBL_ENTRY)&_ZN7S1513C33v79Ev,
  (VTBL_ENTRY)&_ZN7S1513C33v80Ev,
  (VTBL_ENTRY)&_ZN7S1513C33v81Ev,
  (VTBL_ENTRY)&_ZN7S1513C33v82Ev,
  (VTBL_ENTRY)&_ZN7S1513C33v83Ev,
  (VTBL_ENTRY)&_ZN7S1513C33v84Ev,
  (VTBL_ENTRY)&_ZN7S1513C33v85Ev,
  (VTBL_ENTRY)&_ZN7S1513C33v86Ev,
  (VTBL_ENTRY)&_ZN7S1513C33v87Ev,
  (VTBL_ENTRY)&_ZN7S1513C33v88Ev,
  (VTBL_ENTRY)&_ZN7S1513C33v89Ev,
};
extern VTBL_ENTRY _ZTI7S1513C3[];
extern  VTBL_ENTRY _ZTV7S1513C3[];
Class_Descriptor cd_S1513C3 = {  "S1513C3", // class name
  bases_S1513C3, 1,
  &(vtc_S1513C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(104,64), // object size
  NSPAIRA(_ZTI7S1513C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1513C3),88, //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  S1513C2  : S1513C3 {
  ::S674C42 s1513c2f0;
  virtual  ~S1513C2(); // _ZN7S1513C2D1Ev
  virtual void  v90(); // _ZN7S1513C23v90Ev
  virtual void  v91(); // _ZN7S1513C23v91Ev
  virtual void  v92(); // _ZN7S1513C23v92Ev
  virtual void  v93(); // _ZN7S1513C23v93Ev
  S1513C2(); // tgen
};
//SIG(-1 S1513C2) C1{ BC2{ BC3{ 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 FC4{ m Fi[2]} Fp[2]} vd v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 FC5{ m}} vd v1 v2 v3 v4 FC6{ BC7{ BC8{ m Fp Fi[2]}}}}


 S1513C2 ::~S1513C2(){ note_dtor("S1513C2", this);}
void  S1513C2 ::v90(){vfunc_called(this, "_ZN7S1513C23v90Ev");}
void  S1513C2 ::v91(){vfunc_called(this, "_ZN7S1513C23v91Ev");}
void  S1513C2 ::v92(){vfunc_called(this, "_ZN7S1513C23v92Ev");}
void  S1513C2 ::v93(){vfunc_called(this, "_ZN7S1513C23v93Ev");}
S1513C2 ::S1513C2(){ note_ctor("S1513C2", this);} // tgen

static void Test_S1513C2()
{
  extern Class_Descriptor cd_S1513C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(16,20)];
    init_test(&cd_S1513C2, buf);
    S1513C2 *dp, &lv = *(dp=new (buf) S1513C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(120,76), "sizeof(S1513C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1513C2)");
    check_base_class_offset(lv, (S1513C4*)(S1513C3*), 0, "S1513C2");
    check_base_class_offset(lv, (S1513C3*), 0, "S1513C2");
    check_field_offset(lv, s1513c2f0, ABISELECT(104,64), "S1513C2.s1513c2f0");
    test_class_info(&lv, &cd_S1513C2);
    dp->~S1513C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1513C2(Test_S1513C2, "S1513C2", ABISELECT(120,76));

#else // __cplusplus

extern void _ZN7S1513C2C1Ev();
extern void _ZN7S1513C2D1Ev();
Name_Map name_map_S1513C2[] = {
  NSPAIR(_ZN7S1513C2C1Ev),
  NSPAIR(_ZN7S1513C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1513C4;
extern VTBL_ENTRY _ZTI7S1513C4[];
extern  VTBL_ENTRY _ZTV7S1513C4[];
extern Class_Descriptor cd_S1513C3;
extern VTBL_ENTRY _ZTI7S1513C3[];
extern  VTBL_ENTRY _ZTV7S1513C3[];
static Base_Class bases_S1513C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1513C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S1513C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S1513C2[];
extern void _ZN7S1513C2D1Ev();
extern void _ZN7S1513C2D0Ev();
extern void _ZN7S1513C42v6Ev();
extern void _ZN7S1513C42v7Ev();
extern void _ZN7S1513C42v8Ev();
extern void _ZN7S1513C42v9Ev();
extern void _ZN7S1513C43v10Ev();
extern void _ZN7S1513C43v11Ev();
extern void _ZN7S1513C43v12Ev();
extern void _ZN7S1513C43v13Ev();
extern void _ZN7S1513C43v14Ev();
extern void _ZN7S1513C43v15Ev();
extern void _ZN7S1513C43v16Ev();
extern void _ZN7S1513C43v17Ev();
extern void _ZN7S1513C43v18Ev();
extern void _ZN7S1513C43v19Ev();
extern void _ZN7S1513C43v20Ev();
extern void _ZN7S1513C43v21Ev();
extern void _ZN7S1513C43v22Ev();
extern void _ZN7S1513C43v23Ev();
extern void _ZN7S1513C43v24Ev();
extern void _ZN7S1513C43v25Ev();
extern void _ZN7S1513C43v26Ev();
extern void _ZN7S1513C43v27Ev();
extern void _ZN7S1513C43v28Ev();
extern void _ZN7S1513C43v29Ev();
extern void _ZN7S1513C43v30Ev();
extern void _ZN7S1513C43v31Ev();
extern void _ZN7S1513C43v32Ev();
extern void _ZN7S1513C43v33Ev();
extern void _ZN7S1513C43v34Ev();
extern void _ZN7S1513C43v35Ev();
extern void _ZN7S1513C43v36Ev();
extern void _ZN7S1513C43v37Ev();
extern void _ZN7S1513C43v38Ev();
extern void _ZN7S1513C43v39Ev();
extern void _ZN7S1513C43v40Ev();
extern void _ZN7S1513C43v41Ev();
extern void _ZN7S1513C43v42Ev();
extern void _ZN7S1513C43v43Ev();
extern void _ZN7S1513C43v44Ev();
extern void _ZN7S1513C43v45Ev();
extern void _ZN7S1513C43v46Ev();
extern void _ZN7S1513C43v47Ev();
extern void _ZN7S1513C43v48Ev();
extern void _ZN7S1513C43v49Ev();
extern void _ZN7S1513C43v50Ev();
extern void _ZN7S1513C43v51Ev();
extern void _ZN7S1513C43v52Ev();
extern void _ZN7S1513C43v53Ev();
extern void _ZN7S1513C43v54Ev();
extern void _ZN7S1513C43v55Ev();
extern void _ZN7S1513C43v56Ev();
extern void _ZN7S1513C43v57Ev();
extern void _ZN7S1513C43v58Ev();
extern void _ZN7S1513C43v59Ev();
extern void _ZN7S1513C43v60Ev();
extern void _ZN7S1513C43v61Ev();
extern void _ZN7S1513C43v62Ev();
extern void _ZN7S1513C43v63Ev();
extern void _ZN7S1513C43v64Ev();
extern void _ZN7S1513C43v65Ev();
extern void _ZN7S1513C43v66Ev();
extern void _ZN7S1513C43v67Ev();
extern void _ZN7S1513C43v68Ev();
extern void _ZN7S1513C43v69Ev();
extern void _ZN7S1513C33v70Ev();
extern void _ZN7S1513C33v71Ev();
extern void _ZN7S1513C33v72Ev();
extern void _ZN7S1513C33v73Ev();
extern void _ZN7S1513C33v74Ev();
extern void _ZN7S1513C33v75Ev();
extern void _ZN7S1513C33v76Ev();
extern void _ZN7S1513C33v77Ev();
extern void _ZN7S1513C33v78Ev();
extern void _ZN7S1513C33v79Ev();
extern void _ZN7S1513C33v80Ev();
extern void _ZN7S1513C33v81Ev();
extern void _ZN7S1513C33v82Ev();
extern void _ZN7S1513C33v83Ev();
extern void _ZN7S1513C33v84Ev();
extern void _ZN7S1513C33v85Ev();
extern void _ZN7S1513C33v86Ev();
extern void _ZN7S1513C33v87Ev();
extern void _ZN7S1513C33v88Ev();
extern void _ZN7S1513C33v89Ev();
extern void _ZN7S1513C23v90Ev();
extern void _ZN7S1513C23v91Ev();
extern void _ZN7S1513C23v92Ev();
extern void _ZN7S1513C23v93Ev();
static  VTBL_ENTRY vtc_S1513C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1513C2[0]),
  (VTBL_ENTRY)&_ZN7S1513C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1513C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1513C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1513C42v7Ev,
  (VTBL_ENTRY)&_ZN7S1513C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1513C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1513C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1513C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1513C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1513C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1513C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1513C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1513C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1513C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1513C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1513C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1513C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1513C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1513C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1513C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1513C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1513C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1513C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1513C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1513C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1513C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1513C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1513C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1513C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1513C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1513C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1513C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1513C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1513C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1513C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1513C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1513C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1513C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1513C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1513C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1513C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1513C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1513C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1513C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1513C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1513C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1513C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1513C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1513C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1513C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1513C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1513C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1513C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1513C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1513C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1513C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1513C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1513C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1513C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1513C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1513C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1513C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1513C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1513C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1513C43v68Ev,
  (VTBL_ENTRY)&_ZN7S1513C43v69Ev,
  (VTBL_ENTRY)&_ZN7S1513C33v70Ev,
  (VTBL_ENTRY)&_ZN7S1513C33v71Ev,
  (VTBL_ENTRY)&_ZN7S1513C33v72Ev,
  (VTBL_ENTRY)&_ZN7S1513C33v73Ev,
  (VTBL_ENTRY)&_ZN7S1513C33v74Ev,
  (VTBL_ENTRY)&_ZN7S1513C33v75Ev,
  (VTBL_ENTRY)&_ZN7S1513C33v76Ev,
  (VTBL_ENTRY)&_ZN7S1513C33v77Ev,
  (VTBL_ENTRY)&_ZN7S1513C33v78Ev,
  (VTBL_ENTRY)&_ZN7S1513C33v79Ev,
  (VTBL_ENTRY)&_ZN7S1513C33v80Ev,
  (VTBL_ENTRY)&_ZN7S1513C33v81Ev,
  (VTBL_ENTRY)&_ZN7S1513C33v82Ev,
  (VTBL_ENTRY)&_ZN7S1513C33v83Ev,
  (VTBL_ENTRY)&_ZN7S1513C33v84Ev,
  (VTBL_ENTRY)&_ZN7S1513C33v85Ev,
  (VTBL_ENTRY)&_ZN7S1513C33v86Ev,
  (VTBL_ENTRY)&_ZN7S1513C33v87Ev,
  (VTBL_ENTRY)&_ZN7S1513C33v88Ev,
  (VTBL_ENTRY)&_ZN7S1513C33v89Ev,
  (VTBL_ENTRY)&_ZN7S1513C23v90Ev,
  (VTBL_ENTRY)&_ZN7S1513C23v91Ev,
  (VTBL_ENTRY)&_ZN7S1513C23v92Ev,
  (VTBL_ENTRY)&_ZN7S1513C23v93Ev,
};
extern VTBL_ENTRY _ZTI7S1513C2[];
extern  VTBL_ENTRY _ZTV7S1513C2[];
Class_Descriptor cd_S1513C2 = {  "S1513C2", // class name
  bases_S1513C2, 2,
  &(vtc_S1513C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(120,76), // object size
  NSPAIRA(_ZTI7S1513C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1513C2),92, //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  S1513C1  : S1513C2 {
  ::S1292C12 s1513c1f0;
  ::S1289C10_nt s1513c1f1;
  ::S1289C10_nt s1513c1f2;
  ::S1292C12 s1513c1f3;
  ::S1289C10_nt s1513c1f4;
  ::S1292C12 s1513c1f5;
  ::S1289C10_nt s1513c1f6;
  ::S1292C12 s1513c1f7;
  ::S1289C10_nt s1513c1f8;
  unsigned int s1513c1f9:1;
  unsigned int s1513c1f10:1;
  unsigned int s1513c1f11:1;
  ::S1292C12 s1513c1f12;
  virtual  ~S1513C1(); // _ZN7S1513C1D1Ev
  virtual void  v1(); // _ZN7S1513C12v1Ev
  virtual void  v2(); // _ZN7S1513C12v2Ev
  virtual void  v3(); // _ZN7S1513C12v3Ev
  virtual void  v4(); // _ZN7S1513C12v4Ev
  virtual void  v5(); // _ZN7S1513C12v5Ev
  S1513C1(); // tgen
};
//SIG(1 S1513C1) C1{ BC2{ BC3{ BC4{ 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 FC5{ m Fi[2]} Fp[2]} vd v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 FC6{ m}} vd v90 v91 v92 v93 FC7{ BC8{ BC9{ m Fp Fi[2]}}}} vd v1 v2 v3 v4 v5 FC10{ BC11{ m Fc[4] FC12{ BC13{ BC9}} Fi[2]} Fp} FC14{ BC11 Fp} FC14 FC10 FC14 FC10 FC14 FC10 FC14 Fi:1 Fi:1 Fi:1 FC10}


 S1513C1 ::~S1513C1(){ note_dtor("S1513C1", this);}
void  S1513C1 ::v1(){vfunc_called(this, "_ZN7S1513C12v1Ev");}
void  S1513C1 ::v2(){vfunc_called(this, "_ZN7S1513C12v2Ev");}
void  S1513C1 ::v3(){vfunc_called(this, "_ZN7S1513C12v3Ev");}
void  S1513C1 ::v4(){vfunc_called(this, "_ZN7S1513C12v4Ev");}
void  S1513C1 ::v5(){vfunc_called(this, "_ZN7S1513C12v5Ev");}
S1513C1 ::S1513C1(){ note_ctor("S1513C1", this);} // tgen

static void Test_S1513C1()
{
  extern Class_Descriptor cd_S1513C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(67,91)];
    init_test(&cd_S1513C1, buf);
    S1513C1 *dp, &lv = *(dp=new (buf) S1513C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(528,360), "sizeof(S1513C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1513C1)");
    check_base_class_offset(lv, (S1513C4*)(S1513C3*)(S1513C2*), 0, "S1513C1");
    check_base_class_offset(lv, (S1513C3*)(S1513C2*), 0, "S1513C1");
    check_base_class_offset(lv, (S1513C2*), 0, "S1513C1");
    check_field_offset(lv, s1513c1f0, ABISELECT(120,76), "S1513C1.s1513c1f0");
    check_field_offset(lv, s1513c1f1, ABISELECT(160,104), "S1513C1.s1513c1f1");
    check_field_offset(lv, s1513c1f2, ABISELECT(200,132), "S1513C1.s1513c1f2");
    check_field_offset(lv, s1513c1f3, ABISELECT(240,160), "S1513C1.s1513c1f3");
    check_field_offset(lv, s1513c1f4, ABISELECT(280,188), "S1513C1.s1513c1f4");
    check_field_offset(lv, s1513c1f5, ABISELECT(320,216), "S1513C1.s1513c1f5");
    check_field_offset(lv, s1513c1f6, ABISELECT(360,244), "S1513C1.s1513c1f6");
    check_field_offset(lv, s1513c1f7, ABISELECT(400,272), "S1513C1.s1513c1f7");
    check_field_offset(lv, s1513c1f8, ABISELECT(440,300), "S1513C1.s1513c1f8");
    set_bf_and_test(lv, s1513c1f9, ABISELECT(480,328), 0, 1, 1, "S1513C1");
    set_bf_and_test(lv, s1513c1f10, ABISELECT(480,328), 1, 1, 1, "S1513C1");
    set_bf_and_test(lv, s1513c1f11, ABISELECT(480,328), 2, 1, 1, "S1513C1");
    check_field_offset(lv, s1513c1f12, ABISELECT(488,332), "S1513C1.s1513c1f12");
    test_class_info(&lv, &cd_S1513C1);
    dp->~S1513C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1513C1(Test_S1513C1, "S1513C1", ABISELECT(528,360));

#else // __cplusplus

extern void _ZN7S1513C1C1Ev();
extern void _ZN7S1513C1D1Ev();
Name_Map name_map_S1513C1[] = {
  NSPAIR(_ZN7S1513C1C1Ev),
  NSPAIR(_ZN7S1513C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1513C4;
extern VTBL_ENTRY _ZTI7S1513C4[];
extern  VTBL_ENTRY _ZTV7S1513C4[];
extern Class_Descriptor cd_S1513C3;
extern VTBL_ENTRY _ZTI7S1513C3[];
extern  VTBL_ENTRY _ZTV7S1513C3[];
extern Class_Descriptor cd_S1513C2;
extern VTBL_ENTRY _ZTI7S1513C2[];
extern  VTBL_ENTRY _ZTV7S1513C2[];
static Base_Class bases_S1513C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1513C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S1513C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S1513C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S1513C1[];
extern void _ZN7S1513C1D1Ev();
extern void _ZN7S1513C1D0Ev();
extern void _ZN7S1513C42v6Ev();
extern void _ZN7S1513C42v7Ev();
extern void _ZN7S1513C42v8Ev();
extern void _ZN7S1513C42v9Ev();
extern void _ZN7S1513C43v10Ev();
extern void _ZN7S1513C43v11Ev();
extern void _ZN7S1513C43v12Ev();
extern void _ZN7S1513C43v13Ev();
extern void _ZN7S1513C43v14Ev();
extern void _ZN7S1513C43v15Ev();
extern void _ZN7S1513C43v16Ev();
extern void _ZN7S1513C43v17Ev();
extern void _ZN7S1513C43v18Ev();
extern void _ZN7S1513C43v19Ev();
extern void _ZN7S1513C43v20Ev();
extern void _ZN7S1513C43v21Ev();
extern void _ZN7S1513C43v22Ev();
extern void _ZN7S1513C43v23Ev();
extern void _ZN7S1513C43v24Ev();
extern void _ZN7S1513C43v25Ev();
extern void _ZN7S1513C43v26Ev();
extern void _ZN7S1513C43v27Ev();
extern void _ZN7S1513C43v28Ev();
extern void _ZN7S1513C43v29Ev();
extern void _ZN7S1513C43v30Ev();
extern void _ZN7S1513C43v31Ev();
extern void _ZN7S1513C43v32Ev();
extern void _ZN7S1513C43v33Ev();
extern void _ZN7S1513C43v34Ev();
extern void _ZN7S1513C43v35Ev();
extern void _ZN7S1513C43v36Ev();
extern void _ZN7S1513C43v37Ev();
extern void _ZN7S1513C43v38Ev();
extern void _ZN7S1513C43v39Ev();
extern void _ZN7S1513C43v40Ev();
extern void _ZN7S1513C43v41Ev();
extern void _ZN7S1513C43v42Ev();
extern void _ZN7S1513C43v43Ev();
extern void _ZN7S1513C43v44Ev();
extern void _ZN7S1513C43v45Ev();
extern void _ZN7S1513C43v46Ev();
extern void _ZN7S1513C43v47Ev();
extern void _ZN7S1513C43v48Ev();
extern void _ZN7S1513C43v49Ev();
extern void _ZN7S1513C43v50Ev();
extern void _ZN7S1513C43v51Ev();
extern void _ZN7S1513C43v52Ev();
extern void _ZN7S1513C43v53Ev();
extern void _ZN7S1513C43v54Ev();
extern void _ZN7S1513C43v55Ev();
extern void _ZN7S1513C43v56Ev();
extern void _ZN7S1513C43v57Ev();
extern void _ZN7S1513C43v58Ev();
extern void _ZN7S1513C43v59Ev();
extern void _ZN7S1513C43v60Ev();
extern void _ZN7S1513C43v61Ev();
extern void _ZN7S1513C43v62Ev();
extern void _ZN7S1513C43v63Ev();
extern void _ZN7S1513C43v64Ev();
extern void _ZN7S1513C43v65Ev();
extern void _ZN7S1513C43v66Ev();
extern void _ZN7S1513C43v67Ev();
extern void _ZN7S1513C43v68Ev();
extern void _ZN7S1513C43v69Ev();
extern void _ZN7S1513C33v70Ev();
extern void _ZN7S1513C33v71Ev();
extern void _ZN7S1513C33v72Ev();
extern void _ZN7S1513C33v73Ev();
extern void _ZN7S1513C33v74Ev();
extern void _ZN7S1513C33v75Ev();
extern void _ZN7S1513C33v76Ev();
extern void _ZN7S1513C33v77Ev();
extern void _ZN7S1513C33v78Ev();
extern void _ZN7S1513C33v79Ev();
extern void _ZN7S1513C33v80Ev();
extern void _ZN7S1513C33v81Ev();
extern void _ZN7S1513C33v82Ev();
extern void _ZN7S1513C33v83Ev();
extern void _ZN7S1513C33v84Ev();
extern void _ZN7S1513C33v85Ev();
extern void _ZN7S1513C33v86Ev();
extern void _ZN7S1513C33v87Ev();
extern void _ZN7S1513C33v88Ev();
extern void _ZN7S1513C33v89Ev();
extern void _ZN7S1513C23v90Ev();
extern void _ZN7S1513C23v91Ev();
extern void _ZN7S1513C23v92Ev();
extern void _ZN7S1513C23v93Ev();
extern void _ZN7S1513C12v1Ev();
extern void _ZN7S1513C12v2Ev();
extern void _ZN7S1513C12v3Ev();
extern void _ZN7S1513C12v4Ev();
extern void _ZN7S1513C12v5Ev();
static  VTBL_ENTRY vtc_S1513C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1513C1[0]),
  (VTBL_ENTRY)&_ZN7S1513C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1513C1D0Ev,
  (VTBL_ENTRY)&_ZN7S1513C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1513C42v7Ev,
  (VTBL_ENTRY)&_ZN7S1513C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1513C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1513C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1513C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1513C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1513C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1513C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1513C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1513C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1513C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1513C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1513C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1513C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1513C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1513C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1513C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1513C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1513C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1513C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1513C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1513C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1513C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1513C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1513C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1513C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1513C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1513C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1513C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1513C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1513C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1513C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1513C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1513C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1513C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1513C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1513C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1513C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1513C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1513C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1513C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1513C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1513C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1513C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1513C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1513C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1513C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1513C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1513C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1513C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1513C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1513C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1513C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1513C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1513C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1513C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1513C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1513C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1513C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1513C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1513C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1513C43v68Ev,
  (VTBL_ENTRY)&_ZN7S1513C43v69Ev,
  (VTBL_ENTRY)&_ZN7S1513C33v70Ev,
  (VTBL_ENTRY)&_ZN7S1513C33v71Ev,
  (VTBL_ENTRY)&_ZN7S1513C33v72Ev,
  (VTBL_ENTRY)&_ZN7S1513C33v73Ev,
  (VTBL_ENTRY)&_ZN7S1513C33v74Ev,
  (VTBL_ENTRY)&_ZN7S1513C33v75Ev,
  (VTBL_ENTRY)&_ZN7S1513C33v76Ev,
  (VTBL_ENTRY)&_ZN7S1513C33v77Ev,
  (VTBL_ENTRY)&_ZN7S1513C33v78Ev,
  (VTBL_ENTRY)&_ZN7S1513C33v79Ev,
  (VTBL_ENTRY)&_ZN7S1513C33v80Ev,
  (VTBL_ENTRY)&_ZN7S1513C33v81Ev,
  (VTBL_ENTRY)&_ZN7S1513C33v82Ev,
  (VTBL_ENTRY)&_ZN7S1513C33v83Ev,
  (VTBL_ENTRY)&_ZN7S1513C33v84Ev,
  (VTBL_ENTRY)&_ZN7S1513C33v85Ev,
  (VTBL_ENTRY)&_ZN7S1513C33v86Ev,
  (VTBL_ENTRY)&_ZN7S1513C33v87Ev,
  (VTBL_ENTRY)&_ZN7S1513C33v88Ev,
  (VTBL_ENTRY)&_ZN7S1513C33v89Ev,
  (VTBL_ENTRY)&_ZN7S1513C23v90Ev,
  (VTBL_ENTRY)&_ZN7S1513C23v91Ev,
  (VTBL_ENTRY)&_ZN7S1513C23v92Ev,
  (VTBL_ENTRY)&_ZN7S1513C23v93Ev,
  (VTBL_ENTRY)&_ZN7S1513C12v1Ev,
  (VTBL_ENTRY)&_ZN7S1513C12v2Ev,
  (VTBL_ENTRY)&_ZN7S1513C12v3Ev,
  (VTBL_ENTRY)&_ZN7S1513C12v4Ev,
  (VTBL_ENTRY)&_ZN7S1513C12v5Ev,
};
extern VTBL_ENTRY _ZTI7S1513C1[];
extern  VTBL_ENTRY _ZTV7S1513C1[];
Class_Descriptor cd_S1513C1 = {  "S1513C1", // class name
  bases_S1513C1, 3,
  &(vtc_S1513C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(528,360), // object size
  NSPAIRA(_ZTI7S1513C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1513C1),97, //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  S3012C3  {
  int s3012c3f0;
  __tsi64 s3012c3f1;
  void *s3012c3f2[4];
  int s3012c3f3[2];
  void *s3012c3f4;
  ::S674C6_nt s3012c3f5;
  void *s3012c3f6[2];
  virtual  ~S3012C3(); // _ZN7S3012C3D1Ev
  virtual void  v10(); // _ZN7S3012C33v10Ev
  virtual void  v11(); // _ZN7S3012C33v11Ev
  virtual void  v12(); // _ZN7S3012C33v12Ev
  virtual void  v13(); // _ZN7S3012C33v13Ev
  virtual void  v14(); // _ZN7S3012C33v14Ev
  virtual void  v15(); // _ZN7S3012C33v15Ev
  virtual void  v16(); // _ZN7S3012C33v16Ev
  virtual void  v17(); // _ZN7S3012C33v17Ev
  virtual void  v18(); // _ZN7S3012C33v18Ev
  virtual void  v19(); // _ZN7S3012C33v19Ev
  virtual void  v20(); // _ZN7S3012C33v20Ev
  virtual void  v21(); // _ZN7S3012C33v21Ev
  virtual void  v22(); // _ZN7S3012C33v22Ev
  virtual void  v23(); // _ZN7S3012C33v23Ev
  virtual void  v24(); // _ZN7S3012C33v24Ev
  virtual void  v25(); // _ZN7S3012C33v25Ev
  virtual void  v26(); // _ZN7S3012C33v26Ev
  virtual void  v27(); // _ZN7S3012C33v27Ev
  virtual void  v28(); // _ZN7S3012C33v28Ev
  virtual void  v29(); // _ZN7S3012C33v29Ev
  virtual void  v30(); // _ZN7S3012C33v30Ev
  virtual void  v31(); // _ZN7S3012C33v31Ev
  virtual void  v32(); // _ZN7S3012C33v32Ev
  virtual void  v33(); // _ZN7S3012C33v33Ev
  virtual void  v34(); // _ZN7S3012C33v34Ev
  virtual void  v35(); // _ZN7S3012C33v35Ev
  virtual void  v36(); // _ZN7S3012C33v36Ev
  virtual void  v37(); // _ZN7S3012C33v37Ev
  virtual void  v38(); // _ZN7S3012C33v38Ev
  virtual void  v39(); // _ZN7S3012C33v39Ev
  virtual void  v40(); // _ZN7S3012C33v40Ev
  virtual void  v41(); // _ZN7S3012C33v41Ev
  virtual void  v42(); // _ZN7S3012C33v42Ev
  virtual void  v43(); // _ZN7S3012C33v43Ev
  virtual void  v44(); // _ZN7S3012C33v44Ev
  virtual void  v45(); // _ZN7S3012C33v45Ev
  virtual void  v46(); // _ZN7S3012C33v46Ev
  virtual void  v47(); // _ZN7S3012C33v47Ev
  virtual void  v48(); // _ZN7S3012C33v48Ev
  virtual void  v49(); // _ZN7S3012C33v49Ev
  virtual void  v50(); // _ZN7S3012C33v50Ev
  virtual void  v51(); // _ZN7S3012C33v51Ev
  virtual void  v52(); // _ZN7S3012C33v52Ev
  virtual void  v53(); // _ZN7S3012C33v53Ev
  virtual void  v54(); // _ZN7S3012C33v54Ev
  virtual void  v55(); // _ZN7S3012C33v55Ev
  virtual void  v56(); // _ZN7S3012C33v56Ev
  virtual void  v57(); // _ZN7S3012C33v57Ev
  virtual void  v58(); // _ZN7S3012C33v58Ev
  virtual void  v59(); // _ZN7S3012C33v59Ev
  virtual void  v60(); // _ZN7S3012C33v60Ev
  virtual void  v61(); // _ZN7S3012C33v61Ev
  virtual void  v62(); // _ZN7S3012C33v62Ev
  virtual void  v63(); // _ZN7S3012C33v63Ev
  virtual void  v64(); // _ZN7S3012C33v64Ev
  virtual void  v65(); // _ZN7S3012C33v65Ev
  virtual void  v66(); // _ZN7S3012C33v66Ev
  virtual void  v67(); // _ZN7S3012C33v67Ev
  virtual void  v68(); // _ZN7S3012C33v68Ev
  virtual void  v69(); // _ZN7S3012C33v69Ev
  virtual void  v70(); // _ZN7S3012C33v70Ev
  virtual void  v71(); // _ZN7S3012C33v71Ev
  virtual void  v72(); // _ZN7S3012C33v72Ev
  virtual void  v73(); // _ZN7S3012C33v73Ev
  S3012C3(); // tgen
};
//SIG(-1 S3012C3) 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]}


 S3012C3 ::~S3012C3(){ note_dtor("S3012C3", this);}
void  S3012C3 ::v10(){vfunc_called(this, "_ZN7S3012C33v10Ev");}
void  S3012C3 ::v11(){vfunc_called(this, "_ZN7S3012C33v11Ev");}
void  S3012C3 ::v12(){vfunc_called(this, "_ZN7S3012C33v12Ev");}
void  S3012C3 ::v13(){vfunc_called(this, "_ZN7S3012C33v13Ev");}
void  S3012C3 ::v14(){vfunc_called(this, "_ZN7S3012C33v14Ev");}
void  S3012C3 ::v15(){vfunc_called(this, "_ZN7S3012C33v15Ev");}
void  S3012C3 ::v16(){vfunc_called(this, "_ZN7S3012C33v16Ev");}
void  S3012C3 ::v17(){vfunc_called(this, "_ZN7S3012C33v17Ev");}
void  S3012C3 ::v18(){vfunc_called(this, "_ZN7S3012C33v18Ev");}
void  S3012C3 ::v19(){vfunc_called(this, "_ZN7S3012C33v19Ev");}
void  S3012C3 ::v20(){vfunc_called(this, "_ZN7S3012C33v20Ev");}
void  S3012C3 ::v21(){vfunc_called(this, "_ZN7S3012C33v21Ev");}
void  S3012C3 ::v22(){vfunc_called(this, "_ZN7S3012C33v22Ev");}
void  S3012C3 ::v23(){vfunc_called(this, "_ZN7S3012C33v23Ev");}
void  S3012C3 ::v24(){vfunc_called(this, "_ZN7S3012C33v24Ev");}
void  S3012C3 ::v25(){vfunc_called(this, "_ZN7S3012C33v25Ev");}
void  S3012C3 ::v26(){vfunc_called(this, "_ZN7S3012C33v26Ev");}
void  S3012C3 ::v27(){vfunc_called(this, "_ZN7S3012C33v27Ev");}
void  S3012C3 ::v28(){vfunc_called(this, "_ZN7S3012C33v28Ev");}
void  S3012C3 ::v29(){vfunc_called(this, "_ZN7S3012C33v29Ev");}
void  S3012C3 ::v30(){vfunc_called(this, "_ZN7S3012C33v30Ev");}
void  S3012C3 ::v31(){vfunc_called(this, "_ZN7S3012C33v31Ev");}
void  S3012C3 ::v32(){vfunc_called(this, "_ZN7S3012C33v32Ev");}
void  S3012C3 ::v33(){vfunc_called(this, "_ZN7S3012C33v33Ev");}
void  S3012C3 ::v34(){vfunc_called(this, "_ZN7S3012C33v34Ev");}
void  S3012C3 ::v35(){vfunc_called(this, "_ZN7S3012C33v35Ev");}
void  S3012C3 ::v36(){vfunc_called(this, "_ZN7S3012C33v36Ev");}
void  S3012C3 ::v37(){vfunc_called(this, "_ZN7S3012C33v37Ev");}
void  S3012C3 ::v38(){vfunc_called(this, "_ZN7S3012C33v38Ev");}
void  S3012C3 ::v39(){vfunc_called(this, "_ZN7S3012C33v39Ev");}
void  S3012C3 ::v40(){vfunc_called(this, "_ZN7S3012C33v40Ev");}
void  S3012C3 ::v41(){vfunc_called(this, "_ZN7S3012C33v41Ev");}
void  S3012C3 ::v42(){vfunc_called(this, "_ZN7S3012C33v42Ev");}
void  S3012C3 ::v43(){vfunc_called(this, "_ZN7S3012C33v43Ev");}
void  S3012C3 ::v44(){vfunc_called(this, "_ZN7S3012C33v44Ev");}
void  S3012C3 ::v45(){vfunc_called(this, "_ZN7S3012C33v45Ev");}
void  S3012C3 ::v46(){vfunc_called(this, "_ZN7S3012C33v46Ev");}
void  S3012C3 ::v47(){vfunc_called(this, "_ZN7S3012C33v47Ev");}
void  S3012C3 ::v48(){vfunc_called(this, "_ZN7S3012C33v48Ev");}
void  S3012C3 ::v49(){vfunc_called(this, "_ZN7S3012C33v49Ev");}
void  S3012C3 ::v50(){vfunc_called(this, "_ZN7S3012C33v50Ev");}
void  S3012C3 ::v51(){vfunc_called(this, "_ZN7S3012C33v51Ev");}
void  S3012C3 ::v52(){vfunc_called(this, "_ZN7S3012C33v52Ev");}
void  S3012C3 ::v53(){vfunc_called(this, "_ZN7S3012C33v53Ev");}
void  S3012C3 ::v54(){vfunc_called(this, "_ZN7S3012C33v54Ev");}
void  S3012C3 ::v55(){vfunc_called(this, "_ZN7S3012C33v55Ev");}
void  S3012C3 ::v56(){vfunc_called(this, "_ZN7S3012C33v56Ev");}
void  S3012C3 ::v57(){vfunc_called(this, "_ZN7S3012C33v57Ev");}
void  S3012C3 ::v58(){vfunc_called(this, "_ZN7S3012C33v58Ev");}
void  S3012C3 ::v59(){vfunc_called(this, "_ZN7S3012C33v59Ev");}
void  S3012C3 ::v60(){vfunc_called(this, "_ZN7S3012C33v60Ev");}
void  S3012C3 ::v61(){vfunc_called(this, "_ZN7S3012C33v61Ev");}
void  S3012C3 ::v62(){vfunc_called(this, "_ZN7S3012C33v62Ev");}
void  S3012C3 ::v63(){vfunc_called(this, "_ZN7S3012C33v63Ev");}
void  S3012C3 ::v64(){vfunc_called(this, "_ZN7S3012C33v64Ev");}
void  S3012C3 ::v65(){vfunc_called(this, "_ZN7S3012C33v65Ev");}
void  S3012C3 ::v66(){vfunc_called(this, "_ZN7S3012C33v66Ev");}
void  S3012C3 ::v67(){vfunc_called(this, "_ZN7S3012C33v67Ev");}
void  S3012C3 ::v68(){vfunc_called(this, "_ZN7S3012C33v68Ev");}
void  S3012C3 ::v69(){vfunc_called(this, "_ZN7S3012C33v69Ev");}
void  S3012C3 ::v70(){vfunc_called(this, "_ZN7S3012C33v70Ev");}
void  S3012C3 ::v71(){vfunc_called(this, "_ZN7S3012C33v71Ev");}
void  S3012C3 ::v72(){vfunc_called(this, "_ZN7S3012C33v72Ev");}
void  S3012C3 ::v73(){vfunc_called(this, "_ZN7S3012C33v73Ev");}
S3012C3 ::S3012C3(){ note_ctor("S3012C3", this);} // tgen

static void Test_S3012C3()
{
  extern Class_Descriptor cd_S3012C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S3012C3, buf);
    S3012C3 *dp, &lv = *(dp=new (buf) S3012C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S3012C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3012C3)");
    check_field_offset(lv, s3012c3f0, ABISELECT(8,4), "S3012C3.s3012c3f0");
    check_field_offset(lv, s3012c3f1, ABISELECT(16,8), "S3012C3.s3012c3f1");
    check_field_offset(lv, s3012c3f2, ABISELECT(24,16), "S3012C3.s3012c3f2");
    check_field_offset(lv, s3012c3f3, ABISELECT(56,32), "S3012C3.s3012c3f3");
    check_field_offset(lv, s3012c3f4, ABISELECT(64,40), "S3012C3.s3012c3f4");
    check_field_offset(lv, s3012c3f5, ABISELECT(72,44), "S3012C3.s3012c3f5");
    check_field_offset(lv, s3012c3f6, ABISELECT(80,52), "S3012C3.s3012c3f6");
    test_class_info(&lv, &cd_S3012C3);
    dp->~S3012C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3012C3(Test_S3012C3, "S3012C3", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN7S3012C3C1Ev();
extern void _ZN7S3012C3D1Ev();
Name_Map name_map_S3012C3[] = {
  NSPAIR(_ZN7S3012C3C1Ev),
  NSPAIR(_ZN7S3012C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S3012C3[];
extern void _ZN7S3012C3D1Ev();
extern void _ZN7S3012C3D0Ev();
extern void _ZN7S3012C33v10Ev();
extern void _ZN7S3012C33v11Ev();
extern void _ZN7S3012C33v12Ev();
extern void _ZN7S3012C33v13Ev();
extern void _ZN7S3012C33v14Ev();
extern void _ZN7S3012C33v15Ev();
extern void _ZN7S3012C33v16Ev();
extern void _ZN7S3012C33v17Ev();
extern void _ZN7S3012C33v18Ev();
extern void _ZN7S3012C33v19Ev();
extern void _ZN7S3012C33v20Ev();
extern void _ZN7S3012C33v21Ev();
extern void _ZN7S3012C33v22Ev();
extern void _ZN7S3012C33v23Ev();
extern void _ZN7S3012C33v24Ev();
extern void _ZN7S3012C33v25Ev();
extern void _ZN7S3012C33v26Ev();
extern void _ZN7S3012C33v27Ev();
extern void _ZN7S3012C33v28Ev();
extern void _ZN7S3012C33v29Ev();
extern void _ZN7S3012C33v30Ev();
extern void _ZN7S3012C33v31Ev();
extern void _ZN7S3012C33v32Ev();
extern void _ZN7S3012C33v33Ev();
extern void _ZN7S3012C33v34Ev();
extern void _ZN7S3012C33v35Ev();
extern void _ZN7S3012C33v36Ev();
extern void _ZN7S3012C33v37Ev();
extern void _ZN7S3012C33v38Ev();
extern void _ZN7S3012C33v39Ev();
extern void _ZN7S3012C33v40Ev();
extern void _ZN7S3012C33v41Ev();
extern void _ZN7S3012C33v42Ev();
extern void _ZN7S3012C33v43Ev();
extern void _ZN7S3012C33v44Ev();
extern void _ZN7S3012C33v45Ev();
extern void _ZN7S3012C33v46Ev();
extern void _ZN7S3012C33v47Ev();
extern void _ZN7S3012C33v48Ev();
extern void _ZN7S3012C33v49Ev();
extern void _ZN7S3012C33v50Ev();
extern void _ZN7S3012C33v51Ev();
extern void _ZN7S3012C33v52Ev();
extern void _ZN7S3012C33v53Ev();
extern void _ZN7S3012C33v54Ev();
extern void _ZN7S3012C33v55Ev();
extern void _ZN7S3012C33v56Ev();
extern void _ZN7S3012C33v57Ev();
extern void _ZN7S3012C33v58Ev();
extern void _ZN7S3012C33v59Ev();
extern void _ZN7S3012C33v60Ev();
extern void _ZN7S3012C33v61Ev();
extern void _ZN7S3012C33v62Ev();
extern void _ZN7S3012C33v63Ev();
extern void _ZN7S3012C33v64Ev();
extern void _ZN7S3012C33v65Ev();
extern void _ZN7S3012C33v66Ev();
extern void _ZN7S3012C33v67Ev();
extern void _ZN7S3012C33v68Ev();
extern void _ZN7S3012C33v69Ev();
extern void _ZN7S3012C33v70Ev();
extern void _ZN7S3012C33v71Ev();
extern void _ZN7S3012C33v72Ev();
extern void _ZN7S3012C33v73Ev();
static  VTBL_ENTRY vtc_S3012C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3012C3[0]),
  (VTBL_ENTRY)&_ZN7S3012C3D1Ev,
  (VTBL_ENTRY)&_ZN7S3012C3D0Ev,
  (VTBL_ENTRY)&_ZN7S3012C33v10Ev,
  (VTBL_ENTRY)&_ZN7S3012C33v11Ev,
  (VTBL_ENTRY)&_ZN7S3012C33v12Ev,
  (VTBL_ENTRY)&_ZN7S3012C33v13Ev,
  (VTBL_ENTRY)&_ZN7S3012C33v14Ev,
  (VTBL_ENTRY)&_ZN7S3012C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3012C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3012C33v17Ev,
  (VTBL_ENTRY)&_ZN7S3012C33v18Ev,
  (VTBL_ENTRY)&_ZN7S3012C33v19Ev,
  (VTBL_ENTRY)&_ZN7S3012C33v20Ev,
  (VTBL_ENTRY)&_ZN7S3012C33v21Ev,
  (VTBL_ENTRY)&_ZN7S3012C33v22Ev,
  (VTBL_ENTRY)&_ZN7S3012C33v23Ev,
  (VTBL_ENTRY)&_ZN7S3012C33v24Ev,
  (VTBL_ENTRY)&_ZN7S3012C33v25Ev,
  (VTBL_ENTRY)&_ZN7S3012C33v26Ev,
  (VTBL_ENTRY)&_ZN7S3012C33v27Ev,
  (VTBL_ENTRY)&_ZN7S3012C33v28Ev,
  (VTBL_ENTRY)&_ZN7S3012C33v29Ev,
  (VTBL_ENTRY)&_ZN7S3012C33v30Ev,
  (VTBL_ENTRY)&_ZN7S3012C33v31Ev,
  (VTBL_ENTRY)&_ZN7S3012C33v32Ev,
  (VTBL_ENTRY)&_ZN7S3012C33v33Ev,
  (VTBL_ENTRY)&_ZN7S3012C33v34Ev,
  (VTBL_ENTRY)&_ZN7S3012C33v35Ev,
  (VTBL_ENTRY)&_ZN7S3012C33v36Ev,
  (VTBL_ENTRY)&_ZN7S3012C33v37Ev,
  (VTBL_ENTRY)&_ZN7S3012C33v38Ev,
  (VTBL_ENTRY)&_ZN7S3012C33v39Ev,
  (VTBL_ENTRY)&_ZN7S3012C33v40Ev,
  (VTBL_ENTRY)&_ZN7S3012C33v41Ev,
  (VTBL_ENTRY)&_ZN7S3012C33v42Ev,
  (VTBL_ENTRY)&_ZN7S3012C33v43Ev,
  (VTBL_ENTRY)&_ZN7S3012C33v44Ev,
  (VTBL_ENTRY)&_ZN7S3012C33v45Ev,
  (VTBL_ENTRY)&_ZN7S3012C33v46Ev,
  (VTBL_ENTRY)&_ZN7S3012C33v47Ev,
  (VTBL_ENTRY)&_ZN7S3012C33v48Ev,
  (VTBL_ENTRY)&_ZN7S3012C33v49Ev,
  (VTBL_ENTRY)&_ZN7S3012C33v50Ev,
  (VTBL_ENTRY)&_ZN7S3012C33v51Ev,
  (VTBL_ENTRY)&_ZN7S3012C33v52Ev,
  (VTBL_ENTRY)&_ZN7S3012C33v53Ev,
  (VTBL_ENTRY)&_ZN7S3012C33v54Ev,
  (VTBL_ENTRY)&_ZN7S3012C33v55Ev,
  (VTBL_ENTRY)&_ZN7S3012C33v56Ev,
  (VTBL_ENTRY)&_ZN7S3012C33v57Ev,
  (VTBL_ENTRY)&_ZN7S3012C33v58Ev,
  (VTBL_ENTRY)&_ZN7S3012C33v59Ev,
  (VTBL_ENTRY)&_ZN7S3012C33v60Ev,
  (VTBL_ENTRY)&_ZN7S3012C33v61Ev,
  (VTBL_ENTRY)&_ZN7S3012C33v62Ev,
  (VTBL_ENTRY)&_ZN7S3012C33v63Ev,
  (VTBL_ENTRY)&_ZN7S3012C33v64Ev,
  (VTBL_ENTRY)&_ZN7S3012C33v65Ev,
  (VTBL_ENTRY)&_ZN7S3012C33v66Ev,
  (VTBL_ENTRY)&_ZN7S3012C33v67Ev,
  (VTBL_ENTRY)&_ZN7S3012C33v68Ev,
  (VTBL_ENTRY)&_ZN7S3012C33v69Ev,
  (VTBL_ENTRY)&_ZN7S3012C33v70Ev,
  (VTBL_ENTRY)&_ZN7S3012C33v71Ev,
  (VTBL_ENTRY)&_ZN7S3012C33v72Ev,
  (VTBL_ENTRY)&_ZN7S3012C33v73Ev,
};
extern VTBL_ENTRY _ZTI7S3012C3[];
extern  VTBL_ENTRY _ZTV7S3012C3[];
Class_Descriptor cd_S3012C3 = {  "S3012C3", // class name
  0,0,//no base classes
  &(vtc_S3012C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI7S3012C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S3012C3),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  S3012C2  : S3012C3 {
  unsigned int s3012c2f0:1;
  unsigned int s3012c2f1:1;
  unsigned int s3012c2f2:1;
  unsigned int s3012c2f3:1;
  unsigned int s3012c2f4:1;
  unsigned int s3012c2f5:1;
  unsigned int s3012c2f6:1;
  ::S3625C32 s3012c2f7;
  virtual  ~S3012C2(); // _ZN7S3012C2D1Ev
  virtual void  v74(); // _ZN7S3012C23v74Ev
  virtual void  v75(); // _ZN7S3012C23v75Ev
  virtual void  v76(); // _ZN7S3012C23v76Ev
  virtual void  v77(); // _ZN7S3012C23v77Ev
  virtual void  v78(); // _ZN7S3012C23v78Ev
  virtual void  v79(); // _ZN7S3012C23v79Ev
  virtual void  v80(); // _ZN7S3012C23v80Ev
  virtual void  v81(); // _ZN7S3012C23v81Ev
  virtual void  v82(); // _ZN7S3012C23v82Ev
  virtual void  v83(); // _ZN7S3012C23v83Ev
  virtual void  v84(); // _ZN7S3012C23v84Ev
  virtual void  v85(); // _ZN7S3012C23v85Ev
  virtual void  v86(); // _ZN7S3012C23v86Ev
  virtual void  v87(); // _ZN7S3012C23v87Ev
  virtual void  v88(); // _ZN7S3012C23v88Ev
  virtual void  v89(); // _ZN7S3012C23v89Ev
  virtual void  v90(); // _ZN7S3012C23v90Ev
  virtual void  v91(); // _ZN7S3012C23v91Ev
  virtual void  v92(); // _ZN7S3012C23v92Ev
  virtual void  v93(); // _ZN7S3012C23v93Ev
  S3012C2(); // tgen
};
//SIG(-1 S3012C2) C1{ BC2{ 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 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 Fi FL Fp[4] Fi[2] Fp FC3{ m Fi[2]} Fp[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 FC4{ m}}


 S3012C2 ::~S3012C2(){ note_dtor("S3012C2", this);}
void  S3012C2 ::v74(){vfunc_called(this, "_ZN7S3012C23v74Ev");}
void  S3012C2 ::v75(){vfunc_called(this, "_ZN7S3012C23v75Ev");}
void  S3012C2 ::v76(){vfunc_called(this, "_ZN7S3012C23v76Ev");}
void  S3012C2 ::v77(){vfunc_called(this, "_ZN7S3012C23v77Ev");}
void  S3012C2 ::v78(){vfunc_called(this, "_ZN7S3012C23v78Ev");}
void  S3012C2 ::v79(){vfunc_called(this, "_ZN7S3012C23v79Ev");}
void  S3012C2 ::v80(){vfunc_called(this, "_ZN7S3012C23v80Ev");}
void  S3012C2 ::v81(){vfunc_called(this, "_ZN7S3012C23v81Ev");}
void  S3012C2 ::v82(){vfunc_called(this, "_ZN7S3012C23v82Ev");}
void  S3012C2 ::v83(){vfunc_called(this, "_ZN7S3012C23v83Ev");}
void  S3012C2 ::v84(){vfunc_called(this, "_ZN7S3012C23v84Ev");}
void  S3012C2 ::v85(){vfunc_called(this, "_ZN7S3012C23v85Ev");}
void  S3012C2 ::v86(){vfunc_called(this, "_ZN7S3012C23v86Ev");}
void  S3012C2 ::v87(){vfunc_called(this, "_ZN7S3012C23v87Ev");}
void  S3012C2 ::v88(){vfunc_called(this, "_ZN7S3012C23v88Ev");}
void  S3012C2 ::v89(){vfunc_called(this, "_ZN7S3012C23v89Ev");}
void  S3012C2 ::v90(){vfunc_called(this, "_ZN7S3012C23v90Ev");}
void  S3012C2 ::v91(){vfunc_called(this, "_ZN7S3012C23v91Ev");}
void  S3012C2 ::v92(){vfunc_called(this, "_ZN7S3012C23v92Ev");}
void  S3012C2 ::v93(){vfunc_called(this, "_ZN7S3012C23v93Ev");}
S3012C2 ::S3012C2(){ note_ctor("S3012C2", this);} // tgen

static void Test_S3012C2()
{
  extern Class_Descriptor cd_S3012C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(14,17)];
    init_test(&cd_S3012C2, buf);
    S3012C2 *dp, &lv = *(dp=new (buf) S3012C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(104,64), "sizeof(S3012C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3012C2)");
    check_base_class_offset(lv, (S3012C3*), 0, "S3012C2");
    set_bf_and_test(lv, s3012c2f0, ABISELECT(96,60), 0, 1, 1, "S3012C2");
    set_bf_and_test(lv, s3012c2f1, ABISELECT(96,60), 1, 1, 1, "S3012C2");
    set_bf_and_test(lv, s3012c2f2, ABISELECT(96,60), 2, 1, 1, "S3012C2");
    set_bf_and_test(lv, s3012c2f3, ABISELECT(96,60), 3, 1, 1, "S3012C2");
    set_bf_and_test(lv, s3012c2f4, ABISELECT(96,60), 4, 1, 1, "S3012C2");
    set_bf_and_test(lv, s3012c2f5, ABISELECT(96,60), 5, 1, 1, "S3012C2");
    set_bf_and_test(lv, s3012c2f6, ABISELECT(96,60), 6, 1, 1, "S3012C2");
    check_field_offset(lv, s3012c2f7, ABISELECT(97,61), "S3012C2.s3012c2f7");
    test_class_info(&lv, &cd_S3012C2);
    dp->~S3012C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3012C2(Test_S3012C2, "S3012C2", ABISELECT(104,64));

#else // __cplusplus

extern void _ZN7S3012C2C1Ev();
extern void _ZN7S3012C2D1Ev();
Name_Map name_map_S3012C2[] = {
  NSPAIR(_ZN7S3012C2C1Ev),
  NSPAIR(_ZN7S3012C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3012C3;
extern VTBL_ENTRY _ZTI7S3012C3[];
extern  VTBL_ENTRY _ZTV7S3012C3[];
static Base_Class bases_S3012C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3012C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI7S3012C2[];
extern void _ZN7S3012C2D1Ev();
extern void _ZN7S3012C2D0Ev();
extern void _ZN7S3012C33v10Ev();
extern void _ZN7S3012C33v11Ev();
extern void _ZN7S3012C33v12Ev();
extern void _ZN7S3012C33v13Ev();
extern void _ZN7S3012C33v14Ev();
extern void _ZN7S3012C33v15Ev();
extern void _ZN7S3012C33v16Ev();
extern void _ZN7S3012C33v17Ev();
extern void _ZN7S3012C33v18Ev();
extern void _ZN7S3012C33v19Ev();
extern void _ZN7S3012C33v20Ev();
extern void _ZN7S3012C33v21Ev();
extern void _ZN7S3012C33v22Ev();
extern void _ZN7S3012C33v23Ev();
extern void _ZN7S3012C33v24Ev();
extern void _ZN7S3012C33v25Ev();
extern void _ZN7S3012C33v26Ev();
extern void _ZN7S3012C33v27Ev();
extern void _ZN7S3012C33v28Ev();
extern void _ZN7S3012C33v29Ev();
extern void _ZN7S3012C33v30Ev();
extern void _ZN7S3012C33v31Ev();
extern void _ZN7S3012C33v32Ev();
extern void _ZN7S3012C33v33Ev();
extern void _ZN7S3012C33v34Ev();
extern void _ZN7S3012C33v35Ev();
extern void _ZN7S3012C33v36Ev();
extern void _ZN7S3012C33v37Ev();
extern void _ZN7S3012C33v38Ev();
extern void _ZN7S3012C33v39Ev();
extern void _ZN7S3012C33v40Ev();
extern void _ZN7S3012C33v41Ev();
extern void _ZN7S3012C33v42Ev();
extern void _ZN7S3012C33v43Ev();
extern void _ZN7S3012C33v44Ev();
extern void _ZN7S3012C33v45Ev();
extern void _ZN7S3012C33v46Ev();
extern void _ZN7S3012C33v47Ev();
extern void _ZN7S3012C33v48Ev();
extern void _ZN7S3012C33v49Ev();
extern void _ZN7S3012C33v50Ev();
extern void _ZN7S3012C33v51Ev();
extern void _ZN7S3012C33v52Ev();
extern void _ZN7S3012C33v53Ev();
extern void _ZN7S3012C33v54Ev();
extern void _ZN7S3012C33v55Ev();
extern void _ZN7S3012C33v56Ev();
extern void _ZN7S3012C33v57Ev();
extern void _ZN7S3012C33v58Ev();
extern void _ZN7S3012C33v59Ev();
extern void _ZN7S3012C33v60Ev();
extern void _ZN7S3012C33v61Ev();
extern void _ZN7S3012C33v62Ev();
extern void _ZN7S3012C33v63Ev();
extern void _ZN7S3012C33v64Ev();
extern void _ZN7S3012C33v65Ev();
extern void _ZN7S3012C33v66Ev();
extern void _ZN7S3012C33v67Ev();
extern void _ZN7S3012C33v68Ev();
extern void _ZN7S3012C33v69Ev();
extern void _ZN7S3012C33v70Ev();
extern void _ZN7S3012C33v71Ev();
extern void _ZN7S3012C33v72Ev();
extern void _ZN7S3012C33v73Ev();
extern void _ZN7S3012C23v74Ev();
extern void _ZN7S3012C23v75Ev();
extern void _ZN7S3012C23v76Ev();
extern void _ZN7S3012C23v77Ev();
extern void _ZN7S3012C23v78Ev();
extern void _ZN7S3012C23v79Ev();
extern void _ZN7S3012C23v80Ev();
extern void _ZN7S3012C23v81Ev();
extern void _ZN7S3012C23v82Ev();
extern void _ZN7S3012C23v83Ev();
extern void _ZN7S3012C23v84Ev();
extern void _ZN7S3012C23v85Ev();
extern void _ZN7S3012C23v86Ev();
extern void _ZN7S3012C23v87Ev();
extern void _ZN7S3012C23v88Ev();
extern void _ZN7S3012C23v89Ev();
extern void _ZN7S3012C23v90Ev();
extern void _ZN7S3012C23v91Ev();
extern void _ZN7S3012C23v92Ev();
extern void _ZN7S3012C23v93Ev();
static  VTBL_ENTRY vtc_S3012C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3012C2[0]),
  (VTBL_ENTRY)&_ZN7S3012C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3012C2D0Ev,
  (VTBL_ENTRY)&_ZN7S3012C33v10Ev,
  (VTBL_ENTRY)&_ZN7S3012C33v11Ev,
  (VTBL_ENTRY)&_ZN7S3012C33v12Ev,
  (VTBL_ENTRY)&_ZN7S3012C33v13Ev,
  (VTBL_ENTRY)&_ZN7S3012C33v14Ev,
  (VTBL_ENTRY)&_ZN7S3012C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3012C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3012C33v17Ev,
  (VTBL_ENTRY)&_ZN7S3012C33v18Ev,
  (VTBL_ENTRY)&_ZN7S3012C33v19Ev,
  (VTBL_ENTRY)&_ZN7S3012C33v20Ev,
  (VTBL_ENTRY)&_ZN7S3012C33v21Ev,
  (VTBL_ENTRY)&_ZN7S3012C33v22Ev,
  (VTBL_ENTRY)&_ZN7S3012C33v23Ev,
  (VTBL_ENTRY)&_ZN7S3012C33v24Ev,
  (VTBL_ENTRY)&_ZN7S3012C33v25Ev,
  (VTBL_ENTRY)&_ZN7S3012C33v26Ev,
  (VTBL_ENTRY)&_ZN7S3012C33v27Ev,
  (VTBL_ENTRY)&_ZN7S3012C33v28Ev,
  (VTBL_ENTRY)&_ZN7S3012C33v29Ev,
  (VTBL_ENTRY)&_ZN7S3012C33v30Ev,
  (VTBL_ENTRY)&_ZN7S3012C33v31Ev,
  (VTBL_ENTRY)&_ZN7S3012C33v32Ev,
  (VTBL_ENTRY)&_ZN7S3012C33v33Ev,
  (VTBL_ENTRY)&_ZN7S3012C33v34Ev,
  (VTBL_ENTRY)&_ZN7S3012C33v35Ev,
  (VTBL_ENTRY)&_ZN7S3012C33v36Ev,
  (VTBL_ENTRY)&_ZN7S3012C33v37Ev,
  (VTBL_ENTRY)&_ZN7S3012C33v38Ev,
  (VTBL_ENTRY)&_ZN7S3012C33v39Ev,
  (VTBL_ENTRY)&_ZN7S3012C33v40Ev,
  (VTBL_ENTRY)&_ZN7S3012C33v41Ev,
  (VTBL_ENTRY)&_ZN7S3012C33v42Ev,
  (VTBL_ENTRY)&_ZN7S3012C33v43Ev,
  (VTBL_ENTRY)&_ZN7S3012C33v44Ev,
  (VTBL_ENTRY)&_ZN7S3012C33v45Ev,
  (VTBL_ENTRY)&_ZN7S3012C33v46Ev,
  (VTBL_ENTRY)&_ZN7S3012C33v47Ev,
  (VTBL_ENTRY)&_ZN7S3012C33v48Ev,
  (VTBL_ENTRY)&_ZN7S3012C33v49Ev,
  (VTBL_ENTRY)&_ZN7S3012C33v50Ev,
  (VTBL_ENTRY)&_ZN7S3012C33v51Ev,
  (VTBL_ENTRY)&_ZN7S3012C33v52Ev,
  (VTBL_ENTRY)&_ZN7S3012C33v53Ev,
  (VTBL_ENTRY)&_ZN7S3012C33v54Ev,
  (VTBL_ENTRY)&_ZN7S3012C33v55Ev,
  (VTBL_ENTRY)&_ZN7S3012C33v56Ev,
  (VTBL_ENTRY)&_ZN7S3012C33v57Ev,
  (VTBL_ENTRY)&_ZN7S3012C33v58Ev,
  (VTBL_ENTRY)&_ZN7S3012C33v59Ev,
  (VTBL_ENTRY)&_ZN7S3012C33v60Ev,
  (VTBL_ENTRY)&_ZN7S3012C33v61Ev,
  (VTBL_ENTRY)&_ZN7S3012C33v62Ev,
  (VTBL_ENTRY)&_ZN7S3012C33v63Ev,
  (VTBL_ENTRY)&_ZN7S3012C33v64Ev,
  (VTBL_ENTRY)&_ZN7S3012C33v65Ev,
  (VTBL_ENTRY)&_ZN7S3012C33v66Ev,
  (VTBL_ENTRY)&_ZN7S3012C33v67Ev,
  (VTBL_ENTRY)&_ZN7S3012C33v68Ev,
  (VTBL_ENTRY)&_ZN7S3012C33v69Ev,
  (VTBL_ENTRY)&_ZN7S3012C33v70Ev,
  (VTBL_ENTRY)&_ZN7S3012C33v71Ev,
  (VTBL_ENTRY)&_ZN7S3012C33v72Ev,
  (VTBL_ENTRY)&_ZN7S3012C33v73Ev,
  (VTBL_ENTRY)&_ZN7S3012C23v74Ev,
  (VTBL_ENTRY)&_ZN7S3012C23v75Ev,
  (VTBL_ENTRY)&_ZN7S3012C23v76Ev,
  (VTBL_ENTRY)&_ZN7S3012C23v77Ev,
  (VTBL_ENTRY)&_ZN7S3012C23v78Ev,
  (VTBL_ENTRY)&_ZN7S3012C23v79Ev,
  (VTBL_ENTRY)&_ZN7S3012C23v80Ev,
  (VTBL_ENTRY)&_ZN7S3012C23v81Ev,
  (VTBL_ENTRY)&_ZN7S3012C23v82Ev,
  (VTBL_ENTRY)&_ZN7S3012C23v83Ev,
  (VTBL_ENTRY)&_ZN7S3012C23v84Ev,
  (VTBL_ENTRY)&_ZN7S3012C23v85Ev,
  (VTBL_ENTRY)&_ZN7S3012C23v86Ev,
  (VTBL_ENTRY)&_ZN7S3012C23v87Ev,
  (VTBL_ENTRY)&_ZN7S3012C23v88Ev,
  (VTBL_ENTRY)&_ZN7S3012C23v89Ev,
  (VTBL_ENTRY)&_ZN7S3012C23v90Ev,
  (VTBL_ENTRY)&_ZN7S3012C23v91Ev,
  (VTBL_ENTRY)&_ZN7S3012C23v92Ev,
  (VTBL_ENTRY)&_ZN7S3012C23v93Ev,
};
extern VTBL_ENTRY _ZTI7S3012C2[];
extern  VTBL_ENTRY _ZTV7S3012C2[];
Class_Descriptor cd_S3012C2 = {  "S3012C2", // class name
  bases_S3012C2, 1,
  &(vtc_S3012C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(104,64), // object size
  NSPAIRA(_ZTI7S3012C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3012C2),88, //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  S3012C1  : S3012C2 {
  void *s3012c1f0;
  char s3012c1f1[4];
  unsigned int s3012c1f2:1;
  unsigned int s3012c1f3:1;
  unsigned int s3012c1f4:1;
  unsigned int s3012c1f5:1;
  unsigned int s3012c1f6:1;
  unsigned int s3012c1f7:1;
  unsigned int s3012c1f8:1;
  unsigned int s3012c1f9:1;
  unsigned int s3012c1f10:1;
  unsigned int s3012c1f11:1;
  int s3012c1f12[4];
  ::S1292C12 s3012c1f13;
  ::S674C42 s3012c1f14;
  int s3012c1f15[5];
  ::S3625C32 s3012c1f16;
  virtual  ~S3012C1(); // _ZN7S3012C1D1Ev
  virtual void  v1(); // _ZN7S3012C12v1Ev
  virtual void  v2(); // _ZN7S3012C12v2Ev
  virtual void  v3(); // _ZN7S3012C12v3Ev
  virtual void  v4(); // _ZN7S3012C12v4Ev
  virtual void  v5(); // _ZN7S3012C12v5Ev
  virtual void  v6(); // _ZN7S3012C12v6Ev
  virtual void  v7(); // _ZN7S3012C12v7Ev
  virtual void  v8(); // _ZN7S3012C12v8Ev
  virtual void  v9(); // _ZN7S3012C12v9Ev
  S3012C1(); // tgen
};
//SIG(1 S3012C1) C1{ BC2{ BC3{ vd 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 Fi FL Fp[4] Fi[2] Fp FC4{ m Fi[2]} Fp[2]} vd v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 v91 v92 v93 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 FC5{ m}} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 Fp Fc[4] Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[4] FC6{ BC7{ m Fc[4] FC8{ BC9{ BC10{ m Fp Fi[2]}}} Fi[2]} Fp} FC11{ BC12{ BC10}} Fi[5] FC5}


 S3012C1 ::~S3012C1(){ note_dtor("S3012C1", this);}
void  S3012C1 ::v1(){vfunc_called(this, "_ZN7S3012C12v1Ev");}
void  S3012C1 ::v2(){vfunc_called(this, "_ZN7S3012C12v2Ev");}
void  S3012C1 ::v3(){vfunc_called(this, "_ZN7S3012C12v3Ev");}
void  S3012C1 ::v4(){vfunc_called(this, "_ZN7S3012C12v4Ev");}
void  S3012C1 ::v5(){vfunc_called(this, "_ZN7S3012C12v5Ev");}
void  S3012C1 ::v6(){vfunc_called(this, "_ZN7S3012C12v6Ev");}
void  S3012C1 ::v7(){vfunc_called(this, "_ZN7S3012C12v7Ev");}
void  S3012C1 ::v8(){vfunc_called(this, "_ZN7S3012C12v8Ev");}
void  S3012C1 ::v9(){vfunc_called(this, "_ZN7S3012C12v9Ev");}
S3012C1 ::S3012C1(){ note_ctor("S3012C1", this);} // tgen

static void Test_S3012C1()
{
  extern Class_Descriptor cd_S3012C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(28,40)];
    init_test(&cd_S3012C1, buf);
    S3012C1 *dp, &lv = *(dp=new (buf) S3012C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(216,156), "sizeof(S3012C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3012C1)");
    check_base_class_offset(lv, (S3012C3*)(S3012C2*), 0, "S3012C1");
    check_base_class_offset(lv, (S3012C2*), 0, "S3012C1");
    check_field_offset(lv, s3012c1f0, ABISELECT(104,64), "S3012C1.s3012c1f0");
    check_field_offset(lv, s3012c1f1, ABISELECT(112,68), "S3012C1.s3012c1f1");
    set_bf_and_test(lv, s3012c1f2, ABISELECT(116,72), 0, 1, 1, "S3012C1");
    set_bf_and_test(lv, s3012c1f3, ABISELECT(116,72), 1, 1, 1, "S3012C1");
    set_bf_and_test(lv, s3012c1f4, ABISELECT(116,72), 2, 1, 1, "S3012C1");
    set_bf_and_test(lv, s3012c1f5, ABISELECT(116,72), 3, 1, 1, "S3012C1");
    set_bf_and_test(lv, s3012c1f6, ABISELECT(116,72), 4, 1, 1, "S3012C1");
    set_bf_and_test(lv, s3012c1f7, ABISELECT(116,72), 5, 1, 1, "S3012C1");
    set_bf_and_test(lv, s3012c1f8, ABISELECT(116,72), 6, 1, 1, "S3012C1");
    set_bf_and_test(lv, s3012c1f9, ABISELECT(116,72), 7, 1, 1, "S3012C1");
    set_bf_and_test(lv, s3012c1f10, ABISELECT(117,73), 0, 1, 1, "S3012C1");
    set_bf_and_test(lv, s3012c1f11, ABISELECT(117,73), 1, 1, 1, "S3012C1");
    check_field_offset(lv, s3012c1f12, ABISELECT(120,76), "S3012C1.s3012c1f12");
    check_field_offset(lv, s3012c1f13, ABISELECT(136,92), "S3012C1.s3012c1f13");
    check_field_offset(lv, s3012c1f14, ABISELECT(176,120), "S3012C1.s3012c1f14");
    check_field_offset(lv, s3012c1f15, ABISELECT(192,132), "S3012C1.s3012c1f15");
    check_field_offset(lv, s3012c1f16, ABISELECT(212,152), "S3012C1.s3012c1f16");
    test_class_info(&lv, &cd_S3012C1);
    dp->~S3012C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3012C1(Test_S3012C1, "S3012C1", ABISELECT(216,156));

#else // __cplusplus

extern void _ZN7S3012C1C1Ev();
extern void _ZN7S3012C1D1Ev();
Name_Map name_map_S3012C1[] = {
  NSPAIR(_ZN7S3012C1C1Ev),
  NSPAIR(_ZN7S3012C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3012C3;
extern VTBL_ENTRY _ZTI7S3012C3[];
extern  VTBL_ENTRY _ZTV7S3012C3[];
extern Class_Descriptor cd_S3012C2;
extern VTBL_ENTRY _ZTI7S3012C2[];
extern  VTBL_ENTRY _ZTV7S3012C2[];
static Base_Class bases_S3012C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3012C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S3012C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S3012C1[];
extern void _ZN7S3012C1D1Ev();
extern void _ZN7S3012C1D0Ev();
extern void _ZN7S3012C33v10Ev();
extern void _ZN7S3012C33v11Ev();
extern void _ZN7S3012C33v12Ev();
extern void _ZN7S3012C33v13Ev();
extern void _ZN7S3012C33v14Ev();
extern void _ZN7S3012C33v15Ev();
extern void _ZN7S3012C33v16Ev();
extern void _ZN7S3012C33v17Ev();
extern void _ZN7S3012C33v18Ev();
extern void _ZN7S3012C33v19Ev();
extern void _ZN7S3012C33v20Ev();
extern void _ZN7S3012C33v21Ev();
extern void _ZN7S3012C33v22Ev();
extern void _ZN7S3012C33v23Ev();
extern void _ZN7S3012C33v24Ev();
extern void _ZN7S3012C33v25Ev();
extern void _ZN7S3012C33v26Ev();
extern void _ZN7S3012C33v27Ev();
extern void _ZN7S3012C33v28Ev();
extern void _ZN7S3012C33v29Ev();
extern void _ZN7S3012C33v30Ev();
extern void _ZN7S3012C33v31Ev();
extern void _ZN7S3012C33v32Ev();
extern void _ZN7S3012C33v33Ev();
extern void _ZN7S3012C33v34Ev();
extern void _ZN7S3012C33v35Ev();
extern void _ZN7S3012C33v36Ev();
extern void _ZN7S3012C33v37Ev();
extern void _ZN7S3012C33v38Ev();
extern void _ZN7S3012C33v39Ev();
extern void _ZN7S3012C33v40Ev();
extern void _ZN7S3012C33v41Ev();
extern void _ZN7S3012C33v42Ev();
extern void _ZN7S3012C33v43Ev();
extern void _ZN7S3012C33v44Ev();
extern void _ZN7S3012C33v45Ev();
extern void _ZN7S3012C33v46Ev();
extern void _ZN7S3012C33v47Ev();
extern void _ZN7S3012C33v48Ev();
extern void _ZN7S3012C33v49Ev();
extern void _ZN7S3012C33v50Ev();
extern void _ZN7S3012C33v51Ev();
extern void _ZN7S3012C33v52Ev();
extern void _ZN7S3012C33v53Ev();
extern void _ZN7S3012C33v54Ev();
extern void _ZN7S3012C33v55Ev();
extern void _ZN7S3012C33v56Ev();
extern void _ZN7S3012C33v57Ev();
extern void _ZN7S3012C33v58Ev();
extern void _ZN7S3012C33v59Ev();
extern void _ZN7S3012C33v60Ev();
extern void _ZN7S3012C33v61Ev();
extern void _ZN7S3012C33v62Ev();
extern void _ZN7S3012C33v63Ev();
extern void _ZN7S3012C33v64Ev();
extern void _ZN7S3012C33v65Ev();
extern void _ZN7S3012C33v66Ev();
extern void _ZN7S3012C33v67Ev();
extern void _ZN7S3012C33v68Ev();
extern void _ZN7S3012C33v69Ev();
extern void _ZN7S3012C33v70Ev();
extern void _ZN7S3012C33v71Ev();
extern void _ZN7S3012C33v72Ev();
extern void _ZN7S3012C33v73Ev();
extern void _ZN7S3012C23v74Ev();
extern void _ZN7S3012C23v75Ev();
extern void _ZN7S3012C23v76Ev();
extern void _ZN7S3012C23v77Ev();
extern void _ZN7S3012C23v78Ev();
extern void _ZN7S3012C23v79Ev();
extern void _ZN7S3012C23v80Ev();
extern void _ZN7S3012C23v81Ev();
extern void _ZN7S3012C23v82Ev();
extern void _ZN7S3012C23v83Ev();
extern void _ZN7S3012C23v84Ev();
extern void _ZN7S3012C23v85Ev();
extern void _ZN7S3012C23v86Ev();
extern void _ZN7S3012C23v87Ev();
extern void _ZN7S3012C23v88Ev();
extern void _ZN7S3012C23v89Ev();
extern void _ZN7S3012C23v90Ev();
extern void _ZN7S3012C23v91Ev();
extern void _ZN7S3012C23v92Ev();
extern void _ZN7S3012C23v93Ev();
extern void _ZN7S3012C12v1Ev();
extern void _ZN7S3012C12v2Ev();
extern void _ZN7S3012C12v3Ev();
extern void _ZN7S3012C12v4Ev();
extern void _ZN7S3012C12v5Ev();
extern void _ZN7S3012C12v6Ev();
extern void _ZN7S3012C12v7Ev();
extern void _ZN7S3012C12v8Ev();
extern void _ZN7S3012C12v9Ev();
static  VTBL_ENTRY vtc_S3012C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3012C1[0]),
  (VTBL_ENTRY)&_ZN7S3012C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3012C1D0Ev,
  (VTBL_ENTRY)&_ZN7S3012C33v10Ev,
  (VTBL_ENTRY)&_ZN7S3012C33v11Ev,
  (VTBL_ENTRY)&_ZN7S3012C33v12Ev,
  (VTBL_ENTRY)&_ZN7S3012C33v13Ev,
  (VTBL_ENTRY)&_ZN7S3012C33v14Ev,
  (VTBL_ENTRY)&_ZN7S3012C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3012C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3012C33v17Ev,
  (VTBL_ENTRY)&_ZN7S3012C33v18Ev,
  (VTBL_ENTRY)&_ZN7S3012C33v19Ev,
  (VTBL_ENTRY)&_ZN7S3012C33v20Ev,
  (VTBL_ENTRY)&_ZN7S3012C33v21Ev,
  (VTBL_ENTRY)&_ZN7S3012C33v22Ev,
  (VTBL_ENTRY)&_ZN7S3012C33v23Ev,
  (VTBL_ENTRY)&_ZN7S3012C33v24Ev,
  (VTBL_ENTRY)&_ZN7S3012C33v25Ev,
  (VTBL_ENTRY)&_ZN7S3012C33v26Ev,
  (VTBL_ENTRY)&_ZN7S3012C33v27Ev,
  (VTBL_ENTRY)&_ZN7S3012C33v28Ev,
  (VTBL_ENTRY)&_ZN7S3012C33v29Ev,
  (VTBL_ENTRY)&_ZN7S3012C33v30Ev,
  (VTBL_ENTRY)&_ZN7S3012C33v31Ev,
  (VTBL_ENTRY)&_ZN7S3012C33v32Ev,
  (VTBL_ENTRY)&_ZN7S3012C33v33Ev,
  (VTBL_ENTRY)&_ZN7S3012C33v34Ev,
  (VTBL_ENTRY)&_ZN7S3012C33v35Ev,
  (VTBL_ENTRY)&_ZN7S3012C33v36Ev,
  (VTBL_ENTRY)&_ZN7S3012C33v37Ev,
  (VTBL_ENTRY)&_ZN7S3012C33v38Ev,
  (VTBL_ENTRY)&_ZN7S3012C33v39Ev,
  (VTBL_ENTRY)&_ZN7S3012C33v40Ev,
  (VTBL_ENTRY)&_ZN7S3012C33v41Ev,
  (VTBL_ENTRY)&_ZN7S3012C33v42Ev,
  (VTBL_ENTRY)&_ZN7S3012C33v43Ev,
  (VTBL_ENTRY)&_ZN7S3012C33v44Ev,
  (VTBL_ENTRY)&_ZN7S3012C33v45Ev,
  (VTBL_ENTRY)&_ZN7S3012C33v46Ev,
  (VTBL_ENTRY)&_ZN7S3012C33v47Ev,
  (VTBL_ENTRY)&_ZN7S3012C33v48Ev,
  (VTBL_ENTRY)&_ZN7S3012C33v49Ev,
  (VTBL_ENTRY)&_ZN7S3012C33v50Ev,
  (VTBL_ENTRY)&_ZN7S3012C33v51Ev,
  (VTBL_ENTRY)&_ZN7S3012C33v52Ev,
  (VTBL_ENTRY)&_ZN7S3012C33v53Ev,
  (VTBL_ENTRY)&_ZN7S3012C33v54Ev,
  (VTBL_ENTRY)&_ZN7S3012C33v55Ev,
  (VTBL_ENTRY)&_ZN7S3012C33v56Ev,
  (VTBL_ENTRY)&_ZN7S3012C33v57Ev,
  (VTBL_ENTRY)&_ZN7S3012C33v58Ev,
  (VTBL_ENTRY)&_ZN7S3012C33v59Ev,
  (VTBL_ENTRY)&_ZN7S3012C33v60Ev,
  (VTBL_ENTRY)&_ZN7S3012C33v61Ev,
  (VTBL_ENTRY)&_ZN7S3012C33v62Ev,
  (VTBL_ENTRY)&_ZN7S3012C33v63Ev,
  (VTBL_ENTRY)&_ZN7S3012C33v64Ev,
  (VTBL_ENTRY)&_ZN7S3012C33v65Ev,
  (VTBL_ENTRY)&_ZN7S3012C33v66Ev,
  (VTBL_ENTRY)&_ZN7S3012C33v67Ev,
  (VTBL_ENTRY)&_ZN7S3012C33v68Ev,
  (VTBL_ENTRY)&_ZN7S3012C33v69Ev,
  (VTBL_ENTRY)&_ZN7S3012C33v70Ev,
  (VTBL_ENTRY)&_ZN7S3012C33v71Ev,
  (VTBL_ENTRY)&_ZN7S3012C33v72Ev,
  (VTBL_ENTRY)&_ZN7S3012C33v73Ev,
  (VTBL_ENTRY)&_ZN7S3012C23v74Ev,
  (VTBL_ENTRY)&_ZN7S3012C23v75Ev,
  (VTBL_ENTRY)&_ZN7S3012C23v76Ev,
  (VTBL_ENTRY)&_ZN7S3012C23v77Ev,
  (VTBL_ENTRY)&_ZN7S3012C23v78Ev,
  (VTBL_ENTRY)&_ZN7S3012C23v79Ev,
  (VTBL_ENTRY)&_ZN7S3012C23v80Ev,
  (VTBL_ENTRY)&_ZN7S3012C23v81Ev,
  (VTBL_ENTRY)&_ZN7S3012C23v82Ev,
  (VTBL_ENTRY)&_ZN7S3012C23v83Ev,
  (VTBL_ENTRY)&_ZN7S3012C23v84Ev,
  (VTBL_ENTRY)&_ZN7S3012C23v85Ev,
  (VTBL_ENTRY)&_ZN7S3012C23v86Ev,
  (VTBL_ENTRY)&_ZN7S3012C23v87Ev,
  (VTBL_ENTRY)&_ZN7S3012C23v88Ev,
  (VTBL_ENTRY)&_ZN7S3012C23v89Ev,
  (VTBL_ENTRY)&_ZN7S3012C23v90Ev,
  (VTBL_ENTRY)&_ZN7S3012C23v91Ev,
  (VTBL_ENTRY)&_ZN7S3012C23v92Ev,
  (VTBL_ENTRY)&_ZN7S3012C23v93Ev,
  (VTBL_ENTRY)&_ZN7S3012C12v1Ev,
  (VTBL_ENTRY)&_ZN7S3012C12v2Ev,
  (VTBL_ENTRY)&_ZN7S3012C12v3Ev,
  (VTBL_ENTRY)&_ZN7S3012C12v4Ev,
  (VTBL_ENTRY)&_ZN7S3012C12v5Ev,
  (VTBL_ENTRY)&_ZN7S3012C12v6Ev,
  (VTBL_ENTRY)&_ZN7S3012C12v7Ev,
  (VTBL_ENTRY)&_ZN7S3012C12v8Ev,
  (VTBL_ENTRY)&_ZN7S3012C12v9Ev,
};
extern VTBL_ENTRY _ZTI7S3012C1[];
extern  VTBL_ENTRY _ZTV7S3012C1[];
Class_Descriptor cd_S3012C1 = {  "S3012C1", // class name
  bases_S3012C1, 2,
  &(vtc_S3012C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(216,156), // object size
  NSPAIRA(_ZTI7S3012C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3012C1),97, //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  S1599C4  {
  int s1599c4f0;
  __tsi64 s1599c4f1;
  void *s1599c4f2[4];
  int s1599c4f3[2];
  void *s1599c4f4;
  ::S674C6_nt s1599c4f5;
  void *s1599c4f6[2];
  virtual  ~S1599C4(); // _ZN7S1599C4D1Ev
  virtual void  v9(); // _ZN7S1599C42v9Ev
  virtual void  v10(); // _ZN7S1599C43v10Ev
  virtual void  v11(); // _ZN7S1599C43v11Ev
  virtual void  v12(); // _ZN7S1599C43v12Ev
  virtual void  v13(); // _ZN7S1599C43v13Ev
  virtual void  v14(); // _ZN7S1599C43v14Ev
  virtual void  v15(); // _ZN7S1599C43v15Ev
  virtual void  v16(); // _ZN7S1599C43v16Ev
  virtual void  v17(); // _ZN7S1599C43v17Ev
  virtual void  v18(); // _ZN7S1599C43v18Ev
  virtual void  v19(); // _ZN7S1599C43v19Ev
  virtual void  v20(); // _ZN7S1599C43v20Ev
  virtual void  v21(); // _ZN7S1599C43v21Ev
  virtual void  v22(); // _ZN7S1599C43v22Ev
  virtual void  v23(); // _ZN7S1599C43v23Ev
  virtual void  v24(); // _ZN7S1599C43v24Ev
  virtual void  v25(); // _ZN7S1599C43v25Ev
  virtual void  v26(); // _ZN7S1599C43v26Ev
  virtual void  v27(); // _ZN7S1599C43v27Ev
  virtual void  v28(); // _ZN7S1599C43v28Ev
  virtual void  v29(); // _ZN7S1599C43v29Ev
  virtual void  v30(); // _ZN7S1599C43v30Ev
  virtual void  v31(); // _ZN7S1599C43v31Ev
  virtual void  v32(); // _ZN7S1599C43v32Ev
  virtual void  v33(); // _ZN7S1599C43v33Ev
  virtual void  v34(); // _ZN7S1599C43v34Ev
  virtual void  v35(); // _ZN7S1599C43v35Ev
  virtual void  v36(); // _ZN7S1599C43v36Ev
  virtual void  v37(); // _ZN7S1599C43v37Ev
  virtual void  v38(); // _ZN7S1599C43v38Ev
  virtual void  v39(); // _ZN7S1599C43v39Ev
  virtual void  v40(); // _ZN7S1599C43v40Ev
  virtual void  v41(); // _ZN7S1599C43v41Ev
  virtual void  v42(); // _ZN7S1599C43v42Ev
  virtual void  v43(); // _ZN7S1599C43v43Ev
  virtual void  v44(); // _ZN7S1599C43v44Ev
  virtual void  v45(); // _ZN7S1599C43v45Ev
  virtual void  v46(); // _ZN7S1599C43v46Ev
  virtual void  v47(); // _ZN7S1599C43v47Ev
  virtual void  v48(); // _ZN7S1599C43v48Ev
  virtual void  v49(); // _ZN7S1599C43v49Ev
  virtual void  v50(); // _ZN7S1599C43v50Ev
  virtual void  v51(); // _ZN7S1599C43v51Ev
  virtual void  v52(); // _ZN7S1599C43v52Ev
  virtual void  v53(); // _ZN7S1599C43v53Ev
  virtual void  v54(); // _ZN7S1599C43v54Ev
  virtual void  v55(); // _ZN7S1599C43v55Ev
  virtual void  v56(); // _ZN7S1599C43v56Ev
  virtual void  v57(); // _ZN7S1599C43v57Ev
  virtual void  v58(); // _ZN7S1599C43v58Ev
  virtual void  v59(); // _ZN7S1599C43v59Ev
  virtual void  v60(); // _ZN7S1599C43v60Ev
  virtual void  v61(); // _ZN7S1599C43v61Ev
  virtual void  v62(); // _ZN7S1599C43v62Ev
  virtual void  v63(); // _ZN7S1599C43v63Ev
  virtual void  v64(); // _ZN7S1599C43v64Ev
  virtual void  v65(); // _ZN7S1599C43v65Ev
  virtual void  v66(); // _ZN7S1599C43v66Ev
  virtual void  v67(); // _ZN7S1599C43v67Ev
  virtual void  v68(); // _ZN7S1599C43v68Ev
  virtual void  v69(); // _ZN7S1599C43v69Ev
  virtual void  v70(); // _ZN7S1599C43v70Ev
  virtual void  v71(); // _ZN7S1599C43v71Ev
  virtual void  v72(); // _ZN7S1599C43v72Ev
  S1599C4(); // tgen
};
//SIG(-1 S1599C4) 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]}


 S1599C4 ::~S1599C4(){ note_dtor("S1599C4", this);}
void  S1599C4 ::v9(){vfunc_called(this, "_ZN7S1599C42v9Ev");}
void  S1599C4 ::v10(){vfunc_called(this, "_ZN7S1599C43v10Ev");}
void  S1599C4 ::v11(){vfunc_called(this, "_ZN7S1599C43v11Ev");}
void  S1599C4 ::v12(){vfunc_called(this, "_ZN7S1599C43v12Ev");}
void  S1599C4 ::v13(){vfunc_called(this, "_ZN7S1599C43v13Ev");}
void  S1599C4 ::v14(){vfunc_called(this, "_ZN7S1599C43v14Ev");}
void  S1599C4 ::v15(){vfunc_called(this, "_ZN7S1599C43v15Ev");}
void  S1599C4 ::v16(){vfunc_called(this, "_ZN7S1599C43v16Ev");}
void  S1599C4 ::v17(){vfunc_called(this, "_ZN7S1599C43v17Ev");}
void  S1599C4 ::v18(){vfunc_called(this, "_ZN7S1599C43v18Ev");}
void  S1599C4 ::v19(){vfunc_called(this, "_ZN7S1599C43v19Ev");}
void  S1599C4 ::v20(){vfunc_called(this, "_ZN7S1599C43v20Ev");}
void  S1599C4 ::v21(){vfunc_called(this, "_ZN7S1599C43v21Ev");}
void  S1599C4 ::v22(){vfunc_called(this, "_ZN7S1599C43v22Ev");}
void  S1599C4 ::v23(){vfunc_called(this, "_ZN7S1599C43v23Ev");}
void  S1599C4 ::v24(){vfunc_called(this, "_ZN7S1599C43v24Ev");}
void  S1599C4 ::v25(){vfunc_called(this, "_ZN7S1599C43v25Ev");}
void  S1599C4 ::v26(){vfunc_called(this, "_ZN7S1599C43v26Ev");}
void  S1599C4 ::v27(){vfunc_called(this, "_ZN7S1599C43v27Ev");}
void  S1599C4 ::v28(){vfunc_called(this, "_ZN7S1599C43v28Ev");}
void  S1599C4 ::v29(){vfunc_called(this, "_ZN7S1599C43v29Ev");}
void  S1599C4 ::v30(){vfunc_called(this, "_ZN7S1599C43v30Ev");}
void  S1599C4 ::v31(){vfunc_called(this, "_ZN7S1599C43v31Ev");}
void  S1599C4 ::v32(){vfunc_called(this, "_ZN7S1599C43v32Ev");}
void  S1599C4 ::v33(){vfunc_called(this, "_ZN7S1599C43v33Ev");}
void  S1599C4 ::v34(){vfunc_called(this, "_ZN7S1599C43v34Ev");}
void  S1599C4 ::v35(){vfunc_called(this, "_ZN7S1599C43v35Ev");}
void  S1599C4 ::v36(){vfunc_called(this, "_ZN7S1599C43v36Ev");}
void  S1599C4 ::v37(){vfunc_called(this, "_ZN7S1599C43v37Ev");}
void  S1599C4 ::v38(){vfunc_called(this, "_ZN7S1599C43v38Ev");}
void  S1599C4 ::v39(){vfunc_called(this, "_ZN7S1599C43v39Ev");}
void  S1599C4 ::v40(){vfunc_called(this, "_ZN7S1599C43v40Ev");}
void  S1599C4 ::v41(){vfunc_called(this, "_ZN7S1599C43v41Ev");}
void  S1599C4 ::v42(){vfunc_called(this, "_ZN7S1599C43v42Ev");}
void  S1599C4 ::v43(){vfunc_called(this, "_ZN7S1599C43v43Ev");}
void  S1599C4 ::v44(){vfunc_called(this, "_ZN7S1599C43v44Ev");}
void  S1599C4 ::v45(){vfunc_called(this, "_ZN7S1599C43v45Ev");}
void  S1599C4 ::v46(){vfunc_called(this, "_ZN7S1599C43v46Ev");}
void  S1599C4 ::v47(){vfunc_called(this, "_ZN7S1599C43v47Ev");}
void  S1599C4 ::v48(){vfunc_called(this, "_ZN7S1599C43v48Ev");}
void  S1599C4 ::v49(){vfunc_called(this, "_ZN7S1599C43v49Ev");}
void  S1599C4 ::v50(){vfunc_called(this, "_ZN7S1599C43v50Ev");}
void  S1599C4 ::v51(){vfunc_called(this, "_ZN7S1599C43v51Ev");}
void  S1599C4 ::v52(){vfunc_called(this, "_ZN7S1599C43v52Ev");}
void  S1599C4 ::v53(){vfunc_called(this, "_ZN7S1599C43v53Ev");}
void  S1599C4 ::v54(){vfunc_called(this, "_ZN7S1599C43v54Ev");}
void  S1599C4 ::v55(){vfunc_called(this, "_ZN7S1599C43v55Ev");}
void  S1599C4 ::v56(){vfunc_called(this, "_ZN7S1599C43v56Ev");}
void  S1599C4 ::v57(){vfunc_called(this, "_ZN7S1599C43v57Ev");}
void  S1599C4 ::v58(){vfunc_called(this, "_ZN7S1599C43v58Ev");}
void  S1599C4 ::v59(){vfunc_called(this, "_ZN7S1599C43v59Ev");}
void  S1599C4 ::v60(){vfunc_called(this, "_ZN7S1599C43v60Ev");}
void  S1599C4 ::v61(){vfunc_called(this, "_ZN7S1599C43v61Ev");}
void  S1599C4 ::v62(){vfunc_called(this, "_ZN7S1599C43v62Ev");}
void  S1599C4 ::v63(){vfunc_called(this, "_ZN7S1599C43v63Ev");}
void  S1599C4 ::v64(){vfunc_called(this, "_ZN7S1599C43v64Ev");}
void  S1599C4 ::v65(){vfunc_called(this, "_ZN7S1599C43v65Ev");}
void  S1599C4 ::v66(){vfunc_called(this, "_ZN7S1599C43v66Ev");}
void  S1599C4 ::v67(){vfunc_called(this, "_ZN7S1599C43v67Ev");}
void  S1599C4 ::v68(){vfunc_called(this, "_ZN7S1599C43v68Ev");}
void  S1599C4 ::v69(){vfunc_called(this, "_ZN7S1599C43v69Ev");}
void  S1599C4 ::v70(){vfunc_called(this, "_ZN7S1599C43v70Ev");}
void  S1599C4 ::v71(){vfunc_called(this, "_ZN7S1599C43v71Ev");}
void  S1599C4 ::v72(){vfunc_called(this, "_ZN7S1599C43v72Ev");}
S1599C4 ::S1599C4(){ note_ctor("S1599C4", this);} // tgen

static void Test_S1599C4()
{
  extern Class_Descriptor cd_S1599C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S1599C4, buf);
    S1599C4 *dp, &lv = *(dp=new (buf) S1599C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S1599C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1599C4)");
    check_field_offset(lv, s1599c4f0, ABISELECT(8,4), "S1599C4.s1599c4f0");
    check_field_offset(lv, s1599c4f1, ABISELECT(16,8), "S1599C4.s1599c4f1");
    check_field_offset(lv, s1599c4f2, ABISELECT(24,16), "S1599C4.s1599c4f2");
    check_field_offset(lv, s1599c4f3, ABISELECT(56,32), "S1599C4.s1599c4f3");
    check_field_offset(lv, s1599c4f4, ABISELECT(64,40), "S1599C4.s1599c4f4");
    check_field_offset(lv, s1599c4f5, ABISELECT(72,44), "S1599C4.s1599c4f5");
    check_field_offset(lv, s1599c4f6, ABISELECT(80,52), "S1599C4.s1599c4f6");
    test_class_info(&lv, &cd_S1599C4);
    dp->~S1599C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1599C4(Test_S1599C4, "S1599C4", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN7S1599C4C1Ev();
extern void _ZN7S1599C4D1Ev();
Name_Map name_map_S1599C4[] = {
  NSPAIR(_ZN7S1599C4C1Ev),
  NSPAIR(_ZN7S1599C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S1599C4[];
extern void _ZN7S1599C4D1Ev();
extern void _ZN7S1599C4D0Ev();
extern void _ZN7S1599C42v9Ev();
extern void _ZN7S1599C43v10Ev();
extern void _ZN7S1599C43v11Ev();
extern void _ZN7S1599C43v12Ev();
extern void _ZN7S1599C43v13Ev();
extern void _ZN7S1599C43v14Ev();
extern void _ZN7S1599C43v15Ev();
extern void _ZN7S1599C43v16Ev();
extern void _ZN7S1599C43v17Ev();
extern void _ZN7S1599C43v18Ev();
extern void _ZN7S1599C43v19Ev();
extern void _ZN7S1599C43v20Ev();
extern void _ZN7S1599C43v21Ev();
extern void _ZN7S1599C43v22Ev();
extern void _ZN7S1599C43v23Ev();
extern void _ZN7S1599C43v24Ev();
extern void _ZN7S1599C43v25Ev();
extern void _ZN7S1599C43v26Ev();
extern void _ZN7S1599C43v27Ev();
extern void _ZN7S1599C43v28Ev();
extern void _ZN7S1599C43v29Ev();
extern void _ZN7S1599C43v30Ev();
extern void _ZN7S1599C43v31Ev();
extern void _ZN7S1599C43v32Ev();
extern void _ZN7S1599C43v33Ev();
extern void _ZN7S1599C43v34Ev();
extern void _ZN7S1599C43v35Ev();
extern void _ZN7S1599C43v36Ev();
extern void _ZN7S1599C43v37Ev();
extern void _ZN7S1599C43v38Ev();
extern void _ZN7S1599C43v39Ev();
extern void _ZN7S1599C43v40Ev();
extern void _ZN7S1599C43v41Ev();
extern void _ZN7S1599C43v42Ev();
extern void _ZN7S1599C43v43Ev();
extern void _ZN7S1599C43v44Ev();
extern void _ZN7S1599C43v45Ev();
extern void _ZN7S1599C43v46Ev();
extern void _ZN7S1599C43v47Ev();
extern void _ZN7S1599C43v48Ev();
extern void _ZN7S1599C43v49Ev();
extern void _ZN7S1599C43v50Ev();
extern void _ZN7S1599C43v51Ev();
extern void _ZN7S1599C43v52Ev();
extern void _ZN7S1599C43v53Ev();
extern void _ZN7S1599C43v54Ev();
extern void _ZN7S1599C43v55Ev();
extern void _ZN7S1599C43v56Ev();
extern void _ZN7S1599C43v57Ev();
extern void _ZN7S1599C43v58Ev();
extern void _ZN7S1599C43v59Ev();
extern void _ZN7S1599C43v60Ev();
extern void _ZN7S1599C43v61Ev();
extern void _ZN7S1599C43v62Ev();
extern void _ZN7S1599C43v63Ev();
extern void _ZN7S1599C43v64Ev();
extern void _ZN7S1599C43v65Ev();
extern void _ZN7S1599C43v66Ev();
extern void _ZN7S1599C43v67Ev();
extern void _ZN7S1599C43v68Ev();
extern void _ZN7S1599C43v69Ev();
extern void _ZN7S1599C43v70Ev();
extern void _ZN7S1599C43v71Ev();
extern void _ZN7S1599C43v72Ev();
static  VTBL_ENTRY vtc_S1599C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1599C4[0]),
  (VTBL_ENTRY)&_ZN7S1599C4D1Ev,
  (VTBL_ENTRY)&_ZN7S1599C4D0Ev,
  (VTBL_ENTRY)&_ZN7S1599C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1599C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1599C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1599C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1599C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1599C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1599C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1599C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1599C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1599C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1599C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1599C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1599C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1599C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1599C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1599C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1599C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1599C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1599C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1599C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1599C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1599C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1599C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1599C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1599C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1599C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1599C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1599C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1599C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1599C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1599C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1599C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1599C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1599C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1599C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1599C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1599C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1599C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1599C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1599C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1599C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1599C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1599C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1599C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1599C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1599C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1599C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1599C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1599C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1599C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1599C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1599C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1599C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1599C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1599C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1599C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1599C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1599C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1599C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1599C43v68Ev,
  (VTBL_ENTRY)&_ZN7S1599C43v69Ev,
  (VTBL_ENTRY)&_ZN7S1599C43v70Ev,
  (VTBL_ENTRY)&_ZN7S1599C43v71Ev,
  (VTBL_ENTRY)&_ZN7S1599C43v72Ev,
};
extern VTBL_ENTRY _ZTI7S1599C4[];
extern  VTBL_ENTRY _ZTV7S1599C4[];
Class_Descriptor cd_S1599C4 = {  "S1599C4", // class name
  0,0,//no base classes
  &(vtc_S1599C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI7S1599C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S1599C4),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  S1599C3  : S1599C4 {
  unsigned int s1599c3f0:1;
  unsigned int s1599c3f1:1;
  unsigned int s1599c3f2:1;
  unsigned int s1599c3f3:1;
  unsigned int s1599c3f4:1;
  unsigned int s1599c3f5:1;
  unsigned int s1599c3f6:1;
  ::S3625C32 s1599c3f7;
  virtual  ~S1599C3(); // _ZN7S1599C3D1Ev
  virtual void  v73(); // _ZN7S1599C33v73Ev
  virtual void  v74(); // _ZN7S1599C33v74Ev
  virtual void  v75(); // _ZN7S1599C33v75Ev
  virtual void  v76(); // _ZN7S1599C33v76Ev
  virtual void  v77(); // _ZN7S1599C33v77Ev
  virtual void  v78(); // _ZN7S1599C33v78Ev
  virtual void  v79(); // _ZN7S1599C33v79Ev
  virtual void  v80(); // _ZN7S1599C33v80Ev
  virtual void  v81(); // _ZN7S1599C33v81Ev
  virtual void  v82(); // _ZN7S1599C33v82Ev
  virtual void  v83(); // _ZN7S1599C33v83Ev
  virtual void  v84(); // _ZN7S1599C33v84Ev
  virtual void  v85(); // _ZN7S1599C33v85Ev
  virtual void  v86(); // _ZN7S1599C33v86Ev
  virtual void  v87(); // _ZN7S1599C33v87Ev
  virtual void  v88(); // _ZN7S1599C33v88Ev
  virtual void  v89(); // _ZN7S1599C33v89Ev
  virtual void  v90(); // _ZN7S1599C33v90Ev
  virtual void  v91(); // _ZN7S1599C33v91Ev
  virtual void  v92(); // _ZN7S1599C33v92Ev
  S1599C3(); // tgen
};
//SIG(-1 S1599C3) C1{ BC2{ 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 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 Fi FL Fp[4] Fi[2] Fp FC3{ m Fi[2]} Fp[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 FC4{ m}}


 S1599C3 ::~S1599C3(){ note_dtor("S1599C3", this);}
void  S1599C3 ::v73(){vfunc_called(this, "_ZN7S1599C33v73Ev");}
void  S1599C3 ::v74(){vfunc_called(this, "_ZN7S1599C33v74Ev");}
void  S1599C3 ::v75(){vfunc_called(this, "_ZN7S1599C33v75Ev");}
void  S1599C3 ::v76(){vfunc_called(this, "_ZN7S1599C33v76Ev");}
void  S1599C3 ::v77(){vfunc_called(this, "_ZN7S1599C33v77Ev");}
void  S1599C3 ::v78(){vfunc_called(this, "_ZN7S1599C33v78Ev");}
void  S1599C3 ::v79(){vfunc_called(this, "_ZN7S1599C33v79Ev");}
void  S1599C3 ::v80(){vfunc_called(this, "_ZN7S1599C33v80Ev");}
void  S1599C3 ::v81(){vfunc_called(this, "_ZN7S1599C33v81Ev");}
void  S1599C3 ::v82(){vfunc_called(this, "_ZN7S1599C33v82Ev");}
void  S1599C3 ::v83(){vfunc_called(this, "_ZN7S1599C33v83Ev");}
void  S1599C3 ::v84(){vfunc_called(this, "_ZN7S1599C33v84Ev");}
void  S1599C3 ::v85(){vfunc_called(this, "_ZN7S1599C33v85Ev");}
void  S1599C3 ::v86(){vfunc_called(this, "_ZN7S1599C33v86Ev");}
void  S1599C3 ::v87(){vfunc_called(this, "_ZN7S1599C33v87Ev");}
void  S1599C3 ::v88(){vfunc_called(this, "_ZN7S1599C33v88Ev");}
void  S1599C3 ::v89(){vfunc_called(this, "_ZN7S1599C33v89Ev");}
void  S1599C3 ::v90(){vfunc_called(this, "_ZN7S1599C33v90Ev");}
void  S1599C3 ::v91(){vfunc_called(this, "_ZN7S1599C33v91Ev");}
void  S1599C3 ::v92(){vfunc_called(this, "_ZN7S1599C33v92Ev");}
S1599C3 ::S1599C3(){ note_ctor("S1599C3", this);} // tgen

static void Test_S1599C3()
{
  extern Class_Descriptor cd_S1599C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(14,17)];
    init_test(&cd_S1599C3, buf);
    S1599C3 *dp, &lv = *(dp=new (buf) S1599C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(104,64), "sizeof(S1599C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1599C3)");
    check_base_class_offset(lv, (S1599C4*), 0, "S1599C3");
    set_bf_and_test(lv, s1599c3f0, ABISELECT(96,60), 0, 1, 1, "S1599C3");
    set_bf_and_test(lv, s1599c3f1, ABISELECT(96,60), 1, 1, 1, "S1599C3");
    set_bf_and_test(lv, s1599c3f2, ABISELECT(96,60), 2, 1, 1, "S1599C3");
    set_bf_and_test(lv, s1599c3f3, ABISELECT(96,60), 3, 1, 1, "S1599C3");
    set_bf_and_test(lv, s1599c3f4, ABISELECT(96,60), 4, 1, 1, "S1599C3");
    set_bf_and_test(lv, s1599c3f5, ABISELECT(96,60), 5, 1, 1, "S1599C3");
    set_bf_and_test(lv, s1599c3f6, ABISELECT(96,60), 6, 1, 1, "S1599C3");
    check_field_offset(lv, s1599c3f7, ABISELECT(97,61), "S1599C3.s1599c3f7");
    test_class_info(&lv, &cd_S1599C3);
    dp->~S1599C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1599C3(Test_S1599C3, "S1599C3", ABISELECT(104,64));

#else // __cplusplus

extern void _ZN7S1599C3C1Ev();
extern void _ZN7S1599C3D1Ev();
Name_Map name_map_S1599C3[] = {
  NSPAIR(_ZN7S1599C3C1Ev),
  NSPAIR(_ZN7S1599C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1599C4;
extern VTBL_ENTRY _ZTI7S1599C4[];
extern  VTBL_ENTRY _ZTV7S1599C4[];
static Base_Class bases_S1599C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1599C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI7S1599C3[];
extern void _ZN7S1599C3D1Ev();
extern void _ZN7S1599C3D0Ev();
extern void _ZN7S1599C42v9Ev();
extern void _ZN7S1599C43v10Ev();
extern void _ZN7S1599C43v11Ev();
extern void _ZN7S1599C43v12Ev();
extern void _ZN7S1599C43v13Ev();
extern void _ZN7S1599C43v14Ev();
extern void _ZN7S1599C43v15Ev();
extern void _ZN7S1599C43v16Ev();
extern void _ZN7S1599C43v17Ev();
extern void _ZN7S1599C43v18Ev();
extern void _ZN7S1599C43v19Ev();
extern void _ZN7S1599C43v20Ev();
extern void _ZN7S1599C43v21Ev();
extern void _ZN7S1599C43v22Ev();
extern void _ZN7S1599C43v23Ev();
extern void _ZN7S1599C43v24Ev();
extern void _ZN7S1599C43v25Ev();
extern void _ZN7S1599C43v26Ev();
extern void _ZN7S1599C43v27Ev();
extern void _ZN7S1599C43v28Ev();
extern void _ZN7S1599C43v29Ev();
extern void _ZN7S1599C43v30Ev();
extern void _ZN7S1599C43v31Ev();
extern void _ZN7S1599C43v32Ev();
extern void _ZN7S1599C43v33Ev();
extern void _ZN7S1599C43v34Ev();
extern void _ZN7S1599C43v35Ev();
extern void _ZN7S1599C43v36Ev();
extern void _ZN7S1599C43v37Ev();
extern void _ZN7S1599C43v38Ev();
extern void _ZN7S1599C43v39Ev();
extern void _ZN7S1599C43v40Ev();
extern void _ZN7S1599C43v41Ev();
extern void _ZN7S1599C43v42Ev();
extern void _ZN7S1599C43v43Ev();
extern void _ZN7S1599C43v44Ev();
extern void _ZN7S1599C43v45Ev();
extern void _ZN7S1599C43v46Ev();
extern void _ZN7S1599C43v47Ev();
extern void _ZN7S1599C43v48Ev();
extern void _ZN7S1599C43v49Ev();
extern void _ZN7S1599C43v50Ev();
extern void _ZN7S1599C43v51Ev();
extern void _ZN7S1599C43v52Ev();
extern void _ZN7S1599C43v53Ev();
extern void _ZN7S1599C43v54Ev();
extern void _ZN7S1599C43v55Ev();
extern void _ZN7S1599C43v56Ev();
extern void _ZN7S1599C43v57Ev();
extern void _ZN7S1599C43v58Ev();
extern void _ZN7S1599C43v59Ev();
extern void _ZN7S1599C43v60Ev();
extern void _ZN7S1599C43v61Ev();
extern void _ZN7S1599C43v62Ev();
extern void _ZN7S1599C43v63Ev();
extern void _ZN7S1599C43v64Ev();
extern void _ZN7S1599C43v65Ev();
extern void _ZN7S1599C43v66Ev();
extern void _ZN7S1599C43v67Ev();
extern void _ZN7S1599C43v68Ev();
extern void _ZN7S1599C43v69Ev();
extern void _ZN7S1599C43v70Ev();
extern void _ZN7S1599C43v71Ev();
extern void _ZN7S1599C43v72Ev();
extern void _ZN7S1599C33v73Ev();
extern void _ZN7S1599C33v74Ev();
extern void _ZN7S1599C33v75Ev();
extern void _ZN7S1599C33v76Ev();
extern void _ZN7S1599C33v77Ev();
extern void _ZN7S1599C33v78Ev();
extern void _ZN7S1599C33v79Ev();
extern void _ZN7S1599C33v80Ev();
extern void _ZN7S1599C33v81Ev();
extern void _ZN7S1599C33v82Ev();
extern void _ZN7S1599C33v83Ev();
extern void _ZN7S1599C33v84Ev();
extern void _ZN7S1599C33v85Ev();
extern void _ZN7S1599C33v86Ev();
extern void _ZN7S1599C33v87Ev();
extern void _ZN7S1599C33v88Ev();
extern void _ZN7S1599C33v89Ev();
extern void _ZN7S1599C33v90Ev();
extern void _ZN7S1599C33v91Ev();
extern void _ZN7S1599C33v92Ev();
static  VTBL_ENTRY vtc_S1599C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1599C3[0]),
  (VTBL_ENTRY)&_ZN7S1599C3D1Ev,
  (VTBL_ENTRY)&_ZN7S1599C3D0Ev,
  (VTBL_ENTRY)&_ZN7S1599C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1599C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1599C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1599C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1599C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1599C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1599C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1599C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1599C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1599C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1599C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1599C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1599C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1599C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1599C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1599C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1599C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1599C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1599C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1599C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1599C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1599C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1599C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1599C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1599C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1599C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1599C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1599C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1599C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1599C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1599C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1599C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1599C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1599C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1599C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1599C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1599C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1599C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1599C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1599C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1599C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1599C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1599C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1599C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1599C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1599C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1599C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1599C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1599C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1599C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1599C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1599C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1599C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1599C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1599C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1599C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1599C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1599C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1599C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1599C43v68Ev,
  (VTBL_ENTRY)&_ZN7S1599C43v69Ev,
  (VTBL_ENTRY)&_ZN7S1599C43v70Ev,
  (VTBL_ENTRY)&_ZN7S1599C43v71Ev,
  (VTBL_ENTRY)&_ZN7S1599C43v72Ev,
  (VTBL_ENTRY)&_ZN7S1599C33v73Ev,
  (VTBL_ENTRY)&_ZN7S1599C33v74Ev,
  (VTBL_ENTRY)&_ZN7S1599C33v75Ev,
  (VTBL_ENTRY)&_ZN7S1599C33v76Ev,
  (VTBL_ENTRY)&_ZN7S1599C33v77Ev,
  (VTBL_ENTRY)&_ZN7S1599C33v78Ev,
  (VTBL_ENTRY)&_ZN7S1599C33v79Ev,
  (VTBL_ENTRY)&_ZN7S1599C33v80Ev,
  (VTBL_ENTRY)&_ZN7S1599C33v81Ev,
  (VTBL_ENTRY)&_ZN7S1599C33v82Ev,
  (VTBL_ENTRY)&_ZN7S1599C33v83Ev,
  (VTBL_ENTRY)&_ZN7S1599C33v84Ev,
  (VTBL_ENTRY)&_ZN7S1599C33v85Ev,
  (VTBL_ENTRY)&_ZN7S1599C33v86Ev,
  (VTBL_ENTRY)&_ZN7S1599C33v87Ev,
  (VTBL_ENTRY)&_ZN7S1599C33v88Ev,
  (VTBL_ENTRY)&_ZN7S1599C33v89Ev,
  (VTBL_ENTRY)&_ZN7S1599C33v90Ev,
  (VTBL_ENTRY)&_ZN7S1599C33v91Ev,
  (VTBL_ENTRY)&_ZN7S1599C33v92Ev,
};
extern VTBL_ENTRY _ZTI7S1599C3[];
extern  VTBL_ENTRY _ZTV7S1599C3[];
Class_Descriptor cd_S1599C3 = {  "S1599C3", // class name
  bases_S1599C3, 1,
  &(vtc_S1599C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(104,64), // object size
  NSPAIRA(_ZTI7S1599C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1599C3),88, //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  S1599C2  : S1599C3 {
  ::S674C42 s1599c2f0;
  virtual  ~S1599C2(); // _ZN7S1599C2D1Ev
  virtual void  v93(); // _ZN7S1599C23v93Ev
  virtual void  v94(); // _ZN7S1599C23v94Ev
  virtual void  v95(); // _ZN7S1599C23v95Ev
  virtual void  v96(); // _ZN7S1599C23v96Ev
  S1599C2(); // tgen
};
//SIG(-1 S1599C2) C1{ BC2{ BC3{ 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 FC4{ m Fi[2]} Fp[2]} vd v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 FC5{ m}} vd v1 v2 v3 v4 FC6{ BC7{ BC8{ m Fp Fi[2]}}}}


 S1599C2 ::~S1599C2(){ note_dtor("S1599C2", this);}
void  S1599C2 ::v93(){vfunc_called(this, "_ZN7S1599C23v93Ev");}
void  S1599C2 ::v94(){vfunc_called(this, "_ZN7S1599C23v94Ev");}
void  S1599C2 ::v95(){vfunc_called(this, "_ZN7S1599C23v95Ev");}
void  S1599C2 ::v96(){vfunc_called(this, "_ZN7S1599C23v96Ev");}
S1599C2 ::S1599C2(){ note_ctor("S1599C2", this);} // tgen

static void Test_S1599C2()
{
  extern Class_Descriptor cd_S1599C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(16,20)];
    init_test(&cd_S1599C2, buf);
    S1599C2 *dp, &lv = *(dp=new (buf) S1599C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(120,76), "sizeof(S1599C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1599C2)");
    check_base_class_offset(lv, (S1599C4*)(S1599C3*), 0, "S1599C2");
    check_base_class_offset(lv, (S1599C3*), 0, "S1599C2");
    check_field_offset(lv, s1599c2f0, ABISELECT(104,64), "S1599C2.s1599c2f0");
    test_class_info(&lv, &cd_S1599C2);
    dp->~S1599C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1599C2(Test_S1599C2, "S1599C2", ABISELECT(120,76));

#else // __cplusplus

extern void _ZN7S1599C2C1Ev();
extern void _ZN7S1599C2D1Ev();
Name_Map name_map_S1599C2[] = {
  NSPAIR(_ZN7S1599C2C1Ev),
  NSPAIR(_ZN7S1599C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1599C4;
extern VTBL_ENTRY _ZTI7S1599C4[];
extern  VTBL_ENTRY _ZTV7S1599C4[];
extern Class_Descriptor cd_S1599C3;
extern VTBL_ENTRY _ZTI7S1599C3[];
extern  VTBL_ENTRY _ZTV7S1599C3[];
static Base_Class bases_S1599C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1599C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S1599C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S1599C2[];
extern void _ZN7S1599C2D1Ev();
extern void _ZN7S1599C2D0Ev();
extern void _ZN7S1599C42v9Ev();
extern void _ZN7S1599C43v10Ev();
extern void _ZN7S1599C43v11Ev();
extern void _ZN7S1599C43v12Ev();
extern void _ZN7S1599C43v13Ev();
extern void _ZN7S1599C43v14Ev();
extern void _ZN7S1599C43v15Ev();
extern void _ZN7S1599C43v16Ev();
extern void _ZN7S1599C43v17Ev();
extern void _ZN7S1599C43v18Ev();
extern void _ZN7S1599C43v19Ev();
extern void _ZN7S1599C43v20Ev();
extern void _ZN7S1599C43v21Ev();
extern void _ZN7S1599C43v22Ev();
extern void _ZN7S1599C43v23Ev();
extern void _ZN7S1599C43v24Ev();
extern void _ZN7S1599C43v25Ev();
extern void _ZN7S1599C43v26Ev();
extern void _ZN7S1599C43v27Ev();
extern void _ZN7S1599C43v28Ev();
extern void _ZN7S1599C43v29Ev();
extern void _ZN7S1599C43v30Ev();
extern void _ZN7S1599C43v31Ev();
extern void _ZN7S1599C43v32Ev();
extern void _ZN7S1599C43v33Ev();
extern void _ZN7S1599C43v34Ev();
extern void _ZN7S1599C43v35Ev();
extern void _ZN7S1599C43v36Ev();
extern void _ZN7S1599C43v37Ev();
extern void _ZN7S1599C43v38Ev();
extern void _ZN7S1599C43v39Ev();
extern void _ZN7S1599C43v40Ev();
extern void _ZN7S1599C43v41Ev();
extern void _ZN7S1599C43v42Ev();
extern void _ZN7S1599C43v43Ev();
extern void _ZN7S1599C43v44Ev();
extern void _ZN7S1599C43v45Ev();
extern void _ZN7S1599C43v46Ev();
extern void _ZN7S1599C43v47Ev();
extern void _ZN7S1599C43v48Ev();
extern void _ZN7S1599C43v49Ev();
extern void _ZN7S1599C43v50Ev();
extern void _ZN7S1599C43v51Ev();
extern void _ZN7S1599C43v52Ev();
extern void _ZN7S1599C43v53Ev();
extern void _ZN7S1599C43v54Ev();
extern void _ZN7S1599C43v55Ev();
extern void _ZN7S1599C43v56Ev();
extern void _ZN7S1599C43v57Ev();
extern void _ZN7S1599C43v58Ev();
extern void _ZN7S1599C43v59Ev();
extern void _ZN7S1599C43v60Ev();
extern void _ZN7S1599C43v61Ev();
extern void _ZN7S1599C43v62Ev();
extern void _ZN7S1599C43v63Ev();
extern void _ZN7S1599C43v64Ev();
extern void _ZN7S1599C43v65Ev();
extern void _ZN7S1599C43v66Ev();
extern void _ZN7S1599C43v67Ev();
extern void _ZN7S1599C43v68Ev();
extern void _ZN7S1599C43v69Ev();
extern void _ZN7S1599C43v70Ev();
extern void _ZN7S1599C43v71Ev();
extern void _ZN7S1599C43v72Ev();
extern void _ZN7S1599C33v73Ev();
extern void _ZN7S1599C33v74Ev();
extern void _ZN7S1599C33v75Ev();
extern void _ZN7S1599C33v76Ev();
extern void _ZN7S1599C33v77Ev();
extern void _ZN7S1599C33v78Ev();
extern void _ZN7S1599C33v79Ev();
extern void _ZN7S1599C33v80Ev();
extern void _ZN7S1599C33v81Ev();
extern void _ZN7S1599C33v82Ev();
extern void _ZN7S1599C33v83Ev();
extern void _ZN7S1599C33v84Ev();
extern void _ZN7S1599C33v85Ev();
extern void _ZN7S1599C33v86Ev();
extern void _ZN7S1599C33v87Ev();
extern void _ZN7S1599C33v88Ev();
extern void _ZN7S1599C33v89Ev();
extern void _ZN7S1599C33v90Ev();
extern void _ZN7S1599C33v91Ev();
extern void _ZN7S1599C33v92Ev();
extern void _ZN7S1599C23v93Ev();
extern void _ZN7S1599C23v94Ev();
extern void _ZN7S1599C23v95Ev();
extern void _ZN7S1599C23v96Ev();
static  VTBL_ENTRY vtc_S1599C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1599C2[0]),
  (VTBL_ENTRY)&_ZN7S1599C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1599C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1599C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1599C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1599C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1599C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1599C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1599C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1599C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1599C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1599C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1599C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1599C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1599C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1599C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1599C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1599C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1599C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1599C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1599C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1599C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1599C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1599C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1599C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1599C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1599C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1599C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1599C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1599C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1599C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1599C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1599C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1599C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1599C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1599C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1599C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1599C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1599C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1599C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1599C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1599C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1599C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1599C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1599C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1599C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1599C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1599C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1599C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1599C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1599C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1599C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1599C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1599C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1599C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1599C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1599C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1599C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1599C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1599C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1599C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1599C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1599C43v68Ev,
  (VTBL_ENTRY)&_ZN7S1599C43v69Ev,
  (VTBL_ENTRY)&_ZN7S1599C43v70Ev,
  (VTBL_ENTRY)&_ZN7S1599C43v71Ev,
  (VTBL_ENTRY)&_ZN7S1599C43v72Ev,
  (VTBL_ENTRY)&_ZN7S1599C33v73Ev,
  (VTBL_ENTRY)&_ZN7S1599C33v74Ev,
  (VTBL_ENTRY)&_ZN7S1599C33v75Ev,
  (VTBL_ENTRY)&_ZN7S1599C33v76Ev,
  (VTBL_ENTRY)&_ZN7S1599C33v77Ev,
  (VTBL_ENTRY)&_ZN7S1599C33v78Ev,
  (VTBL_ENTRY)&_ZN7S1599C33v79Ev,
  (VTBL_ENTRY)&_ZN7S1599C33v80Ev,
  (VTBL_ENTRY)&_ZN7S1599C33v81Ev,
  (VTBL_ENTRY)&_ZN7S1599C33v82Ev,
  (VTBL_ENTRY)&_ZN7S1599C33v83Ev,
  (VTBL_ENTRY)&_ZN7S1599C33v84Ev,
  (VTBL_ENTRY)&_ZN7S1599C33v85Ev,
  (VTBL_ENTRY)&_ZN7S1599C33v86Ev,
  (VTBL_ENTRY)&_ZN7S1599C33v87Ev,
  (VTBL_ENTRY)&_ZN7S1599C33v88Ev,
  (VTBL_ENTRY)&_ZN7S1599C33v89Ev,
  (VTBL_ENTRY)&_ZN7S1599C33v90Ev,
  (VTBL_ENTRY)&_ZN7S1599C33v91Ev,
  (VTBL_ENTRY)&_ZN7S1599C33v92Ev,
  (VTBL_ENTRY)&_ZN7S1599C23v93Ev,
  (VTBL_ENTRY)&_ZN7S1599C23v94Ev,
  (VTBL_ENTRY)&_ZN7S1599C23v95Ev,
  (VTBL_ENTRY)&_ZN7S1599C23v96Ev,
};
extern VTBL_ENTRY _ZTI7S1599C2[];
extern  VTBL_ENTRY _ZTV7S1599C2[];
Class_Descriptor cd_S1599C2 = {  "S1599C2", // class name
  bases_S1599C2, 2,
  &(vtc_S1599C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(120,76), // object size
  NSPAIRA(_ZTI7S1599C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1599C2),92, //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  S1599C1  : S1599C2 {
  ::S1292C12 s1599c1f0;
  ::S1289C10_nt s1599c1f1;
  ::S1289C10_nt s1599c1f2;
  unsigned int s1599c1f3:1;
  unsigned int s1599c1f4:1;
  unsigned int s1599c1f5:1;
  unsigned int s1599c1f6:1;
  ::S1289C10_nt s1599c1f7;
  ::S1289C10_nt s1599c1f8;
  ::S1292C12 s1599c1f9;
  virtual  ~S1599C1(); // _ZN7S1599C1D1Ev
  virtual void  v1(); // _ZN7S1599C12v1Ev
  virtual void  v2(); // _ZN7S1599C12v2Ev
  virtual void  v3(); // _ZN7S1599C12v3Ev
  virtual void  v4(); // _ZN7S1599C12v4Ev
  virtual void  v5(); // _ZN7S1599C12v5Ev
  virtual void  v6(); // _ZN7S1599C12v6Ev
  virtual void  v7(); // _ZN7S1599C12v7Ev
  virtual void  v8(); // _ZN7S1599C12v8Ev
  S1599C1(); // tgen
};
//SIG(1 S1599C1) C1{ BC2{ BC3{ BC4{ 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 FC5{ m Fi[2]} Fp[2]} vd v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 v91 v92 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 FC6{ m}} vd v93 v94 v95 v96 FC7{ BC8{ BC9{ m Fp Fi[2]}}}} vd v1 v2 v3 v4 v5 v6 v7 v8 FC10{ BC11{ m Fc[4] FC12{ BC13{ BC9}} Fi[2]} Fp} FC14{ BC11 Fp} FC14 Fi:1 Fi:1 Fi:1 Fi:1 FC14 FC14 FC10}


 S1599C1 ::~S1599C1(){ note_dtor("S1599C1", this);}
void  S1599C1 ::v1(){vfunc_called(this, "_ZN7S1599C12v1Ev");}
void  S1599C1 ::v2(){vfunc_called(this, "_ZN7S1599C12v2Ev");}
void  S1599C1 ::v3(){vfunc_called(this, "_ZN7S1599C12v3Ev");}
void  S1599C1 ::v4(){vfunc_called(this, "_ZN7S1599C12v4Ev");}
void  S1599C1 ::v5(){vfunc_called(this, "_ZN7S1599C12v5Ev");}
void  S1599C1 ::v6(){vfunc_called(this, "_ZN7S1599C12v6Ev");}
void  S1599C1 ::v7(){vfunc_called(this, "_ZN7S1599C12v7Ev");}
void  S1599C1 ::v8(){vfunc_called(this, "_ZN7S1599C12v8Ev");}
S1599C1 ::S1599C1(){ note_ctor("S1599C1", this);} // tgen

static void Test_S1599C1()
{
  extern Class_Descriptor cd_S1599C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(47,63)];
    init_test(&cd_S1599C1, buf);
    S1599C1 *dp, &lv = *(dp=new (buf) S1599C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(368,248), "sizeof(S1599C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1599C1)");
    check_base_class_offset(lv, (S1599C4*)(S1599C3*)(S1599C2*), 0, "S1599C1");
    check_base_class_offset(lv, (S1599C3*)(S1599C2*), 0, "S1599C1");
    check_base_class_offset(lv, (S1599C2*), 0, "S1599C1");
    check_field_offset(lv, s1599c1f0, ABISELECT(120,76), "S1599C1.s1599c1f0");
    check_field_offset(lv, s1599c1f1, ABISELECT(160,104), "S1599C1.s1599c1f1");
    check_field_offset(lv, s1599c1f2, ABISELECT(200,132), "S1599C1.s1599c1f2");
    set_bf_and_test(lv, s1599c1f3, ABISELECT(240,160), 0, 1, 1, "S1599C1");
    set_bf_and_test(lv, s1599c1f4, ABISELECT(240,160), 1, 1, 1, "S1599C1");
    set_bf_and_test(lv, s1599c1f5, ABISELECT(240,160), 2, 1, 1, "S1599C1");
    set_bf_and_test(lv, s1599c1f6, ABISELECT(240,160), 3, 1, 1, "S1599C1");
    check_field_offset(lv, s1599c1f7, ABISELECT(248,164), "S1599C1.s1599c1f7");
    check_field_offset(lv, s1599c1f8, ABISELECT(288,192), "S1599C1.s1599c1f8");
    check_field_offset(lv, s1599c1f9, ABISELECT(328,220), "S1599C1.s1599c1f9");
    test_class_info(&lv, &cd_S1599C1);
    dp->~S1599C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1599C1(Test_S1599C1, "S1599C1", ABISELECT(368,248));

#else // __cplusplus

extern void _ZN7S1599C1C1Ev();
extern void _ZN7S1599C1D1Ev();
Name_Map name_map_S1599C1[] = {
  NSPAIR(_ZN7S1599C1C1Ev),
  NSPAIR(_ZN7S1599C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1599C4;
extern VTBL_ENTRY _ZTI7S1599C4[];
extern  VTBL_ENTRY _ZTV7S1599C4[];
extern Class_Descriptor cd_S1599C3;
extern VTBL_ENTRY _ZTI7S1599C3[];
extern  VTBL_ENTRY _ZTV7S1599C3[];
extern Class_Descriptor cd_S1599C2;
extern VTBL_ENTRY _ZTI7S1599C2[];
extern  VTBL_ENTRY _ZTV7S1599C2[];
static Base_Class bases_S1599C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1599C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S1599C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S1599C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S1599C1[];
extern void _ZN7S1599C1D1Ev();
extern void _ZN7S1599C1D0Ev();
extern void _ZN7S1599C42v9Ev();
extern void _ZN7S1599C43v10Ev();
extern void _ZN7S1599C43v11Ev();
extern void _ZN7S1599C43v12Ev();
extern void _ZN7S1599C43v13Ev();
extern void _ZN7S1599C43v14Ev();
extern void _ZN7S1599C43v15Ev();
extern void _ZN7S1599C43v16Ev();
extern void _ZN7S1599C43v17Ev();
extern void _ZN7S1599C43v18Ev();
extern void _ZN7S1599C43v19Ev();
extern void _ZN7S1599C43v20Ev();
extern void _ZN7S1599C43v21Ev();
extern void _ZN7S1599C43v22Ev();
extern void _ZN7S1599C43v23Ev();
extern void _ZN7S1599C43v24Ev();
extern void _ZN7S1599C43v25Ev();
extern void _ZN7S1599C43v26Ev();
extern void _ZN7S1599C43v27Ev();
extern void _ZN7S1599C43v28Ev();
extern void _ZN7S1599C43v29Ev();
extern void _ZN7S1599C43v30Ev();
extern void _ZN7S1599C43v31Ev();
extern void _ZN7S1599C43v32Ev();
extern void _ZN7S1599C43v33Ev();
extern void _ZN7S1599C43v34Ev();
extern void _ZN7S1599C43v35Ev();
extern void _ZN7S1599C43v36Ev();
extern void _ZN7S1599C43v37Ev();
extern void _ZN7S1599C43v38Ev();
extern void _ZN7S1599C43v39Ev();
extern void _ZN7S1599C43v40Ev();
extern void _ZN7S1599C43v41Ev();
extern void _ZN7S1599C43v42Ev();
extern void _ZN7S1599C43v43Ev();
extern void _ZN7S1599C43v44Ev();
extern void _ZN7S1599C43v45Ev();
extern void _ZN7S1599C43v46Ev();
extern void _ZN7S1599C43v47Ev();
extern void _ZN7S1599C43v48Ev();
extern void _ZN7S1599C43v49Ev();
extern void _ZN7S1599C43v50Ev();
extern void _ZN7S1599C43v51Ev();
extern void _ZN7S1599C43v52Ev();
extern void _ZN7S1599C43v53Ev();
extern void _ZN7S1599C43v54Ev();
extern void _ZN7S1599C43v55Ev();
extern void _ZN7S1599C43v56Ev();
extern void _ZN7S1599C43v57Ev();
extern void _ZN7S1599C43v58Ev();
extern void _ZN7S1599C43v59Ev();
extern void _ZN7S1599C43v60Ev();
extern void _ZN7S1599C43v61Ev();
extern void _ZN7S1599C43v62Ev();
extern void _ZN7S1599C43v63Ev();
extern void _ZN7S1599C43v64Ev();
extern void _ZN7S1599C43v65Ev();
extern void _ZN7S1599C43v66Ev();
extern void _ZN7S1599C43v67Ev();
extern void _ZN7S1599C43v68Ev();
extern void _ZN7S1599C43v69Ev();
extern void _ZN7S1599C43v70Ev();
extern void _ZN7S1599C43v71Ev();
extern void _ZN7S1599C43v72Ev();
extern void _ZN7S1599C33v73Ev();
extern void _ZN7S1599C33v74Ev();
extern void _ZN7S1599C33v75Ev();
extern void _ZN7S1599C33v76Ev();
extern void _ZN7S1599C33v77Ev();
extern void _ZN7S1599C33v78Ev();
extern void _ZN7S1599C33v79Ev();
extern void _ZN7S1599C33v80Ev();
extern void _ZN7S1599C33v81Ev();
extern void _ZN7S1599C33v82Ev();
extern void _ZN7S1599C33v83Ev();
extern void _ZN7S1599C33v84Ev();
extern void _ZN7S1599C33v85Ev();
extern void _ZN7S1599C33v86Ev();
extern void _ZN7S1599C33v87Ev();
extern void _ZN7S1599C33v88Ev();
extern void _ZN7S1599C33v89Ev();
extern void _ZN7S1599C33v90Ev();
extern void _ZN7S1599C33v91Ev();
extern void _ZN7S1599C33v92Ev();
extern void _ZN7S1599C23v93Ev();
extern void _ZN7S1599C23v94Ev();
extern void _ZN7S1599C23v95Ev();
extern void _ZN7S1599C23v96Ev();
extern void _ZN7S1599C12v1Ev();
extern void _ZN7S1599C12v2Ev();
extern void _ZN7S1599C12v3Ev();
extern void _ZN7S1599C12v4Ev();
extern void _ZN7S1599C12v5Ev();
extern void _ZN7S1599C12v6Ev();
extern void _ZN7S1599C12v7Ev();
extern void _ZN7S1599C12v8Ev();
static  VTBL_ENTRY vtc_S1599C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1599C1[0]),
  (VTBL_ENTRY)&_ZN7S1599C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1599C1D0Ev,
  (VTBL_ENTRY)&_ZN7S1599C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1599C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1599C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1599C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1599C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1599C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1599C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1599C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1599C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1599C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1599C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1599C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1599C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1599C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1599C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1599C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1599C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1599C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1599C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1599C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1599C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1599C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1599C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1599C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1599C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1599C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1599C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1599C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1599C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1599C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1599C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1599C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1599C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1599C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1599C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1599C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1599C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1599C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1599C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1599C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1599C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1599C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1599C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1599C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1599C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1599C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1599C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1599C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1599C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1599C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1599C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1599C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1599C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1599C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1599C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1599C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1599C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1599C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1599C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1599C43v68Ev,
  (VTBL_ENTRY)&_ZN7S1599C43v69Ev,
  (VTBL_ENTRY)&_ZN7S1599C43v70Ev,
  (VTBL_ENTRY)&_ZN7S1599C43v71Ev,
  (VTBL_ENTRY)&_ZN7S1599C43v72Ev,
  (VTBL_ENTRY)&_ZN7S1599C33v73Ev,
  (VTBL_ENTRY)&_ZN7S1599C33v74Ev,
  (VTBL_ENTRY)&_ZN7S1599C33v75Ev,
  (VTBL_ENTRY)&_ZN7S1599C33v76Ev,
  (VTBL_ENTRY)&_ZN7S1599C33v77Ev,
  (VTBL_ENTRY)&_ZN7S1599C33v78Ev,
  (VTBL_ENTRY)&_ZN7S1599C33v79Ev,
  (VTBL_ENTRY)&_ZN7S1599C33v80Ev,
  (VTBL_ENTRY)&_ZN7S1599C33v81Ev,
  (VTBL_ENTRY)&_ZN7S1599C33v82Ev,
  (VTBL_ENTRY)&_ZN7S1599C33v83Ev,
  (VTBL_ENTRY)&_ZN7S1599C33v84Ev,
  (VTBL_ENTRY)&_ZN7S1599C33v85Ev,
  (VTBL_ENTRY)&_ZN7S1599C33v86Ev,
  (VTBL_ENTRY)&_ZN7S1599C33v87Ev,
  (VTBL_ENTRY)&_ZN7S1599C33v88Ev,
  (VTBL_ENTRY)&_ZN7S1599C33v89Ev,
  (VTBL_ENTRY)&_ZN7S1599C33v90Ev,
  (VTBL_ENTRY)&_ZN7S1599C33v91Ev,
  (VTBL_ENTRY)&_ZN7S1599C33v92Ev,
  (VTBL_ENTRY)&_ZN7S1599C23v93Ev,
  (VTBL_ENTRY)&_ZN7S1599C23v94Ev,
  (VTBL_ENTRY)&_ZN7S1599C23v95Ev,
  (VTBL_ENTRY)&_ZN7S1599C23v96Ev,
  (VTBL_ENTRY)&_ZN7S1599C12v1Ev,
  (VTBL_ENTRY)&_ZN7S1599C12v2Ev,
  (VTBL_ENTRY)&_ZN7S1599C12v3Ev,
  (VTBL_ENTRY)&_ZN7S1599C12v4Ev,
  (VTBL_ENTRY)&_ZN7S1599C12v5Ev,
  (VTBL_ENTRY)&_ZN7S1599C12v6Ev,
  (VTBL_ENTRY)&_ZN7S1599C12v7Ev,
  (VTBL_ENTRY)&_ZN7S1599C12v8Ev,
};
extern VTBL_ENTRY _ZTI7S1599C1[];
extern  VTBL_ENTRY _ZTV7S1599C1[];
Class_Descriptor cd_S1599C1 = {  "S1599C1", // class name
  bases_S1599C1, 3,
  &(vtc_S1599C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(368,248), // object size
  NSPAIRA(_ZTI7S1599C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1599C1),100, //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  S666C5  {
  int s666c5f0;
  __tsi64 s666c5f1;
  void *s666c5f2[4];
  int s666c5f3[2];
  void *s666c5f4;
  ::S674C6_nt s666c5f5;
  void *s666c5f6[2];
  virtual  ~S666C5(); // _ZN6S666C5D1Ev
  virtual void  v6(); // _ZN6S666C52v6Ev
  virtual void  v7(); // _ZN6S666C52v7Ev
  virtual void  v8(); // _ZN6S666C52v8Ev
  virtual void  v9(); // _ZN6S666C52v9Ev
  virtual void  v10(); // _ZN6S666C53v10Ev
  virtual void  v11(); // _ZN6S666C53v11Ev
  virtual void  v12(); // _ZN6S666C53v12Ev
  virtual void  v13(); // _ZN6S666C53v13Ev
  virtual void  v14(); // _ZN6S666C53v14Ev
  virtual void  v15(); // _ZN6S666C53v15Ev
  virtual void  v16(); // _ZN6S666C53v16Ev
  virtual void  v17(); // _ZN6S666C53v17Ev
  virtual void  v18(); // _ZN6S666C53v18Ev
  virtual void  v19(); // _ZN6S666C53v19Ev
  virtual void  v20(); // _ZN6S666C53v20Ev
  virtual void  v21(); // _ZN6S666C53v21Ev
  virtual void  v22(); // _ZN6S666C53v22Ev
  virtual void  v23(); // _ZN6S666C53v23Ev
  virtual void  v24(); // _ZN6S666C53v24Ev
  virtual void  v25(); // _ZN6S666C53v25Ev
  virtual void  v26(); // _ZN6S666C53v26Ev
  virtual void  v27(); // _ZN6S666C53v27Ev
  virtual void  v28(); // _ZN6S666C53v28Ev
  virtual void  v29(); // _ZN6S666C53v29Ev
  virtual void  v30(); // _ZN6S666C53v30Ev
  virtual void  v31(); // _ZN6S666C53v31Ev
  virtual void  v32(); // _ZN6S666C53v32Ev
  virtual void  v33(); // _ZN6S666C53v33Ev
  virtual void  v34(); // _ZN6S666C53v34Ev
  virtual void  v35(); // _ZN6S666C53v35Ev
  virtual void  v36(); // _ZN6S666C53v36Ev
  virtual void  v37(); // _ZN6S666C53v37Ev
  virtual void  v38(); // _ZN6S666C53v38Ev
  virtual void  v39(); // _ZN6S666C53v39Ev
  virtual void  v40(); // _ZN6S666C53v40Ev
  virtual void  v41(); // _ZN6S666C53v41Ev
  virtual void  v42(); // _ZN6S666C53v42Ev
  virtual void  v43(); // _ZN6S666C53v43Ev
  virtual void  v44(); // _ZN6S666C53v44Ev
  virtual void  v45(); // _ZN6S666C53v45Ev
  virtual void  v46(); // _ZN6S666C53v46Ev
  virtual void  v47(); // _ZN6S666C53v47Ev
  virtual void  v48(); // _ZN6S666C53v48Ev
  virtual void  v49(); // _ZN6S666C53v49Ev
  virtual void  v50(); // _ZN6S666C53v50Ev
  virtual void  v51(); // _ZN6S666C53v51Ev
  virtual void  v52(); // _ZN6S666C53v52Ev
  virtual void  v53(); // _ZN6S666C53v53Ev
  virtual void  v54(); // _ZN6S666C53v54Ev
  virtual void  v55(); // _ZN6S666C53v55Ev
  virtual void  v56(); // _ZN6S666C53v56Ev
  virtual void  v57(); // _ZN6S666C53v57Ev
  virtual void  v58(); // _ZN6S666C53v58Ev
  virtual void  v59(); // _ZN6S666C53v59Ev
  virtual void  v60(); // _ZN6S666C53v60Ev
  virtual void  v61(); // _ZN6S666C53v61Ev
  virtual void  v62(); // _ZN6S666C53v62Ev
  virtual void  v63(); // _ZN6S666C53v63Ev
  virtual void  v64(); // _ZN6S666C53v64Ev
  virtual void  v65(); // _ZN6S666C53v65Ev
  virtual void  v66(); // _ZN6S666C53v66Ev
  virtual void  v67(); // _ZN6S666C53v67Ev
  virtual void  v68(); // _ZN6S666C53v68Ev
  virtual void  v69(); // _ZN6S666C53v69Ev
  S666C5(); // tgen
};
//SIG(-1 S666C5) 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]}


 S666C5 ::~S666C5(){ note_dtor("S666C5", this);}
void  S666C5 ::v6(){vfunc_called(this, "_ZN6S666C52v6Ev");}
void  S666C5 ::v7(){vfunc_called(this, "_ZN6S666C52v7Ev");}
void  S666C5 ::v8(){vfunc_called(this, "_ZN6S666C52v8Ev");}
void  S666C5 ::v9(){vfunc_called(this, "_ZN6S666C52v9Ev");}
void  S666C5 ::v10(){vfunc_called(this, "_ZN6S666C53v10Ev");}
void  S666C5 ::v11(){vfunc_called(this, "_ZN6S666C53v11Ev");}
void  S666C5 ::v12(){vfunc_called(this, "_ZN6S666C53v12Ev");}
void  S666C5 ::v13(){vfunc_called(this, "_ZN6S666C53v13Ev");}
void  S666C5 ::v14(){vfunc_called(this, "_ZN6S666C53v14Ev");}
void  S666C5 ::v15(){vfunc_called(this, "_ZN6S666C53v15Ev");}
void  S666C5 ::v16(){vfunc_called(this, "_ZN6S666C53v16Ev");}
void  S666C5 ::v17(){vfunc_called(this, "_ZN6S666C53v17Ev");}
void  S666C5 ::v18(){vfunc_called(this, "_ZN6S666C53v18Ev");}
void  S666C5 ::v19(){vfunc_called(this, "_ZN6S666C53v19Ev");}
void  S666C5 ::v20(){vfunc_called(this, "_ZN6S666C53v20Ev");}
void  S666C5 ::v21(){vfunc_called(this, "_ZN6S666C53v21Ev");}
void  S666C5 ::v22(){vfunc_called(this, "_ZN6S666C53v22Ev");}
void  S666C5 ::v23(){vfunc_called(this, "_ZN6S666C53v23Ev");}
void  S666C5 ::v24(){vfunc_called(this, "_ZN6S666C53v24Ev");}
void  S666C5 ::v25(){vfunc_called(this, "_ZN6S666C53v25Ev");}
void  S666C5 ::v26(){vfunc_called(this, "_ZN6S666C53v26Ev");}
void  S666C5 ::v27(){vfunc_called(this, "_ZN6S666C53v27Ev");}
void  S666C5 ::v28(){vfunc_called(this, "_ZN6S666C53v28Ev");}
void  S666C5 ::v29(){vfunc_called(this, "_ZN6S666C53v29Ev");}
void  S666C5 ::v30(){vfunc_called(this, "_ZN6S666C53v30Ev");}
void  S666C5 ::v31(){vfunc_called(this, "_ZN6S666C53v31Ev");}
void  S666C5 ::v32(){vfunc_called(this, "_ZN6S666C53v32Ev");}
void  S666C5 ::v33(){vfunc_called(this, "_ZN6S666C53v33Ev");}
void  S666C5 ::v34(){vfunc_called(this, "_ZN6S666C53v34Ev");}
void  S666C5 ::v35(){vfunc_called(this, "_ZN6S666C53v35Ev");}
void  S666C5 ::v36(){vfunc_called(this, "_ZN6S666C53v36Ev");}
void  S666C5 ::v37(){vfunc_called(this, "_ZN6S666C53v37Ev");}
void  S666C5 ::v38(){vfunc_called(this, "_ZN6S666C53v38Ev");}
void  S666C5 ::v39(){vfunc_called(this, "_ZN6S666C53v39Ev");}
void  S666C5 ::v40(){vfunc_called(this, "_ZN6S666C53v40Ev");}
void  S666C5 ::v41(){vfunc_called(this, "_ZN6S666C53v41Ev");}
void  S666C5 ::v42(){vfunc_called(this, "_ZN6S666C53v42Ev");}
void  S666C5 ::v43(){vfunc_called(this, "_ZN6S666C53v43Ev");}
void  S666C5 ::v44(){vfunc_called(this, "_ZN6S666C53v44Ev");}
void  S666C5 ::v45(){vfunc_called(this, "_ZN6S666C53v45Ev");}
void  S666C5 ::v46(){vfunc_called(this, "_ZN6S666C53v46Ev");}
void  S666C5 ::v47(){vfunc_called(this, "_ZN6S666C53v47Ev");}
void  S666C5 ::v48(){vfunc_called(this, "_ZN6S666C53v48Ev");}
void  S666C5 ::v49(){vfunc_called(this, "_ZN6S666C53v49Ev");}
void  S666C5 ::v50(){vfunc_called(this, "_ZN6S666C53v50Ev");}
void  S666C5 ::v51(){vfunc_called(this, "_ZN6S666C53v51Ev");}
void  S666C5 ::v52(){vfunc_called(this, "_ZN6S666C53v52Ev");}
void  S666C5 ::v53(){vfunc_called(this, "_ZN6S666C53v53Ev");}
void  S666C5 ::v54(){vfunc_called(this, "_ZN6S666C53v54Ev");}
void  S666C5 ::v55(){vfunc_called(this, "_ZN6S666C53v55Ev");}
void  S666C5 ::v56(){vfunc_called(this, "_ZN6S666C53v56Ev");}
void  S666C5 ::v57(){vfunc_called(this, "_ZN6S666C53v57Ev");}
void  S666C5 ::v58(){vfunc_called(this, "_ZN6S666C53v58Ev");}
void  S666C5 ::v59(){vfunc_called(this, "_ZN6S666C53v59Ev");}
void  S666C5 ::v60(){vfunc_called(this, "_ZN6S666C53v60Ev");}
void  S666C5 ::v61(){vfunc_called(this, "_ZN6S666C53v61Ev");}
void  S666C5 ::v62(){vfunc_called(this, "_ZN6S666C53v62Ev");}
void  S666C5 ::v63(){vfunc_called(this, "_ZN6S666C53v63Ev");}
void  S666C5 ::v64(){vfunc_called(this, "_ZN6S666C53v64Ev");}
void  S666C5 ::v65(){vfunc_called(this, "_ZN6S666C53v65Ev");}
void  S666C5 ::v66(){vfunc_called(this, "_ZN6S666C53v66Ev");}
void  S666C5 ::v67(){vfunc_called(this, "_ZN6S666C53v67Ev");}
void  S666C5 ::v68(){vfunc_called(this, "_ZN6S666C53v68Ev");}
void  S666C5 ::v69(){vfunc_called(this, "_ZN6S666C53v69Ev");}
S666C5 ::S666C5(){ note_ctor("S666C5", this);} // tgen

static void Test_S666C5()
{
  extern Class_Descriptor cd_S666C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S666C5, buf);
    S666C5 *dp, &lv = *(dp=new (buf) S666C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S666C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S666C5)");
    check_field_offset(lv, s666c5f0, ABISELECT(8,4), "S666C5.s666c5f0");
    check_field_offset(lv, s666c5f1, ABISELECT(16,8), "S666C5.s666c5f1");
    check_field_offset(lv, s666c5f2, ABISELECT(24,16), "S666C5.s666c5f2");
    check_field_offset(lv, s666c5f3, ABISELECT(56,32), "S666C5.s666c5f3");
    check_field_offset(lv, s666c5f4, ABISELECT(64,40), "S666C5.s666c5f4");
    check_field_offset(lv, s666c5f5, ABISELECT(72,44), "S666C5.s666c5f5");
    check_field_offset(lv, s666c5f6, ABISELECT(80,52), "S666C5.s666c5f6");
    test_class_info(&lv, &cd_S666C5);
    dp->~S666C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS666C5(Test_S666C5, "S666C5", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN6S666C5C1Ev();
extern void _ZN6S666C5D1Ev();
Name_Map name_map_S666C5[] = {
  NSPAIR(_ZN6S666C5C1Ev),
  NSPAIR(_ZN6S666C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI6S666C5[];
extern void _ZN6S666C5D1Ev();
extern void _ZN6S666C5D0Ev();
extern void _ZN6S666C52v6Ev();
extern void _ZN6S666C52v7Ev();
extern void _ZN6S666C52v8Ev();
extern void _ZN6S666C52v9Ev();
extern void _ZN6S666C53v10Ev();
extern void _ZN6S666C53v11Ev();
extern void _ZN6S666C53v12Ev();
extern void _ZN6S666C53v13Ev();
extern void _ZN6S666C53v14Ev();
extern void _ZN6S666C53v15Ev();
extern void _ZN6S666C53v16Ev();
extern void _ZN6S666C53v17Ev();
extern void _ZN6S666C53v18Ev();
extern void _ZN6S666C53v19Ev();
extern void _ZN6S666C53v20Ev();
extern void _ZN6S666C53v21Ev();
extern void _ZN6S666C53v22Ev();
extern void _ZN6S666C53v23Ev();
extern void _ZN6S666C53v24Ev();
extern void _ZN6S666C53v25Ev();
extern void _ZN6S666C53v26Ev();
extern void _ZN6S666C53v27Ev();
extern void _ZN6S666C53v28Ev();
extern void _ZN6S666C53v29Ev();
extern void _ZN6S666C53v30Ev();
extern void _ZN6S666C53v31Ev();
extern void _ZN6S666C53v32Ev();
extern void _ZN6S666C53v33Ev();
extern void _ZN6S666C53v34Ev();
extern void _ZN6S666C53v35Ev();
extern void _ZN6S666C53v36Ev();
extern void _ZN6S666C53v37Ev();
extern void _ZN6S666C53v38Ev();
extern void _ZN6S666C53v39Ev();
extern void _ZN6S666C53v40Ev();
extern void _ZN6S666C53v41Ev();
extern void _ZN6S666C53v42Ev();
extern void _ZN6S666C53v43Ev();
extern void _ZN6S666C53v44Ev();
extern void _ZN6S666C53v45Ev();
extern void _ZN6S666C53v46Ev();
extern void _ZN6S666C53v47Ev();
extern void _ZN6S666C53v48Ev();
extern void _ZN6S666C53v49Ev();
extern void _ZN6S666C53v50Ev();
extern void _ZN6S666C53v51Ev();
extern void _ZN6S666C53v52Ev();
extern void _ZN6S666C53v53Ev();
extern void _ZN6S666C53v54Ev();
extern void _ZN6S666C53v55Ev();
extern void _ZN6S666C53v56Ev();
extern void _ZN6S666C53v57Ev();
extern void _ZN6S666C53v58Ev();
extern void _ZN6S666C53v59Ev();
extern void _ZN6S666C53v60Ev();
extern void _ZN6S666C53v61Ev();
extern void _ZN6S666C53v62Ev();
extern void _ZN6S666C53v63Ev();
extern void _ZN6S666C53v64Ev();
extern void _ZN6S666C53v65Ev();
extern void _ZN6S666C53v66Ev();
extern void _ZN6S666C53v67Ev();
extern void _ZN6S666C53v68Ev();
extern void _ZN6S666C53v69Ev();
static  VTBL_ENTRY vtc_S666C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S666C5[0]),
  (VTBL_ENTRY)&_ZN6S666C5D1Ev,
  (VTBL_ENTRY)&_ZN6S666C5D0Ev,
  (VTBL_ENTRY)&_ZN6S666C52v6Ev,
  (VTBL_ENTRY)&_ZN6S666C52v7Ev,
  (VTBL_ENTRY)&_ZN6S666C52v8Ev,
  (VTBL_ENTRY)&_ZN6S666C52v9Ev,
  (VTBL_ENTRY)&_ZN6S666C53v10Ev,
  (VTBL_ENTRY)&_ZN6S666C53v11Ev,
  (VTBL_ENTRY)&_ZN6S666C53v12Ev,
  (VTBL_ENTRY)&_ZN6S666C53v13Ev,
  (VTBL_ENTRY)&_ZN6S666C53v14Ev,
  (VTBL_ENTRY)&_ZN6S666C53v15Ev,
  (VTBL_ENTRY)&_ZN6S666C53v16Ev,
  (VTBL_ENTRY)&_ZN6S666C53v17Ev,
  (VTBL_ENTRY)&_ZN6S666C53v18Ev,
  (VTBL_ENTRY)&_ZN6S666C53v19Ev,
  (VTBL_ENTRY)&_ZN6S666C53v20Ev,
  (VTBL_ENTRY)&_ZN6S666C53v21Ev,
  (VTBL_ENTRY)&_ZN6S666C53v22Ev,
  (VTBL_ENTRY)&_ZN6S666C53v23Ev,
  (VTBL_ENTRY)&_ZN6S666C53v24Ev,
  (VTBL_ENTRY)&_ZN6S666C53v25Ev,
  (VTBL_ENTRY)&_ZN6S666C53v26Ev,
  (VTBL_ENTRY)&_ZN6S666C53v27Ev,
  (VTBL_ENTRY)&_ZN6S666C53v28Ev,
  (VTBL_ENTRY)&_ZN6S666C53v29Ev,
  (VTBL_ENTRY)&_ZN6S666C53v30Ev,
  (VTBL_ENTRY)&_ZN6S666C53v31Ev,
  (VTBL_ENTRY)&_ZN6S666C53v32Ev,
  (VTBL_ENTRY)&_ZN6S666C53v33Ev,
  (VTBL_ENTRY)&_ZN6S666C53v34Ev,
  (VTBL_ENTRY)&_ZN6S666C53v35Ev,
  (VTBL_ENTRY)&_ZN6S666C53v36Ev,
  (VTBL_ENTRY)&_ZN6S666C53v37Ev,
  (VTBL_ENTRY)&_ZN6S666C53v38Ev,
  (VTBL_ENTRY)&_ZN6S666C53v39Ev,
  (VTBL_ENTRY)&_ZN6S666C53v40Ev,
  (VTBL_ENTRY)&_ZN6S666C53v41Ev,
  (VTBL_ENTRY)&_ZN6S666C53v42Ev,
  (VTBL_ENTRY)&_ZN6S666C53v43Ev,
  (VTBL_ENTRY)&_ZN6S666C53v44Ev,
  (VTBL_ENTRY)&_ZN6S666C53v45Ev,
  (VTBL_ENTRY)&_ZN6S666C53v46Ev,
  (VTBL_ENTRY)&_ZN6S666C53v47Ev,
  (VTBL_ENTRY)&_ZN6S666C53v48Ev,
  (VTBL_ENTRY)&_ZN6S666C53v49Ev,
  (VTBL_ENTRY)&_ZN6S666C53v50Ev,
  (VTBL_ENTRY)&_ZN6S666C53v51Ev,
  (VTBL_ENTRY)&_ZN6S666C53v52Ev,
  (VTBL_ENTRY)&_ZN6S666C53v53Ev,
  (VTBL_ENTRY)&_ZN6S666C53v54Ev,
  (VTBL_ENTRY)&_ZN6S666C53v55Ev,
  (VTBL_ENTRY)&_ZN6S666C53v56Ev,
  (VTBL_ENTRY)&_ZN6S666C53v57Ev,
  (VTBL_ENTRY)&_ZN6S666C53v58Ev,
  (VTBL_ENTRY)&_ZN6S666C53v59Ev,
  (VTBL_ENTRY)&_ZN6S666C53v60Ev,
  (VTBL_ENTRY)&_ZN6S666C53v61Ev,
  (VTBL_ENTRY)&_ZN6S666C53v62Ev,
  (VTBL_ENTRY)&_ZN6S666C53v63Ev,
  (VTBL_ENTRY)&_ZN6S666C53v64Ev,
  (VTBL_ENTRY)&_ZN6S666C53v65Ev,
  (VTBL_ENTRY)&_ZN6S666C53v66Ev,
  (VTBL_ENTRY)&_ZN6S666C53v67Ev,
  (VTBL_ENTRY)&_ZN6S666C53v68Ev,
  (VTBL_ENTRY)&_ZN6S666C53v69Ev,
};
extern VTBL_ENTRY _ZTI6S666C5[];
extern  VTBL_ENTRY _ZTV6S666C5[];
Class_Descriptor cd_S666C5 = {  "S666C5", // class name
  0,0,//no base classes
  &(vtc_S666C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI6S666C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV6S666C5),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  S666C4  : S666C5 {
  unsigned int s666c4f0:1;
  unsigned int s666c4f1:1;
  unsigned int s666c4f2:1;
  unsigned int s666c4f3:1;
  unsigned int s666c4f4:1;
  unsigned int s666c4f5:1;
  unsigned int s666c4f6:1;
  ::S3625C32 s666c4f7;
  virtual  ~S666C4(); // _ZN6S666C4D1Ev
  virtual void  v70(); // _ZN6S666C43v70Ev
  virtual void  v71(); // _ZN6S666C43v71Ev
  virtual void  v72(); // _ZN6S666C43v72Ev
  virtual void  v73(); // _ZN6S666C43v73Ev
  virtual void  v74(); // _ZN6S666C43v74Ev
  virtual void  v75(); // _ZN6S666C43v75Ev
  virtual void  v76(); // _ZN6S666C43v76Ev
  virtual void  v77(); // _ZN6S666C43v77Ev
  virtual void  v78(); // _ZN6S666C43v78Ev
  virtual void  v79(); // _ZN6S666C43v79Ev
  virtual void  v80(); // _ZN6S666C43v80Ev
  virtual void  v81(); // _ZN6S666C43v81Ev
  virtual void  v82(); // _ZN6S666C43v82Ev
  virtual void  v83(); // _ZN6S666C43v83Ev
  virtual void  v84(); // _ZN6S666C43v84Ev
  virtual void  v85(); // _ZN6S666C43v85Ev
  virtual void  v86(); // _ZN6S666C43v86Ev
  virtual void  v87(); // _ZN6S666C43v87Ev
  virtual void  v88(); // _ZN6S666C43v88Ev
  virtual void  v89(); // _ZN6S666C43v89Ev
  S666C4(); // tgen
};
//SIG(-1 S666C4) C1{ BC2{ 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 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 Fi FL Fp[4] Fi[2] Fp FC3{ m Fi[2]} Fp[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 FC4{ m}}


 S666C4 ::~S666C4(){ note_dtor("S666C4", this);}
void  S666C4 ::v70(){vfunc_called(this, "_ZN6S666C43v70Ev");}
void  S666C4 ::v71(){vfunc_called(this, "_ZN6S666C43v71Ev");}
void  S666C4 ::v72(){vfunc_called(this, "_ZN6S666C43v72Ev");}
void  S666C4 ::v73(){vfunc_called(this, "_ZN6S666C43v73Ev");}
void  S666C4 ::v74(){vfunc_called(this, "_ZN6S666C43v74Ev");}
void  S666C4 ::v75(){vfunc_called(this, "_ZN6S666C43v75Ev");}
void  S666C4 ::v76(){vfunc_called(this, "_ZN6S666C43v76Ev");}
void  S666C4 ::v77(){vfunc_called(this, "_ZN6S666C43v77Ev");}
void  S666C4 ::v78(){vfunc_called(this, "_ZN6S666C43v78Ev");}
void  S666C4 ::v79(){vfunc_called(this, "_ZN6S666C43v79Ev");}
void  S666C4 ::v80(){vfunc_called(this, "_ZN6S666C43v80Ev");}
void  S666C4 ::v81(){vfunc_called(this, "_ZN6S666C43v81Ev");}
void  S666C4 ::v82(){vfunc_called(this, "_ZN6S666C43v82Ev");}
void  S666C4 ::v83(){vfunc_called(this, "_ZN6S666C43v83Ev");}
void  S666C4 ::v84(){vfunc_called(this, "_ZN6S666C43v84Ev");}
void  S666C4 ::v85(){vfunc_called(this, "_ZN6S666C43v85Ev");}
void  S666C4 ::v86(){vfunc_called(this, "_ZN6S666C43v86Ev");}
void  S666C4 ::v87(){vfunc_called(this, "_ZN6S666C43v87Ev");}
void  S666C4 ::v88(){vfunc_called(this, "_ZN6S666C43v88Ev");}
void  S666C4 ::v89(){vfunc_called(this, "_ZN6S666C43v89Ev");}
S666C4 ::S666C4(){ note_ctor("S666C4", this);} // tgen

static void Test_S666C4()
{
  extern Class_Descriptor cd_S666C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(14,17)];
    init_test(&cd_S666C4, buf);
    S666C4 *dp, &lv = *(dp=new (buf) S666C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(104,64), "sizeof(S666C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S666C4)");
    check_base_class_offset(lv, (S666C5*), 0, "S666C4");
    set_bf_and_test(lv, s666c4f0, ABISELECT(96,60), 0, 1, 1, "S666C4");
    set_bf_and_test(lv, s666c4f1, ABISELECT(96,60), 1, 1, 1, "S666C4");
    set_bf_and_test(lv, s666c4f2, ABISELECT(96,60), 2, 1, 1, "S666C4");
    set_bf_and_test(lv, s666c4f3, ABISELECT(96,60), 3, 1, 1, "S666C4");
    set_bf_and_test(lv, s666c4f4, ABISELECT(96,60), 4, 1, 1, "S666C4");
    set_bf_and_test(lv, s666c4f5, ABISELECT(96,60), 5, 1, 1, "S666C4");
    set_bf_and_test(lv, s666c4f6, ABISELECT(96,60), 6, 1, 1, "S666C4");
    check_field_offset(lv, s666c4f7, ABISELECT(97,61), "S666C4.s666c4f7");
    test_class_info(&lv, &cd_S666C4);
    dp->~S666C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS666C4(Test_S666C4, "S666C4", ABISELECT(104,64));

#else // __cplusplus

extern void _ZN6S666C4C1Ev();
extern void _ZN6S666C4D1Ev();
Name_Map name_map_S666C4[] = {
  NSPAIR(_ZN6S666C4C1Ev),
  NSPAIR(_ZN6S666C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S666C5;
extern VTBL_ENTRY _ZTI6S666C5[];
extern  VTBL_ENTRY _ZTV6S666C5[];
static Base_Class bases_S666C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S666C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI6S666C4[];
extern void _ZN6S666C4D1Ev();
extern void _ZN6S666C4D0Ev();
extern void _ZN6S666C52v6Ev();
extern void _ZN6S666C52v7Ev();
extern void _ZN6S666C52v8Ev();
extern void _ZN6S666C52v9Ev();
extern void _ZN6S666C53v10Ev();
extern void _ZN6S666C53v11Ev();
extern void _ZN6S666C53v12Ev();
extern void _ZN6S666C53v13Ev();
extern void _ZN6S666C53v14Ev();
extern void _ZN6S666C53v15Ev();
extern void _ZN6S666C53v16Ev();
extern void _ZN6S666C53v17Ev();
extern void _ZN6S666C53v18Ev();
extern void _ZN6S666C53v19Ev();
extern void _ZN6S666C53v20Ev();
extern void _ZN6S666C53v21Ev();
extern void _ZN6S666C53v22Ev();
extern void _ZN6S666C53v23Ev();
extern void _ZN6S666C53v24Ev();
extern void _ZN6S666C53v25Ev();
extern void _ZN6S666C53v26Ev();
extern void _ZN6S666C53v27Ev();
extern void _ZN6S666C53v28Ev();
extern void _ZN6S666C53v29Ev();
extern void _ZN6S666C53v30Ev();
extern void _ZN6S666C53v31Ev();
extern void _ZN6S666C53v32Ev();
extern void _ZN6S666C53v33Ev();
extern void _ZN6S666C53v34Ev();
extern void _ZN6S666C53v35Ev();
extern void _ZN6S666C53v36Ev();
extern void _ZN6S666C53v37Ev();
extern void _ZN6S666C53v38Ev();
extern void _ZN6S666C53v39Ev();
extern void _ZN6S666C53v40Ev();
extern void _ZN6S666C53v41Ev();
extern void _ZN6S666C53v42Ev();
extern void _ZN6S666C53v43Ev();
extern void _ZN6S666C53v44Ev();
extern void _ZN6S666C53v45Ev();
extern void _ZN6S666C53v46Ev();
extern void _ZN6S666C53v47Ev();
extern void _ZN6S666C53v48Ev();
extern void _ZN6S666C53v49Ev();
extern void _ZN6S666C53v50Ev();
extern void _ZN6S666C53v51Ev();
extern void _ZN6S666C53v52Ev();
extern void _ZN6S666C53v53Ev();
extern void _ZN6S666C53v54Ev();
extern void _ZN6S666C53v55Ev();
extern void _ZN6S666C53v56Ev();
extern void _ZN6S666C53v57Ev();
extern void _ZN6S666C53v58Ev();
extern void _ZN6S666C53v59Ev();
extern void _ZN6S666C53v60Ev();
extern void _ZN6S666C53v61Ev();
extern void _ZN6S666C53v62Ev();
extern void _ZN6S666C53v63Ev();
extern void _ZN6S666C53v64Ev();
extern void _ZN6S666C53v65Ev();
extern void _ZN6S666C53v66Ev();
extern void _ZN6S666C53v67Ev();
extern void _ZN6S666C53v68Ev();
extern void _ZN6S666C53v69Ev();
extern void _ZN6S666C43v70Ev();
extern void _ZN6S666C43v71Ev();
extern void _ZN6S666C43v72Ev();
extern void _ZN6S666C43v73Ev();
extern void _ZN6S666C43v74Ev();
extern void _ZN6S666C43v75Ev();
extern void _ZN6S666C43v76Ev();
extern void _ZN6S666C43v77Ev();
extern void _ZN6S666C43v78Ev();
extern void _ZN6S666C43v79Ev();
extern void _ZN6S666C43v80Ev();
extern void _ZN6S666C43v81Ev();
extern void _ZN6S666C43v82Ev();
extern void _ZN6S666C43v83Ev();
extern void _ZN6S666C43v84Ev();
extern void _ZN6S666C43v85Ev();
extern void _ZN6S666C43v86Ev();
extern void _ZN6S666C43v87Ev();
extern void _ZN6S666C43v88Ev();
extern void _ZN6S666C43v89Ev();
static  VTBL_ENTRY vtc_S666C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S666C4[0]),
  (VTBL_ENTRY)&_ZN6S666C4D1Ev,
  (VTBL_ENTRY)&_ZN6S666C4D0Ev,
  (VTBL_ENTRY)&_ZN6S666C52v6Ev,
  (VTBL_ENTRY)&_ZN6S666C52v7Ev,
  (VTBL_ENTRY)&_ZN6S666C52v8Ev,
  (VTBL_ENTRY)&_ZN6S666C52v9Ev,
  (VTBL_ENTRY)&_ZN6S666C53v10Ev,
  (VTBL_ENTRY)&_ZN6S666C53v11Ev,
  (VTBL_ENTRY)&_ZN6S666C53v12Ev,
  (VTBL_ENTRY)&_ZN6S666C53v13Ev,
  (VTBL_ENTRY)&_ZN6S666C53v14Ev,
  (VTBL_ENTRY)&_ZN6S666C53v15Ev,
  (VTBL_ENTRY)&_ZN6S666C53v16Ev,
  (VTBL_ENTRY)&_ZN6S666C53v17Ev,
  (VTBL_ENTRY)&_ZN6S666C53v18Ev,
  (VTBL_ENTRY)&_ZN6S666C53v19Ev,
  (VTBL_ENTRY)&_ZN6S666C53v20Ev,
  (VTBL_ENTRY)&_ZN6S666C53v21Ev,
  (VTBL_ENTRY)&_ZN6S666C53v22Ev,
  (VTBL_ENTRY)&_ZN6S666C53v23Ev,
  (VTBL_ENTRY)&_ZN6S666C53v24Ev,
  (VTBL_ENTRY)&_ZN6S666C53v25Ev,
  (VTBL_ENTRY)&_ZN6S666C53v26Ev,
  (VTBL_ENTRY)&_ZN6S666C53v27Ev,
  (VTBL_ENTRY)&_ZN6S666C53v28Ev,
  (VTBL_ENTRY)&_ZN6S666C53v29Ev,
  (VTBL_ENTRY)&_ZN6S666C53v30Ev,
  (VTBL_ENTRY)&_ZN6S666C53v31Ev,
  (VTBL_ENTRY)&_ZN6S666C53v32Ev,
  (VTBL_ENTRY)&_ZN6S666C53v33Ev,
  (VTBL_ENTRY)&_ZN6S666C53v34Ev,
  (VTBL_ENTRY)&_ZN6S666C53v35Ev,
  (VTBL_ENTRY)&_ZN6S666C53v36Ev,
  (VTBL_ENTRY)&_ZN6S666C53v37Ev,
  (VTBL_ENTRY)&_ZN6S666C53v38Ev,
  (VTBL_ENTRY)&_ZN6S666C53v39Ev,
  (VTBL_ENTRY)&_ZN6S666C53v40Ev,
  (VTBL_ENTRY)&_ZN6S666C53v41Ev,
  (VTBL_ENTRY)&_ZN6S666C53v42Ev,
  (VTBL_ENTRY)&_ZN6S666C53v43Ev,
  (VTBL_ENTRY)&_ZN6S666C53v44Ev,
  (VTBL_ENTRY)&_ZN6S666C53v45Ev,
  (VTBL_ENTRY)&_ZN6S666C53v46Ev,
  (VTBL_ENTRY)&_ZN6S666C53v47Ev,
  (VTBL_ENTRY)&_ZN6S666C53v48Ev,
  (VTBL_ENTRY)&_ZN6S666C53v49Ev,
  (VTBL_ENTRY)&_ZN6S666C53v50Ev,
  (VTBL_ENTRY)&_ZN6S666C53v51Ev,
  (VTBL_ENTRY)&_ZN6S666C53v52Ev,
  (VTBL_ENTRY)&_ZN6S666C53v53Ev,
  (VTBL_ENTRY)&_ZN6S666C53v54Ev,
  (VTBL_ENTRY)&_ZN6S666C53v55Ev,
  (VTBL_ENTRY)&_ZN6S666C53v56Ev,
  (VTBL_ENTRY)&_ZN6S666C53v57Ev,
  (VTBL_ENTRY)&_ZN6S666C53v58Ev,
  (VTBL_ENTRY)&_ZN6S666C53v59Ev,
  (VTBL_ENTRY)&_ZN6S666C53v60Ev,
  (VTBL_ENTRY)&_ZN6S666C53v61Ev,
  (VTBL_ENTRY)&_ZN6S666C53v62Ev,
  (VTBL_ENTRY)&_ZN6S666C53v63Ev,
  (VTBL_ENTRY)&_ZN6S666C53v64Ev,
  (VTBL_ENTRY)&_ZN6S666C53v65Ev,
  (VTBL_ENTRY)&_ZN6S666C53v66Ev,
  (VTBL_ENTRY)&_ZN6S666C53v67Ev,
  (VTBL_ENTRY)&_ZN6S666C53v68Ev,
  (VTBL_ENTRY)&_ZN6S666C53v69Ev,
  (VTBL_ENTRY)&_ZN6S666C43v70Ev,
  (VTBL_ENTRY)&_ZN6S666C43v71Ev,
  (VTBL_ENTRY)&_ZN6S666C43v72Ev,
  (VTBL_ENTRY)&_ZN6S666C43v73Ev,
  (VTBL_ENTRY)&_ZN6S666C43v74Ev,
  (VTBL_ENTRY)&_ZN6S666C43v75Ev,
  (VTBL_ENTRY)&_ZN6S666C43v76Ev,
  (VTBL_ENTRY)&_ZN6S666C43v77Ev,
  (VTBL_ENTRY)&_ZN6S666C43v78Ev,
  (VTBL_ENTRY)&_ZN6S666C43v79Ev,
  (VTBL_ENTRY)&_ZN6S666C43v80Ev,
  (VTBL_ENTRY)&_ZN6S666C43v81Ev,
  (VTBL_ENTRY)&_ZN6S666C43v82Ev,
  (VTBL_ENTRY)&_ZN6S666C43v83Ev,
  (VTBL_ENTRY)&_ZN6S666C43v84Ev,
  (VTBL_ENTRY)&_ZN6S666C43v85Ev,
  (VTBL_ENTRY)&_ZN6S666C43v86Ev,
  (VTBL_ENTRY)&_ZN6S666C43v87Ev,
  (VTBL_ENTRY)&_ZN6S666C43v88Ev,
  (VTBL_ENTRY)&_ZN6S666C43v89Ev,
};
extern VTBL_ENTRY _ZTI6S666C4[];
extern  VTBL_ENTRY _ZTV6S666C4[];
Class_Descriptor cd_S666C4 = {  "S666C4", // class name
  bases_S666C4, 1,
  &(vtc_S666C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(104,64), // object size
  NSPAIRA(_ZTI6S666C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S666C4),88, //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  S666C3  : S666C4 {
  virtual  ~S666C3(); // _ZN6S666C3D1Ev
  virtual void  v90(); // _ZN6S666C33v90Ev
  virtual void  v91(); // _ZN6S666C33v91Ev
  S666C3(); // tgen
};
//SIG(-1 S666C3) C1{ BC2{ BC3{ vd 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 Fi FL Fp[4] Fi[2] Fp FC4{ m Fi[2]} Fp[2]} vd v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 FC5{ m}} vd v1 v2}


 S666C3 ::~S666C3(){ note_dtor("S666C3", this);}
void  S666C3 ::v90(){vfunc_called(this, "_ZN6S666C33v90Ev");}
void  S666C3 ::v91(){vfunc_called(this, "_ZN6S666C33v91Ev");}
S666C3 ::S666C3(){ note_ctor("S666C3", this);} // tgen

static void Test_S666C3()
{
  extern Class_Descriptor cd_S666C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(14,17)];
    init_test(&cd_S666C3, buf);
    S666C3 *dp, &lv = *(dp=new (buf) S666C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(104,64), "sizeof(S666C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S666C3)");
    check_base_class_offset(lv, (S666C5*)(S666C4*), 0, "S666C3");
    check_base_class_offset(lv, (S666C4*), 0, "S666C3");
    test_class_info(&lv, &cd_S666C3);
    dp->~S666C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS666C3(Test_S666C3, "S666C3", ABISELECT(104,64));

#else // __cplusplus

extern void _ZN6S666C3C1Ev();
extern void _ZN6S666C3D1Ev();
Name_Map name_map_S666C3[] = {
  NSPAIR(_ZN6S666C3C1Ev),
  NSPAIR(_ZN6S666C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S666C5;
extern VTBL_ENTRY _ZTI6S666C5[];
extern  VTBL_ENTRY _ZTV6S666C5[];
extern Class_Descriptor cd_S666C4;
extern VTBL_ENTRY _ZTI6S666C4[];
extern  VTBL_ENTRY _ZTV6S666C4[];
static Base_Class bases_S666C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S666C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S666C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S666C3[];
extern void _ZN6S666C3D1Ev();
extern void _ZN6S666C3D0Ev();
extern void _ZN6S666C52v6Ev();
extern void _ZN6S666C52v7Ev();
extern void _ZN6S666C52v8Ev();
extern void _ZN6S666C52v9Ev();
extern void _ZN6S666C53v10Ev();
extern void _ZN6S666C53v11Ev();
extern void _ZN6S666C53v12Ev();
extern void _ZN6S666C53v13Ev();
extern void _ZN6S666C53v14Ev();
extern void _ZN6S666C53v15Ev();
extern void _ZN6S666C53v16Ev();
extern void _ZN6S666C53v17Ev();
extern void _ZN6S666C53v18Ev();
extern void _ZN6S666C53v19Ev();
extern void _ZN6S666C53v20Ev();
extern void _ZN6S666C53v21Ev();
extern void _ZN6S666C53v22Ev();
extern void _ZN6S666C53v23Ev();
extern void _ZN6S666C53v24Ev();
extern void _ZN6S666C53v25Ev();
extern void _ZN6S666C53v26Ev();
extern void _ZN6S666C53v27Ev();
extern void _ZN6S666C53v28Ev();
extern void _ZN6S666C53v29Ev();
extern void _ZN6S666C53v30Ev();
extern void _ZN6S666C53v31Ev();
extern void _ZN6S666C53v32Ev();
extern void _ZN6S666C53v33Ev();
extern void _ZN6S666C53v34Ev();
extern void _ZN6S666C53v35Ev();
extern void _ZN6S666C53v36Ev();
extern void _ZN6S666C53v37Ev();
extern void _ZN6S666C53v38Ev();
extern void _ZN6S666C53v39Ev();
extern void _ZN6S666C53v40Ev();
extern void _ZN6S666C53v41Ev();
extern void _ZN6S666C53v42Ev();
extern void _ZN6S666C53v43Ev();
extern void _ZN6S666C53v44Ev();
extern void _ZN6S666C53v45Ev();
extern void _ZN6S666C53v46Ev();
extern void _ZN6S666C53v47Ev();
extern void _ZN6S666C53v48Ev();
extern void _ZN6S666C53v49Ev();
extern void _ZN6S666C53v50Ev();
extern void _ZN6S666C53v51Ev();
extern void _ZN6S666C53v52Ev();
extern void _ZN6S666C53v53Ev();
extern void _ZN6S666C53v54Ev();
extern void _ZN6S666C53v55Ev();
extern void _ZN6S666C53v56Ev();
extern void _ZN6S666C53v57Ev();
extern void _ZN6S666C53v58Ev();
extern void _ZN6S666C53v59Ev();
extern void _ZN6S666C53v60Ev();
extern void _ZN6S666C53v61Ev();
extern void _ZN6S666C53v62Ev();
extern void _ZN6S666C53v63Ev();
extern void _ZN6S666C53v64Ev();
extern void _ZN6S666C53v65Ev();
extern void _ZN6S666C53v66Ev();
extern void _ZN6S666C53v67Ev();
extern void _ZN6S666C53v68Ev();
extern void _ZN6S666C53v69Ev();
extern void _ZN6S666C43v70Ev();
extern void _ZN6S666C43v71Ev();
extern void _ZN6S666C43v72Ev();
extern void _ZN6S666C43v73Ev();
extern void _ZN6S666C43v74Ev();
extern void _ZN6S666C43v75Ev();
extern void _ZN6S666C43v76Ev();
extern void _ZN6S666C43v77Ev();
extern void _ZN6S666C43v78Ev();
extern void _ZN6S666C43v79Ev();
extern void _ZN6S666C43v80Ev();
extern void _ZN6S666C43v81Ev();
extern void _ZN6S666C43v82Ev();
extern void _ZN6S666C43v83Ev();
extern void _ZN6S666C43v84Ev();
extern void _ZN6S666C43v85Ev();
extern void _ZN6S666C43v86Ev();
extern void _ZN6S666C43v87Ev();
extern void _ZN6S666C43v88Ev();
extern void _ZN6S666C43v89Ev();
extern void _ZN6S666C33v90Ev();
extern void _ZN6S666C33v91Ev();
static  VTBL_ENTRY vtc_S666C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S666C3[0]),
  (VTBL_ENTRY)&_ZN6S666C3D1Ev,
  (VTBL_ENTRY)&_ZN6S666C3D0Ev,
  (VTBL_ENTRY)&_ZN6S666C52v6Ev,
  (VTBL_ENTRY)&_ZN6S666C52v7Ev,
  (VTBL_ENTRY)&_ZN6S666C52v8Ev,
  (VTBL_ENTRY)&_ZN6S666C52v9Ev,
  (VTBL_ENTRY)&_ZN6S666C53v10Ev,
  (VTBL_ENTRY)&_ZN6S666C53v11Ev,
  (VTBL_ENTRY)&_ZN6S666C53v12Ev,
  (VTBL_ENTRY)&_ZN6S666C53v13Ev,
  (VTBL_ENTRY)&_ZN6S666C53v14Ev,
  (VTBL_ENTRY)&_ZN6S666C53v15Ev,
  (VTBL_ENTRY)&_ZN6S666C53v16Ev,
  (VTBL_ENTRY)&_ZN6S666C53v17Ev,
  (VTBL_ENTRY)&_ZN6S666C53v18Ev,
  (VTBL_ENTRY)&_ZN6S666C53v19Ev,
  (VTBL_ENTRY)&_ZN6S666C53v20Ev,
  (VTBL_ENTRY)&_ZN6S666C53v21Ev,
  (VTBL_ENTRY)&_ZN6S666C53v22Ev,
  (VTBL_ENTRY)&_ZN6S666C53v23Ev,
  (VTBL_ENTRY)&_ZN6S666C53v24Ev,
  (VTBL_ENTRY)&_ZN6S666C53v25Ev,
  (VTBL_ENTRY)&_ZN6S666C53v26Ev,
  (VTBL_ENTRY)&_ZN6S666C53v27Ev,
  (VTBL_ENTRY)&_ZN6S666C53v28Ev,
  (VTBL_ENTRY)&_ZN6S666C53v29Ev,
  (VTBL_ENTRY)&_ZN6S666C53v30Ev,
  (VTBL_ENTRY)&_ZN6S666C53v31Ev,
  (VTBL_ENTRY)&_ZN6S666C53v32Ev,
  (VTBL_ENTRY)&_ZN6S666C53v33Ev,
  (VTBL_ENTRY)&_ZN6S666C53v34Ev,
  (VTBL_ENTRY)&_ZN6S666C53v35Ev,
  (VTBL_ENTRY)&_ZN6S666C53v36Ev,
  (VTBL_ENTRY)&_ZN6S666C53v37Ev,
  (VTBL_ENTRY)&_ZN6S666C53v38Ev,
  (VTBL_ENTRY)&_ZN6S666C53v39Ev,
  (VTBL_ENTRY)&_ZN6S666C53v40Ev,
  (VTBL_ENTRY)&_ZN6S666C53v41Ev,
  (VTBL_ENTRY)&_ZN6S666C53v42Ev,
  (VTBL_ENTRY)&_ZN6S666C53v43Ev,
  (VTBL_ENTRY)&_ZN6S666C53v44Ev,
  (VTBL_ENTRY)&_ZN6S666C53v45Ev,
  (VTBL_ENTRY)&_ZN6S666C53v46Ev,
  (VTBL_ENTRY)&_ZN6S666C53v47Ev,
  (VTBL_ENTRY)&_ZN6S666C53v48Ev,
  (VTBL_ENTRY)&_ZN6S666C53v49Ev,
  (VTBL_ENTRY)&_ZN6S666C53v50Ev,
  (VTBL_ENTRY)&_ZN6S666C53v51Ev,
  (VTBL_ENTRY)&_ZN6S666C53v52Ev,
  (VTBL_ENTRY)&_ZN6S666C53v53Ev,
  (VTBL_ENTRY)&_ZN6S666C53v54Ev,
  (VTBL_ENTRY)&_ZN6S666C53v55Ev,
  (VTBL_ENTRY)&_ZN6S666C53v56Ev,
  (VTBL_ENTRY)&_ZN6S666C53v57Ev,
  (VTBL_ENTRY)&_ZN6S666C53v58Ev,
  (VTBL_ENTRY)&_ZN6S666C53v59Ev,
  (VTBL_ENTRY)&_ZN6S666C53v60Ev,
  (VTBL_ENTRY)&_ZN6S666C53v61Ev,
  (VTBL_ENTRY)&_ZN6S666C53v62Ev,
  (VTBL_ENTRY)&_ZN6S666C53v63Ev,
  (VTBL_ENTRY)&_ZN6S666C53v64Ev,
  (VTBL_ENTRY)&_ZN6S666C53v65Ev,
  (VTBL_ENTRY)&_ZN6S666C53v66Ev,
  (VTBL_ENTRY)&_ZN6S666C53v67Ev,
  (VTBL_ENTRY)&_ZN6S666C53v68Ev,
  (VTBL_ENTRY)&_ZN6S666C53v69Ev,
  (VTBL_ENTRY)&_ZN6S666C43v70Ev,
  (VTBL_ENTRY)&_ZN6S666C43v71Ev,
  (VTBL_ENTRY)&_ZN6S666C43v72Ev,
  (VTBL_ENTRY)&_ZN6S666C43v73Ev,
  (VTBL_ENTRY)&_ZN6S666C43v74Ev,
  (VTBL_ENTRY)&_ZN6S666C43v75Ev,
  (VTBL_ENTRY)&_ZN6S666C43v76Ev,
  (VTBL_ENTRY)&_ZN6S666C43v77Ev,
  (VTBL_ENTRY)&_ZN6S666C43v78Ev,
  (VTBL_ENTRY)&_ZN6S666C43v79Ev,
  (VTBL_ENTRY)&_ZN6S666C43v80Ev,
  (VTBL_ENTRY)&_ZN6S666C43v81Ev,
  (VTBL_ENTRY)&_ZN6S666C43v82Ev,
  (VTBL_ENTRY)&_ZN6S666C43v83Ev,
  (VTBL_ENTRY)&_ZN6S666C43v84Ev,
  (VTBL_ENTRY)&_ZN6S666C43v85Ev,
  (VTBL_ENTRY)&_ZN6S666C43v86Ev,
  (VTBL_ENTRY)&_ZN6S666C43v87Ev,
  (VTBL_ENTRY)&_ZN6S666C43v88Ev,
  (VTBL_ENTRY)&_ZN6S666C43v89Ev,
  (VTBL_ENTRY)&_ZN6S666C33v90Ev,
  (VTBL_ENTRY)&_ZN6S666C33v91Ev,
};
extern VTBL_ENTRY _ZTI6S666C3[];
extern  VTBL_ENTRY _ZTV6S666C3[];
Class_Descriptor cd_S666C3 = {  "S666C3", // class name
  bases_S666C3, 2,
  &(vtc_S666C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(104,64), // object size
  NSPAIRA(_ZTI6S666C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S666C3),90, //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  S666C2  : S666C3 {
  unsigned int s666c2f0:1;
  unsigned int s666c2f1:1;
  unsigned int s666c2f2:1;
  unsigned int s666c2f3:1;
  unsigned int s666c2f4:1;
  unsigned int s666c2f5:1;
  unsigned int s666c2f6:1;
  unsigned int s666c2f7:1;
  ::S1292C12 s666c2f8;
  ::S1289C10_nt s666c2f9;
  virtual  ~S666C2(); // _ZN6S666C2D1Ev
  virtual void  v92(); // _ZN6S666C23v92Ev
  virtual void  v93(); // _ZN6S666C23v93Ev
  virtual void  v94(); // _ZN6S666C23v94Ev
  S666C2(); // tgen
};
//SIG(-1 S666C2) C1{ BC2{ BC3{ BC4{ vd 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 Fi FL Fp[4] Fi[2] Fp FC5{ m Fi[2]} Fp[2]} vd v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 FC6{ m}} vd v88 v89} vd v1 v2 v3 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 FC7{ BC8{ m Fc[4] FC9{ BC10{ BC11{ m Fp Fi[2]}}} Fi[2]} Fp} FC12{ BC8 Fp}}


 S666C2 ::~S666C2(){ note_dtor("S666C2", this);}
void  S666C2 ::v92(){vfunc_called(this, "_ZN6S666C23v92Ev");}
void  S666C2 ::v93(){vfunc_called(this, "_ZN6S666C23v93Ev");}
void  S666C2 ::v94(){vfunc_called(this, "_ZN6S666C23v94Ev");}
S666C2 ::S666C2(){ note_ctor("S666C2", this);} // tgen

static void Test_S666C2()
{
  extern Class_Descriptor cd_S666C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(24,31)];
    init_test(&cd_S666C2, buf);
    S666C2 *dp, &lv = *(dp=new (buf) S666C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(184,120), "sizeof(S666C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S666C2)");
    check_base_class_offset(lv, (S666C5*)(S666C4*)(S666C3*), 0, "S666C2");
    check_base_class_offset(lv, (S666C4*)(S666C3*), 0, "S666C2");
    check_base_class_offset(lv, (S666C3*), 0, "S666C2");
    set_bf_and_test(lv, s666c2f0, ABISELECT(98,62), 0, 1, 1, "S666C2");
    set_bf_and_test(lv, s666c2f1, ABISELECT(98,62), 1, 1, 1, "S666C2");
    set_bf_and_test(lv, s666c2f2, ABISELECT(98,62), 2, 1, 1, "S666C2");
    set_bf_and_test(lv, s666c2f3, ABISELECT(98,62), 3, 1, 1, "S666C2");
    set_bf_and_test(lv, s666c2f4, ABISELECT(98,62), 4, 1, 1, "S666C2");
    set_bf_and_test(lv, s666c2f5, ABISELECT(98,62), 5, 1, 1, "S666C2");
    set_bf_and_test(lv, s666c2f6, ABISELECT(98,62), 6, 1, 1, "S666C2");
    set_bf_and_test(lv, s666c2f7, ABISELECT(98,62), 7, 1, 1, "S666C2");
    check_field_offset(lv, s666c2f8, ABISELECT(104,64), "S666C2.s666c2f8");
    check_field_offset(lv, s666c2f9, ABISELECT(144,92), "S666C2.s666c2f9");
    test_class_info(&lv, &cd_S666C2);
    dp->~S666C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS666C2(Test_S666C2, "S666C2", ABISELECT(184,120));

#else // __cplusplus

extern void _ZN6S666C2C1Ev();
extern void _ZN6S666C2D1Ev();
Name_Map name_map_S666C2[] = {
  NSPAIR(_ZN6S666C2C1Ev),
  NSPAIR(_ZN6S666C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S666C5;
extern VTBL_ENTRY _ZTI6S666C5[];
extern  VTBL_ENTRY _ZTV6S666C5[];
extern Class_Descriptor cd_S666C4;
extern VTBL_ENTRY _ZTI6S666C4[];
extern  VTBL_ENTRY _ZTV6S666C4[];
extern Class_Descriptor cd_S666C3;
extern VTBL_ENTRY _ZTI6S666C3[];
extern  VTBL_ENTRY _ZTV6S666C3[];
static Base_Class bases_S666C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S666C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S666C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S666C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S666C2[];
extern void _ZN6S666C2D1Ev();
extern void _ZN6S666C2D0Ev();
extern void _ZN6S666C52v6Ev();
extern void _ZN6S666C52v7Ev();
extern void _ZN6S666C52v8Ev();
extern void _ZN6S666C52v9Ev();
extern void _ZN6S666C53v10Ev();
extern void _ZN6S666C53v11Ev();
extern void _ZN6S666C53v12Ev();
extern void _ZN6S666C53v13Ev();
extern void _ZN6S666C53v14Ev();
extern void _ZN6S666C53v15Ev();
extern void _ZN6S666C53v16Ev();
extern void _ZN6S666C53v17Ev();
extern void _ZN6S666C53v18Ev();
extern void _ZN6S666C53v19Ev();
extern void _ZN6S666C53v20Ev();
extern void _ZN6S666C53v21Ev();
extern void _ZN6S666C53v22Ev();
extern void _ZN6S666C53v23Ev();
extern void _ZN6S666C53v24Ev();
extern void _ZN6S666C53v25Ev();
extern void _ZN6S666C53v26Ev();
extern void _ZN6S666C53v27Ev();
extern void _ZN6S666C53v28Ev();
extern void _ZN6S666C53v29Ev();
extern void _ZN6S666C53v30Ev();
extern void _ZN6S666C53v31Ev();
extern void _ZN6S666C53v32Ev();
extern void _ZN6S666C53v33Ev();
extern void _ZN6S666C53v34Ev();
extern void _ZN6S666C53v35Ev();
extern void _ZN6S666C53v36Ev();
extern void _ZN6S666C53v37Ev();
extern void _ZN6S666C53v38Ev();
extern void _ZN6S666C53v39Ev();
extern void _ZN6S666C53v40Ev();
extern void _ZN6S666C53v41Ev();
extern void _ZN6S666C53v42Ev();
extern void _ZN6S666C53v43Ev();
extern void _ZN6S666C53v44Ev();
extern void _ZN6S666C53v45Ev();
extern void _ZN6S666C53v46Ev();
extern void _ZN6S666C53v47Ev();
extern void _ZN6S666C53v48Ev();
extern void _ZN6S666C53v49Ev();
extern void _ZN6S666C53v50Ev();
extern void _ZN6S666C53v51Ev();
extern void _ZN6S666C53v52Ev();
extern void _ZN6S666C53v53Ev();
extern void _ZN6S666C53v54Ev();
extern void _ZN6S666C53v55Ev();
extern void _ZN6S666C53v56Ev();
extern void _ZN6S666C53v57Ev();
extern void _ZN6S666C53v58Ev();
extern void _ZN6S666C53v59Ev();
extern void _ZN6S666C53v60Ev();
extern void _ZN6S666C53v61Ev();
extern void _ZN6S666C53v62Ev();
extern void _ZN6S666C53v63Ev();
extern void _ZN6S666C53v64Ev();
extern void _ZN6S666C53v65Ev();
extern void _ZN6S666C53v66Ev();
extern void _ZN6S666C53v67Ev();
extern void _ZN6S666C53v68Ev();
extern void _ZN6S666C53v69Ev();
extern void _ZN6S666C43v70Ev();
extern void _ZN6S666C43v71Ev();
extern void _ZN6S666C43v72Ev();
extern void _ZN6S666C43v73Ev();
extern void _ZN6S666C43v74Ev();
extern void _ZN6S666C43v75Ev();
extern void _ZN6S666C43v76Ev();
extern void _ZN6S666C43v77Ev();
extern void _ZN6S666C43v78Ev();
extern void _ZN6S666C43v79Ev();
extern void _ZN6S666C43v80Ev();
extern void _ZN6S666C43v81Ev();
extern void _ZN6S666C43v82Ev();
extern void _ZN6S666C43v83Ev();
extern void _ZN6S666C43v84Ev();
extern void _ZN6S666C43v85Ev();
extern void _ZN6S666C43v86Ev();
extern void _ZN6S666C43v87Ev();
extern void _ZN6S666C43v88Ev();
extern void _ZN6S666C43v89Ev();
extern void _ZN6S666C33v90Ev();
extern void _ZN6S666C33v91Ev();
extern void _ZN6S666C23v92Ev();
extern void _ZN6S666C23v93Ev();
extern void _ZN6S666C23v94Ev();
static  VTBL_ENTRY vtc_S666C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S666C2[0]),
  (VTBL_ENTRY)&_ZN6S666C2D1Ev,
  (VTBL_ENTRY)&_ZN6S666C2D0Ev,
  (VTBL_ENTRY)&_ZN6S666C52v6Ev,
  (VTBL_ENTRY)&_ZN6S666C52v7Ev,
  (VTBL_ENTRY)&_ZN6S666C52v8Ev,
  (VTBL_ENTRY)&_ZN6S666C52v9Ev,
  (VTBL_ENTRY)&_ZN6S666C53v10Ev,
  (VTBL_ENTRY)&_ZN6S666C53v11Ev,
  (VTBL_ENTRY)&_ZN6S666C53v12Ev,
  (VTBL_ENTRY)&_ZN6S666C53v13Ev,
  (VTBL_ENTRY)&_ZN6S666C53v14Ev,
  (VTBL_ENTRY)&_ZN6S666C53v15Ev,
  (VTBL_ENTRY)&_ZN6S666C53v16Ev,
  (VTBL_ENTRY)&_ZN6S666C53v17Ev,
  (VTBL_ENTRY)&_ZN6S666C53v18Ev,
  (VTBL_ENTRY)&_ZN6S666C53v19Ev,
  (VTBL_ENTRY)&_ZN6S666C53v20Ev,
  (VTBL_ENTRY)&_ZN6S666C53v21Ev,
  (VTBL_ENTRY)&_ZN6S666C53v22Ev,
  (VTBL_ENTRY)&_ZN6S666C53v23Ev,
  (VTBL_ENTRY)&_ZN6S666C53v24Ev,
  (VTBL_ENTRY)&_ZN6S666C53v25Ev,
  (VTBL_ENTRY)&_ZN6S666C53v26Ev,
  (VTBL_ENTRY)&_ZN6S666C53v27Ev,
  (VTBL_ENTRY)&_ZN6S666C53v28Ev,
  (VTBL_ENTRY)&_ZN6S666C53v29Ev,
  (VTBL_ENTRY)&_ZN6S666C53v30Ev,
  (VTBL_ENTRY)&_ZN6S666C53v31Ev,
  (VTBL_ENTRY)&_ZN6S666C53v32Ev,
  (VTBL_ENTRY)&_ZN6S666C53v33Ev,
  (VTBL_ENTRY)&_ZN6S666C53v34Ev,
  (VTBL_ENTRY)&_ZN6S666C53v35Ev,
  (VTBL_ENTRY)&_ZN6S666C53v36Ev,
  (VTBL_ENTRY)&_ZN6S666C53v37Ev,
  (VTBL_ENTRY)&_ZN6S666C53v38Ev,
  (VTBL_ENTRY)&_ZN6S666C53v39Ev,
  (VTBL_ENTRY)&_ZN6S666C53v40Ev,
  (VTBL_ENTRY)&_ZN6S666C53v41Ev,
  (VTBL_ENTRY)&_ZN6S666C53v42Ev,
  (VTBL_ENTRY)&_ZN6S666C53v43Ev,
  (VTBL_ENTRY)&_ZN6S666C53v44Ev,
  (VTBL_ENTRY)&_ZN6S666C53v45Ev,
  (VTBL_ENTRY)&_ZN6S666C53v46Ev,
  (VTBL_ENTRY)&_ZN6S666C53v47Ev,
  (VTBL_ENTRY)&_ZN6S666C53v48Ev,
  (VTBL_ENTRY)&_ZN6S666C53v49Ev,
  (VTBL_ENTRY)&_ZN6S666C53v50Ev,
  (VTBL_ENTRY)&_ZN6S666C53v51Ev,
  (VTBL_ENTRY)&_ZN6S666C53v52Ev,
  (VTBL_ENTRY)&_ZN6S666C53v53Ev,
  (VTBL_ENTRY)&_ZN6S666C53v54Ev,
  (VTBL_ENTRY)&_ZN6S666C53v55Ev,
  (VTBL_ENTRY)&_ZN6S666C53v56Ev,
  (VTBL_ENTRY)&_ZN6S666C53v57Ev,
  (VTBL_ENTRY)&_ZN6S666C53v58Ev,
  (VTBL_ENTRY)&_ZN6S666C53v59Ev,
  (VTBL_ENTRY)&_ZN6S666C53v60Ev,
  (VTBL_ENTRY)&_ZN6S666C53v61Ev,
  (VTBL_ENTRY)&_ZN6S666C53v62Ev,
  (VTBL_ENTRY)&_ZN6S666C53v63Ev,
  (VTBL_ENTRY)&_ZN6S666C53v64Ev,
  (VTBL_ENTRY)&_ZN6S666C53v65Ev,
  (VTBL_ENTRY)&_ZN6S666C53v66Ev,
  (VTBL_ENTRY)&_ZN6S666C53v67Ev,
  (VTBL_ENTRY)&_ZN6S666C53v68Ev,
  (VTBL_ENTRY)&_ZN6S666C53v69Ev,
  (VTBL_ENTRY)&_ZN6S666C43v70Ev,
  (VTBL_ENTRY)&_ZN6S666C43v71Ev,
  (VTBL_ENTRY)&_ZN6S666C43v72Ev,
  (VTBL_ENTRY)&_ZN6S666C43v73Ev,
  (VTBL_ENTRY)&_ZN6S666C43v74Ev,
  (VTBL_ENTRY)&_ZN6S666C43v75Ev,
  (VTBL_ENTRY)&_ZN6S666C43v76Ev,
  (VTBL_ENTRY)&_ZN6S666C43v77Ev,
  (VTBL_ENTRY)&_ZN6S666C43v78Ev,
  (VTBL_ENTRY)&_ZN6S666C43v79Ev,
  (VTBL_ENTRY)&_ZN6S666C43v80Ev,
  (VTBL_ENTRY)&_ZN6S666C43v81Ev,
  (VTBL_ENTRY)&_ZN6S666C43v82Ev,
  (VTBL_ENTRY)&_ZN6S666C43v83Ev,
  (VTBL_ENTRY)&_ZN6S666C43v84Ev,
  (VTBL_ENTRY)&_ZN6S666C43v85Ev,
  (VTBL_ENTRY)&_ZN6S666C43v86Ev,
  (VTBL_ENTRY)&_ZN6S666C43v87Ev,
  (VTBL_ENTRY)&_ZN6S666C43v88Ev,
  (VTBL_ENTRY)&_ZN6S666C43v89Ev,
  (VTBL_ENTRY)&_ZN6S666C33v90Ev,
  (VTBL_ENTRY)&_ZN6S666C33v91Ev,
  (VTBL_ENTRY)&_ZN6S666C23v92Ev,
  (VTBL_ENTRY)&_ZN6S666C23v93Ev,
  (VTBL_ENTRY)&_ZN6S666C23v94Ev,
};
extern VTBL_ENTRY _ZTI6S666C2[];
extern  VTBL_ENTRY _ZTV6S666C2[];
Class_Descriptor cd_S666C2 = {  "S666C2", // class name
  bases_S666C2, 3,
  &(vtc_S666C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(184,120), // object size
  NSPAIRA(_ZTI6S666C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S666C2),93, //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  S666C1  : S666C2 {
  unsigned int s666c1f0:1;
  ::S1292C12 s666c1f1;
  ::S1292C12 s666c1f2;
  char s666c1f3;
  virtual  ~S666C1(); // _ZN6S666C1D1Ev
  virtual void  v1(); // _ZN6S666C12v1Ev
  virtual void  v2(); // _ZN6S666C12v2Ev
  virtual void  v3(); // _ZN6S666C12v3Ev
  virtual void  v4(); // _ZN6S666C12v4Ev
  virtual void  v5(); // _ZN6S666C12v5Ev
  S666C1(); // tgen
};
//SIG(1 S666C1) 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 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 FC7{ m}} vd v90 v91} vd v92 v93 v94 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 FC8{ BC9{ m Fc[4] FC10{ BC11{ BC12{ m Fp Fi[2]}}} Fi[2]} Fp} FC13{ BC9 Fp}} vd v1 v2 v3 v4 v5 Fi:1 FC8 FC8 Fc}


 S666C1 ::~S666C1(){ note_dtor("S666C1", this);}
void  S666C1 ::v1(){vfunc_called(this, "_ZN6S666C12v1Ev");}
void  S666C1 ::v2(){vfunc_called(this, "_ZN6S666C12v2Ev");}
void  S666C1 ::v3(){vfunc_called(this, "_ZN6S666C12v3Ev");}
void  S666C1 ::v4(){vfunc_called(this, "_ZN6S666C12v4Ev");}
void  S666C1 ::v5(){vfunc_called(this, "_ZN6S666C12v5Ev");}
S666C1 ::S666C1(){ note_ctor("S666C1", this);} // tgen

static void Test_S666C1()
{
  extern Class_Descriptor cd_S666C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(36,47)];
    init_test(&cd_S666C1, buf);
    S666C1 *dp, &lv = *(dp=new (buf) S666C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(280,184), "sizeof(S666C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S666C1)");
    check_base_class_offset(lv, (S666C5*)(S666C4*)(S666C3*)(S666C2*), 0, "S666C1");
    check_base_class_offset(lv, (S666C4*)(S666C3*)(S666C2*), 0, "S666C1");
    check_base_class_offset(lv, (S666C3*)(S666C2*), 0, "S666C1");
    check_base_class_offset(lv, (S666C2*), 0, "S666C1");
    set_bf_and_test(lv, s666c1f0, ABISELECT(184,120), 0, 1, 1, "S666C1");
    check_field_offset(lv, s666c1f1, ABISELECT(192,124), "S666C1.s666c1f1");
    check_field_offset(lv, s666c1f2, ABISELECT(232,152), "S666C1.s666c1f2");
    check_field_offset(lv, s666c1f3, ABISELECT(272,180), "S666C1.s666c1f3");
    test_class_info(&lv, &cd_S666C1);
    dp->~S666C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS666C1(Test_S666C1, "S666C1", ABISELECT(280,184));

#else // __cplusplus

extern void _ZN6S666C1C1Ev();
extern void _ZN6S666C1D1Ev();
Name_Map name_map_S666C1[] = {
  NSPAIR(_ZN6S666C1C1Ev),
  NSPAIR(_ZN6S666C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S666C5;
extern VTBL_ENTRY _ZTI6S666C5[];
extern  VTBL_ENTRY _ZTV6S666C5[];
extern Class_Descriptor cd_S666C4;
extern VTBL_ENTRY _ZTI6S666C4[];
extern  VTBL_ENTRY _ZTV6S666C4[];
extern Class_Descriptor cd_S666C3;
extern VTBL_ENTRY _ZTI6S666C3[];
extern  VTBL_ENTRY _ZTV6S666C3[];
extern Class_Descriptor cd_S666C2;
extern VTBL_ENTRY _ZTI6S666C2[];
extern  VTBL_ENTRY _ZTV6S666C2[];
static Base_Class bases_S666C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S666C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S666C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S666C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S666C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S666C1[];
extern void _ZN6S666C1D1Ev();
extern void _ZN6S666C1D0Ev();
extern void _ZN6S666C52v6Ev();
extern void _ZN6S666C52v7Ev();
extern void _ZN6S666C52v8Ev();
extern void _ZN6S666C52v9Ev();
extern void _ZN6S666C53v10Ev();
extern void _ZN6S666C53v11Ev();
extern void _ZN6S666C53v12Ev();
extern void _ZN6S666C53v13Ev();
extern void _ZN6S666C53v14Ev();
extern void _ZN6S666C53v15Ev();
extern void _ZN6S666C53v16Ev();
extern void _ZN6S666C53v17Ev();
extern void _ZN6S666C53v18Ev();
extern void _ZN6S666C53v19Ev();
extern void _ZN6S666C53v20Ev();
extern void _ZN6S666C53v21Ev();
extern void _ZN6S666C53v22Ev();
extern void _ZN6S666C53v23Ev();
extern void _ZN6S666C53v24Ev();
extern void _ZN6S666C53v25Ev();
extern void _ZN6S666C53v26Ev();
extern void _ZN6S666C53v27Ev();
extern void _ZN6S666C53v28Ev();
extern void _ZN6S666C53v29Ev();
extern void _ZN6S666C53v30Ev();
extern void _ZN6S666C53v31Ev();
extern void _ZN6S666C53v32Ev();
extern void _ZN6S666C53v33Ev();
extern void _ZN6S666C53v34Ev();
extern void _ZN6S666C53v35Ev();
extern void _ZN6S666C53v36Ev();
extern void _ZN6S666C53v37Ev();
extern void _ZN6S666C53v38Ev();
extern void _ZN6S666C53v39Ev();
extern void _ZN6S666C53v40Ev();
extern void _ZN6S666C53v41Ev();
extern void _ZN6S666C53v42Ev();
extern void _ZN6S666C53v43Ev();
extern void _ZN6S666C53v44Ev();
extern void _ZN6S666C53v45Ev();
extern void _ZN6S666C53v46Ev();
extern void _ZN6S666C53v47Ev();
extern void _ZN6S666C53v48Ev();
extern void _ZN6S666C53v49Ev();
extern void _ZN6S666C53v50Ev();
extern void _ZN6S666C53v51Ev();
extern void _ZN6S666C53v52Ev();
extern void _ZN6S666C53v53Ev();
extern void _ZN6S666C53v54Ev();
extern void _ZN6S666C53v55Ev();
extern void _ZN6S666C53v56Ev();
extern void _ZN6S666C53v57Ev();
extern void _ZN6S666C53v58Ev();
extern void _ZN6S666C53v59Ev();
extern void _ZN6S666C53v60Ev();
extern void _ZN6S666C53v61Ev();
extern void _ZN6S666C53v62Ev();
extern void _ZN6S666C53v63Ev();
extern void _ZN6S666C53v64Ev();
extern void _ZN6S666C53v65Ev();
extern void _ZN6S666C53v66Ev();
extern void _ZN6S666C53v67Ev();
extern void _ZN6S666C53v68Ev();
extern void _ZN6S666C53v69Ev();
extern void _ZN6S666C43v70Ev();
extern void _ZN6S666C43v71Ev();
extern void _ZN6S666C43v72Ev();
extern void _ZN6S666C43v73Ev();
extern void _ZN6S666C43v74Ev();
extern void _ZN6S666C43v75Ev();
extern void _ZN6S666C43v76Ev();
extern void _ZN6S666C43v77Ev();
extern void _ZN6S666C43v78Ev();
extern void _ZN6S666C43v79Ev();
extern void _ZN6S666C43v80Ev();
extern void _ZN6S666C43v81Ev();
extern void _ZN6S666C43v82Ev();
extern void _ZN6S666C43v83Ev();
extern void _ZN6S666C43v84Ev();
extern void _ZN6S666C43v85Ev();
extern void _ZN6S666C43v86Ev();
extern void _ZN6S666C43v87Ev();
extern void _ZN6S666C43v88Ev();
extern void _ZN6S666C43v89Ev();
extern void _ZN6S666C33v90Ev();
extern void _ZN6S666C33v91Ev();
extern void _ZN6S666C23v92Ev();
extern void _ZN6S666C23v93Ev();
extern void _ZN6S666C23v94Ev();
extern void _ZN6S666C12v1Ev();
extern void _ZN6S666C12v2Ev();
extern void _ZN6S666C12v3Ev();
extern void _ZN6S666C12v4Ev();
extern void _ZN6S666C12v5Ev();
static  VTBL_ENTRY vtc_S666C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S666C1[0]),
  (VTBL_ENTRY)&_ZN6S666C1D1Ev,
  (VTBL_ENTRY)&_ZN6S666C1D0Ev,
  (VTBL_ENTRY)&_ZN6S666C52v6Ev,
  (VTBL_ENTRY)&_ZN6S666C52v7Ev,
  (VTBL_ENTRY)&_ZN6S666C52v8Ev,
  (VTBL_ENTRY)&_ZN6S666C52v9Ev,
  (VTBL_ENTRY)&_ZN6S666C53v10Ev,
  (VTBL_ENTRY)&_ZN6S666C53v11Ev,
  (VTBL_ENTRY)&_ZN6S666C53v12Ev,
  (VTBL_ENTRY)&_ZN6S666C53v13Ev,
  (VTBL_ENTRY)&_ZN6S666C53v14Ev,
  (VTBL_ENTRY)&_ZN6S666C53v15Ev,
  (VTBL_ENTRY)&_ZN6S666C53v16Ev,
  (VTBL_ENTRY)&_ZN6S666C53v17Ev,
  (VTBL_ENTRY)&_ZN6S666C53v18Ev,
  (VTBL_ENTRY)&_ZN6S666C53v19Ev,
  (VTBL_ENTRY)&_ZN6S666C53v20Ev,
  (VTBL_ENTRY)&_ZN6S666C53v21Ev,
  (VTBL_ENTRY)&_ZN6S666C53v22Ev,
  (VTBL_ENTRY)&_ZN6S666C53v23Ev,
  (VTBL_ENTRY)&_ZN6S666C53v24Ev,
  (VTBL_ENTRY)&_ZN6S666C53v25Ev,
  (VTBL_ENTRY)&_ZN6S666C53v26Ev,
  (VTBL_ENTRY)&_ZN6S666C53v27Ev,
  (VTBL_ENTRY)&_ZN6S666C53v28Ev,
  (VTBL_ENTRY)&_ZN6S666C53v29Ev,
  (VTBL_ENTRY)&_ZN6S666C53v30Ev,
  (VTBL_ENTRY)&_ZN6S666C53v31Ev,
  (VTBL_ENTRY)&_ZN6S666C53v32Ev,
  (VTBL_ENTRY)&_ZN6S666C53v33Ev,
  (VTBL_ENTRY)&_ZN6S666C53v34Ev,
  (VTBL_ENTRY)&_ZN6S666C53v35Ev,
  (VTBL_ENTRY)&_ZN6S666C53v36Ev,
  (VTBL_ENTRY)&_ZN6S666C53v37Ev,
  (VTBL_ENTRY)&_ZN6S666C53v38Ev,
  (VTBL_ENTRY)&_ZN6S666C53v39Ev,
  (VTBL_ENTRY)&_ZN6S666C53v40Ev,
  (VTBL_ENTRY)&_ZN6S666C53v41Ev,
  (VTBL_ENTRY)&_ZN6S666C53v42Ev,
  (VTBL_ENTRY)&_ZN6S666C53v43Ev,
  (VTBL_ENTRY)&_ZN6S666C53v44Ev,
  (VTBL_ENTRY)&_ZN6S666C53v45Ev,
  (VTBL_ENTRY)&_ZN6S666C53v46Ev,
  (VTBL_ENTRY)&_ZN6S666C53v47Ev,
  (VTBL_ENTRY)&_ZN6S666C53v48Ev,
  (VTBL_ENTRY)&_ZN6S666C53v49Ev,
  (VTBL_ENTRY)&_ZN6S666C53v50Ev,
  (VTBL_ENTRY)&_ZN6S666C53v51Ev,
  (VTBL_ENTRY)&_ZN6S666C53v52Ev,
  (VTBL_ENTRY)&_ZN6S666C53v53Ev,
  (VTBL_ENTRY)&_ZN6S666C53v54Ev,
  (VTBL_ENTRY)&_ZN6S666C53v55Ev,
  (VTBL_ENTRY)&_ZN6S666C53v56Ev,
  (VTBL_ENTRY)&_ZN6S666C53v57Ev,
  (VTBL_ENTRY)&_ZN6S666C53v58Ev,
  (VTBL_ENTRY)&_ZN6S666C53v59Ev,
  (VTBL_ENTRY)&_ZN6S666C53v60Ev,
  (VTBL_ENTRY)&_ZN6S666C53v61Ev,
  (VTBL_ENTRY)&_ZN6S666C53v62Ev,
  (VTBL_ENTRY)&_ZN6S666C53v63Ev,
  (VTBL_ENTRY)&_ZN6S666C53v64Ev,
  (VTBL_ENTRY)&_ZN6S666C53v65Ev,
  (VTBL_ENTRY)&_ZN6S666C53v66Ev,
  (VTBL_ENTRY)&_ZN6S666C53v67Ev,
  (VTBL_ENTRY)&_ZN6S666C53v68Ev,
  (VTBL_ENTRY)&_ZN6S666C53v69Ev,
  (VTBL_ENTRY)&_ZN6S666C43v70Ev,
  (VTBL_ENTRY)&_ZN6S666C43v71Ev,
  (VTBL_ENTRY)&_ZN6S666C43v72Ev,
  (VTBL_ENTRY)&_ZN6S666C43v73Ev,
  (VTBL_ENTRY)&_ZN6S666C43v74Ev,
  (VTBL_ENTRY)&_ZN6S666C43v75Ev,
  (VTBL_ENTRY)&_ZN6S666C43v76Ev,
  (VTBL_ENTRY)&_ZN6S666C43v77Ev,
  (VTBL_ENTRY)&_ZN6S666C43v78Ev,
  (VTBL_ENTRY)&_ZN6S666C43v79Ev,
  (VTBL_ENTRY)&_ZN6S666C43v80Ev,
  (VTBL_ENTRY)&_ZN6S666C43v81Ev,
  (VTBL_ENTRY)&_ZN6S666C43v82Ev,
  (VTBL_ENTRY)&_ZN6S666C43v83Ev,
  (VTBL_ENTRY)&_ZN6S666C43v84Ev,
  (VTBL_ENTRY)&_ZN6S666C43v85Ev,
  (VTBL_ENTRY)&_ZN6S666C43v86Ev,
  (VTBL_ENTRY)&_ZN6S666C43v87Ev,
  (VTBL_ENTRY)&_ZN6S666C43v88Ev,
  (VTBL_ENTRY)&_ZN6S666C43v89Ev,
  (VTBL_ENTRY)&_ZN6S666C33v90Ev,
  (VTBL_ENTRY)&_ZN6S666C33v91Ev,
  (VTBL_ENTRY)&_ZN6S666C23v92Ev,
  (VTBL_ENTRY)&_ZN6S666C23v93Ev,
  (VTBL_ENTRY)&_ZN6S666C23v94Ev,
  (VTBL_ENTRY)&_ZN6S666C12v1Ev,
  (VTBL_ENTRY)&_ZN6S666C12v2Ev,
  (VTBL_ENTRY)&_ZN6S666C12v3Ev,
  (VTBL_ENTRY)&_ZN6S666C12v4Ev,
  (VTBL_ENTRY)&_ZN6S666C12v5Ev,
};
extern VTBL_ENTRY _ZTI6S666C1[];
extern  VTBL_ENTRY _ZTV6S666C1[];
Class_Descriptor cd_S666C1 = {  "S666C1", // class name
  bases_S666C1, 4,
  &(vtc_S666C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(280,184), // object size
  NSPAIRA(_ZTI6S666C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S666C1),98, //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  S1311C4  {
  int s1311c4f0;
  __tsi64 s1311c4f1;
  void *s1311c4f2[4];
  int s1311c4f3[2];
  void *s1311c4f4;
  ::S674C6_nt s1311c4f5;
  void *s1311c4f6[2];
  virtual  ~S1311C4(); // _ZN7S1311C4D1Ev
  virtual void  v13(); // _ZN7S1311C43v13Ev
  virtual void  v14(); // _ZN7S1311C43v14Ev
  virtual void  v15(); // _ZN7S1311C43v15Ev
  virtual void  v16(); // _ZN7S1311C43v16Ev
  virtual void  v17(); // _ZN7S1311C43v17Ev
  virtual void  v18(); // _ZN7S1311C43v18Ev
  virtual void  v19(); // _ZN7S1311C43v19Ev
  virtual void  v20(); // _ZN7S1311C43v20Ev
  virtual void  v21(); // _ZN7S1311C43v21Ev
  virtual void  v22(); // _ZN7S1311C43v22Ev
  virtual void  v23(); // _ZN7S1311C43v23Ev
  virtual void  v24(); // _ZN7S1311C43v24Ev
  virtual void  v25(); // _ZN7S1311C43v25Ev
  virtual void  v26(); // _ZN7S1311C43v26Ev
  virtual void  v27(); // _ZN7S1311C43v27Ev
  virtual void  v28(); // _ZN7S1311C43v28Ev
  virtual void  v29(); // _ZN7S1311C43v29Ev
  virtual void  v30(); // _ZN7S1311C43v30Ev
  virtual void  v31(); // _ZN7S1311C43v31Ev
  virtual void  v32(); // _ZN7S1311C43v32Ev
  virtual void  v33(); // _ZN7S1311C43v33Ev
  virtual void  v34(); // _ZN7S1311C43v34Ev
  virtual void  v35(); // _ZN7S1311C43v35Ev
  virtual void  v36(); // _ZN7S1311C43v36Ev
  virtual void  v37(); // _ZN7S1311C43v37Ev
  virtual void  v38(); // _ZN7S1311C43v38Ev
  virtual void  v39(); // _ZN7S1311C43v39Ev
  virtual void  v40(); // _ZN7S1311C43v40Ev
  virtual void  v41(); // _ZN7S1311C43v41Ev
  virtual void  v42(); // _ZN7S1311C43v42Ev
  virtual void  v43(); // _ZN7S1311C43v43Ev
  virtual void  v44(); // _ZN7S1311C43v44Ev
  virtual void  v45(); // _ZN7S1311C43v45Ev
  virtual void  v46(); // _ZN7S1311C43v46Ev
  virtual void  v47(); // _ZN7S1311C43v47Ev
  virtual void  v48(); // _ZN7S1311C43v48Ev
  virtual void  v49(); // _ZN7S1311C43v49Ev
  virtual void  v50(); // _ZN7S1311C43v50Ev
  virtual void  v51(); // _ZN7S1311C43v51Ev
  virtual void  v52(); // _ZN7S1311C43v52Ev
  virtual void  v53(); // _ZN7S1311C43v53Ev
  virtual void  v54(); // _ZN7S1311C43v54Ev
  virtual void  v55(); // _ZN7S1311C43v55Ev
  virtual void  v56(); // _ZN7S1311C43v56Ev
  virtual void  v57(); // _ZN7S1311C43v57Ev
  virtual void  v58(); // _ZN7S1311C43v58Ev
  virtual void  v59(); // _ZN7S1311C43v59Ev
  virtual void  v60(); // _ZN7S1311C43v60Ev
  virtual void  v61(); // _ZN7S1311C43v61Ev
  virtual void  v62(); // _ZN7S1311C43v62Ev
  virtual void  v63(); // _ZN7S1311C43v63Ev
  virtual void  v64(); // _ZN7S1311C43v64Ev
  virtual void  v65(); // _ZN7S1311C43v65Ev
  virtual void  v66(); // _ZN7S1311C43v66Ev
  virtual void  v67(); // _ZN7S1311C43v67Ev
  virtual void  v68(); // _ZN7S1311C43v68Ev
  virtual void  v69(); // _ZN7S1311C43v69Ev
  virtual void  v70(); // _ZN7S1311C43v70Ev
  virtual void  v71(); // _ZN7S1311C43v71Ev
  virtual void  v72(); // _ZN7S1311C43v72Ev
  virtual void  v73(); // _ZN7S1311C43v73Ev
  virtual void  v74(); // _ZN7S1311C43v74Ev
  virtual void  v75(); // _ZN7S1311C43v75Ev
  virtual void  v76(); // _ZN7S1311C43v76Ev
  S1311C4(); // tgen
};
//SIG(-1 S1311C4) 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]}


 S1311C4 ::~S1311C4(){ note_dtor("S1311C4", this);}
void  S1311C4 ::v13(){vfunc_called(this, "_ZN7S1311C43v13Ev");}
void  S1311C4 ::v14(){vfunc_called(this, "_ZN7S1311C43v14Ev");}
void  S1311C4 ::v15(){vfunc_called(this, "_ZN7S1311C43v15Ev");}
void  S1311C4 ::v16(){vfunc_called(this, "_ZN7S1311C43v16Ev");}
void  S1311C4 ::v17(){vfunc_called(this, "_ZN7S1311C43v17Ev");}
void  S1311C4 ::v18(){vfunc_called(this, "_ZN7S1311C43v18Ev");}
void  S1311C4 ::v19(){vfunc_called(this, "_ZN7S1311C43v19Ev");}
void  S1311C4 ::v20(){vfunc_called(this, "_ZN7S1311C43v20Ev");}
void  S1311C4 ::v21(){vfunc_called(this, "_ZN7S1311C43v21Ev");}
void  S1311C4 ::v22(){vfunc_called(this, "_ZN7S1311C43v22Ev");}
void  S1311C4 ::v23(){vfunc_called(this, "_ZN7S1311C43v23Ev");}
void  S1311C4 ::v24(){vfunc_called(this, "_ZN7S1311C43v24Ev");}
void  S1311C4 ::v25(){vfunc_called(this, "_ZN7S1311C43v25Ev");}
void  S1311C4 ::v26(){vfunc_called(this, "_ZN7S1311C43v26Ev");}
void  S1311C4 ::v27(){vfunc_called(this, "_ZN7S1311C43v27Ev");}
void  S1311C4 ::v28(){vfunc_called(this, "_ZN7S1311C43v28Ev");}
void  S1311C4 ::v29(){vfunc_called(this, "_ZN7S1311C43v29Ev");}
void  S1311C4 ::v30(){vfunc_called(this, "_ZN7S1311C43v30Ev");}
void  S1311C4 ::v31(){vfunc_called(this, "_ZN7S1311C43v31Ev");}
void  S1311C4 ::v32(){vfunc_called(this, "_ZN7S1311C43v32Ev");}
void  S1311C4 ::v33(){vfunc_called(this, "_ZN7S1311C43v33Ev");}
void  S1311C4 ::v34(){vfunc_called(this, "_ZN7S1311C43v34Ev");}
void  S1311C4 ::v35(){vfunc_called(this, "_ZN7S1311C43v35Ev");}
void  S1311C4 ::v36(){vfunc_called(this, "_ZN7S1311C43v36Ev");}
void  S1311C4 ::v37(){vfunc_called(this, "_ZN7S1311C43v37Ev");}
void  S1311C4 ::v38(){vfunc_called(this, "_ZN7S1311C43v38Ev");}
void  S1311C4 ::v39(){vfunc_called(this, "_ZN7S1311C43v39Ev");}
void  S1311C4 ::v40(){vfunc_called(this, "_ZN7S1311C43v40Ev");}
void  S1311C4 ::v41(){vfunc_called(this, "_ZN7S1311C43v41Ev");}
void  S1311C4 ::v42(){vfunc_called(this, "_ZN7S1311C43v42Ev");}
void  S1311C4 ::v43(){vfunc_called(this, "_ZN7S1311C43v43Ev");}
void  S1311C4 ::v44(){vfunc_called(this, "_ZN7S1311C43v44Ev");}
void  S1311C4 ::v45(){vfunc_called(this, "_ZN7S1311C43v45Ev");}
void  S1311C4 ::v46(){vfunc_called(this, "_ZN7S1311C43v46Ev");}
void  S1311C4 ::v47(){vfunc_called(this, "_ZN7S1311C43v47Ev");}
void  S1311C4 ::v48(){vfunc_called(this, "_ZN7S1311C43v48Ev");}
void  S1311C4 ::v49(){vfunc_called(this, "_ZN7S1311C43v49Ev");}
void  S1311C4 ::v50(){vfunc_called(this, "_ZN7S1311C43v50Ev");}
void  S1311C4 ::v51(){vfunc_called(this, "_ZN7S1311C43v51Ev");}
void  S1311C4 ::v52(){vfunc_called(this, "_ZN7S1311C43v52Ev");}
void  S1311C4 ::v53(){vfunc_called(this, "_ZN7S1311C43v53Ev");}
void  S1311C4 ::v54(){vfunc_called(this, "_ZN7S1311C43v54Ev");}
void  S1311C4 ::v55(){vfunc_called(this, "_ZN7S1311C43v55Ev");}
void  S1311C4 ::v56(){vfunc_called(this, "_ZN7S1311C43v56Ev");}
void  S1311C4 ::v57(){vfunc_called(this, "_ZN7S1311C43v57Ev");}
void  S1311C4 ::v58(){vfunc_called(this, "_ZN7S1311C43v58Ev");}
void  S1311C4 ::v59(){vfunc_called(this, "_ZN7S1311C43v59Ev");}
void  S1311C4 ::v60(){vfunc_called(this, "_ZN7S1311C43v60Ev");}
void  S1311C4 ::v61(){vfunc_called(this, "_ZN7S1311C43v61Ev");}
void  S1311C4 ::v62(){vfunc_called(this, "_ZN7S1311C43v62Ev");}
void  S1311C4 ::v63(){vfunc_called(this, "_ZN7S1311C43v63Ev");}
void  S1311C4 ::v64(){vfunc_called(this, "_ZN7S1311C43v64Ev");}
void  S1311C4 ::v65(){vfunc_called(this, "_ZN7S1311C43v65Ev");}
void  S1311C4 ::v66(){vfunc_called(this, "_ZN7S1311C43v66Ev");}
void  S1311C4 ::v67(){vfunc_called(this, "_ZN7S1311C43v67Ev");}
void  S1311C4 ::v68(){vfunc_called(this, "_ZN7S1311C43v68Ev");}
void  S1311C4 ::v69(){vfunc_called(this, "_ZN7S1311C43v69Ev");}
void  S1311C4 ::v70(){vfunc_called(this, "_ZN7S1311C43v70Ev");}
void  S1311C4 ::v71(){vfunc_called(this, "_ZN7S1311C43v71Ev");}
void  S1311C4 ::v72(){vfunc_called(this, "_ZN7S1311C43v72Ev");}
void  S1311C4 ::v73(){vfunc_called(this, "_ZN7S1311C43v73Ev");}
void  S1311C4 ::v74(){vfunc_called(this, "_ZN7S1311C43v74Ev");}
void  S1311C4 ::v75(){vfunc_called(this, "_ZN7S1311C43v75Ev");}
void  S1311C4 ::v76(){vfunc_called(this, "_ZN7S1311C43v76Ev");}
S1311C4 ::S1311C4(){ note_ctor("S1311C4", this);} // tgen

static void Test_S1311C4()
{
  extern Class_Descriptor cd_S1311C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S1311C4, buf);
    S1311C4 *dp, &lv = *(dp=new (buf) S1311C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S1311C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1311C4)");
    check_field_offset(lv, s1311c4f0, ABISELECT(8,4), "S1311C4.s1311c4f0");
    check_field_offset(lv, s1311c4f1, ABISELECT(16,8), "S1311C4.s1311c4f1");
    check_field_offset(lv, s1311c4f2, ABISELECT(24,16), "S1311C4.s1311c4f2");
    check_field_offset(lv, s1311c4f3, ABISELECT(56,32), "S1311C4.s1311c4f3");
    check_field_offset(lv, s1311c4f4, ABISELECT(64,40), "S1311C4.s1311c4f4");
    check_field_offset(lv, s1311c4f5, ABISELECT(72,44), "S1311C4.s1311c4f5");
    check_field_offset(lv, s1311c4f6, ABISELECT(80,52), "S1311C4.s1311c4f6");
    test_class_info(&lv, &cd_S1311C4);
    dp->~S1311C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1311C4(Test_S1311C4, "S1311C4", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN7S1311C4C1Ev();
extern void _ZN7S1311C4D1Ev();
Name_Map name_map_S1311C4[] = {
  NSPAIR(_ZN7S1311C4C1Ev),
  NSPAIR(_ZN7S1311C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S1311C4[];
extern void _ZN7S1311C4D1Ev();
extern void _ZN7S1311C4D0Ev();
extern void _ZN7S1311C43v13Ev();
extern void _ZN7S1311C43v14Ev();
extern void _ZN7S1311C43v15Ev();
extern void _ZN7S1311C43v16Ev();
extern void _ZN7S1311C43v17Ev();
extern void _ZN7S1311C43v18Ev();
extern void _ZN7S1311C43v19Ev();
extern void _ZN7S1311C43v20Ev();
extern void _ZN7S1311C43v21Ev();
extern void _ZN7S1311C43v22Ev();
extern void _ZN7S1311C43v23Ev();
extern void _ZN7S1311C43v24Ev();
extern void _ZN7S1311C43v25Ev();
extern void _ZN7S1311C43v26Ev();
extern void _ZN7S1311C43v27Ev();
extern void _ZN7S1311C43v28Ev();
extern void _ZN7S1311C43v29Ev();
extern void _ZN7S1311C43v30Ev();
extern void _ZN7S1311C43v31Ev();
extern void _ZN7S1311C43v32Ev();
extern void _ZN7S1311C43v33Ev();
extern void _ZN7S1311C43v34Ev();
extern void _ZN7S1311C43v35Ev();
extern void _ZN7S1311C43v36Ev();
extern void _ZN7S1311C43v37Ev();
extern void _ZN7S1311C43v38Ev();
extern void _ZN7S1311C43v39Ev();
extern void _ZN7S1311C43v40Ev();
extern void _ZN7S1311C43v41Ev();
extern void _ZN7S1311C43v42Ev();
extern void _ZN7S1311C43v43Ev();
extern void _ZN7S1311C43v44Ev();
extern void _ZN7S1311C43v45Ev();
extern void _ZN7S1311C43v46Ev();
extern void _ZN7S1311C43v47Ev();
extern void _ZN7S1311C43v48Ev();
extern void _ZN7S1311C43v49Ev();
extern void _ZN7S1311C43v50Ev();
extern void _ZN7S1311C43v51Ev();
extern void _ZN7S1311C43v52Ev();
extern void _ZN7S1311C43v53Ev();
extern void _ZN7S1311C43v54Ev();
extern void _ZN7S1311C43v55Ev();
extern void _ZN7S1311C43v56Ev();
extern void _ZN7S1311C43v57Ev();
extern void _ZN7S1311C43v58Ev();
extern void _ZN7S1311C43v59Ev();
extern void _ZN7S1311C43v60Ev();
extern void _ZN7S1311C43v61Ev();
extern void _ZN7S1311C43v62Ev();
extern void _ZN7S1311C43v63Ev();
extern void _ZN7S1311C43v64Ev();
extern void _ZN7S1311C43v65Ev();
extern void _ZN7S1311C43v66Ev();
extern void _ZN7S1311C43v67Ev();
extern void _ZN7S1311C43v68Ev();
extern void _ZN7S1311C43v69Ev();
extern void _ZN7S1311C43v70Ev();
extern void _ZN7S1311C43v71Ev();
extern void _ZN7S1311C43v72Ev();
extern void _ZN7S1311C43v73Ev();
extern void _ZN7S1311C43v74Ev();
extern void _ZN7S1311C43v75Ev();
extern void _ZN7S1311C43v76Ev();
static  VTBL_ENTRY vtc_S1311C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1311C4[0]),
  (VTBL_ENTRY)&_ZN7S1311C4D1Ev,
  (VTBL_ENTRY)&_ZN7S1311C4D0Ev,
  (VTBL_ENTRY)&_ZN7S1311C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1311C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1311C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1311C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1311C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1311C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1311C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1311C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1311C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1311C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1311C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1311C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1311C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1311C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1311C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1311C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1311C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1311C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1311C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1311C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1311C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1311C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1311C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1311C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1311C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1311C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1311C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1311C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1311C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1311C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1311C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1311C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1311C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1311C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1311C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1311C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1311C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1311C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1311C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1311C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1311C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1311C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1311C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1311C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1311C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1311C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1311C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1311C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1311C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1311C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1311C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1311C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1311C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1311C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1311C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1311C43v68Ev,
  (VTBL_ENTRY)&_ZN7S1311C43v69Ev,
  (VTBL_ENTRY)&_ZN7S1311C43v70Ev,
  (VTBL_ENTRY)&_ZN7S1311C43v71Ev,
  (VTBL_ENTRY)&_ZN7S1311C43v72Ev,
  (VTBL_ENTRY)&_ZN7S1311C43v73Ev,
  (VTBL_ENTRY)&_ZN7S1311C43v74Ev,
  (VTBL_ENTRY)&_ZN7S1311C43v75Ev,
  (VTBL_ENTRY)&_ZN7S1311C43v76Ev,
};
extern VTBL_ENTRY _ZTI7S1311C4[];
extern  VTBL_ENTRY _ZTV7S1311C4[];
Class_Descriptor cd_S1311C4 = {  "S1311C4", // class name
  0,0,//no base classes
  &(vtc_S1311C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI7S1311C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S1311C4),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  S1311C3  : S1311C4 {
  unsigned int s1311c3f0:1;
  unsigned int s1311c3f1:1;
  unsigned int s1311c3f2:1;
  unsigned int s1311c3f3:1;
  unsigned int s1311c3f4:1;
  unsigned int s1311c3f5:1;
  unsigned int s1311c3f6:1;
  ::S3625C32 s1311c3f7;
  virtual  ~S1311C3(); // _ZN7S1311C3D1Ev
  virtual void  v77(); // _ZN7S1311C33v77Ev
  virtual void  v78(); // _ZN7S1311C33v78Ev
  virtual void  v79(); // _ZN7S1311C33v79Ev
  virtual void  v80(); // _ZN7S1311C33v80Ev
  virtual void  v81(); // _ZN7S1311C33v81Ev
  virtual void  v82(); // _ZN7S1311C33v82Ev
  virtual void  v83(); // _ZN7S1311C33v83Ev
  virtual void  v84(); // _ZN7S1311C33v84Ev
  virtual void  v85(); // _ZN7S1311C33v85Ev
  virtual void  v86(); // _ZN7S1311C33v86Ev
  virtual void  v87(); // _ZN7S1311C33v87Ev
  virtual void  v88(); // _ZN7S1311C33v88Ev
  virtual void  v89(); // _ZN7S1311C33v89Ev
  virtual void  v90(); // _ZN7S1311C33v90Ev
  virtual void  v91(); // _ZN7S1311C33v91Ev
  virtual void  v92(); // _ZN7S1311C33v92Ev
  virtual void  v93(); // _ZN7S1311C33v93Ev
  virtual void  v94(); // _ZN7S1311C33v94Ev
  virtual void  v95(); // _ZN7S1311C33v95Ev
  virtual void  v96(); // _ZN7S1311C33v96Ev
  S1311C3(); // tgen
};
//SIG(-1 S1311C3) C1{ BC2{ 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 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 Fi FL Fp[4] Fi[2] Fp FC3{ m Fi[2]} Fp[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 FC4{ m}}


 S1311C3 ::~S1311C3(){ note_dtor("S1311C3", this);}
void  S1311C3 ::v77(){vfunc_called(this, "_ZN7S1311C33v77Ev");}
void  S1311C3 ::v78(){vfunc_called(this, "_ZN7S1311C33v78Ev");}
void  S1311C3 ::v79(){vfunc_called(this, "_ZN7S1311C33v79Ev");}
void  S1311C3 ::v80(){vfunc_called(this, "_ZN7S1311C33v80Ev");}
void  S1311C3 ::v81(){vfunc_called(this, "_ZN7S1311C33v81Ev");}
void  S1311C3 ::v82(){vfunc_called(this, "_ZN7S1311C33v82Ev");}
void  S1311C3 ::v83(){vfunc_called(this, "_ZN7S1311C33v83Ev");}
void  S1311C3 ::v84(){vfunc_called(this, "_ZN7S1311C33v84Ev");}
void  S1311C3 ::v85(){vfunc_called(this, "_ZN7S1311C33v85Ev");}
void  S1311C3 ::v86(){vfunc_called(this, "_ZN7S1311C33v86Ev");}
void  S1311C3 ::v87(){vfunc_called(this, "_ZN7S1311C33v87Ev");}
void  S1311C3 ::v88(){vfunc_called(this, "_ZN7S1311C33v88Ev");}
void  S1311C3 ::v89(){vfunc_called(this, "_ZN7S1311C33v89Ev");}
void  S1311C3 ::v90(){vfunc_called(this, "_ZN7S1311C33v90Ev");}
void  S1311C3 ::v91(){vfunc_called(this, "_ZN7S1311C33v91Ev");}
void  S1311C3 ::v92(){vfunc_called(this, "_ZN7S1311C33v92Ev");}
void  S1311C3 ::v93(){vfunc_called(this, "_ZN7S1311C33v93Ev");}
void  S1311C3 ::v94(){vfunc_called(this, "_ZN7S1311C33v94Ev");}
void  S1311C3 ::v95(){vfunc_called(this, "_ZN7S1311C33v95Ev");}
void  S1311C3 ::v96(){vfunc_called(this, "_ZN7S1311C33v96Ev");}
S1311C3 ::S1311C3(){ note_ctor("S1311C3", this);} // tgen

static void Test_S1311C3()
{
  extern Class_Descriptor cd_S1311C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(14,17)];
    init_test(&cd_S1311C3, buf);
    S1311C3 *dp, &lv = *(dp=new (buf) S1311C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(104,64), "sizeof(S1311C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1311C3)");
    check_base_class_offset(lv, (S1311C4*), 0, "S1311C3");
    set_bf_and_test(lv, s1311c3f0, ABISELECT(96,60), 0, 1, 1, "S1311C3");
    set_bf_and_test(lv, s1311c3f1, ABISELECT(96,60), 1, 1, 1, "S1311C3");
    set_bf_and_test(lv, s1311c3f2, ABISELECT(96,60), 2, 1, 1, "S1311C3");
    set_bf_and_test(lv, s1311c3f3, ABISELECT(96,60), 3, 1, 1, "S1311C3");
    set_bf_and_test(lv, s1311c3f4, ABISELECT(96,60), 4, 1, 1, "S1311C3");
    set_bf_and_test(lv, s1311c3f5, ABISELECT(96,60), 5, 1, 1, "S1311C3");
    set_bf_and_test(lv, s1311c3f6, ABISELECT(96,60), 6, 1, 1, "S1311C3");
    check_field_offset(lv, s1311c3f7, ABISELECT(97,61), "S1311C3.s1311c3f7");
    test_class_info(&lv, &cd_S1311C3);
    dp->~S1311C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1311C3(Test_S1311C3, "S1311C3", ABISELECT(104,64));

#else // __cplusplus

extern void _ZN7S1311C3C1Ev();
extern void _ZN7S1311C3D1Ev();
Name_Map name_map_S1311C3[] = {
  NSPAIR(_ZN7S1311C3C1Ev),
  NSPAIR(_ZN7S1311C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1311C4;
extern VTBL_ENTRY _ZTI7S1311C4[];
extern  VTBL_ENTRY _ZTV7S1311C4[];
static Base_Class bases_S1311C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1311C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI7S1311C3[];
extern void _ZN7S1311C3D1Ev();
extern void _ZN7S1311C3D0Ev();
extern void _ZN7S1311C43v13Ev();
extern void _ZN7S1311C43v14Ev();
extern void _ZN7S1311C43v15Ev();
extern void _ZN7S1311C43v16Ev();
extern void _ZN7S1311C43v17Ev();
extern void _ZN7S1311C43v18Ev();
extern void _ZN7S1311C43v19Ev();
extern void _ZN7S1311C43v20Ev();
extern void _ZN7S1311C43v21Ev();
extern void _ZN7S1311C43v22Ev();
extern void _ZN7S1311C43v23Ev();
extern void _ZN7S1311C43v24Ev();
extern void _ZN7S1311C43v25Ev();
extern void _ZN7S1311C43v26Ev();
extern void _ZN7S1311C43v27Ev();
extern void _ZN7S1311C43v28Ev();
extern void _ZN7S1311C43v29Ev();
extern void _ZN7S1311C43v30Ev();
extern void _ZN7S1311C43v31Ev();
extern void _ZN7S1311C43v32Ev();
extern void _ZN7S1311C43v33Ev();
extern void _ZN7S1311C43v34Ev();
extern void _ZN7S1311C43v35Ev();
extern void _ZN7S1311C43v36Ev();
extern void _ZN7S1311C43v37Ev();
extern void _ZN7S1311C43v38Ev();
extern void _ZN7S1311C43v39Ev();
extern void _ZN7S1311C43v40Ev();
extern void _ZN7S1311C43v41Ev();
extern void _ZN7S1311C43v42Ev();
extern void _ZN7S1311C43v43Ev();
extern void _ZN7S1311C43v44Ev();
extern void _ZN7S1311C43v45Ev();
extern void _ZN7S1311C43v46Ev();
extern void _ZN7S1311C43v47Ev();
extern void _ZN7S1311C43v48Ev();
extern void _ZN7S1311C43v49Ev();
extern void _ZN7S1311C43v50Ev();
extern void _ZN7S1311C43v51Ev();
extern void _ZN7S1311C43v52Ev();
extern void _ZN7S1311C43v53Ev();
extern void _ZN7S1311C43v54Ev();
extern void _ZN7S1311C43v55Ev();
extern void _ZN7S1311C43v56Ev();
extern void _ZN7S1311C43v57Ev();
extern void _ZN7S1311C43v58Ev();
extern void _ZN7S1311C43v59Ev();
extern void _ZN7S1311C43v60Ev();
extern void _ZN7S1311C43v61Ev();
extern void _ZN7S1311C43v62Ev();
extern void _ZN7S1311C43v63Ev();
extern void _ZN7S1311C43v64Ev();
extern void _ZN7S1311C43v65Ev();
extern void _ZN7S1311C43v66Ev();
extern void _ZN7S1311C43v67Ev();
extern void _ZN7S1311C43v68Ev();
extern void _ZN7S1311C43v69Ev();
extern void _ZN7S1311C43v70Ev();
extern void _ZN7S1311C43v71Ev();
extern void _ZN7S1311C43v72Ev();
extern void _ZN7S1311C43v73Ev();
extern void _ZN7S1311C43v74Ev();
extern void _ZN7S1311C43v75Ev();
extern void _ZN7S1311C43v76Ev();
extern void _ZN7S1311C33v77Ev();
extern void _ZN7S1311C33v78Ev();
extern void _ZN7S1311C33v79Ev();
extern void _ZN7S1311C33v80Ev();
extern void _ZN7S1311C33v81Ev();
extern void _ZN7S1311C33v82Ev();
extern void _ZN7S1311C33v83Ev();
extern void _ZN7S1311C33v84Ev();
extern void _ZN7S1311C33v85Ev();
extern void _ZN7S1311C33v86Ev();
extern void _ZN7S1311C33v87Ev();
extern void _ZN7S1311C33v88Ev();
extern void _ZN7S1311C33v89Ev();
extern void _ZN7S1311C33v90Ev();
extern void _ZN7S1311C33v91Ev();
extern void _ZN7S1311C33v92Ev();
extern void _ZN7S1311C33v93Ev();
extern void _ZN7S1311C33v94Ev();
extern void _ZN7S1311C33v95Ev();
extern void _ZN7S1311C33v96Ev();
static  VTBL_ENTRY vtc_S1311C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1311C3[0]),
  (VTBL_ENTRY)&_ZN7S1311C3D1Ev,
  (VTBL_ENTRY)&_ZN7S1311C3D0Ev,
  (VTBL_ENTRY)&_ZN7S1311C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1311C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1311C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1311C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1311C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1311C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1311C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1311C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1311C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1311C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1311C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1311C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1311C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1311C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1311C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1311C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1311C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1311C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1311C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1311C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1311C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1311C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1311C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1311C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1311C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1311C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1311C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1311C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1311C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1311C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1311C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1311C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1311C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1311C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1311C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1311C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1311C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1311C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1311C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1311C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1311C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1311C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1311C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1311C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1311C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1311C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1311C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1311C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1311C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1311C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1311C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1311C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1311C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1311C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1311C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1311C43v68Ev,
  (VTBL_ENTRY)&_ZN7S1311C43v69Ev,
  (VTBL_ENTRY)&_ZN7S1311C43v70Ev,
  (VTBL_ENTRY)&_ZN7S1311C43v71Ev,
  (VTBL_ENTRY)&_ZN7S1311C43v72Ev,
  (VTBL_ENTRY)&_ZN7S1311C43v73Ev,
  (VTBL_ENTRY)&_ZN7S1311C43v74Ev,
  (VTBL_ENTRY)&_ZN7S1311C43v75Ev,
  (VTBL_ENTRY)&_ZN7S1311C43v76Ev,
  (VTBL_ENTRY)&_ZN7S1311C33v77Ev,
  (VTBL_ENTRY)&_ZN7S1311C33v78Ev,
  (VTBL_ENTRY)&_ZN7S1311C33v79Ev,
  (VTBL_ENTRY)&_ZN7S1311C33v80Ev,
  (VTBL_ENTRY)&_ZN7S1311C33v81Ev,
  (VTBL_ENTRY)&_ZN7S1311C33v82Ev,
  (VTBL_ENTRY)&_ZN7S1311C33v83Ev,
  (VTBL_ENTRY)&_ZN7S1311C33v84Ev,
  (VTBL_ENTRY)&_ZN7S1311C33v85Ev,
  (VTBL_ENTRY)&_ZN7S1311C33v86Ev,
  (VTBL_ENTRY)&_ZN7S1311C33v87Ev,
  (VTBL_ENTRY)&_ZN7S1311C33v88Ev,
  (VTBL_ENTRY)&_ZN7S1311C33v89Ev,
  (VTBL_ENTRY)&_ZN7S1311C33v90Ev,
  (VTBL_ENTRY)&_ZN7S1311C33v91Ev,
  (VTBL_ENTRY)&_ZN7S1311C33v92Ev,
  (VTBL_ENTRY)&_ZN7S1311C33v93Ev,
  (VTBL_ENTRY)&_ZN7S1311C33v94Ev,
  (VTBL_ENTRY)&_ZN7S1311C33v95Ev,
  (VTBL_ENTRY)&_ZN7S1311C33v96Ev,
};
extern VTBL_ENTRY _ZTI7S1311C3[];
extern  VTBL_ENTRY _ZTV7S1311C3[];
Class_Descriptor cd_S1311C3 = {  "S1311C3", // class name
  bases_S1311C3, 1,
  &(vtc_S1311C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(104,64), // object size
  NSPAIRA(_ZTI7S1311C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1311C3),88, //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  S1311C2  : S1311C3 {
  virtual  ~S1311C2(); // _ZN7S1311C2D1Ev
  virtual void  v97(); // _ZN7S1311C23v97Ev
  virtual void  v98(); // _ZN7S1311C23v98Ev
  virtual void  v99(); // _ZN7S1311C23v99Ev
  S1311C2(); // tgen
};
//SIG(-1 S1311C2) C1{ BC2{ BC3{ vd 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 Fi FL Fp[4] Fi[2] Fp FC4{ m Fi[2]} Fp[2]} vd v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 FC5{ m}} vd v1 v2 v3}


 S1311C2 ::~S1311C2(){ note_dtor("S1311C2", this);}
void  S1311C2 ::v97(){vfunc_called(this, "_ZN7S1311C23v97Ev");}
void  S1311C2 ::v98(){vfunc_called(this, "_ZN7S1311C23v98Ev");}
void  S1311C2 ::v99(){vfunc_called(this, "_ZN7S1311C23v99Ev");}
S1311C2 ::S1311C2(){ note_ctor("S1311C2", this);} // tgen

static void Test_S1311C2()
{
  extern Class_Descriptor cd_S1311C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(14,17)];
    init_test(&cd_S1311C2, buf);
    S1311C2 *dp, &lv = *(dp=new (buf) S1311C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(104,64), "sizeof(S1311C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1311C2)");
    check_base_class_offset(lv, (S1311C4*)(S1311C3*), 0, "S1311C2");
    check_base_class_offset(lv, (S1311C3*), 0, "S1311C2");
    test_class_info(&lv, &cd_S1311C2);
    dp->~S1311C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1311C2(Test_S1311C2, "S1311C2", ABISELECT(104,64));

#else // __cplusplus

extern void _ZN7S1311C2C1Ev();
extern void _ZN7S1311C2D1Ev();
Name_Map name_map_S1311C2[] = {
  NSPAIR(_ZN7S1311C2C1Ev),
  NSPAIR(_ZN7S1311C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1311C4;
extern VTBL_ENTRY _ZTI7S1311C4[];
extern  VTBL_ENTRY _ZTV7S1311C4[];
extern Class_Descriptor cd_S1311C3;
extern VTBL_ENTRY _ZTI7S1311C3[];
extern  VTBL_ENTRY _ZTV7S1311C3[];
static Base_Class bases_S1311C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1311C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S1311C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S1311C2[];
extern void _ZN7S1311C2D1Ev();
extern void _ZN7S1311C2D0Ev();
extern void _ZN7S1311C43v13Ev();
extern void _ZN7S1311C43v14Ev();
extern void _ZN7S1311C43v15Ev();
extern void _ZN7S1311C43v16Ev();
extern void _ZN7S1311C43v17Ev();
extern void _ZN7S1311C43v18Ev();
extern void _ZN7S1311C43v19Ev();
extern void _ZN7S1311C43v20Ev();
extern void _ZN7S1311C43v21Ev();
extern void _ZN7S1311C43v22Ev();
extern void _ZN7S1311C43v23Ev();
extern void _ZN7S1311C43v24Ev();
extern void _ZN7S1311C43v25Ev();
extern void _ZN7S1311C43v26Ev();
extern void _ZN7S1311C43v27Ev();
extern void _ZN7S1311C43v28Ev();
extern void _ZN7S1311C43v29Ev();
extern void _ZN7S1311C43v30Ev();
extern void _ZN7S1311C43v31Ev();
extern void _ZN7S1311C43v32Ev();
extern void _ZN7S1311C43v33Ev();
extern void _ZN7S1311C43v34Ev();
extern void _ZN7S1311C43v35Ev();
extern void _ZN7S1311C43v36Ev();
extern void _ZN7S1311C43v37Ev();
extern void _ZN7S1311C43v38Ev();
extern void _ZN7S1311C43v39Ev();
extern void _ZN7S1311C43v40Ev();
extern void _ZN7S1311C43v41Ev();
extern void _ZN7S1311C43v42Ev();
extern void _ZN7S1311C43v43Ev();
extern void _ZN7S1311C43v44Ev();
extern void _ZN7S1311C43v45Ev();
extern void _ZN7S1311C43v46Ev();
extern void _ZN7S1311C43v47Ev();
extern void _ZN7S1311C43v48Ev();
extern void _ZN7S1311C43v49Ev();
extern void _ZN7S1311C43v50Ev();
extern void _ZN7S1311C43v51Ev();
extern void _ZN7S1311C43v52Ev();
extern void _ZN7S1311C43v53Ev();
extern void _ZN7S1311C43v54Ev();
extern void _ZN7S1311C43v55Ev();
extern void _ZN7S1311C43v56Ev();
extern void _ZN7S1311C43v57Ev();
extern void _ZN7S1311C43v58Ev();
extern void _ZN7S1311C43v59Ev();
extern void _ZN7S1311C43v60Ev();
extern void _ZN7S1311C43v61Ev();
extern void _ZN7S1311C43v62Ev();
extern void _ZN7S1311C43v63Ev();
extern void _ZN7S1311C43v64Ev();
extern void _ZN7S1311C43v65Ev();
extern void _ZN7S1311C43v66Ev();
extern void _ZN7S1311C43v67Ev();
extern void _ZN7S1311C43v68Ev();
extern void _ZN7S1311C43v69Ev();
extern void _ZN7S1311C43v70Ev();
extern void _ZN7S1311C43v71Ev();
extern void _ZN7S1311C43v72Ev();
extern void _ZN7S1311C43v73Ev();
extern void _ZN7S1311C43v74Ev();
extern void _ZN7S1311C43v75Ev();
extern void _ZN7S1311C43v76Ev();
extern void _ZN7S1311C33v77Ev();
extern void _ZN7S1311C33v78Ev();
extern void _ZN7S1311C33v79Ev();
extern void _ZN7S1311C33v80Ev();
extern void _ZN7S1311C33v81Ev();
extern void _ZN7S1311C33v82Ev();
extern void _ZN7S1311C33v83Ev();
extern void _ZN7S1311C33v84Ev();
extern void _ZN7S1311C33v85Ev();
extern void _ZN7S1311C33v86Ev();
extern void _ZN7S1311C33v87Ev();
extern void _ZN7S1311C33v88Ev();
extern void _ZN7S1311C33v89Ev();
extern void _ZN7S1311C33v90Ev();
extern void _ZN7S1311C33v91Ev();
extern void _ZN7S1311C33v92Ev();
extern void _ZN7S1311C33v93Ev();
extern void _ZN7S1311C33v94Ev();
extern void _ZN7S1311C33v95Ev();
extern void _ZN7S1311C33v96Ev();
extern void _ZN7S1311C23v97Ev();
extern void _ZN7S1311C23v98Ev();
extern void _ZN7S1311C23v99Ev();
static  VTBL_ENTRY vtc_S1311C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1311C2[0]),
  (VTBL_ENTRY)&_ZN7S1311C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1311C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1311C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1311C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1311C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1311C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1311C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1311C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1311C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1311C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1311C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1311C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1311C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1311C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1311C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1311C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1311C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1311C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1311C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1311C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1311C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1311C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1311C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1311C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1311C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1311C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1311C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1311C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1311C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1311C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1311C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1311C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1311C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1311C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1311C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1311C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1311C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1311C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1311C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1311C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1311C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1311C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1311C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1311C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1311C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1311C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1311C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1311C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1311C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1311C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1311C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1311C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1311C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1311C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1311C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1311C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1311C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1311C43v68Ev,
  (VTBL_ENTRY)&_ZN7S1311C43v69Ev,
  (VTBL_ENTRY)&_ZN7S1311C43v70Ev,
  (VTBL_ENTRY)&_ZN7S1311C43v71Ev,
  (VTBL_ENTRY)&_ZN7S1311C43v72Ev,
  (VTBL_ENTRY)&_ZN7S1311C43v73Ev,
  (VTBL_ENTRY)&_ZN7S1311C43v74Ev,
  (VTBL_ENTRY)&_ZN7S1311C43v75Ev,
  (VTBL_ENTRY)&_ZN7S1311C43v76Ev,
  (VTBL_ENTRY)&_ZN7S1311C33v77Ev,
  (VTBL_ENTRY)&_ZN7S1311C33v78Ev,
  (VTBL_ENTRY)&_ZN7S1311C33v79Ev,
  (VTBL_ENTRY)&_ZN7S1311C33v80Ev,
  (VTBL_ENTRY)&_ZN7S1311C33v81Ev,
  (VTBL_ENTRY)&_ZN7S1311C33v82Ev,
  (VTBL_ENTRY)&_ZN7S1311C33v83Ev,
  (VTBL_ENTRY)&_ZN7S1311C33v84Ev,
  (VTBL_ENTRY)&_ZN7S1311C33v85Ev,
  (VTBL_ENTRY)&_ZN7S1311C33v86Ev,
  (VTBL_ENTRY)&_ZN7S1311C33v87Ev,
  (VTBL_ENTRY)&_ZN7S1311C33v88Ev,
  (VTBL_ENTRY)&_ZN7S1311C33v89Ev,
  (VTBL_ENTRY)&_ZN7S1311C33v90Ev,
  (VTBL_ENTRY)&_ZN7S1311C33v91Ev,
  (VTBL_ENTRY)&_ZN7S1311C33v92Ev,
  (VTBL_ENTRY)&_ZN7S1311C33v93Ev,
  (VTBL_ENTRY)&_ZN7S1311C33v94Ev,
  (VTBL_ENTRY)&_ZN7S1311C33v95Ev,
  (VTBL_ENTRY)&_ZN7S1311C33v96Ev,
  (VTBL_ENTRY)&_ZN7S1311C23v97Ev,
  (VTBL_ENTRY)&_ZN7S1311C23v98Ev,
  (VTBL_ENTRY)&_ZN7S1311C23v99Ev,
};
extern VTBL_ENTRY _ZTI7S1311C2[];
extern  VTBL_ENTRY _ZTV7S1311C2[];
Class_Descriptor cd_S1311C2 = {  "S1311C2", // class name
  bases_S1311C2, 2,
  &(vtc_S1311C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(104,64), // object size
  NSPAIRA(_ZTI7S1311C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1311C2),91, //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  S1311C7  {
  unsigned int s1311c7f0:1;
  unsigned int s1311c7f1:1;
  unsigned int s1311c7f2:1;
};
//SIG(-1 S1311C7) C1{ Fi:1 Fi:1 Fi:1}



static void Test_S1311C7()
{
  {
    init_simple_test("S1311C7");
    static S1311C7 lv;
    check2(sizeof(lv), 4, "sizeof(S1311C7)");
    check2(__alignof__(lv), 4, "__alignof__(S1311C7)");
    set_bf_and_test(lv, s1311c7f0, 0, 0, 1, 1, "S1311C7");
    set_bf_and_test(lv, s1311c7f1, 0, 1, 1, 1, "S1311C7");
    set_bf_and_test(lv, s1311c7f2, 0, 2, 1, 1, "S1311C7");
  }
}
static Arrange_To_Call_Me vS1311C7(Test_S1311C7, "S1311C7", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1311C1  : S1311C2 {
  char s1311c1f0;
  ::S1311C7 s1311c1f1;
  ::S1292C12 s1311c1f2;
  ::S1311C7 s1311c1f3;
  ::S1292C12 s1311c1f4;
  unsigned int s1311c1f5:1;
  ::S1311C7 s1311c1f6;
  ::S1289C10_nt s1311c1f7;
  virtual  ~S1311C1(); // _ZN7S1311C1D1Ev
  virtual void  v1(); // _ZN7S1311C12v1Ev
  virtual void  v2(); // _ZN7S1311C12v2Ev
  virtual void  v3(); // _ZN7S1311C12v3Ev
  virtual void  v4(); // _ZN7S1311C12v4Ev
  virtual void  v5(); // _ZN7S1311C12v5Ev
  virtual void  v6(); // _ZN7S1311C12v6Ev
  virtual void  v7(); // _ZN7S1311C12v7Ev
  virtual void  v8(); // _ZN7S1311C12v8Ev
  virtual void  v9(); // _ZN7S1311C12v9Ev
  virtual void  v10(); // _ZN7S1311C13v10Ev
  virtual void  v11(); // _ZN7S1311C13v11Ev
  virtual void  v12(); // _ZN7S1311C13v12Ev
  S1311C1(); // tgen
};
//SIG(1 S1311C1) C1{ BC2{ BC3{ BC4{ vd 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 Fi FL Fp[4] Fi[2] Fp FC5{ m Fi[2]} Fp[2]} vd v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 v91 v92 v93 v94 v95 v96 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 FC6{ m}} vd v97 v98 v99} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 Fc FC7{ Fi:1 Fi:1 Fi:1} FC8{ BC9{ m Fc[4] FC10{ BC11{ BC12{ m Fp Fi[2]}}} Fi[2]} Fp} FC7 FC8 Fi:1 FC7 FC13{ BC9 Fp}}


 S1311C1 ::~S1311C1(){ note_dtor("S1311C1", this);}
void  S1311C1 ::v1(){vfunc_called(this, "_ZN7S1311C12v1Ev");}
void  S1311C1 ::v2(){vfunc_called(this, "_ZN7S1311C12v2Ev");}
void  S1311C1 ::v3(){vfunc_called(this, "_ZN7S1311C12v3Ev");}
void  S1311C1 ::v4(){vfunc_called(this, "_ZN7S1311C12v4Ev");}
void  S1311C1 ::v5(){vfunc_called(this, "_ZN7S1311C12v5Ev");}
void  S1311C1 ::v6(){vfunc_called(this, "_ZN7S1311C12v6Ev");}
void  S1311C1 ::v7(){vfunc_called(this, "_ZN7S1311C12v7Ev");}
void  S1311C1 ::v8(){vfunc_called(this, "_ZN7S1311C12v8Ev");}
void  S1311C1 ::v9(){vfunc_called(this, "_ZN7S1311C12v9Ev");}
void  S1311C1 ::v10(){vfunc_called(this, "_ZN7S1311C13v10Ev");}
void  S1311C1 ::v11(){vfunc_called(this, "_ZN7S1311C13v11Ev");}
void  S1311C1 ::v12(){vfunc_called(this, "_ZN7S1311C13v12Ev");}
S1311C1 ::S1311C1(){ note_ctor("S1311C1", this);} // tgen

static void Test_S1311C1()
{
  extern Class_Descriptor cd_S1311C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(31,42)];
    init_test(&cd_S1311C1, buf);
    S1311C1 *dp, &lv = *(dp=new (buf) S1311C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(240,164), "sizeof(S1311C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1311C1)");
    check_base_class_offset(lv, (S1311C4*)(S1311C3*)(S1311C2*), 0, "S1311C1");
    check_base_class_offset(lv, (S1311C3*)(S1311C2*), 0, "S1311C1");
    check_base_class_offset(lv, (S1311C2*), 0, "S1311C1");
    check_field_offset(lv, s1311c1f0, ABISELECT(98,62), "S1311C1.s1311c1f0");
    check_field_offset(lv, s1311c1f1, ABISELECT(100,64), "S1311C1.s1311c1f1");
    check_field_offset(lv, s1311c1f2, ABISELECT(104,68), "S1311C1.s1311c1f2");
    check_field_offset(lv, s1311c1f3, ABISELECT(144,96), "S1311C1.s1311c1f3");
    check_field_offset(lv, s1311c1f4, ABISELECT(152,100), "S1311C1.s1311c1f4");
    set_bf_and_test(lv, s1311c1f5, ABISELECT(192,128), 0, 1, 1, "S1311C1");
    check_field_offset(lv, s1311c1f6, ABISELECT(196,132), "S1311C1.s1311c1f6");
    check_field_offset(lv, s1311c1f7, ABISELECT(200,136), "S1311C1.s1311c1f7");
    test_class_info(&lv, &cd_S1311C1);
    dp->~S1311C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1311C1(Test_S1311C1, "S1311C1", ABISELECT(240,164));

#else // __cplusplus

extern void _ZN7S1311C1C1Ev();
extern void _ZN7S1311C1D1Ev();
Name_Map name_map_S1311C1[] = {
  NSPAIR(_ZN7S1311C1C1Ev),
  NSPAIR(_ZN7S1311C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1311C4;
extern VTBL_ENTRY _ZTI7S1311C4[];
extern  VTBL_ENTRY _ZTV7S1311C4[];
extern Class_Descriptor cd_S1311C3;
extern VTBL_ENTRY _ZTI7S1311C3[];
extern  VTBL_ENTRY _ZTV7S1311C3[];
extern Class_Descriptor cd_S1311C2;
extern VTBL_ENTRY _ZTI7S1311C2[];
extern  VTBL_ENTRY _ZTV7S1311C2[];
static Base_Class bases_S1311C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1311C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S1311C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S1311C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S1311C1[];
extern void _ZN7S1311C1D1Ev();
extern void _ZN7S1311C1D0Ev();
extern void _ZN7S1311C43v13Ev();
extern void _ZN7S1311C43v14Ev();
extern void _ZN7S1311C43v15Ev();
extern void _ZN7S1311C43v16Ev();
extern void _ZN7S1311C43v17Ev();
extern void _ZN7S1311C43v18Ev();
extern void _ZN7S1311C43v19Ev();
extern void _ZN7S1311C43v20Ev();
extern void _ZN7S1311C43v21Ev();
extern void _ZN7S1311C43v22Ev();
extern void _ZN7S1311C43v23Ev();
extern void _ZN7S1311C43v24Ev();
extern void _ZN7S1311C43v25Ev();
extern void _ZN7S1311C43v26Ev();
extern void _ZN7S1311C43v27Ev();
extern void _ZN7S1311C43v28Ev();
extern void _ZN7S1311C43v29Ev();
extern void _ZN7S1311C43v30Ev();
extern void _ZN7S1311C43v31Ev();
extern void _ZN7S1311C43v32Ev();
extern void _ZN7S1311C43v33Ev();
extern void _ZN7S1311C43v34Ev();
extern void _ZN7S1311C43v35Ev();
extern void _ZN7S1311C43v36Ev();
extern void _ZN7S1311C43v37Ev();
extern void _ZN7S1311C43v38Ev();
extern void _ZN7S1311C43v39Ev();
extern void _ZN7S1311C43v40Ev();
extern void _ZN7S1311C43v41Ev();
extern void _ZN7S1311C43v42Ev();
extern void _ZN7S1311C43v43Ev();
extern void _ZN7S1311C43v44Ev();
extern void _ZN7S1311C43v45Ev();
extern void _ZN7S1311C43v46Ev();
extern void _ZN7S1311C43v47Ev();
extern void _ZN7S1311C43v48Ev();
extern void _ZN7S1311C43v49Ev();
extern void _ZN7S1311C43v50Ev();
extern void _ZN7S1311C43v51Ev();
extern void _ZN7S1311C43v52Ev();
extern void _ZN7S1311C43v53Ev();
extern void _ZN7S1311C43v54Ev();
extern void _ZN7S1311C43v55Ev();
extern void _ZN7S1311C43v56Ev();
extern void _ZN7S1311C43v57Ev();
extern void _ZN7S1311C43v58Ev();
extern void _ZN7S1311C43v59Ev();
extern void _ZN7S1311C43v60Ev();
extern void _ZN7S1311C43v61Ev();
extern void _ZN7S1311C43v62Ev();
extern void _ZN7S1311C43v63Ev();
extern void _ZN7S1311C43v64Ev();
extern void _ZN7S1311C43v65Ev();
extern void _ZN7S1311C43v66Ev();
extern void _ZN7S1311C43v67Ev();
extern void _ZN7S1311C43v68Ev();
extern void _ZN7S1311C43v69Ev();
extern void _ZN7S1311C43v70Ev();
extern void _ZN7S1311C43v71Ev();
extern void _ZN7S1311C43v72Ev();
extern void _ZN7S1311C43v73Ev();
extern void _ZN7S1311C43v74Ev();
extern void _ZN7S1311C43v75Ev();
extern void _ZN7S1311C43v76Ev();
extern void _ZN7S1311C33v77Ev();
extern void _ZN7S1311C33v78Ev();
extern void _ZN7S1311C33v79Ev();
extern void _ZN7S1311C33v80Ev();
extern void _ZN7S1311C33v81Ev();
extern void _ZN7S1311C33v82Ev();
extern void _ZN7S1311C33v83Ev();
extern void _ZN7S1311C33v84Ev();
extern void _ZN7S1311C33v85Ev();
extern void _ZN7S1311C33v86Ev();
extern void _ZN7S1311C33v87Ev();
extern void _ZN7S1311C33v88Ev();
extern void _ZN7S1311C33v89Ev();
extern void _ZN7S1311C33v90Ev();
extern void _ZN7S1311C33v91Ev();
extern void _ZN7S1311C33v92Ev();
extern void _ZN7S1311C33v93Ev();
extern void _ZN7S1311C33v94Ev();
extern void _ZN7S1311C33v95Ev();
extern void _ZN7S1311C33v96Ev();
extern void _ZN7S1311C23v97Ev();
extern void _ZN7S1311C23v98Ev();
extern void _ZN7S1311C23v99Ev();
extern void _ZN7S1311C12v1Ev();
extern void _ZN7S1311C12v2Ev();
extern void _ZN7S1311C12v3Ev();
extern void _ZN7S1311C12v4Ev();
extern void _ZN7S1311C12v5Ev();
extern void _ZN7S1311C12v6Ev();
extern void _ZN7S1311C12v7Ev();
extern void _ZN7S1311C12v8Ev();
extern void _ZN7S1311C12v9Ev();
extern void _ZN7S1311C13v10Ev();
extern void _ZN7S1311C13v11Ev();
extern void _ZN7S1311C13v12Ev();
static  VTBL_ENTRY vtc_S1311C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1311C1[0]),
  (VTBL_ENTRY)&_ZN7S1311C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1311C1D0Ev,
  (VTBL_ENTRY)&_ZN7S1311C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1311C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1311C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1311C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1311C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1311C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1311C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1311C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1311C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1311C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1311C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1311C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1311C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1311C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1311C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1311C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1311C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1311C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1311C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1311C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1311C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1311C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1311C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1311C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1311C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1311C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1311C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1311C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1311C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1311C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1311C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1311C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1311C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1311C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1311C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1311C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1311C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1311C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1311C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1311C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1311C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1311C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1311C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1311C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1311C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1311C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1311C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1311C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1311C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1311C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1311C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1311C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1311C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1311C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1311C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1311C43v68Ev,
  (VTBL_ENTRY)&_ZN7S1311C43v69Ev,
  (VTBL_ENTRY)&_ZN7S1311C43v70Ev,
  (VTBL_ENTRY)&_ZN7S1311C43v71Ev,
  (VTBL_ENTRY)&_ZN7S1311C43v72Ev,
  (VTBL_ENTRY)&_ZN7S1311C43v73Ev,
  (VTBL_ENTRY)&_ZN7S1311C43v74Ev,
  (VTBL_ENTRY)&_ZN7S1311C43v75Ev,
  (VTBL_ENTRY)&_ZN7S1311C43v76Ev,
  (VTBL_ENTRY)&_ZN7S1311C33v77Ev,
  (VTBL_ENTRY)&_ZN7S1311C33v78Ev,
  (VTBL_ENTRY)&_ZN7S1311C33v79Ev,
  (VTBL_ENTRY)&_ZN7S1311C33v80Ev,
  (VTBL_ENTRY)&_ZN7S1311C33v81Ev,
  (VTBL_ENTRY)&_ZN7S1311C33v82Ev,
  (VTBL_ENTRY)&_ZN7S1311C33v83Ev,
  (VTBL_ENTRY)&_ZN7S1311C33v84Ev,
  (VTBL_ENTRY)&_ZN7S1311C33v85Ev,
  (VTBL_ENTRY)&_ZN7S1311C33v86Ev,
  (VTBL_ENTRY)&_ZN7S1311C33v87Ev,
  (VTBL_ENTRY)&_ZN7S1311C33v88Ev,
  (VTBL_ENTRY)&_ZN7S1311C33v89Ev,
  (VTBL_ENTRY)&_ZN7S1311C33v90Ev,
  (VTBL_ENTRY)&_ZN7S1311C33v91Ev,
  (VTBL_ENTRY)&_ZN7S1311C33v92Ev,
  (VTBL_ENTRY)&_ZN7S1311C33v93Ev,
  (VTBL_ENTRY)&_ZN7S1311C33v94Ev,
  (VTBL_ENTRY)&_ZN7S1311C33v95Ev,
  (VTBL_ENTRY)&_ZN7S1311C33v96Ev,
  (VTBL_ENTRY)&_ZN7S1311C23v97Ev,
  (VTBL_ENTRY)&_ZN7S1311C23v98Ev,
  (VTBL_ENTRY)&_ZN7S1311C23v99Ev,
  (VTBL_ENTRY)&_ZN7S1311C12v1Ev,
  (VTBL_ENTRY)&_ZN7S1311C12v2Ev,
  (VTBL_ENTRY)&_ZN7S1311C12v3Ev,
  (VTBL_ENTRY)&_ZN7S1311C12v4Ev,
  (VTBL_ENTRY)&_ZN7S1311C12v5Ev,
  (VTBL_ENTRY)&_ZN7S1311C12v6Ev,
  (VTBL_ENTRY)&_ZN7S1311C12v7Ev,
  (VTBL_ENTRY)&_ZN7S1311C12v8Ev,
  (VTBL_ENTRY)&_ZN7S1311C12v9Ev,
  (VTBL_ENTRY)&_ZN7S1311C13v10Ev,
  (VTBL_ENTRY)&_ZN7S1311C13v11Ev,
  (VTBL_ENTRY)&_ZN7S1311C13v12Ev,
};
extern VTBL_ENTRY _ZTI7S1311C1[];
extern  VTBL_ENTRY _ZTV7S1311C1[];
Class_Descriptor cd_S1311C1 = {  "S1311C1", // class name
  bases_S1311C1, 3,
  &(vtc_S1311C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(240,164), // object size
  NSPAIRA(_ZTI7S1311C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1311C1),103, //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  S1598C4  {
  int s1598c4f0;
  __tsi64 s1598c4f1;
  void *s1598c4f2[4];
  int s1598c4f3[2];
  void *s1598c4f4;
  ::S674C6_nt s1598c4f5;
  void *s1598c4f6[2];
  virtual  ~S1598C4(); // _ZN7S1598C4D1Ev
  virtual void  v9(); // _ZN7S1598C42v9Ev
  virtual void  v10(); // _ZN7S1598C43v10Ev
  virtual void  v11(); // _ZN7S1598C43v11Ev
  virtual void  v12(); // _ZN7S1598C43v12Ev
  virtual void  v13(); // _ZN7S1598C43v13Ev
  virtual void  v14(); // _ZN7S1598C43v14Ev
  virtual void  v15(); // _ZN7S1598C43v15Ev
  virtual void  v16(); // _ZN7S1598C43v16Ev
  virtual void  v17(); // _ZN7S1598C43v17Ev
  virtual void  v18(); // _ZN7S1598C43v18Ev
  virtual void  v19(); // _ZN7S1598C43v19Ev
  virtual void  v20(); // _ZN7S1598C43v20Ev
  virtual void  v21(); // _ZN7S1598C43v21Ev
  virtual void  v22(); // _ZN7S1598C43v22Ev
  virtual void  v23(); // _ZN7S1598C43v23Ev
  virtual void  v24(); // _ZN7S1598C43v24Ev
  virtual void  v25(); // _ZN7S1598C43v25Ev
  virtual void  v26(); // _ZN7S1598C43v26Ev
  virtual void  v27(); // _ZN7S1598C43v27Ev
  virtual void  v28(); // _ZN7S1598C43v28Ev
  virtual void  v29(); // _ZN7S1598C43v29Ev
  virtual void  v30(); // _ZN7S1598C43v30Ev
  virtual void  v31(); // _ZN7S1598C43v31Ev
  virtual void  v32(); // _ZN7S1598C43v32Ev
  virtual void  v33(); // _ZN7S1598C43v33Ev
  virtual void  v34(); // _ZN7S1598C43v34Ev
  virtual void  v35(); // _ZN7S1598C43v35Ev
  virtual void  v36(); // _ZN7S1598C43v36Ev
  virtual void  v37(); // _ZN7S1598C43v37Ev
  virtual void  v38(); // _ZN7S1598C43v38Ev
  virtual void  v39(); // _ZN7S1598C43v39Ev
  virtual void  v40(); // _ZN7S1598C43v40Ev
  virtual void  v41(); // _ZN7S1598C43v41Ev
  virtual void  v42(); // _ZN7S1598C43v42Ev
  virtual void  v43(); // _ZN7S1598C43v43Ev
  virtual void  v44(); // _ZN7S1598C43v44Ev
  virtual void  v45(); // _ZN7S1598C43v45Ev
  virtual void  v46(); // _ZN7S1598C43v46Ev
  virtual void  v47(); // _ZN7S1598C43v47Ev
  virtual void  v48(); // _ZN7S1598C43v48Ev
  virtual void  v49(); // _ZN7S1598C43v49Ev
  virtual void  v50(); // _ZN7S1598C43v50Ev
  virtual void  v51(); // _ZN7S1598C43v51Ev
  virtual void  v52(); // _ZN7S1598C43v52Ev
  virtual void  v53(); // _ZN7S1598C43v53Ev
  virtual void  v54(); // _ZN7S1598C43v54Ev
  virtual void  v55(); // _ZN7S1598C43v55Ev
  virtual void  v56(); // _ZN7S1598C43v56Ev
  virtual void  v57(); // _ZN7S1598C43v57Ev
  virtual void  v58(); // _ZN7S1598C43v58Ev
  virtual void  v59(); // _ZN7S1598C43v59Ev
  virtual void  v60(); // _ZN7S1598C43v60Ev
  virtual void  v61(); // _ZN7S1598C43v61Ev
  virtual void  v62(); // _ZN7S1598C43v62Ev
  virtual void  v63(); // _ZN7S1598C43v63Ev
  virtual void  v64(); // _ZN7S1598C43v64Ev
  virtual void  v65(); // _ZN7S1598C43v65Ev
  virtual void  v66(); // _ZN7S1598C43v66Ev
  virtual void  v67(); // _ZN7S1598C43v67Ev
  virtual void  v68(); // _ZN7S1598C43v68Ev
  virtual void  v69(); // _ZN7S1598C43v69Ev
  virtual void  v70(); // _ZN7S1598C43v70Ev
  virtual void  v71(); // _ZN7S1598C43v71Ev
  virtual void  v72(); // _ZN7S1598C43v72Ev
  S1598C4(); // tgen
};
//SIG(-1 S1598C4) 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]}


 S1598C4 ::~S1598C4(){ note_dtor("S1598C4", this);}
void  S1598C4 ::v9(){vfunc_called(this, "_ZN7S1598C42v9Ev");}
void  S1598C4 ::v10(){vfunc_called(this, "_ZN7S1598C43v10Ev");}
void  S1598C4 ::v11(){vfunc_called(this, "_ZN7S1598C43v11Ev");}
void  S1598C4 ::v12(){vfunc_called(this, "_ZN7S1598C43v12Ev");}
void  S1598C4 ::v13(){vfunc_called(this, "_ZN7S1598C43v13Ev");}
void  S1598C4 ::v14(){vfunc_called(this, "_ZN7S1598C43v14Ev");}
void  S1598C4 ::v15(){vfunc_called(this, "_ZN7S1598C43v15Ev");}
void  S1598C4 ::v16(){vfunc_called(this, "_ZN7S1598C43v16Ev");}
void  S1598C4 ::v17(){vfunc_called(this, "_ZN7S1598C43v17Ev");}
void  S1598C4 ::v18(){vfunc_called(this, "_ZN7S1598C43v18Ev");}
void  S1598C4 ::v19(){vfunc_called(this, "_ZN7S1598C43v19Ev");}
void  S1598C4 ::v20(){vfunc_called(this, "_ZN7S1598C43v20Ev");}
void  S1598C4 ::v21(){vfunc_called(this, "_ZN7S1598C43v21Ev");}
void  S1598C4 ::v22(){vfunc_called(this, "_ZN7S1598C43v22Ev");}
void  S1598C4 ::v23(){vfunc_called(this, "_ZN7S1598C43v23Ev");}
void  S1598C4 ::v24(){vfunc_called(this, "_ZN7S1598C43v24Ev");}
void  S1598C4 ::v25(){vfunc_called(this, "_ZN7S1598C43v25Ev");}
void  S1598C4 ::v26(){vfunc_called(this, "_ZN7S1598C43v26Ev");}
void  S1598C4 ::v27(){vfunc_called(this, "_ZN7S1598C43v27Ev");}
void  S1598C4 ::v28(){vfunc_called(this, "_ZN7S1598C43v28Ev");}
void  S1598C4 ::v29(){vfunc_called(this, "_ZN7S1598C43v29Ev");}
void  S1598C4 ::v30(){vfunc_called(this, "_ZN7S1598C43v30Ev");}
void  S1598C4 ::v31(){vfunc_called(this, "_ZN7S1598C43v31Ev");}
void  S1598C4 ::v32(){vfunc_called(this, "_ZN7S1598C43v32Ev");}
void  S1598C4 ::v33(){vfunc_called(this, "_ZN7S1598C43v33Ev");}
void  S1598C4 ::v34(){vfunc_called(this, "_ZN7S1598C43v34Ev");}
void  S1598C4 ::v35(){vfunc_called(this, "_ZN7S1598C43v35Ev");}
void  S1598C4 ::v36(){vfunc_called(this, "_ZN7S1598C43v36Ev");}
void  S1598C4 ::v37(){vfunc_called(this, "_ZN7S1598C43v37Ev");}
void  S1598C4 ::v38(){vfunc_called(this, "_ZN7S1598C43v38Ev");}
void  S1598C4 ::v39(){vfunc_called(this, "_ZN7S1598C43v39Ev");}
void  S1598C4 ::v40(){vfunc_called(this, "_ZN7S1598C43v40Ev");}
void  S1598C4 ::v41(){vfunc_called(this, "_ZN7S1598C43v41Ev");}
void  S1598C4 ::v42(){vfunc_called(this, "_ZN7S1598C43v42Ev");}
void  S1598C4 ::v43(){vfunc_called(this, "_ZN7S1598C43v43Ev");}
void  S1598C4 ::v44(){vfunc_called(this, "_ZN7S1598C43v44Ev");}
void  S1598C4 ::v45(){vfunc_called(this, "_ZN7S1598C43v45Ev");}
void  S1598C4 ::v46(){vfunc_called(this, "_ZN7S1598C43v46Ev");}
void  S1598C4 ::v47(){vfunc_called(this, "_ZN7S1598C43v47Ev");}
void  S1598C4 ::v48(){vfunc_called(this, "_ZN7S1598C43v48Ev");}
void  S1598C4 ::v49(){vfunc_called(this, "_ZN7S1598C43v49Ev");}
void  S1598C4 ::v50(){vfunc_called(this, "_ZN7S1598C43v50Ev");}
void  S1598C4 ::v51(){vfunc_called(this, "_ZN7S1598C43v51Ev");}
void  S1598C4 ::v52(){vfunc_called(this, "_ZN7S1598C43v52Ev");}
void  S1598C4 ::v53(){vfunc_called(this, "_ZN7S1598C43v53Ev");}
void  S1598C4 ::v54(){vfunc_called(this, "_ZN7S1598C43v54Ev");}
void  S1598C4 ::v55(){vfunc_called(this, "_ZN7S1598C43v55Ev");}
void  S1598C4 ::v56(){vfunc_called(this, "_ZN7S1598C43v56Ev");}
void  S1598C4 ::v57(){vfunc_called(this, "_ZN7S1598C43v57Ev");}
void  S1598C4 ::v58(){vfunc_called(this, "_ZN7S1598C43v58Ev");}
void  S1598C4 ::v59(){vfunc_called(this, "_ZN7S1598C43v59Ev");}
void  S1598C4 ::v60(){vfunc_called(this, "_ZN7S1598C43v60Ev");}
void  S1598C4 ::v61(){vfunc_called(this, "_ZN7S1598C43v61Ev");}
void  S1598C4 ::v62(){vfunc_called(this, "_ZN7S1598C43v62Ev");}
void  S1598C4 ::v63(){vfunc_called(this, "_ZN7S1598C43v63Ev");}
void  S1598C4 ::v64(){vfunc_called(this, "_ZN7S1598C43v64Ev");}
void  S1598C4 ::v65(){vfunc_called(this, "_ZN7S1598C43v65Ev");}
void  S1598C4 ::v66(){vfunc_called(this, "_ZN7S1598C43v66Ev");}
void  S1598C4 ::v67(){vfunc_called(this, "_ZN7S1598C43v67Ev");}
void  S1598C4 ::v68(){vfunc_called(this, "_ZN7S1598C43v68Ev");}
void  S1598C4 ::v69(){vfunc_called(this, "_ZN7S1598C43v69Ev");}
void  S1598C4 ::v70(){vfunc_called(this, "_ZN7S1598C43v70Ev");}
void  S1598C4 ::v71(){vfunc_called(this, "_ZN7S1598C43v71Ev");}
void  S1598C4 ::v72(){vfunc_called(this, "_ZN7S1598C43v72Ev");}
S1598C4 ::S1598C4(){ note_ctor("S1598C4", this);} // tgen

static void Test_S1598C4()
{
  extern Class_Descriptor cd_S1598C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S1598C4, buf);
    S1598C4 *dp, &lv = *(dp=new (buf) S1598C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S1598C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1598C4)");
    check_field_offset(lv, s1598c4f0, ABISELECT(8,4), "S1598C4.s1598c4f0");
    check_field_offset(lv, s1598c4f1, ABISELECT(16,8), "S1598C4.s1598c4f1");
    check_field_offset(lv, s1598c4f2, ABISELECT(24,16), "S1598C4.s1598c4f2");
    check_field_offset(lv, s1598c4f3, ABISELECT(56,32), "S1598C4.s1598c4f3");
    check_field_offset(lv, s1598c4f4, ABISELECT(64,40), "S1598C4.s1598c4f4");
    check_field_offset(lv, s1598c4f5, ABISELECT(72,44), "S1598C4.s1598c4f5");
    check_field_offset(lv, s1598c4f6, ABISELECT(80,52), "S1598C4.s1598c4f6");
    test_class_info(&lv, &cd_S1598C4);
    dp->~S1598C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1598C4(Test_S1598C4, "S1598C4", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN7S1598C4C1Ev();
extern void _ZN7S1598C4D1Ev();
Name_Map name_map_S1598C4[] = {
  NSPAIR(_ZN7S1598C4C1Ev),
  NSPAIR(_ZN7S1598C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S1598C4[];
extern void _ZN7S1598C4D1Ev();
extern void _ZN7S1598C4D0Ev();
extern void _ZN7S1598C42v9Ev();
extern void _ZN7S1598C43v10Ev();
extern void _ZN7S1598C43v11Ev();
extern void _ZN7S1598C43v12Ev();
extern void _ZN7S1598C43v13Ev();
extern void _ZN7S1598C43v14Ev();
extern void _ZN7S1598C43v15Ev();
extern void _ZN7S1598C43v16Ev();
extern void _ZN7S1598C43v17Ev();
extern void _ZN7S1598C43v18Ev();
extern void _ZN7S1598C43v19Ev();
extern void _ZN7S1598C43v20Ev();
extern void _ZN7S1598C43v21Ev();
extern void _ZN7S1598C43v22Ev();
extern void _ZN7S1598C43v23Ev();
extern void _ZN7S1598C43v24Ev();
extern void _ZN7S1598C43v25Ev();
extern void _ZN7S1598C43v26Ev();
extern void _ZN7S1598C43v27Ev();
extern void _ZN7S1598C43v28Ev();
extern void _ZN7S1598C43v29Ev();
extern void _ZN7S1598C43v30Ev();
extern void _ZN7S1598C43v31Ev();
extern void _ZN7S1598C43v32Ev();
extern void _ZN7S1598C43v33Ev();
extern void _ZN7S1598C43v34Ev();
extern void _ZN7S1598C43v35Ev();
extern void _ZN7S1598C43v36Ev();
extern void _ZN7S1598C43v37Ev();
extern void _ZN7S1598C43v38Ev();
extern void _ZN7S1598C43v39Ev();
extern void _ZN7S1598C43v40Ev();
extern void _ZN7S1598C43v41Ev();
extern void _ZN7S1598C43v42Ev();
extern void _ZN7S1598C43v43Ev();
extern void _ZN7S1598C43v44Ev();
extern void _ZN7S1598C43v45Ev();
extern void _ZN7S1598C43v46Ev();
extern void _ZN7S1598C43v47Ev();
extern void _ZN7S1598C43v48Ev();
extern void _ZN7S1598C43v49Ev();
extern void _ZN7S1598C43v50Ev();
extern void _ZN7S1598C43v51Ev();
extern void _ZN7S1598C43v52Ev();
extern void _ZN7S1598C43v53Ev();
extern void _ZN7S1598C43v54Ev();
extern void _ZN7S1598C43v55Ev();
extern void _ZN7S1598C43v56Ev();
extern void _ZN7S1598C43v57Ev();
extern void _ZN7S1598C43v58Ev();
extern void _ZN7S1598C43v59Ev();
extern void _ZN7S1598C43v60Ev();
extern void _ZN7S1598C43v61Ev();
extern void _ZN7S1598C43v62Ev();
extern void _ZN7S1598C43v63Ev();
extern void _ZN7S1598C43v64Ev();
extern void _ZN7S1598C43v65Ev();
extern void _ZN7S1598C43v66Ev();
extern void _ZN7S1598C43v67Ev();
extern void _ZN7S1598C43v68Ev();
extern void _ZN7S1598C43v69Ev();
extern void _ZN7S1598C43v70Ev();
extern void _ZN7S1598C43v71Ev();
extern void _ZN7S1598C43v72Ev();
static  VTBL_ENTRY vtc_S1598C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1598C4[0]),
  (VTBL_ENTRY)&_ZN7S1598C4D1Ev,
  (VTBL_ENTRY)&_ZN7S1598C4D0Ev,
  (VTBL_ENTRY)&_ZN7S1598C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1598C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1598C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1598C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1598C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1598C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1598C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1598C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1598C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1598C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1598C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1598C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1598C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1598C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1598C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1598C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1598C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1598C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1598C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1598C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1598C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1598C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1598C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1598C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1598C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1598C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1598C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1598C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1598C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1598C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1598C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1598C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1598C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1598C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1598C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1598C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1598C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1598C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1598C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1598C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1598C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1598C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1598C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1598C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1598C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1598C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1598C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1598C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1598C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1598C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1598C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1598C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1598C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1598C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1598C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1598C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1598C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1598C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1598C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1598C43v68Ev,
  (VTBL_ENTRY)&_ZN7S1598C43v69Ev,
  (VTBL_ENTRY)&_ZN7S1598C43v70Ev,
  (VTBL_ENTRY)&_ZN7S1598C43v71Ev,
  (VTBL_ENTRY)&_ZN7S1598C43v72Ev,
};
extern VTBL_ENTRY _ZTI7S1598C4[];
extern  VTBL_ENTRY _ZTV7S1598C4[];
Class_Descriptor cd_S1598C4 = {  "S1598C4", // class name
  0,0,//no base classes
  &(vtc_S1598C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI7S1598C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S1598C4),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  S1598C3  : S1598C4 {
  unsigned int s1598c3f0:1;
  unsigned int s1598c3f1:1;
  unsigned int s1598c3f2:1;
  unsigned int s1598c3f3:1;
  unsigned int s1598c3f4:1;
  unsigned int s1598c3f5:1;
  unsigned int s1598c3f6:1;
  ::S3625C32 s1598c3f7;
  virtual  ~S1598C3(); // _ZN7S1598C3D1Ev
  virtual void  v73(); // _ZN7S1598C33v73Ev
  virtual void  v74(); // _ZN7S1598C33v74Ev
  virtual void  v75(); // _ZN7S1598C33v75Ev
  virtual void  v76(); // _ZN7S1598C33v76Ev
  virtual void  v77(); // _ZN7S1598C33v77Ev
  virtual void  v78(); // _ZN7S1598C33v78Ev
  virtual void  v79(); // _ZN7S1598C33v79Ev
  virtual void  v80(); // _ZN7S1598C33v80Ev
  virtual void  v81(); // _ZN7S1598C33v81Ev
  virtual void  v82(); // _ZN7S1598C33v82Ev
  virtual void  v83(); // _ZN7S1598C33v83Ev
  virtual void  v84(); // _ZN7S1598C33v84Ev
  virtual void  v85(); // _ZN7S1598C33v85Ev
  virtual void  v86(); // _ZN7S1598C33v86Ev
  virtual void  v87(); // _ZN7S1598C33v87Ev
  virtual void  v88(); // _ZN7S1598C33v88Ev
  virtual void  v89(); // _ZN7S1598C33v89Ev
  virtual void  v90(); // _ZN7S1598C33v90Ev
  virtual void  v91(); // _ZN7S1598C33v91Ev
  virtual void  v92(); // _ZN7S1598C33v92Ev
  S1598C3(); // tgen
};
//SIG(-1 S1598C3) C1{ BC2{ 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 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 Fi FL Fp[4] Fi[2] Fp FC3{ m Fi[2]} Fp[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 FC4{ m}}


 S1598C3 ::~S1598C3(){ note_dtor("S1598C3", this);}
void  S1598C3 ::v73(){vfunc_called(this, "_ZN7S1598C33v73Ev");}
void  S1598C3 ::v74(){vfunc_called(this, "_ZN7S1598C33v74Ev");}
void  S1598C3 ::v75(){vfunc_called(this, "_ZN7S1598C33v75Ev");}
void  S1598C3 ::v76(){vfunc_called(this, "_ZN7S1598C33v76Ev");}
void  S1598C3 ::v77(){vfunc_called(this, "_ZN7S1598C33v77Ev");}
void  S1598C3 ::v78(){vfunc_called(this, "_ZN7S1598C33v78Ev");}
void  S1598C3 ::v79(){vfunc_called(this, "_ZN7S1598C33v79Ev");}
void  S1598C3 ::v80(){vfunc_called(this, "_ZN7S1598C33v80Ev");}
void  S1598C3 ::v81(){vfunc_called(this, "_ZN7S1598C33v81Ev");}
void  S1598C3 ::v82(){vfunc_called(this, "_ZN7S1598C33v82Ev");}
void  S1598C3 ::v83(){vfunc_called(this, "_ZN7S1598C33v83Ev");}
void  S1598C3 ::v84(){vfunc_called(this, "_ZN7S1598C33v84Ev");}
void  S1598C3 ::v85(){vfunc_called(this, "_ZN7S1598C33v85Ev");}
void  S1598C3 ::v86(){vfunc_called(this, "_ZN7S1598C33v86Ev");}
void  S1598C3 ::v87(){vfunc_called(this, "_ZN7S1598C33v87Ev");}
void  S1598C3 ::v88(){vfunc_called(this, "_ZN7S1598C33v88Ev");}
void  S1598C3 ::v89(){vfunc_called(this, "_ZN7S1598C33v89Ev");}
void  S1598C3 ::v90(){vfunc_called(this, "_ZN7S1598C33v90Ev");}
void  S1598C3 ::v91(){vfunc_called(this, "_ZN7S1598C33v91Ev");}
void  S1598C3 ::v92(){vfunc_called(this, "_ZN7S1598C33v92Ev");}
S1598C3 ::S1598C3(){ note_ctor("S1598C3", this);} // tgen

static void Test_S1598C3()
{
  extern Class_Descriptor cd_S1598C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(14,17)];
    init_test(&cd_S1598C3, buf);
    S1598C3 *dp, &lv = *(dp=new (buf) S1598C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(104,64), "sizeof(S1598C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1598C3)");
    check_base_class_offset(lv, (S1598C4*), 0, "S1598C3");
    set_bf_and_test(lv, s1598c3f0, ABISELECT(96,60), 0, 1, 1, "S1598C3");
    set_bf_and_test(lv, s1598c3f1, ABISELECT(96,60), 1, 1, 1, "S1598C3");
    set_bf_and_test(lv, s1598c3f2, ABISELECT(96,60), 2, 1, 1, "S1598C3");
    set_bf_and_test(lv, s1598c3f3, ABISELECT(96,60), 3, 1, 1, "S1598C3");
    set_bf_and_test(lv, s1598c3f4, ABISELECT(96,60), 4, 1, 1, "S1598C3");
    set_bf_and_test(lv, s1598c3f5, ABISELECT(96,60), 5, 1, 1, "S1598C3");
    set_bf_and_test(lv, s1598c3f6, ABISELECT(96,60), 6, 1, 1, "S1598C3");
    check_field_offset(lv, s1598c3f7, ABISELECT(97,61), "S1598C3.s1598c3f7");
    test_class_info(&lv, &cd_S1598C3);
    dp->~S1598C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1598C3(Test_S1598C3, "S1598C3", ABISELECT(104,64));

#else // __cplusplus

extern void _ZN7S1598C3C1Ev();
extern void _ZN7S1598C3D1Ev();
Name_Map name_map_S1598C3[] = {
  NSPAIR(_ZN7S1598C3C1Ev),
  NSPAIR(_ZN7S1598C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1598C4;
extern VTBL_ENTRY _ZTI7S1598C4[];
extern  VTBL_ENTRY _ZTV7S1598C4[];
static Base_Class bases_S1598C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1598C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI7S1598C3[];
extern void _ZN7S1598C3D1Ev();
extern void _ZN7S1598C3D0Ev();
extern void _ZN7S1598C42v9Ev();
extern void _ZN7S1598C43v10Ev();
extern void _ZN7S1598C43v11Ev();
extern void _ZN7S1598C43v12Ev();
extern void _ZN7S1598C43v13Ev();
extern void _ZN7S1598C43v14Ev();
extern void _ZN7S1598C43v15Ev();
extern void _ZN7S1598C43v16Ev();
extern void _ZN7S1598C43v17Ev();
extern void _ZN7S1598C43v18Ev();
extern void _ZN7S1598C43v19Ev();
extern void _ZN7S1598C43v20Ev();
extern void _ZN7S1598C43v21Ev();
extern void _ZN7S1598C43v22Ev();
extern void _ZN7S1598C43v23Ev();
extern void _ZN7S1598C43v24Ev();
extern void _ZN7S1598C43v25Ev();
extern void _ZN7S1598C43v26Ev();
extern void _ZN7S1598C43v27Ev();
extern void _ZN7S1598C43v28Ev();
extern void _ZN7S1598C43v29Ev();
extern void _ZN7S1598C43v30Ev();
extern void _ZN7S1598C43v31Ev();
extern void _ZN7S1598C43v32Ev();
extern void _ZN7S1598C43v33Ev();
extern void _ZN7S1598C43v34Ev();
extern void _ZN7S1598C43v35Ev();
extern void _ZN7S1598C43v36Ev();
extern void _ZN7S1598C43v37Ev();
extern void _ZN7S1598C43v38Ev();
extern void _ZN7S1598C43v39Ev();
extern void _ZN7S1598C43v40Ev();
extern void _ZN7S1598C43v41Ev();
extern void _ZN7S1598C43v42Ev();
extern void _ZN7S1598C43v43Ev();
extern void _ZN7S1598C43v44Ev();
extern void _ZN7S1598C43v45Ev();
extern void _ZN7S1598C43v46Ev();
extern void _ZN7S1598C43v47Ev();
extern void _ZN7S1598C43v48Ev();
extern void _ZN7S1598C43v49Ev();
extern void _ZN7S1598C43v50Ev();
extern void _ZN7S1598C43v51Ev();
extern void _ZN7S1598C43v52Ev();
extern void _ZN7S1598C43v53Ev();
extern void _ZN7S1598C43v54Ev();
extern void _ZN7S1598C43v55Ev();
extern void _ZN7S1598C43v56Ev();
extern void _ZN7S1598C43v57Ev();
extern void _ZN7S1598C43v58Ev();
extern void _ZN7S1598C43v59Ev();
extern void _ZN7S1598C43v60Ev();
extern void _ZN7S1598C43v61Ev();
extern void _ZN7S1598C43v62Ev();
extern void _ZN7S1598C43v63Ev();
extern void _ZN7S1598C43v64Ev();
extern void _ZN7S1598C43v65Ev();
extern void _ZN7S1598C43v66Ev();
extern void _ZN7S1598C43v67Ev();
extern void _ZN7S1598C43v68Ev();
extern void _ZN7S1598C43v69Ev();
extern void _ZN7S1598C43v70Ev();
extern void _ZN7S1598C43v71Ev();
extern void _ZN7S1598C43v72Ev();
extern void _ZN7S1598C33v73Ev();
extern void _ZN7S1598C33v74Ev();
extern void _ZN7S1598C33v75Ev();
extern void _ZN7S1598C33v76Ev();
extern void _ZN7S1598C33v77Ev();
extern void _ZN7S1598C33v78Ev();
extern void _ZN7S1598C33v79Ev();
extern void _ZN7S1598C33v80Ev();
extern void _ZN7S1598C33v81Ev();
extern void _ZN7S1598C33v82Ev();
extern void _ZN7S1598C33v83Ev();
extern void _ZN7S1598C33v84Ev();
extern void _ZN7S1598C33v85Ev();
extern void _ZN7S1598C33v86Ev();
extern void _ZN7S1598C33v87Ev();
extern void _ZN7S1598C33v88Ev();
extern void _ZN7S1598C33v89Ev();
extern void _ZN7S1598C33v90Ev();
extern void _ZN7S1598C33v91Ev();
extern void _ZN7S1598C33v92Ev();
static  VTBL_ENTRY vtc_S1598C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1598C3[0]),
  (VTBL_ENTRY)&_ZN7S1598C3D1Ev,
  (VTBL_ENTRY)&_ZN7S1598C3D0Ev,
  (VTBL_ENTRY)&_ZN7S1598C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1598C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1598C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1598C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1598C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1598C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1598C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1598C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1598C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1598C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1598C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1598C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1598C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1598C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1598C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1598C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1598C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1598C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1598C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1598C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1598C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1598C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1598C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1598C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1598C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1598C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1598C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1598C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1598C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1598C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1598C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1598C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1598C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1598C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1598C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1598C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1598C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1598C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1598C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1598C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1598C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1598C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1598C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1598C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1598C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1598C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1598C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1598C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1598C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1598C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1598C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1598C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1598C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1598C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1598C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1598C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1598C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1598C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1598C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1598C43v68Ev,
  (VTBL_ENTRY)&_ZN7S1598C43v69Ev,
  (VTBL_ENTRY)&_ZN7S1598C43v70Ev,
  (VTBL_ENTRY)&_ZN7S1598C43v71Ev,
  (VTBL_ENTRY)&_ZN7S1598C43v72Ev,
  (VTBL_ENTRY)&_ZN7S1598C33v73Ev,
  (VTBL_ENTRY)&_ZN7S1598C33v74Ev,
  (VTBL_ENTRY)&_ZN7S1598C33v75Ev,
  (VTBL_ENTRY)&_ZN7S1598C33v76Ev,
  (VTBL_ENTRY)&_ZN7S1598C33v77Ev,
  (VTBL_ENTRY)&_ZN7S1598C33v78Ev,
  (VTBL_ENTRY)&_ZN7S1598C33v79Ev,
  (VTBL_ENTRY)&_ZN7S1598C33v80Ev,
  (VTBL_ENTRY)&_ZN7S1598C33v81Ev,
  (VTBL_ENTRY)&_ZN7S1598C33v82Ev,
  (VTBL_ENTRY)&_ZN7S1598C33v83Ev,
  (VTBL_ENTRY)&_ZN7S1598C33v84Ev,
  (VTBL_ENTRY)&_ZN7S1598C33v85Ev,
  (VTBL_ENTRY)&_ZN7S1598C33v86Ev,
  (VTBL_ENTRY)&_ZN7S1598C33v87Ev,
  (VTBL_ENTRY)&_ZN7S1598C33v88Ev,
  (VTBL_ENTRY)&_ZN7S1598C33v89Ev,
  (VTBL_ENTRY)&_ZN7S1598C33v90Ev,
  (VTBL_ENTRY)&_ZN7S1598C33v91Ev,
  (VTBL_ENTRY)&_ZN7S1598C33v92Ev,
};
extern VTBL_ENTRY _ZTI7S1598C3[];
extern  VTBL_ENTRY _ZTV7S1598C3[];
Class_Descriptor cd_S1598C3 = {  "S1598C3", // class name
  bases_S1598C3, 1,
  &(vtc_S1598C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(104,64), // object size
  NSPAIRA(_ZTI7S1598C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1598C3),88, //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  S1598C2  : S1598C3 {
  ::S674C42 s1598c2f0;
  virtual  ~S1598C2(); // _ZN7S1598C2D1Ev
  virtual void  v93(); // _ZN7S1598C23v93Ev
  virtual void  v94(); // _ZN7S1598C23v94Ev
  virtual void  v95(); // _ZN7S1598C23v95Ev
  virtual void  v96(); // _ZN7S1598C23v96Ev
  S1598C2(); // tgen
};
//SIG(-1 S1598C2) C1{ BC2{ BC3{ 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 FC4{ m Fi[2]} Fp[2]} vd v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 FC5{ m}} vd v1 v2 v3 v4 FC6{ BC7{ BC8{ m Fp Fi[2]}}}}


 S1598C2 ::~S1598C2(){ note_dtor("S1598C2", this);}
void  S1598C2 ::v93(){vfunc_called(this, "_ZN7S1598C23v93Ev");}
void  S1598C2 ::v94(){vfunc_called(this, "_ZN7S1598C23v94Ev");}
void  S1598C2 ::v95(){vfunc_called(this, "_ZN7S1598C23v95Ev");}
void  S1598C2 ::v96(){vfunc_called(this, "_ZN7S1598C23v96Ev");}
S1598C2 ::S1598C2(){ note_ctor("S1598C2", this);} // tgen

static void Test_S1598C2()
{
  extern Class_Descriptor cd_S1598C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(16,20)];
    init_test(&cd_S1598C2, buf);
    S1598C2 *dp, &lv = *(dp=new (buf) S1598C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(120,76), "sizeof(S1598C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1598C2)");
    check_base_class_offset(lv, (S1598C4*)(S1598C3*), 0, "S1598C2");
    check_base_class_offset(lv, (S1598C3*), 0, "S1598C2");
    check_field_offset(lv, s1598c2f0, ABISELECT(104,64), "S1598C2.s1598c2f0");
    test_class_info(&lv, &cd_S1598C2);
    dp->~S1598C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1598C2(Test_S1598C2, "S1598C2", ABISELECT(120,76));

#else // __cplusplus

extern void _ZN7S1598C2C1Ev();
extern void _ZN7S1598C2D1Ev();
Name_Map name_map_S1598C2[] = {
  NSPAIR(_ZN7S1598C2C1Ev),
  NSPAIR(_ZN7S1598C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1598C4;
extern VTBL_ENTRY _ZTI7S1598C4[];
extern  VTBL_ENTRY _ZTV7S1598C4[];
extern Class_Descriptor cd_S1598C3;
extern VTBL_ENTRY _ZTI7S1598C3[];
extern  VTBL_ENTRY _ZTV7S1598C3[];
static Base_Class bases_S1598C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1598C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S1598C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S1598C2[];
extern void _ZN7S1598C2D1Ev();
extern void _ZN7S1598C2D0Ev();
extern void _ZN7S1598C42v9Ev();
extern void _ZN7S1598C43v10Ev();
extern void _ZN7S1598C43v11Ev();
extern void _ZN7S1598C43v12Ev();
extern void _ZN7S1598C43v13Ev();
extern void _ZN7S1598C43v14Ev();
extern void _ZN7S1598C43v15Ev();
extern void _ZN7S1598C43v16Ev();
extern void _ZN7S1598C43v17Ev();
extern void _ZN7S1598C43v18Ev();
extern void _ZN7S1598C43v19Ev();
extern void _ZN7S1598C43v20Ev();
extern void _ZN7S1598C43v21Ev();
extern void _ZN7S1598C43v22Ev();
extern void _ZN7S1598C43v23Ev();
extern void _ZN7S1598C43v24Ev();
extern void _ZN7S1598C43v25Ev();
extern void _ZN7S1598C43v26Ev();
extern void _ZN7S1598C43v27Ev();
extern void _ZN7S1598C43v28Ev();
extern void _ZN7S1598C43v29Ev();
extern void _ZN7S1598C43v30Ev();
extern void _ZN7S1598C43v31Ev();
extern void _ZN7S1598C43v32Ev();
extern void _ZN7S1598C43v33Ev();
extern void _ZN7S1598C43v34Ev();
extern void _ZN7S1598C43v35Ev();
extern void _ZN7S1598C43v36Ev();
extern void _ZN7S1598C43v37Ev();
extern void _ZN7S1598C43v38Ev();
extern void _ZN7S1598C43v39Ev();
extern void _ZN7S1598C43v40Ev();
extern void _ZN7S1598C43v41Ev();
extern void _ZN7S1598C43v42Ev();
extern void _ZN7S1598C43v43Ev();
extern void _ZN7S1598C43v44Ev();
extern void _ZN7S1598C43v45Ev();
extern void _ZN7S1598C43v46Ev();
extern void _ZN7S1598C43v47Ev();
extern void _ZN7S1598C43v48Ev();
extern void _ZN7S1598C43v49Ev();
extern void _ZN7S1598C43v50Ev();
extern void _ZN7S1598C43v51Ev();
extern void _ZN7S1598C43v52Ev();
extern void _ZN7S1598C43v53Ev();
extern void _ZN7S1598C43v54Ev();
extern void _ZN7S1598C43v55Ev();
extern void _ZN7S1598C43v56Ev();
extern void _ZN7S1598C43v57Ev();
extern void _ZN7S1598C43v58Ev();
extern void _ZN7S1598C43v59Ev();
extern void _ZN7S1598C43v60Ev();
extern void _ZN7S1598C43v61Ev();
extern void _ZN7S1598C43v62Ev();
extern void _ZN7S1598C43v63Ev();
extern void _ZN7S1598C43v64Ev();
extern void _ZN7S1598C43v65Ev();
extern void _ZN7S1598C43v66Ev();
extern void _ZN7S1598C43v67Ev();
extern void _ZN7S1598C43v68Ev();
extern void _ZN7S1598C43v69Ev();
extern void _ZN7S1598C43v70Ev();
extern void _ZN7S1598C43v71Ev();
extern void _ZN7S1598C43v72Ev();
extern void _ZN7S1598C33v73Ev();
extern void _ZN7S1598C33v74Ev();
extern void _ZN7S1598C33v75Ev();
extern void _ZN7S1598C33v76Ev();
extern void _ZN7S1598C33v77Ev();
extern void _ZN7S1598C33v78Ev();
extern void _ZN7S1598C33v79Ev();
extern void _ZN7S1598C33v80Ev();
extern void _ZN7S1598C33v81Ev();
extern void _ZN7S1598C33v82Ev();
extern void _ZN7S1598C33v83Ev();
extern void _ZN7S1598C33v84Ev();
extern void _ZN7S1598C33v85Ev();
extern void _ZN7S1598C33v86Ev();
extern void _ZN7S1598C33v87Ev();
extern void _ZN7S1598C33v88Ev();
extern void _ZN7S1598C33v89Ev();
extern void _ZN7S1598C33v90Ev();
extern void _ZN7S1598C33v91Ev();
extern void _ZN7S1598C33v92Ev();
extern void _ZN7S1598C23v93Ev();
extern void _ZN7S1598C23v94Ev();
extern void _ZN7S1598C23v95Ev();
extern void _ZN7S1598C23v96Ev();
static  VTBL_ENTRY vtc_S1598C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1598C2[0]),
  (VTBL_ENTRY)&_ZN7S1598C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1598C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1598C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1598C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1598C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1598C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1598C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1598C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1598C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1598C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1598C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1598C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1598C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1598C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1598C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1598C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1598C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1598C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1598C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1598C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1598C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1598C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1598C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1598C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1598C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1598C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1598C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1598C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1598C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1598C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1598C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1598C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1598C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1598C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1598C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1598C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1598C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1598C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1598C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1598C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1598C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1598C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1598C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1598C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1598C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1598C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1598C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1598C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1598C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1598C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1598C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1598C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1598C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1598C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1598C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1598C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1598C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1598C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1598C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1598C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1598C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1598C43v68Ev,
  (VTBL_ENTRY)&_ZN7S1598C43v69Ev,
  (VTBL_ENTRY)&_ZN7S1598C43v70Ev,
  (VTBL_ENTRY)&_ZN7S1598C43v71Ev,
  (VTBL_ENTRY)&_ZN7S1598C43v72Ev,
  (VTBL_ENTRY)&_ZN7S1598C33v73Ev,
  (VTBL_ENTRY)&_ZN7S1598C33v74Ev,
  (VTBL_ENTRY)&_ZN7S1598C33v75Ev,
  (VTBL_ENTRY)&_ZN7S1598C33v76Ev,
  (VTBL_ENTRY)&_ZN7S1598C33v77Ev,
  (VTBL_ENTRY)&_ZN7S1598C33v78Ev,
  (VTBL_ENTRY)&_ZN7S1598C33v79Ev,
  (VTBL_ENTRY)&_ZN7S1598C33v80Ev,
  (VTBL_ENTRY)&_ZN7S1598C33v81Ev,
  (VTBL_ENTRY)&_ZN7S1598C33v82Ev,
  (VTBL_ENTRY)&_ZN7S1598C33v83Ev,
  (VTBL_ENTRY)&_ZN7S1598C33v84Ev,
  (VTBL_ENTRY)&_ZN7S1598C33v85Ev,
  (VTBL_ENTRY)&_ZN7S1598C33v86Ev,
  (VTBL_ENTRY)&_ZN7S1598C33v87Ev,
  (VTBL_ENTRY)&_ZN7S1598C33v88Ev,
  (VTBL_ENTRY)&_ZN7S1598C33v89Ev,
  (VTBL_ENTRY)&_ZN7S1598C33v90Ev,
  (VTBL_ENTRY)&_ZN7S1598C33v91Ev,
  (VTBL_ENTRY)&_ZN7S1598C33v92Ev,
  (VTBL_ENTRY)&_ZN7S1598C23v93Ev,
  (VTBL_ENTRY)&_ZN7S1598C23v94Ev,
  (VTBL_ENTRY)&_ZN7S1598C23v95Ev,
  (VTBL_ENTRY)&_ZN7S1598C23v96Ev,
};
extern VTBL_ENTRY _ZTI7S1598C2[];
extern  VTBL_ENTRY _ZTV7S1598C2[];
Class_Descriptor cd_S1598C2 = {  "S1598C2", // class name
  bases_S1598C2, 2,
  &(vtc_S1598C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(120,76), // object size
  NSPAIRA(_ZTI7S1598C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1598C2),92, //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  S1598C1  : S1598C2 {
  ::S1292C12 s1598c1f0;
  ::S1289C10_nt s1598c1f1;
  ::S1289C10_nt s1598c1f2;
  ::S1292C12 s1598c1f3;
  ::S1289C10_nt s1598c1f4;
  unsigned int s1598c1f5:1;
  unsigned int s1598c1f6:1;
  unsigned int s1598c1f7:1;
  ::S1292C12 s1598c1f8;
  virtual  ~S1598C1(); // _ZN7S1598C1D1Ev
  virtual void  v1(); // _ZN7S1598C12v1Ev
  virtual void  v2(); // _ZN7S1598C12v2Ev
  virtual void  v3(); // _ZN7S1598C12v3Ev
  virtual void  v4(); // _ZN7S1598C12v4Ev
  virtual void  v5(); // _ZN7S1598C12v5Ev
  virtual void  v6(); // _ZN7S1598C12v6Ev
  virtual void  v7(); // _ZN7S1598C12v7Ev
  virtual void  v8(); // _ZN7S1598C12v8Ev
  S1598C1(); // tgen
};
//SIG(1 S1598C1) C1{ BC2{ BC3{ BC4{ 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 FC5{ m Fi[2]} Fp[2]} vd v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 v91 v92 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 FC6{ m}} vd v93 v94 v95 v96 FC7{ BC8{ BC9{ m Fp Fi[2]}}}} vd v1 v2 v3 v4 v5 v6 v7 v8 FC10{ BC11{ m Fc[4] FC12{ BC13{ BC9}} Fi[2]} Fp} FC14{ BC11 Fp} FC14 FC10 FC14 Fi:1 Fi:1 Fi:1 FC10}


 S1598C1 ::~S1598C1(){ note_dtor("S1598C1", this);}
void  S1598C1 ::v1(){vfunc_called(this, "_ZN7S1598C12v1Ev");}
void  S1598C1 ::v2(){vfunc_called(this, "_ZN7S1598C12v2Ev");}
void  S1598C1 ::v3(){vfunc_called(this, "_ZN7S1598C12v3Ev");}
void  S1598C1 ::v4(){vfunc_called(this, "_ZN7S1598C12v4Ev");}
void  S1598C1 ::v5(){vfunc_called(this, "_ZN7S1598C12v5Ev");}
void  S1598C1 ::v6(){vfunc_called(this, "_ZN7S1598C12v6Ev");}
void  S1598C1 ::v7(){vfunc_called(this, "_ZN7S1598C12v7Ev");}
void  S1598C1 ::v8(){vfunc_called(this, "_ZN7S1598C12v8Ev");}
S1598C1 ::S1598C1(){ note_ctor("S1598C1", this);} // tgen

static void Test_S1598C1()
{
  extern Class_Descriptor cd_S1598C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(47,63)];
    init_test(&cd_S1598C1, buf);
    S1598C1 *dp, &lv = *(dp=new (buf) S1598C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(368,248), "sizeof(S1598C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1598C1)");
    check_base_class_offset(lv, (S1598C4*)(S1598C3*)(S1598C2*), 0, "S1598C1");
    check_base_class_offset(lv, (S1598C3*)(S1598C2*), 0, "S1598C1");
    check_base_class_offset(lv, (S1598C2*), 0, "S1598C1");
    check_field_offset(lv, s1598c1f0, ABISELECT(120,76), "S1598C1.s1598c1f0");
    check_field_offset(lv, s1598c1f1, ABISELECT(160,104), "S1598C1.s1598c1f1");
    check_field_offset(lv, s1598c1f2, ABISELECT(200,132), "S1598C1.s1598c1f2");
    check_field_offset(lv, s1598c1f3, ABISELECT(240,160), "S1598C1.s1598c1f3");
    check_field_offset(lv, s1598c1f4, ABISELECT(280,188), "S1598C1.s1598c1f4");
    set_bf_and_test(lv, s1598c1f5, ABISELECT(320,216), 0, 1, 1, "S1598C1");
    set_bf_and_test(lv, s1598c1f6, ABISELECT(320,216), 1, 1, 1, "S1598C1");
    set_bf_and_test(lv, s1598c1f7, ABISELECT(320,216), 2, 1, 1, "S1598C1");
    check_field_offset(lv, s1598c1f8, ABISELECT(328,220), "S1598C1.s1598c1f8");
    test_class_info(&lv, &cd_S1598C1);
    dp->~S1598C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1598C1(Test_S1598C1, "S1598C1", ABISELECT(368,248));

#else // __cplusplus

extern void _ZN7S1598C1C1Ev();
extern void _ZN7S1598C1D1Ev();
Name_Map name_map_S1598C1[] = {
  NSPAIR(_ZN7S1598C1C1Ev),
  NSPAIR(_ZN7S1598C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1598C4;
extern VTBL_ENTRY _ZTI7S1598C4[];
extern  VTBL_ENTRY _ZTV7S1598C4[];
extern Class_Descriptor cd_S1598C3;
extern VTBL_ENTRY _ZTI7S1598C3[];
extern  VTBL_ENTRY _ZTV7S1598C3[];
extern Class_Descriptor cd_S1598C2;
extern VTBL_ENTRY _ZTI7S1598C2[];
extern  VTBL_ENTRY _ZTV7S1598C2[];
static Base_Class bases_S1598C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1598C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S1598C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S1598C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S1598C1[];
extern void _ZN7S1598C1D1Ev();
extern void _ZN7S1598C1D0Ev();
extern void _ZN7S1598C42v9Ev();
extern void _ZN7S1598C43v10Ev();
extern void _ZN7S1598C43v11Ev();
extern void _ZN7S1598C43v12Ev();
extern void _ZN7S1598C43v13Ev();
extern void _ZN7S1598C43v14Ev();
extern void _ZN7S1598C43v15Ev();
extern void _ZN7S1598C43v16Ev();
extern void _ZN7S1598C43v17Ev();
extern void _ZN7S1598C43v18Ev();
extern void _ZN7S1598C43v19Ev();
extern void _ZN7S1598C43v20Ev();
extern void _ZN7S1598C43v21Ev();
extern void _ZN7S1598C43v22Ev();
extern void _ZN7S1598C43v23Ev();
extern void _ZN7S1598C43v24Ev();
extern void _ZN7S1598C43v25Ev();
extern void _ZN7S1598C43v26Ev();
extern void _ZN7S1598C43v27Ev();
extern void _ZN7S1598C43v28Ev();
extern void _ZN7S1598C43v29Ev();
extern void _ZN7S1598C43v30Ev();
extern void _ZN7S1598C43v31Ev();
extern void _ZN7S1598C43v32Ev();
extern void _ZN7S1598C43v33Ev();
extern void _ZN7S1598C43v34Ev();
extern void _ZN7S1598C43v35Ev();
extern void _ZN7S1598C43v36Ev();
extern void _ZN7S1598C43v37Ev();
extern void _ZN7S1598C43v38Ev();
extern void _ZN7S1598C43v39Ev();
extern void _ZN7S1598C43v40Ev();
extern void _ZN7S1598C43v41Ev();
extern void _ZN7S1598C43v42Ev();
extern void _ZN7S1598C43v43Ev();
extern void _ZN7S1598C43v44Ev();
extern void _ZN7S1598C43v45Ev();
extern void _ZN7S1598C43v46Ev();
extern void _ZN7S1598C43v47Ev();
extern void _ZN7S1598C43v48Ev();
extern void _ZN7S1598C43v49Ev();
extern void _ZN7S1598C43v50Ev();
extern void _ZN7S1598C43v51Ev();
extern void _ZN7S1598C43v52Ev();
extern void _ZN7S1598C43v53Ev();
extern void _ZN7S1598C43v54Ev();
extern void _ZN7S1598C43v55Ev();
extern void _ZN7S1598C43v56Ev();
extern void _ZN7S1598C43v57Ev();
extern void _ZN7S1598C43v58Ev();
extern void _ZN7S1598C43v59Ev();
extern void _ZN7S1598C43v60Ev();
extern void _ZN7S1598C43v61Ev();
extern void _ZN7S1598C43v62Ev();
extern void _ZN7S1598C43v63Ev();
extern void _ZN7S1598C43v64Ev();
extern void _ZN7S1598C43v65Ev();
extern void _ZN7S1598C43v66Ev();
extern void _ZN7S1598C43v67Ev();
extern void _ZN7S1598C43v68Ev();
extern void _ZN7S1598C43v69Ev();
extern void _ZN7S1598C43v70Ev();
extern void _ZN7S1598C43v71Ev();
extern void _ZN7S1598C43v72Ev();
extern void _ZN7S1598C33v73Ev();
extern void _ZN7S1598C33v74Ev();
extern void _ZN7S1598C33v75Ev();
extern void _ZN7S1598C33v76Ev();
extern void _ZN7S1598C33v77Ev();
extern void _ZN7S1598C33v78Ev();
extern void _ZN7S1598C33v79Ev();
extern void _ZN7S1598C33v80Ev();
extern void _ZN7S1598C33v81Ev();
extern void _ZN7S1598C33v82Ev();
extern void _ZN7S1598C33v83Ev();
extern void _ZN7S1598C33v84Ev();
extern void _ZN7S1598C33v85Ev();
extern void _ZN7S1598C33v86Ev();
extern void _ZN7S1598C33v87Ev();
extern void _ZN7S1598C33v88Ev();
extern void _ZN7S1598C33v89Ev();
extern void _ZN7S1598C33v90Ev();
extern void _ZN7S1598C33v91Ev();
extern void _ZN7S1598C33v92Ev();
extern void _ZN7S1598C23v93Ev();
extern void _ZN7S1598C23v94Ev();
extern void _ZN7S1598C23v95Ev();
extern void _ZN7S1598C23v96Ev();
extern void _ZN7S1598C12v1Ev();
extern void _ZN7S1598C12v2Ev();
extern void _ZN7S1598C12v3Ev();
extern void _ZN7S1598C12v4Ev();
extern void _ZN7S1598C12v5Ev();
extern void _ZN7S1598C12v6Ev();
extern void _ZN7S1598C12v7Ev();
extern void _ZN7S1598C12v8Ev();
static  VTBL_ENTRY vtc_S1598C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1598C1[0]),
  (VTBL_ENTRY)&_ZN7S1598C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1598C1D0Ev,
  (VTBL_ENTRY)&_ZN7S1598C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1598C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1598C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1598C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1598C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1598C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1598C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1598C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1598C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1598C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1598C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1598C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1598C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1598C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1598C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1598C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1598C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1598C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1598C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1598C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1598C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1598C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1598C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1598C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1598C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1598C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1598C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1598C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1598C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1598C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1598C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1598C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1598C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1598C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1598C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1598C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1598C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1598C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1598C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1598C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1598C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1598C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1598C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1598C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1598C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1598C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1598C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1598C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1598C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1598C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1598C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1598C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1598C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1598C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1598C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1598C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1598C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1598C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1598C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1598C43v68Ev,
  (VTBL_ENTRY)&_ZN7S1598C43v69Ev,
  (VTBL_ENTRY)&_ZN7S1598C43v70Ev,
  (VTBL_ENTRY)&_ZN7S1598C43v71Ev,
  (VTBL_ENTRY)&_ZN7S1598C43v72Ev,
  (VTBL_ENTRY)&_ZN7S1598C33v73Ev,
  (VTBL_ENTRY)&_ZN7S1598C33v74Ev,
  (VTBL_ENTRY)&_ZN7S1598C33v75Ev,
  (VTBL_ENTRY)&_ZN7S1598C33v76Ev,
  (VTBL_ENTRY)&_ZN7S1598C33v77Ev,
  (VTBL_ENTRY)&_ZN7S1598C33v78Ev,
  (VTBL_ENTRY)&_ZN7S1598C33v79Ev,
  (VTBL_ENTRY)&_ZN7S1598C33v80Ev,
  (VTBL_ENTRY)&_ZN7S1598C33v81Ev,
  (VTBL_ENTRY)&_ZN7S1598C33v82Ev,
  (VTBL_ENTRY)&_ZN7S1598C33v83Ev,
  (VTBL_ENTRY)&_ZN7S1598C33v84Ev,
  (VTBL_ENTRY)&_ZN7S1598C33v85Ev,
  (VTBL_ENTRY)&_ZN7S1598C33v86Ev,
  (VTBL_ENTRY)&_ZN7S1598C33v87Ev,
  (VTBL_ENTRY)&_ZN7S1598C33v88Ev,
  (VTBL_ENTRY)&_ZN7S1598C33v89Ev,
  (VTBL_ENTRY)&_ZN7S1598C33v90Ev,
  (VTBL_ENTRY)&_ZN7S1598C33v91Ev,
  (VTBL_ENTRY)&_ZN7S1598C33v92Ev,
  (VTBL_ENTRY)&_ZN7S1598C23v93Ev,
  (VTBL_ENTRY)&_ZN7S1598C23v94Ev,
  (VTBL_ENTRY)&_ZN7S1598C23v95Ev,
  (VTBL_ENTRY)&_ZN7S1598C23v96Ev,
  (VTBL_ENTRY)&_ZN7S1598C12v1Ev,
  (VTBL_ENTRY)&_ZN7S1598C12v2Ev,
  (VTBL_ENTRY)&_ZN7S1598C12v3Ev,
  (VTBL_ENTRY)&_ZN7S1598C12v4Ev,
  (VTBL_ENTRY)&_ZN7S1598C12v5Ev,
  (VTBL_ENTRY)&_ZN7S1598C12v6Ev,
  (VTBL_ENTRY)&_ZN7S1598C12v7Ev,
  (VTBL_ENTRY)&_ZN7S1598C12v8Ev,
};
extern VTBL_ENTRY _ZTI7S1598C1[];
extern  VTBL_ENTRY _ZTV7S1598C1[];
Class_Descriptor cd_S1598C1 = {  "S1598C1", // class name
  bases_S1598C1, 3,
  &(vtc_S1598C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(368,248), // object size
  NSPAIRA(_ZTI7S1598C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1598C1),100, //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  S665C5  {
  int s665c5f0;
  __tsi64 s665c5f1;
  void *s665c5f2[4];
  int s665c5f3[2];
  void *s665c5f4;
  ::S674C6_nt s665c5f5;
  void *s665c5f6[2];
  virtual  ~S665C5(); // _ZN6S665C5D1Ev
  virtual void  v6(); // _ZN6S665C52v6Ev
  virtual void  v7(); // _ZN6S665C52v7Ev
  virtual void  v8(); // _ZN6S665C52v8Ev
  virtual void  v9(); // _ZN6S665C52v9Ev
  virtual void  v10(); // _ZN6S665C53v10Ev
  virtual void  v11(); // _ZN6S665C53v11Ev
  virtual void  v12(); // _ZN6S665C53v12Ev
  virtual void  v13(); // _ZN6S665C53v13Ev
  virtual void  v14(); // _ZN6S665C53v14Ev
  virtual void  v15(); // _ZN6S665C53v15Ev
  virtual void  v16(); // _ZN6S665C53v16Ev
  virtual void  v17(); // _ZN6S665C53v17Ev
  virtual void  v18(); // _ZN6S665C53v18Ev
  virtual void  v19(); // _ZN6S665C53v19Ev
  virtual void  v20(); // _ZN6S665C53v20Ev
  virtual void  v21(); // _ZN6S665C53v21Ev
  virtual void  v22(); // _ZN6S665C53v22Ev
  virtual void  v23(); // _ZN6S665C53v23Ev
  virtual void  v24(); // _ZN6S665C53v24Ev
  virtual void  v25(); // _ZN6S665C53v25Ev
  virtual void  v26(); // _ZN6S665C53v26Ev
  virtual void  v27(); // _ZN6S665C53v27Ev
  virtual void  v28(); // _ZN6S665C53v28Ev
  virtual void  v29(); // _ZN6S665C53v29Ev
  virtual void  v30(); // _ZN6S665C53v30Ev
  virtual void  v31(); // _ZN6S665C53v31Ev
  virtual void  v32(); // _ZN6S665C53v32Ev
  virtual void  v33(); // _ZN6S665C53v33Ev
  virtual void  v34(); // _ZN6S665C53v34Ev
  virtual void  v35(); // _ZN6S665C53v35Ev
  virtual void  v36(); // _ZN6S665C53v36Ev
  virtual void  v37(); // _ZN6S665C53v37Ev
  virtual void  v38(); // _ZN6S665C53v38Ev
  virtual void  v39(); // _ZN6S665C53v39Ev
  virtual void  v40(); // _ZN6S665C53v40Ev
  virtual void  v41(); // _ZN6S665C53v41Ev
  virtual void  v42(); // _ZN6S665C53v42Ev
  virtual void  v43(); // _ZN6S665C53v43Ev
  virtual void  v44(); // _ZN6S665C53v44Ev
  virtual void  v45(); // _ZN6S665C53v45Ev
  virtual void  v46(); // _ZN6S665C53v46Ev
  virtual void  v47(); // _ZN6S665C53v47Ev
  virtual void  v48(); // _ZN6S665C53v48Ev
  virtual void  v49(); // _ZN6S665C53v49Ev
  virtual void  v50(); // _ZN6S665C53v50Ev
  virtual void  v51(); // _ZN6S665C53v51Ev
  virtual void  v52(); // _ZN6S665C53v52Ev
  virtual void  v53(); // _ZN6S665C53v53Ev
  virtual void  v54(); // _ZN6S665C53v54Ev
  virtual void  v55(); // _ZN6S665C53v55Ev
  virtual void  v56(); // _ZN6S665C53v56Ev
  virtual void  v57(); // _ZN6S665C53v57Ev
  virtual void  v58(); // _ZN6S665C53v58Ev
  virtual void  v59(); // _ZN6S665C53v59Ev
  virtual void  v60(); // _ZN6S665C53v60Ev
  virtual void  v61(); // _ZN6S665C53v61Ev
  virtual void  v62(); // _ZN6S665C53v62Ev
  virtual void  v63(); // _ZN6S665C53v63Ev
  virtual void  v64(); // _ZN6S665C53v64Ev
  virtual void  v65(); // _ZN6S665C53v65Ev
  virtual void  v66(); // _ZN6S665C53v66Ev
  virtual void  v67(); // _ZN6S665C53v67Ev
  virtual void  v68(); // _ZN6S665C53v68Ev
  virtual void  v69(); // _ZN6S665C53v69Ev
  S665C5(); // tgen
};
//SIG(-1 S665C5) 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]}


 S665C5 ::~S665C5(){ note_dtor("S665C5", this);}
void  S665C5 ::v6(){vfunc_called(this, "_ZN6S665C52v6Ev");}
void  S665C5 ::v7(){vfunc_called(this, "_ZN6S665C52v7Ev");}
void  S665C5 ::v8(){vfunc_called(this, "_ZN6S665C52v8Ev");}
void  S665C5 ::v9(){vfunc_called(this, "_ZN6S665C52v9Ev");}
void  S665C5 ::v10(){vfunc_called(this, "_ZN6S665C53v10Ev");}
void  S665C5 ::v11(){vfunc_called(this, "_ZN6S665C53v11Ev");}
void  S665C5 ::v12(){vfunc_called(this, "_ZN6S665C53v12Ev");}
void  S665C5 ::v13(){vfunc_called(this, "_ZN6S665C53v13Ev");}
void  S665C5 ::v14(){vfunc_called(this, "_ZN6S665C53v14Ev");}
void  S665C5 ::v15(){vfunc_called(this, "_ZN6S665C53v15Ev");}
void  S665C5 ::v16(){vfunc_called(this, "_ZN6S665C53v16Ev");}
void  S665C5 ::v17(){vfunc_called(this, "_ZN6S665C53v17Ev");}
void  S665C5 ::v18(){vfunc_called(this, "_ZN6S665C53v18Ev");}
void  S665C5 ::v19(){vfunc_called(this, "_ZN6S665C53v19Ev");}
void  S665C5 ::v20(){vfunc_called(this, "_ZN6S665C53v20Ev");}
void  S665C5 ::v21(){vfunc_called(this, "_ZN6S665C53v21Ev");}
void  S665C5 ::v22(){vfunc_called(this, "_ZN6S665C53v22Ev");}
void  S665C5 ::v23(){vfunc_called(this, "_ZN6S665C53v23Ev");}
void  S665C5 ::v24(){vfunc_called(this, "_ZN6S665C53v24Ev");}
void  S665C5 ::v25(){vfunc_called(this, "_ZN6S665C53v25Ev");}
void  S665C5 ::v26(){vfunc_called(this, "_ZN6S665C53v26Ev");}
void  S665C5 ::v27(){vfunc_called(this, "_ZN6S665C53v27Ev");}
void  S665C5 ::v28(){vfunc_called(this, "_ZN6S665C53v28Ev");}
void  S665C5 ::v29(){vfunc_called(this, "_ZN6S665C53v29Ev");}
void  S665C5 ::v30(){vfunc_called(this, "_ZN6S665C53v30Ev");}
void  S665C5 ::v31(){vfunc_called(this, "_ZN6S665C53v31Ev");}
void  S665C5 ::v32(){vfunc_called(this, "_ZN6S665C53v32Ev");}
void  S665C5 ::v33(){vfunc_called(this, "_ZN6S665C53v33Ev");}
void  S665C5 ::v34(){vfunc_called(this, "_ZN6S665C53v34Ev");}
void  S665C5 ::v35(){vfunc_called(this, "_ZN6S665C53v35Ev");}
void  S665C5 ::v36(){vfunc_called(this, "_ZN6S665C53v36Ev");}
void  S665C5 ::v37(){vfunc_called(this, "_ZN6S665C53v37Ev");}
void  S665C5 ::v38(){vfunc_called(this, "_ZN6S665C53v38Ev");}
void  S665C5 ::v39(){vfunc_called(this, "_ZN6S665C53v39Ev");}
void  S665C5 ::v40(){vfunc_called(this, "_ZN6S665C53v40Ev");}
void  S665C5 ::v41(){vfunc_called(this, "_ZN6S665C53v41Ev");}
void  S665C5 ::v42(){vfunc_called(this, "_ZN6S665C53v42Ev");}
void  S665C5 ::v43(){vfunc_called(this, "_ZN6S665C53v43Ev");}
void  S665C5 ::v44(){vfunc_called(this, "_ZN6S665C53v44Ev");}
void  S665C5 ::v45(){vfunc_called(this, "_ZN6S665C53v45Ev");}
void  S665C5 ::v46(){vfunc_called(this, "_ZN6S665C53v46Ev");}
void  S665C5 ::v47(){vfunc_called(this, "_ZN6S665C53v47Ev");}
void  S665C5 ::v48(){vfunc_called(this, "_ZN6S665C53v48Ev");}
void  S665C5 ::v49(){vfunc_called(this, "_ZN6S665C53v49Ev");}
void  S665C5 ::v50(){vfunc_called(this, "_ZN6S665C53v50Ev");}
void  S665C5 ::v51(){vfunc_called(this, "_ZN6S665C53v51Ev");}
void  S665C5 ::v52(){vfunc_called(this, "_ZN6S665C53v52Ev");}
void  S665C5 ::v53(){vfunc_called(this, "_ZN6S665C53v53Ev");}
void  S665C5 ::v54(){vfunc_called(this, "_ZN6S665C53v54Ev");}
void  S665C5 ::v55(){vfunc_called(this, "_ZN6S665C53v55Ev");}
void  S665C5 ::v56(){vfunc_called(this, "_ZN6S665C53v56Ev");}
void  S665C5 ::v57(){vfunc_called(this, "_ZN6S665C53v57Ev");}
void  S665C5 ::v58(){vfunc_called(this, "_ZN6S665C53v58Ev");}
void  S665C5 ::v59(){vfunc_called(this, "_ZN6S665C53v59Ev");}
void  S665C5 ::v60(){vfunc_called(this, "_ZN6S665C53v60Ev");}
void  S665C5 ::v61(){vfunc_called(this, "_ZN6S665C53v61Ev");}
void  S665C5 ::v62(){vfunc_called(this, "_ZN6S665C53v62Ev");}
void  S665C5 ::v63(){vfunc_called(this, "_ZN6S665C53v63Ev");}
void  S665C5 ::v64(){vfunc_called(this, "_ZN6S665C53v64Ev");}
void  S665C5 ::v65(){vfunc_called(this, "_ZN6S665C53v65Ev");}
void  S665C5 ::v66(){vfunc_called(this, "_ZN6S665C53v66Ev");}
void  S665C5 ::v67(){vfunc_called(this, "_ZN6S665C53v67Ev");}
void  S665C5 ::v68(){vfunc_called(this, "_ZN6S665C53v68Ev");}
void  S665C5 ::v69(){vfunc_called(this, "_ZN6S665C53v69Ev");}
S665C5 ::S665C5(){ note_ctor("S665C5", this);} // tgen

static void Test_S665C5()
{
  extern Class_Descriptor cd_S665C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S665C5, buf);
    S665C5 *dp, &lv = *(dp=new (buf) S665C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S665C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S665C5)");
    check_field_offset(lv, s665c5f0, ABISELECT(8,4), "S665C5.s665c5f0");
    check_field_offset(lv, s665c5f1, ABISELECT(16,8), "S665C5.s665c5f1");
    check_field_offset(lv, s665c5f2, ABISELECT(24,16), "S665C5.s665c5f2");
    check_field_offset(lv, s665c5f3, ABISELECT(56,32), "S665C5.s665c5f3");
    check_field_offset(lv, s665c5f4, ABISELECT(64,40), "S665C5.s665c5f4");
    check_field_offset(lv, s665c5f5, ABISELECT(72,44), "S665C5.s665c5f5");
    check_field_offset(lv, s665c5f6, ABISELECT(80,52), "S665C5.s665c5f6");
    test_class_info(&lv, &cd_S665C5);
    dp->~S665C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS665C5(Test_S665C5, "S665C5", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN6S665C5C1Ev();
extern void _ZN6S665C5D1Ev();
Name_Map name_map_S665C5[] = {
  NSPAIR(_ZN6S665C5C1Ev),
  NSPAIR(_ZN6S665C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI6S665C5[];
extern void _ZN6S665C5D1Ev();
extern void _ZN6S665C5D0Ev();
extern void _ZN6S665C52v6Ev();
extern void _ZN6S665C52v7Ev();
extern void _ZN6S665C52v8Ev();
extern void _ZN6S665C52v9Ev();
extern void _ZN6S665C53v10Ev();
extern void _ZN6S665C53v11Ev();
extern void _ZN6S665C53v12Ev();
extern void _ZN6S665C53v13Ev();
extern void _ZN6S665C53v14Ev();
extern void _ZN6S665C53v15Ev();
extern void _ZN6S665C53v16Ev();
extern void _ZN6S665C53v17Ev();
extern void _ZN6S665C53v18Ev();
extern void _ZN6S665C53v19Ev();
extern void _ZN6S665C53v20Ev();
extern void _ZN6S665C53v21Ev();
extern void _ZN6S665C53v22Ev();
extern void _ZN6S665C53v23Ev();
extern void _ZN6S665C53v24Ev();
extern void _ZN6S665C53v25Ev();
extern void _ZN6S665C53v26Ev();
extern void _ZN6S665C53v27Ev();
extern void _ZN6S665C53v28Ev();
extern void _ZN6S665C53v29Ev();
extern void _ZN6S665C53v30Ev();
extern void _ZN6S665C53v31Ev();
extern void _ZN6S665C53v32Ev();
extern void _ZN6S665C53v33Ev();
extern void _ZN6S665C53v34Ev();
extern void _ZN6S665C53v35Ev();
extern void _ZN6S665C53v36Ev();
extern void _ZN6S665C53v37Ev();
extern void _ZN6S665C53v38Ev();
extern void _ZN6S665C53v39Ev();
extern void _ZN6S665C53v40Ev();
extern void _ZN6S665C53v41Ev();
extern void _ZN6S665C53v42Ev();
extern void _ZN6S665C53v43Ev();
extern void _ZN6S665C53v44Ev();
extern void _ZN6S665C53v45Ev();
extern void _ZN6S665C53v46Ev();
extern void _ZN6S665C53v47Ev();
extern void _ZN6S665C53v48Ev();
extern void _ZN6S665C53v49Ev();
extern void _ZN6S665C53v50Ev();
extern void _ZN6S665C53v51Ev();
extern void _ZN6S665C53v52Ev();
extern void _ZN6S665C53v53Ev();
extern void _ZN6S665C53v54Ev();
extern void _ZN6S665C53v55Ev();
extern void _ZN6S665C53v56Ev();
extern void _ZN6S665C53v57Ev();
extern void _ZN6S665C53v58Ev();
extern void _ZN6S665C53v59Ev();
extern void _ZN6S665C53v60Ev();
extern void _ZN6S665C53v61Ev();
extern void _ZN6S665C53v62Ev();
extern void _ZN6S665C53v63Ev();
extern void _ZN6S665C53v64Ev();
extern void _ZN6S665C53v65Ev();
extern void _ZN6S665C53v66Ev();
extern void _ZN6S665C53v67Ev();
extern void _ZN6S665C53v68Ev();
extern void _ZN6S665C53v69Ev();
static  VTBL_ENTRY vtc_S665C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S665C5[0]),
  (VTBL_ENTRY)&_ZN6S665C5D1Ev,
  (VTBL_ENTRY)&_ZN6S665C5D0Ev,
  (VTBL_ENTRY)&_ZN6S665C52v6Ev,
  (VTBL_ENTRY)&_ZN6S665C52v7Ev,
  (VTBL_ENTRY)&_ZN6S665C52v8Ev,
  (VTBL_ENTRY)&_ZN6S665C52v9Ev,
  (VTBL_ENTRY)&_ZN6S665C53v10Ev,
  (VTBL_ENTRY)&_ZN6S665C53v11Ev,
  (VTBL_ENTRY)&_ZN6S665C53v12Ev,
  (VTBL_ENTRY)&_ZN6S665C53v13Ev,
  (VTBL_ENTRY)&_ZN6S665C53v14Ev,
  (VTBL_ENTRY)&_ZN6S665C53v15Ev,
  (VTBL_ENTRY)&_ZN6S665C53v16Ev,
  (VTBL_ENTRY)&_ZN6S665C53v17Ev,
  (VTBL_ENTRY)&_ZN6S665C53v18Ev,
  (VTBL_ENTRY)&_ZN6S665C53v19Ev,
  (VTBL_ENTRY)&_ZN6S665C53v20Ev,
  (VTBL_ENTRY)&_ZN6S665C53v21Ev,
  (VTBL_ENTRY)&_ZN6S665C53v22Ev,
  (VTBL_ENTRY)&_ZN6S665C53v23Ev,
  (VTBL_ENTRY)&_ZN6S665C53v24Ev,
  (VTBL_ENTRY)&_ZN6S665C53v25Ev,
  (VTBL_ENTRY)&_ZN6S665C53v26Ev,
  (VTBL_ENTRY)&_ZN6S665C53v27Ev,
  (VTBL_ENTRY)&_ZN6S665C53v28Ev,
  (VTBL_ENTRY)&_ZN6S665C53v29Ev,
  (VTBL_ENTRY)&_ZN6S665C53v30Ev,
  (VTBL_ENTRY)&_ZN6S665C53v31Ev,
  (VTBL_ENTRY)&_ZN6S665C53v32Ev,
  (VTBL_ENTRY)&_ZN6S665C53v33Ev,
  (VTBL_ENTRY)&_ZN6S665C53v34Ev,
  (VTBL_ENTRY)&_ZN6S665C53v35Ev,
  (VTBL_ENTRY)&_ZN6S665C53v36Ev,
  (VTBL_ENTRY)&_ZN6S665C53v37Ev,
  (VTBL_ENTRY)&_ZN6S665C53v38Ev,
  (VTBL_ENTRY)&_ZN6S665C53v39Ev,
  (VTBL_ENTRY)&_ZN6S665C53v40Ev,
  (VTBL_ENTRY)&_ZN6S665C53v41Ev,
  (VTBL_ENTRY)&_ZN6S665C53v42Ev,
  (VTBL_ENTRY)&_ZN6S665C53v43Ev,
  (VTBL_ENTRY)&_ZN6S665C53v44Ev,
  (VTBL_ENTRY)&_ZN6S665C53v45Ev,
  (VTBL_ENTRY)&_ZN6S665C53v46Ev,
  (VTBL_ENTRY)&_ZN6S665C53v47Ev,
  (VTBL_ENTRY)&_ZN6S665C53v48Ev,
  (VTBL_ENTRY)&_ZN6S665C53v49Ev,
  (VTBL_ENTRY)&_ZN6S665C53v50Ev,
  (VTBL_ENTRY)&_ZN6S665C53v51Ev,
  (VTBL_ENTRY)&_ZN6S665C53v52Ev,
  (VTBL_ENTRY)&_ZN6S665C53v53Ev,
  (VTBL_ENTRY)&_ZN6S665C53v54Ev,
  (VTBL_ENTRY)&_ZN6S665C53v55Ev,
  (VTBL_ENTRY)&_ZN6S665C53v56Ev,
  (VTBL_ENTRY)&_ZN6S665C53v57Ev,
  (VTBL_ENTRY)&_ZN6S665C53v58Ev,
  (VTBL_ENTRY)&_ZN6S665C53v59Ev,
  (VTBL_ENTRY)&_ZN6S665C53v60Ev,
  (VTBL_ENTRY)&_ZN6S665C53v61Ev,
  (VTBL_ENTRY)&_ZN6S665C53v62Ev,
  (VTBL_ENTRY)&_ZN6S665C53v63Ev,
  (VTBL_ENTRY)&_ZN6S665C53v64Ev,
  (VTBL_ENTRY)&_ZN6S665C53v65Ev,
  (VTBL_ENTRY)&_ZN6S665C53v66Ev,
  (VTBL_ENTRY)&_ZN6S665C53v67Ev,
  (VTBL_ENTRY)&_ZN6S665C53v68Ev,
  (VTBL_ENTRY)&_ZN6S665C53v69Ev,
};
extern VTBL_ENTRY _ZTI6S665C5[];
extern  VTBL_ENTRY _ZTV6S665C5[];
Class_Descriptor cd_S665C5 = {  "S665C5", // class name
  0,0,//no base classes
  &(vtc_S665C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI6S665C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV6S665C5),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  S665C4  : S665C5 {
  unsigned int s665c4f0:1;
  unsigned int s665c4f1:1;
  unsigned int s665c4f2:1;
  unsigned int s665c4f3:1;
  unsigned int s665c4f4:1;
  unsigned int s665c4f5:1;
  unsigned int s665c4f6:1;
  ::S3625C32 s665c4f7;
  virtual  ~S665C4(); // _ZN6S665C4D1Ev
  virtual void  v70(); // _ZN6S665C43v70Ev
  virtual void  v71(); // _ZN6S665C43v71Ev
  virtual void  v72(); // _ZN6S665C43v72Ev
  virtual void  v73(); // _ZN6S665C43v73Ev
  virtual void  v74(); // _ZN6S665C43v74Ev
  virtual void  v75(); // _ZN6S665C43v75Ev
  virtual void  v76(); // _ZN6S665C43v76Ev
  virtual void  v77(); // _ZN6S665C43v77Ev
  virtual void  v78(); // _ZN6S665C43v78Ev
  virtual void  v79(); // _ZN6S665C43v79Ev
  virtual void  v80(); // _ZN6S665C43v80Ev
  virtual void  v81(); // _ZN6S665C43v81Ev
  virtual void  v82(); // _ZN6S665C43v82Ev
  virtual void  v83(); // _ZN6S665C43v83Ev
  virtual void  v84(); // _ZN6S665C43v84Ev
  virtual void  v85(); // _ZN6S665C43v85Ev
  virtual void  v86(); // _ZN6S665C43v86Ev
  virtual void  v87(); // _ZN6S665C43v87Ev
  virtual void  v88(); // _ZN6S665C43v88Ev
  virtual void  v89(); // _ZN6S665C43v89Ev
  S665C4(); // tgen
};
//SIG(-1 S665C4) C1{ BC2{ 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 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 Fi FL Fp[4] Fi[2] Fp FC3{ m Fi[2]} Fp[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 FC4{ m}}


 S665C4 ::~S665C4(){ note_dtor("S665C4", this);}
void  S665C4 ::v70(){vfunc_called(this, "_ZN6S665C43v70Ev");}
void  S665C4 ::v71(){vfunc_called(this, "_ZN6S665C43v71Ev");}
void  S665C4 ::v72(){vfunc_called(this, "_ZN6S665C43v72Ev");}
void  S665C4 ::v73(){vfunc_called(this, "_ZN6S665C43v73Ev");}
void  S665C4 ::v74(){vfunc_called(this, "_ZN6S665C43v74Ev");}
void  S665C4 ::v75(){vfunc_called(this, "_ZN6S665C43v75Ev");}
void  S665C4 ::v76(){vfunc_called(this, "_ZN6S665C43v76Ev");}
void  S665C4 ::v77(){vfunc_called(this, "_ZN6S665C43v77Ev");}
void  S665C4 ::v78(){vfunc_called(this, "_ZN6S665C43v78Ev");}
void  S665C4 ::v79(){vfunc_called(this, "_ZN6S665C43v79Ev");}
void  S665C4 ::v80(){vfunc_called(this, "_ZN6S665C43v80Ev");}
void  S665C4 ::v81(){vfunc_called(this, "_ZN6S665C43v81Ev");}
void  S665C4 ::v82(){vfunc_called(this, "_ZN6S665C43v82Ev");}
void  S665C4 ::v83(){vfunc_called(this, "_ZN6S665C43v83Ev");}
void  S665C4 ::v84(){vfunc_called(this, "_ZN6S665C43v84Ev");}
void  S665C4 ::v85(){vfunc_called(this, "_ZN6S665C43v85Ev");}
void  S665C4 ::v86(){vfunc_called(this, "_ZN6S665C43v86Ev");}
void  S665C4 ::v87(){vfunc_called(this, "_ZN6S665C43v87Ev");}
void  S665C4 ::v88(){vfunc_called(this, "_ZN6S665C43v88Ev");}
void  S665C4 ::v89(){vfunc_called(this, "_ZN6S665C43v89Ev");}
S665C4 ::S665C4(){ note_ctor("S665C4", this);} // tgen

static void Test_S665C4()
{
  extern Class_Descriptor cd_S665C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(14,17)];
    init_test(&cd_S665C4, buf);
    S665C4 *dp, &lv = *(dp=new (buf) S665C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(104,64), "sizeof(S665C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S665C4)");
    check_base_class_offset(lv, (S665C5*), 0, "S665C4");
    set_bf_and_test(lv, s665c4f0, ABISELECT(96,60), 0, 1, 1, "S665C4");
    set_bf_and_test(lv, s665c4f1, ABISELECT(96,60), 1, 1, 1, "S665C4");
    set_bf_and_test(lv, s665c4f2, ABISELECT(96,60), 2, 1, 1, "S665C4");
    set_bf_and_test(lv, s665c4f3, ABISELECT(96,60), 3, 1, 1, "S665C4");
    set_bf_and_test(lv, s665c4f4, ABISELECT(96,60), 4, 1, 1, "S665C4");
    set_bf_and_test(lv, s665c4f5, ABISELECT(96,60), 5, 1, 1, "S665C4");
    set_bf_and_test(lv, s665c4f6, ABISELECT(96,60), 6, 1, 1, "S665C4");
    check_field_offset(lv, s665c4f7, ABISELECT(97,61), "S665C4.s665c4f7");
    test_class_info(&lv, &cd_S665C4);
    dp->~S665C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS665C4(Test_S665C4, "S665C4", ABISELECT(104,64));

#else // __cplusplus

extern void _ZN6S665C4C1Ev();
extern void _ZN6S665C4D1Ev();
Name_Map name_map_S665C4[] = {
  NSPAIR(_ZN6S665C4C1Ev),
  NSPAIR(_ZN6S665C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S665C5;
extern VTBL_ENTRY _ZTI6S665C5[];
extern  VTBL_ENTRY _ZTV6S665C5[];
static Base_Class bases_S665C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S665C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI6S665C4[];
extern void _ZN6S665C4D1Ev();
extern void _ZN6S665C4D0Ev();
extern void _ZN6S665C52v6Ev();
extern void _ZN6S665C52v7Ev();
extern void _ZN6S665C52v8Ev();
extern void _ZN6S665C52v9Ev();
extern void _ZN6S665C53v10Ev();
extern void _ZN6S665C53v11Ev();
extern void _ZN6S665C53v12Ev();
extern void _ZN6S665C53v13Ev();
extern void _ZN6S665C53v14Ev();
extern void _ZN6S665C53v15Ev();
extern void _ZN6S665C53v16Ev();
extern void _ZN6S665C53v17Ev();
extern void _ZN6S665C53v18Ev();
extern void _ZN6S665C53v19Ev();
extern void _ZN6S665C53v20Ev();
extern void _ZN6S665C53v21Ev();
extern void _ZN6S665C53v22Ev();
extern void _ZN6S665C53v23Ev();
extern void _ZN6S665C53v24Ev();
extern void _ZN6S665C53v25Ev();
extern void _ZN6S665C53v26Ev();
extern void _ZN6S665C53v27Ev();
extern void _ZN6S665C53v28Ev();
extern void _ZN6S665C53v29Ev();
extern void _ZN6S665C53v30Ev();
extern void _ZN6S665C53v31Ev();
extern void _ZN6S665C53v32Ev();
extern void _ZN6S665C53v33Ev();
extern void _ZN6S665C53v34Ev();
extern void _ZN6S665C53v35Ev();
extern void _ZN6S665C53v36Ev();
extern void _ZN6S665C53v37Ev();
extern void _ZN6S665C53v38Ev();
extern void _ZN6S665C53v39Ev();
extern void _ZN6S665C53v40Ev();
extern void _ZN6S665C53v41Ev();
extern void _ZN6S665C53v42Ev();
extern void _ZN6S665C53v43Ev();
extern void _ZN6S665C53v44Ev();
extern void _ZN6S665C53v45Ev();
extern void _ZN6S665C53v46Ev();
extern void _ZN6S665C53v47Ev();
extern void _ZN6S665C53v48Ev();
extern void _ZN6S665C53v49Ev();
extern void _ZN6S665C53v50Ev();
extern void _ZN6S665C53v51Ev();
extern void _ZN6S665C53v52Ev();
extern void _ZN6S665C53v53Ev();
extern void _ZN6S665C53v54Ev();
extern void _ZN6S665C53v55Ev();
extern void _ZN6S665C53v56Ev();
extern void _ZN6S665C53v57Ev();
extern void _ZN6S665C53v58Ev();
extern void _ZN6S665C53v59Ev();
extern void _ZN6S665C53v60Ev();
extern void _ZN6S665C53v61Ev();
extern void _ZN6S665C53v62Ev();
extern void _ZN6S665C53v63Ev();
extern void _ZN6S665C53v64Ev();
extern void _ZN6S665C53v65Ev();
extern void _ZN6S665C53v66Ev();
extern void _ZN6S665C53v67Ev();
extern void _ZN6S665C53v68Ev();
extern void _ZN6S665C53v69Ev();
extern void _ZN6S665C43v70Ev();
extern void _ZN6S665C43v71Ev();
extern void _ZN6S665C43v72Ev();
extern void _ZN6S665C43v73Ev();
extern void _ZN6S665C43v74Ev();
extern void _ZN6S665C43v75Ev();
extern void _ZN6S665C43v76Ev();
extern void _ZN6S665C43v77Ev();
extern void _ZN6S665C43v78Ev();
extern void _ZN6S665C43v79Ev();
extern void _ZN6S665C43v80Ev();
extern void _ZN6S665C43v81Ev();
extern void _ZN6S665C43v82Ev();
extern void _ZN6S665C43v83Ev();
extern void _ZN6S665C43v84Ev();
extern void _ZN6S665C43v85Ev();
extern void _ZN6S665C43v86Ev();
extern void _ZN6S665C43v87Ev();
extern void _ZN6S665C43v88Ev();
extern void _ZN6S665C43v89Ev();
static  VTBL_ENTRY vtc_S665C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S665C4[0]),
  (VTBL_ENTRY)&_ZN6S665C4D1Ev,
  (VTBL_ENTRY)&_ZN6S665C4D0Ev,
  (VTBL_ENTRY)&_ZN6S665C52v6Ev,
  (VTBL_ENTRY)&_ZN6S665C52v7Ev,
  (VTBL_ENTRY)&_ZN6S665C52v8Ev,
  (VTBL_ENTRY)&_ZN6S665C52v9Ev,
  (VTBL_ENTRY)&_ZN6S665C53v10Ev,
  (VTBL_ENTRY)&_ZN6S665C53v11Ev,
  (VTBL_ENTRY)&_ZN6S665C53v12Ev,
  (VTBL_ENTRY)&_ZN6S665C53v13Ev,
  (VTBL_ENTRY)&_ZN6S665C53v14Ev,
  (VTBL_ENTRY)&_ZN6S665C53v15Ev,
  (VTBL_ENTRY)&_ZN6S665C53v16Ev,
  (VTBL_ENTRY)&_ZN6S665C53v17Ev,
  (VTBL_ENTRY)&_ZN6S665C53v18Ev,
  (VTBL_ENTRY)&_ZN6S665C53v19Ev,
  (VTBL_ENTRY)&_ZN6S665C53v20Ev,
  (VTBL_ENTRY)&_ZN6S665C53v21Ev,
  (VTBL_ENTRY)&_ZN6S665C53v22Ev,
  (VTBL_ENTRY)&_ZN6S665C53v23Ev,
  (VTBL_ENTRY)&_ZN6S665C53v24Ev,
  (VTBL_ENTRY)&_ZN6S665C53v25Ev,
  (VTBL_ENTRY)&_ZN6S665C53v26Ev,
  (VTBL_ENTRY)&_ZN6S665C53v27Ev,
  (VTBL_ENTRY)&_ZN6S665C53v28Ev,
  (VTBL_ENTRY)&_ZN6S665C53v29Ev,
  (VTBL_ENTRY)&_ZN6S665C53v30Ev,
  (VTBL_ENTRY)&_ZN6S665C53v31Ev,
  (VTBL_ENTRY)&_ZN6S665C53v32Ev,
  (VTBL_ENTRY)&_ZN6S665C53v33Ev,
  (VTBL_ENTRY)&_ZN6S665C53v34Ev,
  (VTBL_ENTRY)&_ZN6S665C53v35Ev,
  (VTBL_ENTRY)&_ZN6S665C53v36Ev,
  (VTBL_ENTRY)&_ZN6S665C53v37Ev,
  (VTBL_ENTRY)&_ZN6S665C53v38Ev,
  (VTBL_ENTRY)&_ZN6S665C53v39Ev,
  (VTBL_ENTRY)&_ZN6S665C53v40Ev,
  (VTBL_ENTRY)&_ZN6S665C53v41Ev,
  (VTBL_ENTRY)&_ZN6S665C53v42Ev,
  (VTBL_ENTRY)&_ZN6S665C53v43Ev,
  (VTBL_ENTRY)&_ZN6S665C53v44Ev,
  (VTBL_ENTRY)&_ZN6S665C53v45Ev,
  (VTBL_ENTRY)&_ZN6S665C53v46Ev,
  (VTBL_ENTRY)&_ZN6S665C53v47Ev,
  (VTBL_ENTRY)&_ZN6S665C53v48Ev,
  (VTBL_ENTRY)&_ZN6S665C53v49Ev,
  (VTBL_ENTRY)&_ZN6S665C53v50Ev,
  (VTBL_ENTRY)&_ZN6S665C53v51Ev,
  (VTBL_ENTRY)&_ZN6S665C53v52Ev,
  (VTBL_ENTRY)&_ZN6S665C53v53Ev,
  (VTBL_ENTRY)&_ZN6S665C53v54Ev,
  (VTBL_ENTRY)&_ZN6S665C53v55Ev,
  (VTBL_ENTRY)&_ZN6S665C53v56Ev,
  (VTBL_ENTRY)&_ZN6S665C53v57Ev,
  (VTBL_ENTRY)&_ZN6S665C53v58Ev,
  (VTBL_ENTRY)&_ZN6S665C53v59Ev,
  (VTBL_ENTRY)&_ZN6S665C53v60Ev,
  (VTBL_ENTRY)&_ZN6S665C53v61Ev,
  (VTBL_ENTRY)&_ZN6S665C53v62Ev,
  (VTBL_ENTRY)&_ZN6S665C53v63Ev,
  (VTBL_ENTRY)&_ZN6S665C53v64Ev,
  (VTBL_ENTRY)&_ZN6S665C53v65Ev,
  (VTBL_ENTRY)&_ZN6S665C53v66Ev,
  (VTBL_ENTRY)&_ZN6S665C53v67Ev,
  (VTBL_ENTRY)&_ZN6S665C53v68Ev,
  (VTBL_ENTRY)&_ZN6S665C53v69Ev,
  (VTBL_ENTRY)&_ZN6S665C43v70Ev,
  (VTBL_ENTRY)&_ZN6S665C43v71Ev,
  (VTBL_ENTRY)&_ZN6S665C43v72Ev,
  (VTBL_ENTRY)&_ZN6S665C43v73Ev,
  (VTBL_ENTRY)&_ZN6S665C43v74Ev,
  (VTBL_ENTRY)&_ZN6S665C43v75Ev,
  (VTBL_ENTRY)&_ZN6S665C43v76Ev,
  (VTBL_ENTRY)&_ZN6S665C43v77Ev,
  (VTBL_ENTRY)&_ZN6S665C43v78Ev,
  (VTBL_ENTRY)&_ZN6S665C43v79Ev,
  (VTBL_ENTRY)&_ZN6S665C43v80Ev,
  (VTBL_ENTRY)&_ZN6S665C43v81Ev,
  (VTBL_ENTRY)&_ZN6S665C43v82Ev,
  (VTBL_ENTRY)&_ZN6S665C43v83Ev,
  (VTBL_ENTRY)&_ZN6S665C43v84Ev,
  (VTBL_ENTRY)&_ZN6S665C43v85Ev,
  (VTBL_ENTRY)&_ZN6S665C43v86Ev,
  (VTBL_ENTRY)&_ZN6S665C43v87Ev,
  (VTBL_ENTRY)&_ZN6S665C43v88Ev,
  (VTBL_ENTRY)&_ZN6S665C43v89Ev,
};
extern VTBL_ENTRY _ZTI6S665C4[];
extern  VTBL_ENTRY _ZTV6S665C4[];
Class_Descriptor cd_S665C4 = {  "S665C4", // class name
  bases_S665C4, 1,
  &(vtc_S665C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(104,64), // object size
  NSPAIRA(_ZTI6S665C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S665C4),88, //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  S665C3  : S665C4 {
  virtual  ~S665C3(); // _ZN6S665C3D1Ev
  virtual void  v90(); // _ZN6S665C33v90Ev
  virtual void  v91(); // _ZN6S665C33v91Ev
  S665C3(); // tgen
};
//SIG(-1 S665C3) C1{ BC2{ BC3{ vd 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 Fi FL Fp[4] Fi[2] Fp FC4{ m Fi[2]} Fp[2]} vd v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 FC5{ m}} vd v1 v2}


 S665C3 ::~S665C3(){ note_dtor("S665C3", this);}
void  S665C3 ::v90(){vfunc_called(this, "_ZN6S665C33v90Ev");}
void  S665C3 ::v91(){vfunc_called(this, "_ZN6S665C33v91Ev");}
S665C3 ::S665C3(){ note_ctor("S665C3", this);} // tgen

static void Test_S665C3()
{
  extern Class_Descriptor cd_S665C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(14,17)];
    init_test(&cd_S665C3, buf);
    S665C3 *dp, &lv = *(dp=new (buf) S665C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(104,64), "sizeof(S665C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S665C3)");
    check_base_class_offset(lv, (S665C5*)(S665C4*), 0, "S665C3");
    check_base_class_offset(lv, (S665C4*), 0, "S665C3");
    test_class_info(&lv, &cd_S665C3);
    dp->~S665C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS665C3(Test_S665C3, "S665C3", ABISELECT(104,64));

#else // __cplusplus

extern void _ZN6S665C3C1Ev();
extern void _ZN6S665C3D1Ev();
Name_Map name_map_S665C3[] = {
  NSPAIR(_ZN6S665C3C1Ev),
  NSPAIR(_ZN6S665C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S665C5;
extern VTBL_ENTRY _ZTI6S665C5[];
extern  VTBL_ENTRY _ZTV6S665C5[];
extern Class_Descriptor cd_S665C4;
extern VTBL_ENTRY _ZTI6S665C4[];
extern  VTBL_ENTRY _ZTV6S665C4[];
static Base_Class bases_S665C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S665C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S665C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S665C3[];
extern void _ZN6S665C3D1Ev();
extern void _ZN6S665C3D0Ev();
extern void _ZN6S665C52v6Ev();
extern void _ZN6S665C52v7Ev();
extern void _ZN6S665C52v8Ev();
extern void _ZN6S665C52v9Ev();
extern void _ZN6S665C53v10Ev();
extern void _ZN6S665C53v11Ev();
extern void _ZN6S665C53v12Ev();
extern void _ZN6S665C53v13Ev();
extern void _ZN6S665C53v14Ev();
extern void _ZN6S665C53v15Ev();
extern void _ZN6S665C53v16Ev();
extern void _ZN6S665C53v17Ev();
extern void _ZN6S665C53v18Ev();
extern void _ZN6S665C53v19Ev();
extern void _ZN6S665C53v20Ev();
extern void _ZN6S665C53v21Ev();
extern void _ZN6S665C53v22Ev();
extern void _ZN6S665C53v23Ev();
extern void _ZN6S665C53v24Ev();
extern void _ZN6S665C53v25Ev();
extern void _ZN6S665C53v26Ev();
extern void _ZN6S665C53v27Ev();
extern void _ZN6S665C53v28Ev();
extern void _ZN6S665C53v29Ev();
extern void _ZN6S665C53v30Ev();
extern void _ZN6S665C53v31Ev();
extern void _ZN6S665C53v32Ev();
extern void _ZN6S665C53v33Ev();
extern void _ZN6S665C53v34Ev();
extern void _ZN6S665C53v35Ev();
extern void _ZN6S665C53v36Ev();
extern void _ZN6S665C53v37Ev();
extern void _ZN6S665C53v38Ev();
extern void _ZN6S665C53v39Ev();
extern void _ZN6S665C53v40Ev();
extern void _ZN6S665C53v41Ev();
extern void _ZN6S665C53v42Ev();
extern void _ZN6S665C53v43Ev();
extern void _ZN6S665C53v44Ev();
extern void _ZN6S665C53v45Ev();
extern void _ZN6S665C53v46Ev();
extern void _ZN6S665C53v47Ev();
extern void _ZN6S665C53v48Ev();
extern void _ZN6S665C53v49Ev();
extern void _ZN6S665C53v50Ev();
extern void _ZN6S665C53v51Ev();
extern void _ZN6S665C53v52Ev();
extern void _ZN6S665C53v53Ev();
extern void _ZN6S665C53v54Ev();
extern void _ZN6S665C53v55Ev();
extern void _ZN6S665C53v56Ev();
extern void _ZN6S665C53v57Ev();
extern void _ZN6S665C53v58Ev();
extern void _ZN6S665C53v59Ev();
extern void _ZN6S665C53v60Ev();
extern void _ZN6S665C53v61Ev();
extern void _ZN6S665C53v62Ev();
extern void _ZN6S665C53v63Ev();
extern void _ZN6S665C53v64Ev();
extern void _ZN6S665C53v65Ev();
extern void _ZN6S665C53v66Ev();
extern void _ZN6S665C53v67Ev();
extern void _ZN6S665C53v68Ev();
extern void _ZN6S665C53v69Ev();
extern void _ZN6S665C43v70Ev();
extern void _ZN6S665C43v71Ev();
extern void _ZN6S665C43v72Ev();
extern void _ZN6S665C43v73Ev();
extern void _ZN6S665C43v74Ev();
extern void _ZN6S665C43v75Ev();
extern void _ZN6S665C43v76Ev();
extern void _ZN6S665C43v77Ev();
extern void _ZN6S665C43v78Ev();
extern void _ZN6S665C43v79Ev();
extern void _ZN6S665C43v80Ev();
extern void _ZN6S665C43v81Ev();
extern void _ZN6S665C43v82Ev();
extern void _ZN6S665C43v83Ev();
extern void _ZN6S665C43v84Ev();
extern void _ZN6S665C43v85Ev();
extern void _ZN6S665C43v86Ev();
extern void _ZN6S665C43v87Ev();
extern void _ZN6S665C43v88Ev();
extern void _ZN6S665C43v89Ev();
extern void _ZN6S665C33v90Ev();
extern void _ZN6S665C33v91Ev();
static  VTBL_ENTRY vtc_S665C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S665C3[0]),
  (VTBL_ENTRY)&_ZN6S665C3D1Ev,
  (VTBL_ENTRY)&_ZN6S665C3D0Ev,
  (VTBL_ENTRY)&_ZN6S665C52v6Ev,
  (VTBL_ENTRY)&_ZN6S665C52v7Ev,
  (VTBL_ENTRY)&_ZN6S665C52v8Ev,
  (VTBL_ENTRY)&_ZN6S665C52v9Ev,
  (VTBL_ENTRY)&_ZN6S665C53v10Ev,
  (VTBL_ENTRY)&_ZN6S665C53v11Ev,
  (VTBL_ENTRY)&_ZN6S665C53v12Ev,
  (VTBL_ENTRY)&_ZN6S665C53v13Ev,
  (VTBL_ENTRY)&_ZN6S665C53v14Ev,
  (VTBL_ENTRY)&_ZN6S665C53v15Ev,
  (VTBL_ENTRY)&_ZN6S665C53v16Ev,
  (VTBL_ENTRY)&_ZN6S665C53v17Ev,
  (VTBL_ENTRY)&_ZN6S665C53v18Ev,
  (VTBL_ENTRY)&_ZN6S665C53v19Ev,
  (VTBL_ENTRY)&_ZN6S665C53v20Ev,
  (VTBL_ENTRY)&_ZN6S665C53v21Ev,
  (VTBL_ENTRY)&_ZN6S665C53v22Ev,
  (VTBL_ENTRY)&_ZN6S665C53v23Ev,
  (VTBL_ENTRY)&_ZN6S665C53v24Ev,
  (VTBL_ENTRY)&_ZN6S665C53v25Ev,
  (VTBL_ENTRY)&_ZN6S665C53v26Ev,
  (VTBL_ENTRY)&_ZN6S665C53v27Ev,
  (VTBL_ENTRY)&_ZN6S665C53v28Ev,
  (VTBL_ENTRY)&_ZN6S665C53v29Ev,
  (VTBL_ENTRY)&_ZN6S665C53v30Ev,
  (VTBL_ENTRY)&_ZN6S665C53v31Ev,
  (VTBL_ENTRY)&_ZN6S665C53v32Ev,
  (VTBL_ENTRY)&_ZN6S665C53v33Ev,
  (VTBL_ENTRY)&_ZN6S665C53v34Ev,
  (VTBL_ENTRY)&_ZN6S665C53v35Ev,
  (VTBL_ENTRY)&_ZN6S665C53v36Ev,
  (VTBL_ENTRY)&_ZN6S665C53v37Ev,
  (VTBL_ENTRY)&_ZN6S665C53v38Ev,
  (VTBL_ENTRY)&_ZN6S665C53v39Ev,
  (VTBL_ENTRY)&_ZN6S665C53v40Ev,
  (VTBL_ENTRY)&_ZN6S665C53v41Ev,
  (VTBL_ENTRY)&_ZN6S665C53v42Ev,
  (VTBL_ENTRY)&_ZN6S665C53v43Ev,
  (VTBL_ENTRY)&_ZN6S665C53v44Ev,
  (VTBL_ENTRY)&_ZN6S665C53v45Ev,
  (VTBL_ENTRY)&_ZN6S665C53v46Ev,
  (VTBL_ENTRY)&_ZN6S665C53v47Ev,
  (VTBL_ENTRY)&_ZN6S665C53v48Ev,
  (VTBL_ENTRY)&_ZN6S665C53v49Ev,
  (VTBL_ENTRY)&_ZN6S665C53v50Ev,
  (VTBL_ENTRY)&_ZN6S665C53v51Ev,
  (VTBL_ENTRY)&_ZN6S665C53v52Ev,
  (VTBL_ENTRY)&_ZN6S665C53v53Ev,
  (VTBL_ENTRY)&_ZN6S665C53v54Ev,
  (VTBL_ENTRY)&_ZN6S665C53v55Ev,
  (VTBL_ENTRY)&_ZN6S665C53v56Ev,
  (VTBL_ENTRY)&_ZN6S665C53v57Ev,
  (VTBL_ENTRY)&_ZN6S665C53v58Ev,
  (VTBL_ENTRY)&_ZN6S665C53v59Ev,
  (VTBL_ENTRY)&_ZN6S665C53v60Ev,
  (VTBL_ENTRY)&_ZN6S665C53v61Ev,
  (VTBL_ENTRY)&_ZN6S665C53v62Ev,
  (VTBL_ENTRY)&_ZN6S665C53v63Ev,
  (VTBL_ENTRY)&_ZN6S665C53v64Ev,
  (VTBL_ENTRY)&_ZN6S665C53v65Ev,
  (VTBL_ENTRY)&_ZN6S665C53v66Ev,
  (VTBL_ENTRY)&_ZN6S665C53v67Ev,
  (VTBL_ENTRY)&_ZN6S665C53v68Ev,
  (VTBL_ENTRY)&_ZN6S665C53v69Ev,
  (VTBL_ENTRY)&_ZN6S665C43v70Ev,
  (VTBL_ENTRY)&_ZN6S665C43v71Ev,
  (VTBL_ENTRY)&_ZN6S665C43v72Ev,
  (VTBL_ENTRY)&_ZN6S665C43v73Ev,
  (VTBL_ENTRY)&_ZN6S665C43v74Ev,
  (VTBL_ENTRY)&_ZN6S665C43v75Ev,
  (VTBL_ENTRY)&_ZN6S665C43v76Ev,
  (VTBL_ENTRY)&_ZN6S665C43v77Ev,
  (VTBL_ENTRY)&_ZN6S665C43v78Ev,
  (VTBL_ENTRY)&_ZN6S665C43v79Ev,
  (VTBL_ENTRY)&_ZN6S665C43v80Ev,
  (VTBL_ENTRY)&_ZN6S665C43v81Ev,
  (VTBL_ENTRY)&_ZN6S665C43v82Ev,
  (VTBL_ENTRY)&_ZN6S665C43v83Ev,
  (VTBL_ENTRY)&_ZN6S665C43v84Ev,
  (VTBL_ENTRY)&_ZN6S665C43v85Ev,
  (VTBL_ENTRY)&_ZN6S665C43v86Ev,
  (VTBL_ENTRY)&_ZN6S665C43v87Ev,
  (VTBL_ENTRY)&_ZN6S665C43v88Ev,
  (VTBL_ENTRY)&_ZN6S665C43v89Ev,
  (VTBL_ENTRY)&_ZN6S665C33v90Ev,
  (VTBL_ENTRY)&_ZN6S665C33v91Ev,
};
extern VTBL_ENTRY _ZTI6S665C3[];
extern  VTBL_ENTRY _ZTV6S665C3[];
Class_Descriptor cd_S665C3 = {  "S665C3", // class name
  bases_S665C3, 2,
  &(vtc_S665C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(104,64), // object size
  NSPAIRA(_ZTI6S665C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S665C3),90, //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  S665C2  : S665C3 {
  unsigned int s665c2f0:1;
  unsigned int s665c2f1:1;
  unsigned int s665c2f2:1;
  unsigned int s665c2f3:1;
  unsigned int s665c2f4:1;
  unsigned int s665c2f5:1;
  unsigned int s665c2f6:1;
  unsigned int s665c2f7:1;
  ::S1292C12 s665c2f8;
  ::S1289C10_nt s665c2f9;
  virtual  ~S665C2(); // _ZN6S665C2D1Ev
  virtual void  v92(); // _ZN6S665C23v92Ev
  virtual void  v93(); // _ZN6S665C23v93Ev
  virtual void  v94(); // _ZN6S665C23v94Ev
  S665C2(); // tgen
};
//SIG(-1 S665C2) C1{ BC2{ BC3{ BC4{ vd 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 Fi FL Fp[4] Fi[2] Fp FC5{ m Fi[2]} Fp[2]} vd v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 FC6{ m}} vd v88 v89} vd v1 v2 v3 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 FC7{ BC8{ m Fc[4] FC9{ BC10{ BC11{ m Fp Fi[2]}}} Fi[2]} Fp} FC12{ BC8 Fp}}


 S665C2 ::~S665C2(){ note_dtor("S665C2", this);}
void  S665C2 ::v92(){vfunc_called(this, "_ZN6S665C23v92Ev");}
void  S665C2 ::v93(){vfunc_called(this, "_ZN6S665C23v93Ev");}
void  S665C2 ::v94(){vfunc_called(this, "_ZN6S665C23v94Ev");}
S665C2 ::S665C2(){ note_ctor("S665C2", this);} // tgen

static void Test_S665C2()
{
  extern Class_Descriptor cd_S665C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(24,31)];
    init_test(&cd_S665C2, buf);
    S665C2 *dp, &lv = *(dp=new (buf) S665C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(184,120), "sizeof(S665C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S665C2)");
    check_base_class_offset(lv, (S665C5*)(S665C4*)(S665C3*), 0, "S665C2");
    check_base_class_offset(lv, (S665C4*)(S665C3*), 0, "S665C2");
    check_base_class_offset(lv, (S665C3*), 0, "S665C2");
    set_bf_and_test(lv, s665c2f0, ABISELECT(98,62), 0, 1, 1, "S665C2");
    set_bf_and_test(lv, s665c2f1, ABISELECT(98,62), 1, 1, 1, "S665C2");
    set_bf_and_test(lv, s665c2f2, ABISELECT(98,62), 2, 1, 1, "S665C2");
    set_bf_and_test(lv, s665c2f3, ABISELECT(98,62), 3, 1, 1, "S665C2");
    set_bf_and_test(lv, s665c2f4, ABISELECT(98,62), 4, 1, 1, "S665C2");
    set_bf_and_test(lv, s665c2f5, ABISELECT(98,62), 5, 1, 1, "S665C2");
    set_bf_and_test(lv, s665c2f6, ABISELECT(98,62), 6, 1, 1, "S665C2");
    set_bf_and_test(lv, s665c2f7, ABISELECT(98,62), 7, 1, 1, "S665C2");
    check_field_offset(lv, s665c2f8, ABISELECT(104,64), "S665C2.s665c2f8");
    check_field_offset(lv, s665c2f9, ABISELECT(144,92), "S665C2.s665c2f9");
    test_class_info(&lv, &cd_S665C2);
    dp->~S665C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS665C2(Test_S665C2, "S665C2", ABISELECT(184,120));

#else // __cplusplus

extern void _ZN6S665C2C1Ev();
extern void _ZN6S665C2D1Ev();
Name_Map name_map_S665C2[] = {
  NSPAIR(_ZN6S665C2C1Ev),
  NSPAIR(_ZN6S665C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S665C5;
extern VTBL_ENTRY _ZTI6S665C5[];
extern  VTBL_ENTRY _ZTV6S665C5[];
extern Class_Descriptor cd_S665C4;
extern VTBL_ENTRY _ZTI6S665C4[];
extern  VTBL_ENTRY _ZTV6S665C4[];
extern Class_Descriptor cd_S665C3;
extern VTBL_ENTRY _ZTI6S665C3[];
extern  VTBL_ENTRY _ZTV6S665C3[];
static Base_Class bases_S665C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S665C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S665C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S665C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S665C2[];
extern void _ZN6S665C2D1Ev();
extern void _ZN6S665C2D0Ev();
extern void _ZN6S665C52v6Ev();
extern void _ZN6S665C52v7Ev();
extern void _ZN6S665C52v8Ev();
extern void _ZN6S665C52v9Ev();
extern void _ZN6S665C53v10Ev();
extern void _ZN6S665C53v11Ev();
extern void _ZN6S665C53v12Ev();
extern void _ZN6S665C53v13Ev();
extern void _ZN6S665C53v14Ev();
extern void _ZN6S665C53v15Ev();
extern void _ZN6S665C53v16Ev();
extern void _ZN6S665C53v17Ev();
extern void _ZN6S665C53v18Ev();
extern void _ZN6S665C53v19Ev();
extern void _ZN6S665C53v20Ev();
extern void _ZN6S665C53v21Ev();
extern void _ZN6S665C53v22Ev();
extern void _ZN6S665C53v23Ev();
extern void _ZN6S665C53v24Ev();
extern void _ZN6S665C53v25Ev();
extern void _ZN6S665C53v26Ev();
extern void _ZN6S665C53v27Ev();
extern void _ZN6S665C53v28Ev();
extern void _ZN6S665C53v29Ev();
extern void _ZN6S665C53v30Ev();
extern void _ZN6S665C53v31Ev();
extern void _ZN6S665C53v32Ev();
extern void _ZN6S665C53v33Ev();
extern void _ZN6S665C53v34Ev();
extern void _ZN6S665C53v35Ev();
extern void _ZN6S665C53v36Ev();
extern void _ZN6S665C53v37Ev();
extern void _ZN6S665C53v38Ev();
extern void _ZN6S665C53v39Ev();
extern void _ZN6S665C53v40Ev();
extern void _ZN6S665C53v41Ev();
extern void _ZN6S665C53v42Ev();
extern void _ZN6S665C53v43Ev();
extern void _ZN6S665C53v44Ev();
extern void _ZN6S665C53v45Ev();
extern void _ZN6S665C53v46Ev();
extern void _ZN6S665C53v47Ev();
extern void _ZN6S665C53v48Ev();
extern void _ZN6S665C53v49Ev();
extern void _ZN6S665C53v50Ev();
extern void _ZN6S665C53v51Ev();
extern void _ZN6S665C53v52Ev();
extern void _ZN6S665C53v53Ev();
extern void _ZN6S665C53v54Ev();
extern void _ZN6S665C53v55Ev();
extern void _ZN6S665C53v56Ev();
extern void _ZN6S665C53v57Ev();
extern void _ZN6S665C53v58Ev();
extern void _ZN6S665C53v59Ev();
extern void _ZN6S665C53v60Ev();
extern void _ZN6S665C53v61Ev();
extern void _ZN6S665C53v62Ev();
extern void _ZN6S665C53v63Ev();
extern void _ZN6S665C53v64Ev();
extern void _ZN6S665C53v65Ev();
extern void _ZN6S665C53v66Ev();
extern void _ZN6S665C53v67Ev();
extern void _ZN6S665C53v68Ev();
extern void _ZN6S665C53v69Ev();
extern void _ZN6S665C43v70Ev();
extern void _ZN6S665C43v71Ev();
extern void _ZN6S665C43v72Ev();
extern void _ZN6S665C43v73Ev();
extern void _ZN6S665C43v74Ev();
extern void _ZN6S665C43v75Ev();
extern void _ZN6S665C43v76Ev();
extern void _ZN6S665C43v77Ev();
extern void _ZN6S665C43v78Ev();
extern void _ZN6S665C43v79Ev();
extern void _ZN6S665C43v80Ev();
extern void _ZN6S665C43v81Ev();
extern void _ZN6S665C43v82Ev();
extern void _ZN6S665C43v83Ev();
extern void _ZN6S665C43v84Ev();
extern void _ZN6S665C43v85Ev();
extern void _ZN6S665C43v86Ev();
extern void _ZN6S665C43v87Ev();
extern void _ZN6S665C43v88Ev();
extern void _ZN6S665C43v89Ev();
extern void _ZN6S665C33v90Ev();
extern void _ZN6S665C33v91Ev();
extern void _ZN6S665C23v92Ev();
extern void _ZN6S665C23v93Ev();
extern void _ZN6S665C23v94Ev();
static  VTBL_ENTRY vtc_S665C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S665C2[0]),
  (VTBL_ENTRY)&_ZN6S665C2D1Ev,
  (VTBL_ENTRY)&_ZN6S665C2D0Ev,
  (VTBL_ENTRY)&_ZN6S665C52v6Ev,
  (VTBL_ENTRY)&_ZN6S665C52v7Ev,
  (VTBL_ENTRY)&_ZN6S665C52v8Ev,
  (VTBL_ENTRY)&_ZN6S665C52v9Ev,
  (VTBL_ENTRY)&_ZN6S665C53v10Ev,
  (VTBL_ENTRY)&_ZN6S665C53v11Ev,
  (VTBL_ENTRY)&_ZN6S665C53v12Ev,
  (VTBL_ENTRY)&_ZN6S665C53v13Ev,
  (VTBL_ENTRY)&_ZN6S665C53v14Ev,
  (VTBL_ENTRY)&_ZN6S665C53v15Ev,
  (VTBL_ENTRY)&_ZN6S665C53v16Ev,
  (VTBL_ENTRY)&_ZN6S665C53v17Ev,
  (VTBL_ENTRY)&_ZN6S665C53v18Ev,
  (VTBL_ENTRY)&_ZN6S665C53v19Ev,
  (VTBL_ENTRY)&_ZN6S665C53v20Ev,
  (VTBL_ENTRY)&_ZN6S665C53v21Ev,
  (VTBL_ENTRY)&_ZN6S665C53v22Ev,
  (VTBL_ENTRY)&_ZN6S665C53v23Ev,
  (VTBL_ENTRY)&_ZN6S665C53v24Ev,
  (VTBL_ENTRY)&_ZN6S665C53v25Ev,
  (VTBL_ENTRY)&_ZN6S665C53v26Ev,
  (VTBL_ENTRY)&_ZN6S665C53v27Ev,
  (VTBL_ENTRY)&_ZN6S665C53v28Ev,
  (VTBL_ENTRY)&_ZN6S665C53v29Ev,
  (VTBL_ENTRY)&_ZN6S665C53v30Ev,
  (VTBL_ENTRY)&_ZN6S665C53v31Ev,
  (VTBL_ENTRY)&_ZN6S665C53v32Ev,
  (VTBL_ENTRY)&_ZN6S665C53v33Ev,
  (VTBL_ENTRY)&_ZN6S665C53v34Ev,
  (VTBL_ENTRY)&_ZN6S665C53v35Ev,
  (VTBL_ENTRY)&_ZN6S665C53v36Ev,
  (VTBL_ENTRY)&_ZN6S665C53v37Ev,
  (VTBL_ENTRY)&_ZN6S665C53v38Ev,
  (VTBL_ENTRY)&_ZN6S665C53v39Ev,
  (VTBL_ENTRY)&_ZN6S665C53v40Ev,
  (VTBL_ENTRY)&_ZN6S665C53v41Ev,
  (VTBL_ENTRY)&_ZN6S665C53v42Ev,
  (VTBL_ENTRY)&_ZN6S665C53v43Ev,
  (VTBL_ENTRY)&_ZN6S665C53v44Ev,
  (VTBL_ENTRY)&_ZN6S665C53v45Ev,
  (VTBL_ENTRY)&_ZN6S665C53v46Ev,
  (VTBL_ENTRY)&_ZN6S665C53v47Ev,
  (VTBL_ENTRY)&_ZN6S665C53v48Ev,
  (VTBL_ENTRY)&_ZN6S665C53v49Ev,
  (VTBL_ENTRY)&_ZN6S665C53v50Ev,
  (VTBL_ENTRY)&_ZN6S665C53v51Ev,
  (VTBL_ENTRY)&_ZN6S665C53v52Ev,
  (VTBL_ENTRY)&_ZN6S665C53v53Ev,
  (VTBL_ENTRY)&_ZN6S665C53v54Ev,
  (VTBL_ENTRY)&_ZN6S665C53v55Ev,
  (VTBL_ENTRY)&_ZN6S665C53v56Ev,
  (VTBL_ENTRY)&_ZN6S665C53v57Ev,
  (VTBL_ENTRY)&_ZN6S665C53v58Ev,
  (VTBL_ENTRY)&_ZN6S665C53v59Ev,
  (VTBL_ENTRY)&_ZN6S665C53v60Ev,
  (VTBL_ENTRY)&_ZN6S665C53v61Ev,
  (VTBL_ENTRY)&_ZN6S665C53v62Ev,
  (VTBL_ENTRY)&_ZN6S665C53v63Ev,
  (VTBL_ENTRY)&_ZN6S665C53v64Ev,
  (VTBL_ENTRY)&_ZN6S665C53v65Ev,
  (VTBL_ENTRY)&_ZN6S665C53v66Ev,
  (VTBL_ENTRY)&_ZN6S665C53v67Ev,
  (VTBL_ENTRY)&_ZN6S665C53v68Ev,
  (VTBL_ENTRY)&_ZN6S665C53v69Ev,
  (VTBL_ENTRY)&_ZN6S665C43v70Ev,
  (VTBL_ENTRY)&_ZN6S665C43v71Ev,
  (VTBL_ENTRY)&_ZN6S665C43v72Ev,
  (VTBL_ENTRY)&_ZN6S665C43v73Ev,
  (VTBL_ENTRY)&_ZN6S665C43v74Ev,
  (VTBL_ENTRY)&_ZN6S665C43v75Ev,
  (VTBL_ENTRY)&_ZN6S665C43v76Ev,
  (VTBL_ENTRY)&_ZN6S665C43v77Ev,
  (VTBL_ENTRY)&_ZN6S665C43v78Ev,
  (VTBL_ENTRY)&_ZN6S665C43v79Ev,
  (VTBL_ENTRY)&_ZN6S665C43v80Ev,
  (VTBL_ENTRY)&_ZN6S665C43v81Ev,
  (VTBL_ENTRY)&_ZN6S665C43v82Ev,
  (VTBL_ENTRY)&_ZN6S665C43v83Ev,
  (VTBL_ENTRY)&_ZN6S665C43v84Ev,
  (VTBL_ENTRY)&_ZN6S665C43v85Ev,
  (VTBL_ENTRY)&_ZN6S665C43v86Ev,
  (VTBL_ENTRY)&_ZN6S665C43v87Ev,
  (VTBL_ENTRY)&_ZN6S665C43v88Ev,
  (VTBL_ENTRY)&_ZN6S665C43v89Ev,
  (VTBL_ENTRY)&_ZN6S665C33v90Ev,
  (VTBL_ENTRY)&_ZN6S665C33v91Ev,
  (VTBL_ENTRY)&_ZN6S665C23v92Ev,
  (VTBL_ENTRY)&_ZN6S665C23v93Ev,
  (VTBL_ENTRY)&_ZN6S665C23v94Ev,
};
extern VTBL_ENTRY _ZTI6S665C2[];
extern  VTBL_ENTRY _ZTV6S665C2[];
Class_Descriptor cd_S665C2 = {  "S665C2", // class name
  bases_S665C2, 3,
  &(vtc_S665C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(184,120), // object size
  NSPAIRA(_ZTI6S665C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S665C2),93, //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  S665C1  : S665C2 {
  ::S1292C12 s665c1f0;
  virtual  ~S665C1(); // _ZN6S665C1D1Ev
  virtual void  v1(); // _ZN6S665C12v1Ev
  virtual void  v2(); // _ZN6S665C12v2Ev
  virtual void  v3(); // _ZN6S665C12v3Ev
  virtual void  v4(); // _ZN6S665C12v4Ev
  virtual void  v5(); // _ZN6S665C12v5Ev
  S665C1(); // tgen
};
//SIG(1 S665C1) 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 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 FC7{ m}} vd v90 v91} vd v92 v93 v94 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 FC8{ BC9{ m Fc[4] FC10{ BC11{ BC12{ m Fp Fi[2]}}} Fi[2]} Fp} FC13{ BC9 Fp}} vd v1 v2 v3 v4 v5 FC8}


 S665C1 ::~S665C1(){ note_dtor("S665C1", this);}
void  S665C1 ::v1(){vfunc_called(this, "_ZN6S665C12v1Ev");}
void  S665C1 ::v2(){vfunc_called(this, "_ZN6S665C12v2Ev");}
void  S665C1 ::v3(){vfunc_called(this, "_ZN6S665C12v3Ev");}
void  S665C1 ::v4(){vfunc_called(this, "_ZN6S665C12v4Ev");}
void  S665C1 ::v5(){vfunc_called(this, "_ZN6S665C12v5Ev");}
S665C1 ::S665C1(){ note_ctor("S665C1", this);} // tgen

static void Test_S665C1()
{
  extern Class_Descriptor cd_S665C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(29,38)];
    init_test(&cd_S665C1, buf);
    S665C1 *dp, &lv = *(dp=new (buf) S665C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(224,148), "sizeof(S665C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S665C1)");
    check_base_class_offset(lv, (S665C5*)(S665C4*)(S665C3*)(S665C2*), 0, "S665C1");
    check_base_class_offset(lv, (S665C4*)(S665C3*)(S665C2*), 0, "S665C1");
    check_base_class_offset(lv, (S665C3*)(S665C2*), 0, "S665C1");
    check_base_class_offset(lv, (S665C2*), 0, "S665C1");
    check_field_offset(lv, s665c1f0, ABISELECT(184,120), "S665C1.s665c1f0");
    test_class_info(&lv, &cd_S665C1);
    dp->~S665C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS665C1(Test_S665C1, "S665C1", ABISELECT(224,148));

#else // __cplusplus

extern void _ZN6S665C1C1Ev();
extern void _ZN6S665C1D1Ev();
Name_Map name_map_S665C1[] = {
  NSPAIR(_ZN6S665C1C1Ev),
  NSPAIR(_ZN6S665C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S665C5;
extern VTBL_ENTRY _ZTI6S665C5[];
extern  VTBL_ENTRY _ZTV6S665C5[];
extern Class_Descriptor cd_S665C4;
extern VTBL_ENTRY _ZTI6S665C4[];
extern  VTBL_ENTRY _ZTV6S665C4[];
extern Class_Descriptor cd_S665C3;
extern VTBL_ENTRY _ZTI6S665C3[];
extern  VTBL_ENTRY _ZTV6S665C3[];
extern Class_Descriptor cd_S665C2;
extern VTBL_ENTRY _ZTI6S665C2[];
extern  VTBL_ENTRY _ZTV6S665C2[];
static Base_Class bases_S665C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S665C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S665C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S665C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S665C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S665C1[];
extern void _ZN6S665C1D1Ev();
extern void _ZN6S665C1D0Ev();
extern void _ZN6S665C52v6Ev();
extern void _ZN6S665C52v7Ev();
extern void _ZN6S665C52v8Ev();
extern void _ZN6S665C52v9Ev();
extern void _ZN6S665C53v10Ev();
extern void _ZN6S665C53v11Ev();
extern void _ZN6S665C53v12Ev();
extern void _ZN6S665C53v13Ev();
extern void _ZN6S665C53v14Ev();
extern void _ZN6S665C53v15Ev();
extern void _ZN6S665C53v16Ev();
extern void _ZN6S665C53v17Ev();
extern void _ZN6S665C53v18Ev();
extern void _ZN6S665C53v19Ev();
extern void _ZN6S665C53v20Ev();
extern void _ZN6S665C53v21Ev();
extern void _ZN6S665C53v22Ev();
extern void _ZN6S665C53v23Ev();
extern void _ZN6S665C53v24Ev();
extern void _ZN6S665C53v25Ev();
extern void _ZN6S665C53v26Ev();
extern void _ZN6S665C53v27Ev();
extern void _ZN6S665C53v28Ev();
extern void _ZN6S665C53v29Ev();
extern void _ZN6S665C53v30Ev();
extern void _ZN6S665C53v31Ev();
extern void _ZN6S665C53v32Ev();
extern void _ZN6S665C53v33Ev();
extern void _ZN6S665C53v34Ev();
extern void _ZN6S665C53v35Ev();
extern void _ZN6S665C53v36Ev();
extern void _ZN6S665C53v37Ev();
extern void _ZN6S665C53v38Ev();
extern void _ZN6S665C53v39Ev();
extern void _ZN6S665C53v40Ev();
extern void _ZN6S665C53v41Ev();
extern void _ZN6S665C53v42Ev();
extern void _ZN6S665C53v43Ev();
extern void _ZN6S665C53v44Ev();
extern void _ZN6S665C53v45Ev();
extern void _ZN6S665C53v46Ev();
extern void _ZN6S665C53v47Ev();
extern void _ZN6S665C53v48Ev();
extern void _ZN6S665C53v49Ev();
extern void _ZN6S665C53v50Ev();
extern void _ZN6S665C53v51Ev();
extern void _ZN6S665C53v52Ev();
extern void _ZN6S665C53v53Ev();
extern void _ZN6S665C53v54Ev();
extern void _ZN6S665C53v55Ev();
extern void _ZN6S665C53v56Ev();
extern void _ZN6S665C53v57Ev();
extern void _ZN6S665C53v58Ev();
extern void _ZN6S665C53v59Ev();
extern void _ZN6S665C53v60Ev();
extern void _ZN6S665C53v61Ev();
extern void _ZN6S665C53v62Ev();
extern void _ZN6S665C53v63Ev();
extern void _ZN6S665C53v64Ev();
extern void _ZN6S665C53v65Ev();
extern void _ZN6S665C53v66Ev();
extern void _ZN6S665C53v67Ev();
extern void _ZN6S665C53v68Ev();
extern void _ZN6S665C53v69Ev();
extern void _ZN6S665C43v70Ev();
extern void _ZN6S665C43v71Ev();
extern void _ZN6S665C43v72Ev();
extern void _ZN6S665C43v73Ev();
extern void _ZN6S665C43v74Ev();
extern void _ZN6S665C43v75Ev();
extern void _ZN6S665C43v76Ev();
extern void _ZN6S665C43v77Ev();
extern void _ZN6S665C43v78Ev();
extern void _ZN6S665C43v79Ev();
extern void _ZN6S665C43v80Ev();
extern void _ZN6S665C43v81Ev();
extern void _ZN6S665C43v82Ev();
extern void _ZN6S665C43v83Ev();
extern void _ZN6S665C43v84Ev();
extern void _ZN6S665C43v85Ev();
extern void _ZN6S665C43v86Ev();
extern void _ZN6S665C43v87Ev();
extern void _ZN6S665C43v88Ev();
extern void _ZN6S665C43v89Ev();
extern void _ZN6S665C33v90Ev();
extern void _ZN6S665C33v91Ev();
extern void _ZN6S665C23v92Ev();
extern void _ZN6S665C23v93Ev();
extern void _ZN6S665C23v94Ev();
extern void _ZN6S665C12v1Ev();
extern void _ZN6S665C12v2Ev();
extern void _ZN6S665C12v3Ev();
extern void _ZN6S665C12v4Ev();
extern void _ZN6S665C12v5Ev();
static  VTBL_ENTRY vtc_S665C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S665C1[0]),
  (VTBL_ENTRY)&_ZN6S665C1D1Ev,
  (VTBL_ENTRY)&_ZN6S665C1D0Ev,
  (VTBL_ENTRY)&_ZN6S665C52v6Ev,
  (VTBL_ENTRY)&_ZN6S665C52v7Ev,
  (VTBL_ENTRY)&_ZN6S665C52v8Ev,
  (VTBL_ENTRY)&_ZN6S665C52v9Ev,
  (VTBL_ENTRY)&_ZN6S665C53v10Ev,
  (VTBL_ENTRY)&_ZN6S665C53v11Ev,
  (VTBL_ENTRY)&_ZN6S665C53v12Ev,
  (VTBL_ENTRY)&_ZN6S665C53v13Ev,
  (VTBL_ENTRY)&_ZN6S665C53v14Ev,
  (VTBL_ENTRY)&_ZN6S665C53v15Ev,
  (VTBL_ENTRY)&_ZN6S665C53v16Ev,
  (VTBL_ENTRY)&_ZN6S665C53v17Ev,
  (VTBL_ENTRY)&_ZN6S665C53v18Ev,
  (VTBL_ENTRY)&_ZN6S665C53v19Ev,
  (VTBL_ENTRY)&_ZN6S665C53v20Ev,
  (VTBL_ENTRY)&_ZN6S665C53v21Ev,
  (VTBL_ENTRY)&_ZN6S665C53v22Ev,
  (VTBL_ENTRY)&_ZN6S665C53v23Ev,
  (VTBL_ENTRY)&_ZN6S665C53v24Ev,
  (VTBL_ENTRY)&_ZN6S665C53v25Ev,
  (VTBL_ENTRY)&_ZN6S665C53v26Ev,
  (VTBL_ENTRY)&_ZN6S665C53v27Ev,
  (VTBL_ENTRY)&_ZN6S665C53v28Ev,
  (VTBL_ENTRY)&_ZN6S665C53v29Ev,
  (VTBL_ENTRY)&_ZN6S665C53v30Ev,
  (VTBL_ENTRY)&_ZN6S665C53v31Ev,
  (VTBL_ENTRY)&_ZN6S665C53v32Ev,
  (VTBL_ENTRY)&_ZN6S665C53v33Ev,
  (VTBL_ENTRY)&_ZN6S665C53v34Ev,
  (VTBL_ENTRY)&_ZN6S665C53v35Ev,
  (VTBL_ENTRY)&_ZN6S665C53v36Ev,
  (VTBL_ENTRY)&_ZN6S665C53v37Ev,
  (VTBL_ENTRY)&_ZN6S665C53v38Ev,
  (VTBL_ENTRY)&_ZN6S665C53v39Ev,
  (VTBL_ENTRY)&_ZN6S665C53v40Ev,
  (VTBL_ENTRY)&_ZN6S665C53v41Ev,
  (VTBL_ENTRY)&_ZN6S665C53v42Ev,
  (VTBL_ENTRY)&_ZN6S665C53v43Ev,
  (VTBL_ENTRY)&_ZN6S665C53v44Ev,
  (VTBL_ENTRY)&_ZN6S665C53v45Ev,
  (VTBL_ENTRY)&_ZN6S665C53v46Ev,
  (VTBL_ENTRY)&_ZN6S665C53v47Ev,
  (VTBL_ENTRY)&_ZN6S665C53v48Ev,
  (VTBL_ENTRY)&_ZN6S665C53v49Ev,
  (VTBL_ENTRY)&_ZN6S665C53v50Ev,
  (VTBL_ENTRY)&_ZN6S665C53v51Ev,
  (VTBL_ENTRY)&_ZN6S665C53v52Ev,
  (VTBL_ENTRY)&_ZN6S665C53v53Ev,
  (VTBL_ENTRY)&_ZN6S665C53v54Ev,
  (VTBL_ENTRY)&_ZN6S665C53v55Ev,
  (VTBL_ENTRY)&_ZN6S665C53v56Ev,
  (VTBL_ENTRY)&_ZN6S665C53v57Ev,
  (VTBL_ENTRY)&_ZN6S665C53v58Ev,
  (VTBL_ENTRY)&_ZN6S665C53v59Ev,
  (VTBL_ENTRY)&_ZN6S665C53v60Ev,
  (VTBL_ENTRY)&_ZN6S665C53v61Ev,
  (VTBL_ENTRY)&_ZN6S665C53v62Ev,
  (VTBL_ENTRY)&_ZN6S665C53v63Ev,
  (VTBL_ENTRY)&_ZN6S665C53v64Ev,
  (VTBL_ENTRY)&_ZN6S665C53v65Ev,
  (VTBL_ENTRY)&_ZN6S665C53v66Ev,
  (VTBL_ENTRY)&_ZN6S665C53v67Ev,
  (VTBL_ENTRY)&_ZN6S665C53v68Ev,
  (VTBL_ENTRY)&_ZN6S665C53v69Ev,
  (VTBL_ENTRY)&_ZN6S665C43v70Ev,
  (VTBL_ENTRY)&_ZN6S665C43v71Ev,
  (VTBL_ENTRY)&_ZN6S665C43v72Ev,
  (VTBL_ENTRY)&_ZN6S665C43v73Ev,
  (VTBL_ENTRY)&_ZN6S665C43v74Ev,
  (VTBL_ENTRY)&_ZN6S665C43v75Ev,
  (VTBL_ENTRY)&_ZN6S665C43v76Ev,
  (VTBL_ENTRY)&_ZN6S665C43v77Ev,
  (VTBL_ENTRY)&_ZN6S665C43v78Ev,
  (VTBL_ENTRY)&_ZN6S665C43v79Ev,
  (VTBL_ENTRY)&_ZN6S665C43v80Ev,
  (VTBL_ENTRY)&_ZN6S665C43v81Ev,
  (VTBL_ENTRY)&_ZN6S665C43v82Ev,
  (VTBL_ENTRY)&_ZN6S665C43v83Ev,
  (VTBL_ENTRY)&_ZN6S665C43v84Ev,
  (VTBL_ENTRY)&_ZN6S665C43v85Ev,
  (VTBL_ENTRY)&_ZN6S665C43v86Ev,
  (VTBL_ENTRY)&_ZN6S665C43v87Ev,
  (VTBL_ENTRY)&_ZN6S665C43v88Ev,
  (VTBL_ENTRY)&_ZN6S665C43v89Ev,
  (VTBL_ENTRY)&_ZN6S665C33v90Ev,
  (VTBL_ENTRY)&_ZN6S665C33v91Ev,
  (VTBL_ENTRY)&_ZN6S665C23v92Ev,
  (VTBL_ENTRY)&_ZN6S665C23v93Ev,
  (VTBL_ENTRY)&_ZN6S665C23v94Ev,
  (VTBL_ENTRY)&_ZN6S665C12v1Ev,
  (VTBL_ENTRY)&_ZN6S665C12v2Ev,
  (VTBL_ENTRY)&_ZN6S665C12v3Ev,
  (VTBL_ENTRY)&_ZN6S665C12v4Ev,
  (VTBL_ENTRY)&_ZN6S665C12v5Ev,
};
extern VTBL_ENTRY _ZTI6S665C1[];
extern  VTBL_ENTRY _ZTV6S665C1[];
Class_Descriptor cd_S665C1 = {  "S665C1", // class name
  bases_S665C1, 4,
  &(vtc_S665C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(224,148), // object size
  NSPAIRA(_ZTI6S665C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S665C1),98, //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  S1302C4  {
  int s1302c4f0;
  __tsi64 s1302c4f1;
  void *s1302c4f2[4];
  int s1302c4f3[2];
  void *s1302c4f4;
  ::S674C6_nt s1302c4f5;
  void *s1302c4f6[2];
  virtual  ~S1302C4(); // _ZN7S1302C4D1Ev
  virtual void  v11(); // _ZN7S1302C43v11Ev
  virtual void  v12(); // _ZN7S1302C43v12Ev
  virtual void  v13(); // _ZN7S1302C43v13Ev
  virtual void  v14(); // _ZN7S1302C43v14Ev
  virtual void  v15(); // _ZN7S1302C43v15Ev
  virtual void  v16(); // _ZN7S1302C43v16Ev
  virtual void  v17(); // _ZN7S1302C43v17Ev
  virtual void  v18(); // _ZN7S1302C43v18Ev
  virtual void  v19(); // _ZN7S1302C43v19Ev
  virtual void  v20(); // _ZN7S1302C43v20Ev
  virtual void  v21(); // _ZN7S1302C43v21Ev
  virtual void  v22(); // _ZN7S1302C43v22Ev
  virtual void  v23(); // _ZN7S1302C43v23Ev
  virtual void  v24(); // _ZN7S1302C43v24Ev
  virtual void  v25(); // _ZN7S1302C43v25Ev
  virtual void  v26(); // _ZN7S1302C43v26Ev
  virtual void  v27(); // _ZN7S1302C43v27Ev
  virtual void  v28(); // _ZN7S1302C43v28Ev
  virtual void  v29(); // _ZN7S1302C43v29Ev
  virtual void  v30(); // _ZN7S1302C43v30Ev
  virtual void  v31(); // _ZN7S1302C43v31Ev
  virtual void  v32(); // _ZN7S1302C43v32Ev
  virtual void  v33(); // _ZN7S1302C43v33Ev
  virtual void  v34(); // _ZN7S1302C43v34Ev
  virtual void  v35(); // _ZN7S1302C43v35Ev
  virtual void  v36(); // _ZN7S1302C43v36Ev
  virtual void  v37(); // _ZN7S1302C43v37Ev
  virtual void  v38(); // _ZN7S1302C43v38Ev
  virtual void  v39(); // _ZN7S1302C43v39Ev
  virtual void  v40(); // _ZN7S1302C43v40Ev
  virtual void  v41(); // _ZN7S1302C43v41Ev
  virtual void  v42(); // _ZN7S1302C43v42Ev
  virtual void  v43(); // _ZN7S1302C43v43Ev
  virtual void  v44(); // _ZN7S1302C43v44Ev
  virtual void  v45(); // _ZN7S1302C43v45Ev
  virtual void  v46(); // _ZN7S1302C43v46Ev
  virtual void  v47(); // _ZN7S1302C43v47Ev
  virtual void  v48(); // _ZN7S1302C43v48Ev
  virtual void  v49(); // _ZN7S1302C43v49Ev
  virtual void  v50(); // _ZN7S1302C43v50Ev
  virtual void  v51(); // _ZN7S1302C43v51Ev
  virtual void  v52(); // _ZN7S1302C43v52Ev
  virtual void  v53(); // _ZN7S1302C43v53Ev
  virtual void  v54(); // _ZN7S1302C43v54Ev
  virtual void  v55(); // _ZN7S1302C43v55Ev
  virtual void  v56(); // _ZN7S1302C43v56Ev
  virtual void  v57(); // _ZN7S1302C43v57Ev
  virtual void  v58(); // _ZN7S1302C43v58Ev
  virtual void  v59(); // _ZN7S1302C43v59Ev
  virtual void  v60(); // _ZN7S1302C43v60Ev
  virtual void  v61(); // _ZN7S1302C43v61Ev
  virtual void  v62(); // _ZN7S1302C43v62Ev
  virtual void  v63(); // _ZN7S1302C43v63Ev
  virtual void  v64(); // _ZN7S1302C43v64Ev
  virtual void  v65(); // _ZN7S1302C43v65Ev
  virtual void  v66(); // _ZN7S1302C43v66Ev
  virtual void  v67(); // _ZN7S1302C43v67Ev
  virtual void  v68(); // _ZN7S1302C43v68Ev
  virtual void  v69(); // _ZN7S1302C43v69Ev
  virtual void  v70(); // _ZN7S1302C43v70Ev
  virtual void  v71(); // _ZN7S1302C43v71Ev
  virtual void  v72(); // _ZN7S1302C43v72Ev
  virtual void  v73(); // _ZN7S1302C43v73Ev
  virtual void  v74(); // _ZN7S1302C43v74Ev
  S1302C4(); // tgen
};
//SIG(-1 S1302C4) 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]}


 S1302C4 ::~S1302C4(){ note_dtor("S1302C4", this);}
void  S1302C4 ::v11(){vfunc_called(this, "_ZN7S1302C43v11Ev");}
void  S1302C4 ::v12(){vfunc_called(this, "_ZN7S1302C43v12Ev");}
void  S1302C4 ::v13(){vfunc_called(this, "_ZN7S1302C43v13Ev");}
void  S1302C4 ::v14(){vfunc_called(this, "_ZN7S1302C43v14Ev");}
void  S1302C4 ::v15(){vfunc_called(this, "_ZN7S1302C43v15Ev");}
void  S1302C4 ::v16(){vfunc_called(this, "_ZN7S1302C43v16Ev");}
void  S1302C4 ::v17(){vfunc_called(this, "_ZN7S1302C43v17Ev");}
void  S1302C4 ::v18(){vfunc_called(this, "_ZN7S1302C43v18Ev");}
void  S1302C4 ::v19(){vfunc_called(this, "_ZN7S1302C43v19Ev");}
void  S1302C4 ::v20(){vfunc_called(this, "_ZN7S1302C43v20Ev");}
void  S1302C4 ::v21(){vfunc_called(this, "_ZN7S1302C43v21Ev");}
void  S1302C4 ::v22(){vfunc_called(this, "_ZN7S1302C43v22Ev");}
void  S1302C4 ::v23(){vfunc_called(this, "_ZN7S1302C43v23Ev");}
void  S1302C4 ::v24(){vfunc_called(this, "_ZN7S1302C43v24Ev");}
void  S1302C4 ::v25(){vfunc_called(this, "_ZN7S1302C43v25Ev");}
void  S1302C4 ::v26(){vfunc_called(this, "_ZN7S1302C43v26Ev");}
void  S1302C4 ::v27(){vfunc_called(this, "_ZN7S1302C43v27Ev");}
void  S1302C4 ::v28(){vfunc_called(this, "_ZN7S1302C43v28Ev");}
void  S1302C4 ::v29(){vfunc_called(this, "_ZN7S1302C43v29Ev");}
void  S1302C4 ::v30(){vfunc_called(this, "_ZN7S1302C43v30Ev");}
void  S1302C4 ::v31(){vfunc_called(this, "_ZN7S1302C43v31Ev");}
void  S1302C4 ::v32(){vfunc_called(this, "_ZN7S1302C43v32Ev");}
void  S1302C4 ::v33(){vfunc_called(this, "_ZN7S1302C43v33Ev");}
void  S1302C4 ::v34(){vfunc_called(this, "_ZN7S1302C43v34Ev");}
void  S1302C4 ::v35(){vfunc_called(this, "_ZN7S1302C43v35Ev");}
void  S1302C4 ::v36(){vfunc_called(this, "_ZN7S1302C43v36Ev");}
void  S1302C4 ::v37(){vfunc_called(this, "_ZN7S1302C43v37Ev");}
void  S1302C4 ::v38(){vfunc_called(this, "_ZN7S1302C43v38Ev");}
void  S1302C4 ::v39(){vfunc_called(this, "_ZN7S1302C43v39Ev");}
void  S1302C4 ::v40(){vfunc_called(this, "_ZN7S1302C43v40Ev");}
void  S1302C4 ::v41(){vfunc_called(this, "_ZN7S1302C43v41Ev");}
void  S1302C4 ::v42(){vfunc_called(this, "_ZN7S1302C43v42Ev");}
void  S1302C4 ::v43(){vfunc_called(this, "_ZN7S1302C43v43Ev");}
void  S1302C4 ::v44(){vfunc_called(this, "_ZN7S1302C43v44Ev");}
void  S1302C4 ::v45(){vfunc_called(this, "_ZN7S1302C43v45Ev");}
void  S1302C4 ::v46(){vfunc_called(this, "_ZN7S1302C43v46Ev");}
void  S1302C4 ::v47(){vfunc_called(this, "_ZN7S1302C43v47Ev");}
void  S1302C4 ::v48(){vfunc_called(this, "_ZN7S1302C43v48Ev");}
void  S1302C4 ::v49(){vfunc_called(this, "_ZN7S1302C43v49Ev");}
void  S1302C4 ::v50(){vfunc_called(this, "_ZN7S1302C43v50Ev");}
void  S1302C4 ::v51(){vfunc_called(this, "_ZN7S1302C43v51Ev");}
void  S1302C4 ::v52(){vfunc_called(this, "_ZN7S1302C43v52Ev");}
void  S1302C4 ::v53(){vfunc_called(this, "_ZN7S1302C43v53Ev");}
void  S1302C4 ::v54(){vfunc_called(this, "_ZN7S1302C43v54Ev");}
void  S1302C4 ::v55(){vfunc_called(this, "_ZN7S1302C43v55Ev");}
void  S1302C4 ::v56(){vfunc_called(this, "_ZN7S1302C43v56Ev");}
void  S1302C4 ::v57(){vfunc_called(this, "_ZN7S1302C43v57Ev");}
void  S1302C4 ::v58(){vfunc_called(this, "_ZN7S1302C43v58Ev");}
void  S1302C4 ::v59(){vfunc_called(this, "_ZN7S1302C43v59Ev");}
void  S1302C4 ::v60(){vfunc_called(this, "_ZN7S1302C43v60Ev");}
void  S1302C4 ::v61(){vfunc_called(this, "_ZN7S1302C43v61Ev");}
void  S1302C4 ::v62(){vfunc_called(this, "_ZN7S1302C43v62Ev");}
void  S1302C4 ::v63(){vfunc_called(this, "_ZN7S1302C43v63Ev");}
void  S1302C4 ::v64(){vfunc_called(this, "_ZN7S1302C43v64Ev");}
void  S1302C4 ::v65(){vfunc_called(this, "_ZN7S1302C43v65Ev");}
void  S1302C4 ::v66(){vfunc_called(this, "_ZN7S1302C43v66Ev");}
void  S1302C4 ::v67(){vfunc_called(this, "_ZN7S1302C43v67Ev");}
void  S1302C4 ::v68(){vfunc_called(this, "_ZN7S1302C43v68Ev");}
void  S1302C4 ::v69(){vfunc_called(this, "_ZN7S1302C43v69Ev");}
void  S1302C4 ::v70(){vfunc_called(this, "_ZN7S1302C43v70Ev");}
void  S1302C4 ::v71(){vfunc_called(this, "_ZN7S1302C43v71Ev");}
void  S1302C4 ::v72(){vfunc_called(this, "_ZN7S1302C43v72Ev");}
void  S1302C4 ::v73(){vfunc_called(this, "_ZN7S1302C43v73Ev");}
void  S1302C4 ::v74(){vfunc_called(this, "_ZN7S1302C43v74Ev");}
S1302C4 ::S1302C4(){ note_ctor("S1302C4", this);} // tgen

static void Test_S1302C4()
{
  extern Class_Descriptor cd_S1302C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S1302C4, buf);
    S1302C4 *dp, &lv = *(dp=new (buf) S1302C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S1302C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1302C4)");
    check_field_offset(lv, s1302c4f0, ABISELECT(8,4), "S1302C4.s1302c4f0");
    check_field_offset(lv, s1302c4f1, ABISELECT(16,8), "S1302C4.s1302c4f1");
    check_field_offset(lv, s1302c4f2, ABISELECT(24,16), "S1302C4.s1302c4f2");
    check_field_offset(lv, s1302c4f3, ABISELECT(56,32), "S1302C4.s1302c4f3");
    check_field_offset(lv, s1302c4f4, ABISELECT(64,40), "S1302C4.s1302c4f4");
    check_field_offset(lv, s1302c4f5, ABISELECT(72,44), "S1302C4.s1302c4f5");
    check_field_offset(lv, s1302c4f6, ABISELECT(80,52), "S1302C4.s1302c4f6");
    test_class_info(&lv, &cd_S1302C4);
    dp->~S1302C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1302C4(Test_S1302C4, "S1302C4", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN7S1302C4C1Ev();
extern void _ZN7S1302C4D1Ev();
Name_Map name_map_S1302C4[] = {
  NSPAIR(_ZN7S1302C4C1Ev),
  NSPAIR(_ZN7S1302C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S1302C4[];
extern void _ZN7S1302C4D1Ev();
extern void _ZN7S1302C4D0Ev();
extern void _ZN7S1302C43v11Ev();
extern void _ZN7S1302C43v12Ev();
extern void _ZN7S1302C43v13Ev();
extern void _ZN7S1302C43v14Ev();
extern void _ZN7S1302C43v15Ev();
extern void _ZN7S1302C43v16Ev();
extern void _ZN7S1302C43v17Ev();
extern void _ZN7S1302C43v18Ev();
extern void _ZN7S1302C43v19Ev();
extern void _ZN7S1302C43v20Ev();
extern void _ZN7S1302C43v21Ev();
extern void _ZN7S1302C43v22Ev();
extern void _ZN7S1302C43v23Ev();
extern void _ZN7S1302C43v24Ev();
extern void _ZN7S1302C43v25Ev();
extern void _ZN7S1302C43v26Ev();
extern void _ZN7S1302C43v27Ev();
extern void _ZN7S1302C43v28Ev();
extern void _ZN7S1302C43v29Ev();
extern void _ZN7S1302C43v30Ev();
extern void _ZN7S1302C43v31Ev();
extern void _ZN7S1302C43v32Ev();
extern void _ZN7S1302C43v33Ev();
extern void _ZN7S1302C43v34Ev();
extern void _ZN7S1302C43v35Ev();
extern void _ZN7S1302C43v36Ev();
extern void _ZN7S1302C43v37Ev();
extern void _ZN7S1302C43v38Ev();
extern void _ZN7S1302C43v39Ev();
extern void _ZN7S1302C43v40Ev();
extern void _ZN7S1302C43v41Ev();
extern void _ZN7S1302C43v42Ev();
extern void _ZN7S1302C43v43Ev();
extern void _ZN7S1302C43v44Ev();
extern void _ZN7S1302C43v45Ev();
extern void _ZN7S1302C43v46Ev();
extern void _ZN7S1302C43v47Ev();
extern void _ZN7S1302C43v48Ev();
extern void _ZN7S1302C43v49Ev();
extern void _ZN7S1302C43v50Ev();
extern void _ZN7S1302C43v51Ev();
extern void _ZN7S1302C43v52Ev();
extern void _ZN7S1302C43v53Ev();
extern void _ZN7S1302C43v54Ev();
extern void _ZN7S1302C43v55Ev();
extern void _ZN7S1302C43v56Ev();
extern void _ZN7S1302C43v57Ev();
extern void _ZN7S1302C43v58Ev();
extern void _ZN7S1302C43v59Ev();
extern void _ZN7S1302C43v60Ev();
extern void _ZN7S1302C43v61Ev();
extern void _ZN7S1302C43v62Ev();
extern void _ZN7S1302C43v63Ev();
extern void _ZN7S1302C43v64Ev();
extern void _ZN7S1302C43v65Ev();
extern void _ZN7S1302C43v66Ev();
extern void _ZN7S1302C43v67Ev();
extern void _ZN7S1302C43v68Ev();
extern void _ZN7S1302C43v69Ev();
extern void _ZN7S1302C43v70Ev();
extern void _ZN7S1302C43v71Ev();
extern void _ZN7S1302C43v72Ev();
extern void _ZN7S1302C43v73Ev();
extern void _ZN7S1302C43v74Ev();
static  VTBL_ENTRY vtc_S1302C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1302C4[0]),
  (VTBL_ENTRY)&_ZN7S1302C4D1Ev,
  (VTBL_ENTRY)&_ZN7S1302C4D0Ev,
  (VTBL_ENTRY)&_ZN7S1302C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1302C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1302C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1302C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1302C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1302C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1302C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1302C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1302C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1302C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1302C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1302C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1302C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1302C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1302C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1302C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1302C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1302C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1302C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1302C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1302C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1302C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1302C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1302C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1302C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1302C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1302C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1302C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1302C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1302C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1302C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1302C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1302C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1302C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1302C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1302C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1302C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1302C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1302C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1302C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1302C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1302C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1302C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1302C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1302C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1302C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1302C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1302C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1302C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1302C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1302C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1302C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1302C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1302C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1302C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1302C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1302C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1302C43v68Ev,
  (VTBL_ENTRY)&_ZN7S1302C43v69Ev,
  (VTBL_ENTRY)&_ZN7S1302C43v70Ev,
  (VTBL_ENTRY)&_ZN7S1302C43v71Ev,
  (VTBL_ENTRY)&_ZN7S1302C43v72Ev,
  (VTBL_ENTRY)&_ZN7S1302C43v73Ev,
  (VTBL_ENTRY)&_ZN7S1302C43v74Ev,
};
extern VTBL_ENTRY _ZTI7S1302C4[];
extern  VTBL_ENTRY _ZTV7S1302C4[];
Class_Descriptor cd_S1302C4 = {  "S1302C4", // class name
  0,0,//no base classes
  &(vtc_S1302C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI7S1302C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S1302C4),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  S1302C3  : S1302C4 {
  unsigned int s1302c3f0:1;
  unsigned int s1302c3f1:1;
  unsigned int s1302c3f2:1;
  unsigned int s1302c3f3:1;
  unsigned int s1302c3f4:1;
  unsigned int s1302c3f5:1;
  unsigned int s1302c3f6:1;
  ::S3625C32 s1302c3f7;
  virtual  ~S1302C3(); // _ZN7S1302C3D1Ev
  virtual void  v75(); // _ZN7S1302C33v75Ev
  virtual void  v76(); // _ZN7S1302C33v76Ev
  virtual void  v77(); // _ZN7S1302C33v77Ev
  virtual void  v78(); // _ZN7S1302C33v78Ev
  virtual void  v79(); // _ZN7S1302C33v79Ev
  virtual void  v80(); // _ZN7S1302C33v80Ev
  virtual void  v81(); // _ZN7S1302C33v81Ev
  virtual void  v82(); // _ZN7S1302C33v82Ev
  virtual void  v83(); // _ZN7S1302C33v83Ev
  virtual void  v84(); // _ZN7S1302C33v84Ev
  virtual void  v85(); // _ZN7S1302C33v85Ev
  virtual void  v86(); // _ZN7S1302C33v86Ev
  virtual void  v87(); // _ZN7S1302C33v87Ev
  virtual void  v88(); // _ZN7S1302C33v88Ev
  virtual void  v89(); // _ZN7S1302C33v89Ev
  virtual void  v90(); // _ZN7S1302C33v90Ev
  virtual void  v91(); // _ZN7S1302C33v91Ev
  virtual void  v92(); // _ZN7S1302C33v92Ev
  virtual void  v93(); // _ZN7S1302C33v93Ev
  virtual void  v94(); // _ZN7S1302C33v94Ev
  S1302C3(); // tgen
};
//SIG(-1 S1302C3) C1{ BC2{ 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 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 Fi FL Fp[4] Fi[2] Fp FC3{ m Fi[2]} Fp[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 FC4{ m}}


 S1302C3 ::~S1302C3(){ note_dtor("S1302C3", this);}
void  S1302C3 ::v75(){vfunc_called(this, "_ZN7S1302C33v75Ev");}
void  S1302C3 ::v76(){vfunc_called(this, "_ZN7S1302C33v76Ev");}
void  S1302C3 ::v77(){vfunc_called(this, "_ZN7S1302C33v77Ev");}
void  S1302C3 ::v78(){vfunc_called(this, "_ZN7S1302C33v78Ev");}
void  S1302C3 ::v79(){vfunc_called(this, "_ZN7S1302C33v79Ev");}
void  S1302C3 ::v80(){vfunc_called(this, "_ZN7S1302C33v80Ev");}
void  S1302C3 ::v81(){vfunc_called(this, "_ZN7S1302C33v81Ev");}
void  S1302C3 ::v82(){vfunc_called(this, "_ZN7S1302C33v82Ev");}
void  S1302C3 ::v83(){vfunc_called(this, "_ZN7S1302C33v83Ev");}
void  S1302C3 ::v84(){vfunc_called(this, "_ZN7S1302C33v84Ev");}
void  S1302C3 ::v85(){vfunc_called(this, "_ZN7S1302C33v85Ev");}
void  S1302C3 ::v86(){vfunc_called(this, "_ZN7S1302C33v86Ev");}
void  S1302C3 ::v87(){vfunc_called(this, "_ZN7S1302C33v87Ev");}
void  S1302C3 ::v88(){vfunc_called(this, "_ZN7S1302C33v88Ev");}
void  S1302C3 ::v89(){vfunc_called(this, "_ZN7S1302C33v89Ev");}
void  S1302C3 ::v90(){vfunc_called(this, "_ZN7S1302C33v90Ev");}
void  S1302C3 ::v91(){vfunc_called(this, "_ZN7S1302C33v91Ev");}
void  S1302C3 ::v92(){vfunc_called(this, "_ZN7S1302C33v92Ev");}
void  S1302C3 ::v93(){vfunc_called(this, "_ZN7S1302C33v93Ev");}
void  S1302C3 ::v94(){vfunc_called(this, "_ZN7S1302C33v94Ev");}
S1302C3 ::S1302C3(){ note_ctor("S1302C3", this);} // tgen

static void Test_S1302C3()
{
  extern Class_Descriptor cd_S1302C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(14,17)];
    init_test(&cd_S1302C3, buf);
    S1302C3 *dp, &lv = *(dp=new (buf) S1302C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(104,64), "sizeof(S1302C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1302C3)");
    check_base_class_offset(lv, (S1302C4*), 0, "S1302C3");
    set_bf_and_test(lv, s1302c3f0, ABISELECT(96,60), 0, 1, 1, "S1302C3");
    set_bf_and_test(lv, s1302c3f1, ABISELECT(96,60), 1, 1, 1, "S1302C3");
    set_bf_and_test(lv, s1302c3f2, ABISELECT(96,60), 2, 1, 1, "S1302C3");
    set_bf_and_test(lv, s1302c3f3, ABISELECT(96,60), 3, 1, 1, "S1302C3");
    set_bf_and_test(lv, s1302c3f4, ABISELECT(96,60), 4, 1, 1, "S1302C3");
    set_bf_and_test(lv, s1302c3f5, ABISELECT(96,60), 5, 1, 1, "S1302C3");
    set_bf_and_test(lv, s1302c3f6, ABISELECT(96,60), 6, 1, 1, "S1302C3");
    check_field_offset(lv, s1302c3f7, ABISELECT(97,61), "S1302C3.s1302c3f7");
    test_class_info(&lv, &cd_S1302C3);
    dp->~S1302C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1302C3(Test_S1302C3, "S1302C3", ABISELECT(104,64));

#else // __cplusplus

extern void _ZN7S1302C3C1Ev();
extern void _ZN7S1302C3D1Ev();
Name_Map name_map_S1302C3[] = {
  NSPAIR(_ZN7S1302C3C1Ev),
  NSPAIR(_ZN7S1302C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1302C4;
extern VTBL_ENTRY _ZTI7S1302C4[];
extern  VTBL_ENTRY _ZTV7S1302C4[];
static Base_Class bases_S1302C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1302C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI7S1302C3[];
extern void _ZN7S1302C3D1Ev();
extern void _ZN7S1302C3D0Ev();
extern void _ZN7S1302C43v11Ev();
extern void _ZN7S1302C43v12Ev();
extern void _ZN7S1302C43v13Ev();
extern void _ZN7S1302C43v14Ev();
extern void _ZN7S1302C43v15Ev();
extern void _ZN7S1302C43v16Ev();
extern void _ZN7S1302C43v17Ev();
extern void _ZN7S1302C43v18Ev();
extern void _ZN7S1302C43v19Ev();
extern void _ZN7S1302C43v20Ev();
extern void _ZN7S1302C43v21Ev();
extern void _ZN7S1302C43v22Ev();
extern void _ZN7S1302C43v23Ev();
extern void _ZN7S1302C43v24Ev();
extern void _ZN7S1302C43v25Ev();
extern void _ZN7S1302C43v26Ev();
extern void _ZN7S1302C43v27Ev();
extern void _ZN7S1302C43v28Ev();
extern void _ZN7S1302C43v29Ev();
extern void _ZN7S1302C43v30Ev();
extern void _ZN7S1302C43v31Ev();
extern void _ZN7S1302C43v32Ev();
extern void _ZN7S1302C43v33Ev();
extern void _ZN7S1302C43v34Ev();
extern void _ZN7S1302C43v35Ev();
extern void _ZN7S1302C43v36Ev();
extern void _ZN7S1302C43v37Ev();
extern void _ZN7S1302C43v38Ev();
extern void _ZN7S1302C43v39Ev();
extern void _ZN7S1302C43v40Ev();
extern void _ZN7S1302C43v41Ev();
extern void _ZN7S1302C43v42Ev();
extern void _ZN7S1302C43v43Ev();
extern void _ZN7S1302C43v44Ev();
extern void _ZN7S1302C43v45Ev();
extern void _ZN7S1302C43v46Ev();
extern void _ZN7S1302C43v47Ev();
extern void _ZN7S1302C43v48Ev();
extern void _ZN7S1302C43v49Ev();
extern void _ZN7S1302C43v50Ev();
extern void _ZN7S1302C43v51Ev();
extern void _ZN7S1302C43v52Ev();
extern void _ZN7S1302C43v53Ev();
extern void _ZN7S1302C43v54Ev();
extern void _ZN7S1302C43v55Ev();
extern void _ZN7S1302C43v56Ev();
extern void _ZN7S1302C43v57Ev();
extern void _ZN7S1302C43v58Ev();
extern void _ZN7S1302C43v59Ev();
extern void _ZN7S1302C43v60Ev();
extern void _ZN7S1302C43v61Ev();
extern void _ZN7S1302C43v62Ev();
extern void _ZN7S1302C43v63Ev();
extern void _ZN7S1302C43v64Ev();
extern void _ZN7S1302C43v65Ev();
extern void _ZN7S1302C43v66Ev();
extern void _ZN7S1302C43v67Ev();
extern void _ZN7S1302C43v68Ev();
extern void _ZN7S1302C43v69Ev();
extern void _ZN7S1302C43v70Ev();
extern void _ZN7S1302C43v71Ev();
extern void _ZN7S1302C43v72Ev();
extern void _ZN7S1302C43v73Ev();
extern void _ZN7S1302C43v74Ev();
extern void _ZN7S1302C33v75Ev();
extern void _ZN7S1302C33v76Ev();
extern void _ZN7S1302C33v77Ev();
extern void _ZN7S1302C33v78Ev();
extern void _ZN7S1302C33v79Ev();
extern void _ZN7S1302C33v80Ev();
extern void _ZN7S1302C33v81Ev();
extern void _ZN7S1302C33v82Ev();
extern void _ZN7S1302C33v83Ev();
extern void _ZN7S1302C33v84Ev();
extern void _ZN7S1302C33v85Ev();
extern void _ZN7S1302C33v86Ev();
extern void _ZN7S1302C33v87Ev();
extern void _ZN7S1302C33v88Ev();
extern void _ZN7S1302C33v89Ev();
extern void _ZN7S1302C33v90Ev();
extern void _ZN7S1302C33v91Ev();
extern void _ZN7S1302C33v92Ev();
extern void _ZN7S1302C33v93Ev();
extern void _ZN7S1302C33v94Ev();
static  VTBL_ENTRY vtc_S1302C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1302C3[0]),
  (VTBL_ENTRY)&_ZN7S1302C3D1Ev,
  (VTBL_ENTRY)&_ZN7S1302C3D0Ev,
  (VTBL_ENTRY)&_ZN7S1302C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1302C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1302C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1302C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1302C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1302C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1302C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1302C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1302C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1302C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1302C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1302C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1302C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1302C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1302C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1302C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1302C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1302C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1302C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1302C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1302C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1302C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1302C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1302C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1302C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1302C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1302C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1302C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1302C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1302C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1302C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1302C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1302C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1302C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1302C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1302C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1302C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1302C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1302C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1302C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1302C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1302C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1302C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1302C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1302C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1302C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1302C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1302C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1302C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1302C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1302C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1302C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1302C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1302C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1302C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1302C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1302C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1302C43v68Ev,
  (VTBL_ENTRY)&_ZN7S1302C43v69Ev,
  (VTBL_ENTRY)&_ZN7S1302C43v70Ev,
  (VTBL_ENTRY)&_ZN7S1302C43v71Ev,
  (VTBL_ENTRY)&_ZN7S1302C43v72Ev,
  (VTBL_ENTRY)&_ZN7S1302C43v73Ev,
  (VTBL_ENTRY)&_ZN7S1302C43v74Ev,
  (VTBL_ENTRY)&_ZN7S1302C33v75Ev,
  (VTBL_ENTRY)&_ZN7S1302C33v76Ev,
  (VTBL_ENTRY)&_ZN7S1302C33v77Ev,
  (VTBL_ENTRY)&_ZN7S1302C33v78Ev,
  (VTBL_ENTRY)&_ZN7S1302C33v79Ev,
  (VTBL_ENTRY)&_ZN7S1302C33v80Ev,
  (VTBL_ENTRY)&_ZN7S1302C33v81Ev,
  (VTBL_ENTRY)&_ZN7S1302C33v82Ev,
  (VTBL_ENTRY)&_ZN7S1302C33v83Ev,
  (VTBL_ENTRY)&_ZN7S1302C33v84Ev,
  (VTBL_ENTRY)&_ZN7S1302C33v85Ev,
  (VTBL_ENTRY)&_ZN7S1302C33v86Ev,
  (VTBL_ENTRY)&_ZN7S1302C33v87Ev,
  (VTBL_ENTRY)&_ZN7S1302C33v88Ev,
  (VTBL_ENTRY)&_ZN7S1302C33v89Ev,
  (VTBL_ENTRY)&_ZN7S1302C33v90Ev,
  (VTBL_ENTRY)&_ZN7S1302C33v91Ev,
  (VTBL_ENTRY)&_ZN7S1302C33v92Ev,
  (VTBL_ENTRY)&_ZN7S1302C33v93Ev,
  (VTBL_ENTRY)&_ZN7S1302C33v94Ev,
};
extern VTBL_ENTRY _ZTI7S1302C3[];
extern  VTBL_ENTRY _ZTV7S1302C3[];
Class_Descriptor cd_S1302C3 = {  "S1302C3", // class name
  bases_S1302C3, 1,
  &(vtc_S1302C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(104,64), // object size
  NSPAIRA(_ZTI7S1302C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1302C3),88, //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  S1302C2  : S1302C3 {
  virtual  ~S1302C2(); // _ZN7S1302C2D1Ev
  virtual void  v95(); // _ZN7S1302C23v95Ev
  virtual void  v96(); // _ZN7S1302C23v96Ev
  virtual void  v97(); // _ZN7S1302C23v97Ev
  S1302C2(); // tgen
};
//SIG(-1 S1302C2) C1{ BC2{ BC3{ vd 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 Fi FL Fp[4] Fi[2] Fp FC4{ m Fi[2]} Fp[2]} vd v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 FC5{ m}} vd v1 v2 v3}


 S1302C2 ::~S1302C2(){ note_dtor("S1302C2", this);}
void  S1302C2 ::v95(){vfunc_called(this, "_ZN7S1302C23v95Ev");}
void  S1302C2 ::v96(){vfunc_called(this, "_ZN7S1302C23v96Ev");}
void  S1302C2 ::v97(){vfunc_called(this, "_ZN7S1302C23v97Ev");}
S1302C2 ::S1302C2(){ note_ctor("S1302C2", this);} // tgen

static void Test_S1302C2()
{
  extern Class_Descriptor cd_S1302C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(14,17)];
    init_test(&cd_S1302C2, buf);
    S1302C2 *dp, &lv = *(dp=new (buf) S1302C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(104,64), "sizeof(S1302C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1302C2)");
    check_base_class_offset(lv, (S1302C4*)(S1302C3*), 0, "S1302C2");
    check_base_class_offset(lv, (S1302C3*), 0, "S1302C2");
    test_class_info(&lv, &cd_S1302C2);
    dp->~S1302C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1302C2(Test_S1302C2, "S1302C2", ABISELECT(104,64));

#else // __cplusplus

extern void _ZN7S1302C2C1Ev();
extern void _ZN7S1302C2D1Ev();
Name_Map name_map_S1302C2[] = {
  NSPAIR(_ZN7S1302C2C1Ev),
  NSPAIR(_ZN7S1302C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1302C4;
extern VTBL_ENTRY _ZTI7S1302C4[];
extern  VTBL_ENTRY _ZTV7S1302C4[];
extern Class_Descriptor cd_S1302C3;
extern VTBL_ENTRY _ZTI7S1302C3[];
extern  VTBL_ENTRY _ZTV7S1302C3[];
static Base_Class bases_S1302C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1302C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S1302C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S1302C2[];
extern void _ZN7S1302C2D1Ev();
extern void _ZN7S1302C2D0Ev();
extern void _ZN7S1302C43v11Ev();
extern void _ZN7S1302C43v12Ev();
extern void _ZN7S1302C43v13Ev();
extern void _ZN7S1302C43v14Ev();
extern void _ZN7S1302C43v15Ev();
extern void _ZN7S1302C43v16Ev();
extern void _ZN7S1302C43v17Ev();
extern void _ZN7S1302C43v18Ev();
extern void _ZN7S1302C43v19Ev();
extern void _ZN7S1302C43v20Ev();
extern void _ZN7S1302C43v21Ev();
extern void _ZN7S1302C43v22Ev();
extern void _ZN7S1302C43v23Ev();
extern void _ZN7S1302C43v24Ev();
extern void _ZN7S1302C43v25Ev();
extern void _ZN7S1302C43v26Ev();
extern void _ZN7S1302C43v27Ev();
extern void _ZN7S1302C43v28Ev();
extern void _ZN7S1302C43v29Ev();
extern void _ZN7S1302C43v30Ev();
extern void _ZN7S1302C43v31Ev();
extern void _ZN7S1302C43v32Ev();
extern void _ZN7S1302C43v33Ev();
extern void _ZN7S1302C43v34Ev();
extern void _ZN7S1302C43v35Ev();
extern void _ZN7S1302C43v36Ev();
extern void _ZN7S1302C43v37Ev();
extern void _ZN7S1302C43v38Ev();
extern void _ZN7S1302C43v39Ev();
extern void _ZN7S1302C43v40Ev();
extern void _ZN7S1302C43v41Ev();
extern void _ZN7S1302C43v42Ev();
extern void _ZN7S1302C43v43Ev();
extern void _ZN7S1302C43v44Ev();
extern void _ZN7S1302C43v45Ev();
extern void _ZN7S1302C43v46Ev();
extern void _ZN7S1302C43v47Ev();
extern void _ZN7S1302C43v48Ev();
extern void _ZN7S1302C43v49Ev();
extern void _ZN7S1302C43v50Ev();
extern void _ZN7S1302C43v51Ev();
extern void _ZN7S1302C43v52Ev();
extern void _ZN7S1302C43v53Ev();
extern void _ZN7S1302C43v54Ev();
extern void _ZN7S1302C43v55Ev();
extern void _ZN7S1302C43v56Ev();
extern void _ZN7S1302C43v57Ev();
extern void _ZN7S1302C43v58Ev();
extern void _ZN7S1302C43v59Ev();
extern void _ZN7S1302C43v60Ev();
extern void _ZN7S1302C43v61Ev();
extern void _ZN7S1302C43v62Ev();
extern void _ZN7S1302C43v63Ev();
extern void _ZN7S1302C43v64Ev();
extern void _ZN7S1302C43v65Ev();
extern void _ZN7S1302C43v66Ev();
extern void _ZN7S1302C43v67Ev();
extern void _ZN7S1302C43v68Ev();
extern void _ZN7S1302C43v69Ev();
extern void _ZN7S1302C43v70Ev();
extern void _ZN7S1302C43v71Ev();
extern void _ZN7S1302C43v72Ev();
extern void _ZN7S1302C43v73Ev();
extern void _ZN7S1302C43v74Ev();
extern void _ZN7S1302C33v75Ev();
extern void _ZN7S1302C33v76Ev();
extern void _ZN7S1302C33v77Ev();
extern void _ZN7S1302C33v78Ev();
extern void _ZN7S1302C33v79Ev();
extern void _ZN7S1302C33v80Ev();
extern void _ZN7S1302C33v81Ev();
extern void _ZN7S1302C33v82Ev();
extern void _ZN7S1302C33v83Ev();
extern void _ZN7S1302C33v84Ev();
extern void _ZN7S1302C33v85Ev();
extern void _ZN7S1302C33v86Ev();
extern void _ZN7S1302C33v87Ev();
extern void _ZN7S1302C33v88Ev();
extern void _ZN7S1302C33v89Ev();
extern void _ZN7S1302C33v90Ev();
extern void _ZN7S1302C33v91Ev();
extern void _ZN7S1302C33v92Ev();
extern void _ZN7S1302C33v93Ev();
extern void _ZN7S1302C33v94Ev();
extern void _ZN7S1302C23v95Ev();
extern void _ZN7S1302C23v96Ev();
extern void _ZN7S1302C23v97Ev();
static  VTBL_ENTRY vtc_S1302C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1302C2[0]),
  (VTBL_ENTRY)&_ZN7S1302C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1302C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1302C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1302C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1302C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1302C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1302C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1302C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1302C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1302C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1302C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1302C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1302C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1302C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1302C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1302C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1302C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1302C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1302C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1302C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1302C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1302C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1302C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1302C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1302C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1302C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1302C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1302C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1302C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1302C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1302C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1302C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1302C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1302C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1302C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1302C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1302C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1302C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1302C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1302C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1302C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1302C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1302C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1302C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1302C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1302C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1302C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1302C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1302C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1302C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1302C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1302C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1302C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1302C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1302C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1302C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1302C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1302C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1302C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1302C43v68Ev,
  (VTBL_ENTRY)&_ZN7S1302C43v69Ev,
  (VTBL_ENTRY)&_ZN7S1302C43v70Ev,
  (VTBL_ENTRY)&_ZN7S1302C43v71Ev,
  (VTBL_ENTRY)&_ZN7S1302C43v72Ev,
  (VTBL_ENTRY)&_ZN7S1302C43v73Ev,
  (VTBL_ENTRY)&_ZN7S1302C43v74Ev,
  (VTBL_ENTRY)&_ZN7S1302C33v75Ev,
  (VTBL_ENTRY)&_ZN7S1302C33v76Ev,
  (VTBL_ENTRY)&_ZN7S1302C33v77Ev,
  (VTBL_ENTRY)&_ZN7S1302C33v78Ev,
  (VTBL_ENTRY)&_ZN7S1302C33v79Ev,
  (VTBL_ENTRY)&_ZN7S1302C33v80Ev,
  (VTBL_ENTRY)&_ZN7S1302C33v81Ev,
  (VTBL_ENTRY)&_ZN7S1302C33v82Ev,
  (VTBL_ENTRY)&_ZN7S1302C33v83Ev,
  (VTBL_ENTRY)&_ZN7S1302C33v84Ev,
  (VTBL_ENTRY)&_ZN7S1302C33v85Ev,
  (VTBL_ENTRY)&_ZN7S1302C33v86Ev,
  (VTBL_ENTRY)&_ZN7S1302C33v87Ev,
  (VTBL_ENTRY)&_ZN7S1302C33v88Ev,
  (VTBL_ENTRY)&_ZN7S1302C33v89Ev,
  (VTBL_ENTRY)&_ZN7S1302C33v90Ev,
  (VTBL_ENTRY)&_ZN7S1302C33v91Ev,
  (VTBL_ENTRY)&_ZN7S1302C33v92Ev,
  (VTBL_ENTRY)&_ZN7S1302C33v93Ev,
  (VTBL_ENTRY)&_ZN7S1302C33v94Ev,
  (VTBL_ENTRY)&_ZN7S1302C23v95Ev,
  (VTBL_ENTRY)&_ZN7S1302C23v96Ev,
  (VTBL_ENTRY)&_ZN7S1302C23v97Ev,
};
extern VTBL_ENTRY _ZTI7S1302C2[];
extern  VTBL_ENTRY _ZTV7S1302C2[];
Class_Descriptor cd_S1302C2 = {  "S1302C2", // class name
  bases_S1302C2, 2,
  &(vtc_S1302C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(104,64), // object size
  NSPAIRA(_ZTI7S1302C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1302C2),91, //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  S1302C1  : S1302C2 {
  char s1302c1f0[2];
  ::S674C6_nt s1302c1f1;
  ::S1292C12 s1302c1f2;
  unsigned int s1302c1f3:1;
  unsigned int s1302c1f4:1;
  unsigned int s1302c1f5:1;
  unsigned int s1302c1f6:1;
  ::S1292C12 s1302c1f7;
  ::S1289C10_nt s1302c1f8;
  int s1302c1f9;
  virtual  ~S1302C1(); // _ZN7S1302C1D1Ev
  virtual void  v1(); // _ZN7S1302C12v1Ev
  virtual void  v2(); // _ZN7S1302C12v2Ev
  virtual void  v3(); // _ZN7S1302C12v3Ev
  virtual void  v4(); // _ZN7S1302C12v4Ev
  virtual void  v5(); // _ZN7S1302C12v5Ev
  virtual void  v6(); // _ZN7S1302C12v6Ev
  virtual void  v7(); // _ZN7S1302C12v7Ev
  virtual void  v8(); // _ZN7S1302C12v8Ev
  virtual void  v9(); // _ZN7S1302C12v9Ev
  virtual void  v10(); // _ZN7S1302C13v10Ev
  S1302C1(); // tgen
};
//SIG(1 S1302C1) C1{ BC2{ BC3{ BC4{ vd 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 Fi FL Fp[4] Fi[2] Fp FC5{ m Fi[2]} Fp[2]} vd v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 v91 v92 v93 v94 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 FC6{ m}} vd v95 v96 v97} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 Fc[2] FC5 FC7{ BC8{ m Fc[4] FC9{ BC10{ BC11{ m Fp Fi[2]}}} Fi[2]} Fp} Fi:1 Fi:1 Fi:1 Fi:1 FC7 FC12{ BC8 Fp} Fi}


 S1302C1 ::~S1302C1(){ note_dtor("S1302C1", this);}
void  S1302C1 ::v1(){vfunc_called(this, "_ZN7S1302C12v1Ev");}
void  S1302C1 ::v2(){vfunc_called(this, "_ZN7S1302C12v2Ev");}
void  S1302C1 ::v3(){vfunc_called(this, "_ZN7S1302C12v3Ev");}
void  S1302C1 ::v4(){vfunc_called(this, "_ZN7S1302C12v4Ev");}
void  S1302C1 ::v5(){vfunc_called(this, "_ZN7S1302C12v5Ev");}
void  S1302C1 ::v6(){vfunc_called(this, "_ZN7S1302C12v6Ev");}
void  S1302C1 ::v7(){vfunc_called(this, "_ZN7S1302C12v7Ev");}
void  S1302C1 ::v8(){vfunc_called(this, "_ZN7S1302C12v8Ev");}
void  S1302C1 ::v9(){vfunc_called(this, "_ZN7S1302C12v9Ev");}
void  S1302C1 ::v10(){vfunc_called(this, "_ZN7S1302C13v10Ev");}
S1302C1 ::S1302C1(){ note_ctor("S1302C1", this);} // tgen

static void Test_S1302C1()
{
  extern Class_Descriptor cd_S1302C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(32,42)];
    init_test(&cd_S1302C1, buf);
    S1302C1 *dp, &lv = *(dp=new (buf) S1302C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(248,164), "sizeof(S1302C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1302C1)");
    check_base_class_offset(lv, (S1302C4*)(S1302C3*)(S1302C2*), 0, "S1302C1");
    check_base_class_offset(lv, (S1302C3*)(S1302C2*), 0, "S1302C1");
    check_base_class_offset(lv, (S1302C2*), 0, "S1302C1");
    check_field_offset(lv, s1302c1f0, ABISELECT(98,62), "S1302C1.s1302c1f0");
    check_field_offset(lv, s1302c1f1, ABISELECT(100,64), "S1302C1.s1302c1f1");
    check_field_offset(lv, s1302c1f2, ABISELECT(112,72), "S1302C1.s1302c1f2");
    set_bf_and_test(lv, s1302c1f3, ABISELECT(152,100), 0, 1, 1, "S1302C1");
    set_bf_and_test(lv, s1302c1f4, ABISELECT(152,100), 1, 1, 1, "S1302C1");
    set_bf_and_test(lv, s1302c1f5, ABISELECT(152,100), 2, 1, 1, "S1302C1");
    set_bf_and_test(lv, s1302c1f6, ABISELECT(152,100), 3, 1, 1, "S1302C1");
    check_field_offset(lv, s1302c1f7, ABISELECT(160,104), "S1302C1.s1302c1f7");
    check_field_offset(lv, s1302c1f8, ABISELECT(200,132), "S1302C1.s1302c1f8");
    check_field_offset(lv, s1302c1f9, ABISELECT(240,160), "S1302C1.s1302c1f9");
    test_class_info(&lv, &cd_S1302C1);
    dp->~S1302C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1302C1(Test_S1302C1, "S1302C1", ABISELECT(248,164));

#else // __cplusplus

extern void _ZN7S1302C1C1Ev();
extern void _ZN7S1302C1D1Ev();
Name_Map name_map_S1302C1[] = {
  NSPAIR(_ZN7S1302C1C1Ev),
  NSPAIR(_ZN7S1302C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1302C4;
extern VTBL_ENTRY _ZTI7S1302C4[];
extern  VTBL_ENTRY _ZTV7S1302C4[];
extern Class_Descriptor cd_S1302C3;
extern VTBL_ENTRY _ZTI7S1302C3[];
extern  VTBL_ENTRY _ZTV7S1302C3[];
extern Class_Descriptor cd_S1302C2;
extern VTBL_ENTRY _ZTI7S1302C2[];
extern  VTBL_ENTRY _ZTV7S1302C2[];
static Base_Class bases_S1302C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1302C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S1302C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S1302C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S1302C1[];
extern void _ZN7S1302C1D1Ev();
extern void _ZN7S1302C1D0Ev();
extern void _ZN7S1302C43v11Ev();
extern void _ZN7S1302C43v12Ev();
extern void _ZN7S1302C43v13Ev();
extern void _ZN7S1302C43v14Ev();
extern void _ZN7S1302C43v15Ev();
extern void _ZN7S1302C43v16Ev();
extern void _ZN7S1302C43v17Ev();
extern void _ZN7S1302C43v18Ev();
extern void _ZN7S1302C43v19Ev();
extern void _ZN7S1302C43v20Ev();
extern void _ZN7S1302C43v21Ev();
extern void _ZN7S1302C43v22Ev();
extern void _ZN7S1302C43v23Ev();
extern void _ZN7S1302C43v24Ev();
extern void _ZN7S1302C43v25Ev();
extern void _ZN7S1302C43v26Ev();
extern void _ZN7S1302C43v27Ev();
extern void _ZN7S1302C43v28Ev();
extern void _ZN7S1302C43v29Ev();
extern void _ZN7S1302C43v30Ev();
extern void _ZN7S1302C43v31Ev();
extern void _ZN7S1302C43v32Ev();
extern void _ZN7S1302C43v33Ev();
extern void _ZN7S1302C43v34Ev();
extern void _ZN7S1302C43v35Ev();
extern void _ZN7S1302C43v36Ev();
extern void _ZN7S1302C43v37Ev();
extern void _ZN7S1302C43v38Ev();
extern void _ZN7S1302C43v39Ev();
extern void _ZN7S1302C43v40Ev();
extern void _ZN7S1302C43v41Ev();
extern void _ZN7S1302C43v42Ev();
extern void _ZN7S1302C43v43Ev();
extern void _ZN7S1302C43v44Ev();
extern void _ZN7S1302C43v45Ev();
extern void _ZN7S1302C43v46Ev();
extern void _ZN7S1302C43v47Ev();
extern void _ZN7S1302C43v48Ev();
extern void _ZN7S1302C43v49Ev();
extern void _ZN7S1302C43v50Ev();
extern void _ZN7S1302C43v51Ev();
extern void _ZN7S1302C43v52Ev();
extern void _ZN7S1302C43v53Ev();
extern void _ZN7S1302C43v54Ev();
extern void _ZN7S1302C43v55Ev();
extern void _ZN7S1302C43v56Ev();
extern void _ZN7S1302C43v57Ev();
extern void _ZN7S1302C43v58Ev();
extern void _ZN7S1302C43v59Ev();
extern void _ZN7S1302C43v60Ev();
extern void _ZN7S1302C43v61Ev();
extern void _ZN7S1302C43v62Ev();
extern void _ZN7S1302C43v63Ev();
extern void _ZN7S1302C43v64Ev();
extern void _ZN7S1302C43v65Ev();
extern void _ZN7S1302C43v66Ev();
extern void _ZN7S1302C43v67Ev();
extern void _ZN7S1302C43v68Ev();
extern void _ZN7S1302C43v69Ev();
extern void _ZN7S1302C43v70Ev();
extern void _ZN7S1302C43v71Ev();
extern void _ZN7S1302C43v72Ev();
extern void _ZN7S1302C43v73Ev();
extern void _ZN7S1302C43v74Ev();
extern void _ZN7S1302C33v75Ev();
extern void _ZN7S1302C33v76Ev();
extern void _ZN7S1302C33v77Ev();
extern void _ZN7S1302C33v78Ev();
extern void _ZN7S1302C33v79Ev();
extern void _ZN7S1302C33v80Ev();
extern void _ZN7S1302C33v81Ev();
extern void _ZN7S1302C33v82Ev();
extern void _ZN7S1302C33v83Ev();
extern void _ZN7S1302C33v84Ev();
extern void _ZN7S1302C33v85Ev();
extern void _ZN7S1302C33v86Ev();
extern void _ZN7S1302C33v87Ev();
extern void _ZN7S1302C33v88Ev();
extern void _ZN7S1302C33v89Ev();
extern void _ZN7S1302C33v90Ev();
extern void _ZN7S1302C33v91Ev();
extern void _ZN7S1302C33v92Ev();
extern void _ZN7S1302C33v93Ev();
extern void _ZN7S1302C33v94Ev();
extern void _ZN7S1302C23v95Ev();
extern void _ZN7S1302C23v96Ev();
extern void _ZN7S1302C23v97Ev();
extern void _ZN7S1302C12v1Ev();
extern void _ZN7S1302C12v2Ev();
extern void _ZN7S1302C12v3Ev();
extern void _ZN7S1302C12v4Ev();
extern void _ZN7S1302C12v5Ev();
extern void _ZN7S1302C12v6Ev();
extern void _ZN7S1302C12v7Ev();
extern void _ZN7S1302C12v8Ev();
extern void _ZN7S1302C12v9Ev();
extern void _ZN7S1302C13v10Ev();
static  VTBL_ENTRY vtc_S1302C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1302C1[0]),
  (VTBL_ENTRY)&_ZN7S1302C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1302C1D0Ev,
  (VTBL_ENTRY)&_ZN7S1302C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1302C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1302C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1302C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1302C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1302C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1302C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1302C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1302C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1302C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1302C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1302C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1302C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1302C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1302C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1302C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1302C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1302C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1302C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1302C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1302C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1302C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1302C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1302C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1302C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1302C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1302C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1302C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1302C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1302C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1302C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1302C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1302C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1302C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1302C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1302C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1302C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1302C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1302C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1302C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1302C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1302C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1302C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1302C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1302C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1302C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1302C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1302C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1302C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1302C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1302C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1302C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1302C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1302C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1302C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1302C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1302C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1302C43v68Ev,
  (VTBL_ENTRY)&_ZN7S1302C43v69Ev,
  (VTBL_ENTRY)&_ZN7S1302C43v70Ev,
  (VTBL_ENTRY)&_ZN7S1302C43v71Ev,
  (VTBL_ENTRY)&_ZN7S1302C43v72Ev,
  (VTBL_ENTRY)&_ZN7S1302C43v73Ev,
  (VTBL_ENTRY)&_ZN7S1302C43v74Ev,
  (VTBL_ENTRY)&_ZN7S1302C33v75Ev,
  (VTBL_ENTRY)&_ZN7S1302C33v76Ev,
  (VTBL_ENTRY)&_ZN7S1302C33v77Ev,
  (VTBL_ENTRY)&_ZN7S1302C33v78Ev,
  (VTBL_ENTRY)&_ZN7S1302C33v79Ev,
  (VTBL_ENTRY)&_ZN7S1302C33v80Ev,
  (VTBL_ENTRY)&_ZN7S1302C33v81Ev,
  (VTBL_ENTRY)&_ZN7S1302C33v82Ev,
  (VTBL_ENTRY)&_ZN7S1302C33v83Ev,
  (VTBL_ENTRY)&_ZN7S1302C33v84Ev,
  (VTBL_ENTRY)&_ZN7S1302C33v85Ev,
  (VTBL_ENTRY)&_ZN7S1302C33v86Ev,
  (VTBL_ENTRY)&_ZN7S1302C33v87Ev,
  (VTBL_ENTRY)&_ZN7S1302C33v88Ev,
  (VTBL_ENTRY)&_ZN7S1302C33v89Ev,
  (VTBL_ENTRY)&_ZN7S1302C33v90Ev,
  (VTBL_ENTRY)&_ZN7S1302C33v91Ev,
  (VTBL_ENTRY)&_ZN7S1302C33v92Ev,
  (VTBL_ENTRY)&_ZN7S1302C33v93Ev,
  (VTBL_ENTRY)&_ZN7S1302C33v94Ev,
  (VTBL_ENTRY)&_ZN7S1302C23v95Ev,
  (VTBL_ENTRY)&_ZN7S1302C23v96Ev,
  (VTBL_ENTRY)&_ZN7S1302C23v97Ev,
  (VTBL_ENTRY)&_ZN7S1302C12v1Ev,
  (VTBL_ENTRY)&_ZN7S1302C12v2Ev,
  (VTBL_ENTRY)&_ZN7S1302C12v3Ev,
  (VTBL_ENTRY)&_ZN7S1302C12v4Ev,
  (VTBL_ENTRY)&_ZN7S1302C12v5Ev,
  (VTBL_ENTRY)&_ZN7S1302C12v6Ev,
  (VTBL_ENTRY)&_ZN7S1302C12v7Ev,
  (VTBL_ENTRY)&_ZN7S1302C12v8Ev,
  (VTBL_ENTRY)&_ZN7S1302C12v9Ev,
  (VTBL_ENTRY)&_ZN7S1302C13v10Ev,
};
extern VTBL_ENTRY _ZTI7S1302C1[];
extern  VTBL_ENTRY _ZTV7S1302C1[];
Class_Descriptor cd_S1302C1 = {  "S1302C1", // class name
  bases_S1302C1, 3,
  &(vtc_S1302C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(248,164), // object size
  NSPAIRA(_ZTI7S1302C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1302C1),101, //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  S1294C4  {
  int s1294c4f0;
  __tsi64 s1294c4f1;
  void *s1294c4f2[4];
  int s1294c4f3[2];
  void *s1294c4f4;
  ::S674C6_nt s1294c4f5;
  void *s1294c4f6[2];
  virtual  ~S1294C4(); // _ZN7S1294C4D1Ev
  virtual void  v10(); // _ZN7S1294C43v10Ev
  virtual void  v11(); // _ZN7S1294C43v11Ev
  virtual void  v12(); // _ZN7S1294C43v12Ev
  virtual void  v13(); // _ZN7S1294C43v13Ev
  virtual void  v14(); // _ZN7S1294C43v14Ev
  virtual void  v15(); // _ZN7S1294C43v15Ev
  virtual void  v16(); // _ZN7S1294C43v16Ev
  virtual void  v17(); // _ZN7S1294C43v17Ev
  virtual void  v18(); // _ZN7S1294C43v18Ev
  virtual void  v19(); // _ZN7S1294C43v19Ev
  virtual void  v20(); // _ZN7S1294C43v20Ev
  virtual void  v21(); // _ZN7S1294C43v21Ev
  virtual void  v22(); // _ZN7S1294C43v22Ev
  virtual void  v23(); // _ZN7S1294C43v23Ev
  virtual void  v24(); // _ZN7S1294C43v24Ev
  virtual void  v25(); // _ZN7S1294C43v25Ev
  virtual void  v26(); // _ZN7S1294C43v26Ev
  virtual void  v27(); // _ZN7S1294C43v27Ev
  virtual void  v28(); // _ZN7S1294C43v28Ev
  virtual void  v29(); // _ZN7S1294C43v29Ev
  virtual void  v30(); // _ZN7S1294C43v30Ev
  virtual void  v31(); // _ZN7S1294C43v31Ev
  virtual void  v32(); // _ZN7S1294C43v32Ev
  virtual void  v33(); // _ZN7S1294C43v33Ev
  virtual void  v34(); // _ZN7S1294C43v34Ev
  virtual void  v35(); // _ZN7S1294C43v35Ev
  virtual void  v36(); // _ZN7S1294C43v36Ev
  virtual void  v37(); // _ZN7S1294C43v37Ev
  virtual void  v38(); // _ZN7S1294C43v38Ev
  virtual void  v39(); // _ZN7S1294C43v39Ev
  virtual void  v40(); // _ZN7S1294C43v40Ev
  virtual void  v41(); // _ZN7S1294C43v41Ev
  virtual void  v42(); // _ZN7S1294C43v42Ev
  virtual void  v43(); // _ZN7S1294C43v43Ev
  virtual void  v44(); // _ZN7S1294C43v44Ev
  virtual void  v45(); // _ZN7S1294C43v45Ev
  virtual void  v46(); // _ZN7S1294C43v46Ev
  virtual void  v47(); // _ZN7S1294C43v47Ev
  virtual void  v48(); // _ZN7S1294C43v48Ev
  virtual void  v49(); // _ZN7S1294C43v49Ev
  virtual void  v50(); // _ZN7S1294C43v50Ev
  virtual void  v51(); // _ZN7S1294C43v51Ev
  virtual void  v52(); // _ZN7S1294C43v52Ev
  virtual void  v53(); // _ZN7S1294C43v53Ev
  virtual void  v54(); // _ZN7S1294C43v54Ev
  virtual void  v55(); // _ZN7S1294C43v55Ev
  virtual void  v56(); // _ZN7S1294C43v56Ev
  virtual void  v57(); // _ZN7S1294C43v57Ev
  virtual void  v58(); // _ZN7S1294C43v58Ev
  virtual void  v59(); // _ZN7S1294C43v59Ev
  virtual void  v60(); // _ZN7S1294C43v60Ev
  virtual void  v61(); // _ZN7S1294C43v61Ev
  virtual void  v62(); // _ZN7S1294C43v62Ev
  virtual void  v63(); // _ZN7S1294C43v63Ev
  virtual void  v64(); // _ZN7S1294C43v64Ev
  virtual void  v65(); // _ZN7S1294C43v65Ev
  virtual void  v66(); // _ZN7S1294C43v66Ev
  virtual void  v67(); // _ZN7S1294C43v67Ev
  virtual void  v68(); // _ZN7S1294C43v68Ev
  virtual void  v69(); // _ZN7S1294C43v69Ev
  virtual void  v70(); // _ZN7S1294C43v70Ev
  virtual void  v71(); // _ZN7S1294C43v71Ev
  virtual void  v72(); // _ZN7S1294C43v72Ev
  virtual void  v73(); // _ZN7S1294C43v73Ev
  S1294C4(); // tgen
};
//SIG(-1 S1294C4) 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]}


 S1294C4 ::~S1294C4(){ note_dtor("S1294C4", this);}
void  S1294C4 ::v10(){vfunc_called(this, "_ZN7S1294C43v10Ev");}
void  S1294C4 ::v11(){vfunc_called(this, "_ZN7S1294C43v11Ev");}
void  S1294C4 ::v12(){vfunc_called(this, "_ZN7S1294C43v12Ev");}
void  S1294C4 ::v13(){vfunc_called(this, "_ZN7S1294C43v13Ev");}
void  S1294C4 ::v14(){vfunc_called(this, "_ZN7S1294C43v14Ev");}
void  S1294C4 ::v15(){vfunc_called(this, "_ZN7S1294C43v15Ev");}
void  S1294C4 ::v16(){vfunc_called(this, "_ZN7S1294C43v16Ev");}
void  S1294C4 ::v17(){vfunc_called(this, "_ZN7S1294C43v17Ev");}
void  S1294C4 ::v18(){vfunc_called(this, "_ZN7S1294C43v18Ev");}
void  S1294C4 ::v19(){vfunc_called(this, "_ZN7S1294C43v19Ev");}
void  S1294C4 ::v20(){vfunc_called(this, "_ZN7S1294C43v20Ev");}
void  S1294C4 ::v21(){vfunc_called(this, "_ZN7S1294C43v21Ev");}
void  S1294C4 ::v22(){vfunc_called(this, "_ZN7S1294C43v22Ev");}
void  S1294C4 ::v23(){vfunc_called(this, "_ZN7S1294C43v23Ev");}
void  S1294C4 ::v24(){vfunc_called(this, "_ZN7S1294C43v24Ev");}
void  S1294C4 ::v25(){vfunc_called(this, "_ZN7S1294C43v25Ev");}
void  S1294C4 ::v26(){vfunc_called(this, "_ZN7S1294C43v26Ev");}
void  S1294C4 ::v27(){vfunc_called(this, "_ZN7S1294C43v27Ev");}
void  S1294C4 ::v28(){vfunc_called(this, "_ZN7S1294C43v28Ev");}
void  S1294C4 ::v29(){vfunc_called(this, "_ZN7S1294C43v29Ev");}
void  S1294C4 ::v30(){vfunc_called(this, "_ZN7S1294C43v30Ev");}
void  S1294C4 ::v31(){vfunc_called(this, "_ZN7S1294C43v31Ev");}
void  S1294C4 ::v32(){vfunc_called(this, "_ZN7S1294C43v32Ev");}
void  S1294C4 ::v33(){vfunc_called(this, "_ZN7S1294C43v33Ev");}
void  S1294C4 ::v34(){vfunc_called(this, "_ZN7S1294C43v34Ev");}
void  S1294C4 ::v35(){vfunc_called(this, "_ZN7S1294C43v35Ev");}
void  S1294C4 ::v36(){vfunc_called(this, "_ZN7S1294C43v36Ev");}
void  S1294C4 ::v37(){vfunc_called(this, "_ZN7S1294C43v37Ev");}
void  S1294C4 ::v38(){vfunc_called(this, "_ZN7S1294C43v38Ev");}
void  S1294C4 ::v39(){vfunc_called(this, "_ZN7S1294C43v39Ev");}
void  S1294C4 ::v40(){vfunc_called(this, "_ZN7S1294C43v40Ev");}
void  S1294C4 ::v41(){vfunc_called(this, "_ZN7S1294C43v41Ev");}
void  S1294C4 ::v42(){vfunc_called(this, "_ZN7S1294C43v42Ev");}
void  S1294C4 ::v43(){vfunc_called(this, "_ZN7S1294C43v43Ev");}
void  S1294C4 ::v44(){vfunc_called(this, "_ZN7S1294C43v44Ev");}
void  S1294C4 ::v45(){vfunc_called(this, "_ZN7S1294C43v45Ev");}
void  S1294C4 ::v46(){vfunc_called(this, "_ZN7S1294C43v46Ev");}
void  S1294C4 ::v47(){vfunc_called(this, "_ZN7S1294C43v47Ev");}
void  S1294C4 ::v48(){vfunc_called(this, "_ZN7S1294C43v48Ev");}
void  S1294C4 ::v49(){vfunc_called(this, "_ZN7S1294C43v49Ev");}
void  S1294C4 ::v50(){vfunc_called(this, "_ZN7S1294C43v50Ev");}
void  S1294C4 ::v51(){vfunc_called(this, "_ZN7S1294C43v51Ev");}
void  S1294C4 ::v52(){vfunc_called(this, "_ZN7S1294C43v52Ev");}
void  S1294C4 ::v53(){vfunc_called(this, "_ZN7S1294C43v53Ev");}
void  S1294C4 ::v54(){vfunc_called(this, "_ZN7S1294C43v54Ev");}
void  S1294C4 ::v55(){vfunc_called(this, "_ZN7S1294C43v55Ev");}
void  S1294C4 ::v56(){vfunc_called(this, "_ZN7S1294C43v56Ev");}
void  S1294C4 ::v57(){vfunc_called(this, "_ZN7S1294C43v57Ev");}
void  S1294C4 ::v58(){vfunc_called(this, "_ZN7S1294C43v58Ev");}
void  S1294C4 ::v59(){vfunc_called(this, "_ZN7S1294C43v59Ev");}
void  S1294C4 ::v60(){vfunc_called(this, "_ZN7S1294C43v60Ev");}
void  S1294C4 ::v61(){vfunc_called(this, "_ZN7S1294C43v61Ev");}
void  S1294C4 ::v62(){vfunc_called(this, "_ZN7S1294C43v62Ev");}
void  S1294C4 ::v63(){vfunc_called(this, "_ZN7S1294C43v63Ev");}
void  S1294C4 ::v64(){vfunc_called(this, "_ZN7S1294C43v64Ev");}
void  S1294C4 ::v65(){vfunc_called(this, "_ZN7S1294C43v65Ev");}
void  S1294C4 ::v66(){vfunc_called(this, "_ZN7S1294C43v66Ev");}
void  S1294C4 ::v67(){vfunc_called(this, "_ZN7S1294C43v67Ev");}
void  S1294C4 ::v68(){vfunc_called(this, "_ZN7S1294C43v68Ev");}
void  S1294C4 ::v69(){vfunc_called(this, "_ZN7S1294C43v69Ev");}
void  S1294C4 ::v70(){vfunc_called(this, "_ZN7S1294C43v70Ev");}
void  S1294C4 ::v71(){vfunc_called(this, "_ZN7S1294C43v71Ev");}
void  S1294C4 ::v72(){vfunc_called(this, "_ZN7S1294C43v72Ev");}
void  S1294C4 ::v73(){vfunc_called(this, "_ZN7S1294C43v73Ev");}
S1294C4 ::S1294C4(){ note_ctor("S1294C4", this);} // tgen

static void Test_S1294C4()
{
  extern Class_Descriptor cd_S1294C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S1294C4, buf);
    S1294C4 *dp, &lv = *(dp=new (buf) S1294C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S1294C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1294C4)");
    check_field_offset(lv, s1294c4f0, ABISELECT(8,4), "S1294C4.s1294c4f0");
    check_field_offset(lv, s1294c4f1, ABISELECT(16,8), "S1294C4.s1294c4f1");
    check_field_offset(lv, s1294c4f2, ABISELECT(24,16), "S1294C4.s1294c4f2");
    check_field_offset(lv, s1294c4f3, ABISELECT(56,32), "S1294C4.s1294c4f3");
    check_field_offset(lv, s1294c4f4, ABISELECT(64,40), "S1294C4.s1294c4f4");
    check_field_offset(lv, s1294c4f5, ABISELECT(72,44), "S1294C4.s1294c4f5");
    check_field_offset(lv, s1294c4f6, ABISELECT(80,52), "S1294C4.s1294c4f6");
    test_class_info(&lv, &cd_S1294C4);
    dp->~S1294C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1294C4(Test_S1294C4, "S1294C4", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN7S1294C4C1Ev();
extern void _ZN7S1294C4D1Ev();
Name_Map name_map_S1294C4[] = {
  NSPAIR(_ZN7S1294C4C1Ev),
  NSPAIR(_ZN7S1294C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S1294C4[];
extern void _ZN7S1294C4D1Ev();
extern void _ZN7S1294C4D0Ev();
extern void _ZN7S1294C43v10Ev();
extern void _ZN7S1294C43v11Ev();
extern void _ZN7S1294C43v12Ev();
extern void _ZN7S1294C43v13Ev();
extern void _ZN7S1294C43v14Ev();
extern void _ZN7S1294C43v15Ev();
extern void _ZN7S1294C43v16Ev();
extern void _ZN7S1294C43v17Ev();
extern void _ZN7S1294C43v18Ev();
extern void _ZN7S1294C43v19Ev();
extern void _ZN7S1294C43v20Ev();
extern void _ZN7S1294C43v21Ev();
extern void _ZN7S1294C43v22Ev();
extern void _ZN7S1294C43v23Ev();
extern void _ZN7S1294C43v24Ev();
extern void _ZN7S1294C43v25Ev();
extern void _ZN7S1294C43v26Ev();
extern void _ZN7S1294C43v27Ev();
extern void _ZN7S1294C43v28Ev();
extern void _ZN7S1294C43v29Ev();
extern void _ZN7S1294C43v30Ev();
extern void _ZN7S1294C43v31Ev();
extern void _ZN7S1294C43v32Ev();
extern void _ZN7S1294C43v33Ev();
extern void _ZN7S1294C43v34Ev();
extern void _ZN7S1294C43v35Ev();
extern void _ZN7S1294C43v36Ev();
extern void _ZN7S1294C43v37Ev();
extern void _ZN7S1294C43v38Ev();
extern void _ZN7S1294C43v39Ev();
extern void _ZN7S1294C43v40Ev();
extern void _ZN7S1294C43v41Ev();
extern void _ZN7S1294C43v42Ev();
extern void _ZN7S1294C43v43Ev();
extern void _ZN7S1294C43v44Ev();
extern void _ZN7S1294C43v45Ev();
extern void _ZN7S1294C43v46Ev();
extern void _ZN7S1294C43v47Ev();
extern void _ZN7S1294C43v48Ev();
extern void _ZN7S1294C43v49Ev();
extern void _ZN7S1294C43v50Ev();
extern void _ZN7S1294C43v51Ev();
extern void _ZN7S1294C43v52Ev();
extern void _ZN7S1294C43v53Ev();
extern void _ZN7S1294C43v54Ev();
extern void _ZN7S1294C43v55Ev();
extern void _ZN7S1294C43v56Ev();
extern void _ZN7S1294C43v57Ev();
extern void _ZN7S1294C43v58Ev();
extern void _ZN7S1294C43v59Ev();
extern void _ZN7S1294C43v60Ev();
extern void _ZN7S1294C43v61Ev();
extern void _ZN7S1294C43v62Ev();
extern void _ZN7S1294C43v63Ev();
extern void _ZN7S1294C43v64Ev();
extern void _ZN7S1294C43v65Ev();
extern void _ZN7S1294C43v66Ev();
extern void _ZN7S1294C43v67Ev();
extern void _ZN7S1294C43v68Ev();
extern void _ZN7S1294C43v69Ev();
extern void _ZN7S1294C43v70Ev();
extern void _ZN7S1294C43v71Ev();
extern void _ZN7S1294C43v72Ev();
extern void _ZN7S1294C43v73Ev();
static  VTBL_ENTRY vtc_S1294C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1294C4[0]),
  (VTBL_ENTRY)&_ZN7S1294C4D1Ev,
  (VTBL_ENTRY)&_ZN7S1294C4D0Ev,
  (VTBL_ENTRY)&_ZN7S1294C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1294C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1294C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1294C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1294C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1294C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1294C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1294C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1294C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1294C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1294C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1294C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1294C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1294C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1294C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1294C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1294C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1294C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1294C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1294C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1294C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1294C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1294C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1294C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1294C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1294C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1294C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1294C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1294C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1294C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1294C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1294C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1294C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1294C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1294C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1294C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1294C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1294C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1294C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1294C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1294C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1294C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1294C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1294C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1294C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1294C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1294C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1294C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1294C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1294C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1294C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1294C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1294C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1294C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1294C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1294C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1294C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1294C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1294C43v68Ev,
  (VTBL_ENTRY)&_ZN7S1294C43v69Ev,
  (VTBL_ENTRY)&_ZN7S1294C43v70Ev,
  (VTBL_ENTRY)&_ZN7S1294C43v71Ev,
  (VTBL_ENTRY)&_ZN7S1294C43v72Ev,
  (VTBL_ENTRY)&_ZN7S1294C43v73Ev,
};
extern VTBL_ENTRY _ZTI7S1294C4[];
extern  VTBL_ENTRY _ZTV7S1294C4[];
Class_Descriptor cd_S1294C4 = {  "S1294C4", // class name
  0,0,//no base classes
  &(vtc_S1294C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI7S1294C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S1294C4),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  S1294C3  : S1294C4 {
  unsigned int s1294c3f0:1;
  unsigned int s1294c3f1:1;
  unsigned int s1294c3f2:1;
  unsigned int s1294c3f3:1;
  unsigned int s1294c3f4:1;
  unsigned int s1294c3f5:1;
  unsigned int s1294c3f6:1;
  ::S3625C32 s1294c3f7;
  virtual  ~S1294C3(); // _ZN7S1294C3D1Ev
  virtual void  v74(); // _ZN7S1294C33v74Ev
  virtual void  v75(); // _ZN7S1294C33v75Ev
  virtual void  v76(); // _ZN7S1294C33v76Ev
  virtual void  v77(); // _ZN7S1294C33v77Ev
  virtual void  v78(); // _ZN7S1294C33v78Ev
  virtual void  v79(); // _ZN7S1294C33v79Ev
  virtual void  v80(); // _ZN7S1294C33v80Ev
  virtual void  v81(); // _ZN7S1294C33v81Ev
  virtual void  v82(); // _ZN7S1294C33v82Ev
  virtual void  v83(); // _ZN7S1294C33v83Ev
  virtual void  v84(); // _ZN7S1294C33v84Ev
  virtual void  v85(); // _ZN7S1294C33v85Ev
  virtual void  v86(); // _ZN7S1294C33v86Ev
  virtual void  v87(); // _ZN7S1294C33v87Ev
  virtual void  v88(); // _ZN7S1294C33v88Ev
  virtual void  v89(); // _ZN7S1294C33v89Ev
  virtual void  v90(); // _ZN7S1294C33v90Ev
  virtual void  v91(); // _ZN7S1294C33v91Ev
  virtual void  v92(); // _ZN7S1294C33v92Ev
  virtual void  v93(); // _ZN7S1294C33v93Ev
  S1294C3(); // tgen
};
//SIG(-1 S1294C3) C1{ BC2{ 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 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 Fi FL Fp[4] Fi[2] Fp FC3{ m Fi[2]} Fp[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 FC4{ m}}


 S1294C3 ::~S1294C3(){ note_dtor("S1294C3", this);}
void  S1294C3 ::v74(){vfunc_called(this, "_ZN7S1294C33v74Ev");}
void  S1294C3 ::v75(){vfunc_called(this, "_ZN7S1294C33v75Ev");}
void  S1294C3 ::v76(){vfunc_called(this, "_ZN7S1294C33v76Ev");}
void  S1294C3 ::v77(){vfunc_called(this, "_ZN7S1294C33v77Ev");}
void  S1294C3 ::v78(){vfunc_called(this, "_ZN7S1294C33v78Ev");}
void  S1294C3 ::v79(){vfunc_called(this, "_ZN7S1294C33v79Ev");}
void  S1294C3 ::v80(){vfunc_called(this, "_ZN7S1294C33v80Ev");}
void  S1294C3 ::v81(){vfunc_called(this, "_ZN7S1294C33v81Ev");}
void  S1294C3 ::v82(){vfunc_called(this, "_ZN7S1294C33v82Ev");}
void  S1294C3 ::v83(){vfunc_called(this, "_ZN7S1294C33v83Ev");}
void  S1294C3 ::v84(){vfunc_called(this, "_ZN7S1294C33v84Ev");}
void  S1294C3 ::v85(){vfunc_called(this, "_ZN7S1294C33v85Ev");}
void  S1294C3 ::v86(){vfunc_called(this, "_ZN7S1294C33v86Ev");}
void  S1294C3 ::v87(){vfunc_called(this, "_ZN7S1294C33v87Ev");}
void  S1294C3 ::v88(){vfunc_called(this, "_ZN7S1294C33v88Ev");}
void  S1294C3 ::v89(){vfunc_called(this, "_ZN7S1294C33v89Ev");}
void  S1294C3 ::v90(){vfunc_called(this, "_ZN7S1294C33v90Ev");}
void  S1294C3 ::v91(){vfunc_called(this, "_ZN7S1294C33v91Ev");}
void  S1294C3 ::v92(){vfunc_called(this, "_ZN7S1294C33v92Ev");}
void  S1294C3 ::v93(){vfunc_called(this, "_ZN7S1294C33v93Ev");}
S1294C3 ::S1294C3(){ note_ctor("S1294C3", this);} // tgen

static void Test_S1294C3()
{
  extern Class_Descriptor cd_S1294C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(14,17)];
    init_test(&cd_S1294C3, buf);
    S1294C3 *dp, &lv = *(dp=new (buf) S1294C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(104,64), "sizeof(S1294C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1294C3)");
    check_base_class_offset(lv, (S1294C4*), 0, "S1294C3");
    set_bf_and_test(lv, s1294c3f0, ABISELECT(96,60), 0, 1, 1, "S1294C3");
    set_bf_and_test(lv, s1294c3f1, ABISELECT(96,60), 1, 1, 1, "S1294C3");
    set_bf_and_test(lv, s1294c3f2, ABISELECT(96,60), 2, 1, 1, "S1294C3");
    set_bf_and_test(lv, s1294c3f3, ABISELECT(96,60), 3, 1, 1, "S1294C3");
    set_bf_and_test(lv, s1294c3f4, ABISELECT(96,60), 4, 1, 1, "S1294C3");
    set_bf_and_test(lv, s1294c3f5, ABISELECT(96,60), 5, 1, 1, "S1294C3");
    set_bf_and_test(lv, s1294c3f6, ABISELECT(96,60), 6, 1, 1, "S1294C3");
    check_field_offset(lv, s1294c3f7, ABISELECT(97,61), "S1294C3.s1294c3f7");
    test_class_info(&lv, &cd_S1294C3);
    dp->~S1294C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1294C3(Test_S1294C3, "S1294C3", ABISELECT(104,64));

#else // __cplusplus

extern void _ZN7S1294C3C1Ev();
extern void _ZN7S1294C3D1Ev();
Name_Map name_map_S1294C3[] = {
  NSPAIR(_ZN7S1294C3C1Ev),
  NSPAIR(_ZN7S1294C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1294C4;
extern VTBL_ENTRY _ZTI7S1294C4[];
extern  VTBL_ENTRY _ZTV7S1294C4[];
static Base_Class bases_S1294C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1294C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI7S1294C3[];
extern void _ZN7S1294C3D1Ev();
extern void _ZN7S1294C3D0Ev();
extern void _ZN7S1294C43v10Ev();
extern void _ZN7S1294C43v11Ev();
extern void _ZN7S1294C43v12Ev();
extern void _ZN7S1294C43v13Ev();
extern void _ZN7S1294C43v14Ev();
extern void _ZN7S1294C43v15Ev();
extern void _ZN7S1294C43v16Ev();
extern void _ZN7S1294C43v17Ev();
extern void _ZN7S1294C43v18Ev();
extern void _ZN7S1294C43v19Ev();
extern void _ZN7S1294C43v20Ev();
extern void _ZN7S1294C43v21Ev();
extern void _ZN7S1294C43v22Ev();
extern void _ZN7S1294C43v23Ev();
extern void _ZN7S1294C43v24Ev();
extern void _ZN7S1294C43v25Ev();
extern void _ZN7S1294C43v26Ev();
extern void _ZN7S1294C43v27Ev();
extern void _ZN7S1294C43v28Ev();
extern void _ZN7S1294C43v29Ev();
extern void _ZN7S1294C43v30Ev();
extern void _ZN7S1294C43v31Ev();
extern void _ZN7S1294C43v32Ev();
extern void _ZN7S1294C43v33Ev();
extern void _ZN7S1294C43v34Ev();
extern void _ZN7S1294C43v35Ev();
extern void _ZN7S1294C43v36Ev();
extern void _ZN7S1294C43v37Ev();
extern void _ZN7S1294C43v38Ev();
extern void _ZN7S1294C43v39Ev();
extern void _ZN7S1294C43v40Ev();
extern void _ZN7S1294C43v41Ev();
extern void _ZN7S1294C43v42Ev();
extern void _ZN7S1294C43v43Ev();
extern void _ZN7S1294C43v44Ev();
extern void _ZN7S1294C43v45Ev();
extern void _ZN7S1294C43v46Ev();
extern void _ZN7S1294C43v47Ev();
extern void _ZN7S1294C43v48Ev();
extern void _ZN7S1294C43v49Ev();
extern void _ZN7S1294C43v50Ev();
extern void _ZN7S1294C43v51Ev();
extern void _ZN7S1294C43v52Ev();
extern void _ZN7S1294C43v53Ev();
extern void _ZN7S1294C43v54Ev();
extern void _ZN7S1294C43v55Ev();
extern void _ZN7S1294C43v56Ev();
extern void _ZN7S1294C43v57Ev();
extern void _ZN7S1294C43v58Ev();
extern void _ZN7S1294C43v59Ev();
extern void _ZN7S1294C43v60Ev();
extern void _ZN7S1294C43v61Ev();
extern void _ZN7S1294C43v62Ev();
extern void _ZN7S1294C43v63Ev();
extern void _ZN7S1294C43v64Ev();
extern void _ZN7S1294C43v65Ev();
extern void _ZN7S1294C43v66Ev();
extern void _ZN7S1294C43v67Ev();
extern void _ZN7S1294C43v68Ev();
extern void _ZN7S1294C43v69Ev();
extern void _ZN7S1294C43v70Ev();
extern void _ZN7S1294C43v71Ev();
extern void _ZN7S1294C43v72Ev();
extern void _ZN7S1294C43v73Ev();
extern void _ZN7S1294C33v74Ev();
extern void _ZN7S1294C33v75Ev();
extern void _ZN7S1294C33v76Ev();
extern void _ZN7S1294C33v77Ev();
extern void _ZN7S1294C33v78Ev();
extern void _ZN7S1294C33v79Ev();
extern void _ZN7S1294C33v80Ev();
extern void _ZN7S1294C33v81Ev();
extern void _ZN7S1294C33v82Ev();
extern void _ZN7S1294C33v83Ev();
extern void _ZN7S1294C33v84Ev();
extern void _ZN7S1294C33v85Ev();
extern void _ZN7S1294C33v86Ev();
extern void _ZN7S1294C33v87Ev();
extern void _ZN7S1294C33v88Ev();
extern void _ZN7S1294C33v89Ev();
extern void _ZN7S1294C33v90Ev();
extern void _ZN7S1294C33v91Ev();
extern void _ZN7S1294C33v92Ev();
extern void _ZN7S1294C33v93Ev();
static  VTBL_ENTRY vtc_S1294C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1294C3[0]),
  (VTBL_ENTRY)&_ZN7S1294C3D1Ev,
  (VTBL_ENTRY)&_ZN7S1294C3D0Ev,
  (VTBL_ENTRY)&_ZN7S1294C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1294C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1294C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1294C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1294C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1294C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1294C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1294C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1294C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1294C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1294C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1294C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1294C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1294C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1294C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1294C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1294C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1294C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1294C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1294C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1294C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1294C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1294C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1294C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1294C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1294C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1294C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1294C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1294C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1294C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1294C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1294C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1294C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1294C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1294C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1294C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1294C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1294C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1294C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1294C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1294C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1294C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1294C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1294C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1294C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1294C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1294C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1294C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1294C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1294C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1294C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1294C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1294C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1294C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1294C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1294C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1294C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1294C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1294C43v68Ev,
  (VTBL_ENTRY)&_ZN7S1294C43v69Ev,
  (VTBL_ENTRY)&_ZN7S1294C43v70Ev,
  (VTBL_ENTRY)&_ZN7S1294C43v71Ev,
  (VTBL_ENTRY)&_ZN7S1294C43v72Ev,
  (VTBL_ENTRY)&_ZN7S1294C43v73Ev,
  (VTBL_ENTRY)&_ZN7S1294C33v74Ev,
  (VTBL_ENTRY)&_ZN7S1294C33v75Ev,
  (VTBL_ENTRY)&_ZN7S1294C33v76Ev,
  (VTBL_ENTRY)&_ZN7S1294C33v77Ev,
  (VTBL_ENTRY)&_ZN7S1294C33v78Ev,
  (VTBL_ENTRY)&_ZN7S1294C33v79Ev,
  (VTBL_ENTRY)&_ZN7S1294C33v80Ev,
  (VTBL_ENTRY)&_ZN7S1294C33v81Ev,
  (VTBL_ENTRY)&_ZN7S1294C33v82Ev,
  (VTBL_ENTRY)&_ZN7S1294C33v83Ev,
  (VTBL_ENTRY)&_ZN7S1294C33v84Ev,
  (VTBL_ENTRY)&_ZN7S1294C33v85Ev,
  (VTBL_ENTRY)&_ZN7S1294C33v86Ev,
  (VTBL_ENTRY)&_ZN7S1294C33v87Ev,
  (VTBL_ENTRY)&_ZN7S1294C33v88Ev,
  (VTBL_ENTRY)&_ZN7S1294C33v89Ev,
  (VTBL_ENTRY)&_ZN7S1294C33v90Ev,
  (VTBL_ENTRY)&_ZN7S1294C33v91Ev,
  (VTBL_ENTRY)&_ZN7S1294C33v92Ev,
  (VTBL_ENTRY)&_ZN7S1294C33v93Ev,
};
extern VTBL_ENTRY _ZTI7S1294C3[];
extern  VTBL_ENTRY _ZTV7S1294C3[];
Class_Descriptor cd_S1294C3 = {  "S1294C3", // class name
  bases_S1294C3, 1,
  &(vtc_S1294C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(104,64), // object size
  NSPAIRA(_ZTI7S1294C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1294C3),88, //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  S1294C2  : S1294C3 {
  virtual  ~S1294C2(); // _ZN7S1294C2D1Ev
  virtual void  v94(); // _ZN7S1294C23v94Ev
  virtual void  v95(); // _ZN7S1294C23v95Ev
  S1294C2(); // tgen
};
//SIG(-1 S1294C2) C1{ BC2{ BC3{ vd 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 Fi FL Fp[4] Fi[2] Fp FC4{ m Fi[2]} Fp[2]} vd v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 FC5{ m}} vd v1 v2}


 S1294C2 ::~S1294C2(){ note_dtor("S1294C2", this);}
void  S1294C2 ::v94(){vfunc_called(this, "_ZN7S1294C23v94Ev");}
void  S1294C2 ::v95(){vfunc_called(this, "_ZN7S1294C23v95Ev");}
S1294C2 ::S1294C2(){ note_ctor("S1294C2", this);} // tgen

static void Test_S1294C2()
{
  extern Class_Descriptor cd_S1294C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(14,17)];
    init_test(&cd_S1294C2, buf);
    S1294C2 *dp, &lv = *(dp=new (buf) S1294C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(104,64), "sizeof(S1294C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1294C2)");
    check_base_class_offset(lv, (S1294C4*)(S1294C3*), 0, "S1294C2");
    check_base_class_offset(lv, (S1294C3*), 0, "S1294C2");
    test_class_info(&lv, &cd_S1294C2);
    dp->~S1294C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1294C2(Test_S1294C2, "S1294C2", ABISELECT(104,64));

#else // __cplusplus

extern void _ZN7S1294C2C1Ev();
extern void _ZN7S1294C2D1Ev();
Name_Map name_map_S1294C2[] = {
  NSPAIR(_ZN7S1294C2C1Ev),
  NSPAIR(_ZN7S1294C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1294C4;
extern VTBL_ENTRY _ZTI7S1294C4[];
extern  VTBL_ENTRY _ZTV7S1294C4[];
extern Class_Descriptor cd_S1294C3;
extern VTBL_ENTRY _ZTI7S1294C3[];
extern  VTBL_ENTRY _ZTV7S1294C3[];
static Base_Class bases_S1294C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1294C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S1294C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S1294C2[];
extern void _ZN7S1294C2D1Ev();
extern void _ZN7S1294C2D0Ev();
extern void _ZN7S1294C43v10Ev();
extern void _ZN7S1294C43v11Ev();
extern void _ZN7S1294C43v12Ev();
extern void _ZN7S1294C43v13Ev();
extern void _ZN7S1294C43v14Ev();
extern void _ZN7S1294C43v15Ev();
extern void _ZN7S1294C43v16Ev();
extern void _ZN7S1294C43v17Ev();
extern void _ZN7S1294C43v18Ev();
extern void _ZN7S1294C43v19Ev();
extern void _ZN7S1294C43v20Ev();
extern void _ZN7S1294C43v21Ev();
extern void _ZN7S1294C43v22Ev();
extern void _ZN7S1294C43v23Ev();
extern void _ZN7S1294C43v24Ev();
extern void _ZN7S1294C43v25Ev();
extern void _ZN7S1294C43v26Ev();
extern void _ZN7S1294C43v27Ev();
extern void _ZN7S1294C43v28Ev();
extern void _ZN7S1294C43v29Ev();
extern void _ZN7S1294C43v30Ev();
extern void _ZN7S1294C43v31Ev();
extern void _ZN7S1294C43v32Ev();
extern void _ZN7S1294C43v33Ev();
extern void _ZN7S1294C43v34Ev();
extern void _ZN7S1294C43v35Ev();
extern void _ZN7S1294C43v36Ev();
extern void _ZN7S1294C43v37Ev();
extern void _ZN7S1294C43v38Ev();
extern void _ZN7S1294C43v39Ev();
extern void _ZN7S1294C43v40Ev();
extern void _ZN7S1294C43v41Ev();
extern void _ZN7S1294C43v42Ev();
extern void _ZN7S1294C43v43Ev();
extern void _ZN7S1294C43v44Ev();
extern void _ZN7S1294C43v45Ev();
extern void _ZN7S1294C43v46Ev();
extern void _ZN7S1294C43v47Ev();
extern void _ZN7S1294C43v48Ev();
extern void _ZN7S1294C43v49Ev();
extern void _ZN7S1294C43v50Ev();
extern void _ZN7S1294C43v51Ev();
extern void _ZN7S1294C43v52Ev();
extern void _ZN7S1294C43v53Ev();
extern void _ZN7S1294C43v54Ev();
extern void _ZN7S1294C43v55Ev();
extern void _ZN7S1294C43v56Ev();
extern void _ZN7S1294C43v57Ev();
extern void _ZN7S1294C43v58Ev();
extern void _ZN7S1294C43v59Ev();
extern void _ZN7S1294C43v60Ev();
extern void _ZN7S1294C43v61Ev();
extern void _ZN7S1294C43v62Ev();
extern void _ZN7S1294C43v63Ev();
extern void _ZN7S1294C43v64Ev();
extern void _ZN7S1294C43v65Ev();
extern void _ZN7S1294C43v66Ev();
extern void _ZN7S1294C43v67Ev();
extern void _ZN7S1294C43v68Ev();
extern void _ZN7S1294C43v69Ev();
extern void _ZN7S1294C43v70Ev();
extern void _ZN7S1294C43v71Ev();
extern void _ZN7S1294C43v72Ev();
extern void _ZN7S1294C43v73Ev();
extern void _ZN7S1294C33v74Ev();
extern void _ZN7S1294C33v75Ev();
extern void _ZN7S1294C33v76Ev();
extern void _ZN7S1294C33v77Ev();
extern void _ZN7S1294C33v78Ev();
extern void _ZN7S1294C33v79Ev();
extern void _ZN7S1294C33v80Ev();
extern void _ZN7S1294C33v81Ev();
extern void _ZN7S1294C33v82Ev();
extern void _ZN7S1294C33v83Ev();
extern void _ZN7S1294C33v84Ev();
extern void _ZN7S1294C33v85Ev();
extern void _ZN7S1294C33v86Ev();
extern void _ZN7S1294C33v87Ev();
extern void _ZN7S1294C33v88Ev();
extern void _ZN7S1294C33v89Ev();
extern void _ZN7S1294C33v90Ev();
extern void _ZN7S1294C33v91Ev();
extern void _ZN7S1294C33v92Ev();
extern void _ZN7S1294C33v93Ev();
extern void _ZN7S1294C23v94Ev();
extern void _ZN7S1294C23v95Ev();
static  VTBL_ENTRY vtc_S1294C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1294C2[0]),
  (VTBL_ENTRY)&_ZN7S1294C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1294C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1294C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1294C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1294C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1294C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1294C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1294C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1294C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1294C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1294C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1294C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1294C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1294C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1294C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1294C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1294C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1294C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1294C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1294C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1294C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1294C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1294C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1294C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1294C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1294C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1294C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1294C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1294C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1294C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1294C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1294C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1294C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1294C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1294C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1294C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1294C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1294C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1294C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1294C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1294C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1294C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1294C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1294C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1294C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1294C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1294C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1294C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1294C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1294C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1294C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1294C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1294C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1294C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1294C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1294C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1294C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1294C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1294C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1294C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1294C43v68Ev,
  (VTBL_ENTRY)&_ZN7S1294C43v69Ev,
  (VTBL_ENTRY)&_ZN7S1294C43v70Ev,
  (VTBL_ENTRY)&_ZN7S1294C43v71Ev,
  (VTBL_ENTRY)&_ZN7S1294C43v72Ev,
  (VTBL_ENTRY)&_ZN7S1294C43v73Ev,
  (VTBL_ENTRY)&_ZN7S1294C33v74Ev,
  (VTBL_ENTRY)&_ZN7S1294C33v75Ev,
  (VTBL_ENTRY)&_ZN7S1294C33v76Ev,
  (VTBL_ENTRY)&_ZN7S1294C33v77Ev,
  (VTBL_ENTRY)&_ZN7S1294C33v78Ev,
  (VTBL_ENTRY)&_ZN7S1294C33v79Ev,
  (VTBL_ENTRY)&_ZN7S1294C33v80Ev,
  (VTBL_ENTRY)&_ZN7S1294C33v81Ev,
  (VTBL_ENTRY)&_ZN7S1294C33v82Ev,
  (VTBL_ENTRY)&_ZN7S1294C33v83Ev,
  (VTBL_ENTRY)&_ZN7S1294C33v84Ev,
  (VTBL_ENTRY)&_ZN7S1294C33v85Ev,
  (VTBL_ENTRY)&_ZN7S1294C33v86Ev,
  (VTBL_ENTRY)&_ZN7S1294C33v87Ev,
  (VTBL_ENTRY)&_ZN7S1294C33v88Ev,
  (VTBL_ENTRY)&_ZN7S1294C33v89Ev,
  (VTBL_ENTRY)&_ZN7S1294C33v90Ev,
  (VTBL_ENTRY)&_ZN7S1294C33v91Ev,
  (VTBL_ENTRY)&_ZN7S1294C33v92Ev,
  (VTBL_ENTRY)&_ZN7S1294C33v93Ev,
  (VTBL_ENTRY)&_ZN7S1294C23v94Ev,
  (VTBL_ENTRY)&_ZN7S1294C23v95Ev,
};
extern VTBL_ENTRY _ZTI7S1294C2[];
extern  VTBL_ENTRY _ZTV7S1294C2[];
Class_Descriptor cd_S1294C2 = {  "S1294C2", // class name
  bases_S1294C2, 2,
  &(vtc_S1294C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(104,64), // object size
  NSPAIRA(_ZTI7S1294C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1294C2),90, //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  S1294C1  : S1294C2 {
  ::S1292C12 s1294c1f0;
  ::S1292C12 s1294c1f1;
  ::S1289C10_nt s1294c1f2;
  char s1294c1f3;
  unsigned int s1294c1f4:1;
  unsigned int s1294c1f5:1;
  unsigned int s1294c1f6:1;
  unsigned int s1294c1f7:1;
  ::S1289C10_nt s1294c1f8;
  int s1294c1f9[2];
  ::S1289C10_nt s1294c1f10;
  virtual  ~S1294C1(); // _ZN7S1294C1D1Ev
  virtual void  v1(); // _ZN7S1294C12v1Ev
  virtual void  v2(); // _ZN7S1294C12v2Ev
  virtual void  v3(); // _ZN7S1294C12v3Ev
  virtual void  v4(); // _ZN7S1294C12v4Ev
  virtual void  v5(); // _ZN7S1294C12v5Ev
  virtual void  v6(); // _ZN7S1294C12v6Ev
  virtual void  v7(); // _ZN7S1294C12v7Ev
  virtual void  v8(); // _ZN7S1294C12v8Ev
  virtual void  v9(); // _ZN7S1294C12v9Ev
  S1294C1(); // tgen
};
//SIG(1 S1294C1) C1{ BC2{ BC3{ BC4{ vd 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 Fi FL Fp[4] Fi[2] Fp FC5{ m Fi[2]} Fp[2]} vd v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 v91 v92 v93 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 FC6{ m}} vd v94 v95} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 FC7{ BC8{ m Fc[4] FC9{ BC10{ BC11{ m Fp Fi[2]}}} Fi[2]} Fp} FC7 FC12{ BC8 Fp} Fc Fi:1 Fi:1 Fi:1 Fi:1 FC12 Fi[2] FC12}


 S1294C1 ::~S1294C1(){ note_dtor("S1294C1", this);}
void  S1294C1 ::v1(){vfunc_called(this, "_ZN7S1294C12v1Ev");}
void  S1294C1 ::v2(){vfunc_called(this, "_ZN7S1294C12v2Ev");}
void  S1294C1 ::v3(){vfunc_called(this, "_ZN7S1294C12v3Ev");}
void  S1294C1 ::v4(){vfunc_called(this, "_ZN7S1294C12v4Ev");}
void  S1294C1 ::v5(){vfunc_called(this, "_ZN7S1294C12v5Ev");}
void  S1294C1 ::v6(){vfunc_called(this, "_ZN7S1294C12v6Ev");}
void  S1294C1 ::v7(){vfunc_called(this, "_ZN7S1294C12v7Ev");}
void  S1294C1 ::v8(){vfunc_called(this, "_ZN7S1294C12v8Ev");}
void  S1294C1 ::v9(){vfunc_called(this, "_ZN7S1294C12v9Ev");}
S1294C1 ::S1294C1(){ note_ctor("S1294C1", this);} // tgen

static void Test_S1294C1()
{
  extern Class_Descriptor cd_S1294C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(41,55)];
    init_test(&cd_S1294C1, buf);
    S1294C1 *dp, &lv = *(dp=new (buf) S1294C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(320,216), "sizeof(S1294C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1294C1)");
    check_base_class_offset(lv, (S1294C4*)(S1294C3*)(S1294C2*), 0, "S1294C1");
    check_base_class_offset(lv, (S1294C3*)(S1294C2*), 0, "S1294C1");
    check_base_class_offset(lv, (S1294C2*), 0, "S1294C1");
    check_field_offset(lv, s1294c1f0, ABISELECT(104,64), "S1294C1.s1294c1f0");
    check_field_offset(lv, s1294c1f1, ABISELECT(144,92), "S1294C1.s1294c1f1");
    check_field_offset(lv, s1294c1f2, ABISELECT(184,120), "S1294C1.s1294c1f2");
    check_field_offset(lv, s1294c1f3, ABISELECT(224,148), "S1294C1.s1294c1f3");
    set_bf_and_test(lv, s1294c1f4, ABISELECT(225,149), 0, 1, 1, "S1294C1");
    set_bf_and_test(lv, s1294c1f5, ABISELECT(225,149), 1, 1, 1, "S1294C1");
    set_bf_and_test(lv, s1294c1f6, ABISELECT(225,149), 2, 1, 1, "S1294C1");
    set_bf_and_test(lv, s1294c1f7, ABISELECT(225,149), 3, 1, 1, "S1294C1");
    check_field_offset(lv, s1294c1f8, ABISELECT(232,152), "S1294C1.s1294c1f8");
    check_field_offset(lv, s1294c1f9, ABISELECT(272,180), "S1294C1.s1294c1f9");
    check_field_offset(lv, s1294c1f10, ABISELECT(280,188), "S1294C1.s1294c1f10");
    test_class_info(&lv, &cd_S1294C1);
    dp->~S1294C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1294C1(Test_S1294C1, "S1294C1", ABISELECT(320,216));

#else // __cplusplus

extern void _ZN7S1294C1C1Ev();
extern void _ZN7S1294C1D1Ev();
Name_Map name_map_S1294C1[] = {
  NSPAIR(_ZN7S1294C1C1Ev),
  NSPAIR(_ZN7S1294C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1294C4;
extern VTBL_ENTRY _ZTI7S1294C4[];
extern  VTBL_ENTRY _ZTV7S1294C4[];
extern Class_Descriptor cd_S1294C3;
extern VTBL_ENTRY _ZTI7S1294C3[];
extern  VTBL_ENTRY _ZTV7S1294C3[];
extern Class_Descriptor cd_S1294C2;
extern VTBL_ENTRY _ZTI7S1294C2[];
extern  VTBL_ENTRY _ZTV7S1294C2[];
static Base_Class bases_S1294C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1294C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S1294C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S1294C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S1294C1[];
extern void _ZN7S1294C1D1Ev();
extern void _ZN7S1294C1D0Ev();
extern void _ZN7S1294C43v10Ev();
extern void _ZN7S1294C43v11Ev();
extern void _ZN7S1294C43v12Ev();
extern void _ZN7S1294C43v13Ev();
extern void _ZN7S1294C43v14Ev();
extern void _ZN7S1294C43v15Ev();
extern void _ZN7S1294C43v16Ev();
extern void _ZN7S1294C43v17Ev();
extern void _ZN7S1294C43v18Ev();
extern void _ZN7S1294C43v19Ev();
extern void _ZN7S1294C43v20Ev();
extern void _ZN7S1294C43v21Ev();
extern void _ZN7S1294C43v22Ev();
extern void _ZN7S1294C43v23Ev();
extern void _ZN7S1294C43v24Ev();
extern void _ZN7S1294C43v25Ev();
extern void _ZN7S1294C43v26Ev();
extern void _ZN7S1294C43v27Ev();
extern void _ZN7S1294C43v28Ev();
extern void _ZN7S1294C43v29Ev();
extern void _ZN7S1294C43v30Ev();
extern void _ZN7S1294C43v31Ev();
extern void _ZN7S1294C43v32Ev();
extern void _ZN7S1294C43v33Ev();
extern void _ZN7S1294C43v34Ev();
extern void _ZN7S1294C43v35Ev();
extern void _ZN7S1294C43v36Ev();
extern void _ZN7S1294C43v37Ev();
extern void _ZN7S1294C43v38Ev();
extern void _ZN7S1294C43v39Ev();
extern void _ZN7S1294C43v40Ev();
extern void _ZN7S1294C43v41Ev();
extern void _ZN7S1294C43v42Ev();
extern void _ZN7S1294C43v43Ev();
extern void _ZN7S1294C43v44Ev();
extern void _ZN7S1294C43v45Ev();
extern void _ZN7S1294C43v46Ev();
extern void _ZN7S1294C43v47Ev();
extern void _ZN7S1294C43v48Ev();
extern void _ZN7S1294C43v49Ev();
extern void _ZN7S1294C43v50Ev();
extern void _ZN7S1294C43v51Ev();
extern void _ZN7S1294C43v52Ev();
extern void _ZN7S1294C43v53Ev();
extern void _ZN7S1294C43v54Ev();
extern void _ZN7S1294C43v55Ev();
extern void _ZN7S1294C43v56Ev();
extern void _ZN7S1294C43v57Ev();
extern void _ZN7S1294C43v58Ev();
extern void _ZN7S1294C43v59Ev();
extern void _ZN7S1294C43v60Ev();
extern void _ZN7S1294C43v61Ev();
extern void _ZN7S1294C43v62Ev();
extern void _ZN7S1294C43v63Ev();
extern void _ZN7S1294C43v64Ev();
extern void _ZN7S1294C43v65Ev();
extern void _ZN7S1294C43v66Ev();
extern void _ZN7S1294C43v67Ev();
extern void _ZN7S1294C43v68Ev();
extern void _ZN7S1294C43v69Ev();
extern void _ZN7S1294C43v70Ev();
extern void _ZN7S1294C43v71Ev();
extern void _ZN7S1294C43v72Ev();
extern void _ZN7S1294C43v73Ev();
extern void _ZN7S1294C33v74Ev();
extern void _ZN7S1294C33v75Ev();
extern void _ZN7S1294C33v76Ev();
extern void _ZN7S1294C33v77Ev();
extern void _ZN7S1294C33v78Ev();
extern void _ZN7S1294C33v79Ev();
extern void _ZN7S1294C33v80Ev();
extern void _ZN7S1294C33v81Ev();
extern void _ZN7S1294C33v82Ev();
extern void _ZN7S1294C33v83Ev();
extern void _ZN7S1294C33v84Ev();
extern void _ZN7S1294C33v85Ev();
extern void _ZN7S1294C33v86Ev();
extern void _ZN7S1294C33v87Ev();
extern void _ZN7S1294C33v88Ev();
extern void _ZN7S1294C33v89Ev();
extern void _ZN7S1294C33v90Ev();
extern void _ZN7S1294C33v91Ev();
extern void _ZN7S1294C33v92Ev();
extern void _ZN7S1294C33v93Ev();
extern void _ZN7S1294C23v94Ev();
extern void _ZN7S1294C23v95Ev();
extern void _ZN7S1294C12v1Ev();
extern void _ZN7S1294C12v2Ev();
extern void _ZN7S1294C12v3Ev();
extern void _ZN7S1294C12v4Ev();
extern void _ZN7S1294C12v5Ev();
extern void _ZN7S1294C12v6Ev();
extern void _ZN7S1294C12v7Ev();
extern void _ZN7S1294C12v8Ev();
extern void _ZN7S1294C12v9Ev();
static  VTBL_ENTRY vtc_S1294C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1294C1[0]),
  (VTBL_ENTRY)&_ZN7S1294C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1294C1D0Ev,
  (VTBL_ENTRY)&_ZN7S1294C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1294C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1294C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1294C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1294C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1294C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1294C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1294C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1294C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1294C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1294C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1294C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1294C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1294C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1294C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1294C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1294C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1294C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1294C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1294C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1294C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1294C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1294C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1294C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1294C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1294C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1294C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1294C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1294C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1294C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1294C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1294C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1294C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1294C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1294C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1294C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1294C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1294C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1294C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1294C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1294C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1294C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1294C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1294C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1294C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1294C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1294C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1294C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1294C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1294C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1294C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1294C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1294C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1294C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1294C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1294C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1294C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1294C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1294C43v68Ev,
  (VTBL_ENTRY)&_ZN7S1294C43v69Ev,
  (VTBL_ENTRY)&_ZN7S1294C43v70Ev,
  (VTBL_ENTRY)&_ZN7S1294C43v71Ev,
  (VTBL_ENTRY)&_ZN7S1294C43v72Ev,
  (VTBL_ENTRY)&_ZN7S1294C43v73Ev,
  (VTBL_ENTRY)&_ZN7S1294C33v74Ev,
  (VTBL_ENTRY)&_ZN7S1294C33v75Ev,
  (VTBL_ENTRY)&_ZN7S1294C33v76Ev,
  (VTBL_ENTRY)&_ZN7S1294C33v77Ev,
  (VTBL_ENTRY)&_ZN7S1294C33v78Ev,
  (VTBL_ENTRY)&_ZN7S1294C33v79Ev,
  (VTBL_ENTRY)&_ZN7S1294C33v80Ev,
  (VTBL_ENTRY)&_ZN7S1294C33v81Ev,
  (VTBL_ENTRY)&_ZN7S1294C33v82Ev,
  (VTBL_ENTRY)&_ZN7S1294C33v83Ev,
  (VTBL_ENTRY)&_ZN7S1294C33v84Ev,
  (VTBL_ENTRY)&_ZN7S1294C33v85Ev,
  (VTBL_ENTRY)&_ZN7S1294C33v86Ev,
  (VTBL_ENTRY)&_ZN7S1294C33v87Ev,
  (VTBL_ENTRY)&_ZN7S1294C33v88Ev,
  (VTBL_ENTRY)&_ZN7S1294C33v89Ev,
  (VTBL_ENTRY)&_ZN7S1294C33v90Ev,
  (VTBL_ENTRY)&_ZN7S1294C33v91Ev,
  (VTBL_ENTRY)&_ZN7S1294C33v92Ev,
  (VTBL_ENTRY)&_ZN7S1294C33v93Ev,
  (VTBL_ENTRY)&_ZN7S1294C23v94Ev,
  (VTBL_ENTRY)&_ZN7S1294C23v95Ev,
  (VTBL_ENTRY)&_ZN7S1294C12v1Ev,
  (VTBL_ENTRY)&_ZN7S1294C12v2Ev,
  (VTBL_ENTRY)&_ZN7S1294C12v3Ev,
  (VTBL_ENTRY)&_ZN7S1294C12v4Ev,
  (VTBL_ENTRY)&_ZN7S1294C12v5Ev,
  (VTBL_ENTRY)&_ZN7S1294C12v6Ev,
  (VTBL_ENTRY)&_ZN7S1294C12v7Ev,
  (VTBL_ENTRY)&_ZN7S1294C12v8Ev,
  (VTBL_ENTRY)&_ZN7S1294C12v9Ev,
};
extern VTBL_ENTRY _ZTI7S1294C1[];
extern  VTBL_ENTRY _ZTV7S1294C1[];
Class_Descriptor cd_S1294C1 = {  "S1294C1", // class name
  bases_S1294C1, 3,
  &(vtc_S1294C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(320,216), // object size
  NSPAIRA(_ZTI7S1294C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1294C1),99, //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  S1303C4  {
  int s1303c4f0;
  __tsi64 s1303c4f1;
  void *s1303c4f2[4];
  int s1303c4f3[2];
  void *s1303c4f4;
  ::S674C6_nt s1303c4f5;
  void *s1303c4f6[2];
  virtual  ~S1303C4(); // _ZN7S1303C4D1Ev
  virtual void  v11(); // _ZN7S1303C43v11Ev
  virtual void  v12(); // _ZN7S1303C43v12Ev
  virtual void  v13(); // _ZN7S1303C43v13Ev
  virtual void  v14(); // _ZN7S1303C43v14Ev
  virtual void  v15(); // _ZN7S1303C43v15Ev
  virtual void  v16(); // _ZN7S1303C43v16Ev
  virtual void  v17(); // _ZN7S1303C43v17Ev
  virtual void  v18(); // _ZN7S1303C43v18Ev
  virtual void  v19(); // _ZN7S1303C43v19Ev
  virtual void  v20(); // _ZN7S1303C43v20Ev
  virtual void  v21(); // _ZN7S1303C43v21Ev
  virtual void  v22(); // _ZN7S1303C43v22Ev
  virtual void  v23(); // _ZN7S1303C43v23Ev
  virtual void  v24(); // _ZN7S1303C43v24Ev
  virtual void  v25(); // _ZN7S1303C43v25Ev
  virtual void  v26(); // _ZN7S1303C43v26Ev
  virtual void  v27(); // _ZN7S1303C43v27Ev
  virtual void  v28(); // _ZN7S1303C43v28Ev
  virtual void  v29(); // _ZN7S1303C43v29Ev
  virtual void  v30(); // _ZN7S1303C43v30Ev
  virtual void  v31(); // _ZN7S1303C43v31Ev
  virtual void  v32(); // _ZN7S1303C43v32Ev
  virtual void  v33(); // _ZN7S1303C43v33Ev
  virtual void  v34(); // _ZN7S1303C43v34Ev
  virtual void  v35(); // _ZN7S1303C43v35Ev
  virtual void  v36(); // _ZN7S1303C43v36Ev
  virtual void  v37(); // _ZN7S1303C43v37Ev
  virtual void  v38(); // _ZN7S1303C43v38Ev
  virtual void  v39(); // _ZN7S1303C43v39Ev
  virtual void  v40(); // _ZN7S1303C43v40Ev
  virtual void  v41(); // _ZN7S1303C43v41Ev
  virtual void  v42(); // _ZN7S1303C43v42Ev
  virtual void  v43(); // _ZN7S1303C43v43Ev
  virtual void  v44(); // _ZN7S1303C43v44Ev
  virtual void  v45(); // _ZN7S1303C43v45Ev
  virtual void  v46(); // _ZN7S1303C43v46Ev
  virtual void  v47(); // _ZN7S1303C43v47Ev
  virtual void  v48(); // _ZN7S1303C43v48Ev
  virtual void  v49(); // _ZN7S1303C43v49Ev
  virtual void  v50(); // _ZN7S1303C43v50Ev
  virtual void  v51(); // _ZN7S1303C43v51Ev
  virtual void  v52(); // _ZN7S1303C43v52Ev
  virtual void  v53(); // _ZN7S1303C43v53Ev
  virtual void  v54(); // _ZN7S1303C43v54Ev
  virtual void  v55(); // _ZN7S1303C43v55Ev
  virtual void  v56(); // _ZN7S1303C43v56Ev
  virtual void  v57(); // _ZN7S1303C43v57Ev
  virtual void  v58(); // _ZN7S1303C43v58Ev
  virtual void  v59(); // _ZN7S1303C43v59Ev
  virtual void  v60(); // _ZN7S1303C43v60Ev
  virtual void  v61(); // _ZN7S1303C43v61Ev
  virtual void  v62(); // _ZN7S1303C43v62Ev
  virtual void  v63(); // _ZN7S1303C43v63Ev
  virtual void  v64(); // _ZN7S1303C43v64Ev
  virtual void  v65(); // _ZN7S1303C43v65Ev
  virtual void  v66(); // _ZN7S1303C43v66Ev
  virtual void  v67(); // _ZN7S1303C43v67Ev
  virtual void  v68(); // _ZN7S1303C43v68Ev
  virtual void  v69(); // _ZN7S1303C43v69Ev
  virtual void  v70(); // _ZN7S1303C43v70Ev
  virtual void  v71(); // _ZN7S1303C43v71Ev
  virtual void  v72(); // _ZN7S1303C43v72Ev
  virtual void  v73(); // _ZN7S1303C43v73Ev
  virtual void  v74(); // _ZN7S1303C43v74Ev
  S1303C4(); // tgen
};
//SIG(-1 S1303C4) 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]}


 S1303C4 ::~S1303C4(){ note_dtor("S1303C4", this);}
void  S1303C4 ::v11(){vfunc_called(this, "_ZN7S1303C43v11Ev");}
void  S1303C4 ::v12(){vfunc_called(this, "_ZN7S1303C43v12Ev");}
void  S1303C4 ::v13(){vfunc_called(this, "_ZN7S1303C43v13Ev");}
void  S1303C4 ::v14(){vfunc_called(this, "_ZN7S1303C43v14Ev");}
void  S1303C4 ::v15(){vfunc_called(this, "_ZN7S1303C43v15Ev");}
void  S1303C4 ::v16(){vfunc_called(this, "_ZN7S1303C43v16Ev");}
void  S1303C4 ::v17(){vfunc_called(this, "_ZN7S1303C43v17Ev");}
void  S1303C4 ::v18(){vfunc_called(this, "_ZN7S1303C43v18Ev");}
void  S1303C4 ::v19(){vfunc_called(this, "_ZN7S1303C43v19Ev");}
void  S1303C4 ::v20(){vfunc_called(this, "_ZN7S1303C43v20Ev");}
void  S1303C4 ::v21(){vfunc_called(this, "_ZN7S1303C43v21Ev");}
void  S1303C4 ::v22(){vfunc_called(this, "_ZN7S1303C43v22Ev");}
void  S1303C4 ::v23(){vfunc_called(this, "_ZN7S1303C43v23Ev");}
void  S1303C4 ::v24(){vfunc_called(this, "_ZN7S1303C43v24Ev");}
void  S1303C4 ::v25(){vfunc_called(this, "_ZN7S1303C43v25Ev");}
void  S1303C4 ::v26(){vfunc_called(this, "_ZN7S1303C43v26Ev");}
void  S1303C4 ::v27(){vfunc_called(this, "_ZN7S1303C43v27Ev");}
void  S1303C4 ::v28(){vfunc_called(this, "_ZN7S1303C43v28Ev");}
void  S1303C4 ::v29(){vfunc_called(this, "_ZN7S1303C43v29Ev");}
void  S1303C4 ::v30(){vfunc_called(this, "_ZN7S1303C43v30Ev");}
void  S1303C4 ::v31(){vfunc_called(this, "_ZN7S1303C43v31Ev");}
void  S1303C4 ::v32(){vfunc_called(this, "_ZN7S1303C43v32Ev");}
void  S1303C4 ::v33(){vfunc_called(this, "_ZN7S1303C43v33Ev");}
void  S1303C4 ::v34(){vfunc_called(this, "_ZN7S1303C43v34Ev");}
void  S1303C4 ::v35(){vfunc_called(this, "_ZN7S1303C43v35Ev");}
void  S1303C4 ::v36(){vfunc_called(this, "_ZN7S1303C43v36Ev");}
void  S1303C4 ::v37(){vfunc_called(this, "_ZN7S1303C43v37Ev");}
void  S1303C4 ::v38(){vfunc_called(this, "_ZN7S1303C43v38Ev");}
void  S1303C4 ::v39(){vfunc_called(this, "_ZN7S1303C43v39Ev");}
void  S1303C4 ::v40(){vfunc_called(this, "_ZN7S1303C43v40Ev");}
void  S1303C4 ::v41(){vfunc_called(this, "_ZN7S1303C43v41Ev");}
void  S1303C4 ::v42(){vfunc_called(this, "_ZN7S1303C43v42Ev");}
void  S1303C4 ::v43(){vfunc_called(this, "_ZN7S1303C43v43Ev");}
void  S1303C4 ::v44(){vfunc_called(this, "_ZN7S1303C43v44Ev");}
void  S1303C4 ::v45(){vfunc_called(this, "_ZN7S1303C43v45Ev");}
void  S1303C4 ::v46(){vfunc_called(this, "_ZN7S1303C43v46Ev");}
void  S1303C4 ::v47(){vfunc_called(this, "_ZN7S1303C43v47Ev");}
void  S1303C4 ::v48(){vfunc_called(this, "_ZN7S1303C43v48Ev");}
void  S1303C4 ::v49(){vfunc_called(this, "_ZN7S1303C43v49Ev");}
void  S1303C4 ::v50(){vfunc_called(this, "_ZN7S1303C43v50Ev");}
void  S1303C4 ::v51(){vfunc_called(this, "_ZN7S1303C43v51Ev");}
void  S1303C4 ::v52(){vfunc_called(this, "_ZN7S1303C43v52Ev");}
void  S1303C4 ::v53(){vfunc_called(this, "_ZN7S1303C43v53Ev");}
void  S1303C4 ::v54(){vfunc_called(this, "_ZN7S1303C43v54Ev");}
void  S1303C4 ::v55(){vfunc_called(this, "_ZN7S1303C43v55Ev");}
void  S1303C4 ::v56(){vfunc_called(this, "_ZN7S1303C43v56Ev");}
void  S1303C4 ::v57(){vfunc_called(this, "_ZN7S1303C43v57Ev");}
void  S1303C4 ::v58(){vfunc_called(this, "_ZN7S1303C43v58Ev");}
void  S1303C4 ::v59(){vfunc_called(this, "_ZN7S1303C43v59Ev");}
void  S1303C4 ::v60(){vfunc_called(this, "_ZN7S1303C43v60Ev");}
void  S1303C4 ::v61(){vfunc_called(this, "_ZN7S1303C43v61Ev");}
void  S1303C4 ::v62(){vfunc_called(this, "_ZN7S1303C43v62Ev");}
void  S1303C4 ::v63(){vfunc_called(this, "_ZN7S1303C43v63Ev");}
void  S1303C4 ::v64(){vfunc_called(this, "_ZN7S1303C43v64Ev");}
void  S1303C4 ::v65(){vfunc_called(this, "_ZN7S1303C43v65Ev");}
void  S1303C4 ::v66(){vfunc_called(this, "_ZN7S1303C43v66Ev");}
void  S1303C4 ::v67(){vfunc_called(this, "_ZN7S1303C43v67Ev");}
void  S1303C4 ::v68(){vfunc_called(this, "_ZN7S1303C43v68Ev");}
void  S1303C4 ::v69(){vfunc_called(this, "_ZN7S1303C43v69Ev");}
void  S1303C4 ::v70(){vfunc_called(this, "_ZN7S1303C43v70Ev");}
void  S1303C4 ::v71(){vfunc_called(this, "_ZN7S1303C43v71Ev");}
void  S1303C4 ::v72(){vfunc_called(this, "_ZN7S1303C43v72Ev");}
void  S1303C4 ::v73(){vfunc_called(this, "_ZN7S1303C43v73Ev");}
void  S1303C4 ::v74(){vfunc_called(this, "_ZN7S1303C43v74Ev");}
S1303C4 ::S1303C4(){ note_ctor("S1303C4", this);} // tgen

static void Test_S1303C4()
{
  extern Class_Descriptor cd_S1303C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S1303C4, buf);
    S1303C4 *dp, &lv = *(dp=new (buf) S1303C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S1303C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1303C4)");
    check_field_offset(lv, s1303c4f0, ABISELECT(8,4), "S1303C4.s1303c4f0");
    check_field_offset(lv, s1303c4f1, ABISELECT(16,8), "S1303C4.s1303c4f1");
    check_field_offset(lv, s1303c4f2, ABISELECT(24,16), "S1303C4.s1303c4f2");
    check_field_offset(lv, s1303c4f3, ABISELECT(56,32), "S1303C4.s1303c4f3");
    check_field_offset(lv, s1303c4f4, ABISELECT(64,40), "S1303C4.s1303c4f4");
    check_field_offset(lv, s1303c4f5, ABISELECT(72,44), "S1303C4.s1303c4f5");
    check_field_offset(lv, s1303c4f6, ABISELECT(80,52), "S1303C4.s1303c4f6");
    test_class_info(&lv, &cd_S1303C4);
    dp->~S1303C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1303C4(Test_S1303C4, "S1303C4", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN7S1303C4C1Ev();
extern void _ZN7S1303C4D1Ev();
Name_Map name_map_S1303C4[] = {
  NSPAIR(_ZN7S1303C4C1Ev),
  NSPAIR(_ZN7S1303C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S1303C4[];
extern void _ZN7S1303C4D1Ev();
extern void _ZN7S1303C4D0Ev();
extern void _ZN7S1303C43v11Ev();
extern void _ZN7S1303C43v12Ev();
extern void _ZN7S1303C43v13Ev();
extern void _ZN7S1303C43v14Ev();
extern void _ZN7S1303C43v15Ev();
extern void _ZN7S1303C43v16Ev();
extern void _ZN7S1303C43v17Ev();
extern void _ZN7S1303C43v18Ev();
extern void _ZN7S1303C43v19Ev();
extern void _ZN7S1303C43v20Ev();
extern void _ZN7S1303C43v21Ev();
extern void _ZN7S1303C43v22Ev();
extern void _ZN7S1303C43v23Ev();
extern void _ZN7S1303C43v24Ev();
extern void _ZN7S1303C43v25Ev();
extern void _ZN7S1303C43v26Ev();
extern void _ZN7S1303C43v27Ev();
extern void _ZN7S1303C43v28Ev();
extern void _ZN7S1303C43v29Ev();
extern void _ZN7S1303C43v30Ev();
extern void _ZN7S1303C43v31Ev();
extern void _ZN7S1303C43v32Ev();
extern void _ZN7S1303C43v33Ev();
extern void _ZN7S1303C43v34Ev();
extern void _ZN7S1303C43v35Ev();
extern void _ZN7S1303C43v36Ev();
extern void _ZN7S1303C43v37Ev();
extern void _ZN7S1303C43v38Ev();
extern void _ZN7S1303C43v39Ev();
extern void _ZN7S1303C43v40Ev();
extern void _ZN7S1303C43v41Ev();
extern void _ZN7S1303C43v42Ev();
extern void _ZN7S1303C43v43Ev();
extern void _ZN7S1303C43v44Ev();
extern void _ZN7S1303C43v45Ev();
extern void _ZN7S1303C43v46Ev();
extern void _ZN7S1303C43v47Ev();
extern void _ZN7S1303C43v48Ev();
extern void _ZN7S1303C43v49Ev();
extern void _ZN7S1303C43v50Ev();
extern void _ZN7S1303C43v51Ev();
extern void _ZN7S1303C43v52Ev();
extern void _ZN7S1303C43v53Ev();
extern void _ZN7S1303C43v54Ev();
extern void _ZN7S1303C43v55Ev();
extern void _ZN7S1303C43v56Ev();
extern void _ZN7S1303C43v57Ev();
extern void _ZN7S1303C43v58Ev();
extern void _ZN7S1303C43v59Ev();
extern void _ZN7S1303C43v60Ev();
extern void _ZN7S1303C43v61Ev();
extern void _ZN7S1303C43v62Ev();
extern void _ZN7S1303C43v63Ev();
extern void _ZN7S1303C43v64Ev();
extern void _ZN7S1303C43v65Ev();
extern void _ZN7S1303C43v66Ev();
extern void _ZN7S1303C43v67Ev();
extern void _ZN7S1303C43v68Ev();
extern void _ZN7S1303C43v69Ev();
extern void _ZN7S1303C43v70Ev();
extern void _ZN7S1303C43v71Ev();
extern void _ZN7S1303C43v72Ev();
extern void _ZN7S1303C43v73Ev();
extern void _ZN7S1303C43v74Ev();
static  VTBL_ENTRY vtc_S1303C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1303C4[0]),
  (VTBL_ENTRY)&_ZN7S1303C4D1Ev,
  (VTBL_ENTRY)&_ZN7S1303C4D0Ev,
  (VTBL_ENTRY)&_ZN7S1303C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1303C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1303C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1303C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1303C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1303C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1303C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1303C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1303C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1303C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1303C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1303C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1303C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1303C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1303C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1303C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1303C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1303C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1303C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1303C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1303C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1303C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1303C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1303C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1303C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1303C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1303C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1303C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1303C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1303C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1303C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1303C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1303C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1303C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1303C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1303C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1303C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1303C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1303C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1303C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1303C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1303C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1303C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1303C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1303C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1303C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1303C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1303C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1303C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1303C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1303C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1303C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1303C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1303C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1303C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1303C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1303C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1303C43v68Ev,
  (VTBL_ENTRY)&_ZN7S1303C43v69Ev,
  (VTBL_ENTRY)&_ZN7S1303C43v70Ev,
  (VTBL_ENTRY)&_ZN7S1303C43v71Ev,
  (VTBL_ENTRY)&_ZN7S1303C43v72Ev,
  (VTBL_ENTRY)&_ZN7S1303C43v73Ev,
  (VTBL_ENTRY)&_ZN7S1303C43v74Ev,
};
extern VTBL_ENTRY _ZTI7S1303C4[];
extern  VTBL_ENTRY _ZTV7S1303C4[];
Class_Descriptor cd_S1303C4 = {  "S1303C4", // class name
  0,0,//no base classes
  &(vtc_S1303C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI7S1303C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S1303C4),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  S1303C3  : S1303C4 {
  unsigned int s1303c3f0:1;
  unsigned int s1303c3f1:1;
  unsigned int s1303c3f2:1;
  unsigned int s1303c3f3:1;
  unsigned int s1303c3f4:1;
  unsigned int s1303c3f5:1;
  unsigned int s1303c3f6:1;
  ::S3625C32 s1303c3f7;
  virtual  ~S1303C3(); // _ZN7S1303C3D1Ev
  virtual void  v75(); // _ZN7S1303C33v75Ev
  virtual void  v76(); // _ZN7S1303C33v76Ev
  virtual void  v77(); // _ZN7S1303C33v77Ev
  virtual void  v78(); // _ZN7S1303C33v78Ev
  virtual void  v79(); // _ZN7S1303C33v79Ev
  virtual void  v80(); // _ZN7S1303C33v80Ev
  virtual void  v81(); // _ZN7S1303C33v81Ev
  virtual void  v82(); // _ZN7S1303C33v82Ev
  virtual void  v83(); // _ZN7S1303C33v83Ev
  virtual void  v84(); // _ZN7S1303C33v84Ev
  virtual void  v85(); // _ZN7S1303C33v85Ev
  virtual void  v86(); // _ZN7S1303C33v86Ev
  virtual void  v87(); // _ZN7S1303C33v87Ev
  virtual void  v88(); // _ZN7S1303C33v88Ev
  virtual void  v89(); // _ZN7S1303C33v89Ev
  virtual void  v90(); // _ZN7S1303C33v90Ev
  virtual void  v91(); // _ZN7S1303C33v91Ev
  virtual void  v92(); // _ZN7S1303C33v92Ev
  virtual void  v93(); // _ZN7S1303C33v93Ev
  virtual void  v94(); // _ZN7S1303C33v94Ev
  S1303C3(); // tgen
};
//SIG(-1 S1303C3) C1{ BC2{ 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 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 Fi FL Fp[4] Fi[2] Fp FC3{ m Fi[2]} Fp[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 FC4{ m}}


 S1303C3 ::~S1303C3(){ note_dtor("S1303C3", this);}
void  S1303C3 ::v75(){vfunc_called(this, "_ZN7S1303C33v75Ev");}
void  S1303C3 ::v76(){vfunc_called(this, "_ZN7S1303C33v76Ev");}
void  S1303C3 ::v77(){vfunc_called(this, "_ZN7S1303C33v77Ev");}
void  S1303C3 ::v78(){vfunc_called(this, "_ZN7S1303C33v78Ev");}
void  S1303C3 ::v79(){vfunc_called(this, "_ZN7S1303C33v79Ev");}
void  S1303C3 ::v80(){vfunc_called(this, "_ZN7S1303C33v80Ev");}
void  S1303C3 ::v81(){vfunc_called(this, "_ZN7S1303C33v81Ev");}
void  S1303C3 ::v82(){vfunc_called(this, "_ZN7S1303C33v82Ev");}
void  S1303C3 ::v83(){vfunc_called(this, "_ZN7S1303C33v83Ev");}
void  S1303C3 ::v84(){vfunc_called(this, "_ZN7S1303C33v84Ev");}
void  S1303C3 ::v85(){vfunc_called(this, "_ZN7S1303C33v85Ev");}
void  S1303C3 ::v86(){vfunc_called(this, "_ZN7S1303C33v86Ev");}
void  S1303C3 ::v87(){vfunc_called(this, "_ZN7S1303C33v87Ev");}
void  S1303C3 ::v88(){vfunc_called(this, "_ZN7S1303C33v88Ev");}
void  S1303C3 ::v89(){vfunc_called(this, "_ZN7S1303C33v89Ev");}
void  S1303C3 ::v90(){vfunc_called(this, "_ZN7S1303C33v90Ev");}
void  S1303C3 ::v91(){vfunc_called(this, "_ZN7S1303C33v91Ev");}
void  S1303C3 ::v92(){vfunc_called(this, "_ZN7S1303C33v92Ev");}
void  S1303C3 ::v93(){vfunc_called(this, "_ZN7S1303C33v93Ev");}
void  S1303C3 ::v94(){vfunc_called(this, "_ZN7S1303C33v94Ev");}
S1303C3 ::S1303C3(){ note_ctor("S1303C3", this);} // tgen

static void Test_S1303C3()
{
  extern Class_Descriptor cd_S1303C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(14,17)];
    init_test(&cd_S1303C3, buf);
    S1303C3 *dp, &lv = *(dp=new (buf) S1303C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(104,64), "sizeof(S1303C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1303C3)");
    check_base_class_offset(lv, (S1303C4*), 0, "S1303C3");
    set_bf_and_test(lv, s1303c3f0, ABISELECT(96,60), 0, 1, 1, "S1303C3");
    set_bf_and_test(lv, s1303c3f1, ABISELECT(96,60), 1, 1, 1, "S1303C3");
    set_bf_and_test(lv, s1303c3f2, ABISELECT(96,60), 2, 1, 1, "S1303C3");
    set_bf_and_test(lv, s1303c3f3, ABISELECT(96,60), 3, 1, 1, "S1303C3");
    set_bf_and_test(lv, s1303c3f4, ABISELECT(96,60), 4, 1, 1, "S1303C3");
    set_bf_and_test(lv, s1303c3f5, ABISELECT(96,60), 5, 1, 1, "S1303C3");
    set_bf_and_test(lv, s1303c3f6, ABISELECT(96,60), 6, 1, 1, "S1303C3");
    check_field_offset(lv, s1303c3f7, ABISELECT(97,61), "S1303C3.s1303c3f7");
    test_class_info(&lv, &cd_S1303C3);
    dp->~S1303C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1303C3(Test_S1303C3, "S1303C3", ABISELECT(104,64));

#else // __cplusplus

extern void _ZN7S1303C3C1Ev();
extern void _ZN7S1303C3D1Ev();
Name_Map name_map_S1303C3[] = {
  NSPAIR(_ZN7S1303C3C1Ev),
  NSPAIR(_ZN7S1303C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1303C4;
extern VTBL_ENTRY _ZTI7S1303C4[];
extern  VTBL_ENTRY _ZTV7S1303C4[];
static Base_Class bases_S1303C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1303C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI7S1303C3[];
extern void _ZN7S1303C3D1Ev();
extern void _ZN7S1303C3D0Ev();
extern void _ZN7S1303C43v11Ev();
extern void _ZN7S1303C43v12Ev();
extern void _ZN7S1303C43v13Ev();
extern void _ZN7S1303C43v14Ev();
extern void _ZN7S1303C43v15Ev();
extern void _ZN7S1303C43v16Ev();
extern void _ZN7S1303C43v17Ev();
extern void _ZN7S1303C43v18Ev();
extern void _ZN7S1303C43v19Ev();
extern void _ZN7S1303C43v20Ev();
extern void _ZN7S1303C43v21Ev();
extern void _ZN7S1303C43v22Ev();
extern void _ZN7S1303C43v23Ev();
extern void _ZN7S1303C43v24Ev();
extern void _ZN7S1303C43v25Ev();
extern void _ZN7S1303C43v26Ev();
extern void _ZN7S1303C43v27Ev();
extern void _ZN7S1303C43v28Ev();
extern void _ZN7S1303C43v29Ev();
extern void _ZN7S1303C43v30Ev();
extern void _ZN7S1303C43v31Ev();
extern void _ZN7S1303C43v32Ev();
extern void _ZN7S1303C43v33Ev();
extern void _ZN7S1303C43v34Ev();
extern void _ZN7S1303C43v35Ev();
extern void _ZN7S1303C43v36Ev();
extern void _ZN7S1303C43v37Ev();
extern void _ZN7S1303C43v38Ev();
extern void _ZN7S1303C43v39Ev();
extern void _ZN7S1303C43v40Ev();
extern void _ZN7S1303C43v41Ev();
extern void _ZN7S1303C43v42Ev();
extern void _ZN7S1303C43v43Ev();
extern void _ZN7S1303C43v44Ev();
extern void _ZN7S1303C43v45Ev();
extern void _ZN7S1303C43v46Ev();
extern void _ZN7S1303C43v47Ev();
extern void _ZN7S1303C43v48Ev();
extern void _ZN7S1303C43v49Ev();
extern void _ZN7S1303C43v50Ev();
extern void _ZN7S1303C43v51Ev();
extern void _ZN7S1303C43v52Ev();
extern void _ZN7S1303C43v53Ev();
extern void _ZN7S1303C43v54Ev();
extern void _ZN7S1303C43v55Ev();
extern void _ZN7S1303C43v56Ev();
extern void _ZN7S1303C43v57Ev();
extern void _ZN7S1303C43v58Ev();
extern void _ZN7S1303C43v59Ev();
extern void _ZN7S1303C43v60Ev();
extern void _ZN7S1303C43v61Ev();
extern void _ZN7S1303C43v62Ev();
extern void _ZN7S1303C43v63Ev();
extern void _ZN7S1303C43v64Ev();
extern void _ZN7S1303C43v65Ev();
extern void _ZN7S1303C43v66Ev();
extern void _ZN7S1303C43v67Ev();
extern void _ZN7S1303C43v68Ev();
extern void _ZN7S1303C43v69Ev();
extern void _ZN7S1303C43v70Ev();
extern void _ZN7S1303C43v71Ev();
extern void _ZN7S1303C43v72Ev();
extern void _ZN7S1303C43v73Ev();
extern void _ZN7S1303C43v74Ev();
extern void _ZN7S1303C33v75Ev();
extern void _ZN7S1303C33v76Ev();
extern void _ZN7S1303C33v77Ev();
extern void _ZN7S1303C33v78Ev();
extern void _ZN7S1303C33v79Ev();
extern void _ZN7S1303C33v80Ev();
extern void _ZN7S1303C33v81Ev();
extern void _ZN7S1303C33v82Ev();
extern void _ZN7S1303C33v83Ev();
extern void _ZN7S1303C33v84Ev();
extern void _ZN7S1303C33v85Ev();
extern void _ZN7S1303C33v86Ev();
extern void _ZN7S1303C33v87Ev();
extern void _ZN7S1303C33v88Ev();
extern void _ZN7S1303C33v89Ev();
extern void _ZN7S1303C33v90Ev();
extern void _ZN7S1303C33v91Ev();
extern void _ZN7S1303C33v92Ev();
extern void _ZN7S1303C33v93Ev();
extern void _ZN7S1303C33v94Ev();
static  VTBL_ENTRY vtc_S1303C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1303C3[0]),
  (VTBL_ENTRY)&_ZN7S1303C3D1Ev,
  (VTBL_ENTRY)&_ZN7S1303C3D0Ev,
  (VTBL_ENTRY)&_ZN7S1303C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1303C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1303C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1303C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1303C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1303C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1303C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1303C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1303C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1303C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1303C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1303C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1303C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1303C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1303C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1303C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1303C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1303C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1303C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1303C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1303C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1303C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1303C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1303C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1303C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1303C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1303C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1303C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1303C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1303C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1303C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1303C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1303C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1303C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1303C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1303C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1303C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1303C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1303C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1303C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1303C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1303C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1303C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1303C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1303C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1303C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1303C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1303C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1303C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1303C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1303C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1303C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1303C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1303C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1303C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1303C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1303C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1303C43v68Ev,
  (VTBL_ENTRY)&_ZN7S1303C43v69Ev,
  (VTBL_ENTRY)&_ZN7S1303C43v70Ev,
  (VTBL_ENTRY)&_ZN7S1303C43v71Ev,
  (VTBL_ENTRY)&_ZN7S1303C43v72Ev,
  (VTBL_ENTRY)&_ZN7S1303C43v73Ev,
  (VTBL_ENTRY)&_ZN7S1303C43v74Ev,
  (VTBL_ENTRY)&_ZN7S1303C33v75Ev,
  (VTBL_ENTRY)&_ZN7S1303C33v76Ev,
  (VTBL_ENTRY)&_ZN7S1303C33v77Ev,
  (VTBL_ENTRY)&_ZN7S1303C33v78Ev,
  (VTBL_ENTRY)&_ZN7S1303C33v79Ev,
  (VTBL_ENTRY)&_ZN7S1303C33v80Ev,
  (VTBL_ENTRY)&_ZN7S1303C33v81Ev,
  (VTBL_ENTRY)&_ZN7S1303C33v82Ev,
  (VTBL_ENTRY)&_ZN7S1303C33v83Ev,
  (VTBL_ENTRY)&_ZN7S1303C33v84Ev,
  (VTBL_ENTRY)&_ZN7S1303C33v85Ev,
  (VTBL_ENTRY)&_ZN7S1303C33v86Ev,
  (VTBL_ENTRY)&_ZN7S1303C33v87Ev,
  (VTBL_ENTRY)&_ZN7S1303C33v88Ev,
  (VTBL_ENTRY)&_ZN7S1303C33v89Ev,
  (VTBL_ENTRY)&_ZN7S1303C33v90Ev,
  (VTBL_ENTRY)&_ZN7S1303C33v91Ev,
  (VTBL_ENTRY)&_ZN7S1303C33v92Ev,
  (VTBL_ENTRY)&_ZN7S1303C33v93Ev,
  (VTBL_ENTRY)&_ZN7S1303C33v94Ev,
};
extern VTBL_ENTRY _ZTI7S1303C3[];
extern  VTBL_ENTRY _ZTV7S1303C3[];
Class_Descriptor cd_S1303C3 = {  "S1303C3", // class name
  bases_S1303C3, 1,
  &(vtc_S1303C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(104,64), // object size
  NSPAIRA(_ZTI7S1303C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1303C3),88, //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  S1303C2  : S1303C3 {
  virtual  ~S1303C2(); // _ZN7S1303C2D1Ev
  virtual void  v95(); // _ZN7S1303C23v95Ev
  virtual void  v96(); // _ZN7S1303C23v96Ev
  virtual void  v97(); // _ZN7S1303C23v97Ev
  S1303C2(); // tgen
};
//SIG(-1 S1303C2) C1{ BC2{ BC3{ vd 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 Fi FL Fp[4] Fi[2] Fp FC4{ m Fi[2]} Fp[2]} vd v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 FC5{ m}} vd v1 v2 v3}


 S1303C2 ::~S1303C2(){ note_dtor("S1303C2", this);}
void  S1303C2 ::v95(){vfunc_called(this, "_ZN7S1303C23v95Ev");}
void  S1303C2 ::v96(){vfunc_called(this, "_ZN7S1303C23v96Ev");}
void  S1303C2 ::v97(){vfunc_called(this, "_ZN7S1303C23v97Ev");}
S1303C2 ::S1303C2(){ note_ctor("S1303C2", this);} // tgen

static void Test_S1303C2()
{
  extern Class_Descriptor cd_S1303C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(14,17)];
    init_test(&cd_S1303C2, buf);
    S1303C2 *dp, &lv = *(dp=new (buf) S1303C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(104,64), "sizeof(S1303C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1303C2)");
    check_base_class_offset(lv, (S1303C4*)(S1303C3*), 0, "S1303C2");
    check_base_class_offset(lv, (S1303C3*), 0, "S1303C2");
    test_class_info(&lv, &cd_S1303C2);
    dp->~S1303C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1303C2(Test_S1303C2, "S1303C2", ABISELECT(104,64));

#else // __cplusplus

extern void _ZN7S1303C2C1Ev();
extern void _ZN7S1303C2D1Ev();
Name_Map name_map_S1303C2[] = {
  NSPAIR(_ZN7S1303C2C1Ev),
  NSPAIR(_ZN7S1303C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1303C4;
extern VTBL_ENTRY _ZTI7S1303C4[];
extern  VTBL_ENTRY _ZTV7S1303C4[];
extern Class_Descriptor cd_S1303C3;
extern VTBL_ENTRY _ZTI7S1303C3[];
extern  VTBL_ENTRY _ZTV7S1303C3[];
static Base_Class bases_S1303C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1303C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S1303C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S1303C2[];
extern void _ZN7S1303C2D1Ev();
extern void _ZN7S1303C2D0Ev();
extern void _ZN7S1303C43v11Ev();
extern void _ZN7S1303C43v12Ev();
extern void _ZN7S1303C43v13Ev();
extern void _ZN7S1303C43v14Ev();
extern void _ZN7S1303C43v15Ev();
extern void _ZN7S1303C43v16Ev();
extern void _ZN7S1303C43v17Ev();
extern void _ZN7S1303C43v18Ev();
extern void _ZN7S1303C43v19Ev();
extern void _ZN7S1303C43v20Ev();
extern void _ZN7S1303C43v21Ev();
extern void _ZN7S1303C43v22Ev();
extern void _ZN7S1303C43v23Ev();
extern void _ZN7S1303C43v24Ev();
extern void _ZN7S1303C43v25Ev();
extern void _ZN7S1303C43v26Ev();
extern void _ZN7S1303C43v27Ev();
extern void _ZN7S1303C43v28Ev();
extern void _ZN7S1303C43v29Ev();
extern void _ZN7S1303C43v30Ev();
extern void _ZN7S1303C43v31Ev();
extern void _ZN7S1303C43v32Ev();
extern void _ZN7S1303C43v33Ev();
extern void _ZN7S1303C43v34Ev();
extern void _ZN7S1303C43v35Ev();
extern void _ZN7S1303C43v36Ev();
extern void _ZN7S1303C43v37Ev();
extern void _ZN7S1303C43v38Ev();
extern void _ZN7S1303C43v39Ev();
extern void _ZN7S1303C43v40Ev();
extern void _ZN7S1303C43v41Ev();
extern void _ZN7S1303C43v42Ev();
extern void _ZN7S1303C43v43Ev();
extern void _ZN7S1303C43v44Ev();
extern void _ZN7S1303C43v45Ev();
extern void _ZN7S1303C43v46Ev();
extern void _ZN7S1303C43v47Ev();
extern void _ZN7S1303C43v48Ev();
extern void _ZN7S1303C43v49Ev();
extern void _ZN7S1303C43v50Ev();
extern void _ZN7S1303C43v51Ev();
extern void _ZN7S1303C43v52Ev();
extern void _ZN7S1303C43v53Ev();
extern void _ZN7S1303C43v54Ev();
extern void _ZN7S1303C43v55Ev();
extern void _ZN7S1303C43v56Ev();
extern void _ZN7S1303C43v57Ev();
extern void _ZN7S1303C43v58Ev();
extern void _ZN7S1303C43v59Ev();
extern void _ZN7S1303C43v60Ev();
extern void _ZN7S1303C43v61Ev();
extern void _ZN7S1303C43v62Ev();
extern void _ZN7S1303C43v63Ev();
extern void _ZN7S1303C43v64Ev();
extern void _ZN7S1303C43v65Ev();
extern void _ZN7S1303C43v66Ev();
extern void _ZN7S1303C43v67Ev();
extern void _ZN7S1303C43v68Ev();
extern void _ZN7S1303C43v69Ev();
extern void _ZN7S1303C43v70Ev();
extern void _ZN7S1303C43v71Ev();
extern void _ZN7S1303C43v72Ev();
extern void _ZN7S1303C43v73Ev();
extern void _ZN7S1303C43v74Ev();
extern void _ZN7S1303C33v75Ev();
extern void _ZN7S1303C33v76Ev();
extern void _ZN7S1303C33v77Ev();
extern void _ZN7S1303C33v78Ev();
extern void _ZN7S1303C33v79Ev();
extern void _ZN7S1303C33v80Ev();
extern void _ZN7S1303C33v81Ev();
extern void _ZN7S1303C33v82Ev();
extern void _ZN7S1303C33v83Ev();
extern void _ZN7S1303C33v84Ev();
extern void _ZN7S1303C33v85Ev();
extern void _ZN7S1303C33v86Ev();
extern void _ZN7S1303C33v87Ev();
extern void _ZN7S1303C33v88Ev();
extern void _ZN7S1303C33v89Ev();
extern void _ZN7S1303C33v90Ev();
extern void _ZN7S1303C33v91Ev();
extern void _ZN7S1303C33v92Ev();
extern void _ZN7S1303C33v93Ev();
extern void _ZN7S1303C33v94Ev();
extern void _ZN7S1303C23v95Ev();
extern void _ZN7S1303C23v96Ev();
extern void _ZN7S1303C23v97Ev();
static  VTBL_ENTRY vtc_S1303C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1303C2[0]),
  (VTBL_ENTRY)&_ZN7S1303C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1303C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1303C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1303C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1303C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1303C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1303C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1303C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1303C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1303C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1303C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1303C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1303C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1303C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1303C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1303C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1303C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1303C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1303C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1303C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1303C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1303C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1303C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1303C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1303C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1303C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1303C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1303C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1303C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1303C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1303C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1303C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1303C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1303C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1303C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1303C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1303C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1303C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1303C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1303C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1303C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1303C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1303C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1303C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1303C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1303C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1303C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1303C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1303C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1303C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1303C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1303C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1303C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1303C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1303C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1303C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1303C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1303C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1303C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1303C43v68Ev,
  (VTBL_ENTRY)&_ZN7S1303C43v69Ev,
  (VTBL_ENTRY)&_ZN7S1303C43v70Ev,
  (VTBL_ENTRY)&_ZN7S1303C43v71Ev,
  (VTBL_ENTRY)&_ZN7S1303C43v72Ev,
  (VTBL_ENTRY)&_ZN7S1303C43v73Ev,
  (VTBL_ENTRY)&_ZN7S1303C43v74Ev,
  (VTBL_ENTRY)&_ZN7S1303C33v75Ev,
  (VTBL_ENTRY)&_ZN7S1303C33v76Ev,
  (VTBL_ENTRY)&_ZN7S1303C33v77Ev,
  (VTBL_ENTRY)&_ZN7S1303C33v78Ev,
  (VTBL_ENTRY)&_ZN7S1303C33v79Ev,
  (VTBL_ENTRY)&_ZN7S1303C33v80Ev,
  (VTBL_ENTRY)&_ZN7S1303C33v81Ev,
  (VTBL_ENTRY)&_ZN7S1303C33v82Ev,
  (VTBL_ENTRY)&_ZN7S1303C33v83Ev,
  (VTBL_ENTRY)&_ZN7S1303C33v84Ev,
  (VTBL_ENTRY)&_ZN7S1303C33v85Ev,
  (VTBL_ENTRY)&_ZN7S1303C33v86Ev,
  (VTBL_ENTRY)&_ZN7S1303C33v87Ev,
  (VTBL_ENTRY)&_ZN7S1303C33v88Ev,
  (VTBL_ENTRY)&_ZN7S1303C33v89Ev,
  (VTBL_ENTRY)&_ZN7S1303C33v90Ev,
  (VTBL_ENTRY)&_ZN7S1303C33v91Ev,
  (VTBL_ENTRY)&_ZN7S1303C33v92Ev,
  (VTBL_ENTRY)&_ZN7S1303C33v93Ev,
  (VTBL_ENTRY)&_ZN7S1303C33v94Ev,
  (VTBL_ENTRY)&_ZN7S1303C23v95Ev,
  (VTBL_ENTRY)&_ZN7S1303C23v96Ev,
  (VTBL_ENTRY)&_ZN7S1303C23v97Ev,
};
extern VTBL_ENTRY _ZTI7S1303C2[];
extern  VTBL_ENTRY _ZTV7S1303C2[];
Class_Descriptor cd_S1303C2 = {  "S1303C2", // class name
  bases_S1303C2, 2,
  &(vtc_S1303C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(104,64), // object size
  NSPAIRA(_ZTI7S1303C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1303C2),91, //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  S1303C1  : S1303C2 {
  char s1303c1f0[2];
  ::S674C6_nt s1303c1f1;
  unsigned int s1303c1f2:1;
  unsigned int s1303c1f3:1;
  unsigned int s1303c1f4:1;
  unsigned int s1303c1f5:1;
  ::S1292C12 s1303c1f6;
  ::S1292C12 s1303c1f7;
  ::S1289C10_nt s1303c1f8;
  virtual  ~S1303C1(); // _ZN7S1303C1D1Ev
  virtual void  v1(); // _ZN7S1303C12v1Ev
  virtual void  v2(); // _ZN7S1303C12v2Ev
  virtual void  v3(); // _ZN7S1303C12v3Ev
  virtual void  v4(); // _ZN7S1303C12v4Ev
  virtual void  v5(); // _ZN7S1303C12v5Ev
  virtual void  v6(); // _ZN7S1303C12v6Ev
  virtual void  v7(); // _ZN7S1303C12v7Ev
  virtual void  v8(); // _ZN7S1303C12v8Ev
  virtual void  v9(); // _ZN7S1303C12v9Ev
  virtual void  v10(); // _ZN7S1303C13v10Ev
  S1303C1(); // tgen
};
//SIG(1 S1303C1) C1{ BC2{ BC3{ BC4{ vd 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 Fi FL Fp[4] Fi[2] Fp FC5{ m Fi[2]} Fp[2]} vd v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 v91 v92 v93 v94 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 FC6{ m}} vd v95 v96 v97} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 Fc[2] FC5 Fi:1 Fi:1 Fi:1 Fi:1 FC7{ BC8{ m Fc[4] FC9{ BC10{ BC11{ m Fp Fi[2]}}} Fi[2]} Fp} FC7 FC12{ BC8 Fp}}


 S1303C1 ::~S1303C1(){ note_dtor("S1303C1", this);}
void  S1303C1 ::v1(){vfunc_called(this, "_ZN7S1303C12v1Ev");}
void  S1303C1 ::v2(){vfunc_called(this, "_ZN7S1303C12v2Ev");}
void  S1303C1 ::v3(){vfunc_called(this, "_ZN7S1303C12v3Ev");}
void  S1303C1 ::v4(){vfunc_called(this, "_ZN7S1303C12v4Ev");}
void  S1303C1 ::v5(){vfunc_called(this, "_ZN7S1303C12v5Ev");}
void  S1303C1 ::v6(){vfunc_called(this, "_ZN7S1303C12v6Ev");}
void  S1303C1 ::v7(){vfunc_called(this, "_ZN7S1303C12v7Ev");}
void  S1303C1 ::v8(){vfunc_called(this, "_ZN7S1303C12v8Ev");}
void  S1303C1 ::v9(){vfunc_called(this, "_ZN7S1303C12v9Ev");}
void  S1303C1 ::v10(){vfunc_called(this, "_ZN7S1303C13v10Ev");}
S1303C1 ::S1303C1(){ note_ctor("S1303C1", this);} // tgen

static void Test_S1303C1()
{
  extern Class_Descriptor cd_S1303C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(30,41)];
    init_test(&cd_S1303C1, buf);
    S1303C1 *dp, &lv = *(dp=new (buf) S1303C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(232,160), "sizeof(S1303C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1303C1)");
    check_base_class_offset(lv, (S1303C4*)(S1303C3*)(S1303C2*), 0, "S1303C1");
    check_base_class_offset(lv, (S1303C3*)(S1303C2*), 0, "S1303C1");
    check_base_class_offset(lv, (S1303C2*), 0, "S1303C1");
    check_field_offset(lv, s1303c1f0, ABISELECT(98,62), "S1303C1.s1303c1f0");
    check_field_offset(lv, s1303c1f1, ABISELECT(100,64), "S1303C1.s1303c1f1");
    set_bf_and_test(lv, s1303c1f2, ABISELECT(108,72), 0, 1, 1, "S1303C1");
    set_bf_and_test(lv, s1303c1f3, ABISELECT(108,72), 1, 1, 1, "S1303C1");
    set_bf_and_test(lv, s1303c1f4, ABISELECT(108,72), 2, 1, 1, "S1303C1");
    set_bf_and_test(lv, s1303c1f5, ABISELECT(108,72), 3, 1, 1, "S1303C1");
    check_field_offset(lv, s1303c1f6, ABISELECT(112,76), "S1303C1.s1303c1f6");
    check_field_offset(lv, s1303c1f7, ABISELECT(152,104), "S1303C1.s1303c1f7");
    check_field_offset(lv, s1303c1f8, ABISELECT(192,132), "S1303C1.s1303c1f8");
    test_class_info(&lv, &cd_S1303C1);
    dp->~S1303C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1303C1(Test_S1303C1, "S1303C1", ABISELECT(232,160));

#else // __cplusplus

extern void _ZN7S1303C1C1Ev();
extern void _ZN7S1303C1D1Ev();
Name_Map name_map_S1303C1[] = {
  NSPAIR(_ZN7S1303C1C1Ev),
  NSPAIR(_ZN7S1303C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1303C4;
extern VTBL_ENTRY _ZTI7S1303C4[];
extern  VTBL_ENTRY _ZTV7S1303C4[];
extern Class_Descriptor cd_S1303C3;
extern VTBL_ENTRY _ZTI7S1303C3[];
extern  VTBL_ENTRY _ZTV7S1303C3[];
extern Class_Descriptor cd_S1303C2;
extern VTBL_ENTRY _ZTI7S1303C2[];
extern  VTBL_ENTRY _ZTV7S1303C2[];
static Base_Class bases_S1303C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1303C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S1303C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S1303C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S1303C1[];
extern void _ZN7S1303C1D1Ev();
extern void _ZN7S1303C1D0Ev();
extern void _ZN7S1303C43v11Ev();
extern void _ZN7S1303C43v12Ev();
extern void _ZN7S1303C43v13Ev();
extern void _ZN7S1303C43v14Ev();
extern void _ZN7S1303C43v15Ev();
extern void _ZN7S1303C43v16Ev();
extern void _ZN7S1303C43v17Ev();
extern void _ZN7S1303C43v18Ev();
extern void _ZN7S1303C43v19Ev();
extern void _ZN7S1303C43v20Ev();
extern void _ZN7S1303C43v21Ev();
extern void _ZN7S1303C43v22Ev();
extern void _ZN7S1303C43v23Ev();
extern void _ZN7S1303C43v24Ev();
extern void _ZN7S1303C43v25Ev();
extern void _ZN7S1303C43v26Ev();
extern void _ZN7S1303C43v27Ev();
extern void _ZN7S1303C43v28Ev();
extern void _ZN7S1303C43v29Ev();
extern void _ZN7S1303C43v30Ev();
extern void _ZN7S1303C43v31Ev();
extern void _ZN7S1303C43v32Ev();
extern void _ZN7S1303C43v33Ev();
extern void _ZN7S1303C43v34Ev();
extern void _ZN7S1303C43v35Ev();
extern void _ZN7S1303C43v36Ev();
extern void _ZN7S1303C43v37Ev();
extern void _ZN7S1303C43v38Ev();
extern void _ZN7S1303C43v39Ev();
extern void _ZN7S1303C43v40Ev();
extern void _ZN7S1303C43v41Ev();
extern void _ZN7S1303C43v42Ev();
extern void _ZN7S1303C43v43Ev();
extern void _ZN7S1303C43v44Ev();
extern void _ZN7S1303C43v45Ev();
extern void _ZN7S1303C43v46Ev();
extern void _ZN7S1303C43v47Ev();
extern void _ZN7S1303C43v48Ev();
extern void _ZN7S1303C43v49Ev();
extern void _ZN7S1303C43v50Ev();
extern void _ZN7S1303C43v51Ev();
extern void _ZN7S1303C43v52Ev();
extern void _ZN7S1303C43v53Ev();
extern void _ZN7S1303C43v54Ev();
extern void _ZN7S1303C43v55Ev();
extern void _ZN7S1303C43v56Ev();
extern void _ZN7S1303C43v57Ev();
extern void _ZN7S1303C43v58Ev();
extern void _ZN7S1303C43v59Ev();
extern void _ZN7S1303C43v60Ev();
extern void _ZN7S1303C43v61Ev();
extern void _ZN7S1303C43v62Ev();
extern void _ZN7S1303C43v63Ev();
extern void _ZN7S1303C43v64Ev();
extern void _ZN7S1303C43v65Ev();
extern void _ZN7S1303C43v66Ev();
extern void _ZN7S1303C43v67Ev();
extern void _ZN7S1303C43v68Ev();
extern void _ZN7S1303C43v69Ev();
extern void _ZN7S1303C43v70Ev();
extern void _ZN7S1303C43v71Ev();
extern void _ZN7S1303C43v72Ev();
extern void _ZN7S1303C43v73Ev();
extern void _ZN7S1303C43v74Ev();
extern void _ZN7S1303C33v75Ev();
extern void _ZN7S1303C33v76Ev();
extern void _ZN7S1303C33v77Ev();
extern void _ZN7S1303C33v78Ev();
extern void _ZN7S1303C33v79Ev();
extern void _ZN7S1303C33v80Ev();
extern void _ZN7S1303C33v81Ev();
extern void _ZN7S1303C33v82Ev();
extern void _ZN7S1303C33v83Ev();
extern void _ZN7S1303C33v84Ev();
extern void _ZN7S1303C33v85Ev();
extern void _ZN7S1303C33v86Ev();
extern void _ZN7S1303C33v87Ev();
extern void _ZN7S1303C33v88Ev();
extern void _ZN7S1303C33v89Ev();
extern void _ZN7S1303C33v90Ev();
extern void _ZN7S1303C33v91Ev();
extern void _ZN7S1303C33v92Ev();
extern void _ZN7S1303C33v93Ev();
extern void _ZN7S1303C33v94Ev();
extern void _ZN7S1303C23v95Ev();
extern void _ZN7S1303C23v96Ev();
extern void _ZN7S1303C23v97Ev();
extern void _ZN7S1303C12v1Ev();
extern void _ZN7S1303C12v2Ev();
extern void _ZN7S1303C12v3Ev();
extern void _ZN7S1303C12v4Ev();
extern void _ZN7S1303C12v5Ev();
extern void _ZN7S1303C12v6Ev();
extern void _ZN7S1303C12v7Ev();
extern void _ZN7S1303C12v8Ev();
extern void _ZN7S1303C12v9Ev();
extern void _ZN7S1303C13v10Ev();
static  VTBL_ENTRY vtc_S1303C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1303C1[0]),
  (VTBL_ENTRY)&_ZN7S1303C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1303C1D0Ev,
  (VTBL_ENTRY)&_ZN7S1303C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1303C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1303C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1303C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1303C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1303C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1303C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1303C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1303C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1303C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1303C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1303C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1303C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1303C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1303C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1303C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1303C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1303C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1303C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1303C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1303C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1303C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1303C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1303C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1303C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1303C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1303C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1303C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1303C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1303C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1303C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1303C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1303C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1303C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1303C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1303C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1303C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1303C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1303C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1303C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1303C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1303C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1303C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1303C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1303C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1303C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1303C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1303C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1303C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1303C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1303C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1303C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1303C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1303C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1303C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1303C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1303C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1303C43v68Ev,
  (VTBL_ENTRY)&_ZN7S1303C43v69Ev,
  (VTBL_ENTRY)&_ZN7S1303C43v70Ev,
  (VTBL_ENTRY)&_ZN7S1303C43v71Ev,
  (VTBL_ENTRY)&_ZN7S1303C43v72Ev,
  (VTBL_ENTRY)&_ZN7S1303C43v73Ev,
  (VTBL_ENTRY)&_ZN7S1303C43v74Ev,
  (VTBL_ENTRY)&_ZN7S1303C33v75Ev,
  (VTBL_ENTRY)&_ZN7S1303C33v76Ev,
  (VTBL_ENTRY)&_ZN7S1303C33v77Ev,
  (VTBL_ENTRY)&_ZN7S1303C33v78Ev,
  (VTBL_ENTRY)&_ZN7S1303C33v79Ev,
  (VTBL_ENTRY)&_ZN7S1303C33v80Ev,
  (VTBL_ENTRY)&_ZN7S1303C33v81Ev,
  (VTBL_ENTRY)&_ZN7S1303C33v82Ev,
  (VTBL_ENTRY)&_ZN7S1303C33v83Ev,
  (VTBL_ENTRY)&_ZN7S1303C33v84Ev,
  (VTBL_ENTRY)&_ZN7S1303C33v85Ev,
  (VTBL_ENTRY)&_ZN7S1303C33v86Ev,
  (VTBL_ENTRY)&_ZN7S1303C33v87Ev,
  (VTBL_ENTRY)&_ZN7S1303C33v88Ev,
  (VTBL_ENTRY)&_ZN7S1303C33v89Ev,
  (VTBL_ENTRY)&_ZN7S1303C33v90Ev,
  (VTBL_ENTRY)&_ZN7S1303C33v91Ev,
  (VTBL_ENTRY)&_ZN7S1303C33v92Ev,
  (VTBL_ENTRY)&_ZN7S1303C33v93Ev,
  (VTBL_ENTRY)&_ZN7S1303C33v94Ev,
  (VTBL_ENTRY)&_ZN7S1303C23v95Ev,
  (VTBL_ENTRY)&_ZN7S1303C23v96Ev,
  (VTBL_ENTRY)&_ZN7S1303C23v97Ev,
  (VTBL_ENTRY)&_ZN7S1303C12v1Ev,
  (VTBL_ENTRY)&_ZN7S1303C12v2Ev,
  (VTBL_ENTRY)&_ZN7S1303C12v3Ev,
  (VTBL_ENTRY)&_ZN7S1303C12v4Ev,
  (VTBL_ENTRY)&_ZN7S1303C12v5Ev,
  (VTBL_ENTRY)&_ZN7S1303C12v6Ev,
  (VTBL_ENTRY)&_ZN7S1303C12v7Ev,
  (VTBL_ENTRY)&_ZN7S1303C12v8Ev,
  (VTBL_ENTRY)&_ZN7S1303C12v9Ev,
  (VTBL_ENTRY)&_ZN7S1303C13v10Ev,
};
extern VTBL_ENTRY _ZTI7S1303C1[];
extern  VTBL_ENTRY _ZTV7S1303C1[];
Class_Descriptor cd_S1303C1 = {  "S1303C1", // class name
  bases_S1303C1, 3,
  &(vtc_S1303C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(232,160), // object size
  NSPAIRA(_ZTI7S1303C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1303C1),101, //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  S1517C4  {
  int s1517c4f0;
  __tsi64 s1517c4f1;
  void *s1517c4f2[4];
  int s1517c4f3[2];
  void *s1517c4f4;
  ::S674C6_nt s1517c4f5;
  void *s1517c4f6[2];
  virtual  ~S1517C4(); // _ZN7S1517C4D1Ev
  virtual void  v6(); // _ZN7S1517C42v6Ev
  virtual void  v7(); // _ZN7S1517C42v7Ev
  virtual void  v8(); // _ZN7S1517C42v8Ev
  virtual void  v9(); // _ZN7S1517C42v9Ev
  virtual void  v10(); // _ZN7S1517C43v10Ev
  virtual void  v11(); // _ZN7S1517C43v11Ev
  virtual void  v12(); // _ZN7S1517C43v12Ev
  virtual void  v13(); // _ZN7S1517C43v13Ev
  virtual void  v14(); // _ZN7S1517C43v14Ev
  virtual void  v15(); // _ZN7S1517C43v15Ev
  virtual void  v16(); // _ZN7S1517C43v16Ev
  virtual void  v17(); // _ZN7S1517C43v17Ev
  virtual void  v18(); // _ZN7S1517C43v18Ev
  virtual void  v19(); // _ZN7S1517C43v19Ev
  virtual void  v20(); // _ZN7S1517C43v20Ev
  virtual void  v21(); // _ZN7S1517C43v21Ev
  virtual void  v22(); // _ZN7S1517C43v22Ev
  virtual void  v23(); // _ZN7S1517C43v23Ev
  virtual void  v24(); // _ZN7S1517C43v24Ev
  virtual void  v25(); // _ZN7S1517C43v25Ev
  virtual void  v26(); // _ZN7S1517C43v26Ev
  virtual void  v27(); // _ZN7S1517C43v27Ev
  virtual void  v28(); // _ZN7S1517C43v28Ev
  virtual void  v29(); // _ZN7S1517C43v29Ev
  virtual void  v30(); // _ZN7S1517C43v30Ev
  virtual void  v31(); // _ZN7S1517C43v31Ev
  virtual void  v32(); // _ZN7S1517C43v32Ev
  virtual void  v33(); // _ZN7S1517C43v33Ev
  virtual void  v34(); // _ZN7S1517C43v34Ev
  virtual void  v35(); // _ZN7S1517C43v35Ev
  virtual void  v36(); // _ZN7S1517C43v36Ev
  virtual void  v37(); // _ZN7S1517C43v37Ev
  virtual void  v38(); // _ZN7S1517C43v38Ev
  virtual void  v39(); // _ZN7S1517C43v39Ev
  virtual void  v40(); // _ZN7S1517C43v40Ev
  virtual void  v41(); // _ZN7S1517C43v41Ev
  virtual void  v42(); // _ZN7S1517C43v42Ev
  virtual void  v43(); // _ZN7S1517C43v43Ev
  virtual void  v44(); // _ZN7S1517C43v44Ev
  virtual void  v45(); // _ZN7S1517C43v45Ev
  virtual void  v46(); // _ZN7S1517C43v46Ev
  virtual void  v47(); // _ZN7S1517C43v47Ev
  virtual void  v48(); // _ZN7S1517C43v48Ev
  virtual void  v49(); // _ZN7S1517C43v49Ev
  virtual void  v50(); // _ZN7S1517C43v50Ev
  virtual void  v51(); // _ZN7S1517C43v51Ev
  virtual void  v52(); // _ZN7S1517C43v52Ev
  virtual void  v53(); // _ZN7S1517C43v53Ev
  virtual void  v54(); // _ZN7S1517C43v54Ev
  virtual void  v55(); // _ZN7S1517C43v55Ev
  virtual void  v56(); // _ZN7S1517C43v56Ev
  virtual void  v57(); // _ZN7S1517C43v57Ev
  virtual void  v58(); // _ZN7S1517C43v58Ev
  virtual void  v59(); // _ZN7S1517C43v59Ev
  virtual void  v60(); // _ZN7S1517C43v60Ev
  virtual void  v61(); // _ZN7S1517C43v61Ev
  virtual void  v62(); // _ZN7S1517C43v62Ev
  virtual void  v63(); // _ZN7S1517C43v63Ev
  virtual void  v64(); // _ZN7S1517C43v64Ev
  virtual void  v65(); // _ZN7S1517C43v65Ev
  virtual void  v66(); // _ZN7S1517C43v66Ev
  virtual void  v67(); // _ZN7S1517C43v67Ev
  virtual void  v68(); // _ZN7S1517C43v68Ev
  virtual void  v69(); // _ZN7S1517C43v69Ev
  S1517C4(); // tgen
};
//SIG(-1 S1517C4) 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]}


 S1517C4 ::~S1517C4(){ note_dtor("S1517C4", this);}
void  S1517C4 ::v6(){vfunc_called(this, "_ZN7S1517C42v6Ev");}
void  S1517C4 ::v7(){vfunc_called(this, "_ZN7S1517C42v7Ev");}
void  S1517C4 ::v8(){vfunc_called(this, "_ZN7S1517C42v8Ev");}
void  S1517C4 ::v9(){vfunc_called(this, "_ZN7S1517C42v9Ev");}
void  S1517C4 ::v10(){vfunc_called(this, "_ZN7S1517C43v10Ev");}
void  S1517C4 ::v11(){vfunc_called(this, "_ZN7S1517C43v11Ev");}
void  S1517C4 ::v12(){vfunc_called(this, "_ZN7S1517C43v12Ev");}
void  S1517C4 ::v13(){vfunc_called(this, "_ZN7S1517C43v13Ev");}
void  S1517C4 ::v14(){vfunc_called(this, "_ZN7S1517C43v14Ev");}
void  S1517C4 ::v15(){vfunc_called(this, "_ZN7S1517C43v15Ev");}
void  S1517C4 ::v16(){vfunc_called(this, "_ZN7S1517C43v16Ev");}
void  S1517C4 ::v17(){vfunc_called(this, "_ZN7S1517C43v17Ev");}
void  S1517C4 ::v18(){vfunc_called(this, "_ZN7S1517C43v18Ev");}
void  S1517C4 ::v19(){vfunc_called(this, "_ZN7S1517C43v19Ev");}
void  S1517C4 ::v20(){vfunc_called(this, "_ZN7S1517C43v20Ev");}
void  S1517C4 ::v21(){vfunc_called(this, "_ZN7S1517C43v21Ev");}
void  S1517C4 ::v22(){vfunc_called(this, "_ZN7S1517C43v22Ev");}
void  S1517C4 ::v23(){vfunc_called(this, "_ZN7S1517C43v23Ev");}
void  S1517C4 ::v24(){vfunc_called(this, "_ZN7S1517C43v24Ev");}
void  S1517C4 ::v25(){vfunc_called(this, "_ZN7S1517C43v25Ev");}
void  S1517C4 ::v26(){vfunc_called(this, "_ZN7S1517C43v26Ev");}
void  S1517C4 ::v27(){vfunc_called(this, "_ZN7S1517C43v27Ev");}
void  S1517C4 ::v28(){vfunc_called(this, "_ZN7S1517C43v28Ev");}
void  S1517C4 ::v29(){vfunc_called(this, "_ZN7S1517C43v29Ev");}
void  S1517C4 ::v30(){vfunc_called(this, "_ZN7S1517C43v30Ev");}
void  S1517C4 ::v31(){vfunc_called(this, "_ZN7S1517C43v31Ev");}
void  S1517C4 ::v32(){vfunc_called(this, "_ZN7S1517C43v32Ev");}
void  S1517C4 ::v33(){vfunc_called(this, "_ZN7S1517C43v33Ev");}
void  S1517C4 ::v34(){vfunc_called(this, "_ZN7S1517C43v34Ev");}
void  S1517C4 ::v35(){vfunc_called(this, "_ZN7S1517C43v35Ev");}
void  S1517C4 ::v36(){vfunc_called(this, "_ZN7S1517C43v36Ev");}
void  S1517C4 ::v37(){vfunc_called(this, "_ZN7S1517C43v37Ev");}
void  S1517C4 ::v38(){vfunc_called(this, "_ZN7S1517C43v38Ev");}
void  S1517C4 ::v39(){vfunc_called(this, "_ZN7S1517C43v39Ev");}
void  S1517C4 ::v40(){vfunc_called(this, "_ZN7S1517C43v40Ev");}
void  S1517C4 ::v41(){vfunc_called(this, "_ZN7S1517C43v41Ev");}
void  S1517C4 ::v42(){vfunc_called(this, "_ZN7S1517C43v42Ev");}
void  S1517C4 ::v43(){vfunc_called(this, "_ZN7S1517C43v43Ev");}
void  S1517C4 ::v44(){vfunc_called(this, "_ZN7S1517C43v44Ev");}
void  S1517C4 ::v45(){vfunc_called(this, "_ZN7S1517C43v45Ev");}
void  S1517C4 ::v46(){vfunc_called(this, "_ZN7S1517C43v46Ev");}
void  S1517C4 ::v47(){vfunc_called(this, "_ZN7S1517C43v47Ev");}
void  S1517C4 ::v48(){vfunc_called(this, "_ZN7S1517C43v48Ev");}
void  S1517C4 ::v49(){vfunc_called(this, "_ZN7S1517C43v49Ev");}
void  S1517C4 ::v50(){vfunc_called(this, "_ZN7S1517C43v50Ev");}
void  S1517C4 ::v51(){vfunc_called(this, "_ZN7S1517C43v51Ev");}
void  S1517C4 ::v52(){vfunc_called(this, "_ZN7S1517C43v52Ev");}
void  S1517C4 ::v53(){vfunc_called(this, "_ZN7S1517C43v53Ev");}
void  S1517C4 ::v54(){vfunc_called(this, "_ZN7S1517C43v54Ev");}
void  S1517C4 ::v55(){vfunc_called(this, "_ZN7S1517C43v55Ev");}
void  S1517C4 ::v56(){vfunc_called(this, "_ZN7S1517C43v56Ev");}
void  S1517C4 ::v57(){vfunc_called(this, "_ZN7S1517C43v57Ev");}
void  S1517C4 ::v58(){vfunc_called(this, "_ZN7S1517C43v58Ev");}
void  S1517C4 ::v59(){vfunc_called(this, "_ZN7S1517C43v59Ev");}
void  S1517C4 ::v60(){vfunc_called(this, "_ZN7S1517C43v60Ev");}
void  S1517C4 ::v61(){vfunc_called(this, "_ZN7S1517C43v61Ev");}
void  S1517C4 ::v62(){vfunc_called(this, "_ZN7S1517C43v62Ev");}
void  S1517C4 ::v63(){vfunc_called(this, "_ZN7S1517C43v63Ev");}
void  S1517C4 ::v64(){vfunc_called(this, "_ZN7S1517C43v64Ev");}
void  S1517C4 ::v65(){vfunc_called(this, "_ZN7S1517C43v65Ev");}
void  S1517C4 ::v66(){vfunc_called(this, "_ZN7S1517C43v66Ev");}
void  S1517C4 ::v67(){vfunc_called(this, "_ZN7S1517C43v67Ev");}
void  S1517C4 ::v68(){vfunc_called(this, "_ZN7S1517C43v68Ev");}
void  S1517C4 ::v69(){vfunc_called(this, "_ZN7S1517C43v69Ev");}
S1517C4 ::S1517C4(){ note_ctor("S1517C4", this);} // tgen

static void Test_S1517C4()
{
  extern Class_Descriptor cd_S1517C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S1517C4, buf);
    S1517C4 *dp, &lv = *(dp=new (buf) S1517C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S1517C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1517C4)");
    check_field_offset(lv, s1517c4f0, ABISELECT(8,4), "S1517C4.s1517c4f0");
    check_field_offset(lv, s1517c4f1, ABISELECT(16,8), "S1517C4.s1517c4f1");
    check_field_offset(lv, s1517c4f2, ABISELECT(24,16), "S1517C4.s1517c4f2");
    check_field_offset(lv, s1517c4f3, ABISELECT(56,32), "S1517C4.s1517c4f3");
    check_field_offset(lv, s1517c4f4, ABISELECT(64,40), "S1517C4.s1517c4f4");
    check_field_offset(lv, s1517c4f5, ABISELECT(72,44), "S1517C4.s1517c4f5");
    check_field_offset(lv, s1517c4f6, ABISELECT(80,52), "S1517C4.s1517c4f6");
    test_class_info(&lv, &cd_S1517C4);
    dp->~S1517C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1517C4(Test_S1517C4, "S1517C4", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN7S1517C4C1Ev();
extern void _ZN7S1517C4D1Ev();
Name_Map name_map_S1517C4[] = {
  NSPAIR(_ZN7S1517C4C1Ev),
  NSPAIR(_ZN7S1517C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S1517C4[];
extern void _ZN7S1517C4D1Ev();
extern void _ZN7S1517C4D0Ev();
extern void _ZN7S1517C42v6Ev();
extern void _ZN7S1517C42v7Ev();
extern void _ZN7S1517C42v8Ev();
extern void _ZN7S1517C42v9Ev();
extern void _ZN7S1517C43v10Ev();
extern void _ZN7S1517C43v11Ev();
extern void _ZN7S1517C43v12Ev();
extern void _ZN7S1517C43v13Ev();
extern void _ZN7S1517C43v14Ev();
extern void _ZN7S1517C43v15Ev();
extern void _ZN7S1517C43v16Ev();
extern void _ZN7S1517C43v17Ev();
extern void _ZN7S1517C43v18Ev();
extern void _ZN7S1517C43v19Ev();
extern void _ZN7S1517C43v20Ev();
extern void _ZN7S1517C43v21Ev();
extern void _ZN7S1517C43v22Ev();
extern void _ZN7S1517C43v23Ev();
extern void _ZN7S1517C43v24Ev();
extern void _ZN7S1517C43v25Ev();
extern void _ZN7S1517C43v26Ev();
extern void _ZN7S1517C43v27Ev();
extern void _ZN7S1517C43v28Ev();
extern void _ZN7S1517C43v29Ev();
extern void _ZN7S1517C43v30Ev();
extern void _ZN7S1517C43v31Ev();
extern void _ZN7S1517C43v32Ev();
extern void _ZN7S1517C43v33Ev();
extern void _ZN7S1517C43v34Ev();
extern void _ZN7S1517C43v35Ev();
extern void _ZN7S1517C43v36Ev();
extern void _ZN7S1517C43v37Ev();
extern void _ZN7S1517C43v38Ev();
extern void _ZN7S1517C43v39Ev();
extern void _ZN7S1517C43v40Ev();
extern void _ZN7S1517C43v41Ev();
extern void _ZN7S1517C43v42Ev();
extern void _ZN7S1517C43v43Ev();
extern void _ZN7S1517C43v44Ev();
extern void _ZN7S1517C43v45Ev();
extern void _ZN7S1517C43v46Ev();
extern void _ZN7S1517C43v47Ev();
extern void _ZN7S1517C43v48Ev();
extern void _ZN7S1517C43v49Ev();
extern void _ZN7S1517C43v50Ev();
extern void _ZN7S1517C43v51Ev();
extern void _ZN7S1517C43v52Ev();
extern void _ZN7S1517C43v53Ev();
extern void _ZN7S1517C43v54Ev();
extern void _ZN7S1517C43v55Ev();
extern void _ZN7S1517C43v56Ev();
extern void _ZN7S1517C43v57Ev();
extern void _ZN7S1517C43v58Ev();
extern void _ZN7S1517C43v59Ev();
extern void _ZN7S1517C43v60Ev();
extern void _ZN7S1517C43v61Ev();
extern void _ZN7S1517C43v62Ev();
extern void _ZN7S1517C43v63Ev();
extern void _ZN7S1517C43v64Ev();
extern void _ZN7S1517C43v65Ev();
extern void _ZN7S1517C43v66Ev();
extern void _ZN7S1517C43v67Ev();
extern void _ZN7S1517C43v68Ev();
extern void _ZN7S1517C43v69Ev();
static  VTBL_ENTRY vtc_S1517C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1517C4[0]),
  (VTBL_ENTRY)&_ZN7S1517C4D1Ev,
  (VTBL_ENTRY)&_ZN7S1517C4D0Ev,
  (VTBL_ENTRY)&_ZN7S1517C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1517C42v7Ev,
  (VTBL_ENTRY)&_ZN7S1517C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1517C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1517C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1517C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1517C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1517C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1517C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1517C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1517C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1517C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1517C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1517C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1517C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1517C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1517C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1517C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1517C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1517C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1517C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1517C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1517C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1517C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1517C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1517C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1517C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1517C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1517C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1517C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1517C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1517C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1517C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1517C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1517C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1517C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1517C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1517C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1517C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1517C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1517C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1517C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1517C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1517C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1517C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1517C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1517C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1517C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1517C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1517C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1517C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1517C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1517C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1517C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1517C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1517C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1517C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1517C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1517C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1517C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1517C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1517C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1517C43v68Ev,
  (VTBL_ENTRY)&_ZN7S1517C43v69Ev,
};
extern VTBL_ENTRY _ZTI7S1517C4[];
extern  VTBL_ENTRY _ZTV7S1517C4[];
Class_Descriptor cd_S1517C4 = {  "S1517C4", // class name
  0,0,//no base classes
  &(vtc_S1517C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI7S1517C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S1517C4),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  S1517C3  : S1517C4 {
  unsigned int s1517c3f0:1;
  unsigned int s1517c3f1:1;
  unsigned int s1517c3f2:1;
  unsigned int s1517c3f3:1;
  unsigned int s1517c3f4:1;
  unsigned int s1517c3f5:1;
  unsigned int s1517c3f6:1;
  ::S3625C32 s1517c3f7;
  virtual  ~S1517C3(); // _ZN7S1517C3D1Ev
  virtual void  v70(); // _ZN7S1517C33v70Ev
  virtual void  v71(); // _ZN7S1517C33v71Ev
  virtual void  v72(); // _ZN7S1517C33v72Ev
  virtual void  v73(); // _ZN7S1517C33v73Ev
  virtual void  v74(); // _ZN7S1517C33v74Ev
  virtual void  v75(); // _ZN7S1517C33v75Ev
  virtual void  v76(); // _ZN7S1517C33v76Ev
  virtual void  v77(); // _ZN7S1517C33v77Ev
  virtual void  v78(); // _ZN7S1517C33v78Ev
  virtual void  v79(); // _ZN7S1517C33v79Ev
  virtual void  v80(); // _ZN7S1517C33v80Ev
  virtual void  v81(); // _ZN7S1517C33v81Ev
  virtual void  v82(); // _ZN7S1517C33v82Ev
  virtual void  v83(); // _ZN7S1517C33v83Ev
  virtual void  v84(); // _ZN7S1517C33v84Ev
  virtual void  v85(); // _ZN7S1517C33v85Ev
  virtual void  v86(); // _ZN7S1517C33v86Ev
  virtual void  v87(); // _ZN7S1517C33v87Ev
  virtual void  v88(); // _ZN7S1517C33v88Ev
  virtual void  v89(); // _ZN7S1517C33v89Ev
  S1517C3(); // tgen
};
//SIG(-1 S1517C3) C1{ BC2{ 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 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 Fi FL Fp[4] Fi[2] Fp FC3{ m Fi[2]} Fp[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 FC4{ m}}


 S1517C3 ::~S1517C3(){ note_dtor("S1517C3", this);}
void  S1517C3 ::v70(){vfunc_called(this, "_ZN7S1517C33v70Ev");}
void  S1517C3 ::v71(){vfunc_called(this, "_ZN7S1517C33v71Ev");}
void  S1517C3 ::v72(){vfunc_called(this, "_ZN7S1517C33v72Ev");}
void  S1517C3 ::v73(){vfunc_called(this, "_ZN7S1517C33v73Ev");}
void  S1517C3 ::v74(){vfunc_called(this, "_ZN7S1517C33v74Ev");}
void  S1517C3 ::v75(){vfunc_called(this, "_ZN7S1517C33v75Ev");}
void  S1517C3 ::v76(){vfunc_called(this, "_ZN7S1517C33v76Ev");}
void  S1517C3 ::v77(){vfunc_called(this, "_ZN7S1517C33v77Ev");}
void  S1517C3 ::v78(){vfunc_called(this, "_ZN7S1517C33v78Ev");}
void  S1517C3 ::v79(){vfunc_called(this, "_ZN7S1517C33v79Ev");}
void  S1517C3 ::v80(){vfunc_called(this, "_ZN7S1517C33v80Ev");}
void  S1517C3 ::v81(){vfunc_called(this, "_ZN7S1517C33v81Ev");}
void  S1517C3 ::v82(){vfunc_called(this, "_ZN7S1517C33v82Ev");}
void  S1517C3 ::v83(){vfunc_called(this, "_ZN7S1517C33v83Ev");}
void  S1517C3 ::v84(){vfunc_called(this, "_ZN7S1517C33v84Ev");}
void  S1517C3 ::v85(){vfunc_called(this, "_ZN7S1517C33v85Ev");}
void  S1517C3 ::v86(){vfunc_called(this, "_ZN7S1517C33v86Ev");}
void  S1517C3 ::v87(){vfunc_called(this, "_ZN7S1517C33v87Ev");}
void  S1517C3 ::v88(){vfunc_called(this, "_ZN7S1517C33v88Ev");}
void  S1517C3 ::v89(){vfunc_called(this, "_ZN7S1517C33v89Ev");}
S1517C3 ::S1517C3(){ note_ctor("S1517C3", this);} // tgen

static void Test_S1517C3()
{
  extern Class_Descriptor cd_S1517C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(14,17)];
    init_test(&cd_S1517C3, buf);
    S1517C3 *dp, &lv = *(dp=new (buf) S1517C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(104,64), "sizeof(S1517C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1517C3)");
    check_base_class_offset(lv, (S1517C4*), 0, "S1517C3");
    set_bf_and_test(lv, s1517c3f0, ABISELECT(96,60), 0, 1, 1, "S1517C3");
    set_bf_and_test(lv, s1517c3f1, ABISELECT(96,60), 1, 1, 1, "S1517C3");
    set_bf_and_test(lv, s1517c3f2, ABISELECT(96,60), 2, 1, 1, "S1517C3");
    set_bf_and_test(lv, s1517c3f3, ABISELECT(96,60), 3, 1, 1, "S1517C3");
    set_bf_and_test(lv, s1517c3f4, ABISELECT(96,60), 4, 1, 1, "S1517C3");
    set_bf_and_test(lv, s1517c3f5, ABISELECT(96,60), 5, 1, 1, "S1517C3");
    set_bf_and_test(lv, s1517c3f6, ABISELECT(96,60), 6, 1, 1, "S1517C3");
    check_field_offset(lv, s1517c3f7, ABISELECT(97,61), "S1517C3.s1517c3f7");
    test_class_info(&lv, &cd_S1517C3);
    dp->~S1517C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1517C3(Test_S1517C3, "S1517C3", ABISELECT(104,64));

#else // __cplusplus

extern void _ZN7S1517C3C1Ev();
extern void _ZN7S1517C3D1Ev();
Name_Map name_map_S1517C3[] = {
  NSPAIR(_ZN7S1517C3C1Ev),
  NSPAIR(_ZN7S1517C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1517C4;
extern VTBL_ENTRY _ZTI7S1517C4[];
extern  VTBL_ENTRY _ZTV7S1517C4[];
static Base_Class bases_S1517C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1517C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI7S1517C3[];
extern void _ZN7S1517C3D1Ev();
extern void _ZN7S1517C3D0Ev();
extern void _ZN7S1517C42v6Ev();
extern void _ZN7S1517C42v7Ev();
extern void _ZN7S1517C42v8Ev();
extern void _ZN7S1517C42v9Ev();
extern void _ZN7S1517C43v10Ev();
extern void _ZN7S1517C43v11Ev();
extern void _ZN7S1517C43v12Ev();
extern void _ZN7S1517C43v13Ev();
extern void _ZN7S1517C43v14Ev();
extern void _ZN7S1517C43v15Ev();
extern void _ZN7S1517C43v16Ev();
extern void _ZN7S1517C43v17Ev();
extern void _ZN7S1517C43v18Ev();
extern void _ZN7S1517C43v19Ev();
extern void _ZN7S1517C43v20Ev();
extern void _ZN7S1517C43v21Ev();
extern void _ZN7S1517C43v22Ev();
extern void _ZN7S1517C43v23Ev();
extern void _ZN7S1517C43v24Ev();
extern void _ZN7S1517C43v25Ev();
extern void _ZN7S1517C43v26Ev();
extern void _ZN7S1517C43v27Ev();
extern void _ZN7S1517C43v28Ev();
extern void _ZN7S1517C43v29Ev();
extern void _ZN7S1517C43v30Ev();
extern void _ZN7S1517C43v31Ev();
extern void _ZN7S1517C43v32Ev();
extern void _ZN7S1517C43v33Ev();
extern void _ZN7S1517C43v34Ev();
extern void _ZN7S1517C43v35Ev();
extern void _ZN7S1517C43v36Ev();
extern void _ZN7S1517C43v37Ev();
extern void _ZN7S1517C43v38Ev();
extern void _ZN7S1517C43v39Ev();
extern void _ZN7S1517C43v40Ev();
extern void _ZN7S1517C43v41Ev();
extern void _ZN7S1517C43v42Ev();
extern void _ZN7S1517C43v43Ev();
extern void _ZN7S1517C43v44Ev();
extern void _ZN7S1517C43v45Ev();
extern void _ZN7S1517C43v46Ev();
extern void _ZN7S1517C43v47Ev();
extern void _ZN7S1517C43v48Ev();
extern void _ZN7S1517C43v49Ev();
extern void _ZN7S1517C43v50Ev();
extern void _ZN7S1517C43v51Ev();
extern void _ZN7S1517C43v52Ev();
extern void _ZN7S1517C43v53Ev();
extern void _ZN7S1517C43v54Ev();
extern void _ZN7S1517C43v55Ev();
extern void _ZN7S1517C43v56Ev();
extern void _ZN7S1517C43v57Ev();
extern void _ZN7S1517C43v58Ev();
extern void _ZN7S1517C43v59Ev();
extern void _ZN7S1517C43v60Ev();
extern void _ZN7S1517C43v61Ev();
extern void _ZN7S1517C43v62Ev();
extern void _ZN7S1517C43v63Ev();
extern void _ZN7S1517C43v64Ev();
extern void _ZN7S1517C43v65Ev();
extern void _ZN7S1517C43v66Ev();
extern void _ZN7S1517C43v67Ev();
extern void _ZN7S1517C43v68Ev();
extern void _ZN7S1517C43v69Ev();
extern void _ZN7S1517C33v70Ev();
extern void _ZN7S1517C33v71Ev();
extern void _ZN7S1517C33v72Ev();
extern void _ZN7S1517C33v73Ev();
extern void _ZN7S1517C33v74Ev();
extern void _ZN7S1517C33v75Ev();
extern void _ZN7S1517C33v76Ev();
extern void _ZN7S1517C33v77Ev();
extern void _ZN7S1517C33v78Ev();
extern void _ZN7S1517C33v79Ev();
extern void _ZN7S1517C33v80Ev();
extern void _ZN7S1517C33v81Ev();
extern void _ZN7S1517C33v82Ev();
extern void _ZN7S1517C33v83Ev();
extern void _ZN7S1517C33v84Ev();
extern void _ZN7S1517C33v85Ev();
extern void _ZN7S1517C33v86Ev();
extern void _ZN7S1517C33v87Ev();
extern void _ZN7S1517C33v88Ev();
extern void _ZN7S1517C33v89Ev();
static  VTBL_ENTRY vtc_S1517C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1517C3[0]),
  (VTBL_ENTRY)&_ZN7S1517C3D1Ev,
  (VTBL_ENTRY)&_ZN7S1517C3D0Ev,
  (VTBL_ENTRY)&_ZN7S1517C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1517C42v7Ev,
  (VTBL_ENTRY)&_ZN7S1517C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1517C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1517C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1517C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1517C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1517C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1517C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1517C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1517C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1517C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1517C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1517C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1517C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1517C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1517C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1517C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1517C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1517C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1517C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1517C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1517C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1517C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1517C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1517C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1517C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1517C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1517C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1517C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1517C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1517C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1517C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1517C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1517C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1517C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1517C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1517C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1517C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1517C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1517C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1517C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1517C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1517C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1517C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1517C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1517C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1517C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1517C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1517C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1517C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1517C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1517C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1517C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1517C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1517C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1517C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1517C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1517C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1517C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1517C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1517C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1517C43v68Ev,
  (VTBL_ENTRY)&_ZN7S1517C43v69Ev,
  (VTBL_ENTRY)&_ZN7S1517C33v70Ev,
  (VTBL_ENTRY)&_ZN7S1517C33v71Ev,
  (VTBL_ENTRY)&_ZN7S1517C33v72Ev,
  (VTBL_ENTRY)&_ZN7S1517C33v73Ev,
  (VTBL_ENTRY)&_ZN7S1517C33v74Ev,
  (VTBL_ENTRY)&_ZN7S1517C33v75Ev,
  (VTBL_ENTRY)&_ZN7S1517C33v76Ev,
  (VTBL_ENTRY)&_ZN7S1517C33v77Ev,
  (VTBL_ENTRY)&_ZN7S1517C33v78Ev,
  (VTBL_ENTRY)&_ZN7S1517C33v79Ev,
  (VTBL_ENTRY)&_ZN7S1517C33v80Ev,
  (VTBL_ENTRY)&_ZN7S1517C33v81Ev,
  (VTBL_ENTRY)&_ZN7S1517C33v82Ev,
  (VTBL_ENTRY)&_ZN7S1517C33v83Ev,
  (VTBL_ENTRY)&_ZN7S1517C33v84Ev,
  (VTBL_ENTRY)&_ZN7S1517C33v85Ev,
  (VTBL_ENTRY)&_ZN7S1517C33v86Ev,
  (VTBL_ENTRY)&_ZN7S1517C33v87Ev,
  (VTBL_ENTRY)&_ZN7S1517C33v88Ev,
  (VTBL_ENTRY)&_ZN7S1517C33v89Ev,
};
extern VTBL_ENTRY _ZTI7S1517C3[];
extern  VTBL_ENTRY _ZTV7S1517C3[];
Class_Descriptor cd_S1517C3 = {  "S1517C3", // class name
  bases_S1517C3, 1,
  &(vtc_S1517C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(104,64), // object size
  NSPAIRA(_ZTI7S1517C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1517C3),88, //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  S1517C2  : S1517C3 {
  virtual  ~S1517C2(); // _ZN7S1517C2D1Ev
  virtual void  v90(); // _ZN7S1517C23v90Ev
  virtual void  v91(); // _ZN7S1517C23v91Ev
  virtual void  v92(); // _ZN7S1517C23v92Ev
  virtual void  v93(); // _ZN7S1517C23v93Ev
  virtual void  v94(); // _ZN7S1517C23v94Ev
  virtual void  v95(); // _ZN7S1517C23v95Ev
  virtual void  v96(); // _ZN7S1517C23v96Ev
  virtual void  v97(); // _ZN7S1517C23v97Ev
  virtual void  v98(); // _ZN7S1517C23v98Ev
  S1517C2(); // tgen
};
//SIG(-1 S1517C2) C1{ BC2{ BC3{ vd 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 Fi FL Fp[4] Fi[2] Fp FC4{ m Fi[2]} Fp[2]} vd v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 v91 v92 v93 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 FC5{ m}} vd v1 v2 v3 v4 v5 v6 v7 v8 v9}


 S1517C2 ::~S1517C2(){ note_dtor("S1517C2", this);}
void  S1517C2 ::v90(){vfunc_called(this, "_ZN7S1517C23v90Ev");}
void  S1517C2 ::v91(){vfunc_called(this, "_ZN7S1517C23v91Ev");}
void  S1517C2 ::v92(){vfunc_called(this, "_ZN7S1517C23v92Ev");}
void  S1517C2 ::v93(){vfunc_called(this, "_ZN7S1517C23v93Ev");}
void  S1517C2 ::v94(){vfunc_called(this, "_ZN7S1517C23v94Ev");}
void  S1517C2 ::v95(){vfunc_called(this, "_ZN7S1517C23v95Ev");}
void  S1517C2 ::v96(){vfunc_called(this, "_ZN7S1517C23v96Ev");}
void  S1517C2 ::v97(){vfunc_called(this, "_ZN7S1517C23v97Ev");}
void  S1517C2 ::v98(){vfunc_called(this, "_ZN7S1517C23v98Ev");}
S1517C2 ::S1517C2(){ note_ctor("S1517C2", this);} // tgen

static void Test_S1517C2()
{
  extern Class_Descriptor cd_S1517C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(14,17)];
    init_test(&cd_S1517C2, buf);
    S1517C2 *dp, &lv = *(dp=new (buf) S1517C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(104,64), "sizeof(S1517C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1517C2)");
    check_base_class_offset(lv, (S1517C4*)(S1517C3*), 0, "S1517C2");
    check_base_class_offset(lv, (S1517C3*), 0, "S1517C2");
    test_class_info(&lv, &cd_S1517C2);
    dp->~S1517C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1517C2(Test_S1517C2, "S1517C2", ABISELECT(104,64));

#else // __cplusplus

extern void _ZN7S1517C2C1Ev();
extern void _ZN7S1517C2D1Ev();
Name_Map name_map_S1517C2[] = {
  NSPAIR(_ZN7S1517C2C1Ev),
  NSPAIR(_ZN7S1517C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1517C4;
extern VTBL_ENTRY _ZTI7S1517C4[];
extern  VTBL_ENTRY _ZTV7S1517C4[];
extern Class_Descriptor cd_S1517C3;
extern VTBL_ENTRY _ZTI7S1517C3[];
extern  VTBL_ENTRY _ZTV7S1517C3[];
static Base_Class bases_S1517C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1517C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S1517C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S1517C2[];
extern void _ZN7S1517C2D1Ev();
extern void _ZN7S1517C2D0Ev();
extern void _ZN7S1517C42v6Ev();
extern void _ZN7S1517C42v7Ev();
extern void _ZN7S1517C42v8Ev();
extern void _ZN7S1517C42v9Ev();
extern void _ZN7S1517C43v10Ev();
extern void _ZN7S1517C43v11Ev();
extern void _ZN7S1517C43v12Ev();
extern void _ZN7S1517C43v13Ev();
extern void _ZN7S1517C43v14Ev();
extern void _ZN7S1517C43v15Ev();
extern void _ZN7S1517C43v16Ev();
extern void _ZN7S1517C43v17Ev();
extern void _ZN7S1517C43v18Ev();
extern void _ZN7S1517C43v19Ev();
extern void _ZN7S1517C43v20Ev();
extern void _ZN7S1517C43v21Ev();
extern void _ZN7S1517C43v22Ev();
extern void _ZN7S1517C43v23Ev();
extern void _ZN7S1517C43v24Ev();
extern void _ZN7S1517C43v25Ev();
extern void _ZN7S1517C43v26Ev();
extern void _ZN7S1517C43v27Ev();
extern void _ZN7S1517C43v28Ev();
extern void _ZN7S1517C43v29Ev();
extern void _ZN7S1517C43v30Ev();
extern void _ZN7S1517C43v31Ev();
extern void _ZN7S1517C43v32Ev();
extern void _ZN7S1517C43v33Ev();
extern void _ZN7S1517C43v34Ev();
extern void _ZN7S1517C43v35Ev();
extern void _ZN7S1517C43v36Ev();
extern void _ZN7S1517C43v37Ev();
extern void _ZN7S1517C43v38Ev();
extern void _ZN7S1517C43v39Ev();
extern void _ZN7S1517C43v40Ev();
extern void _ZN7S1517C43v41Ev();
extern void _ZN7S1517C43v42Ev();
extern void _ZN7S1517C43v43Ev();
extern void _ZN7S1517C43v44Ev();
extern void _ZN7S1517C43v45Ev();
extern void _ZN7S1517C43v46Ev();
extern void _ZN7S1517C43v47Ev();
extern void _ZN7S1517C43v48Ev();
extern void _ZN7S1517C43v49Ev();
extern void _ZN7S1517C43v50Ev();
extern void _ZN7S1517C43v51Ev();
extern void _ZN7S1517C43v52Ev();
extern void _ZN7S1517C43v53Ev();
extern void _ZN7S1517C43v54Ev();
extern void _ZN7S1517C43v55Ev();
extern void _ZN7S1517C43v56Ev();
extern void _ZN7S1517C43v57Ev();
extern void _ZN7S1517C43v58Ev();
extern void _ZN7S1517C43v59Ev();
extern void _ZN7S1517C43v60Ev();
extern void _ZN7S1517C43v61Ev();
extern void _ZN7S1517C43v62Ev();
extern void _ZN7S1517C43v63Ev();
extern void _ZN7S1517C43v64Ev();
extern void _ZN7S1517C43v65Ev();
extern void _ZN7S1517C43v66Ev();
extern void _ZN7S1517C43v67Ev();
extern void _ZN7S1517C43v68Ev();
extern void _ZN7S1517C43v69Ev();
extern void _ZN7S1517C33v70Ev();
extern void _ZN7S1517C33v71Ev();
extern void _ZN7S1517C33v72Ev();
extern void _ZN7S1517C33v73Ev();
extern void _ZN7S1517C33v74Ev();
extern void _ZN7S1517C33v75Ev();
extern void _ZN7S1517C33v76Ev();
extern void _ZN7S1517C33v77Ev();
extern void _ZN7S1517C33v78Ev();
extern void _ZN7S1517C33v79Ev();
extern void _ZN7S1517C33v80Ev();
extern void _ZN7S1517C33v81Ev();
extern void _ZN7S1517C33v82Ev();
extern void _ZN7S1517C33v83Ev();
extern void _ZN7S1517C33v84Ev();
extern void _ZN7S1517C33v85Ev();
extern void _ZN7S1517C33v86Ev();
extern void _ZN7S1517C33v87Ev();
extern void _ZN7S1517C33v88Ev();
extern void _ZN7S1517C33v89Ev();
extern void _ZN7S1517C23v90Ev();
extern void _ZN7S1517C23v91Ev();
extern void _ZN7S1517C23v92Ev();
extern void _ZN7S1517C23v93Ev();
extern void _ZN7S1517C23v94Ev();
extern void _ZN7S1517C23v95Ev();
extern void _ZN7S1517C23v96Ev();
extern void _ZN7S1517C23v97Ev();
extern void _ZN7S1517C23v98Ev();
static  VTBL_ENTRY vtc_S1517C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1517C2[0]),
  (VTBL_ENTRY)&_ZN7S1517C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1517C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1517C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1517C42v7Ev,
  (VTBL_ENTRY)&_ZN7S1517C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1517C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1517C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1517C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1517C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1517C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1517C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1517C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1517C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1517C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1517C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1517C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1517C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1517C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1517C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1517C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1517C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1517C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1517C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1517C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1517C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1517C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1517C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1517C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1517C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1517C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1517C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1517C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1517C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1517C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1517C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1517C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1517C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1517C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1517C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1517C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1517C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1517C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1517C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1517C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1517C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1517C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1517C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1517C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1517C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1517C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1517C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1517C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1517C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1517C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1517C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1517C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1517C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1517C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1517C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1517C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1517C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1517C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1517C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1517C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1517C43v68Ev,
  (VTBL_ENTRY)&_ZN7S1517C43v69Ev,
  (VTBL_ENTRY)&_ZN7S1517C33v70Ev,
  (VTBL_ENTRY)&_ZN7S1517C33v71Ev,
  (VTBL_ENTRY)&_ZN7S1517C33v72Ev,
  (VTBL_ENTRY)&_ZN7S1517C33v73Ev,
  (VTBL_ENTRY)&_ZN7S1517C33v74Ev,
  (VTBL_ENTRY)&_ZN7S1517C33v75Ev,
  (VTBL_ENTRY)&_ZN7S1517C33v76Ev,
  (VTBL_ENTRY)&_ZN7S1517C33v77Ev,
  (VTBL_ENTRY)&_ZN7S1517C33v78Ev,
  (VTBL_ENTRY)&_ZN7S1517C33v79Ev,
  (VTBL_ENTRY)&_ZN7S1517C33v80Ev,
  (VTBL_ENTRY)&_ZN7S1517C33v81Ev,
  (VTBL_ENTRY)&_ZN7S1517C33v82Ev,
  (VTBL_ENTRY)&_ZN7S1517C33v83Ev,
  (VTBL_ENTRY)&_ZN7S1517C33v84Ev,
  (VTBL_ENTRY)&_ZN7S1517C33v85Ev,
  (VTBL_ENTRY)&_ZN7S1517C33v86Ev,
  (VTBL_ENTRY)&_ZN7S1517C33v87Ev,
  (VTBL_ENTRY)&_ZN7S1517C33v88Ev,
  (VTBL_ENTRY)&_ZN7S1517C33v89Ev,
  (VTBL_ENTRY)&_ZN7S1517C23v90Ev,
  (VTBL_ENTRY)&_ZN7S1517C23v91Ev,
  (VTBL_ENTRY)&_ZN7S1517C23v92Ev,
  (VTBL_ENTRY)&_ZN7S1517C23v93Ev,
  (VTBL_ENTRY)&_ZN7S1517C23v94Ev,
  (VTBL_ENTRY)&_ZN7S1517C23v95Ev,
  (VTBL_ENTRY)&_ZN7S1517C23v96Ev,
  (VTBL_ENTRY)&_ZN7S1517C23v97Ev,
  (VTBL_ENTRY)&_ZN7S1517C23v98Ev,
};
extern VTBL_ENTRY _ZTI7S1517C2[];
extern  VTBL_ENTRY _ZTV7S1517C2[];
Class_Descriptor cd_S1517C2 = {  "S1517C2", // class name
  bases_S1517C2, 2,
  &(vtc_S1517C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(104,64), // object size
  NSPAIRA(_ZTI7S1517C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1517C2),97, //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  S1517C1  : S1517C2 {
  unsigned int s1517c1f0:1;
  unsigned int s1517c1f1:1;
  unsigned int s1517c1f2:1;
  unsigned int s1517c1f3:1;
  unsigned int s1517c1f4:1;
  int s1517c1f5;
  ::S1292C12 s1517c1f6;
  ::S674C29_nt s1517c1f7;
  virtual  ~S1517C1(); // _ZN7S1517C1D1Ev
  virtual void  v1(); // _ZN7S1517C12v1Ev
  virtual void  v2(); // _ZN7S1517C12v2Ev
  virtual void  v3(); // _ZN7S1517C12v3Ev
  virtual void  v4(); // _ZN7S1517C12v4Ev
  virtual void  v5(); // _ZN7S1517C12v5Ev
  S1517C1(); // tgen
};
//SIG(1 S1517C1) C1{ BC2{ BC3{ BC4{ 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 FC5{ m Fi[2]} Fp[2]} vd v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 FC6{ m}} vd v90 v91 v92 v93 v94 v95 v96 v97 v98} vd v1 v2 v3 v4 v5 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi FC7{ BC8{ m Fc[4] FC9{ BC10{ BC11{ m Fp Fi[2]}}} Fi[2]} Fp} FC12{ m Fi[3]}}


 S1517C1 ::~S1517C1(){ note_dtor("S1517C1", this);}
void  S1517C1 ::v1(){vfunc_called(this, "_ZN7S1517C12v1Ev");}
void  S1517C1 ::v2(){vfunc_called(this, "_ZN7S1517C12v2Ev");}
void  S1517C1 ::v3(){vfunc_called(this, "_ZN7S1517C12v3Ev");}
void  S1517C1 ::v4(){vfunc_called(this, "_ZN7S1517C12v4Ev");}
void  S1517C1 ::v5(){vfunc_called(this, "_ZN7S1517C12v5Ev");}
S1517C1 ::S1517C1(){ note_ctor("S1517C1", this);} // tgen

static void Test_S1517C1()
{
  extern Class_Descriptor cd_S1517C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(21,28)];
    init_test(&cd_S1517C1, buf);
    S1517C1 *dp, &lv = *(dp=new (buf) S1517C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(160,108), "sizeof(S1517C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1517C1)");
    check_base_class_offset(lv, (S1517C4*)(S1517C3*)(S1517C2*), 0, "S1517C1");
    check_base_class_offset(lv, (S1517C3*)(S1517C2*), 0, "S1517C1");
    check_base_class_offset(lv, (S1517C2*), 0, "S1517C1");
    set_bf_and_test(lv, s1517c1f0, ABISELECT(98,62), 0, 1, 1, "S1517C1");
    set_bf_and_test(lv, s1517c1f1, ABISELECT(98,62), 1, 1, 1, "S1517C1");
    set_bf_and_test(lv, s1517c1f2, ABISELECT(98,62), 2, 1, 1, "S1517C1");
    set_bf_and_test(lv, s1517c1f3, ABISELECT(98,62), 3, 1, 1, "S1517C1");
    set_bf_and_test(lv, s1517c1f4, ABISELECT(98,62), 4, 1, 1, "S1517C1");
    check_field_offset(lv, s1517c1f5, ABISELECT(100,64), "S1517C1.s1517c1f5");
    check_field_offset(lv, s1517c1f6, ABISELECT(104,68), "S1517C1.s1517c1f6");
    check_field_offset(lv, s1517c1f7, ABISELECT(144,96), "S1517C1.s1517c1f7");
    test_class_info(&lv, &cd_S1517C1);
    dp->~S1517C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1517C1(Test_S1517C1, "S1517C1", ABISELECT(160,108));

#else // __cplusplus

extern void _ZN7S1517C1C1Ev();
extern void _ZN7S1517C1D1Ev();
Name_Map name_map_S1517C1[] = {
  NSPAIR(_ZN7S1517C1C1Ev),
  NSPAIR(_ZN7S1517C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1517C4;
extern VTBL_ENTRY _ZTI7S1517C4[];
extern  VTBL_ENTRY _ZTV7S1517C4[];
extern Class_Descriptor cd_S1517C3;
extern VTBL_ENTRY _ZTI7S1517C3[];
extern  VTBL_ENTRY _ZTV7S1517C3[];
extern Class_Descriptor cd_S1517C2;
extern VTBL_ENTRY _ZTI7S1517C2[];
extern  VTBL_ENTRY _ZTV7S1517C2[];
static Base_Class bases_S1517C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1517C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S1517C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S1517C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S1517C1[];
extern void _ZN7S1517C1D1Ev();
extern void _ZN7S1517C1D0Ev();
extern void _ZN7S1517C42v6Ev();
extern void _ZN7S1517C42v7Ev();
extern void _ZN7S1517C42v8Ev();
extern void _ZN7S1517C42v9Ev();
extern void _ZN7S1517C43v10Ev();
extern void _ZN7S1517C43v11Ev();
extern void _ZN7S1517C43v12Ev();
extern void _ZN7S1517C43v13Ev();
extern void _ZN7S1517C43v14Ev();
extern void _ZN7S1517C43v15Ev();
extern void _ZN7S1517C43v16Ev();
extern void _ZN7S1517C43v17Ev();
extern void _ZN7S1517C43v18Ev();
extern void _ZN7S1517C43v19Ev();
extern void _ZN7S1517C43v20Ev();
extern void _ZN7S1517C43v21Ev();
extern void _ZN7S1517C43v22Ev();
extern void _ZN7S1517C43v23Ev();
extern void _ZN7S1517C43v24Ev();
extern void _ZN7S1517C43v25Ev();
extern void _ZN7S1517C43v26Ev();
extern void _ZN7S1517C43v27Ev();
extern void _ZN7S1517C43v28Ev();
extern void _ZN7S1517C43v29Ev();
extern void _ZN7S1517C43v30Ev();
extern void _ZN7S1517C43v31Ev();
extern void _ZN7S1517C43v32Ev();
extern void _ZN7S1517C43v33Ev();
extern void _ZN7S1517C43v34Ev();
extern void _ZN7S1517C43v35Ev();
extern void _ZN7S1517C43v36Ev();
extern void _ZN7S1517C43v37Ev();
extern void _ZN7S1517C43v38Ev();
extern void _ZN7S1517C43v39Ev();
extern void _ZN7S1517C43v40Ev();
extern void _ZN7S1517C43v41Ev();
extern void _ZN7S1517C43v42Ev();
extern void _ZN7S1517C43v43Ev();
extern void _ZN7S1517C43v44Ev();
extern void _ZN7S1517C43v45Ev();
extern void _ZN7S1517C43v46Ev();
extern void _ZN7S1517C43v47Ev();
extern void _ZN7S1517C43v48Ev();
extern void _ZN7S1517C43v49Ev();
extern void _ZN7S1517C43v50Ev();
extern void _ZN7S1517C43v51Ev();
extern void _ZN7S1517C43v52Ev();
extern void _ZN7S1517C43v53Ev();
extern void _ZN7S1517C43v54Ev();
extern void _ZN7S1517C43v55Ev();
extern void _ZN7S1517C43v56Ev();
extern void _ZN7S1517C43v57Ev();
extern void _ZN7S1517C43v58Ev();
extern void _ZN7S1517C43v59Ev();
extern void _ZN7S1517C43v60Ev();
extern void _ZN7S1517C43v61Ev();
extern void _ZN7S1517C43v62Ev();
extern void _ZN7S1517C43v63Ev();
extern void _ZN7S1517C43v64Ev();
extern void _ZN7S1517C43v65Ev();
extern void _ZN7S1517C43v66Ev();
extern void _ZN7S1517C43v67Ev();
extern void _ZN7S1517C43v68Ev();
extern void _ZN7S1517C43v69Ev();
extern void _ZN7S1517C33v70Ev();
extern void _ZN7S1517C33v71Ev();
extern void _ZN7S1517C33v72Ev();
extern void _ZN7S1517C33v73Ev();
extern void _ZN7S1517C33v74Ev();
extern void _ZN7S1517C33v75Ev();
extern void _ZN7S1517C33v76Ev();
extern void _ZN7S1517C33v77Ev();
extern void _ZN7S1517C33v78Ev();
extern void _ZN7S1517C33v79Ev();
extern void _ZN7S1517C33v80Ev();
extern void _ZN7S1517C33v81Ev();
extern void _ZN7S1517C33v82Ev();
extern void _ZN7S1517C33v83Ev();
extern void _ZN7S1517C33v84Ev();
extern void _ZN7S1517C33v85Ev();
extern void _ZN7S1517C33v86Ev();
extern void _ZN7S1517C33v87Ev();
extern void _ZN7S1517C33v88Ev();
extern void _ZN7S1517C33v89Ev();
extern void _ZN7S1517C23v90Ev();
extern void _ZN7S1517C23v91Ev();
extern void _ZN7S1517C23v92Ev();
extern void _ZN7S1517C23v93Ev();
extern void _ZN7S1517C23v94Ev();
extern void _ZN7S1517C23v95Ev();
extern void _ZN7S1517C23v96Ev();
extern void _ZN7S1517C23v97Ev();
extern void _ZN7S1517C23v98Ev();
extern void _ZN7S1517C12v1Ev();
extern void _ZN7S1517C12v2Ev();
extern void _ZN7S1517C12v3Ev();
extern void _ZN7S1517C12v4Ev();
extern void _ZN7S1517C12v5Ev();
static  VTBL_ENTRY vtc_S1517C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1517C1[0]),
  (VTBL_ENTRY)&_ZN7S1517C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1517C1D0Ev,
  (VTBL_ENTRY)&_ZN7S1517C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1517C42v7Ev,
  (VTBL_ENTRY)&_ZN7S1517C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1517C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1517C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1517C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1517C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1517C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1517C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1517C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1517C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1517C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1517C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1517C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1517C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1517C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1517C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1517C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1517C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1517C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1517C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1517C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1517C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1517C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1517C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1517C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1517C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1517C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1517C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1517C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1517C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1517C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1517C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1517C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1517C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1517C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1517C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1517C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1517C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1517C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1517C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1517C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1517C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1517C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1517C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1517C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1517C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1517C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1517C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1517C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1517C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1517C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1517C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1517C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1517C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1517C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1517C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1517C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1517C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1517C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1517C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1517C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1517C43v68Ev,
  (VTBL_ENTRY)&_ZN7S1517C43v69Ev,
  (VTBL_ENTRY)&_ZN7S1517C33v70Ev,
  (VTBL_ENTRY)&_ZN7S1517C33v71Ev,
  (VTBL_ENTRY)&_ZN7S1517C33v72Ev,
  (VTBL_ENTRY)&_ZN7S1517C33v73Ev,
  (VTBL_ENTRY)&_ZN7S1517C33v74Ev,
  (VTBL_ENTRY)&_ZN7S1517C33v75Ev,
  (VTBL_ENTRY)&_ZN7S1517C33v76Ev,
  (VTBL_ENTRY)&_ZN7S1517C33v77Ev,
  (VTBL_ENTRY)&_ZN7S1517C33v78Ev,
  (VTBL_ENTRY)&_ZN7S1517C33v79Ev,
  (VTBL_ENTRY)&_ZN7S1517C33v80Ev,
  (VTBL_ENTRY)&_ZN7S1517C33v81Ev,
  (VTBL_ENTRY)&_ZN7S1517C33v82Ev,
  (VTBL_ENTRY)&_ZN7S1517C33v83Ev,
  (VTBL_ENTRY)&_ZN7S1517C33v84Ev,
  (VTBL_ENTRY)&_ZN7S1517C33v85Ev,
  (VTBL_ENTRY)&_ZN7S1517C33v86Ev,
  (VTBL_ENTRY)&_ZN7S1517C33v87Ev,
  (VTBL_ENTRY)&_ZN7S1517C33v88Ev,
  (VTBL_ENTRY)&_ZN7S1517C33v89Ev,
  (VTBL_ENTRY)&_ZN7S1517C23v90Ev,
  (VTBL_ENTRY)&_ZN7S1517C23v91Ev,
  (VTBL_ENTRY)&_ZN7S1517C23v92Ev,
  (VTBL_ENTRY)&_ZN7S1517C23v93Ev,
  (VTBL_ENTRY)&_ZN7S1517C23v94Ev,
  (VTBL_ENTRY)&_ZN7S1517C23v95Ev,
  (VTBL_ENTRY)&_ZN7S1517C23v96Ev,
  (VTBL_ENTRY)&_ZN7S1517C23v97Ev,
  (VTBL_ENTRY)&_ZN7S1517C23v98Ev,
  (VTBL_ENTRY)&_ZN7S1517C12v1Ev,
  (VTBL_ENTRY)&_ZN7S1517C12v2Ev,
  (VTBL_ENTRY)&_ZN7S1517C12v3Ev,
  (VTBL_ENTRY)&_ZN7S1517C12v4Ev,
  (VTBL_ENTRY)&_ZN7S1517C12v5Ev,
};
extern VTBL_ENTRY _ZTI7S1517C1[];
extern  VTBL_ENTRY _ZTV7S1517C1[];
Class_Descriptor cd_S1517C1 = {  "S1517C1", // class name
  bases_S1517C1, 3,
  &(vtc_S1517C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(160,108), // object size
  NSPAIRA(_ZTI7S1517C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1517C1),102, //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  S1301C4  {
  int s1301c4f0;
  __tsi64 s1301c4f1;
  void *s1301c4f2[4];
  int s1301c4f3[2];
  void *s1301c4f4;
  ::S674C6_nt s1301c4f5;
  void *s1301c4f6[2];
  virtual  ~S1301C4(); // _ZN7S1301C4D1Ev
  virtual void  v11(); // _ZN7S1301C43v11Ev
  virtual void  v12(); // _ZN7S1301C43v12Ev
  virtual void  v13(); // _ZN7S1301C43v13Ev
  virtual void  v14(); // _ZN7S1301C43v14Ev
  virtual void  v15(); // _ZN7S1301C43v15Ev
  virtual void  v16(); // _ZN7S1301C43v16Ev
  virtual void  v17(); // _ZN7S1301C43v17Ev
  virtual void  v18(); // _ZN7S1301C43v18Ev
  virtual void  v19(); // _ZN7S1301C43v19Ev
  virtual void  v20(); // _ZN7S1301C43v20Ev
  virtual void  v21(); // _ZN7S1301C43v21Ev
  virtual void  v22(); // _ZN7S1301C43v22Ev
  virtual void  v23(); // _ZN7S1301C43v23Ev
  virtual void  v24(); // _ZN7S1301C43v24Ev
  virtual void  v25(); // _ZN7S1301C43v25Ev
  virtual void  v26(); // _ZN7S1301C43v26Ev
  virtual void  v27(); // _ZN7S1301C43v27Ev
  virtual void  v28(); // _ZN7S1301C43v28Ev
  virtual void  v29(); // _ZN7S1301C43v29Ev
  virtual void  v30(); // _ZN7S1301C43v30Ev
  virtual void  v31(); // _ZN7S1301C43v31Ev
  virtual void  v32(); // _ZN7S1301C43v32Ev
  virtual void  v33(); // _ZN7S1301C43v33Ev
  virtual void  v34(); // _ZN7S1301C43v34Ev
  virtual void  v35(); // _ZN7S1301C43v35Ev
  virtual void  v36(); // _ZN7S1301C43v36Ev
  virtual void  v37(); // _ZN7S1301C43v37Ev
  virtual void  v38(); // _ZN7S1301C43v38Ev
  virtual void  v39(); // _ZN7S1301C43v39Ev
  virtual void  v40(); // _ZN7S1301C43v40Ev
  virtual void  v41(); // _ZN7S1301C43v41Ev
  virtual void  v42(); // _ZN7S1301C43v42Ev
  virtual void  v43(); // _ZN7S1301C43v43Ev
  virtual void  v44(); // _ZN7S1301C43v44Ev
  virtual void  v45(); // _ZN7S1301C43v45Ev
  virtual void  v46(); // _ZN7S1301C43v46Ev
  virtual void  v47(); // _ZN7S1301C43v47Ev
  virtual void  v48(); // _ZN7S1301C43v48Ev
  virtual void  v49(); // _ZN7S1301C43v49Ev
  virtual void  v50(); // _ZN7S1301C43v50Ev
  virtual void  v51(); // _ZN7S1301C43v51Ev
  virtual void  v52(); // _ZN7S1301C43v52Ev
  virtual void  v53(); // _ZN7S1301C43v53Ev
  virtual void  v54(); // _ZN7S1301C43v54Ev
  virtual void  v55(); // _ZN7S1301C43v55Ev
  virtual void  v56(); // _ZN7S1301C43v56Ev
  virtual void  v57(); // _ZN7S1301C43v57Ev
  virtual void  v58(); // _ZN7S1301C43v58Ev
  virtual void  v59(); // _ZN7S1301C43v59Ev
  virtual void  v60(); // _ZN7S1301C43v60Ev
  virtual void  v61(); // _ZN7S1301C43v61Ev
  virtual void  v62(); // _ZN7S1301C43v62Ev
  virtual void  v63(); // _ZN7S1301C43v63Ev
  virtual void  v64(); // _ZN7S1301C43v64Ev
  virtual void  v65(); // _ZN7S1301C43v65Ev
  virtual void  v66(); // _ZN7S1301C43v66Ev
  virtual void  v67(); // _ZN7S1301C43v67Ev
  virtual void  v68(); // _ZN7S1301C43v68Ev
  virtual void  v69(); // _ZN7S1301C43v69Ev
  virtual void  v70(); // _ZN7S1301C43v70Ev
  virtual void  v71(); // _ZN7S1301C43v71Ev
  virtual void  v72(); // _ZN7S1301C43v72Ev
  virtual void  v73(); // _ZN7S1301C43v73Ev
  virtual void  v74(); // _ZN7S1301C43v74Ev
  S1301C4(); // tgen
};
//SIG(-1 S1301C4) 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]}


 S1301C4 ::~S1301C4(){ note_dtor("S1301C4", this);}
void  S1301C4 ::v11(){vfunc_called(this, "_ZN7S1301C43v11Ev");}
void  S1301C4 ::v12(){vfunc_called(this, "_ZN7S1301C43v12Ev");}
void  S1301C4 ::v13(){vfunc_called(this, "_ZN7S1301C43v13Ev");}
void  S1301C4 ::v14(){vfunc_called(this, "_ZN7S1301C43v14Ev");}
void  S1301C4 ::v15(){vfunc_called(this, "_ZN7S1301C43v15Ev");}
void  S1301C4 ::v16(){vfunc_called(this, "_ZN7S1301C43v16Ev");}
void  S1301C4 ::v17(){vfunc_called(this, "_ZN7S1301C43v17Ev");}
void  S1301C4 ::v18(){vfunc_called(this, "_ZN7S1301C43v18Ev");}
void  S1301C4 ::v19(){vfunc_called(this, "_ZN7S1301C43v19Ev");}
void  S1301C4 ::v20(){vfunc_called(this, "_ZN7S1301C43v20Ev");}
void  S1301C4 ::v21(){vfunc_called(this, "_ZN7S1301C43v21Ev");}
void  S1301C4 ::v22(){vfunc_called(this, "_ZN7S1301C43v22Ev");}
void  S1301C4 ::v23(){vfunc_called(this, "_ZN7S1301C43v23Ev");}
void  S1301C4 ::v24(){vfunc_called(this, "_ZN7S1301C43v24Ev");}
void  S1301C4 ::v25(){vfunc_called(this, "_ZN7S1301C43v25Ev");}
void  S1301C4 ::v26(){vfunc_called(this, "_ZN7S1301C43v26Ev");}
void  S1301C4 ::v27(){vfunc_called(this, "_ZN7S1301C43v27Ev");}
void  S1301C4 ::v28(){vfunc_called(this, "_ZN7S1301C43v28Ev");}
void  S1301C4 ::v29(){vfunc_called(this, "_ZN7S1301C43v29Ev");}
void  S1301C4 ::v30(){vfunc_called(this, "_ZN7S1301C43v30Ev");}
void  S1301C4 ::v31(){vfunc_called(this, "_ZN7S1301C43v31Ev");}
void  S1301C4 ::v32(){vfunc_called(this, "_ZN7S1301C43v32Ev");}
void  S1301C4 ::v33(){vfunc_called(this, "_ZN7S1301C43v33Ev");}
void  S1301C4 ::v34(){vfunc_called(this, "_ZN7S1301C43v34Ev");}
void  S1301C4 ::v35(){vfunc_called(this, "_ZN7S1301C43v35Ev");}
void  S1301C4 ::v36(){vfunc_called(this, "_ZN7S1301C43v36Ev");}
void  S1301C4 ::v37(){vfunc_called(this, "_ZN7S1301C43v37Ev");}
void  S1301C4 ::v38(){vfunc_called(this, "_ZN7S1301C43v38Ev");}
void  S1301C4 ::v39(){vfunc_called(this, "_ZN7S1301C43v39Ev");}
void  S1301C4 ::v40(){vfunc_called(this, "_ZN7S1301C43v40Ev");}
void  S1301C4 ::v41(){vfunc_called(this, "_ZN7S1301C43v41Ev");}
void  S1301C4 ::v42(){vfunc_called(this, "_ZN7S1301C43v42Ev");}
void  S1301C4 ::v43(){vfunc_called(this, "_ZN7S1301C43v43Ev");}
void  S1301C4 ::v44(){vfunc_called(this, "_ZN7S1301C43v44Ev");}
void  S1301C4 ::v45(){vfunc_called(this, "_ZN7S1301C43v45Ev");}
void  S1301C4 ::v46(){vfunc_called(this, "_ZN7S1301C43v46Ev");}
void  S1301C4 ::v47(){vfunc_called(this, "_ZN7S1301C43v47Ev");}
void  S1301C4 ::v48(){vfunc_called(this, "_ZN7S1301C43v48Ev");}
void  S1301C4 ::v49(){vfunc_called(this, "_ZN7S1301C43v49Ev");}
void  S1301C4 ::v50(){vfunc_called(this, "_ZN7S1301C43v50Ev");}
void  S1301C4 ::v51(){vfunc_called(this, "_ZN7S1301C43v51Ev");}
void  S1301C4 ::v52(){vfunc_called(this, "_ZN7S1301C43v52Ev");}
void  S1301C4 ::v53(){vfunc_called(this, "_ZN7S1301C43v53Ev");}
void  S1301C4 ::v54(){vfunc_called(this, "_ZN7S1301C43v54Ev");}
void  S1301C4 ::v55(){vfunc_called(this, "_ZN7S1301C43v55Ev");}
void  S1301C4 ::v56(){vfunc_called(this, "_ZN7S1301C43v56Ev");}
void  S1301C4 ::v57(){vfunc_called(this, "_ZN7S1301C43v57Ev");}
void  S1301C4 ::v58(){vfunc_called(this, "_ZN7S1301C43v58Ev");}
void  S1301C4 ::v59(){vfunc_called(this, "_ZN7S1301C43v59Ev");}
void  S1301C4 ::v60(){vfunc_called(this, "_ZN7S1301C43v60Ev");}
void  S1301C4 ::v61(){vfunc_called(this, "_ZN7S1301C43v61Ev");}
void  S1301C4 ::v62(){vfunc_called(this, "_ZN7S1301C43v62Ev");}
void  S1301C4 ::v63(){vfunc_called(this, "_ZN7S1301C43v63Ev");}
void  S1301C4 ::v64(){vfunc_called(this, "_ZN7S1301C43v64Ev");}
void  S1301C4 ::v65(){vfunc_called(this, "_ZN7S1301C43v65Ev");}
void  S1301C4 ::v66(){vfunc_called(this, "_ZN7S1301C43v66Ev");}
void  S1301C4 ::v67(){vfunc_called(this, "_ZN7S1301C43v67Ev");}
void  S1301C4 ::v68(){vfunc_called(this, "_ZN7S1301C43v68Ev");}
void  S1301C4 ::v69(){vfunc_called(this, "_ZN7S1301C43v69Ev");}
void  S1301C4 ::v70(){vfunc_called(this, "_ZN7S1301C43v70Ev");}
void  S1301C4 ::v71(){vfunc_called(this, "_ZN7S1301C43v71Ev");}
void  S1301C4 ::v72(){vfunc_called(this, "_ZN7S1301C43v72Ev");}
void  S1301C4 ::v73(){vfunc_called(this, "_ZN7S1301C43v73Ev");}
void  S1301C4 ::v74(){vfunc_called(this, "_ZN7S1301C43v74Ev");}
S1301C4 ::S1301C4(){ note_ctor("S1301C4", this);} // tgen

static void Test_S1301C4()
{
  extern Class_Descriptor cd_S1301C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S1301C4, buf);
    S1301C4 *dp, &lv = *(dp=new (buf) S1301C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S1301C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1301C4)");
    check_field_offset(lv, s1301c4f0, ABISELECT(8,4), "S1301C4.s1301c4f0");
    check_field_offset(lv, s1301c4f1, ABISELECT(16,8), "S1301C4.s1301c4f1");
    check_field_offset(lv, s1301c4f2, ABISELECT(24,16), "S1301C4.s1301c4f2");
    check_field_offset(lv, s1301c4f3, ABISELECT(56,32), "S1301C4.s1301c4f3");
    check_field_offset(lv, s1301c4f4, ABISELECT(64,40), "S1301C4.s1301c4f4");
    check_field_offset(lv, s1301c4f5, ABISELECT(72,44), "S1301C4.s1301c4f5");
    check_field_offset(lv, s1301c4f6, ABISELECT(80,52), "S1301C4.s1301c4f6");
    test_class_info(&lv, &cd_S1301C4);
    dp->~S1301C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1301C4(Test_S1301C4, "S1301C4", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN7S1301C4C1Ev();
extern void _ZN7S1301C4D1Ev();
Name_Map name_map_S1301C4[] = {
  NSPAIR(_ZN7S1301C4C1Ev),
  NSPAIR(_ZN7S1301C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S1301C4[];
extern void _ZN7S1301C4D1Ev();
extern void _ZN7S1301C4D0Ev();
extern void _ZN7S1301C43v11Ev();
extern void _ZN7S1301C43v12Ev();
extern void _ZN7S1301C43v13Ev();
extern void _ZN7S1301C43v14Ev();
extern void _ZN7S1301C43v15Ev();
extern void _ZN7S1301C43v16Ev();
extern void _ZN7S1301C43v17Ev();
extern void _ZN7S1301C43v18Ev();
extern void _ZN7S1301C43v19Ev();
extern void _ZN7S1301C43v20Ev();
extern void _ZN7S1301C43v21Ev();
extern void _ZN7S1301C43v22Ev();
extern void _ZN7S1301C43v23Ev();
extern void _ZN7S1301C43v24Ev();
extern void _ZN7S1301C43v25Ev();
extern void _ZN7S1301C43v26Ev();
extern void _ZN7S1301C43v27Ev();
extern void _ZN7S1301C43v28Ev();
extern void _ZN7S1301C43v29Ev();
extern void _ZN7S1301C43v30Ev();
extern void _ZN7S1301C43v31Ev();
extern void _ZN7S1301C43v32Ev();
extern void _ZN7S1301C43v33Ev();
extern void _ZN7S1301C43v34Ev();
extern void _ZN7S1301C43v35Ev();
extern void _ZN7S1301C43v36Ev();
extern void _ZN7S1301C43v37Ev();
extern void _ZN7S1301C43v38Ev();
extern void _ZN7S1301C43v39Ev();
extern void _ZN7S1301C43v40Ev();
extern void _ZN7S1301C43v41Ev();
extern void _ZN7S1301C43v42Ev();
extern void _ZN7S1301C43v43Ev();
extern void _ZN7S1301C43v44Ev();
extern void _ZN7S1301C43v45Ev();
extern void _ZN7S1301C43v46Ev();
extern void _ZN7S1301C43v47Ev();
extern void _ZN7S1301C43v48Ev();
extern void _ZN7S1301C43v49Ev();
extern void _ZN7S1301C43v50Ev();
extern void _ZN7S1301C43v51Ev();
extern void _ZN7S1301C43v52Ev();
extern void _ZN7S1301C43v53Ev();
extern void _ZN7S1301C43v54Ev();
extern void _ZN7S1301C43v55Ev();
extern void _ZN7S1301C43v56Ev();
extern void _ZN7S1301C43v57Ev();
extern void _ZN7S1301C43v58Ev();
extern void _ZN7S1301C43v59Ev();
extern void _ZN7S1301C43v60Ev();
extern void _ZN7S1301C43v61Ev();
extern void _ZN7S1301C43v62Ev();
extern void _ZN7S1301C43v63Ev();
extern void _ZN7S1301C43v64Ev();
extern void _ZN7S1301C43v65Ev();
extern void _ZN7S1301C43v66Ev();
extern void _ZN7S1301C43v67Ev();
extern void _ZN7S1301C43v68Ev();
extern void _ZN7S1301C43v69Ev();
extern void _ZN7S1301C43v70Ev();
extern void _ZN7S1301C43v71Ev();
extern void _ZN7S1301C43v72Ev();
extern void _ZN7S1301C43v73Ev();
extern void _ZN7S1301C43v74Ev();
static  VTBL_ENTRY vtc_S1301C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1301C4[0]),
  (VTBL_ENTRY)&_ZN7S1301C4D1Ev,
  (VTBL_ENTRY)&_ZN7S1301C4D0Ev,
  (VTBL_ENTRY)&_ZN7S1301C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1301C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1301C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1301C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1301C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1301C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1301C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1301C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1301C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1301C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1301C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1301C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1301C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1301C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1301C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1301C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1301C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1301C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1301C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1301C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1301C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1301C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1301C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1301C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1301C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1301C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1301C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1301C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1301C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1301C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1301C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1301C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1301C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1301C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1301C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1301C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1301C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1301C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1301C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1301C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1301C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1301C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1301C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1301C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1301C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1301C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1301C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1301C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1301C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1301C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1301C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1301C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1301C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1301C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1301C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1301C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1301C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1301C43v68Ev,
  (VTBL_ENTRY)&_ZN7S1301C43v69Ev,
  (VTBL_ENTRY)&_ZN7S1301C43v70Ev,
  (VTBL_ENTRY)&_ZN7S1301C43v71Ev,
  (VTBL_ENTRY)&_ZN7S1301C43v72Ev,
  (VTBL_ENTRY)&_ZN7S1301C43v73Ev,
  (VTBL_ENTRY)&_ZN7S1301C43v74Ev,
};
extern VTBL_ENTRY _ZTI7S1301C4[];
extern  VTBL_ENTRY _ZTV7S1301C4[];
Class_Descriptor cd_S1301C4 = {  "S1301C4", // class name
  0,0,//no base classes
  &(vtc_S1301C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI7S1301C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S1301C4),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  S1301C3  : S1301C4 {
  unsigned int s1301c3f0:1;
  unsigned int s1301c3f1:1;
  unsigned int s1301c3f2:1;
  unsigned int s1301c3f3:1;
  unsigned int s1301c3f4:1;
  unsigned int s1301c3f5:1;
  unsigned int s1301c3f6:1;
  ::S3625C32 s1301c3f7;
  virtual  ~S1301C3(); // _ZN7S1301C3D1Ev
  virtual void  v75(); // _ZN7S1301C33v75Ev
  virtual void  v76(); // _ZN7S1301C33v76Ev
  virtual void  v77(); // _ZN7S1301C33v77Ev
  virtual void  v78(); // _ZN7S1301C33v78Ev
  virtual void  v79(); // _ZN7S1301C33v79Ev
  virtual void  v80(); // _ZN7S1301C33v80Ev
  virtual void  v81(); // _ZN7S1301C33v81Ev
  virtual void  v82(); // _ZN7S1301C33v82Ev
  virtual void  v83(); // _ZN7S1301C33v83Ev
  virtual void  v84(); // _ZN7S1301C33v84Ev
  virtual void  v85(); // _ZN7S1301C33v85Ev
  virtual void  v86(); // _ZN7S1301C33v86Ev
  virtual void  v87(); // _ZN7S1301C33v87Ev
  virtual void  v88(); // _ZN7S1301C33v88Ev
  virtual void  v89(); // _ZN7S1301C33v89Ev
  virtual void  v90(); // _ZN7S1301C33v90Ev
  virtual void  v91(); // _ZN7S1301C33v91Ev
  virtual void  v92(); // _ZN7S1301C33v92Ev
  virtual void  v93(); // _ZN7S1301C33v93Ev
  virtual void  v94(); // _ZN7S1301C33v94Ev
  S1301C3(); // tgen
};
//SIG(-1 S1301C3) C1{ BC2{ 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 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 Fi FL Fp[4] Fi[2] Fp FC3{ m Fi[2]} Fp[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 FC4{ m}}


 S1301C3 ::~S1301C3(){ note_dtor("S1301C3", this);}
void  S1301C3 ::v75(){vfunc_called(this, "_ZN7S1301C33v75Ev");}
void  S1301C3 ::v76(){vfunc_called(this, "_ZN7S1301C33v76Ev");}
void  S1301C3 ::v77(){vfunc_called(this, "_ZN7S1301C33v77Ev");}
void  S1301C3 ::v78(){vfunc_called(this, "_ZN7S1301C33v78Ev");}
void  S1301C3 ::v79(){vfunc_called(this, "_ZN7S1301C33v79Ev");}
void  S1301C3 ::v80(){vfunc_called(this, "_ZN7S1301C33v80Ev");}
void  S1301C3 ::v81(){vfunc_called(this, "_ZN7S1301C33v81Ev");}
void  S1301C3 ::v82(){vfunc_called(this, "_ZN7S1301C33v82Ev");}
void  S1301C3 ::v83(){vfunc_called(this, "_ZN7S1301C33v83Ev");}
void  S1301C3 ::v84(){vfunc_called(this, "_ZN7S1301C33v84Ev");}
void  S1301C3 ::v85(){vfunc_called(this, "_ZN7S1301C33v85Ev");}
void  S1301C3 ::v86(){vfunc_called(this, "_ZN7S1301C33v86Ev");}
void  S1301C3 ::v87(){vfunc_called(this, "_ZN7S1301C33v87Ev");}
void  S1301C3 ::v88(){vfunc_called(this, "_ZN7S1301C33v88Ev");}
void  S1301C3 ::v89(){vfunc_called(this, "_ZN7S1301C33v89Ev");}
void  S1301C3 ::v90(){vfunc_called(this, "_ZN7S1301C33v90Ev");}
void  S1301C3 ::v91(){vfunc_called(this, "_ZN7S1301C33v91Ev");}
void  S1301C3 ::v92(){vfunc_called(this, "_ZN7S1301C33v92Ev");}
void  S1301C3 ::v93(){vfunc_called(this, "_ZN7S1301C33v93Ev");}
void  S1301C3 ::v94(){vfunc_called(this, "_ZN7S1301C33v94Ev");}
S1301C3 ::S1301C3(){ note_ctor("S1301C3", this);} // tgen

static void Test_S1301C3()
{
  extern Class_Descriptor cd_S1301C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(14,17)];
    init_test(&cd_S1301C3, buf);
    S1301C3 *dp, &lv = *(dp=new (buf) S1301C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(104,64), "sizeof(S1301C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1301C3)");
    check_base_class_offset(lv, (S1301C4*), 0, "S1301C3");
    set_bf_and_test(lv, s1301c3f0, ABISELECT(96,60), 0, 1, 1, "S1301C3");
    set_bf_and_test(lv, s1301c3f1, ABISELECT(96,60), 1, 1, 1, "S1301C3");
    set_bf_and_test(lv, s1301c3f2, ABISELECT(96,60), 2, 1, 1, "S1301C3");
    set_bf_and_test(lv, s1301c3f3, ABISELECT(96,60), 3, 1, 1, "S1301C3");
    set_bf_and_test(lv, s1301c3f4, ABISELECT(96,60), 4, 1, 1, "S1301C3");
    set_bf_and_test(lv, s1301c3f5, ABISELECT(96,60), 5, 1, 1, "S1301C3");
    set_bf_and_test(lv, s1301c3f6, ABISELECT(96,60), 6, 1, 1, "S1301C3");
    check_field_offset(lv, s1301c3f7, ABISELECT(97,61), "S1301C3.s1301c3f7");
    test_class_info(&lv, &cd_S1301C3);
    dp->~S1301C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1301C3(Test_S1301C3, "S1301C3", ABISELECT(104,64));

#else // __cplusplus

extern void _ZN7S1301C3C1Ev();
extern void _ZN7S1301C3D1Ev();
Name_Map name_map_S1301C3[] = {
  NSPAIR(_ZN7S1301C3C1Ev),
  NSPAIR(_ZN7S1301C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1301C4;
extern VTBL_ENTRY _ZTI7S1301C4[];
extern  VTBL_ENTRY _ZTV7S1301C4[];
static Base_Class bases_S1301C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1301C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI7S1301C3[];
extern void _ZN7S1301C3D1Ev();
extern void _ZN7S1301C3D0Ev();
extern void _ZN7S1301C43v11Ev();
extern void _ZN7S1301C43v12Ev();
extern void _ZN7S1301C43v13Ev();
extern void _ZN7S1301C43v14Ev();
extern void _ZN7S1301C43v15Ev();
extern void _ZN7S1301C43v16Ev();
extern void _ZN7S1301C43v17Ev();
extern void _ZN7S1301C43v18Ev();
extern void _ZN7S1301C43v19Ev();
extern void _ZN7S1301C43v20Ev();
extern void _ZN7S1301C43v21Ev();
extern void _ZN7S1301C43v22Ev();
extern void _ZN7S1301C43v23Ev();
extern void _ZN7S1301C43v24Ev();
extern void _ZN7S1301C43v25Ev();
extern void _ZN7S1301C43v26Ev();
extern void _ZN7S1301C43v27Ev();
extern void _ZN7S1301C43v28Ev();
extern void _ZN7S1301C43v29Ev();
extern void _ZN7S1301C43v30Ev();
extern void _ZN7S1301C43v31Ev();
extern void _ZN7S1301C43v32Ev();
extern void _ZN7S1301C43v33Ev();
extern void _ZN7S1301C43v34Ev();
extern void _ZN7S1301C43v35Ev();
extern void _ZN7S1301C43v36Ev();
extern void _ZN7S1301C43v37Ev();
extern void _ZN7S1301C43v38Ev();
extern void _ZN7S1301C43v39Ev();
extern void _ZN7S1301C43v40Ev();
extern void _ZN7S1301C43v41Ev();
extern void _ZN7S1301C43v42Ev();
extern void _ZN7S1301C43v43Ev();
extern void _ZN7S1301C43v44Ev();
extern void _ZN7S1301C43v45Ev();
extern void _ZN7S1301C43v46Ev();
extern void _ZN7S1301C43v47Ev();
extern void _ZN7S1301C43v48Ev();
extern void _ZN7S1301C43v49Ev();
extern void _ZN7S1301C43v50Ev();
extern void _ZN7S1301C43v51Ev();
extern void _ZN7S1301C43v52Ev();
extern void _ZN7S1301C43v53Ev();
extern void _ZN7S1301C43v54Ev();
extern void _ZN7S1301C43v55Ev();
extern void _ZN7S1301C43v56Ev();
extern void _ZN7S1301C43v57Ev();
extern void _ZN7S1301C43v58Ev();
extern void _ZN7S1301C43v59Ev();
extern void _ZN7S1301C43v60Ev();
extern void _ZN7S1301C43v61Ev();
extern void _ZN7S1301C43v62Ev();
extern void _ZN7S1301C43v63Ev();
extern void _ZN7S1301C43v64Ev();
extern void _ZN7S1301C43v65Ev();
extern void _ZN7S1301C43v66Ev();
extern void _ZN7S1301C43v67Ev();
extern void _ZN7S1301C43v68Ev();
extern void _ZN7S1301C43v69Ev();
extern void _ZN7S1301C43v70Ev();
extern void _ZN7S1301C43v71Ev();
extern void _ZN7S1301C43v72Ev();
extern void _ZN7S1301C43v73Ev();
extern void _ZN7S1301C43v74Ev();
extern void _ZN7S1301C33v75Ev();
extern void _ZN7S1301C33v76Ev();
extern void _ZN7S1301C33v77Ev();
extern void _ZN7S1301C33v78Ev();
extern void _ZN7S1301C33v79Ev();
extern void _ZN7S1301C33v80Ev();
extern void _ZN7S1301C33v81Ev();
extern void _ZN7S1301C33v82Ev();
extern void _ZN7S1301C33v83Ev();
extern void _ZN7S1301C33v84Ev();
extern void _ZN7S1301C33v85Ev();
extern void _ZN7S1301C33v86Ev();
extern void _ZN7S1301C33v87Ev();
extern void _ZN7S1301C33v88Ev();
extern void _ZN7S1301C33v89Ev();
extern void _ZN7S1301C33v90Ev();
extern void _ZN7S1301C33v91Ev();
extern void _ZN7S1301C33v92Ev();
extern void _ZN7S1301C33v93Ev();
extern void _ZN7S1301C33v94Ev();
static  VTBL_ENTRY vtc_S1301C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1301C3[0]),
  (VTBL_ENTRY)&_ZN7S1301C3D1Ev,
  (VTBL_ENTRY)&_ZN7S1301C3D0Ev,
  (VTBL_ENTRY)&_ZN7S1301C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1301C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1301C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1301C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1301C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1301C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1301C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1301C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1301C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1301C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1301C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1301C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1301C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1301C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1301C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1301C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1301C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1301C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1301C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1301C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1301C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1301C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1301C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1301C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1301C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1301C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1301C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1301C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1301C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1301C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1301C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1301C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1301C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1301C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1301C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1301C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1301C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1301C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1301C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1301C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1301C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1301C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1301C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1301C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1301C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1301C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1301C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1301C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1301C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1301C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1301C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1301C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1301C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1301C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1301C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1301C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1301C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1301C43v68Ev,
  (VTBL_ENTRY)&_ZN7S1301C43v69Ev,
  (VTBL_ENTRY)&_ZN7S1301C43v70Ev,
  (VTBL_ENTRY)&_ZN7S1301C43v71Ev,
  (VTBL_ENTRY)&_ZN7S1301C43v72Ev,
  (VTBL_ENTRY)&_ZN7S1301C43v73Ev,
  (VTBL_ENTRY)&_ZN7S1301C43v74Ev,
  (VTBL_ENTRY)&_ZN7S1301C33v75Ev,
  (VTBL_ENTRY)&_ZN7S1301C33v76Ev,
  (VTBL_ENTRY)&_ZN7S1301C33v77Ev,
  (VTBL_ENTRY)&_ZN7S1301C33v78Ev,
  (VTBL_ENTRY)&_ZN7S1301C33v79Ev,
  (VTBL_ENTRY)&_ZN7S1301C33v80Ev,
  (VTBL_ENTRY)&_ZN7S1301C33v81Ev,
  (VTBL_ENTRY)&_ZN7S1301C33v82Ev,
  (VTBL_ENTRY)&_ZN7S1301C33v83Ev,
  (VTBL_ENTRY)&_ZN7S1301C33v84Ev,
  (VTBL_ENTRY)&_ZN7S1301C33v85Ev,
  (VTBL_ENTRY)&_ZN7S1301C33v86Ev,
  (VTBL_ENTRY)&_ZN7S1301C33v87Ev,
  (VTBL_ENTRY)&_ZN7S1301C33v88Ev,
  (VTBL_ENTRY)&_ZN7S1301C33v89Ev,
  (VTBL_ENTRY)&_ZN7S1301C33v90Ev,
  (VTBL_ENTRY)&_ZN7S1301C33v91Ev,
  (VTBL_ENTRY)&_ZN7S1301C33v92Ev,
  (VTBL_ENTRY)&_ZN7S1301C33v93Ev,
  (VTBL_ENTRY)&_ZN7S1301C33v94Ev,
};
extern VTBL_ENTRY _ZTI7S1301C3[];
extern  VTBL_ENTRY _ZTV7S1301C3[];
Class_Descriptor cd_S1301C3 = {  "S1301C3", // class name
  bases_S1301C3, 1,
  &(vtc_S1301C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(104,64), // object size
  NSPAIRA(_ZTI7S1301C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1301C3),88, //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  S1301C2  : S1301C3 {
  virtual  ~S1301C2(); // _ZN7S1301C2D1Ev
  virtual void  v95(); // _ZN7S1301C23v95Ev
  virtual void  v96(); // _ZN7S1301C23v96Ev
  virtual void  v97(); // _ZN7S1301C23v97Ev
  S1301C2(); // tgen
};
//SIG(-1 S1301C2) C1{ BC2{ BC3{ vd 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 Fi FL Fp[4] Fi[2] Fp FC4{ m Fi[2]} Fp[2]} vd v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 FC5{ m}} vd v1 v2 v3}


 S1301C2 ::~S1301C2(){ note_dtor("S1301C2", this);}
void  S1301C2 ::v95(){vfunc_called(this, "_ZN7S1301C23v95Ev");}
void  S1301C2 ::v96(){vfunc_called(this, "_ZN7S1301C23v96Ev");}
void  S1301C2 ::v97(){vfunc_called(this, "_ZN7S1301C23v97Ev");}
S1301C2 ::S1301C2(){ note_ctor("S1301C2", this);} // tgen

static void Test_S1301C2()
{
  extern Class_Descriptor cd_S1301C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(14,17)];
    init_test(&cd_S1301C2, buf);
    S1301C2 *dp, &lv = *(dp=new (buf) S1301C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(104,64), "sizeof(S1301C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1301C2)");
    check_base_class_offset(lv, (S1301C4*)(S1301C3*), 0, "S1301C2");
    check_base_class_offset(lv, (S1301C3*), 0, "S1301C2");
    test_class_info(&lv, &cd_S1301C2);
    dp->~S1301C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1301C2(Test_S1301C2, "S1301C2", ABISELECT(104,64));

#else // __cplusplus

extern void _ZN7S1301C2C1Ev();
extern void _ZN7S1301C2D1Ev();
Name_Map name_map_S1301C2[] = {
  NSPAIR(_ZN7S1301C2C1Ev),
  NSPAIR(_ZN7S1301C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1301C4;
extern VTBL_ENTRY _ZTI7S1301C4[];
extern  VTBL_ENTRY _ZTV7S1301C4[];
extern Class_Descriptor cd_S1301C3;
extern VTBL_ENTRY _ZTI7S1301C3[];
extern  VTBL_ENTRY _ZTV7S1301C3[];
static Base_Class bases_S1301C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1301C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S1301C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S1301C2[];
extern void _ZN7S1301C2D1Ev();
extern void _ZN7S1301C2D0Ev();
extern void _ZN7S1301C43v11Ev();
extern void _ZN7S1301C43v12Ev();
extern void _ZN7S1301C43v13Ev();
extern void _ZN7S1301C43v14Ev();
extern void _ZN7S1301C43v15Ev();
extern void _ZN7S1301C43v16Ev();
extern void _ZN7S1301C43v17Ev();
extern void _ZN7S1301C43v18Ev();
extern void _ZN7S1301C43v19Ev();
extern void _ZN7S1301C43v20Ev();
extern void _ZN7S1301C43v21Ev();
extern void _ZN7S1301C43v22Ev();
extern void _ZN7S1301C43v23Ev();
extern void _ZN7S1301C43v24Ev();
extern void _ZN7S1301C43v25Ev();
extern void _ZN7S1301C43v26Ev();
extern void _ZN7S1301C43v27Ev();
extern void _ZN7S1301C43v28Ev();
extern void _ZN7S1301C43v29Ev();
extern void _ZN7S1301C43v30Ev();
extern void _ZN7S1301C43v31Ev();
extern void _ZN7S1301C43v32Ev();
extern void _ZN7S1301C43v33Ev();
extern void _ZN7S1301C43v34Ev();
extern void _ZN7S1301C43v35Ev();
extern void _ZN7S1301C43v36Ev();
extern void _ZN7S1301C43v37Ev();
extern void _ZN7S1301C43v38Ev();
extern void _ZN7S1301C43v39Ev();
extern void _ZN7S1301C43v40Ev();
extern void _ZN7S1301C43v41Ev();
extern void _ZN7S1301C43v42Ev();
extern void _ZN7S1301C43v43Ev();
extern void _ZN7S1301C43v44Ev();
extern void _ZN7S1301C43v45Ev();
extern void _ZN7S1301C43v46Ev();
extern void _ZN7S1301C43v47Ev();
extern void _ZN7S1301C43v48Ev();
extern void _ZN7S1301C43v49Ev();
extern void _ZN7S1301C43v50Ev();
extern void _ZN7S1301C43v51Ev();
extern void _ZN7S1301C43v52Ev();
extern void _ZN7S1301C43v53Ev();
extern void _ZN7S1301C43v54Ev();
extern void _ZN7S1301C43v55Ev();
extern void _ZN7S1301C43v56Ev();
extern void _ZN7S1301C43v57Ev();
extern void _ZN7S1301C43v58Ev();
extern void _ZN7S1301C43v59Ev();
extern void _ZN7S1301C43v60Ev();
extern void _ZN7S1301C43v61Ev();
extern void _ZN7S1301C43v62Ev();
extern void _ZN7S1301C43v63Ev();
extern void _ZN7S1301C43v64Ev();
extern void _ZN7S1301C43v65Ev();
extern void _ZN7S1301C43v66Ev();
extern void _ZN7S1301C43v67Ev();
extern void _ZN7S1301C43v68Ev();
extern void _ZN7S1301C43v69Ev();
extern void _ZN7S1301C43v70Ev();
extern void _ZN7S1301C43v71Ev();
extern void _ZN7S1301C43v72Ev();
extern void _ZN7S1301C43v73Ev();
extern void _ZN7S1301C43v74Ev();
extern void _ZN7S1301C33v75Ev();
extern void _ZN7S1301C33v76Ev();
extern void _ZN7S1301C33v77Ev();
extern void _ZN7S1301C33v78Ev();
extern void _ZN7S1301C33v79Ev();
extern void _ZN7S1301C33v80Ev();
extern void _ZN7S1301C33v81Ev();
extern void _ZN7S1301C33v82Ev();
extern void _ZN7S1301C33v83Ev();
extern void _ZN7S1301C33v84Ev();
extern void _ZN7S1301C33v85Ev();
extern void _ZN7S1301C33v86Ev();
extern void _ZN7S1301C33v87Ev();
extern void _ZN7S1301C33v88Ev();
extern void _ZN7S1301C33v89Ev();
extern void _ZN7S1301C33v90Ev();
extern void _ZN7S1301C33v91Ev();
extern void _ZN7S1301C33v92Ev();
extern void _ZN7S1301C33v93Ev();
extern void _ZN7S1301C33v94Ev();
extern void _ZN7S1301C23v95Ev();
extern void _ZN7S1301C23v96Ev();
extern void _ZN7S1301C23v97Ev();
static  VTBL_ENTRY vtc_S1301C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1301C2[0]),
  (VTBL_ENTRY)&_ZN7S1301C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1301C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1301C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1301C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1301C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1301C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1301C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1301C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1301C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1301C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1301C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1301C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1301C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1301C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1301C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1301C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1301C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1301C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1301C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1301C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1301C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1301C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1301C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1301C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1301C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1301C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1301C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1301C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1301C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1301C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1301C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1301C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1301C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1301C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1301C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1301C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1301C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1301C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1301C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1301C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1301C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1301C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1301C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1301C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1301C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1301C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1301C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1301C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1301C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1301C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1301C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1301C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1301C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1301C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1301C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1301C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1301C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1301C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1301C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1301C43v68Ev,
  (VTBL_ENTRY)&_ZN7S1301C43v69Ev,
  (VTBL_ENTRY)&_ZN7S1301C43v70Ev,
  (VTBL_ENTRY)&_ZN7S1301C43v71Ev,
  (VTBL_ENTRY)&_ZN7S1301C43v72Ev,
  (VTBL_ENTRY)&_ZN7S1301C43v73Ev,
  (VTBL_ENTRY)&_ZN7S1301C43v74Ev,
  (VTBL_ENTRY)&_ZN7S1301C33v75Ev,
  (VTBL_ENTRY)&_ZN7S1301C33v76Ev,
  (VTBL_ENTRY)&_ZN7S1301C33v77Ev,
  (VTBL_ENTRY)&_ZN7S1301C33v78Ev,
  (VTBL_ENTRY)&_ZN7S1301C33v79Ev,
  (VTBL_ENTRY)&_ZN7S1301C33v80Ev,
  (VTBL_ENTRY)&_ZN7S1301C33v81Ev,
  (VTBL_ENTRY)&_ZN7S1301C33v82Ev,
  (VTBL_ENTRY)&_ZN7S1301C33v83Ev,
  (VTBL_ENTRY)&_ZN7S1301C33v84Ev,
  (VTBL_ENTRY)&_ZN7S1301C33v85Ev,
  (VTBL_ENTRY)&_ZN7S1301C33v86Ev,
  (VTBL_ENTRY)&_ZN7S1301C33v87Ev,
  (VTBL_ENTRY)&_ZN7S1301C33v88Ev,
  (VTBL_ENTRY)&_ZN7S1301C33v89Ev,
  (VTBL_ENTRY)&_ZN7S1301C33v90Ev,
  (VTBL_ENTRY)&_ZN7S1301C33v91Ev,
  (VTBL_ENTRY)&_ZN7S1301C33v92Ev,
  (VTBL_ENTRY)&_ZN7S1301C33v93Ev,
  (VTBL_ENTRY)&_ZN7S1301C33v94Ev,
  (VTBL_ENTRY)&_ZN7S1301C23v95Ev,
  (VTBL_ENTRY)&_ZN7S1301C23v96Ev,
  (VTBL_ENTRY)&_ZN7S1301C23v97Ev,
};
extern VTBL_ENTRY _ZTI7S1301C2[];
extern  VTBL_ENTRY _ZTV7S1301C2[];
Class_Descriptor cd_S1301C2 = {  "S1301C2", // class name
  bases_S1301C2, 2,
  &(vtc_S1301C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(104,64), // object size
  NSPAIRA(_ZTI7S1301C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1301C2),91, //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  S1301C1  : S1301C2 {
  char s1301c1f0[2];
  ::S674C6_nt s1301c1f1;
  ::S1292C12 s1301c1f2;
  unsigned int s1301c1f3:1;
  unsigned int s1301c1f4:1;
  int s1301c1f5;
  ::S674C42 s1301c1f6;
  virtual  ~S1301C1(); // _ZN7S1301C1D1Ev
  virtual void  v1(); // _ZN7S1301C12v1Ev
  virtual void  v2(); // _ZN7S1301C12v2Ev
  virtual void  v3(); // _ZN7S1301C12v3Ev
  virtual void  v4(); // _ZN7S1301C12v4Ev
  virtual void  v5(); // _ZN7S1301C12v5Ev
  virtual void  v6(); // _ZN7S1301C12v6Ev
  virtual void  v7(); // _ZN7S1301C12v7Ev
  virtual void  v8(); // _ZN7S1301C12v8Ev
  virtual void  v9(); // _ZN7S1301C12v9Ev
  virtual void  v10(); // _ZN7S1301C13v10Ev
  S1301C1(); // tgen
};
//SIG(1 S1301C1) C1{ BC2{ BC3{ BC4{ vd 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 Fi FL Fp[4] Fi[2] Fp FC5{ m Fi[2]} Fp[2]} vd v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 v91 v92 v93 v94 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 FC6{ m}} vd v95 v96 v97} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 Fc[2] FC5 FC7{ BC8{ m Fc[4] FC9{ BC10{ BC11{ m Fp Fi[2]}}} Fi[2]} Fp} Fi:1 Fi:1 Fi FC12{ BC13{ BC11}}}


 S1301C1 ::~S1301C1(){ note_dtor("S1301C1", this);}
void  S1301C1 ::v1(){vfunc_called(this, "_ZN7S1301C12v1Ev");}
void  S1301C1 ::v2(){vfunc_called(this, "_ZN7S1301C12v2Ev");}
void  S1301C1 ::v3(){vfunc_called(this, "_ZN7S1301C12v3Ev");}
void  S1301C1 ::v4(){vfunc_called(this, "_ZN7S1301C12v4Ev");}
void  S1301C1 ::v5(){vfunc_called(this, "_ZN7S1301C12v5Ev");}
void  S1301C1 ::v6(){vfunc_called(this, "_ZN7S1301C12v6Ev");}
void  S1301C1 ::v7(){vfunc_called(this, "_ZN7S1301C12v7Ev");}
void  S1301C1 ::v8(){vfunc_called(this, "_ZN7S1301C12v8Ev");}
void  S1301C1 ::v9(){vfunc_called(this, "_ZN7S1301C12v9Ev");}
void  S1301C1 ::v10(){vfunc_called(this, "_ZN7S1301C13v10Ev");}
S1301C1 ::S1301C1(){ note_ctor("S1301C1", this);} // tgen

static void Test_S1301C1()
{
  extern Class_Descriptor cd_S1301C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(23,31)];
    init_test(&cd_S1301C1, buf);
    S1301C1 *dp, &lv = *(dp=new (buf) S1301C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(176,120), "sizeof(S1301C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1301C1)");
    check_base_class_offset(lv, (S1301C4*)(S1301C3*)(S1301C2*), 0, "S1301C1");
    check_base_class_offset(lv, (S1301C3*)(S1301C2*), 0, "S1301C1");
    check_base_class_offset(lv, (S1301C2*), 0, "S1301C1");
    check_field_offset(lv, s1301c1f0, ABISELECT(98,62), "S1301C1.s1301c1f0");
    check_field_offset(lv, s1301c1f1, ABISELECT(100,64), "S1301C1.s1301c1f1");
    check_field_offset(lv, s1301c1f2, ABISELECT(112,72), "S1301C1.s1301c1f2");
    set_bf_and_test(lv, s1301c1f3, ABISELECT(152,100), 0, 1, 1, "S1301C1");
    set_bf_and_test(lv, s1301c1f4, ABISELECT(152,100), 1, 1, 1, "S1301C1");
    check_field_offset(lv, s1301c1f5, ABISELECT(156,104), "S1301C1.s1301c1f5");
    check_field_offset(lv, s1301c1f6, ABISELECT(160,108), "S1301C1.s1301c1f6");
    test_class_info(&lv, &cd_S1301C1);
    dp->~S1301C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1301C1(Test_S1301C1, "S1301C1", ABISELECT(176,120));

#else // __cplusplus

extern void _ZN7S1301C1C1Ev();
extern void _ZN7S1301C1D1Ev();
Name_Map name_map_S1301C1[] = {
  NSPAIR(_ZN7S1301C1C1Ev),
  NSPAIR(_ZN7S1301C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1301C4;
extern VTBL_ENTRY _ZTI7S1301C4[];
extern  VTBL_ENTRY _ZTV7S1301C4[];
extern Class_Descriptor cd_S1301C3;
extern VTBL_ENTRY _ZTI7S1301C3[];
extern  VTBL_ENTRY _ZTV7S1301C3[];
extern Class_Descriptor cd_S1301C2;
extern VTBL_ENTRY _ZTI7S1301C2[];
extern  VTBL_ENTRY _ZTV7S1301C2[];
static Base_Class bases_S1301C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1301C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S1301C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S1301C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S1301C1[];
extern void _ZN7S1301C1D1Ev();
extern void _ZN7S1301C1D0Ev();
extern void _ZN7S1301C43v11Ev();
extern void _ZN7S1301C43v12Ev();
extern void _ZN7S1301C43v13Ev();
extern void _ZN7S1301C43v14Ev();
extern void _ZN7S1301C43v15Ev();
extern void _ZN7S1301C43v16Ev();
extern void _ZN7S1301C43v17Ev();
extern void _ZN7S1301C43v18Ev();
extern void _ZN7S1301C43v19Ev();
extern void _ZN7S1301C43v20Ev();
extern void _ZN7S1301C43v21Ev();
extern void _ZN7S1301C43v22Ev();
extern void _ZN7S1301C43v23Ev();
extern void _ZN7S1301C43v24Ev();
extern void _ZN7S1301C43v25Ev();
extern void _ZN7S1301C43v26Ev();
extern void _ZN7S1301C43v27Ev();
extern void _ZN7S1301C43v28Ev();
extern void _ZN7S1301C43v29Ev();
extern void _ZN7S1301C43v30Ev();
extern void _ZN7S1301C43v31Ev();
extern void _ZN7S1301C43v32Ev();
extern void _ZN7S1301C43v33Ev();
extern void _ZN7S1301C43v34Ev();
extern void _ZN7S1301C43v35Ev();
extern void _ZN7S1301C43v36Ev();
extern void _ZN7S1301C43v37Ev();
extern void _ZN7S1301C43v38Ev();
extern void _ZN7S1301C43v39Ev();
extern void _ZN7S1301C43v40Ev();
extern void _ZN7S1301C43v41Ev();
extern void _ZN7S1301C43v42Ev();
extern void _ZN7S1301C43v43Ev();
extern void _ZN7S1301C43v44Ev();
extern void _ZN7S1301C43v45Ev();
extern void _ZN7S1301C43v46Ev();
extern void _ZN7S1301C43v47Ev();
extern void _ZN7S1301C43v48Ev();
extern void _ZN7S1301C43v49Ev();
extern void _ZN7S1301C43v50Ev();
extern void _ZN7S1301C43v51Ev();
extern void _ZN7S1301C43v52Ev();
extern void _ZN7S1301C43v53Ev();
extern void _ZN7S1301C43v54Ev();
extern void _ZN7S1301C43v55Ev();
extern void _ZN7S1301C43v56Ev();
extern void _ZN7S1301C43v57Ev();
extern void _ZN7S1301C43v58Ev();
extern void _ZN7S1301C43v59Ev();
extern void _ZN7S1301C43v60Ev();
extern void _ZN7S1301C43v61Ev();
extern void _ZN7S1301C43v62Ev();
extern void _ZN7S1301C43v63Ev();
extern void _ZN7S1301C43v64Ev();
extern void _ZN7S1301C43v65Ev();
extern void _ZN7S1301C43v66Ev();
extern void _ZN7S1301C43v67Ev();
extern void _ZN7S1301C43v68Ev();
extern void _ZN7S1301C43v69Ev();
extern void _ZN7S1301C43v70Ev();
extern void _ZN7S1301C43v71Ev();
extern void _ZN7S1301C43v72Ev();
extern void _ZN7S1301C43v73Ev();
extern void _ZN7S1301C43v74Ev();
extern void _ZN7S1301C33v75Ev();
extern void _ZN7S1301C33v76Ev();
extern void _ZN7S1301C33v77Ev();
extern void _ZN7S1301C33v78Ev();
extern void _ZN7S1301C33v79Ev();
extern void _ZN7S1301C33v80Ev();
extern void _ZN7S1301C33v81Ev();
extern void _ZN7S1301C33v82Ev();
extern void _ZN7S1301C33v83Ev();
extern void _ZN7S1301C33v84Ev();
extern void _ZN7S1301C33v85Ev();
extern void _ZN7S1301C33v86Ev();
extern void _ZN7S1301C33v87Ev();
extern void _ZN7S1301C33v88Ev();
extern void _ZN7S1301C33v89Ev();
extern void _ZN7S1301C33v90Ev();
extern void _ZN7S1301C33v91Ev();
extern void _ZN7S1301C33v92Ev();
extern void _ZN7S1301C33v93Ev();
extern void _ZN7S1301C33v94Ev();
extern void _ZN7S1301C23v95Ev();
extern void _ZN7S1301C23v96Ev();
extern void _ZN7S1301C23v97Ev();
extern void _ZN7S1301C12v1Ev();
extern void _ZN7S1301C12v2Ev();
extern void _ZN7S1301C12v3Ev();
extern void _ZN7S1301C12v4Ev();
extern void _ZN7S1301C12v5Ev();
extern void _ZN7S1301C12v6Ev();
extern void _ZN7S1301C12v7Ev();
extern void _ZN7S1301C12v8Ev();
extern void _ZN7S1301C12v9Ev();
extern void _ZN7S1301C13v10Ev();
static  VTBL_ENTRY vtc_S1301C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1301C1[0]),
  (VTBL_ENTRY)&_ZN7S1301C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1301C1D0Ev,
  (VTBL_ENTRY)&_ZN7S1301C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1301C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1301C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1301C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1301C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1301C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1301C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1301C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1301C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1301C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1301C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1301C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1301C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1301C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1301C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1301C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1301C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1301C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1301C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1301C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1301C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1301C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1301C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1301C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1301C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1301C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1301C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1301C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1301C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1301C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1301C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1301C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1301C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1301C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1301C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1301C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1301C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1301C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1301C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1301C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1301C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1301C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1301C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1301C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1301C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1301C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1301C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1301C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1301C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1301C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1301C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1301C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1301C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1301C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1301C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1301C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1301C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1301C43v68Ev,
  (VTBL_ENTRY)&_ZN7S1301C43v69Ev,
  (VTBL_ENTRY)&_ZN7S1301C43v70Ev,
  (VTBL_ENTRY)&_ZN7S1301C43v71Ev,
  (VTBL_ENTRY)&_ZN7S1301C43v72Ev,
  (VTBL_ENTRY)&_ZN7S1301C43v73Ev,
  (VTBL_ENTRY)&_ZN7S1301C43v74Ev,
  (VTBL_ENTRY)&_ZN7S1301C33v75Ev,
  (VTBL_ENTRY)&_ZN7S1301C33v76Ev,
  (VTBL_ENTRY)&_ZN7S1301C33v77Ev,
  (VTBL_ENTRY)&_ZN7S1301C33v78Ev,
  (VTBL_ENTRY)&_ZN7S1301C33v79Ev,
  (VTBL_ENTRY)&_ZN7S1301C33v80Ev,
  (VTBL_ENTRY)&_ZN7S1301C33v81Ev,
  (VTBL_ENTRY)&_ZN7S1301C33v82Ev,
  (VTBL_ENTRY)&_ZN7S1301C33v83Ev,
  (VTBL_ENTRY)&_ZN7S1301C33v84Ev,
  (VTBL_ENTRY)&_ZN7S1301C33v85Ev,
  (VTBL_ENTRY)&_ZN7S1301C33v86Ev,
  (VTBL_ENTRY)&_ZN7S1301C33v87Ev,
  (VTBL_ENTRY)&_ZN7S1301C33v88Ev,
  (VTBL_ENTRY)&_ZN7S1301C33v89Ev,
  (VTBL_ENTRY)&_ZN7S1301C33v90Ev,
  (VTBL_ENTRY)&_ZN7S1301C33v91Ev,
  (VTBL_ENTRY)&_ZN7S1301C33v92Ev,
  (VTBL_ENTRY)&_ZN7S1301C33v93Ev,
  (VTBL_ENTRY)&_ZN7S1301C33v94Ev,
  (VTBL_ENTRY)&_ZN7S1301C23v95Ev,
  (VTBL_ENTRY)&_ZN7S1301C23v96Ev,
  (VTBL_ENTRY)&_ZN7S1301C23v97Ev,
  (VTBL_ENTRY)&_ZN7S1301C12v1Ev,
  (VTBL_ENTRY)&_ZN7S1301C12v2Ev,
  (VTBL_ENTRY)&_ZN7S1301C12v3Ev,
  (VTBL_ENTRY)&_ZN7S1301C12v4Ev,
  (VTBL_ENTRY)&_ZN7S1301C12v5Ev,
  (VTBL_ENTRY)&_ZN7S1301C12v6Ev,
  (VTBL_ENTRY)&_ZN7S1301C12v7Ev,
  (VTBL_ENTRY)&_ZN7S1301C12v8Ev,
  (VTBL_ENTRY)&_ZN7S1301C12v9Ev,
  (VTBL_ENTRY)&_ZN7S1301C13v10Ev,
};
extern VTBL_ENTRY _ZTI7S1301C1[];
extern  VTBL_ENTRY _ZTV7S1301C1[];
Class_Descriptor cd_S1301C1 = {  "S1301C1", // class name
  bases_S1301C1, 3,
  &(vtc_S1301C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(176,120), // object size
  NSPAIRA(_ZTI7S1301C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1301C1),101, //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  S1514C4  {
  int s1514c4f0;
  __tsi64 s1514c4f1;
  void *s1514c4f2[4];
  int s1514c4f3[2];
  void *s1514c4f4;
  ::S674C6_nt s1514c4f5;
  void *s1514c4f6[2];
  virtual  ~S1514C4(); // _ZN7S1514C4D1Ev
  virtual void  v6(); // _ZN7S1514C42v6Ev
  virtual void  v7(); // _ZN7S1514C42v7Ev
  virtual void  v8(); // _ZN7S1514C42v8Ev
  virtual void  v9(); // _ZN7S1514C42v9Ev
  virtual void  v10(); // _ZN7S1514C43v10Ev
  virtual void  v11(); // _ZN7S1514C43v11Ev
  virtual void  v12(); // _ZN7S1514C43v12Ev
  virtual void  v13(); // _ZN7S1514C43v13Ev
  virtual void  v14(); // _ZN7S1514C43v14Ev
  virtual void  v15(); // _ZN7S1514C43v15Ev
  virtual void  v16(); // _ZN7S1514C43v16Ev
  virtual void  v17(); // _ZN7S1514C43v17Ev
  virtual void  v18(); // _ZN7S1514C43v18Ev
  virtual void  v19(); // _ZN7S1514C43v19Ev
  virtual void  v20(); // _ZN7S1514C43v20Ev
  virtual void  v21(); // _ZN7S1514C43v21Ev
  virtual void  v22(); // _ZN7S1514C43v22Ev
  virtual void  v23(); // _ZN7S1514C43v23Ev
  virtual void  v24(); // _ZN7S1514C43v24Ev
  virtual void  v25(); // _ZN7S1514C43v25Ev
  virtual void  v26(); // _ZN7S1514C43v26Ev
  virtual void  v27(); // _ZN7S1514C43v27Ev
  virtual void  v28(); // _ZN7S1514C43v28Ev
  virtual void  v29(); // _ZN7S1514C43v29Ev
  virtual void  v30(); // _ZN7S1514C43v30Ev
  virtual void  v31(); // _ZN7S1514C43v31Ev
  virtual void  v32(); // _ZN7S1514C43v32Ev
  virtual void  v33(); // _ZN7S1514C43v33Ev
  virtual void  v34(); // _ZN7S1514C43v34Ev
  virtual void  v35(); // _ZN7S1514C43v35Ev
  virtual void  v36(); // _ZN7S1514C43v36Ev
  virtual void  v37(); // _ZN7S1514C43v37Ev
  virtual void  v38(); // _ZN7S1514C43v38Ev
  virtual void  v39(); // _ZN7S1514C43v39Ev
  virtual void  v40(); // _ZN7S1514C43v40Ev
  virtual void  v41(); // _ZN7S1514C43v41Ev
  virtual void  v42(); // _ZN7S1514C43v42Ev
  virtual void  v43(); // _ZN7S1514C43v43Ev
  virtual void  v44(); // _ZN7S1514C43v44Ev
  virtual void  v45(); // _ZN7S1514C43v45Ev
  virtual void  v46(); // _ZN7S1514C43v46Ev
  virtual void  v47(); // _ZN7S1514C43v47Ev
  virtual void  v48(); // _ZN7S1514C43v48Ev
  virtual void  v49(); // _ZN7S1514C43v49Ev
  virtual void  v50(); // _ZN7S1514C43v50Ev
  virtual void  v51(); // _ZN7S1514C43v51Ev
  virtual void  v52(); // _ZN7S1514C43v52Ev
  virtual void  v53(); // _ZN7S1514C43v53Ev
  virtual void  v54(); // _ZN7S1514C43v54Ev
  virtual void  v55(); // _ZN7S1514C43v55Ev
  virtual void  v56(); // _ZN7S1514C43v56Ev
  virtual void  v57(); // _ZN7S1514C43v57Ev
  virtual void  v58(); // _ZN7S1514C43v58Ev
  virtual void  v59(); // _ZN7S1514C43v59Ev
  virtual void  v60(); // _ZN7S1514C43v60Ev
  virtual void  v61(); // _ZN7S1514C43v61Ev
  virtual void  v62(); // _ZN7S1514C43v62Ev
  virtual void  v63(); // _ZN7S1514C43v63Ev
  virtual void  v64(); // _ZN7S1514C43v64Ev
  virtual void  v65(); // _ZN7S1514C43v65Ev
  virtual void  v66(); // _ZN7S1514C43v66Ev
  virtual void  v67(); // _ZN7S1514C43v67Ev
  virtual void  v68(); // _ZN7S1514C43v68Ev
  virtual void  v69(); // _ZN7S1514C43v69Ev
  S1514C4(); // tgen
};
//SIG(-1 S1514C4) 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]}


 S1514C4 ::~S1514C4(){ note_dtor("S1514C4", this);}
void  S1514C4 ::v6(){vfunc_called(this, "_ZN7S1514C42v6Ev");}
void  S1514C4 ::v7(){vfunc_called(this, "_ZN7S1514C42v7Ev");}
void  S1514C4 ::v8(){vfunc_called(this, "_ZN7S1514C42v8Ev");}
void  S1514C4 ::v9(){vfunc_called(this, "_ZN7S1514C42v9Ev");}
void  S1514C4 ::v10(){vfunc_called(this, "_ZN7S1514C43v10Ev");}
void  S1514C4 ::v11(){vfunc_called(this, "_ZN7S1514C43v11Ev");}
void  S1514C4 ::v12(){vfunc_called(this, "_ZN7S1514C43v12Ev");}
void  S1514C4 ::v13(){vfunc_called(this, "_ZN7S1514C43v13Ev");}
void  S1514C4 ::v14(){vfunc_called(this, "_ZN7S1514C43v14Ev");}
void  S1514C4 ::v15(){vfunc_called(this, "_ZN7S1514C43v15Ev");}
void  S1514C4 ::v16(){vfunc_called(this, "_ZN7S1514C43v16Ev");}
void  S1514C4 ::v17(){vfunc_called(this, "_ZN7S1514C43v17Ev");}
void  S1514C4 ::v18(){vfunc_called(this, "_ZN7S1514C43v18Ev");}
void  S1514C4 ::v19(){vfunc_called(this, "_ZN7S1514C43v19Ev");}
void  S1514C4 ::v20(){vfunc_called(this, "_ZN7S1514C43v20Ev");}
void  S1514C4 ::v21(){vfunc_called(this, "_ZN7S1514C43v21Ev");}
void  S1514C4 ::v22(){vfunc_called(this, "_ZN7S1514C43v22Ev");}
void  S1514C4 ::v23(){vfunc_called(this, "_ZN7S1514C43v23Ev");}
void  S1514C4 ::v24(){vfunc_called(this, "_ZN7S1514C43v24Ev");}
void  S1514C4 ::v25(){vfunc_called(this, "_ZN7S1514C43v25Ev");}
void  S1514C4 ::v26(){vfunc_called(this, "_ZN7S1514C43v26Ev");}
void  S1514C4 ::v27(){vfunc_called(this, "_ZN7S1514C43v27Ev");}
void  S1514C4 ::v28(){vfunc_called(this, "_ZN7S1514C43v28Ev");}
void  S1514C4 ::v29(){vfunc_called(this, "_ZN7S1514C43v29Ev");}
void  S1514C4 ::v30(){vfunc_called(this, "_ZN7S1514C43v30Ev");}
void  S1514C4 ::v31(){vfunc_called(this, "_ZN7S1514C43v31Ev");}
void  S1514C4 ::v32(){vfunc_called(this, "_ZN7S1514C43v32Ev");}
void  S1514C4 ::v33(){vfunc_called(this, "_ZN7S1514C43v33Ev");}
void  S1514C4 ::v34(){vfunc_called(this, "_ZN7S1514C43v34Ev");}
void  S1514C4 ::v35(){vfunc_called(this, "_ZN7S1514C43v35Ev");}
void  S1514C4 ::v36(){vfunc_called(this, "_ZN7S1514C43v36Ev");}
void  S1514C4 ::v37(){vfunc_called(this, "_ZN7S1514C43v37Ev");}
void  S1514C4 ::v38(){vfunc_called(this, "_ZN7S1514C43v38Ev");}
void  S1514C4 ::v39(){vfunc_called(this, "_ZN7S1514C43v39Ev");}
void  S1514C4 ::v40(){vfunc_called(this, "_ZN7S1514C43v40Ev");}
void  S1514C4 ::v41(){vfunc_called(this, "_ZN7S1514C43v41Ev");}
void  S1514C4 ::v42(){vfunc_called(this, "_ZN7S1514C43v42Ev");}
void  S1514C4 ::v43(){vfunc_called(this, "_ZN7S1514C43v43Ev");}
void  S1514C4 ::v44(){vfunc_called(this, "_ZN7S1514C43v44Ev");}
void  S1514C4 ::v45(){vfunc_called(this, "_ZN7S1514C43v45Ev");}
void  S1514C4 ::v46(){vfunc_called(this, "_ZN7S1514C43v46Ev");}
void  S1514C4 ::v47(){vfunc_called(this, "_ZN7S1514C43v47Ev");}
void  S1514C4 ::v48(){vfunc_called(this, "_ZN7S1514C43v48Ev");}
void  S1514C4 ::v49(){vfunc_called(this, "_ZN7S1514C43v49Ev");}
void  S1514C4 ::v50(){vfunc_called(this, "_ZN7S1514C43v50Ev");}
void  S1514C4 ::v51(){vfunc_called(this, "_ZN7S1514C43v51Ev");}
void  S1514C4 ::v52(){vfunc_called(this, "_ZN7S1514C43v52Ev");}
void  S1514C4 ::v53(){vfunc_called(this, "_ZN7S1514C43v53Ev");}
void  S1514C4 ::v54(){vfunc_called(this, "_ZN7S1514C43v54Ev");}
void  S1514C4 ::v55(){vfunc_called(this, "_ZN7S1514C43v55Ev");}
void  S1514C4 ::v56(){vfunc_called(this, "_ZN7S1514C43v56Ev");}
void  S1514C4 ::v57(){vfunc_called(this, "_ZN7S1514C43v57Ev");}
void  S1514C4 ::v58(){vfunc_called(this, "_ZN7S1514C43v58Ev");}
void  S1514C4 ::v59(){vfunc_called(this, "_ZN7S1514C43v59Ev");}
void  S1514C4 ::v60(){vfunc_called(this, "_ZN7S1514C43v60Ev");}
void  S1514C4 ::v61(){vfunc_called(this, "_ZN7S1514C43v61Ev");}
void  S1514C4 ::v62(){vfunc_called(this, "_ZN7S1514C43v62Ev");}
void  S1514C4 ::v63(){vfunc_called(this, "_ZN7S1514C43v63Ev");}
void  S1514C4 ::v64(){vfunc_called(this, "_ZN7S1514C43v64Ev");}
void  S1514C4 ::v65(){vfunc_called(this, "_ZN7S1514C43v65Ev");}
void  S1514C4 ::v66(){vfunc_called(this, "_ZN7S1514C43v66Ev");}
void  S1514C4 ::v67(){vfunc_called(this, "_ZN7S1514C43v67Ev");}
void  S1514C4 ::v68(){vfunc_called(this, "_ZN7S1514C43v68Ev");}
void  S1514C4 ::v69(){vfunc_called(this, "_ZN7S1514C43v69Ev");}
S1514C4 ::S1514C4(){ note_ctor("S1514C4", this);} // tgen

static void Test_S1514C4()
{
  extern Class_Descriptor cd_S1514C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S1514C4, buf);
    S1514C4 *dp, &lv = *(dp=new (buf) S1514C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S1514C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1514C4)");
    check_field_offset(lv, s1514c4f0, ABISELECT(8,4), "S1514C4.s1514c4f0");
    check_field_offset(lv, s1514c4f1, ABISELECT(16,8), "S1514C4.s1514c4f1");
    check_field_offset(lv, s1514c4f2, ABISELECT(24,16), "S1514C4.s1514c4f2");
    check_field_offset(lv, s1514c4f3, ABISELECT(56,32), "S1514C4.s1514c4f3");
    check_field_offset(lv, s1514c4f4, ABISELECT(64,40), "S1514C4.s1514c4f4");
    check_field_offset(lv, s1514c4f5, ABISELECT(72,44), "S1514C4.s1514c4f5");
    check_field_offset(lv, s1514c4f6, ABISELECT(80,52), "S1514C4.s1514c4f6");
    test_class_info(&lv, &cd_S1514C4);
    dp->~S1514C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1514C4(Test_S1514C4, "S1514C4", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN7S1514C4C1Ev();
extern void _ZN7S1514C4D1Ev();
Name_Map name_map_S1514C4[] = {
  NSPAIR(_ZN7S1514C4C1Ev),
  NSPAIR(_ZN7S1514C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S1514C4[];
extern void _ZN7S1514C4D1Ev();
extern void _ZN7S1514C4D0Ev();
extern void _ZN7S1514C42v6Ev();
extern void _ZN7S1514C42v7Ev();
extern void _ZN7S1514C42v8Ev();
extern void _ZN7S1514C42v9Ev();
extern void _ZN7S1514C43v10Ev();
extern void _ZN7S1514C43v11Ev();
extern void _ZN7S1514C43v12Ev();
extern void _ZN7S1514C43v13Ev();
extern void _ZN7S1514C43v14Ev();
extern void _ZN7S1514C43v15Ev();
extern void _ZN7S1514C43v16Ev();
extern void _ZN7S1514C43v17Ev();
extern void _ZN7S1514C43v18Ev();
extern void _ZN7S1514C43v19Ev();
extern void _ZN7S1514C43v20Ev();
extern void _ZN7S1514C43v21Ev();
extern void _ZN7S1514C43v22Ev();
extern void _ZN7S1514C43v23Ev();
extern void _ZN7S1514C43v24Ev();
extern void _ZN7S1514C43v25Ev();
extern void _ZN7S1514C43v26Ev();
extern void _ZN7S1514C43v27Ev();
extern void _ZN7S1514C43v28Ev();
extern void _ZN7S1514C43v29Ev();
extern void _ZN7S1514C43v30Ev();
extern void _ZN7S1514C43v31Ev();
extern void _ZN7S1514C43v32Ev();
extern void _ZN7S1514C43v33Ev();
extern void _ZN7S1514C43v34Ev();
extern void _ZN7S1514C43v35Ev();
extern void _ZN7S1514C43v36Ev();
extern void _ZN7S1514C43v37Ev();
extern void _ZN7S1514C43v38Ev();
extern void _ZN7S1514C43v39Ev();
extern void _ZN7S1514C43v40Ev();
extern void _ZN7S1514C43v41Ev();
extern void _ZN7S1514C43v42Ev();
extern void _ZN7S1514C43v43Ev();
extern void _ZN7S1514C43v44Ev();
extern void _ZN7S1514C43v45Ev();
extern void _ZN7S1514C43v46Ev();
extern void _ZN7S1514C43v47Ev();
extern void _ZN7S1514C43v48Ev();
extern void _ZN7S1514C43v49Ev();
extern void _ZN7S1514C43v50Ev();
extern void _ZN7S1514C43v51Ev();
extern void _ZN7S1514C43v52Ev();
extern void _ZN7S1514C43v53Ev();
extern void _ZN7S1514C43v54Ev();
extern void _ZN7S1514C43v55Ev();
extern void _ZN7S1514C43v56Ev();
extern void _ZN7S1514C43v57Ev();
extern void _ZN7S1514C43v58Ev();
extern void _ZN7S1514C43v59Ev();
extern void _ZN7S1514C43v60Ev();
extern void _ZN7S1514C43v61Ev();
extern void _ZN7S1514C43v62Ev();
extern void _ZN7S1514C43v63Ev();
extern void _ZN7S1514C43v64Ev();
extern void _ZN7S1514C43v65Ev();
extern void _ZN7S1514C43v66Ev();
extern void _ZN7S1514C43v67Ev();
extern void _ZN7S1514C43v68Ev();
extern void _ZN7S1514C43v69Ev();
static  VTBL_ENTRY vtc_S1514C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1514C4[0]),
  (VTBL_ENTRY)&_ZN7S1514C4D1Ev,
  (VTBL_ENTRY)&_ZN7S1514C4D0Ev,
  (VTBL_ENTRY)&_ZN7S1514C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1514C42v7Ev,
  (VTBL_ENTRY)&_ZN7S1514C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1514C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1514C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1514C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1514C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1514C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1514C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1514C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1514C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1514C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1514C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1514C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1514C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1514C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1514C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1514C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1514C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1514C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1514C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1514C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1514C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1514C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1514C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1514C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1514C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1514C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1514C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1514C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1514C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1514C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1514C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1514C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1514C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1514C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1514C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1514C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1514C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1514C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1514C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1514C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1514C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1514C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1514C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1514C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1514C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1514C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1514C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1514C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1514C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1514C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1514C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1514C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1514C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1514C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1514C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1514C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1514C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1514C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1514C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1514C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1514C43v68Ev,
  (VTBL_ENTRY)&_ZN7S1514C43v69Ev,
};
extern VTBL_ENTRY _ZTI7S1514C4[];
extern  VTBL_ENTRY _ZTV7S1514C4[];
Class_Descriptor cd_S1514C4 = {  "S1514C4", // class name
  0,0,//no base classes
  &(vtc_S1514C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI7S1514C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S1514C4),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  S1514C3  : S1514C4 {
  unsigned int s1514c3f0:1;
  unsigned int s1514c3f1:1;
  unsigned int s1514c3f2:1;
  unsigned int s1514c3f3:1;
  unsigned int s1514c3f4:1;
  unsigned int s1514c3f5:1;
  unsigned int s1514c3f6:1;
  ::S3625C32 s1514c3f7;
  virtual  ~S1514C3(); // _ZN7S1514C3D1Ev
  virtual void  v70(); // _ZN7S1514C33v70Ev
  virtual void  v71(); // _ZN7S1514C33v71Ev
  virtual void  v72(); // _ZN7S1514C33v72Ev
  virtual void  v73(); // _ZN7S1514C33v73Ev
  virtual void  v74(); // _ZN7S1514C33v74Ev
  virtual void  v75(); // _ZN7S1514C33v75Ev
  virtual void  v76(); // _ZN7S1514C33v76Ev
  virtual void  v77(); // _ZN7S1514C33v77Ev
  virtual void  v78(); // _ZN7S1514C33v78Ev
  virtual void  v79(); // _ZN7S1514C33v79Ev
  virtual void  v80(); // _ZN7S1514C33v80Ev
  virtual void  v81(); // _ZN7S1514C33v81Ev
  virtual void  v82(); // _ZN7S1514C33v82Ev
  virtual void  v83(); // _ZN7S1514C33v83Ev
  virtual void  v84(); // _ZN7S1514C33v84Ev
  virtual void  v85(); // _ZN7S1514C33v85Ev
  virtual void  v86(); // _ZN7S1514C33v86Ev
  virtual void  v87(); // _ZN7S1514C33v87Ev
  virtual void  v88(); // _ZN7S1514C33v88Ev
  virtual void  v89(); // _ZN7S1514C33v89Ev
  S1514C3(); // tgen
};
//SIG(-1 S1514C3) C1{ BC2{ 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 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 Fi FL Fp[4] Fi[2] Fp FC3{ m Fi[2]} Fp[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 FC4{ m}}


 S1514C3 ::~S1514C3(){ note_dtor("S1514C3", this);}
void  S1514C3 ::v70(){vfunc_called(this, "_ZN7S1514C33v70Ev");}
void  S1514C3 ::v71(){vfunc_called(this, "_ZN7S1514C33v71Ev");}
void  S1514C3 ::v72(){vfunc_called(this, "_ZN7S1514C33v72Ev");}
void  S1514C3 ::v73(){vfunc_called(this, "_ZN7S1514C33v73Ev");}
void  S1514C3 ::v74(){vfunc_called(this, "_ZN7S1514C33v74Ev");}
void  S1514C3 ::v75(){vfunc_called(this, "_ZN7S1514C33v75Ev");}
void  S1514C3 ::v76(){vfunc_called(this, "_ZN7S1514C33v76Ev");}
void  S1514C3 ::v77(){vfunc_called(this, "_ZN7S1514C33v77Ev");}
void  S1514C3 ::v78(){vfunc_called(this, "_ZN7S1514C33v78Ev");}
void  S1514C3 ::v79(){vfunc_called(this, "_ZN7S1514C33v79Ev");}
void  S1514C3 ::v80(){vfunc_called(this, "_ZN7S1514C33v80Ev");}
void  S1514C3 ::v81(){vfunc_called(this, "_ZN7S1514C33v81Ev");}
void  S1514C3 ::v82(){vfunc_called(this, "_ZN7S1514C33v82Ev");}
void  S1514C3 ::v83(){vfunc_called(this, "_ZN7S1514C33v83Ev");}
void  S1514C3 ::v84(){vfunc_called(this, "_ZN7S1514C33v84Ev");}
void  S1514C3 ::v85(){vfunc_called(this, "_ZN7S1514C33v85Ev");}
void  S1514C3 ::v86(){vfunc_called(this, "_ZN7S1514C33v86Ev");}
void  S1514C3 ::v87(){vfunc_called(this, "_ZN7S1514C33v87Ev");}
void  S1514C3 ::v88(){vfunc_called(this, "_ZN7S1514C33v88Ev");}
void  S1514C3 ::v89(){vfunc_called(this, "_ZN7S1514C33v89Ev");}
S1514C3 ::S1514C3(){ note_ctor("S1514C3", this);} // tgen

static void Test_S1514C3()
{
  extern Class_Descriptor cd_S1514C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(14,17)];
    init_test(&cd_S1514C3, buf);
    S1514C3 *dp, &lv = *(dp=new (buf) S1514C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(104,64), "sizeof(S1514C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1514C3)");
    check_base_class_offset(lv, (S1514C4*), 0, "S1514C3");
    set_bf_and_test(lv, s1514c3f0, ABISELECT(96,60), 0, 1, 1, "S1514C3");
    set_bf_and_test(lv, s1514c3f1, ABISELECT(96,60), 1, 1, 1, "S1514C3");
    set_bf_and_test(lv, s1514c3f2, ABISELECT(96,60), 2, 1, 1, "S1514C3");
    set_bf_and_test(lv, s1514c3f3, ABISELECT(96,60), 3, 1, 1, "S1514C3");
    set_bf_and_test(lv, s1514c3f4, ABISELECT(96,60), 4, 1, 1, "S1514C3");
    set_bf_and_test(lv, s1514c3f5, ABISELECT(96,60), 5, 1, 1, "S1514C3");
    set_bf_and_test(lv, s1514c3f6, ABISELECT(96,60), 6, 1, 1, "S1514C3");
    check_field_offset(lv, s1514c3f7, ABISELECT(97,61), "S1514C3.s1514c3f7");
    test_class_info(&lv, &cd_S1514C3);
    dp->~S1514C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1514C3(Test_S1514C3, "S1514C3", ABISELECT(104,64));

#else // __cplusplus

extern void _ZN7S1514C3C1Ev();
extern void _ZN7S1514C3D1Ev();
Name_Map name_map_S1514C3[] = {
  NSPAIR(_ZN7S1514C3C1Ev),
  NSPAIR(_ZN7S1514C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1514C4;
extern VTBL_ENTRY _ZTI7S1514C4[];
extern  VTBL_ENTRY _ZTV7S1514C4[];
static Base_Class bases_S1514C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1514C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI7S1514C3[];
extern void _ZN7S1514C3D1Ev();
extern void _ZN7S1514C3D0Ev();
extern void _ZN7S1514C42v6Ev();
extern void _ZN7S1514C42v7Ev();
extern void _ZN7S1514C42v8Ev();
extern void _ZN7S1514C42v9Ev();
extern void _ZN7S1514C43v10Ev();
extern void _ZN7S1514C43v11Ev();
extern void _ZN7S1514C43v12Ev();
extern void _ZN7S1514C43v13Ev();
extern void _ZN7S1514C43v14Ev();
extern void _ZN7S1514C43v15Ev();
extern void _ZN7S1514C43v16Ev();
extern void _ZN7S1514C43v17Ev();
extern void _ZN7S1514C43v18Ev();
extern void _ZN7S1514C43v19Ev();
extern void _ZN7S1514C43v20Ev();
extern void _ZN7S1514C43v21Ev();
extern void _ZN7S1514C43v22Ev();
extern void _ZN7S1514C43v23Ev();
extern void _ZN7S1514C43v24Ev();
extern void _ZN7S1514C43v25Ev();
extern void _ZN7S1514C43v26Ev();
extern void _ZN7S1514C43v27Ev();
extern void _ZN7S1514C43v28Ev();
extern void _ZN7S1514C43v29Ev();
extern void _ZN7S1514C43v30Ev();
extern void _ZN7S1514C43v31Ev();
extern void _ZN7S1514C43v32Ev();
extern void _ZN7S1514C43v33Ev();
extern void _ZN7S1514C43v34Ev();
extern void _ZN7S1514C43v35Ev();
extern void _ZN7S1514C43v36Ev();
extern void _ZN7S1514C43v37Ev();
extern void _ZN7S1514C43v38Ev();
extern void _ZN7S1514C43v39Ev();
extern void _ZN7S1514C43v40Ev();
extern void _ZN7S1514C43v41Ev();
extern void _ZN7S1514C43v42Ev();
extern void _ZN7S1514C43v43Ev();
extern void _ZN7S1514C43v44Ev();
extern void _ZN7S1514C43v45Ev();
extern void _ZN7S1514C43v46Ev();
extern void _ZN7S1514C43v47Ev();
extern void _ZN7S1514C43v48Ev();
extern void _ZN7S1514C43v49Ev();
extern void _ZN7S1514C43v50Ev();
extern void _ZN7S1514C43v51Ev();
extern void _ZN7S1514C43v52Ev();
extern void _ZN7S1514C43v53Ev();
extern void _ZN7S1514C43v54Ev();
extern void _ZN7S1514C43v55Ev();
extern void _ZN7S1514C43v56Ev();
extern void _ZN7S1514C43v57Ev();
extern void _ZN7S1514C43v58Ev();
extern void _ZN7S1514C43v59Ev();
extern void _ZN7S1514C43v60Ev();
extern void _ZN7S1514C43v61Ev();
extern void _ZN7S1514C43v62Ev();
extern void _ZN7S1514C43v63Ev();
extern void _ZN7S1514C43v64Ev();
extern void _ZN7S1514C43v65Ev();
extern void _ZN7S1514C43v66Ev();
extern void _ZN7S1514C43v67Ev();
extern void _ZN7S1514C43v68Ev();
extern void _ZN7S1514C43v69Ev();
extern void _ZN7S1514C33v70Ev();
extern void _ZN7S1514C33v71Ev();
extern void _ZN7S1514C33v72Ev();
extern void _ZN7S1514C33v73Ev();
extern void _ZN7S1514C33v74Ev();
extern void _ZN7S1514C33v75Ev();
extern void _ZN7S1514C33v76Ev();
extern void _ZN7S1514C33v77Ev();
extern void _ZN7S1514C33v78Ev();
extern void _ZN7S1514C33v79Ev();
extern void _ZN7S1514C33v80Ev();
extern void _ZN7S1514C33v81Ev();
extern void _ZN7S1514C33v82Ev();
extern void _ZN7S1514C33v83Ev();
extern void _ZN7S1514C33v84Ev();
extern void _ZN7S1514C33v85Ev();
extern void _ZN7S1514C33v86Ev();
extern void _ZN7S1514C33v87Ev();
extern void _ZN7S1514C33v88Ev();
extern void _ZN7S1514C33v89Ev();
static  VTBL_ENTRY vtc_S1514C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1514C3[0]),
  (VTBL_ENTRY)&_ZN7S1514C3D1Ev,
  (VTBL_ENTRY)&_ZN7S1514C3D0Ev,
  (VTBL_ENTRY)&_ZN7S1514C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1514C42v7Ev,
  (VTBL_ENTRY)&_ZN7S1514C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1514C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1514C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1514C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1514C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1514C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1514C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1514C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1514C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1514C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1514C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1514C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1514C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1514C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1514C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1514C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1514C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1514C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1514C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1514C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1514C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1514C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1514C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1514C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1514C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1514C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1514C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1514C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1514C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1514C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1514C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1514C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1514C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1514C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1514C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1514C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1514C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1514C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1514C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1514C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1514C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1514C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1514C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1514C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1514C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1514C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1514C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1514C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1514C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1514C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1514C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1514C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1514C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1514C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1514C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1514C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1514C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1514C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1514C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1514C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1514C43v68Ev,
  (VTBL_ENTRY)&_ZN7S1514C43v69Ev,
  (VTBL_ENTRY)&_ZN7S1514C33v70Ev,
  (VTBL_ENTRY)&_ZN7S1514C33v71Ev,
  (VTBL_ENTRY)&_ZN7S1514C33v72Ev,
  (VTBL_ENTRY)&_ZN7S1514C33v73Ev,
  (VTBL_ENTRY)&_ZN7S1514C33v74Ev,
  (VTBL_ENTRY)&_ZN7S1514C33v75Ev,
  (VTBL_ENTRY)&_ZN7S1514C33v76Ev,
  (VTBL_ENTRY)&_ZN7S1514C33v77Ev,
  (VTBL_ENTRY)&_ZN7S1514C33v78Ev,
  (VTBL_ENTRY)&_ZN7S1514C33v79Ev,
  (VTBL_ENTRY)&_ZN7S1514C33v80Ev,
  (VTBL_ENTRY)&_ZN7S1514C33v81Ev,
  (VTBL_ENTRY)&_ZN7S1514C33v82Ev,
  (VTBL_ENTRY)&_ZN7S1514C33v83Ev,
  (VTBL_ENTRY)&_ZN7S1514C33v84Ev,
  (VTBL_ENTRY)&_ZN7S1514C33v85Ev,
  (VTBL_ENTRY)&_ZN7S1514C33v86Ev,
  (VTBL_ENTRY)&_ZN7S1514C33v87Ev,
  (VTBL_ENTRY)&_ZN7S1514C33v88Ev,
  (VTBL_ENTRY)&_ZN7S1514C33v89Ev,
};
extern VTBL_ENTRY _ZTI7S1514C3[];
extern  VTBL_ENTRY _ZTV7S1514C3[];
Class_Descriptor cd_S1514C3 = {  "S1514C3", // class name
  bases_S1514C3, 1,
  &(vtc_S1514C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(104,64), // object size
  NSPAIRA(_ZTI7S1514C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1514C3),88, //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  S1514C2  : S1514C3 {
  ::S674C42 s1514c2f0;
  virtual  ~S1514C2(); // _ZN7S1514C2D1Ev
  virtual void  v90(); // _ZN7S1514C23v90Ev
  virtual void  v91(); // _ZN7S1514C23v91Ev
  virtual void  v92(); // _ZN7S1514C23v92Ev
  virtual void  v93(); // _ZN7S1514C23v93Ev
  S1514C2(); // tgen
};
//SIG(-1 S1514C2) C1{ BC2{ BC3{ 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 FC4{ m Fi[2]} Fp[2]} vd v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 FC5{ m}} vd v1 v2 v3 v4 FC6{ BC7{ BC8{ m Fp Fi[2]}}}}


 S1514C2 ::~S1514C2(){ note_dtor("S1514C2", this);}
void  S1514C2 ::v90(){vfunc_called(this, "_ZN7S1514C23v90Ev");}
void  S1514C2 ::v91(){vfunc_called(this, "_ZN7S1514C23v91Ev");}
void  S1514C2 ::v92(){vfunc_called(this, "_ZN7S1514C23v92Ev");}
void  S1514C2 ::v93(){vfunc_called(this, "_ZN7S1514C23v93Ev");}
S1514C2 ::S1514C2(){ note_ctor("S1514C2", this);} // tgen

static void Test_S1514C2()
{
  extern Class_Descriptor cd_S1514C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(16,20)];
    init_test(&cd_S1514C2, buf);
    S1514C2 *dp, &lv = *(dp=new (buf) S1514C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(120,76), "sizeof(S1514C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1514C2)");
    check_base_class_offset(lv, (S1514C4*)(S1514C3*), 0, "S1514C2");
    check_base_class_offset(lv, (S1514C3*), 0, "S1514C2");
    check_field_offset(lv, s1514c2f0, ABISELECT(104,64), "S1514C2.s1514c2f0");
    test_class_info(&lv, &cd_S1514C2);
    dp->~S1514C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1514C2(Test_S1514C2, "S1514C2", ABISELECT(120,76));

#else // __cplusplus

extern void _ZN7S1514C2C1Ev();
extern void _ZN7S1514C2D1Ev();
Name_Map name_map_S1514C2[] = {
  NSPAIR(_ZN7S1514C2C1Ev),
  NSPAIR(_ZN7S1514C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1514C4;
extern VTBL_ENTRY _ZTI7S1514C4[];
extern  VTBL_ENTRY _ZTV7S1514C4[];
extern Class_Descriptor cd_S1514C3;
extern VTBL_ENTRY _ZTI7S1514C3[];
extern  VTBL_ENTRY _ZTV7S1514C3[];
static Base_Class bases_S1514C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1514C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S1514C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S1514C2[];
extern void _ZN7S1514C2D1Ev();
extern void _ZN7S1514C2D0Ev();
extern void _ZN7S1514C42v6Ev();
extern void _ZN7S1514C42v7Ev();
extern void _ZN7S1514C42v8Ev();
extern void _ZN7S1514C42v9Ev();
extern void _ZN7S1514C43v10Ev();
extern void _ZN7S1514C43v11Ev();
extern void _ZN7S1514C43v12Ev();
extern void _ZN7S1514C43v13Ev();
extern void _ZN7S1514C43v14Ev();
extern void _ZN7S1514C43v15Ev();
extern void _ZN7S1514C43v16Ev();
extern void _ZN7S1514C43v17Ev();
extern void _ZN7S1514C43v18Ev();
extern void _ZN7S1514C43v19Ev();
extern void _ZN7S1514C43v20Ev();
extern void _ZN7S1514C43v21Ev();
extern void _ZN7S1514C43v22Ev();
extern void _ZN7S1514C43v23Ev();
extern void _ZN7S1514C43v24Ev();
extern void _ZN7S1514C43v25Ev();
extern void _ZN7S1514C43v26Ev();
extern void _ZN7S1514C43v27Ev();
extern void _ZN7S1514C43v28Ev();
extern void _ZN7S1514C43v29Ev();
extern void _ZN7S1514C43v30Ev();
extern void _ZN7S1514C43v31Ev();
extern void _ZN7S1514C43v32Ev();
extern void _ZN7S1514C43v33Ev();
extern void _ZN7S1514C43v34Ev();
extern void _ZN7S1514C43v35Ev();
extern void _ZN7S1514C43v36Ev();
extern void _ZN7S1514C43v37Ev();
extern void _ZN7S1514C43v38Ev();
extern void _ZN7S1514C43v39Ev();
extern void _ZN7S1514C43v40Ev();
extern void _ZN7S1514C43v41Ev();
extern void _ZN7S1514C43v42Ev();
extern void _ZN7S1514C43v43Ev();
extern void _ZN7S1514C43v44Ev();
extern void _ZN7S1514C43v45Ev();
extern void _ZN7S1514C43v46Ev();
extern void _ZN7S1514C43v47Ev();
extern void _ZN7S1514C43v48Ev();
extern void _ZN7S1514C43v49Ev();
extern void _ZN7S1514C43v50Ev();
extern void _ZN7S1514C43v51Ev();
extern void _ZN7S1514C43v52Ev();
extern void _ZN7S1514C43v53Ev();
extern void _ZN7S1514C43v54Ev();
extern void _ZN7S1514C43v55Ev();
extern void _ZN7S1514C43v56Ev();
extern void _ZN7S1514C43v57Ev();
extern void _ZN7S1514C43v58Ev();
extern void _ZN7S1514C43v59Ev();
extern void _ZN7S1514C43v60Ev();
extern void _ZN7S1514C43v61Ev();
extern void _ZN7S1514C43v62Ev();
extern void _ZN7S1514C43v63Ev();
extern void _ZN7S1514C43v64Ev();
extern void _ZN7S1514C43v65Ev();
extern void _ZN7S1514C43v66Ev();
extern void _ZN7S1514C43v67Ev();
extern void _ZN7S1514C43v68Ev();
extern void _ZN7S1514C43v69Ev();
extern void _ZN7S1514C33v70Ev();
extern void _ZN7S1514C33v71Ev();
extern void _ZN7S1514C33v72Ev();
extern void _ZN7S1514C33v73Ev();
extern void _ZN7S1514C33v74Ev();
extern void _ZN7S1514C33v75Ev();
extern void _ZN7S1514C33v76Ev();
extern void _ZN7S1514C33v77Ev();
extern void _ZN7S1514C33v78Ev();
extern void _ZN7S1514C33v79Ev();
extern void _ZN7S1514C33v80Ev();
extern void _ZN7S1514C33v81Ev();
extern void _ZN7S1514C33v82Ev();
extern void _ZN7S1514C33v83Ev();
extern void _ZN7S1514C33v84Ev();
extern void _ZN7S1514C33v85Ev();
extern void _ZN7S1514C33v86Ev();
extern void _ZN7S1514C33v87Ev();
extern void _ZN7S1514C33v88Ev();
extern void _ZN7S1514C33v89Ev();
extern void _ZN7S1514C23v90Ev();
extern void _ZN7S1514C23v91Ev();
extern void _ZN7S1514C23v92Ev();
extern void _ZN7S1514C23v93Ev();
static  VTBL_ENTRY vtc_S1514C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1514C2[0]),
  (VTBL_ENTRY)&_ZN7S1514C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1514C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1514C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1514C42v7Ev,
  (VTBL_ENTRY)&_ZN7S1514C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1514C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1514C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1514C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1514C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1514C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1514C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1514C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1514C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1514C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1514C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1514C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1514C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1514C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1514C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1514C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1514C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1514C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1514C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1514C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1514C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1514C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1514C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1514C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1514C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1514C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1514C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1514C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1514C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1514C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1514C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1514C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1514C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1514C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1514C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1514C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1514C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1514C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1514C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1514C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1514C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1514C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1514C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1514C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1514C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1514C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1514C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1514C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1514C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1514C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1514C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1514C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1514C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1514C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1514C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1514C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1514C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1514C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1514C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1514C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1514C43v68Ev,
  (VTBL_ENTRY)&_ZN7S1514C43v69Ev,
  (VTBL_ENTRY)&_ZN7S1514C33v70Ev,
  (VTBL_ENTRY)&_ZN7S1514C33v71Ev,
  (VTBL_ENTRY)&_ZN7S1514C33v72Ev,
  (VTBL_ENTRY)&_ZN7S1514C33v73Ev,
  (VTBL_ENTRY)&_ZN7S1514C33v74Ev,
  (VTBL_ENTRY)&_ZN7S1514C33v75Ev,
  (VTBL_ENTRY)&_ZN7S1514C33v76Ev,
  (VTBL_ENTRY)&_ZN7S1514C33v77Ev,
  (VTBL_ENTRY)&_ZN7S1514C33v78Ev,
  (VTBL_ENTRY)&_ZN7S1514C33v79Ev,
  (VTBL_ENTRY)&_ZN7S1514C33v80Ev,
  (VTBL_ENTRY)&_ZN7S1514C33v81Ev,
  (VTBL_ENTRY)&_ZN7S1514C33v82Ev,
  (VTBL_ENTRY)&_ZN7S1514C33v83Ev,
  (VTBL_ENTRY)&_ZN7S1514C33v84Ev,
  (VTBL_ENTRY)&_ZN7S1514C33v85Ev,
  (VTBL_ENTRY)&_ZN7S1514C33v86Ev,
  (VTBL_ENTRY)&_ZN7S1514C33v87Ev,
  (VTBL_ENTRY)&_ZN7S1514C33v88Ev,
  (VTBL_ENTRY)&_ZN7S1514C33v89Ev,
  (VTBL_ENTRY)&_ZN7S1514C23v90Ev,
  (VTBL_ENTRY)&_ZN7S1514C23v91Ev,
  (VTBL_ENTRY)&_ZN7S1514C23v92Ev,
  (VTBL_ENTRY)&_ZN7S1514C23v93Ev,
};
extern VTBL_ENTRY _ZTI7S1514C2[];
extern  VTBL_ENTRY _ZTV7S1514C2[];
Class_Descriptor cd_S1514C2 = {  "S1514C2", // class name
  bases_S1514C2, 2,
  &(vtc_S1514C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(120,76), // object size
  NSPAIRA(_ZTI7S1514C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1514C2),92, //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  S1514C1  : S1514C2 {
  ::S1292C12 s1514c1f0;
  ::S1289C10_nt s1514c1f1;
  ::S1289C10_nt s1514c1f2;
  ::S1292C12 s1514c1f3;
  ::S1289C10_nt s1514c1f4;
  ::S1292C12 s1514c1f5;
  ::S1289C10_nt s1514c1f6;
  virtual  ~S1514C1(); // _ZN7S1514C1D1Ev
  virtual void  v1(); // _ZN7S1514C12v1Ev
  virtual void  v2(); // _ZN7S1514C12v2Ev
  virtual void  v3(); // _ZN7S1514C12v3Ev
  virtual void  v4(); // _ZN7S1514C12v4Ev
  virtual void  v5(); // _ZN7S1514C12v5Ev
  S1514C1(); // tgen
};
//SIG(1 S1514C1) C1{ BC2{ BC3{ BC4{ 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 FC5{ m Fi[2]} Fp[2]} vd v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 FC6{ m}} vd v90 v91 v92 v93 FC7{ BC8{ BC9{ m Fp Fi[2]}}}} vd v1 v2 v3 v4 v5 FC10{ BC11{ m Fc[4] FC12{ BC13{ BC9}} Fi[2]} Fp} FC14{ BC11 Fp} FC14 FC10 FC14 FC10 FC14}


 S1514C1 ::~S1514C1(){ note_dtor("S1514C1", this);}
void  S1514C1 ::v1(){vfunc_called(this, "_ZN7S1514C12v1Ev");}
void  S1514C1 ::v2(){vfunc_called(this, "_ZN7S1514C12v2Ev");}
void  S1514C1 ::v3(){vfunc_called(this, "_ZN7S1514C12v3Ev");}
void  S1514C1 ::v4(){vfunc_called(this, "_ZN7S1514C12v4Ev");}
void  S1514C1 ::v5(){vfunc_called(this, "_ZN7S1514C12v5Ev");}
S1514C1 ::S1514C1(){ note_ctor("S1514C1", this);} // tgen

static void Test_S1514C1()
{
  extern Class_Descriptor cd_S1514C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(51,69)];
    init_test(&cd_S1514C1, buf);
    S1514C1 *dp, &lv = *(dp=new (buf) S1514C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(400,272), "sizeof(S1514C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1514C1)");
    check_base_class_offset(lv, (S1514C4*)(S1514C3*)(S1514C2*), 0, "S1514C1");
    check_base_class_offset(lv, (S1514C3*)(S1514C2*), 0, "S1514C1");
    check_base_class_offset(lv, (S1514C2*), 0, "S1514C1");
    check_field_offset(lv, s1514c1f0, ABISELECT(120,76), "S1514C1.s1514c1f0");
    check_field_offset(lv, s1514c1f1, ABISELECT(160,104), "S1514C1.s1514c1f1");
    check_field_offset(lv, s1514c1f2, ABISELECT(200,132), "S1514C1.s1514c1f2");
    check_field_offset(lv, s1514c1f3, ABISELECT(240,160), "S1514C1.s1514c1f3");
    check_field_offset(lv, s1514c1f4, ABISELECT(280,188), "S1514C1.s1514c1f4");
    check_field_offset(lv, s1514c1f5, ABISELECT(320,216), "S1514C1.s1514c1f5");
    check_field_offset(lv, s1514c1f6, ABISELECT(360,244), "S1514C1.s1514c1f6");
    test_class_info(&lv, &cd_S1514C1);
    dp->~S1514C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1514C1(Test_S1514C1, "S1514C1", ABISELECT(400,272));

#else // __cplusplus

extern void _ZN7S1514C1C1Ev();
extern void _ZN7S1514C1D1Ev();
Name_Map name_map_S1514C1[] = {
  NSPAIR(_ZN7S1514C1C1Ev),
  NSPAIR(_ZN7S1514C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1514C4;
extern VTBL_ENTRY _ZTI7S1514C4[];
extern  VTBL_ENTRY _ZTV7S1514C4[];
extern Class_Descriptor cd_S1514C3;
extern VTBL_ENTRY _ZTI7S1514C3[];
extern  VTBL_ENTRY _ZTV7S1514C3[];
extern Class_Descriptor cd_S1514C2;
extern VTBL_ENTRY _ZTI7S1514C2[];
extern  VTBL_ENTRY _ZTV7S1514C2[];
static Base_Class bases_S1514C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1514C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S1514C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S1514C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S1514C1[];
extern void _ZN7S1514C1D1Ev();
extern void _ZN7S1514C1D0Ev();
extern void _ZN7S1514C42v6Ev();
extern void _ZN7S1514C42v7Ev();
extern void _ZN7S1514C42v8Ev();
extern void _ZN7S1514C42v9Ev();
extern void _ZN7S1514C43v10Ev();
extern void _ZN7S1514C43v11Ev();
extern void _ZN7S1514C43v12Ev();
extern void _ZN7S1514C43v13Ev();
extern void _ZN7S1514C43v14Ev();
extern void _ZN7S1514C43v15Ev();
extern void _ZN7S1514C43v16Ev();
extern void _ZN7S1514C43v17Ev();
extern void _ZN7S1514C43v18Ev();
extern void _ZN7S1514C43v19Ev();
extern void _ZN7S1514C43v20Ev();
extern void _ZN7S1514C43v21Ev();
extern void _ZN7S1514C43v22Ev();
extern void _ZN7S1514C43v23Ev();
extern void _ZN7S1514C43v24Ev();
extern void _ZN7S1514C43v25Ev();
extern void _ZN7S1514C43v26Ev();
extern void _ZN7S1514C43v27Ev();
extern void _ZN7S1514C43v28Ev();
extern void _ZN7S1514C43v29Ev();
extern void _ZN7S1514C43v30Ev();
extern void _ZN7S1514C43v31Ev();
extern void _ZN7S1514C43v32Ev();
extern void _ZN7S1514C43v33Ev();
extern void _ZN7S1514C43v34Ev();
extern void _ZN7S1514C43v35Ev();
extern void _ZN7S1514C43v36Ev();
extern void _ZN7S1514C43v37Ev();
extern void _ZN7S1514C43v38Ev();
extern void _ZN7S1514C43v39Ev();
extern void _ZN7S1514C43v40Ev();
extern void _ZN7S1514C43v41Ev();
extern void _ZN7S1514C43v42Ev();
extern void _ZN7S1514C43v43Ev();
extern void _ZN7S1514C43v44Ev();
extern void _ZN7S1514C43v45Ev();
extern void _ZN7S1514C43v46Ev();
extern void _ZN7S1514C43v47Ev();
extern void _ZN7S1514C43v48Ev();
extern void _ZN7S1514C43v49Ev();
extern void _ZN7S1514C43v50Ev();
extern void _ZN7S1514C43v51Ev();
extern void _ZN7S1514C43v52Ev();
extern void _ZN7S1514C43v53Ev();
extern void _ZN7S1514C43v54Ev();
extern void _ZN7S1514C43v55Ev();
extern void _ZN7S1514C43v56Ev();
extern void _ZN7S1514C43v57Ev();
extern void _ZN7S1514C43v58Ev();
extern void _ZN7S1514C43v59Ev();
extern void _ZN7S1514C43v60Ev();
extern void _ZN7S1514C43v61Ev();
extern void _ZN7S1514C43v62Ev();
extern void _ZN7S1514C43v63Ev();
extern void _ZN7S1514C43v64Ev();
extern void _ZN7S1514C43v65Ev();
extern void _ZN7S1514C43v66Ev();
extern void _ZN7S1514C43v67Ev();
extern void _ZN7S1514C43v68Ev();
extern void _ZN7S1514C43v69Ev();
extern void _ZN7S1514C33v70Ev();
extern void _ZN7S1514C33v71Ev();
extern void _ZN7S1514C33v72Ev();
extern void _ZN7S1514C33v73Ev();
extern void _ZN7S1514C33v74Ev();
extern void _ZN7S1514C33v75Ev();
extern void _ZN7S1514C33v76Ev();
extern void _ZN7S1514C33v77Ev();
extern void _ZN7S1514C33v78Ev();
extern void _ZN7S1514C33v79Ev();
extern void _ZN7S1514C33v80Ev();
extern void _ZN7S1514C33v81Ev();
extern void _ZN7S1514C33v82Ev();
extern void _ZN7S1514C33v83Ev();
extern void _ZN7S1514C33v84Ev();
extern void _ZN7S1514C33v85Ev();
extern void _ZN7S1514C33v86Ev();
extern void _ZN7S1514C33v87Ev();
extern void _ZN7S1514C33v88Ev();
extern void _ZN7S1514C33v89Ev();
extern void _ZN7S1514C23v90Ev();
extern void _ZN7S1514C23v91Ev();
extern void _ZN7S1514C23v92Ev();
extern void _ZN7S1514C23v93Ev();
extern void _ZN7S1514C12v1Ev();
extern void _ZN7S1514C12v2Ev();
extern void _ZN7S1514C12v3Ev();
extern void _ZN7S1514C12v4Ev();
extern void _ZN7S1514C12v5Ev();
static  VTBL_ENTRY vtc_S1514C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1514C1[0]),
  (VTBL_ENTRY)&_ZN7S1514C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1514C1D0Ev,
  (VTBL_ENTRY)&_ZN7S1514C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1514C42v7Ev,
  (VTBL_ENTRY)&_ZN7S1514C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1514C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1514C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1514C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1514C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1514C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1514C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1514C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1514C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1514C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1514C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1514C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1514C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1514C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1514C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1514C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1514C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1514C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1514C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1514C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1514C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1514C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1514C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1514C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1514C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1514C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1514C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1514C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1514C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1514C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1514C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1514C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1514C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1514C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1514C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1514C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1514C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1514C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1514C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1514C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1514C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1514C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1514C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1514C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1514C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1514C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1514C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1514C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1514C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1514C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1514C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1514C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1514C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1514C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1514C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1514C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1514C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1514C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1514C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1514C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1514C43v68Ev,
  (VTBL_ENTRY)&_ZN7S1514C43v69Ev,
  (VTBL_ENTRY)&_ZN7S1514C33v70Ev,
  (VTBL_ENTRY)&_ZN7S1514C33v71Ev,
  (VTBL_ENTRY)&_ZN7S1514C33v72Ev,
  (VTBL_ENTRY)&_ZN7S1514C33v73Ev,
  (VTBL_ENTRY)&_ZN7S1514C33v74Ev,
  (VTBL_ENTRY)&_ZN7S1514C33v75Ev,
  (VTBL_ENTRY)&_ZN7S1514C33v76Ev,
  (VTBL_ENTRY)&_ZN7S1514C33v77Ev,
  (VTBL_ENTRY)&_ZN7S1514C33v78Ev,
  (VTBL_ENTRY)&_ZN7S1514C33v79Ev,
  (VTBL_ENTRY)&_ZN7S1514C33v80Ev,
  (VTBL_ENTRY)&_ZN7S1514C33v81Ev,
  (VTBL_ENTRY)&_ZN7S1514C33v82Ev,
  (VTBL_ENTRY)&_ZN7S1514C33v83Ev,
  (VTBL_ENTRY)&_ZN7S1514C33v84Ev,
  (VTBL_ENTRY)&_ZN7S1514C33v85Ev,
  (VTBL_ENTRY)&_ZN7S1514C33v86Ev,
  (VTBL_ENTRY)&_ZN7S1514C33v87Ev,
  (VTBL_ENTRY)&_ZN7S1514C33v88Ev,
  (VTBL_ENTRY)&_ZN7S1514C33v89Ev,
  (VTBL_ENTRY)&_ZN7S1514C23v90Ev,
  (VTBL_ENTRY)&_ZN7S1514C23v91Ev,
  (VTBL_ENTRY)&_ZN7S1514C23v92Ev,
  (VTBL_ENTRY)&_ZN7S1514C23v93Ev,
  (VTBL_ENTRY)&_ZN7S1514C12v1Ev,
  (VTBL_ENTRY)&_ZN7S1514C12v2Ev,
  (VTBL_ENTRY)&_ZN7S1514C12v3Ev,
  (VTBL_ENTRY)&_ZN7S1514C12v4Ev,
  (VTBL_ENTRY)&_ZN7S1514C12v5Ev,
};
extern VTBL_ENTRY _ZTI7S1514C1[];
extern  VTBL_ENTRY _ZTV7S1514C1[];
Class_Descriptor cd_S1514C1 = {  "S1514C1", // class name
  bases_S1514C1, 3,
  &(vtc_S1514C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(400,272), // object size
  NSPAIRA(_ZTI7S1514C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1514C1),97, //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  S1318C4  {
  int s1318c4f0;
  __tsi64 s1318c4f1;
  void *s1318c4f2[4];
  int s1318c4f3[2];
  void *s1318c4f4;
  ::S674C6_nt s1318c4f5;
  void *s1318c4f6[2];
  virtual  ~S1318C4(); // _ZN7S1318C4D1Ev
  virtual void  v15(); // _ZN7S1318C43v15Ev
  virtual void  v16(); // _ZN7S1318C43v16Ev
  virtual void  v17(); // _ZN7S1318C43v17Ev
  virtual void  v18(); // _ZN7S1318C43v18Ev
  virtual void  v19(); // _ZN7S1318C43v19Ev
  virtual void  v20(); // _ZN7S1318C43v20Ev
  virtual void  v21(); // _ZN7S1318C43v21Ev
  virtual void  v22(); // _ZN7S1318C43v22Ev
  virtual void  v23(); // _ZN7S1318C43v23Ev
  virtual void  v24(); // _ZN7S1318C43v24Ev
  virtual void  v25(); // _ZN7S1318C43v25Ev
  virtual void  v26(); // _ZN7S1318C43v26Ev
  virtual void  v27(); // _ZN7S1318C43v27Ev
  virtual void  v28(); // _ZN7S1318C43v28Ev
  virtual void  v29(); // _ZN7S1318C43v29Ev
  virtual void  v30(); // _ZN7S1318C43v30Ev
  virtual void  v31(); // _ZN7S1318C43v31Ev
  virtual void  v32(); // _ZN7S1318C43v32Ev
  virtual void  v33(); // _ZN7S1318C43v33Ev
  virtual void  v34(); // _ZN7S1318C43v34Ev
  virtual void  v35(); // _ZN7S1318C43v35Ev
  virtual void  v36(); // _ZN7S1318C43v36Ev
  virtual void  v37(); // _ZN7S1318C43v37Ev
  virtual void  v38(); // _ZN7S1318C43v38Ev
  virtual void  v39(); // _ZN7S1318C43v39Ev
  virtual void  v40(); // _ZN7S1318C43v40Ev
  virtual void  v41(); // _ZN7S1318C43v41Ev
  virtual void  v42(); // _ZN7S1318C43v42Ev
  virtual void  v43(); // _ZN7S1318C43v43Ev
  virtual void  v44(); // _ZN7S1318C43v44Ev
  virtual void  v45(); // _ZN7S1318C43v45Ev
  virtual void  v46(); // _ZN7S1318C43v46Ev
  virtual void  v47(); // _ZN7S1318C43v47Ev
  virtual void  v48(); // _ZN7S1318C43v48Ev
  virtual void  v49(); // _ZN7S1318C43v49Ev
  virtual void  v50(); // _ZN7S1318C43v50Ev
  virtual void  v51(); // _ZN7S1318C43v51Ev
  virtual void  v52(); // _ZN7S1318C43v52Ev
  virtual void  v53(); // _ZN7S1318C43v53Ev
  virtual void  v54(); // _ZN7S1318C43v54Ev
  virtual void  v55(); // _ZN7S1318C43v55Ev
  virtual void  v56(); // _ZN7S1318C43v56Ev
  virtual void  v57(); // _ZN7S1318C43v57Ev
  virtual void  v58(); // _ZN7S1318C43v58Ev
  virtual void  v59(); // _ZN7S1318C43v59Ev
  virtual void  v60(); // _ZN7S1318C43v60Ev
  virtual void  v61(); // _ZN7S1318C43v61Ev
  virtual void  v62(); // _ZN7S1318C43v62Ev
  virtual void  v63(); // _ZN7S1318C43v63Ev
  virtual void  v64(); // _ZN7S1318C43v64Ev
  virtual void  v65(); // _ZN7S1318C43v65Ev
  virtual void  v66(); // _ZN7S1318C43v66Ev
  virtual void  v67(); // _ZN7S1318C43v67Ev
  virtual void  v68(); // _ZN7S1318C43v68Ev
  virtual void  v69(); // _ZN7S1318C43v69Ev
  virtual void  v70(); // _ZN7S1318C43v70Ev
  virtual void  v71(); // _ZN7S1318C43v71Ev
  virtual void  v72(); // _ZN7S1318C43v72Ev
  virtual void  v73(); // _ZN7S1318C43v73Ev
  virtual void  v74(); // _ZN7S1318C43v74Ev
  virtual void  v75(); // _ZN7S1318C43v75Ev
  virtual void  v76(); // _ZN7S1318C43v76Ev
  virtual void  v77(); // _ZN7S1318C43v77Ev
  virtual void  v78(); // _ZN7S1318C43v78Ev
  S1318C4(); // tgen
};
//SIG(-1 S1318C4) 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]}


 S1318C4 ::~S1318C4(){ note_dtor("S1318C4", this);}
void  S1318C4 ::v15(){vfunc_called(this, "_ZN7S1318C43v15Ev");}
void  S1318C4 ::v16(){vfunc_called(this, "_ZN7S1318C43v16Ev");}
void  S1318C4 ::v17(){vfunc_called(this, "_ZN7S1318C43v17Ev");}
void  S1318C4 ::v18(){vfunc_called(this, "_ZN7S1318C43v18Ev");}
void  S1318C4 ::v19(){vfunc_called(this, "_ZN7S1318C43v19Ev");}
void  S1318C4 ::v20(){vfunc_called(this, "_ZN7S1318C43v20Ev");}
void  S1318C4 ::v21(){vfunc_called(this, "_ZN7S1318C43v21Ev");}
void  S1318C4 ::v22(){vfunc_called(this, "_ZN7S1318C43v22Ev");}
void  S1318C4 ::v23(){vfunc_called(this, "_ZN7S1318C43v23Ev");}
void  S1318C4 ::v24(){vfunc_called(this, "_ZN7S1318C43v24Ev");}
void  S1318C4 ::v25(){vfunc_called(this, "_ZN7S1318C43v25Ev");}
void  S1318C4 ::v26(){vfunc_called(this, "_ZN7S1318C43v26Ev");}
void  S1318C4 ::v27(){vfunc_called(this, "_ZN7S1318C43v27Ev");}
void  S1318C4 ::v28(){vfunc_called(this, "_ZN7S1318C43v28Ev");}
void  S1318C4 ::v29(){vfunc_called(this, "_ZN7S1318C43v29Ev");}
void  S1318C4 ::v30(){vfunc_called(this, "_ZN7S1318C43v30Ev");}
void  S1318C4 ::v31(){vfunc_called(this, "_ZN7S1318C43v31Ev");}
void  S1318C4 ::v32(){vfunc_called(this, "_ZN7S1318C43v32Ev");}
void  S1318C4 ::v33(){vfunc_called(this, "_ZN7S1318C43v33Ev");}
void  S1318C4 ::v34(){vfunc_called(this, "_ZN7S1318C43v34Ev");}
void  S1318C4 ::v35(){vfunc_called(this, "_ZN7S1318C43v35Ev");}
void  S1318C4 ::v36(){vfunc_called(this, "_ZN7S1318C43v36Ev");}
void  S1318C4 ::v37(){vfunc_called(this, "_ZN7S1318C43v37Ev");}
void  S1318C4 ::v38(){vfunc_called(this, "_ZN7S1318C43v38Ev");}
void  S1318C4 ::v39(){vfunc_called(this, "_ZN7S1318C43v39Ev");}
void  S1318C4 ::v40(){vfunc_called(this, "_ZN7S1318C43v40Ev");}
void  S1318C4 ::v41(){vfunc_called(this, "_ZN7S1318C43v41Ev");}
void  S1318C4 ::v42(){vfunc_called(this, "_ZN7S1318C43v42Ev");}
void  S1318C4 ::v43(){vfunc_called(this, "_ZN7S1318C43v43Ev");}
void  S1318C4 ::v44(){vfunc_called(this, "_ZN7S1318C43v44Ev");}
void  S1318C4 ::v45(){vfunc_called(this, "_ZN7S1318C43v45Ev");}
void  S1318C4 ::v46(){vfunc_called(this, "_ZN7S1318C43v46Ev");}
void  S1318C4 ::v47(){vfunc_called(this, "_ZN7S1318C43v47Ev");}
void  S1318C4 ::v48(){vfunc_called(this, "_ZN7S1318C43v48Ev");}
void  S1318C4 ::v49(){vfunc_called(this, "_ZN7S1318C43v49Ev");}
void  S1318C4 ::v50(){vfunc_called(this, "_ZN7S1318C43v50Ev");}
void  S1318C4 ::v51(){vfunc_called(this, "_ZN7S1318C43v51Ev");}
void  S1318C4 ::v52(){vfunc_called(this, "_ZN7S1318C43v52Ev");}
void  S1318C4 ::v53(){vfunc_called(this, "_ZN7S1318C43v53Ev");}
void  S1318C4 ::v54(){vfunc_called(this, "_ZN7S1318C43v54Ev");}
void  S1318C4 ::v55(){vfunc_called(this, "_ZN7S1318C43v55Ev");}
void  S1318C4 ::v56(){vfunc_called(this, "_ZN7S1318C43v56Ev");}
void  S1318C4 ::v57(){vfunc_called(this, "_ZN7S1318C43v57Ev");}
void  S1318C4 ::v58(){vfunc_called(this, "_ZN7S1318C43v58Ev");}
void  S1318C4 ::v59(){vfunc_called(this, "_ZN7S1318C43v59Ev");}
void  S1318C4 ::v60(){vfunc_called(this, "_ZN7S1318C43v60Ev");}
void  S1318C4 ::v61(){vfunc_called(this, "_ZN7S1318C43v61Ev");}
void  S1318C4 ::v62(){vfunc_called(this, "_ZN7S1318C43v62Ev");}
void  S1318C4 ::v63(){vfunc_called(this, "_ZN7S1318C43v63Ev");}
void  S1318C4 ::v64(){vfunc_called(this, "_ZN7S1318C43v64Ev");}
void  S1318C4 ::v65(){vfunc_called(this, "_ZN7S1318C43v65Ev");}
void  S1318C4 ::v66(){vfunc_called(this, "_ZN7S1318C43v66Ev");}
void  S1318C4 ::v67(){vfunc_called(this, "_ZN7S1318C43v67Ev");}
void  S1318C4 ::v68(){vfunc_called(this, "_ZN7S1318C43v68Ev");}
void  S1318C4 ::v69(){vfunc_called(this, "_ZN7S1318C43v69Ev");}
void  S1318C4 ::v70(){vfunc_called(this, "_ZN7S1318C43v70Ev");}
void  S1318C4 ::v71(){vfunc_called(this, "_ZN7S1318C43v71Ev");}
void  S1318C4 ::v72(){vfunc_called(this, "_ZN7S1318C43v72Ev");}
void  S1318C4 ::v73(){vfunc_called(this, "_ZN7S1318C43v73Ev");}
void  S1318C4 ::v74(){vfunc_called(this, "_ZN7S1318C43v74Ev");}
void  S1318C4 ::v75(){vfunc_called(this, "_ZN7S1318C43v75Ev");}
void  S1318C4 ::v76(){vfunc_called(this, "_ZN7S1318C43v76Ev");}
void  S1318C4 ::v77(){vfunc_called(this, "_ZN7S1318C43v77Ev");}
void  S1318C4 ::v78(){vfunc_called(this, "_ZN7S1318C43v78Ev");}
S1318C4 ::S1318C4(){ note_ctor("S1318C4", this);} // tgen

static void Test_S1318C4()
{
  extern Class_Descriptor cd_S1318C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S1318C4, buf);
    S1318C4 *dp, &lv = *(dp=new (buf) S1318C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S1318C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1318C4)");
    check_field_offset(lv, s1318c4f0, ABISELECT(8,4), "S1318C4.s1318c4f0");
    check_field_offset(lv, s1318c4f1, ABISELECT(16,8), "S1318C4.s1318c4f1");
    check_field_offset(lv, s1318c4f2, ABISELECT(24,16), "S1318C4.s1318c4f2");
    check_field_offset(lv, s1318c4f3, ABISELECT(56,32), "S1318C4.s1318c4f3");
    check_field_offset(lv, s1318c4f4, ABISELECT(64,40), "S1318C4.s1318c4f4");
    check_field_offset(lv, s1318c4f5, ABISELECT(72,44), "S1318C4.s1318c4f5");
    check_field_offset(lv, s1318c4f6, ABISELECT(80,52), "S1318C4.s1318c4f6");
    test_class_info(&lv, &cd_S1318C4);
    dp->~S1318C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1318C4(Test_S1318C4, "S1318C4", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN7S1318C4C1Ev();
extern void _ZN7S1318C4D1Ev();
Name_Map name_map_S1318C4[] = {
  NSPAIR(_ZN7S1318C4C1Ev),
  NSPAIR(_ZN7S1318C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S1318C4[];
extern void _ZN7S1318C4D1Ev();
extern void _ZN7S1318C4D0Ev();
extern void _ZN7S1318C43v15Ev();
extern void _ZN7S1318C43v16Ev();
extern void _ZN7S1318C43v17Ev();
extern void _ZN7S1318C43v18Ev();
extern void _ZN7S1318C43v19Ev();
extern void _ZN7S1318C43v20Ev();
extern void _ZN7S1318C43v21Ev();
extern void _ZN7S1318C43v22Ev();
extern void _ZN7S1318C43v23Ev();
extern void _ZN7S1318C43v24Ev();
extern void _ZN7S1318C43v25Ev();
extern void _ZN7S1318C43v26Ev();
extern void _ZN7S1318C43v27Ev();
extern void _ZN7S1318C43v28Ev();
extern void _ZN7S1318C43v29Ev();
extern void _ZN7S1318C43v30Ev();
extern void _ZN7S1318C43v31Ev();
extern void _ZN7S1318C43v32Ev();
extern void _ZN7S1318C43v33Ev();
extern void _ZN7S1318C43v34Ev();
extern void _ZN7S1318C43v35Ev();
extern void _ZN7S1318C43v36Ev();
extern void _ZN7S1318C43v37Ev();
extern void _ZN7S1318C43v38Ev();
extern void _ZN7S1318C43v39Ev();
extern void _ZN7S1318C43v40Ev();
extern void _ZN7S1318C43v41Ev();
extern void _ZN7S1318C43v42Ev();
extern void _ZN7S1318C43v43Ev();
extern void _ZN7S1318C43v44Ev();
extern void _ZN7S1318C43v45Ev();
extern void _ZN7S1318C43v46Ev();
extern void _ZN7S1318C43v47Ev();
extern void _ZN7S1318C43v48Ev();
extern void _ZN7S1318C43v49Ev();
extern void _ZN7S1318C43v50Ev();
extern void _ZN7S1318C43v51Ev();
extern void _ZN7S1318C43v52Ev();
extern void _ZN7S1318C43v53Ev();
extern void _ZN7S1318C43v54Ev();
extern void _ZN7S1318C43v55Ev();
extern void _ZN7S1318C43v56Ev();
extern void _ZN7S1318C43v57Ev();
extern void _ZN7S1318C43v58Ev();
extern void _ZN7S1318C43v59Ev();
extern void _ZN7S1318C43v60Ev();
extern void _ZN7S1318C43v61Ev();
extern void _ZN7S1318C43v62Ev();
extern void _ZN7S1318C43v63Ev();
extern void _ZN7S1318C43v64Ev();
extern void _ZN7S1318C43v65Ev();
extern void _ZN7S1318C43v66Ev();
extern void _ZN7S1318C43v67Ev();
extern void _ZN7S1318C43v68Ev();
extern void _ZN7S1318C43v69Ev();
extern void _ZN7S1318C43v70Ev();
extern void _ZN7S1318C43v71Ev();
extern void _ZN7S1318C43v72Ev();
extern void _ZN7S1318C43v73Ev();
extern void _ZN7S1318C43v74Ev();
extern void _ZN7S1318C43v75Ev();
extern void _ZN7S1318C43v76Ev();
extern void _ZN7S1318C43v77Ev();
extern void _ZN7S1318C43v78Ev();
static  VTBL_ENTRY vtc_S1318C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1318C4[0]),
  (VTBL_ENTRY)&_ZN7S1318C4D1Ev,
  (VTBL_ENTRY)&_ZN7S1318C4D0Ev,
  (VTBL_ENTRY)&_ZN7S1318C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1318C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1318C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1318C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1318C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1318C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1318C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1318C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1318C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1318C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1318C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1318C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1318C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1318C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1318C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1318C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1318C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1318C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1318C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1318C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1318C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1318C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1318C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1318C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1318C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1318C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1318C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1318C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1318C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1318C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1318C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1318C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1318C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1318C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1318C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1318C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1318C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1318C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1318C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1318C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1318C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1318C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1318C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1318C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1318C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1318C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1318C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1318C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1318C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1318C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1318C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1318C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1318C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1318C43v68Ev,
  (VTBL_ENTRY)&_ZN7S1318C43v69Ev,
  (VTBL_ENTRY)&_ZN7S1318C43v70Ev,
  (VTBL_ENTRY)&_ZN7S1318C43v71Ev,
  (VTBL_ENTRY)&_ZN7S1318C43v72Ev,
  (VTBL_ENTRY)&_ZN7S1318C43v73Ev,
  (VTBL_ENTRY)&_ZN7S1318C43v74Ev,
  (VTBL_ENTRY)&_ZN7S1318C43v75Ev,
  (VTBL_ENTRY)&_ZN7S1318C43v76Ev,
  (VTBL_ENTRY)&_ZN7S1318C43v77Ev,
  (VTBL_ENTRY)&_ZN7S1318C43v78Ev,
};
extern VTBL_ENTRY _ZTI7S1318C4[];
extern  VTBL_ENTRY _ZTV7S1318C4[];
Class_Descriptor cd_S1318C4 = {  "S1318C4", // class name
  0,0,//no base classes
  &(vtc_S1318C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI7S1318C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S1318C4),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  S1318C3  : S1318C4 {
  unsigned int s1318c3f0:1;
  unsigned int s1318c3f1:1;
  unsigned int s1318c3f2:1;
  unsigned int s1318c3f3:1;
  unsigned int s1318c3f4:1;
  unsigned int s1318c3f5:1;
  unsigned int s1318c3f6:1;
  ::S3625C32 s1318c3f7;
  virtual  ~S1318C3(); // _ZN7S1318C3D1Ev
  virtual void  v79(); // _ZN7S1318C33v79Ev
  virtual void  v80(); // _ZN7S1318C33v80Ev
  virtual void  v81(); // _ZN7S1318C33v81Ev
  virtual void  v82(); // _ZN7S1318C33v82Ev
  virtual void  v83(); // _ZN7S1318C33v83Ev
  virtual void  v84(); // _ZN7S1318C33v84Ev
  virtual void  v85(); // _ZN7S1318C33v85Ev
  virtual void  v86(); // _ZN7S1318C33v86Ev
  virtual void  v87(); // _ZN7S1318C33v87Ev
  virtual void  v88(); // _ZN7S1318C33v88Ev
  virtual void  v89(); // _ZN7S1318C33v89Ev
  virtual void  v90(); // _ZN7S1318C33v90Ev
  virtual void  v91(); // _ZN7S1318C33v91Ev
  virtual void  v92(); // _ZN7S1318C33v92Ev
  virtual void  v93(); // _ZN7S1318C33v93Ev
  virtual void  v94(); // _ZN7S1318C33v94Ev
  virtual void  v95(); // _ZN7S1318C33v95Ev
  virtual void  v96(); // _ZN7S1318C33v96Ev
  virtual void  v97(); // _ZN7S1318C33v97Ev
  virtual void  v98(); // _ZN7S1318C33v98Ev
  S1318C3(); // tgen
};
//SIG(-1 S1318C3) C1{ BC2{ 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 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 Fi FL Fp[4] Fi[2] Fp FC3{ m Fi[2]} Fp[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 FC4{ m}}


 S1318C3 ::~S1318C3(){ note_dtor("S1318C3", this);}
void  S1318C3 ::v79(){vfunc_called(this, "_ZN7S1318C33v79Ev");}
void  S1318C3 ::v80(){vfunc_called(this, "_ZN7S1318C33v80Ev");}
void  S1318C3 ::v81(){vfunc_called(this, "_ZN7S1318C33v81Ev");}
void  S1318C3 ::v82(){vfunc_called(this, "_ZN7S1318C33v82Ev");}
void  S1318C3 ::v83(){vfunc_called(this, "_ZN7S1318C33v83Ev");}
void  S1318C3 ::v84(){vfunc_called(this, "_ZN7S1318C33v84Ev");}
void  S1318C3 ::v85(){vfunc_called(this, "_ZN7S1318C33v85Ev");}
void  S1318C3 ::v86(){vfunc_called(this, "_ZN7S1318C33v86Ev");}
void  S1318C3 ::v87(){vfunc_called(this, "_ZN7S1318C33v87Ev");}
void  S1318C3 ::v88(){vfunc_called(this, "_ZN7S1318C33v88Ev");}
void  S1318C3 ::v89(){vfunc_called(this, "_ZN7S1318C33v89Ev");}
void  S1318C3 ::v90(){vfunc_called(this, "_ZN7S1318C33v90Ev");}
void  S1318C3 ::v91(){vfunc_called(this, "_ZN7S1318C33v91Ev");}
void  S1318C3 ::v92(){vfunc_called(this, "_ZN7S1318C33v92Ev");}
void  S1318C3 ::v93(){vfunc_called(this, "_ZN7S1318C33v93Ev");}
void  S1318C3 ::v94(){vfunc_called(this, "_ZN7S1318C33v94Ev");}
void  S1318C3 ::v95(){vfunc_called(this, "_ZN7S1318C33v95Ev");}
void  S1318C3 ::v96(){vfunc_called(this, "_ZN7S1318C33v96Ev");}
void  S1318C3 ::v97(){vfunc_called(this, "_ZN7S1318C33v97Ev");}
void  S1318C3 ::v98(){vfunc_called(this, "_ZN7S1318C33v98Ev");}
S1318C3 ::S1318C3(){ note_ctor("S1318C3", this);} // tgen

static void Test_S1318C3()
{
  extern Class_Descriptor cd_S1318C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(14,17)];
    init_test(&cd_S1318C3, buf);
    S1318C3 *dp, &lv = *(dp=new (buf) S1318C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(104,64), "sizeof(S1318C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1318C3)");
    check_base_class_offset(lv, (S1318C4*), 0, "S1318C3");
    set_bf_and_test(lv, s1318c3f0, ABISELECT(96,60), 0, 1, 1, "S1318C3");
    set_bf_and_test(lv, s1318c3f1, ABISELECT(96,60), 1, 1, 1, "S1318C3");
    set_bf_and_test(lv, s1318c3f2, ABISELECT(96,60), 2, 1, 1, "S1318C3");
    set_bf_and_test(lv, s1318c3f3, ABISELECT(96,60), 3, 1, 1, "S1318C3");
    set_bf_and_test(lv, s1318c3f4, ABISELECT(96,60), 4, 1, 1, "S1318C3");
    set_bf_and_test(lv, s1318c3f5, ABISELECT(96,60), 5, 1, 1, "S1318C3");
    set_bf_and_test(lv, s1318c3f6, ABISELECT(96,60), 6, 1, 1, "S1318C3");
    check_field_offset(lv, s1318c3f7, ABISELECT(97,61), "S1318C3.s1318c3f7");
    test_class_info(&lv, &cd_S1318C3);
    dp->~S1318C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1318C3(Test_S1318C3, "S1318C3", ABISELECT(104,64));

#else // __cplusplus

extern void _ZN7S1318C3C1Ev();
extern void _ZN7S1318C3D1Ev();
Name_Map name_map_S1318C3[] = {
  NSPAIR(_ZN7S1318C3C1Ev),
  NSPAIR(_ZN7S1318C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1318C4;
extern VTBL_ENTRY _ZTI7S1318C4[];
extern  VTBL_ENTRY _ZTV7S1318C4[];
static Base_Class bases_S1318C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1318C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI7S1318C3[];
extern void _ZN7S1318C3D1Ev();
extern void _ZN7S1318C3D0Ev();
extern void _ZN7S1318C43v15Ev();
extern void _ZN7S1318C43v16Ev();
extern void _ZN7S1318C43v17Ev();
extern void _ZN7S1318C43v18Ev();
extern void _ZN7S1318C43v19Ev();
extern void _ZN7S1318C43v20Ev();
extern void _ZN7S1318C43v21Ev();
extern void _ZN7S1318C43v22Ev();
extern void _ZN7S1318C43v23Ev();
extern void _ZN7S1318C43v24Ev();
extern void _ZN7S1318C43v25Ev();
extern void _ZN7S1318C43v26Ev();
extern void _ZN7S1318C43v27Ev();
extern void _ZN7S1318C43v28Ev();
extern void _ZN7S1318C43v29Ev();
extern void _ZN7S1318C43v30Ev();
extern void _ZN7S1318C43v31Ev();
extern void _ZN7S1318C43v32Ev();
extern void _ZN7S1318C43v33Ev();
extern void _ZN7S1318C43v34Ev();
extern void _ZN7S1318C43v35Ev();
extern void _ZN7S1318C43v36Ev();
extern void _ZN7S1318C43v37Ev();
extern void _ZN7S1318C43v38Ev();
extern void _ZN7S1318C43v39Ev();
extern void _ZN7S1318C43v40Ev();
extern void _ZN7S1318C43v41Ev();
extern void _ZN7S1318C43v42Ev();
extern void _ZN7S1318C43v43Ev();
extern void _ZN7S1318C43v44Ev();
extern void _ZN7S1318C43v45Ev();
extern void _ZN7S1318C43v46Ev();
extern void _ZN7S1318C43v47Ev();
extern void _ZN7S1318C43v48Ev();
extern void _ZN7S1318C43v49Ev();
extern void _ZN7S1318C43v50Ev();
extern void _ZN7S1318C43v51Ev();
extern void _ZN7S1318C43v52Ev();
extern void _ZN7S1318C43v53Ev();
extern void _ZN7S1318C43v54Ev();
extern void _ZN7S1318C43v55Ev();
extern void _ZN7S1318C43v56Ev();
extern void _ZN7S1318C43v57Ev();
extern void _ZN7S1318C43v58Ev();
extern void _ZN7S1318C43v59Ev();
extern void _ZN7S1318C43v60Ev();
extern void _ZN7S1318C43v61Ev();
extern void _ZN7S1318C43v62Ev();
extern void _ZN7S1318C43v63Ev();
extern void _ZN7S1318C43v64Ev();
extern void _ZN7S1318C43v65Ev();
extern void _ZN7S1318C43v66Ev();
extern void _ZN7S1318C43v67Ev();
extern void _ZN7S1318C43v68Ev();
extern void _ZN7S1318C43v69Ev();
extern void _ZN7S1318C43v70Ev();
extern void _ZN7S1318C43v71Ev();
extern void _ZN7S1318C43v72Ev();
extern void _ZN7S1318C43v73Ev();
extern void _ZN7S1318C43v74Ev();
extern void _ZN7S1318C43v75Ev();
extern void _ZN7S1318C43v76Ev();
extern void _ZN7S1318C43v77Ev();
extern void _ZN7S1318C43v78Ev();
extern void _ZN7S1318C33v79Ev();
extern void _ZN7S1318C33v80Ev();
extern void _ZN7S1318C33v81Ev();
extern void _ZN7S1318C33v82Ev();
extern void _ZN7S1318C33v83Ev();
extern void _ZN7S1318C33v84Ev();
extern void _ZN7S1318C33v85Ev();
extern void _ZN7S1318C33v86Ev();
extern void _ZN7S1318C33v87Ev();
extern void _ZN7S1318C33v88Ev();
extern void _ZN7S1318C33v89Ev();
extern void _ZN7S1318C33v90Ev();
extern void _ZN7S1318C33v91Ev();
extern void _ZN7S1318C33v92Ev();
extern void _ZN7S1318C33v93Ev();
extern void _ZN7S1318C33v94Ev();
extern void _ZN7S1318C33v95Ev();
extern void _ZN7S1318C33v96Ev();
extern void _ZN7S1318C33v97Ev();
extern void _ZN7S1318C33v98Ev();
static  VTBL_ENTRY vtc_S1318C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1318C3[0]),
  (VTBL_ENTRY)&_ZN7S1318C3D1Ev,
  (VTBL_ENTRY)&_ZN7S1318C3D0Ev,
  (VTBL_ENTRY)&_ZN7S1318C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1318C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1318C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1318C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1318C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1318C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1318C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1318C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1318C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1318C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1318C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1318C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1318C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1318C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1318C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1318C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1318C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1318C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1318C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1318C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1318C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1318C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1318C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1318C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1318C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1318C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1318C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1318C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1318C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1318C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1318C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1318C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1318C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1318C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1318C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1318C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1318C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1318C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1318C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1318C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1318C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1318C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1318C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1318C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1318C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1318C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1318C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1318C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1318C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1318C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1318C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1318C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1318C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1318C43v68Ev,
  (VTBL_ENTRY)&_ZN7S1318C43v69Ev,
  (VTBL_ENTRY)&_ZN7S1318C43v70Ev,
  (VTBL_ENTRY)&_ZN7S1318C43v71Ev,
  (VTBL_ENTRY)&_ZN7S1318C43v72Ev,
  (VTBL_ENTRY)&_ZN7S1318C43v73Ev,
  (VTBL_ENTRY)&_ZN7S1318C43v74Ev,
  (VTBL_ENTRY)&_ZN7S1318C43v75Ev,
  (VTBL_ENTRY)&_ZN7S1318C43v76Ev,
  (VTBL_ENTRY)&_ZN7S1318C43v77Ev,
  (VTBL_ENTRY)&_ZN7S1318C43v78Ev,
  (VTBL_ENTRY)&_ZN7S1318C33v79Ev,
  (VTBL_ENTRY)&_ZN7S1318C33v80Ev,
  (VTBL_ENTRY)&_ZN7S1318C33v81Ev,
  (VTBL_ENTRY)&_ZN7S1318C33v82Ev,
  (VTBL_ENTRY)&_ZN7S1318C33v83Ev,
  (VTBL_ENTRY)&_ZN7S1318C33v84Ev,
  (VTBL_ENTRY)&_ZN7S1318C33v85Ev,
  (VTBL_ENTRY)&_ZN7S1318C33v86Ev,
  (VTBL_ENTRY)&_ZN7S1318C33v87Ev,
  (VTBL_ENTRY)&_ZN7S1318C33v88Ev,
  (VTBL_ENTRY)&_ZN7S1318C33v89Ev,
  (VTBL_ENTRY)&_ZN7S1318C33v90Ev,
  (VTBL_ENTRY)&_ZN7S1318C33v91Ev,
  (VTBL_ENTRY)&_ZN7S1318C33v92Ev,
  (VTBL_ENTRY)&_ZN7S1318C33v93Ev,
  (VTBL_ENTRY)&_ZN7S1318C33v94Ev,
  (VTBL_ENTRY)&_ZN7S1318C33v95Ev,
  (VTBL_ENTRY)&_ZN7S1318C33v96Ev,
  (VTBL_ENTRY)&_ZN7S1318C33v97Ev,
  (VTBL_ENTRY)&_ZN7S1318C33v98Ev,
};
extern VTBL_ENTRY _ZTI7S1318C3[];
extern  VTBL_ENTRY _ZTV7S1318C3[];
Class_Descriptor cd_S1318C3 = {  "S1318C3", // class name
  bases_S1318C3, 1,
  &(vtc_S1318C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(104,64), // object size
  NSPAIRA(_ZTI7S1318C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1318C3),88, //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  S1318C2  : S1318C3 {
  virtual  ~S1318C2(); // _ZN7S1318C2D1Ev
  virtual void  v99(); // _ZN7S1318C23v99Ev
  virtual void  v100(); // _ZN7S1318C24v100Ev
  virtual void  v101(); // _ZN7S1318C24v101Ev
  virtual void  v102(); // _ZN7S1318C24v102Ev
  virtual void  v103(); // _ZN7S1318C24v103Ev
  virtual void  v104(); // _ZN7S1318C24v104Ev
  virtual void  v105(); // _ZN7S1318C24v105Ev
  virtual void  v106(); // _ZN7S1318C24v106Ev
  virtual void  v107(); // _ZN7S1318C24v107Ev
  S1318C2(); // tgen
};
//SIG(-1 S1318C2) C1{ BC2{ BC3{ vd 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 Fi FL Fp[4] Fi[2] Fp FC4{ m Fi[2]} Fp[2]} vd v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 v91 v92 v93 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 FC5{ m}} vd v1 v2 v3 v4 v5 v6 v7 v8 v9}


 S1318C2 ::~S1318C2(){ note_dtor("S1318C2", this);}
void  S1318C2 ::v99(){vfunc_called(this, "_ZN7S1318C23v99Ev");}
void  S1318C2 ::v100(){vfunc_called(this, "_ZN7S1318C24v100Ev");}
void  S1318C2 ::v101(){vfunc_called(this, "_ZN7S1318C24v101Ev");}
void  S1318C2 ::v102(){vfunc_called(this, "_ZN7S1318C24v102Ev");}
void  S1318C2 ::v103(){vfunc_called(this, "_ZN7S1318C24v103Ev");}
void  S1318C2 ::v104(){vfunc_called(this, "_ZN7S1318C24v104Ev");}
void  S1318C2 ::v105(){vfunc_called(this, "_ZN7S1318C24v105Ev");}
void  S1318C2 ::v106(){vfunc_called(this, "_ZN7S1318C24v106Ev");}
void  S1318C2 ::v107(){vfunc_called(this, "_ZN7S1318C24v107Ev");}
S1318C2 ::S1318C2(){ note_ctor("S1318C2", this);} // tgen

static void Test_S1318C2()
{
  extern Class_Descriptor cd_S1318C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(14,17)];
    init_test(&cd_S1318C2, buf);
    S1318C2 *dp, &lv = *(dp=new (buf) S1318C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(104,64), "sizeof(S1318C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1318C2)");
    check_base_class_offset(lv, (S1318C4*)(S1318C3*), 0, "S1318C2");
    check_base_class_offset(lv, (S1318C3*), 0, "S1318C2");
    test_class_info(&lv, &cd_S1318C2);
    dp->~S1318C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1318C2(Test_S1318C2, "S1318C2", ABISELECT(104,64));

#else // __cplusplus

extern void _ZN7S1318C2C1Ev();
extern void _ZN7S1318C2D1Ev();
Name_Map name_map_S1318C2[] = {
  NSPAIR(_ZN7S1318C2C1Ev),
  NSPAIR(_ZN7S1318C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1318C4;
extern VTBL_ENTRY _ZTI7S1318C4[];
extern  VTBL_ENTRY _ZTV7S1318C4[];
extern Class_Descriptor cd_S1318C3;
extern VTBL_ENTRY _ZTI7S1318C3[];
extern  VTBL_ENTRY _ZTV7S1318C3[];
static Base_Class bases_S1318C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1318C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S1318C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S1318C2[];
extern void _ZN7S1318C2D1Ev();
extern void _ZN7S1318C2D0Ev();
extern void _ZN7S1318C43v15Ev();
extern void _ZN7S1318C43v16Ev();
extern void _ZN7S1318C43v17Ev();
extern void _ZN7S1318C43v18Ev();
extern void _ZN7S1318C43v19Ev();
extern void _ZN7S1318C43v20Ev();
extern void _ZN7S1318C43v21Ev();
extern void _ZN7S1318C43v22Ev();
extern void _ZN7S1318C43v23Ev();
extern void _ZN7S1318C43v24Ev();
extern void _ZN7S1318C43v25Ev();
extern void _ZN7S1318C43v26Ev();
extern void _ZN7S1318C43v27Ev();
extern void _ZN7S1318C43v28Ev();
extern void _ZN7S1318C43v29Ev();
extern void _ZN7S1318C43v30Ev();
extern void _ZN7S1318C43v31Ev();
extern void _ZN7S1318C43v32Ev();
extern void _ZN7S1318C43v33Ev();
extern void _ZN7S1318C43v34Ev();
extern void _ZN7S1318C43v35Ev();
extern void _ZN7S1318C43v36Ev();
extern void _ZN7S1318C43v37Ev();
extern void _ZN7S1318C43v38Ev();
extern void _ZN7S1318C43v39Ev();
extern void _ZN7S1318C43v40Ev();
extern void _ZN7S1318C43v41Ev();
extern void _ZN7S1318C43v42Ev();
extern void _ZN7S1318C43v43Ev();
extern void _ZN7S1318C43v44Ev();
extern void _ZN7S1318C43v45Ev();
extern void _ZN7S1318C43v46Ev();
extern void _ZN7S1318C43v47Ev();
extern void _ZN7S1318C43v48Ev();
extern void _ZN7S1318C43v49Ev();
extern void _ZN7S1318C43v50Ev();
extern void _ZN7S1318C43v51Ev();
extern void _ZN7S1318C43v52Ev();
extern void _ZN7S1318C43v53Ev();
extern void _ZN7S1318C43v54Ev();
extern void _ZN7S1318C43v55Ev();
extern void _ZN7S1318C43v56Ev();
extern void _ZN7S1318C43v57Ev();
extern void _ZN7S1318C43v58Ev();
extern void _ZN7S1318C43v59Ev();
extern void _ZN7S1318C43v60Ev();
extern void _ZN7S1318C43v61Ev();
extern void _ZN7S1318C43v62Ev();
extern void _ZN7S1318C43v63Ev();
extern void _ZN7S1318C43v64Ev();
extern void _ZN7S1318C43v65Ev();
extern void _ZN7S1318C43v66Ev();
extern void _ZN7S1318C43v67Ev();
extern void _ZN7S1318C43v68Ev();
extern void _ZN7S1318C43v69Ev();
extern void _ZN7S1318C43v70Ev();
extern void _ZN7S1318C43v71Ev();
extern void _ZN7S1318C43v72Ev();
extern void _ZN7S1318C43v73Ev();
extern void _ZN7S1318C43v74Ev();
extern void _ZN7S1318C43v75Ev();
extern void _ZN7S1318C43v76Ev();
extern void _ZN7S1318C43v77Ev();
extern void _ZN7S1318C43v78Ev();
extern void _ZN7S1318C33v79Ev();
extern void _ZN7S1318C33v80Ev();
extern void _ZN7S1318C33v81Ev();
extern void _ZN7S1318C33v82Ev();
extern void _ZN7S1318C33v83Ev();
extern void _ZN7S1318C33v84Ev();
extern void _ZN7S1318C33v85Ev();
extern void _ZN7S1318C33v86Ev();
extern void _ZN7S1318C33v87Ev();
extern void _ZN7S1318C33v88Ev();
extern void _ZN7S1318C33v89Ev();
extern void _ZN7S1318C33v90Ev();
extern void _ZN7S1318C33v91Ev();
extern void _ZN7S1318C33v92Ev();
extern void _ZN7S1318C33v93Ev();
extern void _ZN7S1318C33v94Ev();
extern void _ZN7S1318C33v95Ev();
extern void _ZN7S1318C33v96Ev();
extern void _ZN7S1318C33v97Ev();
extern void _ZN7S1318C33v98Ev();
extern void _ZN7S1318C23v99Ev();
extern void _ZN7S1318C24v100Ev();
extern void _ZN7S1318C24v101Ev();
extern void _ZN7S1318C24v102Ev();
extern void _ZN7S1318C24v103Ev();
extern void _ZN7S1318C24v104Ev();
extern void _ZN7S1318C24v105Ev();
extern void _ZN7S1318C24v106Ev();
extern void _ZN7S1318C24v107Ev();
static  VTBL_ENTRY vtc_S1318C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1318C2[0]),
  (VTBL_ENTRY)&_ZN7S1318C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1318C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1318C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1318C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1318C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1318C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1318C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1318C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1318C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1318C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1318C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1318C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1318C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1318C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1318C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1318C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1318C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1318C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1318C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1318C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1318C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1318C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1318C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1318C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1318C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1318C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1318C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1318C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1318C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1318C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1318C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1318C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1318C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1318C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1318C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1318C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1318C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1318C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1318C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1318C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1318C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1318C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1318C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1318C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1318C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1318C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1318C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1318C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1318C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1318C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1318C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1318C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1318C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1318C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1318C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1318C43v68Ev,
  (VTBL_ENTRY)&_ZN7S1318C43v69Ev,
  (VTBL_ENTRY)&_ZN7S1318C43v70Ev,
  (VTBL_ENTRY)&_ZN7S1318C43v71Ev,
  (VTBL_ENTRY)&_ZN7S1318C43v72Ev,
  (VTBL_ENTRY)&_ZN7S1318C43v73Ev,
  (VTBL_ENTRY)&_ZN7S1318C43v74Ev,
  (VTBL_ENTRY)&_ZN7S1318C43v75Ev,
  (VTBL_ENTRY)&_ZN7S1318C43v76Ev,
  (VTBL_ENTRY)&_ZN7S1318C43v77Ev,
  (VTBL_ENTRY)&_ZN7S1318C43v78Ev,
  (VTBL_ENTRY)&_ZN7S1318C33v79Ev,
  (VTBL_ENTRY)&_ZN7S1318C33v80Ev,
  (VTBL_ENTRY)&_ZN7S1318C33v81Ev,
  (VTBL_ENTRY)&_ZN7S1318C33v82Ev,
  (VTBL_ENTRY)&_ZN7S1318C33v83Ev,
  (VTBL_ENTRY)&_ZN7S1318C33v84Ev,
  (VTBL_ENTRY)&_ZN7S1318C33v85Ev,
  (VTBL_ENTRY)&_ZN7S1318C33v86Ev,
  (VTBL_ENTRY)&_ZN7S1318C33v87Ev,
  (VTBL_ENTRY)&_ZN7S1318C33v88Ev,
  (VTBL_ENTRY)&_ZN7S1318C33v89Ev,
  (VTBL_ENTRY)&_ZN7S1318C33v90Ev,
  (VTBL_ENTRY)&_ZN7S1318C33v91Ev,
  (VTBL_ENTRY)&_ZN7S1318C33v92Ev,
  (VTBL_ENTRY)&_ZN7S1318C33v93Ev,
  (VTBL_ENTRY)&_ZN7S1318C33v94Ev,
  (VTBL_ENTRY)&_ZN7S1318C33v95Ev,
  (VTBL_ENTRY)&_ZN7S1318C33v96Ev,
  (VTBL_ENTRY)&_ZN7S1318C33v97Ev,
  (VTBL_ENTRY)&_ZN7S1318C33v98Ev,
  (VTBL_ENTRY)&_ZN7S1318C23v99Ev,
  (VTBL_ENTRY)&_ZN7S1318C24v100Ev,
  (VTBL_ENTRY)&_ZN7S1318C24v101Ev,
  (VTBL_ENTRY)&_ZN7S1318C24v102Ev,
  (VTBL_ENTRY)&_ZN7S1318C24v103Ev,
  (VTBL_ENTRY)&_ZN7S1318C24v104Ev,
  (VTBL_ENTRY)&_ZN7S1318C24v105Ev,
  (VTBL_ENTRY)&_ZN7S1318C24v106Ev,
  (VTBL_ENTRY)&_ZN7S1318C24v107Ev,
};
extern VTBL_ENTRY _ZTI7S1318C2[];
extern  VTBL_ENTRY _ZTV7S1318C2[];
Class_Descriptor cd_S1318C2 = {  "S1318C2", // class name
  bases_S1318C2, 2,
  &(vtc_S1318C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(104,64), // object size
  NSPAIRA(_ZTI7S1318C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1318C2),97, //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  S1318C1  : S1318C2 {
  int s1318c1f0[7];
  unsigned int s1318c1f1:1;
  unsigned int s1318c1f2:1;
  unsigned int s1318c1f3:1;
  unsigned int s1318c1f4:1;
  virtual  ~S1318C1(); // _ZN7S1318C1D1Ev
  virtual void  v1(); // _ZN7S1318C12v1Ev
  virtual void  v2(); // _ZN7S1318C12v2Ev
  virtual void  v3(); // _ZN7S1318C12v3Ev
  virtual void  v4(); // _ZN7S1318C12v4Ev
  virtual void  v5(); // _ZN7S1318C12v5Ev
  virtual void  v6(); // _ZN7S1318C12v6Ev
  virtual void  v7(); // _ZN7S1318C12v7Ev
  virtual void  v8(); // _ZN7S1318C12v8Ev
  virtual void  v9(); // _ZN7S1318C12v9Ev
  virtual void  v10(); // _ZN7S1318C13v10Ev
  virtual void  v11(); // _ZN7S1318C13v11Ev
  virtual void  v12(); // _ZN7S1318C13v12Ev
  virtual void  v13(); // _ZN7S1318C13v13Ev
  virtual void  v14(); // _ZN7S1318C13v14Ev
  S1318C1(); // tgen
};
//SIG(1 S1318C1) C1{ BC2{ BC3{ BC4{ 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 FC5{ m Fi[2]} Fp[2]} vd v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 v91 v92 v93 v94 v95 v96 v97 v98 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 FC6{ m}} vd v99 v100 v101 v102 v103 v104 v105 v106 v107} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 Fi[7] Fi:1 Fi:1 Fi:1 Fi:1}


 S1318C1 ::~S1318C1(){ note_dtor("S1318C1", this);}
void  S1318C1 ::v1(){vfunc_called(this, "_ZN7S1318C12v1Ev");}
void  S1318C1 ::v2(){vfunc_called(this, "_ZN7S1318C12v2Ev");}
void  S1318C1 ::v3(){vfunc_called(this, "_ZN7S1318C12v3Ev");}
void  S1318C1 ::v4(){vfunc_called(this, "_ZN7S1318C12v4Ev");}
void  S1318C1 ::v5(){vfunc_called(this, "_ZN7S1318C12v5Ev");}
void  S1318C1 ::v6(){vfunc_called(this, "_ZN7S1318C12v6Ev");}
void  S1318C1 ::v7(){vfunc_called(this, "_ZN7S1318C12v7Ev");}
void  S1318C1 ::v8(){vfunc_called(this, "_ZN7S1318C12v8Ev");}
void  S1318C1 ::v9(){vfunc_called(this, "_ZN7S1318C12v9Ev");}
void  S1318C1 ::v10(){vfunc_called(this, "_ZN7S1318C13v10Ev");}
void  S1318C1 ::v11(){vfunc_called(this, "_ZN7S1318C13v11Ev");}
void  S1318C1 ::v12(){vfunc_called(this, "_ZN7S1318C13v12Ev");}
void  S1318C1 ::v13(){vfunc_called(this, "_ZN7S1318C13v13Ev");}
void  S1318C1 ::v14(){vfunc_called(this, "_ZN7S1318C13v14Ev");}
S1318C1 ::S1318C1(){ note_ctor("S1318C1", this);} // tgen

static void Test_S1318C1()
{
  extern Class_Descriptor cd_S1318C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(18,25)];
    init_test(&cd_S1318C1, buf);
    S1318C1 *dp, &lv = *(dp=new (buf) S1318C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(136,96), "sizeof(S1318C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1318C1)");
    check_base_class_offset(lv, (S1318C4*)(S1318C3*)(S1318C2*), 0, "S1318C1");
    check_base_class_offset(lv, (S1318C3*)(S1318C2*), 0, "S1318C1");
    check_base_class_offset(lv, (S1318C2*), 0, "S1318C1");
    check_field_offset(lv, s1318c1f0, ABISELECT(100,64), "S1318C1.s1318c1f0");
    set_bf_and_test(lv, s1318c1f1, ABISELECT(128,92), 0, 1, 1, "S1318C1");
    set_bf_and_test(lv, s1318c1f2, ABISELECT(128,92), 1, 1, 1, "S1318C1");
    set_bf_and_test(lv, s1318c1f3, ABISELECT(128,92), 2, 1, 1, "S1318C1");
    set_bf_and_test(lv, s1318c1f4, ABISELECT(128,92), 3, 1, 1, "S1318C1");
    test_class_info(&lv, &cd_S1318C1);
    dp->~S1318C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1318C1(Test_S1318C1, "S1318C1", ABISELECT(136,96));

#else // __cplusplus

extern void _ZN7S1318C1C1Ev();
extern void _ZN7S1318C1D1Ev();
Name_Map name_map_S1318C1[] = {
  NSPAIR(_ZN7S1318C1C1Ev),
  NSPAIR(_ZN7S1318C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1318C4;
extern VTBL_ENTRY _ZTI7S1318C4[];
extern  VTBL_ENTRY _ZTV7S1318C4[];
extern Class_Descriptor cd_S1318C3;
extern VTBL_ENTRY _ZTI7S1318C3[];
extern  VTBL_ENTRY _ZTV7S1318C3[];
extern Class_Descriptor cd_S1318C2;
extern VTBL_ENTRY _ZTI7S1318C2[];
extern  VTBL_ENTRY _ZTV7S1318C2[];
static Base_Class bases_S1318C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1318C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S1318C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S1318C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S1318C1[];
extern void _ZN7S1318C1D1Ev();
extern void _ZN7S1318C1D0Ev();
extern void _ZN7S1318C43v15Ev();
extern void _ZN7S1318C43v16Ev();
extern void _ZN7S1318C43v17Ev();
extern void _ZN7S1318C43v18Ev();
extern void _ZN7S1318C43v19Ev();
extern void _ZN7S1318C43v20Ev();
extern void _ZN7S1318C43v21Ev();
extern void _ZN7S1318C43v22Ev();
extern void _ZN7S1318C43v23Ev();
extern void _ZN7S1318C43v24Ev();
extern void _ZN7S1318C43v25Ev();
extern void _ZN7S1318C43v26Ev();
extern void _ZN7S1318C43v27Ev();
extern void _ZN7S1318C43v28Ev();
extern void _ZN7S1318C43v29Ev();
extern void _ZN7S1318C43v30Ev();
extern void _ZN7S1318C43v31Ev();
extern void _ZN7S1318C43v32Ev();
extern void _ZN7S1318C43v33Ev();
extern void _ZN7S1318C43v34Ev();
extern void _ZN7S1318C43v35Ev();
extern void _ZN7S1318C43v36Ev();
extern void _ZN7S1318C43v37Ev();
extern void _ZN7S1318C43v38Ev();
extern void _ZN7S1318C43v39Ev();
extern void _ZN7S1318C43v40Ev();
extern void _ZN7S1318C43v41Ev();
extern void _ZN7S1318C43v42Ev();
extern void _ZN7S1318C43v43Ev();
extern void _ZN7S1318C43v44Ev();
extern void _ZN7S1318C43v45Ev();
extern void _ZN7S1318C43v46Ev();
extern void _ZN7S1318C43v47Ev();
extern void _ZN7S1318C43v48Ev();
extern void _ZN7S1318C43v49Ev();
extern void _ZN7S1318C43v50Ev();
extern void _ZN7S1318C43v51Ev();
extern void _ZN7S1318C43v52Ev();
extern void _ZN7S1318C43v53Ev();
extern void _ZN7S1318C43v54Ev();
extern void _ZN7S1318C43v55Ev();
extern void _ZN7S1318C43v56Ev();
extern void _ZN7S1318C43v57Ev();
extern void _ZN7S1318C43v58Ev();
extern void _ZN7S1318C43v59Ev();
extern void _ZN7S1318C43v60Ev();
extern void _ZN7S1318C43v61Ev();
extern void _ZN7S1318C43v62Ev();
extern void _ZN7S1318C43v63Ev();
extern void _ZN7S1318C43v64Ev();
extern void _ZN7S1318C43v65Ev();
extern void _ZN7S1318C43v66Ev();
extern void _ZN7S1318C43v67Ev();
extern void _ZN7S1318C43v68Ev();
extern void _ZN7S1318C43v69Ev();
extern void _ZN7S1318C43v70Ev();
extern void _ZN7S1318C43v71Ev();
extern void _ZN7S1318C43v72Ev();
extern void _ZN7S1318C43v73Ev();
extern void _ZN7S1318C43v74Ev();
extern void _ZN7S1318C43v75Ev();
extern void _ZN7S1318C43v76Ev();
extern void _ZN7S1318C43v77Ev();
extern void _ZN7S1318C43v78Ev();
extern void _ZN7S1318C33v79Ev();
extern void _ZN7S1318C33v80Ev();
extern void _ZN7S1318C33v81Ev();
extern void _ZN7S1318C33v82Ev();
extern void _ZN7S1318C33v83Ev();
extern void _ZN7S1318C33v84Ev();
extern void _ZN7S1318C33v85Ev();
extern void _ZN7S1318C33v86Ev();
extern void _ZN7S1318C33v87Ev();
extern void _ZN7S1318C33v88Ev();
extern void _ZN7S1318C33v89Ev();
extern void _ZN7S1318C33v90Ev();
extern void _ZN7S1318C33v91Ev();
extern void _ZN7S1318C33v92Ev();
extern void _ZN7S1318C33v93Ev();
extern void _ZN7S1318C33v94Ev();
extern void _ZN7S1318C33v95Ev();
extern void _ZN7S1318C33v96Ev();
extern void _ZN7S1318C33v97Ev();
extern void _ZN7S1318C33v98Ev();
extern void _ZN7S1318C23v99Ev();
extern void _ZN7S1318C24v100Ev();
extern void _ZN7S1318C24v101Ev();
extern void _ZN7S1318C24v102Ev();
extern void _ZN7S1318C24v103Ev();
extern void _ZN7S1318C24v104Ev();
extern void _ZN7S1318C24v105Ev();
extern void _ZN7S1318C24v106Ev();
extern void _ZN7S1318C24v107Ev();
extern void _ZN7S1318C12v1Ev();
extern void _ZN7S1318C12v2Ev();
extern void _ZN7S1318C12v3Ev();
extern void _ZN7S1318C12v4Ev();
extern void _ZN7S1318C12v5Ev();
extern void _ZN7S1318C12v6Ev();
extern void _ZN7S1318C12v7Ev();
extern void _ZN7S1318C12v8Ev();
extern void _ZN7S1318C12v9Ev();
extern void _ZN7S1318C13v10Ev();
extern void _ZN7S1318C13v11Ev();
extern void _ZN7S1318C13v12Ev();
extern void _ZN7S1318C13v13Ev();
extern void _ZN7S1318C13v14Ev();
static  VTBL_ENTRY vtc_S1318C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1318C1[0]),
  (VTBL_ENTRY)&_ZN7S1318C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1318C1D0Ev,
  (VTBL_ENTRY)&_ZN7S1318C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1318C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1318C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1318C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1318C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1318C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1318C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1318C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1318C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1318C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1318C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1318C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1318C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1318C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1318C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1318C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1318C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1318C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1318C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1318C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1318C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1318C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1318C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1318C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1318C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1318C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1318C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1318C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1318C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1318C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1318C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1318C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1318C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1318C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1318C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1318C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1318C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1318C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1318C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1318C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1318C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1318C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1318C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1318C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1318C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1318C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1318C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1318C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1318C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1318C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1318C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1318C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1318C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1318C43v68Ev,
  (VTBL_ENTRY)&_ZN7S1318C43v69Ev,
  (VTBL_ENTRY)&_ZN7S1318C43v70Ev,
  (VTBL_ENTRY)&_ZN7S1318C43v71Ev,
  (VTBL_ENTRY)&_ZN7S1318C43v72Ev,
  (VTBL_ENTRY)&_ZN7S1318C43v73Ev,
  (VTBL_ENTRY)&_ZN7S1318C43v74Ev,
  (VTBL_ENTRY)&_ZN7S1318C43v75Ev,
  (VTBL_ENTRY)&_ZN7S1318C43v76Ev,
  (VTBL_ENTRY)&_ZN7S1318C43v77Ev,
  (VTBL_ENTRY)&_ZN7S1318C43v78Ev,
  (VTBL_ENTRY)&_ZN7S1318C33v79Ev,
  (VTBL_ENTRY)&_ZN7S1318C33v80Ev,
  (VTBL_ENTRY)&_ZN7S1318C33v81Ev,
  (VTBL_ENTRY)&_ZN7S1318C33v82Ev,
  (VTBL_ENTRY)&_ZN7S1318C33v83Ev,
  (VTBL_ENTRY)&_ZN7S1318C33v84Ev,
  (VTBL_ENTRY)&_ZN7S1318C33v85Ev,
  (VTBL_ENTRY)&_ZN7S1318C33v86Ev,
  (VTBL_ENTRY)&_ZN7S1318C33v87Ev,
  (VTBL_ENTRY)&_ZN7S1318C33v88Ev,
  (VTBL_ENTRY)&_ZN7S1318C33v89Ev,
  (VTBL_ENTRY)&_ZN7S1318C33v90Ev,
  (VTBL_ENTRY)&_ZN7S1318C33v91Ev,
  (VTBL_ENTRY)&_ZN7S1318C33v92Ev,
  (VTBL_ENTRY)&_ZN7S1318C33v93Ev,
  (VTBL_ENTRY)&_ZN7S1318C33v94Ev,
  (VTBL_ENTRY)&_ZN7S1318C33v95Ev,
  (VTBL_ENTRY)&_ZN7S1318C33v96Ev,
  (VTBL_ENTRY)&_ZN7S1318C33v97Ev,
  (VTBL_ENTRY)&_ZN7S1318C33v98Ev,
  (VTBL_ENTRY)&_ZN7S1318C23v99Ev,
  (VTBL_ENTRY)&_ZN7S1318C24v100Ev,
  (VTBL_ENTRY)&_ZN7S1318C24v101Ev,
  (VTBL_ENTRY)&_ZN7S1318C24v102Ev,
  (VTBL_ENTRY)&_ZN7S1318C24v103Ev,
  (VTBL_ENTRY)&_ZN7S1318C24v104Ev,
  (VTBL_ENTRY)&_ZN7S1318C24v105Ev,
  (VTBL_ENTRY)&_ZN7S1318C24v106Ev,
  (VTBL_ENTRY)&_ZN7S1318C24v107Ev,
  (VTBL_ENTRY)&_ZN7S1318C12v1Ev,
  (VTBL_ENTRY)&_ZN7S1318C12v2Ev,
  (VTBL_ENTRY)&_ZN7S1318C12v3Ev,
  (VTBL_ENTRY)&_ZN7S1318C12v4Ev,
  (VTBL_ENTRY)&_ZN7S1318C12v5Ev,
  (VTBL_ENTRY)&_ZN7S1318C12v6Ev,
  (VTBL_ENTRY)&_ZN7S1318C12v7Ev,
  (VTBL_ENTRY)&_ZN7S1318C12v8Ev,
  (VTBL_ENTRY)&_ZN7S1318C12v9Ev,
  (VTBL_ENTRY)&_ZN7S1318C13v10Ev,
  (VTBL_ENTRY)&_ZN7S1318C13v11Ev,
  (VTBL_ENTRY)&_ZN7S1318C13v12Ev,
  (VTBL_ENTRY)&_ZN7S1318C13v13Ev,
  (VTBL_ENTRY)&_ZN7S1318C13v14Ev,
};
extern VTBL_ENTRY _ZTI7S1318C1[];
extern  VTBL_ENTRY _ZTV7S1318C1[];
Class_Descriptor cd_S1318C1 = {  "S1318C1", // class name
  bases_S1318C1, 3,
  &(vtc_S1318C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(136,96), // object size
  NSPAIRA(_ZTI7S1318C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1318C1),111, //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  S1523C4  {
  int s1523c4f0;
  __tsi64 s1523c4f1;
  void *s1523c4f2[4];
  int s1523c4f3[2];
  void *s1523c4f4;
  ::S674C6_nt s1523c4f5;
  void *s1523c4f6[2];
  virtual  ~S1523C4(); // _ZN7S1523C4D1Ev
  virtual void  v6(); // _ZN7S1523C42v6Ev
  virtual void  v7(); // _ZN7S1523C42v7Ev
  virtual void  v8(); // _ZN7S1523C42v8Ev
  virtual void  v9(); // _ZN7S1523C42v9Ev
  virtual void  v10(); // _ZN7S1523C43v10Ev
  virtual void  v11(); // _ZN7S1523C43v11Ev
  virtual void  v12(); // _ZN7S1523C43v12Ev
  virtual void  v13(); // _ZN7S1523C43v13Ev
  virtual void  v14(); // _ZN7S1523C43v14Ev
  virtual void  v15(); // _ZN7S1523C43v15Ev
  virtual void  v16(); // _ZN7S1523C43v16Ev
  virtual void  v17(); // _ZN7S1523C43v17Ev
  virtual void  v18(); // _ZN7S1523C43v18Ev
  virtual void  v19(); // _ZN7S1523C43v19Ev
  virtual void  v20(); // _ZN7S1523C43v20Ev
  virtual void  v21(); // _ZN7S1523C43v21Ev
  virtual void  v22(); // _ZN7S1523C43v22Ev
  virtual void  v23(); // _ZN7S1523C43v23Ev
  virtual void  v24(); // _ZN7S1523C43v24Ev
  virtual void  v25(); // _ZN7S1523C43v25Ev
  virtual void  v26(); // _ZN7S1523C43v26Ev
  virtual void  v27(); // _ZN7S1523C43v27Ev
  virtual void  v28(); // _ZN7S1523C43v28Ev
  virtual void  v29(); // _ZN7S1523C43v29Ev
  virtual void  v30(); // _ZN7S1523C43v30Ev
  virtual void  v31(); // _ZN7S1523C43v31Ev
  virtual void  v32(); // _ZN7S1523C43v32Ev
  virtual void  v33(); // _ZN7S1523C43v33Ev
  virtual void  v34(); // _ZN7S1523C43v34Ev
  virtual void  v35(); // _ZN7S1523C43v35Ev
  virtual void  v36(); // _ZN7S1523C43v36Ev
  virtual void  v37(); // _ZN7S1523C43v37Ev
  virtual void  v38(); // _ZN7S1523C43v38Ev
  virtual void  v39(); // _ZN7S1523C43v39Ev
  virtual void  v40(); // _ZN7S1523C43v40Ev
  virtual void  v41(); // _ZN7S1523C43v41Ev
  virtual void  v42(); // _ZN7S1523C43v42Ev
  virtual void  v43(); // _ZN7S1523C43v43Ev
  virtual void  v44(); // _ZN7S1523C43v44Ev
  virtual void  v45(); // _ZN7S1523C43v45Ev
  virtual void  v46(); // _ZN7S1523C43v46Ev
  virtual void  v47(); // _ZN7S1523C43v47Ev
  virtual void  v48(); // _ZN7S1523C43v48Ev
  virtual void  v49(); // _ZN7S1523C43v49Ev
  virtual void  v50(); // _ZN7S1523C43v50Ev
  virtual void  v51(); // _ZN7S1523C43v51Ev
  virtual void  v52(); // _ZN7S1523C43v52Ev
  virtual void  v53(); // _ZN7S1523C43v53Ev
  virtual void  v54(); // _ZN7S1523C43v54Ev
  virtual void  v55(); // _ZN7S1523C43v55Ev
  virtual void  v56(); // _ZN7S1523C43v56Ev
  virtual void  v57(); // _ZN7S1523C43v57Ev
  virtual void  v58(); // _ZN7S1523C43v58Ev
  virtual void  v59(); // _ZN7S1523C43v59Ev
  virtual void  v60(); // _ZN7S1523C43v60Ev
  virtual void  v61(); // _ZN7S1523C43v61Ev
  virtual void  v62(); // _ZN7S1523C43v62Ev
  virtual void  v63(); // _ZN7S1523C43v63Ev
  virtual void  v64(); // _ZN7S1523C43v64Ev
  virtual void  v65(); // _ZN7S1523C43v65Ev
  virtual void  v66(); // _ZN7S1523C43v66Ev
  virtual void  v67(); // _ZN7S1523C43v67Ev
  virtual void  v68(); // _ZN7S1523C43v68Ev
  virtual void  v69(); // _ZN7S1523C43v69Ev
  S1523C4(); // tgen
};
//SIG(-1 S1523C4) 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]}


 S1523C4 ::~S1523C4(){ note_dtor("S1523C4", this);}
void  S1523C4 ::v6(){vfunc_called(this, "_ZN7S1523C42v6Ev");}
void  S1523C4 ::v7(){vfunc_called(this, "_ZN7S1523C42v7Ev");}
void  S1523C4 ::v8(){vfunc_called(this, "_ZN7S1523C42v8Ev");}
void  S1523C4 ::v9(){vfunc_called(this, "_ZN7S1523C42v9Ev");}
void  S1523C4 ::v10(){vfunc_called(this, "_ZN7S1523C43v10Ev");}
void  S1523C4 ::v11(){vfunc_called(this, "_ZN7S1523C43v11Ev");}
void  S1523C4 ::v12(){vfunc_called(this, "_ZN7S1523C43v12Ev");}
void  S1523C4 ::v13(){vfunc_called(this, "_ZN7S1523C43v13Ev");}
void  S1523C4 ::v14(){vfunc_called(this, "_ZN7S1523C43v14Ev");}
void  S1523C4 ::v15(){vfunc_called(this, "_ZN7S1523C43v15Ev");}
void  S1523C4 ::v16(){vfunc_called(this, "_ZN7S1523C43v16Ev");}
void  S1523C4 ::v17(){vfunc_called(this, "_ZN7S1523C43v17Ev");}
void  S1523C4 ::v18(){vfunc_called(this, "_ZN7S1523C43v18Ev");}
void  S1523C4 ::v19(){vfunc_called(this, "_ZN7S1523C43v19Ev");}
void  S1523C4 ::v20(){vfunc_called(this, "_ZN7S1523C43v20Ev");}
void  S1523C4 ::v21(){vfunc_called(this, "_ZN7S1523C43v21Ev");}
void  S1523C4 ::v22(){vfunc_called(this, "_ZN7S1523C43v22Ev");}
void  S1523C4 ::v23(){vfunc_called(this, "_ZN7S1523C43v23Ev");}
void  S1523C4 ::v24(){vfunc_called(this, "_ZN7S1523C43v24Ev");}
void  S1523C4 ::v25(){vfunc_called(this, "_ZN7S1523C43v25Ev");}
void  S1523C4 ::v26(){vfunc_called(this, "_ZN7S1523C43v26Ev");}
void  S1523C4 ::v27(){vfunc_called(this, "_ZN7S1523C43v27Ev");}
void  S1523C4 ::v28(){vfunc_called(this, "_ZN7S1523C43v28Ev");}
void  S1523C4 ::v29(){vfunc_called(this, "_ZN7S1523C43v29Ev");}
void  S1523C4 ::v30(){vfunc_called(this, "_ZN7S1523C43v30Ev");}
void  S1523C4 ::v31(){vfunc_called(this, "_ZN7S1523C43v31Ev");}
void  S1523C4 ::v32(){vfunc_called(this, "_ZN7S1523C43v32Ev");}
void  S1523C4 ::v33(){vfunc_called(this, "_ZN7S1523C43v33Ev");}
void  S1523C4 ::v34(){vfunc_called(this, "_ZN7S1523C43v34Ev");}
void  S1523C4 ::v35(){vfunc_called(this, "_ZN7S1523C43v35Ev");}
void  S1523C4 ::v36(){vfunc_called(this, "_ZN7S1523C43v36Ev");}
void  S1523C4 ::v37(){vfunc_called(this, "_ZN7S1523C43v37Ev");}
void  S1523C4 ::v38(){vfunc_called(this, "_ZN7S1523C43v38Ev");}
void  S1523C4 ::v39(){vfunc_called(this, "_ZN7S1523C43v39Ev");}
void  S1523C4 ::v40(){vfunc_called(this, "_ZN7S1523C43v40Ev");}
void  S1523C4 ::v41(){vfunc_called(this, "_ZN7S1523C43v41Ev");}
void  S1523C4 ::v42(){vfunc_called(this, "_ZN7S1523C43v42Ev");}
void  S1523C4 ::v43(){vfunc_called(this, "_ZN7S1523C43v43Ev");}
void  S1523C4 ::v44(){vfunc_called(this, "_ZN7S1523C43v44Ev");}
void  S1523C4 ::v45(){vfunc_called(this, "_ZN7S1523C43v45Ev");}
void  S1523C4 ::v46(){vfunc_called(this, "_ZN7S1523C43v46Ev");}
void  S1523C4 ::v47(){vfunc_called(this, "_ZN7S1523C43v47Ev");}
void  S1523C4 ::v48(){vfunc_called(this, "_ZN7S1523C43v48Ev");}
void  S1523C4 ::v49(){vfunc_called(this, "_ZN7S1523C43v49Ev");}
void  S1523C4 ::v50(){vfunc_called(this, "_ZN7S1523C43v50Ev");}
void  S1523C4 ::v51(){vfunc_called(this, "_ZN7S1523C43v51Ev");}
void  S1523C4 ::v52(){vfunc_called(this, "_ZN7S1523C43v52Ev");}
void  S1523C4 ::v53(){vfunc_called(this, "_ZN7S1523C43v53Ev");}
void  S1523C4 ::v54(){vfunc_called(this, "_ZN7S1523C43v54Ev");}
void  S1523C4 ::v55(){vfunc_called(this, "_ZN7S1523C43v55Ev");}
void  S1523C4 ::v56(){vfunc_called(this, "_ZN7S1523C43v56Ev");}
void  S1523C4 ::v57(){vfunc_called(this, "_ZN7S1523C43v57Ev");}
void  S1523C4 ::v58(){vfunc_called(this, "_ZN7S1523C43v58Ev");}
void  S1523C4 ::v59(){vfunc_called(this, "_ZN7S1523C43v59Ev");}
void  S1523C4 ::v60(){vfunc_called(this, "_ZN7S1523C43v60Ev");}
void  S1523C4 ::v61(){vfunc_called(this, "_ZN7S1523C43v61Ev");}
void  S1523C4 ::v62(){vfunc_called(this, "_ZN7S1523C43v62Ev");}
void  S1523C4 ::v63(){vfunc_called(this, "_ZN7S1523C43v63Ev");}
void  S1523C4 ::v64(){vfunc_called(this, "_ZN7S1523C43v64Ev");}
void  S1523C4 ::v65(){vfunc_called(this, "_ZN7S1523C43v65Ev");}
void  S1523C4 ::v66(){vfunc_called(this, "_ZN7S1523C43v66Ev");}
void  S1523C4 ::v67(){vfunc_called(this, "_ZN7S1523C43v67Ev");}
void  S1523C4 ::v68(){vfunc_called(this, "_ZN7S1523C43v68Ev");}
void  S1523C4 ::v69(){vfunc_called(this, "_ZN7S1523C43v69Ev");}
S1523C4 ::S1523C4(){ note_ctor("S1523C4", this);} // tgen

static void Test_S1523C4()
{
  extern Class_Descriptor cd_S1523C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S1523C4, buf);
    S1523C4 *dp, &lv = *(dp=new (buf) S1523C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S1523C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1523C4)");
    check_field_offset(lv, s1523c4f0, ABISELECT(8,4), "S1523C4.s1523c4f0");
    check_field_offset(lv, s1523c4f1, ABISELECT(16,8), "S1523C4.s1523c4f1");
    check_field_offset(lv, s1523c4f2, ABISELECT(24,16), "S1523C4.s1523c4f2");
    check_field_offset(lv, s1523c4f3, ABISELECT(56,32), "S1523C4.s1523c4f3");
    check_field_offset(lv, s1523c4f4, ABISELECT(64,40), "S1523C4.s1523c4f4");
    check_field_offset(lv, s1523c4f5, ABISELECT(72,44), "S1523C4.s1523c4f5");
    check_field_offset(lv, s1523c4f6, ABISELECT(80,52), "S1523C4.s1523c4f6");
    test_class_info(&lv, &cd_S1523C4);
    dp->~S1523C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1523C4(Test_S1523C4, "S1523C4", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN7S1523C4C1Ev();
extern void _ZN7S1523C4D1Ev();
Name_Map name_map_S1523C4[] = {
  NSPAIR(_ZN7S1523C4C1Ev),
  NSPAIR(_ZN7S1523C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S1523C4[];
extern void _ZN7S1523C4D1Ev();
extern void _ZN7S1523C4D0Ev();
extern void _ZN7S1523C42v6Ev();
extern void _ZN7S1523C42v7Ev();
extern void _ZN7S1523C42v8Ev();
extern void _ZN7S1523C42v9Ev();
extern void _ZN7S1523C43v10Ev();
extern void _ZN7S1523C43v11Ev();
extern void _ZN7S1523C43v12Ev();
extern void _ZN7S1523C43v13Ev();
extern void _ZN7S1523C43v14Ev();
extern void _ZN7S1523C43v15Ev();
extern void _ZN7S1523C43v16Ev();
extern void _ZN7S1523C43v17Ev();
extern void _ZN7S1523C43v18Ev();
extern void _ZN7S1523C43v19Ev();
extern void _ZN7S1523C43v20Ev();
extern void _ZN7S1523C43v21Ev();
extern void _ZN7S1523C43v22Ev();
extern void _ZN7S1523C43v23Ev();
extern void _ZN7S1523C43v24Ev();
extern void _ZN7S1523C43v25Ev();
extern void _ZN7S1523C43v26Ev();
extern void _ZN7S1523C43v27Ev();
extern void _ZN7S1523C43v28Ev();
extern void _ZN7S1523C43v29Ev();
extern void _ZN7S1523C43v30Ev();
extern void _ZN7S1523C43v31Ev();
extern void _ZN7S1523C43v32Ev();
extern void _ZN7S1523C43v33Ev();
extern void _ZN7S1523C43v34Ev();
extern void _ZN7S1523C43v35Ev();
extern void _ZN7S1523C43v36Ev();
extern void _ZN7S1523C43v37Ev();
extern void _ZN7S1523C43v38Ev();
extern void _ZN7S1523C43v39Ev();
extern void _ZN7S1523C43v40Ev();
extern void _ZN7S1523C43v41Ev();
extern void _ZN7S1523C43v42Ev();
extern void _ZN7S1523C43v43Ev();
extern void _ZN7S1523C43v44Ev();
extern void _ZN7S1523C43v45Ev();
extern void _ZN7S1523C43v46Ev();
extern void _ZN7S1523C43v47Ev();
extern void _ZN7S1523C43v48Ev();
extern void _ZN7S1523C43v49Ev();
extern void _ZN7S1523C43v50Ev();
extern void _ZN7S1523C43v51Ev();
extern void _ZN7S1523C43v52Ev();
extern void _ZN7S1523C43v53Ev();
extern void _ZN7S1523C43v54Ev();
extern void _ZN7S1523C43v55Ev();
extern void _ZN7S1523C43v56Ev();
extern void _ZN7S1523C43v57Ev();
extern void _ZN7S1523C43v58Ev();
extern void _ZN7S1523C43v59Ev();
extern void _ZN7S1523C43v60Ev();
extern void _ZN7S1523C43v61Ev();
extern void _ZN7S1523C43v62Ev();
extern void _ZN7S1523C43v63Ev();
extern void _ZN7S1523C43v64Ev();
extern void _ZN7S1523C43v65Ev();
extern void _ZN7S1523C43v66Ev();
extern void _ZN7S1523C43v67Ev();
extern void _ZN7S1523C43v68Ev();
extern void _ZN7S1523C43v69Ev();
static  VTBL_ENTRY vtc_S1523C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1523C4[0]),
  (VTBL_ENTRY)&_ZN7S1523C4D1Ev,
  (VTBL_ENTRY)&_ZN7S1523C4D0Ev,
  (VTBL_ENTRY)&_ZN7S1523C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1523C42v7Ev,
  (VTBL_ENTRY)&_ZN7S1523C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1523C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1523C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1523C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1523C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1523C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1523C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1523C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1523C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1523C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1523C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1523C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1523C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1523C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1523C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1523C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1523C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1523C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1523C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1523C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1523C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1523C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1523C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1523C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1523C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1523C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1523C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1523C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1523C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1523C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1523C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1523C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1523C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1523C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1523C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1523C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1523C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1523C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1523C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1523C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1523C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1523C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1523C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1523C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1523C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1523C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1523C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1523C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1523C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1523C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1523C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1523C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1523C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1523C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1523C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1523C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1523C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1523C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1523C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1523C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1523C43v68Ev,
  (VTBL_ENTRY)&_ZN7S1523C43v69Ev,
};
extern VTBL_ENTRY _ZTI7S1523C4[];
extern  VTBL_ENTRY _ZTV7S1523C4[];
Class_Descriptor cd_S1523C4 = {  "S1523C4", // class name
  0,0,//no base classes
  &(vtc_S1523C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI7S1523C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S1523C4),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  S1523C3  : S1523C4 {
  unsigned int s1523c3f0:1;
  unsigned int s1523c3f1:1;
  unsigned int s1523c3f2:1;
  unsigned int s1523c3f3:1;
  unsigned int s1523c3f4:1;
  unsigned int s1523c3f5:1;
  unsigned int s1523c3f6:1;
  ::S3625C32 s1523c3f7;
  virtual  ~S1523C3(); // _ZN7S1523C3D1Ev
  virtual void  v70(); // _ZN7S1523C33v70Ev
  virtual void  v71(); // _ZN7S1523C33v71Ev
  virtual void  v72(); // _ZN7S1523C33v72Ev
  virtual void  v73(); // _ZN7S1523C33v73Ev
  virtual void  v74(); // _ZN7S1523C33v74Ev
  virtual void  v75(); // _ZN7S1523C33v75Ev
  virtual void  v76(); // _ZN7S1523C33v76Ev
  virtual void  v77(); // _ZN7S1523C33v77Ev
  virtual void  v78(); // _ZN7S1523C33v78Ev
  virtual void  v79(); // _ZN7S1523C33v79Ev
  virtual void  v80(); // _ZN7S1523C33v80Ev
  virtual void  v81(); // _ZN7S1523C33v81Ev
  virtual void  v82(); // _ZN7S1523C33v82Ev
  virtual void  v83(); // _ZN7S1523C33v83Ev
  virtual void  v84(); // _ZN7S1523C33v84Ev
  virtual void  v85(); // _ZN7S1523C33v85Ev
  virtual void  v86(); // _ZN7S1523C33v86Ev
  virtual void  v87(); // _ZN7S1523C33v87Ev
  virtual void  v88(); // _ZN7S1523C33v88Ev
  virtual void  v89(); // _ZN7S1523C33v89Ev
  S1523C3(); // tgen
};
//SIG(-1 S1523C3) C1{ BC2{ 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 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 Fi FL Fp[4] Fi[2] Fp FC3{ m Fi[2]} Fp[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 FC4{ m}}


 S1523C3 ::~S1523C3(){ note_dtor("S1523C3", this);}
void  S1523C3 ::v70(){vfunc_called(this, "_ZN7S1523C33v70Ev");}
void  S1523C3 ::v71(){vfunc_called(this, "_ZN7S1523C33v71Ev");}
void  S1523C3 ::v72(){vfunc_called(this, "_ZN7S1523C33v72Ev");}
void  S1523C3 ::v73(){vfunc_called(this, "_ZN7S1523C33v73Ev");}
void  S1523C3 ::v74(){vfunc_called(this, "_ZN7S1523C33v74Ev");}
void  S1523C3 ::v75(){vfunc_called(this, "_ZN7S1523C33v75Ev");}
void  S1523C3 ::v76(){vfunc_called(this, "_ZN7S1523C33v76Ev");}
void  S1523C3 ::v77(){vfunc_called(this, "_ZN7S1523C33v77Ev");}
void  S1523C3 ::v78(){vfunc_called(this, "_ZN7S1523C33v78Ev");}
void  S1523C3 ::v79(){vfunc_called(this, "_ZN7S1523C33v79Ev");}
void  S1523C3 ::v80(){vfunc_called(this, "_ZN7S1523C33v80Ev");}
void  S1523C3 ::v81(){vfunc_called(this, "_ZN7S1523C33v81Ev");}
void  S1523C3 ::v82(){vfunc_called(this, "_ZN7S1523C33v82Ev");}
void  S1523C3 ::v83(){vfunc_called(this, "_ZN7S1523C33v83Ev");}
void  S1523C3 ::v84(){vfunc_called(this, "_ZN7S1523C33v84Ev");}
void  S1523C3 ::v85(){vfunc_called(this, "_ZN7S1523C33v85Ev");}
void  S1523C3 ::v86(){vfunc_called(this, "_ZN7S1523C33v86Ev");}
void  S1523C3 ::v87(){vfunc_called(this, "_ZN7S1523C33v87Ev");}
void  S1523C3 ::v88(){vfunc_called(this, "_ZN7S1523C33v88Ev");}
void  S1523C3 ::v89(){vfunc_called(this, "_ZN7S1523C33v89Ev");}
S1523C3 ::S1523C3(){ note_ctor("S1523C3", this);} // tgen

static void Test_S1523C3()
{
  extern Class_Descriptor cd_S1523C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(14,17)];
    init_test(&cd_S1523C3, buf);
    S1523C3 *dp, &lv = *(dp=new (buf) S1523C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(104,64), "sizeof(S1523C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1523C3)");
    check_base_class_offset(lv, (S1523C4*), 0, "S1523C3");
    set_bf_and_test(lv, s1523c3f0, ABISELECT(96,60), 0, 1, 1, "S1523C3");
    set_bf_and_test(lv, s1523c3f1, ABISELECT(96,60), 1, 1, 1, "S1523C3");
    set_bf_and_test(lv, s1523c3f2, ABISELECT(96,60), 2, 1, 1, "S1523C3");
    set_bf_and_test(lv, s1523c3f3, ABISELECT(96,60), 3, 1, 1, "S1523C3");
    set_bf_and_test(lv, s1523c3f4, ABISELECT(96,60), 4, 1, 1, "S1523C3");
    set_bf_and_test(lv, s1523c3f5, ABISELECT(96,60), 5, 1, 1, "S1523C3");
    set_bf_and_test(lv, s1523c3f6, ABISELECT(96,60), 6, 1, 1, "S1523C3");
    check_field_offset(lv, s1523c3f7, ABISELECT(97,61), "S1523C3.s1523c3f7");
    test_class_info(&lv, &cd_S1523C3);
    dp->~S1523C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1523C3(Test_S1523C3, "S1523C3", ABISELECT(104,64));

#else // __cplusplus

extern void _ZN7S1523C3C1Ev();
extern void _ZN7S1523C3D1Ev();
Name_Map name_map_S1523C3[] = {
  NSPAIR(_ZN7S1523C3C1Ev),
  NSPAIR(_ZN7S1523C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1523C4;
extern VTBL_ENTRY _ZTI7S1523C4[];
extern  VTBL_ENTRY _ZTV7S1523C4[];
static Base_Class bases_S1523C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1523C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI7S1523C3[];
extern void _ZN7S1523C3D1Ev();
extern void _ZN7S1523C3D0Ev();
extern void _ZN7S1523C42v6Ev();
extern void _ZN7S1523C42v7Ev();
extern void _ZN7S1523C42v8Ev();
extern void _ZN7S1523C42v9Ev();
extern void _ZN7S1523C43v10Ev();
extern void _ZN7S1523C43v11Ev();
extern void _ZN7S1523C43v12Ev();
extern void _ZN7S1523C43v13Ev();
extern void _ZN7S1523C43v14Ev();
extern void _ZN7S1523C43v15Ev();
extern void _ZN7S1523C43v16Ev();
extern void _ZN7S1523C43v17Ev();
extern void _ZN7S1523C43v18Ev();
extern void _ZN7S1523C43v19Ev();
extern void _ZN7S1523C43v20Ev();
extern void _ZN7S1523C43v21Ev();
extern void _ZN7S1523C43v22Ev();
extern void _ZN7S1523C43v23Ev();
extern void _ZN7S1523C43v24Ev();
extern void _ZN7S1523C43v25Ev();
extern void _ZN7S1523C43v26Ev();
extern void _ZN7S1523C43v27Ev();
extern void _ZN7S1523C43v28Ev();
extern void _ZN7S1523C43v29Ev();
extern void _ZN7S1523C43v30Ev();
extern void _ZN7S1523C43v31Ev();
extern void _ZN7S1523C43v32Ev();
extern void _ZN7S1523C43v33Ev();
extern void _ZN7S1523C43v34Ev();
extern void _ZN7S1523C43v35Ev();
extern void _ZN7S1523C43v36Ev();
extern void _ZN7S1523C43v37Ev();
extern void _ZN7S1523C43v38Ev();
extern void _ZN7S1523C43v39Ev();
extern void _ZN7S1523C43v40Ev();
extern void _ZN7S1523C43v41Ev();
extern void _ZN7S1523C43v42Ev();
extern void _ZN7S1523C43v43Ev();
extern void _ZN7S1523C43v44Ev();
extern void _ZN7S1523C43v45Ev();
extern void _ZN7S1523C43v46Ev();
extern void _ZN7S1523C43v47Ev();
extern void _ZN7S1523C43v48Ev();
extern void _ZN7S1523C43v49Ev();
extern void _ZN7S1523C43v50Ev();
extern void _ZN7S1523C43v51Ev();
extern void _ZN7S1523C43v52Ev();
extern void _ZN7S1523C43v53Ev();
extern void _ZN7S1523C43v54Ev();
extern void _ZN7S1523C43v55Ev();
extern void _ZN7S1523C43v56Ev();
extern void _ZN7S1523C43v57Ev();
extern void _ZN7S1523C43v58Ev();
extern void _ZN7S1523C43v59Ev();
extern void _ZN7S1523C43v60Ev();
extern void _ZN7S1523C43v61Ev();
extern void _ZN7S1523C43v62Ev();
extern void _ZN7S1523C43v63Ev();
extern void _ZN7S1523C43v64Ev();
extern void _ZN7S1523C43v65Ev();
extern void _ZN7S1523C43v66Ev();
extern void _ZN7S1523C43v67Ev();
extern void _ZN7S1523C43v68Ev();
extern void _ZN7S1523C43v69Ev();
extern void _ZN7S1523C33v70Ev();
extern void _ZN7S1523C33v71Ev();
extern void _ZN7S1523C33v72Ev();
extern void _ZN7S1523C33v73Ev();
extern void _ZN7S1523C33v74Ev();
extern void _ZN7S1523C33v75Ev();
extern void _ZN7S1523C33v76Ev();
extern void _ZN7S1523C33v77Ev();
extern void _ZN7S1523C33v78Ev();
extern void _ZN7S1523C33v79Ev();
extern void _ZN7S1523C33v80Ev();
extern void _ZN7S1523C33v81Ev();
extern void _ZN7S1523C33v82Ev();
extern void _ZN7S1523C33v83Ev();
extern void _ZN7S1523C33v84Ev();
extern void _ZN7S1523C33v85Ev();
extern void _ZN7S1523C33v86Ev();
extern void _ZN7S1523C33v87Ev();
extern void _ZN7S1523C33v88Ev();
extern void _ZN7S1523C33v89Ev();
static  VTBL_ENTRY vtc_S1523C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1523C3[0]),
  (VTBL_ENTRY)&_ZN7S1523C3D1Ev,
  (VTBL_ENTRY)&_ZN7S1523C3D0Ev,
  (VTBL_ENTRY)&_ZN7S1523C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1523C42v7Ev,
  (VTBL_ENTRY)&_ZN7S1523C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1523C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1523C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1523C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1523C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1523C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1523C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1523C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1523C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1523C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1523C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1523C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1523C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1523C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1523C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1523C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1523C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1523C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1523C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1523C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1523C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1523C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1523C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1523C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1523C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1523C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1523C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1523C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1523C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1523C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1523C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1523C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1523C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1523C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1523C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1523C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1523C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1523C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1523C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1523C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1523C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1523C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1523C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1523C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1523C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1523C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1523C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1523C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1523C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1523C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1523C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1523C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1523C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1523C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1523C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1523C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1523C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1523C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1523C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1523C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1523C43v68Ev,
  (VTBL_ENTRY)&_ZN7S1523C43v69Ev,
  (VTBL_ENTRY)&_ZN7S1523C33v70Ev,
  (VTBL_ENTRY)&_ZN7S1523C33v71Ev,
  (VTBL_ENTRY)&_ZN7S1523C33v72Ev,
  (VTBL_ENTRY)&_ZN7S1523C33v73Ev,
  (VTBL_ENTRY)&_ZN7S1523C33v74Ev,
  (VTBL_ENTRY)&_ZN7S1523C33v75Ev,
  (VTBL_ENTRY)&_ZN7S1523C33v76Ev,
  (VTBL_ENTRY)&_ZN7S1523C33v77Ev,
  (VTBL_ENTRY)&_ZN7S1523C33v78Ev,
  (VTBL_ENTRY)&_ZN7S1523C33v79Ev,
  (VTBL_ENTRY)&_ZN7S1523C33v80Ev,
  (VTBL_ENTRY)&_ZN7S1523C33v81Ev,
  (VTBL_ENTRY)&_ZN7S1523C33v82Ev,
  (VTBL_ENTRY)&_ZN7S1523C33v83Ev,
  (VTBL_ENTRY)&_ZN7S1523C33v84Ev,
  (VTBL_ENTRY)&_ZN7S1523C33v85Ev,
  (VTBL_ENTRY)&_ZN7S1523C33v86Ev,
  (VTBL_ENTRY)&_ZN7S1523C33v87Ev,
  (VTBL_ENTRY)&_ZN7S1523C33v88Ev,
  (VTBL_ENTRY)&_ZN7S1523C33v89Ev,
};
extern VTBL_ENTRY _ZTI7S1523C3[];
extern  VTBL_ENTRY _ZTV7S1523C3[];
Class_Descriptor cd_S1523C3 = {  "S1523C3", // class name
  bases_S1523C3, 1,
  &(vtc_S1523C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(104,64), // object size
  NSPAIRA(_ZTI7S1523C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1523C3),88, //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  S1523C2  : S1523C3 {
  virtual  ~S1523C2(); // _ZN7S1523C2D1Ev
  virtual void  v90(); // _ZN7S1523C23v90Ev
  virtual void  v91(); // _ZN7S1523C23v91Ev
  S1523C2(); // tgen
};
//SIG(-1 S1523C2) C1{ BC2{ BC3{ vd 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 Fi FL Fp[4] Fi[2] Fp FC4{ m Fi[2]} Fp[2]} vd v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 FC5{ m}} vd v1 v2}


 S1523C2 ::~S1523C2(){ note_dtor("S1523C2", this);}
void  S1523C2 ::v90(){vfunc_called(this, "_ZN7S1523C23v90Ev");}
void  S1523C2 ::v91(){vfunc_called(this, "_ZN7S1523C23v91Ev");}
S1523C2 ::S1523C2(){ note_ctor("S1523C2", this);} // tgen

static void Test_S1523C2()
{
  extern Class_Descriptor cd_S1523C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(14,17)];
    init_test(&cd_S1523C2, buf);
    S1523C2 *dp, &lv = *(dp=new (buf) S1523C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(104,64), "sizeof(S1523C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1523C2)");
    check_base_class_offset(lv, (S1523C4*)(S1523C3*), 0, "S1523C2");
    check_base_class_offset(lv, (S1523C3*), 0, "S1523C2");
    test_class_info(&lv, &cd_S1523C2);
    dp->~S1523C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1523C2(Test_S1523C2, "S1523C2", ABISELECT(104,64));

#else // __cplusplus

extern void _ZN7S1523C2C1Ev();
extern void _ZN7S1523C2D1Ev();
Name_Map name_map_S1523C2[] = {
  NSPAIR(_ZN7S1523C2C1Ev),
  NSPAIR(_ZN7S1523C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1523C4;
extern VTBL_ENTRY _ZTI7S1523C4[];
extern  VTBL_ENTRY _ZTV7S1523C4[];
extern Class_Descriptor cd_S1523C3;
extern VTBL_ENTRY _ZTI7S1523C3[];
extern  VTBL_ENTRY _ZTV7S1523C3[];
static Base_Class bases_S1523C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1523C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S1523C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S1523C2[];
extern void _ZN7S1523C2D1Ev();
extern void _ZN7S1523C2D0Ev();
extern void _ZN7S1523C42v6Ev();
extern void _ZN7S1523C42v7Ev();
extern void _ZN7S1523C42v8Ev();
extern void _ZN7S1523C42v9Ev();
extern void _ZN7S1523C43v10Ev();
extern void _ZN7S1523C43v11Ev();
extern void _ZN7S1523C43v12Ev();
extern void _ZN7S1523C43v13Ev();
extern void _ZN7S1523C43v14Ev();
extern void _ZN7S1523C43v15Ev();
extern void _ZN7S1523C43v16Ev();
extern void _ZN7S1523C43v17Ev();
extern void _ZN7S1523C43v18Ev();
extern void _ZN7S1523C43v19Ev();
extern void _ZN7S1523C43v20Ev();
extern void _ZN7S1523C43v21Ev();
extern void _ZN7S1523C43v22Ev();
extern void _ZN7S1523C43v23Ev();
extern void _ZN7S1523C43v24Ev();
extern void _ZN7S1523C43v25Ev();
extern void _ZN7S1523C43v26Ev();
extern void _ZN7S1523C43v27Ev();
extern void _ZN7S1523C43v28Ev();
extern void _ZN7S1523C43v29Ev();
extern void _ZN7S1523C43v30Ev();
extern void _ZN7S1523C43v31Ev();
extern void _ZN7S1523C43v32Ev();
extern void _ZN7S1523C43v33Ev();
extern void _ZN7S1523C43v34Ev();
extern void _ZN7S1523C43v35Ev();
extern void _ZN7S1523C43v36Ev();
extern void _ZN7S1523C43v37Ev();
extern void _ZN7S1523C43v38Ev();
extern void _ZN7S1523C43v39Ev();
extern void _ZN7S1523C43v40Ev();
extern void _ZN7S1523C43v41Ev();
extern void _ZN7S1523C43v42Ev();
extern void _ZN7S1523C43v43Ev();
extern void _ZN7S1523C43v44Ev();
extern void _ZN7S1523C43v45Ev();
extern void _ZN7S1523C43v46Ev();
extern void _ZN7S1523C43v47Ev();
extern void _ZN7S1523C43v48Ev();
extern void _ZN7S1523C43v49Ev();
extern void _ZN7S1523C43v50Ev();
extern void _ZN7S1523C43v51Ev();
extern void _ZN7S1523C43v52Ev();
extern void _ZN7S1523C43v53Ev();
extern void _ZN7S1523C43v54Ev();
extern void _ZN7S1523C43v55Ev();
extern void _ZN7S1523C43v56Ev();
extern void _ZN7S1523C43v57Ev();
extern void _ZN7S1523C43v58Ev();
extern void _ZN7S1523C43v59Ev();
extern void _ZN7S1523C43v60Ev();
extern void _ZN7S1523C43v61Ev();
extern void _ZN7S1523C43v62Ev();
extern void _ZN7S1523C43v63Ev();
extern void _ZN7S1523C43v64Ev();
extern void _ZN7S1523C43v65Ev();
extern void _ZN7S1523C43v66Ev();
extern void _ZN7S1523C43v67Ev();
extern void _ZN7S1523C43v68Ev();
extern void _ZN7S1523C43v69Ev();
extern void _ZN7S1523C33v70Ev();
extern void _ZN7S1523C33v71Ev();
extern void _ZN7S1523C33v72Ev();
extern void _ZN7S1523C33v73Ev();
extern void _ZN7S1523C33v74Ev();
extern void _ZN7S1523C33v75Ev();
extern void _ZN7S1523C33v76Ev();
extern void _ZN7S1523C33v77Ev();
extern void _ZN7S1523C33v78Ev();
extern void _ZN7S1523C33v79Ev();
extern void _ZN7S1523C33v80Ev();
extern void _ZN7S1523C33v81Ev();
extern void _ZN7S1523C33v82Ev();
extern void _ZN7S1523C33v83Ev();
extern void _ZN7S1523C33v84Ev();
extern void _ZN7S1523C33v85Ev();
extern void _ZN7S1523C33v86Ev();
extern void _ZN7S1523C33v87Ev();
extern void _ZN7S1523C33v88Ev();
extern void _ZN7S1523C33v89Ev();
extern void _ZN7S1523C23v90Ev();
extern void _ZN7S1523C23v91Ev();
static  VTBL_ENTRY vtc_S1523C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1523C2[0]),
  (VTBL_ENTRY)&_ZN7S1523C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1523C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1523C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1523C42v7Ev,
  (VTBL_ENTRY)&_ZN7S1523C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1523C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1523C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1523C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1523C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1523C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1523C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1523C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1523C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1523C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1523C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1523C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1523C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1523C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1523C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1523C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1523C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1523C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1523C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1523C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1523C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1523C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1523C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1523C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1523C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1523C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1523C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1523C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1523C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1523C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1523C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1523C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1523C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1523C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1523C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1523C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1523C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1523C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1523C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1523C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1523C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1523C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1523C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1523C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1523C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1523C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1523C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1523C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1523C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1523C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1523C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1523C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1523C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1523C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1523C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1523C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1523C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1523C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1523C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1523C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1523C43v68Ev,
  (VTBL_ENTRY)&_ZN7S1523C43v69Ev,
  (VTBL_ENTRY)&_ZN7S1523C33v70Ev,
  (VTBL_ENTRY)&_ZN7S1523C33v71Ev,
  (VTBL_ENTRY)&_ZN7S1523C33v72Ev,
  (VTBL_ENTRY)&_ZN7S1523C33v73Ev,
  (VTBL_ENTRY)&_ZN7S1523C33v74Ev,
  (VTBL_ENTRY)&_ZN7S1523C33v75Ev,
  (VTBL_ENTRY)&_ZN7S1523C33v76Ev,
  (VTBL_ENTRY)&_ZN7S1523C33v77Ev,
  (VTBL_ENTRY)&_ZN7S1523C33v78Ev,
  (VTBL_ENTRY)&_ZN7S1523C33v79Ev,
  (VTBL_ENTRY)&_ZN7S1523C33v80Ev,
  (VTBL_ENTRY)&_ZN7S1523C33v81Ev,
  (VTBL_ENTRY)&_ZN7S1523C33v82Ev,
  (VTBL_ENTRY)&_ZN7S1523C33v83Ev,
  (VTBL_ENTRY)&_ZN7S1523C33v84Ev,
  (VTBL_ENTRY)&_ZN7S1523C33v85Ev,
  (VTBL_ENTRY)&_ZN7S1523C33v86Ev,
  (VTBL_ENTRY)&_ZN7S1523C33v87Ev,
  (VTBL_ENTRY)&_ZN7S1523C33v88Ev,
  (VTBL_ENTRY)&_ZN7S1523C33v89Ev,
  (VTBL_ENTRY)&_ZN7S1523C23v90Ev,
  (VTBL_ENTRY)&_ZN7S1523C23v91Ev,
};
extern VTBL_ENTRY _ZTI7S1523C2[];
extern  VTBL_ENTRY _ZTV7S1523C2[];
Class_Descriptor cd_S1523C2 = {  "S1523C2", // class name
  bases_S1523C2, 2,
  &(vtc_S1523C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(104,64), // object size
  NSPAIRA(_ZTI7S1523C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1523C2),90, //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  S1523C1  : S1523C2 {
  ::S1292C12 s1523c1f0;
  ::S1292C12 s1523c1f1;
  unsigned int s1523c1f2:1;
  unsigned int s1523c1f3:1;
  virtual  ~S1523C1(); // _ZN7S1523C1D1Ev
  virtual void  v1(); // _ZN7S1523C12v1Ev
  virtual void  v2(); // _ZN7S1523C12v2Ev
  virtual void  v3(); // _ZN7S1523C12v3Ev
  virtual void  v4(); // _ZN7S1523C12v4Ev
  virtual void  v5(); // _ZN7S1523C12v5Ev
  S1523C1(); // tgen
};
//SIG(1 S1523C1) C1{ BC2{ BC3{ BC4{ 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 FC5{ m Fi[2]} Fp[2]} vd v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 FC6{ m}} vd v90 v91} vd v1 v2 v3 v4 v5 FC7{ BC8{ m Fc[4] FC9{ BC10{ BC11{ m Fp Fi[2]}}} Fi[2]} Fp} FC7 Fi:1 Fi:1}


 S1523C1 ::~S1523C1(){ note_dtor("S1523C1", this);}
void  S1523C1 ::v1(){vfunc_called(this, "_ZN7S1523C12v1Ev");}
void  S1523C1 ::v2(){vfunc_called(this, "_ZN7S1523C12v2Ev");}
void  S1523C1 ::v3(){vfunc_called(this, "_ZN7S1523C12v3Ev");}
void  S1523C1 ::v4(){vfunc_called(this, "_ZN7S1523C12v4Ev");}
void  S1523C1 ::v5(){vfunc_called(this, "_ZN7S1523C12v5Ev");}
S1523C1 ::S1523C1(){ note_ctor("S1523C1", this);} // tgen

static void Test_S1523C1()
{
  extern Class_Descriptor cd_S1523C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(25,32)];
    init_test(&cd_S1523C1, buf);
    S1523C1 *dp, &lv = *(dp=new (buf) S1523C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(192,124), "sizeof(S1523C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1523C1)");
    check_base_class_offset(lv, (S1523C4*)(S1523C3*)(S1523C2*), 0, "S1523C1");
    check_base_class_offset(lv, (S1523C3*)(S1523C2*), 0, "S1523C1");
    check_base_class_offset(lv, (S1523C2*), 0, "S1523C1");
    check_field_offset(lv, s1523c1f0, ABISELECT(104,64), "S1523C1.s1523c1f0");
    check_field_offset(lv, s1523c1f1, ABISELECT(144,92), "S1523C1.s1523c1f1");
    set_bf_and_test(lv, s1523c1f2, ABISELECT(184,120), 0, 1, 1, "S1523C1");
    set_bf_and_test(lv, s1523c1f3, ABISELECT(184,120), 1, 1, 1, "S1523C1");
    test_class_info(&lv, &cd_S1523C1);
    dp->~S1523C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1523C1(Test_S1523C1, "S1523C1", ABISELECT(192,124));

#else // __cplusplus

extern void _ZN7S1523C1C1Ev();
extern void _ZN7S1523C1D1Ev();
Name_Map name_map_S1523C1[] = {
  NSPAIR(_ZN7S1523C1C1Ev),
  NSPAIR(_ZN7S1523C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1523C4;
extern VTBL_ENTRY _ZTI7S1523C4[];
extern  VTBL_ENTRY _ZTV7S1523C4[];
extern Class_Descriptor cd_S1523C3;
extern VTBL_ENTRY _ZTI7S1523C3[];
extern  VTBL_ENTRY _ZTV7S1523C3[];
extern Class_Descriptor cd_S1523C2;
extern VTBL_ENTRY _ZTI7S1523C2[];
extern  VTBL_ENTRY _ZTV7S1523C2[];
static Base_Class bases_S1523C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1523C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S1523C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S1523C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S1523C1[];
extern void _ZN7S1523C1D1Ev();
extern void _ZN7S1523C1D0Ev();
extern void _ZN7S1523C42v6Ev();
extern void _ZN7S1523C42v7Ev();
extern void _ZN7S1523C42v8Ev();
extern void _ZN7S1523C42v9Ev();
extern void _ZN7S1523C43v10Ev();
extern void _ZN7S1523C43v11Ev();
extern void _ZN7S1523C43v12Ev();
extern void _ZN7S1523C43v13Ev();
extern void _ZN7S1523C43v14Ev();
extern void _ZN7S1523C43v15Ev();
extern void _ZN7S1523C43v16Ev();
extern void _ZN7S1523C43v17Ev();
extern void _ZN7S1523C43v18Ev();
extern void _ZN7S1523C43v19Ev();
extern void _ZN7S1523C43v20Ev();
extern void _ZN7S1523C43v21Ev();
extern void _ZN7S1523C43v22Ev();
extern void _ZN7S1523C43v23Ev();
extern void _ZN7S1523C43v24Ev();
extern void _ZN7S1523C43v25Ev();
extern void _ZN7S1523C43v26Ev();
extern void _ZN7S1523C43v27Ev();
extern void _ZN7S1523C43v28Ev();
extern void _ZN7S1523C43v29Ev();
extern void _ZN7S1523C43v30Ev();
extern void _ZN7S1523C43v31Ev();
extern void _ZN7S1523C43v32Ev();
extern void _ZN7S1523C43v33Ev();
extern void _ZN7S1523C43v34Ev();
extern void _ZN7S1523C43v35Ev();
extern void _ZN7S1523C43v36Ev();
extern void _ZN7S1523C43v37Ev();
extern void _ZN7S1523C43v38Ev();
extern void _ZN7S1523C43v39Ev();
extern void _ZN7S1523C43v40Ev();
extern void _ZN7S1523C43v41Ev();
extern void _ZN7S1523C43v42Ev();
extern void _ZN7S1523C43v43Ev();
extern void _ZN7S1523C43v44Ev();
extern void _ZN7S1523C43v45Ev();
extern void _ZN7S1523C43v46Ev();
extern void _ZN7S1523C43v47Ev();
extern void _ZN7S1523C43v48Ev();
extern void _ZN7S1523C43v49Ev();
extern void _ZN7S1523C43v50Ev();
extern void _ZN7S1523C43v51Ev();
extern void _ZN7S1523C43v52Ev();
extern void _ZN7S1523C43v53Ev();
extern void _ZN7S1523C43v54Ev();
extern void _ZN7S1523C43v55Ev();
extern void _ZN7S1523C43v56Ev();
extern void _ZN7S1523C43v57Ev();
extern void _ZN7S1523C43v58Ev();
extern void _ZN7S1523C43v59Ev();
extern void _ZN7S1523C43v60Ev();
extern void _ZN7S1523C43v61Ev();
extern void _ZN7S1523C43v62Ev();
extern void _ZN7S1523C43v63Ev();
extern void _ZN7S1523C43v64Ev();
extern void _ZN7S1523C43v65Ev();
extern void _ZN7S1523C43v66Ev();
extern void _ZN7S1523C43v67Ev();
extern void _ZN7S1523C43v68Ev();
extern void _ZN7S1523C43v69Ev();
extern void _ZN7S1523C33v70Ev();
extern void _ZN7S1523C33v71Ev();
extern void _ZN7S1523C33v72Ev();
extern void _ZN7S1523C33v73Ev();
extern void _ZN7S1523C33v74Ev();
extern void _ZN7S1523C33v75Ev();
extern void _ZN7S1523C33v76Ev();
extern void _ZN7S1523C33v77Ev();
extern void _ZN7S1523C33v78Ev();
extern void _ZN7S1523C33v79Ev();
extern void _ZN7S1523C33v80Ev();
extern void _ZN7S1523C33v81Ev();
extern void _ZN7S1523C33v82Ev();
extern void _ZN7S1523C33v83Ev();
extern void _ZN7S1523C33v84Ev();
extern void _ZN7S1523C33v85Ev();
extern void _ZN7S1523C33v86Ev();
extern void _ZN7S1523C33v87Ev();
extern void _ZN7S1523C33v88Ev();
extern void _ZN7S1523C33v89Ev();
extern void _ZN7S1523C23v90Ev();
extern void _ZN7S1523C23v91Ev();
extern void _ZN7S1523C12v1Ev();
extern void _ZN7S1523C12v2Ev();
extern void _ZN7S1523C12v3Ev();
extern void _ZN7S1523C12v4Ev();
extern void _ZN7S1523C12v5Ev();
static  VTBL_ENTRY vtc_S1523C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1523C1[0]),
  (VTBL_ENTRY)&_ZN7S1523C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1523C1D0Ev,
  (VTBL_ENTRY)&_ZN7S1523C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1523C42v7Ev,
  (VTBL_ENTRY)&_ZN7S1523C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1523C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1523C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1523C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1523C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1523C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1523C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1523C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1523C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1523C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1523C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1523C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1523C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1523C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1523C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1523C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1523C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1523C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1523C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1523C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1523C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1523C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1523C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1523C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1523C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1523C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1523C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1523C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1523C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1523C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1523C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1523C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1523C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1523C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1523C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1523C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1523C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1523C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1523C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1523C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1523C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1523C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1523C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1523C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1523C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1523C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1523C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1523C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1523C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1523C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1523C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1523C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1523C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1523C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1523C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1523C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1523C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1523C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1523C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1523C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1523C43v68Ev,
  (VTBL_ENTRY)&_ZN7S1523C43v69Ev,
  (VTBL_ENTRY)&_ZN7S1523C33v70Ev,
  (VTBL_ENTRY)&_ZN7S1523C33v71Ev,
  (VTBL_ENTRY)&_ZN7S1523C33v72Ev,
  (VTBL_ENTRY)&_ZN7S1523C33v73Ev,
  (VTBL_ENTRY)&_ZN7S1523C33v74Ev,
  (VTBL_ENTRY)&_ZN7S1523C33v75Ev,
  (VTBL_ENTRY)&_ZN7S1523C33v76Ev,
  (VTBL_ENTRY)&_ZN7S1523C33v77Ev,
  (VTBL_ENTRY)&_ZN7S1523C33v78Ev,
  (VTBL_ENTRY)&_ZN7S1523C33v79Ev,
  (VTBL_ENTRY)&_ZN7S1523C33v80Ev,
  (VTBL_ENTRY)&_ZN7S1523C33v81Ev,
  (VTBL_ENTRY)&_ZN7S1523C33v82Ev,
  (VTBL_ENTRY)&_ZN7S1523C33v83Ev,
  (VTBL_ENTRY)&_ZN7S1523C33v84Ev,
  (VTBL_ENTRY)&_ZN7S1523C33v85Ev,
  (VTBL_ENTRY)&_ZN7S1523C33v86Ev,
  (VTBL_ENTRY)&_ZN7S1523C33v87Ev,
  (VTBL_ENTRY)&_ZN7S1523C33v88Ev,
  (VTBL_ENTRY)&_ZN7S1523C33v89Ev,
  (VTBL_ENTRY)&_ZN7S1523C23v90Ev,
  (VTBL_ENTRY)&_ZN7S1523C23v91Ev,
  (VTBL_ENTRY)&_ZN7S1523C12v1Ev,
  (VTBL_ENTRY)&_ZN7S1523C12v2Ev,
  (VTBL_ENTRY)&_ZN7S1523C12v3Ev,
  (VTBL_ENTRY)&_ZN7S1523C12v4Ev,
  (VTBL_ENTRY)&_ZN7S1523C12v5Ev,
};
extern VTBL_ENTRY _ZTI7S1523C1[];
extern  VTBL_ENTRY _ZTV7S1523C1[];
Class_Descriptor cd_S1523C1 = {  "S1523C1", // class name
  bases_S1523C1, 3,
  &(vtc_S1523C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(192,124), // object size
  NSPAIRA(_ZTI7S1523C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1523C1),95, //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  S1520C4  {
  int s1520c4f0;
  __tsi64 s1520c4f1;
  void *s1520c4f2[4];
  int s1520c4f3[2];
  void *s1520c4f4;
  ::S674C6_nt s1520c4f5;
  void *s1520c4f6[2];
  virtual  ~S1520C4(); // _ZN7S1520C4D1Ev
  virtual void  v6(); // _ZN7S1520C42v6Ev
  virtual void  v7(); // _ZN7S1520C42v7Ev
  virtual void  v8(); // _ZN7S1520C42v8Ev
  virtual void  v9(); // _ZN7S1520C42v9Ev
  virtual void  v10(); // _ZN7S1520C43v10Ev
  virtual void  v11(); // _ZN7S1520C43v11Ev
  virtual void  v12(); // _ZN7S1520C43v12Ev
  virtual void  v13(); // _ZN7S1520C43v13Ev
  virtual void  v14(); // _ZN7S1520C43v14Ev
  virtual void  v15(); // _ZN7S1520C43v15Ev
  virtual void  v16(); // _ZN7S1520C43v16Ev
  virtual void  v17(); // _ZN7S1520C43v17Ev
  virtual void  v18(); // _ZN7S1520C43v18Ev
  virtual void  v19(); // _ZN7S1520C43v19Ev
  virtual void  v20(); // _ZN7S1520C43v20Ev
  virtual void  v21(); // _ZN7S1520C43v21Ev
  virtual void  v22(); // _ZN7S1520C43v22Ev
  virtual void  v23(); // _ZN7S1520C43v23Ev
  virtual void  v24(); // _ZN7S1520C43v24Ev
  virtual void  v25(); // _ZN7S1520C43v25Ev
  virtual void  v26(); // _ZN7S1520C43v26Ev
  virtual void  v27(); // _ZN7S1520C43v27Ev
  virtual void  v28(); // _ZN7S1520C43v28Ev
  virtual void  v29(); // _ZN7S1520C43v29Ev
  virtual void  v30(); // _ZN7S1520C43v30Ev
  virtual void  v31(); // _ZN7S1520C43v31Ev
  virtual void  v32(); // _ZN7S1520C43v32Ev
  virtual void  v33(); // _ZN7S1520C43v33Ev
  virtual void  v34(); // _ZN7S1520C43v34Ev
  virtual void  v35(); // _ZN7S1520C43v35Ev
  virtual void  v36(); // _ZN7S1520C43v36Ev
  virtual void  v37(); // _ZN7S1520C43v37Ev
  virtual void  v38(); // _ZN7S1520C43v38Ev
  virtual void  v39(); // _ZN7S1520C43v39Ev
  virtual void  v40(); // _ZN7S1520C43v40Ev
  virtual void  v41(); // _ZN7S1520C43v41Ev
  virtual void  v42(); // _ZN7S1520C43v42Ev
  virtual void  v43(); // _ZN7S1520C43v43Ev
  virtual void  v44(); // _ZN7S1520C43v44Ev
  virtual void  v45(); // _ZN7S1520C43v45Ev
  virtual void  v46(); // _ZN7S1520C43v46Ev
  virtual void  v47(); // _ZN7S1520C43v47Ev
  virtual void  v48(); // _ZN7S1520C43v48Ev
  virtual void  v49(); // _ZN7S1520C43v49Ev
  virtual void  v50(); // _ZN7S1520C43v50Ev
  virtual void  v51(); // _ZN7S1520C43v51Ev
  virtual void  v52(); // _ZN7S1520C43v52Ev
  virtual void  v53(); // _ZN7S1520C43v53Ev
  virtual void  v54(); // _ZN7S1520C43v54Ev
  virtual void  v55(); // _ZN7S1520C43v55Ev
  virtual void  v56(); // _ZN7S1520C43v56Ev
  virtual void  v57(); // _ZN7S1520C43v57Ev
  virtual void  v58(); // _ZN7S1520C43v58Ev
  virtual void  v59(); // _ZN7S1520C43v59Ev
  virtual void  v60(); // _ZN7S1520C43v60Ev
  virtual void  v61(); // _ZN7S1520C43v61Ev
  virtual void  v62(); // _ZN7S1520C43v62Ev
  virtual void  v63(); // _ZN7S1520C43v63Ev
  virtual void  v64(); // _ZN7S1520C43v64Ev
  virtual void  v65(); // _ZN7S1520C43v65Ev
  virtual void  v66(); // _ZN7S1520C43v66Ev
  virtual void  v67(); // _ZN7S1520C43v67Ev
  virtual void  v68(); // _ZN7S1520C43v68Ev
  virtual void  v69(); // _ZN7S1520C43v69Ev
  S1520C4(); // tgen
};
//SIG(-1 S1520C4) 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]}


 S1520C4 ::~S1520C4(){ note_dtor("S1520C4", this);}
void  S1520C4 ::v6(){vfunc_called(this, "_ZN7S1520C42v6Ev");}
void  S1520C4 ::v7(){vfunc_called(this, "_ZN7S1520C42v7Ev");}
void  S1520C4 ::v8(){vfunc_called(this, "_ZN7S1520C42v8Ev");}
void  S1520C4 ::v9(){vfunc_called(this, "_ZN7S1520C42v9Ev");}
void  S1520C4 ::v10(){vfunc_called(this, "_ZN7S1520C43v10Ev");}
void  S1520C4 ::v11(){vfunc_called(this, "_ZN7S1520C43v11Ev");}
void  S1520C4 ::v12(){vfunc_called(this, "_ZN7S1520C43v12Ev");}
void  S1520C4 ::v13(){vfunc_called(this, "_ZN7S1520C43v13Ev");}
void  S1520C4 ::v14(){vfunc_called(this, "_ZN7S1520C43v14Ev");}
void  S1520C4 ::v15(){vfunc_called(this, "_ZN7S1520C43v15Ev");}
void  S1520C4 ::v16(){vfunc_called(this, "_ZN7S1520C43v16Ev");}
void  S1520C4 ::v17(){vfunc_called(this, "_ZN7S1520C43v17Ev");}
void  S1520C4 ::v18(){vfunc_called(this, "_ZN7S1520C43v18Ev");}
void  S1520C4 ::v19(){vfunc_called(this, "_ZN7S1520C43v19Ev");}
void  S1520C4 ::v20(){vfunc_called(this, "_ZN7S1520C43v20Ev");}
void  S1520C4 ::v21(){vfunc_called(this, "_ZN7S1520C43v21Ev");}
void  S1520C4 ::v22(){vfunc_called(this, "_ZN7S1520C43v22Ev");}
void  S1520C4 ::v23(){vfunc_called(this, "_ZN7S1520C43v23Ev");}
void  S1520C4 ::v24(){vfunc_called(this, "_ZN7S1520C43v24Ev");}
void  S1520C4 ::v25(){vfunc_called(this, "_ZN7S1520C43v25Ev");}
void  S1520C4 ::v26(){vfunc_called(this, "_ZN7S1520C43v26Ev");}
void  S1520C4 ::v27(){vfunc_called(this, "_ZN7S1520C43v27Ev");}
void  S1520C4 ::v28(){vfunc_called(this, "_ZN7S1520C43v28Ev");}
void  S1520C4 ::v29(){vfunc_called(this, "_ZN7S1520C43v29Ev");}
void  S1520C4 ::v30(){vfunc_called(this, "_ZN7S1520C43v30Ev");}
void  S1520C4 ::v31(){vfunc_called(this, "_ZN7S1520C43v31Ev");}
void  S1520C4 ::v32(){vfunc_called(this, "_ZN7S1520C43v32Ev");}
void  S1520C4 ::v33(){vfunc_called(this, "_ZN7S1520C43v33Ev");}
void  S1520C4 ::v34(){vfunc_called(this, "_ZN7S1520C43v34Ev");}
void  S1520C4 ::v35(){vfunc_called(this, "_ZN7S1520C43v35Ev");}
void  S1520C4 ::v36(){vfunc_called(this, "_ZN7S1520C43v36Ev");}
void  S1520C4 ::v37(){vfunc_called(this, "_ZN7S1520C43v37Ev");}
void  S1520C4 ::v38(){vfunc_called(this, "_ZN7S1520C43v38Ev");}
void  S1520C4 ::v39(){vfunc_called(this, "_ZN7S1520C43v39Ev");}
void  S1520C4 ::v40(){vfunc_called(this, "_ZN7S1520C43v40Ev");}
void  S1520C4 ::v41(){vfunc_called(this, "_ZN7S1520C43v41Ev");}
void  S1520C4 ::v42(){vfunc_called(this, "_ZN7S1520C43v42Ev");}
void  S1520C4 ::v43(){vfunc_called(this, "_ZN7S1520C43v43Ev");}
void  S1520C4 ::v44(){vfunc_called(this, "_ZN7S1520C43v44Ev");}
void  S1520C4 ::v45(){vfunc_called(this, "_ZN7S1520C43v45Ev");}
void  S1520C4 ::v46(){vfunc_called(this, "_ZN7S1520C43v46Ev");}
void  S1520C4 ::v47(){vfunc_called(this, "_ZN7S1520C43v47Ev");}
void  S1520C4 ::v48(){vfunc_called(this, "_ZN7S1520C43v48Ev");}
void  S1520C4 ::v49(){vfunc_called(this, "_ZN7S1520C43v49Ev");}
void  S1520C4 ::v50(){vfunc_called(this, "_ZN7S1520C43v50Ev");}
void  S1520C4 ::v51(){vfunc_called(this, "_ZN7S1520C43v51Ev");}
void  S1520C4 ::v52(){vfunc_called(this, "_ZN7S1520C43v52Ev");}
void  S1520C4 ::v53(){vfunc_called(this, "_ZN7S1520C43v53Ev");}
void  S1520C4 ::v54(){vfunc_called(this, "_ZN7S1520C43v54Ev");}
void  S1520C4 ::v55(){vfunc_called(this, "_ZN7S1520C43v55Ev");}
void  S1520C4 ::v56(){vfunc_called(this, "_ZN7S1520C43v56Ev");}
void  S1520C4 ::v57(){vfunc_called(this, "_ZN7S1520C43v57Ev");}
void  S1520C4 ::v58(){vfunc_called(this, "_ZN7S1520C43v58Ev");}
void  S1520C4 ::v59(){vfunc_called(this, "_ZN7S1520C43v59Ev");}
void  S1520C4 ::v60(){vfunc_called(this, "_ZN7S1520C43v60Ev");}
void  S1520C4 ::v61(){vfunc_called(this, "_ZN7S1520C43v61Ev");}
void  S1520C4 ::v62(){vfunc_called(this, "_ZN7S1520C43v62Ev");}
void  S1520C4 ::v63(){vfunc_called(this, "_ZN7S1520C43v63Ev");}
void  S1520C4 ::v64(){vfunc_called(this, "_ZN7S1520C43v64Ev");}
void  S1520C4 ::v65(){vfunc_called(this, "_ZN7S1520C43v65Ev");}
void  S1520C4 ::v66(){vfunc_called(this, "_ZN7S1520C43v66Ev");}
void  S1520C4 ::v67(){vfunc_called(this, "_ZN7S1520C43v67Ev");}
void  S1520C4 ::v68(){vfunc_called(this, "_ZN7S1520C43v68Ev");}
void  S1520C4 ::v69(){vfunc_called(this, "_ZN7S1520C43v69Ev");}
S1520C4 ::S1520C4(){ note_ctor("S1520C4", this);} // tgen

static void Test_S1520C4()
{
  extern Class_Descriptor cd_S1520C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S1520C4, buf);
    S1520C4 *dp, &lv = *(dp=new (buf) S1520C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S1520C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1520C4)");
    check_field_offset(lv, s1520c4f0, ABISELECT(8,4), "S1520C4.s1520c4f0");
    check_field_offset(lv, s1520c4f1, ABISELECT(16,8), "S1520C4.s1520c4f1");
    check_field_offset(lv, s1520c4f2, ABISELECT(24,16), "S1520C4.s1520c4f2");
    check_field_offset(lv, s1520c4f3, ABISELECT(56,32), "S1520C4.s1520c4f3");
    check_field_offset(lv, s1520c4f4, ABISELECT(64,40), "S1520C4.s1520c4f4");
    check_field_offset(lv, s1520c4f5, ABISELECT(72,44), "S1520C4.s1520c4f5");
    check_field_offset(lv, s1520c4f6, ABISELECT(80,52), "S1520C4.s1520c4f6");
    test_class_info(&lv, &cd_S1520C4);
    dp->~S1520C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1520C4(Test_S1520C4, "S1520C4", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN7S1520C4C1Ev();
extern void _ZN7S1520C4D1Ev();
Name_Map name_map_S1520C4[] = {
  NSPAIR(_ZN7S1520C4C1Ev),
  NSPAIR(_ZN7S1520C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S1520C4[];
extern void _ZN7S1520C4D1Ev();
extern void _ZN7S1520C4D0Ev();
extern void _ZN7S1520C42v6Ev();
extern void _ZN7S1520C42v7Ev();
extern void _ZN7S1520C42v8Ev();
extern void _ZN7S1520C42v9Ev();
extern void _ZN7S1520C43v10Ev();
extern void _ZN7S1520C43v11Ev();
extern void _ZN7S1520C43v12Ev();
extern void _ZN7S1520C43v13Ev();
extern void _ZN7S1520C43v14Ev();
extern void _ZN7S1520C43v15Ev();
extern void _ZN7S1520C43v16Ev();
extern void _ZN7S1520C43v17Ev();
extern void _ZN7S1520C43v18Ev();
extern void _ZN7S1520C43v19Ev();
extern void _ZN7S1520C43v20Ev();
extern void _ZN7S1520C43v21Ev();
extern void _ZN7S1520C43v22Ev();
extern void _ZN7S1520C43v23Ev();
extern void _ZN7S1520C43v24Ev();
extern void _ZN7S1520C43v25Ev();
extern void _ZN7S1520C43v26Ev();
extern void _ZN7S1520C43v27Ev();
extern void _ZN7S1520C43v28Ev();
extern void _ZN7S1520C43v29Ev();
extern void _ZN7S1520C43v30Ev();
extern void _ZN7S1520C43v31Ev();
extern void _ZN7S1520C43v32Ev();
extern void _ZN7S1520C43v33Ev();
extern void _ZN7S1520C43v34Ev();
extern void _ZN7S1520C43v35Ev();
extern void _ZN7S1520C43v36Ev();
extern void _ZN7S1520C43v37Ev();
extern void _ZN7S1520C43v38Ev();
extern void _ZN7S1520C43v39Ev();
extern void _ZN7S1520C43v40Ev();
extern void _ZN7S1520C43v41Ev();
extern void _ZN7S1520C43v42Ev();
extern void _ZN7S1520C43v43Ev();
extern void _ZN7S1520C43v44Ev();
extern void _ZN7S1520C43v45Ev();
extern void _ZN7S1520C43v46Ev();
extern void _ZN7S1520C43v47Ev();
extern void _ZN7S1520C43v48Ev();
extern void _ZN7S1520C43v49Ev();
extern void _ZN7S1520C43v50Ev();
extern void _ZN7S1520C43v51Ev();
extern void _ZN7S1520C43v52Ev();
extern void _ZN7S1520C43v53Ev();
extern void _ZN7S1520C43v54Ev();
extern void _ZN7S1520C43v55Ev();
extern void _ZN7S1520C43v56Ev();
extern void _ZN7S1520C43v57Ev();
extern void _ZN7S1520C43v58Ev();
extern void _ZN7S1520C43v59Ev();
extern void _ZN7S1520C43v60Ev();
extern void _ZN7S1520C43v61Ev();
extern void _ZN7S1520C43v62Ev();
extern void _ZN7S1520C43v63Ev();
extern void _ZN7S1520C43v64Ev();
extern void _ZN7S1520C43v65Ev();
extern void _ZN7S1520C43v66Ev();
extern void _ZN7S1520C43v67Ev();
extern void _ZN7S1520C43v68Ev();
extern void _ZN7S1520C43v69Ev();
static  VTBL_ENTRY vtc_S1520C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1520C4[0]),
  (VTBL_ENTRY)&_ZN7S1520C4D1Ev,
  (VTBL_ENTRY)&_ZN7S1520C4D0Ev,
  (VTBL_ENTRY)&_ZN7S1520C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1520C42v7Ev,
  (VTBL_ENTRY)&_ZN7S1520C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1520C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1520C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1520C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1520C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1520C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1520C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1520C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1520C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1520C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1520C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1520C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1520C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1520C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1520C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1520C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1520C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1520C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1520C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1520C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1520C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1520C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1520C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1520C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1520C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1520C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1520C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1520C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1520C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1520C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1520C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1520C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1520C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1520C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1520C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1520C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1520C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1520C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1520C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1520C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1520C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1520C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1520C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1520C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1520C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1520C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1520C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1520C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1520C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1520C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1520C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1520C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1520C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1520C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1520C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1520C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1520C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1520C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1520C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1520C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1520C43v68Ev,
  (VTBL_ENTRY)&_ZN7S1520C43v69Ev,
};
extern VTBL_ENTRY _ZTI7S1520C4[];
extern  VTBL_ENTRY _ZTV7S1520C4[];
Class_Descriptor cd_S1520C4 = {  "S1520C4", // class name
  0,0,//no base classes
  &(vtc_S1520C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI7S1520C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S1520C4),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  S1520C3  : S1520C4 {
  unsigned int s1520c3f0:1;
  unsigned int s1520c3f1:1;
  unsigned int s1520c3f2:1;
  unsigned int s1520c3f3:1;
  unsigned int s1520c3f4:1;
  unsigned int s1520c3f5:1;
  unsigned int s1520c3f6:1;
  ::S3625C32 s1520c3f7;
  virtual  ~S1520C3(); // _ZN7S1520C3D1Ev
  virtual void  v70(); // _ZN7S1520C33v70Ev
  virtual void  v71(); // _ZN7S1520C33v71Ev
  virtual void  v72(); // _ZN7S1520C33v72Ev
  virtual void  v73(); // _ZN7S1520C33v73Ev
  virtual void  v74(); // _ZN7S1520C33v74Ev
  virtual void  v75(); // _ZN7S1520C33v75Ev
  virtual void  v76(); // _ZN7S1520C33v76Ev
  virtual void  v77(); // _ZN7S1520C33v77Ev
  virtual void  v78(); // _ZN7S1520C33v78Ev
  virtual void  v79(); // _ZN7S1520C33v79Ev
  virtual void  v80(); // _ZN7S1520C33v80Ev
  virtual void  v81(); // _ZN7S1520C33v81Ev
  virtual void  v82(); // _ZN7S1520C33v82Ev
  virtual void  v83(); // _ZN7S1520C33v83Ev
  virtual void  v84(); // _ZN7S1520C33v84Ev
  virtual void  v85(); // _ZN7S1520C33v85Ev
  virtual void  v86(); // _ZN7S1520C33v86Ev
  virtual void  v87(); // _ZN7S1520C33v87Ev
  virtual void  v88(); // _ZN7S1520C33v88Ev
  virtual void  v89(); // _ZN7S1520C33v89Ev
  S1520C3(); // tgen
};
//SIG(-1 S1520C3) C1{ BC2{ 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 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 Fi FL Fp[4] Fi[2] Fp FC3{ m Fi[2]} Fp[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 FC4{ m}}


 S1520C3 ::~S1520C3(){ note_dtor("S1520C3", this);}
void  S1520C3 ::v70(){vfunc_called(this, "_ZN7S1520C33v70Ev");}
void  S1520C3 ::v71(){vfunc_called(this, "_ZN7S1520C33v71Ev");}
void  S1520C3 ::v72(){vfunc_called(this, "_ZN7S1520C33v72Ev");}
void  S1520C3 ::v73(){vfunc_called(this, "_ZN7S1520C33v73Ev");}
void  S1520C3 ::v74(){vfunc_called(this, "_ZN7S1520C33v74Ev");}
void  S1520C3 ::v75(){vfunc_called(this, "_ZN7S1520C33v75Ev");}
void  S1520C3 ::v76(){vfunc_called(this, "_ZN7S1520C33v76Ev");}
void  S1520C3 ::v77(){vfunc_called(this, "_ZN7S1520C33v77Ev");}
void  S1520C3 ::v78(){vfunc_called(this, "_ZN7S1520C33v78Ev");}
void  S1520C3 ::v79(){vfunc_called(this, "_ZN7S1520C33v79Ev");}
void  S1520C3 ::v80(){vfunc_called(this, "_ZN7S1520C33v80Ev");}
void  S1520C3 ::v81(){vfunc_called(this, "_ZN7S1520C33v81Ev");}
void  S1520C3 ::v82(){vfunc_called(this, "_ZN7S1520C33v82Ev");}
void  S1520C3 ::v83(){vfunc_called(this, "_ZN7S1520C33v83Ev");}
void  S1520C3 ::v84(){vfunc_called(this, "_ZN7S1520C33v84Ev");}
void  S1520C3 ::v85(){vfunc_called(this, "_ZN7S1520C33v85Ev");}
void  S1520C3 ::v86(){vfunc_called(this, "_ZN7S1520C33v86Ev");}
void  S1520C3 ::v87(){vfunc_called(this, "_ZN7S1520C33v87Ev");}
void  S1520C3 ::v88(){vfunc_called(this, "_ZN7S1520C33v88Ev");}
void  S1520C3 ::v89(){vfunc_called(this, "_ZN7S1520C33v89Ev");}
S1520C3 ::S1520C3(){ note_ctor("S1520C3", this);} // tgen

static void Test_S1520C3()
{
  extern Class_Descriptor cd_S1520C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(14,17)];
    init_test(&cd_S1520C3, buf);
    S1520C3 *dp, &lv = *(dp=new (buf) S1520C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(104,64), "sizeof(S1520C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1520C3)");
    check_base_class_offset(lv, (S1520C4*), 0, "S1520C3");
    set_bf_and_test(lv, s1520c3f0, ABISELECT(96,60), 0, 1, 1, "S1520C3");
    set_bf_and_test(lv, s1520c3f1, ABISELECT(96,60), 1, 1, 1, "S1520C3");
    set_bf_and_test(lv, s1520c3f2, ABISELECT(96,60), 2, 1, 1, "S1520C3");
    set_bf_and_test(lv, s1520c3f3, ABISELECT(96,60), 3, 1, 1, "S1520C3");
    set_bf_and_test(lv, s1520c3f4, ABISELECT(96,60), 4, 1, 1, "S1520C3");
    set_bf_and_test(lv, s1520c3f5, ABISELECT(96,60), 5, 1, 1, "S1520C3");
    set_bf_and_test(lv, s1520c3f6, ABISELECT(96,60), 6, 1, 1, "S1520C3");
    check_field_offset(lv, s1520c3f7, ABISELECT(97,61), "S1520C3.s1520c3f7");
    test_class_info(&lv, &cd_S1520C3);
    dp->~S1520C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1520C3(Test_S1520C3, "S1520C3", ABISELECT(104,64));

#else // __cplusplus

extern void _ZN7S1520C3C1Ev();
extern void _ZN7S1520C3D1Ev();
Name_Map name_map_S1520C3[] = {
  NSPAIR(_ZN7S1520C3C1Ev),
  NSPAIR(_ZN7S1520C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1520C4;
extern VTBL_ENTRY _ZTI7S1520C4[];
extern  VTBL_ENTRY _ZTV7S1520C4[];
static Base_Class bases_S1520C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1520C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI7S1520C3[];
extern void _ZN7S1520C3D1Ev();
extern void _ZN7S1520C3D0Ev();
extern void _ZN7S1520C42v6Ev();
extern void _ZN7S1520C42v7Ev();
extern void _ZN7S1520C42v8Ev();
extern void _ZN7S1520C42v9Ev();
extern void _ZN7S1520C43v10Ev();
extern void _ZN7S1520C43v11Ev();
extern void _ZN7S1520C43v12Ev();
extern void _ZN7S1520C43v13Ev();
extern void _ZN7S1520C43v14Ev();
extern void _ZN7S1520C43v15Ev();
extern void _ZN7S1520C43v16Ev();
extern void _ZN7S1520C43v17Ev();
extern void _ZN7S1520C43v18Ev();
extern void _ZN7S1520C43v19Ev();
extern void _ZN7S1520C43v20Ev();
extern void _ZN7S1520C43v21Ev();
extern void _ZN7S1520C43v22Ev();
extern void _ZN7S1520C43v23Ev();
extern void _ZN7S1520C43v24Ev();
extern void _ZN7S1520C43v25Ev();
extern void _ZN7S1520C43v26Ev();
extern void _ZN7S1520C43v27Ev();
extern void _ZN7S1520C43v28Ev();
extern void _ZN7S1520C43v29Ev();
extern void _ZN7S1520C43v30Ev();
extern void _ZN7S1520C43v31Ev();
extern void _ZN7S1520C43v32Ev();
extern void _ZN7S1520C43v33Ev();
extern void _ZN7S1520C43v34Ev();
extern void _ZN7S1520C43v35Ev();
extern void _ZN7S1520C43v36Ev();
extern void _ZN7S1520C43v37Ev();
extern void _ZN7S1520C43v38Ev();
extern void _ZN7S1520C43v39Ev();
extern void _ZN7S1520C43v40Ev();
extern void _ZN7S1520C43v41Ev();
extern void _ZN7S1520C43v42Ev();
extern void _ZN7S1520C43v43Ev();
extern void _ZN7S1520C43v44Ev();
extern void _ZN7S1520C43v45Ev();
extern void _ZN7S1520C43v46Ev();
extern void _ZN7S1520C43v47Ev();
extern void _ZN7S1520C43v48Ev();
extern void _ZN7S1520C43v49Ev();
extern void _ZN7S1520C43v50Ev();
extern void _ZN7S1520C43v51Ev();
extern void _ZN7S1520C43v52Ev();
extern void _ZN7S1520C43v53Ev();
extern void _ZN7S1520C43v54Ev();
extern void _ZN7S1520C43v55Ev();
extern void _ZN7S1520C43v56Ev();
extern void _ZN7S1520C43v57Ev();
extern void _ZN7S1520C43v58Ev();
extern void _ZN7S1520C43v59Ev();
extern void _ZN7S1520C43v60Ev();
extern void _ZN7S1520C43v61Ev();
extern void _ZN7S1520C43v62Ev();
extern void _ZN7S1520C43v63Ev();
extern void _ZN7S1520C43v64Ev();
extern void _ZN7S1520C43v65Ev();
extern void _ZN7S1520C43v66Ev();
extern void _ZN7S1520C43v67Ev();
extern void _ZN7S1520C43v68Ev();
extern void _ZN7S1520C43v69Ev();
extern void _ZN7S1520C33v70Ev();
extern void _ZN7S1520C33v71Ev();
extern void _ZN7S1520C33v72Ev();
extern void _ZN7S1520C33v73Ev();
extern void _ZN7S1520C33v74Ev();
extern void _ZN7S1520C33v75Ev();
extern void _ZN7S1520C33v76Ev();
extern void _ZN7S1520C33v77Ev();
extern void _ZN7S1520C33v78Ev();
extern void _ZN7S1520C33v79Ev();
extern void _ZN7S1520C33v80Ev();
extern void _ZN7S1520C33v81Ev();
extern void _ZN7S1520C33v82Ev();
extern void _ZN7S1520C33v83Ev();
extern void _ZN7S1520C33v84Ev();
extern void _ZN7S1520C33v85Ev();
extern void _ZN7S1520C33v86Ev();
extern void _ZN7S1520C33v87Ev();
extern void _ZN7S1520C33v88Ev();
extern void _ZN7S1520C33v89Ev();
static  VTBL_ENTRY vtc_S1520C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1520C3[0]),
  (VTBL_ENTRY)&_ZN7S1520C3D1Ev,
  (VTBL_ENTRY)&_ZN7S1520C3D0Ev,
  (VTBL_ENTRY)&_ZN7S1520C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1520C42v7Ev,
  (VTBL_ENTRY)&_ZN7S1520C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1520C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1520C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1520C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1520C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1520C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1520C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1520C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1520C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1520C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1520C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1520C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1520C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1520C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1520C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1520C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1520C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1520C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1520C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1520C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1520C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1520C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1520C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1520C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1520C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1520C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1520C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1520C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1520C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1520C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1520C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1520C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1520C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1520C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1520C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1520C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1520C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1520C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1520C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1520C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1520C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1520C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1520C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1520C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1520C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1520C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1520C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1520C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1520C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1520C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1520C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1520C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1520C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1520C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1520C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1520C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1520C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1520C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1520C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1520C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1520C43v68Ev,
  (VTBL_ENTRY)&_ZN7S1520C43v69Ev,
  (VTBL_ENTRY)&_ZN7S1520C33v70Ev,
  (VTBL_ENTRY)&_ZN7S1520C33v71Ev,
  (VTBL_ENTRY)&_ZN7S1520C33v72Ev,
  (VTBL_ENTRY)&_ZN7S1520C33v73Ev,
  (VTBL_ENTRY)&_ZN7S1520C33v74Ev,
  (VTBL_ENTRY)&_ZN7S1520C33v75Ev,
  (VTBL_ENTRY)&_ZN7S1520C33v76Ev,
  (VTBL_ENTRY)&_ZN7S1520C33v77Ev,
  (VTBL_ENTRY)&_ZN7S1520C33v78Ev,
  (VTBL_ENTRY)&_ZN7S1520C33v79Ev,
  (VTBL_ENTRY)&_ZN7S1520C33v80Ev,
  (VTBL_ENTRY)&_ZN7S1520C33v81Ev,
  (VTBL_ENTRY)&_ZN7S1520C33v82Ev,
  (VTBL_ENTRY)&_ZN7S1520C33v83Ev,
  (VTBL_ENTRY)&_ZN7S1520C33v84Ev,
  (VTBL_ENTRY)&_ZN7S1520C33v85Ev,
  (VTBL_ENTRY)&_ZN7S1520C33v86Ev,
  (VTBL_ENTRY)&_ZN7S1520C33v87Ev,
  (VTBL_ENTRY)&_ZN7S1520C33v88Ev,
  (VTBL_ENTRY)&_ZN7S1520C33v89Ev,
};
extern VTBL_ENTRY _ZTI7S1520C3[];
extern  VTBL_ENTRY _ZTV7S1520C3[];
Class_Descriptor cd_S1520C3 = {  "S1520C3", // class name
  bases_S1520C3, 1,
  &(vtc_S1520C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(104,64), // object size
  NSPAIRA(_ZTI7S1520C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1520C3),88, //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  S1520C2  : S1520C3 {
  virtual  ~S1520C2(); // _ZN7S1520C2D1Ev
  virtual void  v90(); // _ZN7S1520C23v90Ev
  virtual void  v91(); // _ZN7S1520C23v91Ev
  S1520C2(); // tgen
};
//SIG(-1 S1520C2) C1{ BC2{ BC3{ vd 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 Fi FL Fp[4] Fi[2] Fp FC4{ m Fi[2]} Fp[2]} vd v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 FC5{ m}} vd v1 v2}


 S1520C2 ::~S1520C2(){ note_dtor("S1520C2", this);}
void  S1520C2 ::v90(){vfunc_called(this, "_ZN7S1520C23v90Ev");}
void  S1520C2 ::v91(){vfunc_called(this, "_ZN7S1520C23v91Ev");}
S1520C2 ::S1520C2(){ note_ctor("S1520C2", this);} // tgen

static void Test_S1520C2()
{
  extern Class_Descriptor cd_S1520C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(14,17)];
    init_test(&cd_S1520C2, buf);
    S1520C2 *dp, &lv = *(dp=new (buf) S1520C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(104,64), "sizeof(S1520C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1520C2)");
    check_base_class_offset(lv, (S1520C4*)(S1520C3*), 0, "S1520C2");
    check_base_class_offset(lv, (S1520C3*), 0, "S1520C2");
    test_class_info(&lv, &cd_S1520C2);
    dp->~S1520C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1520C2(Test_S1520C2, "S1520C2", ABISELECT(104,64));

#else // __cplusplus

extern void _ZN7S1520C2C1Ev();
extern void _ZN7S1520C2D1Ev();
Name_Map name_map_S1520C2[] = {
  NSPAIR(_ZN7S1520C2C1Ev),
  NSPAIR(_ZN7S1520C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1520C4;
extern VTBL_ENTRY _ZTI7S1520C4[];
extern  VTBL_ENTRY _ZTV7S1520C4[];
extern Class_Descriptor cd_S1520C3;
extern VTBL_ENTRY _ZTI7S1520C3[];
extern  VTBL_ENTRY _ZTV7S1520C3[];
static Base_Class bases_S1520C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1520C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S1520C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S1520C2[];
extern void _ZN7S1520C2D1Ev();
extern void _ZN7S1520C2D0Ev();
extern void _ZN7S1520C42v6Ev();
extern void _ZN7S1520C42v7Ev();
extern void _ZN7S1520C42v8Ev();
extern void _ZN7S1520C42v9Ev();
extern void _ZN7S1520C43v10Ev();
extern void _ZN7S1520C43v11Ev();
extern void _ZN7S1520C43v12Ev();
extern void _ZN7S1520C43v13Ev();
extern void _ZN7S1520C43v14Ev();
extern void _ZN7S1520C43v15Ev();
extern void _ZN7S1520C43v16Ev();
extern void _ZN7S1520C43v17Ev();
extern void _ZN7S1520C43v18Ev();
extern void _ZN7S1520C43v19Ev();
extern void _ZN7S1520C43v20Ev();
extern void _ZN7S1520C43v21Ev();
extern void _ZN7S1520C43v22Ev();
extern void _ZN7S1520C43v23Ev();
extern void _ZN7S1520C43v24Ev();
extern void _ZN7S1520C43v25Ev();
extern void _ZN7S1520C43v26Ev();
extern void _ZN7S1520C43v27Ev();
extern void _ZN7S1520C43v28Ev();
extern void _ZN7S1520C43v29Ev();
extern void _ZN7S1520C43v30Ev();
extern void _ZN7S1520C43v31Ev();
extern void _ZN7S1520C43v32Ev();
extern void _ZN7S1520C43v33Ev();
extern void _ZN7S1520C43v34Ev();
extern void _ZN7S1520C43v35Ev();
extern void _ZN7S1520C43v36Ev();
extern void _ZN7S1520C43v37Ev();
extern void _ZN7S1520C43v38Ev();
extern void _ZN7S1520C43v39Ev();
extern void _ZN7S1520C43v40Ev();
extern void _ZN7S1520C43v41Ev();
extern void _ZN7S1520C43v42Ev();
extern void _ZN7S1520C43v43Ev();
extern void _ZN7S1520C43v44Ev();
extern void _ZN7S1520C43v45Ev();
extern void _ZN7S1520C43v46Ev();
extern void _ZN7S1520C43v47Ev();
extern void _ZN7S1520C43v48Ev();
extern void _ZN7S1520C43v49Ev();
extern void _ZN7S1520C43v50Ev();
extern void _ZN7S1520C43v51Ev();
extern void _ZN7S1520C43v52Ev();
extern void _ZN7S1520C43v53Ev();
extern void _ZN7S1520C43v54Ev();
extern void _ZN7S1520C43v55Ev();
extern void _ZN7S1520C43v56Ev();
extern void _ZN7S1520C43v57Ev();
extern void _ZN7S1520C43v58Ev();
extern void _ZN7S1520C43v59Ev();
extern void _ZN7S1520C43v60Ev();
extern void _ZN7S1520C43v61Ev();
extern void _ZN7S1520C43v62Ev();
extern void _ZN7S1520C43v63Ev();
extern void _ZN7S1520C43v64Ev();
extern void _ZN7S1520C43v65Ev();
extern void _ZN7S1520C43v66Ev();
extern void _ZN7S1520C43v67Ev();
extern void _ZN7S1520C43v68Ev();
extern void _ZN7S1520C43v69Ev();
extern void _ZN7S1520C33v70Ev();
extern void _ZN7S1520C33v71Ev();
extern void _ZN7S1520C33v72Ev();
extern void _ZN7S1520C33v73Ev();
extern void _ZN7S1520C33v74Ev();
extern void _ZN7S1520C33v75Ev();
extern void _ZN7S1520C33v76Ev();
extern void _ZN7S1520C33v77Ev();
extern void _ZN7S1520C33v78Ev();
extern void _ZN7S1520C33v79Ev();
extern void _ZN7S1520C33v80Ev();
extern void _ZN7S1520C33v81Ev();
extern void _ZN7S1520C33v82Ev();
extern void _ZN7S1520C33v83Ev();
extern void _ZN7S1520C33v84Ev();
extern void _ZN7S1520C33v85Ev();
extern void _ZN7S1520C33v86Ev();
extern void _ZN7S1520C33v87Ev();
extern void _ZN7S1520C33v88Ev();
extern void _ZN7S1520C33v89Ev();
extern void _ZN7S1520C23v90Ev();
extern void _ZN7S1520C23v91Ev();
static  VTBL_ENTRY vtc_S1520C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1520C2[0]),
  (VTBL_ENTRY)&_ZN7S1520C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1520C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1520C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1520C42v7Ev,
  (VTBL_ENTRY)&_ZN7S1520C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1520C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1520C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1520C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1520C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1520C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1520C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1520C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1520C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1520C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1520C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1520C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1520C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1520C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1520C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1520C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1520C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1520C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1520C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1520C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1520C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1520C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1520C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1520C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1520C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1520C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1520C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1520C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1520C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1520C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1520C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1520C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1520C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1520C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1520C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1520C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1520C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1520C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1520C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1520C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1520C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1520C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1520C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1520C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1520C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1520C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1520C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1520C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1520C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1520C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1520C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1520C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1520C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1520C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1520C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1520C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1520C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1520C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1520C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1520C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1520C43v68Ev,
  (VTBL_ENTRY)&_ZN7S1520C43v69Ev,
  (VTBL_ENTRY)&_ZN7S1520C33v70Ev,
  (VTBL_ENTRY)&_ZN7S1520C33v71Ev,
  (VTBL_ENTRY)&_ZN7S1520C33v72Ev,
  (VTBL_ENTRY)&_ZN7S1520C33v73Ev,
  (VTBL_ENTRY)&_ZN7S1520C33v74Ev,
  (VTBL_ENTRY)&_ZN7S1520C33v75Ev,
  (VTBL_ENTRY)&_ZN7S1520C33v76Ev,
  (VTBL_ENTRY)&_ZN7S1520C33v77Ev,
  (VTBL_ENTRY)&_ZN7S1520C33v78Ev,
  (VTBL_ENTRY)&_ZN7S1520C33v79Ev,
  (VTBL_ENTRY)&_ZN7S1520C33v80Ev,
  (VTBL_ENTRY)&_ZN7S1520C33v81Ev,
  (VTBL_ENTRY)&_ZN7S1520C33v82Ev,
  (VTBL_ENTRY)&_ZN7S1520C33v83Ev,
  (VTBL_ENTRY)&_ZN7S1520C33v84Ev,
  (VTBL_ENTRY)&_ZN7S1520C33v85Ev,
  (VTBL_ENTRY)&_ZN7S1520C33v86Ev,
  (VTBL_ENTRY)&_ZN7S1520C33v87Ev,
  (VTBL_ENTRY)&_ZN7S1520C33v88Ev,
  (VTBL_ENTRY)&_ZN7S1520C33v89Ev,
  (VTBL_ENTRY)&_ZN7S1520C23v90Ev,
  (VTBL_ENTRY)&_ZN7S1520C23v91Ev,
};
extern VTBL_ENTRY _ZTI7S1520C2[];
extern  VTBL_ENTRY _ZTV7S1520C2[];
Class_Descriptor cd_S1520C2 = {  "S1520C2", // class name
  bases_S1520C2, 2,
  &(vtc_S1520C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(104,64), // object size
  NSPAIRA(_ZTI7S1520C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1520C2),90, //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  S1520C1  : S1520C2 {
  ::S674C42 s1520c1f0;
  ::S674C38 s1520c1f1;
  virtual  ~S1520C1(); // _ZN7S1520C1D1Ev
  virtual void  v1(); // _ZN7S1520C12v1Ev
  virtual void  v2(); // _ZN7S1520C12v2Ev
  virtual void  v3(); // _ZN7S1520C12v3Ev
  virtual void  v4(); // _ZN7S1520C12v4Ev
  virtual void  v5(); // _ZN7S1520C12v5Ev
  S1520C1(); // tgen
};
//SIG(1 S1520C1) C1{ BC2{ BC3{ BC4{ 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 FC5{ m Fi[2]} Fp[2]} vd v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 FC6{ m}} vd v90 v91} vd v1 v2 v3 v4 v5 FC7{ BC8{ BC9{ m Fp Fi[2]}}} FC10{ BC11{ BC9}}}


 S1520C1 ::~S1520C1(){ note_dtor("S1520C1", this);}
void  S1520C1 ::v1(){vfunc_called(this, "_ZN7S1520C12v1Ev");}
void  S1520C1 ::v2(){vfunc_called(this, "_ZN7S1520C12v2Ev");}
void  S1520C1 ::v3(){vfunc_called(this, "_ZN7S1520C12v3Ev");}
void  S1520C1 ::v4(){vfunc_called(this, "_ZN7S1520C12v4Ev");}
void  S1520C1 ::v5(){vfunc_called(this, "_ZN7S1520C12v5Ev");}
S1520C1 ::S1520C1(){ note_ctor("S1520C1", this);} // tgen

static void Test_S1520C1()
{
  extern Class_Descriptor cd_S1520C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(18,23)];
    init_test(&cd_S1520C1, buf);
    S1520C1 *dp, &lv = *(dp=new (buf) S1520C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(136,88), "sizeof(S1520C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1520C1)");
    check_base_class_offset(lv, (S1520C4*)(S1520C3*)(S1520C2*), 0, "S1520C1");
    check_base_class_offset(lv, (S1520C3*)(S1520C2*), 0, "S1520C1");
    check_base_class_offset(lv, (S1520C2*), 0, "S1520C1");
    check_field_offset(lv, s1520c1f0, ABISELECT(104,64), "S1520C1.s1520c1f0");
    check_field_offset(lv, s1520c1f1, ABISELECT(120,76), "S1520C1.s1520c1f1");
    test_class_info(&lv, &cd_S1520C1);
    dp->~S1520C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1520C1(Test_S1520C1, "S1520C1", ABISELECT(136,88));

#else // __cplusplus

extern void _ZN7S1520C1C1Ev();
extern void _ZN7S1520C1D1Ev();
Name_Map name_map_S1520C1[] = {
  NSPAIR(_ZN7S1520C1C1Ev),
  NSPAIR(_ZN7S1520C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1520C4;
extern VTBL_ENTRY _ZTI7S1520C4[];
extern  VTBL_ENTRY _ZTV7S1520C4[];
extern Class_Descriptor cd_S1520C3;
extern VTBL_ENTRY _ZTI7S1520C3[];
extern  VTBL_ENTRY _ZTV7S1520C3[];
extern Class_Descriptor cd_S1520C2;
extern VTBL_ENTRY _ZTI7S1520C2[];
extern  VTBL_ENTRY _ZTV7S1520C2[];
static Base_Class bases_S1520C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1520C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S1520C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S1520C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S1520C1[];
extern void _ZN7S1520C1D1Ev();
extern void _ZN7S1520C1D0Ev();
extern void _ZN7S1520C42v6Ev();
extern void _ZN7S1520C42v7Ev();
extern void _ZN7S1520C42v8Ev();
extern void _ZN7S1520C42v9Ev();
extern void _ZN7S1520C43v10Ev();
extern void _ZN7S1520C43v11Ev();
extern void _ZN7S1520C43v12Ev();
extern void _ZN7S1520C43v13Ev();
extern void _ZN7S1520C43v14Ev();
extern void _ZN7S1520C43v15Ev();
extern void _ZN7S1520C43v16Ev();
extern void _ZN7S1520C43v17Ev();
extern void _ZN7S1520C43v18Ev();
extern void _ZN7S1520C43v19Ev();
extern void _ZN7S1520C43v20Ev();
extern void _ZN7S1520C43v21Ev();
extern void _ZN7S1520C43v22Ev();
extern void _ZN7S1520C43v23Ev();
extern void _ZN7S1520C43v24Ev();
extern void _ZN7S1520C43v25Ev();
extern void _ZN7S1520C43v26Ev();
extern void _ZN7S1520C43v27Ev();
extern void _ZN7S1520C43v28Ev();
extern void _ZN7S1520C43v29Ev();
extern void _ZN7S1520C43v30Ev();
extern void _ZN7S1520C43v31Ev();
extern void _ZN7S1520C43v32Ev();
extern void _ZN7S1520C43v33Ev();
extern void _ZN7S1520C43v34Ev();
extern void _ZN7S1520C43v35Ev();
extern void _ZN7S1520C43v36Ev();
extern void _ZN7S1520C43v37Ev();
extern void _ZN7S1520C43v38Ev();
extern void _ZN7S1520C43v39Ev();
extern void _ZN7S1520C43v40Ev();
extern void _ZN7S1520C43v41Ev();
extern void _ZN7S1520C43v42Ev();
extern void _ZN7S1520C43v43Ev();
extern void _ZN7S1520C43v44Ev();
extern void _ZN7S1520C43v45Ev();
extern void _ZN7S1520C43v46Ev();
extern void _ZN7S1520C43v47Ev();
extern void _ZN7S1520C43v48Ev();
extern void _ZN7S1520C43v49Ev();
extern void _ZN7S1520C43v50Ev();
extern void _ZN7S1520C43v51Ev();
extern void _ZN7S1520C43v52Ev();
extern void _ZN7S1520C43v53Ev();
extern void _ZN7S1520C43v54Ev();
extern void _ZN7S1520C43v55Ev();
extern void _ZN7S1520C43v56Ev();
extern void _ZN7S1520C43v57Ev();
extern void _ZN7S1520C43v58Ev();
extern void _ZN7S1520C43v59Ev();
extern void _ZN7S1520C43v60Ev();
extern void _ZN7S1520C43v61Ev();
extern void _ZN7S1520C43v62Ev();
extern void _ZN7S1520C43v63Ev();
extern void _ZN7S1520C43v64Ev();
extern void _ZN7S1520C43v65Ev();
extern void _ZN7S1520C43v66Ev();
extern void _ZN7S1520C43v67Ev();
extern void _ZN7S1520C43v68Ev();
extern void _ZN7S1520C43v69Ev();
extern void _ZN7S1520C33v70Ev();
extern void _ZN7S1520C33v71Ev();
extern void _ZN7S1520C33v72Ev();
extern void _ZN7S1520C33v73Ev();
extern void _ZN7S1520C33v74Ev();
extern void _ZN7S1520C33v75Ev();
extern void _ZN7S1520C33v76Ev();
extern void _ZN7S1520C33v77Ev();
extern void _ZN7S1520C33v78Ev();
extern void _ZN7S1520C33v79Ev();
extern void _ZN7S1520C33v80Ev();
extern void _ZN7S1520C33v81Ev();
extern void _ZN7S1520C33v82Ev();
extern void _ZN7S1520C33v83Ev();
extern void _ZN7S1520C33v84Ev();
extern void _ZN7S1520C33v85Ev();
extern void _ZN7S1520C33v86Ev();
extern void _ZN7S1520C33v87Ev();
extern void _ZN7S1520C33v88Ev();
extern void _ZN7S1520C33v89Ev();
extern void _ZN7S1520C23v90Ev();
extern void _ZN7S1520C23v91Ev();
extern void _ZN7S1520C12v1Ev();
extern void _ZN7S1520C12v2Ev();
extern void _ZN7S1520C12v3Ev();
extern void _ZN7S1520C12v4Ev();
extern void _ZN7S1520C12v5Ev();
static  VTBL_ENTRY vtc_S1520C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1520C1[0]),
  (VTBL_ENTRY)&_ZN7S1520C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1520C1D0Ev,
  (VTBL_ENTRY)&_ZN7S1520C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1520C42v7Ev,
  (VTBL_ENTRY)&_ZN7S1520C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1520C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1520C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1520C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1520C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1520C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1520C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1520C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1520C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1520C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1520C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1520C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1520C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1520C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1520C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1520C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1520C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1520C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1520C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1520C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1520C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1520C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1520C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1520C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1520C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1520C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1520C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1520C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1520C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1520C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1520C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1520C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1520C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1520C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1520C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1520C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1520C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1520C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1520C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1520C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1520C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1520C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1520C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1520C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1520C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1520C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1520C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1520C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1520C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1520C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1520C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1520C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1520C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1520C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1520C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1520C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1520C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1520C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1520C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1520C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1520C43v68Ev,
  (VTBL_ENTRY)&_ZN7S1520C43v69Ev,
  (VTBL_ENTRY)&_ZN7S1520C33v70Ev,
  (VTBL_ENTRY)&_ZN7S1520C33v71Ev,
  (VTBL_ENTRY)&_ZN7S1520C33v72Ev,
  (VTBL_ENTRY)&_ZN7S1520C33v73Ev,
  (VTBL_ENTRY)&_ZN7S1520C33v74Ev,
  (VTBL_ENTRY)&_ZN7S1520C33v75Ev,
  (VTBL_ENTRY)&_ZN7S1520C33v76Ev,
  (VTBL_ENTRY)&_ZN7S1520C33v77Ev,
  (VTBL_ENTRY)&_ZN7S1520C33v78Ev,
  (VTBL_ENTRY)&_ZN7S1520C33v79Ev,
  (VTBL_ENTRY)&_ZN7S1520C33v80Ev,
  (VTBL_ENTRY)&_ZN7S1520C33v81Ev,
  (VTBL_ENTRY)&_ZN7S1520C33v82Ev,
  (VTBL_ENTRY)&_ZN7S1520C33v83Ev,
  (VTBL_ENTRY)&_ZN7S1520C33v84Ev,
  (VTBL_ENTRY)&_ZN7S1520C33v85Ev,
  (VTBL_ENTRY)&_ZN7S1520C33v86Ev,
  (VTBL_ENTRY)&_ZN7S1520C33v87Ev,
  (VTBL_ENTRY)&_ZN7S1520C33v88Ev,
  (VTBL_ENTRY)&_ZN7S1520C33v89Ev,
  (VTBL_ENTRY)&_ZN7S1520C23v90Ev,
  (VTBL_ENTRY)&_ZN7S1520C23v91Ev,
  (VTBL_ENTRY)&_ZN7S1520C12v1Ev,
  (VTBL_ENTRY)&_ZN7S1520C12v2Ev,
  (VTBL_ENTRY)&_ZN7S1520C12v3Ev,
  (VTBL_ENTRY)&_ZN7S1520C12v4Ev,
  (VTBL_ENTRY)&_ZN7S1520C12v5Ev,
};
extern VTBL_ENTRY _ZTI7S1520C1[];
extern  VTBL_ENTRY _ZTV7S1520C1[];
Class_Descriptor cd_S1520C1 = {  "S1520C1", // class name
  bases_S1520C1, 3,
  &(vtc_S1520C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(136,88), // object size
  NSPAIRA(_ZTI7S1520C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1520C1),95, //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  S1521C4  {
  int s1521c4f0;
  __tsi64 s1521c4f1;
  void *s1521c4f2[4];
  int s1521c4f3[2];
  void *s1521c4f4;
  ::S674C6_nt s1521c4f5;
  void *s1521c4f6[2];
  virtual  ~S1521C4(); // _ZN7S1521C4D1Ev
  virtual void  v6(); // _ZN7S1521C42v6Ev
  virtual void  v7(); // _ZN7S1521C42v7Ev
  virtual void  v8(); // _ZN7S1521C42v8Ev
  virtual void  v9(); // _ZN7S1521C42v9Ev
  virtual void  v10(); // _ZN7S1521C43v10Ev
  virtual void  v11(); // _ZN7S1521C43v11Ev
  virtual void  v12(); // _ZN7S1521C43v12Ev
  virtual void  v13(); // _ZN7S1521C43v13Ev
  virtual void  v14(); // _ZN7S1521C43v14Ev
  virtual void  v15(); // _ZN7S1521C43v15Ev
  virtual void  v16(); // _ZN7S1521C43v16Ev
  virtual void  v17(); // _ZN7S1521C43v17Ev
  virtual void  v18(); // _ZN7S1521C43v18Ev
  virtual void  v19(); // _ZN7S1521C43v19Ev
  virtual void  v20(); // _ZN7S1521C43v20Ev
  virtual void  v21(); // _ZN7S1521C43v21Ev
  virtual void  v22(); // _ZN7S1521C43v22Ev
  virtual void  v23(); // _ZN7S1521C43v23Ev
  virtual void  v24(); // _ZN7S1521C43v24Ev
  virtual void  v25(); // _ZN7S1521C43v25Ev
  virtual void  v26(); // _ZN7S1521C43v26Ev
  virtual void  v27(); // _ZN7S1521C43v27Ev
  virtual void  v28(); // _ZN7S1521C43v28Ev
  virtual void  v29(); // _ZN7S1521C43v29Ev
  virtual void  v30(); // _ZN7S1521C43v30Ev
  virtual void  v31(); // _ZN7S1521C43v31Ev
  virtual void  v32(); // _ZN7S1521C43v32Ev
  virtual void  v33(); // _ZN7S1521C43v33Ev
  virtual void  v34(); // _ZN7S1521C43v34Ev
  virtual void  v35(); // _ZN7S1521C43v35Ev
  virtual void  v36(); // _ZN7S1521C43v36Ev
  virtual void  v37(); // _ZN7S1521C43v37Ev
  virtual void  v38(); // _ZN7S1521C43v38Ev
  virtual void  v39(); // _ZN7S1521C43v39Ev
  virtual void  v40(); // _ZN7S1521C43v40Ev
  virtual void  v41(); // _ZN7S1521C43v41Ev
  virtual void  v42(); // _ZN7S1521C43v42Ev
  virtual void  v43(); // _ZN7S1521C43v43Ev
  virtual void  v44(); // _ZN7S1521C43v44Ev
  virtual void  v45(); // _ZN7S1521C43v45Ev
  virtual void  v46(); // _ZN7S1521C43v46Ev
  virtual void  v47(); // _ZN7S1521C43v47Ev
  virtual void  v48(); // _ZN7S1521C43v48Ev
  virtual void  v49(); // _ZN7S1521C43v49Ev
  virtual void  v50(); // _ZN7S1521C43v50Ev
  virtual void  v51(); // _ZN7S1521C43v51Ev
  virtual void  v52(); // _ZN7S1521C43v52Ev
  virtual void  v53(); // _ZN7S1521C43v53Ev
  virtual void  v54(); // _ZN7S1521C43v54Ev
  virtual void  v55(); // _ZN7S1521C43v55Ev
  virtual void  v56(); // _ZN7S1521C43v56Ev
  virtual void  v57(); // _ZN7S1521C43v57Ev
  virtual void  v58(); // _ZN7S1521C43v58Ev
  virtual void  v59(); // _ZN7S1521C43v59Ev
  virtual void  v60(); // _ZN7S1521C43v60Ev
  virtual void  v61(); // _ZN7S1521C43v61Ev
  virtual void  v62(); // _ZN7S1521C43v62Ev
  virtual void  v63(); // _ZN7S1521C43v63Ev
  virtual void  v64(); // _ZN7S1521C43v64Ev
  virtual void  v65(); // _ZN7S1521C43v65Ev
  virtual void  v66(); // _ZN7S1521C43v66Ev
  virtual void  v67(); // _ZN7S1521C43v67Ev
  virtual void  v68(); // _ZN7S1521C43v68Ev
  virtual void  v69(); // _ZN7S1521C43v69Ev
  S1521C4(); // tgen
};
//SIG(-1 S1521C4) 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]}


 S1521C4 ::~S1521C4(){ note_dtor("S1521C4", this);}
void  S1521C4 ::v6(){vfunc_called(this, "_ZN7S1521C42v6Ev");}
void  S1521C4 ::v7(){vfunc_called(this, "_ZN7S1521C42v7Ev");}
void  S1521C4 ::v8(){vfunc_called(this, "_ZN7S1521C42v8Ev");}
void  S1521C4 ::v9(){vfunc_called(this, "_ZN7S1521C42v9Ev");}
void  S1521C4 ::v10(){vfunc_called(this, "_ZN7S1521C43v10Ev");}
void  S1521C4 ::v11(){vfunc_called(this, "_ZN7S1521C43v11Ev");}
void  S1521C4 ::v12(){vfunc_called(this, "_ZN7S1521C43v12Ev");}
void  S1521C4 ::v13(){vfunc_called(this, "_ZN7S1521C43v13Ev");}
void  S1521C4 ::v14(){vfunc_called(this, "_ZN7S1521C43v14Ev");}
void  S1521C4 ::v15(){vfunc_called(this, "_ZN7S1521C43v15Ev");}
void  S1521C4 ::v16(){vfunc_called(this, "_ZN7S1521C43v16Ev");}
void  S1521C4 ::v17(){vfunc_called(this, "_ZN7S1521C43v17Ev");}
void  S1521C4 ::v18(){vfunc_called(this, "_ZN7S1521C43v18Ev");}
void  S1521C4 ::v19(){vfunc_called(this, "_ZN7S1521C43v19Ev");}
void  S1521C4 ::v20(){vfunc_called(this, "_ZN7S1521C43v20Ev");}
void  S1521C4 ::v21(){vfunc_called(this, "_ZN7S1521C43v21Ev");}
void  S1521C4 ::v22(){vfunc_called(this, "_ZN7S1521C43v22Ev");}
void  S1521C4 ::v23(){vfunc_called(this, "_ZN7S1521C43v23Ev");}
void  S1521C4 ::v24(){vfunc_called(this, "_ZN7S1521C43v24Ev");}
void  S1521C4 ::v25(){vfunc_called(this, "_ZN7S1521C43v25Ev");}
void  S1521C4 ::v26(){vfunc_called(this, "_ZN7S1521C43v26Ev");}
void  S1521C4 ::v27(){vfunc_called(this, "_ZN7S1521C43v27Ev");}
void  S1521C4 ::v28(){vfunc_called(this, "_ZN7S1521C43v28Ev");}
void  S1521C4 ::v29(){vfunc_called(this, "_ZN7S1521C43v29Ev");}
void  S1521C4 ::v30(){vfunc_called(this, "_ZN7S1521C43v30Ev");}
void  S1521C4 ::v31(){vfunc_called(this, "_ZN7S1521C43v31Ev");}
void  S1521C4 ::v32(){vfunc_called(this, "_ZN7S1521C43v32Ev");}
void  S1521C4 ::v33(){vfunc_called(this, "_ZN7S1521C43v33Ev");}
void  S1521C4 ::v34(){vfunc_called(this, "_ZN7S1521C43v34Ev");}
void  S1521C4 ::v35(){vfunc_called(this, "_ZN7S1521C43v35Ev");}
void  S1521C4 ::v36(){vfunc_called(this, "_ZN7S1521C43v36Ev");}
void  S1521C4 ::v37(){vfunc_called(this, "_ZN7S1521C43v37Ev");}
void  S1521C4 ::v38(){vfunc_called(this, "_ZN7S1521C43v38Ev");}
void  S1521C4 ::v39(){vfunc_called(this, "_ZN7S1521C43v39Ev");}
void  S1521C4 ::v40(){vfunc_called(this, "_ZN7S1521C43v40Ev");}
void  S1521C4 ::v41(){vfunc_called(this, "_ZN7S1521C43v41Ev");}
void  S1521C4 ::v42(){vfunc_called(this, "_ZN7S1521C43v42Ev");}
void  S1521C4 ::v43(){vfunc_called(this, "_ZN7S1521C43v43Ev");}
void  S1521C4 ::v44(){vfunc_called(this, "_ZN7S1521C43v44Ev");}
void  S1521C4 ::v45(){vfunc_called(this, "_ZN7S1521C43v45Ev");}
void  S1521C4 ::v46(){vfunc_called(this, "_ZN7S1521C43v46Ev");}
void  S1521C4 ::v47(){vfunc_called(this, "_ZN7S1521C43v47Ev");}
void  S1521C4 ::v48(){vfunc_called(this, "_ZN7S1521C43v48Ev");}
void  S1521C4 ::v49(){vfunc_called(this, "_ZN7S1521C43v49Ev");}
void  S1521C4 ::v50(){vfunc_called(this, "_ZN7S1521C43v50Ev");}
void  S1521C4 ::v51(){vfunc_called(this, "_ZN7S1521C43v51Ev");}
void  S1521C4 ::v52(){vfunc_called(this, "_ZN7S1521C43v52Ev");}
void  S1521C4 ::v53(){vfunc_called(this, "_ZN7S1521C43v53Ev");}
void  S1521C4 ::v54(){vfunc_called(this, "_ZN7S1521C43v54Ev");}
void  S1521C4 ::v55(){vfunc_called(this, "_ZN7S1521C43v55Ev");}
void  S1521C4 ::v56(){vfunc_called(this, "_ZN7S1521C43v56Ev");}
void  S1521C4 ::v57(){vfunc_called(this, "_ZN7S1521C43v57Ev");}
void  S1521C4 ::v58(){vfunc_called(this, "_ZN7S1521C43v58Ev");}
void  S1521C4 ::v59(){vfunc_called(this, "_ZN7S1521C43v59Ev");}
void  S1521C4 ::v60(){vfunc_called(this, "_ZN7S1521C43v60Ev");}
void  S1521C4 ::v61(){vfunc_called(this, "_ZN7S1521C43v61Ev");}
void  S1521C4 ::v62(){vfunc_called(this, "_ZN7S1521C43v62Ev");}
void  S1521C4 ::v63(){vfunc_called(this, "_ZN7S1521C43v63Ev");}
void  S1521C4 ::v64(){vfunc_called(this, "_ZN7S1521C43v64Ev");}
void  S1521C4 ::v65(){vfunc_called(this, "_ZN7S1521C43v65Ev");}
void  S1521C4 ::v66(){vfunc_called(this, "_ZN7S1521C43v66Ev");}
void  S1521C4 ::v67(){vfunc_called(this, "_ZN7S1521C43v67Ev");}
void  S1521C4 ::v68(){vfunc_called(this, "_ZN7S1521C43v68Ev");}
void  S1521C4 ::v69(){vfunc_called(this, "_ZN7S1521C43v69Ev");}
S1521C4 ::S1521C4(){ note_ctor("S1521C4", this);} // tgen

static void Test_S1521C4()
{
  extern Class_Descriptor cd_S1521C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S1521C4, buf);
    S1521C4 *dp, &lv = *(dp=new (buf) S1521C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S1521C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1521C4)");
    check_field_offset(lv, s1521c4f0, ABISELECT(8,4), "S1521C4.s1521c4f0");
    check_field_offset(lv, s1521c4f1, ABISELECT(16,8), "S1521C4.s1521c4f1");
    check_field_offset(lv, s1521c4f2, ABISELECT(24,16), "S1521C4.s1521c4f2");
    check_field_offset(lv, s1521c4f3, ABISELECT(56,32), "S1521C4.s1521c4f3");
    check_field_offset(lv, s1521c4f4, ABISELECT(64,40), "S1521C4.s1521c4f4");
    check_field_offset(lv, s1521c4f5, ABISELECT(72,44), "S1521C4.s1521c4f5");
    check_field_offset(lv, s1521c4f6, ABISELECT(80,52), "S1521C4.s1521c4f6");
    test_class_info(&lv, &cd_S1521C4);
    dp->~S1521C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1521C4(Test_S1521C4, "S1521C4", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN7S1521C4C1Ev();
extern void _ZN7S1521C4D1Ev();
Name_Map name_map_S1521C4[] = {
  NSPAIR(_ZN7S1521C4C1Ev),
  NSPAIR(_ZN7S1521C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S1521C4[];
extern void _ZN7S1521C4D1Ev();
extern void _ZN7S1521C4D0Ev();
extern void _ZN7S1521C42v6Ev();
extern void _ZN7S1521C42v7Ev();
extern void _ZN7S1521C42v8Ev();
extern void _ZN7S1521C42v9Ev();
extern void _ZN7S1521C43v10Ev();
extern void _ZN7S1521C43v11Ev();
extern void _ZN7S1521C43v12Ev();
extern void _ZN7S1521C43v13Ev();
extern void _ZN7S1521C43v14Ev();
extern void _ZN7S1521C43v15Ev();
extern void _ZN7S1521C43v16Ev();
extern void _ZN7S1521C43v17Ev();
extern void _ZN7S1521C43v18Ev();
extern void _ZN7S1521C43v19Ev();
extern void _ZN7S1521C43v20Ev();
extern void _ZN7S1521C43v21Ev();
extern void _ZN7S1521C43v22Ev();
extern void _ZN7S1521C43v23Ev();
extern void _ZN7S1521C43v24Ev();
extern void _ZN7S1521C43v25Ev();
extern void _ZN7S1521C43v26Ev();
extern void _ZN7S1521C43v27Ev();
extern void _ZN7S1521C43v28Ev();
extern void _ZN7S1521C43v29Ev();
extern void _ZN7S1521C43v30Ev();
extern void _ZN7S1521C43v31Ev();
extern void _ZN7S1521C43v32Ev();
extern void _ZN7S1521C43v33Ev();
extern void _ZN7S1521C43v34Ev();
extern void _ZN7S1521C43v35Ev();
extern void _ZN7S1521C43v36Ev();
extern void _ZN7S1521C43v37Ev();
extern void _ZN7S1521C43v38Ev();
extern void _ZN7S1521C43v39Ev();
extern void _ZN7S1521C43v40Ev();
extern void _ZN7S1521C43v41Ev();
extern void _ZN7S1521C43v42Ev();
extern void _ZN7S1521C43v43Ev();
extern void _ZN7S1521C43v44Ev();
extern void _ZN7S1521C43v45Ev();
extern void _ZN7S1521C43v46Ev();
extern void _ZN7S1521C43v47Ev();
extern void _ZN7S1521C43v48Ev();
extern void _ZN7S1521C43v49Ev();
extern void _ZN7S1521C43v50Ev();
extern void _ZN7S1521C43v51Ev();
extern void _ZN7S1521C43v52Ev();
extern void _ZN7S1521C43v53Ev();
extern void _ZN7S1521C43v54Ev();
extern void _ZN7S1521C43v55Ev();
extern void _ZN7S1521C43v56Ev();
extern void _ZN7S1521C43v57Ev();
extern void _ZN7S1521C43v58Ev();
extern void _ZN7S1521C43v59Ev();
extern void _ZN7S1521C43v60Ev();
extern void _ZN7S1521C43v61Ev();
extern void _ZN7S1521C43v62Ev();
extern void _ZN7S1521C43v63Ev();
extern void _ZN7S1521C43v64Ev();
extern void _ZN7S1521C43v65Ev();
extern void _ZN7S1521C43v66Ev();
extern void _ZN7S1521C43v67Ev();
extern void _ZN7S1521C43v68Ev();
extern void _ZN7S1521C43v69Ev();
static  VTBL_ENTRY vtc_S1521C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1521C4[0]),
  (VTBL_ENTRY)&_ZN7S1521C4D1Ev,
  (VTBL_ENTRY)&_ZN7S1521C4D0Ev,
  (VTBL_ENTRY)&_ZN7S1521C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1521C42v7Ev,
  (VTBL_ENTRY)&_ZN7S1521C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1521C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1521C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1521C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1521C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1521C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1521C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1521C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1521C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1521C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1521C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1521C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1521C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1521C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1521C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1521C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1521C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1521C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1521C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1521C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1521C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1521C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1521C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1521C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1521C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1521C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1521C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1521C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1521C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1521C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1521C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1521C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1521C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1521C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1521C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1521C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1521C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1521C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1521C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1521C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1521C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1521C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1521C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1521C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1521C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1521C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1521C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1521C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1521C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1521C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1521C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1521C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1521C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1521C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1521C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1521C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1521C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1521C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1521C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1521C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1521C43v68Ev,
  (VTBL_ENTRY)&_ZN7S1521C43v69Ev,
};
extern VTBL_ENTRY _ZTI7S1521C4[];
extern  VTBL_ENTRY _ZTV7S1521C4[];
Class_Descriptor cd_S1521C4 = {  "S1521C4", // class name
  0,0,//no base classes
  &(vtc_S1521C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI7S1521C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S1521C4),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  S1521C3  : S1521C4 {
  unsigned int s1521c3f0:1;
  unsigned int s1521c3f1:1;
  unsigned int s1521c3f2:1;
  unsigned int s1521c3f3:1;
  unsigned int s1521c3f4:1;
  unsigned int s1521c3f5:1;
  unsigned int s1521c3f6:1;
  ::S3625C32 s1521c3f7;
  virtual  ~S1521C3(); // _ZN7S1521C3D1Ev
  virtual void  v70(); // _ZN7S1521C33v70Ev
  virtual void  v71(); // _ZN7S1521C33v71Ev
  virtual void  v72(); // _ZN7S1521C33v72Ev
  virtual void  v73(); // _ZN7S1521C33v73Ev
  virtual void  v74(); // _ZN7S1521C33v74Ev
  virtual void  v75(); // _ZN7S1521C33v75Ev
  virtual void  v76(); // _ZN7S1521C33v76Ev
  virtual void  v77(); // _ZN7S1521C33v77Ev
  virtual void  v78(); // _ZN7S1521C33v78Ev
  virtual void  v79(); // _ZN7S1521C33v79Ev
  virtual void  v80(); // _ZN7S1521C33v80Ev
  virtual void  v81(); // _ZN7S1521C33v81Ev
  virtual void  v82(); // _ZN7S1521C33v82Ev
  virtual void  v83(); // _ZN7S1521C33v83Ev
  virtual void  v84(); // _ZN7S1521C33v84Ev
  virtual void  v85(); // _ZN7S1521C33v85Ev
  virtual void  v86(); // _ZN7S1521C33v86Ev
  virtual void  v87(); // _ZN7S1521C33v87Ev
  virtual void  v88(); // _ZN7S1521C33v88Ev
  virtual void  v89(); // _ZN7S1521C33v89Ev
  S1521C3(); // tgen
};
//SIG(-1 S1521C3) C1{ BC2{ 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 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 Fi FL Fp[4] Fi[2] Fp FC3{ m Fi[2]} Fp[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 FC4{ m}}


 S1521C3 ::~S1521C3(){ note_dtor("S1521C3", this);}
void  S1521C3 ::v70(){vfunc_called(this, "_ZN7S1521C33v70Ev");}
void  S1521C3 ::v71(){vfunc_called(this, "_ZN7S1521C33v71Ev");}
void  S1521C3 ::v72(){vfunc_called(this, "_ZN7S1521C33v72Ev");}
void  S1521C3 ::v73(){vfunc_called(this, "_ZN7S1521C33v73Ev");}
void  S1521C3 ::v74(){vfunc_called(this, "_ZN7S1521C33v74Ev");}
void  S1521C3 ::v75(){vfunc_called(this, "_ZN7S1521C33v75Ev");}
void  S1521C3 ::v76(){vfunc_called(this, "_ZN7S1521C33v76Ev");}
void  S1521C3 ::v77(){vfunc_called(this, "_ZN7S1521C33v77Ev");}
void  S1521C3 ::v78(){vfunc_called(this, "_ZN7S1521C33v78Ev");}
void  S1521C3 ::v79(){vfunc_called(this, "_ZN7S1521C33v79Ev");}
void  S1521C3 ::v80(){vfunc_called(this, "_ZN7S1521C33v80Ev");}
void  S1521C3 ::v81(){vfunc_called(this, "_ZN7S1521C33v81Ev");}
void  S1521C3 ::v82(){vfunc_called(this, "_ZN7S1521C33v82Ev");}
void  S1521C3 ::v83(){vfunc_called(this, "_ZN7S1521C33v83Ev");}
void  S1521C3 ::v84(){vfunc_called(this, "_ZN7S1521C33v84Ev");}
void  S1521C3 ::v85(){vfunc_called(this, "_ZN7S1521C33v85Ev");}
void  S1521C3 ::v86(){vfunc_called(this, "_ZN7S1521C33v86Ev");}
void  S1521C3 ::v87(){vfunc_called(this, "_ZN7S1521C33v87Ev");}
void  S1521C3 ::v88(){vfunc_called(this, "_ZN7S1521C33v88Ev");}
void  S1521C3 ::v89(){vfunc_called(this, "_ZN7S1521C33v89Ev");}
S1521C3 ::S1521C3(){ note_ctor("S1521C3", this);} // tgen

static void Test_S1521C3()
{
  extern Class_Descriptor cd_S1521C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(14,17)];
    init_test(&cd_S1521C3, buf);
    S1521C3 *dp, &lv = *(dp=new (buf) S1521C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(104,64), "sizeof(S1521C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1521C3)");
    check_base_class_offset(lv, (S1521C4*), 0, "S1521C3");
    set_bf_and_test(lv, s1521c3f0, ABISELECT(96,60), 0, 1, 1, "S1521C3");
    set_bf_and_test(lv, s1521c3f1, ABISELECT(96,60), 1, 1, 1, "S1521C3");
    set_bf_and_test(lv, s1521c3f2, ABISELECT(96,60), 2, 1, 1, "S1521C3");
    set_bf_and_test(lv, s1521c3f3, ABISELECT(96,60), 3, 1, 1, "S1521C3");
    set_bf_and_test(lv, s1521c3f4, ABISELECT(96,60), 4, 1, 1, "S1521C3");
    set_bf_and_test(lv, s1521c3f5, ABISELECT(96,60), 5, 1, 1, "S1521C3");
    set_bf_and_test(lv, s1521c3f6, ABISELECT(96,60), 6, 1, 1, "S1521C3");
    check_field_offset(lv, s1521c3f7, ABISELECT(97,61), "S1521C3.s1521c3f7");
    test_class_info(&lv, &cd_S1521C3);
    dp->~S1521C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1521C3(Test_S1521C3, "S1521C3", ABISELECT(104,64));

#else // __cplusplus

extern void _ZN7S1521C3C1Ev();
extern void _ZN7S1521C3D1Ev();
Name_Map name_map_S1521C3[] = {
  NSPAIR(_ZN7S1521C3C1Ev),
  NSPAIR(_ZN7S1521C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1521C4;
extern VTBL_ENTRY _ZTI7S1521C4[];
extern  VTBL_ENTRY _ZTV7S1521C4[];
static Base_Class bases_S1521C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1521C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI7S1521C3[];
extern void _ZN7S1521C3D1Ev();
extern void _ZN7S1521C3D0Ev();
extern void _ZN7S1521C42v6Ev();
extern void _ZN7S1521C42v7Ev();
extern void _ZN7S1521C42v8Ev();
extern void _ZN7S1521C42v9Ev();
extern void _ZN7S1521C43v10Ev();
extern void _ZN7S1521C43v11Ev();
extern void _ZN7S1521C43v12Ev();
extern void _ZN7S1521C43v13Ev();
extern void _ZN7S1521C43v14Ev();
extern void _ZN7S1521C43v15Ev();
extern void _ZN7S1521C43v16Ev();
extern void _ZN7S1521C43v17Ev();
extern void _ZN7S1521C43v18Ev();
extern void _ZN7S1521C43v19Ev();
extern void _ZN7S1521C43v20Ev();
extern void _ZN7S1521C43v21Ev();
extern void _ZN7S1521C43v22Ev();
extern void _ZN7S1521C43v23Ev();
extern void _ZN7S1521C43v24Ev();
extern void _ZN7S1521C43v25Ev();
extern void _ZN7S1521C43v26Ev();
extern void _ZN7S1521C43v27Ev();
extern void _ZN7S1521C43v28Ev();
extern void _ZN7S1521C43v29Ev();
extern void _ZN7S1521C43v30Ev();
extern void _ZN7S1521C43v31Ev();
extern void _ZN7S1521C43v32Ev();
extern void _ZN7S1521C43v33Ev();
extern void _ZN7S1521C43v34Ev();
extern void _ZN7S1521C43v35Ev();
extern void _ZN7S1521C43v36Ev();
extern void _ZN7S1521C43v37Ev();
extern void _ZN7S1521C43v38Ev();
extern void _ZN7S1521C43v39Ev();
extern void _ZN7S1521C43v40Ev();
extern void _ZN7S1521C43v41Ev();
extern void _ZN7S1521C43v42Ev();
extern void _ZN7S1521C43v43Ev();
extern void _ZN7S1521C43v44Ev();
extern void _ZN7S1521C43v45Ev();
extern void _ZN7S1521C43v46Ev();
extern void _ZN7S1521C43v47Ev();
extern void _ZN7S1521C43v48Ev();
extern void _ZN7S1521C43v49Ev();
extern void _ZN7S1521C43v50Ev();
extern void _ZN7S1521C43v51Ev();
extern void _ZN7S1521C43v52Ev();
extern void _ZN7S1521C43v53Ev();
extern void _ZN7S1521C43v54Ev();
extern void _ZN7S1521C43v55Ev();
extern void _ZN7S1521C43v56Ev();
extern void _ZN7S1521C43v57Ev();
extern void _ZN7S1521C43v58Ev();
extern void _ZN7S1521C43v59Ev();
extern void _ZN7S1521C43v60Ev();
extern void _ZN7S1521C43v61Ev();
extern void _ZN7S1521C43v62Ev();
extern void _ZN7S1521C43v63Ev();
extern void _ZN7S1521C43v64Ev();
extern void _ZN7S1521C43v65Ev();
extern void _ZN7S1521C43v66Ev();
extern void _ZN7S1521C43v67Ev();
extern void _ZN7S1521C43v68Ev();
extern void _ZN7S1521C43v69Ev();
extern void _ZN7S1521C33v70Ev();
extern void _ZN7S1521C33v71Ev();
extern void _ZN7S1521C33v72Ev();
extern void _ZN7S1521C33v73Ev();
extern void _ZN7S1521C33v74Ev();
extern void _ZN7S1521C33v75Ev();
extern void _ZN7S1521C33v76Ev();
extern void _ZN7S1521C33v77Ev();
extern void _ZN7S1521C33v78Ev();
extern void _ZN7S1521C33v79Ev();
extern void _ZN7S1521C33v80Ev();
extern void _ZN7S1521C33v81Ev();
extern void _ZN7S1521C33v82Ev();
extern void _ZN7S1521C33v83Ev();
extern void _ZN7S1521C33v84Ev();
extern void _ZN7S1521C33v85Ev();
extern void _ZN7S1521C33v86Ev();
extern void _ZN7S1521C33v87Ev();
extern void _ZN7S1521C33v88Ev();
extern void _ZN7S1521C33v89Ev();
static  VTBL_ENTRY vtc_S1521C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1521C3[0]),
  (VTBL_ENTRY)&_ZN7S1521C3D1Ev,
  (VTBL_ENTRY)&_ZN7S1521C3D0Ev,
  (VTBL_ENTRY)&_ZN7S1521C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1521C42v7Ev,
  (VTBL_ENTRY)&_ZN7S1521C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1521C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1521C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1521C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1521C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1521C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1521C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1521C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1521C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1521C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1521C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1521C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1521C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1521C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1521C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1521C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1521C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1521C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1521C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1521C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1521C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1521C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1521C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1521C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1521C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1521C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1521C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1521C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1521C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1521C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1521C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1521C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1521C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1521C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1521C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1521C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1521C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1521C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1521C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1521C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1521C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1521C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1521C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1521C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1521C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1521C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1521C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1521C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1521C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1521C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1521C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1521C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1521C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1521C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1521C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1521C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1521C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1521C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1521C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1521C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1521C43v68Ev,
  (VTBL_ENTRY)&_ZN7S1521C43v69Ev,
  (VTBL_ENTRY)&_ZN7S1521C33v70Ev,
  (VTBL_ENTRY)&_ZN7S1521C33v71Ev,
  (VTBL_ENTRY)&_ZN7S1521C33v72Ev,
  (VTBL_ENTRY)&_ZN7S1521C33v73Ev,
  (VTBL_ENTRY)&_ZN7S1521C33v74Ev,
  (VTBL_ENTRY)&_ZN7S1521C33v75Ev,
  (VTBL_ENTRY)&_ZN7S1521C33v76Ev,
  (VTBL_ENTRY)&_ZN7S1521C33v77Ev,
  (VTBL_ENTRY)&_ZN7S1521C33v78Ev,
  (VTBL_ENTRY)&_ZN7S1521C33v79Ev,
  (VTBL_ENTRY)&_ZN7S1521C33v80Ev,
  (VTBL_ENTRY)&_ZN7S1521C33v81Ev,
  (VTBL_ENTRY)&_ZN7S1521C33v82Ev,
  (VTBL_ENTRY)&_ZN7S1521C33v83Ev,
  (VTBL_ENTRY)&_ZN7S1521C33v84Ev,
  (VTBL_ENTRY)&_ZN7S1521C33v85Ev,
  (VTBL_ENTRY)&_ZN7S1521C33v86Ev,
  (VTBL_ENTRY)&_ZN7S1521C33v87Ev,
  (VTBL_ENTRY)&_ZN7S1521C33v88Ev,
  (VTBL_ENTRY)&_ZN7S1521C33v89Ev,
};
extern VTBL_ENTRY _ZTI7S1521C3[];
extern  VTBL_ENTRY _ZTV7S1521C3[];
Class_Descriptor cd_S1521C3 = {  "S1521C3", // class name
  bases_S1521C3, 1,
  &(vtc_S1521C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(104,64), // object size
  NSPAIRA(_ZTI7S1521C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1521C3),88, //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  S1521C2  : S1521C3 {
  virtual  ~S1521C2(); // _ZN7S1521C2D1Ev
  virtual void  v90(); // _ZN7S1521C23v90Ev
  virtual void  v91(); // _ZN7S1521C23v91Ev
  S1521C2(); // tgen
};
//SIG(-1 S1521C2) C1{ BC2{ BC3{ vd 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 Fi FL Fp[4] Fi[2] Fp FC4{ m Fi[2]} Fp[2]} vd v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 FC5{ m}} vd v1 v2}


 S1521C2 ::~S1521C2(){ note_dtor("S1521C2", this);}
void  S1521C2 ::v90(){vfunc_called(this, "_ZN7S1521C23v90Ev");}
void  S1521C2 ::v91(){vfunc_called(this, "_ZN7S1521C23v91Ev");}
S1521C2 ::S1521C2(){ note_ctor("S1521C2", this);} // tgen

static void Test_S1521C2()
{
  extern Class_Descriptor cd_S1521C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(14,17)];
    init_test(&cd_S1521C2, buf);
    S1521C2 *dp, &lv = *(dp=new (buf) S1521C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(104,64), "sizeof(S1521C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1521C2)");
    check_base_class_offset(lv, (S1521C4*)(S1521C3*), 0, "S1521C2");
    check_base_class_offset(lv, (S1521C3*), 0, "S1521C2");
    test_class_info(&lv, &cd_S1521C2);
    dp->~S1521C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1521C2(Test_S1521C2, "S1521C2", ABISELECT(104,64));

#else // __cplusplus

extern void _ZN7S1521C2C1Ev();
extern void _ZN7S1521C2D1Ev();
Name_Map name_map_S1521C2[] = {
  NSPAIR(_ZN7S1521C2C1Ev),
  NSPAIR(_ZN7S1521C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1521C4;
extern VTBL_ENTRY _ZTI7S1521C4[];
extern  VTBL_ENTRY _ZTV7S1521C4[];
extern Class_Descriptor cd_S1521C3;
extern VTBL_ENTRY _ZTI7S1521C3[];
extern  VTBL_ENTRY _ZTV7S1521C3[];
static Base_Class bases_S1521C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1521C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S1521C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S1521C2[];
extern void _ZN7S1521C2D1Ev();
extern void _ZN7S1521C2D0Ev();
extern void _ZN7S1521C42v6Ev();
extern void _ZN7S1521C42v7Ev();
extern void _ZN7S1521C42v8Ev();
extern void _ZN7S1521C42v9Ev();
extern void _ZN7S1521C43v10Ev();
extern void _ZN7S1521C43v11Ev();
extern void _ZN7S1521C43v12Ev();
extern void _ZN7S1521C43v13Ev();
extern void _ZN7S1521C43v14Ev();
extern void _ZN7S1521C43v15Ev();
extern void _ZN7S1521C43v16Ev();
extern void _ZN7S1521C43v17Ev();
extern void _ZN7S1521C43v18Ev();
extern void _ZN7S1521C43v19Ev();
extern void _ZN7S1521C43v20Ev();
extern void _ZN7S1521C43v21Ev();
extern void _ZN7S1521C43v22Ev();
extern void _ZN7S1521C43v23Ev();
extern void _ZN7S1521C43v24Ev();
extern void _ZN7S1521C43v25Ev();
extern void _ZN7S1521C43v26Ev();
extern void _ZN7S1521C43v27Ev();
extern void _ZN7S1521C43v28Ev();
extern void _ZN7S1521C43v29Ev();
extern void _ZN7S1521C43v30Ev();
extern void _ZN7S1521C43v31Ev();
extern void _ZN7S1521C43v32Ev();
extern void _ZN7S1521C43v33Ev();
extern void _ZN7S1521C43v34Ev();
extern void _ZN7S1521C43v35Ev();
extern void _ZN7S1521C43v36Ev();
extern void _ZN7S1521C43v37Ev();
extern void _ZN7S1521C43v38Ev();
extern void _ZN7S1521C43v39Ev();
extern void _ZN7S1521C43v40Ev();
extern void _ZN7S1521C43v41Ev();
extern void _ZN7S1521C43v42Ev();
extern void _ZN7S1521C43v43Ev();
extern void _ZN7S1521C43v44Ev();
extern void _ZN7S1521C43v45Ev();
extern void _ZN7S1521C43v46Ev();
extern void _ZN7S1521C43v47Ev();
extern void _ZN7S1521C43v48Ev();
extern void _ZN7S1521C43v49Ev();
extern void _ZN7S1521C43v50Ev();
extern void _ZN7S1521C43v51Ev();
extern void _ZN7S1521C43v52Ev();
extern void _ZN7S1521C43v53Ev();
extern void _ZN7S1521C43v54Ev();
extern void _ZN7S1521C43v55Ev();
extern void _ZN7S1521C43v56Ev();
extern void _ZN7S1521C43v57Ev();
extern void _ZN7S1521C43v58Ev();
extern void _ZN7S1521C43v59Ev();
extern void _ZN7S1521C43v60Ev();
extern void _ZN7S1521C43v61Ev();
extern void _ZN7S1521C43v62Ev();
extern void _ZN7S1521C43v63Ev();
extern void _ZN7S1521C43v64Ev();
extern void _ZN7S1521C43v65Ev();
extern void _ZN7S1521C43v66Ev();
extern void _ZN7S1521C43v67Ev();
extern void _ZN7S1521C43v68Ev();
extern void _ZN7S1521C43v69Ev();
extern void _ZN7S1521C33v70Ev();
extern void _ZN7S1521C33v71Ev();
extern void _ZN7S1521C33v72Ev();
extern void _ZN7S1521C33v73Ev();
extern void _ZN7S1521C33v74Ev();
extern void _ZN7S1521C33v75Ev();
extern void _ZN7S1521C33v76Ev();
extern void _ZN7S1521C33v77Ev();
extern void _ZN7S1521C33v78Ev();
extern void _ZN7S1521C33v79Ev();
extern void _ZN7S1521C33v80Ev();
extern void _ZN7S1521C33v81Ev();
extern void _ZN7S1521C33v82Ev();
extern void _ZN7S1521C33v83Ev();
extern void _ZN7S1521C33v84Ev();
extern void _ZN7S1521C33v85Ev();
extern void _ZN7S1521C33v86Ev();
extern void _ZN7S1521C33v87Ev();
extern void _ZN7S1521C33v88Ev();
extern void _ZN7S1521C33v89Ev();
extern void _ZN7S1521C23v90Ev();
extern void _ZN7S1521C23v91Ev();
static  VTBL_ENTRY vtc_S1521C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1521C2[0]),
  (VTBL_ENTRY)&_ZN7S1521C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1521C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1521C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1521C42v7Ev,
  (VTBL_ENTRY)&_ZN7S1521C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1521C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1521C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1521C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1521C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1521C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1521C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1521C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1521C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1521C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1521C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1521C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1521C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1521C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1521C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1521C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1521C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1521C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1521C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1521C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1521C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1521C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1521C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1521C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1521C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1521C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1521C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1521C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1521C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1521C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1521C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1521C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1521C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1521C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1521C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1521C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1521C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1521C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1521C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1521C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1521C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1521C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1521C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1521C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1521C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1521C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1521C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1521C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1521C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1521C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1521C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1521C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1521C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1521C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1521C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1521C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1521C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1521C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1521C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1521C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1521C43v68Ev,
  (VTBL_ENTRY)&_ZN7S1521C43v69Ev,
  (VTBL_ENTRY)&_ZN7S1521C33v70Ev,
  (VTBL_ENTRY)&_ZN7S1521C33v71Ev,
  (VTBL_ENTRY)&_ZN7S1521C33v72Ev,
  (VTBL_ENTRY)&_ZN7S1521C33v73Ev,
  (VTBL_ENTRY)&_ZN7S1521C33v74Ev,
  (VTBL_ENTRY)&_ZN7S1521C33v75Ev,
  (VTBL_ENTRY)&_ZN7S1521C33v76Ev,
  (VTBL_ENTRY)&_ZN7S1521C33v77Ev,
  (VTBL_ENTRY)&_ZN7S1521C33v78Ev,
  (VTBL_ENTRY)&_ZN7S1521C33v79Ev,
  (VTBL_ENTRY)&_ZN7S1521C33v80Ev,
  (VTBL_ENTRY)&_ZN7S1521C33v81Ev,
  (VTBL_ENTRY)&_ZN7S1521C33v82Ev,
  (VTBL_ENTRY)&_ZN7S1521C33v83Ev,
  (VTBL_ENTRY)&_ZN7S1521C33v84Ev,
  (VTBL_ENTRY)&_ZN7S1521C33v85Ev,
  (VTBL_ENTRY)&_ZN7S1521C33v86Ev,
  (VTBL_ENTRY)&_ZN7S1521C33v87Ev,
  (VTBL_ENTRY)&_ZN7S1521C33v88Ev,
  (VTBL_ENTRY)&_ZN7S1521C33v89Ev,
  (VTBL_ENTRY)&_ZN7S1521C23v90Ev,
  (VTBL_ENTRY)&_ZN7S1521C23v91Ev,
};
extern VTBL_ENTRY _ZTI7S1521C2[];
extern  VTBL_ENTRY _ZTV7S1521C2[];
Class_Descriptor cd_S1521C2 = {  "S1521C2", // class name
  bases_S1521C2, 2,
  &(vtc_S1521C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(104,64), // object size
  NSPAIRA(_ZTI7S1521C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1521C2),90, //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  S1521C1  : S1521C2 {
  ::S674C42 s1521c1f0;
  virtual  ~S1521C1(); // _ZN7S1521C1D1Ev
  virtual void  v1(); // _ZN7S1521C12v1Ev
  virtual void  v2(); // _ZN7S1521C12v2Ev
  virtual void  v3(); // _ZN7S1521C12v3Ev
  virtual void  v4(); // _ZN7S1521C12v4Ev
  virtual void  v5(); // _ZN7S1521C12v5Ev
  S1521C1(); // tgen
};
//SIG(1 S1521C1) C1{ BC2{ BC3{ BC4{ 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 FC5{ m Fi[2]} Fp[2]} vd v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 FC6{ m}} vd v90 v91} vd v1 v2 v3 v4 v5 FC7{ BC8{ BC9{ m Fp Fi[2]}}}}


 S1521C1 ::~S1521C1(){ note_dtor("S1521C1", this);}
void  S1521C1 ::v1(){vfunc_called(this, "_ZN7S1521C12v1Ev");}
void  S1521C1 ::v2(){vfunc_called(this, "_ZN7S1521C12v2Ev");}
void  S1521C1 ::v3(){vfunc_called(this, "_ZN7S1521C12v3Ev");}
void  S1521C1 ::v4(){vfunc_called(this, "_ZN7S1521C12v4Ev");}
void  S1521C1 ::v5(){vfunc_called(this, "_ZN7S1521C12v5Ev");}
S1521C1 ::S1521C1(){ note_ctor("S1521C1", this);} // tgen

static void Test_S1521C1()
{
  extern Class_Descriptor cd_S1521C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(16,20)];
    init_test(&cd_S1521C1, buf);
    S1521C1 *dp, &lv = *(dp=new (buf) S1521C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(120,76), "sizeof(S1521C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1521C1)");
    check_base_class_offset(lv, (S1521C4*)(S1521C3*)(S1521C2*), 0, "S1521C1");
    check_base_class_offset(lv, (S1521C3*)(S1521C2*), 0, "S1521C1");
    check_base_class_offset(lv, (S1521C2*), 0, "S1521C1");
    check_field_offset(lv, s1521c1f0, ABISELECT(104,64), "S1521C1.s1521c1f0");
    test_class_info(&lv, &cd_S1521C1);
    dp->~S1521C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1521C1(Test_S1521C1, "S1521C1", ABISELECT(120,76));

#else // __cplusplus

extern void _ZN7S1521C1C1Ev();
extern void _ZN7S1521C1D1Ev();
Name_Map name_map_S1521C1[] = {
  NSPAIR(_ZN7S1521C1C1Ev),
  NSPAIR(_ZN7S1521C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1521C4;
extern VTBL_ENTRY _ZTI7S1521C4[];
extern  VTBL_ENTRY _ZTV7S1521C4[];
extern Class_Descriptor cd_S1521C3;
extern VTBL_ENTRY _ZTI7S1521C3[];
extern  VTBL_ENTRY _ZTV7S1521C3[];
extern Class_Descriptor cd_S1521C2;
extern VTBL_ENTRY _ZTI7S1521C2[];
extern  VTBL_ENTRY _ZTV7S1521C2[];
static Base_Class bases_S1521C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1521C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S1521C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S1521C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S1521C1[];
extern void _ZN7S1521C1D1Ev();
extern void _ZN7S1521C1D0Ev();
extern void _ZN7S1521C42v6Ev();
extern void _ZN7S1521C42v7Ev();
extern void _ZN7S1521C42v8Ev();
extern void _ZN7S1521C42v9Ev();
extern void _ZN7S1521C43v10Ev();
extern void _ZN7S1521C43v11Ev();
extern void _ZN7S1521C43v12Ev();
extern void _ZN7S1521C43v13Ev();
extern void _ZN7S1521C43v14Ev();
extern void _ZN7S1521C43v15Ev();
extern void _ZN7S1521C43v16Ev();
extern void _ZN7S1521C43v17Ev();
extern void _ZN7S1521C43v18Ev();
extern void _ZN7S1521C43v19Ev();
extern void _ZN7S1521C43v20Ev();
extern void _ZN7S1521C43v21Ev();
extern void _ZN7S1521C43v22Ev();
extern void _ZN7S1521C43v23Ev();
extern void _ZN7S1521C43v24Ev();
extern void _ZN7S1521C43v25Ev();
extern void _ZN7S1521C43v26Ev();
extern void _ZN7S1521C43v27Ev();
extern void _ZN7S1521C43v28Ev();
extern void _ZN7S1521C43v29Ev();
extern void _ZN7S1521C43v30Ev();
extern void _ZN7S1521C43v31Ev();
extern void _ZN7S1521C43v32Ev();
extern void _ZN7S1521C43v33Ev();
extern void _ZN7S1521C43v34Ev();
extern void _ZN7S1521C43v35Ev();
extern void _ZN7S1521C43v36Ev();
extern void _ZN7S1521C43v37Ev();
extern void _ZN7S1521C43v38Ev();
extern void _ZN7S1521C43v39Ev();
extern void _ZN7S1521C43v40Ev();
extern void _ZN7S1521C43v41Ev();
extern void _ZN7S1521C43v42Ev();
extern void _ZN7S1521C43v43Ev();
extern void _ZN7S1521C43v44Ev();
extern void _ZN7S1521C43v45Ev();
extern void _ZN7S1521C43v46Ev();
extern void _ZN7S1521C43v47Ev();
extern void _ZN7S1521C43v48Ev();
extern void _ZN7S1521C43v49Ev();
extern void _ZN7S1521C43v50Ev();
extern void _ZN7S1521C43v51Ev();
extern void _ZN7S1521C43v52Ev();
extern void _ZN7S1521C43v53Ev();
extern void _ZN7S1521C43v54Ev();
extern void _ZN7S1521C43v55Ev();
extern void _ZN7S1521C43v56Ev();
extern void _ZN7S1521C43v57Ev();
extern void _ZN7S1521C43v58Ev();
extern void _ZN7S1521C43v59Ev();
extern void _ZN7S1521C43v60Ev();
extern void _ZN7S1521C43v61Ev();
extern void _ZN7S1521C43v62Ev();
extern void _ZN7S1521C43v63Ev();
extern void _ZN7S1521C43v64Ev();
extern void _ZN7S1521C43v65Ev();
extern void _ZN7S1521C43v66Ev();
extern void _ZN7S1521C43v67Ev();
extern void _ZN7S1521C43v68Ev();
extern void _ZN7S1521C43v69Ev();
extern void _ZN7S1521C33v70Ev();
extern void _ZN7S1521C33v71Ev();
extern void _ZN7S1521C33v72Ev();
extern void _ZN7S1521C33v73Ev();
extern void _ZN7S1521C33v74Ev();
extern void _ZN7S1521C33v75Ev();
extern void _ZN7S1521C33v76Ev();
extern void _ZN7S1521C33v77Ev();
extern void _ZN7S1521C33v78Ev();
extern void _ZN7S1521C33v79Ev();
extern void _ZN7S1521C33v80Ev();
extern void _ZN7S1521C33v81Ev();
extern void _ZN7S1521C33v82Ev();
extern void _ZN7S1521C33v83Ev();
extern void _ZN7S1521C33v84Ev();
extern void _ZN7S1521C33v85Ev();
extern void _ZN7S1521C33v86Ev();
extern void _ZN7S1521C33v87Ev();
extern void _ZN7S1521C33v88Ev();
extern void _ZN7S1521C33v89Ev();
extern void _ZN7S1521C23v90Ev();
extern void _ZN7S1521C23v91Ev();
extern void _ZN7S1521C12v1Ev();
extern void _ZN7S1521C12v2Ev();
extern void _ZN7S1521C12v3Ev();
extern void _ZN7S1521C12v4Ev();
extern void _ZN7S1521C12v5Ev();
static  VTBL_ENTRY vtc_S1521C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1521C1[0]),
  (VTBL_ENTRY)&_ZN7S1521C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1521C1D0Ev,
  (VTBL_ENTRY)&_ZN7S1521C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1521C42v7Ev,
  (VTBL_ENTRY)&_ZN7S1521C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1521C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1521C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1521C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1521C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1521C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1521C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1521C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1521C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1521C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1521C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1521C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1521C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1521C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1521C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1521C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1521C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1521C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1521C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1521C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1521C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1521C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1521C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1521C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1521C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1521C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1521C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1521C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1521C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1521C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1521C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1521C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1521C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1521C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1521C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1521C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1521C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1521C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1521C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1521C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1521C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1521C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1521C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1521C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1521C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1521C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1521C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1521C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1521C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1521C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1521C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1521C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1521C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1521C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1521C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1521C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1521C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1521C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1521C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1521C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1521C43v68Ev,
  (VTBL_ENTRY)&_ZN7S1521C43v69Ev,
  (VTBL_ENTRY)&_ZN7S1521C33v70Ev,
  (VTBL_ENTRY)&_ZN7S1521C33v71Ev,
  (VTBL_ENTRY)&_ZN7S1521C33v72Ev,
  (VTBL_ENTRY)&_ZN7S1521C33v73Ev,
  (VTBL_ENTRY)&_ZN7S1521C33v74Ev,
  (VTBL_ENTRY)&_ZN7S1521C33v75Ev,
  (VTBL_ENTRY)&_ZN7S1521C33v76Ev,
  (VTBL_ENTRY)&_ZN7S1521C33v77Ev,
  (VTBL_ENTRY)&_ZN7S1521C33v78Ev,
  (VTBL_ENTRY)&_ZN7S1521C33v79Ev,
  (VTBL_ENTRY)&_ZN7S1521C33v80Ev,
  (VTBL_ENTRY)&_ZN7S1521C33v81Ev,
  (VTBL_ENTRY)&_ZN7S1521C33v82Ev,
  (VTBL_ENTRY)&_ZN7S1521C33v83Ev,
  (VTBL_ENTRY)&_ZN7S1521C33v84Ev,
  (VTBL_ENTRY)&_ZN7S1521C33v85Ev,
  (VTBL_ENTRY)&_ZN7S1521C33v86Ev,
  (VTBL_ENTRY)&_ZN7S1521C33v87Ev,
  (VTBL_ENTRY)&_ZN7S1521C33v88Ev,
  (VTBL_ENTRY)&_ZN7S1521C33v89Ev,
  (VTBL_ENTRY)&_ZN7S1521C23v90Ev,
  (VTBL_ENTRY)&_ZN7S1521C23v91Ev,
  (VTBL_ENTRY)&_ZN7S1521C12v1Ev,
  (VTBL_ENTRY)&_ZN7S1521C12v2Ev,
  (VTBL_ENTRY)&_ZN7S1521C12v3Ev,
  (VTBL_ENTRY)&_ZN7S1521C12v4Ev,
  (VTBL_ENTRY)&_ZN7S1521C12v5Ev,
};
extern VTBL_ENTRY _ZTI7S1521C1[];
extern  VTBL_ENTRY _ZTV7S1521C1[];
Class_Descriptor cd_S1521C1 = {  "S1521C1", // class name
  bases_S1521C1, 3,
  &(vtc_S1521C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(120,76), // object size
  NSPAIRA(_ZTI7S1521C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1521C1),95, //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  S1519C4  {
  int s1519c4f0;
  __tsi64 s1519c4f1;
  void *s1519c4f2[4];
  int s1519c4f3[2];
  void *s1519c4f4;
  ::S674C6_nt s1519c4f5;
  void *s1519c4f6[2];
  virtual  ~S1519C4(); // _ZN7S1519C4D1Ev
  virtual void  v6(); // _ZN7S1519C42v6Ev
  virtual void  v7(); // _ZN7S1519C42v7Ev
  virtual void  v8(); // _ZN7S1519C42v8Ev
  virtual void  v9(); // _ZN7S1519C42v9Ev
  virtual void  v10(); // _ZN7S1519C43v10Ev
  virtual void  v11(); // _ZN7S1519C43v11Ev
  virtual void  v12(); // _ZN7S1519C43v12Ev
  virtual void  v13(); // _ZN7S1519C43v13Ev
  virtual void  v14(); // _ZN7S1519C43v14Ev
  virtual void  v15(); // _ZN7S1519C43v15Ev
  virtual void  v16(); // _ZN7S1519C43v16Ev
  virtual void  v17(); // _ZN7S1519C43v17Ev
  virtual void  v18(); // _ZN7S1519C43v18Ev
  virtual void  v19(); // _ZN7S1519C43v19Ev
  virtual void  v20(); // _ZN7S1519C43v20Ev
  virtual void  v21(); // _ZN7S1519C43v21Ev
  virtual void  v22(); // _ZN7S1519C43v22Ev
  virtual void  v23(); // _ZN7S1519C43v23Ev
  virtual void  v24(); // _ZN7S1519C43v24Ev
  virtual void  v25(); // _ZN7S1519C43v25Ev
  virtual void  v26(); // _ZN7S1519C43v26Ev
  virtual void  v27(); // _ZN7S1519C43v27Ev
  virtual void  v28(); // _ZN7S1519C43v28Ev
  virtual void  v29(); // _ZN7S1519C43v29Ev
  virtual void  v30(); // _ZN7S1519C43v30Ev
  virtual void  v31(); // _ZN7S1519C43v31Ev
  virtual void  v32(); // _ZN7S1519C43v32Ev
  virtual void  v33(); // _ZN7S1519C43v33Ev
  virtual void  v34(); // _ZN7S1519C43v34Ev
  virtual void  v35(); // _ZN7S1519C43v35Ev
  virtual void  v36(); // _ZN7S1519C43v36Ev
  virtual void  v37(); // _ZN7S1519C43v37Ev
  virtual void  v38(); // _ZN7S1519C43v38Ev
  virtual void  v39(); // _ZN7S1519C43v39Ev
  virtual void  v40(); // _ZN7S1519C43v40Ev
  virtual void  v41(); // _ZN7S1519C43v41Ev
  virtual void  v42(); // _ZN7S1519C43v42Ev
  virtual void  v43(); // _ZN7S1519C43v43Ev
  virtual void  v44(); // _ZN7S1519C43v44Ev
  virtual void  v45(); // _ZN7S1519C43v45Ev
  virtual void  v46(); // _ZN7S1519C43v46Ev
  virtual void  v47(); // _ZN7S1519C43v47Ev
  virtual void  v48(); // _ZN7S1519C43v48Ev
  virtual void  v49(); // _ZN7S1519C43v49Ev
  virtual void  v50(); // _ZN7S1519C43v50Ev
  virtual void  v51(); // _ZN7S1519C43v51Ev
  virtual void  v52(); // _ZN7S1519C43v52Ev
  virtual void  v53(); // _ZN7S1519C43v53Ev
  virtual void  v54(); // _ZN7S1519C43v54Ev
  virtual void  v55(); // _ZN7S1519C43v55Ev
  virtual void  v56(); // _ZN7S1519C43v56Ev
  virtual void  v57(); // _ZN7S1519C43v57Ev
  virtual void  v58(); // _ZN7S1519C43v58Ev
  virtual void  v59(); // _ZN7S1519C43v59Ev
  virtual void  v60(); // _ZN7S1519C43v60Ev
  virtual void  v61(); // _ZN7S1519C43v61Ev
  virtual void  v62(); // _ZN7S1519C43v62Ev
  virtual void  v63(); // _ZN7S1519C43v63Ev
  virtual void  v64(); // _ZN7S1519C43v64Ev
  virtual void  v65(); // _ZN7S1519C43v65Ev
  virtual void  v66(); // _ZN7S1519C43v66Ev
  virtual void  v67(); // _ZN7S1519C43v67Ev
  virtual void  v68(); // _ZN7S1519C43v68Ev
  virtual void  v69(); // _ZN7S1519C43v69Ev
  S1519C4(); // tgen
};
//SIG(-1 S1519C4) 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]}


 S1519C4 ::~S1519C4(){ note_dtor("S1519C4", this);}
void  S1519C4 ::v6(){vfunc_called(this, "_ZN7S1519C42v6Ev");}
void  S1519C4 ::v7(){vfunc_called(this, "_ZN7S1519C42v7Ev");}
void  S1519C4 ::v8(){vfunc_called(this, "_ZN7S1519C42v8Ev");}
void  S1519C4 ::v9(){vfunc_called(this, "_ZN7S1519C42v9Ev");}
void  S1519C4 ::v10(){vfunc_called(this, "_ZN7S1519C43v10Ev");}
void  S1519C4 ::v11(){vfunc_called(this, "_ZN7S1519C43v11Ev");}
void  S1519C4 ::v12(){vfunc_called(this, "_ZN7S1519C43v12Ev");}
void  S1519C4 ::v13(){vfunc_called(this, "_ZN7S1519C43v13Ev");}
void  S1519C4 ::v14(){vfunc_called(this, "_ZN7S1519C43v14Ev");}
void  S1519C4 ::v15(){vfunc_called(this, "_ZN7S1519C43v15Ev");}
void  S1519C4 ::v16(){vfunc_called(this, "_ZN7S1519C43v16Ev");}
void  S1519C4 ::v17(){vfunc_called(this, "_ZN7S1519C43v17Ev");}
void  S1519C4 ::v18(){vfunc_called(this, "_ZN7S1519C43v18Ev");}
void  S1519C4 ::v19(){vfunc_called(this, "_ZN7S1519C43v19Ev");}
void  S1519C4 ::v20(){vfunc_called(this, "_ZN7S1519C43v20Ev");}
void  S1519C4 ::v21(){vfunc_called(this, "_ZN7S1519C43v21Ev");}
void  S1519C4 ::v22(){vfunc_called(this, "_ZN7S1519C43v22Ev");}
void  S1519C4 ::v23(){vfunc_called(this, "_ZN7S1519C43v23Ev");}
void  S1519C4 ::v24(){vfunc_called(this, "_ZN7S1519C43v24Ev");}
void  S1519C4 ::v25(){vfunc_called(this, "_ZN7S1519C43v25Ev");}
void  S1519C4 ::v26(){vfunc_called(this, "_ZN7S1519C43v26Ev");}
void  S1519C4 ::v27(){vfunc_called(this, "_ZN7S1519C43v27Ev");}
void  S1519C4 ::v28(){vfunc_called(this, "_ZN7S1519C43v28Ev");}
void  S1519C4 ::v29(){vfunc_called(this, "_ZN7S1519C43v29Ev");}
void  S1519C4 ::v30(){vfunc_called(this, "_ZN7S1519C43v30Ev");}
void  S1519C4 ::v31(){vfunc_called(this, "_ZN7S1519C43v31Ev");}
void  S1519C4 ::v32(){vfunc_called(this, "_ZN7S1519C43v32Ev");}
void  S1519C4 ::v33(){vfunc_called(this, "_ZN7S1519C43v33Ev");}
void  S1519C4 ::v34(){vfunc_called(this, "_ZN7S1519C43v34Ev");}
void  S1519C4 ::v35(){vfunc_called(this, "_ZN7S1519C43v35Ev");}
void  S1519C4 ::v36(){vfunc_called(this, "_ZN7S1519C43v36Ev");}
void  S1519C4 ::v37(){vfunc_called(this, "_ZN7S1519C43v37Ev");}
void  S1519C4 ::v38(){vfunc_called(this, "_ZN7S1519C43v38Ev");}
void  S1519C4 ::v39(){vfunc_called(this, "_ZN7S1519C43v39Ev");}
void  S1519C4 ::v40(){vfunc_called(this, "_ZN7S1519C43v40Ev");}
void  S1519C4 ::v41(){vfunc_called(this, "_ZN7S1519C43v41Ev");}
void  S1519C4 ::v42(){vfunc_called(this, "_ZN7S1519C43v42Ev");}
void  S1519C4 ::v43(){vfunc_called(this, "_ZN7S1519C43v43Ev");}
void  S1519C4 ::v44(){vfunc_called(this, "_ZN7S1519C43v44Ev");}
void  S1519C4 ::v45(){vfunc_called(this, "_ZN7S1519C43v45Ev");}
void  S1519C4 ::v46(){vfunc_called(this, "_ZN7S1519C43v46Ev");}
void  S1519C4 ::v47(){vfunc_called(this, "_ZN7S1519C43v47Ev");}
void  S1519C4 ::v48(){vfunc_called(this, "_ZN7S1519C43v48Ev");}
void  S1519C4 ::v49(){vfunc_called(this, "_ZN7S1519C43v49Ev");}
void  S1519C4 ::v50(){vfunc_called(this, "_ZN7S1519C43v50Ev");}
void  S1519C4 ::v51(){vfunc_called(this, "_ZN7S1519C43v51Ev");}
void  S1519C4 ::v52(){vfunc_called(this, "_ZN7S1519C43v52Ev");}
void  S1519C4 ::v53(){vfunc_called(this, "_ZN7S1519C43v53Ev");}
void  S1519C4 ::v54(){vfunc_called(this, "_ZN7S1519C43v54Ev");}
void  S1519C4 ::v55(){vfunc_called(this, "_ZN7S1519C43v55Ev");}
void  S1519C4 ::v56(){vfunc_called(this, "_ZN7S1519C43v56Ev");}
void  S1519C4 ::v57(){vfunc_called(this, "_ZN7S1519C43v57Ev");}
void  S1519C4 ::v58(){vfunc_called(this, "_ZN7S1519C43v58Ev");}
void  S1519C4 ::v59(){vfunc_called(this, "_ZN7S1519C43v59Ev");}
void  S1519C4 ::v60(){vfunc_called(this, "_ZN7S1519C43v60Ev");}
void  S1519C4 ::v61(){vfunc_called(this, "_ZN7S1519C43v61Ev");}
void  S1519C4 ::v62(){vfunc_called(this, "_ZN7S1519C43v62Ev");}
void  S1519C4 ::v63(){vfunc_called(this, "_ZN7S1519C43v63Ev");}
void  S1519C4 ::v64(){vfunc_called(this, "_ZN7S1519C43v64Ev");}
void  S1519C4 ::v65(){vfunc_called(this, "_ZN7S1519C43v65Ev");}
void  S1519C4 ::v66(){vfunc_called(this, "_ZN7S1519C43v66Ev");}
void  S1519C4 ::v67(){vfunc_called(this, "_ZN7S1519C43v67Ev");}
void  S1519C4 ::v68(){vfunc_called(this, "_ZN7S1519C43v68Ev");}
void  S1519C4 ::v69(){vfunc_called(this, "_ZN7S1519C43v69Ev");}
S1519C4 ::S1519C4(){ note_ctor("S1519C4", this);} // tgen

static void Test_S1519C4()
{
  extern Class_Descriptor cd_S1519C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S1519C4, buf);
    S1519C4 *dp, &lv = *(dp=new (buf) S1519C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S1519C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1519C4)");
    check_field_offset(lv, s1519c4f0, ABISELECT(8,4), "S1519C4.s1519c4f0");
    check_field_offset(lv, s1519c4f1, ABISELECT(16,8), "S1519C4.s1519c4f1");
    check_field_offset(lv, s1519c4f2, ABISELECT(24,16), "S1519C4.s1519c4f2");
    check_field_offset(lv, s1519c4f3, ABISELECT(56,32), "S1519C4.s1519c4f3");
    check_field_offset(lv, s1519c4f4, ABISELECT(64,40), "S1519C4.s1519c4f4");
    check_field_offset(lv, s1519c4f5, ABISELECT(72,44), "S1519C4.s1519c4f5");
    check_field_offset(lv, s1519c4f6, ABISELECT(80,52), "S1519C4.s1519c4f6");
    test_class_info(&lv, &cd_S1519C4);
    dp->~S1519C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1519C4(Test_S1519C4, "S1519C4", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN7S1519C4C1Ev();
extern void _ZN7S1519C4D1Ev();
Name_Map name_map_S1519C4[] = {
  NSPAIR(_ZN7S1519C4C1Ev),
  NSPAIR(_ZN7S1519C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S1519C4[];
extern void _ZN7S1519C4D1Ev();
extern void _ZN7S1519C4D0Ev();
extern void _ZN7S1519C42v6Ev();
extern void _ZN7S1519C42v7Ev();
extern void _ZN7S1519C42v8Ev();
extern void _ZN7S1519C42v9Ev();
extern void _ZN7S1519C43v10Ev();
extern void _ZN7S1519C43v11Ev();
extern void _ZN7S1519C43v12Ev();
extern void _ZN7S1519C43v13Ev();
extern void _ZN7S1519C43v14Ev();
extern void _ZN7S1519C43v15Ev();
extern void _ZN7S1519C43v16Ev();
extern void _ZN7S1519C43v17Ev();
extern void _ZN7S1519C43v18Ev();
extern void _ZN7S1519C43v19Ev();
extern void _ZN7S1519C43v20Ev();
extern void _ZN7S1519C43v21Ev();
extern void _ZN7S1519C43v22Ev();
extern void _ZN7S1519C43v23Ev();
extern void _ZN7S1519C43v24Ev();
extern void _ZN7S1519C43v25Ev();
extern void _ZN7S1519C43v26Ev();
extern void _ZN7S1519C43v27Ev();
extern void _ZN7S1519C43v28Ev();
extern void _ZN7S1519C43v29Ev();
extern void _ZN7S1519C43v30Ev();
extern void _ZN7S1519C43v31Ev();
extern void _ZN7S1519C43v32Ev();
extern void _ZN7S1519C43v33Ev();
extern void _ZN7S1519C43v34Ev();
extern void _ZN7S1519C43v35Ev();
extern void _ZN7S1519C43v36Ev();
extern void _ZN7S1519C43v37Ev();
extern void _ZN7S1519C43v38Ev();
extern void _ZN7S1519C43v39Ev();
extern void _ZN7S1519C43v40Ev();
extern void _ZN7S1519C43v41Ev();
extern void _ZN7S1519C43v42Ev();
extern void _ZN7S1519C43v43Ev();
extern void _ZN7S1519C43v44Ev();
extern void _ZN7S1519C43v45Ev();
extern void _ZN7S1519C43v46Ev();
extern void _ZN7S1519C43v47Ev();
extern void _ZN7S1519C43v48Ev();
extern void _ZN7S1519C43v49Ev();
extern void _ZN7S1519C43v50Ev();
extern void _ZN7S1519C43v51Ev();
extern void _ZN7S1519C43v52Ev();
extern void _ZN7S1519C43v53Ev();
extern void _ZN7S1519C43v54Ev();
extern void _ZN7S1519C43v55Ev();
extern void _ZN7S1519C43v56Ev();
extern void _ZN7S1519C43v57Ev();
extern void _ZN7S1519C43v58Ev();
extern void _ZN7S1519C43v59Ev();
extern void _ZN7S1519C43v60Ev();
extern void _ZN7S1519C43v61Ev();
extern void _ZN7S1519C43v62Ev();
extern void _ZN7S1519C43v63Ev();
extern void _ZN7S1519C43v64Ev();
extern void _ZN7S1519C43v65Ev();
extern void _ZN7S1519C43v66Ev();
extern void _ZN7S1519C43v67Ev();
extern void _ZN7S1519C43v68Ev();
extern void _ZN7S1519C43v69Ev();
static  VTBL_ENTRY vtc_S1519C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1519C4[0]),
  (VTBL_ENTRY)&_ZN7S1519C4D1Ev,
  (VTBL_ENTRY)&_ZN7S1519C4D0Ev,
  (VTBL_ENTRY)&_ZN7S1519C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1519C42v7Ev,
  (VTBL_ENTRY)&_ZN7S1519C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1519C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1519C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1519C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1519C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1519C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1519C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1519C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1519C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1519C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1519C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1519C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1519C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1519C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1519C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1519C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1519C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1519C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1519C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1519C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1519C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1519C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1519C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1519C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1519C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1519C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1519C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1519C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1519C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1519C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1519C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1519C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1519C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1519C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1519C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1519C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1519C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1519C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1519C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1519C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1519C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1519C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1519C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1519C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1519C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1519C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1519C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1519C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1519C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1519C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1519C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1519C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1519C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1519C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1519C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1519C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1519C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1519C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1519C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1519C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1519C43v68Ev,
  (VTBL_ENTRY)&_ZN7S1519C43v69Ev,
};
extern VTBL_ENTRY _ZTI7S1519C4[];
extern  VTBL_ENTRY _ZTV7S1519C4[];
Class_Descriptor cd_S1519C4 = {  "S1519C4", // class name
  0,0,//no base classes
  &(vtc_S1519C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI7S1519C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S1519C4),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  S1519C3  : S1519C4 {
  unsigned int s1519c3f0:1;
  unsigned int s1519c3f1:1;
  unsigned int s1519c3f2:1;
  unsigned int s1519c3f3:1;
  unsigned int s1519c3f4:1;
  unsigned int s1519c3f5:1;
  unsigned int s1519c3f6:1;
  ::S3625C32 s1519c3f7;
  virtual  ~S1519C3(); // _ZN7S1519C3D1Ev
  virtual void  v70(); // _ZN7S1519C33v70Ev
  virtual void  v71(); // _ZN7S1519C33v71Ev
  virtual void  v72(); // _ZN7S1519C33v72Ev
  virtual void  v73(); // _ZN7S1519C33v73Ev
  virtual void  v74(); // _ZN7S1519C33v74Ev
  virtual void  v75(); // _ZN7S1519C33v75Ev
  virtual void  v76(); // _ZN7S1519C33v76Ev
  virtual void  v77(); // _ZN7S1519C33v77Ev
  virtual void  v78(); // _ZN7S1519C33v78Ev
  virtual void  v79(); // _ZN7S1519C33v79Ev
  virtual void  v80(); // _ZN7S1519C33v80Ev
  virtual void  v81(); // _ZN7S1519C33v81Ev
  virtual void  v82(); // _ZN7S1519C33v82Ev
  virtual void  v83(); // _ZN7S1519C33v83Ev
  virtual void  v84(); // _ZN7S1519C33v84Ev
  virtual void  v85(); // _ZN7S1519C33v85Ev
  virtual void  v86(); // _ZN7S1519C33v86Ev
  virtual void  v87(); // _ZN7S1519C33v87Ev
  virtual void  v88(); // _ZN7S1519C33v88Ev
  virtual void  v89(); // _ZN7S1519C33v89Ev
  S1519C3(); // tgen
};
//SIG(-1 S1519C3) C1{ BC2{ 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 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 Fi FL Fp[4] Fi[2] Fp FC3{ m Fi[2]} Fp[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 FC4{ m}}


 S1519C3 ::~S1519C3(){ note_dtor("S1519C3", this);}
void  S1519C3 ::v70(){vfunc_called(this, "_ZN7S1519C33v70Ev");}
void  S1519C3 ::v71(){vfunc_called(this, "_ZN7S1519C33v71Ev");}
void  S1519C3 ::v72(){vfunc_called(this, "_ZN7S1519C33v72Ev");}
void  S1519C3 ::v73(){vfunc_called(this, "_ZN7S1519C33v73Ev");}
void  S1519C3 ::v74(){vfunc_called(this, "_ZN7S1519C33v74Ev");}
void  S1519C3 ::v75(){vfunc_called(this, "_ZN7S1519C33v75Ev");}
void  S1519C3 ::v76(){vfunc_called(this, "_ZN7S1519C33v76Ev");}
void  S1519C3 ::v77(){vfunc_called(this, "_ZN7S1519C33v77Ev");}
void  S1519C3 ::v78(){vfunc_called(this, "_ZN7S1519C33v78Ev");}
void  S1519C3 ::v79(){vfunc_called(this, "_ZN7S1519C33v79Ev");}
void  S1519C3 ::v80(){vfunc_called(this, "_ZN7S1519C33v80Ev");}
void  S1519C3 ::v81(){vfunc_called(this, "_ZN7S1519C33v81Ev");}
void  S1519C3 ::v82(){vfunc_called(this, "_ZN7S1519C33v82Ev");}
void  S1519C3 ::v83(){vfunc_called(this, "_ZN7S1519C33v83Ev");}
void  S1519C3 ::v84(){vfunc_called(this, "_ZN7S1519C33v84Ev");}
void  S1519C3 ::v85(){vfunc_called(this, "_ZN7S1519C33v85Ev");}
void  S1519C3 ::v86(){vfunc_called(this, "_ZN7S1519C33v86Ev");}
void  S1519C3 ::v87(){vfunc_called(this, "_ZN7S1519C33v87Ev");}
void  S1519C3 ::v88(){vfunc_called(this, "_ZN7S1519C33v88Ev");}
void  S1519C3 ::v89(){vfunc_called(this, "_ZN7S1519C33v89Ev");}
S1519C3 ::S1519C3(){ note_ctor("S1519C3", this);} // tgen

static void Test_S1519C3()
{
  extern Class_Descriptor cd_S1519C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(14,17)];
    init_test(&cd_S1519C3, buf);
    S1519C3 *dp, &lv = *(dp=new (buf) S1519C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(104,64), "sizeof(S1519C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1519C3)");
    check_base_class_offset(lv, (S1519C4*), 0, "S1519C3");
    set_bf_and_test(lv, s1519c3f0, ABISELECT(96,60), 0, 1, 1, "S1519C3");
    set_bf_and_test(lv, s1519c3f1, ABISELECT(96,60), 1, 1, 1, "S1519C3");
    set_bf_and_test(lv, s1519c3f2, ABISELECT(96,60), 2, 1, 1, "S1519C3");
    set_bf_and_test(lv, s1519c3f3, ABISELECT(96,60), 3, 1, 1, "S1519C3");
    set_bf_and_test(lv, s1519c3f4, ABISELECT(96,60), 4, 1, 1, "S1519C3");
    set_bf_and_test(lv, s1519c3f5, ABISELECT(96,60), 5, 1, 1, "S1519C3");
    set_bf_and_test(lv, s1519c3f6, ABISELECT(96,60), 6, 1, 1, "S1519C3");
    check_field_offset(lv, s1519c3f7, ABISELECT(97,61), "S1519C3.s1519c3f7");
    test_class_info(&lv, &cd_S1519C3);
    dp->~S1519C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1519C3(Test_S1519C3, "S1519C3", ABISELECT(104,64));

#else // __cplusplus

extern void _ZN7S1519C3C1Ev();
extern void _ZN7S1519C3D1Ev();
Name_Map name_map_S1519C3[] = {
  NSPAIR(_ZN7S1519C3C1Ev),
  NSPAIR(_ZN7S1519C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1519C4;
extern VTBL_ENTRY _ZTI7S1519C4[];
extern  VTBL_ENTRY _ZTV7S1519C4[];
static Base_Class bases_S1519C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1519C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI7S1519C3[];
extern void _ZN7S1519C3D1Ev();
extern void _ZN7S1519C3D0Ev();
extern void _ZN7S1519C42v6Ev();
extern void _ZN7S1519C42v7Ev();
extern void _ZN7S1519C42v8Ev();
extern void _ZN7S1519C42v9Ev();
extern void _ZN7S1519C43v10Ev();
extern void _ZN7S1519C43v11Ev();
extern void _ZN7S1519C43v12Ev();
extern void _ZN7S1519C43v13Ev();
extern void _ZN7S1519C43v14Ev();
extern void _ZN7S1519C43v15Ev();
extern void _ZN7S1519C43v16Ev();
extern void _ZN7S1519C43v17Ev();
extern void _ZN7S1519C43v18Ev();
extern void _ZN7S1519C43v19Ev();
extern void _ZN7S1519C43v20Ev();
extern void _ZN7S1519C43v21Ev();
extern void _ZN7S1519C43v22Ev();
extern void _ZN7S1519C43v23Ev();
extern void _ZN7S1519C43v24Ev();
extern void _ZN7S1519C43v25Ev();
extern void _ZN7S1519C43v26Ev();
extern void _ZN7S1519C43v27Ev();
extern void _ZN7S1519C43v28Ev();
extern void _ZN7S1519C43v29Ev();
extern void _ZN7S1519C43v30Ev();
extern void _ZN7S1519C43v31Ev();
extern void _ZN7S1519C43v32Ev();
extern void _ZN7S1519C43v33Ev();
extern void _ZN7S1519C43v34Ev();
extern void _ZN7S1519C43v35Ev();
extern void _ZN7S1519C43v36Ev();
extern void _ZN7S1519C43v37Ev();
extern void _ZN7S1519C43v38Ev();
extern void _ZN7S1519C43v39Ev();
extern void _ZN7S1519C43v40Ev();
extern void _ZN7S1519C43v41Ev();
extern void _ZN7S1519C43v42Ev();
extern void _ZN7S1519C43v43Ev();
extern void _ZN7S1519C43v44Ev();
extern void _ZN7S1519C43v45Ev();
extern void _ZN7S1519C43v46Ev();
extern void _ZN7S1519C43v47Ev();
extern void _ZN7S1519C43v48Ev();
extern void _ZN7S1519C43v49Ev();
extern void _ZN7S1519C43v50Ev();
extern void _ZN7S1519C43v51Ev();
extern void _ZN7S1519C43v52Ev();
extern void _ZN7S1519C43v53Ev();
extern void _ZN7S1519C43v54Ev();
extern void _ZN7S1519C43v55Ev();
extern void _ZN7S1519C43v56Ev();
extern void _ZN7S1519C43v57Ev();
extern void _ZN7S1519C43v58Ev();
extern void _ZN7S1519C43v59Ev();
extern void _ZN7S1519C43v60Ev();
extern void _ZN7S1519C43v61Ev();
extern void _ZN7S1519C43v62Ev();
extern void _ZN7S1519C43v63Ev();
extern void _ZN7S1519C43v64Ev();
extern void _ZN7S1519C43v65Ev();
extern void _ZN7S1519C43v66Ev();
extern void _ZN7S1519C43v67Ev();
extern void _ZN7S1519C43v68Ev();
extern void _ZN7S1519C43v69Ev();
extern void _ZN7S1519C33v70Ev();
extern void _ZN7S1519C33v71Ev();
extern void _ZN7S1519C33v72Ev();
extern void _ZN7S1519C33v73Ev();
extern void _ZN7S1519C33v74Ev();
extern void _ZN7S1519C33v75Ev();
extern void _ZN7S1519C33v76Ev();
extern void _ZN7S1519C33v77Ev();
extern void _ZN7S1519C33v78Ev();
extern void _ZN7S1519C33v79Ev();
extern void _ZN7S1519C33v80Ev();
extern void _ZN7S1519C33v81Ev();
extern void _ZN7S1519C33v82Ev();
extern void _ZN7S1519C33v83Ev();
extern void _ZN7S1519C33v84Ev();
extern void _ZN7S1519C33v85Ev();
extern void _ZN7S1519C33v86Ev();
extern void _ZN7S1519C33v87Ev();
extern void _ZN7S1519C33v88Ev();
extern void _ZN7S1519C33v89Ev();
static  VTBL_ENTRY vtc_S1519C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1519C3[0]),
  (VTBL_ENTRY)&_ZN7S1519C3D1Ev,
  (VTBL_ENTRY)&_ZN7S1519C3D0Ev,
  (VTBL_ENTRY)&_ZN7S1519C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1519C42v7Ev,
  (VTBL_ENTRY)&_ZN7S1519C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1519C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1519C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1519C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1519C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1519C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1519C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1519C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1519C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1519C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1519C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1519C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1519C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1519C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1519C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1519C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1519C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1519C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1519C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1519C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1519C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1519C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1519C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1519C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1519C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1519C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1519C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1519C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1519C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1519C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1519C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1519C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1519C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1519C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1519C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1519C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1519C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1519C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1519C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1519C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1519C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1519C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1519C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1519C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1519C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1519C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1519C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1519C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1519C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1519C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1519C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1519C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1519C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1519C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1519C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1519C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1519C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1519C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1519C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1519C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1519C43v68Ev,
  (VTBL_ENTRY)&_ZN7S1519C43v69Ev,
  (VTBL_ENTRY)&_ZN7S1519C33v70Ev,
  (VTBL_ENTRY)&_ZN7S1519C33v71Ev,
  (VTBL_ENTRY)&_ZN7S1519C33v72Ev,
  (VTBL_ENTRY)&_ZN7S1519C33v73Ev,
  (VTBL_ENTRY)&_ZN7S1519C33v74Ev,
  (VTBL_ENTRY)&_ZN7S1519C33v75Ev,
  (VTBL_ENTRY)&_ZN7S1519C33v76Ev,
  (VTBL_ENTRY)&_ZN7S1519C33v77Ev,
  (VTBL_ENTRY)&_ZN7S1519C33v78Ev,
  (VTBL_ENTRY)&_ZN7S1519C33v79Ev,
  (VTBL_ENTRY)&_ZN7S1519C33v80Ev,
  (VTBL_ENTRY)&_ZN7S1519C33v81Ev,
  (VTBL_ENTRY)&_ZN7S1519C33v82Ev,
  (VTBL_ENTRY)&_ZN7S1519C33v83Ev,
  (VTBL_ENTRY)&_ZN7S1519C33v84Ev,
  (VTBL_ENTRY)&_ZN7S1519C33v85Ev,
  (VTBL_ENTRY)&_ZN7S1519C33v86Ev,
  (VTBL_ENTRY)&_ZN7S1519C33v87Ev,
  (VTBL_ENTRY)&_ZN7S1519C33v88Ev,
  (VTBL_ENTRY)&_ZN7S1519C33v89Ev,
};
extern VTBL_ENTRY _ZTI7S1519C3[];
extern  VTBL_ENTRY _ZTV7S1519C3[];
Class_Descriptor cd_S1519C3 = {  "S1519C3", // class name
  bases_S1519C3, 1,
  &(vtc_S1519C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(104,64), // object size
  NSPAIRA(_ZTI7S1519C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1519C3),88, //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  S1519C2  : S1519C3 {
  virtual  ~S1519C2(); // _ZN7S1519C2D1Ev
  virtual void  v90(); // _ZN7S1519C23v90Ev
  virtual void  v91(); // _ZN7S1519C23v91Ev
  S1519C2(); // tgen
};
//SIG(-1 S1519C2) C1{ BC2{ BC3{ vd 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 Fi FL Fp[4] Fi[2] Fp FC4{ m Fi[2]} Fp[2]} vd v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 FC5{ m}} vd v1 v2}


 S1519C2 ::~S1519C2(){ note_dtor("S1519C2", this);}
void  S1519C2 ::v90(){vfunc_called(this, "_ZN7S1519C23v90Ev");}
void  S1519C2 ::v91(){vfunc_called(this, "_ZN7S1519C23v91Ev");}
S1519C2 ::S1519C2(){ note_ctor("S1519C2", this);} // tgen

static void Test_S1519C2()
{
  extern Class_Descriptor cd_S1519C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(14,17)];
    init_test(&cd_S1519C2, buf);
    S1519C2 *dp, &lv = *(dp=new (buf) S1519C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(104,64), "sizeof(S1519C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1519C2)");
    check_base_class_offset(lv, (S1519C4*)(S1519C3*), 0, "S1519C2");
    check_base_class_offset(lv, (S1519C3*), 0, "S1519C2");
    test_class_info(&lv, &cd_S1519C2);
    dp->~S1519C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1519C2(Test_S1519C2, "S1519C2", ABISELECT(104,64));

#else // __cplusplus

extern void _ZN7S1519C2C1Ev();
extern void _ZN7S1519C2D1Ev();
Name_Map name_map_S1519C2[] = {
  NSPAIR(_ZN7S1519C2C1Ev),
  NSPAIR(_ZN7S1519C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1519C4;
extern VTBL_ENTRY _ZTI7S1519C4[];
extern  VTBL_ENTRY _ZTV7S1519C4[];
extern Class_Descriptor cd_S1519C3;
extern VTBL_ENTRY _ZTI7S1519C3[];
extern  VTBL_ENTRY _ZTV7S1519C3[];
static Base_Class bases_S1519C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1519C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S1519C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S1519C2[];
extern void _ZN7S1519C2D1Ev();
extern void _ZN7S1519C2D0Ev();
extern void _ZN7S1519C42v6Ev();
extern void _ZN7S1519C42v7Ev();
extern void _ZN7S1519C42v8Ev();
extern void _ZN7S1519C42v9Ev();
extern void _ZN7S1519C43v10Ev();
extern void _ZN7S1519C43v11Ev();
extern void _ZN7S1519C43v12Ev();
extern void _ZN7S1519C43v13Ev();
extern void _ZN7S1519C43v14Ev();
extern void _ZN7S1519C43v15Ev();
extern void _ZN7S1519C43v16Ev();
extern void _ZN7S1519C43v17Ev();
extern void _ZN7S1519C43v18Ev();
extern void _ZN7S1519C43v19Ev();
extern void _ZN7S1519C43v20Ev();
extern void _ZN7S1519C43v21Ev();
extern void _ZN7S1519C43v22Ev();
extern void _ZN7S1519C43v23Ev();
extern void _ZN7S1519C43v24Ev();
extern void _ZN7S1519C43v25Ev();
extern void _ZN7S1519C43v26Ev();
extern void _ZN7S1519C43v27Ev();
extern void _ZN7S1519C43v28Ev();
extern void _ZN7S1519C43v29Ev();
extern void _ZN7S1519C43v30Ev();
extern void _ZN7S1519C43v31Ev();
extern void _ZN7S1519C43v32Ev();
extern void _ZN7S1519C43v33Ev();
extern void _ZN7S1519C43v34Ev();
extern void _ZN7S1519C43v35Ev();
extern void _ZN7S1519C43v36Ev();
extern void _ZN7S1519C43v37Ev();
extern void _ZN7S1519C43v38Ev();
extern void _ZN7S1519C43v39Ev();
extern void _ZN7S1519C43v40Ev();
extern void _ZN7S1519C43v41Ev();
extern void _ZN7S1519C43v42Ev();
extern void _ZN7S1519C43v43Ev();
extern void _ZN7S1519C43v44Ev();
extern void _ZN7S1519C43v45Ev();
extern void _ZN7S1519C43v46Ev();
extern void _ZN7S1519C43v47Ev();
extern void _ZN7S1519C43v48Ev();
extern void _ZN7S1519C43v49Ev();
extern void _ZN7S1519C43v50Ev();
extern void _ZN7S1519C43v51Ev();
extern void _ZN7S1519C43v52Ev();
extern void _ZN7S1519C43v53Ev();
extern void _ZN7S1519C43v54Ev();
extern void _ZN7S1519C43v55Ev();
extern void _ZN7S1519C43v56Ev();
extern void _ZN7S1519C43v57Ev();
extern void _ZN7S1519C43v58Ev();
extern void _ZN7S1519C43v59Ev();
extern void _ZN7S1519C43v60Ev();
extern void _ZN7S1519C43v61Ev();
extern void _ZN7S1519C43v62Ev();
extern void _ZN7S1519C43v63Ev();
extern void _ZN7S1519C43v64Ev();
extern void _ZN7S1519C43v65Ev();
extern void _ZN7S1519C43v66Ev();
extern void _ZN7S1519C43v67Ev();
extern void _ZN7S1519C43v68Ev();
extern void _ZN7S1519C43v69Ev();
extern void _ZN7S1519C33v70Ev();
extern void _ZN7S1519C33v71Ev();
extern void _ZN7S1519C33v72Ev();
extern void _ZN7S1519C33v73Ev();
extern void _ZN7S1519C33v74Ev();
extern void _ZN7S1519C33v75Ev();
extern void _ZN7S1519C33v76Ev();
extern void _ZN7S1519C33v77Ev();
extern void _ZN7S1519C33v78Ev();
extern void _ZN7S1519C33v79Ev();
extern void _ZN7S1519C33v80Ev();
extern void _ZN7S1519C33v81Ev();
extern void _ZN7S1519C33v82Ev();
extern void _ZN7S1519C33v83Ev();
extern void _ZN7S1519C33v84Ev();
extern void _ZN7S1519C33v85Ev();
extern void _ZN7S1519C33v86Ev();
extern void _ZN7S1519C33v87Ev();
extern void _ZN7S1519C33v88Ev();
extern void _ZN7S1519C33v89Ev();
extern void _ZN7S1519C23v90Ev();
extern void _ZN7S1519C23v91Ev();
static  VTBL_ENTRY vtc_S1519C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1519C2[0]),
  (VTBL_ENTRY)&_ZN7S1519C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1519C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1519C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1519C42v7Ev,
  (VTBL_ENTRY)&_ZN7S1519C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1519C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1519C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1519C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1519C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1519C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1519C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1519C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1519C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1519C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1519C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1519C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1519C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1519C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1519C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1519C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1519C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1519C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1519C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1519C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1519C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1519C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1519C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1519C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1519C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1519C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1519C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1519C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1519C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1519C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1519C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1519C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1519C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1519C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1519C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1519C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1519C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1519C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1519C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1519C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1519C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1519C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1519C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1519C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1519C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1519C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1519C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1519C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1519C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1519C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1519C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1519C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1519C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1519C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1519C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1519C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1519C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1519C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1519C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1519C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1519C43v68Ev,
  (VTBL_ENTRY)&_ZN7S1519C43v69Ev,
  (VTBL_ENTRY)&_ZN7S1519C33v70Ev,
  (VTBL_ENTRY)&_ZN7S1519C33v71Ev,
  (VTBL_ENTRY)&_ZN7S1519C33v72Ev,
  (VTBL_ENTRY)&_ZN7S1519C33v73Ev,
  (VTBL_ENTRY)&_ZN7S1519C33v74Ev,
  (VTBL_ENTRY)&_ZN7S1519C33v75Ev,
  (VTBL_ENTRY)&_ZN7S1519C33v76Ev,
  (VTBL_ENTRY)&_ZN7S1519C33v77Ev,
  (VTBL_ENTRY)&_ZN7S1519C33v78Ev,
  (VTBL_ENTRY)&_ZN7S1519C33v79Ev,
  (VTBL_ENTRY)&_ZN7S1519C33v80Ev,
  (VTBL_ENTRY)&_ZN7S1519C33v81Ev,
  (VTBL_ENTRY)&_ZN7S1519C33v82Ev,
  (VTBL_ENTRY)&_ZN7S1519C33v83Ev,
  (VTBL_ENTRY)&_ZN7S1519C33v84Ev,
  (VTBL_ENTRY)&_ZN7S1519C33v85Ev,
  (VTBL_ENTRY)&_ZN7S1519C33v86Ev,
  (VTBL_ENTRY)&_ZN7S1519C33v87Ev,
  (VTBL_ENTRY)&_ZN7S1519C33v88Ev,
  (VTBL_ENTRY)&_ZN7S1519C33v89Ev,
  (VTBL_ENTRY)&_ZN7S1519C23v90Ev,
  (VTBL_ENTRY)&_ZN7S1519C23v91Ev,
};
extern VTBL_ENTRY _ZTI7S1519C2[];
extern  VTBL_ENTRY _ZTV7S1519C2[];
Class_Descriptor cd_S1519C2 = {  "S1519C2", // class name
  bases_S1519C2, 2,
  &(vtc_S1519C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(104,64), // object size
  NSPAIRA(_ZTI7S1519C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1519C2),90, //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  S1519C1  : S1519C2 {
  ::S674C6_nt s1519c1f0;
  ::S3625C32 s1519c1f1;
  virtual  ~S1519C1(); // _ZN7S1519C1D1Ev
  virtual void  v1(); // _ZN7S1519C12v1Ev
  virtual void  v2(); // _ZN7S1519C12v2Ev
  virtual void  v3(); // _ZN7S1519C12v3Ev
  virtual void  v4(); // _ZN7S1519C12v4Ev
  virtual void  v5(); // _ZN7S1519C12v5Ev
  S1519C1(); // tgen
};
//SIG(1 S1519C1) C1{ BC2{ BC3{ BC4{ 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 FC5{ m Fi[2]} Fp[2]} vd v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 FC6{ m}} vd v90 v91} vd v1 v2 v3 v4 v5 FC5 FC6}


 S1519C1 ::~S1519C1(){ note_dtor("S1519C1", this);}
void  S1519C1 ::v1(){vfunc_called(this, "_ZN7S1519C12v1Ev");}
void  S1519C1 ::v2(){vfunc_called(this, "_ZN7S1519C12v2Ev");}
void  S1519C1 ::v3(){vfunc_called(this, "_ZN7S1519C12v3Ev");}
void  S1519C1 ::v4(){vfunc_called(this, "_ZN7S1519C12v4Ev");}
void  S1519C1 ::v5(){vfunc_called(this, "_ZN7S1519C12v5Ev");}
S1519C1 ::S1519C1(){ note_ctor("S1519C1", this);} // tgen

static void Test_S1519C1()
{
  extern Class_Descriptor cd_S1519C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(15,20)];
    init_test(&cd_S1519C1, buf);
    S1519C1 *dp, &lv = *(dp=new (buf) S1519C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(112,76), "sizeof(S1519C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1519C1)");
    check_base_class_offset(lv, (S1519C4*)(S1519C3*)(S1519C2*), 0, "S1519C1");
    check_base_class_offset(lv, (S1519C3*)(S1519C2*), 0, "S1519C1");
    check_base_class_offset(lv, (S1519C2*), 0, "S1519C1");
    check_field_offset(lv, s1519c1f0, ABISELECT(100,64), "S1519C1.s1519c1f0");
    check_field_offset(lv, s1519c1f1, ABISELECT(108,72), "S1519C1.s1519c1f1");
    test_class_info(&lv, &cd_S1519C1);
    dp->~S1519C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1519C1(Test_S1519C1, "S1519C1", ABISELECT(112,76));

#else // __cplusplus

extern void _ZN7S1519C1C1Ev();
extern void _ZN7S1519C1D1Ev();
Name_Map name_map_S1519C1[] = {
  NSPAIR(_ZN7S1519C1C1Ev),
  NSPAIR(_ZN7S1519C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1519C4;
extern VTBL_ENTRY _ZTI7S1519C4[];
extern  VTBL_ENTRY _ZTV7S1519C4[];
extern Class_Descriptor cd_S1519C3;
extern VTBL_ENTRY _ZTI7S1519C3[];
extern  VTBL_ENTRY _ZTV7S1519C3[];
extern Class_Descriptor cd_S1519C2;
extern VTBL_ENTRY _ZTI7S1519C2[];
extern  VTBL_ENTRY _ZTV7S1519C2[];
static Base_Class bases_S1519C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1519C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S1519C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S1519C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S1519C1[];
extern void _ZN7S1519C1D1Ev();
extern void _ZN7S1519C1D0Ev();
extern void _ZN7S1519C42v6Ev();
extern void _ZN7S1519C42v7Ev();
extern void _ZN7S1519C42v8Ev();
extern void _ZN7S1519C42v9Ev();
extern void _ZN7S1519C43v10Ev();
extern void _ZN7S1519C43v11Ev();
extern void _ZN7S1519C43v12Ev();
extern void _ZN7S1519C43v13Ev();
extern void _ZN7S1519C43v14Ev();
extern void _ZN7S1519C43v15Ev();
extern void _ZN7S1519C43v16Ev();
extern void _ZN7S1519C43v17Ev();
extern void _ZN7S1519C43v18Ev();
extern void _ZN7S1519C43v19Ev();
extern void _ZN7S1519C43v20Ev();
extern void _ZN7S1519C43v21Ev();
extern void _ZN7S1519C43v22Ev();
extern void _ZN7S1519C43v23Ev();
extern void _ZN7S1519C43v24Ev();
extern void _ZN7S1519C43v25Ev();
extern void _ZN7S1519C43v26Ev();
extern void _ZN7S1519C43v27Ev();
extern void _ZN7S1519C43v28Ev();
extern void _ZN7S1519C43v29Ev();
extern void _ZN7S1519C43v30Ev();
extern void _ZN7S1519C43v31Ev();
extern void _ZN7S1519C43v32Ev();
extern void _ZN7S1519C43v33Ev();
extern void _ZN7S1519C43v34Ev();
extern void _ZN7S1519C43v35Ev();
extern void _ZN7S1519C43v36Ev();
extern void _ZN7S1519C43v37Ev();
extern void _ZN7S1519C43v38Ev();
extern void _ZN7S1519C43v39Ev();
extern void _ZN7S1519C43v40Ev();
extern void _ZN7S1519C43v41Ev();
extern void _ZN7S1519C43v42Ev();
extern void _ZN7S1519C43v43Ev();
extern void _ZN7S1519C43v44Ev();
extern void _ZN7S1519C43v45Ev();
extern void _ZN7S1519C43v46Ev();
extern void _ZN7S1519C43v47Ev();
extern void _ZN7S1519C43v48Ev();
extern void _ZN7S1519C43v49Ev();
extern void _ZN7S1519C43v50Ev();
extern void _ZN7S1519C43v51Ev();
extern void _ZN7S1519C43v52Ev();
extern void _ZN7S1519C43v53Ev();
extern void _ZN7S1519C43v54Ev();
extern void _ZN7S1519C43v55Ev();
extern void _ZN7S1519C43v56Ev();
extern void _ZN7S1519C43v57Ev();
extern void _ZN7S1519C43v58Ev();
extern void _ZN7S1519C43v59Ev();
extern void _ZN7S1519C43v60Ev();
extern void _ZN7S1519C43v61Ev();
extern void _ZN7S1519C43v62Ev();
extern void _ZN7S1519C43v63Ev();
extern void _ZN7S1519C43v64Ev();
extern void _ZN7S1519C43v65Ev();
extern void _ZN7S1519C43v66Ev();
extern void _ZN7S1519C43v67Ev();
extern void _ZN7S1519C43v68Ev();
extern void _ZN7S1519C43v69Ev();
extern void _ZN7S1519C33v70Ev();
extern void _ZN7S1519C33v71Ev();
extern void _ZN7S1519C33v72Ev();
extern void _ZN7S1519C33v73Ev();
extern void _ZN7S1519C33v74Ev();
extern void _ZN7S1519C33v75Ev();
extern void _ZN7S1519C33v76Ev();
extern void _ZN7S1519C33v77Ev();
extern void _ZN7S1519C33v78Ev();
extern void _ZN7S1519C33v79Ev();
extern void _ZN7S1519C33v80Ev();
extern void _ZN7S1519C33v81Ev();
extern void _ZN7S1519C33v82Ev();
extern void _ZN7S1519C33v83Ev();
extern void _ZN7S1519C33v84Ev();
extern void _ZN7S1519C33v85Ev();
extern void _ZN7S1519C33v86Ev();
extern void _ZN7S1519C33v87Ev();
extern void _ZN7S1519C33v88Ev();
extern void _ZN7S1519C33v89Ev();
extern void _ZN7S1519C23v90Ev();
extern void _ZN7S1519C23v91Ev();
extern void _ZN7S1519C12v1Ev();
extern void _ZN7S1519C12v2Ev();
extern void _ZN7S1519C12v3Ev();
extern void _ZN7S1519C12v4Ev();
extern void _ZN7S1519C12v5Ev();
static  VTBL_ENTRY vtc_S1519C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1519C1[0]),
  (VTBL_ENTRY)&_ZN7S1519C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1519C1D0Ev,
  (VTBL_ENTRY)&_ZN7S1519C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1519C42v7Ev,
  (VTBL_ENTRY)&_ZN7S1519C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1519C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1519C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1519C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1519C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1519C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1519C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1519C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1519C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1519C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1519C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1519C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1519C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1519C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1519C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1519C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1519C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1519C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1519C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1519C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1519C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1519C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1519C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1519C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1519C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1519C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1519C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1519C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1519C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1519C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1519C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1519C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1519C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1519C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1519C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1519C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1519C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1519C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1519C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1519C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1519C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1519C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1519C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1519C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1519C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1519C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1519C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1519C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1519C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1519C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1519C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1519C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1519C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1519C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1519C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1519C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1519C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1519C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1519C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1519C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1519C43v68Ev,
  (VTBL_ENTRY)&_ZN7S1519C43v69Ev,
  (VTBL_ENTRY)&_ZN7S1519C33v70Ev,
  (VTBL_ENTRY)&_ZN7S1519C33v71Ev,
  (VTBL_ENTRY)&_ZN7S1519C33v72Ev,
  (VTBL_ENTRY)&_ZN7S1519C33v73Ev,
  (VTBL_ENTRY)&_ZN7S1519C33v74Ev,
  (VTBL_ENTRY)&_ZN7S1519C33v75Ev,
  (VTBL_ENTRY)&_ZN7S1519C33v76Ev,
  (VTBL_ENTRY)&_ZN7S1519C33v77Ev,
  (VTBL_ENTRY)&_ZN7S1519C33v78Ev,
  (VTBL_ENTRY)&_ZN7S1519C33v79Ev,
  (VTBL_ENTRY)&_ZN7S1519C33v80Ev,
  (VTBL_ENTRY)&_ZN7S1519C33v81Ev,
  (VTBL_ENTRY)&_ZN7S1519C33v82Ev,
  (VTBL_ENTRY)&_ZN7S1519C33v83Ev,
  (VTBL_ENTRY)&_ZN7S1519C33v84Ev,
  (VTBL_ENTRY)&_ZN7S1519C33v85Ev,
  (VTBL_ENTRY)&_ZN7S1519C33v86Ev,
  (VTBL_ENTRY)&_ZN7S1519C33v87Ev,
  (VTBL_ENTRY)&_ZN7S1519C33v88Ev,
  (VTBL_ENTRY)&_ZN7S1519C33v89Ev,
  (VTBL_ENTRY)&_ZN7S1519C23v90Ev,
  (VTBL_ENTRY)&_ZN7S1519C23v91Ev,
  (VTBL_ENTRY)&_ZN7S1519C12v1Ev,
  (VTBL_ENTRY)&_ZN7S1519C12v2Ev,
  (VTBL_ENTRY)&_ZN7S1519C12v3Ev,
  (VTBL_ENTRY)&_ZN7S1519C12v4Ev,
  (VTBL_ENTRY)&_ZN7S1519C12v5Ev,
};
extern VTBL_ENTRY _ZTI7S1519C1[];
extern  VTBL_ENTRY _ZTV7S1519C1[];
Class_Descriptor cd_S1519C1 = {  "S1519C1", // class name
  bases_S1519C1, 3,
  &(vtc_S1519C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(112,76), // object size
  NSPAIRA(_ZTI7S1519C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1519C1),95, //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  S2638C3_nt  {
  int s2638c3f0;
  void  mf2638c3(); // _ZN10S2638C3_nt8mf2638c3Ev
};
//SIG(-1 S2638C3_nt) C1{ m Fi}


void  S2638C3_nt ::mf2638c3(){}

//skip512 S2638C3_nt

#else // __cplusplus

Class_Descriptor cd_S2638C3_nt = {  "S2638C3_nt", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  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  S2638C2_nt  : S2638C3_nt {
};
//SIG(-1 S2638C2_nt) C1{ BC2{ m Fi}}



//skip512 S2638C2_nt

#else // __cplusplus

extern Class_Descriptor cd_S2638C3_nt;
static Base_Class bases_S2638C2_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2638C3_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_S2638C2_nt = {  "S2638C2_nt", // class name
  bases_S2638C2_nt, 1,
  0, // no vftv
  0, //no vtt
  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  S2638C4_nt  {
  int s2638c4f0;
  char s2638c4f1;
  void  mf2638c4(); // _ZN10S2638C4_nt8mf2638c4Ev
};
//SIG(-1 S2638C4_nt) C1{ m Fi Fc}


void  S2638C4_nt ::mf2638c4(){}

//skip512 S2638C4_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2638C8_nt  {
  void *s2638c8f0;
  void  mf2638c8(); // _ZN10S2638C8_nt8mf2638c8Ev
};
//SIG(-1 S2638C8_nt) C1{ m Fp}


void  S2638C8_nt ::mf2638c8(){}

//skip512 S2638C8_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2638C7_nt  {
  ::S2638C8_nt s2638c7f0;
  void  mf2638c7(); // _ZN10S2638C7_nt8mf2638c7Ev
};
//SIG(-1 S2638C7_nt) C1{ m FC2{ m Fp}}


void  S2638C7_nt ::mf2638c7(){}

//skip512 S2638C7_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2638C6_nt  {
  ::S2638C7_nt s2638c6f0;
  void  mf2638c6(); // _ZN10S2638C6_nt8mf2638c6Ev
};
//SIG(-1 S2638C6_nt) C1{ m FC2{ m FC3{ m Fp}}}


void  S2638C6_nt ::mf2638c6(){}

//skip512 S2638C6_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2638C10_nt  {
  char s2638c10f0[3];
  void  mf2638c10(); // _ZN11S2638C10_nt9mf2638c10Ev
};
//SIG(-1 S2638C10_nt) C1{ m Fc[3]}


void  S2638C10_nt ::mf2638c10(){}

//skip512 S2638C10_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2638C11  {
  void *s2638c11f0;
  void  mf2638c11(); // _ZN8S2638C119mf2638c11Ev
};
//SIG(-1 S2638C11) C1{ m Fp}


void  S2638C11 ::mf2638c11(){}

static void Test_S2638C11()
{
  {
    init_simple_test("S2638C11");
    S2638C11 lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S2638C11)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2638C11)");
    check_field_offset(lv, s2638c11f0, 0, "S2638C11.s2638c11f0");
  }
}
static Arrange_To_Call_Me vS2638C11(Test_S2638C11, "S2638C11", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2638C1  : S2638C2_nt {
  ::S2638C4_nt s2638c1f0;
  int s2638c1f1;
  ::S2638C4_nt s2638c1f2;
  ::S2638C4_nt s2638c1f3;
  ::S2638C4_nt s2638c1f4;
  ::S2638C4_nt s2638c1f5;
  ::S2638C4_nt s2638c1f6;
  ::S3625C33_nt s2638c1f7;
  ::S2638C6_nt s2638c1f8;
  ::S2638C8_nt s2638c1f9;
  ::S2638C10_nt s2638c1f10;
  int s2638c1f11;
  short s2638c1f12[2];
  int s2638c1f13:2;
  int s2638c1f14:2;
  int s2638c1f15:2;
  unsigned int s2638c1f16:1;
  unsigned int s2638c1f17:1;
  unsigned int s2638c1f18:1;
  unsigned char s2638c1f19:1;
  int s2638c1f20:2;
  unsigned int s2638c1f21:1;
  unsigned int s2638c1f22:1;
  int s2638c1f23:3;
  int s2638c1f24:2;
  unsigned int s2638c1f25:1;
  int s2638c1f26:3;
  unsigned int s2638c1f27:1;
  int s2638c1f28:7;
  int s2638c1f29:2;
  int s2638c1f30:2;
  unsigned int s2638c1f31:1;
  ::S2638C6_nt s2638c1f32;
  short s2638c1f33[3];
  ::S2638C6_nt s2638c1f34;
  ::S2638C6_nt s2638c1f35;
  ::S2638C11 s2638c1f36;
  ::S2638C6_nt s2638c1f37;
  ::S2638C4_nt s2638c1f38;
};
//SIG(1 S2638C1) C1{ BC2{ BC3{ m Fi}} FC4{ m Fi Fc} Fi FC4 FC4 FC4 FC4 FC4 FC5{ m Fp} FC6{ m FC7{ m FC8{ m Fp}}} FC8 FC9{ m Fc[3]} Fi Fs[2] Fi:2 Fi:2 Fi:2 Fi:1 Fi:1 Fi:1 Fc:1 Fi:2 Fi:1 Fi:1 Fi:3 Fi:2 Fi:1 Fi:3 Fi:1 Fi:7 Fi:2 Fi:2 Fi:1 FC6 Fs[3] FC6 FC6 FC10{ m Fp} FC6 FC4}



static void Test_S2638C1()
{
  extern Class_Descriptor cd_S2638C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(21,32)];
    init_test(&cd_S2638C1, buf);
    S2638C1 &lv = *(new (buf) S2638C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(160,124), "sizeof(S2638C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2638C1)");
    check_base_class_offset(lv, (S2638C3_nt*)(S2638C2_nt*), 0, "S2638C1");
    check_base_class_offset(lv, (S2638C2_nt*), 0, "S2638C1");
    check_field_offset(lv, s2638c1f0, 4, "S2638C1.s2638c1f0");
    check_field_offset(lv, s2638c1f1, 12, "S2638C1.s2638c1f1");
    check_field_offset(lv, s2638c1f2, 16, "S2638C1.s2638c1f2");
    check_field_offset(lv, s2638c1f3, 24, "S2638C1.s2638c1f3");
    check_field_offset(lv, s2638c1f4, 32, "S2638C1.s2638c1f4");
    check_field_offset(lv, s2638c1f5, 40, "S2638C1.s2638c1f5");
    check_field_offset(lv, s2638c1f6, 48, "S2638C1.s2638c1f6");
    check_field_offset(lv, s2638c1f7, 56, "S2638C1.s2638c1f7");
    check_field_offset(lv, s2638c1f8, ABISELECT(64,60), "S2638C1.s2638c1f8");
    check_field_offset(lv, s2638c1f9, ABISELECT(72,64), "S2638C1.s2638c1f9");
    check_field_offset(lv, s2638c1f10, ABISELECT(80,68), "S2638C1.s2638c1f10");
    check_field_offset(lv, s2638c1f11, ABISELECT(84,72), "S2638C1.s2638c1f11");
    check_field_offset(lv, s2638c1f12, ABISELECT(88,76), "S2638C1.s2638c1f12");
    set_bf_and_test(lv, s2638c1f13, ABISELECT(92,80), 0, 2, 1, "S2638C1");
    set_bf_and_test(lv, s2638c1f13, ABISELECT(92,80), 0, 2, hide_sll(1LL<<1), "S2638C1");
    set_bf_and_test(lv, s2638c1f14, ABISELECT(92,80), 2, 2, 1, "S2638C1");
    set_bf_and_test(lv, s2638c1f14, ABISELECT(92,80), 2, 2, hide_sll(1LL<<1), "S2638C1");
    set_bf_and_test(lv, s2638c1f15, ABISELECT(92,80), 4, 2, 1, "S2638C1");
    set_bf_and_test(lv, s2638c1f15, ABISELECT(92,80), 4, 2, hide_sll(1LL<<1), "S2638C1");
    set_bf_and_test(lv, s2638c1f16, ABISELECT(92,80), 6, 1, 1, "S2638C1");
    set_bf_and_test(lv, s2638c1f17, ABISELECT(92,80), 7, 1, 1, "S2638C1");
    set_bf_and_test(lv, s2638c1f18, ABISELECT(93,81), 0, 1, 1, "S2638C1");
    set_bf_and_test(lv, s2638c1f19, ABISELECT(93,81), 1, 1, 1, "S2638C1");
    set_bf_and_test(lv, s2638c1f20, ABISELECT(93,81), 2, 2, 1, "S2638C1");
    set_bf_and_test(lv, s2638c1f20, ABISELECT(93,81), 2, 2, hide_sll(1LL<<1), "S2638C1");
    set_bf_and_test(lv, s2638c1f21, ABISELECT(93,81), 4, 1, 1, "S2638C1");
    set_bf_and_test(lv, s2638c1f22, ABISELECT(93,81), 5, 1, 1, "S2638C1");
    set_bf_and_test(lv, s2638c1f23, ABISELECT(93,81), 6, 3, 1, "S2638C1");
    set_bf_and_test(lv, s2638c1f23, ABISELECT(93,81), 6, 3, hide_sll(1LL<<2), "S2638C1");
    set_bf_and_test(lv, s2638c1f24, ABISELECT(94,82), 1, 2, 1, "S2638C1");
    set_bf_and_test(lv, s2638c1f24, ABISELECT(94,82), 1, 2, hide_sll(1LL<<1), "S2638C1");
    set_bf_and_test(lv, s2638c1f25, ABISELECT(94,82), 3, 1, 1, "S2638C1");
    set_bf_and_test(lv, s2638c1f26, ABISELECT(94,82), 4, 3, 1, "S2638C1");
    set_bf_and_test(lv, s2638c1f26, ABISELECT(94,82), 4, 3, hide_sll(1LL<<2), "S2638C1");
    set_bf_and_test(lv, s2638c1f27, ABISELECT(94,82), 7, 1, 1, "S2638C1");
    set_bf_and_test(lv, s2638c1f28, ABISELECT(95,83), 0, 7, 1, "S2638C1");
    set_bf_and_test(lv, s2638c1f28, ABISELECT(95,83), 0, 7, hide_sll(1LL<<6), "S2638C1");
    set_bf_and_test(lv, s2638c1f29, ABISELECT(96,84), 0, 2, 1, "S2638C1");
    set_bf_and_test(lv, s2638c1f29, ABISELECT(96,84), 0, 2, hide_sll(1LL<<1), "S2638C1");
    set_bf_and_test(lv, s2638c1f30, ABISELECT(96,84), 2, 2, 1, "S2638C1");
    set_bf_and_test(lv, s2638c1f30, ABISELECT(96,84), 2, 2, hide_sll(1LL<<1), "S2638C1");
    set_bf_and_test(lv, s2638c1f31, ABISELECT(96,84), 4, 1, 1, "S2638C1");
    check_field_offset(lv, s2638c1f32, ABISELECT(104,88), "S2638C1.s2638c1f32");
    check_field_offset(lv, s2638c1f33, ABISELECT(112,92), "S2638C1.s2638c1f33");
    check_field_offset(lv, s2638c1f34, ABISELECT(120,100), "S2638C1.s2638c1f34");
    check_field_offset(lv, s2638c1f35, ABISELECT(128,104), "S2638C1.s2638c1f35");
    check_field_offset(lv, s2638c1f36, ABISELECT(136,108), "S2638C1.s2638c1f36");
    check_field_offset(lv, s2638c1f37, ABISELECT(144,112), "S2638C1.s2638c1f37");
    check_field_offset(lv, s2638c1f38, ABISELECT(152,116), "S2638C1.s2638c1f38");
    test_class_info(&lv, &cd_S2638C1);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2638C1(Test_S2638C1, "S2638C1", ABISELECT(160,124));

#else // __cplusplus

extern Class_Descriptor cd_S2638C3_nt;
extern Class_Descriptor cd_S2638C2_nt;
static Base_Class bases_S2638C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2638C3_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_S2638C2_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_S2638C1 = {  "S2638C1", // class name
  bases_S2638C1, 2,
  0, // no vftv
  0, //no vtt
  ABISELECT(160,124), // 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  S9782C3  {
  void *s9782c3f0;
  char s9782c3f1;
  void  mf9782c3(); // _ZN7S9782C38mf9782c3Ev
};
//SIG(-1 S9782C3) C1{ m Fp Fc}


void  S9782C3 ::mf9782c3(){}

static void Test_S9782C3()
{
  {
    init_simple_test("S9782C3");
    S9782C3 lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S9782C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9782C3)");
    check_field_offset(lv, s9782c3f0, 0, "S9782C3.s9782c3f0");
    check_field_offset(lv, s9782c3f1, ABISELECT(8,4), "S9782C3.s9782c3f1");
  }
}
static Arrange_To_Call_Me vS9782C3(Test_S9782C3, "S9782C3", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S9782C2  {
  ::S9782C3 s9782c2f0;
  char s9782c2f1[5];
  virtual  ~S9782C2(); // _ZN7S9782C2D1Ev
  virtual void  v4(); // _ZN7S9782C22v4Ev
  virtual void  v5(); // _ZN7S9782C22v5Ev
  virtual void  v6(); // _ZN7S9782C22v6Ev
  virtual void  v7(); // _ZN7S9782C22v7Ev
  virtual void  v8(); // _ZN7S9782C22v8Ev
  S9782C2(); // tgen
};
//SIG(-1 S9782C2) C1{ vd v1 v2 v3 v4 v5 FC2{ m Fp Fc} Fc[5]}


 S9782C2 ::~S9782C2(){ note_dtor("S9782C2", this);}
void  S9782C2 ::v4(){vfunc_called(this, "_ZN7S9782C22v4Ev");}
void  S9782C2 ::v5(){vfunc_called(this, "_ZN7S9782C22v5Ev");}
void  S9782C2 ::v6(){vfunc_called(this, "_ZN7S9782C22v6Ev");}
void  S9782C2 ::v7(){vfunc_called(this, "_ZN7S9782C22v7Ev");}
void  S9782C2 ::v8(){vfunc_called(this, "_ZN7S9782C22v8Ev");}
S9782C2 ::S9782C2(){ note_ctor("S9782C2", this);} // tgen

static void Test_S9782C2()
{
  extern Class_Descriptor cd_S9782C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,6)];
    init_test(&cd_S9782C2, buf);
    S9782C2 *dp, &lv = *(dp=new (buf) S9782C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S9782C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9782C2)");
    check_field_offset(lv, s9782c2f0, ABISELECT(8,4), "S9782C2.s9782c2f0");
    check_field_offset(lv, s9782c2f1, ABISELECT(24,12), "S9782C2.s9782c2f1");
    test_class_info(&lv, &cd_S9782C2);
    dp->~S9782C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9782C2(Test_S9782C2, "S9782C2", ABISELECT(32,20));

#else // __cplusplus

extern void _ZN7S9782C2C1Ev();
extern void _ZN7S9782C2D1Ev();
Name_Map name_map_S9782C2[] = {
  NSPAIR(_ZN7S9782C2C1Ev),
  NSPAIR(_ZN7S9782C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S9782C2[];
extern void _ZN7S9782C2D1Ev();
extern void _ZN7S9782C2D0Ev();
extern void _ZN7S9782C22v4Ev();
extern void _ZN7S9782C22v5Ev();
extern void _ZN7S9782C22v6Ev();
extern void _ZN7S9782C22v7Ev();
extern void _ZN7S9782C22v8Ev();
static  VTBL_ENTRY vtc_S9782C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9782C2[0]),
  (VTBL_ENTRY)&_ZN7S9782C2D1Ev,
  (VTBL_ENTRY)&_ZN7S9782C2D0Ev,
  (VTBL_ENTRY)&_ZN7S9782C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9782C22v5Ev,
  (VTBL_ENTRY)&_ZN7S9782C22v6Ev,
  (VTBL_ENTRY)&_ZN7S9782C22v7Ev,
  (VTBL_ENTRY)&_ZN7S9782C22v8Ev,
};
extern VTBL_ENTRY _ZTI7S9782C2[];
extern  VTBL_ENTRY _ZTV7S9782C2[];
Class_Descriptor cd_S9782C2 = {  "S9782C2", // class name
  0,0,//no base classes
  &(vtc_S9782C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,20), // object size
  NSPAIRA(_ZTI7S9782C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S9782C2),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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S9782C7_nt  {
  virtual  ~S9782C7_nt(); // _ZN10S9782C7_ntD1Ev
  virtual void  v9(); // _ZN10S9782C7_nt2v9Ev
  virtual void  v10(); // _ZN10S9782C7_nt3v10Ev
  virtual void  v11(); // _ZN10S9782C7_nt3v11Ev
  virtual void  v12(); // _ZN10S9782C7_nt3v12Ev
  virtual void  v13(); // _ZN10S9782C7_nt3v13Ev
  virtual void  v14(); // _ZN10S9782C7_nt3v14Ev
  virtual void  v15(); // _ZN10S9782C7_nt3v15Ev
  virtual void  v16(); // _ZN10S9782C7_nt3v16Ev
  virtual void  v17(); // _ZN10S9782C7_nt3v17Ev
  S9782C7_nt(); // tgen
};
//SIG(-1 S9782C7_nt) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9}


 S9782C7_nt ::~S9782C7_nt(){ note_dtor("S9782C7_nt", this);}
void  S9782C7_nt ::v9(){vfunc_called(this, "_ZN10S9782C7_nt2v9Ev");}
void  S9782C7_nt ::v10(){vfunc_called(this, "_ZN10S9782C7_nt3v10Ev");}
void  S9782C7_nt ::v11(){vfunc_called(this, "_ZN10S9782C7_nt3v11Ev");}
void  S9782C7_nt ::v12(){vfunc_called(this, "_ZN10S9782C7_nt3v12Ev");}
void  S9782C7_nt ::v13(){vfunc_called(this, "_ZN10S9782C7_nt3v13Ev");}
void  S9782C7_nt ::v14(){vfunc_called(this, "_ZN10S9782C7_nt3v14Ev");}
void  S9782C7_nt ::v15(){vfunc_called(this, "_ZN10S9782C7_nt3v15Ev");}
void  S9782C7_nt ::v16(){vfunc_called(this, "_ZN10S9782C7_nt3v16Ev");}
void  S9782C7_nt ::v17(){vfunc_called(this, "_ZN10S9782C7_nt3v17Ev");}
S9782C7_nt ::S9782C7_nt(){ note_ctor("S9782C7_nt", this);} // tgen

//skip512 S9782C7_nt

#else // __cplusplus

extern void _ZN10S9782C7_ntC1Ev();
extern void _ZN10S9782C7_ntD1Ev();
Name_Map name_map_S9782C7_nt[] = {
  NSPAIR(_ZN10S9782C7_ntC1Ev),
  NSPAIR(_ZN10S9782C7_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S9782C7_nt[];
extern void _ZN10S9782C7_ntD1Ev();
extern void _ZN10S9782C7_ntD0Ev();
extern void _ZN10S9782C7_nt2v9Ev();
extern void _ZN10S9782C7_nt3v10Ev();
extern void _ZN10S9782C7_nt3v11Ev();
extern void _ZN10S9782C7_nt3v12Ev();
extern void _ZN10S9782C7_nt3v13Ev();
extern void _ZN10S9782C7_nt3v14Ev();
extern void _ZN10S9782C7_nt3v15Ev();
extern void _ZN10S9782C7_nt3v16Ev();
extern void _ZN10S9782C7_nt3v17Ev();
static  VTBL_ENTRY vtc_S9782C7_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S9782C7_nt[0]),
  (VTBL_ENTRY)&_ZN10S9782C7_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S9782C7_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S9782C7_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S9782C7_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S9782C7_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S9782C7_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S9782C7_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S9782C7_nt3v14Ev,
  (VTBL_ENTRY)&_ZN10S9782C7_nt3v15Ev,
  (VTBL_ENTRY)&_ZN10S9782C7_nt3v16Ev,
  (VTBL_ENTRY)&_ZN10S9782C7_nt3v17Ev,
};
extern VTBL_ENTRY _ZTI10S9782C7_nt[];
VTBL_ENTRY *P__ZTI10S9782C7_nt = _ZTI10S9782C7_nt; 
extern  VTBL_ENTRY _ZTV10S9782C7_nt[];
Class_Descriptor cd_S9782C7_nt = {  "S9782C7_nt", // class name
  0,0,//no base classes
  &(vtc_S9782C7_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI10S9782C7_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S9782C7_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  S9782C6  : S9782C7_nt {
  virtual  ~S9782C6(); // _ZN7S9782C6D1Ev
  S9782C6(); // tgen
};
//SIG(-1 S9782C6) C1{ BC2{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9} vd}


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

static void Test_S9782C6()
{
  extern Class_Descriptor cd_S9782C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S9782C6, buf);
    S9782C6 *dp, &lv = *(dp=new (buf) S9782C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S9782C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9782C6)");
    check_base_class_offset(lv, (S9782C7_nt*), 0, "S9782C6");
    test_class_info(&lv, &cd_S9782C6);
    dp->~S9782C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9782C6(Test_S9782C6, "S9782C6", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S9782C6C1Ev();
extern void _ZN7S9782C6D1Ev();
Name_Map name_map_S9782C6[] = {
  NSPAIR(_ZN7S9782C6C1Ev),
  NSPAIR(_ZN7S9782C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S9782C7_nt;
extern VTBL_ENTRY _ZTI10S9782C7_nt[];
extern  VTBL_ENTRY _ZTV10S9782C7_nt[];
static Base_Class bases_S9782C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S9782C7_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 _ZTI7S9782C6[];
extern void _ZN7S9782C6D1Ev();
extern void _ZN7S9782C6D0Ev();
extern void _ZN10S9782C7_nt2v9Ev();
extern void _ZN10S9782C7_nt3v10Ev();
extern void _ZN10S9782C7_nt3v11Ev();
extern void _ZN10S9782C7_nt3v12Ev();
extern void _ZN10S9782C7_nt3v13Ev();
extern void _ZN10S9782C7_nt3v14Ev();
extern void _ZN10S9782C7_nt3v15Ev();
extern void _ZN10S9782C7_nt3v16Ev();
extern void _ZN10S9782C7_nt3v17Ev();
static  VTBL_ENTRY vtc_S9782C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9782C6[0]),
  (VTBL_ENTRY)&_ZN7S9782C6D1Ev,
  (VTBL_ENTRY)&_ZN7S9782C6D0Ev,
  (VTBL_ENTRY)&_ZN10S9782C7_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S9782C7_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S9782C7_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S9782C7_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S9782C7_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S9782C7_nt3v14Ev,
  (VTBL_ENTRY)&_ZN10S9782C7_nt3v15Ev,
  (VTBL_ENTRY)&_ZN10S9782C7_nt3v16Ev,
  (VTBL_ENTRY)&_ZN10S9782C7_nt3v17Ev,
};
extern VTBL_ENTRY _ZTI7S9782C6[];
extern  VTBL_ENTRY _ZTV7S9782C6[];
Class_Descriptor cd_S9782C6 = {  "S9782C6", // class name
  bases_S9782C6, 1,
  &(vtc_S9782C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S9782C6),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S9782C6),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  S9782C9  {
  char s9782c9f0[3];
  short s9782c9f1;
  char s9782c9f2;
  int s9782c9f3;
  long s9782c9f4;
  void  mf9782c9(); // _ZN7S9782C98mf9782c9Ev
};
//SIG(-1 S9782C9) C1{ m Fc[3] Fs Fc Fi Fl}


void  S9782C9 ::mf9782c9(){}

static void Test_S9782C9()
{
  {
    init_simple_test("S9782C9");
    S9782C9 lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S9782C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9782C9)");
    check_field_offset(lv, s9782c9f0, 0, "S9782C9.s9782c9f0");
    check_field_offset(lv, s9782c9f1, 4, "S9782C9.s9782c9f1");
    check_field_offset(lv, s9782c9f2, 6, "S9782C9.s9782c9f2");
    check_field_offset(lv, s9782c9f3, 8, "S9782C9.s9782c9f3");
    check_field_offset(lv, s9782c9f4, ABISELECT(16,12), "S9782C9.s9782c9f4");
  }
}
static Arrange_To_Call_Me vS9782C9(Test_S9782C9, "S9782C9", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S9782C12  {
  void *s9782c12f0;
  char s9782c12f1;
  void  mf9782c12(); // _ZN8S9782C129mf9782c12Ev
};
//SIG(-1 S9782C12) C1{ m Fp Fc}


void  S9782C12 ::mf9782c12(){}

static void Test_S9782C12()
{
  {
    init_simple_test("S9782C12");
    S9782C12 lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S9782C12)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9782C12)");
    check_field_offset(lv, s9782c12f0, 0, "S9782C12.s9782c12f0");
    check_field_offset(lv, s9782c12f1, ABISELECT(8,4), "S9782C12.s9782c12f1");
  }
}
static Arrange_To_Call_Me vS9782C12(Test_S9782C12, "S9782C12", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S9782C11  {
  ::S9782C12 s9782c11f0;
  void *s9782c11f1[2];
  void  mf9782c11(); // _ZN8S9782C119mf9782c11Ev
};
//SIG(-1 S9782C11) C1{ m FC2{ m Fp Fc} Fp[2]}


void  S9782C11 ::mf9782c11(){}

static void Test_S9782C11()
{
  {
    init_simple_test("S9782C11");
    S9782C11 lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S9782C11)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9782C11)");
    check_field_offset(lv, s9782c11f0, 0, "S9782C11.s9782c11f0");
    check_field_offset(lv, s9782c11f1, ABISELECT(16,8), "S9782C11.s9782c11f1");
  }
}
static Arrange_To_Call_Me vS9782C11(Test_S9782C11, "S9782C11", ABISELECT(32,16));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S9782C10  {
  ::S9782C11 s9782c10f0;
  int s9782c10f1;
  void  mf9782c10(); // _ZN8S9782C109mf9782c10Ev
};
//SIG(-1 S9782C10) C1{ m FC2{ m FC3{ m Fp Fc} Fp[2]} Fi}


void  S9782C10 ::mf9782c10(){}

static void Test_S9782C10()
{
  {
    init_simple_test("S9782C10");
    S9782C10 lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S9782C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9782C10)");
    check_field_offset(lv, s9782c10f0, 0, "S9782C10.s9782c10f0");
    check_field_offset(lv, s9782c10f1, ABISELECT(32,16), "S9782C10.s9782c10f1");
  }
}
static Arrange_To_Call_Me vS9782C10(Test_S9782C10, "S9782C10", ABISELECT(40,20));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S9782C5  : S9782C6 {
  ::S9782C3 s9782c5f0;
  ::S9782C9 s9782c5f1;
  ::S9782C10 s9782c5f2;
  int s9782c5f3;
  virtual  ~S9782C5(); // _ZN7S9782C5D1Ev
  virtual void  v18(); // _ZN7S9782C53v18Ev
  virtual void  v19(); // _ZN7S9782C53v19Ev
  virtual void  v20(); // _ZN7S9782C53v20Ev
  virtual void  v21(); // _ZN7S9782C53v21Ev
  virtual void  v22(); // _ZN7S9782C53v22Ev
  virtual void  v23(); // _ZN7S9782C53v23Ev
  virtual void  v24(); // _ZN7S9782C53v24Ev
  virtual void  v25(); // _ZN7S9782C53v25Ev
  virtual void  v26(); // _ZN7S9782C53v26Ev
  virtual void  v27(); // _ZN7S9782C53v27Ev
  S9782C5(); // tgen
};
//SIG(-1 S9782C5) C1{ BC2{ BC3{ vd v11 v12 v13 v14 v15 v16 v17 v18 v19} vd} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 FC4{ m Fp Fc} FC5{ m Fc[3] Fs Fc Fi Fl} FC6{ m FC7{ m FC8{ m Fp Fc} Fp[2]} Fi} Fi}


 S9782C5 ::~S9782C5(){ note_dtor("S9782C5", this);}
void  S9782C5 ::v18(){vfunc_called(this, "_ZN7S9782C53v18Ev");}
void  S9782C5 ::v19(){vfunc_called(this, "_ZN7S9782C53v19Ev");}
void  S9782C5 ::v20(){vfunc_called(this, "_ZN7S9782C53v20Ev");}
void  S9782C5 ::v21(){vfunc_called(this, "_ZN7S9782C53v21Ev");}
void  S9782C5 ::v22(){vfunc_called(this, "_ZN7S9782C53v22Ev");}
void  S9782C5 ::v23(){vfunc_called(this, "_ZN7S9782C53v23Ev");}
void  S9782C5 ::v24(){vfunc_called(this, "_ZN7S9782C53v24Ev");}
void  S9782C5 ::v25(){vfunc_called(this, "_ZN7S9782C53v25Ev");}
void  S9782C5 ::v26(){vfunc_called(this, "_ZN7S9782C53v26Ev");}
void  S9782C5 ::v27(){vfunc_called(this, "_ZN7S9782C53v27Ev");}
S9782C5 ::S9782C5(){ note_ctor("S9782C5", this);} // tgen

static void Test_S9782C5()
{
  extern Class_Descriptor cd_S9782C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,14)];
    init_test(&cd_S9782C5, buf);
    S9782C5 *dp, &lv = *(dp=new (buf) S9782C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,52), "sizeof(S9782C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9782C5)");
    check_base_class_offset(lv, (S9782C7_nt*)(S9782C6*), 0, "S9782C5");
    check_base_class_offset(lv, (S9782C6*), 0, "S9782C5");
    check_field_offset(lv, s9782c5f0, ABISELECT(8,4), "S9782C5.s9782c5f0");
    check_field_offset(lv, s9782c5f1, ABISELECT(24,12), "S9782C5.s9782c5f1");
    check_field_offset(lv, s9782c5f2, ABISELECT(48,28), "S9782C5.s9782c5f2");
    check_field_offset(lv, s9782c5f3, ABISELECT(88,48), "S9782C5.s9782c5f3");
    test_class_info(&lv, &cd_S9782C5);
    dp->~S9782C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9782C5(Test_S9782C5, "S9782C5", ABISELECT(96,52));

#else // __cplusplus

extern void _ZN7S9782C5C1Ev();
extern void _ZN7S9782C5D1Ev();
Name_Map name_map_S9782C5[] = {
  NSPAIR(_ZN7S9782C5C1Ev),
  NSPAIR(_ZN7S9782C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S9782C7_nt;
extern VTBL_ENTRY _ZTI10S9782C7_nt[];
extern  VTBL_ENTRY _ZTV10S9782C7_nt[];
extern Class_Descriptor cd_S9782C6;
extern VTBL_ENTRY _ZTI7S9782C6[];
extern  VTBL_ENTRY _ZTV7S9782C6[];
static Base_Class bases_S9782C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S9782C7_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_S9782C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S9782C5[];
extern void _ZN7S9782C5D1Ev();
extern void _ZN7S9782C5D0Ev();
extern void _ZN10S9782C7_nt2v9Ev();
extern void _ZN10S9782C7_nt3v10Ev();
extern void _ZN10S9782C7_nt3v11Ev();
extern void _ZN10S9782C7_nt3v12Ev();
extern void _ZN10S9782C7_nt3v13Ev();
extern void _ZN10S9782C7_nt3v14Ev();
extern void _ZN10S9782C7_nt3v15Ev();
extern void _ZN10S9782C7_nt3v16Ev();
extern void _ZN10S9782C7_nt3v17Ev();
extern void _ZN7S9782C53v18Ev();
extern void _ZN7S9782C53v19Ev();
extern void _ZN7S9782C53v20Ev();
extern void _ZN7S9782C53v21Ev();
extern void _ZN7S9782C53v22Ev();
extern void _ZN7S9782C53v23Ev();
extern void _ZN7S9782C53v24Ev();
extern void _ZN7S9782C53v25Ev();
extern void _ZN7S9782C53v26Ev();
extern void _ZN7S9782C53v27Ev();
static  VTBL_ENTRY vtc_S9782C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9782C5[0]),
  (VTBL_ENTRY)&_ZN7S9782C5D1Ev,
  (VTBL_ENTRY)&_ZN7S9782C5D0Ev,
  (VTBL_ENTRY)&_ZN10S9782C7_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S9782C7_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S9782C7_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S9782C7_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S9782C7_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S9782C7_nt3v14Ev,
  (VTBL_ENTRY)&_ZN10S9782C7_nt3v15Ev,
  (VTBL_ENTRY)&_ZN10S9782C7_nt3v16Ev,
  (VTBL_ENTRY)&_ZN10S9782C7_nt3v17Ev,
  (VTBL_ENTRY)&_ZN7S9782C53v18Ev,
  (VTBL_ENTRY)&_ZN7S9782C53v19Ev,
  (VTBL_ENTRY)&_ZN7S9782C53v20Ev,
  (VTBL_ENTRY)&_ZN7S9782C53v21Ev,
  (VTBL_ENTRY)&_ZN7S9782C53v22Ev,
  (VTBL_ENTRY)&_ZN7S9782C53v23Ev,
  (VTBL_ENTRY)&_ZN7S9782C53v24Ev,
  (VTBL_ENTRY)&_ZN7S9782C53v25Ev,
  (VTBL_ENTRY)&_ZN7S9782C53v26Ev,
  (VTBL_ENTRY)&_ZN7S9782C53v27Ev,
};
extern VTBL_ENTRY _ZTI7S9782C5[];
extern  VTBL_ENTRY _ZTV7S9782C5[];
Class_Descriptor cd_S9782C5 = {  "S9782C5", // class name
  bases_S9782C5, 2,
  &(vtc_S9782C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,52), // object size
  NSPAIRA(_ZTI7S9782C5),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S9782C5),23, //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  S9782C4  : S9782C5 {
  virtual  ~S9782C4(); // _ZN7S9782C4D1Ev
  S9782C4(); // tgen
};
//SIG(-1 S9782C4) C1{ BC2{ BC3{ BC4{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9} vd} vd v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 FC5{ m Fp Fc} FC6{ m Fc[3] Fs Fc Fi Fl} FC7{ m FC8{ m FC9{ m Fp Fc} Fp[2]} Fi} Fi} vd}


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

static void Test_S9782C4()
{
  extern Class_Descriptor cd_S9782C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,14)];
    init_test(&cd_S9782C4, buf);
    S9782C4 *dp, &lv = *(dp=new (buf) S9782C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,52), "sizeof(S9782C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9782C4)");
    check_base_class_offset(lv, (S9782C7_nt*)(S9782C6*)(S9782C5*), 0, "S9782C4");
    check_base_class_offset(lv, (S9782C6*)(S9782C5*), 0, "S9782C4");
    check_base_class_offset(lv, (S9782C5*), 0, "S9782C4");
    test_class_info(&lv, &cd_S9782C4);
    dp->~S9782C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9782C4(Test_S9782C4, "S9782C4", ABISELECT(96,52));

#else // __cplusplus

extern void _ZN7S9782C4C1Ev();
extern void _ZN7S9782C4D1Ev();
Name_Map name_map_S9782C4[] = {
  NSPAIR(_ZN7S9782C4C1Ev),
  NSPAIR(_ZN7S9782C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S9782C7_nt;
extern VTBL_ENTRY _ZTI10S9782C7_nt[];
extern  VTBL_ENTRY _ZTV10S9782C7_nt[];
extern Class_Descriptor cd_S9782C6;
extern VTBL_ENTRY _ZTI7S9782C6[];
extern  VTBL_ENTRY _ZTV7S9782C6[];
extern Class_Descriptor cd_S9782C5;
extern VTBL_ENTRY _ZTI7S9782C5[];
extern  VTBL_ENTRY _ZTV7S9782C5[];
static Base_Class bases_S9782C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S9782C7_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_S9782C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S9782C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S9782C4[];
extern void _ZN7S9782C4D1Ev();
extern void _ZN7S9782C4D0Ev();
extern void _ZN10S9782C7_nt2v9Ev();
extern void _ZN10S9782C7_nt3v10Ev();
extern void _ZN10S9782C7_nt3v11Ev();
extern void _ZN10S9782C7_nt3v12Ev();
extern void _ZN10S9782C7_nt3v13Ev();
extern void _ZN10S9782C7_nt3v14Ev();
extern void _ZN10S9782C7_nt3v15Ev();
extern void _ZN10S9782C7_nt3v16Ev();
extern void _ZN10S9782C7_nt3v17Ev();
extern void _ZN7S9782C53v18Ev();
extern void _ZN7S9782C53v19Ev();
extern void _ZN7S9782C53v20Ev();
extern void _ZN7S9782C53v21Ev();
extern void _ZN7S9782C53v22Ev();
extern void _ZN7S9782C53v23Ev();
extern void _ZN7S9782C53v24Ev();
extern void _ZN7S9782C53v25Ev();
extern void _ZN7S9782C53v26Ev();
extern void _ZN7S9782C53v27Ev();
static  VTBL_ENTRY vtc_S9782C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9782C4[0]),
  (VTBL_ENTRY)&_ZN7S9782C4D1Ev,
  (VTBL_ENTRY)&_ZN7S9782C4D0Ev,
  (VTBL_ENTRY)&_ZN10S9782C7_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S9782C7_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S9782C7_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S9782C7_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S9782C7_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S9782C7_nt3v14Ev,
  (VTBL_ENTRY)&_ZN10S9782C7_nt3v15Ev,
  (VTBL_ENTRY)&_ZN10S9782C7_nt3v16Ev,
  (VTBL_ENTRY)&_ZN10S9782C7_nt3v17Ev,
  (VTBL_ENTRY)&_ZN7S9782C53v18Ev,
  (VTBL_ENTRY)&_ZN7S9782C53v19Ev,
  (VTBL_ENTRY)&_ZN7S9782C53v20Ev,
  (VTBL_ENTRY)&_ZN7S9782C53v21Ev,
  (VTBL_ENTRY)&_ZN7S9782C53v22Ev,
  (VTBL_ENTRY)&_ZN7S9782C53v23Ev,
  (VTBL_ENTRY)&_ZN7S9782C53v24Ev,
  (VTBL_ENTRY)&_ZN7S9782C53v25Ev,
  (VTBL_ENTRY)&_ZN7S9782C53v26Ev,
  (VTBL_ENTRY)&_ZN7S9782C53v27Ev,
};
extern VTBL_ENTRY _ZTI7S9782C4[];
extern  VTBL_ENTRY _ZTV7S9782C4[];
Class_Descriptor cd_S9782C4 = {  "S9782C4", // class name
  bases_S9782C4, 3,
  &(vtc_S9782C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,52), // object size
  NSPAIRA(_ZTI7S9782C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S9782C4),23, //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  S9782C1  : S9782C2 {
  char s9782c1f0[2];
  ::S9782C4 s9782c1f1;
  virtual  ~S9782C1(); // _ZN7S9782C1D1Ev
  virtual void  v1(); // _ZN7S9782C12v1Ev
  virtual void  v2(); // _ZN7S9782C12v2Ev
  virtual void  v3(); // _ZN7S9782C12v3Ev
  S9782C1(); // tgen
};
//SIG(1 S9782C1) C1{ BC2{ vd v4 v5 v6 v7 v8 FC3{ m Fp Fc} Fc[5]} vd v1 v2 v3 Fc[2] FC4{ BC5{ BC6{ BC7{ vd v9 v10 v11 v12 v13 v14 v15 v16 v17} vd} vd v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 FC3 FC8{ m Fc[3] Fs Fc Fi Fl} FC9{ m FC10{ m FC11{ m Fp Fc} Fp[2]} Fi} Fi} vd}}


 S9782C1 ::~S9782C1(){ note_dtor("S9782C1", this);}
void  S9782C1 ::v1(){vfunc_called(this, "_ZN7S9782C12v1Ev");}
void  S9782C1 ::v2(){vfunc_called(this, "_ZN7S9782C12v2Ev");}
void  S9782C1 ::v3(){vfunc_called(this, "_ZN7S9782C12v3Ev");}
S9782C1 ::S9782C1(){ note_ctor("S9782C1", this);} // tgen

static void Test_S9782C1()
{
  extern Class_Descriptor cd_S9782C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(17,19)];
    init_test(&cd_S9782C1, buf);
    S9782C1 *dp, &lv = *(dp=new (buf) S9782C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(128,72), "sizeof(S9782C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9782C1)");
    check_base_class_offset(lv, (S9782C2*), 0, "S9782C1");
    check_field_offset(lv, s9782c1f0, ABISELECT(29,17), "S9782C1.s9782c1f0");
    check_field_offset(lv, s9782c1f1, ABISELECT(32,20), "S9782C1.s9782c1f1");
    test_class_info(&lv, &cd_S9782C1);
    dp->~S9782C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9782C1(Test_S9782C1, "S9782C1", ABISELECT(128,72));

#else // __cplusplus

extern void _ZN7S9782C1C1Ev();
extern void _ZN7S9782C1D1Ev();
Name_Map name_map_S9782C1[] = {
  NSPAIR(_ZN7S9782C1C1Ev),
  NSPAIR(_ZN7S9782C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S9782C2;
extern VTBL_ENTRY _ZTI7S9782C2[];
extern  VTBL_ENTRY _ZTV7S9782C2[];
static Base_Class bases_S9782C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S9782C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI7S9782C1[];
extern void _ZN7S9782C1D1Ev();
extern void _ZN7S9782C1D0Ev();
extern void _ZN7S9782C22v4Ev();
extern void _ZN7S9782C22v5Ev();
extern void _ZN7S9782C22v6Ev();
extern void _ZN7S9782C22v7Ev();
extern void _ZN7S9782C22v8Ev();
extern void _ZN7S9782C12v1Ev();
extern void _ZN7S9782C12v2Ev();
extern void _ZN7S9782C12v3Ev();
static  VTBL_ENTRY vtc_S9782C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9782C1[0]),
  (VTBL_ENTRY)&_ZN7S9782C1D1Ev,
  (VTBL_ENTRY)&_ZN7S9782C1D0Ev,
  (VTBL_ENTRY)&_ZN7S9782C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9782C22v5Ev,
  (VTBL_ENTRY)&_ZN7S9782C22v6Ev,
  (VTBL_ENTRY)&_ZN7S9782C22v7Ev,
  (VTBL_ENTRY)&_ZN7S9782C22v8Ev,
  (VTBL_ENTRY)&_ZN7S9782C12v1Ev,
  (VTBL_ENTRY)&_ZN7S9782C12v2Ev,
  (VTBL_ENTRY)&_ZN7S9782C12v3Ev,
};
extern VTBL_ENTRY _ZTI7S9782C1[];
extern  VTBL_ENTRY _ZTV7S9782C1[];
Class_Descriptor cd_S9782C1 = {  "S9782C1", // class name
  bases_S9782C1, 1,
  &(vtc_S9782C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(128,72), // object size
  NSPAIRA(_ZTI7S9782C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S9782C1),12, //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  S3520C4_nt  {
  long double s3520c4f0;
  virtual void  v3(); // _ZN10S3520C4_nt2v3Ev
  ~S3520C4_nt(); // tgen
  S3520C4_nt(); // tgen
};
//SIG(-1 S3520C4_nt) C1{ v1 FD}


void  S3520C4_nt ::v3(){vfunc_called(this, "_ZN10S3520C4_nt2v3Ev");}
S3520C4_nt ::~S3520C4_nt(){ note_dtor("S3520C4_nt", this);} // tgen
S3520C4_nt ::S3520C4_nt(){ note_ctor("S3520C4_nt", this);} // tgen

//skip512 S3520C4_nt

#else // __cplusplus

extern void _ZN10S3520C4_ntC1Ev();
extern void _ZN10S3520C4_ntD1Ev();
Name_Map name_map_S3520C4_nt[] = {
  NSPAIR(_ZN10S3520C4_ntC1Ev),
  NSPAIR(_ZN10S3520C4_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S3520C4_nt[];
extern void _ZN10S3520C4_nt2v3Ev();
static  VTBL_ENTRY vtc_S3520C4_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S3520C4_nt[0]),
  (VTBL_ENTRY)&_ZN10S3520C4_nt2v3Ev,
};
extern VTBL_ENTRY _ZTI10S3520C4_nt[];
VTBL_ENTRY *P__ZTI10S3520C4_nt = _ZTI10S3520C4_nt; 
extern  VTBL_ENTRY _ZTV10S3520C4_nt[];
Class_Descriptor cd_S3520C4_nt = {  "S3520C4_nt", // class name
  0,0,//no base classes
  &(vtc_S3520C4_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI10S3520C4_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S3520C4_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  S3520C5_nt  {
  virtual void  v4(); // _ZN10S3520C5_nt2v4Ev
  virtual void  v5(); // _ZN10S3520C5_nt2v5Ev
  virtual void  v6(); // _ZN10S3520C5_nt2v6Ev
  ~S3520C5_nt(); // tgen
  S3520C5_nt(); // tgen
};
//SIG(-1 S3520C5_nt) C1{ v1 v2 v3}


void  S3520C5_nt ::v4(){vfunc_called(this, "_ZN10S3520C5_nt2v4Ev");}
void  S3520C5_nt ::v5(){vfunc_called(this, "_ZN10S3520C5_nt2v5Ev");}
void  S3520C5_nt ::v6(){vfunc_called(this, "_ZN10S3520C5_nt2v6Ev");}
S3520C5_nt ::~S3520C5_nt(){ note_dtor("S3520C5_nt", this);} // tgen
S3520C5_nt ::S3520C5_nt(){ note_ctor("S3520C5_nt", this);} // tgen

//skip512 S3520C5_nt

#else // __cplusplus

extern void _ZN10S3520C5_ntC1Ev();
extern void _ZN10S3520C5_ntD1Ev();
Name_Map name_map_S3520C5_nt[] = {
  NSPAIR(_ZN10S3520C5_ntC1Ev),
  NSPAIR(_ZN10S3520C5_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S3520C5_nt[];
extern void _ZN10S3520C5_nt2v4Ev();
extern void _ZN10S3520C5_nt2v5Ev();
extern void _ZN10S3520C5_nt2v6Ev();
static  VTBL_ENTRY vtc_S3520C5_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S3520C5_nt[0]),
  (VTBL_ENTRY)&_ZN10S3520C5_nt2v4Ev,
  (VTBL_ENTRY)&_ZN10S3520C5_nt2v5Ev,
  (VTBL_ENTRY)&_ZN10S3520C5_nt2v6Ev,
};
extern VTBL_ENTRY _ZTI10S3520C5_nt[];
VTBL_ENTRY *P__ZTI10S3520C5_nt = _ZTI10S3520C5_nt; 
extern  VTBL_ENTRY _ZTV10S3520C5_nt[];
Class_Descriptor cd_S3520C5_nt = {  "S3520C5_nt", // class name
  0,0,//no base classes
  &(vtc_S3520C5_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI10S3520C5_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S3520C5_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  S3520C3  : virtual S3520C4_nt , S3520C5_nt {
  virtual  ~S3520C3(); // _ZN7S3520C3D2Ev
  virtual void  v7(); // _ZN7S3520C32v7Ev
  S3520C3(); // tgen
};
//SIG(-1 S3520C3) C1{ VBC2{ v2 FD} BC3{ v3 v4 v5} vd v1}


 S3520C3 ::~S3520C3(){ note_dtor("S3520C3", this);}
void  S3520C3 ::v7(){vfunc_called(this, "_ZN7S3520C32v7Ev");}
S3520C3 ::S3520C3(){ note_ctor("S3520C3", this);} // tgen

static void Test_S3520C3()
{
  extern Class_Descriptor cd_S3520C3;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(4,6)];
    init_test(&cd_S3520C3, buf);
    S3520C3 *dp, &lv = *(dp=new (buf) S3520C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,20), "sizeof(S3520C3)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3520C3)");
    check_base_class_offset(lv, (S3520C4_nt*), ABISELECT(16,4), "S3520C3");
    check_base_class_offset(lv, (S3520C5_nt*), 0, "S3520C3");
    test_class_info(&lv, &cd_S3520C3);
    dp->~S3520C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3520C3(Test_S3520C3, "S3520C3", ABISELECT(48,20));

#else // __cplusplus

extern void _ZN7S3520C3C1Ev();
extern void _ZN7S3520C3D2Ev();
Name_Map name_map_S3520C3[] = {
  NSPAIR(_ZN7S3520C3C1Ev),
  NSPAIR(_ZN7S3520C3D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S3520C4_nt;
extern VTBL_ENTRY _ZTI10S3520C4_nt[];
extern  VTBL_ENTRY _ZTV10S3520C4_nt[];
extern Class_Descriptor cd_S3520C5_nt;
extern VTBL_ENTRY _ZTI10S3520C5_nt[];
extern  VTBL_ENTRY _ZTV10S3520C5_nt[];
static Base_Class bases_S3520C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3520C4_nt,    ABISELECT(16,4), //bcp->offset
    9, //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_S3520C5_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 _ZTI7S3520C3[];
extern void _ZN10S3520C5_nt2v4Ev();
extern void _ZN10S3520C5_nt2v5Ev();
extern void _ZN10S3520C5_nt2v6Ev();
extern void _ZN7S3520C3D1Ev();
extern void _ZN7S3520C3D0Ev();
extern void _ZN7S3520C32v7Ev();
extern void _ZN10S3520C4_nt2v3Ev();
static  VTBL_ENTRY vtc_S3520C3[] = {
  ABISELECT(16,4),
  0,
  (VTBL_ENTRY)&(_ZTI7S3520C3[0]),
  (VTBL_ENTRY)&_ZN10S3520C5_nt2v4Ev,
  (VTBL_ENTRY)&_ZN10S3520C5_nt2v5Ev,
  (VTBL_ENTRY)&_ZN10S3520C5_nt2v6Ev,
  (VTBL_ENTRY)&_ZN7S3520C3D1Ev,
  (VTBL_ENTRY)&_ZN7S3520C3D0Ev,
  (VTBL_ENTRY)&_ZN7S3520C32v7Ev,
  0,
  ABISELECT(-16,-4),
  (VTBL_ENTRY)&(_ZTI7S3520C3[0]),
  (VTBL_ENTRY)&_ZN10S3520C4_nt2v3Ev,
};
extern VTBL_ENTRY _ZTV7S3520C3[];
static  VTT_ENTRY vtt_S3520C3[] = {
  {&(_ZTV7S3520C3[3]),  3,13},
  {&(_ZTV7S3520C3[12]),  12,13},
};
extern VTBL_ENTRY _ZTI7S3520C3[];
extern  VTBL_ENTRY _ZTV7S3520C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3520C3[];
Class_Descriptor cd_S3520C3 = {  "S3520C3", // class name
  bases_S3520C3, 2,
  &(vtc_S3520C3[0]), // expected_vtbl_contents
  &(vtt_S3520C3[0]), // expected_vtt_contents
  ABISELECT(48,20), // object size
  NSPAIRA(_ZTI7S3520C3),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S3520C3),13, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3520C3),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  S3520C8_nt  {
  int s3520c8f0;
  virtual void  v8(); // _ZN10S3520C8_nt2v8Ev
  virtual void  v9(); // _ZN10S3520C8_nt2v9Ev
  virtual void  v10(); // _ZN10S3520C8_nt3v10Ev
  virtual void  v11(); // _ZN10S3520C8_nt3v11Ev
  virtual void  v12(); // _ZN10S3520C8_nt3v12Ev
  virtual void  v13(); // _ZN10S3520C8_nt3v13Ev
  ~S3520C8_nt(); // tgen
  S3520C8_nt(); // tgen
};
//SIG(-1 S3520C8_nt) C1{ v1 v2 v3 v4 v5 v6 Fi}


void  S3520C8_nt ::v8(){vfunc_called(this, "_ZN10S3520C8_nt2v8Ev");}
void  S3520C8_nt ::v9(){vfunc_called(this, "_ZN10S3520C8_nt2v9Ev");}
void  S3520C8_nt ::v10(){vfunc_called(this, "_ZN10S3520C8_nt3v10Ev");}
void  S3520C8_nt ::v11(){vfunc_called(this, "_ZN10S3520C8_nt3v11Ev");}
void  S3520C8_nt ::v12(){vfunc_called(this, "_ZN10S3520C8_nt3v12Ev");}
void  S3520C8_nt ::v13(){vfunc_called(this, "_ZN10S3520C8_nt3v13Ev");}
S3520C8_nt ::~S3520C8_nt(){ note_dtor("S3520C8_nt", this);} // tgen
S3520C8_nt ::S3520C8_nt(){ note_ctor("S3520C8_nt", this);} // tgen

//skip512 S3520C8_nt

#else // __cplusplus

extern void _ZN10S3520C8_ntC1Ev();
extern void _ZN10S3520C8_ntD1Ev();
Name_Map name_map_S3520C8_nt[] = {
  NSPAIR(_ZN10S3520C8_ntC1Ev),
  NSPAIR(_ZN10S3520C8_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S3520C8_nt[];
extern void _ZN10S3520C8_nt2v8Ev();
extern void _ZN10S3520C8_nt2v9Ev();
extern void _ZN10S3520C8_nt3v10Ev();
extern void _ZN10S3520C8_nt3v11Ev();
extern void _ZN10S3520C8_nt3v12Ev();
extern void _ZN10S3520C8_nt3v13Ev();
static  VTBL_ENTRY vtc_S3520C8_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S3520C8_nt[0]),
  (VTBL_ENTRY)&_ZN10S3520C8_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S3520C8_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S3520C8_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S3520C8_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S3520C8_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S3520C8_nt3v13Ev,
};
extern VTBL_ENTRY _ZTI10S3520C8_nt[];
VTBL_ENTRY *P__ZTI10S3520C8_nt = _ZTI10S3520C8_nt; 
extern  VTBL_ENTRY _ZTV10S3520C8_nt[];
Class_Descriptor cd_S3520C8_nt = {  "S3520C8_nt", // class name
  0,0,//no base classes
  &(vtc_S3520C8_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI10S3520C8_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S3520C8_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  S3520C11_nt  {
  int s3520c11f0;
  virtual void  v14(); // _ZN11S3520C11_nt3v14Ev
  virtual void  v15(); // _ZN11S3520C11_nt3v15Ev
  virtual void  v16(); // _ZN11S3520C11_nt3v16Ev
  virtual void  v17(); // _ZN11S3520C11_nt3v17Ev
  virtual void  v18(); // _ZN11S3520C11_nt3v18Ev
  ~S3520C11_nt(); // tgen
  S3520C11_nt(); // tgen
};
//SIG(-1 S3520C11_nt) C1{ v1 v2 v3 v4 v5 Fi}


void  S3520C11_nt ::v14(){vfunc_called(this, "_ZN11S3520C11_nt3v14Ev");}
void  S3520C11_nt ::v15(){vfunc_called(this, "_ZN11S3520C11_nt3v15Ev");}
void  S3520C11_nt ::v16(){vfunc_called(this, "_ZN11S3520C11_nt3v16Ev");}
void  S3520C11_nt ::v17(){vfunc_called(this, "_ZN11S3520C11_nt3v17Ev");}
void  S3520C11_nt ::v18(){vfunc_called(this, "_ZN11S3520C11_nt3v18Ev");}
S3520C11_nt ::~S3520C11_nt(){ note_dtor("S3520C11_nt", this);} // tgen
S3520C11_nt ::S3520C11_nt(){ note_ctor("S3520C11_nt", this);} // tgen

//skip512 S3520C11_nt

#else // __cplusplus

extern void _ZN11S3520C11_ntC1Ev();
extern void _ZN11S3520C11_ntD1Ev();
Name_Map name_map_S3520C11_nt[] = {
  NSPAIR(_ZN11S3520C11_ntC1Ev),
  NSPAIR(_ZN11S3520C11_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI11S3520C11_nt[];
extern void _ZN11S3520C11_nt3v14Ev();
extern void _ZN11S3520C11_nt3v15Ev();
extern void _ZN11S3520C11_nt3v16Ev();
extern void _ZN11S3520C11_nt3v17Ev();
extern void _ZN11S3520C11_nt3v18Ev();
static  VTBL_ENTRY vtc_S3520C11_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI11S3520C11_nt[0]),
  (VTBL_ENTRY)&_ZN11S3520C11_nt3v14Ev,
  (VTBL_ENTRY)&_ZN11S3520C11_nt3v15Ev,
  (VTBL_ENTRY)&_ZN11S3520C11_nt3v16Ev,
  (VTBL_ENTRY)&_ZN11S3520C11_nt3v17Ev,
  (VTBL_ENTRY)&_ZN11S3520C11_nt3v18Ev,
};
extern VTBL_ENTRY _ZTI11S3520C11_nt[];
VTBL_ENTRY *P__ZTI11S3520C11_nt = _ZTI11S3520C11_nt; 
extern  VTBL_ENTRY _ZTV11S3520C11_nt[];
Class_Descriptor cd_S3520C11_nt = {  "S3520C11_nt", // class name
  0,0,//no base classes
  &(vtc_S3520C11_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI11S3520C11_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV11S3520C11_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  S3520C10  : S3520C11_nt {
  virtual void  v19(); // _ZN8S3520C103v19Ev
  ~S3520C10(); // tgen
  S3520C10(); // tgen
};
//SIG(-1 S3520C10) C1{ BC2{ v2 v3 v4 v5 v6 Fi} v1}


void  S3520C10 ::v19(){vfunc_called(this, "_ZN8S3520C103v19Ev");}
S3520C10 ::~S3520C10(){ note_dtor("S3520C10", this);} // tgen
S3520C10 ::S3520C10(){ note_ctor("S3520C10", this);} // tgen

static void Test_S3520C10()
{
  extern Class_Descriptor cd_S3520C10;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S3520C10, buf);
    S3520C10 *dp, &lv = *(dp=new (buf) S3520C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S3520C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3520C10)");
    check_base_class_offset(lv, (S3520C11_nt*), 0, "S3520C10");
    test_class_info(&lv, &cd_S3520C10);
    dp->~S3520C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3520C10(Test_S3520C10, "S3520C10", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN8S3520C10C1Ev();
extern void _ZN8S3520C10D1Ev();
Name_Map name_map_S3520C10[] = {
  NSPAIR(_ZN8S3520C10C1Ev),
  NSPAIR(_ZN8S3520C10D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3520C11_nt;
extern VTBL_ENTRY _ZTI11S3520C11_nt[];
extern  VTBL_ENTRY _ZTV11S3520C11_nt[];
static Base_Class bases_S3520C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3520C11_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 _ZTI8S3520C10[];
extern void _ZN11S3520C11_nt3v14Ev();
extern void _ZN11S3520C11_nt3v15Ev();
extern void _ZN11S3520C11_nt3v16Ev();
extern void _ZN11S3520C11_nt3v17Ev();
extern void _ZN11S3520C11_nt3v18Ev();
extern void _ZN8S3520C103v19Ev();
static  VTBL_ENTRY vtc_S3520C10[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S3520C10[0]),
  (VTBL_ENTRY)&_ZN11S3520C11_nt3v14Ev,
  (VTBL_ENTRY)&_ZN11S3520C11_nt3v15Ev,
  (VTBL_ENTRY)&_ZN11S3520C11_nt3v16Ev,
  (VTBL_ENTRY)&_ZN11S3520C11_nt3v17Ev,
  (VTBL_ENTRY)&_ZN11S3520C11_nt3v18Ev,
  (VTBL_ENTRY)&_ZN8S3520C103v19Ev,
};
extern VTBL_ENTRY _ZTI8S3520C10[];
extern  VTBL_ENTRY _ZTV8S3520C10[];
Class_Descriptor cd_S3520C10 = {  "S3520C10", // class name
  bases_S3520C10, 1,
  &(vtc_S3520C10[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S3520C10),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S3520C10),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  S3520C9  : virtual S3520C10 , virtual S3520C5_nt {
  int s3520c9f0;
  virtual  ~S3520C9(); // _ZN7S3520C9D2Ev
  virtual void  v20(); // _ZN7S3520C93v20Ev
  S3520C9(); // tgen
};
//SIG(-1 S3520C9) C1{ VBC2{ BC3{ v2 v3 v4 v5 v6 Fi} v7} VBC4{ v8 v9 v10} vd v1 Fi}


 S3520C9 ::~S3520C9(){ note_dtor("S3520C9", this);}
void  S3520C9 ::v20(){vfunc_called(this, "_ZN7S3520C93v20Ev");}
S3520C9 ::S3520C9(){ note_ctor("S3520C9", this);} // tgen

static void Test_S3520C9()
{
  extern Class_Descriptor cd_S3520C9;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S3520C9, buf);
    S3520C9 *dp, &lv = *(dp=new (buf) S3520C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S3520C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3520C9)");
    check_base_class_offset(lv, (S3520C11_nt*)(S3520C10*), ABISELECT(16,8), "S3520C9");
    check_base_class_offset(lv, (S3520C10*), ABISELECT(16,8), "S3520C9");
    check_base_class_offset(lv, (S3520C5_nt*), 0, "S3520C9");
    check_field_offset(lv, s3520c9f0, ABISELECT(8,4), "S3520C9.s3520c9f0");
    test_class_info(&lv, &cd_S3520C9);
    dp->~S3520C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3520C9(Test_S3520C9, "S3520C9", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN7S3520C9C1Ev();
extern void _ZN7S3520C9D2Ev();
Name_Map name_map_S3520C9[] = {
  NSPAIR(_ZN7S3520C9C1Ev),
  NSPAIR(_ZN7S3520C9D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S3520C11_nt;
extern VTBL_ENTRY _ZTI11S3520C11_nt[];
extern  VTBL_ENTRY _ZTV11S3520C11_nt[];
extern Class_Descriptor cd_S3520C10;
extern VTBL_ENTRY _ZTI8S3520C10[];
extern  VTBL_ENTRY _ZTV8S3520C10[];
extern Class_Descriptor cd_S3520C5_nt;
extern VTBL_ENTRY _ZTI10S3520C5_nt[];
extern  VTBL_ENTRY _ZTV10S3520C5_nt[];
static Base_Class bases_S3520C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3520C11_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
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S3520C10,    ABISELECT(16,8), //bcp->offset
    13, //bcp->virtual_function_table_offset
    8, //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},
  {&cd_S3520C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //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 _ZTI7S3520C9[];
extern void _ZN10S3520C5_nt2v4Ev();
extern void _ZN10S3520C5_nt2v5Ev();
extern void _ZN10S3520C5_nt2v6Ev();
extern void _ZN7S3520C9D1Ev();
extern void _ZN7S3520C9D0Ev();
extern void _ZN7S3520C93v20Ev();
extern void _ZN11S3520C11_nt3v14Ev();
extern void _ZN11S3520C11_nt3v15Ev();
extern void _ZN11S3520C11_nt3v16Ev();
extern void _ZN11S3520C11_nt3v17Ev();
extern void _ZN11S3520C11_nt3v18Ev();
extern void _ZN8S3520C103v19Ev();
static  VTBL_ENTRY vtc_S3520C9[] = {
  0,
  ABISELECT(16,8),
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3520C9[0]),
  (VTBL_ENTRY)&_ZN10S3520C5_nt2v4Ev,
  (VTBL_ENTRY)&_ZN10S3520C5_nt2v5Ev,
  (VTBL_ENTRY)&_ZN10S3520C5_nt2v6Ev,
  (VTBL_ENTRY)&_ZN7S3520C9D1Ev,
  (VTBL_ENTRY)&_ZN7S3520C9D0Ev,
  (VTBL_ENTRY)&_ZN7S3520C93v20Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S3520C9[0]),
  (VTBL_ENTRY)&_ZN11S3520C11_nt3v14Ev,
  (VTBL_ENTRY)&_ZN11S3520C11_nt3v15Ev,
  (VTBL_ENTRY)&_ZN11S3520C11_nt3v16Ev,
  (VTBL_ENTRY)&_ZN11S3520C11_nt3v17Ev,
  (VTBL_ENTRY)&_ZN11S3520C11_nt3v18Ev,
  (VTBL_ENTRY)&_ZN8S3520C103v19Ev,
};
extern VTBL_ENTRY _ZTV7S3520C9[];
static  VTT_ENTRY vtt_S3520C9[] = {
  {&(_ZTV7S3520C9[7]),  7,27},
  {&(_ZTV7S3520C9[21]),  21,27},
  {&(_ZTV7S3520C9[7]),  7,27},
};
extern VTBL_ENTRY _ZTI7S3520C9[];
extern  VTBL_ENTRY _ZTV7S3520C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3520C9[];
Class_Descriptor cd_S3520C9 = {  "S3520C9", // class name
  bases_S3520C9, 3,
  &(vtc_S3520C9[0]), // expected_vtbl_contents
  &(vtt_S3520C9[0]), // expected_vtt_contents
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI7S3520C9),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S3520C9),27, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3520C9),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  S3520C12_nt  {
  virtual void  v34(); // _ZN11S3520C12_nt3v34Ev
  ~S3520C12_nt(); // tgen
  S3520C12_nt(); // tgen
};
//SIG(-1 S3520C12_nt) C1{ v1}


void  S3520C12_nt ::v34(){vfunc_called(this, "_ZN11S3520C12_nt3v34Ev");}
S3520C12_nt ::~S3520C12_nt(){ note_dtor("S3520C12_nt", this);} // tgen
S3520C12_nt ::S3520C12_nt(){ note_ctor("S3520C12_nt", this);} // tgen

//skip512 S3520C12_nt

#else // __cplusplus

extern void _ZN11S3520C12_ntC1Ev();
extern void _ZN11S3520C12_ntD1Ev();
Name_Map name_map_S3520C12_nt[] = {
  NSPAIR(_ZN11S3520C12_ntC1Ev),
  NSPAIR(_ZN11S3520C12_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI11S3520C12_nt[];
extern void _ZN11S3520C12_nt3v34Ev();
static  VTBL_ENTRY vtc_S3520C12_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI11S3520C12_nt[0]),
  (VTBL_ENTRY)&_ZN11S3520C12_nt3v34Ev,
};
extern VTBL_ENTRY _ZTI11S3520C12_nt[];
VTBL_ENTRY *P__ZTI11S3520C12_nt = _ZTI11S3520C12_nt; 
extern  VTBL_ENTRY _ZTV11S3520C12_nt[];
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3520C7  : S3520C8_nt , virtual S3520C9 {
  ::S3520C12_nt s3520c7f0;
  virtual void  v21(); // _ZN7S3520C73v21Ev
  virtual void  v22(); // _ZN7S3520C73v22Ev
  virtual void  v23(); // _ZN7S3520C73v23Ev
  virtual void  v24(); // _ZN7S3520C73v24Ev
  virtual void  v25(); // _ZN7S3520C73v25Ev
  virtual void  v26(); // _ZN7S3520C73v26Ev
  virtual void  v27(); // _ZN7S3520C73v27Ev
  ~S3520C7(); // tgen
  S3520C7(); // tgen
};
//SIG(-1 S3520C7) C1{ BC2{ v8 v9 v10 v11 v12 v13 Fi} VBC3{ VBC4{ BC5{ v14 v15 v16 v17 v18 Fi} v19} VBC6{ v20 v21 v22} vd v23 Fi} v1 v2 v3 v4 v5 v6 v7 FC7{ v24}}


void  S3520C7 ::v21(){vfunc_called(this, "_ZN7S3520C73v21Ev");}
void  S3520C7 ::v22(){vfunc_called(this, "_ZN7S3520C73v22Ev");}
void  S3520C7 ::v23(){vfunc_called(this, "_ZN7S3520C73v23Ev");}
void  S3520C7 ::v24(){vfunc_called(this, "_ZN7S3520C73v24Ev");}
void  S3520C7 ::v25(){vfunc_called(this, "_ZN7S3520C73v25Ev");}
void  S3520C7 ::v26(){vfunc_called(this, "_ZN7S3520C73v26Ev");}
void  S3520C7 ::v27(){vfunc_called(this, "_ZN7S3520C73v27Ev");}
S3520C7 ::~S3520C7(){ note_dtor("S3520C7", this);} // tgen
S3520C7 ::S3520C7(){ note_ctor("S3520C7", this);} // tgen

static void Test_S3520C7()
{
  extern Class_Descriptor cd_S3520C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[8];
    init_test(&cd_S3520C7, buf);
    S3520C7 *dp, &lv = *(dp=new (buf) S3520C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,28), "sizeof(S3520C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3520C7)");
    check_base_class_offset(lv, (S3520C8_nt*), 0, "S3520C7");
    check_base_class_offset(lv, (S3520C11_nt*)(S3520C10*), ABISELECT(40,20), "S3520C7");
    check_base_class_offset(lv, (S3520C10*)(S3520C9*), ABISELECT(40,20), "S3520C7");
    check_base_class_offset(lv, (S3520C5_nt*)(S3520C9*), ABISELECT(24,12), "S3520C7");
    check_base_class_offset(lv, (S3520C9*), ABISELECT(24,12), "S3520C7");
    check_field_offset(lv, s3520c7f0, ABISELECT(16,8), "S3520C7.s3520c7f0");
    test_class_info(&lv, &cd_S3520C7);
    dp->~S3520C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3520C7(Test_S3520C7, "S3520C7", ABISELECT(56,28));

#else // __cplusplus

extern void _ZN7S3520C7C1Ev();
extern void _ZN7S3520C7D1Ev();
Name_Map name_map_S3520C7[] = {
  NSPAIR(_ZN7S3520C7C1Ev),
  NSPAIR(_ZN7S3520C7D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3520C8_nt;
extern VTBL_ENTRY _ZTI10S3520C8_nt[];
extern  VTBL_ENTRY _ZTV10S3520C8_nt[];
extern Class_Descriptor cd_S3520C11_nt;
extern VTBL_ENTRY _ZTI11S3520C11_nt[];
extern  VTBL_ENTRY _ZTV11S3520C11_nt[];
extern Class_Descriptor cd_S3520C10;
extern VTBL_ENTRY _ZTI8S3520C10[];
extern  VTBL_ENTRY _ZTV8S3520C10[];
extern Class_Descriptor cd_S3520C5_nt;
extern VTBL_ENTRY _ZTI10S3520C5_nt[];
extern  VTBL_ENTRY _ZTV10S3520C5_nt[];
extern Class_Descriptor cd_S3520C9;
extern VTBL_ENTRY _ZTI7S3520C9[];
extern  VTBL_ENTRY _ZTV7S3520C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3520C9[];
static Base_Class bases_S3520C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3520C8_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_S3520C11_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
    1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S3520C10,    ABISELECT(40,20), //bcp->offset
    35, //bcp->virtual_function_table_offset
    8, //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_S3520C5_nt,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //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
    4, //immediately_derived
  0, 1},
  {&cd_S3520C9,    ABISELECT(24,12), //bcp->offset
    20, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S3520C7[];
extern void _ZN10S3520C8_nt2v8Ev();
extern void _ZN10S3520C8_nt2v9Ev();
extern void _ZN10S3520C8_nt3v10Ev();
extern void _ZN10S3520C8_nt3v11Ev();
extern void _ZN10S3520C8_nt3v12Ev();
extern void _ZN10S3520C8_nt3v13Ev();
extern void _ZN7S3520C73v21Ev();
extern void _ZN7S3520C73v22Ev();
extern void _ZN7S3520C73v23Ev();
extern void _ZN7S3520C73v24Ev();
extern void _ZN7S3520C73v25Ev();
extern void _ZN7S3520C73v26Ev();
extern void _ZN7S3520C73v27Ev();
extern void _ZN7S3520C7D1Ev();
extern void _ZN7S3520C7D0Ev();
extern void _ZN10S3520C5_nt2v4Ev();
extern void _ZN10S3520C5_nt2v5Ev();
extern void _ZN10S3520C5_nt2v6Ev();
extern void ABISELECT(_ZTv0_n64_N7S3520C7D1Ev,_ZTv0_n32_N7S3520C7D1Ev)();
extern void ABISELECT(_ZThn24_N7S3520C7D1Ev,_ZThn12_N7S3520C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N7S3520C7D0Ev,_ZTv0_n32_N7S3520C7D0Ev)();
extern void ABISELECT(_ZThn24_N7S3520C7D0Ev,_ZThn12_N7S3520C7D0Ev)() __attribute__((weak));
extern void _ZN7S3520C93v20Ev();
extern void _ZN11S3520C11_nt3v14Ev();
extern void _ZN11S3520C11_nt3v15Ev();
extern void _ZN11S3520C11_nt3v16Ev();
extern void _ZN11S3520C11_nt3v17Ev();
extern void _ZN11S3520C11_nt3v18Ev();
extern void _ZN8S3520C103v19Ev();
static  VTBL_ENTRY vtc_S3520C7[] = {
  ABISELECT(24,12),
  ABISELECT(40,20),
  ABISELECT(24,12),
  0,
  (VTBL_ENTRY)&(_ZTI7S3520C7[0]),
  (VTBL_ENTRY)&_ZN10S3520C8_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S3520C8_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S3520C8_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S3520C8_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S3520C8_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S3520C8_nt3v13Ev,
  (VTBL_ENTRY)&_ZN7S3520C73v21Ev,
  (VTBL_ENTRY)&_ZN7S3520C73v22Ev,
  (VTBL_ENTRY)&_ZN7S3520C73v23Ev,
  (VTBL_ENTRY)&_ZN7S3520C73v24Ev,
  (VTBL_ENTRY)&_ZN7S3520C73v25Ev,
  (VTBL_ENTRY)&_ZN7S3520C73v26Ev,
  (VTBL_ENTRY)&_ZN7S3520C73v27Ev,
  (VTBL_ENTRY)&_ZN7S3520C7D1Ev,
  (VTBL_ENTRY)&_ZN7S3520C7D0Ev,
  0,
  ABISELECT(-24,-12),
  0,
  ABISELECT(16,8),
  0,
  0,
  0,
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI7S3520C7[0]),
  (VTBL_ENTRY)&_ZN10S3520C5_nt2v4Ev,
  (VTBL_ENTRY)&_ZN10S3520C5_nt2v5Ev,
  (VTBL_ENTRY)&_ZN10S3520C5_nt2v6Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S3520C7D1Ev,_ZTv0_n32_N7S3520C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S3520C7D0Ev,_ZTv0_n32_N7S3520C7D0Ev),
  (VTBL_ENTRY)&_ZN7S3520C93v20Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI7S3520C7[0]),
  (VTBL_ENTRY)&_ZN11S3520C11_nt3v14Ev,
  (VTBL_ENTRY)&_ZN11S3520C11_nt3v15Ev,
  (VTBL_ENTRY)&_ZN11S3520C11_nt3v16Ev,
  (VTBL_ENTRY)&_ZN11S3520C11_nt3v17Ev,
  (VTBL_ENTRY)&_ZN11S3520C11_nt3v18Ev,
  (VTBL_ENTRY)&_ZN8S3520C103v19Ev,
};
extern VTBL_ENTRY _ZTV7S3520C7[];
extern void _ZN10S3520C5_nt2v4Ev();
extern void _ZN10S3520C5_nt2v5Ev();
extern void _ZN10S3520C5_nt2v6Ev();
extern void _ZN7S3520C9D1Ev();
extern void _ZN7S3520C9D0Ev();
extern void _ZN7S3520C93v20Ev();
static  VTBL_ENTRY _tg__ZTV7S3520C9__7S3520C7[] = {
  0,
  ABISELECT(16,8),
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3520C9[0]),
  (VTBL_ENTRY)&_ZN10S3520C5_nt2v4Ev,
  (VTBL_ENTRY)&_ZN10S3520C5_nt2v5Ev,
  (VTBL_ENTRY)&_ZN10S3520C5_nt2v6Ev,
  (VTBL_ENTRY)&_ZN7S3520C9D1Ev,
  (VTBL_ENTRY)&_ZN7S3520C9D0Ev,
  (VTBL_ENTRY)&_ZN7S3520C93v20Ev,
};
extern void _ZN11S3520C11_nt3v14Ev();
extern void _ZN11S3520C11_nt3v15Ev();
extern void _ZN11S3520C11_nt3v16Ev();
extern void _ZN11S3520C11_nt3v17Ev();
extern void _ZN11S3520C11_nt3v18Ev();
extern void _ZN8S3520C103v19Ev();
static  VTBL_ENTRY _tg__ZTV8S3520C10__7S3520C9__7S3520C7[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S3520C9[0]),
  (VTBL_ENTRY)&_ZN11S3520C11_nt3v14Ev,
  (VTBL_ENTRY)&_ZN11S3520C11_nt3v15Ev,
  (VTBL_ENTRY)&_ZN11S3520C11_nt3v16Ev,
  (VTBL_ENTRY)&_ZN11S3520C11_nt3v17Ev,
  (VTBL_ENTRY)&_ZN11S3520C11_nt3v18Ev,
  (VTBL_ENTRY)&_ZN8S3520C103v19Ev,
};
static  VTT_ENTRY vtt_S3520C7[] = {
  {&(_ZTV7S3520C7[5]),  5,49},
  {&(_ZTV7S3520C7[29]),  29,49},
  {&(_ZTV7S3520C7[43]),  43,49},
  {&(_ZTV7S3520C7[29]),  29,49},
  {&(_tg__ZTV7S3520C9__7S3520C7[7]),  7,13},
  {&(_tg__ZTV8S3520C10__7S3520C9__7S3520C7[8]),  8,14},
  {&(_tg__ZTV7S3520C9__7S3520C7[7]),  7,13},
};
extern VTBL_ENTRY _ZTI7S3520C7[];
extern  VTBL_ENTRY _ZTV7S3520C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3520C7[];
static VTBL_ENTRY alt_thunk_names1[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S3520C7D0Ev,_ZTv0_n32_N7S3520C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S3520C7D0Ev,_ZThn12_N7S3520C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S3520C7D1Ev,_ZTv0_n32_N7S3520C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S3520C7D1Ev,_ZThn12_N7S3520C7D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S3520C7 = {  "S3520C7", // class name
  bases_S3520C7, 5,
  &(vtc_S3520C7[0]), // expected_vtbl_contents
  &(vtt_S3520C7[0]), // expected_vtt_contents
  ABISELECT(56,28), // object size
  NSPAIRA(_ZTI7S3520C7),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S3520C7),49, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3520C7),7, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names1,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3520C6  : S3520C7 {
  virtual  ~S3520C6(); // _ZN7S3520C6D2Ev
  virtual void  v28(); // _ZN7S3520C63v28Ev
  S3520C6(); // tgen
};
//SIG(-1 S3520C6) C1{ BC2{ BC3{ v2 v3 v4 v5 v6 v7 Fi} VBC4{ VBC5{ BC6{ v8 v9 v10 v11 v12 Fi} v13} VBC7{ v14 v15 v16} vd v17 Fi} v18 v19 v20 v21 v22 v23 v24 FC8{ v25}} vd v1}


 S3520C6 ::~S3520C6(){ note_dtor("S3520C6", this);}
void  S3520C6 ::v28(){vfunc_called(this, "_ZN7S3520C63v28Ev");}
S3520C6 ::S3520C6(){ note_ctor("S3520C6", this);} // tgen

static void Test_S3520C6()
{
  extern Class_Descriptor cd_S3520C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[8];
    init_test(&cd_S3520C6, buf);
    S3520C6 *dp, &lv = *(dp=new (buf) S3520C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,28), "sizeof(S3520C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3520C6)");
    check_base_class_offset(lv, (S3520C8_nt*)(S3520C7*), 0, "S3520C6");
    check_base_class_offset(lv, (S3520C11_nt*)(S3520C10*), ABISELECT(40,20), "S3520C6");
    check_base_class_offset(lv, (S3520C10*)(S3520C9*), ABISELECT(40,20), "S3520C6");
    check_base_class_offset(lv, (S3520C5_nt*)(S3520C9*), ABISELECT(24,12), "S3520C6");
    check_base_class_offset(lv, (S3520C9*)(S3520C7*), ABISELECT(24,12), "S3520C6");
    check_base_class_offset(lv, (S3520C7*), 0, "S3520C6");
    test_class_info(&lv, &cd_S3520C6);
    dp->~S3520C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3520C6(Test_S3520C6, "S3520C6", ABISELECT(56,28));

#else // __cplusplus

extern void _ZN7S3520C6C1Ev();
extern void _ZN7S3520C6D2Ev();
Name_Map name_map_S3520C6[] = {
  NSPAIR(_ZN7S3520C6C1Ev),
  NSPAIR(_ZN7S3520C6D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S3520C8_nt;
extern VTBL_ENTRY _ZTI10S3520C8_nt[];
extern  VTBL_ENTRY _ZTV10S3520C8_nt[];
extern Class_Descriptor cd_S3520C11_nt;
extern VTBL_ENTRY _ZTI11S3520C11_nt[];
extern  VTBL_ENTRY _ZTV11S3520C11_nt[];
extern Class_Descriptor cd_S3520C10;
extern VTBL_ENTRY _ZTI8S3520C10[];
extern  VTBL_ENTRY _ZTV8S3520C10[];
extern Class_Descriptor cd_S3520C5_nt;
extern VTBL_ENTRY _ZTI10S3520C5_nt[];
extern  VTBL_ENTRY _ZTV10S3520C5_nt[];
extern Class_Descriptor cd_S3520C9;
extern VTBL_ENTRY _ZTI7S3520C9[];
extern  VTBL_ENTRY _ZTV7S3520C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3520C9[];
extern Class_Descriptor cd_S3520C7;
extern VTBL_ENTRY _ZTI7S3520C7[];
extern  VTBL_ENTRY _ZTV7S3520C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3520C7[];
static Base_Class bases_S3520C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3520C8_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
    5, //immediately_derived
  0, 0},
  {&cd_S3520C11_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
    1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S3520C10,    ABISELECT(40,20), //bcp->offset
    36, //bcp->virtual_function_table_offset
    8, //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_S3520C5_nt,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S3520C9,    ABISELECT(24,12), //bcp->offset
    21, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S3520C7,    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},
  {0}};
extern VTBL_ENTRY _ZTI7S3520C6[];
extern void _ZN10S3520C8_nt2v8Ev();
extern void _ZN10S3520C8_nt2v9Ev();
extern void _ZN10S3520C8_nt3v10Ev();
extern void _ZN10S3520C8_nt3v11Ev();
extern void _ZN10S3520C8_nt3v12Ev();
extern void _ZN10S3520C8_nt3v13Ev();
extern void _ZN7S3520C73v21Ev();
extern void _ZN7S3520C73v22Ev();
extern void _ZN7S3520C73v23Ev();
extern void _ZN7S3520C73v24Ev();
extern void _ZN7S3520C73v25Ev();
extern void _ZN7S3520C73v26Ev();
extern void _ZN7S3520C73v27Ev();
extern void _ZN7S3520C6D1Ev();
extern void _ZN7S3520C6D0Ev();
extern void _ZN7S3520C63v28Ev();
extern void _ZN10S3520C5_nt2v4Ev();
extern void _ZN10S3520C5_nt2v5Ev();
extern void _ZN10S3520C5_nt2v6Ev();
extern void ABISELECT(_ZTv0_n64_N7S3520C6D1Ev,_ZTv0_n32_N7S3520C6D1Ev)();
extern void ABISELECT(_ZThn24_N7S3520C6D1Ev,_ZThn12_N7S3520C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N7S3520C6D0Ev,_ZTv0_n32_N7S3520C6D0Ev)();
extern void ABISELECT(_ZThn24_N7S3520C6D0Ev,_ZThn12_N7S3520C6D0Ev)() __attribute__((weak));
extern void _ZN7S3520C93v20Ev();
extern void _ZN11S3520C11_nt3v14Ev();
extern void _ZN11S3520C11_nt3v15Ev();
extern void _ZN11S3520C11_nt3v16Ev();
extern void _ZN11S3520C11_nt3v17Ev();
extern void _ZN11S3520C11_nt3v18Ev();
extern void _ZN8S3520C103v19Ev();
static  VTBL_ENTRY vtc_S3520C6[] = {
  ABISELECT(24,12),
  ABISELECT(40,20),
  ABISELECT(24,12),
  0,
  (VTBL_ENTRY)&(_ZTI7S3520C6[0]),
  (VTBL_ENTRY)&_ZN10S3520C8_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S3520C8_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S3520C8_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S3520C8_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S3520C8_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S3520C8_nt3v13Ev,
  (VTBL_ENTRY)&_ZN7S3520C73v21Ev,
  (VTBL_ENTRY)&_ZN7S3520C73v22Ev,
  (VTBL_ENTRY)&_ZN7S3520C73v23Ev,
  (VTBL_ENTRY)&_ZN7S3520C73v24Ev,
  (VTBL_ENTRY)&_ZN7S3520C73v25Ev,
  (VTBL_ENTRY)&_ZN7S3520C73v26Ev,
  (VTBL_ENTRY)&_ZN7S3520C73v27Ev,
  (VTBL_ENTRY)&_ZN7S3520C6D1Ev,
  (VTBL_ENTRY)&_ZN7S3520C6D0Ev,
  (VTBL_ENTRY)&_ZN7S3520C63v28Ev,
  0,
  ABISELECT(-24,-12),
  0,
  ABISELECT(16,8),
  0,
  0,
  0,
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI7S3520C6[0]),
  (VTBL_ENTRY)&_ZN10S3520C5_nt2v4Ev,
  (VTBL_ENTRY)&_ZN10S3520C5_nt2v5Ev,
  (VTBL_ENTRY)&_ZN10S3520C5_nt2v6Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S3520C6D1Ev,_ZTv0_n32_N7S3520C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S3520C6D0Ev,_ZTv0_n32_N7S3520C6D0Ev),
  (VTBL_ENTRY)&_ZN7S3520C93v20Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI7S3520C6[0]),
  (VTBL_ENTRY)&_ZN11S3520C11_nt3v14Ev,
  (VTBL_ENTRY)&_ZN11S3520C11_nt3v15Ev,
  (VTBL_ENTRY)&_ZN11S3520C11_nt3v16Ev,
  (VTBL_ENTRY)&_ZN11S3520C11_nt3v17Ev,
  (VTBL_ENTRY)&_ZN11S3520C11_nt3v18Ev,
  (VTBL_ENTRY)&_ZN8S3520C103v19Ev,
};
extern VTBL_ENTRY _ZTV7S3520C6[];
extern void _ZN10S3520C8_nt2v8Ev();
extern void _ZN10S3520C8_nt2v9Ev();
extern void _ZN10S3520C8_nt3v10Ev();
extern void _ZN10S3520C8_nt3v11Ev();
extern void _ZN10S3520C8_nt3v12Ev();
extern void _ZN10S3520C8_nt3v13Ev();
extern void _ZN7S3520C73v21Ev();
extern void _ZN7S3520C73v22Ev();
extern void _ZN7S3520C73v23Ev();
extern void _ZN7S3520C73v24Ev();
extern void _ZN7S3520C73v25Ev();
extern void _ZN7S3520C73v26Ev();
extern void _ZN7S3520C73v27Ev();
extern void _ZN7S3520C7D1Ev();
extern void _ZN7S3520C7D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3520C7__7S3520C6[] = {
  ABISELECT(24,12),
  ABISELECT(40,20),
  ABISELECT(24,12),
  0,
  (VTBL_ENTRY)&(_ZTI7S3520C7[0]),
  (VTBL_ENTRY)&_ZN10S3520C8_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S3520C8_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S3520C8_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S3520C8_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S3520C8_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S3520C8_nt3v13Ev,
  (VTBL_ENTRY)&_ZN7S3520C73v21Ev,
  (VTBL_ENTRY)&_ZN7S3520C73v22Ev,
  (VTBL_ENTRY)&_ZN7S3520C73v23Ev,
  (VTBL_ENTRY)&_ZN7S3520C73v24Ev,
  (VTBL_ENTRY)&_ZN7S3520C73v25Ev,
  (VTBL_ENTRY)&_ZN7S3520C73v26Ev,
  (VTBL_ENTRY)&_ZN7S3520C73v27Ev,
  (VTBL_ENTRY)&_ZN7S3520C7D1Ev,
  (VTBL_ENTRY)&_ZN7S3520C7D0Ev,
};
extern void _ZN10S3520C5_nt2v4Ev();
extern void _ZN10S3520C5_nt2v5Ev();
extern void _ZN10S3520C5_nt2v6Ev();
extern void ABISELECT(_ZTv0_n64_N7S3520C7D1Ev,_ZTv0_n32_N7S3520C7D1Ev)();
extern void ABISELECT(_ZThn24_N7S3520C7D1Ev,_ZThn12_N7S3520C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N7S3520C7D0Ev,_ZTv0_n32_N7S3520C7D0Ev)();
extern void ABISELECT(_ZThn24_N7S3520C7D0Ev,_ZThn12_N7S3520C7D0Ev)() __attribute__((weak));
extern void _ZN7S3520C93v20Ev();
static  VTBL_ENTRY _tg__ZTV7S3520C9__7S3520C7__7S3520C6[] = {
  0,
  ABISELECT(-24,-12),
  0,
  ABISELECT(16,8),
  0,
  0,
  0,
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI7S3520C7[0]),
  (VTBL_ENTRY)&_ZN10S3520C5_nt2v4Ev,
  (VTBL_ENTRY)&_ZN10S3520C5_nt2v5Ev,
  (VTBL_ENTRY)&_ZN10S3520C5_nt2v6Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S3520C7D1Ev,_ZTv0_n32_N7S3520C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S3520C7D0Ev,_ZTv0_n32_N7S3520C7D0Ev),
  (VTBL_ENTRY)&_ZN7S3520C93v20Ev,
};
extern void _ZN11S3520C11_nt3v14Ev();
extern void _ZN11S3520C11_nt3v15Ev();
extern void _ZN11S3520C11_nt3v16Ev();
extern void _ZN11S3520C11_nt3v17Ev();
extern void _ZN11S3520C11_nt3v18Ev();
extern void _ZN8S3520C103v19Ev();
static  VTBL_ENTRY _tg__ZTV8S3520C10__7S3520C7__7S3520C6[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI7S3520C7[0]),
  (VTBL_ENTRY)&_ZN11S3520C11_nt3v14Ev,
  (VTBL_ENTRY)&_ZN11S3520C11_nt3v15Ev,
  (VTBL_ENTRY)&_ZN11S3520C11_nt3v16Ev,
  (VTBL_ENTRY)&_ZN11S3520C11_nt3v17Ev,
  (VTBL_ENTRY)&_ZN11S3520C11_nt3v18Ev,
  (VTBL_ENTRY)&_ZN8S3520C103v19Ev,
};
extern void _ZN10S3520C5_nt2v4Ev();
extern void _ZN10S3520C5_nt2v5Ev();
extern void _ZN10S3520C5_nt2v6Ev();
extern void _ZN7S3520C9D1Ev();
extern void _ZN7S3520C9D0Ev();
extern void _ZN7S3520C93v20Ev();
static  VTBL_ENTRY _tg__ZTV7S3520C9__7S3520C6[] = {
  0,
  ABISELECT(16,8),
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3520C9[0]),
  (VTBL_ENTRY)&_ZN10S3520C5_nt2v4Ev,
  (VTBL_ENTRY)&_ZN10S3520C5_nt2v5Ev,
  (VTBL_ENTRY)&_ZN10S3520C5_nt2v6Ev,
  (VTBL_ENTRY)&_ZN7S3520C9D1Ev,
  (VTBL_ENTRY)&_ZN7S3520C9D0Ev,
  (VTBL_ENTRY)&_ZN7S3520C93v20Ev,
};
extern void _ZN11S3520C11_nt3v14Ev();
extern void _ZN11S3520C11_nt3v15Ev();
extern void _ZN11S3520C11_nt3v16Ev();
extern void _ZN11S3520C11_nt3v17Ev();
extern void _ZN11S3520C11_nt3v18Ev();
extern void _ZN8S3520C103v19Ev();
static  VTBL_ENTRY _tg__ZTV8S3520C10__7S3520C9__7S3520C6[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S3520C9[0]),
  (VTBL_ENTRY)&_ZN11S3520C11_nt3v14Ev,
  (VTBL_ENTRY)&_ZN11S3520C11_nt3v15Ev,
  (VTBL_ENTRY)&_ZN11S3520C11_nt3v16Ev,
  (VTBL_ENTRY)&_ZN11S3520C11_nt3v17Ev,
  (VTBL_ENTRY)&_ZN11S3520C11_nt3v18Ev,
  (VTBL_ENTRY)&_ZN8S3520C103v19Ev,
};
static  VTT_ENTRY vtt_S3520C6[] = {
  {&(_ZTV7S3520C6[5]),  5,50},
  {&(_tg__ZTV7S3520C7__7S3520C6[5]),  5,20},
  {&(_tg__ZTV7S3520C9__7S3520C7__7S3520C6[9]),  9,15},
  {&(_tg__ZTV8S3520C10__7S3520C7__7S3520C6[8]),  8,14},
  {&(_tg__ZTV7S3520C9__7S3520C7__7S3520C6[9]),  9,15},
  {&(_ZTV7S3520C6[30]),  30,50},
  {&(_ZTV7S3520C6[44]),  44,50},
  {&(_ZTV7S3520C6[30]),  30,50},
  {&(_tg__ZTV7S3520C9__7S3520C6[7]),  7,13},
  {&(_tg__ZTV8S3520C10__7S3520C9__7S3520C6[8]),  8,14},
  {&(_tg__ZTV7S3520C9__7S3520C6[7]),  7,13},
};
extern VTBL_ENTRY _ZTI7S3520C6[];
extern  VTBL_ENTRY _ZTV7S3520C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3520C6[];
static VTBL_ENTRY alt_thunk_names2[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S3520C7D0Ev,_ZTv0_n32_N7S3520C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S3520C7D0Ev,_ZThn12_N7S3520C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S3520C7D1Ev,_ZTv0_n32_N7S3520C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S3520C7D1Ev,_ZThn12_N7S3520C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S3520C6D0Ev,_ZTv0_n32_N7S3520C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S3520C6D0Ev,_ZThn12_N7S3520C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S3520C6D1Ev,_ZTv0_n32_N7S3520C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S3520C6D1Ev,_ZThn12_N7S3520C6D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S3520C6 = {  "S3520C6", // class name
  bases_S3520C6, 6,
  &(vtc_S3520C6[0]), // expected_vtbl_contents
  &(vtt_S3520C6[0]), // expected_vtt_contents
  ABISELECT(56,28), // object size
  NSPAIRA(_ZTI7S3520C6),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3520C6),50, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3520C6),11, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names2,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3520C2  : S3520C3 , virtual S3520C6 {
  int s3520c2f0;
  long double s3520c2f1;
  virtual  ~S3520C2(); // _ZN7S3520C2D2Ev
  virtual void  v29(); // _ZN7S3520C23v29Ev
  virtual void  v30(); // _ZN7S3520C23v30Ev
  virtual void  v31(); // _ZN7S3520C23v31Ev
  virtual void  v32(); // _ZN7S3520C23v32Ev
  S3520C2(); // tgen
};
//SIG(-1 S3520C2) C1{ BC2{ VBC3{ v5 FD} BC4{ v6 v7 v8} vd v9} VBC5{ BC6{ BC7{ v10 v11 v12 v13 v14 v15 Fi} VBC8{ VBC9{ BC10{ v16 v17 v18 v19 v20 Fi} v21} VBC4 vd v22 Fi} v23 v24 v25 v26 v27 v28 v29 FC11{ v31}} vd v30} vd v1 v2 v3 v4 Fi FD}


 S3520C2 ::~S3520C2(){ note_dtor("S3520C2", this);}
void  S3520C2 ::v29(){vfunc_called(this, "_ZN7S3520C23v29Ev");}
void  S3520C2 ::v30(){vfunc_called(this, "_ZN7S3520C23v30Ev");}
void  S3520C2 ::v31(){vfunc_called(this, "_ZN7S3520C23v31Ev");}
void  S3520C2 ::v32(){vfunc_called(this, "_ZN7S3520C23v32Ev");}
S3520C2 ::S3520C2(){ note_ctor("S3520C2", this);} // tgen

static void Test_S3520C2()
{
  extern Class_Descriptor cd_S3520C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(9,17)];
    init_test(&cd_S3520C2, buf);
    S3520C2 *dp, &lv = *(dp=new (buf) S3520C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(128,64), "sizeof(S3520C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3520C2)");
    check_base_class_offset(lv, (S3520C4_nt*)(S3520C3*), ABISELECT(32,20), "S3520C2");
    check_base_class_offset(lv, (S3520C5_nt*)(S3520C3*), 0, "S3520C2");
    check_base_class_offset(lv, (S3520C3*), 0, "S3520C2");
    check_base_class_offset(lv, (S3520C8_nt*)(S3520C7*)(S3520C6*), ABISELECT(64,36), "S3520C2");
    check_base_class_offset(lv, (S3520C11_nt*)(S3520C10*), ABISELECT(104,56), "S3520C2");
    check_base_class_offset(lv, (S3520C10*)(S3520C9*), ABISELECT(104,56), "S3520C2");
    check_base_class_offset(lv, (S3520C5_nt*)(S3520C9*), ABISELECT(88,48), "S3520C2");
    check_base_class_offset(lv, (S3520C9*)(S3520C7*)(S3520C6*), ABISELECT(88,48), "S3520C2");
    check_base_class_offset(lv, (S3520C7*)(S3520C6*), ABISELECT(64,36), "S3520C2");
    check_base_class_offset(lv, (S3520C6*), ABISELECT(64,36), "S3520C2");
    check_field_offset(lv, s3520c2f0, ABISELECT(8,4), "S3520C2.s3520c2f0");
    check_field_offset(lv, s3520c2f1, ABISELECT(16,8), "S3520C2.s3520c2f1");
    test_class_info(&lv, &cd_S3520C2);
    dp->~S3520C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3520C2(Test_S3520C2, "S3520C2", ABISELECT(128,64));

#else // __cplusplus

extern void _ZN7S3520C2C1Ev();
extern void _ZN7S3520C2D2Ev();
Name_Map name_map_S3520C2[] = {
  NSPAIR(_ZN7S3520C2C1Ev),
  NSPAIR(_ZN7S3520C2D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S3520C4_nt;
extern VTBL_ENTRY _ZTI10S3520C4_nt[];
extern  VTBL_ENTRY _ZTV10S3520C4_nt[];
extern Class_Descriptor cd_S3520C5_nt;
extern VTBL_ENTRY _ZTI10S3520C5_nt[];
extern  VTBL_ENTRY _ZTV10S3520C5_nt[];
extern Class_Descriptor cd_S3520C3;
extern VTBL_ENTRY _ZTI7S3520C3[];
extern  VTBL_ENTRY _ZTV7S3520C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3520C3[];
extern Class_Descriptor cd_S3520C8_nt;
extern VTBL_ENTRY _ZTI10S3520C8_nt[];
extern  VTBL_ENTRY _ZTV10S3520C8_nt[];
extern Class_Descriptor cd_S3520C11_nt;
extern VTBL_ENTRY _ZTI11S3520C11_nt[];
extern  VTBL_ENTRY _ZTV11S3520C11_nt[];
extern Class_Descriptor cd_S3520C10;
extern VTBL_ENTRY _ZTI8S3520C10[];
extern  VTBL_ENTRY _ZTV8S3520C10[];
extern Class_Descriptor cd_S3520C5_nt;
extern VTBL_ENTRY _ZTI10S3520C5_nt[];
extern  VTBL_ENTRY _ZTV10S3520C5_nt[];
extern Class_Descriptor cd_S3520C9;
extern VTBL_ENTRY _ZTI7S3520C9[];
extern  VTBL_ENTRY _ZTV7S3520C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3520C9[];
extern Class_Descriptor cd_S3520C7;
extern VTBL_ENTRY _ZTI7S3520C7[];
extern  VTBL_ENTRY _ZTV7S3520C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3520C7[];
extern Class_Descriptor cd_S3520C6;
extern VTBL_ENTRY _ZTI7S3520C6[];
extern  VTBL_ENTRY _ZTV7S3520C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3520C6[];
static Base_Class bases_S3520C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3520C4_nt,    ABISELECT(32,20), //bcp->offset
    17, //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
    2, //immediately_derived
  0, 1},
  {&cd_S3520C5_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
    9, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S3520C3,    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
    10, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3520C8_nt,    ABISELECT(64,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
    6, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S3520C11_nt,    ABISELECT(104,56), //bcp->offset
    -1, //bcp->virtual_function_table_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_S3520C10,    ABISELECT(104,56), //bcp->offset
    72, //bcp->virtual_function_table_offset
    8, //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
    7, //immediately_derived
  0, 1},
  {&cd_S3520C5_nt,    ABISELECT(88,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S3520C9,    ABISELECT(88,48), //bcp->offset
    57, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S3520C7,    ABISELECT(64,36), //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
    7, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S3520C6,    ABISELECT(64,36), //bcp->offset
    21, //bcp->virtual_function_table_offset
    20, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S3520C2[];
extern void _ZN10S3520C5_nt2v4Ev();
extern void _ZN10S3520C5_nt2v5Ev();
extern void _ZN10S3520C5_nt2v6Ev();
extern void _ZN7S3520C2D1Ev();
extern void _ZN7S3520C2D0Ev();
extern void _ZN7S3520C32v7Ev();
extern void _ZN7S3520C23v29Ev();
extern void _ZN7S3520C23v30Ev();
extern void _ZN7S3520C23v31Ev();
extern void _ZN7S3520C23v32Ev();
extern void _ZN10S3520C4_nt2v3Ev();
extern void _ZN10S3520C8_nt2v8Ev();
extern void _ZN10S3520C8_nt2v9Ev();
extern void _ZN10S3520C8_nt3v10Ev();
extern void _ZN10S3520C8_nt3v11Ev();
extern void _ZN10S3520C8_nt3v12Ev();
extern void _ZN10S3520C8_nt3v13Ev();
extern void _ZN7S3520C73v21Ev();
extern void _ZN7S3520C73v22Ev();
extern void _ZN7S3520C73v23Ev();
extern void _ZN7S3520C73v24Ev();
extern void _ZN7S3520C73v25Ev();
extern void _ZN7S3520C73v26Ev();
extern void _ZN7S3520C73v27Ev();
extern void ABISELECT(_ZTv0_n152_N7S3520C2D1Ev,_ZTv0_n76_N7S3520C2D1Ev)();
extern void ABISELECT(_ZThn64_N7S3520C2D1Ev,_ZThn36_N7S3520C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n152_N7S3520C2D0Ev,_ZTv0_n76_N7S3520C2D0Ev)();
extern void ABISELECT(_ZThn64_N7S3520C2D0Ev,_ZThn36_N7S3520C2D0Ev)() __attribute__((weak));
extern void _ZN7S3520C63v28Ev();
extern void _ZN10S3520C5_nt2v4Ev();
extern void _ZN10S3520C5_nt2v5Ev();
extern void _ZN10S3520C5_nt2v6Ev();
extern void ABISELECT(_ZTv0_n64_N7S3520C2D1Ev,_ZTv0_n32_N7S3520C2D1Ev)();
extern void ABISELECT(_ZThn88_N7S3520C2D1Ev,_ZThn48_N7S3520C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N7S3520C2D0Ev,_ZTv0_n32_N7S3520C2D0Ev)();
extern void ABISELECT(_ZThn88_N7S3520C2D0Ev,_ZThn48_N7S3520C2D0Ev)() __attribute__((weak));
extern void _ZN7S3520C93v20Ev();
extern void _ZN11S3520C11_nt3v14Ev();
extern void _ZN11S3520C11_nt3v15Ev();
extern void _ZN11S3520C11_nt3v16Ev();
extern void _ZN11S3520C11_nt3v17Ev();
extern void _ZN11S3520C11_nt3v18Ev();
extern void _ZN8S3520C103v19Ev();
static  VTBL_ENTRY vtc_S3520C2[] = {
  ABISELECT(88,48),
  ABISELECT(104,56),
  ABISELECT(88,48),
  ABISELECT(64,36),
  ABISELECT(32,20),
  0,
  (VTBL_ENTRY)&(_ZTI7S3520C2[0]),
  (VTBL_ENTRY)&_ZN10S3520C5_nt2v4Ev,
  (VTBL_ENTRY)&_ZN10S3520C5_nt2v5Ev,
  (VTBL_ENTRY)&_ZN10S3520C5_nt2v6Ev,
  (VTBL_ENTRY)&_ZN7S3520C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3520C2D0Ev,
  (VTBL_ENTRY)&_ZN7S3520C32v7Ev,
  (VTBL_ENTRY)&_ZN7S3520C23v29Ev,
  (VTBL_ENTRY)&_ZN7S3520C23v30Ev,
  (VTBL_ENTRY)&_ZN7S3520C23v31Ev,
  (VTBL_ENTRY)&_ZN7S3520C23v32Ev,
  0,
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI7S3520C2[0]),
  (VTBL_ENTRY)&_ZN10S3520C4_nt2v3Ev,
  0,
  ABISELECT(-64,-36),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(24,12),
  ABISELECT(40,20),
  ABISELECT(24,12),
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI7S3520C2[0]),
  (VTBL_ENTRY)&_ZN10S3520C8_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S3520C8_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S3520C8_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S3520C8_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S3520C8_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S3520C8_nt3v13Ev,
  (VTBL_ENTRY)&_ZN7S3520C73v21Ev,
  (VTBL_ENTRY)&_ZN7S3520C73v22Ev,
  (VTBL_ENTRY)&_ZN7S3520C73v23Ev,
  (VTBL_ENTRY)&_ZN7S3520C73v24Ev,
  (VTBL_ENTRY)&_ZN7S3520C73v25Ev,
  (VTBL_ENTRY)&_ZN7S3520C73v26Ev,
  (VTBL_ENTRY)&_ZN7S3520C73v27Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n152_N7S3520C2D1Ev,_ZTv0_n76_N7S3520C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n152_N7S3520C2D0Ev,_ZTv0_n76_N7S3520C2D0Ev),
  (VTBL_ENTRY)&_ZN7S3520C63v28Ev,
  0,
  ABISELECT(-88,-48),
  0,
  ABISELECT(16,8),
  0,
  0,
  0,
  ABISELECT(-88,-48),
  (VTBL_ENTRY)&(_ZTI7S3520C2[0]),
  (VTBL_ENTRY)&_ZN10S3520C5_nt2v4Ev,
  (VTBL_ENTRY)&_ZN10S3520C5_nt2v5Ev,
  (VTBL_ENTRY)&_ZN10S3520C5_nt2v6Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S3520C2D1Ev,_ZTv0_n32_N7S3520C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S3520C2D0Ev,_ZTv0_n32_N7S3520C2D0Ev),
  (VTBL_ENTRY)&_ZN7S3520C93v20Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-104,-56),
  (VTBL_ENTRY)&(_ZTI7S3520C2[0]),
  (VTBL_ENTRY)&_ZN11S3520C11_nt3v14Ev,
  (VTBL_ENTRY)&_ZN11S3520C11_nt3v15Ev,
  (VTBL_ENTRY)&_ZN11S3520C11_nt3v16Ev,
  (VTBL_ENTRY)&_ZN11S3520C11_nt3v17Ev,
  (VTBL_ENTRY)&_ZN11S3520C11_nt3v18Ev,
  (VTBL_ENTRY)&_ZN8S3520C103v19Ev,
};
extern VTBL_ENTRY _ZTV7S3520C2[];
extern void _ZN10S3520C5_nt2v4Ev();
extern void _ZN10S3520C5_nt2v5Ev();
extern void _ZN10S3520C5_nt2v6Ev();
extern void _ZN7S3520C3D1Ev();
extern void _ZN7S3520C3D0Ev();
extern void _ZN7S3520C32v7Ev();
static  VTBL_ENTRY _tg__ZTV7S3520C3__7S3520C2[] = {
  ABISELECT(32,20),
  0,
  (VTBL_ENTRY)&(_ZTI7S3520C3[0]),
  (VTBL_ENTRY)&_ZN10S3520C5_nt2v4Ev,
  (VTBL_ENTRY)&_ZN10S3520C5_nt2v5Ev,
  (VTBL_ENTRY)&_ZN10S3520C5_nt2v6Ev,
  (VTBL_ENTRY)&_ZN7S3520C3D1Ev,
  (VTBL_ENTRY)&_ZN7S3520C3D0Ev,
  (VTBL_ENTRY)&_ZN7S3520C32v7Ev,
};
extern void _ZN10S3520C4_nt2v3Ev();
static  VTBL_ENTRY _tg__ZTV10S3520C4_nt__7S3520C3__7S3520C2[] = {
  0,
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI7S3520C3[0]),
  (VTBL_ENTRY)&_ZN10S3520C4_nt2v3Ev,
};
extern void _ZN10S3520C8_nt2v8Ev();
extern void _ZN10S3520C8_nt2v9Ev();
extern void _ZN10S3520C8_nt3v10Ev();
extern void _ZN10S3520C8_nt3v11Ev();
extern void _ZN10S3520C8_nt3v12Ev();
extern void _ZN10S3520C8_nt3v13Ev();
extern void _ZN7S3520C73v21Ev();
extern void _ZN7S3520C73v22Ev();
extern void _ZN7S3520C73v23Ev();
extern void _ZN7S3520C73v24Ev();
extern void _ZN7S3520C73v25Ev();
extern void _ZN7S3520C73v26Ev();
extern void _ZN7S3520C73v27Ev();
extern void _ZN7S3520C6D1Ev();
extern void _ZN7S3520C6D0Ev();
extern void _ZN7S3520C63v28Ev();
static  VTBL_ENTRY _tg__ZTV7S3520C6__7S3520C2[] = {
  ABISELECT(24,12),
  ABISELECT(40,20),
  ABISELECT(24,12),
  0,
  (VTBL_ENTRY)&(_ZTI7S3520C6[0]),
  (VTBL_ENTRY)&_ZN10S3520C8_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S3520C8_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S3520C8_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S3520C8_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S3520C8_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S3520C8_nt3v13Ev,
  (VTBL_ENTRY)&_ZN7S3520C73v21Ev,
  (VTBL_ENTRY)&_ZN7S3520C73v22Ev,
  (VTBL_ENTRY)&_ZN7S3520C73v23Ev,
  (VTBL_ENTRY)&_ZN7S3520C73v24Ev,
  (VTBL_ENTRY)&_ZN7S3520C73v25Ev,
  (VTBL_ENTRY)&_ZN7S3520C73v26Ev,
  (VTBL_ENTRY)&_ZN7S3520C73v27Ev,
  (VTBL_ENTRY)&_ZN7S3520C6D1Ev,
  (VTBL_ENTRY)&_ZN7S3520C6D0Ev,
  (VTBL_ENTRY)&_ZN7S3520C63v28Ev,
};
extern void _ZN10S3520C8_nt2v8Ev();
extern void _ZN10S3520C8_nt2v9Ev();
extern void _ZN10S3520C8_nt3v10Ev();
extern void _ZN10S3520C8_nt3v11Ev();
extern void _ZN10S3520C8_nt3v12Ev();
extern void _ZN10S3520C8_nt3v13Ev();
extern void _ZN7S3520C73v21Ev();
extern void _ZN7S3520C73v22Ev();
extern void _ZN7S3520C73v23Ev();
extern void _ZN7S3520C73v24Ev();
extern void _ZN7S3520C73v25Ev();
extern void _ZN7S3520C73v26Ev();
extern void _ZN7S3520C73v27Ev();
extern void _ZN7S3520C7D1Ev();
extern void _ZN7S3520C7D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3520C77S3520C6__7S3520C2[] = {
  ABISELECT(24,12),
  ABISELECT(40,20),
  ABISELECT(24,12),
  0,
  (VTBL_ENTRY)&(_ZTI7S3520C7[0]),
  (VTBL_ENTRY)&_ZN10S3520C8_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S3520C8_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S3520C8_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S3520C8_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S3520C8_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S3520C8_nt3v13Ev,
  (VTBL_ENTRY)&_ZN7S3520C73v21Ev,
  (VTBL_ENTRY)&_ZN7S3520C73v22Ev,
  (VTBL_ENTRY)&_ZN7S3520C73v23Ev,
  (VTBL_ENTRY)&_ZN7S3520C73v24Ev,
  (VTBL_ENTRY)&_ZN7S3520C73v25Ev,
  (VTBL_ENTRY)&_ZN7S3520C73v26Ev,
  (VTBL_ENTRY)&_ZN7S3520C73v27Ev,
  (VTBL_ENTRY)&_ZN7S3520C7D1Ev,
  (VTBL_ENTRY)&_ZN7S3520C7D0Ev,
};
extern void _ZN10S3520C5_nt2v4Ev();
extern void _ZN10S3520C5_nt2v5Ev();
extern void _ZN10S3520C5_nt2v6Ev();
extern void ABISELECT(_ZTv0_n64_N7S3520C7D1Ev,_ZTv0_n32_N7S3520C7D1Ev)();
extern void ABISELECT(_ZThn24_N7S3520C7D1Ev,_ZThn12_N7S3520C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N7S3520C7D0Ev,_ZTv0_n32_N7S3520C7D0Ev)();
extern void ABISELECT(_ZThn24_N7S3520C7D0Ev,_ZThn12_N7S3520C7D0Ev)() __attribute__((weak));
extern void _ZN7S3520C93v20Ev();
static  VTBL_ENTRY _tg__ZTV7S3520C9__7S3520C77S3520C6__7S3520C2[] = {
  0,
  ABISELECT(-24,-12),
  0,
  ABISELECT(16,8),
  0,
  0,
  0,
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI7S3520C7[0]),
  (VTBL_ENTRY)&_ZN10S3520C5_nt2v4Ev,
  (VTBL_ENTRY)&_ZN10S3520C5_nt2v5Ev,
  (VTBL_ENTRY)&_ZN10S3520C5_nt2v6Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S3520C7D1Ev,_ZTv0_n32_N7S3520C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S3520C7D0Ev,_ZTv0_n32_N7S3520C7D0Ev),
  (VTBL_ENTRY)&_ZN7S3520C93v20Ev,
};
extern void _ZN11S3520C11_nt3v14Ev();
extern void _ZN11S3520C11_nt3v15Ev();
extern void _ZN11S3520C11_nt3v16Ev();
extern void _ZN11S3520C11_nt3v17Ev();
extern void _ZN11S3520C11_nt3v18Ev();
extern void _ZN8S3520C103v19Ev();
static  VTBL_ENTRY _tg__ZTV8S3520C10__7S3520C77S3520C6__7S3520C2[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI7S3520C7[0]),
  (VTBL_ENTRY)&_ZN11S3520C11_nt3v14Ev,
  (VTBL_ENTRY)&_ZN11S3520C11_nt3v15Ev,
  (VTBL_ENTRY)&_ZN11S3520C11_nt3v16Ev,
  (VTBL_ENTRY)&_ZN11S3520C11_nt3v17Ev,
  (VTBL_ENTRY)&_ZN11S3520C11_nt3v18Ev,
  (VTBL_ENTRY)&_ZN8S3520C103v19Ev,
};
extern void _ZN10S3520C5_nt2v4Ev();
extern void _ZN10S3520C5_nt2v5Ev();
extern void _ZN10S3520C5_nt2v6Ev();
extern void ABISELECT(_ZTv0_n64_N7S3520C6D1Ev,_ZTv0_n32_N7S3520C6D1Ev)();
extern void ABISELECT(_ZThn24_N7S3520C6D1Ev,_ZThn12_N7S3520C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N7S3520C6D0Ev,_ZTv0_n32_N7S3520C6D0Ev)();
extern void ABISELECT(_ZThn24_N7S3520C6D0Ev,_ZThn12_N7S3520C6D0Ev)() __attribute__((weak));
extern void _ZN7S3520C93v20Ev();
static  VTBL_ENTRY _tg__ZTV7S3520C9__7S3520C6__7S3520C2[] = {
  0,
  ABISELECT(-24,-12),
  0,
  ABISELECT(16,8),
  0,
  0,
  0,
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI7S3520C6[0]),
  (VTBL_ENTRY)&_ZN10S3520C5_nt2v4Ev,
  (VTBL_ENTRY)&_ZN10S3520C5_nt2v5Ev,
  (VTBL_ENTRY)&_ZN10S3520C5_nt2v6Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S3520C6D1Ev,_ZTv0_n32_N7S3520C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S3520C6D0Ev,_ZTv0_n32_N7S3520C6D0Ev),
  (VTBL_ENTRY)&_ZN7S3520C93v20Ev,
};
extern void _ZN11S3520C11_nt3v14Ev();
extern void _ZN11S3520C11_nt3v15Ev();
extern void _ZN11S3520C11_nt3v16Ev();
extern void _ZN11S3520C11_nt3v17Ev();
extern void _ZN11S3520C11_nt3v18Ev();
extern void _ZN8S3520C103v19Ev();
static  VTBL_ENTRY _tg__ZTV8S3520C10__7S3520C6__7S3520C2[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI7S3520C6[0]),
  (VTBL_ENTRY)&_ZN11S3520C11_nt3v14Ev,
  (VTBL_ENTRY)&_ZN11S3520C11_nt3v15Ev,
  (VTBL_ENTRY)&_ZN11S3520C11_nt3v16Ev,
  (VTBL_ENTRY)&_ZN11S3520C11_nt3v17Ev,
  (VTBL_ENTRY)&_ZN11S3520C11_nt3v18Ev,
  (VTBL_ENTRY)&_ZN8S3520C103v19Ev,
};
extern void _ZN10S3520C5_nt2v4Ev();
extern void _ZN10S3520C5_nt2v5Ev();
extern void _ZN10S3520C5_nt2v6Ev();
extern void _ZN7S3520C9D1Ev();
extern void _ZN7S3520C9D0Ev();
extern void _ZN7S3520C93v20Ev();
static  VTBL_ENTRY _tg__ZTV7S3520C9__7S3520C2[] = {
  0,
  ABISELECT(16,8),
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3520C9[0]),
  (VTBL_ENTRY)&_ZN10S3520C5_nt2v4Ev,
  (VTBL_ENTRY)&_ZN10S3520C5_nt2v5Ev,
  (VTBL_ENTRY)&_ZN10S3520C5_nt2v6Ev,
  (VTBL_ENTRY)&_ZN7S3520C9D1Ev,
  (VTBL_ENTRY)&_ZN7S3520C9D0Ev,
  (VTBL_ENTRY)&_ZN7S3520C93v20Ev,
};
extern void _ZN11S3520C11_nt3v14Ev();
extern void _ZN11S3520C11_nt3v15Ev();
extern void _ZN11S3520C11_nt3v16Ev();
extern void _ZN11S3520C11_nt3v17Ev();
extern void _ZN11S3520C11_nt3v18Ev();
extern void _ZN8S3520C103v19Ev();
static  VTBL_ENTRY _tg__ZTV8S3520C10__7S3520C9__7S3520C2[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S3520C9[0]),
  (VTBL_ENTRY)&_ZN11S3520C11_nt3v14Ev,
  (VTBL_ENTRY)&_ZN11S3520C11_nt3v15Ev,
  (VTBL_ENTRY)&_ZN11S3520C11_nt3v16Ev,
  (VTBL_ENTRY)&_ZN11S3520C11_nt3v17Ev,
  (VTBL_ENTRY)&_ZN11S3520C11_nt3v18Ev,
  (VTBL_ENTRY)&_ZN8S3520C103v19Ev,
};
static  VTT_ENTRY vtt_S3520C2[] = {
  {&(_ZTV7S3520C2[7]),  7,86},
  {&(_tg__ZTV7S3520C3__7S3520C2[3]),  3,9},
  {&(_tg__ZTV10S3520C4_nt__7S3520C3__7S3520C2[3]),  3,4},
  {&(_ZTV7S3520C2[20]),  20,86},
  {&(_ZTV7S3520C2[41]),  41,86},
  {&(_ZTV7S3520C2[66]),  66,86},
  {&(_ZTV7S3520C2[80]),  80,86},
  {&(_ZTV7S3520C2[66]),  66,86},
  {&(_tg__ZTV7S3520C6__7S3520C2[5]),  5,21},
  {&(_tg__ZTV7S3520C77S3520C6__7S3520C2[5]),  5,20},
  {&(_tg__ZTV7S3520C9__7S3520C77S3520C6__7S3520C2[9]),  9,15},
  {&(_tg__ZTV8S3520C10__7S3520C77S3520C6__7S3520C2[8]),  8,14},
  {&(_tg__ZTV7S3520C9__7S3520C77S3520C6__7S3520C2[9]),  9,15},
  {&(_tg__ZTV7S3520C9__7S3520C6__7S3520C2[9]),  9,15},
  {&(_tg__ZTV8S3520C10__7S3520C6__7S3520C2[8]),  8,14},
  {&(_tg__ZTV7S3520C9__7S3520C6__7S3520C2[9]),  9,15},
  {&(_tg__ZTV7S3520C9__7S3520C2[7]),  7,13},
  {&(_tg__ZTV8S3520C10__7S3520C9__7S3520C2[8]),  8,14},
  {&(_tg__ZTV7S3520C9__7S3520C2[7]),  7,13},
};
extern VTBL_ENTRY _ZTI7S3520C2[];
extern  VTBL_ENTRY _ZTV7S3520C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3520C2[];
static VTBL_ENTRY alt_thunk_names3[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S3520C6D0Ev,_ZTv0_n32_N7S3520C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S3520C6D0Ev,_ZThn12_N7S3520C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S3520C6D1Ev,_ZTv0_n32_N7S3520C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S3520C6D1Ev,_ZThn12_N7S3520C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S3520C7D0Ev,_ZTv0_n32_N7S3520C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S3520C7D0Ev,_ZThn12_N7S3520C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S3520C7D1Ev,_ZTv0_n32_N7S3520C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S3520C7D1Ev,_ZThn12_N7S3520C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S3520C2D0Ev,_ZTv0_n32_N7S3520C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N7S3520C2D0Ev,_ZThn48_N7S3520C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S3520C2D1Ev,_ZTv0_n32_N7S3520C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N7S3520C2D1Ev,_ZThn48_N7S3520C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n152_N7S3520C2D0Ev,_ZTv0_n76_N7S3520C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N7S3520C2D0Ev,_ZThn36_N7S3520C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n152_N7S3520C2D1Ev,_ZTv0_n76_N7S3520C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N7S3520C2D1Ev,_ZThn36_N7S3520C2D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S3520C2 = {  "S3520C2", // class name
  bases_S3520C2, 10,
  &(vtc_S3520C2[0]), // expected_vtbl_contents
  &(vtt_S3520C2[0]), // expected_vtt_contents
  ABISELECT(128,64), // object size
  NSPAIRA(_ZTI7S3520C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S3520C2),86, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3520C2),19, //virtual table table var
  10, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names3,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3520C13  {
  ::S3520C12_nt s3520c13f0;
  void *s3520c13f1;
  int s3520c13f2;
  virtual void  v33(); // _ZN8S3520C133v33Ev
  ~S3520C13(); // tgen
  S3520C13(); // tgen
};
//SIG(-1 S3520C13) C1{ v1 FC2{ v2} Fp Fi}


void  S3520C13 ::v33(){vfunc_called(this, "_ZN8S3520C133v33Ev");}
S3520C13 ::~S3520C13(){ note_dtor("S3520C13", this);} // tgen
S3520C13 ::S3520C13(){ note_ctor("S3520C13", this);} // tgen

static void Test_S3520C13()
{
  extern Class_Descriptor cd_S3520C13;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S3520C13, buf);
    S3520C13 *dp, &lv = *(dp=new (buf) S3520C13());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S3520C13)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3520C13)");
    check_field_offset(lv, s3520c13f0, ABISELECT(8,4), "S3520C13.s3520c13f0");
    check_field_offset(lv, s3520c13f1, ABISELECT(16,8), "S3520C13.s3520c13f1");
    check_field_offset(lv, s3520c13f2, ABISELECT(24,12), "S3520C13.s3520c13f2");
    test_class_info(&lv, &cd_S3520C13);
    dp->~S3520C13();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3520C13(Test_S3520C13, "S3520C13", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN8S3520C13C1Ev();
extern void _ZN8S3520C13D1Ev();
Name_Map name_map_S3520C13[] = {
  NSPAIR(_ZN8S3520C13C1Ev),
  NSPAIR(_ZN8S3520C13D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S3520C13[];
extern void _ZN8S3520C133v33Ev();
static  VTBL_ENTRY vtc_S3520C13[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S3520C13[0]),
  (VTBL_ENTRY)&_ZN8S3520C133v33Ev,
};
extern VTBL_ENTRY _ZTI8S3520C13[];
extern  VTBL_ENTRY _ZTV8S3520C13[];
Class_Descriptor cd_S3520C13 = {  "S3520C13", // class name
  0,0,//no base classes
  &(vtc_S3520C13[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI8S3520C13),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S3520C13),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  S3520C1  : S3520C2 , virtual S3520C13 {
  virtual void  v1(); // _ZN7S3520C12v1Ev
  virtual void  v2(); // _ZN7S3520C12v2Ev
  ~S3520C1(); // tgen
  S3520C1(); // tgen
};
//SIG(1 S3520C1) C1{ BC2{ BC3{ VBC4{ v3 FD} BC5{ v4 v5 v6} vd v7} VBC6{ BC7{ BC8{ v8 v9 v10 v11 v12 v13 Fi} VBC9{ VBC10{ BC11{ v14 v15 v16 v17 v18 Fi} v19} VBC5 vd v20 Fi} v21 v22 v23 v24 v25 v26 v27 FC12{ v34}} vd v28} vd v29 v30 v31 v32 Fi FD} VBC13{ v33 FC12 Fp Fi} v1 v2}


void  S3520C1 ::v1(){vfunc_called(this, "_ZN7S3520C12v1Ev");}
void  S3520C1 ::v2(){vfunc_called(this, "_ZN7S3520C12v2Ev");}
S3520C1 ::~S3520C1(){ note_dtor("S3520C1", this);} // tgen
S3520C1 ::S3520C1(){ note_ctor("S3520C1", this);} // tgen

static void Test_S3520C1()
{
  extern Class_Descriptor cd_S3520C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(11,21)];
    init_test(&cd_S3520C1, buf);
    S3520C1 *dp, &lv = *(dp=new (buf) S3520C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(160,80), "sizeof(S3520C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3520C1)");
    check_base_class_offset(lv, (S3520C4_nt*)(S3520C3*)(S3520C2*), ABISELECT(32,20), "S3520C1");
    check_base_class_offset(lv, (S3520C5_nt*)(S3520C3*)(S3520C2*), 0, "S3520C1");
    check_base_class_offset(lv, (S3520C3*)(S3520C2*), 0, "S3520C1");
    check_base_class_offset(lv, (S3520C8_nt*)(S3520C7*)(S3520C6*), ABISELECT(64,36), "S3520C1");
    check_base_class_offset(lv, (S3520C11_nt*)(S3520C10*), ABISELECT(104,56), "S3520C1");
    check_base_class_offset(lv, (S3520C10*)(S3520C9*), ABISELECT(104,56), "S3520C1");
    check_base_class_offset(lv, (S3520C5_nt*)(S3520C9*), ABISELECT(88,48), "S3520C1");
    check_base_class_offset(lv, (S3520C9*)(S3520C7*)(S3520C6*), ABISELECT(88,48), "S3520C1");
    check_base_class_offset(lv, (S3520C7*)(S3520C6*), ABISELECT(64,36), "S3520C1");
    check_base_class_offset(lv, (S3520C6*)(S3520C2*), ABISELECT(64,36), "S3520C1");
    check_base_class_offset(lv, (S3520C2*), 0, "S3520C1");
    check_base_class_offset(lv, (S3520C13*), ABISELECT(120,64), "S3520C1");
    test_class_info(&lv, &cd_S3520C1);
    dp->~S3520C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3520C1(Test_S3520C1, "S3520C1", ABISELECT(160,80));

#else // __cplusplus

extern void _ZN7S3520C1C1Ev();
extern void _ZN7S3520C1D1Ev();
Name_Map name_map_S3520C1[] = {
  NSPAIR(_ZN7S3520C1C1Ev),
  NSPAIR(_ZN7S3520C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3520C4_nt;
extern VTBL_ENTRY _ZTI10S3520C4_nt[];
extern  VTBL_ENTRY _ZTV10S3520C4_nt[];
extern Class_Descriptor cd_S3520C5_nt;
extern VTBL_ENTRY _ZTI10S3520C5_nt[];
extern  VTBL_ENTRY _ZTV10S3520C5_nt[];
extern Class_Descriptor cd_S3520C3;
extern VTBL_ENTRY _ZTI7S3520C3[];
extern  VTBL_ENTRY _ZTV7S3520C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3520C3[];
extern Class_Descriptor cd_S3520C8_nt;
extern VTBL_ENTRY _ZTI10S3520C8_nt[];
extern  VTBL_ENTRY _ZTV10S3520C8_nt[];
extern Class_Descriptor cd_S3520C11_nt;
extern VTBL_ENTRY _ZTI11S3520C11_nt[];
extern  VTBL_ENTRY _ZTV11S3520C11_nt[];
extern Class_Descriptor cd_S3520C10;
extern VTBL_ENTRY _ZTI8S3520C10[];
extern  VTBL_ENTRY _ZTV8S3520C10[];
extern Class_Descriptor cd_S3520C5_nt;
extern VTBL_ENTRY _ZTI10S3520C5_nt[];
extern  VTBL_ENTRY _ZTV10S3520C5_nt[];
extern Class_Descriptor cd_S3520C9;
extern VTBL_ENTRY _ZTI7S3520C9[];
extern  VTBL_ENTRY _ZTV7S3520C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3520C9[];
extern Class_Descriptor cd_S3520C7;
extern VTBL_ENTRY _ZTI7S3520C7[];
extern  VTBL_ENTRY _ZTV7S3520C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3520C7[];
extern Class_Descriptor cd_S3520C6;
extern VTBL_ENTRY _ZTI7S3520C6[];
extern  VTBL_ENTRY _ZTV7S3520C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3520C6[];
extern Class_Descriptor cd_S3520C2;
extern VTBL_ENTRY _ZTI7S3520C2[];
extern  VTBL_ENTRY _ZTV7S3520C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3520C2[];
extern Class_Descriptor cd_S3520C13;
extern VTBL_ENTRY _ZTI8S3520C13[];
extern  VTBL_ENTRY _ZTV8S3520C13[];
static Base_Class bases_S3520C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3520C4_nt,    ABISELECT(32,20), //bcp->offset
    20, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S3520C5_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
    10, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S3520C3,    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
    11, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S3520C8_nt,    ABISELECT(64,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
    6, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S3520C11_nt,    ABISELECT(104,56), //bcp->offset
    -1, //bcp->virtual_function_table_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_S3520C10,    ABISELECT(104,56), //bcp->offset
    75, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S3520C5_nt,    ABISELECT(88,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S3520C9,    ABISELECT(88,48), //bcp->offset
    60, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    24, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S3520C7,    ABISELECT(64,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S3520C6,    ABISELECT(64,36), //bcp->offset
    24, //bcp->virtual_function_table_offset
    20, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S3520C2,    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
    12, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3520C13,    ABISELECT(120,64), //bcp->offset
    89, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S3520C1[];
extern void _ZN10S3520C5_nt2v4Ev();
extern void _ZN10S3520C5_nt2v5Ev();
extern void _ZN10S3520C5_nt2v6Ev();
extern void _ZN7S3520C1D1Ev();
extern void _ZN7S3520C1D0Ev();
extern void _ZN7S3520C32v7Ev();
extern void _ZN7S3520C23v29Ev();
extern void _ZN7S3520C23v30Ev();
extern void _ZN7S3520C23v31Ev();
extern void _ZN7S3520C23v32Ev();
extern void _ZN7S3520C12v1Ev();
extern void _ZN7S3520C12v2Ev();
extern void _ZN10S3520C4_nt2v3Ev();
extern void _ZN10S3520C8_nt2v8Ev();
extern void _ZN10S3520C8_nt2v9Ev();
extern void _ZN10S3520C8_nt3v10Ev();
extern void _ZN10S3520C8_nt3v11Ev();
extern void _ZN10S3520C8_nt3v12Ev();
extern void _ZN10S3520C8_nt3v13Ev();
extern void _ZN7S3520C73v21Ev();
extern void _ZN7S3520C73v22Ev();
extern void _ZN7S3520C73v23Ev();
extern void _ZN7S3520C73v24Ev();
extern void _ZN7S3520C73v25Ev();
extern void _ZN7S3520C73v26Ev();
extern void _ZN7S3520C73v27Ev();
extern void ABISELECT(_ZTv0_n152_N7S3520C1D1Ev,_ZTv0_n76_N7S3520C1D1Ev)();
extern void ABISELECT(_ZThn64_N7S3520C1D1Ev,_ZThn36_N7S3520C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n152_N7S3520C1D0Ev,_ZTv0_n76_N7S3520C1D0Ev)();
extern void ABISELECT(_ZThn64_N7S3520C1D0Ev,_ZThn36_N7S3520C1D0Ev)() __attribute__((weak));
extern void _ZN7S3520C63v28Ev();
extern void _ZN10S3520C5_nt2v4Ev();
extern void _ZN10S3520C5_nt2v5Ev();
extern void _ZN10S3520C5_nt2v6Ev();
extern void ABISELECT(_ZTv0_n64_N7S3520C1D1Ev,_ZTv0_n32_N7S3520C1D1Ev)();
extern void ABISELECT(_ZThn88_N7S3520C1D1Ev,_ZThn48_N7S3520C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N7S3520C1D0Ev,_ZTv0_n32_N7S3520C1D0Ev)();
extern void ABISELECT(_ZThn88_N7S3520C1D0Ev,_ZThn48_N7S3520C1D0Ev)() __attribute__((weak));
extern void _ZN7S3520C93v20Ev();
extern void _ZN11S3520C11_nt3v14Ev();
extern void _ZN11S3520C11_nt3v15Ev();
extern void _ZN11S3520C11_nt3v16Ev();
extern void _ZN11S3520C11_nt3v17Ev();
extern void _ZN11S3520C11_nt3v18Ev();
extern void _ZN8S3520C103v19Ev();
extern void _ZN8S3520C133v33Ev();
static  VTBL_ENTRY vtc_S3520C1[] = {
  ABISELECT(120,64),
  ABISELECT(88,48),
  ABISELECT(104,56),
  ABISELECT(88,48),
  ABISELECT(64,36),
  ABISELECT(32,20),
  0,
  (VTBL_ENTRY)&(_ZTI7S3520C1[0]),
  (VTBL_ENTRY)&_ZN10S3520C5_nt2v4Ev,
  (VTBL_ENTRY)&_ZN10S3520C5_nt2v5Ev,
  (VTBL_ENTRY)&_ZN10S3520C5_nt2v6Ev,
  (VTBL_ENTRY)&_ZN7S3520C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3520C1D0Ev,
  (VTBL_ENTRY)&_ZN7S3520C32v7Ev,
  (VTBL_ENTRY)&_ZN7S3520C23v29Ev,
  (VTBL_ENTRY)&_ZN7S3520C23v30Ev,
  (VTBL_ENTRY)&_ZN7S3520C23v31Ev,
  (VTBL_ENTRY)&_ZN7S3520C23v32Ev,
  (VTBL_ENTRY)&_ZN7S3520C12v1Ev,
  (VTBL_ENTRY)&_ZN7S3520C12v2Ev,
  0,
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI7S3520C1[0]),
  (VTBL_ENTRY)&_ZN10S3520C4_nt2v3Ev,
  0,
  ABISELECT(-64,-36),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(24,12),
  ABISELECT(40,20),
  ABISELECT(24,12),
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI7S3520C1[0]),
  (VTBL_ENTRY)&_ZN10S3520C8_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S3520C8_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S3520C8_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S3520C8_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S3520C8_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S3520C8_nt3v13Ev,
  (VTBL_ENTRY)&_ZN7S3520C73v21Ev,
  (VTBL_ENTRY)&_ZN7S3520C73v22Ev,
  (VTBL_ENTRY)&_ZN7S3520C73v23Ev,
  (VTBL_ENTRY)&_ZN7S3520C73v24Ev,
  (VTBL_ENTRY)&_ZN7S3520C73v25Ev,
  (VTBL_ENTRY)&_ZN7S3520C73v26Ev,
  (VTBL_ENTRY)&_ZN7S3520C73v27Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n152_N7S3520C1D1Ev,_ZTv0_n76_N7S3520C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n152_N7S3520C1D0Ev,_ZTv0_n76_N7S3520C1D0Ev),
  (VTBL_ENTRY)&_ZN7S3520C63v28Ev,
  0,
  ABISELECT(-88,-48),
  0,
  ABISELECT(16,8),
  0,
  0,
  0,
  ABISELECT(-88,-48),
  (VTBL_ENTRY)&(_ZTI7S3520C1[0]),
  (VTBL_ENTRY)&_ZN10S3520C5_nt2v4Ev,
  (VTBL_ENTRY)&_ZN10S3520C5_nt2v5Ev,
  (VTBL_ENTRY)&_ZN10S3520C5_nt2v6Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S3520C1D1Ev,_ZTv0_n32_N7S3520C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S3520C1D0Ev,_ZTv0_n32_N7S3520C1D0Ev),
  (VTBL_ENTRY)&_ZN7S3520C93v20Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-104,-56),
  (VTBL_ENTRY)&(_ZTI7S3520C1[0]),
  (VTBL_ENTRY)&_ZN11S3520C11_nt3v14Ev,
  (VTBL_ENTRY)&_ZN11S3520C11_nt3v15Ev,
  (VTBL_ENTRY)&_ZN11S3520C11_nt3v16Ev,
  (VTBL_ENTRY)&_ZN11S3520C11_nt3v17Ev,
  (VTBL_ENTRY)&_ZN11S3520C11_nt3v18Ev,
  (VTBL_ENTRY)&_ZN8S3520C103v19Ev,
  0,
  ABISELECT(-120,-64),
  (VTBL_ENTRY)&(_ZTI7S3520C1[0]),
  (VTBL_ENTRY)&_ZN8S3520C133v33Ev,
};
extern VTBL_ENTRY _ZTV7S3520C1[];
extern void _ZN10S3520C5_nt2v4Ev();
extern void _ZN10S3520C5_nt2v5Ev();
extern void _ZN10S3520C5_nt2v6Ev();
extern void _ZN7S3520C2D1Ev();
extern void _ZN7S3520C2D0Ev();
extern void _ZN7S3520C32v7Ev();
extern void _ZN7S3520C23v29Ev();
extern void _ZN7S3520C23v30Ev();
extern void _ZN7S3520C23v31Ev();
extern void _ZN7S3520C23v32Ev();
static  VTBL_ENTRY _tg__ZTV7S3520C2__7S3520C1[] = {
  ABISELECT(88,48),
  ABISELECT(104,56),
  ABISELECT(88,48),
  ABISELECT(64,36),
  ABISELECT(32,20),
  0,
  (VTBL_ENTRY)&(_ZTI7S3520C2[0]),
  (VTBL_ENTRY)&_ZN10S3520C5_nt2v4Ev,
  (VTBL_ENTRY)&_ZN10S3520C5_nt2v5Ev,
  (VTBL_ENTRY)&_ZN10S3520C5_nt2v6Ev,
  (VTBL_ENTRY)&_ZN7S3520C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3520C2D0Ev,
  (VTBL_ENTRY)&_ZN7S3520C32v7Ev,
  (VTBL_ENTRY)&_ZN7S3520C23v29Ev,
  (VTBL_ENTRY)&_ZN7S3520C23v30Ev,
  (VTBL_ENTRY)&_ZN7S3520C23v31Ev,
  (VTBL_ENTRY)&_ZN7S3520C23v32Ev,
};
extern void _ZN10S3520C5_nt2v4Ev();
extern void _ZN10S3520C5_nt2v5Ev();
extern void _ZN10S3520C5_nt2v6Ev();
extern void _ZN7S3520C3D1Ev();
extern void _ZN7S3520C3D0Ev();
extern void _ZN7S3520C32v7Ev();
static  VTBL_ENTRY _tg__ZTV7S3520C37S3520C2__7S3520C1[] = {
  ABISELECT(32,20),
  0,
  (VTBL_ENTRY)&(_ZTI7S3520C3[0]),
  (VTBL_ENTRY)&_ZN10S3520C5_nt2v4Ev,
  (VTBL_ENTRY)&_ZN10S3520C5_nt2v5Ev,
  (VTBL_ENTRY)&_ZN10S3520C5_nt2v6Ev,
  (VTBL_ENTRY)&_ZN7S3520C3D1Ev,
  (VTBL_ENTRY)&_ZN7S3520C3D0Ev,
  (VTBL_ENTRY)&_ZN7S3520C32v7Ev,
};
extern void _ZN10S3520C4_nt2v3Ev();
static  VTBL_ENTRY _tg__ZTV10S3520C4_nt__7S3520C37S3520C2__7S3520C1[] = {
  0,
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI7S3520C3[0]),
  (VTBL_ENTRY)&_ZN10S3520C4_nt2v3Ev,
};
extern void _ZN10S3520C4_nt2v3Ev();
static  VTBL_ENTRY _tg__ZTV10S3520C4_nt__7S3520C2__7S3520C1[] = {
  0,
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI7S3520C2[0]),
  (VTBL_ENTRY)&_ZN10S3520C4_nt2v3Ev,
};
extern void _ZN10S3520C8_nt2v8Ev();
extern void _ZN10S3520C8_nt2v9Ev();
extern void _ZN10S3520C8_nt3v10Ev();
extern void _ZN10S3520C8_nt3v11Ev();
extern void _ZN10S3520C8_nt3v12Ev();
extern void _ZN10S3520C8_nt3v13Ev();
extern void _ZN7S3520C73v21Ev();
extern void _ZN7S3520C73v22Ev();
extern void _ZN7S3520C73v23Ev();
extern void _ZN7S3520C73v24Ev();
extern void _ZN7S3520C73v25Ev();
extern void _ZN7S3520C73v26Ev();
extern void _ZN7S3520C73v27Ev();
extern void ABISELECT(_ZTv0_n152_N7S3520C2D1Ev,_ZTv0_n76_N7S3520C2D1Ev)();
extern void ABISELECT(_ZThn64_N7S3520C2D1Ev,_ZThn36_N7S3520C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n152_N7S3520C2D0Ev,_ZTv0_n76_N7S3520C2D0Ev)();
extern void ABISELECT(_ZThn64_N7S3520C2D0Ev,_ZThn36_N7S3520C2D0Ev)() __attribute__((weak));
extern void _ZN7S3520C63v28Ev();
static  VTBL_ENTRY _tg__ZTV7S3520C6__7S3520C2__7S3520C1[] = {
  0,
  ABISELECT(-64,-36),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(24,12),
  ABISELECT(40,20),
  ABISELECT(24,12),
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI7S3520C2[0]),
  (VTBL_ENTRY)&_ZN10S3520C8_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S3520C8_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S3520C8_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S3520C8_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S3520C8_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S3520C8_nt3v13Ev,
  (VTBL_ENTRY)&_ZN7S3520C73v21Ev,
  (VTBL_ENTRY)&_ZN7S3520C73v22Ev,
  (VTBL_ENTRY)&_ZN7S3520C73v23Ev,
  (VTBL_ENTRY)&_ZN7S3520C73v24Ev,
  (VTBL_ENTRY)&_ZN7S3520C73v25Ev,
  (VTBL_ENTRY)&_ZN7S3520C73v26Ev,
  (VTBL_ENTRY)&_ZN7S3520C73v27Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n152_N7S3520C2D1Ev,_ZTv0_n76_N7S3520C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n152_N7S3520C2D0Ev,_ZTv0_n76_N7S3520C2D0Ev),
  (VTBL_ENTRY)&_ZN7S3520C63v28Ev,
};
extern void _ZN10S3520C5_nt2v4Ev();
extern void _ZN10S3520C5_nt2v5Ev();
extern void _ZN10S3520C5_nt2v6Ev();
extern void ABISELECT(_ZTv0_n64_N7S3520C2D1Ev,_ZTv0_n32_N7S3520C2D1Ev)();
extern void ABISELECT(_ZThn88_N7S3520C2D1Ev,_ZThn48_N7S3520C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N7S3520C2D0Ev,_ZTv0_n32_N7S3520C2D0Ev)();
extern void ABISELECT(_ZThn88_N7S3520C2D0Ev,_ZThn48_N7S3520C2D0Ev)() __attribute__((weak));
extern void _ZN7S3520C93v20Ev();
static  VTBL_ENTRY _tg__ZTV7S3520C9__7S3520C2__7S3520C1[] = {
  0,
  ABISELECT(-88,-48),
  0,
  ABISELECT(16,8),
  0,
  0,
  0,
  ABISELECT(-88,-48),
  (VTBL_ENTRY)&(_ZTI7S3520C2[0]),
  (VTBL_ENTRY)&_ZN10S3520C5_nt2v4Ev,
  (VTBL_ENTRY)&_ZN10S3520C5_nt2v5Ev,
  (VTBL_ENTRY)&_ZN10S3520C5_nt2v6Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S3520C2D1Ev,_ZTv0_n32_N7S3520C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S3520C2D0Ev,_ZTv0_n32_N7S3520C2D0Ev),
  (VTBL_ENTRY)&_ZN7S3520C93v20Ev,
};
extern void _ZN11S3520C11_nt3v14Ev();
extern void _ZN11S3520C11_nt3v15Ev();
extern void _ZN11S3520C11_nt3v16Ev();
extern void _ZN11S3520C11_nt3v17Ev();
extern void _ZN11S3520C11_nt3v18Ev();
extern void _ZN8S3520C103v19Ev();
static  VTBL_ENTRY _tg__ZTV8S3520C10__7S3520C2__7S3520C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-104,-56),
  (VTBL_ENTRY)&(_ZTI7S3520C2[0]),
  (VTBL_ENTRY)&_ZN11S3520C11_nt3v14Ev,
  (VTBL_ENTRY)&_ZN11S3520C11_nt3v15Ev,
  (VTBL_ENTRY)&_ZN11S3520C11_nt3v16Ev,
  (VTBL_ENTRY)&_ZN11S3520C11_nt3v17Ev,
  (VTBL_ENTRY)&_ZN11S3520C11_nt3v18Ev,
  (VTBL_ENTRY)&_ZN8S3520C103v19Ev,
};
extern void _ZN10S3520C8_nt2v8Ev();
extern void _ZN10S3520C8_nt2v9Ev();
extern void _ZN10S3520C8_nt3v10Ev();
extern void _ZN10S3520C8_nt3v11Ev();
extern void _ZN10S3520C8_nt3v12Ev();
extern void _ZN10S3520C8_nt3v13Ev();
extern void _ZN7S3520C73v21Ev();
extern void _ZN7S3520C73v22Ev();
extern void _ZN7S3520C73v23Ev();
extern void _ZN7S3520C73v24Ev();
extern void _ZN7S3520C73v25Ev();
extern void _ZN7S3520C73v26Ev();
extern void _ZN7S3520C73v27Ev();
extern void _ZN7S3520C6D1Ev();
extern void _ZN7S3520C6D0Ev();
extern void _ZN7S3520C63v28Ev();
static  VTBL_ENTRY _tg__ZTV7S3520C6__7S3520C1[] = {
  ABISELECT(24,12),
  ABISELECT(40,20),
  ABISELECT(24,12),
  0,
  (VTBL_ENTRY)&(_ZTI7S3520C6[0]),
  (VTBL_ENTRY)&_ZN10S3520C8_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S3520C8_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S3520C8_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S3520C8_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S3520C8_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S3520C8_nt3v13Ev,
  (VTBL_ENTRY)&_ZN7S3520C73v21Ev,
  (VTBL_ENTRY)&_ZN7S3520C73v22Ev,
  (VTBL_ENTRY)&_ZN7S3520C73v23Ev,
  (VTBL_ENTRY)&_ZN7S3520C73v24Ev,
  (VTBL_ENTRY)&_ZN7S3520C73v25Ev,
  (VTBL_ENTRY)&_ZN7S3520C73v26Ev,
  (VTBL_ENTRY)&_ZN7S3520C73v27Ev,
  (VTBL_ENTRY)&_ZN7S3520C6D1Ev,
  (VTBL_ENTRY)&_ZN7S3520C6D0Ev,
  (VTBL_ENTRY)&_ZN7S3520C63v28Ev,
};
extern void _ZN10S3520C8_nt2v8Ev();
extern void _ZN10S3520C8_nt2v9Ev();
extern void _ZN10S3520C8_nt3v10Ev();
extern void _ZN10S3520C8_nt3v11Ev();
extern void _ZN10S3520C8_nt3v12Ev();
extern void _ZN10S3520C8_nt3v13Ev();
extern void _ZN7S3520C73v21Ev();
extern void _ZN7S3520C73v22Ev();
extern void _ZN7S3520C73v23Ev();
extern void _ZN7S3520C73v24Ev();
extern void _ZN7S3520C73v25Ev();
extern void _ZN7S3520C73v26Ev();
extern void _ZN7S3520C73v27Ev();
extern void _ZN7S3520C7D1Ev();
extern void _ZN7S3520C7D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3520C77S3520C6__7S3520C1[] = {
  ABISELECT(24,12),
  ABISELECT(40,20),
  ABISELECT(24,12),
  0,
  (VTBL_ENTRY)&(_ZTI7S3520C7[0]),
  (VTBL_ENTRY)&_ZN10S3520C8_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S3520C8_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S3520C8_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S3520C8_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S3520C8_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S3520C8_nt3v13Ev,
  (VTBL_ENTRY)&_ZN7S3520C73v21Ev,
  (VTBL_ENTRY)&_ZN7S3520C73v22Ev,
  (VTBL_ENTRY)&_ZN7S3520C73v23Ev,
  (VTBL_ENTRY)&_ZN7S3520C73v24Ev,
  (VTBL_ENTRY)&_ZN7S3520C73v25Ev,
  (VTBL_ENTRY)&_ZN7S3520C73v26Ev,
  (VTBL_ENTRY)&_ZN7S3520C73v27Ev,
  (VTBL_ENTRY)&_ZN7S3520C7D1Ev,
  (VTBL_ENTRY)&_ZN7S3520C7D0Ev,
};
extern void _ZN10S3520C5_nt2v4Ev();
extern void _ZN10S3520C5_nt2v5Ev();
extern void _ZN10S3520C5_nt2v6Ev();
extern void ABISELECT(_ZTv0_n64_N7S3520C7D1Ev,_ZTv0_n32_N7S3520C7D1Ev)();
extern void ABISELECT(_ZThn24_N7S3520C7D1Ev,_ZThn12_N7S3520C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N7S3520C7D0Ev,_ZTv0_n32_N7S3520C7D0Ev)();
extern void ABISELECT(_ZThn24_N7S3520C7D0Ev,_ZThn12_N7S3520C7D0Ev)() __attribute__((weak));
extern void _ZN7S3520C93v20Ev();
static  VTBL_ENTRY _tg__ZTV7S3520C9__7S3520C77S3520C6__7S3520C1[] = {
  0,
  ABISELECT(-24,-12),
  0,
  ABISELECT(16,8),
  0,
  0,
  0,
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI7S3520C7[0]),
  (VTBL_ENTRY)&_ZN10S3520C5_nt2v4Ev,
  (VTBL_ENTRY)&_ZN10S3520C5_nt2v5Ev,
  (VTBL_ENTRY)&_ZN10S3520C5_nt2v6Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S3520C7D1Ev,_ZTv0_n32_N7S3520C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S3520C7D0Ev,_ZTv0_n32_N7S3520C7D0Ev),
  (VTBL_ENTRY)&_ZN7S3520C93v20Ev,
};
extern void _ZN11S3520C11_nt3v14Ev();
extern void _ZN11S3520C11_nt3v15Ev();
extern void _ZN11S3520C11_nt3v16Ev();
extern void _ZN11S3520C11_nt3v17Ev();
extern void _ZN11S3520C11_nt3v18Ev();
extern void _ZN8S3520C103v19Ev();
static  VTBL_ENTRY _tg__ZTV8S3520C10__7S3520C77S3520C6__7S3520C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI7S3520C7[0]),
  (VTBL_ENTRY)&_ZN11S3520C11_nt3v14Ev,
  (VTBL_ENTRY)&_ZN11S3520C11_nt3v15Ev,
  (VTBL_ENTRY)&_ZN11S3520C11_nt3v16Ev,
  (VTBL_ENTRY)&_ZN11S3520C11_nt3v17Ev,
  (VTBL_ENTRY)&_ZN11S3520C11_nt3v18Ev,
  (VTBL_ENTRY)&_ZN8S3520C103v19Ev,
};
extern void _ZN10S3520C5_nt2v4Ev();
extern void _ZN10S3520C5_nt2v5Ev();
extern void _ZN10S3520C5_nt2v6Ev();
extern void ABISELECT(_ZTv0_n64_N7S3520C6D1Ev,_ZTv0_n32_N7S3520C6D1Ev)();
extern void ABISELECT(_ZThn24_N7S3520C6D1Ev,_ZThn12_N7S3520C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N7S3520C6D0Ev,_ZTv0_n32_N7S3520C6D0Ev)();
extern void ABISELECT(_ZThn24_N7S3520C6D0Ev,_ZThn12_N7S3520C6D0Ev)() __attribute__((weak));
extern void _ZN7S3520C93v20Ev();
static  VTBL_ENTRY _tg__ZTV7S3520C9__7S3520C6__7S3520C1[] = {
  0,
  ABISELECT(-24,-12),
  0,
  ABISELECT(16,8),
  0,
  0,
  0,
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI7S3520C6[0]),
  (VTBL_ENTRY)&_ZN10S3520C5_nt2v4Ev,
  (VTBL_ENTRY)&_ZN10S3520C5_nt2v5Ev,
  (VTBL_ENTRY)&_ZN10S3520C5_nt2v6Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S3520C6D1Ev,_ZTv0_n32_N7S3520C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S3520C6D0Ev,_ZTv0_n32_N7S3520C6D0Ev),
  (VTBL_ENTRY)&_ZN7S3520C93v20Ev,
};
extern void _ZN11S3520C11_nt3v14Ev();
extern void _ZN11S3520C11_nt3v15Ev();
extern void _ZN11S3520C11_nt3v16Ev();
extern void _ZN11S3520C11_nt3v17Ev();
extern void _ZN11S3520C11_nt3v18Ev();
extern void _ZN8S3520C103v19Ev();
static  VTBL_ENTRY _tg__ZTV8S3520C10__7S3520C6__7S3520C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI7S3520C6[0]),
  (VTBL_ENTRY)&_ZN11S3520C11_nt3v14Ev,
  (VTBL_ENTRY)&_ZN11S3520C11_nt3v15Ev,
  (VTBL_ENTRY)&_ZN11S3520C11_nt3v16Ev,
  (VTBL_ENTRY)&_ZN11S3520C11_nt3v17Ev,
  (VTBL_ENTRY)&_ZN11S3520C11_nt3v18Ev,
  (VTBL_ENTRY)&_ZN8S3520C103v19Ev,
};
extern void _ZN10S3520C5_nt2v4Ev();
extern void _ZN10S3520C5_nt2v5Ev();
extern void _ZN10S3520C5_nt2v6Ev();
extern void _ZN7S3520C9D1Ev();
extern void _ZN7S3520C9D0Ev();
extern void _ZN7S3520C93v20Ev();
static  VTBL_ENTRY _tg__ZTV7S3520C9__7S3520C1[] = {
  0,
  ABISELECT(16,8),
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3520C9[0]),
  (VTBL_ENTRY)&_ZN10S3520C5_nt2v4Ev,
  (VTBL_ENTRY)&_ZN10S3520C5_nt2v5Ev,
  (VTBL_ENTRY)&_ZN10S3520C5_nt2v6Ev,
  (VTBL_ENTRY)&_ZN7S3520C9D1Ev,
  (VTBL_ENTRY)&_ZN7S3520C9D0Ev,
  (VTBL_ENTRY)&_ZN7S3520C93v20Ev,
};
extern void _ZN11S3520C11_nt3v14Ev();
extern void _ZN11S3520C11_nt3v15Ev();
extern void _ZN11S3520C11_nt3v16Ev();
extern void _ZN11S3520C11_nt3v17Ev();
extern void _ZN11S3520C11_nt3v18Ev();
extern void _ZN8S3520C103v19Ev();
static  VTBL_ENTRY _tg__ZTV8S3520C10__7S3520C9__7S3520C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S3520C9[0]),
  (VTBL_ENTRY)&_ZN11S3520C11_nt3v14Ev,
  (VTBL_ENTRY)&_ZN11S3520C11_nt3v15Ev,
  (VTBL_ENTRY)&_ZN11S3520C11_nt3v16Ev,
  (VTBL_ENTRY)&_ZN11S3520C11_nt3v17Ev,
  (VTBL_ENTRY)&_ZN11S3520C11_nt3v18Ev,
  (VTBL_ENTRY)&_ZN8S3520C103v19Ev,
};
static  VTT_ENTRY vtt_S3520C1[] = {
  {&(_ZTV7S3520C1[8]),  8,93},
  {&(_tg__ZTV7S3520C2__7S3520C1[7]),  7,17},
  {&(_tg__ZTV7S3520C37S3520C2__7S3520C1[3]),  3,9},
  {&(_tg__ZTV10S3520C4_nt__7S3520C37S3520C2__7S3520C1[3]),  3,4},
  {&(_tg__ZTV10S3520C4_nt__7S3520C2__7S3520C1[3]),  3,4},
  {&(_tg__ZTV7S3520C6__7S3520C2__7S3520C1[20]),  20,36},
  {&(_tg__ZTV7S3520C9__7S3520C2__7S3520C1[9]),  9,15},
  {&(_tg__ZTV8S3520C10__7S3520C2__7S3520C1[8]),  8,14},
  {&(_tg__ZTV7S3520C9__7S3520C2__7S3520C1[9]),  9,15},
  {&(_ZTV7S3520C1[23]),  23,93},
  {&(_ZTV7S3520C1[44]),  44,93},
  {&(_ZTV7S3520C1[69]),  69,93},
  {&(_ZTV7S3520C1[83]),  83,93},
  {&(_ZTV7S3520C1[69]),  69,93},
  {&(_ZTV7S3520C1[92]),  92,93},
  {&(_tg__ZTV7S3520C6__7S3520C1[5]),  5,21},
  {&(_tg__ZTV7S3520C77S3520C6__7S3520C1[5]),  5,20},
  {&(_tg__ZTV7S3520C9__7S3520C77S3520C6__7S3520C1[9]),  9,15},
  {&(_tg__ZTV8S3520C10__7S3520C77S3520C6__7S3520C1[8]),  8,14},
  {&(_tg__ZTV7S3520C9__7S3520C77S3520C6__7S3520C1[9]),  9,15},
  {&(_tg__ZTV7S3520C9__7S3520C6__7S3520C1[9]),  9,15},
  {&(_tg__ZTV8S3520C10__7S3520C6__7S3520C1[8]),  8,14},
  {&(_tg__ZTV7S3520C9__7S3520C6__7S3520C1[9]),  9,15},
  {&(_tg__ZTV7S3520C9__7S3520C1[7]),  7,13},
  {&(_tg__ZTV8S3520C10__7S3520C9__7S3520C1[8]),  8,14},
  {&(_tg__ZTV7S3520C9__7S3520C1[7]),  7,13},
};
extern VTBL_ENTRY _ZTI7S3520C1[];
extern  VTBL_ENTRY _ZTV7S3520C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3520C1[];
static VTBL_ENTRY alt_thunk_names4[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S3520C6D0Ev,_ZTv0_n32_N7S3520C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S3520C6D0Ev,_ZThn12_N7S3520C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S3520C6D1Ev,_ZTv0_n32_N7S3520C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S3520C6D1Ev,_ZThn12_N7S3520C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S3520C7D0Ev,_ZTv0_n32_N7S3520C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S3520C7D0Ev,_ZThn12_N7S3520C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S3520C7D1Ev,_ZTv0_n32_N7S3520C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S3520C7D1Ev,_ZThn12_N7S3520C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S3520C2D0Ev,_ZTv0_n32_N7S3520C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N7S3520C2D0Ev,_ZThn48_N7S3520C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S3520C2D1Ev,_ZTv0_n32_N7S3520C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N7S3520C2D1Ev,_ZThn48_N7S3520C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n152_N7S3520C2D0Ev,_ZTv0_n76_N7S3520C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N7S3520C2D0Ev,_ZThn36_N7S3520C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n152_N7S3520C2D1Ev,_ZTv0_n76_N7S3520C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N7S3520C2D1Ev,_ZThn36_N7S3520C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S3520C1D0Ev,_ZTv0_n32_N7S3520C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N7S3520C1D0Ev,_ZThn48_N7S3520C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S3520C1D1Ev,_ZTv0_n32_N7S3520C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N7S3520C1D1Ev,_ZThn48_N7S3520C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n152_N7S3520C1D0Ev,_ZTv0_n76_N7S3520C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N7S3520C1D0Ev,_ZThn36_N7S3520C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n152_N7S3520C1D1Ev,_ZTv0_n76_N7S3520C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N7S3520C1D1Ev,_ZThn36_N7S3520C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S3520C1 = {  "S3520C1", // class name
  bases_S3520C1, 12,
  &(vtc_S3520C1[0]), // expected_vtbl_contents
  &(vtt_S3520C1[0]), // expected_vtt_contents
  ABISELECT(160,80), // object size
  NSPAIRA(_ZTI7S3520C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S3520C1),93, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3520C1),26, //virtual table table var
  12, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names4,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S15028C3_nt  {
  char s15028c3f0[12];
};
//SIG(-1 S15028C3_nt) C1{ Fc[12]}



//skip512 S15028C3_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S15028C2  {
  int s15028c2f0;
  ::S15028C3_nt s15028c2f1;
};
//SIG(-1 S15028C2) C1{ Fi FC2{ Fc[12]}}



static void Test_S15028C2()
{
  {
    init_simple_test("S15028C2");
    S15028C2 lv;
    check2(sizeof(lv), 16, "sizeof(S15028C2)");
    check2(__alignof__(lv), 4, "__alignof__(S15028C2)");
    check_field_offset(lv, s15028c2f0, 0, "S15028C2.s15028c2f0");
    check_field_offset(lv, s15028c2f1, 4, "S15028C2.s15028c2f1");
  }
}
static Arrange_To_Call_Me vS15028C2(Test_S15028C2, "S15028C2", 16);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S15028C4_nt  {
  char s15028c4f0[2];
};
//SIG(-1 S15028C4_nt) C1{ Fc[2]}



//skip512 S15028C4_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S15028C8_nt  {
  char s15028c8f0[20];
};
//SIG(-1 S15028C8_nt) C1{ Fc[20]}



//skip512 S15028C8_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S15028C7_nt  {
  ::S15028C8_nt s15028c7f0;
  char s15028c7f1[16];
};
//SIG(-1 S15028C7_nt) C1{ FC2{ Fc[20]} Fc[16]}



//skip512 S15028C7_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S15028C10_nt  {
  int s15028c10f0[2];
  char s15028c10f1[320];
  int s15028c10f2;
};
//SIG(-1 S15028C10_nt) C1{ Fi[2] Fc[320] Fi}



//skip512 S15028C10_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S15028C9  {
  int s15028c9f0;
  char s15028c9f1[128];
  ::S15028C10_nt s15028c9f2;
};
//SIG(-1 S15028C9) C1{ Fi Fc[128] FC2{ Fi[2] Fc[320] Fi}}



static void Test_S15028C9()
{
  {
    init_simple_test("S15028C9");
    S15028C9 lv;
    check2(sizeof(lv), 464, "sizeof(S15028C9)");
    check2(__alignof__(lv), 4, "__alignof__(S15028C9)");
    check_field_offset(lv, s15028c9f0, 0, "S15028C9.s15028c9f0");
    check_field_offset(lv, s15028c9f1, 4, "S15028C9.s15028c9f1");
    check_field_offset(lv, s15028c9f2, 132, "S15028C9.s15028c9f2");
  }
}
static Arrange_To_Call_Me vS15028C9(Test_S15028C9, "S15028C9", 464);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S15028C6  {
  ::S15028C7_nt s15028c6f0;
  short s15028c6f1;
  char s15028c6f2[2];
  ::S15028C9 s15028c6f3;
  ::S15028C3_nt s15028c6f4;
  ::S15028C3_nt s15028c6f5;
};
//SIG(-1 S15028C6) C1{ FC2{ FC3{ Fc[20]} Fc[16]} Fs Fc[2] FC4{ Fi Fc[128] FC5{ Fi[2] Fc[320] Fi}} FC6{ Fc[12]} FC6}



static void Test_S15028C6()
{
  {
    init_simple_test("S15028C6");
    S15028C6 lv;
    check2(sizeof(lv), 528, "sizeof(S15028C6)");
    check2(__alignof__(lv), 4, "__alignof__(S15028C6)");
    check_field_offset(lv, s15028c6f0, 0, "S15028C6.s15028c6f0");
    check_field_offset(lv, s15028c6f1, 36, "S15028C6.s15028c6f1");
    check_field_offset(lv, s15028c6f2, 38, "S15028C6.s15028c6f2");
    check_field_offset(lv, s15028c6f3, 40, "S15028C6.s15028c6f3");
    check_field_offset(lv, s15028c6f4, 504, "S15028C6.s15028c6f4");
    check_field_offset(lv, s15028c6f5, 516, "S15028C6.s15028c6f5");
  }
}
static Arrange_To_Call_Me vS15028C6(Test_S15028C6, "S15028C6", 528);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S15028C13_nt  {
  __tsi64 s15028c13f0;
};
//SIG(-1 S15028C13_nt) C1{ FL}



//skip512 S15028C13_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S15028C12  {
  ::S15028C7_nt s15028c12f0;
  ::S15028C13_nt s15028c12f1;
};
//SIG(-1 S15028C12) C1{ FC2{ FC3{ Fc[20]} Fc[16]} FC4{ FL}}



static void Test_S15028C12()
{
  {
    init_simple_test("S15028C12");
    S15028C12 lv;
    check2(sizeof(lv), ABISELECT(48,44), "sizeof(S15028C12)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S15028C12)");
    check_field_offset(lv, s15028c12f0, 0, "S15028C12.s15028c12f0");
    check_field_offset(lv, s15028c12f1, ABISELECT(40,36), "S15028C12.s15028c12f1");
  }
}
static Arrange_To_Call_Me vS15028C12(Test_S15028C12, "S15028C12", ABISELECT(48,44));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S15028C11  {
  ::S15028C12 s15028c11f0;
  char s15028c11f1[129];
};
//SIG(-1 S15028C11) C1{ FC2{ FC3{ FC4{ Fc[20]} Fc[16]} FC5{ FL}} Fc[129]}



static void Test_S15028C11()
{
  {
    init_simple_test("S15028C11");
    S15028C11 lv;
    check2(sizeof(lv), ABISELECT(184,176), "sizeof(S15028C11)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S15028C11)");
    check_field_offset(lv, s15028c11f0, 0, "S15028C11.s15028c11f0");
    check_field_offset(lv, s15028c11f1, ABISELECT(48,44), "S15028C11.s15028c11f1");
  }
}
static Arrange_To_Call_Me vS15028C11(Test_S15028C11, "S15028C11", ABISELECT(184,176));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S15028C5  {
  ::S15028C6 s15028c5f0[8];
  __tsi64 s15028c5f1;
  ::S15028C6 s15028c5f2;
  ::S15028C6 s15028c5f3;
  int s15028c5f4;
  ::S15028C11 s15028c5f5;
  int s15028c5f6;
};
//SIG(-1 S15028C5) C1{ FC2{ FC3{ FC4{ Fc[20]} Fc[16]} Fs Fc[2] FC5{ Fi Fc[128] FC6{ Fi[2] Fc[320] Fi}} FC7{ Fc[12]} FC7}[8] FL FC2 FC2 Fi FC8{ FC9{ FC3 FC10{ FL}} Fc[129]} Fi}



static void Test_S15028C5()
{
  {
    init_simple_test("S15028C5");
    S15028C5 lv;
    check2(sizeof(lv), ABISELECT(5488,5472), "sizeof(S15028C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S15028C5)");
    check_field_offset(lv, s15028c5f0, 0, "S15028C5.s15028c5f0");
    check_field_offset(lv, s15028c5f1, 4224, "S15028C5.s15028c5f1");
    check_field_offset(lv, s15028c5f2, 4232, "S15028C5.s15028c5f2");
    check_field_offset(lv, s15028c5f3, 4760, "S15028C5.s15028c5f3");
    check_field_offset(lv, s15028c5f4, 5288, "S15028C5.s15028c5f4");
    check_field_offset(lv, s15028c5f5, ABISELECT(5296,5292), "S15028C5.s15028c5f5");
    check_field_offset(lv, s15028c5f6, ABISELECT(5480,5468), "S15028C5.s15028c5f6");
  }
}
static Arrange_To_Call_Me vS15028C5(Test_S15028C5, "S15028C5", ABISELECT(5488,5472));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S15028C15_nt  {
  short s15028c15f0;
  char s15028c15f1[2];
};
//SIG(1 S15028C15_nt) C1{ Fs Fc[2]}



//skip512 S15028C15_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S15028C14  {
  ::S15028C15_nt s15028c14f0[8];
  char s15028c14f1[4];
};
//SIG(-1 S15028C14) C1{ FC2{ Fs Fc[2]}[8] Fc[4]}



static void Test_S15028C14()
{
  {
    init_simple_test("S15028C14");
    S15028C14 lv;
    check2(sizeof(lv), 36, "sizeof(S15028C14)");
    check2(__alignof__(lv), 2, "__alignof__(S15028C14)");
    check_field_offset(lv, s15028c14f0, 0, "S15028C14.s15028c14f0");
    check_field_offset(lv, s15028c14f1, 32, "S15028C14.s15028c14f1");
  }
}
static Arrange_To_Call_Me vS15028C14(Test_S15028C14, "S15028C14", 36);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S15028C1  {
  char s15028c1f0;
  ::S15028C2 s15028c1f1;
  ::S15028C4_nt s15028c1f2;
  short s15028c1f3[2];
  ::S15028C5 s15028c1f4;
  ::S15028C14 s15028c1f5;
  ::S3625C14_nt s15028c1f6;
  int s15028c1f7;
  __tsi64 s15028c1f8[8];
  void  mf15028c1(); // _ZN8S15028C19mf15028c1Ev
};
//SIG(1 S15028C1) C1{ m Fc FC2{ Fi FC3{ Fc[12]}} FC4{ Fc[2]} Fs[2] FC5{ FC6{ FC7{ FC8{ Fc[20]} Fc[16]} Fs Fc[2] FC9{ Fi Fc[128] FC10{ Fi[2] Fc[320] Fi}} FC3 FC3}[8] FL FC6 FC6 Fi FC11{ FC12{ FC7 FC13{ FL}} Fc[129]} Fi} FC14{ FC15{ Fs Fc[2]}[8] Fc[4]} FC16{ FL[4]} Fi FL[8]}


void  S15028C1 ::mf15028c1(){}

static void Test_S15028C1()
{
  {
    init_simple_test("S15028C1");
    S15028C1 lv;
    check2(sizeof(lv), ABISELECT(5664,5636), "sizeof(S15028C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S15028C1)");
    check_field_offset(lv, s15028c1f0, 0, "S15028C1.s15028c1f0");
    check_field_offset(lv, s15028c1f1, 4, "S15028C1.s15028c1f1");
    check_field_offset(lv, s15028c1f2, 20, "S15028C1.s15028c1f2");
    check_field_offset(lv, s15028c1f3, 22, "S15028C1.s15028c1f3");
    check_field_offset(lv, s15028c1f4, ABISELECT(32,28), "S15028C1.s15028c1f4");
    check_field_offset(lv, s15028c1f5, ABISELECT(5520,5500), "S15028C1.s15028c1f5");
    check_field_offset(lv, s15028c1f6, ABISELECT(5560,5536), "S15028C1.s15028c1f6");
    check_field_offset(lv, s15028c1f7, ABISELECT(5592,5568), "S15028C1.s15028c1f7");
    check_field_offset(lv, s15028c1f8, ABISELECT(5600,5572), "S15028C1.s15028c1f8");
  }
}
static Arrange_To_Call_Me vS15028C1(Test_S15028C1, "S15028C1", ABISELECT(5664,5636));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S15027C13_nt  {
  long s15027c13f0;
};
//SIG(-1 S15027C13_nt) C1{ Fl}



//skip512 S15027C13_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S15027C12  {
  ::S15028C7_nt s15027c12f0;
  ::S15027C13_nt s15027c12f1;
};
//SIG(-1 S15027C12) C1{ FC2{ FC3{ Fc[20]} Fc[16]} FC4{ Fl}}



static void Test_S15027C12()
{
  {
    init_simple_test("S15027C12");
    S15027C12 lv;
    check2(sizeof(lv), ABISELECT(48,40), "sizeof(S15027C12)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S15027C12)");
    check_field_offset(lv, s15027c12f0, 0, "S15027C12.s15027c12f0");
    check_field_offset(lv, s15027c12f1, ABISELECT(40,36), "S15027C12.s15027c12f1");
  }
}
static Arrange_To_Call_Me vS15027C12(Test_S15027C12, "S15027C12", ABISELECT(48,40));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S15027C11  {
  ::S15027C12 s15027c11f0;
  char s15027c11f1[129];
};
//SIG(-1 S15027C11) C1{ FC2{ FC3{ FC4{ Fc[20]} Fc[16]} FC5{ Fl}} Fc[129]}



static void Test_S15027C11()
{
  {
    init_simple_test("S15027C11");
    S15027C11 lv;
    check2(sizeof(lv), ABISELECT(184,172), "sizeof(S15027C11)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S15027C11)");
    check_field_offset(lv, s15027c11f0, 0, "S15027C11.s15027c11f0");
    check_field_offset(lv, s15027c11f1, ABISELECT(48,40), "S15027C11.s15027c11f1");
  }
}
static Arrange_To_Call_Me vS15027C11(Test_S15027C11, "S15027C11", ABISELECT(184,172));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S15027C5  {
  ::S15028C6 s15027c5f0[8];
  long s15027c5f1;
  ::S15028C6 s15027c5f2;
  ::S15028C6 s15027c5f3;
  int s15027c5f4;
  ::S15027C11 s15027c5f5;
  int s15027c5f6;
};
//SIG(-1 S15027C5) C1{ FC2{ FC3{ FC4{ Fc[20]} Fc[16]} Fs Fc[2] FC5{ Fi Fc[128] FC6{ Fi[2] Fc[320] Fi}} FC7{ Fc[12]} FC7}[8] Fl FC2 FC2 Fi FC8{ FC9{ FC3 FC10{ Fl}} Fc[129]} Fi}



static void Test_S15027C5()
{
  {
    init_simple_test("S15027C5");
    S15027C5 lv;
    check2(sizeof(lv), ABISELECT(5488,5464), "sizeof(S15027C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S15027C5)");
    check_field_offset(lv, s15027c5f0, 0, "S15027C5.s15027c5f0");
    check_field_offset(lv, s15027c5f1, 4224, "S15027C5.s15027c5f1");
    check_field_offset(lv, s15027c5f2, ABISELECT(4232,4228), "S15027C5.s15027c5f2");
    check_field_offset(lv, s15027c5f3, ABISELECT(4760,4756), "S15027C5.s15027c5f3");
    check_field_offset(lv, s15027c5f4, ABISELECT(5288,5284), "S15027C5.s15027c5f4");
    check_field_offset(lv, s15027c5f5, ABISELECT(5296,5288), "S15027C5.s15027c5f5");
    check_field_offset(lv, s15027c5f6, ABISELECT(5480,5460), "S15027C5.s15027c5f6");
  }
}
static Arrange_To_Call_Me vS15027C5(Test_S15027C5, "S15027C5", ABISELECT(5488,5464));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S15027C16_nt  {
  long s15027c16f0[4];
};
//SIG(-1 S15027C16_nt) C1{ Fl[4]}



//skip512 S15027C16_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S15027C1  {
  char s15027c1f0;
  ::S15028C2 s15027c1f1;
  ::S15028C4_nt s15027c1f2;
  short s15027c1f3[2];
  ::S15027C5 s15027c1f4;
  ::S15028C14 s15027c1f5;
  ::S15027C16_nt s15027c1f6;
  int s15027c1f7;
  __tsi64 s15027c1f8[8];
  void  mf15027c1(); // _ZN8S15027C19mf15027c1Ev
};
//SIG(1 S15027C1) C1{ m Fc FC2{ Fi FC3{ Fc[12]}} FC4{ Fc[2]} Fs[2] FC5{ FC6{ FC7{ FC8{ Fc[20]} Fc[16]} Fs Fc[2] FC9{ Fi Fc[128] FC10{ Fi[2] Fc[320] Fi}} FC3 FC3}[8] Fl FC6 FC6 Fi FC11{ FC12{ FC7 FC13{ Fl}} Fc[129]} Fi} FC14{ FC15{ Fs Fc[2]}[8] Fc[4]} FC16{ Fl[4]} Fi FL[8]}


void  S15027C1 ::mf15027c1(){}

static void Test_S15027C1()
{
  {
    init_simple_test("S15027C1");
    S15027C1 lv;
    check2(sizeof(lv), ABISELECT(5664,5612), "sizeof(S15027C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S15027C1)");
    check_field_offset(lv, s15027c1f0, 0, "S15027C1.s15027c1f0");
    check_field_offset(lv, s15027c1f1, 4, "S15027C1.s15027c1f1");
    check_field_offset(lv, s15027c1f2, 20, "S15027C1.s15027c1f2");
    check_field_offset(lv, s15027c1f3, 22, "S15027C1.s15027c1f3");
    check_field_offset(lv, s15027c1f4, ABISELECT(32,28), "S15027C1.s15027c1f4");
    check_field_offset(lv, s15027c1f5, ABISELECT(5520,5492), "S15027C1.s15027c1f5");
    check_field_offset(lv, s15027c1f6, ABISELECT(5560,5528), "S15027C1.s15027c1f6");
    check_field_offset(lv, s15027c1f7, ABISELECT(5592,5544), "S15027C1.s15027c1f7");
    check_field_offset(lv, s15027c1f8, ABISELECT(5600,5548), "S15027C1.s15027c1f8");
  }
}
static Arrange_To_Call_Me vS15027C1(Test_S15027C1, "S15027C1", ABISELECT(5664,5612));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2945C2_nt  : S3625C32 {
  virtual  ~S2945C2_nt(); // _ZN10S2945C2_ntD1Ev
  virtual void  v8(); // _ZN10S2945C2_nt2v8Ev
  S2945C2_nt(); // tgen
};
//SIG(-1 S2945C2_nt) C1{ BC2{ m} vd v1}


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

//skip512 S2945C2_nt

#else // __cplusplus

extern void _ZN10S2945C2_ntC1Ev();
extern void _ZN10S2945C2_ntD1Ev();
Name_Map name_map_S2945C2_nt[] = {
  NSPAIR(_ZN10S2945C2_ntC1Ev),
  NSPAIR(_ZN10S2945C2_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3625C32;
extern VTBL_ENTRY _ZTI8S3625C32[];
static Base_Class bases_S2945C2_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3625C32,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI10S2945C2_nt[];
extern void _ZN10S2945C2_ntD1Ev();
extern void _ZN10S2945C2_ntD0Ev();
extern void _ZN10S2945C2_nt2v8Ev();
static  VTBL_ENTRY vtc_S2945C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S2945C2_nt[0]),
  (VTBL_ENTRY)&_ZN10S2945C2_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S2945C2_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S2945C2_nt2v8Ev,
};
extern VTBL_ENTRY _ZTI10S2945C2_nt[];
VTBL_ENTRY *P__ZTI10S2945C2_nt = _ZTI10S2945C2_nt; 
extern  VTBL_ENTRY _ZTV10S2945C2_nt[];
Class_Descriptor cd_S2945C2_nt = {  "S2945C2_nt", // class name
  bases_S2945C2_nt, 1,
  &(vtc_S2945C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI10S2945C2_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV10S2945C2_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  S2945C5_nt  : S2945C2_nt {
  virtual  ~S2945C5_nt(); // _ZN10S2945C5_ntD1Ev
  virtual void  v18(); // _ZN10S2945C5_nt3v18Ev
  virtual void  v19(); // _ZN10S2945C5_nt3v19Ev
  virtual void  v20(); // _ZN10S2945C5_nt3v20Ev
  virtual void  v21(); // _ZN10S2945C5_nt3v21Ev
  virtual void  v22(); // _ZN10S2945C5_nt3v22Ev
  virtual void  v23(); // _ZN10S2945C5_nt3v23Ev
  virtual void  v24(); // _ZN10S2945C5_nt3v24Ev
  virtual void  v25(); // _ZN10S2945C5_nt3v25Ev
  S2945C5_nt(); // tgen
};
//SIG(-1 S2945C5_nt) C1{ BC2{ BC3{ m} vd v9} vd v1 v2 v3 v4 v5 v6 v7 v8}


 S2945C5_nt ::~S2945C5_nt(){ note_dtor("S2945C5_nt", this);}
void  S2945C5_nt ::v18(){vfunc_called(this, "_ZN10S2945C5_nt3v18Ev");}
void  S2945C5_nt ::v19(){vfunc_called(this, "_ZN10S2945C5_nt3v19Ev");}
void  S2945C5_nt ::v20(){vfunc_called(this, "_ZN10S2945C5_nt3v20Ev");}
void  S2945C5_nt ::v21(){vfunc_called(this, "_ZN10S2945C5_nt3v21Ev");}
void  S2945C5_nt ::v22(){vfunc_called(this, "_ZN10S2945C5_nt3v22Ev");}
void  S2945C5_nt ::v23(){vfunc_called(this, "_ZN10S2945C5_nt3v23Ev");}
void  S2945C5_nt ::v24(){vfunc_called(this, "_ZN10S2945C5_nt3v24Ev");}
void  S2945C5_nt ::v25(){vfunc_called(this, "_ZN10S2945C5_nt3v25Ev");}
S2945C5_nt ::S2945C5_nt(){ note_ctor("S2945C5_nt", this);} // tgen

//skip512 S2945C5_nt

#else // __cplusplus

extern void _ZN10S2945C5_ntC1Ev();
extern void _ZN10S2945C5_ntD1Ev();
Name_Map name_map_S2945C5_nt[] = {
  NSPAIR(_ZN10S2945C5_ntC1Ev),
  NSPAIR(_ZN10S2945C5_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3625C32;
extern VTBL_ENTRY _ZTI8S3625C32[];
extern Class_Descriptor cd_S2945C2_nt;
extern VTBL_ENTRY _ZTI10S2945C2_nt[];
extern  VTBL_ENTRY _ZTV10S2945C2_nt[];
static Base_Class bases_S2945C5_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3625C32,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S2945C2_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 _ZTI10S2945C5_nt[];
extern void _ZN10S2945C5_ntD1Ev();
extern void _ZN10S2945C5_ntD0Ev();
extern void _ZN10S2945C2_nt2v8Ev();
extern void _ZN10S2945C5_nt3v18Ev();
extern void _ZN10S2945C5_nt3v19Ev();
extern void _ZN10S2945C5_nt3v20Ev();
extern void _ZN10S2945C5_nt3v21Ev();
extern void _ZN10S2945C5_nt3v22Ev();
extern void _ZN10S2945C5_nt3v23Ev();
extern void _ZN10S2945C5_nt3v24Ev();
extern void _ZN10S2945C5_nt3v25Ev();
static  VTBL_ENTRY vtc_S2945C5_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S2945C5_nt[0]),
  (VTBL_ENTRY)&_ZN10S2945C5_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S2945C5_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S2945C2_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S2945C5_nt3v18Ev,
  (VTBL_ENTRY)&_ZN10S2945C5_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S2945C5_nt3v20Ev,
  (VTBL_ENTRY)&_ZN10S2945C5_nt3v21Ev,
  (VTBL_ENTRY)&_ZN10S2945C5_nt3v22Ev,
  (VTBL_ENTRY)&_ZN10S2945C5_nt3v23Ev,
  (VTBL_ENTRY)&_ZN10S2945C5_nt3v24Ev,
  (VTBL_ENTRY)&_ZN10S2945C5_nt3v25Ev,
};
extern VTBL_ENTRY _ZTI10S2945C5_nt[];
VTBL_ENTRY *P__ZTI10S2945C5_nt = _ZTI10S2945C5_nt; 
extern  VTBL_ENTRY _ZTV10S2945C5_nt[];
Class_Descriptor cd_S2945C5_nt = {  "S2945C5_nt", // class name
  bases_S2945C5_nt, 2,
  &(vtc_S2945C5_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI10S2945C5_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV10S2945C5_nt),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  S2945C7_nt  {
  short s2945c7f0;
  int s2945c7f1;
  void *s2945c7f2;
  int s2945c7f3;
};
//SIG(1 S2945C7_nt) C1{ Fs Fi Fp Fi}



//skip512 S2945C7_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

union  S2945C6_nt  {
  short s2945c6f0[13];
  ::S2945C7_nt s2945c6f1;
};
//SIG(1 S2945C6_nt) U1{ Fs[13] FC2{ Fs Fi Fp Fi}}

#endif // __cplusplus
#ifdef __cplusplus

struct  S2945C4_nt  : S2945C5_nt {
  char s2945c4f0[2];
  ::S2945C6_nt s2945c4f1;
  virtual  ~S2945C4_nt(); // _ZN10S2945C4_ntD1Ev
  virtual void  v9(); // _ZN10S2945C4_nt2v9Ev
  virtual void  v10(); // _ZN10S2945C4_nt3v10Ev
  virtual void  v11(); // _ZN10S2945C4_nt3v11Ev
  virtual void  v12(); // _ZN10S2945C4_nt3v12Ev
  virtual void  v13(); // _ZN10S2945C4_nt3v13Ev
  virtual void  v14(); // _ZN10S2945C4_nt3v14Ev
  virtual void  v15(); // _ZN10S2945C4_nt3v15Ev
  virtual void  v16(); // _ZN10S2945C4_nt3v16Ev
  virtual void  v17(); // _ZN10S2945C4_nt3v17Ev
  S2945C4_nt(); // tgen
};
//SIG(-1 S2945C4_nt) C1{ BC2{ BC3{ BC4{ m} vd v10} vd v11 v12 v13 v14 v15 v16 v17 v18} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 Fc[2] FU5{ Fs[13] FC6{ Fs Fi Fp Fi}}}


 S2945C4_nt ::~S2945C4_nt(){ note_dtor("S2945C4_nt", this);}
void  S2945C4_nt ::v9(){vfunc_called(this, "_ZN10S2945C4_nt2v9Ev");}
void  S2945C4_nt ::v10(){vfunc_called(this, "_ZN10S2945C4_nt3v10Ev");}
void  S2945C4_nt ::v11(){vfunc_called(this, "_ZN10S2945C4_nt3v11Ev");}
void  S2945C4_nt ::v12(){vfunc_called(this, "_ZN10S2945C4_nt3v12Ev");}
void  S2945C4_nt ::v13(){vfunc_called(this, "_ZN10S2945C4_nt3v13Ev");}
void  S2945C4_nt ::v14(){vfunc_called(this, "_ZN10S2945C4_nt3v14Ev");}
void  S2945C4_nt ::v15(){vfunc_called(this, "_ZN10S2945C4_nt3v15Ev");}
void  S2945C4_nt ::v16(){vfunc_called(this, "_ZN10S2945C4_nt3v16Ev");}
void  S2945C4_nt ::v17(){vfunc_called(this, "_ZN10S2945C4_nt3v17Ev");}
S2945C4_nt ::S2945C4_nt(){ note_ctor("S2945C4_nt", this);} // tgen

//skip512 S2945C4_nt

#else // __cplusplus

extern void _ZN10S2945C4_ntC1Ev();
extern void _ZN10S2945C4_ntD1Ev();
Name_Map name_map_S2945C4_nt[] = {
  NSPAIR(_ZN10S2945C4_ntC1Ev),
  NSPAIR(_ZN10S2945C4_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3625C32;
extern VTBL_ENTRY _ZTI8S3625C32[];
extern Class_Descriptor cd_S2945C2_nt;
extern VTBL_ENTRY _ZTI10S2945C2_nt[];
extern  VTBL_ENTRY _ZTV10S2945C2_nt[];
extern Class_Descriptor cd_S2945C5_nt;
extern VTBL_ENTRY _ZTI10S2945C5_nt[];
extern  VTBL_ENTRY _ZTV10S2945C5_nt[];
static Base_Class bases_S2945C4_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3625C32,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S2945C2_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_S2945C5_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 _ZTI10S2945C4_nt[];
extern void _ZN10S2945C4_ntD1Ev();
extern void _ZN10S2945C4_ntD0Ev();
extern void _ZN10S2945C2_nt2v8Ev();
extern void _ZN10S2945C5_nt3v18Ev();
extern void _ZN10S2945C5_nt3v19Ev();
extern void _ZN10S2945C5_nt3v20Ev();
extern void _ZN10S2945C5_nt3v21Ev();
extern void _ZN10S2945C5_nt3v22Ev();
extern void _ZN10S2945C5_nt3v23Ev();
extern void _ZN10S2945C5_nt3v24Ev();
extern void _ZN10S2945C5_nt3v25Ev();
extern void _ZN10S2945C4_nt2v9Ev();
extern void _ZN10S2945C4_nt3v10Ev();
extern void _ZN10S2945C4_nt3v11Ev();
extern void _ZN10S2945C4_nt3v12Ev();
extern void _ZN10S2945C4_nt3v13Ev();
extern void _ZN10S2945C4_nt3v14Ev();
extern void _ZN10S2945C4_nt3v15Ev();
extern void _ZN10S2945C4_nt3v16Ev();
extern void _ZN10S2945C4_nt3v17Ev();
static  VTBL_ENTRY vtc_S2945C4_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S2945C4_nt[0]),
  (VTBL_ENTRY)&_ZN10S2945C4_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S2945C4_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S2945C2_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S2945C5_nt3v18Ev,
  (VTBL_ENTRY)&_ZN10S2945C5_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S2945C5_nt3v20Ev,
  (VTBL_ENTRY)&_ZN10S2945C5_nt3v21Ev,
  (VTBL_ENTRY)&_ZN10S2945C5_nt3v22Ev,
  (VTBL_ENTRY)&_ZN10S2945C5_nt3v23Ev,
  (VTBL_ENTRY)&_ZN10S2945C5_nt3v24Ev,
  (VTBL_ENTRY)&_ZN10S2945C5_nt3v25Ev,
  (VTBL_ENTRY)&_ZN10S2945C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S2945C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S2945C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S2945C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S2945C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S2945C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN10S2945C4_nt3v15Ev,
  (VTBL_ENTRY)&_ZN10S2945C4_nt3v16Ev,
  (VTBL_ENTRY)&_ZN10S2945C4_nt3v17Ev,
};
extern VTBL_ENTRY _ZTI10S2945C4_nt[];
VTBL_ENTRY *P__ZTI10S2945C4_nt = _ZTI10S2945C4_nt; 
extern  VTBL_ENTRY _ZTV10S2945C4_nt[];
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2945C1  : S2945C2_nt {
  ::S2945C4_nt s2945c1f0;
  int s2945c1f1;
  void *s2945c1f2;
  ::S2945C4_nt s2945c1f3;
  void *s2945c1f4;
  void *s2945c1f5;
  int s2945c1f6;
  int s2945c1f7;
  int s2945c1f8;
  int s2945c1f9;
  void *s2945c1f10;
  int s2945c1f11;
  void *s2945c1f12;
  void *s2945c1f13;
  int s2945c1f14;
  int s2945c1f15;
  int s2945c1f16;
  void *s2945c1f17;
  int s2945c1f18;
  void *s2945c1f19;
  virtual  ~S2945C1(); // _ZN7S2945C1D1Ev
  virtual void  v1(); // _ZN7S2945C12v1Ev
  virtual void  v2(); // _ZN7S2945C12v2Ev
  virtual void  v3(); // _ZN7S2945C12v3Ev
  virtual void  v4(); // _ZN7S2945C12v4Ev
  virtual void  v5(); // _ZN7S2945C12v5Ev
  virtual void  v6(); // _ZN7S2945C12v6Ev
  virtual void  v7(); // _ZN7S2945C12v7Ev
  S2945C1(); // tgen
};
//SIG(1 S2945C1) C1{ BC2{ BC3{ m} vd v8} vd v1 v2 v3 v4 v5 v6 v7 FC4{ BC5{ BC2 vd v18 v19 v20 v21 v22 v23 v24 v25} vd v9 v10 v11 v12 v13 v14 v15 v16 v17 Fc[2] FU6{ Fs[13] FC7{ Fs Fi Fp Fi}}} Fi Fp FC4 Fp Fp Fi Fi Fi Fi Fp Fi Fp Fp Fi Fi Fi Fp Fi Fp}


 S2945C1 ::~S2945C1(){ note_dtor("S2945C1", this);}
void  S2945C1 ::v1(){vfunc_called(this, "_ZN7S2945C12v1Ev");}
void  S2945C1 ::v2(){vfunc_called(this, "_ZN7S2945C12v2Ev");}
void  S2945C1 ::v3(){vfunc_called(this, "_ZN7S2945C12v3Ev");}
void  S2945C1 ::v4(){vfunc_called(this, "_ZN7S2945C12v4Ev");}
void  S2945C1 ::v5(){vfunc_called(this, "_ZN7S2945C12v5Ev");}
void  S2945C1 ::v6(){vfunc_called(this, "_ZN7S2945C12v6Ev");}
void  S2945C1 ::v7(){vfunc_called(this, "_ZN7S2945C12v7Ev");}
S2945C1 ::S2945C1(){ note_ctor("S2945C1", this);} // tgen

static void Test_S2945C1()
{
  extern Class_Descriptor cd_S2945C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(29,38)];
    init_test(&cd_S2945C1, buf);
    S2945C1 *dp, &lv = *(dp=new (buf) S2945C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(224,148), "sizeof(S2945C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2945C1)");
    check_base_class_offset(lv, (S3625C32*)(S2945C2_nt*), 0, "S2945C1");
    check_base_class_offset(lv, (S2945C2_nt*), 0, "S2945C1");
    check_field_offset(lv, s2945c1f0, ABISELECT(8,4), "S2945C1.s2945c1f0");
    check_field_offset(lv, s2945c1f1, ABISELECT(56,40), "S2945C1.s2945c1f1");
    check_field_offset(lv, s2945c1f2, ABISELECT(64,44), "S2945C1.s2945c1f2");
    check_field_offset(lv, s2945c1f3, ABISELECT(72,48), "S2945C1.s2945c1f3");
    check_field_offset(lv, s2945c1f4, ABISELECT(120,84), "S2945C1.s2945c1f4");
    check_field_offset(lv, s2945c1f5, ABISELECT(128,88), "S2945C1.s2945c1f5");
    check_field_offset(lv, s2945c1f6, ABISELECT(136,92), "S2945C1.s2945c1f6");
    check_field_offset(lv, s2945c1f7, ABISELECT(140,96), "S2945C1.s2945c1f7");
    check_field_offset(lv, s2945c1f8, ABISELECT(144,100), "S2945C1.s2945c1f8");
    check_field_offset(lv, s2945c1f9, ABISELECT(148,104), "S2945C1.s2945c1f9");
    check_field_offset(lv, s2945c1f10, ABISELECT(152,108), "S2945C1.s2945c1f10");
    check_field_offset(lv, s2945c1f11, ABISELECT(160,112), "S2945C1.s2945c1f11");
    check_field_offset(lv, s2945c1f12, ABISELECT(168,116), "S2945C1.s2945c1f12");
    check_field_offset(lv, s2945c1f13, ABISELECT(176,120), "S2945C1.s2945c1f13");
    check_field_offset(lv, s2945c1f14, ABISELECT(184,124), "S2945C1.s2945c1f14");
    check_field_offset(lv, s2945c1f15, ABISELECT(188,128), "S2945C1.s2945c1f15");
    check_field_offset(lv, s2945c1f16, ABISELECT(192,132), "S2945C1.s2945c1f16");
    check_field_offset(lv, s2945c1f17, ABISELECT(200,136), "S2945C1.s2945c1f17");
    check_field_offset(lv, s2945c1f18, ABISELECT(208,140), "S2945C1.s2945c1f18");
    check_field_offset(lv, s2945c1f19, ABISELECT(216,144), "S2945C1.s2945c1f19");
    test_class_info(&lv, &cd_S2945C1);
    dp->~S2945C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2945C1(Test_S2945C1, "S2945C1", ABISELECT(224,148));

#else // __cplusplus

extern void _ZN7S2945C1C1Ev();
extern void _ZN7S2945C1D1Ev();
Name_Map name_map_S2945C1[] = {
  NSPAIR(_ZN7S2945C1C1Ev),
  NSPAIR(_ZN7S2945C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3625C32;
extern VTBL_ENTRY _ZTI8S3625C32[];
extern Class_Descriptor cd_S2945C2_nt;
extern VTBL_ENTRY _ZTI10S2945C2_nt[];
extern  VTBL_ENTRY _ZTV10S2945C2_nt[];
static Base_Class bases_S2945C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3625C32,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S2945C2_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 _ZTI7S2945C1[];
extern void _ZN7S2945C1D1Ev();
extern void _ZN7S2945C1D0Ev();
extern void _ZN10S2945C2_nt2v8Ev();
extern void _ZN7S2945C12v1Ev();
extern void _ZN7S2945C12v2Ev();
extern void _ZN7S2945C12v3Ev();
extern void _ZN7S2945C12v4Ev();
extern void _ZN7S2945C12v5Ev();
extern void _ZN7S2945C12v6Ev();
extern void _ZN7S2945C12v7Ev();
static  VTBL_ENTRY vtc_S2945C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2945C1[0]),
  (VTBL_ENTRY)&_ZN7S2945C1D1Ev,
  (VTBL_ENTRY)&_ZN7S2945C1D0Ev,
  (VTBL_ENTRY)&_ZN10S2945C2_nt2v8Ev,
  (VTBL_ENTRY)&_ZN7S2945C12v1Ev,
  (VTBL_ENTRY)&_ZN7S2945C12v2Ev,
  (VTBL_ENTRY)&_ZN7S2945C12v3Ev,
  (VTBL_ENTRY)&_ZN7S2945C12v4Ev,
  (VTBL_ENTRY)&_ZN7S2945C12v5Ev,
  (VTBL_ENTRY)&_ZN7S2945C12v6Ev,
  (VTBL_ENTRY)&_ZN7S2945C12v7Ev,
};
extern VTBL_ENTRY _ZTI7S2945C1[];
extern  VTBL_ENTRY _ZTV7S2945C1[];
Class_Descriptor cd_S2945C1 = {  "S2945C1", // class name
  bases_S2945C1, 2,
  &(vtc_S2945C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(224,148), // object size
  NSPAIRA(_ZTI7S2945C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2945C1),12, //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  S17668C3_nt  {
  void *s17668c3f0[4];
};
//SIG(-1 S17668C3_nt) C1{ Fp[4]}



//skip512 S17668C3_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S17668C9_nt  {
  char s17668c9f0;
  char s17668c9f1[15];
  void  mf17668c9(); // _ZN11S17668C9_nt9mf17668c9Ev
};
//SIG(-1 S17668C9_nt) C1{ m Fc[16]}


void  S17668C9_nt ::mf17668c9(){}

//skip512 S17668C9_nt

#else // __cplusplus

Class_Descriptor cd_S17668C9_nt = {  "S17668C9_nt", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  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
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S17668C8_nt  {
  ::S17668C9_nt s17668c8f0;
  ::S17668C9_nt s17668c8f1;
  ::S17668C9_nt s17668c8f2;
  ::S17668C9_nt s17668c8f3;
  void  mf17668c8(); // _ZN11S17668C8_nt9mf17668c8Ev
};
//SIG(-1 S17668C8_nt) C1{ m FC2{ m Fc[16]} FC2 FC2 FC2}


void  S17668C8_nt ::mf17668c8(){}

//skip512 S17668C8_nt

#else // __cplusplus

Class_Descriptor cd_S17668C8_nt = {  "S17668C8_nt", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  64, // 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  S17668C7_nt  : S17668C8_nt {
};
//SIG(-1 S17668C7_nt) C1{ BC2{ m FC3{ m Fc[16]} FC3 FC3 FC3}}



//skip512 S17668C7_nt

#else // __cplusplus

extern Class_Descriptor cd_S17668C8_nt;
static Base_Class bases_S17668C7_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S17668C8_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  S17668C6_nt  {
  void *s17668c6f0[2];
  ::S17668C7_nt s17668c6f1;
  int s17668c6f2[2];
  virtual  ~S17668C6_nt(); // _ZN11S17668C6_ntD1Ev
  virtual void  v3(); // _ZN11S17668C6_nt2v3Ev
  virtual void  v4(); // _ZN11S17668C6_nt2v4Ev
  virtual void  v5(); // _ZN11S17668C6_nt2v5Ev
  S17668C6_nt(); // tgen
};
//SIG(-1 S17668C6_nt) C1{ vd v1 v2 v3 Fp[2] FC2{ BC3{ m FC4{ m Fc[16]} FC4 FC4 FC4}} Fi[2]}


 S17668C6_nt ::~S17668C6_nt(){ note_dtor("S17668C6_nt", this);}
void  S17668C6_nt ::v3(){vfunc_called(this, "_ZN11S17668C6_nt2v3Ev");}
void  S17668C6_nt ::v4(){vfunc_called(this, "_ZN11S17668C6_nt2v4Ev");}
void  S17668C6_nt ::v5(){vfunc_called(this, "_ZN11S17668C6_nt2v5Ev");}
S17668C6_nt ::S17668C6_nt(){ note_ctor("S17668C6_nt", this);} // tgen

//skip512 S17668C6_nt

#else // __cplusplus

extern void _ZN11S17668C6_ntC1Ev();
extern void _ZN11S17668C6_ntD1Ev();
Name_Map name_map_S17668C6_nt[] = {
  NSPAIR(_ZN11S17668C6_ntC1Ev),
  NSPAIR(_ZN11S17668C6_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI11S17668C6_nt[];
extern void _ZN11S17668C6_ntD1Ev();
extern void _ZN11S17668C6_ntD0Ev();
extern void _ZN11S17668C6_nt2v3Ev();
extern void _ZN11S17668C6_nt2v4Ev();
extern void _ZN11S17668C6_nt2v5Ev();
static  VTBL_ENTRY vtc_S17668C6_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI11S17668C6_nt[0]),
  (VTBL_ENTRY)&_ZN11S17668C6_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S17668C6_ntD0Ev,
  (VTBL_ENTRY)&_ZN11S17668C6_nt2v3Ev,
  (VTBL_ENTRY)&_ZN11S17668C6_nt2v4Ev,
  (VTBL_ENTRY)&_ZN11S17668C6_nt2v5Ev,
};
extern VTBL_ENTRY _ZTI11S17668C6_nt[];
VTBL_ENTRY *P__ZTI11S17668C6_nt = _ZTI11S17668C6_nt; 
extern  VTBL_ENTRY _ZTV11S17668C6_nt[];
Class_Descriptor cd_S17668C6_nt = {  "S17668C6_nt", // class name
  0,0,//no base classes
  &(vtc_S17668C6_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,84), // object size
  NSPAIRA(_ZTI11S17668C6_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV11S17668C6_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  S17668C5  : S17668C6_nt {
  void *s17668c5f0;
  virtual  ~S17668C5(); // _ZN8S17668C5D1Ev
  virtual void  v6(); // _ZN8S17668C52v6Ev
  virtual void  v7(); // _ZN8S17668C52v7Ev
  S17668C5(); // tgen
};
//SIG(-1 S17668C5) C1{ BC2{ vd v3 v4 v5 Fp[2] FC3{ BC4{ m FC5{ m Fc[16]} FC5 FC5 FC5}} Fi[2]} vd v1 v2 Fp}


 S17668C5 ::~S17668C5(){ note_dtor("S17668C5", this);}
void  S17668C5 ::v6(){vfunc_called(this, "_ZN8S17668C52v6Ev");}
void  S17668C5 ::v7(){vfunc_called(this, "_ZN8S17668C52v7Ev");}
S17668C5 ::S17668C5(){ note_ctor("S17668C5", this);} // tgen

static void Test_S17668C5()
{
  extern Class_Descriptor cd_S17668C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(14,23)];
    init_test(&cd_S17668C5, buf);
    S17668C5 *dp, &lv = *(dp=new (buf) S17668C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(104,88), "sizeof(S17668C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S17668C5)");
    check_base_class_offset(lv, (S17668C6_nt*), 0, "S17668C5");
    check_field_offset(lv, s17668c5f0, ABISELECT(96,84), "S17668C5.s17668c5f0");
    test_class_info(&lv, &cd_S17668C5);
    dp->~S17668C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS17668C5(Test_S17668C5, "S17668C5", ABISELECT(104,88));

#else // __cplusplus

extern void _ZN8S17668C5C1Ev();
extern void _ZN8S17668C5D1Ev();
Name_Map name_map_S17668C5[] = {
  NSPAIR(_ZN8S17668C5C1Ev),
  NSPAIR(_ZN8S17668C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S17668C6_nt;
extern VTBL_ENTRY _ZTI11S17668C6_nt[];
extern  VTBL_ENTRY _ZTV11S17668C6_nt[];
static Base_Class bases_S17668C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S17668C6_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 _ZTI8S17668C5[];
extern void _ZN8S17668C5D1Ev();
extern void _ZN8S17668C5D0Ev();
extern void _ZN11S17668C6_nt2v3Ev();
extern void _ZN11S17668C6_nt2v4Ev();
extern void _ZN11S17668C6_nt2v5Ev();
extern void _ZN8S17668C52v6Ev();
extern void _ZN8S17668C52v7Ev();
static  VTBL_ENTRY vtc_S17668C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S17668C5[0]),
  (VTBL_ENTRY)&_ZN8S17668C5D1Ev,
  (VTBL_ENTRY)&_ZN8S17668C5D0Ev,
  (VTBL_ENTRY)&_ZN11S17668C6_nt2v3Ev,
  (VTBL_ENTRY)&_ZN11S17668C6_nt2v4Ev,
  (VTBL_ENTRY)&_ZN11S17668C6_nt2v5Ev,
  (VTBL_ENTRY)&_ZN8S17668C52v6Ev,
  (VTBL_ENTRY)&_ZN8S17668C52v7Ev,
};
extern VTBL_ENTRY _ZTI8S17668C5[];
extern  VTBL_ENTRY _ZTV8S17668C5[];
Class_Descriptor cd_S17668C5 = {  "S17668C5", // class name
  bases_S17668C5, 1,
  &(vtc_S17668C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(104,88), // object size
  NSPAIRA(_ZTI8S17668C5),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S17668C5),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  S17668C12_nt  {
};
//SIG(-1 S17668C12_nt) C1{}



//skip512 S17668C12_nt

#else // __cplusplus

Class_Descriptor cd_S17668C12_nt = {  "S17668C12_nt", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  1, // 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  S17668C14  {
};
//SIG(-1 S17668C14) C1{}



static void Test_S17668C14()
{
  {
    init_simple_test("S17668C14");
    S17668C14 lv;
    check2(sizeof(lv), 1, "sizeof(S17668C14)");
    check2(__alignof__(lv), 1, "__alignof__(S17668C14)");
  }
}
static Arrange_To_Call_Me vS17668C14(Test_S17668C14, "S17668C14", 1);

#else // __cplusplus

Class_Descriptor cd_S17668C14 = {  "S17668C14", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  1, // 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  S17668C13_nt  : S17668C14 {
};
//SIG(-1 S17668C13_nt) C1{ BC2{}}



//skip512 S17668C13_nt

#else // __cplusplus

extern Class_Descriptor cd_S17668C14;
static Base_Class bases_S17668C13_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S17668C14,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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  S17668C11_nt  : S17668C12_nt {
  ::S17668C13_nt s17668c11f0;
};
//SIG(-1 S17668C11_nt) C1{ BC2{} FC3{ BC4{}}}



//skip512 S17668C11_nt

#else // __cplusplus

extern Class_Descriptor cd_S17668C12_nt;
static Base_Class bases_S17668C11_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S17668C12_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_S17668C11_nt = {  "S17668C11_nt", // class name
  bases_S17668C11_nt, 1,
  0, // no vftv
  0, //no vtt
  1, // 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  S17668C10_nt  : S17668C11_nt {
  void *s17668c10f0[3];
};
//SIG(-1 S17668C10_nt) C1{ BC2{ BC3{} FC4{ BC5{}}} Fp[3]}



//skip512 S17668C10_nt

#else // __cplusplus

extern Class_Descriptor cd_S17668C12_nt;
extern Class_Descriptor cd_S17668C11_nt;
static Base_Class bases_S17668C10_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S17668C12_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_S17668C11_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  S17668C4  : S17668C5 {
  ::S17668C10_nt s17668c4f0;
  virtual void  v1(); // _ZN8S17668C42v1Ev
  virtual void  v2(); // _ZN8S17668C42v2Ev
  ~S17668C4(); // tgen
  S17668C4(); // tgen
};
//SIG(-1 S17668C4) C1{ BC2{ BC3{ vd v3 v4 v5 Fp[2] FC4{ BC5{ m FC6{ m Fc[16]} FC6 FC6 FC6}} Fi[2]} vd v6 v7 Fp} v1 v2 FC7{ BC8{ BC9{} FC10{ BC11{}}} Fp[3]}}


void  S17668C4 ::v1(){vfunc_called(this, "_ZN8S17668C42v1Ev");}
void  S17668C4 ::v2(){vfunc_called(this, "_ZN8S17668C42v2Ev");}
S17668C4 ::~S17668C4(){ note_dtor("S17668C4", this);} // tgen
S17668C4 ::S17668C4(){ note_ctor("S17668C4", this);} // tgen

static void Test_S17668C4()
{
  extern Class_Descriptor cd_S17668C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(18,27)];
    init_test(&cd_S17668C4, buf);
    S17668C4 *dp, &lv = *(dp=new (buf) S17668C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(136,104), "sizeof(S17668C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S17668C4)");
    check_base_class_offset(lv, (S17668C6_nt*)(S17668C5*), 0, "S17668C4");
    check_base_class_offset(lv, (S17668C5*), 0, "S17668C4");
    check_field_offset(lv, s17668c4f0, ABISELECT(104,88), "S17668C4.s17668c4f0");
    test_class_info(&lv, &cd_S17668C4);
    dp->~S17668C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS17668C4(Test_S17668C4, "S17668C4", ABISELECT(136,104));

#else // __cplusplus

extern void _ZN8S17668C4C1Ev();
extern void _ZN8S17668C4D1Ev();
Name_Map name_map_S17668C4[] = {
  NSPAIR(_ZN8S17668C4C1Ev),
  NSPAIR(_ZN8S17668C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S17668C6_nt;
extern VTBL_ENTRY _ZTI11S17668C6_nt[];
extern  VTBL_ENTRY _ZTV11S17668C6_nt[];
extern Class_Descriptor cd_S17668C5;
extern VTBL_ENTRY _ZTI8S17668C5[];
extern  VTBL_ENTRY _ZTV8S17668C5[];
static Base_Class bases_S17668C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S17668C6_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_S17668C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI8S17668C4[];
extern void _ZN8S17668C4D1Ev();
extern void _ZN8S17668C4D0Ev();
extern void _ZN11S17668C6_nt2v3Ev();
extern void _ZN11S17668C6_nt2v4Ev();
extern void _ZN11S17668C6_nt2v5Ev();
extern void _ZN8S17668C52v6Ev();
extern void _ZN8S17668C52v7Ev();
extern void _ZN8S17668C42v1Ev();
extern void _ZN8S17668C42v2Ev();
static  VTBL_ENTRY vtc_S17668C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S17668C4[0]),
  (VTBL_ENTRY)&_ZN8S17668C4D1Ev,
  (VTBL_ENTRY)&_ZN8S17668C4D0Ev,
  (VTBL_ENTRY)&_ZN11S17668C6_nt2v3Ev,
  (VTBL_ENTRY)&_ZN11S17668C6_nt2v4Ev,
  (VTBL_ENTRY)&_ZN11S17668C6_nt2v5Ev,
  (VTBL_ENTRY)&_ZN8S17668C52v6Ev,
  (VTBL_ENTRY)&_ZN8S17668C52v7Ev,
  (VTBL_ENTRY)&_ZN8S17668C42v1Ev,
  (VTBL_ENTRY)&_ZN8S17668C42v2Ev,
};
extern VTBL_ENTRY _ZTI8S17668C4[];
extern  VTBL_ENTRY _ZTV8S17668C4[];
Class_Descriptor cd_S17668C4 = {  "S17668C4", // class name
  bases_S17668C4, 2,
  &(vtc_S17668C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(136,104), // object size
  NSPAIRA(_ZTI8S17668C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S17668C4),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  S17668C15  : S17668C5 {
  virtual void  v8(); // _ZN9S17668C152v8Ev
  ~S17668C15(); // tgen
  S17668C15(); // tgen
};
//SIG(-1 S17668C15) C1{ BC2{ BC3{ vd v2 v3 v4 Fp[2] FC4{ BC5{ m FC6{ m Fc[16]} FC6 FC6 FC6}} Fi[2]} vd v5 v6 Fp} v1}


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

static void Test_S17668C15()
{
  extern Class_Descriptor cd_S17668C15;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(14,23)];
    init_test(&cd_S17668C15, buf);
    S17668C15 *dp, &lv = *(dp=new (buf) S17668C15());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(104,88), "sizeof(S17668C15)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S17668C15)");
    check_base_class_offset(lv, (S17668C6_nt*)(S17668C5*), 0, "S17668C15");
    check_base_class_offset(lv, (S17668C5*), 0, "S17668C15");
    test_class_info(&lv, &cd_S17668C15);
    dp->~S17668C15();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS17668C15(Test_S17668C15, "S17668C15", ABISELECT(104,88));

#else // __cplusplus

extern void _ZN9S17668C15C1Ev();
extern void _ZN9S17668C15D1Ev();
Name_Map name_map_S17668C15[] = {
  NSPAIR(_ZN9S17668C15C1Ev),
  NSPAIR(_ZN9S17668C15D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S17668C6_nt;
extern VTBL_ENTRY _ZTI11S17668C6_nt[];
extern  VTBL_ENTRY _ZTV11S17668C6_nt[];
extern Class_Descriptor cd_S17668C5;
extern VTBL_ENTRY _ZTI8S17668C5[];
extern  VTBL_ENTRY _ZTV8S17668C5[];
static Base_Class bases_S17668C15[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S17668C6_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_S17668C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI9S17668C15[];
extern void _ZN9S17668C15D1Ev();
extern void _ZN9S17668C15D0Ev();
extern void _ZN11S17668C6_nt2v3Ev();
extern void _ZN11S17668C6_nt2v4Ev();
extern void _ZN11S17668C6_nt2v5Ev();
extern void _ZN8S17668C52v6Ev();
extern void _ZN8S17668C52v7Ev();
extern void _ZN9S17668C152v8Ev();
static  VTBL_ENTRY vtc_S17668C15[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S17668C15[0]),
  (VTBL_ENTRY)&_ZN9S17668C15D1Ev,
  (VTBL_ENTRY)&_ZN9S17668C15D0Ev,
  (VTBL_ENTRY)&_ZN11S17668C6_nt2v3Ev,
  (VTBL_ENTRY)&_ZN11S17668C6_nt2v4Ev,
  (VTBL_ENTRY)&_ZN11S17668C6_nt2v5Ev,
  (VTBL_ENTRY)&_ZN8S17668C52v6Ev,
  (VTBL_ENTRY)&_ZN8S17668C52v7Ev,
  (VTBL_ENTRY)&_ZN9S17668C152v8Ev,
};
extern VTBL_ENTRY _ZTI9S17668C15[];
extern  VTBL_ENTRY _ZTV9S17668C15[];
Class_Descriptor cd_S17668C15 = {  "S17668C15", // class name
  bases_S17668C15, 2,
  &(vtc_S17668C15[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(104,88), // object size
  NSPAIRA(_ZTI9S17668C15),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV9S17668C15),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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S17668C17  : S17668C5 {
  virtual void  v10(); // _ZN9S17668C173v10Ev
  ~S17668C17(); // tgen
  S17668C17(); // tgen
};
//SIG(-1 S17668C17) C1{ BC2{ BC3{ vd v2 v3 v4 Fp[2] FC4{ BC5{ m FC6{ m Fc[16]} FC6 FC6 FC6}} Fi[2]} vd v5 v6 Fp} v1}


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

static void Test_S17668C17()
{
  extern Class_Descriptor cd_S17668C17;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(14,23)];
    init_test(&cd_S17668C17, buf);
    S17668C17 *dp, &lv = *(dp=new (buf) S17668C17());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(104,88), "sizeof(S17668C17)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S17668C17)");
    check_base_class_offset(lv, (S17668C6_nt*)(S17668C5*), 0, "S17668C17");
    check_base_class_offset(lv, (S17668C5*), 0, "S17668C17");
    test_class_info(&lv, &cd_S17668C17);
    dp->~S17668C17();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS17668C17(Test_S17668C17, "S17668C17", ABISELECT(104,88));

#else // __cplusplus

extern void _ZN9S17668C17C1Ev();
extern void _ZN9S17668C17D1Ev();
Name_Map name_map_S17668C17[] = {
  NSPAIR(_ZN9S17668C17C1Ev),
  NSPAIR(_ZN9S17668C17D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S17668C6_nt;
extern VTBL_ENTRY _ZTI11S17668C6_nt[];
extern  VTBL_ENTRY _ZTV11S17668C6_nt[];
extern Class_Descriptor cd_S17668C5;
extern VTBL_ENTRY _ZTI8S17668C5[];
extern  VTBL_ENTRY _ZTV8S17668C5[];
static Base_Class bases_S17668C17[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S17668C6_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_S17668C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI9S17668C17[];
extern void _ZN9S17668C17D1Ev();
extern void _ZN9S17668C17D0Ev();
extern void _ZN11S17668C6_nt2v3Ev();
extern void _ZN11S17668C6_nt2v4Ev();
extern void _ZN11S17668C6_nt2v5Ev();
extern void _ZN8S17668C52v6Ev();
extern void _ZN8S17668C52v7Ev();
extern void _ZN9S17668C173v10Ev();
static  VTBL_ENTRY vtc_S17668C17[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S17668C17[0]),
  (VTBL_ENTRY)&_ZN9S17668C17D1Ev,
  (VTBL_ENTRY)&_ZN9S17668C17D0Ev,
  (VTBL_ENTRY)&_ZN11S17668C6_nt2v3Ev,
  (VTBL_ENTRY)&_ZN11S17668C6_nt2v4Ev,
  (VTBL_ENTRY)&_ZN11S17668C6_nt2v5Ev,
  (VTBL_ENTRY)&_ZN8S17668C52v6Ev,
  (VTBL_ENTRY)&_ZN8S17668C52v7Ev,
  (VTBL_ENTRY)&_ZN9S17668C173v10Ev,
};
extern VTBL_ENTRY _ZTI9S17668C17[];
extern  VTBL_ENTRY _ZTV9S17668C17[];
Class_Descriptor cd_S17668C17 = {  "S17668C17", // class name
  bases_S17668C17, 2,
  &(vtc_S17668C17[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(104,88), // object size
  NSPAIRA(_ZTI9S17668C17),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV9S17668C17),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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S17668C1  {
  void *s17668c1f0;
  ::S3625C33_nt s17668c1f1;
  void *s17668c1f2[5];
  ::S17668C3_nt s17668c1f3;
  ::S17668C4 s17668c1f4;
  ::S17668C15 s17668c1f5;
  ::S17668C15 s17668c1f6;
  ::S17668C17 s17668c1f7;
  ::S17668C17 s17668c1f8;
  void  mf17668c1(); // _ZN8S17668C19mf17668c1Ev
};
//SIG(1 S17668C1) C1{ m Fp FC2{ m Fp} Fp[5] FC3{ Fp[4]} FC4{ BC5{ BC6{ vd v3 v4 v5 Fp[2] FC7{ BC8{ m FC9{ m Fc[16]} FC9 FC9 FC9}} Fi[2]} vd v6 v7 Fp} v1 v2 FC10{ BC11{ BC12{} FC13{ BC14{}}} Fp[3]}} FC15{ BC5 v8} FC15 FC16{ BC5 v9} FC16}


void  S17668C1 ::mf17668c1(){}

static void Test_S17668C1()
{
  {
    init_simple_test("S17668C1");
    S17668C1 lv;
    check2(sizeof(lv), ABISELECT(640,500), "sizeof(S17668C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S17668C1)");
    check_field_offset(lv, s17668c1f0, 0, "S17668C1.s17668c1f0");
    check_field_offset(lv, s17668c1f1, ABISELECT(8,4), "S17668C1.s17668c1f1");
    check_field_offset(lv, s17668c1f2, ABISELECT(16,8), "S17668C1.s17668c1f2");
    check_field_offset(lv, s17668c1f3, ABISELECT(56,28), "S17668C1.s17668c1f3");
    check_field_offset(lv, s17668c1f4, ABISELECT(88,44), "S17668C1.s17668c1f4");
    check_field_offset(lv, s17668c1f5, ABISELECT(224,148), "S17668C1.s17668c1f5");
    check_field_offset(lv, s17668c1f6, ABISELECT(328,236), "S17668C1.s17668c1f6");
    check_field_offset(lv, s17668c1f7, ABISELECT(432,324), "S17668C1.s17668c1f7");
    check_field_offset(lv, s17668c1f8, ABISELECT(536,412), "S17668C1.s17668c1f8");
  }
}
static Arrange_To_Call_Me vS17668C1(Test_S17668C1, "S17668C1", ABISELECT(640,500));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3783C3_nt  {
  int s3783c3f0;
  void  mf3783c3(); // _ZN10S3783C3_nt8mf3783c3Ev
  virtual  ~S3783C3_nt(); // _ZN10S3783C3_ntD1Ev
  S3783C3_nt(); // tgen
};
//SIG(-1 S3783C3_nt) C1{ vd m Fi}


void  S3783C3_nt ::mf3783c3(){}
 S3783C3_nt ::~S3783C3_nt(){ note_dtor("S3783C3_nt", this);}
S3783C3_nt ::S3783C3_nt(){ note_ctor("S3783C3_nt", this);} // tgen

//skip512 S3783C3_nt

#else // __cplusplus

extern void _ZN10S3783C3_ntC1Ev();
extern void _ZN10S3783C3_ntD1Ev();
Name_Map name_map_S3783C3_nt[] = {
  NSPAIR(_ZN10S3783C3_ntC1Ev),
  NSPAIR(_ZN10S3783C3_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S3783C3_nt[];
extern void _ZN10S3783C3_ntD1Ev();
extern void _ZN10S3783C3_ntD0Ev();
static  VTBL_ENTRY vtc_S3783C3_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S3783C3_nt[0]),
  (VTBL_ENTRY)&_ZN10S3783C3_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S3783C3_ntD0Ev,
};
extern VTBL_ENTRY _ZTI10S3783C3_nt[];
VTBL_ENTRY *P__ZTI10S3783C3_nt = _ZTI10S3783C3_nt; 
extern  VTBL_ENTRY _ZTV10S3783C3_nt[];
Class_Descriptor cd_S3783C3_nt = {  "S3783C3_nt", // class name
  0,0,//no base classes
  &(vtc_S3783C3_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI10S3783C3_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S3783C3_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  S3783C2_nt  : S3783C3_nt {
  int s3783c2f0;
  virtual  ~S3783C2_nt(); // _ZN10S3783C2_ntD1Ev
  S3783C2_nt(); // tgen
};
//SIG(-1 S3783C2_nt) C1{ BC2{ vd m Fi} vd Fi}


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

//skip512 S3783C2_nt

#else // __cplusplus

extern void _ZN10S3783C2_ntC1Ev();
extern void _ZN10S3783C2_ntD1Ev();
Name_Map name_map_S3783C2_nt[] = {
  NSPAIR(_ZN10S3783C2_ntC1Ev),
  NSPAIR(_ZN10S3783C2_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3783C3_nt;
extern VTBL_ENTRY _ZTI10S3783C3_nt[];
extern  VTBL_ENTRY _ZTV10S3783C3_nt[];
static Base_Class bases_S3783C2_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3783C3_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 _ZTI10S3783C2_nt[];
extern void _ZN10S3783C2_ntD1Ev();
extern void _ZN10S3783C2_ntD0Ev();
static  VTBL_ENTRY vtc_S3783C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S3783C2_nt[0]),
  (VTBL_ENTRY)&_ZN10S3783C2_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S3783C2_ntD0Ev,
};
extern VTBL_ENTRY _ZTI10S3783C2_nt[];
VTBL_ENTRY *P__ZTI10S3783C2_nt = _ZTI10S3783C2_nt; 
extern  VTBL_ENTRY _ZTV10S3783C2_nt[];
Class_Descriptor cd_S3783C2_nt = {  "S3783C2_nt", // class name
  bases_S3783C2_nt, 1,
  &(vtc_S3783C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI10S3783C2_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV10S3783C2_nt),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  S3783C5_nt  : S3625C4_nt {
};
//SIG(-1 S3783C5_nt) C1{ BC2{ m Fp Fi FC3{ m} FC4{ m}}}



//skip512 S3783C5_nt

#else // __cplusplus

extern Class_Descriptor cd_S3625C4_nt;
static Base_Class bases_S3783C5_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3625C4_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  S3783C14_nt  {
  void *s3783c14f0;
  int s3783c14f1;
  ::S3625C32 s3783c14f2;
  ::S3625C19 s3783c14f3;
  void  mf3783c14(); // _ZN11S3783C14_nt9mf3783c14Ev
};
//SIG(-1 S3783C14_nt) C1{ m Fp Fi FC2{ m} FC3{ m}}


void  S3783C14_nt ::mf3783c14(){}

//skip512 S3783C14_nt

#else // __cplusplus

Class_Descriptor cd_S3783C14_nt = {  "S3783C14_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  S3783C13  : S3783C14_nt {
};
//SIG(-1 S3783C13) C1{ BC2{ m Fp Fi FC3{ m} FC4{ m}}}



static void Test_S3783C13()
{
  extern Class_Descriptor cd_S3783C13;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S3783C13, buf);
    S3783C13 &lv = *(new (buf) S3783C13());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S3783C13)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3783C13)");
    check_base_class_offset(lv, (S3783C14_nt*), 0, "S3783C13");
    test_class_info(&lv, &cd_S3783C13);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3783C13(Test_S3783C13, "S3783C13", ABISELECT(16,12));

#else // __cplusplus

extern Class_Descriptor cd_S3783C14_nt;
static Base_Class bases_S3783C13[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3783C14_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_S3783C13 = {  "S3783C13", // class name
  bases_S3783C13, 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  S3783C19_nt  {
  __tsi64 s3783c19f0[4];
  void  mf3783c19(); // _ZN11S3783C19_nt9mf3783c19Ev
};
//SIG(-1 S3783C19_nt) C1{ m FL[4]}


void  S3783C19_nt ::mf3783c19(){}

//skip512 S3783C19_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3783C1  : S3783C2_nt {
  ::S3625C33_nt s3783c1f0;
  int s3783c1f1;
  ::S3783C5_nt s3783c1f2;
  ::S3783C5_nt s3783c1f3;
  ::S3783C13 s3783c1f4;
  int s3783c1f5;
  ::S3625C18_nt s3783c1f6;
  ::S3783C19_nt s3783c1f7;
  char s3783c1f8;
  ::S3625C18_nt s3783c1f9;
  ::S3625C31 s3783c1f10;
  ::S3625C31 s3783c1f11;
  virtual  ~S3783C1(); // _ZN7S3783C1D1Ev
  S3783C1(); // tgen
};
//SIG(1 S3783C1) C1{ BC2{ BC3{ vd m Fi} vd Fi} vd FC4{ m Fp} Fi FC5{ BC6{ m Fp Fi FC7{ m} FC8{ m}}} FC5 FC9{ BC10{ m Fp Fi FC11{ m} FC12{ m}}} Fi FC13{ m Fp Fi FC12} FC14{ m FL[4]} Fc FC13 FC15{ m Fp Fi[2] FC11} FC15}


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

static void Test_S3783C1()
{
  extern Class_Descriptor cd_S3783C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(27,39)];
    init_test(&cd_S3783C1, buf);
    S3783C1 *dp, &lv = *(dp=new (buf) S3783C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(208,152), "sizeof(S3783C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3783C1)");
    check_base_class_offset(lv, (S3783C3_nt*)(S3783C2_nt*), 0, "S3783C1");
    check_base_class_offset(lv, (S3783C2_nt*), 0, "S3783C1");
    check_field_offset(lv, s3783c1f0, ABISELECT(16,12), "S3783C1.s3783c1f0");
    check_field_offset(lv, s3783c1f1, ABISELECT(24,16), "S3783C1.s3783c1f1");
    check_field_offset(lv, s3783c1f2, ABISELECT(32,20), "S3783C1.s3783c1f2");
    check_field_offset(lv, s3783c1f3, ABISELECT(48,32), "S3783C1.s3783c1f3");
    check_field_offset(lv, s3783c1f4, ABISELECT(64,44), "S3783C1.s3783c1f4");
    check_field_offset(lv, s3783c1f5, ABISELECT(80,56), "S3783C1.s3783c1f5");
    check_field_offset(lv, s3783c1f6, ABISELECT(88,60), "S3783C1.s3783c1f6");
    check_field_offset(lv, s3783c1f7, ABISELECT(104,72), "S3783C1.s3783c1f7");
    check_field_offset(lv, s3783c1f8, ABISELECT(136,104), "S3783C1.s3783c1f8");
    check_field_offset(lv, s3783c1f9, ABISELECT(144,108), "S3783C1.s3783c1f9");
    check_field_offset(lv, s3783c1f10, ABISELECT(160,120), "S3783C1.s3783c1f10");
    check_field_offset(lv, s3783c1f11, ABISELECT(184,136), "S3783C1.s3783c1f11");
    test_class_info(&lv, &cd_S3783C1);
    dp->~S3783C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3783C1(Test_S3783C1, "S3783C1", ABISELECT(208,152));

#else // __cplusplus

extern void _ZN7S3783C1C1Ev();
extern void _ZN7S3783C1D1Ev();
Name_Map name_map_S3783C1[] = {
  NSPAIR(_ZN7S3783C1C1Ev),
  NSPAIR(_ZN7S3783C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3783C3_nt;
extern VTBL_ENTRY _ZTI10S3783C3_nt[];
extern  VTBL_ENTRY _ZTV10S3783C3_nt[];
extern Class_Descriptor cd_S3783C2_nt;
extern VTBL_ENTRY _ZTI10S3783C2_nt[];
extern  VTBL_ENTRY _ZTV10S3783C2_nt[];
static Base_Class bases_S3783C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3783C3_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_S3783C2_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 _ZTI7S3783C1[];
extern void _ZN7S3783C1D1Ev();
extern void _ZN7S3783C1D0Ev();
static  VTBL_ENTRY vtc_S3783C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3783C1[0]),
  (VTBL_ENTRY)&_ZN7S3783C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3783C1D0Ev,
};
extern VTBL_ENTRY _ZTI7S3783C1[];
extern  VTBL_ENTRY _ZTV7S3783C1[];
Class_Descriptor cd_S3783C1 = {  "S3783C1", // class name
  bases_S3783C1, 2,
  &(vtc_S3783C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(208,152), // object size
  NSPAIRA(_ZTI7S3783C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3783C1),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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S15227C4  : S17668C14 {
};
//SIG(-1 S15227C4) C1{ BC2{}}



static void Test_S15227C4()
{
  extern Class_Descriptor cd_S15227C4;
  void *lvp;
  {
    char buf[1];
    init_test(&cd_S15227C4, buf);
    S15227C4 &lv = *(new (buf) S15227C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), 1, "sizeof(S15227C4)");
    check2(__alignof__(lv), 1, "__alignof__(S15227C4)");
    check_base_class_offset(lv, (S17668C14*), 0, "S15227C4");
    test_class_info(&lv, &cd_S15227C4);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS15227C4(Test_S15227C4, "S15227C4", 1);

#else // __cplusplus

extern Class_Descriptor cd_S17668C14;
static Base_Class bases_S15227C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S17668C14,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S15227C4 = {  "S15227C4", // class name
  bases_S15227C4, 1,
  0, // no vftv
  0, //no vtt
  1, // 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  S15227C3_nt  : S15227C4 {
  ::S17668C13_nt s15227c3f0;
};
//SIG(-1 S15227C3_nt) C1{ BC2{ BC3{}} FC4{ BC3}}



//skip512 S15227C3_nt

#else // __cplusplus

extern Class_Descriptor cd_S17668C14;
extern Class_Descriptor cd_S15227C4;
static Base_Class bases_S15227C3_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S17668C14,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S15227C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S15227C3_nt = {  "S15227C3_nt", // class name
  bases_S15227C3_nt, 2,
  0, // no vftv
  0, //no vtt
  2, // 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

union  S15227C8_nt  {
  char s15227c8f0[16];
  void *s15227c8f1;
};
//SIG(1 S15227C8_nt) U1{ Fc[16] Fp}

#endif // __cplusplus
#ifdef __cplusplus

struct  S15227C2_nt  : S15227C3_nt {
  ::S15227C8_nt s15227c2f0;
  int s15227c2f1;
  int s15227c2f2;
};
//SIG(-1 S15227C2_nt) C1{ BC2{ BC3{ BC4{}} FC5{ BC4}} FU6{ Fc[16] Fp} Fi Fi}



//skip512 S15227C2_nt

#else // __cplusplus

extern Class_Descriptor cd_S17668C14;
extern Class_Descriptor cd_S15227C4;
extern Class_Descriptor cd_S15227C3_nt;
static Base_Class bases_S15227C2_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S17668C14,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S15227C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S15227C3_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  S15227C1  {
  char s15227c1f0[3];
  int s15227c1f1[2];
  char s15227c1f2;
  int s15227c1f3[2];
  char s15227c1f4[7];
  int s15227c1f5[5];
  char s15227c1f6[7];
  ::S15227C2_nt s15227c1f7;
  int s15227c1f8;
  ::S15227C2_nt s15227c1f9;
  ::S15227C2_nt s15227c1f10;
  ::S15227C2_nt s15227c1f11;
  char s15227c1f12;
  int s15227c1f13;
  int s15227c1f14;
  int s15227c1f15;
  int s15227c1f16;
  int s15227c1f17;
  int s15227c1f18;
  char s15227c1f19;
  char s15227c1f20;
  char s15227c1f21;
  char s15227c1f22;
  char s15227c1f23;
  char s15227c1f24;
  char s15227c1f25;
  char s15227c1f26;
  int s15227c1f27;
  char s15227c1f28;
  char s15227c1f29;
  char s15227c1f30;
  char s15227c1f31;
  int s15227c1f32;
  char s15227c1f33;
  int s15227c1f34;
  int s15227c1f35;
  int s15227c1f36;
  int s15227c1f37;
  int s15227c1f38;
  int s15227c1f39;
  int s15227c1f40;
  int s15227c1f41;
  int s15227c1f42;
  int s15227c1f43;
  char s15227c1f44;
  void  mf15227c1(); // _ZN8S15227C19mf15227c1Ev
};
//SIG(1 S15227C1) C1{ m Fc[3] Fi[2] Fc Fi[2] Fc[7] Fi[5] Fc[7] FC2{ BC3{ BC4{ BC5{}} FC6{ BC5}} FU7{ Fc[16] Fp} Fi Fi} Fi FC2 FC2 FC2 Fc Fi Fi Fi Fi Fi Fi Fc Fc Fc Fc Fc Fc Fc Fc Fi Fc Fc Fc Fc Fi Fc Fi Fi Fi Fi Fi Fi Fi Fi Fi Fi Fc}


void  S15227C1 ::mf15227c1(){}

static void Test_S15227C1()
{
  {
    init_simple_test("S15227C1");
    S15227C1 lv;
    check2(sizeof(lv), ABISELECT(296,272), "sizeof(S15227C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S15227C1)");
    check_field_offset(lv, s15227c1f0, 0, "S15227C1.s15227c1f0");
    check_field_offset(lv, s15227c1f1, 4, "S15227C1.s15227c1f1");
    check_field_offset(lv, s15227c1f2, 12, "S15227C1.s15227c1f2");
    check_field_offset(lv, s15227c1f3, 16, "S15227C1.s15227c1f3");
    check_field_offset(lv, s15227c1f4, 24, "S15227C1.s15227c1f4");
    check_field_offset(lv, s15227c1f5, 32, "S15227C1.s15227c1f5");
    check_field_offset(lv, s15227c1f6, 52, "S15227C1.s15227c1f6");
    check_field_offset(lv, s15227c1f7, ABISELECT(64,60), "S15227C1.s15227c1f7");
    check_field_offset(lv, s15227c1f8, ABISELECT(96,88), "S15227C1.s15227c1f8");
    check_field_offset(lv, s15227c1f9, ABISELECT(104,92), "S15227C1.s15227c1f9");
    check_field_offset(lv, s15227c1f10, ABISELECT(136,120), "S15227C1.s15227c1f10");
    check_field_offset(lv, s15227c1f11, ABISELECT(168,148), "S15227C1.s15227c1f11");
    check_field_offset(lv, s15227c1f12, ABISELECT(200,176), "S15227C1.s15227c1f12");
    check_field_offset(lv, s15227c1f13, ABISELECT(204,180), "S15227C1.s15227c1f13");
    check_field_offset(lv, s15227c1f14, ABISELECT(208,184), "S15227C1.s15227c1f14");
    check_field_offset(lv, s15227c1f15, ABISELECT(212,188), "S15227C1.s15227c1f15");
    check_field_offset(lv, s15227c1f16, ABISELECT(216,192), "S15227C1.s15227c1f16");
    check_field_offset(lv, s15227c1f17, ABISELECT(220,196), "S15227C1.s15227c1f17");
    check_field_offset(lv, s15227c1f18, ABISELECT(224,200), "S15227C1.s15227c1f18");
    check_field_offset(lv, s15227c1f19, ABISELECT(228,204), "S15227C1.s15227c1f19");
    check_field_offset(lv, s15227c1f20, ABISELECT(229,205), "S15227C1.s15227c1f20");
    check_field_offset(lv, s15227c1f21, ABISELECT(230,206), "S15227C1.s15227c1f21");
    check_field_offset(lv, s15227c1f22, ABISELECT(231,207), "S15227C1.s15227c1f22");
    check_field_offset(lv, s15227c1f23, ABISELECT(232,208), "S15227C1.s15227c1f23");
    check_field_offset(lv, s15227c1f24, ABISELECT(233,209), "S15227C1.s15227c1f24");
    check_field_offset(lv, s15227c1f25, ABISELECT(234,210), "S15227C1.s15227c1f25");
    check_field_offset(lv, s15227c1f26, ABISELECT(235,211), "S15227C1.s15227c1f26");
    check_field_offset(lv, s15227c1f27, ABISELECT(236,212), "S15227C1.s15227c1f27");
    check_field_offset(lv, s15227c1f28, ABISELECT(240,216), "S15227C1.s15227c1f28");
    check_field_offset(lv, s15227c1f29, ABISELECT(241,217), "S15227C1.s15227c1f29");
    check_field_offset(lv, s15227c1f30, ABISELECT(242,218), "S15227C1.s15227c1f30");
    check_field_offset(lv, s15227c1f31, ABISELECT(243,219), "S15227C1.s15227c1f31");
    check_field_offset(lv, s15227c1f32, ABISELECT(244,220), "S15227C1.s15227c1f32");
    check_field_offset(lv, s15227c1f33, ABISELECT(248,224), "S15227C1.s15227c1f33");
    check_field_offset(lv, s15227c1f34, ABISELECT(252,228), "S15227C1.s15227c1f34");
    check_field_offset(lv, s15227c1f35, ABISELECT(256,232), "S15227C1.s15227c1f35");
    check_field_offset(lv, s15227c1f36, ABISELECT(260,236), "S15227C1.s15227c1f36");
    check_field_offset(lv, s15227c1f37, ABISELECT(264,240), "S15227C1.s15227c1f37");
    check_field_offset(lv, s15227c1f38, ABISELECT(268,244), "S15227C1.s15227c1f38");
    check_field_offset(lv, s15227c1f39, ABISELECT(272,248), "S15227C1.s15227c1f39");
    check_field_offset(lv, s15227c1f40, ABISELECT(276,252), "S15227C1.s15227c1f40");
    check_field_offset(lv, s15227c1f41, ABISELECT(280,256), "S15227C1.s15227c1f41");
    check_field_offset(lv, s15227c1f42, ABISELECT(284,260), "S15227C1.s15227c1f42");
    check_field_offset(lv, s15227c1f43, ABISELECT(288,264), "S15227C1.s15227c1f43");
    check_field_offset(lv, s15227c1f44, ABISELECT(292,268), "S15227C1.s15227c1f44");
  }
}
static Arrange_To_Call_Me vS15227C1(Test_S15227C1, "S15227C1", ABISELECT(296,272));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S21579C2  {
  char s21579c2f0[132];
  int s21579c2f1;
  void *s21579c2f2[2];
  char s21579c2f3[16];
};
//SIG(-1 S21579C2) C1{ Fc[132] Fi Fp[2] Fc[16]}



static void Test_S21579C2()
{
  {
    init_simple_test("S21579C2");
    S21579C2 lv;
    check2(sizeof(lv), ABISELECT(168,160), "sizeof(S21579C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21579C2)");
    check_field_offset(lv, s21579c2f0, 0, "S21579C2.s21579c2f0");
    check_field_offset(lv, s21579c2f1, 132, "S21579C2.s21579c2f1");
    check_field_offset(lv, s21579c2f2, 136, "S21579C2.s21579c2f2");
    check_field_offset(lv, s21579c2f3, ABISELECT(152,144), "S21579C2.s21579c2f3");
  }
}
static Arrange_To_Call_Me vS21579C2(Test_S21579C2, "S21579C2", ABISELECT(168,160));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S21579C4  {
  int s21579c4f0[4];
  __tsi64 s21579c4f1[3];
  char s21579c4f2[76];
};
//SIG(-1 S21579C4) C1{ Fi[4] FL[3] Fc[76]}



static void Test_S21579C4()
{
  {
    init_simple_test("S21579C4");
    S21579C4 lv;
    check2(sizeof(lv), ABISELECT(120,116), "sizeof(S21579C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21579C4)");
    check_field_offset(lv, s21579c4f0, 0, "S21579C4.s21579c4f0");
    check_field_offset(lv, s21579c4f1, 16, "S21579C4.s21579c4f1");
    check_field_offset(lv, s21579c4f2, 40, "S21579C4.s21579c4f2");
  }
}
static Arrange_To_Call_Me vS21579C4(Test_S21579C4, "S21579C4", ABISELECT(120,116));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S21579C3  {
  ::S21579C4 s21579c3f0;
  char s21579c3f1[800];
  int s21579c3f2[4];
};
//SIG(-1 S21579C3) C1{ FC2{ Fi[4] FL[3] Fc[76]} Fc[800] Fi[4]}



static void Test_S21579C3()
{
  {
    init_simple_test("S21579C3");
    S21579C3 lv;
    check2(sizeof(lv), ABISELECT(936,932), "sizeof(S21579C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21579C3)");
    check_field_offset(lv, s21579c3f0, 0, "S21579C3.s21579c3f0");
    check_field_offset(lv, s21579c3f1, ABISELECT(120,116), "S21579C3.s21579c3f1");
    check_field_offset(lv, s21579c3f2, ABISELECT(920,916), "S21579C3.s21579c3f2");
  }
}
static Arrange_To_Call_Me vS21579C3(Test_S21579C3, "S21579C3", ABISELECT(936,932));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S21579C7_nt  {
  void *s21579c7f0[2];
  void  mf21579c7(); // _ZN11S21579C7_nt9mf21579c7Ev
};
//SIG(-1 S21579C7_nt) C1{ m Fp[2]}


void  S21579C7_nt ::mf21579c7(){}

//skip512 S21579C7_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S21579C5  {
  ::S674C36_nt s21579c5f0;
  ::S21579C7_nt s21579c5f1;
  ::S3625C31 s21579c5f2;
  int s21579c5f3;
  char s21579c5f4;
  int s21579c5f5;
  void  mf21579c5(); // _ZN8S21579C59mf21579c5Ev
};
//SIG(-1 S21579C5) C1{ m FC2{ m Fp[2]} FC3{ m Fp[2]} FC4{ m Fp Fi[2] FC5{ m}} Fi Fc Fi}


void  S21579C5 ::mf21579c5(){}

static void Test_S21579C5()
{
  {
    init_simple_test("S21579C5");
    S21579C5 lv;
    check2(sizeof(lv), ABISELECT(72,44), "sizeof(S21579C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21579C5)");
    check_field_offset(lv, s21579c5f0, 0, "S21579C5.s21579c5f0");
    check_field_offset(lv, s21579c5f1, ABISELECT(16,8), "S21579C5.s21579c5f1");
    check_field_offset(lv, s21579c5f2, ABISELECT(32,16), "S21579C5.s21579c5f2");
    check_field_offset(lv, s21579c5f3, ABISELECT(56,32), "S21579C5.s21579c5f3");
    check_field_offset(lv, s21579c5f4, ABISELECT(60,36), "S21579C5.s21579c5f4");
    check_field_offset(lv, s21579c5f5, ABISELECT(64,40), "S21579C5.s21579c5f5");
  }
}
static Arrange_To_Call_Me vS21579C5(Test_S21579C5, "S21579C5", ABISELECT(72,44));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S21579C10  {
  void *s21579c10f0;
  int s21579c10f1[2];
  void *s21579c10f2[2];
  void  mf21579c10(); // _ZN9S21579C1010mf21579c10Ev
};
//SIG(-1 S21579C10) C1{ m Fp Fi[2] Fp[2]}


void  S21579C10 ::mf21579c10(){}

static void Test_S21579C10()
{
  {
    init_simple_test("S21579C10");
    S21579C10 lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S21579C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21579C10)");
    check_field_offset(lv, s21579c10f0, 0, "S21579C10.s21579c10f0");
    check_field_offset(lv, s21579c10f1, ABISELECT(8,4), "S21579C10.s21579c10f1");
    check_field_offset(lv, s21579c10f2, ABISELECT(16,12), "S21579C10.s21579c10f2");
  }
}
static Arrange_To_Call_Me vS21579C10(Test_S21579C10, "S21579C10", ABISELECT(32,20));

#else // __cplusplus

extern VTBL_ENTRY _ZTI9S21579C10[];
VTBL_ENTRY *P__ZTI9S21579C10 = _ZTI9S21579C10; 
Class_Descriptor cd_S21579C10 = {  "S21579C10", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  ABISELECT(32,20), // object size
  NSPAIRA(_ZTI9S21579C10),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  S21579C1  {
  int s21579c1f0;
  ::S21579C2 s21579c1f1;
  char s21579c1f2;
  ::S21579C3 s21579c1f3;
  ::S21579C5 s21579c1f4;
  int s21579c1f5;
  ::S21579C10 s21579c1f6;
  char s21579c1f7[3];
  void *s21579c1f8[2];
  ::S3625C18_nt s21579c1f9;
  void  mf21579c1(); // _ZN8S21579C19mf21579c1Ev
  virtual  ~S21579C1(); // _ZN8S21579C1D1Ev
  S21579C1(); // tgen
};
//SIG(1 S21579C1) C1{ vd m Fi FC2{ Fc[132] Fi Fp[2] Fc[16]} Fc FC3{ FC4{ Fi[4] FL[3] Fc[76]} Fc[800] Fi[4]} FC5{ m FC6{ m Fp[2]} FC7{ m Fp[2]} FC8{ m Fp Fi[2] FC9{ m}} Fi Fc Fi} Fi FC10{ m Fp Fi[2] Fp[2]} Fc[3] Fp[2] FC11{ m Fp Fi FC12{ m}}}


void  S21579C1 ::mf21579c1(){}
 S21579C1 ::~S21579C1(){ note_dtor("S21579C1", this);}
S21579C1 ::S21579C1(){ note_ctor("S21579C1", this);} // tgen

static void Test_S21579C1()
{
  extern Class_Descriptor cd_S21579C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(161,300)];
    init_test(&cd_S21579C1, buf);
    S21579C1 *dp, &lv = *(dp=new (buf) S21579C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1280,1196), "sizeof(S21579C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21579C1)");
    check_field_offset(lv, s21579c1f0, ABISELECT(8,4), "S21579C1.s21579c1f0");
    check_field_offset(lv, s21579c1f1, ABISELECT(16,8), "S21579C1.s21579c1f1");
    check_field_offset(lv, s21579c1f2, ABISELECT(184,168), "S21579C1.s21579c1f2");
    check_field_offset(lv, s21579c1f3, ABISELECT(192,172), "S21579C1.s21579c1f3");
    check_field_offset(lv, s21579c1f4, ABISELECT(1128,1104), "S21579C1.s21579c1f4");
    check_field_offset(lv, s21579c1f5, ABISELECT(1200,1148), "S21579C1.s21579c1f5");
    check_field_offset(lv, s21579c1f6, ABISELECT(1208,1152), "S21579C1.s21579c1f6");
    check_field_offset(lv, s21579c1f7, ABISELECT(1240,1172), "S21579C1.s21579c1f7");
    check_field_offset(lv, s21579c1f8, ABISELECT(1248,1176), "S21579C1.s21579c1f8");
    check_field_offset(lv, s21579c1f9, ABISELECT(1264,1184), "S21579C1.s21579c1f9");
    test_class_info(&lv, &cd_S21579C1);
    dp->~S21579C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21579C1(Test_S21579C1, "S21579C1", ABISELECT(1280,1196));

#else // __cplusplus

extern void _ZN8S21579C1C1Ev();
extern void _ZN8S21579C1D1Ev();
Name_Map name_map_S21579C1[] = {
  NSPAIR(_ZN8S21579C1C1Ev),
  NSPAIR(_ZN8S21579C1D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S21579C1[];
extern void _ZN8S21579C1D1Ev();
extern void _ZN8S21579C1D0Ev();
static  VTBL_ENTRY vtc_S21579C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S21579C1[0]),
  (VTBL_ENTRY)&_ZN8S21579C1D1Ev,
  (VTBL_ENTRY)&_ZN8S21579C1D0Ev,
};
extern VTBL_ENTRY _ZTI8S21579C1[];
extern  VTBL_ENTRY _ZTV8S21579C1[];
Class_Descriptor cd_S21579C1 = {  "S21579C1", // class name
  0,0,//no base classes
  &(vtc_S21579C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(1280,1196), // object size
  NSPAIRA(_ZTI8S21579C1),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S21579C1),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  S9507C2_nt  {
  virtual  ~S9507C2_nt(); // _ZN10S9507C2_ntD1Ev
  virtual void  v3(); // _ZN10S9507C2_nt2v3Ev
  virtual void  v4(); // _ZN10S9507C2_nt2v4Ev
  virtual void  v5(); // _ZN10S9507C2_nt2v5Ev
  virtual void  v6(); // _ZN10S9507C2_nt2v6Ev
  virtual void  v7(); // _ZN10S9507C2_nt2v7Ev
  S9507C2_nt(); // tgen
};
//SIG(-1 S9507C2_nt) C1{ vd v1 v2 v3 v4 v5}


 S9507C2_nt ::~S9507C2_nt(){ note_dtor("S9507C2_nt", this);}
void  S9507C2_nt ::v3(){vfunc_called(this, "_ZN10S9507C2_nt2v3Ev");}
void  S9507C2_nt ::v4(){vfunc_called(this, "_ZN10S9507C2_nt2v4Ev");}
void  S9507C2_nt ::v5(){vfunc_called(this, "_ZN10S9507C2_nt2v5Ev");}
void  S9507C2_nt ::v6(){vfunc_called(this, "_ZN10S9507C2_nt2v6Ev");}
void  S9507C2_nt ::v7(){vfunc_called(this, "_ZN10S9507C2_nt2v7Ev");}
S9507C2_nt ::S9507C2_nt(){ note_ctor("S9507C2_nt", this);} // tgen

//skip512 S9507C2_nt

#else // __cplusplus

extern void _ZN10S9507C2_ntC1Ev();
extern void _ZN10S9507C2_ntD1Ev();
Name_Map name_map_S9507C2_nt[] = {
  NSPAIR(_ZN10S9507C2_ntC1Ev),
  NSPAIR(_ZN10S9507C2_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S9507C2_nt[];
extern void _ZN10S9507C2_ntD1Ev();
extern void _ZN10S9507C2_ntD0Ev();
extern void _ZN10S9507C2_nt2v3Ev();
extern void _ZN10S9507C2_nt2v4Ev();
extern void _ZN10S9507C2_nt2v5Ev();
extern void _ZN10S9507C2_nt2v6Ev();
extern void _ZN10S9507C2_nt2v7Ev();
static  VTBL_ENTRY vtc_S9507C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S9507C2_nt[0]),
  (VTBL_ENTRY)&_ZN10S9507C2_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S9507C2_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S9507C2_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S9507C2_nt2v4Ev,
  (VTBL_ENTRY)&_ZN10S9507C2_nt2v5Ev,
  (VTBL_ENTRY)&_ZN10S9507C2_nt2v6Ev,
  (VTBL_ENTRY)&_ZN10S9507C2_nt2v7Ev,
};
extern VTBL_ENTRY _ZTI10S9507C2_nt[];
VTBL_ENTRY *P__ZTI10S9507C2_nt = _ZTI10S9507C2_nt; 
extern  VTBL_ENTRY _ZTV10S9507C2_nt[];
Class_Descriptor cd_S9507C2_nt = {  "S9507C2_nt", // class name
  0,0,//no base classes
  &(vtc_S9507C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI10S9507C2_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S9507C2_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  S9507C4_nt  {
  int s9507c4f0[4];
};
//SIG(-1 S9507C4_nt) C1{ Fi[4]}



//skip512 S9507C4_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S9507C5_nt  {
  int s9507c5f0[5];
  char s9507c5f1;
  int s9507c5f2[2];
  void  mf9507c5(); // _ZN10S9507C5_nt8mf9507c5Ev
};
//SIG(-1 S9507C5_nt) C1{ m Fi[5] Fc Fi[2]}


void  S9507C5_nt ::mf9507c5(){}

//skip512 S9507C5_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S9507C3  {
  int s9507c3f0[18];
  ::S9507C4_nt s9507c3f1;
  ::S9507C5_nt s9507c3f2;
};
//SIG(1 S9507C3) C1{ Fi[18] FC2{ Fi[4]} FC3{ m Fi[5] Fc Fi[2]}}



static void Test_S9507C3()
{
  {
    init_simple_test("S9507C3");
    S9507C3 lv;
    check2(sizeof(lv), 120, "sizeof(S9507C3)");
    check2(__alignof__(lv), 4, "__alignof__(S9507C3)");
    check_field_offset(lv, s9507c3f0, 0, "S9507C3.s9507c3f0");
    check_field_offset(lv, s9507c3f1, 72, "S9507C3.s9507c3f1");
    check_field_offset(lv, s9507c3f2, 88, "S9507C3.s9507c3f2");
  }
}
static Arrange_To_Call_Me vS9507C3(Test_S9507C3, "S9507C3", 120);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S9507C6_nt  {
  int s9507c6f0[5];
};
//SIG(1 S9507C6_nt) C1{ Fi[5]}



//skip512 S9507C6_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S9507C7_nt  : S17668C9_nt {
};
//SIG(-1 S9507C7_nt) C1{ BC2{ m Fc[16]}}



//skip512 S9507C7_nt

#else // __cplusplus

extern Class_Descriptor cd_S17668C9_nt;
static Base_Class bases_S9507C7_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S17668C9_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  S9507C9  {
  int s9507c9f0[11];
  ::S9507C7_nt s9507c9f1;
  ::S9507C7_nt s9507c9f2;
};
//SIG(1 S9507C9) C1{ Fi[11] FC2{ BC3{ m Fc[16]}} FC2}



static void Test_S9507C9()
{
  {
    init_simple_test("S9507C9");
    S9507C9 lv;
    check2(sizeof(lv), 76, "sizeof(S9507C9)");
    check2(__alignof__(lv), 4, "__alignof__(S9507C9)");
    check_field_offset(lv, s9507c9f0, 0, "S9507C9.s9507c9f0");
    check_field_offset(lv, s9507c9f1, 44, "S9507C9.s9507c9f1");
    check_field_offset(lv, s9507c9f2, 60, "S9507C9.s9507c9f2");
  }
}
static Arrange_To_Call_Me vS9507C9(Test_S9507C9, "S9507C9", 76);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S9507C1  : S9507C2_nt {
  ::S9507C3 s9507c1f0[21];
  ::S9507C6_nt s9507c1f1[7];
  int s9507c1f2[21];
  ::S9507C7_nt s9507c1f3[21];
  ::S9507C9 s9507c1f4[21];
  int s9507c1f5;
  char s9507c1f6[5];
  int s9507c1f7[3];
  char s9507c1f8;
  int s9507c1f9[13];
  char s9507c1f10[2];
  int s9507c1f11;
  char s9507c1f12;
  int s9507c1f13[18];
  virtual  ~S9507C1(); // _ZN7S9507C1D1Ev
  virtual void  v1(); // _ZN7S9507C12v1Ev
  virtual void  v2(); // _ZN7S9507C12v2Ev
  S9507C1(); // tgen
};
//SIG(1 S9507C1) C1{ BC2{ vd v3 v4 v5 v6 v7} vd v1 v2 FC3{ Fi[18] FC4{ Fi[4]} FC5{ m Fi[5] Fc Fi[2]}}[21] FC6{ Fi[5]}[7] Fi[21] FC7{ BC8{ m Fc[16]}}[21] FC9{ Fi[11] FC7 FC7}[21] Fi Fc[5] Fi[3] Fc Fi[13] Fc[2] Fi Fc Fi[18]}


 S9507C1 ::~S9507C1(){ note_dtor("S9507C1", this);}
void  S9507C1 ::v1(){vfunc_called(this, "_ZN7S9507C12v1Ev");}
void  S9507C1 ::v2(){vfunc_called(this, "_ZN7S9507C12v2Ev");}
S9507C1 ::S9507C1(){ note_ctor("S9507C1", this);} // tgen

static void Test_S9507C1()
{
  extern Class_Descriptor cd_S9507C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(607,1212)];
    init_test(&cd_S9507C1, buf);
    S9507C1 *dp, &lv = *(dp=new (buf) S9507C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(4848,4844), "sizeof(S9507C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9507C1)");
    check_base_class_offset(lv, (S9507C2_nt*), 0, "S9507C1");
    check_field_offset(lv, s9507c1f0, ABISELECT(8,4), "S9507C1.s9507c1f0");
    check_field_offset(lv, s9507c1f1, ABISELECT(2528,2524), "S9507C1.s9507c1f1");
    check_field_offset(lv, s9507c1f2, ABISELECT(2668,2664), "S9507C1.s9507c1f2");
    check_field_offset(lv, s9507c1f3, ABISELECT(2752,2748), "S9507C1.s9507c1f3");
    check_field_offset(lv, s9507c1f4, ABISELECT(3088,3084), "S9507C1.s9507c1f4");
    check_field_offset(lv, s9507c1f5, ABISELECT(4684,4680), "S9507C1.s9507c1f5");
    check_field_offset(lv, s9507c1f6, ABISELECT(4688,4684), "S9507C1.s9507c1f6");
    check_field_offset(lv, s9507c1f7, ABISELECT(4696,4692), "S9507C1.s9507c1f7");
    check_field_offset(lv, s9507c1f8, ABISELECT(4708,4704), "S9507C1.s9507c1f8");
    check_field_offset(lv, s9507c1f9, ABISELECT(4712,4708), "S9507C1.s9507c1f9");
    check_field_offset(lv, s9507c1f10, ABISELECT(4764,4760), "S9507C1.s9507c1f10");
    check_field_offset(lv, s9507c1f11, ABISELECT(4768,4764), "S9507C1.s9507c1f11");
    check_field_offset(lv, s9507c1f12, ABISELECT(4772,4768), "S9507C1.s9507c1f12");
    check_field_offset(lv, s9507c1f13, ABISELECT(4776,4772), "S9507C1.s9507c1f13");
    test_class_info(&lv, &cd_S9507C1);
    dp->~S9507C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9507C1(Test_S9507C1, "S9507C1", ABISELECT(4848,4844));

#else // __cplusplus

extern void _ZN7S9507C1C1Ev();
extern void _ZN7S9507C1D1Ev();
Name_Map name_map_S9507C1[] = {
  NSPAIR(_ZN7S9507C1C1Ev),
  NSPAIR(_ZN7S9507C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S9507C2_nt;
extern VTBL_ENTRY _ZTI10S9507C2_nt[];
extern  VTBL_ENTRY _ZTV10S9507C2_nt[];
static Base_Class bases_S9507C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S9507C2_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 _ZTI7S9507C1[];
extern void _ZN7S9507C1D1Ev();
extern void _ZN7S9507C1D0Ev();
extern void _ZN10S9507C2_nt2v3Ev();
extern void _ZN10S9507C2_nt2v4Ev();
extern void _ZN10S9507C2_nt2v5Ev();
extern void _ZN10S9507C2_nt2v6Ev();
extern void _ZN10S9507C2_nt2v7Ev();
extern void _ZN7S9507C12v1Ev();
extern void _ZN7S9507C12v2Ev();
static  VTBL_ENTRY vtc_S9507C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9507C1[0]),
  (VTBL_ENTRY)&_ZN7S9507C1D1Ev,
  (VTBL_ENTRY)&_ZN7S9507C1D0Ev,
  (VTBL_ENTRY)&_ZN10S9507C2_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S9507C2_nt2v4Ev,
  (VTBL_ENTRY)&_ZN10S9507C2_nt2v5Ev,
  (VTBL_ENTRY)&_ZN10S9507C2_nt2v6Ev,
  (VTBL_ENTRY)&_ZN10S9507C2_nt2v7Ev,
  (VTBL_ENTRY)&_ZN7S9507C12v1Ev,
  (VTBL_ENTRY)&_ZN7S9507C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S9507C1[];
extern  VTBL_ENTRY _ZTV7S9507C1[];
Class_Descriptor cd_S9507C1 = {  "S9507C1", // class name
  bases_S9507C1, 1,
  &(vtc_S9507C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(4848,4844), // object size
  NSPAIRA(_ZTI7S9507C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S9507C1),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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19188C2  : S3625C33_nt {
  long double s19188c2f0;
  ::S3625C33_nt s19188c2f1;
  ::S3625C33_nt s19188c2f2;
  ::S3625C33_nt s19188c2f3;
  virtual void  v4(); // _ZN8S19188C22v4Ev
  ~S19188C2(); // tgen
  S19188C2(); // tgen
};
//SIG(-1 S19188C2) C1{ BC2{ m Fp} v1 FD FC2 FC2 FC2}


void  S19188C2 ::v4(){vfunc_called(this, "_ZN8S19188C22v4Ev");}
S19188C2 ::~S19188C2(){ note_dtor("S19188C2", this);} // tgen
S19188C2 ::S19188C2(){ note_ctor("S19188C2", this);} // tgen

static void Test_S19188C2()
{
  extern Class_Descriptor cd_S19188C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(5,9)];
    init_test(&cd_S19188C2, buf);
    S19188C2 *dp, &lv = *(dp=new (buf) S19188C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,32), "sizeof(S19188C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19188C2)");
    check_base_class_offset(lv, (S3625C33_nt*), ABISELECT(8,4), "S19188C2");
    check_field_offset(lv, s19188c2f0, ABISELECT(16,8), "S19188C2.s19188c2f0");
    check_field_offset(lv, s19188c2f1, ABISELECT(32,20), "S19188C2.s19188c2f1");
    check_field_offset(lv, s19188c2f2, ABISELECT(40,24), "S19188C2.s19188c2f2");
    check_field_offset(lv, s19188c2f3, ABISELECT(48,28), "S19188C2.s19188c2f3");
    test_class_info(&lv, &cd_S19188C2);
    dp->~S19188C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19188C2(Test_S19188C2, "S19188C2", ABISELECT(64,32));

#else // __cplusplus

extern void _ZN8S19188C2C1Ev();
extern void _ZN8S19188C2D1Ev();
Name_Map name_map_S19188C2[] = {
  NSPAIR(_ZN8S19188C2C1Ev),
  NSPAIR(_ZN8S19188C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3625C33_nt;
extern VTBL_ENTRY _ZTI11S3625C33_nt[];
static Base_Class bases_S19188C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3625C33_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 _ZTI8S19188C2[];
extern void _ZN8S19188C22v4Ev();
static  VTBL_ENTRY vtc_S19188C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19188C2[0]),
  (VTBL_ENTRY)&_ZN8S19188C22v4Ev,
};
extern VTBL_ENTRY _ZTI8S19188C2[];
extern  VTBL_ENTRY _ZTV8S19188C2[];
Class_Descriptor cd_S19188C2 = {  "S19188C2", // class name
  bases_S19188C2, 1,
  &(vtc_S19188C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(64,32), // object size
  NSPAIRA(_ZTI8S19188C2),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S19188C2),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  S19188C5_nt  {
  __tsi64 s19188c5f0;
  virtual void  v5(); // _ZN11S19188C5_nt2v5Ev
  virtual void  v6(); // _ZN11S19188C5_nt2v6Ev
  virtual void  v7(); // _ZN11S19188C5_nt2v7Ev
  ~S19188C5_nt(); // tgen
  S19188C5_nt(); // tgen
};
//SIG(-1 S19188C5_nt) C1{ v1 v2 v3 FL}


void  S19188C5_nt ::v5(){vfunc_called(this, "_ZN11S19188C5_nt2v5Ev");}
void  S19188C5_nt ::v6(){vfunc_called(this, "_ZN11S19188C5_nt2v6Ev");}
void  S19188C5_nt ::v7(){vfunc_called(this, "_ZN11S19188C5_nt2v7Ev");}
S19188C5_nt ::~S19188C5_nt(){ note_dtor("S19188C5_nt", this);} // tgen
S19188C5_nt ::S19188C5_nt(){ note_ctor("S19188C5_nt", this);} // tgen

//skip512 S19188C5_nt

#else // __cplusplus

extern void _ZN11S19188C5_ntC1Ev();
extern void _ZN11S19188C5_ntD1Ev();
Name_Map name_map_S19188C5_nt[] = {
  NSPAIR(_ZN11S19188C5_ntC1Ev),
  NSPAIR(_ZN11S19188C5_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI11S19188C5_nt[];
extern void _ZN11S19188C5_nt2v5Ev();
extern void _ZN11S19188C5_nt2v6Ev();
extern void _ZN11S19188C5_nt2v7Ev();
static  VTBL_ENTRY vtc_S19188C5_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI11S19188C5_nt[0]),
  (VTBL_ENTRY)&_ZN11S19188C5_nt2v5Ev,
  (VTBL_ENTRY)&_ZN11S19188C5_nt2v6Ev,
  (VTBL_ENTRY)&_ZN11S19188C5_nt2v7Ev,
};
extern VTBL_ENTRY _ZTI11S19188C5_nt[];
VTBL_ENTRY *P__ZTI11S19188C5_nt = _ZTI11S19188C5_nt; 
extern  VTBL_ENTRY _ZTV11S19188C5_nt[];
Class_Descriptor cd_S19188C5_nt = {  "S19188C5_nt", // class name
  0,0,//no base classes
  &(vtc_S19188C5_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI11S19188C5_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV11S19188C5_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  S19188C8  : virtual S19188C2 , virtual S19188C5_nt , virtual S3625C33_nt {
  void *s19188c8f0;
  ~S19188C8(); // tgen
  S19188C8(); // tgen
};
//SIG(-1 S19188C8) C1{ VBC2{ BC3{ m Fp} v1 FD FC3 FC3 FC3} VBC4{ v2 v3 v4 FL} VBC3 Fp}


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

static void Test_S19188C8()
{
  extern Class_Descriptor cd_S19188C8;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(7,15)];
    init_test(&cd_S19188C8, buf);
    S19188C8 *dp, &lv = *(dp=new (buf) S19188C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,56), "sizeof(S19188C8)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19188C8)");
    check_base_class_offset(lv, (S3625C33_nt*)(S19188C2*), ABISELECT(24,12), "S19188C8");
    check_base_class_offset(lv, (S19188C2*), ABISELECT(16,8), "S19188C8");
    check_base_class_offset(lv, (S19188C5_nt*), ABISELECT(72,40), "S19188C8");
    /*is_ambiguous_... S19188C8::S3625C33_nt */ AMB_check_base_class_offset(lv, (S3625C33_nt*), ABISELECT(88,52), "S19188C8");
    check_field_offset(lv, s19188c8f0, ABISELECT(8,4), "S19188C8.s19188c8f0");
    test_class_info(&lv, &cd_S19188C8);
    dp->~S19188C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19188C8(Test_S19188C8, "S19188C8", ABISELECT(96,56));

#else // __cplusplus

extern void _ZN8S19188C8C1Ev();
extern void _ZN8S19188C8D1Ev();
Name_Map name_map_S19188C8[] = {
  NSPAIR(_ZN8S19188C8C1Ev),
  NSPAIR(_ZN8S19188C8D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3625C33_nt;
extern VTBL_ENTRY _ZTI11S3625C33_nt[];
extern Class_Descriptor cd_S19188C2;
extern VTBL_ENTRY _ZTI8S19188C2[];
extern  VTBL_ENTRY _ZTV8S19188C2[];
extern Class_Descriptor cd_S19188C5_nt;
extern VTBL_ENTRY _ZTI11S19188C5_nt[];
extern  VTBL_ENTRY _ZTV11S19188C5_nt[];
extern Class_Descriptor cd_S3625C33_nt;
extern VTBL_ENTRY _ZTI11S3625C33_nt[];
static Base_Class bases_S19188C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3625C33_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
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S19188C2,    ABISELECT(16,8), //bcp->offset
    5, //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_S19188C5_nt,    ABISELECT(72,40), //bcp->offset
    9, //bcp->virtual_function_table_offset
    5, //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_S3625C33_nt,    ABISELECT(88,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
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19188C8[];
extern void _ZN8S19188C22v4Ev();
extern void _ZN11S19188C5_nt2v5Ev();
extern void _ZN11S19188C5_nt2v6Ev();
extern void _ZN11S19188C5_nt2v7Ev();
static  VTBL_ENTRY vtc_S19188C8[] = {
  ABISELECT(88,52),
  ABISELECT(72,40),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S19188C8[0]),
  0,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19188C8[0]),
  (VTBL_ENTRY)&_ZN8S19188C22v4Ev,
  0,
  0,
  0,
  ABISELECT(-72,-40),
  (VTBL_ENTRY)&(_ZTI8S19188C8[0]),
  (VTBL_ENTRY)&_ZN11S19188C5_nt2v5Ev,
  (VTBL_ENTRY)&_ZN11S19188C5_nt2v6Ev,
  (VTBL_ENTRY)&_ZN11S19188C5_nt2v7Ev,
};
extern VTBL_ENTRY _ZTV8S19188C8[];
static  VTT_ENTRY vtt_S19188C8[] = {
  {&(_ZTV8S19188C8[5]),  5,17},
  {&(_ZTV8S19188C8[8]),  8,17},
  {&(_ZTV8S19188C8[14]),  14,17},
};
extern VTBL_ENTRY _ZTI8S19188C8[];
extern  VTBL_ENTRY _ZTV8S19188C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19188C8[];
Class_Descriptor cd_S19188C8 = {  "S19188C8", // class name
  bases_S19188C8, 4,
  &(vtc_S19188C8[0]), // expected_vtbl_contents
  &(vtt_S19188C8[0]), // expected_vtt_contents
  ABISELECT(96,56), // object size
  NSPAIRA(_ZTI8S19188C8),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S19188C8),17, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19188C8),3, //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  S19188C7  : virtual S19188C2 , S3625C33_nt , virtual S19188C5_nt , S19188C8 {
  ::S19188C2 s19188c7f0;
  virtual void  v8(); // _ZN8S19188C72v8Ev
  ~S19188C7(); // tgen
  S19188C7(); // tgen
};
//SIG(-1 S19188C7) C1{ VBC2{ BC3{ m Fp} v2 FD FC3 FC3 FC3} BC3 VBC4{ v3 v4 v5 FL} BC5{ VBC2 VBC4 VBC3 Fp} v1 FC2}


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

static void Test_S19188C7()
{
  extern Class_Descriptor cd_S19188C7;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(12,24)];
    init_test(&cd_S19188C7, buf);
    S19188C7 *dp, &lv = *(dp=new (buf) S19188C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(176,92), "sizeof(S19188C7)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19188C7)");
    check_base_class_offset(lv, (S3625C33_nt*)(S19188C2*), ABISELECT(104,48), "S19188C7");
    check_base_class_offset(lv, (S19188C2*), ABISELECT(96,44), "S19188C7");
    check_base_class_offset(lv, (S19188C2*)(S19188C8*), ABISELECT(96,44), "S19188C7");
    /*is_ambiguous_... S19188C7::S3625C33_nt */ AMB_check_base_class_offset(lv, (S3625C33_nt*), ABISELECT(16,8), "S19188C7");
    check_base_class_offset(lv, (S19188C5_nt*), ABISELECT(152,76), "S19188C7");
    check_base_class_offset(lv, (S19188C5_nt*)(S19188C8*), ABISELECT(152,76), "S19188C7");
    /*is_ambiguous_... S19188C8::S3625C33_nt */ AMB_check_base_class_offset(lv, (S3625C33_nt*)(S19188C8*), ABISELECT(168,88), "S19188C7");
    check_base_class_offset(lv, (S19188C8*), 0, "S19188C7");
    check_field_offset(lv, s19188c7f0, ABISELECT(32,12), "S19188C7.s19188c7f0");
    test_class_info(&lv, &cd_S19188C7);
    dp->~S19188C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19188C7(Test_S19188C7, "S19188C7", ABISELECT(176,92));

#else // __cplusplus

extern void _ZN8S19188C7C1Ev();
extern void _ZN8S19188C7D1Ev();
Name_Map name_map_S19188C7[] = {
  NSPAIR(_ZN8S19188C7C1Ev),
  NSPAIR(_ZN8S19188C7D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3625C33_nt;
extern VTBL_ENTRY _ZTI11S3625C33_nt[];
extern Class_Descriptor cd_S19188C2;
extern VTBL_ENTRY _ZTI8S19188C2[];
extern  VTBL_ENTRY _ZTV8S19188C2[];
extern Class_Descriptor cd_S3625C33_nt;
extern VTBL_ENTRY _ZTI11S3625C33_nt[];
extern Class_Descriptor cd_S19188C5_nt;
extern VTBL_ENTRY _ZTI11S19188C5_nt[];
extern  VTBL_ENTRY _ZTV11S19188C5_nt[];
extern Class_Descriptor cd_S3625C33_nt;
extern VTBL_ENTRY _ZTI11S3625C33_nt[];
extern Class_Descriptor cd_S19188C8;
extern VTBL_ENTRY _ZTI8S19188C8[];
extern  VTBL_ENTRY _ZTV8S19188C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19188C8[];
static Base_Class bases_S19188C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3625C33_nt,    ABISELECT(104,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
  0, 0},
  {&cd_S19188C2,    ABISELECT(96,44), //bcp->offset
    6, //bcp->virtual_function_table_offset
    3, //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_S3625C33_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
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19188C5_nt,    ABISELECT(152,76), //bcp->offset
    10, //bcp->virtual_function_table_offset
    5, //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
    -1, //immediately_derived
  1, 1},
  {&cd_S3625C33_nt,    ABISELECT(168,88), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19188C8,    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
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19188C7[];
extern void _ZN8S19188C72v8Ev();
extern void _ZN8S19188C22v4Ev();
extern void _ZN11S19188C5_nt2v5Ev();
extern void _ZN11S19188C5_nt2v6Ev();
extern void _ZN11S19188C5_nt2v7Ev();
static  VTBL_ENTRY vtc_S19188C7[] = {
  ABISELECT(168,88),
  ABISELECT(152,76),
  ABISELECT(96,44),
  0,
  (VTBL_ENTRY)&(_ZTI8S19188C7[0]),
  (VTBL_ENTRY)&_ZN8S19188C72v8Ev,
  0,
  ABISELECT(-96,-44),
  (VTBL_ENTRY)&(_ZTI8S19188C7[0]),
  (VTBL_ENTRY)&_ZN8S19188C22v4Ev,
  0,
  0,
  0,
  ABISELECT(-152,-76),
  (VTBL_ENTRY)&(_ZTI8S19188C7[0]),
  (VTBL_ENTRY)&_ZN11S19188C5_nt2v5Ev,
  (VTBL_ENTRY)&_ZN11S19188C5_nt2v6Ev,
  (VTBL_ENTRY)&_ZN11S19188C5_nt2v7Ev,
};
extern VTBL_ENTRY _ZTV8S19188C7[];
static  VTBL_ENTRY _tg__ZTV8S19188C8__8S19188C7[] = {
  ABISELECT(168,88),
  ABISELECT(152,76),
  ABISELECT(96,44),
  0,
  (VTBL_ENTRY)&(_ZTI8S19188C8[0]),
};
extern void _ZN8S19188C22v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19188C2__8S19188C8__8S19188C7[] = {
  0,
  ABISELECT(-96,-44),
  (VTBL_ENTRY)&(_ZTI8S19188C8[0]),
  (VTBL_ENTRY)&_ZN8S19188C22v4Ev,
};
extern void _ZN11S19188C5_nt2v5Ev();
extern void _ZN11S19188C5_nt2v6Ev();
extern void _ZN11S19188C5_nt2v7Ev();
static  VTBL_ENTRY _tg__ZTV11S19188C5_nt__8S19188C8__8S19188C7[] = {
  0,
  0,
  0,
  ABISELECT(-152,-76),
  (VTBL_ENTRY)&(_ZTI8S19188C8[0]),
  (VTBL_ENTRY)&_ZN11S19188C5_nt2v5Ev,
  (VTBL_ENTRY)&_ZN11S19188C5_nt2v6Ev,
  (VTBL_ENTRY)&_ZN11S19188C5_nt2v7Ev,
};
static  VTT_ENTRY vtt_S19188C7[] = {
  {&(_ZTV8S19188C7[5]),  5,18},
  {&(_tg__ZTV8S19188C8__8S19188C7[5]),  5,5},
  {&(_tg__ZTV8S19188C2__8S19188C8__8S19188C7[3]),  3,4},
  {&(_tg__ZTV11S19188C5_nt__8S19188C8__8S19188C7[5]),  5,8},
  {&(_ZTV8S19188C7[9]),  9,18},
  {&(_ZTV8S19188C7[15]),  15,18},
};
extern VTBL_ENTRY _ZTI8S19188C7[];
extern  VTBL_ENTRY _ZTV8S19188C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19188C7[];
Class_Descriptor cd_S19188C7 = {  "S19188C7", // class name
  bases_S19188C7, 6,
  &(vtc_S19188C7[0]), // expected_vtbl_contents
  &(vtt_S19188C7[0]), // expected_vtt_contents
  ABISELECT(176,92), // object size
  NSPAIRA(_ZTI8S19188C7),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S19188C7),18, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19188C7),6, //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  S19188C6  : virtual S19188C2 , S19188C7 , S3625C33_nt , S19188C8 , S19188C5_nt {
  int s19188c6f0;
  ~S19188C6(); // tgen
  S19188C6(); // tgen
};
//SIG(-1 S19188C6) C1{ VBC2{ BC3{ m Fp} v1 FD FC3 FC3 FC3} BC4{ VBC2 BC3 VBC5{ v2 v3 v4 FL} BC6{ VBC2 VBC5 VBC3 Fp} v5 FC2} BC3 BC6 BC5 Fi}


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

static void Test_S19188C6()
{
  extern Class_Descriptor cd_S19188C6;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(15,31)];
    init_test(&cd_S19188C6, buf);
    S19188C6 *dp, &lv = *(dp=new (buf) S19188C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(224,120), "sizeof(S19188C6)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19188C6)");
    check_base_class_offset(lv, (S3625C33_nt*)(S19188C2*), ABISELECT(152,76), "S19188C6");
    check_base_class_offset(lv, (S19188C2*), ABISELECT(144,72), "S19188C6");
    check_base_class_offset(lv, (S19188C2*)(S19188C7*), ABISELECT(144,72), "S19188C6");
    check_base_class_offset(lv, (S19188C2*)(S19188C8*)(S19188C7*), ABISELECT(144,72), "S19188C6");
    /*is_ambiguous_... S19188C6::S19188C8 */ AMB_check_base_class_offset(lv, (S19188C2*)(S19188C8*), ABISELECT(144,72), "S19188C6");
    /*is_ambiguous_... S19188C7::S3625C33_nt */ AMB_check_base_class_offset(lv, (S3625C33_nt*)(S19188C7*), ABISELECT(16,8), "S19188C6");
    check_base_class_offset(lv, (S19188C5_nt*)(S19188C7*), ABISELECT(200,104), "S19188C6");
    check_base_class_offset(lv, (S19188C5_nt*)(S19188C8*)(S19188C7*), ABISELECT(200,104), "S19188C6");
    /*is_ambiguous_... S19188C6::S19188C8 */ AMB_check_base_class_offset(lv, (S19188C5_nt*)(S19188C8*), ABISELECT(200,104), "S19188C6");
    /*is_ambiguous_... S19188C8::S3625C33_nt */ AMB_check_base_class_offset(lv, (S3625C33_nt*)(S19188C8*)(S19188C7*), ABISELECT(216,116), "S19188C6");
    /*is_ambiguous_... S19188C6::S19188C8 */ AMB_check_base_class_offset(lv, (S3625C33_nt*)(S19188C8*), ABISELECT(216,116), "S19188C6");
    check_base_class_offset(lv, (S19188C8*)(S19188C7*), 0, "S19188C6");
    check_base_class_offset(lv, (S19188C7*), 0, "S19188C6");
    /*is_ambiguous_... S19188C6::S3625C33_nt */ AMB_check_base_class_offset(lv, (S3625C33_nt*), ABISELECT(96,44), "S19188C6");
    /*is_ambiguous_... S19188C6::S19188C8 */ AMB_check_base_class_offset(lv, (S19188C8*), ABISELECT(104,48), "S19188C6");
    /*is_ambiguous_... S19188C6::S19188C5_nt */ AMB_check_base_class_offset(lv, (S19188C5_nt*), ABISELECT(120,56), "S19188C6");
    check_field_offset(lv, s19188c6f0, ABISELECT(136,68), "S19188C6.s19188c6f0");
    test_class_info(&lv, &cd_S19188C6);
    dp->~S19188C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19188C6(Test_S19188C6, "S19188C6", ABISELECT(224,120));

#else // __cplusplus

extern void _ZN8S19188C6C1Ev();
extern void _ZN8S19188C6D1Ev();
Name_Map name_map_S19188C6[] = {
  NSPAIR(_ZN8S19188C6C1Ev),
  NSPAIR(_ZN8S19188C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3625C33_nt;
extern VTBL_ENTRY _ZTI11S3625C33_nt[];
extern Class_Descriptor cd_S19188C2;
extern VTBL_ENTRY _ZTI8S19188C2[];
extern  VTBL_ENTRY _ZTV8S19188C2[];
extern Class_Descriptor cd_S3625C33_nt;
extern VTBL_ENTRY _ZTI11S3625C33_nt[];
extern Class_Descriptor cd_S19188C5_nt;
extern VTBL_ENTRY _ZTI11S19188C5_nt[];
extern  VTBL_ENTRY _ZTV11S19188C5_nt[];
extern Class_Descriptor cd_S3625C33_nt;
extern VTBL_ENTRY _ZTI11S3625C33_nt[];
extern Class_Descriptor cd_S19188C8;
extern VTBL_ENTRY _ZTI8S19188C8[];
extern  VTBL_ENTRY _ZTV8S19188C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19188C8[];
extern Class_Descriptor cd_S19188C7;
extern VTBL_ENTRY _ZTI8S19188C7[];
extern  VTBL_ENTRY _ZTV8S19188C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19188C7[];
extern Class_Descriptor cd_S3625C33_nt;
extern VTBL_ENTRY _ZTI11S3625C33_nt[];
extern Class_Descriptor cd_S19188C8;
extern VTBL_ENTRY _ZTI8S19188C8[];
extern  VTBL_ENTRY _ZTV8S19188C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19188C8[];
extern Class_Descriptor cd_S19188C5_nt;
extern VTBL_ENTRY _ZTI11S19188C5_nt[];
extern  VTBL_ENTRY _ZTV11S19188C5_nt[];
static Base_Class bases_S19188C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3625C33_nt,    ABISELECT(152,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
    1, //immediately_derived
  0, 0},
  {&cd_S19188C2,    ABISELECT(144,72), //bcp->offset
    16, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3625C33_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
    -1, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S19188C5_nt,    ABISELECT(200,104), //bcp->offset
    20, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S3625C33_nt,    ABISELECT(216,116), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19188C8,    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
    3, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S19188C7,    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},
  {&cd_S3625C33_nt,    ABISELECT(96,44), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S19188C8,    ABISELECT(104,48), //bcp->offset
    6, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19188C5_nt,    ABISELECT(120,56), //bcp->offset
    11, //bcp->virtual_function_table_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 _ZTI8S19188C6[];
extern void _ZN8S19188C72v8Ev();
extern void _ZN11S19188C5_nt2v5Ev();
extern void _ZN11S19188C5_nt2v6Ev();
extern void _ZN11S19188C5_nt2v7Ev();
extern void _ZN8S19188C22v4Ev();
extern void _ZN11S19188C5_nt2v5Ev();
extern void _ZN11S19188C5_nt2v6Ev();
extern void _ZN11S19188C5_nt2v7Ev();
static  VTBL_ENTRY vtc_S19188C6[] = {
  ABISELECT(216,116),
  ABISELECT(200,104),
  ABISELECT(144,72),
  0,
  (VTBL_ENTRY)&(_ZTI8S19188C6[0]),
  (VTBL_ENTRY)&_ZN8S19188C72v8Ev,
  ABISELECT(112,68),
  ABISELECT(96,56),
  ABISELECT(40,24),
  ABISELECT(-104,-48),
  (VTBL_ENTRY)&(_ZTI8S19188C6[0]),
  ABISELECT(-120,-56),
  (VTBL_ENTRY)&(_ZTI8S19188C6[0]),
  (VTBL_ENTRY)&_ZN11S19188C5_nt2v5Ev,
  (VTBL_ENTRY)&_ZN11S19188C5_nt2v6Ev,
  (VTBL_ENTRY)&_ZN11S19188C5_nt2v7Ev,
  0,
  ABISELECT(-144,-72),
  (VTBL_ENTRY)&(_ZTI8S19188C6[0]),
  (VTBL_ENTRY)&_ZN8S19188C22v4Ev,
  0,
  0,
  0,
  ABISELECT(-200,-104),
  (VTBL_ENTRY)&(_ZTI8S19188C6[0]),
  (VTBL_ENTRY)&_ZN11S19188C5_nt2v5Ev,
  (VTBL_ENTRY)&_ZN11S19188C5_nt2v6Ev,
  (VTBL_ENTRY)&_ZN11S19188C5_nt2v7Ev,
};
extern VTBL_ENTRY _ZTV8S19188C6[];
extern void _ZN8S19188C72v8Ev();
static  VTBL_ENTRY _tg__ZTV8S19188C7__8S19188C6[] = {
  ABISELECT(216,116),
  ABISELECT(200,104),
  ABISELECT(144,72),
  0,
  (VTBL_ENTRY)&(_ZTI8S19188C7[0]),
  (VTBL_ENTRY)&_ZN8S19188C72v8Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19188C88S19188C7__8S19188C6[] = {
  ABISELECT(216,116),
  ABISELECT(200,104),
  ABISELECT(144,72),
  0,
  (VTBL_ENTRY)&(_ZTI8S19188C8[0]),
};
extern void _ZN8S19188C22v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19188C2__8S19188C88S19188C7__8S19188C6[] = {
  0,
  ABISELECT(-144,-72),
  (VTBL_ENTRY)&(_ZTI8S19188C8[0]),
  (VTBL_ENTRY)&_ZN8S19188C22v4Ev,
};
extern void _ZN11S19188C5_nt2v5Ev();
extern void _ZN11S19188C5_nt2v6Ev();
extern void _ZN11S19188C5_nt2v7Ev();
static  VTBL_ENTRY _tg__ZTV11S19188C5_nt__8S19188C88S19188C7__8S19188C6[] = {
  0,
  0,
  0,
  ABISELECT(-200,-104),
  (VTBL_ENTRY)&(_ZTI8S19188C8[0]),
  (VTBL_ENTRY)&_ZN11S19188C5_nt2v5Ev,
  (VTBL_ENTRY)&_ZN11S19188C5_nt2v6Ev,
  (VTBL_ENTRY)&_ZN11S19188C5_nt2v7Ev,
};
extern void _ZN8S19188C22v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19188C2__8S19188C7__8S19188C6[] = {
  0,
  ABISELECT(-144,-72),
  (VTBL_ENTRY)&(_ZTI8S19188C7[0]),
  (VTBL_ENTRY)&_ZN8S19188C22v4Ev,
};
extern void _ZN11S19188C5_nt2v5Ev();
extern void _ZN11S19188C5_nt2v6Ev();
extern void _ZN11S19188C5_nt2v7Ev();
static  VTBL_ENTRY _tg__ZTV11S19188C5_nt__8S19188C7__8S19188C6[] = {
  0,
  0,
  0,
  ABISELECT(-200,-104),
  (VTBL_ENTRY)&(_ZTI8S19188C7[0]),
  (VTBL_ENTRY)&_ZN11S19188C5_nt2v5Ev,
  (VTBL_ENTRY)&_ZN11S19188C5_nt2v6Ev,
  (VTBL_ENTRY)&_ZN11S19188C5_nt2v7Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19188C8__A1__8S19188C6[] = {
  ABISELECT(112,68),
  ABISELECT(96,56),
  ABISELECT(40,24),
  0,
  (VTBL_ENTRY)&(_ZTI8S19188C8[0]),
};
extern void _ZN8S19188C22v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19188C2__8S19188C8__A1__8S19188C6[] = {
  0,
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI8S19188C8[0]),
  (VTBL_ENTRY)&_ZN8S19188C22v4Ev,
};
extern void _ZN11S19188C5_nt2v5Ev();
extern void _ZN11S19188C5_nt2v6Ev();
extern void _ZN11S19188C5_nt2v7Ev();
static  VTBL_ENTRY _tg__ZTV11S19188C5_nt__8S19188C8__A1__8S19188C6[] = {
  0,
  0,
  0,
  ABISELECT(-96,-56),
  (VTBL_ENTRY)&(_ZTI8S19188C8[0]),
  (VTBL_ENTRY)&_ZN11S19188C5_nt2v5Ev,
  (VTBL_ENTRY)&_ZN11S19188C5_nt2v6Ev,
  (VTBL_ENTRY)&_ZN11S19188C5_nt2v7Ev,
};
static  VTT_ENTRY vtt_S19188C6[] = {
  {&(_ZTV8S19188C6[5]),  5,28},
  {&(_tg__ZTV8S19188C7__8S19188C6[5]),  5,6},
  {&(_tg__ZTV8S19188C88S19188C7__8S19188C6[5]),  5,5},
  {&(_tg__ZTV8S19188C2__8S19188C88S19188C7__8S19188C6[3]),  3,4},
  {&(_tg__ZTV11S19188C5_nt__8S19188C88S19188C7__8S19188C6[5]),  5,8},
  {&(_tg__ZTV8S19188C2__8S19188C7__8S19188C6[3]),  3,4},
  {&(_tg__ZTV11S19188C5_nt__8S19188C7__8S19188C6[5]),  5,8},
  {&(_tg__ZTV8S19188C8__A1__8S19188C6[5]),  5,5},
  {&(_tg__ZTV8S19188C2__8S19188C8__A1__8S19188C6[3]),  3,4},
  {&(_tg__ZTV11S19188C5_nt__8S19188C8__A1__8S19188C6[5]),  5,8},
  {&(_ZTV8S19188C6[19]),  19,28},
  {&(_ZTV8S19188C6[25]),  25,28},
  {&(_ZTV8S19188C6[11]),  11,28},
};
extern VTBL_ENTRY _ZTI8S19188C6[];
extern  VTBL_ENTRY _ZTV8S19188C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19188C6[];
Class_Descriptor cd_S19188C6 = {  "S19188C6", // class name
  bases_S19188C6, 10,
  &(vtc_S19188C6[0]), // expected_vtbl_contents
  &(vtt_S19188C6[0]), // expected_vtt_contents
  ABISELECT(224,120), // object size
  NSPAIRA(_ZTI8S19188C6),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S19188C6),28, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19188C6),13, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19188C4  : S19188C5_nt , S19188C6 {
  int s19188c4f0[2];
  char s19188c4f1;
  char s19188c4f2:7;
  long double s19188c4f3[2];
  virtual  ~S19188C4(); // _ZN8S19188C4D2Ev
  virtual void  v9(); // _ZN8S19188C42v9Ev
  virtual void  v10(); // _ZN8S19188C43v10Ev
  S19188C4(); // tgen
};
//SIG(-1 S19188C4) C1{ BC2{ v3 v4 v5 FL} BC3{ VBC4{ BC5{ m Fp} v6 FD FC5 FC5 FC5} BC6{ VBC4 BC5 VBC2 BC7{ VBC4 VBC2 VBC5 Fp} v7 FC4} BC5 BC7 BC2 Fi} vd v1 v2 Fi[2] Fc Fc:7 FD[2]}


 S19188C4 ::~S19188C4(){ note_dtor("S19188C4", this);}
void  S19188C4 ::v9(){vfunc_called(this, "_ZN8S19188C42v9Ev");}
void  S19188C4 ::v10(){vfunc_called(this, "_ZN8S19188C43v10Ev");}
S19188C4 ::S19188C4(){ note_ctor("S19188C4", this);} // tgen

static void Test_S19188C4()
{
  extern Class_Descriptor cd_S19188C4;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(19,43)];
    init_test(&cd_S19188C4, buf);
    S19188C4 *dp, &lv = *(dp=new (buf) S19188C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(288,168), "sizeof(S19188C4)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19188C4)");
    /*is_ambiguous_... S19188C4::S19188C5_nt */ AMB_check_base_class_offset(lv, (S19188C5_nt*), 0, "S19188C4");
    check_base_class_offset(lv, (S3625C33_nt*)(S19188C2*), ABISELECT(216,124), "S19188C4");
    check_base_class_offset(lv, (S19188C2*)(S19188C6*), ABISELECT(208,120), "S19188C4");
    check_base_class_offset(lv, (S19188C2*)(S19188C7*)(S19188C6*), ABISELECT(208,120), "S19188C4");
    check_base_class_offset(lv, (S19188C2*)(S19188C8*)(S19188C7*)(S19188C6*), ABISELECT(208,120), "S19188C4");
    /*is_ambiguous_... S19188C6::S19188C8 */ AMB_check_base_class_offset(lv, (S19188C2*)(S19188C8*)(S19188C6*), ABISELECT(208,120), "S19188C4");
    /*is_ambiguous_... S19188C7::S3625C33_nt */ AMB_check_base_class_offset(lv, (S3625C33_nt*)(S19188C7*)(S19188C6*), ABISELECT(32,20), "S19188C4");
    check_base_class_offset(lv, (S19188C5_nt*)(S19188C7*)(S19188C6*), ABISELECT(264,152), "S19188C4");
    check_base_class_offset(lv, (S19188C5_nt*)(S19188C8*)(S19188C7*)(S19188C6*), ABISELECT(264,152), "S19188C4");
    /*is_ambiguous_... S19188C6::S19188C8 */ AMB_check_base_class_offset(lv, (S19188C5_nt*)(S19188C8*)(S19188C6*), ABISELECT(264,152), "S19188C4");
    /*is_ambiguous_... S19188C8::S3625C33_nt */ AMB_check_base_class_offset(lv, (S3625C33_nt*)(S19188C8*)(S19188C7*)(S19188C6*), ABISELECT(280,164), "S19188C4");
    /*is_ambiguous_... S19188C6::S19188C8 */ AMB_check_base_class_offset(lv, (S3625C33_nt*)(S19188C8*)(S19188C6*), ABISELECT(280,164), "S19188C4");
    check_base_class_offset(lv, (S19188C8*)(S19188C7*)(S19188C6*), ABISELECT(16,12), "S19188C4");
    check_base_class_offset(lv, (S19188C7*)(S19188C6*), ABISELECT(16,12), "S19188C4");
    /*is_ambiguous_... S19188C6::S3625C33_nt */ AMB_check_base_class_offset(lv, (S3625C33_nt*)(S19188C6*), ABISELECT(112,56), "S19188C4");
    /*is_ambiguous_... S19188C6::S19188C8 */ AMB_check_base_class_offset(lv, (S19188C8*)(S19188C6*), ABISELECT(120,60), "S19188C4");
    /*is_ambiguous_... S19188C6::S19188C5_nt */ AMB_check_base_class_offset(lv, (S19188C5_nt*)(S19188C6*), ABISELECT(136,68), "S19188C4");
    check_base_class_offset(lv, (S19188C6*), ABISELECT(16,12), "S19188C4");
    check_field_offset(lv, s19188c4f0, ABISELECT(156,84), "S19188C4.s19188c4f0");
    check_field_offset(lv, s19188c4f1, ABISELECT(164,92), "S19188C4.s19188c4f1");
    set_bf_and_test(lv, s19188c4f2, ABISELECT(165,93), 0, 7, 1, "S19188C4");
    set_bf_and_test(lv, s19188c4f2, ABISELECT(165,93), 0, 7, hide_sll(1LL<<6), "S19188C4");
    check_field_offset(lv, s19188c4f3, ABISELECT(176,96), "S19188C4.s19188c4f3");
    test_class_info(&lv, &cd_S19188C4);
    dp->~S19188C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19188C4(Test_S19188C4, "S19188C4", ABISELECT(288,168));

#else // __cplusplus

extern void _ZN8S19188C4C1Ev();
extern void _ZN8S19188C4D2Ev();
Name_Map name_map_S19188C4[] = {
  NSPAIR(_ZN8S19188C4C1Ev),
  NSPAIR(_ZN8S19188C4D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19188C5_nt;
extern VTBL_ENTRY _ZTI11S19188C5_nt[];
extern  VTBL_ENTRY _ZTV11S19188C5_nt[];
extern Class_Descriptor cd_S3625C33_nt;
extern VTBL_ENTRY _ZTI11S3625C33_nt[];
extern Class_Descriptor cd_S19188C2;
extern VTBL_ENTRY _ZTI8S19188C2[];
extern  VTBL_ENTRY _ZTV8S19188C2[];
extern Class_Descriptor cd_S3625C33_nt;
extern VTBL_ENTRY _ZTI11S3625C33_nt[];
extern Class_Descriptor cd_S19188C5_nt;
extern VTBL_ENTRY _ZTI11S19188C5_nt[];
extern  VTBL_ENTRY _ZTV11S19188C5_nt[];
extern Class_Descriptor cd_S3625C33_nt;
extern VTBL_ENTRY _ZTI11S3625C33_nt[];
extern Class_Descriptor cd_S19188C8;
extern VTBL_ENTRY _ZTI8S19188C8[];
extern  VTBL_ENTRY _ZTV8S19188C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19188C8[];
extern Class_Descriptor cd_S19188C7;
extern VTBL_ENTRY _ZTI8S19188C7[];
extern  VTBL_ENTRY _ZTV8S19188C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19188C7[];
extern Class_Descriptor cd_S3625C33_nt;
extern VTBL_ENTRY _ZTI11S3625C33_nt[];
extern Class_Descriptor cd_S19188C8;
extern VTBL_ENTRY _ZTI8S19188C8[];
extern  VTBL_ENTRY _ZTV8S19188C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19188C8[];
extern Class_Descriptor cd_S19188C5_nt;
extern VTBL_ENTRY _ZTI11S19188C5_nt[];
extern  VTBL_ENTRY _ZTV11S19188C5_nt[];
extern Class_Descriptor cd_S19188C6;
extern VTBL_ENTRY _ZTI8S19188C6[];
extern  VTBL_ENTRY _ZTV8S19188C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19188C6[];
static Base_Class bases_S19188C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19188C5_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_S3625C33_nt,    ABISELECT(216,124), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19188C2,    ABISELECT(208,120), //bcp->offset
    28, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S3625C33_nt,    ABISELECT(32,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
    7, //immediately_derived
  0, 0},
  {&cd_S19188C5_nt,    ABISELECT(264,152), //bcp->offset
    32, //bcp->virtual_function_table_offset
    5, //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
    6, //immediately_derived
  0, 1},
  {&cd_S3625C33_nt,    ABISELECT(280,164), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19188C8,    ABISELECT(16,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S19188C7,    ABISELECT(16,12), //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
    5, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S3625C33_nt,    ABISELECT(112,56), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19188C8,    ABISELECT(120,60), //bcp->offset
    18, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S19188C5_nt,    ABISELECT(136,68), //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
    7, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S19188C6,    ABISELECT(16,12), //bcp->offset
    12, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19188C4[];
extern void _ZN11S19188C5_nt2v5Ev();
extern void _ZN11S19188C5_nt2v6Ev();
extern void _ZN11S19188C5_nt2v7Ev();
extern void _ZN8S19188C4D1Ev();
extern void _ZN8S19188C4D0Ev();
extern void _ZN8S19188C42v9Ev();
extern void _ZN8S19188C43v10Ev();
extern void _ZN8S19188C72v8Ev();
extern void _ZN11S19188C5_nt2v5Ev();
extern void _ZN11S19188C5_nt2v6Ev();
extern void _ZN11S19188C5_nt2v7Ev();
extern void _ZN8S19188C22v4Ev();
extern void _ZN11S19188C5_nt2v5Ev();
extern void _ZN11S19188C5_nt2v6Ev();
extern void _ZN11S19188C5_nt2v7Ev();
static  VTBL_ENTRY vtc_S19188C4[] = {
  ABISELECT(280,164),
  ABISELECT(264,152),
  ABISELECT(208,120),
  0,
  (VTBL_ENTRY)&(_ZTI8S19188C4[0]),
  (VTBL_ENTRY)&_ZN11S19188C5_nt2v5Ev,
  (VTBL_ENTRY)&_ZN11S19188C5_nt2v6Ev,
  (VTBL_ENTRY)&_ZN11S19188C5_nt2v7Ev,
  (VTBL_ENTRY)&_ZN8S19188C4D1Ev,
  (VTBL_ENTRY)&_ZN8S19188C4D0Ev,
  (VTBL_ENTRY)&_ZN8S19188C42v9Ev,
  (VTBL_ENTRY)&_ZN8S19188C43v10Ev,
  ABISELECT(264,152),
  ABISELECT(248,140),
  ABISELECT(192,108),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI8S19188C4[0]),
  (VTBL_ENTRY)&_ZN8S19188C72v8Ev,
  ABISELECT(160,104),
  ABISELECT(144,92),
  ABISELECT(88,60),
  ABISELECT(-120,-60),
  (VTBL_ENTRY)&(_ZTI8S19188C4[0]),
  ABISELECT(-136,-68),
  (VTBL_ENTRY)&(_ZTI8S19188C4[0]),
  (VTBL_ENTRY)&_ZN11S19188C5_nt2v5Ev,
  (VTBL_ENTRY)&_ZN11S19188C5_nt2v6Ev,
  (VTBL_ENTRY)&_ZN11S19188C5_nt2v7Ev,
  0,
  ABISELECT(-208,-120),
  (VTBL_ENTRY)&(_ZTI8S19188C4[0]),
  (VTBL_ENTRY)&_ZN8S19188C22v4Ev,
  0,
  0,
  0,
  ABISELECT(-264,-152),
  (VTBL_ENTRY)&(_ZTI8S19188C4[0]),
  (VTBL_ENTRY)&_ZN11S19188C5_nt2v5Ev,
  (VTBL_ENTRY)&_ZN11S19188C5_nt2v6Ev,
  (VTBL_ENTRY)&_ZN11S19188C5_nt2v7Ev,
};
extern VTBL_ENTRY _ZTV8S19188C4[];
extern void _ZN8S19188C72v8Ev();
static  VTBL_ENTRY _tg__ZTV8S19188C6__8S19188C4[] = {
  ABISELECT(264,152),
  ABISELECT(248,140),
  ABISELECT(192,108),
  0,
  (VTBL_ENTRY)&(_ZTI8S19188C6[0]),
  (VTBL_ENTRY)&_ZN8S19188C72v8Ev,
};
extern void _ZN8S19188C72v8Ev();
static  VTBL_ENTRY _tg__ZTV8S19188C78S19188C6__8S19188C4[] = {
  ABISELECT(264,152),
  ABISELECT(248,140),
  ABISELECT(192,108),
  0,
  (VTBL_ENTRY)&(_ZTI8S19188C7[0]),
  (VTBL_ENTRY)&_ZN8S19188C72v8Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19188C88S19188C78S19188C6__8S19188C4[] = {
  ABISELECT(264,152),
  ABISELECT(248,140),
  ABISELECT(192,108),
  0,
  (VTBL_ENTRY)&(_ZTI8S19188C8[0]),
};
extern void _ZN8S19188C22v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19188C2__8S19188C88S19188C78S19188C6__8S19188C4[] = {
  0,
  ABISELECT(-192,-108),
  (VTBL_ENTRY)&(_ZTI8S19188C8[0]),
  (VTBL_ENTRY)&_ZN8S19188C22v4Ev,
};
extern void _ZN11S19188C5_nt2v5Ev();
extern void _ZN11S19188C5_nt2v6Ev();
extern void _ZN11S19188C5_nt2v7Ev();
static  VTBL_ENTRY _tg__ZTV11S19188C5_nt__8S19188C88S19188C78S19188C6__8S19188C4[] = {
  0,
  0,
  0,
  ABISELECT(-248,-140),
  (VTBL_ENTRY)&(_ZTI8S19188C8[0]),
  (VTBL_ENTRY)&_ZN11S19188C5_nt2v5Ev,
  (VTBL_ENTRY)&_ZN11S19188C5_nt2v6Ev,
  (VTBL_ENTRY)&_ZN11S19188C5_nt2v7Ev,
};
extern void _ZN8S19188C22v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19188C2__8S19188C78S19188C6__8S19188C4[] = {
  0,
  ABISELECT(-192,-108),
  (VTBL_ENTRY)&(_ZTI8S19188C7[0]),
  (VTBL_ENTRY)&_ZN8S19188C22v4Ev,
};
extern void _ZN11S19188C5_nt2v5Ev();
extern void _ZN11S19188C5_nt2v6Ev();
extern void _ZN11S19188C5_nt2v7Ev();
static  VTBL_ENTRY _tg__ZTV11S19188C5_nt__8S19188C78S19188C6__8S19188C4[] = {
  0,
  0,
  0,
  ABISELECT(-248,-140),
  (VTBL_ENTRY)&(_ZTI8S19188C7[0]),
  (VTBL_ENTRY)&_ZN11S19188C5_nt2v5Ev,
  (VTBL_ENTRY)&_ZN11S19188C5_nt2v6Ev,
  (VTBL_ENTRY)&_ZN11S19188C5_nt2v7Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19188C88S19188C6__A1__8S19188C4[] = {
  ABISELECT(160,104),
  ABISELECT(144,92),
  ABISELECT(88,60),
  0,
  (VTBL_ENTRY)&(_ZTI8S19188C8[0]),
};
extern void _ZN8S19188C22v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19188C2__8S19188C88S19188C6__A1__8S19188C4[] = {
  0,
  ABISELECT(-88,-60),
  (VTBL_ENTRY)&(_ZTI8S19188C8[0]),
  (VTBL_ENTRY)&_ZN8S19188C22v4Ev,
};
extern void _ZN11S19188C5_nt2v5Ev();
extern void _ZN11S19188C5_nt2v6Ev();
extern void _ZN11S19188C5_nt2v7Ev();
static  VTBL_ENTRY _tg__ZTV11S19188C5_nt__8S19188C88S19188C6__A1__8S19188C4[] = {
  0,
  0,
  0,
  ABISELECT(-144,-92),
  (VTBL_ENTRY)&(_ZTI8S19188C8[0]),
  (VTBL_ENTRY)&_ZN11S19188C5_nt2v5Ev,
  (VTBL_ENTRY)&_ZN11S19188C5_nt2v6Ev,
  (VTBL_ENTRY)&_ZN11S19188C5_nt2v7Ev,
};
extern void _ZN8S19188C22v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19188C2__8S19188C6__8S19188C4[] = {
  0,
  ABISELECT(-192,-108),
  (VTBL_ENTRY)&(_ZTI8S19188C6[0]),
  (VTBL_ENTRY)&_ZN8S19188C22v4Ev,
};
extern void _ZN11S19188C5_nt2v5Ev();
extern void _ZN11S19188C5_nt2v6Ev();
extern void _ZN11S19188C5_nt2v7Ev();
static  VTBL_ENTRY _tg__ZTV11S19188C5_nt__8S19188C6__8S19188C4[] = {
  0,
  0,
  0,
  ABISELECT(-248,-140),
  (VTBL_ENTRY)&(_ZTI8S19188C6[0]),
  (VTBL_ENTRY)&_ZN11S19188C5_nt2v5Ev,
  (VTBL_ENTRY)&_ZN11S19188C5_nt2v6Ev,
  (VTBL_ENTRY)&_ZN11S19188C5_nt2v7Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19188C8__A1__8S19188C6__8S19188C4[] = {
  ABISELECT(160,104),
  ABISELECT(144,92),
  ABISELECT(88,60),
  ABISELECT(-104,-48),
  (VTBL_ENTRY)&(_ZTI8S19188C6[0]),
};
static  VTT_ENTRY vtt_S19188C4[] = {
  {&(_ZTV8S19188C4[5]),  5,40},
  {&(_tg__ZTV8S19188C6__8S19188C4[5]),  5,6},
  {&(_tg__ZTV8S19188C78S19188C6__8S19188C4[5]),  5,6},
  {&(_tg__ZTV8S19188C88S19188C78S19188C6__8S19188C4[5]),  5,5},
  {&(_tg__ZTV8S19188C2__8S19188C88S19188C78S19188C6__8S19188C4[3]),  3,4},
  {&(_tg__ZTV11S19188C5_nt__8S19188C88S19188C78S19188C6__8S19188C4[5]),  5,8},
  {&(_tg__ZTV8S19188C2__8S19188C78S19188C6__8S19188C4[3]),  3,4},
  {&(_tg__ZTV11S19188C5_nt__8S19188C78S19188C6__8S19188C4[5]),  5,8},
  {&(_tg__ZTV8S19188C88S19188C6__A1__8S19188C4[5]),  5,5},
  {&(_tg__ZTV8S19188C2__8S19188C88S19188C6__A1__8S19188C4[3]),  3,4},
  {&(_tg__ZTV11S19188C5_nt__8S19188C88S19188C6__A1__8S19188C4[5]),  5,8},
  {&(_tg__ZTV8S19188C2__8S19188C6__8S19188C4[3]),  3,4},
  {&(_tg__ZTV11S19188C5_nt__8S19188C6__8S19188C4[5]),  5,8},
  {&(_tg__ZTV8S19188C8__A1__8S19188C6__8S19188C4[5]),  5,5},
  {&(_ZTV8S19188C4[17]),  17,40},
  {&(_ZTV8S19188C4[31]),  31,40},
  {&(_ZTV8S19188C4[37]),  37,40},
  {&(_ZTV8S19188C4[23]),  23,40},
};
extern VTBL_ENTRY _ZTI8S19188C4[];
extern  VTBL_ENTRY _ZTV8S19188C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19188C4[];
Class_Descriptor cd_S19188C4 = {  "S19188C4", // class name
  bases_S19188C4, 12,
  &(vtc_S19188C4[0]), // expected_vtbl_contents
  &(vtt_S19188C4[0]), // expected_vtt_contents
  ABISELECT(288,168), // object size
  NSPAIRA(_ZTI8S19188C4),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19188C4),40, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19188C4),18, //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  S19188C1  : virtual S19188C2 , S3625C33_nt , virtual S19188C4 , S19188C6 {
  void *s19188c1f0;
  int s19188c1f1;
  void *s19188c1f2;
  int s19188c1f3;
  short s19188c1f4[3];
  int s19188c1f5;
  virtual void  v1(); // _ZN8S19188C12v1Ev
  virtual void  v2(); // _ZN8S19188C12v2Ev
  virtual void  v3(); // _ZN8S19188C12v3Ev
  ~S19188C1(); // tgen
  S19188C1(); // tgen
};
//SIG(1 S19188C1) C1{ VBC2{ BC3{ m Fp} v4 FD FC3 FC3 FC3} BC3 VBC4{ BC5{ v5 v6 v7 FL} BC6{ VBC2 BC7{ VBC2 BC3 VBC5 BC8{ VBC2 VBC5 VBC3 Fp} v8 FC2} BC3 BC8 BC5 Fi} vd v9 v10 Fi[2] Fc Fc:7 FD[2]} BC6 v1 v2 v3 Fp Fi Fp Fi Fs[3] Fi}


void  S19188C1 ::v1(){vfunc_called(this, "_ZN8S19188C12v1Ev");}
void  S19188C1 ::v2(){vfunc_called(this, "_ZN8S19188C12v2Ev");}
void  S19188C1 ::v3(){vfunc_called(this, "_ZN8S19188C12v3Ev");}
S19188C1 ::~S19188C1(){ note_dtor("S19188C1", this);} // tgen
S19188C1 ::S19188C1(){ note_ctor("S19188C1", this);} // tgen

static void Test_S19188C1()
{
  extern Class_Descriptor cd_S19188C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(32,69)];
    init_test(&cd_S19188C1, buf);
    S19188C1 *dp, &lv = *(dp=new (buf) S19188C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(496,272), "sizeof(S19188C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19188C1)");
    check_base_class_offset(lv, (S3625C33_nt*)(S19188C2*), ABISELECT(200,108), "S19188C1");
    check_base_class_offset(lv, (S19188C2*), ABISELECT(192,104), "S19188C1");
    check_base_class_offset(lv, (S19188C2*)(S19188C6*)(S19188C4*), ABISELECT(192,104), "S19188C1");
    check_base_class_offset(lv, (S19188C2*)(S19188C7*)(S19188C6*)(S19188C4*), ABISELECT(192,104), "S19188C1");
    check_base_class_offset(lv, (S19188C2*)(S19188C8*)(S19188C7*)(S19188C6*)(S19188C4*), ABISELECT(192,104), "S19188C1");
    /*is_ambiguous_... S19188C6::S19188C8 */ AMB_check_base_class_offset(lv, (S19188C2*)(S19188C8*)(S19188C6*)(S19188C4*), ABISELECT(192,104), "S19188C1");
    /*is_ambiguous_... S19188C1::S19188C6 */ AMB_check_base_class_offset(lv, (S19188C2*)(S19188C6*), ABISELECT(192,104), "S19188C1");
    /*is_ambiguous_... S19188C1::S19188C6 */ AMB_check_base_class_offset(lv, (S19188C2*)(S19188C7*)(S19188C6*), ABISELECT(192,104), "S19188C1");
    /*is_ambiguous_... S19188C1::S19188C6 */ AMB_check_base_class_offset(lv, (S19188C2*)(S19188C8*)(S19188C7*)(S19188C6*), ABISELECT(192,104), "S19188C1");
    /*is_ambiguous_... S19188C1::S19188C6 */ AMB_check_base_class_offset(lv, (S19188C2*)(S19188C8*)(S19188C6*), ABISELECT(192,104), "S19188C1");
    /*is_ambiguous_... S19188C1::S3625C33_nt */ AMB_check_base_class_offset(lv, (S3625C33_nt*), ABISELECT(144,72), "S19188C1");
    /*is_ambiguous_... S19188C4::S19188C5_nt */ AMB_check_base_class_offset(lv, (S19188C5_nt*)(S19188C4*), ABISELECT(256,136), "S19188C1");
    /*is_ambiguous_... S19188C7::S3625C33_nt */ AMB_check_base_class_offset(lv, (S3625C33_nt*)(S19188C7*)(S19188C6*)(S19188C4*), ABISELECT(288,156), "S19188C1");
    check_base_class_offset(lv, (S19188C5_nt*)(S19188C7*)(S19188C6*)(S19188C4*), ABISELECT(464,256), "S19188C1");
    check_base_class_offset(lv, (S19188C5_nt*)(S19188C8*)(S19188C7*)(S19188C6*)(S19188C4*), ABISELECT(464,256), "S19188C1");
    /*is_ambiguous_... S19188C6::S19188C8 */ AMB_check_base_class_offset(lv, (S19188C5_nt*)(S19188C8*)(S19188C6*)(S19188C4*), ABISELECT(464,256), "S19188C1");
    /*is_ambiguous_... S19188C1::S19188C6 */ AMB_check_base_class_offset(lv, (S19188C5_nt*)(S19188C7*)(S19188C6*), ABISELECT(464,256), "S19188C1");
    /*is_ambiguous_... S19188C1::S19188C6 */ AMB_check_base_class_offset(lv, (S19188C5_nt*)(S19188C8*)(S19188C7*)(S19188C6*), ABISELECT(464,256), "S19188C1");
    /*is_ambiguous_... S19188C1::S19188C6 */ AMB_check_base_class_offset(lv, (S19188C5_nt*)(S19188C8*)(S19188C6*), ABISELECT(464,256), "S19188C1");
    /*is_ambiguous_... S19188C8::S3625C33_nt */ AMB_check_base_class_offset(lv, (S3625C33_nt*)(S19188C8*)(S19188C7*)(S19188C6*)(S19188C4*), ABISELECT(480,268), "S19188C1");
    /*is_ambiguous_... S19188C6::S19188C8 */ AMB_check_base_class_offset(lv, (S3625C33_nt*)(S19188C8*)(S19188C6*)(S19188C4*), ABISELECT(480,268), "S19188C1");
    /*is_ambiguous_... S19188C1::S19188C6 */ AMB_check_base_class_offset(lv, (S3625C33_nt*)(S19188C8*)(S19188C7*)(S19188C6*), ABISELECT(480,268), "S19188C1");
    /*is_ambiguous_... S19188C1::S19188C6 */ AMB_check_base_class_offset(lv, (S3625C33_nt*)(S19188C8*)(S19188C6*), ABISELECT(480,268), "S19188C1");
    check_base_class_offset(lv, (S19188C8*)(S19188C7*)(S19188C6*)(S19188C4*), ABISELECT(272,148), "S19188C1");
    check_base_class_offset(lv, (S19188C7*)(S19188C6*)(S19188C4*), ABISELECT(272,148), "S19188C1");
    /*is_ambiguous_... S19188C6::S3625C33_nt */ AMB_check_base_class_offset(lv, (S3625C33_nt*)(S19188C6*)(S19188C4*), ABISELECT(368,192), "S19188C1");
    /*is_ambiguous_... S19188C6::S19188C8 */ AMB_check_base_class_offset(lv, (S19188C8*)(S19188C6*)(S19188C4*), ABISELECT(376,196), "S19188C1");
    /*is_ambiguous_... S19188C6::S19188C5_nt */ AMB_check_base_class_offset(lv, (S19188C5_nt*)(S19188C6*)(S19188C4*), ABISELECT(392,204), "S19188C1");
    check_base_class_offset(lv, (S19188C6*)(S19188C4*), ABISELECT(272,148), "S19188C1");
    check_base_class_offset(lv, (S19188C4*), ABISELECT(256,136), "S19188C1");
    /*is_ambiguous_... S19188C1::S19188C6 */ AMB_check_base_class_offset(lv, (S3625C33_nt*)(S19188C7*)(S19188C6*), ABISELECT(16,8), "S19188C1");
    /*is_ambiguous_... S19188C1::S19188C6 */ AMB_check_base_class_offset(lv, (S19188C8*)(S19188C7*)(S19188C6*), 0, "S19188C1");
    /*is_ambiguous_... S19188C1::S19188C6 */ AMB_check_base_class_offset(lv, (S19188C7*)(S19188C6*), 0, "S19188C1");
    /*is_ambiguous_... S19188C1::S19188C6 */ AMB_check_base_class_offset(lv, (S3625C33_nt*)(S19188C6*), ABISELECT(96,44), "S19188C1");
    /*is_ambiguous_... S19188C1::S19188C6 */ AMB_check_base_class_offset(lv, (S19188C8*)(S19188C6*), ABISELECT(104,48), "S19188C1");
    /*is_ambiguous_... S19188C1::S19188C6 */ AMB_check_base_class_offset(lv, (S19188C5_nt*)(S19188C6*), ABISELECT(120,56), "S19188C1");
    /*is_ambiguous_... S19188C1::S19188C6 */ AMB_check_base_class_offset(lv, (S19188C6*), 0, "S19188C1");
    check_field_offset(lv, s19188c1f0, ABISELECT(152,76), "S19188C1.s19188c1f0");
    check_field_offset(lv, s19188c1f1, ABISELECT(160,80), "S19188C1.s19188c1f1");
    check_field_offset(lv, s19188c1f2, ABISELECT(168,84), "S19188C1.s19188c1f2");
    check_field_offset(lv, s19188c1f3, ABISELECT(176,88), "S19188C1.s19188c1f3");
    check_field_offset(lv, s19188c1f4, ABISELECT(180,92), "S19188C1.s19188c1f4");
    check_field_offset(lv, s19188c1f5, ABISELECT(188,100), "S19188C1.s19188c1f5");
    test_class_info(&lv, &cd_S19188C1);
    dp->~S19188C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19188C1(Test_S19188C1, "S19188C1", ABISELECT(496,272));

#else // __cplusplus

extern void _ZN8S19188C1C1Ev();
extern void _ZN8S19188C1D1Ev();
Name_Map name_map_S19188C1[] = {
  NSPAIR(_ZN8S19188C1C1Ev),
  NSPAIR(_ZN8S19188C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3625C33_nt;
extern VTBL_ENTRY _ZTI11S3625C33_nt[];
extern Class_Descriptor cd_S19188C2;
extern VTBL_ENTRY _ZTI8S19188C2[];
extern  VTBL_ENTRY _ZTV8S19188C2[];
extern Class_Descriptor cd_S3625C33_nt;
extern VTBL_ENTRY _ZTI11S3625C33_nt[];
extern Class_Descriptor cd_S19188C5_nt;
extern VTBL_ENTRY _ZTI11S19188C5_nt[];
extern  VTBL_ENTRY _ZTV11S19188C5_nt[];
extern Class_Descriptor cd_S3625C33_nt;
extern VTBL_ENTRY _ZTI11S3625C33_nt[];
extern Class_Descriptor cd_S19188C5_nt;
extern VTBL_ENTRY _ZTI11S19188C5_nt[];
extern  VTBL_ENTRY _ZTV11S19188C5_nt[];
extern Class_Descriptor cd_S3625C33_nt;
extern VTBL_ENTRY _ZTI11S3625C33_nt[];
extern Class_Descriptor cd_S19188C8;
extern VTBL_ENTRY _ZTI8S19188C8[];
extern  VTBL_ENTRY _ZTV8S19188C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19188C8[];
extern Class_Descriptor cd_S19188C7;
extern VTBL_ENTRY _ZTI8S19188C7[];
extern  VTBL_ENTRY _ZTV8S19188C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19188C7[];
extern Class_Descriptor cd_S3625C33_nt;
extern VTBL_ENTRY _ZTI11S3625C33_nt[];
extern Class_Descriptor cd_S19188C8;
extern VTBL_ENTRY _ZTI8S19188C8[];
extern  VTBL_ENTRY _ZTV8S19188C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19188C8[];
extern Class_Descriptor cd_S19188C5_nt;
extern VTBL_ENTRY _ZTI11S19188C5_nt[];
extern  VTBL_ENTRY _ZTV11S19188C5_nt[];
extern Class_Descriptor cd_S19188C6;
extern VTBL_ENTRY _ZTI8S19188C6[];
extern  VTBL_ENTRY _ZTV8S19188C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19188C6[];
extern Class_Descriptor cd_S19188C4;
extern VTBL_ENTRY _ZTI8S19188C4[];
extern  VTBL_ENTRY _ZTV8S19188C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19188C4[];
extern Class_Descriptor cd_S3625C33_nt;
extern VTBL_ENTRY _ZTI11S3625C33_nt[];
extern Class_Descriptor cd_S19188C8;
extern VTBL_ENTRY _ZTI8S19188C8[];
extern  VTBL_ENTRY _ZTV8S19188C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19188C8[];
extern Class_Descriptor cd_S19188C7;
extern VTBL_ENTRY _ZTI8S19188C7[];
extern  VTBL_ENTRY _ZTV8S19188C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19188C7[];
extern Class_Descriptor cd_S3625C33_nt;
extern VTBL_ENTRY _ZTI11S3625C33_nt[];
extern Class_Descriptor cd_S19188C8;
extern VTBL_ENTRY _ZTI8S19188C8[];
extern  VTBL_ENTRY _ZTV8S19188C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19188C8[];
extern Class_Descriptor cd_S19188C5_nt;
extern VTBL_ENTRY _ZTI11S19188C5_nt[];
extern  VTBL_ENTRY _ZTV11S19188C5_nt[];
extern Class_Descriptor cd_S19188C6;
extern VTBL_ENTRY _ZTI8S19188C6[];
extern  VTBL_ENTRY _ZTV8S19188C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19188C6[];
static Base_Class bases_S19188C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3625C33_nt,    ABISELECT(200,108), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S19188C2,    ABISELECT(192,104), //bcp->offset
    22, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3625C33_nt,    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
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19188C5_nt,    ABISELECT(256,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
    3, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S3625C33_nt,    ABISELECT(288,156), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19188C5_nt,    ABISELECT(464,256), //bcp->offset
    61, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S3625C33_nt,    ABISELECT(480,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
    -1, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S19188C8,    ABISELECT(272,148), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    25, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S19188C7,    ABISELECT(272,148), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    24, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S3625C33_nt,    ABISELECT(368,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
    -1, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S19188C8,    ABISELECT(376,196), //bcp->offset
    51, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    30, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S19188C5_nt,    ABISELECT(392,204), //bcp->offset
    56, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    20, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S19188C6,    ABISELECT(272,148), //bcp->offset
    45, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S19188C4,    ABISELECT(256,136), //bcp->offset
    26, //bcp->virtual_function_table_offset
    12, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    22, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3625C33_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
    -1, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S19188C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S19188C7,    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
    11, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S3625C33_nt,    ABISELECT(96,44), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 0},
  {&cd_S19188C8,    ABISELECT(104,48), //bcp->offset
    12, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    21, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S19188C5_nt,    ABISELECT(120,56), //bcp->offset
    17, //bcp->virtual_function_table_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
    20, //immediately_derived
  0, 0},
  {&cd_S19188C6,    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
    14, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19188C1[];
extern void _ZN8S19188C72v8Ev();
extern void _ZN8S19188C12v1Ev();
extern void _ZN8S19188C12v2Ev();
extern void _ZN8S19188C12v3Ev();
extern void _ZN8S19188C1D1Ev();
extern void _ZN8S19188C1D0Ev();
extern void _ZN11S19188C5_nt2v5Ev();
extern void _ZN11S19188C5_nt2v6Ev();
extern void _ZN11S19188C5_nt2v7Ev();
extern void _ZN8S19188C22v4Ev();
extern void _ZN11S19188C5_nt2v5Ev();
extern void _ZN11S19188C5_nt2v6Ev();
extern void _ZN11S19188C5_nt2v7Ev();
extern void ABISELECT(_ZTv0_n72_N8S19188C1D1Ev,_ZTv0_n36_N8S19188C1D1Ev)();
extern void ABISELECT(_ZThn256_N8S19188C1D1Ev,_ZThn136_N8S19188C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S19188C1D0Ev,_ZTv0_n36_N8S19188C1D0Ev)();
extern void ABISELECT(_ZThn256_N8S19188C1D0Ev,_ZThn136_N8S19188C1D0Ev)() __attribute__((weak));
extern void _ZN8S19188C42v9Ev();
extern void _ZN8S19188C43v10Ev();
extern void _ZN8S19188C72v8Ev();
extern void _ZN11S19188C5_nt2v5Ev();
extern void _ZN11S19188C5_nt2v6Ev();
extern void _ZN11S19188C5_nt2v7Ev();
extern void _ZN11S19188C5_nt2v5Ev();
extern void _ZN11S19188C5_nt2v6Ev();
extern void _ZN11S19188C5_nt2v7Ev();
static  VTBL_ENTRY vtc_S19188C1[] = {
  ABISELECT(256,136),
  ABISELECT(480,268),
  ABISELECT(464,256),
  ABISELECT(192,104),
  0,
  (VTBL_ENTRY)&(_ZTI8S19188C1[0]),
  (VTBL_ENTRY)&_ZN8S19188C72v8Ev,
  (VTBL_ENTRY)&_ZN8S19188C12v1Ev,
  (VTBL_ENTRY)&_ZN8S19188C12v2Ev,
  (VTBL_ENTRY)&_ZN8S19188C12v3Ev,
  (VTBL_ENTRY)&_ZN8S19188C1D1Ev,
  (VTBL_ENTRY)&_ZN8S19188C1D0Ev,
  ABISELECT(376,220),
  ABISELECT(360,208),
  ABISELECT(88,56),
  ABISELECT(-104,-48),
  (VTBL_ENTRY)&(_ZTI8S19188C1[0]),
  ABISELECT(-120,-56),
  (VTBL_ENTRY)&(_ZTI8S19188C1[0]),
  (VTBL_ENTRY)&_ZN11S19188C5_nt2v5Ev,
  (VTBL_ENTRY)&_ZN11S19188C5_nt2v6Ev,
  (VTBL_ENTRY)&_ZN11S19188C5_nt2v7Ev,
  0,
  ABISELECT(-192,-104),
  (VTBL_ENTRY)&(_ZTI8S19188C1[0]),
  (VTBL_ENTRY)&_ZN8S19188C22v4Ev,
  ABISELECT(16,12),
  0,
  0,
  ABISELECT(-256,-136),
  0,
  0,
  0,
  ABISELECT(224,132),
  ABISELECT(208,120),
  ABISELECT(-64,-32),
  ABISELECT(-256,-136),
  (VTBL_ENTRY)&(_ZTI8S19188C1[0]),
  (VTBL_ENTRY)&_ZN11S19188C5_nt2v5Ev,
  (VTBL_ENTRY)&_ZN11S19188C5_nt2v6Ev,
  (VTBL_ENTRY)&_ZN11S19188C5_nt2v7Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S19188C1D1Ev,_ZTv0_n36_N8S19188C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S19188C1D0Ev,_ZTv0_n36_N8S19188C1D0Ev),
  (VTBL_ENTRY)&_ZN8S19188C42v9Ev,
  (VTBL_ENTRY)&_ZN8S19188C43v10Ev,
  ABISELECT(208,120),
  ABISELECT(192,108),
  ABISELECT(-80,-44),
  ABISELECT(-272,-148),
  (VTBL_ENTRY)&(_ZTI8S19188C1[0]),
  (VTBL_ENTRY)&_ZN8S19188C72v8Ev,
  ABISELECT(104,72),
  ABISELECT(88,60),
  ABISELECT(-184,-92),
  ABISELECT(-376,-196),
  (VTBL_ENTRY)&(_ZTI8S19188C1[0]),
  ABISELECT(-392,-204),
  (VTBL_ENTRY)&(_ZTI8S19188C1[0]),
  (VTBL_ENTRY)&_ZN11S19188C5_nt2v5Ev,
  (VTBL_ENTRY)&_ZN11S19188C5_nt2v6Ev,
  (VTBL_ENTRY)&_ZN11S19188C5_nt2v7Ev,
  0,
  0,
  0,
  ABISELECT(-464,-256),
  (VTBL_ENTRY)&(_ZTI8S19188C1[0]),
  (VTBL_ENTRY)&_ZN11S19188C5_nt2v5Ev,
  (VTBL_ENTRY)&_ZN11S19188C5_nt2v6Ev,
  (VTBL_ENTRY)&_ZN11S19188C5_nt2v7Ev,
};
extern VTBL_ENTRY _ZTV8S19188C1[];
extern void _ZN8S19188C72v8Ev();
static  VTBL_ENTRY _tg__ZTV8S19188C6__A1__8S19188C1[] = {
  ABISELECT(480,268),
  ABISELECT(464,256),
  ABISELECT(192,104),
  0,
  (VTBL_ENTRY)&(_ZTI8S19188C6[0]),
  (VTBL_ENTRY)&_ZN8S19188C72v8Ev,
};
extern void _ZN8S19188C72v8Ev();
static  VTBL_ENTRY _tg__ZTV8S19188C78S19188C6__A1__8S19188C1[] = {
  ABISELECT(480,268),
  ABISELECT(464,256),
  ABISELECT(192,104),
  0,
  (VTBL_ENTRY)&(_ZTI8S19188C7[0]),
  (VTBL_ENTRY)&_ZN8S19188C72v8Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19188C88S19188C78S19188C6__A2__8S19188C1[] = {
  ABISELECT(480,268),
  ABISELECT(464,256),
  ABISELECT(192,104),
  0,
  (VTBL_ENTRY)&(_ZTI8S19188C8[0]),
};
extern void _ZN8S19188C22v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19188C2__8S19188C88S19188C78S19188C6__A2__8S19188C1[] = {
  0,
  ABISELECT(-192,-104),
  (VTBL_ENTRY)&(_ZTI8S19188C8[0]),
  (VTBL_ENTRY)&_ZN8S19188C22v4Ev,
};
extern void _ZN11S19188C5_nt2v5Ev();
extern void _ZN11S19188C5_nt2v6Ev();
extern void _ZN11S19188C5_nt2v7Ev();
static  VTBL_ENTRY _tg__ZTV11S19188C5_nt__8S19188C88S19188C78S19188C6__A2__8S19188C1[] = {
  0,
  0,
  0,
  ABISELECT(-464,-256),
  (VTBL_ENTRY)&(_ZTI8S19188C8[0]),
  (VTBL_ENTRY)&_ZN11S19188C5_nt2v5Ev,
  (VTBL_ENTRY)&_ZN11S19188C5_nt2v6Ev,
  (VTBL_ENTRY)&_ZN11S19188C5_nt2v7Ev,
};
extern void _ZN8S19188C22v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19188C2__8S19188C78S19188C6__A1__8S19188C1[] = {
  0,
  ABISELECT(-192,-104),
  (VTBL_ENTRY)&(_ZTI8S19188C7[0]),
  (VTBL_ENTRY)&_ZN8S19188C22v4Ev,
};
extern void _ZN11S19188C5_nt2v5Ev();
extern void _ZN11S19188C5_nt2v6Ev();
extern void _ZN11S19188C5_nt2v7Ev();
static  VTBL_ENTRY _tg__ZTV11S19188C5_nt__8S19188C78S19188C6__A1__8S19188C1[] = {
  0,
  0,
  0,
  ABISELECT(-464,-256),
  (VTBL_ENTRY)&(_ZTI8S19188C7[0]),
  (VTBL_ENTRY)&_ZN11S19188C5_nt2v5Ev,
  (VTBL_ENTRY)&_ZN11S19188C5_nt2v6Ev,
  (VTBL_ENTRY)&_ZN11S19188C5_nt2v7Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19188C88S19188C6__A3__8S19188C1[] = {
  ABISELECT(376,220),
  ABISELECT(360,208),
  ABISELECT(88,56),
  0,
  (VTBL_ENTRY)&(_ZTI8S19188C8[0]),
};
extern void _ZN8S19188C22v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19188C2__8S19188C88S19188C6__A3__8S19188C1[] = {
  0,
  ABISELECT(-88,-56),
  (VTBL_ENTRY)&(_ZTI8S19188C8[0]),
  (VTBL_ENTRY)&_ZN8S19188C22v4Ev,
};
extern void _ZN11S19188C5_nt2v5Ev();
extern void _ZN11S19188C5_nt2v6Ev();
extern void _ZN11S19188C5_nt2v7Ev();
static  VTBL_ENTRY _tg__ZTV11S19188C5_nt__8S19188C88S19188C6__A3__8S19188C1[] = {
  0,
  0,
  0,
  ABISELECT(-360,-208),
  (VTBL_ENTRY)&(_ZTI8S19188C8[0]),
  (VTBL_ENTRY)&_ZN11S19188C5_nt2v5Ev,
  (VTBL_ENTRY)&_ZN11S19188C5_nt2v6Ev,
  (VTBL_ENTRY)&_ZN11S19188C5_nt2v7Ev,
};
extern void _ZN8S19188C22v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19188C2__8S19188C6__A1__8S19188C1[] = {
  0,
  ABISELECT(-192,-104),
  (VTBL_ENTRY)&(_ZTI8S19188C6[0]),
  (VTBL_ENTRY)&_ZN8S19188C22v4Ev,
};
extern void _ZN11S19188C5_nt2v5Ev();
extern void _ZN11S19188C5_nt2v6Ev();
extern void _ZN11S19188C5_nt2v7Ev();
static  VTBL_ENTRY _tg__ZTV11S19188C5_nt__8S19188C6__A1__8S19188C1[] = {
  0,
  0,
  0,
  ABISELECT(-464,-256),
  (VTBL_ENTRY)&(_ZTI8S19188C6[0]),
  (VTBL_ENTRY)&_ZN11S19188C5_nt2v5Ev,
  (VTBL_ENTRY)&_ZN11S19188C5_nt2v6Ev,
  (VTBL_ENTRY)&_ZN11S19188C5_nt2v7Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19188C8__A1__8S19188C6__A1__8S19188C1[] = {
  ABISELECT(376,220),
  ABISELECT(360,208),
  ABISELECT(88,56),
  ABISELECT(-104,-48),
  (VTBL_ENTRY)&(_ZTI8S19188C6[0]),
};
extern void _ZN11S19188C5_nt2v5Ev();
extern void _ZN11S19188C5_nt2v6Ev();
extern void _ZN11S19188C5_nt2v7Ev();
extern void _ZN8S19188C4D1Ev();
extern void _ZN8S19188C4D0Ev();
extern void _ZN8S19188C42v9Ev();
extern void _ZN8S19188C43v10Ev();
static  VTBL_ENTRY _tg__ZTV8S19188C4__8S19188C1[] = {
  ABISELECT(224,132),
  ABISELECT(208,120),
  ABISELECT(-64,-32),
  0,
  (VTBL_ENTRY)&(_ZTI8S19188C4[0]),
  (VTBL_ENTRY)&_ZN11S19188C5_nt2v5Ev,
  (VTBL_ENTRY)&_ZN11S19188C5_nt2v6Ev,
  (VTBL_ENTRY)&_ZN11S19188C5_nt2v7Ev,
  (VTBL_ENTRY)&_ZN8S19188C4D1Ev,
  (VTBL_ENTRY)&_ZN8S19188C4D0Ev,
  (VTBL_ENTRY)&_ZN8S19188C42v9Ev,
  (VTBL_ENTRY)&_ZN8S19188C43v10Ev,
};
extern void _ZN8S19188C72v8Ev();
static  VTBL_ENTRY _tg__ZTV8S19188C68S19188C4__8S19188C1[] = {
  ABISELECT(208,120),
  ABISELECT(192,108),
  ABISELECT(-80,-44),
  0,
  (VTBL_ENTRY)&(_ZTI8S19188C6[0]),
  (VTBL_ENTRY)&_ZN8S19188C72v8Ev,
};
extern void _ZN8S19188C72v8Ev();
static  VTBL_ENTRY _tg__ZTV8S19188C78S19188C68S19188C4__8S19188C1[] = {
  ABISELECT(208,120),
  ABISELECT(192,108),
  ABISELECT(-80,-44),
  0,
  (VTBL_ENTRY)&(_ZTI8S19188C7[0]),
  (VTBL_ENTRY)&_ZN8S19188C72v8Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19188C88S19188C78S19188C68S19188C4__8S19188C1[] = {
  ABISELECT(208,120),
  ABISELECT(192,108),
  ABISELECT(-80,-44),
  0,
  (VTBL_ENTRY)&(_ZTI8S19188C8[0]),
};
extern void _ZN8S19188C22v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19188C2__8S19188C88S19188C78S19188C68S19188C4__8S19188C1[] = {
  0,
  ABISELECT(80,44),
  (VTBL_ENTRY)&(_ZTI8S19188C8[0]),
  (VTBL_ENTRY)&_ZN8S19188C22v4Ev,
};
extern void _ZN11S19188C5_nt2v5Ev();
extern void _ZN11S19188C5_nt2v6Ev();
extern void _ZN11S19188C5_nt2v7Ev();
static  VTBL_ENTRY _tg__ZTV11S19188C5_nt__8S19188C88S19188C78S19188C68S19188C4__8S19188C1[] = {
  0,
  0,
  0,
  ABISELECT(-192,-108),
  (VTBL_ENTRY)&(_ZTI8S19188C8[0]),
  (VTBL_ENTRY)&_ZN11S19188C5_nt2v5Ev,
  (VTBL_ENTRY)&_ZN11S19188C5_nt2v6Ev,
  (VTBL_ENTRY)&_ZN11S19188C5_nt2v7Ev,
};
extern void _ZN8S19188C22v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19188C2__8S19188C78S19188C68S19188C4__8S19188C1[] = {
  0,
  ABISELECT(80,44),
  (VTBL_ENTRY)&(_ZTI8S19188C7[0]),
  (VTBL_ENTRY)&_ZN8S19188C22v4Ev,
};
extern void _ZN11S19188C5_nt2v5Ev();
extern void _ZN11S19188C5_nt2v6Ev();
extern void _ZN11S19188C5_nt2v7Ev();
static  VTBL_ENTRY _tg__ZTV11S19188C5_nt__8S19188C78S19188C68S19188C4__8S19188C1[] = {
  0,
  0,
  0,
  ABISELECT(-192,-108),
  (VTBL_ENTRY)&(_ZTI8S19188C7[0]),
  (VTBL_ENTRY)&_ZN11S19188C5_nt2v5Ev,
  (VTBL_ENTRY)&_ZN11S19188C5_nt2v6Ev,
  (VTBL_ENTRY)&_ZN11S19188C5_nt2v7Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19188C88S19188C68S19188C4__A1__8S19188C1[] = {
  ABISELECT(104,72),
  ABISELECT(88,60),
  ABISELECT(-184,-92),
  0,
  (VTBL_ENTRY)&(_ZTI8S19188C8[0]),
};
extern void _ZN8S19188C22v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19188C2__8S19188C88S19188C68S19188C4__A1__8S19188C1[] = {
  0,
  ABISELECT(184,92),
  (VTBL_ENTRY)&(_ZTI8S19188C8[0]),
  (VTBL_ENTRY)&_ZN8S19188C22v4Ev,
};
extern void _ZN11S19188C5_nt2v5Ev();
extern void _ZN11S19188C5_nt2v6Ev();
extern void _ZN11S19188C5_nt2v7Ev();
static  VTBL_ENTRY _tg__ZTV11S19188C5_nt__8S19188C88S19188C68S19188C4__A1__8S19188C1[] = {
  0,
  0,
  0,
  ABISELECT(-88,-60),
  (VTBL_ENTRY)&(_ZTI8S19188C8[0]),
  (VTBL_ENTRY)&_ZN11S19188C5_nt2v5Ev,
  (VTBL_ENTRY)&_ZN11S19188C5_nt2v6Ev,
  (VTBL_ENTRY)&_ZN11S19188C5_nt2v7Ev,
};
extern void _ZN8S19188C22v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19188C2__8S19188C68S19188C4__8S19188C1[] = {
  0,
  ABISELECT(80,44),
  (VTBL_ENTRY)&(_ZTI8S19188C6[0]),
  (VTBL_ENTRY)&_ZN8S19188C22v4Ev,
};
extern void _ZN11S19188C5_nt2v5Ev();
extern void _ZN11S19188C5_nt2v6Ev();
extern void _ZN11S19188C5_nt2v7Ev();
static  VTBL_ENTRY _tg__ZTV11S19188C5_nt__8S19188C68S19188C4__8S19188C1[] = {
  0,
  0,
  0,
  ABISELECT(-192,-108),
  (VTBL_ENTRY)&(_ZTI8S19188C6[0]),
  (VTBL_ENTRY)&_ZN11S19188C5_nt2v5Ev,
  (VTBL_ENTRY)&_ZN11S19188C5_nt2v6Ev,
  (VTBL_ENTRY)&_ZN11S19188C5_nt2v7Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19188C8__A1__8S19188C68S19188C4__8S19188C1[] = {
  ABISELECT(104,72),
  ABISELECT(88,60),
  ABISELECT(-184,-92),
  ABISELECT(-104,-48),
  (VTBL_ENTRY)&(_ZTI8S19188C6[0]),
};
extern void _ZN8S19188C72v8Ev();
static  VTBL_ENTRY _tg__ZTV8S19188C6__8S19188C4__8S19188C1[] = {
  ABISELECT(208,120),
  ABISELECT(192,108),
  ABISELECT(-80,-44),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI8S19188C4[0]),
  (VTBL_ENTRY)&_ZN8S19188C72v8Ev,
};
extern void _ZN8S19188C22v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19188C2__8S19188C4__8S19188C1[] = {
  0,
  ABISELECT(64,32),
  (VTBL_ENTRY)&(_ZTI8S19188C4[0]),
  (VTBL_ENTRY)&_ZN8S19188C22v4Ev,
};
extern void _ZN11S19188C5_nt2v5Ev();
extern void _ZN11S19188C5_nt2v6Ev();
extern void _ZN11S19188C5_nt2v7Ev();
static  VTBL_ENTRY _tg__ZTV11S19188C5_nt__A1__8S19188C4__8S19188C1[] = {
  0,
  0,
  0,
  ABISELECT(-208,-120),
  (VTBL_ENTRY)&(_ZTI8S19188C4[0]),
  (VTBL_ENTRY)&_ZN11S19188C5_nt2v5Ev,
  (VTBL_ENTRY)&_ZN11S19188C5_nt2v6Ev,
  (VTBL_ENTRY)&_ZN11S19188C5_nt2v7Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19188C88S19188C6__A1__8S19188C4__8S19188C1[] = {
  ABISELECT(104,72),
  ABISELECT(88,60),
  ABISELECT(-184,-92),
  ABISELECT(-120,-60),
  (VTBL_ENTRY)&(_ZTI8S19188C4[0]),
};
static  VTT_ENTRY vtt_S19188C1[] = {
  {&(_ZTV8S19188C1[6]),  6,69},
  {&(_tg__ZTV8S19188C6__A1__8S19188C1[5]),  5,6},
  {&(_tg__ZTV8S19188C78S19188C6__A1__8S19188C1[5]),  5,6},
  {&(_tg__ZTV8S19188C88S19188C78S19188C6__A2__8S19188C1[5]),  5,5},
  {&(_tg__ZTV8S19188C2__8S19188C88S19188C78S19188C6__A2__8S19188C1[3]),  3,4},
  {&(_tg__ZTV11S19188C5_nt__8S19188C88S19188C78S19188C6__A2__8S19188C1[5]),  5,8},
  {&(_tg__ZTV8S19188C2__8S19188C78S19188C6__A1__8S19188C1[3]),  3,4},
  {&(_tg__ZTV11S19188C5_nt__8S19188C78S19188C6__A1__8S19188C1[5]),  5,8},
  {&(_tg__ZTV8S19188C88S19188C6__A3__8S19188C1[5]),  5,5},
  {&(_tg__ZTV8S19188C2__8S19188C88S19188C6__A3__8S19188C1[3]),  3,4},
  {&(_tg__ZTV11S19188C5_nt__8S19188C88S19188C6__A3__8S19188C1[5]),  5,8},
  {&(_tg__ZTV8S19188C2__8S19188C6__A1__8S19188C1[3]),  3,4},
  {&(_tg__ZTV11S19188C5_nt__8S19188C6__A1__8S19188C1[5]),  5,8},
  {&(_tg__ZTV8S19188C8__A1__8S19188C6__A1__8S19188C1[5]),  5,5},
  {&(_ZTV8S19188C1[25]),  25,69},
  {&(_ZTV8S19188C1[38]),  38,69},
  {&(_ZTV8S19188C1[50]),  50,69},
  {&(_ZTV8S19188C1[66]),  66,69},
  {&(_ZTV8S19188C1[56]),  56,69},
  {&(_ZTV8S19188C1[58]),  58,69},
  {&(_ZTV8S19188C1[17]),  17,69},
  {&(_tg__ZTV8S19188C4__8S19188C1[5]),  5,12},
  {&(_tg__ZTV8S19188C68S19188C4__8S19188C1[5]),  5,6},
  {&(_tg__ZTV8S19188C78S19188C68S19188C4__8S19188C1[5]),  5,6},
  {&(_tg__ZTV8S19188C88S19188C78S19188C68S19188C4__8S19188C1[5]),  5,5},
  {&(_tg__ZTV8S19188C2__8S19188C88S19188C78S19188C68S19188C4__8S19188C1[3]),  3,4},
  {&(_tg__ZTV11S19188C5_nt__8S19188C88S19188C78S19188C68S19188C4__8S19188C1[5]),  5,8},
  {&(_tg__ZTV8S19188C2__8S19188C78S19188C68S19188C4__8S19188C1[3]),  3,4},
  {&(_tg__ZTV11S19188C5_nt__8S19188C78S19188C68S19188C4__8S19188C1[5]),  5,8},
  {&(_tg__ZTV8S19188C88S19188C68S19188C4__A1__8S19188C1[5]),  5,5},
  {&(_tg__ZTV8S19188C2__8S19188C88S19188C68S19188C4__A1__8S19188C1[3]),  3,4},
  {&(_tg__ZTV11S19188C5_nt__8S19188C88S19188C68S19188C4__A1__8S19188C1[5]),  5,8},
  {&(_tg__ZTV8S19188C2__8S19188C68S19188C4__8S19188C1[3]),  3,4},
  {&(_tg__ZTV11S19188C5_nt__8S19188C68S19188C4__8S19188C1[5]),  5,8},
  {&(_tg__ZTV8S19188C8__A1__8S19188C68S19188C4__8S19188C1[5]),  5,5},
  {&(_tg__ZTV8S19188C6__8S19188C4__8S19188C1[5]),  5,6},
  {&(_tg__ZTV8S19188C2__8S19188C4__8S19188C1[3]),  3,4},
  {&(_tg__ZTV11S19188C5_nt__A1__8S19188C4__8S19188C1[5]),  5,8},
  {&(_tg__ZTV8S19188C88S19188C6__A1__8S19188C4__8S19188C1[5]),  5,5},
};
extern VTBL_ENTRY _ZTI8S19188C1[];
extern  VTBL_ENTRY _ZTV8S19188C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19188C1[];
static VTBL_ENTRY alt_thunk_names5[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S19188C1D0Ev,_ZTv0_n36_N8S19188C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn256_N8S19188C1D0Ev,_ZThn136_N8S19188C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S19188C1D1Ev,_ZTv0_n36_N8S19188C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn256_N8S19188C1D1Ev,_ZThn136_N8S19188C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19188C1 = {  "S19188C1", // class name
  bases_S19188C1, 21,
  &(vtc_S19188C1[0]), // expected_vtbl_contents
  &(vtt_S19188C1[0]), // expected_vtt_contents
  ABISELECT(496,272), // object size
  NSPAIRA(_ZTI8S19188C1),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S19188C1),69, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19188C1),39, //virtual table table var
  14, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names5,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7673C3_nt  {
  virtual  ~S7673C3_nt(); // _ZN10S7673C3_ntD1Ev
  virtual void  v7(); // _ZN10S7673C3_nt2v7Ev
  S7673C3_nt(); // tgen
};
//SIG(-1 S7673C3_nt) C1{ vd v1}


 S7673C3_nt ::~S7673C3_nt(){ note_dtor("S7673C3_nt", this);}
void  S7673C3_nt ::v7(){vfunc_called(this, "_ZN10S7673C3_nt2v7Ev");}
S7673C3_nt ::S7673C3_nt(){ note_ctor("S7673C3_nt", this);} // tgen

//skip512 S7673C3_nt

#else // __cplusplus

extern void _ZN10S7673C3_ntC1Ev();
extern void _ZN10S7673C3_ntD1Ev();
Name_Map name_map_S7673C3_nt[] = {
  NSPAIR(_ZN10S7673C3_ntC1Ev),
  NSPAIR(_ZN10S7673C3_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S7673C3_nt[];
extern void _ZN10S7673C3_ntD1Ev();
extern void _ZN10S7673C3_ntD0Ev();
extern void _ZN10S7673C3_nt2v7Ev();
static  VTBL_ENTRY vtc_S7673C3_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S7673C3_nt[0]),
  (VTBL_ENTRY)&_ZN10S7673C3_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S7673C3_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S7673C3_nt2v7Ev,
};
extern VTBL_ENTRY _ZTI10S7673C3_nt[];
VTBL_ENTRY *P__ZTI10S7673C3_nt = _ZTI10S7673C3_nt; 
extern  VTBL_ENTRY _ZTV10S7673C3_nt[];
Class_Descriptor cd_S7673C3_nt = {  "S7673C3_nt", // class name
  0,0,//no base classes
  &(vtc_S7673C3_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI10S7673C3_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S7673C3_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  S7673C4  {
  __tsi64 s7673c4f0;
  virtual void  v8(); // _ZN7S7673C42v8Ev
  virtual void  v9(); // _ZN7S7673C42v9Ev
  virtual void  v10(); // _ZN7S7673C43v10Ev
  ~S7673C4(); // tgen
  S7673C4(); // tgen
};
//SIG(-1 S7673C4) C1{ v1 v2 v3 FL}


void  S7673C4 ::v8(){vfunc_called(this, "_ZN7S7673C42v8Ev");}
void  S7673C4 ::v9(){vfunc_called(this, "_ZN7S7673C42v9Ev");}
void  S7673C4 ::v10(){vfunc_called(this, "_ZN7S7673C43v10Ev");}
S7673C4 ::~S7673C4(){ note_dtor("S7673C4", this);} // tgen
S7673C4 ::S7673C4(){ note_ctor("S7673C4", this);} // tgen

static void Test_S7673C4()
{
  extern Class_Descriptor cd_S7673C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S7673C4, buf);
    S7673C4 *dp, &lv = *(dp=new (buf) S7673C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S7673C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7673C4)");
    check_field_offset(lv, s7673c4f0, ABISELECT(8,4), "S7673C4.s7673c4f0");
    test_class_info(&lv, &cd_S7673C4);
    dp->~S7673C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7673C4(Test_S7673C4, "S7673C4", ABISELECT(16,12));

#else // __cplusplus

extern void _ZN7S7673C4C1Ev();
extern void _ZN7S7673C4D1Ev();
Name_Map name_map_S7673C4[] = {
  NSPAIR(_ZN7S7673C4C1Ev),
  NSPAIR(_ZN7S7673C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S7673C4[];
extern void _ZN7S7673C42v8Ev();
extern void _ZN7S7673C42v9Ev();
extern void _ZN7S7673C43v10Ev();
static  VTBL_ENTRY vtc_S7673C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7673C4[0]),
  (VTBL_ENTRY)&_ZN7S7673C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7673C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7673C43v10Ev,
};
extern VTBL_ENTRY _ZTI7S7673C4[];
extern  VTBL_ENTRY _ZTV7S7673C4[];
Class_Descriptor cd_S7673C4 = {  "S7673C4", // class name
  0,0,//no base classes
  &(vtc_S7673C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI7S7673C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S7673C4),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  S7673C2_nt  : virtual S7673C3_nt , S7673C4 {
  long s7673c2f0[9];
  virtual  ~S7673C2_nt(); // _ZN10S7673C2_ntD2Ev
  virtual void  v11(); // _ZN10S7673C2_nt3v11Ev
  S7673C2_nt(); // tgen
};
//SIG(-1 S7673C2_nt) C1{ VBC2{ vd v2} BC3{ v3 v4 v5 FL} vd v1 Fl[9]}


 S7673C2_nt ::~S7673C2_nt(){ note_dtor("S7673C2_nt", this);}
void  S7673C2_nt ::v11(){vfunc_called(this, "_ZN10S7673C2_nt3v11Ev");}
S7673C2_nt ::S7673C2_nt(){ note_ctor("S7673C2_nt", this);} // tgen

//skip512 S7673C2_nt

#else // __cplusplus

extern void _ZN10S7673C2_ntC1Ev();
extern void _ZN10S7673C2_ntD2Ev();
Name_Map name_map_S7673C2_nt[] = {
  NSPAIR(_ZN10S7673C2_ntC1Ev),
  NSPAIR(_ZN10S7673C2_ntD2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7673C3_nt;
extern VTBL_ENTRY _ZTI10S7673C3_nt[];
extern  VTBL_ENTRY _ZTV10S7673C3_nt[];
extern Class_Descriptor cd_S7673C4;
extern VTBL_ENTRY _ZTI7S7673C4[];
extern  VTBL_ENTRY _ZTV7S7673C4[];
static Base_Class bases_S7673C2_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7673C3_nt,    ABISELECT(88,48), //bcp->offset
    9, //bcp->virtual_function_table_offset
    4, //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_S7673C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI10S7673C2_nt[];
extern void _ZN7S7673C42v8Ev();
extern void _ZN7S7673C42v9Ev();
extern void _ZN7S7673C43v10Ev();
extern void _ZN10S7673C2_ntD1Ev();
extern void _ZN10S7673C2_ntD0Ev();
extern void _ZN10S7673C2_nt3v11Ev();
extern void ABISELECT(_ZTv0_n24_N10S7673C2_ntD1Ev,_ZTv0_n12_N10S7673C2_ntD1Ev)();
extern void ABISELECT(_ZThn88_N10S7673C2_ntD1Ev,_ZThn48_N10S7673C2_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N10S7673C2_ntD0Ev,_ZTv0_n12_N10S7673C2_ntD0Ev)();
extern void ABISELECT(_ZThn88_N10S7673C2_ntD0Ev,_ZThn48_N10S7673C2_ntD0Ev)() __attribute__((weak));
extern void _ZN10S7673C3_nt2v7Ev();
static  VTBL_ENTRY vtc_S7673C2_nt[] = {
  ABISELECT(88,48),
  0,
  (VTBL_ENTRY)&(_ZTI10S7673C2_nt[0]),
  (VTBL_ENTRY)&_ZN7S7673C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7673C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7673C43v10Ev,
  (VTBL_ENTRY)&_ZN10S7673C2_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S7673C2_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S7673C2_nt3v11Ev,
  0,
  ABISELECT(-88,-48),
  ABISELECT(-88,-48),
  (VTBL_ENTRY)&(_ZTI10S7673C2_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N10S7673C2_ntD1Ev,_ZTv0_n12_N10S7673C2_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N10S7673C2_ntD0Ev,_ZTv0_n12_N10S7673C2_ntD0Ev),
  (VTBL_ENTRY)&_ZN10S7673C3_nt2v7Ev,
};
extern VTBL_ENTRY _ZTV10S7673C2_nt[];
static  VTT_ENTRY vtt_S7673C2_nt[] = {
  {&(_ZTV10S7673C2_nt[3]),  3,16},
  {&(_ZTV10S7673C2_nt[13]),  13,16},
};
extern VTBL_ENTRY _ZTI10S7673C2_nt[];
VTBL_ENTRY *P__ZTI10S7673C2_nt = _ZTI10S7673C2_nt; 
extern  VTBL_ENTRY _ZTV10S7673C2_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT10S7673C2_nt[];
static VTBL_ENTRY alt_thunk_names6[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N10S7673C2_ntD0Ev,_ZTv0_n12_N10S7673C2_ntD0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N10S7673C2_ntD0Ev,_ZThn48_N10S7673C2_ntD0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N10S7673C2_ntD1Ev,_ZTv0_n12_N10S7673C2_ntD1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N10S7673C2_ntD1Ev,_ZThn48_N10S7673C2_ntD1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7673C2_nt = {  "S7673C2_nt", // class name
  bases_S7673C2_nt, 2,
  &(vtc_S7673C2_nt[0]), // expected_vtbl_contents
  &(vtt_S7673C2_nt[0]), // expected_vtt_contents
  ABISELECT(96,52), // object size
  NSPAIRA(_ZTI10S7673C2_nt),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV10S7673C2_nt),16, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT10S7673C2_nt),2, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names6,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7673C6_nt  : virtual S7673C3_nt {
  virtual  ~S7673C6_nt(); // _ZN10S7673C6_ntD2Ev
  virtual void  v12(); // _ZN10S7673C6_nt3v12Ev
  virtual void  v13(); // _ZN10S7673C6_nt3v13Ev
  S7673C6_nt(); // tgen
};
//SIG(-1 S7673C6_nt) C1{ VBC2{ vd v3} vd v1 v2}


 S7673C6_nt ::~S7673C6_nt(){ note_dtor("S7673C6_nt", this);}
void  S7673C6_nt ::v12(){vfunc_called(this, "_ZN10S7673C6_nt3v12Ev");}
void  S7673C6_nt ::v13(){vfunc_called(this, "_ZN10S7673C6_nt3v13Ev");}
S7673C6_nt ::S7673C6_nt(){ note_ctor("S7673C6_nt", this);} // tgen

//skip512 S7673C6_nt

#else // __cplusplus

extern void _ZN10S7673C6_ntC1Ev();
extern void _ZN10S7673C6_ntD2Ev();
Name_Map name_map_S7673C6_nt[] = {
  NSPAIR(_ZN10S7673C6_ntC1Ev),
  NSPAIR(_ZN10S7673C6_ntD2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7673C3_nt;
extern VTBL_ENTRY _ZTI10S7673C3_nt[];
extern  VTBL_ENTRY _ZTV10S7673C3_nt[];
static Base_Class bases_S7673C6_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7673C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //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 _ZTI10S7673C6_nt[];
extern void _ZN10S7673C6_ntD1Ev();
extern void _ZN10S7673C6_ntD0Ev();
extern void _ZN10S7673C3_nt2v7Ev();
extern void _ZN10S7673C6_nt3v12Ev();
extern void _ZN10S7673C6_nt3v13Ev();
static  VTBL_ENTRY vtc_S7673C6_nt[] = {
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI10S7673C6_nt[0]),
  (VTBL_ENTRY)&_ZN10S7673C6_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S7673C6_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S7673C3_nt2v7Ev,
  (VTBL_ENTRY)&_ZN10S7673C6_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S7673C6_nt3v13Ev,
};
extern VTBL_ENTRY _ZTV10S7673C6_nt[];
static  VTT_ENTRY vtt_S7673C6_nt[] = {
  {&(_ZTV10S7673C6_nt[5]),  5,10},
  {&(_ZTV10S7673C6_nt[5]),  5,10},
};
extern VTBL_ENTRY _ZTI10S7673C6_nt[];
VTBL_ENTRY *P__ZTI10S7673C6_nt = _ZTI10S7673C6_nt; 
extern  VTBL_ENTRY _ZTV10S7673C6_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT10S7673C6_nt[];
Class_Descriptor cd_S7673C6_nt = {  "S7673C6_nt", // class name
  bases_S7673C6_nt, 1,
  &(vtc_S7673C6_nt[0]), // expected_vtbl_contents
  &(vtt_S7673C6_nt[0]), // expected_vtt_contents
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI10S7673C6_nt),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV10S7673C6_nt),10, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT10S7673C6_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  S7673C5_nt  : virtual S7673C6_nt , S7673C3_nt {
  void *s7673c5f0;
  ::S7673C6_nt s7673c5f1;
  virtual void  v14(); // _ZN10S7673C5_nt3v14Ev
  virtual void  v15(); // _ZN10S7673C5_nt3v15Ev
  virtual void  v16(); // _ZN10S7673C5_nt3v16Ev
  virtual void  v17(); // _ZN10S7673C5_nt3v17Ev
  virtual void  v18(); // _ZN10S7673C5_nt3v18Ev
  ~S7673C5_nt(); // tgen
  S7673C5_nt(); // tgen
};
//SIG(-1 S7673C5_nt) C1{ VBC2{ VBC3{ vd v6} vd v7 v8} BC3 v1 v2 v3 v4 v5 Fp FC2}


void  S7673C5_nt ::v14(){vfunc_called(this, "_ZN10S7673C5_nt3v14Ev");}
void  S7673C5_nt ::v15(){vfunc_called(this, "_ZN10S7673C5_nt3v15Ev");}
void  S7673C5_nt ::v16(){vfunc_called(this, "_ZN10S7673C5_nt3v16Ev");}
void  S7673C5_nt ::v17(){vfunc_called(this, "_ZN10S7673C5_nt3v17Ev");}
void  S7673C5_nt ::v18(){vfunc_called(this, "_ZN10S7673C5_nt3v18Ev");}
S7673C5_nt ::~S7673C5_nt(){ note_dtor("S7673C5_nt", this);} // tgen
S7673C5_nt ::S7673C5_nt(){ note_ctor("S7673C5_nt", this);} // tgen

//skip512 S7673C5_nt

#else // __cplusplus

extern void _ZN10S7673C5_ntC1Ev();
extern void _ZN10S7673C5_ntD1Ev();
Name_Map name_map_S7673C5_nt[] = {
  NSPAIR(_ZN10S7673C5_ntC1Ev),
  NSPAIR(_ZN10S7673C5_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7673C3_nt;
extern VTBL_ENTRY _ZTI10S7673C3_nt[];
extern  VTBL_ENTRY _ZTV10S7673C3_nt[];
extern Class_Descriptor cd_S7673C6_nt;
extern VTBL_ENTRY _ZTI10S7673C6_nt[];
extern  VTBL_ENTRY _ZTV10S7673C6_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT10S7673C6_nt[];
extern Class_Descriptor cd_S7673C3_nt;
extern VTBL_ENTRY _ZTI10S7673C3_nt[];
extern  VTBL_ENTRY _ZTV10S7673C3_nt[];
static Base_Class bases_S7673C5_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7673C3_nt,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //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
    1, //immediately_derived
  0, 1},
  {&cd_S7673C6_nt,    ABISELECT(24,12), //bcp->offset
    12, //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
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7673C3_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 _ZTI10S7673C5_nt[];
extern void _ZN10S7673C5_ntD1Ev();
extern void _ZN10S7673C5_ntD0Ev();
extern void _ZN10S7673C3_nt2v7Ev();
extern void _ZN10S7673C5_nt3v14Ev();
extern void _ZN10S7673C5_nt3v15Ev();
extern void _ZN10S7673C5_nt3v16Ev();
extern void _ZN10S7673C5_nt3v17Ev();
extern void _ZN10S7673C5_nt3v18Ev();
extern void ABISELECT(_ZTv0_n24_N10S7673C5_ntD1Ev,_ZTv0_n12_N10S7673C5_ntD1Ev)();
extern void ABISELECT(_ZThn24_N10S7673C5_ntD1Ev,_ZThn12_N10S7673C5_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N10S7673C5_ntD0Ev,_ZTv0_n12_N10S7673C5_ntD0Ev)();
extern void ABISELECT(_ZThn24_N10S7673C5_ntD0Ev,_ZThn12_N10S7673C5_ntD0Ev)() __attribute__((weak));
extern void _ZN10S7673C3_nt2v7Ev();
extern void _ZN10S7673C6_nt3v12Ev();
extern void _ZN10S7673C6_nt3v13Ev();
static  VTBL_ENTRY vtc_S7673C5_nt[] = {
  ABISELECT(24,12),
  ABISELECT(24,12),
  0,
  (VTBL_ENTRY)&(_ZTI10S7673C5_nt[0]),
  (VTBL_ENTRY)&_ZN10S7673C5_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S7673C5_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S7673C3_nt2v7Ev,
  (VTBL_ENTRY)&_ZN10S7673C5_nt3v14Ev,
  (VTBL_ENTRY)&_ZN10S7673C5_nt3v15Ev,
  (VTBL_ENTRY)&_ZN10S7673C5_nt3v16Ev,
  (VTBL_ENTRY)&_ZN10S7673C5_nt3v17Ev,
  (VTBL_ENTRY)&_ZN10S7673C5_nt3v18Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI10S7673C5_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N10S7673C5_ntD1Ev,_ZTv0_n12_N10S7673C5_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N10S7673C5_ntD0Ev,_ZTv0_n12_N10S7673C5_ntD0Ev),
  (VTBL_ENTRY)&_ZN10S7673C3_nt2v7Ev,
  (VTBL_ENTRY)&_ZN10S7673C6_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S7673C6_nt3v13Ev,
};
extern VTBL_ENTRY _ZTV10S7673C5_nt[];
extern void ABISELECT(_ZTv0_n24_N10S7673C6_ntD1Ev,_ZTv0_n12_N10S7673C6_ntD1Ev)();
extern void _ZN10S7673C6_ntD1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N10S7673C6_ntD0Ev,_ZTv0_n12_N10S7673C6_ntD0Ev)();
extern void _ZN10S7673C6_ntD0Ev() __attribute__((weak));
extern void _ZN10S7673C3_nt2v7Ev();
extern void _ZN10S7673C6_nt3v12Ev();
extern void _ZN10S7673C6_nt3v13Ev();
static  VTBL_ENTRY _tg__ZTV10S7673C6_nt__10S7673C5_nt[] = {
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI10S7673C6_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N10S7673C6_ntD1Ev,_ZTv0_n12_N10S7673C6_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N10S7673C6_ntD0Ev,_ZTv0_n12_N10S7673C6_ntD0Ev),
  (VTBL_ENTRY)&_ZN10S7673C3_nt2v7Ev,
  (VTBL_ENTRY)&_ZN10S7673C6_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S7673C6_nt3v13Ev,
};
static  VTT_ENTRY vtt_S7673C5_nt[] = {
  {&(_ZTV10S7673C5_nt[4]),  4,24},
  {&(_ZTV10S7673C5_nt[19]),  19,24},
  {&(_ZTV10S7673C5_nt[19]),  19,24},
  {&(_tg__ZTV10S7673C6_nt__10S7673C5_nt[5]),  5,10},
  {&(_tg__ZTV10S7673C6_nt__10S7673C5_nt[5]),  5,10},
};
extern VTBL_ENTRY _ZTI10S7673C5_nt[];
VTBL_ENTRY *P__ZTI10S7673C5_nt = _ZTI10S7673C5_nt; 
extern  VTBL_ENTRY _ZTV10S7673C5_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT10S7673C5_nt[];
static VTBL_ENTRY alt_thunk_names7[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N10S7673C6_ntD0Ev,_ZTv0_n12_N10S7673C6_ntD0Ev), // 
  (VTBL_ENTRY)_ZN10S7673C6_ntD0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N10S7673C6_ntD1Ev,_ZTv0_n12_N10S7673C6_ntD1Ev), // 
  (VTBL_ENTRY)_ZN10S7673C6_ntD1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N10S7673C5_ntD0Ev,_ZTv0_n12_N10S7673C5_ntD0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N10S7673C5_ntD0Ev,_ZThn12_N10S7673C5_ntD0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N10S7673C5_ntD1Ev,_ZTv0_n12_N10S7673C5_ntD1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N10S7673C5_ntD1Ev,_ZThn12_N10S7673C5_ntD1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7673C5_nt = {  "S7673C5_nt", // class name
  bases_S7673C5_nt, 3,
  &(vtc_S7673C5_nt[0]), // expected_vtbl_contents
  &(vtt_S7673C5_nt[0]), // expected_vtt_contents
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI10S7673C5_nt),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV10S7673C5_nt),24, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT10S7673C5_nt),5, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names7,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7673C7_nt  {
  int s7673c7f0[2];
  virtual void  v19(); // _ZN10S7673C7_nt3v19Ev
  virtual void  v20(); // _ZN10S7673C7_nt3v20Ev
  virtual void  v21(); // _ZN10S7673C7_nt3v21Ev
  virtual void  v22(); // _ZN10S7673C7_nt3v22Ev
  virtual void  v23(); // _ZN10S7673C7_nt3v23Ev
  virtual void  v24(); // _ZN10S7673C7_nt3v24Ev
  virtual void  v25(); // _ZN10S7673C7_nt3v25Ev
  virtual void  v26(); // _ZN10S7673C7_nt3v26Ev
  ~S7673C7_nt(); // tgen
  S7673C7_nt(); // tgen
};
//SIG(-1 S7673C7_nt) C1{ v1 v2 v3 v4 v5 v6 v7 v8 Fi[2]}


void  S7673C7_nt ::v19(){vfunc_called(this, "_ZN10S7673C7_nt3v19Ev");}
void  S7673C7_nt ::v20(){vfunc_called(this, "_ZN10S7673C7_nt3v20Ev");}
void  S7673C7_nt ::v21(){vfunc_called(this, "_ZN10S7673C7_nt3v21Ev");}
void  S7673C7_nt ::v22(){vfunc_called(this, "_ZN10S7673C7_nt3v22Ev");}
void  S7673C7_nt ::v23(){vfunc_called(this, "_ZN10S7673C7_nt3v23Ev");}
void  S7673C7_nt ::v24(){vfunc_called(this, "_ZN10S7673C7_nt3v24Ev");}
void  S7673C7_nt ::v25(){vfunc_called(this, "_ZN10S7673C7_nt3v25Ev");}
void  S7673C7_nt ::v26(){vfunc_called(this, "_ZN10S7673C7_nt3v26Ev");}
S7673C7_nt ::~S7673C7_nt(){ note_dtor("S7673C7_nt", this);} // tgen
S7673C7_nt ::S7673C7_nt(){ note_ctor("S7673C7_nt", this);} // tgen

//skip512 S7673C7_nt

#else // __cplusplus

extern void _ZN10S7673C7_ntC1Ev();
extern void _ZN10S7673C7_ntD1Ev();
Name_Map name_map_S7673C7_nt[] = {
  NSPAIR(_ZN10S7673C7_ntC1Ev),
  NSPAIR(_ZN10S7673C7_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S7673C7_nt[];
extern void _ZN10S7673C7_nt3v19Ev();
extern void _ZN10S7673C7_nt3v20Ev();
extern void _ZN10S7673C7_nt3v21Ev();
extern void _ZN10S7673C7_nt3v22Ev();
extern void _ZN10S7673C7_nt3v23Ev();
extern void _ZN10S7673C7_nt3v24Ev();
extern void _ZN10S7673C7_nt3v25Ev();
extern void _ZN10S7673C7_nt3v26Ev();
static  VTBL_ENTRY vtc_S7673C7_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S7673C7_nt[0]),
  (VTBL_ENTRY)&_ZN10S7673C7_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S7673C7_nt3v20Ev,
  (VTBL_ENTRY)&_ZN10S7673C7_nt3v21Ev,
  (VTBL_ENTRY)&_ZN10S7673C7_nt3v22Ev,
  (VTBL_ENTRY)&_ZN10S7673C7_nt3v23Ev,
  (VTBL_ENTRY)&_ZN10S7673C7_nt3v24Ev,
  (VTBL_ENTRY)&_ZN10S7673C7_nt3v25Ev,
  (VTBL_ENTRY)&_ZN10S7673C7_nt3v26Ev,
};
extern VTBL_ENTRY _ZTI10S7673C7_nt[];
VTBL_ENTRY *P__ZTI10S7673C7_nt = _ZTI10S7673C7_nt; 
extern  VTBL_ENTRY _ZTV10S7673C7_nt[];
Class_Descriptor cd_S7673C7_nt = {  "S7673C7_nt", // class name
  0,0,//no base classes
  &(vtc_S7673C7_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI10S7673C7_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S7673C7_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  S7673C8_nt  {
  ::S7673C3_nt s7673c8f0;
  __tsi64 s7673c8f1:18;
  virtual void  v27(); // _ZN10S7673C8_nt3v27Ev
  ~S7673C8_nt(); // tgen
  S7673C8_nt(); // tgen
};
//SIG(-1 S7673C8_nt) C1{ v1 FC2{ vd v2} FL:18}


void  S7673C8_nt ::v27(){vfunc_called(this, "_ZN10S7673C8_nt3v27Ev");}
S7673C8_nt ::~S7673C8_nt(){ note_dtor("S7673C8_nt", this);} // tgen
S7673C8_nt ::S7673C8_nt(){ note_ctor("S7673C8_nt", this);} // tgen

//skip512 S7673C8_nt

#else // __cplusplus

extern void _ZN10S7673C8_ntC1Ev();
extern void _ZN10S7673C8_ntD1Ev();
Name_Map name_map_S7673C8_nt[] = {
  NSPAIR(_ZN10S7673C8_ntC1Ev),
  NSPAIR(_ZN10S7673C8_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S7673C8_nt[];
extern void _ZN10S7673C8_nt3v27Ev();
static  VTBL_ENTRY vtc_S7673C8_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S7673C8_nt[0]),
  (VTBL_ENTRY)&_ZN10S7673C8_nt3v27Ev,
};
extern VTBL_ENTRY _ZTI10S7673C8_nt[];
VTBL_ENTRY *P__ZTI10S7673C8_nt = _ZTI10S7673C8_nt; 
extern  VTBL_ENTRY _ZTV10S7673C8_nt[];
Class_Descriptor cd_S7673C8_nt = {  "S7673C8_nt", // class name
  0,0,//no base classes
  &(vtc_S7673C8_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI10S7673C8_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S7673C8_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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7673C1  : S7673C2_nt , S7673C4 , S7673C5_nt , virtual S7673C7_nt , virtual S7673C8_nt {
  virtual  ~S7673C1(); // _ZN7S7673C1D2Ev
  virtual void  v1(); // _ZN7S7673C12v1Ev
  virtual void  v2(); // _ZN7S7673C12v2Ev
  virtual void  v3(); // _ZN7S7673C12v3Ev
  virtual void  v4(); // _ZN7S7673C12v4Ev
  virtual void  v5(); // _ZN7S7673C12v5Ev
  virtual void  v6(); // _ZN7S7673C12v6Ev
  S7673C1(); // tgen
};
//SIG(1 S7673C1) C1{ BC2{ VBC3{ vd v7} BC4{ v8 v9 v10 FL} vd v11 Fl[9]} BC4 BC5{ VBC6{ VBC3 vd v12 v13} BC3 v14 v15 v16 v17 v18 Fp FC6} VBC7{ v19 v20 v21 v22 v23 v24 v25 v26 Fi[2]} VBC8{ v27 FC3 FL:18} vd v1 v2 v3 v4 v5 v6}


 S7673C1 ::~S7673C1(){ note_dtor("S7673C1", this);}
void  S7673C1 ::v1(){vfunc_called(this, "_ZN7S7673C12v1Ev");}
void  S7673C1 ::v2(){vfunc_called(this, "_ZN7S7673C12v2Ev");}
void  S7673C1 ::v3(){vfunc_called(this, "_ZN7S7673C12v3Ev");}
void  S7673C1 ::v4(){vfunc_called(this, "_ZN7S7673C12v4Ev");}
void  S7673C1 ::v5(){vfunc_called(this, "_ZN7S7673C12v5Ev");}
void  S7673C1 ::v6(){vfunc_called(this, "_ZN7S7673C12v6Ev");}
S7673C1 ::S7673C1(){ note_ctor("S7673C1", this);} // tgen

static void Test_S7673C1()
{
  extern Class_Descriptor cd_S7673C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(23,26)];
    init_test(&cd_S7673C1, buf);
    S7673C1 *dp, &lv = *(dp=new (buf) S7673C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(176,100), "sizeof(S7673C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7673C1)");
    check_base_class_offset(lv, (S7673C3_nt*)(S7673C2_nt*), ABISELECT(128,72), "S7673C1");
    check_base_class_offset(lv, (S7673C3_nt*)(S7673C6_nt*), ABISELECT(128,72), "S7673C1");
    check_base_class_offset(lv, (S7673C4*)(S7673C2_nt*), 0, "S7673C1");
    check_base_class_offset(lv, (S7673C2_nt*), 0, "S7673C1");
    /*is_ambiguous_... S7673C1::S7673C4 */ AMB_check_base_class_offset(lv, (S7673C4*), ABISELECT(88,48), "S7673C1");
    check_base_class_offset(lv, (S7673C6_nt*)(S7673C5_nt*), ABISELECT(128,72), "S7673C1");
    /*is_ambiguous_... S7673C5_nt::S7673C3_nt */ AMB_check_base_class_offset(lv, (S7673C3_nt*)(S7673C5_nt*), ABISELECT(104,60), "S7673C1");
    check_base_class_offset(lv, (S7673C5_nt*), ABISELECT(104,60), "S7673C1");
    check_base_class_offset(lv, (S7673C7_nt*), ABISELECT(136,76), "S7673C1");
    check_base_class_offset(lv, (S7673C8_nt*), ABISELECT(152,88), "S7673C1");
    test_class_info(&lv, &cd_S7673C1);
    dp->~S7673C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7673C1(Test_S7673C1, "S7673C1", ABISELECT(176,100));

#else // __cplusplus

extern void _ZN7S7673C1C1Ev();
extern void _ZN7S7673C1D2Ev();
Name_Map name_map_S7673C1[] = {
  NSPAIR(_ZN7S7673C1C1Ev),
  NSPAIR(_ZN7S7673C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7673C3_nt;
extern VTBL_ENTRY _ZTI10S7673C3_nt[];
extern  VTBL_ENTRY _ZTV10S7673C3_nt[];
extern Class_Descriptor cd_S7673C4;
extern VTBL_ENTRY _ZTI7S7673C4[];
extern  VTBL_ENTRY _ZTV7S7673C4[];
extern Class_Descriptor cd_S7673C2_nt;
extern VTBL_ENTRY _ZTI10S7673C2_nt[];
extern  VTBL_ENTRY _ZTV10S7673C2_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT10S7673C2_nt[];
extern Class_Descriptor cd_S7673C4;
extern VTBL_ENTRY _ZTI7S7673C4[];
extern  VTBL_ENTRY _ZTV7S7673C4[];
extern Class_Descriptor cd_S7673C6_nt;
extern VTBL_ENTRY _ZTI10S7673C6_nt[];
extern  VTBL_ENTRY _ZTV10S7673C6_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT10S7673C6_nt[];
extern Class_Descriptor cd_S7673C3_nt;
extern VTBL_ENTRY _ZTI10S7673C3_nt[];
extern  VTBL_ENTRY _ZTV10S7673C3_nt[];
extern Class_Descriptor cd_S7673C5_nt;
extern VTBL_ENTRY _ZTI10S7673C5_nt[];
extern  VTBL_ENTRY _ZTV10S7673C5_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT10S7673C5_nt[];
extern Class_Descriptor cd_S7673C7_nt;
extern VTBL_ENTRY _ZTI10S7673C7_nt[];
extern  VTBL_ENTRY _ZTV10S7673C7_nt[];
extern Class_Descriptor cd_S7673C8_nt;
extern VTBL_ENTRY _ZTI10S7673C8_nt[];
extern  VTBL_ENTRY _ZTV10S7673C8_nt[];
static Base_Class bases_S7673C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7673C3_nt,    ABISELECT(128,72), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //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
    2, //immediately_derived
  0, 1},
  {&cd_S7673C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    2, //immediately_derived
  0, 0},
  {&cd_S7673C2_nt,    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
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7673C4,    ABISELECT(88,48), //bcp->offset
    18, //bcp->virtual_function_table_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_S7673C6_nt,    ABISELECT(128,72), //bcp->offset
    35, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S7673C3_nt,    ABISELECT(104,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
    8, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S7673C5_nt,    ABISELECT(104,60), //bcp->offset
    23, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7673C7_nt,    ABISELECT(136,76), //bcp->offset
    47, //bcp->virtual_function_table_offset
    10, //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
    -1, //immediately_derived
  1, 1},
  {&cd_S7673C8_nt,    ABISELECT(152,88), //bcp->offset
    65, //bcp->virtual_function_table_offset
    3, //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 _ZTI7S7673C1[];
extern void _ZN7S7673C42v8Ev();
extern void _ZN7S7673C42v9Ev();
extern void _ZN7S7673C43v10Ev();
extern void _ZN7S7673C1D1Ev();
extern void _ZN7S7673C1D0Ev();
extern void _ZN10S7673C2_nt3v11Ev();
extern void _ZN7S7673C12v1Ev();
extern void _ZN7S7673C12v2Ev();
extern void _ZN7S7673C12v3Ev();
extern void _ZN7S7673C12v4Ev();
extern void _ZN7S7673C12v5Ev();
extern void _ZN7S7673C12v6Ev();
extern void _ZN7S7673C42v8Ev();
extern void _ZN7S7673C42v9Ev();
extern void _ZN7S7673C43v10Ev();
extern void ABISELECT(_ZThn104_N7S7673C1D1Ev,_ZThn60_N7S7673C1D1Ev)();
extern void ABISELECT(_ZThn104_N7S7673C1D0Ev,_ZThn60_N7S7673C1D0Ev)();
extern void _ZN10S7673C3_nt2v7Ev();
extern void _ZN10S7673C5_nt3v14Ev();
extern void _ZN10S7673C5_nt3v15Ev();
extern void _ZN10S7673C5_nt3v16Ev();
extern void _ZN10S7673C5_nt3v17Ev();
extern void _ZN10S7673C5_nt3v18Ev();
extern void ABISELECT(_ZTv0_n24_N7S7673C1D1Ev,_ZTv0_n12_N7S7673C1D1Ev)();
extern void ABISELECT(_ZThn128_N7S7673C1D1Ev,_ZThn72_N7S7673C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7673C1D0Ev,_ZTv0_n12_N7S7673C1D0Ev)();
extern void ABISELECT(_ZThn128_N7S7673C1D0Ev,_ZThn72_N7S7673C1D0Ev)() __attribute__((weak));
extern void _ZN10S7673C3_nt2v7Ev();
extern void _ZN10S7673C6_nt3v12Ev();
extern void _ZN10S7673C6_nt3v13Ev();
extern void _ZN10S7673C7_nt3v19Ev();
extern void _ZN10S7673C7_nt3v20Ev();
extern void _ZN10S7673C7_nt3v21Ev();
extern void _ZN10S7673C7_nt3v22Ev();
extern void _ZN10S7673C7_nt3v23Ev();
extern void _ZN10S7673C7_nt3v24Ev();
extern void _ZN10S7673C7_nt3v25Ev();
extern void _ZN10S7673C7_nt3v26Ev();
extern void _ZN10S7673C8_nt3v27Ev();
static  VTBL_ENTRY vtc_S7673C1[] = {
  ABISELECT(152,88),
  ABISELECT(136,76),
  ABISELECT(128,72),
  ABISELECT(128,72),
  0,
  (VTBL_ENTRY)&(_ZTI7S7673C1[0]),
  (VTBL_ENTRY)&_ZN7S7673C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7673C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7673C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7673C1D1Ev,
  (VTBL_ENTRY)&_ZN7S7673C1D0Ev,
  (VTBL_ENTRY)&_ZN10S7673C2_nt3v11Ev,
  (VTBL_ENTRY)&_ZN7S7673C12v1Ev,
  (VTBL_ENTRY)&_ZN7S7673C12v2Ev,
  (VTBL_ENTRY)&_ZN7S7673C12v3Ev,
  (VTBL_ENTRY)&_ZN7S7673C12v4Ev,
  (VTBL_ENTRY)&_ZN7S7673C12v5Ev,
  (VTBL_ENTRY)&_ZN7S7673C12v6Ev,
  ABISELECT(-88,-48),
  (VTBL_ENTRY)&(_ZTI7S7673C1[0]),
  (VTBL_ENTRY)&_ZN7S7673C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7673C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7673C43v10Ev,
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(-104,-60),
  (VTBL_ENTRY)&(_ZTI7S7673C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn104_N7S7673C1D1Ev,_ZThn60_N7S7673C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn104_N7S7673C1D0Ev,_ZThn60_N7S7673C1D0Ev),
  (VTBL_ENTRY)&_ZN10S7673C3_nt2v7Ev,
  (VTBL_ENTRY)&_ZN10S7673C5_nt3v14Ev,
  (VTBL_ENTRY)&_ZN10S7673C5_nt3v15Ev,
  (VTBL_ENTRY)&_ZN10S7673C5_nt3v16Ev,
  (VTBL_ENTRY)&_ZN10S7673C5_nt3v17Ev,
  (VTBL_ENTRY)&_ZN10S7673C5_nt3v18Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-128,-72),
  ABISELECT(-128,-72),
  (VTBL_ENTRY)&(_ZTI7S7673C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7673C1D1Ev,_ZTv0_n12_N7S7673C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7673C1D0Ev,_ZTv0_n12_N7S7673C1D0Ev),
  (VTBL_ENTRY)&_ZN10S7673C3_nt2v7Ev,
  (VTBL_ENTRY)&_ZN10S7673C6_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S7673C6_nt3v13Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-136,-76),
  (VTBL_ENTRY)&(_ZTI7S7673C1[0]),
  (VTBL_ENTRY)&_ZN10S7673C7_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S7673C7_nt3v20Ev,
  (VTBL_ENTRY)&_ZN10S7673C7_nt3v21Ev,
  (VTBL_ENTRY)&_ZN10S7673C7_nt3v22Ev,
  (VTBL_ENTRY)&_ZN10S7673C7_nt3v23Ev,
  (VTBL_ENTRY)&_ZN10S7673C7_nt3v24Ev,
  (VTBL_ENTRY)&_ZN10S7673C7_nt3v25Ev,
  (VTBL_ENTRY)&_ZN10S7673C7_nt3v26Ev,
  0,
  ABISELECT(-152,-88),
  (VTBL_ENTRY)&(_ZTI7S7673C1[0]),
  (VTBL_ENTRY)&_ZN10S7673C8_nt3v27Ev,
};
extern VTBL_ENTRY _ZTV7S7673C1[];
extern void _ZN7S7673C42v8Ev();
extern void _ZN7S7673C42v9Ev();
extern void _ZN7S7673C43v10Ev();
extern void _ZN10S7673C2_ntD1Ev();
extern void _ZN10S7673C2_ntD0Ev();
extern void _ZN10S7673C2_nt3v11Ev();
static  VTBL_ENTRY _tg__ZTV10S7673C2_nt__7S7673C1[] = {
  ABISELECT(128,72),
  0,
  (VTBL_ENTRY)&(_ZTI10S7673C2_nt[0]),
  (VTBL_ENTRY)&_ZN7S7673C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7673C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7673C43v10Ev,
  (VTBL_ENTRY)&_ZN10S7673C2_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S7673C2_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S7673C2_nt3v11Ev,
};
extern void ABISELECT(_ZTv0_n24_N10S7673C2_ntD1Ev,_ZTv0_n12_N10S7673C2_ntD1Ev)();
extern void ABISELECT(_ZThn128_N10S7673C2_ntD1Ev,_ZThn72_N10S7673C2_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N10S7673C2_ntD0Ev,_ZTv0_n12_N10S7673C2_ntD0Ev)();
extern void ABISELECT(_ZThn128_N10S7673C2_ntD0Ev,_ZThn72_N10S7673C2_ntD0Ev)() __attribute__((weak));
extern void _ZN10S7673C3_nt2v7Ev();
static  VTBL_ENTRY _tg__ZTV10S7673C3_nt__10S7673C2_nt__7S7673C1[] = {
  0,
  ABISELECT(-128,-72),
  ABISELECT(-128,-72),
  (VTBL_ENTRY)&(_ZTI10S7673C2_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N10S7673C2_ntD1Ev,_ZTv0_n12_N10S7673C2_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N10S7673C2_ntD0Ev,_ZTv0_n12_N10S7673C2_ntD0Ev),
  (VTBL_ENTRY)&_ZN10S7673C3_nt2v7Ev,
};
extern void _ZN10S7673C5_ntD1Ev();
extern void _ZN10S7673C5_ntD0Ev();
extern void _ZN10S7673C3_nt2v7Ev();
extern void _ZN10S7673C5_nt3v14Ev();
extern void _ZN10S7673C5_nt3v15Ev();
extern void _ZN10S7673C5_nt3v16Ev();
extern void _ZN10S7673C5_nt3v17Ev();
extern void _ZN10S7673C5_nt3v18Ev();
static  VTBL_ENTRY _tg__ZTV10S7673C5_nt__7S7673C1[] = {
  ABISELECT(24,12),
  ABISELECT(24,12),
  0,
  (VTBL_ENTRY)&(_ZTI10S7673C5_nt[0]),
  (VTBL_ENTRY)&_ZN10S7673C5_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S7673C5_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S7673C3_nt2v7Ev,
  (VTBL_ENTRY)&_ZN10S7673C5_nt3v14Ev,
  (VTBL_ENTRY)&_ZN10S7673C5_nt3v15Ev,
  (VTBL_ENTRY)&_ZN10S7673C5_nt3v16Ev,
  (VTBL_ENTRY)&_ZN10S7673C5_nt3v17Ev,
  (VTBL_ENTRY)&_ZN10S7673C5_nt3v18Ev,
};
extern void ABISELECT(_ZTv0_n24_N10S7673C5_ntD1Ev,_ZTv0_n12_N10S7673C5_ntD1Ev)();
extern void ABISELECT(_ZThn24_N10S7673C5_ntD1Ev,_ZThn12_N10S7673C5_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N10S7673C5_ntD0Ev,_ZTv0_n12_N10S7673C5_ntD0Ev)();
extern void ABISELECT(_ZThn24_N10S7673C5_ntD0Ev,_ZThn12_N10S7673C5_ntD0Ev)() __attribute__((weak));
extern void _ZN10S7673C3_nt2v7Ev();
extern void _ZN10S7673C6_nt3v12Ev();
extern void _ZN10S7673C6_nt3v13Ev();
static  VTBL_ENTRY _tg__ZTV10S7673C6_nt__10S7673C5_nt__7S7673C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI10S7673C5_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N10S7673C5_ntD1Ev,_ZTv0_n12_N10S7673C5_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N10S7673C5_ntD0Ev,_ZTv0_n12_N10S7673C5_ntD0Ev),
  (VTBL_ENTRY)&_ZN10S7673C3_nt2v7Ev,
  (VTBL_ENTRY)&_ZN10S7673C6_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S7673C6_nt3v13Ev,
};
extern void ABISELECT(_ZTv0_n24_N10S7673C6_ntD1Ev,_ZTv0_n12_N10S7673C6_ntD1Ev)();
extern void _ZN10S7673C6_ntD1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N10S7673C6_ntD0Ev,_ZTv0_n12_N10S7673C6_ntD0Ev)();
extern void _ZN10S7673C6_ntD0Ev() __attribute__((weak));
extern void _ZN10S7673C3_nt2v7Ev();
extern void _ZN10S7673C6_nt3v12Ev();
extern void _ZN10S7673C6_nt3v13Ev();
static  VTBL_ENTRY _tg__ZTV10S7673C6_nt__7S7673C1[] = {
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI10S7673C6_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N10S7673C6_ntD1Ev,_ZTv0_n12_N10S7673C6_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N10S7673C6_ntD0Ev,_ZTv0_n12_N10S7673C6_ntD0Ev),
  (VTBL_ENTRY)&_ZN10S7673C3_nt2v7Ev,
  (VTBL_ENTRY)&_ZN10S7673C6_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S7673C6_nt3v13Ev,
};
static  VTT_ENTRY vtt_S7673C1[] = {
  {&(_ZTV7S7673C1[6]),  6,69},
  {&(_tg__ZTV10S7673C2_nt__7S7673C1[3]),  3,9},
  {&(_tg__ZTV10S7673C3_nt__10S7673C2_nt__7S7673C1[4]),  4,7},
  {&(_tg__ZTV10S7673C5_nt__7S7673C1[4]),  4,12},
  {&(_tg__ZTV10S7673C6_nt__10S7673C5_nt__7S7673C1[7]),  7,12},
  {&(_tg__ZTV10S7673C6_nt__10S7673C5_nt__7S7673C1[7]),  7,12},
  {&(_ZTV7S7673C1[42]),  42,69},
  {&(_ZTV7S7673C1[27]),  27,69},
  {&(_ZTV7S7673C1[42]),  42,69},
  {&(_ZTV7S7673C1[57]),  57,69},
  {&(_ZTV7S7673C1[68]),  68,69},
  {&(_tg__ZTV10S7673C6_nt__7S7673C1[5]),  5,10},
  {&(_tg__ZTV10S7673C6_nt__7S7673C1[5]),  5,10},
};
extern VTBL_ENTRY _ZTI7S7673C1[];
extern  VTBL_ENTRY _ZTV7S7673C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7673C1[];
static VTBL_ENTRY alt_thunk_names8[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N10S7673C6_ntD0Ev,_ZTv0_n12_N10S7673C6_ntD0Ev), // 
  (VTBL_ENTRY)_ZN10S7673C6_ntD0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N10S7673C6_ntD1Ev,_ZTv0_n12_N10S7673C6_ntD1Ev), // 
  (VTBL_ENTRY)_ZN10S7673C6_ntD1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N10S7673C5_ntD0Ev,_ZTv0_n12_N10S7673C5_ntD0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N10S7673C5_ntD0Ev,_ZThn12_N10S7673C5_ntD0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N10S7673C5_ntD1Ev,_ZTv0_n12_N10S7673C5_ntD1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N10S7673C5_ntD1Ev,_ZThn12_N10S7673C5_ntD1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N10S7673C2_ntD0Ev,_ZTv0_n12_N10S7673C2_ntD0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn128_N10S7673C2_ntD0Ev,_ZThn72_N10S7673C2_ntD0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N10S7673C2_ntD1Ev,_ZTv0_n12_N10S7673C2_ntD1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn128_N10S7673C2_ntD1Ev,_ZThn72_N10S7673C2_ntD1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7673C1D0Ev,_ZTv0_n12_N7S7673C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn128_N7S7673C1D0Ev,_ZThn72_N7S7673C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7673C1D1Ev,_ZTv0_n12_N7S7673C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn128_N7S7673C1D1Ev,_ZThn72_N7S7673C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7673C1 = {  "S7673C1", // class name
  bases_S7673C1, 9,
  &(vtc_S7673C1[0]), // expected_vtbl_contents
  &(vtt_S7673C1[0]), // expected_vtt_contents
  ABISELECT(176,100), // object size
  NSPAIRA(_ZTI7S7673C1),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV7S7673C1),69, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7673C1),13, //virtual table table var
  9, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names8,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S922C5_nt  {
  char s922c5f0;
  int s922c5f1;
  virtual  ~S922C5_nt(); // _ZN9S922C5_ntD1Ev
  virtual void  v5(); // _ZN9S922C5_nt2v5Ev
  S922C5_nt(); // tgen
};
//SIG(-1 S922C5_nt) C1{ vd v1 Fc Fi}


 S922C5_nt ::~S922C5_nt(){ note_dtor("S922C5_nt", this);}
void  S922C5_nt ::v5(){vfunc_called(this, "_ZN9S922C5_nt2v5Ev");}
S922C5_nt ::S922C5_nt(){ note_ctor("S922C5_nt", this);} // tgen

//skip512 S922C5_nt

#else // __cplusplus

extern void _ZN9S922C5_ntC1Ev();
extern void _ZN9S922C5_ntD1Ev();
Name_Map name_map_S922C5_nt[] = {
  NSPAIR(_ZN9S922C5_ntC1Ev),
  NSPAIR(_ZN9S922C5_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI9S922C5_nt[];
extern void _ZN9S922C5_ntD1Ev();
extern void _ZN9S922C5_ntD0Ev();
extern void _ZN9S922C5_nt2v5Ev();
static  VTBL_ENTRY vtc_S922C5_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S922C5_nt[0]),
  (VTBL_ENTRY)&_ZN9S922C5_ntD1Ev,
  (VTBL_ENTRY)&_ZN9S922C5_ntD0Ev,
  (VTBL_ENTRY)&_ZN9S922C5_nt2v5Ev,
};
extern VTBL_ENTRY _ZTI9S922C5_nt[];
VTBL_ENTRY *P__ZTI9S922C5_nt = _ZTI9S922C5_nt; 
extern  VTBL_ENTRY _ZTV9S922C5_nt[];
Class_Descriptor cd_S922C5_nt = {  "S922C5_nt", // class name
  0,0,//no base classes
  &(vtc_S922C5_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI9S922C5_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV9S922C5_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  S922C4  : S922C5_nt {
  void *s922c4f0;
  char s922c4f1[2];
  virtual  ~S922C4(); // _ZN6S922C4D1Ev
  virtual void  v6(); // _ZN6S922C42v6Ev
  S922C4(); // tgen
};
//SIG(-1 S922C4) C1{ BC2{ vd v2 Fc Fi} vd v1 Fp Fc[2]}


 S922C4 ::~S922C4(){ note_dtor("S922C4", this);}
void  S922C4 ::v6(){vfunc_called(this, "_ZN6S922C42v6Ev");}
S922C4 ::S922C4(){ note_ctor("S922C4", this);} // tgen

static void Test_S922C4()
{
  extern Class_Descriptor cd_S922C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,6)];
    init_test(&cd_S922C4, buf);
    S922C4 *dp, &lv = *(dp=new (buf) S922C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S922C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S922C4)");
    check_base_class_offset(lv, (S922C5_nt*), 0, "S922C4");
    check_field_offset(lv, s922c4f0, ABISELECT(16,12), "S922C4.s922c4f0");
    check_field_offset(lv, s922c4f1, ABISELECT(24,16), "S922C4.s922c4f1");
    test_class_info(&lv, &cd_S922C4);
    dp->~S922C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS922C4(Test_S922C4, "S922C4", ABISELECT(32,20));

#else // __cplusplus

extern void _ZN6S922C4C1Ev();
extern void _ZN6S922C4D1Ev();
Name_Map name_map_S922C4[] = {
  NSPAIR(_ZN6S922C4C1Ev),
  NSPAIR(_ZN6S922C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S922C5_nt;
extern VTBL_ENTRY _ZTI9S922C5_nt[];
extern  VTBL_ENTRY _ZTV9S922C5_nt[];
static Base_Class bases_S922C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S922C5_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 _ZTI6S922C4[];
extern void _ZN6S922C4D1Ev();
extern void _ZN6S922C4D0Ev();
extern void _ZN9S922C5_nt2v5Ev();
extern void _ZN6S922C42v6Ev();
static  VTBL_ENTRY vtc_S922C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S922C4[0]),
  (VTBL_ENTRY)&_ZN6S922C4D1Ev,
  (VTBL_ENTRY)&_ZN6S922C4D0Ev,
  (VTBL_ENTRY)&_ZN9S922C5_nt2v5Ev,
  (VTBL_ENTRY)&_ZN6S922C42v6Ev,
};
extern VTBL_ENTRY _ZTI6S922C4[];
extern  VTBL_ENTRY _ZTV6S922C4[];
Class_Descriptor cd_S922C4 = {  "S922C4", // class name
  bases_S922C4, 1,
  &(vtc_S922C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,20), // object size
  NSPAIRA(_ZTI6S922C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S922C4),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  S922C3  : S922C4 {
  void *s922c3f0[2];
  int s922c3f1[3];
  char s922c3f2[2];
  void *s922c3f3;
  virtual  ~S922C3(); // _ZN6S922C3D1Ev
  virtual void  v7(); // _ZN6S922C32v7Ev
  virtual void  v8(); // _ZN6S922C32v8Ev
  virtual void  v9(); // _ZN6S922C32v9Ev
  virtual void  v10(); // _ZN6S922C33v10Ev
  S922C3(); // tgen
};
//SIG(-1 S922C3) C1{ BC2{ BC3{ vd v5 Fc Fi} vd v6 Fp Fc[2]} vd v1 v2 v3 v4 Fp[2] Fi[3] Fc[2] Fp}


 S922C3 ::~S922C3(){ note_dtor("S922C3", this);}
void  S922C3 ::v7(){vfunc_called(this, "_ZN6S922C32v7Ev");}
void  S922C3 ::v8(){vfunc_called(this, "_ZN6S922C32v8Ev");}
void  S922C3 ::v9(){vfunc_called(this, "_ZN6S922C32v9Ev");}
void  S922C3 ::v10(){vfunc_called(this, "_ZN6S922C33v10Ev");}
S922C3 ::S922C3(){ note_ctor("S922C3", this);} // tgen

static void Test_S922C3()
{
  extern Class_Descriptor cd_S922C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,13)];
    init_test(&cd_S922C3, buf);
    S922C3 *dp, &lv = *(dp=new (buf) S922C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,48), "sizeof(S922C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S922C3)");
    check_base_class_offset(lv, (S922C5_nt*)(S922C4*), 0, "S922C3");
    check_base_class_offset(lv, (S922C4*), 0, "S922C3");
    check_field_offset(lv, s922c3f0, ABISELECT(32,20), "S922C3.s922c3f0");
    check_field_offset(lv, s922c3f1, ABISELECT(48,28), "S922C3.s922c3f1");
    check_field_offset(lv, s922c3f2, ABISELECT(60,40), "S922C3.s922c3f2");
    check_field_offset(lv, s922c3f3, ABISELECT(64,44), "S922C3.s922c3f3");
    test_class_info(&lv, &cd_S922C3);
    dp->~S922C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS922C3(Test_S922C3, "S922C3", ABISELECT(72,48));

#else // __cplusplus

extern void _ZN6S922C3C1Ev();
extern void _ZN6S922C3D1Ev();
Name_Map name_map_S922C3[] = {
  NSPAIR(_ZN6S922C3C1Ev),
  NSPAIR(_ZN6S922C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S922C5_nt;
extern VTBL_ENTRY _ZTI9S922C5_nt[];
extern  VTBL_ENTRY _ZTV9S922C5_nt[];
extern Class_Descriptor cd_S922C4;
extern VTBL_ENTRY _ZTI6S922C4[];
extern  VTBL_ENTRY _ZTV6S922C4[];
static Base_Class bases_S922C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S922C5_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_S922C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S922C3[];
extern void _ZN6S922C3D1Ev();
extern void _ZN6S922C3D0Ev();
extern void _ZN9S922C5_nt2v5Ev();
extern void _ZN6S922C42v6Ev();
extern void _ZN6S922C32v7Ev();
extern void _ZN6S922C32v8Ev();
extern void _ZN6S922C32v9Ev();
extern void _ZN6S922C33v10Ev();
static  VTBL_ENTRY vtc_S922C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S922C3[0]),
  (VTBL_ENTRY)&_ZN6S922C3D1Ev,
  (VTBL_ENTRY)&_ZN6S922C3D0Ev,
  (VTBL_ENTRY)&_ZN9S922C5_nt2v5Ev,
  (VTBL_ENTRY)&_ZN6S922C42v6Ev,
  (VTBL_ENTRY)&_ZN6S922C32v7Ev,
  (VTBL_ENTRY)&_ZN6S922C32v8Ev,
  (VTBL_ENTRY)&_ZN6S922C32v9Ev,
  (VTBL_ENTRY)&_ZN6S922C33v10Ev,
};
extern VTBL_ENTRY _ZTI6S922C3[];
extern  VTBL_ENTRY _ZTV6S922C3[];
Class_Descriptor cd_S922C3 = {  "S922C3", // class name
  bases_S922C3, 2,
  &(vtc_S922C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,48), // object size
  NSPAIRA(_ZTI6S922C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S922C3),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  S922C2  : S922C3 {
  virtual  ~S922C2(); // _ZN6S922C2D1Ev
  virtual void  v11(); // _ZN6S922C23v11Ev
  virtual void  v12(); // _ZN6S922C23v12Ev
  virtual void  v13(); // _ZN6S922C23v13Ev
  S922C2(); // tgen
};
//SIG(-1 S922C2) C1{ BC2{ BC3{ BC4{ vd v4 Fc Fi} vd v5 Fp Fc[2]} vd v6 v7 v8 v9 Fp[2] Fi[3] Fc[2] Fp} vd v1 v2 v3}


 S922C2 ::~S922C2(){ note_dtor("S922C2", this);}
void  S922C2 ::v11(){vfunc_called(this, "_ZN6S922C23v11Ev");}
void  S922C2 ::v12(){vfunc_called(this, "_ZN6S922C23v12Ev");}
void  S922C2 ::v13(){vfunc_called(this, "_ZN6S922C23v13Ev");}
S922C2 ::S922C2(){ note_ctor("S922C2", this);} // tgen

static void Test_S922C2()
{
  extern Class_Descriptor cd_S922C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,13)];
    init_test(&cd_S922C2, buf);
    S922C2 *dp, &lv = *(dp=new (buf) S922C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,48), "sizeof(S922C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S922C2)");
    check_base_class_offset(lv, (S922C5_nt*)(S922C4*)(S922C3*), 0, "S922C2");
    check_base_class_offset(lv, (S922C4*)(S922C3*), 0, "S922C2");
    check_base_class_offset(lv, (S922C3*), 0, "S922C2");
    test_class_info(&lv, &cd_S922C2);
    dp->~S922C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS922C2(Test_S922C2, "S922C2", ABISELECT(72,48));

#else // __cplusplus

extern void _ZN6S922C2C1Ev();
extern void _ZN6S922C2D1Ev();
Name_Map name_map_S922C2[] = {
  NSPAIR(_ZN6S922C2C1Ev),
  NSPAIR(_ZN6S922C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S922C5_nt;
extern VTBL_ENTRY _ZTI9S922C5_nt[];
extern  VTBL_ENTRY _ZTV9S922C5_nt[];
extern Class_Descriptor cd_S922C4;
extern VTBL_ENTRY _ZTI6S922C4[];
extern  VTBL_ENTRY _ZTV6S922C4[];
extern Class_Descriptor cd_S922C3;
extern VTBL_ENTRY _ZTI6S922C3[];
extern  VTBL_ENTRY _ZTV6S922C3[];
static Base_Class bases_S922C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S922C5_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_S922C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S922C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S922C2[];
extern void _ZN6S922C2D1Ev();
extern void _ZN6S922C2D0Ev();
extern void _ZN9S922C5_nt2v5Ev();
extern void _ZN6S922C42v6Ev();
extern void _ZN6S922C32v7Ev();
extern void _ZN6S922C32v8Ev();
extern void _ZN6S922C32v9Ev();
extern void _ZN6S922C33v10Ev();
extern void _ZN6S922C23v11Ev();
extern void _ZN6S922C23v12Ev();
extern void _ZN6S922C23v13Ev();
static  VTBL_ENTRY vtc_S922C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S922C2[0]),
  (VTBL_ENTRY)&_ZN6S922C2D1Ev,
  (VTBL_ENTRY)&_ZN6S922C2D0Ev,
  (VTBL_ENTRY)&_ZN9S922C5_nt2v5Ev,
  (VTBL_ENTRY)&_ZN6S922C42v6Ev,
  (VTBL_ENTRY)&_ZN6S922C32v7Ev,
  (VTBL_ENTRY)&_ZN6S922C32v8Ev,
  (VTBL_ENTRY)&_ZN6S922C32v9Ev,
  (VTBL_ENTRY)&_ZN6S922C33v10Ev,
  (VTBL_ENTRY)&_ZN6S922C23v11Ev,
  (VTBL_ENTRY)&_ZN6S922C23v12Ev,
  (VTBL_ENTRY)&_ZN6S922C23v13Ev,
};
extern VTBL_ENTRY _ZTI6S922C2[];
extern  VTBL_ENTRY _ZTV6S922C2[];
Class_Descriptor cd_S922C2 = {  "S922C2", // class name
  bases_S922C2, 3,
  &(vtc_S922C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,48), // object size
  NSPAIRA(_ZTI6S922C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S922C2),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  S922C1  : S922C2 {
  void *s922c1f0;
  int s922c1f1;
  void *s922c1f2[5];
  int s922c1f3;
  void *s922c1f4;
  int s922c1f5;
  void *s922c1f6;
  int s922c1f7[7];
  void *s922c1f8[18];
  int s922c1f9;
  void *s922c1f10;
  int s922c1f11[3];
  __tsi64 s922c1f12;
  int s922c1f13[5];
  void *s922c1f14[8];
  int s922c1f15;
  void *s922c1f16[2];
  virtual  ~S922C1(); // _ZN6S922C1D1Ev
  virtual void  v1(); // _ZN6S922C12v1Ev
  virtual void  v2(); // _ZN6S922C12v2Ev
  virtual void  v3(); // _ZN6S922C12v3Ev
  virtual void  v4(); // _ZN6S922C12v4Ev
  S922C1(); // tgen
};
//SIG(1 S922C1) C1{ BC2{ BC3{ BC4{ BC5{ vd v5 Fc Fi} vd v6 Fp Fc[2]} vd v7 v8 v9 v10 Fp[2] Fi[3] Fc[2] Fp} vd v11 v12 v13} vd v1 v2 v3 v4 Fp Fi Fp[5] Fi Fp Fi Fp Fi[7] Fp[18] Fi Fp Fi[3] FL Fi[5] Fp[8] Fi Fp[2]}


 S922C1 ::~S922C1(){ note_dtor("S922C1", this);}
void  S922C1 ::v1(){vfunc_called(this, "_ZN6S922C12v1Ev");}
void  S922C1 ::v2(){vfunc_called(this, "_ZN6S922C12v2Ev");}
void  S922C1 ::v3(){vfunc_called(this, "_ZN6S922C12v3Ev");}
void  S922C1 ::v4(){vfunc_called(this, "_ZN6S922C12v4Ev");}
S922C1 ::S922C1(){ note_ctor("S922C1", this);} // tgen

static void Test_S922C1()
{
  extern Class_Descriptor cd_S922C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(62,72)];
    init_test(&cd_S922C1, buf);
    S922C1 *dp, &lv = *(dp=new (buf) S922C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(488,284), "sizeof(S922C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S922C1)");
    check_base_class_offset(lv, (S922C5_nt*)(S922C4*)(S922C3*)(S922C2*), 0, "S922C1");
    check_base_class_offset(lv, (S922C4*)(S922C3*)(S922C2*), 0, "S922C1");
    check_base_class_offset(lv, (S922C3*)(S922C2*), 0, "S922C1");
    check_base_class_offset(lv, (S922C2*), 0, "S922C1");
    check_field_offset(lv, s922c1f0, ABISELECT(72,48), "S922C1.s922c1f0");
    check_field_offset(lv, s922c1f1, ABISELECT(80,52), "S922C1.s922c1f1");
    check_field_offset(lv, s922c1f2, ABISELECT(88,56), "S922C1.s922c1f2");
    check_field_offset(lv, s922c1f3, ABISELECT(128,76), "S922C1.s922c1f3");
    check_field_offset(lv, s922c1f4, ABISELECT(136,80), "S922C1.s922c1f4");
    check_field_offset(lv, s922c1f5, ABISELECT(144,84), "S922C1.s922c1f5");
    check_field_offset(lv, s922c1f6, ABISELECT(152,88), "S922C1.s922c1f6");
    check_field_offset(lv, s922c1f7, ABISELECT(160,92), "S922C1.s922c1f7");
    check_field_offset(lv, s922c1f8, ABISELECT(192,120), "S922C1.s922c1f8");
    check_field_offset(lv, s922c1f9, ABISELECT(336,192), "S922C1.s922c1f9");
    check_field_offset(lv, s922c1f10, ABISELECT(344,196), "S922C1.s922c1f10");
    check_field_offset(lv, s922c1f11, ABISELECT(352,200), "S922C1.s922c1f11");
    check_field_offset(lv, s922c1f12, ABISELECT(368,212), "S922C1.s922c1f12");
    check_field_offset(lv, s922c1f13, ABISELECT(376,220), "S922C1.s922c1f13");
    check_field_offset(lv, s922c1f14, ABISELECT(400,240), "S922C1.s922c1f14");
    check_field_offset(lv, s922c1f15, ABISELECT(464,272), "S922C1.s922c1f15");
    check_field_offset(lv, s922c1f16, ABISELECT(472,276), "S922C1.s922c1f16");
    test_class_info(&lv, &cd_S922C1);
    dp->~S922C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS922C1(Test_S922C1, "S922C1", ABISELECT(488,284));

#else // __cplusplus

extern void _ZN6S922C1C1Ev();
extern void _ZN6S922C1D1Ev();
Name_Map name_map_S922C1[] = {
  NSPAIR(_ZN6S922C1C1Ev),
  NSPAIR(_ZN6S922C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S922C5_nt;
extern VTBL_ENTRY _ZTI9S922C5_nt[];
extern  VTBL_ENTRY _ZTV9S922C5_nt[];
extern Class_Descriptor cd_S922C4;
extern VTBL_ENTRY _ZTI6S922C4[];
extern  VTBL_ENTRY _ZTV6S922C4[];
extern Class_Descriptor cd_S922C3;
extern VTBL_ENTRY _ZTI6S922C3[];
extern  VTBL_ENTRY _ZTV6S922C3[];
extern Class_Descriptor cd_S922C2;
extern VTBL_ENTRY _ZTI6S922C2[];
extern  VTBL_ENTRY _ZTV6S922C2[];
static Base_Class bases_S922C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S922C5_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_S922C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S922C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S922C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S922C1[];
extern void _ZN6S922C1D1Ev();
extern void _ZN6S922C1D0Ev();
extern void _ZN9S922C5_nt2v5Ev();
extern void _ZN6S922C42v6Ev();
extern void _ZN6S922C32v7Ev();
extern void _ZN6S922C32v8Ev();
extern void _ZN6S922C32v9Ev();
extern void _ZN6S922C33v10Ev();
extern void _ZN6S922C23v11Ev();
extern void _ZN6S922C23v12Ev();
extern void _ZN6S922C23v13Ev();
extern void _ZN6S922C12v1Ev();
extern void _ZN6S922C12v2Ev();
extern void _ZN6S922C12v3Ev();
extern void _ZN6S922C12v4Ev();
static  VTBL_ENTRY vtc_S922C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S922C1[0]),
  (VTBL_ENTRY)&_ZN6S922C1D1Ev,
  (VTBL_ENTRY)&_ZN6S922C1D0Ev,
  (VTBL_ENTRY)&_ZN9S922C5_nt2v5Ev,
  (VTBL_ENTRY)&_ZN6S922C42v6Ev,
  (VTBL_ENTRY)&_ZN6S922C32v7Ev,
  (VTBL_ENTRY)&_ZN6S922C32v8Ev,
  (VTBL_ENTRY)&_ZN6S922C32v9Ev,
  (VTBL_ENTRY)&_ZN6S922C33v10Ev,
  (VTBL_ENTRY)&_ZN6S922C23v11Ev,
  (VTBL_ENTRY)&_ZN6S922C23v12Ev,
  (VTBL_ENTRY)&_ZN6S922C23v13Ev,
  (VTBL_ENTRY)&_ZN6S922C12v1Ev,
  (VTBL_ENTRY)&_ZN6S922C12v2Ev,
  (VTBL_ENTRY)&_ZN6S922C12v3Ev,
  (VTBL_ENTRY)&_ZN6S922C12v4Ev,
};
extern VTBL_ENTRY _ZTI6S922C1[];
extern  VTBL_ENTRY _ZTV6S922C1[];
Class_Descriptor cd_S922C1 = {  "S922C1", // class name
  bases_S922C1, 4,
  &(vtc_S922C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(488,284), // object size
  NSPAIRA(_ZTI6S922C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S922C1),17, //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  S5399C3  {
  virtual  ~S5399C3(); // _ZN7S5399C3D1Ev
  virtual void  v7(); // _ZN7S5399C32v7Ev
  S5399C3(); // tgen
};
//SIG(-1 S5399C3) C1{ vd v1}


 S5399C3 ::~S5399C3(){ note_dtor("S5399C3", this);}
void  S5399C3 ::v7(){vfunc_called(this, "_ZN7S5399C32v7Ev");}
S5399C3 ::S5399C3(){ note_ctor("S5399C3", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S5399C3C1Ev();
extern void _ZN7S5399C3D1Ev();
Name_Map name_map_S5399C3[] = {
  NSPAIR(_ZN7S5399C3C1Ev),
  NSPAIR(_ZN7S5399C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S5399C3[];
extern void _ZN7S5399C3D1Ev();
extern void _ZN7S5399C3D0Ev();
extern void _ZN7S5399C32v7Ev();
static  VTBL_ENTRY vtc_S5399C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5399C3[0]),
  (VTBL_ENTRY)&_ZN7S5399C3D1Ev,
  (VTBL_ENTRY)&_ZN7S5399C3D0Ev,
  (VTBL_ENTRY)&_ZN7S5399C32v7Ev,
};
extern VTBL_ENTRY _ZTI7S5399C3[];
extern  VTBL_ENTRY _ZTV7S5399C3[];
Class_Descriptor cd_S5399C3 = {  "S5399C3", // class name
  0,0,//no base classes
  &(vtc_S5399C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S5399C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S5399C3),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  S5399C2  : S5399C3 {
  void *s5399c2f0[4];
  ::S21579C10 s5399c2f1;
  int s5399c2f2[5];
  char s5399c2f3[3];
  ::S3625C18_nt s5399c2f4;
  ::S3625C18_nt s5399c2f5;
  ::S3625C18_nt s5399c2f6;
  ::S3625C18_nt s5399c2f7;
  void *s5399c2f8;
  virtual  ~S5399C2(); // _ZN7S5399C2D1Ev
  virtual void  v8(); // _ZN7S5399C22v8Ev
  virtual void  v9(); // _ZN7S5399C22v9Ev
  virtual void  v10(); // _ZN7S5399C23v10Ev
  virtual void  v11(); // _ZN7S5399C23v11Ev
  virtual void  v12(); // _ZN7S5399C23v12Ev
  virtual void  v13(); // _ZN7S5399C23v13Ev
  virtual void  v14(); // _ZN7S5399C23v14Ev
  virtual void  v15(); // _ZN7S5399C23v15Ev
  S5399C2(); // tgen
};
//SIG(-1 S5399C2) C1{ BC2{ vd v9} vd v1 v2 v3 v4 v5 v6 v7 v8 Fp[4] FC3{ m Fp Fi[2] Fp[2]} Fi[5] Fc[3] FC4{ m Fp Fi FC5{ m}} FC4 FC4 FC4 Fp}


 S5399C2 ::~S5399C2(){ note_dtor("S5399C2", this);}
void  S5399C2 ::v8(){vfunc_called(this, "_ZN7S5399C22v8Ev");}
void  S5399C2 ::v9(){vfunc_called(this, "_ZN7S5399C22v9Ev");}
void  S5399C2 ::v10(){vfunc_called(this, "_ZN7S5399C23v10Ev");}
void  S5399C2 ::v11(){vfunc_called(this, "_ZN7S5399C23v11Ev");}
void  S5399C2 ::v12(){vfunc_called(this, "_ZN7S5399C23v12Ev");}
void  S5399C2 ::v13(){vfunc_called(this, "_ZN7S5399C23v13Ev");}
void  S5399C2 ::v14(){vfunc_called(this, "_ZN7S5399C23v14Ev");}
void  S5399C2 ::v15(){vfunc_called(this, "_ZN7S5399C23v15Ev");}
S5399C2 ::S5399C2(){ note_ctor("S5399C2", this);} // tgen

static void Test_S5399C2()
{
  extern Class_Descriptor cd_S5399C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(22,30)];
    init_test(&cd_S5399C2, buf);
    S5399C2 *dp, &lv = *(dp=new (buf) S5399C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(168,116), "sizeof(S5399C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5399C2)");
    check_base_class_offset(lv, (S5399C3*), 0, "S5399C2");
    check_field_offset(lv, s5399c2f0, ABISELECT(8,4), "S5399C2.s5399c2f0");
    check_field_offset(lv, s5399c2f1, ABISELECT(40,20), "S5399C2.s5399c2f1");
    check_field_offset(lv, s5399c2f2, ABISELECT(72,40), "S5399C2.s5399c2f2");
    check_field_offset(lv, s5399c2f3, ABISELECT(92,60), "S5399C2.s5399c2f3");
    check_field_offset(lv, s5399c2f4, ABISELECT(96,64), "S5399C2.s5399c2f4");
    check_field_offset(lv, s5399c2f5, ABISELECT(112,76), "S5399C2.s5399c2f5");
    check_field_offset(lv, s5399c2f6, ABISELECT(128,88), "S5399C2.s5399c2f6");
    check_field_offset(lv, s5399c2f7, ABISELECT(144,100), "S5399C2.s5399c2f7");
    check_field_offset(lv, s5399c2f8, ABISELECT(160,112), "S5399C2.s5399c2f8");
    test_class_info(&lv, &cd_S5399C2);
    dp->~S5399C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5399C2(Test_S5399C2, "S5399C2", ABISELECT(168,116));

#else // __cplusplus

extern void _ZN7S5399C2C1Ev();
extern void _ZN7S5399C2D1Ev();
Name_Map name_map_S5399C2[] = {
  NSPAIR(_ZN7S5399C2C1Ev),
  NSPAIR(_ZN7S5399C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5399C3;
extern VTBL_ENTRY _ZTI7S5399C3[];
extern  VTBL_ENTRY _ZTV7S5399C3[];
static Base_Class bases_S5399C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5399C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI7S5399C2[];
extern void _ZN7S5399C2D1Ev();
extern void _ZN7S5399C2D0Ev();
extern void _ZN7S5399C32v7Ev();
extern void _ZN7S5399C22v8Ev();
extern void _ZN7S5399C22v9Ev();
extern void _ZN7S5399C23v10Ev();
extern void _ZN7S5399C23v11Ev();
extern void _ZN7S5399C23v12Ev();
extern void _ZN7S5399C23v13Ev();
extern void _ZN7S5399C23v14Ev();
extern void _ZN7S5399C23v15Ev();
static  VTBL_ENTRY vtc_S5399C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5399C2[0]),
  (VTBL_ENTRY)&_ZN7S5399C2D1Ev,
  (VTBL_ENTRY)&_ZN7S5399C2D0Ev,
  (VTBL_ENTRY)&_ZN7S5399C32v7Ev,
  (VTBL_ENTRY)&_ZN7S5399C22v8Ev,
  (VTBL_ENTRY)&_ZN7S5399C22v9Ev,
  (VTBL_ENTRY)&_ZN7S5399C23v10Ev,
  (VTBL_ENTRY)&_ZN7S5399C23v11Ev,
  (VTBL_ENTRY)&_ZN7S5399C23v12Ev,
  (VTBL_ENTRY)&_ZN7S5399C23v13Ev,
  (VTBL_ENTRY)&_ZN7S5399C23v14Ev,
  (VTBL_ENTRY)&_ZN7S5399C23v15Ev,
};
extern VTBL_ENTRY _ZTI7S5399C2[];
extern  VTBL_ENTRY _ZTV7S5399C2[];
Class_Descriptor cd_S5399C2 = {  "S5399C2", // class name
  bases_S5399C2, 1,
  &(vtc_S5399C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(168,116), // object size
  NSPAIRA(_ZTI7S5399C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S5399C2),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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S5399C7  {
  void *s5399c7f0;
  ::S3625C18_nt s5399c7f1;
  ::S3625C18_nt s5399c7f2;
  void *s5399c7f3;
  void  mf5399c7(); // _ZN7S5399C78mf5399c7Ev
  virtual  ~S5399C7(); // _ZN7S5399C7D1Ev
  S5399C7(); // tgen
};
//SIG(-1 S5399C7) C1{ vd m Fp FC2{ m Fp Fi FC3{ m}} FC2 Fp}


void  S5399C7 ::mf5399c7(){}
 S5399C7 ::~S5399C7(){ note_dtor("S5399C7", this);}
S5399C7 ::S5399C7(){ note_ctor("S5399C7", this);} // tgen

static void Test_S5399C7()
{
  extern Class_Descriptor cd_S5399C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(8,10)];
    init_test(&cd_S5399C7, buf);
    S5399C7 *dp, &lv = *(dp=new (buf) S5399C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,36), "sizeof(S5399C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5399C7)");
    check_field_offset(lv, s5399c7f0, ABISELECT(8,4), "S5399C7.s5399c7f0");
    check_field_offset(lv, s5399c7f1, ABISELECT(16,8), "S5399C7.s5399c7f1");
    check_field_offset(lv, s5399c7f2, ABISELECT(32,20), "S5399C7.s5399c7f2");
    check_field_offset(lv, s5399c7f3, ABISELECT(48,32), "S5399C7.s5399c7f3");
    test_class_info(&lv, &cd_S5399C7);
    dp->~S5399C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5399C7(Test_S5399C7, "S5399C7", ABISELECT(56,36));

#else // __cplusplus

extern void _ZN7S5399C7C1Ev();
extern void _ZN7S5399C7D1Ev();
Name_Map name_map_S5399C7[] = {
  NSPAIR(_ZN7S5399C7C1Ev),
  NSPAIR(_ZN7S5399C7D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S5399C7[];
extern void _ZN7S5399C7D1Ev();
extern void _ZN7S5399C7D0Ev();
static  VTBL_ENTRY vtc_S5399C7[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5399C7[0]),
  (VTBL_ENTRY)&_ZN7S5399C7D1Ev,
  (VTBL_ENTRY)&_ZN7S5399C7D0Ev,
};
extern VTBL_ENTRY _ZTI7S5399C7[];
extern  VTBL_ENTRY _ZTV7S5399C7[];
Class_Descriptor cd_S5399C7 = {  "S5399C7", // class name
  0,0,//no base classes
  &(vtc_S5399C7[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(56,36), // object size
  NSPAIRA(_ZTI7S5399C7),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S5399C7),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  S5399C1  : S5399C2 {
  ::S5399C7 s5399c1f0;
  ::S21579C7_nt s5399c1f1;
  void *s5399c1f2;
  ::S3625C18_nt s5399c1f3;
  virtual  ~S5399C1(); // _ZN7S5399C1D1Ev
  virtual void  v1(); // _ZN7S5399C12v1Ev
  virtual void  v2(); // _ZN7S5399C12v2Ev
  virtual void  v3(); // _ZN7S5399C12v3Ev
  virtual void  v4(); // _ZN7S5399C12v4Ev
  virtual void  v5(); // _ZN7S5399C12v5Ev
  virtual void  v6(); // _ZN7S5399C12v6Ev
  S5399C1(); // tgen
};
//SIG(1 S5399C1) C1{ BC2{ BC3{ vd v7} vd v8 v9 v10 v11 v12 v13 v14 v15 Fp[4] FC4{ m Fp Fi[2] Fp[2]} Fi[5] Fc[3] FC5{ m Fp Fi FC6{ m}} FC5 FC5 FC5 Fp} vd v1 v2 v3 v4 v5 v6 FC7{ vd m Fp FC5 FC5 Fp} FC8{ m Fp[2]} Fp FC5}


 S5399C1 ::~S5399C1(){ note_dtor("S5399C1", this);}
void  S5399C1 ::v1(){vfunc_called(this, "_ZN7S5399C12v1Ev");}
void  S5399C1 ::v2(){vfunc_called(this, "_ZN7S5399C12v2Ev");}
void  S5399C1 ::v3(){vfunc_called(this, "_ZN7S5399C12v3Ev");}
void  S5399C1 ::v4(){vfunc_called(this, "_ZN7S5399C12v4Ev");}
void  S5399C1 ::v5(){vfunc_called(this, "_ZN7S5399C12v5Ev");}
void  S5399C1 ::v6(){vfunc_called(this, "_ZN7S5399C12v6Ev");}
S5399C1 ::S5399C1(){ note_ctor("S5399C1", this);} // tgen

static void Test_S5399C1()
{
  extern Class_Descriptor cd_S5399C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(34,45)];
    init_test(&cd_S5399C1, buf);
    S5399C1 *dp, &lv = *(dp=new (buf) S5399C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(264,176), "sizeof(S5399C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5399C1)");
    check_base_class_offset(lv, (S5399C3*)(S5399C2*), 0, "S5399C1");
    check_base_class_offset(lv, (S5399C2*), 0, "S5399C1");
    check_field_offset(lv, s5399c1f0, ABISELECT(168,116), "S5399C1.s5399c1f0");
    check_field_offset(lv, s5399c1f1, ABISELECT(224,152), "S5399C1.s5399c1f1");
    check_field_offset(lv, s5399c1f2, ABISELECT(240,160), "S5399C1.s5399c1f2");
    check_field_offset(lv, s5399c1f3, ABISELECT(248,164), "S5399C1.s5399c1f3");
    test_class_info(&lv, &cd_S5399C1);
    dp->~S5399C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5399C1(Test_S5399C1, "S5399C1", ABISELECT(264,176));

#else // __cplusplus

extern void _ZN7S5399C1C1Ev();
extern void _ZN7S5399C1D1Ev();
Name_Map name_map_S5399C1[] = {
  NSPAIR(_ZN7S5399C1C1Ev),
  NSPAIR(_ZN7S5399C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5399C3;
extern VTBL_ENTRY _ZTI7S5399C3[];
extern  VTBL_ENTRY _ZTV7S5399C3[];
extern Class_Descriptor cd_S5399C2;
extern VTBL_ENTRY _ZTI7S5399C2[];
extern  VTBL_ENTRY _ZTV7S5399C2[];
static Base_Class bases_S5399C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5399C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S5399C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S5399C1[];
extern void _ZN7S5399C1D1Ev();
extern void _ZN7S5399C1D0Ev();
extern void _ZN7S5399C32v7Ev();
extern void _ZN7S5399C22v8Ev();
extern void _ZN7S5399C22v9Ev();
extern void _ZN7S5399C23v10Ev();
extern void _ZN7S5399C23v11Ev();
extern void _ZN7S5399C23v12Ev();
extern void _ZN7S5399C23v13Ev();
extern void _ZN7S5399C23v14Ev();
extern void _ZN7S5399C23v15Ev();
extern void _ZN7S5399C12v1Ev();
extern void _ZN7S5399C12v2Ev();
extern void _ZN7S5399C12v3Ev();
extern void _ZN7S5399C12v4Ev();
extern void _ZN7S5399C12v5Ev();
extern void _ZN7S5399C12v6Ev();
static  VTBL_ENTRY vtc_S5399C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5399C1[0]),
  (VTBL_ENTRY)&_ZN7S5399C1D1Ev,
  (VTBL_ENTRY)&_ZN7S5399C1D0Ev,
  (VTBL_ENTRY)&_ZN7S5399C32v7Ev,
  (VTBL_ENTRY)&_ZN7S5399C22v8Ev,
  (VTBL_ENTRY)&_ZN7S5399C22v9Ev,
  (VTBL_ENTRY)&_ZN7S5399C23v10Ev,
  (VTBL_ENTRY)&_ZN7S5399C23v11Ev,
  (VTBL_ENTRY)&_ZN7S5399C23v12Ev,
  (VTBL_ENTRY)&_ZN7S5399C23v13Ev,
  (VTBL_ENTRY)&_ZN7S5399C23v14Ev,
  (VTBL_ENTRY)&_ZN7S5399C23v15Ev,
  (VTBL_ENTRY)&_ZN7S5399C12v1Ev,
  (VTBL_ENTRY)&_ZN7S5399C12v2Ev,
  (VTBL_ENTRY)&_ZN7S5399C12v3Ev,
  (VTBL_ENTRY)&_ZN7S5399C12v4Ev,
  (VTBL_ENTRY)&_ZN7S5399C12v5Ev,
  (VTBL_ENTRY)&_ZN7S5399C12v6Ev,
};
extern VTBL_ENTRY _ZTI7S5399C1[];
extern  VTBL_ENTRY _ZTV7S5399C1[];
Class_Descriptor cd_S5399C1 = {  "S5399C1", // class name
  bases_S5399C1, 2,
  &(vtc_S5399C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(264,176), // object size
  NSPAIRA(_ZTI7S5399C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S5399C1),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  S2319C4  {
  char s2319c4f0;
  int s2319c4f1;
  virtual  ~S2319C4(); // _ZN7S2319C4D1Ev
  virtual void  v5(); // _ZN7S2319C42v5Ev
  S2319C4(); // tgen
};
//SIG(-1 S2319C4) C1{ vd v1 Fc Fi}


 S2319C4 ::~S2319C4(){ note_dtor("S2319C4", this);}
void  S2319C4 ::v5(){vfunc_called(this, "_ZN7S2319C42v5Ev");}
S2319C4 ::S2319C4(){ note_ctor("S2319C4", this);} // tgen

static void Test_S2319C4()
{
  extern Class_Descriptor cd_S2319C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S2319C4, buf);
    S2319C4 *dp, &lv = *(dp=new (buf) S2319C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S2319C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2319C4)");
    check_field_offset(lv, s2319c4f0, ABISELECT(8,4), "S2319C4.s2319c4f0");
    check_field_offset(lv, s2319c4f1, ABISELECT(12,8), "S2319C4.s2319c4f1");
    test_class_info(&lv, &cd_S2319C4);
    dp->~S2319C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2319C4(Test_S2319C4, "S2319C4", ABISELECT(16,12));

#else // __cplusplus

extern void _ZN7S2319C4C1Ev();
extern void _ZN7S2319C4D1Ev();
Name_Map name_map_S2319C4[] = {
  NSPAIR(_ZN7S2319C4C1Ev),
  NSPAIR(_ZN7S2319C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S2319C4[];
extern void _ZN7S2319C4D1Ev();
extern void _ZN7S2319C4D0Ev();
extern void _ZN7S2319C42v5Ev();
static  VTBL_ENTRY vtc_S2319C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2319C4[0]),
  (VTBL_ENTRY)&_ZN7S2319C4D1Ev,
  (VTBL_ENTRY)&_ZN7S2319C4D0Ev,
  (VTBL_ENTRY)&_ZN7S2319C42v5Ev,
};
extern VTBL_ENTRY _ZTI7S2319C4[];
extern  VTBL_ENTRY _ZTV7S2319C4[];
Class_Descriptor cd_S2319C4 = {  "S2319C4", // class name
  0,0,//no base classes
  &(vtc_S2319C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI7S2319C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S2319C4),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  S2319C3  : S2319C4 {
  void *s2319c3f0;
  char s2319c3f1[2];
  virtual  ~S2319C3(); // _ZN7S2319C3D1Ev
  virtual void  v6(); // _ZN7S2319C32v6Ev
  S2319C3(); // tgen
};
//SIG(-1 S2319C3) C1{ BC2{ vd v2 Fc Fi} vd v1 Fp Fc[2]}


 S2319C3 ::~S2319C3(){ note_dtor("S2319C3", this);}
void  S2319C3 ::v6(){vfunc_called(this, "_ZN7S2319C32v6Ev");}
S2319C3 ::S2319C3(){ note_ctor("S2319C3", this);} // tgen

static void Test_S2319C3()
{
  extern Class_Descriptor cd_S2319C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,6)];
    init_test(&cd_S2319C3, buf);
    S2319C3 *dp, &lv = *(dp=new (buf) S2319C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S2319C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2319C3)");
    check_base_class_offset(lv, (S2319C4*), 0, "S2319C3");
    check_field_offset(lv, s2319c3f0, ABISELECT(16,12), "S2319C3.s2319c3f0");
    check_field_offset(lv, s2319c3f1, ABISELECT(24,16), "S2319C3.s2319c3f1");
    test_class_info(&lv, &cd_S2319C3);
    dp->~S2319C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2319C3(Test_S2319C3, "S2319C3", ABISELECT(32,20));

#else // __cplusplus

extern void _ZN7S2319C3C1Ev();
extern void _ZN7S2319C3D1Ev();
Name_Map name_map_S2319C3[] = {
  NSPAIR(_ZN7S2319C3C1Ev),
  NSPAIR(_ZN7S2319C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2319C4;
extern VTBL_ENTRY _ZTI7S2319C4[];
extern  VTBL_ENTRY _ZTV7S2319C4[];
static Base_Class bases_S2319C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2319C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI7S2319C3[];
extern void _ZN7S2319C3D1Ev();
extern void _ZN7S2319C3D0Ev();
extern void _ZN7S2319C42v5Ev();
extern void _ZN7S2319C32v6Ev();
static  VTBL_ENTRY vtc_S2319C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2319C3[0]),
  (VTBL_ENTRY)&_ZN7S2319C3D1Ev,
  (VTBL_ENTRY)&_ZN7S2319C3D0Ev,
  (VTBL_ENTRY)&_ZN7S2319C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2319C32v6Ev,
};
extern VTBL_ENTRY _ZTI7S2319C3[];
extern  VTBL_ENTRY _ZTV7S2319C3[];
Class_Descriptor cd_S2319C3 = {  "S2319C3", // class name
  bases_S2319C3, 1,
  &(vtc_S2319C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,20), // object size
  NSPAIRA(_ZTI7S2319C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2319C3),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  S2319C2  : S2319C3 {
  void *s2319c2f0[2];
  int s2319c2f1[3];
  char s2319c2f2[2];
  void *s2319c2f3;
  virtual  ~S2319C2(); // _ZN7S2319C2D1Ev
  virtual void  v7(); // _ZN7S2319C22v7Ev
  virtual void  v8(); // _ZN7S2319C22v8Ev
  virtual void  v9(); // _ZN7S2319C22v9Ev
  virtual void  v10(); // _ZN7S2319C23v10Ev
  S2319C2(); // tgen
};
//SIG(-1 S2319C2) C1{ BC2{ BC3{ vd v5 Fc Fi} vd v6 Fp Fc[2]} vd v1 v2 v3 v4 Fp[2] Fi[3] Fc[2] Fp}


 S2319C2 ::~S2319C2(){ note_dtor("S2319C2", this);}
void  S2319C2 ::v7(){vfunc_called(this, "_ZN7S2319C22v7Ev");}
void  S2319C2 ::v8(){vfunc_called(this, "_ZN7S2319C22v8Ev");}
void  S2319C2 ::v9(){vfunc_called(this, "_ZN7S2319C22v9Ev");}
void  S2319C2 ::v10(){vfunc_called(this, "_ZN7S2319C23v10Ev");}
S2319C2 ::S2319C2(){ note_ctor("S2319C2", this);} // tgen

static void Test_S2319C2()
{
  extern Class_Descriptor cd_S2319C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,13)];
    init_test(&cd_S2319C2, buf);
    S2319C2 *dp, &lv = *(dp=new (buf) S2319C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,48), "sizeof(S2319C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2319C2)");
    check_base_class_offset(lv, (S2319C4*)(S2319C3*), 0, "S2319C2");
    check_base_class_offset(lv, (S2319C3*), 0, "S2319C2");
    check_field_offset(lv, s2319c2f0, ABISELECT(32,20), "S2319C2.s2319c2f0");
    check_field_offset(lv, s2319c2f1, ABISELECT(48,28), "S2319C2.s2319c2f1");
    check_field_offset(lv, s2319c2f2, ABISELECT(60,40), "S2319C2.s2319c2f2");
    check_field_offset(lv, s2319c2f3, ABISELECT(64,44), "S2319C2.s2319c2f3");
    test_class_info(&lv, &cd_S2319C2);
    dp->~S2319C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2319C2(Test_S2319C2, "S2319C2", ABISELECT(72,48));

#else // __cplusplus

extern void _ZN7S2319C2C1Ev();
extern void _ZN7S2319C2D1Ev();
Name_Map name_map_S2319C2[] = {
  NSPAIR(_ZN7S2319C2C1Ev),
  NSPAIR(_ZN7S2319C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2319C4;
extern VTBL_ENTRY _ZTI7S2319C4[];
extern  VTBL_ENTRY _ZTV7S2319C4[];
extern Class_Descriptor cd_S2319C3;
extern VTBL_ENTRY _ZTI7S2319C3[];
extern  VTBL_ENTRY _ZTV7S2319C3[];
static Base_Class bases_S2319C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2319C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S2319C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S2319C2[];
extern void _ZN7S2319C2D1Ev();
extern void _ZN7S2319C2D0Ev();
extern void _ZN7S2319C42v5Ev();
extern void _ZN7S2319C32v6Ev();
extern void _ZN7S2319C22v7Ev();
extern void _ZN7S2319C22v8Ev();
extern void _ZN7S2319C22v9Ev();
extern void _ZN7S2319C23v10Ev();
static  VTBL_ENTRY vtc_S2319C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2319C2[0]),
  (VTBL_ENTRY)&_ZN7S2319C2D1Ev,
  (VTBL_ENTRY)&_ZN7S2319C2D0Ev,
  (VTBL_ENTRY)&_ZN7S2319C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2319C32v6Ev,
  (VTBL_ENTRY)&_ZN7S2319C22v7Ev,
  (VTBL_ENTRY)&_ZN7S2319C22v8Ev,
  (VTBL_ENTRY)&_ZN7S2319C22v9Ev,
  (VTBL_ENTRY)&_ZN7S2319C23v10Ev,
};
extern VTBL_ENTRY _ZTI7S2319C2[];
extern  VTBL_ENTRY _ZTV7S2319C2[];
Class_Descriptor cd_S2319C2 = {  "S2319C2", // class name
  bases_S2319C2, 2,
  &(vtc_S2319C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,48), // object size
  NSPAIRA(_ZTI7S2319C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2319C2),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  S2319C1  : S2319C2 {
  void *s2319c1f0;
  int s2319c1f1[5];
  void *s2319c1f2[3];
  int s2319c1f3[3];
  void *s2319c1f4[18];
  int s2319c1f5;
  void *s2319c1f6;
  int s2319c1f7[4];
  __tsi64 s2319c1f8;
  int s2319c1f9[2];
  void *s2319c1f10[5];
  int s2319c1f11[5];
  void *s2319c1f12[8];
  int s2319c1f13[2];
  void *s2319c1f14;
  int s2319c1f15[2];
  void *s2319c1f16[16];
  int s2319c1f17;
  virtual  ~S2319C1(); // _ZN7S2319C1D1Ev
  virtual void  v1(); // _ZN7S2319C12v1Ev
  virtual void  v2(); // _ZN7S2319C12v2Ev
  virtual void  v3(); // _ZN7S2319C12v3Ev
  virtual void  v4(); // _ZN7S2319C12v4Ev
  S2319C1(); // tgen
};
//SIG(1 S2319C1) C1{ BC2{ BC3{ BC4{ vd v5 Fc Fi} vd v6 Fp Fc[2]} vd v7 v8 v9 v10 Fp[2] Fi[3] Fc[2] Fp} vd v1 v2 v3 v4 Fp Fi[5] Fp[3] Fi[3] Fp[18] Fi Fp Fi[4] FL Fi[2] Fp[5] Fi[5] Fp[8] Fi[2] Fp Fi[2] Fp[16] Fi}


 S2319C1 ::~S2319C1(){ note_dtor("S2319C1", this);}
void  S2319C1 ::v1(){vfunc_called(this, "_ZN7S2319C12v1Ev");}
void  S2319C1 ::v2(){vfunc_called(this, "_ZN7S2319C12v2Ev");}
void  S2319C1 ::v3(){vfunc_called(this, "_ZN7S2319C12v3Ev");}
void  S2319C1 ::v4(){vfunc_called(this, "_ZN7S2319C12v4Ev");}
S2319C1 ::S2319C1(){ note_ctor("S2319C1", this);} // tgen

static void Test_S2319C1()
{
  extern Class_Descriptor cd_S2319C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(79,93)];
    init_test(&cd_S2319C1, buf);
    S2319C1 *dp, &lv = *(dp=new (buf) S2319C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(624,368), "sizeof(S2319C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2319C1)");
    check_base_class_offset(lv, (S2319C4*)(S2319C3*)(S2319C2*), 0, "S2319C1");
    check_base_class_offset(lv, (S2319C3*)(S2319C2*), 0, "S2319C1");
    check_base_class_offset(lv, (S2319C2*), 0, "S2319C1");
    check_field_offset(lv, s2319c1f0, ABISELECT(72,48), "S2319C1.s2319c1f0");
    check_field_offset(lv, s2319c1f1, ABISELECT(80,52), "S2319C1.s2319c1f1");
    check_field_offset(lv, s2319c1f2, ABISELECT(104,72), "S2319C1.s2319c1f2");
    check_field_offset(lv, s2319c1f3, ABISELECT(128,84), "S2319C1.s2319c1f3");
    check_field_offset(lv, s2319c1f4, ABISELECT(144,96), "S2319C1.s2319c1f4");
    check_field_offset(lv, s2319c1f5, ABISELECT(288,168), "S2319C1.s2319c1f5");
    check_field_offset(lv, s2319c1f6, ABISELECT(296,172), "S2319C1.s2319c1f6");
    check_field_offset(lv, s2319c1f7, ABISELECT(304,176), "S2319C1.s2319c1f7");
    check_field_offset(lv, s2319c1f8, ABISELECT(320,192), "S2319C1.s2319c1f8");
    check_field_offset(lv, s2319c1f9, ABISELECT(328,200), "S2319C1.s2319c1f9");
    check_field_offset(lv, s2319c1f10, ABISELECT(336,208), "S2319C1.s2319c1f10");
    check_field_offset(lv, s2319c1f11, ABISELECT(376,228), "S2319C1.s2319c1f11");
    check_field_offset(lv, s2319c1f12, ABISELECT(400,248), "S2319C1.s2319c1f12");
    check_field_offset(lv, s2319c1f13, ABISELECT(464,280), "S2319C1.s2319c1f13");
    check_field_offset(lv, s2319c1f14, ABISELECT(472,288), "S2319C1.s2319c1f14");
    check_field_offset(lv, s2319c1f15, ABISELECT(480,292), "S2319C1.s2319c1f15");
    check_field_offset(lv, s2319c1f16, ABISELECT(488,300), "S2319C1.s2319c1f16");
    check_field_offset(lv, s2319c1f17, ABISELECT(616,364), "S2319C1.s2319c1f17");
    test_class_info(&lv, &cd_S2319C1);
    dp->~S2319C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2319C1(Test_S2319C1, "S2319C1", ABISELECT(624,368));

#else // __cplusplus

extern void _ZN7S2319C1C1Ev();
extern void _ZN7S2319C1D1Ev();
Name_Map name_map_S2319C1[] = {
  NSPAIR(_ZN7S2319C1C1Ev),
  NSPAIR(_ZN7S2319C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2319C4;
extern VTBL_ENTRY _ZTI7S2319C4[];
extern  VTBL_ENTRY _ZTV7S2319C4[];
extern Class_Descriptor cd_S2319C3;
extern VTBL_ENTRY _ZTI7S2319C3[];
extern  VTBL_ENTRY _ZTV7S2319C3[];
extern Class_Descriptor cd_S2319C2;
extern VTBL_ENTRY _ZTI7S2319C2[];
extern  VTBL_ENTRY _ZTV7S2319C2[];
static Base_Class bases_S2319C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2319C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S2319C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S2319C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S2319C1[];
extern void _ZN7S2319C1D1Ev();
extern void _ZN7S2319C1D0Ev();
extern void _ZN7S2319C42v5Ev();
extern void _ZN7S2319C32v6Ev();
extern void _ZN7S2319C22v7Ev();
extern void _ZN7S2319C22v8Ev();
extern void _ZN7S2319C22v9Ev();
extern void _ZN7S2319C23v10Ev();
extern void _ZN7S2319C12v1Ev();
extern void _ZN7S2319C12v2Ev();
extern void _ZN7S2319C12v3Ev();
extern void _ZN7S2319C12v4Ev();
static  VTBL_ENTRY vtc_S2319C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2319C1[0]),
  (VTBL_ENTRY)&_ZN7S2319C1D1Ev,
  (VTBL_ENTRY)&_ZN7S2319C1D0Ev,
  (VTBL_ENTRY)&_ZN7S2319C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2319C32v6Ev,
  (VTBL_ENTRY)&_ZN7S2319C22v7Ev,
  (VTBL_ENTRY)&_ZN7S2319C22v8Ev,
  (VTBL_ENTRY)&_ZN7S2319C22v9Ev,
  (VTBL_ENTRY)&_ZN7S2319C23v10Ev,
  (VTBL_ENTRY)&_ZN7S2319C12v1Ev,
  (VTBL_ENTRY)&_ZN7S2319C12v2Ev,
  (VTBL_ENTRY)&_ZN7S2319C12v3Ev,
  (VTBL_ENTRY)&_ZN7S2319C12v4Ev,
};
extern VTBL_ENTRY _ZTI7S2319C1[];
extern  VTBL_ENTRY _ZTV7S2319C1[];
Class_Descriptor cd_S2319C1 = {  "S2319C1", // class name
  bases_S2319C1, 3,
  &(vtc_S2319C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(624,368), // object size
  NSPAIRA(_ZTI7S2319C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2319C1),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  S5394C3  {
  virtual  ~S5394C3(); // _ZN7S5394C3D1Ev
  virtual void  v7(); // _ZN7S5394C32v7Ev
  S5394C3(); // tgen
};
//SIG(-1 S5394C3) C1{ vd v1}


 S5394C3 ::~S5394C3(){ note_dtor("S5394C3", this);}
void  S5394C3 ::v7(){vfunc_called(this, "_ZN7S5394C32v7Ev");}
S5394C3 ::S5394C3(){ note_ctor("S5394C3", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S5394C3C1Ev();
extern void _ZN7S5394C3D1Ev();
Name_Map name_map_S5394C3[] = {
  NSPAIR(_ZN7S5394C3C1Ev),
  NSPAIR(_ZN7S5394C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S5394C3[];
extern void _ZN7S5394C3D1Ev();
extern void _ZN7S5394C3D0Ev();
extern void _ZN7S5394C32v7Ev();
static  VTBL_ENTRY vtc_S5394C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5394C3[0]),
  (VTBL_ENTRY)&_ZN7S5394C3D1Ev,
  (VTBL_ENTRY)&_ZN7S5394C3D0Ev,
  (VTBL_ENTRY)&_ZN7S5394C32v7Ev,
};
extern VTBL_ENTRY _ZTI7S5394C3[];
extern  VTBL_ENTRY _ZTV7S5394C3[];
Class_Descriptor cd_S5394C3 = {  "S5394C3", // class name
  0,0,//no base classes
  &(vtc_S5394C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S5394C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S5394C3),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  S5394C2  : S5394C3 {
  void *s5394c2f0;
  ::S21579C7_nt s5394c2f1;
  void *s5394c2f2[2];
  ::S21579C10 s5394c2f3;
  int s5394c2f4[5];
  char s5394c2f5[3];
  ::S3625C18_nt s5394c2f6;
  ::S3625C18_nt s5394c2f7;
  ::S3625C18_nt s5394c2f8;
  ::S3625C18_nt s5394c2f9;
  void *s5394c2f10;
  virtual  ~S5394C2(); // _ZN7S5394C2D1Ev
  virtual void  v8(); // _ZN7S5394C22v8Ev
  virtual void  v9(); // _ZN7S5394C22v9Ev
  virtual void  v10(); // _ZN7S5394C23v10Ev
  virtual void  v11(); // _ZN7S5394C23v11Ev
  virtual void  v12(); // _ZN7S5394C23v12Ev
  virtual void  v13(); // _ZN7S5394C23v13Ev
  virtual void  v14(); // _ZN7S5394C23v14Ev
  S5394C2(); // tgen
};
//SIG(-1 S5394C2) C1{ BC2{ vd v8} vd v1 v2 v3 v4 v5 v6 v7 Fp FC3{ m Fp[2]} Fp[2] FC4{ m Fp Fi[2] Fp[2]} Fi[5] Fc[3] FC5{ m Fp Fi FC6{ m}} FC5 FC5 FC5 Fp}


 S5394C2 ::~S5394C2(){ note_dtor("S5394C2", this);}
void  S5394C2 ::v8(){vfunc_called(this, "_ZN7S5394C22v8Ev");}
void  S5394C2 ::v9(){vfunc_called(this, "_ZN7S5394C22v9Ev");}
void  S5394C2 ::v10(){vfunc_called(this, "_ZN7S5394C23v10Ev");}
void  S5394C2 ::v11(){vfunc_called(this, "_ZN7S5394C23v11Ev");}
void  S5394C2 ::v12(){vfunc_called(this, "_ZN7S5394C23v12Ev");}
void  S5394C2 ::v13(){vfunc_called(this, "_ZN7S5394C23v13Ev");}
void  S5394C2 ::v14(){vfunc_called(this, "_ZN7S5394C23v14Ev");}
S5394C2 ::S5394C2(){ note_ctor("S5394C2", this);} // tgen

static void Test_S5394C2()
{
  extern Class_Descriptor cd_S5394C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(23,31)];
    init_test(&cd_S5394C2, buf);
    S5394C2 *dp, &lv = *(dp=new (buf) S5394C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(176,120), "sizeof(S5394C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5394C2)");
    check_base_class_offset(lv, (S5394C3*), 0, "S5394C2");
    check_field_offset(lv, s5394c2f0, ABISELECT(8,4), "S5394C2.s5394c2f0");
    check_field_offset(lv, s5394c2f1, ABISELECT(16,8), "S5394C2.s5394c2f1");
    check_field_offset(lv, s5394c2f2, ABISELECT(32,16), "S5394C2.s5394c2f2");
    check_field_offset(lv, s5394c2f3, ABISELECT(48,24), "S5394C2.s5394c2f3");
    check_field_offset(lv, s5394c2f4, ABISELECT(80,44), "S5394C2.s5394c2f4");
    check_field_offset(lv, s5394c2f5, ABISELECT(100,64), "S5394C2.s5394c2f5");
    check_field_offset(lv, s5394c2f6, ABISELECT(104,68), "S5394C2.s5394c2f6");
    check_field_offset(lv, s5394c2f7, ABISELECT(120,80), "S5394C2.s5394c2f7");
    check_field_offset(lv, s5394c2f8, ABISELECT(136,92), "S5394C2.s5394c2f8");
    check_field_offset(lv, s5394c2f9, ABISELECT(152,104), "S5394C2.s5394c2f9");
    check_field_offset(lv, s5394c2f10, ABISELECT(168,116), "S5394C2.s5394c2f10");
    test_class_info(&lv, &cd_S5394C2);
    dp->~S5394C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5394C2(Test_S5394C2, "S5394C2", ABISELECT(176,120));

#else // __cplusplus

extern void _ZN7S5394C2C1Ev();
extern void _ZN7S5394C2D1Ev();
Name_Map name_map_S5394C2[] = {
  NSPAIR(_ZN7S5394C2C1Ev),
  NSPAIR(_ZN7S5394C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5394C3;
extern VTBL_ENTRY _ZTI7S5394C3[];
extern  VTBL_ENTRY _ZTV7S5394C3[];
static Base_Class bases_S5394C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5394C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI7S5394C2[];
extern void _ZN7S5394C2D1Ev();
extern void _ZN7S5394C2D0Ev();
extern void _ZN7S5394C32v7Ev();
extern void _ZN7S5394C22v8Ev();
extern void _ZN7S5394C22v9Ev();
extern void _ZN7S5394C23v10Ev();
extern void _ZN7S5394C23v11Ev();
extern void _ZN7S5394C23v12Ev();
extern void _ZN7S5394C23v13Ev();
extern void _ZN7S5394C23v14Ev();
static  VTBL_ENTRY vtc_S5394C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5394C2[0]),
  (VTBL_ENTRY)&_ZN7S5394C2D1Ev,
  (VTBL_ENTRY)&_ZN7S5394C2D0Ev,
  (VTBL_ENTRY)&_ZN7S5394C32v7Ev,
  (VTBL_ENTRY)&_ZN7S5394C22v8Ev,
  (VTBL_ENTRY)&_ZN7S5394C22v9Ev,
  (VTBL_ENTRY)&_ZN7S5394C23v10Ev,
  (VTBL_ENTRY)&_ZN7S5394C23v11Ev,
  (VTBL_ENTRY)&_ZN7S5394C23v12Ev,
  (VTBL_ENTRY)&_ZN7S5394C23v13Ev,
  (VTBL_ENTRY)&_ZN7S5394C23v14Ev,
};
extern VTBL_ENTRY _ZTI7S5394C2[];
extern  VTBL_ENTRY _ZTV7S5394C2[];
Class_Descriptor cd_S5394C2 = {  "S5394C2", // class name
  bases_S5394C2, 1,
  &(vtc_S5394C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(176,120), // object size
  NSPAIRA(_ZTI7S5394C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S5394C2),12, //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  S5394C1  : S5394C2 {
  ::S5399C7 s5394c1f0;
  ::S21579C7_nt s5394c1f1;
  virtual  ~S5394C1(); // _ZN7S5394C1D1Ev
  virtual void  v1(); // _ZN7S5394C12v1Ev
  virtual void  v2(); // _ZN7S5394C12v2Ev
  virtual void  v3(); // _ZN7S5394C12v3Ev
  virtual void  v4(); // _ZN7S5394C12v4Ev
  virtual void  v5(); // _ZN7S5394C12v5Ev
  virtual void  v6(); // _ZN7S5394C12v6Ev
  S5394C1(); // tgen
};
//SIG(1 S5394C1) C1{ BC2{ BC3{ vd v7} vd v8 v9 v10 v11 v12 v13 v14 Fp FC4{ m Fp[2]} Fp[2] FC5{ m Fp Fi[2] Fp[2]} Fi[5] Fc[3] FC6{ m Fp Fi FC7{ m}} FC6 FC6 FC6 Fp} vd v1 v2 v3 v4 v5 v6 FC8{ vd m Fp FC6 FC6 Fp} FC4}


 S5394C1 ::~S5394C1(){ note_dtor("S5394C1", this);}
void  S5394C1 ::v1(){vfunc_called(this, "_ZN7S5394C12v1Ev");}
void  S5394C1 ::v2(){vfunc_called(this, "_ZN7S5394C12v2Ev");}
void  S5394C1 ::v3(){vfunc_called(this, "_ZN7S5394C12v3Ev");}
void  S5394C1 ::v4(){vfunc_called(this, "_ZN7S5394C12v4Ev");}
void  S5394C1 ::v5(){vfunc_called(this, "_ZN7S5394C12v5Ev");}
void  S5394C1 ::v6(){vfunc_called(this, "_ZN7S5394C12v6Ev");}
S5394C1 ::S5394C1(){ note_ctor("S5394C1", this);} // tgen

static void Test_S5394C1()
{
  extern Class_Descriptor cd_S5394C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(32,42)];
    init_test(&cd_S5394C1, buf);
    S5394C1 *dp, &lv = *(dp=new (buf) S5394C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(248,164), "sizeof(S5394C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5394C1)");
    check_base_class_offset(lv, (S5394C3*)(S5394C2*), 0, "S5394C1");
    check_base_class_offset(lv, (S5394C2*), 0, "S5394C1");
    check_field_offset(lv, s5394c1f0, ABISELECT(176,120), "S5394C1.s5394c1f0");
    check_field_offset(lv, s5394c1f1, ABISELECT(232,156), "S5394C1.s5394c1f1");
    test_class_info(&lv, &cd_S5394C1);
    dp->~S5394C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5394C1(Test_S5394C1, "S5394C1", ABISELECT(248,164));

#else // __cplusplus

extern void _ZN7S5394C1C1Ev();
extern void _ZN7S5394C1D1Ev();
Name_Map name_map_S5394C1[] = {
  NSPAIR(_ZN7S5394C1C1Ev),
  NSPAIR(_ZN7S5394C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5394C3;
extern VTBL_ENTRY _ZTI7S5394C3[];
extern  VTBL_ENTRY _ZTV7S5394C3[];
extern Class_Descriptor cd_S5394C2;
extern VTBL_ENTRY _ZTI7S5394C2[];
extern  VTBL_ENTRY _ZTV7S5394C2[];
static Base_Class bases_S5394C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5394C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S5394C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S5394C1[];
extern void _ZN7S5394C1D1Ev();
extern void _ZN7S5394C1D0Ev();
extern void _ZN7S5394C32v7Ev();
extern void _ZN7S5394C22v8Ev();
extern void _ZN7S5394C22v9Ev();
extern void _ZN7S5394C23v10Ev();
extern void _ZN7S5394C23v11Ev();
extern void _ZN7S5394C23v12Ev();
extern void _ZN7S5394C23v13Ev();
extern void _ZN7S5394C23v14Ev();
extern void _ZN7S5394C12v1Ev();
extern void _ZN7S5394C12v2Ev();
extern void _ZN7S5394C12v3Ev();
extern void _ZN7S5394C12v4Ev();
extern void _ZN7S5394C12v5Ev();
extern void _ZN7S5394C12v6Ev();
static  VTBL_ENTRY vtc_S5394C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5394C1[0]),
  (VTBL_ENTRY)&_ZN7S5394C1D1Ev,
  (VTBL_ENTRY)&_ZN7S5394C1D0Ev,
  (VTBL_ENTRY)&_ZN7S5394C32v7Ev,
  (VTBL_ENTRY)&_ZN7S5394C22v8Ev,
  (VTBL_ENTRY)&_ZN7S5394C22v9Ev,
  (VTBL_ENTRY)&_ZN7S5394C23v10Ev,
  (VTBL_ENTRY)&_ZN7S5394C23v11Ev,
  (VTBL_ENTRY)&_ZN7S5394C23v12Ev,
  (VTBL_ENTRY)&_ZN7S5394C23v13Ev,
  (VTBL_ENTRY)&_ZN7S5394C23v14Ev,
  (VTBL_ENTRY)&_ZN7S5394C12v1Ev,
  (VTBL_ENTRY)&_ZN7S5394C12v2Ev,
  (VTBL_ENTRY)&_ZN7S5394C12v3Ev,
  (VTBL_ENTRY)&_ZN7S5394C12v4Ev,
  (VTBL_ENTRY)&_ZN7S5394C12v5Ev,
  (VTBL_ENTRY)&_ZN7S5394C12v6Ev,
};
extern VTBL_ENTRY _ZTI7S5394C1[];
extern  VTBL_ENTRY _ZTV7S5394C1[];
Class_Descriptor cd_S5394C1 = {  "S5394C1", // class name
  bases_S5394C1, 2,
  &(vtc_S5394C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(248,164), // object size
  NSPAIRA(_ZTI7S5394C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S5394C1),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  S16147C9_nt  : S674C6_nt {
};
//SIG(-1 S16147C9_nt) C1{ BC2{ m Fi[2]}}



//skip512 S16147C9_nt

#else // __cplusplus

extern Class_Descriptor cd_S674C6_nt;
static Base_Class bases_S16147C9_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S674C6_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  S16147C11_nt  {
  ::S3625C31 s16147c11f0;
  void *s16147c11f1[2];
  void  mf16147c11(); // _ZN12S16147C11_nt10mf16147c11Ev
};
//SIG(-1 S16147C11_nt) C1{ m FC2{ m Fp Fi[2] FC3{ m}} Fp[2]}


void  S16147C11_nt ::mf16147c11(){}

//skip512 S16147C11_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S16147C15_nt  {
  void *s16147c15f0;
  int s16147c15f1;
  ::S3625C32 s16147c15f2;
  ::S3625C19 s16147c15f3;
  void  mf16147c15(); // _ZN12S16147C15_nt10mf16147c15Ev
};
//SIG(-1 S16147C15_nt) C1{ m Fp Fi FC2{ m} FC3{ m}}


void  S16147C15_nt ::mf16147c15(){}

//skip512 S16147C15_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S16147C14  {
  __tsi64 s16147c14f0;
  ::S16147C15_nt s16147c14f1;
  ::S3783C19_nt s16147c14f2;
  void  mf16147c14(); // _ZN9S16147C1410mf16147c14Ev
};
//SIG(-1 S16147C14) C1{ m FL FC2{ m Fp Fi FC3{ m} FC4{ m}} FC5{ m FL[4]}}


void  S16147C14 ::mf16147c14(){}

static void Test_S16147C14()
{
  {
    init_simple_test("S16147C14");
    S16147C14 lv;
    check2(sizeof(lv), ABISELECT(56,52), "sizeof(S16147C14)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S16147C14)");
    check_field_offset(lv, s16147c14f0, 0, "S16147C14.s16147c14f0");
    check_field_offset(lv, s16147c14f1, 8, "S16147C14.s16147c14f1");
    check_field_offset(lv, s16147c14f2, ABISELECT(24,20), "S16147C14.s16147c14f2");
  }
}
static Arrange_To_Call_Me vS16147C14(Test_S16147C14, "S16147C14", ABISELECT(56,52));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S16147C1  {
  ::S3783C19_nt s16147c1f0;
  int s16147c1f1[3];
  __tsi64 s16147c1f2;
  ::S3783C14_nt s16147c1f3;
  ::S3625C4_nt s16147c1f4;
  ::S16147C9_nt s16147c1f5;
  ::S16147C11_nt s16147c1f6;
  ::S16147C14 s16147c1f7;
  void  mf16147c1(); // _ZN8S16147C19mf16147c1Ev
};
//SIG(1 S16147C1) C1{ m FC2{ m FL[4]} Fi[3] FL FC3{ m Fp Fi FC4{ m} FC5{ m}} FC6{ m Fp Fi FC7{ m} FC8{ m}} FC9{ BC10{ m Fi[2]}} FC11{ m FC12{ m Fp Fi[2] FC4} Fp[2]} FC13{ m FL FC14{ m Fp Fi FC4 FC5} FC2}}


void  S16147C1 ::mf16147c1(){}

static void Test_S16147C1()
{
  {
    init_simple_test("S16147C1");
    S16147C1 lv;
    check2(sizeof(lv), ABISELECT(192,160), "sizeof(S16147C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S16147C1)");
    check_field_offset(lv, s16147c1f0, 0, "S16147C1.s16147c1f0");
    check_field_offset(lv, s16147c1f1, 32, "S16147C1.s16147c1f1");
    check_field_offset(lv, s16147c1f2, ABISELECT(48,44), "S16147C1.s16147c1f2");
    check_field_offset(lv, s16147c1f3, ABISELECT(56,52), "S16147C1.s16147c1f3");
    check_field_offset(lv, s16147c1f4, ABISELECT(72,64), "S16147C1.s16147c1f4");
    check_field_offset(lv, s16147c1f5, ABISELECT(88,76), "S16147C1.s16147c1f5");
    check_field_offset(lv, s16147c1f6, ABISELECT(96,84), "S16147C1.s16147c1f6");
    check_field_offset(lv, s16147c1f7, ABISELECT(136,108), "S16147C1.s16147c1f7");
  }
}
static Arrange_To_Call_Me vS16147C1(Test_S16147C1, "S16147C1", ABISELECT(192,160));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S5429C3  {
  virtual  ~S5429C3(); // _ZN7S5429C3D1Ev
  virtual void  v8(); // _ZN7S5429C32v8Ev
  S5429C3(); // tgen
};
//SIG(-1 S5429C3) C1{ vd v1}


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

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

#else // __cplusplus

extern void _ZN7S5429C3C1Ev();
extern void _ZN7S5429C3D1Ev();
Name_Map name_map_S5429C3[] = {
  NSPAIR(_ZN7S5429C3C1Ev),
  NSPAIR(_ZN7S5429C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S5429C3[];
extern void _ZN7S5429C3D1Ev();
extern void _ZN7S5429C3D0Ev();
extern void _ZN7S5429C32v8Ev();
static  VTBL_ENTRY vtc_S5429C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5429C3[0]),
  (VTBL_ENTRY)&_ZN7S5429C3D1Ev,
  (VTBL_ENTRY)&_ZN7S5429C3D0Ev,
  (VTBL_ENTRY)&_ZN7S5429C32v8Ev,
};
extern VTBL_ENTRY _ZTI7S5429C3[];
extern  VTBL_ENTRY _ZTV7S5429C3[];
Class_Descriptor cd_S5429C3 = {  "S5429C3", // class name
  0,0,//no base classes
  &(vtc_S5429C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S5429C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S5429C3),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  S5429C2  : S5429C3 {
  void *s5429c2f0[4];
  ::S21579C10 s5429c2f1;
  int s5429c2f2[5];
  char s5429c2f3[3];
  ::S3625C18_nt s5429c2f4;
  ::S3625C18_nt s5429c2f5;
  ::S3625C18_nt s5429c2f6;
  ::S3625C18_nt s5429c2f7;
  void *s5429c2f8;
  virtual  ~S5429C2(); // _ZN7S5429C2D1Ev
  virtual void  v9(); // _ZN7S5429C22v9Ev
  virtual void  v10(); // _ZN7S5429C23v10Ev
  virtual void  v11(); // _ZN7S5429C23v11Ev
  virtual void  v12(); // _ZN7S5429C23v12Ev
  virtual void  v13(); // _ZN7S5429C23v13Ev
  virtual void  v14(); // _ZN7S5429C23v14Ev
  virtual void  v15(); // _ZN7S5429C23v15Ev
  virtual void  v16(); // _ZN7S5429C23v16Ev
  S5429C2(); // tgen
};
//SIG(-1 S5429C2) C1{ BC2{ vd v9} vd v1 v2 v3 v4 v5 v6 v7 v8 Fp[4] FC3{ m Fp Fi[2] Fp[2]} Fi[5] Fc[3] FC4{ m Fp Fi FC5{ m}} FC4 FC4 FC4 Fp}


 S5429C2 ::~S5429C2(){ note_dtor("S5429C2", this);}
void  S5429C2 ::v9(){vfunc_called(this, "_ZN7S5429C22v9Ev");}
void  S5429C2 ::v10(){vfunc_called(this, "_ZN7S5429C23v10Ev");}
void  S5429C2 ::v11(){vfunc_called(this, "_ZN7S5429C23v11Ev");}
void  S5429C2 ::v12(){vfunc_called(this, "_ZN7S5429C23v12Ev");}
void  S5429C2 ::v13(){vfunc_called(this, "_ZN7S5429C23v13Ev");}
void  S5429C2 ::v14(){vfunc_called(this, "_ZN7S5429C23v14Ev");}
void  S5429C2 ::v15(){vfunc_called(this, "_ZN7S5429C23v15Ev");}
void  S5429C2 ::v16(){vfunc_called(this, "_ZN7S5429C23v16Ev");}
S5429C2 ::S5429C2(){ note_ctor("S5429C2", this);} // tgen

static void Test_S5429C2()
{
  extern Class_Descriptor cd_S5429C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(22,30)];
    init_test(&cd_S5429C2, buf);
    S5429C2 *dp, &lv = *(dp=new (buf) S5429C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(168,116), "sizeof(S5429C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5429C2)");
    check_base_class_offset(lv, (S5429C3*), 0, "S5429C2");
    check_field_offset(lv, s5429c2f0, ABISELECT(8,4), "S5429C2.s5429c2f0");
    check_field_offset(lv, s5429c2f1, ABISELECT(40,20), "S5429C2.s5429c2f1");
    check_field_offset(lv, s5429c2f2, ABISELECT(72,40), "S5429C2.s5429c2f2");
    check_field_offset(lv, s5429c2f3, ABISELECT(92,60), "S5429C2.s5429c2f3");
    check_field_offset(lv, s5429c2f4, ABISELECT(96,64), "S5429C2.s5429c2f4");
    check_field_offset(lv, s5429c2f5, ABISELECT(112,76), "S5429C2.s5429c2f5");
    check_field_offset(lv, s5429c2f6, ABISELECT(128,88), "S5429C2.s5429c2f6");
    check_field_offset(lv, s5429c2f7, ABISELECT(144,100), "S5429C2.s5429c2f7");
    check_field_offset(lv, s5429c2f8, ABISELECT(160,112), "S5429C2.s5429c2f8");
    test_class_info(&lv, &cd_S5429C2);
    dp->~S5429C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5429C2(Test_S5429C2, "S5429C2", ABISELECT(168,116));

#else // __cplusplus

extern void _ZN7S5429C2C1Ev();
extern void _ZN7S5429C2D1Ev();
Name_Map name_map_S5429C2[] = {
  NSPAIR(_ZN7S5429C2C1Ev),
  NSPAIR(_ZN7S5429C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5429C3;
extern VTBL_ENTRY _ZTI7S5429C3[];
extern  VTBL_ENTRY _ZTV7S5429C3[];
static Base_Class bases_S5429C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5429C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI7S5429C2[];
extern void _ZN7S5429C2D1Ev();
extern void _ZN7S5429C2D0Ev();
extern void _ZN7S5429C32v8Ev();
extern void _ZN7S5429C22v9Ev();
extern void _ZN7S5429C23v10Ev();
extern void _ZN7S5429C23v11Ev();
extern void _ZN7S5429C23v12Ev();
extern void _ZN7S5429C23v13Ev();
extern void _ZN7S5429C23v14Ev();
extern void _ZN7S5429C23v15Ev();
extern void _ZN7S5429C23v16Ev();
static  VTBL_ENTRY vtc_S5429C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5429C2[0]),
  (VTBL_ENTRY)&_ZN7S5429C2D1Ev,
  (VTBL_ENTRY)&_ZN7S5429C2D0Ev,
  (VTBL_ENTRY)&_ZN7S5429C32v8Ev,
  (VTBL_ENTRY)&_ZN7S5429C22v9Ev,
  (VTBL_ENTRY)&_ZN7S5429C23v10Ev,
  (VTBL_ENTRY)&_ZN7S5429C23v11Ev,
  (VTBL_ENTRY)&_ZN7S5429C23v12Ev,
  (VTBL_ENTRY)&_ZN7S5429C23v13Ev,
  (VTBL_ENTRY)&_ZN7S5429C23v14Ev,
  (VTBL_ENTRY)&_ZN7S5429C23v15Ev,
  (VTBL_ENTRY)&_ZN7S5429C23v16Ev,
};
extern VTBL_ENTRY _ZTI7S5429C2[];
extern  VTBL_ENTRY _ZTV7S5429C2[];
Class_Descriptor cd_S5429C2 = {  "S5429C2", // class name
  bases_S5429C2, 1,
  &(vtc_S5429C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(168,116), // object size
  NSPAIRA(_ZTI7S5429C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S5429C2),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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S5429C1  : S5429C2 {
  ::S21579C7_nt s5429c1f0;
  ::S3625C18_nt s5429c1f1;
  int s5429c1f2;
  char s5429c1f3;
  int s5429c1f4;
  virtual  ~S5429C1(); // _ZN7S5429C1D1Ev
  virtual void  v1(); // _ZN7S5429C12v1Ev
  virtual void  v2(); // _ZN7S5429C12v2Ev
  virtual void  v3(); // _ZN7S5429C12v3Ev
  virtual void  v4(); // _ZN7S5429C12v4Ev
  virtual void  v5(); // _ZN7S5429C12v5Ev
  virtual void  v6(); // _ZN7S5429C12v6Ev
  virtual void  v7(); // _ZN7S5429C12v7Ev
  S5429C1(); // tgen
};
//SIG(1 S5429C1) C1{ BC2{ BC3{ vd v8} vd v9 v10 v11 v12 v13 v14 v15 v16 Fp[4] FC4{ m Fp Fi[2] Fp[2]} Fi[5] Fc[3] FC5{ m Fp Fi FC6{ m}} FC5 FC5 FC5 Fp} vd v1 v2 v3 v4 v5 v6 v7 FC7{ m Fp[2]} FC5 Fi Fc Fi}


 S5429C1 ::~S5429C1(){ note_dtor("S5429C1", this);}
void  S5429C1 ::v1(){vfunc_called(this, "_ZN7S5429C12v1Ev");}
void  S5429C1 ::v2(){vfunc_called(this, "_ZN7S5429C12v2Ev");}
void  S5429C1 ::v3(){vfunc_called(this, "_ZN7S5429C12v3Ev");}
void  S5429C1 ::v4(){vfunc_called(this, "_ZN7S5429C12v4Ev");}
void  S5429C1 ::v5(){vfunc_called(this, "_ZN7S5429C12v5Ev");}
void  S5429C1 ::v6(){vfunc_called(this, "_ZN7S5429C12v6Ev");}
void  S5429C1 ::v7(){vfunc_called(this, "_ZN7S5429C12v7Ev");}
S5429C1 ::S5429C1(){ note_ctor("S5429C1", this);} // tgen

static void Test_S5429C1()
{
  extern Class_Descriptor cd_S5429C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(28,38)];
    init_test(&cd_S5429C1, buf);
    S5429C1 *dp, &lv = *(dp=new (buf) S5429C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(216,148), "sizeof(S5429C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5429C1)");
    check_base_class_offset(lv, (S5429C3*)(S5429C2*), 0, "S5429C1");
    check_base_class_offset(lv, (S5429C2*), 0, "S5429C1");
    check_field_offset(lv, s5429c1f0, ABISELECT(168,116), "S5429C1.s5429c1f0");
    check_field_offset(lv, s5429c1f1, ABISELECT(184,124), "S5429C1.s5429c1f1");
    check_field_offset(lv, s5429c1f2, ABISELECT(200,136), "S5429C1.s5429c1f2");
    check_field_offset(lv, s5429c1f3, ABISELECT(204,140), "S5429C1.s5429c1f3");
    check_field_offset(lv, s5429c1f4, ABISELECT(208,144), "S5429C1.s5429c1f4");
    test_class_info(&lv, &cd_S5429C1);
    dp->~S5429C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5429C1(Test_S5429C1, "S5429C1", ABISELECT(216,148));

#else // __cplusplus

extern void _ZN7S5429C1C1Ev();
extern void _ZN7S5429C1D1Ev();
Name_Map name_map_S5429C1[] = {
  NSPAIR(_ZN7S5429C1C1Ev),
  NSPAIR(_ZN7S5429C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5429C3;
extern VTBL_ENTRY _ZTI7S5429C3[];
extern  VTBL_ENTRY _ZTV7S5429C3[];
extern Class_Descriptor cd_S5429C2;
extern VTBL_ENTRY _ZTI7S5429C2[];
extern  VTBL_ENTRY _ZTV7S5429C2[];
static Base_Class bases_S5429C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5429C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S5429C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S5429C1[];
extern void _ZN7S5429C1D1Ev();
extern void _ZN7S5429C1D0Ev();
extern void _ZN7S5429C32v8Ev();
extern void _ZN7S5429C22v9Ev();
extern void _ZN7S5429C23v10Ev();
extern void _ZN7S5429C23v11Ev();
extern void _ZN7S5429C23v12Ev();
extern void _ZN7S5429C23v13Ev();
extern void _ZN7S5429C23v14Ev();
extern void _ZN7S5429C23v15Ev();
extern void _ZN7S5429C23v16Ev();
extern void _ZN7S5429C12v1Ev();
extern void _ZN7S5429C12v2Ev();
extern void _ZN7S5429C12v3Ev();
extern void _ZN7S5429C12v4Ev();
extern void _ZN7S5429C12v5Ev();
extern void _ZN7S5429C12v6Ev();
extern void _ZN7S5429C12v7Ev();
static  VTBL_ENTRY vtc_S5429C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5429C1[0]),
  (VTBL_ENTRY)&_ZN7S5429C1D1Ev,
  (VTBL_ENTRY)&_ZN7S5429C1D0Ev,
  (VTBL_ENTRY)&_ZN7S5429C32v8Ev,
  (VTBL_ENTRY)&_ZN7S5429C22v9Ev,
  (VTBL_ENTRY)&_ZN7S5429C23v10Ev,
  (VTBL_ENTRY)&_ZN7S5429C23v11Ev,
  (VTBL_ENTRY)&_ZN7S5429C23v12Ev,
  (VTBL_ENTRY)&_ZN7S5429C23v13Ev,
  (VTBL_ENTRY)&_ZN7S5429C23v14Ev,
  (VTBL_ENTRY)&_ZN7S5429C23v15Ev,
  (VTBL_ENTRY)&_ZN7S5429C23v16Ev,
  (VTBL_ENTRY)&_ZN7S5429C12v1Ev,
  (VTBL_ENTRY)&_ZN7S5429C12v2Ev,
  (VTBL_ENTRY)&_ZN7S5429C12v3Ev,
  (VTBL_ENTRY)&_ZN7S5429C12v4Ev,
  (VTBL_ENTRY)&_ZN7S5429C12v5Ev,
  (VTBL_ENTRY)&_ZN7S5429C12v6Ev,
  (VTBL_ENTRY)&_ZN7S5429C12v7Ev,
};
extern VTBL_ENTRY _ZTI7S5429C1[];
extern  VTBL_ENTRY _ZTV7S5429C1[];
Class_Descriptor cd_S5429C1 = {  "S5429C1", // class name
  bases_S5429C1, 2,
  &(vtc_S5429C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(216,148), // object size
  NSPAIRA(_ZTI7S5429C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S5429C1),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  S2320C4  {
  char s2320c4f0;
  int s2320c4f1;
  virtual  ~S2320C4(); // _ZN7S2320C4D1Ev
  virtual void  v5(); // _ZN7S2320C42v5Ev
  S2320C4(); // tgen
};
//SIG(-1 S2320C4) C1{ vd v1 Fc Fi}


 S2320C4 ::~S2320C4(){ note_dtor("S2320C4", this);}
void  S2320C4 ::v5(){vfunc_called(this, "_ZN7S2320C42v5Ev");}
S2320C4 ::S2320C4(){ note_ctor("S2320C4", this);} // tgen

static void Test_S2320C4()
{
  extern Class_Descriptor cd_S2320C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S2320C4, buf);
    S2320C4 *dp, &lv = *(dp=new (buf) S2320C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S2320C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2320C4)");
    check_field_offset(lv, s2320c4f0, ABISELECT(8,4), "S2320C4.s2320c4f0");
    check_field_offset(lv, s2320c4f1, ABISELECT(12,8), "S2320C4.s2320c4f1");
    test_class_info(&lv, &cd_S2320C4);
    dp->~S2320C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2320C4(Test_S2320C4, "S2320C4", ABISELECT(16,12));

#else // __cplusplus

extern void _ZN7S2320C4C1Ev();
extern void _ZN7S2320C4D1Ev();
Name_Map name_map_S2320C4[] = {
  NSPAIR(_ZN7S2320C4C1Ev),
  NSPAIR(_ZN7S2320C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S2320C4[];
extern void _ZN7S2320C4D1Ev();
extern void _ZN7S2320C4D0Ev();
extern void _ZN7S2320C42v5Ev();
static  VTBL_ENTRY vtc_S2320C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2320C4[0]),
  (VTBL_ENTRY)&_ZN7S2320C4D1Ev,
  (VTBL_ENTRY)&_ZN7S2320C4D0Ev,
  (VTBL_ENTRY)&_ZN7S2320C42v5Ev,
};
extern VTBL_ENTRY _ZTI7S2320C4[];
extern  VTBL_ENTRY _ZTV7S2320C4[];
Class_Descriptor cd_S2320C4 = {  "S2320C4", // class name
  0,0,//no base classes
  &(vtc_S2320C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI7S2320C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S2320C4),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  S2320C3  : S2320C4 {
  void *s2320c3f0;
  char s2320c3f1[2];
  virtual  ~S2320C3(); // _ZN7S2320C3D1Ev
  virtual void  v6(); // _ZN7S2320C32v6Ev
  S2320C3(); // tgen
};
//SIG(-1 S2320C3) C1{ BC2{ vd v2 Fc Fi} vd v1 Fp Fc[2]}


 S2320C3 ::~S2320C3(){ note_dtor("S2320C3", this);}
void  S2320C3 ::v6(){vfunc_called(this, "_ZN7S2320C32v6Ev");}
S2320C3 ::S2320C3(){ note_ctor("S2320C3", this);} // tgen

static void Test_S2320C3()
{
  extern Class_Descriptor cd_S2320C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,6)];
    init_test(&cd_S2320C3, buf);
    S2320C3 *dp, &lv = *(dp=new (buf) S2320C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S2320C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2320C3)");
    check_base_class_offset(lv, (S2320C4*), 0, "S2320C3");
    check_field_offset(lv, s2320c3f0, ABISELECT(16,12), "S2320C3.s2320c3f0");
    check_field_offset(lv, s2320c3f1, ABISELECT(24,16), "S2320C3.s2320c3f1");
    test_class_info(&lv, &cd_S2320C3);
    dp->~S2320C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2320C3(Test_S2320C3, "S2320C3", ABISELECT(32,20));

#else // __cplusplus

extern void _ZN7S2320C3C1Ev();
extern void _ZN7S2320C3D1Ev();
Name_Map name_map_S2320C3[] = {
  NSPAIR(_ZN7S2320C3C1Ev),
  NSPAIR(_ZN7S2320C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2320C4;
extern VTBL_ENTRY _ZTI7S2320C4[];
extern  VTBL_ENTRY _ZTV7S2320C4[];
static Base_Class bases_S2320C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2320C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI7S2320C3[];
extern void _ZN7S2320C3D1Ev();
extern void _ZN7S2320C3D0Ev();
extern void _ZN7S2320C42v5Ev();
extern void _ZN7S2320C32v6Ev();
static  VTBL_ENTRY vtc_S2320C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2320C3[0]),
  (VTBL_ENTRY)&_ZN7S2320C3D1Ev,
  (VTBL_ENTRY)&_ZN7S2320C3D0Ev,
  (VTBL_ENTRY)&_ZN7S2320C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2320C32v6Ev,
};
extern VTBL_ENTRY _ZTI7S2320C3[];
extern  VTBL_ENTRY _ZTV7S2320C3[];
Class_Descriptor cd_S2320C3 = {  "S2320C3", // class name
  bases_S2320C3, 1,
  &(vtc_S2320C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,20), // object size
  NSPAIRA(_ZTI7S2320C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2320C3),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  S2320C2  : S2320C3 {
  void *s2320c2f0[2];
  int s2320c2f1[3];
  char s2320c2f2[2];
  void *s2320c2f3;
  virtual  ~S2320C2(); // _ZN7S2320C2D1Ev
  virtual void  v7(); // _ZN7S2320C22v7Ev
  virtual void  v8(); // _ZN7S2320C22v8Ev
  virtual void  v9(); // _ZN7S2320C22v9Ev
  virtual void  v10(); // _ZN7S2320C23v10Ev
  S2320C2(); // tgen
};
//SIG(-1 S2320C2) C1{ BC2{ BC3{ vd v5 Fc Fi} vd v6 Fp Fc[2]} vd v1 v2 v3 v4 Fp[2] Fi[3] Fc[2] Fp}


 S2320C2 ::~S2320C2(){ note_dtor("S2320C2", this);}
void  S2320C2 ::v7(){vfunc_called(this, "_ZN7S2320C22v7Ev");}
void  S2320C2 ::v8(){vfunc_called(this, "_ZN7S2320C22v8Ev");}
void  S2320C2 ::v9(){vfunc_called(this, "_ZN7S2320C22v9Ev");}
void  S2320C2 ::v10(){vfunc_called(this, "_ZN7S2320C23v10Ev");}
S2320C2 ::S2320C2(){ note_ctor("S2320C2", this);} // tgen

static void Test_S2320C2()
{
  extern Class_Descriptor cd_S2320C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,13)];
    init_test(&cd_S2320C2, buf);
    S2320C2 *dp, &lv = *(dp=new (buf) S2320C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,48), "sizeof(S2320C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2320C2)");
    check_base_class_offset(lv, (S2320C4*)(S2320C3*), 0, "S2320C2");
    check_base_class_offset(lv, (S2320C3*), 0, "S2320C2");
    check_field_offset(lv, s2320c2f0, ABISELECT(32,20), "S2320C2.s2320c2f0");
    check_field_offset(lv, s2320c2f1, ABISELECT(48,28), "S2320C2.s2320c2f1");
    check_field_offset(lv, s2320c2f2, ABISELECT(60,40), "S2320C2.s2320c2f2");
    check_field_offset(lv, s2320c2f3, ABISELECT(64,44), "S2320C2.s2320c2f3");
    test_class_info(&lv, &cd_S2320C2);
    dp->~S2320C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2320C2(Test_S2320C2, "S2320C2", ABISELECT(72,48));

#else // __cplusplus

extern void _ZN7S2320C2C1Ev();
extern void _ZN7S2320C2D1Ev();
Name_Map name_map_S2320C2[] = {
  NSPAIR(_ZN7S2320C2C1Ev),
  NSPAIR(_ZN7S2320C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2320C4;
extern VTBL_ENTRY _ZTI7S2320C4[];
extern  VTBL_ENTRY _ZTV7S2320C4[];
extern Class_Descriptor cd_S2320C3;
extern VTBL_ENTRY _ZTI7S2320C3[];
extern  VTBL_ENTRY _ZTV7S2320C3[];
static Base_Class bases_S2320C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2320C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S2320C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S2320C2[];
extern void _ZN7S2320C2D1Ev();
extern void _ZN7S2320C2D0Ev();
extern void _ZN7S2320C42v5Ev();
extern void _ZN7S2320C32v6Ev();
extern void _ZN7S2320C22v7Ev();
extern void _ZN7S2320C22v8Ev();
extern void _ZN7S2320C22v9Ev();
extern void _ZN7S2320C23v10Ev();
static  VTBL_ENTRY vtc_S2320C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2320C2[0]),
  (VTBL_ENTRY)&_ZN7S2320C2D1Ev,
  (VTBL_ENTRY)&_ZN7S2320C2D0Ev,
  (VTBL_ENTRY)&_ZN7S2320C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2320C32v6Ev,
  (VTBL_ENTRY)&_ZN7S2320C22v7Ev,
  (VTBL_ENTRY)&_ZN7S2320C22v8Ev,
  (VTBL_ENTRY)&_ZN7S2320C22v9Ev,
  (VTBL_ENTRY)&_ZN7S2320C23v10Ev,
};
extern VTBL_ENTRY _ZTI7S2320C2[];
extern  VTBL_ENTRY _ZTV7S2320C2[];
Class_Descriptor cd_S2320C2 = {  "S2320C2", // class name
  bases_S2320C2, 2,
  &(vtc_S2320C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,48), // object size
  NSPAIRA(_ZTI7S2320C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2320C2),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  S2320C1  : S2320C2 {
  void *s2320c1f0;
  int s2320c1f1[5];
  void *s2320c1f2[3];
  int s2320c1f3[3];
  void *s2320c1f4[18];
  int s2320c1f5;
  void *s2320c1f6;
  int s2320c1f7[4];
  __tsi64 s2320c1f8;
  int s2320c1f9[7];
  void *s2320c1f10[8];
  int s2320c1f11[2];
  void *s2320c1f12;
  int s2320c1f13[2];
  void *s2320c1f14[16];
  virtual  ~S2320C1(); // _ZN7S2320C1D1Ev
  virtual void  v1(); // _ZN7S2320C12v1Ev
  virtual void  v2(); // _ZN7S2320C12v2Ev
  virtual void  v3(); // _ZN7S2320C12v3Ev
  virtual void  v4(); // _ZN7S2320C12v4Ev
  S2320C1(); // tgen
};
//SIG(1 S2320C1) C1{ BC2{ BC3{ BC4{ vd v5 Fc Fi} vd v6 Fp Fc[2]} vd v7 v8 v9 v10 Fp[2] Fi[3] Fc[2] Fp} vd v1 v2 v3 v4 Fp Fi[5] Fp[3] Fi[3] Fp[18] Fi Fp Fi[4] FL Fi[7] Fp[8] Fi[2] Fp Fi[2] Fp[16]}


 S2320C1 ::~S2320C1(){ note_dtor("S2320C1", this);}
void  S2320C1 ::v1(){vfunc_called(this, "_ZN7S2320C12v1Ev");}
void  S2320C1 ::v2(){vfunc_called(this, "_ZN7S2320C12v2Ev");}
void  S2320C1 ::v3(){vfunc_called(this, "_ZN7S2320C12v3Ev");}
void  S2320C1 ::v4(){vfunc_called(this, "_ZN7S2320C12v4Ev");}
S2320C1 ::S2320C1(){ note_ctor("S2320C1", this);} // tgen

static void Test_S2320C1()
{
  extern Class_Descriptor cd_S2320C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(73,87)];
    init_test(&cd_S2320C1, buf);
    S2320C1 *dp, &lv = *(dp=new (buf) S2320C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(576,344), "sizeof(S2320C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2320C1)");
    check_base_class_offset(lv, (S2320C4*)(S2320C3*)(S2320C2*), 0, "S2320C1");
    check_base_class_offset(lv, (S2320C3*)(S2320C2*), 0, "S2320C1");
    check_base_class_offset(lv, (S2320C2*), 0, "S2320C1");
    check_field_offset(lv, s2320c1f0, ABISELECT(72,48), "S2320C1.s2320c1f0");
    check_field_offset(lv, s2320c1f1, ABISELECT(80,52), "S2320C1.s2320c1f1");
    check_field_offset(lv, s2320c1f2, ABISELECT(104,72), "S2320C1.s2320c1f2");
    check_field_offset(lv, s2320c1f3, ABISELECT(128,84), "S2320C1.s2320c1f3");
    check_field_offset(lv, s2320c1f4, ABISELECT(144,96), "S2320C1.s2320c1f4");
    check_field_offset(lv, s2320c1f5, ABISELECT(288,168), "S2320C1.s2320c1f5");
    check_field_offset(lv, s2320c1f6, ABISELECT(296,172), "S2320C1.s2320c1f6");
    check_field_offset(lv, s2320c1f7, ABISELECT(304,176), "S2320C1.s2320c1f7");
    check_field_offset(lv, s2320c1f8, ABISELECT(320,192), "S2320C1.s2320c1f8");
    check_field_offset(lv, s2320c1f9, ABISELECT(328,200), "S2320C1.s2320c1f9");
    check_field_offset(lv, s2320c1f10, ABISELECT(360,228), "S2320C1.s2320c1f10");
    check_field_offset(lv, s2320c1f11, ABISELECT(424,260), "S2320C1.s2320c1f11");
    check_field_offset(lv, s2320c1f12, ABISELECT(432,268), "S2320C1.s2320c1f12");
    check_field_offset(lv, s2320c1f13, ABISELECT(440,272), "S2320C1.s2320c1f13");
    check_field_offset(lv, s2320c1f14, ABISELECT(448,280), "S2320C1.s2320c1f14");
    test_class_info(&lv, &cd_S2320C1);
    dp->~S2320C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2320C1(Test_S2320C1, "S2320C1", ABISELECT(576,344));

#else // __cplusplus

extern void _ZN7S2320C1C1Ev();
extern void _ZN7S2320C1D1Ev();
Name_Map name_map_S2320C1[] = {
  NSPAIR(_ZN7S2320C1C1Ev),
  NSPAIR(_ZN7S2320C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2320C4;
extern VTBL_ENTRY _ZTI7S2320C4[];
extern  VTBL_ENTRY _ZTV7S2320C4[];
extern Class_Descriptor cd_S2320C3;
extern VTBL_ENTRY _ZTI7S2320C3[];
extern  VTBL_ENTRY _ZTV7S2320C3[];
extern Class_Descriptor cd_S2320C2;
extern VTBL_ENTRY _ZTI7S2320C2[];
extern  VTBL_ENTRY _ZTV7S2320C2[];
static Base_Class bases_S2320C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2320C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S2320C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S2320C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S2320C1[];
extern void _ZN7S2320C1D1Ev();
extern void _ZN7S2320C1D0Ev();
extern void _ZN7S2320C42v5Ev();
extern void _ZN7S2320C32v6Ev();
extern void _ZN7S2320C22v7Ev();
extern void _ZN7S2320C22v8Ev();
extern void _ZN7S2320C22v9Ev();
extern void _ZN7S2320C23v10Ev();
extern void _ZN7S2320C12v1Ev();
extern void _ZN7S2320C12v2Ev();
extern void _ZN7S2320C12v3Ev();
extern void _ZN7S2320C12v4Ev();
static  VTBL_ENTRY vtc_S2320C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2320C1[0]),
  (VTBL_ENTRY)&_ZN7S2320C1D1Ev,
  (VTBL_ENTRY)&_ZN7S2320C1D0Ev,
  (VTBL_ENTRY)&_ZN7S2320C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2320C32v6Ev,
  (VTBL_ENTRY)&_ZN7S2320C22v7Ev,
  (VTBL_ENTRY)&_ZN7S2320C22v8Ev,
  (VTBL_ENTRY)&_ZN7S2320C22v9Ev,
  (VTBL_ENTRY)&_ZN7S2320C23v10Ev,
  (VTBL_ENTRY)&_ZN7S2320C12v1Ev,
  (VTBL_ENTRY)&_ZN7S2320C12v2Ev,
  (VTBL_ENTRY)&_ZN7S2320C12v3Ev,
  (VTBL_ENTRY)&_ZN7S2320C12v4Ev,
};
extern VTBL_ENTRY _ZTI7S2320C1[];
extern  VTBL_ENTRY _ZTV7S2320C1[];
Class_Descriptor cd_S2320C1 = {  "S2320C1", // class name
  bases_S2320C1, 3,
  &(vtc_S2320C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(576,344), // object size
  NSPAIRA(_ZTI7S2320C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2320C1),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  S2317C4  {
  char s2317c4f0;
  int s2317c4f1;
  virtual  ~S2317C4(); // _ZN7S2317C4D1Ev
  virtual void  v5(); // _ZN7S2317C42v5Ev
  S2317C4(); // tgen
};
//SIG(-1 S2317C4) C1{ vd v1 Fc Fi}


 S2317C4 ::~S2317C4(){ note_dtor("S2317C4", this);}
void  S2317C4 ::v5(){vfunc_called(this, "_ZN7S2317C42v5Ev");}
S2317C4 ::S2317C4(){ note_ctor("S2317C4", this);} // tgen

static void Test_S2317C4()
{
  extern Class_Descriptor cd_S2317C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S2317C4, buf);
    S2317C4 *dp, &lv = *(dp=new (buf) S2317C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S2317C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2317C4)");
    check_field_offset(lv, s2317c4f0, ABISELECT(8,4), "S2317C4.s2317c4f0");
    check_field_offset(lv, s2317c4f1, ABISELECT(12,8), "S2317C4.s2317c4f1");
    test_class_info(&lv, &cd_S2317C4);
    dp->~S2317C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2317C4(Test_S2317C4, "S2317C4", ABISELECT(16,12));

#else // __cplusplus

extern void _ZN7S2317C4C1Ev();
extern void _ZN7S2317C4D1Ev();
Name_Map name_map_S2317C4[] = {
  NSPAIR(_ZN7S2317C4C1Ev),
  NSPAIR(_ZN7S2317C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S2317C4[];
extern void _ZN7S2317C4D1Ev();
extern void _ZN7S2317C4D0Ev();
extern void _ZN7S2317C42v5Ev();
static  VTBL_ENTRY vtc_S2317C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2317C4[0]),
  (VTBL_ENTRY)&_ZN7S2317C4D1Ev,
  (VTBL_ENTRY)&_ZN7S2317C4D0Ev,
  (VTBL_ENTRY)&_ZN7S2317C42v5Ev,
};
extern VTBL_ENTRY _ZTI7S2317C4[];
extern  VTBL_ENTRY _ZTV7S2317C4[];
Class_Descriptor cd_S2317C4 = {  "S2317C4", // class name
  0,0,//no base classes
  &(vtc_S2317C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI7S2317C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S2317C4),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  S2317C3  : S2317C4 {
  void *s2317c3f0;
  char s2317c3f1[2];
  virtual  ~S2317C3(); // _ZN7S2317C3D1Ev
  virtual void  v6(); // _ZN7S2317C32v6Ev
  S2317C3(); // tgen
};
//SIG(-1 S2317C3) C1{ BC2{ vd v2 Fc Fi} vd v1 Fp Fc[2]}


 S2317C3 ::~S2317C3(){ note_dtor("S2317C3", this);}
void  S2317C3 ::v6(){vfunc_called(this, "_ZN7S2317C32v6Ev");}
S2317C3 ::S2317C3(){ note_ctor("S2317C3", this);} // tgen

static void Test_S2317C3()
{
  extern Class_Descriptor cd_S2317C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,6)];
    init_test(&cd_S2317C3, buf);
    S2317C3 *dp, &lv = *(dp=new (buf) S2317C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S2317C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2317C3)");
    check_base_class_offset(lv, (S2317C4*), 0, "S2317C3");
    check_field_offset(lv, s2317c3f0, ABISELECT(16,12), "S2317C3.s2317c3f0");
    check_field_offset(lv, s2317c3f1, ABISELECT(24,16), "S2317C3.s2317c3f1");
    test_class_info(&lv, &cd_S2317C3);
    dp->~S2317C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2317C3(Test_S2317C3, "S2317C3", ABISELECT(32,20));

#else // __cplusplus

extern void _ZN7S2317C3C1Ev();
extern void _ZN7S2317C3D1Ev();
Name_Map name_map_S2317C3[] = {
  NSPAIR(_ZN7S2317C3C1Ev),
  NSPAIR(_ZN7S2317C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2317C4;
extern VTBL_ENTRY _ZTI7S2317C4[];
extern  VTBL_ENTRY _ZTV7S2317C4[];
static Base_Class bases_S2317C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2317C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI7S2317C3[];
extern void _ZN7S2317C3D1Ev();
extern void _ZN7S2317C3D0Ev();
extern void _ZN7S2317C42v5Ev();
extern void _ZN7S2317C32v6Ev();
static  VTBL_ENTRY vtc_S2317C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2317C3[0]),
  (VTBL_ENTRY)&_ZN7S2317C3D1Ev,
  (VTBL_ENTRY)&_ZN7S2317C3D0Ev,
  (VTBL_ENTRY)&_ZN7S2317C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2317C32v6Ev,
};
extern VTBL_ENTRY _ZTI7S2317C3[];
extern  VTBL_ENTRY _ZTV7S2317C3[];
Class_Descriptor cd_S2317C3 = {  "S2317C3", // class name
  bases_S2317C3, 1,
  &(vtc_S2317C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,20), // object size
  NSPAIRA(_ZTI7S2317C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2317C3),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  S2317C2  : S2317C3 {
  void *s2317c2f0[2];
  int s2317c2f1[3];
  char s2317c2f2[2];
  void *s2317c2f3;
  virtual  ~S2317C2(); // _ZN7S2317C2D1Ev
  virtual void  v7(); // _ZN7S2317C22v7Ev
  virtual void  v8(); // _ZN7S2317C22v8Ev
  virtual void  v9(); // _ZN7S2317C22v9Ev
  virtual void  v10(); // _ZN7S2317C23v10Ev
  S2317C2(); // tgen
};
//SIG(-1 S2317C2) C1{ BC2{ BC3{ vd v5 Fc Fi} vd v6 Fp Fc[2]} vd v1 v2 v3 v4 Fp[2] Fi[3] Fc[2] Fp}


 S2317C2 ::~S2317C2(){ note_dtor("S2317C2", this);}
void  S2317C2 ::v7(){vfunc_called(this, "_ZN7S2317C22v7Ev");}
void  S2317C2 ::v8(){vfunc_called(this, "_ZN7S2317C22v8Ev");}
void  S2317C2 ::v9(){vfunc_called(this, "_ZN7S2317C22v9Ev");}
void  S2317C2 ::v10(){vfunc_called(this, "_ZN7S2317C23v10Ev");}
S2317C2 ::S2317C2(){ note_ctor("S2317C2", this);} // tgen

static void Test_S2317C2()
{
  extern Class_Descriptor cd_S2317C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,13)];
    init_test(&cd_S2317C2, buf);
    S2317C2 *dp, &lv = *(dp=new (buf) S2317C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,48), "sizeof(S2317C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2317C2)");
    check_base_class_offset(lv, (S2317C4*)(S2317C3*), 0, "S2317C2");
    check_base_class_offset(lv, (S2317C3*), 0, "S2317C2");
    check_field_offset(lv, s2317c2f0, ABISELECT(32,20), "S2317C2.s2317c2f0");
    check_field_offset(lv, s2317c2f1, ABISELECT(48,28), "S2317C2.s2317c2f1");
    check_field_offset(lv, s2317c2f2, ABISELECT(60,40), "S2317C2.s2317c2f2");
    check_field_offset(lv, s2317c2f3, ABISELECT(64,44), "S2317C2.s2317c2f3");
    test_class_info(&lv, &cd_S2317C2);
    dp->~S2317C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2317C2(Test_S2317C2, "S2317C2", ABISELECT(72,48));

#else // __cplusplus

extern void _ZN7S2317C2C1Ev();
extern void _ZN7S2317C2D1Ev();
Name_Map name_map_S2317C2[] = {
  NSPAIR(_ZN7S2317C2C1Ev),
  NSPAIR(_ZN7S2317C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2317C4;
extern VTBL_ENTRY _ZTI7S2317C4[];
extern  VTBL_ENTRY _ZTV7S2317C4[];
extern Class_Descriptor cd_S2317C3;
extern VTBL_ENTRY _ZTI7S2317C3[];
extern  VTBL_ENTRY _ZTV7S2317C3[];
static Base_Class bases_S2317C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2317C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S2317C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S2317C2[];
extern void _ZN7S2317C2D1Ev();
extern void _ZN7S2317C2D0Ev();
extern void _ZN7S2317C42v5Ev();
extern void _ZN7S2317C32v6Ev();
extern void _ZN7S2317C22v7Ev();
extern void _ZN7S2317C22v8Ev();
extern void _ZN7S2317C22v9Ev();
extern void _ZN7S2317C23v10Ev();
static  VTBL_ENTRY vtc_S2317C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2317C2[0]),
  (VTBL_ENTRY)&_ZN7S2317C2D1Ev,
  (VTBL_ENTRY)&_ZN7S2317C2D0Ev,
  (VTBL_ENTRY)&_ZN7S2317C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2317C32v6Ev,
  (VTBL_ENTRY)&_ZN7S2317C22v7Ev,
  (VTBL_ENTRY)&_ZN7S2317C22v8Ev,
  (VTBL_ENTRY)&_ZN7S2317C22v9Ev,
  (VTBL_ENTRY)&_ZN7S2317C23v10Ev,
};
extern VTBL_ENTRY _ZTI7S2317C2[];
extern  VTBL_ENTRY _ZTV7S2317C2[];
Class_Descriptor cd_S2317C2 = {  "S2317C2", // class name
  bases_S2317C2, 2,
  &(vtc_S2317C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,48), // object size
  NSPAIRA(_ZTI7S2317C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2317C2),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  S2317C1  : S2317C2 {
  void *s2317c1f0;
  int s2317c1f1;
  void *s2317c1f2[3];
  int s2317c1f3[4];
  void *s2317c1f4[18];
  int s2317c1f5;
  void *s2317c1f6;
  int s2317c1f7[4];
  __tsi64 s2317c1f8;
  int s2317c1f9[5];
  void *s2317c1f10[8];
  int s2317c1f11[2];
  void *s2317c1f12[3];
  int s2317c1f13[2];
  void *s2317c1f14[12];
  virtual  ~S2317C1(); // _ZN7S2317C1D1Ev
  virtual void  v1(); // _ZN7S2317C12v1Ev
  virtual void  v2(); // _ZN7S2317C12v2Ev
  virtual void  v3(); // _ZN7S2317C12v3Ev
  virtual void  v4(); // _ZN7S2317C12v4Ev
  S2317C1(); // tgen
};
//SIG(1 S2317C1) C1{ BC2{ BC3{ BC4{ vd v5 Fc Fi} vd v6 Fp Fc[2]} vd v7 v8 v9 v10 Fp[2] Fi[3] Fc[2] Fp} vd v1 v2 v3 v4 Fp Fi Fp[3] Fi[4] Fp[18] Fi Fp Fi[4] FL Fi[5] Fp[8] Fi[2] Fp[3] Fi[2] Fp[12]}


 S2317C1 ::~S2317C1(){ note_dtor("S2317C1", this);}
void  S2317C1 ::v1(){vfunc_called(this, "_ZN7S2317C12v1Ev");}
void  S2317C1 ::v2(){vfunc_called(this, "_ZN7S2317C12v2Ev");}
void  S2317C1 ::v3(){vfunc_called(this, "_ZN7S2317C12v3Ev");}
void  S2317C1 ::v4(){vfunc_called(this, "_ZN7S2317C12v4Ev");}
S2317C1 ::S2317C1(){ note_ctor("S2317C1", this);} // tgen

static void Test_S2317C1()
{
  extern Class_Descriptor cd_S2317C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(68,80)];
    init_test(&cd_S2317C1, buf);
    S2317C1 *dp, &lv = *(dp=new (buf) S2317C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(536,316), "sizeof(S2317C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2317C1)");
    check_base_class_offset(lv, (S2317C4*)(S2317C3*)(S2317C2*), 0, "S2317C1");
    check_base_class_offset(lv, (S2317C3*)(S2317C2*), 0, "S2317C1");
    check_base_class_offset(lv, (S2317C2*), 0, "S2317C1");
    check_field_offset(lv, s2317c1f0, ABISELECT(72,48), "S2317C1.s2317c1f0");
    check_field_offset(lv, s2317c1f1, ABISELECT(80,52), "S2317C1.s2317c1f1");
    check_field_offset(lv, s2317c1f2, ABISELECT(88,56), "S2317C1.s2317c1f2");
    check_field_offset(lv, s2317c1f3, ABISELECT(112,68), "S2317C1.s2317c1f3");
    check_field_offset(lv, s2317c1f4, ABISELECT(128,84), "S2317C1.s2317c1f4");
    check_field_offset(lv, s2317c1f5, ABISELECT(272,156), "S2317C1.s2317c1f5");
    check_field_offset(lv, s2317c1f6, ABISELECT(280,160), "S2317C1.s2317c1f6");
    check_field_offset(lv, s2317c1f7, ABISELECT(288,164), "S2317C1.s2317c1f7");
    check_field_offset(lv, s2317c1f8, ABISELECT(304,180), "S2317C1.s2317c1f8");
    check_field_offset(lv, s2317c1f9, ABISELECT(312,188), "S2317C1.s2317c1f9");
    check_field_offset(lv, s2317c1f10, ABISELECT(336,208), "S2317C1.s2317c1f10");
    check_field_offset(lv, s2317c1f11, ABISELECT(400,240), "S2317C1.s2317c1f11");
    check_field_offset(lv, s2317c1f12, ABISELECT(408,248), "S2317C1.s2317c1f12");
    check_field_offset(lv, s2317c1f13, ABISELECT(432,260), "S2317C1.s2317c1f13");
    check_field_offset(lv, s2317c1f14, ABISELECT(440,268), "S2317C1.s2317c1f14");
    test_class_info(&lv, &cd_S2317C1);
    dp->~S2317C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2317C1(Test_S2317C1, "S2317C1", ABISELECT(536,316));

#else // __cplusplus

extern void _ZN7S2317C1C1Ev();
extern void _ZN7S2317C1D1Ev();
Name_Map name_map_S2317C1[] = {
  NSPAIR(_ZN7S2317C1C1Ev),
  NSPAIR(_ZN7S2317C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2317C4;
extern VTBL_ENTRY _ZTI7S2317C4[];
extern  VTBL_ENTRY _ZTV7S2317C4[];
extern Class_Descriptor cd_S2317C3;
extern VTBL_ENTRY _ZTI7S2317C3[];
extern  VTBL_ENTRY _ZTV7S2317C3[];
extern Class_Descriptor cd_S2317C2;
extern VTBL_ENTRY _ZTI7S2317C2[];
extern  VTBL_ENTRY _ZTV7S2317C2[];
static Base_Class bases_S2317C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2317C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S2317C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S2317C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S2317C1[];
extern void _ZN7S2317C1D1Ev();
extern void _ZN7S2317C1D0Ev();
extern void _ZN7S2317C42v5Ev();
extern void _ZN7S2317C32v6Ev();
extern void _ZN7S2317C22v7Ev();
extern void _ZN7S2317C22v8Ev();
extern void _ZN7S2317C22v9Ev();
extern void _ZN7S2317C23v10Ev();
extern void _ZN7S2317C12v1Ev();
extern void _ZN7S2317C12v2Ev();
extern void _ZN7S2317C12v3Ev();
extern void _ZN7S2317C12v4Ev();
static  VTBL_ENTRY vtc_S2317C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2317C1[0]),
  (VTBL_ENTRY)&_ZN7S2317C1D1Ev,
  (VTBL_ENTRY)&_ZN7S2317C1D0Ev,
  (VTBL_ENTRY)&_ZN7S2317C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2317C32v6Ev,
  (VTBL_ENTRY)&_ZN7S2317C22v7Ev,
  (VTBL_ENTRY)&_ZN7S2317C22v8Ev,
  (VTBL_ENTRY)&_ZN7S2317C22v9Ev,
  (VTBL_ENTRY)&_ZN7S2317C23v10Ev,
  (VTBL_ENTRY)&_ZN7S2317C12v1Ev,
  (VTBL_ENTRY)&_ZN7S2317C12v2Ev,
  (VTBL_ENTRY)&_ZN7S2317C12v3Ev,
  (VTBL_ENTRY)&_ZN7S2317C12v4Ev,
};
extern VTBL_ENTRY _ZTI7S2317C1[];
extern  VTBL_ENTRY _ZTV7S2317C1[];
Class_Descriptor cd_S2317C1 = {  "S2317C1", // class name
  bases_S2317C1, 3,
  &(vtc_S2317C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(536,316), // object size
  NSPAIRA(_ZTI7S2317C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2317C1),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  S21580C2  {
  char s21580c2f0[140];
  int s21580c2f1;
  char s21580c2f2[2];
  void *s21580c2f3[2];
  char s21580c2f4[16];
};
//SIG(-1 S21580C2) C1{ Fc[140] Fi Fc[2] Fp[2] Fc[16]}



static void Test_S21580C2()
{
  {
    init_simple_test("S21580C2");
    S21580C2 lv;
    check2(sizeof(lv), ABISELECT(184,172), "sizeof(S21580C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21580C2)");
    check_field_offset(lv, s21580c2f0, 0, "S21580C2.s21580c2f0");
    check_field_offset(lv, s21580c2f1, 140, "S21580C2.s21580c2f1");
    check_field_offset(lv, s21580c2f2, 144, "S21580C2.s21580c2f2");
    check_field_offset(lv, s21580c2f3, ABISELECT(152,148), "S21580C2.s21580c2f3");
    check_field_offset(lv, s21580c2f4, ABISELECT(168,156), "S21580C2.s21580c2f4");
  }
}
static Arrange_To_Call_Me vS21580C2(Test_S21580C2, "S21580C2", ABISELECT(184,172));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S21580C1  {
  int s21580c1f0;
  ::S21580C2 s21580c1f1;
  ::S21579C5 s21580c1f2;
  ::S3625C18_nt s21580c1f3;
  ::S3625C18_nt s21580c1f4;
  char s21580c1f5[2];
  void *s21580c1f6[2];
  int s21580c1f7;
  ::S21579C10 s21580c1f8;
  ::S3625C18_nt s21580c1f9;
  void  mf21580c1(); // _ZN8S21580C19mf21580c1Ev
  virtual  ~S21580C1(); // _ZN8S21580C1D1Ev
  S21580C1(); // tgen
};
//SIG(1 S21580C1) C1{ vd m Fi FC2{ Fc[140] Fi Fc[2] Fp[2] Fc[16]} FC3{ m FC4{ m Fp[2]} FC5{ m Fp[2]} FC6{ m Fp Fi[2] FC7{ m}} Fi Fc Fi} FC8{ m Fp Fi FC9{ m}} FC8 Fc[2] Fp[2] Fi FC10{ m Fp Fi[2] Fp[2]} FC8}


void  S21580C1 ::mf21580c1(){}
 S21580C1 ::~S21580C1(){ note_dtor("S21580C1", this);}
S21580C1 ::S21580C1(){ note_ctor("S21580C1", this);} // tgen

static void Test_S21580C1()
{
  extern Class_Descriptor cd_S21580C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(49,75)];
    init_test(&cd_S21580C1, buf);
    S21580C1 *dp, &lv = *(dp=new (buf) S21580C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(384,296), "sizeof(S21580C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21580C1)");
    check_field_offset(lv, s21580c1f0, ABISELECT(8,4), "S21580C1.s21580c1f0");
    check_field_offset(lv, s21580c1f1, ABISELECT(16,8), "S21580C1.s21580c1f1");
    check_field_offset(lv, s21580c1f2, ABISELECT(200,180), "S21580C1.s21580c1f2");
    check_field_offset(lv, s21580c1f3, ABISELECT(272,224), "S21580C1.s21580c1f3");
    check_field_offset(lv, s21580c1f4, ABISELECT(288,236), "S21580C1.s21580c1f4");
    check_field_offset(lv, s21580c1f5, ABISELECT(304,248), "S21580C1.s21580c1f5");
    check_field_offset(lv, s21580c1f6, ABISELECT(312,252), "S21580C1.s21580c1f6");
    check_field_offset(lv, s21580c1f7, ABISELECT(328,260), "S21580C1.s21580c1f7");
    check_field_offset(lv, s21580c1f8, ABISELECT(336,264), "S21580C1.s21580c1f8");
    check_field_offset(lv, s21580c1f9, ABISELECT(368,284), "S21580C1.s21580c1f9");
    test_class_info(&lv, &cd_S21580C1);
    dp->~S21580C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21580C1(Test_S21580C1, "S21580C1", ABISELECT(384,296));

#else // __cplusplus

extern void _ZN8S21580C1C1Ev();
extern void _ZN8S21580C1D1Ev();
Name_Map name_map_S21580C1[] = {
  NSPAIR(_ZN8S21580C1C1Ev),
  NSPAIR(_ZN8S21580C1D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S21580C1[];
extern void _ZN8S21580C1D1Ev();
extern void _ZN8S21580C1D0Ev();
static  VTBL_ENTRY vtc_S21580C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S21580C1[0]),
  (VTBL_ENTRY)&_ZN8S21580C1D1Ev,
  (VTBL_ENTRY)&_ZN8S21580C1D0Ev,
};
extern VTBL_ENTRY _ZTI8S21580C1[];
extern  VTBL_ENTRY _ZTV8S21580C1[];
Class_Descriptor cd_S21580C1 = {  "S21580C1", // class name
  0,0,//no base classes
  &(vtc_S21580C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(384,296), // object size
  NSPAIRA(_ZTI8S21580C1),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S21580C1),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  S5200C3  {
  virtual  ~S5200C3(); // _ZN7S5200C3D1Ev
  virtual void  v4(); // _ZN7S5200C32v4Ev
  S5200C3(); // tgen
};
//SIG(-1 S5200C3) C1{ vd v1}


 S5200C3 ::~S5200C3(){ note_dtor("S5200C3", this);}
void  S5200C3 ::v4(){vfunc_called(this, "_ZN7S5200C32v4Ev");}
S5200C3 ::S5200C3(){ note_ctor("S5200C3", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S5200C3C1Ev();
extern void _ZN7S5200C3D1Ev();
Name_Map name_map_S5200C3[] = {
  NSPAIR(_ZN7S5200C3C1Ev),
  NSPAIR(_ZN7S5200C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S5200C3[];
extern void _ZN7S5200C3D1Ev();
extern void _ZN7S5200C3D0Ev();
extern void _ZN7S5200C32v4Ev();
static  VTBL_ENTRY vtc_S5200C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5200C3[0]),
  (VTBL_ENTRY)&_ZN7S5200C3D1Ev,
  (VTBL_ENTRY)&_ZN7S5200C3D0Ev,
  (VTBL_ENTRY)&_ZN7S5200C32v4Ev,
};
extern VTBL_ENTRY _ZTI7S5200C3[];
extern  VTBL_ENTRY _ZTV7S5200C3[];
Class_Descriptor cd_S5200C3 = {  "S5200C3", // class name
  0,0,//no base classes
  &(vtc_S5200C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S5200C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S5200C3),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  S5200C2  : S5200C3 {
  void *s5200c2f0;
  ::S21579C7_nt s5200c2f1;
  void *s5200c2f2[2];
  ::S21579C10 s5200c2f3;
  int s5200c2f4[5];
  char s5200c2f5[3];
  ::S3625C18_nt s5200c2f6;
  ::S3625C18_nt s5200c2f7;
  ::S3625C18_nt s5200c2f8;
  ::S3625C18_nt s5200c2f9;
  void *s5200c2f10;
  virtual  ~S5200C2(); // _ZN7S5200C2D1Ev
  virtual void  v5(); // _ZN7S5200C22v5Ev
  virtual void  v6(); // _ZN7S5200C22v6Ev
  virtual void  v7(); // _ZN7S5200C22v7Ev
  virtual void  v8(); // _ZN7S5200C22v8Ev
  virtual void  v9(); // _ZN7S5200C22v9Ev
  virtual void  v10(); // _ZN7S5200C23v10Ev
  virtual void  v11(); // _ZN7S5200C23v11Ev
  S5200C2(); // tgen
};
//SIG(-1 S5200C2) C1{ BC2{ vd v8} vd v1 v2 v3 v4 v5 v6 v7 Fp FC3{ m Fp[2]} Fp[2] FC4{ m Fp Fi[2] Fp[2]} Fi[5] Fc[3] FC5{ m Fp Fi FC6{ m}} FC5 FC5 FC5 Fp}


 S5200C2 ::~S5200C2(){ note_dtor("S5200C2", this);}
void  S5200C2 ::v5(){vfunc_called(this, "_ZN7S5200C22v5Ev");}
void  S5200C2 ::v6(){vfunc_called(this, "_ZN7S5200C22v6Ev");}
void  S5200C2 ::v7(){vfunc_called(this, "_ZN7S5200C22v7Ev");}
void  S5200C2 ::v8(){vfunc_called(this, "_ZN7S5200C22v8Ev");}
void  S5200C2 ::v9(){vfunc_called(this, "_ZN7S5200C22v9Ev");}
void  S5200C2 ::v10(){vfunc_called(this, "_ZN7S5200C23v10Ev");}
void  S5200C2 ::v11(){vfunc_called(this, "_ZN7S5200C23v11Ev");}
S5200C2 ::S5200C2(){ note_ctor("S5200C2", this);} // tgen

static void Test_S5200C2()
{
  extern Class_Descriptor cd_S5200C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(23,31)];
    init_test(&cd_S5200C2, buf);
    S5200C2 *dp, &lv = *(dp=new (buf) S5200C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(176,120), "sizeof(S5200C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5200C2)");
    check_base_class_offset(lv, (S5200C3*), 0, "S5200C2");
    check_field_offset(lv, s5200c2f0, ABISELECT(8,4), "S5200C2.s5200c2f0");
    check_field_offset(lv, s5200c2f1, ABISELECT(16,8), "S5200C2.s5200c2f1");
    check_field_offset(lv, s5200c2f2, ABISELECT(32,16), "S5200C2.s5200c2f2");
    check_field_offset(lv, s5200c2f3, ABISELECT(48,24), "S5200C2.s5200c2f3");
    check_field_offset(lv, s5200c2f4, ABISELECT(80,44), "S5200C2.s5200c2f4");
    check_field_offset(lv, s5200c2f5, ABISELECT(100,64), "S5200C2.s5200c2f5");
    check_field_offset(lv, s5200c2f6, ABISELECT(104,68), "S5200C2.s5200c2f6");
    check_field_offset(lv, s5200c2f7, ABISELECT(120,80), "S5200C2.s5200c2f7");
    check_field_offset(lv, s5200c2f8, ABISELECT(136,92), "S5200C2.s5200c2f8");
    check_field_offset(lv, s5200c2f9, ABISELECT(152,104), "S5200C2.s5200c2f9");
    check_field_offset(lv, s5200c2f10, ABISELECT(168,116), "S5200C2.s5200c2f10");
    test_class_info(&lv, &cd_S5200C2);
    dp->~S5200C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5200C2(Test_S5200C2, "S5200C2", ABISELECT(176,120));

#else // __cplusplus

extern void _ZN7S5200C2C1Ev();
extern void _ZN7S5200C2D1Ev();
Name_Map name_map_S5200C2[] = {
  NSPAIR(_ZN7S5200C2C1Ev),
  NSPAIR(_ZN7S5200C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5200C3;
extern VTBL_ENTRY _ZTI7S5200C3[];
extern  VTBL_ENTRY _ZTV7S5200C3[];
static Base_Class bases_S5200C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5200C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI7S5200C2[];
extern void _ZN7S5200C2D1Ev();
extern void _ZN7S5200C2D0Ev();
extern void _ZN7S5200C32v4Ev();
extern void _ZN7S5200C22v5Ev();
extern void _ZN7S5200C22v6Ev();
extern void _ZN7S5200C22v7Ev();
extern void _ZN7S5200C22v8Ev();
extern void _ZN7S5200C22v9Ev();
extern void _ZN7S5200C23v10Ev();
extern void _ZN7S5200C23v11Ev();
static  VTBL_ENTRY vtc_S5200C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5200C2[0]),
  (VTBL_ENTRY)&_ZN7S5200C2D1Ev,
  (VTBL_ENTRY)&_ZN7S5200C2D0Ev,
  (VTBL_ENTRY)&_ZN7S5200C32v4Ev,
  (VTBL_ENTRY)&_ZN7S5200C22v5Ev,
  (VTBL_ENTRY)&_ZN7S5200C22v6Ev,
  (VTBL_ENTRY)&_ZN7S5200C22v7Ev,
  (VTBL_ENTRY)&_ZN7S5200C22v8Ev,
  (VTBL_ENTRY)&_ZN7S5200C22v9Ev,
  (VTBL_ENTRY)&_ZN7S5200C23v10Ev,
  (VTBL_ENTRY)&_ZN7S5200C23v11Ev,
};
extern VTBL_ENTRY _ZTI7S5200C2[];
extern  VTBL_ENTRY _ZTV7S5200C2[];
Class_Descriptor cd_S5200C2 = {  "S5200C2", // class name
  bases_S5200C2, 1,
  &(vtc_S5200C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(176,120), // object size
  NSPAIRA(_ZTI7S5200C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S5200C2),12, //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  S5200C1  : S5200C2 {
  ::S3625C31 s5200c1f0;
  ::S3625C18_nt s5200c1f1;
  virtual  ~S5200C1(); // _ZN7S5200C1D1Ev
  virtual void  v1(); // _ZN7S5200C12v1Ev
  virtual void  v2(); // _ZN7S5200C12v2Ev
  virtual void  v3(); // _ZN7S5200C12v3Ev
  S5200C1(); // tgen
};
//SIG(1 S5200C1) C1{ BC2{ BC3{ vd v4} vd v5 v6 v7 v8 v9 v10 v11 Fp FC4{ m Fp[2]} Fp[2] FC5{ m Fp Fi[2] Fp[2]} Fi[5] Fc[3] FC6{ m Fp Fi FC7{ m}} FC6 FC6 FC6 Fp} vd v1 v2 v3 FC8{ m Fp Fi[2] FC9{ m}} FC6}


 S5200C1 ::~S5200C1(){ note_dtor("S5200C1", this);}
void  S5200C1 ::v1(){vfunc_called(this, "_ZN7S5200C12v1Ev");}
void  S5200C1 ::v2(){vfunc_called(this, "_ZN7S5200C12v2Ev");}
void  S5200C1 ::v3(){vfunc_called(this, "_ZN7S5200C12v3Ev");}
S5200C1 ::S5200C1(){ note_ctor("S5200C1", this);} // tgen

static void Test_S5200C1()
{
  extern Class_Descriptor cd_S5200C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(28,38)];
    init_test(&cd_S5200C1, buf);
    S5200C1 *dp, &lv = *(dp=new (buf) S5200C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(216,148), "sizeof(S5200C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5200C1)");
    check_base_class_offset(lv, (S5200C3*)(S5200C2*), 0, "S5200C1");
    check_base_class_offset(lv, (S5200C2*), 0, "S5200C1");
    check_field_offset(lv, s5200c1f0, ABISELECT(176,120), "S5200C1.s5200c1f0");
    check_field_offset(lv, s5200c1f1, ABISELECT(200,136), "S5200C1.s5200c1f1");
    test_class_info(&lv, &cd_S5200C1);
    dp->~S5200C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5200C1(Test_S5200C1, "S5200C1", ABISELECT(216,148));

#else // __cplusplus

extern void _ZN7S5200C1C1Ev();
extern void _ZN7S5200C1D1Ev();
Name_Map name_map_S5200C1[] = {
  NSPAIR(_ZN7S5200C1C1Ev),
  NSPAIR(_ZN7S5200C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5200C3;
extern VTBL_ENTRY _ZTI7S5200C3[];
extern  VTBL_ENTRY _ZTV7S5200C3[];
extern Class_Descriptor cd_S5200C2;
extern VTBL_ENTRY _ZTI7S5200C2[];
extern  VTBL_ENTRY _ZTV7S5200C2[];
static Base_Class bases_S5200C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5200C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S5200C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S5200C1[];
extern void _ZN7S5200C1D1Ev();
extern void _ZN7S5200C1D0Ev();
extern void _ZN7S5200C32v4Ev();
extern void _ZN7S5200C22v5Ev();
extern void _ZN7S5200C22v6Ev();
extern void _ZN7S5200C22v7Ev();
extern void _ZN7S5200C22v8Ev();
extern void _ZN7S5200C22v9Ev();
extern void _ZN7S5200C23v10Ev();
extern void _ZN7S5200C23v11Ev();
extern void _ZN7S5200C12v1Ev();
extern void _ZN7S5200C12v2Ev();
extern void _ZN7S5200C12v3Ev();
static  VTBL_ENTRY vtc_S5200C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5200C1[0]),
  (VTBL_ENTRY)&_ZN7S5200C1D1Ev,
  (VTBL_ENTRY)&_ZN7S5200C1D0Ev,
  (VTBL_ENTRY)&_ZN7S5200C32v4Ev,
  (VTBL_ENTRY)&_ZN7S5200C22v5Ev,
  (VTBL_ENTRY)&_ZN7S5200C22v6Ev,
  (VTBL_ENTRY)&_ZN7S5200C22v7Ev,
  (VTBL_ENTRY)&_ZN7S5200C22v8Ev,
  (VTBL_ENTRY)&_ZN7S5200C22v9Ev,
  (VTBL_ENTRY)&_ZN7S5200C23v10Ev,
  (VTBL_ENTRY)&_ZN7S5200C23v11Ev,
  (VTBL_ENTRY)&_ZN7S5200C12v1Ev,
  (VTBL_ENTRY)&_ZN7S5200C12v2Ev,
  (VTBL_ENTRY)&_ZN7S5200C12v3Ev,
};
extern VTBL_ENTRY _ZTI7S5200C1[];
extern  VTBL_ENTRY _ZTV7S5200C1[];
Class_Descriptor cd_S5200C1 = {  "S5200C1", // class name
  bases_S5200C1, 2,
  &(vtc_S5200C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(216,148), // object size
  NSPAIRA(_ZTI7S5200C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S5200C1),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  S2023C4  {
  virtual  ~S2023C4(); // _ZN7S2023C4D1Ev
  virtual void  v12(); // _ZN7S2023C43v12Ev
  virtual void  v13(); // _ZN7S2023C43v13Ev
  virtual void  v14(); // _ZN7S2023C43v14Ev
  virtual void  v15(); // _ZN7S2023C43v15Ev
  virtual void  v16(); // _ZN7S2023C43v16Ev
  virtual void  v17(); // _ZN7S2023C43v17Ev
  virtual void  v18(); // _ZN7S2023C43v18Ev
  virtual void  v19(); // _ZN7S2023C43v19Ev
  virtual void  v20(); // _ZN7S2023C43v20Ev
  S2023C4(); // tgen
};
//SIG(-1 S2023C4) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9}


 S2023C4 ::~S2023C4(){ note_dtor("S2023C4", this);}
void  S2023C4 ::v12(){vfunc_called(this, "_ZN7S2023C43v12Ev");}
void  S2023C4 ::v13(){vfunc_called(this, "_ZN7S2023C43v13Ev");}
void  S2023C4 ::v14(){vfunc_called(this, "_ZN7S2023C43v14Ev");}
void  S2023C4 ::v15(){vfunc_called(this, "_ZN7S2023C43v15Ev");}
void  S2023C4 ::v16(){vfunc_called(this, "_ZN7S2023C43v16Ev");}
void  S2023C4 ::v17(){vfunc_called(this, "_ZN7S2023C43v17Ev");}
void  S2023C4 ::v18(){vfunc_called(this, "_ZN7S2023C43v18Ev");}
void  S2023C4 ::v19(){vfunc_called(this, "_ZN7S2023C43v19Ev");}
void  S2023C4 ::v20(){vfunc_called(this, "_ZN7S2023C43v20Ev");}
S2023C4 ::S2023C4(){ note_ctor("S2023C4", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S2023C4C1Ev();
extern void _ZN7S2023C4D1Ev();
Name_Map name_map_S2023C4[] = {
  NSPAIR(_ZN7S2023C4C1Ev),
  NSPAIR(_ZN7S2023C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S2023C4[];
extern void _ZN7S2023C4D1Ev();
extern void _ZN7S2023C4D0Ev();
extern void _ZN7S2023C43v12Ev();
extern void _ZN7S2023C43v13Ev();
extern void _ZN7S2023C43v14Ev();
extern void _ZN7S2023C43v15Ev();
extern void _ZN7S2023C43v16Ev();
extern void _ZN7S2023C43v17Ev();
extern void _ZN7S2023C43v18Ev();
extern void _ZN7S2023C43v19Ev();
extern void _ZN7S2023C43v20Ev();
static  VTBL_ENTRY vtc_S2023C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2023C4[0]),
  (VTBL_ENTRY)&_ZN7S2023C4D1Ev,
  (VTBL_ENTRY)&_ZN7S2023C4D0Ev,
  (VTBL_ENTRY)&_ZN7S2023C43v12Ev,
  (VTBL_ENTRY)&_ZN7S2023C43v13Ev,
  (VTBL_ENTRY)&_ZN7S2023C43v14Ev,
  (VTBL_ENTRY)&_ZN7S2023C43v15Ev,
  (VTBL_ENTRY)&_ZN7S2023C43v16Ev,
  (VTBL_ENTRY)&_ZN7S2023C43v17Ev,
  (VTBL_ENTRY)&_ZN7S2023C43v18Ev,
  (VTBL_ENTRY)&_ZN7S2023C43v19Ev,
  (VTBL_ENTRY)&_ZN7S2023C43v20Ev,
};
extern VTBL_ENTRY _ZTI7S2023C4[];
extern  VTBL_ENTRY _ZTV7S2023C4[];
Class_Descriptor cd_S2023C4 = {  "S2023C4", // class name
  0,0,//no base classes
  &(vtc_S2023C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S2023C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S2023C4),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  S2023C3  : S2023C4 {
  virtual  ~S2023C3(); // _ZN7S2023C3D1Ev
  S2023C3(); // tgen
};
//SIG(-1 S2023C3) C1{ BC2{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9} vd}


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

static void Test_S2023C3()
{
  extern Class_Descriptor cd_S2023C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S2023C3, buf);
    S2023C3 *dp, &lv = *(dp=new (buf) S2023C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S2023C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2023C3)");
    check_base_class_offset(lv, (S2023C4*), 0, "S2023C3");
    test_class_info(&lv, &cd_S2023C3);
    dp->~S2023C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2023C3(Test_S2023C3, "S2023C3", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S2023C3C1Ev();
extern void _ZN7S2023C3D1Ev();
Name_Map name_map_S2023C3[] = {
  NSPAIR(_ZN7S2023C3C1Ev),
  NSPAIR(_ZN7S2023C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2023C4;
extern VTBL_ENTRY _ZTI7S2023C4[];
extern  VTBL_ENTRY _ZTV7S2023C4[];
static Base_Class bases_S2023C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2023C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI7S2023C3[];
extern void _ZN7S2023C3D1Ev();
extern void _ZN7S2023C3D0Ev();
extern void _ZN7S2023C43v12Ev();
extern void _ZN7S2023C43v13Ev();
extern void _ZN7S2023C43v14Ev();
extern void _ZN7S2023C43v15Ev();
extern void _ZN7S2023C43v16Ev();
extern void _ZN7S2023C43v17Ev();
extern void _ZN7S2023C43v18Ev();
extern void _ZN7S2023C43v19Ev();
extern void _ZN7S2023C43v20Ev();
static  VTBL_ENTRY vtc_S2023C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2023C3[0]),
  (VTBL_ENTRY)&_ZN7S2023C3D1Ev,
  (VTBL_ENTRY)&_ZN7S2023C3D0Ev,
  (VTBL_ENTRY)&_ZN7S2023C43v12Ev,
  (VTBL_ENTRY)&_ZN7S2023C43v13Ev,
  (VTBL_ENTRY)&_ZN7S2023C43v14Ev,
  (VTBL_ENTRY)&_ZN7S2023C43v15Ev,
  (VTBL_ENTRY)&_ZN7S2023C43v16Ev,
  (VTBL_ENTRY)&_ZN7S2023C43v17Ev,
  (VTBL_ENTRY)&_ZN7S2023C43v18Ev,
  (VTBL_ENTRY)&_ZN7S2023C43v19Ev,
  (VTBL_ENTRY)&_ZN7S2023C43v20Ev,
};
extern VTBL_ENTRY _ZTI7S2023C3[];
extern  VTBL_ENTRY _ZTV7S2023C3[];
Class_Descriptor cd_S2023C3 = {  "S2023C3", // class name
  bases_S2023C3, 1,
  &(vtc_S2023C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S2023C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2023C3),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  S2023C2  : S2023C3 {
  ::S9782C12 s2023c2f0;
  ::S9782C10 s2023c2f1;
  long s2023c2f2;
  virtual  ~S2023C2(); // _ZN7S2023C2D1Ev
  virtual void  v21(); // _ZN7S2023C23v21Ev
  virtual void  v22(); // _ZN7S2023C23v22Ev
  virtual void  v23(); // _ZN7S2023C23v23Ev
  virtual void  v24(); // _ZN7S2023C23v24Ev
  virtual void  v25(); // _ZN7S2023C23v25Ev
  S2023C2(); // tgen
};
//SIG(-1 S2023C2) C1{ BC2{ BC3{ vd v6 v7 v8 v9 v10 v11 v12 v13 v14} vd} vd v1 v2 v3 v4 v5 FC4{ m Fp Fc} FC5{ m FC6{ m FC4 Fp[2]} Fi} Fl}


 S2023C2 ::~S2023C2(){ note_dtor("S2023C2", this);}
void  S2023C2 ::v21(){vfunc_called(this, "_ZN7S2023C23v21Ev");}
void  S2023C2 ::v22(){vfunc_called(this, "_ZN7S2023C23v22Ev");}
void  S2023C2 ::v23(){vfunc_called(this, "_ZN7S2023C23v23Ev");}
void  S2023C2 ::v24(){vfunc_called(this, "_ZN7S2023C23v24Ev");}
void  S2023C2 ::v25(){vfunc_called(this, "_ZN7S2023C23v25Ev");}
S2023C2 ::S2023C2(){ note_ctor("S2023C2", this);} // tgen

static void Test_S2023C2()
{
  extern Class_Descriptor cd_S2023C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[10];
    init_test(&cd_S2023C2, buf);
    S2023C2 *dp, &lv = *(dp=new (buf) S2023C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,36), "sizeof(S2023C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2023C2)");
    check_base_class_offset(lv, (S2023C4*)(S2023C3*), 0, "S2023C2");
    check_base_class_offset(lv, (S2023C3*), 0, "S2023C2");
    check_field_offset(lv, s2023c2f0, ABISELECT(8,4), "S2023C2.s2023c2f0");
    check_field_offset(lv, s2023c2f1, ABISELECT(24,12), "S2023C2.s2023c2f1");
    check_field_offset(lv, s2023c2f2, ABISELECT(64,32), "S2023C2.s2023c2f2");
    test_class_info(&lv, &cd_S2023C2);
    dp->~S2023C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2023C2(Test_S2023C2, "S2023C2", ABISELECT(72,36));

#else // __cplusplus

extern void _ZN7S2023C2C1Ev();
extern void _ZN7S2023C2D1Ev();
Name_Map name_map_S2023C2[] = {
  NSPAIR(_ZN7S2023C2C1Ev),
  NSPAIR(_ZN7S2023C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2023C4;
extern VTBL_ENTRY _ZTI7S2023C4[];
extern  VTBL_ENTRY _ZTV7S2023C4[];
extern Class_Descriptor cd_S2023C3;
extern VTBL_ENTRY _ZTI7S2023C3[];
extern  VTBL_ENTRY _ZTV7S2023C3[];
static Base_Class bases_S2023C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2023C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S2023C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S2023C2[];
extern void _ZN7S2023C2D1Ev();
extern void _ZN7S2023C2D0Ev();
extern void _ZN7S2023C43v12Ev();
extern void _ZN7S2023C43v13Ev();
extern void _ZN7S2023C43v14Ev();
extern void _ZN7S2023C43v15Ev();
extern void _ZN7S2023C43v16Ev();
extern void _ZN7S2023C43v17Ev();
extern void _ZN7S2023C43v18Ev();
extern void _ZN7S2023C43v19Ev();
extern void _ZN7S2023C43v20Ev();
extern void _ZN7S2023C23v21Ev();
extern void _ZN7S2023C23v22Ev();
extern void _ZN7S2023C23v23Ev();
extern void _ZN7S2023C23v24Ev();
extern void _ZN7S2023C23v25Ev();
static  VTBL_ENTRY vtc_S2023C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2023C2[0]),
  (VTBL_ENTRY)&_ZN7S2023C2D1Ev,
  (VTBL_ENTRY)&_ZN7S2023C2D0Ev,
  (VTBL_ENTRY)&_ZN7S2023C43v12Ev,
  (VTBL_ENTRY)&_ZN7S2023C43v13Ev,
  (VTBL_ENTRY)&_ZN7S2023C43v14Ev,
  (VTBL_ENTRY)&_ZN7S2023C43v15Ev,
  (VTBL_ENTRY)&_ZN7S2023C43v16Ev,
  (VTBL_ENTRY)&_ZN7S2023C43v17Ev,
  (VTBL_ENTRY)&_ZN7S2023C43v18Ev,
  (VTBL_ENTRY)&_ZN7S2023C43v19Ev,
  (VTBL_ENTRY)&_ZN7S2023C43v20Ev,
  (VTBL_ENTRY)&_ZN7S2023C23v21Ev,
  (VTBL_ENTRY)&_ZN7S2023C23v22Ev,
  (VTBL_ENTRY)&_ZN7S2023C23v23Ev,
  (VTBL_ENTRY)&_ZN7S2023C23v24Ev,
  (VTBL_ENTRY)&_ZN7S2023C23v25Ev,
};
extern VTBL_ENTRY _ZTI7S2023C2[];
extern  VTBL_ENTRY _ZTV7S2023C2[];
Class_Descriptor cd_S2023C2 = {  "S2023C2", // class name
  bases_S2023C2, 2,
  &(vtc_S2023C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,36), // object size
  NSPAIRA(_ZTI7S2023C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2023C2),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  S2023C1  : S2023C2 {
  virtual  ~S2023C1(); // _ZN7S2023C1D1Ev
  virtual void  v1(); // _ZN7S2023C12v1Ev
  virtual void  v2(); // _ZN7S2023C12v2Ev
  virtual void  v3(); // _ZN7S2023C12v3Ev
  virtual void  v4(); // _ZN7S2023C12v4Ev
  virtual void  v5(); // _ZN7S2023C12v5Ev
  virtual void  v6(); // _ZN7S2023C12v6Ev
  virtual void  v7(); // _ZN7S2023C12v7Ev
  virtual void  v8(); // _ZN7S2023C12v8Ev
  virtual void  v9(); // _ZN7S2023C12v9Ev
  virtual void  v10(); // _ZN7S2023C13v10Ev
  virtual void  v11(); // _ZN7S2023C13v11Ev
  S2023C1(); // tgen
};
//SIG(1 S2023C1) C1{ BC2{ BC3{ BC4{ vd v12 v13 v14 v15 v16 v17 v18 v19 v20} vd} vd v21 v22 v23 v24 v25 FC5{ m Fp Fc} FC6{ m FC7{ m FC5 Fp[2]} Fi} Fl} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11}


 S2023C1 ::~S2023C1(){ note_dtor("S2023C1", this);}
void  S2023C1 ::v1(){vfunc_called(this, "_ZN7S2023C12v1Ev");}
void  S2023C1 ::v2(){vfunc_called(this, "_ZN7S2023C12v2Ev");}
void  S2023C1 ::v3(){vfunc_called(this, "_ZN7S2023C12v3Ev");}
void  S2023C1 ::v4(){vfunc_called(this, "_ZN7S2023C12v4Ev");}
void  S2023C1 ::v5(){vfunc_called(this, "_ZN7S2023C12v5Ev");}
void  S2023C1 ::v6(){vfunc_called(this, "_ZN7S2023C12v6Ev");}
void  S2023C1 ::v7(){vfunc_called(this, "_ZN7S2023C12v7Ev");}
void  S2023C1 ::v8(){vfunc_called(this, "_ZN7S2023C12v8Ev");}
void  S2023C1 ::v9(){vfunc_called(this, "_ZN7S2023C12v9Ev");}
void  S2023C1 ::v10(){vfunc_called(this, "_ZN7S2023C13v10Ev");}
void  S2023C1 ::v11(){vfunc_called(this, "_ZN7S2023C13v11Ev");}
S2023C1 ::S2023C1(){ note_ctor("S2023C1", this);} // tgen

static void Test_S2023C1()
{
  extern Class_Descriptor cd_S2023C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[10];
    init_test(&cd_S2023C1, buf);
    S2023C1 *dp, &lv = *(dp=new (buf) S2023C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,36), "sizeof(S2023C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2023C1)");
    check_base_class_offset(lv, (S2023C4*)(S2023C3*)(S2023C2*), 0, "S2023C1");
    check_base_class_offset(lv, (S2023C3*)(S2023C2*), 0, "S2023C1");
    check_base_class_offset(lv, (S2023C2*), 0, "S2023C1");
    test_class_info(&lv, &cd_S2023C1);
    dp->~S2023C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2023C1(Test_S2023C1, "S2023C1", ABISELECT(72,36));

#else // __cplusplus

extern void _ZN7S2023C1C1Ev();
extern void _ZN7S2023C1D1Ev();
Name_Map name_map_S2023C1[] = {
  NSPAIR(_ZN7S2023C1C1Ev),
  NSPAIR(_ZN7S2023C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2023C4;
extern VTBL_ENTRY _ZTI7S2023C4[];
extern  VTBL_ENTRY _ZTV7S2023C4[];
extern Class_Descriptor cd_S2023C3;
extern VTBL_ENTRY _ZTI7S2023C3[];
extern  VTBL_ENTRY _ZTV7S2023C3[];
extern Class_Descriptor cd_S2023C2;
extern VTBL_ENTRY _ZTI7S2023C2[];
extern  VTBL_ENTRY _ZTV7S2023C2[];
static Base_Class bases_S2023C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2023C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S2023C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S2023C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S2023C1[];
extern void _ZN7S2023C1D1Ev();
extern void _ZN7S2023C1D0Ev();
extern void _ZN7S2023C43v12Ev();
extern void _ZN7S2023C43v13Ev();
extern void _ZN7S2023C43v14Ev();
extern void _ZN7S2023C43v15Ev();
extern void _ZN7S2023C43v16Ev();
extern void _ZN7S2023C43v17Ev();
extern void _ZN7S2023C43v18Ev();
extern void _ZN7S2023C43v19Ev();
extern void _ZN7S2023C43v20Ev();
extern void _ZN7S2023C23v21Ev();
extern void _ZN7S2023C23v22Ev();
extern void _ZN7S2023C23v23Ev();
extern void _ZN7S2023C23v24Ev();
extern void _ZN7S2023C23v25Ev();
extern void _ZN7S2023C12v1Ev();
extern void _ZN7S2023C12v2Ev();
extern void _ZN7S2023C12v3Ev();
extern void _ZN7S2023C12v4Ev();
extern void _ZN7S2023C12v5Ev();
extern void _ZN7S2023C12v6Ev();
extern void _ZN7S2023C12v7Ev();
extern void _ZN7S2023C12v8Ev();
extern void _ZN7S2023C12v9Ev();
extern void _ZN7S2023C13v10Ev();
extern void _ZN7S2023C13v11Ev();
static  VTBL_ENTRY vtc_S2023C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2023C1[0]),
  (VTBL_ENTRY)&_ZN7S2023C1D1Ev,
  (VTBL_ENTRY)&_ZN7S2023C1D0Ev,
  (VTBL_ENTRY)&_ZN7S2023C43v12Ev,
  (VTBL_ENTRY)&_ZN7S2023C43v13Ev,
  (VTBL_ENTRY)&_ZN7S2023C43v14Ev,
  (VTBL_ENTRY)&_ZN7S2023C43v15Ev,
  (VTBL_ENTRY)&_ZN7S2023C43v16Ev,
  (VTBL_ENTRY)&_ZN7S2023C43v17Ev,
  (VTBL_ENTRY)&_ZN7S2023C43v18Ev,
  (VTBL_ENTRY)&_ZN7S2023C43v19Ev,
  (VTBL_ENTRY)&_ZN7S2023C43v20Ev,
  (VTBL_ENTRY)&_ZN7S2023C23v21Ev,
  (VTBL_ENTRY)&_ZN7S2023C23v22Ev,
  (VTBL_ENTRY)&_ZN7S2023C23v23Ev,
  (VTBL_ENTRY)&_ZN7S2023C23v24Ev,
  (VTBL_ENTRY)&_ZN7S2023C23v25Ev,
  (VTBL_ENTRY)&_ZN7S2023C12v1Ev,
  (VTBL_ENTRY)&_ZN7S2023C12v2Ev,
  (VTBL_ENTRY)&_ZN7S2023C12v3Ev,
  (VTBL_ENTRY)&_ZN7S2023C12v4Ev,
  (VTBL_ENTRY)&_ZN7S2023C12v5Ev,
  (VTBL_ENTRY)&_ZN7S2023C12v6Ev,
  (VTBL_ENTRY)&_ZN7S2023C12v7Ev,
  (VTBL_ENTRY)&_ZN7S2023C12v8Ev,
  (VTBL_ENTRY)&_ZN7S2023C12v9Ev,
  (VTBL_ENTRY)&_ZN7S2023C13v10Ev,
  (VTBL_ENTRY)&_ZN7S2023C13v11Ev,
};
extern VTBL_ENTRY _ZTI7S2023C1[];
extern  VTBL_ENTRY _ZTV7S2023C1[];
Class_Descriptor cd_S2023C1 = {  "S2023C1", // class name
  bases_S2023C1, 3,
  &(vtc_S2023C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,36), // object size
  NSPAIRA(_ZTI7S2023C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2023C1),29, //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  S5291C3  {
  virtual  ~S5291C3(); // _ZN7S5291C3D1Ev
  virtual void  v5(); // _ZN7S5291C32v5Ev
  S5291C3(); // tgen
};
//SIG(-1 S5291C3) C1{ vd v1}


 S5291C3 ::~S5291C3(){ note_dtor("S5291C3", this);}
void  S5291C3 ::v5(){vfunc_called(this, "_ZN7S5291C32v5Ev");}
S5291C3 ::S5291C3(){ note_ctor("S5291C3", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S5291C3C1Ev();
extern void _ZN7S5291C3D1Ev();
Name_Map name_map_S5291C3[] = {
  NSPAIR(_ZN7S5291C3C1Ev),
  NSPAIR(_ZN7S5291C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S5291C3[];
extern void _ZN7S5291C3D1Ev();
extern void _ZN7S5291C3D0Ev();
extern void _ZN7S5291C32v5Ev();
static  VTBL_ENTRY vtc_S5291C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5291C3[0]),
  (VTBL_ENTRY)&_ZN7S5291C3D1Ev,
  (VTBL_ENTRY)&_ZN7S5291C3D0Ev,
  (VTBL_ENTRY)&_ZN7S5291C32v5Ev,
};
extern VTBL_ENTRY _ZTI7S5291C3[];
extern  VTBL_ENTRY _ZTV7S5291C3[];
Class_Descriptor cd_S5291C3 = {  "S5291C3", // class name
  0,0,//no base classes
  &(vtc_S5291C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S5291C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S5291C3),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  S5291C2  : S5291C3 {
  ::S3625C18_nt s5291c2f0;
  ::S21579C7_nt s5291c2f1;
  char s5291c2f2[4];
  ::S3625C18_nt s5291c2f3;
  ::S3625C18_nt s5291c2f4;
  ::S3625C18_nt s5291c2f5;
  ::S3625C18_nt s5291c2f6;
  ::S21579C10 s5291c2f7;
  int s5291c2f8[3];
  void *s5291c2f9;
  virtual  ~S5291C2(); // _ZN7S5291C2D1Ev
  virtual void  v6(); // _ZN7S5291C22v6Ev
  virtual void  v7(); // _ZN7S5291C22v7Ev
  virtual void  v8(); // _ZN7S5291C22v8Ev
  virtual void  v9(); // _ZN7S5291C22v9Ev
  virtual void  v10(); // _ZN7S5291C23v10Ev
  S5291C2(); // tgen
};
//SIG(-1 S5291C2) C1{ BC2{ vd v6} vd v1 v2 v3 v4 v5 FC3{ m Fp Fi FC4{ m}} FC5{ m Fp[2]} Fc[4] FC3 FC3 FC3 FC3 FC6{ m Fp Fi[2] Fp[2]} Fi[3] Fp}


 S5291C2 ::~S5291C2(){ note_dtor("S5291C2", this);}
void  S5291C2 ::v6(){vfunc_called(this, "_ZN7S5291C22v6Ev");}
void  S5291C2 ::v7(){vfunc_called(this, "_ZN7S5291C22v7Ev");}
void  S5291C2 ::v8(){vfunc_called(this, "_ZN7S5291C22v8Ev");}
void  S5291C2 ::v9(){vfunc_called(this, "_ZN7S5291C22v9Ev");}
void  S5291C2 ::v10(){vfunc_called(this, "_ZN7S5291C23v10Ev");}
S5291C2 ::S5291C2(){ note_ctor("S5291C2", this);} // tgen

static void Test_S5291C2()
{
  extern Class_Descriptor cd_S5291C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(22,29)];
    init_test(&cd_S5291C2, buf);
    S5291C2 *dp, &lv = *(dp=new (buf) S5291C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(168,112), "sizeof(S5291C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5291C2)");
    check_base_class_offset(lv, (S5291C3*), 0, "S5291C2");
    check_field_offset(lv, s5291c2f0, ABISELECT(8,4), "S5291C2.s5291c2f0");
    check_field_offset(lv, s5291c2f1, ABISELECT(24,16), "S5291C2.s5291c2f1");
    check_field_offset(lv, s5291c2f2, ABISELECT(40,24), "S5291C2.s5291c2f2");
    check_field_offset(lv, s5291c2f3, ABISELECT(48,28), "S5291C2.s5291c2f3");
    check_field_offset(lv, s5291c2f4, ABISELECT(64,40), "S5291C2.s5291c2f4");
    check_field_offset(lv, s5291c2f5, ABISELECT(80,52), "S5291C2.s5291c2f5");
    check_field_offset(lv, s5291c2f6, ABISELECT(96,64), "S5291C2.s5291c2f6");
    check_field_offset(lv, s5291c2f7, ABISELECT(112,76), "S5291C2.s5291c2f7");
    check_field_offset(lv, s5291c2f8, ABISELECT(144,96), "S5291C2.s5291c2f8");
    check_field_offset(lv, s5291c2f9, ABISELECT(160,108), "S5291C2.s5291c2f9");
    test_class_info(&lv, &cd_S5291C2);
    dp->~S5291C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5291C2(Test_S5291C2, "S5291C2", ABISELECT(168,112));

#else // __cplusplus

extern void _ZN7S5291C2C1Ev();
extern void _ZN7S5291C2D1Ev();
Name_Map name_map_S5291C2[] = {
  NSPAIR(_ZN7S5291C2C1Ev),
  NSPAIR(_ZN7S5291C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5291C3;
extern VTBL_ENTRY _ZTI7S5291C3[];
extern  VTBL_ENTRY _ZTV7S5291C3[];
static Base_Class bases_S5291C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5291C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI7S5291C2[];
extern void _ZN7S5291C2D1Ev();
extern void _ZN7S5291C2D0Ev();
extern void _ZN7S5291C32v5Ev();
extern void _ZN7S5291C22v6Ev();
extern void _ZN7S5291C22v7Ev();
extern void _ZN7S5291C22v8Ev();
extern void _ZN7S5291C22v9Ev();
extern void _ZN7S5291C23v10Ev();
static  VTBL_ENTRY vtc_S5291C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5291C2[0]),
  (VTBL_ENTRY)&_ZN7S5291C2D1Ev,
  (VTBL_ENTRY)&_ZN7S5291C2D0Ev,
  (VTBL_ENTRY)&_ZN7S5291C32v5Ev,
  (VTBL_ENTRY)&_ZN7S5291C22v6Ev,
  (VTBL_ENTRY)&_ZN7S5291C22v7Ev,
  (VTBL_ENTRY)&_ZN7S5291C22v8Ev,
  (VTBL_ENTRY)&_ZN7S5291C22v9Ev,
  (VTBL_ENTRY)&_ZN7S5291C23v10Ev,
};
extern VTBL_ENTRY _ZTI7S5291C2[];
extern  VTBL_ENTRY _ZTV7S5291C2[];
Class_Descriptor cd_S5291C2 = {  "S5291C2", // class name
  bases_S5291C2, 1,
  &(vtc_S5291C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(168,112), // object size
  NSPAIRA(_ZTI7S5291C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S5291C2),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  S5291C1  : S5291C2 {
  ::S5399C7 s5291c1f0;
  ::S3625C18_nt s5291c1f1;
  char s5291c1f2;
  virtual  ~S5291C1(); // _ZN7S5291C1D1Ev
  virtual void  v1(); // _ZN7S5291C12v1Ev
  virtual void  v2(); // _ZN7S5291C12v2Ev
  virtual void  v3(); // _ZN7S5291C12v3Ev
  virtual void  v4(); // _ZN7S5291C12v4Ev
  S5291C1(); // tgen
};
//SIG(1 S5291C1) C1{ BC2{ BC3{ vd v5} vd v6 v7 v8 v9 v10 FC4{ m Fp Fi FC5{ m}} FC6{ m Fp[2]} Fc[4] FC4 FC4 FC4 FC4 FC7{ m Fp Fi[2] Fp[2]} Fi[3] Fp} vd v1 v2 v3 v4 FC8{ vd m Fp FC4 FC4 Fp} FC4 Fc}


 S5291C1 ::~S5291C1(){ note_dtor("S5291C1", this);}
void  S5291C1 ::v1(){vfunc_called(this, "_ZN7S5291C12v1Ev");}
void  S5291C1 ::v2(){vfunc_called(this, "_ZN7S5291C12v2Ev");}
void  S5291C1 ::v3(){vfunc_called(this, "_ZN7S5291C12v3Ev");}
void  S5291C1 ::v4(){vfunc_called(this, "_ZN7S5291C12v4Ev");}
S5291C1 ::S5291C1(){ note_ctor("S5291C1", this);} // tgen

static void Test_S5291C1()
{
  extern Class_Descriptor cd_S5291C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(32,42)];
    init_test(&cd_S5291C1, buf);
    S5291C1 *dp, &lv = *(dp=new (buf) S5291C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(248,164), "sizeof(S5291C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5291C1)");
    check_base_class_offset(lv, (S5291C3*)(S5291C2*), 0, "S5291C1");
    check_base_class_offset(lv, (S5291C2*), 0, "S5291C1");
    check_field_offset(lv, s5291c1f0, ABISELECT(168,112), "S5291C1.s5291c1f0");
    check_field_offset(lv, s5291c1f1, ABISELECT(224,148), "S5291C1.s5291c1f1");
    check_field_offset(lv, s5291c1f2, ABISELECT(240,160), "S5291C1.s5291c1f2");
    test_class_info(&lv, &cd_S5291C1);
    dp->~S5291C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5291C1(Test_S5291C1, "S5291C1", ABISELECT(248,164));

#else // __cplusplus

extern void _ZN7S5291C1C1Ev();
extern void _ZN7S5291C1D1Ev();
Name_Map name_map_S5291C1[] = {
  NSPAIR(_ZN7S5291C1C1Ev),
  NSPAIR(_ZN7S5291C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5291C3;
extern VTBL_ENTRY _ZTI7S5291C3[];
extern  VTBL_ENTRY _ZTV7S5291C3[];
extern Class_Descriptor cd_S5291C2;
extern VTBL_ENTRY _ZTI7S5291C2[];
extern  VTBL_ENTRY _ZTV7S5291C2[];
static Base_Class bases_S5291C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5291C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S5291C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S5291C1[];
extern void _ZN7S5291C1D1Ev();
extern void _ZN7S5291C1D0Ev();
extern void _ZN7S5291C32v5Ev();
extern void _ZN7S5291C22v6Ev();
extern void _ZN7S5291C22v7Ev();
extern void _ZN7S5291C22v8Ev();
extern void _ZN7S5291C22v9Ev();
extern void _ZN7S5291C23v10Ev();
extern void _ZN7S5291C12v1Ev();
extern void _ZN7S5291C12v2Ev();
extern void _ZN7S5291C12v3Ev();
extern void _ZN7S5291C12v4Ev();
static  VTBL_ENTRY vtc_S5291C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5291C1[0]),
  (VTBL_ENTRY)&_ZN7S5291C1D1Ev,
  (VTBL_ENTRY)&_ZN7S5291C1D0Ev,
  (VTBL_ENTRY)&_ZN7S5291C32v5Ev,
  (VTBL_ENTRY)&_ZN7S5291C22v6Ev,
  (VTBL_ENTRY)&_ZN7S5291C22v7Ev,
  (VTBL_ENTRY)&_ZN7S5291C22v8Ev,
  (VTBL_ENTRY)&_ZN7S5291C22v9Ev,
  (VTBL_ENTRY)&_ZN7S5291C23v10Ev,
  (VTBL_ENTRY)&_ZN7S5291C12v1Ev,
  (VTBL_ENTRY)&_ZN7S5291C12v2Ev,
  (VTBL_ENTRY)&_ZN7S5291C12v3Ev,
  (VTBL_ENTRY)&_ZN7S5291C12v4Ev,
};
extern VTBL_ENTRY _ZTI7S5291C1[];
extern  VTBL_ENTRY _ZTV7S5291C1[];
Class_Descriptor cd_S5291C1 = {  "S5291C1", // class name
  bases_S5291C1, 2,
  &(vtc_S5291C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(248,164), // object size
  NSPAIRA(_ZTI7S5291C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S5291C1),14, //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  S5398C3  {
  virtual  ~S5398C3(); // _ZN7S5398C3D1Ev
  virtual void  v7(); // _ZN7S5398C32v7Ev
  S5398C3(); // tgen
};
//SIG(-1 S5398C3) C1{ vd v1}


 S5398C3 ::~S5398C3(){ note_dtor("S5398C3", this);}
void  S5398C3 ::v7(){vfunc_called(this, "_ZN7S5398C32v7Ev");}
S5398C3 ::S5398C3(){ note_ctor("S5398C3", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S5398C3C1Ev();
extern void _ZN7S5398C3D1Ev();
Name_Map name_map_S5398C3[] = {
  NSPAIR(_ZN7S5398C3C1Ev),
  NSPAIR(_ZN7S5398C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S5398C3[];
extern void _ZN7S5398C3D1Ev();
extern void _ZN7S5398C3D0Ev();
extern void _ZN7S5398C32v7Ev();
static  VTBL_ENTRY vtc_S5398C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5398C3[0]),
  (VTBL_ENTRY)&_ZN7S5398C3D1Ev,
  (VTBL_ENTRY)&_ZN7S5398C3D0Ev,
  (VTBL_ENTRY)&_ZN7S5398C32v7Ev,
};
extern VTBL_ENTRY _ZTI7S5398C3[];
extern  VTBL_ENTRY _ZTV7S5398C3[];
Class_Descriptor cd_S5398C3 = {  "S5398C3", // class name
  0,0,//no base classes
  &(vtc_S5398C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S5398C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S5398C3),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  S5398C2  : S5398C3 {
  void *s5398c2f0[4];
  ::S21579C10 s5398c2f1;
  int s5398c2f2[5];
  char s5398c2f3[3];
  ::S3625C18_nt s5398c2f4;
  ::S3625C18_nt s5398c2f5;
  ::S3625C18_nt s5398c2f6;
  ::S3625C18_nt s5398c2f7;
  void *s5398c2f8;
  virtual  ~S5398C2(); // _ZN7S5398C2D1Ev
  virtual void  v8(); // _ZN7S5398C22v8Ev
  virtual void  v9(); // _ZN7S5398C22v9Ev
  virtual void  v10(); // _ZN7S5398C23v10Ev
  virtual void  v11(); // _ZN7S5398C23v11Ev
  virtual void  v12(); // _ZN7S5398C23v12Ev
  virtual void  v13(); // _ZN7S5398C23v13Ev
  virtual void  v14(); // _ZN7S5398C23v14Ev
  virtual void  v15(); // _ZN7S5398C23v15Ev
  S5398C2(); // tgen
};
//SIG(-1 S5398C2) C1{ BC2{ vd v9} vd v1 v2 v3 v4 v5 v6 v7 v8 Fp[4] FC3{ m Fp Fi[2] Fp[2]} Fi[5] Fc[3] FC4{ m Fp Fi FC5{ m}} FC4 FC4 FC4 Fp}


 S5398C2 ::~S5398C2(){ note_dtor("S5398C2", this);}
void  S5398C2 ::v8(){vfunc_called(this, "_ZN7S5398C22v8Ev");}
void  S5398C2 ::v9(){vfunc_called(this, "_ZN7S5398C22v9Ev");}
void  S5398C2 ::v10(){vfunc_called(this, "_ZN7S5398C23v10Ev");}
void  S5398C2 ::v11(){vfunc_called(this, "_ZN7S5398C23v11Ev");}
void  S5398C2 ::v12(){vfunc_called(this, "_ZN7S5398C23v12Ev");}
void  S5398C2 ::v13(){vfunc_called(this, "_ZN7S5398C23v13Ev");}
void  S5398C2 ::v14(){vfunc_called(this, "_ZN7S5398C23v14Ev");}
void  S5398C2 ::v15(){vfunc_called(this, "_ZN7S5398C23v15Ev");}
S5398C2 ::S5398C2(){ note_ctor("S5398C2", this);} // tgen

static void Test_S5398C2()
{
  extern Class_Descriptor cd_S5398C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(22,30)];
    init_test(&cd_S5398C2, buf);
    S5398C2 *dp, &lv = *(dp=new (buf) S5398C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(168,116), "sizeof(S5398C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5398C2)");
    check_base_class_offset(lv, (S5398C3*), 0, "S5398C2");
    check_field_offset(lv, s5398c2f0, ABISELECT(8,4), "S5398C2.s5398c2f0");
    check_field_offset(lv, s5398c2f1, ABISELECT(40,20), "S5398C2.s5398c2f1");
    check_field_offset(lv, s5398c2f2, ABISELECT(72,40), "S5398C2.s5398c2f2");
    check_field_offset(lv, s5398c2f3, ABISELECT(92,60), "S5398C2.s5398c2f3");
    check_field_offset(lv, s5398c2f4, ABISELECT(96,64), "S5398C2.s5398c2f4");
    check_field_offset(lv, s5398c2f5, ABISELECT(112,76), "S5398C2.s5398c2f5");
    check_field_offset(lv, s5398c2f6, ABISELECT(128,88), "S5398C2.s5398c2f6");
    check_field_offset(lv, s5398c2f7, ABISELECT(144,100), "S5398C2.s5398c2f7");
    check_field_offset(lv, s5398c2f8, ABISELECT(160,112), "S5398C2.s5398c2f8");
    test_class_info(&lv, &cd_S5398C2);
    dp->~S5398C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5398C2(Test_S5398C2, "S5398C2", ABISELECT(168,116));

#else // __cplusplus

extern void _ZN7S5398C2C1Ev();
extern void _ZN7S5398C2D1Ev();
Name_Map name_map_S5398C2[] = {
  NSPAIR(_ZN7S5398C2C1Ev),
  NSPAIR(_ZN7S5398C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5398C3;
extern VTBL_ENTRY _ZTI7S5398C3[];
extern  VTBL_ENTRY _ZTV7S5398C3[];
static Base_Class bases_S5398C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5398C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI7S5398C2[];
extern void _ZN7S5398C2D1Ev();
extern void _ZN7S5398C2D0Ev();
extern void _ZN7S5398C32v7Ev();
extern void _ZN7S5398C22v8Ev();
extern void _ZN7S5398C22v9Ev();
extern void _ZN7S5398C23v10Ev();
extern void _ZN7S5398C23v11Ev();
extern void _ZN7S5398C23v12Ev();
extern void _ZN7S5398C23v13Ev();
extern void _ZN7S5398C23v14Ev();
extern void _ZN7S5398C23v15Ev();
static  VTBL_ENTRY vtc_S5398C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5398C2[0]),
  (VTBL_ENTRY)&_ZN7S5398C2D1Ev,
  (VTBL_ENTRY)&_ZN7S5398C2D0Ev,
  (VTBL_ENTRY)&_ZN7S5398C32v7Ev,
  (VTBL_ENTRY)&_ZN7S5398C22v8Ev,
  (VTBL_ENTRY)&_ZN7S5398C22v9Ev,
  (VTBL_ENTRY)&_ZN7S5398C23v10Ev,
  (VTBL_ENTRY)&_ZN7S5398C23v11Ev,
  (VTBL_ENTRY)&_ZN7S5398C23v12Ev,
  (VTBL_ENTRY)&_ZN7S5398C23v13Ev,
  (VTBL_ENTRY)&_ZN7S5398C23v14Ev,
  (VTBL_ENTRY)&_ZN7S5398C23v15Ev,
};
extern VTBL_ENTRY _ZTI7S5398C2[];
extern  VTBL_ENTRY _ZTV7S5398C2[];
Class_Descriptor cd_S5398C2 = {  "S5398C2", // class name
  bases_S5398C2, 1,
  &(vtc_S5398C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(168,116), // object size
  NSPAIRA(_ZTI7S5398C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S5398C2),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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S5398C1  : S5398C2 {
  ::S21579C7_nt s5398c1f0;
  ::S3625C18_nt s5398c1f1;
  ::S3625C18_nt s5398c1f2;
  virtual  ~S5398C1(); // _ZN7S5398C1D1Ev
  virtual void  v1(); // _ZN7S5398C12v1Ev
  virtual void  v2(); // _ZN7S5398C12v2Ev
  virtual void  v3(); // _ZN7S5398C12v3Ev
  virtual void  v4(); // _ZN7S5398C12v4Ev
  virtual void  v5(); // _ZN7S5398C12v5Ev
  virtual void  v6(); // _ZN7S5398C12v6Ev
  S5398C1(); // tgen
};
//SIG(1 S5398C1) C1{ BC2{ BC3{ vd v7} vd v8 v9 v10 v11 v12 v13 v14 v15 Fp[4] FC4{ m Fp Fi[2] Fp[2]} Fi[5] Fc[3] FC5{ m Fp Fi FC6{ m}} FC5 FC5 FC5 Fp} vd v1 v2 v3 v4 v5 v6 FC7{ m Fp[2]} FC5 FC5}


 S5398C1 ::~S5398C1(){ note_dtor("S5398C1", this);}
void  S5398C1 ::v1(){vfunc_called(this, "_ZN7S5398C12v1Ev");}
void  S5398C1 ::v2(){vfunc_called(this, "_ZN7S5398C12v2Ev");}
void  S5398C1 ::v3(){vfunc_called(this, "_ZN7S5398C12v3Ev");}
void  S5398C1 ::v4(){vfunc_called(this, "_ZN7S5398C12v4Ev");}
void  S5398C1 ::v5(){vfunc_called(this, "_ZN7S5398C12v5Ev");}
void  S5398C1 ::v6(){vfunc_called(this, "_ZN7S5398C12v6Ev");}
S5398C1 ::S5398C1(){ note_ctor("S5398C1", this);} // tgen

static void Test_S5398C1()
{
  extern Class_Descriptor cd_S5398C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(28,38)];
    init_test(&cd_S5398C1, buf);
    S5398C1 *dp, &lv = *(dp=new (buf) S5398C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(216,148), "sizeof(S5398C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5398C1)");
    check_base_class_offset(lv, (S5398C3*)(S5398C2*), 0, "S5398C1");
    check_base_class_offset(lv, (S5398C2*), 0, "S5398C1");
    check_field_offset(lv, s5398c1f0, ABISELECT(168,116), "S5398C1.s5398c1f0");
    check_field_offset(lv, s5398c1f1, ABISELECT(184,124), "S5398C1.s5398c1f1");
    check_field_offset(lv, s5398c1f2, ABISELECT(200,136), "S5398C1.s5398c1f2");
    test_class_info(&lv, &cd_S5398C1);
    dp->~S5398C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5398C1(Test_S5398C1, "S5398C1", ABISELECT(216,148));

#else // __cplusplus

extern void _ZN7S5398C1C1Ev();
extern void _ZN7S5398C1D1Ev();
Name_Map name_map_S5398C1[] = {
  NSPAIR(_ZN7S5398C1C1Ev),
  NSPAIR(_ZN7S5398C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5398C3;
extern VTBL_ENTRY _ZTI7S5398C3[];
extern  VTBL_ENTRY _ZTV7S5398C3[];
extern Class_Descriptor cd_S5398C2;
extern VTBL_ENTRY _ZTI7S5398C2[];
extern  VTBL_ENTRY _ZTV7S5398C2[];
static Base_Class bases_S5398C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5398C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S5398C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S5398C1[];
extern void _ZN7S5398C1D1Ev();
extern void _ZN7S5398C1D0Ev();
extern void _ZN7S5398C32v7Ev();
extern void _ZN7S5398C22v8Ev();
extern void _ZN7S5398C22v9Ev();
extern void _ZN7S5398C23v10Ev();
extern void _ZN7S5398C23v11Ev();
extern void _ZN7S5398C23v12Ev();
extern void _ZN7S5398C23v13Ev();
extern void _ZN7S5398C23v14Ev();
extern void _ZN7S5398C23v15Ev();
extern void _ZN7S5398C12v1Ev();
extern void _ZN7S5398C12v2Ev();
extern void _ZN7S5398C12v3Ev();
extern void _ZN7S5398C12v4Ev();
extern void _ZN7S5398C12v5Ev();
extern void _ZN7S5398C12v6Ev();
static  VTBL_ENTRY vtc_S5398C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5398C1[0]),
  (VTBL_ENTRY)&_ZN7S5398C1D1Ev,
  (VTBL_ENTRY)&_ZN7S5398C1D0Ev,
  (VTBL_ENTRY)&_ZN7S5398C32v7Ev,
  (VTBL_ENTRY)&_ZN7S5398C22v8Ev,
  (VTBL_ENTRY)&_ZN7S5398C22v9Ev,
  (VTBL_ENTRY)&_ZN7S5398C23v10Ev,
  (VTBL_ENTRY)&_ZN7S5398C23v11Ev,
  (VTBL_ENTRY)&_ZN7S5398C23v12Ev,
  (VTBL_ENTRY)&_ZN7S5398C23v13Ev,
  (VTBL_ENTRY)&_ZN7S5398C23v14Ev,
  (VTBL_ENTRY)&_ZN7S5398C23v15Ev,
  (VTBL_ENTRY)&_ZN7S5398C12v1Ev,
  (VTBL_ENTRY)&_ZN7S5398C12v2Ev,
  (VTBL_ENTRY)&_ZN7S5398C12v3Ev,
  (VTBL_ENTRY)&_ZN7S5398C12v4Ev,
  (VTBL_ENTRY)&_ZN7S5398C12v5Ev,
  (VTBL_ENTRY)&_ZN7S5398C12v6Ev,
};
extern VTBL_ENTRY _ZTI7S5398C1[];
extern  VTBL_ENTRY _ZTV7S5398C1[];
Class_Descriptor cd_S5398C1 = {  "S5398C1", // class name
  bases_S5398C1, 2,
  &(vtc_S5398C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(216,148), // object size
  NSPAIRA(_ZTI7S5398C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S5398C1),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  S2015C4  {
  virtual  ~S2015C4(); // _ZN7S2015C4D1Ev
  virtual void  v11(); // _ZN7S2015C43v11Ev
  virtual void  v12(); // _ZN7S2015C43v12Ev
  virtual void  v13(); // _ZN7S2015C43v13Ev
  virtual void  v14(); // _ZN7S2015C43v14Ev
  virtual void  v15(); // _ZN7S2015C43v15Ev
  virtual void  v16(); // _ZN7S2015C43v16Ev
  virtual void  v17(); // _ZN7S2015C43v17Ev
  virtual void  v18(); // _ZN7S2015C43v18Ev
  virtual void  v19(); // _ZN7S2015C43v19Ev
  S2015C4(); // tgen
};
//SIG(-1 S2015C4) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9}


 S2015C4 ::~S2015C4(){ note_dtor("S2015C4", this);}
void  S2015C4 ::v11(){vfunc_called(this, "_ZN7S2015C43v11Ev");}
void  S2015C4 ::v12(){vfunc_called(this, "_ZN7S2015C43v12Ev");}
void  S2015C4 ::v13(){vfunc_called(this, "_ZN7S2015C43v13Ev");}
void  S2015C4 ::v14(){vfunc_called(this, "_ZN7S2015C43v14Ev");}
void  S2015C4 ::v15(){vfunc_called(this, "_ZN7S2015C43v15Ev");}
void  S2015C4 ::v16(){vfunc_called(this, "_ZN7S2015C43v16Ev");}
void  S2015C4 ::v17(){vfunc_called(this, "_ZN7S2015C43v17Ev");}
void  S2015C4 ::v18(){vfunc_called(this, "_ZN7S2015C43v18Ev");}
void  S2015C4 ::v19(){vfunc_called(this, "_ZN7S2015C43v19Ev");}
S2015C4 ::S2015C4(){ note_ctor("S2015C4", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S2015C4C1Ev();
extern void _ZN7S2015C4D1Ev();
Name_Map name_map_S2015C4[] = {
  NSPAIR(_ZN7S2015C4C1Ev),
  NSPAIR(_ZN7S2015C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S2015C4[];
extern void _ZN7S2015C4D1Ev();
extern void _ZN7S2015C4D0Ev();
extern void _ZN7S2015C43v11Ev();
extern void _ZN7S2015C43v12Ev();
extern void _ZN7S2015C43v13Ev();
extern void _ZN7S2015C43v14Ev();
extern void _ZN7S2015C43v15Ev();
extern void _ZN7S2015C43v16Ev();
extern void _ZN7S2015C43v17Ev();
extern void _ZN7S2015C43v18Ev();
extern void _ZN7S2015C43v19Ev();
static  VTBL_ENTRY vtc_S2015C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2015C4[0]),
  (VTBL_ENTRY)&_ZN7S2015C4D1Ev,
  (VTBL_ENTRY)&_ZN7S2015C4D0Ev,
  (VTBL_ENTRY)&_ZN7S2015C43v11Ev,
  (VTBL_ENTRY)&_ZN7S2015C43v12Ev,
  (VTBL_ENTRY)&_ZN7S2015C43v13Ev,
  (VTBL_ENTRY)&_ZN7S2015C43v14Ev,
  (VTBL_ENTRY)&_ZN7S2015C43v15Ev,
  (VTBL_ENTRY)&_ZN7S2015C43v16Ev,
  (VTBL_ENTRY)&_ZN7S2015C43v17Ev,
  (VTBL_ENTRY)&_ZN7S2015C43v18Ev,
  (VTBL_ENTRY)&_ZN7S2015C43v19Ev,
};
extern VTBL_ENTRY _ZTI7S2015C4[];
extern  VTBL_ENTRY _ZTV7S2015C4[];
Class_Descriptor cd_S2015C4 = {  "S2015C4", // class name
  0,0,//no base classes
  &(vtc_S2015C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S2015C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S2015C4),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  S2015C3  : S2015C4 {
  virtual  ~S2015C3(); // _ZN7S2015C3D1Ev
  S2015C3(); // tgen
};
//SIG(-1 S2015C3) C1{ BC2{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9} vd}


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

static void Test_S2015C3()
{
  extern Class_Descriptor cd_S2015C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S2015C3, buf);
    S2015C3 *dp, &lv = *(dp=new (buf) S2015C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S2015C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2015C3)");
    check_base_class_offset(lv, (S2015C4*), 0, "S2015C3");
    test_class_info(&lv, &cd_S2015C3);
    dp->~S2015C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2015C3(Test_S2015C3, "S2015C3", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S2015C3C1Ev();
extern void _ZN7S2015C3D1Ev();
Name_Map name_map_S2015C3[] = {
  NSPAIR(_ZN7S2015C3C1Ev),
  NSPAIR(_ZN7S2015C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2015C4;
extern VTBL_ENTRY _ZTI7S2015C4[];
extern  VTBL_ENTRY _ZTV7S2015C4[];
static Base_Class bases_S2015C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2015C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI7S2015C3[];
extern void _ZN7S2015C3D1Ev();
extern void _ZN7S2015C3D0Ev();
extern void _ZN7S2015C43v11Ev();
extern void _ZN7S2015C43v12Ev();
extern void _ZN7S2015C43v13Ev();
extern void _ZN7S2015C43v14Ev();
extern void _ZN7S2015C43v15Ev();
extern void _ZN7S2015C43v16Ev();
extern void _ZN7S2015C43v17Ev();
extern void _ZN7S2015C43v18Ev();
extern void _ZN7S2015C43v19Ev();
static  VTBL_ENTRY vtc_S2015C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2015C3[0]),
  (VTBL_ENTRY)&_ZN7S2015C3D1Ev,
  (VTBL_ENTRY)&_ZN7S2015C3D0Ev,
  (VTBL_ENTRY)&_ZN7S2015C43v11Ev,
  (VTBL_ENTRY)&_ZN7S2015C43v12Ev,
  (VTBL_ENTRY)&_ZN7S2015C43v13Ev,
  (VTBL_ENTRY)&_ZN7S2015C43v14Ev,
  (VTBL_ENTRY)&_ZN7S2015C43v15Ev,
  (VTBL_ENTRY)&_ZN7S2015C43v16Ev,
  (VTBL_ENTRY)&_ZN7S2015C43v17Ev,
  (VTBL_ENTRY)&_ZN7S2015C43v18Ev,
  (VTBL_ENTRY)&_ZN7S2015C43v19Ev,
};
extern VTBL_ENTRY _ZTI7S2015C3[];
extern  VTBL_ENTRY _ZTV7S2015C3[];
Class_Descriptor cd_S2015C3 = {  "S2015C3", // class name
  bases_S2015C3, 1,
  &(vtc_S2015C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S2015C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2015C3),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  S2015C2  : S2015C3 {
  ::S9782C12 s2015c2f0;
  ::S9782C10 s2015c2f1;
  long s2015c2f2;
  virtual  ~S2015C2(); // _ZN7S2015C2D1Ev
  virtual void  v20(); // _ZN7S2015C23v20Ev
  virtual void  v21(); // _ZN7S2015C23v21Ev
  virtual void  v22(); // _ZN7S2015C23v22Ev
  virtual void  v23(); // _ZN7S2015C23v23Ev
  virtual void  v24(); // _ZN7S2015C23v24Ev
  S2015C2(); // tgen
};
//SIG(-1 S2015C2) C1{ BC2{ BC3{ vd v6 v7 v8 v9 v10 v11 v12 v13 v14} vd} vd v1 v2 v3 v4 v5 FC4{ m Fp Fc} FC5{ m FC6{ m FC4 Fp[2]} Fi} Fl}


 S2015C2 ::~S2015C2(){ note_dtor("S2015C2", this);}
void  S2015C2 ::v20(){vfunc_called(this, "_ZN7S2015C23v20Ev");}
void  S2015C2 ::v21(){vfunc_called(this, "_ZN7S2015C23v21Ev");}
void  S2015C2 ::v22(){vfunc_called(this, "_ZN7S2015C23v22Ev");}
void  S2015C2 ::v23(){vfunc_called(this, "_ZN7S2015C23v23Ev");}
void  S2015C2 ::v24(){vfunc_called(this, "_ZN7S2015C23v24Ev");}
S2015C2 ::S2015C2(){ note_ctor("S2015C2", this);} // tgen

static void Test_S2015C2()
{
  extern Class_Descriptor cd_S2015C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[10];
    init_test(&cd_S2015C2, buf);
    S2015C2 *dp, &lv = *(dp=new (buf) S2015C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,36), "sizeof(S2015C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2015C2)");
    check_base_class_offset(lv, (S2015C4*)(S2015C3*), 0, "S2015C2");
    check_base_class_offset(lv, (S2015C3*), 0, "S2015C2");
    check_field_offset(lv, s2015c2f0, ABISELECT(8,4), "S2015C2.s2015c2f0");
    check_field_offset(lv, s2015c2f1, ABISELECT(24,12), "S2015C2.s2015c2f1");
    check_field_offset(lv, s2015c2f2, ABISELECT(64,32), "S2015C2.s2015c2f2");
    test_class_info(&lv, &cd_S2015C2);
    dp->~S2015C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2015C2(Test_S2015C2, "S2015C2", ABISELECT(72,36));

#else // __cplusplus

extern void _ZN7S2015C2C1Ev();
extern void _ZN7S2015C2D1Ev();
Name_Map name_map_S2015C2[] = {
  NSPAIR(_ZN7S2015C2C1Ev),
  NSPAIR(_ZN7S2015C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2015C4;
extern VTBL_ENTRY _ZTI7S2015C4[];
extern  VTBL_ENTRY _ZTV7S2015C4[];
extern Class_Descriptor cd_S2015C3;
extern VTBL_ENTRY _ZTI7S2015C3[];
extern  VTBL_ENTRY _ZTV7S2015C3[];
static Base_Class bases_S2015C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2015C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S2015C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S2015C2[];
extern void _ZN7S2015C2D1Ev();
extern void _ZN7S2015C2D0Ev();
extern void _ZN7S2015C43v11Ev();
extern void _ZN7S2015C43v12Ev();
extern void _ZN7S2015C43v13Ev();
extern void _ZN7S2015C43v14Ev();
extern void _ZN7S2015C43v15Ev();
extern void _ZN7S2015C43v16Ev();
extern void _ZN7S2015C43v17Ev();
extern void _ZN7S2015C43v18Ev();
extern void _ZN7S2015C43v19Ev();
extern void _ZN7S2015C23v20Ev();
extern void _ZN7S2015C23v21Ev();
extern void _ZN7S2015C23v22Ev();
extern void _ZN7S2015C23v23Ev();
extern void _ZN7S2015C23v24Ev();
static  VTBL_ENTRY vtc_S2015C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2015C2[0]),
  (VTBL_ENTRY)&_ZN7S2015C2D1Ev,
  (VTBL_ENTRY)&_ZN7S2015C2D0Ev,
  (VTBL_ENTRY)&_ZN7S2015C43v11Ev,
  (VTBL_ENTRY)&_ZN7S2015C43v12Ev,
  (VTBL_ENTRY)&_ZN7S2015C43v13Ev,
  (VTBL_ENTRY)&_ZN7S2015C43v14Ev,
  (VTBL_ENTRY)&_ZN7S2015C43v15Ev,
  (VTBL_ENTRY)&_ZN7S2015C43v16Ev,
  (VTBL_ENTRY)&_ZN7S2015C43v17Ev,
  (VTBL_ENTRY)&_ZN7S2015C43v18Ev,
  (VTBL_ENTRY)&_ZN7S2015C43v19Ev,
  (VTBL_ENTRY)&_ZN7S2015C23v20Ev,
  (VTBL_ENTRY)&_ZN7S2015C23v21Ev,
  (VTBL_ENTRY)&_ZN7S2015C23v22Ev,
  (VTBL_ENTRY)&_ZN7S2015C23v23Ev,
  (VTBL_ENTRY)&_ZN7S2015C23v24Ev,
};
extern VTBL_ENTRY _ZTI7S2015C2[];
extern  VTBL_ENTRY _ZTV7S2015C2[];
Class_Descriptor cd_S2015C2 = {  "S2015C2", // class name
  bases_S2015C2, 2,
  &(vtc_S2015C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,36), // object size
  NSPAIRA(_ZTI7S2015C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2015C2),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  S2015C1  : S2015C2 {
  virtual  ~S2015C1(); // _ZN7S2015C1D1Ev
  virtual void  v1(); // _ZN7S2015C12v1Ev
  virtual void  v2(); // _ZN7S2015C12v2Ev
  virtual void  v3(); // _ZN7S2015C12v3Ev
  virtual void  v4(); // _ZN7S2015C12v4Ev
  virtual void  v5(); // _ZN7S2015C12v5Ev
  virtual void  v6(); // _ZN7S2015C12v6Ev
  virtual void  v7(); // _ZN7S2015C12v7Ev
  virtual void  v8(); // _ZN7S2015C12v8Ev
  virtual void  v9(); // _ZN7S2015C12v9Ev
  virtual void  v10(); // _ZN7S2015C13v10Ev
  S2015C1(); // tgen
};
//SIG(1 S2015C1) C1{ BC2{ BC3{ BC4{ vd v11 v12 v13 v14 v15 v16 v17 v18 v19} vd} vd v20 v21 v22 v23 v24 FC5{ m Fp Fc} FC6{ m FC7{ m FC5 Fp[2]} Fi} Fl} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10}


 S2015C1 ::~S2015C1(){ note_dtor("S2015C1", this);}
void  S2015C1 ::v1(){vfunc_called(this, "_ZN7S2015C12v1Ev");}
void  S2015C1 ::v2(){vfunc_called(this, "_ZN7S2015C12v2Ev");}
void  S2015C1 ::v3(){vfunc_called(this, "_ZN7S2015C12v3Ev");}
void  S2015C1 ::v4(){vfunc_called(this, "_ZN7S2015C12v4Ev");}
void  S2015C1 ::v5(){vfunc_called(this, "_ZN7S2015C12v5Ev");}
void  S2015C1 ::v6(){vfunc_called(this, "_ZN7S2015C12v6Ev");}
void  S2015C1 ::v7(){vfunc_called(this, "_ZN7S2015C12v7Ev");}
void  S2015C1 ::v8(){vfunc_called(this, "_ZN7S2015C12v8Ev");}
void  S2015C1 ::v9(){vfunc_called(this, "_ZN7S2015C12v9Ev");}
void  S2015C1 ::v10(){vfunc_called(this, "_ZN7S2015C13v10Ev");}
S2015C1 ::S2015C1(){ note_ctor("S2015C1", this);} // tgen

static void Test_S2015C1()
{
  extern Class_Descriptor cd_S2015C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[10];
    init_test(&cd_S2015C1, buf);
    S2015C1 *dp, &lv = *(dp=new (buf) S2015C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,36), "sizeof(S2015C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2015C1)");
    check_base_class_offset(lv, (S2015C4*)(S2015C3*)(S2015C2*), 0, "S2015C1");
    check_base_class_offset(lv, (S2015C3*)(S2015C2*), 0, "S2015C1");
    check_base_class_offset(lv, (S2015C2*), 0, "S2015C1");
    test_class_info(&lv, &cd_S2015C1);
    dp->~S2015C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2015C1(Test_S2015C1, "S2015C1", ABISELECT(72,36));

#else // __cplusplus

extern void _ZN7S2015C1C1Ev();
extern void _ZN7S2015C1D1Ev();
Name_Map name_map_S2015C1[] = {
  NSPAIR(_ZN7S2015C1C1Ev),
  NSPAIR(_ZN7S2015C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2015C4;
extern VTBL_ENTRY _ZTI7S2015C4[];
extern  VTBL_ENTRY _ZTV7S2015C4[];
extern Class_Descriptor cd_S2015C3;
extern VTBL_ENTRY _ZTI7S2015C3[];
extern  VTBL_ENTRY _ZTV7S2015C3[];
extern Class_Descriptor cd_S2015C2;
extern VTBL_ENTRY _ZTI7S2015C2[];
extern  VTBL_ENTRY _ZTV7S2015C2[];
static Base_Class bases_S2015C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2015C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S2015C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S2015C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S2015C1[];
extern void _ZN7S2015C1D1Ev();
extern void _ZN7S2015C1D0Ev();
extern void _ZN7S2015C43v11Ev();
extern void _ZN7S2015C43v12Ev();
extern void _ZN7S2015C43v13Ev();
extern void _ZN7S2015C43v14Ev();
extern void _ZN7S2015C43v15Ev();
extern void _ZN7S2015C43v16Ev();
extern void _ZN7S2015C43v17Ev();
extern void _ZN7S2015C43v18Ev();
extern void _ZN7S2015C43v19Ev();
extern void _ZN7S2015C23v20Ev();
extern void _ZN7S2015C23v21Ev();
extern void _ZN7S2015C23v22Ev();
extern void _ZN7S2015C23v23Ev();
extern void _ZN7S2015C23v24Ev();
extern void _ZN7S2015C12v1Ev();
extern void _ZN7S2015C12v2Ev();
extern void _ZN7S2015C12v3Ev();
extern void _ZN7S2015C12v4Ev();
extern void _ZN7S2015C12v5Ev();
extern void _ZN7S2015C12v6Ev();
extern void _ZN7S2015C12v7Ev();
extern void _ZN7S2015C12v8Ev();
extern void _ZN7S2015C12v9Ev();
extern void _ZN7S2015C13v10Ev();
static  VTBL_ENTRY vtc_S2015C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2015C1[0]),
  (VTBL_ENTRY)&_ZN7S2015C1D1Ev,
  (VTBL_ENTRY)&_ZN7S2015C1D0Ev,
  (VTBL_ENTRY)&_ZN7S2015C43v11Ev,
  (VTBL_ENTRY)&_ZN7S2015C43v12Ev,
  (VTBL_ENTRY)&_ZN7S2015C43v13Ev,
  (VTBL_ENTRY)&_ZN7S2015C43v14Ev,
  (VTBL_ENTRY)&_ZN7S2015C43v15Ev,
  (VTBL_ENTRY)&_ZN7S2015C43v16Ev,
  (VTBL_ENTRY)&_ZN7S2015C43v17Ev,
  (VTBL_ENTRY)&_ZN7S2015C43v18Ev,
  (VTBL_ENTRY)&_ZN7S2015C43v19Ev,
  (VTBL_ENTRY)&_ZN7S2015C23v20Ev,
  (VTBL_ENTRY)&_ZN7S2015C23v21Ev,
  (VTBL_ENTRY)&_ZN7S2015C23v22Ev,
  (VTBL_ENTRY)&_ZN7S2015C23v23Ev,
  (VTBL_ENTRY)&_ZN7S2015C23v24Ev,
  (VTBL_ENTRY)&_ZN7S2015C12v1Ev,
  (VTBL_ENTRY)&_ZN7S2015C12v2Ev,
  (VTBL_ENTRY)&_ZN7S2015C12v3Ev,
  (VTBL_ENTRY)&_ZN7S2015C12v4Ev,
  (VTBL_ENTRY)&_ZN7S2015C12v5Ev,
  (VTBL_ENTRY)&_ZN7S2015C12v6Ev,
  (VTBL_ENTRY)&_ZN7S2015C12v7Ev,
  (VTBL_ENTRY)&_ZN7S2015C12v8Ev,
  (VTBL_ENTRY)&_ZN7S2015C12v9Ev,
  (VTBL_ENTRY)&_ZN7S2015C13v10Ev,
};
extern VTBL_ENTRY _ZTI7S2015C1[];
extern  VTBL_ENTRY _ZTV7S2015C1[];
Class_Descriptor cd_S2015C1 = {  "S2015C1", // class name
  bases_S2015C1, 3,
  &(vtc_S2015C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,36), // object size
  NSPAIRA(_ZTI7S2015C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2015C1),28, //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  S5293C3  {
  virtual  ~S5293C3(); // _ZN7S5293C3D1Ev
  virtual void  v5(); // _ZN7S5293C32v5Ev
  S5293C3(); // tgen
};
//SIG(-1 S5293C3) C1{ vd v1}


 S5293C3 ::~S5293C3(){ note_dtor("S5293C3", this);}
void  S5293C3 ::v5(){vfunc_called(this, "_ZN7S5293C32v5Ev");}
S5293C3 ::S5293C3(){ note_ctor("S5293C3", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S5293C3C1Ev();
extern void _ZN7S5293C3D1Ev();
Name_Map name_map_S5293C3[] = {
  NSPAIR(_ZN7S5293C3C1Ev),
  NSPAIR(_ZN7S5293C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S5293C3[];
extern void _ZN7S5293C3D1Ev();
extern void _ZN7S5293C3D0Ev();
extern void _ZN7S5293C32v5Ev();
static  VTBL_ENTRY vtc_S5293C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5293C3[0]),
  (VTBL_ENTRY)&_ZN7S5293C3D1Ev,
  (VTBL_ENTRY)&_ZN7S5293C3D0Ev,
  (VTBL_ENTRY)&_ZN7S5293C32v5Ev,
};
extern VTBL_ENTRY _ZTI7S5293C3[];
extern  VTBL_ENTRY _ZTV7S5293C3[];
Class_Descriptor cd_S5293C3 = {  "S5293C3", // class name
  0,0,//no base classes
  &(vtc_S5293C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S5293C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S5293C3),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  S5293C2  : S5293C3 {
  void *s5293c2f0;
  ::S21579C7_nt s5293c2f1;
  void *s5293c2f2[2];
  ::S21579C10 s5293c2f3;
  int s5293c2f4[5];
  char s5293c2f5[3];
  ::S3625C18_nt s5293c2f6;
  ::S3625C18_nt s5293c2f7;
  ::S3625C18_nt s5293c2f8;
  ::S3625C18_nt s5293c2f9;
  void *s5293c2f10;
  virtual  ~S5293C2(); // _ZN7S5293C2D1Ev
  virtual void  v6(); // _ZN7S5293C22v6Ev
  virtual void  v7(); // _ZN7S5293C22v7Ev
  virtual void  v8(); // _ZN7S5293C22v8Ev
  virtual void  v9(); // _ZN7S5293C22v9Ev
  virtual void  v10(); // _ZN7S5293C23v10Ev
  virtual void  v11(); // _ZN7S5293C23v11Ev
  virtual void  v12(); // _ZN7S5293C23v12Ev
  S5293C2(); // tgen
};
//SIG(-1 S5293C2) C1{ BC2{ vd v8} vd v1 v2 v3 v4 v5 v6 v7 Fp FC3{ m Fp[2]} Fp[2] FC4{ m Fp Fi[2] Fp[2]} Fi[5] Fc[3] FC5{ m Fp Fi FC6{ m}} FC5 FC5 FC5 Fp}


 S5293C2 ::~S5293C2(){ note_dtor("S5293C2", this);}
void  S5293C2 ::v6(){vfunc_called(this, "_ZN7S5293C22v6Ev");}
void  S5293C2 ::v7(){vfunc_called(this, "_ZN7S5293C22v7Ev");}
void  S5293C2 ::v8(){vfunc_called(this, "_ZN7S5293C22v8Ev");}
void  S5293C2 ::v9(){vfunc_called(this, "_ZN7S5293C22v9Ev");}
void  S5293C2 ::v10(){vfunc_called(this, "_ZN7S5293C23v10Ev");}
void  S5293C2 ::v11(){vfunc_called(this, "_ZN7S5293C23v11Ev");}
void  S5293C2 ::v12(){vfunc_called(this, "_ZN7S5293C23v12Ev");}
S5293C2 ::S5293C2(){ note_ctor("S5293C2", this);} // tgen

static void Test_S5293C2()
{
  extern Class_Descriptor cd_S5293C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(23,31)];
    init_test(&cd_S5293C2, buf);
    S5293C2 *dp, &lv = *(dp=new (buf) S5293C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(176,120), "sizeof(S5293C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5293C2)");
    check_base_class_offset(lv, (S5293C3*), 0, "S5293C2");
    check_field_offset(lv, s5293c2f0, ABISELECT(8,4), "S5293C2.s5293c2f0");
    check_field_offset(lv, s5293c2f1, ABISELECT(16,8), "S5293C2.s5293c2f1");
    check_field_offset(lv, s5293c2f2, ABISELECT(32,16), "S5293C2.s5293c2f2");
    check_field_offset(lv, s5293c2f3, ABISELECT(48,24), "S5293C2.s5293c2f3");
    check_field_offset(lv, s5293c2f4, ABISELECT(80,44), "S5293C2.s5293c2f4");
    check_field_offset(lv, s5293c2f5, ABISELECT(100,64), "S5293C2.s5293c2f5");
    check_field_offset(lv, s5293c2f6, ABISELECT(104,68), "S5293C2.s5293c2f6");
    check_field_offset(lv, s5293c2f7, ABISELECT(120,80), "S5293C2.s5293c2f7");
    check_field_offset(lv, s5293c2f8, ABISELECT(136,92), "S5293C2.s5293c2f8");
    check_field_offset(lv, s5293c2f9, ABISELECT(152,104), "S5293C2.s5293c2f9");
    check_field_offset(lv, s5293c2f10, ABISELECT(168,116), "S5293C2.s5293c2f10");
    test_class_info(&lv, &cd_S5293C2);
    dp->~S5293C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5293C2(Test_S5293C2, "S5293C2", ABISELECT(176,120));

#else // __cplusplus

extern void _ZN7S5293C2C1Ev();
extern void _ZN7S5293C2D1Ev();
Name_Map name_map_S5293C2[] = {
  NSPAIR(_ZN7S5293C2C1Ev),
  NSPAIR(_ZN7S5293C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5293C3;
extern VTBL_ENTRY _ZTI7S5293C3[];
extern  VTBL_ENTRY _ZTV7S5293C3[];
static Base_Class bases_S5293C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5293C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI7S5293C2[];
extern void _ZN7S5293C2D1Ev();
extern void _ZN7S5293C2D0Ev();
extern void _ZN7S5293C32v5Ev();
extern void _ZN7S5293C22v6Ev();
extern void _ZN7S5293C22v7Ev();
extern void _ZN7S5293C22v8Ev();
extern void _ZN7S5293C22v9Ev();
extern void _ZN7S5293C23v10Ev();
extern void _ZN7S5293C23v11Ev();
extern void _ZN7S5293C23v12Ev();
static  VTBL_ENTRY vtc_S5293C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5293C2[0]),
  (VTBL_ENTRY)&_ZN7S5293C2D1Ev,
  (VTBL_ENTRY)&_ZN7S5293C2D0Ev,
  (VTBL_ENTRY)&_ZN7S5293C32v5Ev,
  (VTBL_ENTRY)&_ZN7S5293C22v6Ev,
  (VTBL_ENTRY)&_ZN7S5293C22v7Ev,
  (VTBL_ENTRY)&_ZN7S5293C22v8Ev,
  (VTBL_ENTRY)&_ZN7S5293C22v9Ev,
  (VTBL_ENTRY)&_ZN7S5293C23v10Ev,
  (VTBL_ENTRY)&_ZN7S5293C23v11Ev,
  (VTBL_ENTRY)&_ZN7S5293C23v12Ev,
};
extern VTBL_ENTRY _ZTI7S5293C2[];
extern  VTBL_ENTRY _ZTV7S5293C2[];
Class_Descriptor cd_S5293C2 = {  "S5293C2", // class name
  bases_S5293C2, 1,
  &(vtc_S5293C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(176,120), // object size
  NSPAIRA(_ZTI7S5293C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S5293C2),12, //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  S5293C1  : S5293C2 {
  ::S21579C7_nt s5293c1f0;
  ::S3625C18_nt s5293c1f1;
  ::S3625C18_nt s5293c1f2;
  virtual  ~S5293C1(); // _ZN7S5293C1D1Ev
  virtual void  v1(); // _ZN7S5293C12v1Ev
  virtual void  v2(); // _ZN7S5293C12v2Ev
  virtual void  v3(); // _ZN7S5293C12v3Ev
  virtual void  v4(); // _ZN7S5293C12v4Ev
  S5293C1(); // tgen
};
//SIG(1 S5293C1) C1{ BC2{ BC3{ vd v5} vd v6 v7 v8 v9 v10 v11 v12 Fp FC4{ m Fp[2]} Fp[2] FC5{ m Fp Fi[2] Fp[2]} Fi[5] Fc[3] FC6{ m Fp Fi FC7{ m}} FC6 FC6 FC6 Fp} vd v1 v2 v3 v4 FC4 FC6 FC6}


 S5293C1 ::~S5293C1(){ note_dtor("S5293C1", this);}
void  S5293C1 ::v1(){vfunc_called(this, "_ZN7S5293C12v1Ev");}
void  S5293C1 ::v2(){vfunc_called(this, "_ZN7S5293C12v2Ev");}
void  S5293C1 ::v3(){vfunc_called(this, "_ZN7S5293C12v3Ev");}
void  S5293C1 ::v4(){vfunc_called(this, "_ZN7S5293C12v4Ev");}
S5293C1 ::S5293C1(){ note_ctor("S5293C1", this);} // tgen

static void Test_S5293C1()
{
  extern Class_Descriptor cd_S5293C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(29,39)];
    init_test(&cd_S5293C1, buf);
    S5293C1 *dp, &lv = *(dp=new (buf) S5293C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(224,152), "sizeof(S5293C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5293C1)");
    check_base_class_offset(lv, (S5293C3*)(S5293C2*), 0, "S5293C1");
    check_base_class_offset(lv, (S5293C2*), 0, "S5293C1");
    check_field_offset(lv, s5293c1f0, ABISELECT(176,120), "S5293C1.s5293c1f0");
    check_field_offset(lv, s5293c1f1, ABISELECT(192,128), "S5293C1.s5293c1f1");
    check_field_offset(lv, s5293c1f2, ABISELECT(208,140), "S5293C1.s5293c1f2");
    test_class_info(&lv, &cd_S5293C1);
    dp->~S5293C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5293C1(Test_S5293C1, "S5293C1", ABISELECT(224,152));

#else // __cplusplus

extern void _ZN7S5293C1C1Ev();
extern void _ZN7S5293C1D1Ev();
Name_Map name_map_S5293C1[] = {
  NSPAIR(_ZN7S5293C1C1Ev),
  NSPAIR(_ZN7S5293C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5293C3;
extern VTBL_ENTRY _ZTI7S5293C3[];
extern  VTBL_ENTRY _ZTV7S5293C3[];
extern Class_Descriptor cd_S5293C2;
extern VTBL_ENTRY _ZTI7S5293C2[];
extern  VTBL_ENTRY _ZTV7S5293C2[];
static Base_Class bases_S5293C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5293C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S5293C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S5293C1[];
extern void _ZN7S5293C1D1Ev();
extern void _ZN7S5293C1D0Ev();
extern void _ZN7S5293C32v5Ev();
extern void _ZN7S5293C22v6Ev();
extern void _ZN7S5293C22v7Ev();
extern void _ZN7S5293C22v8Ev();
extern void _ZN7S5293C22v9Ev();
extern void _ZN7S5293C23v10Ev();
extern void _ZN7S5293C23v11Ev();
extern void _ZN7S5293C23v12Ev();
extern void _ZN7S5293C12v1Ev();
extern void _ZN7S5293C12v2Ev();
extern void _ZN7S5293C12v3Ev();
extern void _ZN7S5293C12v4Ev();
static  VTBL_ENTRY vtc_S5293C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5293C1[0]),
  (VTBL_ENTRY)&_ZN7S5293C1D1Ev,
  (VTBL_ENTRY)&_ZN7S5293C1D0Ev,
  (VTBL_ENTRY)&_ZN7S5293C32v5Ev,
  (VTBL_ENTRY)&_ZN7S5293C22v6Ev,
  (VTBL_ENTRY)&_ZN7S5293C22v7Ev,
  (VTBL_ENTRY)&_ZN7S5293C22v8Ev,
  (VTBL_ENTRY)&_ZN7S5293C22v9Ev,
  (VTBL_ENTRY)&_ZN7S5293C23v10Ev,
  (VTBL_ENTRY)&_ZN7S5293C23v11Ev,
  (VTBL_ENTRY)&_ZN7S5293C23v12Ev,
  (VTBL_ENTRY)&_ZN7S5293C12v1Ev,
  (VTBL_ENTRY)&_ZN7S5293C12v2Ev,
  (VTBL_ENTRY)&_ZN7S5293C12v3Ev,
  (VTBL_ENTRY)&_ZN7S5293C12v4Ev,
};
extern VTBL_ENTRY _ZTI7S5293C1[];
extern  VTBL_ENTRY _ZTV7S5293C1[];
Class_Descriptor cd_S5293C1 = {  "S5293C1", // class name
  bases_S5293C1, 2,
  &(vtc_S5293C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(224,152), // object size
  NSPAIRA(_ZTI7S5293C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S5293C1),16, //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  S5201C3  {
  virtual  ~S5201C3(); // _ZN7S5201C3D1Ev
  virtual void  v4(); // _ZN7S5201C32v4Ev
  S5201C3(); // tgen
};
//SIG(-1 S5201C3) C1{ vd v1}


 S5201C3 ::~S5201C3(){ note_dtor("S5201C3", this);}
void  S5201C3 ::v4(){vfunc_called(this, "_ZN7S5201C32v4Ev");}
S5201C3 ::S5201C3(){ note_ctor("S5201C3", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S5201C3C1Ev();
extern void _ZN7S5201C3D1Ev();
Name_Map name_map_S5201C3[] = {
  NSPAIR(_ZN7S5201C3C1Ev),
  NSPAIR(_ZN7S5201C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S5201C3[];
extern void _ZN7S5201C3D1Ev();
extern void _ZN7S5201C3D0Ev();
extern void _ZN7S5201C32v4Ev();
static  VTBL_ENTRY vtc_S5201C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5201C3[0]),
  (VTBL_ENTRY)&_ZN7S5201C3D1Ev,
  (VTBL_ENTRY)&_ZN7S5201C3D0Ev,
  (VTBL_ENTRY)&_ZN7S5201C32v4Ev,
};
extern VTBL_ENTRY _ZTI7S5201C3[];
extern  VTBL_ENTRY _ZTV7S5201C3[];
Class_Descriptor cd_S5201C3 = {  "S5201C3", // class name
  0,0,//no base classes
  &(vtc_S5201C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S5201C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S5201C3),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  S5201C2  : S5201C3 {
  void *s5201c2f0[4];
  ::S21579C10 s5201c2f1;
  int s5201c2f2[5];
  char s5201c2f3[3];
  ::S3625C18_nt s5201c2f4;
  ::S3625C18_nt s5201c2f5;
  ::S3625C18_nt s5201c2f6;
  ::S3625C18_nt s5201c2f7;
  void *s5201c2f8;
  virtual  ~S5201C2(); // _ZN7S5201C2D1Ev
  virtual void  v5(); // _ZN7S5201C22v5Ev
  virtual void  v6(); // _ZN7S5201C22v6Ev
  virtual void  v7(); // _ZN7S5201C22v7Ev
  virtual void  v8(); // _ZN7S5201C22v8Ev
  virtual void  v9(); // _ZN7S5201C22v9Ev
  virtual void  v10(); // _ZN7S5201C23v10Ev
  virtual void  v11(); // _ZN7S5201C23v11Ev
  virtual void  v12(); // _ZN7S5201C23v12Ev
  S5201C2(); // tgen
};
//SIG(-1 S5201C2) C1{ BC2{ vd v9} vd v1 v2 v3 v4 v5 v6 v7 v8 Fp[4] FC3{ m Fp Fi[2] Fp[2]} Fi[5] Fc[3] FC4{ m Fp Fi FC5{ m}} FC4 FC4 FC4 Fp}


 S5201C2 ::~S5201C2(){ note_dtor("S5201C2", this);}
void  S5201C2 ::v5(){vfunc_called(this, "_ZN7S5201C22v5Ev");}
void  S5201C2 ::v6(){vfunc_called(this, "_ZN7S5201C22v6Ev");}
void  S5201C2 ::v7(){vfunc_called(this, "_ZN7S5201C22v7Ev");}
void  S5201C2 ::v8(){vfunc_called(this, "_ZN7S5201C22v8Ev");}
void  S5201C2 ::v9(){vfunc_called(this, "_ZN7S5201C22v9Ev");}
void  S5201C2 ::v10(){vfunc_called(this, "_ZN7S5201C23v10Ev");}
void  S5201C2 ::v11(){vfunc_called(this, "_ZN7S5201C23v11Ev");}
void  S5201C2 ::v12(){vfunc_called(this, "_ZN7S5201C23v12Ev");}
S5201C2 ::S5201C2(){ note_ctor("S5201C2", this);} // tgen

static void Test_S5201C2()
{
  extern Class_Descriptor cd_S5201C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(22,30)];
    init_test(&cd_S5201C2, buf);
    S5201C2 *dp, &lv = *(dp=new (buf) S5201C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(168,116), "sizeof(S5201C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5201C2)");
    check_base_class_offset(lv, (S5201C3*), 0, "S5201C2");
    check_field_offset(lv, s5201c2f0, ABISELECT(8,4), "S5201C2.s5201c2f0");
    check_field_offset(lv, s5201c2f1, ABISELECT(40,20), "S5201C2.s5201c2f1");
    check_field_offset(lv, s5201c2f2, ABISELECT(72,40), "S5201C2.s5201c2f2");
    check_field_offset(lv, s5201c2f3, ABISELECT(92,60), "S5201C2.s5201c2f3");
    check_field_offset(lv, s5201c2f4, ABISELECT(96,64), "S5201C2.s5201c2f4");
    check_field_offset(lv, s5201c2f5, ABISELECT(112,76), "S5201C2.s5201c2f5");
    check_field_offset(lv, s5201c2f6, ABISELECT(128,88), "S5201C2.s5201c2f6");
    check_field_offset(lv, s5201c2f7, ABISELECT(144,100), "S5201C2.s5201c2f7");
    check_field_offset(lv, s5201c2f8, ABISELECT(160,112), "S5201C2.s5201c2f8");
    test_class_info(&lv, &cd_S5201C2);
    dp->~S5201C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5201C2(Test_S5201C2, "S5201C2", ABISELECT(168,116));

#else // __cplusplus

extern void _ZN7S5201C2C1Ev();
extern void _ZN7S5201C2D1Ev();
Name_Map name_map_S5201C2[] = {
  NSPAIR(_ZN7S5201C2C1Ev),
  NSPAIR(_ZN7S5201C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5201C3;
extern VTBL_ENTRY _ZTI7S5201C3[];
extern  VTBL_ENTRY _ZTV7S5201C3[];
static Base_Class bases_S5201C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5201C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI7S5201C2[];
extern void _ZN7S5201C2D1Ev();
extern void _ZN7S5201C2D0Ev();
extern void _ZN7S5201C32v4Ev();
extern void _ZN7S5201C22v5Ev();
extern void _ZN7S5201C22v6Ev();
extern void _ZN7S5201C22v7Ev();
extern void _ZN7S5201C22v8Ev();
extern void _ZN7S5201C22v9Ev();
extern void _ZN7S5201C23v10Ev();
extern void _ZN7S5201C23v11Ev();
extern void _ZN7S5201C23v12Ev();
static  VTBL_ENTRY vtc_S5201C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5201C2[0]),
  (VTBL_ENTRY)&_ZN7S5201C2D1Ev,
  (VTBL_ENTRY)&_ZN7S5201C2D0Ev,
  (VTBL_ENTRY)&_ZN7S5201C32v4Ev,
  (VTBL_ENTRY)&_ZN7S5201C22v5Ev,
  (VTBL_ENTRY)&_ZN7S5201C22v6Ev,
  (VTBL_ENTRY)&_ZN7S5201C22v7Ev,
  (VTBL_ENTRY)&_ZN7S5201C22v8Ev,
  (VTBL_ENTRY)&_ZN7S5201C22v9Ev,
  (VTBL_ENTRY)&_ZN7S5201C23v10Ev,
  (VTBL_ENTRY)&_ZN7S5201C23v11Ev,
  (VTBL_ENTRY)&_ZN7S5201C23v12Ev,
};
extern VTBL_ENTRY _ZTI7S5201C2[];
extern  VTBL_ENTRY _ZTV7S5201C2[];
Class_Descriptor cd_S5201C2 = {  "S5201C2", // class name
  bases_S5201C2, 1,
  &(vtc_S5201C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(168,116), // object size
  NSPAIRA(_ZTI7S5201C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S5201C2),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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S5201C1  : S5201C2 {
  ::S3625C18_nt s5201c1f0;
  ::S3625C31 s5201c1f1;
  virtual  ~S5201C1(); // _ZN7S5201C1D1Ev
  virtual void  v1(); // _ZN7S5201C12v1Ev
  virtual void  v2(); // _ZN7S5201C12v2Ev
  virtual void  v3(); // _ZN7S5201C12v3Ev
  S5201C1(); // tgen
};
//SIG(1 S5201C1) C1{ BC2{ BC3{ vd v4} vd v5 v6 v7 v8 v9 v10 v11 v12 Fp[4] FC4{ m Fp Fi[2] Fp[2]} Fi[5] Fc[3] FC5{ m Fp Fi FC6{ m}} FC5 FC5 FC5 Fp} vd v1 v2 v3 FC5 FC7{ m Fp Fi[2] FC8{ m}}}


 S5201C1 ::~S5201C1(){ note_dtor("S5201C1", this);}
void  S5201C1 ::v1(){vfunc_called(this, "_ZN7S5201C12v1Ev");}
void  S5201C1 ::v2(){vfunc_called(this, "_ZN7S5201C12v2Ev");}
void  S5201C1 ::v3(){vfunc_called(this, "_ZN7S5201C12v3Ev");}
S5201C1 ::S5201C1(){ note_ctor("S5201C1", this);} // tgen

static void Test_S5201C1()
{
  extern Class_Descriptor cd_S5201C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(27,37)];
    init_test(&cd_S5201C1, buf);
    S5201C1 *dp, &lv = *(dp=new (buf) S5201C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(208,144), "sizeof(S5201C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5201C1)");
    check_base_class_offset(lv, (S5201C3*)(S5201C2*), 0, "S5201C1");
    check_base_class_offset(lv, (S5201C2*), 0, "S5201C1");
    check_field_offset(lv, s5201c1f0, ABISELECT(168,116), "S5201C1.s5201c1f0");
    check_field_offset(lv, s5201c1f1, ABISELECT(184,128), "S5201C1.s5201c1f1");
    test_class_info(&lv, &cd_S5201C1);
    dp->~S5201C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5201C1(Test_S5201C1, "S5201C1", ABISELECT(208,144));

#else // __cplusplus

extern void _ZN7S5201C1C1Ev();
extern void _ZN7S5201C1D1Ev();
Name_Map name_map_S5201C1[] = {
  NSPAIR(_ZN7S5201C1C1Ev),
  NSPAIR(_ZN7S5201C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5201C3;
extern VTBL_ENTRY _ZTI7S5201C3[];
extern  VTBL_ENTRY _ZTV7S5201C3[];
extern Class_Descriptor cd_S5201C2;
extern VTBL_ENTRY _ZTI7S5201C2[];
extern  VTBL_ENTRY _ZTV7S5201C2[];
static Base_Class bases_S5201C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5201C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S5201C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S5201C1[];
extern void _ZN7S5201C1D1Ev();
extern void _ZN7S5201C1D0Ev();
extern void _ZN7S5201C32v4Ev();
extern void _ZN7S5201C22v5Ev();
extern void _ZN7S5201C22v6Ev();
extern void _ZN7S5201C22v7Ev();
extern void _ZN7S5201C22v8Ev();
extern void _ZN7S5201C22v9Ev();
extern void _ZN7S5201C23v10Ev();
extern void _ZN7S5201C23v11Ev();
extern void _ZN7S5201C23v12Ev();
extern void _ZN7S5201C12v1Ev();
extern void _ZN7S5201C12v2Ev();
extern void _ZN7S5201C12v3Ev();
static  VTBL_ENTRY vtc_S5201C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5201C1[0]),
  (VTBL_ENTRY)&_ZN7S5201C1D1Ev,
  (VTBL_ENTRY)&_ZN7S5201C1D0Ev,
  (VTBL_ENTRY)&_ZN7S5201C32v4Ev,
  (VTBL_ENTRY)&_ZN7S5201C22v5Ev,
  (VTBL_ENTRY)&_ZN7S5201C22v6Ev,
  (VTBL_ENTRY)&_ZN7S5201C22v7Ev,
  (VTBL_ENTRY)&_ZN7S5201C22v8Ev,
  (VTBL_ENTRY)&_ZN7S5201C22v9Ev,
  (VTBL_ENTRY)&_ZN7S5201C23v10Ev,
  (VTBL_ENTRY)&_ZN7S5201C23v11Ev,
  (VTBL_ENTRY)&_ZN7S5201C23v12Ev,
  (VTBL_ENTRY)&_ZN7S5201C12v1Ev,
  (VTBL_ENTRY)&_ZN7S5201C12v2Ev,
  (VTBL_ENTRY)&_ZN7S5201C12v3Ev,
};
extern VTBL_ENTRY _ZTI7S5201C1[];
extern  VTBL_ENTRY _ZTV7S5201C1[];
Class_Descriptor cd_S5201C1 = {  "S5201C1", // class name
  bases_S5201C1, 2,
  &(vtc_S5201C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(208,144), // object size
  NSPAIRA(_ZTI7S5201C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S5201C1),16, //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  S2395C4  {
  char s2395c4f0;
  int s2395c4f1;
  virtual  ~S2395C4(); // _ZN7S2395C4D1Ev
  virtual void  v6(); // _ZN7S2395C42v6Ev
  S2395C4(); // tgen
};
//SIG(-1 S2395C4) C1{ vd v1 Fc Fi}


 S2395C4 ::~S2395C4(){ note_dtor("S2395C4", this);}
void  S2395C4 ::v6(){vfunc_called(this, "_ZN7S2395C42v6Ev");}
S2395C4 ::S2395C4(){ note_ctor("S2395C4", this);} // tgen

static void Test_S2395C4()
{
  extern Class_Descriptor cd_S2395C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S2395C4, buf);
    S2395C4 *dp, &lv = *(dp=new (buf) S2395C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S2395C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2395C4)");
    check_field_offset(lv, s2395c4f0, ABISELECT(8,4), "S2395C4.s2395c4f0");
    check_field_offset(lv, s2395c4f1, ABISELECT(12,8), "S2395C4.s2395c4f1");
    test_class_info(&lv, &cd_S2395C4);
    dp->~S2395C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2395C4(Test_S2395C4, "S2395C4", ABISELECT(16,12));

#else // __cplusplus

extern void _ZN7S2395C4C1Ev();
extern void _ZN7S2395C4D1Ev();
Name_Map name_map_S2395C4[] = {
  NSPAIR(_ZN7S2395C4C1Ev),
  NSPAIR(_ZN7S2395C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S2395C4[];
extern void _ZN7S2395C4D1Ev();
extern void _ZN7S2395C4D0Ev();
extern void _ZN7S2395C42v6Ev();
static  VTBL_ENTRY vtc_S2395C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2395C4[0]),
  (VTBL_ENTRY)&_ZN7S2395C4D1Ev,
  (VTBL_ENTRY)&_ZN7S2395C4D0Ev,
  (VTBL_ENTRY)&_ZN7S2395C42v6Ev,
};
extern VTBL_ENTRY _ZTI7S2395C4[];
extern  VTBL_ENTRY _ZTV7S2395C4[];
Class_Descriptor cd_S2395C4 = {  "S2395C4", // class name
  0,0,//no base classes
  &(vtc_S2395C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI7S2395C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S2395C4),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  S2395C3  : S2395C4 {
  void *s2395c3f0;
  char s2395c3f1[2];
  virtual  ~S2395C3(); // _ZN7S2395C3D1Ev
  virtual void  v7(); // _ZN7S2395C32v7Ev
  S2395C3(); // tgen
};
//SIG(-1 S2395C3) C1{ BC2{ vd v2 Fc Fi} vd v1 Fp Fc[2]}


 S2395C3 ::~S2395C3(){ note_dtor("S2395C3", this);}
void  S2395C3 ::v7(){vfunc_called(this, "_ZN7S2395C32v7Ev");}
S2395C3 ::S2395C3(){ note_ctor("S2395C3", this);} // tgen

static void Test_S2395C3()
{
  extern Class_Descriptor cd_S2395C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,6)];
    init_test(&cd_S2395C3, buf);
    S2395C3 *dp, &lv = *(dp=new (buf) S2395C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S2395C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2395C3)");
    check_base_class_offset(lv, (S2395C4*), 0, "S2395C3");
    check_field_offset(lv, s2395c3f0, ABISELECT(16,12), "S2395C3.s2395c3f0");
    check_field_offset(lv, s2395c3f1, ABISELECT(24,16), "S2395C3.s2395c3f1");
    test_class_info(&lv, &cd_S2395C3);
    dp->~S2395C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2395C3(Test_S2395C3, "S2395C3", ABISELECT(32,20));

#else // __cplusplus

extern void _ZN7S2395C3C1Ev();
extern void _ZN7S2395C3D1Ev();
Name_Map name_map_S2395C3[] = {
  NSPAIR(_ZN7S2395C3C1Ev),
  NSPAIR(_ZN7S2395C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2395C4;
extern VTBL_ENTRY _ZTI7S2395C4[];
extern  VTBL_ENTRY _ZTV7S2395C4[];
static Base_Class bases_S2395C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2395C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI7S2395C3[];
extern void _ZN7S2395C3D1Ev();
extern void _ZN7S2395C3D0Ev();
extern void _ZN7S2395C42v6Ev();
extern void _ZN7S2395C32v7Ev();
static  VTBL_ENTRY vtc_S2395C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2395C3[0]),
  (VTBL_ENTRY)&_ZN7S2395C3D1Ev,
  (VTBL_ENTRY)&_ZN7S2395C3D0Ev,
  (VTBL_ENTRY)&_ZN7S2395C42v6Ev,
  (VTBL_ENTRY)&_ZN7S2395C32v7Ev,
};
extern VTBL_ENTRY _ZTI7S2395C3[];
extern  VTBL_ENTRY _ZTV7S2395C3[];
Class_Descriptor cd_S2395C3 = {  "S2395C3", // class name
  bases_S2395C3, 1,
  &(vtc_S2395C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,20), // object size
  NSPAIRA(_ZTI7S2395C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2395C3),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  S2395C2  : S2395C3 {
  void *s2395c2f0[2];
  int s2395c2f1[3];
  char s2395c2f2[2];
  void *s2395c2f3;
  virtual  ~S2395C2(); // _ZN7S2395C2D1Ev
  virtual void  v8(); // _ZN7S2395C22v8Ev
  virtual void  v9(); // _ZN7S2395C22v9Ev
  virtual void  v10(); // _ZN7S2395C23v10Ev
  virtual void  v11(); // _ZN7S2395C23v11Ev
  S2395C2(); // tgen
};
//SIG(-1 S2395C2) C1{ BC2{ BC3{ vd v5 Fc Fi} vd v6 Fp Fc[2]} vd v1 v2 v3 v4 Fp[2] Fi[3] Fc[2] Fp}


 S2395C2 ::~S2395C2(){ note_dtor("S2395C2", this);}
void  S2395C2 ::v8(){vfunc_called(this, "_ZN7S2395C22v8Ev");}
void  S2395C2 ::v9(){vfunc_called(this, "_ZN7S2395C22v9Ev");}
void  S2395C2 ::v10(){vfunc_called(this, "_ZN7S2395C23v10Ev");}
void  S2395C2 ::v11(){vfunc_called(this, "_ZN7S2395C23v11Ev");}
S2395C2 ::S2395C2(){ note_ctor("S2395C2", this);} // tgen

static void Test_S2395C2()
{
  extern Class_Descriptor cd_S2395C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,13)];
    init_test(&cd_S2395C2, buf);
    S2395C2 *dp, &lv = *(dp=new (buf) S2395C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,48), "sizeof(S2395C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2395C2)");
    check_base_class_offset(lv, (S2395C4*)(S2395C3*), 0, "S2395C2");
    check_base_class_offset(lv, (S2395C3*), 0, "S2395C2");
    check_field_offset(lv, s2395c2f0, ABISELECT(32,20), "S2395C2.s2395c2f0");
    check_field_offset(lv, s2395c2f1, ABISELECT(48,28), "S2395C2.s2395c2f1");
    check_field_offset(lv, s2395c2f2, ABISELECT(60,40), "S2395C2.s2395c2f2");
    check_field_offset(lv, s2395c2f3, ABISELECT(64,44), "S2395C2.s2395c2f3");
    test_class_info(&lv, &cd_S2395C2);
    dp->~S2395C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2395C2(Test_S2395C2, "S2395C2", ABISELECT(72,48));

#else // __cplusplus

extern void _ZN7S2395C2C1Ev();
extern void _ZN7S2395C2D1Ev();
Name_Map name_map_S2395C2[] = {
  NSPAIR(_ZN7S2395C2C1Ev),
  NSPAIR(_ZN7S2395C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2395C4;
extern VTBL_ENTRY _ZTI7S2395C4[];
extern  VTBL_ENTRY _ZTV7S2395C4[];
extern Class_Descriptor cd_S2395C3;
extern VTBL_ENTRY _ZTI7S2395C3[];
extern  VTBL_ENTRY _ZTV7S2395C3[];
static Base_Class bases_S2395C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2395C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S2395C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S2395C2[];
extern void _ZN7S2395C2D1Ev();
extern void _ZN7S2395C2D0Ev();
extern void _ZN7S2395C42v6Ev();
extern void _ZN7S2395C32v7Ev();
extern void _ZN7S2395C22v8Ev();
extern void _ZN7S2395C22v9Ev();
extern void _ZN7S2395C23v10Ev();
extern void _ZN7S2395C23v11Ev();
static  VTBL_ENTRY vtc_S2395C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2395C2[0]),
  (VTBL_ENTRY)&_ZN7S2395C2D1Ev,
  (VTBL_ENTRY)&_ZN7S2395C2D0Ev,
  (VTBL_ENTRY)&_ZN7S2395C42v6Ev,
  (VTBL_ENTRY)&_ZN7S2395C32v7Ev,
  (VTBL_ENTRY)&_ZN7S2395C22v8Ev,
  (VTBL_ENTRY)&_ZN7S2395C22v9Ev,
  (VTBL_ENTRY)&_ZN7S2395C23v10Ev,
  (VTBL_ENTRY)&_ZN7S2395C23v11Ev,
};
extern VTBL_ENTRY _ZTI7S2395C2[];
extern  VTBL_ENTRY _ZTV7S2395C2[];
Class_Descriptor cd_S2395C2 = {  "S2395C2", // class name
  bases_S2395C2, 2,
  &(vtc_S2395C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,48), // object size
  NSPAIRA(_ZTI7S2395C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2395C2),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  S2395C5  {
  virtual  ~S2395C5(); // _ZN7S2395C5D1Ev
  virtual void  v12(); // _ZN7S2395C53v12Ev
  S2395C5(); // tgen
};
//SIG(-1 S2395C5) C1{ vd v1}


 S2395C5 ::~S2395C5(){ note_dtor("S2395C5", this);}
void  S2395C5 ::v12(){vfunc_called(this, "_ZN7S2395C53v12Ev");}
S2395C5 ::S2395C5(){ note_ctor("S2395C5", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S2395C5C1Ev();
extern void _ZN7S2395C5D1Ev();
Name_Map name_map_S2395C5[] = {
  NSPAIR(_ZN7S2395C5C1Ev),
  NSPAIR(_ZN7S2395C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S2395C5[];
extern void _ZN7S2395C5D1Ev();
extern void _ZN7S2395C5D0Ev();
extern void _ZN7S2395C53v12Ev();
static  VTBL_ENTRY vtc_S2395C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2395C5[0]),
  (VTBL_ENTRY)&_ZN7S2395C5D1Ev,
  (VTBL_ENTRY)&_ZN7S2395C5D0Ev,
  (VTBL_ENTRY)&_ZN7S2395C53v12Ev,
};
extern VTBL_ENTRY _ZTI7S2395C5[];
extern  VTBL_ENTRY _ZTV7S2395C5[];
Class_Descriptor cd_S2395C5 = {  "S2395C5", // class name
  0,0,//no base classes
  &(vtc_S2395C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S2395C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S2395C5),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  S2395C1  : S2395C2 , S2395C5 {
  void *s2395c1f0;
  int s2395c1f1;
  void *s2395c1f2[2];
  int s2395c1f3[4];
  void *s2395c1f4;
  int s2395c1f5;
  void *s2395c1f6[3];
  int s2395c1f7[3];
  void *s2395c1f8[2];
  int s2395c1f9[2];
  virtual  ~S2395C1(); // _ZN7S2395C1D1Ev
  virtual void  v1(); // _ZN7S2395C12v1Ev
  virtual void  v2(); // _ZN7S2395C12v2Ev
  virtual void  v3(); // _ZN7S2395C12v3Ev
  virtual void  v4(); // _ZN7S2395C12v4Ev
  virtual void  v5(); // _ZN7S2395C12v5Ev
  S2395C1(); // tgen
};
//SIG(1 S2395C1) C1{ BC2{ BC3{ BC4{ vd v6 Fc Fi} vd v7 Fp Fc[2]} vd v8 v9 v10 v11 Fp[2] Fi[3] Fc[2] Fp} BC5{ vd v12} vd v1 v2 v3 v4 v5 Fp Fi Fp[2] Fi[4] Fp Fi Fp[3] Fi[3] Fp[2] Fi[2]}


 S2395C1 ::~S2395C1(){ note_dtor("S2395C1", this);}
void  S2395C1 ::v1(){vfunc_called(this, "_ZN7S2395C12v1Ev");}
void  S2395C1 ::v2(){vfunc_called(this, "_ZN7S2395C12v2Ev");}
void  S2395C1 ::v3(){vfunc_called(this, "_ZN7S2395C12v3Ev");}
void  S2395C1 ::v4(){vfunc_called(this, "_ZN7S2395C12v4Ev");}
void  S2395C1 ::v5(){vfunc_called(this, "_ZN7S2395C12v5Ev");}
S2395C1 ::S2395C1(){ note_ctor("S2395C1", this);} // tgen

static void Test_S2395C1()
{
  extern Class_Descriptor cd_S2395C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(27,34)];
    init_test(&cd_S2395C1, buf);
    S2395C1 *dp, &lv = *(dp=new (buf) S2395C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(208,132), "sizeof(S2395C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2395C1)");
    check_base_class_offset(lv, (S2395C4*)(S2395C3*)(S2395C2*), 0, "S2395C1");
    check_base_class_offset(lv, (S2395C3*)(S2395C2*), 0, "S2395C1");
    check_base_class_offset(lv, (S2395C2*), 0, "S2395C1");
    check_base_class_offset(lv, (S2395C5*), ABISELECT(72,48), "S2395C1");
    check_field_offset(lv, s2395c1f0, ABISELECT(80,52), "S2395C1.s2395c1f0");
    check_field_offset(lv, s2395c1f1, ABISELECT(88,56), "S2395C1.s2395c1f1");
    check_field_offset(lv, s2395c1f2, ABISELECT(96,60), "S2395C1.s2395c1f2");
    check_field_offset(lv, s2395c1f3, ABISELECT(112,68), "S2395C1.s2395c1f3");
    check_field_offset(lv, s2395c1f4, ABISELECT(128,84), "S2395C1.s2395c1f4");
    check_field_offset(lv, s2395c1f5, ABISELECT(136,88), "S2395C1.s2395c1f5");
    check_field_offset(lv, s2395c1f6, ABISELECT(144,92), "S2395C1.s2395c1f6");
    check_field_offset(lv, s2395c1f7, ABISELECT(168,104), "S2395C1.s2395c1f7");
    check_field_offset(lv, s2395c1f8, ABISELECT(184,116), "S2395C1.s2395c1f8");
    check_field_offset(lv, s2395c1f9, ABISELECT(200,124), "S2395C1.s2395c1f9");
    test_class_info(&lv, &cd_S2395C1);
    dp->~S2395C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2395C1(Test_S2395C1, "S2395C1", ABISELECT(208,132));

#else // __cplusplus

extern void _ZN7S2395C1C1Ev();
extern void _ZN7S2395C1D1Ev();
Name_Map name_map_S2395C1[] = {
  NSPAIR(_ZN7S2395C1C1Ev),
  NSPAIR(_ZN7S2395C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2395C4;
extern VTBL_ENTRY _ZTI7S2395C4[];
extern  VTBL_ENTRY _ZTV7S2395C4[];
extern Class_Descriptor cd_S2395C3;
extern VTBL_ENTRY _ZTI7S2395C3[];
extern  VTBL_ENTRY _ZTV7S2395C3[];
extern Class_Descriptor cd_S2395C2;
extern VTBL_ENTRY _ZTI7S2395C2[];
extern  VTBL_ENTRY _ZTV7S2395C2[];
extern Class_Descriptor cd_S2395C5;
extern VTBL_ENTRY _ZTI7S2395C5[];
extern  VTBL_ENTRY _ZTV7S2395C5[];
static Base_Class bases_S2395C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2395C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S2395C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S2395C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S2395C5,    ABISELECT(72,48), //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
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S2395C1[];
extern void _ZN7S2395C1D1Ev();
extern void _ZN7S2395C1D0Ev();
extern void _ZN7S2395C42v6Ev();
extern void _ZN7S2395C32v7Ev();
extern void _ZN7S2395C22v8Ev();
extern void _ZN7S2395C22v9Ev();
extern void _ZN7S2395C23v10Ev();
extern void _ZN7S2395C23v11Ev();
extern void _ZN7S2395C12v1Ev();
extern void _ZN7S2395C12v2Ev();
extern void _ZN7S2395C12v3Ev();
extern void _ZN7S2395C12v4Ev();
extern void _ZN7S2395C12v5Ev();
extern void ABISELECT(_ZThn72_N7S2395C1D1Ev,_ZThn48_N7S2395C1D1Ev)();
extern void ABISELECT(_ZThn72_N7S2395C1D0Ev,_ZThn48_N7S2395C1D0Ev)();
extern void _ZN7S2395C53v12Ev();
static  VTBL_ENTRY vtc_S2395C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2395C1[0]),
  (VTBL_ENTRY)&_ZN7S2395C1D1Ev,
  (VTBL_ENTRY)&_ZN7S2395C1D0Ev,
  (VTBL_ENTRY)&_ZN7S2395C42v6Ev,
  (VTBL_ENTRY)&_ZN7S2395C32v7Ev,
  (VTBL_ENTRY)&_ZN7S2395C22v8Ev,
  (VTBL_ENTRY)&_ZN7S2395C22v9Ev,
  (VTBL_ENTRY)&_ZN7S2395C23v10Ev,
  (VTBL_ENTRY)&_ZN7S2395C23v11Ev,
  (VTBL_ENTRY)&_ZN7S2395C12v1Ev,
  (VTBL_ENTRY)&_ZN7S2395C12v2Ev,
  (VTBL_ENTRY)&_ZN7S2395C12v3Ev,
  (VTBL_ENTRY)&_ZN7S2395C12v4Ev,
  (VTBL_ENTRY)&_ZN7S2395C12v5Ev,
  ABISELECT(-72,-48),
  (VTBL_ENTRY)&(_ZTI7S2395C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn72_N7S2395C1D1Ev,_ZThn48_N7S2395C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn72_N7S2395C1D0Ev,_ZThn48_N7S2395C1D0Ev),
  (VTBL_ENTRY)&_ZN7S2395C53v12Ev,
};
extern VTBL_ENTRY _ZTI7S2395C1[];
extern  VTBL_ENTRY _ZTV7S2395C1[];
Class_Descriptor cd_S2395C1 = {  "S2395C1", // class name
  bases_S2395C1, 4,
  &(vtc_S2395C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(208,132), // object size
  NSPAIRA(_ZTI7S2395C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S2395C1),20, //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  S859C5  {
  char s859c5f0;
  int s859c5f1;
  virtual  ~S859C5(); // _ZN6S859C5D1Ev
  virtual void  v2(); // _ZN6S859C52v2Ev
  S859C5(); // tgen
};
//SIG(-1 S859C5) C1{ vd v1 Fc Fi}


 S859C5 ::~S859C5(){ note_dtor("S859C5", this);}
void  S859C5 ::v2(){vfunc_called(this, "_ZN6S859C52v2Ev");}
S859C5 ::S859C5(){ note_ctor("S859C5", this);} // tgen

static void Test_S859C5()
{
  extern Class_Descriptor cd_S859C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S859C5, buf);
    S859C5 *dp, &lv = *(dp=new (buf) S859C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S859C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S859C5)");
    check_field_offset(lv, s859c5f0, ABISELECT(8,4), "S859C5.s859c5f0");
    check_field_offset(lv, s859c5f1, ABISELECT(12,8), "S859C5.s859c5f1");
    test_class_info(&lv, &cd_S859C5);
    dp->~S859C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS859C5(Test_S859C5, "S859C5", ABISELECT(16,12));

#else // __cplusplus

extern void _ZN6S859C5C1Ev();
extern void _ZN6S859C5D1Ev();
Name_Map name_map_S859C5[] = {
  NSPAIR(_ZN6S859C5C1Ev),
  NSPAIR(_ZN6S859C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI6S859C5[];
extern void _ZN6S859C5D1Ev();
extern void _ZN6S859C5D0Ev();
extern void _ZN6S859C52v2Ev();
static  VTBL_ENTRY vtc_S859C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S859C5[0]),
  (VTBL_ENTRY)&_ZN6S859C5D1Ev,
  (VTBL_ENTRY)&_ZN6S859C5D0Ev,
  (VTBL_ENTRY)&_ZN6S859C52v2Ev,
};
extern VTBL_ENTRY _ZTI6S859C5[];
extern  VTBL_ENTRY _ZTV6S859C5[];
Class_Descriptor cd_S859C5 = {  "S859C5", // class name
  0,0,//no base classes
  &(vtc_S859C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI6S859C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV6S859C5),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  S859C4  : S859C5 {
  void *s859c4f0;
  char s859c4f1[2];
  virtual  ~S859C4(); // _ZN6S859C4D1Ev
  virtual void  v3(); // _ZN6S859C42v3Ev
  S859C4(); // tgen
};
//SIG(-1 S859C4) C1{ BC2{ vd v2 Fc Fi} vd v1 Fp Fc[2]}


 S859C4 ::~S859C4(){ note_dtor("S859C4", this);}
void  S859C4 ::v3(){vfunc_called(this, "_ZN6S859C42v3Ev");}
S859C4 ::S859C4(){ note_ctor("S859C4", this);} // tgen

static void Test_S859C4()
{
  extern Class_Descriptor cd_S859C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,6)];
    init_test(&cd_S859C4, buf);
    S859C4 *dp, &lv = *(dp=new (buf) S859C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S859C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S859C4)");
    check_base_class_offset(lv, (S859C5*), 0, "S859C4");
    check_field_offset(lv, s859c4f0, ABISELECT(16,12), "S859C4.s859c4f0");
    check_field_offset(lv, s859c4f1, ABISELECT(24,16), "S859C4.s859c4f1");
    test_class_info(&lv, &cd_S859C4);
    dp->~S859C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS859C4(Test_S859C4, "S859C4", ABISELECT(32,20));

#else // __cplusplus

extern void _ZN6S859C4C1Ev();
extern void _ZN6S859C4D1Ev();
Name_Map name_map_S859C4[] = {
  NSPAIR(_ZN6S859C4C1Ev),
  NSPAIR(_ZN6S859C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S859C5;
extern VTBL_ENTRY _ZTI6S859C5[];
extern  VTBL_ENTRY _ZTV6S859C5[];
static Base_Class bases_S859C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S859C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI6S859C4[];
extern void _ZN6S859C4D1Ev();
extern void _ZN6S859C4D0Ev();
extern void _ZN6S859C52v2Ev();
extern void _ZN6S859C42v3Ev();
static  VTBL_ENTRY vtc_S859C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S859C4[0]),
  (VTBL_ENTRY)&_ZN6S859C4D1Ev,
  (VTBL_ENTRY)&_ZN6S859C4D0Ev,
  (VTBL_ENTRY)&_ZN6S859C52v2Ev,
  (VTBL_ENTRY)&_ZN6S859C42v3Ev,
};
extern VTBL_ENTRY _ZTI6S859C4[];
extern  VTBL_ENTRY _ZTV6S859C4[];
Class_Descriptor cd_S859C4 = {  "S859C4", // class name
  bases_S859C4, 1,
  &(vtc_S859C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,20), // object size
  NSPAIRA(_ZTI6S859C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S859C4),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  S859C3  : S859C4 {
  void *s859c3f0[2];
  int s859c3f1[3];
  char s859c3f2[2];
  void *s859c3f3;
  virtual  ~S859C3(); // _ZN6S859C3D1Ev
  virtual void  v4(); // _ZN6S859C32v4Ev
  virtual void  v5(); // _ZN6S859C32v5Ev
  virtual void  v6(); // _ZN6S859C32v6Ev
  virtual void  v7(); // _ZN6S859C32v7Ev
  S859C3(); // tgen
};
//SIG(-1 S859C3) C1{ BC2{ BC3{ vd v5 Fc Fi} vd v6 Fp Fc[2]} vd v1 v2 v3 v4 Fp[2] Fi[3] Fc[2] Fp}


 S859C3 ::~S859C3(){ note_dtor("S859C3", this);}
void  S859C3 ::v4(){vfunc_called(this, "_ZN6S859C32v4Ev");}
void  S859C3 ::v5(){vfunc_called(this, "_ZN6S859C32v5Ev");}
void  S859C3 ::v6(){vfunc_called(this, "_ZN6S859C32v6Ev");}
void  S859C3 ::v7(){vfunc_called(this, "_ZN6S859C32v7Ev");}
S859C3 ::S859C3(){ note_ctor("S859C3", this);} // tgen

static void Test_S859C3()
{
  extern Class_Descriptor cd_S859C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,13)];
    init_test(&cd_S859C3, buf);
    S859C3 *dp, &lv = *(dp=new (buf) S859C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,48), "sizeof(S859C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S859C3)");
    check_base_class_offset(lv, (S859C5*)(S859C4*), 0, "S859C3");
    check_base_class_offset(lv, (S859C4*), 0, "S859C3");
    check_field_offset(lv, s859c3f0, ABISELECT(32,20), "S859C3.s859c3f0");
    check_field_offset(lv, s859c3f1, ABISELECT(48,28), "S859C3.s859c3f1");
    check_field_offset(lv, s859c3f2, ABISELECT(60,40), "S859C3.s859c3f2");
    check_field_offset(lv, s859c3f3, ABISELECT(64,44), "S859C3.s859c3f3");
    test_class_info(&lv, &cd_S859C3);
    dp->~S859C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS859C3(Test_S859C3, "S859C3", ABISELECT(72,48));

#else // __cplusplus

extern void _ZN6S859C3C1Ev();
extern void _ZN6S859C3D1Ev();
Name_Map name_map_S859C3[] = {
  NSPAIR(_ZN6S859C3C1Ev),
  NSPAIR(_ZN6S859C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S859C5;
extern VTBL_ENTRY _ZTI6S859C5[];
extern  VTBL_ENTRY _ZTV6S859C5[];
extern Class_Descriptor cd_S859C4;
extern VTBL_ENTRY _ZTI6S859C4[];
extern  VTBL_ENTRY _ZTV6S859C4[];
static Base_Class bases_S859C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S859C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S859C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S859C3[];
extern void _ZN6S859C3D1Ev();
extern void _ZN6S859C3D0Ev();
extern void _ZN6S859C52v2Ev();
extern void _ZN6S859C42v3Ev();
extern void _ZN6S859C32v4Ev();
extern void _ZN6S859C32v5Ev();
extern void _ZN6S859C32v6Ev();
extern void _ZN6S859C32v7Ev();
static  VTBL_ENTRY vtc_S859C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S859C3[0]),
  (VTBL_ENTRY)&_ZN6S859C3D1Ev,
  (VTBL_ENTRY)&_ZN6S859C3D0Ev,
  (VTBL_ENTRY)&_ZN6S859C52v2Ev,
  (VTBL_ENTRY)&_ZN6S859C42v3Ev,
  (VTBL_ENTRY)&_ZN6S859C32v4Ev,
  (VTBL_ENTRY)&_ZN6S859C32v5Ev,
  (VTBL_ENTRY)&_ZN6S859C32v6Ev,
  (VTBL_ENTRY)&_ZN6S859C32v7Ev,
};
extern VTBL_ENTRY _ZTI6S859C3[];
extern  VTBL_ENTRY _ZTV6S859C3[];
Class_Descriptor cd_S859C3 = {  "S859C3", // class name
  bases_S859C3, 2,
  &(vtc_S859C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,48), // object size
  NSPAIRA(_ZTI6S859C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S859C3),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  S859C6  {
  char s859c6f0[31];
  void *s859c6f1;
};
//SIG(1 S859C6) C1{ Fc[31] Fp}



static void Test_S859C6()
{
  {
    init_simple_test("S859C6");
    S859C6 lv;
    check2(sizeof(lv), ABISELECT(40,36), "sizeof(S859C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S859C6)");
    check_field_offset(lv, s859c6f0, 0, "S859C6.s859c6f0");
    check_field_offset(lv, s859c6f1, 32, "S859C6.s859c6f1");
  }
}
static Arrange_To_Call_Me vS859C6(Test_S859C6, "S859C6", ABISELECT(40,36));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S859C2  : S859C3 {
  int s859c2f0[4];
  char s859c2f1[769];
  void *s859c2f2[2];
  int s859c2f3;
  void *s859c2f4;
  int s859c2f5[2];
  ::S859C6 s859c2f6[3];
  virtual  ~S859C2(); // _ZN6S859C2D1Ev
  virtual void  v8(); // _ZN6S859C22v8Ev
  virtual void  v9(); // _ZN6S859C22v9Ev
  virtual void  v10(); // _ZN6S859C23v10Ev
  virtual void  v11(); // _ZN6S859C23v11Ev
  S859C2(); // tgen
};
//SIG(-1 S859C2) C1{ BC2{ BC3{ BC4{ vd v5 Fc Fi} vd v6 Fp Fc[2]} vd v7 v8 v9 v10 Fp[2] Fi[3] Fc[2] Fp} vd v1 v2 v3 v4 Fi[4] Fc[769] Fp[2] Fi Fp Fi[2] FC5{ Fc[31] Fp}[3]}


 S859C2 ::~S859C2(){ note_dtor("S859C2", this);}
void  S859C2 ::v8(){vfunc_called(this, "_ZN6S859C22v8Ev");}
void  S859C2 ::v9(){vfunc_called(this, "_ZN6S859C22v9Ev");}
void  S859C2 ::v10(){vfunc_called(this, "_ZN6S859C23v10Ev");}
void  S859C2 ::v11(){vfunc_called(this, "_ZN6S859C23v11Ev");}
S859C2 ::S859C2(){ note_ctor("S859C2", this);} // tgen

static void Test_S859C2()
{
  extern Class_Descriptor cd_S859C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(129,243)];
    init_test(&cd_S859C2, buf);
    S859C2 *dp, &lv = *(dp=new (buf) S859C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1024,968), "sizeof(S859C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S859C2)");
    check_base_class_offset(lv, (S859C5*)(S859C4*)(S859C3*), 0, "S859C2");
    check_base_class_offset(lv, (S859C4*)(S859C3*), 0, "S859C2");
    check_base_class_offset(lv, (S859C3*), 0, "S859C2");
    check_field_offset(lv, s859c2f0, ABISELECT(72,48), "S859C2.s859c2f0");
    check_field_offset(lv, s859c2f1, ABISELECT(88,64), "S859C2.s859c2f1");
    check_field_offset(lv, s859c2f2, ABISELECT(864,836), "S859C2.s859c2f2");
    check_field_offset(lv, s859c2f3, ABISELECT(880,844), "S859C2.s859c2f3");
    check_field_offset(lv, s859c2f4, ABISELECT(888,848), "S859C2.s859c2f4");
    check_field_offset(lv, s859c2f5, ABISELECT(896,852), "S859C2.s859c2f5");
    check_field_offset(lv, s859c2f6, ABISELECT(904,860), "S859C2.s859c2f6");
    test_class_info(&lv, &cd_S859C2);
    dp->~S859C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS859C2(Test_S859C2, "S859C2", ABISELECT(1024,968));

#else // __cplusplus

extern void _ZN6S859C2C1Ev();
extern void _ZN6S859C2D1Ev();
Name_Map name_map_S859C2[] = {
  NSPAIR(_ZN6S859C2C1Ev),
  NSPAIR(_ZN6S859C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S859C5;
extern VTBL_ENTRY _ZTI6S859C5[];
extern  VTBL_ENTRY _ZTV6S859C5[];
extern Class_Descriptor cd_S859C4;
extern VTBL_ENTRY _ZTI6S859C4[];
extern  VTBL_ENTRY _ZTV6S859C4[];
extern Class_Descriptor cd_S859C3;
extern VTBL_ENTRY _ZTI6S859C3[];
extern  VTBL_ENTRY _ZTV6S859C3[];
static Base_Class bases_S859C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S859C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S859C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S859C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S859C2[];
extern void _ZN6S859C2D1Ev();
extern void _ZN6S859C2D0Ev();
extern void _ZN6S859C52v2Ev();
extern void _ZN6S859C42v3Ev();
extern void _ZN6S859C32v4Ev();
extern void _ZN6S859C32v5Ev();
extern void _ZN6S859C32v6Ev();
extern void _ZN6S859C32v7Ev();
extern void _ZN6S859C22v8Ev();
extern void _ZN6S859C22v9Ev();
extern void _ZN6S859C23v10Ev();
extern void _ZN6S859C23v11Ev();
static  VTBL_ENTRY vtc_S859C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S859C2[0]),
  (VTBL_ENTRY)&_ZN6S859C2D1Ev,
  (VTBL_ENTRY)&_ZN6S859C2D0Ev,
  (VTBL_ENTRY)&_ZN6S859C52v2Ev,
  (VTBL_ENTRY)&_ZN6S859C42v3Ev,
  (VTBL_ENTRY)&_ZN6S859C32v4Ev,
  (VTBL_ENTRY)&_ZN6S859C32v5Ev,
  (VTBL_ENTRY)&_ZN6S859C32v6Ev,
  (VTBL_ENTRY)&_ZN6S859C32v7Ev,
  (VTBL_ENTRY)&_ZN6S859C22v8Ev,
  (VTBL_ENTRY)&_ZN6S859C22v9Ev,
  (VTBL_ENTRY)&_ZN6S859C23v10Ev,
  (VTBL_ENTRY)&_ZN6S859C23v11Ev,
};
extern VTBL_ENTRY _ZTI6S859C2[];
extern  VTBL_ENTRY _ZTV6S859C2[];
Class_Descriptor cd_S859C2 = {  "S859C2", // class name
  bases_S859C2, 3,
  &(vtc_S859C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(1024,968), // object size
  NSPAIRA(_ZTI6S859C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S859C2),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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S859C1  : S859C2 {
  virtual  ~S859C1(); // _ZN6S859C1D1Ev
  virtual void  v1(); // _ZN6S859C12v1Ev
  S859C1(); // tgen
};
//SIG(1 S859C1) C1{ BC2{ BC3{ BC4{ BC5{ vd v2 Fc Fi} vd v3 Fp Fc[2]} vd v4 v5 v6 v7 Fp[2] Fi[3] Fc[2] Fp} vd v8 v9 v10 v11 Fi[4] Fc[769] Fp[2] Fi Fp Fi[2] FC6{ Fc[31] Fp}[3]} vd v1}


 S859C1 ::~S859C1(){ note_dtor("S859C1", this);}
void  S859C1 ::v1(){vfunc_called(this, "_ZN6S859C12v1Ev");}
S859C1 ::S859C1(){ note_ctor("S859C1", this);} // tgen

static void Test_S859C1()
{
  extern Class_Descriptor cd_S859C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(129,243)];
    init_test(&cd_S859C1, buf);
    S859C1 *dp, &lv = *(dp=new (buf) S859C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1024,968), "sizeof(S859C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S859C1)");
    check_base_class_offset(lv, (S859C5*)(S859C4*)(S859C3*)(S859C2*), 0, "S859C1");
    check_base_class_offset(lv, (S859C4*)(S859C3*)(S859C2*), 0, "S859C1");
    check_base_class_offset(lv, (S859C3*)(S859C2*), 0, "S859C1");
    check_base_class_offset(lv, (S859C2*), 0, "S859C1");
    test_class_info(&lv, &cd_S859C1);
    dp->~S859C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS859C1(Test_S859C1, "S859C1", ABISELECT(1024,968));

#else // __cplusplus

extern void _ZN6S859C1C1Ev();
extern void _ZN6S859C1D1Ev();
Name_Map name_map_S859C1[] = {
  NSPAIR(_ZN6S859C1C1Ev),
  NSPAIR(_ZN6S859C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S859C5;
extern VTBL_ENTRY _ZTI6S859C5[];
extern  VTBL_ENTRY _ZTV6S859C5[];
extern Class_Descriptor cd_S859C4;
extern VTBL_ENTRY _ZTI6S859C4[];
extern  VTBL_ENTRY _ZTV6S859C4[];
extern Class_Descriptor cd_S859C3;
extern VTBL_ENTRY _ZTI6S859C3[];
extern  VTBL_ENTRY _ZTV6S859C3[];
extern Class_Descriptor cd_S859C2;
extern VTBL_ENTRY _ZTI6S859C2[];
extern  VTBL_ENTRY _ZTV6S859C2[];
static Base_Class bases_S859C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S859C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S859C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S859C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S859C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S859C1[];
extern void _ZN6S859C1D1Ev();
extern void _ZN6S859C1D0Ev();
extern void _ZN6S859C52v2Ev();
extern void _ZN6S859C42v3Ev();
extern void _ZN6S859C32v4Ev();
extern void _ZN6S859C32v5Ev();
extern void _ZN6S859C32v6Ev();
extern void _ZN6S859C32v7Ev();
extern void _ZN6S859C22v8Ev();
extern void _ZN6S859C22v9Ev();
extern void _ZN6S859C23v10Ev();
extern void _ZN6S859C23v11Ev();
extern void _ZN6S859C12v1Ev();
static  VTBL_ENTRY vtc_S859C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S859C1[0]),
  (VTBL_ENTRY)&_ZN6S859C1D1Ev,
  (VTBL_ENTRY)&_ZN6S859C1D0Ev,
  (VTBL_ENTRY)&_ZN6S859C52v2Ev,
  (VTBL_ENTRY)&_ZN6S859C42v3Ev,
  (VTBL_ENTRY)&_ZN6S859C32v4Ev,
  (VTBL_ENTRY)&_ZN6S859C32v5Ev,
  (VTBL_ENTRY)&_ZN6S859C32v6Ev,
  (VTBL_ENTRY)&_ZN6S859C32v7Ev,
  (VTBL_ENTRY)&_ZN6S859C22v8Ev,
  (VTBL_ENTRY)&_ZN6S859C22v9Ev,
  (VTBL_ENTRY)&_ZN6S859C23v10Ev,
  (VTBL_ENTRY)&_ZN6S859C23v11Ev,
  (VTBL_ENTRY)&_ZN6S859C12v1Ev,
};
extern VTBL_ENTRY _ZTI6S859C1[];
extern  VTBL_ENTRY _ZTV6S859C1[];
Class_Descriptor cd_S859C1 = {  "S859C1", // class name
  bases_S859C1, 4,
  &(vtc_S859C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(1024,968), // object size
  NSPAIRA(_ZTI6S859C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S859C1),15, //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  S2299C4  {
  char s2299c4f0;
  int s2299c4f1;
  virtual  ~S2299C4(); // _ZN7S2299C4D1Ev
  virtual void  v5(); // _ZN7S2299C42v5Ev
  S2299C4(); // tgen
};
//SIG(-1 S2299C4) C1{ vd v1 Fc Fi}


 S2299C4 ::~S2299C4(){ note_dtor("S2299C4", this);}
void  S2299C4 ::v5(){vfunc_called(this, "_ZN7S2299C42v5Ev");}
S2299C4 ::S2299C4(){ note_ctor("S2299C4", this);} // tgen

static void Test_S2299C4()
{
  extern Class_Descriptor cd_S2299C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S2299C4, buf);
    S2299C4 *dp, &lv = *(dp=new (buf) S2299C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S2299C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2299C4)");
    check_field_offset(lv, s2299c4f0, ABISELECT(8,4), "S2299C4.s2299c4f0");
    check_field_offset(lv, s2299c4f1, ABISELECT(12,8), "S2299C4.s2299c4f1");
    test_class_info(&lv, &cd_S2299C4);
    dp->~S2299C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2299C4(Test_S2299C4, "S2299C4", ABISELECT(16,12));

#else // __cplusplus

extern void _ZN7S2299C4C1Ev();
extern void _ZN7S2299C4D1Ev();
Name_Map name_map_S2299C4[] = {
  NSPAIR(_ZN7S2299C4C1Ev),
  NSPAIR(_ZN7S2299C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S2299C4[];
extern void _ZN7S2299C4D1Ev();
extern void _ZN7S2299C4D0Ev();
extern void _ZN7S2299C42v5Ev();
static  VTBL_ENTRY vtc_S2299C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2299C4[0]),
  (VTBL_ENTRY)&_ZN7S2299C4D1Ev,
  (VTBL_ENTRY)&_ZN7S2299C4D0Ev,
  (VTBL_ENTRY)&_ZN7S2299C42v5Ev,
};
extern VTBL_ENTRY _ZTI7S2299C4[];
extern  VTBL_ENTRY _ZTV7S2299C4[];
Class_Descriptor cd_S2299C4 = {  "S2299C4", // class name
  0,0,//no base classes
  &(vtc_S2299C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI7S2299C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S2299C4),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  S2299C3  : S2299C4 {
  void *s2299c3f0;
  char s2299c3f1[2];
  virtual  ~S2299C3(); // _ZN7S2299C3D1Ev
  virtual void  v6(); // _ZN7S2299C32v6Ev
  S2299C3(); // tgen
};
//SIG(-1 S2299C3) C1{ BC2{ vd v2 Fc Fi} vd v1 Fp Fc[2]}


 S2299C3 ::~S2299C3(){ note_dtor("S2299C3", this);}
void  S2299C3 ::v6(){vfunc_called(this, "_ZN7S2299C32v6Ev");}
S2299C3 ::S2299C3(){ note_ctor("S2299C3", this);} // tgen

static void Test_S2299C3()
{
  extern Class_Descriptor cd_S2299C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,6)];
    init_test(&cd_S2299C3, buf);
    S2299C3 *dp, &lv = *(dp=new (buf) S2299C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S2299C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2299C3)");
    check_base_class_offset(lv, (S2299C4*), 0, "S2299C3");
    check_field_offset(lv, s2299c3f0, ABISELECT(16,12), "S2299C3.s2299c3f0");
    check_field_offset(lv, s2299c3f1, ABISELECT(24,16), "S2299C3.s2299c3f1");
    test_class_info(&lv, &cd_S2299C3);
    dp->~S2299C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2299C3(Test_S2299C3, "S2299C3", ABISELECT(32,20));

#else // __cplusplus

extern void _ZN7S2299C3C1Ev();
extern void _ZN7S2299C3D1Ev();
Name_Map name_map_S2299C3[] = {
  NSPAIR(_ZN7S2299C3C1Ev),
  NSPAIR(_ZN7S2299C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2299C4;
extern VTBL_ENTRY _ZTI7S2299C4[];
extern  VTBL_ENTRY _ZTV7S2299C4[];
static Base_Class bases_S2299C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2299C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI7S2299C3[];
extern void _ZN7S2299C3D1Ev();
extern void _ZN7S2299C3D0Ev();
extern void _ZN7S2299C42v5Ev();
extern void _ZN7S2299C32v6Ev();
static  VTBL_ENTRY vtc_S2299C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2299C3[0]),
  (VTBL_ENTRY)&_ZN7S2299C3D1Ev,
  (VTBL_ENTRY)&_ZN7S2299C3D0Ev,
  (VTBL_ENTRY)&_ZN7S2299C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2299C32v6Ev,
};
extern VTBL_ENTRY _ZTI7S2299C3[];
extern  VTBL_ENTRY _ZTV7S2299C3[];
Class_Descriptor cd_S2299C3 = {  "S2299C3", // class name
  bases_S2299C3, 1,
  &(vtc_S2299C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,20), // object size
  NSPAIRA(_ZTI7S2299C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2299C3),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  S2299C2  : S2299C3 {
  void *s2299c2f0[2];
  int s2299c2f1[3];
  char s2299c2f2[2];
  void *s2299c2f3;
  virtual  ~S2299C2(); // _ZN7S2299C2D1Ev
  virtual void  v7(); // _ZN7S2299C22v7Ev
  virtual void  v8(); // _ZN7S2299C22v8Ev
  virtual void  v9(); // _ZN7S2299C22v9Ev
  virtual void  v10(); // _ZN7S2299C23v10Ev
  S2299C2(); // tgen
};
//SIG(-1 S2299C2) C1{ BC2{ BC3{ vd v5 Fc Fi} vd v6 Fp Fc[2]} vd v1 v2 v3 v4 Fp[2] Fi[3] Fc[2] Fp}


 S2299C2 ::~S2299C2(){ note_dtor("S2299C2", this);}
void  S2299C2 ::v7(){vfunc_called(this, "_ZN7S2299C22v7Ev");}
void  S2299C2 ::v8(){vfunc_called(this, "_ZN7S2299C22v8Ev");}
void  S2299C2 ::v9(){vfunc_called(this, "_ZN7S2299C22v9Ev");}
void  S2299C2 ::v10(){vfunc_called(this, "_ZN7S2299C23v10Ev");}
S2299C2 ::S2299C2(){ note_ctor("S2299C2", this);} // tgen

static void Test_S2299C2()
{
  extern Class_Descriptor cd_S2299C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,13)];
    init_test(&cd_S2299C2, buf);
    S2299C2 *dp, &lv = *(dp=new (buf) S2299C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,48), "sizeof(S2299C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2299C2)");
    check_base_class_offset(lv, (S2299C4*)(S2299C3*), 0, "S2299C2");
    check_base_class_offset(lv, (S2299C3*), 0, "S2299C2");
    check_field_offset(lv, s2299c2f0, ABISELECT(32,20), "S2299C2.s2299c2f0");
    check_field_offset(lv, s2299c2f1, ABISELECT(48,28), "S2299C2.s2299c2f1");
    check_field_offset(lv, s2299c2f2, ABISELECT(60,40), "S2299C2.s2299c2f2");
    check_field_offset(lv, s2299c2f3, ABISELECT(64,44), "S2299C2.s2299c2f3");
    test_class_info(&lv, &cd_S2299C2);
    dp->~S2299C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2299C2(Test_S2299C2, "S2299C2", ABISELECT(72,48));

#else // __cplusplus

extern void _ZN7S2299C2C1Ev();
extern void _ZN7S2299C2D1Ev();
Name_Map name_map_S2299C2[] = {
  NSPAIR(_ZN7S2299C2C1Ev),
  NSPAIR(_ZN7S2299C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2299C4;
extern VTBL_ENTRY _ZTI7S2299C4[];
extern  VTBL_ENTRY _ZTV7S2299C4[];
extern Class_Descriptor cd_S2299C3;
extern VTBL_ENTRY _ZTI7S2299C3[];
extern  VTBL_ENTRY _ZTV7S2299C3[];
static Base_Class bases_S2299C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2299C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S2299C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S2299C2[];
extern void _ZN7S2299C2D1Ev();
extern void _ZN7S2299C2D0Ev();
extern void _ZN7S2299C42v5Ev();
extern void _ZN7S2299C32v6Ev();
extern void _ZN7S2299C22v7Ev();
extern void _ZN7S2299C22v8Ev();
extern void _ZN7S2299C22v9Ev();
extern void _ZN7S2299C23v10Ev();
static  VTBL_ENTRY vtc_S2299C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2299C2[0]),
  (VTBL_ENTRY)&_ZN7S2299C2D1Ev,
  (VTBL_ENTRY)&_ZN7S2299C2D0Ev,
  (VTBL_ENTRY)&_ZN7S2299C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2299C32v6Ev,
  (VTBL_ENTRY)&_ZN7S2299C22v7Ev,
  (VTBL_ENTRY)&_ZN7S2299C22v8Ev,
  (VTBL_ENTRY)&_ZN7S2299C22v9Ev,
  (VTBL_ENTRY)&_ZN7S2299C23v10Ev,
};
extern VTBL_ENTRY _ZTI7S2299C2[];
extern  VTBL_ENTRY _ZTV7S2299C2[];
Class_Descriptor cd_S2299C2 = {  "S2299C2", // class name
  bases_S2299C2, 2,
  &(vtc_S2299C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,48), // object size
  NSPAIRA(_ZTI7S2299C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2299C2),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  S2299C1  : S2299C2 {
  int s2299c1f0[2];
  void *s2299c1f1;
  int s2299c1f2[5];
  void *s2299c1f3[18];
  int s2299c1f4;
  void *s2299c1f5;
  int s2299c1f6[4];
  __tsi64 s2299c1f7;
  int s2299c1f8[5];
  void *s2299c1f9[8];
  int s2299c1f10[2];
  void *s2299c1f11[3];
  virtual  ~S2299C1(); // _ZN7S2299C1D1Ev
  virtual void  v1(); // _ZN7S2299C12v1Ev
  virtual void  v2(); // _ZN7S2299C12v2Ev
  virtual void  v3(); // _ZN7S2299C12v3Ev
  virtual void  v4(); // _ZN7S2299C12v4Ev
  S2299C1(); // tgen
};
//SIG(1 S2299C1) C1{ BC2{ BC3{ BC4{ vd v5 Fc Fi} vd v6 Fp Fc[2]} vd v7 v8 v9 v10 Fp[2] Fi[3] Fc[2] Fp} vd v1 v2 v3 v4 Fi[2] Fp Fi[5] Fp[18] Fi Fp Fi[4] FL Fi[5] Fp[8] Fi[2] Fp[3]}


 S2299C1 ::~S2299C1(){ note_dtor("S2299C1", this);}
void  S2299C1 ::v1(){vfunc_called(this, "_ZN7S2299C12v1Ev");}
void  S2299C1 ::v2(){vfunc_called(this, "_ZN7S2299C12v2Ev");}
void  S2299C1 ::v3(){vfunc_called(this, "_ZN7S2299C12v3Ev");}
void  S2299C1 ::v4(){vfunc_called(this, "_ZN7S2299C12v4Ev");}
S2299C1 ::S2299C1(){ note_ctor("S2299C1", this);} // tgen

static void Test_S2299C1()
{
  extern Class_Descriptor cd_S2299C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(53,65)];
    init_test(&cd_S2299C1, buf);
    S2299C1 *dp, &lv = *(dp=new (buf) S2299C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(416,256), "sizeof(S2299C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2299C1)");
    check_base_class_offset(lv, (S2299C4*)(S2299C3*)(S2299C2*), 0, "S2299C1");
    check_base_class_offset(lv, (S2299C3*)(S2299C2*), 0, "S2299C1");
    check_base_class_offset(lv, (S2299C2*), 0, "S2299C1");
    check_field_offset(lv, s2299c1f0, ABISELECT(72,48), "S2299C1.s2299c1f0");
    check_field_offset(lv, s2299c1f1, ABISELECT(80,56), "S2299C1.s2299c1f1");
    check_field_offset(lv, s2299c1f2, ABISELECT(88,60), "S2299C1.s2299c1f2");
    check_field_offset(lv, s2299c1f3, ABISELECT(112,80), "S2299C1.s2299c1f3");
    check_field_offset(lv, s2299c1f4, ABISELECT(256,152), "S2299C1.s2299c1f4");
    check_field_offset(lv, s2299c1f5, ABISELECT(264,156), "S2299C1.s2299c1f5");
    check_field_offset(lv, s2299c1f6, ABISELECT(272,160), "S2299C1.s2299c1f6");
    check_field_offset(lv, s2299c1f7, ABISELECT(288,176), "S2299C1.s2299c1f7");
    check_field_offset(lv, s2299c1f8, ABISELECT(296,184), "S2299C1.s2299c1f8");
    check_field_offset(lv, s2299c1f9, ABISELECT(320,204), "S2299C1.s2299c1f9");
    check_field_offset(lv, s2299c1f10, ABISELECT(384,236), "S2299C1.s2299c1f10");
    check_field_offset(lv, s2299c1f11, ABISELECT(392,244), "S2299C1.s2299c1f11");
    test_class_info(&lv, &cd_S2299C1);
    dp->~S2299C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2299C1(Test_S2299C1, "S2299C1", ABISELECT(416,256));

#else // __cplusplus

extern void _ZN7S2299C1C1Ev();
extern void _ZN7S2299C1D1Ev();
Name_Map name_map_S2299C1[] = {
  NSPAIR(_ZN7S2299C1C1Ev),
  NSPAIR(_ZN7S2299C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2299C4;
extern VTBL_ENTRY _ZTI7S2299C4[];
extern  VTBL_ENTRY _ZTV7S2299C4[];
extern Class_Descriptor cd_S2299C3;
extern VTBL_ENTRY _ZTI7S2299C3[];
extern  VTBL_ENTRY _ZTV7S2299C3[];
extern Class_Descriptor cd_S2299C2;
extern VTBL_ENTRY _ZTI7S2299C2[];
extern  VTBL_ENTRY _ZTV7S2299C2[];
static Base_Class bases_S2299C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2299C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S2299C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S2299C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S2299C1[];
extern void _ZN7S2299C1D1Ev();
extern void _ZN7S2299C1D0Ev();
extern void _ZN7S2299C42v5Ev();
extern void _ZN7S2299C32v6Ev();
extern void _ZN7S2299C22v7Ev();
extern void _ZN7S2299C22v8Ev();
extern void _ZN7S2299C22v9Ev();
extern void _ZN7S2299C23v10Ev();
extern void _ZN7S2299C12v1Ev();
extern void _ZN7S2299C12v2Ev();
extern void _ZN7S2299C12v3Ev();
extern void _ZN7S2299C12v4Ev();
static  VTBL_ENTRY vtc_S2299C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2299C1[0]),
  (VTBL_ENTRY)&_ZN7S2299C1D1Ev,
  (VTBL_ENTRY)&_ZN7S2299C1D0Ev,
  (VTBL_ENTRY)&_ZN7S2299C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2299C32v6Ev,
  (VTBL_ENTRY)&_ZN7S2299C22v7Ev,
  (VTBL_ENTRY)&_ZN7S2299C22v8Ev,
  (VTBL_ENTRY)&_ZN7S2299C22v9Ev,
  (VTBL_ENTRY)&_ZN7S2299C23v10Ev,
  (VTBL_ENTRY)&_ZN7S2299C12v1Ev,
  (VTBL_ENTRY)&_ZN7S2299C12v2Ev,
  (VTBL_ENTRY)&_ZN7S2299C12v3Ev,
  (VTBL_ENTRY)&_ZN7S2299C12v4Ev,
};
extern VTBL_ENTRY _ZTI7S2299C1[];
extern  VTBL_ENTRY _ZTV7S2299C1[];
Class_Descriptor cd_S2299C1 = {  "S2299C1", // class name
  bases_S2299C1, 3,
  &(vtc_S2299C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(416,256), // object size
  NSPAIRA(_ZTI7S2299C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2299C1),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  S2396C4  {
  char s2396c4f0;
  int s2396c4f1;
  virtual  ~S2396C4(); // _ZN7S2396C4D1Ev
  virtual void  v6(); // _ZN7S2396C42v6Ev
  S2396C4(); // tgen
};
//SIG(-1 S2396C4) C1{ vd v1 Fc Fi}


 S2396C4 ::~S2396C4(){ note_dtor("S2396C4", this);}
void  S2396C4 ::v6(){vfunc_called(this, "_ZN7S2396C42v6Ev");}
S2396C4 ::S2396C4(){ note_ctor("S2396C4", this);} // tgen

static void Test_S2396C4()
{
  extern Class_Descriptor cd_S2396C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S2396C4, buf);
    S2396C4 *dp, &lv = *(dp=new (buf) S2396C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S2396C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2396C4)");
    check_field_offset(lv, s2396c4f0, ABISELECT(8,4), "S2396C4.s2396c4f0");
    check_field_offset(lv, s2396c4f1, ABISELECT(12,8), "S2396C4.s2396c4f1");
    test_class_info(&lv, &cd_S2396C4);
    dp->~S2396C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2396C4(Test_S2396C4, "S2396C4", ABISELECT(16,12));

#else // __cplusplus

extern void _ZN7S2396C4C1Ev();
extern void _ZN7S2396C4D1Ev();
Name_Map name_map_S2396C4[] = {
  NSPAIR(_ZN7S2396C4C1Ev),
  NSPAIR(_ZN7S2396C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S2396C4[];
extern void _ZN7S2396C4D1Ev();
extern void _ZN7S2396C4D0Ev();
extern void _ZN7S2396C42v6Ev();
static  VTBL_ENTRY vtc_S2396C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2396C4[0]),
  (VTBL_ENTRY)&_ZN7S2396C4D1Ev,
  (VTBL_ENTRY)&_ZN7S2396C4D0Ev,
  (VTBL_ENTRY)&_ZN7S2396C42v6Ev,
};
extern VTBL_ENTRY _ZTI7S2396C4[];
extern  VTBL_ENTRY _ZTV7S2396C4[];
Class_Descriptor cd_S2396C4 = {  "S2396C4", // class name
  0,0,//no base classes
  &(vtc_S2396C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI7S2396C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S2396C4),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  S2396C3  : S2396C4 {
  void *s2396c3f0;
  char s2396c3f1[2];
  virtual  ~S2396C3(); // _ZN7S2396C3D1Ev
  virtual void  v7(); // _ZN7S2396C32v7Ev
  S2396C3(); // tgen
};
//SIG(-1 S2396C3) C1{ BC2{ vd v2 Fc Fi} vd v1 Fp Fc[2]}


 S2396C3 ::~S2396C3(){ note_dtor("S2396C3", this);}
void  S2396C3 ::v7(){vfunc_called(this, "_ZN7S2396C32v7Ev");}
S2396C3 ::S2396C3(){ note_ctor("S2396C3", this);} // tgen

static void Test_S2396C3()
{
  extern Class_Descriptor cd_S2396C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,6)];
    init_test(&cd_S2396C3, buf);
    S2396C3 *dp, &lv = *(dp=new (buf) S2396C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S2396C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2396C3)");
    check_base_class_offset(lv, (S2396C4*), 0, "S2396C3");
    check_field_offset(lv, s2396c3f0, ABISELECT(16,12), "S2396C3.s2396c3f0");
    check_field_offset(lv, s2396c3f1, ABISELECT(24,16), "S2396C3.s2396c3f1");
    test_class_info(&lv, &cd_S2396C3);
    dp->~S2396C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2396C3(Test_S2396C3, "S2396C3", ABISELECT(32,20));

#else // __cplusplus

extern void _ZN7S2396C3C1Ev();
extern void _ZN7S2396C3D1Ev();
Name_Map name_map_S2396C3[] = {
  NSPAIR(_ZN7S2396C3C1Ev),
  NSPAIR(_ZN7S2396C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2396C4;
extern VTBL_ENTRY _ZTI7S2396C4[];
extern  VTBL_ENTRY _ZTV7S2396C4[];
static Base_Class bases_S2396C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2396C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI7S2396C3[];
extern void _ZN7S2396C3D1Ev();
extern void _ZN7S2396C3D0Ev();
extern void _ZN7S2396C42v6Ev();
extern void _ZN7S2396C32v7Ev();
static  VTBL_ENTRY vtc_S2396C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2396C3[0]),
  (VTBL_ENTRY)&_ZN7S2396C3D1Ev,
  (VTBL_ENTRY)&_ZN7S2396C3D0Ev,
  (VTBL_ENTRY)&_ZN7S2396C42v6Ev,
  (VTBL_ENTRY)&_ZN7S2396C32v7Ev,
};
extern VTBL_ENTRY _ZTI7S2396C3[];
extern  VTBL_ENTRY _ZTV7S2396C3[];
Class_Descriptor cd_S2396C3 = {  "S2396C3", // class name
  bases_S2396C3, 1,
  &(vtc_S2396C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,20), // object size
  NSPAIRA(_ZTI7S2396C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2396C3),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  S2396C2  : S2396C3 {
  void *s2396c2f0[2];
  int s2396c2f1[3];
  char s2396c2f2[2];
  void *s2396c2f3;
  virtual  ~S2396C2(); // _ZN7S2396C2D1Ev
  virtual void  v8(); // _ZN7S2396C22v8Ev
  virtual void  v9(); // _ZN7S2396C22v9Ev
  virtual void  v10(); // _ZN7S2396C23v10Ev
  virtual void  v11(); // _ZN7S2396C23v11Ev
  S2396C2(); // tgen
};
//SIG(-1 S2396C2) C1{ BC2{ BC3{ vd v5 Fc Fi} vd v6 Fp Fc[2]} vd v1 v2 v3 v4 Fp[2] Fi[3] Fc[2] Fp}


 S2396C2 ::~S2396C2(){ note_dtor("S2396C2", this);}
void  S2396C2 ::v8(){vfunc_called(this, "_ZN7S2396C22v8Ev");}
void  S2396C2 ::v9(){vfunc_called(this, "_ZN7S2396C22v9Ev");}
void  S2396C2 ::v10(){vfunc_called(this, "_ZN7S2396C23v10Ev");}
void  S2396C2 ::v11(){vfunc_called(this, "_ZN7S2396C23v11Ev");}
S2396C2 ::S2396C2(){ note_ctor("S2396C2", this);} // tgen

static void Test_S2396C2()
{
  extern Class_Descriptor cd_S2396C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,13)];
    init_test(&cd_S2396C2, buf);
    S2396C2 *dp, &lv = *(dp=new (buf) S2396C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,48), "sizeof(S2396C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2396C2)");
    check_base_class_offset(lv, (S2396C4*)(S2396C3*), 0, "S2396C2");
    check_base_class_offset(lv, (S2396C3*), 0, "S2396C2");
    check_field_offset(lv, s2396c2f0, ABISELECT(32,20), "S2396C2.s2396c2f0");
    check_field_offset(lv, s2396c2f1, ABISELECT(48,28), "S2396C2.s2396c2f1");
    check_field_offset(lv, s2396c2f2, ABISELECT(60,40), "S2396C2.s2396c2f2");
    check_field_offset(lv, s2396c2f3, ABISELECT(64,44), "S2396C2.s2396c2f3");
    test_class_info(&lv, &cd_S2396C2);
    dp->~S2396C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2396C2(Test_S2396C2, "S2396C2", ABISELECT(72,48));

#else // __cplusplus

extern void _ZN7S2396C2C1Ev();
extern void _ZN7S2396C2D1Ev();
Name_Map name_map_S2396C2[] = {
  NSPAIR(_ZN7S2396C2C1Ev),
  NSPAIR(_ZN7S2396C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2396C4;
extern VTBL_ENTRY _ZTI7S2396C4[];
extern  VTBL_ENTRY _ZTV7S2396C4[];
extern Class_Descriptor cd_S2396C3;
extern VTBL_ENTRY _ZTI7S2396C3[];
extern  VTBL_ENTRY _ZTV7S2396C3[];
static Base_Class bases_S2396C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2396C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S2396C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S2396C2[];
extern void _ZN7S2396C2D1Ev();
extern void _ZN7S2396C2D0Ev();
extern void _ZN7S2396C42v6Ev();
extern void _ZN7S2396C32v7Ev();
extern void _ZN7S2396C22v8Ev();
extern void _ZN7S2396C22v9Ev();
extern void _ZN7S2396C23v10Ev();
extern void _ZN7S2396C23v11Ev();
static  VTBL_ENTRY vtc_S2396C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2396C2[0]),
  (VTBL_ENTRY)&_ZN7S2396C2D1Ev,
  (VTBL_ENTRY)&_ZN7S2396C2D0Ev,
  (VTBL_ENTRY)&_ZN7S2396C42v6Ev,
  (VTBL_ENTRY)&_ZN7S2396C32v7Ev,
  (VTBL_ENTRY)&_ZN7S2396C22v8Ev,
  (VTBL_ENTRY)&_ZN7S2396C22v9Ev,
  (VTBL_ENTRY)&_ZN7S2396C23v10Ev,
  (VTBL_ENTRY)&_ZN7S2396C23v11Ev,
};
extern VTBL_ENTRY _ZTI7S2396C2[];
extern  VTBL_ENTRY _ZTV7S2396C2[];
Class_Descriptor cd_S2396C2 = {  "S2396C2", // class name
  bases_S2396C2, 2,
  &(vtc_S2396C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,48), // object size
  NSPAIRA(_ZTI7S2396C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2396C2),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  S2396C5  {
  virtual  ~S2396C5(); // _ZN7S2396C5D1Ev
  virtual void  v12(); // _ZN7S2396C53v12Ev
  S2396C5(); // tgen
};
//SIG(-1 S2396C5) C1{ vd v1}


 S2396C5 ::~S2396C5(){ note_dtor("S2396C5", this);}
void  S2396C5 ::v12(){vfunc_called(this, "_ZN7S2396C53v12Ev");}
S2396C5 ::S2396C5(){ note_ctor("S2396C5", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S2396C5C1Ev();
extern void _ZN7S2396C5D1Ev();
Name_Map name_map_S2396C5[] = {
  NSPAIR(_ZN7S2396C5C1Ev),
  NSPAIR(_ZN7S2396C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S2396C5[];
extern void _ZN7S2396C5D1Ev();
extern void _ZN7S2396C5D0Ev();
extern void _ZN7S2396C53v12Ev();
static  VTBL_ENTRY vtc_S2396C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2396C5[0]),
  (VTBL_ENTRY)&_ZN7S2396C5D1Ev,
  (VTBL_ENTRY)&_ZN7S2396C5D0Ev,
  (VTBL_ENTRY)&_ZN7S2396C53v12Ev,
};
extern VTBL_ENTRY _ZTI7S2396C5[];
extern  VTBL_ENTRY _ZTV7S2396C5[];
Class_Descriptor cd_S2396C5 = {  "S2396C5", // class name
  0,0,//no base classes
  &(vtc_S2396C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S2396C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S2396C5),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  S2396C1  : S2396C2 , S2396C5 {
  void *s2396c1f0;
  int s2396c1f1;
  void *s2396c1f2[2];
  int s2396c1f3[4];
  void *s2396c1f4;
  int s2396c1f5;
  void *s2396c1f6[3];
  int s2396c1f7[3];
  void *s2396c1f8[2];
  int s2396c1f9;
  virtual  ~S2396C1(); // _ZN7S2396C1D1Ev
  virtual void  v1(); // _ZN7S2396C12v1Ev
  virtual void  v2(); // _ZN7S2396C12v2Ev
  virtual void  v3(); // _ZN7S2396C12v3Ev
  virtual void  v4(); // _ZN7S2396C12v4Ev
  virtual void  v5(); // _ZN7S2396C12v5Ev
  S2396C1(); // tgen
};
//SIG(1 S2396C1) C1{ BC2{ BC3{ BC4{ vd v6 Fc Fi} vd v7 Fp Fc[2]} vd v8 v9 v10 v11 Fp[2] Fi[3] Fc[2] Fp} BC5{ vd v12} vd v1 v2 v3 v4 v5 Fp Fi Fp[2] Fi[4] Fp Fi Fp[3] Fi[3] Fp[2] Fi}


 S2396C1 ::~S2396C1(){ note_dtor("S2396C1", this);}
void  S2396C1 ::v1(){vfunc_called(this, "_ZN7S2396C12v1Ev");}
void  S2396C1 ::v2(){vfunc_called(this, "_ZN7S2396C12v2Ev");}
void  S2396C1 ::v3(){vfunc_called(this, "_ZN7S2396C12v3Ev");}
void  S2396C1 ::v4(){vfunc_called(this, "_ZN7S2396C12v4Ev");}
void  S2396C1 ::v5(){vfunc_called(this, "_ZN7S2396C12v5Ev");}
S2396C1 ::S2396C1(){ note_ctor("S2396C1", this);} // tgen

static void Test_S2396C1()
{
  extern Class_Descriptor cd_S2396C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(27,33)];
    init_test(&cd_S2396C1, buf);
    S2396C1 *dp, &lv = *(dp=new (buf) S2396C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(208,128), "sizeof(S2396C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2396C1)");
    check_base_class_offset(lv, (S2396C4*)(S2396C3*)(S2396C2*), 0, "S2396C1");
    check_base_class_offset(lv, (S2396C3*)(S2396C2*), 0, "S2396C1");
    check_base_class_offset(lv, (S2396C2*), 0, "S2396C1");
    check_base_class_offset(lv, (S2396C5*), ABISELECT(72,48), "S2396C1");
    check_field_offset(lv, s2396c1f0, ABISELECT(80,52), "S2396C1.s2396c1f0");
    check_field_offset(lv, s2396c1f1, ABISELECT(88,56), "S2396C1.s2396c1f1");
    check_field_offset(lv, s2396c1f2, ABISELECT(96,60), "S2396C1.s2396c1f2");
    check_field_offset(lv, s2396c1f3, ABISELECT(112,68), "S2396C1.s2396c1f3");
    check_field_offset(lv, s2396c1f4, ABISELECT(128,84), "S2396C1.s2396c1f4");
    check_field_offset(lv, s2396c1f5, ABISELECT(136,88), "S2396C1.s2396c1f5");
    check_field_offset(lv, s2396c1f6, ABISELECT(144,92), "S2396C1.s2396c1f6");
    check_field_offset(lv, s2396c1f7, ABISELECT(168,104), "S2396C1.s2396c1f7");
    check_field_offset(lv, s2396c1f8, ABISELECT(184,116), "S2396C1.s2396c1f8");
    check_field_offset(lv, s2396c1f9, ABISELECT(200,124), "S2396C1.s2396c1f9");
    test_class_info(&lv, &cd_S2396C1);
    dp->~S2396C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2396C1(Test_S2396C1, "S2396C1", ABISELECT(208,128));

#else // __cplusplus

extern void _ZN7S2396C1C1Ev();
extern void _ZN7S2396C1D1Ev();
Name_Map name_map_S2396C1[] = {
  NSPAIR(_ZN7S2396C1C1Ev),
  NSPAIR(_ZN7S2396C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2396C4;
extern VTBL_ENTRY _ZTI7S2396C4[];
extern  VTBL_ENTRY _ZTV7S2396C4[];
extern Class_Descriptor cd_S2396C3;
extern VTBL_ENTRY _ZTI7S2396C3[];
extern  VTBL_ENTRY _ZTV7S2396C3[];
extern Class_Descriptor cd_S2396C2;
extern VTBL_ENTRY _ZTI7S2396C2[];
extern  VTBL_ENTRY _ZTV7S2396C2[];
extern Class_Descriptor cd_S2396C5;
extern VTBL_ENTRY _ZTI7S2396C5[];
extern  VTBL_ENTRY _ZTV7S2396C5[];
static Base_Class bases_S2396C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2396C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S2396C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S2396C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S2396C5,    ABISELECT(72,48), //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
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S2396C1[];
extern void _ZN7S2396C1D1Ev();
extern void _ZN7S2396C1D0Ev();
extern void _ZN7S2396C42v6Ev();
extern void _ZN7S2396C32v7Ev();
extern void _ZN7S2396C22v8Ev();
extern void _ZN7S2396C22v9Ev();
extern void _ZN7S2396C23v10Ev();
extern void _ZN7S2396C23v11Ev();
extern void _ZN7S2396C12v1Ev();
extern void _ZN7S2396C12v2Ev();
extern void _ZN7S2396C12v3Ev();
extern void _ZN7S2396C12v4Ev();
extern void _ZN7S2396C12v5Ev();
extern void ABISELECT(_ZThn72_N7S2396C1D1Ev,_ZThn48_N7S2396C1D1Ev)();
extern void ABISELECT(_ZThn72_N7S2396C1D0Ev,_ZThn48_N7S2396C1D0Ev)();
extern void _ZN7S2396C53v12Ev();
static  VTBL_ENTRY vtc_S2396C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2396C1[0]),
  (VTBL_ENTRY)&_ZN7S2396C1D1Ev,
  (VTBL_ENTRY)&_ZN7S2396C1D0Ev,
  (VTBL_ENTRY)&_ZN7S2396C42v6Ev,
  (VTBL_ENTRY)&_ZN7S2396C32v7Ev,
  (VTBL_ENTRY)&_ZN7S2396C22v8Ev,
  (VTBL_ENTRY)&_ZN7S2396C22v9Ev,
  (VTBL_ENTRY)&_ZN7S2396C23v10Ev,
  (VTBL_ENTRY)&_ZN7S2396C23v11Ev,
  (VTBL_ENTRY)&_ZN7S2396C12v1Ev,
  (VTBL_ENTRY)&_ZN7S2396C12v2Ev,
  (VTBL_ENTRY)&_ZN7S2396C12v3Ev,
  (VTBL_ENTRY)&_ZN7S2396C12v4Ev,
  (VTBL_ENTRY)&_ZN7S2396C12v5Ev,
  ABISELECT(-72,-48),
  (VTBL_ENTRY)&(_ZTI7S2396C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn72_N7S2396C1D1Ev,_ZThn48_N7S2396C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn72_N7S2396C1D0Ev,_ZThn48_N7S2396C1D0Ev),
  (VTBL_ENTRY)&_ZN7S2396C53v12Ev,
};
extern VTBL_ENTRY _ZTI7S2396C1[];
extern  VTBL_ENTRY _ZTV7S2396C1[];
Class_Descriptor cd_S2396C1 = {  "S2396C1", // class name
  bases_S2396C1, 4,
  &(vtc_S2396C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(208,128), // object size
  NSPAIRA(_ZTI7S2396C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S2396C1),20, //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  S2304C4  {
  char s2304c4f0;
  int s2304c4f1;
  virtual  ~S2304C4(); // _ZN7S2304C4D1Ev
  virtual void  v5(); // _ZN7S2304C42v5Ev
  S2304C4(); // tgen
};
//SIG(-1 S2304C4) C1{ vd v1 Fc Fi}


 S2304C4 ::~S2304C4(){ note_dtor("S2304C4", this);}
void  S2304C4 ::v5(){vfunc_called(this, "_ZN7S2304C42v5Ev");}
S2304C4 ::S2304C4(){ note_ctor("S2304C4", this);} // tgen

static void Test_S2304C4()
{
  extern Class_Descriptor cd_S2304C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S2304C4, buf);
    S2304C4 *dp, &lv = *(dp=new (buf) S2304C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S2304C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2304C4)");
    check_field_offset(lv, s2304c4f0, ABISELECT(8,4), "S2304C4.s2304c4f0");
    check_field_offset(lv, s2304c4f1, ABISELECT(12,8), "S2304C4.s2304c4f1");
    test_class_info(&lv, &cd_S2304C4);
    dp->~S2304C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2304C4(Test_S2304C4, "S2304C4", ABISELECT(16,12));

#else // __cplusplus

extern void _ZN7S2304C4C1Ev();
extern void _ZN7S2304C4D1Ev();
Name_Map name_map_S2304C4[] = {
  NSPAIR(_ZN7S2304C4C1Ev),
  NSPAIR(_ZN7S2304C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S2304C4[];
extern void _ZN7S2304C4D1Ev();
extern void _ZN7S2304C4D0Ev();
extern void _ZN7S2304C42v5Ev();
static  VTBL_ENTRY vtc_S2304C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2304C4[0]),
  (VTBL_ENTRY)&_ZN7S2304C4D1Ev,
  (VTBL_ENTRY)&_ZN7S2304C4D0Ev,
  (VTBL_ENTRY)&_ZN7S2304C42v5Ev,
};
extern VTBL_ENTRY _ZTI7S2304C4[];
extern  VTBL_ENTRY _ZTV7S2304C4[];
Class_Descriptor cd_S2304C4 = {  "S2304C4", // class name
  0,0,//no base classes
  &(vtc_S2304C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI7S2304C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S2304C4),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  S2304C3  : S2304C4 {
  void *s2304c3f0;
  char s2304c3f1[2];
  virtual  ~S2304C3(); // _ZN7S2304C3D1Ev
  virtual void  v6(); // _ZN7S2304C32v6Ev
  S2304C3(); // tgen
};
//SIG(-1 S2304C3) C1{ BC2{ vd v2 Fc Fi} vd v1 Fp Fc[2]}


 S2304C3 ::~S2304C3(){ note_dtor("S2304C3", this);}
void  S2304C3 ::v6(){vfunc_called(this, "_ZN7S2304C32v6Ev");}
S2304C3 ::S2304C3(){ note_ctor("S2304C3", this);} // tgen

static void Test_S2304C3()
{
  extern Class_Descriptor cd_S2304C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,6)];
    init_test(&cd_S2304C3, buf);
    S2304C3 *dp, &lv = *(dp=new (buf) S2304C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S2304C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2304C3)");
    check_base_class_offset(lv, (S2304C4*), 0, "S2304C3");
    check_field_offset(lv, s2304c3f0, ABISELECT(16,12), "S2304C3.s2304c3f0");
    check_field_offset(lv, s2304c3f1, ABISELECT(24,16), "S2304C3.s2304c3f1");
    test_class_info(&lv, &cd_S2304C3);
    dp->~S2304C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2304C3(Test_S2304C3, "S2304C3", ABISELECT(32,20));

#else // __cplusplus

extern void _ZN7S2304C3C1Ev();
extern void _ZN7S2304C3D1Ev();
Name_Map name_map_S2304C3[] = {
  NSPAIR(_ZN7S2304C3C1Ev),
  NSPAIR(_ZN7S2304C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2304C4;
extern VTBL_ENTRY _ZTI7S2304C4[];
extern  VTBL_ENTRY _ZTV7S2304C4[];
static Base_Class bases_S2304C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2304C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI7S2304C3[];
extern void _ZN7S2304C3D1Ev();
extern void _ZN7S2304C3D0Ev();
extern void _ZN7S2304C42v5Ev();
extern void _ZN7S2304C32v6Ev();
static  VTBL_ENTRY vtc_S2304C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2304C3[0]),
  (VTBL_ENTRY)&_ZN7S2304C3D1Ev,
  (VTBL_ENTRY)&_ZN7S2304C3D0Ev,
  (VTBL_ENTRY)&_ZN7S2304C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2304C32v6Ev,
};
extern VTBL_ENTRY _ZTI7S2304C3[];
extern  VTBL_ENTRY _ZTV7S2304C3[];
Class_Descriptor cd_S2304C3 = {  "S2304C3", // class name
  bases_S2304C3, 1,
  &(vtc_S2304C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,20), // object size
  NSPAIRA(_ZTI7S2304C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2304C3),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  S2304C2  : S2304C3 {
  void *s2304c2f0[2];
  int s2304c2f1[3];
  char s2304c2f2[2];
  void *s2304c2f3;
  virtual  ~S2304C2(); // _ZN7S2304C2D1Ev
  virtual void  v7(); // _ZN7S2304C22v7Ev
  virtual void  v8(); // _ZN7S2304C22v8Ev
  virtual void  v9(); // _ZN7S2304C22v9Ev
  virtual void  v10(); // _ZN7S2304C23v10Ev
  S2304C2(); // tgen
};
//SIG(-1 S2304C2) C1{ BC2{ BC3{ vd v5 Fc Fi} vd v6 Fp Fc[2]} vd v1 v2 v3 v4 Fp[2] Fi[3] Fc[2] Fp}


 S2304C2 ::~S2304C2(){ note_dtor("S2304C2", this);}
void  S2304C2 ::v7(){vfunc_called(this, "_ZN7S2304C22v7Ev");}
void  S2304C2 ::v8(){vfunc_called(this, "_ZN7S2304C22v8Ev");}
void  S2304C2 ::v9(){vfunc_called(this, "_ZN7S2304C22v9Ev");}
void  S2304C2 ::v10(){vfunc_called(this, "_ZN7S2304C23v10Ev");}
S2304C2 ::S2304C2(){ note_ctor("S2304C2", this);} // tgen

static void Test_S2304C2()
{
  extern Class_Descriptor cd_S2304C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,13)];
    init_test(&cd_S2304C2, buf);
    S2304C2 *dp, &lv = *(dp=new (buf) S2304C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,48), "sizeof(S2304C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2304C2)");
    check_base_class_offset(lv, (S2304C4*)(S2304C3*), 0, "S2304C2");
    check_base_class_offset(lv, (S2304C3*), 0, "S2304C2");
    check_field_offset(lv, s2304c2f0, ABISELECT(32,20), "S2304C2.s2304c2f0");
    check_field_offset(lv, s2304c2f1, ABISELECT(48,28), "S2304C2.s2304c2f1");
    check_field_offset(lv, s2304c2f2, ABISELECT(60,40), "S2304C2.s2304c2f2");
    check_field_offset(lv, s2304c2f3, ABISELECT(64,44), "S2304C2.s2304c2f3");
    test_class_info(&lv, &cd_S2304C2);
    dp->~S2304C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2304C2(Test_S2304C2, "S2304C2", ABISELECT(72,48));

#else // __cplusplus

extern void _ZN7S2304C2C1Ev();
extern void _ZN7S2304C2D1Ev();
Name_Map name_map_S2304C2[] = {
  NSPAIR(_ZN7S2304C2C1Ev),
  NSPAIR(_ZN7S2304C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2304C4;
extern VTBL_ENTRY _ZTI7S2304C4[];
extern  VTBL_ENTRY _ZTV7S2304C4[];
extern Class_Descriptor cd_S2304C3;
extern VTBL_ENTRY _ZTI7S2304C3[];
extern  VTBL_ENTRY _ZTV7S2304C3[];
static Base_Class bases_S2304C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2304C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S2304C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S2304C2[];
extern void _ZN7S2304C2D1Ev();
extern void _ZN7S2304C2D0Ev();
extern void _ZN7S2304C42v5Ev();
extern void _ZN7S2304C32v6Ev();
extern void _ZN7S2304C22v7Ev();
extern void _ZN7S2304C22v8Ev();
extern void _ZN7S2304C22v9Ev();
extern void _ZN7S2304C23v10Ev();
static  VTBL_ENTRY vtc_S2304C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2304C2[0]),
  (VTBL_ENTRY)&_ZN7S2304C2D1Ev,
  (VTBL_ENTRY)&_ZN7S2304C2D0Ev,
  (VTBL_ENTRY)&_ZN7S2304C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2304C32v6Ev,
  (VTBL_ENTRY)&_ZN7S2304C22v7Ev,
  (VTBL_ENTRY)&_ZN7S2304C22v8Ev,
  (VTBL_ENTRY)&_ZN7S2304C22v9Ev,
  (VTBL_ENTRY)&_ZN7S2304C23v10Ev,
};
extern VTBL_ENTRY _ZTI7S2304C2[];
extern  VTBL_ENTRY _ZTV7S2304C2[];
Class_Descriptor cd_S2304C2 = {  "S2304C2", // class name
  bases_S2304C2, 2,
  &(vtc_S2304C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,48), // object size
  NSPAIRA(_ZTI7S2304C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2304C2),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  S2304C1  : S2304C2 {
  int s2304c1f0[3];
  void *s2304c1f1;
  int s2304c1f2[5];
  void *s2304c1f3[18];
  int s2304c1f4;
  void *s2304c1f5;
  int s2304c1f6[3];
  __tsi64 s2304c1f7;
  int s2304c1f8[5];
  void *s2304c1f9[8];
  int s2304c1f10;
  void *s2304c1f11[3];
  virtual  ~S2304C1(); // _ZN7S2304C1D1Ev
  virtual void  v1(); // _ZN7S2304C12v1Ev
  virtual void  v2(); // _ZN7S2304C12v2Ev
  virtual void  v3(); // _ZN7S2304C12v3Ev
  virtual void  v4(); // _ZN7S2304C12v4Ev
  S2304C1(); // tgen
};
//SIG(1 S2304C1) C1{ BC2{ BC3{ BC4{ vd v5 Fc Fi} vd v6 Fp Fc[2]} vd v7 v8 v9 v10 Fp[2] Fi[3] Fc[2] Fp} vd v1 v2 v3 v4 Fi[3] Fp Fi[5] Fp[18] Fi Fp Fi[3] FL Fi[5] Fp[8] Fi Fp[3]}


 S2304C1 ::~S2304C1(){ note_dtor("S2304C1", this);}
void  S2304C1 ::v1(){vfunc_called(this, "_ZN7S2304C12v1Ev");}
void  S2304C1 ::v2(){vfunc_called(this, "_ZN7S2304C12v2Ev");}
void  S2304C1 ::v3(){vfunc_called(this, "_ZN7S2304C12v3Ev");}
void  S2304C1 ::v4(){vfunc_called(this, "_ZN7S2304C12v4Ev");}
S2304C1 ::S2304C1(){ note_ctor("S2304C1", this);} // tgen

static void Test_S2304C1()
{
  extern Class_Descriptor cd_S2304C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(54,64)];
    init_test(&cd_S2304C1, buf);
    S2304C1 *dp, &lv = *(dp=new (buf) S2304C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(424,252), "sizeof(S2304C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2304C1)");
    check_base_class_offset(lv, (S2304C4*)(S2304C3*)(S2304C2*), 0, "S2304C1");
    check_base_class_offset(lv, (S2304C3*)(S2304C2*), 0, "S2304C1");
    check_base_class_offset(lv, (S2304C2*), 0, "S2304C1");
    check_field_offset(lv, s2304c1f0, ABISELECT(72,48), "S2304C1.s2304c1f0");
    check_field_offset(lv, s2304c1f1, ABISELECT(88,60), "S2304C1.s2304c1f1");
    check_field_offset(lv, s2304c1f2, ABISELECT(96,64), "S2304C1.s2304c1f2");
    check_field_offset(lv, s2304c1f3, ABISELECT(120,84), "S2304C1.s2304c1f3");
    check_field_offset(lv, s2304c1f4, ABISELECT(264,156), "S2304C1.s2304c1f4");
    check_field_offset(lv, s2304c1f5, ABISELECT(272,160), "S2304C1.s2304c1f5");
    check_field_offset(lv, s2304c1f6, ABISELECT(280,164), "S2304C1.s2304c1f6");
    check_field_offset(lv, s2304c1f7, ABISELECT(296,176), "S2304C1.s2304c1f7");
    check_field_offset(lv, s2304c1f8, ABISELECT(304,184), "S2304C1.s2304c1f8");
    check_field_offset(lv, s2304c1f9, ABISELECT(328,204), "S2304C1.s2304c1f9");
    check_field_offset(lv, s2304c1f10, ABISELECT(392,236), "S2304C1.s2304c1f10");
    check_field_offset(lv, s2304c1f11, ABISELECT(400,240), "S2304C1.s2304c1f11");
    test_class_info(&lv, &cd_S2304C1);
    dp->~S2304C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2304C1(Test_S2304C1, "S2304C1", ABISELECT(424,252));

#else // __cplusplus

extern void _ZN7S2304C1C1Ev();
extern void _ZN7S2304C1D1Ev();
Name_Map name_map_S2304C1[] = {
  NSPAIR(_ZN7S2304C1C1Ev),
  NSPAIR(_ZN7S2304C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2304C4;
extern VTBL_ENTRY _ZTI7S2304C4[];
extern  VTBL_ENTRY _ZTV7S2304C4[];
extern Class_Descriptor cd_S2304C3;
extern VTBL_ENTRY _ZTI7S2304C3[];
extern  VTBL_ENTRY _ZTV7S2304C3[];
extern Class_Descriptor cd_S2304C2;
extern VTBL_ENTRY _ZTI7S2304C2[];
extern  VTBL_ENTRY _ZTV7S2304C2[];
static Base_Class bases_S2304C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2304C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S2304C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S2304C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S2304C1[];
extern void _ZN7S2304C1D1Ev();
extern void _ZN7S2304C1D0Ev();
extern void _ZN7S2304C42v5Ev();
extern void _ZN7S2304C32v6Ev();
extern void _ZN7S2304C22v7Ev();
extern void _ZN7S2304C22v8Ev();
extern void _ZN7S2304C22v9Ev();
extern void _ZN7S2304C23v10Ev();
extern void _ZN7S2304C12v1Ev();
extern void _ZN7S2304C12v2Ev();
extern void _ZN7S2304C12v3Ev();
extern void _ZN7S2304C12v4Ev();
static  VTBL_ENTRY vtc_S2304C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2304C1[0]),
  (VTBL_ENTRY)&_ZN7S2304C1D1Ev,
  (VTBL_ENTRY)&_ZN7S2304C1D0Ev,
  (VTBL_ENTRY)&_ZN7S2304C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2304C32v6Ev,
  (VTBL_ENTRY)&_ZN7S2304C22v7Ev,
  (VTBL_ENTRY)&_ZN7S2304C22v8Ev,
  (VTBL_ENTRY)&_ZN7S2304C22v9Ev,
  (VTBL_ENTRY)&_ZN7S2304C23v10Ev,
  (VTBL_ENTRY)&_ZN7S2304C12v1Ev,
  (VTBL_ENTRY)&_ZN7S2304C12v2Ev,
  (VTBL_ENTRY)&_ZN7S2304C12v3Ev,
  (VTBL_ENTRY)&_ZN7S2304C12v4Ev,
};
extern VTBL_ENTRY _ZTI7S2304C1[];
extern  VTBL_ENTRY _ZTV7S2304C1[];
Class_Descriptor cd_S2304C1 = {  "S2304C1", // class name
  bases_S2304C1, 3,
  &(vtc_S2304C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(424,252), // object size
  NSPAIRA(_ZTI7S2304C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2304C1),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  S5357C3  {
  virtual  ~S5357C3(); // _ZN7S5357C3D1Ev
  virtual void  v6(); // _ZN7S5357C32v6Ev
  S5357C3(); // tgen
};
//SIG(-1 S5357C3) C1{ vd v1}


 S5357C3 ::~S5357C3(){ note_dtor("S5357C3", this);}
void  S5357C3 ::v6(){vfunc_called(this, "_ZN7S5357C32v6Ev");}
S5357C3 ::S5357C3(){ note_ctor("S5357C3", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S5357C3C1Ev();
extern void _ZN7S5357C3D1Ev();
Name_Map name_map_S5357C3[] = {
  NSPAIR(_ZN7S5357C3C1Ev),
  NSPAIR(_ZN7S5357C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S5357C3[];
extern void _ZN7S5357C3D1Ev();
extern void _ZN7S5357C3D0Ev();
extern void _ZN7S5357C32v6Ev();
static  VTBL_ENTRY vtc_S5357C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5357C3[0]),
  (VTBL_ENTRY)&_ZN7S5357C3D1Ev,
  (VTBL_ENTRY)&_ZN7S5357C3D0Ev,
  (VTBL_ENTRY)&_ZN7S5357C32v6Ev,
};
extern VTBL_ENTRY _ZTI7S5357C3[];
extern  VTBL_ENTRY _ZTV7S5357C3[];
Class_Descriptor cd_S5357C3 = {  "S5357C3", // class name
  0,0,//no base classes
  &(vtc_S5357C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S5357C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S5357C3),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  S5357C2  : S5357C3 {
  void *s5357c2f0;
  ::S21579C7_nt s5357c2f1;
  void *s5357c2f2[2];
  ::S21579C10 s5357c2f3;
  int s5357c2f4[5];
  char s5357c2f5[3];
  ::S3625C18_nt s5357c2f6;
  ::S3625C18_nt s5357c2f7;
  ::S3625C18_nt s5357c2f8;
  ::S3625C18_nt s5357c2f9;
  void *s5357c2f10;
  virtual  ~S5357C2(); // _ZN7S5357C2D1Ev
  virtual void  v7(); // _ZN7S5357C22v7Ev
  virtual void  v8(); // _ZN7S5357C22v8Ev
  virtual void  v9(); // _ZN7S5357C22v9Ev
  virtual void  v10(); // _ZN7S5357C23v10Ev
  virtual void  v11(); // _ZN7S5357C23v11Ev
  virtual void  v12(); // _ZN7S5357C23v12Ev
  virtual void  v13(); // _ZN7S5357C23v13Ev
  S5357C2(); // tgen
};
//SIG(-1 S5357C2) C1{ BC2{ vd v8} vd v1 v2 v3 v4 v5 v6 v7 Fp FC3{ m Fp[2]} Fp[2] FC4{ m Fp Fi[2] Fp[2]} Fi[5] Fc[3] FC5{ m Fp Fi FC6{ m}} FC5 FC5 FC5 Fp}


 S5357C2 ::~S5357C2(){ note_dtor("S5357C2", this);}
void  S5357C2 ::v7(){vfunc_called(this, "_ZN7S5357C22v7Ev");}
void  S5357C2 ::v8(){vfunc_called(this, "_ZN7S5357C22v8Ev");}
void  S5357C2 ::v9(){vfunc_called(this, "_ZN7S5357C22v9Ev");}
void  S5357C2 ::v10(){vfunc_called(this, "_ZN7S5357C23v10Ev");}
void  S5357C2 ::v11(){vfunc_called(this, "_ZN7S5357C23v11Ev");}
void  S5357C2 ::v12(){vfunc_called(this, "_ZN7S5357C23v12Ev");}
void  S5357C2 ::v13(){vfunc_called(this, "_ZN7S5357C23v13Ev");}
S5357C2 ::S5357C2(){ note_ctor("S5357C2", this);} // tgen

static void Test_S5357C2()
{
  extern Class_Descriptor cd_S5357C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(23,31)];
    init_test(&cd_S5357C2, buf);
    S5357C2 *dp, &lv = *(dp=new (buf) S5357C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(176,120), "sizeof(S5357C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5357C2)");
    check_base_class_offset(lv, (S5357C3*), 0, "S5357C2");
    check_field_offset(lv, s5357c2f0, ABISELECT(8,4), "S5357C2.s5357c2f0");
    check_field_offset(lv, s5357c2f1, ABISELECT(16,8), "S5357C2.s5357c2f1");
    check_field_offset(lv, s5357c2f2, ABISELECT(32,16), "S5357C2.s5357c2f2");
    check_field_offset(lv, s5357c2f3, ABISELECT(48,24), "S5357C2.s5357c2f3");
    check_field_offset(lv, s5357c2f4, ABISELECT(80,44), "S5357C2.s5357c2f4");
    check_field_offset(lv, s5357c2f5, ABISELECT(100,64), "S5357C2.s5357c2f5");
    check_field_offset(lv, s5357c2f6, ABISELECT(104,68), "S5357C2.s5357c2f6");
    check_field_offset(lv, s5357c2f7, ABISELECT(120,80), "S5357C2.s5357c2f7");
    check_field_offset(lv, s5357c2f8, ABISELECT(136,92), "S5357C2.s5357c2f8");
    check_field_offset(lv, s5357c2f9, ABISELECT(152,104), "S5357C2.s5357c2f9");
    check_field_offset(lv, s5357c2f10, ABISELECT(168,116), "S5357C2.s5357c2f10");
    test_class_info(&lv, &cd_S5357C2);
    dp->~S5357C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5357C2(Test_S5357C2, "S5357C2", ABISELECT(176,120));

#else // __cplusplus

extern void _ZN7S5357C2C1Ev();
extern void _ZN7S5357C2D1Ev();
Name_Map name_map_S5357C2[] = {
  NSPAIR(_ZN7S5357C2C1Ev),
  NSPAIR(_ZN7S5357C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5357C3;
extern VTBL_ENTRY _ZTI7S5357C3[];
extern  VTBL_ENTRY _ZTV7S5357C3[];
static Base_Class bases_S5357C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5357C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI7S5357C2[];
extern void _ZN7S5357C2D1Ev();
extern void _ZN7S5357C2D0Ev();
extern void _ZN7S5357C32v6Ev();
extern void _ZN7S5357C22v7Ev();
extern void _ZN7S5357C22v8Ev();
extern void _ZN7S5357C22v9Ev();
extern void _ZN7S5357C23v10Ev();
extern void _ZN7S5357C23v11Ev();
extern void _ZN7S5357C23v12Ev();
extern void _ZN7S5357C23v13Ev();
static  VTBL_ENTRY vtc_S5357C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5357C2[0]),
  (VTBL_ENTRY)&_ZN7S5357C2D1Ev,
  (VTBL_ENTRY)&_ZN7S5357C2D0Ev,
  (VTBL_ENTRY)&_ZN7S5357C32v6Ev,
  (VTBL_ENTRY)&_ZN7S5357C22v7Ev,
  (VTBL_ENTRY)&_ZN7S5357C22v8Ev,
  (VTBL_ENTRY)&_ZN7S5357C22v9Ev,
  (VTBL_ENTRY)&_ZN7S5357C23v10Ev,
  (VTBL_ENTRY)&_ZN7S5357C23v11Ev,
  (VTBL_ENTRY)&_ZN7S5357C23v12Ev,
  (VTBL_ENTRY)&_ZN7S5357C23v13Ev,
};
extern VTBL_ENTRY _ZTI7S5357C2[];
extern  VTBL_ENTRY _ZTV7S5357C2[];
Class_Descriptor cd_S5357C2 = {  "S5357C2", // class name
  bases_S5357C2, 1,
  &(vtc_S5357C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(176,120), // object size
  NSPAIRA(_ZTI7S5357C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S5357C2),12, //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  S5357C1  : S5357C2 {
  virtual  ~S5357C1(); // _ZN7S5357C1D1Ev
  virtual void  v1(); // _ZN7S5357C12v1Ev
  virtual void  v2(); // _ZN7S5357C12v2Ev
  virtual void  v3(); // _ZN7S5357C12v3Ev
  virtual void  v4(); // _ZN7S5357C12v4Ev
  virtual void  v5(); // _ZN7S5357C12v5Ev
  S5357C1(); // tgen
};
//SIG(1 S5357C1) C1{ BC2{ BC3{ vd v6} vd v7 v8 v9 v10 v11 v12 v13 Fp FC4{ m Fp[2]} Fp[2] FC5{ m Fp Fi[2] Fp[2]} Fi[5] Fc[3] FC6{ m Fp Fi FC7{ m}} FC6 FC6 FC6 Fp} vd v1 v2 v3 v4 v5}


 S5357C1 ::~S5357C1(){ note_dtor("S5357C1", this);}
void  S5357C1 ::v1(){vfunc_called(this, "_ZN7S5357C12v1Ev");}
void  S5357C1 ::v2(){vfunc_called(this, "_ZN7S5357C12v2Ev");}
void  S5357C1 ::v3(){vfunc_called(this, "_ZN7S5357C12v3Ev");}
void  S5357C1 ::v4(){vfunc_called(this, "_ZN7S5357C12v4Ev");}
void  S5357C1 ::v5(){vfunc_called(this, "_ZN7S5357C12v5Ev");}
S5357C1 ::S5357C1(){ note_ctor("S5357C1", this);} // tgen

static void Test_S5357C1()
{
  extern Class_Descriptor cd_S5357C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(23,31)];
    init_test(&cd_S5357C1, buf);
    S5357C1 *dp, &lv = *(dp=new (buf) S5357C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(176,120), "sizeof(S5357C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5357C1)");
    check_base_class_offset(lv, (S5357C3*)(S5357C2*), 0, "S5357C1");
    check_base_class_offset(lv, (S5357C2*), 0, "S5357C1");
    test_class_info(&lv, &cd_S5357C1);
    dp->~S5357C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5357C1(Test_S5357C1, "S5357C1", ABISELECT(176,120));

#else // __cplusplus

extern void _ZN7S5357C1C1Ev();
extern void _ZN7S5357C1D1Ev();
Name_Map name_map_S5357C1[] = {
  NSPAIR(_ZN7S5357C1C1Ev),
  NSPAIR(_ZN7S5357C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5357C3;
extern VTBL_ENTRY _ZTI7S5357C3[];
extern  VTBL_ENTRY _ZTV7S5357C3[];
extern Class_Descriptor cd_S5357C2;
extern VTBL_ENTRY _ZTI7S5357C2[];
extern  VTBL_ENTRY _ZTV7S5357C2[];
static Base_Class bases_S5357C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5357C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S5357C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S5357C1[];
extern void _ZN7S5357C1D1Ev();
extern void _ZN7S5357C1D0Ev();
extern void _ZN7S5357C32v6Ev();
extern void _ZN7S5357C22v7Ev();
extern void _ZN7S5357C22v8Ev();
extern void _ZN7S5357C22v9Ev();
extern void _ZN7S5357C23v10Ev();
extern void _ZN7S5357C23v11Ev();
extern void _ZN7S5357C23v12Ev();
extern void _ZN7S5357C23v13Ev();
extern void _ZN7S5357C12v1Ev();
extern void _ZN7S5357C12v2Ev();
extern void _ZN7S5357C12v3Ev();
extern void _ZN7S5357C12v4Ev();
extern void _ZN7S5357C12v5Ev();
static  VTBL_ENTRY vtc_S5357C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5357C1[0]),
  (VTBL_ENTRY)&_ZN7S5357C1D1Ev,
  (VTBL_ENTRY)&_ZN7S5357C1D0Ev,
  (VTBL_ENTRY)&_ZN7S5357C32v6Ev,
  (VTBL_ENTRY)&_ZN7S5357C22v7Ev,
  (VTBL_ENTRY)&_ZN7S5357C22v8Ev,
  (VTBL_ENTRY)&_ZN7S5357C22v9Ev,
  (VTBL_ENTRY)&_ZN7S5357C23v10Ev,
  (VTBL_ENTRY)&_ZN7S5357C23v11Ev,
  (VTBL_ENTRY)&_ZN7S5357C23v12Ev,
  (VTBL_ENTRY)&_ZN7S5357C23v13Ev,
  (VTBL_ENTRY)&_ZN7S5357C12v1Ev,
  (VTBL_ENTRY)&_ZN7S5357C12v2Ev,
  (VTBL_ENTRY)&_ZN7S5357C12v3Ev,
  (VTBL_ENTRY)&_ZN7S5357C12v4Ev,
  (VTBL_ENTRY)&_ZN7S5357C12v5Ev,
};
extern VTBL_ENTRY _ZTI7S5357C1[];
extern  VTBL_ENTRY _ZTV7S5357C1[];
Class_Descriptor cd_S5357C1 = {  "S5357C1", // class name
  bases_S5357C1, 2,
  &(vtc_S5357C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(176,120), // object size
  NSPAIRA(_ZTI7S5357C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S5357C1),17, //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  S5292C3  {
  virtual  ~S5292C3(); // _ZN7S5292C3D1Ev
  virtual void  v5(); // _ZN7S5292C32v5Ev
  S5292C3(); // tgen
};
//SIG(-1 S5292C3) C1{ vd v1}


 S5292C3 ::~S5292C3(){ note_dtor("S5292C3", this);}
void  S5292C3 ::v5(){vfunc_called(this, "_ZN7S5292C32v5Ev");}
S5292C3 ::S5292C3(){ note_ctor("S5292C3", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S5292C3C1Ev();
extern void _ZN7S5292C3D1Ev();
Name_Map name_map_S5292C3[] = {
  NSPAIR(_ZN7S5292C3C1Ev),
  NSPAIR(_ZN7S5292C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S5292C3[];
extern void _ZN7S5292C3D1Ev();
extern void _ZN7S5292C3D0Ev();
extern void _ZN7S5292C32v5Ev();
static  VTBL_ENTRY vtc_S5292C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5292C3[0]),
  (VTBL_ENTRY)&_ZN7S5292C3D1Ev,
  (VTBL_ENTRY)&_ZN7S5292C3D0Ev,
  (VTBL_ENTRY)&_ZN7S5292C32v5Ev,
};
extern VTBL_ENTRY _ZTI7S5292C3[];
extern  VTBL_ENTRY _ZTV7S5292C3[];
Class_Descriptor cd_S5292C3 = {  "S5292C3", // class name
  0,0,//no base classes
  &(vtc_S5292C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S5292C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S5292C3),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  S5292C2  : S5292C3 {
  ::S3625C18_nt s5292c2f0;
  ::S21579C7_nt s5292c2f1;
  char s5292c2f2[4];
  ::S3625C18_nt s5292c2f3;
  ::S3625C18_nt s5292c2f4;
  ::S3625C18_nt s5292c2f5;
  ::S3625C18_nt s5292c2f6;
  ::S21579C10 s5292c2f7;
  int s5292c2f8[3];
  void *s5292c2f9;
  virtual  ~S5292C2(); // _ZN7S5292C2D1Ev
  virtual void  v6(); // _ZN7S5292C22v6Ev
  virtual void  v7(); // _ZN7S5292C22v7Ev
  virtual void  v8(); // _ZN7S5292C22v8Ev
  virtual void  v9(); // _ZN7S5292C22v9Ev
  virtual void  v10(); // _ZN7S5292C23v10Ev
  S5292C2(); // tgen
};
//SIG(-1 S5292C2) C1{ BC2{ vd v6} vd v1 v2 v3 v4 v5 FC3{ m Fp Fi FC4{ m}} FC5{ m Fp[2]} Fc[4] FC3 FC3 FC3 FC3 FC6{ m Fp Fi[2] Fp[2]} Fi[3] Fp}


 S5292C2 ::~S5292C2(){ note_dtor("S5292C2", this);}
void  S5292C2 ::v6(){vfunc_called(this, "_ZN7S5292C22v6Ev");}
void  S5292C2 ::v7(){vfunc_called(this, "_ZN7S5292C22v7Ev");}
void  S5292C2 ::v8(){vfunc_called(this, "_ZN7S5292C22v8Ev");}
void  S5292C2 ::v9(){vfunc_called(this, "_ZN7S5292C22v9Ev");}
void  S5292C2 ::v10(){vfunc_called(this, "_ZN7S5292C23v10Ev");}
S5292C2 ::S5292C2(){ note_ctor("S5292C2", this);} // tgen

static void Test_S5292C2()
{
  extern Class_Descriptor cd_S5292C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(22,29)];
    init_test(&cd_S5292C2, buf);
    S5292C2 *dp, &lv = *(dp=new (buf) S5292C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(168,112), "sizeof(S5292C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5292C2)");
    check_base_class_offset(lv, (S5292C3*), 0, "S5292C2");
    check_field_offset(lv, s5292c2f0, ABISELECT(8,4), "S5292C2.s5292c2f0");
    check_field_offset(lv, s5292c2f1, ABISELECT(24,16), "S5292C2.s5292c2f1");
    check_field_offset(lv, s5292c2f2, ABISELECT(40,24), "S5292C2.s5292c2f2");
    check_field_offset(lv, s5292c2f3, ABISELECT(48,28), "S5292C2.s5292c2f3");
    check_field_offset(lv, s5292c2f4, ABISELECT(64,40), "S5292C2.s5292c2f4");
    check_field_offset(lv, s5292c2f5, ABISELECT(80,52), "S5292C2.s5292c2f5");
    check_field_offset(lv, s5292c2f6, ABISELECT(96,64), "S5292C2.s5292c2f6");
    check_field_offset(lv, s5292c2f7, ABISELECT(112,76), "S5292C2.s5292c2f7");
    check_field_offset(lv, s5292c2f8, ABISELECT(144,96), "S5292C2.s5292c2f8");
    check_field_offset(lv, s5292c2f9, ABISELECT(160,108), "S5292C2.s5292c2f9");
    test_class_info(&lv, &cd_S5292C2);
    dp->~S5292C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5292C2(Test_S5292C2, "S5292C2", ABISELECT(168,112));

#else // __cplusplus

extern void _ZN7S5292C2C1Ev();
extern void _ZN7S5292C2D1Ev();
Name_Map name_map_S5292C2[] = {
  NSPAIR(_ZN7S5292C2C1Ev),
  NSPAIR(_ZN7S5292C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5292C3;
extern VTBL_ENTRY _ZTI7S5292C3[];
extern  VTBL_ENTRY _ZTV7S5292C3[];
static Base_Class bases_S5292C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5292C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI7S5292C2[];
extern void _ZN7S5292C2D1Ev();
extern void _ZN7S5292C2D0Ev();
extern void _ZN7S5292C32v5Ev();
extern void _ZN7S5292C22v6Ev();
extern void _ZN7S5292C22v7Ev();
extern void _ZN7S5292C22v8Ev();
extern void _ZN7S5292C22v9Ev();
extern void _ZN7S5292C23v10Ev();
static  VTBL_ENTRY vtc_S5292C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5292C2[0]),
  (VTBL_ENTRY)&_ZN7S5292C2D1Ev,
  (VTBL_ENTRY)&_ZN7S5292C2D0Ev,
  (VTBL_ENTRY)&_ZN7S5292C32v5Ev,
  (VTBL_ENTRY)&_ZN7S5292C22v6Ev,
  (VTBL_ENTRY)&_ZN7S5292C22v7Ev,
  (VTBL_ENTRY)&_ZN7S5292C22v8Ev,
  (VTBL_ENTRY)&_ZN7S5292C22v9Ev,
  (VTBL_ENTRY)&_ZN7S5292C23v10Ev,
};
extern VTBL_ENTRY _ZTI7S5292C2[];
extern  VTBL_ENTRY _ZTV7S5292C2[];
Class_Descriptor cd_S5292C2 = {  "S5292C2", // class name
  bases_S5292C2, 1,
  &(vtc_S5292C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(168,112), // object size
  NSPAIRA(_ZTI7S5292C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S5292C2),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  S5292C1  : S5292C2 {
  void *s5292c1f0;
  ::S3625C18_nt s5292c1f1;
  char s5292c1f2[3];
  int s5292c1f3;
  virtual  ~S5292C1(); // _ZN7S5292C1D1Ev
  virtual void  v1(); // _ZN7S5292C12v1Ev
  virtual void  v2(); // _ZN7S5292C12v2Ev
  virtual void  v3(); // _ZN7S5292C12v3Ev
  virtual void  v4(); // _ZN7S5292C12v4Ev
  S5292C1(); // tgen
};
//SIG(1 S5292C1) C1{ BC2{ BC3{ vd v5} vd v6 v7 v8 v9 v10 FC4{ m Fp Fi FC5{ m}} FC6{ m Fp[2]} Fc[4] FC4 FC4 FC4 FC4 FC7{ m Fp Fi[2] Fp[2]} Fi[3] Fp} vd v1 v2 v3 v4 Fp FC4 Fc[3] Fi}


 S5292C1 ::~S5292C1(){ note_dtor("S5292C1", this);}
void  S5292C1 ::v1(){vfunc_called(this, "_ZN7S5292C12v1Ev");}
void  S5292C1 ::v2(){vfunc_called(this, "_ZN7S5292C12v2Ev");}
void  S5292C1 ::v3(){vfunc_called(this, "_ZN7S5292C12v3Ev");}
void  S5292C1 ::v4(){vfunc_called(this, "_ZN7S5292C12v4Ev");}
S5292C1 ::S5292C1(){ note_ctor("S5292C1", this);} // tgen

static void Test_S5292C1()
{
  extern Class_Descriptor cd_S5292C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(26,35)];
    init_test(&cd_S5292C1, buf);
    S5292C1 *dp, &lv = *(dp=new (buf) S5292C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(200,136), "sizeof(S5292C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5292C1)");
    check_base_class_offset(lv, (S5292C3*)(S5292C2*), 0, "S5292C1");
    check_base_class_offset(lv, (S5292C2*), 0, "S5292C1");
    check_field_offset(lv, s5292c1f0, ABISELECT(168,112), "S5292C1.s5292c1f0");
    check_field_offset(lv, s5292c1f1, ABISELECT(176,116), "S5292C1.s5292c1f1");
    check_field_offset(lv, s5292c1f2, ABISELECT(192,128), "S5292C1.s5292c1f2");
    check_field_offset(lv, s5292c1f3, ABISELECT(196,132), "S5292C1.s5292c1f3");
    test_class_info(&lv, &cd_S5292C1);
    dp->~S5292C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5292C1(Test_S5292C1, "S5292C1", ABISELECT(200,136));

#else // __cplusplus

extern void _ZN7S5292C1C1Ev();
extern void _ZN7S5292C1D1Ev();
Name_Map name_map_S5292C1[] = {
  NSPAIR(_ZN7S5292C1C1Ev),
  NSPAIR(_ZN7S5292C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5292C3;
extern VTBL_ENTRY _ZTI7S5292C3[];
extern  VTBL_ENTRY _ZTV7S5292C3[];
extern Class_Descriptor cd_S5292C2;
extern VTBL_ENTRY _ZTI7S5292C2[];
extern  VTBL_ENTRY _ZTV7S5292C2[];
static Base_Class bases_S5292C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5292C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S5292C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S5292C1[];
extern void _ZN7S5292C1D1Ev();
extern void _ZN7S5292C1D0Ev();
extern void _ZN7S5292C32v5Ev();
extern void _ZN7S5292C22v6Ev();
extern void _ZN7S5292C22v7Ev();
extern void _ZN7S5292C22v8Ev();
extern void _ZN7S5292C22v9Ev();
extern void _ZN7S5292C23v10Ev();
extern void _ZN7S5292C12v1Ev();
extern void _ZN7S5292C12v2Ev();
extern void _ZN7S5292C12v3Ev();
extern void _ZN7S5292C12v4Ev();
static  VTBL_ENTRY vtc_S5292C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5292C1[0]),
  (VTBL_ENTRY)&_ZN7S5292C1D1Ev,
  (VTBL_ENTRY)&_ZN7S5292C1D0Ev,
  (VTBL_ENTRY)&_ZN7S5292C32v5Ev,
  (VTBL_ENTRY)&_ZN7S5292C22v6Ev,
  (VTBL_ENTRY)&_ZN7S5292C22v7Ev,
  (VTBL_ENTRY)&_ZN7S5292C22v8Ev,
  (VTBL_ENTRY)&_ZN7S5292C22v9Ev,
  (VTBL_ENTRY)&_ZN7S5292C23v10Ev,
  (VTBL_ENTRY)&_ZN7S5292C12v1Ev,
  (VTBL_ENTRY)&_ZN7S5292C12v2Ev,
  (VTBL_ENTRY)&_ZN7S5292C12v3Ev,
  (VTBL_ENTRY)&_ZN7S5292C12v4Ev,
};
extern VTBL_ENTRY _ZTI7S5292C1[];
extern  VTBL_ENTRY _ZTV7S5292C1[];
Class_Descriptor cd_S5292C1 = {  "S5292C1", // class name
  bases_S5292C1, 2,
  &(vtc_S5292C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(200,136), // object size
  NSPAIRA(_ZTI7S5292C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S5292C1),14, //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  S5290C3  {
  virtual  ~S5290C3(); // _ZN7S5290C3D1Ev
  virtual void  v5(); // _ZN7S5290C32v5Ev
  S5290C3(); // tgen
};
//SIG(-1 S5290C3) C1{ vd v1}


 S5290C3 ::~S5290C3(){ note_dtor("S5290C3", this);}
void  S5290C3 ::v5(){vfunc_called(this, "_ZN7S5290C32v5Ev");}
S5290C3 ::S5290C3(){ note_ctor("S5290C3", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S5290C3C1Ev();
extern void _ZN7S5290C3D1Ev();
Name_Map name_map_S5290C3[] = {
  NSPAIR(_ZN7S5290C3C1Ev),
  NSPAIR(_ZN7S5290C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S5290C3[];
extern void _ZN7S5290C3D1Ev();
extern void _ZN7S5290C3D0Ev();
extern void _ZN7S5290C32v5Ev();
static  VTBL_ENTRY vtc_S5290C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5290C3[0]),
  (VTBL_ENTRY)&_ZN7S5290C3D1Ev,
  (VTBL_ENTRY)&_ZN7S5290C3D0Ev,
  (VTBL_ENTRY)&_ZN7S5290C32v5Ev,
};
extern VTBL_ENTRY _ZTI7S5290C3[];
extern  VTBL_ENTRY _ZTV7S5290C3[];
Class_Descriptor cd_S5290C3 = {  "S5290C3", // class name
  0,0,//no base classes
  &(vtc_S5290C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S5290C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S5290C3),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  S5290C2  : S5290C3 {
  ::S3625C18_nt s5290c2f0;
  ::S21579C7_nt s5290c2f1;
  char s5290c2f2[4];
  ::S3625C18_nt s5290c2f3;
  ::S3625C18_nt s5290c2f4;
  ::S3625C18_nt s5290c2f5;
  ::S3625C18_nt s5290c2f6;
  ::S21579C10 s5290c2f7;
  int s5290c2f8[3];
  void *s5290c2f9;
  virtual  ~S5290C2(); // _ZN7S5290C2D1Ev
  virtual void  v6(); // _ZN7S5290C22v6Ev
  virtual void  v7(); // _ZN7S5290C22v7Ev
  virtual void  v8(); // _ZN7S5290C22v8Ev
  virtual void  v9(); // _ZN7S5290C22v9Ev
  virtual void  v10(); // _ZN7S5290C23v10Ev
  S5290C2(); // tgen
};
//SIG(-1 S5290C2) C1{ BC2{ vd v6} vd v1 v2 v3 v4 v5 FC3{ m Fp Fi FC4{ m}} FC5{ m Fp[2]} Fc[4] FC3 FC3 FC3 FC3 FC6{ m Fp Fi[2] Fp[2]} Fi[3] Fp}


 S5290C2 ::~S5290C2(){ note_dtor("S5290C2", this);}
void  S5290C2 ::v6(){vfunc_called(this, "_ZN7S5290C22v6Ev");}
void  S5290C2 ::v7(){vfunc_called(this, "_ZN7S5290C22v7Ev");}
void  S5290C2 ::v8(){vfunc_called(this, "_ZN7S5290C22v8Ev");}
void  S5290C2 ::v9(){vfunc_called(this, "_ZN7S5290C22v9Ev");}
void  S5290C2 ::v10(){vfunc_called(this, "_ZN7S5290C23v10Ev");}
S5290C2 ::S5290C2(){ note_ctor("S5290C2", this);} // tgen

static void Test_S5290C2()
{
  extern Class_Descriptor cd_S5290C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(22,29)];
    init_test(&cd_S5290C2, buf);
    S5290C2 *dp, &lv = *(dp=new (buf) S5290C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(168,112), "sizeof(S5290C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5290C2)");
    check_base_class_offset(lv, (S5290C3*), 0, "S5290C2");
    check_field_offset(lv, s5290c2f0, ABISELECT(8,4), "S5290C2.s5290c2f0");
    check_field_offset(lv, s5290c2f1, ABISELECT(24,16), "S5290C2.s5290c2f1");
    check_field_offset(lv, s5290c2f2, ABISELECT(40,24), "S5290C2.s5290c2f2");
    check_field_offset(lv, s5290c2f3, ABISELECT(48,28), "S5290C2.s5290c2f3");
    check_field_offset(lv, s5290c2f4, ABISELECT(64,40), "S5290C2.s5290c2f4");
    check_field_offset(lv, s5290c2f5, ABISELECT(80,52), "S5290C2.s5290c2f5");
    check_field_offset(lv, s5290c2f6, ABISELECT(96,64), "S5290C2.s5290c2f6");
    check_field_offset(lv, s5290c2f7, ABISELECT(112,76), "S5290C2.s5290c2f7");
    check_field_offset(lv, s5290c2f8, ABISELECT(144,96), "S5290C2.s5290c2f8");
    check_field_offset(lv, s5290c2f9, ABISELECT(160,108), "S5290C2.s5290c2f9");
    test_class_info(&lv, &cd_S5290C2);
    dp->~S5290C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5290C2(Test_S5290C2, "S5290C2", ABISELECT(168,112));

#else // __cplusplus

extern void _ZN7S5290C2C1Ev();
extern void _ZN7S5290C2D1Ev();
Name_Map name_map_S5290C2[] = {
  NSPAIR(_ZN7S5290C2C1Ev),
  NSPAIR(_ZN7S5290C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5290C3;
extern VTBL_ENTRY _ZTI7S5290C3[];
extern  VTBL_ENTRY _ZTV7S5290C3[];
static Base_Class bases_S5290C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5290C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI7S5290C2[];
extern void _ZN7S5290C2D1Ev();
extern void _ZN7S5290C2D0Ev();
extern void _ZN7S5290C32v5Ev();
extern void _ZN7S5290C22v6Ev();
extern void _ZN7S5290C22v7Ev();
extern void _ZN7S5290C22v8Ev();
extern void _ZN7S5290C22v9Ev();
extern void _ZN7S5290C23v10Ev();
static  VTBL_ENTRY vtc_S5290C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5290C2[0]),
  (VTBL_ENTRY)&_ZN7S5290C2D1Ev,
  (VTBL_ENTRY)&_ZN7S5290C2D0Ev,
  (VTBL_ENTRY)&_ZN7S5290C32v5Ev,
  (VTBL_ENTRY)&_ZN7S5290C22v6Ev,
  (VTBL_ENTRY)&_ZN7S5290C22v7Ev,
  (VTBL_ENTRY)&_ZN7S5290C22v8Ev,
  (VTBL_ENTRY)&_ZN7S5290C22v9Ev,
  (VTBL_ENTRY)&_ZN7S5290C23v10Ev,
};
extern VTBL_ENTRY _ZTI7S5290C2[];
extern  VTBL_ENTRY _ZTV7S5290C2[];
Class_Descriptor cd_S5290C2 = {  "S5290C2", // class name
  bases_S5290C2, 1,
  &(vtc_S5290C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(168,112), // object size
  NSPAIRA(_ZTI7S5290C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S5290C2),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  S5290C1  : S5290C2 {
  ::S3625C18_nt s5290c1f0;
  ::S3625C18_nt s5290c1f1;
  char s5290c1f2;
  virtual  ~S5290C1(); // _ZN7S5290C1D1Ev
  virtual void  v1(); // _ZN7S5290C12v1Ev
  virtual void  v2(); // _ZN7S5290C12v2Ev
  virtual void  v3(); // _ZN7S5290C12v3Ev
  virtual void  v4(); // _ZN7S5290C12v4Ev
  S5290C1(); // tgen
};
//SIG(1 S5290C1) C1{ BC2{ BC3{ vd v5} vd v6 v7 v8 v9 v10 FC4{ m Fp Fi FC5{ m}} FC6{ m Fp[2]} Fc[4] FC4 FC4 FC4 FC4 FC7{ m Fp Fi[2] Fp[2]} Fi[3] Fp} vd v1 v2 v3 v4 FC4 FC4 Fc}


 S5290C1 ::~S5290C1(){ note_dtor("S5290C1", this);}
void  S5290C1 ::v1(){vfunc_called(this, "_ZN7S5290C12v1Ev");}
void  S5290C1 ::v2(){vfunc_called(this, "_ZN7S5290C12v2Ev");}
void  S5290C1 ::v3(){vfunc_called(this, "_ZN7S5290C12v3Ev");}
void  S5290C1 ::v4(){vfunc_called(this, "_ZN7S5290C12v4Ev");}
S5290C1 ::S5290C1(){ note_ctor("S5290C1", this);} // tgen

static void Test_S5290C1()
{
  extern Class_Descriptor cd_S5290C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(27,36)];
    init_test(&cd_S5290C1, buf);
    S5290C1 *dp, &lv = *(dp=new (buf) S5290C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(208,140), "sizeof(S5290C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5290C1)");
    check_base_class_offset(lv, (S5290C3*)(S5290C2*), 0, "S5290C1");
    check_base_class_offset(lv, (S5290C2*), 0, "S5290C1");
    check_field_offset(lv, s5290c1f0, ABISELECT(168,112), "S5290C1.s5290c1f0");
    check_field_offset(lv, s5290c1f1, ABISELECT(184,124), "S5290C1.s5290c1f1");
    check_field_offset(lv, s5290c1f2, ABISELECT(200,136), "S5290C1.s5290c1f2");
    test_class_info(&lv, &cd_S5290C1);
    dp->~S5290C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5290C1(Test_S5290C1, "S5290C1", ABISELECT(208,140));

#else // __cplusplus

extern void _ZN7S5290C1C1Ev();
extern void _ZN7S5290C1D1Ev();
Name_Map name_map_S5290C1[] = {
  NSPAIR(_ZN7S5290C1C1Ev),
  NSPAIR(_ZN7S5290C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5290C3;
extern VTBL_ENTRY _ZTI7S5290C3[];
extern  VTBL_ENTRY _ZTV7S5290C3[];
extern Class_Descriptor cd_S5290C2;
extern VTBL_ENTRY _ZTI7S5290C2[];
extern  VTBL_ENTRY _ZTV7S5290C2[];
static Base_Class bases_S5290C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5290C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S5290C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S5290C1[];
extern void _ZN7S5290C1D1Ev();
extern void _ZN7S5290C1D0Ev();
extern void _ZN7S5290C32v5Ev();
extern void _ZN7S5290C22v6Ev();
extern void _ZN7S5290C22v7Ev();
extern void _ZN7S5290C22v8Ev();
extern void _ZN7S5290C22v9Ev();
extern void _ZN7S5290C23v10Ev();
extern void _ZN7S5290C12v1Ev();
extern void _ZN7S5290C12v2Ev();
extern void _ZN7S5290C12v3Ev();
extern void _ZN7S5290C12v4Ev();
static  VTBL_ENTRY vtc_S5290C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5290C1[0]),
  (VTBL_ENTRY)&_ZN7S5290C1D1Ev,
  (VTBL_ENTRY)&_ZN7S5290C1D0Ev,
  (VTBL_ENTRY)&_ZN7S5290C32v5Ev,
  (VTBL_ENTRY)&_ZN7S5290C22v6Ev,
  (VTBL_ENTRY)&_ZN7S5290C22v7Ev,
  (VTBL_ENTRY)&_ZN7S5290C22v8Ev,
  (VTBL_ENTRY)&_ZN7S5290C22v9Ev,
  (VTBL_ENTRY)&_ZN7S5290C23v10Ev,
  (VTBL_ENTRY)&_ZN7S5290C12v1Ev,
  (VTBL_ENTRY)&_ZN7S5290C12v2Ev,
  (VTBL_ENTRY)&_ZN7S5290C12v3Ev,
  (VTBL_ENTRY)&_ZN7S5290C12v4Ev,
};
extern VTBL_ENTRY _ZTI7S5290C1[];
extern  VTBL_ENTRY _ZTV7S5290C1[];
Class_Descriptor cd_S5290C1 = {  "S5290C1", // class name
  bases_S5290C1, 2,
  &(vtc_S5290C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(208,140), // object size
  NSPAIRA(_ZTI7S5290C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S5290C1),14, //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  S5202C3  {
  virtual  ~S5202C3(); // _ZN7S5202C3D1Ev
  virtual void  v4(); // _ZN7S5202C32v4Ev
  S5202C3(); // tgen
};
//SIG(-1 S5202C3) C1{ vd v1}


 S5202C3 ::~S5202C3(){ note_dtor("S5202C3", this);}
void  S5202C3 ::v4(){vfunc_called(this, "_ZN7S5202C32v4Ev");}
S5202C3 ::S5202C3(){ note_ctor("S5202C3", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S5202C3C1Ev();
extern void _ZN7S5202C3D1Ev();
Name_Map name_map_S5202C3[] = {
  NSPAIR(_ZN7S5202C3C1Ev),
  NSPAIR(_ZN7S5202C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S5202C3[];
extern void _ZN7S5202C3D1Ev();
extern void _ZN7S5202C3D0Ev();
extern void _ZN7S5202C32v4Ev();
static  VTBL_ENTRY vtc_S5202C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5202C3[0]),
  (VTBL_ENTRY)&_ZN7S5202C3D1Ev,
  (VTBL_ENTRY)&_ZN7S5202C3D0Ev,
  (VTBL_ENTRY)&_ZN7S5202C32v4Ev,
};
extern VTBL_ENTRY _ZTI7S5202C3[];
extern  VTBL_ENTRY _ZTV7S5202C3[];
Class_Descriptor cd_S5202C3 = {  "S5202C3", // class name
  0,0,//no base classes
  &(vtc_S5202C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S5202C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S5202C3),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  S5202C2  : S5202C3 {
  void *s5202c2f0[4];
  ::S21579C10 s5202c2f1;
  int s5202c2f2[5];
  char s5202c2f3[3];
  ::S3625C18_nt s5202c2f4;
  ::S3625C18_nt s5202c2f5;
  ::S3625C18_nt s5202c2f6;
  ::S3625C18_nt s5202c2f7;
  void *s5202c2f8;
  virtual  ~S5202C2(); // _ZN7S5202C2D1Ev
  virtual void  v5(); // _ZN7S5202C22v5Ev
  virtual void  v6(); // _ZN7S5202C22v6Ev
  virtual void  v7(); // _ZN7S5202C22v7Ev
  virtual void  v8(); // _ZN7S5202C22v8Ev
  virtual void  v9(); // _ZN7S5202C22v9Ev
  virtual void  v10(); // _ZN7S5202C23v10Ev
  virtual void  v11(); // _ZN7S5202C23v11Ev
  virtual void  v12(); // _ZN7S5202C23v12Ev
  S5202C2(); // tgen
};
//SIG(-1 S5202C2) C1{ BC2{ vd v9} vd v1 v2 v3 v4 v5 v6 v7 v8 Fp[4] FC3{ m Fp Fi[2] Fp[2]} Fi[5] Fc[3] FC4{ m Fp Fi FC5{ m}} FC4 FC4 FC4 Fp}


 S5202C2 ::~S5202C2(){ note_dtor("S5202C2", this);}
void  S5202C2 ::v5(){vfunc_called(this, "_ZN7S5202C22v5Ev");}
void  S5202C2 ::v6(){vfunc_called(this, "_ZN7S5202C22v6Ev");}
void  S5202C2 ::v7(){vfunc_called(this, "_ZN7S5202C22v7Ev");}
void  S5202C2 ::v8(){vfunc_called(this, "_ZN7S5202C22v8Ev");}
void  S5202C2 ::v9(){vfunc_called(this, "_ZN7S5202C22v9Ev");}
void  S5202C2 ::v10(){vfunc_called(this, "_ZN7S5202C23v10Ev");}
void  S5202C2 ::v11(){vfunc_called(this, "_ZN7S5202C23v11Ev");}
void  S5202C2 ::v12(){vfunc_called(this, "_ZN7S5202C23v12Ev");}
S5202C2 ::S5202C2(){ note_ctor("S5202C2", this);} // tgen

static void Test_S5202C2()
{
  extern Class_Descriptor cd_S5202C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(22,30)];
    init_test(&cd_S5202C2, buf);
    S5202C2 *dp, &lv = *(dp=new (buf) S5202C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(168,116), "sizeof(S5202C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5202C2)");
    check_base_class_offset(lv, (S5202C3*), 0, "S5202C2");
    check_field_offset(lv, s5202c2f0, ABISELECT(8,4), "S5202C2.s5202c2f0");
    check_field_offset(lv, s5202c2f1, ABISELECT(40,20), "S5202C2.s5202c2f1");
    check_field_offset(lv, s5202c2f2, ABISELECT(72,40), "S5202C2.s5202c2f2");
    check_field_offset(lv, s5202c2f3, ABISELECT(92,60), "S5202C2.s5202c2f3");
    check_field_offset(lv, s5202c2f4, ABISELECT(96,64), "S5202C2.s5202c2f4");
    check_field_offset(lv, s5202c2f5, ABISELECT(112,76), "S5202C2.s5202c2f5");
    check_field_offset(lv, s5202c2f6, ABISELECT(128,88), "S5202C2.s5202c2f6");
    check_field_offset(lv, s5202c2f7, ABISELECT(144,100), "S5202C2.s5202c2f7");
    check_field_offset(lv, s5202c2f8, ABISELECT(160,112), "S5202C2.s5202c2f8");
    test_class_info(&lv, &cd_S5202C2);
    dp->~S5202C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5202C2(Test_S5202C2, "S5202C2", ABISELECT(168,116));

#else // __cplusplus

extern void _ZN7S5202C2C1Ev();
extern void _ZN7S5202C2D1Ev();
Name_Map name_map_S5202C2[] = {
  NSPAIR(_ZN7S5202C2C1Ev),
  NSPAIR(_ZN7S5202C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5202C3;
extern VTBL_ENTRY _ZTI7S5202C3[];
extern  VTBL_ENTRY _ZTV7S5202C3[];
static Base_Class bases_S5202C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5202C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI7S5202C2[];
extern void _ZN7S5202C2D1Ev();
extern void _ZN7S5202C2D0Ev();
extern void _ZN7S5202C32v4Ev();
extern void _ZN7S5202C22v5Ev();
extern void _ZN7S5202C22v6Ev();
extern void _ZN7S5202C22v7Ev();
extern void _ZN7S5202C22v8Ev();
extern void _ZN7S5202C22v9Ev();
extern void _ZN7S5202C23v10Ev();
extern void _ZN7S5202C23v11Ev();
extern void _ZN7S5202C23v12Ev();
static  VTBL_ENTRY vtc_S5202C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5202C2[0]),
  (VTBL_ENTRY)&_ZN7S5202C2D1Ev,
  (VTBL_ENTRY)&_ZN7S5202C2D0Ev,
  (VTBL_ENTRY)&_ZN7S5202C32v4Ev,
  (VTBL_ENTRY)&_ZN7S5202C22v5Ev,
  (VTBL_ENTRY)&_ZN7S5202C22v6Ev,
  (VTBL_ENTRY)&_ZN7S5202C22v7Ev,
  (VTBL_ENTRY)&_ZN7S5202C22v8Ev,
  (VTBL_ENTRY)&_ZN7S5202C22v9Ev,
  (VTBL_ENTRY)&_ZN7S5202C23v10Ev,
  (VTBL_ENTRY)&_ZN7S5202C23v11Ev,
  (VTBL_ENTRY)&_ZN7S5202C23v12Ev,
};
extern VTBL_ENTRY _ZTI7S5202C2[];
extern  VTBL_ENTRY _ZTV7S5202C2[];
Class_Descriptor cd_S5202C2 = {  "S5202C2", // class name
  bases_S5202C2, 1,
  &(vtc_S5202C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(168,116), // object size
  NSPAIRA(_ZTI7S5202C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S5202C2),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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S5202C1  : S5202C2 {
  ::S21579C7_nt s5202c1f0;
  virtual  ~S5202C1(); // _ZN7S5202C1D1Ev
  virtual void  v1(); // _ZN7S5202C12v1Ev
  virtual void  v2(); // _ZN7S5202C12v2Ev
  virtual void  v3(); // _ZN7S5202C12v3Ev
  S5202C1(); // tgen
};
//SIG(1 S5202C1) C1{ BC2{ BC3{ vd v4} vd v5 v6 v7 v8 v9 v10 v11 v12 Fp[4] FC4{ m Fp Fi[2] Fp[2]} Fi[5] Fc[3] FC5{ m Fp Fi FC6{ m}} FC5 FC5 FC5 Fp} vd v1 v2 v3 FC7{ m Fp[2]}}


 S5202C1 ::~S5202C1(){ note_dtor("S5202C1", this);}
void  S5202C1 ::v1(){vfunc_called(this, "_ZN7S5202C12v1Ev");}
void  S5202C1 ::v2(){vfunc_called(this, "_ZN7S5202C12v2Ev");}
void  S5202C1 ::v3(){vfunc_called(this, "_ZN7S5202C12v3Ev");}
S5202C1 ::S5202C1(){ note_ctor("S5202C1", this);} // tgen

static void Test_S5202C1()
{
  extern Class_Descriptor cd_S5202C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(24,32)];
    init_test(&cd_S5202C1, buf);
    S5202C1 *dp, &lv = *(dp=new (buf) S5202C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(184,124), "sizeof(S5202C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5202C1)");
    check_base_class_offset(lv, (S5202C3*)(S5202C2*), 0, "S5202C1");
    check_base_class_offset(lv, (S5202C2*), 0, "S5202C1");
    check_field_offset(lv, s5202c1f0, ABISELECT(168,116), "S5202C1.s5202c1f0");
    test_class_info(&lv, &cd_S5202C1);
    dp->~S5202C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5202C1(Test_S5202C1, "S5202C1", ABISELECT(184,124));

#else // __cplusplus

extern void _ZN7S5202C1C1Ev();
extern void _ZN7S5202C1D1Ev();
Name_Map name_map_S5202C1[] = {
  NSPAIR(_ZN7S5202C1C1Ev),
  NSPAIR(_ZN7S5202C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5202C3;
extern VTBL_ENTRY _ZTI7S5202C3[];
extern  VTBL_ENTRY _ZTV7S5202C3[];
extern Class_Descriptor cd_S5202C2;
extern VTBL_ENTRY _ZTI7S5202C2[];
extern  VTBL_ENTRY _ZTV7S5202C2[];
static Base_Class bases_S5202C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5202C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S5202C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S5202C1[];
extern void _ZN7S5202C1D1Ev();
extern void _ZN7S5202C1D0Ev();
extern void _ZN7S5202C32v4Ev();
extern void _ZN7S5202C22v5Ev();
extern void _ZN7S5202C22v6Ev();
extern void _ZN7S5202C22v7Ev();
extern void _ZN7S5202C22v8Ev();
extern void _ZN7S5202C22v9Ev();
extern void _ZN7S5202C23v10Ev();
extern void _ZN7S5202C23v11Ev();
extern void _ZN7S5202C23v12Ev();
extern void _ZN7S5202C12v1Ev();
extern void _ZN7S5202C12v2Ev();
extern void _ZN7S5202C12v3Ev();
static  VTBL_ENTRY vtc_S5202C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5202C1[0]),
  (VTBL_ENTRY)&_ZN7S5202C1D1Ev,
  (VTBL_ENTRY)&_ZN7S5202C1D0Ev,
  (VTBL_ENTRY)&_ZN7S5202C32v4Ev,
  (VTBL_ENTRY)&_ZN7S5202C22v5Ev,
  (VTBL_ENTRY)&_ZN7S5202C22v6Ev,
  (VTBL_ENTRY)&_ZN7S5202C22v7Ev,
  (VTBL_ENTRY)&_ZN7S5202C22v8Ev,
  (VTBL_ENTRY)&_ZN7S5202C22v9Ev,
  (VTBL_ENTRY)&_ZN7S5202C23v10Ev,
  (VTBL_ENTRY)&_ZN7S5202C23v11Ev,
  (VTBL_ENTRY)&_ZN7S5202C23v12Ev,
  (VTBL_ENTRY)&_ZN7S5202C12v1Ev,
  (VTBL_ENTRY)&_ZN7S5202C12v2Ev,
  (VTBL_ENTRY)&_ZN7S5202C12v3Ev,
};
extern VTBL_ENTRY _ZTI7S5202C1[];
extern  VTBL_ENTRY _ZTV7S5202C1[];
Class_Descriptor cd_S5202C1 = {  "S5202C1", // class name
  bases_S5202C1, 2,
  &(vtc_S5202C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(184,124), // object size
  NSPAIRA(_ZTI7S5202C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S5202C1),16, //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  S5198C3  {
  virtual  ~S5198C3(); // _ZN7S5198C3D1Ev
  virtual void  v4(); // _ZN7S5198C32v4Ev
  S5198C3(); // tgen
};
//SIG(-1 S5198C3) C1{ vd v1}


 S5198C3 ::~S5198C3(){ note_dtor("S5198C3", this);}
void  S5198C3 ::v4(){vfunc_called(this, "_ZN7S5198C32v4Ev");}
S5198C3 ::S5198C3(){ note_ctor("S5198C3", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S5198C3C1Ev();
extern void _ZN7S5198C3D1Ev();
Name_Map name_map_S5198C3[] = {
  NSPAIR(_ZN7S5198C3C1Ev),
  NSPAIR(_ZN7S5198C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S5198C3[];
extern void _ZN7S5198C3D1Ev();
extern void _ZN7S5198C3D0Ev();
extern void _ZN7S5198C32v4Ev();
static  VTBL_ENTRY vtc_S5198C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5198C3[0]),
  (VTBL_ENTRY)&_ZN7S5198C3D1Ev,
  (VTBL_ENTRY)&_ZN7S5198C3D0Ev,
  (VTBL_ENTRY)&_ZN7S5198C32v4Ev,
};
extern VTBL_ENTRY _ZTI7S5198C3[];
extern  VTBL_ENTRY _ZTV7S5198C3[];
Class_Descriptor cd_S5198C3 = {  "S5198C3", // class name
  0,0,//no base classes
  &(vtc_S5198C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S5198C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S5198C3),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  S5198C2  : S5198C3 {
  ::S3625C18_nt s5198c2f0;
  ::S21579C7_nt s5198c2f1;
  char s5198c2f2[4];
  ::S3625C18_nt s5198c2f3;
  ::S3625C18_nt s5198c2f4;
  ::S3625C18_nt s5198c2f5;
  ::S3625C18_nt s5198c2f6;
  ::S21579C10 s5198c2f7;
  int s5198c2f8[3];
  void *s5198c2f9;
  virtual  ~S5198C2(); // _ZN7S5198C2D1Ev
  virtual void  v5(); // _ZN7S5198C22v5Ev
  virtual void  v6(); // _ZN7S5198C22v6Ev
  virtual void  v7(); // _ZN7S5198C22v7Ev
  virtual void  v8(); // _ZN7S5198C22v8Ev
  virtual void  v9(); // _ZN7S5198C22v9Ev
  S5198C2(); // tgen
};
//SIG(-1 S5198C2) C1{ BC2{ vd v6} vd v1 v2 v3 v4 v5 FC3{ m Fp Fi FC4{ m}} FC5{ m Fp[2]} Fc[4] FC3 FC3 FC3 FC3 FC6{ m Fp Fi[2] Fp[2]} Fi[3] Fp}


 S5198C2 ::~S5198C2(){ note_dtor("S5198C2", this);}
void  S5198C2 ::v5(){vfunc_called(this, "_ZN7S5198C22v5Ev");}
void  S5198C2 ::v6(){vfunc_called(this, "_ZN7S5198C22v6Ev");}
void  S5198C2 ::v7(){vfunc_called(this, "_ZN7S5198C22v7Ev");}
void  S5198C2 ::v8(){vfunc_called(this, "_ZN7S5198C22v8Ev");}
void  S5198C2 ::v9(){vfunc_called(this, "_ZN7S5198C22v9Ev");}
S5198C2 ::S5198C2(){ note_ctor("S5198C2", this);} // tgen

static void Test_S5198C2()
{
  extern Class_Descriptor cd_S5198C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(22,29)];
    init_test(&cd_S5198C2, buf);
    S5198C2 *dp, &lv = *(dp=new (buf) S5198C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(168,112), "sizeof(S5198C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5198C2)");
    check_base_class_offset(lv, (S5198C3*), 0, "S5198C2");
    check_field_offset(lv, s5198c2f0, ABISELECT(8,4), "S5198C2.s5198c2f0");
    check_field_offset(lv, s5198c2f1, ABISELECT(24,16), "S5198C2.s5198c2f1");
    check_field_offset(lv, s5198c2f2, ABISELECT(40,24), "S5198C2.s5198c2f2");
    check_field_offset(lv, s5198c2f3, ABISELECT(48,28), "S5198C2.s5198c2f3");
    check_field_offset(lv, s5198c2f4, ABISELECT(64,40), "S5198C2.s5198c2f4");
    check_field_offset(lv, s5198c2f5, ABISELECT(80,52), "S5198C2.s5198c2f5");
    check_field_offset(lv, s5198c2f6, ABISELECT(96,64), "S5198C2.s5198c2f6");
    check_field_offset(lv, s5198c2f7, ABISELECT(112,76), "S5198C2.s5198c2f7");
    check_field_offset(lv, s5198c2f8, ABISELECT(144,96), "S5198C2.s5198c2f8");
    check_field_offset(lv, s5198c2f9, ABISELECT(160,108), "S5198C2.s5198c2f9");
    test_class_info(&lv, &cd_S5198C2);
    dp->~S5198C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5198C2(Test_S5198C2, "S5198C2", ABISELECT(168,112));

#else // __cplusplus

extern void _ZN7S5198C2C1Ev();
extern void _ZN7S5198C2D1Ev();
Name_Map name_map_S5198C2[] = {
  NSPAIR(_ZN7S5198C2C1Ev),
  NSPAIR(_ZN7S5198C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5198C3;
extern VTBL_ENTRY _ZTI7S5198C3[];
extern  VTBL_ENTRY _ZTV7S5198C3[];
static Base_Class bases_S5198C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5198C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI7S5198C2[];
extern void _ZN7S5198C2D1Ev();
extern void _ZN7S5198C2D0Ev();
extern void _ZN7S5198C32v4Ev();
extern void _ZN7S5198C22v5Ev();
extern void _ZN7S5198C22v6Ev();
extern void _ZN7S5198C22v7Ev();
extern void _ZN7S5198C22v8Ev();
extern void _ZN7S5198C22v9Ev();
static  VTBL_ENTRY vtc_S5198C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5198C2[0]),
  (VTBL_ENTRY)&_ZN7S5198C2D1Ev,
  (VTBL_ENTRY)&_ZN7S5198C2D0Ev,
  (VTBL_ENTRY)&_ZN7S5198C32v4Ev,
  (VTBL_ENTRY)&_ZN7S5198C22v5Ev,
  (VTBL_ENTRY)&_ZN7S5198C22v6Ev,
  (VTBL_ENTRY)&_ZN7S5198C22v7Ev,
  (VTBL_ENTRY)&_ZN7S5198C22v8Ev,
  (VTBL_ENTRY)&_ZN7S5198C22v9Ev,
};
extern VTBL_ENTRY _ZTI7S5198C2[];
extern  VTBL_ENTRY _ZTV7S5198C2[];
Class_Descriptor cd_S5198C2 = {  "S5198C2", // class name
  bases_S5198C2, 1,
  &(vtc_S5198C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(168,112), // object size
  NSPAIRA(_ZTI7S5198C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S5198C2),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  S5198C1  : S5198C2 {
  ::S3625C18_nt s5198c1f0;
  ::S3625C18_nt s5198c1f1;
  ::S21579C7_nt s5198c1f2;
  char s5198c1f3;
  virtual  ~S5198C1(); // _ZN7S5198C1D1Ev
  virtual void  v1(); // _ZN7S5198C12v1Ev
  virtual void  v2(); // _ZN7S5198C12v2Ev
  virtual void  v3(); // _ZN7S5198C12v3Ev
  S5198C1(); // tgen
};
//SIG(1 S5198C1) C1{ BC2{ BC3{ vd v4} vd v5 v6 v7 v8 v9 FC4{ m Fp Fi FC5{ m}} FC6{ m Fp[2]} Fc[4] FC4 FC4 FC4 FC4 FC7{ m Fp Fi[2] Fp[2]} Fi[3] Fp} vd v1 v2 v3 FC4 FC4 FC6 Fc}


 S5198C1 ::~S5198C1(){ note_dtor("S5198C1", this);}
void  S5198C1 ::v1(){vfunc_called(this, "_ZN7S5198C12v1Ev");}
void  S5198C1 ::v2(){vfunc_called(this, "_ZN7S5198C12v2Ev");}
void  S5198C1 ::v3(){vfunc_called(this, "_ZN7S5198C12v3Ev");}
S5198C1 ::S5198C1(){ note_ctor("S5198C1", this);} // tgen

static void Test_S5198C1()
{
  extern Class_Descriptor cd_S5198C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(29,38)];
    init_test(&cd_S5198C1, buf);
    S5198C1 *dp, &lv = *(dp=new (buf) S5198C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(224,148), "sizeof(S5198C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5198C1)");
    check_base_class_offset(lv, (S5198C3*)(S5198C2*), 0, "S5198C1");
    check_base_class_offset(lv, (S5198C2*), 0, "S5198C1");
    check_field_offset(lv, s5198c1f0, ABISELECT(168,112), "S5198C1.s5198c1f0");
    check_field_offset(lv, s5198c1f1, ABISELECT(184,124), "S5198C1.s5198c1f1");
    check_field_offset(lv, s5198c1f2, ABISELECT(200,136), "S5198C1.s5198c1f2");
    check_field_offset(lv, s5198c1f3, ABISELECT(216,144), "S5198C1.s5198c1f3");
    test_class_info(&lv, &cd_S5198C1);
    dp->~S5198C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5198C1(Test_S5198C1, "S5198C1", ABISELECT(224,148));

#else // __cplusplus

extern void _ZN7S5198C1C1Ev();
extern void _ZN7S5198C1D1Ev();
Name_Map name_map_S5198C1[] = {
  NSPAIR(_ZN7S5198C1C1Ev),
  NSPAIR(_ZN7S5198C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5198C3;
extern VTBL_ENTRY _ZTI7S5198C3[];
extern  VTBL_ENTRY _ZTV7S5198C3[];
extern Class_Descriptor cd_S5198C2;
extern VTBL_ENTRY _ZTI7S5198C2[];
extern  VTBL_ENTRY _ZTV7S5198C2[];
static Base_Class bases_S5198C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5198C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S5198C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S5198C1[];
extern void _ZN7S5198C1D1Ev();
extern void _ZN7S5198C1D0Ev();
extern void _ZN7S5198C32v4Ev();
extern void _ZN7S5198C22v5Ev();
extern void _ZN7S5198C22v6Ev();
extern void _ZN7S5198C22v7Ev();
extern void _ZN7S5198C22v8Ev();
extern void _ZN7S5198C22v9Ev();
extern void _ZN7S5198C12v1Ev();
extern void _ZN7S5198C12v2Ev();
extern void _ZN7S5198C12v3Ev();
static  VTBL_ENTRY vtc_S5198C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5198C1[0]),
  (VTBL_ENTRY)&_ZN7S5198C1D1Ev,
  (VTBL_ENTRY)&_ZN7S5198C1D0Ev,
  (VTBL_ENTRY)&_ZN7S5198C32v4Ev,
  (VTBL_ENTRY)&_ZN7S5198C22v5Ev,
  (VTBL_ENTRY)&_ZN7S5198C22v6Ev,
  (VTBL_ENTRY)&_ZN7S5198C22v7Ev,
  (VTBL_ENTRY)&_ZN7S5198C22v8Ev,
  (VTBL_ENTRY)&_ZN7S5198C22v9Ev,
  (VTBL_ENTRY)&_ZN7S5198C12v1Ev,
  (VTBL_ENTRY)&_ZN7S5198C12v2Ev,
  (VTBL_ENTRY)&_ZN7S5198C12v3Ev,
};
extern VTBL_ENTRY _ZTI7S5198C1[];
extern  VTBL_ENTRY _ZTV7S5198C1[];
Class_Descriptor cd_S5198C1 = {  "S5198C1", // class name
  bases_S5198C1, 2,
  &(vtc_S5198C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(224,148), // object size
  NSPAIRA(_ZTI7S5198C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S5198C1),13, //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  S5199C3  {
  virtual  ~S5199C3(); // _ZN7S5199C3D1Ev
  virtual void  v4(); // _ZN7S5199C32v4Ev
  S5199C3(); // tgen
};
//SIG(-1 S5199C3) C1{ vd v1}


 S5199C3 ::~S5199C3(){ note_dtor("S5199C3", this);}
void  S5199C3 ::v4(){vfunc_called(this, "_ZN7S5199C32v4Ev");}
S5199C3 ::S5199C3(){ note_ctor("S5199C3", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S5199C3C1Ev();
extern void _ZN7S5199C3D1Ev();
Name_Map name_map_S5199C3[] = {
  NSPAIR(_ZN7S5199C3C1Ev),
  NSPAIR(_ZN7S5199C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S5199C3[];
extern void _ZN7S5199C3D1Ev();
extern void _ZN7S5199C3D0Ev();
extern void _ZN7S5199C32v4Ev();
static  VTBL_ENTRY vtc_S5199C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5199C3[0]),
  (VTBL_ENTRY)&_ZN7S5199C3D1Ev,
  (VTBL_ENTRY)&_ZN7S5199C3D0Ev,
  (VTBL_ENTRY)&_ZN7S5199C32v4Ev,
};
extern VTBL_ENTRY _ZTI7S5199C3[];
extern  VTBL_ENTRY _ZTV7S5199C3[];
Class_Descriptor cd_S5199C3 = {  "S5199C3", // class name
  0,0,//no base classes
  &(vtc_S5199C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S5199C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S5199C3),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  S5199C2  : S5199C3 {
  ::S3625C18_nt s5199c2f0;
  ::S21579C7_nt s5199c2f1;
  char s5199c2f2[4];
  ::S3625C18_nt s5199c2f3;
  ::S3625C18_nt s5199c2f4;
  ::S3625C18_nt s5199c2f5;
  ::S3625C18_nt s5199c2f6;
  ::S21579C10 s5199c2f7;
  int s5199c2f8[3];
  void *s5199c2f9;
  virtual  ~S5199C2(); // _ZN7S5199C2D1Ev
  virtual void  v5(); // _ZN7S5199C22v5Ev
  virtual void  v6(); // _ZN7S5199C22v6Ev
  virtual void  v7(); // _ZN7S5199C22v7Ev
  virtual void  v8(); // _ZN7S5199C22v8Ev
  virtual void  v9(); // _ZN7S5199C22v9Ev
  S5199C2(); // tgen
};
//SIG(-1 S5199C2) C1{ BC2{ vd v6} vd v1 v2 v3 v4 v5 FC3{ m Fp Fi FC4{ m}} FC5{ m Fp[2]} Fc[4] FC3 FC3 FC3 FC3 FC6{ m Fp Fi[2] Fp[2]} Fi[3] Fp}


 S5199C2 ::~S5199C2(){ note_dtor("S5199C2", this);}
void  S5199C2 ::v5(){vfunc_called(this, "_ZN7S5199C22v5Ev");}
void  S5199C2 ::v6(){vfunc_called(this, "_ZN7S5199C22v6Ev");}
void  S5199C2 ::v7(){vfunc_called(this, "_ZN7S5199C22v7Ev");}
void  S5199C2 ::v8(){vfunc_called(this, "_ZN7S5199C22v8Ev");}
void  S5199C2 ::v9(){vfunc_called(this, "_ZN7S5199C22v9Ev");}
S5199C2 ::S5199C2(){ note_ctor("S5199C2", this);} // tgen

static void Test_S5199C2()
{
  extern Class_Descriptor cd_S5199C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(22,29)];
    init_test(&cd_S5199C2, buf);
    S5199C2 *dp, &lv = *(dp=new (buf) S5199C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(168,112), "sizeof(S5199C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5199C2)");
    check_base_class_offset(lv, (S5199C3*), 0, "S5199C2");
    check_field_offset(lv, s5199c2f0, ABISELECT(8,4), "S5199C2.s5199c2f0");
    check_field_offset(lv, s5199c2f1, ABISELECT(24,16), "S5199C2.s5199c2f1");
    check_field_offset(lv, s5199c2f2, ABISELECT(40,24), "S5199C2.s5199c2f2");
    check_field_offset(lv, s5199c2f3, ABISELECT(48,28), "S5199C2.s5199c2f3");
    check_field_offset(lv, s5199c2f4, ABISELECT(64,40), "S5199C2.s5199c2f4");
    check_field_offset(lv, s5199c2f5, ABISELECT(80,52), "S5199C2.s5199c2f5");
    check_field_offset(lv, s5199c2f6, ABISELECT(96,64), "S5199C2.s5199c2f6");
    check_field_offset(lv, s5199c2f7, ABISELECT(112,76), "S5199C2.s5199c2f7");
    check_field_offset(lv, s5199c2f8, ABISELECT(144,96), "S5199C2.s5199c2f8");
    check_field_offset(lv, s5199c2f9, ABISELECT(160,108), "S5199C2.s5199c2f9");
    test_class_info(&lv, &cd_S5199C2);
    dp->~S5199C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5199C2(Test_S5199C2, "S5199C2", ABISELECT(168,112));

#else // __cplusplus

extern void _ZN7S5199C2C1Ev();
extern void _ZN7S5199C2D1Ev();
Name_Map name_map_S5199C2[] = {
  NSPAIR(_ZN7S5199C2C1Ev),
  NSPAIR(_ZN7S5199C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5199C3;
extern VTBL_ENTRY _ZTI7S5199C3[];
extern  VTBL_ENTRY _ZTV7S5199C3[];
static Base_Class bases_S5199C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5199C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI7S5199C2[];
extern void _ZN7S5199C2D1Ev();
extern void _ZN7S5199C2D0Ev();
extern void _ZN7S5199C32v4Ev();
extern void _ZN7S5199C22v5Ev();
extern void _ZN7S5199C22v6Ev();
extern void _ZN7S5199C22v7Ev();
extern void _ZN7S5199C22v8Ev();
extern void _ZN7S5199C22v9Ev();
static  VTBL_ENTRY vtc_S5199C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5199C2[0]),
  (VTBL_ENTRY)&_ZN7S5199C2D1Ev,
  (VTBL_ENTRY)&_ZN7S5199C2D0Ev,
  (VTBL_ENTRY)&_ZN7S5199C32v4Ev,
  (VTBL_ENTRY)&_ZN7S5199C22v5Ev,
  (VTBL_ENTRY)&_ZN7S5199C22v6Ev,
  (VTBL_ENTRY)&_ZN7S5199C22v7Ev,
  (VTBL_ENTRY)&_ZN7S5199C22v8Ev,
  (VTBL_ENTRY)&_ZN7S5199C22v9Ev,
};
extern VTBL_ENTRY _ZTI7S5199C2[];
extern  VTBL_ENTRY _ZTV7S5199C2[];
Class_Descriptor cd_S5199C2 = {  "S5199C2", // class name
  bases_S5199C2, 1,
  &(vtc_S5199C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(168,112), // object size
  NSPAIRA(_ZTI7S5199C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S5199C2),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  S5199C1  : S5199C2 {
  ::S21579C7_nt s5199c1f0;
  ::S3625C18_nt s5199c1f1;
  ::S3625C18_nt s5199c1f2;
  virtual  ~S5199C1(); // _ZN7S5199C1D1Ev
  virtual void  v1(); // _ZN7S5199C12v1Ev
  virtual void  v2(); // _ZN7S5199C12v2Ev
  virtual void  v3(); // _ZN7S5199C12v3Ev
  S5199C1(); // tgen
};
//SIG(1 S5199C1) C1{ BC2{ BC3{ vd v4} vd v5 v6 v7 v8 v9 FC4{ m Fp Fi FC5{ m}} FC6{ m Fp[2]} Fc[4] FC4 FC4 FC4 FC4 FC7{ m Fp Fi[2] Fp[2]} Fi[3] Fp} vd v1 v2 v3 FC6 FC4 FC4}


 S5199C1 ::~S5199C1(){ note_dtor("S5199C1", this);}
void  S5199C1 ::v1(){vfunc_called(this, "_ZN7S5199C12v1Ev");}
void  S5199C1 ::v2(){vfunc_called(this, "_ZN7S5199C12v2Ev");}
void  S5199C1 ::v3(){vfunc_called(this, "_ZN7S5199C12v3Ev");}
S5199C1 ::S5199C1(){ note_ctor("S5199C1", this);} // tgen

static void Test_S5199C1()
{
  extern Class_Descriptor cd_S5199C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(28,37)];
    init_test(&cd_S5199C1, buf);
    S5199C1 *dp, &lv = *(dp=new (buf) S5199C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(216,144), "sizeof(S5199C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5199C1)");
    check_base_class_offset(lv, (S5199C3*)(S5199C2*), 0, "S5199C1");
    check_base_class_offset(lv, (S5199C2*), 0, "S5199C1");
    check_field_offset(lv, s5199c1f0, ABISELECT(168,112), "S5199C1.s5199c1f0");
    check_field_offset(lv, s5199c1f1, ABISELECT(184,120), "S5199C1.s5199c1f1");
    check_field_offset(lv, s5199c1f2, ABISELECT(200,132), "S5199C1.s5199c1f2");
    test_class_info(&lv, &cd_S5199C1);
    dp->~S5199C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5199C1(Test_S5199C1, "S5199C1", ABISELECT(216,144));

#else // __cplusplus

extern void _ZN7S5199C1C1Ev();
extern void _ZN7S5199C1D1Ev();
Name_Map name_map_S5199C1[] = {
  NSPAIR(_ZN7S5199C1C1Ev),
  NSPAIR(_ZN7S5199C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5199C3;
extern VTBL_ENTRY _ZTI7S5199C3[];
extern  VTBL_ENTRY _ZTV7S5199C3[];
extern Class_Descriptor cd_S5199C2;
extern VTBL_ENTRY _ZTI7S5199C2[];
extern  VTBL_ENTRY _ZTV7S5199C2[];
static Base_Class bases_S5199C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5199C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S5199C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S5199C1[];
extern void _ZN7S5199C1D1Ev();
extern void _ZN7S5199C1D0Ev();
extern void _ZN7S5199C32v4Ev();
extern void _ZN7S5199C22v5Ev();
extern void _ZN7S5199C22v6Ev();
extern void _ZN7S5199C22v7Ev();
extern void _ZN7S5199C22v8Ev();
extern void _ZN7S5199C22v9Ev();
extern void _ZN7S5199C12v1Ev();
extern void _ZN7S5199C12v2Ev();
extern void _ZN7S5199C12v3Ev();
static  VTBL_ENTRY vtc_S5199C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5199C1[0]),
  (VTBL_ENTRY)&_ZN7S5199C1D1Ev,
  (VTBL_ENTRY)&_ZN7S5199C1D0Ev,
  (VTBL_ENTRY)&_ZN7S5199C32v4Ev,
  (VTBL_ENTRY)&_ZN7S5199C22v5Ev,
  (VTBL_ENTRY)&_ZN7S5199C22v6Ev,
  (VTBL_ENTRY)&_ZN7S5199C22v7Ev,
  (VTBL_ENTRY)&_ZN7S5199C22v8Ev,
  (VTBL_ENTRY)&_ZN7S5199C22v9Ev,
  (VTBL_ENTRY)&_ZN7S5199C12v1Ev,
  (VTBL_ENTRY)&_ZN7S5199C12v2Ev,
  (VTBL_ENTRY)&_ZN7S5199C12v3Ev,
};
extern VTBL_ENTRY _ZTI7S5199C1[];
extern  VTBL_ENTRY _ZTV7S5199C1[];
Class_Descriptor cd_S5199C1 = {  "S5199C1", // class name
  bases_S5199C1, 2,
  &(vtc_S5199C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(216,144), // object size
  NSPAIRA(_ZTI7S5199C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S5199C1),13, //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  S932C5  {
  char s932c5f0;
  int s932c5f1;
  virtual  ~S932C5(); // _ZN6S932C5D1Ev
  virtual void  v6(); // _ZN6S932C52v6Ev
  S932C5(); // tgen
};
//SIG(-1 S932C5) C1{ vd v1 Fc Fi}


 S932C5 ::~S932C5(){ note_dtor("S932C5", this);}
void  S932C5 ::v6(){vfunc_called(this, "_ZN6S932C52v6Ev");}
S932C5 ::S932C5(){ note_ctor("S932C5", this);} // tgen

static void Test_S932C5()
{
  extern Class_Descriptor cd_S932C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S932C5, buf);
    S932C5 *dp, &lv = *(dp=new (buf) S932C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S932C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S932C5)");
    check_field_offset(lv, s932c5f0, ABISELECT(8,4), "S932C5.s932c5f0");
    check_field_offset(lv, s932c5f1, ABISELECT(12,8), "S932C5.s932c5f1");
    test_class_info(&lv, &cd_S932C5);
    dp->~S932C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS932C5(Test_S932C5, "S932C5", ABISELECT(16,12));

#else // __cplusplus

extern void _ZN6S932C5C1Ev();
extern void _ZN6S932C5D1Ev();
Name_Map name_map_S932C5[] = {
  NSPAIR(_ZN6S932C5C1Ev),
  NSPAIR(_ZN6S932C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI6S932C5[];
extern void _ZN6S932C5D1Ev();
extern void _ZN6S932C5D0Ev();
extern void _ZN6S932C52v6Ev();
static  VTBL_ENTRY vtc_S932C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S932C5[0]),
  (VTBL_ENTRY)&_ZN6S932C5D1Ev,
  (VTBL_ENTRY)&_ZN6S932C5D0Ev,
  (VTBL_ENTRY)&_ZN6S932C52v6Ev,
};
extern VTBL_ENTRY _ZTI6S932C5[];
extern  VTBL_ENTRY _ZTV6S932C5[];
Class_Descriptor cd_S932C5 = {  "S932C5", // class name
  0,0,//no base classes
  &(vtc_S932C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI6S932C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV6S932C5),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  S932C4  : S932C5 {
  void *s932c4f0;
  char s932c4f1[2];
  virtual  ~S932C4(); // _ZN6S932C4D1Ev
  virtual void  v7(); // _ZN6S932C42v7Ev
  S932C4(); // tgen
};
//SIG(-1 S932C4) C1{ BC2{ vd v2 Fc Fi} vd v1 Fp Fc[2]}


 S932C4 ::~S932C4(){ note_dtor("S932C4", this);}
void  S932C4 ::v7(){vfunc_called(this, "_ZN6S932C42v7Ev");}
S932C4 ::S932C4(){ note_ctor("S932C4", this);} // tgen

static void Test_S932C4()
{
  extern Class_Descriptor cd_S932C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,6)];
    init_test(&cd_S932C4, buf);
    S932C4 *dp, &lv = *(dp=new (buf) S932C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S932C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S932C4)");
    check_base_class_offset(lv, (S932C5*), 0, "S932C4");
    check_field_offset(lv, s932c4f0, ABISELECT(16,12), "S932C4.s932c4f0");
    check_field_offset(lv, s932c4f1, ABISELECT(24,16), "S932C4.s932c4f1");
    test_class_info(&lv, &cd_S932C4);
    dp->~S932C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS932C4(Test_S932C4, "S932C4", ABISELECT(32,20));

#else // __cplusplus

extern void _ZN6S932C4C1Ev();
extern void _ZN6S932C4D1Ev();
Name_Map name_map_S932C4[] = {
  NSPAIR(_ZN6S932C4C1Ev),
  NSPAIR(_ZN6S932C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S932C5;
extern VTBL_ENTRY _ZTI6S932C5[];
extern  VTBL_ENTRY _ZTV6S932C5[];
static Base_Class bases_S932C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S932C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI6S932C4[];
extern void _ZN6S932C4D1Ev();
extern void _ZN6S932C4D0Ev();
extern void _ZN6S932C52v6Ev();
extern void _ZN6S932C42v7Ev();
static  VTBL_ENTRY vtc_S932C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S932C4[0]),
  (VTBL_ENTRY)&_ZN6S932C4D1Ev,
  (VTBL_ENTRY)&_ZN6S932C4D0Ev,
  (VTBL_ENTRY)&_ZN6S932C52v6Ev,
  (VTBL_ENTRY)&_ZN6S932C42v7Ev,
};
extern VTBL_ENTRY _ZTI6S932C4[];
extern  VTBL_ENTRY _ZTV6S932C4[];
Class_Descriptor cd_S932C4 = {  "S932C4", // class name
  bases_S932C4, 1,
  &(vtc_S932C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,20), // object size
  NSPAIRA(_ZTI6S932C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S932C4),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  S932C3  : S932C4 {
  void *s932c3f0[2];
  int s932c3f1[3];
  char s932c3f2[2];
  void *s932c3f3;
  virtual  ~S932C3(); // _ZN6S932C3D1Ev
  virtual void  v8(); // _ZN6S932C32v8Ev
  virtual void  v9(); // _ZN6S932C32v9Ev
  virtual void  v10(); // _ZN6S932C33v10Ev
  virtual void  v11(); // _ZN6S932C33v11Ev
  S932C3(); // tgen
};
//SIG(-1 S932C3) C1{ BC2{ BC3{ vd v5 Fc Fi} vd v6 Fp Fc[2]} vd v1 v2 v3 v4 Fp[2] Fi[3] Fc[2] Fp}


 S932C3 ::~S932C3(){ note_dtor("S932C3", this);}
void  S932C3 ::v8(){vfunc_called(this, "_ZN6S932C32v8Ev");}
void  S932C3 ::v9(){vfunc_called(this, "_ZN6S932C32v9Ev");}
void  S932C3 ::v10(){vfunc_called(this, "_ZN6S932C33v10Ev");}
void  S932C3 ::v11(){vfunc_called(this, "_ZN6S932C33v11Ev");}
S932C3 ::S932C3(){ note_ctor("S932C3", this);} // tgen

static void Test_S932C3()
{
  extern Class_Descriptor cd_S932C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,13)];
    init_test(&cd_S932C3, buf);
    S932C3 *dp, &lv = *(dp=new (buf) S932C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,48), "sizeof(S932C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S932C3)");
    check_base_class_offset(lv, (S932C5*)(S932C4*), 0, "S932C3");
    check_base_class_offset(lv, (S932C4*), 0, "S932C3");
    check_field_offset(lv, s932c3f0, ABISELECT(32,20), "S932C3.s932c3f0");
    check_field_offset(lv, s932c3f1, ABISELECT(48,28), "S932C3.s932c3f1");
    check_field_offset(lv, s932c3f2, ABISELECT(60,40), "S932C3.s932c3f2");
    check_field_offset(lv, s932c3f3, ABISELECT(64,44), "S932C3.s932c3f3");
    test_class_info(&lv, &cd_S932C3);
    dp->~S932C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS932C3(Test_S932C3, "S932C3", ABISELECT(72,48));

#else // __cplusplus

extern void _ZN6S932C3C1Ev();
extern void _ZN6S932C3D1Ev();
Name_Map name_map_S932C3[] = {
  NSPAIR(_ZN6S932C3C1Ev),
  NSPAIR(_ZN6S932C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S932C5;
extern VTBL_ENTRY _ZTI6S932C5[];
extern  VTBL_ENTRY _ZTV6S932C5[];
extern Class_Descriptor cd_S932C4;
extern VTBL_ENTRY _ZTI6S932C4[];
extern  VTBL_ENTRY _ZTV6S932C4[];
static Base_Class bases_S932C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S932C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S932C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S932C3[];
extern void _ZN6S932C3D1Ev();
extern void _ZN6S932C3D0Ev();
extern void _ZN6S932C52v6Ev();
extern void _ZN6S932C42v7Ev();
extern void _ZN6S932C32v8Ev();
extern void _ZN6S932C32v9Ev();
extern void _ZN6S932C33v10Ev();
extern void _ZN6S932C33v11Ev();
static  VTBL_ENTRY vtc_S932C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S932C3[0]),
  (VTBL_ENTRY)&_ZN6S932C3D1Ev,
  (VTBL_ENTRY)&_ZN6S932C3D0Ev,
  (VTBL_ENTRY)&_ZN6S932C52v6Ev,
  (VTBL_ENTRY)&_ZN6S932C42v7Ev,
  (VTBL_ENTRY)&_ZN6S932C32v8Ev,
  (VTBL_ENTRY)&_ZN6S932C32v9Ev,
  (VTBL_ENTRY)&_ZN6S932C33v10Ev,
  (VTBL_ENTRY)&_ZN6S932C33v11Ev,
};
extern VTBL_ENTRY _ZTI6S932C3[];
extern  VTBL_ENTRY _ZTV6S932C3[];
Class_Descriptor cd_S932C3 = {  "S932C3", // class name
  bases_S932C3, 2,
  &(vtc_S932C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,48), // object size
  NSPAIRA(_ZTI6S932C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S932C3),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  S932C2  : S932C3 {
  virtual  ~S932C2(); // _ZN6S932C2D1Ev
  virtual void  v12(); // _ZN6S932C23v12Ev
  virtual void  v13(); // _ZN6S932C23v13Ev
  virtual void  v14(); // _ZN6S932C23v14Ev
  S932C2(); // tgen
};
//SIG(-1 S932C2) C1{ BC2{ BC3{ BC4{ vd v4 Fc Fi} vd v5 Fp Fc[2]} vd v6 v7 v8 v9 Fp[2] Fi[3] Fc[2] Fp} vd v1 v2 v3}


 S932C2 ::~S932C2(){ note_dtor("S932C2", this);}
void  S932C2 ::v12(){vfunc_called(this, "_ZN6S932C23v12Ev");}
void  S932C2 ::v13(){vfunc_called(this, "_ZN6S932C23v13Ev");}
void  S932C2 ::v14(){vfunc_called(this, "_ZN6S932C23v14Ev");}
S932C2 ::S932C2(){ note_ctor("S932C2", this);} // tgen

static void Test_S932C2()
{
  extern Class_Descriptor cd_S932C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,13)];
    init_test(&cd_S932C2, buf);
    S932C2 *dp, &lv = *(dp=new (buf) S932C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,48), "sizeof(S932C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S932C2)");
    check_base_class_offset(lv, (S932C5*)(S932C4*)(S932C3*), 0, "S932C2");
    check_base_class_offset(lv, (S932C4*)(S932C3*), 0, "S932C2");
    check_base_class_offset(lv, (S932C3*), 0, "S932C2");
    test_class_info(&lv, &cd_S932C2);
    dp->~S932C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS932C2(Test_S932C2, "S932C2", ABISELECT(72,48));

#else // __cplusplus

extern void _ZN6S932C2C1Ev();
extern void _ZN6S932C2D1Ev();
Name_Map name_map_S932C2[] = {
  NSPAIR(_ZN6S932C2C1Ev),
  NSPAIR(_ZN6S932C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S932C5;
extern VTBL_ENTRY _ZTI6S932C5[];
extern  VTBL_ENTRY _ZTV6S932C5[];
extern Class_Descriptor cd_S932C4;
extern VTBL_ENTRY _ZTI6S932C4[];
extern  VTBL_ENTRY _ZTV6S932C4[];
extern Class_Descriptor cd_S932C3;
extern VTBL_ENTRY _ZTI6S932C3[];
extern  VTBL_ENTRY _ZTV6S932C3[];
static Base_Class bases_S932C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S932C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S932C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S932C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S932C2[];
extern void _ZN6S932C2D1Ev();
extern void _ZN6S932C2D0Ev();
extern void _ZN6S932C52v6Ev();
extern void _ZN6S932C42v7Ev();
extern void _ZN6S932C32v8Ev();
extern void _ZN6S932C32v9Ev();
extern void _ZN6S932C33v10Ev();
extern void _ZN6S932C33v11Ev();
extern void _ZN6S932C23v12Ev();
extern void _ZN6S932C23v13Ev();
extern void _ZN6S932C23v14Ev();
static  VTBL_ENTRY vtc_S932C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S932C2[0]),
  (VTBL_ENTRY)&_ZN6S932C2D1Ev,
  (VTBL_ENTRY)&_ZN6S932C2D0Ev,
  (VTBL_ENTRY)&_ZN6S932C52v6Ev,
  (VTBL_ENTRY)&_ZN6S932C42v7Ev,
  (VTBL_ENTRY)&_ZN6S932C32v8Ev,
  (VTBL_ENTRY)&_ZN6S932C32v9Ev,
  (VTBL_ENTRY)&_ZN6S932C33v10Ev,
  (VTBL_ENTRY)&_ZN6S932C33v11Ev,
  (VTBL_ENTRY)&_ZN6S932C23v12Ev,
  (VTBL_ENTRY)&_ZN6S932C23v13Ev,
  (VTBL_ENTRY)&_ZN6S932C23v14Ev,
};
extern VTBL_ENTRY _ZTI6S932C2[];
extern  VTBL_ENTRY _ZTV6S932C2[];
Class_Descriptor cd_S932C2 = {  "S932C2", // class name
  bases_S932C2, 3,
  &(vtc_S932C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,48), // object size
  NSPAIRA(_ZTI6S932C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S932C2),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  S932C6  {
  virtual  ~S932C6(); // _ZN6S932C6D1Ev
  virtual void  v15(); // _ZN6S932C63v15Ev
  S932C6(); // tgen
};
//SIG(-1 S932C6) C1{ vd v1}


 S932C6 ::~S932C6(){ note_dtor("S932C6", this);}
void  S932C6 ::v15(){vfunc_called(this, "_ZN6S932C63v15Ev");}
S932C6 ::S932C6(){ note_ctor("S932C6", this);} // tgen

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

#else // __cplusplus

extern void _ZN6S932C6C1Ev();
extern void _ZN6S932C6D1Ev();
Name_Map name_map_S932C6[] = {
  NSPAIR(_ZN6S932C6C1Ev),
  NSPAIR(_ZN6S932C6D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI6S932C6[];
extern void _ZN6S932C6D1Ev();
extern void _ZN6S932C6D0Ev();
extern void _ZN6S932C63v15Ev();
static  VTBL_ENTRY vtc_S932C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S932C6[0]),
  (VTBL_ENTRY)&_ZN6S932C6D1Ev,
  (VTBL_ENTRY)&_ZN6S932C6D0Ev,
  (VTBL_ENTRY)&_ZN6S932C63v15Ev,
};
extern VTBL_ENTRY _ZTI6S932C6[];
extern  VTBL_ENTRY _ZTV6S932C6[];
Class_Descriptor cd_S932C6 = {  "S932C6", // class name
  0,0,//no base classes
  &(vtc_S932C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI6S932C6),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV6S932C6),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  S932C1  : S932C2 , S932C6 {
  int s932c1f0[3];
  void *s932c1f1[2];
  virtual  ~S932C1(); // _ZN6S932C1D1Ev
  virtual void  v1(); // _ZN6S932C12v1Ev
  virtual void  v2(); // _ZN6S932C12v2Ev
  virtual void  v3(); // _ZN6S932C12v3Ev
  virtual void  v4(); // _ZN6S932C12v4Ev
  virtual void  v5(); // _ZN6S932C12v5Ev
  S932C1(); // tgen
};
//SIG(1 S932C1) C1{ BC2{ BC3{ BC4{ BC5{ vd v6 Fc Fi} vd v7 Fp Fc[2]} vd v8 v9 v10 v11 Fp[2] Fi[3] Fc[2] Fp} vd v12 v13 v14} BC6{ vd v15} vd v1 v2 v3 v4 v5 Fi[3] Fp[2]}


 S932C1 ::~S932C1(){ note_dtor("S932C1", this);}
void  S932C1 ::v1(){vfunc_called(this, "_ZN6S932C12v1Ev");}
void  S932C1 ::v2(){vfunc_called(this, "_ZN6S932C12v2Ev");}
void  S932C1 ::v3(){vfunc_called(this, "_ZN6S932C12v3Ev");}
void  S932C1 ::v4(){vfunc_called(this, "_ZN6S932C12v4Ev");}
void  S932C1 ::v5(){vfunc_called(this, "_ZN6S932C12v5Ev");}
S932C1 ::S932C1(){ note_ctor("S932C1", this);} // tgen

static void Test_S932C1()
{
  extern Class_Descriptor cd_S932C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(15,19)];
    init_test(&cd_S932C1, buf);
    S932C1 *dp, &lv = *(dp=new (buf) S932C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(112,72), "sizeof(S932C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S932C1)");
    check_base_class_offset(lv, (S932C5*)(S932C4*)(S932C3*)(S932C2*), 0, "S932C1");
    check_base_class_offset(lv, (S932C4*)(S932C3*)(S932C2*), 0, "S932C1");
    check_base_class_offset(lv, (S932C3*)(S932C2*), 0, "S932C1");
    check_base_class_offset(lv, (S932C2*), 0, "S932C1");
    check_base_class_offset(lv, (S932C6*), ABISELECT(72,48), "S932C1");
    check_field_offset(lv, s932c1f0, ABISELECT(80,52), "S932C1.s932c1f0");
    check_field_offset(lv, s932c1f1, ABISELECT(96,64), "S932C1.s932c1f1");
    test_class_info(&lv, &cd_S932C1);
    dp->~S932C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS932C1(Test_S932C1, "S932C1", ABISELECT(112,72));

#else // __cplusplus

extern void _ZN6S932C1C1Ev();
extern void _ZN6S932C1D1Ev();
Name_Map name_map_S932C1[] = {
  NSPAIR(_ZN6S932C1C1Ev),
  NSPAIR(_ZN6S932C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S932C5;
extern VTBL_ENTRY _ZTI6S932C5[];
extern  VTBL_ENTRY _ZTV6S932C5[];
extern Class_Descriptor cd_S932C4;
extern VTBL_ENTRY _ZTI6S932C4[];
extern  VTBL_ENTRY _ZTV6S932C4[];
extern Class_Descriptor cd_S932C3;
extern VTBL_ENTRY _ZTI6S932C3[];
extern  VTBL_ENTRY _ZTV6S932C3[];
extern Class_Descriptor cd_S932C2;
extern VTBL_ENTRY _ZTI6S932C2[];
extern  VTBL_ENTRY _ZTV6S932C2[];
extern Class_Descriptor cd_S932C6;
extern VTBL_ENTRY _ZTI6S932C6[];
extern  VTBL_ENTRY _ZTV6S932C6[];
static Base_Class bases_S932C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S932C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S932C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S932C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S932C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S932C6,    ABISELECT(72,48), //bcp->offset
    18, //bcp->virtual_function_table_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 _ZTI6S932C1[];
extern void _ZN6S932C1D1Ev();
extern void _ZN6S932C1D0Ev();
extern void _ZN6S932C52v6Ev();
extern void _ZN6S932C42v7Ev();
extern void _ZN6S932C32v8Ev();
extern void _ZN6S932C32v9Ev();
extern void _ZN6S932C33v10Ev();
extern void _ZN6S932C33v11Ev();
extern void _ZN6S932C23v12Ev();
extern void _ZN6S932C23v13Ev();
extern void _ZN6S932C23v14Ev();
extern void _ZN6S932C12v1Ev();
extern void _ZN6S932C12v2Ev();
extern void _ZN6S932C12v3Ev();
extern void _ZN6S932C12v4Ev();
extern void _ZN6S932C12v5Ev();
extern void ABISELECT(_ZThn72_N6S932C1D1Ev,_ZThn48_N6S932C1D1Ev)();
extern void ABISELECT(_ZThn72_N6S932C1D0Ev,_ZThn48_N6S932C1D0Ev)();
extern void _ZN6S932C63v15Ev();
static  VTBL_ENTRY vtc_S932C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S932C1[0]),
  (VTBL_ENTRY)&_ZN6S932C1D1Ev,
  (VTBL_ENTRY)&_ZN6S932C1D0Ev,
  (VTBL_ENTRY)&_ZN6S932C52v6Ev,
  (VTBL_ENTRY)&_ZN6S932C42v7Ev,
  (VTBL_ENTRY)&_ZN6S932C32v8Ev,
  (VTBL_ENTRY)&_ZN6S932C32v9Ev,
  (VTBL_ENTRY)&_ZN6S932C33v10Ev,
  (VTBL_ENTRY)&_ZN6S932C33v11Ev,
  (VTBL_ENTRY)&_ZN6S932C23v12Ev,
  (VTBL_ENTRY)&_ZN6S932C23v13Ev,
  (VTBL_ENTRY)&_ZN6S932C23v14Ev,
  (VTBL_ENTRY)&_ZN6S932C12v1Ev,
  (VTBL_ENTRY)&_ZN6S932C12v2Ev,
  (VTBL_ENTRY)&_ZN6S932C12v3Ev,
  (VTBL_ENTRY)&_ZN6S932C12v4Ev,
  (VTBL_ENTRY)&_ZN6S932C12v5Ev,
  ABISELECT(-72,-48),
  (VTBL_ENTRY)&(_ZTI6S932C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn72_N6S932C1D1Ev,_ZThn48_N6S932C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn72_N6S932C1D0Ev,_ZThn48_N6S932C1D0Ev),
  (VTBL_ENTRY)&_ZN6S932C63v15Ev,
};
extern VTBL_ENTRY _ZTI6S932C1[];
extern  VTBL_ENTRY _ZTV6S932C1[];
Class_Descriptor cd_S932C1 = {  "S932C1", // class name
  bases_S932C1, 5,
  &(vtc_S932C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(112,72), // object size
  NSPAIRA(_ZTI6S932C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV6S932C1),23, //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
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S5203C3  {
  virtual  ~S5203C3(); // _ZN7S5203C3D1Ev
  virtual void  v4(); // _ZN7S5203C32v4Ev
  S5203C3(); // tgen
};
//SIG(-1 S5203C3) C1{ vd v1}


 S5203C3 ::~S5203C3(){ note_dtor("S5203C3", this);}
void  S5203C3 ::v4(){vfunc_called(this, "_ZN7S5203C32v4Ev");}
S5203C3 ::S5203C3(){ note_ctor("S5203C3", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S5203C3C1Ev();
extern void _ZN7S5203C3D1Ev();
Name_Map name_map_S5203C3[] = {
  NSPAIR(_ZN7S5203C3C1Ev),
  NSPAIR(_ZN7S5203C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S5203C3[];
extern void _ZN7S5203C3D1Ev();
extern void _ZN7S5203C3D0Ev();
extern void _ZN7S5203C32v4Ev();
static  VTBL_ENTRY vtc_S5203C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5203C3[0]),
  (VTBL_ENTRY)&_ZN7S5203C3D1Ev,
  (VTBL_ENTRY)&_ZN7S5203C3D0Ev,
  (VTBL_ENTRY)&_ZN7S5203C32v4Ev,
};
extern VTBL_ENTRY _ZTI7S5203C3[];
extern  VTBL_ENTRY _ZTV7S5203C3[];
Class_Descriptor cd_S5203C3 = {  "S5203C3", // class name
  0,0,//no base classes
  &(vtc_S5203C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S5203C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S5203C3),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  S5203C2  : S5203C3 {
  void *s5203c2f0[4];
  ::S21579C10 s5203c2f1;
  int s5203c2f2[5];
  char s5203c2f3[3];
  ::S3625C18_nt s5203c2f4;
  ::S3625C18_nt s5203c2f5;
  ::S3625C18_nt s5203c2f6;
  ::S3625C18_nt s5203c2f7;
  void *s5203c2f8;
  virtual  ~S5203C2(); // _ZN7S5203C2D1Ev
  virtual void  v5(); // _ZN7S5203C22v5Ev
  virtual void  v6(); // _ZN7S5203C22v6Ev
  virtual void  v7(); // _ZN7S5203C22v7Ev
  virtual void  v8(); // _ZN7S5203C22v8Ev
  virtual void  v9(); // _ZN7S5203C22v9Ev
  virtual void  v10(); // _ZN7S5203C23v10Ev
  virtual void  v11(); // _ZN7S5203C23v11Ev
  virtual void  v12(); // _ZN7S5203C23v12Ev
  S5203C2(); // tgen
};
//SIG(-1 S5203C2) C1{ BC2{ vd v9} vd v1 v2 v3 v4 v5 v6 v7 v8 Fp[4] FC3{ m Fp Fi[2] Fp[2]} Fi[5] Fc[3] FC4{ m Fp Fi FC5{ m}} FC4 FC4 FC4 Fp}


 S5203C2 ::~S5203C2(){ note_dtor("S5203C2", this);}
void  S5203C2 ::v5(){vfunc_called(this, "_ZN7S5203C22v5Ev");}
void  S5203C2 ::v6(){vfunc_called(this, "_ZN7S5203C22v6Ev");}
void  S5203C2 ::v7(){vfunc_called(this, "_ZN7S5203C22v7Ev");}
void  S5203C2 ::v8(){vfunc_called(this, "_ZN7S5203C22v8Ev");}
void  S5203C2 ::v9(){vfunc_called(this, "_ZN7S5203C22v9Ev");}
void  S5203C2 ::v10(){vfunc_called(this, "_ZN7S5203C23v10Ev");}
void  S5203C2 ::v11(){vfunc_called(this, "_ZN7S5203C23v11Ev");}
void  S5203C2 ::v12(){vfunc_called(this, "_ZN7S5203C23v12Ev");}
S5203C2 ::S5203C2(){ note_ctor("S5203C2", this);} // tgen

static void Test_S5203C2()
{
  extern Class_Descriptor cd_S5203C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(22,30)];
    init_test(&cd_S5203C2, buf);
    S5203C2 *dp, &lv = *(dp=new (buf) S5203C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(168,116), "sizeof(S5203C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5203C2)");
    check_base_class_offset(lv, (S5203C3*), 0, "S5203C2");
    check_field_offset(lv, s5203c2f0, ABISELECT(8,4), "S5203C2.s5203c2f0");
    check_field_offset(lv, s5203c2f1, ABISELECT(40,20), "S5203C2.s5203c2f1");
    check_field_offset(lv, s5203c2f2, ABISELECT(72,40), "S5203C2.s5203c2f2");
    check_field_offset(lv, s5203c2f3, ABISELECT(92,60), "S5203C2.s5203c2f3");
    check_field_offset(lv, s5203c2f4, ABISELECT(96,64), "S5203C2.s5203c2f4");
    check_field_offset(lv, s5203c2f5, ABISELECT(112,76), "S5203C2.s5203c2f5");
    check_field_offset(lv, s5203c2f6, ABISELECT(128,88), "S5203C2.s5203c2f6");
    check_field_offset(lv, s5203c2f7, ABISELECT(144,100), "S5203C2.s5203c2f7");
    check_field_offset(lv, s5203c2f8, ABISELECT(160,112), "S5203C2.s5203c2f8");
    test_class_info(&lv, &cd_S5203C2);
    dp->~S5203C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5203C2(Test_S5203C2, "S5203C2", ABISELECT(168,116));

#else // __cplusplus

extern void _ZN7S5203C2C1Ev();
extern void _ZN7S5203C2D1Ev();
Name_Map name_map_S5203C2[] = {
  NSPAIR(_ZN7S5203C2C1Ev),
  NSPAIR(_ZN7S5203C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5203C3;
extern VTBL_ENTRY _ZTI7S5203C3[];
extern  VTBL_ENTRY _ZTV7S5203C3[];
static Base_Class bases_S5203C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5203C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI7S5203C2[];
extern void _ZN7S5203C2D1Ev();
extern void _ZN7S5203C2D0Ev();
extern void _ZN7S5203C32v4Ev();
extern void _ZN7S5203C22v5Ev();
extern void _ZN7S5203C22v6Ev();
extern void _ZN7S5203C22v7Ev();
extern void _ZN7S5203C22v8Ev();
extern void _ZN7S5203C22v9Ev();
extern void _ZN7S5203C23v10Ev();
extern void _ZN7S5203C23v11Ev();
extern void _ZN7S5203C23v12Ev();
static  VTBL_ENTRY vtc_S5203C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5203C2[0]),
  (VTBL_ENTRY)&_ZN7S5203C2D1Ev,
  (VTBL_ENTRY)&_ZN7S5203C2D0Ev,
  (VTBL_ENTRY)&_ZN7S5203C32v4Ev,
  (VTBL_ENTRY)&_ZN7S5203C22v5Ev,
  (VTBL_ENTRY)&_ZN7S5203C22v6Ev,
  (VTBL_ENTRY)&_ZN7S5203C22v7Ev,
  (VTBL_ENTRY)&_ZN7S5203C22v8Ev,
  (VTBL_ENTRY)&_ZN7S5203C22v9Ev,
  (VTBL_ENTRY)&_ZN7S5203C23v10Ev,
  (VTBL_ENTRY)&_ZN7S5203C23v11Ev,
  (VTBL_ENTRY)&_ZN7S5203C23v12Ev,
};
extern VTBL_ENTRY _ZTI7S5203C2[];
extern  VTBL_ENTRY _ZTV7S5203C2[];
Class_Descriptor cd_S5203C2 = {  "S5203C2", // class name
  bases_S5203C2, 1,
  &(vtc_S5203C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(168,116), // object size
  NSPAIRA(_ZTI7S5203C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S5203C2),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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S5203C1  : S5203C2 {
  virtual  ~S5203C1(); // _ZN7S5203C1D1Ev
  virtual void  v1(); // _ZN7S5203C12v1Ev
  virtual void  v2(); // _ZN7S5203C12v2Ev
  virtual void  v3(); // _ZN7S5203C12v3Ev
  S5203C1(); // tgen
};
//SIG(1 S5203C1) C1{ BC2{ BC3{ vd v4} vd v5 v6 v7 v8 v9 v10 v11 v12 Fp[4] FC4{ m Fp Fi[2] Fp[2]} Fi[5] Fc[3] FC5{ m Fp Fi FC6{ m}} FC5 FC5 FC5 Fp} vd v1 v2 v3}


 S5203C1 ::~S5203C1(){ note_dtor("S5203C1", this);}
void  S5203C1 ::v1(){vfunc_called(this, "_ZN7S5203C12v1Ev");}
void  S5203C1 ::v2(){vfunc_called(this, "_ZN7S5203C12v2Ev");}
void  S5203C1 ::v3(){vfunc_called(this, "_ZN7S5203C12v3Ev");}
S5203C1 ::S5203C1(){ note_ctor("S5203C1", this);} // tgen

static void Test_S5203C1()
{
  extern Class_Descriptor cd_S5203C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(22,30)];
    init_test(&cd_S5203C1, buf);
    S5203C1 *dp, &lv = *(dp=new (buf) S5203C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(168,116), "sizeof(S5203C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5203C1)");
    check_base_class_offset(lv, (S5203C3*)(S5203C2*), 0, "S5203C1");
    check_base_class_offset(lv, (S5203C2*), 0, "S5203C1");
    test_class_info(&lv, &cd_S5203C1);
    dp->~S5203C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5203C1(Test_S5203C1, "S5203C1", ABISELECT(168,116));

#else // __cplusplus

extern void _ZN7S5203C1C1Ev();
extern void _ZN7S5203C1D1Ev();
Name_Map name_map_S5203C1[] = {
  NSPAIR(_ZN7S5203C1C1Ev),
  NSPAIR(_ZN7S5203C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5203C3;
extern VTBL_ENTRY _ZTI7S5203C3[];
extern  VTBL_ENTRY _ZTV7S5203C3[];
extern Class_Descriptor cd_S5203C2;
extern VTBL_ENTRY _ZTI7S5203C2[];
extern  VTBL_ENTRY _ZTV7S5203C2[];
static Base_Class bases_S5203C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5203C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S5203C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S5203C1[];
extern void _ZN7S5203C1D1Ev();
extern void _ZN7S5203C1D0Ev();
extern void _ZN7S5203C32v4Ev();
extern void _ZN7S5203C22v5Ev();
extern void _ZN7S5203C22v6Ev();
extern void _ZN7S5203C22v7Ev();
extern void _ZN7S5203C22v8Ev();
extern void _ZN7S5203C22v9Ev();
extern void _ZN7S5203C23v10Ev();
extern void _ZN7S5203C23v11Ev();
extern void _ZN7S5203C23v12Ev();
extern void _ZN7S5203C12v1Ev();
extern void _ZN7S5203C12v2Ev();
extern void _ZN7S5203C12v3Ev();
static  VTBL_ENTRY vtc_S5203C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5203C1[0]),
  (VTBL_ENTRY)&_ZN7S5203C1D1Ev,
  (VTBL_ENTRY)&_ZN7S5203C1D0Ev,
  (VTBL_ENTRY)&_ZN7S5203C32v4Ev,
  (VTBL_ENTRY)&_ZN7S5203C22v5Ev,
  (VTBL_ENTRY)&_ZN7S5203C22v6Ev,
  (VTBL_ENTRY)&_ZN7S5203C22v7Ev,
  (VTBL_ENTRY)&_ZN7S5203C22v8Ev,
  (VTBL_ENTRY)&_ZN7S5203C22v9Ev,
  (VTBL_ENTRY)&_ZN7S5203C23v10Ev,
  (VTBL_ENTRY)&_ZN7S5203C23v11Ev,
  (VTBL_ENTRY)&_ZN7S5203C23v12Ev,
  (VTBL_ENTRY)&_ZN7S5203C12v1Ev,
  (VTBL_ENTRY)&_ZN7S5203C12v2Ev,
  (VTBL_ENTRY)&_ZN7S5203C12v3Ev,
};
extern VTBL_ENTRY _ZTI7S5203C1[];
extern  VTBL_ENTRY _ZTV7S5203C1[];
Class_Descriptor cd_S5203C1 = {  "S5203C1", // class name
  bases_S5203C1, 2,
  &(vtc_S5203C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(168,116), // object size
  NSPAIRA(_ZTI7S5203C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S5203C1),16, //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  S2392C4  {
  char s2392c4f0;
  int s2392c4f1;
  virtual  ~S2392C4(); // _ZN7S2392C4D1Ev
  virtual void  v6(); // _ZN7S2392C42v6Ev
  S2392C4(); // tgen
};
//SIG(-1 S2392C4) C1{ vd v1 Fc Fi}


 S2392C4 ::~S2392C4(){ note_dtor("S2392C4", this);}
void  S2392C4 ::v6(){vfunc_called(this, "_ZN7S2392C42v6Ev");}
S2392C4 ::S2392C4(){ note_ctor("S2392C4", this);} // tgen

static void Test_S2392C4()
{
  extern Class_Descriptor cd_S2392C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S2392C4, buf);
    S2392C4 *dp, &lv = *(dp=new (buf) S2392C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S2392C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2392C4)");
    check_field_offset(lv, s2392c4f0, ABISELECT(8,4), "S2392C4.s2392c4f0");
    check_field_offset(lv, s2392c4f1, ABISELECT(12,8), "S2392C4.s2392c4f1");
    test_class_info(&lv, &cd_S2392C4);
    dp->~S2392C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2392C4(Test_S2392C4, "S2392C4", ABISELECT(16,12));

#else // __cplusplus

extern void _ZN7S2392C4C1Ev();
extern void _ZN7S2392C4D1Ev();
Name_Map name_map_S2392C4[] = {
  NSPAIR(_ZN7S2392C4C1Ev),
  NSPAIR(_ZN7S2392C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S2392C4[];
extern void _ZN7S2392C4D1Ev();
extern void _ZN7S2392C4D0Ev();
extern void _ZN7S2392C42v6Ev();
static  VTBL_ENTRY vtc_S2392C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2392C4[0]),
  (VTBL_ENTRY)&_ZN7S2392C4D1Ev,
  (VTBL_ENTRY)&_ZN7S2392C4D0Ev,
  (VTBL_ENTRY)&_ZN7S2392C42v6Ev,
};
extern VTBL_ENTRY _ZTI7S2392C4[];
extern  VTBL_ENTRY _ZTV7S2392C4[];
Class_Descriptor cd_S2392C4 = {  "S2392C4", // class name
  0,0,//no base classes
  &(vtc_S2392C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI7S2392C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S2392C4),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  S2392C3  : S2392C4 {
  void *s2392c3f0;
  char s2392c3f1[2];
  virtual  ~S2392C3(); // _ZN7S2392C3D1Ev
  virtual void  v7(); // _ZN7S2392C32v7Ev
  S2392C3(); // tgen
};
//SIG(-1 S2392C3) C1{ BC2{ vd v2 Fc Fi} vd v1 Fp Fc[2]}


 S2392C3 ::~S2392C3(){ note_dtor("S2392C3", this);}
void  S2392C3 ::v7(){vfunc_called(this, "_ZN7S2392C32v7Ev");}
S2392C3 ::S2392C3(){ note_ctor("S2392C3", this);} // tgen

static void Test_S2392C3()
{
  extern Class_Descriptor cd_S2392C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,6)];
    init_test(&cd_S2392C3, buf);
    S2392C3 *dp, &lv = *(dp=new (buf) S2392C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S2392C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2392C3)");
    check_base_class_offset(lv, (S2392C4*), 0, "S2392C3");
    check_field_offset(lv, s2392c3f0, ABISELECT(16,12), "S2392C3.s2392c3f0");
    check_field_offset(lv, s2392c3f1, ABISELECT(24,16), "S2392C3.s2392c3f1");
    test_class_info(&lv, &cd_S2392C3);
    dp->~S2392C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2392C3(Test_S2392C3, "S2392C3", ABISELECT(32,20));

#else // __cplusplus

extern void _ZN7S2392C3C1Ev();
extern void _ZN7S2392C3D1Ev();
Name_Map name_map_S2392C3[] = {
  NSPAIR(_ZN7S2392C3C1Ev),
  NSPAIR(_ZN7S2392C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2392C4;
extern VTBL_ENTRY _ZTI7S2392C4[];
extern  VTBL_ENTRY _ZTV7S2392C4[];
static Base_Class bases_S2392C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2392C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI7S2392C3[];
extern void _ZN7S2392C3D1Ev();
extern void _ZN7S2392C3D0Ev();
extern void _ZN7S2392C42v6Ev();
extern void _ZN7S2392C32v7Ev();
static  VTBL_ENTRY vtc_S2392C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2392C3[0]),
  (VTBL_ENTRY)&_ZN7S2392C3D1Ev,
  (VTBL_ENTRY)&_ZN7S2392C3D0Ev,
  (VTBL_ENTRY)&_ZN7S2392C42v6Ev,
  (VTBL_ENTRY)&_ZN7S2392C32v7Ev,
};
extern VTBL_ENTRY _ZTI7S2392C3[];
extern  VTBL_ENTRY _ZTV7S2392C3[];
Class_Descriptor cd_S2392C3 = {  "S2392C3", // class name
  bases_S2392C3, 1,
  &(vtc_S2392C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,20), // object size
  NSPAIRA(_ZTI7S2392C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2392C3),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  S2392C2  : S2392C3 {
  void *s2392c2f0[2];
  int s2392c2f1[3];
  char s2392c2f2[2];
  void *s2392c2f3;
  virtual  ~S2392C2(); // _ZN7S2392C2D1Ev
  virtual void  v8(); // _ZN7S2392C22v8Ev
  virtual void  v9(); // _ZN7S2392C22v9Ev
  virtual void  v10(); // _ZN7S2392C23v10Ev
  virtual void  v11(); // _ZN7S2392C23v11Ev
  S2392C2(); // tgen
};
//SIG(-1 S2392C2) C1{ BC2{ BC3{ vd v5 Fc Fi} vd v6 Fp Fc[2]} vd v1 v2 v3 v4 Fp[2] Fi[3] Fc[2] Fp}


 S2392C2 ::~S2392C2(){ note_dtor("S2392C2", this);}
void  S2392C2 ::v8(){vfunc_called(this, "_ZN7S2392C22v8Ev");}
void  S2392C2 ::v9(){vfunc_called(this, "_ZN7S2392C22v9Ev");}
void  S2392C2 ::v10(){vfunc_called(this, "_ZN7S2392C23v10Ev");}
void  S2392C2 ::v11(){vfunc_called(this, "_ZN7S2392C23v11Ev");}
S2392C2 ::S2392C2(){ note_ctor("S2392C2", this);} // tgen

static void Test_S2392C2()
{
  extern Class_Descriptor cd_S2392C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,13)];
    init_test(&cd_S2392C2, buf);
    S2392C2 *dp, &lv = *(dp=new (buf) S2392C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,48), "sizeof(S2392C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2392C2)");
    check_base_class_offset(lv, (S2392C4*)(S2392C3*), 0, "S2392C2");
    check_base_class_offset(lv, (S2392C3*), 0, "S2392C2");
    check_field_offset(lv, s2392c2f0, ABISELECT(32,20), "S2392C2.s2392c2f0");
    check_field_offset(lv, s2392c2f1, ABISELECT(48,28), "S2392C2.s2392c2f1");
    check_field_offset(lv, s2392c2f2, ABISELECT(60,40), "S2392C2.s2392c2f2");
    check_field_offset(lv, s2392c2f3, ABISELECT(64,44), "S2392C2.s2392c2f3");
    test_class_info(&lv, &cd_S2392C2);
    dp->~S2392C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2392C2(Test_S2392C2, "S2392C2", ABISELECT(72,48));

#else // __cplusplus

extern void _ZN7S2392C2C1Ev();
extern void _ZN7S2392C2D1Ev();
Name_Map name_map_S2392C2[] = {
  NSPAIR(_ZN7S2392C2C1Ev),
  NSPAIR(_ZN7S2392C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2392C4;
extern VTBL_ENTRY _ZTI7S2392C4[];
extern  VTBL_ENTRY _ZTV7S2392C4[];
extern Class_Descriptor cd_S2392C3;
extern VTBL_ENTRY _ZTI7S2392C3[];
extern  VTBL_ENTRY _ZTV7S2392C3[];
static Base_Class bases_S2392C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2392C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S2392C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S2392C2[];
extern void _ZN7S2392C2D1Ev();
extern void _ZN7S2392C2D0Ev();
extern void _ZN7S2392C42v6Ev();
extern void _ZN7S2392C32v7Ev();
extern void _ZN7S2392C22v8Ev();
extern void _ZN7S2392C22v9Ev();
extern void _ZN7S2392C23v10Ev();
extern void _ZN7S2392C23v11Ev();
static  VTBL_ENTRY vtc_S2392C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2392C2[0]),
  (VTBL_ENTRY)&_ZN7S2392C2D1Ev,
  (VTBL_ENTRY)&_ZN7S2392C2D0Ev,
  (VTBL_ENTRY)&_ZN7S2392C42v6Ev,
  (VTBL_ENTRY)&_ZN7S2392C32v7Ev,
  (VTBL_ENTRY)&_ZN7S2392C22v8Ev,
  (VTBL_ENTRY)&_ZN7S2392C22v9Ev,
  (VTBL_ENTRY)&_ZN7S2392C23v10Ev,
  (VTBL_ENTRY)&_ZN7S2392C23v11Ev,
};
extern VTBL_ENTRY _ZTI7S2392C2[];
extern  VTBL_ENTRY _ZTV7S2392C2[];
Class_Descriptor cd_S2392C2 = {  "S2392C2", // class name
  bases_S2392C2, 2,
  &(vtc_S2392C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,48), // object size
  NSPAIRA(_ZTI7S2392C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2392C2),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  S2392C5  {
  virtual  ~S2392C5(); // _ZN7S2392C5D1Ev
  virtual void  v12(); // _ZN7S2392C53v12Ev
  S2392C5(); // tgen
};
//SIG(-1 S2392C5) C1{ vd v1}


 S2392C5 ::~S2392C5(){ note_dtor("S2392C5", this);}
void  S2392C5 ::v12(){vfunc_called(this, "_ZN7S2392C53v12Ev");}
S2392C5 ::S2392C5(){ note_ctor("S2392C5", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S2392C5C1Ev();
extern void _ZN7S2392C5D1Ev();
Name_Map name_map_S2392C5[] = {
  NSPAIR(_ZN7S2392C5C1Ev),
  NSPAIR(_ZN7S2392C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S2392C5[];
extern void _ZN7S2392C5D1Ev();
extern void _ZN7S2392C5D0Ev();
extern void _ZN7S2392C53v12Ev();
static  VTBL_ENTRY vtc_S2392C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2392C5[0]),
  (VTBL_ENTRY)&_ZN7S2392C5D1Ev,
  (VTBL_ENTRY)&_ZN7S2392C5D0Ev,
  (VTBL_ENTRY)&_ZN7S2392C53v12Ev,
};
extern VTBL_ENTRY _ZTI7S2392C5[];
extern  VTBL_ENTRY _ZTV7S2392C5[];
Class_Descriptor cd_S2392C5 = {  "S2392C5", // class name
  0,0,//no base classes
  &(vtc_S2392C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S2392C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S2392C5),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  S2392C1  : S2392C2 , S2392C5 {
  int s2392c1f0[2];
  void *s2392c1f1;
  char s2392c1f2[2];
  void *s2392c1f3[4];
  virtual  ~S2392C1(); // _ZN7S2392C1D1Ev
  virtual void  v1(); // _ZN7S2392C12v1Ev
  virtual void  v2(); // _ZN7S2392C12v2Ev
  virtual void  v3(); // _ZN7S2392C12v3Ev
  virtual void  v4(); // _ZN7S2392C12v4Ev
  virtual void  v5(); // _ZN7S2392C12v5Ev
  S2392C1(); // tgen
};
//SIG(1 S2392C1) C1{ BC2{ BC3{ BC4{ vd v6 Fc Fi} vd v7 Fp Fc[2]} vd v8 v9 v10 v11 Fp[2] Fi[3] Fc[2] Fp} BC5{ vd v12} vd v1 v2 v3 v4 v5 Fi[2] Fp Fc[2] Fp[4]}


 S2392C1 ::~S2392C1(){ note_dtor("S2392C1", this);}
void  S2392C1 ::v1(){vfunc_called(this, "_ZN7S2392C12v1Ev");}
void  S2392C1 ::v2(){vfunc_called(this, "_ZN7S2392C12v2Ev");}
void  S2392C1 ::v3(){vfunc_called(this, "_ZN7S2392C12v3Ev");}
void  S2392C1 ::v4(){vfunc_called(this, "_ZN7S2392C12v4Ev");}
void  S2392C1 ::v5(){vfunc_called(this, "_ZN7S2392C12v5Ev");}
S2392C1 ::S2392C1(){ note_ctor("S2392C1", this);} // tgen

static void Test_S2392C1()
{
  extern Class_Descriptor cd_S2392C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(18,22)];
    init_test(&cd_S2392C1, buf);
    S2392C1 *dp, &lv = *(dp=new (buf) S2392C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(136,84), "sizeof(S2392C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2392C1)");
    check_base_class_offset(lv, (S2392C4*)(S2392C3*)(S2392C2*), 0, "S2392C1");
    check_base_class_offset(lv, (S2392C3*)(S2392C2*), 0, "S2392C1");
    check_base_class_offset(lv, (S2392C2*), 0, "S2392C1");
    check_base_class_offset(lv, (S2392C5*), ABISELECT(72,48), "S2392C1");
    check_field_offset(lv, s2392c1f0, ABISELECT(80,52), "S2392C1.s2392c1f0");
    check_field_offset(lv, s2392c1f1, ABISELECT(88,60), "S2392C1.s2392c1f1");
    check_field_offset(lv, s2392c1f2, ABISELECT(96,64), "S2392C1.s2392c1f2");
    check_field_offset(lv, s2392c1f3, ABISELECT(104,68), "S2392C1.s2392c1f3");
    test_class_info(&lv, &cd_S2392C1);
    dp->~S2392C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2392C1(Test_S2392C1, "S2392C1", ABISELECT(136,84));

#else // __cplusplus

extern void _ZN7S2392C1C1Ev();
extern void _ZN7S2392C1D1Ev();
Name_Map name_map_S2392C1[] = {
  NSPAIR(_ZN7S2392C1C1Ev),
  NSPAIR(_ZN7S2392C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2392C4;
extern VTBL_ENTRY _ZTI7S2392C4[];
extern  VTBL_ENTRY _ZTV7S2392C4[];
extern Class_Descriptor cd_S2392C3;
extern VTBL_ENTRY _ZTI7S2392C3[];
extern  VTBL_ENTRY _ZTV7S2392C3[];
extern Class_Descriptor cd_S2392C2;
extern VTBL_ENTRY _ZTI7S2392C2[];
extern  VTBL_ENTRY _ZTV7S2392C2[];
extern Class_Descriptor cd_S2392C5;
extern VTBL_ENTRY _ZTI7S2392C5[];
extern  VTBL_ENTRY _ZTV7S2392C5[];
static Base_Class bases_S2392C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2392C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S2392C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S2392C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S2392C5,    ABISELECT(72,48), //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
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S2392C1[];
extern void _ZN7S2392C1D1Ev();
extern void _ZN7S2392C1D0Ev();
extern void _ZN7S2392C42v6Ev();
extern void _ZN7S2392C32v7Ev();
extern void _ZN7S2392C22v8Ev();
extern void _ZN7S2392C22v9Ev();
extern void _ZN7S2392C23v10Ev();
extern void _ZN7S2392C23v11Ev();
extern void _ZN7S2392C12v1Ev();
extern void _ZN7S2392C12v2Ev();
extern void _ZN7S2392C12v3Ev();
extern void _ZN7S2392C12v4Ev();
extern void _ZN7S2392C12v5Ev();
extern void ABISELECT(_ZThn72_N7S2392C1D1Ev,_ZThn48_N7S2392C1D1Ev)();
extern void ABISELECT(_ZThn72_N7S2392C1D0Ev,_ZThn48_N7S2392C1D0Ev)();
extern void _ZN7S2392C53v12Ev();
static  VTBL_ENTRY vtc_S2392C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2392C1[0]),
  (VTBL_ENTRY)&_ZN7S2392C1D1Ev,
  (VTBL_ENTRY)&_ZN7S2392C1D0Ev,
  (VTBL_ENTRY)&_ZN7S2392C42v6Ev,
  (VTBL_ENTRY)&_ZN7S2392C32v7Ev,
  (VTBL_ENTRY)&_ZN7S2392C22v8Ev,
  (VTBL_ENTRY)&_ZN7S2392C22v9Ev,
  (VTBL_ENTRY)&_ZN7S2392C23v10Ev,
  (VTBL_ENTRY)&_ZN7S2392C23v11Ev,
  (VTBL_ENTRY)&_ZN7S2392C12v1Ev,
  (VTBL_ENTRY)&_ZN7S2392C12v2Ev,
  (VTBL_ENTRY)&_ZN7S2392C12v3Ev,
  (VTBL_ENTRY)&_ZN7S2392C12v4Ev,
  (VTBL_ENTRY)&_ZN7S2392C12v5Ev,
  ABISELECT(-72,-48),
  (VTBL_ENTRY)&(_ZTI7S2392C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn72_N7S2392C1D1Ev,_ZThn48_N7S2392C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn72_N7S2392C1D0Ev,_ZThn48_N7S2392C1D0Ev),
  (VTBL_ENTRY)&_ZN7S2392C53v12Ev,
};
extern VTBL_ENTRY _ZTI7S2392C1[];
extern  VTBL_ENTRY _ZTV7S2392C1[];
Class_Descriptor cd_S2392C1 = {  "S2392C1", // class name
  bases_S2392C1, 4,
  &(vtc_S2392C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(136,84), // object size
  NSPAIRA(_ZTI7S2392C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S2392C1),20, //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  S2393C4  {
  char s2393c4f0;
  int s2393c4f1;
  virtual  ~S2393C4(); // _ZN7S2393C4D1Ev
  virtual void  v6(); // _ZN7S2393C42v6Ev
  S2393C4(); // tgen
};
//SIG(-1 S2393C4) C1{ vd v1 Fc Fi}


 S2393C4 ::~S2393C4(){ note_dtor("S2393C4", this);}
void  S2393C4 ::v6(){vfunc_called(this, "_ZN7S2393C42v6Ev");}
S2393C4 ::S2393C4(){ note_ctor("S2393C4", this);} // tgen

static void Test_S2393C4()
{
  extern Class_Descriptor cd_S2393C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S2393C4, buf);
    S2393C4 *dp, &lv = *(dp=new (buf) S2393C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S2393C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2393C4)");
    check_field_offset(lv, s2393c4f0, ABISELECT(8,4), "S2393C4.s2393c4f0");
    check_field_offset(lv, s2393c4f1, ABISELECT(12,8), "S2393C4.s2393c4f1");
    test_class_info(&lv, &cd_S2393C4);
    dp->~S2393C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2393C4(Test_S2393C4, "S2393C4", ABISELECT(16,12));

#else // __cplusplus

extern void _ZN7S2393C4C1Ev();
extern void _ZN7S2393C4D1Ev();
Name_Map name_map_S2393C4[] = {
  NSPAIR(_ZN7S2393C4C1Ev),
  NSPAIR(_ZN7S2393C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S2393C4[];
extern void _ZN7S2393C4D1Ev();
extern void _ZN7S2393C4D0Ev();
extern void _ZN7S2393C42v6Ev();
static  VTBL_ENTRY vtc_S2393C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2393C4[0]),
  (VTBL_ENTRY)&_ZN7S2393C4D1Ev,
  (VTBL_ENTRY)&_ZN7S2393C4D0Ev,
  (VTBL_ENTRY)&_ZN7S2393C42v6Ev,
};
extern VTBL_ENTRY _ZTI7S2393C4[];
extern  VTBL_ENTRY _ZTV7S2393C4[];
Class_Descriptor cd_S2393C4 = {  "S2393C4", // class name
  0,0,//no base classes
  &(vtc_S2393C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI7S2393C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S2393C4),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  S2393C3  : S2393C4 {
  void *s2393c3f0;
  char s2393c3f1[2];
  virtual  ~S2393C3(); // _ZN7S2393C3D1Ev
  virtual void  v7(); // _ZN7S2393C32v7Ev
  S2393C3(); // tgen
};
//SIG(-1 S2393C3) C1{ BC2{ vd v2 Fc Fi} vd v1 Fp Fc[2]}


 S2393C3 ::~S2393C3(){ note_dtor("S2393C3", this);}
void  S2393C3 ::v7(){vfunc_called(this, "_ZN7S2393C32v7Ev");}
S2393C3 ::S2393C3(){ note_ctor("S2393C3", this);} // tgen

static void Test_S2393C3()
{
  extern Class_Descriptor cd_S2393C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,6)];
    init_test(&cd_S2393C3, buf);
    S2393C3 *dp, &lv = *(dp=new (buf) S2393C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S2393C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2393C3)");
    check_base_class_offset(lv, (S2393C4*), 0, "S2393C3");
    check_field_offset(lv, s2393c3f0, ABISELECT(16,12), "S2393C3.s2393c3f0");
    check_field_offset(lv, s2393c3f1, ABISELECT(24,16), "S2393C3.s2393c3f1");
    test_class_info(&lv, &cd_S2393C3);
    dp->~S2393C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2393C3(Test_S2393C3, "S2393C3", ABISELECT(32,20));

#else // __cplusplus

extern void _ZN7S2393C3C1Ev();
extern void _ZN7S2393C3D1Ev();
Name_Map name_map_S2393C3[] = {
  NSPAIR(_ZN7S2393C3C1Ev),
  NSPAIR(_ZN7S2393C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2393C4;
extern VTBL_ENTRY _ZTI7S2393C4[];
extern  VTBL_ENTRY _ZTV7S2393C4[];
static Base_Class bases_S2393C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2393C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI7S2393C3[];
extern void _ZN7S2393C3D1Ev();
extern void _ZN7S2393C3D0Ev();
extern void _ZN7S2393C42v6Ev();
extern void _ZN7S2393C32v7Ev();
static  VTBL_ENTRY vtc_S2393C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2393C3[0]),
  (VTBL_ENTRY)&_ZN7S2393C3D1Ev,
  (VTBL_ENTRY)&_ZN7S2393C3D0Ev,
  (VTBL_ENTRY)&_ZN7S2393C42v6Ev,
  (VTBL_ENTRY)&_ZN7S2393C32v7Ev,
};
extern VTBL_ENTRY _ZTI7S2393C3[];
extern  VTBL_ENTRY _ZTV7S2393C3[];
Class_Descriptor cd_S2393C3 = {  "S2393C3", // class name
  bases_S2393C3, 1,
  &(vtc_S2393C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,20), // object size
  NSPAIRA(_ZTI7S2393C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2393C3),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  S2393C2  : S2393C3 {
  void *s2393c2f0[2];
  int s2393c2f1[3];
  char s2393c2f2[2];
  void *s2393c2f3;
  virtual  ~S2393C2(); // _ZN7S2393C2D1Ev
  virtual void  v8(); // _ZN7S2393C22v8Ev
  virtual void  v9(); // _ZN7S2393C22v9Ev
  virtual void  v10(); // _ZN7S2393C23v10Ev
  virtual void  v11(); // _ZN7S2393C23v11Ev
  S2393C2(); // tgen
};
//SIG(-1 S2393C2) C1{ BC2{ BC3{ vd v5 Fc Fi} vd v6 Fp Fc[2]} vd v1 v2 v3 v4 Fp[2] Fi[3] Fc[2] Fp}


 S2393C2 ::~S2393C2(){ note_dtor("S2393C2", this);}
void  S2393C2 ::v8(){vfunc_called(this, "_ZN7S2393C22v8Ev");}
void  S2393C2 ::v9(){vfunc_called(this, "_ZN7S2393C22v9Ev");}
void  S2393C2 ::v10(){vfunc_called(this, "_ZN7S2393C23v10Ev");}
void  S2393C2 ::v11(){vfunc_called(this, "_ZN7S2393C23v11Ev");}
S2393C2 ::S2393C2(){ note_ctor("S2393C2", this);} // tgen

static void Test_S2393C2()
{
  extern Class_Descriptor cd_S2393C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,13)];
    init_test(&cd_S2393C2, buf);
    S2393C2 *dp, &lv = *(dp=new (buf) S2393C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,48), "sizeof(S2393C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2393C2)");
    check_base_class_offset(lv, (S2393C4*)(S2393C3*), 0, "S2393C2");
    check_base_class_offset(lv, (S2393C3*), 0, "S2393C2");
    check_field_offset(lv, s2393c2f0, ABISELECT(32,20), "S2393C2.s2393c2f0");
    check_field_offset(lv, s2393c2f1, ABISELECT(48,28), "S2393C2.s2393c2f1");
    check_field_offset(lv, s2393c2f2, ABISELECT(60,40), "S2393C2.s2393c2f2");
    check_field_offset(lv, s2393c2f3, ABISELECT(64,44), "S2393C2.s2393c2f3");
    test_class_info(&lv, &cd_S2393C2);
    dp->~S2393C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2393C2(Test_S2393C2, "S2393C2", ABISELECT(72,48));

#else // __cplusplus

extern void _ZN7S2393C2C1Ev();
extern void _ZN7S2393C2D1Ev();
Name_Map name_map_S2393C2[] = {
  NSPAIR(_ZN7S2393C2C1Ev),
  NSPAIR(_ZN7S2393C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2393C4;
extern VTBL_ENTRY _ZTI7S2393C4[];
extern  VTBL_ENTRY _ZTV7S2393C4[];
extern Class_Descriptor cd_S2393C3;
extern VTBL_ENTRY _ZTI7S2393C3[];
extern  VTBL_ENTRY _ZTV7S2393C3[];
static Base_Class bases_S2393C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2393C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S2393C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S2393C2[];
extern void _ZN7S2393C2D1Ev();
extern void _ZN7S2393C2D0Ev();
extern void _ZN7S2393C42v6Ev();
extern void _ZN7S2393C32v7Ev();
extern void _ZN7S2393C22v8Ev();
extern void _ZN7S2393C22v9Ev();
extern void _ZN7S2393C23v10Ev();
extern void _ZN7S2393C23v11Ev();
static  VTBL_ENTRY vtc_S2393C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2393C2[0]),
  (VTBL_ENTRY)&_ZN7S2393C2D1Ev,
  (VTBL_ENTRY)&_ZN7S2393C2D0Ev,
  (VTBL_ENTRY)&_ZN7S2393C42v6Ev,
  (VTBL_ENTRY)&_ZN7S2393C32v7Ev,
  (VTBL_ENTRY)&_ZN7S2393C22v8Ev,
  (VTBL_ENTRY)&_ZN7S2393C22v9Ev,
  (VTBL_ENTRY)&_ZN7S2393C23v10Ev,
  (VTBL_ENTRY)&_ZN7S2393C23v11Ev,
};
extern VTBL_ENTRY _ZTI7S2393C2[];
extern  VTBL_ENTRY _ZTV7S2393C2[];
Class_Descriptor cd_S2393C2 = {  "S2393C2", // class name
  bases_S2393C2, 2,
  &(vtc_S2393C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,48), // object size
  NSPAIRA(_ZTI7S2393C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2393C2),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  S2393C5  {
  virtual  ~S2393C5(); // _ZN7S2393C5D1Ev
  virtual void  v12(); // _ZN7S2393C53v12Ev
  S2393C5(); // tgen
};
//SIG(-1 S2393C5) C1{ vd v1}


 S2393C5 ::~S2393C5(){ note_dtor("S2393C5", this);}
void  S2393C5 ::v12(){vfunc_called(this, "_ZN7S2393C53v12Ev");}
S2393C5 ::S2393C5(){ note_ctor("S2393C5", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S2393C5C1Ev();
extern void _ZN7S2393C5D1Ev();
Name_Map name_map_S2393C5[] = {
  NSPAIR(_ZN7S2393C5C1Ev),
  NSPAIR(_ZN7S2393C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S2393C5[];
extern void _ZN7S2393C5D1Ev();
extern void _ZN7S2393C5D0Ev();
extern void _ZN7S2393C53v12Ev();
static  VTBL_ENTRY vtc_S2393C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2393C5[0]),
  (VTBL_ENTRY)&_ZN7S2393C5D1Ev,
  (VTBL_ENTRY)&_ZN7S2393C5D0Ev,
  (VTBL_ENTRY)&_ZN7S2393C53v12Ev,
};
extern VTBL_ENTRY _ZTI7S2393C5[];
extern  VTBL_ENTRY _ZTV7S2393C5[];
Class_Descriptor cd_S2393C5 = {  "S2393C5", // class name
  0,0,//no base classes
  &(vtc_S2393C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S2393C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S2393C5),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  S2393C1  : S2393C2 , S2393C5 {
  int s2393c1f0[2];
  void *s2393c1f1;
  int s2393c1f2;
  void *s2393c1f3[3];
  virtual  ~S2393C1(); // _ZN7S2393C1D1Ev
  virtual void  v1(); // _ZN7S2393C12v1Ev
  virtual void  v2(); // _ZN7S2393C12v2Ev
  virtual void  v3(); // _ZN7S2393C12v3Ev
  virtual void  v4(); // _ZN7S2393C12v4Ev
  virtual void  v5(); // _ZN7S2393C12v5Ev
  S2393C1(); // tgen
};
//SIG(1 S2393C1) C1{ BC2{ BC3{ BC4{ vd v6 Fc Fi} vd v7 Fp Fc[2]} vd v8 v9 v10 v11 Fp[2] Fi[3] Fc[2] Fp} BC5{ vd v12} vd v1 v2 v3 v4 v5 Fi[2] Fp Fi Fp[3]}


 S2393C1 ::~S2393C1(){ note_dtor("S2393C1", this);}
void  S2393C1 ::v1(){vfunc_called(this, "_ZN7S2393C12v1Ev");}
void  S2393C1 ::v2(){vfunc_called(this, "_ZN7S2393C12v2Ev");}
void  S2393C1 ::v3(){vfunc_called(this, "_ZN7S2393C12v3Ev");}
void  S2393C1 ::v4(){vfunc_called(this, "_ZN7S2393C12v4Ev");}
void  S2393C1 ::v5(){vfunc_called(this, "_ZN7S2393C12v5Ev");}
S2393C1 ::S2393C1(){ note_ctor("S2393C1", this);} // tgen

static void Test_S2393C1()
{
  extern Class_Descriptor cd_S2393C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(17,21)];
    init_test(&cd_S2393C1, buf);
    S2393C1 *dp, &lv = *(dp=new (buf) S2393C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(128,80), "sizeof(S2393C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2393C1)");
    check_base_class_offset(lv, (S2393C4*)(S2393C3*)(S2393C2*), 0, "S2393C1");
    check_base_class_offset(lv, (S2393C3*)(S2393C2*), 0, "S2393C1");
    check_base_class_offset(lv, (S2393C2*), 0, "S2393C1");
    check_base_class_offset(lv, (S2393C5*), ABISELECT(72,48), "S2393C1");
    check_field_offset(lv, s2393c1f0, ABISELECT(80,52), "S2393C1.s2393c1f0");
    check_field_offset(lv, s2393c1f1, ABISELECT(88,60), "S2393C1.s2393c1f1");
    check_field_offset(lv, s2393c1f2, ABISELECT(96,64), "S2393C1.s2393c1f2");
    check_field_offset(lv, s2393c1f3, ABISELECT(104,68), "S2393C1.s2393c1f3");
    test_class_info(&lv, &cd_S2393C1);
    dp->~S2393C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2393C1(Test_S2393C1, "S2393C1", ABISELECT(128,80));

#else // __cplusplus

extern void _ZN7S2393C1C1Ev();
extern void _ZN7S2393C1D1Ev();
Name_Map name_map_S2393C1[] = {
  NSPAIR(_ZN7S2393C1C1Ev),
  NSPAIR(_ZN7S2393C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2393C4;
extern VTBL_ENTRY _ZTI7S2393C4[];
extern  VTBL_ENTRY _ZTV7S2393C4[];
extern Class_Descriptor cd_S2393C3;
extern VTBL_ENTRY _ZTI7S2393C3[];
extern  VTBL_ENTRY _ZTV7S2393C3[];
extern Class_Descriptor cd_S2393C2;
extern VTBL_ENTRY _ZTI7S2393C2[];
extern  VTBL_ENTRY _ZTV7S2393C2[];
extern Class_Descriptor cd_S2393C5;
extern VTBL_ENTRY _ZTI7S2393C5[];
extern  VTBL_ENTRY _ZTV7S2393C5[];
static Base_Class bases_S2393C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2393C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S2393C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S2393C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S2393C5,    ABISELECT(72,48), //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
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S2393C1[];
extern void _ZN7S2393C1D1Ev();
extern void _ZN7S2393C1D0Ev();
extern void _ZN7S2393C42v6Ev();
extern void _ZN7S2393C32v7Ev();
extern void _ZN7S2393C22v8Ev();
extern void _ZN7S2393C22v9Ev();
extern void _ZN7S2393C23v10Ev();
extern void _ZN7S2393C23v11Ev();
extern void _ZN7S2393C12v1Ev();
extern void _ZN7S2393C12v2Ev();
extern void _ZN7S2393C12v3Ev();
extern void _ZN7S2393C12v4Ev();
extern void _ZN7S2393C12v5Ev();
extern void ABISELECT(_ZThn72_N7S2393C1D1Ev,_ZThn48_N7S2393C1D1Ev)();
extern void ABISELECT(_ZThn72_N7S2393C1D0Ev,_ZThn48_N7S2393C1D0Ev)();
extern void _ZN7S2393C53v12Ev();
static  VTBL_ENTRY vtc_S2393C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2393C1[0]),
  (VTBL_ENTRY)&_ZN7S2393C1D1Ev,
  (VTBL_ENTRY)&_ZN7S2393C1D0Ev,
  (VTBL_ENTRY)&_ZN7S2393C42v6Ev,
  (VTBL_ENTRY)&_ZN7S2393C32v7Ev,
  (VTBL_ENTRY)&_ZN7S2393C22v8Ev,
  (VTBL_ENTRY)&_ZN7S2393C22v9Ev,
  (VTBL_ENTRY)&_ZN7S2393C23v10Ev,
  (VTBL_ENTRY)&_ZN7S2393C23v11Ev,
  (VTBL_ENTRY)&_ZN7S2393C12v1Ev,
  (VTBL_ENTRY)&_ZN7S2393C12v2Ev,
  (VTBL_ENTRY)&_ZN7S2393C12v3Ev,
  (VTBL_ENTRY)&_ZN7S2393C12v4Ev,
  (VTBL_ENTRY)&_ZN7S2393C12v5Ev,
  ABISELECT(-72,-48),
  (VTBL_ENTRY)&(_ZTI7S2393C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn72_N7S2393C1D1Ev,_ZThn48_N7S2393C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn72_N7S2393C1D0Ev,_ZThn48_N7S2393C1D0Ev),
  (VTBL_ENTRY)&_ZN7S2393C53v12Ev,
};
extern VTBL_ENTRY _ZTI7S2393C1[];
extern  VTBL_ENTRY _ZTV7S2393C1[];
Class_Descriptor cd_S2393C1 = {  "S2393C1", // class name
  bases_S2393C1, 4,
  &(vtc_S2393C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(128,80), // object size
  NSPAIRA(_ZTI7S2393C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S2393C1),20, //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  S2306C4  {
  char s2306c4f0;
  int s2306c4f1;
  virtual  ~S2306C4(); // _ZN7S2306C4D1Ev
  virtual void  v5(); // _ZN7S2306C42v5Ev
  S2306C4(); // tgen
};
//SIG(-1 S2306C4) C1{ vd v1 Fc Fi}


 S2306C4 ::~S2306C4(){ note_dtor("S2306C4", this);}
void  S2306C4 ::v5(){vfunc_called(this, "_ZN7S2306C42v5Ev");}
S2306C4 ::S2306C4(){ note_ctor("S2306C4", this);} // tgen

static void Test_S2306C4()
{
  extern Class_Descriptor cd_S2306C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S2306C4, buf);
    S2306C4 *dp, &lv = *(dp=new (buf) S2306C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S2306C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2306C4)");
    check_field_offset(lv, s2306c4f0, ABISELECT(8,4), "S2306C4.s2306c4f0");
    check_field_offset(lv, s2306c4f1, ABISELECT(12,8), "S2306C4.s2306c4f1");
    test_class_info(&lv, &cd_S2306C4);
    dp->~S2306C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2306C4(Test_S2306C4, "S2306C4", ABISELECT(16,12));

#else // __cplusplus

extern void _ZN7S2306C4C1Ev();
extern void _ZN7S2306C4D1Ev();
Name_Map name_map_S2306C4[] = {
  NSPAIR(_ZN7S2306C4C1Ev),
  NSPAIR(_ZN7S2306C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S2306C4[];
extern void _ZN7S2306C4D1Ev();
extern void _ZN7S2306C4D0Ev();
extern void _ZN7S2306C42v5Ev();
static  VTBL_ENTRY vtc_S2306C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2306C4[0]),
  (VTBL_ENTRY)&_ZN7S2306C4D1Ev,
  (VTBL_ENTRY)&_ZN7S2306C4D0Ev,
  (VTBL_ENTRY)&_ZN7S2306C42v5Ev,
};
extern VTBL_ENTRY _ZTI7S2306C4[];
extern  VTBL_ENTRY _ZTV7S2306C4[];
Class_Descriptor cd_S2306C4 = {  "S2306C4", // class name
  0,0,//no base classes
  &(vtc_S2306C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI7S2306C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S2306C4),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  S2306C3  : S2306C4 {
  void *s2306c3f0;
  char s2306c3f1[2];
  virtual  ~S2306C3(); // _ZN7S2306C3D1Ev
  virtual void  v6(); // _ZN7S2306C32v6Ev
  S2306C3(); // tgen
};
//SIG(-1 S2306C3) C1{ BC2{ vd v2 Fc Fi} vd v1 Fp Fc[2]}


 S2306C3 ::~S2306C3(){ note_dtor("S2306C3", this);}
void  S2306C3 ::v6(){vfunc_called(this, "_ZN7S2306C32v6Ev");}
S2306C3 ::S2306C3(){ note_ctor("S2306C3", this);} // tgen

static void Test_S2306C3()
{
  extern Class_Descriptor cd_S2306C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,6)];
    init_test(&cd_S2306C3, buf);
    S2306C3 *dp, &lv = *(dp=new (buf) S2306C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S2306C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2306C3)");
    check_base_class_offset(lv, (S2306C4*), 0, "S2306C3");
    check_field_offset(lv, s2306c3f0, ABISELECT(16,12), "S2306C3.s2306c3f0");
    check_field_offset(lv, s2306c3f1, ABISELECT(24,16), "S2306C3.s2306c3f1");
    test_class_info(&lv, &cd_S2306C3);
    dp->~S2306C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2306C3(Test_S2306C3, "S2306C3", ABISELECT(32,20));

#else // __cplusplus

extern void _ZN7S2306C3C1Ev();
extern void _ZN7S2306C3D1Ev();
Name_Map name_map_S2306C3[] = {
  NSPAIR(_ZN7S2306C3C1Ev),
  NSPAIR(_ZN7S2306C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2306C4;
extern VTBL_ENTRY _ZTI7S2306C4[];
extern  VTBL_ENTRY _ZTV7S2306C4[];
static Base_Class bases_S2306C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2306C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI7S2306C3[];
extern void _ZN7S2306C3D1Ev();
extern void _ZN7S2306C3D0Ev();
extern void _ZN7S2306C42v5Ev();
extern void _ZN7S2306C32v6Ev();
static  VTBL_ENTRY vtc_S2306C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2306C3[0]),
  (VTBL_ENTRY)&_ZN7S2306C3D1Ev,
  (VTBL_ENTRY)&_ZN7S2306C3D0Ev,
  (VTBL_ENTRY)&_ZN7S2306C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2306C32v6Ev,
};
extern VTBL_ENTRY _ZTI7S2306C3[];
extern  VTBL_ENTRY _ZTV7S2306C3[];
Class_Descriptor cd_S2306C3 = {  "S2306C3", // class name
  bases_S2306C3, 1,
  &(vtc_S2306C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,20), // object size
  NSPAIRA(_ZTI7S2306C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2306C3),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  S2306C2  : S2306C3 {
  void *s2306c2f0[2];
  int s2306c2f1[3];
  char s2306c2f2[2];
  void *s2306c2f3;
  virtual  ~S2306C2(); // _ZN7S2306C2D1Ev
  virtual void  v7(); // _ZN7S2306C22v7Ev
  virtual void  v8(); // _ZN7S2306C22v8Ev
  virtual void  v9(); // _ZN7S2306C22v9Ev
  virtual void  v10(); // _ZN7S2306C23v10Ev
  S2306C2(); // tgen
};
//SIG(-1 S2306C2) C1{ BC2{ BC3{ vd v5 Fc Fi} vd v6 Fp Fc[2]} vd v1 v2 v3 v4 Fp[2] Fi[3] Fc[2] Fp}


 S2306C2 ::~S2306C2(){ note_dtor("S2306C2", this);}
void  S2306C2 ::v7(){vfunc_called(this, "_ZN7S2306C22v7Ev");}
void  S2306C2 ::v8(){vfunc_called(this, "_ZN7S2306C22v8Ev");}
void  S2306C2 ::v9(){vfunc_called(this, "_ZN7S2306C22v9Ev");}
void  S2306C2 ::v10(){vfunc_called(this, "_ZN7S2306C23v10Ev");}
S2306C2 ::S2306C2(){ note_ctor("S2306C2", this);} // tgen

static void Test_S2306C2()
{
  extern Class_Descriptor cd_S2306C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,13)];
    init_test(&cd_S2306C2, buf);
    S2306C2 *dp, &lv = *(dp=new (buf) S2306C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,48), "sizeof(S2306C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2306C2)");
    check_base_class_offset(lv, (S2306C4*)(S2306C3*), 0, "S2306C2");
    check_base_class_offset(lv, (S2306C3*), 0, "S2306C2");
    check_field_offset(lv, s2306c2f0, ABISELECT(32,20), "S2306C2.s2306c2f0");
    check_field_offset(lv, s2306c2f1, ABISELECT(48,28), "S2306C2.s2306c2f1");
    check_field_offset(lv, s2306c2f2, ABISELECT(60,40), "S2306C2.s2306c2f2");
    check_field_offset(lv, s2306c2f3, ABISELECT(64,44), "S2306C2.s2306c2f3");
    test_class_info(&lv, &cd_S2306C2);
    dp->~S2306C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2306C2(Test_S2306C2, "S2306C2", ABISELECT(72,48));

#else // __cplusplus

extern void _ZN7S2306C2C1Ev();
extern void _ZN7S2306C2D1Ev();
Name_Map name_map_S2306C2[] = {
  NSPAIR(_ZN7S2306C2C1Ev),
  NSPAIR(_ZN7S2306C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2306C4;
extern VTBL_ENTRY _ZTI7S2306C4[];
extern  VTBL_ENTRY _ZTV7S2306C4[];
extern Class_Descriptor cd_S2306C3;
extern VTBL_ENTRY _ZTI7S2306C3[];
extern  VTBL_ENTRY _ZTV7S2306C3[];
static Base_Class bases_S2306C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2306C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S2306C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S2306C2[];
extern void _ZN7S2306C2D1Ev();
extern void _ZN7S2306C2D0Ev();
extern void _ZN7S2306C42v5Ev();
extern void _ZN7S2306C32v6Ev();
extern void _ZN7S2306C22v7Ev();
extern void _ZN7S2306C22v8Ev();
extern void _ZN7S2306C22v9Ev();
extern void _ZN7S2306C23v10Ev();
static  VTBL_ENTRY vtc_S2306C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2306C2[0]),
  (VTBL_ENTRY)&_ZN7S2306C2D1Ev,
  (VTBL_ENTRY)&_ZN7S2306C2D0Ev,
  (VTBL_ENTRY)&_ZN7S2306C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2306C32v6Ev,
  (VTBL_ENTRY)&_ZN7S2306C22v7Ev,
  (VTBL_ENTRY)&_ZN7S2306C22v8Ev,
  (VTBL_ENTRY)&_ZN7S2306C22v9Ev,
  (VTBL_ENTRY)&_ZN7S2306C23v10Ev,
};
extern VTBL_ENTRY _ZTI7S2306C2[];
extern  VTBL_ENTRY _ZTV7S2306C2[];
Class_Descriptor cd_S2306C2 = {  "S2306C2", // class name
  bases_S2306C2, 2,
  &(vtc_S2306C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,48), // object size
  NSPAIRA(_ZTI7S2306C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2306C2),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  S2306C1  : S2306C2 {
  int s2306c1f0[3];
  void *s2306c1f1[4];
  int s2306c1f2;
  void *s2306c1f3[2];
  int s2306c1f4[2];
  virtual  ~S2306C1(); // _ZN7S2306C1D1Ev
  virtual void  v1(); // _ZN7S2306C12v1Ev
  virtual void  v2(); // _ZN7S2306C12v2Ev
  virtual void  v3(); // _ZN7S2306C12v3Ev
  virtual void  v4(); // _ZN7S2306C12v4Ev
  S2306C1(); // tgen
};
//SIG(1 S2306C1) C1{ BC2{ BC3{ BC4{ vd v5 Fc Fi} vd v6 Fp Fc[2]} vd v7 v8 v9 v10 Fp[2] Fi[3] Fc[2] Fp} vd v1 v2 v3 v4 Fi[3] Fp[4] Fi Fp[2] Fi[2]}


 S2306C1 ::~S2306C1(){ note_dtor("S2306C1", this);}
void  S2306C1 ::v1(){vfunc_called(this, "_ZN7S2306C12v1Ev");}
void  S2306C1 ::v2(){vfunc_called(this, "_ZN7S2306C12v2Ev");}
void  S2306C1 ::v3(){vfunc_called(this, "_ZN7S2306C12v3Ev");}
void  S2306C1 ::v4(){vfunc_called(this, "_ZN7S2306C12v4Ev");}
S2306C1 ::S2306C1(){ note_ctor("S2306C1", this);} // tgen

static void Test_S2306C1()
{
  extern Class_Descriptor cd_S2306C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(20,25)];
    init_test(&cd_S2306C1, buf);
    S2306C1 *dp, &lv = *(dp=new (buf) S2306C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(152,96), "sizeof(S2306C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2306C1)");
    check_base_class_offset(lv, (S2306C4*)(S2306C3*)(S2306C2*), 0, "S2306C1");
    check_base_class_offset(lv, (S2306C3*)(S2306C2*), 0, "S2306C1");
    check_base_class_offset(lv, (S2306C2*), 0, "S2306C1");
    check_field_offset(lv, s2306c1f0, ABISELECT(72,48), "S2306C1.s2306c1f0");
    check_field_offset(lv, s2306c1f1, ABISELECT(88,60), "S2306C1.s2306c1f1");
    check_field_offset(lv, s2306c1f2, ABISELECT(120,76), "S2306C1.s2306c1f2");
    check_field_offset(lv, s2306c1f3, ABISELECT(128,80), "S2306C1.s2306c1f3");
    check_field_offset(lv, s2306c1f4, ABISELECT(144,88), "S2306C1.s2306c1f4");
    test_class_info(&lv, &cd_S2306C1);
    dp->~S2306C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2306C1(Test_S2306C1, "S2306C1", ABISELECT(152,96));

#else // __cplusplus

extern void _ZN7S2306C1C1Ev();
extern void _ZN7S2306C1D1Ev();
Name_Map name_map_S2306C1[] = {
  NSPAIR(_ZN7S2306C1C1Ev),
  NSPAIR(_ZN7S2306C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2306C4;
extern VTBL_ENTRY _ZTI7S2306C4[];
extern  VTBL_ENTRY _ZTV7S2306C4[];
extern Class_Descriptor cd_S2306C3;
extern VTBL_ENTRY _ZTI7S2306C3[];
extern  VTBL_ENTRY _ZTV7S2306C3[];
extern Class_Descriptor cd_S2306C2;
extern VTBL_ENTRY _ZTI7S2306C2[];
extern  VTBL_ENTRY _ZTV7S2306C2[];
static Base_Class bases_S2306C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2306C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S2306C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S2306C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S2306C1[];
extern void _ZN7S2306C1D1Ev();
extern void _ZN7S2306C1D0Ev();
extern void _ZN7S2306C42v5Ev();
extern void _ZN7S2306C32v6Ev();
extern void _ZN7S2306C22v7Ev();
extern void _ZN7S2306C22v8Ev();
extern void _ZN7S2306C22v9Ev();
extern void _ZN7S2306C23v10Ev();
extern void _ZN7S2306C12v1Ev();
extern void _ZN7S2306C12v2Ev();
extern void _ZN7S2306C12v3Ev();
extern void _ZN7S2306C12v4Ev();
static  VTBL_ENTRY vtc_S2306C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2306C1[0]),
  (VTBL_ENTRY)&_ZN7S2306C1D1Ev,
  (VTBL_ENTRY)&_ZN7S2306C1D0Ev,
  (VTBL_ENTRY)&_ZN7S2306C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2306C32v6Ev,
  (VTBL_ENTRY)&_ZN7S2306C22v7Ev,
  (VTBL_ENTRY)&_ZN7S2306C22v8Ev,
  (VTBL_ENTRY)&_ZN7S2306C22v9Ev,
  (VTBL_ENTRY)&_ZN7S2306C23v10Ev,
  (VTBL_ENTRY)&_ZN7S2306C12v1Ev,
  (VTBL_ENTRY)&_ZN7S2306C12v2Ev,
  (VTBL_ENTRY)&_ZN7S2306C12v3Ev,
  (VTBL_ENTRY)&_ZN7S2306C12v4Ev,
};
extern VTBL_ENTRY _ZTI7S2306C1[];
extern  VTBL_ENTRY _ZTV7S2306C1[];
Class_Descriptor cd_S2306C1 = {  "S2306C1", // class name
  bases_S2306C1, 3,
  &(vtc_S2306C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(152,96), // object size
  NSPAIRA(_ZTI7S2306C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2306C1),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  S2300C4  {
  char s2300c4f0;
  int s2300c4f1;
  virtual  ~S2300C4(); // _ZN7S2300C4D1Ev
  virtual void  v5(); // _ZN7S2300C42v5Ev
  S2300C4(); // tgen
};
//SIG(-1 S2300C4) C1{ vd v1 Fc Fi}


 S2300C4 ::~S2300C4(){ note_dtor("S2300C4", this);}
void  S2300C4 ::v5(){vfunc_called(this, "_ZN7S2300C42v5Ev");}
S2300C4 ::S2300C4(){ note_ctor("S2300C4", this);} // tgen

static void Test_S2300C4()
{
  extern Class_Descriptor cd_S2300C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S2300C4, buf);
    S2300C4 *dp, &lv = *(dp=new (buf) S2300C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S2300C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2300C4)");
    check_field_offset(lv, s2300c4f0, ABISELECT(8,4), "S2300C4.s2300c4f0");
    check_field_offset(lv, s2300c4f1, ABISELECT(12,8), "S2300C4.s2300c4f1");
    test_class_info(&lv, &cd_S2300C4);
    dp->~S2300C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2300C4(Test_S2300C4, "S2300C4", ABISELECT(16,12));

#else // __cplusplus

extern void _ZN7S2300C4C1Ev();
extern void _ZN7S2300C4D1Ev();
Name_Map name_map_S2300C4[] = {
  NSPAIR(_ZN7S2300C4C1Ev),
  NSPAIR(_ZN7S2300C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S2300C4[];
extern void _ZN7S2300C4D1Ev();
extern void _ZN7S2300C4D0Ev();
extern void _ZN7S2300C42v5Ev();
static  VTBL_ENTRY vtc_S2300C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2300C4[0]),
  (VTBL_ENTRY)&_ZN7S2300C4D1Ev,
  (VTBL_ENTRY)&_ZN7S2300C4D0Ev,
  (VTBL_ENTRY)&_ZN7S2300C42v5Ev,
};
extern VTBL_ENTRY _ZTI7S2300C4[];
extern  VTBL_ENTRY _ZTV7S2300C4[];
Class_Descriptor cd_S2300C4 = {  "S2300C4", // class name
  0,0,//no base classes
  &(vtc_S2300C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI7S2300C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S2300C4),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  S2300C3  : S2300C4 {
  void *s2300c3f0;
  char s2300c3f1[2];
  virtual  ~S2300C3(); // _ZN7S2300C3D1Ev
  virtual void  v6(); // _ZN7S2300C32v6Ev
  S2300C3(); // tgen
};
//SIG(-1 S2300C3) C1{ BC2{ vd v2 Fc Fi} vd v1 Fp Fc[2]}


 S2300C3 ::~S2300C3(){ note_dtor("S2300C3", this);}
void  S2300C3 ::v6(){vfunc_called(this, "_ZN7S2300C32v6Ev");}
S2300C3 ::S2300C3(){ note_ctor("S2300C3", this);} // tgen

static void Test_S2300C3()
{
  extern Class_Descriptor cd_S2300C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,6)];
    init_test(&cd_S2300C3, buf);
    S2300C3 *dp, &lv = *(dp=new (buf) S2300C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S2300C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2300C3)");
    check_base_class_offset(lv, (S2300C4*), 0, "S2300C3");
    check_field_offset(lv, s2300c3f0, ABISELECT(16,12), "S2300C3.s2300c3f0");
    check_field_offset(lv, s2300c3f1, ABISELECT(24,16), "S2300C3.s2300c3f1");
    test_class_info(&lv, &cd_S2300C3);
    dp->~S2300C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2300C3(Test_S2300C3, "S2300C3", ABISELECT(32,20));

#else // __cplusplus

extern void _ZN7S2300C3C1Ev();
extern void _ZN7S2300C3D1Ev();
Name_Map name_map_S2300C3[] = {
  NSPAIR(_ZN7S2300C3C1Ev),
  NSPAIR(_ZN7S2300C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2300C4;
extern VTBL_ENTRY _ZTI7S2300C4[];
extern  VTBL_ENTRY _ZTV7S2300C4[];
static Base_Class bases_S2300C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2300C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI7S2300C3[];
extern void _ZN7S2300C3D1Ev();
extern void _ZN7S2300C3D0Ev();
extern void _ZN7S2300C42v5Ev();
extern void _ZN7S2300C32v6Ev();
static  VTBL_ENTRY vtc_S2300C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2300C3[0]),
  (VTBL_ENTRY)&_ZN7S2300C3D1Ev,
  (VTBL_ENTRY)&_ZN7S2300C3D0Ev,
  (VTBL_ENTRY)&_ZN7S2300C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2300C32v6Ev,
};
extern VTBL_ENTRY _ZTI7S2300C3[];
extern  VTBL_ENTRY _ZTV7S2300C3[];
Class_Descriptor cd_S2300C3 = {  "S2300C3", // class name
  bases_S2300C3, 1,
  &(vtc_S2300C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,20), // object size
  NSPAIRA(_ZTI7S2300C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2300C3),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  S2300C2  : S2300C3 {
  void *s2300c2f0[2];
  int s2300c2f1[3];
  char s2300c2f2[2];
  void *s2300c2f3;
  virtual  ~S2300C2(); // _ZN7S2300C2D1Ev
  virtual void  v7(); // _ZN7S2300C22v7Ev
  virtual void  v8(); // _ZN7S2300C22v8Ev
  virtual void  v9(); // _ZN7S2300C22v9Ev
  virtual void  v10(); // _ZN7S2300C23v10Ev
  S2300C2(); // tgen
};
//SIG(-1 S2300C2) C1{ BC2{ BC3{ vd v5 Fc Fi} vd v6 Fp Fc[2]} vd v1 v2 v3 v4 Fp[2] Fi[3] Fc[2] Fp}


 S2300C2 ::~S2300C2(){ note_dtor("S2300C2", this);}
void  S2300C2 ::v7(){vfunc_called(this, "_ZN7S2300C22v7Ev");}
void  S2300C2 ::v8(){vfunc_called(this, "_ZN7S2300C22v8Ev");}
void  S2300C2 ::v9(){vfunc_called(this, "_ZN7S2300C22v9Ev");}
void  S2300C2 ::v10(){vfunc_called(this, "_ZN7S2300C23v10Ev");}
S2300C2 ::S2300C2(){ note_ctor("S2300C2", this);} // tgen

static void Test_S2300C2()
{
  extern Class_Descriptor cd_S2300C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,13)];
    init_test(&cd_S2300C2, buf);
    S2300C2 *dp, &lv = *(dp=new (buf) S2300C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,48), "sizeof(S2300C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2300C2)");
    check_base_class_offset(lv, (S2300C4*)(S2300C3*), 0, "S2300C2");
    check_base_class_offset(lv, (S2300C3*), 0, "S2300C2");
    check_field_offset(lv, s2300c2f0, ABISELECT(32,20), "S2300C2.s2300c2f0");
    check_field_offset(lv, s2300c2f1, ABISELECT(48,28), "S2300C2.s2300c2f1");
    check_field_offset(lv, s2300c2f2, ABISELECT(60,40), "S2300C2.s2300c2f2");
    check_field_offset(lv, s2300c2f3, ABISELECT(64,44), "S2300C2.s2300c2f3");
    test_class_info(&lv, &cd_S2300C2);
    dp->~S2300C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2300C2(Test_S2300C2, "S2300C2", ABISELECT(72,48));

#else // __cplusplus

extern void _ZN7S2300C2C1Ev();
extern void _ZN7S2300C2D1Ev();
Name_Map name_map_S2300C2[] = {
  NSPAIR(_ZN7S2300C2C1Ev),
  NSPAIR(_ZN7S2300C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2300C4;
extern VTBL_ENTRY _ZTI7S2300C4[];
extern  VTBL_ENTRY _ZTV7S2300C4[];
extern Class_Descriptor cd_S2300C3;
extern VTBL_ENTRY _ZTI7S2300C3[];
extern  VTBL_ENTRY _ZTV7S2300C3[];
static Base_Class bases_S2300C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2300C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S2300C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S2300C2[];
extern void _ZN7S2300C2D1Ev();
extern void _ZN7S2300C2D0Ev();
extern void _ZN7S2300C42v5Ev();
extern void _ZN7S2300C32v6Ev();
extern void _ZN7S2300C22v7Ev();
extern void _ZN7S2300C22v8Ev();
extern void _ZN7S2300C22v9Ev();
extern void _ZN7S2300C23v10Ev();
static  VTBL_ENTRY vtc_S2300C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2300C2[0]),
  (VTBL_ENTRY)&_ZN7S2300C2D1Ev,
  (VTBL_ENTRY)&_ZN7S2300C2D0Ev,
  (VTBL_ENTRY)&_ZN7S2300C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2300C32v6Ev,
  (VTBL_ENTRY)&_ZN7S2300C22v7Ev,
  (VTBL_ENTRY)&_ZN7S2300C22v8Ev,
  (VTBL_ENTRY)&_ZN7S2300C22v9Ev,
  (VTBL_ENTRY)&_ZN7S2300C23v10Ev,
};
extern VTBL_ENTRY _ZTI7S2300C2[];
extern  VTBL_ENTRY _ZTV7S2300C2[];
Class_Descriptor cd_S2300C2 = {  "S2300C2", // class name
  bases_S2300C2, 2,
  &(vtc_S2300C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,48), // object size
  NSPAIRA(_ZTI7S2300C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2300C2),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  S2300C1  : S2300C2 {
  int s2300c1f0[2];
  void *s2300c1f1[4];
  int s2300c1f2;
  void *s2300c1f3[2];
  int s2300c1f4[2];
  virtual  ~S2300C1(); // _ZN7S2300C1D1Ev
  virtual void  v1(); // _ZN7S2300C12v1Ev
  virtual void  v2(); // _ZN7S2300C12v2Ev
  virtual void  v3(); // _ZN7S2300C12v3Ev
  virtual void  v4(); // _ZN7S2300C12v4Ev
  S2300C1(); // tgen
};
//SIG(1 S2300C1) C1{ BC2{ BC3{ BC4{ vd v5 Fc Fi} vd v6 Fp Fc[2]} vd v7 v8 v9 v10 Fp[2] Fi[3] Fc[2] Fp} vd v1 v2 v3 v4 Fi[2] Fp[4] Fi Fp[2] Fi[2]}


 S2300C1 ::~S2300C1(){ note_dtor("S2300C1", this);}
void  S2300C1 ::v1(){vfunc_called(this, "_ZN7S2300C12v1Ev");}
void  S2300C1 ::v2(){vfunc_called(this, "_ZN7S2300C12v2Ev");}
void  S2300C1 ::v3(){vfunc_called(this, "_ZN7S2300C12v3Ev");}
void  S2300C1 ::v4(){vfunc_called(this, "_ZN7S2300C12v4Ev");}
S2300C1 ::S2300C1(){ note_ctor("S2300C1", this);} // tgen

static void Test_S2300C1()
{
  extern Class_Descriptor cd_S2300C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(19,24)];
    init_test(&cd_S2300C1, buf);
    S2300C1 *dp, &lv = *(dp=new (buf) S2300C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(144,92), "sizeof(S2300C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2300C1)");
    check_base_class_offset(lv, (S2300C4*)(S2300C3*)(S2300C2*), 0, "S2300C1");
    check_base_class_offset(lv, (S2300C3*)(S2300C2*), 0, "S2300C1");
    check_base_class_offset(lv, (S2300C2*), 0, "S2300C1");
    check_field_offset(lv, s2300c1f0, ABISELECT(72,48), "S2300C1.s2300c1f0");
    check_field_offset(lv, s2300c1f1, ABISELECT(80,56), "S2300C1.s2300c1f1");
    check_field_offset(lv, s2300c1f2, ABISELECT(112,72), "S2300C1.s2300c1f2");
    check_field_offset(lv, s2300c1f3, ABISELECT(120,76), "S2300C1.s2300c1f3");
    check_field_offset(lv, s2300c1f4, ABISELECT(136,84), "S2300C1.s2300c1f4");
    test_class_info(&lv, &cd_S2300C1);
    dp->~S2300C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2300C1(Test_S2300C1, "S2300C1", ABISELECT(144,92));

#else // __cplusplus

extern void _ZN7S2300C1C1Ev();
extern void _ZN7S2300C1D1Ev();
Name_Map name_map_S2300C1[] = {
  NSPAIR(_ZN7S2300C1C1Ev),
  NSPAIR(_ZN7S2300C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2300C4;
extern VTBL_ENTRY _ZTI7S2300C4[];
extern  VTBL_ENTRY _ZTV7S2300C4[];
extern Class_Descriptor cd_S2300C3;
extern VTBL_ENTRY _ZTI7S2300C3[];
extern  VTBL_ENTRY _ZTV7S2300C3[];
extern Class_Descriptor cd_S2300C2;
extern VTBL_ENTRY _ZTI7S2300C2[];
extern  VTBL_ENTRY _ZTV7S2300C2[];
static Base_Class bases_S2300C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2300C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S2300C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S2300C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S2300C1[];
extern void _ZN7S2300C1D1Ev();
extern void _ZN7S2300C1D0Ev();
extern void _ZN7S2300C42v5Ev();
extern void _ZN7S2300C32v6Ev();
extern void _ZN7S2300C22v7Ev();
extern void _ZN7S2300C22v8Ev();
extern void _ZN7S2300C22v9Ev();
extern void _ZN7S2300C23v10Ev();
extern void _ZN7S2300C12v1Ev();
extern void _ZN7S2300C12v2Ev();
extern void _ZN7S2300C12v3Ev();
extern void _ZN7S2300C12v4Ev();
static  VTBL_ENTRY vtc_S2300C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2300C1[0]),
  (VTBL_ENTRY)&_ZN7S2300C1D1Ev,
  (VTBL_ENTRY)&_ZN7S2300C1D0Ev,
  (VTBL_ENTRY)&_ZN7S2300C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2300C32v6Ev,
  (VTBL_ENTRY)&_ZN7S2300C22v7Ev,
  (VTBL_ENTRY)&_ZN7S2300C22v8Ev,
  (VTBL_ENTRY)&_ZN7S2300C22v9Ev,
  (VTBL_ENTRY)&_ZN7S2300C23v10Ev,
  (VTBL_ENTRY)&_ZN7S2300C12v1Ev,
  (VTBL_ENTRY)&_ZN7S2300C12v2Ev,
  (VTBL_ENTRY)&_ZN7S2300C12v3Ev,
  (VTBL_ENTRY)&_ZN7S2300C12v4Ev,
};
extern VTBL_ENTRY _ZTI7S2300C1[];
extern  VTBL_ENTRY _ZTV7S2300C1[];
Class_Descriptor cd_S2300C1 = {  "S2300C1", // class name
  bases_S2300C1, 3,
  &(vtc_S2300C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(144,92), // object size
  NSPAIRA(_ZTI7S2300C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2300C1),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  S2394C4  {
  char s2394c4f0;
  int s2394c4f1;
  virtual  ~S2394C4(); // _ZN7S2394C4D1Ev
  virtual void  v6(); // _ZN7S2394C42v6Ev
  S2394C4(); // tgen
};
//SIG(-1 S2394C4) C1{ vd v1 Fc Fi}


 S2394C4 ::~S2394C4(){ note_dtor("S2394C4", this);}
void  S2394C4 ::v6(){vfunc_called(this, "_ZN7S2394C42v6Ev");}
S2394C4 ::S2394C4(){ note_ctor("S2394C4", this);} // tgen

static void Test_S2394C4()
{
  extern Class_Descriptor cd_S2394C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S2394C4, buf);
    S2394C4 *dp, &lv = *(dp=new (buf) S2394C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S2394C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2394C4)");
    check_field_offset(lv, s2394c4f0, ABISELECT(8,4), "S2394C4.s2394c4f0");
    check_field_offset(lv, s2394c4f1, ABISELECT(12,8), "S2394C4.s2394c4f1");
    test_class_info(&lv, &cd_S2394C4);
    dp->~S2394C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2394C4(Test_S2394C4, "S2394C4", ABISELECT(16,12));

#else // __cplusplus

extern void _ZN7S2394C4C1Ev();
extern void _ZN7S2394C4D1Ev();
Name_Map name_map_S2394C4[] = {
  NSPAIR(_ZN7S2394C4C1Ev),
  NSPAIR(_ZN7S2394C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S2394C4[];
extern void _ZN7S2394C4D1Ev();
extern void _ZN7S2394C4D0Ev();
extern void _ZN7S2394C42v6Ev();
static  VTBL_ENTRY vtc_S2394C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2394C4[0]),
  (VTBL_ENTRY)&_ZN7S2394C4D1Ev,
  (VTBL_ENTRY)&_ZN7S2394C4D0Ev,
  (VTBL_ENTRY)&_ZN7S2394C42v6Ev,
};
extern VTBL_ENTRY _ZTI7S2394C4[];
extern  VTBL_ENTRY _ZTV7S2394C4[];
Class_Descriptor cd_S2394C4 = {  "S2394C4", // class name
  0,0,//no base classes
  &(vtc_S2394C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI7S2394C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S2394C4),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  S2394C3  : S2394C4 {
  void *s2394c3f0;
  char s2394c3f1[2];
  virtual  ~S2394C3(); // _ZN7S2394C3D1Ev
  virtual void  v7(); // _ZN7S2394C32v7Ev
  S2394C3(); // tgen
};
//SIG(-1 S2394C3) C1{ BC2{ vd v2 Fc Fi} vd v1 Fp Fc[2]}


 S2394C3 ::~S2394C3(){ note_dtor("S2394C3", this);}
void  S2394C3 ::v7(){vfunc_called(this, "_ZN7S2394C32v7Ev");}
S2394C3 ::S2394C3(){ note_ctor("S2394C3", this);} // tgen

static void Test_S2394C3()
{
  extern Class_Descriptor cd_S2394C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,6)];
    init_test(&cd_S2394C3, buf);
    S2394C3 *dp, &lv = *(dp=new (buf) S2394C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S2394C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2394C3)");
    check_base_class_offset(lv, (S2394C4*), 0, "S2394C3");
    check_field_offset(lv, s2394c3f0, ABISELECT(16,12), "S2394C3.s2394c3f0");
    check_field_offset(lv, s2394c3f1, ABISELECT(24,16), "S2394C3.s2394c3f1");
    test_class_info(&lv, &cd_S2394C3);
    dp->~S2394C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2394C3(Test_S2394C3, "S2394C3", ABISELECT(32,20));

#else // __cplusplus

extern void _ZN7S2394C3C1Ev();
extern void _ZN7S2394C3D1Ev();
Name_Map name_map_S2394C3[] = {
  NSPAIR(_ZN7S2394C3C1Ev),
  NSPAIR(_ZN7S2394C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2394C4;
extern VTBL_ENTRY _ZTI7S2394C4[];
extern  VTBL_ENTRY _ZTV7S2394C4[];
static Base_Class bases_S2394C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2394C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI7S2394C3[];
extern void _ZN7S2394C3D1Ev();
extern void _ZN7S2394C3D0Ev();
extern void _ZN7S2394C42v6Ev();
extern void _ZN7S2394C32v7Ev();
static  VTBL_ENTRY vtc_S2394C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2394C3[0]),
  (VTBL_ENTRY)&_ZN7S2394C3D1Ev,
  (VTBL_ENTRY)&_ZN7S2394C3D0Ev,
  (VTBL_ENTRY)&_ZN7S2394C42v6Ev,
  (VTBL_ENTRY)&_ZN7S2394C32v7Ev,
};
extern VTBL_ENTRY _ZTI7S2394C3[];
extern  VTBL_ENTRY _ZTV7S2394C3[];
Class_Descriptor cd_S2394C3 = {  "S2394C3", // class name
  bases_S2394C3, 1,
  &(vtc_S2394C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,20), // object size
  NSPAIRA(_ZTI7S2394C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2394C3),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  S2394C2  : S2394C3 {
  void *s2394c2f0[2];
  int s2394c2f1[3];
  char s2394c2f2[2];
  void *s2394c2f3;
  virtual  ~S2394C2(); // _ZN7S2394C2D1Ev
  virtual void  v8(); // _ZN7S2394C22v8Ev
  virtual void  v9(); // _ZN7S2394C22v9Ev
  virtual void  v10(); // _ZN7S2394C23v10Ev
  virtual void  v11(); // _ZN7S2394C23v11Ev
  S2394C2(); // tgen
};
//SIG(-1 S2394C2) C1{ BC2{ BC3{ vd v5 Fc Fi} vd v6 Fp Fc[2]} vd v1 v2 v3 v4 Fp[2] Fi[3] Fc[2] Fp}


 S2394C2 ::~S2394C2(){ note_dtor("S2394C2", this);}
void  S2394C2 ::v8(){vfunc_called(this, "_ZN7S2394C22v8Ev");}
void  S2394C2 ::v9(){vfunc_called(this, "_ZN7S2394C22v9Ev");}
void  S2394C2 ::v10(){vfunc_called(this, "_ZN7S2394C23v10Ev");}
void  S2394C2 ::v11(){vfunc_called(this, "_ZN7S2394C23v11Ev");}
S2394C2 ::S2394C2(){ note_ctor("S2394C2", this);} // tgen

static void Test_S2394C2()
{
  extern Class_Descriptor cd_S2394C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,13)];
    init_test(&cd_S2394C2, buf);
    S2394C2 *dp, &lv = *(dp=new (buf) S2394C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,48), "sizeof(S2394C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2394C2)");
    check_base_class_offset(lv, (S2394C4*)(S2394C3*), 0, "S2394C2");
    check_base_class_offset(lv, (S2394C3*), 0, "S2394C2");
    check_field_offset(lv, s2394c2f0, ABISELECT(32,20), "S2394C2.s2394c2f0");
    check_field_offset(lv, s2394c2f1, ABISELECT(48,28), "S2394C2.s2394c2f1");
    check_field_offset(lv, s2394c2f2, ABISELECT(60,40), "S2394C2.s2394c2f2");
    check_field_offset(lv, s2394c2f3, ABISELECT(64,44), "S2394C2.s2394c2f3");
    test_class_info(&lv, &cd_S2394C2);
    dp->~S2394C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2394C2(Test_S2394C2, "S2394C2", ABISELECT(72,48));

#else // __cplusplus

extern void _ZN7S2394C2C1Ev();
extern void _ZN7S2394C2D1Ev();
Name_Map name_map_S2394C2[] = {
  NSPAIR(_ZN7S2394C2C1Ev),
  NSPAIR(_ZN7S2394C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2394C4;
extern VTBL_ENTRY _ZTI7S2394C4[];
extern  VTBL_ENTRY _ZTV7S2394C4[];
extern Class_Descriptor cd_S2394C3;
extern VTBL_ENTRY _ZTI7S2394C3[];
extern  VTBL_ENTRY _ZTV7S2394C3[];
static Base_Class bases_S2394C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2394C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S2394C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S2394C2[];
extern void _ZN7S2394C2D1Ev();
extern void _ZN7S2394C2D0Ev();
extern void _ZN7S2394C42v6Ev();
extern void _ZN7S2394C32v7Ev();
extern void _ZN7S2394C22v8Ev();
extern void _ZN7S2394C22v9Ev();
extern void _ZN7S2394C23v10Ev();
extern void _ZN7S2394C23v11Ev();
static  VTBL_ENTRY vtc_S2394C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2394C2[0]),
  (VTBL_ENTRY)&_ZN7S2394C2D1Ev,
  (VTBL_ENTRY)&_ZN7S2394C2D0Ev,
  (VTBL_ENTRY)&_ZN7S2394C42v6Ev,
  (VTBL_ENTRY)&_ZN7S2394C32v7Ev,
  (VTBL_ENTRY)&_ZN7S2394C22v8Ev,
  (VTBL_ENTRY)&_ZN7S2394C22v9Ev,
  (VTBL_ENTRY)&_ZN7S2394C23v10Ev,
  (VTBL_ENTRY)&_ZN7S2394C23v11Ev,
};
extern VTBL_ENTRY _ZTI7S2394C2[];
extern  VTBL_ENTRY _ZTV7S2394C2[];
Class_Descriptor cd_S2394C2 = {  "S2394C2", // class name
  bases_S2394C2, 2,
  &(vtc_S2394C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,48), // object size
  NSPAIRA(_ZTI7S2394C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2394C2),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  S2394C5  {
  virtual  ~S2394C5(); // _ZN7S2394C5D1Ev
  virtual void  v12(); // _ZN7S2394C53v12Ev
  S2394C5(); // tgen
};
//SIG(-1 S2394C5) C1{ vd v1}


 S2394C5 ::~S2394C5(){ note_dtor("S2394C5", this);}
void  S2394C5 ::v12(){vfunc_called(this, "_ZN7S2394C53v12Ev");}
S2394C5 ::S2394C5(){ note_ctor("S2394C5", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S2394C5C1Ev();
extern void _ZN7S2394C5D1Ev();
Name_Map name_map_S2394C5[] = {
  NSPAIR(_ZN7S2394C5C1Ev),
  NSPAIR(_ZN7S2394C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S2394C5[];
extern void _ZN7S2394C5D1Ev();
extern void _ZN7S2394C5D0Ev();
extern void _ZN7S2394C53v12Ev();
static  VTBL_ENTRY vtc_S2394C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2394C5[0]),
  (VTBL_ENTRY)&_ZN7S2394C5D1Ev,
  (VTBL_ENTRY)&_ZN7S2394C5D0Ev,
  (VTBL_ENTRY)&_ZN7S2394C53v12Ev,
};
extern VTBL_ENTRY _ZTI7S2394C5[];
extern  VTBL_ENTRY _ZTV7S2394C5[];
Class_Descriptor cd_S2394C5 = {  "S2394C5", // class name
  0,0,//no base classes
  &(vtc_S2394C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S2394C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S2394C5),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  S2394C1  : S2394C2 , S2394C5 {
  int s2394c1f0[4];
  void *s2394c1f1;
  virtual  ~S2394C1(); // _ZN7S2394C1D1Ev
  virtual void  v1(); // _ZN7S2394C12v1Ev
  virtual void  v2(); // _ZN7S2394C12v2Ev
  virtual void  v3(); // _ZN7S2394C12v3Ev
  virtual void  v4(); // _ZN7S2394C12v4Ev
  virtual void  v5(); // _ZN7S2394C12v5Ev
  S2394C1(); // tgen
};
//SIG(1 S2394C1) C1{ BC2{ BC3{ BC4{ vd v6 Fc Fi} vd v7 Fp Fc[2]} vd v8 v9 v10 v11 Fp[2] Fi[3] Fc[2] Fp} BC5{ vd v12} vd v1 v2 v3 v4 v5 Fi[4] Fp}


 S2394C1 ::~S2394C1(){ note_dtor("S2394C1", this);}
void  S2394C1 ::v1(){vfunc_called(this, "_ZN7S2394C12v1Ev");}
void  S2394C1 ::v2(){vfunc_called(this, "_ZN7S2394C12v2Ev");}
void  S2394C1 ::v3(){vfunc_called(this, "_ZN7S2394C12v3Ev");}
void  S2394C1 ::v4(){vfunc_called(this, "_ZN7S2394C12v4Ev");}
void  S2394C1 ::v5(){vfunc_called(this, "_ZN7S2394C12v5Ev");}
S2394C1 ::S2394C1(){ note_ctor("S2394C1", this);} // tgen

static void Test_S2394C1()
{
  extern Class_Descriptor cd_S2394C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(14,19)];
    init_test(&cd_S2394C1, buf);
    S2394C1 *dp, &lv = *(dp=new (buf) S2394C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(104,72), "sizeof(S2394C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2394C1)");
    check_base_class_offset(lv, (S2394C4*)(S2394C3*)(S2394C2*), 0, "S2394C1");
    check_base_class_offset(lv, (S2394C3*)(S2394C2*), 0, "S2394C1");
    check_base_class_offset(lv, (S2394C2*), 0, "S2394C1");
    check_base_class_offset(lv, (S2394C5*), ABISELECT(72,48), "S2394C1");
    check_field_offset(lv, s2394c1f0, ABISELECT(80,52), "S2394C1.s2394c1f0");
    check_field_offset(lv, s2394c1f1, ABISELECT(96,68), "S2394C1.s2394c1f1");
    test_class_info(&lv, &cd_S2394C1);
    dp->~S2394C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2394C1(Test_S2394C1, "S2394C1", ABISELECT(104,72));

#else // __cplusplus

extern void _ZN7S2394C1C1Ev();
extern void _ZN7S2394C1D1Ev();
Name_Map name_map_S2394C1[] = {
  NSPAIR(_ZN7S2394C1C1Ev),
  NSPAIR(_ZN7S2394C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2394C4;
extern VTBL_ENTRY _ZTI7S2394C4[];
extern  VTBL_ENTRY _ZTV7S2394C4[];
extern Class_Descriptor cd_S2394C3;
extern VTBL_ENTRY _ZTI7S2394C3[];
extern  VTBL_ENTRY _ZTV7S2394C3[];
extern Class_Descriptor cd_S2394C2;
extern VTBL_ENTRY _ZTI7S2394C2[];
extern  VTBL_ENTRY _ZTV7S2394C2[];
extern Class_Descriptor cd_S2394C5;
extern VTBL_ENTRY _ZTI7S2394C5[];
extern  VTBL_ENTRY _ZTV7S2394C5[];
static Base_Class bases_S2394C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2394C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S2394C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S2394C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S2394C5,    ABISELECT(72,48), //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
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S2394C1[];
extern void _ZN7S2394C1D1Ev();
extern void _ZN7S2394C1D0Ev();
extern void _ZN7S2394C42v6Ev();
extern void _ZN7S2394C32v7Ev();
extern void _ZN7S2394C22v8Ev();
extern void _ZN7S2394C22v9Ev();
extern void _ZN7S2394C23v10Ev();
extern void _ZN7S2394C23v11Ev();
extern void _ZN7S2394C12v1Ev();
extern void _ZN7S2394C12v2Ev();
extern void _ZN7S2394C12v3Ev();
extern void _ZN7S2394C12v4Ev();
extern void _ZN7S2394C12v5Ev();
extern void ABISELECT(_ZThn72_N7S2394C1D1Ev,_ZThn48_N7S2394C1D1Ev)();
extern void ABISELECT(_ZThn72_N7S2394C1D0Ev,_ZThn48_N7S2394C1D0Ev)();
extern void _ZN7S2394C53v12Ev();
static  VTBL_ENTRY vtc_S2394C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2394C1[0]),
  (VTBL_ENTRY)&_ZN7S2394C1D1Ev,
  (VTBL_ENTRY)&_ZN7S2394C1D0Ev,
  (VTBL_ENTRY)&_ZN7S2394C42v6Ev,
  (VTBL_ENTRY)&_ZN7S2394C32v7Ev,
  (VTBL_ENTRY)&_ZN7S2394C22v8Ev,
  (VTBL_ENTRY)&_ZN7S2394C22v9Ev,
  (VTBL_ENTRY)&_ZN7S2394C23v10Ev,
  (VTBL_ENTRY)&_ZN7S2394C23v11Ev,
  (VTBL_ENTRY)&_ZN7S2394C12v1Ev,
  (VTBL_ENTRY)&_ZN7S2394C12v2Ev,
  (VTBL_ENTRY)&_ZN7S2394C12v3Ev,
  (VTBL_ENTRY)&_ZN7S2394C12v4Ev,
  (VTBL_ENTRY)&_ZN7S2394C12v5Ev,
  ABISELECT(-72,-48),
  (VTBL_ENTRY)&(_ZTI7S2394C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn72_N7S2394C1D1Ev,_ZThn48_N7S2394C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn72_N7S2394C1D0Ev,_ZThn48_N7S2394C1D0Ev),
  (VTBL_ENTRY)&_ZN7S2394C53v12Ev,
};
extern VTBL_ENTRY _ZTI7S2394C1[];
extern  VTBL_ENTRY _ZTV7S2394C1[];
Class_Descriptor cd_S2394C1 = {  "S2394C1", // class name
  bases_S2394C1, 4,
  &(vtc_S2394C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(104,72), // object size
  NSPAIRA(_ZTI7S2394C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S2394C1),20, //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  S2297C4  {
  char s2297c4f0;
  int s2297c4f1;
  virtual  ~S2297C4(); // _ZN7S2297C4D1Ev
  virtual void  v5(); // _ZN7S2297C42v5Ev
  S2297C4(); // tgen
};
//SIG(-1 S2297C4) C1{ vd v1 Fc Fi}


 S2297C4 ::~S2297C4(){ note_dtor("S2297C4", this);}
void  S2297C4 ::v5(){vfunc_called(this, "_ZN7S2297C42v5Ev");}
S2297C4 ::S2297C4(){ note_ctor("S2297C4", this);} // tgen

static void Test_S2297C4()
{
  extern Class_Descriptor cd_S2297C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S2297C4, buf);
    S2297C4 *dp, &lv = *(dp=new (buf) S2297C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S2297C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2297C4)");
    check_field_offset(lv, s2297c4f0, ABISELECT(8,4), "S2297C4.s2297c4f0");
    check_field_offset(lv, s2297c4f1, ABISELECT(12,8), "S2297C4.s2297c4f1");
    test_class_info(&lv, &cd_S2297C4);
    dp->~S2297C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2297C4(Test_S2297C4, "S2297C4", ABISELECT(16,12));

#else // __cplusplus

extern void _ZN7S2297C4C1Ev();
extern void _ZN7S2297C4D1Ev();
Name_Map name_map_S2297C4[] = {
  NSPAIR(_ZN7S2297C4C1Ev),
  NSPAIR(_ZN7S2297C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S2297C4[];
extern void _ZN7S2297C4D1Ev();
extern void _ZN7S2297C4D0Ev();
extern void _ZN7S2297C42v5Ev();
static  VTBL_ENTRY vtc_S2297C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2297C4[0]),
  (VTBL_ENTRY)&_ZN7S2297C4D1Ev,
  (VTBL_ENTRY)&_ZN7S2297C4D0Ev,
  (VTBL_ENTRY)&_ZN7S2297C42v5Ev,
};
extern VTBL_ENTRY _ZTI7S2297C4[];
extern  VTBL_ENTRY _ZTV7S2297C4[];
Class_Descriptor cd_S2297C4 = {  "S2297C4", // class name
  0,0,//no base classes
  &(vtc_S2297C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI7S2297C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S2297C4),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  S2297C3  : S2297C4 {
  void *s2297c3f0;
  char s2297c3f1[2];
  virtual  ~S2297C3(); // _ZN7S2297C3D1Ev
  virtual void  v6(); // _ZN7S2297C32v6Ev
  S2297C3(); // tgen
};
//SIG(-1 S2297C3) C1{ BC2{ vd v2 Fc Fi} vd v1 Fp Fc[2]}


 S2297C3 ::~S2297C3(){ note_dtor("S2297C3", this);}
void  S2297C3 ::v6(){vfunc_called(this, "_ZN7S2297C32v6Ev");}
S2297C3 ::S2297C3(){ note_ctor("S2297C3", this);} // tgen

static void Test_S2297C3()
{
  extern Class_Descriptor cd_S2297C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,6)];
    init_test(&cd_S2297C3, buf);
    S2297C3 *dp, &lv = *(dp=new (buf) S2297C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S2297C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2297C3)");
    check_base_class_offset(lv, (S2297C4*), 0, "S2297C3");
    check_field_offset(lv, s2297c3f0, ABISELECT(16,12), "S2297C3.s2297c3f0");
    check_field_offset(lv, s2297c3f1, ABISELECT(24,16), "S2297C3.s2297c3f1");
    test_class_info(&lv, &cd_S2297C3);
    dp->~S2297C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2297C3(Test_S2297C3, "S2297C3", ABISELECT(32,20));

#else // __cplusplus

extern void _ZN7S2297C3C1Ev();
extern void _ZN7S2297C3D1Ev();
Name_Map name_map_S2297C3[] = {
  NSPAIR(_ZN7S2297C3C1Ev),
  NSPAIR(_ZN7S2297C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2297C4;
extern VTBL_ENTRY _ZTI7S2297C4[];
extern  VTBL_ENTRY _ZTV7S2297C4[];
static Base_Class bases_S2297C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2297C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI7S2297C3[];
extern void _ZN7S2297C3D1Ev();
extern void _ZN7S2297C3D0Ev();
extern void _ZN7S2297C42v5Ev();
extern void _ZN7S2297C32v6Ev();
static  VTBL_ENTRY vtc_S2297C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2297C3[0]),
  (VTBL_ENTRY)&_ZN7S2297C3D1Ev,
  (VTBL_ENTRY)&_ZN7S2297C3D0Ev,
  (VTBL_ENTRY)&_ZN7S2297C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2297C32v6Ev,
};
extern VTBL_ENTRY _ZTI7S2297C3[];
extern  VTBL_ENTRY _ZTV7S2297C3[];
Class_Descriptor cd_S2297C3 = {  "S2297C3", // class name
  bases_S2297C3, 1,
  &(vtc_S2297C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,20), // object size
  NSPAIRA(_ZTI7S2297C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2297C3),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  S2297C2  : S2297C3 {
  void *s2297c2f0[2];
  int s2297c2f1[3];
  char s2297c2f2[2];
  void *s2297c2f3;
  virtual  ~S2297C2(); // _ZN7S2297C2D1Ev
  virtual void  v7(); // _ZN7S2297C22v7Ev
  virtual void  v8(); // _ZN7S2297C22v8Ev
  virtual void  v9(); // _ZN7S2297C22v9Ev
  virtual void  v10(); // _ZN7S2297C23v10Ev
  S2297C2(); // tgen
};
//SIG(-1 S2297C2) C1{ BC2{ BC3{ vd v5 Fc Fi} vd v6 Fp Fc[2]} vd v1 v2 v3 v4 Fp[2] Fi[3] Fc[2] Fp}


 S2297C2 ::~S2297C2(){ note_dtor("S2297C2", this);}
void  S2297C2 ::v7(){vfunc_called(this, "_ZN7S2297C22v7Ev");}
void  S2297C2 ::v8(){vfunc_called(this, "_ZN7S2297C22v8Ev");}
void  S2297C2 ::v9(){vfunc_called(this, "_ZN7S2297C22v9Ev");}
void  S2297C2 ::v10(){vfunc_called(this, "_ZN7S2297C23v10Ev");}
S2297C2 ::S2297C2(){ note_ctor("S2297C2", this);} // tgen

static void Test_S2297C2()
{
  extern Class_Descriptor cd_S2297C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,13)];
    init_test(&cd_S2297C2, buf);
    S2297C2 *dp, &lv = *(dp=new (buf) S2297C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,48), "sizeof(S2297C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2297C2)");
    check_base_class_offset(lv, (S2297C4*)(S2297C3*), 0, "S2297C2");
    check_base_class_offset(lv, (S2297C3*), 0, "S2297C2");
    check_field_offset(lv, s2297c2f0, ABISELECT(32,20), "S2297C2.s2297c2f0");
    check_field_offset(lv, s2297c2f1, ABISELECT(48,28), "S2297C2.s2297c2f1");
    check_field_offset(lv, s2297c2f2, ABISELECT(60,40), "S2297C2.s2297c2f2");
    check_field_offset(lv, s2297c2f3, ABISELECT(64,44), "S2297C2.s2297c2f3");
    test_class_info(&lv, &cd_S2297C2);
    dp->~S2297C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2297C2(Test_S2297C2, "S2297C2", ABISELECT(72,48));

#else // __cplusplus

extern void _ZN7S2297C2C1Ev();
extern void _ZN7S2297C2D1Ev();
Name_Map name_map_S2297C2[] = {
  NSPAIR(_ZN7S2297C2C1Ev),
  NSPAIR(_ZN7S2297C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2297C4;
extern VTBL_ENTRY _ZTI7S2297C4[];
extern  VTBL_ENTRY _ZTV7S2297C4[];
extern Class_Descriptor cd_S2297C3;
extern VTBL_ENTRY _ZTI7S2297C3[];
extern  VTBL_ENTRY _ZTV7S2297C3[];
static Base_Class bases_S2297C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2297C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S2297C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S2297C2[];
extern void _ZN7S2297C2D1Ev();
extern void _ZN7S2297C2D0Ev();
extern void _ZN7S2297C42v5Ev();
extern void _ZN7S2297C32v6Ev();
extern void _ZN7S2297C22v7Ev();
extern void _ZN7S2297C22v8Ev();
extern void _ZN7S2297C22v9Ev();
extern void _ZN7S2297C23v10Ev();
static  VTBL_ENTRY vtc_S2297C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2297C2[0]),
  (VTBL_ENTRY)&_ZN7S2297C2D1Ev,
  (VTBL_ENTRY)&_ZN7S2297C2D0Ev,
  (VTBL_ENTRY)&_ZN7S2297C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2297C32v6Ev,
  (VTBL_ENTRY)&_ZN7S2297C22v7Ev,
  (VTBL_ENTRY)&_ZN7S2297C22v8Ev,
  (VTBL_ENTRY)&_ZN7S2297C22v9Ev,
  (VTBL_ENTRY)&_ZN7S2297C23v10Ev,
};
extern VTBL_ENTRY _ZTI7S2297C2[];
extern  VTBL_ENTRY _ZTV7S2297C2[];
Class_Descriptor cd_S2297C2 = {  "S2297C2", // class name
  bases_S2297C2, 2,
  &(vtc_S2297C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,48), // object size
  NSPAIRA(_ZTI7S2297C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2297C2),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  S2297C1  : S2297C2 {
  int s2297c1f0;
  void *s2297c1f1;
  int s2297c1f2;
  void *s2297c1f3[2];
  int s2297c1f4[2];
  virtual  ~S2297C1(); // _ZN7S2297C1D1Ev
  virtual void  v1(); // _ZN7S2297C12v1Ev
  virtual void  v2(); // _ZN7S2297C12v2Ev
  virtual void  v3(); // _ZN7S2297C12v3Ev
  virtual void  v4(); // _ZN7S2297C12v4Ev
  S2297C1(); // tgen
};
//SIG(1 S2297C1) C1{ BC2{ BC3{ BC4{ vd v5 Fc Fi} vd v6 Fp Fc[2]} vd v7 v8 v9 v10 Fp[2] Fi[3] Fc[2] Fp} vd v1 v2 v3 v4 Fi Fp Fi Fp[2] Fi[2]}


 S2297C1 ::~S2297C1(){ note_dtor("S2297C1", this);}
void  S2297C1 ::v1(){vfunc_called(this, "_ZN7S2297C12v1Ev");}
void  S2297C1 ::v2(){vfunc_called(this, "_ZN7S2297C12v2Ev");}
void  S2297C1 ::v3(){vfunc_called(this, "_ZN7S2297C12v3Ev");}
void  S2297C1 ::v4(){vfunc_called(this, "_ZN7S2297C12v4Ev");}
S2297C1 ::S2297C1(){ note_ctor("S2297C1", this);} // tgen

static void Test_S2297C1()
{
  extern Class_Descriptor cd_S2297C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(16,20)];
    init_test(&cd_S2297C1, buf);
    S2297C1 *dp, &lv = *(dp=new (buf) S2297C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(120,76), "sizeof(S2297C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2297C1)");
    check_base_class_offset(lv, (S2297C4*)(S2297C3*)(S2297C2*), 0, "S2297C1");
    check_base_class_offset(lv, (S2297C3*)(S2297C2*), 0, "S2297C1");
    check_base_class_offset(lv, (S2297C2*), 0, "S2297C1");
    check_field_offset(lv, s2297c1f0, ABISELECT(72,48), "S2297C1.s2297c1f0");
    check_field_offset(lv, s2297c1f1, ABISELECT(80,52), "S2297C1.s2297c1f1");
    check_field_offset(lv, s2297c1f2, ABISELECT(88,56), "S2297C1.s2297c1f2");
    check_field_offset(lv, s2297c1f3, ABISELECT(96,60), "S2297C1.s2297c1f3");
    check_field_offset(lv, s2297c1f4, ABISELECT(112,68), "S2297C1.s2297c1f4");
    test_class_info(&lv, &cd_S2297C1);
    dp->~S2297C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2297C1(Test_S2297C1, "S2297C1", ABISELECT(120,76));

#else // __cplusplus

extern void _ZN7S2297C1C1Ev();
extern void _ZN7S2297C1D1Ev();
Name_Map name_map_S2297C1[] = {
  NSPAIR(_ZN7S2297C1C1Ev),
  NSPAIR(_ZN7S2297C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2297C4;
extern VTBL_ENTRY _ZTI7S2297C4[];
extern  VTBL_ENTRY _ZTV7S2297C4[];
extern Class_Descriptor cd_S2297C3;
extern VTBL_ENTRY _ZTI7S2297C3[];
extern  VTBL_ENTRY _ZTV7S2297C3[];
extern Class_Descriptor cd_S2297C2;
extern VTBL_ENTRY _ZTI7S2297C2[];
extern  VTBL_ENTRY _ZTV7S2297C2[];
static Base_Class bases_S2297C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2297C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S2297C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S2297C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S2297C1[];
extern void _ZN7S2297C1D1Ev();
extern void _ZN7S2297C1D0Ev();
extern void _ZN7S2297C42v5Ev();
extern void _ZN7S2297C32v6Ev();
extern void _ZN7S2297C22v7Ev();
extern void _ZN7S2297C22v8Ev();
extern void _ZN7S2297C22v9Ev();
extern void _ZN7S2297C23v10Ev();
extern void _ZN7S2297C12v1Ev();
extern void _ZN7S2297C12v2Ev();
extern void _ZN7S2297C12v3Ev();
extern void _ZN7S2297C12v4Ev();
static  VTBL_ENTRY vtc_S2297C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2297C1[0]),
  (VTBL_ENTRY)&_ZN7S2297C1D1Ev,
  (VTBL_ENTRY)&_ZN7S2297C1D0Ev,
  (VTBL_ENTRY)&_ZN7S2297C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2297C32v6Ev,
  (VTBL_ENTRY)&_ZN7S2297C22v7Ev,
  (VTBL_ENTRY)&_ZN7S2297C22v8Ev,
  (VTBL_ENTRY)&_ZN7S2297C22v9Ev,
  (VTBL_ENTRY)&_ZN7S2297C23v10Ev,
  (VTBL_ENTRY)&_ZN7S2297C12v1Ev,
  (VTBL_ENTRY)&_ZN7S2297C12v2Ev,
  (VTBL_ENTRY)&_ZN7S2297C12v3Ev,
  (VTBL_ENTRY)&_ZN7S2297C12v4Ev,
};
extern VTBL_ENTRY _ZTI7S2297C1[];
extern  VTBL_ENTRY _ZTV7S2297C1[];
Class_Descriptor cd_S2297C1 = {  "S2297C1", // class name
  bases_S2297C1, 3,
  &(vtc_S2297C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(120,76), // object size
  NSPAIRA(_ZTI7S2297C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2297C1),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  S2316C4  {
  char s2316c4f0;
  int s2316c4f1;
  virtual  ~S2316C4(); // _ZN7S2316C4D1Ev
  virtual void  v5(); // _ZN7S2316C42v5Ev
  S2316C4(); // tgen
};
//SIG(-1 S2316C4) C1{ vd v1 Fc Fi}


 S2316C4 ::~S2316C4(){ note_dtor("S2316C4", this);}
void  S2316C4 ::v5(){vfunc_called(this, "_ZN7S2316C42v5Ev");}
S2316C4 ::S2316C4(){ note_ctor("S2316C4", this);} // tgen

static void Test_S2316C4()
{
  extern Class_Descriptor cd_S2316C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S2316C4, buf);
    S2316C4 *dp, &lv = *(dp=new (buf) S2316C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S2316C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2316C4)");
    check_field_offset(lv, s2316c4f0, ABISELECT(8,4), "S2316C4.s2316c4f0");
    check_field_offset(lv, s2316c4f1, ABISELECT(12,8), "S2316C4.s2316c4f1");
    test_class_info(&lv, &cd_S2316C4);
    dp->~S2316C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2316C4(Test_S2316C4, "S2316C4", ABISELECT(16,12));

#else // __cplusplus

extern void _ZN7S2316C4C1Ev();
extern void _ZN7S2316C4D1Ev();
Name_Map name_map_S2316C4[] = {
  NSPAIR(_ZN7S2316C4C1Ev),
  NSPAIR(_ZN7S2316C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S2316C4[];
extern void _ZN7S2316C4D1Ev();
extern void _ZN7S2316C4D0Ev();
extern void _ZN7S2316C42v5Ev();
static  VTBL_ENTRY vtc_S2316C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2316C4[0]),
  (VTBL_ENTRY)&_ZN7S2316C4D1Ev,
  (VTBL_ENTRY)&_ZN7S2316C4D0Ev,
  (VTBL_ENTRY)&_ZN7S2316C42v5Ev,
};
extern VTBL_ENTRY _ZTI7S2316C4[];
extern  VTBL_ENTRY _ZTV7S2316C4[];
Class_Descriptor cd_S2316C4 = {  "S2316C4", // class name
  0,0,//no base classes
  &(vtc_S2316C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI7S2316C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S2316C4),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  S2316C3  : S2316C4 {
  void *s2316c3f0;
  char s2316c3f1[2];
  virtual  ~S2316C3(); // _ZN7S2316C3D1Ev
  virtual void  v6(); // _ZN7S2316C32v6Ev
  S2316C3(); // tgen
};
//SIG(-1 S2316C3) C1{ BC2{ vd v2 Fc Fi} vd v1 Fp Fc[2]}


 S2316C3 ::~S2316C3(){ note_dtor("S2316C3", this);}
void  S2316C3 ::v6(){vfunc_called(this, "_ZN7S2316C32v6Ev");}
S2316C3 ::S2316C3(){ note_ctor("S2316C3", this);} // tgen

static void Test_S2316C3()
{
  extern Class_Descriptor cd_S2316C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,6)];
    init_test(&cd_S2316C3, buf);
    S2316C3 *dp, &lv = *(dp=new (buf) S2316C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S2316C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2316C3)");
    check_base_class_offset(lv, (S2316C4*), 0, "S2316C3");
    check_field_offset(lv, s2316c3f0, ABISELECT(16,12), "S2316C3.s2316c3f0");
    check_field_offset(lv, s2316c3f1, ABISELECT(24,16), "S2316C3.s2316c3f1");
    test_class_info(&lv, &cd_S2316C3);
    dp->~S2316C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2316C3(Test_S2316C3, "S2316C3", ABISELECT(32,20));

#else // __cplusplus

extern void _ZN7S2316C3C1Ev();
extern void _ZN7S2316C3D1Ev();
Name_Map name_map_S2316C3[] = {
  NSPAIR(_ZN7S2316C3C1Ev),
  NSPAIR(_ZN7S2316C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2316C4;
extern VTBL_ENTRY _ZTI7S2316C4[];
extern  VTBL_ENTRY _ZTV7S2316C4[];
static Base_Class bases_S2316C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2316C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI7S2316C3[];
extern void _ZN7S2316C3D1Ev();
extern void _ZN7S2316C3D0Ev();
extern void _ZN7S2316C42v5Ev();
extern void _ZN7S2316C32v6Ev();
static  VTBL_ENTRY vtc_S2316C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2316C3[0]),
  (VTBL_ENTRY)&_ZN7S2316C3D1Ev,
  (VTBL_ENTRY)&_ZN7S2316C3D0Ev,
  (VTBL_ENTRY)&_ZN7S2316C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2316C32v6Ev,
};
extern VTBL_ENTRY _ZTI7S2316C3[];
extern  VTBL_ENTRY _ZTV7S2316C3[];
Class_Descriptor cd_S2316C3 = {  "S2316C3", // class name
  bases_S2316C3, 1,
  &(vtc_S2316C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,20), // object size
  NSPAIRA(_ZTI7S2316C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2316C3),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  S2316C2  : S2316C3 {
  void *s2316c2f0[2];
  int s2316c2f1[3];
  char s2316c2f2[2];
  void *s2316c2f3;
  virtual  ~S2316C2(); // _ZN7S2316C2D1Ev
  virtual void  v7(); // _ZN7S2316C22v7Ev
  virtual void  v8(); // _ZN7S2316C22v8Ev
  virtual void  v9(); // _ZN7S2316C22v9Ev
  virtual void  v10(); // _ZN7S2316C23v10Ev
  S2316C2(); // tgen
};
//SIG(-1 S2316C2) C1{ BC2{ BC3{ vd v5 Fc Fi} vd v6 Fp Fc[2]} vd v1 v2 v3 v4 Fp[2] Fi[3] Fc[2] Fp}


 S2316C2 ::~S2316C2(){ note_dtor("S2316C2", this);}
void  S2316C2 ::v7(){vfunc_called(this, "_ZN7S2316C22v7Ev");}
void  S2316C2 ::v8(){vfunc_called(this, "_ZN7S2316C22v8Ev");}
void  S2316C2 ::v9(){vfunc_called(this, "_ZN7S2316C22v9Ev");}
void  S2316C2 ::v10(){vfunc_called(this, "_ZN7S2316C23v10Ev");}
S2316C2 ::S2316C2(){ note_ctor("S2316C2", this);} // tgen

static void Test_S2316C2()
{
  extern Class_Descriptor cd_S2316C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,13)];
    init_test(&cd_S2316C2, buf);
    S2316C2 *dp, &lv = *(dp=new (buf) S2316C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,48), "sizeof(S2316C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2316C2)");
    check_base_class_offset(lv, (S2316C4*)(S2316C3*), 0, "S2316C2");
    check_base_class_offset(lv, (S2316C3*), 0, "S2316C2");
    check_field_offset(lv, s2316c2f0, ABISELECT(32,20), "S2316C2.s2316c2f0");
    check_field_offset(lv, s2316c2f1, ABISELECT(48,28), "S2316C2.s2316c2f1");
    check_field_offset(lv, s2316c2f2, ABISELECT(60,40), "S2316C2.s2316c2f2");
    check_field_offset(lv, s2316c2f3, ABISELECT(64,44), "S2316C2.s2316c2f3");
    test_class_info(&lv, &cd_S2316C2);
    dp->~S2316C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2316C2(Test_S2316C2, "S2316C2", ABISELECT(72,48));

#else // __cplusplus

extern void _ZN7S2316C2C1Ev();
extern void _ZN7S2316C2D1Ev();
Name_Map name_map_S2316C2[] = {
  NSPAIR(_ZN7S2316C2C1Ev),
  NSPAIR(_ZN7S2316C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2316C4;
extern VTBL_ENTRY _ZTI7S2316C4[];
extern  VTBL_ENTRY _ZTV7S2316C4[];
extern Class_Descriptor cd_S2316C3;
extern VTBL_ENTRY _ZTI7S2316C3[];
extern  VTBL_ENTRY _ZTV7S2316C3[];
static Base_Class bases_S2316C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2316C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S2316C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S2316C2[];
extern void _ZN7S2316C2D1Ev();
extern void _ZN7S2316C2D0Ev();
extern void _ZN7S2316C42v5Ev();
extern void _ZN7S2316C32v6Ev();
extern void _ZN7S2316C22v7Ev();
extern void _ZN7S2316C22v8Ev();
extern void _ZN7S2316C22v9Ev();
extern void _ZN7S2316C23v10Ev();
static  VTBL_ENTRY vtc_S2316C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2316C2[0]),
  (VTBL_ENTRY)&_ZN7S2316C2D1Ev,
  (VTBL_ENTRY)&_ZN7S2316C2D0Ev,
  (VTBL_ENTRY)&_ZN7S2316C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2316C32v6Ev,
  (VTBL_ENTRY)&_ZN7S2316C22v7Ev,
  (VTBL_ENTRY)&_ZN7S2316C22v8Ev,
  (VTBL_ENTRY)&_ZN7S2316C22v9Ev,
  (VTBL_ENTRY)&_ZN7S2316C23v10Ev,
};
extern VTBL_ENTRY _ZTI7S2316C2[];
extern  VTBL_ENTRY _ZTV7S2316C2[];
Class_Descriptor cd_S2316C2 = {  "S2316C2", // class name
  bases_S2316C2, 2,
  &(vtc_S2316C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,48), // object size
  NSPAIRA(_ZTI7S2316C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2316C2),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  S2316C1  : S2316C2 {
  void *s2316c1f0;
  int s2316c1f1;
  void *s2316c1f2[2];
  int s2316c1f3[3];
  virtual  ~S2316C1(); // _ZN7S2316C1D1Ev
  virtual void  v1(); // _ZN7S2316C12v1Ev
  virtual void  v2(); // _ZN7S2316C12v2Ev
  virtual void  v3(); // _ZN7S2316C12v3Ev
  virtual void  v4(); // _ZN7S2316C12v4Ev
  S2316C1(); // tgen
};
//SIG(1 S2316C1) C1{ BC2{ BC3{ BC4{ vd v5 Fc Fi} vd v6 Fp Fc[2]} vd v7 v8 v9 v10 Fp[2] Fi[3] Fc[2] Fp} vd v1 v2 v3 v4 Fp Fi Fp[2] Fi[3]}


 S2316C1 ::~S2316C1(){ note_dtor("S2316C1", this);}
void  S2316C1 ::v1(){vfunc_called(this, "_ZN7S2316C12v1Ev");}
void  S2316C1 ::v2(){vfunc_called(this, "_ZN7S2316C12v2Ev");}
void  S2316C1 ::v3(){vfunc_called(this, "_ZN7S2316C12v3Ev");}
void  S2316C1 ::v4(){vfunc_called(this, "_ZN7S2316C12v4Ev");}
S2316C1 ::S2316C1(){ note_ctor("S2316C1", this);} // tgen

static void Test_S2316C1()
{
  extern Class_Descriptor cd_S2316C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(16,20)];
    init_test(&cd_S2316C1, buf);
    S2316C1 *dp, &lv = *(dp=new (buf) S2316C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(120,76), "sizeof(S2316C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2316C1)");
    check_base_class_offset(lv, (S2316C4*)(S2316C3*)(S2316C2*), 0, "S2316C1");
    check_base_class_offset(lv, (S2316C3*)(S2316C2*), 0, "S2316C1");
    check_base_class_offset(lv, (S2316C2*), 0, "S2316C1");
    check_field_offset(lv, s2316c1f0, ABISELECT(72,48), "S2316C1.s2316c1f0");
    check_field_offset(lv, s2316c1f1, ABISELECT(80,52), "S2316C1.s2316c1f1");
    check_field_offset(lv, s2316c1f2, ABISELECT(88,56), "S2316C1.s2316c1f2");
    check_field_offset(lv, s2316c1f3, ABISELECT(104,64), "S2316C1.s2316c1f3");
    test_class_info(&lv, &cd_S2316C1);
    dp->~S2316C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2316C1(Test_S2316C1, "S2316C1", ABISELECT(120,76));

#else // __cplusplus

extern void _ZN7S2316C1C1Ev();
extern void _ZN7S2316C1D1Ev();
Name_Map name_map_S2316C1[] = {
  NSPAIR(_ZN7S2316C1C1Ev),
  NSPAIR(_ZN7S2316C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2316C4;
extern VTBL_ENTRY _ZTI7S2316C4[];
extern  VTBL_ENTRY _ZTV7S2316C4[];
extern Class_Descriptor cd_S2316C3;
extern VTBL_ENTRY _ZTI7S2316C3[];
extern  VTBL_ENTRY _ZTV7S2316C3[];
extern Class_Descriptor cd_S2316C2;
extern VTBL_ENTRY _ZTI7S2316C2[];
extern  VTBL_ENTRY _ZTV7S2316C2[];
static Base_Class bases_S2316C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2316C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S2316C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S2316C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S2316C1[];
extern void _ZN7S2316C1D1Ev();
extern void _ZN7S2316C1D0Ev();
extern void _ZN7S2316C42v5Ev();
extern void _ZN7S2316C32v6Ev();
extern void _ZN7S2316C22v7Ev();
extern void _ZN7S2316C22v8Ev();
extern void _ZN7S2316C22v9Ev();
extern void _ZN7S2316C23v10Ev();
extern void _ZN7S2316C12v1Ev();
extern void _ZN7S2316C12v2Ev();
extern void _ZN7S2316C12v3Ev();
extern void _ZN7S2316C12v4Ev();
static  VTBL_ENTRY vtc_S2316C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2316C1[0]),
  (VTBL_ENTRY)&_ZN7S2316C1D1Ev,
  (VTBL_ENTRY)&_ZN7S2316C1D0Ev,
  (VTBL_ENTRY)&_ZN7S2316C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2316C32v6Ev,
  (VTBL_ENTRY)&_ZN7S2316C22v7Ev,
  (VTBL_ENTRY)&_ZN7S2316C22v8Ev,
  (VTBL_ENTRY)&_ZN7S2316C22v9Ev,
  (VTBL_ENTRY)&_ZN7S2316C23v10Ev,
  (VTBL_ENTRY)&_ZN7S2316C12v1Ev,
  (VTBL_ENTRY)&_ZN7S2316C12v2Ev,
  (VTBL_ENTRY)&_ZN7S2316C12v3Ev,
  (VTBL_ENTRY)&_ZN7S2316C12v4Ev,
};
extern VTBL_ENTRY _ZTI7S2316C1[];
extern  VTBL_ENTRY _ZTV7S2316C1[];
Class_Descriptor cd_S2316C1 = {  "S2316C1", // class name
  bases_S2316C1, 3,
  &(vtc_S2316C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(120,76), // object size
  NSPAIRA(_ZTI7S2316C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2316C1),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  S2302C4  {
  char s2302c4f0;
  int s2302c4f1;
  virtual  ~S2302C4(); // _ZN7S2302C4D1Ev
  virtual void  v5(); // _ZN7S2302C42v5Ev
  S2302C4(); // tgen
};
//SIG(-1 S2302C4) C1{ vd v1 Fc Fi}


 S2302C4 ::~S2302C4(){ note_dtor("S2302C4", this);}
void  S2302C4 ::v5(){vfunc_called(this, "_ZN7S2302C42v5Ev");}
S2302C4 ::S2302C4(){ note_ctor("S2302C4", this);} // tgen

static void Test_S2302C4()
{
  extern Class_Descriptor cd_S2302C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S2302C4, buf);
    S2302C4 *dp, &lv = *(dp=new (buf) S2302C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S2302C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2302C4)");
    check_field_offset(lv, s2302c4f0, ABISELECT(8,4), "S2302C4.s2302c4f0");
    check_field_offset(lv, s2302c4f1, ABISELECT(12,8), "S2302C4.s2302c4f1");
    test_class_info(&lv, &cd_S2302C4);
    dp->~S2302C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2302C4(Test_S2302C4, "S2302C4", ABISELECT(16,12));

#else // __cplusplus

extern void _ZN7S2302C4C1Ev();
extern void _ZN7S2302C4D1Ev();
Name_Map name_map_S2302C4[] = {
  NSPAIR(_ZN7S2302C4C1Ev),
  NSPAIR(_ZN7S2302C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S2302C4[];
extern void _ZN7S2302C4D1Ev();
extern void _ZN7S2302C4D0Ev();
extern void _ZN7S2302C42v5Ev();
static  VTBL_ENTRY vtc_S2302C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2302C4[0]),
  (VTBL_ENTRY)&_ZN7S2302C4D1Ev,
  (VTBL_ENTRY)&_ZN7S2302C4D0Ev,
  (VTBL_ENTRY)&_ZN7S2302C42v5Ev,
};
extern VTBL_ENTRY _ZTI7S2302C4[];
extern  VTBL_ENTRY _ZTV7S2302C4[];
Class_Descriptor cd_S2302C4 = {  "S2302C4", // class name
  0,0,//no base classes
  &(vtc_S2302C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI7S2302C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S2302C4),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  S2302C3  : S2302C4 {
  void *s2302c3f0;
  char s2302c3f1[2];
  virtual  ~S2302C3(); // _ZN7S2302C3D1Ev
  virtual void  v6(); // _ZN7S2302C32v6Ev
  S2302C3(); // tgen
};
//SIG(-1 S2302C3) C1{ BC2{ vd v2 Fc Fi} vd v1 Fp Fc[2]}


 S2302C3 ::~S2302C3(){ note_dtor("S2302C3", this);}
void  S2302C3 ::v6(){vfunc_called(this, "_ZN7S2302C32v6Ev");}
S2302C3 ::S2302C3(){ note_ctor("S2302C3", this);} // tgen

static void Test_S2302C3()
{
  extern Class_Descriptor cd_S2302C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,6)];
    init_test(&cd_S2302C3, buf);
    S2302C3 *dp, &lv = *(dp=new (buf) S2302C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S2302C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2302C3)");
    check_base_class_offset(lv, (S2302C4*), 0, "S2302C3");
    check_field_offset(lv, s2302c3f0, ABISELECT(16,12), "S2302C3.s2302c3f0");
    check_field_offset(lv, s2302c3f1, ABISELECT(24,16), "S2302C3.s2302c3f1");
    test_class_info(&lv, &cd_S2302C3);
    dp->~S2302C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2302C3(Test_S2302C3, "S2302C3", ABISELECT(32,20));

#else // __cplusplus

extern void _ZN7S2302C3C1Ev();
extern void _ZN7S2302C3D1Ev();
Name_Map name_map_S2302C3[] = {
  NSPAIR(_ZN7S2302C3C1Ev),
  NSPAIR(_ZN7S2302C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2302C4;
extern VTBL_ENTRY _ZTI7S2302C4[];
extern  VTBL_ENTRY _ZTV7S2302C4[];
static Base_Class bases_S2302C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2302C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI7S2302C3[];
extern void _ZN7S2302C3D1Ev();
extern void _ZN7S2302C3D0Ev();
extern void _ZN7S2302C42v5Ev();
extern void _ZN7S2302C32v6Ev();
static  VTBL_ENTRY vtc_S2302C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2302C3[0]),
  (VTBL_ENTRY)&_ZN7S2302C3D1Ev,
  (VTBL_ENTRY)&_ZN7S2302C3D0Ev,
  (VTBL_ENTRY)&_ZN7S2302C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2302C32v6Ev,
};
extern VTBL_ENTRY _ZTI7S2302C3[];
extern  VTBL_ENTRY _ZTV7S2302C3[];
Class_Descriptor cd_S2302C3 = {  "S2302C3", // class name
  bases_S2302C3, 1,
  &(vtc_S2302C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,20), // object size
  NSPAIRA(_ZTI7S2302C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2302C3),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  S2302C2  : S2302C3 {
  void *s2302c2f0[2];
  int s2302c2f1[3];
  char s2302c2f2[2];
  void *s2302c2f3;
  virtual  ~S2302C2(); // _ZN7S2302C2D1Ev
  virtual void  v7(); // _ZN7S2302C22v7Ev
  virtual void  v8(); // _ZN7S2302C22v8Ev
  virtual void  v9(); // _ZN7S2302C22v9Ev
  virtual void  v10(); // _ZN7S2302C23v10Ev
  S2302C2(); // tgen
};
//SIG(-1 S2302C2) C1{ BC2{ BC3{ vd v5 Fc Fi} vd v6 Fp Fc[2]} vd v1 v2 v3 v4 Fp[2] Fi[3] Fc[2] Fp}


 S2302C2 ::~S2302C2(){ note_dtor("S2302C2", this);}
void  S2302C2 ::v7(){vfunc_called(this, "_ZN7S2302C22v7Ev");}
void  S2302C2 ::v8(){vfunc_called(this, "_ZN7S2302C22v8Ev");}
void  S2302C2 ::v9(){vfunc_called(this, "_ZN7S2302C22v9Ev");}
void  S2302C2 ::v10(){vfunc_called(this, "_ZN7S2302C23v10Ev");}
S2302C2 ::S2302C2(){ note_ctor("S2302C2", this);} // tgen

static void Test_S2302C2()
{
  extern Class_Descriptor cd_S2302C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,13)];
    init_test(&cd_S2302C2, buf);
    S2302C2 *dp, &lv = *(dp=new (buf) S2302C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,48), "sizeof(S2302C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2302C2)");
    check_base_class_offset(lv, (S2302C4*)(S2302C3*), 0, "S2302C2");
    check_base_class_offset(lv, (S2302C3*), 0, "S2302C2");
    check_field_offset(lv, s2302c2f0, ABISELECT(32,20), "S2302C2.s2302c2f0");
    check_field_offset(lv, s2302c2f1, ABISELECT(48,28), "S2302C2.s2302c2f1");
    check_field_offset(lv, s2302c2f2, ABISELECT(60,40), "S2302C2.s2302c2f2");
    check_field_offset(lv, s2302c2f3, ABISELECT(64,44), "S2302C2.s2302c2f3");
    test_class_info(&lv, &cd_S2302C2);
    dp->~S2302C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2302C2(Test_S2302C2, "S2302C2", ABISELECT(72,48));

#else // __cplusplus

extern void _ZN7S2302C2C1Ev();
extern void _ZN7S2302C2D1Ev();
Name_Map name_map_S2302C2[] = {
  NSPAIR(_ZN7S2302C2C1Ev),
  NSPAIR(_ZN7S2302C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2302C4;
extern VTBL_ENTRY _ZTI7S2302C4[];
extern  VTBL_ENTRY _ZTV7S2302C4[];
extern Class_Descriptor cd_S2302C3;
extern VTBL_ENTRY _ZTI7S2302C3[];
extern  VTBL_ENTRY _ZTV7S2302C3[];
static Base_Class bases_S2302C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2302C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S2302C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S2302C2[];
extern void _ZN7S2302C2D1Ev();
extern void _ZN7S2302C2D0Ev();
extern void _ZN7S2302C42v5Ev();
extern void _ZN7S2302C32v6Ev();
extern void _ZN7S2302C22v7Ev();
extern void _ZN7S2302C22v8Ev();
extern void _ZN7S2302C22v9Ev();
extern void _ZN7S2302C23v10Ev();
static  VTBL_ENTRY vtc_S2302C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2302C2[0]),
  (VTBL_ENTRY)&_ZN7S2302C2D1Ev,
  (VTBL_ENTRY)&_ZN7S2302C2D0Ev,
  (VTBL_ENTRY)&_ZN7S2302C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2302C32v6Ev,
  (VTBL_ENTRY)&_ZN7S2302C22v7Ev,
  (VTBL_ENTRY)&_ZN7S2302C22v8Ev,
  (VTBL_ENTRY)&_ZN7S2302C22v9Ev,
  (VTBL_ENTRY)&_ZN7S2302C23v10Ev,
};
extern VTBL_ENTRY _ZTI7S2302C2[];
extern  VTBL_ENTRY _ZTV7S2302C2[];
Class_Descriptor cd_S2302C2 = {  "S2302C2", // class name
  bases_S2302C2, 2,
  &(vtc_S2302C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,48), // object size
  NSPAIRA(_ZTI7S2302C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2302C2),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  S2302C1  : S2302C2 {
  int s2302c1f0[3];
  void *s2302c1f1;
  int s2302c1f2;
  char s2302c1f3;
  void *s2302c1f4;
  virtual  ~S2302C1(); // _ZN7S2302C1D1Ev
  virtual void  v1(); // _ZN7S2302C12v1Ev
  virtual void  v2(); // _ZN7S2302C12v2Ev
  virtual void  v3(); // _ZN7S2302C12v3Ev
  virtual void  v4(); // _ZN7S2302C12v4Ev
  S2302C1(); // tgen
};
//SIG(1 S2302C1) C1{ BC2{ BC3{ BC4{ vd v5 Fc Fi} vd v6 Fp Fc[2]} vd v7 v8 v9 v10 Fp[2] Fi[3] Fc[2] Fp} vd v1 v2 v3 v4 Fi[3] Fp Fi Fc Fp}


 S2302C1 ::~S2302C1(){ note_dtor("S2302C1", this);}
void  S2302C1 ::v1(){vfunc_called(this, "_ZN7S2302C12v1Ev");}
void  S2302C1 ::v2(){vfunc_called(this, "_ZN7S2302C12v2Ev");}
void  S2302C1 ::v3(){vfunc_called(this, "_ZN7S2302C12v3Ev");}
void  S2302C1 ::v4(){vfunc_called(this, "_ZN7S2302C12v4Ev");}
S2302C1 ::S2302C1(){ note_ctor("S2302C1", this);} // tgen

static void Test_S2302C1()
{
  extern Class_Descriptor cd_S2302C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(15,20)];
    init_test(&cd_S2302C1, buf);
    S2302C1 *dp, &lv = *(dp=new (buf) S2302C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(112,76), "sizeof(S2302C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2302C1)");
    check_base_class_offset(lv, (S2302C4*)(S2302C3*)(S2302C2*), 0, "S2302C1");
    check_base_class_offset(lv, (S2302C3*)(S2302C2*), 0, "S2302C1");
    check_base_class_offset(lv, (S2302C2*), 0, "S2302C1");
    check_field_offset(lv, s2302c1f0, ABISELECT(72,48), "S2302C1.s2302c1f0");
    check_field_offset(lv, s2302c1f1, ABISELECT(88,60), "S2302C1.s2302c1f1");
    check_field_offset(lv, s2302c1f2, ABISELECT(96,64), "S2302C1.s2302c1f2");
    check_field_offset(lv, s2302c1f3, ABISELECT(100,68), "S2302C1.s2302c1f3");
    check_field_offset(lv, s2302c1f4, ABISELECT(104,72), "S2302C1.s2302c1f4");
    test_class_info(&lv, &cd_S2302C1);
    dp->~S2302C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2302C1(Test_S2302C1, "S2302C1", ABISELECT(112,76));

#else // __cplusplus

extern void _ZN7S2302C1C1Ev();
extern void _ZN7S2302C1D1Ev();
Name_Map name_map_S2302C1[] = {
  NSPAIR(_ZN7S2302C1C1Ev),
  NSPAIR(_ZN7S2302C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2302C4;
extern VTBL_ENTRY _ZTI7S2302C4[];
extern  VTBL_ENTRY _ZTV7S2302C4[];
extern Class_Descriptor cd_S2302C3;
extern VTBL_ENTRY _ZTI7S2302C3[];
extern  VTBL_ENTRY _ZTV7S2302C3[];
extern Class_Descriptor cd_S2302C2;
extern VTBL_ENTRY _ZTI7S2302C2[];
extern  VTBL_ENTRY _ZTV7S2302C2[];
static Base_Class bases_S2302C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2302C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S2302C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S2302C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S2302C1[];
extern void _ZN7S2302C1D1Ev();
extern void _ZN7S2302C1D0Ev();
extern void _ZN7S2302C42v5Ev();
extern void _ZN7S2302C32v6Ev();
extern void _ZN7S2302C22v7Ev();
extern void _ZN7S2302C22v8Ev();
extern void _ZN7S2302C22v9Ev();
extern void _ZN7S2302C23v10Ev();
extern void _ZN7S2302C12v1Ev();
extern void _ZN7S2302C12v2Ev();
extern void _ZN7S2302C12v3Ev();
extern void _ZN7S2302C12v4Ev();
static  VTBL_ENTRY vtc_S2302C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2302C1[0]),
  (VTBL_ENTRY)&_ZN7S2302C1D1Ev,
  (VTBL_ENTRY)&_ZN7S2302C1D0Ev,
  (VTBL_ENTRY)&_ZN7S2302C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2302C32v6Ev,
  (VTBL_ENTRY)&_ZN7S2302C22v7Ev,
  (VTBL_ENTRY)&_ZN7S2302C22v8Ev,
  (VTBL_ENTRY)&_ZN7S2302C22v9Ev,
  (VTBL_ENTRY)&_ZN7S2302C23v10Ev,
  (VTBL_ENTRY)&_ZN7S2302C12v1Ev,
  (VTBL_ENTRY)&_ZN7S2302C12v2Ev,
  (VTBL_ENTRY)&_ZN7S2302C12v3Ev,
  (VTBL_ENTRY)&_ZN7S2302C12v4Ev,
};
extern VTBL_ENTRY _ZTI7S2302C1[];
extern  VTBL_ENTRY _ZTV7S2302C1[];
Class_Descriptor cd_S2302C1 = {  "S2302C1", // class name
  bases_S2302C1, 3,
  &(vtc_S2302C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(112,76), // object size
  NSPAIRA(_ZTI7S2302C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2302C1),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  S2303C4  {
  char s2303c4f0;
  int s2303c4f1;
  virtual  ~S2303C4(); // _ZN7S2303C4D1Ev
  virtual void  v5(); // _ZN7S2303C42v5Ev
  S2303C4(); // tgen
};
//SIG(-1 S2303C4) C1{ vd v1 Fc Fi}


 S2303C4 ::~S2303C4(){ note_dtor("S2303C4", this);}
void  S2303C4 ::v5(){vfunc_called(this, "_ZN7S2303C42v5Ev");}
S2303C4 ::S2303C4(){ note_ctor("S2303C4", this);} // tgen

static void Test_S2303C4()
{
  extern Class_Descriptor cd_S2303C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S2303C4, buf);
    S2303C4 *dp, &lv = *(dp=new (buf) S2303C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S2303C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2303C4)");
    check_field_offset(lv, s2303c4f0, ABISELECT(8,4), "S2303C4.s2303c4f0");
    check_field_offset(lv, s2303c4f1, ABISELECT(12,8), "S2303C4.s2303c4f1");
    test_class_info(&lv, &cd_S2303C4);
    dp->~S2303C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2303C4(Test_S2303C4, "S2303C4", ABISELECT(16,12));

#else // __cplusplus

extern void _ZN7S2303C4C1Ev();
extern void _ZN7S2303C4D1Ev();
Name_Map name_map_S2303C4[] = {
  NSPAIR(_ZN7S2303C4C1Ev),
  NSPAIR(_ZN7S2303C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S2303C4[];
extern void _ZN7S2303C4D1Ev();
extern void _ZN7S2303C4D0Ev();
extern void _ZN7S2303C42v5Ev();
static  VTBL_ENTRY vtc_S2303C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2303C4[0]),
  (VTBL_ENTRY)&_ZN7S2303C4D1Ev,
  (VTBL_ENTRY)&_ZN7S2303C4D0Ev,
  (VTBL_ENTRY)&_ZN7S2303C42v5Ev,
};
extern VTBL_ENTRY _ZTI7S2303C4[];
extern  VTBL_ENTRY _ZTV7S2303C4[];
Class_Descriptor cd_S2303C4 = {  "S2303C4", // class name
  0,0,//no base classes
  &(vtc_S2303C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI7S2303C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S2303C4),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  S2303C3  : S2303C4 {
  void *s2303c3f0;
  char s2303c3f1[2];
  virtual  ~S2303C3(); // _ZN7S2303C3D1Ev
  virtual void  v6(); // _ZN7S2303C32v6Ev
  S2303C3(); // tgen
};
//SIG(-1 S2303C3) C1{ BC2{ vd v2 Fc Fi} vd v1 Fp Fc[2]}


 S2303C3 ::~S2303C3(){ note_dtor("S2303C3", this);}
void  S2303C3 ::v6(){vfunc_called(this, "_ZN7S2303C32v6Ev");}
S2303C3 ::S2303C3(){ note_ctor("S2303C3", this);} // tgen

static void Test_S2303C3()
{
  extern Class_Descriptor cd_S2303C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,6)];
    init_test(&cd_S2303C3, buf);
    S2303C3 *dp, &lv = *(dp=new (buf) S2303C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S2303C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2303C3)");
    check_base_class_offset(lv, (S2303C4*), 0, "S2303C3");
    check_field_offset(lv, s2303c3f0, ABISELECT(16,12), "S2303C3.s2303c3f0");
    check_field_offset(lv, s2303c3f1, ABISELECT(24,16), "S2303C3.s2303c3f1");
    test_class_info(&lv, &cd_S2303C3);
    dp->~S2303C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2303C3(Test_S2303C3, "S2303C3", ABISELECT(32,20));

#else // __cplusplus

extern void _ZN7S2303C3C1Ev();
extern void _ZN7S2303C3D1Ev();
Name_Map name_map_S2303C3[] = {
  NSPAIR(_ZN7S2303C3C1Ev),
  NSPAIR(_ZN7S2303C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2303C4;
extern VTBL_ENTRY _ZTI7S2303C4[];
extern  VTBL_ENTRY _ZTV7S2303C4[];
static Base_Class bases_S2303C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2303C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI7S2303C3[];
extern void _ZN7S2303C3D1Ev();
extern void _ZN7S2303C3D0Ev();
extern void _ZN7S2303C42v5Ev();
extern void _ZN7S2303C32v6Ev();
static  VTBL_ENTRY vtc_S2303C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2303C3[0]),
  (VTBL_ENTRY)&_ZN7S2303C3D1Ev,
  (VTBL_ENTRY)&_ZN7S2303C3D0Ev,
  (VTBL_ENTRY)&_ZN7S2303C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2303C32v6Ev,
};
extern VTBL_ENTRY _ZTI7S2303C3[];
extern  VTBL_ENTRY _ZTV7S2303C3[];
Class_Descriptor cd_S2303C3 = {  "S2303C3", // class name
  bases_S2303C3, 1,
  &(vtc_S2303C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,20), // object size
  NSPAIRA(_ZTI7S2303C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2303C3),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  S2303C2  : S2303C3 {
  void *s2303c2f0[2];
  int s2303c2f1[3];
  char s2303c2f2[2];
  void *s2303c2f3;
  virtual  ~S2303C2(); // _ZN7S2303C2D1Ev
  virtual void  v7(); // _ZN7S2303C22v7Ev
  virtual void  v8(); // _ZN7S2303C22v8Ev
  virtual void  v9(); // _ZN7S2303C22v9Ev
  virtual void  v10(); // _ZN7S2303C23v10Ev
  S2303C2(); // tgen
};
//SIG(-1 S2303C2) C1{ BC2{ BC3{ vd v5 Fc Fi} vd v6 Fp Fc[2]} vd v1 v2 v3 v4 Fp[2] Fi[3] Fc[2] Fp}


 S2303C2 ::~S2303C2(){ note_dtor("S2303C2", this);}
void  S2303C2 ::v7(){vfunc_called(this, "_ZN7S2303C22v7Ev");}
void  S2303C2 ::v8(){vfunc_called(this, "_ZN7S2303C22v8Ev");}
void  S2303C2 ::v9(){vfunc_called(this, "_ZN7S2303C22v9Ev");}
void  S2303C2 ::v10(){vfunc_called(this, "_ZN7S2303C23v10Ev");}
S2303C2 ::S2303C2(){ note_ctor("S2303C2", this);} // tgen

static void Test_S2303C2()
{
  extern Class_Descriptor cd_S2303C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,13)];
    init_test(&cd_S2303C2, buf);
    S2303C2 *dp, &lv = *(dp=new (buf) S2303C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,48), "sizeof(S2303C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2303C2)");
    check_base_class_offset(lv, (S2303C4*)(S2303C3*), 0, "S2303C2");
    check_base_class_offset(lv, (S2303C3*), 0, "S2303C2");
    check_field_offset(lv, s2303c2f0, ABISELECT(32,20), "S2303C2.s2303c2f0");
    check_field_offset(lv, s2303c2f1, ABISELECT(48,28), "S2303C2.s2303c2f1");
    check_field_offset(lv, s2303c2f2, ABISELECT(60,40), "S2303C2.s2303c2f2");
    check_field_offset(lv, s2303c2f3, ABISELECT(64,44), "S2303C2.s2303c2f3");
    test_class_info(&lv, &cd_S2303C2);
    dp->~S2303C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2303C2(Test_S2303C2, "S2303C2", ABISELECT(72,48));

#else // __cplusplus

extern void _ZN7S2303C2C1Ev();
extern void _ZN7S2303C2D1Ev();
Name_Map name_map_S2303C2[] = {
  NSPAIR(_ZN7S2303C2C1Ev),
  NSPAIR(_ZN7S2303C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2303C4;
extern VTBL_ENTRY _ZTI7S2303C4[];
extern  VTBL_ENTRY _ZTV7S2303C4[];
extern Class_Descriptor cd_S2303C3;
extern VTBL_ENTRY _ZTI7S2303C3[];
extern  VTBL_ENTRY _ZTV7S2303C3[];
static Base_Class bases_S2303C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2303C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S2303C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S2303C2[];
extern void _ZN7S2303C2D1Ev();
extern void _ZN7S2303C2D0Ev();
extern void _ZN7S2303C42v5Ev();
extern void _ZN7S2303C32v6Ev();
extern void _ZN7S2303C22v7Ev();
extern void _ZN7S2303C22v8Ev();
extern void _ZN7S2303C22v9Ev();
extern void _ZN7S2303C23v10Ev();
static  VTBL_ENTRY vtc_S2303C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2303C2[0]),
  (VTBL_ENTRY)&_ZN7S2303C2D1Ev,
  (VTBL_ENTRY)&_ZN7S2303C2D0Ev,
  (VTBL_ENTRY)&_ZN7S2303C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2303C32v6Ev,
  (VTBL_ENTRY)&_ZN7S2303C22v7Ev,
  (VTBL_ENTRY)&_ZN7S2303C22v8Ev,
  (VTBL_ENTRY)&_ZN7S2303C22v9Ev,
  (VTBL_ENTRY)&_ZN7S2303C23v10Ev,
};
extern VTBL_ENTRY _ZTI7S2303C2[];
extern  VTBL_ENTRY _ZTV7S2303C2[];
Class_Descriptor cd_S2303C2 = {  "S2303C2", // class name
  bases_S2303C2, 2,
  &(vtc_S2303C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,48), // object size
  NSPAIRA(_ZTI7S2303C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2303C2),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  S2303C1  : S2303C2 {
  int s2303c1f0[3];
  void *s2303c1f1;
  int s2303c1f2;
  void *s2303c1f3;
  virtual  ~S2303C1(); // _ZN7S2303C1D1Ev
  virtual void  v1(); // _ZN7S2303C12v1Ev
  virtual void  v2(); // _ZN7S2303C12v2Ev
  virtual void  v3(); // _ZN7S2303C12v3Ev
  virtual void  v4(); // _ZN7S2303C12v4Ev
  S2303C1(); // tgen
};
//SIG(1 S2303C1) C1{ BC2{ BC3{ BC4{ vd v5 Fc Fi} vd v6 Fp Fc[2]} vd v7 v8 v9 v10 Fp[2] Fi[3] Fc[2] Fp} vd v1 v2 v3 v4 Fi[3] Fp Fi Fp}


 S2303C1 ::~S2303C1(){ note_dtor("S2303C1", this);}
void  S2303C1 ::v1(){vfunc_called(this, "_ZN7S2303C12v1Ev");}
void  S2303C1 ::v2(){vfunc_called(this, "_ZN7S2303C12v2Ev");}
void  S2303C1 ::v3(){vfunc_called(this, "_ZN7S2303C12v3Ev");}
void  S2303C1 ::v4(){vfunc_called(this, "_ZN7S2303C12v4Ev");}
S2303C1 ::S2303C1(){ note_ctor("S2303C1", this);} // tgen

static void Test_S2303C1()
{
  extern Class_Descriptor cd_S2303C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(15,19)];
    init_test(&cd_S2303C1, buf);
    S2303C1 *dp, &lv = *(dp=new (buf) S2303C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(112,72), "sizeof(S2303C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2303C1)");
    check_base_class_offset(lv, (S2303C4*)(S2303C3*)(S2303C2*), 0, "S2303C1");
    check_base_class_offset(lv, (S2303C3*)(S2303C2*), 0, "S2303C1");
    check_base_class_offset(lv, (S2303C2*), 0, "S2303C1");
    check_field_offset(lv, s2303c1f0, ABISELECT(72,48), "S2303C1.s2303c1f0");
    check_field_offset(lv, s2303c1f1, ABISELECT(88,60), "S2303C1.s2303c1f1");
    check_field_offset(lv, s2303c1f2, ABISELECT(96,64), "S2303C1.s2303c1f2");
    check_field_offset(lv, s2303c1f3, ABISELECT(104,68), "S2303C1.s2303c1f3");
    test_class_info(&lv, &cd_S2303C1);
    dp->~S2303C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2303C1(Test_S2303C1, "S2303C1", ABISELECT(112,72));

#else // __cplusplus

extern void _ZN7S2303C1C1Ev();
extern void _ZN7S2303C1D1Ev();
Name_Map name_map_S2303C1[] = {
  NSPAIR(_ZN7S2303C1C1Ev),
  NSPAIR(_ZN7S2303C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2303C4;
extern VTBL_ENTRY _ZTI7S2303C4[];
extern  VTBL_ENTRY _ZTV7S2303C4[];
extern Class_Descriptor cd_S2303C3;
extern VTBL_ENTRY _ZTI7S2303C3[];
extern  VTBL_ENTRY _ZTV7S2303C3[];
extern Class_Descriptor cd_S2303C2;
extern VTBL_ENTRY _ZTI7S2303C2[];
extern  VTBL_ENTRY _ZTV7S2303C2[];
static Base_Class bases_S2303C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2303C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S2303C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S2303C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S2303C1[];
extern void _ZN7S2303C1D1Ev();
extern void _ZN7S2303C1D0Ev();
extern void _ZN7S2303C42v5Ev();
extern void _ZN7S2303C32v6Ev();
extern void _ZN7S2303C22v7Ev();
extern void _ZN7S2303C22v8Ev();
extern void _ZN7S2303C22v9Ev();
extern void _ZN7S2303C23v10Ev();
extern void _ZN7S2303C12v1Ev();
extern void _ZN7S2303C12v2Ev();
extern void _ZN7S2303C12v3Ev();
extern void _ZN7S2303C12v4Ev();
static  VTBL_ENTRY vtc_S2303C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2303C1[0]),
  (VTBL_ENTRY)&_ZN7S2303C1D1Ev,
  (VTBL_ENTRY)&_ZN7S2303C1D0Ev,
  (VTBL_ENTRY)&_ZN7S2303C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2303C32v6Ev,
  (VTBL_ENTRY)&_ZN7S2303C22v7Ev,
  (VTBL_ENTRY)&_ZN7S2303C22v8Ev,
  (VTBL_ENTRY)&_ZN7S2303C22v9Ev,
  (VTBL_ENTRY)&_ZN7S2303C23v10Ev,
  (VTBL_ENTRY)&_ZN7S2303C12v1Ev,
  (VTBL_ENTRY)&_ZN7S2303C12v2Ev,
  (VTBL_ENTRY)&_ZN7S2303C12v3Ev,
  (VTBL_ENTRY)&_ZN7S2303C12v4Ev,
};
extern VTBL_ENTRY _ZTI7S2303C1[];
extern  VTBL_ENTRY _ZTV7S2303C1[];
Class_Descriptor cd_S2303C1 = {  "S2303C1", // class name
  bases_S2303C1, 3,
  &(vtc_S2303C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(112,72), // object size
  NSPAIRA(_ZTI7S2303C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2303C1),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  S2311C4  {
  char s2311c4f0;
  int s2311c4f1;
  virtual  ~S2311C4(); // _ZN7S2311C4D1Ev
  virtual void  v5(); // _ZN7S2311C42v5Ev
  S2311C4(); // tgen
};
//SIG(-1 S2311C4) C1{ vd v1 Fc Fi}


 S2311C4 ::~S2311C4(){ note_dtor("S2311C4", this);}
void  S2311C4 ::v5(){vfunc_called(this, "_ZN7S2311C42v5Ev");}
S2311C4 ::S2311C4(){ note_ctor("S2311C4", this);} // tgen

static void Test_S2311C4()
{
  extern Class_Descriptor cd_S2311C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S2311C4, buf);
    S2311C4 *dp, &lv = *(dp=new (buf) S2311C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S2311C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2311C4)");
    check_field_offset(lv, s2311c4f0, ABISELECT(8,4), "S2311C4.s2311c4f0");
    check_field_offset(lv, s2311c4f1, ABISELECT(12,8), "S2311C4.s2311c4f1");
    test_class_info(&lv, &cd_S2311C4);
    dp->~S2311C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2311C4(Test_S2311C4, "S2311C4", ABISELECT(16,12));

#else // __cplusplus

extern void _ZN7S2311C4C1Ev();
extern void _ZN7S2311C4D1Ev();
Name_Map name_map_S2311C4[] = {
  NSPAIR(_ZN7S2311C4C1Ev),
  NSPAIR(_ZN7S2311C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S2311C4[];
extern void _ZN7S2311C4D1Ev();
extern void _ZN7S2311C4D0Ev();
extern void _ZN7S2311C42v5Ev();
static  VTBL_ENTRY vtc_S2311C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2311C4[0]),
  (VTBL_ENTRY)&_ZN7S2311C4D1Ev,
  (VTBL_ENTRY)&_ZN7S2311C4D0Ev,
  (VTBL_ENTRY)&_ZN7S2311C42v5Ev,
};
extern VTBL_ENTRY _ZTI7S2311C4[];
extern  VTBL_ENTRY _ZTV7S2311C4[];
Class_Descriptor cd_S2311C4 = {  "S2311C4", // class name
  0,0,//no base classes
  &(vtc_S2311C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI7S2311C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S2311C4),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  S2311C3  : S2311C4 {
  void *s2311c3f0;
  char s2311c3f1[2];
  virtual  ~S2311C3(); // _ZN7S2311C3D1Ev
  virtual void  v6(); // _ZN7S2311C32v6Ev
  S2311C3(); // tgen
};
//SIG(-1 S2311C3) C1{ BC2{ vd v2 Fc Fi} vd v1 Fp Fc[2]}


 S2311C3 ::~S2311C3(){ note_dtor("S2311C3", this);}
void  S2311C3 ::v6(){vfunc_called(this, "_ZN7S2311C32v6Ev");}
S2311C3 ::S2311C3(){ note_ctor("S2311C3", this);} // tgen

static void Test_S2311C3()
{
  extern Class_Descriptor cd_S2311C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,6)];
    init_test(&cd_S2311C3, buf);
    S2311C3 *dp, &lv = *(dp=new (buf) S2311C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S2311C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2311C3)");
    check_base_class_offset(lv, (S2311C4*), 0, "S2311C3");
    check_field_offset(lv, s2311c3f0, ABISELECT(16,12), "S2311C3.s2311c3f0");
    check_field_offset(lv, s2311c3f1, ABISELECT(24,16), "S2311C3.s2311c3f1");
    test_class_info(&lv, &cd_S2311C3);
    dp->~S2311C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2311C3(Test_S2311C3, "S2311C3", ABISELECT(32,20));

#else // __cplusplus

extern void _ZN7S2311C3C1Ev();
extern void _ZN7S2311C3D1Ev();
Name_Map name_map_S2311C3[] = {
  NSPAIR(_ZN7S2311C3C1Ev),
  NSPAIR(_ZN7S2311C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2311C4;
extern VTBL_ENTRY _ZTI7S2311C4[];
extern  VTBL_ENTRY _ZTV7S2311C4[];
static Base_Class bases_S2311C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2311C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI7S2311C3[];
extern void _ZN7S2311C3D1Ev();
extern void _ZN7S2311C3D0Ev();
extern void _ZN7S2311C42v5Ev();
extern void _ZN7S2311C32v6Ev();
static  VTBL_ENTRY vtc_S2311C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2311C3[0]),
  (VTBL_ENTRY)&_ZN7S2311C3D1Ev,
  (VTBL_ENTRY)&_ZN7S2311C3D0Ev,
  (VTBL_ENTRY)&_ZN7S2311C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2311C32v6Ev,
};
extern VTBL_ENTRY _ZTI7S2311C3[];
extern  VTBL_ENTRY _ZTV7S2311C3[];
Class_Descriptor cd_S2311C3 = {  "S2311C3", // class name
  bases_S2311C3, 1,
  &(vtc_S2311C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,20), // object size
  NSPAIRA(_ZTI7S2311C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2311C3),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  S2311C2  : S2311C3 {
  void *s2311c2f0[2];
  int s2311c2f1[3];
  char s2311c2f2[2];
  void *s2311c2f3;
  virtual  ~S2311C2(); // _ZN7S2311C2D1Ev
  virtual void  v7(); // _ZN7S2311C22v7Ev
  virtual void  v8(); // _ZN7S2311C22v8Ev
  virtual void  v9(); // _ZN7S2311C22v9Ev
  virtual void  v10(); // _ZN7S2311C23v10Ev
  S2311C2(); // tgen
};
//SIG(-1 S2311C2) C1{ BC2{ BC3{ vd v5 Fc Fi} vd v6 Fp Fc[2]} vd v1 v2 v3 v4 Fp[2] Fi[3] Fc[2] Fp}


 S2311C2 ::~S2311C2(){ note_dtor("S2311C2", this);}
void  S2311C2 ::v7(){vfunc_called(this, "_ZN7S2311C22v7Ev");}
void  S2311C2 ::v8(){vfunc_called(this, "_ZN7S2311C22v8Ev");}
void  S2311C2 ::v9(){vfunc_called(this, "_ZN7S2311C22v9Ev");}
void  S2311C2 ::v10(){vfunc_called(this, "_ZN7S2311C23v10Ev");}
S2311C2 ::S2311C2(){ note_ctor("S2311C2", this);} // tgen

static void Test_S2311C2()
{
  extern Class_Descriptor cd_S2311C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,13)];
    init_test(&cd_S2311C2, buf);
    S2311C2 *dp, &lv = *(dp=new (buf) S2311C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,48), "sizeof(S2311C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2311C2)");
    check_base_class_offset(lv, (S2311C4*)(S2311C3*), 0, "S2311C2");
    check_base_class_offset(lv, (S2311C3*), 0, "S2311C2");
    check_field_offset(lv, s2311c2f0, ABISELECT(32,20), "S2311C2.s2311c2f0");
    check_field_offset(lv, s2311c2f1, ABISELECT(48,28), "S2311C2.s2311c2f1");
    check_field_offset(lv, s2311c2f2, ABISELECT(60,40), "S2311C2.s2311c2f2");
    check_field_offset(lv, s2311c2f3, ABISELECT(64,44), "S2311C2.s2311c2f3");
    test_class_info(&lv, &cd_S2311C2);
    dp->~S2311C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2311C2(Test_S2311C2, "S2311C2", ABISELECT(72,48));

#else // __cplusplus

extern void _ZN7S2311C2C1Ev();
extern void _ZN7S2311C2D1Ev();
Name_Map name_map_S2311C2[] = {
  NSPAIR(_ZN7S2311C2C1Ev),
  NSPAIR(_ZN7S2311C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2311C4;
extern VTBL_ENTRY _ZTI7S2311C4[];
extern  VTBL_ENTRY _ZTV7S2311C4[];
extern Class_Descriptor cd_S2311C3;
extern VTBL_ENTRY _ZTI7S2311C3[];
extern  VTBL_ENTRY _ZTV7S2311C3[];
static Base_Class bases_S2311C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2311C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S2311C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S2311C2[];
extern void _ZN7S2311C2D1Ev();
extern void _ZN7S2311C2D0Ev();
extern void _ZN7S2311C42v5Ev();
extern void _ZN7S2311C32v6Ev();
extern void _ZN7S2311C22v7Ev();
extern void _ZN7S2311C22v8Ev();
extern void _ZN7S2311C22v9Ev();
extern void _ZN7S2311C23v10Ev();
static  VTBL_ENTRY vtc_S2311C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2311C2[0]),
  (VTBL_ENTRY)&_ZN7S2311C2D1Ev,
  (VTBL_ENTRY)&_ZN7S2311C2D0Ev,
  (VTBL_ENTRY)&_ZN7S2311C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2311C32v6Ev,
  (VTBL_ENTRY)&_ZN7S2311C22v7Ev,
  (VTBL_ENTRY)&_ZN7S2311C22v8Ev,
  (VTBL_ENTRY)&_ZN7S2311C22v9Ev,
  (VTBL_ENTRY)&_ZN7S2311C23v10Ev,
};
extern VTBL_ENTRY _ZTI7S2311C2[];
extern  VTBL_ENTRY _ZTV7S2311C2[];
Class_Descriptor cd_S2311C2 = {  "S2311C2", // class name
  bases_S2311C2, 2,
  &(vtc_S2311C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,48), // object size
  NSPAIRA(_ZTI7S2311C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2311C2),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  S2311C1  : S2311C2 {
  int s2311c1f0[5];
  void *s2311c1f1[2];
  virtual  ~S2311C1(); // _ZN7S2311C1D1Ev
  virtual void  v1(); // _ZN7S2311C12v1Ev
  virtual void  v2(); // _ZN7S2311C12v2Ev
  virtual void  v3(); // _ZN7S2311C12v3Ev
  virtual void  v4(); // _ZN7S2311C12v4Ev
  S2311C1(); // tgen
};
//SIG(1 S2311C1) C1{ BC2{ BC3{ BC4{ vd v5 Fc Fi} vd v6 Fp Fc[2]} vd v7 v8 v9 v10 Fp[2] Fi[3] Fc[2] Fp} vd v1 v2 v3 v4 Fi[5] Fp[2]}


 S2311C1 ::~S2311C1(){ note_dtor("S2311C1", this);}
void  S2311C1 ::v1(){vfunc_called(this, "_ZN7S2311C12v1Ev");}
void  S2311C1 ::v2(){vfunc_called(this, "_ZN7S2311C12v2Ev");}
void  S2311C1 ::v3(){vfunc_called(this, "_ZN7S2311C12v3Ev");}
void  S2311C1 ::v4(){vfunc_called(this, "_ZN7S2311C12v4Ev");}
S2311C1 ::S2311C1(){ note_ctor("S2311C1", this);} // tgen

static void Test_S2311C1()
{
  extern Class_Descriptor cd_S2311C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(15,20)];
    init_test(&cd_S2311C1, buf);
    S2311C1 *dp, &lv = *(dp=new (buf) S2311C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(112,76), "sizeof(S2311C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2311C1)");
    check_base_class_offset(lv, (S2311C4*)(S2311C3*)(S2311C2*), 0, "S2311C1");
    check_base_class_offset(lv, (S2311C3*)(S2311C2*), 0, "S2311C1");
    check_base_class_offset(lv, (S2311C2*), 0, "S2311C1");
    check_field_offset(lv, s2311c1f0, ABISELECT(72,48), "S2311C1.s2311c1f0");
    check_field_offset(lv, s2311c1f1, ABISELECT(96,68), "S2311C1.s2311c1f1");
    test_class_info(&lv, &cd_S2311C1);
    dp->~S2311C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2311C1(Test_S2311C1, "S2311C1", ABISELECT(112,76));

#else // __cplusplus

extern void _ZN7S2311C1C1Ev();
extern void _ZN7S2311C1D1Ev();
Name_Map name_map_S2311C1[] = {
  NSPAIR(_ZN7S2311C1C1Ev),
  NSPAIR(_ZN7S2311C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2311C4;
extern VTBL_ENTRY _ZTI7S2311C4[];
extern  VTBL_ENTRY _ZTV7S2311C4[];
extern Class_Descriptor cd_S2311C3;
extern VTBL_ENTRY _ZTI7S2311C3[];
extern  VTBL_ENTRY _ZTV7S2311C3[];
extern Class_Descriptor cd_S2311C2;
extern VTBL_ENTRY _ZTI7S2311C2[];
extern  VTBL_ENTRY _ZTV7S2311C2[];
static Base_Class bases_S2311C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2311C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S2311C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S2311C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S2311C1[];
extern void _ZN7S2311C1D1Ev();
extern void _ZN7S2311C1D0Ev();
extern void _ZN7S2311C42v5Ev();
extern void _ZN7S2311C32v6Ev();
extern void _ZN7S2311C22v7Ev();
extern void _ZN7S2311C22v8Ev();
extern void _ZN7S2311C22v9Ev();
extern void _ZN7S2311C23v10Ev();
extern void _ZN7S2311C12v1Ev();
extern void _ZN7S2311C12v2Ev();
extern void _ZN7S2311C12v3Ev();
extern void _ZN7S2311C12v4Ev();
static  VTBL_ENTRY vtc_S2311C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2311C1[0]),
  (VTBL_ENTRY)&_ZN7S2311C1D1Ev,
  (VTBL_ENTRY)&_ZN7S2311C1D0Ev,
  (VTBL_ENTRY)&_ZN7S2311C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2311C32v6Ev,
  (VTBL_ENTRY)&_ZN7S2311C22v7Ev,
  (VTBL_ENTRY)&_ZN7S2311C22v8Ev,
  (VTBL_ENTRY)&_ZN7S2311C22v9Ev,
  (VTBL_ENTRY)&_ZN7S2311C23v10Ev,
  (VTBL_ENTRY)&_ZN7S2311C12v1Ev,
  (VTBL_ENTRY)&_ZN7S2311C12v2Ev,
  (VTBL_ENTRY)&_ZN7S2311C12v3Ev,
  (VTBL_ENTRY)&_ZN7S2311C12v4Ev,
};
extern VTBL_ENTRY _ZTI7S2311C1[];
extern  VTBL_ENTRY _ZTV7S2311C1[];
Class_Descriptor cd_S2311C1 = {  "S2311C1", // class name
  bases_S2311C1, 3,
  &(vtc_S2311C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(112,76), // object size
  NSPAIRA(_ZTI7S2311C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2311C1),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  S2305C4  {
  char s2305c4f0;
  int s2305c4f1;
  virtual  ~S2305C4(); // _ZN7S2305C4D1Ev
  virtual void  v5(); // _ZN7S2305C42v5Ev
  S2305C4(); // tgen
};
//SIG(-1 S2305C4) C1{ vd v1 Fc Fi}


 S2305C4 ::~S2305C4(){ note_dtor("S2305C4", this);}
void  S2305C4 ::v5(){vfunc_called(this, "_ZN7S2305C42v5Ev");}
S2305C4 ::S2305C4(){ note_ctor("S2305C4", this);} // tgen

static void Test_S2305C4()
{
  extern Class_Descriptor cd_S2305C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S2305C4, buf);
    S2305C4 *dp, &lv = *(dp=new (buf) S2305C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S2305C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2305C4)");
    check_field_offset(lv, s2305c4f0, ABISELECT(8,4), "S2305C4.s2305c4f0");
    check_field_offset(lv, s2305c4f1, ABISELECT(12,8), "S2305C4.s2305c4f1");
    test_class_info(&lv, &cd_S2305C4);
    dp->~S2305C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2305C4(Test_S2305C4, "S2305C4", ABISELECT(16,12));

#else // __cplusplus

extern void _ZN7S2305C4C1Ev();
extern void _ZN7S2305C4D1Ev();
Name_Map name_map_S2305C4[] = {
  NSPAIR(_ZN7S2305C4C1Ev),
  NSPAIR(_ZN7S2305C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S2305C4[];
extern void _ZN7S2305C4D1Ev();
extern void _ZN7S2305C4D0Ev();
extern void _ZN7S2305C42v5Ev();
static  VTBL_ENTRY vtc_S2305C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2305C4[0]),
  (VTBL_ENTRY)&_ZN7S2305C4D1Ev,
  (VTBL_ENTRY)&_ZN7S2305C4D0Ev,
  (VTBL_ENTRY)&_ZN7S2305C42v5Ev,
};
extern VTBL_ENTRY _ZTI7S2305C4[];
extern  VTBL_ENTRY _ZTV7S2305C4[];
Class_Descriptor cd_S2305C4 = {  "S2305C4", // class name
  0,0,//no base classes
  &(vtc_S2305C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI7S2305C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S2305C4),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  S2305C3  : S2305C4 {
  void *s2305c3f0;
  char s2305c3f1[2];
  virtual  ~S2305C3(); // _ZN7S2305C3D1Ev
  virtual void  v6(); // _ZN7S2305C32v6Ev
  S2305C3(); // tgen
};
//SIG(-1 S2305C3) C1{ BC2{ vd v2 Fc Fi} vd v1 Fp Fc[2]}


 S2305C3 ::~S2305C3(){ note_dtor("S2305C3", this);}
void  S2305C3 ::v6(){vfunc_called(this, "_ZN7S2305C32v6Ev");}
S2305C3 ::S2305C3(){ note_ctor("S2305C3", this);} // tgen

static void Test_S2305C3()
{
  extern Class_Descriptor cd_S2305C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,6)];
    init_test(&cd_S2305C3, buf);
    S2305C3 *dp, &lv = *(dp=new (buf) S2305C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S2305C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2305C3)");
    check_base_class_offset(lv, (S2305C4*), 0, "S2305C3");
    check_field_offset(lv, s2305c3f0, ABISELECT(16,12), "S2305C3.s2305c3f0");
    check_field_offset(lv, s2305c3f1, ABISELECT(24,16), "S2305C3.s2305c3f1");
    test_class_info(&lv, &cd_S2305C3);
    dp->~S2305C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2305C3(Test_S2305C3, "S2305C3", ABISELECT(32,20));

#else // __cplusplus

extern void _ZN7S2305C3C1Ev();
extern void _ZN7S2305C3D1Ev();
Name_Map name_map_S2305C3[] = {
  NSPAIR(_ZN7S2305C3C1Ev),
  NSPAIR(_ZN7S2305C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2305C4;
extern VTBL_ENTRY _ZTI7S2305C4[];
extern  VTBL_ENTRY _ZTV7S2305C4[];
static Base_Class bases_S2305C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2305C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI7S2305C3[];
extern void _ZN7S2305C3D1Ev();
extern void _ZN7S2305C3D0Ev();
extern void _ZN7S2305C42v5Ev();
extern void _ZN7S2305C32v6Ev();
static  VTBL_ENTRY vtc_S2305C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2305C3[0]),
  (VTBL_ENTRY)&_ZN7S2305C3D1Ev,
  (VTBL_ENTRY)&_ZN7S2305C3D0Ev,
  (VTBL_ENTRY)&_ZN7S2305C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2305C32v6Ev,
};
extern VTBL_ENTRY _ZTI7S2305C3[];
extern  VTBL_ENTRY _ZTV7S2305C3[];
Class_Descriptor cd_S2305C3 = {  "S2305C3", // class name
  bases_S2305C3, 1,
  &(vtc_S2305C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,20), // object size
  NSPAIRA(_ZTI7S2305C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2305C3),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  S2305C2  : S2305C3 {
  void *s2305c2f0[2];
  int s2305c2f1[3];
  char s2305c2f2[2];
  void *s2305c2f3;
  virtual  ~S2305C2(); // _ZN7S2305C2D1Ev
  virtual void  v7(); // _ZN7S2305C22v7Ev
  virtual void  v8(); // _ZN7S2305C22v8Ev
  virtual void  v9(); // _ZN7S2305C22v9Ev
  virtual void  v10(); // _ZN7S2305C23v10Ev
  S2305C2(); // tgen
};
//SIG(-1 S2305C2) C1{ BC2{ BC3{ vd v5 Fc Fi} vd v6 Fp Fc[2]} vd v1 v2 v3 v4 Fp[2] Fi[3] Fc[2] Fp}


 S2305C2 ::~S2305C2(){ note_dtor("S2305C2", this);}
void  S2305C2 ::v7(){vfunc_called(this, "_ZN7S2305C22v7Ev");}
void  S2305C2 ::v8(){vfunc_called(this, "_ZN7S2305C22v8Ev");}
void  S2305C2 ::v9(){vfunc_called(this, "_ZN7S2305C22v9Ev");}
void  S2305C2 ::v10(){vfunc_called(this, "_ZN7S2305C23v10Ev");}
S2305C2 ::S2305C2(){ note_ctor("S2305C2", this);} // tgen

static void Test_S2305C2()
{
  extern Class_Descriptor cd_S2305C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,13)];
    init_test(&cd_S2305C2, buf);
    S2305C2 *dp, &lv = *(dp=new (buf) S2305C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,48), "sizeof(S2305C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2305C2)");
    check_base_class_offset(lv, (S2305C4*)(S2305C3*), 0, "S2305C2");
    check_base_class_offset(lv, (S2305C3*), 0, "S2305C2");
    check_field_offset(lv, s2305c2f0, ABISELECT(32,20), "S2305C2.s2305c2f0");
    check_field_offset(lv, s2305c2f1, ABISELECT(48,28), "S2305C2.s2305c2f1");
    check_field_offset(lv, s2305c2f2, ABISELECT(60,40), "S2305C2.s2305c2f2");
    check_field_offset(lv, s2305c2f3, ABISELECT(64,44), "S2305C2.s2305c2f3");
    test_class_info(&lv, &cd_S2305C2);
    dp->~S2305C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2305C2(Test_S2305C2, "S2305C2", ABISELECT(72,48));

#else // __cplusplus

extern void _ZN7S2305C2C1Ev();
extern void _ZN7S2305C2D1Ev();
Name_Map name_map_S2305C2[] = {
  NSPAIR(_ZN7S2305C2C1Ev),
  NSPAIR(_ZN7S2305C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2305C4;
extern VTBL_ENTRY _ZTI7S2305C4[];
extern  VTBL_ENTRY _ZTV7S2305C4[];
extern Class_Descriptor cd_S2305C3;
extern VTBL_ENTRY _ZTI7S2305C3[];
extern  VTBL_ENTRY _ZTV7S2305C3[];
static Base_Class bases_S2305C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2305C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S2305C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S2305C2[];
extern void _ZN7S2305C2D1Ev();
extern void _ZN7S2305C2D0Ev();
extern void _ZN7S2305C42v5Ev();
extern void _ZN7S2305C32v6Ev();
extern void _ZN7S2305C22v7Ev();
extern void _ZN7S2305C22v8Ev();
extern void _ZN7S2305C22v9Ev();
extern void _ZN7S2305C23v10Ev();
static  VTBL_ENTRY vtc_S2305C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2305C2[0]),
  (VTBL_ENTRY)&_ZN7S2305C2D1Ev,
  (VTBL_ENTRY)&_ZN7S2305C2D0Ev,
  (VTBL_ENTRY)&_ZN7S2305C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2305C32v6Ev,
  (VTBL_ENTRY)&_ZN7S2305C22v7Ev,
  (VTBL_ENTRY)&_ZN7S2305C22v8Ev,
  (VTBL_ENTRY)&_ZN7S2305C22v9Ev,
  (VTBL_ENTRY)&_ZN7S2305C23v10Ev,
};
extern VTBL_ENTRY _ZTI7S2305C2[];
extern  VTBL_ENTRY _ZTV7S2305C2[];
Class_Descriptor cd_S2305C2 = {  "S2305C2", // class name
  bases_S2305C2, 2,
  &(vtc_S2305C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,48), // object size
  NSPAIRA(_ZTI7S2305C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2305C2),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  S2305C1  : S2305C2 {
  int s2305c1f0[3];
  void *s2305c1f1[2];
  virtual  ~S2305C1(); // _ZN7S2305C1D1Ev
  virtual void  v1(); // _ZN7S2305C12v1Ev
  virtual void  v2(); // _ZN7S2305C12v2Ev
  virtual void  v3(); // _ZN7S2305C12v3Ev
  virtual void  v4(); // _ZN7S2305C12v4Ev
  S2305C1(); // tgen
};
//SIG(1 S2305C1) C1{ BC2{ BC3{ BC4{ vd v5 Fc Fi} vd v6 Fp Fc[2]} vd v7 v8 v9 v10 Fp[2] Fi[3] Fc[2] Fp} vd v1 v2 v3 v4 Fi[3] Fp[2]}


 S2305C1 ::~S2305C1(){ note_dtor("S2305C1", this);}
void  S2305C1 ::v1(){vfunc_called(this, "_ZN7S2305C12v1Ev");}
void  S2305C1 ::v2(){vfunc_called(this, "_ZN7S2305C12v2Ev");}
void  S2305C1 ::v3(){vfunc_called(this, "_ZN7S2305C12v3Ev");}
void  S2305C1 ::v4(){vfunc_called(this, "_ZN7S2305C12v4Ev");}
S2305C1 ::S2305C1(){ note_ctor("S2305C1", this);} // tgen

static void Test_S2305C1()
{
  extern Class_Descriptor cd_S2305C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(14,18)];
    init_test(&cd_S2305C1, buf);
    S2305C1 *dp, &lv = *(dp=new (buf) S2305C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(104,68), "sizeof(S2305C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2305C1)");
    check_base_class_offset(lv, (S2305C4*)(S2305C3*)(S2305C2*), 0, "S2305C1");
    check_base_class_offset(lv, (S2305C3*)(S2305C2*), 0, "S2305C1");
    check_base_class_offset(lv, (S2305C2*), 0, "S2305C1");
    check_field_offset(lv, s2305c1f0, ABISELECT(72,48), "S2305C1.s2305c1f0");
    check_field_offset(lv, s2305c1f1, ABISELECT(88,60), "S2305C1.s2305c1f1");
    test_class_info(&lv, &cd_S2305C1);
    dp->~S2305C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2305C1(Test_S2305C1, "S2305C1", ABISELECT(104,68));

#else // __cplusplus

extern void _ZN7S2305C1C1Ev();
extern void _ZN7S2305C1D1Ev();
Name_Map name_map_S2305C1[] = {
  NSPAIR(_ZN7S2305C1C1Ev),
  NSPAIR(_ZN7S2305C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2305C4;
extern VTBL_ENTRY _ZTI7S2305C4[];
extern  VTBL_ENTRY _ZTV7S2305C4[];
extern Class_Descriptor cd_S2305C3;
extern VTBL_ENTRY _ZTI7S2305C3[];
extern  VTBL_ENTRY _ZTV7S2305C3[];
extern Class_Descriptor cd_S2305C2;
extern VTBL_ENTRY _ZTI7S2305C2[];
extern  VTBL_ENTRY _ZTV7S2305C2[];
static Base_Class bases_S2305C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2305C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S2305C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S2305C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S2305C1[];
extern void _ZN7S2305C1D1Ev();
extern void _ZN7S2305C1D0Ev();
extern void _ZN7S2305C42v5Ev();
extern void _ZN7S2305C32v6Ev();
extern void _ZN7S2305C22v7Ev();
extern void _ZN7S2305C22v8Ev();
extern void _ZN7S2305C22v9Ev();
extern void _ZN7S2305C23v10Ev();
extern void _ZN7S2305C12v1Ev();
extern void _ZN7S2305C12v2Ev();
extern void _ZN7S2305C12v3Ev();
extern void _ZN7S2305C12v4Ev();
static  VTBL_ENTRY vtc_S2305C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2305C1[0]),
  (VTBL_ENTRY)&_ZN7S2305C1D1Ev,
  (VTBL_ENTRY)&_ZN7S2305C1D0Ev,
  (VTBL_ENTRY)&_ZN7S2305C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2305C32v6Ev,
  (VTBL_ENTRY)&_ZN7S2305C22v7Ev,
  (VTBL_ENTRY)&_ZN7S2305C22v8Ev,
  (VTBL_ENTRY)&_ZN7S2305C22v9Ev,
  (VTBL_ENTRY)&_ZN7S2305C23v10Ev,
  (VTBL_ENTRY)&_ZN7S2305C12v1Ev,
  (VTBL_ENTRY)&_ZN7S2305C12v2Ev,
  (VTBL_ENTRY)&_ZN7S2305C12v3Ev,
  (VTBL_ENTRY)&_ZN7S2305C12v4Ev,
};
extern VTBL_ENTRY _ZTI7S2305C1[];
extern  VTBL_ENTRY _ZTV7S2305C1[];
Class_Descriptor cd_S2305C1 = {  "S2305C1", // class name
  bases_S2305C1, 3,
  &(vtc_S2305C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(104,68), // object size
  NSPAIRA(_ZTI7S2305C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2305C1),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  S2228C4  {
  char s2228c4f0;
  int s2228c4f1;
  virtual  ~S2228C4(); // _ZN7S2228C4D1Ev
  virtual void  v4(); // _ZN7S2228C42v4Ev
  S2228C4(); // tgen
};
//SIG(-1 S2228C4) C1{ vd v1 Fc Fi}


 S2228C4 ::~S2228C4(){ note_dtor("S2228C4", this);}
void  S2228C4 ::v4(){vfunc_called(this, "_ZN7S2228C42v4Ev");}
S2228C4 ::S2228C4(){ note_ctor("S2228C4", this);} // tgen

static void Test_S2228C4()
{
  extern Class_Descriptor cd_S2228C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S2228C4, buf);
    S2228C4 *dp, &lv = *(dp=new (buf) S2228C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S2228C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2228C4)");
    check_field_offset(lv, s2228c4f0, ABISELECT(8,4), "S2228C4.s2228c4f0");
    check_field_offset(lv, s2228c4f1, ABISELECT(12,8), "S2228C4.s2228c4f1");
    test_class_info(&lv, &cd_S2228C4);
    dp->~S2228C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2228C4(Test_S2228C4, "S2228C4", ABISELECT(16,12));

#else // __cplusplus

extern void _ZN7S2228C4C1Ev();
extern void _ZN7S2228C4D1Ev();
Name_Map name_map_S2228C4[] = {
  NSPAIR(_ZN7S2228C4C1Ev),
  NSPAIR(_ZN7S2228C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S2228C4[];
extern void _ZN7S2228C4D1Ev();
extern void _ZN7S2228C4D0Ev();
extern void _ZN7S2228C42v4Ev();
static  VTBL_ENTRY vtc_S2228C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2228C4[0]),
  (VTBL_ENTRY)&_ZN7S2228C4D1Ev,
  (VTBL_ENTRY)&_ZN7S2228C4D0Ev,
  (VTBL_ENTRY)&_ZN7S2228C42v4Ev,
};
extern VTBL_ENTRY _ZTI7S2228C4[];
extern  VTBL_ENTRY _ZTV7S2228C4[];
Class_Descriptor cd_S2228C4 = {  "S2228C4", // class name
  0,0,//no base classes
  &(vtc_S2228C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI7S2228C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S2228C4),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  S2228C3  : S2228C4 {
  void *s2228c3f0;
  char s2228c3f1[2];
  virtual  ~S2228C3(); // _ZN7S2228C3D1Ev
  virtual void  v5(); // _ZN7S2228C32v5Ev
  S2228C3(); // tgen
};
//SIG(-1 S2228C3) C1{ BC2{ vd v2 Fc Fi} vd v1 Fp Fc[2]}


 S2228C3 ::~S2228C3(){ note_dtor("S2228C3", this);}
void  S2228C3 ::v5(){vfunc_called(this, "_ZN7S2228C32v5Ev");}
S2228C3 ::S2228C3(){ note_ctor("S2228C3", this);} // tgen

static void Test_S2228C3()
{
  extern Class_Descriptor cd_S2228C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,6)];
    init_test(&cd_S2228C3, buf);
    S2228C3 *dp, &lv = *(dp=new (buf) S2228C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S2228C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2228C3)");
    check_base_class_offset(lv, (S2228C4*), 0, "S2228C3");
    check_field_offset(lv, s2228c3f0, ABISELECT(16,12), "S2228C3.s2228c3f0");
    check_field_offset(lv, s2228c3f1, ABISELECT(24,16), "S2228C3.s2228c3f1");
    test_class_info(&lv, &cd_S2228C3);
    dp->~S2228C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2228C3(Test_S2228C3, "S2228C3", ABISELECT(32,20));

#else // __cplusplus

extern void _ZN7S2228C3C1Ev();
extern void _ZN7S2228C3D1Ev();
Name_Map name_map_S2228C3[] = {
  NSPAIR(_ZN7S2228C3C1Ev),
  NSPAIR(_ZN7S2228C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2228C4;
extern VTBL_ENTRY _ZTI7S2228C4[];
extern  VTBL_ENTRY _ZTV7S2228C4[];
static Base_Class bases_S2228C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2228C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI7S2228C3[];
extern void _ZN7S2228C3D1Ev();
extern void _ZN7S2228C3D0Ev();
extern void _ZN7S2228C42v4Ev();
extern void _ZN7S2228C32v5Ev();
static  VTBL_ENTRY vtc_S2228C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2228C3[0]),
  (VTBL_ENTRY)&_ZN7S2228C3D1Ev,
  (VTBL_ENTRY)&_ZN7S2228C3D0Ev,
  (VTBL_ENTRY)&_ZN7S2228C42v4Ev,
  (VTBL_ENTRY)&_ZN7S2228C32v5Ev,
};
extern VTBL_ENTRY _ZTI7S2228C3[];
extern  VTBL_ENTRY _ZTV7S2228C3[];
Class_Descriptor cd_S2228C3 = {  "S2228C3", // class name
  bases_S2228C3, 1,
  &(vtc_S2228C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,20), // object size
  NSPAIRA(_ZTI7S2228C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2228C3),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  S2228C2  : S2228C3 {
  void *s2228c2f0[2];
  int s2228c2f1[3];
  char s2228c2f2[2];
  void *s2228c2f3;
  virtual  ~S2228C2(); // _ZN7S2228C2D1Ev
  virtual void  v6(); // _ZN7S2228C22v6Ev
  virtual void  v7(); // _ZN7S2228C22v7Ev
  virtual void  v8(); // _ZN7S2228C22v8Ev
  virtual void  v9(); // _ZN7S2228C22v9Ev
  S2228C2(); // tgen
};
//SIG(-1 S2228C2) C1{ BC2{ BC3{ vd v5 Fc Fi} vd v6 Fp Fc[2]} vd v1 v2 v3 v4 Fp[2] Fi[3] Fc[2] Fp}


 S2228C2 ::~S2228C2(){ note_dtor("S2228C2", this);}
void  S2228C2 ::v6(){vfunc_called(this, "_ZN7S2228C22v6Ev");}
void  S2228C2 ::v7(){vfunc_called(this, "_ZN7S2228C22v7Ev");}
void  S2228C2 ::v8(){vfunc_called(this, "_ZN7S2228C22v8Ev");}
void  S2228C2 ::v9(){vfunc_called(this, "_ZN7S2228C22v9Ev");}
S2228C2 ::S2228C2(){ note_ctor("S2228C2", this);} // tgen

static void Test_S2228C2()
{
  extern Class_Descriptor cd_S2228C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,13)];
    init_test(&cd_S2228C2, buf);
    S2228C2 *dp, &lv = *(dp=new (buf) S2228C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,48), "sizeof(S2228C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2228C2)");
    check_base_class_offset(lv, (S2228C4*)(S2228C3*), 0, "S2228C2");
    check_base_class_offset(lv, (S2228C3*), 0, "S2228C2");
    check_field_offset(lv, s2228c2f0, ABISELECT(32,20), "S2228C2.s2228c2f0");
    check_field_offset(lv, s2228c2f1, ABISELECT(48,28), "S2228C2.s2228c2f1");
    check_field_offset(lv, s2228c2f2, ABISELECT(60,40), "S2228C2.s2228c2f2");
    check_field_offset(lv, s2228c2f3, ABISELECT(64,44), "S2228C2.s2228c2f3");
    test_class_info(&lv, &cd_S2228C2);
    dp->~S2228C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2228C2(Test_S2228C2, "S2228C2", ABISELECT(72,48));

#else // __cplusplus

extern void _ZN7S2228C2C1Ev();
extern void _ZN7S2228C2D1Ev();
Name_Map name_map_S2228C2[] = {
  NSPAIR(_ZN7S2228C2C1Ev),
  NSPAIR(_ZN7S2228C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2228C4;
extern VTBL_ENTRY _ZTI7S2228C4[];
extern  VTBL_ENTRY _ZTV7S2228C4[];
extern Class_Descriptor cd_S2228C3;
extern VTBL_ENTRY _ZTI7S2228C3[];
extern  VTBL_ENTRY _ZTV7S2228C3[];
static Base_Class bases_S2228C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2228C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S2228C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S2228C2[];
extern void _ZN7S2228C2D1Ev();
extern void _ZN7S2228C2D0Ev();
extern void _ZN7S2228C42v4Ev();
extern void _ZN7S2228C32v5Ev();
extern void _ZN7S2228C22v6Ev();
extern void _ZN7S2228C22v7Ev();
extern void _ZN7S2228C22v8Ev();
extern void _ZN7S2228C22v9Ev();
static  VTBL_ENTRY vtc_S2228C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2228C2[0]),
  (VTBL_ENTRY)&_ZN7S2228C2D1Ev,
  (VTBL_ENTRY)&_ZN7S2228C2D0Ev,
  (VTBL_ENTRY)&_ZN7S2228C42v4Ev,
  (VTBL_ENTRY)&_ZN7S2228C32v5Ev,
  (VTBL_ENTRY)&_ZN7S2228C22v6Ev,
  (VTBL_ENTRY)&_ZN7S2228C22v7Ev,
  (VTBL_ENTRY)&_ZN7S2228C22v8Ev,
  (VTBL_ENTRY)&_ZN7S2228C22v9Ev,
};
extern VTBL_ENTRY _ZTI7S2228C2[];
extern  VTBL_ENTRY _ZTV7S2228C2[];
Class_Descriptor cd_S2228C2 = {  "S2228C2", // class name
  bases_S2228C2, 2,
  &(vtc_S2228C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,48), // object size
  NSPAIRA(_ZTI7S2228C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2228C2),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  S2228C1  : S2228C2 {
  int s2228c1f0[4];
  void *s2228c1f1;
  int s2228c1f2[2];
  virtual  ~S2228C1(); // _ZN7S2228C1D1Ev
  virtual void  v1(); // _ZN7S2228C12v1Ev
  virtual void  v2(); // _ZN7S2228C12v2Ev
  virtual void  v3(); // _ZN7S2228C12v3Ev
  S2228C1(); // tgen
};
//SIG(1 S2228C1) C1{ BC2{ BC3{ BC4{ vd v4 Fc Fi} vd v5 Fp Fc[2]} vd v6 v7 v8 v9 Fp[2] Fi[3] Fc[2] Fp} vd v1 v2 v3 Fi[4] Fp Fi[2]}


 S2228C1 ::~S2228C1(){ note_dtor("S2228C1", this);}
void  S2228C1 ::v1(){vfunc_called(this, "_ZN7S2228C12v1Ev");}
void  S2228C1 ::v2(){vfunc_called(this, "_ZN7S2228C12v2Ev");}
void  S2228C1 ::v3(){vfunc_called(this, "_ZN7S2228C12v3Ev");}
S2228C1 ::S2228C1(){ note_ctor("S2228C1", this);} // tgen

static void Test_S2228C1()
{
  extern Class_Descriptor cd_S2228C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(14,20)];
    init_test(&cd_S2228C1, buf);
    S2228C1 *dp, &lv = *(dp=new (buf) S2228C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(104,76), "sizeof(S2228C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2228C1)");
    check_base_class_offset(lv, (S2228C4*)(S2228C3*)(S2228C2*), 0, "S2228C1");
    check_base_class_offset(lv, (S2228C3*)(S2228C2*), 0, "S2228C1");
    check_base_class_offset(lv, (S2228C2*), 0, "S2228C1");
    check_field_offset(lv, s2228c1f0, ABISELECT(72,48), "S2228C1.s2228c1f0");
    check_field_offset(lv, s2228c1f1, ABISELECT(88,64), "S2228C1.s2228c1f1");
    check_field_offset(lv, s2228c1f2, ABISELECT(96,68), "S2228C1.s2228c1f2");
    test_class_info(&lv, &cd_S2228C1);
    dp->~S2228C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2228C1(Test_S2228C1, "S2228C1", ABISELECT(104,76));

#else // __cplusplus

extern void _ZN7S2228C1C1Ev();
extern void _ZN7S2228C1D1Ev();
Name_Map name_map_S2228C1[] = {
  NSPAIR(_ZN7S2228C1C1Ev),
  NSPAIR(_ZN7S2228C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2228C4;
extern VTBL_ENTRY _ZTI7S2228C4[];
extern  VTBL_ENTRY _ZTV7S2228C4[];
extern Class_Descriptor cd_S2228C3;
extern VTBL_ENTRY _ZTI7S2228C3[];
extern  VTBL_ENTRY _ZTV7S2228C3[];
extern Class_Descriptor cd_S2228C2;
extern VTBL_ENTRY _ZTI7S2228C2[];
extern  VTBL_ENTRY _ZTV7S2228C2[];
static Base_Class bases_S2228C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2228C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S2228C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S2228C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S2228C1[];
extern void _ZN7S2228C1D1Ev();
extern void _ZN7S2228C1D0Ev();
extern void _ZN7S2228C42v4Ev();
extern void _ZN7S2228C32v5Ev();
extern void _ZN7S2228C22v6Ev();
extern void _ZN7S2228C22v7Ev();
extern void _ZN7S2228C22v8Ev();
extern void _ZN7S2228C22v9Ev();
extern void _ZN7S2228C12v1Ev();
extern void _ZN7S2228C12v2Ev();
extern void _ZN7S2228C12v3Ev();
static  VTBL_ENTRY vtc_S2228C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2228C1[0]),
  (VTBL_ENTRY)&_ZN7S2228C1D1Ev,
  (VTBL_ENTRY)&_ZN7S2228C1D0Ev,
  (VTBL_ENTRY)&_ZN7S2228C42v4Ev,
  (VTBL_ENTRY)&_ZN7S2228C32v5Ev,
  (VTBL_ENTRY)&_ZN7S2228C22v6Ev,
  (VTBL_ENTRY)&_ZN7S2228C22v7Ev,
  (VTBL_ENTRY)&_ZN7S2228C22v8Ev,
  (VTBL_ENTRY)&_ZN7S2228C22v9Ev,
  (VTBL_ENTRY)&_ZN7S2228C12v1Ev,
  (VTBL_ENTRY)&_ZN7S2228C12v2Ev,
  (VTBL_ENTRY)&_ZN7S2228C12v3Ev,
};
extern VTBL_ENTRY _ZTI7S2228C1[];
extern  VTBL_ENTRY _ZTV7S2228C1[];
Class_Descriptor cd_S2228C1 = {  "S2228C1", // class name
  bases_S2228C1, 3,
  &(vtc_S2228C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(104,76), // object size
  NSPAIRA(_ZTI7S2228C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2228C1),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  S2313C4  {
  char s2313c4f0;
  int s2313c4f1;
  virtual  ~S2313C4(); // _ZN7S2313C4D1Ev
  virtual void  v5(); // _ZN7S2313C42v5Ev
  S2313C4(); // tgen
};
//SIG(-1 S2313C4) C1{ vd v1 Fc Fi}


 S2313C4 ::~S2313C4(){ note_dtor("S2313C4", this);}
void  S2313C4 ::v5(){vfunc_called(this, "_ZN7S2313C42v5Ev");}
S2313C4 ::S2313C4(){ note_ctor("S2313C4", this);} // tgen

static void Test_S2313C4()
{
  extern Class_Descriptor cd_S2313C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S2313C4, buf);
    S2313C4 *dp, &lv = *(dp=new (buf) S2313C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S2313C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2313C4)");
    check_field_offset(lv, s2313c4f0, ABISELECT(8,4), "S2313C4.s2313c4f0");
    check_field_offset(lv, s2313c4f1, ABISELECT(12,8), "S2313C4.s2313c4f1");
    test_class_info(&lv, &cd_S2313C4);
    dp->~S2313C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2313C4(Test_S2313C4, "S2313C4", ABISELECT(16,12));

#else // __cplusplus

extern void _ZN7S2313C4C1Ev();
extern void _ZN7S2313C4D1Ev();
Name_Map name_map_S2313C4[] = {
  NSPAIR(_ZN7S2313C4C1Ev),
  NSPAIR(_ZN7S2313C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S2313C4[];
extern void _ZN7S2313C4D1Ev();
extern void _ZN7S2313C4D0Ev();
extern void _ZN7S2313C42v5Ev();
static  VTBL_ENTRY vtc_S2313C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2313C4[0]),
  (VTBL_ENTRY)&_ZN7S2313C4D1Ev,
  (VTBL_ENTRY)&_ZN7S2313C4D0Ev,
  (VTBL_ENTRY)&_ZN7S2313C42v5Ev,
};
extern VTBL_ENTRY _ZTI7S2313C4[];
extern  VTBL_ENTRY _ZTV7S2313C4[];
Class_Descriptor cd_S2313C4 = {  "S2313C4", // class name
  0,0,//no base classes
  &(vtc_S2313C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI7S2313C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S2313C4),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  S2313C3  : S2313C4 {
  void *s2313c3f0;
  char s2313c3f1[2];
  virtual  ~S2313C3(); // _ZN7S2313C3D1Ev
  virtual void  v6(); // _ZN7S2313C32v6Ev
  S2313C3(); // tgen
};
//SIG(-1 S2313C3) C1{ BC2{ vd v2 Fc Fi} vd v1 Fp Fc[2]}


 S2313C3 ::~S2313C3(){ note_dtor("S2313C3", this);}
void  S2313C3 ::v6(){vfunc_called(this, "_ZN7S2313C32v6Ev");}
S2313C3 ::S2313C3(){ note_ctor("S2313C3", this);} // tgen

static void Test_S2313C3()
{
  extern Class_Descriptor cd_S2313C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,6)];
    init_test(&cd_S2313C3, buf);
    S2313C3 *dp, &lv = *(dp=new (buf) S2313C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S2313C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2313C3)");
    check_base_class_offset(lv, (S2313C4*), 0, "S2313C3");
    check_field_offset(lv, s2313c3f0, ABISELECT(16,12), "S2313C3.s2313c3f0");
    check_field_offset(lv, s2313c3f1, ABISELECT(24,16), "S2313C3.s2313c3f1");
    test_class_info(&lv, &cd_S2313C3);
    dp->~S2313C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2313C3(Test_S2313C3, "S2313C3", ABISELECT(32,20));

#else // __cplusplus

extern void _ZN7S2313C3C1Ev();
extern void _ZN7S2313C3D1Ev();
Name_Map name_map_S2313C3[] = {
  NSPAIR(_ZN7S2313C3C1Ev),
  NSPAIR(_ZN7S2313C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2313C4;
extern VTBL_ENTRY _ZTI7S2313C4[];
extern  VTBL_ENTRY _ZTV7S2313C4[];
static Base_Class bases_S2313C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2313C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI7S2313C3[];
extern void _ZN7S2313C3D1Ev();
extern void _ZN7S2313C3D0Ev();
extern void _ZN7S2313C42v5Ev();
extern void _ZN7S2313C32v6Ev();
static  VTBL_ENTRY vtc_S2313C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2313C3[0]),
  (VTBL_ENTRY)&_ZN7S2313C3D1Ev,
  (VTBL_ENTRY)&_ZN7S2313C3D0Ev,
  (VTBL_ENTRY)&_ZN7S2313C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2313C32v6Ev,
};
extern VTBL_ENTRY _ZTI7S2313C3[];
extern  VTBL_ENTRY _ZTV7S2313C3[];
Class_Descriptor cd_S2313C3 = {  "S2313C3", // class name
  bases_S2313C3, 1,
  &(vtc_S2313C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,20), // object size
  NSPAIRA(_ZTI7S2313C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2313C3),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  S2313C2  : S2313C3 {
  void *s2313c2f0[2];
  int s2313c2f1[3];
  char s2313c2f2[2];
  void *s2313c2f3;
  virtual  ~S2313C2(); // _ZN7S2313C2D1Ev
  virtual void  v7(); // _ZN7S2313C22v7Ev
  virtual void  v8(); // _ZN7S2313C22v8Ev
  virtual void  v9(); // _ZN7S2313C22v9Ev
  virtual void  v10(); // _ZN7S2313C23v10Ev
  S2313C2(); // tgen
};
//SIG(-1 S2313C2) C1{ BC2{ BC3{ vd v5 Fc Fi} vd v6 Fp Fc[2]} vd v1 v2 v3 v4 Fp[2] Fi[3] Fc[2] Fp}


 S2313C2 ::~S2313C2(){ note_dtor("S2313C2", this);}
void  S2313C2 ::v7(){vfunc_called(this, "_ZN7S2313C22v7Ev");}
void  S2313C2 ::v8(){vfunc_called(this, "_ZN7S2313C22v8Ev");}
void  S2313C2 ::v9(){vfunc_called(this, "_ZN7S2313C22v9Ev");}
void  S2313C2 ::v10(){vfunc_called(this, "_ZN7S2313C23v10Ev");}
S2313C2 ::S2313C2(){ note_ctor("S2313C2", this);} // tgen

static void Test_S2313C2()
{
  extern Class_Descriptor cd_S2313C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,13)];
    init_test(&cd_S2313C2, buf);
    S2313C2 *dp, &lv = *(dp=new (buf) S2313C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,48), "sizeof(S2313C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2313C2)");
    check_base_class_offset(lv, (S2313C4*)(S2313C3*), 0, "S2313C2");
    check_base_class_offset(lv, (S2313C3*), 0, "S2313C2");
    check_field_offset(lv, s2313c2f0, ABISELECT(32,20), "S2313C2.s2313c2f0");
    check_field_offset(lv, s2313c2f1, ABISELECT(48,28), "S2313C2.s2313c2f1");
    check_field_offset(lv, s2313c2f2, ABISELECT(60,40), "S2313C2.s2313c2f2");
    check_field_offset(lv, s2313c2f3, ABISELECT(64,44), "S2313C2.s2313c2f3");
    test_class_info(&lv, &cd_S2313C2);
    dp->~S2313C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2313C2(Test_S2313C2, "S2313C2", ABISELECT(72,48));

#else // __cplusplus

extern void _ZN7S2313C2C1Ev();
extern void _ZN7S2313C2D1Ev();
Name_Map name_map_S2313C2[] = {
  NSPAIR(_ZN7S2313C2C1Ev),
  NSPAIR(_ZN7S2313C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2313C4;
extern VTBL_ENTRY _ZTI7S2313C4[];
extern  VTBL_ENTRY _ZTV7S2313C4[];
extern Class_Descriptor cd_S2313C3;
extern VTBL_ENTRY _ZTI7S2313C3[];
extern  VTBL_ENTRY _ZTV7S2313C3[];
static Base_Class bases_S2313C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2313C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S2313C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S2313C2[];
extern void _ZN7S2313C2D1Ev();
extern void _ZN7S2313C2D0Ev();
extern void _ZN7S2313C42v5Ev();
extern void _ZN7S2313C32v6Ev();
extern void _ZN7S2313C22v7Ev();
extern void _ZN7S2313C22v8Ev();
extern void _ZN7S2313C22v9Ev();
extern void _ZN7S2313C23v10Ev();
static  VTBL_ENTRY vtc_S2313C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2313C2[0]),
  (VTBL_ENTRY)&_ZN7S2313C2D1Ev,
  (VTBL_ENTRY)&_ZN7S2313C2D0Ev,
  (VTBL_ENTRY)&_ZN7S2313C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2313C32v6Ev,
  (VTBL_ENTRY)&_ZN7S2313C22v7Ev,
  (VTBL_ENTRY)&_ZN7S2313C22v8Ev,
  (VTBL_ENTRY)&_ZN7S2313C22v9Ev,
  (VTBL_ENTRY)&_ZN7S2313C23v10Ev,
};
extern VTBL_ENTRY _ZTI7S2313C2[];
extern  VTBL_ENTRY _ZTV7S2313C2[];
Class_Descriptor cd_S2313C2 = {  "S2313C2", // class name
  bases_S2313C2, 2,
  &(vtc_S2313C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,48), // object size
  NSPAIRA(_ZTI7S2313C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2313C2),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  S2313C1  : S2313C2 {
  int s2313c1f0[6];
  char s2313c1f1;
  virtual  ~S2313C1(); // _ZN7S2313C1D1Ev
  virtual void  v1(); // _ZN7S2313C12v1Ev
  virtual void  v2(); // _ZN7S2313C12v2Ev
  virtual void  v3(); // _ZN7S2313C12v3Ev
  virtual void  v4(); // _ZN7S2313C12v4Ev
  S2313C1(); // tgen
};
//SIG(1 S2313C1) C1{ BC2{ BC3{ BC4{ vd v5 Fc Fi} vd v6 Fp Fc[2]} vd v7 v8 v9 v10 Fp[2] Fi[3] Fc[2] Fp} vd v1 v2 v3 v4 Fi[6] Fc}


 S2313C1 ::~S2313C1(){ note_dtor("S2313C1", this);}
void  S2313C1 ::v1(){vfunc_called(this, "_ZN7S2313C12v1Ev");}
void  S2313C1 ::v2(){vfunc_called(this, "_ZN7S2313C12v2Ev");}
void  S2313C1 ::v3(){vfunc_called(this, "_ZN7S2313C12v3Ev");}
void  S2313C1 ::v4(){vfunc_called(this, "_ZN7S2313C12v4Ev");}
S2313C1 ::S2313C1(){ note_ctor("S2313C1", this);} // tgen

static void Test_S2313C1()
{
  extern Class_Descriptor cd_S2313C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(14,20)];
    init_test(&cd_S2313C1, buf);
    S2313C1 *dp, &lv = *(dp=new (buf) S2313C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(104,76), "sizeof(S2313C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2313C1)");
    check_base_class_offset(lv, (S2313C4*)(S2313C3*)(S2313C2*), 0, "S2313C1");
    check_base_class_offset(lv, (S2313C3*)(S2313C2*), 0, "S2313C1");
    check_base_class_offset(lv, (S2313C2*), 0, "S2313C1");
    check_field_offset(lv, s2313c1f0, ABISELECT(72,48), "S2313C1.s2313c1f0");
    check_field_offset(lv, s2313c1f1, ABISELECT(96,72), "S2313C1.s2313c1f1");
    test_class_info(&lv, &cd_S2313C1);
    dp->~S2313C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2313C1(Test_S2313C1, "S2313C1", ABISELECT(104,76));

#else // __cplusplus

extern void _ZN7S2313C1C1Ev();
extern void _ZN7S2313C1D1Ev();
Name_Map name_map_S2313C1[] = {
  NSPAIR(_ZN7S2313C1C1Ev),
  NSPAIR(_ZN7S2313C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2313C4;
extern VTBL_ENTRY _ZTI7S2313C4[];
extern  VTBL_ENTRY _ZTV7S2313C4[];
extern Class_Descriptor cd_S2313C3;
extern VTBL_ENTRY _ZTI7S2313C3[];
extern  VTBL_ENTRY _ZTV7S2313C3[];
extern Class_Descriptor cd_S2313C2;
extern VTBL_ENTRY _ZTI7S2313C2[];
extern  VTBL_ENTRY _ZTV7S2313C2[];
static Base_Class bases_S2313C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2313C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S2313C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S2313C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S2313C1[];
extern void _ZN7S2313C1D1Ev();
extern void _ZN7S2313C1D0Ev();
extern void _ZN7S2313C42v5Ev();
extern void _ZN7S2313C32v6Ev();
extern void _ZN7S2313C22v7Ev();
extern void _ZN7S2313C22v8Ev();
extern void _ZN7S2313C22v9Ev();
extern void _ZN7S2313C23v10Ev();
extern void _ZN7S2313C12v1Ev();
extern void _ZN7S2313C12v2Ev();
extern void _ZN7S2313C12v3Ev();
extern void _ZN7S2313C12v4Ev();
static  VTBL_ENTRY vtc_S2313C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2313C1[0]),
  (VTBL_ENTRY)&_ZN7S2313C1D1Ev,
  (VTBL_ENTRY)&_ZN7S2313C1D0Ev,
  (VTBL_ENTRY)&_ZN7S2313C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2313C32v6Ev,
  (VTBL_ENTRY)&_ZN7S2313C22v7Ev,
  (VTBL_ENTRY)&_ZN7S2313C22v8Ev,
  (VTBL_ENTRY)&_ZN7S2313C22v9Ev,
  (VTBL_ENTRY)&_ZN7S2313C23v10Ev,
  (VTBL_ENTRY)&_ZN7S2313C12v1Ev,
  (VTBL_ENTRY)&_ZN7S2313C12v2Ev,
  (VTBL_ENTRY)&_ZN7S2313C12v3Ev,
  (VTBL_ENTRY)&_ZN7S2313C12v4Ev,
};
extern VTBL_ENTRY _ZTI7S2313C1[];
extern  VTBL_ENTRY _ZTV7S2313C1[];
Class_Descriptor cd_S2313C1 = {  "S2313C1", // class name
  bases_S2313C1, 3,
  &(vtc_S2313C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(104,76), // object size
  NSPAIRA(_ZTI7S2313C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2313C1),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  S2312C4  {
  char s2312c4f0;
  int s2312c4f1;
  virtual  ~S2312C4(); // _ZN7S2312C4D1Ev
  virtual void  v5(); // _ZN7S2312C42v5Ev
  S2312C4(); // tgen
};
//SIG(-1 S2312C4) C1{ vd v1 Fc Fi}


 S2312C4 ::~S2312C4(){ note_dtor("S2312C4", this);}
void  S2312C4 ::v5(){vfunc_called(this, "_ZN7S2312C42v5Ev");}
S2312C4 ::S2312C4(){ note_ctor("S2312C4", this);} // tgen

static void Test_S2312C4()
{
  extern Class_Descriptor cd_S2312C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S2312C4, buf);
    S2312C4 *dp, &lv = *(dp=new (buf) S2312C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S2312C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2312C4)");
    check_field_offset(lv, s2312c4f0, ABISELECT(8,4), "S2312C4.s2312c4f0");
    check_field_offset(lv, s2312c4f1, ABISELECT(12,8), "S2312C4.s2312c4f1");
    test_class_info(&lv, &cd_S2312C4);
    dp->~S2312C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2312C4(Test_S2312C4, "S2312C4", ABISELECT(16,12));

#else // __cplusplus

extern void _ZN7S2312C4C1Ev();
extern void _ZN7S2312C4D1Ev();
Name_Map name_map_S2312C4[] = {
  NSPAIR(_ZN7S2312C4C1Ev),
  NSPAIR(_ZN7S2312C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S2312C4[];
extern void _ZN7S2312C4D1Ev();
extern void _ZN7S2312C4D0Ev();
extern void _ZN7S2312C42v5Ev();
static  VTBL_ENTRY vtc_S2312C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2312C4[0]),
  (VTBL_ENTRY)&_ZN7S2312C4D1Ev,
  (VTBL_ENTRY)&_ZN7S2312C4D0Ev,
  (VTBL_ENTRY)&_ZN7S2312C42v5Ev,
};
extern VTBL_ENTRY _ZTI7S2312C4[];
extern  VTBL_ENTRY _ZTV7S2312C4[];
Class_Descriptor cd_S2312C4 = {  "S2312C4", // class name
  0,0,//no base classes
  &(vtc_S2312C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI7S2312C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S2312C4),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  S2312C3  : S2312C4 {
  void *s2312c3f0;
  char s2312c3f1[2];
  virtual  ~S2312C3(); // _ZN7S2312C3D1Ev
  virtual void  v6(); // _ZN7S2312C32v6Ev
  S2312C3(); // tgen
};
//SIG(-1 S2312C3) C1{ BC2{ vd v2 Fc Fi} vd v1 Fp Fc[2]}


 S2312C3 ::~S2312C3(){ note_dtor("S2312C3", this);}
void  S2312C3 ::v6(){vfunc_called(this, "_ZN7S2312C32v6Ev");}
S2312C3 ::S2312C3(){ note_ctor("S2312C3", this);} // tgen

static void Test_S2312C3()
{
  extern Class_Descriptor cd_S2312C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,6)];
    init_test(&cd_S2312C3, buf);
    S2312C3 *dp, &lv = *(dp=new (buf) S2312C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S2312C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2312C3)");
    check_base_class_offset(lv, (S2312C4*), 0, "S2312C3");
    check_field_offset(lv, s2312c3f0, ABISELECT(16,12), "S2312C3.s2312c3f0");
    check_field_offset(lv, s2312c3f1, ABISELECT(24,16), "S2312C3.s2312c3f1");
    test_class_info(&lv, &cd_S2312C3);
    dp->~S2312C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2312C3(Test_S2312C3, "S2312C3", ABISELECT(32,20));

#else // __cplusplus

extern void _ZN7S2312C3C1Ev();
extern void _ZN7S2312C3D1Ev();
Name_Map name_map_S2312C3[] = {
  NSPAIR(_ZN7S2312C3C1Ev),
  NSPAIR(_ZN7S2312C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2312C4;
extern VTBL_ENTRY _ZTI7S2312C4[];
extern  VTBL_ENTRY _ZTV7S2312C4[];
static Base_Class bases_S2312C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2312C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI7S2312C3[];
extern void _ZN7S2312C3D1Ev();
extern void _ZN7S2312C3D0Ev();
extern void _ZN7S2312C42v5Ev();
extern void _ZN7S2312C32v6Ev();
static  VTBL_ENTRY vtc_S2312C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2312C3[0]),
  (VTBL_ENTRY)&_ZN7S2312C3D1Ev,
  (VTBL_ENTRY)&_ZN7S2312C3D0Ev,
  (VTBL_ENTRY)&_ZN7S2312C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2312C32v6Ev,
};
extern VTBL_ENTRY _ZTI7S2312C3[];
extern  VTBL_ENTRY _ZTV7S2312C3[];
Class_Descriptor cd_S2312C3 = {  "S2312C3", // class name
  bases_S2312C3, 1,
  &(vtc_S2312C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,20), // object size
  NSPAIRA(_ZTI7S2312C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2312C3),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  S2312C2  : S2312C3 {
  void *s2312c2f0[2];
  int s2312c2f1[3];
  char s2312c2f2[2];
  void *s2312c2f3;
  virtual  ~S2312C2(); // _ZN7S2312C2D1Ev
  virtual void  v7(); // _ZN7S2312C22v7Ev
  virtual void  v8(); // _ZN7S2312C22v8Ev
  virtual void  v9(); // _ZN7S2312C22v9Ev
  virtual void  v10(); // _ZN7S2312C23v10Ev
  S2312C2(); // tgen
};
//SIG(-1 S2312C2) C1{ BC2{ BC3{ vd v5 Fc Fi} vd v6 Fp Fc[2]} vd v1 v2 v3 v4 Fp[2] Fi[3] Fc[2] Fp}


 S2312C2 ::~S2312C2(){ note_dtor("S2312C2", this);}
void  S2312C2 ::v7(){vfunc_called(this, "_ZN7S2312C22v7Ev");}
void  S2312C2 ::v8(){vfunc_called(this, "_ZN7S2312C22v8Ev");}
void  S2312C2 ::v9(){vfunc_called(this, "_ZN7S2312C22v9Ev");}
void  S2312C2 ::v10(){vfunc_called(this, "_ZN7S2312C23v10Ev");}
S2312C2 ::S2312C2(){ note_ctor("S2312C2", this);} // tgen

static void Test_S2312C2()
{
  extern Class_Descriptor cd_S2312C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,13)];
    init_test(&cd_S2312C2, buf);
    S2312C2 *dp, &lv = *(dp=new (buf) S2312C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,48), "sizeof(S2312C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2312C2)");
    check_base_class_offset(lv, (S2312C4*)(S2312C3*), 0, "S2312C2");
    check_base_class_offset(lv, (S2312C3*), 0, "S2312C2");
    check_field_offset(lv, s2312c2f0, ABISELECT(32,20), "S2312C2.s2312c2f0");
    check_field_offset(lv, s2312c2f1, ABISELECT(48,28), "S2312C2.s2312c2f1");
    check_field_offset(lv, s2312c2f2, ABISELECT(60,40), "S2312C2.s2312c2f2");
    check_field_offset(lv, s2312c2f3, ABISELECT(64,44), "S2312C2.s2312c2f3");
    test_class_info(&lv, &cd_S2312C2);
    dp->~S2312C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2312C2(Test_S2312C2, "S2312C2", ABISELECT(72,48));

#else // __cplusplus

extern void _ZN7S2312C2C1Ev();
extern void _ZN7S2312C2D1Ev();
Name_Map name_map_S2312C2[] = {
  NSPAIR(_ZN7S2312C2C1Ev),
  NSPAIR(_ZN7S2312C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2312C4;
extern VTBL_ENTRY _ZTI7S2312C4[];
extern  VTBL_ENTRY _ZTV7S2312C4[];
extern Class_Descriptor cd_S2312C3;
extern VTBL_ENTRY _ZTI7S2312C3[];
extern  VTBL_ENTRY _ZTV7S2312C3[];
static Base_Class bases_S2312C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2312C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S2312C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S2312C2[];
extern void _ZN7S2312C2D1Ev();
extern void _ZN7S2312C2D0Ev();
extern void _ZN7S2312C42v5Ev();
extern void _ZN7S2312C32v6Ev();
extern void _ZN7S2312C22v7Ev();
extern void _ZN7S2312C22v8Ev();
extern void _ZN7S2312C22v9Ev();
extern void _ZN7S2312C23v10Ev();
static  VTBL_ENTRY vtc_S2312C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2312C2[0]),
  (VTBL_ENTRY)&_ZN7S2312C2D1Ev,
  (VTBL_ENTRY)&_ZN7S2312C2D0Ev,
  (VTBL_ENTRY)&_ZN7S2312C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2312C32v6Ev,
  (VTBL_ENTRY)&_ZN7S2312C22v7Ev,
  (VTBL_ENTRY)&_ZN7S2312C22v8Ev,
  (VTBL_ENTRY)&_ZN7S2312C22v9Ev,
  (VTBL_ENTRY)&_ZN7S2312C23v10Ev,
};
extern VTBL_ENTRY _ZTI7S2312C2[];
extern  VTBL_ENTRY _ZTV7S2312C2[];
Class_Descriptor cd_S2312C2 = {  "S2312C2", // class name
  bases_S2312C2, 2,
  &(vtc_S2312C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,48), // object size
  NSPAIRA(_ZTI7S2312C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2312C2),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  S2312C1  : S2312C2 {
  int s2312c1f0[5];
  void *s2312c1f1;
  virtual  ~S2312C1(); // _ZN7S2312C1D1Ev
  virtual void  v1(); // _ZN7S2312C12v1Ev
  virtual void  v2(); // _ZN7S2312C12v2Ev
  virtual void  v3(); // _ZN7S2312C12v3Ev
  virtual void  v4(); // _ZN7S2312C12v4Ev
  S2312C1(); // tgen
};
//SIG(1 S2312C1) C1{ BC2{ BC3{ BC4{ vd v5 Fc Fi} vd v6 Fp Fc[2]} vd v7 v8 v9 v10 Fp[2] Fi[3] Fc[2] Fp} vd v1 v2 v3 v4 Fi[5] Fp}


 S2312C1 ::~S2312C1(){ note_dtor("S2312C1", this);}
void  S2312C1 ::v1(){vfunc_called(this, "_ZN7S2312C12v1Ev");}
void  S2312C1 ::v2(){vfunc_called(this, "_ZN7S2312C12v2Ev");}
void  S2312C1 ::v3(){vfunc_called(this, "_ZN7S2312C12v3Ev");}
void  S2312C1 ::v4(){vfunc_called(this, "_ZN7S2312C12v4Ev");}
S2312C1 ::S2312C1(){ note_ctor("S2312C1", this);} // tgen

static void Test_S2312C1()
{
  extern Class_Descriptor cd_S2312C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(14,19)];
    init_test(&cd_S2312C1, buf);
    S2312C1 *dp, &lv = *(dp=new (buf) S2312C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(104,72), "sizeof(S2312C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2312C1)");
    check_base_class_offset(lv, (S2312C4*)(S2312C3*)(S2312C2*), 0, "S2312C1");
    check_base_class_offset(lv, (S2312C3*)(S2312C2*), 0, "S2312C1");
    check_base_class_offset(lv, (S2312C2*), 0, "S2312C1");
    check_field_offset(lv, s2312c1f0, ABISELECT(72,48), "S2312C1.s2312c1f0");
    check_field_offset(lv, s2312c1f1, ABISELECT(96,68), "S2312C1.s2312c1f1");
    test_class_info(&lv, &cd_S2312C1);
    dp->~S2312C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2312C1(Test_S2312C1, "S2312C1", ABISELECT(104,72));

#else // __cplusplus

extern void _ZN7S2312C1C1Ev();
extern void _ZN7S2312C1D1Ev();
Name_Map name_map_S2312C1[] = {
  NSPAIR(_ZN7S2312C1C1Ev),
  NSPAIR(_ZN7S2312C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2312C4;
extern VTBL_ENTRY _ZTI7S2312C4[];
extern  VTBL_ENTRY _ZTV7S2312C4[];
extern Class_Descriptor cd_S2312C3;
extern VTBL_ENTRY _ZTI7S2312C3[];
extern  VTBL_ENTRY _ZTV7S2312C3[];
extern Class_Descriptor cd_S2312C2;
extern VTBL_ENTRY _ZTI7S2312C2[];
extern  VTBL_ENTRY _ZTV7S2312C2[];
static Base_Class bases_S2312C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2312C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S2312C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S2312C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S2312C1[];
extern void _ZN7S2312C1D1Ev();
extern void _ZN7S2312C1D0Ev();
extern void _ZN7S2312C42v5Ev();
extern void _ZN7S2312C32v6Ev();
extern void _ZN7S2312C22v7Ev();
extern void _ZN7S2312C22v8Ev();
extern void _ZN7S2312C22v9Ev();
extern void _ZN7S2312C23v10Ev();
extern void _ZN7S2312C12v1Ev();
extern void _ZN7S2312C12v2Ev();
extern void _ZN7S2312C12v3Ev();
extern void _ZN7S2312C12v4Ev();
static  VTBL_ENTRY vtc_S2312C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2312C1[0]),
  (VTBL_ENTRY)&_ZN7S2312C1D1Ev,
  (VTBL_ENTRY)&_ZN7S2312C1D0Ev,
  (VTBL_ENTRY)&_ZN7S2312C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2312C32v6Ev,
  (VTBL_ENTRY)&_ZN7S2312C22v7Ev,
  (VTBL_ENTRY)&_ZN7S2312C22v8Ev,
  (VTBL_ENTRY)&_ZN7S2312C22v9Ev,
  (VTBL_ENTRY)&_ZN7S2312C23v10Ev,
  (VTBL_ENTRY)&_ZN7S2312C12v1Ev,
  (VTBL_ENTRY)&_ZN7S2312C12v2Ev,
  (VTBL_ENTRY)&_ZN7S2312C12v3Ev,
  (VTBL_ENTRY)&_ZN7S2312C12v4Ev,
};
extern VTBL_ENTRY _ZTI7S2312C1[];
extern  VTBL_ENTRY _ZTV7S2312C1[];
Class_Descriptor cd_S2312C1 = {  "S2312C1", // class name
  bases_S2312C1, 3,
  &(vtc_S2312C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(104,72), // object size
  NSPAIRA(_ZTI7S2312C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2312C1),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  S2307C4  {
  char s2307c4f0;
  int s2307c4f1;
  virtual  ~S2307C4(); // _ZN7S2307C4D1Ev
  virtual void  v5(); // _ZN7S2307C42v5Ev
  S2307C4(); // tgen
};
//SIG(-1 S2307C4) C1{ vd v1 Fc Fi}


 S2307C4 ::~S2307C4(){ note_dtor("S2307C4", this);}
void  S2307C4 ::v5(){vfunc_called(this, "_ZN7S2307C42v5Ev");}
S2307C4 ::S2307C4(){ note_ctor("S2307C4", this);} // tgen

static void Test_S2307C4()
{
  extern Class_Descriptor cd_S2307C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S2307C4, buf);
    S2307C4 *dp, &lv = *(dp=new (buf) S2307C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S2307C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2307C4)");
    check_field_offset(lv, s2307c4f0, ABISELECT(8,4), "S2307C4.s2307c4f0");
    check_field_offset(lv, s2307c4f1, ABISELECT(12,8), "S2307C4.s2307c4f1");
    test_class_info(&lv, &cd_S2307C4);
    dp->~S2307C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2307C4(Test_S2307C4, "S2307C4", ABISELECT(16,12));

#else // __cplusplus

extern void _ZN7S2307C4C1Ev();
extern void _ZN7S2307C4D1Ev();
Name_Map name_map_S2307C4[] = {
  NSPAIR(_ZN7S2307C4C1Ev),
  NSPAIR(_ZN7S2307C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S2307C4[];
extern void _ZN7S2307C4D1Ev();
extern void _ZN7S2307C4D0Ev();
extern void _ZN7S2307C42v5Ev();
static  VTBL_ENTRY vtc_S2307C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2307C4[0]),
  (VTBL_ENTRY)&_ZN7S2307C4D1Ev,
  (VTBL_ENTRY)&_ZN7S2307C4D0Ev,
  (VTBL_ENTRY)&_ZN7S2307C42v5Ev,
};
extern VTBL_ENTRY _ZTI7S2307C4[];
extern  VTBL_ENTRY _ZTV7S2307C4[];
Class_Descriptor cd_S2307C4 = {  "S2307C4", // class name
  0,0,//no base classes
  &(vtc_S2307C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI7S2307C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S2307C4),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  S2307C3  : S2307C4 {
  void *s2307c3f0;
  char s2307c3f1[2];
  virtual  ~S2307C3(); // _ZN7S2307C3D1Ev
  virtual void  v6(); // _ZN7S2307C32v6Ev
  S2307C3(); // tgen
};
//SIG(-1 S2307C3) C1{ BC2{ vd v2 Fc Fi} vd v1 Fp Fc[2]}


 S2307C3 ::~S2307C3(){ note_dtor("S2307C3", this);}
void  S2307C3 ::v6(){vfunc_called(this, "_ZN7S2307C32v6Ev");}
S2307C3 ::S2307C3(){ note_ctor("S2307C3", this);} // tgen

static void Test_S2307C3()
{
  extern Class_Descriptor cd_S2307C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,6)];
    init_test(&cd_S2307C3, buf);
    S2307C3 *dp, &lv = *(dp=new (buf) S2307C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S2307C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2307C3)");
    check_base_class_offset(lv, (S2307C4*), 0, "S2307C3");
    check_field_offset(lv, s2307c3f0, ABISELECT(16,12), "S2307C3.s2307c3f0");
    check_field_offset(lv, s2307c3f1, ABISELECT(24,16), "S2307C3.s2307c3f1");
    test_class_info(&lv, &cd_S2307C3);
    dp->~S2307C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2307C3(Test_S2307C3, "S2307C3", ABISELECT(32,20));

#else // __cplusplus

extern void _ZN7S2307C3C1Ev();
extern void _ZN7S2307C3D1Ev();
Name_Map name_map_S2307C3[] = {
  NSPAIR(_ZN7S2307C3C1Ev),
  NSPAIR(_ZN7S2307C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2307C4;
extern VTBL_ENTRY _ZTI7S2307C4[];
extern  VTBL_ENTRY _ZTV7S2307C4[];
static Base_Class bases_S2307C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2307C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI7S2307C3[];
extern void _ZN7S2307C3D1Ev();
extern void _ZN7S2307C3D0Ev();
extern void _ZN7S2307C42v5Ev();
extern void _ZN7S2307C32v6Ev();
static  VTBL_ENTRY vtc_S2307C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2307C3[0]),
  (VTBL_ENTRY)&_ZN7S2307C3D1Ev,
  (VTBL_ENTRY)&_ZN7S2307C3D0Ev,
  (VTBL_ENTRY)&_ZN7S2307C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2307C32v6Ev,
};
extern VTBL_ENTRY _ZTI7S2307C3[];
extern  VTBL_ENTRY _ZTV7S2307C3[];
Class_Descriptor cd_S2307C3 = {  "S2307C3", // class name
  bases_S2307C3, 1,
  &(vtc_S2307C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,20), // object size
  NSPAIRA(_ZTI7S2307C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2307C3),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  S2307C2  : S2307C3 {
  void *s2307c2f0[2];
  int s2307c2f1[3];
  char s2307c2f2[2];
  void *s2307c2f3;
  virtual  ~S2307C2(); // _ZN7S2307C2D1Ev
  virtual void  v7(); // _ZN7S2307C22v7Ev
  virtual void  v8(); // _ZN7S2307C22v8Ev
  virtual void  v9(); // _ZN7S2307C22v9Ev
  virtual void  v10(); // _ZN7S2307C23v10Ev
  S2307C2(); // tgen
};
//SIG(-1 S2307C2) C1{ BC2{ BC3{ vd v5 Fc Fi} vd v6 Fp Fc[2]} vd v1 v2 v3 v4 Fp[2] Fi[3] Fc[2] Fp}


 S2307C2 ::~S2307C2(){ note_dtor("S2307C2", this);}
void  S2307C2 ::v7(){vfunc_called(this, "_ZN7S2307C22v7Ev");}
void  S2307C2 ::v8(){vfunc_called(this, "_ZN7S2307C22v8Ev");}
void  S2307C2 ::v9(){vfunc_called(this, "_ZN7S2307C22v9Ev");}
void  S2307C2 ::v10(){vfunc_called(this, "_ZN7S2307C23v10Ev");}
S2307C2 ::S2307C2(){ note_ctor("S2307C2", this);} // tgen

static void Test_S2307C2()
{
  extern Class_Descriptor cd_S2307C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,13)];
    init_test(&cd_S2307C2, buf);
    S2307C2 *dp, &lv = *(dp=new (buf) S2307C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,48), "sizeof(S2307C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2307C2)");
    check_base_class_offset(lv, (S2307C4*)(S2307C3*), 0, "S2307C2");
    check_base_class_offset(lv, (S2307C3*), 0, "S2307C2");
    check_field_offset(lv, s2307c2f0, ABISELECT(32,20), "S2307C2.s2307c2f0");
    check_field_offset(lv, s2307c2f1, ABISELECT(48,28), "S2307C2.s2307c2f1");
    check_field_offset(lv, s2307c2f2, ABISELECT(60,40), "S2307C2.s2307c2f2");
    check_field_offset(lv, s2307c2f3, ABISELECT(64,44), "S2307C2.s2307c2f3");
    test_class_info(&lv, &cd_S2307C2);
    dp->~S2307C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2307C2(Test_S2307C2, "S2307C2", ABISELECT(72,48));

#else // __cplusplus

extern void _ZN7S2307C2C1Ev();
extern void _ZN7S2307C2D1Ev();
Name_Map name_map_S2307C2[] = {
  NSPAIR(_ZN7S2307C2C1Ev),
  NSPAIR(_ZN7S2307C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2307C4;
extern VTBL_ENTRY _ZTI7S2307C4[];
extern  VTBL_ENTRY _ZTV7S2307C4[];
extern Class_Descriptor cd_S2307C3;
extern VTBL_ENTRY _ZTI7S2307C3[];
extern  VTBL_ENTRY _ZTV7S2307C3[];
static Base_Class bases_S2307C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2307C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S2307C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S2307C2[];
extern void _ZN7S2307C2D1Ev();
extern void _ZN7S2307C2D0Ev();
extern void _ZN7S2307C42v5Ev();
extern void _ZN7S2307C32v6Ev();
extern void _ZN7S2307C22v7Ev();
extern void _ZN7S2307C22v8Ev();
extern void _ZN7S2307C22v9Ev();
extern void _ZN7S2307C23v10Ev();
static  VTBL_ENTRY vtc_S2307C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2307C2[0]),
  (VTBL_ENTRY)&_ZN7S2307C2D1Ev,
  (VTBL_ENTRY)&_ZN7S2307C2D0Ev,
  (VTBL_ENTRY)&_ZN7S2307C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2307C32v6Ev,
  (VTBL_ENTRY)&_ZN7S2307C22v7Ev,
  (VTBL_ENTRY)&_ZN7S2307C22v8Ev,
  (VTBL_ENTRY)&_ZN7S2307C22v9Ev,
  (VTBL_ENTRY)&_ZN7S2307C23v10Ev,
};
extern VTBL_ENTRY _ZTI7S2307C2[];
extern  VTBL_ENTRY _ZTV7S2307C2[];
Class_Descriptor cd_S2307C2 = {  "S2307C2", // class name
  bases_S2307C2, 2,
  &(vtc_S2307C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,48), // object size
  NSPAIRA(_ZTI7S2307C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2307C2),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  S2307C1  : S2307C2 {
  int s2307c1f0[3];
  void *s2307c1f1;
  virtual  ~S2307C1(); // _ZN7S2307C1D1Ev
  virtual void  v1(); // _ZN7S2307C12v1Ev
  virtual void  v2(); // _ZN7S2307C12v2Ev
  virtual void  v3(); // _ZN7S2307C12v3Ev
  virtual void  v4(); // _ZN7S2307C12v4Ev
  S2307C1(); // tgen
};
//SIG(1 S2307C1) C1{ BC2{ BC3{ BC4{ vd v5 Fc Fi} vd v6 Fp Fc[2]} vd v7 v8 v9 v10 Fp[2] Fi[3] Fc[2] Fp} vd v1 v2 v3 v4 Fi[3] Fp}


 S2307C1 ::~S2307C1(){ note_dtor("S2307C1", this);}
void  S2307C1 ::v1(){vfunc_called(this, "_ZN7S2307C12v1Ev");}
void  S2307C1 ::v2(){vfunc_called(this, "_ZN7S2307C12v2Ev");}
void  S2307C1 ::v3(){vfunc_called(this, "_ZN7S2307C12v3Ev");}
void  S2307C1 ::v4(){vfunc_called(this, "_ZN7S2307C12v4Ev");}
S2307C1 ::S2307C1(){ note_ctor("S2307C1", this);} // tgen

static void Test_S2307C1()
{
  extern Class_Descriptor cd_S2307C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,17)];
    init_test(&cd_S2307C1, buf);
    S2307C1 *dp, &lv = *(dp=new (buf) S2307C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,64), "sizeof(S2307C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2307C1)");
    check_base_class_offset(lv, (S2307C4*)(S2307C3*)(S2307C2*), 0, "S2307C1");
    check_base_class_offset(lv, (S2307C3*)(S2307C2*), 0, "S2307C1");
    check_base_class_offset(lv, (S2307C2*), 0, "S2307C1");
    check_field_offset(lv, s2307c1f0, ABISELECT(72,48), "S2307C1.s2307c1f0");
    check_field_offset(lv, s2307c1f1, ABISELECT(88,60), "S2307C1.s2307c1f1");
    test_class_info(&lv, &cd_S2307C1);
    dp->~S2307C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2307C1(Test_S2307C1, "S2307C1", ABISELECT(96,64));

#else // __cplusplus

extern void _ZN7S2307C1C1Ev();
extern void _ZN7S2307C1D1Ev();
Name_Map name_map_S2307C1[] = {
  NSPAIR(_ZN7S2307C1C1Ev),
  NSPAIR(_ZN7S2307C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2307C4;
extern VTBL_ENTRY _ZTI7S2307C4[];
extern  VTBL_ENTRY _ZTV7S2307C4[];
extern Class_Descriptor cd_S2307C3;
extern VTBL_ENTRY _ZTI7S2307C3[];
extern  VTBL_ENTRY _ZTV7S2307C3[];
extern Class_Descriptor cd_S2307C2;
extern VTBL_ENTRY _ZTI7S2307C2[];
extern  VTBL_ENTRY _ZTV7S2307C2[];
static Base_Class bases_S2307C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2307C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S2307C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S2307C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S2307C1[];
extern void _ZN7S2307C1D1Ev();
extern void _ZN7S2307C1D0Ev();
extern void _ZN7S2307C42v5Ev();
extern void _ZN7S2307C32v6Ev();
extern void _ZN7S2307C22v7Ev();
extern void _ZN7S2307C22v8Ev();
extern void _ZN7S2307C22v9Ev();
extern void _ZN7S2307C23v10Ev();
extern void _ZN7S2307C12v1Ev();
extern void _ZN7S2307C12v2Ev();
extern void _ZN7S2307C12v3Ev();
extern void _ZN7S2307C12v4Ev();
static  VTBL_ENTRY vtc_S2307C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2307C1[0]),
  (VTBL_ENTRY)&_ZN7S2307C1D1Ev,
  (VTBL_ENTRY)&_ZN7S2307C1D0Ev,
  (VTBL_ENTRY)&_ZN7S2307C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2307C32v6Ev,
  (VTBL_ENTRY)&_ZN7S2307C22v7Ev,
  (VTBL_ENTRY)&_ZN7S2307C22v8Ev,
  (VTBL_ENTRY)&_ZN7S2307C22v9Ev,
  (VTBL_ENTRY)&_ZN7S2307C23v10Ev,
  (VTBL_ENTRY)&_ZN7S2307C12v1Ev,
  (VTBL_ENTRY)&_ZN7S2307C12v2Ev,
  (VTBL_ENTRY)&_ZN7S2307C12v3Ev,
  (VTBL_ENTRY)&_ZN7S2307C12v4Ev,
};
extern VTBL_ENTRY _ZTI7S2307C1[];
extern  VTBL_ENTRY _ZTV7S2307C1[];
Class_Descriptor cd_S2307C1 = {  "S2307C1", // class name
  bases_S2307C1, 3,
  &(vtc_S2307C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,64), // object size
  NSPAIRA(_ZTI7S2307C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2307C1),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  S20483C3  : S3625C33_nt {
  long double s20483c3f0;
  ::S3625C33_nt s20483c3f1;
  ::S3625C33_nt s20483c3f2;
  ::S3625C33_nt s20483c3f3;
  virtual void  v4(); // _ZN8S20483C32v4Ev
  ~S20483C3(); // tgen
  S20483C3(); // tgen
};
//SIG(-1 S20483C3) C1{ BC2{ m Fp} v1 FD FC2 FC2 FC2}


void  S20483C3 ::v4(){vfunc_called(this, "_ZN8S20483C32v4Ev");}
S20483C3 ::~S20483C3(){ note_dtor("S20483C3", this);} // tgen
S20483C3 ::S20483C3(){ note_ctor("S20483C3", this);} // tgen

static void Test_S20483C3()
{
  extern Class_Descriptor cd_S20483C3;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(5,9)];
    init_test(&cd_S20483C3, buf);
    S20483C3 *dp, &lv = *(dp=new (buf) S20483C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,32), "sizeof(S20483C3)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20483C3)");
    check_base_class_offset(lv, (S3625C33_nt*), ABISELECT(8,4), "S20483C3");
    check_field_offset(lv, s20483c3f0, ABISELECT(16,8), "S20483C3.s20483c3f0");
    check_field_offset(lv, s20483c3f1, ABISELECT(32,20), "S20483C3.s20483c3f1");
    check_field_offset(lv, s20483c3f2, ABISELECT(40,24), "S20483C3.s20483c3f2");
    check_field_offset(lv, s20483c3f3, ABISELECT(48,28), "S20483C3.s20483c3f3");
    test_class_info(&lv, &cd_S20483C3);
    dp->~S20483C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20483C3(Test_S20483C3, "S20483C3", ABISELECT(64,32));

#else // __cplusplus

extern void _ZN8S20483C3C1Ev();
extern void _ZN8S20483C3D1Ev();
Name_Map name_map_S20483C3[] = {
  NSPAIR(_ZN8S20483C3C1Ev),
  NSPAIR(_ZN8S20483C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3625C33_nt;
extern VTBL_ENTRY _ZTI11S3625C33_nt[];
static Base_Class bases_S20483C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3625C33_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 _ZTI8S20483C3[];
extern void _ZN8S20483C32v4Ev();
static  VTBL_ENTRY vtc_S20483C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20483C3[0]),
  (VTBL_ENTRY)&_ZN8S20483C32v4Ev,
};
extern VTBL_ENTRY _ZTI8S20483C3[];
extern  VTBL_ENTRY _ZTV8S20483C3[];
Class_Descriptor cd_S20483C3 = {  "S20483C3", // class name
  bases_S20483C3, 1,
  &(vtc_S20483C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(64,32), // object size
  NSPAIRA(_ZTI8S20483C3),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S20483C3),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  S20483C5  {
  __tsi64 s20483c5f0;
  virtual void  v5(); // _ZN8S20483C52v5Ev
  virtual void  v6(); // _ZN8S20483C52v6Ev
  virtual void  v7(); // _ZN8S20483C52v7Ev
  ~S20483C5(); // tgen
  S20483C5(); // tgen
};
//SIG(-1 S20483C5) C1{ v1 v2 v3 FL}


void  S20483C5 ::v5(){vfunc_called(this, "_ZN8S20483C52v5Ev");}
void  S20483C5 ::v6(){vfunc_called(this, "_ZN8S20483C52v6Ev");}
void  S20483C5 ::v7(){vfunc_called(this, "_ZN8S20483C52v7Ev");}
S20483C5 ::~S20483C5(){ note_dtor("S20483C5", this);} // tgen
S20483C5 ::S20483C5(){ note_ctor("S20483C5", this);} // tgen

static void Test_S20483C5()
{
  extern Class_Descriptor cd_S20483C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S20483C5, buf);
    S20483C5 *dp, &lv = *(dp=new (buf) S20483C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S20483C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20483C5)");
    check_field_offset(lv, s20483c5f0, ABISELECT(8,4), "S20483C5.s20483c5f0");
    test_class_info(&lv, &cd_S20483C5);
    dp->~S20483C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20483C5(Test_S20483C5, "S20483C5", ABISELECT(16,12));

#else // __cplusplus

extern void _ZN8S20483C5C1Ev();
extern void _ZN8S20483C5D1Ev();
Name_Map name_map_S20483C5[] = {
  NSPAIR(_ZN8S20483C5C1Ev),
  NSPAIR(_ZN8S20483C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20483C5[];
extern void _ZN8S20483C52v5Ev();
extern void _ZN8S20483C52v6Ev();
extern void _ZN8S20483C52v7Ev();
static  VTBL_ENTRY vtc_S20483C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20483C5[0]),
  (VTBL_ENTRY)&_ZN8S20483C52v5Ev,
  (VTBL_ENTRY)&_ZN8S20483C52v6Ev,
  (VTBL_ENTRY)&_ZN8S20483C52v7Ev,
};
extern VTBL_ENTRY _ZTI8S20483C5[];
extern  VTBL_ENTRY _ZTV8S20483C5[];
Class_Descriptor cd_S20483C5 = {  "S20483C5", // class name
  0,0,//no base classes
  &(vtc_S20483C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI8S20483C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20483C5),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  S20483C6  : virtual S20483C3 , virtual S20483C5 , virtual S3625C33_nt {
  void *s20483c6f0;
  ~S20483C6(); // tgen
  S20483C6(); // tgen
};
//SIG(-1 S20483C6) C1{ VBC2{ BC3{ m Fp} v1 FD FC3 FC3 FC3} VBC4{ v2 v3 v4 FL} VBC3 Fp}


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

static void Test_S20483C6()
{
  extern Class_Descriptor cd_S20483C6;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(7,15)];
    init_test(&cd_S20483C6, buf);
    S20483C6 *dp, &lv = *(dp=new (buf) S20483C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,56), "sizeof(S20483C6)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20483C6)");
    check_base_class_offset(lv, (S3625C33_nt*)(S20483C3*), ABISELECT(24,12), "S20483C6");
    check_base_class_offset(lv, (S20483C3*), ABISELECT(16,8), "S20483C6");
    check_base_class_offset(lv, (S20483C5*), ABISELECT(72,40), "S20483C6");
    /*is_ambiguous_... S20483C6::S3625C33_nt */ AMB_check_base_class_offset(lv, (S3625C33_nt*), ABISELECT(88,52), "S20483C6");
    check_field_offset(lv, s20483c6f0, ABISELECT(8,4), "S20483C6.s20483c6f0");
    test_class_info(&lv, &cd_S20483C6);
    dp->~S20483C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20483C6(Test_S20483C6, "S20483C6", ABISELECT(96,56));

#else // __cplusplus

extern void _ZN8S20483C6C1Ev();
extern void _ZN8S20483C6D1Ev();
Name_Map name_map_S20483C6[] = {
  NSPAIR(_ZN8S20483C6C1Ev),
  NSPAIR(_ZN8S20483C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3625C33_nt;
extern VTBL_ENTRY _ZTI11S3625C33_nt[];
extern Class_Descriptor cd_S20483C3;
extern VTBL_ENTRY _ZTI8S20483C3[];
extern  VTBL_ENTRY _ZTV8S20483C3[];
extern Class_Descriptor cd_S20483C5;
extern VTBL_ENTRY _ZTI8S20483C5[];
extern  VTBL_ENTRY _ZTV8S20483C5[];
extern Class_Descriptor cd_S3625C33_nt;
extern VTBL_ENTRY _ZTI11S3625C33_nt[];
static Base_Class bases_S20483C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3625C33_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
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S20483C3,    ABISELECT(16,8), //bcp->offset
    5, //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_S20483C5,    ABISELECT(72,40), //bcp->offset
    9, //bcp->virtual_function_table_offset
    5, //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_S3625C33_nt,    ABISELECT(88,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
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20483C6[];
extern void _ZN8S20483C32v4Ev();
extern void _ZN8S20483C52v5Ev();
extern void _ZN8S20483C52v6Ev();
extern void _ZN8S20483C52v7Ev();
static  VTBL_ENTRY vtc_S20483C6[] = {
  ABISELECT(88,52),
  ABISELECT(72,40),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S20483C6[0]),
  0,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S20483C6[0]),
  (VTBL_ENTRY)&_ZN8S20483C32v4Ev,
  0,
  0,
  0,
  ABISELECT(-72,-40),
  (VTBL_ENTRY)&(_ZTI8S20483C6[0]),
  (VTBL_ENTRY)&_ZN8S20483C52v5Ev,
  (VTBL_ENTRY)&_ZN8S20483C52v6Ev,
  (VTBL_ENTRY)&_ZN8S20483C52v7Ev,
};
extern VTBL_ENTRY _ZTV8S20483C6[];
static  VTT_ENTRY vtt_S20483C6[] = {
  {&(_ZTV8S20483C6[5]),  5,17},
  {&(_ZTV8S20483C6[8]),  8,17},
  {&(_ZTV8S20483C6[14]),  14,17},
};
extern VTBL_ENTRY _ZTI8S20483C6[];
extern  VTBL_ENTRY _ZTV8S20483C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20483C6[];
Class_Descriptor cd_S20483C6 = {  "S20483C6", // class name
  bases_S20483C6, 4,
  &(vtc_S20483C6[0]), // expected_vtbl_contents
  &(vtt_S20483C6[0]), // expected_vtt_contents
  ABISELECT(96,56), // object size
  NSPAIRA(_ZTI8S20483C6),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S20483C6),17, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20483C6),3, //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  S20483C2  : virtual S20483C3 , S3625C33_nt , virtual S20483C5 , S20483C6 {
  ::S20483C3 s20483c2f0;
  virtual void  v8(); // _ZN8S20483C22v8Ev
  ~S20483C2(); // tgen
  S20483C2(); // tgen
};
//SIG(-1 S20483C2) C1{ VBC2{ BC3{ m Fp} v2 FD FC3 FC3 FC3} BC3 VBC4{ v3 v4 v5 FL} BC5{ VBC2 VBC4 VBC3 Fp} v1 FC2}


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

static void Test_S20483C2()
{
  extern Class_Descriptor cd_S20483C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(12,24)];
    init_test(&cd_S20483C2, buf);
    S20483C2 *dp, &lv = *(dp=new (buf) S20483C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(176,92), "sizeof(S20483C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20483C2)");
    check_base_class_offset(lv, (S3625C33_nt*)(S20483C3*), ABISELECT(104,48), "S20483C2");
    check_base_class_offset(lv, (S20483C3*), ABISELECT(96,44), "S20483C2");
    check_base_class_offset(lv, (S20483C3*)(S20483C6*), ABISELECT(96,44), "S20483C2");
    /*is_ambiguous_... S20483C2::S3625C33_nt */ AMB_check_base_class_offset(lv, (S3625C33_nt*), ABISELECT(16,8), "S20483C2");
    check_base_class_offset(lv, (S20483C5*), ABISELECT(152,76), "S20483C2");
    check_base_class_offset(lv, (S20483C5*)(S20483C6*), ABISELECT(152,76), "S20483C2");
    /*is_ambiguous_... S20483C6::S3625C33_nt */ AMB_check_base_class_offset(lv, (S3625C33_nt*)(S20483C6*), ABISELECT(168,88), "S20483C2");
    check_base_class_offset(lv, (S20483C6*), 0, "S20483C2");
    check_field_offset(lv, s20483c2f0, ABISELECT(32,12), "S20483C2.s20483c2f0");
    test_class_info(&lv, &cd_S20483C2);
    dp->~S20483C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20483C2(Test_S20483C2, "S20483C2", ABISELECT(176,92));

#else // __cplusplus

extern void _ZN8S20483C2C1Ev();
extern void _ZN8S20483C2D1Ev();
Name_Map name_map_S20483C2[] = {
  NSPAIR(_ZN8S20483C2C1Ev),
  NSPAIR(_ZN8S20483C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3625C33_nt;
extern VTBL_ENTRY _ZTI11S3625C33_nt[];
extern Class_Descriptor cd_S20483C3;
extern VTBL_ENTRY _ZTI8S20483C3[];
extern  VTBL_ENTRY _ZTV8S20483C3[];
extern Class_Descriptor cd_S3625C33_nt;
extern VTBL_ENTRY _ZTI11S3625C33_nt[];
extern Class_Descriptor cd_S20483C5;
extern VTBL_ENTRY _ZTI8S20483C5[];
extern  VTBL_ENTRY _ZTV8S20483C5[];
extern Class_Descriptor cd_S3625C33_nt;
extern VTBL_ENTRY _ZTI11S3625C33_nt[];
extern Class_Descriptor cd_S20483C6;
extern VTBL_ENTRY _ZTI8S20483C6[];
extern  VTBL_ENTRY _ZTV8S20483C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20483C6[];
static Base_Class bases_S20483C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3625C33_nt,    ABISELECT(104,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
  0, 0},
  {&cd_S20483C3,    ABISELECT(96,44), //bcp->offset
    6, //bcp->virtual_function_table_offset
    3, //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_S3625C33_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
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20483C5,    ABISELECT(152,76), //bcp->offset
    10, //bcp->virtual_function_table_offset
    5, //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
    -1, //immediately_derived
  1, 1},
  {&cd_S3625C33_nt,    ABISELECT(168,88), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20483C6,    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
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20483C2[];
extern void _ZN8S20483C22v8Ev();
extern void _ZN8S20483C32v4Ev();
extern void _ZN8S20483C52v5Ev();
extern void _ZN8S20483C52v6Ev();
extern void _ZN8S20483C52v7Ev();
static  VTBL_ENTRY vtc_S20483C2[] = {
  ABISELECT(168,88),
  ABISELECT(152,76),
  ABISELECT(96,44),
  0,
  (VTBL_ENTRY)&(_ZTI8S20483C2[0]),
  (VTBL_ENTRY)&_ZN8S20483C22v8Ev,
  0,
  ABISELECT(-96,-44),
  (VTBL_ENTRY)&(_ZTI8S20483C2[0]),
  (VTBL_ENTRY)&_ZN8S20483C32v4Ev,
  0,
  0,
  0,
  ABISELECT(-152,-76),
  (VTBL_ENTRY)&(_ZTI8S20483C2[0]),
  (VTBL_ENTRY)&_ZN8S20483C52v5Ev,
  (VTBL_ENTRY)&_ZN8S20483C52v6Ev,
  (VTBL_ENTRY)&_ZN8S20483C52v7Ev,
};
extern VTBL_ENTRY _ZTV8S20483C2[];
static  VTBL_ENTRY _tg__ZTV8S20483C6__8S20483C2[] = {
  ABISELECT(168,88),
  ABISELECT(152,76),
  ABISELECT(96,44),
  0,
  (VTBL_ENTRY)&(_ZTI8S20483C6[0]),
};
extern void _ZN8S20483C32v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20483C3__8S20483C6__8S20483C2[] = {
  0,
  ABISELECT(-96,-44),
  (VTBL_ENTRY)&(_ZTI8S20483C6[0]),
  (VTBL_ENTRY)&_ZN8S20483C32v4Ev,
};
extern void _ZN8S20483C52v5Ev();
extern void _ZN8S20483C52v6Ev();
extern void _ZN8S20483C52v7Ev();
static  VTBL_ENTRY _tg__ZTV8S20483C5__8S20483C6__8S20483C2[] = {
  0,
  0,
  0,
  ABISELECT(-152,-76),
  (VTBL_ENTRY)&(_ZTI8S20483C6[0]),
  (VTBL_ENTRY)&_ZN8S20483C52v5Ev,
  (VTBL_ENTRY)&_ZN8S20483C52v6Ev,
  (VTBL_ENTRY)&_ZN8S20483C52v7Ev,
};
static  VTT_ENTRY vtt_S20483C2[] = {
  {&(_ZTV8S20483C2[5]),  5,18},
  {&(_tg__ZTV8S20483C6__8S20483C2[5]),  5,5},
  {&(_tg__ZTV8S20483C3__8S20483C6__8S20483C2[3]),  3,4},
  {&(_tg__ZTV8S20483C5__8S20483C6__8S20483C2[5]),  5,8},
  {&(_ZTV8S20483C2[9]),  9,18},
  {&(_ZTV8S20483C2[15]),  15,18},
};
extern VTBL_ENTRY _ZTI8S20483C2[];
extern  VTBL_ENTRY _ZTV8S20483C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20483C2[];
Class_Descriptor cd_S20483C2 = {  "S20483C2", // class name
  bases_S20483C2, 6,
  &(vtc_S20483C2[0]), // expected_vtbl_contents
  &(vtt_S20483C2[0]), // expected_vtt_contents
  ABISELECT(176,92), // object size
  NSPAIRA(_ZTI8S20483C2),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S20483C2),18, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20483C2),6, //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  S20483C1  : virtual S20483C2 {
  short s20483c1f0;
  virtual void  v1(); // _ZN8S20483C12v1Ev
  virtual void  v2(); // _ZN8S20483C12v2Ev
  virtual void  v3(); // _ZN8S20483C12v3Ev
  ~S20483C1(); // tgen
  S20483C1(); // tgen
};
//SIG(1 S20483C1) C1{ VBC2{ VBC3{ BC4{ m Fp} v4 FD FC4 FC4 FC4} BC4 VBC5{ v5 v6 v7 FL} BC6{ VBC3 VBC5 VBC4 Fp} v8 FC3} v1 v2 v3 Fs}


void  S20483C1 ::v1(){vfunc_called(this, "_ZN8S20483C12v1Ev");}
void  S20483C1 ::v2(){vfunc_called(this, "_ZN8S20483C12v2Ev");}
void  S20483C1 ::v3(){vfunc_called(this, "_ZN8S20483C12v3Ev");}
S20483C1 ::~S20483C1(){ note_dtor("S20483C1", this);} // tgen
S20483C1 ::S20483C1(){ note_ctor("S20483C1", this);} // tgen

static void Test_S20483C1()
{
  extern Class_Descriptor cd_S20483C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(13,26)];
    init_test(&cd_S20483C1, buf);
    S20483C1 *dp, &lv = *(dp=new (buf) S20483C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(192,100), "sizeof(S20483C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20483C1)");
    check_base_class_offset(lv, (S3625C33_nt*)(S20483C3*), ABISELECT(120,56), "S20483C1");
    check_base_class_offset(lv, (S20483C3*)(S20483C2*), ABISELECT(112,52), "S20483C1");
    check_base_class_offset(lv, (S20483C3*)(S20483C6*)(S20483C2*), ABISELECT(112,52), "S20483C1");
    /*is_ambiguous_... S20483C2::S3625C33_nt */ AMB_check_base_class_offset(lv, (S3625C33_nt*)(S20483C2*), ABISELECT(32,16), "S20483C1");
    check_base_class_offset(lv, (S20483C5*)(S20483C2*), ABISELECT(168,84), "S20483C1");
    check_base_class_offset(lv, (S20483C5*)(S20483C6*)(S20483C2*), ABISELECT(168,84), "S20483C1");
    /*is_ambiguous_... S20483C6::S3625C33_nt */ AMB_check_base_class_offset(lv, (S3625C33_nt*)(S20483C6*)(S20483C2*), ABISELECT(184,96), "S20483C1");
    check_base_class_offset(lv, (S20483C6*)(S20483C2*), ABISELECT(16,8), "S20483C1");
    check_base_class_offset(lv, (S20483C2*), ABISELECT(16,8), "S20483C1");
    check_field_offset(lv, s20483c1f0, ABISELECT(8,4), "S20483C1.s20483c1f0");
    test_class_info(&lv, &cd_S20483C1);
    dp->~S20483C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20483C1(Test_S20483C1, "S20483C1", ABISELECT(192,100));

#else // __cplusplus

extern void _ZN8S20483C1C1Ev();
extern void _ZN8S20483C1D1Ev();
Name_Map name_map_S20483C1[] = {
  NSPAIR(_ZN8S20483C1C1Ev),
  NSPAIR(_ZN8S20483C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3625C33_nt;
extern VTBL_ENTRY _ZTI11S3625C33_nt[];
extern Class_Descriptor cd_S20483C3;
extern VTBL_ENTRY _ZTI8S20483C3[];
extern  VTBL_ENTRY _ZTV8S20483C3[];
extern Class_Descriptor cd_S3625C33_nt;
extern VTBL_ENTRY _ZTI11S3625C33_nt[];
extern Class_Descriptor cd_S20483C5;
extern VTBL_ENTRY _ZTI8S20483C5[];
extern  VTBL_ENTRY _ZTV8S20483C5[];
extern Class_Descriptor cd_S3625C33_nt;
extern VTBL_ENTRY _ZTI11S3625C33_nt[];
extern Class_Descriptor cd_S20483C6;
extern VTBL_ENTRY _ZTI8S20483C6[];
extern  VTBL_ENTRY _ZTV8S20483C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20483C6[];
extern Class_Descriptor cd_S20483C2;
extern VTBL_ENTRY _ZTI8S20483C2[];
extern  VTBL_ENTRY _ZTV8S20483C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20483C2[];
static Base_Class bases_S20483C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3625C33_nt,    ABISELECT(120,56), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S20483C3,    ABISELECT(112,52), //bcp->offset
    16, //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
    5, //immediately_derived
  0, 1},
  {&cd_S3625C33_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
    -1, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S20483C5,    ABISELECT(168,84), //bcp->offset
    20, //bcp->virtual_function_table_offset
    5, //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
    5, //immediately_derived
  0, 1},
  {&cd_S3625C33_nt,    ABISELECT(184,96), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20483C6,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S20483C2,    ABISELECT(16,8), //bcp->offset
    9, //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
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20483C1[];
extern void _ZN8S20483C12v1Ev();
extern void _ZN8S20483C12v2Ev();
extern void _ZN8S20483C12v3Ev();
extern void _ZN8S20483C22v8Ev();
extern void _ZN8S20483C32v4Ev();
extern void _ZN8S20483C52v5Ev();
extern void _ZN8S20483C52v6Ev();
extern void _ZN8S20483C52v7Ev();
static  VTBL_ENTRY vtc_S20483C1[] = {
  ABISELECT(184,96),
  ABISELECT(168,84),
  ABISELECT(112,52),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S20483C1[0]),
  (VTBL_ENTRY)&_ZN8S20483C12v1Ev,
  (VTBL_ENTRY)&_ZN8S20483C12v2Ev,
  (VTBL_ENTRY)&_ZN8S20483C12v3Ev,
  0,
  ABISELECT(168,88),
  ABISELECT(152,76),
  ABISELECT(96,44),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S20483C1[0]),
  (VTBL_ENTRY)&_ZN8S20483C22v8Ev,
  0,
  ABISELECT(-112,-52),
  (VTBL_ENTRY)&(_ZTI8S20483C1[0]),
  (VTBL_ENTRY)&_ZN8S20483C32v4Ev,
  0,
  0,
  0,
  ABISELECT(-168,-84),
  (VTBL_ENTRY)&(_ZTI8S20483C1[0]),
  (VTBL_ENTRY)&_ZN8S20483C52v5Ev,
  (VTBL_ENTRY)&_ZN8S20483C52v6Ev,
  (VTBL_ENTRY)&_ZN8S20483C52v7Ev,
};
extern VTBL_ENTRY _ZTV8S20483C1[];
extern void _ZN8S20483C22v8Ev();
static  VTBL_ENTRY _tg__ZTV8S20483C2__8S20483C1[] = {
  ABISELECT(168,88),
  ABISELECT(152,76),
  ABISELECT(96,44),
  0,
  (VTBL_ENTRY)&(_ZTI8S20483C2[0]),
  (VTBL_ENTRY)&_ZN8S20483C22v8Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20483C68S20483C2__8S20483C1[] = {
  ABISELECT(168,88),
  ABISELECT(152,76),
  ABISELECT(96,44),
  0,
  (VTBL_ENTRY)&(_ZTI8S20483C6[0]),
};
extern void _ZN8S20483C32v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20483C3__8S20483C68S20483C2__8S20483C1[] = {
  0,
  ABISELECT(-96,-44),
  (VTBL_ENTRY)&(_ZTI8S20483C6[0]),
  (VTBL_ENTRY)&_ZN8S20483C32v4Ev,
};
extern void _ZN8S20483C52v5Ev();
extern void _ZN8S20483C52v6Ev();
extern void _ZN8S20483C52v7Ev();
static  VTBL_ENTRY _tg__ZTV8S20483C5__8S20483C68S20483C2__8S20483C1[] = {
  0,
  0,
  0,
  ABISELECT(-152,-76),
  (VTBL_ENTRY)&(_ZTI8S20483C6[0]),
  (VTBL_ENTRY)&_ZN8S20483C52v5Ev,
  (VTBL_ENTRY)&_ZN8S20483C52v6Ev,
  (VTBL_ENTRY)&_ZN8S20483C52v7Ev,
};
extern void _ZN8S20483C32v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20483C3__8S20483C2__8S20483C1[] = {
  0,
  ABISELECT(-96,-44),
  (VTBL_ENTRY)&(_ZTI8S20483C2[0]),
  (VTBL_ENTRY)&_ZN8S20483C32v4Ev,
};
extern void _ZN8S20483C52v5Ev();
extern void _ZN8S20483C52v6Ev();
extern void _ZN8S20483C52v7Ev();
static  VTBL_ENTRY _tg__ZTV8S20483C5__8S20483C2__8S20483C1[] = {
  0,
  0,
  0,
  ABISELECT(-152,-76),
  (VTBL_ENTRY)&(_ZTI8S20483C2[0]),
  (VTBL_ENTRY)&_ZN8S20483C52v5Ev,
  (VTBL_ENTRY)&_ZN8S20483C52v6Ev,
  (VTBL_ENTRY)&_ZN8S20483C52v7Ev,
};
static  VTT_ENTRY vtt_S20483C1[] = {
  {&(_ZTV8S20483C1[6]),  6,28},
  {&(_ZTV8S20483C1[15]),  15,28},
  {&(_ZTV8S20483C1[19]),  19,28},
  {&(_ZTV8S20483C1[25]),  25,28},
  {&(_tg__ZTV8S20483C2__8S20483C1[5]),  5,6},
  {&(_tg__ZTV8S20483C68S20483C2__8S20483C1[5]),  5,5},
  {&(_tg__ZTV8S20483C3__8S20483C68S20483C2__8S20483C1[3]),  3,4},
  {&(_tg__ZTV8S20483C5__8S20483C68S20483C2__8S20483C1[5]),  5,8},
  {&(_tg__ZTV8S20483C3__8S20483C2__8S20483C1[3]),  3,4},
  {&(_tg__ZTV8S20483C5__8S20483C2__8S20483C1[5]),  5,8},
};
extern VTBL_ENTRY _ZTI8S20483C1[];
extern  VTBL_ENTRY _ZTV8S20483C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20483C1[];
Class_Descriptor cd_S20483C1 = {  "S20483C1", // class name
  bases_S20483C1, 7,
  &(vtc_S20483C1[0]), // expected_vtbl_contents
  &(vtt_S20483C1[0]), // expected_vtt_contents
  ABISELECT(192,100), // object size
  NSPAIRA(_ZTI8S20483C1),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S20483C1),28, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20483C1),10, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2301C4  {
  char s2301c4f0;
  int s2301c4f1;
  virtual  ~S2301C4(); // _ZN7S2301C4D1Ev
  virtual void  v5(); // _ZN7S2301C42v5Ev
  S2301C4(); // tgen
};
//SIG(-1 S2301C4) C1{ vd v1 Fc Fi}


 S2301C4 ::~S2301C4(){ note_dtor("S2301C4", this);}
void  S2301C4 ::v5(){vfunc_called(this, "_ZN7S2301C42v5Ev");}
S2301C4 ::S2301C4(){ note_ctor("S2301C4", this);} // tgen

static void Test_S2301C4()
{
  extern Class_Descriptor cd_S2301C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S2301C4, buf);
    S2301C4 *dp, &lv = *(dp=new (buf) S2301C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S2301C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2301C4)");
    check_field_offset(lv, s2301c4f0, ABISELECT(8,4), "S2301C4.s2301c4f0");
    check_field_offset(lv, s2301c4f1, ABISELECT(12,8), "S2301C4.s2301c4f1");
    test_class_info(&lv, &cd_S2301C4);
    dp->~S2301C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2301C4(Test_S2301C4, "S2301C4", ABISELECT(16,12));

#else // __cplusplus

extern void _ZN7S2301C4C1Ev();
extern void _ZN7S2301C4D1Ev();
Name_Map name_map_S2301C4[] = {
  NSPAIR(_ZN7S2301C4C1Ev),
  NSPAIR(_ZN7S2301C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S2301C4[];
extern void _ZN7S2301C4D1Ev();
extern void _ZN7S2301C4D0Ev();
extern void _ZN7S2301C42v5Ev();
static  VTBL_ENTRY vtc_S2301C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2301C4[0]),
  (VTBL_ENTRY)&_ZN7S2301C4D1Ev,
  (VTBL_ENTRY)&_ZN7S2301C4D0Ev,
  (VTBL_ENTRY)&_ZN7S2301C42v5Ev,
};
extern VTBL_ENTRY _ZTI7S2301C4[];
extern  VTBL_ENTRY _ZTV7S2301C4[];
Class_Descriptor cd_S2301C4 = {  "S2301C4", // class name
  0,0,//no base classes
  &(vtc_S2301C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI7S2301C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S2301C4),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  S2301C3  : S2301C4 {
  void *s2301c3f0;
  char s2301c3f1[2];
  virtual  ~S2301C3(); // _ZN7S2301C3D1Ev
  virtual void  v6(); // _ZN7S2301C32v6Ev
  S2301C3(); // tgen
};
//SIG(-1 S2301C3) C1{ BC2{ vd v2 Fc Fi} vd v1 Fp Fc[2]}


 S2301C3 ::~S2301C3(){ note_dtor("S2301C3", this);}
void  S2301C3 ::v6(){vfunc_called(this, "_ZN7S2301C32v6Ev");}
S2301C3 ::S2301C3(){ note_ctor("S2301C3", this);} // tgen

static void Test_S2301C3()
{
  extern Class_Descriptor cd_S2301C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,6)];
    init_test(&cd_S2301C3, buf);
    S2301C3 *dp, &lv = *(dp=new (buf) S2301C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S2301C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2301C3)");
    check_base_class_offset(lv, (S2301C4*), 0, "S2301C3");
    check_field_offset(lv, s2301c3f0, ABISELECT(16,12), "S2301C3.s2301c3f0");
    check_field_offset(lv, s2301c3f1, ABISELECT(24,16), "S2301C3.s2301c3f1");
    test_class_info(&lv, &cd_S2301C3);
    dp->~S2301C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2301C3(Test_S2301C3, "S2301C3", ABISELECT(32,20));

#else // __cplusplus

extern void _ZN7S2301C3C1Ev();
extern void _ZN7S2301C3D1Ev();
Name_Map name_map_S2301C3[] = {
  NSPAIR(_ZN7S2301C3C1Ev),
  NSPAIR(_ZN7S2301C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2301C4;
extern VTBL_ENTRY _ZTI7S2301C4[];
extern  VTBL_ENTRY _ZTV7S2301C4[];
static Base_Class bases_S2301C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2301C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI7S2301C3[];
extern void _ZN7S2301C3D1Ev();
extern void _ZN7S2301C3D0Ev();
extern void _ZN7S2301C42v5Ev();
extern void _ZN7S2301C32v6Ev();
static  VTBL_ENTRY vtc_S2301C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2301C3[0]),
  (VTBL_ENTRY)&_ZN7S2301C3D1Ev,
  (VTBL_ENTRY)&_ZN7S2301C3D0Ev,
  (VTBL_ENTRY)&_ZN7S2301C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2301C32v6Ev,
};
extern VTBL_ENTRY _ZTI7S2301C3[];
extern  VTBL_ENTRY _ZTV7S2301C3[];
Class_Descriptor cd_S2301C3 = {  "S2301C3", // class name
  bases_S2301C3, 1,
  &(vtc_S2301C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,20), // object size
  NSPAIRA(_ZTI7S2301C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2301C3),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  S2301C2  : S2301C3 {
  void *s2301c2f0[2];
  int s2301c2f1[3];
  char s2301c2f2[2];
  void *s2301c2f3;
  virtual  ~S2301C2(); // _ZN7S2301C2D1Ev
  virtual void  v7(); // _ZN7S2301C22v7Ev
  virtual void  v8(); // _ZN7S2301C22v8Ev
  virtual void  v9(); // _ZN7S2301C22v9Ev
  virtual void  v10(); // _ZN7S2301C23v10Ev
  S2301C2(); // tgen
};
//SIG(-1 S2301C2) C1{ BC2{ BC3{ vd v5 Fc Fi} vd v6 Fp Fc[2]} vd v1 v2 v3 v4 Fp[2] Fi[3] Fc[2] Fp}


 S2301C2 ::~S2301C2(){ note_dtor("S2301C2", this);}
void  S2301C2 ::v7(){vfunc_called(this, "_ZN7S2301C22v7Ev");}
void  S2301C2 ::v8(){vfunc_called(this, "_ZN7S2301C22v8Ev");}
void  S2301C2 ::v9(){vfunc_called(this, "_ZN7S2301C22v9Ev");}
void  S2301C2 ::v10(){vfunc_called(this, "_ZN7S2301C23v10Ev");}
S2301C2 ::S2301C2(){ note_ctor("S2301C2", this);} // tgen

static void Test_S2301C2()
{
  extern Class_Descriptor cd_S2301C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,13)];
    init_test(&cd_S2301C2, buf);
    S2301C2 *dp, &lv = *(dp=new (buf) S2301C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,48), "sizeof(S2301C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2301C2)");
    check_base_class_offset(lv, (S2301C4*)(S2301C3*), 0, "S2301C2");
    check_base_class_offset(lv, (S2301C3*), 0, "S2301C2");
    check_field_offset(lv, s2301c2f0, ABISELECT(32,20), "S2301C2.s2301c2f0");
    check_field_offset(lv, s2301c2f1, ABISELECT(48,28), "S2301C2.s2301c2f1");
    check_field_offset(lv, s2301c2f2, ABISELECT(60,40), "S2301C2.s2301c2f2");
    check_field_offset(lv, s2301c2f3, ABISELECT(64,44), "S2301C2.s2301c2f3");
    test_class_info(&lv, &cd_S2301C2);
    dp->~S2301C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2301C2(Test_S2301C2, "S2301C2", ABISELECT(72,48));

#else // __cplusplus

extern void _ZN7S2301C2C1Ev();
extern void _ZN7S2301C2D1Ev();
Name_Map name_map_S2301C2[] = {
  NSPAIR(_ZN7S2301C2C1Ev),
  NSPAIR(_ZN7S2301C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2301C4;
extern VTBL_ENTRY _ZTI7S2301C4[];
extern  VTBL_ENTRY _ZTV7S2301C4[];
extern Class_Descriptor cd_S2301C3;
extern VTBL_ENTRY _ZTI7S2301C3[];
extern  VTBL_ENTRY _ZTV7S2301C3[];
static Base_Class bases_S2301C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2301C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S2301C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S2301C2[];
extern void _ZN7S2301C2D1Ev();
extern void _ZN7S2301C2D0Ev();
extern void _ZN7S2301C42v5Ev();
extern void _ZN7S2301C32v6Ev();
extern void _ZN7S2301C22v7Ev();
extern void _ZN7S2301C22v8Ev();
extern void _ZN7S2301C22v9Ev();
extern void _ZN7S2301C23v10Ev();
static  VTBL_ENTRY vtc_S2301C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2301C2[0]),
  (VTBL_ENTRY)&_ZN7S2301C2D1Ev,
  (VTBL_ENTRY)&_ZN7S2301C2D0Ev,
  (VTBL_ENTRY)&_ZN7S2301C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2301C32v6Ev,
  (VTBL_ENTRY)&_ZN7S2301C22v7Ev,
  (VTBL_ENTRY)&_ZN7S2301C22v8Ev,
  (VTBL_ENTRY)&_ZN7S2301C22v9Ev,
  (VTBL_ENTRY)&_ZN7S2301C23v10Ev,
};
extern VTBL_ENTRY _ZTI7S2301C2[];
extern  VTBL_ENTRY _ZTV7S2301C2[];
Class_Descriptor cd_S2301C2 = {  "S2301C2", // class name
  bases_S2301C2, 2,
  &(vtc_S2301C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,48), // object size
  NSPAIRA(_ZTI7S2301C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2301C2),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  S2301C1  : S2301C2 {
  int s2301c1f0[2];
  virtual  ~S2301C1(); // _ZN7S2301C1D1Ev
  virtual void  v1(); // _ZN7S2301C12v1Ev
  virtual void  v2(); // _ZN7S2301C12v2Ev
  virtual void  v3(); // _ZN7S2301C12v3Ev
  virtual void  v4(); // _ZN7S2301C12v4Ev
  S2301C1(); // tgen
};
//SIG(1 S2301C1) C1{ BC2{ BC3{ BC4{ vd v5 Fc Fi} vd v6 Fp Fc[2]} vd v7 v8 v9 v10 Fp[2] Fi[3] Fc[2] Fp} vd v1 v2 v3 v4 Fi[2]}


 S2301C1 ::~S2301C1(){ note_dtor("S2301C1", this);}
void  S2301C1 ::v1(){vfunc_called(this, "_ZN7S2301C12v1Ev");}
void  S2301C1 ::v2(){vfunc_called(this, "_ZN7S2301C12v2Ev");}
void  S2301C1 ::v3(){vfunc_called(this, "_ZN7S2301C12v3Ev");}
void  S2301C1 ::v4(){vfunc_called(this, "_ZN7S2301C12v4Ev");}
S2301C1 ::S2301C1(){ note_ctor("S2301C1", this);} // tgen

static void Test_S2301C1()
{
  extern Class_Descriptor cd_S2301C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(11,15)];
    init_test(&cd_S2301C1, buf);
    S2301C1 *dp, &lv = *(dp=new (buf) S2301C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,56), "sizeof(S2301C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2301C1)");
    check_base_class_offset(lv, (S2301C4*)(S2301C3*)(S2301C2*), 0, "S2301C1");
    check_base_class_offset(lv, (S2301C3*)(S2301C2*), 0, "S2301C1");
    check_base_class_offset(lv, (S2301C2*), 0, "S2301C1");
    check_field_offset(lv, s2301c1f0, ABISELECT(72,48), "S2301C1.s2301c1f0");
    test_class_info(&lv, &cd_S2301C1);
    dp->~S2301C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2301C1(Test_S2301C1, "S2301C1", ABISELECT(80,56));

#else // __cplusplus

extern void _ZN7S2301C1C1Ev();
extern void _ZN7S2301C1D1Ev();
Name_Map name_map_S2301C1[] = {
  NSPAIR(_ZN7S2301C1C1Ev),
  NSPAIR(_ZN7S2301C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2301C4;
extern VTBL_ENTRY _ZTI7S2301C4[];
extern  VTBL_ENTRY _ZTV7S2301C4[];
extern Class_Descriptor cd_S2301C3;
extern VTBL_ENTRY _ZTI7S2301C3[];
extern  VTBL_ENTRY _ZTV7S2301C3[];
extern Class_Descriptor cd_S2301C2;
extern VTBL_ENTRY _ZTI7S2301C2[];
extern  VTBL_ENTRY _ZTV7S2301C2[];
static Base_Class bases_S2301C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2301C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S2301C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S2301C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S2301C1[];
extern void _ZN7S2301C1D1Ev();
extern void _ZN7S2301C1D0Ev();
extern void _ZN7S2301C42v5Ev();
extern void _ZN7S2301C32v6Ev();
extern void _ZN7S2301C22v7Ev();
extern void _ZN7S2301C22v8Ev();
extern void _ZN7S2301C22v9Ev();
extern void _ZN7S2301C23v10Ev();
extern void _ZN7S2301C12v1Ev();
extern void _ZN7S2301C12v2Ev();
extern void _ZN7S2301C12v3Ev();
extern void _ZN7S2301C12v4Ev();
static  VTBL_ENTRY vtc_S2301C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2301C1[0]),
  (VTBL_ENTRY)&_ZN7S2301C1D1Ev,
  (VTBL_ENTRY)&_ZN7S2301C1D0Ev,
  (VTBL_ENTRY)&_ZN7S2301C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2301C32v6Ev,
  (VTBL_ENTRY)&_ZN7S2301C22v7Ev,
  (VTBL_ENTRY)&_ZN7S2301C22v8Ev,
  (VTBL_ENTRY)&_ZN7S2301C22v9Ev,
  (VTBL_ENTRY)&_ZN7S2301C23v10Ev,
  (VTBL_ENTRY)&_ZN7S2301C12v1Ev,
  (VTBL_ENTRY)&_ZN7S2301C12v2Ev,
  (VTBL_ENTRY)&_ZN7S2301C12v3Ev,
  (VTBL_ENTRY)&_ZN7S2301C12v4Ev,
};
extern VTBL_ENTRY _ZTI7S2301C1[];
extern  VTBL_ENTRY _ZTV7S2301C1[];
Class_Descriptor cd_S2301C1 = {  "S2301C1", // class name
  bases_S2301C1, 3,
  &(vtc_S2301C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(80,56), // object size
  NSPAIRA(_ZTI7S2301C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2301C1),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  S2322C4  {
  char s2322c4f0;
  int s2322c4f1;
  virtual  ~S2322C4(); // _ZN7S2322C4D1Ev
  virtual void  v5(); // _ZN7S2322C42v5Ev
  S2322C4(); // tgen
};
//SIG(-1 S2322C4) C1{ vd v1 Fc Fi}


 S2322C4 ::~S2322C4(){ note_dtor("S2322C4", this);}
void  S2322C4 ::v5(){vfunc_called(this, "_ZN7S2322C42v5Ev");}
S2322C4 ::S2322C4(){ note_ctor("S2322C4", this);} // tgen

static void Test_S2322C4()
{
  extern Class_Descriptor cd_S2322C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S2322C4, buf);
    S2322C4 *dp, &lv = *(dp=new (buf) S2322C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S2322C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2322C4)");
    check_field_offset(lv, s2322c4f0, ABISELECT(8,4), "S2322C4.s2322c4f0");
    check_field_offset(lv, s2322c4f1, ABISELECT(12,8), "S2322C4.s2322c4f1");
    test_class_info(&lv, &cd_S2322C4);
    dp->~S2322C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2322C4(Test_S2322C4, "S2322C4", ABISELECT(16,12));

#else // __cplusplus

extern void _ZN7S2322C4C1Ev();
extern void _ZN7S2322C4D1Ev();
Name_Map name_map_S2322C4[] = {
  NSPAIR(_ZN7S2322C4C1Ev),
  NSPAIR(_ZN7S2322C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S2322C4[];
extern void _ZN7S2322C4D1Ev();
extern void _ZN7S2322C4D0Ev();
extern void _ZN7S2322C42v5Ev();
static  VTBL_ENTRY vtc_S2322C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2322C4[0]),
  (VTBL_ENTRY)&_ZN7S2322C4D1Ev,
  (VTBL_ENTRY)&_ZN7S2322C4D0Ev,
  (VTBL_ENTRY)&_ZN7S2322C42v5Ev,
};
extern VTBL_ENTRY _ZTI7S2322C4[];
extern  VTBL_ENTRY _ZTV7S2322C4[];
Class_Descriptor cd_S2322C4 = {  "S2322C4", // class name
  0,0,//no base classes
  &(vtc_S2322C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI7S2322C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S2322C4),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  S2322C3  : S2322C4 {
  void *s2322c3f0;
  char s2322c3f1[2];
  virtual  ~S2322C3(); // _ZN7S2322C3D1Ev
  virtual void  v6(); // _ZN7S2322C32v6Ev
  S2322C3(); // tgen
};
//SIG(-1 S2322C3) C1{ BC2{ vd v2 Fc Fi} vd v1 Fp Fc[2]}


 S2322C3 ::~S2322C3(){ note_dtor("S2322C3", this);}
void  S2322C3 ::v6(){vfunc_called(this, "_ZN7S2322C32v6Ev");}
S2322C3 ::S2322C3(){ note_ctor("S2322C3", this);} // tgen

static void Test_S2322C3()
{
  extern Class_Descriptor cd_S2322C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,6)];
    init_test(&cd_S2322C3, buf);
    S2322C3 *dp, &lv = *(dp=new (buf) S2322C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S2322C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2322C3)");
    check_base_class_offset(lv, (S2322C4*), 0, "S2322C3");
    check_field_offset(lv, s2322c3f0, ABISELECT(16,12), "S2322C3.s2322c3f0");
    check_field_offset(lv, s2322c3f1, ABISELECT(24,16), "S2322C3.s2322c3f1");
    test_class_info(&lv, &cd_S2322C3);
    dp->~S2322C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2322C3(Test_S2322C3, "S2322C3", ABISELECT(32,20));

#else // __cplusplus

extern void _ZN7S2322C3C1Ev();
extern void _ZN7S2322C3D1Ev();
Name_Map name_map_S2322C3[] = {
  NSPAIR(_ZN7S2322C3C1Ev),
  NSPAIR(_ZN7S2322C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2322C4;
extern VTBL_ENTRY _ZTI7S2322C4[];
extern  VTBL_ENTRY _ZTV7S2322C4[];
static Base_Class bases_S2322C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2322C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI7S2322C3[];
extern void _ZN7S2322C3D1Ev();
extern void _ZN7S2322C3D0Ev();
extern void _ZN7S2322C42v5Ev();
extern void _ZN7S2322C32v6Ev();
static  VTBL_ENTRY vtc_S2322C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2322C3[0]),
  (VTBL_ENTRY)&_ZN7S2322C3D1Ev,
  (VTBL_ENTRY)&_ZN7S2322C3D0Ev,
  (VTBL_ENTRY)&_ZN7S2322C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2322C32v6Ev,
};
extern VTBL_ENTRY _ZTI7S2322C3[];
extern  VTBL_ENTRY _ZTV7S2322C3[];
Class_Descriptor cd_S2322C3 = {  "S2322C3", // class name
  bases_S2322C3, 1,
  &(vtc_S2322C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,20), // object size
  NSPAIRA(_ZTI7S2322C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2322C3),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  S2322C2  : S2322C3 {
  void *s2322c2f0[2];
  int s2322c2f1[3];
  char s2322c2f2[2];
  void *s2322c2f3;
  virtual  ~S2322C2(); // _ZN7S2322C2D1Ev
  virtual void  v7(); // _ZN7S2322C22v7Ev
  virtual void  v8(); // _ZN7S2322C22v8Ev
  virtual void  v9(); // _ZN7S2322C22v9Ev
  virtual void  v10(); // _ZN7S2322C23v10Ev
  S2322C2(); // tgen
};
//SIG(-1 S2322C2) C1{ BC2{ BC3{ vd v5 Fc Fi} vd v6 Fp Fc[2]} vd v1 v2 v3 v4 Fp[2] Fi[3] Fc[2] Fp}


 S2322C2 ::~S2322C2(){ note_dtor("S2322C2", this);}
void  S2322C2 ::v7(){vfunc_called(this, "_ZN7S2322C22v7Ev");}
void  S2322C2 ::v8(){vfunc_called(this, "_ZN7S2322C22v8Ev");}
void  S2322C2 ::v9(){vfunc_called(this, "_ZN7S2322C22v9Ev");}
void  S2322C2 ::v10(){vfunc_called(this, "_ZN7S2322C23v10Ev");}
S2322C2 ::S2322C2(){ note_ctor("S2322C2", this);} // tgen

static void Test_S2322C2()
{
  extern Class_Descriptor cd_S2322C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,13)];
    init_test(&cd_S2322C2, buf);
    S2322C2 *dp, &lv = *(dp=new (buf) S2322C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,48), "sizeof(S2322C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2322C2)");
    check_base_class_offset(lv, (S2322C4*)(S2322C3*), 0, "S2322C2");
    check_base_class_offset(lv, (S2322C3*), 0, "S2322C2");
    check_field_offset(lv, s2322c2f0, ABISELECT(32,20), "S2322C2.s2322c2f0");
    check_field_offset(lv, s2322c2f1, ABISELECT(48,28), "S2322C2.s2322c2f1");
    check_field_offset(lv, s2322c2f2, ABISELECT(60,40), "S2322C2.s2322c2f2");
    check_field_offset(lv, s2322c2f3, ABISELECT(64,44), "S2322C2.s2322c2f3");
    test_class_info(&lv, &cd_S2322C2);
    dp->~S2322C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2322C2(Test_S2322C2, "S2322C2", ABISELECT(72,48));

#else // __cplusplus

extern void _ZN7S2322C2C1Ev();
extern void _ZN7S2322C2D1Ev();
Name_Map name_map_S2322C2[] = {
  NSPAIR(_ZN7S2322C2C1Ev),
  NSPAIR(_ZN7S2322C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2322C4;
extern VTBL_ENTRY _ZTI7S2322C4[];
extern  VTBL_ENTRY _ZTV7S2322C4[];
extern Class_Descriptor cd_S2322C3;
extern VTBL_ENTRY _ZTI7S2322C3[];
extern  VTBL_ENTRY _ZTV7S2322C3[];
static Base_Class bases_S2322C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2322C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S2322C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S2322C2[];
extern void _ZN7S2322C2D1Ev();
extern void _ZN7S2322C2D0Ev();
extern void _ZN7S2322C42v5Ev();
extern void _ZN7S2322C32v6Ev();
extern void _ZN7S2322C22v7Ev();
extern void _ZN7S2322C22v8Ev();
extern void _ZN7S2322C22v9Ev();
extern void _ZN7S2322C23v10Ev();
static  VTBL_ENTRY vtc_S2322C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2322C2[0]),
  (VTBL_ENTRY)&_ZN7S2322C2D1Ev,
  (VTBL_ENTRY)&_ZN7S2322C2D0Ev,
  (VTBL_ENTRY)&_ZN7S2322C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2322C32v6Ev,
  (VTBL_ENTRY)&_ZN7S2322C22v7Ev,
  (VTBL_ENTRY)&_ZN7S2322C22v8Ev,
  (VTBL_ENTRY)&_ZN7S2322C22v9Ev,
  (VTBL_ENTRY)&_ZN7S2322C23v10Ev,
};
extern VTBL_ENTRY _ZTI7S2322C2[];
extern  VTBL_ENTRY _ZTV7S2322C2[];
Class_Descriptor cd_S2322C2 = {  "S2322C2", // class name
  bases_S2322C2, 2,
  &(vtc_S2322C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,48), // object size
  NSPAIRA(_ZTI7S2322C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2322C2),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  S2322C1  : S2322C2 {
  void *s2322c1f0;
  virtual  ~S2322C1(); // _ZN7S2322C1D1Ev
  virtual void  v1(); // _ZN7S2322C12v1Ev
  virtual void  v2(); // _ZN7S2322C12v2Ev
  virtual void  v3(); // _ZN7S2322C12v3Ev
  virtual void  v4(); // _ZN7S2322C12v4Ev
  S2322C1(); // tgen
};
//SIG(1 S2322C1) C1{ BC2{ BC3{ BC4{ vd v5 Fc Fi} vd v6 Fp Fc[2]} vd v7 v8 v9 v10 Fp[2] Fi[3] Fc[2] Fp} vd v1 v2 v3 v4 Fp}


 S2322C1 ::~S2322C1(){ note_dtor("S2322C1", this);}
void  S2322C1 ::v1(){vfunc_called(this, "_ZN7S2322C12v1Ev");}
void  S2322C1 ::v2(){vfunc_called(this, "_ZN7S2322C12v2Ev");}
void  S2322C1 ::v3(){vfunc_called(this, "_ZN7S2322C12v3Ev");}
void  S2322C1 ::v4(){vfunc_called(this, "_ZN7S2322C12v4Ev");}
S2322C1 ::S2322C1(){ note_ctor("S2322C1", this);} // tgen

static void Test_S2322C1()
{
  extern Class_Descriptor cd_S2322C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(11,14)];
    init_test(&cd_S2322C1, buf);
    S2322C1 *dp, &lv = *(dp=new (buf) S2322C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,52), "sizeof(S2322C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2322C1)");
    check_base_class_offset(lv, (S2322C4*)(S2322C3*)(S2322C2*), 0, "S2322C1");
    check_base_class_offset(lv, (S2322C3*)(S2322C2*), 0, "S2322C1");
    check_base_class_offset(lv, (S2322C2*), 0, "S2322C1");
    check_field_offset(lv, s2322c1f0, ABISELECT(72,48), "S2322C1.s2322c1f0");
    test_class_info(&lv, &cd_S2322C1);
    dp->~S2322C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2322C1(Test_S2322C1, "S2322C1", ABISELECT(80,52));

#else // __cplusplus

extern void _ZN7S2322C1C1Ev();
extern void _ZN7S2322C1D1Ev();
Name_Map name_map_S2322C1[] = {
  NSPAIR(_ZN7S2322C1C1Ev),
  NSPAIR(_ZN7S2322C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2322C4;
extern VTBL_ENTRY _ZTI7S2322C4[];
extern  VTBL_ENTRY _ZTV7S2322C4[];
extern Class_Descriptor cd_S2322C3;
extern VTBL_ENTRY _ZTI7S2322C3[];
extern  VTBL_ENTRY _ZTV7S2322C3[];
extern Class_Descriptor cd_S2322C2;
extern VTBL_ENTRY _ZTI7S2322C2[];
extern  VTBL_ENTRY _ZTV7S2322C2[];
static Base_Class bases_S2322C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2322C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S2322C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S2322C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S2322C1[];
extern void _ZN7S2322C1D1Ev();
extern void _ZN7S2322C1D0Ev();
extern void _ZN7S2322C42v5Ev();
extern void _ZN7S2322C32v6Ev();
extern void _ZN7S2322C22v7Ev();
extern void _ZN7S2322C22v8Ev();
extern void _ZN7S2322C22v9Ev();
extern void _ZN7S2322C23v10Ev();
extern void _ZN7S2322C12v1Ev();
extern void _ZN7S2322C12v2Ev();
extern void _ZN7S2322C12v3Ev();
extern void _ZN7S2322C12v4Ev();
static  VTBL_ENTRY vtc_S2322C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2322C1[0]),
  (VTBL_ENTRY)&_ZN7S2322C1D1Ev,
  (VTBL_ENTRY)&_ZN7S2322C1D0Ev,
  (VTBL_ENTRY)&_ZN7S2322C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2322C32v6Ev,
  (VTBL_ENTRY)&_ZN7S2322C22v7Ev,
  (VTBL_ENTRY)&_ZN7S2322C22v8Ev,
  (VTBL_ENTRY)&_ZN7S2322C22v9Ev,
  (VTBL_ENTRY)&_ZN7S2322C23v10Ev,
  (VTBL_ENTRY)&_ZN7S2322C12v1Ev,
  (VTBL_ENTRY)&_ZN7S2322C12v2Ev,
  (VTBL_ENTRY)&_ZN7S2322C12v3Ev,
  (VTBL_ENTRY)&_ZN7S2322C12v4Ev,
};
extern VTBL_ENTRY _ZTI7S2322C1[];
extern  VTBL_ENTRY _ZTV7S2322C1[];
Class_Descriptor cd_S2322C1 = {  "S2322C1", // class name
  bases_S2322C1, 3,
  &(vtc_S2322C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(80,52), // object size
  NSPAIRA(_ZTI7S2322C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2322C1),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  S2315C4  {
  char s2315c4f0;
  int s2315c4f1;
  virtual  ~S2315C4(); // _ZN7S2315C4D1Ev
  virtual void  v5(); // _ZN7S2315C42v5Ev
  S2315C4(); // tgen
};
//SIG(-1 S2315C4) C1{ vd v1 Fc Fi}


 S2315C4 ::~S2315C4(){ note_dtor("S2315C4", this);}
void  S2315C4 ::v5(){vfunc_called(this, "_ZN7S2315C42v5Ev");}
S2315C4 ::S2315C4(){ note_ctor("S2315C4", this);} // tgen

static void Test_S2315C4()
{
  extern Class_Descriptor cd_S2315C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S2315C4, buf);
    S2315C4 *dp, &lv = *(dp=new (buf) S2315C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S2315C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2315C4)");
    check_field_offset(lv, s2315c4f0, ABISELECT(8,4), "S2315C4.s2315c4f0");
    check_field_offset(lv, s2315c4f1, ABISELECT(12,8), "S2315C4.s2315c4f1");
    test_class_info(&lv, &cd_S2315C4);
    dp->~S2315C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2315C4(Test_S2315C4, "S2315C4", ABISELECT(16,12));

#else // __cplusplus

extern void _ZN7S2315C4C1Ev();
extern void _ZN7S2315C4D1Ev();
Name_Map name_map_S2315C4[] = {
  NSPAIR(_ZN7S2315C4C1Ev),
  NSPAIR(_ZN7S2315C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S2315C4[];
extern void _ZN7S2315C4D1Ev();
extern void _ZN7S2315C4D0Ev();
extern void _ZN7S2315C42v5Ev();
static  VTBL_ENTRY vtc_S2315C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2315C4[0]),
  (VTBL_ENTRY)&_ZN7S2315C4D1Ev,
  (VTBL_ENTRY)&_ZN7S2315C4D0Ev,
  (VTBL_ENTRY)&_ZN7S2315C42v5Ev,
};
extern VTBL_ENTRY _ZTI7S2315C4[];
extern  VTBL_ENTRY _ZTV7S2315C4[];
Class_Descriptor cd_S2315C4 = {  "S2315C4", // class name
  0,0,//no base classes
  &(vtc_S2315C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI7S2315C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S2315C4),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  S2315C3  : S2315C4 {
  void *s2315c3f0;
  char s2315c3f1[2];
  virtual  ~S2315C3(); // _ZN7S2315C3D1Ev
  virtual void  v6(); // _ZN7S2315C32v6Ev
  S2315C3(); // tgen
};
//SIG(-1 S2315C3) C1{ BC2{ vd v2 Fc Fi} vd v1 Fp Fc[2]}


 S2315C3 ::~S2315C3(){ note_dtor("S2315C3", this);}
void  S2315C3 ::v6(){vfunc_called(this, "_ZN7S2315C32v6Ev");}
S2315C3 ::S2315C3(){ note_ctor("S2315C3", this);} // tgen

static void Test_S2315C3()
{
  extern Class_Descriptor cd_S2315C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,6)];
    init_test(&cd_S2315C3, buf);
    S2315C3 *dp, &lv = *(dp=new (buf) S2315C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S2315C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2315C3)");
    check_base_class_offset(lv, (S2315C4*), 0, "S2315C3");
    check_field_offset(lv, s2315c3f0, ABISELECT(16,12), "S2315C3.s2315c3f0");
    check_field_offset(lv, s2315c3f1, ABISELECT(24,16), "S2315C3.s2315c3f1");
    test_class_info(&lv, &cd_S2315C3);
    dp->~S2315C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2315C3(Test_S2315C3, "S2315C3", ABISELECT(32,20));

#else // __cplusplus

extern void _ZN7S2315C3C1Ev();
extern void _ZN7S2315C3D1Ev();
Name_Map name_map_S2315C3[] = {
  NSPAIR(_ZN7S2315C3C1Ev),
  NSPAIR(_ZN7S2315C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2315C4;
extern VTBL_ENTRY _ZTI7S2315C4[];
extern  VTBL_ENTRY _ZTV7S2315C4[];
static Base_Class bases_S2315C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2315C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI7S2315C3[];
extern void _ZN7S2315C3D1Ev();
extern void _ZN7S2315C3D0Ev();
extern void _ZN7S2315C42v5Ev();
extern void _ZN7S2315C32v6Ev();
static  VTBL_ENTRY vtc_S2315C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2315C3[0]),
  (VTBL_ENTRY)&_ZN7S2315C3D1Ev,
  (VTBL_ENTRY)&_ZN7S2315C3D0Ev,
  (VTBL_ENTRY)&_ZN7S2315C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2315C32v6Ev,
};
extern VTBL_ENTRY _ZTI7S2315C3[];
extern  VTBL_ENTRY _ZTV7S2315C3[];
Class_Descriptor cd_S2315C3 = {  "S2315C3", // class name
  bases_S2315C3, 1,
  &(vtc_S2315C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,20), // object size
  NSPAIRA(_ZTI7S2315C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2315C3),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  S2315C2  : S2315C3 {
  void *s2315c2f0[2];
  int s2315c2f1[3];
  char s2315c2f2[2];
  void *s2315c2f3;
  virtual  ~S2315C2(); // _ZN7S2315C2D1Ev
  virtual void  v7(); // _ZN7S2315C22v7Ev
  virtual void  v8(); // _ZN7S2315C22v8Ev
  virtual void  v9(); // _ZN7S2315C22v9Ev
  virtual void  v10(); // _ZN7S2315C23v10Ev
  S2315C2(); // tgen
};
//SIG(-1 S2315C2) C1{ BC2{ BC3{ vd v5 Fc Fi} vd v6 Fp Fc[2]} vd v1 v2 v3 v4 Fp[2] Fi[3] Fc[2] Fp}


 S2315C2 ::~S2315C2(){ note_dtor("S2315C2", this);}
void  S2315C2 ::v7(){vfunc_called(this, "_ZN7S2315C22v7Ev");}
void  S2315C2 ::v8(){vfunc_called(this, "_ZN7S2315C22v8Ev");}
void  S2315C2 ::v9(){vfunc_called(this, "_ZN7S2315C22v9Ev");}
void  S2315C2 ::v10(){vfunc_called(this, "_ZN7S2315C23v10Ev");}
S2315C2 ::S2315C2(){ note_ctor("S2315C2", this);} // tgen

static void Test_S2315C2()
{
  extern Class_Descriptor cd_S2315C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,13)];
    init_test(&cd_S2315C2, buf);
    S2315C2 *dp, &lv = *(dp=new (buf) S2315C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,48), "sizeof(S2315C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2315C2)");
    check_base_class_offset(lv, (S2315C4*)(S2315C3*), 0, "S2315C2");
    check_base_class_offset(lv, (S2315C3*), 0, "S2315C2");
    check_field_offset(lv, s2315c2f0, ABISELECT(32,20), "S2315C2.s2315c2f0");
    check_field_offset(lv, s2315c2f1, ABISELECT(48,28), "S2315C2.s2315c2f1");
    check_field_offset(lv, s2315c2f2, ABISELECT(60,40), "S2315C2.s2315c2f2");
    check_field_offset(lv, s2315c2f3, ABISELECT(64,44), "S2315C2.s2315c2f3");
    test_class_info(&lv, &cd_S2315C2);
    dp->~S2315C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2315C2(Test_S2315C2, "S2315C2", ABISELECT(72,48));

#else // __cplusplus

extern void _ZN7S2315C2C1Ev();
extern void _ZN7S2315C2D1Ev();
Name_Map name_map_S2315C2[] = {
  NSPAIR(_ZN7S2315C2C1Ev),
  NSPAIR(_ZN7S2315C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2315C4;
extern VTBL_ENTRY _ZTI7S2315C4[];
extern  VTBL_ENTRY _ZTV7S2315C4[];
extern Class_Descriptor cd_S2315C3;
extern VTBL_ENTRY _ZTI7S2315C3[];
extern  VTBL_ENTRY _ZTV7S2315C3[];
static Base_Class bases_S2315C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2315C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S2315C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S2315C2[];
extern void _ZN7S2315C2D1Ev();
extern void _ZN7S2315C2D0Ev();
extern void _ZN7S2315C42v5Ev();
extern void _ZN7S2315C32v6Ev();
extern void _ZN7S2315C22v7Ev();
extern void _ZN7S2315C22v8Ev();
extern void _ZN7S2315C22v9Ev();
extern void _ZN7S2315C23v10Ev();
static  VTBL_ENTRY vtc_S2315C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2315C2[0]),
  (VTBL_ENTRY)&_ZN7S2315C2D1Ev,
  (VTBL_ENTRY)&_ZN7S2315C2D0Ev,
  (VTBL_ENTRY)&_ZN7S2315C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2315C32v6Ev,
  (VTBL_ENTRY)&_ZN7S2315C22v7Ev,
  (VTBL_ENTRY)&_ZN7S2315C22v8Ev,
  (VTBL_ENTRY)&_ZN7S2315C22v9Ev,
  (VTBL_ENTRY)&_ZN7S2315C23v10Ev,
};
extern VTBL_ENTRY _ZTI7S2315C2[];
extern  VTBL_ENTRY _ZTV7S2315C2[];
Class_Descriptor cd_S2315C2 = {  "S2315C2", // class name
  bases_S2315C2, 2,
  &(vtc_S2315C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,48), // object size
  NSPAIRA(_ZTI7S2315C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2315C2),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  S2315C1  : S2315C2 {
  int s2315c1f0;
  virtual  ~S2315C1(); // _ZN7S2315C1D1Ev
  virtual void  v1(); // _ZN7S2315C12v1Ev
  virtual void  v2(); // _ZN7S2315C12v2Ev
  virtual void  v3(); // _ZN7S2315C12v3Ev
  virtual void  v4(); // _ZN7S2315C12v4Ev
  S2315C1(); // tgen
};
//SIG(1 S2315C1) C1{ BC2{ BC3{ BC4{ vd v5 Fc Fi} vd v6 Fp Fc[2]} vd v7 v8 v9 v10 Fp[2] Fi[3] Fc[2] Fp} vd v1 v2 v3 v4 Fi}


 S2315C1 ::~S2315C1(){ note_dtor("S2315C1", this);}
void  S2315C1 ::v1(){vfunc_called(this, "_ZN7S2315C12v1Ev");}
void  S2315C1 ::v2(){vfunc_called(this, "_ZN7S2315C12v2Ev");}
void  S2315C1 ::v3(){vfunc_called(this, "_ZN7S2315C12v3Ev");}
void  S2315C1 ::v4(){vfunc_called(this, "_ZN7S2315C12v4Ev");}
S2315C1 ::S2315C1(){ note_ctor("S2315C1", this);} // tgen

static void Test_S2315C1()
{
  extern Class_Descriptor cd_S2315C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(11,14)];
    init_test(&cd_S2315C1, buf);
    S2315C1 *dp, &lv = *(dp=new (buf) S2315C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,52), "sizeof(S2315C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2315C1)");
    check_base_class_offset(lv, (S2315C4*)(S2315C3*)(S2315C2*), 0, "S2315C1");
    check_base_class_offset(lv, (S2315C3*)(S2315C2*), 0, "S2315C1");
    check_base_class_offset(lv, (S2315C2*), 0, "S2315C1");
    check_field_offset(lv, s2315c1f0, ABISELECT(72,48), "S2315C1.s2315c1f0");
    test_class_info(&lv, &cd_S2315C1);
    dp->~S2315C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2315C1(Test_S2315C1, "S2315C1", ABISELECT(80,52));

#else // __cplusplus

extern void _ZN7S2315C1C1Ev();
extern void _ZN7S2315C1D1Ev();
Name_Map name_map_S2315C1[] = {
  NSPAIR(_ZN7S2315C1C1Ev),
  NSPAIR(_ZN7S2315C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2315C4;
extern VTBL_ENTRY _ZTI7S2315C4[];
extern  VTBL_ENTRY _ZTV7S2315C4[];
extern Class_Descriptor cd_S2315C3;
extern VTBL_ENTRY _ZTI7S2315C3[];
extern  VTBL_ENTRY _ZTV7S2315C3[];
extern Class_Descriptor cd_S2315C2;
extern VTBL_ENTRY _ZTI7S2315C2[];
extern  VTBL_ENTRY _ZTV7S2315C2[];
static Base_Class bases_S2315C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2315C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S2315C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S2315C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S2315C1[];
extern void _ZN7S2315C1D1Ev();
extern void _ZN7S2315C1D0Ev();
extern void _ZN7S2315C42v5Ev();
extern void _ZN7S2315C32v6Ev();
extern void _ZN7S2315C22v7Ev();
extern void _ZN7S2315C22v8Ev();
extern void _ZN7S2315C22v9Ev();
extern void _ZN7S2315C23v10Ev();
extern void _ZN7S2315C12v1Ev();
extern void _ZN7S2315C12v2Ev();
extern void _ZN7S2315C12v3Ev();
extern void _ZN7S2315C12v4Ev();
static  VTBL_ENTRY vtc_S2315C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2315C1[0]),
  (VTBL_ENTRY)&_ZN7S2315C1D1Ev,
  (VTBL_ENTRY)&_ZN7S2315C1D0Ev,
  (VTBL_ENTRY)&_ZN7S2315C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2315C32v6Ev,
  (VTBL_ENTRY)&_ZN7S2315C22v7Ev,
  (VTBL_ENTRY)&_ZN7S2315C22v8Ev,
  (VTBL_ENTRY)&_ZN7S2315C22v9Ev,
  (VTBL_ENTRY)&_ZN7S2315C23v10Ev,
  (VTBL_ENTRY)&_ZN7S2315C12v1Ev,
  (VTBL_ENTRY)&_ZN7S2315C12v2Ev,
  (VTBL_ENTRY)&_ZN7S2315C12v3Ev,
  (VTBL_ENTRY)&_ZN7S2315C12v4Ev,
};
extern VTBL_ENTRY _ZTI7S2315C1[];
extern  VTBL_ENTRY _ZTV7S2315C1[];
Class_Descriptor cd_S2315C1 = {  "S2315C1", // class name
  bases_S2315C1, 3,
  &(vtc_S2315C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(80,52), // object size
  NSPAIRA(_ZTI7S2315C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2315C1),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  S2323C4  {
  char s2323c4f0;
  int s2323c4f1;
  virtual  ~S2323C4(); // _ZN7S2323C4D1Ev
  virtual void  v5(); // _ZN7S2323C42v5Ev
  S2323C4(); // tgen
};
//SIG(-1 S2323C4) C1{ vd v1 Fc Fi}


 S2323C4 ::~S2323C4(){ note_dtor("S2323C4", this);}
void  S2323C4 ::v5(){vfunc_called(this, "_ZN7S2323C42v5Ev");}
S2323C4 ::S2323C4(){ note_ctor("S2323C4", this);} // tgen

static void Test_S2323C4()
{
  extern Class_Descriptor cd_S2323C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S2323C4, buf);
    S2323C4 *dp, &lv = *(dp=new (buf) S2323C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S2323C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2323C4)");
    check_field_offset(lv, s2323c4f0, ABISELECT(8,4), "S2323C4.s2323c4f0");
    check_field_offset(lv, s2323c4f1, ABISELECT(12,8), "S2323C4.s2323c4f1");
    test_class_info(&lv, &cd_S2323C4);
    dp->~S2323C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2323C4(Test_S2323C4, "S2323C4", ABISELECT(16,12));

#else // __cplusplus

extern void _ZN7S2323C4C1Ev();
extern void _ZN7S2323C4D1Ev();
Name_Map name_map_S2323C4[] = {
  NSPAIR(_ZN7S2323C4C1Ev),
  NSPAIR(_ZN7S2323C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S2323C4[];
extern void _ZN7S2323C4D1Ev();
extern void _ZN7S2323C4D0Ev();
extern void _ZN7S2323C42v5Ev();
static  VTBL_ENTRY vtc_S2323C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2323C4[0]),
  (VTBL_ENTRY)&_ZN7S2323C4D1Ev,
  (VTBL_ENTRY)&_ZN7S2323C4D0Ev,
  (VTBL_ENTRY)&_ZN7S2323C42v5Ev,
};
extern VTBL_ENTRY _ZTI7S2323C4[];
extern  VTBL_ENTRY _ZTV7S2323C4[];
Class_Descriptor cd_S2323C4 = {  "S2323C4", // class name
  0,0,//no base classes
  &(vtc_S2323C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI7S2323C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S2323C4),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  S2323C3  : S2323C4 {
  void *s2323c3f0;
  char s2323c3f1[2];
  virtual  ~S2323C3(); // _ZN7S2323C3D1Ev
  virtual void  v6(); // _ZN7S2323C32v6Ev
  S2323C3(); // tgen
};
//SIG(-1 S2323C3) C1{ BC2{ vd v2 Fc Fi} vd v1 Fp Fc[2]}


 S2323C3 ::~S2323C3(){ note_dtor("S2323C3", this);}
void  S2323C3 ::v6(){vfunc_called(this, "_ZN7S2323C32v6Ev");}
S2323C3 ::S2323C3(){ note_ctor("S2323C3", this);} // tgen

static void Test_S2323C3()
{
  extern Class_Descriptor cd_S2323C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,6)];
    init_test(&cd_S2323C3, buf);
    S2323C3 *dp, &lv = *(dp=new (buf) S2323C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S2323C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2323C3)");
    check_base_class_offset(lv, (S2323C4*), 0, "S2323C3");
    check_field_offset(lv, s2323c3f0, ABISELECT(16,12), "S2323C3.s2323c3f0");
    check_field_offset(lv, s2323c3f1, ABISELECT(24,16), "S2323C3.s2323c3f1");
    test_class_info(&lv, &cd_S2323C3);
    dp->~S2323C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2323C3(Test_S2323C3, "S2323C3", ABISELECT(32,20));

#else // __cplusplus

extern void _ZN7S2323C3C1Ev();
extern void _ZN7S2323C3D1Ev();
Name_Map name_map_S2323C3[] = {
  NSPAIR(_ZN7S2323C3C1Ev),
  NSPAIR(_ZN7S2323C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2323C4;
extern VTBL_ENTRY _ZTI7S2323C4[];
extern  VTBL_ENTRY _ZTV7S2323C4[];
static Base_Class bases_S2323C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2323C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI7S2323C3[];
extern void _ZN7S2323C3D1Ev();
extern void _ZN7S2323C3D0Ev();
extern void _ZN7S2323C42v5Ev();
extern void _ZN7S2323C32v6Ev();
static  VTBL_ENTRY vtc_S2323C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2323C3[0]),
  (VTBL_ENTRY)&_ZN7S2323C3D1Ev,
  (VTBL_ENTRY)&_ZN7S2323C3D0Ev,
  (VTBL_ENTRY)&_ZN7S2323C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2323C32v6Ev,
};
extern VTBL_ENTRY _ZTI7S2323C3[];
extern  VTBL_ENTRY _ZTV7S2323C3[];
Class_Descriptor cd_S2323C3 = {  "S2323C3", // class name
  bases_S2323C3, 1,
  &(vtc_S2323C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,20), // object size
  NSPAIRA(_ZTI7S2323C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2323C3),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  S2323C2  : S2323C3 {
  void *s2323c2f0[2];
  int s2323c2f1[3];
  char s2323c2f2[2];
  void *s2323c2f3;
  virtual  ~S2323C2(); // _ZN7S2323C2D1Ev
  virtual void  v7(); // _ZN7S2323C22v7Ev
  virtual void  v8(); // _ZN7S2323C22v8Ev
  virtual void  v9(); // _ZN7S2323C22v9Ev
  virtual void  v10(); // _ZN7S2323C23v10Ev
  S2323C2(); // tgen
};
//SIG(-1 S2323C2) C1{ BC2{ BC3{ vd v5 Fc Fi} vd v6 Fp Fc[2]} vd v1 v2 v3 v4 Fp[2] Fi[3] Fc[2] Fp}


 S2323C2 ::~S2323C2(){ note_dtor("S2323C2", this);}
void  S2323C2 ::v7(){vfunc_called(this, "_ZN7S2323C22v7Ev");}
void  S2323C2 ::v8(){vfunc_called(this, "_ZN7S2323C22v8Ev");}
void  S2323C2 ::v9(){vfunc_called(this, "_ZN7S2323C22v9Ev");}
void  S2323C2 ::v10(){vfunc_called(this, "_ZN7S2323C23v10Ev");}
S2323C2 ::S2323C2(){ note_ctor("S2323C2", this);} // tgen

static void Test_S2323C2()
{
  extern Class_Descriptor cd_S2323C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,13)];
    init_test(&cd_S2323C2, buf);
    S2323C2 *dp, &lv = *(dp=new (buf) S2323C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,48), "sizeof(S2323C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2323C2)");
    check_base_class_offset(lv, (S2323C4*)(S2323C3*), 0, "S2323C2");
    check_base_class_offset(lv, (S2323C3*), 0, "S2323C2");
    check_field_offset(lv, s2323c2f0, ABISELECT(32,20), "S2323C2.s2323c2f0");
    check_field_offset(lv, s2323c2f1, ABISELECT(48,28), "S2323C2.s2323c2f1");
    check_field_offset(lv, s2323c2f2, ABISELECT(60,40), "S2323C2.s2323c2f2");
    check_field_offset(lv, s2323c2f3, ABISELECT(64,44), "S2323C2.s2323c2f3");
    test_class_info(&lv, &cd_S2323C2);
    dp->~S2323C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2323C2(Test_S2323C2, "S2323C2", ABISELECT(72,48));

#else // __cplusplus

extern void _ZN7S2323C2C1Ev();
extern void _ZN7S2323C2D1Ev();
Name_Map name_map_S2323C2[] = {
  NSPAIR(_ZN7S2323C2C1Ev),
  NSPAIR(_ZN7S2323C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2323C4;
extern VTBL_ENTRY _ZTI7S2323C4[];
extern  VTBL_ENTRY _ZTV7S2323C4[];
extern Class_Descriptor cd_S2323C3;
extern VTBL_ENTRY _ZTI7S2323C3[];
extern  VTBL_ENTRY _ZTV7S2323C3[];
static Base_Class bases_S2323C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2323C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S2323C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S2323C2[];
extern void _ZN7S2323C2D1Ev();
extern void _ZN7S2323C2D0Ev();
extern void _ZN7S2323C42v5Ev();
extern void _ZN7S2323C32v6Ev();
extern void _ZN7S2323C22v7Ev();
extern void _ZN7S2323C22v8Ev();
extern void _ZN7S2323C22v9Ev();
extern void _ZN7S2323C23v10Ev();
static  VTBL_ENTRY vtc_S2323C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2323C2[0]),
  (VTBL_ENTRY)&_ZN7S2323C2D1Ev,
  (VTBL_ENTRY)&_ZN7S2323C2D0Ev,
  (VTBL_ENTRY)&_ZN7S2323C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2323C32v6Ev,
  (VTBL_ENTRY)&_ZN7S2323C22v7Ev,
  (VTBL_ENTRY)&_ZN7S2323C22v8Ev,
  (VTBL_ENTRY)&_ZN7S2323C22v9Ev,
  (VTBL_ENTRY)&_ZN7S2323C23v10Ev,
};
extern VTBL_ENTRY _ZTI7S2323C2[];
extern  VTBL_ENTRY _ZTV7S2323C2[];
Class_Descriptor cd_S2323C2 = {  "S2323C2", // class name
  bases_S2323C2, 2,
  &(vtc_S2323C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,48), // object size
  NSPAIRA(_ZTI7S2323C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2323C2),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  S2323C1  : S2323C2 {
  virtual  ~S2323C1(); // _ZN7S2323C1D1Ev
  virtual void  v1(); // _ZN7S2323C12v1Ev
  virtual void  v2(); // _ZN7S2323C12v2Ev
  virtual void  v3(); // _ZN7S2323C12v3Ev
  virtual void  v4(); // _ZN7S2323C12v4Ev
  S2323C1(); // tgen
};
//SIG(1 S2323C1) C1{ BC2{ BC3{ BC4{ vd v5 Fc Fi} vd v6 Fp Fc[2]} vd v7 v8 v9 v10 Fp[2] Fi[3] Fc[2] Fp} vd v1 v2 v3 v4}


 S2323C1 ::~S2323C1(){ note_dtor("S2323C1", this);}
void  S2323C1 ::v1(){vfunc_called(this, "_ZN7S2323C12v1Ev");}
void  S2323C1 ::v2(){vfunc_called(this, "_ZN7S2323C12v2Ev");}
void  S2323C1 ::v3(){vfunc_called(this, "_ZN7S2323C12v3Ev");}
void  S2323C1 ::v4(){vfunc_called(this, "_ZN7S2323C12v4Ev");}
S2323C1 ::S2323C1(){ note_ctor("S2323C1", this);} // tgen

static void Test_S2323C1()
{
  extern Class_Descriptor cd_S2323C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,13)];
    init_test(&cd_S2323C1, buf);
    S2323C1 *dp, &lv = *(dp=new (buf) S2323C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,48), "sizeof(S2323C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2323C1)");
    check_base_class_offset(lv, (S2323C4*)(S2323C3*)(S2323C2*), 0, "S2323C1");
    check_base_class_offset(lv, (S2323C3*)(S2323C2*), 0, "S2323C1");
    check_base_class_offset(lv, (S2323C2*), 0, "S2323C1");
    test_class_info(&lv, &cd_S2323C1);
    dp->~S2323C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2323C1(Test_S2323C1, "S2323C1", ABISELECT(72,48));

#else // __cplusplus

extern void _ZN7S2323C1C1Ev();
extern void _ZN7S2323C1D1Ev();
Name_Map name_map_S2323C1[] = {
  NSPAIR(_ZN7S2323C1C1Ev),
  NSPAIR(_ZN7S2323C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2323C4;
extern VTBL_ENTRY _ZTI7S2323C4[];
extern  VTBL_ENTRY _ZTV7S2323C4[];
extern Class_Descriptor cd_S2323C3;
extern VTBL_ENTRY _ZTI7S2323C3[];
extern  VTBL_ENTRY _ZTV7S2323C3[];
extern Class_Descriptor cd_S2323C2;
extern VTBL_ENTRY _ZTI7S2323C2[];
extern  VTBL_ENTRY _ZTV7S2323C2[];
static Base_Class bases_S2323C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2323C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S2323C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S2323C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S2323C1[];
extern void _ZN7S2323C1D1Ev();
extern void _ZN7S2323C1D0Ev();
extern void _ZN7S2323C42v5Ev();
extern void _ZN7S2323C32v6Ev();
extern void _ZN7S2323C22v7Ev();
extern void _ZN7S2323C22v8Ev();
extern void _ZN7S2323C22v9Ev();
extern void _ZN7S2323C23v10Ev();
extern void _ZN7S2323C12v1Ev();
extern void _ZN7S2323C12v2Ev();
extern void _ZN7S2323C12v3Ev();
extern void _ZN7S2323C12v4Ev();
static  VTBL_ENTRY vtc_S2323C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2323C1[0]),
  (VTBL_ENTRY)&_ZN7S2323C1D1Ev,
  (VTBL_ENTRY)&_ZN7S2323C1D0Ev,
  (VTBL_ENTRY)&_ZN7S2323C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2323C32v6Ev,
  (VTBL_ENTRY)&_ZN7S2323C22v7Ev,
  (VTBL_ENTRY)&_ZN7S2323C22v8Ev,
  (VTBL_ENTRY)&_ZN7S2323C22v9Ev,
  (VTBL_ENTRY)&_ZN7S2323C23v10Ev,
  (VTBL_ENTRY)&_ZN7S2323C12v1Ev,
  (VTBL_ENTRY)&_ZN7S2323C12v2Ev,
  (VTBL_ENTRY)&_ZN7S2323C12v3Ev,
  (VTBL_ENTRY)&_ZN7S2323C12v4Ev,
};
extern VTBL_ENTRY _ZTI7S2323C1[];
extern  VTBL_ENTRY _ZTV7S2323C1[];
Class_Descriptor cd_S2323C1 = {  "S2323C1", // class name
  bases_S2323C1, 3,
  &(vtc_S2323C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,48), // object size
  NSPAIRA(_ZTI7S2323C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2323C1),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  S9756C2_nt  {
  ::S9782C12 s9756c2f0;
  virtual  ~S9756C2_nt(); // _ZN10S9756C2_ntD1Ev
  virtual void  v4(); // _ZN10S9756C2_nt2v4Ev
  virtual void  v5(); // _ZN10S9756C2_nt2v5Ev
  virtual void  v6(); // _ZN10S9756C2_nt2v6Ev
  virtual void  v7(); // _ZN10S9756C2_nt2v7Ev
  S9756C2_nt(); // tgen
};
//SIG(-1 S9756C2_nt) C1{ vd v1 v2 v3 v4 FC2{ m Fp Fc}}


 S9756C2_nt ::~S9756C2_nt(){ note_dtor("S9756C2_nt", this);}
void  S9756C2_nt ::v4(){vfunc_called(this, "_ZN10S9756C2_nt2v4Ev");}
void  S9756C2_nt ::v5(){vfunc_called(this, "_ZN10S9756C2_nt2v5Ev");}
void  S9756C2_nt ::v6(){vfunc_called(this, "_ZN10S9756C2_nt2v6Ev");}
void  S9756C2_nt ::v7(){vfunc_called(this, "_ZN10S9756C2_nt2v7Ev");}
S9756C2_nt ::S9756C2_nt(){ note_ctor("S9756C2_nt", this);} // tgen

//skip512 S9756C2_nt

#else // __cplusplus

extern void _ZN10S9756C2_ntC1Ev();
extern void _ZN10S9756C2_ntD1Ev();
Name_Map name_map_S9756C2_nt[] = {
  NSPAIR(_ZN10S9756C2_ntC1Ev),
  NSPAIR(_ZN10S9756C2_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S9756C2_nt[];
extern void _ZN10S9756C2_ntD1Ev();
extern void _ZN10S9756C2_ntD0Ev();
extern void _ZN10S9756C2_nt2v4Ev();
extern void _ZN10S9756C2_nt2v5Ev();
extern void _ZN10S9756C2_nt2v6Ev();
extern void _ZN10S9756C2_nt2v7Ev();
static  VTBL_ENTRY vtc_S9756C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S9756C2_nt[0]),
  (VTBL_ENTRY)&_ZN10S9756C2_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S9756C2_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S9756C2_nt2v4Ev,
  (VTBL_ENTRY)&_ZN10S9756C2_nt2v5Ev,
  (VTBL_ENTRY)&_ZN10S9756C2_nt2v6Ev,
  (VTBL_ENTRY)&_ZN10S9756C2_nt2v7Ev,
};
extern VTBL_ENTRY _ZTI10S9756C2_nt[];
VTBL_ENTRY *P__ZTI10S9756C2_nt = _ZTI10S9756C2_nt; 
extern  VTBL_ENTRY _ZTV10S9756C2_nt[];
Class_Descriptor cd_S9756C2_nt = {  "S9756C2_nt", // class name
  0,0,//no base classes
  &(vtc_S9756C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI10S9756C2_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S9756C2_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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S9756C1  : S9756C2_nt {
  ::S9782C10 s9756c1f0;
  virtual  ~S9756C1(); // _ZN7S9756C1D1Ev
  virtual void  v1(); // _ZN7S9756C12v1Ev
  virtual void  v2(); // _ZN7S9756C12v2Ev
  virtual void  v3(); // _ZN7S9756C12v3Ev
  S9756C1(); // tgen
};
//SIG(1 S9756C1) C1{ BC2{ vd v4 v5 v6 v7 FC3{ m Fp Fc}} vd v1 v2 v3 FC4{ m FC5{ m FC3 Fp[2]} Fi}}


 S9756C1 ::~S9756C1(){ note_dtor("S9756C1", this);}
void  S9756C1 ::v1(){vfunc_called(this, "_ZN7S9756C12v1Ev");}
void  S9756C1 ::v2(){vfunc_called(this, "_ZN7S9756C12v2Ev");}
void  S9756C1 ::v3(){vfunc_called(this, "_ZN7S9756C12v3Ev");}
S9756C1 ::S9756C1(){ note_ctor("S9756C1", this);} // tgen

static void Test_S9756C1()
{
  extern Class_Descriptor cd_S9756C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[9];
    init_test(&cd_S9756C1, buf);
    S9756C1 *dp, &lv = *(dp=new (buf) S9756C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,32), "sizeof(S9756C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9756C1)");
    check_base_class_offset(lv, (S9756C2_nt*), 0, "S9756C1");
    check_field_offset(lv, s9756c1f0, ABISELECT(24,12), "S9756C1.s9756c1f0");
    test_class_info(&lv, &cd_S9756C1);
    dp->~S9756C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9756C1(Test_S9756C1, "S9756C1", ABISELECT(64,32));

#else // __cplusplus

extern void _ZN7S9756C1C1Ev();
extern void _ZN7S9756C1D1Ev();
Name_Map name_map_S9756C1[] = {
  NSPAIR(_ZN7S9756C1C1Ev),
  NSPAIR(_ZN7S9756C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S9756C2_nt;
extern VTBL_ENTRY _ZTI10S9756C2_nt[];
extern  VTBL_ENTRY _ZTV10S9756C2_nt[];
static Base_Class bases_S9756C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S9756C2_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 _ZTI7S9756C1[];
extern void _ZN7S9756C1D1Ev();
extern void _ZN7S9756C1D0Ev();
extern void _ZN10S9756C2_nt2v4Ev();
extern void _ZN10S9756C2_nt2v5Ev();
extern void _ZN10S9756C2_nt2v6Ev();
extern void _ZN10S9756C2_nt2v7Ev();
extern void _ZN7S9756C12v1Ev();
extern void _ZN7S9756C12v2Ev();
extern void _ZN7S9756C12v3Ev();
static  VTBL_ENTRY vtc_S9756C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9756C1[0]),
  (VTBL_ENTRY)&_ZN7S9756C1D1Ev,
  (VTBL_ENTRY)&_ZN7S9756C1D0Ev,
  (VTBL_ENTRY)&_ZN10S9756C2_nt2v4Ev,
  (VTBL_ENTRY)&_ZN10S9756C2_nt2v5Ev,
  (VTBL_ENTRY)&_ZN10S9756C2_nt2v6Ev,
  (VTBL_ENTRY)&_ZN10S9756C2_nt2v7Ev,
  (VTBL_ENTRY)&_ZN7S9756C12v1Ev,
  (VTBL_ENTRY)&_ZN7S9756C12v2Ev,
  (VTBL_ENTRY)&_ZN7S9756C12v3Ev,
};
extern VTBL_ENTRY _ZTI7S9756C1[];
extern  VTBL_ENTRY _ZTV7S9756C1[];
Class_Descriptor cd_S9756C1 = {  "S9756C1", // class name
  bases_S9756C1, 1,
  &(vtc_S9756C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(64,32), // object size
  NSPAIRA(_ZTI7S9756C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S9756C1),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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S5294C3  {
  char s5294c3f0;
  int s5294c3f1;
  virtual  ~S5294C3(); // _ZN7S5294C3D1Ev
  virtual void  v6(); // _ZN7S5294C32v6Ev
  S5294C3(); // tgen
};
//SIG(-1 S5294C3) C1{ vd v1 Fc Fi}


 S5294C3 ::~S5294C3(){ note_dtor("S5294C3", this);}
void  S5294C3 ::v6(){vfunc_called(this, "_ZN7S5294C32v6Ev");}
S5294C3 ::S5294C3(){ note_ctor("S5294C3", this);} // tgen

static void Test_S5294C3()
{
  extern Class_Descriptor cd_S5294C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S5294C3, buf);
    S5294C3 *dp, &lv = *(dp=new (buf) S5294C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S5294C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5294C3)");
    check_field_offset(lv, s5294c3f0, ABISELECT(8,4), "S5294C3.s5294c3f0");
    check_field_offset(lv, s5294c3f1, ABISELECT(12,8), "S5294C3.s5294c3f1");
    test_class_info(&lv, &cd_S5294C3);
    dp->~S5294C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5294C3(Test_S5294C3, "S5294C3", ABISELECT(16,12));

#else // __cplusplus

extern void _ZN7S5294C3C1Ev();
extern void _ZN7S5294C3D1Ev();
Name_Map name_map_S5294C3[] = {
  NSPAIR(_ZN7S5294C3C1Ev),
  NSPAIR(_ZN7S5294C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S5294C3[];
extern void _ZN7S5294C3D1Ev();
extern void _ZN7S5294C3D0Ev();
extern void _ZN7S5294C32v6Ev();
static  VTBL_ENTRY vtc_S5294C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5294C3[0]),
  (VTBL_ENTRY)&_ZN7S5294C3D1Ev,
  (VTBL_ENTRY)&_ZN7S5294C3D0Ev,
  (VTBL_ENTRY)&_ZN7S5294C32v6Ev,
};
extern VTBL_ENTRY _ZTI7S5294C3[];
extern  VTBL_ENTRY _ZTV7S5294C3[];
Class_Descriptor cd_S5294C3 = {  "S5294C3", // class name
  0,0,//no base classes
  &(vtc_S5294C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI7S5294C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S5294C3),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  S5294C2  : S5294C3 {
  void *s5294c2f0;
  virtual  ~S5294C2(); // _ZN7S5294C2D1Ev
  virtual void  v7(); // _ZN7S5294C22v7Ev
  virtual void  v8(); // _ZN7S5294C22v8Ev
  virtual void  v9(); // _ZN7S5294C22v9Ev
  virtual void  v10(); // _ZN7S5294C23v10Ev
  virtual void  v11(); // _ZN7S5294C23v11Ev
  S5294C2(); // tgen
};
//SIG(-1 S5294C2) C1{ BC2{ vd v6 Fc Fi} vd v1 v2 v3 v4 v5 Fp}


 S5294C2 ::~S5294C2(){ note_dtor("S5294C2", this);}
void  S5294C2 ::v7(){vfunc_called(this, "_ZN7S5294C22v7Ev");}
void  S5294C2 ::v8(){vfunc_called(this, "_ZN7S5294C22v8Ev");}
void  S5294C2 ::v9(){vfunc_called(this, "_ZN7S5294C22v9Ev");}
void  S5294C2 ::v10(){vfunc_called(this, "_ZN7S5294C23v10Ev");}
void  S5294C2 ::v11(){vfunc_called(this, "_ZN7S5294C23v11Ev");}
S5294C2 ::S5294C2(){ note_ctor("S5294C2", this);} // tgen

static void Test_S5294C2()
{
  extern Class_Descriptor cd_S5294C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,5)];
    init_test(&cd_S5294C2, buf);
    S5294C2 *dp, &lv = *(dp=new (buf) S5294C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S5294C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5294C2)");
    check_base_class_offset(lv, (S5294C3*), 0, "S5294C2");
    check_field_offset(lv, s5294c2f0, ABISELECT(16,12), "S5294C2.s5294c2f0");
    test_class_info(&lv, &cd_S5294C2);
    dp->~S5294C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5294C2(Test_S5294C2, "S5294C2", ABISELECT(24,16));

#else // __cplusplus

extern void _ZN7S5294C2C1Ev();
extern void _ZN7S5294C2D1Ev();
Name_Map name_map_S5294C2[] = {
  NSPAIR(_ZN7S5294C2C1Ev),
  NSPAIR(_ZN7S5294C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5294C3;
extern VTBL_ENTRY _ZTI7S5294C3[];
extern  VTBL_ENTRY _ZTV7S5294C3[];
static Base_Class bases_S5294C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5294C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI7S5294C2[];
extern void _ZN7S5294C2D1Ev();
extern void _ZN7S5294C2D0Ev();
extern void _ZN7S5294C32v6Ev();
extern void _ZN7S5294C22v7Ev();
extern void _ZN7S5294C22v8Ev();
extern void _ZN7S5294C22v9Ev();
extern void _ZN7S5294C23v10Ev();
extern void _ZN7S5294C23v11Ev();
static  VTBL_ENTRY vtc_S5294C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5294C2[0]),
  (VTBL_ENTRY)&_ZN7S5294C2D1Ev,
  (VTBL_ENTRY)&_ZN7S5294C2D0Ev,
  (VTBL_ENTRY)&_ZN7S5294C32v6Ev,
  (VTBL_ENTRY)&_ZN7S5294C22v7Ev,
  (VTBL_ENTRY)&_ZN7S5294C22v8Ev,
  (VTBL_ENTRY)&_ZN7S5294C22v9Ev,
  (VTBL_ENTRY)&_ZN7S5294C23v10Ev,
  (VTBL_ENTRY)&_ZN7S5294C23v11Ev,
};
extern VTBL_ENTRY _ZTI7S5294C2[];
extern  VTBL_ENTRY _ZTV7S5294C2[];
Class_Descriptor cd_S5294C2 = {  "S5294C2", // class name
  bases_S5294C2, 1,
  &(vtc_S5294C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,16), // object size
  NSPAIRA(_ZTI7S5294C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S5294C2),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
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S5294C1  : S5294C2 {
  void *s5294c1f0;
  int s5294c1f1;
  virtual  ~S5294C1(); // _ZN7S5294C1D1Ev
  virtual void  v1(); // _ZN7S5294C12v1Ev
  virtual void  v2(); // _ZN7S5294C12v2Ev
  virtual void  v3(); // _ZN7S5294C12v3Ev
  virtual void  v4(); // _ZN7S5294C12v4Ev
  virtual void  v5(); // _ZN7S5294C12v5Ev
  S5294C1(); // tgen
};
//SIG(1 S5294C1) C1{ BC2{ BC3{ vd v6 Fc Fi} vd v7 v8 v9 v10 v11 Fp} vd v1 v2 v3 v4 v5 Fp Fi}


 S5294C1 ::~S5294C1(){ note_dtor("S5294C1", this);}
void  S5294C1 ::v1(){vfunc_called(this, "_ZN7S5294C12v1Ev");}
void  S5294C1 ::v2(){vfunc_called(this, "_ZN7S5294C12v2Ev");}
void  S5294C1 ::v3(){vfunc_called(this, "_ZN7S5294C12v3Ev");}
void  S5294C1 ::v4(){vfunc_called(this, "_ZN7S5294C12v4Ev");}
void  S5294C1 ::v5(){vfunc_called(this, "_ZN7S5294C12v5Ev");}
S5294C1 ::S5294C1(){ note_ctor("S5294C1", this);} // tgen

static void Test_S5294C1()
{
  extern Class_Descriptor cd_S5294C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,7)];
    init_test(&cd_S5294C1, buf);
    S5294C1 *dp, &lv = *(dp=new (buf) S5294C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,24), "sizeof(S5294C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5294C1)");
    check_base_class_offset(lv, (S5294C3*)(S5294C2*), 0, "S5294C1");
    check_base_class_offset(lv, (S5294C2*), 0, "S5294C1");
    check_field_offset(lv, s5294c1f0, ABISELECT(24,16), "S5294C1.s5294c1f0");
    check_field_offset(lv, s5294c1f1, ABISELECT(32,20), "S5294C1.s5294c1f1");
    test_class_info(&lv, &cd_S5294C1);
    dp->~S5294C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5294C1(Test_S5294C1, "S5294C1", ABISELECT(40,24));

#else // __cplusplus

extern void _ZN7S5294C1C1Ev();
extern void _ZN7S5294C1D1Ev();
Name_Map name_map_S5294C1[] = {
  NSPAIR(_ZN7S5294C1C1Ev),
  NSPAIR(_ZN7S5294C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5294C3;
extern VTBL_ENTRY _ZTI7S5294C3[];
extern  VTBL_ENTRY _ZTV7S5294C3[];
extern Class_Descriptor cd_S5294C2;
extern VTBL_ENTRY _ZTI7S5294C2[];
extern  VTBL_ENTRY _ZTV7S5294C2[];
static Base_Class bases_S5294C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5294C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S5294C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S5294C1[];
extern void _ZN7S5294C1D1Ev();
extern void _ZN7S5294C1D0Ev();
extern void _ZN7S5294C32v6Ev();
extern void _ZN7S5294C22v7Ev();
extern void _ZN7S5294C22v8Ev();
extern void _ZN7S5294C22v9Ev();
extern void _ZN7S5294C23v10Ev();
extern void _ZN7S5294C23v11Ev();
extern void _ZN7S5294C12v1Ev();
extern void _ZN7S5294C12v2Ev();
extern void _ZN7S5294C12v3Ev();
extern void _ZN7S5294C12v4Ev();
extern void _ZN7S5294C12v5Ev();
static  VTBL_ENTRY vtc_S5294C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5294C1[0]),
  (VTBL_ENTRY)&_ZN7S5294C1D1Ev,
  (VTBL_ENTRY)&_ZN7S5294C1D0Ev,
  (VTBL_ENTRY)&_ZN7S5294C32v6Ev,
  (VTBL_ENTRY)&_ZN7S5294C22v7Ev,
  (VTBL_ENTRY)&_ZN7S5294C22v8Ev,
  (VTBL_ENTRY)&_ZN7S5294C22v9Ev,
  (VTBL_ENTRY)&_ZN7S5294C23v10Ev,
  (VTBL_ENTRY)&_ZN7S5294C23v11Ev,
  (VTBL_ENTRY)&_ZN7S5294C12v1Ev,
  (VTBL_ENTRY)&_ZN7S5294C12v2Ev,
  (VTBL_ENTRY)&_ZN7S5294C12v3Ev,
  (VTBL_ENTRY)&_ZN7S5294C12v4Ev,
  (VTBL_ENTRY)&_ZN7S5294C12v5Ev,
};
extern VTBL_ENTRY _ZTI7S5294C1[];
extern  VTBL_ENTRY _ZTV7S5294C1[];
Class_Descriptor cd_S5294C1 = {  "S5294C1", // class name
  bases_S5294C1, 2,
  &(vtc_S5294C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,24), // object size
  NSPAIRA(_ZTI7S5294C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S5294C1),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  S5213C3  {
  char s5213c3f0;
  int s5213c3f1;
  virtual  ~S5213C3(); // _ZN7S5213C3D1Ev
  virtual void  v5(); // _ZN7S5213C32v5Ev
  S5213C3(); // tgen
};
//SIG(-1 S5213C3) C1{ vd v1 Fc Fi}


 S5213C3 ::~S5213C3(){ note_dtor("S5213C3", this);}
void  S5213C3 ::v5(){vfunc_called(this, "_ZN7S5213C32v5Ev");}
S5213C3 ::S5213C3(){ note_ctor("S5213C3", this);} // tgen

static void Test_S5213C3()
{
  extern Class_Descriptor cd_S5213C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S5213C3, buf);
    S5213C3 *dp, &lv = *(dp=new (buf) S5213C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S5213C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5213C3)");
    check_field_offset(lv, s5213c3f0, ABISELECT(8,4), "S5213C3.s5213c3f0");
    check_field_offset(lv, s5213c3f1, ABISELECT(12,8), "S5213C3.s5213c3f1");
    test_class_info(&lv, &cd_S5213C3);
    dp->~S5213C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5213C3(Test_S5213C3, "S5213C3", ABISELECT(16,12));

#else // __cplusplus

extern void _ZN7S5213C3C1Ev();
extern void _ZN7S5213C3D1Ev();
Name_Map name_map_S5213C3[] = {
  NSPAIR(_ZN7S5213C3C1Ev),
  NSPAIR(_ZN7S5213C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S5213C3[];
extern void _ZN7S5213C3D1Ev();
extern void _ZN7S5213C3D0Ev();
extern void _ZN7S5213C32v5Ev();
static  VTBL_ENTRY vtc_S5213C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5213C3[0]),
  (VTBL_ENTRY)&_ZN7S5213C3D1Ev,
  (VTBL_ENTRY)&_ZN7S5213C3D0Ev,
  (VTBL_ENTRY)&_ZN7S5213C32v5Ev,
};
extern VTBL_ENTRY _ZTI7S5213C3[];
extern  VTBL_ENTRY _ZTV7S5213C3[];
Class_Descriptor cd_S5213C3 = {  "S5213C3", // class name
  0,0,//no base classes
  &(vtc_S5213C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI7S5213C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S5213C3),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  S5213C2  : S5213C3 {
  void *s5213c2f0[2];
  virtual  ~S5213C2(); // _ZN7S5213C2D1Ev
  virtual void  v6(); // _ZN7S5213C22v6Ev
  virtual void  v7(); // _ZN7S5213C22v7Ev
  virtual void  v8(); // _ZN7S5213C22v8Ev
  virtual void  v9(); // _ZN7S5213C22v9Ev
  virtual void  v10(); // _ZN7S5213C23v10Ev
  S5213C2(); // tgen
};
//SIG(-1 S5213C2) C1{ BC2{ vd v6 Fc Fi} vd v1 v2 v3 v4 v5 Fp[2]}


 S5213C2 ::~S5213C2(){ note_dtor("S5213C2", this);}
void  S5213C2 ::v6(){vfunc_called(this, "_ZN7S5213C22v6Ev");}
void  S5213C2 ::v7(){vfunc_called(this, "_ZN7S5213C22v7Ev");}
void  S5213C2 ::v8(){vfunc_called(this, "_ZN7S5213C22v8Ev");}
void  S5213C2 ::v9(){vfunc_called(this, "_ZN7S5213C22v9Ev");}
void  S5213C2 ::v10(){vfunc_called(this, "_ZN7S5213C23v10Ev");}
S5213C2 ::S5213C2(){ note_ctor("S5213C2", this);} // tgen

static void Test_S5213C2()
{
  extern Class_Descriptor cd_S5213C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,6)];
    init_test(&cd_S5213C2, buf);
    S5213C2 *dp, &lv = *(dp=new (buf) S5213C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S5213C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5213C2)");
    check_base_class_offset(lv, (S5213C3*), 0, "S5213C2");
    check_field_offset(lv, s5213c2f0, ABISELECT(16,12), "S5213C2.s5213c2f0");
    test_class_info(&lv, &cd_S5213C2);
    dp->~S5213C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5213C2(Test_S5213C2, "S5213C2", ABISELECT(32,20));

#else // __cplusplus

extern void _ZN7S5213C2C1Ev();
extern void _ZN7S5213C2D1Ev();
Name_Map name_map_S5213C2[] = {
  NSPAIR(_ZN7S5213C2C1Ev),
  NSPAIR(_ZN7S5213C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5213C3;
extern VTBL_ENTRY _ZTI7S5213C3[];
extern  VTBL_ENTRY _ZTV7S5213C3[];
static Base_Class bases_S5213C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5213C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI7S5213C2[];
extern void _ZN7S5213C2D1Ev();
extern void _ZN7S5213C2D0Ev();
extern void _ZN7S5213C32v5Ev();
extern void _ZN7S5213C22v6Ev();
extern void _ZN7S5213C22v7Ev();
extern void _ZN7S5213C22v8Ev();
extern void _ZN7S5213C22v9Ev();
extern void _ZN7S5213C23v10Ev();
static  VTBL_ENTRY vtc_S5213C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5213C2[0]),
  (VTBL_ENTRY)&_ZN7S5213C2D1Ev,
  (VTBL_ENTRY)&_ZN7S5213C2D0Ev,
  (VTBL_ENTRY)&_ZN7S5213C32v5Ev,
  (VTBL_ENTRY)&_ZN7S5213C22v6Ev,
  (VTBL_ENTRY)&_ZN7S5213C22v7Ev,
  (VTBL_ENTRY)&_ZN7S5213C22v8Ev,
  (VTBL_ENTRY)&_ZN7S5213C22v9Ev,
  (VTBL_ENTRY)&_ZN7S5213C23v10Ev,
};
extern VTBL_ENTRY _ZTI7S5213C2[];
extern  VTBL_ENTRY _ZTV7S5213C2[];
Class_Descriptor cd_S5213C2 = {  "S5213C2", // class name
  bases_S5213C2, 1,
  &(vtc_S5213C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,20), // object size
  NSPAIRA(_ZTI7S5213C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S5213C2),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
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S5213C1  : S5213C2 {
  void *s5213c1f0;
  int s5213c1f1;
  virtual  ~S5213C1(); // _ZN7S5213C1D1Ev
  virtual void  v1(); // _ZN7S5213C12v1Ev
  virtual void  v2(); // _ZN7S5213C12v2Ev
  virtual void  v3(); // _ZN7S5213C12v3Ev
  virtual void  v4(); // _ZN7S5213C12v4Ev
  S5213C1(); // tgen
};
//SIG(1 S5213C1) C1{ BC2{ BC3{ vd v5 Fc Fi} vd v6 v7 v8 v9 v10 Fp[2]} vd v1 v2 v3 v4 Fp Fi}


 S5213C1 ::~S5213C1(){ note_dtor("S5213C1", this);}
void  S5213C1 ::v1(){vfunc_called(this, "_ZN7S5213C12v1Ev");}
void  S5213C1 ::v2(){vfunc_called(this, "_ZN7S5213C12v2Ev");}
void  S5213C1 ::v3(){vfunc_called(this, "_ZN7S5213C12v3Ev");}
void  S5213C1 ::v4(){vfunc_called(this, "_ZN7S5213C12v4Ev");}
S5213C1 ::S5213C1(){ note_ctor("S5213C1", this);} // tgen

static void Test_S5213C1()
{
  extern Class_Descriptor cd_S5213C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,8)];
    init_test(&cd_S5213C1, buf);
    S5213C1 *dp, &lv = *(dp=new (buf) S5213C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,28), "sizeof(S5213C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5213C1)");
    check_base_class_offset(lv, (S5213C3*)(S5213C2*), 0, "S5213C1");
    check_base_class_offset(lv, (S5213C2*), 0, "S5213C1");
    check_field_offset(lv, s5213c1f0, ABISELECT(32,20), "S5213C1.s5213c1f0");
    check_field_offset(lv, s5213c1f1, ABISELECT(40,24), "S5213C1.s5213c1f1");
    test_class_info(&lv, &cd_S5213C1);
    dp->~S5213C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5213C1(Test_S5213C1, "S5213C1", ABISELECT(48,28));

#else // __cplusplus

extern void _ZN7S5213C1C1Ev();
extern void _ZN7S5213C1D1Ev();
Name_Map name_map_S5213C1[] = {
  NSPAIR(_ZN7S5213C1C1Ev),
  NSPAIR(_ZN7S5213C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5213C3;
extern VTBL_ENTRY _ZTI7S5213C3[];
extern  VTBL_ENTRY _ZTV7S5213C3[];
extern Class_Descriptor cd_S5213C2;
extern VTBL_ENTRY _ZTI7S5213C2[];
extern  VTBL_ENTRY _ZTV7S5213C2[];
static Base_Class bases_S5213C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5213C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S5213C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S5213C1[];
extern void _ZN7S5213C1D1Ev();
extern void _ZN7S5213C1D0Ev();
extern void _ZN7S5213C32v5Ev();
extern void _ZN7S5213C22v6Ev();
extern void _ZN7S5213C22v7Ev();
extern void _ZN7S5213C22v8Ev();
extern void _ZN7S5213C22v9Ev();
extern void _ZN7S5213C23v10Ev();
extern void _ZN7S5213C12v1Ev();
extern void _ZN7S5213C12v2Ev();
extern void _ZN7S5213C12v3Ev();
extern void _ZN7S5213C12v4Ev();
static  VTBL_ENTRY vtc_S5213C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5213C1[0]),
  (VTBL_ENTRY)&_ZN7S5213C1D1Ev,
  (VTBL_ENTRY)&_ZN7S5213C1D0Ev,
  (VTBL_ENTRY)&_ZN7S5213C32v5Ev,
  (VTBL_ENTRY)&_ZN7S5213C22v6Ev,
  (VTBL_ENTRY)&_ZN7S5213C22v7Ev,
  (VTBL_ENTRY)&_ZN7S5213C22v8Ev,
  (VTBL_ENTRY)&_ZN7S5213C22v9Ev,
  (VTBL_ENTRY)&_ZN7S5213C23v10Ev,
  (VTBL_ENTRY)&_ZN7S5213C12v1Ev,
  (VTBL_ENTRY)&_ZN7S5213C12v2Ev,
  (VTBL_ENTRY)&_ZN7S5213C12v3Ev,
  (VTBL_ENTRY)&_ZN7S5213C12v4Ev,
};
extern VTBL_ENTRY _ZTI7S5213C1[];
extern  VTBL_ENTRY _ZTV7S5213C1[];
Class_Descriptor cd_S5213C1 = {  "S5213C1", // class name
  bases_S5213C1, 2,
  &(vtc_S5213C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,28), // object size
  NSPAIRA(_ZTI7S5213C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S5213C1),14, //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  S21797C3  {
  char s21797c3f0[4];
  int s21797c3f1;
  char s21797c3f2[4640];
};
//SIG(-1 S21797C3) C1{ Fc[4] Fi Fc[4640]}



static void Test_S21797C3()
{
  {
    init_simple_test("S21797C3");
    S21797C3 lv;
    check2(sizeof(lv), 4648, "sizeof(S21797C3)");
    check2(__alignof__(lv), 4, "__alignof__(S21797C3)");
    check_field_offset(lv, s21797c3f0, 0, "S21797C3.s21797c3f0");
    check_field_offset(lv, s21797c3f1, 4, "S21797C3.s21797c3f1");
    check_field_offset(lv, s21797c3f2, 8, "S21797C3.s21797c3f2");
  }
}
static Arrange_To_Call_Me vS21797C3(Test_S21797C3, "S21797C3", 4648);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S21797C1  {
  void *s21797c1f0[2];
  ::S21579C10 s21797c1f1;
  int s21797c1f2[9];
  void *s21797c1f3;
  ::S21797C3 s21797c1f4;
  void  mf21797c1(); // _ZN8S21797C19mf21797c1Ev
  virtual  ~S21797C1(); // _ZN8S21797C1D1Ev
  S21797C1(); // tgen
};
//SIG(1 S21797C1) C1{ vd m Fp[2] FC2{ m Fp Fi[2] Fp[2]} Fi[9] Fp FC3{ Fc[4] Fi Fc[4640]}}


void  S21797C1 ::mf21797c1(){}
 S21797C1 ::~S21797C1(){ note_dtor("S21797C1", this);}
S21797C1 ::S21797C1(){ note_ctor("S21797C1", this);} // tgen

static void Test_S21797C1()
{
  extern Class_Descriptor cd_S21797C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(595,1181)];
    init_test(&cd_S21797C1, buf);
    S21797C1 *dp, &lv = *(dp=new (buf) S21797C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(4752,4720), "sizeof(S21797C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21797C1)");
    check_field_offset(lv, s21797c1f0, ABISELECT(8,4), "S21797C1.s21797c1f0");
    check_field_offset(lv, s21797c1f1, ABISELECT(24,12), "S21797C1.s21797c1f1");
    check_field_offset(lv, s21797c1f2, ABISELECT(56,32), "S21797C1.s21797c1f2");
    check_field_offset(lv, s21797c1f3, ABISELECT(96,68), "S21797C1.s21797c1f3");
    check_field_offset(lv, s21797c1f4, ABISELECT(104,72), "S21797C1.s21797c1f4");
    test_class_info(&lv, &cd_S21797C1);
    dp->~S21797C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21797C1(Test_S21797C1, "S21797C1", ABISELECT(4752,4720));

#else // __cplusplus

extern void _ZN8S21797C1C1Ev();
extern void _ZN8S21797C1D1Ev();
Name_Map name_map_S21797C1[] = {
  NSPAIR(_ZN8S21797C1C1Ev),
  NSPAIR(_ZN8S21797C1D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S21797C1[];
extern void _ZN8S21797C1D1Ev();
extern void _ZN8S21797C1D0Ev();
static  VTBL_ENTRY vtc_S21797C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S21797C1[0]),
  (VTBL_ENTRY)&_ZN8S21797C1D1Ev,
  (VTBL_ENTRY)&_ZN8S21797C1D0Ev,
};
extern VTBL_ENTRY _ZTI8S21797C1[];
extern  VTBL_ENTRY _ZTV8S21797C1[];
Class_Descriptor cd_S21797C1 = {  "S21797C1", // class name
  0,0,//no base classes
  &(vtc_S21797C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(4752,4720), // object size
  NSPAIRA(_ZTI8S21797C1),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S21797C1),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  S11102C2  {
  char s11102c2f0[12];
  int s11102c2f1[2];
  char s11102c2f2[4];
  int s11102c2f3[2];
  char s11102c2f4[4];
  int s11102c2f5[4];
  char s11102c2f6;
};
//SIG(-1 S11102C2) C1{ Fc[12] Fi[2] Fc[4] Fi[2] Fc[4] Fi[4] Fc}



static void Test_S11102C2()
{
  {
    init_simple_test("S11102C2");
    S11102C2 lv;
    check2(sizeof(lv), 56, "sizeof(S11102C2)");
    check2(__alignof__(lv), 4, "__alignof__(S11102C2)");
    check_field_offset(lv, s11102c2f0, 0, "S11102C2.s11102c2f0");
    check_field_offset(lv, s11102c2f1, 12, "S11102C2.s11102c2f1");
    check_field_offset(lv, s11102c2f2, 20, "S11102C2.s11102c2f2");
    check_field_offset(lv, s11102c2f3, 24, "S11102C2.s11102c2f3");
    check_field_offset(lv, s11102c2f4, 32, "S11102C2.s11102c2f4");
    check_field_offset(lv, s11102c2f5, 36, "S11102C2.s11102c2f5");
    check_field_offset(lv, s11102c2f6, 52, "S11102C2.s11102c2f6");
  }
}
static Arrange_To_Call_Me vS11102C2(Test_S11102C2, "S11102C2", 56);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S11102C3  {
  void *s11102c3f0;
  char s11102c3f1;
  int s11102c3f2[3];
};
//SIG(-1 S11102C3) C1{ Fp Fc Fi[3]}



static void Test_S11102C3()
{
  {
    init_simple_test("S11102C3");
    S11102C3 lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(S11102C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S11102C3)");
    check_field_offset(lv, s11102c3f0, 0, "S11102C3.s11102c3f0");
    check_field_offset(lv, s11102c3f1, ABISELECT(8,4), "S11102C3.s11102c3f1");
    check_field_offset(lv, s11102c3f2, ABISELECT(12,8), "S11102C3.s11102c3f2");
  }
}
static Arrange_To_Call_Me vS11102C3(Test_S11102C3, "S11102C3", ABISELECT(24,20));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S11102C1  {
  ::S11102C2 s11102c1f0;
  ::S11102C3 s11102c1f1;
};
//SIG(1 S11102C1) C1{ FC2{ Fc[12] Fi[2] Fc[4] Fi[2] Fc[4] Fi[4] Fc} FC3{ Fp Fc Fi[3]}}



static void Test_S11102C1()
{
  {
    init_simple_test("S11102C1");
    S11102C1 lv;
    check2(sizeof(lv), ABISELECT(80,76), "sizeof(S11102C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S11102C1)");
    check_field_offset(lv, s11102c1f0, 0, "S11102C1.s11102c1f0");
    check_field_offset(lv, s11102c1f1, 56, "S11102C1.s11102c1f1");
  }
}
static Arrange_To_Call_Me vS11102C1(Test_S11102C1, "S11102C1", ABISELECT(80,76));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S14221C1  {
  void *s14221c1f0;
  int s14221c1f1;
  void *s14221c1f2;
  int s14221c1f3;
  void *s14221c1f4;
  int s14221c1f5[4];
  void *s14221c1f6[3];
  int s14221c1f7;
  void *s14221c1f8;
  int s14221c1f9;
  void *s14221c1f10;
  int s14221c1f11;
  void *s14221c1f12;
  int s14221c1f13;
  void *s14221c1f14;
  int s14221c1f15;
  void *s14221c1f16;
  int s14221c1f17;
};
//SIG(1 S14221C1) C1{ Fp Fi Fp Fi Fp Fi[4] Fp[3] Fi Fp Fi Fp Fi Fp Fi Fp Fi Fp Fi}



static void Test_S14221C1()
{
  {
    init_simple_test("S14221C1");
    S14221C1 lv;
    check2(sizeof(lv), ABISELECT(168,92), "sizeof(S14221C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S14221C1)");
    check_field_offset(lv, s14221c1f0, 0, "S14221C1.s14221c1f0");
    check_field_offset(lv, s14221c1f1, ABISELECT(8,4), "S14221C1.s14221c1f1");
    check_field_offset(lv, s14221c1f2, ABISELECT(16,8), "S14221C1.s14221c1f2");
    check_field_offset(lv, s14221c1f3, ABISELECT(24,12), "S14221C1.s14221c1f3");
    check_field_offset(lv, s14221c1f4, ABISELECT(32,16), "S14221C1.s14221c1f4");
    check_field_offset(lv, s14221c1f5, ABISELECT(40,20), "S14221C1.s14221c1f5");
    check_field_offset(lv, s14221c1f6, ABISELECT(56,36), "S14221C1.s14221c1f6");
    check_field_offset(lv, s14221c1f7, ABISELECT(80,48), "S14221C1.s14221c1f7");
    check_field_offset(lv, s14221c1f8, ABISELECT(88,52), "S14221C1.s14221c1f8");
    check_field_offset(lv, s14221c1f9, ABISELECT(96,56), "S14221C1.s14221c1f9");
    check_field_offset(lv, s14221c1f10, ABISELECT(104,60), "S14221C1.s14221c1f10");
    check_field_offset(lv, s14221c1f11, ABISELECT(112,64), "S14221C1.s14221c1f11");
    check_field_offset(lv, s14221c1f12, ABISELECT(120,68), "S14221C1.s14221c1f12");
    check_field_offset(lv, s14221c1f13, ABISELECT(128,72), "S14221C1.s14221c1f13");
    check_field_offset(lv, s14221c1f14, ABISELECT(136,76), "S14221C1.s14221c1f14");
    check_field_offset(lv, s14221c1f15, ABISELECT(144,80), "S14221C1.s14221c1f15");
    check_field_offset(lv, s14221c1f16, ABISELECT(152,84), "S14221C1.s14221c1f16");
    check_field_offset(lv, s14221c1f17, ABISELECT(160,88), "S14221C1.s14221c1f17");
  }
}
static Arrange_To_Call_Me vS14221C1(Test_S14221C1, "S14221C1", ABISELECT(168,92));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4118C3  {
  char s4118c3f0;
  int s4118c3f1;
  virtual  ~S4118C3(); // _ZN7S4118C3D1Ev
  virtual void  v1(); // _ZN7S4118C32v1Ev
  S4118C3(); // tgen
};
//SIG(-1 S4118C3) C1{ vd v1 Fc Fi}


 S4118C3 ::~S4118C3(){ note_dtor("S4118C3", this);}
void  S4118C3 ::v1(){vfunc_called(this, "_ZN7S4118C32v1Ev");}
S4118C3 ::S4118C3(){ note_ctor("S4118C3", this);} // tgen

static void Test_S4118C3()
{
  extern Class_Descriptor cd_S4118C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S4118C3, buf);
    S4118C3 *dp, &lv = *(dp=new (buf) S4118C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S4118C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4118C3)");
    check_field_offset(lv, s4118c3f0, ABISELECT(8,4), "S4118C3.s4118c3f0");
    check_field_offset(lv, s4118c3f1, ABISELECT(12,8), "S4118C3.s4118c3f1");
    test_class_info(&lv, &cd_S4118C3);
    dp->~S4118C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4118C3(Test_S4118C3, "S4118C3", ABISELECT(16,12));

#else // __cplusplus

extern void _ZN7S4118C3C1Ev();
extern void _ZN7S4118C3D1Ev();
Name_Map name_map_S4118C3[] = {
  NSPAIR(_ZN7S4118C3C1Ev),
  NSPAIR(_ZN7S4118C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4118C3[];
extern void _ZN7S4118C3D1Ev();
extern void _ZN7S4118C3D0Ev();
extern void _ZN7S4118C32v1Ev();
static  VTBL_ENTRY vtc_S4118C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4118C3[0]),
  (VTBL_ENTRY)&_ZN7S4118C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4118C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4118C32v1Ev,
};
extern VTBL_ENTRY _ZTI7S4118C3[];
extern  VTBL_ENTRY _ZTV7S4118C3[];
Class_Descriptor cd_S4118C3 = {  "S4118C3", // class name
  0,0,//no base classes
  &(vtc_S4118C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI7S4118C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4118C3),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  S4118C2  : S4118C3 {
  int s4118c2f0[2];
  void *s4118c2f1[2];
  int s4118c2f2;
  void *s4118c2f3[2];
  int s4118c2f4[3];
  char s4118c2f5[3];
  virtual  ~S4118C2(); // _ZN7S4118C2D1Ev
  S4118C2(); // tgen
};
//SIG(-1 S4118C2) C1{ BC2{ vd v1 Fc Fi} vd Fi[2] Fp[2] Fi Fp[2] Fi[3] Fc[3]}


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

static void Test_S4118C2()
{
  extern Class_Descriptor cd_S4118C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(11,15)];
    init_test(&cd_S4118C2, buf);
    S4118C2 *dp, &lv = *(dp=new (buf) S4118C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,56), "sizeof(S4118C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4118C2)");
    check_base_class_offset(lv, (S4118C3*), 0, "S4118C2");
    check_field_offset(lv, s4118c2f0, ABISELECT(16,12), "S4118C2.s4118c2f0");
    check_field_offset(lv, s4118c2f1, ABISELECT(24,20), "S4118C2.s4118c2f1");
    check_field_offset(lv, s4118c2f2, ABISELECT(40,28), "S4118C2.s4118c2f2");
    check_field_offset(lv, s4118c2f3, ABISELECT(48,32), "S4118C2.s4118c2f3");
    check_field_offset(lv, s4118c2f4, ABISELECT(64,40), "S4118C2.s4118c2f4");
    check_field_offset(lv, s4118c2f5, ABISELECT(76,52), "S4118C2.s4118c2f5");
    test_class_info(&lv, &cd_S4118C2);
    dp->~S4118C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4118C2(Test_S4118C2, "S4118C2", ABISELECT(80,56));

#else // __cplusplus

extern void _ZN7S4118C2C1Ev();
extern void _ZN7S4118C2D1Ev();
Name_Map name_map_S4118C2[] = {
  NSPAIR(_ZN7S4118C2C1Ev),
  NSPAIR(_ZN7S4118C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4118C3;
extern VTBL_ENTRY _ZTI7S4118C3[];
extern  VTBL_ENTRY _ZTV7S4118C3[];
static Base_Class bases_S4118C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4118C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI7S4118C2[];
extern void _ZN7S4118C2D1Ev();
extern void _ZN7S4118C2D0Ev();
extern void _ZN7S4118C32v1Ev();
static  VTBL_ENTRY vtc_S4118C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4118C2[0]),
  (VTBL_ENTRY)&_ZN7S4118C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4118C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4118C32v1Ev,
};
extern VTBL_ENTRY _ZTI7S4118C2[];
extern  VTBL_ENTRY _ZTV7S4118C2[];
Class_Descriptor cd_S4118C2 = {  "S4118C2", // class name
  bases_S4118C2, 1,
  &(vtc_S4118C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(80,56), // object size
  NSPAIRA(_ZTI7S4118C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4118C2),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  S4118C1  : S4118C2 {
  virtual  ~S4118C1(); // _ZN7S4118C1D1Ev
  S4118C1(); // tgen
};
//SIG(1 S4118C1) C1{ BC2{ BC3{ vd v1 Fc Fi} vd Fi[2] Fp[2] Fi Fp[2] Fi[3] Fc[3]} vd}


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

static void Test_S4118C1()
{
  extern Class_Descriptor cd_S4118C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(11,15)];
    init_test(&cd_S4118C1, buf);
    S4118C1 *dp, &lv = *(dp=new (buf) S4118C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,56), "sizeof(S4118C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4118C1)");
    check_base_class_offset(lv, (S4118C3*)(S4118C2*), 0, "S4118C1");
    check_base_class_offset(lv, (S4118C2*), 0, "S4118C1");
    test_class_info(&lv, &cd_S4118C1);
    dp->~S4118C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4118C1(Test_S4118C1, "S4118C1", ABISELECT(80,56));

#else // __cplusplus

extern void _ZN7S4118C1C1Ev();
extern void _ZN7S4118C1D1Ev();
Name_Map name_map_S4118C1[] = {
  NSPAIR(_ZN7S4118C1C1Ev),
  NSPAIR(_ZN7S4118C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4118C3;
extern VTBL_ENTRY _ZTI7S4118C3[];
extern  VTBL_ENTRY _ZTV7S4118C3[];
extern Class_Descriptor cd_S4118C2;
extern VTBL_ENTRY _ZTI7S4118C2[];
extern  VTBL_ENTRY _ZTV7S4118C2[];
static Base_Class bases_S4118C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4118C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S4118C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S4118C1[];
extern void _ZN7S4118C1D1Ev();
extern void _ZN7S4118C1D0Ev();
extern void _ZN7S4118C32v1Ev();
static  VTBL_ENTRY vtc_S4118C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4118C1[0]),
  (VTBL_ENTRY)&_ZN7S4118C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4118C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4118C32v1Ev,
};
extern VTBL_ENTRY _ZTI7S4118C1[];
extern  VTBL_ENTRY _ZTV7S4118C1[];
Class_Descriptor cd_S4118C1 = {  "S4118C1", // class name
  bases_S4118C1, 2,
  &(vtc_S4118C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(80,56), // object size
  NSPAIRA(_ZTI7S4118C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4118C1),5, //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  S15390C1  {
  ::S1292C12 s15390c1f0;
  ::S1292C12 s15390c1f1;
  int s15390c1f2;
  void  mf15390c1(); // _ZN8S15390C19mf15390c1Ev
};
//SIG(1 S15390C1) C1{ m FC2{ BC3{ m Fc[4] FC4{ BC5{ BC6{ m Fp Fi[2]}}} Fi[2]} Fp} FC2 Fi}


void  S15390C1 ::mf15390c1(){}

static void Test_S15390C1()
{
  {
    init_simple_test("S15390C1");
    S15390C1 lv;
    check2(sizeof(lv), ABISELECT(88,60), "sizeof(S15390C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S15390C1)");
    check_field_offset(lv, s15390c1f0, 0, "S15390C1.s15390c1f0");
    check_field_offset(lv, s15390c1f1, ABISELECT(40,28), "S15390C1.s15390c1f1");
    check_field_offset(lv, s15390c1f2, ABISELECT(80,56), "S15390C1.s15390c1f2");
  }
}
static Arrange_To_Call_Me vS15390C1(Test_S15390C1, "S15390C1", ABISELECT(88,60));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S18255C3  {
  ::S3625C18_nt s18255c3f0;
  ::S3625C18_nt s18255c3f1;
  __tsi64 s18255c3f2;
  int s18255c3f3;
};
//SIG(-1 S18255C3) C1{ FC2{ m Fp Fi FC3{ m}} FC2 FL Fi}



static void Test_S18255C3()
{
  {
    init_simple_test("S18255C3");
    S18255C3 lv;
    check2(sizeof(lv), ABISELECT(48,36), "sizeof(S18255C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18255C3)");
    check_field_offset(lv, s18255c3f0, 0, "S18255C3.s18255c3f0");
    check_field_offset(lv, s18255c3f1, ABISELECT(16,12), "S18255C3.s18255c3f1");
    check_field_offset(lv, s18255c3f2, ABISELECT(32,24), "S18255C3.s18255c3f2");
    check_field_offset(lv, s18255c3f3, ABISELECT(40,32), "S18255C3.s18255c3f3");
  }
}
static Arrange_To_Call_Me vS18255C3(Test_S18255C3, "S18255C3", ABISELECT(48,36));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S18255C2  {
  __tsi64 s18255c2f0;
  ::S18255C3 s18255c2f1;
  void  mf18255c2(); // _ZN8S18255C29mf18255c2Ev
};
//SIG(-1 S18255C2) C1{ m FL FC2{ FC3{ m Fp Fi FC4{ m}} FC3 FL Fi}}


void  S18255C2 ::mf18255c2(){}

static void Test_S18255C2()
{
  {
    init_simple_test("S18255C2");
    S18255C2 lv;
    check2(sizeof(lv), ABISELECT(56,44), "sizeof(S18255C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18255C2)");
    check_field_offset(lv, s18255c2f0, 0, "S18255C2.s18255c2f0");
    check_field_offset(lv, s18255c2f1, 8, "S18255C2.s18255c2f1");
  }
}
static Arrange_To_Call_Me vS18255C2(Test_S18255C2, "S18255C2", ABISELECT(56,44));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S18255C1  {
  void *s18255c1f0[3];
  ::S18255C2 s18255c1f1;
  char s18255c1f2[2];
  void  mf18255c1(); // _ZN8S18255C19mf18255c1Ev
};
//SIG(1 S18255C1) C1{ m Fp[3] FC2{ m FL FC3{ FC4{ m Fp Fi FC5{ m}} FC4 FL Fi}} Fc[2]}


void  S18255C1 ::mf18255c1(){}

static void Test_S18255C1()
{
  {
    init_simple_test("S18255C1");
    S18255C1 lv;
    check2(sizeof(lv), ABISELECT(88,60), "sizeof(S18255C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18255C1)");
    check_field_offset(lv, s18255c1f0, 0, "S18255C1.s18255c1f0");
    check_field_offset(lv, s18255c1f1, ABISELECT(24,12), "S18255C1.s18255c1f1");
    check_field_offset(lv, s18255c1f2, ABISELECT(80,56), "S18255C1.s18255c1f2");
  }
}
static Arrange_To_Call_Me vS18255C1(Test_S18255C1, "S18255C1", ABISELECT(88,60));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4120C3  {
  char s4120c3f0;
  int s4120c3f1;
  virtual  ~S4120C3(); // _ZN7S4120C3D1Ev
  virtual void  v1(); // _ZN7S4120C32v1Ev
  S4120C3(); // tgen
};
//SIG(-1 S4120C3) C1{ vd v1 Fc Fi}


 S4120C3 ::~S4120C3(){ note_dtor("S4120C3", this);}
void  S4120C3 ::v1(){vfunc_called(this, "_ZN7S4120C32v1Ev");}
S4120C3 ::S4120C3(){ note_ctor("S4120C3", this);} // tgen

static void Test_S4120C3()
{
  extern Class_Descriptor cd_S4120C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S4120C3, buf);
    S4120C3 *dp, &lv = *(dp=new (buf) S4120C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S4120C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4120C3)");
    check_field_offset(lv, s4120c3f0, ABISELECT(8,4), "S4120C3.s4120c3f0");
    check_field_offset(lv, s4120c3f1, ABISELECT(12,8), "S4120C3.s4120c3f1");
    test_class_info(&lv, &cd_S4120C3);
    dp->~S4120C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4120C3(Test_S4120C3, "S4120C3", ABISELECT(16,12));

#else // __cplusplus

extern void _ZN7S4120C3C1Ev();
extern void _ZN7S4120C3D1Ev();
Name_Map name_map_S4120C3[] = {
  NSPAIR(_ZN7S4120C3C1Ev),
  NSPAIR(_ZN7S4120C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4120C3[];
extern void _ZN7S4120C3D1Ev();
extern void _ZN7S4120C3D0Ev();
extern void _ZN7S4120C32v1Ev();
static  VTBL_ENTRY vtc_S4120C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4120C3[0]),
  (VTBL_ENTRY)&_ZN7S4120C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4120C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4120C32v1Ev,
};
extern VTBL_ENTRY _ZTI7S4120C3[];
extern  VTBL_ENTRY _ZTV7S4120C3[];
Class_Descriptor cd_S4120C3 = {  "S4120C3", // class name
  0,0,//no base classes
  &(vtc_S4120C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI7S4120C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4120C3),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  S4120C2  : S4120C3 {
  int s4120c2f0[3];
  void *s4120c2f1[18];
  int s4120c2f2;
  void *s4120c2f3;
  int s4120c2f4[5];
  void *s4120c2f5;
  int s4120c2f6;
  virtual  ~S4120C2(); // _ZN7S4120C2D1Ev
  S4120C2(); // tgen
};
//SIG(-1 S4120C2) C1{ BC2{ vd v1 Fc Fi} vd Fi[3] Fp[18] Fi Fp Fi[5] Fp Fi}


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

static void Test_S4120C2()
{
  extern Class_Descriptor cd_S4120C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(30,34)];
    init_test(&cd_S4120C2, buf);
    S4120C2 *dp, &lv = *(dp=new (buf) S4120C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(232,132), "sizeof(S4120C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4120C2)");
    check_base_class_offset(lv, (S4120C3*), 0, "S4120C2");
    check_field_offset(lv, s4120c2f0, ABISELECT(16,12), "S4120C2.s4120c2f0");
    check_field_offset(lv, s4120c2f1, ABISELECT(32,24), "S4120C2.s4120c2f1");
    check_field_offset(lv, s4120c2f2, ABISELECT(176,96), "S4120C2.s4120c2f2");
    check_field_offset(lv, s4120c2f3, ABISELECT(184,100), "S4120C2.s4120c2f3");
    check_field_offset(lv, s4120c2f4, ABISELECT(192,104), "S4120C2.s4120c2f4");
    check_field_offset(lv, s4120c2f5, ABISELECT(216,124), "S4120C2.s4120c2f5");
    check_field_offset(lv, s4120c2f6, ABISELECT(224,128), "S4120C2.s4120c2f6");
    test_class_info(&lv, &cd_S4120C2);
    dp->~S4120C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4120C2(Test_S4120C2, "S4120C2", ABISELECT(232,132));

#else // __cplusplus

extern void _ZN7S4120C2C1Ev();
extern void _ZN7S4120C2D1Ev();
Name_Map name_map_S4120C2[] = {
  NSPAIR(_ZN7S4120C2C1Ev),
  NSPAIR(_ZN7S4120C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4120C3;
extern VTBL_ENTRY _ZTI7S4120C3[];
extern  VTBL_ENTRY _ZTV7S4120C3[];
static Base_Class bases_S4120C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4120C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI7S4120C2[];
extern void _ZN7S4120C2D1Ev();
extern void _ZN7S4120C2D0Ev();
extern void _ZN7S4120C32v1Ev();
static  VTBL_ENTRY vtc_S4120C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4120C2[0]),
  (VTBL_ENTRY)&_ZN7S4120C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4120C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4120C32v1Ev,
};
extern VTBL_ENTRY _ZTI7S4120C2[];
extern  VTBL_ENTRY _ZTV7S4120C2[];
Class_Descriptor cd_S4120C2 = {  "S4120C2", // class name
  bases_S4120C2, 1,
  &(vtc_S4120C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(232,132), // object size
  NSPAIRA(_ZTI7S4120C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4120C2),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  S4120C1  : S4120C2 {
  virtual  ~S4120C1(); // _ZN7S4120C1D1Ev
  S4120C1(); // tgen
};
//SIG(1 S4120C1) C1{ BC2{ BC3{ vd v1 Fc Fi} vd Fi[3] Fp[18] Fi Fp Fi[5] Fp Fi} vd}


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

static void Test_S4120C1()
{
  extern Class_Descriptor cd_S4120C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(30,34)];
    init_test(&cd_S4120C1, buf);
    S4120C1 *dp, &lv = *(dp=new (buf) S4120C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(232,132), "sizeof(S4120C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4120C1)");
    check_base_class_offset(lv, (S4120C3*)(S4120C2*), 0, "S4120C1");
    check_base_class_offset(lv, (S4120C2*), 0, "S4120C1");
    test_class_info(&lv, &cd_S4120C1);
    dp->~S4120C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4120C1(Test_S4120C1, "S4120C1", ABISELECT(232,132));

#else // __cplusplus

extern void _ZN7S4120C1C1Ev();
extern void _ZN7S4120C1D1Ev();
Name_Map name_map_S4120C1[] = {
  NSPAIR(_ZN7S4120C1C1Ev),
  NSPAIR(_ZN7S4120C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4120C3;
extern VTBL_ENTRY _ZTI7S4120C3[];
extern  VTBL_ENTRY _ZTV7S4120C3[];
extern Class_Descriptor cd_S4120C2;
extern VTBL_ENTRY _ZTI7S4120C2[];
extern  VTBL_ENTRY _ZTV7S4120C2[];
static Base_Class bases_S4120C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4120C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S4120C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S4120C1[];
extern void _ZN7S4120C1D1Ev();
extern void _ZN7S4120C1D0Ev();
extern void _ZN7S4120C32v1Ev();
static  VTBL_ENTRY vtc_S4120C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4120C1[0]),
  (VTBL_ENTRY)&_ZN7S4120C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4120C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4120C32v1Ev,
};
extern VTBL_ENTRY _ZTI7S4120C1[];
extern  VTBL_ENTRY _ZTV7S4120C1[];
Class_Descriptor cd_S4120C1 = {  "S4120C1", // class name
  bases_S4120C1, 2,
  &(vtc_S4120C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(232,132), // object size
  NSPAIRA(_ZTI7S4120C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4120C1),5, //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  S4122C3  {
  char s4122c3f0;
  int s4122c3f1;
  virtual  ~S4122C3(); // _ZN7S4122C3D1Ev
  virtual void  v1(); // _ZN7S4122C32v1Ev
  S4122C3(); // tgen
};
//SIG(-1 S4122C3) C1{ vd v1 Fc Fi}


 S4122C3 ::~S4122C3(){ note_dtor("S4122C3", this);}
void  S4122C3 ::v1(){vfunc_called(this, "_ZN7S4122C32v1Ev");}
S4122C3 ::S4122C3(){ note_ctor("S4122C3", this);} // tgen

static void Test_S4122C3()
{
  extern Class_Descriptor cd_S4122C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S4122C3, buf);
    S4122C3 *dp, &lv = *(dp=new (buf) S4122C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S4122C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4122C3)");
    check_field_offset(lv, s4122c3f0, ABISELECT(8,4), "S4122C3.s4122c3f0");
    check_field_offset(lv, s4122c3f1, ABISELECT(12,8), "S4122C3.s4122c3f1");
    test_class_info(&lv, &cd_S4122C3);
    dp->~S4122C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4122C3(Test_S4122C3, "S4122C3", ABISELECT(16,12));

#else // __cplusplus

extern void _ZN7S4122C3C1Ev();
extern void _ZN7S4122C3D1Ev();
Name_Map name_map_S4122C3[] = {
  NSPAIR(_ZN7S4122C3C1Ev),
  NSPAIR(_ZN7S4122C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4122C3[];
extern void _ZN7S4122C3D1Ev();
extern void _ZN7S4122C3D0Ev();
extern void _ZN7S4122C32v1Ev();
static  VTBL_ENTRY vtc_S4122C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4122C3[0]),
  (VTBL_ENTRY)&_ZN7S4122C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4122C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4122C32v1Ev,
};
extern VTBL_ENTRY _ZTI7S4122C3[];
extern  VTBL_ENTRY _ZTV7S4122C3[];
Class_Descriptor cd_S4122C3 = {  "S4122C3", // class name
  0,0,//no base classes
  &(vtc_S4122C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI7S4122C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4122C3),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  S4122C2  : S4122C3 {
  int s4122c2f0[3];
  void *s4122c2f1[4];
  int s4122c2f2;
  void *s4122c2f3[2];
  int s4122c2f4[6];
  void *s4122c2f5;
  virtual  ~S4122C2(); // _ZN7S4122C2D1Ev
  S4122C2(); // tgen
};
//SIG(-1 S4122C2) C1{ BC2{ vd v1 Fc Fi} vd Fi[3] Fp[4] Fi Fp[2] Fi[6] Fp}


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

static void Test_S4122C2()
{
  extern Class_Descriptor cd_S4122C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(16,21)];
    init_test(&cd_S4122C2, buf);
    S4122C2 *dp, &lv = *(dp=new (buf) S4122C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(120,80), "sizeof(S4122C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4122C2)");
    check_base_class_offset(lv, (S4122C3*), 0, "S4122C2");
    check_field_offset(lv, s4122c2f0, ABISELECT(16,12), "S4122C2.s4122c2f0");
    check_field_offset(lv, s4122c2f1, ABISELECT(32,24), "S4122C2.s4122c2f1");
    check_field_offset(lv, s4122c2f2, ABISELECT(64,40), "S4122C2.s4122c2f2");
    check_field_offset(lv, s4122c2f3, ABISELECT(72,44), "S4122C2.s4122c2f3");
    check_field_offset(lv, s4122c2f4, ABISELECT(88,52), "S4122C2.s4122c2f4");
    check_field_offset(lv, s4122c2f5, ABISELECT(112,76), "S4122C2.s4122c2f5");
    test_class_info(&lv, &cd_S4122C2);
    dp->~S4122C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4122C2(Test_S4122C2, "S4122C2", ABISELECT(120,80));

#else // __cplusplus

extern void _ZN7S4122C2C1Ev();
extern void _ZN7S4122C2D1Ev();
Name_Map name_map_S4122C2[] = {
  NSPAIR(_ZN7S4122C2C1Ev),
  NSPAIR(_ZN7S4122C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4122C3;
extern VTBL_ENTRY _ZTI7S4122C3[];
extern  VTBL_ENTRY _ZTV7S4122C3[];
static Base_Class bases_S4122C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4122C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI7S4122C2[];
extern void _ZN7S4122C2D1Ev();
extern void _ZN7S4122C2D0Ev();
extern void _ZN7S4122C32v1Ev();
static  VTBL_ENTRY vtc_S4122C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4122C2[0]),
  (VTBL_ENTRY)&_ZN7S4122C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4122C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4122C32v1Ev,
};
extern VTBL_ENTRY _ZTI7S4122C2[];
extern  VTBL_ENTRY _ZTV7S4122C2[];
Class_Descriptor cd_S4122C2 = {  "S4122C2", // class name
  bases_S4122C2, 1,
  &(vtc_S4122C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(120,80), // object size
  NSPAIRA(_ZTI7S4122C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4122C2),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  S4122C1  : S4122C2 {
  virtual  ~S4122C1(); // _ZN7S4122C1D1Ev
  S4122C1(); // tgen
};
//SIG(1 S4122C1) C1{ BC2{ BC3{ vd v1 Fc Fi} vd Fi[3] Fp[4] Fi Fp[2] Fi[6] Fp} vd}


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

static void Test_S4122C1()
{
  extern Class_Descriptor cd_S4122C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(16,21)];
    init_test(&cd_S4122C1, buf);
    S4122C1 *dp, &lv = *(dp=new (buf) S4122C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(120,80), "sizeof(S4122C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4122C1)");
    check_base_class_offset(lv, (S4122C3*)(S4122C2*), 0, "S4122C1");
    check_base_class_offset(lv, (S4122C2*), 0, "S4122C1");
    test_class_info(&lv, &cd_S4122C1);
    dp->~S4122C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4122C1(Test_S4122C1, "S4122C1", ABISELECT(120,80));

#else // __cplusplus

extern void _ZN7S4122C1C1Ev();
extern void _ZN7S4122C1D1Ev();
Name_Map name_map_S4122C1[] = {
  NSPAIR(_ZN7S4122C1C1Ev),
  NSPAIR(_ZN7S4122C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4122C3;
extern VTBL_ENTRY _ZTI7S4122C3[];
extern  VTBL_ENTRY _ZTV7S4122C3[];
extern Class_Descriptor cd_S4122C2;
extern VTBL_ENTRY _ZTI7S4122C2[];
extern  VTBL_ENTRY _ZTV7S4122C2[];
static Base_Class bases_S4122C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4122C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S4122C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S4122C1[];
extern void _ZN7S4122C1D1Ev();
extern void _ZN7S4122C1D0Ev();
extern void _ZN7S4122C32v1Ev();
static  VTBL_ENTRY vtc_S4122C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4122C1[0]),
  (VTBL_ENTRY)&_ZN7S4122C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4122C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4122C32v1Ev,
};
extern VTBL_ENTRY _ZTI7S4122C1[];
extern  VTBL_ENTRY _ZTV7S4122C1[];
Class_Descriptor cd_S4122C1 = {  "S4122C1", // class name
  bases_S4122C1, 2,
  &(vtc_S4122C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(120,80), // object size
  NSPAIRA(_ZTI7S4122C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4122C1),5, //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  S4688C3  {
  char s4688c3f0;
  int s4688c3f1;
  virtual  ~S4688C3(); // _ZN7S4688C3D1Ev
  virtual void  v3(); // _ZN7S4688C32v3Ev
  S4688C3(); // tgen
};
//SIG(-1 S4688C3) C1{ vd v1 Fc Fi}


 S4688C3 ::~S4688C3(){ note_dtor("S4688C3", this);}
void  S4688C3 ::v3(){vfunc_called(this, "_ZN7S4688C32v3Ev");}
S4688C3 ::S4688C3(){ note_ctor("S4688C3", this);} // tgen

static void Test_S4688C3()
{
  extern Class_Descriptor cd_S4688C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S4688C3, buf);
    S4688C3 *dp, &lv = *(dp=new (buf) S4688C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S4688C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4688C3)");
    check_field_offset(lv, s4688c3f0, ABISELECT(8,4), "S4688C3.s4688c3f0");
    check_field_offset(lv, s4688c3f1, ABISELECT(12,8), "S4688C3.s4688c3f1");
    test_class_info(&lv, &cd_S4688C3);
    dp->~S4688C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4688C3(Test_S4688C3, "S4688C3", ABISELECT(16,12));

#else // __cplusplus

extern void _ZN7S4688C3C1Ev();
extern void _ZN7S4688C3D1Ev();
Name_Map name_map_S4688C3[] = {
  NSPAIR(_ZN7S4688C3C1Ev),
  NSPAIR(_ZN7S4688C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4688C3[];
extern void _ZN7S4688C3D1Ev();
extern void _ZN7S4688C3D0Ev();
extern void _ZN7S4688C32v3Ev();
static  VTBL_ENTRY vtc_S4688C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4688C3[0]),
  (VTBL_ENTRY)&_ZN7S4688C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4688C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4688C32v3Ev,
};
extern VTBL_ENTRY _ZTI7S4688C3[];
extern  VTBL_ENTRY _ZTV7S4688C3[];
Class_Descriptor cd_S4688C3 = {  "S4688C3", // class name
  0,0,//no base classes
  &(vtc_S4688C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI7S4688C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4688C3),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  S4688C2  : S4688C3 {
  void *s4688c2f0;
  virtual  ~S4688C2(); // _ZN7S4688C2D1Ev
  virtual void  v4(); // _ZN7S4688C22v4Ev
  virtual void  v5(); // _ZN7S4688C22v5Ev
  S4688C2(); // tgen
};
//SIG(-1 S4688C2) C1{ BC2{ vd v3 Fc Fi} vd v1 v2 Fp}


 S4688C2 ::~S4688C2(){ note_dtor("S4688C2", this);}
void  S4688C2 ::v4(){vfunc_called(this, "_ZN7S4688C22v4Ev");}
void  S4688C2 ::v5(){vfunc_called(this, "_ZN7S4688C22v5Ev");}
S4688C2 ::S4688C2(){ note_ctor("S4688C2", this);} // tgen

static void Test_S4688C2()
{
  extern Class_Descriptor cd_S4688C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,5)];
    init_test(&cd_S4688C2, buf);
    S4688C2 *dp, &lv = *(dp=new (buf) S4688C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S4688C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4688C2)");
    check_base_class_offset(lv, (S4688C3*), 0, "S4688C2");
    check_field_offset(lv, s4688c2f0, ABISELECT(16,12), "S4688C2.s4688c2f0");
    test_class_info(&lv, &cd_S4688C2);
    dp->~S4688C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4688C2(Test_S4688C2, "S4688C2", ABISELECT(24,16));

#else // __cplusplus

extern void _ZN7S4688C2C1Ev();
extern void _ZN7S4688C2D1Ev();
Name_Map name_map_S4688C2[] = {
  NSPAIR(_ZN7S4688C2C1Ev),
  NSPAIR(_ZN7S4688C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4688C3;
extern VTBL_ENTRY _ZTI7S4688C3[];
extern  VTBL_ENTRY _ZTV7S4688C3[];
static Base_Class bases_S4688C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4688C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI7S4688C2[];
extern void _ZN7S4688C2D1Ev();
extern void _ZN7S4688C2D0Ev();
extern void _ZN7S4688C32v3Ev();
extern void _ZN7S4688C22v4Ev();
extern void _ZN7S4688C22v5Ev();
static  VTBL_ENTRY vtc_S4688C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4688C2[0]),
  (VTBL_ENTRY)&_ZN7S4688C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4688C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4688C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4688C22v4Ev,
  (VTBL_ENTRY)&_ZN7S4688C22v5Ev,
};
extern VTBL_ENTRY _ZTI7S4688C2[];
extern  VTBL_ENTRY _ZTV7S4688C2[];
Class_Descriptor cd_S4688C2 = {  "S4688C2", // class name
  bases_S4688C2, 1,
  &(vtc_S4688C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,16), // object size
  NSPAIRA(_ZTI7S4688C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4688C2),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  S4688C1  : S4688C2 {
  void *s4688c1f0[2];
  int s4688c1f1[4];
  char s4688c1f2;
  virtual  ~S4688C1(); // _ZN7S4688C1D1Ev
  virtual void  v1(); // _ZN7S4688C12v1Ev
  virtual void  v2(); // _ZN7S4688C12v2Ev
  S4688C1(); // tgen
};
//SIG(1 S4688C1) C1{ BC2{ BC3{ vd v3 Fc Fi} vd v4 v5 Fp} vd v1 v2 Fp[2] Fi[4] Fc}


 S4688C1 ::~S4688C1(){ note_dtor("S4688C1", this);}
void  S4688C1 ::v1(){vfunc_called(this, "_ZN7S4688C12v1Ev");}
void  S4688C1 ::v2(){vfunc_called(this, "_ZN7S4688C12v2Ev");}
S4688C1 ::S4688C1(){ note_ctor("S4688C1", this);} // tgen

static void Test_S4688C1()
{
  extern Class_Descriptor cd_S4688C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(9,12)];
    init_test(&cd_S4688C1, buf);
    S4688C1 *dp, &lv = *(dp=new (buf) S4688C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,44), "sizeof(S4688C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4688C1)");
    check_base_class_offset(lv, (S4688C3*)(S4688C2*), 0, "S4688C1");
    check_base_class_offset(lv, (S4688C2*), 0, "S4688C1");
    check_field_offset(lv, s4688c1f0, ABISELECT(24,16), "S4688C1.s4688c1f0");
    check_field_offset(lv, s4688c1f1, ABISELECT(40,24), "S4688C1.s4688c1f1");
    check_field_offset(lv, s4688c1f2, ABISELECT(56,40), "S4688C1.s4688c1f2");
    test_class_info(&lv, &cd_S4688C1);
    dp->~S4688C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4688C1(Test_S4688C1, "S4688C1", ABISELECT(64,44));

#else // __cplusplus

extern void _ZN7S4688C1C1Ev();
extern void _ZN7S4688C1D1Ev();
Name_Map name_map_S4688C1[] = {
  NSPAIR(_ZN7S4688C1C1Ev),
  NSPAIR(_ZN7S4688C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4688C3;
extern VTBL_ENTRY _ZTI7S4688C3[];
extern  VTBL_ENTRY _ZTV7S4688C3[];
extern Class_Descriptor cd_S4688C2;
extern VTBL_ENTRY _ZTI7S4688C2[];
extern  VTBL_ENTRY _ZTV7S4688C2[];
static Base_Class bases_S4688C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4688C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S4688C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S4688C1[];
extern void _ZN7S4688C1D1Ev();
extern void _ZN7S4688C1D0Ev();
extern void _ZN7S4688C32v3Ev();
extern void _ZN7S4688C22v4Ev();
extern void _ZN7S4688C22v5Ev();
extern void _ZN7S4688C12v1Ev();
extern void _ZN7S4688C12v2Ev();
static  VTBL_ENTRY vtc_S4688C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4688C1[0]),
  (VTBL_ENTRY)&_ZN7S4688C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4688C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4688C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4688C22v4Ev,
  (VTBL_ENTRY)&_ZN7S4688C22v5Ev,
  (VTBL_ENTRY)&_ZN7S4688C12v1Ev,
  (VTBL_ENTRY)&_ZN7S4688C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S4688C1[];
extern  VTBL_ENTRY _ZTV7S4688C1[];
Class_Descriptor cd_S4688C1 = {  "S4688C1", // class name
  bases_S4688C1, 2,
  &(vtc_S4688C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(64,44), // object size
  NSPAIRA(_ZTI7S4688C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4688C1),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  S9102C2  {
  virtual  ~S9102C2(); // _ZN7S9102C2D1Ev
  virtual void  v2(); // _ZN7S9102C22v2Ev
  S9102C2(); // tgen
};
//SIG(-1 S9102C2) C1{ vd v1}


 S9102C2 ::~S9102C2(){ note_dtor("S9102C2", this);}
void  S9102C2 ::v2(){vfunc_called(this, "_ZN7S9102C22v2Ev");}
S9102C2 ::S9102C2(){ note_ctor("S9102C2", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S9102C2C1Ev();
extern void _ZN7S9102C2D1Ev();
Name_Map name_map_S9102C2[] = {
  NSPAIR(_ZN7S9102C2C1Ev),
  NSPAIR(_ZN7S9102C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S9102C2[];
extern void _ZN7S9102C2D1Ev();
extern void _ZN7S9102C2D0Ev();
extern void _ZN7S9102C22v2Ev();
static  VTBL_ENTRY vtc_S9102C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9102C2[0]),
  (VTBL_ENTRY)&_ZN7S9102C2D1Ev,
  (VTBL_ENTRY)&_ZN7S9102C2D0Ev,
  (VTBL_ENTRY)&_ZN7S9102C22v2Ev,
};
extern VTBL_ENTRY _ZTI7S9102C2[];
extern  VTBL_ENTRY _ZTV7S9102C2[];
Class_Descriptor cd_S9102C2 = {  "S9102C2", // class name
  0,0,//no base classes
  &(vtc_S9102C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S9102C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S9102C2),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  S9102C1  : S9102C2 {
  void *s9102c1f0[2];
  ::S21579C10 s9102c1f1;
  int s9102c1f2[3];
  void *s9102c1f3[2];
  virtual  ~S9102C1(); // _ZN7S9102C1D1Ev
  virtual void  v1(); // _ZN7S9102C12v1Ev
  S9102C1(); // tgen
};
//SIG(1 S9102C1) C1{ BC2{ vd v2} vd v1 Fp[2] FC3{ m Fp Fi[2] Fp[2]} Fi[3] Fp[2]}


 S9102C1 ::~S9102C1(){ note_dtor("S9102C1", this);}
void  S9102C1 ::v1(){vfunc_called(this, "_ZN7S9102C12v1Ev");}
S9102C1 ::S9102C1(){ note_ctor("S9102C1", this);} // tgen

static void Test_S9102C1()
{
  extern Class_Descriptor cd_S9102C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(12,14)];
    init_test(&cd_S9102C1, buf);
    S9102C1 *dp, &lv = *(dp=new (buf) S9102C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(88,52), "sizeof(S9102C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9102C1)");
    check_base_class_offset(lv, (S9102C2*), 0, "S9102C1");
    check_field_offset(lv, s9102c1f0, ABISELECT(8,4), "S9102C1.s9102c1f0");
    check_field_offset(lv, s9102c1f1, ABISELECT(24,12), "S9102C1.s9102c1f1");
    check_field_offset(lv, s9102c1f2, ABISELECT(56,32), "S9102C1.s9102c1f2");
    check_field_offset(lv, s9102c1f3, ABISELECT(72,44), "S9102C1.s9102c1f3");
    test_class_info(&lv, &cd_S9102C1);
    dp->~S9102C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9102C1(Test_S9102C1, "S9102C1", ABISELECT(88,52));

#else // __cplusplus

extern void _ZN7S9102C1C1Ev();
extern void _ZN7S9102C1D1Ev();
Name_Map name_map_S9102C1[] = {
  NSPAIR(_ZN7S9102C1C1Ev),
  NSPAIR(_ZN7S9102C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S9102C2;
extern VTBL_ENTRY _ZTI7S9102C2[];
extern  VTBL_ENTRY _ZTV7S9102C2[];
static Base_Class bases_S9102C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S9102C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI7S9102C1[];
extern void _ZN7S9102C1D1Ev();
extern void _ZN7S9102C1D0Ev();
extern void _ZN7S9102C22v2Ev();
extern void _ZN7S9102C12v1Ev();
static  VTBL_ENTRY vtc_S9102C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9102C1[0]),
  (VTBL_ENTRY)&_ZN7S9102C1D1Ev,
  (VTBL_ENTRY)&_ZN7S9102C1D0Ev,
  (VTBL_ENTRY)&_ZN7S9102C22v2Ev,
  (VTBL_ENTRY)&_ZN7S9102C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S9102C1[];
extern  VTBL_ENTRY _ZTV7S9102C1[];
Class_Descriptor cd_S9102C1 = {  "S9102C1", // class name
  bases_S9102C1, 1,
  &(vtc_S9102C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(88,52), // object size
  NSPAIRA(_ZTI7S9102C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S9102C1),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  S18162C2  {
  ::S15028C7_nt s18162c2f0;
  ::S3625C33_nt s18162c2f1;
  void  mf18162c2(); // _ZN8S18162C29mf18162c2Ev
};
//SIG(-1 S18162C2) C1{ m FC2{ FC3{ Fc[20]} Fc[16]} FC4{ m Fp}}


void  S18162C2 ::mf18162c2(){}

static void Test_S18162C2()
{
  {
    init_simple_test("S18162C2");
    S18162C2 lv;
    check2(sizeof(lv), ABISELECT(48,40), "sizeof(S18162C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18162C2)");
    check_field_offset(lv, s18162c2f0, 0, "S18162C2.s18162c2f0");
    check_field_offset(lv, s18162c2f1, ABISELECT(40,36), "S18162C2.s18162c2f1");
  }
}
static Arrange_To_Call_Me vS18162C2(Test_S18162C2, "S18162C2", ABISELECT(48,40));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S18162C1  {
  void *s18162c1f0[3];
  ::S18162C2 s18162c1f1;
  char s18162c1f2[2];
  void  mf18162c1(); // _ZN8S18162C19mf18162c1Ev
};
//SIG(1 S18162C1) C1{ m Fp[3] FC2{ m FC3{ FC4{ Fc[20]} Fc[16]} FC5{ m Fp}} Fc[2]}


void  S18162C1 ::mf18162c1(){}

static void Test_S18162C1()
{
  {
    init_simple_test("S18162C1");
    S18162C1 lv;
    check2(sizeof(lv), ABISELECT(80,56), "sizeof(S18162C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18162C1)");
    check_field_offset(lv, s18162c1f0, 0, "S18162C1.s18162c1f0");
    check_field_offset(lv, s18162c1f1, ABISELECT(24,12), "S18162C1.s18162c1f1");
    check_field_offset(lv, s18162c1f2, ABISELECT(72,52), "S18162C1.s18162c1f2");
  }
}
static Arrange_To_Call_Me vS18162C1(Test_S18162C1, "S18162C1", ABISELECT(80,56));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S9103C2  {
  virtual  ~S9103C2(); // _ZN7S9103C2D1Ev
  virtual void  v2(); // _ZN7S9103C22v2Ev
  S9103C2(); // tgen
};
//SIG(-1 S9103C2) C1{ vd v1}


 S9103C2 ::~S9103C2(){ note_dtor("S9103C2", this);}
void  S9103C2 ::v2(){vfunc_called(this, "_ZN7S9103C22v2Ev");}
S9103C2 ::S9103C2(){ note_ctor("S9103C2", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S9103C2C1Ev();
extern void _ZN7S9103C2D1Ev();
Name_Map name_map_S9103C2[] = {
  NSPAIR(_ZN7S9103C2C1Ev),
  NSPAIR(_ZN7S9103C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S9103C2[];
extern void _ZN7S9103C2D1Ev();
extern void _ZN7S9103C2D0Ev();
extern void _ZN7S9103C22v2Ev();
static  VTBL_ENTRY vtc_S9103C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9103C2[0]),
  (VTBL_ENTRY)&_ZN7S9103C2D1Ev,
  (VTBL_ENTRY)&_ZN7S9103C2D0Ev,
  (VTBL_ENTRY)&_ZN7S9103C22v2Ev,
};
extern VTBL_ENTRY _ZTI7S9103C2[];
extern  VTBL_ENTRY _ZTV7S9103C2[];
Class_Descriptor cd_S9103C2 = {  "S9103C2", // class name
  0,0,//no base classes
  &(vtc_S9103C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S9103C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S9103C2),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  S9103C1  : S9103C2 {
  void *s9103c1f0[2];
  ::S21579C10 s9103c1f1;
  int s9103c1f2[3];
  void *s9103c1f3;
  virtual  ~S9103C1(); // _ZN7S9103C1D1Ev
  virtual void  v1(); // _ZN7S9103C12v1Ev
  S9103C1(); // tgen
};
//SIG(1 S9103C1) C1{ BC2{ vd v2} vd v1 Fp[2] FC3{ m Fp Fi[2] Fp[2]} Fi[3] Fp}


 S9103C1 ::~S9103C1(){ note_dtor("S9103C1", this);}
void  S9103C1 ::v1(){vfunc_called(this, "_ZN7S9103C12v1Ev");}
S9103C1 ::S9103C1(){ note_ctor("S9103C1", this);} // tgen

static void Test_S9103C1()
{
  extern Class_Descriptor cd_S9103C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(11,13)];
    init_test(&cd_S9103C1, buf);
    S9103C1 *dp, &lv = *(dp=new (buf) S9103C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,48), "sizeof(S9103C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9103C1)");
    check_base_class_offset(lv, (S9103C2*), 0, "S9103C1");
    check_field_offset(lv, s9103c1f0, ABISELECT(8,4), "S9103C1.s9103c1f0");
    check_field_offset(lv, s9103c1f1, ABISELECT(24,12), "S9103C1.s9103c1f1");
    check_field_offset(lv, s9103c1f2, ABISELECT(56,32), "S9103C1.s9103c1f2");
    check_field_offset(lv, s9103c1f3, ABISELECT(72,44), "S9103C1.s9103c1f3");
    test_class_info(&lv, &cd_S9103C1);
    dp->~S9103C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9103C1(Test_S9103C1, "S9103C1", ABISELECT(80,48));

#else // __cplusplus

extern void _ZN7S9103C1C1Ev();
extern void _ZN7S9103C1D1Ev();
Name_Map name_map_S9103C1[] = {
  NSPAIR(_ZN7S9103C1C1Ev),
  NSPAIR(_ZN7S9103C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S9103C2;
extern VTBL_ENTRY _ZTI7S9103C2[];
extern  VTBL_ENTRY _ZTV7S9103C2[];
static Base_Class bases_S9103C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S9103C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI7S9103C1[];
extern void _ZN7S9103C1D1Ev();
extern void _ZN7S9103C1D0Ev();
extern void _ZN7S9103C22v2Ev();
extern void _ZN7S9103C12v1Ev();
static  VTBL_ENTRY vtc_S9103C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9103C1[0]),
  (VTBL_ENTRY)&_ZN7S9103C1D1Ev,
  (VTBL_ENTRY)&_ZN7S9103C1D0Ev,
  (VTBL_ENTRY)&_ZN7S9103C22v2Ev,
  (VTBL_ENTRY)&_ZN7S9103C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S9103C1[];
extern  VTBL_ENTRY _ZTV7S9103C1[];
Class_Descriptor cd_S9103C1 = {  "S9103C1", // class name
  bases_S9103C1, 1,
  &(vtc_S9103C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(80,48), // object size
  NSPAIRA(_ZTI7S9103C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S9103C1),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  S11268C2  {
  ::S15028C12 s11268c2f0;
  char s11268c2f1[128];
};
//SIG(-1 S11268C2) C1{ FC2{ FC3{ FC4{ Fc[20]} Fc[16]} FC5{ FL}} Fc[128]}



static void Test_S11268C2()
{
  {
    init_simple_test("S11268C2");
    S11268C2 lv;
    check2(sizeof(lv), ABISELECT(176,172), "sizeof(S11268C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S11268C2)");
    check_field_offset(lv, s11268c2f0, 0, "S11268C2.s11268c2f0");
    check_field_offset(lv, s11268c2f1, ABISELECT(48,44), "S11268C2.s11268c2f1");
  }
}
static Arrange_To_Call_Me vS11268C2(Test_S11268C2, "S11268C2", ABISELECT(176,172));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S11268C1  {
  ::S11268C2 s11268c1f0;
  char s11268c1f1[4];
};
//SIG(1 S11268C1) C1{ FC2{ FC3{ FC4{ FC5{ Fc[20]} Fc[16]} FC6{ FL}} Fc[128]} Fc[4]}



static void Test_S11268C1()
{
  {
    init_simple_test("S11268C1");
    S11268C1 lv;
    check2(sizeof(lv), ABISELECT(184,176), "sizeof(S11268C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S11268C1)");
    check_field_offset(lv, s11268c1f0, 0, "S11268C1.s11268c1f0");
    check_field_offset(lv, s11268c1f1, ABISELECT(176,172), "S11268C1.s11268c1f1");
  }
}
static Arrange_To_Call_Me vS11268C1(Test_S11268C1, "S11268C1", ABISELECT(184,176));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S11267C2  {
  ::S15027C12 s11267c2f0;
  char s11267c2f1[128];
};
//SIG(-1 S11267C2) C1{ FC2{ FC3{ FC4{ Fc[20]} Fc[16]} FC5{ Fl}} Fc[128]}



static void Test_S11267C2()
{
  {
    init_simple_test("S11267C2");
    S11267C2 lv;
    check2(sizeof(lv), ABISELECT(176,168), "sizeof(S11267C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S11267C2)");
    check_field_offset(lv, s11267c2f0, 0, "S11267C2.s11267c2f0");
    check_field_offset(lv, s11267c2f1, ABISELECT(48,40), "S11267C2.s11267c2f1");
  }
}
static Arrange_To_Call_Me vS11267C2(Test_S11267C2, "S11267C2", ABISELECT(176,168));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S11267C1  {
  ::S11267C2 s11267c1f0;
  char s11267c1f1[4];
};
//SIG(1 S11267C1) C1{ FC2{ FC3{ FC4{ FC5{ Fc[20]} Fc[16]} FC6{ Fl}} Fc[128]} Fc[4]}



static void Test_S11267C1()
{
  {
    init_simple_test("S11267C1");
    S11267C1 lv;
    check2(sizeof(lv), ABISELECT(184,172), "sizeof(S11267C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S11267C1)");
    check_field_offset(lv, s11267c1f0, 0, "S11267C1.s11267c1f0");
    check_field_offset(lv, s11267c1f1, ABISELECT(176,168), "S11267C1.s11267c1f1");
  }
}
static Arrange_To_Call_Me vS11267C1(Test_S11267C1, "S11267C1", ABISELECT(184,172));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4687C3  {
  char s4687c3f0;
  int s4687c3f1;
  virtual  ~S4687C3(); // _ZN7S4687C3D1Ev
  virtual void  v3(); // _ZN7S4687C32v3Ev
  S4687C3(); // tgen
};
//SIG(-1 S4687C3) C1{ vd v1 Fc Fi}


 S4687C3 ::~S4687C3(){ note_dtor("S4687C3", this);}
void  S4687C3 ::v3(){vfunc_called(this, "_ZN7S4687C32v3Ev");}
S4687C3 ::S4687C3(){ note_ctor("S4687C3", this);} // tgen

static void Test_S4687C3()
{
  extern Class_Descriptor cd_S4687C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S4687C3, buf);
    S4687C3 *dp, &lv = *(dp=new (buf) S4687C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S4687C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4687C3)");
    check_field_offset(lv, s4687c3f0, ABISELECT(8,4), "S4687C3.s4687c3f0");
    check_field_offset(lv, s4687c3f1, ABISELECT(12,8), "S4687C3.s4687c3f1");
    test_class_info(&lv, &cd_S4687C3);
    dp->~S4687C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4687C3(Test_S4687C3, "S4687C3", ABISELECT(16,12));

#else // __cplusplus

extern void _ZN7S4687C3C1Ev();
extern void _ZN7S4687C3D1Ev();
Name_Map name_map_S4687C3[] = {
  NSPAIR(_ZN7S4687C3C1Ev),
  NSPAIR(_ZN7S4687C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4687C3[];
extern void _ZN7S4687C3D1Ev();
extern void _ZN7S4687C3D0Ev();
extern void _ZN7S4687C32v3Ev();
static  VTBL_ENTRY vtc_S4687C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4687C3[0]),
  (VTBL_ENTRY)&_ZN7S4687C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4687C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4687C32v3Ev,
};
extern VTBL_ENTRY _ZTI7S4687C3[];
extern  VTBL_ENTRY _ZTV7S4687C3[];
Class_Descriptor cd_S4687C3 = {  "S4687C3", // class name
  0,0,//no base classes
  &(vtc_S4687C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI7S4687C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4687C3),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  S4687C2  : S4687C3 {
  void *s4687c2f0;
  virtual  ~S4687C2(); // _ZN7S4687C2D1Ev
  virtual void  v4(); // _ZN7S4687C22v4Ev
  virtual void  v5(); // _ZN7S4687C22v5Ev
  S4687C2(); // tgen
};
//SIG(-1 S4687C2) C1{ BC2{ vd v3 Fc Fi} vd v1 v2 Fp}


 S4687C2 ::~S4687C2(){ note_dtor("S4687C2", this);}
void  S4687C2 ::v4(){vfunc_called(this, "_ZN7S4687C22v4Ev");}
void  S4687C2 ::v5(){vfunc_called(this, "_ZN7S4687C22v5Ev");}
S4687C2 ::S4687C2(){ note_ctor("S4687C2", this);} // tgen

static void Test_S4687C2()
{
  extern Class_Descriptor cd_S4687C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,5)];
    init_test(&cd_S4687C2, buf);
    S4687C2 *dp, &lv = *(dp=new (buf) S4687C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S4687C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4687C2)");
    check_base_class_offset(lv, (S4687C3*), 0, "S4687C2");
    check_field_offset(lv, s4687c2f0, ABISELECT(16,12), "S4687C2.s4687c2f0");
    test_class_info(&lv, &cd_S4687C2);
    dp->~S4687C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4687C2(Test_S4687C2, "S4687C2", ABISELECT(24,16));

#else // __cplusplus

extern void _ZN7S4687C2C1Ev();
extern void _ZN7S4687C2D1Ev();
Name_Map name_map_S4687C2[] = {
  NSPAIR(_ZN7S4687C2C1Ev),
  NSPAIR(_ZN7S4687C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4687C3;
extern VTBL_ENTRY _ZTI7S4687C3[];
extern  VTBL_ENTRY _ZTV7S4687C3[];
static Base_Class bases_S4687C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4687C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI7S4687C2[];
extern void _ZN7S4687C2D1Ev();
extern void _ZN7S4687C2D0Ev();
extern void _ZN7S4687C32v3Ev();
extern void _ZN7S4687C22v4Ev();
extern void _ZN7S4687C22v5Ev();
static  VTBL_ENTRY vtc_S4687C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4687C2[0]),
  (VTBL_ENTRY)&_ZN7S4687C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4687C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4687C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4687C22v4Ev,
  (VTBL_ENTRY)&_ZN7S4687C22v5Ev,
};
extern VTBL_ENTRY _ZTI7S4687C2[];
extern  VTBL_ENTRY _ZTV7S4687C2[];
Class_Descriptor cd_S4687C2 = {  "S4687C2", // class name
  bases_S4687C2, 1,
  &(vtc_S4687C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,16), // object size
  NSPAIRA(_ZTI7S4687C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4687C2),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  S4687C1  : S4687C2 {
  void *s4687c1f0;
  int s4687c1f1[3];
  virtual  ~S4687C1(); // _ZN7S4687C1D1Ev
  virtual void  v1(); // _ZN7S4687C12v1Ev
  virtual void  v2(); // _ZN7S4687C12v2Ev
  S4687C1(); // tgen
};
//SIG(1 S4687C1) C1{ BC2{ BC3{ vd v3 Fc Fi} vd v4 v5 Fp} vd v1 v2 Fp Fi[3]}


 S4687C1 ::~S4687C1(){ note_dtor("S4687C1", this);}
void  S4687C1 ::v1(){vfunc_called(this, "_ZN7S4687C12v1Ev");}
void  S4687C1 ::v2(){vfunc_called(this, "_ZN7S4687C12v2Ev");}
S4687C1 ::S4687C1(){ note_ctor("S4687C1", this);} // tgen

static void Test_S4687C1()
{
  extern Class_Descriptor cd_S4687C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,9)];
    init_test(&cd_S4687C1, buf);
    S4687C1 *dp, &lv = *(dp=new (buf) S4687C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S4687C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4687C1)");
    check_base_class_offset(lv, (S4687C3*)(S4687C2*), 0, "S4687C1");
    check_base_class_offset(lv, (S4687C2*), 0, "S4687C1");
    check_field_offset(lv, s4687c1f0, ABISELECT(24,16), "S4687C1.s4687c1f0");
    check_field_offset(lv, s4687c1f1, ABISELECT(32,20), "S4687C1.s4687c1f1");
    test_class_info(&lv, &cd_S4687C1);
    dp->~S4687C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4687C1(Test_S4687C1, "S4687C1", ABISELECT(48,32));

#else // __cplusplus

extern void _ZN7S4687C1C1Ev();
extern void _ZN7S4687C1D1Ev();
Name_Map name_map_S4687C1[] = {
  NSPAIR(_ZN7S4687C1C1Ev),
  NSPAIR(_ZN7S4687C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4687C3;
extern VTBL_ENTRY _ZTI7S4687C3[];
extern  VTBL_ENTRY _ZTV7S4687C3[];
extern Class_Descriptor cd_S4687C2;
extern VTBL_ENTRY _ZTI7S4687C2[];
extern  VTBL_ENTRY _ZTV7S4687C2[];
static Base_Class bases_S4687C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4687C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S4687C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S4687C1[];
extern void _ZN7S4687C1D1Ev();
extern void _ZN7S4687C1D0Ev();
extern void _ZN7S4687C32v3Ev();
extern void _ZN7S4687C22v4Ev();
extern void _ZN7S4687C22v5Ev();
extern void _ZN7S4687C12v1Ev();
extern void _ZN7S4687C12v2Ev();
static  VTBL_ENTRY vtc_S4687C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4687C1[0]),
  (VTBL_ENTRY)&_ZN7S4687C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4687C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4687C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4687C22v4Ev,
  (VTBL_ENTRY)&_ZN7S4687C22v5Ev,
  (VTBL_ENTRY)&_ZN7S4687C12v1Ev,
  (VTBL_ENTRY)&_ZN7S4687C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S4687C1[];
extern  VTBL_ENTRY _ZTV7S4687C1[];
Class_Descriptor cd_S4687C1 = {  "S4687C1", // class name
  bases_S4687C1, 2,
  &(vtc_S4687C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI7S4687C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4687C1),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  S4686C3  {
  char s4686c3f0;
  int s4686c3f1;
  virtual  ~S4686C3(); // _ZN7S4686C3D1Ev
  virtual void  v3(); // _ZN7S4686C32v3Ev
  S4686C3(); // tgen
};
//SIG(-1 S4686C3) C1{ vd v1 Fc Fi}


 S4686C3 ::~S4686C3(){ note_dtor("S4686C3", this);}
void  S4686C3 ::v3(){vfunc_called(this, "_ZN7S4686C32v3Ev");}
S4686C3 ::S4686C3(){ note_ctor("S4686C3", this);} // tgen

static void Test_S4686C3()
{
  extern Class_Descriptor cd_S4686C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S4686C3, buf);
    S4686C3 *dp, &lv = *(dp=new (buf) S4686C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S4686C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4686C3)");
    check_field_offset(lv, s4686c3f0, ABISELECT(8,4), "S4686C3.s4686c3f0");
    check_field_offset(lv, s4686c3f1, ABISELECT(12,8), "S4686C3.s4686c3f1");
    test_class_info(&lv, &cd_S4686C3);
    dp->~S4686C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4686C3(Test_S4686C3, "S4686C3", ABISELECT(16,12));

#else // __cplusplus

extern void _ZN7S4686C3C1Ev();
extern void _ZN7S4686C3D1Ev();
Name_Map name_map_S4686C3[] = {
  NSPAIR(_ZN7S4686C3C1Ev),
  NSPAIR(_ZN7S4686C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4686C3[];
extern void _ZN7S4686C3D1Ev();
extern void _ZN7S4686C3D0Ev();
extern void _ZN7S4686C32v3Ev();
static  VTBL_ENTRY vtc_S4686C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4686C3[0]),
  (VTBL_ENTRY)&_ZN7S4686C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4686C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4686C32v3Ev,
};
extern VTBL_ENTRY _ZTI7S4686C3[];
extern  VTBL_ENTRY _ZTV7S4686C3[];
Class_Descriptor cd_S4686C3 = {  "S4686C3", // class name
  0,0,//no base classes
  &(vtc_S4686C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI7S4686C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4686C3),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  S4686C2  : S4686C3 {
  void *s4686c2f0;
  virtual  ~S4686C2(); // _ZN7S4686C2D1Ev
  virtual void  v4(); // _ZN7S4686C22v4Ev
  virtual void  v5(); // _ZN7S4686C22v5Ev
  S4686C2(); // tgen
};
//SIG(-1 S4686C2) C1{ BC2{ vd v3 Fc Fi} vd v1 v2 Fp}


 S4686C2 ::~S4686C2(){ note_dtor("S4686C2", this);}
void  S4686C2 ::v4(){vfunc_called(this, "_ZN7S4686C22v4Ev");}
void  S4686C2 ::v5(){vfunc_called(this, "_ZN7S4686C22v5Ev");}
S4686C2 ::S4686C2(){ note_ctor("S4686C2", this);} // tgen

static void Test_S4686C2()
{
  extern Class_Descriptor cd_S4686C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,5)];
    init_test(&cd_S4686C2, buf);
    S4686C2 *dp, &lv = *(dp=new (buf) S4686C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S4686C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4686C2)");
    check_base_class_offset(lv, (S4686C3*), 0, "S4686C2");
    check_field_offset(lv, s4686c2f0, ABISELECT(16,12), "S4686C2.s4686c2f0");
    test_class_info(&lv, &cd_S4686C2);
    dp->~S4686C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4686C2(Test_S4686C2, "S4686C2", ABISELECT(24,16));

#else // __cplusplus

extern void _ZN7S4686C2C1Ev();
extern void _ZN7S4686C2D1Ev();
Name_Map name_map_S4686C2[] = {
  NSPAIR(_ZN7S4686C2C1Ev),
  NSPAIR(_ZN7S4686C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4686C3;
extern VTBL_ENTRY _ZTI7S4686C3[];
extern  VTBL_ENTRY _ZTV7S4686C3[];
static Base_Class bases_S4686C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4686C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI7S4686C2[];
extern void _ZN7S4686C2D1Ev();
extern void _ZN7S4686C2D0Ev();
extern void _ZN7S4686C32v3Ev();
extern void _ZN7S4686C22v4Ev();
extern void _ZN7S4686C22v5Ev();
static  VTBL_ENTRY vtc_S4686C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4686C2[0]),
  (VTBL_ENTRY)&_ZN7S4686C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4686C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4686C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4686C22v4Ev,
  (VTBL_ENTRY)&_ZN7S4686C22v5Ev,
};
extern VTBL_ENTRY _ZTI7S4686C2[];
extern  VTBL_ENTRY _ZTV7S4686C2[];
Class_Descriptor cd_S4686C2 = {  "S4686C2", // class name
  bases_S4686C2, 1,
  &(vtc_S4686C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,16), // object size
  NSPAIRA(_ZTI7S4686C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4686C2),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  S4686C1  : S4686C2 {
  int s4686c1f0;
  void *s4686c1f1;
  int s4686c1f2;
  virtual  ~S4686C1(); // _ZN7S4686C1D1Ev
  virtual void  v1(); // _ZN7S4686C12v1Ev
  virtual void  v2(); // _ZN7S4686C12v2Ev
  S4686C1(); // tgen
};
//SIG(1 S4686C1) C1{ BC2{ BC3{ vd v3 Fc Fi} vd v4 v5 Fp} vd v1 v2 Fi Fp Fi}


 S4686C1 ::~S4686C1(){ note_dtor("S4686C1", this);}
void  S4686C1 ::v1(){vfunc_called(this, "_ZN7S4686C12v1Ev");}
void  S4686C1 ::v2(){vfunc_called(this, "_ZN7S4686C12v2Ev");}
S4686C1 ::S4686C1(){ note_ctor("S4686C1", this);} // tgen

static void Test_S4686C1()
{
  extern Class_Descriptor cd_S4686C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,8)];
    init_test(&cd_S4686C1, buf);
    S4686C1 *dp, &lv = *(dp=new (buf) S4686C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,28), "sizeof(S4686C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4686C1)");
    check_base_class_offset(lv, (S4686C3*)(S4686C2*), 0, "S4686C1");
    check_base_class_offset(lv, (S4686C2*), 0, "S4686C1");
    check_field_offset(lv, s4686c1f0, ABISELECT(24,16), "S4686C1.s4686c1f0");
    check_field_offset(lv, s4686c1f1, ABISELECT(32,20), "S4686C1.s4686c1f1");
    check_field_offset(lv, s4686c1f2, ABISELECT(40,24), "S4686C1.s4686c1f2");
    test_class_info(&lv, &cd_S4686C1);
    dp->~S4686C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4686C1(Test_S4686C1, "S4686C1", ABISELECT(48,28));

#else // __cplusplus

extern void _ZN7S4686C1C1Ev();
extern void _ZN7S4686C1D1Ev();
Name_Map name_map_S4686C1[] = {
  NSPAIR(_ZN7S4686C1C1Ev),
  NSPAIR(_ZN7S4686C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4686C3;
extern VTBL_ENTRY _ZTI7S4686C3[];
extern  VTBL_ENTRY _ZTV7S4686C3[];
extern Class_Descriptor cd_S4686C2;
extern VTBL_ENTRY _ZTI7S4686C2[];
extern  VTBL_ENTRY _ZTV7S4686C2[];
static Base_Class bases_S4686C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4686C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S4686C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S4686C1[];
extern void _ZN7S4686C1D1Ev();
extern void _ZN7S4686C1D0Ev();
extern void _ZN7S4686C32v3Ev();
extern void _ZN7S4686C22v4Ev();
extern void _ZN7S4686C22v5Ev();
extern void _ZN7S4686C12v1Ev();
extern void _ZN7S4686C12v2Ev();
static  VTBL_ENTRY vtc_S4686C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4686C1[0]),
  (VTBL_ENTRY)&_ZN7S4686C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4686C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4686C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4686C22v4Ev,
  (VTBL_ENTRY)&_ZN7S4686C22v5Ev,
  (VTBL_ENTRY)&_ZN7S4686C12v1Ev,
  (VTBL_ENTRY)&_ZN7S4686C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S4686C1[];
extern  VTBL_ENTRY _ZTV7S4686C1[];
Class_Descriptor cd_S4686C1 = {  "S4686C1", // class name
  bases_S4686C1, 2,
  &(vtc_S4686C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,28), // object size
  NSPAIRA(_ZTI7S4686C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4686C1),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  S19761C3  {
  void *s19761c3f0;
  int s19761c3f1[2];
  virtual void  v2(); // _ZN8S19761C32v2Ev
  ~S19761C3(); // tgen
  S19761C3(); // tgen
};
//SIG(1 S19761C3) C1{ v1 Fp Fi[2]}


void  S19761C3 ::v2(){vfunc_called(this, "_ZN8S19761C32v2Ev");}
S19761C3 ::~S19761C3(){ note_dtor("S19761C3", this);} // tgen
S19761C3 ::S19761C3(){ note_ctor("S19761C3", this);} // tgen

static void Test_S19761C3()
{
  extern Class_Descriptor cd_S19761C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,5)];
    init_test(&cd_S19761C3, buf);
    S19761C3 *dp, &lv = *(dp=new (buf) S19761C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S19761C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19761C3)");
    check_field_offset(lv, s19761c3f0, ABISELECT(8,4), "S19761C3.s19761c3f0");
    check_field_offset(lv, s19761c3f1, ABISELECT(16,8), "S19761C3.s19761c3f1");
    test_class_info(&lv, &cd_S19761C3);
    dp->~S19761C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19761C3(Test_S19761C3, "S19761C3", ABISELECT(24,16));

#else // __cplusplus

extern void _ZN8S19761C3C1Ev();
extern void _ZN8S19761C3D1Ev();
Name_Map name_map_S19761C3[] = {
  NSPAIR(_ZN8S19761C3C1Ev),
  NSPAIR(_ZN8S19761C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S19761C3[];
extern void _ZN8S19761C32v2Ev();
static  VTBL_ENTRY vtc_S19761C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19761C3[0]),
  (VTBL_ENTRY)&_ZN8S19761C32v2Ev,
};
extern VTBL_ENTRY _ZTI8S19761C3[];
extern  VTBL_ENTRY _ZTV8S19761C3[];
Class_Descriptor cd_S19761C3 = {  "S19761C3", // class name
  0,0,//no base classes
  &(vtc_S19761C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,16), // object size
  NSPAIRA(_ZTI8S19761C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S19761C3),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  S19761C1  : virtual S21579C10 {
  ::S19761C3 s19761c1f0[2];
  void *s19761c1f1;
  virtual void  v1(); // _ZN8S19761C12v1Ev
  ~S19761C1(); // tgen
  S19761C1(); // tgen
};
//SIG(1 S19761C1) C1{ VBC2{ m Fp Fi[2] Fp[2]} v1 FC3{ v2 Fp Fi[2]}[2] Fp}


void  S19761C1 ::v1(){vfunc_called(this, "_ZN8S19761C12v1Ev");}
S19761C1 ::~S19761C1(){ note_dtor("S19761C1", this);} // tgen
S19761C1 ::S19761C1(){ note_ctor("S19761C1", this);} // tgen

static void Test_S19761C1()
{
  extern Class_Descriptor cd_S19761C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S19761C1, buf);
    S19761C1 *dp, &lv = *(dp=new (buf) S19761C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S19761C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19761C1)");
    check_base_class_offset(lv, (S21579C10*), ABISELECT(64,40), "S19761C1");
    check_field_offset(lv, s19761c1f0, ABISELECT(8,4), "S19761C1.s19761c1f0");
    check_field_offset(lv, s19761c1f1, ABISELECT(56,36), "S19761C1.s19761c1f1");
    test_class_info(&lv, &cd_S19761C1);
    dp->~S19761C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19761C1(Test_S19761C1, "S19761C1", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN8S19761C1C1Ev();
extern void _ZN8S19761C1D1Ev();
Name_Map name_map_S19761C1[] = {
  NSPAIR(_ZN8S19761C1C1Ev),
  NSPAIR(_ZN8S19761C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S21579C10;
extern VTBL_ENTRY _ZTI9S21579C10[];
static Base_Class bases_S19761C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S21579C10,    ABISELECT(64,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
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19761C1[];
extern void _ZN8S19761C12v1Ev();
static  VTBL_ENTRY vtc_S19761C1[] = {
  ABISELECT(64,40),
  0,
  (VTBL_ENTRY)&(_ZTI8S19761C1[0]),
  (VTBL_ENTRY)&_ZN8S19761C12v1Ev,
};
extern VTBL_ENTRY _ZTV8S19761C1[];
static  VTT_ENTRY vtt_S19761C1[] = {
  {&(_ZTV8S19761C1[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S19761C1[];
extern  VTBL_ENTRY _ZTV8S19761C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19761C1[];
Class_Descriptor cd_S19761C1 = {  "S19761C1", // class name
  bases_S19761C1, 1,
  &(vtc_S19761C1[0]), // expected_vtbl_contents
  &(vtt_S19761C1[0]), // expected_vtt_contents
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI8S19761C1),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S19761C1),4, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19761C1),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  S11270C1  {
  ::S15028C11 s11270c1f0;
};
//SIG(1 S11270C1) C1{ FC2{ FC3{ FC4{ FC5{ Fc[20]} Fc[16]} FC6{ FL}} Fc[129]}}



static void Test_S11270C1()
{
  {
    init_simple_test("S11270C1");
    S11270C1 lv;
    check2(sizeof(lv), ABISELECT(184,176), "sizeof(S11270C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S11270C1)");
    check_field_offset(lv, s11270c1f0, 0, "S11270C1.s11270c1f0");
  }
}
static Arrange_To_Call_Me vS11270C1(Test_S11270C1, "S11270C1", ABISELECT(184,176));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S11269C1  {
  ::S15027C11 s11269c1f0;
};
//SIG(1 S11269C1) C1{ FC2{ FC3{ FC4{ FC5{ Fc[20]} Fc[16]} FC6{ Fl}} Fc[129]}}



static void Test_S11269C1()
{
  {
    init_simple_test("S11269C1");
    S11269C1 lv;
    check2(sizeof(lv), ABISELECT(184,172), "sizeof(S11269C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S11269C1)");
    check_field_offset(lv, s11269c1f0, 0, "S11269C1.s11269c1f0");
  }
}
static Arrange_To_Call_Me vS11269C1(Test_S11269C1, "S11269C1", ABISELECT(184,172));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4117C3  {
  char s4117c3f0;
  int s4117c3f1;
  virtual  ~S4117C3(); // _ZN7S4117C3D1Ev
  virtual void  v1(); // _ZN7S4117C32v1Ev
  S4117C3(); // tgen
};
//SIG(-1 S4117C3) C1{ vd v1 Fc Fi}


 S4117C3 ::~S4117C3(){ note_dtor("S4117C3", this);}
void  S4117C3 ::v1(){vfunc_called(this, "_ZN7S4117C32v1Ev");}
S4117C3 ::S4117C3(){ note_ctor("S4117C3", this);} // tgen

static void Test_S4117C3()
{
  extern Class_Descriptor cd_S4117C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S4117C3, buf);
    S4117C3 *dp, &lv = *(dp=new (buf) S4117C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S4117C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4117C3)");
    check_field_offset(lv, s4117c3f0, ABISELECT(8,4), "S4117C3.s4117c3f0");
    check_field_offset(lv, s4117c3f1, ABISELECT(12,8), "S4117C3.s4117c3f1");
    test_class_info(&lv, &cd_S4117C3);
    dp->~S4117C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4117C3(Test_S4117C3, "S4117C3", ABISELECT(16,12));

#else // __cplusplus

extern void _ZN7S4117C3C1Ev();
extern void _ZN7S4117C3D1Ev();
Name_Map name_map_S4117C3[] = {
  NSPAIR(_ZN7S4117C3C1Ev),
  NSPAIR(_ZN7S4117C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4117C3[];
extern void _ZN7S4117C3D1Ev();
extern void _ZN7S4117C3D0Ev();
extern void _ZN7S4117C32v1Ev();
static  VTBL_ENTRY vtc_S4117C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4117C3[0]),
  (VTBL_ENTRY)&_ZN7S4117C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4117C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4117C32v1Ev,
};
extern VTBL_ENTRY _ZTI7S4117C3[];
extern  VTBL_ENTRY _ZTV7S4117C3[];
Class_Descriptor cd_S4117C3 = {  "S4117C3", // class name
  0,0,//no base classes
  &(vtc_S4117C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI7S4117C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4117C3),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  S4117C2  : S4117C3 {
  int s4117c2f0;
  void *s4117c2f1;
  int s4117c2f2;
  void *s4117c2f3[2];
  int s4117c2f4[2];
  virtual  ~S4117C2(); // _ZN7S4117C2D1Ev
  S4117C2(); // tgen
};
//SIG(-1 S4117C2) C1{ BC2{ vd v1 Fc Fi} vd Fi Fp Fi Fp[2] Fi[2]}


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

static void Test_S4117C2()
{
  extern Class_Descriptor cd_S4117C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(9,11)];
    init_test(&cd_S4117C2, buf);
    S4117C2 *dp, &lv = *(dp=new (buf) S4117C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,40), "sizeof(S4117C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4117C2)");
    check_base_class_offset(lv, (S4117C3*), 0, "S4117C2");
    check_field_offset(lv, s4117c2f0, ABISELECT(16,12), "S4117C2.s4117c2f0");
    check_field_offset(lv, s4117c2f1, ABISELECT(24,16), "S4117C2.s4117c2f1");
    check_field_offset(lv, s4117c2f2, ABISELECT(32,20), "S4117C2.s4117c2f2");
    check_field_offset(lv, s4117c2f3, ABISELECT(40,24), "S4117C2.s4117c2f3");
    check_field_offset(lv, s4117c2f4, ABISELECT(56,32), "S4117C2.s4117c2f4");
    test_class_info(&lv, &cd_S4117C2);
    dp->~S4117C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4117C2(Test_S4117C2, "S4117C2", ABISELECT(64,40));

#else // __cplusplus

extern void _ZN7S4117C2C1Ev();
extern void _ZN7S4117C2D1Ev();
Name_Map name_map_S4117C2[] = {
  NSPAIR(_ZN7S4117C2C1Ev),
  NSPAIR(_ZN7S4117C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4117C3;
extern VTBL_ENTRY _ZTI7S4117C3[];
extern  VTBL_ENTRY _ZTV7S4117C3[];
static Base_Class bases_S4117C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4117C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI7S4117C2[];
extern void _ZN7S4117C2D1Ev();
extern void _ZN7S4117C2D0Ev();
extern void _ZN7S4117C32v1Ev();
static  VTBL_ENTRY vtc_S4117C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4117C2[0]),
  (VTBL_ENTRY)&_ZN7S4117C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4117C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4117C32v1Ev,
};
extern VTBL_ENTRY _ZTI7S4117C2[];
extern  VTBL_ENTRY _ZTV7S4117C2[];
Class_Descriptor cd_S4117C2 = {  "S4117C2", // class name
  bases_S4117C2, 1,
  &(vtc_S4117C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(64,40), // object size
  NSPAIRA(_ZTI7S4117C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4117C2),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  S4117C1  : S4117C2 {
  virtual  ~S4117C1(); // _ZN7S4117C1D1Ev
  S4117C1(); // tgen
};
//SIG(1 S4117C1) C1{ BC2{ BC3{ vd v1 Fc Fi} vd Fi Fp Fi Fp[2] Fi[2]} vd}


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

static void Test_S4117C1()
{
  extern Class_Descriptor cd_S4117C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(9,11)];
    init_test(&cd_S4117C1, buf);
    S4117C1 *dp, &lv = *(dp=new (buf) S4117C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,40), "sizeof(S4117C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4117C1)");
    check_base_class_offset(lv, (S4117C3*)(S4117C2*), 0, "S4117C1");
    check_base_class_offset(lv, (S4117C2*), 0, "S4117C1");
    test_class_info(&lv, &cd_S4117C1);
    dp->~S4117C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4117C1(Test_S4117C1, "S4117C1", ABISELECT(64,40));

#else // __cplusplus

extern void _ZN7S4117C1C1Ev();
extern void _ZN7S4117C1D1Ev();
Name_Map name_map_S4117C1[] = {
  NSPAIR(_ZN7S4117C1C1Ev),
  NSPAIR(_ZN7S4117C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4117C3;
extern VTBL_ENTRY _ZTI7S4117C3[];
extern  VTBL_ENTRY _ZTV7S4117C3[];
extern Class_Descriptor cd_S4117C2;
extern VTBL_ENTRY _ZTI7S4117C2[];
extern  VTBL_ENTRY _ZTV7S4117C2[];
static Base_Class bases_S4117C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4117C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S4117C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S4117C1[];
extern void _ZN7S4117C1D1Ev();
extern void _ZN7S4117C1D0Ev();
extern void _ZN7S4117C32v1Ev();
static  VTBL_ENTRY vtc_S4117C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4117C1[0]),
  (VTBL_ENTRY)&_ZN7S4117C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4117C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4117C32v1Ev,
};
extern VTBL_ENTRY _ZTI7S4117C1[];
extern  VTBL_ENTRY _ZTV7S4117C1[];
Class_Descriptor cd_S4117C1 = {  "S4117C1", // class name
  bases_S4117C1, 2,
  &(vtc_S4117C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(64,40), // object size
  NSPAIRA(_ZTI7S4117C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4117C1),5, //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  S4133C3  {
  char s4133c3f0;
  int s4133c3f1;
  virtual  ~S4133C3(); // _ZN7S4133C3D1Ev
  virtual void  v1(); // _ZN7S4133C32v1Ev
  S4133C3(); // tgen
};
//SIG(-1 S4133C3) C1{ vd v1 Fc Fi}


 S4133C3 ::~S4133C3(){ note_dtor("S4133C3", this);}
void  S4133C3 ::v1(){vfunc_called(this, "_ZN7S4133C32v1Ev");}
S4133C3 ::S4133C3(){ note_ctor("S4133C3", this);} // tgen

static void Test_S4133C3()
{
  extern Class_Descriptor cd_S4133C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S4133C3, buf);
    S4133C3 *dp, &lv = *(dp=new (buf) S4133C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S4133C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4133C3)");
    check_field_offset(lv, s4133c3f0, ABISELECT(8,4), "S4133C3.s4133c3f0");
    check_field_offset(lv, s4133c3f1, ABISELECT(12,8), "S4133C3.s4133c3f1");
    test_class_info(&lv, &cd_S4133C3);
    dp->~S4133C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4133C3(Test_S4133C3, "S4133C3", ABISELECT(16,12));

#else // __cplusplus

extern void _ZN7S4133C3C1Ev();
extern void _ZN7S4133C3D1Ev();
Name_Map name_map_S4133C3[] = {
  NSPAIR(_ZN7S4133C3C1Ev),
  NSPAIR(_ZN7S4133C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4133C3[];
extern void _ZN7S4133C3D1Ev();
extern void _ZN7S4133C3D0Ev();
extern void _ZN7S4133C32v1Ev();
static  VTBL_ENTRY vtc_S4133C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4133C3[0]),
  (VTBL_ENTRY)&_ZN7S4133C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4133C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4133C32v1Ev,
};
extern VTBL_ENTRY _ZTI7S4133C3[];
extern  VTBL_ENTRY _ZTV7S4133C3[];
Class_Descriptor cd_S4133C3 = {  "S4133C3", // class name
  0,0,//no base classes
  &(vtc_S4133C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI7S4133C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4133C3),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  S4133C2  : S4133C3 {
  int s4133c2f0[4];
  void *s4133c2f1[4];
  int s4133c2f2;
  virtual  ~S4133C2(); // _ZN7S4133C2D1Ev
  virtual void  v2(); // _ZN7S4133C22v2Ev
  S4133C2(); // tgen
};
//SIG(-1 S4133C2) C1{ BC2{ vd v2 Fc Fi} vd v1 Fi[4] Fp[4] Fi}


 S4133C2 ::~S4133C2(){ note_dtor("S4133C2", this);}
void  S4133C2 ::v2(){vfunc_called(this, "_ZN7S4133C22v2Ev");}
S4133C2 ::S4133C2(){ note_ctor("S4133C2", this);} // tgen

static void Test_S4133C2()
{
  extern Class_Descriptor cd_S4133C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,13)];
    init_test(&cd_S4133C2, buf);
    S4133C2 *dp, &lv = *(dp=new (buf) S4133C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,48), "sizeof(S4133C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4133C2)");
    check_base_class_offset(lv, (S4133C3*), 0, "S4133C2");
    check_field_offset(lv, s4133c2f0, ABISELECT(16,12), "S4133C2.s4133c2f0");
    check_field_offset(lv, s4133c2f1, ABISELECT(32,28), "S4133C2.s4133c2f1");
    check_field_offset(lv, s4133c2f2, ABISELECT(64,44), "S4133C2.s4133c2f2");
    test_class_info(&lv, &cd_S4133C2);
    dp->~S4133C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4133C2(Test_S4133C2, "S4133C2", ABISELECT(72,48));

#else // __cplusplus

extern void _ZN7S4133C2C1Ev();
extern void _ZN7S4133C2D1Ev();
Name_Map name_map_S4133C2[] = {
  NSPAIR(_ZN7S4133C2C1Ev),
  NSPAIR(_ZN7S4133C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4133C3;
extern VTBL_ENTRY _ZTI7S4133C3[];
extern  VTBL_ENTRY _ZTV7S4133C3[];
static Base_Class bases_S4133C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4133C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI7S4133C2[];
extern void _ZN7S4133C2D1Ev();
extern void _ZN7S4133C2D0Ev();
extern void _ZN7S4133C32v1Ev();
extern void _ZN7S4133C22v2Ev();
static  VTBL_ENTRY vtc_S4133C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4133C2[0]),
  (VTBL_ENTRY)&_ZN7S4133C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4133C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4133C32v1Ev,
  (VTBL_ENTRY)&_ZN7S4133C22v2Ev,
};
extern VTBL_ENTRY _ZTI7S4133C2[];
extern  VTBL_ENTRY _ZTV7S4133C2[];
Class_Descriptor cd_S4133C2 = {  "S4133C2", // class name
  bases_S4133C2, 1,
  &(vtc_S4133C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,48), // object size
  NSPAIRA(_ZTI7S4133C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4133C2),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  S4133C1  : S4133C2 {
  virtual  ~S4133C1(); // _ZN7S4133C1D1Ev
  S4133C1(); // tgen
};
//SIG(1 S4133C1) C1{ BC2{ BC3{ vd v1 Fc Fi} vd v2 Fi[4] Fp[4] Fi} vd}


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

static void Test_S4133C1()
{
  extern Class_Descriptor cd_S4133C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,13)];
    init_test(&cd_S4133C1, buf);
    S4133C1 *dp, &lv = *(dp=new (buf) S4133C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,48), "sizeof(S4133C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4133C1)");
    check_base_class_offset(lv, (S4133C3*)(S4133C2*), 0, "S4133C1");
    check_base_class_offset(lv, (S4133C2*), 0, "S4133C1");
    test_class_info(&lv, &cd_S4133C1);
    dp->~S4133C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4133C1(Test_S4133C1, "S4133C1", ABISELECT(72,48));

#else // __cplusplus

extern void _ZN7S4133C1C1Ev();
extern void _ZN7S4133C1D1Ev();
Name_Map name_map_S4133C1[] = {
  NSPAIR(_ZN7S4133C1C1Ev),
  NSPAIR(_ZN7S4133C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4133C3;
extern VTBL_ENTRY _ZTI7S4133C3[];
extern  VTBL_ENTRY _ZTV7S4133C3[];
extern Class_Descriptor cd_S4133C2;
extern VTBL_ENTRY _ZTI7S4133C2[];
extern  VTBL_ENTRY _ZTV7S4133C2[];
static Base_Class bases_S4133C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4133C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S4133C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S4133C1[];
extern void _ZN7S4133C1D1Ev();
extern void _ZN7S4133C1D0Ev();
extern void _ZN7S4133C32v1Ev();
extern void _ZN7S4133C22v2Ev();
static  VTBL_ENTRY vtc_S4133C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4133C1[0]),
  (VTBL_ENTRY)&_ZN7S4133C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4133C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4133C32v1Ev,
  (VTBL_ENTRY)&_ZN7S4133C22v2Ev,
};
extern VTBL_ENTRY _ZTI7S4133C1[];
extern  VTBL_ENTRY _ZTV7S4133C1[];
Class_Descriptor cd_S4133C1 = {  "S4133C1", // class name
  bases_S4133C1, 2,
  &(vtc_S4133C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,48), // object size
  NSPAIRA(_ZTI7S4133C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4133C1),6, //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  S4131C3  {
  char s4131c3f0;
  int s4131c3f1;
  virtual  ~S4131C3(); // _ZN7S4131C3D1Ev
  virtual void  v1(); // _ZN7S4131C32v1Ev
  S4131C3(); // tgen
};
//SIG(-1 S4131C3) C1{ vd v1 Fc Fi}


 S4131C3 ::~S4131C3(){ note_dtor("S4131C3", this);}
void  S4131C3 ::v1(){vfunc_called(this, "_ZN7S4131C32v1Ev");}
S4131C3 ::S4131C3(){ note_ctor("S4131C3", this);} // tgen

static void Test_S4131C3()
{
  extern Class_Descriptor cd_S4131C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S4131C3, buf);
    S4131C3 *dp, &lv = *(dp=new (buf) S4131C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S4131C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4131C3)");
    check_field_offset(lv, s4131c3f0, ABISELECT(8,4), "S4131C3.s4131c3f0");
    check_field_offset(lv, s4131c3f1, ABISELECT(12,8), "S4131C3.s4131c3f1");
    test_class_info(&lv, &cd_S4131C3);
    dp->~S4131C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4131C3(Test_S4131C3, "S4131C3", ABISELECT(16,12));

#else // __cplusplus

extern void _ZN7S4131C3C1Ev();
extern void _ZN7S4131C3D1Ev();
Name_Map name_map_S4131C3[] = {
  NSPAIR(_ZN7S4131C3C1Ev),
  NSPAIR(_ZN7S4131C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4131C3[];
extern void _ZN7S4131C3D1Ev();
extern void _ZN7S4131C3D0Ev();
extern void _ZN7S4131C32v1Ev();
static  VTBL_ENTRY vtc_S4131C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4131C3[0]),
  (VTBL_ENTRY)&_ZN7S4131C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4131C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4131C32v1Ev,
};
extern VTBL_ENTRY _ZTI7S4131C3[];
extern  VTBL_ENTRY _ZTV7S4131C3[];
Class_Descriptor cd_S4131C3 = {  "S4131C3", // class name
  0,0,//no base classes
  &(vtc_S4131C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI7S4131C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4131C3),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  S4131C2  : S4131C3 {
  void *s4131c2f0[6];
  int s4131c2f1;
  void *s4131c2f2;
  int s4131c2f3[2];
  virtual  ~S4131C2(); // _ZN7S4131C2D1Ev
  S4131C2(); // tgen
};
//SIG(-1 S4131C2) C1{ BC2{ vd v1 Fc Fi} vd Fp[6] Fi Fp Fi[2]}


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

static void Test_S4131C2()
{
  extern Class_Descriptor cd_S4131C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(12,14)];
    init_test(&cd_S4131C2, buf);
    S4131C2 *dp, &lv = *(dp=new (buf) S4131C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(88,52), "sizeof(S4131C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4131C2)");
    check_base_class_offset(lv, (S4131C3*), 0, "S4131C2");
    check_field_offset(lv, s4131c2f0, ABISELECT(16,12), "S4131C2.s4131c2f0");
    check_field_offset(lv, s4131c2f1, ABISELECT(64,36), "S4131C2.s4131c2f1");
    check_field_offset(lv, s4131c2f2, ABISELECT(72,40), "S4131C2.s4131c2f2");
    check_field_offset(lv, s4131c2f3, ABISELECT(80,44), "S4131C2.s4131c2f3");
    test_class_info(&lv, &cd_S4131C2);
    dp->~S4131C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4131C2(Test_S4131C2, "S4131C2", ABISELECT(88,52));

#else // __cplusplus

extern void _ZN7S4131C2C1Ev();
extern void _ZN7S4131C2D1Ev();
Name_Map name_map_S4131C2[] = {
  NSPAIR(_ZN7S4131C2C1Ev),
  NSPAIR(_ZN7S4131C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4131C3;
extern VTBL_ENTRY _ZTI7S4131C3[];
extern  VTBL_ENTRY _ZTV7S4131C3[];
static Base_Class bases_S4131C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4131C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI7S4131C2[];
extern void _ZN7S4131C2D1Ev();
extern void _ZN7S4131C2D0Ev();
extern void _ZN7S4131C32v1Ev();
static  VTBL_ENTRY vtc_S4131C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4131C2[0]),
  (VTBL_ENTRY)&_ZN7S4131C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4131C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4131C32v1Ev,
};
extern VTBL_ENTRY _ZTI7S4131C2[];
extern  VTBL_ENTRY _ZTV7S4131C2[];
Class_Descriptor cd_S4131C2 = {  "S4131C2", // class name
  bases_S4131C2, 1,
  &(vtc_S4131C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(88,52), // object size
  NSPAIRA(_ZTI7S4131C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4131C2),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  S4131C1  : S4131C2 {
  virtual  ~S4131C1(); // _ZN7S4131C1D1Ev
  S4131C1(); // tgen
};
//SIG(1 S4131C1) C1{ BC2{ BC3{ vd v1 Fc Fi} vd Fp[6] Fi Fp Fi[2]} vd}


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

static void Test_S4131C1()
{
  extern Class_Descriptor cd_S4131C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(12,14)];
    init_test(&cd_S4131C1, buf);
    S4131C1 *dp, &lv = *(dp=new (buf) S4131C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(88,52), "sizeof(S4131C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4131C1)");
    check_base_class_offset(lv, (S4131C3*)(S4131C2*), 0, "S4131C1");
    check_base_class_offset(lv, (S4131C2*), 0, "S4131C1");
    test_class_info(&lv, &cd_S4131C1);
    dp->~S4131C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4131C1(Test_S4131C1, "S4131C1", ABISELECT(88,52));

#else // __cplusplus

extern void _ZN7S4131C1C1Ev();
extern void _ZN7S4131C1D1Ev();
Name_Map name_map_S4131C1[] = {
  NSPAIR(_ZN7S4131C1C1Ev),
  NSPAIR(_ZN7S4131C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4131C3;
extern VTBL_ENTRY _ZTI7S4131C3[];
extern  VTBL_ENTRY _ZTV7S4131C3[];
extern Class_Descriptor cd_S4131C2;
extern VTBL_ENTRY _ZTI7S4131C2[];
extern  VTBL_ENTRY _ZTV7S4131C2[];
static Base_Class bases_S4131C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4131C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S4131C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S4131C1[];
extern void _ZN7S4131C1D1Ev();
extern void _ZN7S4131C1D0Ev();
extern void _ZN7S4131C32v1Ev();
static  VTBL_ENTRY vtc_S4131C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4131C1[0]),
  (VTBL_ENTRY)&_ZN7S4131C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4131C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4131C32v1Ev,
};
extern VTBL_ENTRY _ZTI7S4131C1[];
extern  VTBL_ENTRY _ZTV7S4131C1[];
Class_Descriptor cd_S4131C1 = {  "S4131C1", // class name
  bases_S4131C1, 2,
  &(vtc_S4131C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(88,52), // object size
  NSPAIRA(_ZTI7S4131C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4131C1),5, //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  S4689C3  {
  char s4689c3f0;
  int s4689c3f1;
  virtual  ~S4689C3(); // _ZN7S4689C3D1Ev
  virtual void  v3(); // _ZN7S4689C32v3Ev
  S4689C3(); // tgen
};
//SIG(-1 S4689C3) C1{ vd v1 Fc Fi}


 S4689C3 ::~S4689C3(){ note_dtor("S4689C3", this);}
void  S4689C3 ::v3(){vfunc_called(this, "_ZN7S4689C32v3Ev");}
S4689C3 ::S4689C3(){ note_ctor("S4689C3", this);} // tgen

static void Test_S4689C3()
{
  extern Class_Descriptor cd_S4689C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S4689C3, buf);
    S4689C3 *dp, &lv = *(dp=new (buf) S4689C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S4689C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4689C3)");
    check_field_offset(lv, s4689c3f0, ABISELECT(8,4), "S4689C3.s4689c3f0");
    check_field_offset(lv, s4689c3f1, ABISELECT(12,8), "S4689C3.s4689c3f1");
    test_class_info(&lv, &cd_S4689C3);
    dp->~S4689C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4689C3(Test_S4689C3, "S4689C3", ABISELECT(16,12));

#else // __cplusplus

extern void _ZN7S4689C3C1Ev();
extern void _ZN7S4689C3D1Ev();
Name_Map name_map_S4689C3[] = {
  NSPAIR(_ZN7S4689C3C1Ev),
  NSPAIR(_ZN7S4689C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4689C3[];
extern void _ZN7S4689C3D1Ev();
extern void _ZN7S4689C3D0Ev();
extern void _ZN7S4689C32v3Ev();
static  VTBL_ENTRY vtc_S4689C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4689C3[0]),
  (VTBL_ENTRY)&_ZN7S4689C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4689C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4689C32v3Ev,
};
extern VTBL_ENTRY _ZTI7S4689C3[];
extern  VTBL_ENTRY _ZTV7S4689C3[];
Class_Descriptor cd_S4689C3 = {  "S4689C3", // class name
  0,0,//no base classes
  &(vtc_S4689C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI7S4689C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4689C3),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  S4689C2  : S4689C3 {
  void *s4689c2f0;
  virtual  ~S4689C2(); // _ZN7S4689C2D1Ev
  virtual void  v4(); // _ZN7S4689C22v4Ev
  virtual void  v5(); // _ZN7S4689C22v5Ev
  S4689C2(); // tgen
};
//SIG(-1 S4689C2) C1{ BC2{ vd v3 Fc Fi} vd v1 v2 Fp}


 S4689C2 ::~S4689C2(){ note_dtor("S4689C2", this);}
void  S4689C2 ::v4(){vfunc_called(this, "_ZN7S4689C22v4Ev");}
void  S4689C2 ::v5(){vfunc_called(this, "_ZN7S4689C22v5Ev");}
S4689C2 ::S4689C2(){ note_ctor("S4689C2", this);} // tgen

static void Test_S4689C2()
{
  extern Class_Descriptor cd_S4689C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,5)];
    init_test(&cd_S4689C2, buf);
    S4689C2 *dp, &lv = *(dp=new (buf) S4689C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S4689C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4689C2)");
    check_base_class_offset(lv, (S4689C3*), 0, "S4689C2");
    check_field_offset(lv, s4689c2f0, ABISELECT(16,12), "S4689C2.s4689c2f0");
    test_class_info(&lv, &cd_S4689C2);
    dp->~S4689C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4689C2(Test_S4689C2, "S4689C2", ABISELECT(24,16));

#else // __cplusplus

extern void _ZN7S4689C2C1Ev();
extern void _ZN7S4689C2D1Ev();
Name_Map name_map_S4689C2[] = {
  NSPAIR(_ZN7S4689C2C1Ev),
  NSPAIR(_ZN7S4689C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4689C3;
extern VTBL_ENTRY _ZTI7S4689C3[];
extern  VTBL_ENTRY _ZTV7S4689C3[];
static Base_Class bases_S4689C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4689C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI7S4689C2[];
extern void _ZN7S4689C2D1Ev();
extern void _ZN7S4689C2D0Ev();
extern void _ZN7S4689C32v3Ev();
extern void _ZN7S4689C22v4Ev();
extern void _ZN7S4689C22v5Ev();
static  VTBL_ENTRY vtc_S4689C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4689C2[0]),
  (VTBL_ENTRY)&_ZN7S4689C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4689C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4689C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4689C22v4Ev,
  (VTBL_ENTRY)&_ZN7S4689C22v5Ev,
};
extern VTBL_ENTRY _ZTI7S4689C2[];
extern  VTBL_ENTRY _ZTV7S4689C2[];
Class_Descriptor cd_S4689C2 = {  "S4689C2", // class name
  bases_S4689C2, 1,
  &(vtc_S4689C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,16), // object size
  NSPAIRA(_ZTI7S4689C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4689C2),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  S4689C1  : S4689C2 {
  void *s4689c1f0;
  virtual  ~S4689C1(); // _ZN7S4689C1D1Ev
  virtual void  v1(); // _ZN7S4689C12v1Ev
  virtual void  v2(); // _ZN7S4689C12v2Ev
  S4689C1(); // tgen
};
//SIG(1 S4689C1) C1{ BC2{ BC3{ vd v3 Fc Fi} vd v4 v5 Fp} vd v1 v2 Fp}


 S4689C1 ::~S4689C1(){ note_dtor("S4689C1", this);}
void  S4689C1 ::v1(){vfunc_called(this, "_ZN7S4689C12v1Ev");}
void  S4689C1 ::v2(){vfunc_called(this, "_ZN7S4689C12v2Ev");}
S4689C1 ::S4689C1(){ note_ctor("S4689C1", this);} // tgen

static void Test_S4689C1()
{
  extern Class_Descriptor cd_S4689C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,6)];
    init_test(&cd_S4689C1, buf);
    S4689C1 *dp, &lv = *(dp=new (buf) S4689C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S4689C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4689C1)");
    check_base_class_offset(lv, (S4689C3*)(S4689C2*), 0, "S4689C1");
    check_base_class_offset(lv, (S4689C2*), 0, "S4689C1");
    check_field_offset(lv, s4689c1f0, ABISELECT(24,16), "S4689C1.s4689c1f0");
    test_class_info(&lv, &cd_S4689C1);
    dp->~S4689C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4689C1(Test_S4689C1, "S4689C1", ABISELECT(32,20));

#else // __cplusplus

extern void _ZN7S4689C1C1Ev();
extern void _ZN7S4689C1D1Ev();
Name_Map name_map_S4689C1[] = {
  NSPAIR(_ZN7S4689C1C1Ev),
  NSPAIR(_ZN7S4689C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4689C3;
extern VTBL_ENTRY _ZTI7S4689C3[];
extern  VTBL_ENTRY _ZTV7S4689C3[];
extern Class_Descriptor cd_S4689C2;
extern VTBL_ENTRY _ZTI7S4689C2[];
extern  VTBL_ENTRY _ZTV7S4689C2[];
static Base_Class bases_S4689C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4689C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S4689C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S4689C1[];
extern void _ZN7S4689C1D1Ev();
extern void _ZN7S4689C1D0Ev();
extern void _ZN7S4689C32v3Ev();
extern void _ZN7S4689C22v4Ev();
extern void _ZN7S4689C22v5Ev();
extern void _ZN7S4689C12v1Ev();
extern void _ZN7S4689C12v2Ev();
static  VTBL_ENTRY vtc_S4689C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4689C1[0]),
  (VTBL_ENTRY)&_ZN7S4689C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4689C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4689C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4689C22v4Ev,
  (VTBL_ENTRY)&_ZN7S4689C22v5Ev,
  (VTBL_ENTRY)&_ZN7S4689C12v1Ev,
  (VTBL_ENTRY)&_ZN7S4689C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S4689C1[];
extern  VTBL_ENTRY _ZTV7S4689C1[];
Class_Descriptor cd_S4689C1 = {  "S4689C1", // class name
  bases_S4689C1, 2,
  &(vtc_S4689C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,20), // object size
  NSPAIRA(_ZTI7S4689C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4689C1),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  S6750C2_nt  {
  virtual  ~S6750C2_nt(); // _ZN10S6750C2_ntD1Ev
  virtual void  v3(); // _ZN10S6750C2_nt2v3Ev
  virtual void  v4(); // _ZN10S6750C2_nt2v4Ev
  S6750C2_nt(); // tgen
};
//SIG(-1 S6750C2_nt) C1{ vd v1 v2}


 S6750C2_nt ::~S6750C2_nt(){ note_dtor("S6750C2_nt", this);}
void  S6750C2_nt ::v3(){vfunc_called(this, "_ZN10S6750C2_nt2v3Ev");}
void  S6750C2_nt ::v4(){vfunc_called(this, "_ZN10S6750C2_nt2v4Ev");}
S6750C2_nt ::S6750C2_nt(){ note_ctor("S6750C2_nt", this);} // tgen

//skip512 S6750C2_nt

#else // __cplusplus

extern void _ZN10S6750C2_ntC1Ev();
extern void _ZN10S6750C2_ntD1Ev();
Name_Map name_map_S6750C2_nt[] = {
  NSPAIR(_ZN10S6750C2_ntC1Ev),
  NSPAIR(_ZN10S6750C2_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S6750C2_nt[];
extern void _ZN10S6750C2_ntD1Ev();
extern void _ZN10S6750C2_ntD0Ev();
extern void _ZN10S6750C2_nt2v3Ev();
extern void _ZN10S6750C2_nt2v4Ev();
static  VTBL_ENTRY vtc_S6750C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S6750C2_nt[0]),
  (VTBL_ENTRY)&_ZN10S6750C2_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S6750C2_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S6750C2_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S6750C2_nt2v4Ev,
};
extern VTBL_ENTRY _ZTI10S6750C2_nt[];
VTBL_ENTRY *P__ZTI10S6750C2_nt = _ZTI10S6750C2_nt; 
extern  VTBL_ENTRY _ZTV10S6750C2_nt[];
Class_Descriptor cd_S6750C2_nt = {  "S6750C2_nt", // class name
  0,0,//no base classes
  &(vtc_S6750C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI10S6750C2_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S6750C2_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  S6750C1  : S6750C2_nt {
  ::S3625C31 s6750c1f0;
  virtual void  v1(); // _ZN7S6750C12v1Ev
  virtual void  v2(); // _ZN7S6750C12v2Ev
  ~S6750C1(); // tgen
  S6750C1(); // tgen
};
//SIG(1 S6750C1) C1{ BC2{ vd v3 v4} v1 v2 FC3{ m Fp Fi[2] FC4{ m}}}


void  S6750C1 ::v1(){vfunc_called(this, "_ZN7S6750C12v1Ev");}
void  S6750C1 ::v2(){vfunc_called(this, "_ZN7S6750C12v2Ev");}
S6750C1 ::~S6750C1(){ note_dtor("S6750C1", this);} // tgen
S6750C1 ::S6750C1(){ note_ctor("S6750C1", this);} // tgen

static void Test_S6750C1()
{
  extern Class_Descriptor cd_S6750C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,6)];
    init_test(&cd_S6750C1, buf);
    S6750C1 *dp, &lv = *(dp=new (buf) S6750C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S6750C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6750C1)");
    check_base_class_offset(lv, (S6750C2_nt*), 0, "S6750C1");
    check_field_offset(lv, s6750c1f0, ABISELECT(8,4), "S6750C1.s6750c1f0");
    test_class_info(&lv, &cd_S6750C1);
    dp->~S6750C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6750C1(Test_S6750C1, "S6750C1", ABISELECT(32,20));

#else // __cplusplus

extern void _ZN7S6750C1C1Ev();
extern void _ZN7S6750C1D1Ev();
Name_Map name_map_S6750C1[] = {
  NSPAIR(_ZN7S6750C1C1Ev),
  NSPAIR(_ZN7S6750C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6750C2_nt;
extern VTBL_ENTRY _ZTI10S6750C2_nt[];
extern  VTBL_ENTRY _ZTV10S6750C2_nt[];
static Base_Class bases_S6750C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6750C2_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 _ZTI7S6750C1[];
extern void _ZN7S6750C1D1Ev();
extern void _ZN7S6750C1D0Ev();
extern void _ZN10S6750C2_nt2v3Ev();
extern void _ZN10S6750C2_nt2v4Ev();
extern void _ZN7S6750C12v1Ev();
extern void _ZN7S6750C12v2Ev();
static  VTBL_ENTRY vtc_S6750C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6750C1[0]),
  (VTBL_ENTRY)&_ZN7S6750C1D1Ev,
  (VTBL_ENTRY)&_ZN7S6750C1D0Ev,
  (VTBL_ENTRY)&_ZN10S6750C2_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S6750C2_nt2v4Ev,
  (VTBL_ENTRY)&_ZN7S6750C12v1Ev,
  (VTBL_ENTRY)&_ZN7S6750C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S6750C1[];
extern  VTBL_ENTRY _ZTV7S6750C1[];
Class_Descriptor cd_S6750C1 = {  "S6750C1", // class name
  bases_S6750C1, 1,
  &(vtc_S6750C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,20), // object size
  NSPAIRA(_ZTI7S6750C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S6750C1),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  S4134C3  {
  char s4134c3f0;
  int s4134c3f1;
  virtual  ~S4134C3(); // _ZN7S4134C3D1Ev
  virtual void  v1(); // _ZN7S4134C32v1Ev
  S4134C3(); // tgen
};
//SIG(-1 S4134C3) C1{ vd v1 Fc Fi}


 S4134C3 ::~S4134C3(){ note_dtor("S4134C3", this);}
void  S4134C3 ::v1(){vfunc_called(this, "_ZN7S4134C32v1Ev");}
S4134C3 ::S4134C3(){ note_ctor("S4134C3", this);} // tgen

static void Test_S4134C3()
{
  extern Class_Descriptor cd_S4134C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S4134C3, buf);
    S4134C3 *dp, &lv = *(dp=new (buf) S4134C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S4134C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4134C3)");
    check_field_offset(lv, s4134c3f0, ABISELECT(8,4), "S4134C3.s4134c3f0");
    check_field_offset(lv, s4134c3f1, ABISELECT(12,8), "S4134C3.s4134c3f1");
    test_class_info(&lv, &cd_S4134C3);
    dp->~S4134C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4134C3(Test_S4134C3, "S4134C3", ABISELECT(16,12));

#else // __cplusplus

extern void _ZN7S4134C3C1Ev();
extern void _ZN7S4134C3D1Ev();
Name_Map name_map_S4134C3[] = {
  NSPAIR(_ZN7S4134C3C1Ev),
  NSPAIR(_ZN7S4134C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4134C3[];
extern void _ZN7S4134C3D1Ev();
extern void _ZN7S4134C3D0Ev();
extern void _ZN7S4134C32v1Ev();
static  VTBL_ENTRY vtc_S4134C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4134C3[0]),
  (VTBL_ENTRY)&_ZN7S4134C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4134C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4134C32v1Ev,
};
extern VTBL_ENTRY _ZTI7S4134C3[];
extern  VTBL_ENTRY _ZTV7S4134C3[];
Class_Descriptor cd_S4134C3 = {  "S4134C3", // class name
  0,0,//no base classes
  &(vtc_S4134C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI7S4134C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4134C3),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  S4134C2  : S4134C3 {
  int s4134c2f0[4];
  void *s4134c2f1[4];
  int s4134c2f2;
  virtual  ~S4134C2(); // _ZN7S4134C2D1Ev
  virtual void  v2(); // _ZN7S4134C22v2Ev
  S4134C2(); // tgen
};
//SIG(-1 S4134C2) C1{ BC2{ vd v2 Fc Fi} vd v1 Fi[4] Fp[4] Fi}


 S4134C2 ::~S4134C2(){ note_dtor("S4134C2", this);}
void  S4134C2 ::v2(){vfunc_called(this, "_ZN7S4134C22v2Ev");}
S4134C2 ::S4134C2(){ note_ctor("S4134C2", this);} // tgen

static void Test_S4134C2()
{
  extern Class_Descriptor cd_S4134C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,13)];
    init_test(&cd_S4134C2, buf);
    S4134C2 *dp, &lv = *(dp=new (buf) S4134C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,48), "sizeof(S4134C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4134C2)");
    check_base_class_offset(lv, (S4134C3*), 0, "S4134C2");
    check_field_offset(lv, s4134c2f0, ABISELECT(16,12), "S4134C2.s4134c2f0");
    check_field_offset(lv, s4134c2f1, ABISELECT(32,28), "S4134C2.s4134c2f1");
    check_field_offset(lv, s4134c2f2, ABISELECT(64,44), "S4134C2.s4134c2f2");
    test_class_info(&lv, &cd_S4134C2);
    dp->~S4134C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4134C2(Test_S4134C2, "S4134C2", ABISELECT(72,48));

#else // __cplusplus

extern void _ZN7S4134C2C1Ev();
extern void _ZN7S4134C2D1Ev();
Name_Map name_map_S4134C2[] = {
  NSPAIR(_ZN7S4134C2C1Ev),
  NSPAIR(_ZN7S4134C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4134C3;
extern VTBL_ENTRY _ZTI7S4134C3[];
extern  VTBL_ENTRY _ZTV7S4134C3[];
static Base_Class bases_S4134C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4134C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI7S4134C2[];
extern void _ZN7S4134C2D1Ev();
extern void _ZN7S4134C2D0Ev();
extern void _ZN7S4134C32v1Ev();
extern void _ZN7S4134C22v2Ev();
static  VTBL_ENTRY vtc_S4134C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4134C2[0]),
  (VTBL_ENTRY)&_ZN7S4134C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4134C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4134C32v1Ev,
  (VTBL_ENTRY)&_ZN7S4134C22v2Ev,
};
extern VTBL_ENTRY _ZTI7S4134C2[];
extern  VTBL_ENTRY _ZTV7S4134C2[];
Class_Descriptor cd_S4134C2 = {  "S4134C2", // class name
  bases_S4134C2, 1,
  &(vtc_S4134C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,48), // object size
  NSPAIRA(_ZTI7S4134C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4134C2),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  S4134C1  : S4134C2 {
  ~S4134C1(); // tgen
  S4134C1(); // tgen
};
//SIG(1 S4134C1) C1{ BC2{ BC3{ vd v1 Fc Fi} vd v2 Fi[4] Fp[4] Fi}}


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

static void Test_S4134C1()
{
  extern Class_Descriptor cd_S4134C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,13)];
    init_test(&cd_S4134C1, buf);
    S4134C1 *dp, &lv = *(dp=new (buf) S4134C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,48), "sizeof(S4134C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4134C1)");
    check_base_class_offset(lv, (S4134C3*)(S4134C2*), 0, "S4134C1");
    check_base_class_offset(lv, (S4134C2*), 0, "S4134C1");
    test_class_info(&lv, &cd_S4134C1);
    dp->~S4134C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4134C1(Test_S4134C1, "S4134C1", ABISELECT(72,48));

#else // __cplusplus

extern void _ZN7S4134C1C1Ev();
extern void _ZN7S4134C1D1Ev();
Name_Map name_map_S4134C1[] = {
  NSPAIR(_ZN7S4134C1C1Ev),
  NSPAIR(_ZN7S4134C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4134C3;
extern VTBL_ENTRY _ZTI7S4134C3[];
extern  VTBL_ENTRY _ZTV7S4134C3[];
extern Class_Descriptor cd_S4134C2;
extern VTBL_ENTRY _ZTI7S4134C2[];
extern  VTBL_ENTRY _ZTV7S4134C2[];
static Base_Class bases_S4134C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4134C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S4134C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S4134C1[];
extern void _ZN7S4134C1D1Ev();
extern void _ZN7S4134C1D0Ev();
extern void _ZN7S4134C32v1Ev();
extern void _ZN7S4134C22v2Ev();
static  VTBL_ENTRY vtc_S4134C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4134C1[0]),
  (VTBL_ENTRY)&_ZN7S4134C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4134C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4134C32v1Ev,
  (VTBL_ENTRY)&_ZN7S4134C22v2Ev,
};
extern VTBL_ENTRY _ZTI7S4134C1[];
extern  VTBL_ENTRY _ZTV7S4134C1[];
Class_Descriptor cd_S4134C1 = {  "S4134C1", // class name
  bases_S4134C1, 2,
  &(vtc_S4134C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,48), // object size
  NSPAIRA(_ZTI7S4134C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4134C1),6, //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  S4690C3  {
  char s4690c3f0;
  int s4690c3f1;
  virtual  ~S4690C3(); // _ZN7S4690C3D1Ev
  virtual void  v3(); // _ZN7S4690C32v3Ev
  S4690C3(); // tgen
};
//SIG(-1 S4690C3) C1{ vd v1 Fc Fi}


 S4690C3 ::~S4690C3(){ note_dtor("S4690C3", this);}
void  S4690C3 ::v3(){vfunc_called(this, "_ZN7S4690C32v3Ev");}
S4690C3 ::S4690C3(){ note_ctor("S4690C3", this);} // tgen

static void Test_S4690C3()
{
  extern Class_Descriptor cd_S4690C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S4690C3, buf);
    S4690C3 *dp, &lv = *(dp=new (buf) S4690C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S4690C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4690C3)");
    check_field_offset(lv, s4690c3f0, ABISELECT(8,4), "S4690C3.s4690c3f0");
    check_field_offset(lv, s4690c3f1, ABISELECT(12,8), "S4690C3.s4690c3f1");
    test_class_info(&lv, &cd_S4690C3);
    dp->~S4690C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4690C3(Test_S4690C3, "S4690C3", ABISELECT(16,12));

#else // __cplusplus

extern void _ZN7S4690C3C1Ev();
extern void _ZN7S4690C3D1Ev();
Name_Map name_map_S4690C3[] = {
  NSPAIR(_ZN7S4690C3C1Ev),
  NSPAIR(_ZN7S4690C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4690C3[];
extern void _ZN7S4690C3D1Ev();
extern void _ZN7S4690C3D0Ev();
extern void _ZN7S4690C32v3Ev();
static  VTBL_ENTRY vtc_S4690C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4690C3[0]),
  (VTBL_ENTRY)&_ZN7S4690C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4690C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4690C32v3Ev,
};
extern VTBL_ENTRY _ZTI7S4690C3[];
extern  VTBL_ENTRY _ZTV7S4690C3[];
Class_Descriptor cd_S4690C3 = {  "S4690C3", // class name
  0,0,//no base classes
  &(vtc_S4690C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI7S4690C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4690C3),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  S4690C2  : S4690C3 {
  void *s4690c2f0;
  virtual  ~S4690C2(); // _ZN7S4690C2D1Ev
  virtual void  v4(); // _ZN7S4690C22v4Ev
  virtual void  v5(); // _ZN7S4690C22v5Ev
  S4690C2(); // tgen
};
//SIG(-1 S4690C2) C1{ BC2{ vd v3 Fc Fi} vd v1 v2 Fp}


 S4690C2 ::~S4690C2(){ note_dtor("S4690C2", this);}
void  S4690C2 ::v4(){vfunc_called(this, "_ZN7S4690C22v4Ev");}
void  S4690C2 ::v5(){vfunc_called(this, "_ZN7S4690C22v5Ev");}
S4690C2 ::S4690C2(){ note_ctor("S4690C2", this);} // tgen

static void Test_S4690C2()
{
  extern Class_Descriptor cd_S4690C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,5)];
    init_test(&cd_S4690C2, buf);
    S4690C2 *dp, &lv = *(dp=new (buf) S4690C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S4690C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4690C2)");
    check_base_class_offset(lv, (S4690C3*), 0, "S4690C2");
    check_field_offset(lv, s4690c2f0, ABISELECT(16,12), "S4690C2.s4690c2f0");
    test_class_info(&lv, &cd_S4690C2);
    dp->~S4690C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4690C2(Test_S4690C2, "S4690C2", ABISELECT(24,16));

#else // __cplusplus

extern void _ZN7S4690C2C1Ev();
extern void _ZN7S4690C2D1Ev();
Name_Map name_map_S4690C2[] = {
  NSPAIR(_ZN7S4690C2C1Ev),
  NSPAIR(_ZN7S4690C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4690C3;
extern VTBL_ENTRY _ZTI7S4690C3[];
extern  VTBL_ENTRY _ZTV7S4690C3[];
static Base_Class bases_S4690C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4690C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI7S4690C2[];
extern void _ZN7S4690C2D1Ev();
extern void _ZN7S4690C2D0Ev();
extern void _ZN7S4690C32v3Ev();
extern void _ZN7S4690C22v4Ev();
extern void _ZN7S4690C22v5Ev();
static  VTBL_ENTRY vtc_S4690C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4690C2[0]),
  (VTBL_ENTRY)&_ZN7S4690C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4690C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4690C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4690C22v4Ev,
  (VTBL_ENTRY)&_ZN7S4690C22v5Ev,
};
extern VTBL_ENTRY _ZTI7S4690C2[];
extern  VTBL_ENTRY _ZTV7S4690C2[];
Class_Descriptor cd_S4690C2 = {  "S4690C2", // class name
  bases_S4690C2, 1,
  &(vtc_S4690C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,16), // object size
  NSPAIRA(_ZTI7S4690C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4690C2),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  S4690C1  : S4690C2 {
  virtual  ~S4690C1(); // _ZN7S4690C1D1Ev
  virtual void  v1(); // _ZN7S4690C12v1Ev
  virtual void  v2(); // _ZN7S4690C12v2Ev
  S4690C1(); // tgen
};
//SIG(1 S4690C1) C1{ BC2{ BC3{ vd v3 Fc Fi} vd v4 v5 Fp} vd v1 v2}


 S4690C1 ::~S4690C1(){ note_dtor("S4690C1", this);}
void  S4690C1 ::v1(){vfunc_called(this, "_ZN7S4690C12v1Ev");}
void  S4690C1 ::v2(){vfunc_called(this, "_ZN7S4690C12v2Ev");}
S4690C1 ::S4690C1(){ note_ctor("S4690C1", this);} // tgen

static void Test_S4690C1()
{
  extern Class_Descriptor cd_S4690C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,5)];
    init_test(&cd_S4690C1, buf);
    S4690C1 *dp, &lv = *(dp=new (buf) S4690C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S4690C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4690C1)");
    check_base_class_offset(lv, (S4690C3*)(S4690C2*), 0, "S4690C1");
    check_base_class_offset(lv, (S4690C2*), 0, "S4690C1");
    test_class_info(&lv, &cd_S4690C1);
    dp->~S4690C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4690C1(Test_S4690C1, "S4690C1", ABISELECT(24,16));

#else // __cplusplus

extern void _ZN7S4690C1C1Ev();
extern void _ZN7S4690C1D1Ev();
Name_Map name_map_S4690C1[] = {
  NSPAIR(_ZN7S4690C1C1Ev),
  NSPAIR(_ZN7S4690C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4690C3;
extern VTBL_ENTRY _ZTI7S4690C3[];
extern  VTBL_ENTRY _ZTV7S4690C3[];
extern Class_Descriptor cd_S4690C2;
extern VTBL_ENTRY _ZTI7S4690C2[];
extern  VTBL_ENTRY _ZTV7S4690C2[];
static Base_Class bases_S4690C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4690C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S4690C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S4690C1[];
extern void _ZN7S4690C1D1Ev();
extern void _ZN7S4690C1D0Ev();
extern void _ZN7S4690C32v3Ev();
extern void _ZN7S4690C22v4Ev();
extern void _ZN7S4690C22v5Ev();
extern void _ZN7S4690C12v1Ev();
extern void _ZN7S4690C12v2Ev();
static  VTBL_ENTRY vtc_S4690C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4690C1[0]),
  (VTBL_ENTRY)&_ZN7S4690C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4690C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4690C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4690C22v4Ev,
  (VTBL_ENTRY)&_ZN7S4690C22v5Ev,
  (VTBL_ENTRY)&_ZN7S4690C12v1Ev,
  (VTBL_ENTRY)&_ZN7S4690C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S4690C1[];
extern  VTBL_ENTRY _ZTV7S4690C1[];
Class_Descriptor cd_S4690C1 = {  "S4690C1", // class name
  bases_S4690C1, 2,
  &(vtc_S4690C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,16), // object size
  NSPAIRA(_ZTI7S4690C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4690C1),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  S4126C3  {
  char s4126c3f0;
  int s4126c3f1;
  virtual  ~S4126C3(); // _ZN7S4126C3D1Ev
  virtual void  v1(); // _ZN7S4126C32v1Ev
  S4126C3(); // tgen
};
//SIG(-1 S4126C3) C1{ vd v1 Fc Fi}


 S4126C3 ::~S4126C3(){ note_dtor("S4126C3", this);}
void  S4126C3 ::v1(){vfunc_called(this, "_ZN7S4126C32v1Ev");}
S4126C3 ::S4126C3(){ note_ctor("S4126C3", this);} // tgen

static void Test_S4126C3()
{
  extern Class_Descriptor cd_S4126C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S4126C3, buf);
    S4126C3 *dp, &lv = *(dp=new (buf) S4126C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S4126C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4126C3)");
    check_field_offset(lv, s4126c3f0, ABISELECT(8,4), "S4126C3.s4126c3f0");
    check_field_offset(lv, s4126c3f1, ABISELECT(12,8), "S4126C3.s4126c3f1");
    test_class_info(&lv, &cd_S4126C3);
    dp->~S4126C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4126C3(Test_S4126C3, "S4126C3", ABISELECT(16,12));

#else // __cplusplus

extern void _ZN7S4126C3C1Ev();
extern void _ZN7S4126C3D1Ev();
Name_Map name_map_S4126C3[] = {
  NSPAIR(_ZN7S4126C3C1Ev),
  NSPAIR(_ZN7S4126C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4126C3[];
extern void _ZN7S4126C3D1Ev();
extern void _ZN7S4126C3D0Ev();
extern void _ZN7S4126C32v1Ev();
static  VTBL_ENTRY vtc_S4126C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4126C3[0]),
  (VTBL_ENTRY)&_ZN7S4126C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4126C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4126C32v1Ev,
};
extern VTBL_ENTRY _ZTI7S4126C3[];
extern  VTBL_ENTRY _ZTV7S4126C3[];
Class_Descriptor cd_S4126C3 = {  "S4126C3", // class name
  0,0,//no base classes
  &(vtc_S4126C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI7S4126C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4126C3),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  S4126C2  : S4126C3 {
  int s4126c2f0[5];
  void *s4126c2f1[7];
  int s4126c2f2;
  virtual  ~S4126C2(); // _ZN7S4126C2D1Ev
  S4126C2(); // tgen
};
//SIG(-1 S4126C2) C1{ BC2{ vd v1 Fc Fi} vd Fi[5] Fp[7] Fi}


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

static void Test_S4126C2()
{
  extern Class_Descriptor cd_S4126C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(14,17)];
    init_test(&cd_S4126C2, buf);
    S4126C2 *dp, &lv = *(dp=new (buf) S4126C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(104,64), "sizeof(S4126C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4126C2)");
    check_base_class_offset(lv, (S4126C3*), 0, "S4126C2");
    check_field_offset(lv, s4126c2f0, ABISELECT(16,12), "S4126C2.s4126c2f0");
    check_field_offset(lv, s4126c2f1, ABISELECT(40,32), "S4126C2.s4126c2f1");
    check_field_offset(lv, s4126c2f2, ABISELECT(96,60), "S4126C2.s4126c2f2");
    test_class_info(&lv, &cd_S4126C2);
    dp->~S4126C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4126C2(Test_S4126C2, "S4126C2", ABISELECT(104,64));

#else // __cplusplus

extern void _ZN7S4126C2C1Ev();
extern void _ZN7S4126C2D1Ev();
Name_Map name_map_S4126C2[] = {
  NSPAIR(_ZN7S4126C2C1Ev),
  NSPAIR(_ZN7S4126C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4126C3;
extern VTBL_ENTRY _ZTI7S4126C3[];
extern  VTBL_ENTRY _ZTV7S4126C3[];
static Base_Class bases_S4126C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4126C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI7S4126C2[];
extern void _ZN7S4126C2D1Ev();
extern void _ZN7S4126C2D0Ev();
extern void _ZN7S4126C32v1Ev();
static  VTBL_ENTRY vtc_S4126C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4126C2[0]),
  (VTBL_ENTRY)&_ZN7S4126C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4126C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4126C32v1Ev,
};
extern VTBL_ENTRY _ZTI7S4126C2[];
extern  VTBL_ENTRY _ZTV7S4126C2[];
Class_Descriptor cd_S4126C2 = {  "S4126C2", // class name
  bases_S4126C2, 1,
  &(vtc_S4126C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(104,64), // object size
  NSPAIRA(_ZTI7S4126C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4126C2),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  S4126C1  : S4126C2 {
  virtual  ~S4126C1(); // _ZN7S4126C1D1Ev
  S4126C1(); // tgen
};
//SIG(1 S4126C1) C1{ BC2{ BC3{ vd v1 Fc Fi} vd Fi[5] Fp[7] Fi} vd}


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

static void Test_S4126C1()
{
  extern Class_Descriptor cd_S4126C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(14,17)];
    init_test(&cd_S4126C1, buf);
    S4126C1 *dp, &lv = *(dp=new (buf) S4126C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(104,64), "sizeof(S4126C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4126C1)");
    check_base_class_offset(lv, (S4126C3*)(S4126C2*), 0, "S4126C1");
    check_base_class_offset(lv, (S4126C2*), 0, "S4126C1");
    test_class_info(&lv, &cd_S4126C1);
    dp->~S4126C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4126C1(Test_S4126C1, "S4126C1", ABISELECT(104,64));

#else // __cplusplus

extern void _ZN7S4126C1C1Ev();
extern void _ZN7S4126C1D1Ev();
Name_Map name_map_S4126C1[] = {
  NSPAIR(_ZN7S4126C1C1Ev),
  NSPAIR(_ZN7S4126C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4126C3;
extern VTBL_ENTRY _ZTI7S4126C3[];
extern  VTBL_ENTRY _ZTV7S4126C3[];
extern Class_Descriptor cd_S4126C2;
extern VTBL_ENTRY _ZTI7S4126C2[];
extern  VTBL_ENTRY _ZTV7S4126C2[];
static Base_Class bases_S4126C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4126C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S4126C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S4126C1[];
extern void _ZN7S4126C1D1Ev();
extern void _ZN7S4126C1D0Ev();
extern void _ZN7S4126C32v1Ev();
static  VTBL_ENTRY vtc_S4126C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4126C1[0]),
  (VTBL_ENTRY)&_ZN7S4126C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4126C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4126C32v1Ev,
};
extern VTBL_ENTRY _ZTI7S4126C1[];
extern  VTBL_ENTRY _ZTV7S4126C1[];
Class_Descriptor cd_S4126C1 = {  "S4126C1", // class name
  bases_S4126C1, 2,
  &(vtc_S4126C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(104,64), // object size
  NSPAIRA(_ZTI7S4126C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4126C1),5, //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  S4121C3  {
  char s4121c3f0;
  int s4121c3f1;
  virtual  ~S4121C3(); // _ZN7S4121C3D1Ev
  virtual void  v1(); // _ZN7S4121C32v1Ev
  S4121C3(); // tgen
};
//SIG(-1 S4121C3) C1{ vd v1 Fc Fi}


 S4121C3 ::~S4121C3(){ note_dtor("S4121C3", this);}
void  S4121C3 ::v1(){vfunc_called(this, "_ZN7S4121C32v1Ev");}
S4121C3 ::S4121C3(){ note_ctor("S4121C3", this);} // tgen

static void Test_S4121C3()
{
  extern Class_Descriptor cd_S4121C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S4121C3, buf);
    S4121C3 *dp, &lv = *(dp=new (buf) S4121C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S4121C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4121C3)");
    check_field_offset(lv, s4121c3f0, ABISELECT(8,4), "S4121C3.s4121c3f0");
    check_field_offset(lv, s4121c3f1, ABISELECT(12,8), "S4121C3.s4121c3f1");
    test_class_info(&lv, &cd_S4121C3);
    dp->~S4121C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4121C3(Test_S4121C3, "S4121C3", ABISELECT(16,12));

#else // __cplusplus

extern void _ZN7S4121C3C1Ev();
extern void _ZN7S4121C3D1Ev();
Name_Map name_map_S4121C3[] = {
  NSPAIR(_ZN7S4121C3C1Ev),
  NSPAIR(_ZN7S4121C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4121C3[];
extern void _ZN7S4121C3D1Ev();
extern void _ZN7S4121C3D0Ev();
extern void _ZN7S4121C32v1Ev();
static  VTBL_ENTRY vtc_S4121C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4121C3[0]),
  (VTBL_ENTRY)&_ZN7S4121C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4121C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4121C32v1Ev,
};
extern VTBL_ENTRY _ZTI7S4121C3[];
extern  VTBL_ENTRY _ZTV7S4121C3[];
Class_Descriptor cd_S4121C3 = {  "S4121C3", // class name
  0,0,//no base classes
  &(vtc_S4121C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI7S4121C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4121C3),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  S4121C2  : S4121C3 {
  int s4121c2f0[3];
  void *s4121c2f1[2];
  int s4121c2f2;
  virtual  ~S4121C2(); // _ZN7S4121C2D1Ev
  S4121C2(); // tgen
};
//SIG(-1 S4121C2) C1{ BC2{ vd v1 Fc Fi} vd Fi[3] Fp[2] Fi}


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

static void Test_S4121C2()
{
  extern Class_Descriptor cd_S4121C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(8,10)];
    init_test(&cd_S4121C2, buf);
    S4121C2 *dp, &lv = *(dp=new (buf) S4121C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,36), "sizeof(S4121C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4121C2)");
    check_base_class_offset(lv, (S4121C3*), 0, "S4121C2");
    check_field_offset(lv, s4121c2f0, ABISELECT(16,12), "S4121C2.s4121c2f0");
    check_field_offset(lv, s4121c2f1, ABISELECT(32,24), "S4121C2.s4121c2f1");
    check_field_offset(lv, s4121c2f2, ABISELECT(48,32), "S4121C2.s4121c2f2");
    test_class_info(&lv, &cd_S4121C2);
    dp->~S4121C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4121C2(Test_S4121C2, "S4121C2", ABISELECT(56,36));

#else // __cplusplus

extern void _ZN7S4121C2C1Ev();
extern void _ZN7S4121C2D1Ev();
Name_Map name_map_S4121C2[] = {
  NSPAIR(_ZN7S4121C2C1Ev),
  NSPAIR(_ZN7S4121C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4121C3;
extern VTBL_ENTRY _ZTI7S4121C3[];
extern  VTBL_ENTRY _ZTV7S4121C3[];
static Base_Class bases_S4121C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4121C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI7S4121C2[];
extern void _ZN7S4121C2D1Ev();
extern void _ZN7S4121C2D0Ev();
extern void _ZN7S4121C32v1Ev();
static  VTBL_ENTRY vtc_S4121C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4121C2[0]),
  (VTBL_ENTRY)&_ZN7S4121C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4121C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4121C32v1Ev,
};
extern VTBL_ENTRY _ZTI7S4121C2[];
extern  VTBL_ENTRY _ZTV7S4121C2[];
Class_Descriptor cd_S4121C2 = {  "S4121C2", // class name
  bases_S4121C2, 1,
  &(vtc_S4121C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(56,36), // object size
  NSPAIRA(_ZTI7S4121C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4121C2),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  S4121C1  : S4121C2 {
  virtual  ~S4121C1(); // _ZN7S4121C1D1Ev
  S4121C1(); // tgen
};
//SIG(1 S4121C1) C1{ BC2{ BC3{ vd v1 Fc Fi} vd Fi[3] Fp[2] Fi} vd}


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

static void Test_S4121C1()
{
  extern Class_Descriptor cd_S4121C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(8,10)];
    init_test(&cd_S4121C1, buf);
    S4121C1 *dp, &lv = *(dp=new (buf) S4121C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,36), "sizeof(S4121C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4121C1)");
    check_base_class_offset(lv, (S4121C3*)(S4121C2*), 0, "S4121C1");
    check_base_class_offset(lv, (S4121C2*), 0, "S4121C1");
    test_class_info(&lv, &cd_S4121C1);
    dp->~S4121C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4121C1(Test_S4121C1, "S4121C1", ABISELECT(56,36));

#else // __cplusplus

extern void _ZN7S4121C1C1Ev();
extern void _ZN7S4121C1D1Ev();
Name_Map name_map_S4121C1[] = {
  NSPAIR(_ZN7S4121C1C1Ev),
  NSPAIR(_ZN7S4121C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4121C3;
extern VTBL_ENTRY _ZTI7S4121C3[];
extern  VTBL_ENTRY _ZTV7S4121C3[];
extern Class_Descriptor cd_S4121C2;
extern VTBL_ENTRY _ZTI7S4121C2[];
extern  VTBL_ENTRY _ZTV7S4121C2[];
static Base_Class bases_S4121C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4121C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S4121C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S4121C1[];
extern void _ZN7S4121C1D1Ev();
extern void _ZN7S4121C1D0Ev();
extern void _ZN7S4121C32v1Ev();
static  VTBL_ENTRY vtc_S4121C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4121C1[0]),
  (VTBL_ENTRY)&_ZN7S4121C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4121C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4121C32v1Ev,
};
extern VTBL_ENTRY _ZTI7S4121C1[];
extern  VTBL_ENTRY _ZTV7S4121C1[];
Class_Descriptor cd_S4121C1 = {  "S4121C1", // class name
  bases_S4121C1, 2,
  &(vtc_S4121C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(56,36), // object size
  NSPAIRA(_ZTI7S4121C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4121C1),5, //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  S8421C2  {
  char s8421c2f0;
  int s8421c2f1;
  virtual  ~S8421C2(); // _ZN7S8421C2D1Ev
  virtual void  v1(); // _ZN7S8421C22v1Ev
  S8421C2(); // tgen
};
//SIG(-1 S8421C2) C1{ vd v1 Fc Fi}


 S8421C2 ::~S8421C2(){ note_dtor("S8421C2", this);}
void  S8421C2 ::v1(){vfunc_called(this, "_ZN7S8421C22v1Ev");}
S8421C2 ::S8421C2(){ note_ctor("S8421C2", this);} // tgen

static void Test_S8421C2()
{
  extern Class_Descriptor cd_S8421C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S8421C2, buf);
    S8421C2 *dp, &lv = *(dp=new (buf) S8421C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S8421C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8421C2)");
    check_field_offset(lv, s8421c2f0, ABISELECT(8,4), "S8421C2.s8421c2f0");
    check_field_offset(lv, s8421c2f1, ABISELECT(12,8), "S8421C2.s8421c2f1");
    test_class_info(&lv, &cd_S8421C2);
    dp->~S8421C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8421C2(Test_S8421C2, "S8421C2", ABISELECT(16,12));

#else // __cplusplus

extern void _ZN7S8421C2C1Ev();
extern void _ZN7S8421C2D1Ev();
Name_Map name_map_S8421C2[] = {
  NSPAIR(_ZN7S8421C2C1Ev),
  NSPAIR(_ZN7S8421C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S8421C2[];
extern void _ZN7S8421C2D1Ev();
extern void _ZN7S8421C2D0Ev();
extern void _ZN7S8421C22v1Ev();
static  VTBL_ENTRY vtc_S8421C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8421C2[0]),
  (VTBL_ENTRY)&_ZN7S8421C2D1Ev,
  (VTBL_ENTRY)&_ZN7S8421C2D0Ev,
  (VTBL_ENTRY)&_ZN7S8421C22v1Ev,
};
extern VTBL_ENTRY _ZTI7S8421C2[];
extern  VTBL_ENTRY _ZTV7S8421C2[];
Class_Descriptor cd_S8421C2 = {  "S8421C2", // class name
  0,0,//no base classes
  &(vtc_S8421C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI7S8421C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S8421C2),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  S8421C1  : S8421C2 {
  void *s8421c1f0[2];
  int s8421c1f1[3];
  void *s8421c1f2;
  int s8421c1f3[3];
  virtual  ~S8421C1(); // _ZN7S8421C1D1Ev
  S8421C1(); // tgen
};
//SIG(1 S8421C1) C1{ BC2{ vd v1 Fc Fi} vd Fp[2] Fi[3] Fp Fi[3]}


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

static void Test_S8421C1()
{
  extern Class_Descriptor cd_S8421C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,13)];
    init_test(&cd_S8421C1, buf);
    S8421C1 *dp, &lv = *(dp=new (buf) S8421C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,48), "sizeof(S8421C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8421C1)");
    check_base_class_offset(lv, (S8421C2*), 0, "S8421C1");
    check_field_offset(lv, s8421c1f0, ABISELECT(16,12), "S8421C1.s8421c1f0");
    check_field_offset(lv, s8421c1f1, ABISELECT(32,20), "S8421C1.s8421c1f1");
    check_field_offset(lv, s8421c1f2, ABISELECT(48,32), "S8421C1.s8421c1f2");
    check_field_offset(lv, s8421c1f3, ABISELECT(56,36), "S8421C1.s8421c1f3");
    test_class_info(&lv, &cd_S8421C1);
    dp->~S8421C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8421C1(Test_S8421C1, "S8421C1", ABISELECT(72,48));

#else // __cplusplus

extern void _ZN7S8421C1C1Ev();
extern void _ZN7S8421C1D1Ev();
Name_Map name_map_S8421C1[] = {
  NSPAIR(_ZN7S8421C1C1Ev),
  NSPAIR(_ZN7S8421C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S8421C2;
extern VTBL_ENTRY _ZTI7S8421C2[];
extern  VTBL_ENTRY _ZTV7S8421C2[];
static Base_Class bases_S8421C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S8421C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI7S8421C1[];
extern void _ZN7S8421C1D1Ev();
extern void _ZN7S8421C1D0Ev();
extern void _ZN7S8421C22v1Ev();
static  VTBL_ENTRY vtc_S8421C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8421C1[0]),
  (VTBL_ENTRY)&_ZN7S8421C1D1Ev,
  (VTBL_ENTRY)&_ZN7S8421C1D0Ev,
  (VTBL_ENTRY)&_ZN7S8421C22v1Ev,
};
extern VTBL_ENTRY _ZTI7S8421C1[];
extern  VTBL_ENTRY _ZTV7S8421C1[];
Class_Descriptor cd_S8421C1 = {  "S8421C1", // class name
  bases_S8421C1, 1,
  &(vtc_S8421C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,48), // object size
  NSPAIRA(_ZTI7S8421C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S8421C1),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  S8675C2  {
  char s8675c2f0;
  int s8675c2f1;
  virtual  ~S8675C2(); // _ZN7S8675C2D1Ev
  virtual void  v2(); // _ZN7S8675C22v2Ev
  S8675C2(); // tgen
};
//SIG(-1 S8675C2) C1{ vd v1 Fc Fi}


 S8675C2 ::~S8675C2(){ note_dtor("S8675C2", this);}
void  S8675C2 ::v2(){vfunc_called(this, "_ZN7S8675C22v2Ev");}
S8675C2 ::S8675C2(){ note_ctor("S8675C2", this);} // tgen

static void Test_S8675C2()
{
  extern Class_Descriptor cd_S8675C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S8675C2, buf);
    S8675C2 *dp, &lv = *(dp=new (buf) S8675C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S8675C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8675C2)");
    check_field_offset(lv, s8675c2f0, ABISELECT(8,4), "S8675C2.s8675c2f0");
    check_field_offset(lv, s8675c2f1, ABISELECT(12,8), "S8675C2.s8675c2f1");
    test_class_info(&lv, &cd_S8675C2);
    dp->~S8675C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8675C2(Test_S8675C2, "S8675C2", ABISELECT(16,12));

#else // __cplusplus

extern void _ZN7S8675C2C1Ev();
extern void _ZN7S8675C2D1Ev();
Name_Map name_map_S8675C2[] = {
  NSPAIR(_ZN7S8675C2C1Ev),
  NSPAIR(_ZN7S8675C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S8675C2[];
extern void _ZN7S8675C2D1Ev();
extern void _ZN7S8675C2D0Ev();
extern void _ZN7S8675C22v2Ev();
static  VTBL_ENTRY vtc_S8675C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8675C2[0]),
  (VTBL_ENTRY)&_ZN7S8675C2D1Ev,
  (VTBL_ENTRY)&_ZN7S8675C2D0Ev,
  (VTBL_ENTRY)&_ZN7S8675C22v2Ev,
};
extern VTBL_ENTRY _ZTI7S8675C2[];
extern  VTBL_ENTRY _ZTV7S8675C2[];
Class_Descriptor cd_S8675C2 = {  "S8675C2", // class name
  0,0,//no base classes
  &(vtc_S8675C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI7S8675C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S8675C2),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  S8675C3_nt  {
  void  mf8675c3(); // _ZN10S8675C3_nt8mf8675c3Ev
  virtual  ~S8675C3_nt(); // _ZN10S8675C3_ntD1Ev
  S8675C3_nt(); // tgen
};
//SIG(-1 S8675C3_nt) C1{ vd m}


void  S8675C3_nt ::mf8675c3(){}
 S8675C3_nt ::~S8675C3_nt(){ note_dtor("S8675C3_nt", this);}
S8675C3_nt ::S8675C3_nt(){ note_ctor("S8675C3_nt", this);} // tgen

//skip512 S8675C3_nt

#else // __cplusplus

extern void _ZN10S8675C3_ntC1Ev();
extern void _ZN10S8675C3_ntD1Ev();
Name_Map name_map_S8675C3_nt[] = {
  NSPAIR(_ZN10S8675C3_ntC1Ev),
  NSPAIR(_ZN10S8675C3_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S8675C3_nt[];
extern void _ZN10S8675C3_ntD1Ev();
extern void _ZN10S8675C3_ntD0Ev();
static  VTBL_ENTRY vtc_S8675C3_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S8675C3_nt[0]),
  (VTBL_ENTRY)&_ZN10S8675C3_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S8675C3_ntD0Ev,
};
extern VTBL_ENTRY _ZTI10S8675C3_nt[];
VTBL_ENTRY *P__ZTI10S8675C3_nt = _ZTI10S8675C3_nt; 
extern  VTBL_ENTRY _ZTV10S8675C3_nt[];
Class_Descriptor cd_S8675C3_nt = {  "S8675C3_nt", // class name
  0,0,//no base classes
  &(vtc_S8675C3_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI10S8675C3_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S8675C3_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  S8675C1  : S8675C2 , S8675C3_nt {
  void *s8675c1f0[2];
  char s8675c1f1;
  virtual  ~S8675C1(); // _ZN7S8675C1D1Ev
  virtual void  v1(); // _ZN7S8675C12v1Ev
  S8675C1(); // tgen
};
//SIG(1 S8675C1) C1{ BC2{ vd v2 Fc Fi} BC3{ vd m} vd v1 Fp[2] Fc}


 S8675C1 ::~S8675C1(){ note_dtor("S8675C1", this);}
void  S8675C1 ::v1(){vfunc_called(this, "_ZN7S8675C12v1Ev");}
S8675C1 ::S8675C1(){ note_ctor("S8675C1", this);} // tgen

static void Test_S8675C1()
{
  extern Class_Descriptor cd_S8675C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,8)];
    init_test(&cd_S8675C1, buf);
    S8675C1 *dp, &lv = *(dp=new (buf) S8675C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,28), "sizeof(S8675C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8675C1)");
    check_base_class_offset(lv, (S8675C2*), 0, "S8675C1");
    check_base_class_offset(lv, (S8675C3_nt*), ABISELECT(16,12), "S8675C1");
    check_field_offset(lv, s8675c1f0, ABISELECT(24,16), "S8675C1.s8675c1f0");
    check_field_offset(lv, s8675c1f1, ABISELECT(40,24), "S8675C1.s8675c1f1");
    test_class_info(&lv, &cd_S8675C1);
    dp->~S8675C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8675C1(Test_S8675C1, "S8675C1", ABISELECT(48,28));

#else // __cplusplus

extern void _ZN7S8675C1C1Ev();
extern void _ZN7S8675C1D1Ev();
Name_Map name_map_S8675C1[] = {
  NSPAIR(_ZN7S8675C1C1Ev),
  NSPAIR(_ZN7S8675C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S8675C2;
extern VTBL_ENTRY _ZTI7S8675C2[];
extern  VTBL_ENTRY _ZTV7S8675C2[];
extern Class_Descriptor cd_S8675C3_nt;
extern VTBL_ENTRY _ZTI10S8675C3_nt[];
extern  VTBL_ENTRY _ZTV10S8675C3_nt[];
static Base_Class bases_S8675C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S8675C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S8675C3_nt,    ABISELECT(16,12), //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
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S8675C1[];
extern void _ZN7S8675C1D1Ev();
extern void _ZN7S8675C1D0Ev();
extern void _ZN7S8675C22v2Ev();
extern void _ZN7S8675C12v1Ev();
extern void ABISELECT(_ZThn16_N7S8675C1D1Ev,_ZThn12_N7S8675C1D1Ev)();
extern void ABISELECT(_ZThn16_N7S8675C1D0Ev,_ZThn12_N7S8675C1D0Ev)();
static  VTBL_ENTRY vtc_S8675C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8675C1[0]),
  (VTBL_ENTRY)&_ZN7S8675C1D1Ev,
  (VTBL_ENTRY)&_ZN7S8675C1D0Ev,
  (VTBL_ENTRY)&_ZN7S8675C22v2Ev,
  (VTBL_ENTRY)&_ZN7S8675C12v1Ev,
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI7S8675C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S8675C1D1Ev,_ZThn12_N7S8675C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S8675C1D0Ev,_ZThn12_N7S8675C1D0Ev),
};
extern VTBL_ENTRY _ZTI7S8675C1[];
extern  VTBL_ENTRY _ZTV7S8675C1[];
Class_Descriptor cd_S8675C1 = {  "S8675C1", // class name
  bases_S8675C1, 2,
  &(vtc_S8675C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,28), // object size
  NSPAIRA(_ZTI7S8675C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S8675C1),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  S9012C2  {
  virtual  ~S9012C2(); // _ZN7S9012C2D1Ev
  virtual void  v2(); // _ZN7S9012C22v2Ev
  virtual void  v3(); // _ZN7S9012C22v3Ev
  S9012C2(); // tgen
};
//SIG(-1 S9012C2) C1{ vd v1 v2}


 S9012C2 ::~S9012C2(){ note_dtor("S9012C2", this);}
void  S9012C2 ::v2(){vfunc_called(this, "_ZN7S9012C22v2Ev");}
void  S9012C2 ::v3(){vfunc_called(this, "_ZN7S9012C22v3Ev");}
S9012C2 ::S9012C2(){ note_ctor("S9012C2", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S9012C2C1Ev();
extern void _ZN7S9012C2D1Ev();
Name_Map name_map_S9012C2[] = {
  NSPAIR(_ZN7S9012C2C1Ev),
  NSPAIR(_ZN7S9012C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S9012C2[];
extern void _ZN7S9012C2D1Ev();
extern void _ZN7S9012C2D0Ev();
extern void _ZN7S9012C22v2Ev();
extern void _ZN7S9012C22v3Ev();
static  VTBL_ENTRY vtc_S9012C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9012C2[0]),
  (VTBL_ENTRY)&_ZN7S9012C2D1Ev,
  (VTBL_ENTRY)&_ZN7S9012C2D0Ev,
  (VTBL_ENTRY)&_ZN7S9012C22v2Ev,
  (VTBL_ENTRY)&_ZN7S9012C22v3Ev,
};
extern VTBL_ENTRY _ZTI7S9012C2[];
extern  VTBL_ENTRY _ZTV7S9012C2[];
Class_Descriptor cd_S9012C2 = {  "S9012C2", // class name
  0,0,//no base classes
  &(vtc_S9012C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S9012C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S9012C2),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  S9012C3  : S9012C2 {
  int s9012c3f0[2];
  __tsi64 s9012c3f1;
  ~S9012C3(); // tgen
  S9012C3(); // tgen
};
//SIG(-1 S9012C3) C1{ BC2{ vd v1 v2} Fi[2] FL}


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

static void Test_S9012C3()
{
  extern Class_Descriptor cd_S9012C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,6)];
    init_test(&cd_S9012C3, buf);
    S9012C3 *dp, &lv = *(dp=new (buf) S9012C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(S9012C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9012C3)");
    check_base_class_offset(lv, (S9012C2*), 0, "S9012C3");
    check_field_offset(lv, s9012c3f0, ABISELECT(8,4), "S9012C3.s9012c3f0");
    check_field_offset(lv, s9012c3f1, ABISELECT(16,12), "S9012C3.s9012c3f1");
    test_class_info(&lv, &cd_S9012C3);
    dp->~S9012C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9012C3(Test_S9012C3, "S9012C3", ABISELECT(24,20));

#else // __cplusplus

extern void _ZN7S9012C3C1Ev();
extern void _ZN7S9012C3D1Ev();
Name_Map name_map_S9012C3[] = {
  NSPAIR(_ZN7S9012C3C1Ev),
  NSPAIR(_ZN7S9012C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S9012C2;
extern VTBL_ENTRY _ZTI7S9012C2[];
extern  VTBL_ENTRY _ZTV7S9012C2[];
static Base_Class bases_S9012C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S9012C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI7S9012C3[];
extern void _ZN7S9012C3D1Ev();
extern void _ZN7S9012C3D0Ev();
extern void _ZN7S9012C22v2Ev();
extern void _ZN7S9012C22v3Ev();
static  VTBL_ENTRY vtc_S9012C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9012C3[0]),
  (VTBL_ENTRY)&_ZN7S9012C3D1Ev,
  (VTBL_ENTRY)&_ZN7S9012C3D0Ev,
  (VTBL_ENTRY)&_ZN7S9012C22v2Ev,
  (VTBL_ENTRY)&_ZN7S9012C22v3Ev,
};
extern VTBL_ENTRY _ZTI7S9012C3[];
extern  VTBL_ENTRY _ZTV7S9012C3[];
Class_Descriptor cd_S9012C3 = {  "S9012C3", // class name
  bases_S9012C3, 1,
  &(vtc_S9012C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,20), // object size
  NSPAIRA(_ZTI7S9012C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S9012C3),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  S9012C1  : S9012C2 {
  ::S9012C3 s9012c1f0;
  virtual  ~S9012C1(); // _ZN7S9012C1D1Ev
  virtual void  v1(); // _ZN7S9012C12v1Ev
  S9012C1(); // tgen
};
//SIG(1 S9012C1) C1{ BC2{ vd v2 v3} vd v1 FC3{ BC2 Fi[2] FL}}


 S9012C1 ::~S9012C1(){ note_dtor("S9012C1", this);}
void  S9012C1 ::v1(){vfunc_called(this, "_ZN7S9012C12v1Ev");}
S9012C1 ::S9012C1(){ note_ctor("S9012C1", this);} // tgen

static void Test_S9012C1()
{
  extern Class_Descriptor cd_S9012C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,7)];
    init_test(&cd_S9012C1, buf);
    S9012C1 *dp, &lv = *(dp=new (buf) S9012C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,24), "sizeof(S9012C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9012C1)");
    check_base_class_offset(lv, (S9012C2*), 0, "S9012C1");
    check_field_offset(lv, s9012c1f0, ABISELECT(8,4), "S9012C1.s9012c1f0");
    test_class_info(&lv, &cd_S9012C1);
    dp->~S9012C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9012C1(Test_S9012C1, "S9012C1", ABISELECT(32,24));

#else // __cplusplus

extern void _ZN7S9012C1C1Ev();
extern void _ZN7S9012C1D1Ev();
Name_Map name_map_S9012C1[] = {
  NSPAIR(_ZN7S9012C1C1Ev),
  NSPAIR(_ZN7S9012C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S9012C2;
extern VTBL_ENTRY _ZTI7S9012C2[];
extern  VTBL_ENTRY _ZTV7S9012C2[];
static Base_Class bases_S9012C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S9012C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI7S9012C1[];
extern void _ZN7S9012C1D1Ev();
extern void _ZN7S9012C1D0Ev();
extern void _ZN7S9012C22v2Ev();
extern void _ZN7S9012C22v3Ev();
extern void _ZN7S9012C12v1Ev();
static  VTBL_ENTRY vtc_S9012C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9012C1[0]),
  (VTBL_ENTRY)&_ZN7S9012C1D1Ev,
  (VTBL_ENTRY)&_ZN7S9012C1D0Ev,
  (VTBL_ENTRY)&_ZN7S9012C22v2Ev,
  (VTBL_ENTRY)&_ZN7S9012C22v3Ev,
  (VTBL_ENTRY)&_ZN7S9012C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S9012C1[];
extern  VTBL_ENTRY _ZTV7S9012C1[];
Class_Descriptor cd_S9012C1 = {  "S9012C1", // class name
  bases_S9012C1, 1,
  &(vtc_S9012C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,24), // object size
  NSPAIRA(_ZTI7S9012C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S9012C1),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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4587C3  {
  virtual  ~S4587C3(); // _ZN7S4587C3D1Ev
  virtual void  v2(); // _ZN7S4587C32v2Ev
  S4587C3(); // tgen
};
//SIG(-1 S4587C3) C1{ vd v1}


 S4587C3 ::~S4587C3(){ note_dtor("S4587C3", this);}
void  S4587C3 ::v2(){vfunc_called(this, "_ZN7S4587C32v2Ev");}
S4587C3 ::S4587C3(){ note_ctor("S4587C3", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S4587C3C1Ev();
extern void _ZN7S4587C3D1Ev();
Name_Map name_map_S4587C3[] = {
  NSPAIR(_ZN7S4587C3C1Ev),
  NSPAIR(_ZN7S4587C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4587C3[];
extern void _ZN7S4587C3D1Ev();
extern void _ZN7S4587C3D0Ev();
extern void _ZN7S4587C32v2Ev();
static  VTBL_ENTRY vtc_S4587C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4587C3[0]),
  (VTBL_ENTRY)&_ZN7S4587C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4587C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4587C32v2Ev,
};
extern VTBL_ENTRY _ZTI7S4587C3[];
extern  VTBL_ENTRY _ZTV7S4587C3[];
Class_Descriptor cd_S4587C3 = {  "S4587C3", // class name
  0,0,//no base classes
  &(vtc_S4587C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S4587C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4587C3),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  S4587C2  : S4587C3 {
  ::S21579C7_nt s4587c2f0;
  virtual void  v3(); // _ZN7S4587C22v3Ev
  ~S4587C2(); // tgen
  S4587C2(); // tgen
};
//SIG(-1 S4587C2) C1{ BC2{ vd v2} v1 FC3{ m Fp[2]}}


void  S4587C2 ::v3(){vfunc_called(this, "_ZN7S4587C22v3Ev");}
S4587C2 ::~S4587C2(){ note_dtor("S4587C2", this);} // tgen
S4587C2 ::S4587C2(){ note_ctor("S4587C2", this);} // tgen

static void Test_S4587C2()
{
  extern Class_Descriptor cd_S4587C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S4587C2, buf);
    S4587C2 *dp, &lv = *(dp=new (buf) S4587C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S4587C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4587C2)");
    check_base_class_offset(lv, (S4587C3*), 0, "S4587C2");
    check_field_offset(lv, s4587c2f0, ABISELECT(8,4), "S4587C2.s4587c2f0");
    test_class_info(&lv, &cd_S4587C2);
    dp->~S4587C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4587C2(Test_S4587C2, "S4587C2", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S4587C2C1Ev();
extern void _ZN7S4587C2D1Ev();
Name_Map name_map_S4587C2[] = {
  NSPAIR(_ZN7S4587C2C1Ev),
  NSPAIR(_ZN7S4587C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4587C3;
extern VTBL_ENTRY _ZTI7S4587C3[];
extern  VTBL_ENTRY _ZTV7S4587C3[];
static Base_Class bases_S4587C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4587C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI7S4587C2[];
extern void _ZN7S4587C2D1Ev();
extern void _ZN7S4587C2D0Ev();
extern void _ZN7S4587C32v2Ev();
extern void _ZN7S4587C22v3Ev();
static  VTBL_ENTRY vtc_S4587C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4587C2[0]),
  (VTBL_ENTRY)&_ZN7S4587C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4587C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4587C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4587C22v3Ev,
};
extern VTBL_ENTRY _ZTI7S4587C2[];
extern  VTBL_ENTRY _ZTV7S4587C2[];
Class_Descriptor cd_S4587C2 = {  "S4587C2", // class name
  bases_S4587C2, 1,
  &(vtc_S4587C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S4587C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4587C2),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  S4587C1  : S4587C2 {
  int s4587c1f0;
  virtual void  v1(); // _ZN7S4587C12v1Ev
  ~S4587C1(); // tgen
  S4587C1(); // tgen
};
//SIG(1 S4587C1) C1{ BC2{ BC3{ vd v2} v3 FC4{ m Fp[2]}} v1 Fi}


void  S4587C1 ::v1(){vfunc_called(this, "_ZN7S4587C12v1Ev");}
S4587C1 ::~S4587C1(){ note_dtor("S4587C1", this);} // tgen
S4587C1 ::S4587C1(){ note_ctor("S4587C1", this);} // tgen

static void Test_S4587C1()
{
  extern Class_Descriptor cd_S4587C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S4587C1, buf);
    S4587C1 *dp, &lv = *(dp=new (buf) S4587C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S4587C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4587C1)");
    check_base_class_offset(lv, (S4587C3*)(S4587C2*), 0, "S4587C1");
    check_base_class_offset(lv, (S4587C2*), 0, "S4587C1");
    check_field_offset(lv, s4587c1f0, ABISELECT(24,12), "S4587C1.s4587c1f0");
    test_class_info(&lv, &cd_S4587C1);
    dp->~S4587C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4587C1(Test_S4587C1, "S4587C1", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN7S4587C1C1Ev();
extern void _ZN7S4587C1D1Ev();
Name_Map name_map_S4587C1[] = {
  NSPAIR(_ZN7S4587C1C1Ev),
  NSPAIR(_ZN7S4587C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4587C3;
extern VTBL_ENTRY _ZTI7S4587C3[];
extern  VTBL_ENTRY _ZTV7S4587C3[];
extern Class_Descriptor cd_S4587C2;
extern VTBL_ENTRY _ZTI7S4587C2[];
extern  VTBL_ENTRY _ZTV7S4587C2[];
static Base_Class bases_S4587C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4587C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S4587C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S4587C1[];
extern void _ZN7S4587C1D1Ev();
extern void _ZN7S4587C1D0Ev();
extern void _ZN7S4587C32v2Ev();
extern void _ZN7S4587C22v3Ev();
extern void _ZN7S4587C12v1Ev();
static  VTBL_ENTRY vtc_S4587C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4587C1[0]),
  (VTBL_ENTRY)&_ZN7S4587C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4587C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4587C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4587C22v3Ev,
  (VTBL_ENTRY)&_ZN7S4587C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S4587C1[];
extern  VTBL_ENTRY _ZTV7S4587C1[];
Class_Descriptor cd_S4587C1 = {  "S4587C1", // class name
  bases_S4587C1, 2,
  &(vtc_S4587C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI7S4587C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4587C1),7, //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  S19329C3  {
  int s19329c3f0;
  virtual void  v3(); // _ZN8S19329C32v3Ev
  virtual void  v4(); // _ZN8S19329C32v4Ev
  virtual void  v5(); // _ZN8S19329C32v5Ev
  virtual void  v6(); // _ZN8S19329C32v6Ev
  virtual void  v7(); // _ZN8S19329C32v7Ev
  ~S19329C3(); // tgen
  S19329C3(); // tgen
};
//SIG(-1 S19329C3) C1{ v1 v2 v3 v4 v5 Fi}


void  S19329C3 ::v3(){vfunc_called(this, "_ZN8S19329C32v3Ev");}
void  S19329C3 ::v4(){vfunc_called(this, "_ZN8S19329C32v4Ev");}
void  S19329C3 ::v5(){vfunc_called(this, "_ZN8S19329C32v5Ev");}
void  S19329C3 ::v6(){vfunc_called(this, "_ZN8S19329C32v6Ev");}
void  S19329C3 ::v7(){vfunc_called(this, "_ZN8S19329C32v7Ev");}
S19329C3 ::~S19329C3(){ note_dtor("S19329C3", this);} // tgen
S19329C3 ::S19329C3(){ note_ctor("S19329C3", this);} // tgen

static void Test_S19329C3()
{
  extern Class_Descriptor cd_S19329C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S19329C3, buf);
    S19329C3 *dp, &lv = *(dp=new (buf) S19329C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S19329C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19329C3)");
    check_field_offset(lv, s19329c3f0, ABISELECT(8,4), "S19329C3.s19329c3f0");
    test_class_info(&lv, &cd_S19329C3);
    dp->~S19329C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19329C3(Test_S19329C3, "S19329C3", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN8S19329C3C1Ev();
extern void _ZN8S19329C3D1Ev();
Name_Map name_map_S19329C3[] = {
  NSPAIR(_ZN8S19329C3C1Ev),
  NSPAIR(_ZN8S19329C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S19329C3[];
extern void _ZN8S19329C32v3Ev();
extern void _ZN8S19329C32v4Ev();
extern void _ZN8S19329C32v5Ev();
extern void _ZN8S19329C32v6Ev();
extern void _ZN8S19329C32v7Ev();
static  VTBL_ENTRY vtc_S19329C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19329C3[0]),
  (VTBL_ENTRY)&_ZN8S19329C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19329C32v4Ev,
  (VTBL_ENTRY)&_ZN8S19329C32v5Ev,
  (VTBL_ENTRY)&_ZN8S19329C32v6Ev,
  (VTBL_ENTRY)&_ZN8S19329C32v7Ev,
};
extern VTBL_ENTRY _ZTI8S19329C3[];
extern  VTBL_ENTRY _ZTV8S19329C3[];
Class_Descriptor cd_S19329C3 = {  "S19329C3", // class name
  0,0,//no base classes
  &(vtc_S19329C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S19329C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S19329C3),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  S19329C2  : S19329C3 {
  virtual void  v8(); // _ZN8S19329C22v8Ev
  ~S19329C2(); // tgen
  S19329C2(); // tgen
};
//SIG(-1 S19329C2) C1{ BC2{ v2 v3 v4 v5 v6 Fi} v1}


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

static void Test_S19329C2()
{
  extern Class_Descriptor cd_S19329C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S19329C2, buf);
    S19329C2 *dp, &lv = *(dp=new (buf) S19329C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S19329C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19329C2)");
    check_base_class_offset(lv, (S19329C3*), 0, "S19329C2");
    test_class_info(&lv, &cd_S19329C2);
    dp->~S19329C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19329C2(Test_S19329C2, "S19329C2", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN8S19329C2C1Ev();
extern void _ZN8S19329C2D1Ev();
Name_Map name_map_S19329C2[] = {
  NSPAIR(_ZN8S19329C2C1Ev),
  NSPAIR(_ZN8S19329C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19329C3;
extern VTBL_ENTRY _ZTI8S19329C3[];
extern  VTBL_ENTRY _ZTV8S19329C3[];
static Base_Class bases_S19329C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19329C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI8S19329C2[];
extern void _ZN8S19329C32v3Ev();
extern void _ZN8S19329C32v4Ev();
extern void _ZN8S19329C32v5Ev();
extern void _ZN8S19329C32v6Ev();
extern void _ZN8S19329C32v7Ev();
extern void _ZN8S19329C22v8Ev();
static  VTBL_ENTRY vtc_S19329C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19329C2[0]),
  (VTBL_ENTRY)&_ZN8S19329C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19329C32v4Ev,
  (VTBL_ENTRY)&_ZN8S19329C32v5Ev,
  (VTBL_ENTRY)&_ZN8S19329C32v6Ev,
  (VTBL_ENTRY)&_ZN8S19329C32v7Ev,
  (VTBL_ENTRY)&_ZN8S19329C22v8Ev,
};
extern VTBL_ENTRY _ZTI8S19329C2[];
extern  VTBL_ENTRY _ZTV8S19329C2[];
Class_Descriptor cd_S19329C2 = {  "S19329C2", // class name
  bases_S19329C2, 1,
  &(vtc_S19329C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S19329C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S19329C2),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  S19329C1  : virtual S19329C2 {
  virtual void  v1(); // _ZN8S19329C12v1Ev
  virtual void  v2(); // _ZN8S19329C12v2Ev
  ~S19329C1(); // tgen
  S19329C1(); // tgen
};
//SIG(1 S19329C1) C1{ VBC2{ BC3{ v3 v4 v5 v6 v7 Fi} v8} v1 v2}


void  S19329C1 ::v1(){vfunc_called(this, "_ZN8S19329C12v1Ev");}
void  S19329C1 ::v2(){vfunc_called(this, "_ZN8S19329C12v2Ev");}
S19329C1 ::~S19329C1(){ note_dtor("S19329C1", this);} // tgen
S19329C1 ::S19329C1(){ note_ctor("S19329C1", this);} // tgen

static void Test_S19329C1()
{
  extern Class_Descriptor cd_S19329C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S19329C1, buf);
    S19329C1 *dp, &lv = *(dp=new (buf) S19329C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S19329C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19329C1)");
    check_base_class_offset(lv, (S19329C3*)(S19329C2*), ABISELECT(8,4), "S19329C1");
    check_base_class_offset(lv, (S19329C2*), ABISELECT(8,4), "S19329C1");
    test_class_info(&lv, &cd_S19329C1);
    dp->~S19329C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19329C1(Test_S19329C1, "S19329C1", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN8S19329C1C1Ev();
extern void _ZN8S19329C1D1Ev();
Name_Map name_map_S19329C1[] = {
  NSPAIR(_ZN8S19329C1C1Ev),
  NSPAIR(_ZN8S19329C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19329C3;
extern VTBL_ENTRY _ZTI8S19329C3[];
extern  VTBL_ENTRY _ZTV8S19329C3[];
extern Class_Descriptor cd_S19329C2;
extern VTBL_ENTRY _ZTI8S19329C2[];
extern  VTBL_ENTRY _ZTV8S19329C2[];
static Base_Class bases_S19329C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19329C3,    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_S19329C2,    ABISELECT(8,4), //bcp->offset
    5, //bcp->virtual_function_table_offset
    8, //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 _ZTI8S19329C1[];
extern void _ZN8S19329C12v1Ev();
extern void _ZN8S19329C12v2Ev();
extern void _ZN8S19329C32v3Ev();
extern void _ZN8S19329C32v4Ev();
extern void _ZN8S19329C32v5Ev();
extern void _ZN8S19329C32v6Ev();
extern void _ZN8S19329C32v7Ev();
extern void _ZN8S19329C22v8Ev();
static  VTBL_ENTRY vtc_S19329C1[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S19329C1[0]),
  (VTBL_ENTRY)&_ZN8S19329C12v1Ev,
  (VTBL_ENTRY)&_ZN8S19329C12v2Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S19329C1[0]),
  (VTBL_ENTRY)&_ZN8S19329C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19329C32v4Ev,
  (VTBL_ENTRY)&_ZN8S19329C32v5Ev,
  (VTBL_ENTRY)&_ZN8S19329C32v6Ev,
  (VTBL_ENTRY)&_ZN8S19329C32v7Ev,
  (VTBL_ENTRY)&_ZN8S19329C22v8Ev,
};
extern VTBL_ENTRY _ZTV8S19329C1[];
static  VTT_ENTRY vtt_S19329C1[] = {
  {&(_ZTV8S19329C1[3]),  3,19},
  {&(_ZTV8S19329C1[13]),  13,19},
};
extern VTBL_ENTRY _ZTI8S19329C1[];
extern  VTBL_ENTRY _ZTV8S19329C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19329C1[];
Class_Descriptor cd_S19329C1 = {  "S19329C1", // class name
  bases_S19329C1, 2,
  &(vtc_S19329C1[0]), // expected_vtbl_contents
  &(vtt_S19329C1[0]), // expected_vtt_contents
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI8S19329C1),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S19329C1),19, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19329C1),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  S17603C4_nt  {
  __tsi64 s17603c4f0;
  void  mf17603c4(); // _ZN11S17603C4_nt9mf17603c4Ev
};
//SIG(-1 S17603C4_nt) C1{ m FL}


void  S17603C4_nt ::mf17603c4(){}

//skip512 S17603C4_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S17603C3_nt  {
  ::S17603C4_nt s17603c3f0;
  void  mf17603c3(); // _ZN11S17603C3_nt9mf17603c3Ev
};
//SIG(1 S17603C3_nt) C1{ m FC2{ m FL}}


void  S17603C3_nt ::mf17603c3(){}

//skip512 S17603C3_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S17603C1  {
  void *s17603c1f0;
  ::S2638C3_nt s17603c1f1;
  ::S17603C3_nt s17603c1f2[10];
  void  mf17603c1(); // _ZN8S17603C19mf17603c1Ev
};
//SIG(1 S17603C1) C1{ m Fp FC2{ m Fi} FC3{ m FC4{ m FL}}[10]}


void  S17603C1 ::mf17603c1(){}

static void Test_S17603C1()
{
  {
    init_simple_test("S17603C1");
    S17603C1 lv;
    check2(sizeof(lv), ABISELECT(96,88), "sizeof(S17603C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S17603C1)");
    check_field_offset(lv, s17603c1f0, 0, "S17603C1.s17603c1f0");
    check_field_offset(lv, s17603c1f1, ABISELECT(8,4), "S17603C1.s17603c1f1");
    check_field_offset(lv, s17603c1f2, ABISELECT(16,8), "S17603C1.s17603c1f2");
  }
}
static Arrange_To_Call_Me vS17603C1(Test_S17603C1, "S17603C1", ABISELECT(96,88));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4316C3  {
  char s4316c3f0;
  int s4316c3f1;
  virtual  ~S4316C3(); // _ZN7S4316C3D1Ev
  virtual void  v2(); // _ZN7S4316C32v2Ev
  S4316C3(); // tgen
};
//SIG(-1 S4316C3) C1{ vd v1 Fc Fi}


 S4316C3 ::~S4316C3(){ note_dtor("S4316C3", this);}
void  S4316C3 ::v2(){vfunc_called(this, "_ZN7S4316C32v2Ev");}
S4316C3 ::S4316C3(){ note_ctor("S4316C3", this);} // tgen

static void Test_S4316C3()
{
  extern Class_Descriptor cd_S4316C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S4316C3, buf);
    S4316C3 *dp, &lv = *(dp=new (buf) S4316C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S4316C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4316C3)");
    check_field_offset(lv, s4316c3f0, ABISELECT(8,4), "S4316C3.s4316c3f0");
    check_field_offset(lv, s4316c3f1, ABISELECT(12,8), "S4316C3.s4316c3f1");
    test_class_info(&lv, &cd_S4316C3);
    dp->~S4316C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4316C3(Test_S4316C3, "S4316C3", ABISELECT(16,12));

#else // __cplusplus

extern void _ZN7S4316C3C1Ev();
extern void _ZN7S4316C3D1Ev();
Name_Map name_map_S4316C3[] = {
  NSPAIR(_ZN7S4316C3C1Ev),
  NSPAIR(_ZN7S4316C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4316C3[];
extern void _ZN7S4316C3D1Ev();
extern void _ZN7S4316C3D0Ev();
extern void _ZN7S4316C32v2Ev();
static  VTBL_ENTRY vtc_S4316C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4316C3[0]),
  (VTBL_ENTRY)&_ZN7S4316C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4316C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4316C32v2Ev,
};
extern VTBL_ENTRY _ZTI7S4316C3[];
extern  VTBL_ENTRY _ZTV7S4316C3[];
Class_Descriptor cd_S4316C3 = {  "S4316C3", // class name
  0,0,//no base classes
  &(vtc_S4316C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI7S4316C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4316C3),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  S4316C2  : S4316C3 {
  void *s4316c2f0;
  virtual  ~S4316C2(); // _ZN7S4316C2D1Ev
  virtual void  v3(); // _ZN7S4316C22v3Ev
  S4316C2(); // tgen
};
//SIG(-1 S4316C2) C1{ BC2{ vd v2 Fc Fi} vd v1 Fp}


 S4316C2 ::~S4316C2(){ note_dtor("S4316C2", this);}
void  S4316C2 ::v3(){vfunc_called(this, "_ZN7S4316C22v3Ev");}
S4316C2 ::S4316C2(){ note_ctor("S4316C2", this);} // tgen

static void Test_S4316C2()
{
  extern Class_Descriptor cd_S4316C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,5)];
    init_test(&cd_S4316C2, buf);
    S4316C2 *dp, &lv = *(dp=new (buf) S4316C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S4316C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4316C2)");
    check_base_class_offset(lv, (S4316C3*), 0, "S4316C2");
    check_field_offset(lv, s4316c2f0, ABISELECT(16,12), "S4316C2.s4316c2f0");
    test_class_info(&lv, &cd_S4316C2);
    dp->~S4316C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4316C2(Test_S4316C2, "S4316C2", ABISELECT(24,16));

#else // __cplusplus

extern void _ZN7S4316C2C1Ev();
extern void _ZN7S4316C2D1Ev();
Name_Map name_map_S4316C2[] = {
  NSPAIR(_ZN7S4316C2C1Ev),
  NSPAIR(_ZN7S4316C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4316C3;
extern VTBL_ENTRY _ZTI7S4316C3[];
extern  VTBL_ENTRY _ZTV7S4316C3[];
static Base_Class bases_S4316C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4316C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI7S4316C2[];
extern void _ZN7S4316C2D1Ev();
extern void _ZN7S4316C2D0Ev();
extern void _ZN7S4316C32v2Ev();
extern void _ZN7S4316C22v3Ev();
static  VTBL_ENTRY vtc_S4316C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4316C2[0]),
  (VTBL_ENTRY)&_ZN7S4316C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4316C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4316C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4316C22v3Ev,
};
extern VTBL_ENTRY _ZTI7S4316C2[];
extern  VTBL_ENTRY _ZTV7S4316C2[];
Class_Descriptor cd_S4316C2 = {  "S4316C2", // class name
  bases_S4316C2, 1,
  &(vtc_S4316C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,16), // object size
  NSPAIRA(_ZTI7S4316C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4316C2),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  S4316C1  : S4316C2 {
  virtual  ~S4316C1(); // _ZN7S4316C1D1Ev
  virtual void  v1(); // _ZN7S4316C12v1Ev
  S4316C1(); // tgen
};
//SIG(1 S4316C1) C1{ BC2{ BC3{ vd v2 Fc Fi} vd v3 Fp} vd v1}


 S4316C1 ::~S4316C1(){ note_dtor("S4316C1", this);}
void  S4316C1 ::v1(){vfunc_called(this, "_ZN7S4316C12v1Ev");}
S4316C1 ::S4316C1(){ note_ctor("S4316C1", this);} // tgen

static void Test_S4316C1()
{
  extern Class_Descriptor cd_S4316C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,5)];
    init_test(&cd_S4316C1, buf);
    S4316C1 *dp, &lv = *(dp=new (buf) S4316C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S4316C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4316C1)");
    check_base_class_offset(lv, (S4316C3*)(S4316C2*), 0, "S4316C1");
    check_base_class_offset(lv, (S4316C2*), 0, "S4316C1");
    test_class_info(&lv, &cd_S4316C1);
    dp->~S4316C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4316C1(Test_S4316C1, "S4316C1", ABISELECT(24,16));

#else // __cplusplus

extern void _ZN7S4316C1C1Ev();
extern void _ZN7S4316C1D1Ev();
Name_Map name_map_S4316C1[] = {
  NSPAIR(_ZN7S4316C1C1Ev),
  NSPAIR(_ZN7S4316C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4316C3;
extern VTBL_ENTRY _ZTI7S4316C3[];
extern  VTBL_ENTRY _ZTV7S4316C3[];
extern Class_Descriptor cd_S4316C2;
extern VTBL_ENTRY _ZTI7S4316C2[];
extern  VTBL_ENTRY _ZTV7S4316C2[];
static Base_Class bases_S4316C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4316C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S4316C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S4316C1[];
extern void _ZN7S4316C1D1Ev();
extern void _ZN7S4316C1D0Ev();
extern void _ZN7S4316C32v2Ev();
extern void _ZN7S4316C22v3Ev();
extern void _ZN7S4316C12v1Ev();
static  VTBL_ENTRY vtc_S4316C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4316C1[0]),
  (VTBL_ENTRY)&_ZN7S4316C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4316C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4316C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4316C22v3Ev,
  (VTBL_ENTRY)&_ZN7S4316C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S4316C1[];
extern  VTBL_ENTRY _ZTV7S4316C1[];
Class_Descriptor cd_S4316C1 = {  "S4316C1", // class name
  bases_S4316C1, 2,
  &(vtc_S4316C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,16), // object size
  NSPAIRA(_ZTI7S4316C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4316C1),7, //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  S4130C3  {
  char s4130c3f0;
  int s4130c3f1;
  virtual  ~S4130C3(); // _ZN7S4130C3D1Ev
  virtual void  v1(); // _ZN7S4130C32v1Ev
  S4130C3(); // tgen
};
//SIG(-1 S4130C3) C1{ vd v1 Fc Fi}


 S4130C3 ::~S4130C3(){ note_dtor("S4130C3", this);}
void  S4130C3 ::v1(){vfunc_called(this, "_ZN7S4130C32v1Ev");}
S4130C3 ::S4130C3(){ note_ctor("S4130C3", this);} // tgen

static void Test_S4130C3()
{
  extern Class_Descriptor cd_S4130C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S4130C3, buf);
    S4130C3 *dp, &lv = *(dp=new (buf) S4130C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S4130C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4130C3)");
    check_field_offset(lv, s4130c3f0, ABISELECT(8,4), "S4130C3.s4130c3f0");
    check_field_offset(lv, s4130c3f1, ABISELECT(12,8), "S4130C3.s4130c3f1");
    test_class_info(&lv, &cd_S4130C3);
    dp->~S4130C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4130C3(Test_S4130C3, "S4130C3", ABISELECT(16,12));

#else // __cplusplus

extern void _ZN7S4130C3C1Ev();
extern void _ZN7S4130C3D1Ev();
Name_Map name_map_S4130C3[] = {
  NSPAIR(_ZN7S4130C3C1Ev),
  NSPAIR(_ZN7S4130C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4130C3[];
extern void _ZN7S4130C3D1Ev();
extern void _ZN7S4130C3D0Ev();
extern void _ZN7S4130C32v1Ev();
static  VTBL_ENTRY vtc_S4130C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4130C3[0]),
  (VTBL_ENTRY)&_ZN7S4130C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4130C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4130C32v1Ev,
};
extern VTBL_ENTRY _ZTI7S4130C3[];
extern  VTBL_ENTRY _ZTV7S4130C3[];
Class_Descriptor cd_S4130C3 = {  "S4130C3", // class name
  0,0,//no base classes
  &(vtc_S4130C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI7S4130C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4130C3),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  S4130C2  : S4130C3 {
  void *s4130c2f0[3];
  int s4130c2f1;
  virtual  ~S4130C2(); // _ZN7S4130C2D1Ev
  S4130C2(); // tgen
};
//SIG(-1 S4130C2) C1{ BC2{ vd v1 Fc Fi} vd Fp[3] Fi}


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

static void Test_S4130C2()
{
  extern Class_Descriptor cd_S4130C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,8)];
    init_test(&cd_S4130C2, buf);
    S4130C2 *dp, &lv = *(dp=new (buf) S4130C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,28), "sizeof(S4130C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4130C2)");
    check_base_class_offset(lv, (S4130C3*), 0, "S4130C2");
    check_field_offset(lv, s4130c2f0, ABISELECT(16,12), "S4130C2.s4130c2f0");
    check_field_offset(lv, s4130c2f1, ABISELECT(40,24), "S4130C2.s4130c2f1");
    test_class_info(&lv, &cd_S4130C2);
    dp->~S4130C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4130C2(Test_S4130C2, "S4130C2", ABISELECT(48,28));

#else // __cplusplus

extern void _ZN7S4130C2C1Ev();
extern void _ZN7S4130C2D1Ev();
Name_Map name_map_S4130C2[] = {
  NSPAIR(_ZN7S4130C2C1Ev),
  NSPAIR(_ZN7S4130C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4130C3;
extern VTBL_ENTRY _ZTI7S4130C3[];
extern  VTBL_ENTRY _ZTV7S4130C3[];
static Base_Class bases_S4130C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4130C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI7S4130C2[];
extern void _ZN7S4130C2D1Ev();
extern void _ZN7S4130C2D0Ev();
extern void _ZN7S4130C32v1Ev();
static  VTBL_ENTRY vtc_S4130C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4130C2[0]),
  (VTBL_ENTRY)&_ZN7S4130C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4130C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4130C32v1Ev,
};
extern VTBL_ENTRY _ZTI7S4130C2[];
extern  VTBL_ENTRY _ZTV7S4130C2[];
Class_Descriptor cd_S4130C2 = {  "S4130C2", // class name
  bases_S4130C2, 1,
  &(vtc_S4130C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,28), // object size
  NSPAIRA(_ZTI7S4130C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4130C2),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  S4130C1  : S4130C2 {
  virtual  ~S4130C1(); // _ZN7S4130C1D1Ev
  S4130C1(); // tgen
};
//SIG(1 S4130C1) C1{ BC2{ BC3{ vd v1 Fc Fi} vd Fp[3] Fi} vd}


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

static void Test_S4130C1()
{
  extern Class_Descriptor cd_S4130C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,8)];
    init_test(&cd_S4130C1, buf);
    S4130C1 *dp, &lv = *(dp=new (buf) S4130C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,28), "sizeof(S4130C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4130C1)");
    check_base_class_offset(lv, (S4130C3*)(S4130C2*), 0, "S4130C1");
    check_base_class_offset(lv, (S4130C2*), 0, "S4130C1");
    test_class_info(&lv, &cd_S4130C1);
    dp->~S4130C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4130C1(Test_S4130C1, "S4130C1", ABISELECT(48,28));

#else // __cplusplus

extern void _ZN7S4130C1C1Ev();
extern void _ZN7S4130C1D1Ev();
Name_Map name_map_S4130C1[] = {
  NSPAIR(_ZN7S4130C1C1Ev),
  NSPAIR(_ZN7S4130C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4130C3;
extern VTBL_ENTRY _ZTI7S4130C3[];
extern  VTBL_ENTRY _ZTV7S4130C3[];
extern Class_Descriptor cd_S4130C2;
extern VTBL_ENTRY _ZTI7S4130C2[];
extern  VTBL_ENTRY _ZTV7S4130C2[];
static Base_Class bases_S4130C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4130C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S4130C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S4130C1[];
extern void _ZN7S4130C1D1Ev();
extern void _ZN7S4130C1D0Ev();
extern void _ZN7S4130C32v1Ev();
static  VTBL_ENTRY vtc_S4130C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4130C1[0]),
  (VTBL_ENTRY)&_ZN7S4130C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4130C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4130C32v1Ev,
};
extern VTBL_ENTRY _ZTI7S4130C1[];
extern  VTBL_ENTRY _ZTV7S4130C1[];
Class_Descriptor cd_S4130C1 = {  "S4130C1", // class name
  bases_S4130C1, 2,
  &(vtc_S4130C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,28), // object size
  NSPAIRA(_ZTI7S4130C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4130C1),5, //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  S4124C3  {
  char s4124c3f0;
  int s4124c3f1;
  virtual  ~S4124C3(); // _ZN7S4124C3D1Ev
  virtual void  v1(); // _ZN7S4124C32v1Ev
  S4124C3(); // tgen
};
//SIG(-1 S4124C3) C1{ vd v1 Fc Fi}


 S4124C3 ::~S4124C3(){ note_dtor("S4124C3", this);}
void  S4124C3 ::v1(){vfunc_called(this, "_ZN7S4124C32v1Ev");}
S4124C3 ::S4124C3(){ note_ctor("S4124C3", this);} // tgen

static void Test_S4124C3()
{
  extern Class_Descriptor cd_S4124C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S4124C3, buf);
    S4124C3 *dp, &lv = *(dp=new (buf) S4124C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S4124C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4124C3)");
    check_field_offset(lv, s4124c3f0, ABISELECT(8,4), "S4124C3.s4124c3f0");
    check_field_offset(lv, s4124c3f1, ABISELECT(12,8), "S4124C3.s4124c3f1");
    test_class_info(&lv, &cd_S4124C3);
    dp->~S4124C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4124C3(Test_S4124C3, "S4124C3", ABISELECT(16,12));

#else // __cplusplus

extern void _ZN7S4124C3C1Ev();
extern void _ZN7S4124C3D1Ev();
Name_Map name_map_S4124C3[] = {
  NSPAIR(_ZN7S4124C3C1Ev),
  NSPAIR(_ZN7S4124C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4124C3[];
extern void _ZN7S4124C3D1Ev();
extern void _ZN7S4124C3D0Ev();
extern void _ZN7S4124C32v1Ev();
static  VTBL_ENTRY vtc_S4124C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4124C3[0]),
  (VTBL_ENTRY)&_ZN7S4124C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4124C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4124C32v1Ev,
};
extern VTBL_ENTRY _ZTI7S4124C3[];
extern  VTBL_ENTRY _ZTV7S4124C3[];
Class_Descriptor cd_S4124C3 = {  "S4124C3", // class name
  0,0,//no base classes
  &(vtc_S4124C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI7S4124C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4124C3),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  S4124C2  : S4124C3 {
  int s4124c2f0[4];
  void *s4124c2f1;
  virtual  ~S4124C2(); // _ZN7S4124C2D1Ev
  S4124C2(); // tgen
};
//SIG(-1 S4124C2) C1{ BC2{ vd v1 Fc Fi} vd Fi[4] Fp}


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

static void Test_S4124C2()
{
  extern Class_Descriptor cd_S4124C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,9)];
    init_test(&cd_S4124C2, buf);
    S4124C2 *dp, &lv = *(dp=new (buf) S4124C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,32), "sizeof(S4124C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4124C2)");
    check_base_class_offset(lv, (S4124C3*), 0, "S4124C2");
    check_field_offset(lv, s4124c2f0, ABISELECT(16,12), "S4124C2.s4124c2f0");
    check_field_offset(lv, s4124c2f1, ABISELECT(32,28), "S4124C2.s4124c2f1");
    test_class_info(&lv, &cd_S4124C2);
    dp->~S4124C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4124C2(Test_S4124C2, "S4124C2", ABISELECT(40,32));

#else // __cplusplus

extern void _ZN7S4124C2C1Ev();
extern void _ZN7S4124C2D1Ev();
Name_Map name_map_S4124C2[] = {
  NSPAIR(_ZN7S4124C2C1Ev),
  NSPAIR(_ZN7S4124C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4124C3;
extern VTBL_ENTRY _ZTI7S4124C3[];
extern  VTBL_ENTRY _ZTV7S4124C3[];
static Base_Class bases_S4124C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4124C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI7S4124C2[];
extern void _ZN7S4124C2D1Ev();
extern void _ZN7S4124C2D0Ev();
extern void _ZN7S4124C32v1Ev();
static  VTBL_ENTRY vtc_S4124C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4124C2[0]),
  (VTBL_ENTRY)&_ZN7S4124C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4124C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4124C32v1Ev,
};
extern VTBL_ENTRY _ZTI7S4124C2[];
extern  VTBL_ENTRY _ZTV7S4124C2[];
Class_Descriptor cd_S4124C2 = {  "S4124C2", // class name
  bases_S4124C2, 1,
  &(vtc_S4124C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,32), // object size
  NSPAIRA(_ZTI7S4124C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4124C2),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  S4124C1  : S4124C2 {
  virtual  ~S4124C1(); // _ZN7S4124C1D1Ev
  S4124C1(); // tgen
};
//SIG(1 S4124C1) C1{ BC2{ BC3{ vd v1 Fc Fi} vd Fi[4] Fp} vd}


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

static void Test_S4124C1()
{
  extern Class_Descriptor cd_S4124C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,9)];
    init_test(&cd_S4124C1, buf);
    S4124C1 *dp, &lv = *(dp=new (buf) S4124C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,32), "sizeof(S4124C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4124C1)");
    check_base_class_offset(lv, (S4124C3*)(S4124C2*), 0, "S4124C1");
    check_base_class_offset(lv, (S4124C2*), 0, "S4124C1");
    test_class_info(&lv, &cd_S4124C1);
    dp->~S4124C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4124C1(Test_S4124C1, "S4124C1", ABISELECT(40,32));

#else // __cplusplus

extern void _ZN7S4124C1C1Ev();
extern void _ZN7S4124C1D1Ev();
Name_Map name_map_S4124C1[] = {
  NSPAIR(_ZN7S4124C1C1Ev),
  NSPAIR(_ZN7S4124C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4124C3;
extern VTBL_ENTRY _ZTI7S4124C3[];
extern  VTBL_ENTRY _ZTV7S4124C3[];
extern Class_Descriptor cd_S4124C2;
extern VTBL_ENTRY _ZTI7S4124C2[];
extern  VTBL_ENTRY _ZTV7S4124C2[];
static Base_Class bases_S4124C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4124C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S4124C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S4124C1[];
extern void _ZN7S4124C1D1Ev();
extern void _ZN7S4124C1D0Ev();
extern void _ZN7S4124C32v1Ev();
static  VTBL_ENTRY vtc_S4124C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4124C1[0]),
  (VTBL_ENTRY)&_ZN7S4124C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4124C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4124C32v1Ev,
};
extern VTBL_ENTRY _ZTI7S4124C1[];
extern  VTBL_ENTRY _ZTV7S4124C1[];
Class_Descriptor cd_S4124C1 = {  "S4124C1", // class name
  bases_S4124C1, 2,
  &(vtc_S4124C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,32), // object size
  NSPAIRA(_ZTI7S4124C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4124C1),5, //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  S8420C2  {
  char s8420c2f0;
  int s8420c2f1;
  virtual  ~S8420C2(); // _ZN7S8420C2D1Ev
  virtual void  v1(); // _ZN7S8420C22v1Ev
  S8420C2(); // tgen
};
//SIG(-1 S8420C2) C1{ vd v1 Fc Fi}


 S8420C2 ::~S8420C2(){ note_dtor("S8420C2", this);}
void  S8420C2 ::v1(){vfunc_called(this, "_ZN7S8420C22v1Ev");}
S8420C2 ::S8420C2(){ note_ctor("S8420C2", this);} // tgen

static void Test_S8420C2()
{
  extern Class_Descriptor cd_S8420C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S8420C2, buf);
    S8420C2 *dp, &lv = *(dp=new (buf) S8420C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S8420C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8420C2)");
    check_field_offset(lv, s8420c2f0, ABISELECT(8,4), "S8420C2.s8420c2f0");
    check_field_offset(lv, s8420c2f1, ABISELECT(12,8), "S8420C2.s8420c2f1");
    test_class_info(&lv, &cd_S8420C2);
    dp->~S8420C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8420C2(Test_S8420C2, "S8420C2", ABISELECT(16,12));

#else // __cplusplus

extern void _ZN7S8420C2C1Ev();
extern void _ZN7S8420C2D1Ev();
Name_Map name_map_S8420C2[] = {
  NSPAIR(_ZN7S8420C2C1Ev),
  NSPAIR(_ZN7S8420C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S8420C2[];
extern void _ZN7S8420C2D1Ev();
extern void _ZN7S8420C2D0Ev();
extern void _ZN7S8420C22v1Ev();
static  VTBL_ENTRY vtc_S8420C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8420C2[0]),
  (VTBL_ENTRY)&_ZN7S8420C2D1Ev,
  (VTBL_ENTRY)&_ZN7S8420C2D0Ev,
  (VTBL_ENTRY)&_ZN7S8420C22v1Ev,
};
extern VTBL_ENTRY _ZTI7S8420C2[];
extern  VTBL_ENTRY _ZTV7S8420C2[];
Class_Descriptor cd_S8420C2 = {  "S8420C2", // class name
  0,0,//no base classes
  &(vtc_S8420C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI7S8420C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S8420C2),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  S8420C1  : S8420C2 {
  void *s8420c1f0[2];
  int s8420c1f1;
  __tsi64 s8420c1f2;
  char s8420c1f3;
  virtual  ~S8420C1(); // _ZN7S8420C1D1Ev
  S8420C1(); // tgen
};
//SIG(1 S8420C1) C1{ BC2{ vd v1 Fc Fi} vd Fp[2] Fi FL Fc}


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

static void Test_S8420C1()
{
  extern Class_Descriptor cd_S8420C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(8,10)];
    init_test(&cd_S8420C1, buf);
    S8420C1 *dp, &lv = *(dp=new (buf) S8420C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,36), "sizeof(S8420C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8420C1)");
    check_base_class_offset(lv, (S8420C2*), 0, "S8420C1");
    check_field_offset(lv, s8420c1f0, ABISELECT(16,12), "S8420C1.s8420c1f0");
    check_field_offset(lv, s8420c1f1, ABISELECT(32,20), "S8420C1.s8420c1f1");
    check_field_offset(lv, s8420c1f2, ABISELECT(40,24), "S8420C1.s8420c1f2");
    check_field_offset(lv, s8420c1f3, ABISELECT(48,32), "S8420C1.s8420c1f3");
    test_class_info(&lv, &cd_S8420C1);
    dp->~S8420C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8420C1(Test_S8420C1, "S8420C1", ABISELECT(56,36));

#else // __cplusplus

extern void _ZN7S8420C1C1Ev();
extern void _ZN7S8420C1D1Ev();
Name_Map name_map_S8420C1[] = {
  NSPAIR(_ZN7S8420C1C1Ev),
  NSPAIR(_ZN7S8420C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S8420C2;
extern VTBL_ENTRY _ZTI7S8420C2[];
extern  VTBL_ENTRY _ZTV7S8420C2[];
static Base_Class bases_S8420C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S8420C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI7S8420C1[];
extern void _ZN7S8420C1D1Ev();
extern void _ZN7S8420C1D0Ev();
extern void _ZN7S8420C22v1Ev();
static  VTBL_ENTRY vtc_S8420C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8420C1[0]),
  (VTBL_ENTRY)&_ZN7S8420C1D1Ev,
  (VTBL_ENTRY)&_ZN7S8420C1D0Ev,
  (VTBL_ENTRY)&_ZN7S8420C22v1Ev,
};
extern VTBL_ENTRY _ZTI7S8420C1[];
extern  VTBL_ENTRY _ZTV7S8420C1[];
Class_Descriptor cd_S8420C1 = {  "S8420C1", // class name
  bases_S8420C1, 1,
  &(vtc_S8420C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(56,36), // object size
  NSPAIRA(_ZTI7S8420C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S8420C1),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  S8418C2  {
  char s8418c2f0;
  int s8418c2f1;
  virtual  ~S8418C2(); // _ZN7S8418C2D1Ev
  virtual void  v1(); // _ZN7S8418C22v1Ev
  S8418C2(); // tgen
};
//SIG(-1 S8418C2) C1{ vd v1 Fc Fi}


 S8418C2 ::~S8418C2(){ note_dtor("S8418C2", this);}
void  S8418C2 ::v1(){vfunc_called(this, "_ZN7S8418C22v1Ev");}
S8418C2 ::S8418C2(){ note_ctor("S8418C2", this);} // tgen

static void Test_S8418C2()
{
  extern Class_Descriptor cd_S8418C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S8418C2, buf);
    S8418C2 *dp, &lv = *(dp=new (buf) S8418C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S8418C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8418C2)");
    check_field_offset(lv, s8418c2f0, ABISELECT(8,4), "S8418C2.s8418c2f0");
    check_field_offset(lv, s8418c2f1, ABISELECT(12,8), "S8418C2.s8418c2f1");
    test_class_info(&lv, &cd_S8418C2);
    dp->~S8418C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8418C2(Test_S8418C2, "S8418C2", ABISELECT(16,12));

#else // __cplusplus

extern void _ZN7S8418C2C1Ev();
extern void _ZN7S8418C2D1Ev();
Name_Map name_map_S8418C2[] = {
  NSPAIR(_ZN7S8418C2C1Ev),
  NSPAIR(_ZN7S8418C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S8418C2[];
extern void _ZN7S8418C2D1Ev();
extern void _ZN7S8418C2D0Ev();
extern void _ZN7S8418C22v1Ev();
static  VTBL_ENTRY vtc_S8418C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8418C2[0]),
  (VTBL_ENTRY)&_ZN7S8418C2D1Ev,
  (VTBL_ENTRY)&_ZN7S8418C2D0Ev,
  (VTBL_ENTRY)&_ZN7S8418C22v1Ev,
};
extern VTBL_ENTRY _ZTI7S8418C2[];
extern  VTBL_ENTRY _ZTV7S8418C2[];
Class_Descriptor cd_S8418C2 = {  "S8418C2", // class name
  0,0,//no base classes
  &(vtc_S8418C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI7S8418C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S8418C2),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  S8418C1  : S8418C2 {
  void *s8418c1f0;
  int s8418c1f1[2];
  void *s8418c1f2[4];
  virtual  ~S8418C1(); // _ZN7S8418C1D1Ev
  S8418C1(); // tgen
};
//SIG(1 S8418C1) C1{ BC2{ vd v1 Fc Fi} vd Fp Fi[2] Fp[4]}


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

static void Test_S8418C1()
{
  extern Class_Descriptor cd_S8418C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(9,11)];
    init_test(&cd_S8418C1, buf);
    S8418C1 *dp, &lv = *(dp=new (buf) S8418C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,40), "sizeof(S8418C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8418C1)");
    check_base_class_offset(lv, (S8418C2*), 0, "S8418C1");
    check_field_offset(lv, s8418c1f0, ABISELECT(16,12), "S8418C1.s8418c1f0");
    check_field_offset(lv, s8418c1f1, ABISELECT(24,16), "S8418C1.s8418c1f1");
    check_field_offset(lv, s8418c1f2, ABISELECT(32,24), "S8418C1.s8418c1f2");
    test_class_info(&lv, &cd_S8418C1);
    dp->~S8418C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8418C1(Test_S8418C1, "S8418C1", ABISELECT(64,40));

#else // __cplusplus

extern void _ZN7S8418C1C1Ev();
extern void _ZN7S8418C1D1Ev();
Name_Map name_map_S8418C1[] = {
  NSPAIR(_ZN7S8418C1C1Ev),
  NSPAIR(_ZN7S8418C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S8418C2;
extern VTBL_ENTRY _ZTI7S8418C2[];
extern  VTBL_ENTRY _ZTV7S8418C2[];
static Base_Class bases_S8418C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S8418C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI7S8418C1[];
extern void _ZN7S8418C1D1Ev();
extern void _ZN7S8418C1D0Ev();
extern void _ZN7S8418C22v1Ev();
static  VTBL_ENTRY vtc_S8418C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8418C1[0]),
  (VTBL_ENTRY)&_ZN7S8418C1D1Ev,
  (VTBL_ENTRY)&_ZN7S8418C1D0Ev,
  (VTBL_ENTRY)&_ZN7S8418C22v1Ev,
};
extern VTBL_ENTRY _ZTI7S8418C1[];
extern  VTBL_ENTRY _ZTV7S8418C1[];
Class_Descriptor cd_S8418C1 = {  "S8418C1", // class name
  bases_S8418C1, 1,
  &(vtc_S8418C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(64,40), // object size
  NSPAIRA(_ZTI7S8418C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S8418C1),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  S8678C2  {
  char s8678c2f0;
  int s8678c2f1;
  virtual  ~S8678C2(); // _ZN7S8678C2D1Ev
  virtual void  v2(); // _ZN7S8678C22v2Ev
  S8678C2(); // tgen
};
//SIG(-1 S8678C2) C1{ vd v1 Fc Fi}


 S8678C2 ::~S8678C2(){ note_dtor("S8678C2", this);}
void  S8678C2 ::v2(){vfunc_called(this, "_ZN7S8678C22v2Ev");}
S8678C2 ::S8678C2(){ note_ctor("S8678C2", this);} // tgen

static void Test_S8678C2()
{
  extern Class_Descriptor cd_S8678C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S8678C2, buf);
    S8678C2 *dp, &lv = *(dp=new (buf) S8678C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S8678C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8678C2)");
    check_field_offset(lv, s8678c2f0, ABISELECT(8,4), "S8678C2.s8678c2f0");
    check_field_offset(lv, s8678c2f1, ABISELECT(12,8), "S8678C2.s8678c2f1");
    test_class_info(&lv, &cd_S8678C2);
    dp->~S8678C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8678C2(Test_S8678C2, "S8678C2", ABISELECT(16,12));

#else // __cplusplus

extern void _ZN7S8678C2C1Ev();
extern void _ZN7S8678C2D1Ev();
Name_Map name_map_S8678C2[] = {
  NSPAIR(_ZN7S8678C2C1Ev),
  NSPAIR(_ZN7S8678C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S8678C2[];
extern void _ZN7S8678C2D1Ev();
extern void _ZN7S8678C2D0Ev();
extern void _ZN7S8678C22v2Ev();
static  VTBL_ENTRY vtc_S8678C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8678C2[0]),
  (VTBL_ENTRY)&_ZN7S8678C2D1Ev,
  (VTBL_ENTRY)&_ZN7S8678C2D0Ev,
  (VTBL_ENTRY)&_ZN7S8678C22v2Ev,
};
extern VTBL_ENTRY _ZTI7S8678C2[];
extern  VTBL_ENTRY _ZTV7S8678C2[];
Class_Descriptor cd_S8678C2 = {  "S8678C2", // class name
  0,0,//no base classes
  &(vtc_S8678C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI7S8678C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S8678C2),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  S8678C1  : S8678C2 {
  void *s8678c1f0;
  int s8678c1f1[2];
  void *s8678c1f2;
  virtual  ~S8678C1(); // _ZN7S8678C1D1Ev
  virtual void  v1(); // _ZN7S8678C12v1Ev
  S8678C1(); // tgen
};
//SIG(1 S8678C1) C1{ BC2{ vd v2 Fc Fi} vd v1 Fp Fi[2] Fp}


 S8678C1 ::~S8678C1(){ note_dtor("S8678C1", this);}
void  S8678C1 ::v1(){vfunc_called(this, "_ZN7S8678C12v1Ev");}
S8678C1 ::S8678C1(){ note_ctor("S8678C1", this);} // tgen

static void Test_S8678C1()
{
  extern Class_Descriptor cd_S8678C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S8678C1, buf);
    S8678C1 *dp, &lv = *(dp=new (buf) S8678C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S8678C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8678C1)");
    check_base_class_offset(lv, (S8678C2*), 0, "S8678C1");
    check_field_offset(lv, s8678c1f0, ABISELECT(16,12), "S8678C1.s8678c1f0");
    check_field_offset(lv, s8678c1f1, ABISELECT(24,16), "S8678C1.s8678c1f1");
    check_field_offset(lv, s8678c1f2, ABISELECT(32,24), "S8678C1.s8678c1f2");
    test_class_info(&lv, &cd_S8678C1);
    dp->~S8678C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8678C1(Test_S8678C1, "S8678C1", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S8678C1C1Ev();
extern void _ZN7S8678C1D1Ev();
Name_Map name_map_S8678C1[] = {
  NSPAIR(_ZN7S8678C1C1Ev),
  NSPAIR(_ZN7S8678C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S8678C2;
extern VTBL_ENTRY _ZTI7S8678C2[];
extern  VTBL_ENTRY _ZTV7S8678C2[];
static Base_Class bases_S8678C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S8678C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI7S8678C1[];
extern void _ZN7S8678C1D1Ev();
extern void _ZN7S8678C1D0Ev();
extern void _ZN7S8678C22v2Ev();
extern void _ZN7S8678C12v1Ev();
static  VTBL_ENTRY vtc_S8678C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8678C1[0]),
  (VTBL_ENTRY)&_ZN7S8678C1D1Ev,
  (VTBL_ENTRY)&_ZN7S8678C1D0Ev,
  (VTBL_ENTRY)&_ZN7S8678C22v2Ev,
  (VTBL_ENTRY)&_ZN7S8678C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S8678C1[];
extern  VTBL_ENTRY _ZTV7S8678C1[];
Class_Descriptor cd_S8678C1 = {  "S8678C1", // class name
  bases_S8678C1, 1,
  &(vtc_S8678C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S8678C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S8678C1),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  S4129C3  {
  char s4129c3f0;
  int s4129c3f1;
  virtual  ~S4129C3(); // _ZN7S4129C3D1Ev
  virtual void  v1(); // _ZN7S4129C32v1Ev
  S4129C3(); // tgen
};
//SIG(-1 S4129C3) C1{ vd v1 Fc Fi}


 S4129C3 ::~S4129C3(){ note_dtor("S4129C3", this);}
void  S4129C3 ::v1(){vfunc_called(this, "_ZN7S4129C32v1Ev");}
S4129C3 ::S4129C3(){ note_ctor("S4129C3", this);} // tgen

static void Test_S4129C3()
{
  extern Class_Descriptor cd_S4129C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S4129C3, buf);
    S4129C3 *dp, &lv = *(dp=new (buf) S4129C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S4129C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4129C3)");
    check_field_offset(lv, s4129c3f0, ABISELECT(8,4), "S4129C3.s4129c3f0");
    check_field_offset(lv, s4129c3f1, ABISELECT(12,8), "S4129C3.s4129c3f1");
    test_class_info(&lv, &cd_S4129C3);
    dp->~S4129C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4129C3(Test_S4129C3, "S4129C3", ABISELECT(16,12));

#else // __cplusplus

extern void _ZN7S4129C3C1Ev();
extern void _ZN7S4129C3D1Ev();
Name_Map name_map_S4129C3[] = {
  NSPAIR(_ZN7S4129C3C1Ev),
  NSPAIR(_ZN7S4129C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4129C3[];
extern void _ZN7S4129C3D1Ev();
extern void _ZN7S4129C3D0Ev();
extern void _ZN7S4129C32v1Ev();
static  VTBL_ENTRY vtc_S4129C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4129C3[0]),
  (VTBL_ENTRY)&_ZN7S4129C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4129C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4129C32v1Ev,
};
extern VTBL_ENTRY _ZTI7S4129C3[];
extern  VTBL_ENTRY _ZTV7S4129C3[];
Class_Descriptor cd_S4129C3 = {  "S4129C3", // class name
  0,0,//no base classes
  &(vtc_S4129C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI7S4129C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4129C3),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  S4129C2  : S4129C3 {
  void *s4129c2f0[2];
  virtual  ~S4129C2(); // _ZN7S4129C2D1Ev
  S4129C2(); // tgen
};
//SIG(-1 S4129C2) C1{ BC2{ vd v1 Fc Fi} vd Fp[2]}


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

static void Test_S4129C2()
{
  extern Class_Descriptor cd_S4129C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,6)];
    init_test(&cd_S4129C2, buf);
    S4129C2 *dp, &lv = *(dp=new (buf) S4129C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S4129C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4129C2)");
    check_base_class_offset(lv, (S4129C3*), 0, "S4129C2");
    check_field_offset(lv, s4129c2f0, ABISELECT(16,12), "S4129C2.s4129c2f0");
    test_class_info(&lv, &cd_S4129C2);
    dp->~S4129C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4129C2(Test_S4129C2, "S4129C2", ABISELECT(32,20));

#else // __cplusplus

extern void _ZN7S4129C2C1Ev();
extern void _ZN7S4129C2D1Ev();
Name_Map name_map_S4129C2[] = {
  NSPAIR(_ZN7S4129C2C1Ev),
  NSPAIR(_ZN7S4129C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4129C3;
extern VTBL_ENTRY _ZTI7S4129C3[];
extern  VTBL_ENTRY _ZTV7S4129C3[];
static Base_Class bases_S4129C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4129C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI7S4129C2[];
extern void _ZN7S4129C2D1Ev();
extern void _ZN7S4129C2D0Ev();
extern void _ZN7S4129C32v1Ev();
static  VTBL_ENTRY vtc_S4129C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4129C2[0]),
  (VTBL_ENTRY)&_ZN7S4129C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4129C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4129C32v1Ev,
};
extern VTBL_ENTRY _ZTI7S4129C2[];
extern  VTBL_ENTRY _ZTV7S4129C2[];
Class_Descriptor cd_S4129C2 = {  "S4129C2", // class name
  bases_S4129C2, 1,
  &(vtc_S4129C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,20), // object size
  NSPAIRA(_ZTI7S4129C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4129C2),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  S4129C1  : S4129C2 {
  virtual  ~S4129C1(); // _ZN7S4129C1D1Ev
  S4129C1(); // tgen
};
//SIG(1 S4129C1) C1{ BC2{ BC3{ vd v1 Fc Fi} vd Fp[2]} vd}


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

static void Test_S4129C1()
{
  extern Class_Descriptor cd_S4129C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,6)];
    init_test(&cd_S4129C1, buf);
    S4129C1 *dp, &lv = *(dp=new (buf) S4129C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S4129C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4129C1)");
    check_base_class_offset(lv, (S4129C3*)(S4129C2*), 0, "S4129C1");
    check_base_class_offset(lv, (S4129C2*), 0, "S4129C1");
    test_class_info(&lv, &cd_S4129C1);
    dp->~S4129C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4129C1(Test_S4129C1, "S4129C1", ABISELECT(32,20));

#else // __cplusplus

extern void _ZN7S4129C1C1Ev();
extern void _ZN7S4129C1D1Ev();
Name_Map name_map_S4129C1[] = {
  NSPAIR(_ZN7S4129C1C1Ev),
  NSPAIR(_ZN7S4129C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4129C3;
extern VTBL_ENTRY _ZTI7S4129C3[];
extern  VTBL_ENTRY _ZTV7S4129C3[];
extern Class_Descriptor cd_S4129C2;
extern VTBL_ENTRY _ZTI7S4129C2[];
extern  VTBL_ENTRY _ZTV7S4129C2[];
static Base_Class bases_S4129C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4129C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S4129C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S4129C1[];
extern void _ZN7S4129C1D1Ev();
extern void _ZN7S4129C1D0Ev();
extern void _ZN7S4129C32v1Ev();
static  VTBL_ENTRY vtc_S4129C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4129C1[0]),
  (VTBL_ENTRY)&_ZN7S4129C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4129C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4129C32v1Ev,
};
extern VTBL_ENTRY _ZTI7S4129C1[];
extern  VTBL_ENTRY _ZTV7S4129C1[];
Class_Descriptor cd_S4129C1 = {  "S4129C1", // class name
  bases_S4129C1, 2,
  &(vtc_S4129C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,20), // object size
  NSPAIRA(_ZTI7S4129C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4129C1),5, //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  S4128C3  {
  char s4128c3f0;
  int s4128c3f1;
  virtual  ~S4128C3(); // _ZN7S4128C3D1Ev
  virtual void  v1(); // _ZN7S4128C32v1Ev
  S4128C3(); // tgen
};
//SIG(-1 S4128C3) C1{ vd v1 Fc Fi}


 S4128C3 ::~S4128C3(){ note_dtor("S4128C3", this);}
void  S4128C3 ::v1(){vfunc_called(this, "_ZN7S4128C32v1Ev");}
S4128C3 ::S4128C3(){ note_ctor("S4128C3", this);} // tgen

static void Test_S4128C3()
{
  extern Class_Descriptor cd_S4128C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S4128C3, buf);
    S4128C3 *dp, &lv = *(dp=new (buf) S4128C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S4128C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4128C3)");
    check_field_offset(lv, s4128c3f0, ABISELECT(8,4), "S4128C3.s4128c3f0");
    check_field_offset(lv, s4128c3f1, ABISELECT(12,8), "S4128C3.s4128c3f1");
    test_class_info(&lv, &cd_S4128C3);
    dp->~S4128C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4128C3(Test_S4128C3, "S4128C3", ABISELECT(16,12));

#else // __cplusplus

extern void _ZN7S4128C3C1Ev();
extern void _ZN7S4128C3D1Ev();
Name_Map name_map_S4128C3[] = {
  NSPAIR(_ZN7S4128C3C1Ev),
  NSPAIR(_ZN7S4128C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4128C3[];
extern void _ZN7S4128C3D1Ev();
extern void _ZN7S4128C3D0Ev();
extern void _ZN7S4128C32v1Ev();
static  VTBL_ENTRY vtc_S4128C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4128C3[0]),
  (VTBL_ENTRY)&_ZN7S4128C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4128C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4128C32v1Ev,
};
extern VTBL_ENTRY _ZTI7S4128C3[];
extern  VTBL_ENTRY _ZTV7S4128C3[];
Class_Descriptor cd_S4128C3 = {  "S4128C3", // class name
  0,0,//no base classes
  &(vtc_S4128C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI7S4128C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4128C3),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  S4128C2  : S4128C3 {
  void *s4128c2f0;
  int s4128c2f1;
  virtual  ~S4128C2(); // _ZN7S4128C2D1Ev
  S4128C2(); // tgen
};
//SIG(-1 S4128C2) C1{ BC2{ vd v1 Fc Fi} vd Fp Fi}


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

static void Test_S4128C2()
{
  extern Class_Descriptor cd_S4128C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,6)];
    init_test(&cd_S4128C2, buf);
    S4128C2 *dp, &lv = *(dp=new (buf) S4128C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S4128C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4128C2)");
    check_base_class_offset(lv, (S4128C3*), 0, "S4128C2");
    check_field_offset(lv, s4128c2f0, ABISELECT(16,12), "S4128C2.s4128c2f0");
    check_field_offset(lv, s4128c2f1, ABISELECT(24,16), "S4128C2.s4128c2f1");
    test_class_info(&lv, &cd_S4128C2);
    dp->~S4128C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4128C2(Test_S4128C2, "S4128C2", ABISELECT(32,20));

#else // __cplusplus

extern void _ZN7S4128C2C1Ev();
extern void _ZN7S4128C2D1Ev();
Name_Map name_map_S4128C2[] = {
  NSPAIR(_ZN7S4128C2C1Ev),
  NSPAIR(_ZN7S4128C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4128C3;
extern VTBL_ENTRY _ZTI7S4128C3[];
extern  VTBL_ENTRY _ZTV7S4128C3[];
static Base_Class bases_S4128C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4128C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI7S4128C2[];
extern void _ZN7S4128C2D1Ev();
extern void _ZN7S4128C2D0Ev();
extern void _ZN7S4128C32v1Ev();
static  VTBL_ENTRY vtc_S4128C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4128C2[0]),
  (VTBL_ENTRY)&_ZN7S4128C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4128C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4128C32v1Ev,
};
extern VTBL_ENTRY _ZTI7S4128C2[];
extern  VTBL_ENTRY _ZTV7S4128C2[];
Class_Descriptor cd_S4128C2 = {  "S4128C2", // class name
  bases_S4128C2, 1,
  &(vtc_S4128C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,20), // object size
  NSPAIRA(_ZTI7S4128C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4128C2),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  S4128C1  : S4128C2 {
  virtual  ~S4128C1(); // _ZN7S4128C1D1Ev
  S4128C1(); // tgen
};
//SIG(1 S4128C1) C1{ BC2{ BC3{ vd v1 Fc Fi} vd Fp Fi} vd}


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

static void Test_S4128C1()
{
  extern Class_Descriptor cd_S4128C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,6)];
    init_test(&cd_S4128C1, buf);
    S4128C1 *dp, &lv = *(dp=new (buf) S4128C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S4128C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4128C1)");
    check_base_class_offset(lv, (S4128C3*)(S4128C2*), 0, "S4128C1");
    check_base_class_offset(lv, (S4128C2*), 0, "S4128C1");
    test_class_info(&lv, &cd_S4128C1);
    dp->~S4128C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4128C1(Test_S4128C1, "S4128C1", ABISELECT(32,20));

#else // __cplusplus

extern void _ZN7S4128C1C1Ev();
extern void _ZN7S4128C1D1Ev();
Name_Map name_map_S4128C1[] = {
  NSPAIR(_ZN7S4128C1C1Ev),
  NSPAIR(_ZN7S4128C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4128C3;
extern VTBL_ENTRY _ZTI7S4128C3[];
extern  VTBL_ENTRY _ZTV7S4128C3[];
extern Class_Descriptor cd_S4128C2;
extern VTBL_ENTRY _ZTI7S4128C2[];
extern  VTBL_ENTRY _ZTV7S4128C2[];
static Base_Class bases_S4128C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4128C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S4128C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S4128C1[];
extern void _ZN7S4128C1D1Ev();
extern void _ZN7S4128C1D0Ev();
extern void _ZN7S4128C32v1Ev();
static  VTBL_ENTRY vtc_S4128C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4128C1[0]),
  (VTBL_ENTRY)&_ZN7S4128C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4128C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4128C32v1Ev,
};
extern VTBL_ENTRY _ZTI7S4128C1[];
extern  VTBL_ENTRY _ZTV7S4128C1[];
Class_Descriptor cd_S4128C1 = {  "S4128C1", // class name
  bases_S4128C1, 2,
  &(vtc_S4128C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,20), // object size
  NSPAIRA(_ZTI7S4128C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4128C1),5, //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  S4125C3  {
  char s4125c3f0;
  int s4125c3f1;
  virtual  ~S4125C3(); // _ZN7S4125C3D1Ev
  virtual void  v1(); // _ZN7S4125C32v1Ev
  S4125C3(); // tgen
};
//SIG(-1 S4125C3) C1{ vd v1 Fc Fi}


 S4125C3 ::~S4125C3(){ note_dtor("S4125C3", this);}
void  S4125C3 ::v1(){vfunc_called(this, "_ZN7S4125C32v1Ev");}
S4125C3 ::S4125C3(){ note_ctor("S4125C3", this);} // tgen

static void Test_S4125C3()
{
  extern Class_Descriptor cd_S4125C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S4125C3, buf);
    S4125C3 *dp, &lv = *(dp=new (buf) S4125C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S4125C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4125C3)");
    check_field_offset(lv, s4125c3f0, ABISELECT(8,4), "S4125C3.s4125c3f0");
    check_field_offset(lv, s4125c3f1, ABISELECT(12,8), "S4125C3.s4125c3f1");
    test_class_info(&lv, &cd_S4125C3);
    dp->~S4125C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4125C3(Test_S4125C3, "S4125C3", ABISELECT(16,12));

#else // __cplusplus

extern void _ZN7S4125C3C1Ev();
extern void _ZN7S4125C3D1Ev();
Name_Map name_map_S4125C3[] = {
  NSPAIR(_ZN7S4125C3C1Ev),
  NSPAIR(_ZN7S4125C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4125C3[];
extern void _ZN7S4125C3D1Ev();
extern void _ZN7S4125C3D0Ev();
extern void _ZN7S4125C32v1Ev();
static  VTBL_ENTRY vtc_S4125C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4125C3[0]),
  (VTBL_ENTRY)&_ZN7S4125C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4125C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4125C32v1Ev,
};
extern VTBL_ENTRY _ZTI7S4125C3[];
extern  VTBL_ENTRY _ZTV7S4125C3[];
Class_Descriptor cd_S4125C3 = {  "S4125C3", // class name
  0,0,//no base classes
  &(vtc_S4125C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI7S4125C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4125C3),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  S4125C2  : S4125C3 {
  int s4125c2f0[4];
  virtual  ~S4125C2(); // _ZN7S4125C2D1Ev
  S4125C2(); // tgen
};
//SIG(-1 S4125C2) C1{ BC2{ vd v1 Fc Fi} vd Fi[4]}


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

static void Test_S4125C2()
{
  extern Class_Descriptor cd_S4125C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,8)];
    init_test(&cd_S4125C2, buf);
    S4125C2 *dp, &lv = *(dp=new (buf) S4125C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,28), "sizeof(S4125C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4125C2)");
    check_base_class_offset(lv, (S4125C3*), 0, "S4125C2");
    check_field_offset(lv, s4125c2f0, ABISELECT(16,12), "S4125C2.s4125c2f0");
    test_class_info(&lv, &cd_S4125C2);
    dp->~S4125C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4125C2(Test_S4125C2, "S4125C2", ABISELECT(32,28));

#else // __cplusplus

extern void _ZN7S4125C2C1Ev();
extern void _ZN7S4125C2D1Ev();
Name_Map name_map_S4125C2[] = {
  NSPAIR(_ZN7S4125C2C1Ev),
  NSPAIR(_ZN7S4125C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4125C3;
extern VTBL_ENTRY _ZTI7S4125C3[];
extern  VTBL_ENTRY _ZTV7S4125C3[];
static Base_Class bases_S4125C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4125C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI7S4125C2[];
extern void _ZN7S4125C2D1Ev();
extern void _ZN7S4125C2D0Ev();
extern void _ZN7S4125C32v1Ev();
static  VTBL_ENTRY vtc_S4125C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4125C2[0]),
  (VTBL_ENTRY)&_ZN7S4125C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4125C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4125C32v1Ev,
};
extern VTBL_ENTRY _ZTI7S4125C2[];
extern  VTBL_ENTRY _ZTV7S4125C2[];
Class_Descriptor cd_S4125C2 = {  "S4125C2", // class name
  bases_S4125C2, 1,
  &(vtc_S4125C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,28), // object size
  NSPAIRA(_ZTI7S4125C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4125C2),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  S4125C1  : S4125C2 {
  virtual  ~S4125C1(); // _ZN7S4125C1D1Ev
  S4125C1(); // tgen
};
//SIG(1 S4125C1) C1{ BC2{ BC3{ vd v1 Fc Fi} vd Fi[4]} vd}


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

static void Test_S4125C1()
{
  extern Class_Descriptor cd_S4125C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,8)];
    init_test(&cd_S4125C1, buf);
    S4125C1 *dp, &lv = *(dp=new (buf) S4125C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,28), "sizeof(S4125C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4125C1)");
    check_base_class_offset(lv, (S4125C3*)(S4125C2*), 0, "S4125C1");
    check_base_class_offset(lv, (S4125C2*), 0, "S4125C1");
    test_class_info(&lv, &cd_S4125C1);
    dp->~S4125C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4125C1(Test_S4125C1, "S4125C1", ABISELECT(32,28));

#else // __cplusplus

extern void _ZN7S4125C1C1Ev();
extern void _ZN7S4125C1D1Ev();
Name_Map name_map_S4125C1[] = {
  NSPAIR(_ZN7S4125C1C1Ev),
  NSPAIR(_ZN7S4125C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4125C3;
extern VTBL_ENTRY _ZTI7S4125C3[];
extern  VTBL_ENTRY _ZTV7S4125C3[];
extern Class_Descriptor cd_S4125C2;
extern VTBL_ENTRY _ZTI7S4125C2[];
extern  VTBL_ENTRY _ZTV7S4125C2[];
static Base_Class bases_S4125C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4125C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S4125C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S4125C1[];
extern void _ZN7S4125C1D1Ev();
extern void _ZN7S4125C1D0Ev();
extern void _ZN7S4125C32v1Ev();
static  VTBL_ENTRY vtc_S4125C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4125C1[0]),
  (VTBL_ENTRY)&_ZN7S4125C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4125C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4125C32v1Ev,
};
extern VTBL_ENTRY _ZTI7S4125C1[];
extern  VTBL_ENTRY _ZTV7S4125C1[];
Class_Descriptor cd_S4125C1 = {  "S4125C1", // class name
  bases_S4125C1, 2,
  &(vtc_S4125C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,28), // object size
  NSPAIRA(_ZTI7S4125C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4125C1),5, //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  S4123C3  {
  char s4123c3f0;
  int s4123c3f1;
  virtual  ~S4123C3(); // _ZN7S4123C3D1Ev
  virtual void  v1(); // _ZN7S4123C32v1Ev
  S4123C3(); // tgen
};
//SIG(-1 S4123C3) C1{ vd v1 Fc Fi}


 S4123C3 ::~S4123C3(){ note_dtor("S4123C3", this);}
void  S4123C3 ::v1(){vfunc_called(this, "_ZN7S4123C32v1Ev");}
S4123C3 ::S4123C3(){ note_ctor("S4123C3", this);} // tgen

static void Test_S4123C3()
{
  extern Class_Descriptor cd_S4123C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S4123C3, buf);
    S4123C3 *dp, &lv = *(dp=new (buf) S4123C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S4123C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4123C3)");
    check_field_offset(lv, s4123c3f0, ABISELECT(8,4), "S4123C3.s4123c3f0");
    check_field_offset(lv, s4123c3f1, ABISELECT(12,8), "S4123C3.s4123c3f1");
    test_class_info(&lv, &cd_S4123C3);
    dp->~S4123C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4123C3(Test_S4123C3, "S4123C3", ABISELECT(16,12));

#else // __cplusplus

extern void _ZN7S4123C3C1Ev();
extern void _ZN7S4123C3D1Ev();
Name_Map name_map_S4123C3[] = {
  NSPAIR(_ZN7S4123C3C1Ev),
  NSPAIR(_ZN7S4123C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4123C3[];
extern void _ZN7S4123C3D1Ev();
extern void _ZN7S4123C3D0Ev();
extern void _ZN7S4123C32v1Ev();
static  VTBL_ENTRY vtc_S4123C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4123C3[0]),
  (VTBL_ENTRY)&_ZN7S4123C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4123C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4123C32v1Ev,
};
extern VTBL_ENTRY _ZTI7S4123C3[];
extern  VTBL_ENTRY _ZTV7S4123C3[];
Class_Descriptor cd_S4123C3 = {  "S4123C3", // class name
  0,0,//no base classes
  &(vtc_S4123C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI7S4123C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4123C3),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  S4123C2  : S4123C3 {
  int s4123c2f0[3];
  virtual  ~S4123C2(); // _ZN7S4123C2D1Ev
  S4123C2(); // tgen
};
//SIG(-1 S4123C2) C1{ BC2{ vd v1 Fc Fi} vd Fi[3]}


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

static void Test_S4123C2()
{
  extern Class_Descriptor cd_S4123C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,7)];
    init_test(&cd_S4123C2, buf);
    S4123C2 *dp, &lv = *(dp=new (buf) S4123C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,24), "sizeof(S4123C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4123C2)");
    check_base_class_offset(lv, (S4123C3*), 0, "S4123C2");
    check_field_offset(lv, s4123c2f0, ABISELECT(16,12), "S4123C2.s4123c2f0");
    test_class_info(&lv, &cd_S4123C2);
    dp->~S4123C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4123C2(Test_S4123C2, "S4123C2", ABISELECT(32,24));

#else // __cplusplus

extern void _ZN7S4123C2C1Ev();
extern void _ZN7S4123C2D1Ev();
Name_Map name_map_S4123C2[] = {
  NSPAIR(_ZN7S4123C2C1Ev),
  NSPAIR(_ZN7S4123C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4123C3;
extern VTBL_ENTRY _ZTI7S4123C3[];
extern  VTBL_ENTRY _ZTV7S4123C3[];
static Base_Class bases_S4123C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4123C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI7S4123C2[];
extern void _ZN7S4123C2D1Ev();
extern void _ZN7S4123C2D0Ev();
extern void _ZN7S4123C32v1Ev();
static  VTBL_ENTRY vtc_S4123C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4123C2[0]),
  (VTBL_ENTRY)&_ZN7S4123C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4123C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4123C32v1Ev,
};
extern VTBL_ENTRY _ZTI7S4123C2[];
extern  VTBL_ENTRY _ZTV7S4123C2[];
Class_Descriptor cd_S4123C2 = {  "S4123C2", // class name
  bases_S4123C2, 1,
  &(vtc_S4123C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,24), // object size
  NSPAIRA(_ZTI7S4123C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4123C2),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  S4123C1  : S4123C2 {
  virtual  ~S4123C1(); // _ZN7S4123C1D1Ev
  S4123C1(); // tgen
};
//SIG(1 S4123C1) C1{ BC2{ BC3{ vd v1 Fc Fi} vd Fi[3]} vd}


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

static void Test_S4123C1()
{
  extern Class_Descriptor cd_S4123C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,7)];
    init_test(&cd_S4123C1, buf);
    S4123C1 *dp, &lv = *(dp=new (buf) S4123C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,24), "sizeof(S4123C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4123C1)");
    check_base_class_offset(lv, (S4123C3*)(S4123C2*), 0, "S4123C1");
    check_base_class_offset(lv, (S4123C2*), 0, "S4123C1");
    test_class_info(&lv, &cd_S4123C1);
    dp->~S4123C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4123C1(Test_S4123C1, "S4123C1", ABISELECT(32,24));

#else // __cplusplus

extern void _ZN7S4123C1C1Ev();
extern void _ZN7S4123C1D1Ev();
Name_Map name_map_S4123C1[] = {
  NSPAIR(_ZN7S4123C1C1Ev),
  NSPAIR(_ZN7S4123C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4123C3;
extern VTBL_ENTRY _ZTI7S4123C3[];
extern  VTBL_ENTRY _ZTV7S4123C3[];
extern Class_Descriptor cd_S4123C2;
extern VTBL_ENTRY _ZTI7S4123C2[];
extern  VTBL_ENTRY _ZTV7S4123C2[];
static Base_Class bases_S4123C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4123C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S4123C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S4123C1[];
extern void _ZN7S4123C1D1Ev();
extern void _ZN7S4123C1D0Ev();
extern void _ZN7S4123C32v1Ev();
static  VTBL_ENTRY vtc_S4123C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4123C1[0]),
  (VTBL_ENTRY)&_ZN7S4123C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4123C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4123C32v1Ev,
};
extern VTBL_ENTRY _ZTI7S4123C1[];
extern  VTBL_ENTRY _ZTV7S4123C1[];
Class_Descriptor cd_S4123C1 = {  "S4123C1", // class name
  bases_S4123C1, 2,
  &(vtc_S4123C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,24), // object size
  NSPAIRA(_ZTI7S4123C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4123C1),5, //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  S4119C3  {
  char s4119c3f0;
  int s4119c3f1;
  virtual  ~S4119C3(); // _ZN7S4119C3D1Ev
  virtual void  v1(); // _ZN7S4119C32v1Ev
  S4119C3(); // tgen
};
//SIG(-1 S4119C3) C1{ vd v1 Fc Fi}


 S4119C3 ::~S4119C3(){ note_dtor("S4119C3", this);}
void  S4119C3 ::v1(){vfunc_called(this, "_ZN7S4119C32v1Ev");}
S4119C3 ::S4119C3(){ note_ctor("S4119C3", this);} // tgen

static void Test_S4119C3()
{
  extern Class_Descriptor cd_S4119C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S4119C3, buf);
    S4119C3 *dp, &lv = *(dp=new (buf) S4119C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S4119C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4119C3)");
    check_field_offset(lv, s4119c3f0, ABISELECT(8,4), "S4119C3.s4119c3f0");
    check_field_offset(lv, s4119c3f1, ABISELECT(12,8), "S4119C3.s4119c3f1");
    test_class_info(&lv, &cd_S4119C3);
    dp->~S4119C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4119C3(Test_S4119C3, "S4119C3", ABISELECT(16,12));

#else // __cplusplus

extern void _ZN7S4119C3C1Ev();
extern void _ZN7S4119C3D1Ev();
Name_Map name_map_S4119C3[] = {
  NSPAIR(_ZN7S4119C3C1Ev),
  NSPAIR(_ZN7S4119C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4119C3[];
extern void _ZN7S4119C3D1Ev();
extern void _ZN7S4119C3D0Ev();
extern void _ZN7S4119C32v1Ev();
static  VTBL_ENTRY vtc_S4119C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4119C3[0]),
  (VTBL_ENTRY)&_ZN7S4119C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4119C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4119C32v1Ev,
};
extern VTBL_ENTRY _ZTI7S4119C3[];
extern  VTBL_ENTRY _ZTV7S4119C3[];
Class_Descriptor cd_S4119C3 = {  "S4119C3", // class name
  0,0,//no base classes
  &(vtc_S4119C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI7S4119C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4119C3),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  S4119C2  : S4119C3 {
  int s4119c2f0[2];
  virtual  ~S4119C2(); // _ZN7S4119C2D1Ev
  S4119C2(); // tgen
};
//SIG(-1 S4119C2) C1{ BC2{ vd v1 Fc Fi} vd Fi[2]}


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

static void Test_S4119C2()
{
  extern Class_Descriptor cd_S4119C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,6)];
    init_test(&cd_S4119C2, buf);
    S4119C2 *dp, &lv = *(dp=new (buf) S4119C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(S4119C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4119C2)");
    check_base_class_offset(lv, (S4119C3*), 0, "S4119C2");
    check_field_offset(lv, s4119c2f0, ABISELECT(16,12), "S4119C2.s4119c2f0");
    test_class_info(&lv, &cd_S4119C2);
    dp->~S4119C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4119C2(Test_S4119C2, "S4119C2", ABISELECT(24,20));

#else // __cplusplus

extern void _ZN7S4119C2C1Ev();
extern void _ZN7S4119C2D1Ev();
Name_Map name_map_S4119C2[] = {
  NSPAIR(_ZN7S4119C2C1Ev),
  NSPAIR(_ZN7S4119C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4119C3;
extern VTBL_ENTRY _ZTI7S4119C3[];
extern  VTBL_ENTRY _ZTV7S4119C3[];
static Base_Class bases_S4119C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4119C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI7S4119C2[];
extern void _ZN7S4119C2D1Ev();
extern void _ZN7S4119C2D0Ev();
extern void _ZN7S4119C32v1Ev();
static  VTBL_ENTRY vtc_S4119C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4119C2[0]),
  (VTBL_ENTRY)&_ZN7S4119C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4119C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4119C32v1Ev,
};
extern VTBL_ENTRY _ZTI7S4119C2[];
extern  VTBL_ENTRY _ZTV7S4119C2[];
Class_Descriptor cd_S4119C2 = {  "S4119C2", // class name
  bases_S4119C2, 1,
  &(vtc_S4119C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,20), // object size
  NSPAIRA(_ZTI7S4119C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4119C2),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  S4119C1  : S4119C2 {
  virtual  ~S4119C1(); // _ZN7S4119C1D1Ev
  S4119C1(); // tgen
};
//SIG(1 S4119C1) C1{ BC2{ BC3{ vd v1 Fc Fi} vd Fi[2]} vd}


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

static void Test_S4119C1()
{
  extern Class_Descriptor cd_S4119C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,6)];
    init_test(&cd_S4119C1, buf);
    S4119C1 *dp, &lv = *(dp=new (buf) S4119C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(S4119C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4119C1)");
    check_base_class_offset(lv, (S4119C3*)(S4119C2*), 0, "S4119C1");
    check_base_class_offset(lv, (S4119C2*), 0, "S4119C1");
    test_class_info(&lv, &cd_S4119C1);
    dp->~S4119C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4119C1(Test_S4119C1, "S4119C1", ABISELECT(24,20));

#else // __cplusplus

extern void _ZN7S4119C1C1Ev();
extern void _ZN7S4119C1D1Ev();
Name_Map name_map_S4119C1[] = {
  NSPAIR(_ZN7S4119C1C1Ev),
  NSPAIR(_ZN7S4119C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4119C3;
extern VTBL_ENTRY _ZTI7S4119C3[];
extern  VTBL_ENTRY _ZTV7S4119C3[];
extern Class_Descriptor cd_S4119C2;
extern VTBL_ENTRY _ZTI7S4119C2[];
extern  VTBL_ENTRY _ZTV7S4119C2[];
static Base_Class bases_S4119C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4119C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S4119C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S4119C1[];
extern void _ZN7S4119C1D1Ev();
extern void _ZN7S4119C1D0Ev();
extern void _ZN7S4119C32v1Ev();
static  VTBL_ENTRY vtc_S4119C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4119C1[0]),
  (VTBL_ENTRY)&_ZN7S4119C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4119C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4119C32v1Ev,
};
extern VTBL_ENTRY _ZTI7S4119C1[];
extern  VTBL_ENTRY _ZTV7S4119C1[];
Class_Descriptor cd_S4119C1 = {  "S4119C1", // class name
  bases_S4119C1, 2,
  &(vtc_S4119C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,20), // object size
  NSPAIRA(_ZTI7S4119C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4119C1),5, //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  S16096C1  {
  ::S2638C3_nt s16096c1f0;
  ::S15028C2 s16096c1f1;
  void  mf16096c1(); // _ZN8S16096C19mf16096c1Ev
};
//SIG(1 S16096C1) C1{ m FC2{ m Fi} FC3{ Fi FC4{ Fc[12]}}}


void  S16096C1 ::mf16096c1(){}

static void Test_S16096C1()
{
  {
    init_simple_test("S16096C1");
    S16096C1 lv;
    check2(sizeof(lv), 20, "sizeof(S16096C1)");
    check2(__alignof__(lv), 4, "__alignof__(S16096C1)");
    check_field_offset(lv, s16096c1f0, 0, "S16096C1.s16096c1f0");
    check_field_offset(lv, s16096c1f1, 4, "S16096C1.s16096c1f1");
  }
}
static Arrange_To_Call_Me vS16096C1(Test_S16096C1, "S16096C1", 20);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S8680C2  {
  char s8680c2f0;
  int s8680c2f1;
  virtual  ~S8680C2(); // _ZN7S8680C2D1Ev
  virtual void  v2(); // _ZN7S8680C22v2Ev
  S8680C2(); // tgen
};
//SIG(-1 S8680C2) C1{ vd v1 Fc Fi}


 S8680C2 ::~S8680C2(){ note_dtor("S8680C2", this);}
void  S8680C2 ::v2(){vfunc_called(this, "_ZN7S8680C22v2Ev");}
S8680C2 ::S8680C2(){ note_ctor("S8680C2", this);} // tgen

static void Test_S8680C2()
{
  extern Class_Descriptor cd_S8680C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S8680C2, buf);
    S8680C2 *dp, &lv = *(dp=new (buf) S8680C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S8680C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8680C2)");
    check_field_offset(lv, s8680c2f0, ABISELECT(8,4), "S8680C2.s8680c2f0");
    check_field_offset(lv, s8680c2f1, ABISELECT(12,8), "S8680C2.s8680c2f1");
    test_class_info(&lv, &cd_S8680C2);
    dp->~S8680C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8680C2(Test_S8680C2, "S8680C2", ABISELECT(16,12));

#else // __cplusplus

extern void _ZN7S8680C2C1Ev();
extern void _ZN7S8680C2D1Ev();
Name_Map name_map_S8680C2[] = {
  NSPAIR(_ZN7S8680C2C1Ev),
  NSPAIR(_ZN7S8680C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S8680C2[];
extern void _ZN7S8680C2D1Ev();
extern void _ZN7S8680C2D0Ev();
extern void _ZN7S8680C22v2Ev();
static  VTBL_ENTRY vtc_S8680C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8680C2[0]),
  (VTBL_ENTRY)&_ZN7S8680C2D1Ev,
  (VTBL_ENTRY)&_ZN7S8680C2D0Ev,
  (VTBL_ENTRY)&_ZN7S8680C22v2Ev,
};
extern VTBL_ENTRY _ZTI7S8680C2[];
extern  VTBL_ENTRY _ZTV7S8680C2[];
Class_Descriptor cd_S8680C2 = {  "S8680C2", // class name
  0,0,//no base classes
  &(vtc_S8680C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI7S8680C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S8680C2),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  S8680C1  : S8680C2 {
  void *s8680c1f0[2];
  char s8680c1f1;
  virtual  ~S8680C1(); // _ZN7S8680C1D1Ev
  virtual void  v1(); // _ZN7S8680C12v1Ev
  S8680C1(); // tgen
};
//SIG(1 S8680C1) C1{ BC2{ vd v2 Fc Fi} vd v1 Fp[2] Fc}


 S8680C1 ::~S8680C1(){ note_dtor("S8680C1", this);}
void  S8680C1 ::v1(){vfunc_called(this, "_ZN7S8680C12v1Ev");}
S8680C1 ::S8680C1(){ note_ctor("S8680C1", this);} // tgen

static void Test_S8680C1()
{
  extern Class_Descriptor cd_S8680C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,7)];
    init_test(&cd_S8680C1, buf);
    S8680C1 *dp, &lv = *(dp=new (buf) S8680C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,24), "sizeof(S8680C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8680C1)");
    check_base_class_offset(lv, (S8680C2*), 0, "S8680C1");
    check_field_offset(lv, s8680c1f0, ABISELECT(16,12), "S8680C1.s8680c1f0");
    check_field_offset(lv, s8680c1f1, ABISELECT(32,20), "S8680C1.s8680c1f1");
    test_class_info(&lv, &cd_S8680C1);
    dp->~S8680C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8680C1(Test_S8680C1, "S8680C1", ABISELECT(40,24));

#else // __cplusplus

extern void _ZN7S8680C1C1Ev();
extern void _ZN7S8680C1D1Ev();
Name_Map name_map_S8680C1[] = {
  NSPAIR(_ZN7S8680C1C1Ev),
  NSPAIR(_ZN7S8680C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S8680C2;
extern VTBL_ENTRY _ZTI7S8680C2[];
extern  VTBL_ENTRY _ZTV7S8680C2[];
static Base_Class bases_S8680C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S8680C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI7S8680C1[];
extern void _ZN7S8680C1D1Ev();
extern void _ZN7S8680C1D0Ev();
extern void _ZN7S8680C22v2Ev();
extern void _ZN7S8680C12v1Ev();
static  VTBL_ENTRY vtc_S8680C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8680C1[0]),
  (VTBL_ENTRY)&_ZN7S8680C1D1Ev,
  (VTBL_ENTRY)&_ZN7S8680C1D0Ev,
  (VTBL_ENTRY)&_ZN7S8680C22v2Ev,
  (VTBL_ENTRY)&_ZN7S8680C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S8680C1[];
extern  VTBL_ENTRY _ZTV7S8680C1[];
Class_Descriptor cd_S8680C1 = {  "S8680C1", // class name
  bases_S8680C1, 1,
  &(vtc_S8680C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,24), // object size
  NSPAIRA(_ZTI7S8680C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S8680C1),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  S8422C2  {
  char s8422c2f0;
  int s8422c2f1;
  virtual  ~S8422C2(); // _ZN7S8422C2D1Ev
  virtual void  v1(); // _ZN7S8422C22v1Ev
  S8422C2(); // tgen
};
//SIG(-1 S8422C2) C1{ vd v1 Fc Fi}


 S8422C2 ::~S8422C2(){ note_dtor("S8422C2", this);}
void  S8422C2 ::v1(){vfunc_called(this, "_ZN7S8422C22v1Ev");}
S8422C2 ::S8422C2(){ note_ctor("S8422C2", this);} // tgen

static void Test_S8422C2()
{
  extern Class_Descriptor cd_S8422C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S8422C2, buf);
    S8422C2 *dp, &lv = *(dp=new (buf) S8422C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S8422C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8422C2)");
    check_field_offset(lv, s8422c2f0, ABISELECT(8,4), "S8422C2.s8422c2f0");
    check_field_offset(lv, s8422c2f1, ABISELECT(12,8), "S8422C2.s8422c2f1");
    test_class_info(&lv, &cd_S8422C2);
    dp->~S8422C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8422C2(Test_S8422C2, "S8422C2", ABISELECT(16,12));

#else // __cplusplus

extern void _ZN7S8422C2C1Ev();
extern void _ZN7S8422C2D1Ev();
Name_Map name_map_S8422C2[] = {
  NSPAIR(_ZN7S8422C2C1Ev),
  NSPAIR(_ZN7S8422C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S8422C2[];
extern void _ZN7S8422C2D1Ev();
extern void _ZN7S8422C2D0Ev();
extern void _ZN7S8422C22v1Ev();
static  VTBL_ENTRY vtc_S8422C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8422C2[0]),
  (VTBL_ENTRY)&_ZN7S8422C2D1Ev,
  (VTBL_ENTRY)&_ZN7S8422C2D0Ev,
  (VTBL_ENTRY)&_ZN7S8422C22v1Ev,
};
extern VTBL_ENTRY _ZTI7S8422C2[];
extern  VTBL_ENTRY _ZTV7S8422C2[];
Class_Descriptor cd_S8422C2 = {  "S8422C2", // class name
  0,0,//no base classes
  &(vtc_S8422C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI7S8422C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S8422C2),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  S8422C1  : S8422C2 {
  void *s8422c1f0[2];
  int s8422c1f1[3];
  virtual  ~S8422C1(); // _ZN7S8422C1D1Ev
  S8422C1(); // tgen
};
//SIG(1 S8422C1) C1{ BC2{ vd v1 Fc Fi} vd Fp[2] Fi[3]}


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

static void Test_S8422C1()
{
  extern Class_Descriptor cd_S8422C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,9)];
    init_test(&cd_S8422C1, buf);
    S8422C1 *dp, &lv = *(dp=new (buf) S8422C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S8422C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8422C1)");
    check_base_class_offset(lv, (S8422C2*), 0, "S8422C1");
    check_field_offset(lv, s8422c1f0, ABISELECT(16,12), "S8422C1.s8422c1f0");
    check_field_offset(lv, s8422c1f1, ABISELECT(32,20), "S8422C1.s8422c1f1");
    test_class_info(&lv, &cd_S8422C1);
    dp->~S8422C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8422C1(Test_S8422C1, "S8422C1", ABISELECT(48,32));

#else // __cplusplus

extern void _ZN7S8422C1C1Ev();
extern void _ZN7S8422C1D1Ev();
Name_Map name_map_S8422C1[] = {
  NSPAIR(_ZN7S8422C1C1Ev),
  NSPAIR(_ZN7S8422C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S8422C2;
extern VTBL_ENTRY _ZTI7S8422C2[];
extern  VTBL_ENTRY _ZTV7S8422C2[];
static Base_Class bases_S8422C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S8422C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI7S8422C1[];
extern void _ZN7S8422C1D1Ev();
extern void _ZN7S8422C1D0Ev();
extern void _ZN7S8422C22v1Ev();
static  VTBL_ENTRY vtc_S8422C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8422C1[0]),
  (VTBL_ENTRY)&_ZN7S8422C1D1Ev,
  (VTBL_ENTRY)&_ZN7S8422C1D0Ev,
  (VTBL_ENTRY)&_ZN7S8422C22v1Ev,
};
extern VTBL_ENTRY _ZTI7S8422C1[];
extern  VTBL_ENTRY _ZTV7S8422C1[];
Class_Descriptor cd_S8422C1 = {  "S8422C1", // class name
  bases_S8422C1, 1,
  &(vtc_S8422C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI7S8422C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S8422C1),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  S8416C2  {
  char s8416c2f0;
  int s8416c2f1;
  virtual  ~S8416C2(); // _ZN7S8416C2D1Ev
  virtual void  v1(); // _ZN7S8416C22v1Ev
  S8416C2(); // tgen
};
//SIG(-1 S8416C2) C1{ vd v1 Fc Fi}


 S8416C2 ::~S8416C2(){ note_dtor("S8416C2", this);}
void  S8416C2 ::v1(){vfunc_called(this, "_ZN7S8416C22v1Ev");}
S8416C2 ::S8416C2(){ note_ctor("S8416C2", this);} // tgen

static void Test_S8416C2()
{
  extern Class_Descriptor cd_S8416C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S8416C2, buf);
    S8416C2 *dp, &lv = *(dp=new (buf) S8416C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S8416C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8416C2)");
    check_field_offset(lv, s8416c2f0, ABISELECT(8,4), "S8416C2.s8416c2f0");
    check_field_offset(lv, s8416c2f1, ABISELECT(12,8), "S8416C2.s8416c2f1");
    test_class_info(&lv, &cd_S8416C2);
    dp->~S8416C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8416C2(Test_S8416C2, "S8416C2", ABISELECT(16,12));

#else // __cplusplus

extern void _ZN7S8416C2C1Ev();
extern void _ZN7S8416C2D1Ev();
Name_Map name_map_S8416C2[] = {
  NSPAIR(_ZN7S8416C2C1Ev),
  NSPAIR(_ZN7S8416C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S8416C2[];
extern void _ZN7S8416C2D1Ev();
extern void _ZN7S8416C2D0Ev();
extern void _ZN7S8416C22v1Ev();
static  VTBL_ENTRY vtc_S8416C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8416C2[0]),
  (VTBL_ENTRY)&_ZN7S8416C2D1Ev,
  (VTBL_ENTRY)&_ZN7S8416C2D0Ev,
  (VTBL_ENTRY)&_ZN7S8416C22v1Ev,
};
extern VTBL_ENTRY _ZTI7S8416C2[];
extern  VTBL_ENTRY _ZTV7S8416C2[];
Class_Descriptor cd_S8416C2 = {  "S8416C2", // class name
  0,0,//no base classes
  &(vtc_S8416C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI7S8416C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S8416C2),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  S8416C1  : S8416C2 {
  void *s8416c1f0;
  int s8416c1f1;
  void *s8416c1f2[5];
  virtual  ~S8416C1(); // _ZN7S8416C1D1Ev
  S8416C1(); // tgen
};
//SIG(1 S8416C1) C1{ BC2{ vd v1 Fc Fi} vd Fp Fi Fp[5]}


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

static void Test_S8416C1()
{
  extern Class_Descriptor cd_S8416C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,11)];
    init_test(&cd_S8416C1, buf);
    S8416C1 *dp, &lv = *(dp=new (buf) S8416C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,40), "sizeof(S8416C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8416C1)");
    check_base_class_offset(lv, (S8416C2*), 0, "S8416C1");
    check_field_offset(lv, s8416c1f0, ABISELECT(16,12), "S8416C1.s8416c1f0");
    check_field_offset(lv, s8416c1f1, ABISELECT(24,16), "S8416C1.s8416c1f1");
    check_field_offset(lv, s8416c1f2, ABISELECT(32,20), "S8416C1.s8416c1f2");
    test_class_info(&lv, &cd_S8416C1);
    dp->~S8416C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8416C1(Test_S8416C1, "S8416C1", ABISELECT(72,40));

#else // __cplusplus

extern void _ZN7S8416C1C1Ev();
extern void _ZN7S8416C1D1Ev();
Name_Map name_map_S8416C1[] = {
  NSPAIR(_ZN7S8416C1C1Ev),
  NSPAIR(_ZN7S8416C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S8416C2;
extern VTBL_ENTRY _ZTI7S8416C2[];
extern  VTBL_ENTRY _ZTV7S8416C2[];
static Base_Class bases_S8416C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S8416C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI7S8416C1[];
extern void _ZN7S8416C1D1Ev();
extern void _ZN7S8416C1D0Ev();
extern void _ZN7S8416C22v1Ev();
static  VTBL_ENTRY vtc_S8416C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8416C1[0]),
  (VTBL_ENTRY)&_ZN7S8416C1D1Ev,
  (VTBL_ENTRY)&_ZN7S8416C1D0Ev,
  (VTBL_ENTRY)&_ZN7S8416C22v1Ev,
};
extern VTBL_ENTRY _ZTI7S8416C1[];
extern  VTBL_ENTRY _ZTV7S8416C1[];
Class_Descriptor cd_S8416C1 = {  "S8416C1", // class name
  bases_S8416C1, 1,
  &(vtc_S8416C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,40), // object size
  NSPAIRA(_ZTI7S8416C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S8416C1),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  S8404C2  {
  char s8404c2f0;
  int s8404c2f1;
  virtual  ~S8404C2(); // _ZN7S8404C2D1Ev
  virtual void  v1(); // _ZN7S8404C22v1Ev
  S8404C2(); // tgen
};
//SIG(-1 S8404C2) C1{ vd v1 Fc Fi}


 S8404C2 ::~S8404C2(){ note_dtor("S8404C2", this);}
void  S8404C2 ::v1(){vfunc_called(this, "_ZN7S8404C22v1Ev");}
S8404C2 ::S8404C2(){ note_ctor("S8404C2", this);} // tgen

static void Test_S8404C2()
{
  extern Class_Descriptor cd_S8404C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S8404C2, buf);
    S8404C2 *dp, &lv = *(dp=new (buf) S8404C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S8404C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8404C2)");
    check_field_offset(lv, s8404c2f0, ABISELECT(8,4), "S8404C2.s8404c2f0");
    check_field_offset(lv, s8404c2f1, ABISELECT(12,8), "S8404C2.s8404c2f1");
    test_class_info(&lv, &cd_S8404C2);
    dp->~S8404C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8404C2(Test_S8404C2, "S8404C2", ABISELECT(16,12));

#else // __cplusplus

extern void _ZN7S8404C2C1Ev();
extern void _ZN7S8404C2D1Ev();
Name_Map name_map_S8404C2[] = {
  NSPAIR(_ZN7S8404C2C1Ev),
  NSPAIR(_ZN7S8404C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S8404C2[];
extern void _ZN7S8404C2D1Ev();
extern void _ZN7S8404C2D0Ev();
extern void _ZN7S8404C22v1Ev();
static  VTBL_ENTRY vtc_S8404C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8404C2[0]),
  (VTBL_ENTRY)&_ZN7S8404C2D1Ev,
  (VTBL_ENTRY)&_ZN7S8404C2D0Ev,
  (VTBL_ENTRY)&_ZN7S8404C22v1Ev,
};
extern VTBL_ENTRY _ZTI7S8404C2[];
extern  VTBL_ENTRY _ZTV7S8404C2[];
Class_Descriptor cd_S8404C2 = {  "S8404C2", // class name
  0,0,//no base classes
  &(vtc_S8404C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI7S8404C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S8404C2),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  S8404C1  : S8404C2 {
  int s8404c1f0[2];
  void *s8404c1f1[2];
  virtual  ~S8404C1(); // _ZN7S8404C1D1Ev
  S8404C1(); // tgen
};
//SIG(1 S8404C1) C1{ BC2{ vd v1 Fc Fi} vd Fi[2] Fp[2]}


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

static void Test_S8404C1()
{
  extern Class_Descriptor cd_S8404C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S8404C1, buf);
    S8404C1 *dp, &lv = *(dp=new (buf) S8404C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S8404C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8404C1)");
    check_base_class_offset(lv, (S8404C2*), 0, "S8404C1");
    check_field_offset(lv, s8404c1f0, ABISELECT(16,12), "S8404C1.s8404c1f0");
    check_field_offset(lv, s8404c1f1, ABISELECT(24,20), "S8404C1.s8404c1f1");
    test_class_info(&lv, &cd_S8404C1);
    dp->~S8404C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8404C1(Test_S8404C1, "S8404C1", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S8404C1C1Ev();
extern void _ZN7S8404C1D1Ev();
Name_Map name_map_S8404C1[] = {
  NSPAIR(_ZN7S8404C1C1Ev),
  NSPAIR(_ZN7S8404C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S8404C2;
extern VTBL_ENTRY _ZTI7S8404C2[];
extern  VTBL_ENTRY _ZTV7S8404C2[];
static Base_Class bases_S8404C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S8404C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI7S8404C1[];
extern void _ZN7S8404C1D1Ev();
extern void _ZN7S8404C1D0Ev();
extern void _ZN7S8404C22v1Ev();
static  VTBL_ENTRY vtc_S8404C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8404C1[0]),
  (VTBL_ENTRY)&_ZN7S8404C1D1Ev,
  (VTBL_ENTRY)&_ZN7S8404C1D0Ev,
  (VTBL_ENTRY)&_ZN7S8404C22v1Ev,
};
extern VTBL_ENTRY _ZTI7S8404C1[];
extern  VTBL_ENTRY _ZTV7S8404C1[];
Class_Descriptor cd_S8404C1 = {  "S8404C1", // class name
  bases_S8404C1, 1,
  &(vtc_S8404C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S8404C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S8404C1),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  S4132C3  {
  char s4132c3f0;
  int s4132c3f1;
  virtual  ~S4132C3(); // _ZN7S4132C3D1Ev
  virtual void  v1(); // _ZN7S4132C32v1Ev
  S4132C3(); // tgen
};
//SIG(-1 S4132C3) C1{ vd v1 Fc Fi}


 S4132C3 ::~S4132C3(){ note_dtor("S4132C3", this);}
void  S4132C3 ::v1(){vfunc_called(this, "_ZN7S4132C32v1Ev");}
S4132C3 ::S4132C3(){ note_ctor("S4132C3", this);} // tgen

static void Test_S4132C3()
{
  extern Class_Descriptor cd_S4132C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S4132C3, buf);
    S4132C3 *dp, &lv = *(dp=new (buf) S4132C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S4132C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4132C3)");
    check_field_offset(lv, s4132c3f0, ABISELECT(8,4), "S4132C3.s4132c3f0");
    check_field_offset(lv, s4132c3f1, ABISELECT(12,8), "S4132C3.s4132c3f1");
    test_class_info(&lv, &cd_S4132C3);
    dp->~S4132C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4132C3(Test_S4132C3, "S4132C3", ABISELECT(16,12));

#else // __cplusplus

extern void _ZN7S4132C3C1Ev();
extern void _ZN7S4132C3D1Ev();
Name_Map name_map_S4132C3[] = {
  NSPAIR(_ZN7S4132C3C1Ev),
  NSPAIR(_ZN7S4132C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4132C3[];
extern void _ZN7S4132C3D1Ev();
extern void _ZN7S4132C3D0Ev();
extern void _ZN7S4132C32v1Ev();
static  VTBL_ENTRY vtc_S4132C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4132C3[0]),
  (VTBL_ENTRY)&_ZN7S4132C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4132C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4132C32v1Ev,
};
extern VTBL_ENTRY _ZTI7S4132C3[];
extern  VTBL_ENTRY _ZTV7S4132C3[];
Class_Descriptor cd_S4132C3 = {  "S4132C3", // class name
  0,0,//no base classes
  &(vtc_S4132C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI7S4132C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4132C3),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  S4132C2  : S4132C3 {
  void *s4132c2f0;
  virtual  ~S4132C2(); // _ZN7S4132C2D1Ev
  S4132C2(); // tgen
};
//SIG(-1 S4132C2) C1{ BC2{ vd v1 Fc Fi} vd Fp}


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

static void Test_S4132C2()
{
  extern Class_Descriptor cd_S4132C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,5)];
    init_test(&cd_S4132C2, buf);
    S4132C2 *dp, &lv = *(dp=new (buf) S4132C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S4132C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4132C2)");
    check_base_class_offset(lv, (S4132C3*), 0, "S4132C2");
    check_field_offset(lv, s4132c2f0, ABISELECT(16,12), "S4132C2.s4132c2f0");
    test_class_info(&lv, &cd_S4132C2);
    dp->~S4132C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4132C2(Test_S4132C2, "S4132C2", ABISELECT(24,16));

#else // __cplusplus

extern void _ZN7S4132C2C1Ev();
extern void _ZN7S4132C2D1Ev();
Name_Map name_map_S4132C2[] = {
  NSPAIR(_ZN7S4132C2C1Ev),
  NSPAIR(_ZN7S4132C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4132C3;
extern VTBL_ENTRY _ZTI7S4132C3[];
extern  VTBL_ENTRY _ZTV7S4132C3[];
static Base_Class bases_S4132C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4132C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI7S4132C2[];
extern void _ZN7S4132C2D1Ev();
extern void _ZN7S4132C2D0Ev();
extern void _ZN7S4132C32v1Ev();
static  VTBL_ENTRY vtc_S4132C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4132C2[0]),
  (VTBL_ENTRY)&_ZN7S4132C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4132C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4132C32v1Ev,
};
extern VTBL_ENTRY _ZTI7S4132C2[];
extern  VTBL_ENTRY _ZTV7S4132C2[];
Class_Descriptor cd_S4132C2 = {  "S4132C2", // class name
  bases_S4132C2, 1,
  &(vtc_S4132C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,16), // object size
  NSPAIRA(_ZTI7S4132C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4132C2),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  S4132C1  : S4132C2 {
  virtual  ~S4132C1(); // _ZN7S4132C1D1Ev
  S4132C1(); // tgen
};
//SIG(1 S4132C1) C1{ BC2{ BC3{ vd v1 Fc Fi} vd Fp} vd}


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

static void Test_S4132C1()
{
  extern Class_Descriptor cd_S4132C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,5)];
    init_test(&cd_S4132C1, buf);
    S4132C1 *dp, &lv = *(dp=new (buf) S4132C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S4132C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4132C1)");
    check_base_class_offset(lv, (S4132C3*)(S4132C2*), 0, "S4132C1");
    check_base_class_offset(lv, (S4132C2*), 0, "S4132C1");
    test_class_info(&lv, &cd_S4132C1);
    dp->~S4132C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4132C1(Test_S4132C1, "S4132C1", ABISELECT(24,16));

#else // __cplusplus

extern void _ZN7S4132C1C1Ev();
extern void _ZN7S4132C1D1Ev();
Name_Map name_map_S4132C1[] = {
  NSPAIR(_ZN7S4132C1C1Ev),
  NSPAIR(_ZN7S4132C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4132C3;
extern VTBL_ENTRY _ZTI7S4132C3[];
extern  VTBL_ENTRY _ZTV7S4132C3[];
extern Class_Descriptor cd_S4132C2;
extern VTBL_ENTRY _ZTI7S4132C2[];
extern  VTBL_ENTRY _ZTV7S4132C2[];
static Base_Class bases_S4132C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4132C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S4132C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S4132C1[];
extern void _ZN7S4132C1D1Ev();
extern void _ZN7S4132C1D0Ev();
extern void _ZN7S4132C32v1Ev();
static  VTBL_ENTRY vtc_S4132C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4132C1[0]),
  (VTBL_ENTRY)&_ZN7S4132C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4132C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4132C32v1Ev,
};
extern VTBL_ENTRY _ZTI7S4132C1[];
extern  VTBL_ENTRY _ZTV7S4132C1[];
Class_Descriptor cd_S4132C1 = {  "S4132C1", // class name
  bases_S4132C1, 2,
  &(vtc_S4132C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,16), // object size
  NSPAIRA(_ZTI7S4132C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4132C1),5, //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  S4127C3  {
  char s4127c3f0;
  int s4127c3f1;
  virtual  ~S4127C3(); // _ZN7S4127C3D1Ev
  virtual void  v1(); // _ZN7S4127C32v1Ev
  S4127C3(); // tgen
};
//SIG(-1 S4127C3) C1{ vd v1 Fc Fi}


 S4127C3 ::~S4127C3(){ note_dtor("S4127C3", this);}
void  S4127C3 ::v1(){vfunc_called(this, "_ZN7S4127C32v1Ev");}
S4127C3 ::S4127C3(){ note_ctor("S4127C3", this);} // tgen

static void Test_S4127C3()
{
  extern Class_Descriptor cd_S4127C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S4127C3, buf);
    S4127C3 *dp, &lv = *(dp=new (buf) S4127C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S4127C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4127C3)");
    check_field_offset(lv, s4127c3f0, ABISELECT(8,4), "S4127C3.s4127c3f0");
    check_field_offset(lv, s4127c3f1, ABISELECT(12,8), "S4127C3.s4127c3f1");
    test_class_info(&lv, &cd_S4127C3);
    dp->~S4127C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4127C3(Test_S4127C3, "S4127C3", ABISELECT(16,12));

#else // __cplusplus

extern void _ZN7S4127C3C1Ev();
extern void _ZN7S4127C3D1Ev();
Name_Map name_map_S4127C3[] = {
  NSPAIR(_ZN7S4127C3C1Ev),
  NSPAIR(_ZN7S4127C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4127C3[];
extern void _ZN7S4127C3D1Ev();
extern void _ZN7S4127C3D0Ev();
extern void _ZN7S4127C32v1Ev();
static  VTBL_ENTRY vtc_S4127C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4127C3[0]),
  (VTBL_ENTRY)&_ZN7S4127C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4127C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4127C32v1Ev,
};
extern VTBL_ENTRY _ZTI7S4127C3[];
extern  VTBL_ENTRY _ZTV7S4127C3[];
Class_Descriptor cd_S4127C3 = {  "S4127C3", // class name
  0,0,//no base classes
  &(vtc_S4127C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI7S4127C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4127C3),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  S4127C2  : S4127C3 {
  int s4127c2f0;
  virtual  ~S4127C2(); // _ZN7S4127C2D1Ev
  S4127C2(); // tgen
};
//SIG(-1 S4127C2) C1{ BC2{ vd v1 Fc Fi} vd Fi}


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

static void Test_S4127C2()
{
  extern Class_Descriptor cd_S4127C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,5)];
    init_test(&cd_S4127C2, buf);
    S4127C2 *dp, &lv = *(dp=new (buf) S4127C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S4127C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4127C2)");
    check_base_class_offset(lv, (S4127C3*), 0, "S4127C2");
    check_field_offset(lv, s4127c2f0, ABISELECT(16,12), "S4127C2.s4127c2f0");
    test_class_info(&lv, &cd_S4127C2);
    dp->~S4127C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4127C2(Test_S4127C2, "S4127C2", ABISELECT(24,16));

#else // __cplusplus

extern void _ZN7S4127C2C1Ev();
extern void _ZN7S4127C2D1Ev();
Name_Map name_map_S4127C2[] = {
  NSPAIR(_ZN7S4127C2C1Ev),
  NSPAIR(_ZN7S4127C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4127C3;
extern VTBL_ENTRY _ZTI7S4127C3[];
extern  VTBL_ENTRY _ZTV7S4127C3[];
static Base_Class bases_S4127C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4127C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI7S4127C2[];
extern void _ZN7S4127C2D1Ev();
extern void _ZN7S4127C2D0Ev();
extern void _ZN7S4127C32v1Ev();
static  VTBL_ENTRY vtc_S4127C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4127C2[0]),
  (VTBL_ENTRY)&_ZN7S4127C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4127C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4127C32v1Ev,
};
extern VTBL_ENTRY _ZTI7S4127C2[];
extern  VTBL_ENTRY _ZTV7S4127C2[];
Class_Descriptor cd_S4127C2 = {  "S4127C2", // class name
  bases_S4127C2, 1,
  &(vtc_S4127C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,16), // object size
  NSPAIRA(_ZTI7S4127C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4127C2),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  S4127C1  : S4127C2 {
  virtual  ~S4127C1(); // _ZN7S4127C1D1Ev
  S4127C1(); // tgen
};
//SIG(1 S4127C1) C1{ BC2{ BC3{ vd v1 Fc Fi} vd Fi} vd}


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

static void Test_S4127C1()
{
  extern Class_Descriptor cd_S4127C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,5)];
    init_test(&cd_S4127C1, buf);
    S4127C1 *dp, &lv = *(dp=new (buf) S4127C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S4127C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4127C1)");
    check_base_class_offset(lv, (S4127C3*)(S4127C2*), 0, "S4127C1");
    check_base_class_offset(lv, (S4127C2*), 0, "S4127C1");
    test_class_info(&lv, &cd_S4127C1);
    dp->~S4127C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4127C1(Test_S4127C1, "S4127C1", ABISELECT(24,16));

#else // __cplusplus

extern void _ZN7S4127C1C1Ev();
extern void _ZN7S4127C1D1Ev();
Name_Map name_map_S4127C1[] = {
  NSPAIR(_ZN7S4127C1C1Ev),
  NSPAIR(_ZN7S4127C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4127C3;
extern VTBL_ENTRY _ZTI7S4127C3[];
extern  VTBL_ENTRY _ZTV7S4127C3[];
extern Class_Descriptor cd_S4127C2;
extern VTBL_ENTRY _ZTI7S4127C2[];
extern  VTBL_ENTRY _ZTV7S4127C2[];
static Base_Class bases_S4127C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4127C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S4127C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S4127C1[];
extern void _ZN7S4127C1D1Ev();
extern void _ZN7S4127C1D0Ev();
extern void _ZN7S4127C32v1Ev();
static  VTBL_ENTRY vtc_S4127C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4127C1[0]),
  (VTBL_ENTRY)&_ZN7S4127C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4127C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4127C32v1Ev,
};
extern VTBL_ENTRY _ZTI7S4127C1[];
extern  VTBL_ENTRY _ZTV7S4127C1[];
Class_Descriptor cd_S4127C1 = {  "S4127C1", // class name
  bases_S4127C1, 2,
  &(vtc_S4127C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,16), // object size
  NSPAIRA(_ZTI7S4127C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4127C1),5, //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  S11172C2_nt  {
  char s11172c2f0[24];
};
//SIG(-1 S11172C2_nt) C1{ Fc[24]}



//skip512 S11172C2_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S11172C1  {
  ::S11172C2_nt s11172c1f0;
  ::S11102C3 s11172c1f1;
};
//SIG(1 S11172C1) C1{ FC2{ Fc[24]} FC3{ Fp Fc Fi[3]}}



static void Test_S11172C1()
{
  {
    init_simple_test("S11172C1");
    S11172C1 lv;
    check2(sizeof(lv), ABISELECT(48,44), "sizeof(S11172C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S11172C1)");
    check_field_offset(lv, s11172c1f0, 0, "S11172C1.s11172c1f0");
    check_field_offset(lv, s11172c1f1, 24, "S11172C1.s11172c1f1");
  }
}
static Arrange_To_Call_Me vS11172C1(Test_S11172C1, "S11172C1", ABISELECT(48,44));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S8676C2  {
  char s8676c2f0;
  int s8676c2f1;
  virtual  ~S8676C2(); // _ZN7S8676C2D1Ev
  virtual void  v2(); // _ZN7S8676C22v2Ev
  S8676C2(); // tgen
};
//SIG(-1 S8676C2) C1{ vd v1 Fc Fi}


 S8676C2 ::~S8676C2(){ note_dtor("S8676C2", this);}
void  S8676C2 ::v2(){vfunc_called(this, "_ZN7S8676C22v2Ev");}
S8676C2 ::S8676C2(){ note_ctor("S8676C2", this);} // tgen

static void Test_S8676C2()
{
  extern Class_Descriptor cd_S8676C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S8676C2, buf);
    S8676C2 *dp, &lv = *(dp=new (buf) S8676C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S8676C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8676C2)");
    check_field_offset(lv, s8676c2f0, ABISELECT(8,4), "S8676C2.s8676c2f0");
    check_field_offset(lv, s8676c2f1, ABISELECT(12,8), "S8676C2.s8676c2f1");
    test_class_info(&lv, &cd_S8676C2);
    dp->~S8676C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8676C2(Test_S8676C2, "S8676C2", ABISELECT(16,12));

#else // __cplusplus

extern void _ZN7S8676C2C1Ev();
extern void _ZN7S8676C2D1Ev();
Name_Map name_map_S8676C2[] = {
  NSPAIR(_ZN7S8676C2C1Ev),
  NSPAIR(_ZN7S8676C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S8676C2[];
extern void _ZN7S8676C2D1Ev();
extern void _ZN7S8676C2D0Ev();
extern void _ZN7S8676C22v2Ev();
static  VTBL_ENTRY vtc_S8676C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8676C2[0]),
  (VTBL_ENTRY)&_ZN7S8676C2D1Ev,
  (VTBL_ENTRY)&_ZN7S8676C2D0Ev,
  (VTBL_ENTRY)&_ZN7S8676C22v2Ev,
};
extern VTBL_ENTRY _ZTI7S8676C2[];
extern  VTBL_ENTRY _ZTV7S8676C2[];
Class_Descriptor cd_S8676C2 = {  "S8676C2", // class name
  0,0,//no base classes
  &(vtc_S8676C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI7S8676C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S8676C2),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  S8676C1  : S8676C2 {
  void *s8676c1f0;
  int s8676c1f1[2];
  virtual void  v1(); // _ZN7S8676C12v1Ev
  ~S8676C1(); // tgen
  S8676C1(); // tgen
};
//SIG(1 S8676C1) C1{ BC2{ vd v2 Fc Fi} v1 Fp Fi[2]}


void  S8676C1 ::v1(){vfunc_called(this, "_ZN7S8676C12v1Ev");}
S8676C1 ::~S8676C1(){ note_dtor("S8676C1", this);} // tgen
S8676C1 ::S8676C1(){ note_ctor("S8676C1", this);} // tgen

static void Test_S8676C1()
{
  extern Class_Descriptor cd_S8676C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,7)];
    init_test(&cd_S8676C1, buf);
    S8676C1 *dp, &lv = *(dp=new (buf) S8676C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,24), "sizeof(S8676C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8676C1)");
    check_base_class_offset(lv, (S8676C2*), 0, "S8676C1");
    check_field_offset(lv, s8676c1f0, ABISELECT(16,12), "S8676C1.s8676c1f0");
    check_field_offset(lv, s8676c1f1, ABISELECT(24,16), "S8676C1.s8676c1f1");
    test_class_info(&lv, &cd_S8676C1);
    dp->~S8676C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8676C1(Test_S8676C1, "S8676C1", ABISELECT(32,24));

#else // __cplusplus

extern void _ZN7S8676C1C1Ev();
extern void _ZN7S8676C1D1Ev();
Name_Map name_map_S8676C1[] = {
  NSPAIR(_ZN7S8676C1C1Ev),
  NSPAIR(_ZN7S8676C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S8676C2;
extern VTBL_ENTRY _ZTI7S8676C2[];
extern  VTBL_ENTRY _ZTV7S8676C2[];
static Base_Class bases_S8676C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S8676C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI7S8676C1[];
extern void _ZN7S8676C1D1Ev();
extern void _ZN7S8676C1D0Ev();
extern void _ZN7S8676C22v2Ev();
extern void _ZN7S8676C12v1Ev();
static  VTBL_ENTRY vtc_S8676C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8676C1[0]),
  (VTBL_ENTRY)&_ZN7S8676C1D1Ev,
  (VTBL_ENTRY)&_ZN7S8676C1D0Ev,
  (VTBL_ENTRY)&_ZN7S8676C22v2Ev,
  (VTBL_ENTRY)&_ZN7S8676C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S8676C1[];
extern  VTBL_ENTRY _ZTV7S8676C1[];
Class_Descriptor cd_S8676C1 = {  "S8676C1", // class name
  bases_S8676C1, 1,
  &(vtc_S8676C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,24), // object size
  NSPAIRA(_ZTI7S8676C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S8676C1),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  S8396C2  {
  char s8396c2f0;
  int s8396c2f1;
  virtual  ~S8396C2(); // _ZN7S8396C2D1Ev
  virtual void  v1(); // _ZN7S8396C22v1Ev
  S8396C2(); // tgen
};
//SIG(-1 S8396C2) C1{ vd v1 Fc Fi}


 S8396C2 ::~S8396C2(){ note_dtor("S8396C2", this);}
void  S8396C2 ::v1(){vfunc_called(this, "_ZN7S8396C22v1Ev");}
S8396C2 ::S8396C2(){ note_ctor("S8396C2", this);} // tgen

static void Test_S8396C2()
{
  extern Class_Descriptor cd_S8396C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S8396C2, buf);
    S8396C2 *dp, &lv = *(dp=new (buf) S8396C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S8396C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8396C2)");
    check_field_offset(lv, s8396c2f0, ABISELECT(8,4), "S8396C2.s8396c2f0");
    check_field_offset(lv, s8396c2f1, ABISELECT(12,8), "S8396C2.s8396c2f1");
    test_class_info(&lv, &cd_S8396C2);
    dp->~S8396C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8396C2(Test_S8396C2, "S8396C2", ABISELECT(16,12));

#else // __cplusplus

extern void _ZN7S8396C2C1Ev();
extern void _ZN7S8396C2D1Ev();
Name_Map name_map_S8396C2[] = {
  NSPAIR(_ZN7S8396C2C1Ev),
  NSPAIR(_ZN7S8396C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S8396C2[];
extern void _ZN7S8396C2D1Ev();
extern void _ZN7S8396C2D0Ev();
extern void _ZN7S8396C22v1Ev();
static  VTBL_ENTRY vtc_S8396C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8396C2[0]),
  (VTBL_ENTRY)&_ZN7S8396C2D1Ev,
  (VTBL_ENTRY)&_ZN7S8396C2D0Ev,
  (VTBL_ENTRY)&_ZN7S8396C22v1Ev,
};
extern VTBL_ENTRY _ZTI7S8396C2[];
extern  VTBL_ENTRY _ZTV7S8396C2[];
Class_Descriptor cd_S8396C2 = {  "S8396C2", // class name
  0,0,//no base classes
  &(vtc_S8396C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI7S8396C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S8396C2),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  S8396C1  : S8396C2 {
  char s8396c1f0;
  int s8396c1f1;
  void *s8396c1f2;
  virtual  ~S8396C1(); // _ZN7S8396C1D1Ev
  S8396C1(); // tgen
};
//SIG(1 S8396C1) C1{ BC2{ vd v1 Fc Fi} vd Fc Fi Fp}


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

static void Test_S8396C1()
{
  extern Class_Descriptor cd_S8396C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,7)];
    init_test(&cd_S8396C1, buf);
    S8396C1 *dp, &lv = *(dp=new (buf) S8396C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,24), "sizeof(S8396C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8396C1)");
    check_base_class_offset(lv, (S8396C2*), 0, "S8396C1");
    check_field_offset(lv, s8396c1f0, ABISELECT(16,12), "S8396C1.s8396c1f0");
    check_field_offset(lv, s8396c1f1, ABISELECT(20,16), "S8396C1.s8396c1f1");
    check_field_offset(lv, s8396c1f2, ABISELECT(24,20), "S8396C1.s8396c1f2");
    test_class_info(&lv, &cd_S8396C1);
    dp->~S8396C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8396C1(Test_S8396C1, "S8396C1", ABISELECT(32,24));

#else // __cplusplus

extern void _ZN7S8396C1C1Ev();
extern void _ZN7S8396C1D1Ev();
Name_Map name_map_S8396C1[] = {
  NSPAIR(_ZN7S8396C1C1Ev),
  NSPAIR(_ZN7S8396C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S8396C2;
extern VTBL_ENTRY _ZTI7S8396C2[];
extern  VTBL_ENTRY _ZTV7S8396C2[];
static Base_Class bases_S8396C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S8396C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI7S8396C1[];
extern void _ZN7S8396C1D1Ev();
extern void _ZN7S8396C1D0Ev();
extern void _ZN7S8396C22v1Ev();
static  VTBL_ENTRY vtc_S8396C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8396C1[0]),
  (VTBL_ENTRY)&_ZN7S8396C1D1Ev,
  (VTBL_ENTRY)&_ZN7S8396C1D0Ev,
  (VTBL_ENTRY)&_ZN7S8396C22v1Ev,
};
extern VTBL_ENTRY _ZTI7S8396C1[];
extern  VTBL_ENTRY _ZTV7S8396C1[];
Class_Descriptor cd_S8396C1 = {  "S8396C1", // class name
  bases_S8396C1, 1,
  &(vtc_S8396C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,24), // object size
  NSPAIRA(_ZTI7S8396C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S8396C1),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  S8401C2  {
  char s8401c2f0;
  int s8401c2f1;
  virtual  ~S8401C2(); // _ZN7S8401C2D1Ev
  virtual void  v1(); // _ZN7S8401C22v1Ev
  S8401C2(); // tgen
};
//SIG(-1 S8401C2) C1{ vd v1 Fc Fi}


 S8401C2 ::~S8401C2(){ note_dtor("S8401C2", this);}
void  S8401C2 ::v1(){vfunc_called(this, "_ZN7S8401C22v1Ev");}
S8401C2 ::S8401C2(){ note_ctor("S8401C2", this);} // tgen

static void Test_S8401C2()
{
  extern Class_Descriptor cd_S8401C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S8401C2, buf);
    S8401C2 *dp, &lv = *(dp=new (buf) S8401C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S8401C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8401C2)");
    check_field_offset(lv, s8401c2f0, ABISELECT(8,4), "S8401C2.s8401c2f0");
    check_field_offset(lv, s8401c2f1, ABISELECT(12,8), "S8401C2.s8401c2f1");
    test_class_info(&lv, &cd_S8401C2);
    dp->~S8401C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8401C2(Test_S8401C2, "S8401C2", ABISELECT(16,12));

#else // __cplusplus

extern void _ZN7S8401C2C1Ev();
extern void _ZN7S8401C2D1Ev();
Name_Map name_map_S8401C2[] = {
  NSPAIR(_ZN7S8401C2C1Ev),
  NSPAIR(_ZN7S8401C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S8401C2[];
extern void _ZN7S8401C2D1Ev();
extern void _ZN7S8401C2D0Ev();
extern void _ZN7S8401C22v1Ev();
static  VTBL_ENTRY vtc_S8401C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8401C2[0]),
  (VTBL_ENTRY)&_ZN7S8401C2D1Ev,
  (VTBL_ENTRY)&_ZN7S8401C2D0Ev,
  (VTBL_ENTRY)&_ZN7S8401C22v1Ev,
};
extern VTBL_ENTRY _ZTI7S8401C2[];
extern  VTBL_ENTRY _ZTV7S8401C2[];
Class_Descriptor cd_S8401C2 = {  "S8401C2", // class name
  0,0,//no base classes
  &(vtc_S8401C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI7S8401C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S8401C2),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  S8401C1  : S8401C2 {
  int s8401c1f0;
  __tsi64 s8401c1f1;
  virtual  ~S8401C1(); // _ZN7S8401C1D1Ev
  S8401C1(); // tgen
};
//SIG(1 S8401C1) C1{ BC2{ vd v1 Fc Fi} vd Fi FL}


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

static void Test_S8401C1()
{
  extern Class_Descriptor cd_S8401C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,7)];
    init_test(&cd_S8401C1, buf);
    S8401C1 *dp, &lv = *(dp=new (buf) S8401C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,24), "sizeof(S8401C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8401C1)");
    check_base_class_offset(lv, (S8401C2*), 0, "S8401C1");
    check_field_offset(lv, s8401c1f0, ABISELECT(16,12), "S8401C1.s8401c1f0");
    check_field_offset(lv, s8401c1f1, ABISELECT(24,16), "S8401C1.s8401c1f1");
    test_class_info(&lv, &cd_S8401C1);
    dp->~S8401C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8401C1(Test_S8401C1, "S8401C1", ABISELECT(32,24));

#else // __cplusplus

extern void _ZN7S8401C1C1Ev();
extern void _ZN7S8401C1D1Ev();
Name_Map name_map_S8401C1[] = {
  NSPAIR(_ZN7S8401C1C1Ev),
  NSPAIR(_ZN7S8401C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S8401C2;
extern VTBL_ENTRY _ZTI7S8401C2[];
extern  VTBL_ENTRY _ZTV7S8401C2[];
static Base_Class bases_S8401C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S8401C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI7S8401C1[];
extern void _ZN7S8401C1D1Ev();
extern void _ZN7S8401C1D0Ev();
extern void _ZN7S8401C22v1Ev();
static  VTBL_ENTRY vtc_S8401C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8401C1[0]),
  (VTBL_ENTRY)&_ZN7S8401C1D1Ev,
  (VTBL_ENTRY)&_ZN7S8401C1D0Ev,
  (VTBL_ENTRY)&_ZN7S8401C22v1Ev,
};
extern VTBL_ENTRY _ZTI7S8401C1[];
extern  VTBL_ENTRY _ZTV7S8401C1[];
Class_Descriptor cd_S8401C1 = {  "S8401C1", // class name
  bases_S8401C1, 1,
  &(vtc_S8401C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,24), // object size
  NSPAIRA(_ZTI7S8401C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S8401C1),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  S6428C2  {
  virtual  ~S6428C2(); // _ZN7S6428C2D1Ev
  virtual void  v1(); // _ZN7S6428C22v1Ev
  S6428C2(); // tgen
};
//SIG(-1 S6428C2) C1{ vd v1}


 S6428C2 ::~S6428C2(){ note_dtor("S6428C2", this);}
void  S6428C2 ::v1(){vfunc_called(this, "_ZN7S6428C22v1Ev");}
S6428C2 ::S6428C2(){ note_ctor("S6428C2", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S6428C2C1Ev();
extern void _ZN7S6428C2D1Ev();
Name_Map name_map_S6428C2[] = {
  NSPAIR(_ZN7S6428C2C1Ev),
  NSPAIR(_ZN7S6428C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S6428C2[];
extern void _ZN7S6428C2D1Ev();
extern void _ZN7S6428C2D0Ev();
extern void _ZN7S6428C22v1Ev();
static  VTBL_ENTRY vtc_S6428C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6428C2[0]),
  (VTBL_ENTRY)&_ZN7S6428C2D1Ev,
  (VTBL_ENTRY)&_ZN7S6428C2D0Ev,
  (VTBL_ENTRY)&_ZN7S6428C22v1Ev,
};
extern VTBL_ENTRY _ZTI7S6428C2[];
extern  VTBL_ENTRY _ZTV7S6428C2[];
Class_Descriptor cd_S6428C2 = {  "S6428C2", // class name
  0,0,//no base classes
  &(vtc_S6428C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S6428C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S6428C2),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  S6428C1  : S6428C2 {
  int s6428c1f0;
  void *s6428c1f1;
  int s6428c1f2;
  virtual  ~S6428C1(); // _ZN7S6428C1D1Ev
  S6428C1(); // tgen
};
//SIG(1 S6428C1) C1{ BC2{ vd v1} vd Fi Fp Fi}


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

static void Test_S6428C1()
{
  extern Class_Descriptor cd_S6428C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S6428C1, buf);
    S6428C1 *dp, &lv = *(dp=new (buf) S6428C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S6428C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6428C1)");
    check_base_class_offset(lv, (S6428C2*), 0, "S6428C1");
    check_field_offset(lv, s6428c1f0, ABISELECT(8,4), "S6428C1.s6428c1f0");
    check_field_offset(lv, s6428c1f1, ABISELECT(16,8), "S6428C1.s6428c1f1");
    check_field_offset(lv, s6428c1f2, ABISELECT(24,12), "S6428C1.s6428c1f2");
    test_class_info(&lv, &cd_S6428C1);
    dp->~S6428C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6428C1(Test_S6428C1, "S6428C1", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN7S6428C1C1Ev();
extern void _ZN7S6428C1D1Ev();
Name_Map name_map_S6428C1[] = {
  NSPAIR(_ZN7S6428C1C1Ev),
  NSPAIR(_ZN7S6428C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6428C2;
extern VTBL_ENTRY _ZTI7S6428C2[];
extern  VTBL_ENTRY _ZTV7S6428C2[];
static Base_Class bases_S6428C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6428C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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 _ZTI7S6428C1[];
extern void _ZN7S6428C1D1Ev();
extern void _ZN7S6428C1D0Ev();
extern void _ZN7S6428C22v1Ev();
static  VTBL_ENTRY vtc_S6428C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6428C1[0]),
  (VTBL_ENTRY)&_ZN7S6428C1D1Ev,
  (VTBL_ENTRY)&_ZN7S6428C1D0Ev,
  (VTBL_ENTRY)&_ZN7S6428C22v1Ev,
};
extern VTBL_ENTRY _ZTI7S6428C1[];
extern  VTBL_ENTRY _ZTV7S6428C1[];
Class_Descriptor cd_S6428C1 = {  "S6428C1", // class name
  bases_S6428C1, 1,
  &(vtc_S6428C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI7S6428C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S6428C1),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  S19686C2_nt  {
  long double s19686c2f0;
  void  mf19686c2(); // _ZN11S19686C2_nt9mf19686c2Ev
};
//SIG(-1 S19686C2_nt) C1{ m FD}


void  S19686C2_nt ::mf19686c2(){}

//skip512 S19686C2_nt

#else // __cplusplus

extern VTBL_ENTRY _ZTI11S19686C2_nt[];
VTBL_ENTRY *P__ZTI11S19686C2_nt = _ZTI11S19686C2_nt; 
Class_Descriptor cd_S19686C2_nt = {  "S19686C2_nt", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI11S19686C2_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  S19686C1  : virtual S19686C2_nt {
  void *s19686c1f0;
  int s19686c1f1[2];
  virtual void  v1(); // _ZN8S19686C12v1Ev
  ~S19686C1(); // tgen
  S19686C1(); // tgen
};
//SIG(1 S19686C1) C1{ VBC2{ m FD} v1 Fp Fi[2]}


void  S19686C1 ::v1(){vfunc_called(this, "_ZN8S19686C12v1Ev");}
S19686C1 ::~S19686C1(){ note_dtor("S19686C1", this);} // tgen
S19686C1 ::S19686C1(){ note_ctor("S19686C1", this);} // tgen

static void Test_S19686C1()
{
  extern Class_Descriptor cd_S19686C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(4,8)];
    init_test(&cd_S19686C1, buf);
    S19686C1 *dp, &lv = *(dp=new (buf) S19686C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,28), "sizeof(S19686C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19686C1)");
    check_base_class_offset(lv, (S19686C2_nt*), ABISELECT(32,16), "S19686C1");
    check_field_offset(lv, s19686c1f0, ABISELECT(8,4), "S19686C1.s19686c1f0");
    check_field_offset(lv, s19686c1f1, ABISELECT(16,8), "S19686C1.s19686c1f1");
    test_class_info(&lv, &cd_S19686C1);
    dp->~S19686C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19686C1(Test_S19686C1, "S19686C1", ABISELECT(48,28));

#else // __cplusplus

extern void _ZN8S19686C1C1Ev();
extern void _ZN8S19686C1D1Ev();
Name_Map name_map_S19686C1[] = {
  NSPAIR(_ZN8S19686C1C1Ev),
  NSPAIR(_ZN8S19686C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19686C2_nt;
extern VTBL_ENTRY _ZTI11S19686C2_nt[];
static Base_Class bases_S19686C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19686C2_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
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19686C1[];
extern void _ZN8S19686C12v1Ev();
static  VTBL_ENTRY vtc_S19686C1[] = {
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI8S19686C1[0]),
  (VTBL_ENTRY)&_ZN8S19686C12v1Ev,
};
extern VTBL_ENTRY _ZTV8S19686C1[];
static  VTT_ENTRY vtt_S19686C1[] = {
  {&(_ZTV8S19686C1[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S19686C1[];
extern  VTBL_ENTRY _ZTV8S19686C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19686C1[];
Class_Descriptor cd_S19686C1 = {  "S19686C1", // class name
  bases_S19686C1, 1,
  &(vtc_S19686C1[0]), // expected_vtbl_contents
  &(vtt_S19686C1[0]), // expected_vtt_contents
  ABISELECT(48,28), // object size
  NSPAIRA(_ZTI8S19686C1),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S19686C1),4, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19686C1),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  S21759C1  {
  void *s21759c1f0;
  int s21759c1f1[2];
  void *s21759c1f2[11];
  void  mf21759c1(); // _ZN8S21759C19mf21759c1Ev
  virtual  ~S21759C1(); // _ZN8S21759C1D1Ev
  S21759C1(); // tgen
};
//SIG(1 S21759C1) C1{ vd m Fp Fi[2] Fp[11]}


void  S21759C1 ::mf21759c1(){}
 S21759C1 ::~S21759C1(){ note_dtor("S21759C1", this);}
S21759C1 ::S21759C1(){ note_ctor("S21759C1", this);} // tgen

static void Test_S21759C1()
{
  extern Class_Descriptor cd_S21759C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(15,16)];
    init_test(&cd_S21759C1, buf);
    S21759C1 *dp, &lv = *(dp=new (buf) S21759C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(112,60), "sizeof(S21759C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21759C1)");
    check_field_offset(lv, s21759c1f0, ABISELECT(8,4), "S21759C1.s21759c1f0");
    check_field_offset(lv, s21759c1f1, ABISELECT(16,8), "S21759C1.s21759c1f1");
    check_field_offset(lv, s21759c1f2, ABISELECT(24,16), "S21759C1.s21759c1f2");
    test_class_info(&lv, &cd_S21759C1);
    dp->~S21759C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21759C1(Test_S21759C1, "S21759C1", ABISELECT(112,60));

#else // __cplusplus

extern void _ZN8S21759C1C1Ev();
extern void _ZN8S21759C1D1Ev();
Name_Map name_map_S21759C1[] = {
  NSPAIR(_ZN8S21759C1C1Ev),
  NSPAIR(_ZN8S21759C1D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S21759C1[];
extern void _ZN8S21759C1D1Ev();
extern void _ZN8S21759C1D0Ev();
static  VTBL_ENTRY vtc_S21759C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S21759C1[0]),
  (VTBL_ENTRY)&_ZN8S21759C1D1Ev,
  (VTBL_ENTRY)&_ZN8S21759C1D0Ev,
};
extern VTBL_ENTRY _ZTI8S21759C1[];
extern  VTBL_ENTRY _ZTV8S21759C1[];
Class_Descriptor cd_S21759C1 = {  "S21759C1", // class name
  0,0,//no base classes
  &(vtc_S21759C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(112,60), // object size
  NSPAIRA(_ZTI8S21759C1),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S21759C1),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  S13738C1  {
  __tsi64 s13738c1f0;
  int s13738c1f1;
  char s13738c1f2;
  void *s13738c1f3[4];
  int s13738c1f4[2];
};
//SIG(1 S13738C1) C1{ FL Fi Fc Fp[4] Fi[2]}



static void Test_S13738C1()
{
  {
    init_simple_test("S13738C1");
    S13738C1 lv;
    check2(sizeof(lv), ABISELECT(56,40), "sizeof(S13738C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S13738C1)");
    check_field_offset(lv, s13738c1f0, 0, "S13738C1.s13738c1f0");
    check_field_offset(lv, s13738c1f1, 8, "S13738C1.s13738c1f1");
    check_field_offset(lv, s13738c1f2, 12, "S13738C1.s13738c1f2");
    check_field_offset(lv, s13738c1f3, 16, "S13738C1.s13738c1f3");
    check_field_offset(lv, s13738c1f4, ABISELECT(48,32), "S13738C1.s13738c1f4");
  }
}
static Arrange_To_Call_Me vS13738C1(Test_S13738C1, "S13738C1", ABISELECT(56,40));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S14227C1  {
  void *s14227c1f0;
  int s14227c1f1;
  void *s14227c1f2;
  int s14227c1f3[2];
  char s14227c1f4;
  void *s14227c1f5;
};
//SIG(1 S14227C1) C1{ Fp Fi Fp Fi[2] Fc Fp}



static void Test_S14227C1()
{
  {
    init_simple_test("S14227C1");
    S14227C1 lv;
    check2(sizeof(lv), ABISELECT(48,28), "sizeof(S14227C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S14227C1)");
    check_field_offset(lv, s14227c1f0, 0, "S14227C1.s14227c1f0");
    check_field_offset(lv, s14227c1f1, ABISELECT(8,4), "S14227C1.s14227c1f1");
    check_field_offset(lv, s14227c1f2, ABISELECT(16,8), "S14227C1.s14227c1f2");
    check_field_offset(lv, s14227c1f3, ABISELECT(24,12), "S14227C1.s14227c1f3");
    check_field_offset(lv, s14227c1f4, ABISELECT(32,20), "S14227C1.s14227c1f4");
    check_field_offset(lv, s14227c1f5, ABISELECT(40,24), "S14227C1.s14227c1f5");
  }
}
static Arrange_To_Call_Me vS14227C1(Test_S14227C1, "S14227C1", ABISELECT(48,28));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S18704C1  {
  char  :0;
  virtual void  v1(); // _ZN8S18704C12v1Ev
  virtual void  v2(); // _ZN8S18704C12v2Ev
  virtual void  v3(); // _ZN8S18704C12v3Ev
  virtual void  v4(); // _ZN8S18704C12v4Ev
  virtual void  v5(); // _ZN8S18704C12v5Ev
  ~S18704C1(); // tgen
  S18704C1(); // tgen
};
//SIG(1 S18704C1) C1{ v1 v2 v3 v4 v5 Fc:0}


void  S18704C1 ::v1(){vfunc_called(this, "_ZN8S18704C12v1Ev");}
void  S18704C1 ::v2(){vfunc_called(this, "_ZN8S18704C12v2Ev");}
void  S18704C1 ::v3(){vfunc_called(this, "_ZN8S18704C12v3Ev");}
void  S18704C1 ::v4(){vfunc_called(this, "_ZN8S18704C12v4Ev");}
void  S18704C1 ::v5(){vfunc_called(this, "_ZN8S18704C12v5Ev");}
S18704C1 ::~S18704C1(){ note_dtor("S18704C1", this);} // tgen
S18704C1 ::S18704C1(){ note_ctor("S18704C1", this);} // tgen

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

#else // __cplusplus

extern void _ZN8S18704C1C1Ev();
extern void _ZN8S18704C1D1Ev();
Name_Map name_map_S18704C1[] = {
  NSPAIR(_ZN8S18704C1C1Ev),
  NSPAIR(_ZN8S18704C1D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S18704C1[];
extern void _ZN8S18704C12v1Ev();
extern void _ZN8S18704C12v2Ev();
extern void _ZN8S18704C12v3Ev();
extern void _ZN8S18704C12v4Ev();
extern void _ZN8S18704C12v5Ev();
static  VTBL_ENTRY vtc_S18704C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S18704C1[0]),
  (VTBL_ENTRY)&_ZN8S18704C12v1Ev,
  (VTBL_ENTRY)&_ZN8S18704C12v2Ev,
  (VTBL_ENTRY)&_ZN8S18704C12v3Ev,
  (VTBL_ENTRY)&_ZN8S18704C12v4Ev,
  (VTBL_ENTRY)&_ZN8S18704C12v5Ev,
};
extern VTBL_ENTRY _ZTI8S18704C1[];
extern  VTBL_ENTRY _ZTV8S18704C1[];
Class_Descriptor cd_S18704C1 = {  "S18704C1", // class name
  0,0,//no base classes
  &(vtc_S18704C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S18704C1),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S18704C1),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  S17772C1  {
  void *s17772c1f0;
  int s17772c1f1[2];
  char s17772c1f2;
  void *s17772c1f3[6];
  void  mf17772c1(); // _ZN8S17772C19mf17772c1Ev
};
//SIG(1 S17772C1) C1{ m Fp Fi[2] Fc Fp[6]}


void  S17772C1 ::mf17772c1(){}

static void Test_S17772C1()
{
  {
    init_simple_test("S17772C1");
    S17772C1 lv;
    check2(sizeof(lv), ABISELECT(72,40), "sizeof(S17772C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S17772C1)");
    check_field_offset(lv, s17772c1f0, 0, "S17772C1.s17772c1f0");
    check_field_offset(lv, s17772c1f1, ABISELECT(8,4), "S17772C1.s17772c1f1");
    check_field_offset(lv, s17772c1f2, ABISELECT(16,12), "S17772C1.s17772c1f2");
    check_field_offset(lv, s17772c1f3, ABISELECT(24,16), "S17772C1.s17772c1f3");
  }
}
static Arrange_To_Call_Me vS17772C1(Test_S17772C1, "S17772C1", ABISELECT(72,40));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S10925C1  {
  char s10925c1f0[4];
  short s10925c1f1[2];
  char s10925c1f2[20];
};
//SIG(1 S10925C1) C1{ Fc[4] Fs[2] Fc[20]}



static void Test_S10925C1()
{
  {
    init_simple_test("S10925C1");
    S10925C1 lv;
    check2(sizeof(lv), 28, "sizeof(S10925C1)");
    check2(__alignof__(lv), 2, "__alignof__(S10925C1)");
    check_field_offset(lv, s10925c1f0, 0, "S10925C1.s10925c1f0");
    check_field_offset(lv, s10925c1f1, 4, "S10925C1.s10925c1f1");
    check_field_offset(lv, s10925c1f2, 8, "S10925C1.s10925c1f2");
  }
}
static Arrange_To_Call_Me vS10925C1(Test_S10925C1, "S10925C1", 28);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S13546C2_nt  {
  int s13546c2f0;
};
//SIG(-1 S13546C2_nt) C1{ Fi}



//skip512 S13546C2_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S13546C1  {
  int s13546c1f0[5];
  ::S13546C2_nt s13546c1f1;
  int s13546c1f2[4];
};
//SIG(1 S13546C1) C1{ Fi[5] FC2{ Fi} Fi[4]}



static void Test_S13546C1()
{
  {
    init_simple_test("S13546C1");
    S13546C1 lv;
    check2(sizeof(lv), 40, "sizeof(S13546C1)");
    check2(__alignof__(lv), 4, "__alignof__(S13546C1)");
    check_field_offset(lv, s13546c1f0, 0, "S13546C1.s13546c1f0");
    check_field_offset(lv, s13546c1f1, 20, "S13546C1.s13546c1f1");
    check_field_offset(lv, s13546c1f2, 24, "S13546C1.s13546c1f2");
  }
}
static Arrange_To_Call_Me vS13546C1(Test_S13546C1, "S13546C1", 40);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S13360C1  {
  int s13360c1f0[3];
  __tsi64 s13360c1f1;
  void *s13360c1f2[3];
  __tsi64 s13360c1f3;
};
//SIG(1 S13360C1) C1{ Fi[3] FL Fp[3] FL}



static void Test_S13360C1()
{
  {
    init_simple_test("S13360C1");
    S13360C1 lv;
    check2(sizeof(lv), ABISELECT(56,40), "sizeof(S13360C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S13360C1)");
    check_field_offset(lv, s13360c1f0, 0, "S13360C1.s13360c1f0");
    check_field_offset(lv, s13360c1f1, ABISELECT(16,12), "S13360C1.s13360c1f1");
    check_field_offset(lv, s13360c1f2, ABISELECT(24,20), "S13360C1.s13360c1f2");
    check_field_offset(lv, s13360c1f3, ABISELECT(48,32), "S13360C1.s13360c1f3");
  }
}
static Arrange_To_Call_Me vS13360C1(Test_S13360C1, "S13360C1", ABISELECT(56,40));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S10842C1  {
  char s10842c1f0[34];
  int s10842c1f1;
  char s10842c1f2[130];
};
//SIG(1 S10842C1) C1{ Fc[34] Fi Fc[130]}



static void Test_S10842C1()
{
  {
    init_simple_test("S10842C1");
    S10842C1 lv;
    check2(sizeof(lv), 172, "sizeof(S10842C1)");
    check2(__alignof__(lv), 4, "__alignof__(S10842C1)");
    check_field_offset(lv, s10842c1f0, 0, "S10842C1.s10842c1f0");
    check_field_offset(lv, s10842c1f1, 36, "S10842C1.s10842c1f1");
    check_field_offset(lv, s10842c1f2, 40, "S10842C1.s10842c1f2");
  }
}
static Arrange_To_Call_Me vS10842C1(Test_S10842C1, "S10842C1", 172);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S10685C1  {
  char s10685c1f0[2];
  short s10685c1f1;
  int s10685c1f2;
  char s10685c1f3[4];
};
//SIG(1 S10685C1) C1{ Fc[2] Fs Fi Fc[4]}



static void Test_S10685C1()
{
  {
    init_simple_test("S10685C1");
    S10685C1 lv;
    check2(sizeof(lv), 12, "sizeof(S10685C1)");
    check2(__alignof__(lv), 4, "__alignof__(S10685C1)");
    check_field_offset(lv, s10685c1f0, 0, "S10685C1.s10685c1f0");
    check_field_offset(lv, s10685c1f1, 2, "S10685C1.s10685c1f1");
    check_field_offset(lv, s10685c1f2, 4, "S10685C1.s10685c1f2");
    check_field_offset(lv, s10685c1f3, 8, "S10685C1.s10685c1f3");
  }
}
static Arrange_To_Call_Me vS10685C1(Test_S10685C1, "S10685C1", 12);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S13764C1  {
  __tsi64 s13764c1f0;
  int s13764c1f1;
  short s13764c1f2;
  char s13764c1f3[242];
};
//SIG(1 S13764C1) C1{ FL Fi Fs Fc[242]}



static void Test_S13764C1()
{
  {
    init_simple_test("S13764C1");
    S13764C1 lv;
    check2(sizeof(lv), 256, "sizeof(S13764C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S13764C1)");
    check_field_offset(lv, s13764c1f0, 0, "S13764C1.s13764c1f0");
    check_field_offset(lv, s13764c1f1, 8, "S13764C1.s13764c1f1");
    check_field_offset(lv, s13764c1f2, 12, "S13764C1.s13764c1f2");
    check_field_offset(lv, s13764c1f3, 14, "S13764C1.s13764c1f3");
  }
}
static Arrange_To_Call_Me vS13764C1(Test_S13764C1, "S13764C1", 256);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S15532C2  {
  ::S2638C3_nt s15532c2f0;
};
//SIG(-1 S15532C2) C1{ FC2{ m Fi}}



static void Test_S15532C2()
{
  {
    init_simple_test("S15532C2");
    S15532C2 lv;
    check2(sizeof(lv), 4, "sizeof(S15532C2)");
    check2(__alignof__(lv), 4, "__alignof__(S15532C2)");
    check_field_offset(lv, s15532c2f0, 0, "S15532C2.s15532c2f0");
  }
}
static Arrange_To_Call_Me vS15532C2(Test_S15532C2, "S15532C2", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S15532C1  {
  ::S15532C2 s15532c1f0;
  void  mf15532c1(); // _ZN8S15532C19mf15532c1Ev
};
//SIG(1 S15532C1) C1{ m FC2{ FC3{ m Fi}}}


void  S15532C1 ::mf15532c1(){}

static void Test_S15532C1()
{
  {
    init_simple_test("S15532C1");
    S15532C1 lv;
    check2(sizeof(lv), 4, "sizeof(S15532C1)");
    check2(__alignof__(lv), 4, "__alignof__(S15532C1)");
    check_field_offset(lv, s15532c1f0, 0, "S15532C1.s15532c1f0");
  }
}
static Arrange_To_Call_Me vS15532C1(Test_S15532C1, "S15532C1", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S17836C1  {
  void *s17836c1f0;
  __tsi64 s17836c1f1[2];
  int s17836c1f2[4];
  void  mf17836c1(); // _ZN8S17836C19mf17836c1Ev
};
//SIG(1 S17836C1) C1{ m Fp FL[2] Fi[4]}


void  S17836C1 ::mf17836c1(){}

static void Test_S17836C1()
{
  {
    init_simple_test("S17836C1");
    S17836C1 lv;
    check2(sizeof(lv), ABISELECT(40,36), "sizeof(S17836C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S17836C1)");
    check_field_offset(lv, s17836c1f0, 0, "S17836C1.s17836c1f0");
    check_field_offset(lv, s17836c1f1, ABISELECT(8,4), "S17836C1.s17836c1f1");
    check_field_offset(lv, s17836c1f2, ABISELECT(24,20), "S17836C1.s17836c1f2");
  }
}
static Arrange_To_Call_Me vS17836C1(Test_S17836C1, "S17836C1", ABISELECT(40,36));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S12229C1  {
  int s12229c1f0;
  char s12229c1f1[15];
  int s12229c1f2;
  char s12229c1f3;
};
//SIG(1 S12229C1) C1{ Fi Fc[15] Fi Fc}



static void Test_S12229C1()
{
  {
    init_simple_test("S12229C1");
    S12229C1 lv;
    check2(sizeof(lv), 28, "sizeof(S12229C1)");
    check2(__alignof__(lv), 4, "__alignof__(S12229C1)");
    check_field_offset(lv, s12229c1f0, 0, "S12229C1.s12229c1f0");
    check_field_offset(lv, s12229c1f1, 4, "S12229C1.s12229c1f1");
    check_field_offset(lv, s12229c1f2, 20, "S12229C1.s12229c1f2");
    check_field_offset(lv, s12229c1f3, 24, "S12229C1.s12229c1f3");
  }
}
static Arrange_To_Call_Me vS12229C1(Test_S12229C1, "S12229C1", 28);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S18628C1  {
  int s18628c1f0;
  short s18628c1f1;
  virtual void  v1(); // _ZN8S18628C12v1Ev
  virtual void  v2(); // _ZN8S18628C12v2Ev
  virtual void  v3(); // _ZN8S18628C12v3Ev
  ~S18628C1(); // tgen
  S18628C1(); // tgen
};
//SIG(1 S18628C1) C1{ v1 v2 v3 Fi Fs}


void  S18628C1 ::v1(){vfunc_called(this, "_ZN8S18628C12v1Ev");}
void  S18628C1 ::v2(){vfunc_called(this, "_ZN8S18628C12v2Ev");}
void  S18628C1 ::v3(){vfunc_called(this, "_ZN8S18628C12v3Ev");}
S18628C1 ::~S18628C1(){ note_dtor("S18628C1", this);} // tgen
S18628C1 ::S18628C1(){ note_ctor("S18628C1", this);} // tgen

static void Test_S18628C1()
{
  extern Class_Descriptor cd_S18628C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S18628C1, buf);
    S18628C1 *dp, &lv = *(dp=new (buf) S18628C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S18628C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18628C1)");
    check_field_offset(lv, s18628c1f0, ABISELECT(8,4), "S18628C1.s18628c1f0");
    check_field_offset(lv, s18628c1f1, ABISELECT(12,8), "S18628C1.s18628c1f1");
    test_class_info(&lv, &cd_S18628C1);
    dp->~S18628C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS18628C1(Test_S18628C1, "S18628C1", ABISELECT(16,12));

#else // __cplusplus

extern void _ZN8S18628C1C1Ev();
extern void _ZN8S18628C1D1Ev();
Name_Map name_map_S18628C1[] = {
  NSPAIR(_ZN8S18628C1C1Ev),
  NSPAIR(_ZN8S18628C1D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S18628C1[];
extern void _ZN8S18628C12v1Ev();
extern void _ZN8S18628C12v2Ev();
extern void _ZN8S18628C12v3Ev();
static  VTBL_ENTRY vtc_S18628C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S18628C1[0]),
  (VTBL_ENTRY)&_ZN8S18628C12v1Ev,
  (VTBL_ENTRY)&_ZN8S18628C12v2Ev,
  (VTBL_ENTRY)&_ZN8S18628C12v3Ev,
};
extern VTBL_ENTRY _ZTI8S18628C1[];
extern  VTBL_ENTRY _ZTV8S18628C1[];
Class_Descriptor cd_S18628C1 = {  "S18628C1", // class name
  0,0,//no base classes
  &(vtc_S18628C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI8S18628C1),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S18628C1),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  S11343C1  {
  ::S15532C2 s11343c1f0;
};
//SIG(1 S11343C1) C1{ FC2{ FC3{ m Fi}}}



static void Test_S11343C1()
{
  {
    init_simple_test("S11343C1");
    S11343C1 lv;
    check2(sizeof(lv), 4, "sizeof(S11343C1)");
    check2(__alignof__(lv), 4, "__alignof__(S11343C1)");
    check_field_offset(lv, s11343c1f0, 0, "S11343C1.s11343c1f0");
  }
}
static Arrange_To_Call_Me vS11343C1(Test_S11343C1, "S11343C1", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S14812C1  {
  short s14812c1f0;
  int s14812c1f1;
  void *s14812c1f2;
  char s14812c1f3[2];
};
//SIG(1 S14812C1) C1{ Fs Fi Fp Fc[2]}



static void Test_S14812C1()
{
  {
    init_simple_test("S14812C1");
    S14812C1 lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S14812C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S14812C1)");
    check_field_offset(lv, s14812c1f0, 0, "S14812C1.s14812c1f0");
    check_field_offset(lv, s14812c1f1, 4, "S14812C1.s14812c1f1");
    check_field_offset(lv, s14812c1f2, 8, "S14812C1.s14812c1f2");
    check_field_offset(lv, s14812c1f3, ABISELECT(16,12), "S14812C1.s14812c1f3");
  }
}
static Arrange_To_Call_Me vS14812C1(Test_S14812C1, "S14812C1", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S13043C1  {
  int s13043c1f0[2];
  char s13043c1f1[401];
};
//SIG(1 S13043C1) C1{ Fi[2] Fc[401]}



static void Test_S13043C1()
{
  {
    init_simple_test("S13043C1");
    S13043C1 lv;
    check2(sizeof(lv), 412, "sizeof(S13043C1)");
    check2(__alignof__(lv), 4, "__alignof__(S13043C1)");
    check_field_offset(lv, s13043c1f0, 0, "S13043C1.s13043c1f0");
    check_field_offset(lv, s13043c1f1, 8, "S13043C1.s13043c1f1");
  }
}
static Arrange_To_Call_Me vS13043C1(Test_S13043C1, "S13043C1", 412);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S10942C1  {
  char s10942c1f0[483];
  int s10942c1f1[2];
};
//SIG(1 S10942C1) C1{ Fc[483] Fi[2]}



static void Test_S10942C1()
{
  {
    init_simple_test("S10942C1");
    S10942C1 lv;
    check2(sizeof(lv), 492, "sizeof(S10942C1)");
    check2(__alignof__(lv), 4, "__alignof__(S10942C1)");
    check_field_offset(lv, s10942c1f0, 0, "S10942C1.s10942c1f0");
    check_field_offset(lv, s10942c1f1, 484, "S10942C1.s10942c1f1");
  }
}
static Arrange_To_Call_Me vS10942C1(Test_S10942C1, "S10942C1", 492);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S10820C1  {
  char s10820c1f0[32];
  int s10820c1f1[2];
};
//SIG(1 S10820C1) C1{ Fc[32] Fi[2]}



static void Test_S10820C1()
{
  {
    init_simple_test("S10820C1");
    S10820C1 lv;
    check2(sizeof(lv), 40, "sizeof(S10820C1)");
    check2(__alignof__(lv), 4, "__alignof__(S10820C1)");
    check_field_offset(lv, s10820c1f0, 0, "S10820C1.s10820c1f0");
    check_field_offset(lv, s10820c1f1, 32, "S10820C1.s10820c1f1");
  }
}
static Arrange_To_Call_Me vS10820C1(Test_S10820C1, "S10820C1", 40);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S13534C1  {
  int s13534c1f0[5];
  char s13534c1f1[44];
};
//SIG(1 S13534C1) C1{ Fi[5] Fc[44]}



static void Test_S13534C1()
{
  {
    init_simple_test("S13534C1");
    S13534C1 lv;
    check2(sizeof(lv), 64, "sizeof(S13534C1)");
    check2(__alignof__(lv), 4, "__alignof__(S13534C1)");
    check_field_offset(lv, s13534c1f0, 0, "S13534C1.s13534c1f0");
    check_field_offset(lv, s13534c1f1, 20, "S13534C1.s13534c1f1");
  }
}
static Arrange_To_Call_Me vS13534C1(Test_S13534C1, "S13534C1", 64);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S10667C1  {
  char s10667c1f0[2];
  int s10667c1f1[2];
};
//SIG(1 S10667C1) C1{ Fc[2] Fi[2]}



static void Test_S10667C1()
{
  {
    init_simple_test("S10667C1");
    S10667C1 lv;
    check2(sizeof(lv), 12, "sizeof(S10667C1)");
    check2(__alignof__(lv), 4, "__alignof__(S10667C1)");
    check_field_offset(lv, s10667c1f0, 0, "S10667C1.s10667c1f0");
    check_field_offset(lv, s10667c1f1, 4, "S10667C1.s10667c1f1");
  }
}
static Arrange_To_Call_Me vS10667C1(Test_S10667C1, "S10667C1", 12);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S13497C1  {
  int s13497c1f0[4];
  void *s13497c1f1;
  __tsi64 s13497c1f2;
};
//SIG(1 S13497C1) C1{ Fi[4] Fp FL}



static void Test_S13497C1()
{
  {
    init_simple_test("S13497C1");
    S13497C1 lv;
    check2(sizeof(lv), ABISELECT(32,28), "sizeof(S13497C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S13497C1)");
    check_field_offset(lv, s13497c1f0, 0, "S13497C1.s13497c1f0");
    check_field_offset(lv, s13497c1f1, 16, "S13497C1.s13497c1f1");
    check_field_offset(lv, s13497c1f2, ABISELECT(24,20), "S13497C1.s13497c1f2");
  }
}
static Arrange_To_Call_Me vS13497C1(Test_S13497C1, "S13497C1", ABISELECT(32,28));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S14556C1  {
  void *s14556c1f0[2];
  int s14556c1f1[9];
};
//SIG(1 S14556C1) C1{ Fp[2] Fi[9]}



static void Test_S14556C1()
{
  {
    init_simple_test("S14556C1");
    S14556C1 lv;
    check2(sizeof(lv), ABISELECT(56,44), "sizeof(S14556C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S14556C1)");
    check_field_offset(lv, s14556c1f0, 0, "S14556C1.s14556c1f0");
    check_field_offset(lv, s14556c1f1, ABISELECT(16,8), "S14556C1.s14556c1f1");
  }
}
static Arrange_To_Call_Me vS14556C1(Test_S14556C1, "S14556C1", ABISELECT(56,44));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S16573C1  {
  int s16573c1f0;
  char s16573c1f1;
  short s16573c1f2;
  void  mf16573c1(); // _ZN8S16573C19mf16573c1Ev
};
//SIG(1 S16573C1) C1{ m Fi Fc Fs}


void  S16573C1 ::mf16573c1(){}

static void Test_S16573C1()
{
  {
    init_simple_test("S16573C1");
    S16573C1 lv;
    check2(sizeof(lv), 8, "sizeof(S16573C1)");
    check2(__alignof__(lv), 4, "__alignof__(S16573C1)");
    check_field_offset(lv, s16573c1f0, 0, "S16573C1.s16573c1f0");
    check_field_offset(lv, s16573c1f1, 4, "S16573C1.s16573c1f1");
    check_field_offset(lv, s16573c1f2, 6, "S16573C1.s16573c1f2");
  }
}
static Arrange_To_Call_Me vS16573C1(Test_S16573C1, "S16573C1", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S13673C1  {
  __tsi64 s13673c1f0;
  char s13673c1f1[56];
};
//SIG(1 S13673C1) C1{ FL Fc[56]}



static void Test_S13673C1()
{
  {
    init_simple_test("S13673C1");
    S13673C1 lv;
    check2(sizeof(lv), 64, "sizeof(S13673C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S13673C1)");
    check_field_offset(lv, s13673c1f0, 0, "S13673C1.s13673c1f0");
    check_field_offset(lv, s13673c1f1, 8, "S13673C1.s13673c1f1");
  }
}
static Arrange_To_Call_Me vS13673C1(Test_S13673C1, "S13673C1", 64);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S14745C1  {
  void *s14745c1f0[9];
  int s14745c1f1;
};
//SIG(1 S14745C1) C1{ Fp[9] Fi}



static void Test_S14745C1()
{
  {
    init_simple_test("S14745C1");
    S14745C1 lv;
    check2(sizeof(lv), ABISELECT(80,40), "sizeof(S14745C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S14745C1)");
    check_field_offset(lv, s14745c1f0, 0, "S14745C1.s14745c1f0");
    check_field_offset(lv, s14745c1f1, ABISELECT(72,36), "S14745C1.s14745c1f1");
  }
}
static Arrange_To_Call_Me vS14745C1(Test_S14745C1, "S14745C1", ABISELECT(80,40));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S14032C1  {
  __tsi64 s14032c1f0[6];
  long s14032c1f1;
};
//SIG(1 S14032C1) C1{ FL[6] Fl}



static void Test_S14032C1()
{
  {
    init_simple_test("S14032C1");
    S14032C1 lv;
    check2(sizeof(lv), ABISELECT(56,52), "sizeof(S14032C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S14032C1)");
    check_field_offset(lv, s14032c1f0, 0, "S14032C1.s14032c1f0");
    check_field_offset(lv, s14032c1f1, 48, "S14032C1.s14032c1f1");
  }
}
static Arrange_To_Call_Me vS14032C1(Test_S14032C1, "S14032C1", ABISELECT(56,52));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S10775C1  {
  char s10775c1f0[21];
};
//SIG(1 S10775C1) C1{ Fc[21]}



static void Test_S10775C1()
{
  {
    init_simple_test("S10775C1");
    S10775C1 lv;
    check2(sizeof(lv), 21, "sizeof(S10775C1)");
    check2(__alignof__(lv), 1, "__alignof__(S10775C1)");
    check_field_offset(lv, s10775c1f0, 0, "S10775C1.s10775c1f0");
  }
}
static Arrange_To_Call_Me vS10775C1(Test_S10775C1, "S10775C1", 21);

#else // __cplusplus

#endif // __cplusplus

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

